diff options
66 files changed, 0 insertions, 12872 deletions
diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 4546b619..00000000 --- a/AUTHORS +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | Luis Figueiredo (stdio@netc.pt) | ||
2 | Main Programmer, designer | ||
3 | |||
4 | Christian Grothoff (christian@grothoff.org) | ||
5 | Adaptation for GNUnet (work in progress) | ||
6 | |||
7 | People who contributed: | ||
8 | Joćo Luis Marques (lamego@ptlink.net) | ||
9 | minor bug reported (redirectors, stdout) | ||
10 | 'oddsock' (oddsock@oddsock.org) | ||
11 | Licensing tip, and minor bug reported (segv in querystring) | ||
12 | Rocco Carbone (rocco@tecsiel.it) | ||
13 | Return code for web_server_run tip | ||
14 | Johannes E. Schindelin (Johannes.Schindelin@gmx.de) | ||
15 | Spell checking, Makefile portability, and security 'How do I create my own certificate?' | ||
16 | bugfixes, examples hello world! | ||
17 | Richard Offer (offer@sgi.com) | ||
18 | checkboxes, (multiple variables) tip | ||
19 | Sven Anders (anders@anduras.de) | ||
20 | new web_client_setcookie() | ||
21 | Hilobok Andrew (han@km.if.ua) | ||
22 | FreeBSD portability | ||
23 | |||
24 | #linuxhelp @ ptnet.org | ||
25 | |||
26 | Rui - to let me know the existence of strftime (yeah i didn't knew) | ||
27 | Joćo Luis Marques Pinto - a problem with redirection (stdout & exit()); | ||
diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index f0661cd6..00000000 --- a/ChangeLog +++ /dev/null | |||
@@ -1,245 +0,0 @@ | |||
1 | Fri Aug 18 15:21:30 PDT 2006 | ||
2 | Starting to adopt the code to the GNUnet build system. | ||
3 | Applied patch to allow for shutdown. | ||
4 | |||
5 | 0.5.3 | ||
6 | Wen Apr 28 14:52:43 GMT 2004 | ||
7 | Luis Figueiredo -- Long time no see, i've decided to check one mail dated from released version 0.5.2, was about cookies | ||
8 | it seems that was no problem to me, but i made a minor changes anyway | ||
9 | void web_client_setcookie(char *name, char *value, char *timeoutf, char *path, char *domain, int secure) | ||
10 | path and domain, can be called as "" for disable, instead of previous only, NULL that disables the domain and path | ||
11 | Tue Jan 13 18:43:11 GMT 2004 | ||
12 | Luis Figueiredo -- I've put a prefix in each internal function "__ILWS_" | ||
13 | |||
14 | Wen Oct 22 18:38:52 GMT 2003 | ||
15 | Luis Figueiredo -- Applied some changes reported by (freebsd port): Hilobok Andrew (han@km.if.ua), added Last-Modified on lws_list(); improved file handling | ||
16 | |||
17 | Thu Sep 25 13:11:21 GMT 2003 | ||
18 | Luis Figueiredo -- Minor change the ClientInfo->request also gives the '/' (for lws_list) | ||
19 | |||
20 | Wen Sep 24 23:02:51 GMT 2003 | ||
21 | Luis Figueiredo -- Corrected some code (for portability) reported by Hilobok Andrew (han@km.if.ua) | ||
22 | 0.5.2 | ||
23 | Thu Sep 18 21:33:05 GMT 2003 | ||
24 | Luis Figueiredo -- Changed function set_EGApalette to web_client_gifsetpalette("filename.act oe "EGA");, and web_client_outputgif to web_client_gifoutput | ||
25 | (sorry for usual users of web_client_gif* :P) | ||
26 | |||
27 | Sun Sep 14 22:29:02 GMT 2003 | ||
28 | Luis Figueiredo -- new functions added (web_server_aliasdir, web_server_useMIMEfile, web_client_contenttype); | ||
29 | |||
30 | 0.5.1 | ||
31 | Wen Sep 10 17:56:14 GMT 2003 | ||
32 | Luis Figueiredo -- Code clean up, new error system! | ||
33 | |||
34 | Sex Sep 05 19:12:14 GMT 2003 | ||
35 | Luis Figueiredo -- improved the function tmpfname, added documentation to section security | ||
36 | |||
37 | Sex Sep 05 06:16:01 GMT 2003 | ||
38 | Luis Figueiredo -- i have lie down late, lately :o), well add_oustream prototipe changed to handle flock (filelock) | ||
39 | to avoid race condition on temorary files, added the util funtion for winnt flock | ||
40 | |||
41 | -- changed way to log "stetic?" | ||
42 | |||
43 | -- calculate and outputs Content-rage and Content-length if the get handler has the WS_USELEN turned on | ||
44 | |||
45 | Wen Sep 03 05:57:11 GMT 2003 | ||
46 | Luis Figueiredo -- one day after (almost literaly), corrected something in ClientInfo->Cookie(), | ||
47 | And an new feature to web_client_setcookie, this function can now be called after end of headers. | ||
48 | |||
49 | Tue Sep 02 05:28:11 GMT 2003 | ||
50 | Luis Figueiredo -- oh my!, nice hour for coding, finished 206 (partial content) resuming (Content-range:) | ||
51 | |||
52 | Mon Sep 01 19:35:32 GMT 2003 | ||
53 | Luis Figueiredo -- now output header : "Content-length:" | ||
54 | |||
55 | Mon Sep 01 06:22:21 GMT 2003 | ||
56 | Luis Figueiredo -- read_client optimized for speed (select removed, non_block sockets only) | ||
57 | |||
58 | Sex Aug 29 16:07:15 GMT 2003 | ||
59 | Luis Figueiredo -- Corrected a bug on output_client() (writetemp) if the lib doesn't output (EAGAIN) the function | ||
60 | was returning, and retry using local variable writetemp (reading new data), now fseeks to last data written | ||
61 | |||
62 | Fri Aug 22 15:20:31 GMT 2003 | ||
63 | Luis Figueiredo -- removed engine.h from help server (read the source if you want to know how it works), some changes in web_server_getconf! | ||
64 | |||
65 | Thu Aug 15 16:59:04 GMT 2003 | ||
66 | Luis Figueiredo -- New functions and flag, flag is WS_DYNVAR (handler), to use dynamic variables on data ouput | ||
67 | web_client_setvar, web_client_delvar , web_client_getvar, exchanges "$variable;" into 'variable' value | ||
68 | previous defined with web_client_setvar("variable","something"); | ||
69 | |||
70 | 0.5.0 | ||
71 | |||
72 | Wen Jul 30 03:45:28 GMT 2003 | ||
73 | Luis Figueiredo -- IE 5.0 was confusing me with no \r\n\r\n after post data, i solved the problem using content-length value | ||
74 | changed errno (on output_client) to WSAGetLastError() on windows (#ifdef WIN32) | ||
75 | |||
76 | Fri Jul 25 06:10:03 GMT 2003 | ||
77 | Luis Figueiredo -- Work around outgif.c, to support transparency | ||
78 | |||
79 | Wen Jul 21 20:13:12 GMT 2003 | ||
80 | Luis Figueiredo -- Added set_gifEGApalette(), and global var GLOBALGIFPAL for web_client_outputgif(); | ||
81 | |||
82 | Tue Jul 15 15:31:10 GMT 2003 | ||
83 | Luis Figueiredo -- Start develop the config file, added some new elements to struct server, Added a ClientInfo->Conf( to get entries from config file ) | ||
84 | |||
85 | Thu Apr 10 14:11:31 GMT 2003 | ||
86 | Luis Figueiredo -- Some changes on web_client_setcookie() made by Sven Anders <anders@anduras.de> applied | ||
87 | |||
88 | Thu Apr 10 14:11:34 GMT 2003 | ||
89 | Luis Figueiredo -- Some bugfixes reported by (http://www.stanford.edu/~engler) Ken Ashcraft <kash@stanford.edu> | ||
90 | |||
91 | 0.4.1 | ||
92 | |||
93 | Thu Mar 20 14:35:23 GMT 2003 | ||
94 | Luis Figueiredo -- Fuck war! :o), minor Changes in help server | ||
95 | |||
96 | Wen Mar 19 21:46:32 GMT 2003 | ||
97 | Luis Figueiredo -- new features for checkbox (or multiple variables) ClientInfo->Query("#xpto") returns the number of references to xpto | ||
98 | ClientInfo->Query("xpto") gives one value and fetches to another; if "#xpto" is bigger than one, "xpto" called twice will be diferent | ||
99 | |||
100 | Fri Mar 07 11:29:12 GMT 2003 | ||
101 | Luis Figueiredo -- Added the extern "C" {} to web_server.h | ||
102 | |||
103 | 0.4.0 // new features and fixes (new version) | ||
104 | |||
105 | Wen Feb 12 16:23:13 GMT 2003 | ||
106 | Luis Figueiredo -- Added Cookie example, and Johannes E. Schindelin entered on project (officialy) | ||
107 | |||
108 | Mon Feb 09 17:24:45 GMT 2003 | ||
109 | Luis Figueiredo -- web_client_setcookie(); done, Changed ClientInfo->Header(),Post(),Query(); when is called with | ||
110 | NULL argument, this function returns whole client header; | ||
111 | Added ClientInfo->Cookie(); | ||
112 | |||
113 | Wen Feb 05 22:12:03 GMT 2003 | ||
114 | Luis Figueiredo -- Start to develop web_client_setcookie(); | ||
115 | |||
116 | Fri Jan 31 05:24:31 GMT 2003 | ||
117 | Johannes E. Schindelin (patch) -- More spell checking (even in the code, heh!) client.h, client.c, examples.html functions.html info.html security.html | ||
118 | He also added an example (hello_world) | ||
119 | bugfix on clientinfo.c: post data and query data! | ||
120 | Sun Jan 26 21:22:34 GMT 2003 | ||
121 | Luis Figueiredo -- Change the order of ChangeLog (this file) (was last version on Bottom) | ||
122 | |||
123 | Thu Jan 23 17:10:11 GMT 2003 | ||
124 | Luis Figueiredo -- Patch from Johannes E. Schindelin, spell checking and make file portabilitie | ||
125 | |||
126 | 0.3.5 | ||
127 | |||
128 | Mon Jan 20 01:43:45 GMT 2003 | ||
129 | Luis Figueiredo -- Changed the return codes from web_server_run() (Rocco Carbone [rocco@tecsiel.it] ideia), and some minor fix's on socket.c | ||
130 | |||
131 | Sat Jan 18 18:31:23 GMT 2003 | ||
132 | Luis Figueiredo -- Corrected a querystring parser error(thanks 'oddsock') | ||
133 | |||
134 | 0.3.4 | ||
135 | |||
136 | Fri Dec 27 20:01:04 GMT 2002 | ||
137 | Luis Figueiredo -- using closesocket (when deleting client) on WIN32, when client lost the connection the stat is (5) (5 delete client) | ||
138 | |||
139 | Thu Dec 26 23:16:21 GMT 2002 | ||
140 | Luis Figueiredo -- (outstream.[ch]) Added an argument to add_outstream (char *fname); since the lib have a problem with atributing to stdout (*stdout=*nfile), | ||
141 | changed the tmpfile(), to 'tmpnam' (tmpfname) and use freopen; (unlinking fname when deleting outstreams) | ||
142 | 0.3.3 | ||
143 | |||
144 | Wen Nov 27 18:16:34 GMT 2002 | ||
145 | Luis Figueiredo -- Produces output files to projectroot/bin | ||
146 | |||
147 | Wen Nov 27 00:24:31 GMT 2002 | ||
148 | Luis Figueiredo -- Built strncasecmp function (Win32 doesn't have) for using in strcasestr (MultiPart in clientinfo) | ||
149 | |||
150 | Mon Nov 25 16:16:23 GMT 2002 | ||
151 | Luis Figueiredo -- Help html's converted into header files, help server, doesn't need external files now, help.html directory moved to project root | ||
152 | |||
153 | Fri Nov 22 17:45:34 GMT 2002 | ||
154 | Luis Figueiredo -- Win32 project files and help server updated | ||
155 | |||
156 | Sat Nov 16 21:22:13 GMT 2002 | ||
157 | Luis Figueiredo -- Example SoundRecorder w/ new features | ||
158 | |||
159 | Fri Nov 15 20:38:48 GMT 2002 | ||
160 | Luis Figueiredo -- Mem checker added (case of low mem) | ||
161 | |||
162 | 0.3.2 | ||
163 | |||
164 | Fri Nov 15 11:11:50 GMT 2002 | ||
165 | Luis Figueiredo -- Added a new example (SoundRecorder) | ||
166 | |||
167 | Fri Nov 15 00:37:44 GMT 2002 | ||
168 | Luis Figueiredo -- Created make install | ||
169 | |||
170 | Thu Nov 14 19:45:47 GMT 2002 | ||
171 | Luis Figueiredo -- Changed client.c (now outputs 400 invalid request) | ||
172 | |||
173 | Wed Nov 13 23:39:46 GMT 2002 | ||
174 | Luis Figueiredo -- added a feature, (web_client_outputgif) using xvgifwr.c (from xv 3.10a) | ||
175 | module is callod outgif.c | ||
176 | |||
177 | Wed Nov 13 04:27:12 GMT 2002 | ||
178 | Luis Figueiredo -- Added a debug program (.pl) http butcher | ||
179 | |||
180 | Wed Nov 13 04:06:48 GMT 2002 | ||
181 | Luis Figueiredo -- Fixed up a minor bug on client read data, make rule dist (to create package on makefile), removed Hdrdate to new mydate (using strftime) | ||
182 | discard hextoi to using strtol(str,NULL,16) | ||
183 | 0.3.1 | ||
184 | |||
185 | Sun Nov 10 21:05:40 GMT 2002 | ||
186 | Luis Figueiredo -- Code cleanup, removed useless functions, developing documentation | ||
187 | |||
188 | Sun Nov 10 12:08:02 GMT 2002 | ||
189 | Luis Figueiredo -- Changed regex to fnmatch once again (regex was giving problems w/ portability, and fnmatch is easier to use for | ||
190 | newbies) | ||
191 | |||
192 | |||
193 | Thu Nov 7 20:05:48 GMT 2002 | ||
194 | Luis Figueiredo -- create module (utils.c) for base64decode, hextoi, strcasestr, Add documentation to example | ||
195 | |||
196 | |||
197 | Wed Nov 6 16:12:22 GMT 2002 | ||
198 | Luis Figueiredo -- Changed again way of determine that the client sent all data, it checks about 5 times if doesn't have new data, | ||
199 | then marks all data readed, ClientInfo upload files (MultiPart) done, wow, new logo, | ||
200 | supports (enctype='Multipart/form-data') (tested in lynx and netscape and IE) | ||
201 | |||
202 | Thu Oct 31 18:11:28 GMT 2002 | ||
203 | Luis Figueiredo -- Optimized functions Post,Header,Query // now holds the already queryied into a list, when it requests again | ||
204 | lib doesn't process request gives the saved data: ex: | ||
205 | if(ClientInfo->Query("queryval")) { // query val doesn't exists in list add | ||
206 | blah=atoi(ClientInfo->Query("queryval")); // return previous saved val that's on the list | ||
207 | }; | ||
208 | better for memory and speed optimizations | ||
209 | |||
210 | 0.3.0 and previous | ||
211 | |||
212 | Wed Oct 30 22:54:37 GMT 2002 | ||
213 | Luis Figueiredo -- Changed way of determine that the client sent all data | ||
214 | before: | ||
215 | if there is no more data then search \r\n\r\n in the hole data readed // wrong, multipart/form-data was not doing right now | ||
216 | now: | ||
217 | if there is no more data then if the last two bytes is \r\n then mark all readed and process // i think that need improvments | ||
218 | |||
219 | Mon Oct 14 20:20:05 GMT 2002 | ||
220 | Luis Figueiredo -- An example of a cgi handler was made, added the Date: header to server header | ||
221 | |||
222 | Mon Oct 7 16:56:15 GMT 2002 | ||
223 | Luis Figueiredo -- Repaired some safe bugs, Added vars to stats proposes, inserted an liblogo, added debug instructions | ||
224 | |||
225 | Wed Apr 10 20:02:55 GMT 2002 | ||
226 | Luis Figueiredo -- Make use of autoconf , removed open_memstream (doesn't work well w/ stdout structure on netbsd portability) | ||
227 | linux slack 7.1 uses "extern FILE *stdout", netbsd uses "extern FILE __sF[]" so i cannot make use of pointers | ||
228 | |||
229 | Mon Apr 8 15:04:31 GMT 2002 | ||
230 | Luis Figueiredo -- Oh my.. kurt cobain is dead :o), restructured the code, separated into various files | ||
231 | |||
232 | Wed Mar 27 18:59:10 GMT 2002 | ||
233 | Luis Figueiredo -- using regex instead of fnmatch(fnmatch only appears becouse of apache, i didn't knew it) | ||
234 | |||
235 | Mon Mar 25 14:46:13 GMT 2002 | ||
236 | Luis Figueiredo -- wow, one month later..., discard web_server_addstr, and now process the stdout to server | ||
237 | using a tmpfile for streaming (not so good, but :o)) | ||
238 | |||
239 | Mon Feb 25 06:27:58 GMT 2002 | ||
240 | Luis Figueiredo -- Many corrections and new functions were added, until today | ||
241 | |||
242 | Fri Dec 28 12:51:11 GMT 2001 | ||
243 | Luis Figueiredo -- I Corrected the input to handle only data when \n\r(twice) is arrived | ||
244 | |||
245 | |||
diff --git a/config.guess b/config.guess deleted file mode 100755 index 396482d6..00000000 --- a/config.guess +++ /dev/null | |||
@@ -1,1500 +0,0 @@ | |||
1 | #! /bin/sh | ||
2 | # Attempt to guess a canonical system name. | ||
3 | # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, | ||
4 | # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, | ||
5 | # Inc. | ||
6 | |||
7 | timestamp='2006-07-02' | ||
8 | |||
9 | # This file is free software; you can redistribute it and/or modify it | ||
10 | # under the terms of the GNU General Public License as published by | ||
11 | # the Free Software Foundation; either version 2 of the License, or | ||
12 | # (at your option) any later version. | ||
13 | # | ||
14 | # This program is distributed in the hope that it will be useful, but | ||
15 | # WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | # General Public License for more details. | ||
18 | # | ||
19 | # You should have received a copy of the GNU General Public License | ||
20 | # along with this program; if not, write to the Free Software | ||
21 | # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA | ||
22 | # 02110-1301, USA. | ||
23 | # | ||
24 | # As a special exception to the GNU General Public License, if you | ||
25 | # distribute this file as part of a program that contains a | ||
26 | # configuration script generated by Autoconf, you may include it under | ||
27 | # the same distribution terms that you use for the rest of that program. | ||
28 | |||
29 | |||
30 | # Originally written by Per Bothner <per@bothner.com>. | ||
31 | # Please send patches to <config-patches@gnu.org>. Submit a context | ||
32 | # diff and a properly formatted ChangeLog entry. | ||
33 | # | ||
34 | # This script attempts to guess a canonical system name similar to | ||
35 | # config.sub. If it succeeds, it prints the system name on stdout, and | ||
36 | # exits with 0. Otherwise, it exits with 1. | ||
37 | # | ||
38 | # The plan is that this can be called by configure scripts if you | ||
39 | # don't specify an explicit build system type. | ||
40 | |||
41 | me=`echo "$0" | sed -e 's,.*/,,'` | ||
42 | |||
43 | usage="\ | ||
44 | Usage: $0 [OPTION] | ||
45 | |||
46 | Output the configuration name of the system \`$me' is run on. | ||
47 | |||
48 | Operation modes: | ||
49 | -h, --help print this help, then exit | ||
50 | -t, --time-stamp print date of last modification, then exit | ||
51 | -v, --version print version number, then exit | ||
52 | |||
53 | Report bugs and patches to <config-patches@gnu.org>." | ||
54 | |||
55 | version="\ | ||
56 | GNU config.guess ($timestamp) | ||
57 | |||
58 | Originally written by Per Bothner. | ||
59 | Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 | ||
60 | Free Software Foundation, Inc. | ||
61 | |||
62 | This is free software; see the source for copying conditions. There is NO | ||
63 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." | ||
64 | |||
65 | help=" | ||
66 | Try \`$me --help' for more information." | ||
67 | |||
68 | # Parse command line | ||
69 | while test $# -gt 0 ; do | ||
70 | case $1 in | ||
71 | --time-stamp | --time* | -t ) | ||
72 | echo "$timestamp" ; exit ;; | ||
73 | --version | -v ) | ||
74 | echo "$version" ; exit ;; | ||
75 | --help | --h* | -h ) | ||
76 | echo "$usage"; exit ;; | ||
77 | -- ) # Stop option processing | ||
78 | shift; break ;; | ||
79 | - ) # Use stdin as input. | ||
80 | break ;; | ||
81 | -* ) | ||
82 | echo "$me: invalid option $1$help" >&2 | ||
83 | exit 1 ;; | ||
84 | * ) | ||
85 | break ;; | ||
86 | esac | ||
87 | done | ||
88 | |||
89 | if test $# != 0; then | ||
90 | echo "$me: too many arguments$help" >&2 | ||
91 | exit 1 | ||
92 | fi | ||
93 | |||
94 | trap 'exit 1' 1 2 15 | ||
95 | |||
96 | # CC_FOR_BUILD -- compiler used by this script. Note that the use of a | ||
97 | # compiler to aid in system detection is discouraged as it requires | ||
98 | # temporary files to be created and, as you can see below, it is a | ||
99 | # headache to deal with in a portable fashion. | ||
100 | |||
101 | # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still | ||
102 | # use `HOST_CC' if defined, but it is deprecated. | ||
103 | |||
104 | # Portable tmp directory creation inspired by the Autoconf team. | ||
105 | |||
106 | set_cc_for_build=' | ||
107 | trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; | ||
108 | trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; | ||
109 | : ${TMPDIR=/tmp} ; | ||
110 | { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || | ||
111 | { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || | ||
112 | { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || | ||
113 | { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; | ||
114 | dummy=$tmp/dummy ; | ||
115 | tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; | ||
116 | case $CC_FOR_BUILD,$HOST_CC,$CC in | ||
117 | ,,) echo "int x;" > $dummy.c ; | ||
118 | for c in cc gcc c89 c99 ; do | ||
119 | if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then | ||
120 | CC_FOR_BUILD="$c"; break ; | ||
121 | fi ; | ||
122 | done ; | ||
123 | if test x"$CC_FOR_BUILD" = x ; then | ||
124 | CC_FOR_BUILD=no_compiler_found ; | ||
125 | fi | ||
126 | ;; | ||
127 | ,,*) CC_FOR_BUILD=$CC ;; | ||
128 | ,*,*) CC_FOR_BUILD=$HOST_CC ;; | ||
129 | esac ; set_cc_for_build= ;' | ||
130 | |||
131 | # This is needed to find uname on a Pyramid OSx when run in the BSD universe. | ||
132 | # (ghazi@noc.rutgers.edu 1994-08-24) | ||
133 | if (test -f /.attbin/uname) >/dev/null 2>&1 ; then | ||
134 | PATH=$PATH:/.attbin ; export PATH | ||
135 | fi | ||
136 | |||
137 | UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown | ||
138 | UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown | ||
139 | UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown | ||
140 | UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown | ||
141 | |||
142 | # Note: order is significant - the case branches are not exclusive. | ||
143 | |||
144 | case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in | ||
145 | *:NetBSD:*:*) | ||
146 | # NetBSD (nbsd) targets should (where applicable) match one or | ||
147 | # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, | ||
148 | # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently | ||
149 | # switched to ELF, *-*-netbsd* would select the old | ||
150 | # object file format. This provides both forward | ||
151 | # compatibility and a consistent mechanism for selecting the | ||
152 | # object file format. | ||
153 | # | ||
154 | # Note: NetBSD doesn't particularly care about the vendor | ||
155 | # portion of the name. We always set it to "unknown". | ||
156 | sysctl="sysctl -n hw.machine_arch" | ||
157 | UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ | ||
158 | /usr/sbin/$sysctl 2>/dev/null || echo unknown)` | ||
159 | case "${UNAME_MACHINE_ARCH}" in | ||
160 | armeb) machine=armeb-unknown ;; | ||
161 | arm*) machine=arm-unknown ;; | ||
162 | sh3el) machine=shl-unknown ;; | ||
163 | sh3eb) machine=sh-unknown ;; | ||
164 | *) machine=${UNAME_MACHINE_ARCH}-unknown ;; | ||
165 | esac | ||
166 | # The Operating System including object format, if it has switched | ||
167 | # to ELF recently, or will in the future. | ||
168 | case "${UNAME_MACHINE_ARCH}" in | ||
169 | arm*|i386|m68k|ns32k|sh3*|sparc|vax) | ||
170 | eval $set_cc_for_build | ||
171 | if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | ||
172 | | grep __ELF__ >/dev/null | ||
173 | then | ||
174 | # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). | ||
175 | # Return netbsd for either. FIX? | ||
176 | os=netbsd | ||
177 | else | ||
178 | os=netbsdelf | ||
179 | fi | ||
180 | ;; | ||
181 | *) | ||
182 | os=netbsd | ||
183 | ;; | ||
184 | esac | ||
185 | # The OS release | ||
186 | # Debian GNU/NetBSD machines have a different userland, and | ||
187 | # thus, need a distinct triplet. However, they do not need | ||
188 | # kernel version information, so it can be replaced with a | ||
189 | # suitable tag, in the style of linux-gnu. | ||
190 | case "${UNAME_VERSION}" in | ||
191 | Debian*) | ||
192 | release='-gnu' | ||
193 | ;; | ||
194 | *) | ||
195 | release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` | ||
196 | ;; | ||
197 | esac | ||
198 | # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: | ||
199 | # contains redundant information, the shorter form: | ||
200 | # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. | ||
201 | echo "${machine}-${os}${release}" | ||
202 | exit ;; | ||
203 | *:OpenBSD:*:*) | ||
204 | UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` | ||
205 | echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} | ||
206 | exit ;; | ||
207 | *:ekkoBSD:*:*) | ||
208 | echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} | ||
209 | exit ;; | ||
210 | *:SolidBSD:*:*) | ||
211 | echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} | ||
212 | exit ;; | ||
213 | macppc:MirBSD:*:*) | ||
214 | echo powerpc-unknown-mirbsd${UNAME_RELEASE} | ||
215 | exit ;; | ||
216 | *:MirBSD:*:*) | ||
217 | echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} | ||
218 | exit ;; | ||
219 | alpha:OSF1:*:*) | ||
220 | case $UNAME_RELEASE in | ||
221 | *4.0) | ||
222 | UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` | ||
223 | ;; | ||
224 | *5.*) | ||
225 | UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` | ||
226 | ;; | ||
227 | esac | ||
228 | # According to Compaq, /usr/sbin/psrinfo has been available on | ||
229 | # OSF/1 and Tru64 systems produced since 1995. I hope that | ||
230 | # covers most systems running today. This code pipes the CPU | ||
231 | # types through head -n 1, so we only detect the type of CPU 0. | ||
232 | ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` | ||
233 | case "$ALPHA_CPU_TYPE" in | ||
234 | "EV4 (21064)") | ||
235 | UNAME_MACHINE="alpha" ;; | ||
236 | "EV4.5 (21064)") | ||
237 | UNAME_MACHINE="alpha" ;; | ||
238 | "LCA4 (21066/21068)") | ||
239 | UNAME_MACHINE="alpha" ;; | ||
240 | "EV5 (21164)") | ||
241 | UNAME_MACHINE="alphaev5" ;; | ||
242 | "EV5.6 (21164A)") | ||
243 | UNAME_MACHINE="alphaev56" ;; | ||
244 | "EV5.6 (21164PC)") | ||
245 | UNAME_MACHINE="alphapca56" ;; | ||
246 | "EV5.7 (21164PC)") | ||
247 | UNAME_MACHINE="alphapca57" ;; | ||
248 | "EV6 (21264)") | ||
249 | UNAME_MACHINE="alphaev6" ;; | ||
250 | "EV6.7 (21264A)") | ||
251 | UNAME_MACHINE="alphaev67" ;; | ||
252 | "EV6.8CB (21264C)") | ||
253 | UNAME_MACHINE="alphaev68" ;; | ||
254 | "EV6.8AL (21264B)") | ||
255 | UNAME_MACHINE="alphaev68" ;; | ||
256 | "EV6.8CX (21264D)") | ||
257 | UNAME_MACHINE="alphaev68" ;; | ||
258 | "EV6.9A (21264/EV69A)") | ||
259 | UNAME_MACHINE="alphaev69" ;; | ||
260 | "EV7 (21364)") | ||
261 | UNAME_MACHINE="alphaev7" ;; | ||
262 | "EV7.9 (21364A)") | ||
263 | UNAME_MACHINE="alphaev79" ;; | ||
264 | esac | ||
265 | # A Pn.n version is a patched version. | ||
266 | # A Vn.n version is a released version. | ||
267 | # A Tn.n version is a released field test version. | ||
268 | # A Xn.n version is an unreleased experimental baselevel. | ||
269 | # 1.2 uses "1.2" for uname -r. | ||
270 | echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` | ||
271 | exit ;; | ||
272 | Alpha\ *:Windows_NT*:*) | ||
273 | # How do we know it's Interix rather than the generic POSIX subsystem? | ||
274 | # Should we change UNAME_MACHINE based on the output of uname instead | ||
275 | # of the specific Alpha model? | ||
276 | echo alpha-pc-interix | ||
277 | exit ;; | ||
278 | 21064:Windows_NT:50:3) | ||
279 | echo alpha-dec-winnt3.5 | ||
280 | exit ;; | ||
281 | Amiga*:UNIX_System_V:4.0:*) | ||
282 | echo m68k-unknown-sysv4 | ||
283 | exit ;; | ||
284 | *:[Aa]miga[Oo][Ss]:*:*) | ||
285 | echo ${UNAME_MACHINE}-unknown-amigaos | ||
286 | exit ;; | ||
287 | *:[Mm]orph[Oo][Ss]:*:*) | ||
288 | echo ${UNAME_MACHINE}-unknown-morphos | ||
289 | exit ;; | ||
290 | *:OS/390:*:*) | ||
291 | echo i370-ibm-openedition | ||
292 | exit ;; | ||
293 | *:z/VM:*:*) | ||
294 | echo s390-ibm-zvmoe | ||
295 | exit ;; | ||
296 | *:OS400:*:*) | ||
297 | echo powerpc-ibm-os400 | ||
298 | exit ;; | ||
299 | arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) | ||
300 | echo arm-acorn-riscix${UNAME_RELEASE} | ||
301 | exit ;; | ||
302 | arm:riscos:*:*|arm:RISCOS:*:*) | ||
303 | echo arm-unknown-riscos | ||
304 | exit ;; | ||
305 | SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) | ||
306 | echo hppa1.1-hitachi-hiuxmpp | ||
307 | exit ;; | ||
308 | Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) | ||
309 | # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. | ||
310 | if test "`(/bin/universe) 2>/dev/null`" = att ; then | ||
311 | echo pyramid-pyramid-sysv3 | ||
312 | else | ||
313 | echo pyramid-pyramid-bsd | ||
314 | fi | ||
315 | exit ;; | ||
316 | NILE*:*:*:dcosx) | ||
317 | echo pyramid-pyramid-svr4 | ||
318 | exit ;; | ||
319 | DRS?6000:unix:4.0:6*) | ||
320 | echo sparc-icl-nx6 | ||
321 | exit ;; | ||
322 | DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) | ||
323 | case `/usr/bin/uname -p` in | ||
324 | sparc) echo sparc-icl-nx7; exit ;; | ||
325 | esac ;; | ||
326 | sun4H:SunOS:5.*:*) | ||
327 | echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` | ||
328 | exit ;; | ||
329 | sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) | ||
330 | echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` | ||
331 | exit ;; | ||
332 | i86pc:SunOS:5.*:*) | ||
333 | echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` | ||
334 | exit ;; | ||
335 | sun4*:SunOS:6*:*) | ||
336 | # According to config.sub, this is the proper way to canonicalize | ||
337 | # SunOS6. Hard to guess exactly what SunOS6 will be like, but | ||
338 | # it's likely to be more like Solaris than SunOS4. | ||
339 | echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` | ||
340 | exit ;; | ||
341 | sun4*:SunOS:*:*) | ||
342 | case "`/usr/bin/arch -k`" in | ||
343 | Series*|S4*) | ||
344 | UNAME_RELEASE=`uname -v` | ||
345 | ;; | ||
346 | esac | ||
347 | # Japanese Language versions have a version number like `4.1.3-JL'. | ||
348 | echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` | ||
349 | exit ;; | ||
350 | sun3*:SunOS:*:*) | ||
351 | echo m68k-sun-sunos${UNAME_RELEASE} | ||
352 | exit ;; | ||
353 | sun*:*:4.2BSD:*) | ||
354 | UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` | ||
355 | test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 | ||
356 | case "`/bin/arch`" in | ||
357 | sun3) | ||
358 | echo m68k-sun-sunos${UNAME_RELEASE} | ||
359 | ;; | ||
360 | sun4) | ||
361 | echo sparc-sun-sunos${UNAME_RELEASE} | ||
362 | ;; | ||
363 | esac | ||
364 | exit ;; | ||
365 | aushp:SunOS:*:*) | ||
366 | echo sparc-auspex-sunos${UNAME_RELEASE} | ||
367 | exit ;; | ||
368 | # The situation for MiNT is a little confusing. The machine name | ||
369 | # can be virtually everything (everything which is not | ||
370 | # "atarist" or "atariste" at least should have a processor | ||
371 | # > m68000). The system name ranges from "MiNT" over "FreeMiNT" | ||
372 | # to the lowercase version "mint" (or "freemint"). Finally | ||
373 | # the system name "TOS" denotes a system which is actually not | ||
374 | # MiNT. But MiNT is downward compatible to TOS, so this should | ||
375 | # be no problem. | ||
376 | atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) | ||
377 | echo m68k-atari-mint${UNAME_RELEASE} | ||
378 | exit ;; | ||
379 | atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) | ||
380 | echo m68k-atari-mint${UNAME_RELEASE} | ||
381 | exit ;; | ||
382 | *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) | ||
383 | echo m68k-atari-mint${UNAME_RELEASE} | ||
384 | exit ;; | ||
385 | milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) | ||
386 | echo m68k-milan-mint${UNAME_RELEASE} | ||
387 | exit ;; | ||
388 | hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) | ||
389 | echo m68k-hades-mint${UNAME_RELEASE} | ||
390 | exit ;; | ||
391 | *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) | ||
392 | echo m68k-unknown-mint${UNAME_RELEASE} | ||
393 | exit ;; | ||
394 | m68k:machten:*:*) | ||
395 | echo m68k-apple-machten${UNAME_RELEASE} | ||
396 | exit ;; | ||
397 | powerpc:machten:*:*) | ||
398 | echo powerpc-apple-machten${UNAME_RELEASE} | ||
399 | exit ;; | ||
400 | RISC*:Mach:*:*) | ||
401 | echo mips-dec-mach_bsd4.3 | ||
402 | exit ;; | ||
403 | RISC*:ULTRIX:*:*) | ||
404 | echo mips-dec-ultrix${UNAME_RELEASE} | ||
405 | exit ;; | ||
406 | VAX*:ULTRIX*:*:*) | ||
407 | echo vax-dec-ultrix${UNAME_RELEASE} | ||
408 | exit ;; | ||
409 | 2020:CLIX:*:* | 2430:CLIX:*:*) | ||
410 | echo clipper-intergraph-clix${UNAME_RELEASE} | ||
411 | exit ;; | ||
412 | mips:*:*:UMIPS | mips:*:*:RISCos) | ||
413 | eval $set_cc_for_build | ||
414 | sed 's/^ //' << EOF >$dummy.c | ||
415 | #ifdef __cplusplus | ||
416 | #include <stdio.h> /* for printf() prototype */ | ||
417 | int main (int argc, char *argv[]) { | ||
418 | #else | ||
419 | int main (argc, argv) int argc; char *argv[]; { | ||
420 | #endif | ||
421 | #if defined (host_mips) && defined (MIPSEB) | ||
422 | #if defined (SYSTYPE_SYSV) | ||
423 | printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); | ||
424 | #endif | ||
425 | #if defined (SYSTYPE_SVR4) | ||
426 | printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); | ||
427 | #endif | ||
428 | #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) | ||
429 | printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); | ||
430 | #endif | ||
431 | #endif | ||
432 | exit (-1); | ||
433 | } | ||
434 | EOF | ||
435 | $CC_FOR_BUILD -o $dummy $dummy.c && | ||
436 | dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && | ||
437 | SYSTEM_NAME=`$dummy $dummyarg` && | ||
438 | { echo "$SYSTEM_NAME"; exit; } | ||
439 | echo mips-mips-riscos${UNAME_RELEASE} | ||
440 | exit ;; | ||
441 | Motorola:PowerMAX_OS:*:*) | ||
442 | echo powerpc-motorola-powermax | ||
443 | exit ;; | ||
444 | Motorola:*:4.3:PL8-*) | ||
445 | echo powerpc-harris-powermax | ||
446 | exit ;; | ||
447 | Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) | ||
448 | echo powerpc-harris-powermax | ||
449 | exit ;; | ||
450 | Night_Hawk:Power_UNIX:*:*) | ||
451 | echo powerpc-harris-powerunix | ||
452 | exit ;; | ||
453 | m88k:CX/UX:7*:*) | ||
454 | echo m88k-harris-cxux7 | ||
455 | exit ;; | ||
456 | m88k:*:4*:R4*) | ||
457 | echo m88k-motorola-sysv4 | ||
458 | exit ;; | ||
459 | m88k:*:3*:R3*) | ||
460 | echo m88k-motorola-sysv3 | ||
461 | exit ;; | ||
462 | AViiON:dgux:*:*) | ||
463 | # DG/UX returns AViiON for all architectures | ||
464 | UNAME_PROCESSOR=`/usr/bin/uname -p` | ||
465 | if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] | ||
466 | then | ||
467 | if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ | ||
468 | [ ${TARGET_BINARY_INTERFACE}x = x ] | ||
469 | then | ||
470 | echo m88k-dg-dgux${UNAME_RELEASE} | ||
471 | else | ||
472 | echo m88k-dg-dguxbcs${UNAME_RELEASE} | ||
473 | fi | ||
474 | else | ||
475 | echo i586-dg-dgux${UNAME_RELEASE} | ||
476 | fi | ||
477 | exit ;; | ||
478 | M88*:DolphinOS:*:*) # DolphinOS (SVR3) | ||
479 | echo m88k-dolphin-sysv3 | ||
480 | exit ;; | ||
481 | M88*:*:R3*:*) | ||
482 | # Delta 88k system running SVR3 | ||
483 | echo m88k-motorola-sysv3 | ||
484 | exit ;; | ||
485 | XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) | ||
486 | echo m88k-tektronix-sysv3 | ||
487 | exit ;; | ||
488 | Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) | ||
489 | echo m68k-tektronix-bsd | ||
490 | exit ;; | ||
491 | *:IRIX*:*:*) | ||
492 | echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` | ||
493 | exit ;; | ||
494 | ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. | ||
495 | echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id | ||
496 | exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' | ||
497 | i*86:AIX:*:*) | ||
498 | echo i386-ibm-aix | ||
499 | exit ;; | ||
500 | ia64:AIX:*:*) | ||
501 | if [ -x /usr/bin/oslevel ] ; then | ||
502 | IBM_REV=`/usr/bin/oslevel` | ||
503 | else | ||
504 | IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} | ||
505 | fi | ||
506 | echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} | ||
507 | exit ;; | ||
508 | *:AIX:2:3) | ||
509 | if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then | ||
510 | eval $set_cc_for_build | ||
511 | sed 's/^ //' << EOF >$dummy.c | ||
512 | #include <sys/systemcfg.h> | ||
513 | |||
514 | main() | ||
515 | { | ||
516 | if (!__power_pc()) | ||
517 | exit(1); | ||
518 | puts("powerpc-ibm-aix3.2.5"); | ||
519 | exit(0); | ||
520 | } | ||
521 | EOF | ||
522 | if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` | ||
523 | then | ||
524 | echo "$SYSTEM_NAME" | ||
525 | else | ||
526 | echo rs6000-ibm-aix3.2.5 | ||
527 | fi | ||
528 | elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then | ||
529 | echo rs6000-ibm-aix3.2.4 | ||
530 | else | ||
531 | echo rs6000-ibm-aix3.2 | ||
532 | fi | ||
533 | exit ;; | ||
534 | *:AIX:*:[45]) | ||
535 | IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` | ||
536 | if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then | ||
537 | IBM_ARCH=rs6000 | ||
538 | else | ||
539 | IBM_ARCH=powerpc | ||
540 | fi | ||
541 | if [ -x /usr/bin/oslevel ] ; then | ||
542 | IBM_REV=`/usr/bin/oslevel` | ||
543 | else | ||
544 | IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} | ||
545 | fi | ||
546 | echo ${IBM_ARCH}-ibm-aix${IBM_REV} | ||
547 | exit ;; | ||
548 | *:AIX:*:*) | ||
549 | echo rs6000-ibm-aix | ||
550 | exit ;; | ||
551 | ibmrt:4.4BSD:*|romp-ibm:BSD:*) | ||
552 | echo romp-ibm-bsd4.4 | ||
553 | exit ;; | ||
554 | ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and | ||
555 | echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to | ||
556 | exit ;; # report: romp-ibm BSD 4.3 | ||
557 | *:BOSX:*:*) | ||
558 | echo rs6000-bull-bosx | ||
559 | exit ;; | ||
560 | DPX/2?00:B.O.S.:*:*) | ||
561 | echo m68k-bull-sysv3 | ||
562 | exit ;; | ||
563 | 9000/[34]??:4.3bsd:1.*:*) | ||
564 | echo m68k-hp-bsd | ||
565 | exit ;; | ||
566 | hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) | ||
567 | echo m68k-hp-bsd4.4 | ||
568 | exit ;; | ||
569 | 9000/[34678]??:HP-UX:*:*) | ||
570 | HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` | ||
571 | case "${UNAME_MACHINE}" in | ||
572 | 9000/31? ) HP_ARCH=m68000 ;; | ||
573 | 9000/[34]?? ) HP_ARCH=m68k ;; | ||
574 | 9000/[678][0-9][0-9]) | ||
575 | if [ -x /usr/bin/getconf ]; then | ||
576 | sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` | ||
577 | sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` | ||
578 | case "${sc_cpu_version}" in | ||
579 | 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 | ||
580 | 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 | ||
581 | 532) # CPU_PA_RISC2_0 | ||
582 | case "${sc_kernel_bits}" in | ||
583 | 32) HP_ARCH="hppa2.0n" ;; | ||
584 | 64) HP_ARCH="hppa2.0w" ;; | ||
585 | '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 | ||
586 | esac ;; | ||
587 | esac | ||
588 | fi | ||
589 | if [ "${HP_ARCH}" = "" ]; then | ||
590 | eval $set_cc_for_build | ||
591 | sed 's/^ //' << EOF >$dummy.c | ||
592 | |||
593 | #define _HPUX_SOURCE | ||
594 | #include <stdlib.h> | ||
595 | #include <unistd.h> | ||
596 | |||
597 | int main () | ||
598 | { | ||
599 | #if defined(_SC_KERNEL_BITS) | ||
600 | long bits = sysconf(_SC_KERNEL_BITS); | ||
601 | #endif | ||
602 | long cpu = sysconf (_SC_CPU_VERSION); | ||
603 | |||
604 | switch (cpu) | ||
605 | { | ||
606 | case CPU_PA_RISC1_0: puts ("hppa1.0"); break; | ||
607 | case CPU_PA_RISC1_1: puts ("hppa1.1"); break; | ||
608 | case CPU_PA_RISC2_0: | ||
609 | #if defined(_SC_KERNEL_BITS) | ||
610 | switch (bits) | ||
611 | { | ||
612 | case 64: puts ("hppa2.0w"); break; | ||
613 | case 32: puts ("hppa2.0n"); break; | ||
614 | default: puts ("hppa2.0"); break; | ||
615 | } break; | ||
616 | #else /* !defined(_SC_KERNEL_BITS) */ | ||
617 | puts ("hppa2.0"); break; | ||
618 | #endif | ||
619 | default: puts ("hppa1.0"); break; | ||
620 | } | ||
621 | exit (0); | ||
622 | } | ||
623 | EOF | ||
624 | (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` | ||
625 | test -z "$HP_ARCH" && HP_ARCH=hppa | ||
626 | fi ;; | ||
627 | esac | ||
628 | if [ ${HP_ARCH} = "hppa2.0w" ] | ||
629 | then | ||
630 | eval $set_cc_for_build | ||
631 | |||
632 | # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating | ||
633 | # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler | ||
634 | # generating 64-bit code. GNU and HP use different nomenclature: | ||
635 | # | ||
636 | # $ CC_FOR_BUILD=cc ./config.guess | ||
637 | # => hppa2.0w-hp-hpux11.23 | ||
638 | # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess | ||
639 | # => hppa64-hp-hpux11.23 | ||
640 | |||
641 | if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | | ||
642 | grep __LP64__ >/dev/null | ||
643 | then | ||
644 | HP_ARCH="hppa2.0w" | ||
645 | else | ||
646 | HP_ARCH="hppa64" | ||
647 | fi | ||
648 | fi | ||
649 | echo ${HP_ARCH}-hp-hpux${HPUX_REV} | ||
650 | exit ;; | ||
651 | ia64:HP-UX:*:*) | ||
652 | HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` | ||
653 | echo ia64-hp-hpux${HPUX_REV} | ||
654 | exit ;; | ||
655 | 3050*:HI-UX:*:*) | ||
656 | eval $set_cc_for_build | ||
657 | sed 's/^ //' << EOF >$dummy.c | ||
658 | #include <unistd.h> | ||
659 | int | ||
660 | main () | ||
661 | { | ||
662 | long cpu = sysconf (_SC_CPU_VERSION); | ||
663 | /* The order matters, because CPU_IS_HP_MC68K erroneously returns | ||
664 | true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct | ||
665 | results, however. */ | ||
666 | if (CPU_IS_PA_RISC (cpu)) | ||
667 | { | ||
668 | switch (cpu) | ||
669 | { | ||
670 | case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; | ||
671 | case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; | ||
672 | case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; | ||
673 | default: puts ("hppa-hitachi-hiuxwe2"); break; | ||
674 | } | ||
675 | } | ||
676 | else if (CPU_IS_HP_MC68K (cpu)) | ||
677 | puts ("m68k-hitachi-hiuxwe2"); | ||
678 | else puts ("unknown-hitachi-hiuxwe2"); | ||
679 | exit (0); | ||
680 | } | ||
681 | EOF | ||
682 | $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && | ||
683 | { echo "$SYSTEM_NAME"; exit; } | ||
684 | echo unknown-hitachi-hiuxwe2 | ||
685 | exit ;; | ||
686 | 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) | ||
687 | echo hppa1.1-hp-bsd | ||
688 | exit ;; | ||
689 | 9000/8??:4.3bsd:*:*) | ||
690 | echo hppa1.0-hp-bsd | ||
691 | exit ;; | ||
692 | *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) | ||
693 | echo hppa1.0-hp-mpeix | ||
694 | exit ;; | ||
695 | hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) | ||
696 | echo hppa1.1-hp-osf | ||
697 | exit ;; | ||
698 | hp8??:OSF1:*:*) | ||
699 | echo hppa1.0-hp-osf | ||
700 | exit ;; | ||
701 | i*86:OSF1:*:*) | ||
702 | if [ -x /usr/sbin/sysversion ] ; then | ||
703 | echo ${UNAME_MACHINE}-unknown-osf1mk | ||
704 | else | ||
705 | echo ${UNAME_MACHINE}-unknown-osf1 | ||
706 | fi | ||
707 | exit ;; | ||
708 | parisc*:Lites*:*:*) | ||
709 | echo hppa1.1-hp-lites | ||
710 | exit ;; | ||
711 | C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) | ||
712 | echo c1-convex-bsd | ||
713 | exit ;; | ||
714 | C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) | ||
715 | if getsysinfo -f scalar_acc | ||
716 | then echo c32-convex-bsd | ||
717 | else echo c2-convex-bsd | ||
718 | fi | ||
719 | exit ;; | ||
720 | C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) | ||
721 | echo c34-convex-bsd | ||
722 | exit ;; | ||
723 | C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) | ||
724 | echo c38-convex-bsd | ||
725 | exit ;; | ||
726 | C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) | ||
727 | echo c4-convex-bsd | ||
728 | exit ;; | ||
729 | CRAY*Y-MP:*:*:*) | ||
730 | echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' | ||
731 | exit ;; | ||
732 | CRAY*[A-Z]90:*:*:*) | ||
733 | echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | ||
734 | | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ | ||
735 | -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ | ||
736 | -e 's/\.[^.]*$/.X/' | ||
737 | exit ;; | ||
738 | CRAY*TS:*:*:*) | ||
739 | echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' | ||
740 | exit ;; | ||
741 | CRAY*T3E:*:*:*) | ||
742 | echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' | ||
743 | exit ;; | ||
744 | CRAY*SV1:*:*:*) | ||
745 | echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' | ||
746 | exit ;; | ||
747 | *:UNICOS/mp:*:*) | ||
748 | echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' | ||
749 | exit ;; | ||
750 | F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) | ||
751 | FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` | ||
752 | FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` | ||
753 | FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` | ||
754 | echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" | ||
755 | exit ;; | ||
756 | 5000:UNIX_System_V:4.*:*) | ||
757 | FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` | ||
758 | FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` | ||
759 | echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" | ||
760 | exit ;; | ||
761 | i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) | ||
762 | echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} | ||
763 | exit ;; | ||
764 | sparc*:BSD/OS:*:*) | ||
765 | echo sparc-unknown-bsdi${UNAME_RELEASE} | ||
766 | exit ;; | ||
767 | *:BSD/OS:*:*) | ||
768 | echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} | ||
769 | exit ;; | ||
770 | *:FreeBSD:*:*) | ||
771 | case ${UNAME_MACHINE} in | ||
772 | pc98) | ||
773 | echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; | ||
774 | amd64) | ||
775 | echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; | ||
776 | *) | ||
777 | echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; | ||
778 | esac | ||
779 | exit ;; | ||
780 | i*:CYGWIN*:*) | ||
781 | echo ${UNAME_MACHINE}-pc-cygwin | ||
782 | exit ;; | ||
783 | i*:MINGW*:*) | ||
784 | echo ${UNAME_MACHINE}-pc-mingw32 | ||
785 | exit ;; | ||
786 | i*:windows32*:*) | ||
787 | # uname -m includes "-pc" on this system. | ||
788 | echo ${UNAME_MACHINE}-mingw32 | ||
789 | exit ;; | ||
790 | i*:PW*:*) | ||
791 | echo ${UNAME_MACHINE}-pc-pw32 | ||
792 | exit ;; | ||
793 | x86:Interix*:[3456]*) | ||
794 | echo i586-pc-interix${UNAME_RELEASE} | ||
795 | exit ;; | ||
796 | EM64T:Interix*:[3456]*) | ||
797 | echo x86_64-unknown-interix${UNAME_RELEASE} | ||
798 | exit ;; | ||
799 | [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) | ||
800 | echo i${UNAME_MACHINE}-pc-mks | ||
801 | exit ;; | ||
802 | i*:Windows_NT*:* | Pentium*:Windows_NT*:*) | ||
803 | # How do we know it's Interix rather than the generic POSIX subsystem? | ||
804 | # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we | ||
805 | # UNAME_MACHINE based on the output of uname instead of i386? | ||
806 | echo i586-pc-interix | ||
807 | exit ;; | ||
808 | i*:UWIN*:*) | ||
809 | echo ${UNAME_MACHINE}-pc-uwin | ||
810 | exit ;; | ||
811 | amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) | ||
812 | echo x86_64-unknown-cygwin | ||
813 | exit ;; | ||
814 | p*:CYGWIN*:*) | ||
815 | echo powerpcle-unknown-cygwin | ||
816 | exit ;; | ||
817 | prep*:SunOS:5.*:*) | ||
818 | echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` | ||
819 | exit ;; | ||
820 | *:GNU:*:*) | ||
821 | # the GNU system | ||
822 | echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` | ||
823 | exit ;; | ||
824 | *:GNU/*:*:*) | ||
825 | # other systems with GNU libc and userland | ||
826 | echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu | ||
827 | exit ;; | ||
828 | i*86:Minix:*:*) | ||
829 | echo ${UNAME_MACHINE}-pc-minix | ||
830 | exit ;; | ||
831 | arm*:Linux:*:*) | ||
832 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
833 | exit ;; | ||
834 | avr32*:Linux:*:*) | ||
835 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
836 | exit ;; | ||
837 | cris:Linux:*:*) | ||
838 | echo cris-axis-linux-gnu | ||
839 | exit ;; | ||
840 | crisv32:Linux:*:*) | ||
841 | echo crisv32-axis-linux-gnu | ||
842 | exit ;; | ||
843 | frv:Linux:*:*) | ||
844 | echo frv-unknown-linux-gnu | ||
845 | exit ;; | ||
846 | ia64:Linux:*:*) | ||
847 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
848 | exit ;; | ||
849 | m32r*:Linux:*:*) | ||
850 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
851 | exit ;; | ||
852 | m68*:Linux:*:*) | ||
853 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
854 | exit ;; | ||
855 | mips:Linux:*:*) | ||
856 | eval $set_cc_for_build | ||
857 | sed 's/^ //' << EOF >$dummy.c | ||
858 | #undef CPU | ||
859 | #undef mips | ||
860 | #undef mipsel | ||
861 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) | ||
862 | CPU=mipsel | ||
863 | #else | ||
864 | #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) | ||
865 | CPU=mips | ||
866 | #else | ||
867 | CPU= | ||
868 | #endif | ||
869 | #endif | ||
870 | EOF | ||
871 | eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' | ||
872 | /^CPU/{ | ||
873 | s: ::g | ||
874 | p | ||
875 | }'`" | ||
876 | test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } | ||
877 | ;; | ||
878 | mips64:Linux:*:*) | ||
879 | eval $set_cc_for_build | ||
880 | sed 's/^ //' << EOF >$dummy.c | ||
881 | #undef CPU | ||
882 | #undef mips64 | ||
883 | #undef mips64el | ||
884 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) | ||
885 | CPU=mips64el | ||
886 | #else | ||
887 | #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) | ||
888 | CPU=mips64 | ||
889 | #else | ||
890 | CPU= | ||
891 | #endif | ||
892 | #endif | ||
893 | EOF | ||
894 | eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' | ||
895 | /^CPU/{ | ||
896 | s: ::g | ||
897 | p | ||
898 | }'`" | ||
899 | test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } | ||
900 | ;; | ||
901 | or32:Linux:*:*) | ||
902 | echo or32-unknown-linux-gnu | ||
903 | exit ;; | ||
904 | ppc:Linux:*:*) | ||
905 | echo powerpc-unknown-linux-gnu | ||
906 | exit ;; | ||
907 | ppc64:Linux:*:*) | ||
908 | echo powerpc64-unknown-linux-gnu | ||
909 | exit ;; | ||
910 | alpha:Linux:*:*) | ||
911 | case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in | ||
912 | EV5) UNAME_MACHINE=alphaev5 ;; | ||
913 | EV56) UNAME_MACHINE=alphaev56 ;; | ||
914 | PCA56) UNAME_MACHINE=alphapca56 ;; | ||
915 | PCA57) UNAME_MACHINE=alphapca56 ;; | ||
916 | EV6) UNAME_MACHINE=alphaev6 ;; | ||
917 | EV67) UNAME_MACHINE=alphaev67 ;; | ||
918 | EV68*) UNAME_MACHINE=alphaev68 ;; | ||
919 | esac | ||
920 | objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null | ||
921 | if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi | ||
922 | echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} | ||
923 | exit ;; | ||
924 | parisc:Linux:*:* | hppa:Linux:*:*) | ||
925 | # Look for CPU level | ||
926 | case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in | ||
927 | PA7*) echo hppa1.1-unknown-linux-gnu ;; | ||
928 | PA8*) echo hppa2.0-unknown-linux-gnu ;; | ||
929 | *) echo hppa-unknown-linux-gnu ;; | ||
930 | esac | ||
931 | exit ;; | ||
932 | parisc64:Linux:*:* | hppa64:Linux:*:*) | ||
933 | echo hppa64-unknown-linux-gnu | ||
934 | exit ;; | ||
935 | s390:Linux:*:* | s390x:Linux:*:*) | ||
936 | echo ${UNAME_MACHINE}-ibm-linux | ||
937 | exit ;; | ||
938 | sh64*:Linux:*:*) | ||
939 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
940 | exit ;; | ||
941 | sh*:Linux:*:*) | ||
942 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
943 | exit ;; | ||
944 | sparc:Linux:*:* | sparc64:Linux:*:*) | ||
945 | echo ${UNAME_MACHINE}-unknown-linux-gnu | ||
946 | exit ;; | ||
947 | vax:Linux:*:*) | ||
948 | echo ${UNAME_MACHINE}-dec-linux-gnu | ||
949 | exit ;; | ||
950 | x86_64:Linux:*:*) | ||
951 | echo x86_64-unknown-linux-gnu | ||
952 | exit ;; | ||
953 | i*86:Linux:*:*) | ||
954 | # The BFD linker knows what the default object file format is, so | ||
955 | # first see if it will tell us. cd to the root directory to prevent | ||
956 | # problems with other programs or directories called `ld' in the path. | ||
957 | # Set LC_ALL=C to ensure ld outputs messages in English. | ||
958 | ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | ||
959 | | sed -ne '/supported targets:/!d | ||
960 | s/[ ][ ]*/ /g | ||
961 | s/.*supported targets: *// | ||
962 | s/ .*// | ||
963 | p'` | ||
964 | case "$ld_supported_targets" in | ||
965 | elf32-i386) | ||
966 | TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" | ||
967 | ;; | ||
968 | a.out-i386-linux) | ||
969 | echo "${UNAME_MACHINE}-pc-linux-gnuaout" | ||
970 | exit ;; | ||
971 | coff-i386) | ||
972 | echo "${UNAME_MACHINE}-pc-linux-gnucoff" | ||
973 | exit ;; | ||
974 | "") | ||
975 | # Either a pre-BFD a.out linker (linux-gnuoldld) or | ||
976 | # one that does not give us useful --help. | ||
977 | echo "${UNAME_MACHINE}-pc-linux-gnuoldld" | ||
978 | exit ;; | ||
979 | esac | ||
980 | # Determine whether the default compiler is a.out or elf | ||
981 | eval $set_cc_for_build | ||
982 | sed 's/^ //' << EOF >$dummy.c | ||
983 | #include <features.h> | ||
984 | #ifdef __ELF__ | ||
985 | # ifdef __GLIBC__ | ||
986 | # if __GLIBC__ >= 2 | ||
987 | LIBC=gnu | ||
988 | # else | ||
989 | LIBC=gnulibc1 | ||
990 | # endif | ||
991 | # else | ||
992 | LIBC=gnulibc1 | ||
993 | # endif | ||
994 | #else | ||
995 | #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) | ||
996 | LIBC=gnu | ||
997 | #else | ||
998 | LIBC=gnuaout | ||
999 | #endif | ||
1000 | #endif | ||
1001 | #ifdef __dietlibc__ | ||
1002 | LIBC=dietlibc | ||
1003 | #endif | ||
1004 | EOF | ||
1005 | eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' | ||
1006 | /^LIBC/{ | ||
1007 | s: ::g | ||
1008 | p | ||
1009 | }'`" | ||
1010 | test x"${LIBC}" != x && { | ||
1011 | echo "${UNAME_MACHINE}-pc-linux-${LIBC}" | ||
1012 | exit | ||
1013 | } | ||
1014 | test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } | ||
1015 | ;; | ||
1016 | i*86:DYNIX/ptx:4*:*) | ||
1017 | # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. | ||
1018 | # earlier versions are messed up and put the nodename in both | ||
1019 | # sysname and nodename. | ||
1020 | echo i386-sequent-sysv4 | ||
1021 | exit ;; | ||
1022 | i*86:UNIX_SV:4.2MP:2.*) | ||
1023 | # Unixware is an offshoot of SVR4, but it has its own version | ||
1024 | # number series starting with 2... | ||
1025 | # I am not positive that other SVR4 systems won't match this, | ||
1026 | # I just have to hope. -- rms. | ||
1027 | # Use sysv4.2uw... so that sysv4* matches it. | ||
1028 | echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} | ||
1029 | exit ;; | ||
1030 | i*86:OS/2:*:*) | ||
1031 | # If we were able to find `uname', then EMX Unix compatibility | ||
1032 | # is probably installed. | ||
1033 | echo ${UNAME_MACHINE}-pc-os2-emx | ||
1034 | exit ;; | ||
1035 | i*86:XTS-300:*:STOP) | ||
1036 | echo ${UNAME_MACHINE}-unknown-stop | ||
1037 | exit ;; | ||
1038 | i*86:atheos:*:*) | ||
1039 | echo ${UNAME_MACHINE}-unknown-atheos | ||
1040 | exit ;; | ||
1041 | i*86:syllable:*:*) | ||
1042 | echo ${UNAME_MACHINE}-pc-syllable | ||
1043 | exit ;; | ||
1044 | i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) | ||
1045 | echo i386-unknown-lynxos${UNAME_RELEASE} | ||
1046 | exit ;; | ||
1047 | i*86:*DOS:*:*) | ||
1048 | echo ${UNAME_MACHINE}-pc-msdosdjgpp | ||
1049 | exit ;; | ||
1050 | i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) | ||
1051 | UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` | ||
1052 | if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then | ||
1053 | echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} | ||
1054 | else | ||
1055 | echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} | ||
1056 | fi | ||
1057 | exit ;; | ||
1058 | i*86:*:5:[678]*) | ||
1059 | # UnixWare 7.x, OpenUNIX and OpenServer 6. | ||
1060 | case `/bin/uname -X | grep "^Machine"` in | ||
1061 | *486*) UNAME_MACHINE=i486 ;; | ||
1062 | *Pentium) UNAME_MACHINE=i586 ;; | ||
1063 | *Pent*|*Celeron) UNAME_MACHINE=i686 ;; | ||
1064 | esac | ||
1065 | echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} | ||
1066 | exit ;; | ||
1067 | i*86:*:3.2:*) | ||
1068 | if test -f /usr/options/cb.name; then | ||
1069 | UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` | ||
1070 | echo ${UNAME_MACHINE}-pc-isc$UNAME_REL | ||
1071 | elif /bin/uname -X 2>/dev/null >/dev/null ; then | ||
1072 | UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` | ||
1073 | (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 | ||
1074 | (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ | ||
1075 | && UNAME_MACHINE=i586 | ||
1076 | (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ | ||
1077 | && UNAME_MACHINE=i686 | ||
1078 | (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ | ||
1079 | && UNAME_MACHINE=i686 | ||
1080 | echo ${UNAME_MACHINE}-pc-sco$UNAME_REL | ||
1081 | else | ||
1082 | echo ${UNAME_MACHINE}-pc-sysv32 | ||
1083 | fi | ||
1084 | exit ;; | ||
1085 | pc:*:*:*) | ||
1086 | # Left here for compatibility: | ||
1087 | # uname -m prints for DJGPP always 'pc', but it prints nothing about | ||
1088 | # the processor, so we play safe by assuming i386. | ||
1089 | echo i386-pc-msdosdjgpp | ||
1090 | exit ;; | ||
1091 | Intel:Mach:3*:*) | ||
1092 | echo i386-pc-mach3 | ||
1093 | exit ;; | ||
1094 | paragon:*:*:*) | ||
1095 | echo i860-intel-osf1 | ||
1096 | exit ;; | ||
1097 | i860:*:4.*:*) # i860-SVR4 | ||
1098 | if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then | ||
1099 | echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 | ||
1100 | else # Add other i860-SVR4 vendors below as they are discovered. | ||
1101 | echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 | ||
1102 | fi | ||
1103 | exit ;; | ||
1104 | mini*:CTIX:SYS*5:*) | ||
1105 | # "miniframe" | ||
1106 | echo m68010-convergent-sysv | ||
1107 | exit ;; | ||
1108 | mc68k:UNIX:SYSTEM5:3.51m) | ||
1109 | echo m68k-convergent-sysv | ||
1110 | exit ;; | ||
1111 | M680?0:D-NIX:5.3:*) | ||
1112 | echo m68k-diab-dnix | ||
1113 | exit ;; | ||
1114 | M68*:*:R3V[5678]*:*) | ||
1115 | test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; | ||
1116 | 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) | ||
1117 | OS_REL='' | ||
1118 | test -r /etc/.relid \ | ||
1119 | && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` | ||
1120 | /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ | ||
1121 | && { echo i486-ncr-sysv4.3${OS_REL}; exit; } | ||
1122 | /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ | ||
1123 | && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; | ||
1124 | 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) | ||
1125 | /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ | ||
1126 | && { echo i486-ncr-sysv4; exit; } ;; | ||
1127 | m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) | ||
1128 | echo m68k-unknown-lynxos${UNAME_RELEASE} | ||
1129 | exit ;; | ||
1130 | mc68030:UNIX_System_V:4.*:*) | ||
1131 | echo m68k-atari-sysv4 | ||
1132 | exit ;; | ||
1133 | TSUNAMI:LynxOS:2.*:*) | ||
1134 | echo sparc-unknown-lynxos${UNAME_RELEASE} | ||
1135 | exit ;; | ||
1136 | rs6000:LynxOS:2.*:*) | ||
1137 | echo rs6000-unknown-lynxos${UNAME_RELEASE} | ||
1138 | exit ;; | ||
1139 | PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) | ||
1140 | echo powerpc-unknown-lynxos${UNAME_RELEASE} | ||
1141 | exit ;; | ||
1142 | SM[BE]S:UNIX_SV:*:*) | ||
1143 | echo mips-dde-sysv${UNAME_RELEASE} | ||
1144 | exit ;; | ||
1145 | RM*:ReliantUNIX-*:*:*) | ||
1146 | echo mips-sni-sysv4 | ||
1147 | exit ;; | ||
1148 | RM*:SINIX-*:*:*) | ||
1149 | echo mips-sni-sysv4 | ||
1150 | exit ;; | ||
1151 | *:SINIX-*:*:*) | ||
1152 | if uname -p 2>/dev/null >/dev/null ; then | ||
1153 | UNAME_MACHINE=`(uname -p) 2>/dev/null` | ||
1154 | echo ${UNAME_MACHINE}-sni-sysv4 | ||
1155 | else | ||
1156 | echo ns32k-sni-sysv | ||
1157 | fi | ||
1158 | exit ;; | ||
1159 | PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort | ||
1160 | # says <Richard.M.Bartel@ccMail.Census.GOV> | ||
1161 | echo i586-unisys-sysv4 | ||
1162 | exit ;; | ||
1163 | *:UNIX_System_V:4*:FTX*) | ||
1164 | # From Gerald Hewes <hewes@openmarket.com>. | ||
1165 | # How about differentiating between stratus architectures? -djm | ||
1166 | echo hppa1.1-stratus-sysv4 | ||
1167 | exit ;; | ||
1168 | *:*:*:FTX*) | ||
1169 | # From seanf@swdc.stratus.com. | ||
1170 | echo i860-stratus-sysv4 | ||
1171 | exit ;; | ||
1172 | i*86:VOS:*:*) | ||
1173 | # From Paul.Green@stratus.com. | ||
1174 | echo ${UNAME_MACHINE}-stratus-vos | ||
1175 | exit ;; | ||
1176 | *:VOS:*:*) | ||
1177 | # From Paul.Green@stratus.com. | ||
1178 | echo hppa1.1-stratus-vos | ||
1179 | exit ;; | ||
1180 | mc68*:A/UX:*:*) | ||
1181 | echo m68k-apple-aux${UNAME_RELEASE} | ||
1182 | exit ;; | ||
1183 | news*:NEWS-OS:6*:*) | ||
1184 | echo mips-sony-newsos6 | ||
1185 | exit ;; | ||
1186 | R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) | ||
1187 | if [ -d /usr/nec ]; then | ||
1188 | echo mips-nec-sysv${UNAME_RELEASE} | ||
1189 | else | ||
1190 | echo mips-unknown-sysv${UNAME_RELEASE} | ||
1191 | fi | ||
1192 | exit ;; | ||
1193 | BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. | ||
1194 | echo powerpc-be-beos | ||
1195 | exit ;; | ||
1196 | BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. | ||
1197 | echo powerpc-apple-beos | ||
1198 | exit ;; | ||
1199 | BePC:BeOS:*:*) # BeOS running on Intel PC compatible. | ||
1200 | echo i586-pc-beos | ||
1201 | exit ;; | ||
1202 | SX-4:SUPER-UX:*:*) | ||
1203 | echo sx4-nec-superux${UNAME_RELEASE} | ||
1204 | exit ;; | ||
1205 | SX-5:SUPER-UX:*:*) | ||
1206 | echo sx5-nec-superux${UNAME_RELEASE} | ||
1207 | exit ;; | ||
1208 | SX-6:SUPER-UX:*:*) | ||
1209 | echo sx6-nec-superux${UNAME_RELEASE} | ||
1210 | exit ;; | ||
1211 | Power*:Rhapsody:*:*) | ||
1212 | echo powerpc-apple-rhapsody${UNAME_RELEASE} | ||
1213 | exit ;; | ||
1214 | *:Rhapsody:*:*) | ||
1215 | echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} | ||
1216 | exit ;; | ||
1217 | *:Darwin:*:*) | ||
1218 | UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown | ||
1219 | case $UNAME_PROCESSOR in | ||
1220 | unknown) UNAME_PROCESSOR=powerpc ;; | ||
1221 | esac | ||
1222 | echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} | ||
1223 | exit ;; | ||
1224 | *:procnto*:*:* | *:QNX:[0123456789]*:*) | ||
1225 | UNAME_PROCESSOR=`uname -p` | ||
1226 | if test "$UNAME_PROCESSOR" = "x86"; then | ||
1227 | UNAME_PROCESSOR=i386 | ||
1228 | UNAME_MACHINE=pc | ||
1229 | fi | ||
1230 | echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} | ||
1231 | exit ;; | ||
1232 | *:QNX:*:4*) | ||
1233 | echo i386-pc-qnx | ||
1234 | exit ;; | ||
1235 | NSE-?:NONSTOP_KERNEL:*:*) | ||
1236 | echo nse-tandem-nsk${UNAME_RELEASE} | ||
1237 | exit ;; | ||
1238 | NSR-?:NONSTOP_KERNEL:*:*) | ||
1239 | echo nsr-tandem-nsk${UNAME_RELEASE} | ||
1240 | exit ;; | ||
1241 | *:NonStop-UX:*:*) | ||
1242 | echo mips-compaq-nonstopux | ||
1243 | exit ;; | ||
1244 | BS2000:POSIX*:*:*) | ||
1245 | echo bs2000-siemens-sysv | ||
1246 | exit ;; | ||
1247 | DS/*:UNIX_System_V:*:*) | ||
1248 | echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} | ||
1249 | exit ;; | ||
1250 | *:Plan9:*:*) | ||
1251 | # "uname -m" is not consistent, so use $cputype instead. 386 | ||
1252 | # is converted to i386 for consistency with other x86 | ||
1253 | # operating systems. | ||
1254 | if test "$cputype" = "386"; then | ||
1255 | UNAME_MACHINE=i386 | ||
1256 | else | ||
1257 | UNAME_MACHINE="$cputype" | ||
1258 | fi | ||
1259 | echo ${UNAME_MACHINE}-unknown-plan9 | ||
1260 | exit ;; | ||
1261 | *:TOPS-10:*:*) | ||
1262 | echo pdp10-unknown-tops10 | ||
1263 | exit ;; | ||
1264 | *:TENEX:*:*) | ||
1265 | echo pdp10-unknown-tenex | ||
1266 | exit ;; | ||
1267 | KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) | ||
1268 | echo pdp10-dec-tops20 | ||
1269 | exit ;; | ||
1270 | XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) | ||
1271 | echo pdp10-xkl-tops20 | ||
1272 | exit ;; | ||
1273 | *:TOPS-20:*:*) | ||
1274 | echo pdp10-unknown-tops20 | ||
1275 | exit ;; | ||
1276 | *:ITS:*:*) | ||
1277 | echo pdp10-unknown-its | ||
1278 | exit ;; | ||
1279 | SEI:*:*:SEIUX) | ||
1280 | echo mips-sei-seiux${UNAME_RELEASE} | ||
1281 | exit ;; | ||
1282 | *:DragonFly:*:*) | ||
1283 | echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` | ||
1284 | exit ;; | ||
1285 | *:*VMS:*:*) | ||
1286 | UNAME_MACHINE=`(uname -p) 2>/dev/null` | ||
1287 | case "${UNAME_MACHINE}" in | ||
1288 | A*) echo alpha-dec-vms ; exit ;; | ||
1289 | I*) echo ia64-dec-vms ; exit ;; | ||
1290 | V*) echo vax-dec-vms ; exit ;; | ||
1291 | esac ;; | ||
1292 | *:XENIX:*:SysV) | ||
1293 | echo i386-pc-xenix | ||
1294 | exit ;; | ||
1295 | i*86:skyos:*:*) | ||
1296 | echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' | ||
1297 | exit ;; | ||
1298 | i*86:rdos:*:*) | ||
1299 | echo ${UNAME_MACHINE}-pc-rdos | ||
1300 | exit ;; | ||
1301 | esac | ||
1302 | |||
1303 | #echo '(No uname command or uname output not recognized.)' 1>&2 | ||
1304 | #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 | ||
1305 | |||
1306 | eval $set_cc_for_build | ||
1307 | cat >$dummy.c <<EOF | ||
1308 | #ifdef _SEQUENT_ | ||
1309 | # include <sys/types.h> | ||
1310 | # include <sys/utsname.h> | ||
1311 | #endif | ||
1312 | main () | ||
1313 | { | ||
1314 | #if defined (sony) | ||
1315 | #if defined (MIPSEB) | ||
1316 | /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, | ||
1317 | I don't know.... */ | ||
1318 | printf ("mips-sony-bsd\n"); exit (0); | ||
1319 | #else | ||
1320 | #include <sys/param.h> | ||
1321 | printf ("m68k-sony-newsos%s\n", | ||
1322 | #ifdef NEWSOS4 | ||
1323 | "4" | ||
1324 | #else | ||
1325 | "" | ||
1326 | #endif | ||
1327 | ); exit (0); | ||
1328 | #endif | ||
1329 | #endif | ||
1330 | |||
1331 | #if defined (__arm) && defined (__acorn) && defined (__unix) | ||
1332 | printf ("arm-acorn-riscix\n"); exit (0); | ||
1333 | #endif | ||
1334 | |||
1335 | #if defined (hp300) && !defined (hpux) | ||
1336 | printf ("m68k-hp-bsd\n"); exit (0); | ||
1337 | #endif | ||
1338 | |||
1339 | #if defined (NeXT) | ||
1340 | #if !defined (__ARCHITECTURE__) | ||
1341 | #define __ARCHITECTURE__ "m68k" | ||
1342 | #endif | ||
1343 | int version; | ||
1344 | version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; | ||
1345 | if (version < 4) | ||
1346 | printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); | ||
1347 | else | ||
1348 | printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); | ||
1349 | exit (0); | ||
1350 | #endif | ||
1351 | |||
1352 | #if defined (MULTIMAX) || defined (n16) | ||
1353 | #if defined (UMAXV) | ||
1354 | printf ("ns32k-encore-sysv\n"); exit (0); | ||
1355 | #else | ||
1356 | #if defined (CMU) | ||
1357 | printf ("ns32k-encore-mach\n"); exit (0); | ||
1358 | #else | ||
1359 | printf ("ns32k-encore-bsd\n"); exit (0); | ||
1360 | #endif | ||
1361 | #endif | ||
1362 | #endif | ||
1363 | |||
1364 | #if defined (__386BSD__) | ||
1365 | printf ("i386-pc-bsd\n"); exit (0); | ||
1366 | #endif | ||
1367 | |||
1368 | #if defined (sequent) | ||
1369 | #if defined (i386) | ||
1370 | printf ("i386-sequent-dynix\n"); exit (0); | ||
1371 | #endif | ||
1372 | #if defined (ns32000) | ||
1373 | printf ("ns32k-sequent-dynix\n"); exit (0); | ||
1374 | #endif | ||
1375 | #endif | ||
1376 | |||
1377 | #if defined (_SEQUENT_) | ||
1378 | struct utsname un; | ||
1379 | |||
1380 | uname(&un); | ||
1381 | |||
1382 | if (strncmp(un.version, "V2", 2) == 0) { | ||
1383 | printf ("i386-sequent-ptx2\n"); exit (0); | ||
1384 | } | ||
1385 | if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ | ||
1386 | printf ("i386-sequent-ptx1\n"); exit (0); | ||
1387 | } | ||
1388 | printf ("i386-sequent-ptx\n"); exit (0); | ||
1389 | |||
1390 | #endif | ||
1391 | |||
1392 | #if defined (vax) | ||
1393 | # if !defined (ultrix) | ||
1394 | # include <sys/param.h> | ||
1395 | # if defined (BSD) | ||
1396 | # if BSD == 43 | ||
1397 | printf ("vax-dec-bsd4.3\n"); exit (0); | ||
1398 | # else | ||
1399 | # if BSD == 199006 | ||
1400 | printf ("vax-dec-bsd4.3reno\n"); exit (0); | ||
1401 | # else | ||
1402 | printf ("vax-dec-bsd\n"); exit (0); | ||
1403 | # endif | ||
1404 | # endif | ||
1405 | # else | ||
1406 | printf ("vax-dec-bsd\n"); exit (0); | ||
1407 | # endif | ||
1408 | # else | ||
1409 | printf ("vax-dec-ultrix\n"); exit (0); | ||
1410 | # endif | ||
1411 | #endif | ||
1412 | |||
1413 | #if defined (alliant) && defined (i860) | ||
1414 | printf ("i860-alliant-bsd\n"); exit (0); | ||
1415 | #endif | ||
1416 | |||
1417 | exit (1); | ||
1418 | } | ||
1419 | EOF | ||
1420 | |||
1421 | $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && | ||
1422 | { echo "$SYSTEM_NAME"; exit; } | ||
1423 | |||
1424 | # Apollos put the system type in the environment. | ||
1425 | |||
1426 | test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } | ||
1427 | |||
1428 | # Convex versions that predate uname can use getsysinfo(1) | ||
1429 | |||
1430 | if [ -x /usr/convex/getsysinfo ] | ||
1431 | then | ||
1432 | case `getsysinfo -f cpu_type` in | ||
1433 | c1*) | ||
1434 | echo c1-convex-bsd | ||
1435 | exit ;; | ||
1436 | c2*) | ||
1437 | if getsysinfo -f scalar_acc | ||
1438 | then echo c32-convex-bsd | ||
1439 | else echo c2-convex-bsd | ||
1440 | fi | ||
1441 | exit ;; | ||
1442 | c34*) | ||
1443 | echo c34-convex-bsd | ||
1444 | exit ;; | ||
1445 | c38*) | ||
1446 | echo c38-convex-bsd | ||
1447 | exit ;; | ||
1448 | c4*) | ||
1449 | echo c4-convex-bsd | ||
1450 | exit ;; | ||
1451 | esac | ||
1452 | fi | ||
1453 | |||
1454 | cat >&2 <<EOF | ||
1455 | $0: unable to guess system type | ||
1456 | |||
1457 | This script, last modified $timestamp, has failed to recognize | ||
1458 | the operating system you are using. It is advised that you | ||
1459 | download the most up to date version of the config scripts from | ||
1460 | |||
1461 | http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess | ||
1462 | and | ||
1463 | http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub | ||
1464 | |||
1465 | If the version you run ($0) is already up to date, please | ||
1466 | send the following data and any information you think might be | ||
1467 | pertinent to <config-patches@gnu.org> in order to provide the needed | ||
1468 | information to handle your system. | ||
1469 | |||
1470 | config.guess timestamp = $timestamp | ||
1471 | |||
1472 | uname -m = `(uname -m) 2>/dev/null || echo unknown` | ||
1473 | uname -r = `(uname -r) 2>/dev/null || echo unknown` | ||
1474 | uname -s = `(uname -s) 2>/dev/null || echo unknown` | ||
1475 | uname -v = `(uname -v) 2>/dev/null || echo unknown` | ||
1476 | |||
1477 | /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` | ||
1478 | /bin/uname -X = `(/bin/uname -X) 2>/dev/null` | ||
1479 | |||
1480 | hostinfo = `(hostinfo) 2>/dev/null` | ||
1481 | /bin/universe = `(/bin/universe) 2>/dev/null` | ||
1482 | /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` | ||
1483 | /bin/arch = `(/bin/arch) 2>/dev/null` | ||
1484 | /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` | ||
1485 | /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` | ||
1486 | |||
1487 | UNAME_MACHINE = ${UNAME_MACHINE} | ||
1488 | UNAME_RELEASE = ${UNAME_RELEASE} | ||
1489 | UNAME_SYSTEM = ${UNAME_SYSTEM} | ||
1490 | UNAME_VERSION = ${UNAME_VERSION} | ||
1491 | EOF | ||
1492 | |||
1493 | exit 1 | ||
1494 | |||
1495 | # Local variables: | ||
1496 | # eval: (add-hook 'write-file-hooks 'time-stamp) | ||
1497 | # time-stamp-start: "timestamp='" | ||
1498 | # time-stamp-format: "%:y-%02m-%02d" | ||
1499 | # time-stamp-end: "'" | ||
1500 | # End: | ||
diff --git a/contrib/Win32/dirent.c b/contrib/Win32/dirent.c deleted file mode 100644 index 5f31686e..00000000 --- a/contrib/Win32/dirent.c +++ /dev/null | |||
@@ -1,277 +0,0 @@ | |||
1 | /* | ||
2 | dir.c for MS-DOS by Samuel Lam <skl@van-bc.UUCP>, June/87 | ||
3 | */ | ||
4 | |||
5 | /* #ifdef WIN32 */ | ||
6 | /* | ||
7 | * @(#)dir.c 1.4 87/11/06 Public Domain. | ||
8 | * | ||
9 | * A public domain implementation of BSD directory routines for | ||
10 | * MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), | ||
11 | * August 1897 | ||
12 | * Ported to OS/2 by Kai Uwe Rommel | ||
13 | * December 1989, February 1990 | ||
14 | * Ported to Windows NT 22 May 91 | ||
15 | * other mods Summer '92 brianmo@microsoft.com | ||
16 | * opendirx() was horribly written, very inefficient, and did not take care | ||
17 | * of all cases. It is still not too clean, but it is far more efficient. | ||
18 | * Changes made by Gordon Chaffee (chaffee@bugs-bunny.cs.berkeley.edu) | ||
19 | */ | ||
20 | |||
21 | |||
22 | /*Includes: | ||
23 | * crt | ||
24 | */ | ||
25 | #include <windows.h> | ||
26 | #include <stdlib.h> | ||
27 | #include <string.h> | ||
28 | #include <sys\types.h> | ||
29 | #include <sys\stat.h> | ||
30 | #include "dirent.h" | ||
31 | |||
32 | #define stat _stat | ||
33 | |||
34 | /* | ||
35 | * NT specific | ||
36 | */ | ||
37 | #include <stdio.h> | ||
38 | |||
39 | /* | ||
40 | * random typedefs | ||
41 | */ | ||
42 | #define HDIR HANDLE | ||
43 | #define HFILE HANDLE | ||
44 | #define PHFILE PHANDLE | ||
45 | |||
46 | /* | ||
47 | * local functions | ||
48 | */ | ||
49 | static char *getdirent(char *); | ||
50 | static void free_dircontents(struct _dircontents *); | ||
51 | |||
52 | static HDIR FindHandle; | ||
53 | static WIN32_FIND_DATA FileFindData; | ||
54 | |||
55 | static struct dirent dp; | ||
56 | |||
57 | DIR *opendirx(char *name, char *pattern) | ||
58 | { | ||
59 | struct stat statb; | ||
60 | DIR *dirp; | ||
61 | char c; | ||
62 | char *s; | ||
63 | struct _dircontents *dp; | ||
64 | int len; | ||
65 | int unc; | ||
66 | char path[OFS_MAXPATHNAME]; | ||
67 | register char *ip, *op; | ||
68 | |||
69 | for (ip = name, op = path;; op++, ip++) { | ||
70 | *op = *ip; | ||
71 | if (*ip == '\0') { | ||
72 | break; | ||
73 | } | ||
74 | } | ||
75 | len = ip - name; | ||
76 | if (len > 0) { | ||
77 | unc = ((path[0] == '\\' || path[0] == '/') && | ||
78 | (path[1] == '\\' || path[1] == '/')); | ||
79 | c = path[len - 1]; | ||
80 | if (unc) { | ||
81 | if (c != '\\' && c != '/') { | ||
82 | path[len] = '/'; | ||
83 | len++; | ||
84 | path[len] = '\0'; | ||
85 | } | ||
86 | } else { | ||
87 | if ((c == '\\' || c == '/') && (len > 1)) { | ||
88 | len--; | ||
89 | path[len] = '\0'; | ||
90 | |||
91 | if (path[len - 1] == ':') { | ||
92 | path[len] = '/'; | ||
93 | len++; | ||
94 | path[len] = '.'; | ||
95 | len++; | ||
96 | path[len] = '\0'; | ||
97 | } | ||
98 | } else if (c == ':') { | ||
99 | path[len] = '.'; | ||
100 | len++; | ||
101 | path[len] = '\0'; | ||
102 | } | ||
103 | } | ||
104 | } else { | ||
105 | unc = 0; | ||
106 | path[0] = '.'; | ||
107 | path[1] = '\0'; | ||
108 | len = 1; | ||
109 | } | ||
110 | |||
111 | if (stat(path, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR) { | ||
112 | return NULL; | ||
113 | } | ||
114 | dirp = malloc(sizeof(DIR)); | ||
115 | if (dirp == NULL) { | ||
116 | return dirp; | ||
117 | } | ||
118 | c = path[len - 1]; | ||
119 | if (c == '.') { | ||
120 | if (len == 1) { | ||
121 | len--; | ||
122 | } else { | ||
123 | c = path[len - 2]; | ||
124 | if (c == '\\' || c == ':') { | ||
125 | len--; | ||
126 | } else { | ||
127 | path[len] = '/'; | ||
128 | len++; | ||
129 | } | ||
130 | } | ||
131 | } else if (!unc && ((len != 1) || (c != '\\' && c != '/'))) { | ||
132 | path[len] = '/'; | ||
133 | len++; | ||
134 | } | ||
135 | strcpy(path + len, pattern); | ||
136 | |||
137 | dirp->dd_loc = 0; | ||
138 | dirp->dd_contents = dirp->dd_cp = NULL; | ||
139 | |||
140 | if ((s = getdirent(path)) == NULL) { | ||
141 | return dirp; | ||
142 | } | ||
143 | do { | ||
144 | if (((dp = malloc(sizeof(struct _dircontents))) == NULL) || | ||
145 | ((dp->_d_entry = malloc(strlen(s) + 1)) == NULL)) { | ||
146 | if (dp) | ||
147 | free(dp); | ||
148 | free_dircontents(dirp->dd_contents); | ||
149 | |||
150 | return NULL; | ||
151 | } | ||
152 | if (dirp->dd_contents) | ||
153 | dirp->dd_cp = dirp->dd_cp->_d_next = dp; | ||
154 | else | ||
155 | dirp->dd_contents = dirp->dd_cp = dp; | ||
156 | |||
157 | strcpy(dp->_d_entry, s); | ||
158 | dp->_d_next = NULL; | ||
159 | |||
160 | } | ||
161 | while ((s = getdirent(NULL)) != NULL); | ||
162 | |||
163 | dirp->dd_cp = dirp->dd_contents; | ||
164 | return dirp; | ||
165 | } | ||
166 | |||
167 | DIR *opendir(char *name) | ||
168 | { | ||
169 | return opendirx(name, "*"); | ||
170 | } | ||
171 | |||
172 | void closedir(DIR * dirp) | ||
173 | { | ||
174 | free_dircontents(dirp->dd_contents); | ||
175 | free(dirp); | ||
176 | } | ||
177 | |||
178 | struct dirent *readdir(DIR * dirp) | ||
179 | { | ||
180 | /* static struct dirent dp; */ | ||
181 | if (dirp->dd_cp == NULL) | ||
182 | return NULL; | ||
183 | |||
184 | /*strcpy(dp.d_name,dirp->dd_cp->_d_entry); */ | ||
185 | |||
186 | dp.d_name = dirp->dd_cp->_d_entry; | ||
187 | |||
188 | dp.d_namlen = dp.d_reclen = | ||
189 | strlen(dp.d_name); | ||
190 | |||
191 | dp.d_ino = dirp->dd_loc + 1; /* fake the inode */ | ||
192 | |||
193 | dirp->dd_cp = dirp->dd_cp->_d_next; | ||
194 | dirp->dd_loc++; | ||
195 | |||
196 | |||
197 | return &dp; | ||
198 | } | ||
199 | |||
200 | void seekdir(DIR * dirp, long off) | ||
201 | { | ||
202 | long i = off; | ||
203 | struct _dircontents *dp; | ||
204 | |||
205 | if (off >= 0) { | ||
206 | for (dp = dirp->dd_contents; --i >= 0 && dp; dp = dp->_d_next); | ||
207 | |||
208 | dirp->dd_loc = off - (i + 1); | ||
209 | dirp->dd_cp = dp; | ||
210 | } | ||
211 | } | ||
212 | |||
213 | |||
214 | long telldir(DIR * dirp) | ||
215 | { | ||
216 | return dirp->dd_loc; | ||
217 | } | ||
218 | |||
219 | static void free_dircontents(struct _dircontents *dp) | ||
220 | { | ||
221 | struct _dircontents *odp; | ||
222 | |||
223 | while (dp) { | ||
224 | if (dp->_d_entry) | ||
225 | free(dp->_d_entry); | ||
226 | |||
227 | dp = (odp = dp)->_d_next; | ||
228 | free(odp); | ||
229 | } | ||
230 | } | ||
231 | /* end of "free_dircontents" */ | ||
232 | |||
233 | static char *getdirent(char *dir) | ||
234 | { | ||
235 | int got_dirent; | ||
236 | |||
237 | if (dir != NULL) { /* get first entry */ | ||
238 | if ((FindHandle = FindFirstFile(dir, &FileFindData)) | ||
239 | == (HDIR) 0xffffffff) { | ||
240 | return NULL; | ||
241 | } | ||
242 | got_dirent = 1; | ||
243 | } else /* get next entry */ | ||
244 | got_dirent = FindNextFile(FindHandle, &FileFindData); | ||
245 | |||
246 | if (got_dirent) | ||
247 | return FileFindData.cFileName; | ||
248 | else { | ||
249 | FindClose(FindHandle); | ||
250 | return NULL; | ||
251 | } | ||
252 | } | ||
253 | /* end of getdirent() */ | ||
254 | |||
255 | struct passwd *_cdecl | ||
256 | getpwnam(char *name) | ||
257 | { | ||
258 | return NULL; | ||
259 | } | ||
260 | |||
261 | struct passwd *_cdecl | ||
262 | getpwuid(int uid) | ||
263 | { | ||
264 | return NULL; | ||
265 | } | ||
266 | |||
267 | int getuid() | ||
268 | { | ||
269 | return 0; | ||
270 | } | ||
271 | |||
272 | void _cdecl | ||
273 | endpwent(void) | ||
274 | { | ||
275 | } | ||
276 | |||
277 | /* #endif */ | ||
diff --git a/contrib/Win32/dirent.h b/contrib/Win32/dirent.h deleted file mode 100644 index c0852a17..00000000 --- a/contrib/Win32/dirent.h +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | /* | ||
2 | * @(#) dirent.h 2.0 17 Jun 91 Public Domain. | ||
3 | * | ||
4 | * A public domain implementation of BSD directory routines for | ||
5 | * MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), | ||
6 | * August 1987 | ||
7 | * | ||
8 | * Enhanced and ported to OS/2 by Kai Uwe Rommel; added scandir() prototype | ||
9 | * December 1989, February 1990 | ||
10 | * Change of MAXPATHLEN for HPFS, October 1990 | ||
11 | * | ||
12 | * Unenhanced and ported to Windows NT by Bill Gallagher | ||
13 | * 17 Jun 91 | ||
14 | * changed d_name to char * instead of array, removed non-std extensions | ||
15 | * | ||
16 | * Cleanup, other hackery, Summer '92, Brian Moran , brianmo@microsoft.com | ||
17 | */ | ||
18 | |||
19 | #ifndef _DIRENT | ||
20 | #define _DIRENT | ||
21 | |||
22 | #include <direct.h> | ||
23 | |||
24 | struct dirent | ||
25 | { | ||
26 | ino_t d_ino; /* a bit of a farce */ | ||
27 | short d_reclen; /* more farce */ | ||
28 | short d_namlen; /* length of d_name */ | ||
29 | char *d_name; | ||
30 | }; | ||
31 | |||
32 | struct _dircontents | ||
33 | { | ||
34 | char *_d_entry; | ||
35 | struct _dircontents *_d_next; | ||
36 | }; | ||
37 | |||
38 | typedef struct _dirdesc | ||
39 | { | ||
40 | int dd_id; /* uniquely identify each open directory*/ | ||
41 | long dd_loc; /* where we are in directory entry */ | ||
42 | struct _dircontents *dd_contents; /* pointer to contents of dir */ | ||
43 | struct _dircontents *dd_cp; /* pointer to current position */ | ||
44 | } | ||
45 | DIR; | ||
46 | |||
47 | extern DIR *opendir(char *); | ||
48 | extern struct dirent *readdir(DIR *); | ||
49 | extern void seekdir(DIR *, long); | ||
50 | extern long telldir(DIR *); | ||
51 | extern void closedir(DIR *); | ||
52 | #define rewinddir(dirp) seekdir(dirp, 0L) | ||
53 | |||
54 | #endif /* _DIRENT */ | ||
55 | |||
56 | /* end of dirent.h */ | ||
diff --git a/contrib/Win32/flock.c b/contrib/Win32/flock.c deleted file mode 100644 index 89238625..00000000 --- a/contrib/Win32/flock.c +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: 19:49,07-49-2002 | ||
10 | * | ||
11 | * -- description: File lock for winnt | ||
12 | * | ||
13 | |||
14 | /*********************************************************************************************************/ | ||
15 | /* | ||
16 | * simulate a file lock, using locking region on WINNT | ||
17 | */ | ||
18 | #include "flock.h" | ||
19 | |||
20 | |||
21 | |||
22 | #define LK_ERR(f,i) ((f) ? (i = 0) : (i=-1)) | ||
23 | #define LK_LEN 0xffff0000 | ||
24 | |||
25 | int flock(int fd, int oper) { | ||
26 | OVERLAPPED o; | ||
27 | int i = -1; | ||
28 | HANDLE fh; | ||
29 | |||
30 | fh = (HANDLE)_get_osfhandle(fd); | ||
31 | memset(&o, 0, sizeof(o)); | ||
32 | |||
33 | switch(oper) { | ||
34 | case LOCK_SH: /* shared lock */ | ||
35 | LK_ERR(LockFileEx(fh, 0, 0, LK_LEN, 0, &o),i); | ||
36 | break; | ||
37 | case LOCK_EX: /* exclusive lock */ | ||
38 | LK_ERR(LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, LK_LEN, 0, &o),i); | ||
39 | break; | ||
40 | case LOCK_SH|LOCK_NB: /* non-blocking shared lock */ | ||
41 | LK_ERR(LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY, 0, LK_LEN, 0, &o),i); | ||
42 | break; | ||
43 | case LOCK_EX|LOCK_NB: /* non-blocking exclusive lock */ | ||
44 | LK_ERR(LockFileEx(fh,LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY,0, LK_LEN, 0, &o),i); | ||
45 | break; | ||
46 | case LOCK_UN: /* unlock lock */ | ||
47 | LK_ERR(UnlockFileEx(fh, 0, LK_LEN, 0, &o),i); | ||
48 | break; | ||
49 | default: /* unknown */ | ||
50 | //errno = EINVAL; // i heard that on some versions errno is a function (win32 MT lib?) | ||
51 | break; | ||
52 | } | ||
53 | return i; | ||
54 | } | ||
55 | |||
56 | #undef LK_ERR | ||
57 | #undef LK_LEN \ No newline at end of file | ||
diff --git a/contrib/Win32/flock.h b/contrib/Win32/flock.h deleted file mode 100644 index 0ea72cf1..00000000 --- a/contrib/Win32/flock.h +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * file: utils.h | ||
10 | * | ||
11 | * description: Header | ||
12 | * | ||
13 | * date: 19:50,07-50-2002 | ||
14 | */ | ||
15 | |||
16 | #ifndef _FLOCK_H_ | ||
17 | #define _FLOCK_H_ | ||
18 | |||
19 | #include <windows.h> | ||
20 | #include <io.h> // this? | ||
21 | #include <errno.h> | ||
22 | |||
23 | #define LOCK_SH 1 | ||
24 | #define LOCK_EX 2 | ||
25 | #define LOCK_NB 4 | ||
26 | #define LOCK_UN 8 | ||
27 | |||
28 | int flock (int,int); | ||
29 | |||
30 | |||
31 | #endif \ No newline at end of file | ||
diff --git a/contrib/Win32/help/help.cfg b/contrib/Win32/help/help.cfg deleted file mode 100644 index 6fbb727e..00000000 --- a/contrib/Win32/help/help.cfg +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | [LIBWEBSERVER] | ||
2 | LOG=help.log | ||
3 | PORT=81 | ||
4 | USESSL=0 | ||
5 | LOCAL=0 | ||
6 | DYNVAR=0 | ||
7 | |||
8 | |||
9 | [PERSONAL_CONF] | ||
10 | PORT=Portability | ||
11 | MOST=general key guard | ||
12 | IP=127.0.0.1 | ||
13 | |||
diff --git a/contrib/Win32/help/help.dsp b/contrib/Win32/help/help.dsp deleted file mode 100644 index a1cecd1d..00000000 --- a/contrib/Win32/help/help.dsp +++ /dev/null | |||
@@ -1,157 +0,0 @@ | |||
1 | # Microsoft Developer Studio Project File - Name="help" - Package Owner=<4> | ||
2 | # Microsoft Developer Studio Generated Build File, Format Version 6.00 | ||
3 | # ** DO NOT EDIT ** | ||
4 | |||
5 | # TARGTYPE "Win32 (x86) Console Application" 0x0103 | ||
6 | |||
7 | CFG=help - Win32 Release | ||
8 | !MESSAGE This is not a valid makefile. To build this project using NMAKE, | ||
9 | !MESSAGE use the Export Makefile command and run | ||
10 | !MESSAGE | ||
11 | !MESSAGE NMAKE /f "help.mak". | ||
12 | !MESSAGE | ||
13 | !MESSAGE You can specify a configuration when running NMAKE | ||
14 | !MESSAGE by defining the macro CFG on the command line. For example: | ||
15 | !MESSAGE | ||
16 | !MESSAGE NMAKE /f "help.mak" CFG="help - Win32 Release" | ||
17 | !MESSAGE | ||
18 | !MESSAGE Possible choices for configuration are: | ||
19 | !MESSAGE | ||
20 | !MESSAGE "help - Win32 Release" (based on "Win32 (x86) Console Application") | ||
21 | !MESSAGE "help - Win32 Debug" (based on "Win32 (x86) Console Application") | ||
22 | !MESSAGE | ||
23 | |||
24 | # Begin Project | ||
25 | # PROP AllowPerConfigDependencies 0 | ||
26 | # PROP Scc_ProjName "" | ||
27 | # PROP Scc_LocalPath "" | ||
28 | CPP=cl.exe | ||
29 | RSC=rc.exe | ||
30 | |||
31 | !IF "$(CFG)" == "help - Win32 Release" | ||
32 | |||
33 | # PROP BASE Use_MFC 0 | ||
34 | # PROP BASE Use_Debug_Libraries 0 | ||
35 | # PROP BASE Output_Dir "Release" | ||
36 | # PROP BASE Intermediate_Dir "Release" | ||
37 | # PROP BASE Target_Dir "" | ||
38 | # PROP Use_MFC 0 | ||
39 | # PROP Use_Debug_Libraries 0 | ||
40 | # PROP Output_Dir "Release" | ||
41 | # PROP Intermediate_Dir "Release" | ||
42 | # PROP Ignore_Export_Lib 0 | ||
43 | # PROP Target_Dir "" | ||
44 | # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c | ||
45 | # ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /Zm200 /c | ||
46 | # ADD BASE RSC /l 0x816 /d "NDEBUG" | ||
47 | # ADD RSC /l 0x816 /d "NDEBUG" | ||
48 | BSC32=bscmake.exe | ||
49 | # ADD BASE BSC32 /nologo | ||
50 | # ADD BSC32 /nologo | ||
51 | LINK32=link.exe | ||
52 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 | ||
53 | # ADD LINK32 libwebserver.lib wsock32.lib user32.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/help.exe" /libpath:"../../bin" | ||
54 | # SUBTRACT LINK32 /pdb:none /nodefaultlib | ||
55 | |||
56 | !ELSEIF "$(CFG)" == "help - Win32 Debug" | ||
57 | |||
58 | # PROP BASE Use_MFC 0 | ||
59 | # PROP BASE Use_Debug_Libraries 1 | ||
60 | # PROP BASE Output_Dir "Debug" | ||
61 | # PROP BASE Intermediate_Dir "Debug" | ||
62 | # PROP BASE Target_Dir "" | ||
63 | # PROP Use_MFC 0 | ||
64 | # PROP Use_Debug_Libraries 1 | ||
65 | # PROP Output_Dir "Debug" | ||
66 | # PROP Intermediate_Dir "Debug" | ||
67 | # PROP Ignore_Export_Lib 0 | ||
68 | # PROP Target_Dir "" | ||
69 | # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c | ||
70 | # ADD CPP /nologo /Gm /GX /ZI /Od /I "../../include" /D "_CONSOLE" /D "WIN32" /D "DEBUG" /D "_MBCS" /FA /FR /YX /FD /Zm200 /GZ /c | ||
71 | # ADD BASE RSC /l 0x816 /d "_DEBUG" | ||
72 | # ADD RSC /l 0x816 /d "DEBUG" | ||
73 | BSC32=bscmake.exe | ||
74 | # ADD BASE BSC32 /nologo | ||
75 | # ADD BSC32 /nologo | ||
76 | LINK32=link.exe | ||
77 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept | ||
78 | # ADD LINK32 libwebserver.lib wsock32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /out:"../../bin/help.exe" /pdbtype:sept /libpath:"../../bin" | ||
79 | # SUBTRACT LINK32 /pdb:none | ||
80 | |||
81 | !ENDIF | ||
82 | |||
83 | # Begin Target | ||
84 | |||
85 | # Name "help - Win32 Release" | ||
86 | # Name "help - Win32 Debug" | ||
87 | # Begin Group "Source Files" | ||
88 | |||
89 | # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" | ||
90 | # Begin Source File | ||
91 | |||
92 | SOURCE=..\..\help\help.c | ||
93 | |||
94 | !IF "$(CFG)" == "help - Win32 Release" | ||
95 | |||
96 | # ADD CPP /I "../../include ./" | ||
97 | # SUBTRACT CPP /I "../../include" | ||
98 | |||
99 | !ELSEIF "$(CFG)" == "help - Win32 Debug" | ||
100 | |||
101 | # ADD CPP /I "../../include help/" | ||
102 | # SUBTRACT CPP /I "../../include" | ||
103 | |||
104 | !ENDIF | ||
105 | |||
106 | # End Source File | ||
107 | # Begin Source File | ||
108 | |||
109 | SOURCE=.\help.rc | ||
110 | # End Source File | ||
111 | # End Group | ||
112 | # Begin Group "Header Files" | ||
113 | |||
114 | # PROP Default_Filter "h;hpp;hxx;hm;inl" | ||
115 | # Begin Source File | ||
116 | |||
117 | SOURCE=..\..\help\examples.h | ||
118 | # End Source File | ||
119 | # Begin Source File | ||
120 | |||
121 | SOURCE=..\..\help\functions.h | ||
122 | # End Source File | ||
123 | # Begin Source File | ||
124 | |||
125 | SOURCE=..\..\help\info.h | ||
126 | # End Source File | ||
127 | # Begin Source File | ||
128 | |||
129 | SOURCE=..\..\help\security.h | ||
130 | # End Source File | ||
131 | # End Group | ||
132 | # Begin Group "Resource Files" | ||
133 | |||
134 | # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||
135 | # Begin Source File | ||
136 | |||
137 | SOURCE=.\help.ico | ||
138 | # End Source File | ||
139 | # End Group | ||
140 | # Begin Source File | ||
141 | |||
142 | SOURCE=..\..\help.html\examples.html | ||
143 | # End Source File | ||
144 | # Begin Source File | ||
145 | |||
146 | SOURCE=..\..\help.html\functions.html | ||
147 | # End Source File | ||
148 | # Begin Source File | ||
149 | |||
150 | SOURCE=..\..\help.html\info.html | ||
151 | # End Source File | ||
152 | # Begin Source File | ||
153 | |||
154 | SOURCE=..\..\help.html\security.html | ||
155 | # End Source File | ||
156 | # End Target | ||
157 | # End Project | ||
diff --git a/contrib/Win32/help/help.ico b/contrib/Win32/help/help.ico deleted file mode 100644 index 1523bb39..00000000 --- a/contrib/Win32/help/help.ico +++ /dev/null | |||
Binary files differ | |||
diff --git a/contrib/Win32/help/help.rc b/contrib/Win32/help/help.rc deleted file mode 100644 index 23179828..00000000 --- a/contrib/Win32/help/help.rc +++ /dev/null | |||
@@ -1,72 +0,0 @@ | |||
1 | //Microsoft Developer Studio generated resource script. | ||
2 | // | ||
3 | #include "resource.h" | ||
4 | |||
5 | #define APSTUDIO_READONLY_SYMBOLS | ||
6 | ///////////////////////////////////////////////////////////////////////////// | ||
7 | // | ||
8 | // Generated from the TEXTINCLUDE 2 resource. | ||
9 | // | ||
10 | #include "afxres.h" | ||
11 | |||
12 | ///////////////////////////////////////////////////////////////////////////// | ||
13 | #undef APSTUDIO_READONLY_SYMBOLS | ||
14 | |||
15 | ///////////////////////////////////////////////////////////////////////////// | ||
16 | // Portuguese (Portugal) resources | ||
17 | |||
18 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PTG) | ||
19 | #ifdef _WIN32 | ||
20 | LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE | ||
21 | #pragma code_page(1252) | ||
22 | #endif //_WIN32 | ||
23 | |||
24 | #ifdef APSTUDIO_INVOKED | ||
25 | ///////////////////////////////////////////////////////////////////////////// | ||
26 | // | ||
27 | // TEXTINCLUDE | ||
28 | // | ||
29 | |||
30 | 1 TEXTINCLUDE DISCARDABLE | ||
31 | BEGIN | ||
32 | "resource.h\0" | ||
33 | END | ||
34 | |||
35 | 2 TEXTINCLUDE DISCARDABLE | ||
36 | BEGIN | ||
37 | "#include ""afxres.h""\r\n" | ||
38 | "\0" | ||
39 | END | ||
40 | |||
41 | 3 TEXTINCLUDE DISCARDABLE | ||
42 | BEGIN | ||
43 | "\r\n" | ||
44 | "\0" | ||
45 | END | ||
46 | |||
47 | #endif // APSTUDIO_INVOKED | ||
48 | |||
49 | |||
50 | ///////////////////////////////////////////////////////////////////////////// | ||
51 | // | ||
52 | // Icon | ||
53 | // | ||
54 | |||
55 | // Icon with lowest ID value placed first to ensure application icon | ||
56 | // remains consistent on all systems. | ||
57 | IDI_ICON1 ICON DISCARDABLE "help.ico" | ||
58 | #endif // Portuguese (Portugal) resources | ||
59 | ///////////////////////////////////////////////////////////////////////////// | ||
60 | |||
61 | |||
62 | |||
63 | #ifndef APSTUDIO_INVOKED | ||
64 | ///////////////////////////////////////////////////////////////////////////// | ||
65 | // | ||
66 | // Generated from the TEXTINCLUDE 3 resource. | ||
67 | // | ||
68 | |||
69 | |||
70 | ///////////////////////////////////////////////////////////////////////////// | ||
71 | #endif // not APSTUDIO_INVOKED | ||
72 | |||
diff --git a/contrib/Win32/help/mime.types b/contrib/Win32/help/mime.types deleted file mode 100644 index 16c8cbd5..00000000 --- a/contrib/Win32/help/mime.types +++ /dev/null | |||
@@ -1,469 +0,0 @@ | |||
1 | # This is a comment. I love comments. | ||
2 | |||
3 | # This file controls what Internet media types are sent to the client for | ||
4 | # given file extension(s). Sending the correct media type to the client | ||
5 | # is important so they know how to handle the content of the file. | ||
6 | # Extra types can either be added here or by using an AddType directive | ||
7 | # in your config files. For more information about Internet media types, | ||
8 | # please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type | ||
9 | # registry is at <ftp://ftp.iana.org/in-notes/iana/assignments/media-types/>. | ||
10 | |||
11 | # MIME type Extension | ||
12 | application/EDI-Consent | ||
13 | application/EDI-X12 | ||
14 | application/EDIFACT | ||
15 | application/activemessage | ||
16 | application/andrew-inset ez | ||
17 | application/applefile | ||
18 | application/atomicmail | ||
19 | application/batch-SMTP | ||
20 | application/beep+xml | ||
21 | application/cals-1840 | ||
22 | application/commonground | ||
23 | application/cybercash | ||
24 | application/dca-rft | ||
25 | application/dec-dx | ||
26 | application/dvcs | ||
27 | application/eshop | ||
28 | application/http | ||
29 | application/hyperstudio | ||
30 | application/iges | ||
31 | application/index | ||
32 | application/index.cmd | ||
33 | application/index.obj | ||
34 | application/index.response | ||
35 | application/index.vnd | ||
36 | application/iotp | ||
37 | application/ipp | ||
38 | application/isup | ||
39 | application/font-tdpfr | ||
40 | application/mac-binhex40 hqx | ||
41 | application/mac-compactpro cpt | ||
42 | application/macwriteii | ||
43 | application/marc | ||
44 | application/mathematica | ||
45 | application/mathematica-old | ||
46 | application/msword doc | ||
47 | application/news-message-id | ||
48 | application/news-transmission | ||
49 | application/ocsp-request | ||
50 | application/ocsp-response | ||
51 | application/octet-stream bin dms lha lzh exe class so dll | ||
52 | application/oda oda | ||
53 | application/parityfec | ||
54 | application/pdf pdf | ||
55 | application/pgp-encrypted | ||
56 | application/pgp-keys | ||
57 | application/pgp-signature | ||
58 | application/pkcs10 | ||
59 | application/pkcs7-mime | ||
60 | application/pkcs7-signature | ||
61 | application/pkix-cert | ||
62 | application/pkix-crl | ||
63 | application/pkixcmp | ||
64 | application/postscript ai eps ps | ||
65 | application/prs.alvestrand.titrax-sheet | ||
66 | application/prs.cww | ||
67 | application/prs.nprend | ||
68 | application/qsig | ||
69 | application/remote-printing | ||
70 | application/riscos | ||
71 | application/rtf | ||
72 | application/sdp | ||
73 | application/set-payment | ||
74 | application/set-payment-initiation | ||
75 | application/set-registration | ||
76 | application/set-registration-initiation | ||
77 | application/sgml | ||
78 | application/sgml-open-catalog | ||
79 | application/sieve | ||
80 | application/slate | ||
81 | application/smil smi smil | ||
82 | application/timestamp-query | ||
83 | application/timestamp-reply | ||
84 | application/vemmi | ||
85 | application/vnd.3M.Post-it-Notes | ||
86 | application/vnd.FloGraphIt | ||
87 | application/vnd.accpac.simply.aso | ||
88 | application/vnd.accpac.simply.imp | ||
89 | application/vnd.acucobol | ||
90 | application/vnd.aether.imp | ||
91 | application/vnd.anser-web-certificate-issue-initiation | ||
92 | application/vnd.anser-web-funds-transfer-initiation | ||
93 | application/vnd.audiograph | ||
94 | application/vnd.businessobjects | ||
95 | application/vnd.bmi | ||
96 | application/vnd.canon-cpdl | ||
97 | application/vnd.canon-lips | ||
98 | application/vnd.claymore | ||
99 | application/vnd.commerce-battelle | ||
100 | application/vnd.commonspace | ||
101 | application/vnd.comsocaller | ||
102 | application/vnd.contact.cmsg | ||
103 | application/vnd.cosmocaller | ||
104 | application/vnd.cups-postscript | ||
105 | application/vnd.cups-raster | ||
106 | application/vnd.cups-raw | ||
107 | application/vnd.ctc-posml | ||
108 | application/vnd.cybank | ||
109 | application/vnd.dna | ||
110 | application/vnd.dpgraph | ||
111 | application/vnd.dxr | ||
112 | application/vnd.ecdis-update | ||
113 | application/vnd.ecowin.chart | ||
114 | application/vnd.ecowin.filerequest | ||
115 | application/vnd.ecowin.fileupdate | ||
116 | application/vnd.ecowin.series | ||
117 | application/vnd.ecowin.seriesrequest | ||
118 | application/vnd.ecowin.seriesupdate | ||
119 | application/vnd.enliven | ||
120 | application/vnd.epson.esf | ||
121 | application/vnd.epson.msf | ||
122 | application/vnd.epson.quickanime | ||
123 | application/vnd.epson.salt | ||
124 | application/vnd.epson.ssf | ||
125 | application/vnd.ericsson.quickcall | ||
126 | application/vnd.eudora.data | ||
127 | application/vnd.fdf | ||
128 | application/vnd.ffsns | ||
129 | application/vnd.framemaker | ||
130 | application/vnd.fsc.weblaunch | ||
131 | application/vnd.fujitsu.oasys | ||
132 | application/vnd.fujitsu.oasys2 | ||
133 | application/vnd.fujitsu.oasys3 | ||
134 | application/vnd.fujitsu.oasysgp | ||
135 | application/vnd.fujitsu.oasysprs | ||
136 | application/vnd.fujixerox.ddd | ||
137 | application/vnd.fujixerox.docuworks | ||
138 | application/vnd.fujixerox.docuworks.binder | ||
139 | application/vnd.fut-misnet | ||
140 | application/vnd.grafeq | ||
141 | application/vnd.groove-account | ||
142 | application/vnd.groove-identity-message | ||
143 | application/vnd.groove-injector | ||
144 | application/vnd.groove-tool-message | ||
145 | application/vnd.groove-tool-template | ||
146 | application/vnd.groove-vcard | ||
147 | application/vnd.hhe.lesson-player | ||
148 | application/vnd.hp-HPGL | ||
149 | application/vnd.hp-PCL | ||
150 | application/vnd.hp-PCLXL | ||
151 | application/vnd.hp-hpid | ||
152 | application/vnd.hp-hps | ||
153 | application/vnd.httphone | ||
154 | application/vnd.hzn-3d-crossword | ||
155 | application/vnd.ibm.afplinedata | ||
156 | application/vnd.ibm.MiniPay | ||
157 | application/vnd.ibm.modcap | ||
158 | application/vnd.informix-visionary | ||
159 | application/vnd.intercon.formnet | ||
160 | application/vnd.intertrust.digibox | ||
161 | application/vnd.intertrust.nncp | ||
162 | application/vnd.intu.qbo | ||
163 | application/vnd.intu.qfx | ||
164 | application/vnd.irepository.package+xml | ||
165 | application/vnd.is-xpr | ||
166 | application/vnd.japannet-directory-service | ||
167 | application/vnd.japannet-jpnstore-wakeup | ||
168 | application/vnd.japannet-payment-wakeup | ||
169 | application/vnd.japannet-registration | ||
170 | application/vnd.japannet-registration-wakeup | ||
171 | application/vnd.japannet-setstore-wakeup | ||
172 | application/vnd.japannet-verification | ||
173 | application/vnd.japannet-verification-wakeup | ||
174 | application/vnd.koan | ||
175 | application/vnd.lotus-1-2-3 | ||
176 | application/vnd.lotus-approach | ||
177 | application/vnd.lotus-freelance | ||
178 | application/vnd.lotus-notes | ||
179 | application/vnd.lotus-organizer | ||
180 | application/vnd.lotus-screencam | ||
181 | application/vnd.lotus-wordpro | ||
182 | application/vnd.mcd | ||
183 | application/vnd.mediastation.cdkey | ||
184 | application/vnd.meridian-slingshot | ||
185 | application/vnd.mif mif | ||
186 | application/vnd.minisoft-hp3000-save | ||
187 | application/vnd.mitsubishi.misty-guard.trustweb | ||
188 | application/vnd.mobius.daf | ||
189 | application/vnd.mobius.dis | ||
190 | application/vnd.mobius.msl | ||
191 | application/vnd.mobius.plc | ||
192 | application/vnd.mobius.txf | ||
193 | application/vnd.motorola.flexsuite | ||
194 | application/vnd.motorola.flexsuite.adsi | ||
195 | application/vnd.motorola.flexsuite.fis | ||
196 | application/vnd.motorola.flexsuite.gotap | ||
197 | application/vnd.motorola.flexsuite.kmr | ||
198 | application/vnd.motorola.flexsuite.ttc | ||
199 | application/vnd.motorola.flexsuite.wem | ||
200 | application/vnd.mozilla.xul+xml | ||
201 | application/vnd.ms-artgalry | ||
202 | application/vnd.ms-asf | ||
203 | application/vnd.ms-excel xls | ||
204 | application/vnd.ms-lrm | ||
205 | application/vnd.ms-powerpoint ppt | ||
206 | application/vnd.ms-project | ||
207 | application/vnd.ms-tnef | ||
208 | application/vnd.ms-works | ||
209 | application/vnd.mseq | ||
210 | application/vnd.msign | ||
211 | application/vnd.music-niff | ||
212 | application/vnd.musician | ||
213 | application/vnd.netfpx | ||
214 | application/vnd.noblenet-directory | ||
215 | application/vnd.noblenet-sealer | ||
216 | application/vnd.noblenet-web | ||
217 | application/vnd.novadigm.EDM | ||
218 | application/vnd.novadigm.EDX | ||
219 | application/vnd.novadigm.EXT | ||
220 | application/vnd.osa.netdeploy | ||
221 | application/vnd.palm | ||
222 | application/vnd.pg.format | ||
223 | application/vnd.pg.osasli | ||
224 | application/vnd.powerbuilder6 | ||
225 | application/vnd.powerbuilder6-s | ||
226 | application/vnd.powerbuilder7 | ||
227 | application/vnd.powerbuilder7-s | ||
228 | application/vnd.powerbuilder75 | ||
229 | application/vnd.powerbuilder75-s | ||
230 | application/vnd.previewsystems.box | ||
231 | application/vnd.publishare-delta-tree | ||
232 | application/vnd.pvi.ptid1 | ||
233 | application/vnd.pwg-xhtml-print+xml | ||
234 | application/vnd.rapid | ||
235 | application/vnd.s3sms | ||
236 | application/vnd.seemail | ||
237 | application/vnd.shana.informed.formdata | ||
238 | application/vnd.shana.informed.formtemplate | ||
239 | application/vnd.shana.informed.interchange | ||
240 | application/vnd.shana.informed.package | ||
241 | application/vnd.sss-cod | ||
242 | application/vnd.sss-dtf | ||
243 | application/vnd.sss-ntf | ||
244 | application/vnd.street-stream | ||
245 | application/vnd.svd | ||
246 | application/vnd.swiftview-ics | ||
247 | application/vnd.triscape.mxs | ||
248 | application/vnd.trueapp | ||
249 | application/vnd.truedoc | ||
250 | application/vnd.tve-trigger | ||
251 | application/vnd.ufdl | ||
252 | application/vnd.uplanet.alert | ||
253 | application/vnd.uplanet.alert-wbxml | ||
254 | application/vnd.uplanet.bearer-choice-wbxml | ||
255 | application/vnd.uplanet.bearer-choice | ||
256 | application/vnd.uplanet.cacheop | ||
257 | application/vnd.uplanet.cacheop-wbxml | ||
258 | application/vnd.uplanet.channel | ||
259 | application/vnd.uplanet.channel-wbxml | ||
260 | application/vnd.uplanet.list | ||
261 | application/vnd.uplanet.list-wbxml | ||
262 | application/vnd.uplanet.listcmd | ||
263 | application/vnd.uplanet.listcmd-wbxml | ||
264 | application/vnd.uplanet.signal | ||
265 | application/vnd.vcx | ||
266 | application/vnd.vectorworks | ||
267 | application/vnd.vidsoft.vidconference | ||
268 | application/vnd.visio | ||
269 | application/vnd.vividence.scriptfile | ||
270 | application/vnd.wap.sic | ||
271 | application/vnd.wap.slc | ||
272 | application/vnd.wap.wbxml wbxml | ||
273 | application/vnd.wap.wmlc wmlc | ||
274 | application/vnd.wap.wmlscriptc wmlsc | ||
275 | application/vnd.webturbo | ||
276 | application/vnd.wrq-hp3000-labelled | ||
277 | application/vnd.wt.stf | ||
278 | application/vnd.xara | ||
279 | application/vnd.xfdl | ||
280 | application/vnd.yellowriver-custom-menu | ||
281 | application/whoispp-query | ||
282 | application/whoispp-response | ||
283 | application/wita | ||
284 | application/wordperfect5.1 | ||
285 | application/x-bcpio bcpio | ||
286 | application/x-cdlink vcd | ||
287 | application/x-chess-pgn pgn | ||
288 | application/x-compress | ||
289 | application/x-cpio cpio | ||
290 | application/x-csh csh | ||
291 | application/x-director dcr dir dxr | ||
292 | application/x-dvi dvi | ||
293 | application/x-futuresplash spl | ||
294 | application/x-gtar gtar | ||
295 | application/x-gzip | ||
296 | application/x-hdf hdf | ||
297 | application/x-javascript js | ||
298 | application/x-koan skp skd skt skm | ||
299 | application/x-latex latex | ||
300 | application/x-netcdf nc cdf | ||
301 | application/x-sh sh | ||
302 | application/x-shar shar | ||
303 | application/x-shockwave-flash swf | ||
304 | application/x-stuffit sit | ||
305 | application/x-sv4cpio sv4cpio | ||
306 | application/x-sv4crc sv4crc | ||
307 | application/x-tar tar | ||
308 | application/x-tcl tcl | ||
309 | application/x-tex tex | ||
310 | application/x-texinfo texinfo texi | ||
311 | application/x-troff t tr roff | ||
312 | application/x-troff-man man | ||
313 | application/x-troff-me me | ||
314 | application/x-troff-ms ms | ||
315 | application/x-ustar ustar | ||
316 | application/x-wais-source src | ||
317 | application/x400-bp | ||
318 | application/xml | ||
319 | application/xml-dtd | ||
320 | application/xml-external-parsed-entity | ||
321 | application/zip zip | ||
322 | audio/32kadpcm | ||
323 | audio/basic au snd | ||
324 | audio/g.722.1 | ||
325 | audio/l16 | ||
326 | audio/midi mid midi kar | ||
327 | audio/mp4a-latm | ||
328 | audio/mpa-robust | ||
329 | audio/mpeg mpga mp2 mp3 | ||
330 | audio/parityfec | ||
331 | audio/prs.sid | ||
332 | audio/telephone-event | ||
333 | audio/tone | ||
334 | audio/vnd.cisco.nse | ||
335 | audio/vnd.cns.anp1 | ||
336 | audio/vnd.cns.inf1 | ||
337 | audio/vnd.digital-winds | ||
338 | audio/vnd.everad.plj | ||
339 | audio/vnd.lucent.voice | ||
340 | audio/vnd.nortel.vbk | ||
341 | audio/vnd.nuera.ecelp4800 | ||
342 | audio/vnd.nuera.ecelp7470 | ||
343 | audio/vnd.nuera.ecelp9600 | ||
344 | audio/vnd.octel.sbc | ||
345 | audio/vnd.qcelp | ||
346 | audio/vnd.rhetorex.32kadpcm | ||
347 | audio/vnd.vmx.cvsd | ||
348 | audio/x-aiff aif aiff aifc | ||
349 | audio/x-mpegurl m3u | ||
350 | audio/x-pn-realaudio ram rm | ||
351 | audio/x-pn-realaudio-plugin rpm | ||
352 | audio/x-realaudio ra | ||
353 | audio/x-wav wav | ||
354 | chemical/x-pdb pdb | ||
355 | chemical/x-xyz xyz | ||
356 | image/bmp bmp | ||
357 | image/cgm | ||
358 | image/g3fax | ||
359 | image/gif gif | ||
360 | image/ief ief | ||
361 | image/jpeg jpeg jpg jpe | ||
362 | image/naplps | ||
363 | image/png png | ||
364 | image/prs.btif | ||
365 | image/prs.pti | ||
366 | image/tiff tiff tif | ||
367 | image/vnd.cns.inf2 | ||
368 | image/vnd.dwg | ||
369 | image/vnd.dxf | ||
370 | image/vnd.fastbidsheet | ||
371 | image/vnd.fpx | ||
372 | image/vnd.fst | ||
373 | image/vnd.fujixerox.edmics-mmr | ||
374 | image/vnd.fujixerox.edmics-rlc | ||
375 | image/vnd.mix | ||
376 | image/vnd.net-fpx | ||
377 | image/vnd.svf | ||
378 | image/vnd.wap.wbmp wbmp | ||
379 | image/vnd.xiff | ||
380 | image/x-cmu-raster ras | ||
381 | image/x-portable-anymap pnm | ||
382 | image/x-portable-bitmap pbm | ||
383 | image/x-portable-graymap pgm | ||
384 | image/x-portable-pixmap ppm | ||
385 | image/x-rgb rgb | ||
386 | image/x-xbitmap xbm | ||
387 | image/x-xpixmap xpm | ||
388 | image/x-xwindowdump xwd | ||
389 | message/delivery-status | ||
390 | message/disposition-notification | ||
391 | message/external-body | ||
392 | message/http | ||
393 | message/news | ||
394 | message/partial | ||
395 | message/rfc822 | ||
396 | message/s-http | ||
397 | model/iges igs iges | ||
398 | model/mesh msh mesh silo | ||
399 | model/vnd.dwf | ||
400 | model/vnd.flatland.3dml | ||
401 | model/vnd.gdl | ||
402 | model/vnd.gs-gdl | ||
403 | model/vnd.gtw | ||
404 | model/vnd.mts | ||
405 | model/vnd.vtu | ||
406 | model/vrml wrl vrml | ||
407 | multipart/alternative | ||
408 | multipart/appledouble | ||
409 | multipart/byteranges | ||
410 | multipart/digest | ||
411 | multipart/encrypted | ||
412 | multipart/form-data | ||
413 | multipart/header-set | ||
414 | multipart/mixed | ||
415 | multipart/parallel | ||
416 | multipart/related | ||
417 | multipart/report | ||
418 | multipart/signed | ||
419 | multipart/voice-message | ||
420 | text/calendar | ||
421 | text/css css | ||
422 | text/directory | ||
423 | text/enriched | ||
424 | text/html html htm | ||
425 | text/parityfec | ||
426 | text/plain asc txt | ||
427 | text/prs.lines.tag | ||
428 | text/rfc822-headers | ||
429 | text/richtext rtx | ||
430 | text/rtf rtf | ||
431 | text/sgml sgml sgm | ||
432 | text/tab-separated-values tsv | ||
433 | text/t140 | ||
434 | text/uri-list | ||
435 | text/vnd.DMClientScript | ||
436 | text/vnd.IPTC.NITF | ||
437 | text/vnd.IPTC.NewsML | ||
438 | text/vnd.abc | ||
439 | text/vnd.curl | ||
440 | text/vnd.flatland.3dml | ||
441 | text/vnd.fly | ||
442 | text/vnd.fmi.flexstor | ||
443 | text/vnd.in3d.3dml | ||
444 | text/vnd.in3d.spot | ||
445 | text/vnd.latex-z | ||
446 | text/vnd.motorola.reflex | ||
447 | text/vnd.ms-mediapackage | ||
448 | text/vnd.wap.si | ||
449 | text/vnd.wap.sl | ||
450 | text/vnd.wap.wml wml | ||
451 | text/vnd.wap.wmlscript wmls | ||
452 | text/x-setext etx | ||
453 | text/xml xml xsl | ||
454 | text/xml-external-parsed-entity | ||
455 | video/mp4v-es | ||
456 | video/mpeg mpeg mpg mpe | ||
457 | video/parityfec | ||
458 | video/pointer | ||
459 | video/quicktime qt mov | ||
460 | video/vnd.fvt | ||
461 | video/vnd.motorola.video | ||
462 | video/vnd.motorola.videop | ||
463 | video/vnd.mpegurl mxu | ||
464 | video/vnd.mts | ||
465 | video/vnd.nokia.interleaved-multimedia | ||
466 | video/vnd.vivo | ||
467 | video/x-msvideo avi | ||
468 | video/x-sgi-movie movie | ||
469 | x-conference/x-cooltalk ice | ||
diff --git a/contrib/Win32/help/resource.h b/contrib/Win32/help/resource.h deleted file mode 100644 index a16dbd2c..00000000 --- a/contrib/Win32/help/resource.h +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | //{{NO_DEPENDENCIES}} | ||
2 | // Microsoft Developer Studio generated include file. | ||
3 | // Used by help.rc | ||
4 | // | ||
5 | #define IDI_ICON1 101 | ||
6 | |||
7 | // Next default values for new objects | ||
8 | // | ||
9 | #ifdef APSTUDIO_INVOKED | ||
10 | #ifndef APSTUDIO_READONLY_SYMBOLS | ||
11 | #define _APS_NEXT_RESOURCE_VALUE 102 | ||
12 | #define _APS_NEXT_COMMAND_VALUE 40001 | ||
13 | #define _APS_NEXT_CONTROL_VALUE 1000 | ||
14 | #define _APS_NEXT_SYMED_VALUE 101 | ||
15 | #endif | ||
16 | #endif | ||
diff --git a/contrib/Win32/libwebserver.dsp b/contrib/Win32/libwebserver.dsp deleted file mode 100644 index 00f36e24..00000000 --- a/contrib/Win32/libwebserver.dsp +++ /dev/null | |||
@@ -1,237 +0,0 @@ | |||
1 | # Microsoft Developer Studio Project File - Name="libwebserver" - Package Owner=<4> | ||
2 | # Microsoft Developer Studio Generated Build File, Format Version 6.00 | ||
3 | # ** DO NOT EDIT ** | ||
4 | |||
5 | # TARGTYPE "Win32 (x86) Static Library" 0x0104 | ||
6 | |||
7 | CFG=libwebserver - Win32 Release | ||
8 | !MESSAGE This is not a valid makefile. To build this project using NMAKE, | ||
9 | !MESSAGE use the Export Makefile command and run | ||
10 | !MESSAGE | ||
11 | !MESSAGE NMAKE /f "libwebserver.mak". | ||
12 | !MESSAGE | ||
13 | !MESSAGE You can specify a configuration when running NMAKE | ||
14 | !MESSAGE by defining the macro CFG on the command line. For example: | ||
15 | !MESSAGE | ||
16 | !MESSAGE NMAKE /f "libwebserver.mak" CFG="libwebserver - Win32 Release" | ||
17 | !MESSAGE | ||
18 | !MESSAGE Possible choices for configuration are: | ||
19 | !MESSAGE | ||
20 | !MESSAGE "libwebserver - Win32 Release" (based on "Win32 (x86) Static Library") | ||
21 | !MESSAGE "libwebserver - Win32 Debug" (based on "Win32 (x86) Static Library") | ||
22 | !MESSAGE | ||
23 | |||
24 | # Begin Project | ||
25 | # PROP AllowPerConfigDependencies 0 | ||
26 | # PROP Scc_ProjName "" | ||
27 | # PROP Scc_LocalPath "" | ||
28 | CPP=cl.exe | ||
29 | RSC=rc.exe | ||
30 | |||
31 | !IF "$(CFG)" == "libwebserver - Win32 Release" | ||
32 | |||
33 | # PROP BASE Use_MFC 0 | ||
34 | # PROP BASE Use_Debug_Libraries 0 | ||
35 | # PROP BASE Output_Dir "Release" | ||
36 | # PROP BASE Intermediate_Dir "Release" | ||
37 | # PROP BASE Target_Dir "" | ||
38 | # PROP Use_MFC 0 | ||
39 | # PROP Use_Debug_Libraries 0 | ||
40 | # PROP Output_Dir "Release" | ||
41 | # PROP Intermediate_Dir "Release" | ||
42 | # PROP Target_Dir "" | ||
43 | # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c | ||
44 | # ADD CPP /nologo /W3 /GX /O2 /I "../include" /I "./" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c | ||
45 | # ADD BASE RSC /l 0x816 /d "NDEBUG" | ||
46 | # ADD RSC /l 0x816 /d "NDEBUG" | ||
47 | BSC32=bscmake.exe | ||
48 | # ADD BASE BSC32 /nologo | ||
49 | # ADD BSC32 /nologo | ||
50 | LIB32=link.exe -lib | ||
51 | # ADD BASE LIB32 /nologo | ||
52 | # ADD LIB32 /nologo /out:"../bin/libwebserver.lib" | ||
53 | |||
54 | !ELSEIF "$(CFG)" == "libwebserver - Win32 Debug" | ||
55 | |||
56 | # PROP BASE Use_MFC 0 | ||
57 | # PROP BASE Use_Debug_Libraries 1 | ||
58 | # PROP BASE Output_Dir "Debug" | ||
59 | # PROP BASE Intermediate_Dir "Debug" | ||
60 | # PROP BASE Target_Dir "" | ||
61 | # PROP Use_MFC 0 | ||
62 | # PROP Use_Debug_Libraries 1 | ||
63 | # PROP Output_Dir "Debug" | ||
64 | # PROP Intermediate_Dir "Debug" | ||
65 | # PROP Target_Dir "" | ||
66 | # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c | ||
67 | # ADD CPP /nologo /Gm /GX /ZI /Od /I "./" /I "../include" /D "_LIB" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FA /YX /FD /GZ /c | ||
68 | # SUBTRACT CPP /X | ||
69 | # ADD BASE RSC /l 0x816 /d "_DEBUG" | ||
70 | # ADD RSC /l 0x816 /d "DEBUG" | ||
71 | BSC32=bscmake.exe | ||
72 | # ADD BASE BSC32 /nologo | ||
73 | # ADD BSC32 /nologo | ||
74 | LIB32=link.exe -lib | ||
75 | # ADD BASE LIB32 /nologo | ||
76 | # ADD LIB32 /nologo /out:"../bin/libwebserver.lib" | ||
77 | |||
78 | !ENDIF | ||
79 | |||
80 | # Begin Target | ||
81 | |||
82 | # Name "libwebserver - Win32 Release" | ||
83 | # Name "libwebserver - Win32 Debug" | ||
84 | # Begin Group "Source Files" | ||
85 | |||
86 | # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" | ||
87 | # Begin Source File | ||
88 | |||
89 | SOURCE=..\src\client.c | ||
90 | # End Source File | ||
91 | # Begin Source File | ||
92 | |||
93 | SOURCE=..\src\clientinfo.c | ||
94 | # End Source File | ||
95 | # Begin Source File | ||
96 | |||
97 | SOURCE=.\dirent.c | ||
98 | # End Source File | ||
99 | # Begin Source File | ||
100 | |||
101 | SOURCE=..\src\error.c | ||
102 | # End Source File | ||
103 | # Begin Source File | ||
104 | |||
105 | SOURCE=.\flock.c | ||
106 | # End Source File | ||
107 | # Begin Source File | ||
108 | |||
109 | SOURCE=..\src\fnmatch.c | ||
110 | # End Source File | ||
111 | # Begin Source File | ||
112 | |||
113 | SOURCE=..\src\gethandler.c | ||
114 | # End Source File | ||
115 | # Begin Source File | ||
116 | |||
117 | SOURCE=..\src\memory.c | ||
118 | # End Source File | ||
119 | # Begin Source File | ||
120 | |||
121 | SOURCE=..\src\outgif.c | ||
122 | # End Source File | ||
123 | # Begin Source File | ||
124 | |||
125 | SOURCE=..\src\outstream.c | ||
126 | # End Source File | ||
127 | # Begin Source File | ||
128 | |||
129 | SOURCE=..\src\server.c | ||
130 | # End Source File | ||
131 | # Begin Source File | ||
132 | |||
133 | SOURCE=..\src\socket.c | ||
134 | # End Source File | ||
135 | # Begin Source File | ||
136 | |||
137 | SOURCE=..\src\utils.c | ||
138 | # End Source File | ||
139 | # Begin Source File | ||
140 | |||
141 | SOURCE=..\src\weblog.c | ||
142 | # End Source File | ||
143 | # End Group | ||
144 | # Begin Group "Header Files" | ||
145 | |||
146 | # PROP Default_Filter "h;hpp;hxx;hm;inl" | ||
147 | # Begin Source File | ||
148 | |||
149 | SOURCE=..\include\client.h | ||
150 | # End Source File | ||
151 | # Begin Source File | ||
152 | |||
153 | SOURCE=..\include\clientinfo.h | ||
154 | # End Source File | ||
155 | # Begin Source File | ||
156 | |||
157 | SOURCE=..\include\config.h | ||
158 | # End Source File | ||
159 | # Begin Source File | ||
160 | |||
161 | SOURCE=..\include\debug.h | ||
162 | # End Source File | ||
163 | # Begin Source File | ||
164 | |||
165 | SOURCE=.\dirent.h | ||
166 | # End Source File | ||
167 | # Begin Source File | ||
168 | |||
169 | SOURCE=..\include\error.h | ||
170 | # End Source File | ||
171 | # Begin Source File | ||
172 | |||
173 | SOURCE=.\flock.h | ||
174 | # End Source File | ||
175 | # Begin Source File | ||
176 | |||
177 | SOURCE=..\include\fnmatch.h | ||
178 | # End Source File | ||
179 | # Begin Source File | ||
180 | |||
181 | SOURCE=..\include\gethandler.h | ||
182 | # End Source File | ||
183 | # Begin Source File | ||
184 | |||
185 | SOURCE=..\include\logo.h | ||
186 | # End Source File | ||
187 | # Begin Source File | ||
188 | |||
189 | SOURCE=..\include\memory.h | ||
190 | # End Source File | ||
191 | # Begin Source File | ||
192 | |||
193 | SOURCE=..\include\module.h | ||
194 | # End Source File | ||
195 | # Begin Source File | ||
196 | |||
197 | SOURCE=..\include\outgif.h | ||
198 | # End Source File | ||
199 | # Begin Source File | ||
200 | |||
201 | SOURCE=..\include\outstream.h | ||
202 | # End Source File | ||
203 | # Begin Source File | ||
204 | |||
205 | SOURCE=..\include\server.h | ||
206 | # End Source File | ||
207 | # Begin Source File | ||
208 | |||
209 | SOURCE=..\include\socket.h | ||
210 | # End Source File | ||
211 | # Begin Source File | ||
212 | |||
213 | SOURCE=..\include\utils.h | ||
214 | # End Source File | ||
215 | # Begin Source File | ||
216 | |||
217 | SOURCE=..\include\web_server.h | ||
218 | # End Source File | ||
219 | # Begin Source File | ||
220 | |||
221 | SOURCE=..\include\weblog.h | ||
222 | # End Source File | ||
223 | # End Group | ||
224 | # Begin Source File | ||
225 | |||
226 | SOURCE=..\Authors | ||
227 | # End Source File | ||
228 | # Begin Source File | ||
229 | |||
230 | SOURCE=..\ChangeLog | ||
231 | # End Source File | ||
232 | # Begin Source File | ||
233 | |||
234 | SOURCE=..\Todo | ||
235 | # End Source File | ||
236 | # End Target | ||
237 | # End Project | ||
diff --git a/contrib/Win32/libwebserver.dsw b/contrib/Win32/libwebserver.dsw deleted file mode 100644 index 5ae9bb2f..00000000 --- a/contrib/Win32/libwebserver.dsw +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | Microsoft Developer Studio Workspace File, Format Version 6.00 | ||
2 | # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! | ||
3 | |||
4 | ############################################################################### | ||
5 | |||
6 | Project: "help"=".\help\help.dsp" - Package Owner=<4> | ||
7 | |||
8 | Package=<5> | ||
9 | {{{ | ||
10 | }}} | ||
11 | |||
12 | Package=<4> | ||
13 | {{{ | ||
14 | Begin Project Dependency | ||
15 | Project_Dep_Name libwebserver | ||
16 | End Project Dependency | ||
17 | }}} | ||
18 | |||
19 | ############################################################################### | ||
20 | |||
21 | Project: "libwebserver"=".\libwebserver.dsp" - Package Owner=<4> | ||
22 | |||
23 | Package=<5> | ||
24 | {{{ | ||
25 | }}} | ||
26 | |||
27 | Package=<4> | ||
28 | {{{ | ||
29 | }}} | ||
30 | |||
31 | ############################################################################### | ||
32 | |||
33 | Global: | ||
34 | |||
35 | Package=<5> | ||
36 | {{{ | ||
37 | }}} | ||
38 | |||
39 | Package=<3> | ||
40 | {{{ | ||
41 | }}} | ||
42 | |||
43 | ############################################################################### | ||
44 | |||
diff --git a/contrib/help/engine.h b/contrib/help/engine.h deleted file mode 100644 index e9dbf334..00000000 --- a/contrib/help/engine.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | /* | ||
2 | * by data2header by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #ifndef _ENGINE_H_ | ||
5 | #define _ENGINE_H_ | ||
6 | |||
7 | char engine[]=""; | ||
8 | |||
9 | #endif | ||
diff --git a/contrib/help/examples.h b/contrib/help/examples.h deleted file mode 100644 index 6abbf790..00000000 --- a/contrib/help/examples.h +++ /dev/null | |||
@@ -1,605 +0,0 @@ | |||
1 | /* | ||
2 | * by data2header by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #ifndef _EXAMPLES_H_ | ||
5 | #define _EXAMPLES_H_ | ||
6 | |||
7 | char examples[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27" | ||
8 | "\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x65\x78\x61\x6D\x70" | ||
9 | "\x6C\x65\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42" | ||
10 | "\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x21\x2D\x2D\x20\x4A\x6F\x68\x61\x6E\x6E\x65\x73\x20\x45\x2E\x20\x53" | ||
11 | "\x63\x68\x69\x6E\x64\x65\x6C\x69\x6E\x20\x2D\x2D\x3E\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E" | ||
12 | "\x61\x6D\x65\x3D\x68\x65\x6C\x6C\x6F\x77\x6F\x72\x6C\x64\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F" | ||
13 | "\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x68\x65\x6C\x6C" | ||
14 | "\x6F\x3E\x3C\x48\x33\x3E\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E" | ||
15 | "\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C" | ||
16 | "\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C" | ||
17 | "\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69" | ||
18 | "\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73" | ||
19 | "\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66" | ||
20 | "\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72" | ||
21 | "\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72" | ||
22 | "\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65" | ||
23 | "\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65" | ||
24 | "\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F" | ||
25 | "\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68\x69\x73\x20" | ||
26 | "\x65\x78\x61\x6D\x70\x6C\x65\x20\x73\x74\x61\x72\x74\x73\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20" | ||
27 | "\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72" | ||
28 | "\x65\x71\x75\x65\x73\x74\x73\x20\x70\x6F\x69\x6E\x74\x69\x6E\x67\x20\x74\x6F\x20\x68\x65\x6C\x6C\x6F\x5F" | ||
29 | "\x77\x6F\x72\x6C\x64\x28\x29\xA\x74\x68\x61\x74\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x68\x65\x20\x63\x6F" | ||
30 | "\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x6E\x64\x20\x6F\x66" | ||
31 | "\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x20\x61\x6E\x64" | ||
32 | "\x20\x6F\x6E\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x70\x72\x69\x6E\x74\x66\x20\x77\x69\x74\x68\x20\x48\x65" | ||
33 | "\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x54\x41\x42\x4C\x45\x20" | ||
34 | "\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46" | ||
35 | "\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44" | ||
36 | "\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
37 | "\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68" | ||
38 | "\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x68\x65\x6C\x6C\x6F\x5F\x77\x6F\x72\x6C\x64\x28\x29\x20" | ||
39 | "\x7B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x74" | ||
40 | "\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E" | ||
41 | "\x74\x66\x28\x22\x48\x65\x6C\x6C\x6F\x2C\x20\x57\x6F\x72\x6C\x64\x21\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x7D" | ||
42 | "\xA\xA\x69\x6E\x74\x20\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A" | ||
43 | "\x20\x61\x72\x67\x76\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65" | ||
44 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72" | ||
45 | "\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73" | ||
46 | "\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C" | ||
47 | "\x70\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65" | ||
48 | "\x20\x61\x6E\x64\x20\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x61\x74\x20\x70" | ||
49 | "\x6F\x72\x74\x20\x38\x30\x2C\x20\x6C\x6F\x67\x67\x69\x6E\x67\x20\x74\x6F\x20\x68\x65\x6C\x70\x2E\x6C\x6F" | ||
50 | "\x67\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28" | ||
51 | "\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20" | ||
52 | "\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20" | ||
53 | "\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
54 | "\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2A" | ||
55 | "\x22\x2C\x68\x65\x6C\x6C\x6F\x5F\x77\x6F\x72\x6C\x64\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68" | ||
56 | "\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20" | ||
57 | "\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
58 | "\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72" | ||
59 | "\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20" | ||
60 | "\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54" | ||
61 | "\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA" | ||
62 | "\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x6C\x6F\x67\x66\x69\x6C\x65\x3E\x3C\x42" | ||
63 | "\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68" | ||
64 | "\x72\x65\x66\x3D\x27\x2F\x6C\x6F\x67\x27\x3E\x3C\x48\x33\x3E\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F\x48\x33" | ||
65 | "\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA" | ||
66 | "\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A" | ||
67 | "\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66" | ||
68 | "\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E" | ||
69 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61" | ||
70 | "\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65" | ||
71 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73" | ||
72 | "\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
73 | "\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77" | ||
74 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
75 | "\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C" | ||
76 | "\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64" | ||
77 | "\x66\x69\x6C\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F" | ||
78 | "\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68\x69\x73\x20" | ||
79 | "\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65\x73\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20" | ||
80 | "\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23" | ||
81 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C" | ||
82 | "\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F\x61\x3E\x20\x74\x6F\x20\x73\x65\x6E\x64\x20\x61" | ||
83 | "\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
84 | "\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72" | ||
85 | "\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44" | ||
86 | "\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65" | ||
87 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73" | ||
88 | "\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\x76\x6F\x69\x64\x20\x6C\x6F\x67\x66\x69\x6C\x65\x28\x29" | ||
89 | "\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74" | ||
90 | "\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22" | ||
91 | "\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66" | ||
92 | "\x69\x6C\x65\x28\x73\x65\x72\x76\x65\x72\x2E\x6C\x6F\x67\x66\x69\x6C\x65\x29\x3B\x20\x2F\x2F\x20\x61\x64" | ||
93 | "\x64\x20\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x6F\x75\x74\x70\x75\x74\xA" | ||
94 | "\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x45\x6E\x64\x20\x6F\x66\x20\x6C\x6F\x67" | ||
95 | "\x5C\x6E\x22\x29\x3B\xA\x7D\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\xA\xA\x6D\x61\x69\x6E\x28\x29\x20" | ||
96 | "\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
97 | "\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65" | ||
98 | "\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69" | ||
99 | "\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x32\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C" | ||
100 | "\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x65\xA\x20\x20\x20\x20" | ||
101 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72" | ||
102 | "\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74" | ||
103 | "\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
104 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72" | ||
105 | "\x76\x65\x72\x2C\x22\x2A\x20\x2F\x6C\x6F\x67\x22\x2C\x6C\x6F\x67\x66\x69\x6C\x65\x2C\x30\x29\x3B\x20\x2F" | ||
106 | "\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x68\x74\x74\x70\x3A\x2F\x2F\x68" | ||
107 | "\x6F\x73\x74\x2F\x6C\x6F\x67\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77" | ||
108 | "\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
109 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20" | ||
110 | "\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA" | ||
111 | "\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52" | ||
112 | "\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x63\x65\x6E\x74" | ||
113 | "\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x69\x6D\x61\x67\x65\x75\x70\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E" | ||
114 | "\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x27" | ||
115 | "\x2F\x69\x6D\x61\x67\x65\x27\x3E\x3C\x48\x33\x3E\x49\x6D\x61\x67\x65\x20\x55\x70\x6C\x6F\x61\x64\x65\x72" | ||
116 | "\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74" | ||
117 | "\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69" | ||
118 | "\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65" | ||
119 | "\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E" | ||
120 | "\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52" | ||
121 | "\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E" | ||
122 | "\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77" | ||
123 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42" | ||
124 | "\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F" | ||
125 | "\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72" | ||
126 | "\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F" | ||
127 | "\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F" | ||
128 | "\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61" | ||
129 | "\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65" | ||
130 | "\x73\x20\x74\x68\x65\x20\x73\x74\x72\x75\x63\x74\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65" | ||
131 | "\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43" | ||
132 | "\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x20\x66\x6F\x72\x20\x66\x65\x74\x63\x68\x69\x6E\x67" | ||
133 | "\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74" | ||
134 | "\xA\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29\x20\x74\x6F" | ||
135 | "\x20\x73\x65\x6E\x64\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x20\x3C\x42\x52\x3E\xA\x61\x6E\x64\x20\x6D" | ||
136 | "\x75\x6C\x74\x69\x70\x61\x72\x74\x20\x66\x6F\x72\x20\x66\x65\x74\x63\x68\x69\x6E\x67\x20\x74\x68\x65\x20" | ||
137 | "\x75\x70\x6C\x6F\x61\x64\x65\x64\x20\x66\x69\x6C\x65\x3C\x42\x52\x3E\xA\xA\xA\x3C\x42\x52\x3E\x3C\x42" | ||
138 | "\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63" | ||
139 | "\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52" | ||
140 | "\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65" | ||
141 | "\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
142 | "\x20\x20\x20\x20\x20\x20\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x6C\x69\x62" | ||
143 | "\x2E\x68\x26\x67\x74\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\xA\x73\x74\x72\x75\x63\x74\x20\x69\x6D\x61" | ||
144 | "\x67\x65\x20\x7B\xA\x9\x63\x68\x61\x72\x20\x2A\x64\x61\x74\x61\x3B\xA\x9\x73\x69\x7A\x65\x5F\x74\x20" | ||
145 | "\x73\x69\x7A\x65\x3B\xA\x7D\x20\x69\x6D\x61\x67\x65\x3D\x7B\x4E\x55\x4C\x4C\x2C\x30\x7D\x3B\xA\xA\x76" | ||
146 | "\x6F\x69\x64\x20\x69\x6D\x61\x67\x65\x6F\x75\x74\x28\x29\x20\x7B\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65" | ||
147 | "\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29" | ||
148 | "\x29\x29\x20\x7B\xA\x9\x9\x69\x66\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x21\x3D\x4E\x55\x4C\x4C" | ||
149 | "\x29\x20\x7B\xA\x9\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70" | ||
150 | "\x65\x3A\x20\x69\x6D\x61\x67\x65\x2F\x6A\x70\x65\x67\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9" | ||
151 | "\x9\x9\x66\x77\x72\x69\x74\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x2C\x69\x6D\x61\x67\x65\x2E" | ||
152 | "\x73\x69\x7A\x65\x2C\x31\x2C\x73\x74\x64\x6F\x75\x74\x29\x3B\xA\x9\x9\x7D\x3B\xA\x9\x9\x72\x65\x74" | ||
153 | "\x75\x72\x6E\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D" | ||
154 | "\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B" | ||
155 | "\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29" | ||
156 | "\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x20\x62\x67\x63\x6F\x6C\x6F" | ||
157 | "\x72\x3D\x27\x45\x46\x45\x46\x45\x46\x27\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\x20\x20\x20\x20\x20\x20\x20" | ||
158 | "\x20\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x61\x63\x74\x69\x6F\x6E" | ||
159 | "\x3D\x27\x2F\x27\x20\x65\x6E\x63\x74\x79\x70\x65\x3D\x27\x6D\x75\x6C\x74\x69\x70\x61\x72\x74\x2F\x66\x6F" | ||
160 | "\x72\x6D\x2D\x64\x61\x74\x61\x27\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28" | ||
161 | "\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65\x3D" | ||
162 | "\x69\x6D\x61\x67\x65\x26\x67\x74\x3B\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x9" | ||
163 | "\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B" | ||
164 | "\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75" | ||
165 | "\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x64\x61\x74\x61\x29\x29\x20\x7B\xA" | ||
166 | "\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x26\x6C\x74\x3B" | ||
167 | "\x69\x6D\x67\x20\x73\x72\x63\x3D\x27\x2F\x3F\x69\x6D\x67\x3D\x25\x73\x2E\x6A\x70\x67\x27\x26\x67\x74\x3B" | ||
168 | "\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28" | ||
169 | "\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x66\x69\x6C\x65\x6E\x61\x6D\x65\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E" | ||
170 | "\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x66\x69\x6C" | ||
171 | "\x65\x6E\x61\x6D\x65\x29\x3B\xA\x9\x9\x66\x72\x65\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x29" | ||
172 | "\x3B\xA\x9\x9\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x3D\x6D\x61\x6C\x6C\x6F\x63\x28\x43\x6C\x69\x65" | ||
173 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29" | ||
174 | "\x2E\x73\x69\x7A\x65\x2B\x31\x29\x3B\xA\x9\x9\x6D\x65\x6D\x63\x70\x79\x28\x69\x6D\x61\x67\x65\x2E\x64" | ||
175 | "\x61\x74\x61\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28" | ||
176 | "\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x64\x61\x74\x61\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E" | ||
177 | "\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x73\x69\x7A\x65\x29\x3B\xA" | ||
178 | "\x9\x9\x69\x6D\x61\x67\x65\x2E\x73\x69\x7A\x65\x3D\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D" | ||
179 | "\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x73\x69\x7A\x65\x3B\xA\x9\x7D" | ||
180 | "\x65\x6C\x73\x65\x20\x7B\xA\x9\x9\x66\x72\x65\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x29\x3B" | ||
181 | "\xA\x9\x9\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x3D\x4E\x55\x4C\x4C\x3B\xA\x9\x7D\x3B\xA\x9\x70" | ||
182 | "\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA" | ||
183 | "\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29" | ||
184 | "\x3B\xA\x7D\x3B\xA\xA\xA\xA\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x9\x73\x74\x72\x75\x63\x74\x20\x77" | ||
185 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\xA\x9\x69\x66\x28\x21\x77\x65\x62" | ||
186 | "\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x74" | ||
187 | "\x65\x73\x74\x65\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\xA\x9\x9\x66\x70\x72\x69\x6E\x74\x66\x28" | ||
188 | "\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20" | ||
189 | "\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x7D\x3B\xA\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
190 | "\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x22" | ||
191 | "\x2C\x69\x6D\x61\x67\x65\x6F\x75\x74\x2C\x30\x29\x3B\xA\x9\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA" | ||
192 | "\x9\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B" | ||
193 | "\xA\x9\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44" | ||
194 | "\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA" | ||
195 | "\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x61\x75\x74\x68\x3E\x3C\x42\x3E\x3C\x66" | ||
196 | "\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66" | ||
197 | "\x3D\x27\x2F\x61\x75\x74\x68\x27\x3E\x3C\x48\x33\x3E\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F" | ||
198 | "\x6E\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x20\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65" | ||
199 | "\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63" | ||
200 | "\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F" | ||
201 | "\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
202 | "\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C" | ||
203 | "\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69" | ||
204 | "\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27" | ||
205 | "\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E" | ||
206 | "\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74" | ||
207 | "\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73" | ||
208 | "\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D" | ||
209 | "\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65" | ||
210 | "\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65" | ||
211 | "\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
212 | "\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x48\x65\x72\x65\x20\x77\x65\x27\x72\x65\x20\x75\x73" | ||
213 | "\x69\x6E\x67\x20\x74\x68\x65\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75" | ||
214 | "\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72" | ||
215 | "\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72" | ||
216 | "\x65\x63\x74\x69\x76\x65\x3C\x2F\x61\x3E\x20\x74\x6F\x20\x73\x65\x74\x20\x75\x70\x20\x74\x68\x65\x20\x73" | ||
217 | "\x65\x72\x76\x65\x72\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x75" | ||
218 | "\x73\x65\x72\x3A\x20\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x2C\x20\x70\x61\x73\x73\x3A\x20\x22\x70\x61" | ||
219 | "\x73\x73\x77\x6F\x72\x64\x22\xA\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D" | ||
220 | "\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F" | ||
221 | "\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45" | ||
222 | "\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA" | ||
223 | "\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\x23" | ||
224 | "\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x72\x69\x6E\x67\x2E\x68\x26\x67\x74\x3B\xA\xA" | ||
225 | "\xA\x76\x6F\x69\x64\x20\x75\x72\x6C\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x28\x29\x20\x7B\xA" | ||
226 | "\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49" | ||
227 | "\x6E\x66\x6F\x2D\x3E\x75\x73\x65\x72\x29\x20\x7C\x7C\x20\x21\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65" | ||
228 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x70\x61\x73\x73\x29\x20\x26\x26\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
229 | "\x20\x20\x20\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x75\x73\x65\x72" | ||
230 | "\x2C\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x29\x20\x7C\x7C\x20\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69" | ||
231 | "\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x70\x61\x73\x73\x2C\x22\x70\x61\x73\x73\x77\x6F\x72\x64\x22\x29\x29" | ||
232 | "\x20\x7B\x20\x2F\x2F\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x72\x65\x61\x64\x20\x74\x68\x69\x6E\x67\x73\x20" | ||
233 | "\x66\x72\x6F\x6D\x20\x61\x20\x61\x75\x74\x68\x20\x66\x69\x6C\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
234 | "\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65" | ||
235 | "\x63\x74\x69\x76\x65\x28\x22\x48\x54\x54\x50\x2F\x31\x2E\x31\x20\x34\x30\x31\x20\x41\x75\x74\x68\x6F\x72" | ||
236 | "\x69\x7A\x61\x74\x69\x6F\x6E\x20\x52\x65\x71\x75\x69\x72\x65\x64\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20" | ||
237 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x57\x57\x57\x2D\x41\x75\x74\x68" | ||
238 | "\x65\x6E\x74\x69\x63\x61\x74\x65\x3A\x20\x42\x61\x73\x69\x63\x20\x72\x65\x61\x6C\x6D\x3D\x5C\x22\x54\x68" | ||
239 | "\x69\x73\x20\x73\x69\x74\x65\x20\x69\x6E\x66\x6F\x5C\x22\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20" | ||
240 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E" | ||
241 | "\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22" | ||
242 | "\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28" | ||
243 | "\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20" | ||
244 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x6E\x74\x20" | ||
245 | "\x63\x6F\x6C\x6F\x72\x3D\x27\x46\x46\x30\x30\x30\x30\x27\x26\x67\x74\x3B\x41\x63\x63\x65\x73\x73\x20\x64" | ||
246 | "\x65\x6E\x69\x65\x64\x26\x6C\x74\x3B\x2F\x66\x6F\x6E\x74\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20" | ||
247 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B" | ||
248 | "\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
249 | "\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6E\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\xA\x20\x20\x20" | ||
250 | "\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A" | ||
251 | "\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\x20\x20\x20\x20\x20" | ||
252 | "\x20\x20\x20\x20\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42" | ||
253 | "\x4F\x44\x59\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x45\x46\x45\x46\x45\x46\x27\x26\x67\x74\x3B\x5C\x6E" | ||
254 | "\x22\x29\x3B\x20\x20\x20\x20\x20\x20\x20\x20\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66" | ||
255 | "\x28\x22\x59\x6F\x75\x20\x65\x6E\x74\x65\x72\x65\x64\x20\x69\x6E\x20\x79\x6F\x75\x72\x20\x61\x72\x65\x61" | ||
256 | "\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B" | ||
257 | "\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29" | ||
258 | "\x3B\xA\x7D\x3B\xA\xA\xA\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74" | ||
259 | "\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F" | ||
260 | "\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66" | ||
261 | "\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C" | ||
262 | "\x38\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69" | ||
263 | "\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70" | ||
264 | "\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C" | ||
265 | "\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
266 | "\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64" | ||
267 | "\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x61\x75\x74\x68\x22\x2C" | ||
268 | "\x75\x72\x6C\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x2C\x30\x29\x3B\xA\x20\x20\x20\x20\x20\x20" | ||
269 | "\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
270 | "\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29" | ||
271 | "\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
272 | "\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C" | ||
273 | "\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x43" | ||
274 | "\x45\x4E\x54\x45\x52\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x73\x73\x6C\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74" | ||
275 | "\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x48\x33\x3E\x6F\x70\x65\x6E\x73\x73" | ||
276 | "\x6C\x20\x66\x6F\x72\x20\x28\x68\x74\x74\x70\x73\x29\x3C\x2F\x48\x33\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C" | ||
277 | "\x2F\x42\x3E\x3C\x2F\x43\x45\x4E\x54\x45\x52\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73" | ||
278 | "\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68" | ||
279 | "\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F" | ||
280 | "\x73\x65\x72\x76\x65\x72\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F" | ||
281 | "\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA" | ||
282 | "\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23" | ||
283 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
284 | "\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F" | ||
285 | "\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
286 | "\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52" | ||
287 | "\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x48\x65\x72\x65\x20\x77\x65\x20\x73\x65" | ||
288 | "\x74\x75\x70\x20\x61\x20\x73\x65\x72\x76\x65\x72\x20\x61\x6E\x64\x20\x77\x65\x20\x75\x73\x65\x20\x74\x68" | ||
289 | "\x65\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E" | ||
290 | "\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x27\x3E\x77" | ||
291 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3C\x2F\x61\x3E\x20\x74" | ||
292 | "\x6F\x20\x75\x73\x65\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65" | ||
293 | "\x20\x66\x69\x6C\x65\xA\x61\x6E\x64\x20\x77\x65\x20\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x73\x65\x72" | ||
294 | "\x76\x65\x72\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x6C\x61\x67\x20\x57\x53\x5F\x55\x53\x45\x53\x53" | ||
295 | "\x4C\x20\x66\x6F\x72\x20\x73\x65\x63\x75\x72\x65\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x28" | ||
296 | "\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x63\x6F\x6D\x70\x69\x6C\x65\x64\x20\x77\x2F\x20\x6F" | ||
297 | "\x70\x65\x6E\x73\x73\x6C\x29\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\xA\x53\x65\x65\x20\x61\x6C\x73\x6F\x20" | ||
298 | "\x74\x68\x65\x20\x70\x61\x63\x6B\x65\x74\x6D\x6F\x75\x6E\x74\x65\x72\x20\x65\x78\x61\x6D\x70\x6C\x65\x20" | ||
299 | "\x69\x6E\x20\x74\x68\x65\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x20" | ||
300 | "\xA\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20" | ||
301 | "\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E" | ||
302 | "\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\xA\x20\x20\xA\x23" | ||
303 | "\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\xA\x69\x6E" | ||
304 | "\x74\x20\x6D\x61\x69\x6E\x28\x29\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65" | ||
305 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x3B\xA\x20\x20\x20\x20\x20\x20" | ||
306 | "\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x28\x26\x73" | ||
307 | "\x65\x72\x76\x65\x72\x73\x73\x6C\x2C\x22\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x70\x65\x6D\x22\x29\x3B\x20" | ||
308 | "\x2F\x2F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x69\x6C\x65\x20\x20\x20\x20\xA\x20\x20" | ||
309 | "\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28" | ||
310 | "\x26\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x2C\x34\x34\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C" | ||
311 | "\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x29\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
312 | "\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x43\x61\x6E\x6E\x6F\x74" | ||
313 | "\x20\x6F\x70\x65\x6E\x20\x70\x6F\x72\x74\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B" | ||
314 | "\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20" | ||
315 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26" | ||
316 | "\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\x3B\xA" | ||
317 | "\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F" | ||
318 | "\x54\x41\x42\x4C\x45\x3E\xA\x41\x6C\x6C\x20\x74\x68\x65\x20\x72\x65\x73\x74\x20\x69\x73\x20\x74\x68\x65" | ||
319 | "\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x53\x53\x4C\x2E\x20\xA\x3C\x48\x52" | ||
320 | "\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x6F\x75" | ||
321 | "\x74\x67\x69\x66\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37" | ||
322 | "\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x67\x69\x66\x27\x3E\x3C\x48\x33\x3E\x47\x69\x66\x20" | ||
323 | "\x67\x65\x6E\x65\x72\x61\x74\x6F\x72\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C" | ||
324 | "\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73" | ||
325 | "\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68" | ||
326 | "\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F" | ||
327 | "\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E" | ||
328 | "\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70" | ||
329 | "\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68" | ||
330 | "\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64" | ||
331 | "\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C" | ||
332 | "\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E" | ||
333 | "\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
334 | "\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77" | ||
335 | "\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x27\x3E\x77" | ||
336 | "\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x3C\x2F\x61" | ||
337 | "\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63" | ||
338 | "\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74" | ||
339 | "\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x3C\x2F\x61\x3E" | ||
340 | "\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74" | ||
341 | "\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66" | ||
342 | "\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68" | ||
343 | "\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x64\x72\x61\x77\x73\x20\x61\x6E\x20\x63\x69\x72\x63\x6C\x65" | ||
344 | "\x20\x61\x74\x20\x78\x2C\x79\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64\x20\x62\x79\x20\x63\x6C\x69\x65\x6E" | ||
345 | "\x74\x2C\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x73\x20\x77\x69\x74\x68\x20\x66\x75\x6E\x63\x74\x69" | ||
346 | "\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F" | ||
347 | "\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x27\x3E\x77" | ||
348 | "\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x3C\x2F\x61\x3E\xA\xA\xA" | ||
349 | "\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30" | ||
350 | "\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72" | ||
351 | "\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69" | ||
352 | "\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63" | ||
353 | "\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\x23\x69\x6E\x63\x6C" | ||
354 | "\x75\x64\x65\x20\x26\x6C\x74\x3B\x6D\x61\x74\x68\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x23\x64\x65\x66\x69" | ||
355 | "\x6E\x65\x20\x47\x49\x46\x53\x49\x44\x45\x20\x33\x32\x30\xA\x63\x68\x61\x72\x20\x67\x69\x66\x64\x61\x74" | ||
356 | "\x61\x5B\x47\x49\x46\x53\x49\x44\x45\x2A\x47\x49\x46\x53\x49\x44\x45\x5D\x3B\xA\x76\x6F\x69\x64\x20\x6F" | ||
357 | "\x75\x74\x67\x69\x66\x28\x29\x20\x7B\xA\x9\x66\x6C\x6F\x61\x74\x20\x69\x3B\xA\x9\x69\x6E\x74\x20\x78" | ||
358 | "\x2C\x79\x2C\x78\x63\x2C\x79\x63\x3B\xA\x9\x69\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3B\xA\x9\x77\x65\x62" | ||
359 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x22\x45\x47\x41" | ||
360 | "\x22\x29\x3B\xA\x9\x69\x66\x28\x2A\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79" | ||
361 | "\x28\x22\x69\x6D\x67\x22\x29\x21\x3D\x30\x29\x20\x7B\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F" | ||
362 | "\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x69\x6D\x61\x67\x65\x2F\x67\x69\x66\x5C\x72\x5C\x6E\x5C" | ||
363 | "\x72\x5C\x6E\x22\x29\x3B\xA\x9\x9\x69\x66\x28\x21\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69\x65\x6E\x74" | ||
364 | "\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29\x2C\x22\x63\x69\x72\x63\x6C\x65" | ||
365 | "\x22\x29\x29\x20\x7B\xA\x9\x9\x9\x78\x63\x3D\x61\x74\x6F\x69\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66" | ||
366 | "\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x29\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9" | ||
367 | "\x9\x79\x63\x3D\x61\x74\x6F\x69\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79" | ||
368 | "\x28\x22\x79\x22\x29\x29\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9\x9\x63\x6F\x6C\x6F\x72\x3D\x28" | ||
369 | "\x72\x61\x6E\x64\x28\x29\x25\x31\x35\x29\x2B\x31\x3B\xA\x9\x9\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69" | ||
370 | "\x3C\x36\x2E\x32\x38\x3B\x69\x2B\x3D\x30\x2E\x30\x31\x29\x20\x7B\xA\x9\x9\x9\x9\x78\x3D\x28\x69\x6E" | ||
371 | "\x74\x29\x28\x47\x49\x46\x53\x49\x44\x45\x2B\x28\x78\x63\x2B\x63\x6F\x73\x28\x69\x29\x2A\x31\x30\x29\x29" | ||
372 | "\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9\x9\x9\x79\x3D\x28\x69\x6E\x74\x29\x28\x47\x49\x46\x53" | ||
373 | "\x49\x44\x45\x2B\x28\x79\x63\x2B\x73\x69\x6E\x28\x69\x29\x2A\x31\x30\x29\x29\x25\x47\x49\x46\x53\x49\x44" | ||
374 | "\x45\x3B\xA\x9\x9\x9\x9\x67\x69\x66\x64\x61\x74\x61\x5B\x78\x2B\x28\x79\x2A\x47\x49\x46\x53\x49\x44" | ||
375 | "\x45\x29\x5D\x3D\x63\x6F\x6C\x6F\x72\x3B\xA\x9\x9\x9\x7D\x3B\xA\x9\x9\x7D\x3B\xA\x9\x9\x77\x65" | ||
376 | "\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x67\x69\x66\x64\x61\x74\x61" | ||
377 | "\x2C\x47\x49\x46\x53\x49\x44\x45\x2C\x47\x49\x46\x53\x49\x44\x45\x29\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72" | ||
378 | "\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x63\x65\x6E\x74\x65\x72\x26\x67\x74\x3B\x47\x65\x6E\x65\x72\x61" | ||
379 | "\x74\x65\x64\x20\x61\x20\x63\x69\x72\x63\x6C\x65\x20\x28\x63\x6C\x69\x63\x6B\x20\x69\x6E\x73\x69\x64\x65" | ||
380 | "\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x29\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B" | ||
381 | "\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x50\x72\x65\x73\x73\x65\x64\x20\x78\x3D\x25\x73\x2C\x79\x3D\x25" | ||
382 | "\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D" | ||
383 | "\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75" | ||
384 | "\x65\x72\x79\x28\x22\x79\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F" | ||
385 | "\x72\x6D\x26\x67\x74\x3B\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x69\x6D\x61\x67\x65" | ||
386 | "\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x20\x73\x72\x63\x3D\x27\x2F\x67\x69\x66\x3F\x69\x6D\x67\x3D\x63\x69" | ||
387 | "\x72\x63\x6C\x65\x26\x78\x3D\x25\x73\x26\x79\x3D\x25\x73\x27\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x66\x6F" | ||
388 | "\x72\x6D\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x43\x45\x4E\x54\x45\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43" | ||
389 | "\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x2C\x43\x6C\x69\x65" | ||
390 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x79\x22\x29\x29\x3B\xA\x7D\x3B\xA\xA\xA" | ||
391 | "\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x9\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
392 | "\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65" | ||
393 | "\x72\xA\x9\x6D\x65\x6D\x73\x65\x74\x28\x67\x69\x66\x64\x61\x74\x61\x2C\x30\x2C\x47\x49\x46\x53\x49\x44" | ||
394 | "\x45\x2A\x47\x49\x46\x53\x49\x44\x45\x29\x3B\xA\x9\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
395 | "\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F" | ||
396 | "\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x9\x9\x66" | ||
397 | "\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20" | ||
398 | "\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x7D\x3B\xA\xA\x9\x77" | ||
399 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76" | ||
400 | "\x65\x72\x2C\x22\x2A\x20\x2F\x67\x69\x66\x22\x2C\x6F\x75\x74\x67\x69\x66\x2C\x30\x29\x3B\xA\x9\x77\x68" | ||
401 | "\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x9\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28" | ||
402 | "\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA" | ||
403 | "\x9\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E" | ||
404 | "\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\xA" | ||
405 | "\x3C\x43\x45\x4E\x54\x45\x52\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E" | ||
406 | "\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72" | ||
407 | "\x65\x66\x3D\x2F\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x48\x33\x3E\x43\x6F\x6F\x6B\x69\x65\x73\x3C\x2F\x48\x33" | ||
408 | "\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x43\x45\x4E\x54\x45\x52\x3E\xA" | ||
409 | "\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B" | ||
410 | "\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66" | ||
411 | "\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E" | ||
412 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61" | ||
413 | "\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65" | ||
414 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73" | ||
415 | "\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
416 | "\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77" | ||
417 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
418 | "\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C" | ||
419 | "\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C" | ||
420 | "\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27" | ||
421 | "\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E" | ||
422 | "\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65" | ||
423 | "\x74\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42" | ||
424 | "\x52\x3E\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x66\x65\x74\x63\x68\x73\x20\x61\x6E" | ||
425 | "\x20\x63\x6C\x69\x65\x6E\x74\x20\x69\x6E\x70\x75\x74\x20\x61\x6E\x64\x20\x73\x65\x74\x27\x73\x20\x61\x6E" | ||
426 | "\x20\x63\x6F\x6F\x6B\x69\x65\x20\x66\x6F\x72\x20\x31\x35\x20\x6D\x69\x6E\x75\x74\x65\x73\x20\x22\x2B\x31" | ||
427 | "\x35\x4D\x22\x20\x75\x73\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66" | ||
428 | "\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69" | ||
429 | "\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F" | ||
430 | "\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x61\x3E\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54" | ||
431 | "\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D" | ||
432 | "\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E" | ||
433 | "\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62" | ||
434 | "\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74" | ||
435 | "\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20" | ||
436 | "\x7B\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x50" | ||
437 | "\x6F\x73\x74\x28\x22\x75\x73\x65\x72\x22\x29\x29\x29\xA\x9\x9\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74" | ||
438 | "\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x2C\x43\x6C\x69\x65" | ||
439 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x50\x6F\x73\x74\x28\x22\x75\x73\x65\x72\x22\x29\x2C\x22\x2B\x31\x35\x4D" | ||
440 | "\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A" | ||
441 | "\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69" | ||
442 | "\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x6D\x65\x74\x68\x6F\x64\x3D\x27\x50\x4F\x53\x54" | ||
443 | "\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B" | ||
444 | "\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x74\x65\x78\x74\x27\x20\x6E\x61\x6D\x65\x3D\x27\x75\x73" | ||
445 | "\x65\x72\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x25\x73\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B" | ||
446 | "\x42\x52\x26\x67\x74\x3B\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6F\x6B\x69\x65" | ||
447 | "\x28\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C" | ||
448 | "\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x73\x75\x62\x6D\x69\x74\x27\x20\x6E\x61\x6D\x65" | ||
449 | "\x3D\x27\x73\x65\x6E\x64\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x20\x47\x4F\x21\x20\x27\x26\x67\x74\x3B\x5C" | ||
450 | "\x72\x5C\x6E\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22" | ||
451 | "\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x7D\xA\xA\x69\x6E" | ||
452 | "\x74\x20\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67" | ||
453 | "\x76\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65" | ||
454 | "\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E" | ||
455 | "\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
456 | "\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F" | ||
457 | "\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20" | ||
458 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72" | ||
459 | "\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65" | ||
460 | "\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20\x20\x20\x20\x20\x20" | ||
461 | "\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64" | ||
462 | "\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x2A\x22\x2C\x63\x6F" | ||
463 | "\x6F\x6B\x69\x65\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F" | ||
464 | "\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69" | ||
465 | "\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65" | ||
466 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F" | ||
467 | "\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA" | ||
468 | "\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C" | ||
469 | "\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E" | ||
470 | "\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x68\x65\x63\x6B\x62\x6F\x78\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20" | ||
471 | "\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x63\x68" | ||
472 | "\x65\x63\x6B\x62\x6F\x78\x3E\x3C\x48\x33\x3E\x43\x68\x65\x63\x6B\x62\x6F\x78\x3C\x2F\x48\x33\x3E\x3C\x2F" | ||
473 | "\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D" | ||
474 | "\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42" | ||
475 | "\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63" | ||
476 | "\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62" | ||
477 | "\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72" | ||
478 | "\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73" | ||
479 | "\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
480 | "\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68" | ||
481 | "\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F" | ||
482 | "\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E" | ||
483 | "\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66" | ||
484 | "\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E" | ||
485 | "\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E" | ||
486 | "\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65\x73\x20\x61\x20\x65\x73\x70\x65" | ||
487 | "\x63\x69\x66\x69\x63\x20\x63\x61\x73\x65\x20\x66\x72\x6F\x6D\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F" | ||
488 | "\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F" | ||
489 | "\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x20\x71\x75\x65\x72\x79\x20\x61\x6E\x64" | ||
490 | "\x20\x70\x6F\x73\x74\x2C\x20\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x27\x23\x27\x20\x61\x73\x20\x70\x72" | ||
491 | "\x65\x66\x69\x78\x20\x6F\x66\x20\x76\x61\x72\x6E\x61\x6D\x65\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20" | ||
492 | "\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x6F\x63\x63\x75\x72\x65\x6E\x63\x65\x73\xA\xA" | ||
493 | "\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30" | ||
494 | "\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65" | ||
495 | "\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\xA" | ||
496 | "\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69" | ||
497 | "\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76" | ||
498 | "\x6F\x69\x64\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x28\x29\x20\x7B\xA\x9\x69\x6E\x74\x20\x69\x3D\x30\x3B" | ||
499 | "\xA\x9\x63\x68\x61\x72\x20\x2A\x74\x78\x74\x5B\x5D\x3D\x7B\x22\x6F\x6E\x65\x22\x2C\x22\x74\x77\x6F\x22" | ||
500 | "\x2C\x22\x74\x68\x72\x65\x65\x22\x2C\x22\x66\x6F\x75\x72\x22\x2C\x22\x66\x69\x76\x65\x22\x7D\x3B\xA\x9" | ||
501 | "\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74" | ||
502 | "\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22" | ||
503 | "\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x6D\x65\x74\x68\x6F\x64\x3D\x27\x51\x55\x45\x52\x59\x27\x26\x67\x74" | ||
504 | "\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\xA\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69\x3C\x35\x3B\x69\x2B" | ||
505 | "\x2B\x29\x20\x7B\x9\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20" | ||
506 | "\x74\x79\x70\x65\x3D\x27\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x20\x6E\x61\x6D\x65\x3D\x27\x6E\x75\x6D\x62" | ||
507 | "\x65\x72\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x25\x73\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B" | ||
508 | "\x42\x52\x26\x67\x74\x3B\x22\x2C\x74\x78\x74\x5B\x69\x5D\x29\x3B\x9\xA\x9\x7D\x3B\xA\x9\x70\x72\x69" | ||
509 | "\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x73\x75\x62\x6D\x69" | ||
510 | "\x74\x27\x20\x6E\x61\x6D\x65\x3D\x27\x73\x65\x6E\x64\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x20\x53\x45\x4E" | ||
511 | "\x44\x20\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x22\x29\x3B\xA\x9" | ||
512 | "\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22" | ||
513 | "\x29\x3B\xA\x9\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x63\x68\x6F" | ||
514 | "\x6F\x73\x65\x6E\x20\x26\x6C\x74\x3B\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x46\x46\x30\x30\x30" | ||
515 | "\x30\x27\x26\x67\x74\x3B\x25\x64\x26\x6C\x74\x3B\x2F\x66\x6F\x6E\x74\x26\x67\x74\x3B\x20\x6E\x75\x6D\x62" | ||
516 | "\x65\x72\x73\x3A\x20\x5C\x72\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65" | ||
517 | "\x72\x79\x28\x22\x23\x6E\x75\x6D\x62\x65\x72\x22\x29\x29\x3B\xA\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69" | ||
518 | "\x26\x6C\x74\x3B\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x23\x6E\x75" | ||
519 | "\x6D\x62\x65\x72\x22\x29\x3B\x69\x2B\x2B\x29\x20\x7B\x9\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26" | ||
520 | "\x6C\x74\x3B\x62\x3E\x25\x73\x26\x6C\x74\x3B\x2F\x62\x26\x67\x74\x3B\x2C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E" | ||
521 | "\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x6E\x75\x6D\x62\x65" | ||
522 | "\x72\x22\x29\x29\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x2E\x2E\x2E\x26\x6C\x74\x3B" | ||
523 | "\x42\x52\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\xA\x7D\xA\x69\x6E\x74\x20" | ||
524 | "\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67\x76\x29" | ||
525 | "\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
526 | "\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C" | ||
527 | "\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
528 | "\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22" | ||
529 | "\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20\x20\x20" | ||
530 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C" | ||
531 | "\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C" | ||
532 | "\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D" | ||
533 | "\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68" | ||
534 | "\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x2A\x22\x2C\x63\x68\x65\x63" | ||
535 | "\x6B\x62\x6F\x78\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F" | ||
536 | "\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69" | ||
537 | "\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65" | ||
538 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F" | ||
539 | "\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA" | ||
540 | "\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C" | ||
541 | "\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D" | ||
542 | "\x63\x6F\x6E\x66\x65\x78\x61\x6D\x70\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72" | ||
543 | "\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x63\x6F\x6E\x66\x65\x78\x61" | ||
544 | "\x6D\x70\x6C\x65\x3E\x3C\x48\x33\x3E\x43\x6F\x6E\x66\x69\x67\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x48" | ||
545 | "\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20" | ||
546 | "\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42\x3E\x3C\x42\x52\x3E" | ||
547 | "\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73" | ||
548 | "\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
549 | "\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F" | ||
550 | "\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72" | ||
551 | "\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64" | ||
552 | "\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27" | ||
553 | "\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
554 | "\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C" | ||
555 | "\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69" | ||
556 | "\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x27\x3E\x77\x65" | ||
557 | "\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
558 | "\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63" | ||
559 | "\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C" | ||
560 | "\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52" | ||
561 | "\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F" | ||
562 | "\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E" | ||
563 | "\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20" | ||
564 | "\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C" | ||
565 | "\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x63\x6F\x6E\x66\x65" | ||
566 | "\x78\x61\x6D\x70\x6C\x65\x28\x29\x20\x7B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E" | ||
567 | "\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22" | ||
568 | "\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x50\x52\x45\x26\x67\x74\x3B\x22\x29\x3B" | ||
569 | "\xA\x9\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x73\x65\x72\x76\x65" | ||
570 | "\x72\x2E\x63\x6F\x6E\x66\x66\x69\x6C\x65\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x65\x6C\x70\x2E\x63" | ||
571 | "\x66\x67\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x6F\x75\x74\x70\x75\x74\x9\xA\x9\x70\x72\x69\x6E\x74\x66" | ||
572 | "\x28\x22\x26\x6C\x74\x3B\x2F\x50\x52\x45\x26\x67\x74\x3B\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28" | ||
573 | "\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x5C\x22\x50\x45\x52\x53\x4F\x4E" | ||
574 | "\x41\x4C\x5F\x43\x4F\x4E\x46\x5C\x22\x2C\x5C\x22\x50\x4F\x52\x54\x5C\x22\x29\x3D\x25\x73\x26\x6C\x74\x3B" | ||
575 | "\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66" | ||
576 | "\x28\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x22\x2C\x22\x50\x4F\x52\x54\x22\x29\x29\x3B" | ||
577 | "\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66" | ||
578 | "\x28\x5C\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x5C\x22\x2C\x5C\x22\x49\x50\x5C\x22\x29" | ||
579 | "\x3D\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66" | ||
580 | "\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x22\x2C\x22\x49" | ||
581 | "\x50\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D" | ||
582 | "\x3E\x43\x6F\x6E\x66\x28\x5C\x22\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52\x5C\x22\x2C\x5C\x22\x50" | ||
583 | "\x4F\x52\x54\x5C\x22\x29\x3D\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69" | ||
584 | "\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x22\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45" | ||
585 | "\x52\x22\x2C\x22\x50\x4F\x52\x54\x22\x29\x29\x3B\xA\x9\xA\x7D\xA\xA\x69\x6E\x74\x20\x6D\x61\x69\x6E" | ||
586 | "\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67\x76\x29\x20\x7B\xA\x20" | ||
587 | "\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73" | ||
588 | "\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20" | ||
589 | "\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74" | ||
590 | "\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x63\x66\x67\x22\x2C\x57\x53\x5F" | ||
591 | "\x55\x53\x45\x45\x58\x54\x43\x4F\x4E\x46\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69" | ||
592 | "\x7A\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66" | ||
593 | "\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E" | ||
594 | "\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20" | ||
595 | "\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72" | ||
596 | "\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20" | ||
597 | "\x2A\x22\x2C\x63\x6F\x6E\x66\x65\x78\x61\x6D\x70\x6C\x65\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20" | ||
598 | "\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20" | ||
599 | "\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
600 | "\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65" | ||
601 | "\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20" | ||
602 | "\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F" | ||
603 | "\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E"; | ||
604 | |||
605 | #endif | ||
diff --git a/contrib/help/functions.h b/contrib/help/functions.h deleted file mode 100644 index a151275e..00000000 --- a/contrib/help/functions.h +++ /dev/null | |||
@@ -1,800 +0,0 @@ | |||
1 | /* | ||
2 | * by data2header by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #ifndef _FUNCTIONS_H_ | ||
5 | #define _FUNCTIONS_H_ | ||
6 | |||
7 | char functions[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27" | ||
8 | "\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x46\x75\x6E\x63\x74" | ||
9 | "\x69\x6F\x6E\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C" | ||
10 | "\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x66\x6F\x6E\x74\x20\x66\x61\x63\x65\x3D\x27\x56\x65\x72\x64\x61\x6E" | ||
11 | "\x61\x27\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E" | ||
12 | "\x69\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27" | ||
13 | "\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C" | ||
14 | "\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55" | ||
15 | "\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x20\x2D\x20\x49\x6E\x69\x74\x69\x61" | ||
16 | "\x6C\x69\x7A\x65\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E" | ||
17 | "\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65" | ||
18 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62" | ||
19 | "\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65" | ||
20 | "\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x69\x6E\x74\x20\x3C" | ||
21 | "\x55\x3E\x70\x6F\x72\x74\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55" | ||
22 | "\x3E\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x2C\x20\x69\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73" | ||
23 | "\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E" | ||
24 | "\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E" | ||
25 | "\x69\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x73\x20" | ||
26 | "\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76" | ||
27 | "\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x73\x74\x61\x72\x74\x20\x61\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63" | ||
28 | "\x6B\x65\x74\x20\x61\x74\x20\x70\x6F\x72\x74\x20\x3C\x55\x3E\x70\x6F\x72\x74\x3C\x2F\x55\x3E\x2C\x20\x77" | ||
29 | "\x69\x74\x68\x20\x74\x68\x65\x20\x6C\x6F\x67\x66\x69\x6C\x65\x20\x3C\x55\x3E\x6C\x6F\x67\x66\x69\x6C\x65" | ||
30 | "\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x70\x72\x6F\x64\x75\x63\x65\x20\x74\x68\x65\x20\x77\x65\x62\x73\x65\x72" | ||
31 | "\x76\x65\x72\x20\x6C\x6F\x67\x3C\x42\x52\x3E\x20\x69\x66\x20\x57\x53\x5F\x55\x53\x45\x45\x58\x54\x43\x4F" | ||
32 | "\x4E\x46\x20\x66\x6C\x61\x67\x20\x69\x73\x20\x75\x73\x65\x64\x2C\x20\x74\x68\x65\x20\x3C\x55\x3E\x6C\x6F" | ||
33 | "\x67\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x68\x65\x20\x63\x6F\x6E\x66" | ||
34 | "\x69\x67\x20\x66\x69\x6C\x65\x20\x3C\x42\x52\x3E\xA\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C\x2F\x55\x3E\x20" | ||
35 | "\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x20\x66\x6F\x72\x20\x6F\x70\x65\x6E\x73\x73\x6C" | ||
36 | "\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x28\x68\x74\x74\x70\x73\x20\x73\x75\x70\x70\x6F\x72" | ||
37 | "\x74\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x45\x58\x54\x43\x4F\x4E\x46\x20\x66\x6F\x72\x20\x75" | ||
38 | "\x73\x69\x6E\x67\x20\x61\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C" | ||
39 | "\x65\x3C\x42\x52\x3E\xA\x57\x53\x5F\x4C\x4F\x43\x41\x4C\x20\x6F\x6E\x6C\x79\x20\x61\x63\x63\x65\x70\x74" | ||
40 | "\x73\x20\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x20\x28\x6C\x6F\x63\x61\x6C\x29\x20\x63\x6F\x6E\x6E\x65\x63" | ||
41 | "\x74\x69\x6F\x6E\x73\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C" | ||
42 | "\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69" | ||
43 | "\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73" | ||
44 | "\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\x20\xA" | ||
45 | "\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E" | ||
46 | "\x64\x6C\x65\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37" | ||
47 | "\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29" | ||
48 | "\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D" | ||
49 | "\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61" | ||
50 | "\x6E\x64\x6C\x65\x72\x20\x2D\x20\x61\x64\x64\x73\x20\x61\x20\x72\x65\x71\x75\x65\x73\x74\x20\x68\x61\x6E" | ||
51 | "\x64\x6C\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA" | ||
52 | "\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68" | ||
53 | "\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64" | ||
54 | "\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72" | ||
55 | "\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61" | ||
56 | "\x72\x20\x2A\x3C\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x2C\x20\x76\x6F\x69\x64\x20\x28\x2A\x3C\x55\x3E" | ||
57 | "\x66\x75\x6E\x63\x3C\x2F\x55\x3E\x29\x28\x29\x2C\x20\x69\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C" | ||
58 | "\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C" | ||
59 | "\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64" | ||
60 | "\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x64\x73\x20\x61\x20" | ||
61 | "\x72\x65\x71\x75\x65\x73\x74\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55" | ||
62 | "\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55" | ||
63 | "\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x74\x68\x65\x20\x66\x75" | ||
64 | "\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x55\x3E\x66\x75\x6E\x63\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x3C\x55" | ||
65 | "\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x63\x6F\x6E\x74" | ||
66 | "\x61\x69\x6E\x69\x6E\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x73\x20\x28\x61\x73\x20\x6D\x61\x74" | ||
67 | "\x63\x68\x69\x6E\x67\x20\x66\x69\x6C\x65\x73\x29\x20\x74\x6F\x20\x6D\x61\x74\x63\x68\x20\x77\x69\x74\x68" | ||
68 | "\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20\x72\x65\x71\x75\x65\x73\x74\x20\x28\x47\x45\x54\x20\x2F" | ||
69 | "\x3C\x42\x3E\x62\x6C\x61\x68\x2E\x68\x74\x6D\x6C\x3C\x2F\x42\x3E\x3F\x69\x64\x3D\x31\x20\x48\x54\x54\x50" | ||
70 | "\x2F\x31\x2E\x30\x2C\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x6D\x61\x74\x63\x68\x65\x64\x20\x62\x79\x20\x3C" | ||
71 | "\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x3D\x22\x2A\x20\x2F\x62\x6C\x61\x68\x2E\x68\x74\x6D\x6C\x22\x29" | ||
72 | "\x3C\x42\x52\x3E\xA\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3A\x3C\x2F\x55\x3E\x20\x3C\x42\x52\x3E\xA\x57\x53" | ||
73 | "\x5F\x4C\x4F\x43\x41\x4C\x20\x2D\x20\x6F\x6E\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63" | ||
74 | "\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x64\x3C\x42\x52\x3E\xA\x57\x53\x5F\x44" | ||
75 | "\x59\x4E\x56\x41\x52\x20\x2D\x20\x74\x72\x65\x61\x74\x20\x64\x79\x6E\x61\x6D\x69\x63\x20\x76\x61\x72\x69" | ||
76 | "\x61\x62\x6C\x65\x73\x20\x6F\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x41\x74\x65\x6E\x74\x69\x6F\x6E\x3A" | ||
77 | "\x20\x74\x68\x69\x73\x20\x64\x69\x73\x61\x62\x6C\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61" | ||
78 | "\x6E\x67\x65\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20" | ||
79 | "\x68\x65\x61\x64\x65\x72\x2C\x20\x72\x65\x73\x70\x6F\x6E\x64\x69\x6E\x67\x20\x22\x35\x30\x31\x20\x6E\x6F" | ||
80 | "\x74\x20\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x65\x64\x22\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45" | ||
81 | "\x4C\x45\x4E\x20\x2D\x20\x57\x69\x74\x68\x20\x74\x68\x69\x73\x20\x66\x6C\x61\x67\x2C\x20\x6C\x69\x62\x72" | ||
82 | "\x61\x72\x79\x20\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22" | ||
83 | "\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65" | ||
84 | "\x6E\x74\x2D\x72\x61\x6E\x67\x65\x22\x20\x69\x74\x20\x73\x65\x6C\x66\x2C\x20\x75\x73\x65\x66\x75\x6C\x20" | ||
85 | "\x66\x6F\x72\x20\x72\x65\x73\x75\x6D\x69\x6E\x67\x2C\x20\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67" | ||
86 | "\x74\x68\x20\x63\x61\x6E\x20\x62\x65\x20\x6D\x69\x73\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x20\x69\x66" | ||
87 | "\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61\x64\x64\x65\x64\x20\x62\x79\x20\x28\x77\x65\x62\x5F\x63\x6C" | ||
88 | "\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x29\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20" | ||
89 | "\x73\x69\x7A\x65\x20\x6F\x66\x20\x63\x6F\x6E\x74\x65\x6E\x74\x73\x2C\x20\x62\x65\x74\x77\x65\x65\x6E\x20" | ||
90 | "\x63\x61\x6C\x63\x75\x6C\x61\x74\x69\x6E\x67\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x3C\x42\x52\x3E" | ||
91 | "\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E" | ||
92 | "\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75" | ||
93 | "\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72" | ||
94 | "\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65" | ||
95 | "\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x3E\x3C\x42\x3E\x3C\x66" | ||
96 | "\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72" | ||
97 | "\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C" | ||
98 | "\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65" | ||
99 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x20\x2D\x20\x47\x65\x6E\x65\x72\x61" | ||
100 | "\x74\x65\x73\x20\x61\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x6C\x69\x73\x74\x2C\x20\x61\x6E\x64\x20" | ||
101 | "\x75\x73\x65\x20\x66\x69\x6C\x65\x20\x62\x61\x73\x65\x64\x20\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E" | ||
102 | "\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C" | ||
103 | "\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E" | ||
104 | "\x69\x6E\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x73\x74" | ||
105 | "\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72" | ||
106 | "\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x61\x6C\x69\x61\x73" | ||
107 | "\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55\x3E\x2C\x20\x69" | ||
108 | "\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E" | ||
109 | "\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65" | ||
110 | "\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69" | ||
111 | "\x6F\x6E\x20\x61\x64\x64\x73\x20\x61\x6E\x20\x61\x6C\x69\x61\x73\x20\x3C\x55\x3E\x61\x6C\x69\x61\x73\x3C" | ||
112 | "\x2F\x55\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20" | ||
113 | "\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x75\x73\x65\x20\x66\x69\x6C\x65" | ||
114 | "\x73\x20\x66\x72\x6F\x6D\x20\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x3C\x55" | ||
115 | "\x3E\x66\x6C\x61\x67\x73\x3A\x3C\x2F\x55\x3E\x20\x3C\x42\x52\x3E\xA\x57\x53\x5F\x4C\x4F\x43\x41\x4C\x20" | ||
116 | "\x2D\x20\x6F\x6E\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x61" | ||
117 | "\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x64\x3C\x42\x52\x3E\xA\x57\x53\x5F\x44\x59\x4E\x56\x41\x52\x20\x2D" | ||
118 | "\x20\x74\x72\x65\x61\x74\x20\x64\x79\x6E\x61\x6D\x69\x63\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x6F" | ||
119 | "\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x41\x74\x65\x6E\x74\x69\x6F\x6E\x3A\x20\x74\x68\x69\x73\x20\x64" | ||
120 | "\x69\x73\x61\x62\x6C\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61\x6E\x67\x65\x22\x20\x61\x6E" | ||
121 | "\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x68\x65\x61\x64\x65\x72\x2C" | ||
122 | "\x20\x72\x65\x73\x70\x6F\x6E\x64\x69\x6E\x67\x20\x22\x35\x30\x31\x20\x6E\x6F\x74\x20\x69\x6D\x70\x6C\x65" | ||
123 | "\x6D\x65\x6E\x74\x65\x64\x22\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x4C\x45\x4E\x20\x2D\x20\x57" | ||
124 | "\x69\x74\x68\x20\x74\x68\x69\x73\x20\x66\x6C\x61\x67\x2C\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x63\x61\x6C" | ||
125 | "\x63\x75\x6C\x61\x74\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74" | ||
126 | "\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61\x6E\x67" | ||
127 | "\x65\x22\x20\x69\x74\x20\x73\x65\x6C\x66\x2C\x20\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x72\x65\x73" | ||
128 | "\x75\x6D\x69\x6E\x67\x2C\x20\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x20\x63\x61\x6E\x20" | ||
129 | "\x62\x65\x20\x6D\x69\x73\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x66\x69" | ||
130 | "\x6C\x65\x20\x61\x64\x64\x65\x64\x20\x62\x79\x20\x28\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64" | ||
131 | "\x64\x66\x69\x6C\x65\x29\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20\x73\x69\x7A\x65\x20\x6F\x66" | ||
132 | "\x20\x63\x6F\x6E\x74\x65\x6E\x74\x73\x2C\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x63\x61\x6C\x63\x75\x6C\x61" | ||
133 | "\x74\x69\x6E\x67\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA" | ||
134 | "\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E" | ||
135 | "\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F" | ||
136 | "\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C" | ||
137 | "\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65" | ||
138 | "\x72\x76\x65\x72\x5F\x72\x75\x6E\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30" | ||
139 | "\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x29\x3C\x2F\x66" | ||
140 | "\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F" | ||
141 | "\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x20\x2D\x20\x72\x75" | ||
142 | "\x6E\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50" | ||
143 | "\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F" | ||
144 | "\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x73" | ||
145 | "\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
146 | "\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42" | ||
147 | "\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77" | ||
148 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70" | ||
149 | "\x72\x6F\x63\x65\x73\x73\x65\x73\x20\x72\x65\x71\x75\x65\x73\x74\x73\x20\x74\x6F\x20\x74\x68\x65\x20\x73" | ||
150 | "\x65\x72\x76\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2E\x20\x54\x68\x69\x73\x20" | ||
151 | "\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x66\x72" | ||
152 | "\x6F\x6D\x20\x74\x68\x65\x20\x6D\x61\x69\x6E\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x6C\x6F" | ||
153 | "\x6F\x70\x20\x28\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x64\x6F\x65\x73\x6E\x27\x74\x20" | ||
154 | "\x6C\x6F\x6F\x70\x20\x69\x74\x20\x73\x65\x6C\x66\x29\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55" | ||
155 | "\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73" | ||
156 | "\x73\x2C\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6E\x20\x30\x2C\x20\x69\x73\x20\x72\x65\x74\x75" | ||
157 | "\x72\x6E\x65\x64\x20\x28\x32\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x77\x61\x73\x6E\x27\x74\x20\x63\x6C" | ||
158 | "\x69\x65\x6E\x74\x2C\x20\x31\x20\x69\x66\x20\x73\x6F\x6D\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x77\x61" | ||
159 | "\x73\x20\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x29\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20" | ||
160 | "\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA" | ||
161 | "\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E" | ||
162 | "\x66\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E" | ||
163 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x28\x29\x3C\x2F\x66\x6F\x6E\x74" | ||
164 | "\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA" | ||
165 | "\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x20\x2D\x20\x67" | ||
166 | "\x65\x74\x20\x64\x61\x74\x61\x20\x66\x72\x6F\x6D\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x72\x3C" | ||
167 | "\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23" | ||
168 | "\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E" | ||
169 | "\x3C\x42\x52\x3E\x63\x68\x61\x72\x20\x2A\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F" | ||
170 | "\x6E\x66\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73" | ||
171 | "\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F" | ||
172 | "\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E" | ||
173 | "\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68" | ||
174 | "\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x28\x29\x20\x66\x75\x6E" | ||
175 | "\x63\x74\x69\x6F\x6E\x20\x61\x6C\x6C\x6F\x63\x61\x74\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E" | ||
176 | "\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x72\x6F\x6D\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65" | ||
177 | "\x20\x72\x65\x6C\x61\x74\x65\x64\x20\x74\x6F\x20\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F\x55\x3E\x20\x61" | ||
178 | "\x6E\x64\x20\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x20\x28\x73\x65\x65\x20\x3C\x61\x20\x68\x72\x65\x66" | ||
179 | "\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6F\x6E\x66\x69\x67\x66" | ||
180 | "\x69\x6C\x65\x22\x3E\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x20\x68\x65\x6C\x70\x3C\x2F\x61\x3E\x29" | ||
181 | "\x20\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x63\x61\x6C" | ||
182 | "\x6C\x65\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x20\x6F\x66\x20\x74\x68\x65\x20" | ||
183 | "\x76\x61\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E" | ||
184 | "\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x72\x65\x74\x75\x72" | ||
185 | "\x6E\x73\x20\x61\x6C\x6C\x6F\x63\x61\x74\x65\x64\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x28\x79\x6F\x75\x20" | ||
186 | "\x73\x68\x6F\x75\x6C\x64\x20\x66\x72\x65\x65\x20\x61\x66\x74\x65\x72\x20\x75\x73\x65\x29\x20\x6F\x72\x20" | ||
187 | "\x6E\x75\x6C\x6C\x20\x69\x66\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x72\x65\x6C\x61\x74\x65\x64\x20\x74\x6F" | ||
188 | "\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x66\x6F\x75\x6E\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E" | ||
189 | "\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75" | ||
190 | "\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27" | ||
191 | "\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63" | ||
192 | "\x65\x72\x74\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
193 | "\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
194 | "\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x20\x2D\x20\x75\x73\x65\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61" | ||
195 | "\x74\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55" | ||
196 | "\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C" | ||
197 | "\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65" | ||
198 | "\x53\x53\x4C\x63\x65\x72\x74\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20" | ||
199 | "\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72" | ||
200 | "\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45" | ||
201 | "\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F" | ||
202 | "\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69" | ||
203 | "\x6F\x6E\x20\x74\x65\x6C\x6C\x73\x20\x73\x65\x72\x76\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C" | ||
204 | "\x2F\x55\x3E\x20\x74\x6F\x20\x75\x73\x65\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x69\x6C" | ||
205 | "\x65\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x6F\x6E\x20\x73\x73\x6C\x20\x63\x6F\x6E\x6E\x65" | ||
206 | "\x63\x74\x69\x6F\x6E\x73\x20\x28\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x65\x64\x20\x77\x2F\x20\x66" | ||
207 | "\x6C\x61\x67\x20\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x29\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42" | ||
208 | "\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65" | ||
209 | "\x4D\x49\x4D\x45\x66\x69\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30" | ||
210 | "\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66" | ||
211 | "\x69\x6C\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C" | ||
212 | "\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
213 | "\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x20\x2D\x20\x75\x73\x65\x20\x6D\x69\x6D\x65\x20\x74\x79\x70" | ||
214 | "\x65\x73\x20\x66\x69\x6C\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F" | ||
215 | "\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
216 | "\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
217 | "\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73" | ||
218 | "\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73" | ||
219 | "\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E" | ||
220 | "\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68" | ||
221 | "\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x29" | ||
222 | "\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x65\x6C\x6C\x73\x20\x73\x65\x72\x76\x65\x72\x20\x3C\x55\x3E" | ||
223 | "\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x75\x73\x65\x20\x6D\x69\x6D\x65\x73\x20\x74\x79" | ||
224 | "\x70\x65\x20\x66\x69\x6C\x65\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x66\x6F\x72\x20\x64\x65" | ||
225 | "\x74\x65\x72\x6D\x69\x6E\x69\x6E\x67\x20\x6D\x69\x6D\x65\x20\x74\x79\x70\x65\x20\x62\x79\x20\x65\x78\x74" | ||
226 | "\x65\x6E\x73\x69\x6F\x6E\x20\x75\x73\x65\x64\x20\x62\x79\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x61" | ||
227 | "\x20\x68\x72\x65\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65" | ||
228 | "\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x22\x3E\x77\x65\x62\x5F" | ||
229 | "\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x28\x29\x3C\x2F\x61\x3E\x3C\x2F" | ||
230 | "\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62" | ||
231 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74" | ||
232 | "\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74" | ||
233 | "\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52" | ||
234 | "\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F" | ||
235 | "\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x20\x2D\x20\x61\x64\x64\x20\x61\x6E\x20" | ||
236 | "\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x74\x6F\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E" | ||
237 | "\x74\x20\x73\x74\x72\x75\x63\x74\x20\x6F\x6E\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E" | ||
238 | "\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C" | ||
239 | "\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E" | ||
240 | "\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x46" | ||
241 | "\x49\x4C\x45\x20\x2A\x3C\x55\x3E\x73\x74\x72\x65\x61\x6D\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA" | ||
242 | "\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65" | ||
243 | "\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29\x20\x66\x75" | ||
244 | "\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x64\x73\x20\x74\x68\x65\x20\x73\x74\x72\x65\x61\x6D\x20\x3C\x55\x3E" | ||
245 | "\x73\x74\x72\x65\x61\x6D\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x73" | ||
246 | "\x74\x72\x65\x61\x6D\x20\x6C\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20" | ||
247 | "\x63\x6C\x69\x65\x6E\x74\x20\x6E\x6F\x64\x65\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C" | ||
248 | "\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64" | ||
249 | "\x73\x74\x72\x65\x61\x6D\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x3C\x42\x3E\x6F" | ||
250 | "\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E" | ||
251 | "\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65" | ||
252 | "\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x62\x79\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27" | ||
253 | "\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
254 | "\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61" | ||
255 | "\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x55\x4C\x3E" | ||
256 | "\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29" | ||
257 | "\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x6F\x62\x73\x6F\x6C\x65\x74\x65\x20\x61\x6E\x64\x20" | ||
258 | "\x6E\x6F\x20\x6C\x6F\x6E\x67\x65\x72\x20\x69\x6E\x20\x75\x73\x65\x20\x6F\x6E\x20\x30\x2E\x33\x2E\x34\x20" | ||
259 | "\x76\x65\x72\x73\x69\x6F\x6E\x73\x2C\x20\x75\x73\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61" | ||
260 | "\x64\x64\x66\x69\x6C\x65\x20\x69\x6E\x73\x74\x65\x61\x64\x3C\x2F\x75\x6C\x3E\xA\x3C\x42\x3E\x52\x45\x54" | ||
261 | "\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65" | ||
262 | "\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F" | ||
263 | "\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E" | ||
264 | "\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61" | ||
265 | "\x64\x64\x66\x69\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30" | ||
266 | "\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x3C" | ||
267 | "\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45" | ||
268 | "\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C" | ||
269 | "\x65\x20\x2D\x20\x61\x64\x64\x20\x61\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70" | ||
270 | "\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20\x73\x74" | ||
271 | "\x72\x75\x63\x74\x20\x6F\x6E\x20\x74\x68\x65\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E" | ||
272 | "\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C" | ||
273 | "\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E" | ||
274 | "\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x63\x6F\x6E" | ||
275 | "\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C" | ||
276 | "\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54" | ||
277 | "\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x20\x66\x75" | ||
278 | "\x6E\x63\x74\x69\x6F\x6E\x20\x6F\x70\x65\x6E\x73\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x3C\x55\x3E\x66" | ||
279 | "\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x61\x64\x64\x73\x20\x69\x74\x20\x61\x73\x20\x73\x74\x72" | ||
280 | "\x65\x61\x6D\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x6C" | ||
281 | "\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x63\x6C\x69\x65\x6E\x74\x20" | ||
282 | "\x6E\x6F\x64\x65\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C" | ||
283 | "\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x20" | ||
284 | "\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E" | ||
285 | "\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61" | ||
286 | "\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74" | ||
287 | "\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66" | ||
288 | "\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E" | ||
289 | "\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65" | ||
290 | "\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41" | ||
291 | "\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20" | ||
292 | "\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69" | ||
293 | "\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA" | ||
294 | "\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70" | ||
295 | "\x75\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27" | ||
296 | "\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x29\x3C\x2F\x66" | ||
297 | "\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F" | ||
298 | "\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75" | ||
299 | "\x74\x20\x2D\x20\x65\x78\x70\x6F\x72\x74\x20\x64\x61\x74\x61\x20\x61\x73\x20\x67\x69\x66\x3C\x2F\x55\x4C" | ||
300 | "\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63" | ||
301 | "\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52" | ||
302 | "\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28" | ||
303 | "\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20\x3C\x55\x3E\x77" | ||
304 | "\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20\x3C\x55\x3E\x68\x3C\x2F\x75\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C" | ||
305 | "\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20" | ||
306 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x29\x20\x66\x75\x6E" | ||
307 | "\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x61\x20\x67" | ||
308 | "\x69\x66\x20\x68\x65\x61\x64\x65\x72\x20\x28\x77\x69\x74\x68\x20\x77\x69\x64\x74\x68\x20\x3C\x55\x3E\x77" | ||
309 | "\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x68\x65\x69\x67\x68\x74\x20\x3C\x55\x3E\x68\x3C\x2F\x55\x3E\x29\x20" | ||
310 | "\x61\x6E\x64\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x20\x70\x6F\x69\x6E\x74\x65\x64\x20\x62\x79\x20\x3C" | ||
311 | "\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x54\x68\x65\x20\x61\x6C\x6C\x6F\x63\x61" | ||
312 | "\x74\x65\x64\x20\x6D\x65\x6D\x6F\x72\x79\x20\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x20\x70\x6F\x69" | ||
313 | "\x6E\x74\x73\x20\x74\x6F\x20\x6D\x75\x73\x74\x6E\x27\x74\x20\x62\x65\x20\x73\x6D\x61\x6C\x6C\x65\x72\x20" | ||
314 | "\x74\x68\x61\x6E\x20\x3C\x55\x3E\x77\x3C\x2F\x55\x3E\x2A\x3C\x55\x3E\x68\x3C\x2F\x55\x3E\x2E\x3C\x42\x52" | ||
315 | "\x3E\xA\x54\x68\x65\x20\x67\x69\x66\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x69\x73\x20\x64\x65\x73\x63\x72" | ||
316 | "\x69\x62\x65\x64\x20\x62\x79\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75" | ||
317 | "\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70" | ||
318 | "\x61\x6C\x65\x74\x74\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70" | ||
319 | "\x61\x6C\x65\x74\x74\x65\x3C\x2F\x61\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F" | ||
320 | "\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F" | ||
321 | "\x75\x74\x70\x75\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61" | ||
322 | "\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63" | ||
323 | "\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72" | ||
324 | "\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27" | ||
325 | "\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65" | ||
326 | "\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61" | ||
327 | "\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52" | ||
328 | "\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x53\x75\x63" | ||
329 | "\x63\x65\x73\x73\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72" | ||
330 | "\x72\x6F\x72\x2C\x20\x6E\x6F\x6E\x20\x7A\x65\x72\x6F\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2E" | ||
331 | "\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65" | ||
332 | "\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x3E\x3C\x42\x3E" | ||
333 | "\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63" | ||
334 | "\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x29\x3C\x2F\x66\x6F\x6E" | ||
335 | "\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E" | ||
336 | "\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65" | ||
337 | "\x74\x74\x65\x20\x2D\x20\x53\x65\x74\x75\x70\x20\x74\x68\x65\x20\x67\x69\x66\x20\x70\x61\x6C\x65\x74\x74" | ||
338 | "\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C" | ||
339 | "\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42" | ||
340 | "\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73" | ||
341 | "\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55" | ||
342 | "\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42" | ||
343 | "\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65" | ||
344 | "\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6C\x6F\x61\x64\x73\x20" | ||
345 | "\x72\x61\x77\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x28\x2E\x61\x63\x74\x29\x20\x66\x72\x6F\x6D\x20\x3C\x55" | ||
346 | "\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x6F\x72\x20\x69\x66\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55" | ||
347 | "\x3E\x20\x69\x73\x20\x22\x45\x47\x41\x22\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74" | ||
348 | "\x69\x6F\x6E\x20\x73\x65\x74\x75\x70\x73\x20\x74\x68\x65\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x74\x6F\x20" | ||
349 | "\x45\x47\x41\x20\x6D\x6F\x64\x65\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52" | ||
350 | "\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74" | ||
351 | "\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30" | ||
352 | "\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28" | ||
353 | "\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41" | ||
354 | "\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63" | ||
355 | "\x6F\x6F\x6B\x69\x65\x20\x2D\x20\x73\x65\x74\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x55\x4C\x3E\xA" | ||
356 | "\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75" | ||
357 | "\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76" | ||
358 | "\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x63" | ||
359 | "\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E" | ||
360 | "\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x74\x69\x6D\x65\x6F\x66" | ||
361 | "\x66\x73\x65\x74\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55" | ||
362 | "\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x6F\x6D\x61\x69\x6E\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20" | ||
363 | "\x3C\x55\x3E\x73\x65\x63\x75\x72\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45" | ||
364 | "\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F" | ||
365 | "\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F" | ||
366 | "\x6E\x20\x73\x65\x74\x73\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x6F\x6E\x20\x63\x6C\x69\x65\x6E\x74\x20" | ||
367 | "\x62\x72\x6F\x77\x73\x65\x72\x20\x77\x69\x74\x68\x20\x6B\x65\x79\x20\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55" | ||
368 | "\x3E\x2C\x20\x76\x61\x6C\x75\x65\x20\x3C\x55\x3E\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20" | ||
369 | "\x65\x78\x70\x69\x72\x65\x73\x20\x61\x74\x20\x3C\x55\x3E\x74\x69\x6D\x65\x6F\x66\x66\x73\x65\x74\x3C\x2F" | ||
370 | "\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x74\x69\x6D\x65\x6F\x66\x66\x73\x65\x74\x20\x66\x6F\x72\x6D\x61\x74\x20" | ||
371 | "\x69\x73\x20\x6F\x6E\x65\x20\x6C\x69\x6B\x65\x20\x3C\x55\x3E\x73\x69\x67\x6E\x3C\x2F\x55\x3E\x2C\x20\x3C" | ||
372 | "\x55\x3E\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x66\x73\x65\x74\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x3C\x55" | ||
373 | "\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x20\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x28\x69\x2E" | ||
374 | "\x65\x20\x2B\x31\x30\x6D\x2C\x20\x31\x30\x20\x6D\x6F\x6E\x74\x68\x73\x29\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E" | ||
375 | "\xA\x9\x3C\x55\x4C\x3E\x3C\x55\x3E\x73\x69\x67\x6E\x3C\x2F\x55\x3E\x20\x69\x73\x20\x6F\x6E\x20\x6C\x69" | ||
376 | "\x6B\x65\x20\x27\x2D\x27\x20\x6F\x72\x20\x27\x2B\x27\x3C\x2F\x55\x4C\x3E\xA\x9\x3C\x55\x4C\x3E\x3C\x55" | ||
377 | "\x3E\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x66\x73\x65\x74\x3C\x2F\x55\x3E\x20\x69\x73\x20\x6C\x69\x6B\x65" | ||
378 | "\x20\x2B\x3C\x55\x3E\x35\x3C\x2F\x55\x3E\x4D\x20\x6D\x65\x61\x6E\x73\x20\x65\x78\x70\x69\x72\x65\x73\x20" | ||
379 | "\x61\x74\x20\x6E\x65\x78\x74\x20\x35\x20\x6D\x69\x6E\x75\x74\x65\x73\x20\x3C\x2F\x55\x4C\x3E\xA\x9\x3C" | ||
380 | "\x55\x4C\x3E\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x20\x69\x73\x3A\xA\x9\x9" | ||
381 | "\x3C\x55\x4C\x3E\x53\x20\x2D\x20\x73\x65\x63\x6F\x6E\x64\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C" | ||
382 | "\x3E\x4D\x20\x2D\x20\x6D\x69\x6E\x75\x74\x65\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x48\x20" | ||
383 | "\x2D\x20\x68\x6F\x75\x72\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x64\x20\x2D\x20\x64\x61\x79" | ||
384 | "\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x6D\x20\x2D\x20\x6D\x6F\x6E\x74\x68\x73\x3C\x2F\x55" | ||
385 | "\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x79\x20\x2D\x20\x79\x65\x61\x72\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x3C" | ||
386 | "\x2F\x55\x4C\x3E\xA\x9\x70\x61\x74\x68\x20\x2D\x20\x53\x75\x62\x73\x65\x74\x20\x6F\x66\x20\x55\x52\x4C" | ||
387 | "\x73\x20\x69\x6E\x20\x61\x20\x64\x6F\x6D\x61\x69\x6E\x20\x66\x6F\x72\x20\x77\x68\x69\x63\x68\x20\x74\x68" | ||
388 | "\x65\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x76\x61\x6C\x69\x64\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
389 | "\x20\x20\x20\x28\x49\x66\x20\x74\x68\x65\x20\x70\x61\x74\x68\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x70\x65" | ||
390 | "\x63\x69\x66\x69\x65\x64\x20\x28\x70\x61\x74\x68\x20\x3D\x3D\x20\x4E\x55\x4C\x4C\x29\x2C\x20\x69\x74\x20" | ||
391 | "\x61\x73\x20\x61\x73\x73\x75\x6D\x65\x64\x20\x74\x6F\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
392 | "\x20\x20\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x70\x61\x74\x68\x20\x61\x73\x20\x74\x68\x65\x20\x64\x6F" | ||
393 | "\x63\x75\x6D\x65\x6E\x74\x20\x62\x65\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x62\x65\x64\x20\x62\x79\x20" | ||
394 | "\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x77\x68\x69\x63\x68\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
395 | "\x20\x20\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x74\x68\x65\x20\x63\x6F\x6F\x6B\x69\x65\x2E\x29\x3C\x42" | ||
396 | "\x52\x3E\xA\x20\x20\x20\x20\x64\x6F\x6D\x61\x69\x6E\x20\x3D\x20\x44\x6F\x6D\x61\x69\x6E\x20\x74\x68\x65" | ||
397 | "\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x20\x66\x6F\x72\xA\x20\x20\x20\x20\x20" | ||
398 | "\x20\x20\x20\x20\x20\x20\x20\x20\x28\x49\x66\x20\x74\x68\x65\x20\x64\x6F\x6D\x61\x69\x6E\x20\x69\x73\x20" | ||
399 | "\x6E\x6F\x74\x20\x73\x65\x74\x20\x28\x64\x6F\x6D\x61\x69\x6E\x20\x3D\x3D\x20\x4E\x55\x4C\x4C\x29\x2C\x20" | ||
400 | "\x74\x68\x65\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\xA\x20\x20\x20\x20\x20" | ||
401 | "\x20\x20\x20\x20\x20\x20\x20\x20\x64\x6F\x6D\x61\x69\x6E\x20\x69\x73\x20\x74\x68\x65\x20\x68\x6F\x73\x74" | ||
402 | "\x20\x6E\x61\x6D\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x77\x68\x69\x63\x68\x20" | ||
403 | "\x67\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x74\x68\x65\x20\x63\x6F\x6F\x6B\x69\x65\xA\x20\x20\x20\x20\x20" | ||
404 | "\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x2E\x29\x3C\x42\x52\x3E\xA\x9\x73\x65" | ||
405 | "\x63\x75\x72\x65\x20\x3D\x20\x49\x66\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x6D\x61\x72\x6B" | ||
406 | "\x65\x64\x20\x73\x65\x63\x75\x72\x65\x20\x28\x73\x65\x63\x75\x72\x65\x20\x3D\x3D\x20\x31\x29\x2C\x20\x69" | ||
407 | "\x74\x20\x77\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
408 | "\x20\x20\x74\x72\x61\x6E\x73\x6D\x69\x74\x74\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x63\x6F\x6D\x6D\x75" | ||
409 | "\x6E\x69\x63\x61\x74\x69\x6F\x6E\x73\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x77\x69\x74\x68\x20\x74\x68\x65" | ||
410 | "\x20\x68\x6F\x73\x74\x20\x69\x73\x20\x61\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65" | ||
411 | "\x63\x75\x72\x65\x20\x6F\x6E\x65\x2E\x20\x43\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x74\x68\x69\x73\x20\x6D" | ||
412 | "\x65\x61\x6E\x73\x20\x74\x68\x61\x74\x20\x73\x65\x63\x75\x72\x65\x20\x63\x6F\x6F\x6B\x69\x65\x73\x20\x77" | ||
413 | "\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73" | ||
414 | "\x65\x6E\x74\x20\x74\x6F\x20\x48\x54\x54\x50\x53\x20\x28\x48\x54\x54\x50\x20\x6F\x76\x65\x72\x20\x53\x53" | ||
415 | "\x4C\x29\x20\x73\x65\x72\x76\x65\x72\x73\x2E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x28" | ||
416 | "\x49\x66\x20\x73\x65\x63\x75\x72\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" | ||
417 | "\x20\x28\x73\x65\x63\x75\x72\x65\x20\x3D\x3D\x20\x30\x29\x2C\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69" | ||
418 | "\x73\x20\x63\x6F\x6E\x73\x69\x64\x65\x72\x65\x64\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
419 | "\x20\x73\x61\x66\x65\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6C" | ||
420 | "\x65\x61\x72\x20\x6F\x76\x65\x72\x20\x75\x6E\x73\x65\x63\x75\x72\x65\x64\x20\x63\x68\x61\x6E\x6E\x65\x6C" | ||
421 | "\x73\x2E\x20\x29\x3C\x42\x52\x3E\xA\x20\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F" | ||
422 | "\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74" | ||
423 | "\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x68\x6F\x75\x6C\x64\x20\x62" | ||
424 | "\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20" | ||
425 | "\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E" | ||
426 | "\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72" | ||
427 | "\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73" | ||
428 | "\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
429 | "\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\x3C\x2F\x55" | ||
430 | "\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F" | ||
431 | "\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E\x3C\x66\x6F" | ||
432 | "\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65" | ||
433 | "\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F" | ||
434 | "\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C" | ||
435 | "\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x20\x2D" | ||
436 | "\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53" | ||
437 | "\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22" | ||
438 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20" | ||
439 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x63\x68" | ||
440 | "\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44" | ||
441 | "\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62" | ||
442 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E" | ||
443 | "\x63\x74\x69\x6F\x6E\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x6F\x6E\x20\x63" | ||
444 | "\x6C\x69\x65\x6E\x74\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x77\x69\x74\x68\x20\x6B\x65\x79\x20\x3C\x55\x3E" | ||
445 | "\x6B\x65\x79\x3C\x2F\x55\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45" | ||
446 | "\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64" | ||
447 | "\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x68\x6F" | ||
448 | "\x75\x6C\x64\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20" | ||
449 | "\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67" | ||
450 | "\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20" | ||
451 | "\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23" | ||
452 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62" | ||
453 | "\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x3C\x42" | ||
454 | "\x52\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D" | ||
455 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74" | ||
456 | "\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74" | ||
457 | "\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42" | ||
458 | "\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69" | ||
459 | "\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x20\x2D\x20\x73\x65\x74\x73\x20\x61\x20\x76\x61\x72\x69\x61\x62" | ||
460 | "\x6C\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55" | ||
461 | "\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C" | ||
462 | "\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76" | ||
463 | "\x61\x72\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72" | ||
464 | "\x20\x2A\x3C\x55\x3E\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44" | ||
465 | "\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62" | ||
466 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20" | ||
467 | "\x73\x65\x74\x73\x20\x61\x6E\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65\x64\x20\x3C\x55\x3E" | ||
468 | "\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x20\x77\x69\x74\x68\x20\x76\x61\x6C\x75\x65\x20\x3C\x55\x3E\x76\x61\x6C" | ||
469 | "\x75\x65\x3C\x2F\x55\x3E\x20\x69\x6E\x20\x61\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x2C\x20\x74\x6F" | ||
470 | "\x20\x62\x65\x20\x75\x73\x65\x64\x20\x69\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x6F\x6E\x6C\x79\x20\x61" | ||
471 | "\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x69\x66\x20\x57\x53\x5F\x44\x59\x4E\x56\x41\x52\x20\x66\x6C\x61\x67" | ||
472 | "\x20\x75\x73\x65\x64\x29\x3C\x42\x52\x3E\xA\x9\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65" | ||
473 | "\x74\x76\x61\x72\x28\x22\x62\x67\x63\x22\x2C\x22\x23\x66\x66\x30\x30\x64\x64\x22\x29\x3B\x3C\x42\x52\x3E" | ||
474 | "\xA\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x20\x62\x67\x63" | ||
475 | "\x6F\x6C\x6F\x72\x3D\x27\x24\x62\x67\x63\x3B\x27\x26\x67\x74\x3B\x22\x29\x3B\x20\x20\x2D\x20\x77\x69\x6C" | ||
476 | "\x6C\x20\x65\x78\x63\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x24\x62\x67\x63" | ||
477 | "\x3B\x20\x74\x6F\x20\x23\x66\x66\x30\x30\x64\x64\x20\x6F\x6E\x20\x6F\x75\x74\x70\x75\x74\x3C\x2F\x55\x4C" | ||
478 | "\x3E\xA\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62" | ||
479 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20" | ||
480 | "\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42" | ||
481 | "\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63" | ||
482 | "\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73" | ||
483 | "\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D" | ||
484 | "\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61" | ||
485 | "\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C" | ||
486 | "\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C" | ||
487 | "\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x3E\x3C" | ||
488 | "\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62" | ||
489 | "\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42" | ||
490 | "\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E" | ||
491 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x20\x2D\x20\x67\x65\x74\x73\x20\x61" | ||
492 | "\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x76\x61\x6C\x75\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59" | ||
493 | "\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77" | ||
494 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65" | ||
495 | "\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E" | ||
496 | "\x61\x6D\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54" | ||
497 | "\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74" | ||
498 | "\x5F\x67\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x73\x20\x74\x68" | ||
499 | "\x65\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x3C\x55\x3E\x6E\x61\x6D" | ||
500 | "\x65\x3C\x2F\x55\x3E\x2C\x20\x28\x73\x65\x65\x20\x61\x6C\x73\x6F\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F" | ||
501 | "\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74" | ||
502 | "\x5F\x73\x65\x74\x76\x61\x72\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28" | ||
503 | "\x29\x3C\x2F\x61\x3E\x29\x3C\x42\x52\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42" | ||
504 | "\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61" | ||
505 | "\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E" | ||
506 | "\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F" | ||
507 | "\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68" | ||
508 | "\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20" | ||
509 | "\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62" | ||
510 | "\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65" | ||
511 | "\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C" | ||
512 | "\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C" | ||
513 | "\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72" | ||
514 | "\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61" | ||
515 | "\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E" | ||
516 | "\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65" | ||
517 | "\x6C\x76\x61\x72\x20\x2D\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3C\x2F" | ||
518 | "\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69" | ||
519 | "\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C" | ||
520 | "\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x63" | ||
521 | "\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42" | ||
522 | "\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77" | ||
523 | "\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F" | ||
524 | "\x6E\x20\x64\x65\x6C\x65\x74\x65\x73\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x77\x69\x74\x68\x20" | ||
525 | "\x6E\x61\x6D\x65\x20\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3C\x42\x52\x3E\x3C\x2F\x55\x4C\x3E\xA" | ||
526 | "\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C" | ||
527 | "\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E" | ||
528 | "\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E" | ||
529 | "\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C" | ||
530 | "\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72" | ||
531 | "\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E" | ||
532 | "\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C" | ||
533 | "\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28" | ||
534 | "\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20" | ||
535 | "\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74" | ||
536 | "\x69\x76\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37" | ||
537 | "\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65" | ||
538 | "\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E" | ||
539 | "\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54" | ||
540 | "\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x20\x2D\x20\x43\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x48\x54" | ||
541 | "\x54\x50\x20\x68\x65\x61\x64\x65\x72\x20\x73\x74\x61\x74\x75\x73\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53" | ||
542 | "\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22" | ||
543 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20" | ||
544 | "\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x28\x63" | ||
545 | "\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55" | ||
546 | "\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E" | ||
547 | "\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69" | ||
548 | "\x76\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20" | ||
549 | "\x48\x54\x54\x50\x20\x68\x65\x61\x64\x65\x72\x20\x73\x74\x61\x74\x75\x73\x20\x28\x69\x2E\x65\x2E\x20\x22" | ||
550 | "\x48\x54\x54\x50\x2F\x31\x2E\x31\x20\x32\x30\x30\x20\x4F\x4B\x22\x29\x20\x74\x6F\x20\x74\x68\x65\x20\x73" | ||
551 | "\x74\x72\x69\x6E\x67\x20\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x3C\x42\x52\x3E" | ||
552 | "\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x3C\x69\x3E\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x22\x48\x54\x54" | ||
553 | "\x50\x2F\x31\x2E\x31\x20\x34\x30\x31\x20\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E\x20\x52\x65" | ||
554 | "\x71\x75\x69\x72\x65\x64\x22\x20\x28\x74\x6F\x20\x72\x65\x71\x75\x69\x72\x65\x20\x61\x20\x70\x61\x73\x73" | ||
555 | "\x77\x6F\x72\x64\x29\x2C\x20\x72\x65\x64\x69\x72\x65\x63\x74\x69\x6F\x6E\x20\x6F\x72\x20\x73\x69\x6D\x69" | ||
556 | "\x6C\x61\x72\x20\x61\x63\x74\x69\x6F\x6E\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20" | ||
557 | "\x73\x69\x64\x65\x3C\x2F\x69\x3E\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42" | ||
558 | "\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65" | ||
559 | "\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F" | ||
560 | "\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42" | ||
561 | "\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79" | ||
562 | "\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69" | ||
563 | "\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E" | ||
564 | "\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77" | ||
565 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E" | ||
566 | "\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77" | ||
567 | "\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x3E\x3C\x42\x3E\x3C" | ||
568 | "\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C" | ||
569 | "\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C" | ||
570 | "\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55" | ||
571 | "\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x20\x2D" | ||
572 | "\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x68\x65\x20\x68\x65\x61\x64" | ||
573 | "\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x2A\x2F\x2A\x22\x3C\x2F\x55\x4C" | ||
574 | "\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63" | ||
575 | "\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52" | ||
576 | "\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79" | ||
577 | "\x70\x65\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3C\x2F\x55\x3E\x29" | ||
578 | "\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA" | ||
579 | "\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74" | ||
580 | "\x74\x79\x70\x65\x28\x29\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x68" | ||
581 | "\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x2A\x2F" | ||
582 | "\x2A\x22\x2C\x20\x77\x68\x65\x72\x65\x20\x27\x2A\x2F\x2A\x27\x20\x69\x73\x20\x64\x65\x74\x65\x72\x6D\x69" | ||
583 | "\x6E\x65\x64\x20\x62\x79\x20\x3C\x55\x3E\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3C\x2F\x55\x3E\x20\x28\x69" | ||
584 | "\x2E\x65\x2E\x20\x22\x68\x74\x6D\x6C\x22\x20\x62\x61\x73\x65\x64\x20\x6F\x6E\x20\x6D\x69\x6D\x65\x66\x69" | ||
585 | "\x6C\x65\x20\x70\x72\x6F\x64\x75\x63\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A" | ||
586 | "\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x20\x61\x6E\x64\x20\x22\x6A" | ||
587 | "\x70\x67\x22\x20\x70\x72\x6F\x64\x75\x63\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65" | ||
588 | "\x3A\x20\x69\x6D\x61\x67\x65\x2F\x6A\x70\x65\x67\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3C\x42\x52\x3E" | ||
589 | "\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x75" | ||
590 | "\x73\x65\x64\x20\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E" | ||
591 | "\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72" | ||
592 | "\x22\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x3C\x2F\x61" | ||
593 | "\x3E\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42" | ||
594 | "\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x75\x73\x65\x73\x20\x6D" | ||
595 | "\x69\x6D\x65\x20\x74\x79\x70\x65\x73\x20\x6C\x6F\x61\x64\x65\x64\x20\x61\x74\x20\x3C\x61\x20\x68\x72\x65" | ||
596 | "\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65" | ||
597 | "\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x22\x3E\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
598 | "\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x29\x3C\x2F\x61\x3E\x20\x65\x6C\x73\x65\x20" | ||
599 | "\x69\x74\x20\x77\x69\x6C\x6C\x20\x70\x72\x69\x6E\x74\x20\x6F\x6E\x6C\x79\x20\x22\x43\x6F\x6E\x74\x65\x6E" | ||
600 | "\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E" | ||
601 | "\x22\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77" | ||
602 | "\x65\x62\x5F\x6C\x6F\x67\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30" | ||
603 | "\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C" | ||
604 | "\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65" | ||
605 | "\x62\x5F\x6C\x6F\x67\x20\x2D\x20\x77\x72\x69\x74\x65\x20\x74\x6F\x20\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F" | ||
606 | "\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69" | ||
607 | "\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C" | ||
608 | "\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72" | ||
609 | "\x20\x2A\x3C\x55\x3E\x66\x6F\x72\x6D\x61\x74\x3C\x2F\x55\x3E\x2C\x3C\x55\x3E\x2E\x2E\x2E\x3C\x2F\x55\x3E" | ||
610 | "\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E" | ||
611 | "\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x20\x69\x73\x20\x73\x69\x6D\x69" | ||
612 | "\x6C\x61\x72\x20\x74\x6F\x20\x70\x72\x69\x6E\x74\x66\x2C\x20\x62\x75\x74\x20\x77\x72\x69\x74\x65\x73\x20" | ||
613 | "\x74\x6F\x20\x61\x20\x6C\x6F\x67\x66\x69\x6C\x65\x20\x28\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x6E" | ||
614 | "\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23" | ||
615 | "\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72" | ||
616 | "\x5F\x69\x6E\x69\x74\x28\x29\x3C\x2F\x61\x3E\x29\x2E\x20\x4A\x75\x73\x74\x20\x61\x73\x20\x70\x72\x69\x6E" | ||
617 | "\x74\x66\x2C\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x61\x64\x64\x20\x61\x20\x6E\x65\x77\x6C\x69" | ||
618 | "\x6E\x65\x20\x61\x74\x20\x74\x68\x65\x20\x65\x6E\x64\x2E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F" | ||
619 | "\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x20\x66" | ||
620 | "\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63" | ||
621 | "\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E" | ||
622 | "\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65" | ||
623 | "\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D" | ||
624 | "\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76" | ||
625 | "\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F" | ||
626 | "\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52" | ||
627 | "\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3E" | ||
628 | "\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x43\x6C" | ||
629 | "\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52" | ||
630 | "\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E" | ||
631 | "\x66\x6F\x20\x2D\x20\x61\x20\x73\x74\x72\x75\x63\x74\x20\x74\x6F\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x63" | ||
632 | "\x6C\x69\x65\x6E\x74\x20\x48\x65\x61\x64\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50" | ||
633 | "\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x44\x65\x63\x6C\x61\x72\x65\x64\x20\x69\x6E\x20\x77" | ||
634 | "\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x20\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x65\x78\x74\x65\x72" | ||
635 | "\x6E\x20\x73\x74\x72\x75\x63\x74\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x20\x7B\x3C\x42\x52\x3E\xA" | ||
636 | "\x3C\x55\x4C\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6E\x74\x20\x3C\x55\x3E\x6F\x75\x74\x66\x64\x3C" | ||
637 | "\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E" | ||
638 | "\x69\x6E\x65\x74\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
639 | "\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x72\x65\x71\x75\x65\x73\x74\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA" | ||
640 | "\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6D\x65\x74\x68\x6F\x64\x3C\x2F\x55" | ||
641 | "\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x75\x73" | ||
642 | "\x65\x72\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A" | ||
643 | "\x3C\x55\x3E\x70\x61\x73\x73\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x9\x9\x63\x68\x61\x72\x20\x2A\x28" | ||
644 | "\x2A\x3C\x55\x3E\x48\x65\x61\x64\x65\x72\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64" | ||
645 | "\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C" | ||
646 | "\x55\x3E\x51\x75\x65\x72\x79\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29" | ||
647 | "\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x50" | ||
648 | "\x6F\x73\x74\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52" | ||
649 | "\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x43\x6F\x6F\x6B\x69" | ||
650 | "\x65\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA" | ||
651 | "\x9\x9\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x43\x6F\x6E\x66\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61" | ||
652 | "\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74" | ||
653 | "\x72\x75\x63\x74\x20\x5F\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x20\x28\x2A\x3C\x55\x3E\x4D\x75\x6C\x74\x69" | ||
654 | "\x50\x61\x72\x74\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42" | ||
655 | "\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x76\x6F\x69\x64\x20\x2A\x5F\x5F\x70\x61\x64\x5B\x35\x5D\x3B" | ||
656 | "\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x7D\x20\x2A\x3C\x55\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66" | ||
657 | "\x6F\x3C\x2F\x55\x3E\x3B\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F" | ||
658 | "\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26" | ||
659 | "\x67\x74\x3B\x3C\x55\x3E\x6F\x75\x74\x66\x64\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69\x73" | ||
660 | "\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x64\x65\x73\x63\x72\x69\x70\x74\x6F\x72\x20\x6F\x66\x20\x74\x68\x65" | ||
661 | "\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x28\x75\x73" | ||
662 | "\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x63\x67\x69\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x61\x6E\x64\x20" | ||
663 | "\x66\x72\x69\x65\x6E\x64\x73\x29\x2E\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65" | ||
664 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x69\x6E\x65\x74\x6E\x61\x6D\x65\x3C\x2F\x55\x3E" | ||
665 | "\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x6F\x20\x69\x6E\x65\x74\x6E" | ||
666 | "\x61\x6D\x65\x20\x28\x69\x2E\x65\x2E\x20\x22\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x22\x29\x3C\x2F\x55\x4C" | ||
667 | "\x3E\x20\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C" | ||
668 | "\x55\x3E\x72\x65\x71\x75\x65\x73\x74\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69\x73\x20\x74" | ||
669 | "\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64\x20\x27\x66\x69\x6C\x65\x27\x20\x28\x69\x2E\x65\x2E\x20" | ||
670 | "\x66\x6F\x72\x20\x22\x47\x45\x54\x20\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x20\x48\x54\x54\x50\x2F" | ||
671 | "\x31\x2E\x30\x5C\x72\x5C\x6E\x22\x20\x74\x68\x65\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67" | ||
672 | "\x74\x3B\x72\x65\x71\x75\x65\x73\x74\x20\x69\x73\x20\x22\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x22" | ||
673 | "\x29\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26" | ||
674 | "\x67\x74\x3B\x3C\x55\x3E\x6D\x65\x74\x68\x6F\x64\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69" | ||
675 | "\x73\x20\x74\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x6D\x65\x74\x68\x6F\x64\x20\x28\x22\x47\x45\x54" | ||
676 | "\x22\x20\x6F\x72\x20\x22\x50\x4F\x53\x54\x22\x20\x65\x74\x63\x2E\x2E\x29\x3C\x2F\x55\x4C\x3E\x3C\x42\x52" | ||
677 | "\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x75\x73\x65" | ||
678 | "\x72\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x75\x74\x68\x52\x65\x61\x6C\x6D\x20\x75\x73" | ||
679 | "\x65\x72\x6E\x61\x6D\x65\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49" | ||
680 | "\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x70\x61\x73\x73\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55" | ||
681 | "\x4C\x3E\x41\x75\x74\x68\x52\x65\x61\x6C\x6D\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x3C\x2F\x55\x4C\x3E\x3C" | ||
682 | "\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x48" | ||
683 | "\x65\x61\x64\x65\x72\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C" | ||
684 | "\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x46\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x70" | ||
685 | "\x61\x72\x73\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x2C\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72" | ||
686 | "\x6E\x73\x20\x48\x65\x61\x64\x65\x72\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x28\x69\x2E\x65" | ||
687 | "\x2E\x20\x66\x6F\x72\x20\x22\x48\x6F\x73\x74\x3A\x20\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E" | ||
688 | "\x30\x2E\x31\x3A\x38\x31\x22\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x6F\x66\x20\x43\x6C\x69\x65" | ||
689 | "\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x48\x65\x61\x64\x65\x72\x28\x22\x48\x6F\x73\x74\x22\x29\x20" | ||
690 | "\x69\x73\x20\x22\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x3A\x38\x31\x22\x29\x20" | ||
691 | "\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20" | ||
692 | "\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E" | ||
693 | "\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x48\x65\x61\x64\x65\x72\x20\x66\x72\x6F\x6D" | ||
694 | "\x20\x63\x6C\x69\x65\x6E\x74\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74" | ||
695 | "\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x51\x75\x65\x72\x79\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72" | ||
696 | "\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41" | ||
697 | "\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65" | ||
698 | "\x20\x71\x75\x65\x72\x79\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x72\x6F\x77" | ||
699 | "\x73\x65\x72\x20\x28\x69\x2E\x65\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x22" | ||
700 | "\x68\x74\x74\x70\x3A\x2F\x2F\x73\x6F\x6D\x65\x68\x6F\x73\x74\x2E\x6E\x65\x74\x2F\x72\x65\x71\x2E\x68\x74" | ||
701 | "\x6D\x6C\x3F\x69\x64\x3D\x35\x26\x66\x3D\x31\x22\x2C\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26" | ||
702 | "\x67\x74\x3B\x51\x75\x65\x72\x79\x28\x22\x69\x64\x22\x29\x20\x69\x73\x20\x22\x35\x22\x2E\x69\x66\x20\x61" | ||
703 | "\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x4E" | ||
704 | "\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x74" | ||
705 | "\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x51\x75\x65\x72\x79\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x72" | ||
706 | "\x6F\x6D\x20\x63\x6C\x69\x65\x6E\x74\x3C\x42\x52\x3E\x69\x66\x20\x74\x68\x65\x20\x68\x61\x6E\x64\x6C\x65" | ||
707 | "\x20\x68\x61\x76\x65\x20\x74\x68\x65\x20\x63\x68\x61\x72\x20\x23\x20\x66\x69\x72\x73\x74\x20\x28\x6C\x69" | ||
708 | "\x6B\x65\x20\x22\x23\x68\x61\x6E\x64\x6C\x65\x22\x29\x20\x69\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74" | ||
709 | "\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x28\x75\x73" | ||
710 | "\x65\x66\x75\x6C\x6C\x20\x66\x6F\x72\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x65\x73\x20\x61\x6E\x64\x20\x65" | ||
711 | "\x74\x63\x2E\x2E\x2E\x29\x20\x43\x68\x65\x63\x6B\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65" | ||
712 | "\x6C\x70\x3D\x65\x78\x61\x6D\x70\x6C\x65\x73\x23\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x3E\x63\x68\x65\x63" | ||
713 | "\x6B\x62\x6F\x78\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA" | ||
714 | "\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x50\x6F\x73\x74\x28" | ||
715 | "\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F" | ||
716 | "\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74" | ||
717 | "\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x50\x6F\x73\x74\x20\x64\x61\x74\x61\x20\x66\x72\x6F\x6D\x20\x74\x68" | ||
718 | "\x65\x20\x66\x6F\x72\x6D\x73\x20\x77\x69\x74\x68\x20\x6D\x65\x74\x68\x6F\x64\x20\x27\x50\x4F\x53\x54\x27" | ||
719 | "\x2E\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x74\x68\x65\x20\x6E\x61\x6D" | ||
720 | "\x65\x20\x6F\x66\x20\x73\x6F\x6D\x65\x20\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x26\x67\x74\x3B\x20\x74\x61" | ||
721 | "\x67\x2E\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55" | ||
722 | "\x3E\x20\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69" | ||
723 | "\x6F\x6E\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x50\x6F\x73\x74\x20\x64\x61\x74\x61" | ||
724 | "\x20\x66\x72\x6F\x6D\x20\x63\x6C\x69\x65\x6E\x74\x3C\x42\x52\x3E\x69\x66\x20\x74\x68\x65\x20\x68\x61\x6E" | ||
725 | "\x64\x6C\x65\x20\x68\x61\x76\x65\x20\x74\x68\x65\x20\x63\x68\x61\x72\x20\x23\x20\x66\x69\x72\x73\x74\x20" | ||
726 | "\x28\x6C\x69\x6B\x65\x20\x22\x23\x68\x61\x6E\x64\x6C\x65\x22\x29\x20\x69\x74\x20\x72\x65\x74\x75\x72\x6E" | ||
727 | "\x73\x20\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20" | ||
728 | "\x28\x75\x73\x65\x66\x75\x6C\x6C\x20\x66\x6F\x72\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x65\x73\x20\x61\x6E" | ||
729 | "\x64\x20\x65\x74\x63\x2E\x2E\x2E\x29\x20\x43\x68\x65\x63\x6B\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F" | ||
730 | "\x3F\x68\x65\x6C\x70\x3D\x65\x78\x61\x6D\x70\x6C\x65\x73\x23\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x3E\x63" | ||
731 | "\x68\x65\x63\x6B\x62\x6F\x78\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x3C\x2F\x55\x4C\x3E\x3C\x42" | ||
732 | "\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x43\x6F" | ||
733 | "\x6F\x6B\x69\x65\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F" | ||
734 | "\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61" | ||
735 | "\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x43\x6F\x6F\x6B\x69\x65\x20\x64\x61\x74\x61\x20" | ||
736 | "\x66\x72\x6F\x6D\x20\x62\x72\x6F\x77\x73\x65\x72\x2E\x20\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20" | ||
737 | "\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E" | ||
738 | "\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F" | ||
739 | "\x6C\x65\x20\x43\x6F\x6F\x6B\x69\x65\x73\x74\x72\x69\x6E\x67\x20\x66\x72\x6F\x6D\x20\x63\x6C\x69\x65\x6E" | ||
740 | "\x74\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26" | ||
741 | "\x67\x74\x3B\x3C\x55\x3E\x43\x6F\x6E\x66\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x20\x3C\x55\x3E\x74" | ||
742 | "\x6F\x70\x69\x63\x3C\x2F\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F" | ||
743 | "\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61" | ||
744 | "\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x61\x20" | ||
745 | "\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x20\x69\x6E\x20\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F\x55\x3E" | ||
746 | "\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x20\x69\x66\x20\x75\x73\x65" | ||
747 | "\x64\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26" | ||
748 | "\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A" | ||
749 | "\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66" | ||
750 | "\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x64\x61\x74" | ||
751 | "\x61\x20\x73\x74\x72\x75\x63\x74\x75\x72\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x6F\x72\x6D\x73" | ||
752 | "\x20\x77\x69\x74\x68\x20\x6D\x65\x74\x68\x6F\x64\x20\x27\x50\x4F\x53\x54\x27\x20\x61\x6E\x64\x20\x65\x6E" | ||
753 | "\x63\x74\x79\x70\x65\x3D\x27\x6D\x75\x6C\x74\x69\x70\x61\x72\x74\x2F\x66\x6F\x72\x6D\x2D\x64\x61\x74\x61" | ||
754 | "\x27\x20\x28\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x75\x70\x6C\x6F\x61\x64\x69\x6E\x67\x20\x66\x69" | ||
755 | "\x6C\x65\x73\x29\x2E\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x74\x68\x65" | ||
756 | "\x20\x6E\x61\x6D\x65\x20\x6F\x66\x20\x73\x6F\x6D\x65\x20\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x26\x67\x74" | ||
757 | "\x3B\x20\x74\x61\x67\x2E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x74\x68\x65\x20\x73\x74\x72\x75\x63\x74\x75" | ||
758 | "\x72\x65\x20\x69\x73\x3C\x42\x52\x3E\xA\x73\x74\x72\x75\x63\x74\x20\x5F\x4D\x75\x6C\x74\x69\x50\x61\x72" | ||
759 | "\x74\x20\x7B\xA\x3C\x55\x4C\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x69\x64\x3C\x2F\x75\x3E\x3B\x3C" | ||
760 | "\x42\x52\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E" | ||
761 | "\xA\x75\x6E\x73\x69\x67\x6E\x65\x64\x20\x69\x6E\x74\x20\x3C\x55\x3E\x73\x69\x7A\x65\x3C\x2F\x55\x3E\x3B" | ||
762 | "\x3C\x42\x52\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x55\x3E" | ||
763 | "\x3B\x3C\x42\x52\x3E\xA\x76\x6F\x69\x64\x20\x2A\x3C\x55\x3E\x70\x61\x64\x3C\x2F\x55\x3E\x3B\x3C\x42\x52" | ||
764 | "\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x7D\x3B\x3C\x42\x52\x3E\xA\x74\x6F\x20\x62\x65\x20\x75\x73\x65\x64\x20" | ||
765 | "\x61\x73\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C\x74\x69" | ||
766 | "\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x64\x61\x74\x61\x3C" | ||
767 | "\x2F\x55\x3E\x3B\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C" | ||
768 | "\x74\x69\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x73\x69\x7A" | ||
769 | "\x65\x3C\x2F\x55\x3E\x3B\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D" | ||
770 | "\x75\x6C\x74\x69\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x66" | ||
771 | "\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3B\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C\x2F\x55\x4C\x3E\xA" | ||
772 | "\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x6F\x6E\x66\x69\x67\x66\x69\x6C" | ||
773 | "\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E" | ||
774 | "\x54\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E" | ||
775 | "\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E\x74\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69" | ||
776 | "\x6C\x65\x20\x69\x73\x20\x75\x73\x65\x64\x20\x61\x73\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x50\x52\x45" | ||
777 | "\x3E\xA\x5B\x54\x4F\x50\x49\x43\x5D\xA\x4B\x45\x59\x3D\x56\x41\x4C\x55\x45\xA\xA\x6C\x69\x62\x77\x65" | ||
778 | "\x62\x73\x65\x72\x76\x65\x72\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x20\x6D\x75\x73" | ||
779 | "\x74\x20\x62\x65\x20\x69\x6E\x20\x74\x6F\x70\x69\x63\x20\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52" | ||
780 | "\x20\x61\x73\x3A\xA\x5B\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52\x5D\xA\x4C\x4F\x47\x3D\x68\x65" | ||
781 | "\x6C\x70\x2E\x6C\x6F\x67\x20\xA\x50\x4F\x52\x54\x3D\x38\x30\xA\x55\x53\x45\x53\x53\x4C\x3D\x31\xA\x43" | ||
782 | "\x45\x52\x54\x46\x49\x4C\x45\x3D\x66\x6F\x6F\x63\x65\x72\x74\x2E\x70\x6D\xA\x4D\x49\x4D\x45\x46\x49\x4C" | ||
783 | "\x45\x3D\x2F\x65\x74\x63\x2F\x6D\x69\x6D\x65\x2E\x74\x79\x70\x65\x73\xA\x4C\x4F\x43\x41\x4C\x3D\x31\xA" | ||
784 | "\xA\x4C\x4F\x47\x20\x2D\x3E\x20\x74\x68\x65\x20\x6C\x6F\x67\x20\x66\x69\x6C\x65\xA\x50\x4F\x52\x54\x20" | ||
785 | "\x2D\x3E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x65\x6E\x20\x70\x6F\x72\x74\x20\x74\x68\x61\x74\x20\x77\x69" | ||
786 | "\x6C\x6C\x20\x62\x65\x20\x75\x73\x65\x64\x20\x66\x6F\x72\x20\x74\x63\x70\x20\x63\x6F\x6E\x6E\x65\x63\x74" | ||
787 | "\x69\x6F\x6E\x73\xA\xA\x55\x53\x45\x53\x53\x4C\x20\x2D\x3E\x20\x74\x68\x65\x20\x73\x73\x6C\x20\x66\x6C" | ||
788 | "\x61\x67\x20\x69\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x75\x73\x65\x20\x6F\x70\x65\x6E" | ||
789 | "\x73\x73\x6C\x20\x66\x6F\x72\x20\x73\x65\x63\x75\x72\x65\x20\x73\x65\x72\x76\x65\x72\x20\x28\x68\x74\x74" | ||
790 | "\x70\x73\x29\xA\x43\x45\x52\x54\x46\x49\x4C\x45\x20\x2D\x3E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x74" | ||
791 | "\x68\x61\x74\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66" | ||
792 | "\x6F\x72\x20\x73\x73\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\xA\x4D\x49\x4D\x45\x46\x49\x4C" | ||
793 | "\x45\x20\x2D\x3E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x74\x68\x61\x74\x20\x63\x6F\x6E\x74\x61\x69\x6E" | ||
794 | "\x73\x20\x6D\x69\x6D\x65\x2E\x74\x79\x70\x65\x73\x20\x73\x69\x6D\x69\x6C\x65\x72\x20\x74\x6F\x20\x61\x70" | ||
795 | "\x61\x63\x68\x65\x20\x6D\x69\x6D\x65\x66\x69\x6C\x65\xA\x4C\x4F\x43\x41\x4C\x20\x2D\x3E\x20\x6F\x6E\x6C" | ||
796 | "\x79\x20\x61\x63\x63\x65\x70\x74\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x66\x72\x6F\x6D\x20" | ||
797 | "\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\xA\xA\x3C\x2F\x50\x52\x45\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C" | ||
798 | "\x2F\x66\x6F\x6E\x74\x3E\xA\xA\xA\xA"; | ||
799 | |||
800 | #endif | ||
diff --git a/contrib/help/help.c b/contrib/help/help.c deleted file mode 100644 index 86e5f1f0..00000000 --- a/contrib/help/help.c +++ /dev/null | |||
@@ -1,421 +0,0 @@ | |||
1 | #include "web_server.h" | ||
2 | |||
3 | #include <string.h> | ||
4 | #include <signal.h> | ||
5 | #include <stdlib.h> | ||
6 | #include <math.h> | ||
7 | |||
8 | #include "info.h" | ||
9 | #include "functions.h" | ||
10 | #include "examples.h" | ||
11 | #include "security.h" | ||
12 | |||
13 | struct web_server server; | ||
14 | |||
15 | |||
16 | #ifdef WIN32 | ||
17 | #include <windows.h> | ||
18 | #endif | ||
19 | |||
20 | |||
21 | int PORT=81; | ||
22 | |||
23 | |||
24 | void teste1() { | ||
25 | printf("Content-type: text/html\r\n\r\n"); | ||
26 | printf("here's location:<BR>\n"); | ||
27 | printf("%s\r\n",ClientInfo->Header("Location")); | ||
28 | printf("NOTHING=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","NOTHING")); | ||
29 | printf("IP=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","IP")); | ||
30 | printf("MOST=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","MOST")); | ||
31 | printf("IP=%s\n<BR>",ClientInfo->Conf("[LIBWEBSERVER]","IP")); | ||
32 | printf("Connection: %s\n",ClientInfo->Header("Connection")); | ||
33 | }; | ||
34 | |||
35 | void varteste() { | ||
36 | web_client_setvar("bg",ClientInfo->Conf("PAGE_1","background")); | ||
37 | web_client_setvar("pata","#00FF00"); | ||
38 | printf("Content-type: text/html\r\n\r\n"); | ||
39 | printf("<HR>\n"); | ||
40 | printf("$;pata;=\"$pata;\""); | ||
41 | printf("<B><$pata;BODY bgcolor=\"$pata;\"></B> $ (prototipe 0.5.1)<BR>\n"); | ||
42 | printf("Luis Figueiredo$pata;coninhas\r\n"); | ||
43 | |||
44 | }; | ||
45 | |||
46 | void teste() { | ||
47 | int i=0; | ||
48 | |||
49 | web_client_setcookie("caos","teste da noia",NULL,NULL,NULL,0); | ||
50 | |||
51 | printf("content-type: text/html\r\n\r\n"); | ||
52 | printf("hal is \"%s\" hallo is \"%s\"<BR>\n",ClientInfo->Post("hal"),ClientInfo->Post("hallo")); | ||
53 | printf("hal is \"%s\" hallo is \"%s\"<BR>\n",ClientInfo->Post("hal"),ClientInfo->Post("hallo")); | ||
54 | printf("<form method=post>\n"); | ||
55 | printf("<input type=text name=hal value='%s'>\n",ClientInfo->Cookie("stdio")); | ||
56 | web_client_setcookie("teste",ClientInfo->Post("hallo"),"+1m",NULL,NULL,0); | ||
57 | printf("<input type=text name=hallo value='%s'>\n",ClientInfo->Cookie("teste")); | ||
58 | printf("<input type=submit name=send value='POST'>\n"); | ||
59 | printf("</form>\n"); | ||
60 | |||
61 | printf("<form method=query>\n"); | ||
62 | for (i=0;i<5;i++) { | ||
63 | printf("<input type=checkbox name=teste value='%d'>%d<BR>\n",i,i); | ||
64 | }; | ||
65 | printf("<input type=submit name=send1 value='SEND'>\n"); | ||
66 | printf("</form>\n"); | ||
67 | printf("You choose: "); | ||
68 | printf("%d numbers: \n",ClientInfo->Query("#teste")); | ||
69 | for(i=0;i<(int)ClientInfo->Query("#teste");i++){ | ||
70 | printf("%s,",ClientInfo->Query("teste")); | ||
71 | }; | ||
72 | web_client_setcookie("quatro","ratata","+1m","/","127.0.0.1",0); | ||
73 | printf("...<BR>"); | ||
74 | printf("<form method=post>\n"); | ||
75 | for (i=0;i<5;i++) { | ||
76 | printf("<input type=checkbox name=teste value='%d'>post %d<BR>\n",i,i); | ||
77 | }; | ||
78 | printf("<input type=submit name=send1 value='SEND'>\n"); | ||
79 | printf("</form>\n"); | ||
80 | printf("You choose: "); | ||
81 | web_client_setcookie("tres","ratata","+1m",NULL,NULL,0); | ||
82 | printf("%d numbers: ",ClientInfo->Post("#teste")); | ||
83 | for (i=0;i<(int)ClientInfo->Post("#teste");i++) { | ||
84 | printf("%s,",ClientInfo->Post("teste")); | ||
85 | }; | ||
86 | printf("...<BR>"); | ||
87 | web_client_deletecookie("cinco"); | ||
88 | printf("<form method=query>\n"); | ||
89 | printf("<input type=submit name=test value='pipi'><BR>\n"); | ||
90 | printf("</form>\n"); | ||
91 | printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test")); | ||
92 | printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test")); | ||
93 | printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test")); | ||
94 | printf("ClientInfo->Cookie(\"teste\")='%s'<BR>\n",ClientInfo->Cookie("teste")); | ||
95 | printf("ClientInfo->Cookie(\"stdio\")='%s'<BR>\n",ClientInfo->Cookie("stdio")); | ||
96 | printf("ClientInfo->Cookie(\"merdinha\")='%s'<BR>\n",ClientInfo->Cookie("merdinha")); | ||
97 | printf("ClientInfo->Cookie(\"activo\")='%s'<BR>\n",ClientInfo->Cookie("activo")); | ||
98 | printf("ClientInfo->Cookie(\"caos\")='%s'<BR>\n",ClientInfo->Cookie("caos")); | ||
99 | printf("ClientInfo->Cookie(\"caos\")='%s'<BR>\n",ClientInfo->Cookie("caos")); | ||
100 | printf("Method is %s\n<BR>",ClientInfo->method); | ||
101 | printf("Inetaddr=%s\n<BR>",ClientInfo->inetname); | ||
102 | |||
103 | for(i=0;i<10;i++) { | ||
104 | printf("<BR>ClientInfo->Post(\"teste\")='%s'\n",ClientInfo->Post("teste")); | ||
105 | }; | ||
106 | printf("<BR>ClientInfo->Cookie(NULL)=\"%s\"<BR>",ClientInfo->Cookie(NULL)); | ||
107 | printf("<BR>ClientInfo->Post(NULL)=\"%s\"<BR>",ClientInfo->Post(NULL)); | ||
108 | printf("<BR>ClientInfo->Query(NULL)=\"%s\"<BR>",ClientInfo->Query(NULL)); | ||
109 | printf("<BR>ClientInfo->Query(\"teste 0\")=\"%s\"<BR>",ClientInfo->Query("teste 0")); | ||
110 | printf("<PRE>ClientInfo->Header(NULL)=\"%s\"</PRE>\r\n",ClientInfo->Header(NULL)); | ||
111 | |||
112 | }; | ||
113 | |||
114 | |||
115 | void links() { | ||
116 | printf("[<a href='/'>main</a>] [<a href='/?help=info'>info</a>] [<a href='/?help=functions'>functions</a>] [<a href='/?help=examples'>examples</a>] [<a href='/?help=security'>security</a>] [<a href='/?help=Authors'>authors</a>] "); | ||
117 | }; | ||
118 | |||
119 | void startpage(char *topic) { | ||
120 | printf("Content-type: text/html\r\n\r\n"); | ||
121 | printf("<HTML>\n<body bgcolor='EFEFFF'>\n<CENTER>\n<TABLE><TR><TD align=center>\n<a href='http://libwebserver.sourceforge.net'><img border=0 src='/libwebserver.gif'></a>\n</TD><TR><TR><TD align=center>\n<font face='Verdana'><B>HELP<BR>(%s)</B></font>\n</TD></TR></TABLE>\n</CENTER>\n",topic); | ||
122 | links(); | ||
123 | printf("<HR><BR>\n"); | ||
124 | }; | ||
125 | void endpage() { | ||
126 | printf("<HR>"); | ||
127 | links(); | ||
128 | printf("<p align=right> <small> by Luis Figueiredo (<a href='mailto:stdio@netc.pt'>stdio@netc.pt</a>) (%s)</BODY></HTML>\n",_libwebserver_version); | ||
129 | }; | ||
130 | |||
131 | |||
132 | |||
133 | |||
134 | |||
135 | |||
136 | |||
137 | |||
138 | |||
139 | //Johannes E. Schindelin // new on 0.4.0 | ||
140 | void hello_world() { | ||
141 | startpage("hello world example"); | ||
142 | printf("Hello, World!\r\n"); | ||
143 | endpage(); | ||
144 | } | ||
145 | // | ||
146 | |||
147 | |||
148 | // NEW on 0.4.1 | ||
149 | void checkbox() { | ||
150 | int i=0; | ||
151 | char *txt[]={"one","two","three","four","five"}; | ||
152 | startpage("checkbox example"); | ||
153 | printf("<form method=query>\n"); | ||
154 | for(i=0;i<5;i++) { | ||
155 | printf("<input type=checkbox name=number value='%s'\n> %s<BR>",txt[i],txt[i]); | ||
156 | }; | ||
157 | printf("<input type=submit name=send value=' SEND '>\n"); | ||
158 | printf("</form>\n"); | ||
159 | printf("You have choosen <font color='FF0000'>%d</font> numbers: \n",ClientInfo->Query("#number")); | ||
160 | for(i=0;i<(int)ClientInfo->Query("#number");i++) { | ||
161 | printf("<b>%s</b>,\n",ClientInfo->Query("number")); | ||
162 | }; | ||
163 | printf("...<BR>"); | ||
164 | endpage(); | ||
165 | }; | ||
166 | |||
167 | |||
168 | |||
169 | // NEW on 0.4.0 | ||
170 | void cookie() { | ||
171 | if(strlen(ClientInfo->Post("user"))) | ||
172 | web_client_setcookie("username",ClientInfo->Post("user"),"+15M",NULL,NULL,0); | ||
173 | startpage("Cookie example"); | ||
174 | printf("<form method='POST'>\n"); | ||
175 | printf("<input type=text name='user' value='%s'>\r\n<BR>",ClientInfo->Cookie("username")); | ||
176 | printf("<input type=submit name='send' value=' GO! '><BR>\r\n"); | ||
177 | printf("</form>\n"); | ||
178 | endpage(); | ||
179 | }; | ||
180 | // | ||
181 | |||
182 | void logfile() { | ||
183 | startpage("logfile"); | ||
184 | printf("<PRE>\n"); | ||
185 | web_client_addfile(server.logfile); | ||
186 | printf("</PRE>\n"); | ||
187 | endpage(); | ||
188 | }; | ||
189 | |||
190 | struct image { | ||
191 | char *data; | ||
192 | size_t size; | ||
193 | } image={NULL,0}; | ||
194 | |||
195 | |||
196 | void imageout() { | ||
197 | if(strlen(ClientInfo->Query("img"))) { | ||
198 | if(image.data!=NULL) { | ||
199 | printf("Content-type: image/jpeg\r\n\r\n"); | ||
200 | fwrite(image.data,image.size,1,stdout); | ||
201 | }; | ||
202 | return; | ||
203 | }; | ||
204 | |||
205 | startpage("Image example"); | ||
206 | printf("<form action='/image' method='POST' enctype='multipart/form-data'>\n"); | ||
207 | printf("<input type=file name=image><BR>\n"); | ||
208 | printf("<input type=submit name='GOO' value='See'>\n"); | ||
209 | printf("</form>\n"); | ||
210 | if(strlen(ClientInfo->MultiPart("image").data)) { | ||
211 | printf("%s<BR><img src='/image?img=%s.jpg'>\n",ClientInfo->MultiPart("image").filename,ClientInfo->MultiPart("image").filename); | ||
212 | free(image.data); | ||
213 | image.data=malloc(ClientInfo->MultiPart("image").size+1); | ||
214 | memcpy(image.data,ClientInfo->MultiPart("image").data,ClientInfo->MultiPart("image").size); | ||
215 | image.size=ClientInfo->MultiPart("image").size; | ||
216 | }else { | ||
217 | free(image.data); | ||
218 | image.data=NULL; | ||
219 | }; | ||
220 | endpage(); | ||
221 | }; | ||
222 | |||
223 | #define GIFSIDE 320 | ||
224 | char gifdata[GIFSIDE*GIFSIDE]; | ||
225 | void outgif() { | ||
226 | float i; | ||
227 | int x,y,xc,yc; | ||
228 | char color; | ||
229 | web_client_gifsetpalette("EGA"); | ||
230 | if(*ClientInfo->Query("img")!=0) { | ||
231 | printf("Content-type: image/gif\r\n\r\n"); | ||
232 | if(!strcmp(ClientInfo->Query("img"),"circle")) { | ||
233 | xc=atoi(ClientInfo->Query("x"))%GIFSIDE; | ||
234 | yc=atoi(ClientInfo->Query("y"))%GIFSIDE; | ||
235 | color=(char)(rand()%15)+1; | ||
236 | for(i=0;i<6.28;i+=(float)0.01) { | ||
237 | x=(int)((GIFSIDE+xc+cos(i)*10))%GIFSIDE; // Johannes E. Schindelin bugfix | ||
238 | y=(int)((GIFSIDE+yc+sin(i)*10))%GIFSIDE; // Johannes E. Schindelin bugfix | ||
239 | gifdata[x+(y*GIFSIDE)]=color; | ||
240 | }; | ||
241 | }; | ||
242 | web_client_gifoutput(gifdata,GIFSIDE,GIFSIDE,0); | ||
243 | }; | ||
244 | startpage("Gif example"); | ||
245 | printf("<center>Generated a circle (click inside the image)<BR>\n"); | ||
246 | printf("Pressed x=%s,y=%s<BR>\n",ClientInfo->Query("x"),ClientInfo->Query("y")); | ||
247 | printf("<form><input type=image border=0 src='/gif?img=circle&x=%s&y=%s'></form></CENTER>\n",ClientInfo->Query("x"),ClientInfo->Query("y")); | ||
248 | endpage(); | ||
249 | }; | ||
250 | |||
251 | |||
252 | void urlauthenticate() { | ||
253 | if(!strlen(ClientInfo->user) || !strlen(ClientInfo->pass) && | ||
254 | strcmp(ClientInfo->user,"username") || strcmp(ClientInfo->pass,"password")) { // you can read things from a auth file | ||
255 | web_client_HTTPdirective("HTTP/1.1 401 Authorization Required\r\n" | ||
256 | "WWW-Authenticate: Basic realm=\"This site info\""); | ||
257 | startpage("Authenticate example"); | ||
258 | printf("<CENTER><font color='FF0000'>Access denied</font></CENTER>\n"); | ||
259 | endpage(); | ||
260 | return; | ||
261 | } | ||
262 | startpage("Authenticate example"); | ||
263 | printf("You entered in your area\n"); | ||
264 | endpage(); | ||
265 | }; | ||
266 | |||
267 | |||
268 | void help() { | ||
269 | // info | ||
270 | // engine // removed (read the source) | ||
271 | // functions help | ||
272 | // functionall examples | ||
273 | // security | ||
274 | // regards | ||
275 | // authors | ||
276 | if(!strlen(ClientInfo->Query("help"))) { | ||
277 | startpage("Table of contents"); | ||
278 | printf("<B>\n"); | ||
279 | printf("<ol>\n"); | ||
280 | printf("<li><a href='/?help=info'>libwebserver info</a></li>\n"); | ||
281 | printf("<ul><li><a href='/?help=info#what'>What's libwebserver for?</a></li></ul>\n"); | ||
282 | printf("<ul><li><a href='/?help=info#who'>Who's supposed to use libwebserver?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck | ||
283 | printf("<ul><li><a href='/?help=info#when'>When am i supposed to use libwebserver?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck | ||
284 | printf("<ul><li><a href='/?help=info#server_scripts'>Is there support for server scripts such as .php .cgi .asp?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck | ||
285 | printf("<li><a href='/?help=functions'>libwebserver functions</a></li>\n"); | ||
286 | printf("<ul><li><a href='/?help=functions#web_server_init'>web_server_init()</a></li></ul>\n"); | ||
287 | printf("<ul><li><a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a></li></ul>\n"); | ||
288 | printf("<ul><li><a href='/?help=functions#web_server_aliasdir'>web_server_aliasdir()</a><small>(new)</small></li></ul>\n"); | ||
289 | printf("<ul><li><a href='/?help=functions#web_server_run'>web_server_run()</a></li></ul>\n"); | ||
290 | printf("<ul><li><a href='/?help=functions#web_server_getconf'>web_server_getconf()</a></li></ul>\n"); | ||
291 | printf("<ul><li><a href='/?help=functions#web_server_useSSLcert'>web_server_useSSLcert()</a></li></ul>\n"); | ||
292 | printf("<ul><li><a href='/?help=functions#web_server_useMIMEfile'>web_server_useMIMEfile()</a><small>(new)</small></li></ul>\n"); | ||
293 | printf("<ul><li><a href='/?help=functions#web_client_addstream'>web_client_addstream() </a><small><small>(obsolet, no longer in use in 0.3.4) use web_client_addfile instead</small></small></li></ul>\n"); | ||
294 | printf("<ul><li><a href='/?help=functions#web_client_addfile'>web_client_addfile()</a></li></ul>\n"); | ||
295 | printf("<ul><li><a href='/?help=functions#web_client_gifoutput'>web_client_gifoutput()</a><small>(changed)</small></li></ul>\n"); | ||
296 | printf("<ul><li><a href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette()</a><small>(new)</small></li></ul>\n"); | ||
297 | printf("<ul><li><a href='/?help=functions#web_client_setcookie'>web_client_setcookie()</a></li></ul>\n"); | ||
298 | printf("<ul><li><a href='/?help=functions#web_client_deletecookie'>web_client_deletecookie()</a></li></ul>\n"); | ||
299 | printf("<ul><li><a href='/?help=functions#web_client_setvar'>web_client_setvar()</a></li></ul>\n"); | ||
300 | printf("<ul><li><a href='/?help=functions#web_client_getvar'>web_client_getvar()</a></li></ul>\n"); | ||
301 | printf("<ul><li><a href='/?help=functions#web_client_delvar'>web_client_delvar()</a></li></ul>\n"); | ||
302 | printf("<ul><li><a href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective()</a></li></ul>\n"); | ||
303 | printf("<ul><li><a href='/?help=functions#web_client_contenttype'>web_client_contenttype()</a><small>(new)</small></li></ul>\n"); | ||
304 | printf("<ul><li><a href='/?help=functions#web_log'>web_log()</a></li></ul>\n"); | ||
305 | printf("<ul><li><a href='/?help=functions#ClientInfo'>ClientInfo</a></li></ul>\n"); | ||
306 | printf("<ul><li><a href='/?help=functions#configfile'>The config file</a></li></ul>\n"); | ||
307 | printf("<li><a href='/?help=examples'>libwebserver examples</a></li>\n"); | ||
308 | printf("<ul><li><a href='/?help=examples#helloworld'>Hello, World!</a></li></ul>\n"); | ||
309 | printf("<ul><li><a href='/?help=examples#logfile'>Show's log file</a></li></ul>\n"); | ||
310 | printf("<ul><li><a href='/?help=examples#imageup'>Image Uploader</a></li></ul>\n"); | ||
311 | printf("<ul><li><a href='/?help=examples#auth'>Authentication</a></li></ul>\n"); | ||
312 | printf("<ul><li><a href='/?help=examples#ssl'>Openssl for (https)</a></li></ul>\n"); | ||
313 | printf("<ul><li><a href='/?help=examples#outgif'>Gif generator</a><small>Changed</small></li></ul>\n"); | ||
314 | printf("<ul><li><a href='/?help=examples#cookie'>Cookies</a></li></ul>\n"); | ||
315 | printf("<ul><li><a href='/?help=examples#checkbox'>checkbox</a></li></ul>\n"); | ||
316 | printf("<ul><li><a href='/?help=examples#confexample'>Config example</a></li></ul>\n"); | ||
317 | printf("<ul><li><a href='/brokenlink'>Broken link</a></li></ul>\n"); | ||
318 | printf("<ul><li><a href='/fs/'>aliasdir</a></li></ul>\n"); | ||
319 | printf("<li><a href='/?help=security'>libwebserver security</a></li>\n"); | ||
320 | printf("<ul><li><a href='/?help=security#safe'>It is safe to use?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck | ||
321 | printf("<ul><li><a href='/?help=security#certificate'>How do I create my own certificate?</a></li></ul>\n"); // Johannes E. Schindelin made | ||
322 | printf("<ul><li><a href='/?help=security#racecondition'>Avoid race condition problems</a></li></ul>\n"); // Johannes E. Schindelin made | ||
323 | |||
324 | printf("<li><a href='/?help=Authors'>Authors</a></li>\n"); | ||
325 | printf("</ol>\n"); | ||
326 | printf("</B>\n"); | ||
327 | endpage(); | ||
328 | return; | ||
329 | }; | ||
330 | |||
331 | startpage(ClientInfo->Query("help")); | ||
332 | if(!strcmp(ClientInfo->Query("help"),"info")) { | ||
333 | fwrite(info,sizeof(info),1,stdout); | ||
334 | //web_client_addfile("help.html/info.html"); | ||
335 | }; | ||
336 | if(!strcmp(ClientInfo->Query("help"),"security")) { | ||
337 | fwrite(security,sizeof(security),1,stdout); | ||
338 | //web_client_addfile("help.html/security.html"); | ||
339 | }; | ||
340 | if(!strcmp(ClientInfo->Query("help"),"functions")) { | ||
341 | fwrite(functions,sizeof(functions),1,stdout); | ||
342 | //web_client_addfile("help.html/functions.html"); | ||
343 | }; | ||
344 | if(!strcmp(ClientInfo->Query("help"),"examples")) { | ||
345 | fwrite(examples,sizeof(examples),1,stdout); | ||
346 | //web_client_addfile("help.html/examples.html"); | ||
347 | }; | ||
348 | if(!strcmp(ClientInfo->Query("help"),"Authors")) { | ||
349 | printf("Luis Figueiredo (<a href='mailto:stdio@netc.pt'>stdio@netc.pt</a>) - Main programmer, designer<BR><BR>\n"); | ||
350 | printf("People who contributed:<BR>\n"); | ||
351 | printf("<UL>Joćo Luis Marques (<a href='mailto:Lamego@PTLink.net'>Lamego@PTLink.net</a>)<BR>\n"); | ||
352 | printf("<UL>minor bug reported (redirectors, stdout)</UL></UL>\n"); | ||
353 | printf("<UL>'oddsock' (<a href='mailto:oddsock@oddsock.org'>oddsock@oddsock.org</a>)<BR>\n"); | ||
354 | printf("<UL>Licensing tip, and minor bug reported (segv in querystring)</UL></UL>\n"); | ||
355 | printf("<UL>Rocco Carbone (<a href='mailto:rocco@tecsiel.it'>rocco@tecsiel.it</a>)<BR>\n"); | ||
356 | printf("<UL>Return code for web_server_run tip</UL></UL>\n"); | ||
357 | printf("<UL>Johannes E. Schindelin (<a href='mailto:Johannes.Schindelin@gmx.de'>Johannes.Schindelin@gmx.de</a>)<BR>\n"); | ||
358 | printf("<UL>Spell checking, Makefile portability, and security 'How do I create my own certificate?'<BR>\n"); | ||
359 | printf("bugfixes, example 'hello world!'</UL></UL>\n"); | ||
360 | printf("<UL>Richard Offer (<a href='mailto:offer@sgi.com'>offer@sgi.com</a>)<BR>\n"); | ||
361 | printf("<UL>checkboxes, (multiple variables) tip</UL></UL>\n"); | ||
362 | printf("<UL>Sven Anders (<a href='mailto:anders@anduras.de'>anders@anduras.de</a>)<BR>\n"); | ||
363 | printf("<UL>Created a new web_client_setcookie()(i made some changes)</UL></UL>\n"); | ||
364 | printf("<UL>Hilobok Andrew (<a href='mailto:han@km.if.ua'>han@km.if.ua</a>)<BR>\n"); | ||
365 | printf("<UL>FreeBSD portability</UL></UL>\n"); | ||
366 | }; | ||
367 | endpage(); | ||
368 | }; | ||
369 | |||
370 | |||
371 | |||
372 | void confexample() { | ||
373 | startpage("confexample"); | ||
374 | printf("<PRE>\n"); | ||
375 | web_client_addfile(server.conffile); | ||
376 | printf("</PRE>\n"); | ||
377 | printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"PORT\")->%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","PORT")); | ||
378 | printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"IP\")->%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","IP")); | ||
379 | printf("ClientInfo->Conf(\"LIBWEBSERVER\",\"PORT\")->%s<BR>\n",ClientInfo->Conf("LIBWEBSERVER","PORT")); | ||
380 | endpage(); | ||
381 | |||
382 | }; | ||
383 | |||
384 | |||
385 | |||
386 | |||
387 | |||
388 | int main() { | ||
389 | |||
390 | #ifdef DEBUG | ||
391 | //FILE *err=freopen("debug.log","w",stderr); | ||
392 | #endif // DEBUG | ||
393 | |||
394 | memset(gifdata,0,GIFSIDE*GIFSIDE); | ||
395 | while(!web_server_init(&server,PORT,"help.cfg",WS_USEEXTCONF|WS_USELEN))PORT++; | ||
396 | web_server_useMIMEfile(&server,"mime.types"); | ||
397 | |||
398 | //web_server_addhandler(&server,"* /",skip,0); | ||
399 | web_server_addhandler(&server,"* /",help,0); | ||
400 | web_server_addhandler(&server,"* /teste",teste,WS_LOCAL); | ||
401 | web_server_addhandler(&server,"* /varteste",varteste,WS_DYNVAR|WS_USELEN); | ||
402 | web_server_addhandler(&server,"* /teste1",teste1,WS_LOCAL); | ||
403 | web_server_addhandler(&server,"* /hello",hello_world,0); | ||
404 | web_server_addhandler(&server,"* /log",logfile,WS_USELEN); // turn off global flag | ||
405 | web_server_addhandler(&server,"* /image",imageout,0); | ||
406 | web_server_addhandler(&server,"* /gif",outgif,0); | ||
407 | web_server_addhandler(&server,"* /auth",urlauthenticate,0); | ||
408 | web_server_addhandler(&server,"* /cookie",cookie,0); | ||
409 | web_server_addhandler(&server,"* /checkbox",checkbox,0); | ||
410 | web_server_addhandler(&server,"* /confexample",confexample,0); | ||
411 | |||
412 | web_server_aliasdir(&server,"fs","/",0); | ||
413 | _tmpnameprefix="lws"; | ||
414 | printf("http://localhost:%d\n",server.port); | ||
415 | //putenv("TEMP=c:\\temp"); | ||
416 | for(;;) { | ||
417 | web_server_run(&server); | ||
418 | }; | ||
419 | |||
420 | |||
421 | }; | ||
diff --git a/contrib/help/help.cfg b/contrib/help/help.cfg deleted file mode 100644 index 6fbb727e..00000000 --- a/contrib/help/help.cfg +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | [LIBWEBSERVER] | ||
2 | LOG=help.log | ||
3 | PORT=81 | ||
4 | USESSL=0 | ||
5 | LOCAL=0 | ||
6 | DYNVAR=0 | ||
7 | |||
8 | |||
9 | [PERSONAL_CONF] | ||
10 | PORT=Portability | ||
11 | MOST=general key guard | ||
12 | IP=127.0.0.1 | ||
13 | |||
diff --git a/contrib/help/info.h b/contrib/help/info.h deleted file mode 100644 index 02a80798..00000000 --- a/contrib/help/info.h +++ /dev/null | |||
@@ -1,87 +0,0 @@ | |||
1 | /* | ||
2 | * by data2header by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #ifndef _INFO_H_ | ||
5 | #define _INFO_H_ | ||
6 | |||
7 | char info[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27" | ||
8 | "\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x49\x6E\x66\x6F\x3C" | ||
9 | "\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42\x52\x3E\x3C\x42" | ||
10 | "\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x61\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63" | ||
11 | "\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68\x61\x74\x27\x73\x20\x6C\x69\x62\x77\x65" | ||
12 | "\x62\x73\x65\x72\x76\x65\x72\x20\x66\x6F\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52" | ||
13 | "\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69\x73\x20\x6C\x69\x62\x20\x69\x73\x20\x69\x6E\x74\x65\x6E\x64\x65\x64" | ||
14 | "\x20\x74\x6F\x20\x61\x64\x64\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E" | ||
15 | "\x61\x6C\x69\x74\x79\x20\x74\x6F\x20\x70\x72\x6F\x67\x72\x61\x6D\x73\x20\x69\x6E\x73\x74\x65\x61\x64\x20" | ||
16 | "\x6F\x66\x20\x75\x73\x69\x6E\x67\x20\x61\x6E\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x77\x65\x62\x73\x65" | ||
17 | "\x72\x76\x65\x72\x2E\x3C\x42\x52\x3E\xA\x9\x54\x77\x6F\x20\x65\x78\x61\x6D\x70\x6C\x65\x73\x20\x66\x6F" | ||
18 | "\x72\x20\x65\x6D\x62\x65\x64\x64\x65\x64\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x73\x20\x74\x68\x61\x74" | ||
19 | "\x20\x69\x20\x6B\x6E\x6F\x77\x20\x6F\x66\x20\x61\x72\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x28\x73\x68\x6F" | ||
20 | "\x75\x74\x63\x61\x73\x74\x20\x28\x69\x20\x67\x75\x65\x73\x73\x29\x2C\x20\x61\x6E\x64\x20\x77\x65\x62\x54" | ||
21 | "\x56\x20\x28\x74\x65\x6C\x65\x74\x65\x78\x74\x20\x61\x73\x20\x61\x20\x77\x65\x62\x70\x61\x67\x65\x20\x28" | ||
22 | "\x66\x72\x6F\x6D\x20\x70\x69\x6E\x6E\x61\x63\x6C\x65\x29\x29\x3B\x20\x61\x6E\x64\x20\x6D\x61\x6E\x79\x20" | ||
23 | "\x6F\x74\x68\x65\x72\x73\x20\x70\x72\x6F\x62\x61\x62\x6C\x79\x20\x64\x6F\x20\x74\x68\x65\x20\x73\x61\x6D" | ||
24 | "\x65\x2E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x6F\x3E" | ||
25 | "\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68" | ||
26 | "\x6F\x27\x73\x20\x73\x75\x70\x70\x6F\x73\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x6C\x69\x62\x77\x65\x62" | ||
27 | "\x73\x65\x72\x76\x65\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69" | ||
28 | "\x73\x20\x69\x73\x20\x6D\x61\x69\x6E\x6C\x79\x20\x64\x65\x76\x65\x6C\x6F\x70\x65\x64\x20\x66\x6F\x72\x20" | ||
29 | "\x64\x65\x76\x65\x6C\x6F\x70\x65\x72\x73\x20\x74\x6F\x20\x6D\x61\x6B\x65\x20\x69\x74\x20\x65\x61\x73\x69" | ||
30 | "\x65\x72\x20\x74\x6F\x20\x77\x72\x69\x74\x65\x20\x61\x20\x77\x65\x62\x20\x69\x6E\x74\x65\x72\x66\x61\x63" | ||
31 | "\x65\x20\x74\x6F\x20\x74\x68\x65\x69\x72\x20\x73\x6F\x66\x74\x77\x61\x72\x65\x2C\x20\x28\x6E\x6F\x74\x65" | ||
32 | "\x20\x61\x20\x77\x65\x62\x62\x72\x6F\x77\x73\x65\x72\x20\x69\x73\x20\x63\x6F\x6D\x6D\x6F\x6E\x6C\x79\x20" | ||
33 | "\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x69\x6E\x20\x6D\x6F\x73\x74\x20\x6F\x70\x65\x72\x61\x74\x69\x6E" | ||
34 | "\x67\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x79\x73\x74\x65\x6D\x73\x29\x20\x73\x6F" | ||
35 | "\x20\x69\x74\x20\x69\x73\x20\x6C\x69\x6B\x65\x20\x61\x20\x70\x6F\x72\x74\x61\x62\x6C\x65\x20\x22\x74\x65" | ||
36 | "\x72\x6D\x69\x6E\x61\x6C\x22\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x62\x65\x20\x61\x63\x63\x65\x73\x73" | ||
37 | "\x65\x64\x20\x66\x72\x6F\x6D\x20\x61\x6E\x79\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x20\x28\x77\x69\x74\x68" | ||
38 | "\x20\x61\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x6F\x66\x20\x63\x6F\x75\x72\x73\x65\x2E\x2E\x2E\x29\x2E\x3C" | ||
39 | "\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x65\x6E\x3E\x3C\x42\x3E" | ||
40 | "\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68\x65\x6E\x20" | ||
41 | "\x61\x6D\x20\x69\x20\x73\x75\x70\x70\x6F\x73\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x6C\x69\x62\x77\x65" | ||
42 | "\x62\x73\x65\x72\x76\x65\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x46\x6F" | ||
43 | "\x72\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20\x69\x6D\x61\x67\x69\x6E\x65\x20\x74\x68\x61\x74\x20\x79\x6F" | ||
44 | "\x75\x20\x61\x72\x65\x20\x64\x65\x76\x65\x6C\x6F\x70\x69\x6E\x67\x20\x61\x20\x64\x61\x65\x6D\x6F\x6E\x20" | ||
45 | "\x61\x6E\x64\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x73\x74\x61\x74\x73\x20\x6F\x72" | ||
46 | "\x20\x72\x65\x2D\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x20\x61\x74\x20\x72\x75\x6E\x2D\x74\x69\x6D\x65\x3B" | ||
47 | "\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x74\x68\x20\x74\x68" | ||
48 | "\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x61\x64\x64\x20\x61\x20\x6C" | ||
49 | "\x69\x73\x74\x65\x6E\x20\x70\x6F\x72\x74\x20\x66\x6F\x72\x20\x72\x75\x6E\x74\x69\x6D\x65\x2C\x20\x61\x6E" | ||
50 | "\x64\x20\x63\x6F\x6E\x6E\x65\x63\x74\x20\x77\x69\x74\x68\x20\x77\x68\x61\x74\x65\x76\x65\x72\x20\x62\x72" | ||
51 | "\x6F\x77\x73\x65\x72\x20\x28\x76\x69\x61\x20\x48\x54\x4D\x4C\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x29" | ||
52 | "\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x74\x68\x6F\x75\x74" | ||
53 | "\x20\x64\x65\x70\x65\x6E\x64\x65\x6E\x63\x69\x65\x73\x20\x6F\x66\x20\x61\x6E\x20\x65\x78\x74\x65\x72\x6E" | ||
54 | "\x61\x6C\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x2E\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20" | ||
55 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x65\x76\x65\x6E\x20\x64\x6F\x20" | ||
56 | "\x61\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x28\x6F\x66\x20\x63\x6F\x75\x72\x73\x65\x29\x2C\x20\x6A" | ||
57 | "\x75\x73\x74\x20\x75\x73\x65\x20\x79\x6F\x75\x72\x20\x69\x6D\x61\x67\x69\x6E\x61\x74\x69\x6F\x6E\x2E\x3C" | ||
58 | "\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x41\x6E\x6F\x74" | ||
59 | "\x68\x65\x72\x20\x71\x75\x69\x74\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20" | ||
60 | "\x61\x20\x73\x6F\x75\x6E\x64\x20\x72\x65\x63\x6F\x72\x64\x65\x72\x20\x28\x75\x73\x69\x6E\x67\x20\x6F\x6E" | ||
61 | "\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x66\x6F\x72\x20\x73" | ||
62 | "\x65\x63\x75\x72\x69\x74\x79\x20\x72\x65\x61\x73\x6F\x6E\x73\x29\x20\x75\x73\x65\x73\x20\x61\x20\x77\x65" | ||
63 | "\x62\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x6F\x20\x63\x6F\x6E\x74\x72\x6F\x6C\xA\x20\x20\x20" | ||
64 | "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2F\x64\x65\x76\x2F\x64\x73\x70\x20\x72\x65" | ||
65 | "\x61\x64\x69\x6E\x67\x2F\x77\x72\x69\x74\x69\x6E\x67\x20\x28\x76\x69\x61\x20\x48\x54\x4D\x4C\x20\x69\x6E" | ||
66 | "\x74\x65\x72\x66\x61\x63\x65\x29\x2E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" | ||
67 | "\x20\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6D\x61\x6E\x79\x20\x6F\x74\x68\x65\x72\x20\x74\x68\x69" | ||
68 | "\x6E\x67\x73\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64\x6F\x20\x2E\x2E\x2E\x3C\x2F\x55\x4C\x3E\xA\xA\x3C" | ||
69 | "\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x73\x65\x72\x76\x65\x72\x5F\x73\x63\x72\x69\x70\x74\x73" | ||
70 | "\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x49" | ||
71 | "\x73\x20\x74\x68\x65\x72\x65\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x66\x6F\x72\x20\x73\x65\x72\x76\x65\x72" | ||
72 | "\x20\x73\x63\x72\x69\x70\x74\x73\x20\x73\x75\x63\x68\x20\x61\x73\x20\x2E\x70\x68\x70\x20\x2E\x63\x67\x69" | ||
73 | "\x20\x2E\x61\x73\x70\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x57\x65\x6C" | ||
74 | "\x6C\x2C\x20\x74\x68\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x6F\x6E\x6C\x79\x20\x70\x72\x6F\x76\x69" | ||
75 | "\x64\x65\x73\x20\x77\x65\x62\x20\x73\x65\x72\x76\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74" | ||
76 | "\x68\x61\x74\x20\x6D\x61\x6B\x65\x20\x61\x20\x73\x65\x72\x76\x65\x72\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2C" | ||
77 | "\x20\x73\x65\x72\x76\x65\x72\x20\x73\x63\x72\x69\x70\x74\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x73\x75\x70" | ||
78 | "\x70\x6F\x72\x74\x65\x64\x20\x69\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x64\x6F\x20\x69" | ||
79 | "\x74\x3A\xA\x20\x20\x20\x20\x20\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64\x65\x76\x65\x6C\x6F\x70\x20\x61" | ||
80 | "\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x74\x79\x70\x65\x20\x22\x2E\x73\x6F\x6D\x65\x74\x68" | ||
81 | "\x69\x6E\x67\x22\x20\x6F\x72\x20\x77\x68\x61\x74\x65\x76\x65\x72\x2C\x20\x74\x68\x69\x73\x20\x70\x61\x63" | ||
82 | "\x6B\x61\x67\x65\x20\x70\x72\x6F\x76\x69\x64\x65\x73\x20\x61\x20\x2E\x63\x67\x69\x20\x68\x61\x6E\x64\x6C" | ||
83 | "\x65\x72\x20\x61\x73\x20\x61\x6E\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20\x28\x75\x73\x65\x20\x61\x74\x20" | ||
84 | "\x79\x6F\x75\x72\x20\x6F\x77\x6E\x20\x72\x69\x73\x6B\x20\x6F\x72\x20\x6D\x61\x6B\x65\x20\x69\x74\x20\x62" | ||
85 | "\x65\x74\x74\x65\x72\x29\x2E\x3C\x2F\x55\x4C\x3E\xA\xA\xA"; | ||
86 | |||
87 | #endif | ||
diff --git a/contrib/help/makeheader.bat b/contrib/help/makeheader.bat deleted file mode 100644 index 5d664ed6..00000000 --- a/contrib/help/makeheader.bat +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | type ..\help.html\info.html |..\tools\data2header.exe info >info.h | ||
2 | type ..\help.html\functions.html |..\tools\data2header.exe functions >functions.h | ||
3 | type ..\help.html\examples.html |..\tools\data2header.exe examples >examples.h | ||
4 | type ..\help.html\security.html |..\tools\data2header.exe security >security.h \ No newline at end of file | ||
diff --git a/contrib/help/mime.types b/contrib/help/mime.types deleted file mode 100644 index 16c8cbd5..00000000 --- a/contrib/help/mime.types +++ /dev/null | |||
@@ -1,469 +0,0 @@ | |||
1 | # This is a comment. I love comments. | ||
2 | |||
3 | # This file controls what Internet media types are sent to the client for | ||
4 | # given file extension(s). Sending the correct media type to the client | ||
5 | # is important so they know how to handle the content of the file. | ||
6 | # Extra types can either be added here or by using an AddType directive | ||
7 | # in your config files. For more information about Internet media types, | ||
8 | # please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type | ||
9 | # registry is at <ftp://ftp.iana.org/in-notes/iana/assignments/media-types/>. | ||
10 | |||
11 | # MIME type Extension | ||
12 | application/EDI-Consent | ||
13 | application/EDI-X12 | ||
14 | application/EDIFACT | ||
15 | application/activemessage | ||
16 | application/andrew-inset ez | ||
17 | application/applefile | ||
18 | application/atomicmail | ||
19 | application/batch-SMTP | ||
20 | application/beep+xml | ||
21 | application/cals-1840 | ||
22 | application/commonground | ||
23 | application/cybercash | ||
24 | application/dca-rft | ||
25 | application/dec-dx | ||
26 | application/dvcs | ||
27 | application/eshop | ||
28 | application/http | ||
29 | application/hyperstudio | ||
30 | application/iges | ||
31 | application/index | ||
32 | application/index.cmd | ||
33 | application/index.obj | ||
34 | application/index.response | ||
35 | application/index.vnd | ||
36 | application/iotp | ||
37 | application/ipp | ||
38 | application/isup | ||
39 | application/font-tdpfr | ||
40 | application/mac-binhex40 hqx | ||
41 | application/mac-compactpro cpt | ||
42 | application/macwriteii | ||
43 | application/marc | ||
44 | application/mathematica | ||
45 | application/mathematica-old | ||
46 | application/msword doc | ||
47 | application/news-message-id | ||
48 | application/news-transmission | ||
49 | application/ocsp-request | ||
50 | application/ocsp-response | ||
51 | application/octet-stream bin dms lha lzh exe class so dll | ||
52 | application/oda oda | ||
53 | application/parityfec | ||
54 | application/pdf pdf | ||
55 | application/pgp-encrypted | ||
56 | application/pgp-keys | ||
57 | application/pgp-signature | ||
58 | application/pkcs10 | ||
59 | application/pkcs7-mime | ||
60 | application/pkcs7-signature | ||
61 | application/pkix-cert | ||
62 | application/pkix-crl | ||
63 | application/pkixcmp | ||
64 | application/postscript ai eps ps | ||
65 | application/prs.alvestrand.titrax-sheet | ||
66 | application/prs.cww | ||
67 | application/prs.nprend | ||
68 | application/qsig | ||
69 | application/remote-printing | ||
70 | application/riscos | ||
71 | application/rtf | ||
72 | application/sdp | ||
73 | application/set-payment | ||
74 | application/set-payment-initiation | ||
75 | application/set-registration | ||
76 | application/set-registration-initiation | ||
77 | application/sgml | ||
78 | application/sgml-open-catalog | ||
79 | application/sieve | ||
80 | application/slate | ||
81 | application/smil smi smil | ||
82 | application/timestamp-query | ||
83 | application/timestamp-reply | ||
84 | application/vemmi | ||
85 | application/vnd.3M.Post-it-Notes | ||
86 | application/vnd.FloGraphIt | ||
87 | application/vnd.accpac.simply.aso | ||
88 | application/vnd.accpac.simply.imp | ||
89 | application/vnd.acucobol | ||
90 | application/vnd.aether.imp | ||
91 | application/vnd.anser-web-certificate-issue-initiation | ||
92 | application/vnd.anser-web-funds-transfer-initiation | ||
93 | application/vnd.audiograph | ||
94 | application/vnd.businessobjects | ||
95 | application/vnd.bmi | ||
96 | application/vnd.canon-cpdl | ||
97 | application/vnd.canon-lips | ||
98 | application/vnd.claymore | ||
99 | application/vnd.commerce-battelle | ||
100 | application/vnd.commonspace | ||
101 | application/vnd.comsocaller | ||
102 | application/vnd.contact.cmsg | ||
103 | application/vnd.cosmocaller | ||
104 | application/vnd.cups-postscript | ||
105 | application/vnd.cups-raster | ||
106 | application/vnd.cups-raw | ||
107 | application/vnd.ctc-posml | ||
108 | application/vnd.cybank | ||
109 | application/vnd.dna | ||
110 | application/vnd.dpgraph | ||
111 | application/vnd.dxr | ||
112 | application/vnd.ecdis-update | ||
113 | application/vnd.ecowin.chart | ||
114 | application/vnd.ecowin.filerequest | ||
115 | application/vnd.ecowin.fileupdate | ||
116 | application/vnd.ecowin.series | ||
117 | application/vnd.ecowin.seriesrequest | ||
118 | application/vnd.ecowin.seriesupdate | ||
119 | application/vnd.enliven | ||
120 | application/vnd.epson.esf | ||
121 | application/vnd.epson.msf | ||
122 | application/vnd.epson.quickanime | ||
123 | application/vnd.epson.salt | ||
124 | application/vnd.epson.ssf | ||
125 | application/vnd.ericsson.quickcall | ||
126 | application/vnd.eudora.data | ||
127 | application/vnd.fdf | ||
128 | application/vnd.ffsns | ||
129 | application/vnd.framemaker | ||
130 | application/vnd.fsc.weblaunch | ||
131 | application/vnd.fujitsu.oasys | ||
132 | application/vnd.fujitsu.oasys2 | ||
133 | application/vnd.fujitsu.oasys3 | ||
134 | application/vnd.fujitsu.oasysgp | ||
135 | application/vnd.fujitsu.oasysprs | ||
136 | application/vnd.fujixerox.ddd | ||
137 | application/vnd.fujixerox.docuworks | ||
138 | application/vnd.fujixerox.docuworks.binder | ||
139 | application/vnd.fut-misnet | ||
140 | application/vnd.grafeq | ||
141 | application/vnd.groove-account | ||
142 | application/vnd.groove-identity-message | ||
143 | application/vnd.groove-injector | ||
144 | application/vnd.groove-tool-message | ||
145 | application/vnd.groove-tool-template | ||
146 | application/vnd.groove-vcard | ||
147 | application/vnd.hhe.lesson-player | ||
148 | application/vnd.hp-HPGL | ||
149 | application/vnd.hp-PCL | ||
150 | application/vnd.hp-PCLXL | ||
151 | application/vnd.hp-hpid | ||
152 | application/vnd.hp-hps | ||
153 | application/vnd.httphone | ||
154 | application/vnd.hzn-3d-crossword | ||
155 | application/vnd.ibm.afplinedata | ||
156 | application/vnd.ibm.MiniPay | ||
157 | application/vnd.ibm.modcap | ||
158 | application/vnd.informix-visionary | ||
159 | application/vnd.intercon.formnet | ||
160 | application/vnd.intertrust.digibox | ||
161 | application/vnd.intertrust.nncp | ||
162 | application/vnd.intu.qbo | ||
163 | application/vnd.intu.qfx | ||
164 | application/vnd.irepository.package+xml | ||
165 | application/vnd.is-xpr | ||
166 | application/vnd.japannet-directory-service | ||
167 | application/vnd.japannet-jpnstore-wakeup | ||
168 | application/vnd.japannet-payment-wakeup | ||
169 | application/vnd.japannet-registration | ||
170 | application/vnd.japannet-registration-wakeup | ||
171 | application/vnd.japannet-setstore-wakeup | ||
172 | application/vnd.japannet-verification | ||
173 | application/vnd.japannet-verification-wakeup | ||
174 | application/vnd.koan | ||
175 | application/vnd.lotus-1-2-3 | ||
176 | application/vnd.lotus-approach | ||
177 | application/vnd.lotus-freelance | ||
178 | application/vnd.lotus-notes | ||
179 | application/vnd.lotus-organizer | ||
180 | application/vnd.lotus-screencam | ||
181 | application/vnd.lotus-wordpro | ||
182 | application/vnd.mcd | ||
183 | application/vnd.mediastation.cdkey | ||
184 | application/vnd.meridian-slingshot | ||
185 | application/vnd.mif mif | ||
186 | application/vnd.minisoft-hp3000-save | ||
187 | application/vnd.mitsubishi.misty-guard.trustweb | ||
188 | application/vnd.mobius.daf | ||
189 | application/vnd.mobius.dis | ||
190 | application/vnd.mobius.msl | ||
191 | application/vnd.mobius.plc | ||
192 | application/vnd.mobius.txf | ||
193 | application/vnd.motorola.flexsuite | ||
194 | application/vnd.motorola.flexsuite.adsi | ||
195 | application/vnd.motorola.flexsuite.fis | ||
196 | application/vnd.motorola.flexsuite.gotap | ||
197 | application/vnd.motorola.flexsuite.kmr | ||
198 | application/vnd.motorola.flexsuite.ttc | ||
199 | application/vnd.motorola.flexsuite.wem | ||
200 | application/vnd.mozilla.xul+xml | ||
201 | application/vnd.ms-artgalry | ||
202 | application/vnd.ms-asf | ||
203 | application/vnd.ms-excel xls | ||
204 | application/vnd.ms-lrm | ||
205 | application/vnd.ms-powerpoint ppt | ||
206 | application/vnd.ms-project | ||
207 | application/vnd.ms-tnef | ||
208 | application/vnd.ms-works | ||
209 | application/vnd.mseq | ||
210 | application/vnd.msign | ||
211 | application/vnd.music-niff | ||
212 | application/vnd.musician | ||
213 | application/vnd.netfpx | ||
214 | application/vnd.noblenet-directory | ||
215 | application/vnd.noblenet-sealer | ||
216 | application/vnd.noblenet-web | ||
217 | application/vnd.novadigm.EDM | ||
218 | application/vnd.novadigm.EDX | ||
219 | application/vnd.novadigm.EXT | ||
220 | application/vnd.osa.netdeploy | ||
221 | application/vnd.palm | ||
222 | application/vnd.pg.format | ||
223 | application/vnd.pg.osasli | ||
224 | application/vnd.powerbuilder6 | ||
225 | application/vnd.powerbuilder6-s | ||
226 | application/vnd.powerbuilder7 | ||
227 | application/vnd.powerbuilder7-s | ||
228 | application/vnd.powerbuilder75 | ||
229 | application/vnd.powerbuilder75-s | ||
230 | application/vnd.previewsystems.box | ||
231 | application/vnd.publishare-delta-tree | ||
232 | application/vnd.pvi.ptid1 | ||
233 | application/vnd.pwg-xhtml-print+xml | ||
234 | application/vnd.rapid | ||
235 | application/vnd.s3sms | ||
236 | application/vnd.seemail | ||
237 | application/vnd.shana.informed.formdata | ||
238 | application/vnd.shana.informed.formtemplate | ||
239 | application/vnd.shana.informed.interchange | ||
240 | application/vnd.shana.informed.package | ||
241 | application/vnd.sss-cod | ||
242 | application/vnd.sss-dtf | ||
243 | application/vnd.sss-ntf | ||
244 | application/vnd.street-stream | ||
245 | application/vnd.svd | ||
246 | application/vnd.swiftview-ics | ||
247 | application/vnd.triscape.mxs | ||
248 | application/vnd.trueapp | ||
249 | application/vnd.truedoc | ||
250 | application/vnd.tve-trigger | ||
251 | application/vnd.ufdl | ||
252 | application/vnd.uplanet.alert | ||
253 | application/vnd.uplanet.alert-wbxml | ||
254 | application/vnd.uplanet.bearer-choice-wbxml | ||
255 | application/vnd.uplanet.bearer-choice | ||
256 | application/vnd.uplanet.cacheop | ||
257 | application/vnd.uplanet.cacheop-wbxml | ||
258 | application/vnd.uplanet.channel | ||
259 | application/vnd.uplanet.channel-wbxml | ||
260 | application/vnd.uplanet.list | ||
261 | application/vnd.uplanet.list-wbxml | ||
262 | application/vnd.uplanet.listcmd | ||
263 | application/vnd.uplanet.listcmd-wbxml | ||
264 | application/vnd.uplanet.signal | ||
265 | application/vnd.vcx | ||
266 | application/vnd.vectorworks | ||
267 | application/vnd.vidsoft.vidconference | ||
268 | application/vnd.visio | ||
269 | application/vnd.vividence.scriptfile | ||
270 | application/vnd.wap.sic | ||
271 | application/vnd.wap.slc | ||
272 | application/vnd.wap.wbxml wbxml | ||
273 | application/vnd.wap.wmlc wmlc | ||
274 | application/vnd.wap.wmlscriptc wmlsc | ||
275 | application/vnd.webturbo | ||
276 | application/vnd.wrq-hp3000-labelled | ||
277 | application/vnd.wt.stf | ||
278 | application/vnd.xara | ||
279 | application/vnd.xfdl | ||
280 | application/vnd.yellowriver-custom-menu | ||
281 | application/whoispp-query | ||
282 | application/whoispp-response | ||
283 | application/wita | ||
284 | application/wordperfect5.1 | ||
285 | application/x-bcpio bcpio | ||
286 | application/x-cdlink vcd | ||
287 | application/x-chess-pgn pgn | ||
288 | application/x-compress | ||
289 | application/x-cpio cpio | ||
290 | application/x-csh csh | ||
291 | application/x-director dcr dir dxr | ||
292 | application/x-dvi dvi | ||
293 | application/x-futuresplash spl | ||
294 | application/x-gtar gtar | ||
295 | application/x-gzip | ||
296 | application/x-hdf hdf | ||
297 | application/x-javascript js | ||
298 | application/x-koan skp skd skt skm | ||
299 | application/x-latex latex | ||
300 | application/x-netcdf nc cdf | ||
301 | application/x-sh sh | ||
302 | application/x-shar shar | ||
303 | application/x-shockwave-flash swf | ||
304 | application/x-stuffit sit | ||
305 | application/x-sv4cpio sv4cpio | ||
306 | application/x-sv4crc sv4crc | ||
307 | application/x-tar tar | ||
308 | application/x-tcl tcl | ||
309 | application/x-tex tex | ||
310 | application/x-texinfo texinfo texi | ||
311 | application/x-troff t tr roff | ||
312 | application/x-troff-man man | ||
313 | application/x-troff-me me | ||
314 | application/x-troff-ms ms | ||
315 | application/x-ustar ustar | ||
316 | application/x-wais-source src | ||
317 | application/x400-bp | ||
318 | application/xml | ||
319 | application/xml-dtd | ||
320 | application/xml-external-parsed-entity | ||
321 | application/zip zip | ||
322 | audio/32kadpcm | ||
323 | audio/basic au snd | ||
324 | audio/g.722.1 | ||
325 | audio/l16 | ||
326 | audio/midi mid midi kar | ||
327 | audio/mp4a-latm | ||
328 | audio/mpa-robust | ||
329 | audio/mpeg mpga mp2 mp3 | ||
330 | audio/parityfec | ||
331 | audio/prs.sid | ||
332 | audio/telephone-event | ||
333 | audio/tone | ||
334 | audio/vnd.cisco.nse | ||
335 | audio/vnd.cns.anp1 | ||
336 | audio/vnd.cns.inf1 | ||
337 | audio/vnd.digital-winds | ||
338 | audio/vnd.everad.plj | ||
339 | audio/vnd.lucent.voice | ||
340 | audio/vnd.nortel.vbk | ||
341 | audio/vnd.nuera.ecelp4800 | ||
342 | audio/vnd.nuera.ecelp7470 | ||
343 | audio/vnd.nuera.ecelp9600 | ||
344 | audio/vnd.octel.sbc | ||
345 | audio/vnd.qcelp | ||
346 | audio/vnd.rhetorex.32kadpcm | ||
347 | audio/vnd.vmx.cvsd | ||
348 | audio/x-aiff aif aiff aifc | ||
349 | audio/x-mpegurl m3u | ||
350 | audio/x-pn-realaudio ram rm | ||
351 | audio/x-pn-realaudio-plugin rpm | ||
352 | audio/x-realaudio ra | ||
353 | audio/x-wav wav | ||
354 | chemical/x-pdb pdb | ||
355 | chemical/x-xyz xyz | ||
356 | image/bmp bmp | ||
357 | image/cgm | ||
358 | image/g3fax | ||
359 | image/gif gif | ||
360 | image/ief ief | ||
361 | image/jpeg jpeg jpg jpe | ||
362 | image/naplps | ||
363 | image/png png | ||
364 | image/prs.btif | ||
365 | image/prs.pti | ||
366 | image/tiff tiff tif | ||
367 | image/vnd.cns.inf2 | ||
368 | image/vnd.dwg | ||
369 | image/vnd.dxf | ||
370 | image/vnd.fastbidsheet | ||
371 | image/vnd.fpx | ||
372 | image/vnd.fst | ||
373 | image/vnd.fujixerox.edmics-mmr | ||
374 | image/vnd.fujixerox.edmics-rlc | ||
375 | image/vnd.mix | ||
376 | image/vnd.net-fpx | ||
377 | image/vnd.svf | ||
378 | image/vnd.wap.wbmp wbmp | ||
379 | image/vnd.xiff | ||
380 | image/x-cmu-raster ras | ||
381 | image/x-portable-anymap pnm | ||
382 | image/x-portable-bitmap pbm | ||
383 | image/x-portable-graymap pgm | ||
384 | image/x-portable-pixmap ppm | ||
385 | image/x-rgb rgb | ||
386 | image/x-xbitmap xbm | ||
387 | image/x-xpixmap xpm | ||
388 | image/x-xwindowdump xwd | ||
389 | message/delivery-status | ||
390 | message/disposition-notification | ||
391 | message/external-body | ||
392 | message/http | ||
393 | message/news | ||
394 | message/partial | ||
395 | message/rfc822 | ||
396 | message/s-http | ||
397 | model/iges igs iges | ||
398 | model/mesh msh mesh silo | ||
399 | model/vnd.dwf | ||
400 | model/vnd.flatland.3dml | ||
401 | model/vnd.gdl | ||
402 | model/vnd.gs-gdl | ||
403 | model/vnd.gtw | ||
404 | model/vnd.mts | ||
405 | model/vnd.vtu | ||
406 | model/vrml wrl vrml | ||
407 | multipart/alternative | ||
408 | multipart/appledouble | ||
409 | multipart/byteranges | ||
410 | multipart/digest | ||
411 | multipart/encrypted | ||
412 | multipart/form-data | ||
413 | multipart/header-set | ||
414 | multipart/mixed | ||
415 | multipart/parallel | ||
416 | multipart/related | ||
417 | multipart/report | ||
418 | multipart/signed | ||
419 | multipart/voice-message | ||
420 | text/calendar | ||
421 | text/css css | ||
422 | text/directory | ||
423 | text/enriched | ||
424 | text/html html htm | ||
425 | text/parityfec | ||
426 | text/plain asc txt | ||
427 | text/prs.lines.tag | ||
428 | text/rfc822-headers | ||
429 | text/richtext rtx | ||
430 | text/rtf rtf | ||
431 | text/sgml sgml sgm | ||
432 | text/tab-separated-values tsv | ||
433 | text/t140 | ||
434 | text/uri-list | ||
435 | text/vnd.DMClientScript | ||
436 | text/vnd.IPTC.NITF | ||
437 | text/vnd.IPTC.NewsML | ||
438 | text/vnd.abc | ||
439 | text/vnd.curl | ||
440 | text/vnd.flatland.3dml | ||
441 | text/vnd.fly | ||
442 | text/vnd.fmi.flexstor | ||
443 | text/vnd.in3d.3dml | ||
444 | text/vnd.in3d.spot | ||
445 | text/vnd.latex-z | ||
446 | text/vnd.motorola.reflex | ||
447 | text/vnd.ms-mediapackage | ||
448 | text/vnd.wap.si | ||
449 | text/vnd.wap.sl | ||
450 | text/vnd.wap.wml wml | ||
451 | text/vnd.wap.wmlscript wmls | ||
452 | text/x-setext etx | ||
453 | text/xml xml xsl | ||
454 | text/xml-external-parsed-entity | ||
455 | video/mp4v-es | ||
456 | video/mpeg mpeg mpg mpe | ||
457 | video/parityfec | ||
458 | video/pointer | ||
459 | video/quicktime qt mov | ||
460 | video/vnd.fvt | ||
461 | video/vnd.motorola.video | ||
462 | video/vnd.motorola.videop | ||
463 | video/vnd.mpegurl mxu | ||
464 | video/vnd.mts | ||
465 | video/vnd.nokia.interleaved-multimedia | ||
466 | video/vnd.vivo | ||
467 | video/x-msvideo avi | ||
468 | video/x-sgi-movie movie | ||
469 | x-conference/x-cooltalk ice | ||
diff --git a/contrib/help/security.h b/contrib/help/security.h deleted file mode 100644 index c9d02967..00000000 --- a/contrib/help/security.h +++ /dev/null | |||
@@ -1,143 +0,0 @@ | |||
1 | /* | ||
2 | * by data2header by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #ifndef _SECURITY_H_ | ||
5 | #define _SECURITY_H_ | ||
6 | |||
7 | char security[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27" | ||
8 | "\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x53\x65\x63\x75\x72" | ||
9 | "\x69\x74\x79\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42" | ||
10 | "\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x61\x74\x3E\x3C\x42\x3E\x3C\x66" | ||
11 | "\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x49\x73\x20\x69\x74\x20\x73" | ||
12 | "\x61\x66\x65\x20\x74\x6F\x20\x75\x73\x65\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E" | ||
13 | "\xA\x3C\x55\x4C\x3E\x57\x65\x6C\x6C\x2C\x20\x49\x20\x63\x61\x6E\x27\x74\x20\x70\x72\x6F\x6D\x69\x73\x65" | ||
14 | "\x20\x74\x68\x61\x74\x20\x69\x74\x27\x73\x20\x61\x20\x73\x65\x63\x75\x72\x65\x20\x73\x6F\x66\x74\x77\x61" | ||
15 | "\x72\x65\x20\x73\x69\x6E\x63\x65\x20\x74\x68\x61\x74\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x79\x20\x64\x65\x70" | ||
16 | "\x65\x6E\x64\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x6F\x66\x74\x77\x61\x72\x65\x2C\x20\xA\x20\x20\x20" | ||
17 | "\x20\x20\x20\x20\x20\x20\x62\x75\x74\x20\x61\x6C\x6C\x20\x69\x20\x63\x61\x6E\x20\x73\x61\x79\x20\x69\x73" | ||
18 | "\x20\x74\x68\x61\x74\x20\x77\x61\x73\x6E\x27\x74\x20\x66\x6F\x75\x6E\x64\x20\x61\x6E\x79\x20\x73\x65\x63" | ||
19 | "\x75\x72\x69\x74\x79\x20\x62\x75\x67\x20\x79\x65\x74\x2C\x20\x74\x68\x69\x73\x20\x77\x61\x73\x20\x64\x65" | ||
20 | "\x76\x65\x6C\x6F\x70\x65\x64\x20\x69\x6E\x74\x65\x6E\x64\x65\x64\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x63" | ||
21 | "\x75\x72\x65\x2C\x20\x20\xA\x9\x9\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x75\x73\x65\x20\x6F\x70\x65\x6E" | ||
22 | "\x73\x73\x6C\x20\x28\x65\x6E\x63\x72\x79\x70\x74\x65\x64\x20\x73\x74\x72\x65\x61\x6D\x73\x29\x20\x74\x6F" | ||
23 | "\x20\x70\x72\x6F\x74\x65\x63\x74\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20" | ||
24 | "\x70\x61\x73\x73\x65\x73\x20\x66\x72\x6F\x6D\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x28\x6C\x69\x62\x29" | ||
25 | "\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\x3C\x2F\x55\x4C\x3E\xA\x9\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D" | ||
26 | "\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72" | ||
27 | "\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x48\x6F\x77\x20\x64\x6F\x20\x49\x20\x63\x72\x65\x61\x74\x65\x20" | ||
28 | "\x6D\x79\x20\x6F\x77\x6E\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E" | ||
29 | "\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E\x59\x6F\x75\x20\x63\x61\x6E\x20\x65\x69\x74\x68\x65" | ||
30 | "\x72\x20\x62\x75\x79\x20\x6F\x6E\x65\x20\x66\x72\x6F\x6D\x20\x6F\x6E\x65\x20\x6F\x66\x20\x74\x68\x65\x20" | ||
31 | "\x62\x69\x67\x20\x76\x65\x6E\x64\x6F\x72\x73\x20\x28\x73\x65\x65\x20\x79\x6F\x75\x72\x20\x62\x72\x6F\x77" | ||
32 | "\x73\x65\x72\x27\x73\x20\x73\x74\x6F\x72\x65\x64\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x73\xA" | ||
33 | "\x9\x66\x6F\x72\x20\x74\x68\x65\x69\x72\x20\x61\x64\x64\x72\x65\x73\x73\x65\x73\x29\x20\x6F\x72\x20\x73" | ||
34 | "\x65\x6C\x66\x2D\x73\x69\x67\x6E\x20\x61\x20\x73\x65\x6C\x66\x2D\x63\x72\x65\x61\x74\x65\x64\x20\x6F\x6E" | ||
35 | "\x65\x2E\x20\x54\x68\x65\x20\x75\x70\x73\x69\x64\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x62\x6F\x75\x67\x68" | ||
36 | "\x74\xA\x9\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x73\x20\x69\x73\x2C\x20\x74\x68\x61\x74\x20\x74" | ||
37 | "\x68\x65\x20\x77\x65\x62\x62\x72\x6F\x77\x73\x65\x72\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x61\x73\x6B\x20" | ||
38 | "\x69\x66\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x77\x61\x6E\x74\x73\x20\x74\x6F\xA\x9\x61\x63\x63\x65" | ||
39 | "\x70\x74\x20\x74\x68\x61\x74\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x2C\x20\x62\x75\x74\x20\x69" | ||
40 | "\x6E\x73\x74\x65\x61\x64\x20\x63\x68\x65\x63\x6B\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x63\x65\x72" | ||
41 | "\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x61\x75\x74\x68\x6F\x72\x69\x74\x79\xA\x9\x79\x6F\x75\x20" | ||
42 | "\x62\x6F\x75\x67\x68\x74\x20\x79\x6F\x75\x72\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x72" | ||
43 | "\x6F\x6D\x2E\x3C\x62\x72\x3E\xA\x9\x54\x68\x65\x20\x64\x6F\x77\x6E\x73\x69\x64\x65\x20\x69\x73\x20\x74" | ||
44 | "\x68\x61\x74\x20\x69\x74\x20\x63\x6F\x73\x74\x73\x20\x71\x75\x69\x74\x65\x20\x61\x20\x6C\x6F\x74\x20\x6F" | ||
45 | "\x66\x20\x6D\x6F\x6E\x65\x79\x2E\x3C\x62\x72\x3E\xA\x9\x54\x6F\x20\x63\x72\x65\x61\x74\x65\x20\x79\x6F" | ||
46 | "\x75\x72\x20\x6F\x77\x6E\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x75\x73\x65\x20\x6F\x70\x65" | ||
47 | "\x6E\x73\x73\x6C\x20\x6C\x69\x6B\x65\x20\x74\x68\x61\x74\x3A\xA\x9\x3C\x75\x6C\x3E\x3C\x6C\x69\x3E\x63" | ||
48 | "\x72\x65\x61\x74\x65\x20\x61\x20\x6B\x65\x79\x20\x61\x6E\x64\x20\x72\x65\x71\x75\x65\x73\x74\x3A\x3C\x62" | ||
49 | "\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x72\x65\x71\x20\x2D" | ||
50 | "\x6E\x65\x77\x20\x3E\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x63\x73\x72\x3C\x2F\x62\x3E\x3C\x2F\x70\x72" | ||
51 | "\x65\x3E\x3C\x62\x72\x3E\xA\x9\x9\x41\x73\x20\x22\x43\x6F\x6D\x6D\x6F\x6E\x20\x4E\x61\x6D\x65\x22\x20" | ||
52 | "\x79\x6F\x75\x20\x68\x61\x76\x65\x20\x74\x6F\x20\x74\x79\x70\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6E\x61" | ||
53 | "\x6D\x65\x20\x70\x61\x72\x74\x20\x6F\x66\xA\x9\x9\x79\x6F\x75\x72\x20\x55\x52\x4C\x2C\x20\x69\x2E\x65" | ||
54 | "\x2E\x20\x69\x66\x20\x79\x6F\x75\x72\x20\x77\x65\x62\x20\x73\x69\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65" | ||
55 | "\xA\x9\x9\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76" | ||
56 | "\x65\x72\x2E\x72\x75\x6C\x65\x73\x3A\x34\x34\x33\x2F\x22\x20\x74\x68\x65\x20\x43\x6F\x6D\x6D\x6F\x6E\x20" | ||
57 | "\x4E\x61\x6D\x65\x20\x69\x73\xA\x9\x9\x22\x77\x77\x77\x2E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65" | ||
58 | "\x72\x2E\x72\x75\x6C\x65\x73\x22\x2E\xA\x9\x3C\x6C\x69\x3E\x20\x72\x65\x6D\x6F\x76\x65\x20\x74\x68\x65" | ||
59 | "\x20\x70\x61\x73\x73\x70\x68\x72\x61\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x6B\x65\x79\x3A\x3C" | ||
60 | "\x62\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x72\x73\x61\x20" | ||
61 | "\x2D\x69\x6E\x20\x70\x72\x69\x76\x6B\x65\x79\x2E\x70\x65\x6D\x20\x2D\x6F\x75\x74\x20\x66\x6F\x6F\x2D\x63" | ||
62 | "\x65\x72\x74\x2E\x6B\x65\x79\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72\x3E\xA\x9\x3C\x6C\x69" | ||
63 | "\x3E\x63\x6F\x6E\x76\x65\x72\x74\x20\x72\x65\x71\x75\x65\x73\x74\x20\x69\x6E\x74\x6F\x20\x61\x20\x73\x69" | ||
64 | "\x67\x6E\x65\x64\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3A\x3C\x62\x72\x3E\xA\x9\x9\x3C\x70" | ||
65 | "\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x78\x35\x30\x39\x20\x2D\x69\x6E\x20\x66\x6F\x6F" | ||
66 | "\x2D\x63\x65\x72\x74\x2E\x63\x73\x72\x20\x2D\x6F\x75\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x63\x65" | ||
67 | "\x72\x74\x20\x2D\x72\x65\x71\x20\x2D\x73\x69\x67\x6E\x6B\x65\x79\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E" | ||
68 | "\x6B\x65\x79\x20\x2D\x64\x61\x79\x73\x20\x33\x35\x36\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72" | ||
69 | "\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x72\x65\x61\x74\x65\x20\x2E\x70\x65\x6D\x20\x66\x69\x6C\x65\x3A\x3C\x62" | ||
70 | "\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x63\x61\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E" | ||
71 | "\x63\x65\x72\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x6B\x65\x79\x20\x3E\x66\x6F\x6F\x2D\x63\x65\x72" | ||
72 | "\x74\x2E\x70\x65\x6D\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72\x3E\xA\x9\x3C\x2F\x75\x6C\x3E" | ||
73 | "\xA\x3C\x2F\x75\x6C\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x74\x69\x70\x73\x3E\x3C\x42\x3E\x3C" | ||
74 | "\x66\x6F\x6E\x74\x20\x73\x69\x7A\x65\x3D\x34\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x37\x37\x30\x30\x37\x37\x27" | ||
75 | "\x3E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x74\x69\x70\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C" | ||
76 | "\x42\x52\x3E\x3C\x48\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x72\x61\x63\x65\x63\x6F\x6E\x64\x69" | ||
77 | "\x74\x69\x6F\x6E\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37" | ||
78 | "\x37\x27\x3E\x41\x76\x6F\x69\x64\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x70\x72" | ||
79 | "\x6F\x62\x6C\x65\x6D\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E" | ||
80 | "\xA\x9\x3C\x42\x3E\x20\x57\x68\x61\x74\x20\x69\x73\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69\x74\x69" | ||
81 | "\x6F\x6E\x3F\x3C\x2F\x42\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x41\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69" | ||
82 | "\x74\x69\x6F\x6E\x20\x6F\x63\x63\x75\x72\x73\x20\x77\x68\x65\x6E\x20\x74\x77\x6F\x20\x6F\x72\x20\x6D\x6F" | ||
83 | "\x72\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6F\x63\x63\x75\x72\x20\x69\x6E\x20\x61\x6E\x20" | ||
84 | "\xA\x20\x20\x20\x20\x20\x20\x75\x6E\x64\x65\x66\x69\x6E\x65\x64\x20\x6D\x61\x6E\x6E\x65\x72\x20\x28\x4D" | ||
85 | "\x63\x4B\x75\x73\x69\x63\x6B\x20\x65\x74\x20\x61\x6C\x2E\x20\x31\x39\x39\x36\x29\x2E\x20\x53\x70\x65\x63" | ||
86 | "\x69\x66\x69\x63\x61\x6C\x6C\x79\x20\x69\x6E\x20\x66\x69\x6C\x65\x20\xA\x20\x20\x20\x20\x20\x20\x73\x79" | ||
87 | "\x73\x74\x65\x6D\x20\x72\x61\x63\x65\x73\x20\x74\x68\x65\x20\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x61\x74" | ||
88 | "\x74\x65\x6D\x70\x74\x73\x20\x74\x6F\x20\x63\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65" | ||
89 | "\x20\x6F\x66\x20\x74\x68\x65\x20\xA\x20\x20\x20\x20\x20\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D" | ||
90 | "\x20\x69\x6E\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x74\x77\x6F\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65" | ||
91 | "\x6D\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x70\x61\x72\x74\x20\xA" | ||
92 | "\x20\x20\x20\x20\x20\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x67\x72\x61\x6D\x2E\x3C\x2F\x55\x4C\x3E" | ||
93 | "\x3C\x42\x52\x3E\x20\xA\x9\x3C\x42\x3E\x20\x48\x6F\x77\x20\x74\x68\x65\x20\x6C\x69\x62\x20\x64\x65\x74" | ||
94 | "\x65\x72\x6D\x69\x6E\x65\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65" | ||
95 | "\x3F\x3C\x2F\x42\x3E\xA\x9\x3C\x55\x4C\x3E\x20\xA\x9\x3C\x6C\x69\x3E\x67\x65\x6E\x65\x72\x61\x74\x65" | ||
96 | "\x20\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65\x20\x28\x6E\x6F\x74\x65\x3A\x20\x6B\x65\x65\x70\x20\x67\x65\x6E" | ||
97 | "\x65\x72\x61\x74\x69\x6E\x67\x20\x75\x6E\x74\x69\x6C\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x65" | ||
98 | "\x78\x69\x73\x74\x73\x29\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x68\x65\x63\x6B" | ||
99 | "\x20\x69\x66\x20\x66\x69\x6C\x65\x20\x65\x78\x69\x73\x74\x73\x3C\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61" | ||
100 | "\x6C\x6C\x3E\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65" | ||
101 | "\x20\x66\x69\x6C\x65\x20\x6E\x6F\x77\x2C\x20\x69\x66\x20\x68\x65\x20\x6B\x6E\x6F\x77\x73\x20\x74\x68\x65" | ||
102 | "\x20\x72\x69\x67\x68\x74\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52" | ||
103 | "\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x68\x65\x63\x6B\x20\x69\x66\x20\x73\x79\x6D\x6C\x69" | ||
104 | "\x6E\x6B\x20\x65\x78\x69\x73\x74\x73\x3C\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61\x6C\x6C\x3E\x61\x74\x74" | ||
105 | "\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x20\x73\x79\x6D\x6C\x69" | ||
106 | "\x6E\x6B\x20\x6E\x6F\x77\x2C\x20\x69\x66\x20\x68\x65\x20\x6B\x6E\x6F\x77\x73\x20\x74\x68\x65\x20\x72\x69" | ||
107 | "\x67\x68\x74\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\x3C\x2F" | ||
108 | "\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61" | ||
109 | "\x6E\x64\x20\x72\x65\x64\x69\x72\x65\x63\x74\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x6F\x20\x69\x74\x20\x3C" | ||
110 | "\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61\x6C\x6C\x3E\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20" | ||
111 | "\x6F\x70\x65\x6E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61\x6E\x64\x20\x77\x72\x69\x74\x65\x20\x74\x6F" | ||
112 | "\x20\x69\x74\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E" | ||
113 | "\x70\x6C\x61\x63\x65\x73\x20\x61\x20\x6C\x6F\x63\x6B\x20\x69\x6E\x74\x6F\x20\x66\x69\x6C\x65\x20\x28\x6E" | ||
114 | "\x6F\x74\x65\x3A\x20\x6E\x6F\x74\x20\x69\x6E\x20\x77\x69\x6E\x39\x38\x29\x3C\x42\x52\x3E\x20\x3C\x2F\x6C" | ||
115 | "\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x75\x73\x65\x72\x73\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x2C\x20" | ||
116 | "\x77\x72\x69\x74\x65\x2C\x20\x66\x6C\x75\x73\x68\x2C\x20\x72\x65\x61\x64\x3C\x42\x52\x3E\x3C\x2F\x6C\x69" | ||
117 | "\x3E\xA\x9\x3C\x6C\x69\x3E\x75\x6E\x6C\x69\x6E\x6B\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65" | ||
118 | "\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x4F\x53\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x2F\x55" | ||
119 | "\x4C\x3E\x3C\x42\x52\x3E\xA\x9\xA\x9\xA\x9\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x75" | ||
120 | "\x73\x65\x73\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x73\x20\x74\x6F" | ||
121 | "\x20\x68\x6F\x6C\x64\x20\x61\x6E\x64\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x64\x61\x74\x61\x20\x62\x65\x66" | ||
122 | "\x6F\x72\x65\x20\x73\x65\x6E\x64\x20\x69\x74\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\x2C\x20\x69\x74\x20" | ||
123 | "\x75\x73\x65\x73\x20\x74\x68\x65\x20\x61\x6D\x62\x69\x65\x6E\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73" | ||
124 | "\x20\x74\x6F\x20\xA\x9\x64\x65\x74\x65\x72\x6D\x69\x6E\x65\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20" | ||
125 | "\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x62\x79\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6F\x72\x64" | ||
126 | "\x65\x72\x20\x22\x24\x54\x45\x4D\x50\x2C\x24\x54\x4D\x50\x2C\x24\x54\x4D\x50\x44\x49\x52\x20\x61\x6E\x64" | ||
127 | "\x20\x74\x68\x65\x20\x73\x74\x64\x69\x6F\x2E\x68\x20\x50\x5F\x74\x6D\x70\x64\x69\x72\x22\x2C\x20\x6C\x69" | ||
128 | "\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x68\x61\x76\x65\x20\x73\x65\x76\x65\x72\x61\x6C\x20\x63\x68" | ||
129 | "\x65\x63\x6B\x73\xA\x9\x61\x6E\x64\x20\x69\x74\x20\x6C\x6F\x63\x6B\x73\x20\x66\x69\x6C\x65\x20\x66\x6F" | ||
130 | "\x72\x20\x61\x76\x6F\x69\x64\x20\x61\x74\x74\x61\x63\x6B\x65\x72\x73\x20\x66\x72\x6F\x6D\x20\x6D\x65\x73" | ||
131 | "\x73\x69\x6E\x67\x20\x77\x69\x74\x68\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x73\x2C" | ||
132 | "\x20\x6D\x65\x61\x6E\x77\x68\x69\x6C\x65\x20\x69\x73\x20\x73\x61\x66\x65\x6C\x79\x20\x74\x6F\x20\x63\x68" | ||
133 | "\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x74\x65\x6D\x70\x64\x69\x72\x20\x28\x73\x65\x74\x74\x69\x6E\x67\x20" | ||
134 | "\x74\x68\x65\x20\x61\x6D\x62\x69\x65\x6E\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x29\xA\x9\x74\x6F\x20" | ||
135 | "\x61\x6E\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x74\x68\x61\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x77" | ||
136 | "\x72\x69\x74\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x65\x76\x65\x72\x79\x6F\x6E\x65\x20\x61\x6E\x64\x20\x77" | ||
137 | "\x72\x69\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x6C\x69\x62\x20\x28\x73\x65\x74\x65\x6E\x76\x28\x22\x54\x45" | ||
138 | "\x4D\x50\x22\x2C\x22\x2F\x73\x61\x66\x65\x64\x69\x72\x22\x29\x3B\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64" | ||
139 | "\x6F\x20\x69\x74\x20\x62\x65\x66\x6F\x72\x65\x20\x74\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72" | ||
140 | "\x5F\x72\x75\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\xA\xA\x9\xA\xA\x3C\x2F\x55\x4C\x3E\xA\xA\xA" | ||
141 | "\xA"; | ||
142 | |||
143 | #endif | ||
diff --git a/contrib/tools/checkpid b/contrib/tools/checkpid deleted file mode 100644 index d5d4835c..00000000 --- a/contrib/tools/checkpid +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | |||
2 | echo "checking pid $1"; | ||
3 | |||
4 | while true; do echo -e "\33[2J\33[0;0H";cat /proc/$1/status ;done | ||
diff --git a/contrib/tools/data2header.c b/contrib/tools/data2header.c deleted file mode 100644 index 885a5a7b..00000000 --- a/contrib/tools/data2header.c +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | /* | ||
2 | * by Luis Figueiredo (stdio@netc.pt) | ||
3 | */ | ||
4 | #include <stdio.h> | ||
5 | #include <fcntl.h> | ||
6 | #include <stdlib.h> | ||
7 | #include <string.h> | ||
8 | #ifdef WIN32 | ||
9 | #include <io.h> | ||
10 | #endif | ||
11 | |||
12 | |||
13 | |||
14 | int main(int argc, char *argv[]) { // Johannes E. Schindelin | ||
15 | unsigned char ch; | ||
16 | char *vn; | ||
17 | unsigned int i=0; | ||
18 | if(argc<2) { | ||
19 | fprintf(stderr,"Need a name for VAR\n"); | ||
20 | exit(1); // Johannes E. Schindelin | ||
21 | }; | ||
22 | vn=malloc(strlen(argv[1])+1); | ||
23 | for(i=0;i<strlen(argv[1]);i++)vn[i]=toupper(argv[1][i]); | ||
24 | vn[i]='\0'; | ||
25 | printf("/*\n * by data2header by Luis Figueiredo (stdio@netc.pt)\n */\n"); | ||
26 | printf("#ifndef _%s_H_\n",vn); | ||
27 | printf("#define _%s_H_\n\n",vn); | ||
28 | free(vn); | ||
29 | i=0; | ||
30 | printf("char %s[]=\"",argv[1]); | ||
31 | while(read(0,&ch,1)) { | ||
32 | i++;if(i>25){i=0;printf("\"\n\"");}; | ||
33 | printf("\\x%X",ch); | ||
34 | }; | ||
35 | printf("\";\n\n"); | ||
36 | printf("#endif\n"); | ||
37 | return 0; // Johannes E. Schindelin | ||
38 | }; | ||
39 | |||
40 | |||
41 | |||
diff --git a/contrib/tools/httptest.pl b/contrib/tools/httptest.pl deleted file mode 100644 index 23360d28..00000000 --- a/contrib/tools/httptest.pl +++ /dev/null | |||
@@ -1,195 +0,0 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | |||
4 | |||
5 | use Socket; | ||
6 | sub newdata { | ||
7 | #my $self = shift; | ||
8 | my ($nfound,$timeout,$rin,$rout)=(0,0.2,""); | ||
9 | vec($rin,fileno(shift()),1)=1; | ||
10 | $nfound=select($rout=$rin,undef,undef,$timeout); | ||
11 | return $nfound; | ||
12 | }; | ||
13 | |||
14 | |||
15 | my $host = shift; | ||
16 | my $port = shift || 80; | ||
17 | print "\n\tWARNING: If program exit before msg that's mean that the server crashed or something happened to server\n\n"; | ||
18 | $saddr=sockaddr_in($port,inet_aton($host)); | ||
19 | $SIG{PIPE}=NULL; | ||
20 | |||
21 | |||
22 | socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died"; | ||
23 | print "a normal connection\n"; | ||
24 | <STDIN>; | ||
25 | connect(SOCK,$saddr) or exit; | ||
26 | print "Connected\n"; | ||
27 | $header="GET / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
28 | syswrite(SOCK,"$header"); | ||
29 | $keep=1; | ||
30 | while($keep) { | ||
31 | if(newdata(SOCK)) { | ||
32 | if(($data=<SOCK>)) { | ||
33 | print "Read: ".$data; | ||
34 | }else { | ||
35 | $keep=0; | ||
36 | }; | ||
37 | }; | ||
38 | }; | ||
39 | close(SOCK); | ||
40 | |||
41 | |||
42 | |||
43 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
44 | print "Trying to send (nothing) press (enter) to continue\n"; | ||
45 | <STDIN>; | ||
46 | connect(SOCK,$saddr) or exit; | ||
47 | print "Connected\n"; | ||
48 | $header=""; | ||
49 | syswrite(SOCK,"$header"); | ||
50 | $keep=1; | ||
51 | while($keep) { | ||
52 | if(newdata(SOCK)) { | ||
53 | if(($data=<SOCK>)) { | ||
54 | print "Read: ".$data; | ||
55 | }else { | ||
56 | $keep=0; | ||
57 | }; | ||
58 | }; | ||
59 | }; | ||
60 | close(SOCK); | ||
61 | |||
62 | |||
63 | socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died"; | ||
64 | print "a post (foo)value with 10000000 bytes press (enter) to continue\n"; | ||
65 | <STDIN>; | ||
66 | connect(SOCK,$saddr) or exit; | ||
67 | print "Connected\n"; | ||
68 | $header="POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\ndev=".("a"x1000000)."&teste=1\r\n\r\n"; #big values | ||
69 | syswrite(SOCK,"$header"); | ||
70 | $keep=1; | ||
71 | while($keep) { | ||
72 | if(newdata(SOCK)) { | ||
73 | if(($data=<SOCK>)) { | ||
74 | print "Read: ".$data; | ||
75 | }else { | ||
76 | $keep=0; | ||
77 | }; | ||
78 | }; | ||
79 | }; | ||
80 | close(SOCK); | ||
81 | |||
82 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
83 | print "Trying to send a big data for ClientInfo\n"; | ||
84 | <STDIN>; | ||
85 | connect(SOCK,$saddr) or exit; | ||
86 | print "Connected\n"; | ||
87 | $header="GET / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: ".("a"x1000000)."\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
88 | syswrite(SOCK,"$header"); | ||
89 | $keep=1; | ||
90 | while($keep) { | ||
91 | if(newdata(SOCK)) { | ||
92 | if(($data=<SOCK>)) { | ||
93 | print "Read: ".$data; | ||
94 | }else { | ||
95 | $keep=0; | ||
96 | }; | ||
97 | }; | ||
98 | }; | ||
99 | close(SOCK); | ||
100 | |||
101 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
102 | print "Change method by a big name\n"; | ||
103 | <STDIN>; | ||
104 | connect(SOCK,$saddr) or exit; | ||
105 | print "Connected\n"; | ||
106 | $header=("a"x1000000)." / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
107 | syswrite(SOCK,"$header"); | ||
108 | $keep=1; | ||
109 | while($keep) { | ||
110 | if(newdata(SOCK)) { | ||
111 | if(($data=<SOCK>)) { | ||
112 | print "Read: ".$data; | ||
113 | }else { | ||
114 | $keep=0; | ||
115 | }; | ||
116 | }; | ||
117 | }; | ||
118 | close(SOCK); | ||
119 | |||
120 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
121 | print "big query value\n"; | ||
122 | <STDIN>; | ||
123 | connect(SOCK,$saddr) or exit; | ||
124 | print "Connected\n"; | ||
125 | $header="GET /?teste=".("a"x1000000)." / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
126 | syswrite(SOCK,"$header"); | ||
127 | $keep=1; | ||
128 | while($keep) { | ||
129 | if(newdata(SOCK)) { | ||
130 | if(($data=<SOCK>)) { | ||
131 | print "Read: ".$data; | ||
132 | }else { | ||
133 | $keep=0; | ||
134 | }; | ||
135 | }; | ||
136 | }; | ||
137 | close(SOCK); | ||
138 | |||
139 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
140 | print "requestname filled w 0's\n"; | ||
141 | <STDIN>; | ||
142 | connect(SOCK,$saddr) or exit; | ||
143 | print "Connected\n"; | ||
144 | $header="GET /".("\0"x1000000)." HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
145 | syswrite(SOCK,"$header"); | ||
146 | $keep=1; | ||
147 | while($keep) { | ||
148 | if(newdata(SOCK)) { | ||
149 | if(($data=<SOCK>)) { | ||
150 | print "Read: ".$data; | ||
151 | }else { | ||
152 | $keep=0; | ||
153 | }; | ||
154 | }; | ||
155 | }; | ||
156 | close(SOCK); | ||
157 | |||
158 | socket(SOCK,AF_INET,SOCK_STREAM,6) or exit; | ||
159 | print "query filled w 0's\n"; | ||
160 | <STDIN>; | ||
161 | connect(SOCK,$saddr) or exit; | ||
162 | print "Connected\n"; | ||
163 | $header="GET /teste?teste=".("\0"x1000000)." HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; | ||
164 | syswrite(SOCK,"$header"); | ||
165 | $keep=1; | ||
166 | while($keep) { | ||
167 | if(newdata(SOCK)) { | ||
168 | if(($data=<SOCK>)) { | ||
169 | print "Read: ".$data; | ||
170 | }else { | ||
171 | $keep=0; | ||
172 | }; | ||
173 | }; | ||
174 | }; | ||
175 | close(SOCK); | ||
176 | |||
177 | socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died"; | ||
178 | print "a post (foo)value with 10000000 bytes press (enter) to continue\n"; | ||
179 | <STDIN>; | ||
180 | connect(SOCK,$saddr) or exit; | ||
181 | print "Connected\n"; | ||
182 | $header="POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\ndev=teste".("\0"x1000000)."&teste=1\r\n\r\n"; #big values | ||
183 | syswrite(SOCK,"$header"); | ||
184 | $keep=1; | ||
185 | while($keep) { | ||
186 | if(newdata(SOCK)) { | ||
187 | if(($data=<SOCK>)) { | ||
188 | print "Read: ".$data; | ||
189 | }else { | ||
190 | $keep=0; | ||
191 | }; | ||
192 | }; | ||
193 | }; | ||
194 | |||
195 | print "--------- END --------\n" | ||
diff --git a/contrib/tools/myvc_install.bat b/contrib/tools/myvc_install.bat deleted file mode 100644 index 9de7ccb3..00000000 --- a/contrib/tools/myvc_install.bat +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | copy ..\bin\libwebserver.lib "C:\Programas\Microsoft Visual Studio\VC98\Lib\libwebserver.lib" | ||
diff --git a/contrib/tools/win2unix.sh b/contrib/tools/win2unix.sh deleted file mode 100755 index 177bd27b..00000000 --- a/contrib/tools/win2unix.sh +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | #!/bin/sh | ||
2 | for i in `find . -name "*" -xtype f`; do echo "Messing with $i";cat $i |tr -d \\r >.1; mv .1 $i ; done | ||
diff --git a/doc/examples.html b/doc/examples.html deleted file mode 100644 index 5cd8bbfe..00000000 --- a/doc/examples.html +++ /dev/null | |||
@@ -1,445 +0,0 @@ | |||
1 | <center><H3><font color='007700'>libwebserver examples</font></H3></center><BR><BR> | ||
2 | |||
3 | <!-- Johannes E. Schindelin --> | ||
4 | <center><A name=helloworld><B><font color='000077'><a href=/hello><H3>Hello World</H3></a></font></B></center> | ||
5 | <small> <B>used functions:</B><BR> | ||
6 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
7 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
8 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
9 | </small><BR> | ||
10 | |||
11 | This example starts the server with one handler for all requests pointing to hello_world() | ||
12 | that prints the content-type with the end of the header "\r\n\r\n" and one simple printf with Hello world<BR><BR> | ||
13 | |||
14 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
15 | <CODE><PRE> | ||
16 | #include "web_server.h" | ||
17 | #include <stdio.h> | ||
18 | |||
19 | |||
20 | void hello_world() { | ||
21 | printf("Content-type: text/plain\r\n\r\n"); | ||
22 | printf("Hello, World!\r\n"); | ||
23 | } | ||
24 | |||
25 | int main(int argc,char** argv) { | ||
26 | struct web_server server; // server handler | ||
27 | if(!web_server_init(&server,80,"help.log",0)) { // initialize and start the server at port 80, logging to help.log | ||
28 | fprintf(stderr,"can't open listen socket\n"); | ||
29 | return 1; | ||
30 | }; | ||
31 | |||
32 | web_server_addhandler(&server,"* *",hello_world,0); // add handler for all requests | ||
33 | while(1) { | ||
34 | web_server_run(&server); // run server | ||
35 | }; | ||
36 | } | ||
37 | </PRE></CODE> | ||
38 | </TD></TR></TABLE> | ||
39 | <HR><BR> | ||
40 | |||
41 | <center><A name=logfile><B><font color='000077'><a href='/log'><H3>logfile</H3></a></font></B></center> | ||
42 | <small> <B>used functions:</B><BR> | ||
43 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
44 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
45 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
46 | <a href='/?help=functions#web_client_addfile'>web_client_addfile</a><BR> | ||
47 | </small><BR> | ||
48 | |||
49 | This example uses the function <a href='/?help=functions#web_client_addfile'>web_client_addfile</a> to send a file to client | ||
50 | <BR><BR> | ||
51 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
52 | <CODE><PRE> | ||
53 | #include "web_server.h" | ||
54 | #include <stdio.h> | ||
55 | |||
56 | void logfile() { | ||
57 | printf("Content-type: text/plain\r\n\r\n"); | ||
58 | web_client_addfile(server.logfile); // add help.log file to output | ||
59 | printf("End of log\n"); | ||
60 | }; | ||
61 | |||
62 | |||
63 | main() { | ||
64 | struct web_server server; // server handler | ||
65 | if(!web_server_init(&server,82,"help.log",0)) { // initializate | ||
66 | fprintf(stderr,"can't open listen socket\n"); | ||
67 | }; | ||
68 | |||
69 | web_server_addhandler(&server,"* /log",logfile,0); // add handler for http://host/log requests | ||
70 | while(1) { | ||
71 | web_server_run(&server); // run server | ||
72 | }; | ||
73 | }; | ||
74 | </PRE></CODE> | ||
75 | </TD></TR></TABLE> | ||
76 | <HR><BR> | ||
77 | |||
78 | |||
79 | <center><A name=imageup><B><font color='000077'><a href='/image'><H3>Image Uploader</H3></a></font></B></center> | ||
80 | <small> <B>used functions:</B><BR> | ||
81 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
82 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
83 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
84 | <a href='/?help=functions#clientinfo'>ClientInfo</a><BR> | ||
85 | </small><BR> | ||
86 | |||
87 | |||
88 | This example uses the struct <a href='/?help=functions#clientinfo'>ClientInfo</a> for fetching the input from the client | ||
89 | using the Query("img") to send the image <BR> | ||
90 | and multipart for fetching the uploaded file<BR> | ||
91 | |||
92 | |||
93 | <BR><BR> | ||
94 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
95 | <CODE><PRE> | ||
96 | #include "web_server.h" | ||
97 | |||
98 | #include <stdlib.h> | ||
99 | |||
100 | struct image { | ||
101 | char *data; | ||
102 | size_t size; | ||
103 | } image={NULL,0}; | ||
104 | |||
105 | void imageout() { | ||
106 | if(strlen(ClientInfo->Query("img"))) { | ||
107 | if(image.data!=NULL) { | ||
108 | printf("Content-type: image/jpeg\r\n\r\n"); | ||
109 | fwrite(image.data,image.size,1,stdout); | ||
110 | }; | ||
111 | return; | ||
112 | }; | ||
113 | printf("Content-type: text/html\r\n\r\n"); | ||
114 | printf("<HTML>\n"); | ||
115 | printf("<BODY bgcolor='EFEFEF'>\n"); | ||
116 | printf("<form action='/' enctype='multipart/form-data'>\n"); | ||
117 | printf("<input type=file name=image><BR>\n"); | ||
118 | printf("</form>\n"); | ||
119 | if(strlen(ClientInfo->MultiPart("image").data)) { | ||
120 | printf("%s<BR><img src='/?img=%s.jpg'>\n",ClientInfo->MultiPart("image").filename,ClientInfo->MultiPart("image").filename); | ||
121 | free(image.data); | ||
122 | image.data=malloc(ClientInfo->MultiPart("image").size+1); | ||
123 | memcpy(image.data,ClientInfo->MultiPart("image").data,ClientInfo->MultiPart("image").size); | ||
124 | image.size=ClientInfo->MultiPart("image").size; | ||
125 | }else { | ||
126 | free(image.data); | ||
127 | image.data=NULL; | ||
128 | }; | ||
129 | printf("</BODY>\n"); | ||
130 | printf("</HTML>\n"); | ||
131 | }; | ||
132 | |||
133 | |||
134 | |||
135 | main() { | ||
136 | struct web_server server; | ||
137 | if(!web_server_init(&server,80,"teste.log",0)) { | ||
138 | fprintf(stderr,"can't open listen socket\n"); | ||
139 | }; | ||
140 | web_server_addhandler(&server,"* /",imageout,0); | ||
141 | while(1) { | ||
142 | web_server_run(&server); | ||
143 | }; | ||
144 | }; | ||
145 | </PRE></CODE> | ||
146 | </TD></TR></TABLE> | ||
147 | <HR><BR> | ||
148 | |||
149 | |||
150 | <center><A name=auth><B><font color='000077'><a href='/auth'><H3>Authentication</H3></a> </font></B></center> | ||
151 | <small> <B>used functions:</B><BR> | ||
152 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
153 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
154 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
155 | <a href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective</a><BR> | ||
156 | </small><BR> | ||
157 | |||
158 | Here we're using the <a href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective</a> to set up the server response | ||
159 | |||
160 | <BR><BR> | ||
161 | user: "username", pass: "password" | ||
162 | <BR> | ||
163 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
164 | <CODE><PRE> | ||
165 | #include "web_server.h" | ||
166 | #include <stdio.h> | ||
167 | #include <string.h> | ||
168 | |||
169 | |||
170 | void urlauthenticate() { | ||
171 | if(!strlen(ClientInfo->user) || !strlen(ClientInfo->pass) && | ||
172 | strcmp(ClientInfo->user,"username") || strcmp(ClientInfo->pass,"password")) { // you can read things from a auth file | ||
173 | web_client_HTTPdirective("HTTP/1.1 401 Authorization Required"); | ||
174 | printf("WWW-Authenticate: Basic realm=\"This site info\"\r\n"); | ||
175 | printf("Content-type: text/html\r\n\r\n"); | ||
176 | printf("<BODY>\n"); | ||
177 | printf("<font color='FF0000'>Access denied</font>\n"); | ||
178 | printf("</BODY>\n"); | ||
179 | return; | ||
180 | } | ||
181 | printf("Content-type: text/html\r\n\r\n"); | ||
182 | printf("<BODY bgcolor='EFEFEF'>\n"); | ||
183 | printf("You entered in your area\n"); | ||
184 | printf("</BODY></HTML>\n"); | ||
185 | }; | ||
186 | |||
187 | |||
188 | main() { | ||
189 | struct web_server server; // server handler | ||
190 | if(!web_server_init(&server,83,"help.log",0)) { // initialize | ||
191 | fprintf(stderr,"can't open listen socket\n"); | ||
192 | }; | ||
193 | |||
194 | web_server_addhandler(&server,"* /auth",urlauthenticate,0); | ||
195 | while(1) { | ||
196 | web_server_run(&server); // run server | ||
197 | }; | ||
198 | }; | ||
199 | </PRE></CODE> | ||
200 | </TD></TR></TABLE> | ||
201 | <HR><BR> | ||
202 | |||
203 | |||
204 | <CENTER><A name=ssl><B><font color='000077'><H3>openssl for (https)</H3></font></B></CENTER> | ||
205 | <small> <B>used functions:</B><BR> | ||
206 | <a href='/?help=functions#web_server_HTTPdirective'>web_server_useSSLcert</a><BR> | ||
207 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
208 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
209 | </small><BR> | ||
210 | |||
211 | Here we setup a server and we use the <a href='/?help=functions#web_server_useSSLcert'>web_server_useSSLcert</a> to use specific certificate file | ||
212 | and we start the server with the flag WS_USESSL for secure connections (libwebserver compiled w/ openssl)<BR><BR> | ||
213 | |||
214 | See also the packetmounter example in the example directory. | ||
215 | <BR> | ||
216 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
217 | <CODE><PRE> | ||
218 | |||
219 | |||
220 | #include "web_server.h" | ||
221 | |||
222 | int main() | ||
223 | struct web_server serverssl; | ||
224 | web_server_useSSLcert(&serverssl,"foo-cert.pem"); // Certificate file | ||
225 | if(!web_server_init(&serverssl,443,"help.log",WS_USESSL)) { | ||
226 | fprintf(stderr,"Cannot open port\n"); | ||
227 | }; | ||
228 | while(1) { | ||
229 | web_server_run(&serverssl); | ||
230 | }; | ||
231 | }; | ||
232 | </PRE></CODE> | ||
233 | </TD></TR></TABLE> | ||
234 | All the rest is the same as without SSL. | ||
235 | <HR><BR> | ||
236 | |||
237 | |||
238 | <center><A name=outgif><B><font color='000077'><a href='/gif'><H3>Gif generator</H3></a></font></B></center> | ||
239 | <small> <B>used functions;</B><BR> | ||
240 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
241 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
242 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
243 | <a href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette</a><BR> | ||
244 | <a href='/?help=functions#web_client_gifoutput'>web_client_gifoutput</a><BR> | ||
245 | <a href='/?help=functions#clientinfo'>ClientInfo</a><BR> | ||
246 | </small><BR> | ||
247 | |||
248 | This example draws an circle at x,y requested by client, and outputs with function <a href='/?help=functions#web_client_gifoutput'>web_client_gifoutput</a> | ||
249 | |||
250 | |||
251 | <BR><BR> | ||
252 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
253 | <CODE><PRE> | ||
254 | #include "web_server.h" | ||
255 | #include <stdio.h> | ||
256 | #include <math.h> | ||
257 | |||
258 | |||
259 | #define GIFSIDE 320 | ||
260 | char gifdata[GIFSIDE*GIFSIDE]; | ||
261 | void outgif() { | ||
262 | float i; | ||
263 | int x,y,xc,yc; | ||
264 | int color; | ||
265 | web_client_gifsetpalette("EGA"); | ||
266 | if(*ClientInfo->Query("img")!=0) { | ||
267 | printf("Content-type: image/gif\r\n\r\n"); | ||
268 | if(!strcmp(ClientInfo->Query("img"),"circle")) { | ||
269 | xc=atoi(ClientInfo->Query("x"))%GIFSIDE; | ||
270 | yc=atoi(ClientInfo->Query("y"))%GIFSIDE; | ||
271 | color=(rand()%15)+1; | ||
272 | for(i=0;i<6.28;i+=0.01) { | ||
273 | x=(int)(GIFSIDE+(xc+cos(i)*10))%GIFSIDE; | ||
274 | y=(int)(GIFSIDE+(yc+sin(i)*10))%GIFSIDE; | ||
275 | gifdata[x+(y*GIFSIDE)]=color; | ||
276 | }; | ||
277 | }; | ||
278 | web_client_gifoutput(gifdata,GIFSIDE,GIFSIDE); | ||
279 | }; | ||
280 | printf("<center>Generated a circle (click inside the image)<BR>\n"); | ||
281 | printf("Pressed x=%s,y=%s<BR>\n",ClientInfo->Query("x"),ClientInfo->Query("y")); | ||
282 | printf("<form><input type=image border=0 src='/gif?img=circle&x=%s&y=%s'></form></CENTER>\n",ClientInfo->Query("x"),ClientInfo->Query("y")); | ||
283 | }; | ||
284 | |||
285 | |||
286 | main() { | ||
287 | struct web_server server; // server handler | ||
288 | memset(gifdata,0,GIFSIDE*GIFSIDE); | ||
289 | if(!web_server_init(&server,83,"help.log",0)) { // initialize | ||
290 | fprintf(stderr,"can't open listen socket\n"); | ||
291 | }; | ||
292 | |||
293 | web_server_addhandler(&server,"* /gif",outgif,0); | ||
294 | while(1) { | ||
295 | web_server_run(&server); // run server | ||
296 | }; | ||
297 | }; | ||
298 | </PRE></CODE> | ||
299 | </TD></TR></TABLE> | ||
300 | <HR><BR> | ||
301 | |||
302 | |||
303 | |||
304 | <CENTER><A name=cookie><B><font color='000077'><a href=/cookie><H3>Cookies</H3></a></font></B></CENTER> | ||
305 | <small> <B>used functions;</B><BR> | ||
306 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
307 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
308 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
309 | <a href='/?help=functions#clientinfo'>ClientInfo</a><BR> | ||
310 | <a href='/?help=functions#web_client_setcookie'>web_client_setcookie</a><BR> | ||
311 | </small><BR> | ||
312 | |||
313 | This example fetchs an client input and set's an cookie for 15 minutes "+15M" using function <a href='/?help=functions#web_client_setcookie'>web_client_setcookie</a> | ||
314 | |||
315 | <BR><BR> | ||
316 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
317 | <CODE><PRE> | ||
318 | #include "web_server.h" | ||
319 | #include <stdio.h> | ||
320 | |||
321 | |||
322 | void cookie() { | ||
323 | if(strlen(ClientInfo->Post("user"))) | ||
324 | web_client_setcookie("username",ClientInfo->Post("user"),"+15M"); | ||
325 | printf("Content-type: text/html\r\n\r\n"); | ||
326 | printf("<form method='POST'>\r\n"); | ||
327 | printf("<input type='text' name='user' value='%s'>\r\n<BR>",ClientInfo->Cookie("username")); | ||
328 | printf("<input type='submit' name='send' value=' GO! '>\r\n<BR>"); | ||
329 | printf("</form>\r\n"); | ||
330 | } | ||
331 | |||
332 | int main(int argc,char** argv) { | ||
333 | struct web_server server; // server handler | ||
334 | if(!web_server_init(&server,80,"help.log",0)) { // initialize | ||
335 | fprintf(stderr,"can't open listen socket\n"); | ||
336 | return 1; | ||
337 | }; | ||
338 | |||
339 | web_server_addhandler(&server,"* /*",cookie,0); // add handler for all requests | ||
340 | while(1) { | ||
341 | web_server_run(&server); // run server | ||
342 | }; | ||
343 | } | ||
344 | |||
345 | </PRE></CODE> | ||
346 | </TD></TR></TABLE> | ||
347 | <HR><BR> | ||
348 | |||
349 | <center><A name=checkbox><B><font color='000077'><a href=/checkbox><H3>Checkbox</H3></a></font></B></center> | ||
350 | <small> <B>used functions;</B><BR> | ||
351 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
352 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
353 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
354 | <a href='/?help=functions#clientinfo'>ClientInfo</a><BR> | ||
355 | </small><BR> | ||
356 | |||
357 | This example uses a especific case from <a href='/?help=functions#clientinfo'>ClientInfo</a> query and post, using the '#' as prefix of varname returning the number of occurences | ||
358 | |||
359 | |||
360 | <BR><BR> | ||
361 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
362 | <CODE><PRE> | ||
363 | |||
364 | #include "web_server.h" | ||
365 | #include <stdio.h> | ||
366 | |||
367 | |||
368 | void checkbox() { | ||
369 | int i=0; | ||
370 | char *txt[]={"one","two","three","four","five"}; | ||
371 | printf("Content-type: text/html\r\n\r\n"); | ||
372 | printf("<form method='QUERY'>\r\n"); | ||
373 | |||
374 | for(i=0;i<5;i++) { | ||
375 | printf("<input type='checkbox' name='number' value='%s'>\r\n<BR>",txt[i]); | ||
376 | }; | ||
377 | printf("<input type='submit' name='send' value=' SEND '>\r\n<BR>"); | ||
378 | printf("</form>\r\n"); | ||
379 | |||
380 | printf("You have choosen <font color='FF0000'>%d</font> numbers: \r\n",ClientInfo->Query("#number")); | ||
381 | for(i=0;i<ClientInfo->Query("#number");i++) { | ||
382 | printf("<b>%s</b>,\r\n\r\n",ClientInfo->Query("number")); | ||
383 | }; | ||
384 | printf("...<BR>\r\n\r\n"); | ||
385 | |||
386 | } | ||
387 | int main(int argc,char** argv) { | ||
388 | struct web_server server; // server handler | ||
389 | if(!web_server_init(&server,80,"help.log",0)) { // initialize | ||
390 | fprintf(stderr,"can't open listen socket\n"); | ||
391 | return 1; | ||
392 | }; | ||
393 | |||
394 | web_server_addhandler(&server,"* /*",checkbox,0); // add handler for all requests | ||
395 | while(1) { | ||
396 | web_server_run(&server); // run server | ||
397 | }; | ||
398 | } | ||
399 | |||
400 | </PRE></CODE> | ||
401 | </TD></TR></TABLE> | ||
402 | <HR><BR> | ||
403 | |||
404 | <center><A name=confexample><B><font color='000077'><a href=/confexample><H3>Config example</H3></a></font></B></center> | ||
405 | <small> <B>used functions;</B><BR> | ||
406 | <a href='/?help=functions#web_server_init'>web_server_init</a><BR> | ||
407 | <a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR> | ||
408 | <a href='/?help=functions#web_server_run'>web_server_run</a><BR> | ||
409 | <a href='/?help=functions#web_client_addfile'>web_client_addfile</a><BR> | ||
410 | <a href='/?help=functions#clientinfo'>ClientInfo</a><BR> | ||
411 | </small><BR> | ||
412 | |||
413 | |||
414 | <BR><BR> | ||
415 | <TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD> | ||
416 | <CODE><PRE> | ||
417 | #include "web_server.h" | ||
418 | #include <stdio.h> | ||
419 | |||
420 | |||
421 | void confexample() { | ||
422 | printf("Content-type: text/html\r\n\r\n"); | ||
423 | printf("<PRE>"); | ||
424 | web_client_addfile(server.conffile); // add help.cfg file to output | ||
425 | printf("</PRE>"); | ||
426 | printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"PORT\")=%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","PORT")); | ||
427 | printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"IP\")=%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","IP")); | ||
428 | printf("ClientInfo->Conf(\"LIBWEBSERVER\",\"PORT\")=%s<BR>\n",ClientInfo->Conf("LIBWEBSERVER","PORT")); | ||
429 | |||
430 | } | ||
431 | |||
432 | int main(int argc,char** argv) { | ||
433 | struct web_server server; // server handler | ||
434 | if(!web_server_init(&server,80,"help.cfg",WS_USEEXTCONF)) { // initialize | ||
435 | fprintf(stderr,"can't open listen socket\n"); | ||
436 | return 1; | ||
437 | }; | ||
438 | |||
439 | web_server_addhandler(&server,"* *",confexample,0); // add handler for all requests | ||
440 | while(1) { | ||
441 | web_server_run(&server); // run server | ||
442 | }; | ||
443 | } | ||
444 | </PRE></CODE> | ||
445 | </TD></TR></TABLE> \ No newline at end of file | ||
diff --git a/doc/examples/SoundRecorder/include/debug.h b/doc/examples/SoundRecorder/include/debug.h deleted file mode 100644 index 4863d578..00000000 --- a/doc/examples/SoundRecorder/include/debug.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * | ||
4 | * date: Sat Mar 30 14:16:05 GMT 2002 | ||
5 | * | ||
6 | * DEBUG macros | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef _DEBUG_H_ | ||
11 | #define _DEBUG_H_ | ||
12 | |||
13 | #ifdef HAVE_CONFIG_H | ||
14 | #include "config.h" | ||
15 | #endif | ||
16 | |||
17 | #ifdef DEBUG | ||
18 | #define IFDEBUG(x) x | ||
19 | #else | ||
20 | #define IFDEBUG(x) | ||
21 | #endif | ||
22 | |||
23 | |||
24 | #endif | ||
diff --git a/doc/examples/SoundRecorder/include/soundbuffers.h b/doc/examples/SoundRecorder/include/soundbuffers.h deleted file mode 100644 index 6624b21b..00000000 --- a/doc/examples/SoundRecorder/include/soundbuffers.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: sound_buffers.h | ||
4 | * | ||
5 | * description: Holds sound data structures and functions | ||
6 | * | ||
7 | * date: 13:14,29-14-2002 | ||
8 | */ | ||
9 | |||
10 | #ifndef _SOUND_BUFFERS_H_ | ||
11 | #define _SOUND_BUFFERS_H_ | ||
12 | |||
13 | #include <stdio.h> | ||
14 | #include <fcntl.h> | ||
15 | #include <stdlib.h> | ||
16 | #include <string.h> | ||
17 | |||
18 | struct sound_buf { | ||
19 | char *id; | ||
20 | unsigned char *data; | ||
21 | unsigned int data_i; | ||
22 | unsigned int play_i; | ||
23 | unsigned int startloop,endloop; | ||
24 | unsigned char volume; | ||
25 | unsigned char channels; | ||
26 | int mode; | ||
27 | struct sound_buf *next; | ||
28 | }; | ||
29 | |||
30 | |||
31 | struct sound_buf *sbuf_init(); | ||
32 | struct sound_buf *sbuf_add(struct sound_buf *list,char *id); | ||
33 | struct sound_buf *sbuf_select(struct sound_buf *list,char *id); | ||
34 | int sbuf_delete(struct sound_buf *list,char *id); | ||
35 | |||
36 | |||
37 | |||
38 | |||
39 | #endif | ||
diff --git a/doc/examples/SoundRecorder/include/soundcard.h b/doc/examples/SoundRecorder/include/soundcard.h deleted file mode 100644 index 272cf904..00000000 --- a/doc/examples/SoundRecorder/include/soundcard.h +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: soundcard.h | ||
4 | * | ||
5 | * description: handlers soundcard setup | ||
6 | * | ||
7 | * date: 17:00,13-00-2002 | ||
8 | */ | ||
9 | |||
10 | #ifndef _SOUNDCARD_H_ | ||
11 | #define _SOUNDCARD_H_ | ||
12 | |||
13 | #include <fcntl.h> | ||
14 | #include <sys/soundcard.h> | ||
15 | #include <stdio.h> | ||
16 | #include <sys/ioctl.h> | ||
17 | |||
18 | #include "debug.h" | ||
19 | |||
20 | struct soundcard_setup { | ||
21 | int rate; | ||
22 | char channels; | ||
23 | int fmt; | ||
24 | }; | ||
25 | |||
26 | int soundcard_init(const char *, struct soundcard_setup *); | ||
27 | |||
28 | |||
29 | |||
30 | |||
31 | #endif | ||
diff --git a/doc/examples/SoundRecorder/include/soundmixer.h b/doc/examples/SoundRecorder/include/soundmixer.h deleted file mode 100644 index f071a4e0..00000000 --- a/doc/examples/SoundRecorder/include/soundmixer.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: soundmixer.h | ||
4 | * | ||
5 | * description: Sound mixer using (soundbuffers.c) | ||
6 | * | ||
7 | * date: 17:13,13-13-2002 | ||
8 | */ | ||
9 | |||
10 | #ifndef _SOUNDMIXER_H_ | ||
11 | #define _SOUNDMIXER_H_ | ||
12 | |||
13 | #include <stdio.h> | ||
14 | #include <unistd.h> | ||
15 | |||
16 | |||
17 | #include "soundbuffers.h" | ||
18 | |||
19 | #define _SDMAX 44100 // quarter second *2 *2 | ||
20 | |||
21 | void sound_process(int soundfd,struct sound_buf *list); | ||
22 | |||
23 | #endif | ||
diff --git a/doc/examples/SoundRecorder/src/main.c b/doc/examples/SoundRecorder/src/main.c deleted file mode 100644 index f1967da6..00000000 --- a/doc/examples/SoundRecorder/src/main.c +++ /dev/null | |||
@@ -1,296 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: main.c | ||
4 | * | ||
5 | * description: Programa main | ||
6 | * | ||
7 | * date: 16:47,13-47-2002 | ||
8 | */ | ||
9 | |||
10 | |||
11 | #include "soundcard.h" | ||
12 | #include "soundbuffers.h" | ||
13 | #include "soundmixer.h" | ||
14 | #include "web_server.h" | ||
15 | #include <signal.h> | ||
16 | |||
17 | #define ADJUST_VOLUME(s, v) (s = (s*v)/128) | ||
18 | |||
19 | int PORT=80; | ||
20 | struct sound_buf *SoundBuf; | ||
21 | |||
22 | void outgif() { | ||
23 | char *nam; | ||
24 | struct sound_buf *sbuf=NULL; | ||
25 | char gif[640*40+1]; | ||
26 | int x=0,y=0; | ||
27 | int i,h=20; | ||
28 | short d; | ||
29 | nam=malloc(strlen(ClientInfo->request)-3); | ||
30 | memcpy(nam,ClientInfo->request+1,strlen(ClientInfo->request)-4); | ||
31 | nam[strlen(ClientInfo->request)-5]=0; | ||
32 | sbuf=sbuf_select(SoundBuf,nam); | ||
33 | if(sbuf!=NULL) { | ||
34 | if(sbuf->data_i>_SDMAX) { | ||
35 | if(gif!=NULL) { | ||
36 | memset(gif,0,640*40); | ||
37 | for(i=0;i<1280;i++) { | ||
38 | x=i/2; | ||
39 | //y=(*((unsigned short *)sbuf->data+((i*4)%640))%20)+10; | ||
40 | d=((sbuf->data[((i*((sbuf->data_i-1280)/2560))*2)+1]<<8)|sbuf->data[((i*((sbuf->data_i-1280)/2560))*2)]); | ||
41 | y=d/(32767/20)+20; | ||
42 | //fprintf(stderr,"y=%d\n",y); | ||
43 | //gif[x+y*640]=10; | ||
44 | if(h>y) { | ||
45 | for(h=20;h>y;h--) gif[x+h*640]=10; | ||
46 | } else { | ||
47 | for(h=20;h<=y;h++) gif[x+h*640]=10; | ||
48 | }; | ||
49 | |||
50 | }; | ||
51 | printf("Cache-control: no-cache\r\n"); | ||
52 | printf("Content-type: image/gif\r\n\r\n"); | ||
53 | web_client_gifoutput(gif,640,40,0); | ||
54 | }; | ||
55 | }; | ||
56 | }; | ||
57 | free(nam); | ||
58 | return; | ||
59 | }; | ||
60 | void dlbuf() { | ||
61 | char *nam; | ||
62 | struct sound_buf *sbuf=NULL; | ||
63 | nam=malloc(strlen(ClientInfo->request)-3); | ||
64 | memcpy(nam,ClientInfo->request+1,strlen(ClientInfo->request)-4); | ||
65 | nam[strlen(ClientInfo->request)-5]=0; | ||
66 | sbuf=sbuf_select(SoundBuf,nam); | ||
67 | printf("Content-type: x-form/application\r\n\r\n"); | ||
68 | if(sbuf!=NULL) { | ||
69 | fwrite(sbuf->data,sbuf->data_i,1,stdout); | ||
70 | }; | ||
71 | |||
72 | }; | ||
73 | |||
74 | void index_html() { | ||
75 | struct sound_buf *sbuf=NULL; | ||
76 | char *id; | ||
77 | char *tmp; | ||
78 | int i; | ||
79 | unsigned char *soundout=NULL; | ||
80 | short src1,src2; | ||
81 | int dst_sample; | ||
82 | const int max_audioval =((1<<(16-1))-1); | ||
83 | const int min_audioval =-(1<<(16-1)); | ||
84 | int bigger=0; | ||
85 | |||
86 | printf("Cache-control: no-cache\r\n"); | ||
87 | printf("Content-type: text/html\r\n\r\n"); | ||
88 | printf("<HTML>\n"); | ||
89 | printf("<BODY>\n"); | ||
90 | printf("<center>Sound Recorder (webgui)</center>\n"); | ||
91 | if(*ClientInfo->Post("sbufnew")!=0) { | ||
92 | if(*ClientInfo->Post("sbufname")!=0) { | ||
93 | if(!sbuf_select(SoundBuf,ClientInfo->Post("sbufname"))) { | ||
94 | sbuf=sbuf_add(SoundBuf,ClientInfo->Post("sbufname")); | ||
95 | if(ClientInfo->MultiPart("sbufdata").size>0) { | ||
96 | sbuf->data=malloc(ClientInfo->MultiPart("sbufdata").size); | ||
97 | memcpy(sbuf->data,ClientInfo->MultiPart("sbufdata").data,ClientInfo->MultiPart("sbufdata").size); | ||
98 | sbuf->data_i=ClientInfo->MultiPart("sbufdata").size; | ||
99 | }; | ||
100 | } else { | ||
101 | printf("<FONT color='FF0000'>Sound buffer exists</font>\n"); | ||
102 | }; | ||
103 | |||
104 | }else { | ||
105 | printf("<FONT color='FF0000'>Sound buffer name is empty</font>\n"); | ||
106 | }; | ||
107 | }; | ||
108 | if(*ClientInfo->Post("sbufvol")!=0) { | ||
109 | sbuf=SoundBuf->next; | ||
110 | while(sbuf!=NULL) { | ||
111 | tmp=malloc(strlen(sbuf->id)+5); | ||
112 | snprintf(tmp,strlen(sbuf->id)+5,"%s.vol",sbuf->id); | ||
113 | sbuf->volume=atoi(ClientInfo->Post(tmp))%129; | ||
114 | free(tmp); | ||
115 | sbuf=sbuf->next; | ||
116 | } | ||
117 | }; | ||
118 | if(*ClientInfo->Post("sbufch")!=0) { | ||
119 | sbuf=SoundBuf->next; | ||
120 | while(sbuf!=NULL) { | ||
121 | tmp=malloc(strlen(sbuf->id)+4); | ||
122 | snprintf(tmp,strlen(sbuf->id)+4,"%s.ch",sbuf->id); | ||
123 | sbuf->channels=atoi(ClientInfo->Post(tmp))%3; | ||
124 | free(tmp); | ||
125 | sbuf=sbuf->next; | ||
126 | } | ||
127 | }; | ||
128 | |||
129 | printf("<form method='POST' enctype='multipart/form-data'>\n"); | ||
130 | |||
131 | printf("Sound Buffer:<BR>\n"); | ||
132 | printf("Name:<input type=text name='sbufname' size=5 maxlength=10><BR>\n"); | ||
133 | printf("Data:<input type=file name='sbufdata'><BR>\n"); | ||
134 | printf("<input type=submit name='sbufnew' value=' New '><BR>\n"); | ||
135 | |||
136 | printf("<table width=100%% cellpadding=2 cellspacing=0 bgcolor='AAAAAA'>\n"); | ||
137 | printf("<TR><TD colspan=7 align=center><font face='Helvetica' size=6 color='FFFFFF'> Sound Buffers </font></TD></TR>\n"); | ||
138 | sbuf=SoundBuf->next; | ||
139 | i=0; | ||
140 | while(sbuf!=NULL) { | ||
141 | if(*ClientInfo->Post("sbufprocess")!=0) { | ||
142 | if(atoi(ClientInfo->Post(sbuf->id))==5) { | ||
143 | sbuf->mode=0; | ||
144 | sbuf->play_i=0; | ||
145 | if(sbuf->data_i>bigger) { | ||
146 | bigger=sbuf->data_i; | ||
147 | soundout=realloc(soundout,bigger); | ||
148 | }; | ||
149 | for(i=0;i<sbuf->data_i;i+=4) { | ||
150 | // LEFT | ||
151 | src1=((sbuf->data[i+1]<<8) | sbuf->data[i]); | ||
152 | ADJUST_VOLUME(src1,sbuf->volume); | ||
153 | src2=((soundout[i+1]<<8) | soundout[i]); | ||
154 | dst_sample=src1+src2; | ||
155 | if ( dst_sample > max_audioval ) { | ||
156 | dst_sample = max_audioval; | ||
157 | } else if ( dst_sample < min_audioval ) { | ||
158 | dst_sample = min_audioval; | ||
159 | } | ||
160 | soundout[i]=dst_sample &0xFF; | ||
161 | dst_sample>>=8; | ||
162 | soundout[i+1]=dst_sample & 0xFF; | ||
163 | // RIGHT | ||
164 | src1=((sbuf->data[i+1+2]<<8) | sbuf->data[i+2]); | ||
165 | ADJUST_VOLUME(src1,sbuf->volume); | ||
166 | if(sbuf->channels==2) { | ||
167 | src2=((soundout[i+1+2]<<8) | soundout[i+2]); // join left to right | ||
168 | } else { | ||
169 | src2=((soundout[i+1]<<8) | soundout[i]); // separate | ||
170 | }; | ||
171 | dst_sample=src1+src2; | ||
172 | if ( dst_sample > max_audioval ) { | ||
173 | dst_sample = max_audioval; | ||
174 | } else if ( dst_sample < min_audioval ) { | ||
175 | dst_sample = min_audioval; | ||
176 | } | ||
177 | soundout[i+2]=dst_sample &0xFF; | ||
178 | dst_sample>>=8; | ||
179 | soundout[i+2+1]=dst_sample & 0xFF; | ||
180 | }; | ||
181 | |||
182 | } else { | ||
183 | sbuf->mode=atoi(ClientInfo->Post(sbuf->id)); | ||
184 | tmp=malloc(strlen(sbuf->id)+5); | ||
185 | snprintf(tmp,strlen(sbuf->id)+5,"%s.vol",sbuf->id); | ||
186 | sbuf->volume=atoi(ClientInfo->Post(tmp))%129; | ||
187 | free(tmp); | ||
188 | sbuf->play_i=0; | ||
189 | }; | ||
190 | }; | ||
191 | if(sbuf->mode!=4) { | ||
192 | printf("<TR><TD bgcolor='EFEFEF'><font face='Verdana'>%s</font></TD><TD>",sbuf->id); | ||
193 | printf("<select name='%s'>",sbuf->id); | ||
194 | printf("<option value='0' %s>none</option>\n",(atoi(ClientInfo->Post(sbuf->id))==0)?"selected":""); | ||
195 | printf("<option value='1' %s>play</option>\n",(atoi(ClientInfo->Post(sbuf->id))==1)?"selected":""); | ||
196 | printf("<option value='2' %s>record</option>\n",(atoi(ClientInfo->Post(sbuf->id))==2)?"selected":""); | ||
197 | printf("<option value='3'>reset</option>\n"); | ||
198 | printf("<option value='4'>delete</option>\n"); | ||
199 | printf("<option value='5'>mixfrom</option>\n"); | ||
200 | printf("<option value='6'>mixto</option>\n"); | ||
201 | printf("</select>\n"); | ||
202 | printf("</TD><TD>%dm:%ds</TD>",(sbuf->data_i/44100/2/2)/60,(sbuf->data_i/44100/2/2%60)); | ||
203 | printf("</TD><TD>\n"); | ||
204 | printf("<select name='%s.ch'>\n",sbuf->id); | ||
205 | printf("<option value='1' %s>Mono</option>\n",(sbuf->channels==1)?"selected":""); | ||
206 | printf("<option value='2' %s>Stereo</option>\n",(sbuf->channels==2)?"selected":""); | ||
207 | printf("</select></TD>"); | ||
208 | |||
209 | printf("</TD><TD>Volume:<BR>\n"); | ||
210 | printf("<input type=text name=%s.vol size=3 maxlength=3 value='%d'></TD>",sbuf->id,sbuf->volume); | ||
211 | printf("<TD width=100%%> <input type=image width=100%% height=40 src='/%s.gif' border=0></TD>\n",sbuf->id); | ||
212 | printf("<TD><a href='/%s.raw'>Download</a></TD></TR>\n",sbuf->id); | ||
213 | } | ||
214 | if(sbuf->mode==3) { | ||
215 | sbuf->data_i=0; | ||
216 | sbuf->play_i=0; | ||
217 | free(sbuf->data); | ||
218 | sbuf->data=NULL; | ||
219 | sbuf->mode=0; | ||
220 | }; | ||
221 | |||
222 | id=sbuf->id; | ||
223 | sbuf=sbuf->next; | ||
224 | if(atoi(ClientInfo->Post(id))==4) { | ||
225 | sbuf_delete(SoundBuf,id); | ||
226 | } | ||
227 | i++; | ||
228 | }; | ||
229 | // mix to (6) | ||
230 | sbuf=SoundBuf->next; | ||
231 | while(sbuf!=NULL) { | ||
232 | if(atoi(ClientInfo->Post(sbuf->id))==6) { | ||
233 | free(sbuf->data); // free previous | ||
234 | sbuf->data=malloc(bigger+1); | ||
235 | memcpy(sbuf->data,soundout,bigger); | ||
236 | sbuf->data_i=bigger; | ||
237 | sbuf->mode=0; | ||
238 | sbuf->play_i=0; | ||
239 | sbuf->volume=128; | ||
240 | }; | ||
241 | sbuf=sbuf->next; | ||
242 | }; | ||
243 | if(i) printf("<TR><TD align=center valign=center>.</TD><TD><input type=submit name='sbufprocess' value=' Process '></TD><TD align=center valign=center>.</TD><TD><input type=submit name='sbufch' value='Set'></TD><TD><input type=submit name='sbufvol' value='Set'></TD><TD>.</TD><TD>.</TD></TR>\n"); | ||
244 | |||
245 | printf("</TABLE>\n"); | ||
246 | printf("</form>\n"); | ||
247 | |||
248 | |||
249 | |||
250 | |||
251 | |||
252 | |||
253 | }; | ||
254 | |||
255 | |||
256 | |||
257 | |||
258 | |||
259 | |||
260 | |||
261 | |||
262 | |||
263 | |||
264 | int main() { | ||
265 | struct web_server server; | ||
266 | int soundfd; | ||
267 | struct soundcard_setup SoundSetup; | ||
268 | signal(SIGPIPE,SIG_IGN); | ||
269 | |||
270 | SoundBuf=sbuf_init(); | ||
271 | |||
272 | |||
273 | SoundSetup.rate=44100; | ||
274 | SoundSetup.channels=2; | ||
275 | SoundSetup.fmt=16; | ||
276 | |||
277 | soundfd=soundcard_init("/dev/dsp",&SoundSetup); | ||
278 | if(soundfd<1) { | ||
279 | return 0; | ||
280 | }; | ||
281 | |||
282 | |||
283 | while(!web_server_init(&server,PORT,NULL,0))PORT++; | ||
284 | printf("http://localhost:%d\n",PORT); | ||
285 | |||
286 | web_server_addhandler(&server,"* /*.gif",outgif,WS_LOCAL); | ||
287 | web_server_addhandler(&server,"* /*.raw",dlbuf,WS_LOCAL); | ||
288 | web_server_addhandler(&server,"* /*",index_html,WS_LOCAL); | ||
289 | |||
290 | while(1) { | ||
291 | sound_process(soundfd,SoundBuf); | ||
292 | web_server_run(&server); | ||
293 | }; | ||
294 | |||
295 | |||
296 | }; | ||
diff --git a/doc/examples/SoundRecorder/src/soundbuffers.c b/doc/examples/SoundRecorder/src/soundbuffers.c deleted file mode 100644 index de021945..00000000 --- a/doc/examples/SoundRecorder/src/soundbuffers.c +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: sound_buffers.c | ||
4 | * | ||
5 | * description: Sounddata procedures | ||
6 | * | ||
7 | * date: 13:23,29-23-2002 | ||
8 | */ | ||
9 | |||
10 | #include "soundbuffers.h" | ||
11 | |||
12 | |||
13 | /* | ||
14 | * init list | ||
15 | */ | ||
16 | struct sound_buf *sbuf_init() { | ||
17 | struct sound_buf *head; | ||
18 | head=malloc(sizeof(struct sound_buf)); | ||
19 | head->next=NULL; | ||
20 | head->data_i=0; | ||
21 | head->data=NULL; | ||
22 | head->id=NULL; | ||
23 | return head; | ||
24 | }; | ||
25 | |||
26 | struct sound_buf *sbuf_select(struct sound_buf *list,char *id) { | ||
27 | struct sound_buf *temp=list; | ||
28 | while(temp->next!=NULL) { | ||
29 | if(temp->next->id!=NULL) { | ||
30 | if(!strcmp(temp->next->id,id)) { | ||
31 | return temp->next; | ||
32 | }; | ||
33 | }; | ||
34 | temp=temp->next; | ||
35 | }; | ||
36 | return NULL; | ||
37 | }; | ||
38 | |||
39 | |||
40 | /* | ||
41 | * next prototipe go to select_buffer | ||
42 | */ | ||
43 | struct sound_buf *sbuf_add(struct sound_buf *list,char *id) { | ||
44 | struct sound_buf *temp=list; | ||
45 | while(temp->next!=NULL) { | ||
46 | if(temp->next->id!=NULL) { | ||
47 | if(!strcmp(temp->next->id,id)) { | ||
48 | return NULL; | ||
49 | }; | ||
50 | temp=temp->next; // Next buffer | ||
51 | }; | ||
52 | }; | ||
53 | // id is new lets create this buffer | ||
54 | temp->next=malloc(sizeof(struct sound_buf)); | ||
55 | // lets copy the new id | ||
56 | temp->next->id=malloc(strlen(id)+1); | ||
57 | strncpy(temp->next->id,id,strlen(id)); | ||
58 | temp->next->id[strlen(id)]=0; | ||
59 | // zero the rest; | ||
60 | temp->next->data=NULL; | ||
61 | temp->next->data_i=0; | ||
62 | temp->next->play_i=0; | ||
63 | temp->next->mode=0; | ||
64 | temp->next->volume=128; | ||
65 | temp->next->next=NULL; | ||
66 | return temp->next; | ||
67 | }; | ||
68 | |||
69 | int sbuf_delete(struct sound_buf *list,char *id) { | ||
70 | struct sound_buf *temp=list; | ||
71 | struct sound_buf *t; | ||
72 | while(temp->next!=NULL) { | ||
73 | if(temp->next->id!=NULL) { | ||
74 | if(!strcmp(temp->next->id,id)) { | ||
75 | t=temp->next; | ||
76 | temp->next=temp->next->next; | ||
77 | free(t->data); | ||
78 | free(t->id); | ||
79 | free(t); | ||
80 | return 1; | ||
81 | }; | ||
82 | }; | ||
83 | temp=temp->next; | ||
84 | }; | ||
85 | return 0; | ||
86 | }; | ||
diff --git a/doc/examples/SoundRecorder/src/soundcard.c b/doc/examples/SoundRecorder/src/soundcard.c deleted file mode 100644 index 14b581b2..00000000 --- a/doc/examples/SoundRecorder/src/soundcard.c +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: soundcard.c | ||
4 | * | ||
5 | * description: handlers soundcard setup | ||
6 | * | ||
7 | * date: 17:00,13-00-2002 | ||
8 | */ | ||
9 | |||
10 | #include "soundcard.h" | ||
11 | |||
12 | |||
13 | |||
14 | |||
15 | |||
16 | |||
17 | int soundcard_init(const char *dev, struct soundcard_setup *ss) { | ||
18 | int ret; | ||
19 | int soundfd; | ||
20 | soundfd=open(dev,O_RDWR|O_NONBLOCK); | ||
21 | if(soundfd <1) { | ||
22 | perror("open"); | ||
23 | return -1; | ||
24 | } | ||
25 | IFDEBUG(fprintf(stderr,"soundcard.c: Setting soundcard:\n")); | ||
26 | IFDEBUG(fprintf(stderr,"soundcard.c: rate: %d\n",ss->rate)); | ||
27 | ret=ioctl(soundfd,SNDCTL_DSP_SPEED,&ss->rate); | ||
28 | if(ret==-1) { | ||
29 | perror("ioctl"); | ||
30 | return-1 ; | ||
31 | }; | ||
32 | IFDEBUG(fprintf(stderr,"soundcard.c: channels: %d\n",ss->channels)); | ||
33 | ret=ioctl(soundfd,SNDCTL_DSP_CHANNELS,&ss->channels); | ||
34 | if(ret==-1) { | ||
35 | perror("ioctl"); | ||
36 | return -1; | ||
37 | }; | ||
38 | IFDEBUG(fprintf(stderr,"soundcard.c: fmt %d\n",ss->fmt)); | ||
39 | ret=ioctl(soundfd,SNDCTL_DSP_SETFMT,&ss->fmt); | ||
40 | if(ret==-1) { | ||
41 | perror("ioctl"); | ||
42 | return -1; | ||
43 | }; | ||
44 | IFDEBUG(fprintf(stderr,"Sound card setup sucessfull\n")); | ||
45 | return soundfd; | ||
46 | }; | ||
47 | |||
48 | |||
49 | |||
diff --git a/doc/examples/SoundRecorder/src/soundmixer.c b/doc/examples/SoundRecorder/src/soundmixer.c deleted file mode 100644 index 4532d06c..00000000 --- a/doc/examples/SoundRecorder/src/soundmixer.c +++ /dev/null | |||
@@ -1,104 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * file: soundmixer.c | ||
4 | * | ||
5 | * description: Sound mixer using (soundbuffers.c) | ||
6 | * | ||
7 | * date: 17:13,13-13-2002 | ||
8 | */ | ||
9 | |||
10 | |||
11 | #include "soundmixer.h" | ||
12 | |||
13 | |||
14 | int SDMAX=_SDMAX; | ||
15 | #define ADJUST_VOLUME(s, v) (s = (s*v)/128) | ||
16 | |||
17 | int soundout_i=-1; | ||
18 | void sound_process(int soundfd,struct sound_buf *list) { | ||
19 | int soundin_i; | ||
20 | struct sound_buf *sbuf; | ||
21 | unsigned char soundin[_SDMAX+1]; | ||
22 | unsigned char soundout[_SDMAX+1]; | ||
23 | int playit=0; | ||
24 | int i; | ||
25 | short src1,src2; | ||
26 | int dst_sample; | ||
27 | const int max_audioval =((1<<(16-1))-1); | ||
28 | const int min_audioval =-(1<<(16-1)); | ||
29 | soundin_i=read(soundfd,soundin,_SDMAX); | ||
30 | sbuf=list->next; | ||
31 | while(sbuf!=NULL) { | ||
32 | if(soundin_i>0) { | ||
33 | if(sbuf->mode==2) { | ||
34 | sbuf->data=realloc(sbuf->data,sbuf->data_i+soundin_i); | ||
35 | memcpy(sbuf->data+sbuf->data_i,soundin,soundin_i); | ||
36 | sbuf->data_i+=soundin_i; | ||
37 | }; | ||
38 | }; | ||
39 | if(sbuf->mode==1 && soundout_i==-1) { | ||
40 | for(i=0;i<SDMAX && (sbuf->play_i+i)<sbuf->data_i;i+=4) { | ||
41 | // LEFT | ||
42 | src1=((sbuf->data[sbuf->play_i+i+1]<<8) | sbuf->data[sbuf->play_i+i]); | ||
43 | ADJUST_VOLUME(src1,sbuf->volume); | ||
44 | src2=((soundout[i+1]<<8) | soundout[i]); | ||
45 | dst_sample=src1+src2; | ||
46 | if ( dst_sample > max_audioval ) { | ||
47 | dst_sample = max_audioval; | ||
48 | } else if ( dst_sample < min_audioval ) { | ||
49 | dst_sample = min_audioval; | ||
50 | } | ||
51 | soundout[i]=dst_sample &0xFF; | ||
52 | dst_sample>>=8; | ||
53 | soundout[i+1]=dst_sample & 0xFF; | ||
54 | // RIGHT | ||
55 | src1=((sbuf->data[sbuf->play_i+i+1+2]<<8) | sbuf->data[sbuf->play_i+i+2]); | ||
56 | ADJUST_VOLUME(src1,sbuf->volume); | ||
57 | if(sbuf->channels==2) { | ||
58 | src2=((soundout[i+1+2]<<8) | soundout[i+2]); // join left to right | ||
59 | } else { | ||
60 | src2=((soundout[i+1]<<8) | soundout[i]); // separate | ||
61 | }; | ||
62 | dst_sample=src1+src2; | ||
63 | if ( dst_sample > max_audioval ) { | ||
64 | dst_sample = max_audioval; | ||
65 | } else if ( dst_sample < min_audioval ) { | ||
66 | dst_sample = min_audioval; | ||
67 | } | ||
68 | soundout[i+2]=dst_sample &0xFF; | ||
69 | dst_sample>>=8; | ||
70 | soundout[i+2+1]=dst_sample & 0xFF; | ||
71 | |||
72 | }; | ||
73 | sbuf->play_i+=SDMAX; | ||
74 | if(sbuf->play_i>sbuf->data_i){ | ||
75 | if(sbuf->mode==1) { | ||
76 | sbuf->mode=0; // end,stop it | ||
77 | } | ||
78 | if(sbuf->mode==3) { | ||
79 | sbuf->play_i=0; | ||
80 | }; | ||
81 | } | ||
82 | playit=1; | ||
83 | }; | ||
84 | sbuf=sbuf->next;// next buffer | ||
85 | }; | ||
86 | if(playit) { | ||
87 | soundout_i=0; | ||
88 | playit=0; | ||
89 | }; | ||
90 | if(soundout_i<SDMAX && soundout_i!=-1) { | ||
91 | i=write(soundfd,soundout+soundout_i,SDMAX-soundout_i); | ||
92 | if(i>0) { | ||
93 | soundout_i+=i; | ||
94 | }; | ||
95 | } else { | ||
96 | memset(soundout,0,SDMAX); | ||
97 | soundout_i=-1; | ||
98 | }; | ||
99 | |||
100 | } | ||
101 | |||
102 | |||
103 | |||
104 | |||
diff --git a/doc/examples/cgi-bin/index.cgi b/doc/examples/cgi-bin/index.cgi deleted file mode 100644 index 4f23614b..00000000 --- a/doc/examples/cgi-bin/index.cgi +++ /dev/null | |||
@@ -1,1137 +0,0 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # Footnet software experimental de football para a net (cgi)... por Luis Figueiredo (stdio@netc.pt) | ||
3 | # | ||
4 | # | ||
5 | # | ||
6 | |||
7 | #use strict; | ||
8 | my %POST; | ||
9 | my %QUERY_STRING; | ||
10 | my %COOKIE; | ||
11 | my %img; | ||
12 | my $stdindata; | ||
13 | my $softversion="Foot ball net V0.5 (alpha)\n"; | ||
14 | |||
15 | |||
16 | ## CONFIG DATABASE | ||
17 | $dbname="footaid"; | ||
18 | $dbdriver="mysql"; | ||
19 | $dbuser="footaid"; | ||
20 | $dbpass="sqlpass"; | ||
21 | |||
22 | |||
23 | # convert images to hex strings 'unpack("h*",..);' | ||
24 | $f1=shift; | ||
25 | if($f1 eq "--conv") { | ||
26 | $file1 = shift; | ||
27 | open($ff,"< $file1") or die "Cannot find file $file1\n"; | ||
28 | while(<$ff>) { | ||
29 | $data.=$_; | ||
30 | }; | ||
31 | $newdata=unpack("h*",$data); | ||
32 | print $newdata; | ||
33 | exit; | ||
34 | }; | ||
35 | if($f1 eq "--initdb") { | ||
36 | print "Will create on database $dbname\n"; | ||
37 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
38 | $db->do("create table userinfo (userid varchar(14) unique not null,password varchar(14),nome varchar(32),email varchar(160),phone varchar(13),lid integer,lldate integer default '0')"); | ||
39 | $db->do("create table msg (id integer unique not null,useridto varchar(14) not null,useridfrom varchar(14) not null,data integer,subject varchar(40),mensagem text,lida varchar(1) default '0')"); | ||
40 | $db->do("create table forum (id integer unique not null,useridfrom varchar(14) not null, subject varchar(40),message text,date integer,replyto integer default '-1')"); | ||
41 | $db->do("create table noticia (id integer unique not null,useridto varchar(14) not null,noticia text,date integer,rdate integer,lida varchar(1) default '0')"); | ||
42 | $db->do("create table equipa (equipaid varchar(60) unique not null,userid varchar(14) unique,jogdisp integer default '12')"); | ||
43 | $db->do("create table jogador (nome varchar(32) unique not null,equipaid varchar(60) not null,vel integer default '0',forc integer default '0',agi integer default '0',efi integer default '0',exp integer default '0',golosm integer default '0',fel integer default '500',tipo integer default '2',doing integer default '0',ordenado integer default '10')"); | ||
44 | $db->do("create table conta (id integer unique not null,userid varchar(14) unique not null,value integer)"); | ||
45 | $db->do("create table treino (jogid varchar(160) unique not null,treino varchar(5),date integer,fdate integer)"); | ||
46 | $db->do("create table pos (id integer unique not null,namepos varchar(60))"); | ||
47 | $db->do("insert into pos values('0','Guarda Redes');"); | ||
48 | $db->do("insert into pos values('1','Defesa');"); | ||
49 | $db->do("insert into pos values('2','Médio');"); | ||
50 | $db->do("insert into pos values('3','Avanēado');"); | ||
51 | $db->do("create table doing (id integer not null,dowhat varchar(60))"); | ||
52 | $db->do("insert into doing values('0','Nada');"); | ||
53 | $db->do("insert into doing values('1','Treino');"); | ||
54 | $db->do("insert into doing values('2','Jogar');"); | ||
55 | $db->do("insert into doing values('3','Lesionado');"); | ||
56 | exit; | ||
57 | }; | ||
58 | |||
59 | |||
60 | |||
61 | while(<STDIN>) { | ||
62 | $stdindata.=$_; | ||
63 | }; | ||
64 | #print STDERR "stdindata is $stdindata\n"; | ||
65 | if($ENV{QUERY_STRING}) { | ||
66 | my (@varsdata)=split(/&/,$ENV{QUERY_STRING}); | ||
67 | foreach (@varsdata) { | ||
68 | my ($name,$value)=split(/=/,$_); | ||
69 | $value =~ s/\+/ /g; | ||
70 | $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; | ||
71 | $QUERY_STRING{$name}=$value; | ||
72 | }; | ||
73 | |||
74 | }; | ||
75 | if($ENV{REQUEST_METHOD} =~ m/POST/ && $ENV{CONTENT_TYPE} =~ m/application\/x-www-form-urlencoded/i) { | ||
76 | my (@varsdata)=split(/&/,$stdindata); | ||
77 | foreach (@varsdata) { | ||
78 | my ($name,$value)=split(/=/,$_); | ||
79 | $value =~ s/\+/ /g; | ||
80 | $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; | ||
81 | $POST{$name}=$value; | ||
82 | }; | ||
83 | |||
84 | }; | ||
85 | if($ENV{HTTP_COOKIE} || $ENV{COOKIE}) { | ||
86 | #print STDERR "$ENV{HTTP_COOKIE}\n"; | ||
87 | my $cookie=$ENV{HTTP_COOKIE} || $ENV{COOKIE}; | ||
88 | my(@cookiedata)=split(/; /,$cookie); | ||
89 | foreach(@cookiedata) { | ||
90 | $_ =~ /(.*?)=(.*)/; | ||
91 | $COOKIE{$1}=$2; | ||
92 | }; | ||
93 | }; | ||
94 | sub mydate { | ||
95 | my $format=shift; | ||
96 | my($time) = @_; | ||
97 | my(%mult) = ('s'=>1, | ||
98 | 'm'=>60, | ||
99 | 'h'=>60*60, | ||
100 | 'd'=>60*60*24, | ||
101 | 'M'=>60*60*24*30, | ||
102 | 'y'=>60*60*24*365); | ||
103 | my($offset); | ||
104 | if (!$time || (lc($time) eq 'now')) { | ||
105 | $offset = 0; | ||
106 | } elsif ($time=~/^\d+/) { | ||
107 | $offset=($time-time); | ||
108 | } elsif ($time=~/^([+-]?(?:\d+|\d*\.\d*))([smhdMy]?)/) { | ||
109 | $offset = ($mult{$2} || 1)*$1; | ||
110 | } else { | ||
111 | $offset=($time-time); | ||
112 | } | ||
113 | my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; | ||
114 | my(@LMON)=qw/January February March April May June July August September October November December/; | ||
115 | my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/; | ||
116 | my(@LWDAY) = qw/Sunday Monday Tuesday Wednesday Thursday Friday Saturdat/; | ||
117 | my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+$offset); | ||
118 | $year+=1900; | ||
119 | $format =~ s/\%Y/$year/eg; | ||
120 | $format =~ s/\%a/$WDAY[$wday]/eg; | ||
121 | $format =~ s/\%A/$LWDAY[$wday]/eg; | ||
122 | $format =~ s/\%m/sprintf("%02d",$mon+1)/eg; | ||
123 | $format =~ s/\%d/sprintf("%02d",$mday)/eg; | ||
124 | $format =~ s/\%H/sprintf("%02d",$hour)/eg; | ||
125 | $format =~ s/\%M/sprintf("%02d",$min)/eg; | ||
126 | $format =~ s/\%S/sprintf("%02d",$sec)/eg; | ||
127 | $format =~ s/\%b/$MON[$mon]/eg; | ||
128 | $format =~ s/\%B/$LMON[$mon]/eg; | ||
129 | $format =~ s/\%Z/GMT/g; | ||
130 | $format =~ s/\%g/time()+$offset/eg; | ||
131 | return $format; | ||
132 | } | ||
133 | sub cookie { | ||
134 | my $name=shift; | ||
135 | my $value=shift; | ||
136 | my $expire=shift; | ||
137 | if($value eq "") { | ||
138 | print "Set-Cookie: $name; path=$ENV{SCRIPT_NAME}; "; | ||
139 | } else { | ||
140 | print "Set-Cookie: $name=$value; path=$ENV{SCRIPT_NAME}; "; | ||
141 | }; | ||
142 | if($expire) { | ||
143 | print "expires=".mydate("%a, %d-%b-%Y %H:%M:%S %Z",$expire); | ||
144 | }; | ||
145 | #print " secure"; | ||
146 | print "\n"; # end cookie | ||
147 | }; | ||
148 | |||
149 | |||
150 | |||
151 | |||
152 | |||
153 | |||
154 | #Inside images ;) | ||
155 | # packed imgs 'h*'; | ||
156 | $img{title}=<<'EOL'; | ||
157 | 7494648393164f108c007e00002020401478c5789042788461ac80946c8492658cd58c82336c4644fa88119a7ae07e32b56ea0958c74478e96b2e896f1cd98238882724494649c7297cd7a33ac31244b7c718e94888e87148e7414aa54035e91d5ae83b4cd99337c77837b46f10680e18ab2a34b8e117a85d28e753835a2037a90032c48c59d7b03ac83775c7303ca89f06c75948c9197da8752ac60478e86d88d7ca3ababcb346aa6da7b41d356a41f48f38ca697be71298e72688e7398bea0e82f79539c87968e57a7a5be36aa65950f75aa7aa1549aa3a38e8524d553d07c75178893915faa237f5078f541127f76c88a84f47f91a89d82d77f94388d81158c84558d83247c49236d40a7ddddcd8d82746c4823265441ca87f47d7d138d93e76c4a12fd8806ea76068f95084f4b339d75347f62d89d81d77f93689b45d58881329d7065678ab27778120e79d57d76b3ab84e52e7a75ececcc2b8de04c8b027f77a49d74e73772018656128da6288f76e3abb5e5187c43ba80f58d74159d87c68d87336a83858fd0688dc0c7efefcf030313d87e33276972f37976158b85e9e9c96697d1d34725a77b730d5e62d395743655b1687571488d33d957631988720689a3292949478380194f43e55813264ac4515151e56745ac4c12fa5fb1578131ec8d4215a6e1282848856d16a3a3837a82d5a96b01b4a57155a7d3ba81267f7c739f6db3cc0f12d95444f853734f88960a8cb16780a1979401e986407982432554c1a99513fe79466f82858f74f38f73c48f7514776542f4b6653a88433a69c2c463e3ee6ac5e8aa426879f177c7e1d98d029970146fb1458f8727a96183d4a815269270d49a35e4b9f5fd7b056529c69b8582ab72d6a766808994819d9473ab90749b71148d856769d3c09b8076bb83866fa0858b77f0ab8765ab86e5d455354cc9923cc8233cca32e5d84306ca55a7a787997e82e59bd5db84b24b9273bc82357e76f59c83456db2f9bf8685c98673a484846bc6e1e5d1c1e9c793ecdc82f3e69524c7e40bbac0bb71078bb383bf95fa9993043b58743b69533fc8b34fcb538cc6048ec2a4acc194ffffff12efe0d41646560277964786027494d40500129f4010a000ff00c2000000004f108c000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfefd0c38b0f1e4cb8b1f3e8c39b2f5eccb9b3f7e0d3ab4f9e4dbab5fbe8d3bb6fdecdbbb7ffe0e3cefb8f1f4ebcb9f3f8e3dbaf5fcebdbbf7f0f3ebcf0beb441b2651c2898bdf288fbe7742840820a32e80e18742286c0296452470d1c806154c1321e133745811440aa0c270110f7c9136c603c8814b09191c5042ca1b704035814908e2e2cb395c32e5ca3e5031c44821a0d35dce8d2c409e4a3b5c50714016f8d3140c0424d173cd0ad871e5001c44f11a0c22c45966c58748b28bc141b4c2cb4c221489b8c89534c3888c31001248c8493881e6a81d40c9d40e0472e0b38d9b34e9b3421b7621e7ef9e7230c7230b3c9145c1af242a982a42e0082060840a1880e02388541d453c1a7802a8842a9882240501739f4b8f26c8336d8736e8b3653d3ef814e09ef54e1994e29d4e3915e495562485ceabb679f568921c89b8499766a948cc08c212104002f4e29bc82bd0611bc427cc54e66c9d4cc957ed9a76e9c720a0ea0ab301a6822aa8eb0bae246f1e7bf152a9052bf5cb2fa02490db5fa0229e4a96438f064821a5839068aacd3605b005c60b14b96b0914609044c9357c51dd073605e3ab0e303e3295ca3056f16d4925a4538e6bab5cba44ad3034aca4239e42319a8495c4592c891aa8a2308b2eac145249054490cbcfc0a8893c6c31f40052db984b8157e2d872e997af1e7c5305b4de7c8b3eef185b1aa8a8c72dcb5f2527f6eb815b06032ca033ce034c75814a04e3bbc5c91f6cd1f7c12f8ce369c24e9c923efc0b27dae23cc9b224398fb7ccecd3ffccb40d1ce0d547a9338a9bc4008983bc8c3839c5e37891a93549433dbd27ba7e4d2a75d482308577845c9b8e653b01b2f6403228622bb6222880fafbe8f5e7af50806fdbe8422af2fb85c4841a58110c2aac14e4831df4f3c07d2f4c713dce1b747180de2f6be2fec322367c1a48c974534fc40310ed24619642fdb4ed0958da2569213b035c0c281e0074c11909b3528efb372e14f63b804947e0e4930d613dee405b40a201a6972c10300707abf34ae415921dd983877063140184326e85e53fe97f4842d93412e63d586f8b7eebfe5532c73eb2fdbae208eb32dac8d79248f50e2127c0778e0578bfbd99fc041efffb1a1a969133846c23c815989c938071ea8bcd58cc01f331844cd483020a1079680c50e20b18f0c80e40546ba358cb1a673b311883ed0809bf4eece530248c0f478b903e568012b50d1c500a7f58f2c93c70c7051124650624ded6f6d1f73484a0c46542599290125c8c38cf866aa8bf540a2480101080490a40e16ff8d1ce849c5b8a8a4ba3d44ee4f78badf1e5031c541a44d8b6ced902832784e0cd13a7a74e3e24209fe814efd2413116f5bfcb71fb26434c294c4c42f0322470c5031de7740850c2a815c0318902a11d888082d37b3815a9ee499a447df18e1264236de812430a1cab2f3df975e246e0ee052cc163171a93e142304b4578f0c70d5ef8e28a1012a005006fc48f88578c2812278cb9d369082ba34d18123fb84aa2e98b9848013d296ccd9da42e4554a35e0449619802a292892150493fc9bbbe88e1e205fcd3ee1812ff4d54045617ba25854cb71a8c38327e7c0998ae459041964c008a191a270c24a14dcb4110ca9a15fc574528dd4a708331236c17634650dfc97882ce3ab378c626ba75a3e124ec17e0578a38818fce20508b0801f58f3f71adb57834a0a72b520fd619d09b7c3453720865424490a35a8ab38521a45a664cc502d39ca08aadfcba6eea3206522885981ba855ce395a09877ca3836f2bfe564241248a25134809cb58c62040b90eb2f5989611a68a6bc15e0128434a14088efd251022e93a3dd9432a8a61c73512220450442109083c255dc98f9788218ba660d0d146f809d55cc24d0d68630a00123f0f506f021f80880ca2d7a0de1044cc02080fa00412a34c4e96f29c21c1c51d6bc197106d8c69210e607f0b225bf4746d0e302643752b39d58cbde5a9a8b70e846aa19b922fa1251ac1697139711d0860240ca5f7450a204083381ae128d4e6d64eb9d20f7c40a91901fd2440b14269f226960119d486e220f55c04467613b8638234910f8380b2441ef4d58442804429b2c06f0730fe2444812ed88a0e6e041a3e6b269c9edd693da3246be15a484c5260e2557e1d1996c93c5cecde58c8b1259518ac2ee103bc3074a81352762ef346e039063329b24646b8093ae1a2830c10cf1058a0cf181076842834c6ba72c10f92b9c112fd78732cc8f0c70ad152e3ce4445cb933848512b3b8e5cc8360a58380d0caba3ed13af6ead38b1844400d5d48c5e037076dbea4670553f69e9c32d3a904b00529865433a1b1908d5ca02bc065a47f2c2dd01bc26650c5a0b967406135216e24a98d4c357b9332500a3ba0ca065048130eade09e657bcf40b62fd64a005006688b71d8b6a809adc070903c932e0ebe917d89d68d3a84f855614ec2c44a4d801c993bb248ee55f7bcb5c7af809de9a6210778bb006be273742c0ae667779591d09748c2461106c1532dcc7ce89134076c1f66f420ad0d092841efca0df0b2c206818388a534eb5c2fd311ab324f8e0b64450437514108c198e674542cb9ee968a32e0f2691f47b26d9e984ca4d71aec60542298fb388f4d7accc320b875de27d350c50ef20494dc5505f02748b71dd1982c43c1b047817b1a1289de302bb8d1ebf886c712d888bbcdb11ea8108640a10d0d3841830df0a5c9c781d486886bbaee70094cc532676b33dcbbecc0b8c87d02a7803836981638950f0820347e842219e950b73542516777afcdf7a7f369c0eb18129caf9421fa87ea78bb328e08684e7ca638550f0a1232845c01ed75ced1184e688099bf8e53216086460230c10e08d286122a0c334e4f927c1084c7f91990b43cf12d86db744aef0a70228d186f3b0a0050c32cdd5f563cb0f1970c30e51d8095432e91fc0a64a7fe4b4bc692562c316ceb2ebe10b7eeb7ff7e6b7d01a10bb7240240635c24d21ae7a08be7de7a11e004404400d35b0460b034b04b0d01c439d28d2c311b5d187d7676bd7ef77b0170170630d103e7d11e36a42d30fb49e7f00795fa0317320fc09e5b15a15260d62a41d18d185109d7700d117008e0250910440f50f37630d013401201a02d01e3b324f0026c21f00f80358ae7be0f28e086706707b07b00d36b0f40c03818554d62468e62c18b381b5510ef0e11148c109107b02655287b7d11234be3e42040f11cd3105795320320c40c21930188a30838930a30930a38ef868968b68c11ef0700227448fd7848c015e0fa51d0c24d24d21a78a98795a11428a58c587b0f405b0c10460d011887a8260a30c035a8b31d88ef02164161b5e11d88f887b0a588100a2d110303d0b23de3560d70f11bd3fe0e20be04c8cc0320c21a30ac8ac8ba8ca8841fa87760b8d18d11fa5650b77f68a58d012d0b245d01d0e45dc03109209989b44e8f804c8911630630e982657b0f507b0710e01bc8dc8c03f40c316e06e06506762d8e11316700df0c105b06b8670e00e11a05b42950770560c606d0f118f0d97d97ad0de0e508009c82f8242825a11158d217f89f8af8316745c112d0df87d86b8d014d4f205104f0ef0d147849113403114e89efb4f09e97711c30af09e8428ae0d854201f8710674242f401495f8811c091218e07498e05766765103b8a684d60096b87b0509b42e50ad0fb86d0cb4e118f0b599d09509d09d0800ad0c21242420719124f50911920549d218492488e0987c49c117763164270095b0d011b54f05104e3784b50270811a100c8211d97b59c598f0a47711af0c30b89739630810e30065324d01669710974699911c60221849150250248700650bd77009765795b05a9e11be3909b094f0406d11950789720f599d0cf0419b213d04207b9420f509b98697116d0c60560f21d69c99e990a9c112503d6876050ff8779c01603ef09206e0523e790f8611340c40f29389e0958ef9789889611a89b89c30010d50630b70810b25e018b99b99b9b40ae0b40811fb92211502f93f9500250f38d11910250dc3650ac96b0d777a9730e50b098594f0817d1172080a720e10d301a62a6b219420307e0b73e30ee9611c60fb9878e213f9b1a5f97f9b116c7af9527ac9c10d01d14e405235056224d9411c405607d9311ea9fa990add9411670630a89410d60d10d10a602e9011b7321a41ab40af571156004091a021c60150c20c20b1a8e0e114407c79c7dc33c055a7a9770d00c60dc04f07925d4e1190ad307204d3b70b05b21570013b749f59f561a64a7708e7e2171ab4ad4a3f9f4ac1101825ac77df03c0d01df0b50c10725469140cb9311efa10e2aa10cf72110b990a80ab70720511018b56810d50c30d10d60410b3a111b74030a6aba0af54c0511040e6ae50770221560560c4ac4aa70150500e11b58d585a9c773c07d0e11d00d006d0b5ad5a2d0f11c0ad50d3036a76ac21b70e30b704654c0d5019541171a5603aa909f21fb96aa8aa1500d0150d11f98faa009df0d015226227b9974b4051a1115f0c602e656078a3119d0c0a7209ea4d3411460710440a56c70d500107282e72117f4ba0e30195bfaf9a211560e6a909a095aa6aa7701daa70daa6da5a96b02bae116d0920d204165d05105e0b69c11aea36a3cae30030c219f4d1b7ca3b0195af5ae0974710460c10930b10360682f70d206efe03106d095a640cca64099907a0da50bc4a2f9d11e98eaaa0b399910bb9fda24ba84a05640640d000d93101d0f20ed87006d05f0ffaf10770cc0c6088a111c0aeba26ad50cea4b5b10df0a307253d08222fa350d10411d1bba07ca12b4c032bf5052b72b92bb2bd2bf2baca3aa6aa5bad0030b770b7b1dae11ae8a58f985b0b0be116e0d20400829dc06e08e04e0f1136a4d3e30570a1bc1ba6049b03669bd9ac6bae01a8c10a30b00b102147600503108e0920d00ffa77074b87bf21d2a7ab8aad4a5f9327050616c00b00df07c7e00810630c30840cbb060bf06a06a07a06a0bf0fb6639ae81706da6b0d01f50b4064824b34a7f47f4a053d02704ab58efb510f20400ef05e08e05f0c20770de0ad02e6376db4ebae8b2ca09b923801a43ed2360830bc3b50a703d026bd30c70611a60d50fc579b22bb40b9bd9bf9b4501ab3ab5ab6408ab8ab87b9202e8121c40040cc0b7b83b4dad11d89810e00f083a8718d117a4400d168e02f9c20f111db1db24bc2149b49b1d5db003689b32b420f4072be9bc00450f70e168e095a56064056087bb50a0cd21632d6ac7b37aa201bb2bbc003c0ff8c5863abbb840060ebb0cb7a02cbbf0840db06cbe8941c7b0910d01265fdae9a7f4b733fb270523e40ef0a1c4f0a8b2f98008009d0e10cf0f105604e0c8b211570b60a0546a22c24a9746f0149c03188372b30450b30360ef788d110d572c92c22bee8d2c930f2c13c33c53c63c93c920bc322163274acc00daf6cc11b3a01045cf080d09dad117605107f8d1cc20800cf0f11570b73fda030805c2193aac01d5fac03621185a93cb509e0e40f219a0632320d0c0dacaac11a3a010a9c010c70f08bcbccbdcbfda642211cf0750750a6cf10800e6c311cb821ac7392341ab01b15360d7cb30f700fb8e070b9111d523682c02b44a11184b5237bc360360221fc039c59cd6c11cc1179a99c4ccc070d0e11050e40cd7c07cf0e10b63e11923fcbaccc2107033690dd602bc4112d9bc32d7e219a00fcc403206aa3fcd112e77fc4ccb60d010d3149f50249349311a6c76cc20fbc1110fa6efb940d32ce01782d203601e85abb4a81190d1bc02bba0ae0d0dbc36382217f09a0abcc4058a4e053b5fcc50d10cd0010dd0c70c705c7bd7a702fbcf02fadd066be11ab9f508e31b2c21ac0990130130336d60a603b0611e4082bb15f2130304d14d34d79ca1182076574dd10b1dd01bc73f84602607113b9160d8721162265d77c6f038ad01fe53106e0920150d00fdb6ac511d5df5d82c89b6116b5e76121aa04d0f3dabc78a65bb11070ed0ed0cd0c503500108d0b604b9c11feab60c70922b3a45dd11f4008d699140149c21d5d3bdfac82c711b1597276d194f3d632e0699d911070070820c50cd0cd0350dd0e10d01b10727618260087ec76113ad16ef03117104f414928a75d140211d32a69d00b4a770ad0a8d3114bdac0fc5f8d611d722212037f0340ded5f0120e11b9ded0c504cd3507508d0f10e11b56922a602e764df1106812df40242c21c90a50a50c8d1d5df551105329dd211f4533ded3405f051b9119902fd4fd6cd20db017607d6b304537d0e0e1ddc1d211ba897c12d3114e303bfb94ace5043a01180ee5d1d53b0af0e3093d711940587121a267c39121200161fd1cdc9d4cddd07fde1129ac3069afac79af113f8bc8a30c21a80a8070e13082033e911cd6e21b557128c30b0f3e5e0d1171e24e91edd0d01c767d686e053911b6042e6d4322260dc8aa8411dc06d0eb9c60b7bcf0f5931113eeffac06d739e309110ddf11da0096ec40b05081fd4303f0b8e3f0c50b2064ed11c303b0840ac0bf08208406fae11e62f4eac89e0c218a035e80e336410b0e611a3ed21b46a939c578e88ec11610070a8ea8eb8ebb6c01cf9803bcdb00618a116fb2119d2843bc8e9e311a6971a77e0ebad0e20f2ed0135e55efac8fb4c017018e221b46da01e56606201d4e11fae430070b8eed0a00cd0900e11db0fbb6a0ac006079e840f11072830b159e0930f32f9ea8060e55e89e5ae5416949ae1e50d4254eaefaecdecdeed04beb016d86e0df0250a30c9b75cd21453554372e621ce31167effaad0ad0f59b5911170e0f079e79af7ec31a403de1e5552cfec115e45efe4c8ea00e8ee110cb0cbbf0d2f060828d114f7c43eecb218a08a060e0f013091da41ee002002f1e52d4d1143061062fc8e856c01150f4da77f4de03e21f72d04b43511b2e7abe2ede071f01183f55e06da9c299a31934b554de2000d498eb8e2be3f0a0020fb112cbb2fd2fd2ff11e7c78213c7a3f9e0aec90a1f65ebad741212ee006f2e5ac6b1152f1bec8ed01c200d0c20c077e0f03d5fb21e43d7c17ff70c6a31f51f9d0b5956ef012fe55ee6da60af08100deb315401126c3e5524f66f76fb8ea00e11e4cb6fc2fbf0f1101485317f78250ec904bf93fe6d97f6411b00af5c37123af08f28f64fd0176c800c6eb70cf06e9e21930eebcdc7a32bf51ef1fca559e2e49f8f09f085f67f8207bfd10810810c313a01b0bb27937f32f724fa0076f5ef55574fc11aafb6fbf00609eee119e0dec360ab5ab509fb21f600f067f77fc4e9411b0edf0ef00139e8c11a6ffc0e14489051e2cf7436edc350115223c48e18f870b8c7020405341d3e74098057c6947e42d5ab1392ff484f856ee863d69d462eb319f85a14e40f0e5624141a3040c081e6e052a0274d1564c8c59ba6430a828488215aecb7af1f4d5535bf09021e1c3aae7429723dd486146fb684f6ed816626bd6b76783b175e624908439e2d6a37116459a1134e510cdd02c4153d1828edaa274ec616c267c6c579f236663a98fc62b47bd3920f80a88d372efc15d9443d1a3ecc9d38fcff65ca66db262e7e35951cc6dea6325ff393d025cee4792624abbd603f5e3e2c01e0c1e98249bfc0e80394296e7071d1d1d5af4f7ec7a0a5bbe5112bb90e92cd8b150a0822af148bb07ada75cab777a88bc68d8b48933f447bb99c97afce0d9fcf3f3b6abe484934e01062d00625bc76795181cde25b814bae587855c68832e8bdc8896c8860a3ce01ebbdeebe6e23582d231db12f2db6ee938eec390619a160c34a2930314fc68360d1c5d2421f8b0e28c38349981ecbf7a03688f953018d07a1f0b109ba109fac0af62bc68523192041f7280c183fcf8b6ea90036425a29f660914e794d210537dc4085b4d4996387895a24cef0c7837e6bb1e60324f4e0b3cbd62b318221f6c3a0e74e245cbde93f3cf022b608111913bcc33f33639dcee042e2c4483058c4260872a3d8c8c58e48e16f0e72fcb1634324e2b6a5582d8061ee040262698281fc0df9c601aa9b54b988b019a1011978cc140d0432537129d77a2db4d3be54d053ab8a3fc937848bda70c63f43283401d33955b1e74b1a86a0279cde0ec544f3354b90f5fc3970858498536f3b46bed40471531d2f64936b0e1d24b86e6d8d343a9281ae0ee3253b5d35ea9062841ca9418d8828d061265402423712047732e3283f38dd164c88b4e9775e136eb9840d844219fcad9670b171e51b7318fcad086d60f1ce4212c0b635b92abef1c65b1e012efc2a882ac0b89120cea0808966a73abda9054f3622ff12484616f4e49956fcc5679d5867aed09e834ea3df751145e6b966d0e7a78e2a0e588b8638b127f4025118555ea61aca66e1ee09266124a6afa01c6320a67dfca75134c0a52e22420800c4e84221b445efc899f0037791b1891b9fc0ade26f8a3ec9968405ce63e6ceeb10f6dda914ccc9660d147c8e82822b8032e3ea0e327fe8f3367f9367546227687c3273662facf3bf0ee8f0a9f75e56fc14a3eaf5e483154eaffca10d3c8040ae0f0ea0a80e03135fe1e60d6c949be58dbdf968dc19db103a14ac887780432e25d567961138c0d12e2460997c91329159b59d5eac0cc066c80efa97f1879d7e247b702dd434f0b894d8738b1043d6cd1a100133b8edac26e8908ce0d1411400208d6c63e70f1c10bb34c0914c0d40f3421e36b8baadff887093ac9528b6881274918c13204026e818f19d45fbcf5ffaf71260d192047430065800e740a812a311fd503b1cf8b34de2d7f28f3cb00a0c737f9ce042cf0e78706d0a2cdd9300307fb9b4c07684b0d10702e2580a3223887190468e03118704c4d3cf84e004293037cc867c76ab01ab534d16a1a816c831e33c5892c90c3087b82853048d283b4719a045833ceda506e005234850160614903c0b6045ea1c10b689b091e90e2481621670d48e745def147c248d1508690074105f2f7ca740238ef8f10222a0093130f41213981796893ca98150ee1f3aa4b0111cb10e12eb846638296d89b862f50f28a0c81e386e8f8c92f499a4704a33d9271712e0268b38c14e064227c3b412c00608c5223608db4c30f15f28e0378a040a18c20020989a7986de1028be990e61250e844c0c1029750d60202a0d00086b0eb9f202a831c9031059cf1639768f3cf16c0ef068410a000d069681c5af2522011aa2b10138c3d59a30130e0469838c1044fc347cb76d13918c8e5ee05e200d270a3450f74042b089128af19274aa8c4aae09e925692b43ccf674b79054051f60b0844329cf0400b04c827909a8490052df2293922c2086c82f5ae2570011c107b8aa8e08c07ef10234e047ab30c1c204e9b50934d3d00f904c2d11c1b8d17422c71eb89b8f342bdc83049320aa20592438911839b08e447b6854ac1250b5866ae5c2061cc7c908ca15047c40cf1a15e2695822a8164236470521f8684fc0c94688514a0250474104a0b25692112c013d892b4810c00c1c60a901f4d18e0e20a30fb251810368c1c61aa66f44c60591bb233ae7542b3ed3049750aa2d20054ec54829aa276f124256823852dc4caeed620dc8bf6ba6e303168880440c983da519f1c206da93039179d24e67c052d33cb084a51082034e7b0d0510b41a17c5864c4f61448a5cd4630b108eee5570b00c1857170e48d2841a0b55107077f70f38ee61261b59beff5cf2021171204e8b20b36f7c10cc170051c07b004ac3b0c92a51aba3822373e0d1b095e0cf5973462860cd8b2c4290cdada0438d4ae156c0d67a1718964012cc71021401e2071093c477b0a30f8a3124ab01828f3cc1650a3ff6dec910924604fc5b8b54d2c616b850c608107602431a79bc08d0437bf1930e08477abb08d10516bcbdd3ceb8f31ed5e5e990d47612438377c518e1ff8fcb9e558c3d0d54e145b230501f583919f092a35463044b4ad474d7b50dc0ebd40ca1052af824c200f87340b1e035ee6859b0cef0e86c52abe1d508a467b32d59024ca0a20fdad9f7ba7ed33f9ffc18e1471ad0d88e6e6e00e8c1043f8832df70820a85e0a787aef4b87c159e713c8d003e0b4c022d096084042e11fa87545584ad0e3301020e016f7851e00fbd59681aa2d6068bdce400b632c297734f5a7c399826180ba501f1de040410ae10ac71072b50c562c2995cc140810ac16092f4979994076e9ee2bd90dc658094910050c9b510a047ee74f34a0df0e04608305b02a7d28614b81647b70db4fd0c81630285413706dde15196b5984feef44cb5ed0e8a7bdb1210c8d7bfbff0486a283850e40fa3b410a14aef78a2532a19371f0c03db0a04b1a30d68ab73cd1e2a3525e662ed4e2b45c9e1dc8664baca1bfd211d0860fbe7388f2f1dd8c6c6610aef8e2e916c0769b0ca979d93866f606ce58e380ec37eb00b200efd5a0c104d760a8e6474ab2dfc07d83380a7c018ee92366b0a70aa351252ee38fd352910e8b766dd2d3f6b44428640c870c30461328118d2ba21da32f30519117ed4339e1d142a0d00e0610a1071ab1758107414a06e8c23512dde40d14a994016e593c0c70eef59fbf75e82f02090e5e03f8e6ff012f78e6f9169e058d00c9b508e9be78f33b50f33f3be70143ff360c0040042dbd28e78e2b5c8138a0094b61811a8e04680eb87bb43a7b840c400604e3e7b9928281301dbc2b083243803828308a6b38835a512c08dd1b10800d70b14530e10869d1ce288e35825426211d2fd02b0c532c332c2cb9f8230f205802e84b85c38389789200f36182000828ef202003fbbcb3b8af3cf3d18e70728c18f03d2cf7824b5e21db50043ce93304404b5050c5a360cb9b704b2880cd209ab5c0ac3a28a086106224f17e3f3cf3404c04414c14424c24434c34444c44454c54464c64474c74484c84494c944a4ca44b4cb44c4cc44d4cd44e4ce44f4cf4405c05415c15425c25435c35445c45455c55465c65475c75485c85495c954a5ca54b5cb54c5cc54d5cd54e5ce54f5cf5406c06416c16426c26436c36446c46456c56466c66476c76486c86496c964a6ca64b6cb64c6c264048d64e6ce6ce6cc6407c07c554f6427c27427417447c47cc4437467c674f6457487c87c444774a7ca7cd64974c7cc7caa1b74e7ca74d7cf7ef40849b8e7c184f7c08438c384f80a74340678b40008b4067034028c284484a8c384774730050000d8cd8400005073098477ca84194d74a74738684e84e8cb48f8409c67c19479c47ca7cc8449449405069c09c794c9cb6ca7434899ce9c884b9467cc941a4964b74678e9c9946700ac69c1a46ac564e7c39c3acd8cb405ac5ac6a4ba426ce7c8ac994aacaacba4face5c1848a4dac9a4eac0acfac3bcc542843a4da4d8c4ac2b43b44bc8b4954984e946b4008f9c7b43749bcdbc75409499c8aca947749100508acb40050910284eb45c455469439c8a459477c0488ac0484cc5c4bc4254b94c8ce94f8c6747cc1bc594b7cbc41d4054aac58c68c784cb4ef6741b4dac18c1d47dcd4ccb4b749c4bb4d84acc67cb402b40487dcdd4b4c8dca74910ad4e844c4674d8cf64edc3e4844fd4a7cfbc0ec0c437c2e4e644e49ec64ce6ca206849a4678a288dc5d4bbccd427c5b47b4ddc9ec1fc34ce6cd688acd68cbc0e44942ecd843e42f48fc044e6c9dc9cc7bc5f4e8c6f48ecb7c8f4ef4f3cd64af4da4bd4aacbf47fc7ec20ddfcefc40d3f00480785fc070ea4205df4274cfc8e4505b0d0e0040205ea46e4ad4908cf40087fcb05115db860dbf4f40aa40ecbfc1ec274a0540d11d71d3b0005ad41050a491d00d67c6151f481dd1d7a880501580d0e477cc15e152252a0f1d2b4738ee40d430590d22572d09832d7b4bef1dd84a1df0d01d725c2d48882d7bc1c4a9c51512d30dc25135588d255e428c61d13d43538880da25335e7443553d43520d7057355bc6b471d83dc25d0da35984dfcc35935705e3de3df1df3553d0ec63514da74cd4c3d245c25ee449444d445e7c64d835e05e8c0f4945984a4d835bec2c4900decc4509cd4dc35ea4f4804874db4804831d7bc15df35b94940205940aac65d24509c74dee40a4a5d64528cb55ad4fec6d4d5dd5dca4f1d30506d065165b7ce55c5dacc365a4de7456d7c4d4d66d655e7485dbf495536d965a6de7435d9cc555665d65d5d05d77c075d6d17d27547df7844d4756753805ec67587d4805ac875a7d48c98ca75c7dc75d7dd7925e7de75f7df7508d08518d18528d28538d38548d48558d58568d68578d78588d88598d985a8d84c08000b3 | ||
158 | EOL | ||
159 | $img{redball}=<<'EOL'; | ||
160 | 749464839316020002007e0000dcf6572eb90a9e1b4bae8babbe9bdbbe9bcb9e3b6b6e7aaa0e39799da7f72df5567cf465bdd829fe9cbc2f4d6d2f3d5d1ffc1d0fbcdcfe5c8cdefb2c9e2b5b7ebafa6e4a8a3ed91a0e49995dc6179c94151f0d2d5fdded6fedfd5fadcd3f6d8d2f1d3dee4c6ccedb0cbe6b9b8efa2b6e7aba4e0a4a2e89c90e1959ed98d81dd5369da8e85fddfd6f1e2e7f5e6e8f6e7e5fcded0f8cacde1c3c7eaada5e2a6a3eb9e91e3979edb8f8cd38885da6f67c24a4adb8f88f8e9eafcedeafeefececbebae4b7b8ecafa3ec90a1e4989fdc819dd4898adc7185db6177c1484bc2767bf3f4fcf6f7f3f5d7d1fdcfcae5b8b8eda0b6e5a9a4ed91a1e5999fdd819dd58a8bdd7288d57a73d26760c3494ffffff1fec0dfe6c8cdeeb0cae6b9b8eea1b6e6a9a4ee91a1e59a9fdd8296dd637ec25851e69a96dd6274d56b69ce364beabcb8d47a76dc6274d46a6fc25857d87d7adb7088d37876db6173d36961db5168ca3141e79b9cd1868ad97e77d17773d26861da506ac24944e1a5afde829dd68b8bdf7489d77c77df6575d86d63d06660d85e5cc84f46e6aaaceabdb2e99d91e29692de5460d65c5dcb4256e8aba7e9acafde839dd78c8cd08589d97e75da6073d2696fc35a5ccb4254e2a6a5e3a7a2e79b9eda8e87de6474d76d62df566ec0575bc84f40e2969fdc8099d87d72dc526fc55b5dcd445ac44b4bd1868ada7f78d37974d66c60d85f5ec1585dca4159ce3545db6077df6475d86e6fc45b5bc64d47c83f3cc15859d57b77d07574d36962dd5360d65d5ec0565cc94055c53c3bc44c48ca3241d95f5fc3595dcd435cc64d4ac04746c43c3cc74e4ac14947c73f33ca405fbf3648c54b44d86e66ca3248c34a42dd5468c93046ce344dcc4357c63e38ce3541dc5269c14847c83046cd3541c24949cd354bc54d4dcb415bc74e48cb3342c44b41cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c482041a2858b08123860d82073078e0c1c3c700111248881142a48983182258a068b2854b071f2c54b081f1024c09142760d8a163e60e8c1a321ee0f0d2874f0f1d3874b0f0f0a6ef00214c28091244a88193284e062970c1c54f052b4494f071c1894319022c9c3182154ac41a255cac51c26034c78e0f2c7c29c2b4c7cb8e0f14bc61e2d5cbc7103164c016b2368c41c23d4894cd9b57fe6eddbd7ff60e1c58dcc9143403d44870855b275fa065c2953b865daa953c6adc04732326048f0036861d3a947963d7a1517cb183174ecc1a320be888011104efc70f0f236ecca97337eece967ee0e9c1974fce118c7a0c40901102c3062f189c7c093259472581d78f1f70021880238012588046800178c40124c011431a5431114c012c4078001e5c106202298845648a12b922b80322053242001508802348021c61214802388050001428324380125c3209442290e139052374526980479832e505032410f3880c5880f341032050e583289441990a0a90e064851b9072d9012e9c7220d0143c105109041001e4471e40014109051c1043441720821a051f788244ac13a0925a89220d92248906149033401f4871f44013349061890244620a011e74428a4a2668a2a0ca2ca4b2ea804fa84188c50620d061041f5041ef610d062c508884182482e78d1f68510b4c297cc12b4923b0d2205d2f842216c9053801150811580153c9016422f886245442f68d27b4e08b4e2abce2cbce1dbc0465cd0d70a063c012548125c01630a0d7cd0090e0f70a265cd2390b1a8012d6032ebcf240972838f192cd044c4126c4144cd0928f183442648829a0c2930b1a00031c8033c0135c41427cf1670e05405142711838d1f781129851878911b0e2a8003594926cc138c8149ccb277cb164451e3b11f6cd1088a187c62398a2974e2484035a412b70d1acc14bc033078a165c5da60c18740266c42c98c1a0cc1ab4b12c813b7cf2dc424ecc33b689136891b64c19380276052d9c82ba8c2bb0c4323cc130d443c094376c0ec68c197c02a8cc148092ca492cb8f24cc43c2df34d0325dc82378e148c22598725a4b23b8537d06339f049d863bd0735a492694737c8734bc735afce4b7de4050400b3 | ||
161 | EOL | ||
162 | $img{yellowball}=<<'EOL'; | ||
163 | 749464839316020002007e0000cccbf61e4da98eed1b9e2e8bae0e9bae1e9b8efd3b5ead6afd1d298d7c971ddbe56c1bf4adccd8ee8e9c1fce4d1fce2d0faefcfe8eacee6e5cce4efb6ecdba5ead4a2e6dd9fd2d494d1cb68c2b944f1fdd5f2fed4ffe9d2fde5d1fbe0dde6e4cbe3ecbae1e5b7eddea3e7d0a1e4d89fd1d09dd0d880dcbd58dac984f0fdd5f1f0e6f3f5e7f4f6e4ffebdfe8e8cce6e1c6ebd9a4e8d1a2e7db90e3d39ddeca8bdbc284d4c966cea149dbca87f4f8e9f7fce9f7feebe4ecb9e0e4b7eddca2e5db90e2d39edfcb8cdcc389d9cc76cfa14accb17af8f3fbfaf6f0faedc7ecdca5e9d4a3e6dc90e3d59ed0dd8cddc58adacd77d5c472d1c16fb9a24ffffffee7e5cce5edb9e0e6b5ebd6a3e8de95d2cc6dc7b253dfb468cfad3ae2e9b7d6c475d3cc6ec8b156d5c779d8ca77d5c275d2ca62dfb360dbbb57ceaa30e3d79bdbc089d8c876d4c172deb160dbb959c1b24adacf78d7c776d4cf64d3c762debf5fcab85bc4b84be2eab0e2d19fcab65cc5bb45ead8acddc784d1c96ec8b35bc4ba43e8d2a4e9d3a1e4d696d3cd63d0c66dc7b05ac3b74fd2d291dcbc5ec9b55cc6bd49c1b44adac18cc5b944d1c76ac2b546cda73bc5b058d7c573dfb264cba53ac2b34cc9bd4bc4b649c1b045cba43bc3b642cca94eb8af37c3b443d0c865cdaa37cfa247cea835c0be36cca537cfae38c0b145cdac30c9a14cc8bb41cba441cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c48202082450b07103460d82012868d0a183470f011e30880122e0c802152c4c906882258a851c2658a861d1028b87142164c09133864d0b173212e0e0a2278e8d1a3278a0e0f0a62f8e1e3a2cf0021448c01c044e061970a1658e03274c88e851a1a30219002a742152b48943172f40a4419260f3478d0c267c199274670b8d0a79a451b222ea0611c481a461d25099029e0177e6ddbb977f6fdfb187071ec2b58b01ce211e1065dac5db2851b46dc2a55be5ebc6103303ccb07101a34b81a54f862d5ad4f964da1266c0992366ec8044302e3440f0d183efcbc8933b6edcc9b3b76a153b6c60b963e640e8820314244080f0a38eff8127469c39c9db1074c127cc1474d120d10d38d131c70e244084448118b0f1c40674f08e19077845348710b920874e1209e1224f050080f2c702105121c70f208050068e4df028de196420b60f1c6891d78f120df10388020480500f002451020f0504802088003002b44025207805802388204701258804044c070050246f0d38512663941c1013c214281214831206e856c1288422a8804b8cf032450700c0e342122421e30c07045032cf0180b9e44a15d56175669c88c6ff060c409061c8013450a4c51a445013c8061090c4490d6a2a054c1d8ce8d7422e8c3220142d4cd1ef39ac0f3c2185c21f38c00aed1d40d098a81194c163842780e1484d1e6c42301414343152cc0040310d20133490bbee153cb12649ac7c618528197052add04484d0e489043401d44ab140d062831534a1340c13600bcd6b1d745269c528941456cb1964d02483120b01feeb13442005ca195432298206f62299c52ca614a9060a688134c31a1f01268a107871b6802c7c02c6c12474aa6ce91b9c14c947236871054cce5c81b64c195c8c56820660e106452998b17687290d7278c7195c1df5091638c1b50b1a089cd7012974eb0a482c05e1b546db5491c6cc1a33d188012984d149c522a0b4ffc829789178891d60d18744d98032e8092f849286f046a05171e8c9298422e741279c91f80a297f1e8872e4050400b3 | ||
164 | EOL | ||
165 | $img{greenball}=<<'EOL'; | ||
166 | 749464839316020002007e0000574c95699de76afd29aa0e99ea1ea9ca1ea97afd49e9cd98f87d67d71d0696ac74e5dbc3c82d378b4e9a0c7e2beb7e0bcb6eda9b5eaa6b5e4a0b3ee92aedd8d9dd6879adf7197d8727cc35b5eb936caebb6cbeab5cae7b1c8e3bdb7eea4b4e3afa2ed99a1e694aedf899ad38499dc7e87d47685de6869c64880df68caebb9caedbdcbe2cdcde2c7cae9b7b6e7a0b3e0a1addc8a9bd4849adf7098d77a85d07483d86f6dc25856b73980d17fcce5c3dfe8c5deebcda2ed98a0e59a86df6584d96f71d2627dc25757b63471cc59deefcddee3dbb7ecad9cd7869adf7298d97b86d17684db6f73d26970db586bca485daa37e7e7e5b5e4ada3ec9aa0e793aedf8c9dd8869bd0837ec35067cc3e6ccd4657b43ba1ea9068cb3c7ecf5e72d16870d9517ec15d6ccb4669c44455b23398db7283d66d72df577fc85b6bca4569c2485cb53183d46c71de557fc65d6dc05a6bc84b53c63e9dd88da2eb9f88d57369c04b54c730acdb81aedb8784dd6168cd3b52c73b9bd48c9cd58399da747fc45f6ccf4f57ca3a50c7376ac54268cf3c55c8395db63382d7607dc0595fb63353b23e54cb3a71dc5c6ccb4151b0385eb53955c83a52c5375bb43152bf2a51c63b55bc375ca9365ab7317cc15452b33858b73354b53253b0375ab53552b5375ea93658b33854c73454b33951ba31cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c48202082450b07103460d82012868d0a183470f011e30880122e0c802152c4c906882258a851c2658a861d1028b87142164c09133864d0b173212e0e0a2278e8d1a3278a0e0f0a62f8e162d2cc0f1f308401127078c30d0b247019224447ca0d0d1c88400146f802942a46903962e4e981cf0d1630b8d1540a419d1c26342d82256a059a26500b0e62750b41c4264a30c59b47de2e5dbc7928f5dc38fa461d2407b44870855b275fa065c29d39763d27ec2c56067971e2024786134b8e1d4ab4b9e3d8a53cbc7103164cc81184604c7880e1a3078791376ef6dcb993776fc2366ec8d043964d80c1150628488001e1478bff134e8c297253fa163d68b1f64a107804174f027c40f18b01181101811118b0f1c40274f0458e442cc125101fb920474d1209d1224f050080f2c702144121c70f2080504f022cd113850081e1564207640186881978e120de17705120480500f002841020f05048020051770f1844f152c68d48f1f78209600218804334c07005022800d34f035c892088041c101302142020e3c21ff5e81680238012588046885032450700c04105045cf903c1051c80614f1e6e215684775c59952c10bdf314421428e91345074451744501381a4242152cb9b8631d6c12b36e14802298804a88213705aef23850848518485023c7a378214382ae5c22d68d0c880247002a78a1d8c04d40d0a449033cc094c3bdc690ab2e153ca1e509a1446185271578327dd04084d0b4890438f0a4c9be30d062c2153491040b1f5cfaad6a197c32094422941416ca1564d0f3c2100ff0deea104420d4c9175c12c80698ae4219caa5015214891e5001c4c5c04871660b170bf114cf1868024f212078a1364527095279c71d44bcd2f71764b175c7c16820260d1c5c323989c89424998027540d14381638b1950a1a088c9700257cdb98862c05d195c4d9548186cb1637a138002488e1e8442b90b4ff8615788128881964a147c2d42322c9422d988d30972f90220a012d5b3c1a4a0222a8cde7ffd0831410100b3 | ||
167 | EOL | ||
168 | $img{blackball}=<<'EOL'; | ||
169 | 749464839316020002006c0000747474545454646464848484b4b4b4d4d4d4c4c4c4a4a4a4e4e4e4f4f4f4050505151515252525353535454545555555656565757575858585949494959595a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f5060606161616444444262626363636464646666666565656868686969696a6a6a6b6b6b6c6c6c6767676e6e6e6f6f6f6070707171717272727373737474747676767777777d6d6d6575757979797a7a7a7c7c7c7d7d7d7b7b7b7f7f7f7080808181818282828383838484848585858686868787878989898d8d8d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f700c200000000020002000070ef08f72838485868788898a8b8880132b2e219c2722271d040c868f143636353431333e2b292724212118999f753a3ea9373830af2d2a272523202e1c0c8c1a3b3c3d3c3b30bf9033a92627af1b1113098c193b3e3f304f3e34c633bc25abcb181ec780163a3c3f3142414f3c3a3735313f2cd6a12f1c19161e020681373a3d304246880102d3addb3a56b699d3b0210141a0153af99347ae8d9b3872f41ed390f00001271c94a153b68d27863c8dd8ed7368f0c1a02b00386444961c68513a17c849235981a244870b04fdf141f2260d0c173278b2d10b461cba57b27970d0718244070b06280a21e26681da163e6885f40a4419a975f2345580d0618aa31efc2e5875a123b6c7a2b1fc61e211cc030bc60a0c080291a2858b87103268265c03e58b061a229924aa651b6205562258a851d2e0fb8fce8b5ca88cac05088ebc09de2040aa2489831a9750b061d266f8e25ac640f5b755f72305050e0802d042a4c908d924372f257b840a8dda1a7a405dcad3ef980126441f7d7cf8b982142644883dc12ab50a001c270f0028a0c70119d948cf9f1e340fda76edae38fdca724781461c70f10801241860e8720270b1460e79e7d612060c102490280c60c18702066820a70a064771450e0e209041040c00ff112f0460a1c6061270a0e60a103871c973dd30d6d88522b758c4011c508106091409f3e5033250214409e130602229831800a3ee80145061c49352886422963e20a0020c4a3998c00c084026a8911069e0430a4620016e83162260c30072c9766b5a527940c1030c39c800060c20a4e20a5aa9422e9104b9ba80000c106041042698e4a57ba44a29e4aa8402000b3 | ||
170 | EOL | ||
171 | $img{msg}=<<'EOL'; | ||
172 | 749464839316410041005a0000000000ffffffcfcfcf6f6f6f0f0f0fdfdfdf7f7f7faeaeae4e4e4eefefef1f1f1fbebebeededed8d8d8d8f8f8f2f2f2fcecece5e5e5efdfdfd9d9d9d2d2d2dcccccc9f9f9f3f3f3f6e6e6e0e0e0e3d3d3ddcdcdc6c6c6ccbcbcbafafafdedede7e7e7eadadad4d4d4d7c7c7cdbdbdbababab9999994f4f4feeeeee1e1e1ebdbdbdececec8c8c8cbbbbbbbfbfbf5f5f5f8e8e8e2e2e2e5d5d5dfcfcfc9e9e9ecdcdcd6d6d6d9c9c9cdddddd0d0d0dacacacffffffffffffffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f300c2000000004100410000609a0cf907834000888c4a010180c159a466350f4861b9101c080558a43050301e088e22fb903826180643ccb4c60c1f08444231a45ccfd085e201819131a1b1c1d155d7e171f102911222b132425264b462d4e172820292a222b2c252d289f4c462e2f2820313a22333c2d2d189e417106262431353633373d13b856a2762836393a3d1424bd43c4c8b0d275bf3d7cc856dec7b2d7d2c6b6dbd4b3cfdbdad553e4e7b4464becede69f31400b3 | ||
173 | EOL | ||
174 | $img{sair}=<<'EOL'; | ||
175 | 749464839316410041005a000093590253c8d163d8e12348b1f2a7a1b21781e1f4013358c1f2c7a1c22781829661420641127521e1e40103d7a1c2378192a661521641228521c194f022b531a164e071d3c04143b0545b624153b011d29024da42e04270e33a22d04270a0b150b3b912a0c150703130e29791b0d15070414040b0202328b1a2e671b0e16080514040c020b20771727651b0e15042f541026521d1c4012113a0f08280b0f160a154e061b3c03113a0f09280c0026080714000000000000000000000000000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000f300c200000000410041000060660cf90784c2a1f88c4a2796404089641c08050304587044241b06430ae87042221b247241163a275265c2712260a91d017305d0788d16a6c3f14402c4e112225432b44252625472829492a2b274c2d274e2c894f203132423334339c45363738393a3d6bad61400b3 | ||
176 | EOL | ||
177 | $img{forum}=<<'EOL'; | ||
178 | 749464839316410041003e0000ffffff000000efefef4c4c4cdfdfdf151515dbabdbffafff0000ffb70000ff0000b797b70000b7ffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f000c200000000410041000040370f9c94bad702beb55bfdc160404699582e7027a5914624979a0f0e2b0b0441e6f4d9f23c8a7739c9e1f20c1882b90042104462060303f74d3c100653c1ca54a404bbd8a7d759ce2baf5039e25a5e7fb161763b7e73cdb784490cc110a090d7e787b01890a8a887c0e8820580c060c08069c01100b3 | ||
179 | EOL | ||
180 | $img{home}=<<'EOL'; | ||
181 | 749464839316410041006c0000000000acacac989898cececededede8e8e8e4e4e4e9e9e9e0e0e0ecdcdcdeeeeee5e5e5e1e1e1e8d8d8d4d4d4daeaeae6e6e6edddddd0d0d0dbcbcbcfefefe2e2e2e9d9d9d5d5d5dcccccc8c8c8c3c3c3cbebebe7e7e7eedededadadad1d1d1d4c4c4cfbfbfbbbbbbb0f0f0f3e3e3e6d6d6ddcdcdc9c9c9c0c0c0c7b7b7bfdfdfdbdbdbd5c5c5ccbcbcb8b8b8b3b3b3b7d7d7d9b9b9b2b2b2bdbdbdb4b4b4bfafafa3d3d3d0b0b0bcacacafcfcfc7f7f7f5b5b5b1b1b1b8a8a8adadada4a4a4a9a9a9a5a5a5a0a0a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000f700c2000000004100410000708c08f7283848586878f7000038a8b88828001010e819e88859599839f859203089b978d9405060591a583a706080908968d9a070b0c090d0e099481bf001c0117b21319ba9002041cb51116171218191a199d941b1c151d1e171f1ec021222895c3230c1427d52f1627202822292d809305042a2b2d800c282d2e2f269985a80b203004c0915c668b0a1538f1006590068d000d0489088143e60e0585be65e000a3a141bd1c3074f058fbc14038821978f8e1f341e2b66914021410e30840112a0be9ecd9f8a7e0a0400b3 | ||
182 | EOL | ||
183 | $img{equipa}=<<'EOL'; | ||
184 | 749464839316410041002c0000000000dbabdbffafff0000ff0000b7ffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f401046007000c2000000004100410000300687abcdef0d18941c9a4b1e977bb02409d10a8c5330836a2c8b0016bc1cae9c4932e6fb51fe230001168a80a068407c0801818351bc6e318e9d858a89e46b1abb67595bb2be779856862bbed24936fea8d3839b8242e5ae94413d9308ee7a709000b3 | ||
185 | EOL | ||
186 | $img{conta}=<<'EOL'; | ||
187 | 749464839316410041003e0000656565750a30867a3074893097fa20a86b20b9eb10ba5c10cbcc10dc4d00edbd00fe2e0074994074994074994074994012ef4137474696f60457e63756365727964797e2f6277600129f40104600f000c200000000410041000040a70f9c94100a83b5014ceb9d40c03474416c1808a196d961290b59bf008e50824b85ae9205f423ae8e453ca89a01b958a27a49c87697215a905c24198595f63dd67f0684a8c2c5409b0403b8ab616b743515fb4018e10c9442b50f30a7c32260c4c11881b3b5f1c6788898b7a658400855f4f10087b1f551b9911100b3 | ||
188 | EOL | ||
189 | $img{jog}=<<'EOL'; | ||
190 | 749464839316410041002c0000000000dbabdbffafff0000ff37573700003774994074994012ef4137474696f60457e63756365727964797e2f6277600129f401046007000c200000000410041000030e487abcdef032894964553bccc1cbecd70401083933196a7f50280568fd04a0d1a3ab0ba51e5fe13bc767b3d4be5abe14648c7927941ed561924216a78cdea0cd2c54b4aea77930e608b384797190000b3 | ||
191 | EOL | ||
192 | $img{bg}=<<'EOL'; | ||
193 | 749464839316410041003e0000935902651902c4290237e802243902d7d80219b81296f80268c802934902f50902a3490264390200000000000000000012ef4137474696f60457e63756365727964797e2f6277600c20000000041004100004066018c94badb83bedc17802c51a51c0400241320581385702490640211e654f15512b493ac0c0b29c0d6080e40160bc0f59c7526268665e9049e4a5e43822b089a4e04cba1e41da0101c3a8238b8901a0860820a823cf4da8f40eb31703030c0d168788898711100b3 | ||
194 | EOL | ||
195 | $img{logo}=<<'EOL'; | ||
196 | 749464839316091005007e0000ffffffffffccffff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff6600ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc6666996666666666336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cccc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc3333993333663333333333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc0099990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc000099000066000033000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12ffb0e45445353414055423e203301000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000091005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea637f01f681141784026a40218c123fe122849218802788eb284025a0224fa921f2dbcaeaae9eb405c8a7033cd0da0b283c21b9ad035c80f4caaea4752d905a145ce2318c5322f8c188515585162b51234ac2885332fbc008e697d57db69708527841f5ee6faf1b23ca4ec49d57fc997761570d9dce51371d502c28377373b6c54b4694d089a52c51de4f5d83b0683f4d4ba27cbe1d5c9dc57d6db374733f371ea8dc497774b9d15aeae13550158cf2bc05650864defa0650b2f2b5179534d956481d0ec151e4a9b965c5391b5cc03007d85188b446870e48b0e99d5ea9f1e8935e9937eb9b5e0af8e2a79e59f9e995798950837b3db2cbc7dc31b957c4050067ffca5ef80ce9be2eeea575a659a0223980de5bbb69b6c34b5cfeabc8fd2b3feb2afe7c7a82df2f5cb8b1d72f3db6f8d6feadb5f8c67f9df4f6ba1f891391ba230bbc0e717c0be2e7d0c978aede9e6cc9fcefa214528fd1fb49911deb92af928644801bb551e37c7205110b35004909001246f3d49aee35b04b0530d04d041b8e92e2bc08d10ee250190b4fd2266eb6849026697bb6927812e6b510d56b2619f9000661323f852bc052c951041ca08240a1df496ef14951490ad6efb1f8ddea1d4b6e8da6c3bb2026e9ea668167989ec688926da96c63791ad69ca8f618227ccf292c3c0313a885473151f13c5a01164a81d1bccc05c3857123dab602013721d17f0cfbb60ff85118851454248401ebd119f73b804c2c0f718486cbccf4799a2c51622d738dd53af8029a0e23650188d3ee1bf8da368062f560582942ee636b925292f496ac452a237563465211b880b3212b9c125c916d35650b7495a232000f36584e4a7301bdd8c00757aa24b2446b78899a1f7274c19dfba41650f3213650ffa54e05af6eb4b24c0401a8429d011a6c4221ce1989201c5a8c851e24b4d230a097c372dbc09079d357dcc8d71dfc51303ffef1411a13e373cfb4d72d41549990dc96261b7e892b8b517fc49a254fbbf12bc38d4921ad130974c7e1afe00dd465090449ac08fd42bc7501bbdc2e9755984a42f562802849206730911e24d3a7d0b6400e324c0918331d2501f8602eb9201004b3f4ac83ec4407d8821b4634228809b0620742f04a5eb409ac015a69989a54d7aad44aa5113a2162c78018dd2ce05d09cd51dc001d8191bf2a4659008bc4468739993540142b812340ea22b040b0b120b32c5b3591cec885207507cc37a9be72558191b2037a51f82a334420966e7050a02a14db98a8022006a0919392686bf405a72f264a632a3b9ae3a4e8389e395618689d9ce0d8a717b95a35792be34eff183f72e7dcc89354629be4a08e57323b8a14609775019fcc99a7b0a4e5df9dcc30c5322637418416789c1182cbca40dc2af5e156a92a66682b1a283c3526643b5a21a05374d6cecce8acbe642f296ecbbe55f6966941ba58674ea69e2dc0ce84a34d480621d6d390cae111359a184b376a75966e0191b592896e69587cd4a28ce56188d38d09944c8c3e1699409b8ba97d7203d3ce44a99138cf56aa04f2c09086513d0a08a38a4c90248ae40d8831bc452fb458bf6d0ece8cb18dd107e67818c9d553303d346853aac39e033423c57d880847020bbd82be06730d70fbc66abe2929369a2dec51c6ca18074ba433ba0a5ddb8a05431ad4b586eb6a24cd4efd71c9b168a1a9fccb6ee95a7ddc6e2cf92ba5911dd0384798c018d53d2cc6582b602eb4ac0ff605bcb55ebfa24c1bc8c580f5a99f36ca438922dc4f03a67eaf2390b2487b7eccf1a6b8109ef0ffd4ccb2cd90674d85a122abba37393a95c4c94ad14077e6229f995f4e26db1b98a3a103abe3c4d81689b6743865750b3650f19e5ffad712b15a37b7ea8c25a82ad2b65ad98b35fdbc2f7ca4680c4fa140628438d85dccd3ccea921a63a45ada0058810ab360058595514609e639e8c894dc461020f85564ec4f35868e5e1bf032bb1ee5d29d226b46611ea855b4a1be99a62b501af353232e8fa1b21a629263db8f8ba014ca2a99175a7ffd8e6e9628ce1ef06713be03be88a651e43e63950569fa238ea22ba28ca13203fb604b70268e36ffbce5fecc71eb09d30b14335a6e23fbadba932d8a90ebade49fdc803db2772626d5e68d8263572a49a993bad4db85b07cb40e2dbdc188aeb591550bb5a49a2e55983854021308824a38b5e5f634813239627fbccf84178a14ab824288529e47d409b274b71322e735beac799244b895138a62cf2eb5b273fe2a92d760fc4550565d9d38346f8ac4c398da457cd5584ad7de1c94a8100a1737f94c2f5978326c6b71653f14325fb50bbf1715e8b5eda973e92df2b34c146bdc97ddec9b1b77f9a3da5dcda57a27ecbe45ffc9fa90edbec3faee27ccfee25f7aa01fe0db5c3eff08f1f5be55b35b1d34d591bfde85dd1bd12ad630ea99eb53a77ea6f36a607c5a99e89f0533fce53dcbadfa366815723abc8633a95694a33445ba52c6743b14d070e28e7dc5973e075a60772b59438833181813e5d61ca50349c7257645e910b3126ba6008877651ba7818fb6c20be3f27f23d50ef3a713c15b7d55f23df6ab7af6b015e6c75d06363097c97a515372464a1c57a468a6ba35385a6d66e91ba6418593ee73c78478659a32a42766261532f54487918e5b24cd54f4763d310153b4c24021e55827025ec6223113f67cc31835b7e51c250c61257d61646f7825141568bc5707c07d11c86b61995387157c14ac1258197b58558e87af1f01df7ef444a38da3f78d978e73d31772572182725a5067c760572e7587202cf5dc3f23704df6a722d57d6ac07382c64542672775343742563c39a6ba8394522e14265514e13244d01537f76221d13992115d45e05182512682538183ed5f745214c8ea1314a31bc32752043b7d72076708a619674f5891dc5301dc47655538a6868a27925bb8511a27df3ac1d68b67ea8ce2481ea81963c5423e278e7b866503222876c3976e47e065d21927c72e2416248571b440f5807cc31e5964a57152cf77348e1544248c66796576e456d1e09f57928118d315f7a27216057461dc42b4ef5f33e071e2035180f31d76b84383438c72bb61b7fb5f23696009ad72c35b5a28defb5a078e3866314098758748393ac79d76c78d73984318587f6c39398da8878ec73e51f5d331a1d11b336d6db5f39901249be87d0da0108d05b29851035e75ed5a91dc4335822af7bb24f7172d137f75511000b31008045053a8d19a41ad54a5a72c212b88c2bc4a821e3bb8818bb3326c88288865a79cd30a7a09265607024e95a54b88a39ea2c143486017a8ba5408e12a272b40c33221a8668801ef5180556d42016436fd6891369358929c01dc4080ad89e5869499139c655f8fa2f24a390a39f5c15446d39a899a1b481a3131b13c992812b63928b9687d94d64727682163e774b35415c89640c52d7034974b99034a27f599d6741a85bf7e493c340ef9dc4481643f67353306383ee7ca0ed8851e85533488508d53af1591a447a63e38f15d5692a571f94795d59f49f3253957cb8658333c55ec2a079b6ea42491e89b58a65a69075527444e4608ac0828575183a85788c51420434a74424ba60b3706cb75342493011b79915202b03230d0e28611a175733a6a21409a476b93e72317471b1f2a1b9ca66c74043b8b55f74647db86d76d8743c66ca5243c17716c38d225b9b86323066d933417b56b7709ec68f73216732b0c35ba3de4e4a2967774431526690221000d9d127412e415a651035559dd963ab72687954d294925f7f130a7908c444896f9b53679fc8be2489497258918f66fb6b18f080b2421799ef0a4436639e489016250838186e4eb4358f5a01aa71100ba019a482a01bd632879a5c6939520294420fa53a8685cc5046193721d9a377211fb24869f9cb9f21e193329b9976dc5076cb8a133b47c84c9fa9ec9ee8b264f8c0853a607322bd6016406ca3b89b09102194ca01a44155759e48815624e7123eb4c35c73e73b856725517b5ed40413ca394335314341a20f35459a56da32c4ee49e6b34123180b152541875c681a08a448d2ab050c45c9711b53b381737810d23e7afa714c3a2d20cae68cc8095fc7f44d28ee34586d7941c73ce6ad4b34ce62305508772c583a9ba501100567ac69c6f85848572891650d37717c346c8922723ff2550944bc0bef1bde6f40650c20723823d22201de6923c73923ac4111901f40fe4880af2523358b9632b523050f59319ba5d78609eaa1899aaaf4398d04ea9dfa211005d72aaa3b80d21881179a15d7aa58b983a3159952895ba7c816acf11244214199669fafb66b64196090b273a316229739f5b5182835793935f4275c36fc2b49b6af572c7d29ba6593a7ae051a1c5bbf9148c38264628279db9174698f97cd2cfa1c5eb90e5e05fd78065faf48346d28a87607bc02c9be237b435e961a7d6bbb7c556d8236a0b2e91535d9397ef97088a3ff1df945be57fb360b80b9f82f3a09c975abb0bd475521c6ab9486a5545be6ae54595c45ee85c55897754f437969bdf4c8ef45393f38e7cf6376fd8c9b4493d7fbae5b024df672bbf6cb3804a8808bf58787b9378b7c7317c69f3a493539f48be9353f076fa2152c855b0c3a43a072c7019daaae9053e19466e9370c5499c8ad7e6a949d07d2ad91962ff3ab2bb3ca1a6a9fa163273e8837489737b451ddb466884117531e1ab497ca331e087d30070e531ad6249854a6980d70621c87a54220d3c53fa983c6336837d10842cb064127fd2f02128fd5265444b386265c9395ffac15f7b81c8f4ad7e083f8757933ee90c34e1bfaaeba95f717ca85774816b5764ebc2c1cbb4a6a60587cbe65307e82df995ceba9648f6e433161a3d89fd3c4400a345e53976009d5c7b6e116363e5b64ef0076bb9dab2ab81df133aa183cbe683bb85321805bd8137b114ef8f7b0b99f806c70c65870abb6fb387b88832cf874d206c3916b6758a6616cbbab4be8762cdb95911570171acd6cf22a494b96f855c91b6cb42c88b055087a2cd866a32c8e63cfbf7b563da7e190a15497f929561243a90bb76a18acb77541ccb616648ce7874c93c0eb31a4e65a09c6b7008075062308a579a381026acb0cf08ee949b0b94790f9ecc599cd13d29973b9ff956ce4c2c5bf8acbdf75fa5ba49146387930b3363a4b95836aebc6a75cf5412cd429721eadbc7016c6ca004b4f2d50b70823823ce3009e3ac326c9ea496c3acaeb80c3dcfebf77f7c4ac2e1389779e9b3eb9ef0b3396c75bb02d8a127c18b9c9fa42ebb5c56b0e234b6e24a5a9b117b1c971180da0e0d9174f2080523823050b2bba9e1cf0796bd72dc7d7b73285bee9bd336c795c0565cd49daaf8b368a97689d09f2de63f09bf83db207405ccc988de32cbe2de6cafcd4bc72d81e39ec9533ee7da3fc89917dae0d1802034f2650d50823ce60133aa95cc54d89aaa705ffb9ccc6c718c2ddf6c59f91d4543daf936cbc9c9ce2cb7b819b2112116ba9b57d5f5907514907d6abc3a661c8f8728bc69b0c5712231d06d0e0d7c64f231d51d1d408d997bb25a1c8b74a3f507da5c582f09114b79a9cdbcbd34c9ec9b9cb7b8fabc879b0244c375bfd514ac32dab91c7fb75ef7315836fbbf57c3a709b2dd1cfeb80565825bc01e733b06d004dca040314bc5054d650f40f7db20100fcabb9417c89f3cf7b45709d8e360c7fdc113ba5d926bc91afc1d877af9891cc555ccb399e5abcb72e452bc64a6a141c16c29788c1b686335bab57bd9b833763c7aa7d01d02b0dadcdcd50a7064d13008d520600f6cabc6cc80496bdb887cf9de6cc0ddd2b82177ac3c8590a2ecd6c339d2e5f8cbb811fd8088389d0900c5f7ee3566c2efeb34c32de1a5185bb9fdf3c2bc67a68361aa74a74f0d5a0503edcc5041db20f40013600520039afdbfcbdb454d9c76d7a39d647a45c69d8f8d4ec4dd7bb47cab7acec295db3cefd0a1d5cde3cf94bae9cef907ef628b2dc9db897bf938213299dbaaeac753d77b29e1efe49eda2308d700eea88726c88b92ef2e65814c60e83d92c98b37ed4d43213ed0217ca0c8a63ec3f97dbe6a366d07dcbfa586efcb81e298d4469e4cba3d7dd12719dafc6988917d5da00d087d14ba70d7d823b2b51b01334484bccd4527f416306d50cbc9a827ae064ec931af8b8fd0653e7b9800684ea7e90937c47d9f969eafad0bf4bae457ec0bdde9e39f65c5879d0c89b8936488845d994126d294d1e6c6ba0a7dddcfdc623c2008d600e742fac2d27e28b50852de0e5a41fcc84cebf47ab58c200923a66c488b4654e827abaa63cfd6665bc06529b27e1ab15628bbacc729f5507e19cef89fb6d52f2e5c0f233b00d04ed4e9d8ec5012e823b5e013100f9ad6249b54488867267a10d01ce61f3e48bb6e81826c38714e8eb1fdfc128ed0444f68748c7221b116cfce50ea3af9e3170bb67cebb018eac9e9f9b0f5a54bae1770b3c2fdadb171162ce51d08d5b869ee4dc7caf6c2a76d3cc20fdb6032cdb65df21073d8998dd3a42ddaa35d457191f3987c1092ac9dd2fe8085a82ba02f53a7ebe6d62a47f1d76fad410b30d03b06c63f29c6180a70bfef40230efefd42dd5bc5a804a30e8bcfe5c559b3efb0cbae1deb86c90c26d9631e1298f8df7ecac89d61faebafcc6d68d2173ba9fb1bb3c9bc9c1d94b88fddbbb6248294dadca0503d509ed74efd09e55ae1dd4e0cd3c67958e945b00dfabc188deceee2d4ecffc0926af5eb2bb0cf4cb19947630c55ce8c64ff5f5a5a3d46bf6f90442f9dc643b3d058776cc3f233edcad6c600334d750001c5ca85191f485ca851a22082b564ca123478ac4951388bc81a44a8617265cb8b192674b812f2a6419915229456e055e840911732a419a2d2a9cc8e216264e81132ec40971f3a84f90138a54d9f0d42b4292319e8c2ab395e350a62156f4e922dae2dd8c1f52352a04b467cf8251be5d69f0b1295d8413c6a4fac6dded48a24fadc5abcacead514184f60a1830ba0244852491497a263d285aab5976dccaa6b1f9ca8a41523e3b833464c5bd6d624ea955796cefc9c24ba26ee962d9ed47cf27332eea17b866dac4177ac42d6af0fc6e9aa9cad67bc2b63764a4c632de1dc1d07e4fcf958b3eba9bb33e469ca8ee53653bee60a34a75f471d33095cf54800658231c59f2f0ffa793738efc17fbab77ade5d7263b7a947afb8b2b3b356e097a6afdc872cdcf3aae7b3caba10b931e0eaffcfb3d89a4c8b25c69aefad23b45b1b02b6f03cb96eb7e8247be8b1a0d32f6abb60a9bb859db4faeb850b200b512086be726986c3ac9b6944b50704a94438d03c4d25bafeca5038b2da7b6dad26d2fb1d61342d14898fb7c48c321d27a84b707f3f0d7462fda8c40c60784bfebc90b345c8834f20430b84b0d52a139af2d5a235999ef56ea864694130135854eecfa380123065021c320e6dbf152390b9bc13cc0a4b24b4e3207d2cd8d4e86e3223936090cfae343fe4a225ebd1d3bbf69c82b238ae145fe1cf159bb49252553cbda83b190c6f6d27f8da5ec743f64564db2d9650ab2a1aeeeace6faebca00fa488138b3fc2d903236d245445bcc5515ac805d1d4d3e41d42375d5b055ac1317d3d1beacd5b8b42965dc4b53e434ac633df225bc47b0116d1ae5b6d4bcb5b9de298ce7b031a6bd64b1c53b53c65429e661b6ee244a49cb209deafa284604845830aeda27ed8d4edc47ebe9c7bac20cdaa258217294b5b8f8bd055d56974ccc21cd7b255aee3e57f545315d4925e6b04e731bb9b6ef43953624d0615b9cc936590f9333176035919e68dbe65c36f900ca4891d15b9e35475735ae7cd8d3be0bb60b93c89fa2d73330a9edf906eb5bbc79d8269f1d3511c477d29da9d403edbb375ad6443a5c2bbfb5b29e329f153a72cbbbc5c17860e6929e2fc554f2e26f098f9881012bc05ddca7435d24971ad8ac3572f64fa57ec69ed15f3eba0f52c97b1abfee4b3e6491bdbf25c556755d372a3e684392dddb6b71e6245aa28172c2fb6d418f437c654bbcda89b040a665e1661702910a0484941ed9d9b1bd023974eb147bd1480317fc792a91cccd983f6b9ffd3f5231ded9dccd2d6713355bf3d79974c7c20624ddcbd1dbc07e52645bde04b3a9d568ef096af3325b5c41ca868de5001758ee02b850deae419ccb7133011d8e84fc1115ef8559baad110977172af127e97f695947ece500b4c1f60e67129ddab4571126791c406febd0dfd4477a3df9ef8473fb22d7fcd7c912d4954e41885505f001d58715101c65d2a5d37488043d75beae5d6a3018fc843e25b5266d6ffa0d9482e23e2bdd01bf592b0a0cee5353bb718e4460aa6a1bbe57ef3f0afee583049b1ef0187da7354ba556a2c26592b66593ed4be8694cd95f48d81a3f75029d3a4300ea7e5326150ecb4a454b612ffeb69b3f91edea65f1306da208dbbd0afbe24d0c76dcfe57b9241ab178470be12888e583c194ab636cc227d11507e5af22ea8bac62a47bcdc6290cce5da03e25691edcbe82a64fcdd804971a79da0fa629c44df6ef766adf08ea698f331e69e13bac0d04a807abb61a4b0e73d45168c2a4264d8949ca925aef42177873422af8af304b4366ea041fb195a09f7fea625111465d238e11f037d25f5ddcb8cbc74682944064501ace7794b32198466832a8e7334933b8dd39ce7de44c091d48974f2e6dcd9c1a6a4994b681c31e139f8005ea13de683733dde6e4786bc4eae2437f31a1cded610550ef1907fb9e8283b2ac52de50d2b5d490f9ab6568cb080000129f4010a000ff00c2e0000000281005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfefd0c38b0788ca401ba048cda402b26568fc6650d7512f4ebc997377edadad538e0d50d47becc75ef859518d55f5b65cdf8b4ffe1e7cfa02f5ed4f5b9f9ef8357be2efdfbf8f4a7ef53b68e517ba8777f587558e70f1f70adc7dacf79ed479c957c28e700428a0676efd67f0ad7ac957550b070eb751e58e95684f1770165765c78af9a01000042276626d718ca7d12e7af500a2c881366662a68cd118180027508780eb8036f889dc8a1a02be502750028f9b7b2ce8b2429a4a56f36d724249ded19000699525633a5382ad8252e822ee826e8929df8102b2302480e159226b9e6246566776f14944237c2a88f2aa09729933e384720a45aa07560058e46916b2002a8c1aa8026e865e3a09af72922ace9a9b2cb8a9e6a3fd4a0d148f768779e59c8e8a4a20905822279a60afe93aeaeb9ff57a7ae471528712e5961edaf89f7c524854a51c28d92c299ca4c953aca654a94be2b599381d9097ca2a1c25b291f98ae1b0227ba99c9d5a572ee9b8e6abaeeabce6bbb650400129f4010a000ff00c2d1000000371005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfe99ca401ba044cda402b265e73a665cc7511f2e7c197275e2adad536ecc50d379e8c75859514df3eff5b658d78b3fdeddfbfa00f1e73f5b7f5e783479eed7dfaf6f99fdf53b64e38fa2de3f577558d7ce1e759db7dace75ed375c947c28d70041860a46afd57b0ac76c947550b030ea711e48395580f167c064765c686f9a01000002646226c718c97912d76f500a2c78d2a3622a588d108180027507740ea8c26e8d8db861a027e502750024f9a7b2cd8b241964e26b36c7e32399ed090005955626f2a5342ac8e42d8e1ed8e5e7978de8df1b2ff138cd149e16a9a6616166672f1390422782a78b2aa057289f2e28072f905aa03560018226516b2cf19881a98c16d825e2ac8ae7e821a8e999b2ca869e5afed3acc138b767739e4988e7a0a2f8422175a6f9b4be92aaaea9bf56a3ae37d4277d1e4921eca489e78523814a51c28c9eb289ca4b913aba654990be1ba8928dc9f83ca1adb24b781e94ae0bc126bf89b995a47ede8b4e69b6ee9b8e6ab0450400129f4010a000ff00c2c2000000461005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37be63aca401ba040cda402b26567776658c7510f0e3c987173e79dad534e8c50d277e4c75859510d92f5b654df7efb2fbe9d7bfa0eedd12f5b5f1ef73377eadfcf9f4fe87df53b60eb7fa2befe3b7519f8e1d7a8da7dacd71ed271c937c28c70040820e166fd4770ab72c937550b0ffd97d0e3888548ce1578063765c582f9a010000c1a16e16b718c87512c72f500a2c6892e06e1a484d1f7180027506700e98826d828da821a023e502750020f997b2cc8b240924206736b7a32295edf80004915af5b2a5302ab8a42c8a1ec8a5e69c7dd89f1b2bf1288d139a169966ae5d5657ee129c321742a6872aa017279b2e18c62e9c4aa0f4600d76f5116b28f18841a88816c8e4e1a88ad7a820a4e989b2c9829e4abed2a8c12877667f8e3948e6ac92e8022071a6e97e91a6ae99647f55af9e279426791e39e0eba979d745228d3a51c28b9ab279ca4a9d2aaa65489cae0bf79189c9e8fba0a9b23bc71d90aefa8125b489a955a37ade7b0e68b2ee8b4e69b5150400129f4010a000ff00c2b3000000551005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bde4aca401ba04cbda402b265e6b46654c751feedfb187071ec8dad532e4c50d175e0c7585951cc31f5b650d77b1f9e5dfaeffa0ce9db0f5b3fdd773275e6d7cf8f2f38fcf53b6cd37fa29ebeba7517f4e1effd3fdacc7ddd17db927c28b7004f7ef1f52fd3730aa7eb927550b0bfd8790e28d75388e1474062765c48ee9a01000081ee5a16a718c77112b7ee500a2c58522e5a1a380d1e71800275057cfd88426c877d98e0a02fd50275002ce987b2cb8b24f8e36d5336a7632191ede800039d4ec572a53c1aa8642b861eb865e5917dc85f1b27f1184d1296168926eb595647ae1198320702a5832aa0d626972e08862d984aa0b460097ac5d06b24f17801a78416b8a4e0a48ac7682f90e979b2c88e8e3a7ed1a4c11837657b8e2908e5a892d8c12f6d96d93e90a2ae893f54ab9e17045425751e29a0eaae69c70521893a51c28a96b269ca49992a9a654798aefa479085c9d8bbaf95b22b171c9c9eea4124b9799915a276de6bcd67bede7b0eaf810100129f4010a000ff00c294000000741005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce6bca401ba048bda402b26566326650c751eecdbb977f6fd28dad530e0c50d073ecb75859518cffe5b65ccf6b0f7e1d7afa0ae5d7fefe5b1f9df63173e2dfbf7f0f977cf53b68db6fa27e7e3a7515f0e9d7dd1fdaed76f1e9b917c28a7004e7af9c5eed27ff997ab917550b07fd7750e18375284e1370061765c38ae9a010000416c56169718c67d02a7ae500a2c4812ab561a28cc1d718002750478fd78026b8d6d88a0a02bd502750028e977b2ca8b24e8a3ea5f269723209dddd800029946a532a5381a98242a821ea825e4976db81f1b23f1080d11921679e5695556376e109432f6c1a48f1aa09625932ef7462c944aa074600572a5906b20f168c0a68016a864ef908ab7282e9cd969b2c78a8e2a3ed0a0c108f664778e19c7e4a492c8812e6996c9fd9f9e9e79fe53a79e071424711e19b360e9a469b7c420853a51c28992b259ca48952a8a654694aeeaa69f71c9c87bae91b21b761b989eda0123bf6989d4a172de5b8d66bade6bcd26610100129f4010a000ff00c245000000c31005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d56959026518a6b590465ca0c60ccaa7faaad6b177e6ddbb5fa5bb6dbb7b020e3c37fa0b2b2a8fddb6da293defdccd934f511d5afcdb60edaef3de0e3cf9377eeed3e28fb66daabce55bc9cb3fa27ebb7af6b0eb51b7be0cd6f07617e1006fdd7a6da78c1f73edd63c551c20d7cd90840ea5606879c5f72c951c0e97a24000044896d482e5028d9285ed97108a001a7866d48706271f50208c51dc5d7c1678a269502e182806718c5108497bdda082ea063ed8361b82edb8d3a674320054a19161886d45832ef852e3882e3905e75c2ab7ca0c7df53714e38a5e69d5949acd87d36c89b568f0278a289915288cf589d6609a2019108c906918da4b7516287163862e09c76f9bedf95766775ea0c1e1a88287086f6df1b9ec11a446e90964ad26585b95ae6277b7e6ac52b7a825a0c9f8dc93844e084a27573be529df9c8650b036eba152b2e5a88f9a516568a8ba85bf9f6f22da77aba1ce759665a4b6389ce95f5a293cd3b4d65b6de5b8d66b6750400129f4010a000ff00c246000000c21005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5db095902651826b590465ca0b6abca27faa8d2b967d6bd7bdda5bb69b37b02edfbb6fa0b2b228fadb6daa83cedd8c5933f51dcd9f9db6cd5a3ceedfb79ef367ceadbc27fb66d2abbe557c1cb2fa23e3b79f0bcdb51a79ecb56ff6613e108cf9fe5d974c1e7fddc6fb551c20c78d9f700e75206775c5e7eb95180e87a240000438d5d38ed5024d9181ed87108a0c0a68a5d3830617de50208c519c5c78166862665c1e082805718c51084877dda042ea023ec8751a8edda893a570320014a09551786d448f1ee812e2842e29c4e4582aa7ca0b79f527d3e2865e59159396cd77936b85b558b0268a2889d42788f579966f8a2009108b945908da4a7116183162822ef8876e97ede91765735ea081e0a48277c76e69f1a9ac10a046d9c863a926481b94aa626777e5a852a76824acb9e89c92804ef70a2457e5199f9b823650b0f5eaad42b2a5a78b9a512567a4ba557f9e6b22ca37aaadbe455664a0b6285ce65b5a19fbd2b0d64b2de4b4d65b2450400129f4010a000ff00c267000000a11005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab433665288550a5d6520951b26a1d2ba9dba653b67dfa167c61b6deadce9d28c67ee7db2caca8ddf5fa5bafdaab6b072e6c75c174eb5fa9576eaaf67ee2e2d5a35fca6dfaef95b5e8a75507de4cba47f9efdbaa5f652e99bd66d9b9547700cebdb4d0feb5e76f6d9b551c28a72d1e7afd45cfd57fbdc78b95120677a240000c18155288d502ec108bd577108a060258e4528dfdf67e50208c513cda721e4802635616f72883718c5108c671dda0e1ea0c26b8b49888d59833247a2200b32f8949586dc28916d8b1618e161964e1522297ca8973fd077361805649541290c56733e98fad3850a48a207974a582fd5936ed8a28e8100a9841f7dac87b0ef7d0e08c16e827ec91e5d9b6e37d4ea0216f9e7a5767ec63f9894c9e9a3eb968e1a32e28ba13a46a471764a25a8708a2a6b1d83c118a36e7a92151edf83f1a8650b09569a742b2b24526859a51c4e5aeaa251f1d652aaad629a7be15f5e2aaae08fbe35552099b51bace2bcc63bece3b21504000129f4010a000ff00c2880000008010f4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b760cca8550a1d18ca496b2f9bb686652844396b20b167a6ca7d653ba55faf4b59a2c2654599d45fa95badca759022dab16fa85e0c3ae5bb6dac6bbe0408ea4c6fddb9973f6afcf9b53bd8c57ef3b8a2bcbcf676add9554f0d18c5f59ae7d3b308517e5967f7e2d9430a4e4ebcfcfaf845776d4b2fd5177cd86650020bd87efda00000864dd78f1873ad512e9515e938ff14834948ca0172a1e680a57bb567b2400a2000f0278249480268670ee7a02c6dfd98a2400b22b80497850a02222281b16881ea073aa8a3605e2ea70322714668a286874ee8dd1180e988fe198816f782a1915af4e2618ce9e714a98822e8d5a797f9a7ba50270a581b1f691aa84fd99c39b82d9886adb934af7932d9a35a9062b9fa198c0e2727af9d3948a4ed68cdc8c2ce9e0ec988ee49e5f8d826907af73962a9e9d6702094366829e6af7218a4ef8976c76e19ac9289ca13932f6eaaca6f4a62b787a8707eca14158fadb9ab2152a9b7332a6fb61b6ce1b8c62b0060400129f4010a000ff00c2b90000005f00f4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc89b23b26518a3702b2f9da4668ab995902ece9da8a65d3a79e5b2dca655ae0d65aa0b85155a5f1db66de5b9e5528c33d65db2a8be62a7dea5b28d8a3010ab2ba17fd63e7c1862f4e6d06b07adc2aa41ffe5df7efe5765bc737024d75e974f9e006548fe97d39337fc0868b7ffedefdfecbe6da556ffd1c57665002aa5778fda0008e7935c72f967d9d51cd951fd1289f92863138ca8f6c99c6202475bd47b2400a200090a5853138a1e66106d740aa67f588a240052a9833168ff902c1a08ba94821ea013298432d482697a2a07b3e48a2058146d87d9f7ad1789e97821ed722209b46c482ef76e1d7b328822ac8752691f1975a50210248ba9d631298ee589f21a8cc1780a5a9d32e733ab9d2d89a5a999a97860617c62e903138446c62c5b8c24d9806b928ab43edd878a49a62e7d8e0a3e1c610ae8e2e48c865a97af7446e837ea70e97a69a696a9199669a6a2c446a97c127277a66ba439389a5a94bed4c91a7d2a869befa0c60b2ce0bc6504000129f4010a000ff00c2fa0000001e00a4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e2bca401ba0409da402b26561b2565897514e8c3992756bc44dad53cc8950d66fc4975859510a38e5b654af1b6e3d9a75fa06ddab7e5bdd1bf1376fcaaf6fdecdb377f53b60bb1fa23dfb357511e8b98fdcdddae87cedc19d33b01e002ab47a96c74eff57fd29d375161fcf677ffe533c3f62d8db3b593f2c5540000ce76abfed18667970e2c500a2ca79f1c4ee9874a13718002750a60ddd78f518f2de72e9023b502750020c9d6b2c08b2448216b4706f6a02685bd380008812ea4bf9530f9f7a1208aed08a2ea892d189c1b2bc1678a178ae5d863e94d2696eb168c02564f9a77f9a0142b8bfd57c3229c1aa0f1600d4aa41e5b28c1c74e9c78e508e1e5985a17a52494b9c8b2cd726e89bbd6989167746a6f5e7845ea9c62280f146176297b95967ed87c599f6e66912a69ed78eddf96291742267d0a51c28f8a82b8ca4e8df9e9654c8c7e4ac295799928f8a499827a9211907e3a8e19a139e852a76aaeba800b6ca2becad5504000129f4010a000ff00c2fb0000001d0024000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb87192b214ca209f5b218ca859cbc49591e55e7ff6061c3890b15b67dc0b16149891b0e51656583e1a7da594eeb88b2f5eccb243f6ef97d25f7eeba89136e2d5af47fc4d7dca97edbba827bebc5506b969d93357baadf931ff56cc206308fd0cd62de8c5c953066c55854fe2dbcb9fdc7eaa52b1f5c65aafe3c651100086fa9cd7570a0d3dd53ce00a22bf9799cd1ab46dd1800d51bcebbcb9f9f135a70d9021a50275002ea196b24c7b2cf700eb45fda68f9183a5f700838f06b49e953ed1b780ab78d5c781668b25d77b1b29b917699288dd88426a4b1e46ca918af9062e1675e9a0f2a689e517a2ad8a0aa0d0600b32b4fc5b26b9772d1876ddb7c0619642d684af82a188b2497056499a5296891753e56d463824669a5ad7ed9f5f5ed85a119466985bd49d562670a567d538cc5b9821d621a17bf951c20b887a68cac98be1a965c78a660ae2117781e7d720977a2ab29c8e56f96d94a331a8312368967ae9e7a0a68a9750400129f4010a000ff00c28c0000008c0003000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4578ca401ba0485da402b2656aa7da8ca2cea2ca957b27deaf53d234b67d2c6851446fc27d5165658adbb60fa5b27b757c6cd9b57758d5cb87fa916eb75bce95ab28503165b68fa95bdb55751c55c37ba43e1cf87aa1e65299f29dca769543600c9b334d8cd654726da76ba0b0dc2815bae8acaf0bbd1d66da8ce6ca220008bdf43732e04e716f2e6c10458d62ec4377b67b793010ab22773b0f1e0d79a1f6d28cf6c60ab2086170e51ec7507fee945a32eae3e10b6700be9df153e6d6772f2fbcb6b3faf6f5152d156ca8563a9c57e5d600608341e7f65263ed57c5df65b907a20387f9172ad1831e97a28a710068641b6dac46bbdb6dbdc6cc5a722e8819598b1ef5dfda02c5b8e2a16626853a948379a8aed7863ed83dde6851f841a061260920a4603ae846197271d6ae5a6a4a0519db73a167650b0906597f1b24022754a51cfd19e52251a9855d969d125976615f0ee8a5ec6f6635502c7765d9a7ee9c76f9e7ef9086c410100129f4010a000ff00c29c0000007c00d1000080ef00ff90c184070e5365809590a5518a1a5978f0758595150b2a5cb88133a6cd8c1b3a7cf80234a8c387011ea214d0d124ca2b2a5a8c790336acc994376e5bb9909550249e0fac346121b525ca944b8a1d3a8490ed4c99335602040172a057994baa5dba85592ec29a39163cb205f12bc69006866d3b863d68c5ac4312f4b218022b09a46dcaadbb873f2b5656d01e247a15ba00dab002fa1e3c959dedc65e6dbe751b47750082b88b2b562aa89f62c39d01018df936754005139f2b9e3db633bf5d9e03eef4ab10447164d4bb6f546bdaca13639c33eab61c2494796bd4c98b2eb6d7dfa3e8a652439d9d5c3af9eccbb9517e491575c0600a2200479e0e11e9f1f4ea0db2cd0c2474f0f0fce5fe25ddd4b7f76b2c2c93081dde3ffdd1f93dba766e1c946108e7402a5b45e65dde492585311c6cd51801265aa927f5502e35383515611e6894d25a91f6d9951c0e452917862e158bda6e49b60119872eb889d144ed5706d5814905036e8435b55e1060a1e8a3609135e6905026e1b83110524e29135e4db1295503925639e497616d4985669a5e69c5679e5e7906a4910100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2000000009100f4000080ef0059d2318ac80e04385070e1458209853c184c6061b283179934b8017122468c17363456317264c1902b4e84b8525322c59c095a44285135e7c79813125c4871566d43872d3e2c886315a6c9892d121d7913516ec69a4b369c3aac846540a913a235aae379e349903f622c8940fb60df813b7e4df9433ca3d1aa6172dcb87218edc0936d7605d8a4f9aed2a86576b569c5f069568765eaedebb399a042c521031d3b50bd26c8bb6142dda987dd6f4b9167070ebb04d3b6c0db552775ccf712f66e84a1cea59a361f256bbf8b47b5aa0710b54cd97b3e461ae6732c6bbc9546661a07b7b0f4beb39396598c18ffd7b595163d6cc655b0e6b471aa7c26551afc6f53e68b324d4aabd423e695b313fcf9e7957de3da61829ccc061231f4c27faf5eef73d5785946d3555e451640e676f926ce5c6fddc400a677f97402108ab1c6eadc6af138bf5d720e1427d45c7508fed767c536eadc5b591757d57eb9d4589b7b0a1508d7585537539761c1e66a1a6bc8c652e485a146eeda71c566fc5e479508a5178416e5226d44a16773a38f2a47132d84e1758ed396713435266cb955505592621400207395f826d67d6e28655a9545a72b147469e5b128493a79fe59703e1907ea447d09f0619f4627cd504000129f4010a000ff00c2000000003400f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884179113184c60664565ca0674b88153e0ce8c11368456b194e7cb8615469c2902b56346843116dcb963372ecd9f0b3af449d2f2efcc844b46742a02786053a04b8a257a03b1a4c5831ba25dba333be45daa091e7c8af53c2141b327ca9d2b863aac49942f5abc8ab136abdd807512bc9b70fb6c50a313eee5cab530354baa5fbe95f876736a4eba2d4ea489c2b8acc5cb834ef59a8597a66d9c973794abf338e2d5aa4f37954ac8b96c49c0ad6e5caa48507ce1c0832aed4b569ce2e4bb21de2eed06f4e7da993dca442923563063c6bd1f94ab9c727957d94d4a476d97d4316ca5c61e56a9243befe6e1fbb32b8e2872ba7360f67992a66a097b217a94b5c347eb5bfef5d0f5d1aa474cb61a6da134e7dd4fb5a7d9166361557f9e4b71371edc6d0556c6956709a5095e6259161a5262c168806d77a1e466dd693d77a0ea6ed957a85661e15872ab4dedf41add5e552832567c91276e14479d67addc8d4545a65464d5f57e9571cd86409e75cd23675d474537ccd16c325560d3891208d065840ec730a8788d0790579729340c16946ee644e36b653994649871199ddb97e1d682688331a6995160b9c586e8956a84fed49766b7ff596526198b109d7ac947e39805136622707e69d26c7d85e4db587e62d59897723a893e93727dc735199d8ac9352b6c263aef95a290c107889b5aa1f529298572a81d175791994ddd5f85ba77e0af2eeaae50ab42c8789ea1a29ac99c6481dae299808a8af160999e69d926867e0a2be696b217aaed52fdb46921b262e8c71b9be1790f5f969ed8a22b8f16d72157620e9ae7de81d26bbe12530a0b902f8076489d145966ea78ada8ea295aaaa1b5ba1f10a46a4c956db3c60acb108ce67579a96207d6266fb3ae79fc55b8e94c9f9684b659452e78b2aaf9608576065e21a87a49c41ccb1e1699ebb5d1e426995b7d177fa3a13af8a423a9599c0a254cf5b8147ca5c6a5d624c63adbfd29cac29b5717c39a782f226bf2a6ab5eb27a093e1d80d69a73ecad79b66fa1a55d7a9e54841fef9ae3eb93faeb0ee3ab5b769ce8d32aede172753e8ab9e6c75b17f8efb8a2ddece06373bae1797762ad0f9e6e56f8e6f47bc92de3f4e8529cd27fc1ae1b8edf7c4d7eebd975916c8f2cd66e9ec59eba33cb77e6be6668e9aaea9e3c9a7ebf7777be2cdc037b68bbb7665c99ac5dadbb1a316747def1fc9dbae8dc9b7f5e8cf0bddf455eb524aa9df88d384b437e7d78bd9edc1eebec6eb5c35ca6826f57518bc355f314fbdfba4c3e5124aa62e22f1db816bf933ddf4937199e14f615a931dc6dcb56e919946236f725bdfb03854306d66c250c35196e8851db4159941872c8e4e905519b10658cb565a329c9648fa2a0dcf8352cb6e85c6669dbbb9f0f16f191c1a52f23664ad89cd8f74a27e9b0546b2261a90194a52e31294f44ea080000129f4010a000ff00c2000000000a0005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d3654e8bc88904263015a2b26509569c3992702bc597216a235933d5a9c2913962dc79c3f6acc6953382e42a0455e1df9b359e056a6379aec8af47aa15298091a6dcac57ba7dea06fba8d0b467ca9d2b86fc61b1a82bd2d469d6f52b48bc3d4ec51ae6fe6c5bb437feb5cb27bf6ddfbe75fe063c9750726abb8103f56c1891b3c094974a8cc85913b5ecc0273b76dc0ab3764a87478a9ef98ad56a628aab53be7d7ad57c68dba76bdead8b567e6adaa38e5d68e055ba40ae3382ae1eb3b8bac3ea039fc43e2cb9fb6b9ccb8a2f381ddaf3f5e9d98f67ce1cb3efead2d7954b9f2f8e937affc7e5dbbfdcdb9a76d2d7457e05bfc438ed5df9f3f7d7b9bf1d7cf1e710a9617df53020803df79023477dc75c586be948fe158ced48ded5851e3790d1880146c754684d3624906a85f402e28a2a55d8df54855572206e81559850622ab86026465958c3668d326804658e3e09bc965bc9148c5373b1180b90880297c463805a2825ad6e46185bd59df15531d230d1143c5786e52734634c16994d968119a62469886af6846d49ede8939f41d9b5fb146e629805d16ad9c825998fd588d45c48727728e886318776a045251a236b929aa9f3e4a59aa9e1a298729585ad7e46d50a629f9ee50ae2893a9a4aa9adf58a5a69a8f1baef702b90367568e9676975162ea665ea3fdeaeb685cba19fbe954bd65b4944672e59ca980628761935d45876d53bac217acd3b68e4bbd16b5d6277da88b0138a11138f50b86d186cdd75612a60eaba4615cb6fab8297065293a1ab0c9ab70175e411513a563858b0f285d554b6d2651e6bb81954f12cbb5129f41741be74576c707e3c072d52fe75513d83697a822a6c518cef5db9063cb365431b84b41f7d764812b47685eba919a462dcf01268133c5bab9c27a9017982ba99cf165f1ddc1f63ab5d3833f0d823aa04396ef51dd192c1660d54acbbf51480dac85a38ba1a69e24a7bee9113a5ea98d3a539037fa7538da1b9bc5e2c6956a7f60dc05fbfd9ef9d3e6f4cea372ed88eca2d30f38233e850b3c183baf26870ea9909bad9075da827c53f9da3a6db824495f64886bd207ab7953c361286d18d6ab28f679867f451f97cefa3dc8225d4ebb71f47b570d2b589b7327cf2cd49bda18b5ce872e4cb1df575d7335b31d4cf170e6153a17ebbcb74f59f98d97f72aa9e4df9ab53967a287913decd6d919f0a99fba157484ed9739748c59449db864d6bc8d67e94f6e4219beeeae2eb8954ab9dcee94ffb8f418af54c9ba4166553232a85c635aa2c88dc446e22e053f654004fc57f8c24b90a1fc847afb0e5fd8f24032cd0d817c1cdf15dc866cad95e9ea7fb9ef0b8ed713b21dbce96572575486742f2e2159827effa2475884172d31b800906f0363d1fce506b3b5a07a32ca3d18e697fb1cf56e2a8abafb8462d6e92ce17f2c4981809770480daf12b5ef789b12efb4e5ce2139d052347311eece98904375e03e76329c9cf218d5b13e90398a2a2dd90b061ebfc57c47316372677ca797c5859b4f5c6c2d9bc63771124d96af4eb30810e429b94ad5f6ea6772722aee5736a5f9201851e94e5c1f87b72d2afcaf8b9225a8ca22cdb090e7069aea0017ea45e6bc6d4e6592830360c6d68bc75a474f508be897ec369d35f1e1947babd212c4227bcab5548465d332ade866003ca573b65454c42eea295c28c51d6939aa4811a0483dc1b5fc0a84f955190596e71e366ead7d0efb7a9705362b337e4fcc5d4470e0ccd9e113cd315f87aa216935287645014c6e7e83b9deba72b6a7d04070908c7711f2e69411e50a237353736747698c215ac0f9971152257c480dc4655faf80abac8ff486493f06c1bd5c4af4a0f25920d48e73ba3eb4e4d9f819782f31af4f8eab3dd4cc28f91926d4aa9d0c4f162fb486c186bfe88b3df9a76688adc0ed25988ff47124aca8c5bfa46445a294ad50c2084521662a8e51894698fc06b63bc5b0564691d81c435547adb2ca868dcb6a2641c2cacaa6643a58890ca9b814204c7d7077648bf0eed288b6d885c3ba897b68ed924a66d5a1cfc99321bfda4ec9ebcc45a33b9fccb9e14bb933542e055e976d2eff1d4709385e4686b38c43789dba8a42acdaafe0841dbc2a45739d49bd4ee48dfaa119d08a1854f0065bafcc6d2ae09740464e4be89e4a6eec48e8ccbf2d5516596afae9d4b48dda124d8798ba0fe34dd79a357656d59bdcd95433b80cce06c136a0e37d625ad6a3d5cd150289bc9c0b01839d982df9a1a37db62f4fe2604f2e72b6780d791a5d89155caaeea7a425a52543195cb66996b3b6fdbb99434611e9718f6e962b73213349e89b897b64971ecfa3b6657b94956092c0e140ee210a1b3f994702c015d0bef47c7c4a6637137b2dee248b2c2c3d4d35da766cc998de5c32c2de605f888b8be6d6b65d36a65273cb4eb924a41a36c266ee2a8c0eabaefa5f77a6c651a4526866eca26f4caea7b527b9cfbb296fb48a32559a9f63abb46dd296373fdb0a33978f51bf95eeda99d80fb489519dff9e79c43663bac2546c4a21b8e274bcd62681d5849c25d6ac3b8a21e571bb8d860e9d81f991e84ec21f5d99599a0ff344553b9f48c3d3537c7bd626c93f34364b369a19696660e8de9936cdc431f9675356472fbb0ebf4e56ad6de655db799432ab1ea822a7c512c1464554cd0963e199d6d05cdc51d76423dba645a9c93a6976345c0bb576210c435713e93d603af516a9639947e219dd6c0cce4cb45887c07ab95569e5aaa35b3a47da86f480b18cf7f0ec7c0db447fc0aa54546fd39a6275cc4f7569e9688f6b5fb49b2c2e91478d96d264163b79adeb1c49468462fabc74d09b4a23e43c46b713db32aab5e6d8a33e0471d5119b584ef0a36d8412c697c888787ba93bbdc2ca42c11bc0a023ea2abb4d0bea7f26199a0fcba0e2ac3b6fbd3545510cc61aade821a3315912bb6e0f0dc5ccfce995949bdd3bcad3313ac36098e27088f6922b80a883c41b07f79db46c693f2c966959e8b3ef922634c129727cbde91ec5bc483b5789aad3ce52febb5d773bca094265de83b5da9294f5115ce9796ff75ce01580bbce6e28618a2af1b6e417924b360240d6cf4dd72d2b9a3395fab1a93da0b287fe1e7f6c9666b3f1179826047cabeeea2e0ed19c310100129f4010a000ff00c200000000fe0005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac3911b890426f27021b18e2599bc560317ac4a950f66ec99ac086d4f913382f4b9f2b8a0de99457a154a8417a2d3a44d9e2d8af37724daa04fa275da34b9675aa261c2359a659c2ad1bb5bc245e8c03e6749b529e664bb07116d5db779f6e5bbe79f6069b38342ed9b18b0fe50c4851ecc7ca316ab47909b2325ac1933b464a5932f563ad9f1f7e0d2572386dc5a933aedc89943be3d69d4bbe4dda53f8e5d4b16b769d8bf5fc61d8195a164c97507363e3c19f1fdbac39f2feb5cf9ff54cdc7a75f68e718a354bf6186777c405bef7ec8af49bb8f3853d929f4fed9d387dacdf669f1f7e9961d5f90bd7ef7f3f90ac71f1e9368ede776d776fd674fd085417780ed71f9f7012f421ec7cf9c76164860aa771e48b1258d41e7c1248b0ae712698e1e3862e5832e08922685f12820e285e118b89942dda46dd1683e07a25d858de8532940d1178d13764a5480967816b5b6165b31b5b4d8595d96f458565e95b9da5f4e695567985d79f5d49152f4e513995d99351b575e76e46999a56606e45c6e58a4a047850777ef897e47246e998509c3a07e723634ed82192663a3712146c4956e4996a5a86449f407e89c8e5a0725afad766bd3aab159d95791a24ab9a6ae955a8aaa6c829a99625da9baef0b685f916637268cf1f978e19a86f8d75ea18eea2825751d57d72292422a08e0a7f55543a4ad8a485fd7513d258225b86a7a5415ad658503a39d5a6bee5791924bc2e496ae794ea99a5a180ee3bd69c99e916c2219b1d876c9778729734a442f5ebf7e356cafa31efa819293cafb3120a311eb982c5c03343966b50d2c0e585c8248cd2ebb496b3b269c319a10eaa96a7af1b7bb1339d1fab3a68c42f9cc17d6fea96ad67a56a968f9dc1d9f774d67585fb919c74ca0c4422b5460d7c2faac6fa68a2b9fee99295b3d2772894b71f5960bb9c6dd655b7b476a6af96bf5baa81b4cb568aaa98bd133a9a1aba5f77a6248ec2b766efbd47b95c22a0c90bb42efd5576071f2fdb79fca7d879fafc41d3c80dfdf091e983db8834cf7a1c387a54a97b54f9b113ac1793a22bb85f69cc378b60d8933eb81027a48728d8faddfe87a8fa9dabda3230ca1e2e3da387d934ca60b0817cfc988dd23c015d7c6706f2e49f79be1121e3530f75d164cbcabc1986971bc65a5c9a74027bc07afdc2b6e3428d9ca9c48e4e823273abc993ac929f472d6ecbc39b29fb5d7d5fa7329bb3386c34b0b6069976e0298897ae17e13371978324ab39def04546a4e54deb58eb5802f8c74bb3d1f64467322b83a0155b16e947a274ca8b92a2a6a63d396d89696b5ad3b6562710a1e58a5bfa602ab2b48c98816a61549329dd52b4c9b8c97a677eff110e83b4d3d81c4160b86f046160ca17c0be0aeb404af11b40aac5b7b6e44b268702bf50c8f303cd2a3f4b2ec100111fe7b1220e0f26449b5d1e8ce5dda22e39aa7232ea4cfe3445cad57b6479e2d1ab05c52645edae06808c61a4c8c670487950f475848cd08068eb39114e46647b771c7cc79d1746346f887c44222932333b803e2641f2532f58b537163267849783341eca123fb9469c47770a2219e895a8ccf0b926452c7f4ed42628b629fc4353a46a482508a112d5cfc382aadc18e8264522bc9b6c628b99df4c399d143e0d699903a6a442f608bb79627e5719dc8ffae7c33146948653296fde7af60bc80e733b7b7252d605e92348951c414d1efab29c5ca53028953e05659bdc9c92586b3086e6c678d2fa1fce095e4126633a821492ee6626303eb542dc20d3e399e2853222a9401c9a3aa5a2e2744c37ad78a79dfbeddf3bc97d926c849d62daff411f639e3b99cd81222396eda057035a1ddee4526c915ba47a47c3bdd0bd842c176909e7a841163922abac6e4623737ec0a5b25b71ecab9a117a48aa527579811da79907c806ce62a395903aca1ea474deae81da493525e1a60579cf322602768b3b7a4f19c66f22566c2f8ed2cedf59045f188a844d99ec90dbdceae4bcb8e43572b3f8e53faa74af4efb467beb4f9f8cd8c1c93ef2dd507475e5e0da0a11bdec897c451ae52746acb0d4ac4fa5238ef424213ab911124a8b672cd0a8fe5371c690ca8b978a55a7575b5854d8f4fe47cb8362921ae5c79e4119880b7ee1ca865ca3e8457f914217201beabecc62cfe370b591516a98cfa85d9e2644e92ee7a247bc33f288c340c499222ffa74c4e241f4b5eba5a82359d6a936a6fbac359edf4f189cbfa6b8e742f51daa42c536c6e52c01b3a503aa8a221e2c02b13456697260350a513b468f8f288bbba2750666bd3e4270bd9c6a9e6bcb22241f533399b4a7562d22cec47d5f6a93f2fe59113aaa5ce164a57a025bc3fe49363e9156b89c7da428e02bfb312ba50ba2eb2ded6bd866bf173cce4504fd2fa0e6afbbf218cc78c5b6294ae4bd30e653b04579ba1ef7f4d902e4751a01a33acaed27e663b4da1b87b1a5e23b33c53c41b9b0bf8234b66fce48ba53429793adbd81b5972abe2c1612778125cf8dd02c066466067c9e0431357f3422b3ae165f73c17f849a1d48a1535ad7bcaa6fdb66d557de2a3d2a84cc30af1f3a3dc55ac7d67afc12739fcb5364d17f42bbc22013ee47e233905312c7fc71f23ad56f3bc2a7b14e6e9e9ce25c47bcb5b5b34ebe441d8dc3a516465198a3ddeed9ccac53b24eba0b5b96303c65da404372c0dd8e14135e66f81a4241a450bab19c93b9522cb02f111f4f8be5f2032d09c15f97f76ff493a2e069a04d5e8095dcfc331e3b8a12575b11767cb4f55ace0d1fadd9d498bcfbbd676ef79cc9eea2e15ea144bbcc6d4774a077b9d1a502a66dde58703e7a6878bcf10b20fcb833693abc509b17a8f27b9948d9e2980a670d67d0071cc0d0bd059a4c754a11bb3c02a17fbb58d8bdf236717bd84c510ad1cf035e5e7f2a6c61922ae2b5c1c467816613e3bb57bf973f8076c7bc5e2ce16815b0acd6fb7fd45c689b17b38a8de074a2e48b5e635c08b732b9f9b937bc4dcebd43d7c664bba9ce9b11ed0b39d47f0626193a25ff0a79d2a57f0fefcfdcfce1b2551996f67bc6ded9f859f969dfe00a792ce79cecc2cfc2fc6521ae19538910597b96997113895d4242906c1b91599ccc8bb71dbcb043731d5bc75ebbd1dcd28e4ddf0150e1653a1d09eefe4c8b22c705fd2ee8d1238d4bd756dbbcd4819dbb93c4bda3465ee6b7fe1f69a9ac20d762a2de39fc72a92b29f17e5deb5fbf37746374864877236781695d712a6677c52c54dd37257c58550d7047c25bc0d45b47721913895eb7f73e05d07de7cc2cc4c02217de7ae2003fe3562243c812671e4821918dd21b37a25053c73d5a644d68e5765366943bb71c4227837a733a71040965574334183b6157624a774168663a3876a344f37271773f69d37634b2eb3775b760b2093172f344246616581866b4e27197e84ce4ce3da22e64843171f7007f84545406a17ed5982db4293db6146848268985911ed6ed7ab6446273d389b39f57571c52c44f3808bb7ef3b78b39b6138c08314f170465b5934d182877d25282425f65a4cc79661b54126045c6ed38d3fe4d08863187d661c6b075837d17c70e78b23553655c4e369940949123b33d7975d97447b166c4bf6306f95f869e77481f2616ec7ca6e12693516265df7723107c88a82ae43b8445058c589a5bb57012485b2ac77b8c560f4f66a67383ff5232b158458d45676e38982346b7f55a960a7376532be8711e37c321171e7ec5e58fb7812cb1d365c33781783977543b8253408237eb2ce40862e4c94dd56c70367a79969172d5ba55c8337c26a273066b2352b03676a74236712e332e81989b4029cf6bb7f25c167d56c74075043b30978f6475cd8cd54d40383ef93a66057a26527dc3fc82a8358f62d35d68da4328498287f96256a432c1d580e80a6783f122b84885f41d7956a94b75083836de4109019386cc13b58f3176b35c98381bc8ea7796e03dc89f8f94b45d49933d596386b38c65c30c89d4316819b39aa29360b8757cd51a8907168449967be4a490545345a57f46641359193683442d81980b80e30934d36f47640762a3a482a5c83d12286489717599b162493257570237888464b7343d576e8e59f64627a583a9cf85479e5cf5123459736418e499c6d847e1883808429c23604822d11fe32373148199f8ab88755148c7a428a4c66ac4a13871d278f79d67b5388077515306ec2557e61b659550e7847bdef44e8d83028829a05fd8b57b84934a898f68523731b99b2478e08511679e67248315b586a4206e039d6cf51a8b866a66945f75798a6ff24a4cf6295b63c29d799493e2238dd16848d8bb7ee36949a6fb8586043f253a9e045b32d86b4b29d780779598b50526e4f89265627887ea80c6127458b488b7a73d658c7779058a47877c69499925b49a94867a464663761691176651b4ba19e8ca8db2c834a3c0a3845659627d50b409890af1acb7859ba91472c5a79f93d73bb4de9975494a555732d3f595a3394b252528079776a80456c59d75b44d9fb6535c63ad87e8276d53984719f79638ea51a9c589f3b375a9f74ad8259253a96e757f3b8612884a574605e5683ed110100129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000b3 | ||
197 | EOL | ||
198 | |||
199 | |||
200 | |||
201 | use DBI; | ||
202 | |||
203 | |||
204 | |||
205 | |||
206 | |||
207 | |||
208 | |||
209 | |||
210 | |||
211 | |||
212 | $way=""; | ||
213 | ####### | ||
214 | ## se houver cookie login entćo verifica se o cookie lid( login id) consta na base de dados e se o tempo de login | ||
215 | ## é inferior ao tempo-300s (caso tenham passado 5 minutos o login deixa de ser valido | ||
216 | ## se tudo estiver correcto entćo actualiza a data do ultimo acesso na table de utilizadores e activa a variavel $way | ||
217 | ## para logged | ||
218 | if($COOKIE{login}) { | ||
219 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
220 | $sth=$db->prepare("select * from userinfo where userid='\Q$COOKIE{login}\E' and lid='$COOKIE{lid}'"); | ||
221 | $sth->execute; | ||
222 | if($sth->rows>0) { | ||
223 | $db->do("update userinfo set lldate='".time."' where userid='\Q$COOKIE{login}\E'"); | ||
224 | if($QUERY_STRING{sair} eq $COOKIE{lid}) { | ||
225 | $db->do("update userinfo set lid='0' where userid='\Q$COOKIE{login}\E'"); | ||
226 | cookie("login",$POST{username},"now"); | ||
227 | cookie("lid","$lid","now"); | ||
228 | } else { | ||
229 | $way="logged"; | ||
230 | cookie("login",$COOKIE{username},"+5m"); | ||
231 | cookie("lid","$COOKIE{lid}","+5m"); | ||
232 | }; | ||
233 | |||
234 | }; | ||
235 | $sth->finish; | ||
236 | $db->disconnect; | ||
237 | }; | ||
238 | if($QUERY_STRING{adduser}) { | ||
239 | $way="adduser"; | ||
240 | }; | ||
241 | |||
242 | |||
243 | |||
244 | ######## | ||
245 | ## metodo login se for enviado o pedido de login entćo vai verificar se a entrada username & password consta na | ||
246 | ## base de dados se constar entćo actualiza a base de dados com o novo login id (lid) e activa o cookie login e loginid | ||
247 | ## Se o login tiver activo manda uma resposta ao utilizador indicando que nćo pode refazer o login até estar | ||
248 | ## desactivo, excepto se o login id for diferente (problema do refresh) | ||
249 | ## | ||
250 | if($POST{login} and $way ne "logged") { | ||
251 | $lid=int(rand()*100)+1; | ||
252 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
253 | $sth=$db->prepare("select * from userinfo where userid='\Q$POST{username}\E' and password='\Q$POST{passwd}\E'"); | ||
254 | $sth->execute; | ||
255 | if($sth->rows>0) { | ||
256 | $res=$sth->fetchrow_hashref; | ||
257 | if(time>($res->{lldate}+300) or $res->{lid} eq "0") { | ||
258 | cookie("login",$POST{username},"+5m"); | ||
259 | cookie("lid","$lid","+5m"); | ||
260 | $db->do("update userinfo set lid='$lid', lldate='".time."' where userid='\Q$POST{username}\E'"); | ||
261 | $COOKIE{login}=$POST{username}; | ||
262 | $COOKIE{lid}=$lid; | ||
263 | $way="logged"; | ||
264 | } else { | ||
265 | $errorway="norelogin"; | ||
266 | }; | ||
267 | |||
268 | }else { | ||
269 | $errorway="invalidlog"; | ||
270 | }; | ||
271 | $sth->finish; | ||
272 | $db->disconnect; | ||
273 | |||
274 | }; | ||
275 | cookie("teste1",$POST{username},"+5m"); | ||
276 | cookie("teste4","conas","+10m"); | ||
277 | if($POST{adduser}) { | ||
278 | $way="adduser"; | ||
279 | if($POST{passwd} ne $POST{repasswd}) { | ||
280 | $errorway="nomatch"; | ||
281 | } else { | ||
282 | if($POST{username} eq "") { | ||
283 | $errorway="emptylogin"; | ||
284 | } else { | ||
285 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
286 | $sth=$db->prepare("select * from userinfo where userid='\Q$POST{username}\E'"); | ||
287 | $sth->execute; | ||
288 | if($sth->rows>0) { | ||
289 | $errorway="exists"; | ||
290 | } else { | ||
291 | $db->do("insert into userinfo (userid,password,nome,email,phone) values('\Q$POST{username}\E','\Q$POST{passwd}\E','\Q$POST{name}\E','\Q$POST{email}\E','\Q$POST{phone}\E')"); | ||
292 | enviarnoticia("Bem vindo ao $softversion, Estį a iniciar como novo utilizador e provavelmente precisa de ajuda, o sistema irį mandar dicas através das noticias, por agora tente criar a sua equipe pelo menu equipe e depois escolha os jogadores..., foram debitados 2000cts na sua conta principal(nota: AS NOTICIAS SERAO AUTO-REMOVIDAS DEPOIS DE 10Minutos DA SUA DATA DE LEITURA)",$POST{username}); | ||
293 | do { | ||
294 | $id=int(rand()*200000); | ||
295 | $sth=$db->prepare("select * from conta where id='$id'"); | ||
296 | $sth->execute; | ||
297 | }while($sth->rows); | ||
298 | $db->do("insert into conta (id,userid,value) values('\Q$id\E','\Q$POST{username}\E','2000')"); | ||
299 | $way=""; | ||
300 | }; | ||
301 | }; | ||
302 | }; | ||
303 | }; | ||
304 | |||
305 | |||
306 | |||
307 | |||
308 | #COOKIES | ||
309 | #print "Date: ".mydate("%a, %d %b %Y %H:%M:%S %Z",0)."\n"; | ||
310 | #print "Cona: ".mydate("%a, %d %b %Y %H:%M:%S %Z",0)."\n"; | ||
311 | |||
312 | ## este metedo apenas indica para o carregamento de imagens se o parametro img tiver ligado entćo uploada | ||
313 | ## a imagem escolhida | ||
314 | ## | ||
315 | if($QUERY_STRING{img}) { | ||
316 | #print "Accept-ranges: bytes\n"; | ||
317 | #print "Content-length: ".length($img{$QUERY_STRING{img}})."\n"; | ||
318 | print "Content-type: image/gif\r\n\r\n"; | ||
319 | print pack("h*",$img{$QUERY_STRING{img}}); | ||
320 | exit; | ||
321 | }; | ||
322 | |||
323 | |||
324 | |||
325 | ## ---------------------------------------------- FUNCOES ----------------------------------------## | ||
326 | ## funcoes especificas | ||
327 | ## imprime a pįgina do login | ||
328 | ## | ||
329 | sub printlogin { | ||
330 | print "<HTML>\n<HEAD>\n<TITLE> footaid login</title>\n</HEAD>\n"; | ||
331 | print "<BODY background='$ENV{SCRIPT_NAME}?img=bg'>\n"; | ||
332 | print "<FORM METHOD='POST' ACTION='$ENV{SCRIPT_NAME}'>\n"; | ||
333 | print "<TABLE width=100% cellspacing=0 height='100%' border=0>\n"; | ||
334 | print "<TR><TD bgcolor='bb8800' height=90 align=center valign='center'>\n"; | ||
335 | print "<table width=400 height=80 border=0 bgcolor='efefef'><TR><TD><img src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n"; | ||
336 | print "</TD></TR>\n"; | ||
337 | print "<TR><TD valign='center' align='center' height=100% bgcolor='008800'>\n"; | ||
338 | print "<font color='FF0000'>Terį de terminar a outra sessćo ou esperar 5 minutos</font><BR><BR>" if ($errorway eq "norelogin"); | ||
339 | print "<font color='FF0000'>Login invįlido</font><BR><BR>" if ($errorway eq "invalidlog"); | ||
340 | print "<TABLE bgcolor='000000' cellspacing=2 cellpadding=0><TR><TD>\n"; | ||
341 | print "<TABLE border=0 cellspacing=0 cellpadding=3 bgcolor='EFEFEF'>\n"; | ||
342 | print "<TR><TD> Login:</TD><TD><input type=text name='username' size=14 maxlength=14 value='$COOKIE{username}'></TD></TR>\n"; | ||
343 | print "<TR><TD> Password:</TD><TD><input type=password name='passwd' size=14 maxlength=14></TD></TR>\n"; | ||
344 | print "<TR><TD colspan=2 align=left><table border=0 cellpadding=0 cellspacing=0><TR><TD><input type=submit name='login' value='Entrar'></TD><TD><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?adduser=1\"' value='Adicionar utilizador'></TD></TR></TABLE></TD></TR>\n"; | ||
345 | print "</TABLE>\n"; | ||
346 | print "</TD></TR></TABLE>\n"; | ||
347 | print "</TD></TR>\n"; | ||
348 | print "</TABLE>\n"; | ||
349 | print "</FORM>\n"; | ||
350 | print "</BODY>\n</HTML>"; | ||
351 | }; | ||
352 | ## pagina adicionar utilizador | ||
353 | ## | ||
354 | ## | ||
355 | sub printadduser { | ||
356 | print "<HTML>\n<HEAD>\n<TITLE> footaid login</title>\n</HEAD>\n"; | ||
357 | print "<BODY background='$ENV{SCRIPT_NAME}?img=bg'>\n"; | ||
358 | print "<TABLE width=100% cellspacing=0 height='100%' border=0>\n"; | ||
359 | print "<TR><TD bgcolor='bb8800' height=90 align=center valign='center'>\n"; | ||
360 | print "<table width=400 height=80 border=0 bgcolor='efefef'><TR><TD><img src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n"; | ||
361 | print "</TD></TR>\n"; | ||
362 | print "<TR><TD valign='center' align='center' height=100% bgcolor='008800'>\n"; | ||
363 | print "<FORM METHOD='POST' ACTION='$ENV{SCRIPT_NAME}'>\n"; | ||
364 | print "<font color='ff0000'>Login jį existente por favor escolha outro</font>" if ($errorway eq "exists"); | ||
365 | print "<font color='ff0000'>Password nćo é igual</font>" if ($errorway eq "nomatch"); | ||
366 | print "<font color='ff0000'>O campo login nćo pode estar vazio</font>" if ($errorway eq "emptylogin"); | ||
367 | print "<TABLE bgcolor='000000' cellspacing=2 cellpadding=0><TR><TD>\n"; | ||
368 | print "<TABLE border=0 cellspacing=0 cellpadding=3 bgcolor='EFEFEF'>\n"; | ||
369 | print "<TR><TD> "; | ||
370 | print ."<font color='FF0000'>*</font>" if ($errorway eq "exists"); | ||
371 | print "Login: </TD><TD><input type=text name='username' size=14 maxlength=13 value='$POST{username}'></TD></TR>\n"; | ||
372 | print "<TR><TD> Nome de utilizador:</TD><TD><input type=text name='name' value='$POST{name}'></TD></TR>\n"; | ||
373 | print "<TR><TD> E-mail:</TD><TD><input type=text name='email' maxlength=160 value='$POST{email}'></TD></TR>\n"; | ||
374 | print "<TR><TD> Telefone:</TD><TD><input type=text name='phone' maxlenght=13 value='$POST{phone}'></TD></TR>\n"; | ||
375 | print "<TR><TD> Password:</TD><TD><input type=password name='passwd' size=14 maxlength=14></TD></TR>\n"; | ||
376 | print "<TR><TD> Re-Password:</TD><TD><input type=password name='repasswd' size=14 maxlength=14></TD></TR>\n"; | ||
377 | print "<TR><TD colspan=2 align=left><table border=0 cellspacing=0 cellpadding=0><TR><TD><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?\&rid=".int(rand()*100)."\"' value='<- Voltar'></TD><TD><input type=submit name='adduser' value='adicionar'></TD></TR></TABLE></TD></TR>\n"; | ||
378 | print "</TABLE>\n"; | ||
379 | print "</TD></TR></TABLE>\n"; | ||
380 | print "</FORM>\n"; | ||
381 | print "</TD></TR>\n"; | ||
382 | print "</TABLE>\n"; | ||
383 | |||
384 | }; | ||
385 | |||
386 | |||
387 | ## enviar noticia | ||
388 | ## funcēćo enviar noticia; | ||
389 | sub enviarnoticia { | ||
390 | $noticia=shift; | ||
391 | $useridto=shift; | ||
392 | if(!$useridto) { | ||
393 | $sth=$db->prepare("select * from userinfo"); | ||
394 | $sth->execute; | ||
395 | while($res=$sth->fetchrow_hashref) { | ||
396 | $useridto=$res->{userid}; | ||
397 | do { | ||
398 | $id=int(rand()*200000); | ||
399 | $sth1=$db->prepare("select * from noticia where id='$id'"); | ||
400 | $sth1->execute; | ||
401 | }while($sth1->rows); | ||
402 | $db->do("insert into noticia (id,useridto,noticia,date) values('\Q$id\E','\Q$useridto\E','\Q$noticia\E','".time()."')"); | ||
403 | }; | ||
404 | }else { | ||
405 | do { | ||
406 | $id=int(rand()*200000); | ||
407 | $sth1=$db->prepare("select * from noticia where id='$id'"); | ||
408 | $sth1->execute; | ||
409 | }while($sth1->rows); | ||
410 | $db->do("insert into noticia (id,useridto,noticia,date) values('\Q$id\E','\Q$useridto\E','\Q$noticia\E','".time()."')"); | ||
411 | }; | ||
412 | |||
413 | }; | ||
414 | |||
415 | ## subfuncēćo game (pagina inicial) | ||
416 | ## é aqui que decorre a 'acēćo' do jogo | ||
417 | ## | ||
418 | sub game { | ||
419 | ## Menu de cima com os icons | ||
420 | ## | ||
421 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
422 | $sth=$db->prepare("select * from userinfo where userid='\Q$COOKIE{login}\E'"); | ||
423 | $sth->execute; | ||
424 | $res=$sth->fetchrow_hashref; | ||
425 | print "<HTML><HEAD><TITLE>$softversion\n</TITLE></HEAD>\n"; | ||
426 | print "<BODY background='$ENV{SCRIPT_NAME}?img=bg' bgcolor=111111>\n"; | ||
427 | print "<font face='Verdana' color='FFFF00'>\n"; | ||
428 | print "<TABLE width=100% border=0 bgcolor='008800'>\n"; | ||
429 | print "<TR><TD bgcolor='bb8800' height=90 align=center valign='center'>\n"; | ||
430 | print "<table width=400 height=80 border=0 bgcolor='efefef'><TR><TD><img src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n"; | ||
431 | print "</TD></TR>\n"; | ||
432 | print "<TR><TD height='20px' bgcolor='EFEFEF' valign='center'>\n"; | ||
433 | print "<TABLE border=0 height='20px' cellspacing=1 cellpadding=0><TR>"; | ||
434 | print "<TD>Football menu:\ \ </TD>\n"; | ||
435 | print "<TD>[</TD>\n"; | ||
436 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?rid=".int(rand()*100)."'><img width=20 height=20 border=0 alt='Inicio' src='$ENV{SCRIPT_NAME}?img=home'></a></TD>\n"; | ||
437 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?subway=msg'><img width=20 height=20 border=0 alt='mensagens' src='$ENV{SCRIPT_NAME}?img=msg'></a></TD>\n"; | ||
438 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?subway=forum'><img width=20 height=20 border=0 alt='forum' src='$ENV{SCRIPT_NAME}?img=forum'></a></TD>\n"; | ||
439 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?sair=$COOKIE{lid}'><img width=20 height=20 border=0 alt='sair' src='$ENV{SCRIPT_NAME}?img=sair'></a></TD>\n"; | ||
440 | print "<TD>][</TD>\n"; | ||
441 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?subway=conta'><img width=20 height=20 border=0 alt='conta' src='$ENV{SCRIPT_NAME}?img=conta'></a></TD>\n"; | ||
442 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?subway=team'><img width=20 height=20 border=0 alt='equipa' src='$ENV{SCRIPT_NAME}?img=equipa'></a></TD>\n"; | ||
443 | print "<TD bgcolor='CFCFDF'><a href='$ENV{SCRIPT_NAME}?subway=jogador'><img width=20 height=20 border=0 alt='jogadores' src='$ENV{SCRIPT_NAME}?img=jog'></a></TD>\n"; | ||
444 | print "<TD>]</TD>\n"; | ||
445 | print "<TD>\ \ ".mydate("%a, %d %b %Y %H:%M").", <font color='444444'>$COOKIE{login}</font>"; | ||
446 | print "</TR></table>\n"; | ||
447 | print "</TD></TR><TR><TD valign='top'><font face='Verdana' color='FFFF00'>\n"; | ||
448 | $sth->finish; | ||
449 | ## conforme a escolha | ||
450 | ## | ||
451 | |||
452 | ### ecran conta | ||
453 | ## | ||
454 | # | ||
455 | if($QUERY_STRING{subway} eq "conta") { | ||
456 | print "<CENTER><font size=6 face='Verdana'><B>Conta</B></font><hr></CENTER><BR><BR>\n"; | ||
457 | $sth=$db->prepare("select * from conta where userid='$COOKIE{login}'"); | ||
458 | $sth->execute; | ||
459 | if($sth->rows) { | ||
460 | $res=$sth->fetchrow_hashref; | ||
461 | print "Conta id: <B>$res->{id}</B> Contem um saldo de <B>$res->{value}cts</B><BR><BR>\n"; | ||
462 | }; | ||
463 | }; | ||
464 | if($QUERY_STRING{subway} eq "jogador") { | ||
465 | if($POST{treino}) { | ||
466 | print "Treino<BR>\n"; | ||
467 | $sth=$db->prepare("select * from treino where jogid='\Q$POST{nome}\E'"); | ||
468 | $sth->execute; | ||
469 | if($sth->rows) { | ||
470 | print "Jogador jį se encontra em treino\n"; | ||
471 | } else { | ||
472 | $db->do("insert into treino (jogid,treino,fdate,date) values('\Q$POST{nome}\E','\Q$POST{what}\E','".mydate("%g","+$POST{days}d")."','".time()."')"); | ||
473 | $db->do("update jogador set doing='1' where nome='\Q$POST{nome}\E'"); | ||
474 | }; | ||
475 | |||
476 | }; | ||
477 | print "<CENTER><font size=6 face='Verdana'><B>Jogadores</B></font><hr></CENTER><BR><BR>\n"; | ||
478 | if($QUERY_STRING{mostrar}) { | ||
479 | $sth=$db->prepare("select * from jogador where nome='$QUERY_STRING{mostrar}'"); | ||
480 | $sth->execute; | ||
481 | if($sth->rows) { | ||
482 | $res1=$sth->fetchrow_hashref; | ||
483 | print "<FORM method='POST'>\n"; | ||
484 | print "Equipa: <B>$res1->{equipaid}</B>\n"; | ||
485 | print "<TABLE border=0 bgcolor='000000' cellspacing=0 cellpadding=1><TR><TD>\n"; | ||
486 | print "<TABLE border=0 bgcolor='FFFFEE' cellspacing=0 cellpadding=0>\n"; | ||
487 | print "<TR bgcolor='EEEEFF'><TD>Nome:</TD><TD><B>$res1->{nome}</B></TD></TR>\n"; | ||
488 | print "<TR><TD>Velocidade:</TD><TD>\n"; | ||
489 | for $i (0 .. 10) { | ||
490 | if($i<($res1->{vel}/100)) { | ||
491 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
492 | } else { | ||
493 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
494 | }; | ||
495 | }; | ||
496 | print "</TD></TR>\n"; | ||
497 | print "<TR><TD>Forēa:</TD><TD>\n"; | ||
498 | for $i (0 .. 10) { | ||
499 | if($i<($res1->{forc}/100)) { | ||
500 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
501 | } else { | ||
502 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
503 | }; | ||
504 | }; | ||
505 | print "</TD></TR>\n"; | ||
506 | print "<TR><TD>Agilidade:</TD><TD>\n"; | ||
507 | for $i (0 .. 10) { | ||
508 | if($i<($res1->{agi}/100)) { | ||
509 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
510 | } else { | ||
511 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
512 | }; | ||
513 | }; | ||
514 | print "</TD></TR>\n"; | ||
515 | print "<TR><TD>Eficacia:</TD><TD>\n"; | ||
516 | for $i (0 .. 10) { | ||
517 | if($i<($res1->{efi}/100)) { | ||
518 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
519 | } else { | ||
520 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
521 | }; | ||
522 | }; | ||
523 | print "</TD></TR>\n"; | ||
524 | print "<TR><TD>Expriencia:</TD><TD>\n"; | ||
525 | for $i (0 .. 10) { | ||
526 | if($i<($res1->{exp}/100)) { | ||
527 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
528 | } else { | ||
529 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
530 | }; | ||
531 | }; | ||
532 | print "</TD></TR>\n"; | ||
533 | print "<TR><TD>Adaptaēćo:</TD><TD>\n"; | ||
534 | for $i (0 .. 10) { | ||
535 | if($i<($res1->{fel}/100)) { | ||
536 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=redball'>\n"; | ||
537 | } else { | ||
538 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>\n"; | ||
539 | }; | ||
540 | }; | ||
541 | print "</TD></TR>\n"; | ||
542 | print "<TR><TD>Posiēćo</TD><TD>\n"; | ||
543 | $sth1=$db->prepare("select * from pos where id='$res1->{tipo}'"); | ||
544 | $sth1->execute; | ||
545 | $res2=$sth1->fetchrow_hashref; | ||
546 | print "<B>$res2->{namepos}</B>\n"; | ||
547 | print "</TD></TR>\n"; | ||
548 | print "<TR><TD>Fazer:</TD><TD>\n"; | ||
549 | $sth1->finish; | ||
550 | $sth1=$db->prepare("select * from doing where id='$res1->{doing}'"); | ||
551 | $sth1->execute; | ||
552 | $res2=$sth1->fetchrow_hashref; | ||
553 | print "<B>$res2->{dowhat}</B>\n"; | ||
554 | print "</TD></TR>\n"; | ||
555 | $sth1->finish; | ||
556 | $sth1=$db->prepare("select * from equipa where userid='$COOKIE{login}'"); | ||
557 | $sth1->execute; | ||
558 | $res=$sth1->fetchrow_hashref; | ||
559 | $sth1->finish; | ||
560 | print "<TR><TD>Ordenado:</TD><TD><B>$res1->{ordenado}cts/mźs</B></TD></TR>\n"; | ||
561 | print "<input type=hidden name='nome' value='$res1->{nome}'>\n"; | ||
562 | if(($res1->{equipaid} eq $res->{equipaid}) and ($res1->{doing} ne "1")) { | ||
563 | print "<TR><TD colspan=2>\n"; | ||
564 | print "<select name=what>\n"; | ||
565 | print "<option value='vel'>Velocidade\n"; | ||
566 | print "<option value='forc'>Forēa\n"; | ||
567 | print "<option value='agi'>Agilidade\n"; | ||
568 | print "<option value='efi'>Eficacia\n"; | ||
569 | print "</select>\n"; | ||
570 | print "Dias: <input type=text size=2 maxlength=2 name='days' value='01'>\n"; | ||
571 | print "<input type=submit name='treino' value='Treinar'></TD></TR>\n"; | ||
572 | } | ||
573 | if($res1->{equipaid} ne $res->{equipaid}){ | ||
574 | print "<TR><TD colspan=2>Valor: <input type=text size=4 maxlength=4 name=valor value='0000'>cts <input type=submit name='comprar' value='comprar'>\n"; | ||
575 | }; | ||
576 | print "</TABLE>\n"; | ||
577 | print "</TD></TR></TABLE><BR>\n"; | ||
578 | }; | ||
579 | }else { | ||
580 | print "<BR>\n"; | ||
581 | $sth=$db->prepare("select * from jogador"); | ||
582 | $sth->execute; | ||
583 | while($res=$sth->fetchrow_hashref) { | ||
584 | $urlname=$res->{nome}; | ||
585 | $urlname =~ s/ /%20/g; | ||
586 | print "Nome: <a href='$ENV{SCRIPT_NAME}?subway=jogador\&mostrar=$urlname'><B>$res->{nome}</B></a> equipa: <B>$res->{equipaid}</B><BR>\n"; | ||
587 | }; | ||
588 | print "<BR>\n"; | ||
589 | }; | ||
590 | }; | ||
591 | |||
592 | ### ecran equipa | ||
593 | ## | ||
594 | # | ||
595 | if($QUERY_STRING{subway} eq "team") { | ||
596 | print "<CENTER><font size=6 face='Verdana'><B>Equipa</B></font><hr></CENTER><BR><BR>\n"; | ||
597 | if($POST{criar}) { | ||
598 | $sth=$db->prepare("select * from equipa where lower(equipaid)=lower('\Q$POST{equipa}\E')"); | ||
599 | $sth->execute; | ||
600 | if($sth->rows) { | ||
601 | print "<font color='FF0000'>Nome de equipa existente</font><BR>\n"; | ||
602 | } else { | ||
603 | $db->do("insert into equipa (equipaid,userid) values('\Q$POST{equipa}\E','\Q$COOKIE{login}\E')"); | ||
604 | }; | ||
605 | }; | ||
606 | if($POST{simcria}) { | ||
607 | $sth=$db->prepare("select * from jogador where lower(nome)=lower('$POST{nome}')"); | ||
608 | $sth->execute; | ||
609 | if($sth->rows) { | ||
610 | print "<font color='FF0000'>Nome de jogador existente</font><BR>"; | ||
611 | }else { | ||
612 | $sth=$db->prepare("select * from conta where userid='$COOKIE{login}'"); | ||
613 | $sth->execute; | ||
614 | if($sth->rows) { | ||
615 | $res=$sth->fetchrow_hashref; | ||
616 | $contaval=$res->{value}; | ||
617 | }; | ||
618 | $val=100; | ||
619 | $val+=($POST{vel}*150); | ||
620 | $val+=($POST{for}*150); | ||
621 | $val+=($POST{agi}*150); | ||
622 | $val+=($POST{efi}*150); | ||
623 | $contaval-=$val; | ||
624 | if($contaval>0) { | ||
625 | $sth=$db->prepare("select * from equipa where userid='$COOKIE{login}'"); | ||
626 | $sth->execute; | ||
627 | $res=$sth->fetchrow_hashref; | ||
628 | $db->do("insert into jogador (nome,equipaid,vel,forc,agi,efi,tipo) values('\Q$POST{nome}\E','\Q$res->{equipaid}\E','".($POST{vel}*100)."','".($POST{for}*100)."','".($POST{agi}*100)."','".($POST{efi}*100)."','$POST{pos}')"); | ||
629 | $db->do("update conta set value='$contaval' where userid='$COOKIE{login}'"); | ||
630 | $db->do("update equipa set jogdisp='".($res->{jogdisp}-1)."' where userid='$COOKIE{login}'"); | ||
631 | enviarnoticia("$COOKIE{login} Criou o jogador $POST{nome}"); | ||
632 | } else { | ||
633 | print "<font color='FF0000'>Nćo contem fundos suficientes para criar este jogador</font><BR>\n"; | ||
634 | }; | ||
635 | }; | ||
636 | |||
637 | }; | ||
638 | if($POST{criarjog}) { | ||
639 | if($POST{nome} ne "") { | ||
640 | $sth=$db->prepare("select * from jogador where lower(nome)=lower('$POST{nome}')"); | ||
641 | $sth->execute; | ||
642 | if($sth->rows) { | ||
643 | print "<font color='FF0000'>Nome de jogador existente</font><BR>"; | ||
644 | print "<form><input type=button onclick='parent.location=\"javascript:history.go(-1)\"' value='<- Voltar'><HR>\n"; | ||
645 | }else { | ||
646 | $val=100; | ||
647 | $val+=($POST{vel}*150); | ||
648 | $val+=($POST{for}*150); | ||
649 | $val+=($POST{agi}*150); | ||
650 | $val+=($POST{efi}*150); | ||
651 | print "Vai gastar $val cts ao criar o jogador <B>$POST{nome}</B> deseja continuar?<BR>"; | ||
652 | print "Velocidade:<B>$POST{vel}</B> Forēa: <B>$POST{for}</B> Agilidade: <B>$POST{agi}</B> Eficacia: <B>$POST{efi}</B><BR>\n"; | ||
653 | print "<form method='POST'>\n"; | ||
654 | print "<input type=hidden name=nome value='$POST{nome}'>\n"; | ||
655 | print "<input type=hidden name=vel value='$POST{vel}'>\n"; | ||
656 | print "<input type=hidden name=for value='$POST{for}'>\n"; | ||
657 | print "<input type=hidden name=agi value='$POST{agi}'>\n"; | ||
658 | print "<input type=hidden name=efi value='$POST{efi}'>\n"; | ||
659 | print "<input type=hidden name=pos value='$POST{pos}'>\n"; | ||
660 | print "<input type=submit name='simcria' value='sim'>"; | ||
661 | print "<input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&rid=".int(rand()*100)."\"' value='nao'>"; | ||
662 | print "</form><HR>\n"; | ||
663 | }; | ||
664 | $sth->finish; | ||
665 | } else { | ||
666 | print "<font color='FF0000'>Tem que dar nome ao jogador</font><BR>"; | ||
667 | print "<form><input type=button onclick='parent.location=\"javascript:history.go(-1)\"' value='<- Voltar'><HR>\n"; | ||
668 | }; | ||
669 | }; | ||
670 | $sth=$db->prepare("select * from equipa where userid='$COOKIE{login}'"); | ||
671 | $sth->execute; | ||
672 | if($sth->rows) { | ||
673 | $res=$sth->fetchrow_hashref; | ||
674 | $sth->finish; | ||
675 | print "<B>Equipa $res->{equipaid}</B><BR>\n"; | ||
676 | $sth=$db->prepare("select * from jogador where equipaid='$res->{equipaid}' order by tipo ASC"); | ||
677 | $sth->execute; | ||
678 | ## Mostrar jogador | ||
679 | if($sth->rows) { | ||
680 | while($res1=$sth->fetchrow_hashref) { | ||
681 | $sth1=$db->prepare("select * from pos where id='$res1->{tipo}'"); | ||
682 | $sth1->execute; | ||
683 | $res2=$sth1->fetchrow_hashref; | ||
684 | $urlname=$res1->{nome}; | ||
685 | $urlname=~s/ /%20/g; | ||
686 | print "\ \ Nome: <a href='$ENV{SCRIPT_NAME}?subway=jogador\&mostrar=$urlname'><B>$res1->{nome}</B></a> ($res2->{namepos})<BR>\n"; | ||
687 | $sth1->finish; | ||
688 | }; | ||
689 | $sth->finish; | ||
690 | print "<HR>\n"; | ||
691 | } else { | ||
692 | print "Nćo se encontram jogadores na sua equipa<BR><BR>\n"; | ||
693 | }; | ||
694 | if($res->{jogdisp}>0) { | ||
695 | if($QUERY_STRING{criarjog}) { | ||
696 | print "<HR><B>Criar jogador</B><BR>\n"; | ||
697 | print "<FORM method=post action='$ENV{SCRIPT_NAME}?subway=team'>\n"; | ||
698 | print "<table bgcolor=000000 cellspacing=0 cellpadding=1><TR><TD>\n"; | ||
699 | print "<TABLE bgcolor='EFEFEF' cellspacing=0 cellpadding=0>\n"; | ||
700 | print "<TR><TD>Nome:</TD><TD><input type=text name='nome'></TD></TR>\n"; | ||
701 | print "<TR><TD>Velocidade</TD><TD>\n"; | ||
702 | for $i (0 .. 10) { | ||
703 | print "<input type=radio name='vel' value='$i'>\n"; | ||
704 | }; | ||
705 | print "</TD></TR>\n"; | ||
706 | print "<TR><TD>Forēa</TD><TD>\n"; | ||
707 | for $i (0 .. 10) { | ||
708 | print "<input type=radio name='for' value='$i'>\n"; | ||
709 | }; | ||
710 | print "</TD></TR>\n"; | ||
711 | print "<TR><TD>Agilidade</TD><TD>\n"; | ||
712 | for $i (0 .. 10) { | ||
713 | print "<input type=radio name='agi' value='$i'>\n"; | ||
714 | }; | ||
715 | print "</TD></TR>\n"; | ||
716 | print "<TR><TD>Eficacia</TD><TD>\n"; | ||
717 | for $i (0 .. 10) { | ||
718 | print "<input type=radio name='efi' value='$i'>\n"; | ||
719 | }; | ||
720 | print "</TD></TR>\n"; | ||
721 | print "<TR><TD>Posiēćo</TD><TD>\n"; | ||
722 | $sth=$db->prepare("select * from pos"); | ||
723 | $sth->execute; | ||
724 | print "<select name=pos>\n"; | ||
725 | while($res=$sth->fetchrow_hashref) { | ||
726 | print "<option value='$res->{id}'>$res->{namepos}</option>\n"; | ||
727 | }; | ||
728 | print "</select>\n"; | ||
729 | print "</TD></TR>\n"; | ||
730 | print "<TR><TD colspan=2 align='left'><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&rid=".int(rand()*100)."\"' value='<- Voltar'><input type=submit name=criarjog value='Criar'></TD></TR>\n"; | ||
731 | print "</TABLE>\n"; | ||
732 | print "</TD></TR></TABLE>\n"; | ||
733 | print "</form>\n"; | ||
734 | print "<HR>"; | ||
735 | } else { | ||
736 | print "<form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&criarjog=1\&rid=".int(rand()*100)."\"' value='Criar jogador'></form>\n"; | ||
737 | }; | ||
738 | }; | ||
739 | } else { | ||
740 | print "Ainda nćo tem ainda uma equipa, escreva os dados para cria-la<BR>\n"; | ||
741 | print "<FORM method='POST' action='$ENV{SCRIPT_NAME}?subway=team'>\n"; | ||
742 | print "<table border=0 cellspacing=0 cellpading=1 bgcolor='000000'><TR><TD>"; | ||
743 | print "<table bgcolor='EFEFEF' cellspacing=0 cellpadding=0 border=0>\n"; | ||
744 | print "<TR><TD> Nome de equipa: </TD><TD><input type=text name=equipa></TD></TR>\n"; | ||
745 | print "<TR><TD colspan=2><input type=submit value='Criar' name='criar'></TD></TR>\n"; | ||
746 | print "</TABLE>\n"; | ||
747 | print "</TD></TR></TABLE>\n"; | ||
748 | print "</FORM>\n"; | ||
749 | |||
750 | }; | ||
751 | }; | ||
752 | |||
753 | |||
754 | ### ecran que especifica os utilizadores online | ||
755 | ## | ||
756 | # | ||
757 | if($QUERY_STRING{subway} eq "who") { | ||
758 | print "<CENTER><font size=6 face='Verdana'><B>Quem estį online</B></font><hr></CENTER>\n"; | ||
759 | print "Encontram-se os seguintes utilizadores online:<BR>\n"; | ||
760 | $sth=$db->prepare("select * from userinfo where lldate>'".(time-300)."' and lid!='0'"); | ||
761 | $sth->execute; | ||
762 | while($res=$sth->fetchrow_hashref) { | ||
763 | print "<font color='FFEE00'><B>$res->{userid}($res->{nome})</B></font><BR>\n"; | ||
764 | }; | ||
765 | print "<HR>\n"; | ||
766 | $sth->finish; | ||
767 | }; | ||
768 | ### submenu das mensagens | ||
769 | ## | ||
770 | # | ||
771 | if($QUERY_STRING{subway} eq "msg") { | ||
772 | print "<CENTER><font size=6 face='Verdana'><B>Caixa de correio</B></font><hr></CENTER>\n"; | ||
773 | if($POST{apagar}) { | ||
774 | $sth=$db->prepare("select * from msg where useridto='\Q$COOKIE{login}\E'"); | ||
775 | $sth->execute; | ||
776 | while($res=$sth->fetchrow_hashref) { | ||
777 | if($POST{'del'.$res->{id}}) { | ||
778 | $db->do("delete from msg where id='$res->{id}'"); | ||
779 | print "Mensagem Apagada<BR>\n"; | ||
780 | }; | ||
781 | }; | ||
782 | }; | ||
783 | if($POST{msg}) { | ||
784 | do { | ||
785 | $id=int(rand()*200000); | ||
786 | $sth=$db->prepare("select * from msg where id='$id'"); | ||
787 | $sth->execute; | ||
788 | } while($sth->rows); | ||
789 | if($POST{to} eq "") { | ||
790 | print "<font color='ff0000'>Terį de especificar um utilizador a quem enviar</font><BR>\n"; | ||
791 | } else { | ||
792 | $db->do("insert into msg (id,useridfrom,useridto,data,subject,mensagem) values('$id','\Q$COOKIE{login}\E','\Q$POST{to}\E','".time()."','\Q$POST{Assunto}\E','\Q$POST{message}\E')"); | ||
793 | print "Mensagem Enviada<BR>\n"; | ||
794 | }; | ||
795 | } | ||
796 | if($QUERY_STRING{ler}) { | ||
797 | $sth=$db->prepare("select * from msg where useridto='\Q$COOKIE{login}\E' and id='\Q$QUERY_STRING{ler}\E'"); | ||
798 | $sth->execute; | ||
799 | $res=$sth->fetchrow_hashref; | ||
800 | $sth->finish; | ||
801 | $sth=$db->prepare("select * from userinfo where userid='\Q$res->{useridfrom}\E'"); | ||
802 | $sth->execute; | ||
803 | $res1=$sth->fetchrow_hashref; | ||
804 | $sth->finish; | ||
805 | print "<CENTER><TABLE bgcolor='FFFFCC' border=0 cellspacing=0 cellpadding=0>\n"; | ||
806 | print "<TR><TD>De: <B>$res->{useridfrom}($res1->{nome})</B> Assunto: <B>$res->{subject}</B> em: <B>".mydate("%a %d %b %Y %H:%M",$res->{data})."</B><BR><BR>\n"; | ||
807 | $text= $res->{mensagem}; | ||
808 | $text=~ s/\n/<BR>/sg; | ||
809 | print "$text<BR><BR></TD></TR>\n"; | ||
810 | $db->do("update msg set lida='1' where id='\Q$QUERY_STRING{ler}\E'"); | ||
811 | print "<TR><TD>\n"; | ||
812 | print "<TABLE cellspacing=0 cellpadding=0><TR><TD><form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."\"' value='<- Voltar'></form></TD>\n"; | ||
813 | print "<TD><form action='$ENV{SCRIPT_NAME}?subway=msg' method=POST><input type=hidden name='del$res->{id}' value='1'><input type=submit name='apagar' value='Apagar'></form></TD>\n"; | ||
814 | print "</TR></TABLE></TD></TR></TABLE></CENTER>\n"; | ||
815 | print "<HR>\n"; | ||
816 | print "<CENTER>Responder<BR>\n"; | ||
817 | print "<FORM action='$ENV{SCRIPT_NAME}?subway=msg' method='post'>\n"; | ||
818 | print "<TABLE bgcolor='000000' cellspacing=1 border=0><TR><TD>\n"; | ||
819 | print "<TABLE cellspacing=0 bgcolor='EFEFEF' border=0>\n"; | ||
820 | print "<input type=hidden name=to value='$res1->{userid}'>\n"; | ||
821 | print "<TR><TD>Assunto:</TD><TD><input type=text name='Assunto' value='RE: $res->{subject}' size=40></TD></TR>\n"; | ||
822 | print "<TR><TD colspan=2>Mensagem:</TD></TR>\n"; | ||
823 | print "<TR><TD colspan=2><textarea name='message' cols=50 rows=7>"; | ||
824 | $text="\nDe: $res->{useridfrom} Em: ".mydate("%a %d %b %Y %H:%M",$res->{data})."\n\n$res->{mensagem}"; | ||
825 | $text=~ s/\n/\n>/sg; | ||
826 | print $text; | ||
827 | print "</textarea></TD></TR>\n"; | ||
828 | print "<TR><TD colspan=2 align='right'><input type=submit name='msg' value=' Enviar '></TD></TR>\n"; | ||
829 | print "</TABLE>\n"; | ||
830 | print "</TD></TR></TABLE></CENTER>\n"; | ||
831 | print "</FORM>\n"; | ||
832 | }else { | ||
833 | print "Consulta de mensagens: <BR>\n"; | ||
834 | $sth=$db->prepare("select * from msg where useridto='\Q$COOKIE{login}\E' order by data DESC"); | ||
835 | $sth->execute; | ||
836 | if($sth->rows) { | ||
837 | print "<table border=0 width=100% cellspacing=0 cellpadding=0 bgcolor='EFEFEF'>"; | ||
838 | print "<FORM action='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."' METHOD='POST'>\n"; | ||
839 | while($res=$sth->fetchrow_hashref) { | ||
840 | $sth1=$db->prepare("select * from userinfo where userid='\Q$res->{useridfrom}\E'"); | ||
841 | $sth1->execute; | ||
842 | $res1=$sth1->fetchrow_hashref; | ||
843 | print "<TR><TD><input type=checkbox name='del$res->{id}' value='1'>De: <a href='mailto:$res1->{email}'>$res->{useridfrom}</a> Assunto: <a href='$ENV{SCRIPT_NAME}?subway=msg\&ler=$res->{id}'><B>$res->{subject}</B></a> Data: ".mydate("%a, %d %b %Y %H:%M",$res->{date}); | ||
844 | if($res->{lida}) { | ||
845 | print " <font color='FF0000'>lida</font>\n"; | ||
846 | } else { | ||
847 | print " <font color='00AA00'>Nova</font>\n"; | ||
848 | }; | ||
849 | print "</TD></TR>\n"; | ||
850 | $sth1->finish; | ||
851 | }; | ||
852 | print "<TR><TD colspan=2 align='left'><input type=submit name='apagar' value='Apagar'></TD></TR>\n"; | ||
853 | print "</FORM>\n"; | ||
854 | print "</TABLE>\n"; | ||
855 | |||
856 | }; | ||
857 | print "<HR>\n"; | ||
858 | print "<CENTER>\n"; | ||
859 | print "Enviar mensagem<BR>\n"; | ||
860 | print "<FORM action='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."' method='post'>\n"; | ||
861 | print "<TABLE bgcolor='000000' cellspacing=1 border=0><TR><TD>\n"; | ||
862 | print "<TABLE cellspacing=0 bgcolor='EFEFEF' border=0>\n"; | ||
863 | $sth=$db->prepare("select * from userinfo where userid<>'\Q$COOKIE{login}\E'"); | ||
864 | $sth->execute; | ||
865 | print "<TR><TD>Para:</TD><TD>\n"; | ||
866 | print "<select name='to'>\n"; | ||
867 | while($res=$sth->fetchrow_hashref) { | ||
868 | print "<option value='$res->{userid}'>$res->{userid}($res->{nome})</option>\n"; | ||
869 | }; | ||
870 | print "</select>\n"; | ||
871 | print "</TD></TR>\n"; | ||
872 | print "<TR><TD>Assunto:</TD><TD><input type=text name='Assunto' size=40></TD></TR>\n"; | ||
873 | print "<TR><TD colspan=2>Mensagem:</TD></TR>\n"; | ||
874 | print "<TR><TD colspan=2><textarea name='message' cols=50 rows=7></textarea></TD></TR>\n"; | ||
875 | print "<TR><TD colspan=2 align='right'><input type=submit name='msg' value=' Enviar '></TD></TR>\n"; | ||
876 | print "</TABLE>\n"; | ||
877 | print "</TD></TR></TABLE>\n"; | ||
878 | print "</FORM>\n"; | ||
879 | print "</CENTER>\n"; | ||
880 | }; | ||
881 | |||
882 | }; ## END CORREIO | ||
883 | ## START FORUM | ||
884 | if($QUERY_STRING{subway} eq "forum") { | ||
885 | print "<CENTER><font size=6 face='Verdana'><B>Forum</B></font><hr></CENTER>\n"; | ||
886 | if($POST{enviar}) { | ||
887 | $done=0; | ||
888 | if($POST{replyto} ne "-1") { | ||
889 | $sth=$db->prepare("select * from forum where id='\Q$POST{replyto}\E'"); | ||
890 | $sth->execute; | ||
891 | if(!$sth->rows){ | ||
892 | print "<FONT color='FF000000'>Nćo poderį responder a uma mensagem nćo existente</font><BR>\n"; | ||
893 | $done=1; | ||
894 | }; | ||
895 | $sth->finish; | ||
896 | }; | ||
897 | if(!$done) { | ||
898 | ## force to give new id without doubling | ||
899 | do { | ||
900 | $id=int(rand()*200000); | ||
901 | $sth=$db->prepare("select * from forum where id='$id'"); | ||
902 | } while($sth->rows); | ||
903 | $sth->finish; | ||
904 | $db->do("insert into forum (id,useridfrom,subject,message,date,replyto) values('$id','\Q$COOKIE{login}\E','\Q$POST{subject}\E','\Q$POST{message}\E','".time."','$POST{replyto}')"); | ||
905 | }; | ||
906 | }; | ||
907 | if($QUERY_STRING{ler}) { | ||
908 | $sth=$db->prepare("select * from forum where id='\Q$QUERY_STRING{ler}\E'"); | ||
909 | $sth->execute; | ||
910 | $res=$sth->fetchrow_hashref; | ||
911 | $sth->finish; | ||
912 | $sth=$db->prepare("select * from userinfo where userid='\Q$res->{useridfrom}\E'"); | ||
913 | $sth->execute; | ||
914 | $res1=$sth->fetchrow_hashref; | ||
915 | $sth->finish; | ||
916 | print "<center><table bgcolor='FFFFCC' cellspacing=0 cellpadding=0>\n"; | ||
917 | print "<TR><TD>De: <B>$res->{useridfrom}($res1->{nome})</B> Assunto: <B>$res->{subject}</B> em: <B>".mydate("%a %d %b %Y %H:%M",$res->{data})."</B><BR><BR>\n"; | ||
918 | $text= $res->{message}; | ||
919 | $text=~ s/\n/<BR>/sg; | ||
920 | print "$text<BR><BR></TD></TR>\n"; | ||
921 | $db->do("update msg set lida='1' where id='\Q$QUERY_STRING{ler}\E'"); | ||
922 | print "<TR><TD>\n"; | ||
923 | print "<TABLE border=0 cellspacing=0 cellpadding=0><TR>\n"; | ||
924 | print "<TD><form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&rid=".int(rand()*100)."\"' value='<- Voltar'></form></TD>\n"; | ||
925 | print "<TD><form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&adicionar=$res->{id}\&ler=$res->{id}\&rid=".int(rand()*100)."\"' value='Responder'></form></TD>\n" if(!$QUERY_STRING{adicionar}); | ||
926 | print "</TR></TABLE>\n"; | ||
927 | print "</TD></TR></TABLE></CENTER>\n"; | ||
928 | print "<HR>\n"; | ||
929 | }; | ||
930 | if($QUERY_STRING{adicionar}) { | ||
931 | print "<CENTER>\n"; | ||
932 | print "<FORM action='$ENV{SCRIPT_NAME}?subway=forum' METHOD='POST'>\n"; | ||
933 | print "<TABLE bgcolor='000000' cellspacing=1 cellpadding=0><TR><TD>\n"; | ||
934 | print "<TABLE border=0 bgcolor='EFEFEF' cellpadding=0 cellspacing=0>\n"; | ||
935 | print "<TR><TD>Assunto:</TD><TD>"; | ||
936 | if($QUERY_STRING{adicionar} > '-1') { | ||
937 | $sth=$db->prepare("select * from forum where id='\Q$QUERY_STRING{adicionar}\E'"); | ||
938 | $sth->execute; | ||
939 | $res=$sth->fetchrow_hashref; | ||
940 | print "<input size=40 type='text' value='RE:$res->{subject}' name='subject'></TD>\n"; | ||
941 | $sth->finish; | ||
942 | } else { | ||
943 | print "<input size=40 type='text' name='subject'></TD>\n"; | ||
944 | |||
945 | }; | ||
946 | print "<TR><TD colspan=2>Mensagem</TD></TR>\n"; | ||
947 | print "<TR><TD colspan=2 align=center><textarea name='message' cols=40 rows=5></textarea></TD></TR>\n"; | ||
948 | print "<TR><TD colspan=2 align=right><input type=submit name='enviar' value='Enviar'></TD></TR>\n"; | ||
949 | print "<input type=hidden name='replyto' value='$QUERY_STRING{adicionar}'>\n"; | ||
950 | print "</TABLE>\n"; | ||
951 | print "</TD></TR></TABLE>\n"; | ||
952 | print "</FORM>\n"; | ||
953 | print "<form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&rid=".int(rand()*100)."\"' value='<- Voltar'></form>\n" if ($QUERY_STRING{adicionar} eq "-1"); | ||
954 | print "</CENTER>\n"; | ||
955 | print "<HR>\n"; | ||
956 | }; | ||
957 | print "Mensagens<BR>\n"; | ||
958 | $in=1; | ||
959 | $sth[$in]=$db->prepare("select * from forum where replyto='-1' order by date DESC"); | ||
960 | $sth[$in]->execute; | ||
961 | print "<TABLE width=100% cellspacing=1 cellpadding=0 border=0>\n"; | ||
962 | $done=0; | ||
963 | while($in>0) { | ||
964 | while(!$done && !($res=$sth[$in]->fetchrow_hashref)) { | ||
965 | $sth[$in]->finish; | ||
966 | $in--; | ||
967 | if($in==0) { | ||
968 | $done=1; | ||
969 | }; | ||
970 | }; | ||
971 | if(!$done) { | ||
972 | if($in==1) { | ||
973 | print "<TR><TD bgcolor='FFFFFF'>#<a href='$ENV{SCRIPT_NAME}?subway=forum\&ler=$res->{id}\&rid=".int(rand()*100)."'><B>$res->{subject}</B></A> Por: <B>$res->{useridfrom}</B> em: ".mydate("%a %d %b %Y %H:%M",$res->{date})."</TD></TR>\n"; | ||
974 | } else { | ||
975 | print "<TR><TD bgcolor='EFEFEF'>"."\ " x ($in*2)."\$<a href='$ENV{SCRIPT_NAME}?subway=forum\&ler=$res->{id}\&rid=".int(rand()*100)."'><B>$res->{subject}</B></A> Por: <B>$res->{useridfrom}</B> em: ".mydate("%a %d %b %Y %H:%M",$res->{date})."</TD></TR>\n"; | ||
976 | }; | ||
977 | $sth[$in+1]=$db->prepare("select * from forum where replyto='$res->{id}' order by date DESC"); | ||
978 | $sth[$in+1]->execute; | ||
979 | if($sth[$in+1]->rows>0) { | ||
980 | $in++; | ||
981 | }else { | ||
982 | $sth[$in+1]->finish; | ||
983 | }; | ||
984 | }; | ||
985 | }; | ||
986 | print "</TABLE>\n"; | ||
987 | print "<form><input type=button onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&adicionar=-1\&rid=".int(rand()*100)."\"' value='Adicionar'></form>\n" if(!$QUERY_STRING{adicionar}); | ||
988 | print "<HR>\n"; | ||
989 | }; ## END FORUM | ||
990 | |||
991 | ## | ||
992 | ######### | ||
993 | ### ecran inicial | ||
994 | ### | ||
995 | ### | ||
996 | ## START HOME | ||
997 | if(!$QUERY_STRING{subway}) { | ||
998 | print "Boas, <B>" . (split(/ /,$res->{nome}))[0] . "</B><BR>\n"; | ||
999 | $sth=$db->prepare("select * from conta where userid='\Q$COOKIE{login}\E'"); | ||
1000 | $sth->execute; | ||
1001 | $res=$sth->fetchrow_hashref; | ||
1002 | print "Tens currentemente "; | ||
1003 | if($res->{value}>0) { | ||
1004 | print "<font color='00FF00'>$res->{value}</font>"; | ||
1005 | } else { | ||
1006 | print "<font color='FF0000'>$res->{value}</font>"; | ||
1007 | }; | ||
1008 | print " cts na Conta principal, tem "; | ||
1009 | $sth=$db->prepare("select count(id) from msg where useridto='\Q$COOKIE{login}\E' and lida='0'"); | ||
1010 | $sth->execute; | ||
1011 | $res=$sth->fetchrow_arrayref; | ||
1012 | print "<B>$res->[0]</B> mensagen(s) nova(s)<BR>\n"; | ||
1013 | $sth=$db->prepare("select count(userid) from userinfo where lldate>'".(time-300)."' and lid!='0'"); | ||
1014 | $sth->execute; | ||
1015 | $res=$sth->fetchrow_arrayref; | ||
1016 | print "->$res->[0] Utilizadores online<BR><BR>\n"; | ||
1017 | $sth->finish; | ||
1018 | print "<B>Estatķsticas: (demo)</B><BR>\n"; | ||
1019 | print "<table cellspacing=0 cellpading=0 border=0>\n"; | ||
1020 | @rtempname=("Desempenho","Dinheiro","Forēa","ex1","ex2"); | ||
1021 | $r=0; | ||
1022 | while($r<5) { | ||
1023 | print "<TR><TD align=right >$rtempname[$r]:</TD><TD>"; | ||
1024 | $c=int(rand()*10); | ||
1025 | for $i (0 .. 10) { | ||
1026 | if($i<$c) { | ||
1027 | print "<img width=15 height=15 src='$ENV{SCRIPT_NAME}?img=greenball'>"; | ||
1028 | } else { | ||
1029 | print "<img wdith=15 height=15 src='$ENV{SCRIPT_NAME}?img=blackball'>"; | ||
1030 | |||
1031 | }; | ||
1032 | }; | ||
1033 | print "</TD></TR>"; | ||
1034 | $r++; | ||
1035 | }; | ||
1036 | print "</TABLE>\n"; | ||
1037 | print "<CENTER><font size=6 face='Verdana'><B>Noticias</B></font><hr></CENTER><BR><BR>\n"; | ||
1038 | $sth=$db->prepare("select * from noticia where useridto='$COOKIE{login}' order by date DESC"); | ||
1039 | $sth->execute; | ||
1040 | while($res=$sth->fetchrow_hashref) { | ||
1041 | print "<center><TABLE border=0 cellspacing=0 cellpading=1>\n"; | ||
1042 | print "<TR><TD bgcolor='EEEEFF'>Data: <B>".mydate("%a, %d %b %Y %H:%M",$res->{date})."</B><BR></TD></TR>\n"; | ||
1043 | print "<TR><TD bgcolor='FFFFEE'>$res->{noticia}<BR></TD></TR>\n"; | ||
1044 | print "</TABLE></center><BR>\n"; | ||
1045 | $db->do("update noticia set lida='1',rdate='".time()."' where id='$res->{id}' and lida='0'"); | ||
1046 | }; | ||
1047 | print "<HR>\n"; | ||
1048 | |||
1049 | }; ## END HOME | ||
1050 | print "</font>\n"; | ||
1051 | print "</TD></TR>\n"; | ||
1052 | print "<TR><TD height='20px' bgcolor='EFEFEF' align='bottom'>\n"; | ||
1053 | $sth=$db->prepare("select count(userid) from userinfo where lldate>'".(time-300)."' and lid!='0'"); | ||
1054 | $sth->execute; | ||
1055 | $res=$sth->fetchrow_arrayref; | ||
1056 | $sth->finish; | ||
1057 | print "<a href='$ENV{SCRIPT_NAME}?subway=who&rid=".int(rand()*100)."'> <B>$res->[0]</B></a> Utilizador(es) online,"; | ||
1058 | $sth=$db->prepare("select count(id) from msg where useridto='\Q$COOKIE{login}\E' and lida='0'"); | ||
1059 | $sth->execute; | ||
1060 | $res=$sth->fetchrow_arrayref; | ||
1061 | $sth->finish; | ||
1062 | print " <a href='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."'><B>$res->[0]</B></a> Mensagens novas, "; | ||
1063 | $sth=$db->prepare("select * from conta where userid='\Q$COOKIE{login}\E'"); | ||
1064 | $sth->execute; | ||
1065 | $res=$sth->fetchrow_hashref; | ||
1066 | $sth->finish; | ||
1067 | print "Tem <B>$res->{value}cts</B> na sua conta</TD></TR>\n"; | ||
1068 | |||
1069 | print "</TD></TR></table>\n"; | ||
1070 | print "</BODY>\n"; | ||
1071 | $db->disconnect; | ||
1072 | }; | ||
1073 | |||
1074 | |||
1075 | ## isto é para quando iniciar o login o nome de utilizador jį estar na caixa de texto durante 1 mźs :) | ||
1076 | ## | ||
1077 | cookie("username",$POST{username},"+1M") if( $POST{username} ); | ||
1078 | print "Content-type: text/html\n\n"; | ||
1079 | |||
1080 | |||
1081 | ## tratamento de treinos | ||
1082 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
1083 | $sth=$db->prepare("select * from treino where fdate<'".time()."'"); | ||
1084 | $sth->execute; | ||
1085 | if($sth->rows>0) { | ||
1086 | while($res=$sth->fetchrow_hashref) { | ||
1087 | $sth1=$db->prepare("select * from jogador where nome='$res->{jogid}'"); | ||
1088 | $sth1->execute; | ||
1089 | $res1=$sth1->fetchrow_hashref; | ||
1090 | $curval=$res1->{$res->{treino}}; | ||
1091 | $newval=($curval+int((($res->{fdate}-$res->{date})/8460))); | ||
1092 | $db->do("update jogador set $res->{treino}='$newval', doing='0' where nome='$res->{jogid}'"); | ||
1093 | $db->do("delete from treino where jogid='$res->{jogid}'"); | ||
1094 | $sth2=$db->prepare("select * from equipa where equipaid='$res1->{equipaid}'"); | ||
1095 | $sth2->execute; | ||
1096 | $res2=$sth2->fetchrow_hashref; | ||
1097 | enviarnoticia("Jogador $res->{nome} Acabou o seu treino ganhando assim $newval nas suas caracteristicas","$res2->{userid}"); | ||
1098 | $sth2->finish; | ||
1099 | }; | ||
1100 | $sth1->finish; | ||
1101 | }; | ||
1102 | $sth->finish; | ||
1103 | $db->disconnect; | ||
1104 | #### | ||
1105 | ## se a variavel posteriormente activa way for igual a logged (significa que o utilizador estį identificado) | ||
1106 | ## entćo corre a funcēćo game onde estį o jogo em si | ||
1107 | |||
1108 | if($way eq "logged") { | ||
1109 | ### Tratamento de noticias obsoletas | ||
1110 | ## | ||
1111 | $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass"); | ||
1112 | $sth=$db->prepare("select * from noticia where lida='1' and rdate<'".(time-600)."' and useridto='$COOKIE{login}'"); | ||
1113 | $sth->execute; | ||
1114 | while($res=$sth->fetchrow_hashref) { | ||
1115 | $db->do("delete from noticia where id='$res->{id}'"); | ||
1116 | }; | ||
1117 | $db->disconnect; | ||
1118 | ################### noticias | ||
1119 | game; | ||
1120 | }; | ||
1121 | |||
1122 | if($way eq "adduser") { | ||
1123 | printadduser; | ||
1124 | }; | ||
1125 | ## se a variavel $way nćo estiver activa (significa que nada anteriormente se passou) entćo imprime o menu de login | ||
1126 | ## | ||
1127 | if($way eq "") { | ||
1128 | printlogin; | ||
1129 | }; | ||
1130 | # | ||
1131 | |||
1132 | |||
1133 | |||
1134 | |||
1135 | |||
1136 | |||
1137 | |||
diff --git a/doc/examples/cgi-bin/simple.cgi b/doc/examples/cgi-bin/simple.cgi deleted file mode 100644 index 421924c3..00000000 --- a/doc/examples/cgi-bin/simple.cgi +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | |||
4 | |||
5 | echo -ne "Content-type: text/html\r\n\r\n" | ||
6 | |||
7 | echo -e "<HTML>\n" | ||
8 | echo -e "<BODY>\n" | ||
9 | |||
10 | echo -e "THis is a simple cgi file\n" | ||
11 | echo -e "$QUERY_STRING" | ||
12 | echo -e "</body>" | ||
13 | echo -e "</html>" | ||
14 | |||
diff --git a/doc/examples/cgi-bin/simple1.cgi b/doc/examples/cgi-bin/simple1.cgi deleted file mode 100644 index 15a20458..00000000 --- a/doc/examples/cgi-bin/simple1.cgi +++ /dev/null | |||
@@ -1,125 +0,0 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # Perl CGI document template... by Luis Figueiredo (stdio@netc.pt) | ||
3 | # | ||
4 | # | ||
5 | # | ||
6 | |||
7 | |||
8 | #use strict; | ||
9 | my %POST; | ||
10 | my %QUERY_STRING; | ||
11 | my %COOKIE; | ||
12 | my $stdindata; | ||
13 | |||
14 | while(<STDIN>) { | ||
15 | $stdindata.=$_; | ||
16 | }; | ||
17 | if($ENV{QUERY_STRING}) { | ||
18 | my (@varsdata)=split(/&/,$ENV{QUERY_STRING}); | ||
19 | foreach (@varsdata) { | ||
20 | my ($name,$value)=split(/=/,$_); | ||
21 | $value =~ s/\+/ /g; | ||
22 | $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; | ||
23 | $QUERY_STRING{$name}=$value; | ||
24 | }; | ||
25 | |||
26 | }; | ||
27 | if($ENV{REQUEST_METHOD} =~ m/POST/ && $ENV{CONTENT_TYPE} =~ m/application\/x-www-form-urlencoded/i) { | ||
28 | my (@varsdata)=split(/&/,$stdindata); | ||
29 | foreach (@varsdata) { | ||
30 | my ($name,$value)=split(/=/,$_); | ||
31 | $value =~ s/\+/ /g; | ||
32 | $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; | ||
33 | $POST{$name}=$value; | ||
34 | }; | ||
35 | |||
36 | }; | ||
37 | if($ENV{HTTP_COOKIE} || $ENV{COOKIE}) { | ||
38 | my $cookie=$ENV{HTTP_COOKIE} || $ENV{COOKIE}; | ||
39 | my(@cookiedata)=split(/; /,$cookie); | ||
40 | foreach(@cookiedata) { | ||
41 | $_ =~ /(.*?)=(.*)/; | ||
42 | $COOKIE{$1}=$2; | ||
43 | }; | ||
44 | }; | ||
45 | |||
46 | sub mydate { | ||
47 | my $format=shift; | ||
48 | my($time) = @_; | ||
49 | my(%mult) = ('s'=>1, | ||
50 | 'm'=>60, | ||
51 | 'h'=>60*60, | ||
52 | 'd'=>60*60*24, | ||
53 | 'M'=>60*60*24*30, | ||
54 | 'y'=>60*60*24*365); | ||
55 | my($offset); | ||
56 | if (!$time || (lc($time) eq 'now')) { | ||
57 | $offset = 0; | ||
58 | } elsif ($time=~/^\d+/) { | ||
59 | $offset=($time-time); | ||
60 | } elsif ($time=~/^([+-]?(?:\d+|\d*\.\d*))([mhdMy]?)/) { | ||
61 | $offset = ($mult{$2} || 1)*$1; | ||
62 | } else { | ||
63 | $offset=($time-time); | ||
64 | } | ||
65 | my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; | ||
66 | my(@LMON)=qw/January February March April May June July August September October November December/; | ||
67 | my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/; | ||
68 | my(@LWDAY) = qw/Sunday Monday Tuesday Wednesday Thursday Friday Saturdat/; | ||
69 | my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+$offset); | ||
70 | $year+=1900; | ||
71 | $format =~ s/\%Y/$year/eg; | ||
72 | $format =~ s/\%a/$WDAY[$wday]/eg; | ||
73 | $format =~ s/\%A/$LWDAY[$wday]/eg; | ||
74 | $format =~ s/\%m/sprintf("%02d",$mon+1)/eg; | ||
75 | $format =~ s/\%d/sprintf("%02d",$mday)/eg; | ||
76 | $format =~ s/\%H/sprintf("%02d",$hour)/eg; | ||
77 | $format =~ s/\%M/sprintf("%02d",$min)/eg; | ||
78 | $format =~ s/\%S/sprintf("%02d",$sec)/eg; | ||
79 | $format =~ s/\%b/$MON[$mon]/eg; | ||
80 | $format =~ s/\%B/$LMON[$mon]/eg; | ||
81 | $format =~ s/\%Z/GMT/g; | ||
82 | return $format; | ||
83 | } | ||
84 | |||
85 | sub cookie { | ||
86 | my $name=shift; | ||
87 | my $value=shift; | ||
88 | my $expire=shift; | ||
89 | if($value eq "") { | ||
90 | print "Set-Cookie: $name; path=$ENV{SCRIPT_NAME}; "; | ||
91 | } else { | ||
92 | print "Set-Cookie: $name=$value; path=$ENV{SCRIPT_NAME}; "; | ||
93 | }; | ||
94 | if($expire) { | ||
95 | print "expires=".mydate("%a, %d-%b-%Y %H:%M:%S %Z",$expire); | ||
96 | }; | ||
97 | #print " secure"; | ||
98 | print "\r\n"; # end cookie | ||
99 | }; | ||
100 | |||
101 | |||
102 | #COOKIES | ||
103 | |||
104 | |||
105 | #print "Date: ".mydate("%a, %d %b %Y %H:%M:%S %Z","+5m")."\n"; | ||
106 | cookie("teste1","maria","+5m"); | ||
107 | cookie("login","manel","+5m"); | ||
108 | print "Content-type: text/html\r\n\r\n"; | ||
109 | |||
110 | |||
111 | |||
112 | print "<HTML>\n"; | ||
113 | print "<BODY bgcolor='EFEFEF'>\n"; | ||
114 | print "Simple cgi demo<BR>\n"; | ||
115 | print "<form action='$ENV{SCRIPT_NAME}?teste=new' method='POST'>\n"; | ||
116 | print "post value: <input type='text' name='login'>\n"; | ||
117 | print "<input type=submit name='go' value='send'>\n"; | ||
118 | print "</form><BR>\n"; | ||
119 | |||
120 | print "results:<table border=1><TR><TD>cookie 'maria'</TD><TD> $COOKIE{teste1}</TD></TR>\n"; | ||
121 | print "<TR><TD>post 'login':</TD><TD> $POST{login}</TD></TR>\n"; | ||
122 | print "<TR><TD>querystring 'teste':</TD><TD> $QUERY_STRING{teste}</TD></TR>\n"; | ||
123 | print "</TABLE>\n"; | ||
124 | |||
125 | print "</BODY></HTML>\n"; | ||
diff --git a/doc/examples/cgi.c b/doc/examples/cgi.c deleted file mode 100644 index 5e1b76b9..00000000 --- a/doc/examples/cgi.c +++ /dev/null | |||
@@ -1,100 +0,0 @@ | |||
1 | /* by Luis Figueiredo (stdio@netc.pt) | ||
2 | * | ||
3 | * This is only a example if you intend to use this, please | ||
4 | * make this secure (checking file exec permissions etc.etc.) | ||
5 | */ | ||
6 | #include <stdio.h> | ||
7 | #include <fcntl.h> | ||
8 | #include <stdlib.h> | ||
9 | #include <string.h> | ||
10 | #include <dirent.h> | ||
11 | #include "web_server.h" | ||
12 | #include "debug.h" | ||
13 | |||
14 | |||
15 | |||
16 | extern struct web_client *current_web_client; | ||
17 | int PORT=80; | ||
18 | |||
19 | extern char **environ; | ||
20 | void cgi() { | ||
21 | char *reqfile=ClientInfo->request+1; // Skip '/' | ||
22 | char *tmp; | ||
23 | FILE *instream; | ||
24 | int stdo; | ||
25 | int ret; | ||
26 | int pid; | ||
27 | int outp; | ||
28 | if(!(pid=fork())) { | ||
29 | instream=tmpfile(); | ||
30 | // Setup envvars | ||
31 | setenv("SCRIPT_NAME",ClientInfo->request,1); | ||
32 | setenv("REQUEST_METHOD",ClientInfo->method,1); | ||
33 | if(strlen(tmp=ClientInfo->Query(NULL))) { | ||
34 | setenv("QUERY_STRING",tmp,1); | ||
35 | }; | ||
36 | if(strlen(tmp=ClientInfo->Post(NULL))) { | ||
37 | fwrite(tmp,strlen(tmp),1,instream); | ||
38 | } | ||
39 | setenv("CONTENT_TYPE",ClientInfo->Header("Content-type"),1); | ||
40 | if(strlen(tmp=ClientInfo->Header("Cookie"))) { | ||
41 | setenv("HTTP_COOKIE",tmp,1); | ||
42 | }; | ||
43 | dup2(ClientInfo->outfd,1); | ||
44 | dup2(fileno(instream),0); | ||
45 | fseek(instream,0,SEEK_SET); | ||
46 | execve(reqfile,NULL,environ); | ||
47 | }; | ||
48 | while(!(ret=waitpid(pid,&ret,0)))fprintf(stderr,"ret-%d\n",ret);; | ||
49 | |||
50 | }; | ||
51 | void index_() { | ||
52 | DIR *dir; | ||
53 | struct dirent *dire; | ||
54 | dir=opendir("cgi-bin"); | ||
55 | printf("Content-type: text/html\r\n\r\n"); | ||
56 | printf("<HTML>\n"); | ||
57 | printf("<BODY bgcolor='EFEFEF'>\n"); | ||
58 | printf("Browse /cgi-bin/*<BR>\n"); | ||
59 | while(dire=readdir(dir)) { | ||
60 | if(dire->d_name[0]!='.') { | ||
61 | if((int)(strstr(dire->d_name,".cgi")+4)==(int)(dire->d_name+strlen(dire->d_name))) { | ||
62 | printf("<a href='/cgi-bin/%s'>%s</a> -- ",dire->d_name,dire->d_name); | ||
63 | printf("<a href='/source?src=/cgi-bin/%s'>(see source)</a><BR>",dire->d_name,dire->d_name); | ||
64 | }; | ||
65 | }; | ||
66 | }; | ||
67 | closedir(dir); | ||
68 | }; | ||
69 | void source() { | ||
70 | char *tmp=ClientInfo->Query("src"); | ||
71 | char *tmp1; | ||
72 | /* security */ | ||
73 | while((tmp1=strstr(tmp,"../"))) { | ||
74 | tmp=tmp1+3; | ||
75 | }; | ||
76 | while((tmp1=strstr(tmp,"//"))) { | ||
77 | tmp=tmp1+2; | ||
78 | }; | ||
79 | tmp1=strstr(tmp,"/"); | ||
80 | if(tmp1==tmp) { | ||
81 | tmp=tmp1+1; | ||
82 | }; | ||
83 | /* security */ | ||
84 | printf("Content-type: text/plain\r\n\r\n"); | ||
85 | web_client_addfile(tmp); | ||
86 | }; | ||
87 | main() { | ||
88 | struct web_server server; | ||
89 | |||
90 | while(!web_server_init(&server,PORT,"cgi.log",0)) { | ||
91 | PORT++; | ||
92 | }; | ||
93 | printf("http://localhost:%d\n",PORT); | ||
94 | web_server_addhandler(&server,"* /source",source,0); | ||
95 | web_server_addhandler(&server,"* /*.cgi",cgi,0); | ||
96 | web_server_addhandler(&server,"* /",index_,0); | ||
97 | while(1) { | ||
98 | web_server_run(&server); | ||
99 | }; | ||
100 | }; | ||
diff --git a/doc/examples/demo.c b/doc/examples/demo.c deleted file mode 100644 index 5fb43a19..00000000 --- a/doc/examples/demo.c +++ /dev/null | |||
@@ -1,66 +0,0 @@ | |||
1 | |||
2 | |||
3 | #include <stdio.h> | ||
4 | #include <stdlib.h> | ||
5 | |||
6 | |||
7 | #include "web_server.h" | ||
8 | |||
9 | int PORT=80; | ||
10 | |||
11 | void index_html() { | ||
12 | printf("Content-type: text/html\r\n\r\n"); | ||
13 | printf("<HTML>\n"); | ||
14 | printf("<BODY bgcolor='EFEFEF'>\n"); | ||
15 | printf("libwebserver Example<BR><BR>\n"); | ||
16 | printf("Client info structure:<BR><code>\n"); | ||
17 | printf("struct ClientInfo {<BR>\n int outfd<BR>\n char *inetname<BR>\n char *request<BR>\n char *method<BR>\n char *user<BR>\n char *pass<BR>\n char *QueryData;<BR>\n struct memrequest *mem;<BR>\n char *(*Header)(char*);<BR>\n char *(*QueryString)(char*);<BR>\n char *(*Post)(char*);<BR>\n char *(*MultiPart)(char*);<BR>\n };<BR>\n"); | ||
18 | printf("ClientInfo->outfd=%d<BR>\n",ClientInfo->outfd); | ||
19 | printf("ClientInfo->request=%s<BR>\n",ClientInfo->request); | ||
20 | printf("ClientInfo->method=%s<BR>\n",ClientInfo->method); | ||
21 | printf("ClientInfo->Header(\"Host\")=\"%s\"<BR>\n",ClientInfo->Header("Host")); | ||
22 | printf("ClientInfo->Header(\"Accept\")=\"%s\"<BR>\n",ClientInfo->Header("Accept")); | ||
23 | printf("ClientInfo->Query(\"teste\")=\"%s\"<BR>\n",ClientInfo->Query("teste")); | ||
24 | printf("ClientInfo->Query(NULL)=\"%s\"<BR>\n",ClientInfo->Query(NULL)); | ||
25 | printf("ClientInfo->Post(\"dev\")=\"%s\"<BR>\n",ClientInfo->Post("dev")); | ||
26 | printf("ClientInfo->MultiPart(\"teste\").data=\"%s\"<BR>\n",ClientInfo->MultiPart("teste").data); | ||
27 | printf("ClientInfo->MultiPart(\"file1\").filename=\"%s\"<BR>\n",ClientInfo->MultiPart("file1").filename); | ||
28 | printf("ClientInfo->MultiPart(\"file1\").size=\"%d\"<BR>\n",ClientInfo->MultiPart("file1").size); | ||
29 | printf("ClientInfo->MultiPart(\"file1\").data=\""); | ||
30 | fwrite(ClientInfo->MultiPart("file1").data,ClientInfo->MultiPart("file1").size,1,stdout); | ||
31 | printf("\"<BR>\n"); | ||
32 | printf("<form action='/?teste=done' method='post' enctype='multipart/form-data'>\n"); | ||
33 | printf("<input type=file name='file1'><BR>\n"); | ||
34 | printf("<input type=hidden name='dev' value='Luis Figueiredo'>\n"); | ||
35 | printf("<input type=text name='teste'>\n"); | ||
36 | printf("<input type=submit name='GOO' value='send'>\n"); | ||
37 | printf("</form>\n"); | ||
38 | printf("Stats:<BR>\n"); | ||
39 | printf("<a href='http://libwebserver.sourceforge.net'><img border='0' src='/libwebserver.gif'></a><br>\n"); | ||
40 | printf("</BODY>\n"); | ||
41 | printf("</HTML>\n"); | ||
42 | }; | ||
43 | |||
44 | void logfile() { | ||
45 | FILE *log; | ||
46 | printf("Content-type: text/plain \r\n\r\n"); | ||
47 | web_client_addfile("./demo.log"); | ||
48 | printf("Fim do log\n"); | ||
49 | }; | ||
50 | |||
51 | int main() { | ||
52 | int pid; | ||
53 | struct web_server server; | ||
54 | while(!web_server_init(&server,PORT,"demo.log",0)) { | ||
55 | PORT++; | ||
56 | }; | ||
57 | printf("http://localhost:%d\n",PORT); | ||
58 | web_server_addhandler(&server,"* /",index_html,0); | ||
59 | web_server_addhandler(&server,"* /log",logfile,0); | ||
60 | while(1) { | ||
61 | // DO whatever u want | ||
62 | web_server_run(&server); // Process web_server | ||
63 | }; | ||
64 | return 0; | ||
65 | |||
66 | }; | ||
diff --git a/doc/examples/foo-cert.pem b/doc/examples/foo-cert.pem deleted file mode 100644 index 66676877..00000000 --- a/doc/examples/foo-cert.pem +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | Private-Key: (512 bit) | ||
2 | modulus: | ||
3 | 00:b4:fc:64:b0:c0:27:63:5c:a6:43:66:ac:68:58: | ||
4 | 48:37:d3:f5:a4:fa:af:a7:11:a1:fd:81:a4:7a:9e: | ||
5 | ff:90:a3:ee:df:ea:ef:11:54:b8:c0:0b:24:b3:6f: | ||
6 | ff:a8:83:b8:0c:08:cf:03:51:41:14:f0:70:20:ce: | ||
7 | 5f:25:a8:65:7f | ||
8 | publicExponent: 65537 (0x10001) | ||
9 | privateExponent: | ||
10 | 78:aa:da:bb:59:b2:29:36:49:88:20:b9:8c:6c:67: | ||
11 | e2:09:08:fb:71:44:91:c0:58:df:bb:83:1d:5a:4b: | ||
12 | 0c:74:8f:86:33:95:10:57:7d:32:c0:d3:6c:b8:c5: | ||
13 | 82:b4:ce:d6:28:b9:33:f7:ab:83:63:2d:13:74:95: | ||
14 | 49:37:2f:29 | ||
15 | prime1: | ||
16 | 00:ef:dc:c6:18:61:46:8d:be:d3:d1:4b:6f:5c:e3: | ||
17 | 1d:6a:9d:79:d5:b3:24:8c:ce:4c:db:99:d5:0e:70: | ||
18 | c8:70:fd | ||
19 | prime2: | ||
20 | 00:c1:29:92:34:03:4c:b9:9b:3b:61:09:55:be:c2: | ||
21 | f8:e2:e5:50:1e:5d:b2:8d:28:0b:d2:af:72:cc:82: | ||
22 | 88:87:2b | ||
23 | exponent1: | ||
24 | 00:db:3c:22:3f:d4:61:85:5b:3f:05:94:7a:54:1f: | ||
25 | 2e:1a:ed:96:97:51:a6:fd:9f:ee:35:e5:d4:0b:df: | ||
26 | e0:05:0d | ||
27 | exponent2: | ||
28 | 7e:97:c7:18:cd:7c:d0:3b:bb:2b:ba:59:76:bf:03: | ||
29 | 2c:78:cb:0c:4b:ae:04:32:d5:a4:cb:95:7a:10:a6: | ||
30 | 77:a7 | ||
31 | coefficient: | ||
32 | 00:b8:f0:d6:99:dc:85:6d:d8:04:c5:92:7e:db:41: | ||
33 | 2e:50:42:d0:f0:37:af:3c:b2:a6:74:92:a0:c9:99: | ||
34 | 47:18:41 | ||
35 | Certificate: | ||
36 | Data: | ||
37 | Version: 4 (0x3) | ||
38 | Serial Number: 0 (0x0) | ||
39 | Signature Algorithm: md5WithRSAEncryption | ||
40 | Issuer: C=UK, CN=OpenSSL Group | ||
41 | Validity | ||
42 | Not Before: Apr 23 06:55:21 2002 GMT | ||
43 | Not After : Apr 23 06:55:21 2003 GMT | ||
44 | Subject: C=UK, CN=OpenSSL Group | ||
45 | Subject Public Key Info: | ||
46 | Public Key Algorithm: rsaEncryption | ||
47 | RSA Public Key: (512 bit) | ||
48 | Modulus (512 bit): | ||
49 | 00:b4:fc:64:b0:c0:27:63:5c:a6:43:66:ac:68:58: | ||
50 | 48:37:d3:f5:a4:fa:af:a7:11:a1:fd:81:a4:7a:9e: | ||
51 | ff:90:a3:ee:df:ea:ef:11:54:b8:c0:0b:24:b3:6f: | ||
52 | ff:a8:83:b8:0c:08:cf:03:51:41:14:f0:70:20:ce: | ||
53 | 5f:25:a8:65:7f | ||
54 | Exponent: 65537 (0x10001) | ||
55 | X509v3 extensions: | ||
56 | Netscape Cert Type: | ||
57 | SSL Server | ||
58 | Netscape Comment: | ||
59 | example comment extension | ||
60 | Netscape SSL Server Name: | ||
61 | libwebserver | ||
62 | Signature Algorithm: md5WithRSAEncryption | ||
63 | 3e:6a:3c:4a:ec:8b:1f:eb:a8:99:33:d6:e0:f9:f1:a7:70:3c: | ||
64 | 7a:b1:73:ae:34:52:06:d0:be:0b:32:ed:ec:01:27:a5:d6:3c: | ||
65 | ce:34:38:f9:29:49:c1:0b:0d:9a:74:60:b8:4d:b9:e0:29:ad: | ||
66 | fd:5b:32:32:3f:3c:e8:93:2d:6a | ||
67 | -----BEGIN RSA PRIVATE KEY----- | ||
68 | MIIBOwIBAAJBALT8ZLDAJ2NcpkNmrGhYSDfT9aT6r6cRof2BpHqe/5Cj7t/q7xFU | ||
69 | uMALJLNv/6iDuAwIzwNRQRTwcCDOXyWoZX8CAwEAAQJAeKrau1myKTZJiCC5jGxn | ||
70 | 4gkI+3FEkcBY37uDHVpLDHSPhjOVEFd9MsDTbLjFgrTO1ii5M/erg2MtE3SVSTcv | ||
71 | KQIhAO/cxhhhRo2+09FLb1zjHWqdedWzJIzOTNuZ1Q5wyHD9AiEAwSmSNANMuZs7 | ||
72 | YQlVvsL44uVQHl2yjSgL0q9yzIKIhysCIQDbPCI/1GGFWz8FlHpUHy4a7ZaXUab9 | ||
73 | n+415dQL3+AFDQIgfpfHGM180Du7K7pZdr8DLHjLDEuuBDLVpMuVehCmd6cCIQC4 | ||
74 | 8NaZ3IVt2ATFkn7bQS5QQtDwN688sqZ0kqDJmUcYQQ== | ||
75 | -----END RSA PRIVATE KEY----- | ||
76 | -----BEGIN CERTIFICATE----- | ||
77 | MIIBmjCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAlMQswCQYDVQQGEwJVSzEW | ||
78 | MBQGA1UEAxMNT3BlblNTTCBHcm91cDAeFw0wMjA0MjMwNjU1MjFaFw0wMzA0MjMw | ||
79 | NjU1MjFaMCUxCzAJBgNVBAYTAlVLMRYwFAYDVQQDEw1PcGVuU1NMIEdyb3VwMFww | ||
80 | DQYJKoZIhvcNAQEBBQADSwAwSAJBALT8ZLDAJ2NcpkNmrGhYSDfT9aT6r6cRof2B | ||
81 | pHqe/5Cj7t/q7xFUuMALJLNv/6iDuAwIzwNRQRTwcCDOXyWoZX8CAwEAAaNfMF0w | ||
82 | EQYJYIZIAYb4QgEBBAQDAgZAMCgGCWCGSAGG+EIBDQQbFhlleGFtcGxlIGNvbW1l | ||
83 | bnQgZXh0ZW5zaW9uMB4GCWCGSAGG+EIBDAQRFg93d3cub3BlbnNzbC5vcmcwDQYJ | ||
84 | KoZIhvcNAQEEBQADQQA+ajxK7Isf66iZM9bg+fGncDx6sXOuNFIG0L4LMu3sASel | ||
85 | 1jzONDj5KUnBCw2adGC4TbngKa39WzIyPzzoky1q | ||
86 | -----END CERTIFICATE----- | ||
diff --git a/doc/examples/packetmounter.c b/doc/examples/packetmounter.c deleted file mode 100644 index 32bc79a1..00000000 --- a/doc/examples/packetmounter.c +++ /dev/null | |||
@@ -1,236 +0,0 @@ | |||
1 | |||
2 | |||
3 | #include <stdio.h> | ||
4 | #include <stdlib.h> | ||
5 | #include <time.h> | ||
6 | #include <sys/time.h> | ||
7 | |||
8 | typedef u_int32_t n_time; | ||
9 | #include <netinet/in.h> | ||
10 | #include <netinet/ip.h> | ||
11 | #define __FAVOR_BSD 1 | ||
12 | #include <netinet/tcp.h> | ||
13 | #include <sys/socket.h> | ||
14 | #include <netdb.h> | ||
15 | #include <regex.h> | ||
16 | #include <ctype.h> | ||
17 | #include <unistd.h> | ||
18 | #include <fcntl.h> | ||
19 | #include <string.h> | ||
20 | #include <unistd.h> | ||
21 | #include <signal.h> | ||
22 | |||
23 | #include "web_server.h" | ||
24 | |||
25 | int PORTSSL=443; | ||
26 | |||
27 | unsigned short in_chksum(unsigned short *addr, int len) { | ||
28 | register int nleft = len; | ||
29 | register int sum = 0; | ||
30 | u_short answer = 0; | ||
31 | |||
32 | while (nleft > 1) { | ||
33 | sum += *addr++; | ||
34 | nleft -= 2; | ||
35 | } | ||
36 | |||
37 | if (nleft == 1) { | ||
38 | *(unsigned char *)(&answer) = *(unsigned char *)addr; | ||
39 | sum += answer; | ||
40 | } | ||
41 | sum = (sum >> 16) + (sum & 0xffff); | ||
42 | sum += (sum >> 16); | ||
43 | answer = ~sum; | ||
44 | return(answer); | ||
45 | } | ||
46 | void packetmounter() { | ||
47 | char *t; | ||
48 | int s; | ||
49 | struct sockaddr_in to; | ||
50 | int i; | ||
51 | int n=10; | ||
52 | char buf[128]; | ||
53 | int proto=1; //icmp default | ||
54 | struct ip *ip=(struct ip *)buf; | ||
55 | struct tcphdr *tcp=(struct tcphdr *)(buf+sizeof(*ip)); | ||
56 | char *tmp1=ClientInfo->user; | ||
57 | char *tmp2=ClientInfo->pass;; | ||
58 | if(!strlen(tmp1) || !strlen(tmp2)) { | ||
59 | web_client_HTTPdirective("HTTP/1.1 401 Authorization Required"); | ||
60 | printf("WWW-Authenticate: Basic realm=\"Packet mounter\"\r\n"); | ||
61 | printf("Content-type: text/html\r\n\r\n"); | ||
62 | printf("<BODY bgcolor='EFEFEF'>\r\n"); | ||
63 | printf("<font color='FF0000'><center>Access denied</center></font>\n"); | ||
64 | printf("</body>\r\n"); | ||
65 | return; | ||
66 | }; | ||
67 | if(strcmp(tmp1,"packet") && strcmp(tmp2,"teste")) { // Lame autentification just for test | ||
68 | web_client_HTTPdirective("HTTP/1.1 401 Authorization Required"); | ||
69 | printf("WWW-Authenticate: Basic realm=\"Packet mounter\"\r\n"); | ||
70 | printf("Content-type: text/html\r\n\r\n"); | ||
71 | printf("<BODY bgcolor='EFEFEF'>\r\n"); | ||
72 | printf("<font color='FF0000'><center>Access denied</center></font>\n"); | ||
73 | printf("</body>\r\n"); | ||
74 | return; | ||
75 | }; | ||
76 | printf("Content-type: text/html\r\n\r\n"); | ||
77 | printf("<HTML>\n"); | ||
78 | printf("<body bgcolor='FFFFCC'>\n"); | ||
79 | printf("<center>public Packet mounter by <BR><small><TT> Luis Figueiredo (<a href=\"mailto:stdio@netc.pt\">stdio@netc.pt</a>)</tt></small><BR><i><small>Using %s</i></small><HR>\n",_libwebserver_version); | ||
80 | t=ClientInfo->Query("proto"); | ||
81 | printf("Pretended protocol: %s<BR>\n",t); | ||
82 | if(strlen(t)) { | ||
83 | proto=atoi(t); | ||
84 | printf("<form method=post action='/?proto=%d' name=\"ip\">\n",proto); | ||
85 | } else { | ||
86 | printf("<form method=post action='/' name=\"ip\">\n"); | ||
87 | }; | ||
88 | printf("<table border=0><TR><TD>\n"); | ||
89 | printf("<table border=1>\n"); | ||
90 | printf("<TR><TD colspan=4 align='center' bgcolor='5555ff'>IP header</TD></TR>\n"); | ||
91 | t=ClientInfo->Post("ipversion"); | ||
92 | printf("<TR><TD align='center'>version:<BR><input type=text size=2 maxlength=2 name=ipversion value='%s'></TD>\n",(t)?t:""); | ||
93 | if(strlen(t)){ip->ip_v=atoi(t);} else {ip->ip_v=4;} // default | ||
94 | |||
95 | t=ClientInfo->Post("ipihl"); | ||
96 | printf("<TD align='center'>ihl:<BR><input type=text size=2 maxlength=2 name=ipihl value='%s'></TD>\n",(t)?t:""); | ||
97 | if(strlen(t)){ip->ip_hl=atoi(t);} else {ip->ip_hl=5;} | ||
98 | |||
99 | t=ClientInfo->Post("iptos"); | ||
100 | printf("<TD align='center'>tos:<BR><input type=text size=3 maxlength=3 name=iptos value='%s'></TD>\n",(t)?t:""); | ||
101 | if(strlen(t)){ip->ip_tos=atoi(t);} else {ip->ip_tos=0;} | ||
102 | |||
103 | t=ClientInfo->Post("iptotlen"); | ||
104 | printf("<TD align='center'>tot len:<BR><input type=text size=4 maxlength=4 name=iptotlen value='%s'></TD></TR>\n",(t)?t:""); | ||
105 | if(strlen(t)){ip->ip_len=htons(atoi(t));} else {ip->ip_len=htons(sizeof(struct ip));} | ||
106 | |||
107 | t=ClientInfo->Post("ipid"); | ||
108 | printf("<TR><TD align='center' colspan=3>id:<BR><input type=text size=5 maxlength=5 name=ipid value='%s'></TD>\n",(t)?t:""); | ||
109 | if(strlen(t)){ip->ip_id=htons(atoi(t));} else {ip->ip_id=htons(37337);} | ||
110 | |||
111 | t=ClientInfo->Post("ipfrag"); | ||
112 | printf("<TD align='center'>frag offset:<BR><input type=text size=4 maxlength=4 name=ipfrag value='%s'></TD></TR>\n",(t)?t:""); | ||
113 | if(strlen(t)){ip->ip_off=htons(atoi(t));} else {ip->ip_off=htons(0);} | ||
114 | |||
115 | t=ClientInfo->Post("ipttl"); | ||
116 | printf("<TR><TD align='center' colspan=2>ttl:<BR><input type=text size=3 maxlength=3 name=ipttl value='%s'></TD>\n",(t)?t:""); | ||
117 | if(strlen(t)){ip->ip_ttl=atoi(t);} else {ip->ip_ttl=64;} | ||
118 | printf("<TD align='center'>proto:<BR>\n"); | ||
119 | printf("<select name='ipproto' onchange='parent.location=(document.ip.ipproto.options[0].selected==true)?\"/?proto=1\":(document.ip.ipproto.options[1].selected==true)?\"/?proto=6\":(document.ip.ipproto.options[2].selected==true)?\"/?proto=17\":\"\"'>\n"); | ||
120 | printf("<option value='1' %s>icmp\n",(proto==1)?"selected":""); | ||
121 | printf("<option value='6' %s>tcp\n",(proto==6)?"selected":""); | ||
122 | printf("<option value='17' %s>udp\n",(proto==17)?"selected":""); | ||
123 | printf("</select></TD>\n"); | ||
124 | ip->ip_p=proto; | ||
125 | |||
126 | printf("<TD align='center'>checksum:<BR>automatic</TD></TR>\n"); | ||
127 | |||
128 | t=ClientInfo->Post("ipsrc"); | ||
129 | printf("<TR><TD align='center' colspan=4>src ip:<BR><input type=text size=15 maxlength=15 name=ipsrc value='%s'></TD></TR>\n",(t)?t:""); | ||
130 | if(strlen(t)){ip->ip_src.s_addr=inet_addr(t);} else {ip->ip_src.s_addr=0;} | ||
131 | |||
132 | t=ClientInfo->Post("ipdst"); | ||
133 | printf("<TR><TD align='center' colspan=4>dst ip:<BR><input type=text size=15 maxlength=15 name=ipdst value='%s'></TD></TR></TABLE>\n",(t)?t:""); | ||
134 | if(strlen(t)){ip->ip_dst.s_addr=inet_addr(t);} else {ip->ip_dst.s_addr=0;} | ||
135 | |||
136 | printf("</TD><TD>\n"); | ||
137 | |||
138 | if(proto==6) { // print tcp header input | ||
139 | printf("<TABLE border=1>\n"); | ||
140 | printf("<TR><TD colspan=4 align='center' bgcolor='5555FF'>tcp header</TD></TR>\n"); | ||
141 | t=ClientInfo->Post("tcpsrcport"); | ||
142 | printf("<TR><TD colspan=2 align='center'>src port:<BR><input type=text size=5 maxlength=5 name=tcpsrcport value='%s'></TD>\n",(t)?t:""); | ||
143 | if(strlen(t)){tcp->th_sport=htons(atoi(t));} | ||
144 | t=ClientInfo->Post("tcpdstport"); | ||
145 | printf("<TD colspan=2 align='center'>dst port:<BR><input type=text size=5 maxlength=5 name=tcpdstport value='%s'></TD></TR>\n",(t)?t:""); | ||
146 | if(strlen(t)){tcp->th_dport=htons(atoi(t)); } | ||
147 | t=ClientInfo->Post("tcpseq"); | ||
148 | printf("<TR><TD colspan=4 align='center'>Seq number:<BR><input type=text size=10 maxlength=10 name=tcpseq value='%s'></TD></TR>\n",(t)?t:""); | ||
149 | if(strlen(t)){tcp->th_seq=htonl(strtoul(t,NULL,10));} | ||
150 | t=ClientInfo->Post("tcpack"); | ||
151 | printf("<TR><TD colspan=4 align='center'>ack:<BR><input type=text size=10 maxlength=10 name=tcpack value='%s'></TD></TR>\n",(t)?t:""); | ||
152 | if(strlen(t)){tcp->th_ack=htonl(strtoul(t,NULL,10)); }else {tcp->th_ack=0;} | ||
153 | |||
154 | printf("<TR><TD align='center'><small><small>data offset:<BR>(computed)</small></small></TD>\n"); | ||
155 | printf("<TD align='center'><small><small>reserved:<BR>(computed)</small></small></TD>\n"); | ||
156 | printf("<TD align='center'>flags:<BR>\n"); | ||
157 | printf("<TABLE border=0 cellspacing=0 cellpadding=0><TR>\n"); | ||
158 | printf("<TD><small><small>URG </small></small></TD>\n"); | ||
159 | printf("<TD><small><small>ACK </small></small></TD>\n"); | ||
160 | printf("<TD><small><small>PSH </small></small></TD>\n"); | ||
161 | printf("<TD><small><small>RST </small></small></TD>\n"); | ||
162 | printf("<TD><small><small>SYN </small></small></TD>\n"); | ||
163 | printf("<TD><small><small>FIN</small></small></TD></TR>\n"); | ||
164 | t=ClientInfo->Post("tcpfURG"); | ||
165 | if(strlen(t)){tcp->th_flags |= TH_URG;}else {tcp->th_flags &= ~TH_URG;} | ||
166 | t=ClientInfo->Post("tcpfACK"); | ||
167 | if(strlen(t)){tcp->th_flags |= TH_ACK;}else {tcp->th_flags &= ~TH_ACK;} | ||
168 | t=ClientInfo->Post("tcpfPSH"); | ||
169 | if(strlen(t)){tcp->th_flags |= TH_PUSH;}else {tcp->th_flags &= ~TH_PUSH;} | ||
170 | t=ClientInfo->Post("tcpfRST"); | ||
171 | if(strlen(t)){tcp->th_flags |= TH_RST;}else {tcp->th_flags &= ~TH_RST;} | ||
172 | t=ClientInfo->Post("tcpfSYN"); | ||
173 | if(strlen(t)){tcp->th_flags |= TH_SYN;}else {tcp->th_flags &= ~TH_SYN;} | ||
174 | t=ClientInfo->Post("tcpfFIN"); | ||
175 | if(strlen(t)){tcp->th_flags |= TH_FIN;}else {tcp->th_flags &= ~TH_FIN;} | ||
176 | printf("<TD><input type=checkbox name=tcpfURG %s></TD>\n",((tcp->th_flags & TH_URG)==TH_URG)?"checked":""); | ||
177 | printf("<TD><input type=checkbox name=tcpfACK %s></TD>\n",((tcp->th_flags & TH_ACK)==TH_ACK)?"checked":""); | ||
178 | printf("<TD><input type=checkbox name=tcpfPSH %s></TD>\n",((tcp->th_flags & TH_PUSH)==TH_PUSH)?"checked":""); | ||
179 | printf("<TD><input type=checkbox name=tcpfRST %s></TD>\n",((tcp->th_flags & TH_RST)==TH_RST)?"checked":""); | ||
180 | printf("<TD><input type=checkbox name=tcpfSYN %s></TD>\n",((tcp->th_flags & TH_SYN)==TH_SYN)?"checked":""); | ||
181 | printf("<TD><input type=checkbox name=tcpfFIN %s></TD>\n",((tcp->th_flags & TH_FIN)==TH_FIN)?"checked":""); | ||
182 | printf("</TR></TABLE></TD>\n"); | ||
183 | t=ClientInfo->Post("tcpwin"); | ||
184 | printf("<TD align='center'>window:<BR><input type=text size=7 maxlength=7 name=tcpwin value='%s'></TD></TR>\n",(t)?t:""); | ||
185 | if(strlen(t)) {tcp->th_win=htons(atoi(t)); } else {tcp->th_win=htons(1500);} | ||
186 | printf("<TR><TD colspan=2 align='center'>checksum:<BR>automatic</TD>\n"); | ||
187 | t=ClientInfo->Post("tcpurg"); | ||
188 | printf("<TD colspan=2 align='center'>urgent:<BR><input type=text size=7 maxlength=7 name=tcpurg value='%s'></TD></TR>\n",(t)?t:""); | ||
189 | printf("<TR><TD align='center' colspan=4>Tcp data<BR><textarea name=data cols='30' rows='4'>%s</textarea></TD></TR>\n",ClientInfo->Post("data")); | ||
190 | if(strlen(t)) {tcp->th_urp=htons(atoi(t)); } else {tcp->th_urp=0;} | ||
191 | printf("</TABLE>\n"); | ||
192 | printf("</TABLE>\n"); | ||
193 | tcp->th_x2=0; | ||
194 | }; | ||
195 | printf("</TD></TR></TABLE>\n"); | ||
196 | t=ClientInfo->Post("n_packets"); | ||
197 | printf("<input type=text size=4 maxlength=4 value='10' name=n_packets value='%s'>\n",(t)?t:""); | ||
198 | if(strlen(t)){n=atoi(t); } | ||
199 | printf("<input type=submit value='send packet' name=ipsend>\n"); | ||
200 | t=ClientInfo->Post("data"); | ||
201 | memcpy(buf+sizeof(*ip)+sizeof(*tcp),t,(strlen(t)>128)?128:strlen(t)); | ||
202 | |||
203 | t=ClientInfo->Post("ipsend"); | ||
204 | if(strlen(t)) { | ||
205 | s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW); | ||
206 | to.sin_family=AF_INET; | ||
207 | to.sin_addr.s_addr=ip->ip_dst.s_addr; | ||
208 | to.sin_port=htons(tcp->th_dport); | ||
209 | ip->ip_sum=in_chksum((void *)&ip,sizeof(*ip)); | ||
210 | tcp->th_sum=in_chksum((void *)&ip,sizeof(*ip)+sizeof(*tcp)); | ||
211 | for(i=0;i<n;i++) { | ||
212 | sendto(s,&buf,128,0,(struct sockaddr *)&to,sizeof(to)); | ||
213 | }; | ||
214 | }; | ||
215 | printf("<br><a href='http://libwebserver.sourceforge.net'><img src='/libwebserver.gif' border='0'></a><BR>\n"); | ||
216 | printf("</body>\n"); | ||
217 | printf("</HTML>\n"); | ||
218 | |||
219 | }; | ||
220 | |||
221 | int main() { | ||
222 | int pid; | ||
223 | struct web_server serverSSL; | ||
224 | web_server_useSSLcert(&serverSSL,"./foo-cert.pem"); // Must be here couse of initalization of openssl | ||
225 | while(!web_server_init(&serverSSL,PORTSSL,"packetmounter.log",WS_USESSL)) { | ||
226 | PORTSSL++; | ||
227 | }; | ||
228 | printf("https://localhost:%d\n",PORTSSL); | ||
229 | web_server_addhandler(&serverSSL,"* /*",packetmounter,0); | ||
230 | while(1) { | ||
231 | // DO whatever u want | ||
232 | web_server_run(&serverSSL); // Process web_server w/ SSL | ||
233 | }; | ||
234 | return 0; | ||
235 | |||
236 | }; | ||
diff --git a/doc/functions.html b/doc/functions.html deleted file mode 100644 index e28329ca..00000000 --- a/doc/functions.html +++ /dev/null | |||
@@ -1,355 +0,0 @@ | |||
1 | <center><H3><font color='007700'>libwebserver Functions</font></H3></center><BR><BR> | ||
2 | <font face='Verdana'> | ||
3 | |||
4 | <A name=web_server_init><B><font color='000077'>web_server_init()</font></B><BR><BR> | ||
5 | <B>NAME</B> | ||
6 | <UL>web_server_init - Initialize webserver</UL> | ||
7 | <B>SYNOPSIS</B> | ||
8 | <UL>#include "web_server.h"<BR><BR>int web_server_init(struct web_server *<U>server</U>, int <U>port</U>, const char *<U>logfile</U>, int <U>flags</U>);</UL> | ||
9 | <B>DESCRIPTION</B> | ||
10 | <UL>The web_server_init() function initializes the server handler <U>server</U>, start a listen socket at port <U>port</U>, with the logfile <U>logfile</U> to produce the webserver log<BR> if WS_USEEXTCONF flag is used, the <U>logfile</U> will be the config file <BR> | ||
11 | <U>flags</U> <BR> | ||
12 | WS_USESSL for openssl connections (https support)<BR> | ||
13 | WS_USEEXTCONF for using a external config file<BR> | ||
14 | WS_LOCAL only accepts 127.0.0.1 (local) connections | ||
15 | </UL> | ||
16 | |||
17 | <B>RETURN VALUE</B> | ||
18 | <UL>On success, 1 is returned, On error, 0 is returned</UL> | ||
19 | <HR><BR> | ||
20 | |||
21 | |||
22 | <A name=web_server_addhandler><B><font color='000077'>web_server_addhandler()</font></B><BR><BR> | ||
23 | <B>NAME</B> | ||
24 | <UL>web_server_addhandler - adds a request handler</UL> | ||
25 | <B>SYNOPSIS</B> | ||
26 | <UL>#include "web_server.h"<BR><BR>int web_server_addhandler(struct web_server *<U>server</U>, const char *<U>mstr</U>, void (*<U>func</U>)(), int <U>flags</U>);</UL> | ||
27 | <B>DESCRIPTION</B> | ||
28 | <UL>The web_server_addhandler() function adds a request handler <U>mstr</U> to the server handler <U>server</U> through the function <U>func</U>.<BR> | ||
29 | <U>mstr</U> is a string containing expressions (as matching files) to match with the client request (GET /<B>blah.html</B>?id=1 HTTP/1.0, will be matched by <U>mstr</U>="* /blah.html")<BR> | ||
30 | <U>flags:</U> <BR> | ||
31 | WS_LOCAL - only local connections are handled<BR> | ||
32 | WS_DYNVAR - treat dynamic variables on output (Atention: this disables "Content-range" and "Content-length" header, responding "501 not implemented")<BR> | ||
33 | WS_USELEN - With this flag, library calculate the header "Content-length" and "Content-range" it self, useful for resuming, content-length can be miscalculated if the file added by (web_client_addfile) changes the size of contents, between calculating and output<BR> | ||
34 | </UL> | ||
35 | <B>RETURN VALUE</B> | ||
36 | <UL>On success, 1 is returned, On error, 0 is returned</UL> | ||
37 | <HR><BR> | ||
38 | |||
39 | <A name=web_server_aliasdir><B><font color='000077'>web_server_aliasdir()</font></B><BR><BR> | ||
40 | <B>NAME</B> | ||
41 | <UL>web_server_aliasdir - Generates a directory list, and use file based server</UL> | ||
42 | <B>SYNOPSIS</B> | ||
43 | <UL>#include "web_server.h"<BR><BR>int web_server_aliasdir(struct web_server *<U>server</U>, const char *<U>alias</U>, char *<U>path</U>, int <U>flags</U>);</UL> | ||
44 | <B>DESCRIPTION</B> | ||
45 | <UL>The web_server_aliasdir() function adds an alias <U>alias</U> to the server handler <U>server</U> and use files from <U>path</U>.<BR> | ||
46 | <U>flags:</U> <BR> | ||
47 | WS_LOCAL - only local connections are handled<BR> | ||
48 | WS_DYNVAR - treat dynamic variables on output (Atention: this disables "Content-range" and "Content-length" header, responding "501 not implemented")<BR> | ||
49 | WS_USELEN - With this flag, library calculate the header "Content-length" and "Content-range" it self, useful for resuming, content-length can be miscalculated if the file added by (web_client_addfile) changes the size of contents, between calculating and output<BR> | ||
50 | </UL> | ||
51 | <B>RETURN VALUE</B> | ||
52 | <UL>On success, 1 is returned, On error, 0 is returned</UL> | ||
53 | <HR><BR> | ||
54 | |||
55 | <A name=web_server_run><B><font color='000077'>web_server_run()</font></B><BR><BR> | ||
56 | <B>NAME</B> | ||
57 | <UL>web_server_run - run the server</UL> | ||
58 | <B>SYNOPSIS</B> | ||
59 | <UL>#include "web_server.h"<BR><BR>int web_server_run(struct web_server *<U>server</U>);</UL> | ||
60 | <B>DESCRIPTION</B> | ||
61 | <UL>The web_server_run() function processes requests to the server <U>server</U>. This function must be called from the main application loop (the functions doesn't loop it self)</UL> | ||
62 | <B>RETURN VALUE</B> | ||
63 | <UL>On success, greater than 0, is returned (2 if there wasn't client, 1 if some request was processed), On error, 0 is returned</UL> | ||
64 | <HR><BR> | ||
65 | |||
66 | <A name=web_server_getconf><B><font color='000077'>web_server_getconf()</font></B><BR><BR> | ||
67 | <B>NAME</B> | ||
68 | <UL>web_server_getconf - get data from config filer</UL> | ||
69 | <B>SYNOPSIS</B> | ||
70 | <UL>#include "web_server.h"<BR><BR>char *web_server_getconf(struct web_server *<U>server</U>,char *<U>topic</U>,char *<U>key</U>);</UL> | ||
71 | <B>DESCRIPTION</B> | ||
72 | <UL>The web_server_getconf() function allocates and return a string from config file related to <U>topic</U> and <U>key</U> (see <a href="/?help=functions#configfile">config file help</a>) This function must be called after the init of the var <U>server</U></UL> | ||
73 | <B>RETURN VALUE</B> | ||
74 | <UL>returns allocated string, (you should free after use) or null if nothing related to arguments found</UL> | ||
75 | <HR><BR> | ||
76 | |||
77 | <A name=web_server_useSSLcert><B><font color='000077'>web_server_useSSLcert()</font></B><BR><BR> | ||
78 | <B>NAME</B> | ||
79 | <UL>web_server_useSSLcert - use certificate</UL> | ||
80 | <B>SYNOPSIS</B> | ||
81 | <UL>#include "web_server.h"<BR><BR>void web_server_useSSLcert(struct web_server *<U>server</U>, const char *<U>file</U>);</UL> | ||
82 | <B>DESCRIPTION</B> | ||
83 | <UL>The web_server_useSSLcert() function tells server <U>server</U> to use certificate file <U>file</U> on ssl connections (initializated w/ flag WS_USESSL)</UL> | ||
84 | <HR><BR> | ||
85 | |||
86 | <A name=web_server_useMIMEfile><B><font color='000077'>web_server_useMIMEfile()</font></B><BR><BR> | ||
87 | <B>NAME</B> | ||
88 | <UL>web_server_useMIMEfile - use mime types file</UL> | ||
89 | <B>SYNOPSIS</B> | ||
90 | <UL>#include "web_server.h"<BR><BR>void web_server_useMIMEfile(struct web_server *<U>server</U>, const char *<U>file</U>);</UL> | ||
91 | <B>DESCRIPTION</B> | ||
92 | <UL>The web_server_useMIMEfile() function tells server <U>server</U> to use mimes type file <U>file</U> for determining mime type by extension used by function <a href="/?help=functions#web_client_contenttype">web_client_contenttype()</a></UL> | ||
93 | <HR><BR> | ||
94 | |||
95 | |||
96 | <A name=web_client_addstream><B><font color='000077'>web_client_addstream()</font></B><BR><BR> | ||
97 | <B>NAME</B> | ||
98 | <UL>web_client_addstream - add an output stream to the client struct on webserver</UL> | ||
99 | <B>SYNOPSIS</B> | ||
100 | <UL>#include "web_server.h"<BR><BR>int web_client_addstream(FILE *<U>stream</U>);</UL> | ||
101 | <B>DESCRIPTION</B> | ||
102 | <UL>The web_client_addstream() function adds the stream <U>stream</U> to the output stream list in the current client node</UL> | ||
103 | <B>NOTE</B> | ||
104 | <UL>The web_client_addstream() function can <B>only</B> be called from functions called by gethandlers registered by <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
105 | <UL>The web_client_addstream() function is obsolete and no longer in use on 0.3.4 versions, use web_client_addfile instead</ul> | ||
106 | <B>RETURN VALUE</B> | ||
107 | <UL>On success, 1 is returned, On error, 0 is returned</UL> | ||
108 | <HR><BR> | ||
109 | |||
110 | <A name=web_client_addfile><B><font color='000077'>web_client_addfile()</font></B><BR><BR> | ||
111 | <B>NAME</B> | ||
112 | <UL>web_client_addfile - add a file to the output stream of the client struct on the webserver</UL> | ||
113 | <B>SYNOPSIS</B> | ||
114 | <UL>#include "web_server.h"<BR><BR>int web_client_addfile(const char *<U>file</U>);</UL> | ||
115 | <B>DESCRIPTION</B> | ||
116 | <UL>The web_client_addfile() function opens the file <U>file</U> and adds it as stream to the output stream list in the current client node</UL> | ||
117 | <B>NOTE</B> | ||
118 | <UL>The web_client_addfile() function can be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
119 | <B>RETURN VALUE</B> | ||
120 | <UL>On Success, 1 is returned, On error, 0 is returned</UL> | ||
121 | <HR><BR> | ||
122 | |||
123 | <A name=web_client_gifoutput><B><font color='000077'>web_client_gifoutput()</font></B><BR><BR> | ||
124 | <B>NAME</B> | ||
125 | <UL>web_client_gifoutput - export data as gif</UL> | ||
126 | <B>SYNOPSIS</B> | ||
127 | <UL>#include "web_server.h"<BR><BR>int web_client_gifoutput(char *<U>data</U>,int <U>w</U>,int <U>h</u>);</UL> | ||
128 | <B>DESCRIPTION</B> | ||
129 | <UL>The web_client_gifoutput() function prints to stdout a gif header (with width <U>w</U> and height <U>h</U>) and the image pointed by <U>data</U>.<BR> | ||
130 | The allocated memory <U>data</U> points to mustn't be smaller than <U>w</U>*<U>h</U>.<BR> | ||
131 | The gif palette is described by <a href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette</a> | ||
132 | </UL> | ||
133 | <B>NOTE</B> | ||
134 | <UL>The web_client_gifoutput() function can be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
135 | <B>RETURN VALUE</B> | ||
136 | <UL>On Success, 0 is returned, On error, non zero is returned.</UL> | ||
137 | <HR><BR> | ||
138 | |||
139 | <A name=web_client_gifsetpalette><B><font color='000077'>web_client_gifsetpalette()</font></B><BR><BR> | ||
140 | <B>NAME</B> | ||
141 | <UL>web_client_gifsetpalette - Setup the gif palette</UL> | ||
142 | <B>SYNOPSIS</B> | ||
143 | <UL>#include "web_server.h"<BR><BR>void web_client_gifsetpalette(char *<U>file</U>);</UL> | ||
144 | <B>DESCRIPTION</B> | ||
145 | <UL>The web_client_gifsetpalette() function loads raw palette (.act) from <U>file</U> or if <U>file</U> is "EGA" then this function setups the palette to EGA mode<BR> | ||
146 | </UL> | ||
147 | <HR><BR> | ||
148 | |||
149 | |||
150 | <A name=web_client_setcookie><B><font color='000077'>web_client_setcookie()</font></B><BR><BR> | ||
151 | <B>NAME</B> | ||
152 | <UL>web_client_setcookie - set a cookie</UL> | ||
153 | <B>SYNOPSIS</B> | ||
154 | <UL>#include "web_server.h"<BR><BR>void web_client_setcookie(char *<U>key</U>, char *<U>value</U>, char *<U>timeoffset</U>, char *<U>path</U>,char *<U>domain</U>,int <U>secure</U>);</UL> | ||
155 | <B>DESCRIPTION</B> | ||
156 | <UL>The web_client_setcookie() function sets a cookie on client browser with key <U>key</U>, value <U>value</U> and expires at <U>timeoffset</U>.<BR> | ||
157 | timeoffset format is one like <U>sign</U>, <U>number offset</U> and <U>directive</U> <small> (i.e +10m, 10 months)</small> | ||
158 | <UL><U>sign</U> is on like '-' or '+'</UL> | ||
159 | <UL><U>number offset</U> is like +<U>5</U>M means expires at next 5 minutes </UL> | ||
160 | <UL><U>directive</U> is: | ||
161 | <UL>S - seconds</UL> | ||
162 | <UL>M - minutes</UL> | ||
163 | <UL>H - hours</UL> | ||
164 | <UL>d - days</UL> | ||
165 | <UL>m - months</UL> | ||
166 | <UL>y - years</UL> | ||
167 | </UL> | ||
168 | path - Subset of URLs in a domain for which the cookie is valid | ||
169 | (If the path is not specified (path == NULL), it as assumed to be | ||
170 | the same path as the document being described by the header which | ||
171 | contains the cookie.)<BR> | ||
172 | domain = Domain the cookie is valid for | ||
173 | (If the domain is not set (domain == NULL), the default value of | ||
174 | domain is the host name of the server which generated the cookie | ||
175 | response.)<BR> | ||
176 | secure = If a cookie is marked secure (secure == 1), it will only be | ||
177 | transmitted if the communications channel with the host is a | ||
178 | secure one. Currently this means that secure cookies will only be | ||
179 | sent to HTTPS (HTTP over SSL) servers. | ||
180 | (If secure is not specified (secure == 0), a cookie is considered | ||
181 | safe to be sent in the clear over unsecured channels. )<BR> | ||
182 | |||
183 | </UL> | ||
184 | <B>NOTE</B> | ||
185 | <UL> The web_client_setcookie() function should be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a><BR></UL> | ||
186 | <HR><BR> | ||
187 | |||
188 | |||
189 | <A name=web_client_deletecookie><B><font color='000077'>web_client_deletecookie()</font></B><BR><BR> | ||
190 | <B>NAME</B> | ||
191 | <UL>web_client_deletecookie - delete a cookie</UL> | ||
192 | <B>SYNOPSIS</B> | ||
193 | <UL>#include "web_server.h"<BR><BR>void web_client_deletecookie(char *<U>key</U>);</UL> | ||
194 | <B>DESCRIPTION</B> | ||
195 | <UL>The web_client_deletecookie() function delete a cookie on client browser with key <U>key</U><BR> | ||
196 | |||
197 | </UL> | ||
198 | <B>NOTE</B> | ||
199 | <UL> The web_client_deletecookie() function should be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a><BR></UL> | ||
200 | <HR><BR> | ||
201 | |||
202 | <A name=web_client_setvar><B><font color='000077'>web_client_setvar()</font></B><BR><BR> | ||
203 | <B>NAME</B> | ||
204 | <UL>web_client_setvar - sets a variable</UL> | ||
205 | <B>SYNOPSIS</B> | ||
206 | <UL>#include "web_server.h"<BR><BR>int web_client_setvar(char *<U>name</U>, char *<U>value</U>);</UL> | ||
207 | <B>DESCRIPTION</B> | ||
208 | <UL>The web_client_setvar() function sets an variable named <U>name</U> with value <U>value</U> in a connection, to be used in output (only available if WS_DYNVAR flag used)<BR> | ||
209 | web_client_setvar("bgc","#ff00dd");<BR> | ||
210 | printf("<BODY bgcolor='$bgc;'>"); - will exchange the string $bgc; to #ff00dd on output</UL> | ||
211 | |||
212 | <B>NOTE</B> | ||
213 | <UL>The web_client_setvar() function <B>should</B> be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
214 | <HR><BR> | ||
215 | |||
216 | <A name=web_client_getvar><B><font color='000077'>web_client_getvar()</font></B><BR><BR> | ||
217 | <B>NAME</B> | ||
218 | <UL>web_client_getvar - gets a variable value</UL> | ||
219 | <B>SYNOPSIS</B> | ||
220 | <UL>#include "web_server.h"<BR><BR>int web_client_getvar(char *<U>name</U>);</UL> | ||
221 | <B>DESCRIPTION</B> | ||
222 | <UL>The web_client_getvar() function gets the value of variable <U>name</U>, (see also <a href=/?help=functions#web_client_setvar>web_client_setvar()</a>)<BR></UL> | ||
223 | <B>NOTE</B> | ||
224 | <UL>The web_client_getvar() function <B>should</B> be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
225 | <HR><BR> | ||
226 | |||
227 | <A name=web_client_delvar><B><font color='000077'>web_client_delvar()</font></B><BR><BR> | ||
228 | <B>NAME</B> | ||
229 | <UL>web_client_delvar - delete a variable</UL> | ||
230 | <B>SYNOPSIS</B> | ||
231 | <UL>#include "web_server.h"<BR><BR>int web_client_delvar(char *<U>name</U>);</UL> | ||
232 | <B>DESCRIPTION</B> | ||
233 | <UL>The web_client_delvar() function deletes a variable with name <U>name</U><BR></UL> | ||
234 | <B>NOTE</B> | ||
235 | <UL>The web_client_delvar() function <B>should</B> be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
236 | <HR><BR> | ||
237 | |||
238 | |||
239 | <A name=web_client_HTTPdirective><B><font color='000077'>web_client_HTTPdirective()</font></B><BR><BR> | ||
240 | <B>NAME</B> | ||
241 | <UL>web_client_HTTPdirective - Change the HTTP header status</UL> | ||
242 | <B>SYNOPSIS</B> | ||
243 | <UL>#include "web_server.h"<BR><BR>void web_client_HTTPdirective(char *<U>directive</U>);</UL> | ||
244 | <B>DESCRIPTION</B> | ||
245 | <UL>The web_client_HTTPdirective() function changes the HTTP header status (i.e. "HTTP/1.1 200 OK") to the string <U>directive</U><BR> | ||
246 | <small><i>useful for "HTTP/1.1 401 Authorization Required" (to require a password), redirection or similar actions on the client side</i></small>.</UL> | ||
247 | <B>NOTE</B> | ||
248 | <UL>The web_client_HTTPdirective() function can be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
249 | <HR><BR> | ||
250 | |||
251 | <A name=web_client_contenttype><B><font color='000077'>web_client_contenttype()</font></B><BR><BR> | ||
252 | <B>NAME</B> | ||
253 | <UL>web_client_contenttype - prints to stdout the header "Content-type: */*"</UL> | ||
254 | <B>SYNOPSIS</B> | ||
255 | <UL>#include "web_server.h"<BR><BR>void web_client_contenttype(char *<U>extension</U>);</UL> | ||
256 | <B>DESCRIPTION</B> | ||
257 | <UL>The web_client_contenttype() prints to stdout the header "Content-type: */*", where '*/*' is determined by <U>extension</U> (i.e. "html" based on mimefile produces "Content-type: text/html\r\n\r\n" and "jpg" produces "Content-type: image/jpeg\r\n\r\n")<BR> | ||
258 | <small>this function is used on <a href="/?help=functions#web_server_aliasdir">web_server_aliasdir()</a></small></UL> | ||
259 | <B>NOTE</B> | ||
260 | <UL>This function uses mime types loaded at <a href="/?help=functions#web_server_useMIMEfile">web_server_useMIMEfile()</a> else it will print only "Content-type: text/plain\r\n\r\n"</UL> | ||
261 | <HR><BR> | ||
262 | |||
263 | <A name=web_log><B><font color='000077'>web_log()</font></B><BR><BR> | ||
264 | <B>NAME</B> | ||
265 | <UL>web_log - write to logfile</UL> | ||
266 | <B>SYNOPSIS</B> | ||
267 | <UL>#include "web_server.h"<BR><BR>void web_log(const char *<U>format</U>,<U>...</U>);</UL> | ||
268 | <B>DESCRIPTION</B> | ||
269 | <UL>The web_log() is similar to printf, but writes to a logfile (specified in <a href=/?help=functions#web_server_init>web_server_init()</a>). Just as printf, it doesn't add a newline at the end.</UL> | ||
270 | <B>NOTE</B> | ||
271 | <UL>The web_log() function <B>should</B> be called <B>only</B> from functions called by gethandlers registered via <a href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL> | ||
272 | <HR><BR> | ||
273 | |||
274 | <A name=ClientInfo><B><font color='000077'>ClientInfo</font></B><BR><BR> | ||
275 | <B>NAME</B> | ||
276 | <UL>ClientInfo - a struct to control client Header</UL> | ||
277 | <B>SYNOPSIS</B> | ||
278 | <UL> Declared in web_server.h <BR><BR> | ||
279 | extern struct ClientInfo {<BR> | ||
280 | <UL> | ||
281 | int <U>outfd</U>;<BR> | ||
282 | char *<U>inetname</U>;<BR> | ||
283 | char *<U>request</U>;<BR> | ||
284 | char *<U>method</U>;<BR> | ||
285 | char *<U>user</U>;<BR> | ||
286 | char *<U>pass</U>;<BR> | ||
287 | char *(*<U>Header</U>)(char *handle);<BR> | ||
288 | char *(*<U>Query</U>)(char *handle);<BR> | ||
289 | char *(*<U>Post</U>)(char *handle);<BR> | ||
290 | char *(*<U>Cookie</U>)(char *handle);<BR> | ||
291 | char *(*<U>Conf</U>)(char *handle);<BR> | ||
292 | struct _MultiPart (*<U>MultiPart</U>)(char *handle);<BR> | ||
293 | void *__pad[5];<BR> | ||
294 | </UL> | ||
295 | } *<U>ClientInfo</U>; | ||
296 | </UL> | ||
297 | <B>DESCRIPTION</B> | ||
298 | <UL> | ||
299 | <B>ClientInfo-><U>outfd</U></B> <UL>is the filedescriptor of the current output stream (useful for cgi handlers and friends).</UL><BR> | ||
300 | <B>ClientInfo-><U>inetname</U></B> <UL>a string to inetname (i.e. "127.0.0.1")</UL> <BR> | ||
301 | <B>ClientInfo-><U>request</U></B> <UL>is the requested 'file' (i.e. for "GET /index.html HTTP/1.0\r\n" the ClientInfo->request is "/index.html")</UL><BR> | ||
302 | <B>ClientInfo-><U>method</U></B> <UL>is the request method ("GET" or "POST" etc..)</UL><BR> | ||
303 | <B>ClientInfo-><U>user</U></B> <UL>AuthRealm username</UL><BR> | ||
304 | <B>ClientInfo-><U>pass</U></B> <UL>AuthRealm password</UL><BR> | ||
305 | <B>ClientInfo-><U>Header(</U>char *<U>handle</U>)</B> <UL>Function to parse the header, and returns Header information (i.e. for "Host: http://127.0.0.1:81" the result of ClientInfo->Header("Host") is "http://127.0.0.1:81") if argument <U>handle</U> is NULL then this function returns whole Header from client</UL><BR> | ||
306 | <B>ClientInfo-><U>Query(</U>char *<U>handle</U>)</B> <UL>A function that returns the query value from the browser (i.e for the request "http://somehost.net/req.html?id=5&f=1", ClientInfo->Query("id") is "5".if argument <U>handle</U> is NULL then this function returns whole Query string from client<BR>if the handle have the char # first (like "#handle") it returns the number of variables (usefull for checkboxes and etc...) Check <a href='/?help=examples#checkbox'>checkbox example</a></UL><BR> | ||
307 | <B>ClientInfo-><U>Post(</U>char *<U>handle</U>)</B> <UL>A function that returns the Post data from the forms with method 'POST'. <U>handle</U> is the name of some <input> tag.if argument <U>handle</U> is NULL then this function returns whole Post data from client<BR>if the handle have the char # first (like "#handle") it returns the number of variables (usefull for checkboxes and etc...) Check <a href='/?help=examples#checkbox'>checkbox example</a></UL><BR> | ||
308 | <B>ClientInfo-><U>Cookie(</U>char *<U>handle</U>)</B> <UL>A function that returns the Cookie data from browser. if argument <U>handle</U> is NULL then this function returns whole Cookiestring from client</UL><BR> | ||
309 | <B>ClientInfo-><U>Conf(</U>char * <U>topic</U>,char *<U>handle</U>)</B> <UL>A function that returns an value from a <U>key</U> in <U>topic</U> in the config file if used</UL><BR> | ||
310 | <B>ClientInfo-><U>MultiPart(</U>char *<U>handle</U>)</B> <UL>A function that returns a data structure from the forms with method 'POST' and enctype='multipart/form-data' (useful for uploading files). <U>handle</U> is the name of some <input> tag.<BR><BR> | ||
311 | the structure is<BR> | ||
312 | struct _MultiPart { | ||
313 | <UL> | ||
314 | char *<U>id</u>;<BR> | ||
315 | char *<U>data</U>;<BR> | ||
316 | unsigned int <U>size</U>;<BR> | ||
317 | char *<U>filename</U>;<BR> | ||
318 | void *<U>pad</U>;<BR> | ||
319 | </UL> | ||
320 | };<BR> | ||
321 | to be used as ClientInfo-><U>MultiPart</U>("file1").<U>data</U>; ClientInfo-><U>MultiPart</U>("file1").<U>size</U>; ClientInfo-><U>MultiPart</U>("file1").<U>filename</U>; | ||
322 | </UL> | ||
323 | |||
324 | </UL> | ||
325 | <HR><BR> | ||
326 | <A name=configfile><B><font color='000077'>The config file</font></B><BR><BR> | ||
327 | <UL>the config file is used as<BR><BR> | ||
328 | <PRE> | ||
329 | [TOPIC] | ||
330 | KEY=VALUE | ||
331 | |||
332 | libwebserver configurations must be in topic LIBWEBSERVER as: | ||
333 | [LIBWEBSERVER] | ||
334 | LOG=help.log | ||
335 | PORT=80 | ||
336 | USESSL=1 | ||
337 | CERTFILE=foocert.pm | ||
338 | MIMEFILE=/etc/mime.types | ||
339 | LOCAL=1 | ||
340 | |||
341 | LOG -> the log file | ||
342 | PORT -> the listen port that will be used for tcp connections | ||
343 | |||
344 | USESSL -> the ssl flag if you want to use openssl for secure server (https) | ||
345 | CERTFILE -> the file that contains certificate for ssl connections | ||
346 | MIMEFILE -> the file that contains mime.types similer to apache mimefile | ||
347 | LOCAL -> only accept connections from 127.0.0.1 | ||
348 | |||
349 | </PRE> | ||
350 | </UL> | ||
351 | |||
352 | </font> | ||
353 | |||
354 | |||
355 | |||
diff --git a/doc/info.html b/doc/info.html deleted file mode 100644 index 05883540..00000000 --- a/doc/info.html +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | <center><H3><font color='007700'>libwebserver Info</font></H3></center><BR><BR> | ||
2 | <A name=what><B><font color='000077'>What's libwebserver for?</font></B><BR> | ||
3 | <UL>This lib is intended to add webserver functionality to programs instead of using an external webserver.<BR> | ||
4 | Two examples for embedded webservers that i know of are simple (shoutcast (i guess), and webTV (teletext as a webpage (from pinnacle)); and many others probably do the same. | ||
5 | </UL> | ||
6 | <HR> | ||
7 | <A name=who><B><font color='000077'>Who's supposed to use libwebserver?</font></B> | ||
8 | <UL>This is mainly developed for developers to make it easier to write a web interface to their software, (note a webbrowser is commonly available in most operating | ||
9 | systems) so it is like a portable "terminal" that can be accessed from any computer (with a browser of course...).</UL> | ||
10 | <HR> | ||
11 | <A name=when><B><font color='000077'>When am i supposed to use libwebserver?</font></B> | ||
12 | <UL>For example, imagine that you are developing a daemon and want to check stats or re-configure at run-time; | ||
13 | with this library you can add a listen port for runtime, and connect with whatever browser (via HTML interface) | ||
14 | without dependencies of an external webserver.<BR> | ||
15 | You can even do a webserver (of course), just use your imagination.<BR> | ||
16 | Another quite simple example, a sound recorder (using only local connections for security reasons) uses a web interface to control | ||
17 | /dev/dsp reading/writing (via HTML interface). | ||
18 | there are many other things you can do ...</UL> | ||
19 | |||
20 | <HR> | ||
21 | <A name=server_scripts><B><font color='000077'>Is there support for server scripts such as .php .cgi .asp?</font></B> | ||
22 | <UL> Well, this library only provides web server functions that make a server running, server scripts can be supported if you want to do it: | ||
23 | you can develop a handler for type ".something" or whatever, this package provides a .cgi handler as an example, (use at your own risk or make it better).</UL> | ||
24 | |||
25 | |||
diff --git a/doc/security.html b/doc/security.html deleted file mode 100644 index cdcc2d79..00000000 --- a/doc/security.html +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | <center><H3><font color='007700'>libwebserver Security</font></H3></center><BR><BR> | ||
2 | |||
3 | <A name=what><B><font color='000077'>Is it safe to use?</font></B><BR> | ||
4 | <UL>Well, I can't promise that it's a secure software since that not only depends on the software, | ||
5 | but all i can say is that wasn't found any security bug yet, this was developed intended to be secure, | ||
6 | you can use openssl (encrypted streams) to protect information that passes from webserver(lib) to client</UL> | ||
7 | |||
8 | <A name=certificate><B><font color='000077'>How do I create my own certificate?</font></B><BR> | ||
9 | <UL>You can either buy one from one of the big vendors (see your browser's stored certificates | ||
10 | for their addresses) or self-sign a self-created one. The upside of the bought | ||
11 | certificates is, that the webbrowser doesn't ask if the user wants to | ||
12 | accept that certificate, but instead checks with the certification authority | ||
13 | you bought your certificate from.<br> | ||
14 | The downside is that it costs quite a lot of money.<br> | ||
15 | To create your own certificate use openssl like that: | ||
16 | <ul><li>create a key and request:<br> | ||
17 | <pre><b>openssl req -new > foo-cert.csr</b></pre><br> | ||
18 | As "Common Name" you have to type in the name part of | ||
19 | your URL, i.e. if your web site will be | ||
20 | "https://www.libwebserver.rules:443/" the Common Name is | ||
21 | "www.libwebserver.rules". | ||
22 | <li> remove the passphrase from the key:<br> | ||
23 | <pre><b>openssl rsa -in privkey.pem -out foo-cert.key</b></pre><br> | ||
24 | <li>convert request into a signed certificate:<br> | ||
25 | <pre><b>openssl x509 -in foo-cert.csr -out foo-cert.cert -req -signkey foo-cert.key -days 356</b></pre><br> | ||
26 | <li>create .pem file:<br> | ||
27 | <pre><b>cat foo-cert.cert foo-cert.key >foo-cert.pem</b></pre><br> | ||
28 | </ul> | ||
29 | </ul> | ||
30 | |||
31 | |||
32 | <A name=tips><B><font size=4 color='770077'>Security tips</font></B><BR><HR> | ||
33 | |||
34 | <A name=racecondition><B><font color='000077'>Avoid race condition problems</font></B><BR> | ||
35 | <UL> | ||
36 | <B> What is race condition?</B> | ||
37 | <UL>A race condition occurs when two or more operations occur in an | ||
38 | undefined manner (McKusick et al. 1996). Specifically in file | ||
39 | system races the attacker attempts to change the state of the | ||
40 | file system in between two file system operations on the part | ||
41 | of the program.</UL><BR> | ||
42 | <B> How the lib determine temporary file name?</B> | ||
43 | <UL> | ||
44 | <li>generate file name (note: keep generating until it doesn't exists)<BR></li> | ||
45 | <li>check if file exists<BR> | ||
46 | -<small>attacker can create the file now, if he knows the right filename</small><BR></li> | ||
47 | <li>check if symlink exists<BR> | ||
48 | -<small>attacker can create the symlink now, if he knows the right filename</small><BR></li> | ||
49 | <li>create the file and redirect stdout to it <BR> | ||
50 | -<small>attacker can open the file and write to it</small><BR></li> | ||
51 | <li>places a lock into file (note: not in win98)<BR> </li> | ||
52 | <li>users operations, write, flush, read<BR></li> | ||
53 | <li>unlink the filename from the OS<BR></li> | ||
54 | </UL><BR> | ||
55 | |||
56 | |||
57 | libwebserver uses temporary filenames to hold and process data before send it to client, it uses the ambient variables to | ||
58 | determine temporary directory by following order "$TEMP,$TMP,$TMPDIR and the stdio.h P_tmpdir", libwebserver have several checks | ||
59 | and it locks file for avoid attackers from messing with temporary files, meanwhile is safely to change the tempdir (setting the ambient variable) | ||
60 | to an directory that is not writable for everyone and writable to lib (setenv("TEMP","/safedir"); you can do it before the web_server_run function | ||
61 | |||
62 | |||
63 | |||
64 | </UL> | ||
65 | |||
66 | |||
67 | |||
diff --git a/include/Makefile.am b/include/Makefile.am deleted file mode 100644 index 040efa45..00000000 --- a/include/Makefile.am +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | SUBDIRS = . | ||
2 | |||
3 | webserverincludedir = $(includedir)/GNUnet | ||
4 | |||
5 | webserverinclude_HEADERS = \ | ||
6 | webserver_gnunet.h | ||
7 | |||
diff --git a/include/webserver_gnunet.h b/include/webserver_gnunet.h deleted file mode 100644 index be908019..00000000 --- a/include/webserver_gnunet.h +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | (C) 2006 Christian Grothoff (and other contributing authors) | ||
4 | (C) 2002 Luis Figueiredo (stdio@netc.pt) | ||
5 | |||
6 | This library is free software; you can redistribute it and/or | ||
7 | modify it under the terms of the GNU Lesser General Public | ||
8 | License as published by the Free Software Foundation; either | ||
9 | version 2.1 of the License, or (at your option) any later version. | ||
10 | |||
11 | This library is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | Lesser General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU Lesser General Public | ||
17 | License along with this library; if not, write to the Free Software | ||
18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, | ||
19 | MA 02111-1307, USA. | ||
20 | */ | ||
21 | |||
22 | /** | ||
23 | * @file include/webserver_gnunet.h | ||
24 | * @brief public interface to libwebserver_gnunet | ||
25 | * | ||
26 | * @author Christian Grothoff | ||
27 | * @author Luis Figueiredo | ||
28 | */ | ||
29 | |||
30 | struct web_server; | ||
31 | |||
32 | int web_server_init(struct web_server * handle, | ||
33 | int port, | ||
34 | int flags); | ||
35 | |||
36 | void web_server_shutdown(struct web_server *); | ||
37 | |||
38 | int web_server_addhandler(struct web_server * hande, | ||
39 | const char *, | ||
40 | void (*handler)(), | ||
41 | void * hctx); | ||
42 | |||
43 | int web_server_run(struct web_server *); | ||
44 | |||
diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index a268789a..00000000 --- a/src/Makefile.am +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | SUBDIRS = . | ||
2 | |||
3 | INCLUDES = -I$(top_srcdir)/include | ||
4 | |||
5 | lib_LTLIBRARIES = libwebserver_gnunet.la | ||
6 | |||
7 | AM_CFLAGS = \ | ||
8 | -D_SERVER_VERSION="\"0.6.3-GNUnet\"" | ||
9 | |||
10 | libwebserver_gnunet_la_SOURCES = \ | ||
11 | clientinfo.c \ | ||
12 | server.c \ | ||
13 | client.c \ | ||
14 | gethandler.c \ | ||
15 | memory.c \ | ||
16 | utils.c \ | ||
17 | fnmatch.c | ||
18 | |||
19 | libwebserver_gnunet_la_LDFLAGS = \ | ||
20 | -version-info 0:0:0 | ||
21 | |||
diff --git a/src/client.c b/src/client.c deleted file mode 100644 index 22862020..00000000 --- a/src/client.c +++ /dev/null | |||
@@ -1,1171 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:44:42 GMT 2002 | ||
10 | * | ||
11 | * -- client handler functions | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | |||
16 | #include "client.h" | ||
17 | #include "outstream.h" | ||
18 | #include "clientinfo.h" | ||
19 | |||
20 | int WEBTIMEOUT=10000; | ||
21 | |||
22 | /*********************************************************************************************************/ | ||
23 | /* | ||
24 | * initializate (allocate) client list | ||
25 | */ | ||
26 | struct web_client *__ILWS_init_client_list() { | ||
27 | struct web_client *ret; | ||
28 | ret=__ILWS_malloc(sizeof(struct web_client)); | ||
29 | if(ret==NULL) { | ||
30 | return NULL; | ||
31 | }; | ||
32 | #ifdef HAVE_OPENSSL | ||
33 | ret->ssl=NULL; // ssl handler for this client | ||
34 | #endif | ||
35 | ret->next=NULL; | ||
36 | return ret; | ||
37 | } | ||
38 | |||
39 | |||
40 | /*********************************************************************************************************/ | ||
41 | /* | ||
42 | * Add a client node to client list | ||
43 | */ | ||
44 | int __ILWS_add_client(struct web_client *list, struct web_client *node) { | ||
45 | struct web_client *temp=list; | ||
46 | |||
47 | #ifdef WIN32 | ||
48 | unsigned long t=IOC_INOUT; | ||
49 | #endif | ||
50 | while(temp->next!=NULL)temp=temp->next; // run to last client | ||
51 | temp->next=node; | ||
52 | temp->next->rbuf=NULL; | ||
53 | temp->next->rbufsize=0; | ||
54 | |||
55 | if(!(temp->next->outstream=__ILWS_init_outstream_list())) { | ||
56 | return 0; | ||
57 | }; | ||
58 | if(!(temp->next->varlist=__ILWS_init_var_list())) { | ||
59 | return 0; | ||
60 | }; | ||
61 | |||
62 | temp->next->contentlength=0; | ||
63 | temp->next->headersize=0; | ||
64 | |||
65 | temp->next->wheadersize=0; | ||
66 | temp->next->writelength=0; | ||
67 | temp->next->readsize=0; | ||
68 | temp->next->range=0; | ||
69 | temp->next->skipped=0; | ||
70 | temp->next->cookies=NULL; | ||
71 | //temp->next->oldcl=clock(); | ||
72 | |||
73 | |||
74 | temp->next->newdata_try=0; | ||
75 | #ifdef WIN32 | ||
76 | // should be optional | ||
77 | ioctlsocket(temp->next->socket,FIONBIO,&t); //non blocking sockets for win32 | ||
78 | #else | ||
79 | fcntl(temp->next->socket,F_SETFL,O_NONBLOCK); | ||
80 | #endif | ||
81 | temp->next->next=NULL; | ||
82 | temp->next->HTTPdirective=NULL; | ||
83 | temp->next->stat=1; // Add a connected client | ||
84 | |||
85 | return 1; | ||
86 | } | ||
87 | /*********************************************************************************************************/ | ||
88 | |||
89 | |||
90 | |||
91 | /*********************************************************************************************************/ | ||
92 | /* | ||
93 | * Delete client node | ||
94 | */ | ||
95 | void __ILWS_delete_client(struct web_client *node) { | ||
96 | int rt; | ||
97 | rt=shutdown(node->socket,SHUT_RDWR); | ||
98 | #ifdef WIN32 | ||
99 | rt=closesocket(node->socket); | ||
100 | #else | ||
101 | rt=close(node->socket); | ||
102 | #endif | ||
103 | __ILWS_free(node->cookies); // (0.5.1) | ||
104 | __ILWS_delete_outstream_list(node->outstream); | ||
105 | __ILWS_delete_var_list(node->varlist); | ||
106 | #ifdef HAVE_OPENSSL | ||
107 | SSL_free (node->ssl); | ||
108 | #endif | ||
109 | __ILWS_free(node->rbuf); // free's | ||
110 | __ILWS_free(node); // free's | ||
111 | |||
112 | } | ||
113 | |||
114 | |||
115 | /*********************************************************************************************************/ | ||
116 | /* | ||
117 | * Delete next client node | ||
118 | */ | ||
119 | void __ILWS_delete_next_client(struct web_client *node) { | ||
120 | struct web_client *temp=node->next; | ||
121 | node->next=node->next->next; | ||
122 | __ILWS_delete_client(temp); | ||
123 | } | ||
124 | |||
125 | /*********************************************************************************************************/ | ||
126 | /* | ||
127 | * Delete entire client list | ||
128 | */ | ||
129 | void __ILWS_delete_client_list(struct web_client *node) { | ||
130 | struct web_client *next; | ||
131 | |||
132 | while(node) { | ||
133 | next = node->next; | ||
134 | __ILWS_free(node); | ||
135 | node = next; | ||
136 | } | ||
137 | } | ||
138 | |||
139 | /*********************************************************************************************************/ | ||
140 | /* | ||
141 | * Read what client have to say | ||
142 | */ | ||
143 | void __ILWS_read_client(struct web_client *node) { | ||
144 | int tmp,tmp1; | ||
145 | char *tmp2,*tmp3=NULL; | ||
146 | char readtemp[READMAX+1]; | ||
147 | unsigned long datasize=0; | ||
148 | |||
149 | #ifdef HAVE_OPENSSL | ||
150 | if(node->ssl!=NULL) { | ||
151 | tmp=SSL_read(node->ssl,readtemp,READMAX); | ||
152 | } else { | ||
153 | tmp=__ILWS_read(node->socket,readtemp,READMAX); | ||
154 | }; | ||
155 | #else | ||
156 | tmp=__ILWS_read(node->socket,readtemp,READMAX); | ||
157 | #endif | ||
158 | //fprintf(stderr,"readed %d bytes\n",tmp); | ||
159 | if(tmp<1) { | ||
160 | |||
161 | #ifdef WIN32 | ||
162 | if(WSAGetLastError()!=WSAEWOULDBLOCK) { | ||
163 | #else | ||
164 | if(errno!=EAGAIN) { | ||
165 | #endif | ||
166 | node->stat=5;return; | ||
167 | |||
168 | }; | ||
169 | //fprintf(stderr,"try: %d (%s)\n",node->newdata_try,node->rbuf); | ||
170 | // check if it is over | ||
171 | node->newdata_try++; | ||
172 | //fprintf(stderr,"node->newdata_try:%d\n",node->newdata_try); | ||
173 | if(node->rbufsize >0) { //&& node->newdata_try>5) { | ||
174 | if(node->headersize==0) { // always reachs "\r\n\r\n" | ||
175 | if((tmp3=strstr(node->rbuf,"\r\n\r\n"))) { | ||
176 | node->headersize=(tmp3-node->rbuf); | ||
177 | }; | ||
178 | } else { | ||
179 | datasize=node->rbufsize-node->headersize; | ||
180 | if(node->contentlength==0) { // well if it 0 read all at once | ||
181 | __ILWS_init_clientinfo(); // always call this? | ||
182 | node->contentlength=atol(ClientInfo->Header("Content-Length")); | ||
183 | // range for resuming | ||
184 | if((tmp3=strstr(ClientInfo->Header("Range"),"bytes="))) { // if it is in bytes (i hope, always) | ||
185 | tmp3+=6; // go to end of "bytes=" | ||
186 | node->range=atol(tmp3); | ||
187 | //printf("Range is %d - %s - %s\n",node->range,ClientInfo->Header("Range"),tmp3); | ||
188 | }; | ||
189 | // end range | ||
190 | __ILWS_free_clientinfo(); | ||
191 | }; | ||
192 | if(node->contentlength==datasize-4) { | ||
193 | //fprintf(stderr,"client (%d) all readed (%d) (try's)-%d\n",node->socket,node->curcl-node->oldcl,node->newdata_try); | ||
194 | node->newdata_try=WEBTIMEOUT; // assume done reading | ||
195 | //fprintf(stderr,"Ended naturaly\n"); | ||
196 | |||
197 | } | ||
198 | }; | ||
199 | if((node->newdata_try>=WEBTIMEOUT)) { // All readed | ||
200 | node->rbuf[node->rbufsize]='\0'; | ||
201 | node->stat=2; // Next state | ||
202 | //fprintf(stderr,"%s\n",node->rbuf); | ||
203 | //fprintf(stderr,"%d\n",node->rbufsize); | ||
204 | } | ||
205 | }; | ||
206 | }else { | ||
207 | tmp1=node->rbufsize; | ||
208 | node->rbufsize+=tmp; | ||
209 | tmp2=__ILWS_realloc(node->rbuf,node->rbufsize+1); | ||
210 | if(tmp2==NULL) { | ||
211 | node->stat=5; | ||
212 | |||
213 | return; | ||
214 | }else { | ||
215 | node->rbuf=tmp2; | ||
216 | }; | ||
217 | memcpy(node->rbuf+tmp1,readtemp,tmp); | ||
218 | node->newdata_try=0; | ||
219 | }; | ||
220 | } | ||
221 | |||
222 | |||
223 | /*********************************************************************************************************/ | ||
224 | /* | ||
225 | * Process headers w/ get handlers | ||
226 | */ | ||
227 | void __ILWS_process_client(struct web_client *node,struct gethandler *list) { | ||
228 | struct gethandler *gettemp=list; | ||
229 | long secs=time(NULL); | ||
230 | // for determining content length | ||
231 | #define RTMPMAX 400 | ||
232 | struct outstream *tmpstream; // new on 0.5.1 | ||
233 | char rtmp[RTMPMAX+1]; | ||
234 | int rtmps=0; | ||
235 | char *thead=NULL; | ||
236 | char *tmpl; | ||
237 | /// | ||
238 | int tmp=0; | ||
239 | int oumask=0; // old usermask | ||
240 | char *tmp1=__ILWS_web_client_getreq(); | ||
241 | char matchbuf[MATCHMAX]; | ||
242 | FILE *nfile; // new file | ||
243 | char *fname; // new file name | ||
244 | |||
245 | |||
246 | while(gettemp->next!=NULL && tmp==0) { | ||
247 | gettemp=gettemp->next; | ||
248 | snprintf(matchbuf,MATCHMAX,"%s",gettemp->str); | ||
249 | if(!tmp1) { | ||
250 | __ILWS_web_client_writef(node,"HTTP/1.1 400 Invalid request\r\n"); | ||
251 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
252 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
253 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>Invalid request</title><body bgcolor=FFFFFF><font size=6>400 Invalid request</font><BR><BR><small>Yout request doesn't match the requesits to be processed</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
254 | tmpl=__ILWS_web_client_getreqline(); | ||
255 | web_log("%s - - [%s] \"%s\" 400 (invalid request)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
256 | __ILWS_free(tmpl); | ||
257 | node->stat=5; | ||
258 | return; | ||
259 | }; | ||
260 | if(strlen(tmp1)>MAXURLSIZE) { | ||
261 | __ILWS_web_client_writef(node,"HTTP/1.1 414 URL to large\r\n"); | ||
262 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
263 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
264 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>URL to large</title><body bgcolor=FFFFFF><font size=6>414 Requested url to large</font><BR><BR><small>Wonder this... why is that so large?</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
265 | tmpl=__ILWS_web_client_getreqline(); | ||
266 | web_log("%s - - [%s] \"%s\" 414 (url to large)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
267 | __ILWS_free(tmpl); | ||
268 | node->stat=5; | ||
269 | __ILWS_free(tmp1); | ||
270 | return; | ||
271 | }; | ||
272 | if(!fnmatch(matchbuf,tmp1,5)) { | ||
273 | if((gettemp->flag & WS_LOCAL) == WS_LOCAL) { | ||
274 | if(node->sa.sin_addr.s_addr!=0x0100007F) { | ||
275 | __ILWS_web_client_writef(node,"HTTP/1.1 403 Forbidden\r\n"); | ||
276 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
277 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
278 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>Forbidden</title><body bgcolor=FFFFFF><font size=6>403 Forbidden</font><BR><BR><small>only local host accepted</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
279 | tmpl=__ILWS_web_client_getreqline(); | ||
280 | web_log("%s - - [%s] \"%s\" 403 (Forbidden)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
281 | __ILWS_free(tmpl); | ||
282 | node->stat=5; | ||
283 | __ILWS_free(tmp1); | ||
284 | return; | ||
285 | }; | ||
286 | }; | ||
287 | tmp=1; // Was found | ||
288 | node->outstream->flags=(gettemp->flag & WS_DYNVAR); // pass to outstreams | ||
289 | }; | ||
290 | }; | ||
291 | __ILWS_free(tmp1); | ||
292 | if(!tmp) { // Nothing found | ||
293 | __ILWS_web_client_writef(node,"HTTP/1.1 404 Not Found\r\n"); | ||
294 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
295 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
296 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>not found</title><body bgcolor=FFFFFF><font size=6>404 NOT FOUND</font><BR><BR><small>The requested content wasn't found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
297 | tmpl=__ILWS_web_client_getreqline(); | ||
298 | web_log("%s - - [%s] \"%s\" 404 (Not Found)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
299 | __ILWS_free(tmpl); | ||
300 | node->stat=5; | ||
301 | }else { | ||
302 | |||
303 | // if cgi do something else, present headers | ||
304 | oumask=umask(077); | ||
305 | if(!(fname=__ILWS_tmpfname())) { | ||
306 | libws_error(LE_FILESYS,": Error giving a temp filename\n"); | ||
307 | node->stat=5; | ||
308 | return; | ||
309 | }; | ||
310 | if((nfile=freopen(fname,"wb+",stdout))!=NULL) { | ||
311 | flock(fileno(stdout),LOCK_EX); | ||
312 | tmp=dup(fileno(stdout)); | ||
313 | nfile=fdopen(tmp,"wb+"); | ||
314 | if(!__ILWS_add_outstream(node->outstream,fname,nfile,1)) { | ||
315 | node->stat=5; // (delete client) | ||
316 | return; // ERROR reported by add_outstream | ||
317 | |||
318 | }; | ||
319 | // THE PROCESS | ||
320 | |||
321 | // Setup Clientinfo before running function | ||
322 | if(gettemp->type==GH_FUNCTION) { | ||
323 | __ILWS_init_clientinfo(); | ||
324 | gettemp->hdl.func(); // changed (0.5.3) Access by named union (Hilobok Andrew (han@km.if.ua) said that wasn't compile on freeBSD) | ||
325 | __ILWS_free_clientinfo(); | ||
326 | }; | ||
327 | // new on 0.5.2 | ||
328 | if(gettemp->type==GH_DIRECTORY) { // as builtin function for directory listing | ||
329 | __ILWS_init_clientinfo(); | ||
330 | if(strcmp(gettemp->str,"* /*"))ClientInfo->request+=1; // skip '/' if not equal to "* /*" (used by default) | ||
331 | __ILWS_lws_list(gettemp->hdl.path); // changed (0.5.3) Access by named union (Hilobok Andrew (han@km.if.ua) said that wasn't compile on freeBSD) | ||
332 | __ILWS_free_clientinfo(); | ||
333 | }; | ||
334 | |||
335 | fflush(stdout); | ||
336 | fclose(stdout); // it is a tempfile freopened | ||
337 | __ILWS_free(fname); // doesn't need anymore | ||
338 | #ifdef WIN32 | ||
339 | freopen("con","w",stdout); | ||
340 | #else | ||
341 | freopen("/dev/tty","w",stdout); | ||
342 | #endif | ||
343 | if((gettemp->flag & WS_USELEN) == WS_USELEN) { | ||
344 | // determine writelength (for content-length: header) (new on 0.5.1) | ||
345 | tmpstream=node->outstream; | ||
346 | tmp=0; | ||
347 | while(tmpstream->next!=NULL) { // end of header probably in the firsts outstream nodes check for that | ||
348 | if(tmpstream->next->fname!=NULL) { | ||
349 | if(tmpstream->next->fstream==NULL) { | ||
350 | nfile=fopen(tmpstream->next->fname,"rb"); | ||
351 | tmpstream->next->fstream=nfile; // here (corrected on 0.5.3); | ||
352 | } else { | ||
353 | fflush(tmpstream->next->fstream); // <- flush tha thing | ||
354 | nfile=tmpstream->next->fstream; | ||
355 | fseek(nfile,0,SEEK_SET); | ||
356 | }; | ||
357 | if(nfile!=NULL) { | ||
358 | rtmps=0; | ||
359 | while((!node->wheadersize) && (!feof(nfile))) { // wheadersize is 0, suposed to be fast, at least if is not malformed | ||
360 | if(rtmps>0) {tmp-=4;fseek(nfile,rtmps-4,SEEK_SET);} | ||
361 | if((rtmps=fread(rtmp,1,RTMPMAX,nfile))>0) { | ||
362 | rtmp[rtmps]=0; | ||
363 | if((tmp1=strstr(rtmp,"\r\n\r\n"))) { | ||
364 | node->wheadersize=(tmp+((tmp1+4)-rtmp)); | ||
365 | rtmps=((tmp1+4)-rtmp); | ||
366 | |||
367 | }; | ||
368 | if(node->range>0) { | ||
369 | tmp1=realloc(thead,tmp+rtmps+1); | ||
370 | thead=tmp1; | ||
371 | memcpy(thead+tmp,rtmp,rtmps); | ||
372 | thead[tmp+rtmps]=0; | ||
373 | }; | ||
374 | tmp+=rtmps; | ||
375 | }; | ||
376 | }; | ||
377 | fseek(nfile,SEEK_END,SEEK_END); | ||
378 | node->writelength+=(ftell(nfile)-2); | ||
379 | //fclose(nfile); // <- don't worry they close the file later | ||
380 | }; | ||
381 | }; | ||
382 | tmpstream=tmpstream->next; | ||
383 | |||
384 | }; | ||
385 | // end writelength | ||
386 | } else { | ||
387 | node->range=0; // no content-range | ||
388 | }; | ||
389 | |||
390 | if(node->range>node->writelength-node->wheadersize && node->range>0) { | ||
391 | __ILWS_web_client_writef(node,"HTTP/1.1 416 Requested Range Not Satisfiable\r\n"); | ||
392 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
393 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
394 | __ILWS_web_client_writef(node,"Content-range: bytes */%d\r\n",node->writelength-node->wheadersize); | ||
395 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>Requested Range Not Satisfiable</title><body bgcolor=FFFFFF><font size=6>416 Requested Range Not Satisfiable</font><BR><BR><small>You're trying to resume an content that is smaller than the requested range</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
396 | tmpl=__ILWS_web_client_getreqline(); | ||
397 | web_log("%s - - [%s] \"%s\" 416 (Requested Range Not Satisfiable)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
398 | __ILWS_free(tmpl); | ||
399 | node->stat=5; | ||
400 | __ILWS_free(thead); | ||
401 | umask(oumask); | ||
402 | return; | ||
403 | }; | ||
404 | if(node->range>0 && ((node->outstream->flags & WS_DYNVAR)==WS_DYNVAR)) { // if request range interval and dynvar on than produces not implemented | ||
405 | __ILWS_web_client_writef(node,"HTTP/1.1 501 Not Implemented\r\n"); | ||
406 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
407 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
408 | __ILWS_web_client_writef(node,"Content-type: text/html\r\n\r\n<HTML><title>Not implemented</title><body bgcolor=FFFFFF><font size=6>501 Not implemented</font><BR><BR><small>Your trying to resume an content that is not possible to resume(WS_DYNVAR fault)</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version); | ||
409 | tmpl=__ILWS_web_client_getreqline(); | ||
410 | web_log("%s - - [%s] \"%s\" 501 (Not Implemented)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
411 | __ILWS_free(tmpl); | ||
412 | node->stat=5; | ||
413 | __ILWS_free(thead); | ||
414 | umask(oumask); | ||
415 | return; | ||
416 | }; | ||
417 | |||
418 | } | ||
419 | node->stat=4; | ||
420 | if(node->HTTPdirective==NULL) { | ||
421 | if(node->range>0) { | ||
422 | __ILWS_web_client_writef(node,"HTTP/1.1 206 Partial Content\r\n"); | ||
423 | tmpl=__ILWS_web_client_getreqline(); | ||
424 | web_log("%s - - [%s] \"%s\" 206 (Partial Content)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
425 | __ILWS_free(tmpl); | ||
426 | } else { | ||
427 | __ILWS_web_client_writef(node,"HTTP/1.1 200 OK\r\n"); | ||
428 | tmpl=__ILWS_web_client_getreqline(); | ||
429 | web_log("%s - - [%s] \"%s\" 200 (OK)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
430 | __ILWS_free(tmpl); | ||
431 | }; | ||
432 | |||
433 | } else { | ||
434 | __ILWS_web_client_writef(node,"%s\r\n",node->HTTPdirective); | ||
435 | tmpl=__ILWS_web_client_getreqline(); | ||
436 | web_log("%s - - [%s] \"%s\" XXX (User defined)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),tmpl); | ||
437 | __ILWS_free(tmpl); | ||
438 | }; | ||
439 | __ILWS_web_client_writef(node,"Server: %s\r\n",_libwebserver_version); | ||
440 | __ILWS_web_client_writef(node,"Date: %s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // Date header | ||
441 | __ILWS_web_client_writef(node,"Accept-Ranges: bytes\r\n"); | ||
442 | if((((node->writelength-node->wheadersize)-node->range)>0) && !((node->outstream->flags & WS_DYNVAR)==WS_DYNVAR))__ILWS_web_client_writef(node,"Content-length: %d\r\n",(node->writelength-node->wheadersize)-node->range); | ||
443 | if(node->cookies!=NULL)__ILWS_web_client_writef(node,"%s",node->cookies); // new (0.5.1) | ||
444 | if(node->range>0) { | ||
445 | __ILWS_web_client_writef(node,"Content-range: bytes %d-%d/%d\r\n",node->range,(node->writelength-node->wheadersize)-1,node->writelength-node->wheadersize); | ||
446 | __ILWS_web_client_writef(node,"%s",thead); // the rest of header | ||
447 | __ILWS_free(thead); | ||
448 | }; | ||
449 | umask(oumask); | ||
450 | |||
451 | }; | ||
452 | |||
453 | } | ||
454 | /*********************************************************************************************************/ | ||
455 | /* | ||
456 | * Process stream output | ||
457 | */ | ||
458 | void __ILWS_output_client(struct web_client *node) { | ||
459 | struct outstream *tstream=node->outstream; | ||
460 | char *tmp1,*tmp2,*tmp3; | ||
461 | char writetemp[WRITEMAX+1]; | ||
462 | int beginsize=0; | ||
463 | int endsize=0; | ||
464 | int varsize=0; | ||
465 | int namesize=0; | ||
466 | if(tstream->next!=NULL) { | ||
467 | if(tstream->next->fname!=NULL) { | ||
468 | if(tstream->next->fstream==NULL) { | ||
469 | if((tstream->next->fstream=fopen(tstream->next->fname,"rb"))==NULL) { | ||
470 | __ILWS_delete_next_outstream(tstream); | ||
471 | //node->outstream->next=tstream->next; | ||
472 | return; | ||
473 | } | ||
474 | }; | ||
475 | |||
476 | // read part (must always read) | ||
477 | if(tstream->next->rsize==0) { // start from 0 | ||
478 | fseek(tstream->next->fstream,0,SEEK_SET); | ||
479 | }; | ||
480 | memset(writetemp,0,WRITEMAX); | ||
481 | tstream->next->rsize=fread(writetemp,1,WRITEMAX,tstream->next->fstream); | ||
482 | writetemp[tstream->next->rsize]=0; | ||
483 | // if read make var changes on writetemp; | ||
484 | // new on 0.5.1 -- UNDERDEV // FIX - | ||
485 | if((node->outstream->flags & WS_DYNVAR) == WS_DYNVAR) { | ||
486 | |||
487 | tmp1=writetemp; | ||
488 | while(((tmp1=strstr(tmp1,"$")+1)!=(char*)1) && beginsize==0) { // check var found | ||
489 | for(namesize=0;namesize<50;namesize++) { | ||
490 | if(tmp1[namesize]==';') {namesize++;break;} | ||
491 | if((tmp1[namesize]<'a' || tmp1[namesize]>'z') && | ||
492 | (tmp1[namesize]<'A' || tmp1[namesize]>'Z') && | ||
493 | (tmp1[namesize]<'1' || tmp1[namesize]>'0') && | ||
494 | tmp1[namesize]!='_') {namesize=0;break;}; | ||
495 | |||
496 | }; | ||
497 | if(namesize>0) { | ||
498 | if(namesize==1) { // this is $; for sure | ||
499 | if(!(tmp3=__ILWS_malloc(2))) { | ||
500 | node->stat=5; | ||
501 | return; | ||
502 | }; | ||
503 | memcpy(tmp3,"$",namesize); | ||
504 | tmp3[namesize]=0; | ||
505 | } else { | ||
506 | if(!(tmp3=__ILWS_malloc(namesize))) { | ||
507 | node->stat=5; | ||
508 | return; | ||
509 | }; | ||
510 | memcpy(tmp3,tmp1,namesize-1); | ||
511 | tmp3[namesize-1]=0; | ||
512 | }; | ||
513 | |||
514 | tmp1-=1; | ||
515 | |||
516 | beginsize=tmp1-writetemp; | ||
517 | tmp1+=namesize; // get var from whateverwhere (client node probably) | ||
518 | |||
519 | endsize=strlen(tmp1); | ||
520 | |||
521 | //varsize=2; | ||
522 | |||
523 | if((tmp2=__ILWS_malloc(beginsize+1))) { | ||
524 | memcpy(tmp2,writetemp,beginsize); | ||
525 | tmp2[beginsize]=0; | ||
526 | if(namesize==1) { | ||
527 | varsize=strlen(tmp3); | ||
528 | snprintf(writetemp,WRITEMAX,"%s%s",tmp2,tmp3); | ||
529 | } else { | ||
530 | varsize=strlen(__ILWS_get_var(node->varlist,tmp3)); | ||
531 | snprintf(writetemp,WRITEMAX,"%s%s",tmp2,__ILWS_get_var(node->varlist,tmp3)); | ||
532 | }; | ||
533 | writetemp[strlen(tmp2)+varsize]=0; | ||
534 | __ILWS_free(tmp2); | ||
535 | __ILWS_free(tmp3); | ||
536 | tstream->next->rsize=(beginsize+varsize); | ||
537 | tstream->next->varsize+=(varsize-namesize)-1; | ||
538 | } else { | ||
539 | __ILWS_free(tmp3); | ||
540 | node->stat=5; | ||
541 | return; | ||
542 | }; | ||
543 | }; | ||
544 | }; | ||
545 | }; // dynvar | ||
546 | |||
547 | /* there is nothing more to read here */ | ||
548 | if(tstream->next->rsize<1){ // i guess rsize < 1 is eof (make sure that server writed last time) | ||
549 | //only change if everything written | ||
550 | if(feof(tstream->next->fstream) && (ftell(tstream->next->fstream)==tstream->next->wrotesize)) { | ||
551 | //fclose(tstream->next->fstream); | ||
552 | |||
553 | __ILWS_delete_next_outstream(tstream); | ||
554 | //node->outstream->next=tstream->next; | ||
555 | } | ||
556 | return; | ||
557 | } | ||
558 | node->readsize+=tstream->next->rsize; | ||
559 | if(!node->skipped && node->range>0) { | ||
560 | tstream->next->wsize=tstream->next->rsize; | ||
561 | tstream->next->wrotesize+=tstream->next->wsize; | ||
562 | if((node->readsize-node->wheadersize)<node->range) { // skip range bytes | ||
563 | return; // do nothing | ||
564 | }else { | ||
565 | node->skipped=1; | ||
566 | tstream->next->wrotesize-=(node->readsize-node->wheadersize)-node->range; // the right offset | ||
567 | fseek(tstream->next->fstream,tstream->next->wrotesize,SEEK_SET); | ||
568 | tstream->next->wsize=tstream->next->rsize; | ||
569 | return; | ||
570 | }; | ||
571 | }; | ||
572 | // write part | ||
573 | |||
574 | #ifdef HAVE_OPENSSL | ||
575 | if(node->ssl!=NULL) { | ||
576 | tstream->next->wsize=SSL_write(node->ssl,writetemp,tstream->next->rsize); | ||
577 | } else { | ||
578 | tstream->next->wsize=send(node->socket,writetemp,tstream->next->rsize,0); | ||
579 | }; | ||
580 | #else | ||
581 | tstream->next->wsize=send(node->socket,writetemp,tstream->next->rsize,0); | ||
582 | #endif | ||
583 | if(tstream->next->wsize>0) { | ||
584 | tstream->next->wrotesize+=tstream->next->wsize; | ||
585 | if(tstream->next->rsize!=tstream->next->wsize || beginsize>0) { // FIX | ||
586 | fseek(tstream->next->fstream,tstream->next->wrotesize-(tstream->next->varsize),SEEK_SET); // FIX | ||
587 | }; | ||
588 | }; | ||
589 | #ifdef WIN32 | ||
590 | if((tstream->next->wsize<=0) && (WSAGetLastError()!=WSAEWOULDBLOCK)) { // WIN32 only | ||
591 | #else | ||
592 | if(tstream->next->wsize<=0 && errno!=EAGAIN) { // linux only // *nix i guess | ||
593 | #endif | ||
594 | //fclose(tstream->next->fstream); | ||
595 | |||
596 | __ILWS_delete_next_outstream(tstream); | ||
597 | //node->outstream->next=tstream->next; | ||
598 | return; | ||
599 | }else { // broken pipe | ||
600 | if(tstream->next->wsize<0) { | ||
601 | fseek(tstream->next->fstream,tstream->next->wrotesize-(tstream->next->varsize),SEEK_SET); //didn't read must back to where it was | ||
602 | }; | ||
603 | }; | ||
604 | |||
605 | }else { // filename is null | ||
606 | |||
607 | __ILWS_delete_next_outstream(tstream); | ||
608 | return; | ||
609 | }; | ||
610 | }else { // End of streams | ||
611 | |||
612 | current_web_client->stat=5; // done | ||
613 | |||
614 | }; | ||
615 | } | ||
616 | |||
617 | /*********************************************************************************************************/ | ||
618 | /* | ||
619 | * Set http directive | ||
620 | */ | ||
621 | void web_client_HTTPdirective(char *str) { | ||
622 | current_web_client->HTTPdirective=str; | ||
623 | } | ||
624 | |||
625 | |||
626 | /*********************************************************************************************************/ | ||
627 | /* | ||
628 | * GET request name | ||
629 | */ | ||
630 | char *__ILWS_web_client_getreq() { | ||
631 | char *ret; | ||
632 | char *tmp1=strstr(current_web_client->rbuf,"?"); | ||
633 | char *tmp2=strstr(current_web_client->rbuf," HTTP"); | ||
634 | char *tmp3=strstr(current_web_client->rbuf,"\r\n"); | ||
635 | int size; | ||
636 | if(tmp1==NULL || tmp1>tmp2) { | ||
637 | tmp1=tmp2; | ||
638 | }; | ||
639 | if(tmp2>tmp3) { | ||
640 | return NULL; | ||
641 | }; | ||
642 | size=tmp1-current_web_client->rbuf; | ||
643 | if(size<1) return NULL; | ||
644 | |||
645 | if(!(ret=__ILWS_malloc(size+1))) { | ||
646 | return NULL; | ||
647 | }; | ||
648 | memcpy(ret,current_web_client->rbuf,size); | ||
649 | ret[size]=0; | ||
650 | return ret; | ||
651 | |||
652 | }; | ||
653 | |||
654 | /*********************************************************************************************************/ | ||
655 | /* | ||
656 | * GET request line | ||
657 | */ | ||
658 | char *__ILWS_web_client_getreqline() { | ||
659 | char *ret; | ||
660 | char *tmp1=strstr(current_web_client->rbuf,"\r\n"); | ||
661 | int size=0; | ||
662 | if(tmp1==NULL) return NULL; | ||
663 | size=tmp1-current_web_client->rbuf; | ||
664 | if(size<1) return NULL; | ||
665 | |||
666 | if(!(ret=__ILWS_malloc(size+1))) { | ||
667 | return NULL; | ||
668 | }; | ||
669 | memcpy(ret,current_web_client->rbuf,size); | ||
670 | ret[size]=0; | ||
671 | return ret; | ||
672 | } | ||
673 | |||
674 | |||
675 | /*********************************************************************************************************/ | ||
676 | /* | ||
677 | * Add a FILE stream type to client output | ||
678 | */ | ||
679 | int web_client_addfile(char *in) { | ||
680 | int ret=__ILWS_add_outstream(current_web_client->outstream,in,NULL,0); | ||
681 | int nfd=0; | ||
682 | char *fname; | ||
683 | FILE *nfile=NULL; | ||
684 | fname=__ILWS_tmpfname(); | ||
685 | fflush(stdout); | ||
686 | fclose(stdout); // oldstdout close it? | ||
687 | |||
688 | if((nfile=freopen(fname,"w+b",stdout))!=NULL){ // redirect | ||
689 | flock(fileno(stdout),LOCK_EX); // <- yah | ||
690 | nfd=dup(fileno(stdout)); | ||
691 | nfile=fdopen(nfd,"wb+"); | ||
692 | if(!__ILWS_add_outstream(current_web_client->outstream,fname,nfile,1)) { | ||
693 | return 0; | ||
694 | }; | ||
695 | }; | ||
696 | __ILWS_free(fname); | ||
697 | ClientInfo->outfd=fileno(nfile); | ||
698 | return ret; | ||
699 | } | ||
700 | |||
701 | |||
702 | /*********************************************************************************************************/ | ||
703 | /* | ||
704 | * Output data as gif (with width w and height h) | ||
705 | */ | ||
706 | unsigned char __ILWS_GLOBALGIFPAL[256][3]; | ||
707 | |||
708 | |||
709 | void web_client_gifsetpalette(const char *fname) { | ||
710 | int j; | ||
711 | FILE *palfile; | ||
712 | if(strcmp(fname,"EGA")==0) { | ||
713 | static int EGApalette[16][3] = { | ||
714 | {0,0,0}, {0,0,128}, {0,128,0}, {0,128,128}, | ||
715 | {128,0,0}, {128,0,128}, {128,128,0}, {200,200,200}, | ||
716 | {100,100,100}, {100,100,255}, {100,255,100}, {100,255,255}, | ||
717 | {255,100,100}, {255,100,255}, {255,255,100}, {255,255,255} }; | ||
718 | for (j=0; j<256; j++) { | ||
719 | __ILWS_GLOBALGIFPAL[j][0] = (unsigned char)EGApalette[j&15][0]; | ||
720 | __ILWS_GLOBALGIFPAL[j][1] = (unsigned char)EGApalette[j&15][1]; | ||
721 | __ILWS_GLOBALGIFPAL[j][2] = (unsigned char)EGApalette[j&15][2]; | ||
722 | } | ||
723 | } else { | ||
724 | if(!(palfile=fopen(fname,"rb"))) { | ||
725 | return; | ||
726 | }; | ||
727 | fread(__ILWS_GLOBALGIFPAL,sizeof(__ILWS_GLOBALGIFPAL),1,palfile); | ||
728 | fclose(palfile); | ||
729 | }; | ||
730 | }; | ||
731 | |||
732 | int web_client_gifoutput(char *data,int w,int h,int transparencyindex) { | ||
733 | int i; | ||
734 | unsigned char rm[256],gm[256],bm[256]; | ||
735 | for(i=0;i<256;i++) { | ||
736 | rm[i]=__ILWS_GLOBALGIFPAL[i][0]; | ||
737 | gm[i]=__ILWS_GLOBALGIFPAL[i][1]; | ||
738 | bm[i]=__ILWS_GLOBALGIFPAL[i][2]; | ||
739 | }; | ||
740 | |||
741 | i=__ILWS_WriteGIF(stdout,data,w,h,rm,gm,bm,256,0,transparencyindex,"libwebserver export gif (xvgifwr.c)"); | ||
742 | |||
743 | return i; | ||
744 | }; | ||
745 | |||
746 | |||
747 | /*********************************************************************************************************/ | ||
748 | /* | ||
749 | * an util to write with format on client_nodes | ||
750 | */ | ||
751 | void __ILWS_web_client_writef(struct web_client *node,const char *fmt,...) { | ||
752 | va_list args; | ||
753 | char buf[WRITEMAX]; | ||
754 | va_start(args,fmt); | ||
755 | vsnprintf(buf,512,fmt,args); | ||
756 | va_end(args); | ||
757 | |||
758 | #ifdef HAVE_OPENSSL | ||
759 | if(node->ssl!=NULL) { | ||
760 | SSL_write(node->ssl,buf,strlen(buf)); | ||
761 | } else { | ||
762 | send(node->socket,buf,strlen(buf),0); | ||
763 | }; | ||
764 | #else | ||
765 | send(node->socket,buf,strlen(buf),0); | ||
766 | #endif | ||
767 | } | ||
768 | |||
769 | |||
770 | /*********************************************************************************************************/ | ||
771 | /* | ||
772 | * function "web_client_setcookie" (improved on 0.5.1) to be called what ever were over handler function | ||
773 | * | ||
774 | * name = Name of the cookie | ||
775 | * value = Value of the cookie | ||
776 | * timeout = Timeout in second from current time on | ||
777 | * (0 = Until end of session) | ||
778 | * (-1 = Delete cookie) | ||
779 | * path = Subset of URLs in a domain for which the cookie is valid | ||
780 | * (If the path is not specified (path == NULL), it as assumed to be | ||
781 | * the same path as the document being described by the header which | ||
782 | * contains the cookie.) | ||
783 | * domain = Domain the cookie is valid for | ||
784 | * (If the domain is not set (domain == NULL), the default value of | ||
785 | * domain is the host name of the server which generated the cookie | ||
786 | * response.) | ||
787 | * secure = If a cookie is marked secure (secure == 1), it will only be | ||
788 | * transmitted if the communications channel with the host is a | ||
789 | * secure one. Currently this means that secure cookies will only be | ||
790 | * sent to HTTPS (HTTP over SSL) servers. | ||
791 | * (If secure is not specified (secure == 0), a cookie is considered | ||
792 | * safe to be sent in the clear over unsecured channels. ) | ||
793 | */ | ||
794 | void web_client_setcookie(char *name, char *value, char *timeoutf, char *path, char *domain, int secure) { | ||
795 | char *tmp1=timeoutf; | ||
796 | long toffset=0; | ||
797 | time_t secs; // to time offset | ||
798 | int timeout; | ||
799 | int offset=(current_web_client->cookies!=NULL)?strlen(current_web_client->cookies):0; | ||
800 | if(timeoutf==NULL) { | ||
801 | timeout=0; | ||
802 | } else if (!strcmp(timeoutf,"DEL")){ | ||
803 | timeout=-1; | ||
804 | } else { | ||
805 | while(*tmp1) { | ||
806 | if(*tmp1=='S')toffset=1; // seconds | ||
807 | if(*tmp1=='M')toffset=60; // minutes | ||
808 | if(*tmp1=='H')toffset=60*60; // hours | ||
809 | if(*tmp1=='d')toffset=60*60*24; // days | ||
810 | if(*tmp1=='m')toffset=60*60*24*30; // Month | ||
811 | if(*tmp1=='y')toffset=60*60*24*365; // years | ||
812 | tmp1++; | ||
813 | }; | ||
814 | timeout=atoi(timeoutf)*toffset; | ||
815 | }; | ||
816 | |||
817 | if (timeout < 0){ | ||
818 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+59+strlen(name)); | ||
819 | snprintf(current_web_client->cookies+offset,59+strlen(name),"Set-Cookie: %s=deleted; expires=%s", name, __ILWS_date(time(NULL)-31536001,"%a, %d-%b-%Y %H:%M:%S GMT")); | ||
820 | offset+=59+strlen(name); | ||
821 | }else{ | ||
822 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+14+strlen(name)+strlen(value)); | ||
823 | snprintf(current_web_client->cookies+offset,14+strlen(name)+strlen(value),"Set-Cookie: %s=%s", name, value); | ||
824 | offset+=13+strlen(name)+strlen(value); | ||
825 | |||
826 | if (timeout != 0){ | ||
827 | //timeout += timezone; Hilobok Andrew (han@km.if.ua) removed this and use gmtime (thanks) | ||
828 | // exchanged by mktime(gmtime(&secs)) | ||
829 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+40); | ||
830 | secs=time(NULL); | ||
831 | snprintf(current_web_client->cookies+offset,40,"; expires=%s", __ILWS_date(mktime(gmtime(&secs))+timeout,"%a, %d-%b-%Y %H:%M:%S GMT")); | ||
832 | offset+=39; | ||
833 | } | ||
834 | if (path != NULL && *path!=0) { | ||
835 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+8+strlen(path)); | ||
836 | snprintf(current_web_client->cookies+offset,8+strlen(path),"; path=%s", path); | ||
837 | offset+=7+strlen(path); | ||
838 | } | ||
839 | if (domain != NULL && *domain!=0){ | ||
840 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+10+strlen(domain)); | ||
841 | snprintf(current_web_client->cookies+offset,10+strlen(domain),"; domain=%s", domain); | ||
842 | offset+=9+strlen(domain); | ||
843 | }; | ||
844 | if (secure == 1) { | ||
845 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+9); | ||
846 | snprintf(current_web_client->cookies+offset,9,"; secure"); | ||
847 | offset+=8; | ||
848 | }; | ||
849 | } | ||
850 | |||
851 | current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+3); | ||
852 | snprintf(current_web_client->cookies+offset,3,"\r\n"); // '\0' included | ||
853 | offset+=2; | ||
854 | // fprintf(stderr,"current_web_client->cookies=\"%s\"\n",current_web_client->cookies); // DEBUG TO REMOVE | ||
855 | |||
856 | |||
857 | } | ||
858 | |||
859 | |||
860 | |||
861 | |||
862 | /* | ||
863 | * function "web_client_deletecookie" | ||
864 | * | ||
865 | * name = Name of the cookie to delete | ||
866 | */ | ||
867 | |||
868 | void web_client_deletecookie(char *name){ | ||
869 | web_client_setcookie(name, NULL, "DEL", NULL, NULL, 0); | ||
870 | } | ||
871 | |||
872 | |||
873 | |||
874 | |||
875 | |||
876 | |||
877 | |||
878 | |||
879 | int web_client_setvar(char *name,char *value) { | ||
880 | return __ILWS_add_var(current_web_client->varlist,name,value); | ||
881 | }; | ||
882 | char *web_client_getvar(char *name) { | ||
883 | return __ILWS_get_var(current_web_client->varlist,name); | ||
884 | |||
885 | }; | ||
886 | int web_client_delvar(char *name) { | ||
887 | return __ILWS_del_var(current_web_client->varlist,name); | ||
888 | |||
889 | }; | ||
890 | |||
891 | |||
892 | /*************** | ||
893 | * variables | ||
894 | ***************/ | ||
895 | |||
896 | |||
897 | // prepare this to work in another file var.c | ||
898 | struct web_var *__ILWS_init_var_list() { | ||
899 | struct web_var *ret; | ||
900 | if(!(ret=__ILWS_malloc(sizeof(struct web_var)))) { | ||
901 | return NULL; | ||
902 | }; | ||
903 | ret->name=NULL; | ||
904 | ret->value=NULL; | ||
905 | ret->next=NULL; | ||
906 | return ret; | ||
907 | }; | ||
908 | |||
909 | int __ILWS_add_var(struct web_var *list, char *name, char *value) { | ||
910 | struct web_var *node=list; | ||
911 | int namesize=strlen(name); | ||
912 | int valuesize=strlen(value); | ||
913 | while(node->next!=NULL) { | ||
914 | if(!strcmp(node->next->name,name)) { | ||
915 | return 0; | ||
916 | }; | ||
917 | node=node->next; | ||
918 | }; | ||
919 | |||
920 | if(!(node->next=__ILWS_malloc(sizeof(struct web_var)))) { | ||
921 | return 0; | ||
922 | }; | ||
923 | |||
924 | if(!(node->next->name=__ILWS_malloc(namesize+1))) { | ||
925 | return 0; | ||
926 | }; | ||
927 | memcpy(node->next->name,name,namesize); | ||
928 | node->next->name[namesize]=0; | ||
929 | |||
930 | if(!(node->next->value=__ILWS_malloc(valuesize+1))) { | ||
931 | return 0; | ||
932 | }; | ||
933 | memcpy(node->next->value,value,valuesize); | ||
934 | node->next->value[valuesize]=0; | ||
935 | node->next->next=NULL; | ||
936 | return 1; | ||
937 | }; | ||
938 | |||
939 | int __ILWS_del_var(struct web_var *list, char *name) { | ||
940 | struct web_var *node=list; | ||
941 | struct web_var *tmp; | ||
942 | while(node->next!=NULL) { | ||
943 | if(!strcmp(node->next->name,name)) { | ||
944 | tmp=node->next; | ||
945 | node->next=node->next->next; | ||
946 | __ILWS_free(tmp->name); | ||
947 | __ILWS_free(tmp->value); | ||
948 | __ILWS_free(tmp); | ||
949 | return 1; | ||
950 | }; | ||
951 | }; | ||
952 | return 0; | ||
953 | }; | ||
954 | void __ILWS_delete_var_list(struct web_var *list) { | ||
955 | struct web_var *node=list; | ||
956 | struct web_var *tmp; | ||
957 | |||
958 | while(node->next!=NULL) { | ||
959 | tmp=node->next; | ||
960 | node->next=node->next->next; | ||
961 | __ILWS_free(tmp->name); | ||
962 | __ILWS_free(tmp->value); | ||
963 | |||
964 | __ILWS_free(tmp); | ||
965 | }; | ||
966 | __ILWS_free(node); | ||
967 | }; | ||
968 | |||
969 | |||
970 | char *__ILWS_get_var(struct web_var *list , char *name) { | ||
971 | struct web_var *node=list; | ||
972 | while(node->next!=NULL) { | ||
973 | if(!strcmp(node->next->name,name)) { | ||
974 | return node->next->value; | ||
975 | }; | ||
976 | node=node->next; | ||
977 | }; | ||
978 | return ""; | ||
979 | }; | ||
980 | |||
981 | |||
982 | /**************************** | ||
983 | * give mime by ext (mime file declared on server) | ||
984 | */ | ||
985 | |||
986 | void web_client_contenttype(char *ext) { | ||
987 | FILE *mimefileh; | ||
988 | char *mimedata; | ||
989 | char *mimeline; | ||
990 | size_t extsize; | ||
991 | size_t mimesize; | ||
992 | char *tmp; | ||
993 | /* -- mime */ | ||
994 | int isok=0; | ||
995 | size_t i; | ||
996 | |||
997 | if(ext==NULL || current_web_server->mimefile==NULL) { | ||
998 | printf("Content-type: text/plain\r\n\r\n"); // <- mime type, change this calculating mime with extension | ||
999 | } else { | ||
1000 | extsize=strlen(ext); | ||
1001 | if((mimefileh=fopen(current_web_server->mimefile,"r"))) { | ||
1002 | // retrieve file size | ||
1003 | fseek(mimefileh,SEEK_END,SEEK_END); | ||
1004 | mimesize=ftell(mimefileh); | ||
1005 | fseek(mimefileh,0,SEEK_SET); | ||
1006 | // | ||
1007 | // malloc and read data | ||
1008 | mimedata=__ILWS_malloc(mimesize+1); | ||
1009 | fread(mimedata,1,mimesize,mimefileh); | ||
1010 | fclose(mimefileh); // close file | ||
1011 | // | ||
1012 | for(i=0;i<mimesize;i++)if(mimedata[i]=='\t')mimedata[i]=' '; // translate \t to 1 space | ||
1013 | mimedata[mimesize]=0; | ||
1014 | |||
1015 | isok=0; | ||
1016 | mimeline=strtok(mimedata,"\n"); | ||
1017 | while((mimeline=strtok(NULL,"\n")) && !isok) { | ||
1018 | if(mimeline[0]!='#') { // is not a comment | ||
1019 | tmp=mimeline; | ||
1020 | while((tmp=strstr(tmp,ext)) && !isok) { | ||
1021 | //fprintf(stderr,"extsize(%d),found in %s (%s) %x\n",extsize,mimeline,tmp,tmp[extsize]); | ||
1022 | if(tmp[-1]==' ' && (tmp[extsize]==' ' || tmp[extsize]=='\0') ) { | ||
1023 | if((tmp=strchr(mimeline,' '))) { // the first space? | ||
1024 | tmp[0]='\0'; | ||
1025 | //fprintf(stderr,"content is: %s\n",mimeline); | ||
1026 | printf("Content-type: %s\r\n\r\n",mimeline); | ||
1027 | isok=1; | ||
1028 | }; | ||
1029 | }; | ||
1030 | tmp+=extsize; | ||
1031 | }; | ||
1032 | |||
1033 | }; | ||
1034 | }; | ||
1035 | if(!isok) { | ||
1036 | printf("Content-type: text/plain\r\n\r\n"); | ||
1037 | }; | ||
1038 | //printf("%s\n",tmp); | ||
1039 | __ILWS_free(mimedata); | ||
1040 | |||
1041 | }; | ||
1042 | }; | ||
1043 | }; | ||
1044 | |||
1045 | |||
1046 | /********************************** | ||
1047 | * internal directory generator | ||
1048 | */ | ||
1049 | |||
1050 | int __ILWS_lws_list(char *inpath) { | ||
1051 | /* for type directory */ | ||
1052 | /* mime*/ | ||
1053 | char *ext; | ||
1054 | struct dirent *dire; | ||
1055 | DIR *cd; | ||
1056 | struct stat cfstat; | ||
1057 | char *dirpath=NULL; | ||
1058 | char *filepath; | ||
1059 | char *tmp; | ||
1060 | char *readfile; | ||
1061 | float filesize; | ||
1062 | char filesizeu; | ||
1063 | //// | ||
1064 | |||
1065 | |||
1066 | //printf("ClientInfo->request=<B>%s</B><BR>\n",ClientInfo->request); | ||
1067 | //readfile=__ILWS_malloc(strlen(ClientInfo->request)+1); | ||
1068 | readfile=ClientInfo->request; | ||
1069 | while((tmp=strstr(readfile,"./"))) { // this skip ../ also | ||
1070 | readfile=tmp+1; | ||
1071 | }; | ||
1072 | while((tmp=strstr(readfile,"//"))) { | ||
1073 | readfile=tmp+1; | ||
1074 | }; | ||
1075 | |||
1076 | tmp=strstr(readfile,"/"); | ||
1077 | if(tmp!=NULL) { | ||
1078 | readfile=tmp+1; // must be in the first | ||
1079 | }; | ||
1080 | // skip beind dir | ||
1081 | if(strlen(readfile)) { | ||
1082 | filepath=__ILWS_malloc(strlen(inpath)+strlen(readfile)+3); | ||
1083 | snprintf(filepath,strlen(inpath)+strlen(readfile)+2,"%s%s%s",inpath,(inpath[strlen(inpath)-1]=='/')?"":"/",readfile); | ||
1084 | //printf("pum ->%s<BR>\n",filepath); | ||
1085 | if(readfile[strlen(readfile)-1]=='/') { | ||
1086 | dirpath=__ILWS_malloc(strlen(filepath)+1); | ||
1087 | memcpy(dirpath,filepath,strlen(filepath)+1); // the 0 included | ||
1088 | } else { | ||
1089 | if(!stat(filepath,&cfstat)) { // file must exist | ||
1090 | if((cfstat.st_mode & S_IFDIR) != S_IFDIR) { | ||
1091 | // search for mime | ||
1092 | ext=strrchr(filepath,'.'); | ||
1093 | tmp=strrchr(filepath,'/'); | ||
1094 | ext+=1; | ||
1095 | if(ext<=tmp) { // is not a extension | ||
1096 | ext=NULL; | ||
1097 | }; | ||
1098 | |||
1099 | //Wed, 22 Oct 2003 16:04:04 GMT | ||
1100 | printf("Last-Modified: %s\r\n",__ILWS_date(mktime(gmtime(&cfstat.st_mtime)),"%a, %d %b %Y %H:%M:%S GMT")); // new on 0.5.3 | ||
1101 | web_client_contenttype(ext); | ||
1102 | web_client_addfile(filepath); // fopen and write, maybe? | ||
1103 | __ILWS_free(filepath); | ||
1104 | return 1; | ||
1105 | } else { | ||
1106 | web_client_HTTPdirective("HTTP/1.1 404 File Not Found"); | ||
1107 | printf("Content-type: text/html\r\n\r\n<HTML><title>file not found</title><body bgcolor=FFFFFF><font size=6>404 FILE NOT FOUND</font><BR><BR><small>The request \"%s\" wasn't found, try this <a href='%s/'>link</a></small><BR><HR><small><i>%s</i></small></body></html>\n\r",filepath,ClientInfo->request,_libwebserver_version); | ||
1108 | __ILWS_free(filepath); | ||
1109 | return 0; | ||
1110 | }; | ||
1111 | }else { | ||
1112 | web_client_HTTPdirective("HTTP/1.1 404 File Not Found"); | ||
1113 | printf("Content-type: text/html\r\n\r\n<HTML><title>file not found</title><body bgcolor=FFFFFF><font size=6>404 FILE NOT FOUND</font><BR><BR><small>The request \"%s\" wasn't found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",filepath,_libwebserver_version); | ||
1114 | __ILWS_free(filepath); | ||
1115 | return 0; | ||
1116 | }; | ||
1117 | }; | ||
1118 | __ILWS_free(filepath); | ||
1119 | }; | ||
1120 | //printf("Content-type: text/html\r\n\r\n"); | ||
1121 | //fprintf(stderr,"dirpath=%s inpath=%s\n",dirpath,inpath); | ||
1122 | if(dirpath==NULL) { | ||
1123 | dirpath=__ILWS_malloc(strlen(inpath)+1); | ||
1124 | memcpy(dirpath,inpath,strlen(inpath)+1); | ||
1125 | }; | ||
1126 | cd=opendir(dirpath); | ||
1127 | if(cd!=NULL) { | ||
1128 | printf("Content-type: text/html\r\n\r\n"); | ||
1129 | printf("<HTML><HEAD><TITLE>Contents of %s</TITLE></HEAD><BODY>\n",dirpath); | ||
1130 | printf("<h1>Contents of directory %s</h1><HR>\n",dirpath); | ||
1131 | printf("<form><input type=text name=match value=\"%s\"><input type=submit name='send' value='wildcard'></form>\n",strlen(ClientInfo->Query("match"))?ClientInfo->Query("match"):"*"); | ||
1132 | printf("<PRE>\n"); | ||
1133 | while((dire=readdir(cd))) { | ||
1134 | if( ((dire->d_name[0]!='.') || (strcmp(dirpath,inpath) && !strcmp(dire->d_name,".."))) && (!fnmatch(ClientInfo->Query("match"),dire->d_name,0) || !strlen(ClientInfo->Query("match"))) ) { | ||
1135 | filepath=__ILWS_malloc(strlen(dirpath)+strlen(dire->d_name)+2); | ||
1136 | snprintf(filepath,strlen(dirpath)+strlen(dire->d_name)+2,"%s%s%s",dirpath,(dirpath[strlen(dirpath)-1]=='/')?"":"/",dire->d_name); | ||
1137 | //fprintf(stderr,"filename=%s\n",filepath); | ||
1138 | if(!stat(filepath,&cfstat)) { | ||
1139 | if((cfstat.st_mode & S_IFDIR) == S_IFDIR) { | ||
1140 | printf("%s <DIR> <a href=\"%s/\">%s</a>\n",__ILWS_date(cfstat.st_mtime,"%a, %d %b %Y %H:%M"),dire->d_name,dire->d_name); | ||
1141 | }else { | ||
1142 | filesize=(float)cfstat.st_size; | ||
1143 | filesizeu=0; | ||
1144 | while(filesize>1024) { | ||
1145 | filesize/=1024; | ||
1146 | filesizeu++; | ||
1147 | }; | ||
1148 | printf("%s %.1f%c <a href=\"%s\">%s</a>\n",__ILWS_date(cfstat.st_mtime,"%a, %d %b %Y %H:%M"),filesize,(filesizeu==2)?'M':(filesizeu==1)?'K':'b',dire->d_name,dire->d_name); | ||
1149 | }; | ||
1150 | }; | ||
1151 | __ILWS_free(filepath); | ||
1152 | }; | ||
1153 | |||
1154 | }; | ||
1155 | printf("</PRE>\n"); | ||
1156 | printf("<HR>\n"); | ||
1157 | printf("<address>%s</address>\n",_libwebserver_version); | ||
1158 | printf("</BODY></HTML>\r\n"); | ||
1159 | __ILWS_free(dirpath); | ||
1160 | closedir(cd); | ||
1161 | } else { | ||
1162 | web_client_HTTPdirective("HTTP/1.1 404 File Not Found"); | ||
1163 | printf("Content-type: text/html\r\n\r\n<HTML><title>file not found</title><body bgcolor=FFFFFF><font size=6>404 FILE NOT FOUND</font><BR><BR><small>The request \"%s\" wasn't found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",dirpath,_libwebserver_version); | ||
1164 | return 0; | ||
1165 | }; | ||
1166 | return 1; | ||
1167 | }; | ||
1168 | |||
1169 | |||
1170 | |||
1171 | |||
diff --git a/src/client.h b/src/client.h deleted file mode 100644 index 6217b271..00000000 --- a/src/client.h +++ /dev/null | |||
@@ -1,139 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:44:42 GMT 2002 | ||
10 | * | ||
11 | * | ||
12 | * -- | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef _CLIENT_H_ | ||
17 | #define _CLIENT_H_ | ||
18 | |||
19 | #ifdef HAVE_CONFIG_H | ||
20 | #include "config.h" | ||
21 | #endif | ||
22 | |||
23 | #include <stdio.h> | ||
24 | #include <fcntl.h> | ||
25 | #include <string.h> | ||
26 | #include <errno.h> | ||
27 | |||
28 | #include "socket.h" | ||
29 | #include "memory.h" | ||
30 | #include "utils.h" | ||
31 | #include "fnmatch.h" | ||
32 | #include "clientinfo.h" | ||
33 | |||
34 | #ifdef WIN32 | ||
35 | #include "flock.h" // my flock | ||
36 | #include "dirent.h" | ||
37 | #else | ||
38 | #include <sys/file.h> // for flock | ||
39 | #include <dirent.h> | ||
40 | #endif | ||
41 | |||
42 | struct gethandler { | ||
43 | char * str; | ||
44 | void (*func)(); | ||
45 | void * ctx; | ||
46 | struct gethandler * next; | ||
47 | }; | ||
48 | |||
49 | |||
50 | |||
51 | #define READMAX 100000 // 1Mb upload | ||
52 | |||
53 | #define WRITEMAX 100000 // 1Mb download 1mb per client? // smaller is better for multi read bigger is better for big downloads | ||
54 | |||
55 | #define MAXURLSIZE 2000 // | ||
56 | |||
57 | extern int WEBTIMEOUT; //to be changed externaly | ||
58 | //#define WEBTIMEOUT 10000 // TIMEOUT WITHOUT RECEIVING DATA (not in seconds but in read tries) | ||
59 | |||
60 | struct web_var { | ||
61 | char *name; | ||
62 | char *value; | ||
63 | struct web_var *next; | ||
64 | }; | ||
65 | |||
66 | struct web_client { | ||
67 | int socket; | ||
68 | struct sockaddr_in sa; | ||
69 | unsigned int salen; | ||
70 | char *HTTPdirective; | ||
71 | unsigned char stat; /* 0001b idle,0010b down streaming, 0011 done down streaming, 0100b out streaming,0101 done out streaming */ | ||
72 | // Read control | ||
73 | char *rbuf; | ||
74 | unsigned long rbufsize; | ||
75 | int newdata_try; | ||
76 | unsigned long contentlength; // for read propose (optimize speed 0.5.1) | ||
77 | unsigned long headersize; | ||
78 | |||
79 | // Write control | ||
80 | struct outstream *outstream; | ||
81 | struct web_var *varlist; | ||
82 | char *cookies; // cookie header (0.5.1) | ||
83 | long writelength; | ||
84 | long readsize; | ||
85 | long range; | ||
86 | int skipped; | ||
87 | long wheadersize; | ||
88 | struct web_client * next; | ||
89 | }; | ||
90 | |||
91 | struct web_client *__ILWS_init_client_list(void); | ||
92 | |||
93 | int __ILWS_add_client(struct web_client *, | ||
94 | struct web_client *); | ||
95 | |||
96 | void __ILWS_delete_next_client(struct web_client *); | ||
97 | |||
98 | void __ILWS_delete_client_list(struct web_client *); | ||
99 | |||
100 | void __ILWS_read_client(struct web_client *); | ||
101 | |||
102 | void __ILWS_process_client(struct web_client *,struct gethandler *); | ||
103 | |||
104 | void __ILWS_output_client(struct web_client *); | ||
105 | |||
106 | void __ILWS_web_client_writef(struct web_client *,const char *,...); | ||
107 | |||
108 | int web_client_addfile(char *); | ||
109 | |||
110 | void web_client_contenttype(char *); // new on 0.5.2 | ||
111 | |||
112 | void web_client_HTTPdirective(char *); | ||
113 | |||
114 | char *__ILWS_web_client_getreqline(); | ||
115 | |||
116 | char *__ILWS_web_client_getreq(); | ||
117 | |||
118 | // new (0.5.1) | ||
119 | int web_client_setvar(char *,char *); | ||
120 | |||
121 | char *web_client_getvar(char *); | ||
122 | |||
123 | int web_client_delvar(char *); | ||
124 | |||
125 | // put in var.h | ||
126 | struct web_var *__ILWS_init_var_list(); | ||
127 | |||
128 | int __ILWS_add_var(struct web_var *, char *, char *); | ||
129 | |||
130 | int __ILWS_del_var(struct web_var *, char *); | ||
131 | |||
132 | void __ILWS_delete_var_list(struct web_var *); | ||
133 | |||
134 | char *__ILWS_get_var(struct web_var *list , char *name); | ||
135 | |||
136 | int __ILWS_lws_list(char *); // new on 0.5.2 | ||
137 | |||
138 | #endif | ||
139 | |||
diff --git a/src/clientinfo.c b/src/clientinfo.c deleted file mode 100644 index 0aa5e3b5..00000000 --- a/src/clientinfo.c +++ /dev/null | |||
@@ -1,893 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Wed Oct 9 19:56:22 GMT 2002 | ||
10 | * | ||
11 | * -- parse http header into "ClientInfo" | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include "clientinfo.h" | ||
16 | |||
17 | /*********************************************************************************************************/ | ||
18 | /* | ||
19 | * Initialize ClientInfo structure | ||
20 | */ | ||
21 | void __ILWS_init_clientinfo(struct ClientInfo *ClientInfo) { | ||
22 | char *t; | ||
23 | struct outstream *tstream=current_web_client->outstream; | ||
24 | |||
25 | ClientInfo=__ILWS_malloc(sizeof(struct ClientInfo)); | ||
26 | if(ClientInfo==NULL) { | ||
27 | return; | ||
28 | }; | ||
29 | |||
30 | while(tstream->next!=NULL) { | ||
31 | tstream=tstream->next; | ||
32 | }; | ||
33 | |||
34 | if(tstream->fstream!=NULL) ClientInfo->outfd=fileno(tstream->fstream); //take it off? | ||
35 | |||
36 | ClientInfo->mem=__ILWS_init_buffer_list(); // First thing, other fuctions use this to allocate | ||
37 | |||
38 | |||
39 | ClientInfo->request=__ILWS_clientinfo_getreqname(); | ||
40 | |||
41 | ClientInfo->inetname=NULL; | ||
42 | t=inet_ntoa(current_web_client->sa.sin_addr); | ||
43 | if((ClientInfo->inetname=__ILWS_add_buffer(ClientInfo->mem,strlen(t)+1))) { | ||
44 | memcpy(ClientInfo->inetname,t,strlen(t)); | ||
45 | ClientInfo->inetname[strlen(t)]='\0'; | ||
46 | }; | ||
47 | |||
48 | ClientInfo->method=__ILWS_clientinfo_getmethod(); | ||
49 | ClientInfo->user=__ILWS_clientinfo_getauthuser(); | ||
50 | ClientInfo->pass=__ILWS_clientinfo_getauthpass(); | ||
51 | |||
52 | |||
53 | |||
54 | /* Initialize List's */ | ||
55 | ClientInfo->HeaderList=NULL; | ||
56 | ClientInfo->QueryList=NULL; | ||
57 | ClientInfo->PostList=NULL; | ||
58 | ClientInfo->MultiPartList=NULL; | ||
59 | ClientInfo->CookieList=NULL; | ||
60 | |||
61 | ClientInfo->Header=__ILWS_Header; | ||
62 | ClientInfo->Query=__ILWS_Query; | ||
63 | ClientInfo->QueryString=__ILWS_clientinfo_getquerystring(); | ||
64 | ClientInfo->Post=__ILWS_Post; | ||
65 | ClientInfo->PostData=__ILWS_clientinfo_getpostdata(); | ||
66 | ClientInfo->MultiPart=__ILWS_MultiPart; | ||
67 | ClientInfo->Cookie=__ILWS_Cookie; | ||
68 | ClientInfo->Conf=__ILWS_Conf; | ||
69 | ClientInfo->CookieString=__ILWS_Header("Cookie"); | ||
70 | |||
71 | } | ||
72 | |||
73 | /* | ||
74 | * Free ClientInfo structure | ||
75 | */ | ||
76 | void __ILWS_free_clientinfo(struct ClientInfo *ClientInfo) { | ||
77 | if(ClientInfo==NULL) { | ||
78 | return; | ||
79 | }; | ||
80 | __ILWS_delete_buffer_list(ClientInfo->mem); | ||
81 | |||
82 | __ILWS_free(ClientInfo); | ||
83 | ClientInfo=NULL; | ||
84 | } | ||
85 | |||
86 | |||
87 | /* | ||
88 | * Header function for ClientInfo->Header("x") | ||
89 | */ | ||
90 | char *__ILWS_Header(struct ClientInfo *ClientInfo, char *str) { | ||
91 | char *tmp1,*tmp2,*tmp3,*ret; | ||
92 | struct _Header *hl=ClientInfo->HeaderList; | ||
93 | char *defret=""; | ||
94 | size_t size; | ||
95 | size_t strsize; | ||
96 | if(str==NULL) { // request is null return whole header | ||
97 | return current_web_client->rbuf; | ||
98 | }; | ||
99 | if(ClientInfo->HeaderList==NULL) { | ||
100 | |||
101 | ClientInfo->HeaderList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header)); | ||
102 | if(ClientInfo->HeaderList==NULL) { | ||
103 | return defret; | ||
104 | }; | ||
105 | ClientInfo->HeaderList->next=NULL; | ||
106 | ClientInfo->HeaderList->data=NULL; | ||
107 | ClientInfo->HeaderList->id=NULL; | ||
108 | hl=ClientInfo->HeaderList; | ||
109 | }; | ||
110 | // First search if exists | ||
111 | |||
112 | while(hl->next!=NULL) { | ||
113 | if(hl->next->id!=NULL) { | ||
114 | if(!strcmp(hl->next->id,str)) { | ||
115 | |||
116 | return hl->next->data; | ||
117 | }; | ||
118 | }; | ||
119 | hl=hl->next; | ||
120 | }; | ||
121 | |||
122 | /* Doesn't exists */ | ||
123 | strsize=strlen(str); | ||
124 | if(!(hl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Header)))) { | ||
125 | return defret; | ||
126 | }; | ||
127 | if(!(hl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) { | ||
128 | return defret; | ||
129 | }; | ||
130 | |||
131 | memcpy(hl->next->id,str,strsize); | ||
132 | hl->next->id[strsize]=0; | ||
133 | hl->next->data=defret; | ||
134 | hl->next->next=NULL; | ||
135 | |||
136 | if(!(tmp3=__ILWS_malloc(strsize+3))) { | ||
137 | return defret; | ||
138 | }; | ||
139 | snprintf(tmp3,strsize+3,"%s: ",str); | ||
140 | tmp1=__ILWS_stristr(current_web_client->rbuf,tmp3); | ||
141 | __ILWS_free(tmp3); | ||
142 | if(tmp1==NULL) { | ||
143 | return defret; | ||
144 | }; | ||
145 | |||
146 | tmp1+=strsize+2; | ||
147 | if(!(tmp2=strstr(tmp1,"\r\n"))) { // Unexpected (security anyway) | ||
148 | return defret; | ||
149 | }; | ||
150 | if((size=(unsigned int)(tmp2-tmp1))<0) { | ||
151 | return defret; | ||
152 | }; | ||
153 | if(!(ret=__ILWS_add_buffer(ClientInfo->mem,size+1))) { //malloc & register | ||
154 | return defret; | ||
155 | }; | ||
156 | memcpy(ret,tmp1,size); | ||
157 | ret[size]=0; | ||
158 | hl->next->data=ret; | ||
159 | return ret; | ||
160 | } | ||
161 | |||
162 | /* | ||
163 | * Function for Querydata | ||
164 | */ | ||
165 | char *__ILWS_Query(struct ClientInfo *ClientInfo, char *handle) { | ||
166 | char *tmp1,*tmp2,*tmp3,*tmp4,*ret; | ||
167 | char *defret=""; | ||
168 | size_t strsize; | ||
169 | size_t size; | ||
170 | int j=0,ch; | ||
171 | int seek=1; | ||
172 | unsigned int i; | ||
173 | unsigned int *iddb=NULL; | ||
174 | unsigned int *iddb2=NULL; | ||
175 | unsigned int idf=0; | ||
176 | int rw=0; // 0 data 1 number of vars; (return what?) | ||
177 | struct _Query *ql=ClientInfo->QueryList; | ||
178 | |||
179 | |||
180 | if(handle==NULL) { | ||
181 | return ClientInfo->QueryString; | ||
182 | }; | ||
183 | if(handle[0]=='#') rw=1; | ||
184 | // allocate first node from the list | ||
185 | if(ClientInfo->QueryList==NULL) { | ||
186 | ClientInfo->QueryList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query)); | ||
187 | if(ClientInfo->QueryList==NULL) { | ||
188 | if(rw) return 0; | ||
189 | return defret; | ||
190 | }; | ||
191 | ClientInfo->QueryList->next=NULL; | ||
192 | ClientInfo->QueryList->data=NULL; | ||
193 | ClientInfo->QueryList->id=NULL; | ||
194 | ql=ClientInfo->QueryList; | ||
195 | }; | ||
196 | // done allocating | ||
197 | |||
198 | |||
199 | // First search if exists and fetch values; | ||
200 | |||
201 | idf=1; | ||
202 | iddb=&idf; | ||
203 | seek=1; | ||
204 | |||
205 | while(ql->next!=NULL) { | ||
206 | if(ql->next->id!=NULL) { | ||
207 | if(!strcmp(ql->next->id,handle+rw) && *iddb >= 0) { | ||
208 | if(seek==1) { | ||
209 | iddb=&ql->next->index; // atribute iddb to first node | ||
210 | iddb2=&ql->next->idf; // atribute iddb2 to counting | ||
211 | if(rw) return (char *)*iddb2; | ||
212 | if(ql->next->idf==1) { | ||
213 | return ql->next->data; | ||
214 | }; | ||
215 | j=*iddb; | ||
216 | seek++; | ||
217 | }; | ||
218 | *iddb=*iddb-1; | ||
219 | |||
220 | if(*iddb<=0) { | ||
221 | *iddb=j-1; | ||
222 | if(j<=1) { | ||
223 | *iddb=*iddb2; // go to start if any | ||
224 | //return defret; // to be null | ||
225 | }; | ||
226 | return ql->next->data; // Return existent | ||
227 | }; | ||
228 | |||
229 | }; | ||
230 | }; | ||
231 | ql=ql->next; | ||
232 | }; | ||
233 | |||
234 | |||
235 | |||
236 | /* Doesn't exists */ | ||
237 | strsize=strlen(handle+rw); | ||
238 | tmp1=strstr(current_web_client->rbuf,"?"); | ||
239 | tmp3=strstr(current_web_client->rbuf," HTTP"); // End of GET header | ||
240 | if(tmp1!=NULL && tmp1<tmp3) { | ||
241 | tmp1+=1; | ||
242 | } else { | ||
243 | if(rw)return 0; | ||
244 | return defret; | ||
245 | } | ||
246 | |||
247 | // Working here | ||
248 | idf=0; | ||
249 | ret=defret; | ||
250 | seek=1; | ||
251 | tmp4=tmp1; | ||
252 | while(seek==1) { | ||
253 | tmp1=tmp4; | ||
254 | do { | ||
255 | tmp2=strstr(tmp1,handle+rw); | ||
256 | if(tmp2==NULL) { // must be nonnull | ||
257 | if(iddb!=NULL && iddb2!=NULL) { // if iddb2 is null then is just one value; | ||
258 | *iddb2=*iddb; | ||
259 | if(!rw)*iddb=*iddb-1; | ||
260 | }; | ||
261 | if(rw) { | ||
262 | if(ret==defret) return 0; | ||
263 | return (char *)*iddb2; | ||
264 | } | ||
265 | return ret; // if first null return defret (ret=defret); | ||
266 | |||
267 | }; | ||
268 | tmp1=tmp2+strsize; | ||
269 | } while ((tmp2[-1]!='?' && tmp2[-1]!='&') || tmp2[strsize]!='='); // Johannes E. Schindelin Fix | ||
270 | |||
271 | if(tmp3<tmp2) { | ||
272 | if(iddb!=NULL && iddb2!=NULL) { | ||
273 | *iddb2=*iddb; | ||
274 | if(!rw)*iddb=*iddb-1; | ||
275 | }; | ||
276 | if(rw) { | ||
277 | if(ret==defret) return 0; | ||
278 | return (char *)*iddb2; | ||
279 | } | ||
280 | |||
281 | return ret; | ||
282 | }; | ||
283 | |||
284 | tmp4=tmp1; | ||
285 | // if not null, so add an node; | ||
286 | |||
287 | // Working here ^ | ||
288 | ql->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query)); | ||
289 | if(ql->next==NULL) { | ||
290 | if(handle[0]=='#') rw=1; | ||
291 | return defret; | ||
292 | }; | ||
293 | ql->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); | ||
294 | if(ql->next->id==NULL) { | ||
295 | if(handle[0]=='#') rw=1; | ||
296 | return defret; | ||
297 | }; | ||
298 | memcpy(ql->next->id,handle+rw,strsize); | ||
299 | ql->next->id[strsize]=0; | ||
300 | if(idf==0) { | ||
301 | ql->next->index=0; | ||
302 | iddb=&ql->next->index; | ||
303 | iddb2=&ql->next->idf; // second holds information about number of fetchs; | ||
304 | |||
305 | }; | ||
306 | ql->next->data=defret; | ||
307 | ql->next->next=NULL; | ||
308 | |||
309 | |||
310 | tmp1=strstr(tmp2,"&"); // tmp1 goes to next '&' | ||
311 | tmp2+=strsize+1; // tmp2 goes to start of data | ||
312 | tmp3=strstr(tmp2," HTTP"); // tmp3 goes to the end of Get header | ||
313 | if(tmp1==NULL || ((unsigned int)tmp1>(unsigned int)tmp3)) { | ||
314 | size=tmp3-tmp2; // MUST HAVE (" HTTP") else, server don't let in | ||
315 | } else { | ||
316 | size=tmp1-tmp2; | ||
317 | }; | ||
318 | if(size<1) { | ||
319 | if(handle[0]=='#') rw=1; | ||
320 | return defret; | ||
321 | }; | ||
322 | |||
323 | |||
324 | ql->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
325 | if(ql->next->data==NULL) { | ||
326 | if(handle[0]=='#') rw=1; | ||
327 | return defret; | ||
328 | }; | ||
329 | j=0; | ||
330 | for(i=0;i<size;i++) { // Hex translation here | ||
331 | switch (ch=tmp2[j]) { | ||
332 | case '+': | ||
333 | ch=' '; | ||
334 | break; | ||
335 | case '%': | ||
336 | |||
337 | tmp1=__ILWS_malloc(3); | ||
338 | if(tmp1==NULL) { | ||
339 | if(rw) return 0; | ||
340 | return defret; | ||
341 | }; | ||
342 | strncpy(tmp1,&tmp2[j+1],2); | ||
343 | tmp1[2]=0; | ||
344 | ch=strtol(tmp1,NULL,16); | ||
345 | j+=2; | ||
346 | size-=2; | ||
347 | |||
348 | __ILWS_free(tmp1); | ||
349 | break; | ||
350 | }; | ||
351 | ql->next->data[i]=ch; | ||
352 | j++; | ||
353 | }; | ||
354 | ql->next->data[size]='\0'; | ||
355 | ret=ql->next->data; // to the last | ||
356 | ql=ql->next; | ||
357 | *iddb=*iddb+1; | ||
358 | idf++; | ||
359 | }; | ||
360 | return ret; | ||
361 | } | ||
362 | |||
363 | /* | ||
364 | * Function for Postdata | ||
365 | */ | ||
366 | char *__ILWS_Post(struct ClientInfo *ClientInfo, char *handle) { | ||
367 | char *tmp1,*tmp2,*tmp3,*ret; | ||
368 | struct _Post *pl=ClientInfo->PostList; | ||
369 | char *defret=""; | ||
370 | int *iddb=NULL,*iddb2=NULL; | ||
371 | int idf; | ||
372 | int seek=1; | ||
373 | size_t strsize; | ||
374 | size_t size; | ||
375 | int j=0,ch; | ||
376 | unsigned int i; | ||
377 | int rw=0; //return what; | ||
378 | |||
379 | tmp1=strstr(current_web_client->rbuf,"Content-type: multipart/form-data"); // multipart this post doesn't work | ||
380 | if(tmp1!=NULL) { | ||
381 | return ClientInfo->MultiPart(handle).data; | ||
382 | }; | ||
383 | if(handle==NULL) { | ||
384 | return ClientInfo->PostData; | ||
385 | }; | ||
386 | if(handle[0]=='#')rw=1; | ||
387 | /* Allocate the list */ | ||
388 | if(ClientInfo->PostList==NULL) { | ||
389 | if(!(ClientInfo->PostList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post)))) { | ||
390 | if(rw) return 0; | ||
391 | return defret; | ||
392 | }; | ||
393 | ClientInfo->PostList->next=NULL; | ||
394 | ClientInfo->PostList->data=NULL; | ||
395 | ClientInfo->PostList->id=NULL; | ||
396 | pl=ClientInfo->PostList; | ||
397 | }; | ||
398 | |||
399 | // First search if exists | ||
400 | idf=1; | ||
401 | iddb=&idf; | ||
402 | seek=1; | ||
403 | while(pl->next!=NULL) { | ||
404 | if(pl->next->id!=NULL) { | ||
405 | if(!strcmp(pl->next->id,handle+rw) && iddb>=0) { | ||
406 | if(seek==1) { | ||
407 | iddb=&pl->next->index; | ||
408 | iddb2=&pl->next->idf; | ||
409 | if(rw) return (char *)(*iddb2); | ||
410 | if(pl->next->idf==1) { | ||
411 | return pl->next->data; | ||
412 | }; | ||
413 | j=*iddb; | ||
414 | seek++; | ||
415 | }; | ||
416 | *iddb=*iddb-1; | ||
417 | |||
418 | if(*iddb<=0) { | ||
419 | *iddb=j-1; | ||
420 | if(j<=1) { | ||
421 | *iddb=*iddb2; | ||
422 | |||
423 | //return defret; | ||
424 | }; | ||
425 | return pl->next->data; | ||
426 | }; | ||
427 | }; | ||
428 | }; | ||
429 | pl=pl->next; | ||
430 | }; | ||
431 | |||
432 | |||
433 | |||
434 | |||
435 | |||
436 | /* Doesn't exists */ | ||
437 | strsize=strlen(handle+rw); | ||
438 | tmp1=strstr(current_web_client->rbuf,"\r\n\r\n"); | ||
439 | if(tmp1!=NULL) | ||
440 | tmp1+=4; | ||
441 | else { | ||
442 | if(rw) return 0; | ||
443 | return defret; | ||
444 | }; | ||
445 | idf=0; | ||
446 | ret=defret; | ||
447 | seek=1; | ||
448 | tmp3=tmp1; | ||
449 | while(seek==1) { | ||
450 | tmp1=tmp3; | ||
451 | do { | ||
452 | tmp2=strstr(tmp1,handle+rw); | ||
453 | if(tmp2==NULL) { // mustn't be null | ||
454 | if(iddb!=NULL && iddb2!=NULL) { // if iddb2 is null then is just one value; | ||
455 | *iddb2=*iddb; | ||
456 | if(!rw)*iddb=*iddb-1; | ||
457 | }; | ||
458 | if(rw) { | ||
459 | if(ret==defret) return 0; | ||
460 | return (char *)*iddb2; | ||
461 | } | ||
462 | return ret; // if first null return defret (ret=defret); | ||
463 | |||
464 | }; | ||
465 | tmp1=tmp2+strsize; | ||
466 | } while ((tmp2[-1]!='\n' && tmp2[-1]!='&') || tmp2[strsize]!='='); // Johannes E. Schindelin Fix | ||
467 | tmp3=tmp1; | ||
468 | |||
469 | |||
470 | pl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Post)); | ||
471 | if(pl->next==NULL) { | ||
472 | if(rw) return 0; | ||
473 | return defret; | ||
474 | }; | ||
475 | pl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); | ||
476 | if(pl->next->id==NULL) { | ||
477 | if(rw) return 0; | ||
478 | return defret; | ||
479 | }; | ||
480 | memcpy(pl->next->id,handle+rw,strsize); | ||
481 | pl->next->id[strsize]=0; | ||
482 | if(idf==0) { | ||
483 | pl->next->index=0; | ||
484 | iddb=&pl->next->index; | ||
485 | iddb2=&pl->next->idf; | ||
486 | }; | ||
487 | |||
488 | pl->next->data=defret; | ||
489 | pl->next->next=NULL; | ||
490 | |||
491 | tmp1=strstr(tmp2,"&"); // goes to the next & (end of data) | ||
492 | tmp2+=strsize+1; // tmp2 goes to start of data | ||
493 | if(tmp1==NULL) { | ||
494 | size=strlen(tmp2); | ||
495 | } else { | ||
496 | size=tmp1-tmp2; | ||
497 | }; | ||
498 | if(size==0) { | ||
499 | if(rw) return 0; | ||
500 | return defret; | ||
501 | }; | ||
502 | |||
503 | pl->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
504 | if(pl->next->data==NULL) { | ||
505 | return defret; | ||
506 | }; | ||
507 | j=0; | ||
508 | for(i=0;i<size;i++) { // hex translation here | ||
509 | switch (ch=tmp2[j]) { | ||
510 | case '+': | ||
511 | ch=' '; | ||
512 | break; | ||
513 | case '%': | ||
514 | |||
515 | tmp1=__ILWS_malloc(3); | ||
516 | if(tmp1==NULL) { | ||
517 | if(rw) return 0; | ||
518 | return defret; | ||
519 | }; | ||
520 | strncpy(tmp1,&tmp2[j+1],2); | ||
521 | tmp1[2]=0; | ||
522 | |||
523 | ch=strtol(tmp1,NULL,16); | ||
524 | j+=2; | ||
525 | size-=2; | ||
526 | |||
527 | __ILWS_free(tmp1); | ||
528 | break; | ||
529 | }; | ||
530 | pl->next->data[i]=ch; | ||
531 | j++; | ||
532 | }; | ||
533 | pl->next->data[size]='\0'; | ||
534 | ret=pl->next->data; // to the last | ||
535 | *iddb=*iddb+1; | ||
536 | idf++; | ||
537 | pl=pl->next; | ||
538 | //pl->next->data=ret; | ||
539 | }; | ||
540 | return ret; | ||
541 | } | ||
542 | |||
543 | /* | ||
544 | * Function for MultiPart formdata | ||
545 | */ | ||
546 | struct _MultiPart __ILWS_MultiPart(struct ClientInfo *ClientInfo, char *handle) { | ||
547 | char *tmp1,*tmp2,*tmp3; | ||
548 | int i; | ||
549 | char *name; | ||
550 | size_t namesize; | ||
551 | struct _MultiPart *ml=ClientInfo->MultiPartList; | ||
552 | struct _MultiPart defret={"","",0,""}; | ||
553 | size_t strsize; | ||
554 | char *boundary; size_t boundarysize; | ||
555 | // IE C43o6Fn6Et74e65n6Et74-2DT54y79p70e65:3A 20m6Du75l6Ct74i69p70a61r72t74/2Ff66o6Fr72m6D-2Dd64a61t74a61 | ||
556 | // NS C43o6Fn6Et74e65n6Et74-2Dt74y79p70e65:3A 20m6Du75l6Ct74i69p70a61r72t74/2Ff66o6Fr72m6D-2Dd64a61t74a61 | ||
557 | tmp1=__ILWS_stristr(current_web_client->rbuf,"Content-type: multipart/form-data"); | ||
558 | if(tmp1==NULL) return defret; | ||
559 | if(ClientInfo->MultiPartList==NULL) { | ||
560 | ClientInfo->MultiPartList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart)); | ||
561 | if(ClientInfo->MultiPartList==NULL) { | ||
562 | return defret; | ||
563 | }; | ||
564 | ClientInfo->MultiPartList->next=NULL; | ||
565 | ClientInfo->MultiPartList->id=NULL; | ||
566 | ClientInfo->MultiPartList->data=NULL; | ||
567 | ClientInfo->MultiPartList->filename=NULL; | ||
568 | ClientInfo->MultiPartList->size=0; | ||
569 | ml=ClientInfo->MultiPartList; | ||
570 | }; | ||
571 | // Check if handle exists | ||
572 | while(ml->next!=NULL) { | ||
573 | if(ml->next->id!=NULL) { | ||
574 | if(!strcmp(ml->next->id,handle)) { | ||
575 | |||
576 | return *ml->next; | ||
577 | }; | ||
578 | }; | ||
579 | ml=ml->next; | ||
580 | }; | ||
581 | |||
582 | |||
583 | strsize=strlen(handle); | ||
584 | ml->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart)); | ||
585 | if(ml->next==NULL) { | ||
586 | return defret; | ||
587 | }; | ||
588 | ml->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1); | ||
589 | if(ml->next->id==NULL) { | ||
590 | return defret; | ||
591 | }; | ||
592 | memcpy(ml->next->id,handle,strsize); | ||
593 | ml->next->id[strsize]=0; | ||
594 | ml->next->data=""; | ||
595 | ml->next->filename=""; | ||
596 | ml->next->size=0; | ||
597 | ml->next->next=NULL; | ||
598 | |||
599 | tmp1=strstr(tmp1,"boundary="); | ||
600 | if(tmp1==NULL) return defret; | ||
601 | tmp1+=9; | ||
602 | tmp2=strstr(tmp1,"\r\n"); | ||
603 | if(tmp2<tmp1 || tmp2==NULL) return defret; | ||
604 | /* boundary */ | ||
605 | boundarysize=tmp2-tmp1; | ||
606 | boundary=__ILWS_add_buffer(ClientInfo->mem,boundarysize+3); | ||
607 | if(boundary==NULL) { | ||
608 | return defret; | ||
609 | }; | ||
610 | memcpy(boundary,tmp1,boundarysize); | ||
611 | boundary[boundarysize]=0; | ||
612 | |||
613 | |||
614 | /* handle */ | ||
615 | namesize=boundarysize+41+strlen(handle); | ||
616 | name=__ILWS_add_buffer(ClientInfo->mem,namesize+1); | ||
617 | if(name==NULL) { | ||
618 | return defret; | ||
619 | }; | ||
620 | snprintf(name,namesize,"%s\r\nContent-Disposition: form-data; name=",boundary); | ||
621 | namesize=strlen(name); | ||
622 | |||
623 | tmp1=strstr(tmp1,"\r\n\r\n"); // go to data | ||
624 | if(tmp1==NULL) return defret; | ||
625 | |||
626 | do { | ||
627 | i=memcmp(tmp1,name,namesize); | ||
628 | if(i==0) { | ||
629 | tmp1+=namesize; | ||
630 | if(tmp1[0]=='\"')tmp1+=1; | ||
631 | if(strncmp(tmp1,handle,strlen(handle))){ | ||
632 | i=1; | ||
633 | }else { | ||
634 | if((tmp1[strsize]!=' ') && (tmp1[strsize]!='\"') && (tmp1[strsize]!='\r') && (tmp1[strsize]!=';') ) i=1; | ||
635 | }; | ||
636 | |||
637 | }else { | ||
638 | tmp1+=1; | ||
639 | }; | ||
640 | } while(i!=0 && (tmp1+namesize<current_web_client->rbuf+current_web_client->rbufsize)); // Search init of data | ||
641 | if(i!=0) return defret; | ||
642 | //tmp1+=namesize; | ||
643 | tmp2=strstr(tmp1,"filename="); // get filename | ||
644 | if(tmp2!=NULL) { | ||
645 | tmp2+=9; | ||
646 | if(tmp2[0]=='\"')tmp2+=1; | ||
647 | tmp3=strstr(tmp2,"\r\n"); | ||
648 | ml->next->filename=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1); | ||
649 | if(ml->next->filename==NULL) { | ||
650 | return defret; | ||
651 | }; | ||
652 | memcpy(ml->next->filename,tmp2,tmp3-tmp2); | ||
653 | ml->next->filename[tmp3-tmp2]='\0'; | ||
654 | if(ml->next->filename[tmp3-tmp2-1]=='\"') | ||
655 | ml->next->filename[tmp3-tmp2-1]='\0'; | ||
656 | |||
657 | }; | ||
658 | tmp2=strstr(tmp1,"\r\n\r\n"); // data init | ||
659 | if(tmp2==NULL)return defret; | ||
660 | tmp2+=4; | ||
661 | tmp3=tmp2; | ||
662 | do { | ||
663 | |||
664 | i=memcmp(tmp3,boundary,boundarysize); | ||
665 | if(i!=0)tmp3+=1; | ||
666 | } while(i!=0 && (tmp3+boundarysize<current_web_client->rbuf+current_web_client->rbufsize)); // End of data | ||
667 | if(i!=0) return defret; | ||
668 | tmp3-=4; // back "\r\n\r\n" | ||
669 | |||
670 | // copy data to node | ||
671 | if(!(ml->next->data=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1))) { | ||
672 | return defret; | ||
673 | }; | ||
674 | memcpy(ml->next->data,tmp2,tmp3-tmp2); | ||
675 | ml->next->data[tmp3-tmp2]='\0'; | ||
676 | ml->next->size=tmp3-tmp2; | ||
677 | |||
678 | |||
679 | |||
680 | |||
681 | return *ml->next; | ||
682 | |||
683 | }; | ||
684 | |||
685 | /* | ||
686 | * Function for CookieData | ||
687 | */ | ||
688 | char *__ILWS_Cookie(struct ClientInfo *ClientInfo, char *handle) { | ||
689 | char *defret=""; | ||
690 | char *tmp1,*tmp2,*ret; | ||
691 | int size; | ||
692 | int strsize; | ||
693 | struct _Cookie *cl=ClientInfo->CookieList; | ||
694 | |||
695 | |||
696 | tmp1=strstr(current_web_client->rbuf,"\nCookie: "); // start of cookie string | ||
697 | if(tmp1==NULL) { // no cookies | ||
698 | return defret; | ||
699 | }; | ||
700 | tmp1+=8; | ||
701 | if(handle==NULL) { | ||
702 | return ClientInfo->CookieString; | ||
703 | }; | ||
704 | |||
705 | if(ClientInfo->CookieList==NULL) { | ||
706 | |||
707 | ClientInfo->CookieList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie)); | ||
708 | if(ClientInfo->CookieList==NULL) { | ||
709 | return defret; | ||
710 | }; | ||
711 | ClientInfo->CookieList->next=NULL; | ||
712 | ClientInfo->CookieList->data=NULL; | ||
713 | ClientInfo->CookieList->id=NULL; | ||
714 | cl=ClientInfo->CookieList; | ||
715 | } | ||
716 | // First search if exists | ||
717 | while(cl->next!=NULL) { | ||
718 | if(cl->next->id!=NULL) { | ||
719 | if(!strcmp(cl->next->id,handle)) { | ||
720 | |||
721 | return cl->next->data; | ||
722 | }; | ||
723 | }; | ||
724 | cl=cl->next; | ||
725 | }; | ||
726 | |||
727 | strsize=strlen(handle); | ||
728 | if(!(cl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Cookie)))) { | ||
729 | return defret; | ||
730 | }; | ||
731 | if(!(cl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) { | ||
732 | return defret; | ||
733 | }; | ||
734 | memcpy(cl->next->id,handle,strsize); | ||
735 | cl->next->id[strsize]=0; | ||
736 | cl->next->data=defret; | ||
737 | cl->next->next=NULL; | ||
738 | do { | ||
739 | tmp2=strstr(tmp1,handle); | ||
740 | if(tmp2==NULL) { | ||
741 | return defret; | ||
742 | }else if(tmp2[strsize]==';' && tmp2[-1]==' ') { | ||
743 | cl->next->data=__ILWS_add_buffer(ClientInfo->mem,6); | ||
744 | snprintf(cl->next->data,5,"True"); | ||
745 | return cl->next->data; | ||
746 | }; | ||
747 | tmp1=tmp2+strsize; | ||
748 | }while(tmp2[-1]!=' ' || tmp2[strsize]!='='); | ||
749 | |||
750 | tmp1=strstr(tmp2,";"); // end of data | ||
751 | tmp2+=strsize+1; // start of data | ||
752 | if(tmp1==NULL) { | ||
753 | size=strstr(tmp2,"\r")-tmp2; | ||
754 | |||
755 | } else { | ||
756 | size=tmp1-tmp2; | ||
757 | }; | ||
758 | if(size<1) { | ||
759 | return defret; | ||
760 | }; | ||
761 | |||
762 | ret=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
763 | if(ret==NULL) { | ||
764 | return defret; | ||
765 | }; | ||
766 | |||
767 | memcpy(ret,tmp2,size); | ||
768 | ret[size]='\0'; | ||
769 | cl->next->data=ret; | ||
770 | return cl->next->data; | ||
771 | }; | ||
772 | |||
773 | /* | ||
774 | * get whole query string | ||
775 | */ | ||
776 | char *__ILWS_clientinfo_getquerystring(struct ClientInfo *ClientInfo) { | ||
777 | char *tmp1,*tmp2,*ret; | ||
778 | char *defret=""; | ||
779 | size_t size; | ||
780 | tmp1=strstr(current_web_client->rbuf,"?"); | ||
781 | tmp2=strstr(current_web_client->rbuf,"HTTP"); | ||
782 | if(tmp1!=NULL && tmp1<tmp2) | ||
783 | tmp1+=1; | ||
784 | else | ||
785 | return defret; | ||
786 | size=(tmp2-tmp1)-1; | ||
787 | ret=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
788 | if(ret==NULL) { | ||
789 | return defret; | ||
790 | }; | ||
791 | memcpy(ret,tmp1,size); | ||
792 | ret[size]=0; | ||
793 | return ret; | ||
794 | }; | ||
795 | |||
796 | /* | ||
797 | * get whole post data | ||
798 | */ | ||
799 | char *__ILWS_clientinfo_getpostdata(struct ClientInfo *ClientInfo) { | ||
800 | char *tmp1,*ret; | ||
801 | char *defret=""; | ||
802 | size_t size; | ||
803 | tmp1=strstr(current_web_client->rbuf,"\r\n\r\n"); | ||
804 | if(tmp1!=NULL && (tmp1+4)<(char*)(current_web_client->rbuf+current_web_client->rbufsize)) | ||
805 | tmp1+=4; | ||
806 | else | ||
807 | return defret; | ||
808 | size=(current_web_client->rbuf+current_web_client->rbufsize)-tmp1; | ||
809 | ret=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
810 | if(ret==NULL) { | ||
811 | return defret; | ||
812 | }; | ||
813 | memcpy(ret,tmp1,size); | ||
814 | ret[size]='\0'; | ||
815 | return ret; | ||
816 | } | ||
817 | |||
818 | /* | ||
819 | * get method (GET POST HEAD etc) | ||
820 | */ | ||
821 | char *__ILWS_clientinfo_getmethod(struct ClientInfo *ClientInfo) { | ||
822 | char *tmp1,*ret; | ||
823 | char *defret=""; | ||
824 | size_t size; | ||
825 | tmp1=strstr(current_web_client->rbuf," "); // first space | ||
826 | if(tmp1==NULL) { | ||
827 | return defret; | ||
828 | }; | ||
829 | size=tmp1-current_web_client->rbuf; | ||
830 | ret=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
831 | if(ret==NULL) { | ||
832 | return defret; | ||
833 | }; | ||
834 | memcpy(ret,current_web_client->rbuf,size); | ||
835 | ret[size]=0; | ||
836 | return ret; | ||
837 | } | ||
838 | |||
839 | /* | ||
840 | * get request name (GET /taltal HTTP/1.0) returning /taltal | ||
841 | */ | ||
842 | char *__ILWS_clientinfo_getreqname(struct ClientInfo *ClientInfo) { | ||
843 | char *ret; | ||
844 | char *tmp1=strstr(current_web_client->rbuf,"/"); // Must have / | ||
845 | char *tmp2=strstr(tmp1,"?"); | ||
846 | char *tmp3=strstr(tmp1," HTTP"); | ||
847 | char *defret=""; | ||
848 | size_t i,j; | ||
849 | int ch; | ||
850 | size_t size=0; | ||
851 | if(tmp1==NULL || tmp3==NULL) return defret; | ||
852 | if(tmp2==NULL || tmp2>tmp3) { | ||
853 | tmp2=tmp3; | ||
854 | }; | ||
855 | //tmp1+=1; | ||
856 | size=tmp2-tmp1; | ||
857 | if(size<1) | ||
858 | return defret; | ||
859 | ret=__ILWS_add_buffer(ClientInfo->mem,size+1); | ||
860 | if(ret==NULL) { | ||
861 | return defret; | ||
862 | }; | ||
863 | j=0; | ||
864 | for(i=0;i<size;i++) { // hex translation here | ||
865 | switch (ch=tmp1[j]) { | ||
866 | case '+': | ||
867 | ch=' '; | ||
868 | break; | ||
869 | case '%': | ||
870 | |||
871 | tmp2=__ILWS_malloc(3); | ||
872 | if(tmp2==NULL) { | ||
873 | return defret; | ||
874 | }; | ||
875 | strncpy(tmp2,&tmp1[j+1],2); | ||
876 | tmp2[2]=0; | ||
877 | |||
878 | ch=strtol(tmp2,NULL,16); | ||
879 | j+=2; | ||
880 | size-=2; | ||
881 | __ILWS_free(tmp2); | ||
882 | break; | ||
883 | }; | ||
884 | ret[i]=ch; | ||
885 | j++; | ||
886 | }; | ||
887 | //pl->next->data[size]='\0'; | ||
888 | //memcpy(ret,tmp1,size); | ||
889 | ret[size]=0; | ||
890 | return ret; | ||
891 | } | ||
892 | |||
893 | |||
diff --git a/src/clientinfo.h b/src/clientinfo.h deleted file mode 100644 index c3315bbd..00000000 --- a/src/clientinfo.h +++ /dev/null | |||
@@ -1,103 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Wed Oct 9 19:05:48 GMT 2002 | ||
10 | * | ||
11 | * | ||
12 | * -- | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef _CLIENTINFO_H_ | ||
17 | #define _CLIENTINFO_H_ | ||
18 | |||
19 | #include <stdio.h> | ||
20 | #include <fcntl.h> | ||
21 | #include <string.h> | ||
22 | #include "client.h" | ||
23 | #include "utils.h" | ||
24 | #include "memory.h" | ||
25 | |||
26 | /* | ||
27 | * Next's structs are redudant but it is an case of logic (spell) | ||
28 | */ | ||
29 | struct _Header { | ||
30 | char *id; | ||
31 | char *data; | ||
32 | struct _Header *next; | ||
33 | }; | ||
34 | struct _Query { | ||
35 | unsigned int index; | ||
36 | unsigned int idf; | ||
37 | char *id; | ||
38 | char *data; | ||
39 | struct _Query *next; | ||
40 | }; | ||
41 | struct _Post { | ||
42 | unsigned int index; | ||
43 | unsigned int idf; | ||
44 | char *id; | ||
45 | char *data; | ||
46 | struct _Post *next; | ||
47 | }; | ||
48 | |||
49 | struct _MultiPart { | ||
50 | char *id; | ||
51 | char *data; | ||
52 | unsigned int size; | ||
53 | char *filename; | ||
54 | struct _MultiPart *next; | ||
55 | }; | ||
56 | |||
57 | struct _Cookie { | ||
58 | char *id; | ||
59 | char *data; | ||
60 | struct _Cookie *next; | ||
61 | }; | ||
62 | |||
63 | struct ClientInfo { | ||
64 | int outfd; | ||
65 | char *inetname; | ||
66 | char *request; | ||
67 | char *method; | ||
68 | char *user; | ||
69 | char *pass; | ||
70 | |||
71 | char *(*Header)(char *); | ||
72 | char *(*Query)(char *); | ||
73 | char *(*Post)(char *); | ||
74 | char *(*Cookie)(char *); // TODO | ||
75 | struct _MultiPart (*MultiPart)(char *); | ||
76 | // not necessary for web_server.h | ||
77 | char *QueryString; | ||
78 | char *CookieString; | ||
79 | char *PostData; | ||
80 | struct memrequest *mem; | ||
81 | struct _Header *HeaderList; // Not necessary for web_server.h | ||
82 | struct _Query *QueryList; // Not necessary for web_server.h | ||
83 | struct _Post *PostList; // Not necessary for web_server.h | ||
84 | struct _MultiPart *MultiPartList; // Not necessary for web_server.h | ||
85 | struct _Cookie *CookieList; // Not necessary for web_server.h | ||
86 | }; | ||
87 | |||
88 | |||
89 | void __ILWS_init_clientinfo(struct ClientInfo *ClientInfo); | ||
90 | void __ILWS_free_clientinfo(struct ClientInfo *ClientInfo); | ||
91 | char *__ILWS_clientinfo_getquerystring(struct ClientInfo *ClientInfo); | ||
92 | char *__ILWS_clientinfo_getpostdata(struct ClientInfo *ClientInfo); | ||
93 | char *__ILWS_clientinfo_getcookiestring(struct ClientInfo *ClientInfo); | ||
94 | char *__ILWS_clientinfo_getmethod(struct ClientInfo *ClientInfo); | ||
95 | char *__ILWS_clientinfo_getreqname(struct ClientInfo *ClientInfo); | ||
96 | char *__ILWS_Header(struct ClientInfo *ClientInfo, char *); | ||
97 | char *__ILWS_Query(struct ClientInfo *ClientInfo, char *); | ||
98 | char *__ILWS_Post(struct ClientInfo *ClientInfo, char *); | ||
99 | struct _MultiPart __ILWS_MultiPart(struct ClientInfo *ClientInfo, char *); | ||
100 | char *__ILWS_Cookie(struct ClientInfo *ClientInfo, char *); | ||
101 | |||
102 | #endif | ||
103 | |||
diff --git a/src/fnmatch.c b/src/fnmatch.c deleted file mode 100644 index f2b6f6d4..00000000 --- a/src/fnmatch.c +++ /dev/null | |||
@@ -1,195 +0,0 @@ | |||
1 | /* | ||
2 | * Luis Figueiredo - why remake the wheel, this functions feets perfectly | ||
3 | * and the credits still here :) | ||
4 | */ | ||
5 | |||
6 | /* | ||
7 | * Copyright (c) 1989, 1993, 1994 | ||
8 | * The Regents of the University of California. All rights reserved. | ||
9 | * | ||
10 | * This code is derived from software contributed to Berkeley by | ||
11 | * Guido van Rossum. | ||
12 | * | ||
13 | * Redistribution and use in source and binary forms, with or without | ||
14 | * modification, are permitted provided that the following conditions | ||
15 | * are met: | ||
16 | * 1. Redistributions of source code must retain the above copyright | ||
17 | * notice, this list of conditions and the following disclaimer. | ||
18 | * 2. Redistributions in binary form must reproduce the above copyright | ||
19 | * notice, this list of conditions and the following disclaimer in the | ||
20 | * documentation and/or other materials provided with the distribution. | ||
21 | * 3. All advertising materials mentioning features or use of this software | ||
22 | * must display the following acknowledgement: | ||
23 | * This product includes software developed by the University of | ||
24 | * California, Berkeley and its contributors. | ||
25 | * 4. Neither the name of the University nor the names of its contributors | ||
26 | * may be used to endorse or promote products derived from this software | ||
27 | * without specific prior written permission. | ||
28 | * | ||
29 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||
30 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
31 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
32 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||
33 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
34 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
35 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
36 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
37 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
38 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
39 | * SUCH DAMAGE. | ||
40 | */ | ||
41 | |||
42 | #if defined(LIBC_SCCS) && !defined(lint) | ||
43 | static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94"; | ||
44 | #endif /* LIBC_SCCS and not lint */ | ||
45 | |||
46 | /* | ||
47 | * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6. | ||
48 | * Compares a filename or pathname to a pattern. | ||
49 | */ | ||
50 | |||
51 | #include "fnmatch.h" | ||
52 | #include <string.h> | ||
53 | |||
54 | #define EOS '\0' | ||
55 | |||
56 | static const char *rangematch(const char *, int, int); | ||
57 | |||
58 | int fnmatch(const char *pattern, const char *string, int flags) { | ||
59 | const char *stringstart; | ||
60 | char c, test; | ||
61 | |||
62 | for (stringstart = string;;) { | ||
63 | switch (c = *pattern++) { | ||
64 | case EOS: | ||
65 | return (*string == EOS ? 0 : FNM_NOMATCH); | ||
66 | case '?': | ||
67 | if (*string == EOS) { | ||
68 | return (FNM_NOMATCH); | ||
69 | } | ||
70 | if (*string == '/' && (flags & FNM_PATHNAME)) { | ||
71 | return (FNM_NOMATCH); | ||
72 | } | ||
73 | if (*string == '.' && (flags & FNM_PERIOD) && | ||
74 | (string == stringstart || | ||
75 | ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) { | ||
76 | return (FNM_NOMATCH); | ||
77 | } | ||
78 | ++string; | ||
79 | break; | ||
80 | case '*': | ||
81 | c = *pattern; | ||
82 | /* Collapse multiple stars. */ | ||
83 | while (c == '*') { | ||
84 | c = *++pattern; | ||
85 | } | ||
86 | |||
87 | if (*string == '.' && (flags & FNM_PERIOD) && | ||
88 | (string == stringstart || | ||
89 | ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) { | ||
90 | return (FNM_NOMATCH); | ||
91 | } | ||
92 | |||
93 | /* Optimize for pattern with * at end or before /. */ | ||
94 | if (c == EOS) { | ||
95 | if (flags & FNM_PATHNAME) { | ||
96 | return (strchr(string, '/') == NULL ? 0 : FNM_NOMATCH); | ||
97 | } | ||
98 | else { | ||
99 | return (0); | ||
100 | } | ||
101 | } | ||
102 | else if (c == '/' && flags & FNM_PATHNAME) { | ||
103 | if ((string = strchr(string, '/')) == NULL) { | ||
104 | return (FNM_NOMATCH); | ||
105 | } | ||
106 | break; | ||
107 | } | ||
108 | |||
109 | /* General case, use recursion. */ | ||
110 | while ((test = *string) != EOS) { | ||
111 | if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) { | ||
112 | return (0); | ||
113 | } | ||
114 | if (test == '/' && flags & FNM_PATHNAME) { | ||
115 | break; | ||
116 | } | ||
117 | ++string; | ||
118 | } | ||
119 | return (FNM_NOMATCH); | ||
120 | case '[': | ||
121 | if (*string == EOS) { | ||
122 | return (FNM_NOMATCH); | ||
123 | } | ||
124 | if (*string == '/' && flags & FNM_PATHNAME) { | ||
125 | return (FNM_NOMATCH); | ||
126 | } | ||
127 | if (*string == '.' && (flags & FNM_PERIOD) && | ||
128 | (string == stringstart || | ||
129 | ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) { | ||
130 | return (FNM_NOMATCH); | ||
131 | } | ||
132 | if ((pattern = rangematch(pattern, *string, flags)) == NULL) { | ||
133 | return (FNM_NOMATCH); | ||
134 | } | ||
135 | ++string; | ||
136 | break; | ||
137 | case '\\': | ||
138 | if (!(flags & FNM_NOESCAPE)) { | ||
139 | if ((c = *pattern++) == EOS) { | ||
140 | c = '\\'; | ||
141 | --pattern; | ||
142 | } | ||
143 | } | ||
144 | /* FALLTHROUGH */ | ||
145 | default: | ||
146 | if (c != *string) { | ||
147 | return (FNM_NOMATCH); | ||
148 | } | ||
149 | string++; | ||
150 | break; | ||
151 | } | ||
152 | /* NOTREACHED */ | ||
153 | } | ||
154 | } | ||
155 | |||
156 | static const char *rangematch(const char *pattern, int test, int flags) { | ||
157 | int negate, ok; | ||
158 | char c, c2; | ||
159 | |||
160 | /* | ||
161 | * A bracket expression starting with an unquoted circumflex | ||
162 | * character produces unspecified results (IEEE 1003.2-1992, | ||
163 | * 3.13.2). This implementation treats it like '!', for | ||
164 | * consistency with the regular expression syntax. | ||
165 | * J.T. Conklin (conklin@ngai.kaleida.com) | ||
166 | */ | ||
167 | if ((negate = (*pattern == '!' || *pattern == '^'))) { | ||
168 | ++pattern; | ||
169 | } | ||
170 | |||
171 | for (ok = 0; (c = *pattern++) != ']';) { | ||
172 | if (c == '\\' && !(flags & FNM_NOESCAPE)) { | ||
173 | c = *pattern++; | ||
174 | } | ||
175 | if (c == EOS) { | ||
176 | return (NULL); | ||
177 | } | ||
178 | if (*pattern == '-' && (c2 = *(pattern + 1)) != EOS && c2 != ']') { | ||
179 | pattern += 2; | ||
180 | if (c2 == '\\' && !(flags & FNM_NOESCAPE)) { | ||
181 | c2 = *pattern++; | ||
182 | } | ||
183 | if (c2 == EOS) { | ||
184 | return (NULL); | ||
185 | } | ||
186 | if ((c <= test && test <= c2)) { | ||
187 | ok = 1; | ||
188 | } | ||
189 | } | ||
190 | else if ((c == test)) { | ||
191 | ok = 1; | ||
192 | } | ||
193 | } | ||
194 | return (ok == negate ? NULL : pattern); | ||
195 | } | ||
diff --git a/src/fnmatch.h b/src/fnmatch.h deleted file mode 100644 index 1b0f3fc9..00000000 --- a/src/fnmatch.h +++ /dev/null | |||
@@ -1,59 +0,0 @@ | |||
1 | /*- | ||
2 | * Copyright (c) 1992, 1993 | ||
3 | * The Regents of the University of California. All rights reserved. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions | ||
7 | * are met: | ||
8 | * 1. Redistributions of source code must retain the above copyright | ||
9 | * notice, this list of conditions and the following disclaimer. | ||
10 | * 2. Redistributions in binary form must reproduce the above copyright | ||
11 | * notice, this list of conditions and the following disclaimer in the | ||
12 | * documentation and/or other materials provided with the distribution. | ||
13 | * 3. All advertising materials mentioning features or use of this software | ||
14 | * must display the following acknowledgement: | ||
15 | * This product includes software developed by the University of | ||
16 | * California, Berkeley and its contributors. | ||
17 | * 4. Neither the name of the University nor the names of its contributors | ||
18 | * may be used to endorse or promote products derived from this software | ||
19 | * without specific prior written permission. | ||
20 | * | ||
21 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||
22 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
23 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
24 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||
25 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
26 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
27 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
29 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
30 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
31 | * SUCH DAMAGE. | ||
32 | * | ||
33 | * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93 | ||
34 | */ | ||
35 | |||
36 | /* This file has been modified by the Apache Group. */ | ||
37 | |||
38 | #ifndef _FNMATCH_H_ | ||
39 | #define _FNMATCH_H_ | ||
40 | |||
41 | #ifdef __cplusplus | ||
42 | extern "C" { | ||
43 | #endif | ||
44 | |||
45 | #define FNM_NOMATCH 1 /* Match failed. */ | ||
46 | |||
47 | #define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */ | ||
48 | #define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */ | ||
49 | #define FNM_PERIOD 0x04 /* Period must be matched by period. */ | ||
50 | /* This flag is an Apache addition */ | ||
51 | #define FNM_CASE_BLIND 0x08 /* Compare characters case-insensitively. */ | ||
52 | |||
53 | int fnmatch(const char *, const char *, int); | ||
54 | |||
55 | #ifdef __cplusplus | ||
56 | } | ||
57 | #endif | ||
58 | |||
59 | #endif /* !_FNMATCH_H_ */ | ||
diff --git a/src/memory.c b/src/memory.c deleted file mode 100644 index ca7e6f51..00000000 --- a/src/memory.c +++ /dev/null | |||
@@ -1,85 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:25:25 GMT 2002 | ||
10 | * | ||
11 | * -- memory functions | ||
12 | */ | ||
13 | #include "memory.h" | ||
14 | |||
15 | struct memrequest { | ||
16 | char *ptr; | ||
17 | struct memrequest *next; | ||
18 | }; | ||
19 | |||
20 | /* | ||
21 | * Add a buffer to memrequest list | ||
22 | */ | ||
23 | void *__ILWS_add_buffer(struct memrequest *list,unsigned int size) { | ||
24 | struct memrequest *tmem; | ||
25 | if(size==0) { | ||
26 | return NULL; | ||
27 | }; | ||
28 | if(list!=NULL) { | ||
29 | tmem=list; | ||
30 | }else { | ||
31 | return NULL; | ||
32 | }; | ||
33 | while(tmem->next!=NULL)tmem=tmem->next; | ||
34 | tmem->next=__ILWS_malloc(sizeof(struct memrequest)); | ||
35 | if(tmem->next==NULL) return NULL; // ERROR | ||
36 | tmem->next->ptr=__ILWS_malloc(size); | ||
37 | tmem->next->next=NULL; | ||
38 | return tmem->next->ptr; | ||
39 | } | ||
40 | |||
41 | /* | ||
42 | * Initialize memrequest list of buffers | ||
43 | */ | ||
44 | struct memrequest *__ILWS_init_buffer_list() { | ||
45 | struct memrequest *newlist; | ||
46 | newlist=__ILWS_malloc(sizeof(struct memrequest)); | ||
47 | if(newlist==NULL) | ||
48 | return NULL; | ||
49 | newlist->next=NULL; | ||
50 | newlist->ptr=NULL; | ||
51 | return newlist; | ||
52 | } | ||
53 | |||
54 | /* | ||
55 | * Delete memrequest buffer node (free) | ||
56 | */ | ||
57 | void __ILWS_delete_buffer(struct memrequest *mem) { | ||
58 | __ILWS_free(mem->ptr); | ||
59 | __ILWS_free(mem); | ||
60 | } | ||
61 | |||
62 | /* | ||
63 | * Delete memrequest next buffer | ||
64 | */ | ||
65 | void __ILWS_delete_next_buffer(struct memrequest *mem) { | ||
66 | struct memrequest *tmem; | ||
67 | tmem=mem->next; | ||
68 | mem->next=mem->next->next; | ||
69 | __ILWS_delete_buffer(tmem); | ||
70 | } | ||
71 | |||
72 | /* | ||
73 | * Delete whole memrequest buffer list | ||
74 | */ | ||
75 | void __ILWS_delete_buffer_list(struct memrequest *list) { | ||
76 | struct memrequest *tmem=list; | ||
77 | if (tmem==NULL) | ||
78 | return; | ||
79 | |||
80 | while(tmem->next!=NULL) { | ||
81 | __ILWS_delete_next_buffer(tmem); | ||
82 | }; | ||
83 | __ILWS_delete_buffer(tmem); | ||
84 | } | ||
85 | |||
diff --git a/src/memory.h b/src/memory.h deleted file mode 100644 index 6e8f72f2..00000000 --- a/src/memory.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:25:25 GMT 2002 | ||
10 | * | ||
11 | * memory functions | ||
12 | */ | ||
13 | |||
14 | #ifndef _MEMORY_H_ | ||
15 | #define _MEMORY_H_ | ||
16 | |||
17 | #include <stdio.h> | ||
18 | #include <stdlib.h> | ||
19 | #include <string.h> | ||
20 | #include <errno.h> | ||
21 | |||
22 | #define __ILWS_malloc malloc | ||
23 | #define __ILWS_calloc calloc | ||
24 | #define __ILWS_realloc realloc | ||
25 | #define __ILWS_free free | ||
26 | |||
27 | struct memrequest; | ||
28 | |||
29 | struct memrequest *__ILWS_init_buffer_list(); | ||
30 | |||
31 | void *__ILWS_add_buffer(struct memrequest *, | ||
32 | unsigned int); | ||
33 | |||
34 | void __ILWS_delete_buffer(struct memrequest *); | ||
35 | |||
36 | void __ILWS_delete_next_buffer(struct memrequest *); | ||
37 | |||
38 | void __ILWS_delete_buffer_list(struct memrequest *); | ||
39 | |||
40 | #endif | ||
diff --git a/src/outstream.c b/src/outstream.c deleted file mode 100644 index 9ad33715..00000000 --- a/src/outstream.c +++ /dev/null | |||
@@ -1,118 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:25:25 GMT 2002 | ||
10 | * | ||
11 | * -- stream list functions | ||
12 | */ | ||
13 | |||
14 | |||
15 | #include "outstream.h" | ||
16 | |||
17 | /*********************************************************************************************************/ | ||
18 | /* | ||
19 | * add_outstream, add a file to output (client) stream | ||
20 | */ | ||
21 | int __ILWS_add_outstream(struct outstream *list,char *fname,FILE* stream,int istmp){ | ||
22 | struct outstream *temp=list; | ||
23 | FILE *tmp; | ||
24 | while(temp->next!=NULL)temp=temp->next; | ||
25 | |||
26 | if(!(temp->next=__ILWS_malloc(sizeof(struct outstream)))) { | ||
27 | return 0; | ||
28 | }; | ||
29 | // file check (0.5.3); | ||
30 | tmp=fopen(fname,"rb"); | ||
31 | if(tmp==NULL) { | ||
32 | __ILWS_free(temp->next); | ||
33 | temp->next=NULL; | ||
34 | return 0; | ||
35 | }; | ||
36 | fclose(tmp); | ||
37 | // -- | ||
38 | temp->next->fname=NULL; | ||
39 | if(fname!=NULL) { | ||
40 | if(!(temp->next->fname=__ILWS_malloc(strlen(fname)+1))) { | ||
41 | __ILWS_free(temp->next); | ||
42 | temp->next=NULL; | ||
43 | return 0; | ||
44 | }; | ||
45 | memcpy(temp->next->fname,fname,strlen(fname)); | ||
46 | temp->next->fname[strlen(fname)]='\0'; | ||
47 | }; | ||
48 | temp->next->todelete=istmp; | ||
49 | temp->next->fstream=stream; | ||
50 | temp->next->wsize=1; | ||
51 | temp->next->rsize=0; | ||
52 | temp->next->wrotesize=0; | ||
53 | temp->next->varsize=0; | ||
54 | temp->next->next=NULL; | ||
55 | return 1; | ||
56 | } | ||
57 | |||
58 | /*********************************************************************************************************/ | ||
59 | /* | ||
60 | * Initializate (allocate) outstream list | ||
61 | */ | ||
62 | struct outstream *__ILWS_init_outstream_list() { | ||
63 | struct outstream *ret; | ||
64 | |||
65 | |||
66 | if(!(ret=__ILWS_malloc(sizeof(struct outstream)))) { | ||
67 | return NULL; | ||
68 | }; | ||
69 | ret->todelete=0; | ||
70 | ret->fname=NULL; | ||
71 | ret->flags=0; | ||
72 | ret->fstream=NULL; | ||
73 | ret->next=NULL; | ||
74 | return ret; | ||
75 | } | ||
76 | |||
77 | /*********************************************************************************************************/ | ||
78 | /* | ||
79 | * Delete a especific node | ||
80 | */ | ||
81 | void __ILWS_delete_outstream(struct outstream *node) { // Changed | ||
82 | int rt; | ||
83 | if(node->fstream!=NULL)fclose(node->fstream); // better here; | ||
84 | if(node->todelete) { // is temporary file | ||
85 | rt=unlink(node->fname); | ||
86 | if(rt==-1) { | ||
87 | }; | ||
88 | |||
89 | }; | ||
90 | if(node->fname!=NULL)__ILWS_free(node->fname); | ||
91 | __ILWS_free(node); | ||
92 | } | ||
93 | |||
94 | /*********************************************************************************************************/ | ||
95 | /* | ||
96 | * delete next node | ||
97 | */ | ||
98 | void __ILWS_delete_next_outstream(struct outstream *node) { | ||
99 | struct outstream *temp=node->next; | ||
100 | node->next=node->next->next; | ||
101 | __ILWS_delete_outstream(temp); | ||
102 | } | ||
103 | |||
104 | /*********************************************************************************************************/ | ||
105 | /* | ||
106 | * delete all nodes on the list (reset list) | ||
107 | */ | ||
108 | void __ILWS_delete_outstream_list(struct outstream *list) { | ||
109 | struct outstream *temp=list; | ||
110 | while(temp->next!=NULL) { | ||
111 | |||
112 | __ILWS_delete_next_outstream(temp); | ||
113 | }; | ||
114 | |||
115 | __ILWS_delete_outstream(temp); | ||
116 | |||
117 | } | ||
118 | |||
diff --git a/src/outstream.h b/src/outstream.h deleted file mode 100644 index 8ef92c4f..00000000 --- a/src/outstream.h +++ /dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:25:25 GMT 2002 | ||
10 | * | ||
11 | * stream functions | ||
12 | */ | ||
13 | |||
14 | #ifndef _OUTSTREAM_H_ | ||
15 | #define _OUTSTREAM_H_ | ||
16 | |||
17 | #ifdef HAVE_CONFIG_H | ||
18 | #include "config.h" | ||
19 | #endif | ||
20 | |||
21 | #include <stdio.h> | ||
22 | #include <stdlib.h> | ||
23 | #include <string.h> | ||
24 | |||
25 | #ifndef WIN32 | ||
26 | #include <unistd.h> | ||
27 | #endif | ||
28 | |||
29 | #include "memory.h" | ||
30 | |||
31 | struct outstream { | ||
32 | FILE *fstream; | ||
33 | char *fname; | ||
34 | int todelete; | ||
35 | int wsize,rsize; | ||
36 | long wrotesize; | ||
37 | long varsize; | ||
38 | int flags; | ||
39 | struct outstream *next; | ||
40 | }; | ||
41 | |||
42 | int __ILWS_add_outstream(struct outstream *, char *,FILE *,int); | ||
43 | struct outstream *__ILWS_init_outstream_list(); | ||
44 | void __ILWS_delete_next_outstream(struct outstream *); | ||
45 | void __ILWS_delete_outstream_list(struct outstream *); | ||
46 | void __ILWS_delete_outstream(struct outstream *); | ||
47 | #endif | ||
diff --git a/src/server.c b/src/server.c deleted file mode 100644 index d028330b..00000000 --- a/src/server.c +++ /dev/null | |||
@@ -1,279 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:44:42 GMT 2002 | ||
10 | * | ||
11 | * -- core server functions | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include "webserver_gnunet.h" | ||
16 | #include <stdio.h> | ||
17 | #include <signal.h> | ||
18 | #include <time.h> | ||
19 | |||
20 | #include "memory.h" | ||
21 | #include "client.h" | ||
22 | #include "socket.h" | ||
23 | |||
24 | #ifdef WIN32 | ||
25 | #define SHUT_RDWR SD_BOTH | ||
26 | #endif | ||
27 | |||
28 | struct web_server { | ||
29 | int socket; | ||
30 | unsigned int port; | ||
31 | struct gethandler * gethandler; | ||
32 | struct web_client *client; | ||
33 | }; | ||
34 | |||
35 | |||
36 | /* | ||
37 | * initializate (allocate) handler list | ||
38 | */ | ||
39 | struct gethandler *__ILWS_init_handler_list() { | ||
40 | struct gethandler *ret; | ||
41 | |||
42 | ret = __ILWS_malloc(sizeof(struct gethandler)); | ||
43 | if (ret==NULL) | ||
44 | return NULL; | ||
45 | ret->next = NULL; | ||
46 | ret->func = NULL; | ||
47 | ret->ctx = NULL; | ||
48 | ret->str = NULL; | ||
49 | return ret; | ||
50 | } | ||
51 | |||
52 | /* | ||
53 | * add an handler to list | ||
54 | */ | ||
55 | static int __ILWS_add_handler(struct gethandler * head, | ||
56 | const char * mstr, | ||
57 | void (*func)(), | ||
58 | void * ctx) { | ||
59 | struct gethandler * temp = head; | ||
60 | while (temp->next != NULL) | ||
61 | temp = temp->next; | ||
62 | |||
63 | temp->next = __ILWS_malloc(sizeof(struct gethandler)); | ||
64 | if (temp->next==NULL) | ||
65 | return 0; | ||
66 | temp = temp->next; | ||
67 | temp->str=__ILWS_malloc(strlen(mstr)+1); | ||
68 | if (temp->str==NULL) { | ||
69 | __ILWS_free(temp); | ||
70 | return 0; | ||
71 | }; | ||
72 | memcpy(temp->str, | ||
73 | mstr, | ||
74 | strlen(mstr) + 1); | ||
75 | temp->func = func; | ||
76 | temp->ctx = ctx; | ||
77 | temp->next = NULL; | ||
78 | return 1; | ||
79 | } | ||
80 | |||
81 | /* | ||
82 | * Deletes the entire handler list including the head | ||
83 | */ | ||
84 | static void __ILWS_delete_handler_list(struct gethandler * handler) { | ||
85 | struct gethandler * next; | ||
86 | |||
87 | while (handler) { | ||
88 | next = handler->next; | ||
89 | if (handler->str != NULL) | ||
90 | __ILWS_free(handler->str); | ||
91 | __ILWS_free(handler); | ||
92 | handler = next; | ||
93 | } | ||
94 | } | ||
95 | |||
96 | /* | ||
97 | * to add a listen socket | ||
98 | */ | ||
99 | static int __ILWS_listensocket(short port, | ||
100 | int saddr) { | ||
101 | struct sockaddr_in sa; | ||
102 | int ret; | ||
103 | int sockopt=1; | ||
104 | |||
105 | sa.sin_addr.s_addr=saddr; | ||
106 | sa.sin_port=htons((short)port); | ||
107 | sa.sin_family=AF_INET; | ||
108 | ret=socket(AF_INET,SOCK_STREAM,6); // tcp | ||
109 | if(ret==-1) | ||
110 | return -1; | ||
111 | |||
112 | setsockopt(ret, | ||
113 | SOL_SOCKET, | ||
114 | SO_REUSEADDR, | ||
115 | (char *)&sockopt, | ||
116 | sizeof(sockopt)); | ||
117 | |||
118 | if (bind(ret, | ||
119 | (struct sockaddr *)&sa, | ||
120 | sizeof(sa))==-1) { | ||
121 | close(ret); | ||
122 | return -1; | ||
123 | } | ||
124 | |||
125 | if (listen(ret,512)==-1) { // 512 backlog | ||
126 | close(ret); | ||
127 | return -1; | ||
128 | } | ||
129 | return ret; | ||
130 | } | ||
131 | |||
132 | |||
133 | /* | ||
134 | * Add an handler to request data | ||
135 | */ | ||
136 | int web_server_addhandler(struct web_server *server, | ||
137 | const char *mstr, | ||
138 | void (*func)(), | ||
139 | void * hctx) { | ||
140 | return __ILWS_add_handler(server->gethandler, | ||
141 | mstr, | ||
142 | func, | ||
143 | hctx); | ||
144 | } | ||
145 | |||
146 | /* | ||
147 | * This function initialize one web_server handler | ||
148 | */ | ||
149 | int web_server_init(struct web_server *server, | ||
150 | int port, | ||
151 | int flags) { | ||
152 | #ifdef WIN32 | ||
153 | unsigned long t=IOC_INOUT; | ||
154 | WSADATA WSAinfo; | ||
155 | WSAStartup(2,&WSAinfo); // Damn w32 sockets | ||
156 | #endif | ||
157 | server->port=port; | ||
158 | // Create a listen socket port 'port' and listen addr (0) (all interfaces) | ||
159 | server->socket=__ILWS_listensocket((short)server->port,0); | ||
160 | if (server->socket==-1) { | ||
161 | #ifdef WIN32 | ||
162 | WSACleanup(); | ||
163 | #endif | ||
164 | return 0; | ||
165 | }; | ||
166 | #ifdef WIN32 | ||
167 | ioctlsocket(server->socket, | ||
168 | FIONBIO, | ||
169 | &t); //non blocking sockets for win32 | ||
170 | #else | ||
171 | fcntl(server->socket, | ||
172 | F_SETFL, | ||
173 | O_NONBLOCK); | ||
174 | #endif | ||
175 | |||
176 | // Setup Flags | ||
177 | server->client = __ILWS_init_client_list(); | ||
178 | server->gethandler = __ILWS_init_handler_list(); | ||
179 | |||
180 | #ifndef WIN32 | ||
181 | signal(SIGPIPE, SIG_IGN); | ||
182 | #endif | ||
183 | return 1; | ||
184 | } | ||
185 | |||
186 | /* | ||
187 | * This function shuts down a running web server, frees its allocated memory, | ||
188 | * and closes its socket. If called on a struct web_server that has already | ||
189 | * been shut down, this is a noop. | ||
190 | */ | ||
191 | void web_server_shutdown(struct web_server * server) { | ||
192 | // free and close things in opposite order of web_server_init | ||
193 | __ILWS_delete_handler_list(server->gethandler); | ||
194 | server->gethandler = NULL; | ||
195 | __ILWS_delete_client_list(server->client); | ||
196 | server->client = NULL; | ||
197 | if(server->socket > 0) { | ||
198 | #ifdef WIN32 | ||
199 | closesocket(server->socket); | ||
200 | #else | ||
201 | close(server->socket); | ||
202 | #endif | ||
203 | server->socket = -1; | ||
204 | } | ||
205 | #ifdef WIN32 | ||
206 | WSACleanup(); | ||
207 | #endif | ||
208 | } | ||
209 | |||
210 | /* | ||
211 | * Core function, return 2 if no client to process, 1 if some client processed, 0 if error | ||
212 | */ | ||
213 | int web_server_run(struct web_server *server) { | ||
214 | struct web_client * client; | ||
215 | struct web_client * pos; | ||
216 | int rt; | ||
217 | size_t tsalen=0; | ||
218 | int tsocket=0; | ||
219 | int cond; | ||
220 | struct sockaddr_in tsa; | ||
221 | |||
222 | tsalen = sizeof(client->sa); | ||
223 | tsocket = accept(server->socket, | ||
224 | (struct sockaddr *)&tsa, | ||
225 | &tsalen); | ||
226 | if (tsocket == -1) { | ||
227 | #ifdef WIN32 | ||
228 | cond = WSAGetLastError() != WSAEWOULDBLOCK; | ||
229 | #else | ||
230 | cond = errno!=EAGAIN; | ||
231 | #endif | ||
232 | if (cond) { | ||
233 | // client fucked up? warn somebody? (error or log or something?) | ||
234 | return 0; | ||
235 | } | ||
236 | } else { | ||
237 | client = __ILWS_malloc(sizeof(struct web_client)); | ||
238 | if (client == NULL) { | ||
239 | rt = shutdown(tsocket, | ||
240 | SHUT_RDWR); | ||
241 | #ifdef WIN32 | ||
242 | rt=closesocket(tsocket); | ||
243 | #else | ||
244 | rt=close(tsocket); | ||
245 | #endif | ||
246 | return 0; | ||
247 | }; | ||
248 | client->salen=tsalen; | ||
249 | client->socket=tsocket; | ||
250 | client->sa=tsa; | ||
251 | if(!__ILWS_add_client(server->client,client)) | ||
252 | return 0; | ||
253 | }; | ||
254 | // end search for client | ||
255 | client = server->client; // init list | ||
256 | if(!client->next) { // think of Rocco Carbone (rocco@tecsiel.it) | ||
257 | return 2; // i don't need to process the list (nothing next) returns 2 if there is no client to process | ||
258 | } | ||
259 | while (client->next != NULL) { // Process the client and swap to next; | ||
260 | pos = client->next; | ||
261 | switch (pos->stat) { | ||
262 | case 1: | ||
263 | __ILWS_read_client(pos); | ||
264 | break; | ||
265 | case 2: | ||
266 | __ILWS_process_client(pos, server->gethandler); | ||
267 | break; | ||
268 | case 4: | ||
269 | __ILWS_output_client(pos); | ||
270 | break; | ||
271 | case 5: | ||
272 | __ILWS_delete_next_client(client); | ||
273 | continue; | ||
274 | } | ||
275 | client=client->next; | ||
276 | } | ||
277 | return 1; // return 1 if something processed | ||
278 | } | ||
279 | |||
diff --git a/src/socket.h b/src/socket.h deleted file mode 100644 index b7af25b0..00000000 --- a/src/socket.h +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: Sat Mar 30 14:44:42 GMT 2002 | ||
10 | * | ||
11 | * | ||
12 | * -- | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef _SOCKET_H_ | ||
17 | #define _SOCKET_H_ | ||
18 | |||
19 | #include <stdio.h> | ||
20 | #include <stdarg.h> | ||
21 | |||
22 | #ifdef WIN32 | ||
23 | #include <winsock2.h> | ||
24 | #include <io.h> | ||
25 | #else | ||
26 | #include <sys/socket.h> | ||
27 | #include <netinet/in.h> | ||
28 | #include <arpa/inet.h> | ||
29 | #include <unistd.h> | ||
30 | #include <sys/time.h> // struct tv | ||
31 | #include <sys/types.h> // freebsd need it i gues that is no problem if other system includes it | ||
32 | #endif | ||
33 | |||
34 | #define __ILWS_read recv | ||
35 | |||
36 | #endif | ||
37 | |||
diff --git a/src/utils.c b/src/utils.c deleted file mode 100644 index 3552189c..00000000 --- a/src/utils.c +++ /dev/null | |||
@@ -1,152 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * date: 19:49,07-49-2002 | ||
10 | * | ||
11 | * -- description: utilitys | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include "utils.h" | ||
16 | |||
17 | /*********************************************************************************************************/ | ||
18 | /* | ||
19 | * search a string in a string ignoring case | ||
20 | */ | ||
21 | char *__ILWS_stristr(char *str, const char *nedle) { | ||
22 | char *tmp1=str; | ||
23 | int ret=1; | ||
24 | int snedle=strlen(nedle),sstr=strlen(str); | ||
25 | if(strlen(str)<strlen(nedle))return NULL; | ||
26 | while((ret=strncasecmp(tmp1,nedle,snedle) && (unsigned int)(tmp1+snedle)<=(unsigned int) (str+sstr))) { | ||
27 | tmp1++; | ||
28 | }; | ||
29 | if(strncasecmp(tmp1,nedle,snedle)) | ||
30 | return NULL; | ||
31 | return tmp1; | ||
32 | }; | ||
33 | |||
34 | /*********************************************************************************************************/ | ||
35 | /* | ||
36 | * gives a new temporary path(file) name that doesn't exists | ||
37 | */ | ||
38 | char *_tmpnameprefix=""; | ||
39 | |||
40 | char *__ILWS_tmpfname() { | ||
41 | char *ret=NULL; | ||
42 | char *tmpdir=NULL; | ||
43 | char nam[TMPNAMESIZE+1]; | ||
44 | int i; | ||
45 | struct stat foostat; | ||
46 | if(tmpdir==NULL) { | ||
47 | tmpdir=getenv("TEMP"); | ||
48 | }; | ||
49 | if(tmpdir==NULL) { | ||
50 | tmpdir=getenv("TMP"); | ||
51 | }; | ||
52 | if(tmpdir==NULL) { | ||
53 | tmpdir=getenv("TMPDIR"); | ||
54 | }; | ||
55 | if(tmpdir==NULL) { | ||
56 | tmpdir=P_tmpdir; // defined in stdio.h | ||
57 | }; | ||
58 | if(!(ret=__ILWS_malloc(strlen(tmpdir)+strlen(_tmpnameprefix)+TMPNAMESIZE+2))) { | ||
59 | return NULL; | ||
60 | }; | ||
61 | srand(time(NULL)); // seed | ||
62 | do { | ||
63 | for(i=0;i<TMPNAMESIZE;i++) { | ||
64 | |||
65 | nam[i]=(rand()%2)?(rand()%26)+'A':(rand()%26)+'a'; | ||
66 | } | ||
67 | nam[i]=0; | ||
68 | snprintf(ret,strlen(tmpdir)+strlen(_tmpnameprefix)+TMPNAMESIZE+2,"%s/%s%s",tmpdir,_tmpnameprefix,nam); // include '0' | ||
69 | }while((stat(ret,&foostat)!=-1) && (lstat(ret,&foostat)!=-1)); // redundancy if win32 // <- race condition? | ||
70 | return ret; | ||
71 | }; | ||
72 | |||
73 | |||
74 | |||
75 | /*********************************************************************************************************/ | ||
76 | /* | ||
77 | * an date function | ||
78 | */ | ||
79 | #define DATE_MAX 100 | ||
80 | char __ILWS_datem[DATE_MAX]; | ||
81 | |||
82 | char *__ILWS_date(time_t t,const char *format) { | ||
83 | struct tm *tm; | ||
84 | tm=localtime(&t); | ||
85 | strftime(__ILWS_datem,DATE_MAX,format,tm); | ||
86 | return __ILWS_datem; | ||
87 | } | ||
88 | |||
89 | /*********************************************************************************************************/ | ||
90 | /* | ||
91 | * wasn't me, base64decode | ||
92 | */ | ||
93 | static const unsigned char __ILWS_chtb[256] = { | ||
94 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
95 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
96 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63, | ||
97 | 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64, | ||
98 | 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, | ||
99 | 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, | ||
100 | 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, | ||
101 | 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, | ||
102 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
103 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
104 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
105 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
106 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
107 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
108 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, | ||
109 | 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}; | ||
110 | |||
111 | |||
112 | int __ILWS_base64decode(char *bufplain, const char *bufcoded){ | ||
113 | int nb; | ||
114 | const unsigned char *in; | ||
115 | unsigned char *out; | ||
116 | int nprbytes; | ||
117 | |||
118 | in = (const unsigned char *) bufcoded; | ||
119 | while (__ILWS_chtb[*(in++)] <= 63); | ||
120 | nprbytes = (in - (const unsigned char *) bufcoded) - 1; | ||
121 | nb = ((nprbytes + 3) / 4) * 3; | ||
122 | |||
123 | out = (unsigned char *) bufplain; | ||
124 | in = (const unsigned char *) bufcoded; | ||
125 | |||
126 | while (nprbytes > 4) { | ||
127 | *(out++) = | ||
128 | (unsigned char) (__ILWS_chtb[*in] << 2 | __ILWS_chtb[in[1]] >> 4); | ||
129 | *(out++) = | ||
130 | (unsigned char) (__ILWS_chtb[in[1]] << 4 | __ILWS_chtb[in[2]] >> 2); | ||
131 | *(out++) = | ||
132 | (unsigned char) (__ILWS_chtb[in[2]] << 6 | __ILWS_chtb[in[3]]); | ||
133 | in += 4; | ||
134 | nprbytes -= 4; | ||
135 | } | ||
136 | if (nprbytes > 1) { | ||
137 | *(out++) = | ||
138 | (unsigned char) (__ILWS_chtb[*in] << 2 | __ILWS_chtb[in[1]] >> 4); | ||
139 | } | ||
140 | if (nprbytes > 2) { | ||
141 | *(out++) = | ||
142 | (unsigned char) (__ILWS_chtb[in[1]] << 4 | __ILWS_chtb[in[2]] >> 2); | ||
143 | } | ||
144 | if (nprbytes > 3) { | ||
145 | *(out++) = | ||
146 | (unsigned char) (__ILWS_chtb[in[2]] << 6 | __ILWS_chtb[in[3]]); | ||
147 | } | ||
148 | |||
149 | nb -= (4 - nprbytes) & 3; | ||
150 | return nb; | ||
151 | } | ||
152 | |||
diff --git a/src/utils.h b/src/utils.h deleted file mode 100644 index 7364a519..00000000 --- a/src/utils.h +++ /dev/null | |||
@@ -1,50 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * file: utils.h | ||
10 | * | ||
11 | * description: Header | ||
12 | * | ||
13 | * date: 19:50,07-50-2002 | ||
14 | */ | ||
15 | |||
16 | #ifndef _UTILS_H_ | ||
17 | #define _UTILS_H_ | ||
18 | |||
19 | #include <stdio.h> | ||
20 | #include <stdlib.h> | ||
21 | #include <string.h> | ||
22 | #include <sys/stat.h> | ||
23 | #include <ctype.h> | ||
24 | |||
25 | #ifdef TM_IN_SYS_TIME | ||
26 | #include <sys/time.h> | ||
27 | #else | ||
28 | #include <time.h> | ||
29 | #endif | ||
30 | |||
31 | #include "memory.h" | ||
32 | |||
33 | #ifdef WIN32 | ||
34 | #define strncasecmp strnicmp | ||
35 | #define snprintf _snprintf | ||
36 | #define lstat stat | ||
37 | #define vsnprintf _vsnprintf | ||
38 | #endif | ||
39 | |||
40 | #define TMPNAMESIZE 8 | ||
41 | extern char *_tmpnameprefix; | ||
42 | |||
43 | |||
44 | char *__ILWS_stristr(char *, const char *); | ||
45 | char *__ILWS_tmpfname(); | ||
46 | int __ILWS_base64decode(char *, const char *); | ||
47 | char *__ILWS_date(time_t,const char *); | ||
48 | |||
49 | |||
50 | #endif | ||
diff --git a/src/web_server.h b/src/web_server.h deleted file mode 100644 index d34036b5..00000000 --- a/src/web_server.h +++ /dev/null | |||
@@ -1,129 +0,0 @@ | |||
1 | /* Copyrights 2002 Luis Figueiredo (stdio@netc.pt) All rights reserved. | ||
2 | * | ||
3 | * See the LICENSE file | ||
4 | * | ||
5 | * The origin of this software must not be misrepresented, either by | ||
6 | * explicit claim or by omission. Since few users ever read sources, | ||
7 | * credits must appear in the documentation. | ||
8 | * | ||
9 | * Fri Dec 28 12:51:11 GMT 2001 | ||
10 | * Luis Figueiredo -- I Corrected the input to handle only data when \n\r(twice) is arrived | ||
11 | * | ||
12 | * Mon Feb 25 06:27:58 GMT 2002 | ||
13 | * Luis Figueiredo -- Many corrections and new functions were added, until today | ||
14 | * | ||
15 | * Mon Mar 25 14:46:13 GMT 2002 | ||
16 | * Luis Figueiredo -- wow, one month later..., discard web_server_addstr, and now process the stdout to server | ||
17 | * using a tmpfile for streaming (not so good, but :o)) | ||
18 | * Wed Mar 27 18:59:10 GMT 2002 | ||
19 | * Luis Figueiredo -- using regex instead of fnmatch(fnmatch only appears becouse of apache, i didn't knew it) | ||
20 | * Mon Apr 8 15:04:31 GMT 2002 | ||
21 | * Luis Figueiredo -- Oh my.. kurt cobain is dead :o), restructured the code, separated into various files | ||
22 | * Wed Apr 10 20:02:55 GMT 2002 | ||
23 | * Luis Figueiredo -- Make use of autoconf , removed open_memstream (doesn't work well w/ stdout structure on netbsd portability) | ||
24 | * linux slack 7.1 uses "extern FILE *stdout", netbsd uses "extern FILE __sF[]" so i cannot make use of pointers | ||
25 | * Mon Oct 7 16:56:15 GMT 2002 | ||
26 | * Luis Figueiredo -- Repaired some safe bugs, Added vars to stats proposes, inserted an liblogo, added debug instructions | ||
27 | * | ||
28 | * VERSION 0.5.3 | ||
29 | */ | ||
30 | |||
31 | #ifndef _WEB_SERVER_H_ | ||
32 | #define _WEB_SERVER_H_ | ||
33 | |||
34 | #include <stdio.h> // for struct FILE | ||
35 | #include <time.h> // for time_t | ||
36 | |||
37 | #ifdef __cplusplus | ||
38 | extern "C"{ | ||
39 | #endif | ||
40 | |||
41 | extern char *_libwebserver_version; | ||
42 | extern char *_tmpnameprefix; | ||
43 | extern int WEBTIMEOUT; | ||
44 | |||
45 | struct _MultiPart { | ||
46 | char *id; | ||
47 | char *data; | ||
48 | unsigned int size; | ||
49 | char *filename; | ||
50 | void *pad; | ||
51 | }; | ||
52 | char *__Header(char *); | ||
53 | char *__Query(char *); | ||
54 | char *__Post(char *); | ||
55 | struct _MultiPart __MultiPart(char *); | ||
56 | char *__Cookie(char *); | ||
57 | |||
58 | extern struct ClientInfo { | ||
59 | int outfd; | ||
60 | char *inetname; | ||
61 | char *request; | ||
62 | char *method; | ||
63 | char *user; | ||
64 | char *pass; | ||
65 | char *(*Header)(char *); | ||
66 | char *(*Query)(char *); | ||
67 | char *(*Post)(char *); | ||
68 | char *(*Cookie)(char *); | ||
69 | char *(*Conf)(char *,char *); // new on 0.5.0 | ||
70 | struct _MultiPart (*MultiPart)(char *); | ||
71 | void *__pad[9]; | ||
72 | |||
73 | } *ClientInfo; // PROTOTYPE | ||
74 | |||
75 | struct web_server { | ||
76 | int socket; | ||
77 | unsigned int port; | ||
78 | char *logfile; | ||
79 | char *conffile; | ||
80 | time_t conffiletime; // tested only on win | ||
81 | char *mimefile; | ||
82 | char *dataconf; | ||
83 | FILE *weblog; | ||
84 | int flags; | ||
85 | struct gethandler *gethandler; | ||
86 | struct web_client *client; | ||
87 | int usessl; | ||
88 | void *pad[2]; // SSL pad | ||
89 | }; | ||
90 | |||
91 | #define WS_LOCAL 1 // Can be only accessed by localhost (usefull for local programs gui's) | ||
92 | #define WS_USESSL 2 // Use ssl conections (openssl lib required) (security transation) (there is no sense using WS_LOCAL & WS_USESSL together) | ||
93 | #define WS_USEEXTCONF 4 // Use external config file (new 0.5.0) | ||
94 | #define WS_DYNVAR 8 // Use dynamic variables on output (new 0.5.1) | ||
95 | #define WS_USELEN 16 //Use Content-length calculator(new 0.5.1) | ||
96 | |||
97 | |||
98 | void web_server_useSSLcert(struct web_server *,const char *); // useless if not using openssl | ||
99 | void web_server_useMIMEfile(struct web_server *,const char *); // new on 0.5.2 | ||
100 | int web_server_init(struct web_server *,int,const char *,int); | ||
101 | void web_server_shutdown(struct web_server *); | ||
102 | char *web_server_getconf(struct web_server *,char *,char *); | ||
103 | int web_server_addhandler(struct web_server *,const char *,void (*)(),int); | ||
104 | int web_server_aliasdir(struct web_server *, const char *,char *,int); // new on 0.5.2 | ||
105 | int web_server_run(struct web_server *); | ||
106 | |||
107 | |||
108 | int web_client_addfile(char *); | ||
109 | extern unsigned char GLOBALGIFPAL[256][3]; | ||
110 | void web_client_gifsetpalette(const char *); | ||
111 | int web_client_gifoutput(char *,int,int,int); | ||
112 | |||
113 | void web_client_setcookie(char *,char *,char *,char *, char *,int); // improved on 0.5.1 | ||
114 | void web_client_deletecookie(char *); // improved on 0.5.1 | ||
115 | int web_client_setvar(char *,char *); //(new (0.5.1) | ||
116 | char *web_client_getvar(char *); //(new (0.5.1) | ||
117 | int web_client_delvar(char *); //(new (0.5.1) | ||
118 | |||
119 | void web_client_HTTPdirective(char *); | ||
120 | void web_client_contenttype(char *); // 0.5.2 | ||
121 | void web_log(const char *,...); | ||
122 | |||
123 | |||
124 | #ifdef __cplusplus | ||
125 | } | ||
126 | #endif | ||
127 | |||
128 | #endif | ||
129 | |||