tPCSI$IOpenVMS Alpha POLYCENTER Software Installation Utility Version: V7.3-300a JFPAXPVMSSWISH_EV(product JFP AXPVMS SWISH_E V2.4-2 full ;7 if () ; error UNSUPP_VMS_VER abort ; end if ; directory "[swish-e.bin]" ; directory "[swish-e.conf]" ;& directory "[swish-e.filter-bin]" ;# directory "[swish-e.filters]" ; directory "[swish-e.html]" ;# directory "[swish-e.Include]" ; directory "[swish-e.lib]" ; directory "[swish-e.man]" ; directory "[swish-e.perl]" ;$ directory "[swish-e.prog-bin]" ;! directory "[swish-e.tests]" ;* directory "[swish-e.conf.stopwords]" ;) directory "[swish-e.filters.SWISH]" ;1 directory "[swish-e.filters.SWISH.Filters]" ;' directory "[swish-e.html.images]" ;" directory "[swish-e.perl.t]" ;' file "[swish-e]INSTALL." size 103 ;% file "[swish-e]README." size 18 ;( file "[swish-e]startup.com" size 1 ;. file "[swish-e.bin]LIBTEST.EXE" size 698 ;/ file "[swish-e.bin]SWISH-E.EXE" size 4998 ;1 file "[swish-e.conf]example1.config" size 3 ;1 file "[swish-e.conf]example2.config" size 2 ;1 file "[swish-e.conf]example3.config" size 3 ;1 file "[swish-e.conf]example4.config" size 6 ;1 file "[swish-e.conf]example5.config" size 2 ;1 file "[swish-e.conf]example6.config" size 5 ;1 file "[swish-e.conf]example7.config" size 4 ;1 file "[swish-e.conf]example8.config" size 3 ;1 file "[swish-e.conf]example9.config" size 6 ;- file "[swish-e.conf]example9.pl" size 4 ;- file "[swish-e.conf]Makefile.am" size 1 ;. file "[swish-e.conf]Makefile.in" size 19 ;) file "[swish-e.conf]README." size 5 ;3 file "[swish-e.filter-bin]Makefile.am" size 2 ;4 file "[swish-e.filter-bin]Makefile.in" size 19 ;/ file "[swish-e.filter-bin]README." size 2 ;: file "[swish-e.filter-bin]swish_filter_pl.in" size 4 ;5 file "[swish-e.filter-bin]_binfilter.sh" size 1 ;4 file "[swish-e.filter-bin]_pdf2html.pl" size 5 ;0 file "[swish-e.filters]Makefile.am" size 1 ;1 file "[swish-e.filters]Makefile.in" size 31 ;, file "[swish-e.filters]README." size 7 ;: file "[swish-e.filters]swish-filter-test.in" size 19 ;8 file "[swish-e.filters.SWISH]Filter_pm.in" size 67 ;6 file "[swish-e.filters.SWISH]Makefile.am" size 1 ;7 file "[swish-e.filters.SWISH]Makefile.in" size 21 ;= file "[swish-e.filters.SWISH.Filters]Doc2txt.pm" size 4 ;@ file "[swish-e.filters.SWISH.Filters]ID3toHTML.pm" size 13 ;> file "[swish-e.filters.SWISH.Filters]Pdf2HTML.pm" size 8 ;> file "[swish-e.filters.SWISH.Filters]XLtoHTML.pm" size 8 ;+ file "[swish-e.html].htaccess" size 1 ;+ file "[swish-e.html]API.html" size 55 ;/ file "[swish-e.html]CHANGES.html" size 97 ;. file "[swish-e.html]Filter.html" size 55 ;, file "[swish-e.html]index.html" size 9 ;2 file "[swish-e.html]index_long.html" size 53 ;0 file "[swish-e.html]INSTALL.html" size 150 ;- file "[swish-e.html]Makefile.am" size 8 ;. file "[swish-e.html]Makefile.in" size 28 ;. file "[swish-e.html]README.html" size 25 ;. file "[swish-e.html]search.html" size 17 ;0 file "[swish-e.html]searchdoc.html" size 1 ;/ file "[swish-e.html]spider.html" size 100 ;* file "[swish-e.html]split.pl" size 3 ;+ file "[swish-e.html]style.css" size 3 ;1 file "[swish-e.html]SWISH-3_0.html" size 18 ;2 file "[swish-e.html]SWISH-BUGS.html" size 11 ;5 file "[swish-e.html]SWISH-CONFIG.html" size 277 ;2 file "[swish-e.html]SWISH-FAQ.html" size 145 ;5 file "[swish-e.html]SWISH-LIBRARY.html" size 54 ;2 file "[swish-e.html]SWISH-RUN.html" size 107 ;4 file "[swish-e.html]SWISH-SEARCH.html" size 43 ;, file "[swish-e.html]swish.conf" size 1 ;. file "[swish-e.html]swish.html" size 132 ;, file "[swish-e.html]timestamp." size 0 ;0 file "[swish-e.html]_swishcgi.conf" size 1 ;0 file "[swish-e.Include]ACCONFIG.H" size 14 ;, file "[swish-e.Include]array.h" size 2 ;+ file "[swish-e.Include]bash.h" size 2 ;, file "[swish-e.Include]btree.h" size 3 ;, file "[swish-e.Include]check.h" size 3 ;/ file "[swish-e.Include]compress.h" size 6 ;. file "[swish-e.Include]config.h" size 28 ;0 file "[swish-e.Include]date_time.h" size 2 ;* file "[swish-e.Include]db.h" size 18 ;1 file "[swish-e.Include]db_native.h" size 15 ;. file "[swish-e.Include]docprop.h" size 5 ;7 file "[swish-e.Include]double_metaphone.h" size 1 ;+ file "[swish-e.Include]dump.h" size 3 ;/ file "[swish-e.Include]entities.h" size 3 ;, file "[swish-e.Include]error.h" size 5 ;. file "[swish-e.Include]extprog.h" size 1 ;, file "[swish-e.Include]fhash.h" size 2 ;+ file "[swish-e.Include]file.h" size 4 ;- file "[swish-e.Include]filter.h" size 4 ;) file "[swish-e.Include]fs.h" size 2 ;1 file "[swish-e.Include]getruntime.h" size 3 ;+ file "[swish-e.Include]hash.h" size 3 ;. file "[swish-e.Include]headers.h" size 2 ;+ file "[swish-e.Include]html.h" size 1 ;+ file "[swish-e.Include]http.h" size 2 ;1 file "[swish-e.Include]httpserver.h" size 2 ;- file "[swish-e.Include]index.h" size 11 ;2 file "[swish-e.Include]keychar_out.h" size 1 ;+ file "[swish-e.Include]list.h" size 3 ;* file "[swish-e.Include]mem.h" size 8 ;, file "[swish-e.Include]merge.h" size 3 ;0 file "[swish-e.Include]metanames.h" size 5 ;- file "[swish-e.Include]parser.h" size 1 ;5 file "[swish-e.Include]parse_conffile.h" size 1 ;0 file "[swish-e.Include]proplimit.h" size 2 ;. file "[swish-e.Include]ramdisk.h" size 1 ;+ file "[swish-e.Include]rank.h" size 1 ;4 file "[swish-e.Include]result_output.h" size 5 ;2 file "[swish-e.Include]result_sort.h" size 5 ;. file "[swish-e.Include]search.h" size 15 ;. file "[swish-e.Include]soundex.h" size 1 ;. file "[swish-e.Include]stemmer.h" size 6 ;/ file "[swish-e.Include]swish-e.h" size 11 ;- file "[swish-e.Include]swish.h" size 56 ;2 file "[swish-e.Include]swish_qsort.h" size 5 ;2 file "[swish-e.Include]swish_words.h" size 2 ;. file "[swish-e.Include]swregex.h" size 2 ;/ file "[swish-e.Include]swstring.h" size 6 ;* file "[swish-e.Include]sys.h" size 2 ;* file "[swish-e.Include]txt.h" size 1 ;/ file "[swish-e.Include]worddata.h" size 3 ;* file "[swish-e.Include]xml.h" size 1 ;2 file "[swish-e.lib]LIBSWISH-E.OLB" size 4158 ;, file "[swish-e.man]Makefile.am" size 3 ;- file "[swish-e.man]Makefile.in" size 22 ;1 file "[swish-e.man]SWISH-CONFIG.1" size 204 ;+ file "[swish-e.man]swish-e.1" size 13 ;. file "[swish-e.man]SWISH-FAQ.1" size 116 ;1 file "[swish-e.man]SWISH-LIBRARY.1" size 57 ;- file "[swish-e.man]SWISH-RUN.1" size 89 ;) file "[swish-e.perl]API.pm" size 35 ;) file "[swish-e.perl]API.xs" size 27 ;* file "[swish-e.perl]Changes." size 1 ;- file "[swish-e.perl]Makefile.PL" size 5 ;+ file "[swish-e.perl]MANIFEST." size 1 ;) file "[swish-e.perl]README." size 7 ;* file "[swish-e.perl]typemap." size 2 ;. file "[swish-e.perl.t]first.html" size 1 ;/ file "[swish-e.perl.t]second.html" size 1 ;- file "[swish-e.perl.t]test.conf" size 1 ;+ file "[swish-e.perl.t]test.t" size 16 ;. file "[swish-e.perl.t]third.html" size 1 ;4 file "[swish-e.prog-bin]DirTree_pl.in" size 21 ;0 file "[swish-e.prog-bin]doc2txt.pm" size 5 ;- file "[swish-e.prog-bin]file.pl" size 2 ;9 file "[swish-e.prog-bin]index_hypermail.pl" size 18 ;1 file "[swish-e.prog-bin]Makefile.am" size 2 ;2 file "[swish-e.prog-bin]Makefile.in" size 23 ;. file "[swish-e.prog-bin]MySQL.pl" size 3 ;2 file "[swish-e.prog-bin]pdf2html.pm" size 10 ;0 file "[swish-e.prog-bin]pdf2xml.pm" size 8 ;- file "[swish-e.prog-bin]README." size 4 ;4 file "[swish-e.prog-bin]spider_pl.in" size 128 ;; file "[swish-e.prog-bin]SwishSpiderConfig.pl" size 20 ;/ file "[swish-e.tests]check_index." size 1 ;4 file "[swish-e.tests]check_metasearch." size 1 ;0 file "[swish-e.tests]check_search." size 1 ;, file "[swish-e.tests]common.sh" size 2 ;. file "[swish-e.tests]Makefile.am" size 1 ;/ file "[swish-e.tests]Makefile.in" size 21 ;. file "[swish-e.tests]test.config" size 1 ;, file "[swish-e.tests]test.html" size 1 ;+ file "[swish-e.tests]test.txt" size 1 ;+ file "[swish-e.tests]test.xml" size 1 ;1 file "[swish-e.tests]test_meta.html" size 1 ;2 file "[swish-e.tests]test_meta2.html" size 1 ;3 file "[swish-e.tests]test_phrase.html" size 1 ;0 file "[swish-e.tests]test_xml.html" size 1 ; end product ;00'PRODUCTD (this is a comment section written into the SWISH_E.PCSI$TEXT file)A This file is the Product Text File (PTF) for application SWISH_EG automatically generated by PCSI_MENU v1.2-0 on 30-AUG-2004 12:40:51.69; by Jean-Francois PIERONNE (VMS user SYSTEM) on node BISOU.  Revision history & Version Date Author actionK ------- ----------- ---------- -------------------------------------------? V1.0-0 30-AUG-2004 SYSTEM creation (via PCSI_MENU v1.2-0) 0 'PRODUCT'1SWISH_E0UNSUPP_VMS_VERA The version of SWISH_E you are installing runs only with OpenVMS version V7.3 or higher. C Please check whether you are installing this software on the right= system, or do upgrade this system to OpenVMS V7.3 or higher.0UNSUPP_VMS_VER'1OpenVMS V7.3 minimum required.0[swish-e]INSTALL.igi|mL2D̢gg>NAME INSTALL - Swish-e Installation Instructions OVERVIEW This document describes how to download, build and install Swish-e from source. Also below is a basic overview of using Swish-e to index documents with pointers to other more advanced examples. This document also provides instructions on how to get help installing and using Swish-e (and the important information you should provide when asking for help). Please read these instructions before requesting help on the Swish-e discussion list. See "QUESTIONS AND TROUBLESHOOTING". Although building from source is recommended, some OS distributions (e.g. Debian) provide pre-compiled binaries. Check with your distribution for available packages. Build from source if your distribution does not offer the current version of swish-e. Also, please read the Swish-e FAQ SWISH-FAQ as it answers many frequently asked questions. Swish-e knows how to index HTML, XML, and plain text documents. Helper applications and other tools are used to convert documents such as PDF or MS Word into a format that swish-e can index. These additional applications and tools (listed below) must be installed separately. The process of converting douments is called "filtering." NOTE: Swish-e version 4.2.0 installs a lot more files when running "make install". Be aware that the Swish-e documentation may thus include errors about where files are located. Please notify the swish-e discussion list of any documentation errors. Upgrading from previous versions of Swish-e If upgrading from a previous version of Swish-e read the CHANGES page before installing. The Swish-e index format may have changed and existing indexes may not work with the newer version of Swish-e. If you have existing indexes you may need to reindex your data before running the "make install" step described below. Swish-e may be run from the build directory after compiling but before installation. Windows Users A Windows binary version is available as a separate download from the Swish-e site (http://swish-e.org). Many of the installation instructions below will not apply to Windows users; the Windows version is pre-compiled and includes libxml2, zlib, xpdf and catdoc. A number of Perl modules may also be needed. These can be installed with ActiveState's PPM utility. libwww-perl - the LWP modules (for spidering) HTML-Tagset - used by web spider HTML-Parser - used by web spider MIME-Types - used for filtering documents when not spidering HTML-Template - formatting output from swish.cgi (optional) HTML-FillInForm (if HTML-Template is used) SYSTEM REQUIREMENTS Swish-e makes use of a number of libraries and tools that are not distributed with Swish-e. Some libraries need to be installed before building Swish-e from source, where other tools can be installed at any time. See below for details. Software Requirements Swish-e is written in C and up to this time has been tested on a number of platforms, including Sun/Solaris, Dec Alpha, BSD, Linux, OS X, and Open VMS. The GNU C compiler, gcc, and GNU make are strongly recommended. Repeat: you will find life easier if you use the GNU tools. Optional but Recommended Packages Most of these packages listed below are available as easily installable packages. Check your operating system vendor, or install from source. Most are very common packages that may already be installed on your computer. As noted below, some packages need to be installed before building Swish-e from source, while others may be added after Swish-e is installed. * Libxml2 Libxml2 is very strongly recommended. It is used for parsing both HTML and XML files. Swish-e can be built and installed without libxml2, but the HTML parser built into swish-e is not as accurate as libxml2. http://xmlsoft.org/ For swish-e to use libxml2 it must be installed before building swish-e. If libzml2 is installed in a non-standard location (e.g. libxml2 is built with --prefix $HOME/local) then make sure you add the bin directory to your $PATH before building swish-e. Swish-e's configure script uses a program created by libxml2 (xml2-config) to find the location of libxml2. Use "which xml2-config" to verify the program can be found where expected. * Zlib Compression The Zlib compression library is commonly installed on most systems and is recommended for use with Swish-e. Zlib is used for compressing text stored in the swish-e index. http://www.gzip.org/zlib/ Zlib must be installed before building swish-e. * Perl Modules Although Swish-e is a compiled C program, many support features use Perl. For example, the web spiders are written in Perl, and modules to help with filtering documents are also written in Perl. The following Perl modules may be required. Check your current Perl installation as many may already be installed. LWP URI HTML::Parser HTML::Tagset MIME::Types (optional) Not that installing Bundle::LWP with the CPAN module perl -MCPAN -e 'install Bundle::LWP' will install many of the above. If you wish to use HTML-Template with swish.cgi to generate output: HTML::Template HTML::FillInForm If you wish to use Template-Toolkit with swish.cgi to generate output install: Template Questions about installing these modules may be sent to the swish-e discussion list. The "search.cgi" example script requires both Template-Toolkit and HTML::FillInForm. * Indexing PDF Documents Indexing PDF files requires the xpdf package. This is a common package available with most operating systems and often provided as a package. http://www.foolabs.com/xpdf/ Xpdf may be added after swish-e is installed. * Indexing MS Word Documents Indexing MS Word documents requires the Catdoc program. http://www.45.free.net/~vitus/ice/catdoc Catdoc may be added after swish-e is installed. * Indexing MP3 ID3 Tags Indexing MP3 ID3 Tags requires the MP3::Tag Perl module. See http://search.cpan.org. MP3::Tag may be installed after swish-e is installed. * Indexing MS Excel Files Indexing MS Excel files is supported by the following Perl modules, also available at http://search.cpan.org. Spreadsheet::ParseExcel HTML::Entities These Perl modules may be installed after swish-e is installed. INSTALLATION Here are brief installation instructions that should work in most cases. Following this section are more detailed instructions and examples. Building Swish-e Download swish-e using your favorite web browser or a utility like wget, lynx, or lwp-download. Unpack and build using the following steps: Note: "swish-e-2.4.0" is used as an example. Download the most current version available and adjust the commands below! Also, if running Debian, see notes below on building a .deb package from the swish-e source package. The "$" symbol indicates steps run as an unprivileged user. The "#" indicates steps run as the superuser (root). $ wget http://swish-e.org/Download/swish-e-2.4.0.tar.gz $ gzip -dc swihs-e-2.4.0.tar.gz | tar xof - $ cd swish-e-2.4.0 (this directory will depend on the version of Swish-e) $ ./configure $ make $ make check ... ================== All 3 tests passed ================== $ su root (or use sudo) (enter password) # make install # exit $ swish-e -V SWISH-E 2.4.0 IMPORTANT: Once installed do not run swish-e as the superuser (root) -- root is only required during the installation step when installing into system directories. Please do not break this rule. NOTE: If you are upgrading from an older version of swish-e be sure and review the CHANGES file. Old index files may not be compatible with the newer version of swish-e. After building swish-e (before running "make install"), swish-e can be run from the build directory: $ src/swish-e -V To minimize downtime, create new index files before running "make install" by using swish-e from the build directory. Then copy the index files to the live location and run "make install": $ src/swish-e -c /path/to/config -f index.new Keep in mind that where you index from may effect the paths stored in the index file. Installing without root access Here's another installation example. This might be used if you do not have root access or you wish to install swish someplace other than /usr/local. This example also shows building Swish-e in a "build" directory separate from where the source files are located. This is the recommended way to build Swish-e, but requires GNU Make. Without GNU Make you will likely need to build from within the source directory as shown in the previous example. $ tar zxof swish-e-2.4.0.tar.gz (GNU tar with "z" option) $ mkdir build $ cd build Note that the current directory is not where Swish-e was unpacked. Swish-e uses a configure script. configure has many options, but uses reasonable and standard defaults. Running $ ../swish-e-2.4.0/configure --help will display the options. Two options are of common interest: --prefix sets the top-level installation directory, and --disable-shared will link swish-e statically, which may be needed on some platforms (Solaris 2.6 perhaps). Platforms vary on how to link against libraries when libraries are installed in non-standard locations. Swish-e uses the GNU autoconf tools for building the package. Autoconf is good at building and testing, but still requires you to provide information appropriate for your platform. This may mean reading the manual page for your compiler and linker to see how to specify non-standard file locations. For most unix-type platforms you use LDFLAGS and CPPFLAGS environment variables to specify paths to include (header) files and libraries not in standard locations. Now, in this example we do not have root access, and we have installed libxml2 and libz in $HOME/local. Swish-e will also be installed in $HOME/local (by using the --prefix setting). In this case you would need to add $HOME/local/bin to the start of your shell's PATH setting. This is required because libxml2 installs a program that is used when running the configure script. Before running configure type: $ which xml2-config And it should list $HOME/local/bin/xml2-config. Now run configure (remember, we are in a separate "build" directory): $ ../swish-e-2.4.0/configure \ --prefix=$HOME/local \ CPPFLAGS=-I$HOME/local/include \ LDFLAGS="-R$HOME/local/lib -L$HOME/local/lib" $ make >/dev/null (redirect output to only see warnings and errors) $ make check ... ================== All 3 tests passed ================== $ make install $ $HOME/local/bin/swish-e -V SWISH-E 2.4.0 Note the use of dobule quotes in the LDFLAGS line above. This allows $HOME to be expanded. Run-time paths The -R option says to add that path to the paths used to find shared libraries at run time. This path is stored in the swish-e binary. When swish-e is run it will look in this directory for shared libraries. Some platforms may not support the -R option and you may instead have to set the LD_RUN_PATH environment variable before running make. Some systems such as Redhad do not look in /usr/local/lib for libraries. In these cases you can either use -R as above when building swish-e or add /usr/local/lib to /etc/ld.so.conf and run ldconfig as root. If all else fails, you may need to actually read the man pages for your platform. Building a Debian Package The Swish-e distribution includes the files requires to build a Debian pakcage. $ tar zxof swish-e-2.4.0.tar.gz (GNU tar with "z" option) $ cd swish-e-2.4.0 $ fakeroot debian/rules binary [lots of output] dpkg-deb: building package `swish-e' in `../swish-e_2.4.0-0_i386.deb'. $ su # dpkg -i ../swish-e_2.4.0-0_i386.deb What's installed Swish installs a number of files. By default all files are installed below /usr/local, but this can be changed by setting --prefix when running configure (as shown above). Individual paths may also be set. Run configure --help for details. $prefix/bin/swish-e The swish-e binary program $prefix/share/doc/swish-e/ Full documentation and examples $prefix/lib/libswish-e The swish-e C library $prefix/include/swish-e.h The library header file $prefix/man/man1/ Documentation as manual pages $prefix/lib/swish-e/ Helper programs (spider.pl, swishspider, swish.cgi) $prefix/lib/swish-e/perl/ Perl helper modules Note that the Perl modules are *not* installed in the system Perl library. Swish-e and the Perl scripts that require the modules know where to find the modules, but the perldoc program used for reading documentation does not. This can be corrected by adding $prefix/lib/swish-e and $prefix/lib/swish-e/perl to the PERL5LIB environment variable. Documentation Documentation can be found in the $prefix/share/doc/swish-e directory. Documentation can also be read on-line at the Swish-e web site: http://swish-e.org/ The Swish-e documentation as man(1) pages Running "make install" installs some of the Swish-e documentation as man pages. The following man pages are installed: SWISH-FAQ(1) SWISH-CONFIG(1) SWISH-RUN(1) SWISH-LIBRARY(1) The man pages are installed in the system man directory. This directory is determined by running ./configure and can be set by passing the directory when running ./configure. For example, ./configure --mandir=/usr/local/doc/man The man director is relative to the --prefix setting. If you use --prefix you do not normally need to also specify --mandir. Information on running ./configure can be found by typing: ./configure --help Join the Swish-e discussion list The final step when installing Swish-e is to join the Swish-e discussion list. The Swish-e discussion list is the place to ask questions about installing and using Swish-e, see or post bug fixes or security announcements, and a place where you can offer help to others. Please do not contact the developers directly. The list is typically *very low traffic*, so it won't overload your inbox. Please take time to subscribe. See http://Swish-e.org. If you are using Swish-e on a public site, please let the list know so it can be added to the list of sites that use Swish-e! Please review the next section before posting a question to the Swish-e list. QUESTIONS AND TROUBLESHOOTING Support for installation, configuration and usage is av>ailable via the Swish-e discussion list. Visit http://swish-e.org for information. Do not contact developers directly for help -- always post your question to the list. It's very important to provide the right information when asking for help. Please search the Swish-e list archive before posting a question, and check the SWISH-FAQ to see if your question hasn't already been asked. Before posting use tools available to narrow down the problem. Swish-e has the -T, -v, and -k switches that may help resolve issues. These switches are described on the SWISH-RUN page. For example, if you cannot find a document by a keyword that you believe should be indexed try indexing just that single file, and use the -T INDEXED_WORDS option to see if the word is actually being indexed. First try without any changes to default settings: swish-e -i testdoc.html -T indexed_words | less if that works then add in your configuration file: swish-e -i testdoc.html -c swish.conf -T indexed_words | less If that still isn't working as you expect try to reduce the test document to a very small example. This will be very helpful when asking for help. Other tools are to use -H9 when searching to display full headers in search results. Look at the "Parsed Words" header to see what words swish-e is searching for. When posting please provide the following information: Use these guidelines when asking for help. The most important tip is to provide the least amount of information that can be used to reproduce your problem. Do not paraphrase output -- copy-and-paste -- but trim text that is not necessary. * The exact version of Swish-e that you are using. Running Swish-e with the "-V" switch will print the version number. Also, supply the output from "uname -a" or similar command that identifies the operating system you are running on. If you are running an old version of swish be prepared for a response to your question of "upgrade." * A summary of the problem. This should include the commands issued (e.g. for indexing or searching) and their output, and why you don't think it's working correctly. Please cut-n-paste the exact commands and their output instead of retyping to avoid errors. * Include a copy of the configuration file you are using, if any. Swish-e has reasonable defaults so in many cases you can run it without using a configuration file. But, if you need to use a configuration file, reduce it down to the absolute minimum number of commands required to demonstrate your problem. Again, cut-n-paste. * A small copy of a source document that demonstrates the problem. If you are having problems spidering a web server, use lwp-download or wget to copy the file locally to make sure you can index the document using the file system method. This will help determine if the problem is with spidering or with indexing. If you expect help with spidering, don't post fake URLs, as it makes it impossible to test. If you don't want to expose your web page to the people on the Swish-e list, find some other site to test spidering on. If that works, but you still cannot spider your own site then post your real URL if you want help, or make a test document available via some other source. * If you are having trouble building Swish-e please cut-n-paste the output from make (or from ./configure if that's where the problem is). The key is to provide enough information so that others may reproduce the problem. ADDITIONAL INSTALLATION OPTIONS These steps are not required for normal use of Swish-e. The SWISH::API Perl Module The Swish-e distribution includes a module that provides a Perl interface to the Swish-e C library. This module provides a way to search a Swish-e index without running the swish-e program. Searching an index will be many times faster when running under a persistent environment such as Apache/mod_perl with the SWISH::API module. See the perl/README file for information on installing and using the SWISH::API Perl module. Creating PDF and Postscript documentation The Swish-e documentation in HTML format was created with Pod::HtmlPsPdf, a package of Perl modules written and/or modified by Stas Bekman to automate the conversion of documents in pod format (see perldoc perlpod) to HTML, Postscript, and PDF. A slightly modified version of this package is included with the Swish-e distribution and used for building the HTML. If your system has the necessary tools to build Postscript and the converter ps2pdf installed, you may be able to build the Postscript and PDF versions of the documentation. After you have run ./configure, type from the doc directory of the distribution: make pdf And with any luck you will end up with the these two files in the top-level directory: swish-e_documentation.pdf swish-e_documentation.ps Most people find reading the documentation in HTML most convenient. GENERAL CONFIGURATION AND USAGE This section should give you a basic overview of indexing and searching with Swish-e. Other examples can be found in the conf directory which will step you through a number of different configurations. Also, please review the SWISH-FAQ. Swish-e is a command line program. The program is controlled by passing switches on the command line. A configuration file may be used, but often is not required. Swish-e does not include a graphical user interface. There are example CGI scripts provided in the distribution, but they require additional setup to use. Introduction to Indexing and Searching Swish-e can index files on the local file system. For example, running: swish-e -i /var/www/htdocs will index *all* files in the /var/www/htdocs directory. You may specify one or more files or directories with the -i option. By default this will create an index (which is made up of more than one file) in the current directory called index.swish-e. Then to search the resulting index for a given word: swish-e -w apache This will find the word "apache" in the body or title of the indexed documents. As mentioned above, Swish-e will index all files in a directory unless instructed otherwise. So if /var/www/htdocs contains non-HTML then you will need a configuration file to limit the files that Swish-e indexes. Create a file called "swish.conf": # Example configuration file # Tell swish what to index (same as -i switch above) IndexDir /var/www/htdocs # Only index HTML and text files IndexOnly .htm .html .txt # Tell swish that .txt files are to use the text parser. IndexContents TXT* .txt # Otherwise, use the HTML parser DefaultContents HTML* Save that as "swish.conf" and reindex: swish-e -c swish.conf The Swish-e configuration settings are described in the SWISH-CONFIG manual page. Order of statements in the configuration file is typically not important, although some statements depend on previously set statements. There are many possible settings. Good advice is to use as few settings as possible when first starting out with Swish-e. The runtime options (switches) are described in the SWISH-RUN manual page. You may also see a summary of options by running: swish-e -h Swish-e has two other methods reading input files. One method uses a Perl helper script and the LWP Perl library to spider remote web sites: swish-e -S http -i http://localhost/index.html -v2 This will spider the web server running on the local host. The "-S" option defines the input source method to be "http", "-i" specifies the URL to spider, and "-v" sets the verbose level to two. There are a number of configuration options specific to the "-S" http input source. See SWISH-CONFIG. Note that only files of Content-Type text/* will be indexed. The "-S http" method is deprecated in favor of the next input method. The other method is a general purpose input method where Swish-e reads input from a program that produces documents in a special format. The program might read and format data stored in a database, or parse and format messages in a mailing list archive, or run a program that spiders web sites like the previous method. The Swish-e distribution includes a spider program that uses this method of input. This spider program is much more configurable and feature-rich than the previous -S http method. To duplicate the previous example create a configuration file called "swish2.conf" # Example for spidering # Use the "spider.pl" program included with Swish-e IndexDir spider.pl # Define what site to index SwishProgParameters default http://localhost/index.html Then create the index using the command: swish-e -S prog -c swish2.conf This says to use the "-S prog" input source method. Note that in this case the IndexDir settings does not list a file or directory to index, but a program name run. This program, spider.pl, does the work of fetching the documents from the web server and passing them to Swish-e for indexing. The SwishProgParameters options is a special feature that allows passing command line parameters to the program specified with IndexDir. In this case passing the word "default" which tells spider.pl to use default settings, and the URL to spider. Running a script under Windows requires specifying the interpreter (e.g. perl.exe) and then use SwishPropParameters to specify the script and the script's parameters. See *Notes when using -S prog on MS Windows* on the SWISH-RUN page. The advantage of the "-S prog" method of spidering (over the previous "-S http" method) is that the Perl code is only compiled once instead of for every document fetched from the web server. In addition it is a much more advanced spider with many, many features. Still, as used here, spider.pl will automatically index PDF or MS Word documents if (when) Xpdf and Catdoc are installed. A special form of the "-S prog" input source method is: ./myprog --option | swish-e -S prog -i stdin -c config This allows running Swish-e from a program (instead of running the external program from Swish-e). Thus, this also can be done: ./myprog --option > outfile swish-e -S prog -i stdin -c config < outfile or ./myprog --option > outfile cat outfile | swish-e -S prog -i stdin -c config One final note about the "-S prog" input source method. The program specified with -i or IndexDir needs to be an absolute path. The exception is when the program is installed in the "libexecdir" directory and then a plain program name may be specified (as in the example showing spider.pl above). All three input source methods are described in more detail on the SWISH-RUN page. Metanames and Properties There's two key Swish-e concepts that you need to be familiar with: Metanames and Properties. * Metanames Swish-e creates a reverse index. Just like an index in a book, you look up a word and it lists the pages (or documents) where that word can be found. Swish-e can create multiple index tables within the same index file. For example, you might want to create an index of just words in HTML titles so searches can be limited to just titles. Or you might have descriptive words in a meta tag called "keywords" you would like to search. Some database systems might call these different "fields" or "columns", but swish-e calls them *MetaNames* (as a result of first indexing HTML meta tags). To find documents with "foo" in their title you might run: swish-e -w swishtitle=foo or more advanced: swish-e -w swishtitle=(foo or bar) or swishdefault=(baz) The Metaname "swishdefault" is the name used by Swish-e if no other name is specified. The following two searches are the same: swish-e -w foo swish-e -w swishdefault=foo When indexing HTML documents Swish-e indexes words in the body and title under the Metaname "swishdefault". * Properties Swish-e search results is a list of files -- actually internally swish uses file numbers. Data can be associated with each file number when indexing. For example, by default Swish-e associates the file's name, title, last modified date, and size with the file number and these items can be printed in search results. In Swish-e this associated data is called a file's *Properties*. Properties can be any data you wish to associated with a document -- even the entire text of the document can be stored in the index. What data is stored as a Property is controlled by the *PropertyNames* (and others) configuration directive. What properties are printed with search results depends on the -x or -p switches. By default Swish-e returns the rank, path/URL, title and file size in bytes for each result. Getting Started With Swish-e Swish-e reads a configuration file (see SWISH-CONFIG) for directives that control what and how Swish-e indexes files. Swish-e is also controlled by command line arguments (see SWISH-RUN). Many of the command line arguments have equivalent configuration directives (e.g. -i and IndexDir). Swish-e does not require a configuration file, but most people need to change the default behavior by placing settings in a configuration file. To try the examples below you may change to the tests subdirectory of the distribution. The tests will use the *.html files in this directory when creating the test index. You may wish to review these *.html files to get an idea of the various native file formats that Swish-e supports. You may also use your own test documents. It's recommended to use small test documents when first using Swish-e. Step 1: Create a Configuration File The configuration file controls what and how Swish-e indexes. The configuration file consists of directives, comments, and blank lines. The configuration file can be any name you like. This example will work with the documents in the tests directory. You may wish to review the tests/test.config configuration file used for the "make test" tests. For example, a simple configuration file (swish-e.conf): # Example Swish-e Configuration file # Define *what* to index # IndexDir can point to a directories and/or a files # Here it's pointing to the current directory # Swish-e will also recurse into sub-directories. IndexDir . # But only index the .html files IndexOnly .html # Show basic info while indexing IndexReport 1 And that's a simple configuration file. It says to index all the .html files in the current directory and sub-directories, if any, and provide some basic output while indexing. As mentioned above, the complete list of all configuration file directives are described in SWISH-CONFIG.> Step 2: Index your Files Run Swish-e using the "-c" switch to specify the name of the configuration file. swish-e -c swish-e.conf Indexing Data Source: "File-System" Indexing "." Removing very common words... no words removed. Writing main index... Sorting words ... Sorting 55 words alphabetically Writing header ... Writing index entries ... Writing word text: Complete Writing word hash: Complete Writing word data: Complete 55 unique words indexed. 4 properties sorted. 5 files indexed. 1252 total bytes. 140 total words. Elapsed time: 00:00:00 CPU time: 00:00:00 Indexing done! This created the index file index.swish-e. This is the default index file name unless the IndexFile directive is specified in the configuration file: IndexFile ./website.index You may use the -f switch to specify a index file at indexing time. The -f option overrides a IndexFile setting in the configuration file. Step 3: Search You specify your search terms with the "-w" switch. For example, to find the files that contain the word sample you would issue the command: swish-e -w sample This example assumes that you are in the tests directory. Swish-e returns in response to that command the following: swish-e -w sample # SWISH format: 2.4.0 # Search words: sample # Number of hits: 2 # Search time: 0.000 seconds # Run time: 0.005 seconds 1000 ./test_xml.html "If you are seeing this, the METATAG XML search was successful!" 159 1000 ./test.html "If you are seeing this, the test was successful!" 437 . So the word sample was found in two documents. The first number shown is the relevance or rank of the search term, followed by the file containing the search term, the title of the document, and finally the length of the document. The period (".") alone at the end marks the end of results. Much more information may be retrieved while searching by using the "-x" and "-H" switches (see SWISH-RUN) and by using Document Properties (see SWISH-CONFIG). Phrase Searching To search for a phrase in a document use double-quotes to delimit your search terms. (The default phrase delimiter is set in src/swish.h.) You must protect the quotes from the shell. For example, under Unix: swish-e -w '"this is a phrase" or (this and that)' swish-e -w 'meta1=("this is a phrase") or (this and that)' Or under Windows command.com shell. swish-e -w \"this is a phrase\" or (this and that) The phrase delimiter can be set with the "-P" switch. Boolean Searching You can use the Boolean operators and, or, or not in searching. Without these Boolean, Swish-e will assume you're anding the words together. Here are some examples: swish-e -w 'apples oranges' swish-e -w 'apples and oranges' ( Same thing ) swish-e -w 'apples or oranges' swish-e -w 'apples or oranges not juice' -f myIndex retrieves first the files that contain both the words "apples" and "oranges"; then among those the ones that do not contain the word "juice" A few others to ponder: swish-e -w 'apples and oranges or pears' swish-e -w '(apples and oranges) or pears' ( Same thing ) swish-e -w 'apples and (oranges or pears)' ( Not the same thing ) Swish processes the query left to right. See SWISH-SEARCH for more information. Context Searching The "-t" option in the search command line allows you to search for words that exist only in specific HTML tags. Each character in the string you specify in the argument to this option represents a different tag in which the word is searched; that is you can use any combinations of the following characters: H search in all tags B search in the tags t search in tags h is <H1> to <H6> (header) tags e is emphasized tags (this may be <B>, <I>, <EM>, or <STRONG>) c is HTML comment tags (<!-- ... -->) For example: # Find only documents with the word "linux" in the <TITLE> tags. swish-e -w linux -t t # Find the word "apple" in titles or comments swish-e -w apple -t tc META Tags As mentioned above, Metanames are a way to define "fields" in your documents. You can use the Metanames in your queries to limit the search to just the words contained in that META name of your document. For example, you might have a META tagged field in your documents called "subjects" and then you can search your documents for the word "foo" but only return documents where "foo" is within the "subjects" META tag. Document *Properties* are somewhat related: Properties allow the content of a META tag in a source document to be stored within the index, and that text to be returned along with search results. META tags can have two formats in your documents. <META NAME="keyName" CONTENT="some Content"> And in XML format <keyName> Some Content </keyName> If using libxml, you can optionally use a non-html tag as a metaname: <html> <body> Hello swish users! <keyName> this is meta data </keyName>. </body> This, of course, is invalid HTML. To continue with our sample Swish-e.conf file, add the following lines: # Define META tags MetaNames meta1 meta2 meta3 Reindex to include the changes: swish-e -c swish-e.conf Now search, but this time limit your search to META tag "meta1": swish-e -w 'meta1=metatest1' Again, please see SWISH-RUN and SWISH-CONFIG for complete documentation of the various indexing and searching options. Spidering and Searching with a Web form. This example demonstrates how to spider a web site and setup the included CGI script to provide a web-based search page. This example uses Perl programs included in the Swish-e distribution: spider.pl will be used for reading files from the web server, and swish.cgi will provide the web search form and display results. As an example we will index the Apache Web Server documentation installed on the local computer at http://localhost/apache_docs/index.html 1 Make a Working Directory Create a directory to store the Swish-e configuration and the Swish-e index. ~$ mkdir web_index ~$ cd web_index/ ~/web_index$ 2 Create a Swish-e Configuration file ~/web_index$ cat swish.conf # Swish-e config to index the Apache documentation # # Use spider.pl for indexing (location of spider.pl set at installation time) IndexDir spider.pl # Use spider.pl's default configuration and specify the URL to spider SwishProgParameters default http://localhost/apache_docs/index.html # Allow extra searching by title, path Metanames swishtitle swishdocpath # Set StoreDescription for each parser # to display context with search results StoreDescription TXT* 10000 StoreDescription HTML* <body> 10000 3 Generate the Index Now run swish-e to create the index: ~/web_index$ swish-e -S prog -c swish.conf Indexing Data Source: "External-Program" Indexing "spider.pl" /usr/local/lib/swish-e/spider.pl: Reading parameters from 'default' Summary for: http://localhost/apache_docs/index.html Duplicates: 4,188 (349.0/sec) Off-site links: 276 (23.0/sec) Skipped: 1 (0.1/sec) Total Bytes: 2,090,125 (174177.1/sec) Total Docs: 147 (12.2/sec) Unique URLs: 149 (12.4/sec) Removing very common words... no words removed. Writing main index... Sorting words ... Sorting 7736 words alphabetically Writing header ... Writing index entries ... Writing word text: Complete Writing word hash: Complete Writing word data: Complete 7736 unique words indexed. 5 properties sorted. 147 files indexed. 2090125 total bytes. 200783 total words. Elapsed time: 00:00:13 CPU time: 00:00:02 Indexing done! The above output is actually a mix of output from both swish-e and from spider.pl. Spider.pl reports the "Summary for: http://localhost/apache_docs/index.html". Also note that swish-e knows to find spider.pl at /usr/local/lib/swish-e/spider.pl. The script installation directory (called libexecdir) is set at configure time. You can see your setting by running swish-e -h: ~/web_index$ swish-e -h | grep libexecdir Scripts and Modules at: (libexecdir) = /usr/local/lib/swish-e This directory will be needed when setting up the CGI script in the next step. Finally, verify that the index can be searched from the command line: ~/web_index$ swish-e -w installing -m3 # SWISH format: 2.4.0 # Search words: installing # Removed stopwords: # Number of hits: 17 # Search time: 0.018 seconds # Run time: 0.050 seconds 1000 http://localhost/apache_docs/install.html "Compiling and Installing Apache" 17960 718 http://localhost/apache_docs/install-tpf.html "Installing Apache on TPF" 25734 680 http://localhost/apache_docs/windows.html "Using Apache with Microsoft Windows" 27165 . Now try limiting the search to the title: ~/web_index$ swish-e -w swishtitle=installing -m3 # SWISH format: 2.3.5 # Search words: swishtitle=installing # Removed stopwords: # Number of hits: 2 # Search time: 0.018 seconds # Run time: 0.048 seconds 1000 http://localhost/apache_docs/install-tpf.html "Installing Apache on TPF" 25734 1000 http://localhost/apache_docs/install.html "Compiling and Installing Apache" 17960 . Note that the above can also be done using the -t option: ~/web_index$ swish-e -w installing -m3 -tH 4 Setup the CGI script Swish-e does not include a web server, therefore you must use your locally installed web server. Apache is highly recommended, of course. Locate your web server's CGI directory. This may be a cgi-bin directory in your home directory or a central cgi-bin directory setup by the web server administrator. Once located copy the swish.cgi script into the cgi-bin directory. Where CGI scripts can be located depends completely on the web server used and how it is configured. See your web server's documentation or your site's administrator for additional information. This example will use a site cgi-bin directory located at /usr/lib/cgi-bin. Copy the swish.cgi script into the cgi-bin directory. Again, we will need the location of the libexecdir directory: ~/web_index$ swish-e -h | grep libexecdir Scripts and Modules at: (libexecdir) = /usr/local/lib/swish-e ~/web_index$ cd /usr/lib/cgi-bin /usr/lib/cgi-bin$ su Password: /usr/lib/cgi-bin# cp /usr/local/lib/swish-e/swish.cgi . If your operating system supports symbolic links, AND your web server allows programs to be symbolic links, then you may wish to create a link to the swish.cgi program instead. /usr/lib/cgi-bin# ln -s /usr/local/lib/swish-e/swish.cgi We need to tell the swish.cgi script where to look for the index created in the previous step. It's also recommended to enter the path to the swish-e binary, otherwise the swish.cgi script will look for the binary in the PATH, and that may change when running under the CGI environment. Here's the configuration file: /usr/lib/cgi-bin# cat .swishcgi.conf return { title => 'Search Apache Documentation', swish_binary => '/usr/local/bin/swish-e', swish_index => '/home/moseley/web_index/index.swish-e', } Now, test the script from the command line as a normal user: /usr/lib/cgi-bin# exit exit /usr/lib/cgi-bin$ ./swish.cgi | head Content-Type: text/html; charset=ISO-8859-1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> Search Apache Documentation Notice that the CGI script returns the HTTP header (Content-Type) and the body of the web page, just like a well behaved CGI scrip should do. Now test using the web server (this step depends on the location of your cgi-bin directory). This example uses the "GET" command that is part of the LWP Perl library, but any web browser can run this test. /usr/lib/cgi-bin$ GET http://localhost/cgi-bin/swish.cgi | head Search Apache Documentation

The script reports errors to stderr, so consult the web server's error log if problems occur. The message "Service currently unavailable" reported by running swish.cgi typically indicates a configuration error, and the exact problem will be listed in the web server's error log. Detailed instructions on using the swish.cgi script and debugging tips can be found by running: $ perldoc swish.cgi while in the cgi-bin directory where swish.cgi was copied. The spider program spider.pl also has a large number of configuration options. Documentation is also available in the directory $prefix/share/doc/swish-e or at http://swish-e.org. Note: Also check out the search.cgi script found at the same location as the swish.cgi script. This is more of a skeleton script for those that want to create a custom search script. Now you are ready to search. Indexing Other Types of Documents - Filtering Swish-e can only index HTML, XML and text documents. In order to index other documents such as PDF or MS Word documents you must use a utility to convert or "filter" those documents. How documents are filtered with Swish-e has changed over time. This has resulting in a bit of confusion. It's also a somewhat complex process as different programs need to communicate with each other. You may wish to read the Swish-e FAQ question on filtering before continuing here. How Do I filter documents? Filtering Overview There's two ways to filter documents with Swish-e. Both are described in the SWISH-CONFIG man page. They are using the FileFilter directive and the SWISH::Filter perl module. The FileFilter directive is a general purpose method of filtering. It allows running of an external program for each document processed (based on file extension), and requires. The external programs open an input file, convert as needed, and write their output to standard output. Previous versions of Swish-e (before 2.4.0) used a collection of filter programs for converting files such as PDF or MS Word documents. The external programs call other program do to the work of filtering (e.g. pdftotext to extract the contents from PDF files). Although these filter programs are still included with the Swish-e distribution as examples, it is not recommended to use the SWISH::Filter method instead. One disadvantage of using FileFilter is that the filter is called once for every document that needs to be filtered. This can slow down the indexing process. The SWISH::Filter Perl module works very much like the old system and uses the same helper programs. But, it provides a single interface for filtering all types of documents. The advantage of SWISH::Filter is that it is built into the program used for spidering web sites (spider.pl), so all that's required is installing the filter programs that do the actual work of filtering (e.g. catdoc, xpdf). (The Windows binary includes some of the filter programs.) But, Swish-e will not use SWISH::Filter by default when using the file system method of indexing. To use SWISH::Filter when indexing by file system method (-S fs) you can use a FileFilter directive with the "swish_filter.pl" filter (which is just a program that uses SWISH::Filter), or use the -S prog method of indexing and use the DirTree.pl program for fetching documents. DirTree.pl is included with the Swish-e distribution and is designed to work with SWISH::Filter. Using DirTree.pl will likely be faster way to index since the SWISH::Filter set of modules do not need to be compiled for every document that needs to be filtered. See the contents of swish_filter.pl and DirTree.pl for specifics on their use. Filtering Examples The FileFilter directive can be used in your config file to convert documents based on their extension. This is the old way of filtering, but provides an easy way to add filters to swish-e. For example: FileFilter .pdf pdftotext "'%p' -" IndexContents TXT* .pdf will cause all .pdf files to be filtered through the pdftotext program (part of the Xpdf package), and to parse the resulting output from pdftotext with the text ("TXT") parser. The other ways to filter documents is to use a -S prog program and convert the documents before passing them onto Swish-e. For example, spider.pl makes use of the Perl module included with the Swish-e distribution called SWISH::Filter. SWISH::Filter is passed a document and the document's content type and then looks for modules and utilities to convert the document into one of the types that Swish-e can index. Swish-e comes ready to index PDF, MS Word, MP3 ID3 tags, and MS Excel file types. But these filters need extra modules or tools to do the actual conversion. For example, the Swish-e distribution includes a module called SWISH::Filter::Pdf2HTML that uses the pdftotext and pdfinfo utilities provided by the Xpdf package. This means that if you are using spider.pl to spider your web site and you wish to index PDF documents, all that is needed is to install the Xpdf package and Swish-e (with the help of spider.pl) will begin indexing your PDF files. Ok, so what does all that mean? For a very simple site you should be able to run this: $ /usr/local/lib/swish-e/spider.pl default http://localhost/ | swish-e -S prog -i stdin which is running the spider with default spider settings, indexing the Web server on localhost and piping its output into Swish-e using default indexing settings. Documents will be filtered automatically if you have the required helper applications installed. Most people will not want to just use the default settings (for one thing the spider will take a while because its default is to delay a few seconds between every request). So, read the documentation for spider.pl to learn how to use a spider config file. And also read SWISH-CONFIG to learn about what configuration options can be used with Swish-e. The SWISH::Filter documentation provides more details on filtering and hints for debugging problems when filtering. Document Info $Id: INSTALL.pod,v 1.36.2.5 2004/01/30 19:47:17 whmoseley Exp $ . 0wish-e.Include]ACCONFIG.H##+Np+2%2/* src/acconfig.h.in. Generated from configure.in by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define to 1 if using `alloca.c'. */ /* #undef C_ALLOCA */ /* Check for groups with AC_TYPE_GETGROUPS */ /* #undef GETGROUPS_T */ /* Define to 1 if you have the `access' function. */ #define HAVE_ACCESS 1 /* Define to 1 if you have `alloca', as a function or macro. */ /* #undef HAVE_ALLOCA */ /* Define to 1 if you have and it should be used (not on Ultrix). */ /* #undef HAVE_ALLOCA_H */ /* Get time of day */ /* #undef HAVE_BSDGETTIMEOFDAY */ /* Define to 1 if you have the `clock' function. */ #define HAVE_CLOCK 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ /* #undef HAVE_DOPRNT */ /* Define to 1 if you have the `fork' function. */ /* #undef HAVE_FORK */ /* Define to 1 if your system has a working `getgroups' function. */ /* #undef HAVE_GETGROUPS */ /* Define to 1 if you have the `getrusage' function. */ /* #undef HAVE_GETRUSAGE */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `m' library (-lm). */ /* #undef HAVE_LIBM */ /* Define to 1 if you have the `snprintf' library (-lsnprintf). */ /* #undef HAVE_LIBSNPRINTF */ /* Libxml2 support included */ /* #undef HAVE_LIBXML2 */ /* Define to 1 if you have the `lstat' function. */ #define HAVE_LSTAT 1 /* Define to 1 if you have the `memcpy' function. */ #define HAVE_MEMCPY 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `mkstemp' function. */ #define HAVE_MKSTEMP 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_NDIR_H */ /* Perl REGEX library */ /* #undef HAVE_PCRE */ /* Define to 1 if you have the `regcomp' function. */ /* #undef HAVE_REGCOMP */ /* Define to 1 if you have the `re_comp' function. */ /* #undef HAVE_RE_COMP */ /* Define to 1 if you have the `setenv' function. */ #define HAVE_SETENV 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_STDINT_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strftime' function. */ #define HAVE_STRFTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PARAM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_RESOURCE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_STAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIMEB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TYPES_H */ /* Define to 1 if you have that is POSIX.1 compatible. */ /* #undef HAVE_SYS_WAIT_H */ /* Define to 1 if you have the `times' function. */ #define HAVE_TIMES 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `vfork' function. */ #define HAVE_VFORK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VFORK_H */ /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_WINDOWS_H */ /* Define to 1 if `fork' works. */ /* #undef HAVE_WORKING_FORK */ /* Define to 1 if `vfork' works. */ #define HAVE_WORKING_VFORK 1 /* Do we have zlib */ #define HAVE_ZLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_ZLIB_H 1 /* (developers only) checks for memory consistency on alloc/free using guards */ /* #undef MEM_DEBUG */ /* (developers only) gives memory statistics (bytes allocated, calls, etc) */ /* #undef MEM_STATISTICS */ /* (developers only) checks for unfreed memory, and where it is allocated */ /* #undef MEM_TRACE */ /* Get time of day */ /* #undef NO_GETTOD */ /* Name of package */ #define PACKAGE "swish-e" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" /* Define to the version of this package. */ #define PACKAGE_VERSION "" /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define to 1 if the `S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Experimental BTREE support */ /* #undef USE_BTREE */ /* Version number of package */ #define VERSION "2.4.2" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `int' if doesn't define. */ /* #undef gid_t */ /* Define to `int' if does not define. */ /* #undef pid_t */ /* Define to `unsigned' if does not define. */ /* #undef size_t */ /* Define to `int' if doesn't define. */ /* #undef uid_t */ /* Define as `fork' if `vfork' does not work. */ /* #undef vfork */ 0[swish-e.Include]array.h##K2ZK/* */ typedef struct ARRAY_Page { unsigned long next; /* Next Page */ unsigned long page_number; int modified; int in_use; struct ARRAY_Page *next_cache; unsigned char data[0]; /* Page data */ } ARRAY_Page; #define ARRAY_CACHE_SIZE 97 typedef struct ARRAY { unsigned long root_page; int page_size; struct ARRAY_Page *cache[ARRAY_CACHE_SIZE]; int levels; FILE *fp; } ARRAY; ARRAY *ARRAY_Create(FILE *fp); ARRAY *ARRAY_Open(FILE *fp, unsigned long root_page); unsigned long ARRAY_Close(ARRAY *bt); int ARRAY_Put(ARRAY *b, int index, unsigned long value); unsigned long ARRAY_Get(ARRAY *b, int index); 0[swish-e.Include]bash.h##CM2dF/* For swish */ #define xmalloc emalloc #define xfree efree #define xrealloc erealloc #define FS_EXISTS 0x1 #ifdef _WIN32 #define FS_EXECABLE 0x1 #else #define FS_EXECABLE 0x2 #endif /* horrible Win32 hack */ #if defined _WIN32 || defined(__VMS) /* Fake group functions... */ #define GETGROUPS_T int #define getegid() 0 #define geteuid() 0 #define getgid() 0 #endif #define savestring(x) (char *)strcpy((char *)xmalloc(1 + strlen (x)), (x)) extern int file_status(const char *name); extern int absolute_program(const char *string); extern char *get_next_path_element(const char *path_list, int *path_index_pointer); extern char *make_full_pathname(const char *path, const char *name, int name_len); 0[swish-e.Include]btree.h##[HO2gG}à/* */ typedef struct BTREE_Page { unsigned long next; /* Next Page */ unsigned long prev; /* Previous Page */ unsigned int size; /* Size of page */ unsigned int n; /* Number of keys in page */ unsigned int flags; unsigned int data_end; unsigned long page_number; int modified; int in_use; struct BTREE_Page *next_cache; unsigned char data[0]; /* Page data */ } BTREE_Page; #define BTREE_CACHE_SIZE 97 typedef struct BTREE { unsigned long root_page; int page_size; struct BTREE_Page *cache[BTREE_CACHE_SIZE]; int levels; unsigned long tree[1024]; /* Values for sequential reading */ unsigned long current_page; unsigned long current_position; FILE *fp; } BTREE; BTREE *BTREE_Create(FILE *fp, unsigned int size); BTREE *BTREE_Open(FILE *fp, int size, unsigned long root_page); unsigned long BTREE_Close(BTREE *bt); int BTREE_Insert(BTREE *b, unsigned char *key, int key_len, unsigned long data_pointer); long BTREE_Search(BTREE *b, unsigned char *key, int key_len, unsigned char **found, int *found_len, int exact_match); long BTREE_Next(BTREE *b, unsigned char **found, int *found_len); int BTREE_Update(BTREE *b, unsigned char *key, int key_len, unsigned long new_data_pointer); 0[swish-e.Include]check.h## P2Ax-/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ int isokword (SWISH *,char *,IndexFILE *); int getdoctype (char *filename, struct IndexContents *indexcontents); struct StoreDescription *hasdescription (int, struct StoreDescription *); 0wish-e.Include]compress.h##R2!V1 /* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ int sizeofcompint(int number); void compress1(int num, FILE *fp, int (*f_putc)(int , FILE *)); /* unsigned char *compress2(int num, unsigned char *buffer);*/ unsigned char *compress3(int num, unsigned char *buffer); int uncompress1(FILE *fp, int (*f_getc)(FILE *fp)); int uncompress2(unsigned char **buffer); unsigned long PACKLONG(unsigned long num); void PACKLONG2(unsigned long num, unsigned char *buffer); unsigned long UNPACKLONG(unsigned long num); unsigned long UNPACKLONG2(unsigned char *buffer); void compress_location_values(unsigned char **buf,unsigned char **flagp,int filenum,int frequency, int *position); void compress_location_positions(unsigned char **buf,unsigned char *flag,int frequency, int *position); void uncompress_location_values(unsigned char **buf,unsigned char *flag, int *filenum,int *frequency); void uncompress_location_positions(unsigned char **buf, unsigned char flag, int frequency, int *position); void CompressCurrentLocEntry(SWISH *, ENTRY *); int compress_worddata(unsigned char *,int ); void uncompress_worddata(unsigned char **,int *, int); void remove_worddata_longs(unsigned char *,int *); /* Here is the worst case size for a compressed number ** MAXINTCOMPSIZE stands for MAXimum INTeger COMPressed SIZE ** ** There are many places in the code in which we allocate ** space for a compressed number. In the worst case this size is 5 ** for 32 bit number, 10 for a 64 bit number. ** ** The way this compression works is reserving the first bit ** in each byte to store a flag. The flag is set in all bytes ** except for the last one. ** This only gives 7 bits per byte to store the number. ** ** For example, to store 1000 (binary 1111101000) we will get: ** ** 1st byte 2th byte ** 10000111 01101000 ** ^ ^ ** | | ** | Flag to indicate that this is tha last byte ** | ** Flag set to indicate that more bytes follow this one ** ** So, to compress a 32 bit number we need 5 bytes and for ** a 64 bit number we will use 10 bytes for the worst case */ #define MAXINTCOMPSIZE (((sizeof(int) * 8) / 7) + (((sizeof(int) * 8) % 7) ? 1 : 0)) 0[swish-e.Include]config.h##S2 g8/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. **-------------------------------------------------------------------------- ** Config file edited by Roy Tennant 2/20/96 ** Config file edited by Giulia Hill 2/27/97 to increase lenght of ** words that are indexed ** Added IGNORELASTCHAR ** G. Hill 3/12/97 ghill@library.berkeley.edu ** ** Added OKNOMETA to allow no failing in case the META name is ** not listed in the config.h ** G. Hill 4/15/97 ghill@library.berkeley.edu ** ** Added IGNOREFIRSTCHAR ** G.Hill 10/16/97 ghill@library.berkeley.edu **----------------------------------------------------------------------- ** The following are user-definable options that you can change ** to fine-tune SWISH's default options. ** ** 2001-03-13 rasc moved search boolean words from swish.h ** ** 2001-05-23 wsm added ranking weights ** */ #ifdef __VMS #define PROPFILE_EXTENSION "_prop" #define WORDDATA_EXTENSION "_wdata" #define PRESORTED_EXTENSION "_psort" #define BTREE_EXTENSION "_btree" #define ARRAY_EXTENSION "_array" #define HASHFILE_EXTENSION "_file" #else #define PROPFILE_EXTENSION ".prop" #define WORDDATA_EXTENSION ".wdata" #define PRESORTED_EXTENSION ".psort" #define BTREE_EXTENSION ".btree" #define ARRAY_EXTENSION ".array" #define HASHFILE_EXTENSION ".file" #endif /* MIN_PROP_COMPRESS_SIZE sets the limit for which properties are compressed * must be compiled with zlib. */ #define MIN_PROP_COMPRESS_SIZE 100 /* Same for worddata */ #define MIN_WORDDATA_COMPRESS_SIZE 100 /* This is the character used to replace UTF-8 characters that cannot be * converted to 8859-1 Latin-1 character */ #define ENCODE_ERROR_CHAR ' ' /* Defines the file extension to use on the property file. */ #define MAX_SORT_STRING_LEN 100 /* MAX_SORT_STRING_LEN defines the max string length to use * for sorting properties. Should be long enough to sort ALL * file paths or URLs. Useful if using StoreDescription to store * a large amount of text. */ #define USE_DOCPATH_AS_TITLE 1 /* If USE_DOCPATH_AS_TITLE is defined then documents that do not have * a title defined (xml and txt, and HTML documents without a title) * will display the document path as the title in results. * Documents without a title will sort as a blank title, and not * by the document path regardless of this setting. This is a change * from versions previous to 2.2. */ #ifdef __VMS #define USE_TEMPFILE_EXTENSION "_temp" #else #define USE_TEMPFILE_EXTENSION ".temp" #endif /* If USE_TMPFILE_EXTENSION is defined then swish will append the supplied * extension onto the index files during indexing, and when indexing is * complete will remove the extension by renaming the files. * This has two important uses when an index file already exists (and is in use): * 1) the old index can be used while indexing is running * 2) a failure during indexing will not destroy the existing index * * Note: This is used instead of a normal temporary file because possible limitation * in renaming across file systems. Therefore, the temporary index files are * stored in the same directory as the final index files. */ #define TEMP_FILE_PREFIX "swtmp" /* TEMP_FILE_PREFIX is prepended to all temporary files. Makes them * easier to find. */ #define ALLOW_HTTP_INDEXING_DATA_SOURCE 1 #define ALLOW_FILESYSTEM_INDEXING_DATA_SOURCE 1 #define ALLOW_EXTERNAL_PROGRAM_DATA_SOURCE 1 /* These symbols allow compile-time elimination of indexing ** data sources. Any Data Source that is allowed by these ** symbols can be selected for indexing from the command line. ** Comment out any options you do not want to support, but ** be sure to leave at least one option. */ #define DEFAULT_HTTP_DELAY 5 /* DEFAULT_HTTP_DELAY is the default delay when using swishspider -S http */ #define DATE_FORMAT_STRING "%Y-%m-%d %H:%M:%S %Z" /* default format string for dates */ #define INDEXPERMS 0644 /* After SWISH generates an index file, it changes the permissions ** of the file to this mode. Change to the mode you like ** (note that it must be an octal number). If you don't want ** permissions to be changed for you, comment out this line. */ #define NO_PLIMIT 101 #define PLIMIT NO_PLIMIT #define FLIMIT 10000 /* SWISH uses these parameters to automatically mark words as ** being too common while indexing. For instance, if I defined PLIMIT ** as 80 and FLIMIT as 256, SWISH would define a common word as ** a word that occurs in over 80% of all indexed files and over ** 256 files. Making these numbers lower will most likely make your ** index files smaller. Making PLIMIT and FLIMIT small will also ** ensure that searching consumes only so much CPU resources. */ #define VERBOSE 1 /* You can define VERBOSE to be a number from 0 to 4. 0 is totally ** silent operation. The default before swish 2.2 was 3 */ #define _AND_WORD "and" #define _OR_WORD "or" #define _NOT_WORD "not" /* ** these are the default boolean operator words used by swish search */ #define DEFAULT_RULE AND_RULE /* If a list of search words is specified without booleans, ** SWISH will assume they are connected by a default rule. ** This can be AND_RULE or OR_RULE. */ #define TITLETOPLINES 12 /* This is how many lines deep SWISH will look into an HTML file to ** attempt to find a tag. This has no effect when using the libxml2 parser. */ #define MINWORDLIMIT 1 /* This is the minimum length of a word. Anything shorter will not ** be indexed. ** Do not change it here. Use MinWordLimit in config file */ #define MAXWORDLIMIT 40 /* This is the maximum length of a word. Anything longer will not ** be indexed. ** Do not change it here. Use MaxWordLimit in config file */ #define CONVERTHTMLENTITIES 1 /* If defined as 1, all entities in indexed ** words will be converted to an ASCII equivalent. For instance, ** with this feature you can index the word "resumé" or ** "resumé" and it will be indexed as the word "resume". ** 2001-01 Do not change it here. Use ConvertHTMLEtities Yes/No in ** config file */ #define IGNOREALLV 0 #define IGNOREALLC 0 #define IGNOREALLN 0 /* If IGNOREALLV is 1, words containing all vowels won't be indexed. ** If IGNOREALLC is 1, words containing all consonants won't be indexed. ** If IGNOREALLN is 1, words containing all digits won't be indexed. ** Define as 0 to allow words with consistent characters. ** Vowels are defined as "aeiou", digits are "0123456789". */ #define IGNOREROWV 60 #define IGNOREROWC 60 #define IGNOREROWN 60 /* IGNOREROWV is the maximum number of consecutive vowels a word can have. ** IGNOREROWC is the maximum number of consecutive consonants a word can have. ** IGNOREROWN is the maximum number of consecutive digits a word can have. ** Vowels are defined as "aeiou", digits are "0123456789". */ #define IGNORESAME 100 /* IGNORESAME is the maximum times a character can repeat in a word. */ /* Dec 6, 2001 - Grabbed "letters" from /usr/local/share/aspell/iso8859-1.dat (http://aspell.sf.net) - moseley */ #define WORDCHARS "0123456789abcdefghijklmnopqrstuvwxyz" /* #define WORDCHARS "abcdefghijklmnopqrstuvwxyz߃ܞ0123456789" */ /* WORDCHARS is a string of characters which SWISH permits to ** be in words. Words are defined by these characters. ** ** Also note that if you specify the backslash character (\) or ** double quote (") you need to type a backslash before them to ** make the compiler understand them. */ #define BEGINCHARS "0123456789abcdefghijklmnopqrstuvwxyz" /* Of the characters that you decide can go into words, this is ** a list of characters that words can begin with. It should be ** a subset of (or equal to) WORDCHARS. */ #define ENDCHARS "0123456789abcdefghijklmnopqrstuvwxyz" /* This is the same as BEGINCHARS, except you're testing for ** valid characters at the ends of words. */ #define IGNORELASTCHAR "" /* Array that contains the char that, if considered valid in the middle of ** a word need to be disreguarded when at the end. It is important to also ** set the given char's in the ENDCHARS array, otherwise the word will not ** be indexed because considered invalid. ** If none just leave the empty list "". Do not erase the line. */ #define IGNOREFIRSTCHAR "" /* Array that contains the char that, if considered valid in the middle of ** a word need to be disreguarded when at the beginning. It is important to also ** set the given char's in the BEGINCHARS array, otherwise the word will not ** be indexed because considered invalid. ** If none just leave the empty list "". Do not erase the line. */ #define IGNORE_STOPWORDS_IN_QUERY 1 /* Added JM 1/10/98. Setting this to 0 (default) causes a stopword in ** an AND_RULE search to create an empty result. Setting it to 1 simply ** ignores the stopwords and does a search on the remaining words. */ #define INDEXTAGS 0 /* Normally, all data in tags in HTML files (except for words in ** comments or meta tags) is ignored. If you want to index HTML files with the ** text within tags and all, define this to be 1 and not 0. ** NOTE: if you set it to 1 you will not be able to do context nor ** metaNames searches, as tags are just plain text with no specific ** meaning. */ // #define BLANK_PROP_VALUE " *BLANK*" /* This effects how blank properties are stored ** Normally, blank properties are treated as if they were not even contained int ** the document. That is: ** <meta name="author" content=""> ** is ignored, and no "author" property is stored for that docment. ** If BLANK_PROP_VALUE is set, then blank properties will be stored ** but using the string provided as the property value. ** If you use a leading space, then these properties will sort ** before other properties (since leading whitespace is removed from ** properties), and after documents that do not include the property */ #define RANK_TITLE 7 #define RANK_HEADER 5 #define RANK_META 3 #define RANK_COMMENTS 1 #define RANK_EMPHASIZED 0 /* This symbols affect the weights applied during ranking. Note that they are added ** together and added to a base rank of 1.0 -- thus defining a rank with a value of ** 2.0 really means it is ranked (1.0 + 2.0) times greater than normal. ** A value of 0.0 applies no additional ranking boost. Note that RANK_COMMENTS only ** applies if you are indexing comment. Be sure you understand how these interact ** in getrank; don't just go changing these values! */ #define SWAP_LOC_DEFAULT 0 /* 2001/08 jmruiz -- Default chunk size - Index will work with blocks of files. This number specifies when to coalesce locations to save memory */ #define INDEX_DEFAULT_CHUNK_SIZE 10000 /* 2001/08 jmruiz -- Default optimal zone size for temporal storage of locations */ /* 1<<23 is 8 MB */ #define INDEX_DEFAULT_OPTIMAL_CHUNK_ZONE_SIZE_FOR_LOCATIONS 1<<23 /* 2002/06 Number of swap loc files (-e) */ #define MAX_LOC_SWAP_FILES 377 /* 2001/08 jmruiz -- To avoid emalloc/erealloc in some routines some stack arrays have been added. This is their default size */ #define MAX_STACK_POSITIONS 1024 /* 2001/08 jmruiz -- Do not change this (it must be a unsigned number) */ /* This is the maximum size of a block of coalesced locations */ #define COALESCE_BUFFER_MAX_SIZE 1<<18 /* (256 KB) */ /* 2003/06 jmruiz -- Snowball's Stemmers activation */ #define SNOWBALL 1 /* 2003/08 jmruiz -- Use cache for stemming */ #define STEMCACHE 1 /* 2001/08 jmruiz -- File System sort flag - 0 means that filenames ** will not be indexed - 1 means that filenames will be indexed */ #define SORT_FILENAMES 0 /* 2001/10 jmruiz -- Added BTREE schema to store words */ //#define USE_BTREE /* 09/00 Jose Ruiz. When set to 1 part of the info is swapped to disk ** to save memory in the index proccess ** Do not change it. You can activate this option through the command ** line (option -e) */ /* Set this to 1 if you are compiling under Win32 define _WIN32 1 */ /* --- BEGIN PORTING-RELATED SYMBOLS --- */ #ifdef _WIN32 #define NO_SYMBOLIC_FILE_LINKS /* Win32 has no symbolic links */ #endif #ifdef __VMS #define NO_SYMBOLIC_FILE_LINKS /* VMS has no symbolic links */ #endif /* Default Delimiter of phrase search */ #define PHRASE_DELIMITER_CHAR '"' /* * Binary files must be open with the "b" option under Win32, so all * fopen() calls to index files have to go through these routines to * keep the code portable. * Note: text files should be opened normally, without the "b" option, * otherwise end-of-line processing is not done correctly (on Win32). */ #define F_READ_BINARY "rb" #define F_WRITE_BINARY "wb" #define F_READWRITE_BINARY "rb+" #define F_READ_TEXT "r" #define F_WRITE_TEXT "w" #define F_READWRITE_TEXT "r+" /* #define NEXTSTEP */ /* You may need to define this if compiling on a NeXTstep machine. */ /* --- END PORTING-RELATED SYMBOLS --- */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]date_time.h#�������������������#�����������������-U2��ߟ�����������������������������������������������������������������������������������������������������������/* $Id: date_time.h,v 1.3 2001/06/22 22:49:16 meier Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** Date / Time routines ** ** 2001-03-20 rasc own module for this routine (from swish.c) ** */ double TimeElapsed(void); double TimeCPU(void); char *getTheDateISO(void); ������������������������������������������0[swish-e.Include]db.h#�������������������#������������������GV2��!V1����������������������������������������������������������������������������������������������������������$�/* ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** ** 2001-01 jose initial coding ** */ #ifndef __HasSeenModule_DB #define __HasSeenModule_DB 1 /* Possible Open File modes */ typedef enum { DB_CREATE, DB_READ, DB_READWRITE } DB_OPEN_MODE; void initModule_DB (SWISH *); void freeModule_DB (SWISH *); void write_header(SWISH *, INDEXDATAHEADER *, void *, char *, int, int, int, int); void update_header(SWISH *, void *, int, int ); void write_index(SWISH *, IndexFILE *); void write_word(SWISH *, ENTRY *, IndexFILE *); #ifdef USE_BTREE void update_wordID(SWISH *, ENTRY *, IndexFILE *); void delete_worddata(SWISH *, long, IndexFILE *); #endif void build_worddata(SWISH *, ENTRY *); void write_worddata(SWISH *, ENTRY *, IndexFILE *); long read_worddata(SWISH * sw, ENTRY * ep, IndexFILE * indexf, unsigned char **bufer, int *sz_buffer); void add_worddata(SWISH *sw, unsigned char *buffer, int sz_buffer); void write_pathlookuptable_to_header(SWISH *, int id, INDEXDATAHEADER *header, void *DB); void write_MetaNames (SWISH *, int id, INDEXDATAHEADER *header, void *DB); int write_integer_table_to_header(SWISH *, int id, int table[], int table_size, void *DB); void read_header(SWISH *, INDEXDATAHEADER *header, void *DB); void parse_MetaNames_from_buffer(INDEXDATAHEADER *header, char *buffer); void parse_pathlookuptable_from_buffer(INDEXDATAHEADER *header, char *buffer); void parse_integer_table_from_buffer(int table[], int table_size, char *buffer); char *getfilewords(SWISH *sw, int, IndexFILE *); void setTotalWordsPerFile(IndexFILE *,int ,int ); #ifdef USE_BTREE void getTotalWordsPerFile(SWISH *, IndexFILE *, int ,int *); #else void getTotalWordsPerFile(IndexFILE *, int ,int *); #endif /* Common DB api */ void *DB_Create (SWISH *sw, char *dbname); void *DB_Open (SWISH *sw, char *dbname, int mode); void DB_Close(SWISH *sw, void *DB); void DB_Remove(SWISH *sw, void *DB); int DB_InitWriteHeader(SWISH *sw, void *DB); int DB_EndWriteHeader(SWISH *sw, void *DB); int DB_WriteHeaderData(SWISH *sw, int id, unsigned char *s, int len, void *DB); int DB_InitReadHeader(SWISH *sw, void *DB); int DB_ReadHeaderData(SWISH *sw, int *id, unsigned char **s, int *len, void *DB); int DB_EndReadHeader(SWISH *sw, void *DB); int DB_InitWriteWords(SWISH *sw, void *DB); long DB_GetWordID(SWISH *sw, void *DB); int DB_WriteWord(SWISH *sw, char *word, long wordID, void *DB); #ifdef USE_BTREE int DB_UpdateWordID(SWISH *sw, char *word, long wordID, void *DB); int DB_DeleteWordData(SWISH *sw,long wordID, void *DB); #endif int DB_WriteWordHash(SWISH *sw, char *word, long wordID, void *DB); long DB_WriteWordData(SWISH *sw, long wordID, unsigned char *worddata, int data_size, int saved_bytes, void *DB); int DB_EndWriteWords(SWISH *sw, void *DB); int DB_InitReadWords(SWISH *sw, void *DB); int DB_ReadWordHash(SWISH *sw, char *word, long *wordID, void *DB); int DB_ReadFirstWordInvertedIndex(SWISH *sw, char *word, char **resultword, long *wordID, void *DB); int DB_ReadNextWordInvertedIndex(SWISH *sw, char *word, char **resultword, long *wordID, void *DB); long DB_ReadWordData(SWISH *sw, long wordID, unsigned char **worddata, int *data_size, int *saved_bytes, void *DB); int DB_EndReadWords(SWISH *sw, void *DB); #ifdef USE_BTREE int DB_InitWriteSortedIndex(SWISH *sw, void *DB, int n_props ); #else int DB_InitWriteSortedIndex(SWISH *sw, void *DB ); #endif int DB_WriteSortedIndex(SWISH *sw, int propID, unsigned char *data, int sz_data,void *DB); int DB_EndWriteSortedIndex(SWISH *sw, void *DB); int DB_InitReadSortedIndex(SWISH *sw, void *DB); int DB_ReadSortedIndex(SWISH *sw, int propID, unsigned char **data, int *sz_data,void *DB); int DB_ReadSortedData(SWISH *sw, int *data,int index, int *value, void *DB); int DB_EndReadSortedIndex(SWISH *sw, void *DB); int DB_WriteFileNum(SWISH *sw, int filenum, unsigned char *filedata,int sz_filedata, void *DB); int DB_ReadFileNum(SWISH *sw, int *filenum, unsigned char *filedata,int sz_filedata, void *DB); int DB_CheckFileNum(SWISH *sw, int filenum, void *DB); int DB_RemoveFileNum(SWISH *sw, int filenum, void *DB); int DB_InitWriteProperties(SWISH *sw, void *DB); void DB_WriteProperty( SWISH *sw, IndexFILE *indexf, FileRec *fi, int propID, char *buffer, int buf_len, int uncompressed_len, void *db); void DB_WritePropPositions(SWISH *sw, IndexFILE *indexf, FileRec *fi, void *db); void DB_ReadPropPositions(SWISH *sw, IndexFILE *indexf, FileRec *fi, void *db); char *DB_ReadProperty(SWISH *sw, IndexFILE *indexf, FileRec *fi, int propID, int *buf_len, int *uncompressed_len, void *db); void DB_Reopen_PropertiesForRead(SWISH *sw, void *DB); #ifdef USE_BTREE int DB_WriteTotalWordsPerFile(SWISH *sw, int idx, int wordcount, void *DB); int DB_ReadTotalWordsPerFile(SWISH *sw, int idx, int *wordcount, void *DB); #endif struct MOD_DB { char *DB_name; /* short name for data source */ void * (*DB_Create) (SWISH *sw, char *dbname); void * (*DB_Open) (SWISH *sw, char *dbname, int mode); void (*DB_Close) (void *DB); void (*DB_Remove) (void *DB); int (*DB_InitWriteHeader) (void *DB); int (*DB_WriteHeaderData) (int id, unsigned char *s, int len, void *DB); int (*DB_EndWriteHeader) (void *DB); int (*DB_InitReadHeader) (void *DB); int (*DB_ReadHeaderData) (int *id, unsigned char **s, int *len, void *DB); int (*DB_EndReadHeader) (void *DB); int (*DB_InitWriteWords) (void *DB); long (*DB_GetWordID) (void *DB); int (*DB_WriteWord) (char *word, long wordID, void *DB); #ifdef USE_BTREE int (*DB_UpdateWordID)(char *word, long new_wordID, void *DB); int (*DB_DeleteWordData)(long wordID, void *DB); #endif int (*DB_WriteWordHash) (char *word, long wordID, void *DB); long (*DB_WriteWordData) (long wordID, unsigned char *worddata, int data_size, int saved_bytes, void *DB); int (*DB_EndWriteWords) (void *DB); int (*DB_InitReadWords) (void *DB); int (*DB_ReadWordHash) (char *word, long *wordID, void *DB); int (*DB_ReadFirstWordInvertedIndex) (char *word, char **resultword, long *wordID, void *DB); int (*DB_ReadNextWordInvertedIndex) (char *word, char **resultword, long *wordID, void *DB); long (*DB_ReadWordData) (long wordID, unsigned char **worddata, int *data_size, int *saved_bytes, void *DB); int (*DB_EndReadWords) (void *DB); int (*DB_WriteFileNum) (int filenum, unsigned char *filedata,int sz_filedata, void *DB); int (*DB_ReadFileNum) (int *filenum, unsigned char *filedata,int sz_filedata, void *DB); int (*DB_CheckFileNum) (int filenum, void *DB); int (*DB_RemoveFileNum) (int filenum, void *DB); #ifdef USE_BTREE int (*DB_InitWriteSortedIndex) (void *DB, int n_props); #else int (*DB_InitWriteSortedIndex) (void *DB); #endif int (*DB_WriteSortedIndex) (int propID, unsigned char *data, int sz_data,void *DB); int (*DB_EndWriteSortedIndex) (void *DB); int (*DB_InitReadSortedIndex) (void *DB); int (*DB_ReadSortedIndex) (int propID, unsigned char **data, int *sz_data,void *DB); int (*DB_ReadSortedData) (int *data,int index, int *value, void *DB); int (*DB_EndReadSortedIndex) (void *DB); int (*DB_InitWriteProperties) (void *DB); void (*DB_WriteProperty)( IndexFILE *indexf, FileRec *fi, int propID, char *buffer, int buf_len, int uncompressed_len, void *db); void (*DB_WritePropPositions)(IndexFILE *indexf, FileRec *fi, void *db); void (*DB_ReadPropPositions)(IndexFILE *indexf, FileRec *fi, void *db); char *(*DB_ReadProperty)(IndexFILE *indexf, FileRec *fi, int propID, int *buf_len, int *uncompressed_len, void *db); void (*DB_Reopen_PropertiesForRead)(void *DB); #ifdef USE_BTREE int (*DB_WriteTotalWordsPerFile)(SWISH *sw, int idx, int wordcount, void *DB); int (*DB_ReadTotalWordsPerFile)(SWISH *sw, int idx, int *wordcount, void *DB); #endif }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]db_native.h#�������������������#�����������������MX2��!V1�����������������������������������������������������������������������������������������������������������/* ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** ** 2001-01 jose initial coding ** */ #ifndef __HasSeenModule_DBNative #define __HasSeenModule_DBNative 1 #ifdef USE_BTREE #include "btree.h" #include "array.h" #include "worddata.h" #include "fhash.h" #define MAXCHARS 8 /* Only 8 are needed when BTREE is used */ #else #define MAXCHARS 266 /* 255 for chars plus ten more for other data */ #endif #define FILELISTPOS (MAXCHARS - 1) #define FILEOFFSETPOS (MAXCHARS - 2) #define HEADERPOS (MAXCHARS - 3) #define WORDPOS (MAXCHARS - 4) #define SORTEDINDEX (MAXCHARS - 5) #define ENDWORDPOS (MAXCHARS - 6) #ifdef USE_BTREE #define TOTALWORDSPERFILEPOS (MAXCHARS - 7) #define FILEHASHPOS (MAXCHARS - 8) #endif struct Handle_DBNative { /* values used by the index proccess */ /* points to the start of offsets to words in the file */ int offsetstart; SWISH *sw; /* for reporting errors back */ #ifndef USE_BTREE /* points to the start of hashoffsets to words in the file */ int hashstart; #endif /* File Offsets to words */ long offsets[MAXCHARS]; #ifndef USE_BTREE long hashoffsets[VERYBIGHASHSIZE]; int lasthashval[VERYBIGHASHSIZE]; int wordhash_counter; #endif long nextwordoffset; long lastsortedindex; long next_sortedindex; int worddata_counter; #ifndef USE_BTREE long *wordhashdata; /* Hash array to improve wordhashdata performance */ struct numhash { int index; struct numhash *next; } *hash[BIGHASHSIZE]; MEM_ZONE *hashzone; #endif int num_words; DB_OPEN_MODE mode; char *dbname; #ifndef USE_BTREE /* ramdisk to store words */ struct ramdisk *rd; #endif /* Index FILE handle as returned from fopen */ /* Pointers to words write/read functions */ long (*w_tell)(FILE *); size_t (*w_write)(const void *, size_t, size_t, FILE *); int (*w_seek)(FILE *, long, int); size_t (*w_read)(void *, size_t, size_t, FILE *); int (*w_close)(FILE *); int (*w_putc)(int , FILE *); int (*w_getc)(FILE *); FILE *fp; FILE *prop; int tmp_index; /* These indicates the file is opened as a temporary file */ int tmp_prop; char *cur_index_file; char *cur_prop_file; long unique_ID; /* just because it's called that doesn't mean it is! */ #ifdef USE_BTREE BTREE *bt; FILE *fp_btree; int tmp_btree; char *cur_btree_file; WORDDATA *worddata; FILE *fp_worddata; int tmp_worddata; char *cur_worddata_file; FHASH *hashfile; FILE *fp_hashfile; int tmp_hashfile; char *cur_hashfile_file; FILE *fp_array; int tmp_array; char *cur_array_file; int n_presorted_array; unsigned long *presorted_root_node; unsigned long *presorted_propid; ARRAY **presorted_array; FILE *fp_presorted; int tmp_presorted; char *cur_presorted_file; unsigned long cur_presorted_propid; ARRAY *cur_presorted_array; ARRAY *totwords_array; ARRAY *props_array; #endif }; void initModule_DBNative (SWISH *); void freeModule_DBNative (SWISH *); void *DB_Create_Native (SWISH *sw, char *dbname); void *DB_Open_Native (SWISH *sw, char *dbname, int mode); void DB_Close_Native(void *db); void DB_Remove_Native(void *db); int DB_InitWriteHeader_Native(void *db); int DB_EndWriteHeader_Native(void *db); int DB_WriteHeaderData_Native(int id, unsigned char *s, int len, void *db); int DB_InitReadHeader_Native(void *db); int DB_ReadHeaderData_Native(int *id, unsigned char **s, int *len, void *db); int DB_EndReadHeader_Native(void *db); int DB_InitWriteWords_Native(void *db); long DB_GetWordID_Native(void *db); int DB_WriteWord_Native(char *word, long wordID, void *db); #ifdef USE_BTREE int DB_UpdateWordID_Native(char *word, long new_wordID, void *db); int DB_DeleteWordData_Native(long wordID, void *db); #endif int DB_WriteWordHash_Native(char *word, long wordID, void *db); long DB_WriteWordData_Native(long wordID, unsigned char *worddata, int data_size, int saved_bytes, void *db); int DB_EndWriteWords_Native(void *db); int DB_InitReadWords_Native(void *db); int DB_ReadWordHash_Native(char *word, long *wordID, void *db); int DB_ReadFirstWordInvertedIndex_Native(char *word, char **resultword, long *wordID, void *db); int DB_ReadNextWordInvertedIndex_Native(char *word, char **resultword, long *wordID, void *db); long DB_ReadWordData_Native(long wordID, unsigned char **worddata, int *data_size, int *saved_bytes, void *db); int DB_EndReadWords_Native(void *db); int DB_WriteFileNum_Native(int filenum, unsigned char *filedata,int sz_filedata, void *db); int DB_ReadFileNum_Native(int *filenum, unsigned char *filedata,int sz_filedata, void *db); int DB_CheckFileNum_Native(int filenum, void *db); int DB_RemoveFileNum_Native(int filenum, void *db); #ifdef USE_BTREE int DB_InitWriteSortedIndex_Native(void *db , int n_props); int DB_WriteSortedIndex_Native(int propID, unsigned char *data, int sz_data,void *db); #else int DB_InitWriteSortedIndex_Native(void *db ); int DB_WriteSortedIndex_Native(int propID, unsigned char *data, int sz_data,void *db); #endif int DB_EndWriteSortedIndex_Native(void *db); int DB_InitReadSortedIndex_Native(void *db); int DB_ReadSortedIndex_Native(int propID, unsigned char **data, int *sz_data,void *db); int DB_ReadSortedData_Native(int *data,int index, int *value, void *db); int DB_EndReadSortedIndex_Native(void *db); int DB_InitWriteProperties_Native(void *db); void DB_WriteProperty_Native( IndexFILE *indexf, FileRec *fi, int propID, char *buffer, int buf_len, int uncompressed_len, void *db); void DB_WritePropPositions_Native(IndexFILE *indexf, FileRec *fi, void *db); void DB_ReadPropPositions_Native(IndexFILE *indexf, FileRec *fi, void *db); char *DB_ReadProperty_Native(IndexFILE *indexf, FileRec *fi, int propID, int *buf_len, int *uncompressed_len, void *db); void DB_Reopen_PropertiesForRead_Native(void *db); #ifdef USE_BTREE int DB_InitWriteTotalWordsPerFile_Native(SWISH *sw, void *DB); int DB_WriteTotalWordsPerFile_Native(SWISH *sw, int idx, int wordcount, void *DB); int DB_EndWriteTotalWordsPerFile_Native(SWISH *sw, void *DB); int DB_InitReadTotalWordsPerFile_Native(SWISH *sw, void *DB); int DB_ReadTotalWordsPerFile_Native(SWISH *sw, int idx, int *wordcount, void *DB); int DB_EndReadTotalWordsPerFile_Native(SWISH *sw, void *DB); #endif /* 04/00 Jose Ruiz ** Functions to read/write longs from a file */ void printlong(FILE * fp, unsigned long num, size_t (*f_write)(const void *, size_t, size_t, FILE *)); unsigned long readlong(FILE * fp, size_t (*f_read)(void *, size_t, size_t, FILE *)); #endif �����������������0[swish-e.Include]docprop.h#�������������������#�����������������"[2��{O6���������������������������������������������������������������������������������������������������������� �/* * DocProperties.c, DocProperties.h * * Functions to manage the index's Document Properties * * File Created. * M. Gaulin 8/10/98 * Jose Ruiz 2000/10 many modifications * Jose Ruiz 2001/01 many modifications * * 2001-01-26 rasc getPropertyByname changed * 2001-02-09 rasc printSearchResultProperties changed */ #ifdef __cplusplus extern "C" { #endif void freeProperty( propEntry *prop ); void freeDocProperties (docProperties *); void freefileinfo(FileRec *); unsigned char *storeDocProperties (docProperties *, int *); unsigned char *allocatePropIOBuffer(SWISH *sw, unsigned long buf_needed ); propEntry *getDocProperty( RESULT *result, struct metaEntry **meta_entry, int metaID, int max_size ); propEntry *CreateProperty(struct metaEntry *meta_entry, unsigned char *propValue, int propLen, int preEncoded, int *error_flag ); void addDocProperties( INDEXDATAHEADER *header, docProperties **docProperties, unsigned char *propValue, int propLen, char *filename ); int addDocProperty (docProperties **, struct metaEntry * , unsigned char* ,int, int ); int Compare_Properties( struct metaEntry *meta_entry, propEntry *p1, propEntry *p2 ); unsigned char *fetchDocProperties ( FileRec *, char * ); void swapDocPropertyMetaNames (docProperties **, struct metaMergeEntry *); char *getResultPropAsString(RESULT *, int); char *DecodeDocProperty( struct metaEntry *meta_entry, propEntry *prop ); void getSwishInternalProperties(FileRec *, IndexFILE *); PropValue *getResultPropValue (RESULT *r, char *name, int ID); void freeResultPropValue(PropValue *pv); void WritePropertiesToDisk( SWISH *sw , FileRec *fi); propEntry *ReadSingleDocPropertiesFromDisk( IndexFILE *indexf, FileRec *fi, int metaID, int max_size ); docProperties *ReadAllDocPropertiesFromDisk( IndexFILE *indexf, int filenum ); /* -- Mapping AutoProperties <-> METANAMES -- should be the same */ /* all AutoPropteries start with this string ! */ #define AUTOPROPERTY_DEFAULT "swishdefault" #define AUTOPROPERTY_REC_COUNT "swishreccount" #define AUTOPROPERTY_RESULT_RANK "swishrank" #define AUTOPROPERTY_FILENUM "swishfilenum" #define AUTOPROPERTY_INDEXFILE "swishdbfile" #define AUTOPROPERTY_DOCPATH "swishdocpath" #define AUTOPROPERTY_TITLE "swishtitle" #define AUTOPROPERTY_DOCSIZE "swishdocsize" #define AUTOPROPERTY_LASTMODIFIED "swishlastmodified" #define AUTOPROPERTY_SUMMARY "swishdescription" #define AUTOPROPERTY_STARTPOS "swishstartpos" #ifdef __cplusplus } #endif /* __cplusplus */ ���������������0#[swish-e.Include]double_metaphone.h#�������������������#�������r����������,9]2�{~i�����������������������������������������������������������������������������������������������������������#ifndef DOUBLE_METAPHONE__H #define DOUBLE_METAPHONE__H #ifdef __cplusplus extern "C" { #endif typedef struct { char *str; int length; int bufsize; int free_string_on_destroy; } metastring; void DoubleMetaphone(const char *str, char **codes); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* DOUBLE_METAPHONE__H */ ��������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]dump.h#�������������������#������������������Ӑ^2�`L�����������������������������������������������������������������������������������������������������������/* ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** ** 2001-01 jose initial coding ** */ void DB_decompress(SWISH * sw, IndexFILE * indexf, int begin, int maxhits); void dump_file_list( SWISH *sw, IndexFILE *indexf ); void dump_memory_file_list( SWISH *sw, IndexFILE *indexf ); void dump_metanames( SWISH *sw, IndexFILE *indexf, int check_presorted ); void dump_file_properties(IndexFILE * indexf, FileRec *fi ); void dump_single_property( propEntry *prop, struct metaEntry *meta_entry ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0wish-e.Include]entities.h#�������������������#�����������������`2��>Ÿ�����������������������������������������������������������������������������������������������������������/* $Id: entities.h,v 1.3 2001/05/17 19:34:18 rasc Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** (c) Rainer.Scherg ** ** ** 2001-05-05 rasc initial coding ** */ #ifndef __HasSeenModule_Entities #define __HasSeenModule_Entities 1 /* Global module data */ struct MOD_Entities { /* public: */ /* none */ /* private: don't use outside this module! */ int convertEntities; }; void initModule_Entities (SWISH *sw); void freeModule_Entities (SWISH *sw); int configModule_Entities (SWISH *sw, StringList *sl); unsigned char *sw_ConvHTMLEntities2ISO(SWISH *sw, unsigned char *s); unsigned char *strConvHTMLEntities2ISO (unsigned char *buf); int charEntityDecode (unsigned char *buf, unsigned char **end); #endif �������������������������������������������������������������������������������������������0[swish-e.Include]error.h#�������������������#������������������a2��YIF���������������������������������������������������������������������������������������������������������� �/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** 2001-02-12 rasc some parts rewritten (progerr uses vargs, now) */ #ifndef __HasSeenModule_Error #define __HasSeenModule_Error 1 void set_error_handle( FILE *where ); void SwishErrorsToStderr( void ); void progerr (char *msgfmt, ...); void progerrno (char *msgfmt, ...); void set_progerr(int errornum, SWISH *sw, char *msgfmt,...); void set_progerrno(int errornum, SWISH *sw, char *msgfmt,...); void progwarn (char *msgfmt, ...); void progwarnno (char *msgfmt, ...); char *getErrorString(int); int SwishError(SWISH * sw); char *SwishErrorString(SWISH *sw); char *SwishLastErrorMsg(SWISH *sw); void SwishAbortLastError(SWISH *sw); int SwishCriticalError(SWISH *sw); void reset_lasterror(SWISH *sw); #define RC_OK 0 enum { INDEX_FILE_NOT_FOUND = -255, UNKNOWN_INDEX_FILE_FORMAT, NO_WORDS_IN_SEARCH, WORDS_TOO_COMMON, INDEX_FILE_IS_EMPTY, INDEX_FILE_ERROR, UNKNOWN_PROPERTY_NAME_IN_SEARCH_DISPLAY, UNKNOWN_PROPERTY_NAME_IN_SEARCH_SORT, INVALID_PROPERTY_TYPE, UNKNOWN_METANAME, UNIQUE_WILDCARD_NOT_ALLOWED_IN_WORD, WORD_NOT_FOUND, SWISH_LISTRESULTS_EOF, HEADER_READ_ERROR, INVALID_SWISH_HANDLE, INVALID_RESULTS_HANDLE, SEARCH_WORD_TOO_BIG, QUERY_SYNTAX_ERROR, PROP_LIMIT_ERROR, WILDCARD_NOT_ALLOWED_WITHIN_WORD }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]extprog.h#�������������������#������������������c2�0#ϟ�����������������������������������������������������������������������������������������������������������/* extprog.h */ void initModule_Prog (SWISH *sw); void freeModule_Prog (SWISH *sw); int configModule_Prog (SWISH *sw, StringList *sl); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]fhash.h#�������������������#������������������Eme2�S�����������������������������������������������������������������������������������������������������������/* */ #define FHASH_SIZE 10001 typedef struct FHASH { unsigned long hash_offsets[FHASH_SIZE]; /* Hash table */ unsigned long start; /* Pointer to start of hash table in file */ FILE *fp; } FHASH; FHASH *FHASH_Create(FILE *fp); FHASH *FHASH_Open(FILE *fp, unsigned long start); unsigned long FHASH_Close(FHASH *f); int FHASH_Insert(FHASH *f, unsigned char *key, int key_len, unsigned char *data, int data_len); int FHASH_Search(FHASH *f, unsigned char *key, int key_len, unsigned char *data, int data_len); int FHASH_Update(FHASH *f, unsigned char *key, int key_len, unsigned char *data, int data_len); int FHASH_Delete(FHASH *f, unsigned char *key, int key_len); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]file.h#�������������������#�����������������׃g2��!V1�����������������������������������������������������������������������������������������������������������/* $Id: file.h,v 1.23 2003/07/18 22:51:22 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** added buffer size arg to grabStringValue prototype - core dumping from overrun ** SRE 2/22/00 */ #ifdef _WIN32 void make_windows_path( char *path ); #endif char *get_libexec(void); void normalize_path(char *path); int isdirectory(char *); int isfile(char *); int islink(char *); int getsize(char *); void indexpath(SWISH *, char *); char *read_stream(SWISH *, FileProp *fprop, int is_text); void flush_stream( FileProp *fprop ); /* Get/eval properties for file (2000-11 rasc) */ FileProp *file_properties (char *real_path, char *work_path, SWISH *sw); FileProp *init_file_properties (void); void init_file_prop_settings( SWISH *sw, FileProp *fprop ); void free_file_properties (FileProp *fprop); /* * Some handy routines for parsing the Configuration File */ int grabCmdOptionsIndexFILE(char* line, char* commandTag, IndexFILE **listOfWords, int* gotAny, int dontToIt); FILE *create_tempfile(SWISH *sw, const char *mode, char *prefix, char **file_name_buffer, int remove_file_name ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]filter.h#�������������������#����������������� Ni2�B�����������������������������������������������������������������������������������������������������������/* $Id: filter.h,v 1.10 2002/03/17 03:54:19 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** 2001-02-28 rasc own module started for filters ** 2001-04-09 rasc enhancing filters */ #ifndef __HasSeenModule_Filter #define __HasSeenModule_Filter 1 /* Module data and structures */ typedef struct FilterList /* 2002-03-16 moseley */ { struct FilterList *next; char *prog; /* program name to run */ char *options; /* options list */ regex_list *regex; /* list of regular expressions */ char *suffix; /* or plain text suffix */ } FilterList; /* Global module data */ struct MOD_Filter { /* public: */ /* none */ /* private: don't use outside this module! */ char *filterdir; /* 1998-08-07 rasc */ /* depreciated */ FilterList *filterlist; /* 2002-03-16 moseley */ }; /* exported Prototypes */ void initModule_Filter (SWISH *sw); void freeModule_Filter (SWISH *sw); int configModule_Filter (SWISH *sw, StringList *sl); struct FilterList *hasfilter (SWISH *sw, char *filename); FILE *FilterOpen (FileProp *fprop); int FilterClose (FILE *fp); #endif ����������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]fs.h#�������������������#�������G�����������j2��O�����������������������������������������������������������������������������������������������������������/* fs.h */ #ifndef __HasSeenModule_FS #define __HasSeenModule_FS 1 #ifdef __cplusplus extern "C" { #endif /* -- module data */ typedef struct { regex_list *pathname; regex_list *dirname; regex_list *filename; regex_list *dircontains; regex_list *title; } PATH_LIST; struct MOD_FS { PATH_LIST filerules; PATH_LIST filematch; int followsymlinks; }; void initModule_FS (SWISH *); void freeModule_FS (SWISH *); int configModule_FS (SWISH *, StringList *); #ifdef __cplusplus } #endif /* __cplusplus */ #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]getruntime.h#�������������������#������������������m2�W�����������������������������������������������������������������������������������������������������������/* ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. **------------------------------------------------------- ** ** */ #ifndef GETRUNTIME_H #define GETRUNTIME_H 1 #ifdef __cplusplus extern "C" { #endif typedef double cpu_seconds; cpu_seconds get_cpu_secs (); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* GETRUNTIME_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]hash.h#�������������������#������������������o2�U4r�����������������������������������������������������������������������������������������������������������/* ** ** $Id: hash.h,v 1.10.2.1 2003/12/14 01:26:55 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ unsigned string_hash(char *, int); unsigned int_hash(int, int); unsigned hash (char *); unsigned numhash (int); unsigned bighash (char *); unsigned bignumhash (int); unsigned verybighash (char *); struct swline *add_word_to_hash_table( WORD_HASH_TABLE *table_ptr, char *word, int hash_size); struct swline * is_word_in_hash_table( WORD_HASH_TABLE table, char *word); void free_word_hash_table( WORD_HASH_TABLE *table_ptr); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]headers.h#�������������������#�������b����������3q2�� `GT�����������������������������������������������������������������������������������������������������������#ifndef HEADERS_H #define HEADERS_H 1 #ifdef __cplusplus extern "C" { #endif /************************************************************************* * Index File Header access interface * * Notes: * Must match up with the public library interface headers. * * **************************************************************************/ typedef enum { SWISH_NUMBER, SWISH_STRING, SWISH_LIST, SWISH_BOOL, SWISH_WORD_HASH, SWISH_OTHER_DATA, SWISH_HEADER_ERROR /* must check error in this case */ } SWISH_HEADER_TYPE; typedef union { const char *string; const char **string_list; unsigned long number; int boolean; } SWISH_HEADER_VALUE; void print_index_headers( IndexFILE *indexf ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* !HEADERS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]html.h#�������������������#�����������������#s2�_C<6�����������������������������������������������������������������������������������������������������������/* $Id: html.h,v 1.15 2001/10/11 22:21:13 whmoseley Exp $ */ /* seems to be a very old module of swish some serious work to do in html.c and html.h!! but anyway it seems to work... */ /* Just the prototypes */ int countwords_HTML(SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer); int parsecomment (SWISH *, char *, int, int, int, int *); char *parseHTMLtitle(SWISH *,char *buffer); int isoktitle(SWISH *sw, char *title); ������������������������������������������������������������������0[swish-e.Include]http.h#�������������������#�����������������[t2��(#dx'�����������������������������������������������������������������������������������������������������������/* http.h **/ #ifndef __HasSeenModule_HTTP #define __HasSeenModule_HTTP 1 #define MAXPIDLEN 32 /* 32 is for the pid identifier and the trailing null */ /* -- module data */ struct MOD_HTTP { /* spider directory for index (HTTP method) */ int lenspiderdirectory; char *spiderdirectory; /* http system specific configuration parameters */ int maxdepth; int delay; struct multiswline *equivalentservers; struct url_info *url_hash[BIGHASHSIZE]; }; void initModule_HTTP (SWISH *); void freeModule_HTTP (SWISH *); int configModule_HTTP (SWISH *, StringList *); char *url_method ( char *url, int *plen ); char *url_serverport (char *url, int *plen); char *url_uri (char *url, int *plen); int get(SWISH * sw, char *contenttype_or_redirect, time_t *last_modified, time_t * plastretrieval, char *file_prefix, char *url); int cmdf (int (*cmd)(const char *), char *fmt, char *,pid_t pid); char *readline (FILE *fp); pid_t lgetpid (); #endif �����������������������0[swish-e.Include]httpserver.h#�������������������#������������������v2��W?�����������������������������������������������������������������������������������������������������������/* httpserver.h **/ #ifndef __HTTPSERVER_H #define __HTTPSERVER_H typedef struct httpserverinfo { char *baseurl; time_t lastretrieval; char *useragent; struct robotrules *robotrules; struct httpserverinfo *next; } httpserverinfo; typedef struct robotrules { char *disallow; struct robotrules *next; } robotrules; httpserverinfo *getserverinfo (SWISH *sw, char *url); int urldisallowed (SWISH *sw, char *url); int equivalentserver (SWISH *sw, char *url, char *baseurl); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]index.h#���������������� ���#�����������������x2�U3�������������������� ��������������� ������������������������������������������������������������������������/* $Id: index.h,v 1.57 2003/07/21 19:15:07 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __HasSeenModule_Index #define __HasSeenModule_Index 1 struct dev_ino { dev_t dev; ino_t ino; struct dev_ino *next; }; struct IgnoreLimitPositions { int n; /* Number of entries per file */ int *pos; /* Store metaID1,position1, metaID2,position2 ..... */ }; /* This is used to build a list of the metaIDs that are currently in scope when indexing words */ typedef struct { int *array; /* list of metaIDs that need to be indexed */ int max; /* max size of table */ int num; /* number in list */ int defaultID; /* default metaID (should always be one, I suppose) */ } METAIDTABLE; /* -- module data */ struct MOD_Index { /* entry vars */ METAIDTABLE metaIDtable; ENTRYARRAY *entryArray; ENTRY *hashentries[VERYBIGHASHSIZE]; char hashentriesdirty[VERYBIGHASHSIZE]; /* just a 0/1 flag */ /* Compression Work buffer while compression locations in index ** proccess */ unsigned char *compression_buffer; int len_compression_buffer; unsigned char *worddata_buffer; /* Buffer to store worddata */ int len_worddata_buffer; /* Max size of the buffer */ int sz_worddata_buffer; /* Space being used in worddata_buffer */ /* File counter */ int filenum; /* index tmp (both FS and HTTP methods) */ char *tmpdir; /* Filenames of the swap files */ char *swap_location_name[MAX_LOC_SWAP_FILES]; /* Location info file */ /* handlers for both files */ FILE *fp_loc_write[MAX_LOC_SWAP_FILES]; /* Location (writing) */ FILE *fp_loc_read[MAX_LOC_SWAP_FILES]; /* Location (reading) */ struct dev_ino *inode_hash[BIGHASHSIZE]; /* Buffers used by indexstring */ int lenswishword; char *swishword; int lenword; char *word; /* Economic mode (-e) */ int swap_locdata; /* swap location data */ /* Pointer to swap functions */ long (*swap_tell) (FILE *); size_t(*swap_write) (const void *, size_t, size_t, FILE *); int (*swap_seek) (FILE *, long, int); size_t(*swap_read) (void *, size_t, size_t, FILE *); int (*swap_close) (FILE *); int (*swap_putc) (int, FILE *); int (*swap_getc) (FILE *); /* IgnoreLimit option values */ int plimit; int flimit; /* Number of words from IgnoreLimit */ int nIgnoreLimitWords; struct swline *IgnoreLimitWords; /* Positions from stopwords from IgnoreLimit */ struct IgnoreLimitPositions **IgnoreLimitPositionsArray; /* Index in blocks of chunk_size files */ int chunk_size; /* Variable to control the size of the zone used for store locations during chunk proccesing */ int optimalChunkLocZoneSize; /* variable to handle free memory space for locations inside currentChunkLocZone */ LOCATION *freeLocMemChain; MEM_ZONE *perDocTmpZone; MEM_ZONE *currentChunkLocZone; MEM_ZONE *totalLocZone; MEM_ZONE *entryZone; int update_mode; /* Set to true when in update mode */ }; void initModule_Index(SWISH *); void freeModule_Index(SWISH *); int configModule_Index(SWISH *, StringList *); void do_index_file(SWISH * sw, FileProp * fprop); ENTRY *getentry(SWISH * , char *); void addentry(SWISH *, ENTRY *, int, int, int, int); void addCommonProperties(SWISH * sw, FileProp * fprop, FileRec * fi, char *title, char *summary, int start); int getfilecount(IndexFILE *); int getNumberOfIgnoreLimitWords(SWISH *); void getPositionsFromIgnoreLimitWords(SWISH * sw); char *ruleparse(SWISH *, char *); #define isIgnoreFirstChar(header,c) (header)->ignorefirstcharlookuptable[(int)((unsigned char)c)] #define isIgnoreLastChar(header,c) (header)->ignorelastcharlookuptable[(int)((unsigned char)c)] #define isBumpPositionCounterChar(header,c) (header)->bumpposcharslookuptable[(int)((unsigned char)c)] void computehashentry(ENTRY **, ENTRY *); void sort_words(SWISH *); int indexstring(SWISH * sw, char *s, int filenum, int structure, int numMetaNames, int *metaID, int *position); void addsummarytofile(IndexFILE *, int, char *); void BuildSortedArrayOfWords(SWISH *, IndexFILE *); void PrintHeaderLookupTable(int ID, int table[], int table_size, FILE * fp); void coalesce_all_word_locations(SWISH * sw, IndexFILE * indexf); void coalesce_word_locations(SWISH * sw, ENTRY * e); void adjustWordPositions(unsigned char *worddata, int *sz_worddata, int n_files, struct IgnoreLimitPositions **ilp); #endif ���������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]keychar_out.h#�������������������#������������������z2�+ß�����������������������������������������������������������������������������������������������������������/* $Id: keychar_out.h,v 1.7 2001/05/18 09:03:11 jmruiz Exp $ ** ** ** ** 2001-03-20 rasc own module for this routine (from swish.c) ** */ void OutputKeyChar (SWISH *sw, int keychar); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]list.h#�������������������#�������+����������}2�*? R�����������������������������������������������������������������������������������������������������������/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef __cplusplus extern "C" { #endif struct swline *newswline_n(char *line, int size); struct swline *newswline(char *line); struct swline *addswline (struct swline *rp, char *line); struct swline *dupswline (struct swline *rp); void addindexfile(struct SWISH *sw, char *line); void freeswline (struct swline *ptr); void init_header (INDEXDATAHEADER *header); void free_header (INDEXDATAHEADER *header); #ifdef __cplusplus } #endif /* __cplusplus */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]mem.h#�������������������#�������O���������� 2��!V1�����������������������������������������������������������������������������������������������������������/* $Id: mem.h,v 1.30 2003/07/18 22:51:22 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** Author: Bill Meier, June 2001 ** */ #ifndef MEM_H #define MEM_H 1 /* ** The following settings control the memory allocator. Each setting is independent. ** They also affect the actual memory usage of the program, because (currently) ** turning on any of these settings increases the size of each allocation. ** MEM_STATISTICS allocates the least extra and MEM_DEBUG allocates the most extra per call. ** ** In addition (currently) turning on any of these settings will map all ** realloc calls into a alloc and free for simplier implementation. However, this ** should be transparent to all programs! */ /* ** Normal settings (but not required): ** If you turn on MEM_DEBUG, turn on MEM_STATISTICS ** If you turn on MEM_TRACE, turn on MEM_STATISTICS */ #include <memory.h> #ifdef __cplusplus extern "C" { #endif /* MEM_DEBUG checks for memory consistency on alloc/free */ /* #define MEM_DEBUG 0 -- enable with --enable-memdebug */ /* MEM_TRACE checks for unfreed memory, and where it is allocated */ /* #define MEM_TRACE 0 -- use --enable-memtrace */ /* MEM_STATISTICS gives memory statistics (bytes allocated, calls, etc */ /* #define MEM_STATISTICS 0 -- use --enable-memstats */ typedef struct _mem_zone { struct _zone *next; /* link to free chunk */ char *name; /* name of zone */ size_t size; /* size to grow zone by */ int attributes; /* attributes of zone (not used yet) */ unsigned int allocs; /* count of allocations (for statistics) */ } MEM_ZONE; /* The following are the basic malloc/realloc/free replacements */ #if MEM_TRACE extern size_t memory_trace_counter; void Mem_bp(int n); #endif void *ecalloc(size_t nelem, size_t size); #if MEM_DEBUG | MEM_TRACE | MEM_STATISTICS #define emalloc(size) Mem_Alloc(size, __FILE__, __LINE__) #define erealloc(ptr, size) Mem_Realloc(ptr, size, __FILE__, __LINE__) #define efree(ptr) Mem_Free(ptr, __FILE__, __LINE__) void *Mem_Alloc(size_t size, char *file, int line); void *Mem_Realloc(void *ptr, size_t size, char *file, int line); void Mem_Free(void *ptr, char *file, int line); #else void *emalloc(size_t size); void *erealloc(void *ptr, size_t size); void efree(void *ptr); #endif /* Hook to print out statistics if enabled */ void Mem_Summary(char *title, int final); /* Memory zone routines */ /* create a zone -- size should be some reasonable number */ MEM_ZONE *Mem_ZoneCreate(char *name, size_t size, int attributes); /* allocate memory from a zone (can use like malloc if you aren't going to realloc) */ void *Mem_ZoneAlloc(MEM_ZONE *head, size_t size); /* free all memory in a zone */ void Mem_ZoneFree(MEM_ZONE **head); /* memory zone statistics */ #if MEM_STATISTICS void Mem_ZoneStatistics(MEM_ZONE *head); #endif /* make all memory in a zone reusable */ void Mem_ZoneReset(MEM_ZONE *head); /* Returns the allocated memory owned by a zone */ int Mem_ZoneSize(MEM_ZONE *head); /* Don't let people use the regular C calls */ #define malloc $Please_use_emalloc #define realloc $Please_use_erealloc #define free $Please_use_efree #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* !MEM_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]merge.h#�������������������#�������u����������2�ƠA;�����������������������������������������������������������������������������������������������������������/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. **----------------------------------------------------------- ** Added remapVar and initmapentrylist to fix the merge option -M ** G. Hill 3/7/97 ** */ #ifndef __HasSeenModule_Merge #define __HasSeenModule_Merge 1 /* used by docprop.c, but maybe should be in merge.c */ struct metaMergeEntry { struct metaMergeEntry* next; char* metaName; int oldMetaID; int newMetaID; int metaType; }; /* called by swish.c */ void readmerge (char *, char *, char *, int); void merge_indexes( SWISH *sw_input, SWISH *sw_output ); #endif �����������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]metanames.h#�������������������#�����������������􆬿2��{O6���������������������������������������������������������������������������������������������������������� �/* Jose Ruiz 2000/01 Definitions for MetaNames/Fields */ /* META_INDEX and META_PROP could now share the same bit, since props and metas are separated entries */ #define META_INDEX (1<<0) /* bynary 00000001 */ /* Meta is indexed */ #define META_PROP (1<<1) /* bynary 00000010 */ /* Also stored as property */ #define META_STRING (1<<2) /* String type of property */ #define META_NUMBER (1<<3) /* Data is binary number */ #define META_DATE (1<<4) /* Data is binary date */ #define META_INTERNAL (1<<5) /* flag saying this is an internal metaname */ #define META_IGNORE_CASE (1<<6) /* flag to say ignore case when comparing/sorting */ #define META_NOSTRIP (1<<7) /* Do not strip low ascii chars when indexing */ /* Macros to test the type of a MetaName */ #define is_meta_internal(x) ((x)->metaType & META_INTERNAL) #define is_meta_index(x) ((x)->metaType & META_INDEX) #define is_meta_property(x) ((x)->metaType & META_PROP) #define is_meta_number(x) ((x)->metaType & META_NUMBER) #define is_meta_date(x) ((x)->metaType & META_DATE) #define is_meta_string(x) ((x)->metaType & META_STRING) #define is_meta_ignore_case(x) ((x)->metaType & META_IGNORE_CASE) #define is_meta_nostrip(x) ((x)->metaType & META_NOSTRIP) int properties_compatible( struct metaEntry *m1, struct metaEntry *m2 ); void add_default_metanames(IndexFILE *); struct metaEntry * getMetaNameByNameNoAlias(INDEXDATAHEADER * header, char *word); struct metaEntry * getMetaNameByName(INDEXDATAHEADER *, char *); struct metaEntry * getMetaNameByID(INDEXDATAHEADER *, int); struct metaEntry * getPropNameByNameNoAlias(INDEXDATAHEADER * header, char *word); struct metaEntry * getPropNameByName(INDEXDATAHEADER *, char *); struct metaEntry * getPropNameByID(INDEXDATAHEADER *, int); struct metaEntry * addMetaEntry(INDEXDATAHEADER *header, char *metaname, int metaType, int metaID); struct metaEntry * addNewMetaEntry(INDEXDATAHEADER *header, char *metaWord, int metaType, int metaID); void freeMetaEntries( INDEXDATAHEADER * ); int isDontBumpMetaName(struct swline *,char *tag); int is_meta_entry( struct metaEntry *meta_entry, char *name ); void ClearInMetaFlags(INDEXDATAHEADER * header); void init_property_list(INDEXDATAHEADER *header); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0![swish-e.Include]parse_conffile.h#�������������������#�����������������2�7-�����������������������������������������������������������������������������������������������������������/* $Id: parse_conffile.h,v 1.12 2002/08/22 22:58:39 whmoseley Exp $ ** ** */ void grabCmdOptions(StringList *sl, int start, struct swline **listOfWords); void getdefaults(SWISH *sw, char *conffile, int *hasdir, int *hasindex, int hasverbose); int getYesNoOrAbort (StringList *sl, int n, int islast); int strtoDocType( char * s ); void free_Extracted_Path( SWISH *sw ); void free_regex_list( regex_list **reg_list ); void freeSwishConfigOptions( SWISH *sw ); ����������������������������������������������������0[swish-e.Include]parser.h#�������������������#�������/����������<2��yC<6�����������������������������������������������������������������������������������������������������������/* $Id: parser.h,v 1.5 2001/10/11 22:21:14 whmoseley Exp $ ** ** ** The prototypes */ int parse_HTML(SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer); int parse_XML(SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer); int parse_TXT(SWISH * sw, FileProp * fprop, FileRec *fi, char *buffer); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]proplimit.h#�������������������#�������������������2��O�����������������������������������������������������������������������������������������������������������#ifndef __HasSeenModule_PropLimit #define __HasSeenModule_PropLimit 1 void SwishResetSearchLimit( SEARCH_OBJECT *srch ); int SwishSetSearchLimit(SEARCH_OBJECT *srch, char *propertyname, char *low, char *hi); /* internal use */ void ClearLimitParams( LIMIT_PARAMS *params ); LIMIT_PARAMS *setlimit_params( SWISH *sw, LIMIT_PARAMS *params, char *propertyname, char *low, char *hi ); int Prepare_PropLookup(SEARCH_OBJECT * srch ); int LimitByProperty( IndexFILE *indexf, PROP_LIMITS *prop_limits, int filenum ); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]ramdisk.h#�������������������#�������l����������bʐ2��-�����������������������������������������������������������������������������������������������������������/* */ struct ramdisk *ramdisk_create(char *, int); int ramdisk_close(FILE *); void add_buffer_ramdisk(struct ramdisk *); long ramdisk_tell(FILE *); size_t ramdisk_write(const void *,size_t, size_t, FILE *); int ramdisk_seek(FILE *,long, int ); size_t ramdisk_read(void *, size_t, size_t, FILE *); int ramdisk_getc(FILE *); int ramdisk_putc(int , FILE *); ��������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]rank.h#�������������������#�������o�����������2��p}�����������������������������������������������������������������������������������������������������������/* */ #ifndef RANK_H #define RANK_H 1 #include "mem.h" #include "search.h" int getrank( RESULT *r ); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0 [swish-e.Include]result_output.h#�������������������#�������z����������B2� f���������������������������������������������������������������������������������������������������������� �/* $Id: result_output.h,v 1.18 2003/05/12 21:29:19 jmruiz Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** ** 2001-01 R. Scherg (rasc) initial coding ** */ #ifndef __HasSeenModule_ResultOutput #define __HasSeenModule_ResultOutput 1 /* -- module data */ struct ResultExtFmtStrList { /* -x extended format by defined names */ char *name; char *fmtstr; struct ResultExtFmtStrList *next; struct ResultExtFmtStrList *nodep; }; /* -- global module data structure */ struct MOD_ResultOutput { /* public: */ /* private: don't use outside this module! */ /* -x extended format by defined names */ char *extendedformat; /* -x "fmt", holds fmt or NULL */ char *stdResultFieldDelimiter; /* -d <c> delimiter , (def: config.h) v1.x output style */ /* ResultExtendedFormat predefined List see: -x */ struct ResultExtFmtStrList *resultextfmtlist; int numPropertiesToDisplay; int currentMaxPropertiesToDisplay; char **propNameToDisplay; int **propIDToDisplay; }; void addSearchResultDisplayProperty (SWISH *, char* ); void initModule_ResultOutput (SWISH *sw); void freeModule_ResultOutput (SWISH *sw); int configModule_ResultOutput (SWISH *sw, StringList *sl); void initPrintExtResult (SWISH *sw, char *fmt); void printSortedResults(RESULTS_OBJECT *results, int begin, int maxhits); int initSearchResultProperties(SWISH *sw); char *hasResultExtFmtStr (SWISH *sw, char *name); int resultHeaderOut (SWISH *sw, int min_verbose, char *prtfmt, ...); void resultPrintHeader (SWISH *sw, int min_verbose, INDEXDATAHEADER *h, char *pathname, int merged); #endif ������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]result_sort.h#�������������������#������������������22��{O6���������������������������������������������������������������������������������������������������������� �/* $Id: result_sort.h,v 1.19 2003/07/25 06:36:30 whmoseley Exp $ ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** ** 2001-01 jose initial coding ** */ #ifndef __HasSeenModule_ResultSort #define __HasSeenModule_ResultSort 1 #ifdef __cplusplus extern "C" { #endif /* -- global module data structure */ struct MOD_ResultSort { /* sorted index flag */ /* TRUE - Use sorted index */ int isPreSorted; /* structure for presorted properties - used by index proccess */ struct swline *presortedindexlist; /* Sortorder Translation table arrays */ /* case sensitive translation table */ int iSortTranslationTable[256]; /* Ignore Case translarion table */ int iSortCaseTranslationTable[256]; }; void initModule_ResultSort (SWISH *); void freeModule_ResultSort (SWISH *); int configModule_ResultSort (SWISH *sw, StringList *sl); int compare_results(const void *s1, const void *s2); int sortresults(RESULTS_OBJECT *results); int *CreatePropSortArray(IndexFILE *indexf, struct metaEntry *m, FileRec *fi, int free_cache ); void sortFileProperties(SWISH *sw, IndexFILE *indexf); void initStrCmpTranslationTable(int *); void initStrCaseCmpTranslationTable(int *); int sw_strcasecmp(unsigned char *,unsigned char *, int *); int sw_strcmp(unsigned char *,unsigned char *, int *); int *LoadSortedProps( IndexFILE *indexf, struct metaEntry *m ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __HasSeenModule_ResultSort */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]search.h#�������������������#�������/����������U2�B�����������������������������������������������������������������������������������������������������������/* ** ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. **------------------------------------------------------- ** ** ** Sept 2002 - isolate the search and results into more separate "objects". ** Still misses the mark. -L stores the lookup tabels in indexf instead ** of in a "search" object. */ #ifndef __HasSeenModule_Search #define __HasSeenModule_Search 1 #ifdef __cplusplus extern "C" { #endif /* -- module data */ /* -------- Search Object Structures ------------ */ /* This holds the -L parameters */ typedef struct s_LIMIT_PARAMS LIMIT_PARAMS; typedef struct s_RESULT RESULT; typedef struct s_SEARCH_OBJECT SEARCH_OBJECT; typedef struct s_RESULTS_OBJECT RESULTS_OBJECT; typedef struct s_DB_RESULTS DB_RESULTS; /* These are the input parameters */ struct s_LIMIT_PARAMS { LIMIT_PARAMS *next; unsigned char *propname; unsigned char *lowrange; unsigned char *highrange; }; /* These are the processed parameters ready for searching */ typedef struct { unsigned char *inPropRange; /* indexed by file number -- should be a vector to save room, but what is fastest? int? */ propEntry *loPropRange; propEntry *hiPropRange; } PROP_LIMITS; struct s_SEARCH_OBJECT { SWISH *sw; /* Parent object */ char *query; /* Query string */ int PhraseDelimiter; /* Phrase delimiter char */ int structure; /* Structure for limiting to HTML tags */ struct swline *sort_params; /* List of sort parameter strings */ int limits_prepared; /* Flag that the parameters have been prepared */ LIMIT_PARAMS *limit_params; /* linked list of -L limit settings */ PROP_LIMITS **prop_limits; /* flags to detect if file should be limited -L for each index, and for each metaname*/ }; /* == Results Structures == */ /* A single result */ struct s_RESULT { RESULT *next; DB_RESULTS *db_results; /* parent object */ // int count; /* result Entry-Counter */ int filenum; /* there's an extra four bytes we don't need */ FileRec fi; /* This is used to cache the properties and the seek index */ int rank; int frequency; int tfrequency; /* Total frequency of result OR result index */ /* during result sorting tfrequency is used as an index number */ int posdata[1]; /* used for phrase searches */ }; /* This handles a list of results for a single index file */ /* This is probably not needed since results are always sorted might as well just have a pointer to the first result */ /* no real need to add results to the tail */ typedef struct RESULT_LIST { RESULT *head; RESULT *tail; RESULTS_OBJECT *results; // DB_RESULTS *db_results; /* parent object */ } RESULT_LIST; typedef struct { int direction; /* -1 for asc and 1 for desc */ propEntry **key; /* pointer to an array of PropEntry's indexed by result */ struct metaEntry *property; /* pointer to the metaEntry for this key - need for sorting propEntry */ int checked_presorted; /* flag to track if attempted to load presorted array */ int is_rank_sort; /* flag for faster sorting by rank */ } SortData; /* Structure to hold all results per index */ struct s_DB_RESULTS { DB_RESULTS *next; RESULTS_OBJECT *results; /* parent */ SEARCH_OBJECT *srch; /* make life easy (only valid during search) */ IndexFILE *indexf; /* the associated index file */ int index_num; /* index into params indexed by index number */ RESULT_LIST *resultlist; /* pointer to list of results (indirectly) */ RESULT *sortresultlist; /* linked list of RESULTs in sort order (actually just points to resultlist->head) */ RESULT *currentresult; /* pointer to the current seek position */ struct swline *parsed_words; /* parsed search query */ struct swline *removed_stopwords; /* stopwords that were removed from the query */ int num_sort_props; /* number of sort properties */ SortData *sort_data; /* an array num_sort_props of SortData */ char **prop_string_cache; /* place to cache a result's string properties $$$ I think this may be a mistake */ int result_count; /* number of results in set */ }; struct s_RESULTS_OBJECT { SWISH *sw; /* parent */ char *query; /* in case user forgot what they searched for */ void *ref_count_ptr; /* for SWISH::API */ DB_RESULTS *db_results; /* Linked list of results - one for each index file */ int cur_rec_number; /* current record number in list */ int total_results; /* total number of results */ int total_files; /* total number of files in all combined indexes */ int search_words_found; /* flag that some search words were found in some index after parsing -- for error message */ int lasterror; /* used to save errors while processing more than one index file */ int bigrank; /* Largest rank found, for scaling */ int rank_scale_factor; /* for scaling each results rank when fetching with SwishNextResult */ MEM_ZONE *resultSearchZone; /* pool for allocating results */ MEM_ZONE *resultSortZone; /* pool for allocating sort keys for each result */ RESULT *resulthashlist[BIGHASHSIZE]; /* Hash array for merging results */ }; SEARCH_OBJECT *New_Search_Object( SWISH *sw, char *query ); void SwishSetStructure( SEARCH_OBJECT *srch, int structure ); void SwishPhraseDelimiter( SEARCH_OBJECT *srch, char delimiter ); void SwishSetSort( SEARCH_OBJECT *srch, char *sort ); void SwishSetQuery( SEARCH_OBJECT *srch, char *query ); void Free_Search_Object( SEARCH_OBJECT *srch ); RESULTS_OBJECT *SwishQuery(SWISH *sw, char *words ); RESULTS_OBJECT *SwishExecute(SEARCH_OBJECT *srch, char *words); int SwishHits( RESULTS_OBJECT *results ); void Free_Results_Object( RESULTS_OBJECT *results ); RESULT *SwishNextResult(RESULTS_OBJECT *results); int SwishSeekResult(RESULTS_OBJECT *results, int pos); int isMetaNameOpNext(struct swline *); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __HasSeenModule_Search */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]soundex.h#�������������������#�������P�����������^2�������������������������������������������������������������������������������������������������������������/* ** soundex.h */ FUZZY_WORD *soundex( FUZZY_OBJECT *fi, const char *inword); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]stemmer.h#�������������������#�������)����������<2�OH���������������������������������������������������������������������������������������������������������� �/* ** stemmer.h */ #ifndef STEMMER_H #define STEMMER_H 1 #include "snowball/api.h" /* For snoball's SN_env */ /* * Warning: * Don't change the order of these as it will break existing indexes. * The index stores this enum number. */ typedef enum { FUZZY_NONE = 0, FUZZY_STEMMING_EN, FUZZY_SOUNDEX, FUZZY_METAPHONE, FUZZY_DOUBLE_METAPHONE, FUZZY_STEMMING_ES, FUZZY_STEMMING_FR, FUZZY_STEMMING_IT, FUZZY_STEMMING_PT, FUZZY_STEMMING_DE, FUZZY_STEMMING_NL, FUZZY_STEMMING_EN1, FUZZY_STEMMING_EN2, FUZZY_STEMMING_NO, FUZZY_STEMMING_SE, FUZZY_STEMMING_DK, FUZZY_STEMMING_RU, FUZZY_STEMMING_FI } FuzzyIndexType; typedef enum { STEM_OK, STEM_NOT_ALPHA, /* not all alpha */ STEM_TOO_SMALL, /* word too small to be stemmed */ STEM_WORD_TOO_BIG, /* word it too large to stem, would would be too large */ STEM_TO_NOTHING /* word stemmed to the null string */ } STEM_RETURNS; /* * This structure manages the results from a stemming operation. */ typedef struct { STEM_RETURNS error; /* return value from stemmer */ const char *orig_word; /* address of input string */ int list_size; /* number of entries in the string list */ char **word_list; /* pointer to list of stemmed words */ int free_strings; /* flag if true means free individual strings in string list */ char *string_list[1]; /* null terminated array of string pointers */ } FUZZY_WORD; /* FUZZY_OBJECT and FUZZY_OPTS reference each other, so pre-define */ typedef struct s_FUZZY_OBJECT FUZZY_OBJECT; typedef struct s_FUZZY_OPTS FUZZY_OPTS; /* * This structure defines the layout of fuzzy options table. * The table lists the available stemmers. */ struct s_FUZZY_OPTS { FuzzyIndexType fuzzy_mode; char *name; FUZZY_WORD *(*routine) ( FUZZY_OBJECT *fi, const char *inword ); struct SN_env *(*init) (void); void (*stemmer_free) (struct SN_env *); int (*lang_stem)(struct SN_env *); }; /* * This structure caches what stemmer to use. */ struct s_FUZZY_OBJECT { FUZZY_OPTS *stemmer; /* stemmer options to use */ struct SN_env *snowball_options; /* snowball's data */ }; FUZZY_WORD *fuzzy_convert( FUZZY_OBJECT *fi, const char *inword ); void fuzzy_free_word( FUZZY_WORD *fd ); FUZZY_WORD *create_fuzzy_word( const char *input_word, int word_count ); FuzzyIndexType fuzzy_mode_value( FUZZY_OBJECT *fi ); const char *fuzzy_string( FUZZY_OBJECT *fi ); FUZZY_OBJECT *set_fuzzy_mode( FUZZY_OBJECT *fi, char *param ); FUZZY_OBJECT *get_fuzzy_mode( FUZZY_OBJECT *fi, int fuzzy ); void free_fuzzy_mode( FUZZY_OBJECT *fi ); int stemmer_applied( FUZZY_OBJECT *fi ); void dump_fuzzy_list( void ); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]swish-e.h#���������������� ���#�������?����������睬2��fU�������������������� ��������������� ������������������������������������������������������������������������#ifndef SEARCHSWISH_H #define SEARCHSWISH_H 1 #include "time.h" /* for time_t, which isn't really needed */ #ifdef __cplusplus extern "C" { #endif typedef void * SW_HANDLE; typedef void * SW_SEARCH; typedef void * SW_RESULTS; typedef void * SW_RESULT; typedef void * SW_FUZZYWORD; /* access to the swish-e stemmers */ /* These must match headers.h */ typedef enum { SWISH_NUMBER, SWISH_STRING, SWISH_LIST, SWISH_BOOL, SWISH_WORD_HASH, SWISH_OTHER_DATA, SWISH_HEADER_ERROR /* must check error in this case */ } SWISH_HEADER_TYPE; typedef union { const char *string; const char **string_list; unsigned long number; int boolean; } SWISH_HEADER_VALUE; const char **SwishHeaderNames( SW_HANDLE ); /* fetch the list of available header names */ const char **SwishIndexNames( SW_HANDLE ); /* fetch list of index files names associated */ SWISH_HEADER_VALUE SwishHeaderValue( SW_HANDLE, const char *index_name, const char *cur_header, SWISH_HEADER_TYPE *type ); SWISH_HEADER_VALUE SwishResultIndexValue( SW_RESULT, const char *name, SWISH_HEADER_TYPE *type ); /* Limit searches by structure */ #define IN_FILE_BIT 0 #define IN_TITLE_BIT 1 #define IN_HEAD_BIT 2 #define IN_BODY_BIT 3 #define IN_COMMENTS_BIT 4 #define IN_HEADER_BIT 5 #define IN_EMPHASIZED_BIT 6 #define IN_META_BIT 7 #define IN_FILE (1<<IN_FILE_BIT) #define IN_TITLE (1<<IN_TITLE_BIT) #define IN_HEAD (1<<IN_HEAD_BIT) #define IN_BODY (1<<IN_BODY_BIT) #define IN_COMMENTS (1<<IN_COMMENTS_BIT) #define IN_HEADER (1<<IN_HEADER_BIT) #define IN_EMPHASIZED (1<<IN_EMPHASIZED_BIT) #define IN_META (1<<IN_META_BIT) #define IN_ALL (IN_FILE|IN_TITLE|IN_HEAD|IN_BODY|IN_COMMENTS|IN_HEADER|IN_EMPHASIZED|IN_META) SW_HANDLE SwishInit(char *); SW_RESULTS SwishQuery(SW_HANDLE, char *words ); SW_SEARCH New_Search_Object( SW_HANDLE, char *query ); void SwishSetRefPtr( SW_HANDLE sw, void *address ); void *SwishSearch_parent( SW_SEARCH srch ); void *SwishResults_parent( SW_RESULTS results ); void *SwishResult_parent( SW_RESULT result ); void ResultsSetRefPtr( SW_RESULTS results, void *address ); void SwishSetStructure( SW_SEARCH srch, int structure ); void SwishPhraseDelimiter( SW_SEARCH srch, char delimiter ); void SwishSetSort( SW_SEARCH srch, char *sort ); void SwishSetQuery( SW_SEARCH srch, char *query ); int SwishSetSearchLimit( SW_SEARCH srch, char *propertyname, char *low, char *hi); void SwishResetSearchLimit( SW_SEARCH srch ); SW_RESULTS SwishExecute( SW_SEARCH, char *optional_query ); /* Headers specific to results */ int SwishHits( SW_RESULTS ); SWISH_HEADER_VALUE SwishParsedWords( SW_RESULTS, const char *index_name ); SWISH_HEADER_VALUE SwishRemovedStopwords( SW_RESULTS, const char *index_name ); int SwishSeekResult( SW_RESULTS, int position ); SW_RESULT SwishNextResult( SW_RESULTS ); char *SwishResultPropertyStr(SW_RESULT, char *propertyname); unsigned long SwishResultPropertyULong(SW_RESULT, char *propertyname); SW_HANDLE SW_ResultToSW_HANDLE( SW_RESULT ); SW_HANDLE SW_ResultsToSW_HANDLE( SW_RESULTS ); void Free_Search_Object( SW_SEARCH srch ); void Free_Results_Object( SW_RESULTS results ); void SwishClose( SW_HANDLE ); int SwishError( SW_HANDLE ); /* test if error state - returns error number */ int SwishCriticalError( SW_HANDLE ); /* true if show stopping error */ void SwishAbortLastError( SW_HANDLE ); /* format and abort the error message */ char *SwishErrorString( SW_HANDLE ); /* string for the error number */ char *SwishLastErrorMsg( SW_HANDLE ); /* more specific message about the error */ void set_error_handle( FILE *where ); void SwishErrorsToStderr( void ); /* Returns all words that begin with the specified char */ const char *SwishWordsByLetter(SW_HANDLE, char *filename, char c); /* Stemming Interface */ char *SwishStemWord( SW_HANDLE, char *word ); /* Really this is depreciated */ SW_FUZZYWORD SwishFuzzyWord( SW_RESULT r, char *word ); const char **SwishFuzzyWordList( SW_FUZZYWORD fw ); int SwishFuzzyWordCount( SW_FUZZYWORD fw ); int SwishFuzzyWordError( SW_FUZZYWORD fw ); void SwishFuzzyWordFree( SW_FUZZYWORD fw ); const char *SwishFuzzyMode( SW_RESULT r ); /* For low-level access to a property */ typedef enum { /* Property Datatypes */ PROP_UNDEFINED = -1, /* a result does not have a value for that prop */ PROP_UNKNOWN = 0, /* invalid property requested (not really used anyplace) */ PROP_STRING, PROP_INTEGER, PROP_FLOAT, PROP_DATE, PROP_ULONG } PropType; typedef union { /* storage of the PropertyValue */ char *v_str; /* strings */ int v_int; /* Integer */ time_t v_date; /* Date */ double v_float; /* Double Float */ unsigned long v_ulong; /* Unsigned long */ } u_PropValue1; typedef struct { /* Propvalue with type info */ PropType datatype; u_PropValue1 value; int destroy; /* flag to destroy (free) any pointer type */ } PropValue; PropValue *getResultPropValue (SW_RESULT result, char *name, int ID); void freeResultPropValue(PropValue *pv); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* !SEARCHSWISH_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]swish.hF����������������8���F�����������������g>2��ʢ��������������������8���������������8�����������������������������������������������������������������������>�/* ** $Id: swish.h,v 1.190.2.2 2004/01/30 19:47:18 whmoseley Exp $ ** ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. **------------------------------------------------- ** Added support for METADATA ** G. Hill ghill@library.berkeley.edu 3/18/97 ** ** Added Document Properties support ** Mark Gaulin gaulin@designinfo.com 11/24/98 ** ** Added safestrcpy() macro to avoid corruption from strcpy overflow ** SRE 11/17/99 ** ** Added Document Filter support (e.g. PDF, Winword) ** Rainer.Scherg@t-online.de (rasc) 1998-08-07, 1999-05-05, 1999-05-28 ** ** Added some definitions for phrase search ** Structure location modified to add frequency and word positions ** Structure entry modified to add link hash values for direct search ** ** Jose Ruiz jmruiz@boe.es 04/04/00 ** ** 2000-11-15 Rainer Scherg (rasc) FileProp type and routines ** ** 2001-01-01 Jose Ruiz Added ISOTime ** ** 2001-01-xx Rainer Scherg (rasc) Added property type structures, etc. ** 2001-01-xx Rainer Scherg (rasc) cmd-opt should be own structure in SWISH * (started) ** ** 2001-02-xx rasc replaced ISOTime by binary value ** removed SWISH.errorstr, etc. ** ResultExtFmtStrList & var ** ** 2001-02-28 rasc some cleanup, ANSI compliant ** 2001-03-12 rasc logical search operators via config changable ** moved some parts to config.h ** ** 2001-03-16 rasc truncateDocSize ** 2001-03-17 rasc fprop enhanced by real_filename ** 2001-04-09 rasc filters changed and enhanced ** 2001-06-08 wsm Add word to end of ENTRY and propValue to end of docPropertyEntry ** to save memory and less malloc/free ** ** 2001-08-12 jmruiz ENTRY struct modified to index in chunks ** */ #ifndef SWISH_H #define SWISH_H 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <sys/types.h> #include <sys/stat.h> #include <locale.h> #include <ctype.h> #include <errno.h> #include <time.h> #include <ctype.h> #include <time.h> #include <setjmp.h> #include "stemmer.h" /* for fuzzy_object */ #ifdef HAVE_CONFIG_H #include "acconfig.h" /* These are defines created by autoconf */ #endif #ifdef HAVE_WINDOWS_H #include <windows.h> #endif #ifdef HAVE_PROCESS_H #include <process.h> #endif /* Include swish defaults (that's not autoconf's config.h) */ #include "config.h" #ifdef NEXTSTEP #include <sys/dir.h> #endif #ifndef PATH_SEPARATOR #define PATH_SEPARATOR ":" #endif #if defined(__VMS) # include "vms/regex.h" # include <dirent.h> # include <stdarg.h> extern int ssnprintf(char *, size_t, const char *, /*args */ ...); extern int vsnprintf(char *, size_t, const char *, va_list); #else #include <dirent.h> #ifdef HAVE_PCRE #include <pcreposix.h> #else #include <regex.h> #endif #ifndef HAVE_MKSTEMP # include <mkstemp.h> #endif #endif #ifdef __cplusplus extern "C" { #endif /* $$$ THESE NEED TO BE UPGRADED WHEN THE INDEX FORMAT CHANGES */ #ifdef USE_BTREE #define SWISH_MAGIC 11076322L #else #define SWISH_MAGIC 21076322L #endif #define INDEXFILE "index.swish-e" #define BASEHEADER 1 #define INDEXHEADER "# SWISH format: " VERSION #define INDEXHEADER_ID BASEHEADER + 1 #define INDEXVERSION "# Swish-e format: " VERSION #define INDEXVERSION_ID (BASEHEADER + 2) /* Admin header */ #define NAMEHEADERPARAMNAME "IndexName" #define DESCRIPTIONPARAMNAME "IndexDescription" #define POINTERPARAMNAME "IndexPointer" #define MAINTAINEDBYPARAMNAME "IndexAdmin" /* Other headers that can be looked via the swish-e library */ #define INDEXEDONPARAMNAME "IndexedOn" #define WORDCHARSPARAMNAME "WordCharacters" #define BEGINCHARSPARAMNAME "BeginCharacters" #define ENDCHARSPARAMNAME "EndCharacters" #define IGNOREFIRSTCHARPARAMNAME "IgnoreFirstChar" #define IGNORELASTCHARPARAMNAME "IgnoreLastChar" #define STEMMINGPARAMNAME "UseStemming" #define SOUNDEXPARAMNAME "UseSoundex" #define FUZZYMODEPARAMNAME "FuzzyIndexingMode" #define FILECOUNTPARAMNAME "FileCount" /* Headers for output, and their offsets */ #define NAMEHEADER "# Name:" #define NAMEHEADER_ID (BASEHEADER + 3) #define SAVEDASHEADER "# Saved as:" #define SAVEDASHEADER_ID (BASEHEADER + 4) #define COUNTSHEADER "# Counts:" #define COUNTSHEADER_ID (BASEHEADER + 5) #define INDEXEDONHEADER "# Indexed on:" #define INDEXEDONHEADER_ID (BASEHEADER + 6) #define DESCRIPTIONHEADER "# Description:" #define DESCRIPTIONHEADER_ID (BASEHEADER + 7) #define POINTERHEADER "# Pointer:" #define POINTERHEADER_ID (BASEHEADER + 8) #define MAINTAINEDBYHEADER "# Maintained by:" #define MAINTAINEDBYHEADER_ID (BASEHEADER + 9) #define WORDCHARSHEADER "# WordCharacters:" #define WORDCHARSHEADER_ID (BASEHEADER + 10) #define MINWORDLIMHEADER "# MinWordLimit:" #define MINWORDLIMHEADER_ID (BASEHEADER + 11) #define MAXWORDLIMHEADER "# MaxWordLimit:" #define MAXWORDLIMHEADER_ID (BASEHEADER + 12) #define BEGINCHARSHEADER "# BeginCharacters:" #define BEGINCHARSHEADER_ID (BASEHEADER + 13) #define ENDCHARSHEADER "# EndCharacters:" #define ENDCHARSHEADER_ID (BASEHEADER + 14) #define IGNOREFIRSTCHARHEADER "# IgnoreFirstChar:" #define IGNOREFIRSTCHARHEADER_ID (BASEHEADER + 15) #define IGNORELASTCHARHEADER "# IgnoreLastChar:" #define IGNORELASTCHARHEADER_ID (BASEHEADER + 16) #define STEMMINGHEADER "# Stemming Applied:" //#define STEMMINGHEADER_ID (BASEHEADER + 17) #define SOUNDEXHEADER "# Soundex Applied:" //#define SOUNDEXHEADER_ID (BASEHEADER + 18) #define FUZZYMODE_HEADER "# Fuzzy Indexing Mode:" #define FUZZYMODEHEADER_ID (BASEHEADER + 18) #define MERGED_ID (BASEHEADER + 19) /* vv not used vv */ #define DOCPROPHEADER "# DocProperty" #define DOCPROPHEADER_ID (BASEHEADER + 20) /* ^^ not used ^^ */ #define DOCPROPENHEADER "# DocumentProperties:" #define DOCPROPENHEADER_ID (BASEHEADER + 21) #define SORTDOCPROPHEADER_ID (BASEHEADER + 22) #define IGNORETOTALWORDCOUNTWHENRANKING "# IgnoreTotalWordCountWhenRanking:" #define IGNORETOTALWORDCOUNTWHENRANKINGPARAMNAME "IgnoreTotalWordCountWhenRanking" #define IGNORETOTALWORDCOUNTWHENRANKING_ID (BASEHEADER + 23) #define TRANSLATECHARTABLEHEADER "# TranslateCharacterTable:" #define TRANSLATECHARTABLEPARAMNAME "TranslateCharacterTable" #define TRANSLATECHARTABLE_ID (BASEHEADER + 25) #define STOPWORDS_ID (BASEHEADER + 26) #define METANAMES_ID (BASEHEADER + 27) #define LOCATIONLOOKUPTABLE_ID (BASEHEADER + 28) #define BUZZWORDS_ID (BASEHEADER + 29) /* 2001-04-24 moseley */ #ifndef USE_BTREE #define TOTALWORDSPERFILE_ID (BASEHEADER + 30) /* total words per file array */ #endif /* -- end of headers */ #define MAXFILELEN 1000 #define MAXSTRLEN 2000 #define MAXWORDLEN 1000 #define MAXTITLELEN 300 #define MAXENTLEN 10 // #define HASHSIZE 101 // #define BIGSIZE 1009 // #define VERYBIGHASHSIZE 10001 // Change as suggested by Jean-Franois PIRONNE <jfp@altavista.net> // on Fri, 28 Dec 2001 07:37:26 -0800 (PST) #define HASHSIZE 1009 #define BIGHASHSIZE 10001 #define VERYBIGHASHSIZE 100003 #define MAXPAR 10 #define MAXCHARDEFINED 256 #define RD_BUFFER_SIZE 65356 /* init size, larger to avoid often reallocs (2001-03-16 rasc) */ #define NOWORD "thisisnotaword" #define SECSPERMIN 60 #define IN_FILE_BIT 0 #define IN_TITLE_BIT 1 #define IN_HEAD_BIT 2 #define IN_BODY_BIT 3 #define IN_COMMENTS_BIT 4 #define IN_HEADER_BIT 5 #define IN_EMPHASIZED_BIT 6 #define IN_META_BIT 7 #define STRUCTURE_END 7 #define IN_FILE (1<<IN_FILE_BIT) #define IN_TITLE (1<<IN_TITLE_BIT) #define IN_HEAD (1<<IN_HEAD_BIT) #define IN_BODY (1<<IN_BODY_BIT) #define IN_COMMENTS (1<<IN_COMMENTS_BIT) #define IN_HEADER (1<<IN_HEADER_BIT) #define IN_EMPHASIZED (1<<IN_EMPHASIZED_BIT) #define IN_META (1<<IN_META_BIT) #define IN_ALL (IN_FILE|IN_TITLE|IN_HEAD|IN_BODY|IN_COMMENTS|IN_HEADER|IN_EMPHASIZED|IN_META) /* Document Types */ enum { BASEDOCTYPE = 0, TXT, HTML, XML, WML, XML2, HTML2, TXT2 }; #define NODOCTYPE BASEDOCTYPE // This is used to build the property to read/write to disk // It's here so the buffer can live between writes typedef struct propEntry { unsigned int propLen; /* Length of buffer */ unsigned char propValue[1]; /* Actual property value starts here */ } propEntry; typedef struct docProperties { int n; /* to be removed - can just use count of properties */ struct propEntry *propEntry[1]; /* Array to hold properties */ } docProperties; #define RANK_BIAS_RANGE 10 // max/min range ( -10 -> 10, with zero being no bias ) /* This structure is for storing both properties and metanames -- probably should be two lists */ struct metaEntry { char *metaName; /* MetaName string */ int metaID; /* Meta ID */ int metaType; /* See metanames.h for values */ int in_tag; /* Flag to indicate that we are within this tag */ int max_len; /* If non-zero, limits properties to this length (for storedescription) */ int sort_len; /* sort length used when sorting a property */ char *extractpath_default; /* String to index under this metaname if none found with ExtractPath */ int alias; /* if non-zero, this is an alias to the listed metaID */ int rank_bias; /* An integer used to bias hits on this metaname 0 = no bias */ int *sorted_data; /* Sorted data . NULL if not read/done */ /* If 0, files are not sorted by this metaName/property */ }; /* These are used to build the table of seek pointers in the main index. */ typedef struct { long seek; } PROP_LOCATION; typedef struct // there used to be more in this structure ;) { PROP_LOCATION prop_position[1]; // one for each property in the index. } PROP_INDEX; typedef struct { int filenum; docProperties *docProperties; /* list of document props in memory */ PROP_INDEX *prop_index; /* pointers to properties on disk */ } FileRec; /* -- FileProperties -- store for information about a file to be indexed... -- Unused items may be NULL (e.g. if File is not opened, fp == NULL) -- (2000-11 rasc) -- (2000-12 Jose Ruiz) -- Added StoreDescription */ typedef struct { FILE *fp; /* may be also a filter stream or NULL if not opened */ char *real_path; /* path/URL to indexed file - may be modified by ReplaceRules */ char *orig_path; /* original path provided to swish */ char *work_path; /* path to file to index (may be tmpfile or real_path) */ char *real_filename; /* basename() of real_path */ long source_size; /* size reported by fstat() before filtering, if read from a file */ long fsize; /* size of orig file, but once read into buffer is size of buffer */ long bytes_read; /* Number of bytes read from the stream - important for sw->truncateDocSize and -S prog */ int done; /* flag to read no more from this stream (truncate) */ int external_program; /* Flag to only read fsize bytes from stream */ time_t mtime; /* Date of last mod of or. file */ int doctype; /* Type of document HTML, TXT, XML, ... */ int index_no_content; /* Flag, index "filename/real_path" only! */ struct StoreDescription *stordesc; /* Null if no description/summary */ struct FilterList *hasfilter; /* NULL if no filter for this file */ } FileProp; typedef struct LOCATION { struct LOCATION *next; int metaID; int filenum; int frequency; int posdata[1]; } LOCATION; /* 2002/01 jmruiz macros for accesing POSITION and structure */ #define SET_POSDATA(pos,str) ((pos) << 8 | (str)) #define GET_POSITION(pos) ((pos) >> 8) #define GET_STRUCTURE(pos) ((pos) & 0xff) typedef struct ENTRY { struct ENTRY *next; int tfrequency; /* Chunk's LOCATIONs goes here */ LOCATION *currentChunkLocationList; LOCATION *currentlocation; /* All locations goes here */ LOCATION *allLocationList; /* this union is just for saving memory */ struct { long wordID; int last_filenum; } u1; char word[1]; /* actual word starts here */ } ENTRY; typedef union { struct swline *nodep; char *data; } swline_other; struct swline { struct swline *next; swline_other other; char line[1]; }; /* For word hash tables */ typedef struct { struct swline **hash_array; int hash_size; int count; void *mem_zone; } WORD_HASH_TABLE; typedef struct { /* vars for WordCharacters */ int lenwordchars; char *wordchars; /* vars for BeginCharacters */ int lenbeginchars; char *beginchars; /* vars for EndCharacters */ int lenendchars; char *endchars; /* vars for IgnoreLastChar */ int lenignorelastchar; char *ignorelastchar; /* vars for IgnoreFirstChar */ int lenignorefirstchar; char *ignorefirstchar; /* vars for bump position chars */ int lenbumpposchars; char *bumpposchars; /* vars for header values */ char *savedasheader; int lensavedasheader; /* vars for numberchars */ /* Not yet stored in the header. */ int lennumberchars; /* Probably don't need it for searching */ char *numberchars; int numberchars_used_flag; int lenindexedon; char *indexedon; int lenindexn; char *indexn; int lenindexd; char *indexd; int lenindexp; char *indexp; int lenindexa; char *indexa; int minwordlimit; int maxwordlimit; FUZZY_OBJECT *fuzzy_data; /* Total files and words in index file */ int totalwords; int totalfiles; int removedfiles; /* var to specify how to ranking while indexing */ int ignoreTotalWordCountWhenRanking; /* added 11/24/98 - MG */ int *TotalWordsPerFile; int TotalWordsPerFileMax; /* max size of array - this isn't saved in the header */ /* Lookup tables for fast access */ int wordcharslookuptable[256]; int begincharslookuptable[256]; int endcharslookuptable[256]; int ignorefirstcharlookuptable[256]; int ignorelastcharlookuptable[256]; int bumpposcharslookuptable[256]; int translatecharslookuptable[256]; /* $$$ rasc 2001-02-21 */ int numbercharslookuptable[256]; /* Dec 12, 2001 - moseley -- mostly for ignoring numbers */ /* values for handling stopwords */ WORD_HASH_TABLE hashstoplist; /* Buzzwords hash */ WORD_HASH_TABLE hashbuzzwordlist; /* values for handling "use" words - > Unused in the search proccess */ WORD_HASH_TABLE hashuselist; /* This is an array of properties that are used */ /* These should not be in the header, rather in inde2�xf as they are not written to disk */ int *propIDX_to_metaID; int *metaID_to_PropIDX; int property_count; /* Values for fields (metanames) */ struct metaEntry **metaEntryArray; int metaCounter; /* Number of metanames */ } INDEXDATAHEADER; typedef struct IndexFILE { struct IndexFILE *next; struct IndexFILE *nodep; /* last */ struct SWISH *sw; /* Parent object */ char *line; /* Name of the index file */ unsigned long total_bytes; /* Just to show total size when indexing */ unsigned long total_word_positions; /* DB handle */ void *DB; /* Header Info */ INDEXDATAHEADER header; /* Pointer to cache the keywords */ char *keywords[256]; /* Support for merge */ int *meta_map; // maps metas from this index to the output index int *path_order; // lists files in order of pathname int current_file; // current file pointer, used for merged reading struct metaEntry *path_meta; // meta entry for the path name struct metaEntry *modified_meta; propEntry *cur_prop; // last read pathname int filenum; // current filenumber to use /* Used by merge.c */ int *merge_file_num_map; /* Cache for stemming */ WORD_HASH_TABLE hashstemcache; } IndexFILE; struct multiswline { struct multiswline *next; struct swline *list; }; typedef struct { int numWords; ENTRY **elist; /* Sorted by word */ } ENTRYARRAY; struct url_info { struct url_info *next; char *url; }; struct IndexContents { struct IndexContents *next; int DocType; struct swline *patt; }; struct StoreDescription { struct StoreDescription *next; int DocType; char *field; int size; }; /* These two structs are used for lookuptables in order to save memory */ /* Normally Metaname, frequency and structure are repetitive schemas */ /* and usually have also low values */ /* In this way three values can be fit in just one using a lookup table*/ /* Structure itself can use its own lookuptable */ struct int_st { struct int_st *next; int index; int val[1]; }; struct int_lookup_st { int n_entries; struct int_st *hash_entries[HASHSIZE]; struct int_st *all_entries[1]; }; /* These two structs are used for lookuptables in order to save memory */ /* Normally part of the path/url are repetitive schemas */ /* and usually have also low values */ struct char_st { struct char_st *next; int index; char *val; }; struct char_lookup_st { int n_entries; struct char_st *hash_entries[HASHSIZE]; struct char_st *all_entries[1]; }; /* Place to store compiled regular expressions */ typedef struct regex_list { struct regex_list *next; regex_t re; char *replace; int replace_count; /* number of pattern replacements - to estimate size of replacement string */ int replace_length; /* newstr_max = replace_length + ( replace_count * search_str_len ) */ int global; /* /g flag to repeat sub */ int negate; /* Flag for matches if the match should be negated */ char *pattern; /* keep string pattern around for debugging */ } regex_list; typedef struct path_extract_list { struct path_extract_list *next; struct metaEntry *meta_entry; regex_list *regex; } path_extract_list; /* -- Property data types -- Result handling structures, (types storage, values) -- Warnung! Changing types inflicts outpur routines, etc -- 2001-01 rasc $$$ ToDO: data types are not yet fully supported by swish $$$ Future: to be part of module data_types.c/h */ typedef enum { /* Property Datatypes */ PROP_UNDEFINED = -1, PROP_UNKNOWN = 0, PROP_STRING, PROP_INTEGER, PROP_FLOAT, PROP_DATE, PROP_ULONG } PropType; /* For undefined meta names */ typedef enum { UNDEF_META_DISABLE = 0, // Only for XMLAtrributes - don't even try with attributes UNDEF_META_INDEX, // index as plain text UNDEF_META_AUTO, // create metaname if doesn't exist UNDEF_META_ERROR, // throw a nasty error UNDEF_META_IGNORE // don't index } UndefMetaFlag; typedef union { /* storage of the PropertyValue */ char *v_str; /* strings */ int v_int; /* Integer */ time_t v_date; /* Date */ double v_float; /* Double Float */ unsigned long v_ulong; /* Unsigned long */ } u_PropValue1; typedef struct { /* Propvalue with type info */ PropType datatype; u_PropValue1 value; int destroy; /* flag to destroy (free) any pointer type */ } PropValue; /* --------------------------------------- */ #define MAX_ERROR_STRING_LEN 500 typedef struct SWISH { /* New module design structure data */ // struct MOD_SearchAlt *SearchAlt; /* search_alt module data */ struct MOD_ResultOutput *ResultOutput; /* result_output module data */ struct MOD_Filter *Filter; /* filter module data */ struct MOD_ResultSort *ResultSort; /* result_sort module data */ struct MOD_Entities *Entities; /* html entities module data */ struct MOD_DB *Db; /* DB module data */ struct MOD_Index *Index; /* Index module data */ struct MOD_FS *FS; /* FileSystem Index module data */ struct MOD_HTTP *HTTP; /* HTTP Index module data */ struct MOD_Swish_Words *SwishWords; /* For parsing into "swish words" */ struct MOD_Prog *Prog; /* For extprog.c */ /** General Purpose **/ /* list of associated index files */ IndexFILE *indexlist; unsigned char *Prop_IO_Buf; /* For compressing and uncompressing properties (static-like buffer) */ unsigned long PropIO_allocated;// total size of the structure int PropCompressionLevel; /* Total words and files in all index files */ int TotalWords; int TotalFiles; /* verbose flag */ int verbose; int headerOutVerbose; /* -H <n> print extended header info */ /* Error vars */ int lasterror; char lasterrorstr[MAX_ERROR_STRING_LEN+1]; /* 06/00 Jose Ruiz */ int isvowellookuptable[256]; /* used in check.c */ /********* Document Source info **********/ /* structure for handling all the directories/files (IndexDIR) while indexing */ struct swline *dirlist; /* structure for handling IndexOnly config data while indexing */ struct swline *suffixlist; /******** Structures for parsers **********/ /* Limit indexing by a file date */ time_t mtime_limit; long truncateDocSize; /* size of doc, at which it will be truncated (2001-03-16 rasc) */ /* structure for handling replace config data while searching */ regex_list *replaceRegexps; /* It's common to want to limit searches to areas of a file or web space */ /* This allow extraction of a substring out of a file path, and indexed as a metaname */ path_extract_list *pathExtractList; /* structure for handling NoContents config data while searching */ struct swline *nocontentslist; /* 08/00 Jose Ruiz Values for document type support */ int DefaultDocType; /* maps file endings to document types */ struct IndexContents *indexcontents; /* Should comments be indexed */ int indexComments; /******** Variables used by the parsers *********/ /* 12/00 Jose Ruiz Values for summary support */ struct StoreDescription *storedescription; /* structure to handle Ignoremeta metanames */ struct swline *ignoremetalist; /* Structure for handling metatags from DontBumpPositionOnMetaTags */ struct swline *dontbumpstarttagslist; struct swline *dontbumpendtagslist; /* Undefined MetaName indexing options */ UndefMetaFlag UndefinedMetaTags; UndefMetaFlag UndefinedXMLAttributes; // What to do with attributes libxml2 only /*** libxml2 additions ***/ /* parser error warning level */ int parser_warn_level; int obeyRobotsNoIndex; /* for extracting links into a metaEntry */ struct metaEntry *links_meta; /* for extracting image hrefs into a metaEntry */ struct metaEntry *images_meta; /* if allocated the meta name to store alt tags as */ int IndexAltTag; char *IndexAltTagMeta; // use this meta-tag, if set /* for converting relative links in href's and img src tags absoulte */ int AbsoluteLinks; /* structure to handle XMLClassAttributes - list of attributes to use content to make a metaname*/ /* <foo class="bar"> => generates a metaname foo.bar */ struct swline *XMLClassAttributes; const char **header_names; /* list of available header names */ const char **index_names; /* list of current in-use header names */ /* Temporary place to store return string lists */ const char **temp_string_buffer; int temp_string_buffer_len; /* Temporary place to store a stemmed word -- so library user doesn't need to free memory */ char * stemmed_word; int stemmed_word_len; /* array to map the various possible HTML structure bits for rank */ int structure_map_set; /* flag */ int structure_map[256]; void *ref_count_ptr; /* pointer for use with SWISH::API */ } SWISH; /* 06/00 Jose Ruiz ** Structure StringList. Stores words up to a number of n */ typedef struct { int n; char **word; } StringList; /* * This structure defines all of the functions that need to * be implemented to an Indexing Data Source. * Right now there are two Indexing Data Source types: * file-system based and an HTTP web crawler. * Any Data Source can be created as long as all of the * functions below are properly initialized. */ struct _indexing_data_source_def { const char *IndexingDataSourceName; /* long name for data source */ const char *IndexingDataSourceId; /* short name for data source */ void (*indexpath_fn) (SWISH * sw, char *path); /* routine to index a "path" */ int (*parseconfline_fn) (SWISH * sw, StringList *l); /* parse config file lines */ }; extern struct _indexing_data_source_def *IndexingDataSource; void allocatedefaults(void); int SwishAttach(SWISH *); SWISH *SwishNew(void); void SwishFree(SWISH *); /* strcpy doesn't check for overflow in the 'to' string */ /* strncpy doesn't guarantee null byte termination */ /* can't check strlen of 'from' arg since it is sometimes a function call */ #define safestrcpy(n,to,from) { strncpy(to,from,n); (to)[(n)-1]='\0'; } /* Jose Ruiz 04/00 ** Macro for copying postions between arrays of integers ** copy num integers on dest (starting at posdest) from ** orig (starting at posorig) */ /* #define CopyPositions(dest,posdest,orig,posorig,num) \ {int i;for(i=0;i<num,i++) (dest)[i+(posdest)]=(orig)[i+(posorig)];} */ #define CopyPositions(dest,posdest,orig,posorig,num) \ memcpy((char *)((int *)(dest)+(posdest)),(char *)((int *)(orig)+(posorig)),(num)*sizeof(int)) /* Min macro */ #define Min(a,b) ((a) < (b) ? (a) : (b)) /* C library prototypes */ SWISH *SwishInit(char *); void SwishClose(SWISH *); void SwishResetSearch(SWISH *); void free_swish_memory( SWISH *sw ); /* in swish2.c */ /* These are only checked in dump.c */ #define DEBUG_INDEX_HEADER (1<<0) #define DEBUG_INDEX_WORDS (1<<1) #define DEBUG_INDEX_WORDS_FULL (1<<2) #define DEBUG_INDEX_STOPWORDS (1<<3) #define DEBUG_INDEX_FILES (1<<4) #define DEBUG_INDEX_METANAMES (1<<5) #define DEBUG_INDEX_ALL (1<<6) #define DEBUG_INDEX_WORDS_ONLY (1<<7) #define DEBUG_INDEX_WORDS_META (1<<8) #define DEBUG_LIST_FUZZY (1<<9) /* These are only checked while indexing */ #define DEBUG_WORDS (1<<0) #define DEBUG_PARSED_WORDS (1<<1) #define DEBUG_PROPERTIES (1<<2) #define DEBUG_REGEX (1<<3) #define DEBUG_PARSED_TAGS (1<<4) #define DEBUG_PARSED_TEXT (1<<5) /* These are only checked while searching */ /* These are are checked everywhere (can't share bits) */ extern unsigned int DEBUG_MASK; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* !SWISH_H */ �����������������������0[swish-e.Include]swish_qsort.h#�������������������#�������h�����������p_2�6ڟ���������������������������������������������������������������������������������������������������������� �/* $Id: swish_qsort.h,v 1.2 2001/06/17 16:07:03 meier Exp $ *- * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: src/lib/libc/stdlib/qsort.c,v 1.8 1999/08/28 00:01:35 peter Exp $ * * Renamed swish_qsort for use with swish. [wsm] June 2001 * */ typedef int cmp_t (const void *, const void *); void swish_qsort(void *a, size_t n, size_t es, cmp_t *cmp); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]swish_words.h#�������������������#�����������������ܣ2��-EV�����������������������������������������������������������������������������������������������������������#ifndef SWISH_WORDS_H #define SWISH_WORDS_H 1 #ifdef __cplusplus extern "C" { #endif /* internal representation, may not be changed */ /* BTW, keep strlen(MAGIC_NOT_WORD) >= strlen(NOT_WORD) to avoid string reallocation in the code */ #define AND_WORD "<and>" #define OR_WORD "<or>" #define NOT_WORD "<not>" #define MAGIC_NOT_WORD "<__not__>" #define PHRASE_WORD "<precd>" #define AND_NOT_WORD "<andnot>" /* internal search rule numbers */ #define NO_RULE 0 #define AND_RULE 1 #define OR_RULE 2 #define NOT_RULE 3 #define PHRASE_RULE 4 #define AND_NOT_RULE 5 struct swline *parse_swish_query( DB_RESULTS *db_results ); void initModule_Swish_Words (SWISH *sw); void freeModule_Swish_Words (SWISH *sw); void stripIgnoreFirstChars(INDEXDATAHEADER *, char *); void stripIgnoreLastChars(INDEXDATAHEADER *, char *); #ifdef __cplusplus } #endif /* __cplusplus */ #endif ���������������������������������������������������������������������������������������������������������������������0[swish-e.Include]swregex.h#�������������������#�������T�����������y2�Yx�����������������������������������������������������������������������������������������������������������#ifndef __HasSeenModule_regex #define __HasSeenModule_regex 1 void add_regex_patterns( char *name, regex_list **reg_list, char **params, int regex_pattern ); void add_replace_expression( char *name, regex_list **reg_list, char *expression ); int match_regex_list( char *str, regex_list *regex, char *comment ); char *process_regex_list( char *str, regex_list *regex, int *matched ); void free_regex_list( regex_list **reg_list ); void add_regular_expression( regex_list **reg_list, char *pattern, char *replace, int cflags, int global, int negate ); #endif /* __HasSeenModule_regex */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0wish-e.Include]swstring.h#�������������������#�����������������2�Ly,���������������������������������������������������������������������������������������������������������� �/* ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94 ** ** This program and library is free software; you can redistribute it and/or ** modify it under the terms of the GNU (Library) General Public License ** as published by the Free Software Foundation; either version 2 ** of the License, or any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU (Library) General Public License for more details. ** ** You should have received a copy of the GNU (Library) General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** ** 2001-02-22 rasc fixed macros (unsigned char) */ #ifndef STRING_H #define STRING_H 1 #define CASE_SENSITIVE_ON 1 #define CASE_SENSITIVE_OFF 0 char *lstrstr (char *, char *); char *getconfvalue (char *, char *); int isoksuffix (char *filename, struct swline *rulelist); char *replace (char *, char *, char *); char *SafeStrCopy (char *,char *, int *); void sortstring (char *); char *mergestrings (char *,char *); void makelookuptable (char * ,int *); void makeallstringlookuptables (SWISH *); /* 06/00 Jose Ruiz ** Macros iswordchar, isvowel */ #define iswordchar(header,c) header.wordcharslookuptable[tolower((unsigned char)(c))] #define isvowel(sw,c) sw->isvowellookuptable[tolower((unsigned char)(c))] /* #define isindexchar(header,c) header.indexcharslookuptable[c] indexchars stuff removed */ /* Functions for comparing integers for qsort */ int icomp2 (const void *,const void *); /* 06/00 Jose Ruiz ** Function to parse a line into a StringList */ StringList *parse_line (char *); /* 06/00 ** Function to free memory used by a StringList */ void freeStringList (StringList *); int isnumstring (unsigned char*); void remove_newlines (char*); void remove_tags (char*); unsigned char *bin2string(unsigned char *,int); char *strtolower (char *str); #define makeItLow(a) strtolower ((a)) /* map old name to new $$$ */ char *str_skip_ws (char *s); void str_trim_ws(char *string); char charDecode_C_Escape (char *s, char **se); /* ISO-Routines */ unsigned char char_ISO_normalize (unsigned char c); char *str_ISO_normalize (char *s); unsigned char *StringListToString(StringList *sl,int n); int BuildTranslateChars (int trlookup[], unsigned char *from, unsigned char *to); unsigned char *TranslateChars (int trlookup[], unsigned char *s); char *str_basename (char *path); char *cstr_basename (char *path); char *cstr_dirname (char *path); char *estrdup (char *str); char *estrndup (char *str, size_t n); char *estrredup (char *s1, char *s2); const char *comma_long( unsigned long u ); /* Make life easy for now */ #include "swregex.h" #endif /* STRING_H */ ��������������������������������������������������������������������������������������������������������������������0[swish-e.Include]sys.h#�������������������#�������O�����������2��(W�����������������������������������������������������������������������������������������������������������#include "acconfig.h" #ifdef STDC_HEADERS # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_UNISTD_H # include <sys/types.h> # include <unistd.h> #endif #ifdef STAT_MACROS_BROKEN # include "posixstat.h" #endif #if STDC_HEADERS # include <stdlib.h> #endif #ifndef NULL # ifdef __STDC__ # define NULL ((void *)0) # else # define NULL (0x0) # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]txt.h#�������������������#������������������ҩ2��yC<6�����������������������������������������������������������������������������������������������������������/* $Id: txt.h,v 1.6 2001/10/11 22:21:14 whmoseley Exp $ ** ** */ int countwords_TXT (SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0wish-e.Include]worddata.h#�������������������#�������G����������ح2�ڎ�����������������������������������������������������������������������������������������������������������/* */ #define WORDDATA_MAX_REUSABLE_PAGES 16 typedef struct WORDDATA_Reusable_Page { unsigned long page_number; int page_size; } WORDDATA_Reusable_Page; typedef struct WORDDATA_Page { unsigned long page_number; int used_blocks; int n; int modified; int in_use; struct WORDDATA_Page *next_cache; unsigned char data[0]; /* Page data */ } WORDDATA_Page; #define WORDDATA_CACHE_SIZE 97 typedef struct WORDDATA { WORDDATA_Page *last_put_page; /* last page after an insert (put) */ WORDDATA_Page *last_del_page; /* last page after a delete (del) */ WORDDATA_Page *last_get_page; /* last page after a read (get) */ struct WORDDATA_Page *cache[WORDDATA_CACHE_SIZE]; int page_counter; unsigned long lastid; int num_Reusable_Pages; WORDDATA_Reusable_Page Reusable_Pages[WORDDATA_MAX_REUSABLE_PAGES]; FILE *fp; } WORDDATA; WORDDATA *WORDDATA_Open(FILE *fp); void WORDDATA_Close(WORDDATA *bt); unsigned long WORDDATA_Put(WORDDATA *b, unsigned int len, unsigned char *data); unsigned char * WORDDATA_Get(WORDDATA *b, unsigned long global_id, unsigned int *len); void WORDDATA_Del(WORDDATA *b, unsigned long global_id, unsigned int *len); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.Include]xml.h#�������������������#������������������V2��yC<6�����������������������������������������������������������������������������������������������������������/* $Id: xml.h,v 1.13 2001/10/11 22:21:14 whmoseley Exp $ ** ** ** The prototypes */ int countwords_XML (SWISH *sw, FileProp *fprop, FileRec *fi, char *buffer); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e]README.#�������������������#�������8����������ZR2��)ʢ����������������������������������������������������������������������������������������������������������$�NAME The Swish-e README File Upgrading? If you are upgrading Swish-e please review the CHANGES file before installation. The index format may change and existing indexes may need to be re-created before use. What is Swish-e? Swish-e is Simple Web Indexing System for Humans - Enhanced. Swish-e can quickly and easily index directories of files or remote web sites and search the generated indexes. Swish-e it extremely fast in both indexing and searching, highly configurable, and can be seamlessly integrated with existing web sites to maintain a consistent design. Swish-e can index web pages, but can just as easily index text files, mailing list archives, or data stored in a relational database. Swish is designed to index small to medium sized collection of documents, Although a few users are indexing over a million documents, typical usage is more often in the tens of thousands. Currently, Swish-e only indexes eight bit character encodings. Swish-e version 2.2 was a major rewrite of the code and the addition of many new features. Memory requirements for indexing have been reduced and indexing speed is significantly improved from previous versions. New features allow more control over indexing, better document parsing, improved indexing and searching logic, better filter code, and the ability to index from any data source. Swish-e version 2.4 includes a major rewrite of the C API and a new Perl module for accessing the swish-e C library. In addition, Swish-e 2.4 uses the GNU Auto Tools. The significant changes are where files are installed, and the use of Libtool to create the swish-e library as a shared library on many platforms. Basically, installation is easier than previous versions, and more files are installed in "standard" locations (e.g. documentation is installed in $prefix/share/doc/swish-e). Note: Due to the new build and installation system in Swish-e 2.4 some documentation may incorrectly list the location of files. Please report any documentation errors to the Swish-e Discussion list. Swish-e is not a "turn-key" indexing and searching solution. The Swish-e distribution contains most of the parts to create such a system, but you need to put the parts together as best meets your needs. This gives you the power to index and search your documents the way you wish and to seamlessly integrate a search engine into your web site or application. To use swish-e you will need to configure Swish-e to index your documents, create an index by running Swish-e, and setup an interface such as a CGI script (a script is included) to search the index and display results. Swish uses helper programs to index documents of types that Swish-e cannot natively index. These programs may need to be installed separately from Swish-e. Swish-e is an Open Source (see: http://opensource.org ) program supported by developers and a large group of users. Please take time to join the Swish-e discussion list at http://Swish-e.org. Key features * Quickly index a large number of documents in different formats including text, HTML, and XML * Use "filters" to index other types of files such as PDF, gzip, or Postscript. * Includes a web spider for indexing remote documents over HTTP. Follows Robots Exclusion Rules (including META tags). * Can use an external program to supply documents to Swish-e, such as an advanced spider for your web server or a program to read and format records from a relational database. * Document "properties" (some subset of the source document, usually defined as a META or XML elements) may be stored in the index and returned with search results * Document summaries can be returned with each search * Word stemming, soundex, metaphone, and double-metaphone indexing for "fuzzy" searching * Phrase searching and wildcard searching * Limit searches to HTML links * Use powerful Regular Expressions to select documents for indexing or exclusion * Easily limit searches to parts or all of your web site * Results can be sorted by relevance or by any number of properties in ascending or descending order * Limit searches to parts of documents such as certain HTML tags (META, TITLE, comments, etc.) or to XML elements. * Can report structural errors in your XML and HTML documents * Index file is portable between platforms. * A Swish-e library is provided to allow embedding Swish-e into your applications for very fast searching. A Perl module is available that provides a standard API for accessing Swish-e. * Includes example search script with context summaries and search term and phrase highlighting. Can be used with popular Perl templating systems. * Swish-e is fast. * It's open source and FREE! You can customize Swish-e and you can contribute your fancy new features to the project. * Supported by on-line user and developer groups Where do I get Swish-e? The current version of Swish-e can be found at: http://Swish-e.org Please make sure you use a current version of Swish-e. Information about Windows binary distributions can also be found at this site. How Do I Install Swish-e? Read the INSTALL page. Building from source is recommended. On most platforms Swish-e should build without problems. A list of platforms where Swish-e has been built can be found in the INSTALL page. Information on building for VMS and Win32 can be found in sub-directories of the "src" directory. Check the Swish-e site for information about binary distributions (such as for Windows). In addition to the INSTALL page, make sure you read the SWISH-FAQ page if you have any questions, or to get an idea of questions that you might someday ask. Problems or questions about installing Swish-e should be directed to the Swish-e discussion list (see the Swish-e web site at http://Swish-e.org). Please read "Where do I get help with Swish-e?" below before posting any questions to the Swish-e list. The Swish-e Documentation Documentation is provided as HTML pages installed in $prefix/share/doc/swish-e where $prefix is /usr/local if building from source, or /usr if installed as part of a package from your OS vendor. Under Windows $prefix is selected at installation time. A subset of the documentation is installed as system man pages as well. Documentation is also available on-line at http://swish-e.org. If your system includes the required support files and programs, the distribution make files can also generate the documentation in these formats: Postscript PDF (Adobe Acrobat) See INSTALL for information on creating the PDF and Postscript versions of the documentation. Patches or updates to the documentation should be done against the POD files located in the pod directory of the distribution, or (preffered) against the cvs repository. Where do I get help with Swish-e? If you need help with installing or using Swish-e please subscribe to the Swish-e mailing list. Visit the Swish-e web site listed above for information on subscribing to the mailing list. Before posting any questions please read QUESTIONS AND TROUBLESHOOTING. Speling mistakes Please contact the Swish-e list with corrections to this documentation. Any help in cleaning up the docs will be appreciated! Any patches should be made against the .pod files, not the .html files. Swish-e Development Swish-e is currently being developed as an open source project on SourceForge http://sourceforge.net. Contact the Swish-e list for questions about Swish-e development. Swish-e's History SWISH was created by Kevin Hughes circa 1994 to fill the need of the growing number of Web administrators on the Internet - many of the indexing systems were not well documented, were hard to use and install, and were too complex for their own good. The system was widely used for several years, long enough to collect some bug fixes and requests for enhancements. In Fall 1996, The Library of UC Berkeley received permission from Kevin Hughes to implement bug fixes and enhancements to the original binary. The result is Swish-enhanced or Swish-e, brought to you by the Swish-e Development Team. Document Info Each document in the Swish-e distribution contains this section. It refers only to the specific page it's located in, and not to the Swish-e program or the documentation as a whole. $Id: README.pod,v 1.17.2.1 2004/01/30 18:35:55 whmoseley Exp $ . ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.bin]LIBTEST.EXE������������������������������������ߎ]�=ߎ]�������������������"����������� �������������������������������������������������������������������������>���������� ��h��������������������������������������������������(���ߎ]��������������0�������@�� ��������������������������������������r�������������������cߎ]�LIBTEST��������������������������������V1.0�����������A13-00�������������������������������$������������� ���������������$������������� ��K�������������$������������� ���������������$������������� ����������������$�������������J���������������$����(�������� ���������������8�������������� �����������LIBZ_SHR32_001�������8�������������� ����������CMA$TIS_SHR_001������8������������������������� DPML$SHR_001���������4����&��������������������� LIBOTS_001�������8������������������������ DECC$SHR_001���������@���� �������������������CESYS$PUBLIC_VECTORS_001�������������0 �� ��@ �����@�����$� �� ��������������e������������������`����� ��������������������������I��������������������P����������0�����0�� ��` �����@�����(��� ����I�������������� %s ������������# %s:��� %lu ��� %s����� �������No������Yes�����swishdbfile�����swishtitle������swishdocsize����OK������swishfilenum����swishdocpath����Parsed Words������������������`"����������!����� "�����H�����no results! ����P�����&�����0(�� ��0����������L�?� ����@����� &�����WordCharacters������� ���������������������0"����������!����� �����!����������"�����0�����x �����Not OK��swishrank�������swishreccount���0�� ��` �����@�����(��� ������������@���������� Status: %d����� [%s] : �����������������������������`�����p����� ���������� words:�������Failed to stem��P�����`�����p(��������������P����� ��������������������P ���������� �����М����������p�����0�����12345���runs����F����� �������������������`�����0 �����0��"������������0�|�� ������������running���������index.swish-e���Fuzzy Mode: %s ���������abc3def���������foo OR bar����������������P�����h �����sugar�����������0����� ����������������End of loop�����%s ����foo���������������08��"���������P�����0��� ������������������� "����������������������������0�� �������0�����,��� ���� �����X�����F����� �����0��"�������P�����0�|�� ����E����� ���������������������0����� E�����0�����A����� 0�"��@����������� � (��������������=�������0 ��"�� "�����P�����(�<�� ����@h���������������������,�����0��"�������P�����0�|�� ����0������*�����0��"��p*����� �����,���� ����G����� �����0��"��C�����@�����0�|�� ����0(�� ���@�����@�����0��� ����0�� ��A�����0�����$��� ����`�����'�����0x��"��<����������T�?� ������������������ F����� �����0��"��A�����@�����(�<�� ����E�����0[����������0��"��9�����`�����D�� �����������������p*�����0��"��6�����`�����8�� ����0��"��4����������D�� ���� [�����0]�����pX�����:�����W�����9�����W����� ;�����(��������������W�����P9�����PX�����09�����0`�"���+���������P�� �����R�����[�����p(�������������� X������;�����pW�����p9����������D�������������������d�����[�����[�����]�����0��"��#����������P�� ����` �����<or>����<and>���<not>���<andnot>��������<precd>���������`e���������������h�����C�����p8�����0R�����p����������+����������p(�����swishrank�������asc�������������pp��������������0��"������������T�� �����F����� 8�����F����� �����resultSort Zone���������desc����\�����`����� J�����x7�����l�����`@�����0�� ��P�����@�����,�<�� ����0K����������0��"�������0�����$� �� ����0�� ��`�����`�����<�� ����H�����p ���������0�����P�����0�����0�����0����������0�� ��0�����@�����8�|�� ������������j���������������@)�����pn����������0�� �������0�����4��� �������������������� ��������������0�����������0�����P�����0�� ������� �����(���� ����0����������0����������0��"��E�����0����� ��� ���� j�������������`"�������������������h�����0��"��@E�����0�������� ����������0�����0J�����0������F�����������������������������@"��������������0�� ��I�����@�����(�<�� ����0�� ��H�����@�����,�<�� ����0��"��G�����P�����8��� ����0��"��F�����@�����$� �� ���� �����X�����0������F�����0��"�� F�����0����� ��� ����p"��������������0 ��"��J�����@����� ��� ����`�����'�����P����� $�����0��"��\�����p�����D�� ���� �����$�����G�����8�����@�����"�����0��"��@O�����@����� � �� ����0��"��O����������L�� ����j����������������������������*�������������������F����� 8�����F����� ����� (�������������������p#�����0@��"��0R����������T�� ��������������p(��������������E�����0[�����E����� �����<=�����������>=������0�����R�����0�����Q�����0��"���N�����@�����(��� ������������ �����X�����0��"��0M�����@�����$� �� ��������������0�� ��L�����0�����$��� ����0�� ��0K�����P�����@��� ����0��"��p^�����`�����@�� ���� ��������������p(��������������p��������������0H��"�������p�����4��� ����@������%lu�����I������������������0����������0��"�� �����0�����(� �� ������������@(��������������E����� �����0��"�������0����� ��� ����F����� �����0��"��Ѐ�����0�����$� �� ����������0��"�������@�����0�<�� ������������(�������������� ���������������(��������������0��"��~����� �����(���� ����0��"��`~����� �������� ����0�����w����� �����0��"�� {�����0�����8� �� ������������ (��������������:ascii7:��������0�����`z�����0��"��x�����p�����D�� ���� F����� �����0�����w�����0��"��w�����0�����4��� ����0��"��@u�����0�����(��� ����0l�������������#��������������0�� ��0t�����P�����0�|�� �������������������� ��������������0��"��@s�����@�����8�<�� ����0��"��r�����0�����4� �� ����0������q�����0�� ��p�����0�����4��� ����(��������������0��"���p�����@�����$�<�� ����P ��������������0��"��@o�����@�����4��� ����0�� ��pn�����0�����$� �� ����0��"��j���������`�� ���������h�������������0������Pi����� 0� ��pj����������� �aeiouAEIOU������0�����Pf�����0��"��pg�����`�����4��� ����E�����0[�����@�����0�� ��pf�����0�����(��� ����0��"��`e�����@�����,�<�� ����0��"��d�����@�����4�|�� ������������pp��������������0��"��0b����������P�� �����)��������������0��"���`�����P�����(�|�� ����0�����������������0�� �������`�����,� �� ������������I��������������err: �����������P������� . �����I�������������� "��������������0��"������� �����$��� ������������������l�������������I��������������0��������������������������0�����������0�� �������0�����0� �� ����%s������%s: %s��0����� �����0����������0�� �������p�����,� �� ������������������� Warning: ������ ���������������`(��������������0�� �������`�����,� �� ����0�� �������p�����0��� ����p(�����������������������������(��������������0�����������0�� �������P�����<���� ����0�� �������p�����,� �� ����0���������������������������0��"�������0�����(� �� ������������������E����� �����@J�����8�����pj�����������]�����@�����0��"��P�����@�����$�<�� ����o�������������pp��������������Y�����9���������������0�� ������� �����(���� ���������h�����0��"�������0����� ��� ����K�����<�����V�����;�����0��"��p�����@�����(�|�� ����j���������������(�����pn����������0�� ��Ќ�����P�����,��� ����F����� �����P�����'�����G�����7�����V�����;�����]�����@����������p)�����`J�����P=�����0�� ��������0����� � �� ����0��"��0�����0�������� ����@p������������������h�����0�����p�����0��"��0�����P�����4��� ����p(�������������� (���������������(��������������0��"��p�����0�����$��� ������������������E����� �����0�"��Т�����@����0��� ����p�����������������������������@(�������������� �����X����� ��������������0��"��P�����0�����(��� ����(��������������aeiouwxy��������aeiou���aeiouy��0��"��Р����� ��������� ����0��"��p����� ��������� ����0��"������� ��������� ����(��������������0�� �������0�����$��� ����F����� �����0������`���������������������0�����@�����0����� �����0�����������0�����И����� 0�"��М������������0��������������������������0�� ��@�����0�����(� �� ����0��"�������0�����$� �� ����0��"��Ж�����@�����(�<�� ������������pp��������������0��"�������@�����$��� ����Stem����0��"�������@������ �� ������������0m�����`b�����0��"��@�����@�����(�<�� ����������������������� e�����0����� �����0�����������0��"������� ����� ��� ����0�� ��������0�����0��� ���� %s ���������I��������������0��������������������������0��������������������`������������� %lu ���v�����0�� ��P�����@�����(��� ������������I�������������� %s ����# %s:��� ������� %s�����1�������0��"��`�����0�����$� �� ������������ F����� �����0��"�������@�����4�|�� ����pp�������������������h�����И����������Fuzzy Mode������������0�����Soundex Applied����������������� ����� �����0�� �� �����`�����0��� ���� ����� 0�"�������������� (��������������0��"�������@����� � �� ����0��"�� �����@����� � �� ����0��"�������P�����,�|�� ��������������0��"�������@�����$��� ����0��������������������������0��"��������0�����$��� ����E����� �����0��"��������0����� � �� ����0������@���������������������F����� �����E����� �������������������������p(����������������������0��"��0�����`�����0�� ������������`z������������� �������������� �����X�����S�����p]�����#��������������0��"�������P�����(�<�� ����������0 ��"�������`�����,�|�� ������������ F����� �����0 ��"�������P�����(�<�� ����0��"��p�����0�����$��� ���������h�����0��"��P����������,�|�� ����(default)�������G�����8�����0A�����8�����Y������:�������������������0H��"��0����������P�� ����0��"�� �����@�����<��� ����'��������������p��������������(��������������0�� ��`�����`�����<�� ����0�� ��p�����0�����@� �� ����0 ��"��ж�����P�����0�<�� ����G�����7�����Y����swishrank�������swishdbfile�����swishfilenum����swishreccount���0��"�������@�����$��� ������������T�����P]������F����� 8���������������r�����������0��#��@�����0����� � �� ����0��"�������@�����$��� ��������������������w��������������@��������������I��������������%lu�����0��"��P�����P�����,�|�� ����������(null)��0��"�������@�����(� �� ����0�� ��p�����@�����8�<�� ����0�� ��`�����0������ �� ������������0��"�������0�����$� �� ����(��������������E����� �����0�� ��P�����0�����(� �� ����F����� ����������p)�����@����������0�� ��@�����0�����(� �� ����Pi��������������������������pf����������`e����������}�������������Ж�����H�����None������������ {����������0�� �������0����� � �� ����0�� �������@�����,�<�� ������������������ �����X�����=�����P7�����0��"�������0����� ��� ������������������p(��������������0��"�������@�����$�<�� ����0��"������� �������� ����0����������0�� ������� �����(��� ����H�����p ����� 0�"������� �������������� (��������������0��"��P�����P�����0�|�� ����G����� �����F����� �����Word Hash Zone����������������p(�������������������� 0�#�� ������������0�����0�����0��������������0����������"���� 0�#�������������� 0�#��������������0 ��"�������`�����4��� ����@Y�����@:�����X�����:�����X�����:�����F����� ������R�����[�����E����� �����0��"��������p�����<�� ����������������ж�����@%����� �����$�����������0 ��"������������<�� �����~����������h�����P+�������������E�����0[�����0��"�������p�����<�� ����0��"��P�����@�����4�<�� ����������������������4����������4�����0��������������������������������Pe�����0�������������������������� �����d�����0��"��������@�����4��� �����'�����03�����p �����p3�����0��"�������@����� ��� ����P�����3�����&�����3����� �����4����� �����3�����(�����2�����0�����4�����0��"�������P�����0�� ����x�������������&�����3�����������4�����~������������������4�����0�����3�����0��������������������������������Pe�����0�������������������������� �����d�����0�����`�����0��"�������0�����8� �� �����'�����03�����p �����p3�����0�����@�����0��"��P�����0�����(� �� ����0�����4�����P�����3�����0��"�������0������ �� ����0 ��"�������P�����,��� ����0��"��P�����@�����(�<�� ���������4�����0��"�������P�����<��� �����������������������4�����&�����3����������4�����0��������������������������������Pe�����0�������������������������� �����d�����0����������0��"��������@�����0��� ���� �����4�����0�����4�����0�����`�����0��"�������P�����0�|�� �����'�����03�����p �����p3�����P�����3����������4�����~�������������0�����3�����'�����2�����0��"��0����� �����$���� ����`"��������������0�� ��`)�����@�����,�<�� ����I��������������`�����|�������[�������{�������%c������' ������]�������}�������0���������������������������@"��������������0��"��#�����@�����,��� ����������0��"��(�����0�����(� �� ����0�� ��%�����0����� � �� ������������I�������������� "��������������0��"��(�����@�����$�<�� ����0��"��$�����`�����4�� ����0�� ��'�����0�����(� �� ����0�� ��'�����0����� � �� ����0�� ��&�����0������ �� ����0�������'���������������������0������&���������������������0��"��p �����P�����D�� ����0��"��0�����`�����H�� ����0��"��P�����0�����P� �� ����'��������������0����� ���������������������0��"�������0�����L� �� ����0��������������������������0����� �����0����������0�����@�����0����������0�����0�����0����������0����� �����0����������0��"��*�����@�����D�<�� ����'������������������4����������4�����0������=��������������������������Pe�����0�����=��������������������� �����d�����0��"��-����� �����(���� ����p �����p3�����0 ��"��@2�����P�����<�<�� ����P�����3������'�����03�����0�����4����� �����3����� �����4�����(�����2�����0��"��.�����@�����<�<�� ���������0(��"��`6�����`�����(�<�� ������������&�����3�����0��"���.�����0�����(��� ����0��"��0?�����P�����0�<�� ����E����� ����� �����X����� F����� �����0 ��"��P>�����@������ �� ����������������������h�����w�����@�����F����� �����0�� ��=�����@�����$�<�� ����`.�����0����� J�����0��"���I�����0�����0��� ����*������� (��������������pp��������������0�� ��G�����@�����0�|�� ����0��"��G����� �����$���� ����0�����G�����0��"���F�����@�����0�|�� ����0��"��E�����@�����0�|�� ����0�����D�����0��"��C�����@�����0�|�� ����0��"��B�����@�����0�|�� ����0�� ��0A�����0�����$� �� ����0������@�����0������@J���������������������`�����E�����0�����W���������������������0�����PX���������������������0�����W���������������������0�����pW���������������������0 ��"��Y����������L�� ����p(����������������������������F����� ����� F����� �����E����� �����>�0�����Y���������������������0������`Y���������������������0�����@Y���������������������0�����Y���������������������0�����X���������������������0�����X���������������������0�����X���������������������0�����pX���������������������0����� X���������������������0�����W���������������������0�����PW���������������������0����� W���������������������0������W���������������������0������V���������������������0�����V���������������������0������V�����0�� ��U�����P�����,�<�� �����R�����[�����0�� ��pR�����p�����D�� �����������������G�����7�����0?�����6����������h�����0�� ��T�����P�����4��� ����P�����)�����0p�� ��K����������T�� ����`e����������`T�����[�����pf����������Pi���������������@�����0 ��"��J�����`�����8�|�� �����d�����[�����0������`J��������������������� �����`O�����0������\�����0������y�����0�� ��w�����0�����(� �� ����p(�������������� 0�"��w�������������������� (��������������<not>���0�� ��b�����@�����0�|�� ����Ё����������h�����F����� ����� 0�"��0w������������<or>����<and>���0��"��c�����0�����(� �� ������������pp��������������and�����not�����or������0�����^�����0��"��@^�����p�����L�� ���������������������������� �������������� F����� ����������@�����(��������������������������(��������������*���������������C�����p8����������)�����`z����������w�����@�����0��"��d����������L�� ���������@)����� ��������������0�����0�����@���������������(����������p(����������@'�����)�������'%s'����0 ��"��l����������T�� ����<__not__>�������@(������������������� )�����<precd>���������<andnot>��������=�������0�� ��]�����0�����,��� ����0�� ���]�����0�����$� �� ������������E����� �����0��"��p{�����P�����,��� ����4�������������������4�����&�����3����������4�����0��������������������������������Pe�����0�������������������������� �����d�����0�����P�����0����������0�����0�����0��"��p�����P�����4�|�� �����'�����03�����P�����3������������������p �����p3����� �����4�����0�����4�����0��"��~�����@�����D�<�� ���������4�����0��"��P�����P�����,�|�� ����0�����3�����0��"��0�����`�����4�� ����@�������������������4����������4�����&�����3�����0��������������������������������Pe�����0�����`��������������������� �����d�����0����������0����������0��"�������P�����8�<�� �����'�����03�����P�����3�����p �����p3����� �����4����������0��"�������@�����$��� ������������0�����3����������4�����0�����������C�����0H��"������������0�<�� ������������@�����������������?�@F��������@����������������������������> ף������������V�����;�����J�����J�����I�����J�����8J�����I�����H�����G�����`I�����PI�����@I�����M�����0M�����native�� �����X�����O�����K�����0L�����K�����L�����K�����0�� ��`�����0�����$� �� ����K�����L�����L�����J����� K�����L�����`N�������������E����� �����M�����hM�����M����� I�����I�����G�����H�����H������K�����HJ�����hJ�����I�����(J�����0������������������������������������������������rb������0�� �������@�����4��� �������������������F����� �����@��������������p(��������������9��������������`��������������0�� ��p�����@�����(��� ����0��#�������0�����$��� ����T�����P]�����0�� �������P�����,�|�� ������������������@����������������������0��"�� �����P�����<�|�� ������������pQ�����]����������h������������������� ��������������0�� ��0�����0����� ��� ����S�����p]�����0�� �������`�����8�� ������������0 �� �������`�����P�|�� ������������L�����]�������������������0��"��P����� �����(���� ����0����� �����0�����������0 ��"�� �����`�����0�|�� ����0����������0��"��p�����0�����(��� ���� ��������������0��"�������P�����,�<�� ������������0��"��P����� �����$��� ����0�����@�����0�����0�����0����� �����0����������0��"�������@�����(��� ����00��"�������p�����<�|�� ������������(��������������0 ��"������������D�� ����0 ��"�������p�����@�� ���� (�������������� �����H*�����0����������0����������0��"�������P�����D�|�� ���������p*�����WriteWordHash���F����� �����G����� �����0��"�������P�����@��� ����P�����XV����������xV��������������������0��"��п�����@�����$�<�� ����0��"��@�����0�����(��� ����`�����PU�����0�����`�����0�"�������P����@�� ���� L�������������H�����p �����E�����0[�����P�����V����� �����V�����0��"�������� �����(���� ����0����������0��"�������@�����(��� ����0��"������� �����,���� ����0��"�������@�����(��� ����0��"�� ����� �����0��� ����putc() failed: ���������0��"�������0�����,� �� ����0�� �������0�����$� �� ������������P��������������0�� ��`�����P�����8��� ����0��������������������������rb+�����0��"�������0�����0� �� ����XV�����U�����xV�����V�����8V�����U�����V�����08��"�������p�����4�|�� ���������0�����F�����������������������M��������������(��������������_prop�����������@(��������������0�� ��Щ�����0�����$��� ����wb������0H��"��`����������,�<�� ����_temp��������������������������������0�� �� �����0�����(� �� ����0��"��@�����`�����4�� ����j�������������&�����3����������4������������������������4�����0�����3�����0��������������������������������Pe�����0�������������������������� �����d�����0�����p�����0����������0��"�������P�����4�|�� �����'�����03�����P�����3�����p �����p3�����0��"�������@�����D�<�� ���������4�����0��"��0�����@�����(�<�� ���� �����4�����0��"��0�����@�����4�<�� ����z������������������4����������4�����0��������������������������������Pe�����0�������������������������� �����d�����0��"�������@�����$�<�� �����'�����03�����p �����p3�����&�����3����� �����4�����0��"�������0�����0� �� ����@�������������0�����4����� �����4�����0������p��������������������������Pe�����0�����P��������������������� �����d�����0����������0����������0��"�������P�����<��� ����&�����3������'�����03�����P�����3�����p �����p3����������4�����������4����������4������������������'�����2�����0��"�������@�����,�<�� ������������������0�����3�����&�����3�����0������@��������������������������Pe�����0����� ��������������������� �����d�����0����� �����0����� �����0��"�� �����@�����0�<�� �����'�����03�����p �����p3�����P�����3����� �����0��"�������@�����D�<�� �����������������4����������4�����0��"�������P�����(�<�� ����0��"��`�����@�����(��� ����E����� �����F����� �����G����� �����0�� �������0�����,� �� ���� F����� �����0@��#������������4��� ����������0��"������� �����(���� ����08��#�� �����p�����H�<�� ����0��"��0����� �����(���� ����0��"��P�����@�����,��� ����0����������0��"��P�����0�����$� �� ������������F����� �����H�����p �����0��"�������@�����<��� ����������������������4����������4�����0�������'��������������������������Pe�����0�����&��������������������� �����d�����0��"�� �����P�����$�<�� �����'�����03�����P�����3�����p �����p3�����0��"�� '�����P����@�� ����Ъ�������������p(������������������������������@(��������������p���������� �������������� �����X��������������������� ��������������0��"��@*�����@�����D�<�� ����(������������������4����������4�����0������ =��������������������������Pe�����0������=��������������������� �����d�����0�����/�����0�����0/�����0��"��P/�����@�����0�<�� �����'�����03�����p �����p3�����P�����3�����&�����3�����P�����0 ��"��5�����P�����(�<�� ������������0�����3�����0��"��@=�����@�����4�<�� ����������������������4����������4�����0������A��������������������������Pe�����0�����A��������������������� �����d�����0��"��>�����@�����$�<�� �����'�����03�����p �����p3�����&�����3����� �����4�����0������A�����0��"��pD�����@�����0�<�� ����0@�� ��E����������T�� ����0[�������������0�����L�����0����� O�����0������R�����0�����`T�����@�����0�� ��d�����P�����(�|�� ��������������h�����������0�� ���d�����@�����(��� ��������������������������E����� �����F����� ���������������0 �"��b�����@ ����D��� ���� ���������������> ף����0�� ��W�����P�����,�|�� ����0�� ��T�����@�����0�<�� ����0�� ��`�����p�����8�� ������������G����� ����� F����� �����0�� ��[�����@�����@� �� ����0�� �� [����� �����,���� ����0�����T�����0������`S�����0�����S�����0��"��pQ�����0����� ��� ����0�����N�����0�� ��L�����P�����0�|�� ��������������0��"��0f�����@�����$��� ����@������������� ��������������E����� �����s != NULL�������(��������������s->str != NULL��p(��������������0�� ��Pg�����0�����4� �� ����F����� �����0������ k�����0�����j�����0�� ��h�����0�����,� �� ���� F����� �����0�� ��`l�����@�����0�<�� �����(��������������0��"��i�����0�����(� �� �����)��������������W�������K�������WITZ����CZ������0��"��`k����������8�|�� ����(��������������P��������������� (����������������������0�����`i�����0�� ��h�����0�����0� �� ������������ ��������������ILLO����AS������AGGI����ET������OS������YSL�����SH������UMB�����MA������KL������IB������DT������G�������RANGER��RGY�����ES������EB������OWSKY���EWSKY���OM������0�������OWSKI���OU������ZI������FX������EAU�����SIA�����SC������HEIM����HOLM����TIA�����TH������OO������OI������CC������HYM�����HIA�����CK������HU������V�������GN������PN������ORCHES��PS������Q�������CHIA���� G������ACH�����DG������ C������CY������CG������CH������CHAE����O�������EN������CI������SAN ����Y�������IE������WICZ����WR������VON ����SK������Z�������SCH�����M�������P�������KN������R�������L�������F�������T�������X�������0�� ��0m����������L�?� ����S�������J�������H�������N�������A�������B�������ER������E�������KS������I�������D�������C�������VAN ����ALLE����EY������TK������CE������CIA�����JOSE����TS������CIO�����CIE�����CQ������HARIS���HARAC���MACHER��BACHER�� ��� Q������CAESAR��ORCHID��MC������ARCHIT��U������� �������UCCEE���UCCES���HEM�����CHORE���HOR�����AI������EM������TCH�����TION����ED������SIO�����HOEK����UY������SIAN����AU������IAU�����ZA������ZO������AM������TTH�����EWSKI���WH������EP������EI������MANGER��DANGER��IN������LI������DD������IL������EL������ISL�����ME������HOLZ����SUGAR���OGGI����OGY�����ILLA����IER ����0�����j�����0��"�� �����`�����<�� ����0�����01�����"��������������0�� ������� �����0��� ����$�����2�����0�� �������@�����(�<�� ����@"�������������������1�����err: Number [%d], Type [%s], Optional Message: [%s] ��� Unknown header type '%d' �����p���@����������Testing SW_ResultToSW_HANDLE() = '%s' ��Path: %s Rank: %lu Size: %lu Title: %s Index: %s Modified: %s Record #: %lu File #: %lu �������swishlastmodified�������# Total Results: %d ����Removed Stopwords������� Word Count: %d ��������At end of program�������Enter search words: ����SwishStemWord 'running' => '%s' �������Words that begin with 'f': �����Failed to get first result �����Failed to seek to result 0 �����Couldn't test stemming because search returned no results ������ -- Stemmer Test -- ����Testing SW_ResultsToSW_HANDLE() = '%s' �����������������Attempted to read results before searching������Attempted to SwishSeekResult before searching������������������Unknown metaname '%s' -- swish_words failed to find.����Property '%s' in index '%s' is not compatible with index '%s'���Property '%s' is not defined in index '%s'������Rank is not defined as an auto property - must specify sort parameters��resultSearch Zone�������Passed in NULL search object to SwishExecute����ResultsSetRefPtr - passed null address����������Ran out of memory (could not allocate %lu more bytes)!��Ran out of memory (could not reallocate %lu more bytes)!����������������Binary Sort issue - please report to swish-e list�������Cannot limit by swish result property '%s'������Specified limit name '%s' is not a PropertyName���������Property '%s' value '%s' must be <= '%s'��������Failed to set range for property '%s' values '%s' and '%s'������Property '%s' is already limited��������Limits have been prepared (and executed) -- call SwishResetSearchLimit() first���������� ��0�����������@�����������������������P�����������`�����p������������Parsed word '%s' exceeded max length of %d��������������No search words specified�������All search words too common to be useful��������Unknown property name in display properties�����Unknown property name to sort by��������Invalid property type���Unknown metaname��������Single wildcard not allowed as word�����Wildcard not allowed within a word������Word not found��Search word exceeded maxwordlimit setting�������Failed to setup limit by property�������No more results�Index Header Error������Could not open index file�������Unknown index file format�������Index file(s) is empty��Index file error��������Invalid swish handle����Invalid results object��Syntax error in query (missing end quote or unbalanced parenthesis?)����Invalid error number '%d'�������Swish aborted with non-negative lasterror���������������Invalid index file '%s' passed to SwishWordsByLetter����SwishSetRefPtr - passed null address����No index file supplied����������None����Stem����Soundex�sses����ss������ies�����i�������ss������ss������s���������������eed�����ee������ed��������������ing�������������at������ate�����bl������ble�����iz������ize�����bb������b�������dd������d�������ff������f�������gg������g�������mm������m�������nn������n�������pp������p�������rr������r�������tt������t�������ww������w�������xx������x���������������e�������y�������i�������ational�ate�����tional��tion����enci����ence����anci����ance����izer����ize�����abli����able����alli����al������entli���ent�����eli�����e�������ousli���ous�����ization�ize�����ation���ate�����ator����ate�����alism���al������iveness�ive�����fulnes��ful�����ousness�ous�����aliti���al������iviti���ive�����biliti��ble�����icate���ic������ative�����������alize���al������iciti���ic������ical����ic������ful�������������ness������������al��������������ance������������ence������������er��������������ic��������������able������������ible������������ant�������������ement�����������ment������������ent�������������sion����s�������tion����t�������ou��������������ism�������������ate�������������iti�������������ous�������������ive�������������ize�������������e���������������e���������������ll������l�������Stemming_en�����Metaphone�������DoubleMetaphone�Stemming_es�����Stemming_fr�����Stemming_it�����Stemming_pt�����Stemming_de�����Stemming_nl�����Stemming_en1����Stemming_en2����Stemming_no�����Stemming_se�����Stemming_dk�����Stemming_ru�����Stemming_fi�����called fuzzy_convert with NULL FUZZY_OBJECT�����called fuzzy_free_data with null value��Unknown FuzzyIndexingMode�������Invalid FuzzyIndexingMode '%d' in index file����Options available for FuzzyIndexingMode: �������Name����Pointer�Saved as��������Total Words�����Total Files�����Indexed on������Description�����Maintained by���MinWordLimit����MaxWordLimit����WordCharacters��BeginCharacters�EndCharacters���IgnoreFirstChar�IgnoreLastChar��StopWords�������BuzzWords�������Stemming Applied��������Soundex Applied�Fuzzy Mode������IgnoreTo>�talWordCountWhenRanking� Unknown header type '%d' �����p���@����������Invalid HEADER type '%d'��������Invalid OTHER header '%s'�������Stemming Applied�������p������������������Must pass a results object to SwishRemovedStopwords�����Must pass a results object to SwishParsedWords��Index file '%s' does not have header '%s'�������Index file '%s' is not an active index file�����SwishHeaderValue requires a valid swish handle��Swish Handle does not have any associated index files!?!?�������SwishIndexNames requires a valid swish handle���SwishHeaderNames requires a valid swish handle����������EncodeProperty called but doesn't know the property type :(�����EncodeProperty - Invalid char '%c' found in string '%s'���������EncodeProperty - Attempted to convert '%s' to a number��Warning: Attempt to add duplicate property.�����Asked for too small of a buffer size!���Failed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d ��������Mapped propID %d to invalid property index������Failed to add property '%s' in file '%s'��������Swish-e database error. Unknown property type '%d'�����Invalid property name '%s'������Called getResultPropValue with NULL result������Property '%s' is not numeric����Invalid property type for property '%s' ��������%Y-%m-%d %H:%M:%S %Z����DecodeDocProperty passed NULL meta_entry��������SwishResultPropertyStr was called with a NULL result����0123456789abcdefghijklmnopqrstuvwxyz�����������called sort_single_index_results without a vaild sort_data struct�������called sort_single_index_results with invalid number of sort keys������������������ ��@��`��p����`�������0��������������@ ��p �� �� �� �� �� �� �� �� �� ��� �� ��@ ��` �� �� �� �� ��� �� ��` �� �� �������������� ��@��`�������������%3d (line %4d): [%d]'���faulty slice operation: ���������������������� ��P��������������p���� ��������0��������������swishdefault����swishreccount���swishrank�������swishfilenum����swishdbfile�����swishdocpath����swishtitle������swishdocsize����swishlastmodified�������internal error - called addMetaEntry without a name�����Called init_property_list with non-null header->propIDX_to_metaID���������������failed to add new meta entry '%s:%d'����Severe index error in header��������������p������@��P��@��`������@���������������� ������0��P����p����Fatal Error: Failed to find insert point in replace_swline����������`������������0�� ��`������P�����p������@ �� ��� ��P ��`������� ��@����������������p��p��p������������� ��@��`����Failed to rename '%s' to '%s' : ��������Failed to close file '%s': �����Couldn't open the property file "%s": ��Failed to seek to property index located at %ld for file number %d : ���Failed to read properties located at %ld for file number %d : ��Failed to seek to properties located at %ld for file number %d : �������Failed to call DB_ReadProperty_Native with seek positions�������Error writing %d of %d bytes: ��Failed to write file number %d metaID %d to property file. Tried to write %d, wrote %Zu : �����O/S failed to tell me where I am - file number %d metaID %d : ��Property database file not opened ������putc() failed writing null: ����Error writing to device while trying to write %d bytes: ��������Read %d bytes, expected %d in DB_ReadFirstWordInvertedIndex_Native������Internal db_native.c error in DB_WriteWordHash_Native: ���������fputc() returned error writing null: ���Internal db_native.c error in DB_WriteWordData_Native: ���������RAM Disk: write words���fputc() failed writing null: ���Error while flushing ramdisk to disk:���Internal DB_native error - DB->num_words != DB->worddata_counter: ������Internal DB_native error - DB->num_words != DB->wordhash_counter: ������Index file '%s' and property file '%s' are not related.���������File "%s" has an unknown format.��������Could not open the index file '%s': ����Couldn't write the file "%s": ��Couldn't create the property file "%s": ��������Couldn't create the index file "%s": ���Index file '%s' is a directory������������0��P��p������������������@������0������������� ����� ��@��`����������� �� ��@ ��` �� �� ��������������� ��`���������������������������������0��p����������P��p����������@����� ��P�����������������������Internal error in remove_worddata_longs���������Failed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d ��������WordData Compression Error. zlib compress2 returned: %d Worddata size: %d compress buf size: %d�������Internal error in compress_location routine�����compress1 failed to write: �����compress1 failed to write null: ����������������DISK$USER1:[jfp.swish-e-2_4_2.src]double_metaphone.c;1���� ��`��� ���� ��P ��P������0��p����@������ ��`�� ��� �����"��@"��0$����$���������������������������������� !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvqxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !cloy|"c " -r 23'u . 1 " ?aaaaaaeceeeeiiiidnooooo ouuuuy saaaaaaeceeeeiiiidnooooo ouuuuy y�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������l�����l�����l�����m�����Hm����� pm����� m����� m�����m����� m������n����� o�����0n����� Xn�����hn����n����n����n����n����n����o�����{���q�q����������������������������������������t�t�������������������������������������������X�����h�H � �8�����@p�����������������t�����������������Hp�����������������Pp�W����������������t�����������������u�����������������u���Y�X�Y����(u��A�A�B����8u��0P��P��Q����Hu��@T�T�0U� ���Xu��C�`C�HD� ���hu��@.�.�P/� ���xu��R�R�S� ���u��0�/�0� ���u��Q�Q�Q����u��pZ�@Z�Z����u��,�p,�-����u��PW� W�W����u��@5�5�H6�e���Xp�`p�����������f���hp�pp������������g���xp�p�����������h���p�p�����������������������������������������i���p�p���������������j���p�p�����k���p�p���������������������������������l���p�p�����������m���p�p�����������n���p�p�����������o���p��q������������p���q�q������������q���q� q������������r���(q�0q������������s���8q�@q������������t���Hq�Pq������������u���Xq�`q������������v���hq�pq������������w���xq�q������������x���q�q������������y���q�q������������z���q�q�������������������������������������q�q������������������q�q������������������q�q������������������q��r������������������r�r������������������r� r������������������(r�0r������������������8r�@r������������������Hr�Pr�������������������Xr�`r������������������hr�pr������������������xr�r������������������r�r������������������r�r������������������r�r������������������r�r������������������r�r������������������r�r������������������r�r������������������r��s�����������������������������������������������-��s�s���������������.��s� s������������/��(s�0s���������������0��8s�@s���������������1��Hs�Ps���������������4��Xs�`s������������5��hs�ps������������������������������������������xs�s�������������s�s�������������s�s�������������s�s�������������s�s�������������s�s�������������s�s�������������s�s�������������s��t�������������t�t�������������t� t�������������(t�0t�����������������8t�@t�����������������Ht�Pt�������������Xt�`t�������������ht�pt�������������xt�t�������������t�t�������������t�t�������������t�t���������������������������������������������t�t��������������t�t��������������������������������������v�������P���v�������0���v��������x���v��������|����w�������H���w�������X���v�������`��� w�������h���0w��������l���@w��������p���Pw����������`w������� ���pw����������w�������$���w����������w������� ��w������� ��w�������t���w�������t���w�������t���w����������hed�����ethed���ered����e�������erede���ende����erende��ene�����erne����ere�����en������heden���eren����er������heder���erer����s�������heds����es������endes���erendes�enes����ernes���eres����ens�����hedens��erens���ers�����ets�����erets���et������eret����gd������dt������gt������kt������ig������lig�����elig����els�����lst����st������ig������ls�����A������������0������*����������������������@ �����������H ���������������P �����������X �����������` ��������������h ��������������p ��������������x �������������� �������������� �������������� ����������� � ������������� � ������������� ����������� � ������������� � ������������� ����������� �������������� �������������� �������������� �������������� �������������� �������������� ����������������������������������������������������������������������� ��������������(��������������0�����������8��������������@��������H��������P��������X��������`�����������h���������������p��������������x�����������������������������������������������������������������������������������������������������I�������Y�������dd������kk������tt������ene�����se������en������heden���s�������end�����ig������ing�����lijk����baar����bar�����aa������ee������oo������uu������a�������e�������i�������o�������u�������y�������Y�������i�������I�������y�������Y�������y�������i�������e�������gem�����heid����heid����c�������en������ig������e�������e�������������������������`���������������h�������������������p��������x�����������������A���������������������A����������������C������������������������������������������������������������������� ���������������(���������������0���������������8���������������@���������������H���������������P���������������X����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gener���ied�����s�������ies�����sses����ss������us������bb������dd������ff������gg������bl������mm������nn������pp������rr������at������tt������iz������ed������eed�����ing�����edly����eedly���ingly���anci����enci����ogi�����li������bli�����abli����alli����fulli���lessli��ousli���entli���aliti���biliti��iviti���tional��ational�alism���ation���ization�izer����ator����iveness�fulness�ousness�icate���ative���alize���iciti���ical����tional��ational�ful�����ness����ic������ance����ence����able����ible����ate�����ive�����ize�����iti�����al������ism�����ion�����er������ous�����ant�����ent�����ment����ement���e�������l�������succeed�proceed�exceed��canning�inning��earring�herring�outing��andes���atlas���bias����cosmos��dying���early���gently��howe����idly����lying���news����only����singly��skies���skis����sky�����tying���ugly����A����A���7�����y�������Y�������y�������Y�������ss������ie������i�������ee������e�������e�������y�������Y�������i�������tion����ence����ance����able����ent�����ize�����ate�����al������ful�����ous�����ive�����ble�����l�������og������ful�����less����tion����ate�����al������ic������s�������t�������l�������ski�����sky�����die�����lie�����tie�����idl�����gentl���ugli����earli���onli����singl���Y�������y��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������(�����������0���������������8�����������@�����������H��������������P�����������X�����������`�����������h� ����������p�����������x���� ���������������������������������������������������������������������� ������������������������������������ ����������� ����������������������������������������������������������������������������������������������� ����������� ����������� ��������������������� �����������(�����������0�����������8�����������@�����������H��������������P�����������X���������������`�����������h�����������p�����������x������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��������(��������0��������8��������@��������H��������P��������X��������`�����������h� ����������p�����������x��������������������������������������� ����������� �����������������������������������������������������������pa������sti�����kaan����han�����kin�����hn�����kn����ko������p������k������lla�����na������ssa�����ta������lta�����sta�����ll�����n������ss�����t������lt�����st�����lle�����ine�����nsa�����mme�����nne�����ni������si������an������en������n������ns�����aa������ee������ii������oo������uu������������������a�������lla�����na������ssa�����ta������lta�����sta�����tta�����lle�����ine�����ksi�����n�������han�����den�����seen����hen�����tten����hin�����siin����hon�����hn�����hn������������ll�����n������ss�����t������lt�����st�����tt�����eja�����mma�����imma����mpa�����>�impa����mmi�����immi����mpi�����impi����ej�����mm�����imm����mp�����imp����i�������j�������mma�����imma����k�������kse�����ksi�����i�������a�������e�������i�������o���������������������ie������e�������po������t�������po������j�������o�������u�������o�������j����������`$��������h$��������P&��������X&��������`&�����������h&������������������������������A������������� �����A�������������� �����a������������� ��������#�����������#�����������#�����������#�����������#�����������#�����������#�����������#�����������#�����������#������������$��������$��������$��������$�������� $�����������($�����������0$��������8$��������@$��������H$��������P$�����������X$�����������p$�����������x$�����������$�����������$�����������$�����������$�����������$�����������$�����������$���������������$��������$��������$��������$��������$��������$��������$������������$�����������$�������������%������������%������������%������������%����������� %�����������(%���� ����������0%��������8%��������@%��������H%�����������P%� �������������X%� ���6����`%� ���p5����h%� �������������p%� ���6����x%� �������������%� ���6����%� �������������%� �������������%� �������������%�����������%�����������%�����������%�����������%�����������%�����������%�����������%���� ����������%��������%�����������%�����������%������������&�����������&�����������&�����������&����������� &�����������(&��������0&�����������8&� ����������@&�����������H&� ���������������������*����*��� �*���0�&���@����P�F���`� ���p������������I�������U�������Y�������iqU�����abl�����Ir�����ir�����eus�����iv������ic������abil����iv������iqUe����atrice��ance����ence����logie���able����isme����euse����iste����ive�����if������usion���ation���ution���ateur���iqUes���atrices�ances���ences���logies��ables���ismes���euses���istes���ives����ifs�����usions��ations��utions��ateurs��ments���ements��its����ment����ement���issementamment��emment��aux�����eaux����eux�����it�����ira�����ie������isse����issante�i�������irai����ir������iras����ies�����mes����isses���issantestes����is������irais���issais��irions��issions�irons���issons��issants�it������irait���issait��issant��iraIent�issaIentirent���issent��iront���t������iriez���issiez��irez����issez���a�������era�����asse����ante����e������ai������erai����er������as������eras����mes����asses���antes���tes����es�����ais�����erais���ions����erions��assions�erons���ants����s������ait�����erait���ant�����aIent���eraIent�rent���assent��eront���t������ez������iez�����eriez���assiez��erez�����������e�������Ire����ire����ion�����Ier�����ier������������ell�����eill����enn�����onn�����ett�����u�������U�������i�������I�������y�������Y�������y�������Y�������q�������u�������U�������i�������u�������y�������ic������iqU�����log�����u�������ent�����at������eux�����i�������abl�����iqU�����at������ic������iqU�����eau�����al������eux�����ant�����ent�����e�������s�������s�������t�������i�������gu��������������������e�������Y�������i��������������c����������.������������/�����������/������������issements�������A�����������g����A��������������������������������������.���������������.���������������.���������������.�����������.�����������.�����������.�����������.�����������.�����������/�����������/����������� /�����������(/�����������0/�����������8/�����������@/�����������H/� ����������P/�����������X/�����������`/�����������h/�����������p/�����������x/�����������/�����������/�����������/�����������/�����������/�����������/�����������/�����������/�����������/� ����������/�����������/�����������/�����������/�����������/�����������/�����������/������������0�����������0����������� ���4���� ����������0�����������0����������� 0�"�������������(0�#��� ����������00�"��� ����������80�"�������������@0� ����������H0�'��� ����������P0�����������X0���������������`0�����������h0�����������p0�����������x0�����������0�����������0��������������0�����������0�����������0�����������0�����������0�����������0�����������0�����������0�����������0� �������������0� �������������0�����������0�����������0�����������0������������1�����������1�����������1��������������1�������������� 1�����������(1�����������01�����������81�����������@1�����������H1�����������P1�����������X1�����������`1�����������h1�����������p1���������������x1�����������1���������������1�����������1�����������1�����������1�����������1��������������1�����������1�����������1��������������1�����������1�����������1�����������1�����������1�����������1�����������1���������������2�����������2��������������2��������������2����������� 2�����������(2�����������02�����������82��������������@2�����������H2�����������P2��������������X2�����������`2�����������h2�����������p2�����������x2�����������2� �������������2�!�������������2�!�������������2� �������������2�����������2�����������2���������������2���������������2�����������2�����������2�����������2���������������2��������2��������2��������2���������3�����������������U�������Y����������������������������e�������em������en������ern�����er������s�������es������en������er������st������est�����ig������lich����end�����ig������ung�����lich����isch����ik������heit����keit����u�����u������������ss������u�������U�������y�������Y�������y�������u�������a�������o�������u�������ig������e�������e�������er������en���������P@�����������X@��������A������������� ����������������������?���������������?���������������?���������������?���������������?���������������?������������@�����������@�����������@�����������@����������� @�����������(@������������������0@�����������8@�����������@@�����������H@��������������`@�����������h@�����������p@�����������x@�����������@�����������@�����������@�����������@�������������������������������������� ������������������@�������������������������*��'6��>��E��L��:Q��U��Y��]��a��1d��g��i��Nl��n��p��s��u��v��x��{z��%|��}��E����*����܄��$��a���������� ��������������ғ������e��8����И����X����қ����>������G������7��ס��u������?��Ӥ��e����������!����+����/����,����#����������s����V��Ư��5������y����K����������G���� ��l��̵��*������A������Q������Y������[������V������K������:����ֽ��#��p������R������0��y������P������"��g������4��w������?��������C��������@��~������7��s������(��c��������M��������1��j��������H��������!��W��������+��_��������-��`��������)��[����������O����������>��m��������'��U�������� ��8��d����������A��m����������D��n����������@��i�������� ��6��^����������&��M��u����������7��]������������@��f������������C��h������������@��c������������6��X��{����������&��H��i������������1��R��s������������6��V��v������������4��S��r���������� ��,��J��i��������������;��Y��v���������� ��&��C��`��}���������� ��)��E��a��}���������� ��$��@��\��w��������������5��P��k������������ ��$��>��X��r������������ ��'��A��Z��t������������ ��$��=��U��n����������������2��J��c��{������������ ��"��:��Q��i�������������� ��#��:��Q��h������������������5��K��b��x����������������)��?��U��k������������������-��B��W��m�������������������*��?��S��h��}�������������� ��!��5��I��^��r������������������&��9��M��a��t������������������$��7��J��^��q���������������� ����.��A��T��g��y���������������� �� ��2��D��W��i��{���������������� ����/��A��S��e��w��������������������&��8��I��Z��l��}��������������������(��9��J��[��l��}��������������������$��4��E��U��f��v������������������ ����)��9��I��Y��j��z����������������������(��8��G��W��g��v���������������������� ��0��?��N��^��m��|����������������������"��1��@��O��]��l��{�������������������������+��:��H��W��e��t������������������������ ��.��<��J��X��g��u�����������������������*�8�F�T�a�o�}������������ �-�;�H�V�c�q�~�������������*�7�E�R�_�l�y�������������!�.�;�G�T�a�n�z��������������+�7�D�P�\�i�u������������ ��!�-�:�F�R�^�j�v���������������*�6�A�M�Y�e�q�|������������ �� �+�7�B�N�Y�e�p�|������������ � � �& �2 �= �H �S �_ �j �u � � � � � � � � � � � � � � � �& �1 �< �G �R �] �h �s �~ � � � � � � � � � � � �� � � � �+ �5 �@ �K �U �` �k �u � � � � � � � � � � � � � � � � �( �3 �= �H �R �] �g �q �| � � � � � � � � � � � � � � � � �* �4 �> �I �S �] �g �q �{ � � � � � � � � � ��������������������� ������N��f��!��G#��F%��'��(��(*��+��,��-�� /��0�� 1��1��2��3��p4��15��5��6��F7��7��8�� 9��9��B:��:��Q;��;��Q<��<��B=��=��'>��>���?��h?��?��3@��@��@��QA��A��B��^B��B��C��[C��C��C��JD��D��D��-E��vE��E��F��IF��F��F��G��UG��G��G��H��QH��H��H��I��?I��xI��I��I�� J��WJ��J��J��J��+K��^K��K��K��K��&L��VL��L��L��L��M��AM��oM��M��M��M�� N��KN��vN��N��N��N��O��FO��nO��O��O��O�� P��3P��YP��P��P��P��P��Q��8Q��\Q��Q��Q��Q��Q�� R��.R��PR��rR��R��R��R��R��S��7S��WS��wS��S��S��S��S��T��1T��PT��nT��T��T��T��T��U��U��:U��WU��sU��U��U��U��U��U��V��4V��OV��jV��V��V��V��V��V��W�� W��:W��SW��lW��W��W��W��W��W��X��X��1X��IX��aX��xX��X��X��X��X��X��Y��Y��1Y��HY��^Y��tY��Y��Y��Y��Y��Y��Y��Z��#Z��8Z��NZ��cZ��xZ��Z��Z��Z��Z��Z��Z��[��[��1[��E[��Y[��l[��[��[��[��[��[��[��[��\��\��.\��A\��T\��g\��z\��\��\��\��\��\��\��\�� ]��]��0]��B]��T]��e]��w]��]��]��]��]��]��]��]��^��^��#^��4^��E^��V^��f^��w^��^��^��^��^��^��^��^��^�� _��_��*_��:_��I_��Y_��i_��x_��_��_��_��_��_��_��_��_��`��`��!`��0`��?`��N`��]`��k`��z`��`��`��`��`��`��`��`��`��`�� a��a��'a��6a��Da��Ra��`a��na��{a��a��a��a��a��a��a��a��a��a��b��b��b��,b��9b��Gb��Tb��ab��nb��{b��b��b��b��b��b��b��b��b��b��b�� c��c��"c��/c��;c��Hc��Tc��ac��mc��yc��c��c��c��c��c��c��c��c��c��c��c�� d��d��#d��/d��:d��Fd��Rd��^d��id��ud��d��d��d��d��d��d��d��d��d��d��d��d�� e��e�� e��+e��7e��Be��Me��Xe��ce��ne��ye��e��e��e��e��e��e��e��e��e��e��e��e��f��f��f��%f��0f��:f��Df��Of��Yf��df��nf��xf��f��f��f��f��f��f��f��f��f��f��f��f��f��g��g��g��%g��/g��9g��Cg��Lg��Vg��`g��jg��tg��}g��g��g��g��g��g��g��g��g��g��g��g��g��g��h�� h��h�� h��)h��3h��<h��Eh��Nh��Xh��ah��jh��sh��}h��h��h��h��h��h��h��h��h��h��h��h��h��h��h��i�� i��i��i��(i��0i��9i��Bi��Ki��Ti��\i��ei��ni��vi��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��j��j��j�� j��)j��1j��9j��Bj��Jj��Rj��Zj��cj��kj��sj��{j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��j��k�� k��k��k��#k��+k��3k��;k��Ck��Jk��Rk��Zk��bk��ik��qk��yk��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��k��l�� l��l��l��l��&l��.l��5l��=l��Dl��Kl��Sl��Zl��al��hl��pl��wl��~l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��m�� m��m��m��"m��)m��0m��7m��>m��Em��Lm��Sm��Ym��`m��gm��nm��um��|m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��m��n�� n��n��n��n��#n��*n��1n��7n��>n��Dn��Kn��Qn��Xn��^n��en��kn��rn��xn��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��n��o�� o��o��o��o��#o��)o��/o��6o��<o��Bo��Ho��No��To��Zo��ao��go��mo��so��yo��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��o��p�� p��p��p��p�� p��&p��,p��2p��7p��=p��Cp��Ip��Op��Tp��Zp��`p��fp��kp��qp��wp��}p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��p��q�� q��q��q��q�� q��%q��+q��0q��6q��;q��Aq��Fq��Lq��Qq��Wq��\q��aq��gq��lq��rq��wq��}q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��q��r��r�� r��r��r��r��!r��&r��+r��0r��6r��;r��@r��Er��Jr��Or��Ur��Zr��_r��dr��ir��nr��sr��xr��}r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r��r���s��s�� s��s��s��s��s��"s��'s��,s��1s��6s��;s��@s��Es��Is��Ns��Ss��Xs��]s��bs��fs��ks��ps��us��zs��~s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��t��t�� t��t��t��t��t��#t��(t��-t��1t��6t��:t��?t��Ct��Ht��Mt��Qt��Vt��Zt��_t��ct��ht��mt��qt��vt��zt��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t���u��u�� u�� u��u��u��u��u��#u��'u��,u��0u��������������qu�����������������������������������������I�������U�������la������cela����gliela��mela����tela����vela����le������cele����gliele��mele����tele����vele����ne������cene����gliene��mene����sene����tene����vene����ci������li������celi����>�glieli��meli����teli����veli����gli�����mi������si������ti������vi������lo������celo����glielo��melo����telo����velo����ando����endo����ar������er������ir������ic������abil����os������iv������ic������abil����iv������ica�����logia���osa�����ista����iva�����anza����enza����ice�����atrice��iche����logie���abile���ibile���usione��azione��uzione��atore���ose�����mente���amente��iste����ive�����anze����enze����ici�����atrici��ichi����abili���ibili���ismi����usioni��azioni��uzioni��atori���osi�����amenti��imenti��isti����ivi�����ico�����ismo����oso�����amento��imento��ivo�����it�����ist����ist����ist����isca����enda����ata�����ita�����uta�����ava�����eva�����iva�����erebbe��irebbe��isce����ende����are�����ere�����ire�����asse����ate�����avate���evate���ivate���ete�����erete���irete���ite�����ereste��ireste��ute�����erai����irai����isci����endi����erei����irei����assi����ati�����iti�����eresti��iresti��uti�����avi�����evi�����ivi�����isco����ando����endo����Yamo����iamo����avamo���evamo���ivamo���eremo���iremo���assimo��ammo����emmo����eremmo��iremmo��immo����ano�����iscano��avano���evano���ivano���eranno��iranno��ono�����iscono��arono���erono���irono���erebberoirebberoassero��essero��issero��ato�����ito�����uto�����avo�����evo�����ivo�����ar������ir������er�����ir�����er�����ir�����������������������������������������������qU������u�������U�������i�������I�������i�������u�������e�������ic������log�����u�������ente����at������at������ic������i�������h�������������������������@c���������������Hc�������������������d�����������d�����������d������������A����������������A������������������������������������c���������������c��������������� c���������������(c���������������0c���������������8c�������������������Pc��������Xc������������`c������������hc������������pc������������xc������������c��������c�����������c�����������c�����������c�����������c�����������c��������c� ����������c� ����������c� ����������c� ����������c� ����������c� ����������c��������c��������c������������d�����������d�����������d�����������d����������� d�����������(d��������0d��������8d��������@d��������Hd��������Pd�����������Xd�����������`d�����������hd�����������pd���������������xd�����������d�����������d�����������d�����������d���������������d��������d��������d��������d�����������d�����������d�����������d�����������d�����������d� �����������e�����������e�����������e�����������e�������������� e�����������(e�����������0e�����������8e�����������@e�����������He�����������Pe�����������Xe�����������`e�����������he�����������pe��������������xe�����������e� ����������e�����������e�����������e�����������e��������������e�����������e�����������e�����������e�����������e�����������e�����������e�����������e�����������e�����������e�����������e������������f�����������f� ����������f�����������f����������� f�����������(f�����������0f�����������8f� ����������@f�����������Hf�����������Pf�����������Xf���������������`f�����������hf�����������pf�����������xf�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f�����������f��������������f��������������f���������������g�����������g��������������g��������������g����������� g�����������(g�����������0g�����������8g�����������@g�����������Hg�����������Pg�����������Xg�����������`g�����������hg�����������pg�����������xg�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g�����������g������������h�����������h�����������h�����������h�6������������� h�6�������������(h�����������0h�����������8h�:�������������@h�:�������������Hh�:�������������Ph�:�������������Xh�����������`h�����������hh�����������ph�A�������������xh�A�������������h�A�������������h�A�������������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h�����������h������������i�����������i�����������i��������������������a�������e�������ede�����ande����ende����ane�����ene�����hetene��erte����en������heten���ar������er������heter���s�������as������es������edes����endes���enes����hetenes�ens�����hetens��ers�����ets�����et������het�����ert�����ast�����dt������vt������leg�����eleg����ig������eig�����lig�����elig����els�����lov�����elov����slov����hetslov�w����er���������Hz��������Pz�����A������������0���������`y�����������hy�����������py��������������xy��������������y��������������y��������������y��������������y��������������y��������������y�����������y� �������������y�����������y�����������y� �������������y�����������y��������������y��������������y��������������y��������������y���������������z��������������z��������������z��������������z�������������� z��������������(z�����������0z��������������8z�����������@z���������������Xz�����������`z���������������hz�����������pz��������������xz��������������z��������������z�����������z�����������z��������������z��������������z� ����������������������s�������ies�����sses����ss������bb������dd������ff������gg������bl������mm������nn������pp������rr������at������tt������iz������ed������eed�����ing�����anci����enci����abli����eli�����alli����ousli���entli���aliti���biliti��iviti���tional��ational�alism���ation���ization�izer����ator����iveness�fulness�ousness�icate���ative���alize���iciti���ical����ful�����ness����ic������ance����ence����able����ible����ate�����ive�����ize�����iti�����al������ism�����ion�����er������ous�����ant�����ent�����ment����ement���ou������A����A���ss������i�������ee������e�������e�������y�������Y�������i�������tion����ence����ance����able����ent�����e�������ize�����ate�����al������al������ful�����ous�����ive�����ble�����al������ic������s�������t�������e�������l�������l�������y�������Y�������y�������Y�������Y�������y����������~�����������~���������������~���������������0~�����������8~���������������@~���������������H~���������������������������P~���������������X~���������������`~���������������h~���������������p~���������������x~���������������~���������������~���������������~���������������~���������������~���������������~�������������������~�����������~�����������~�����������~�����������~� ����������~� ����������~������������� ���������������������� ��������������������� � �������������(� ����������0�����������8� �������������@�����������H�����������P� ����������X� ����������`� ����������h�����������p�����������x�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������(��������������0����������������������������������a~������o~������ic������ad������os������iv������avel����vel����ic������abil����iv������ica�����ncia���ira�����adora���osa�����ista����iva�����eza�����loga���idade���mente���amente��vel����vel����ucin���ico�����ismo����oso�����amento��imento��ivo�����aa~o���ador����icas����ncias��iras����adoras��osas����istas���ivas����ezas����logas��idades��uciones�adores��ao~es��icos����ismos���osos����amentos�imentos�ivos����ada�����ida�����ia������aria����eria����iria����ara�����era�����ira�����ava�����asse����esse����isse����aste����este����iste����ei������arei����erei����irei����am������iam�����ariam���eriam���iriam���aram����eram����iram����avam����em������arem����erem����irem����assem���essem���issem���ado�����ido�����ando����endo����indo����ara~o���era~o���ira~o���ar������er������ir������as������adas����idas����ias�����arias���erias���irias���aras����eras����iras����avas����es������ardes���erdes���irdes���ares����eres����ires����asses���esses���isses���astes���estes���istes���is������ais�����eis�����areis���ereis���ireis���reis���reis���reis���sseis��sseis��sseis��veis���eis����areis��ereis��ireis��ados����idos����amos����ramos��ramos��ramos��vamos��amos���aramos�eramos�iramos�emos����aremos��eremos��iremos��ssemos�ssemos�ssemos�imos����armos���ermos���irmos���mos����ars����ers����irs����eu������iu������ou������ar�����er�����ir�����a�������i�������o�������os���������������������������e����������������������������a~������o~��������������������log�����u�������ente����at������at������e�������ir������u�������g�������i�������c�������c�������i�������c���������������������������������������������������������������������������������������������������������������������������������������������������������������������A������������� ���������������Ȇ��������І��������؆���������������������������������� ���������� �����������(�����������0�����������8�����������@�����������H�����������P�����������X�����������`� �������������h�����������p�����������x��������������������������������������������������������������������������������������������������������������ȇ�����������Ї� ����������؇���������������������������������������������������������������������������������������������������� �����������(�����������0�����������8�����������@�����������H�����������P�����������X�����������`�����������h�����������p��������������x��������������������������������������������������������������������������������������������������������������������Ȉ�����������Ј�����������؈������������������������������������������������������������������������������������������������������������������������� ��������������(��������������0��������������8��������������@�����������H��������������P��������������X��������������`��������������h��������������p��������������x��������������������������������������������������������������������������������������������������������������ȉ�����������Љ�����������؉�/��������������/��������������/��������������2��������������2���������������2��������������/��������������/��������������/������������� �/�������������(�����������0�:�������������8�:�������������@�:�������������H�:�������������P�:�������������X�:�������������`�:�������������h�:�������������p�:�������������x�:��������������:��������������:�������������������������G��������������G��������������I��������������I��������������I��������������I�������������Ȋ�I�������������Њ�I�������������؊�I��������������I��������������I��������������I��������������I���������������T��������������T��������������T������������������������ �����������(�����������0�Z�������������8�Z�������������@�Z�������������H�Z�������������P�Z�������������X�_�������������`�_�������������h�_�������������p�����������x�c��������������c��������������c��������������c��������������c��������������c���������������������������������������������������������ȋ�����������Ћ�����������؋���������������������������������������������������������������������������������������������������� �����������(�����������0�����������8�����������@�����������H���������������P�����������X�����������`�����������h��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#"�����������������������������������������������������������������������������8�����������@�����������؟�������������������������������������������������������������������������������������������������������������������������������� ������������������(�����������0�����������8�����������@�����������H�����������P�����������X�����������`�>�����������h�����������p�����������x��������������������������������������������������������������������������������������������������������������Ȝ�����������М�����������؜���������������������������������������������������������������������������������������������������������� �����������(��������������0��������������H�����������P���������������X�����������`��������������h��������������p�����������x������������������������������������������������ �������������� ������������������������� �������������� ������������������������ȝ��������������Н��������������؝������������������������������������������������������������������������������������������������������������� ��������������(��������������0�����������8��������������@��������������H�����������P� �������������X�����������`�"�������������h�����������p�����������x�����������������������'��������������'�����������������������������������������������,���������������������������������������Ȟ���������������О�����������؞���������������������������������������������������������������������������������������� �������������� ������������� � �������������(� �������������0��������������8�����������@��������������H��������������P��������������X��������������`�����������h�����������p��������������x�����������������������������������������������������������������������������������������������������������������������ȟ�����������П��������������������������������������������������������������123�12��22455�12623�1�2�2�����������������������������������������la������sela����le������me������se������lo������selo����las�����selas���les�����los�����selos���nos�����ando����iendo���yendo���ndo����indo���ar������er������ir������r������r������r������ic������ad������os������iv������able����ible����ic������abil����iv������ica�����encia���adora���osa�����ista����iva�����anza����loga���idad����able����ible����mente���amente��acin���ucin���ico�����ismo����oso�����amiento�imiento�ivo�����ador����icas����encias��adoras��osas����istas���ivas����anzas���logas��idades��ables���ibles���aciones�uciones�adores��icos����ismos���osos����amientosimientosivos����ya������ye������yan�����yen�����yeron���yendo���yo������yas�����yes�����yais����yamos���y������aba�����ada�����ida�����ara�����iera����a������ara����era����ira����ad������ed������id������ase�����iese����aste����iste����an������aban����aran����ieran���an�����aran���eran���iran���en������asen����iesen���aron����ieron���arn����ern����irn����ado�����ido�����ando����iendo���ar������er������ir������as������abas����adas����idas����aras����ieras���as�����aras���eras���iras���es������ases����ieses���abais���arais���ierais��ais����arais��erais��irais��aseis���ieseis��asteis��isteis��is�����is�����aris���eris���iris���ados����idos����amos����bamos��ramos��iramos�amos���aramos�eramos�iramos�emos����aremos��eremos��iremos��semos��isemos�imos����ars����ers����irs����s������ar�����er�����ir�����ar�����er�����ir�����i������a�������e�������o�������os����������������������������������a�������e�������i�������o�������u�������iendo���ando����ar������er������ir������u�������ic������log�����u�������ente����at������at������u�������u�������g�������u�������g�������������������������������������������������������������������A������������� ���������������������������������������������������������������������������������������������������������� ������������(��������0��������8��������@��������H�����������P��������X�����������`��������h��������p� ����������x���������������������������������������������������������������������������������������������������������������ȫ�����������Ы���������������ث����������������������������������� �����������(�����������0�����������8�����������@�����������H� ����������P�����������X�����������`�����������h�����������p�����������x������������ ������������������������������������������������������������������������������������������� ����������Ȭ�����������Ь�����������ج��������������������������������������������� ������������������������������������������������������� �����������(�����������0�����������8�����������@�����������H�����������P�����������X�����������`�����������h� ����������p�����������x��������������������������������������������������������������������������������������������������������������ȭ�����������Э�����������ح������������������������������������������������������������������������������������������������������������� �����������(�����������0�����������8�����������@�����������H�����������P�����������X��������������`��������������h��������������p��������������x�����������������������������������������������������������������������������������������������������������������������������Ȯ�����������Ю�����������خ�������������������������������������������������������������������������������'��������������'������������� �'�������������(�'�������������0�'�������������8�'�������������@�-�������������H�-�������������P�-�������������X�����������`�1�������������h�1�������������p�����������x����������������������������������7��������������7��������������7���������������������������������������������������������ȯ�����������Я�����������د�@��������������@��������������@������������������������������������������������F��������������F��������������F������������� �F�������������(�J�������������0�J�������������8�J�������������@�����������H�N�������������P�N�������������X�N�������������`�N�������������h�N�������������p�����������x��������������������������������������������������������������������������������������������������������������Ȱ�����������а�����������ذ�����������������������������������������������������������������������������������a�������arna����erna����heterna�orna����ad������e�������ade�����ande����arne����are�����aste����en������anden���aren����heten���ern�����ar������er������heter���or������s�������as������arnas���ernas���ornas���es������ades����andes���ens�����arens���hetens��erns����at������andet���het�����ast�����dd������gd������nn������dt������gt������kt������tt������ig������lig�����els�����fullt���lst����w�����ls�����full����A������������� ��������P�����������X���������������`���������������h��������������p���������������x�������������������������������������������������������������������������������������������������������� �������������� �������������� ������������������������������������������������������������������������������������������������������������������������������������������� ��������������(��������������0��������������8��������������@��������������H��������������P��������������X�����������`�����������h�����������p���������������x����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#8�^@�[��~� "0�#�@�^4GH���cGG# � ����(�#�ݶH�b��rZk(�=0��b#�@0�BG4G8�b��/;uZk��cG8�]@�]H�P�#��/k��/��/��/#G�^G��~�^�~���޴GGb#�>��/ @�}���/����,�H��/��8�"G4Gb##@GGG4Gb#��/!@��Gb#@GGp�""TGb#@GGG4Gb#!@��Gb#@s���/��/GGb# @GG4GHb#@B@`" TGb ""Dx"gZkB4Gb`"gZkGG4Ghb#@B��4Gb "gZkE���/��/GGGTGpb#f@B��4Gb�"gZk5���/��/GG4G(b#@BG��4Gb"wgZk%���/��/GG4Gb#&@ӠBGH�"TGbigZk(�""Gb#@""Gb#@""Gb#@`�""Gb#@Ӹ""Gb#@Ӡ�""Gb#@GG4Gb#��/@GG8�""GtG@b#��/#@BG4Gb"��/;gZk���/��/��,BG�"bTG�H��/ ��.gZkPBG4GXb?AZk��@0�@B"4Gb0 ��/gZkGG(�""TG`b#%@BGTGDb �"��/gZkGG�""TGb#@GGG�""TGxb#j@B4Gb"��/fZkB��D�"GtGb��/Zk8����/��/GGTG�="0b#@GGG4Gb#��/ @ ��Gb#@G�G4Gb# @�GGb#<�@GG4Gb#@G4G�"TG b#U@B4Gb"fZkB��D�"GtGb��/~ZkGG4Gb#e@GG4Gb#��/K"@G4GTG b#h"��/3@G�]�]�G�}���ݤ#��/k��/��/��/`#4G(�^G��~0�^8�~@�H�P�޴X�`�h�>p�^x�~���G#��V� GGG b#'@GGG4G` b#4G(@�� G8� ��/��/��/��FG�@��/GG��'�}"G b#�!��/k(@�}Gb#(��C�@��H_GG��'TGb#� )@��CG""TGb#�@G'GTGb#)@`"�CGTG�b#81"�@����/GG4G b#V@BG��"4Gb/fZk��/��/��/G(�]0�]8�}@�H�P�ݤX�`�h�=p�]x�}����#k��/��/��/`BTGb "fZkGGGTGb#��/@��G0b#�@��/��/C��/��/��/GG4Gxb#_@G��/��/G""GTG$b#a,@GGG�""TGP$b#,@GGG`""TGP$b#,@G GGP""TG$b#��/K,@G GG@""TG$b#��/C,@`"G GG$b#TG1";,@G GG�""TGP$b#��/,@G GGx""TGP$b#��/,@`BGG���GG�G4Gb�"eZkGG0�""�]"tG@ b#'@�}0�""Gb# ��C�@ӞGG4G b#G� @`B@p""DTGbp�"eZk��/#TG�^ �[��~�^ �~(�0�GGGG�@�"(�b{eZk׀@�"S��\@T�C�k��/��/��/�C �G8�"PF�](�b0�"�] �}GTG(�0�@�#��/_%k��/��/��/ �B�CTGH�"(�bVeZk��/��/G�]�] �}(�0�@�#��/k��/��/��/ �B�C`� h�""DTG(�b0�"?eZk��/��/�C��# � ��/ �BTG(�bP�"�c 2eZk��#��/? �B4GX�"(�b*eZk��/�`b#�@Ð �GG�](�bTG�] �}(�0�8�"@�#%k��/��/#4G �^G��~(�^0�~8�GGGb#@G1��G4Gb#e@G��G4G`b#@`�GG4Gb#����@GG4G0b#�@GG4GPb#�@p��GG�]�}G0�"x�b �](�]0�}8�@�#��/o"k��/��/��/G �](�]0�}8�@�#k��/#TG�^[��~�^ �~(�0�GG� �>�CH�" bdZkG�TG �=@b##@GGG4Gb##@BG8�"TG bdZkGG4Gb#��/#@ӈBGTG bP"��/dZkB4G�" bdZkGG4Gb##@�� G � ��/��/BTG bH"� dZk��$��/?B4GP" b~dZkGG�]Gb#�]4G �}(�0�@�##��������#4G�^G��~�^ �~(�0�8�޴@�GGG(�Gb#�> @GGG��/��/���"�! GGb#4G��/@4GTG��eG �%�%b#�=� ��/��/;@�G���/���0�@����0�@ ����0�@����0�@��/����0�@��/GP�@4Gb#j @�G(�c�`��/��/ #G4Gb#0 @a!@F�?@P�?@[ @@�BGG~Zk�%�$@@����cG�]�G�] �}(�0�8�ݤ@�P�#k��/��/���� ��/k��/��/��/�Gk��/��/���� ��/k��/��/��/�Gk��/��/#�C4G��^G��~�G �> {#�@"@�= ��G�]� �#k��/�����k��/��/��/�Gk��/��/�� �0k��/�C �{(�?F��s�@��#�^��~�^ �GG�T�4B�`��F��/ ����/��/0�[G4G8�{/`Zk���=�AG�]�] �0�#k��/��/B?B#4GSF��~�^�^�~ �(�0�޴8�G,�@GG��.GGb#�J$����0@GG4G8 b#GG@���� G� ���/��/�$GTG0@b#�&B@��1+0@��� @G?GG4G b#@G�]�]�} �(�0�ݤ8�@�#k��/��/��/F��#4G��~�^�^�~ �(�0�GGG�G8b#����/��/��/ @�G4Gb#��0@GG4Gb#G @��(���/���/��/��/�#G4G8b#�%@@����/ @����/��/G�4G8b# @GG4G8b# @G�]�]�} �(�0�@�#��/k��/��/��/�C#4G��^�G��~�^ �GG �>��b#��/w @ �G4G b#��@��G�]�G�]�] �0�#k��/��/��/���Gk��/�k��/��/� ����/k��/��/��/��k��/��/��#��~�^�^�~ �(�0�޴8�@�H�>P�^X�G �GGr� ��ĠGG�b# @G �4GG@b#/@G$�4G@b#��//@,���/��/4��(�$,� ��/,� G G�B� ��4�$��/� ��/��/��/,�DG4Gb#�HB�R�JB��CBtF��/�` @4� 0 A @A A,�$G�(@�4Gb# @(�$0@A @?G,�4Gb#��/ @0�DG G�@ � ��/���/��/��/0�G4Gb#�� @�������/ @ �D0�A A J A_G0�4Gb#��/ @GG4Gb#G @��/�G4Gb#�� @G4G@b#,�"��/G @G4G0�"@b#B @GG4Gb# @G�]�]�} �(�0�ݤ8�@�H�=P�]X�`�#>�k��/��/��/#4G�^G��~�^ �~(�GGG�>p b#j@Gb#�=_H�c�CG@b# ��G�`�@Gb# �_�GG�]�] �}(�0�#k��/��/`#4G�^��~ �^(�~0�8�@�޴H�GP�X�>`�^h�~p�x��޵��GGG�>�� b#"@��G4G0b#�-@�=G b#� ��/_G��4GG0b#G 4G@G�&4G@b#x" @ӠB�?&GGx1"GtGQ|Zk��#GG`b#�� h"A @GGG@�",�tG`b#9 @0���(����/GG4G@b# @ GGG���"�! � �ʰ0�A�j �� �F���/��/��/��ETG�"""G�c G-b#J@ �*G G4G0b#���/@G�`G4G(�*@b#��/ @ӠBGG4G,� |ZkG� b# "3@,�G��,��,����/z���/��/(�J��/��/��/0@BB!�!(�JTG""��b��"��/]Zk��! ���+BTGX�""b�"]Zk��/��4G��k(�*GTGb# ,@ � AP�AQ�BD�B,� @ӠBGG,� ��/{Zk �GGTG-b#�"��/J@��GG �(�*,�GTG(-b#A�!@A�0@zK@!��(�*,� Q�!@P�0BD�0��kG��Gb!���/� �"GBGG@b#��4 ��R"��/7@%���/��/� � "G �BGG@b#��/ ��R" �&@���/�G4G Gb# ����-�I�@��H� ����/��_!H�D� GH��GG4G b#��// @ӆ�� ���/a���/��/��/� �'G4GG6b#�)� �A G�(��/S@�@��GG�4G�"b#0@��] �gf@GG4G b#���/-@����/*��g��/��/&�`��c$�`��/�'GtGb#�)� �I�A��)�C@��/�� G���/����ǡ�G�`4G �"b#n%@��/��/���������c�]H�J �@� ��/+� �롯 OA��/� �K�ݡH���砢���? H�5��+� �k��/�`"�H�t�GG4GX!b#H� ���/K2@�ݠ� ��/��H���/��/� ��H�G�]�G �](�}0�8�@�ݤH�P�X�=`�]h�}p�x��ݥ���#��/k��/��/��/#4G�^G��~�^ �~(�0�8�޴@�GGGG��b#�>m@�? �DG �`��cH�#b� �BtGG�b#�� "0�R"��#B@  V���0G%� �@CrF��/�@��/��/��/��0B B0B B0B B0BC B�F��/ ���C�G���C�YG� ��C��D�&���/����/��/��/�0��p�0��/ �`�S��Ӣ�S�����������G���/ ���/��/��/G0@b#�@�� @G��/?���c "  H����/��GG�]�] �}(�0�8�ݤ@�P�#��/k��/��/��/#4G �^��~(�^0�~8�@�H�GG�GG8b#����@ �G "tG�= �BHb#����/@�G3���/�� � ����/,����0� %��`GG�}� ��/��/��/�����/���/��/��/��G� �GTG�"�="%b#Z0@�=��/��G�=�������P�D���c0`B�c�GG �](�]0�}8�@�H�P�#k��/p#���4�^��~�^ �~(�0�8�޴@�H�P�>X�^`�~h�p�x�޵�GG G GG GGGGG TG�!GG�!"�]"tGH b#4`E��/K@B GG8�""bG��/%xZk����'G4GGGG �b��!��'_GGGxb#@��' G G?U��/��/BGb0�"" xZkB��/��/��G(�""bxZkB ��GP�""bwZkB��G@�""bwZk@���/�4GBG0�""?��b 4G��/wZk������7��'?(��/BGb(�"" TGwZk������7��'?BGb8�"" tGwZk������7��'?BGbP�"" GwZk������7��'?BGb@�""GwZk��碖�D G��7��'��/{?���/��/�� .5`AGG�A9C �b�EG� JGD7�@��gG��s��gGE_8`EGGGb#� G G@��' GY?�X`EGGb#� G@��' GN?���/`EGG�b#� 4G Gh@��' GA?� `EGGb#�`*@ G��' G6?���/�8DTGb#��/����'����/W@G��/��/K��GG/b#G@GG��GTG b#x�"@�����DG������%?D%D� �����4GGGGGG �b_8`EGGG�Gb#��/#@���/��/X`EGGb#�@���/`EGG�b#�4G @� `EGGb#�`@ G��' G4G?W�GG4Gb#+1`AG@ӐB GG4GbxZkGG`b#G�@ӡ`A�G+� \|A`�C�k��/GGGb#@���/��/GGb#d@���/��/��/GGGxb#@���/��/GG4G�b#@���/��/GGb#@GGG4Gb# G9@��/ ���g��+ G��'?���/��'��1��'���G��R��G�}G�`G4Gb#"@G�]�G�] �}(�0�8�ݤ@�H�P�=X�]`�}h�p�x�ݥ��#k��/��/��/�#TGG�^��~G{#��G,�?@�=���� G�]� �#k��/��/��������0�p�`��;�0k��/��/��/ #�`^��~h^p~x޴>^~޵G �Р� ��G�GGG G G _"�GP�X���.�JXF��H�G.BGTGTGb[Zk GD�� "� �.�J F��0�BG4G8�b��/=wZk��@0�BG4G8�b� �`E��4wZk 1�@��@���.P��J���>� GGX�TG�&0b#J@G�`X�@�]"G�fG`2b#��/J@@�GTGX�p0b#*���&J@�G��/��$,X� ?"�G�$HX%D� H�'��/��/��/GX�G�]"�G0b#@�}"J@@�GTGX�p0b#���&J@�G��/G�4GXb#[@,C��/��/G@�=0�]"(�}"X��G�"@2b#J@G0�"�](�="tG(Sb#@0�G8�"4GRb#8���/@G G8�"4GRb#@G����/��/��/G4GRb#8�"@8�(�] A G0�= � G4GRb#��B�2B8�F��8�"@GGEw�8�ݡ��/G8�" �="H�]"GpTb#P�}"��//@P�=H�4GGb#�A"��P�?@��/��/@G���/`� �GGP�]GPTb#F8�"B@P�GGGG��/����/��/��/��6rBpB�CG�FWJF���/��/��/���0 @�R"0�B �B�s"��/_P�=GX�"� �&tG 2b#� G�F��/?J@��G�b#�@_ GP�GGGGGPb#@� P�G4GBQ�@$�"xZkG� ;b#\@`� GG4G�DXb#����/��/@8�'@DG0�4GXb#@GX�`G�]"@�}"�GP0b#��/I@@�G4G�Xb#���/@2��/��/�`G�áG�@��GG4�. �&�GD"F��/��/"BA""@�! PBؑ"rF�cر"���/0 B���! "��JG��/4�@��/��/��/G��4G G� !b#Y+@@�@4�������/�h A�` G����� A� G����/���蠧 A��/ � G����/���( A��/� G����/� ��I�4�@�� G��/\���/��/��G G��/����MGFl�@A 8 EGb�� G��/���smF�A��Ӣ��smF�A����smF�A � �S��smF�A��/�`�3��s�mF�AG*1�A,�TGb#JEAG*@0BGG GG��/uZk� ����$��! ��,� � ��/��/�,�KP�(@B�QB$�L"�+��Q�BwZk��5@��E��/G�b#��/���/��/��/_G����/� ��o�/��/� ��aG�o�+GGGpRb#p�be@��/�� G��/� G��/\�=� 0 A\�=)!?Gb#k@G GGX��&TGp0b#H@�GG`]h]p}xݤ=]}ݥ#k��/��/��/ #?B�^_B:D��~� �^�~���޴���>�GGGGGG� G��{#�� ��/�=�"�b#@G@�} ��/�� �c ��/T�@�"�b#@�GE���/����<D0@GD<� ��/��Db#0BG���g��eNG�tBx�}�x��=[[`X[��=�"_G�'�G�'GGb#�0@G{@��'$�G"PBQ�?A$�"��/wZk�&�$�D"�ǢPBQ�B$�! P�BwZk����/����/��/��/GD�GG�]�]�}���ݤ���=��#k��/��/��/����/#�G��~�^�^�~ �(�0�޴8�@�H�>P�GGG�G� �Gm���/��/��/i�@����GDO� ��/��/�F�gG:[C�@��Ơ9���/�@G4���/��'TGGb#�B01�BIB,�G@BGGG��/tZk�&pB� � �� ��B�B��&� �0A$��"� �F�@�Q�B�$�F"��/��/vZk�pB$�"$�G"��&Q�BP�6@vZk��Ơ���Gb#��/_G GGDG_��/?GDG�`��/��/��/G���Gb#n_GGG_��/��/�GG�]�]�} �(�0�ݤ8�@�H�=P�`�#k��/#�^$��~�> �^ �~c� (�0�8�޴@���H�P�>X�G��/��/��/�� !  @��/GGGG�]G�� ��Ѡ}'c; �Gc{#�A'DZ#GG��/��/��/�@">"@�{# BPF@"�c_`"�`��/�0�@���{# ?���/��/�GGTG,�b#M@G GG4G��"b#)@%c!@@�� �� ��)��Ơ�=�@�� 4G��/��/GG4G"b#)@$c @@�������/��/�De������� )D��/_� �����/��/���� F��/W�������/��/��� )F��/O� ���G�@Gb#��/���/��/��/_GG_"GGGG8b#@ 0 A (A$Gc� @ ^"@�� '@F�cF"_f"�`��/0@���� ئ"Gb#��/c@G�]�] �}(�0�8�ݤ@�H�P�=X�`�#k��/��/4G��/��/#?Bx�^_B:D��~� �^�~���޴���>�^�~���GGGGGG� G��{#�� ��/�=�"b#�@G@�} ��/�� �c ��/T�@�"b#�@�G���/����GD� ��/��/��/��DG G G$�g!$�!3Bw�`�P���/� GG��/E��� K�C���Y�9#AKG&�@ 0A A9��9!JG� 0A A��/1� JG�� 0A A��/)�@yaJG�` 0A A��/!�JG� 0A A��/���/��/G0�A � GQ�ATGb#��/@���/��/GP�A4G0b#@M�AA��A G$�� 0@A PA�k!G ���'�D`b#�2B B�3B7 J���/��/��/_G�'GGGGGb#*�@� �BQ�AG4G$�"tZkGGb#@������`�����/�� GD��/w�GGx�]�]�}���ݤ���=�]�}����#k��/#!1BTG(�^�C��Z��~0�^8� �>GQ%@G,�Gb#�^�~�� �>@B �=GrZk �=�G��=�]� ��� � ��@ � G(�]0�]8�@�#��/��/GGG�G��Gk��/�] �}�"(�="pZk@G��/k��/��/��/�0#��~�^�^�~ �(�GGG��/� ��1���/G � ��/��/G��� �"b#4G@G���G�]�]�} �(�0�#��/k��/��/��/��1���1� Bk��/��/#�G��~�^�^�~ �(�0�Gd��GGG��0��/� ��/��/��/��!0@� ��!0@ � ��!0@� ��!0@��/� ��!0@��/?8DP�@4GE�@Gb#��/�@��#GG� ��/��/��/��"0��!� 0��!��/� 0��!��/ � 0��!��/� 0��!��/� 0��!��/?GGGGGSb#0�b@G��/��/��GG��/� ��0��#���p��a�0�@ @��0�"GG4Gxb#���#�@�GG�]�]�} �(�0�@�#��/k��/��/��/#�GG��~�^�^�~ �(�0�޴8�GGG� �G5���/��/��/G_F/� ����GD��/�@��/��/��/�d�G0pCb# ����G�`~_GGG_���/������GD���/G���`Gb#j_GGG~_��/��/�GG�]�]�} �(�0�ݤ8�@�#��/k��/��/��/��1��!JJ Bk��������#�N�^��~�^ �GG{#�> �@ �B�=G]qZkG�]�] �0�#k��/��/��/#4G�^0�[��~�^ �GG��C8�bGzZkG�C b#TG ����= �r@ �G�]�] �0�#k��/��/��/#TG�^ �[��~�^ �GG�>�C(�bCzZk�C �TG��Gxb#�=8�"Q@ �G�]�] �0�#k��/��/(�4G0�{��/9k��/��/��/k��/��/��/#4G�^[��~ �^(�~0�GG�G �>�^b��/yZkGG���b#GTG#@G�4Gb#6@ �=�_"��&����G� �! �2D�CF�G�] �](�}0�@�#k��/#�Pp B��~�^�^�~ �(�0@B0�޴8�@�G��GGq F�P��/��B��/��âG@0BFGG4G8byZkGG�� b#GTG@G�b#R_�ǰ� ��ǰ����G�d�3eB�@�d�G�]�]�} �(�0�ݤ8�@�P�#k��/��/��00� #��~�^�^�~ �(�0�GGG�����/B �4Gb/yZk��BG4Gb)yZkG��B4Gb��!yZkB��4Gb��/yZk��G�]�]�} �(�0�@�#k��/%��#��~�^�^�~ �(�0�GGG������/B �4GbxZk��BG4GbxZkG��G�]�]�} �(�0�@�#k��/�G���G��/k��/��/��/������/��/�0����@��/ ���P����@���p����@�������@k��������#G �^G��~(�^0�GG ���>�>"�r�R�b# @G4G�"b#�U@�G �](�]0�@�#k��/��/��0�P(���/K�@#��~�^�^�~ �(�0�޴8�@�GGGG�G{#=�@�,���/��/��/�#G�%@@��  ����/��G4Gb#��_��4G�Gb#��/����/��/��/_�4G�Gb#����/_�0@ � $ @?���G�]�]�} �(�0�ݤ8�@�P�#k��/��/��/)��#��~�^�^�~ �(�GGG��/G�4Gb#w_G�4Gb#r_G �4Gb#m_��GG4Gb#g_GG�]�]�} �(�0�#k��/#4G�^G��~ �^(�~0�GGG�> �^�~��@b#@�B"tGGPb#8R"����#��/��/ @�G ���/���#b#�] �}� �@��C�H�B@@G�] �](�}0�@�#k��/��/#GG�^��~ �^(�~0�8�GGG�~ ��>��/� ��/��/��/HB�GPbmZk������/BG" �GGR"Gb# @�G���/��/��/GG4Gb#_GGG4GPb#Q @G�4G�Pb#K @G �4G�Pb#E @�] ��G��DG�] �](�}0�8�@�#k��/#�^��~ �^(�~0� �^G�CGp{#�>��3_G��/���4G���/G�GtG �=�b#@GG4Gb#�@�G�] �](�}0�@�#k��/��/��/# ��~�^�^�~ �(�0�޴8�@�H�>P�^X�~`�h�p�޵x�G�>*1@B�G GGGGGG�� !�@��/@B4GG�[BF7`Kb#-A3�GG�mASA_����ɱ�GG��*1A jA ���/ 0AG jA��/��/��/��/��g��/��/��/�G��/��/��/G�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�h�p�ݥx��#k��/��/�@SdAGb#GGMdAp_����g�4G ��Gm"GGb#d_.1`A��DZ 0`A��/��/G! �4G@ b#B @����1 B��/k��/��/��/����1 B��/k��/��/��/@#�C�C@�^��~H�^P�~X�`�h�޴p�x��>�^�~���޵��GG G#����q�֠(� 4G� �}��ݰ�Y�0B�U��/(��/��/��/���!��0@��B A��w���/ ��/��/��/G�-GTG(b#<@��/��/�� BGb4G$D��/ ��pBD� B`�"��$ �m ��G��/UlZk0�B��/��/��G8�b�MmZkGGGGGG8�"�b#:@���/����Ck��H���/��/��BGbp�"4G0lZk0�BG��8�b+mZkGGGGGG�b#8�"��/@��0�BG4G8�bmZkGGGGGG8�"�b#@0�BG4G8�b���/ mZkGGGGGG8�"�b#@�$GG"�GGG b#GD �`B�R"G��o @�G��/��/��/GGtG@b#@ӢBG"G��oGG b#G�R" @H���/��/��ag$�/GGG`b#TG� ��/S$@[��gG4G b#GP@_G��/��/@�`!`@$� #@>� @G3F��//� ��/��/��/�0@P@p@��@Р@@�R"��Т �"�ҲPr@R02Ҳpr@@ @r202PR @��/ � ��/��/��/0@�R"�" @pr��/GGGGGKb#h�b{@�dG4G51`@�`0��d�`(�+���/? GGG��> �= 0�"`b#�>G!_ �=G @D��/��4G0�=�d�`51`@(��4GGGG�� �"(�"`b#�G _ �GAD��/� (�4G(�}0�]DSFD7`@G�#��/��` BB:G� ��/��/�B@�# B_ B� ��/0B���# BG���/B SB31`B�F� (�}G�(#�`(�]��/��/ B WB��F��/����Y0@���0B�9# B?GTh@G��4Gb# ��G��/���/��/��/[_��y�GGGGbKb#GG{@GG4G b# _��!`@d�`�" #@ @2FR� ��/��/���d@�"�fB��.wJV�JF��>���C0�x/�X#`:K[�zK`G�x?���@P�e.�%"tQJS�qJtF�e>���BТ�,�"xJ@�H�D�<��$�&CP�,�y#q[KE�HD�<��D�FBp�,�"utJ@�H�D�<��Ģ�B�,�#qJE�HD�<��$�&CP�,@ @�y#r[K@�H�D�<��/ @���/����0�"�@0@ @��.x%JW�JF��>��/GG4Gb#_��/��/3���4G �} �H�c��/.�`��/��/��/�0@�����A�8�D'���/��/BG"G�m b#GGh�R"v @��/BG"G�m b#GG8�R"j @��/G��/��/ �}H�c�G���/��/��/�4GG@�]H�]P�}X�`�h�ݤp�x��=�]�}���ݥ���#��/k��/��/��/ p#��~�^�^�~ �(�0�޴8�@�H�>P�^X�~`�h�GP�`GGGGG�!G��/��/��/ GGTG)b#�B���5:@7��� Ga!@J�$@� ��/���*.� ��J�@�EB�4Gr.R"�rJ&�@,�GGGb#O_G GG�JGtGPb# G@��/��/ ���JGGGPb#tG��/�@@ӫ C� 4GGG4G b#V@��/��/�` C0@@ @_�G��/G�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�h�p�#��/k��/��/��/�4G��������#4G��~�^�^�~ �(�0�޴8� �[@�H�>P���Q.GGGG�QJ(�b*MZk0�BGG4G8�b�$!jZk0�BG$1�@G4G8�b��/yjZk @CG5@�F8�D��/� ��/��/��/��c. �B4G(�b�cJ MZk�D@�BG�" ��G��tGH�b��/LZk��/��/��/��'1@�c @C�F?�GG�]�]�} �(�0�ݤ8�@�H�=P�`�#k��/��/��/�G��/��/�G��/��/#�^��~�^ �~(�0�8�޴@�GG{#� �>�C�C_�=k��BG �4GbD��/c� jZk�`@��/��%�� � ��#.�#JP�0B��F�� ���/��/��c.B4Gb�cJ~LZk��/��/����#,�#HX$D� �c ��/GB� "4G`b#G ��/#_��#,G�#H%� U$@U!@!@2F!F� ��/DGGTG�`�@b#0@/_G��#,�@0@��q.�#H�c t1HS�qJtF��q>��.�JUBUBBGCGF?�@��f/[�fK��f?G(b#@GGG4Gb#-_�G���/��/��/�GG�]�] �}(�0�8�ݤ@�P�#k��/#4G��~�^[�^�~ �(�0�޴8�@�H�>P�^X�~`�h�p�޵x�GGGGGbiZkG��@4Gb#0@ G G_B GGG4GbiZkBGG4GbiZk �B GGGTG(�bJaZk*�� G!AGTGb#�(@�C �AG A� A+gA0@_G � @BGGG �nATG �A��/kZkBGGG �hAkZk �B�AG(�b��/#aZk G��/��/BG4GbHiZk��AGGTG @0@b#�+gA��/_G � @BGGTGbhZkGG4Gb#_G�]�G�]�} �(�0�ݤ8�@�H�=P�]X�}`�h�p�ݥx��#k��/��/��/#�4G4G��~�^[�^�~ �(�0�޴8�G� GGG biZk�`@B4G b�"G�iZk1@(�BGTG#B0�b� *KZk��/��/�����GG�]�]�} �(�0�ݤ8�@�#k��/��/�4G��/��/#4G�^8[��~�^ �~(�0�8�GGGG�>�C@bhZk��$G@G4Gpb#C @0D��/ � ��$��G/_��G4Gb#0@_GHBG�]�e@G�GkZk��.U�J��>G�]�] �}(�0�8�@�#k��/��q.��P.�qJ�PJ Bk��/��/#4G��~�^X[�^�~ �(�GGG`bhZkGGGG4GGEb#b4G��/w@Ӡ=@4G�"����/��/��/�a@��P.."�PJ�JxQJTF���.W�JF0 @��>0@@ D@�"?�a@��a/[�aK��a?G�]�]�} �(�0�#k��/��/#4G�^[��~ �^(�~0�8�@�޴H�P�GG��Cb �>KhZkB �G4GbEhZkG�`@G4G0@@b#�k_G�G4G@b#e_ӠBG�`GG�]jZkB�@�G �]��/jZkG��/��/�GG4GGEb#0�b��/Cw@��f,��',=@4G�4G�f"�fHA�'HpgH0D��'<� ��/��/��/�@��..#�J�J{JF���T/Z�TK[G0@B��T?�0�@ @�s"�@��r,GG4Gb#C�rH��r<a_G�]�G �](�}0�8�@�ݤH�P�`�#k��/GG� �DBBa#"@�! `C{F�r"�c��.�J4G"���/��/��/��.�F��J�"@�@��`��.�J�J�"T�B�@��t��,�H�H � �"@�@��`��.�J�J�"�@T�B��t��0,�0H?��/k��/��/��/GGGD0"�"_G��/k��/��/��/#�C�GTG�^��~[^~ (޴08@>H^P~X`h޵px�G� G�CTGb.JZk��/��/�����.P��J���>GG4Gb#_GGG4Gb#GTGG"��/_��"��/����/��/��/�] G�}!b# GG@�� ,G0�"� H��/��c���/UAA0D��/� G�!��.. EC�.J��/H� ��/��/��/?FC BF�D��-�!�I 0A?9�õUBB�� ��(F F1���/�`��/��/��/+����Y�B��9!G%� ��B4Gb��/IZk�����/ G��-��+.tGGb#�IQ�+J�!�!r+H�k!/oA`�"2F_"!+>G�@��-�I?���/��/�!���K.Gs+HR�KJ�k!SFK>��.U�J�"��>�ݱ eDb#@��/��/��/����-GGTG b#�I��/�@��/��/��/��@�Q�@_�0`@�ġ�A@��pGG4GHb#/_ eDG0@TG��d�@Q�@� b#_��G�C�l@��G�]]} (ݤ08@=H]P}X`hݥpx#k��//����0#��~�^�^�~ �GGG��/� ��/��/��/�CG11 B4G��#hb#Q�2B��_��#?G�4Ghb#��/_GGhb#G�]�]4G�} �0�#��/��/��/��/k��/��/��/��#�G�B�^��~TG�^ �~5B(�0�G BG�>GG�G`b#��Ӳ���B_���/��/GG4G�b#w_`B�@G�]hZkG�]�] �}(�0�@�#k��/��/#��~�^�^�~ �(�0�G&��GG��0.`h�0J� ��/��/��/��e�� �`��#.�#JT�B��F ��#J@���. �B4G(�b�JNHZk���#,�c �#H?��#.�#J@���/�GG�]�]�} �(�0�@�#k��/��/;����0.�0J��/7� #��~�^�^�~ �(�GGGG����/��/��/ �BTGTG(�bHZk���� .rH��"Q� J2F�� >�`��/��/ �BGGTG(�bHZk��/��/�����.qH�` P��JF���>��/G�]�]�} �(�0�#k��/��/��/-����0.GGG�0J'� ��/��.�"VJJFF����/�G���/���3/��p/�3K[�pKrH�"rGp? ���/��/��.xJ4GW�J�"F>�.�s"�J��0,A�0H��0<k��/�C�G4G?F�@#�^G��~�^ �~(�GG�0 BGb#_B�@�]GGgZk��.V�J��>G�]�] �}(�0�#k��/��0.G�0J��/3� #��~�^�^�~ �(�0�GGG��/��/����$ ����C/�CKA�AC��!!D � ���/��/��.B4Gb�JGZk��/��/���#,�c �#H?G�]�G�]�} �(�0�@�#k��/�Gk��/��/#4G�^@[��~�^ �~(�0�8�޴@�GGHb �(�¤��CeZk�=$��G� @ ����e�D"��/ ����$.Q2J'JQ�3B��1!F��/ � ���/��/��.0�B4G�"8�bTJJ��/sGZk����.#1`@P�J �>��/G�]�] �}(�0�8�ݤ@�P�#k��/#tG�"�^��~�> �^�>"(�GG��P.0�[8�b�PJKF��.UJJG�"BF#� ���/��/ ��`Zk�=2H! �=�C�"��/��/��/��0.�0J��/��/��"���G�]2GJ �](�GJ0�#��/k��/��/��/B �51B�\B��C�k��/��/��/G��/��/G��/��/G��/��/TG��/��/G��/��/4G��/��/tG��/��/0�BG�"�="tG8�b`Zk�]2HB �]�C��/��/��/��0.G�0J��/'� #��~�^�^�~ �(�GGGG��d.B4Gb�dJGZk��.qHP�J� F>��D.�DJ_G�]�G�]�} �(�0�#��/k��/��/��/�Gk��/��/�C��0.�0Jk��/��/��/��0.�GGp�0J)� ��/��/��3/`F��3KY�3KB��.�JaJ�s"!G3?��/�K�KX�K� B��6,�6Hy3H�s"G?��.�J�JU�J ��B��.�Jx3J�s"F>��3/�3K_��/k��/��/��/#4G��~�^G�^�~ �(�0�޴8�@�H�>P�^X�~`�GGGG"b#!_��#GG� GI�@ G @��/0� ��/��/��/�B4Gb� B��cZk��A GGG0 @TGb# @��/� �@0@0@_GD�@� 0�A��P.sPIR�PJSF��P>�B�B��T�@G*fZk��0@� A A @��/�@��.W�J�G��>G�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�p�#k��/��/��/��Q.�GG�QJ(�@��/��/��/��/F��KX�KU�B��yJ�"G?��.�J�J� R�PB��RU�JwTJ�"F>��t.�tJ�tJ ��A�0@��!r4HS�tJ�"rFt>��.�J��/k��/��/#GG�"��~�^GG�^�~G�G �GF��/PB0B`">" bBB@�� SGpB�c�`BЀBB@ B�`0BpBPB@ BB�`ЁBBB�"`@ �`��/(�V��8�6"G0�v3bZkG?��GV��/?F�Q#_w"~ UB_G bB�q#��/ZBFG[BB� �1#�K��/�D?G�c���@BYB�q �" �"�1"�KDFCBUB��[/��`.��.�[K�`Jq#G[B�JW��/��U/��,�K�UK�#�Hw�4GF���/C� ��X/�XK��/4�@��/��/��/��y, G��G�yH�*�`��.��.�J�#�JB�W@�9#����.�J����y/�yK�@��x.��y,�xJ�#�yHS�wB�9#��s��8.�8J��/� ��Y,�YH��/ �@��.��y/�J�#�yK@�@�9#��@��.�J��/��y,�yH��/�`��x.�xJB���/��/��/�GG�]�]�} �0�#��/k��/��/��/#��~�^�^�GG{# �@G�]b#�]�G �#_���/��/��/#GTG�^��~[{��G�C��/FZk�G� �]� �#D�Gk��/��/#GTG��~�^(�[�^�~ �(�0�GGG0�b��/FZk��/��/��/��8�"`b#,�@��#,G��@.G�#HR�@J%@%Ds�JSF��@>�G @4Gb#�C0�@y_H�BG�@GGtGP�bG��/7FZk��E,B�EH��E<G�]�G�]�} �(�0�@�#k��/��/'��#4G��~�^[�^�~ �GGGb$bZkG0�@4G8b#M_(�B��GGTG0�baZk���/�GG�]�]�} �0�#��/k��/��/��/�Gk��/��/#4G�^[��~�^ �~(�GG��Cb �>aZk �]GG4Gb#@FQBGqF0@B_ �B�@�]GGOdZk��.V�J��>G�]�] �}(�0�#k��/#4G�^G��~�^ �GG�>��xb#;_�Gb#�]�] �0�#��/��/��/��P��q SB��/����1 Bk��/��/��/#G(�;"H�^��~tG�"0�[P�^X�~`�h�GG8�b �bIZk�=B� �"b4G?D7� aZk@�!HGN6$Ha!@ @��8�D�X�D�@*�� ���/��d.��.�dJV�J� wcJ�c F>��/��c/�KpK[�cK�c � pGc?��$,��.�$Hs#HT�J� �c p#JF>��.�J ���#/Y�#K�c 0G#?��/��/��/��C/ �Z�CK��C?GH�]P�]X�}`�h�p�#��/k�������������;��k��/�;����k��/��/��/H�#(�> ��/�@�h��~�^�^�~ �GG{@���C����@��(�B8�""��TG0�b��/DZkX�B��8�]"tG0�=`�b��/IZk(�B��P�""TG0�bDZkh�B4G4Gp�b��/?TZk��/��/��/�#8�> ��/�@�h�^��~�^ �~(�GG{{��C��s�@��cB""��TGb��/DZkB��H�]"tG@�=b��/IZk�� BG(b�)cZkPB���4GXb��/tZkBG�""tGb��/gDZkB��""TGbaDZk B4G4G(b��/SZk��/��/��/ #�> ��/�@�h��~�^L�"8�~"[{G�H�GG?"2NZkG�]�P�#k��/L�P_FL�PH�k��/��/��/#8�> ��/�@�h�^��~G[ �^(�GGbbZkB���4Gb��/tZk@�=H�4G �B(�b�H�0H�=L�"��C`Zk0�B? X�}"�1 @P�]G8�bMZk@�B�=TG�H�b��/CZkG�] �](�p�#k��/#(�> ��/�@�h��~�^�^�~ �GGP{{��C��s�@��cB""��TGb��/CZkB��8�]"tG0�=b��/ IZkB��""TGbCZkG�]�]�} �`�#k��/��/�#8�> ��/�@�h�^��~�^ �~(�GG{{��C��s�@��cB0�""��TGb��/CZkB��H�]"tG@�=b��/HZk�� �BG(�b�]bZkP�B���4GX�b��/ tZkBG�""tGb��/CZkB��@�""TGbCZkG�]�] �}(�p�#k��/��/�� k��/H�k��/��/��H�{#�"{#���/L� k��/��/(�#GG��~�^�^�GG� ��/�� 0�� AF��/'� @ZF0`B#�@`[F0`B�`�PF0`B��0`BYbB��/?bB �@��/��` �� [F��/�`0`BbB��/0�"@�B1" �H�btG��/HZk ����/ssBStB�G�]�]� �#k��/��/��/���4Gk��/x[H�G�r"��0�s"F��/�F0 B�ӢF0 B�F0 B�0 BY"B��/"B � ��/��3 �s"F��/� 0 B"B��/�4Gk��/q1BQ2B����/k��/��/��/H�GL�p"��/3��#��~�^�^�~ �GGGL�P.�SJ�@��G�"b#q_GtGL�C"(�"b#_���/��/�`G���/"b#a_ �"GTGb#_ӰG�]b#�]�}4G �0�#"��/4Gt#"������������# "4G��~�^G�^�~ �GGb#__ �BG ?"G4G_ZkGGb#}/@GG4G(b#��/'4@"H�`4G4�G4GL�cG(b#FL�c@�D���/s_G�]�G�]�} �0�#k��/��/��/#��~�^�^�~ �(�0�޴8�@�G(�GG>���/�$GTG��� !b#� ��/k2@ G�"4GGPb#��/����/��/��/.@GG4G� b#G ��/3@��/��/��/��G4Gb#��>_0@� � G �4Gb#5_G4Gb#%"��/@GG4Gb#G)_��/GG4GX&b#3@GG4G"b# /@,�G4Gb#��/��_,�4GGb#��/��_ӨG4Gb#����/_ӬG4Gb#��_ӴG4Gb#��/����/��/��/_G�]�]�} �(�0�ݤ8�@�P�#��/k��/��/��/��#��~�^�^�~ �GGGp{#h_GGGb#�]�]4G�} �0�#��/k��/��/��/#��~�^�^�~ �(�0�޴8�GGG{#_GG7�`��#,G4Gb#�#H1� ��/_G���PB"GG`b#tG��`�R"��/c_+���/��/��GG��/�#GGTG`b#0@�&@@��!@�� @GG4G�`b#��/��/_H�Gb# ��@ ���/PBG"G`b#tG`�R"��/7_G�]�G�]�} �(�0�ݤ8�@�#��/k��/��/��/#��~�^�^�~ �(�GGG(�8�<����/��/GG �$4GtG!b#]1@�GtG�$"H�G"b#��G.@Ӕ�8�#<��� @8��D�B<���H�c`@��/��/��/G�]�]�} �(�0�#��/k��/��/��/�G��/��/#�C4G��^G��~�G �>{#�@8�"e_�= � G�]� �#k��/#�^��~�^ �~(�0�8�GGGG�^(����/0�B �GTG8�bZk��/��/�����GG�=GtG0 b#1@ �G "G �B0b#GG��/_�GG�]�] �}(�0�8�@�#k����#4G�^��~�^ �GG�>�� �G8{#"_���=GTG�`�G�]�] �0�#�k��/G4G0{#0�#4G��~�^�^�~ �(�GGGG��(b#"_���/��/>��� �����/ ����/��/��/G4Gb#� _��GG�]Gb#�]�} �(�4G0�#��/#< F�^��~G4G�^ �GG�P#Bb# �=_ �B �=G4G��#]Zk���� ����G�]�] �0�#k��/��/��/#4G��~�^0�[�^�~P" �(�GGG8�b��/BZk$� ��/0�B0`@��$ �"TG8�b� ��/BZkyb@G�]�]�} �(�0�#k��/#4G�^G��~�^ �~(�GG�G �>hb#_G�b#�@ �=G��# �a��/�`�[�@Zk�G�G�]�] �}(�0�#��/k��/��/��/����#4G��~�^�^�~ �GGG�`�`�[��@ZkGGGb#�]�]4G�} �0�#��/��/��/��/k��/��/��/#�^��~�^ �~(�0�8�GG�GG$� ��/(�B��GTG0�b� ~Zk��/��0@y@��/?�G��/��/G�]�] �}(�0�8�@�#k��/��/��/d@b# �"Q@�_#G��~�^�^�GG �`"��/��/���x�s"`�4F.�Ӣ6F0@B*�7F0@B&�8F0@B"��3!F0@B� 0@BAB_yBB �`��/���s"5F��/�0@ByBB��/G "TG(b#_G�]�]�G� �#k��/��/"rRBGb#�]�]� �# �! QAB5��/���� ��/k��/��/��/���k��/���Gk��/����k��/����C��/k��/��/��/#�C�^��~�^ �~(�0�8�GG�GG4G{#�_BGG4Gb��/[ZkGGGGtG@Fb#��/~@�}G4G��c�c�[��/�@Zk �d�G��/�`�����/G4G0`@4G�%b#_ �B��DG �$��/^Zk ��@��.V�J��>�G�]�G�] �}(�0�8�@�#k��/��/��/#�^��~ �^(�~0�GG��C({#�>TGn_GG��="TGCb#t@�G4Gpb#��0,�0H��/� _G �4Gpb#_!�4G�}B�#�=b�#��s �=���s`F�`��.�J��/ ���/��/��/aZZk���#0 C�# �ݢ�ò�G �4Gpb#_G�]�G �](�}0�@�#k��/��/��/#4G�^��~�^ �~(�0�GGGG�>b#��/��_Ӵ �""Gb#_G��G�=b#_G�C4Gb# ����/_Ӵb# �_Gb#��/s_ӴG�]�] �}(�0�@�#k��/��/���Gk��/�H{# ����/��/��/�GGG{# ��_Gk��/��/���Gk��/ �k��/��/���Gk��/�k��/��/�� k��/��k��/��/{#��/��/��0.�GG�0JI� ��/��/��/3� 8 DX D��/�`<�@��0.�0J�"5,B,B5-B2D-B;D.B5/B2D4G;D1DT DG��P.�PJ?k��/��p/�pK�"5,B,B5-BAF-B.B;D4G2D1DT DU`CG��@��P.�PJ��/?k��/��/��0.�0J5,B,B5-BAF-B.B;D4G2D1DT DG�P.�"�PJ?k��/#�G��~�^�G��0.�0J� � �#��/k��/��/��/5,B,B5-B-BtF.B �[�"uFTGvF�qF;"(�{����/~ZkCG�]� �#k��/#4G��~�^ [�^�~ �(�GGG(bXZZky�@��/� �G)���/$1�@ �BTG(�b�d@$1@��0.�"Q0J0�"'J��/|Zk@�d@ �BTG����.�! (�b$1@�d@PJ�c JH�"��/|ZkC �B@�"TG��#,(�bA#H'H|Zk@G�]�]�} �(�0�#��/k��/��/��/#GG��~�^�G8_Ӡ5�@Gs#��/��_ӠCG�]� �#��/k��/��/��/#GG��~�^�G _Ӡ5�@Gs#��/��_Ӡ@G�]� �#��/k��/��/��/#4G��~�^ �[�^�~ �(�0�޴8�@�GGGG(�bYZk��$��`@%1�@,� ��/��/ �$0�B8�b&@0@f@�"��/�@�$��/��/XZk����&/GV7KY�&K��&?�d_Ӡ `BJG4G���d��/�`�[��/��/�@Zk����.qHP�JF��>�D� _�G��/G�]�]�} �(�0�ݤ8�@�P�#k��/ �BG4G(�b YZk�Ġ��@�0�@@���tG��/��/��/@�B�$GTGH�b|Zk��#G^��~�^~ ޴(0GGG4G{#W_ӐBGG4GboYZk? tG@����g���/��/��/@�BGTG�"H�b(�¤XZk�}� D#�`0�b��&��C�%"��/� ��.PJJP�B�PB��J����/��/��/4G��$E���/��e.`�B4G�"h�bStJgJ��/_{Zk�%,� �%H? �GtG ��/��/��%�"pb#@_ӡU @u @Gpb#0D�"� ��/7_x�D0`@� � a@������/��/B4Gb�"GYZk=�@��/�`�� ���/� ����İ�G4G4GHb#��"_�G�G]�]} ݤ(0@#��/k�������������0#�^��~ �^(�~0�8�@�޴H�P�G �GGD�G ��/��/��dG�]"`b#G eB �`��/ @�}�b#�C�$@0@� � @G�] �](�}0�8�@�ݤH�P�`�#��/k��/��/��/#4G��~�^�^�~ �GGG��Gb#h"��/__ӤGG4G0b#����/_GGP ��/��/��B @�1"p�B Q¢Ѳ"@BQbqBQA� @��G�]�]�} �0�#��/k��/��/��/#4G��~�^�^�~ �(�GGGG��8b#8"_ӨG��/J��(�#� ��/��!0@� ��!0@ � ��!0@� ��!0@��/� ��!0@��/?G"�4G8b#��/_G0@4G`b#P�@G��/o_(�G ���/��/��/� �0@@�! ��� �d0@@a����/�0@@ ��� �0@@ ����0@@ �$!����/B�@@��G�]�]�} �(�0�#k��/�{# �#4G�^��~ �^(�~0�8�GGGG�^ �~G����xb#"_(�# � ��/B �!GbVZk����!��/?GGb#� �= �]��/�@���/��/ ��BGGGGb#G��0"R"��/_�} aHG�] �](�}0�8�@�#k��/�q#��~�^�^�~��r ��1(�0�޴8�GG @GG�"G� �``\<@C�k��/��/ �c�@��à� �c�@��à� �c�b#�@��#>@G� �cTGGTG`b#�@��#�c��$�E0`@GQ�B rB��/�@e��/_ӬGG/�`��/��/��DS�B&�@��/���0�B�R"��S�s"���0�B�"�X#����x0�BS�`��{0�B�; 3�`��â�"0�B ���60�B�"� � ��Y0�B_0 B1 � ? HE�B��F���/��/��/ �B��#TGP�"(�bzyZkG4G��4Gt�0b#;_ H��d3�` �BTG��#(�b"iyZkG ��tGt�4Gb#>_ H��d"���/��/��/ �B��#TGp�"(�bVyZkG4G��tGt�b##_ӠU�@��d�`GTG��#b#"_`GTG�#b#"_ HG�]�]�} �(�0�ݤ8�@�#k��/��/��/#�^��~ �^(�~0�8�@�޴H�GGGGG �^���/��/B��GTGb� yZk��/��0@@��/?���/��/%H�]b#"�BG_���/��/��/�0BG"GGb#G��Ű�# �chR"_� HG�] �](�}0�8�@�ݤH�P�#k��/��/��/#4G�^��~ �^(�~0�GGG�>G��Pb#8"W_�Gb#�=�@��/��/���� � b#3�@��]G�](�} AH �]0�@�#k��/#4G�^��~ �^(�~0�GGG�>G��pb#�"/_�Gb#�=r�@��/��/����$� b# �@��]G�](�} AH �]0�@�#k��/#4G�G��~�^�^�~ �GGG��/� ��/��/��/���0@B�����0@B �����0@B�����0@B��/�����0@B��/" ABG� BQ�_BTG{#_ӬGG��/$�`G��/��/�0�B�q"�R"r��1� �"0�BҲ��1�#� 0�B��1� 0�B�Q#R��1 � 0�B�1 2��1� �q 0�Br��1��/?P��B��G�]�]�} �0�#k��/��/ �GGGG ����/��/ ��]G �} � TZk �����GG��/k��/��/��/�GGk��/#TG�^(�[��~�^ �~(�0�GGGG�@�"0�b{Zk׀@�"W��\@tC�k��/��/��/�C(�G"PF�]0�b8�"�] �}GTG(�0�@�#��/;k��/��/��/(�B�CTG"0�b{Zk��/��/G�]�] �}(�0�@�#��/k��/��/��/(�B�C X�""DTG0�b8�"{Zk��/��/�C��# � ��/(�BTG0�bP�"�c v{Zk��#��/?(�B4GH�"0�bn{Zk��/G�4Ghb#_��/��/��/(�GG�]0�bTG�] �}(�0�X"@�#V;k��������G��4G{#��/��/��/k��/��/��/��0GG��//� #��~�^�^�~ �(�0�GGGG� ��/��/��G4G b#����/��/��/_��0@� ��# @?GG�]G b#�]�} �(�0�4G@�#��/��/��/��/GG4G r#��/��/��/#��~�^�^�~ �GGG{#���/����/��/��/_�4G�G�b#����/w_�G�]�]�} �0�#k��/��/��/#4G�^��~�^ �~(�0�GGGG��G(b#"_G �"�4Gb#��/_S���/��/�GTGb#�D����$�"K_G���/��/GDG4G� Pb#_�GG4G7b#�g@0�B�"4G8�b���/`ZkB@�BGGH�bGGR"vZk�G%�G�DG4G��Pb#_�GG4G7b#�rg@P�B�CG`�""�tGX�b|Zk�G �GTG��#b#"_G4Gb# �"��/__G�]�] �}(�0�@�#k��/��/��/���1# �^��~(�^0�~ ��8�@�H�GGGGG�~�� ����/��/��/�}GGTG�"b##@�����G���/��GTGb#�0$Fq� 8�""#@"���#0�?"_"�!(�! � �c�aL!!HN%HG4 D1@2D���/�G4G08b#f@�G�="4G���"0b#/@T���/��/G��TGh�""b##@���cG4G08b#�c�f@��="G�"��4G0b#@;���/G��TGX�""b##@G4G���08b#��/f@�G�="4G���"0b#@$���/��/G��TGH�""b##@���cB4Gb �c�� �G��/SZkGGG�"G0b#@ ���/��/��/G�} �#"b#�>@G �](�]0�}8�@�H�P�#k��/#G4G�^��~G �^(�~0�GG���"b#��/_���/��/G�="hb#<_GG��"4Gb#_ ��Ghb#_GG4G@b#�_�G�] �](�}0�@�#k��/��/#4G�^��~ �^(�~0�8�@�޴H�GGGG��>��xb#"G_�GTG�=xb# ��""@xBG"G� ���$�}b#R"��/_(� E���/�#G�="b#GG �!�!H�_G��/�� 5���/�Gb#h_GGG4Gpb#_��f,GG4Gpb#�fH��_Ӹ �0�eG4Gb# �` $P�?@��/{_0�G �BQ�@SZk ��=G4Gpb#�!A�#@��/��_�0��G�D�@İG�] �](�}0�8�@�ݤH�P�#k��/��/#G�^��~�^ �~(�GG��C{# �>�C%�@�]���� GG �}Gpb# @ @�! FF "� �R �R�2�B`R"��//_G�b#�@G�]�] �}(�0�#��/k��/��/��/#4G�^��~ �^(�~0�8�GGGG��^��hGb#0"��/_��GGhb#TG ����""@�" ��G�chBGGb# �cR"�#_b��GG4Gb# ��H�_? G��="�� Gb#G�]1_G���GL���/�=G4GTGHb#�! F��/���D0@B��d�D��#�"��/_GG4G`b#� _�G2���/��/��/!FG4G7b#� ���/��/We@GGG4G��$�`b#_�G���/"FG4G7b#� ���/��/Ce@GGG4G��$�`b#_�G���/hGTGb#"_�GG�] �](�}0�8�@�#k��/+����GG4G�8�D���0#��~�^G�^�~ �GGG� �b#_GGGb#�]�]4G�} �0�#��/��/��/GG4Gq#��/��/��/k��/��/��/#�^��~ �^(�~0�8�@�޴H�P�X�GGGG �ۤ��>����&��%�d#��/ � ��D/Z[KGKQ�QC��1!F��/ � ���/��/��D.8�B4G�d"@�bRSJGJ��/wtZk��� c���$,GG`b#4G�$H��/[� _BGG4Gb��/QZk��/��/��/$���@G!����e�H"��/ ����(.Q2J'JQ�3B��1!F��/ � ���/��/��.8�B4G�"@�bTJJ��/CtZk����.'1@P�J!�>��/�=G4G�Gb#Dw�@��/��/��/_h�BG�="GTGtGp�bMZk(�G��!G&��GTGb#�"Y_GG4G b#��/_��/��/��/��à0@��ð��/�G��/��/��/G�] �](�}0�8�@�ݤH�P�X�`�#��/k��/��/��/�(�tGGb#��H.@�"�HJ�!RHJ � GJG_GG4G b#_GG4Gx:b#c@��.qH0�H�F"tIP�H�"�#wuHp�H�f#P�JzHF��>�f.S�rJGtF�f>�.V�JF�>�&/Y�8K:GG�&?�,@�H4G b#�<�=��_�GDDGG/��G"���.�J�J�`��/B@yFJ" �`�.�JF ���/X�KG� ?���f/`J[�fK� `Gf?�-�! �I��f,C�fH��f<�=B��G4Gb��/QZk~��/��/G4Gb#(�_r��/��/#C�^��~ �^(�~0�8�@�GGGG��`GGG�>"{#_G��/��/���G ���/�GD��/��c @FaD�G4G b#@ _ �BGG��"G4GBSZk�GG��b#��/�>_�GG�] �](�}0�8�@�P�#��/k��/��/��/# �^��~�~"(�^0�~8�@�H�޴P�GGGG�>"`{#���C�_Ӏ"��/��/x���GXB��!�"��R��/ � 0.Q0J'JP�B��F��/*�� ���/��/�}B4Gb��.�s"TJJsZk��"X"��!��1 � ��01�B�p@�P.�"�PJP�B��FB ���/��/��cB4Gb31`B�s@�.�s"�JrZk@���4GGb#�0�@�?@ !BQF� ��/0��_.���/�@  @�B @QF� %@GG@GTGXb#_GG ��� 0 @�@����a"�.uSJT�JF�>��âB�v@�]�"GRZk��ð4G�Gb#��/����/��/��/_G �]�G(�]0�}8�@�H�ݤP�`�#��/k��/��/��/ #��~�^�^�~ �(�0�޴8�@�H�>P�^X�GG%�GGGGGG G âGGb#GG�B��V�GPF��/ � � �� �@ G��G��*b#tG"s_ C0�A A A_G�]�]�} �(�0�ݤ8�@�H�=P�]X�`�#��/k��/��/��/#4G �^��~(�^0�~8�@�H�GGGG�^��Gb#�~���/+��10 @P!@_��GG�`"�$0 @�� R� 2 @ AB@BF���/��/�B �s" B B<���/0�B���s" B5���/��/���%GG b# 8C0�CQC*� TG_��G�� � 0@3�BR� @� pB 3@�R"�F��/���/��/��/�!@ �R" 3@ 0@���/0 @���R" 0@0�B���$G�]�}C�%C�#� �d`G�`b#��/��/_����/PG4G@b#�"_�G�G�=�"b#�]�}=_�}��@���/�D�@��4GG �](�]0�}8�@�H�P�#k��/��/��/?BC#_B�tF�^��~ �^ �~�uFC(�0�G�F8��4G �[G3�`GG�2"0��(�b�"tGD���C#MZk'���/��/�D0�B�D�"� ��C��$tG8�bQBqF�$"�]���C��/KqZk �����/@�B�]�"�$"tGH�brZk��/����c�� d@���/��/��/�GG�]�] �}(�0�@�#k��/��/��/#4G��~�^�^�~ �(�GGGG0G� xb#�"_,�G4G(b#��0�#@� ��/��//_0��?$G4Gb#L! ��@@ FG��/_,�0�,�G�]�]�} �(�0�#��/k��/��/��/0#4G�^��~�^�~���޴�G#GGG� G��� P�=G���/�@Gb#��/@ ��/��/���G���/ &�GTGGHb#A�@x"��!� -_G�GGTGb#@����D�D�ݠ�Ơ�G4G �"Pb#@���&F�@ @g� �Ơ�G�&"c�����F�" @FF�"J_Y���/�àGGH�"�]�G@�"b#G��޴��/o"@G��/��/���GE���/@�}H�}G�G8�}�}�`@�}'�:���/��/@�=�b#P_`�BGG8�="�}GGh�bwHZk�GG ��8�]�}Gb#"_�G���/��/��/8�G@��G�`��/��/��/@�]@ �"Pb#P�T�x�" @pF4GFP�"_GGG4Gb#i_�GG�]�]�}���ݤ��#k��/��/p#"<�@���8�>H�^ 0G��~P�^X�~`�h�p�޴x���GGG b#� � G4G��/@ �GGG%���/��/ $G8�="b#G�'@��A�]_ ��G�@"�"��`�="@b#>�4G_GG4Gb#!_0@@ @@�G4Gb#��/��_�GH�]P�]X�}`�h�p�ݤx����#k����#4G�^G��~�^ �~(�GG�!B �>Pb#_ �BG�=��" �]tG(�byqZk��G�G�]�] �}(�0�#��/k��/��/��/#4G�^0�[��~�^ �GG��C8�biMZkG@4Gb# �_ �= �B��"�]0 @OZk��G�]�] �0�#��/k��/��/��/#��~�^{#�^�GGG_��/��/�@G���/�"���G�]�G�]� �#k��/��/#��~�^�^�~ �(�0�GGGG��G��/��/�"b#_��/�G���/��G��c��/�G�]�G�]�} �(�0�@�#��/k��/��/��/#4G�^G��~�^ �~(�0�8�GGG�>(� %"�b#&_ �BG %?"G4G��/sMZkG��`b#_ ��"@b#>�@GG4Gb#����/@��/��/��/�(�G��D���G�]�] �}(�0�8�@�#��/k��/��/��/��#��~�^�^�~ �GG��/��/��/��pG4Gb#'_G��/��/G�]�]�} �0�#��/k��/��/��/#�?"4G��~�^G�^�~ �GG(�0G��0�0b#�0�0 �0"_GGGtG�b#`�"_GG4Gb#�_G�TG�#"8b#_�G4Gb#0�@_GGtG�C" �b#`�"_GG4Gb# �_G �#"TG8b#_�G4Gb#0�@_GG�C"tG�b#`�"w_GG4Gb#�_G�TG#"8b#g_�G4Gb#0�@u_GG�C"0�""�tGb#]_GG4Gb#�_G�#"TG8b#M_ �G4Gb#0�@[_GG �C"0�""$�tGb#C_GG4Gb#$�_G$�TG #"8b#3_(�G4Gb#0�@A_,�_""4G�� .Gb#Q� J�� >4�CD�CL�CT�C\�Cd�C1_P�4G�� .Gb#Q� J�� >T�C0@B'_X�4G�� .Gb#Q� J�� >\�C0@B_`�4G�� .Gb#Q� J�� >d�C0@B_h�4G�� .Gb#Q� J�� >4�C0@B _0�4G�� .Gb#Q� J�� >D�C0@B_H�G0�"TG�� .G8b#Q� J�� >�4Gl�p��#"��/_G"0�""0�B"tGb#��/G_Gt��""TG@�xb#��/+_t�G�]�]�} �0�#k��/��/��/��0#4G��~�^G�^�~ �GGG� �b#��/_�G4Gb#�� ���/_�G4Gb#�����/_ �G4Gb#��$���/_�G4Gb#�����/_L�G4Gb#��P���/_d�G4Gb#��h���/_\�G4Gb#��`���/_T�G4Gb#��X���/_D�G4Gb#��H���/_4�G4Gb#��0���/_(�G4Gb#��,���/_G4G "b#f@G "4Gb#a@G4Gb# "��/[@ G4Gb#����/��/_ G4Gb#��_Gt�4Gb#��/o_ӈ�G4Gb# ��G�]�]�} �0�#{��/��/��/G�]�]�} �0�#k������P.#�G�PJ&�@��/��/��/��0,S�@�F�``B�p.�0H�"�pJ��@�pJ�"�@��p/A�@` @�pK�pK�"��@�@��p/S�@�pK``B�pK�"��@�@��P.�PJA�@` @��@_1!J Bq";H�~�>��>��{F�qFF�`[[`X[��~�qN sC �#k��/��/��/GG?"G_Gk��/GG'?"G_Gk��/�B Bq"��F�3FFtF��/�`#��>��>[[`X[��~�3N B �#��/k��/��/��/�[1CF2N6%J3CFtsBTB�BSB Bk��/��/��/�[1CF2N%J3CFT�sBtB�BTB�BSB Bk��/�?&GGG1"j_G��/k��/��/��/#"tG�^��~ �^(�~0�8�@�޴H�GGGGG��РGG@�"b#�TFU�@G�_G�=GTG �b#_p�BG�=GJZk�������/��.�C.b#�/�#/JRCJKY#KFGG/�@��/��/��/��GG4G#_`�BGh�b� JZkGG �@TGb#_�=P�B0@��"GA�&@��/{LZk�������0B�G�] �](�}0�8�@�ݤH�P�#k��/��/��/#GGG��>GG� �>���/_@�@�� ��/ � ��/��/��/ �]G(�}�"HZk ����!��/?G�G �#k��/��/��/G�G �#��/k��/��/��/��04G� #��~�^G�^�GG�{# �"_����G�]�]� �#k����#��~�^�^�~ �(�0�޴8�@�H�>P�^X�~`�G��pGGG! 4G�C��(�n���/��/��/�,� �B�ʢ ���7B0@r� @@]���/��/ �*b#� �* ��*@� $�����#�A� @@��B0@ @@!�! @[� D���/�*G4G@b# � �C4�RP�_B_� G�P�B4�Q�BGJZk� �â�*"GGb#GGK�B��F�� �x��/_�� GG�* �Gb#K�BG��+(F� �j�s�*"_�� tG0@@�* � @ �DG`b#Q�B� A�AB��1��A_���GG�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�p�#k��/��J��N��/��J��*L��/��J�� L��/#��~�^�^�~ �(�0�޴8�@�H�>P�^X�~`�G��pGGG!�C��(���/m���/��/��/��,�Ԣ,� �B �B���/ ���$8C0@n�� @@X���/��/� G4Gb# ��4�P�B��/ _� G�B4�Q�BG?JZk�G4Gb# ��Ģ4�֢P�B_� G�B4�Q�BG.JZk� �âG�)"G@b#GGK�B��F�� �x/_�� GG�* �G@b#K�BG��+(F� �j�s�*"_�� tG0@@�) � @�J �$Gb#A�B� J�*B��!��Jb_��/��/���G��/G�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�p�#k��/��)�� O��/��)�� L��/#TG �^G��~(�^0�~8�@�H�޴P�X�GGG�0G�b#��/W@G�$�]"�}"��Gb#V@�GTGpb#����#f@�G*��=G4GGb#G�=�#P�?Br_$������/��/��/$�$G4G�"0b#0@�&B@{Z@���# @?G�4GHb#_G�TG�#pb#��/;@$�G �](�]0�}8�@�H�ݤP�X�`�#k��/��/��/# �^��~(�^0�~8�@�H�޴P�X�`�>h�^p�~x�G �GG�G4G��/��/��/�dG �GGGb#4GH�"�`(���/�_,�G4G �b#��/����/��/��/_������/����/��/��/�� ��0�A��/� �� �0�A ����0 �0�A� ��Q �0�A�@�� �0�A,�$4��ɢ��)$�(b#�� �I_G ��4�4Gb#4GP�A_� GG4�$BQ�?@IZk �ɰ4G4�ĢGb#P�B_�$G��A,�@�� ��/ �JGGGb#GS�HB��S��K�TBG�u_�� ��J_���/��/ �*A�(@��A��J�@ � P�B��P��J �@ �*Q�(B��Q��J�@ �JR�HB��R��J��/_G4�$GG8�b/b#GV@4�dG G�G�`�D��/�� �$�* B� $� ��/��/������/�� 0 AG�� +A�ĢG�G4Gpb#���䰽_4����@M$�C�%�@倖k!�}�]��=[[jX[ _(�C���/��/'!(�G �]�G(�]0�}8�@�H�ݤP�X�`�=h�]p�}x��#k�������� �P,�0#G��~�^G�^�~ �(�0�GG��QG4G �G�b#G @��/����/��/��/ �#GGG�4GGGb# @0@��/� ���/��/ @���/�G*���/��/GGG4G�GGpb# @����/��/� �#GGG4Gpb#GG @0@��/� � @��/,��ctG��dy`@�`���4G��/��/��/G�]�]�} �(�0�@�#k��/��/��/�G��/��/,�0�# �P�^��~��1!@B�^ �~(�0�GGG @�>���G'��G2ABG�#�CtGp"b#�CG1"{ @��/��/��/����G� �#��G4G�]G��G!2@`b# $@�#!1 @��#�#@�4GG�]�] �}(�0�@�#k��/#�^��~ �^(�~0�8�GGG{#�C_ �,�#GG�tG0¦G���!`b#0�6" @&�`��#�9 @��/������/�8�D0�X�D�GGGb#� �@�4"��G4G��/ @G ��G4G b# @�GG4G b# @ �Gb#�v_ �GGTGb#tG��0 G @���#G�D"GTGb#tG�#��/ @G��/��/��G4G b# @ �,�#$"GG`b#tG���! @��//�@�c�}��#�G��/ @�=��/��/���#!���/�#�]8�D�X�DGGtG�b#�C�#��D"��tGM @�GG4G b#g @ ��#Gb# @� _ ��= @� �#,�C�#GGG��RGpb# 2B&��â�#�C�#�$" �ݲ4G @ �������/�(�TGGb#�G��$ @��TG(�# �Gb#�G��! @G��G4G b#+ @��4G�G�] �](�}0�8�@�#��/k��/��/��/G@8{#tGG4G4Gh��/G4G8{#��/sh������������#��~�^�^�~ �(�0�޴8�@�H�GGG� ����/��/��/GGGtG�tG�b#��/{ @��/��/��/?��G� @�_P�\<@�b��C��/�k��/��/��/GG4GE"tGb# @GG4GE"tGb# @GG4GE"tGb# @GG4GE"tGb# @GG4GE"tGb# @Ӹ� �# @�0�@� ���/GG4GE"��tGpb# @��� ��G4GE"b#tG�Gw @��G��/GG��/��/GGG%"4GGG b#@���GE"G4Gpb#tG� @G ���#%"G4GG b#G�#@��GGE"�4GtGpb# @��/�� �0@0@�㰨 @!���#��/��/��/GG4GE"tGb#G��/3 @��G�GGE"b#4GtGG�& @��G��/��/��/�G�4G�]�]�} �(�0�ݤ8�@�H�P�#k��/��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/�P �0#tG�^��~G 2B0;�^ �~tG(�GGG�b#x1"��/g @���G� �#��G4G�=Gb#!1@ 0@�#�#!1 @��G�#�# @�4GG�]�] �}(�0�#k��/��/��/0�0#[tG�^��~�^ �~(�GGGR"��q.Gb#S�qJ��q>��4G* @��/��/���G-���/�CG�C_���G%���/ �cGGGb# rB4"4GG���/G@���G� �#�4GG`b#!0@G�# @0�4GGb#�� .r HQ� J2F�� >_ӠCG�]�] �}(�0�#k��/#�^��~�^ �~(�GGGb_��/��/���G2���/�C �cG4G"GG zCGpb#�1" @���G!� �#�tGtGBGb#00@ 0@�GR" �@��/��/���G���/ �# �4GG b#!0@G�#_ @Gpb#<_ӠCG�]�] �}(�0�#��/k��/��/��/�0 �P#tG �^��~(�^0�~8�@�GG QBGGG�0�@b#� G @8�D)���#X�D�x�DGGPb#�#���@��/��/��G4G_G��G$"@G��G4G�b# @�Gb#}_ �G_G D"��GGtGb# @ ��=Gb#!@ @�#�_ ��=G(D"Gb#GtG!@ @�#�# �K@)���CGtGb#�C_"�� �cGG4G rB0D"�;@�� �#�4GG�b#!0@G�# @�GG8D"b#TGtG���/'@���#Gb#�#1_ � �=Gh�$"G@b#GtG!@ @�#�#� @ӊ���C�@�b�C��\@�C��/�k��/��/��/G_GGw��4G�b#��/ @� �#@D"GGb#TGtG! @��=@���CGtGb#�Cl_�� �cGG4G rBHD"�@ �� �#�4GG�b#!0@G�# @L� ��=GPb# @�Y_D�GN_A�� �cGG4Gb#tG rBPD" �@6�� �# �4GG�b#!0@G�#a @,�G6_GG'��4G�b#��/W @Gb#��/g_���/��/G&_GG��4G�b#��/G @���/��/G_ ��0�CGG�b#4G��r.�rJ�@��/7 @��/��/��/ ��=G$"G4GPb#GG!@ @�#�@��/��/(��� �#�$"GG@b#tG 0@G���/s@G��$"G4GGGPb#@�� ��#4G�G�b#$@G @��$1@��/� ����/ @ ��]�4G"@�CG �](�]0�}8�@�P�#k��/��/�0#�^��~�^ �~(�0�8�GGG�>@{#_ �#,�4GG�`G`b#��� G �cG�`G��/@����/��/�# �G4GG`b#GG 0@0 @a���#G@GGG4GGG@b#@��/����/��/��/�# �G4GG@b#GG 0@0 @E���#G@�,�#tG��y�B����AGGG4GGG`b#@����/�# �G4GG`b#GG 0@0 @%���#G@GGG4GGG@b#@��/����/��/��/�# �G4GG@b#GG 0@0 @ ���#G@��/��/�,�#� �#�]Gb#�#�C_�GG$"@b#tGtG��@/��C��/�8�DX�D�x�D�'� �@��/�`�� � B0�B���GG4G0D"tGb# @�GG4G(D"tGb# @�GG$"@b#tGtG���/@ӡC��/��/�G�]�]�4G �}(�0�8�@�#��/k��/��/��/G6{#tG4GTGG d��/G4G@7{#��/cd������������0�0#tG��~�^�^�~ �(�0�޴8�G@���q.G �GGb#S�qJ��q>�4GG�@��/��/���#G%"G4G4G0b#G�#@G ��G�E"4GtGb#@0�4G�� .r HQ� J2F�� >�4G���/��/��/GG4G%"4GG0b#��/@ ���#G�E"G4Gb#tG�#@��/�� �#�㰡 @0@� ��CGG4Gb#tG�C��E"z@0���',pHA�'H0D��'<��/��/��/�G�4G�]�]�} �(�0�ݤ8�@�P�#k��/��/��/�P �0#4G�^��~G�^ �~(�0�GG 2BPGG4G�0b# G@G��G$"4G4GGPb#��/@G��/��/ ��G$"4G4GG0b#��/@���4G� �#�4G$"G0b#4GG!0@G�#��/@���G�GG4G$"4GGPb#��/@���G���c @G�]�] �}(�0�@�#k��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/#TGtG�^��~ �^(�~0�8�@�޴H�GGG��Gb#�` G@��/��/��Gm���/� �#Gw@�� B��/c��a�``�\@`�C�k��/GZ���/��/GGtGE"tGpb#@O�GGtGE"tGpb#@G�GGtGE"tGpb#@?�GGtGE"tGpb#@7�GGtGE"tGpb#@/�GGtGE"tGpb#@'�GGGE"tGpb#@�GGGE"tGpb#@�GGG�E"tGpb#@�GGGE"tGpb#y@�GGGE"tGpb#q@4Gp@b#x �� �# B��/��G��/_ �#,�(%"G�tGGb#�� �C�@��4G��/@�=G%"6��G4G4Gb#G�#��/@����/��/�# �4G%"Gb#4GG 0@0 @[���#G~@GG%"4G4GGb#@��/����/��/��/�# �4G%"Gb#4GG 0@0 @?���#G@�,�#%"G4G4Gb#G��GV@����/�# �4G%"Gb#4GG 0@0 @#���#GF@GG%"4G4GGb#}@��/����/��/��/�# �4G%"Gb#4GG 0@0 @���#Gj@�,�#� �#G�GGtG�#�#h%"b#O@Y���8�DX�D�x�DGGG�b#�31@G� &� L���C%" @H�@�c4G4G%@��/����/��/��/�#�4G%"G�b#4GG 0@!1 @4���#G@��/��/GG4Gb#@(���/ ��#tGE"Gpb# @0@$1@ � @�� GTG��/@���/��/G @GE"�4GtGpb#@ ���/��/GGTGE"tGpb#y@ �GG`%"b#GtG��G@���#� 0@�#GGtGb#%"; �C�C�CG@���8�D�X�DGG4G4GG�b#�j� s�� �#$$B%"@��/����/��/��/�#�4G%"G�b#4GG 0@!1 @_���#G@ �#GGb#4G!$@�#Q@� �G%"Gb#GtG$@@H�� �#8�DX�D�x�Db#$$@�*���`G=��,� $@��D8��_5�� �#�"G4GPb#G20@$0@G�CG*@�&��#G11@G�4Gb# @� �#�#��/@���/��/GGG"G4GGPb#@� ���/G_GE"��GTGtGpb#@ �GGE"b#4GtG��GG@ �� �#GE"G4Gb#tG�#=@��/���#G%"G4G4Gb#G�#i@G���tG �#�#pb#20@ B4G��!2@�E"G�#@ �GG`%"b#GtG$@��$@@ӳ@>����#GG��#_ӠC��D��`�\\B�C�k��/GGGE"tGpb#@ӈ�GGGE"tGpb#@Ӏ�GGGE"tGpb#y@x�GGG E"tGpb#q@p�GGtG(E"tGpb#i@h�GGtG0E"tGpb#a@`�GGtG8E"tGpb#Y@X�GGTG@E"tGpb#Q@P�GGtGHE"tGpb#I@H�GGtGPE"tGpb#A@@�GGtGXE"tGpb#9@8�GGtG`E"tGpb#1@0�GG4GhE"tGb#@G'��GpE"TGtGpb#!@ �GGtGxE"tGpb#@�GGGE"tGpb#@�GGtG%"GG�b#��/o@G��G4Gb#!@��/ �GG@%"b#4GtG$@��$@��/o@��/��/��/G���#�@GG��#_ӠC��D=��`�\\B��C��/�k��/��/��/GGGE"tGpb#@,�GGtGE"tGpb#@$�GGTGE"tGpb#@�GGTGE"tGpb#@�GG4Gb#@���/��/G_GG��4Gb#��/@��/��/��/ �GG%"b#TGtG$@��$@��/@/���X�D8�DCGtGb#�_ӠCGG4G��D ����@ �âE" B���/@ �� �#�E"G4Gb#tG!0@G�#@ ��GG4Gb#@�GG4Gb#@ �G@%"Gb#TGtG$@��$@@��/��/��/0���#8�D�X�DtGb#E"�#��'��GP_G#��G4G@G��G4Gb#e@� �CGb#3AB?_��3SBG�c2_�� SBG�_��� �#!0@�#GG4Gb#K@ � @��0�#����q.�qJ*� ��/�àGGE"`b#4GtG�ð[@��G��/ �#GGE"�ð4GtG`b# @0@� �ð�ðJ@��/��/�#G E"�ðG4GtGpb#�#@����4GG�] �](�}0�8�@�ݤH�P�#k��/��/�G��/��/G4{#tG4GTGG_��/G4Gp5{#��/[_������������#TG4G��~�^ �[(�{�GEZk4G�� G�]� �#k��/ �(�{4G"k��/��/��/� �4G�4G B���Т�B0B��.�J B2B�`w@J�8B �@@F!2H��1/�1K�1D� �k��/��/��/�Gk��/��/��4G�4G B���Т�B41B."�J B2B �`w@J �@�8B@F!2H��1/�1K�1D��/� �k��/�Gk��/��/� ��G B�k��/��/��Т4G�G�B��.�J B2B �`w@J �@�8B@F!2H��1/�1K�1D� k��/0B�4G���/k��/��/��/���G B�k��/��/��Т4G�G�B."�J B2B�`w@J�8B �@@F!2H��1/�1K�1D� ��/k��/��/��/41B�4G���/k��/��/��/�p ��G tB�k��/��/���G�B��.�J UB BQF� k��/��/0`B�4G�p��/k��/��/��/�p��G tB�k��/��/���G�B."�J UB BQF� k��/31`B�4G�p��/k��/��/��/�p ��G tB�k��/��/���G�B��.�J UB BQF� k��/��/0`B�4G�p��/k��/��/��/�p��G tB�k��/��/���G�B."�J UB BQF� k��/31`B�4G�p��/k��/��/��/�p �GGGtG @ @#����0#��~�^[�^�~{ �GGG�3@QyZk��/���"�4G�#@�"���/��/�GG�]�]�} �0�#��/k��/��/��/�Gk��/��/�p�GGGtG `B @#����0#��~�^ �[�3@�^�~(�{ �GGG05@��/yZk���"�4G!#@�"���/�GG�]�]�} �0�#��/k��/��/��/�Gk��/��/G1{#G1{#à#�� �G��~�^GG�^�~ �(�0�޴8�@�H�>P�G�GG�BG��/9VB��/��/��/7 KG @G�BWG@�9C@�@G�@��` ;@d�`�B��/��/UG0@C]� ���,�@�H0�B��(.�E�`F��s"�(JUG0@C1@ B�@0�BK� 0 @��/H� ��/��/��/C����3-��-�3I�I B�s"1'AUG �@0�B0@C8� 0 @6����/3���-��,�I�H B�s"1AUG�@0�B0@C�@'� 0 @��/$� "���3-��,�3I�H B�s"0�B1'AUG0@C� 0 @��/��/�����3-��&. B�3I�s"�&J1A � 0 @��/��/��/��/ � GG �?"� GG���/��/��/GG9VB= C?BVBECD4G��/w��/��/��/V�B4GG�B�� @��@ ����g�`�[G�@Zk��' �@�"���Ǣ�GG�]�]�} �(�0�ݤ8�@�H�=P�`�#k��/��/��/ ���/��/ ���/��/#���ТG��~�^GG�^�~ �(�0�޴8�@�H�G�GGG�B"��/9UB��/��/��/7 KG @G�BwG@�9C@�@1@3B�� !:@!1 @k� 軙 @��/S�`��/��/��/6Fb���`��,�H�aC!1 @��.D�`F�s"�J�aC!1 @0@(1 BE��/P��0@C�"��/K���,��-�H�I0@(Q BE�aC!1 @B��0@C?���,��-�"�H�I(q BE0@�aC!1 @�aC!1 @3��0@C�"/���,��-�H�I( BE1 B0@� &��0@C#���,��. @�H�J0@��/��0@C��/� ��/��/��/6F11 B��`��,�aC�H!1 @s"��.�J0@��0@C?��/ ��GG �"��GG���/��/��/GG9UB= C{BUBhGCE4G��/o��/��/��/U�BG4GF�B�� @ @��/ � ��f��/�`�[��/��/�@Zk��'@�����GG�]�]�} �(�0�ݤ8�@�H�P�#��/k��/��/��/ ���/��/ ���/��/#�"B4G�^��~P[�^ �~(�0�GGG0@�XbBZk�= �B� GG4G"�� #{ZkBGb]BZkG�]�G�] �}(�0�@�#��/k��/��/��/#!QB�^��~�^ �~(�0�8�޴@�H�P�GG��'aBGGGGP{#� ��P�@�@ 2B�@��/��/_���� �=pB�B1%B�GBW{Zk�� �â��B B �ò�B��#�÷ B��pB���cG�]�d@B{ZkG�]�G�] �}(�0�8�ݤ@�H�P�`�#k��/�0#��~�^�^�~ �GGG� � B� �0 @ ����PZ :@�^� �^�~ �0�#k��/H" �bTG(�B��0�b�1"��/'\ZkG?"b#G�@8�B4G4G@�bkZk��/#�^��~�^ �~(�GGG�>8{# �^_�} �b#G�#�CG�]�] �}(�0�#j��/��/G1{#GG{##��~�^{#�^�~ �GGGU_�" a@� @���"�B r@�`��@B�G�]�]�} �0�#��/k��/��/��/#Gs��~�^{#�^�~ �GGG3_�" a@� @���"�B r@�`��@B�G�]�]�} �0�#k��/��/#��~�^�^�~ �(�0�GGGG{#^_�#�pb#%@1@ B��G��/_G��#�cGBG�G�#@~zZkG�]�]�} �(�0�@�#��/k��/��/��/#�Cq�G�^��~�^ �~(�GG�G{# �r cBG�`��/��/_�=BGG��AUzZk`G�]�] �}(�0�#k��/��p#G��~�^�^�~ �(�0�GGG �[0�� (�bG��/]Zk;�G��/� �B4GH�"(�b�D����/]Zk� �B@�"4G(�b�D��/��]Zk� �B4G8�"(�b�D��]Zk� �B4G`�"(�b�D��]Zk � �B4Gh�"(�b�D��]Zk @ �BTG(�b����#�%@��.�JP�"t$F~]Zk0@ @ �G�](�b�} �X�"�]4G(�0�@�#nk�������� �P,�0#G��~�^G�^�~��Q �4G �0G(�0�GGG �b#�1�G_����/��/ �#GGG�4GGGb# @0@��/� ���/��/_���/�Gr���/��/GGG4G�GGb#3_����/��/� �#GGG4Gb#GG @0@��/� ���/��/_���/�GN���/��/,��#GGG4Gb#GG��$���/_����/��/ �#GGG�4GGGb# @0@��/� ���/��/_���/�G&���/��/GGG4G�GGb#_����/��/� �#GGG4Gb#GG @0@��/� �_��/,��c�4G�d��/��/��/G�]�]�} �(�0�@�#k��/��/��/�G��/��/#p;GtG��~�^G�{#�G1"��/_G�]�C �#k��/#`[4GtG�^��~G�^ �GGR"��C0b#��/_���G �`"G4GG� b#G�!"k_ӠCG�]�] �0�#��/k��/��/��/,�0�# �P�^��~��1!@B�^ �~(�0� @8�GGG���G��C!ABG�#�#GtG�#�]H GGPb#Q_�=���G�#��#�=7@��#�#�` �\@��C��/�k��/��/��/�G���/��/GG4GD"tGb#)_��/���G���/GG4GD"tGb#_��/���G���/GG4GD"tGb#_��/s���G~���/GG4GD"tGb#_��/g���Gr���/GG4GD"tGb#_��/[���Gf���/GG4GD"tGb#_��/O���GZ���/ �Pb#%BG;_��/��/��/�� �#GD"GTGb#tG!%@�#_��/�� �$@�3���/��/��/ ��#%B @�� �(�%1@��$�GG4G$"GGb#��/_���G%�GG4G$"GG`b#��/_���G�GG4GD"tGb#_��/���G���/GG4Gb#4GB_0�c��C,`HB�CH@D�4G��C<G�]�] �}(�0�8�@�#k��/��/,�0�# �P �^��~��1!@B(�^0�~8�@� @H�GGG���G��C!ABGb# AB�#�#��]_�� �#�4G�=Gb#!1@ 0@�#�#!1 @���#�#G_ ��=G4G@GGG�b#!@ @�# �# �G��/7_��/��/��/���#G�$"G4GGb#G�#m_G��G4Gb#_ � �=`D"GGb#4GtG!@ @�#�#�!_G%���#hD" �4Gb#tG�# BG���/_��/��/��/�� �#�pD"G4Gb#tG!0@G�#��/_��/��/��/��GG4Gb#_ ��=GxD"Gb#4GtG!@ @�#�#���/_��/��/��/���#GD"G4Gb#tG�#_GG��4Gb#��/_ ��=�$"4G�GGGb#!@�%@�#G��/_����/��/ �#�4G�$"Gb#GG%%@ @�%1@���%%@G_ �#��G!%@ 0@�#�#��#���/�G ���/��/(�G!1 @G�#�#TGb#��$_��GTG(�G@b#��%_��/��/���G���/GG4Gb#3_�4GG �](�]0�}8�@�H�P�#k��/�0#(�^��~0�^8�~@�H�P�GGG�>x{#_0��=GtG"G(b#�#��@.H�1"R�@J��@>� �,���TG�� B��/"�����[_�����8�D�X�D���@��,�� B ���ØGG4GXb#GG0�5"/_��GG4Gb#_ �,�4GtGG(b#���� @���#���=�� GG)_�=���#}���/�#�]�@�¦�C�#u�\@(�C��/�k��/��/��/ �GGD"hb#tG B4G�_��/��/_�� ��=GGb#4G!@�#_U���/GG4Gb#_�GD"Ghb#tGtG�_��/��/C���#GD"GtGb#tG�#f_9���/GG4Gb#_2���/��/GGG$"tG(b#_G'��G4Gb#o_"���/��/GGG$"tG(b#_G��G4Gb#__���/��/GGTGp$"tG(b#_G��G4Gb#O_��/��/��/ �Gb#�/_ �,�GtG�G(b#��� @��/-���#���=�G G_�=���#���/�#�]�8�DGGhb#tG�C�#�� �D" BTG���/o_��/��/��/ �� ��=!@�#GG4Gb#_ �0�GtG�=G(b#!@�#�� .%@� J"4@1""��,�C��R 2@� �c�C�}��TGO_�� ��= @�#�y��#�]G4GGb#�C�#_ � @�l���/��/��/,�%@G4G� @tG �$@��hb# @X�����G8 G_��/��/���J���/� �#4GGGXb#G 0B�G�$"�_���9� ��=4GGb#0B�G_,���$"tG �#G���(b#20@!2@TG �B"���#��#G��/_������8�DG�D"�TGtGhb#� �� �c%pBG_��/��/�� �$@�GG4Gb#w_ � �$@�GXb#@_��4G�G(�]0�]8�}@�H�P�`�#��/k��/��/��/G/{#tG4GTG4GaU��/G4G@0{#��/U������������#��~�^�^�~ �(�0�GGG� ���/��/��/0`@G��$b#�DG �@Ӡ9a@� G�]�]�} �(�0�@�#k��/# �^��~(�^0�~8�GG�G �^�~� ��,�H��/�� �G�"4Gxb#E_GG4Ghb#��/W_GGG4GPb# _� �]Gb#�}�@GG4G(b#�_�G �](�]0�}8�@�#k��/ 0#4G�^��~G �^(�~0�8�@�GGG�> Gb# �^�~�>_GGG��/��/��/���"�! G�4Gb#_�}0@ �G�G4G���%pF�b#�e��/��G��/��/c_G���/GQ�B�TGPb#z_B�@0@��  G�G�] �](�}0�8�@�P�#k��/��/��/ 0G'� 3 B  qB`BF���/��/��/���ТAB �" � SB � �0 � �0 �p � � QB���/��0@B�" QB �?k��/ 0#4G��~�^�^�~ �GH� GG P`Gb#�@�"_ ? �� #:�G�0�@4Gb#P�@_ #G4G b#0 @P�?@_ CG_" "�@ #��q�PFF��ӢF��/�� W�B�� #0 C C c�SY�:C��Y���/��/��/�sS�`B��S 0�B B�1"��/ â"��/� G�]�]�} �0�#k��/��/��/ P2�@#��~�^�^�~ �(�0�޴8�GGGGGG��/��/��/ c0BGTG8b�fB��s������/��/SZk�� #0@@ @?�GG�]�]�} �(�0�ݤ8�@�#k��/��/�Gk��/��/ cC�@�� P2�@#��~�^�^�~ �(�0�޴8�GGGGGG��/��/��/ cPBGTGXb�fB��s������/��/gSZk�� #0@@ @?�GG�]�]�} �(�0�ݤ8�@�#k��/��/�Gk��/��/ E�@G���%� �@�G��/��/ P�G�@ G��/��/��/��a�{�`�{;F �`�0�@ @�! �G��/k��/��/��/@�@���k��/ P2�@#��~�^�^�~ �(�0�޴8�GGGGGG��/��/��/ cBGTGb�fB��s�PF�����/SZk�� #0@@ @?�GG�]�]�} �(�0�ݤ8�@�#k��/��/�Gk��/��/ cC�@�� P2�@#��~�^�^�~ �(�0�޴8�GGGGGG��/��/��/ cBGTGb�fB��s�PF�����/RZk�� #0@@ @?�GG�]�]�} �(�0�ݤ8�@�#k��/��/�Gk��/��/ E�@G���%� �@�G��/��/ P�G�@ G��/��/��/��a�{P`F��/�`�{;F��/�`�0�@ @�! �Gk��/@�@���k��/#��TG��~�^[{�GRZkG�]��@ �#��/k��/��/��/ 0G� #��~�^�^�~ �(�0�޴8�GGG*� GG��/��/��/ CG4GHb#�EB��Ҡ����/_$�G4GHb#��摿_�G4GHb#��/����/��/��/_GG4GHb#0@@��/_ à @��/G 4GHb#v_ G�]�]�} �(�0�ݤ8�@�#k��/��/C��#G �;"��~�^(�[�^�~ �(�GGG�"0�bnZk���4G&�GG4Gb#_GG4Gb#f_G��/8�BGTG�#"@�bRZk��/��/����c�GG4Gb#7_�4G���/GG4Gb#/_�GG�]�]�} �(�0�#k��/��/�Gk��/��/�1�+F FBk��������G4G� {#��/��/��/��/G4G{#��/k��/��/��/#4G�1"� �^�Т��~(�^0�~8�@�H�޴P�GGD�vGGGG�>��[��/�@Zk���="tG�DH�`�[�@Zk�4G��/ ���#X�a� �[�@ZkH����G����#�G�}"GGT�a��[�@ZkG�]GGtGb#F@�c4GX�c��[�@Zk�G �](�]0�}8�@�H�ݤP�`�#k��/��/�p#4Gp�^��~x�^�~���޴���>�^�~���޵��GG �s�[G!4�!L�!T�!\�q!d�Q! !G 1!D�  GG�@Zk��"�="�]"GG$�`�[��/�@Zk��$"�D"d"�"" �" "�#R� �(�ݰ0�8�@�ݲH�P�X�}`�]h�=��/��/��/��0Q�BB' \BH�C�k��/��/G�=GtG�b# _GG4Gb#�G_G�TGh�=Xb#_G �tG�=`�]b#_GG4Gb# �3_G �TGX�=Xb#_�G�tG�=P�]b#_GG4Gb#�_G�TG>�H�=Xb#_�G$�tG�=@�]b#_GG4Gb#$� _G$�TG8�=Xb#_�G�tG�=0�]b#_GG4Gb#�_G�GTGXb#_�G�4Gb#gA@Gt�GTGb#1_t����/��/��/G�4Gb#WA@ӄ����/G�4Gb#OA@l����/G�4Gb#GA@p����/G�=GtG0�b#}_0����/��/��/G�=GtGP�b#q_P����/��/��/G�=GtGX�b#e_X�{���/��/��/G�=GtG`�b#Y_`�o���/��/��/G�=GtGh�b#M_h�c���/��/��/GH�tG�=(�]b#A_H�W���/��/��/G�4Gb#@@�=GG4Gb#�"��/@@�=GG4Gb#�"��/@@x�İ|�䰀�;���/��/��/�] ��?"@b#;@2���/��/�=Gb#�@+���/��/��/�=Gpb#P�@#���/��/��/�=Gb#�@���/��/��/�G4Gb#�|�ĠP�@��/_ӈ�G@b#�]|�$@�ÐG4Gb#(�"_��/��/G�4Ghb#3_�à�"�="�]"GG$�f�[�@Zk���/�c(�cG4G�[�@ZkGp�]x�]�}���ݤ���=�]�}���ݥ���#k��/��/#4G�^G��~�^ �~(�0�8�޴@�H�P�>X�^`�~h�GGG�>b#B_G�"4G`b#G��/?@W��G��/G4G`b#�"?@GG0�@4Gpb#_ӨB�]GGG4GoZk�G�"`b#�B�@���/X�K��??@GG�"4G`b#?@GG4G�"`b#?@G)1�@�"4G`b#?@G G4G�"`b#?@G+q@GGGGGb#_GG�� �Hb#GGtG_G0@G4G @�H�( �hb#_��/��/��/G�]�] �}(�0�8�ݤ@�H�P�=X�]`�}h�p�#��/k��/��/��/#4G�^G��~�^ �~(�0�8�޴@�H�GGG�"�>�b#I?@G0��G��/��/G4G�b#�"0@>?@GG0�@4Gb#��/_HB�]GGGtG��/SoZk�GGGPb#_"�B�@���/X�K��?v_G @G4Gb#��/C_��/��/��/G�]�] �}(�0�8�ݤ@�H�P�#��/k��/��/��/#4G�^G��~ �^(�~0�8�@�GGG�G�"b#�^>@��`��/��/��/G0@4G�"b#� >@ 1�@ @G�] �](�}0�8�@�P�#��/k��/��/��/�P�0B����k��/��/��/�ptG�s��k��/��/��/�4G �pG��k��/��/�4G �pG��k��/��/�G$�pGGGG��k��/��/��/�4G(�pG��k��/��/�4GD�pG��k��/��/�tGH�pGGG���/�k��/��/��/�GL�pGGGG��k��/��/��/�GP�pGGGG��k��/��/��/�GT�pGGGGG��k��/��/�4GX�pG��k��/��/�TGd�pGG��k��/�G`�pGGGG��k��/��/��/�4Gx�pG��k��/��/�G|�pGGGG��k��/��/��/�G�pGGGG��k��/��/��/�4G�pG��k��/��/�tG�pGGG���/�k��/��/��/�#G�pGGGGG �� �#�k��/��/��/p#?F4G0� �^��~(�^0�~8�@�H�޴P�X�`�>h�^p�~x��GF�rB� ��/��/���GGGGD�u��[�@Zk�=DG�="?D0D�"�C�=2_J�]�cL�s�]"�[�e�@Zk�4G ���#X�a ��[��/�@ZkH�0� v� �B�4G(�bkZkGG N�!4G0�A�b#��/_���.8�BG G4GP��J���>�]GmZkG�b#ٺ_��).�)JQ�)J�D��/����)>Q���/�'A�"�="�]"��.G0@U�J��>�âP�v�e�[�@Zk���/;����/��/��/ �B�4G(�bIkZk �@ GGGP`ATG`b# (@� ��A!0�A_ G8�B�]G�'A �'A4GmZkG�b#_��L-��+AG�]"�LI D�@���.P��J���>�#0`A�"P�q�e�="�[��/�@Zk�� �'A�� ,@� H�� <�'A��.P�J��> &�GG �](�]0�}8�@�H�ݤP�X�`�=h�]p�}x���#k��������k��/��/��/#4G�^G��~�^ �~(�GG�Gb#_�=G"G4Gb# ���"��/_��G�]�] �}(�0�#k��/��/��/�C#4G��^ �G��~�^ �GG ���@b#��/3_G �4G@b#._�] �G�]�] �0�#k��/��/5BBBUB�`FB�D�D@F�0Dk��/��#��~�^�^�~ �(�0�޴8�@�H�>P�^X�~`�h���@/Z�@KG �[GGGGGGG��@?��p(�"��.�J ����/��/��/��*��i � ��C��.�JR�SB��RAF �@���/��8�B4G@�b�� ,� HLZk��/����#4G�! ��#��!.�!J��/?��C��r.�rJ G�@ G �(�b��/��/��/����ˢ �����.�JU�B��F� ���/��8�B@�b��8/�8K4GLZk��/u����%GTGb#!E�!@0 @����%����/_��G����4.�"�4JF �` 0@A��/��/��C����.�J?W���/�@��4/GG�4Kn_����Ģ�B 0 A��/jJX�K G G��?��#�9#�C��#��.�J?>���$  ���"��k�#��Q.�QJ5� ��t.�tJXeF#�`;���.�JBD���/��JK�B��k aE�` ���/�4/8�B�"@�b�4K4GeLZk��/ ����GG�E-� �EI0_�� ���/������h- �A 0 A��.�hIu IT�JF��>��â�"��ò � ���@��/�4GX�K��?���/��/�GG�]�]�} �(�0�ݤ8�@�H�=P�]X�}`�h�p�#k��/��/��/��p#��~�^�^�~qF �(�0�޴8�GGGGG� ��/��/��/�@�R��s��z����P;���$� �D�Q��#5���/��/G�`��/��/��FDG�`G�@��D��/ ��G��/��/���� $D��/�@G?��/�G �`b#4G*_��/��/ �������c�%�#����������/��&��1��&��/� ��c�ðGG�]Gb#�]�} �4G(�0�ݤ8�@�#��/��/��/#TG8�;"��~�^(�[�^�~ �GGG0�brKZk��/��/�� ���/(�BGTGH�""0�bfKZk��/��/�� ���/(�BGTG@�""0�bZKZk��/��/�� ���/�GG�]�]�} �0�#��/k��/��/��/`#�^��~ �^(�~0�8�@�޴H�P�X�>`�^h�~p�x��޵��G��� ��p�ҠGGFG�>�%!��/��/GG�"b#GGE_G���TGb#����%��/��/_�����0.�P"Q2J'J(F?�.�"�J@��/H��G��/��GGC!��/��/��/GC���4GXb#�!��/_G��/��/��GGTGb#b_GGG�4Gb#��/;_��T�B4Gb�" GhZk�8�DGG8`E���F_��/��/ ���4J0JJF�F��9��/GG4Gb#_��/��/��/3�`Gb#8_/����%0B GG8b""��/� ��/��/��/ygZk����Ţb#�"&_0B G ��G8b@""mgZk��G�"��G GHb#_GG4G b#_ G���"Hb#GG_���è cGGb#�`@GG@��l-b#�lI�` #/ C/ . C.#KZCK:GGJRCJtGFG=_��/����m� �dGGG0b#TG G��/_�!��/��/��,,�,H� ��/��,.0�B4G8�b�,JJZk@�@�����,,�!�,H?��,.�,JG,� ��/��/��/��l.0�B4G 0A8�b�lJJZk@�@GTG0b#������.!E�!@����.0 @�� K_�� �� ��,.�,J�!�B��.u/JT�JF��>��ˢ�B��/X�K��?��,/�,KG?�Gb#��+@G��+@��+��-�IC���/��/ G^� ����/�KX�C��/�BG4GbgZk 1�@��A�� -� I@�@��B�� 4GbgZk @��/?����+��1-�1I?Gt�TGpb#F_� GGGb#TG X E� � ��/W_!���/��/GGTG""b#N_G�/GTGb#��/G_GG�""TGb#A_G�/GTGb#;_GG�""TGb#5_G GG4Gb#3_V��/��/?!GH�$�GH�G�"Hb#������/_Ӧ���/G "G�e"Gb#�B"��/_G�4Gb#_�G?��G=���/��/�ݡ8���/��/��0B4G""8b.��"��/MfZk*����Π�B�"Gb��fEgZk�BG�"4GGb��/=gZkG��AGTGb#_ӠBGG��"TGbIZk��"GHb#Gt_GG�"Hb#o_G���/��Ρ�G�] �](�}0�8�@�ݤH�P�X�=`�]h�}p�x��ݥ���#k��/��/`# �0 �^��~(�^0�~8�@��Q"H�޴P�X�`�>h�^p�~x���޵��GG�G��0G`{#_���# �G� G G G G G��A�!�]?D��/�ݠ�G@4J8�DJ��/� GG G G GFGG �_A_Et��7JJFTFGm��@ E/ e/ %# e. . E"YK[yKtG[GGrJPJ@b#�G"GpF_GW��$�GTGb# 0A4G��/S_$�N���/FFJ���/� 0AF���/8FG �,1A@���FFT�FG:���/G��4Gb#_��/��/��/0���"b#G@���"b#��@ӯC%�Gpb#)@ӯ@ ���/��/��/ . E. % %# . /G@b#JRAJJXKFGtGFc_G ��$�GTGb# 0A4G_$�� 0`A ���ǠGG4Gb#��/���/��/��/?_T�D!�G���Ǡ�ݰ���'G��(G4Gb#_�XE �D��/���Ǡ�ݰ����� GG4Gb#_����/��/��/EG����/C�ݠ LE �@H����/ ? ���/E�`H�0�4G�]Gb#����RH�R��/�@>_�G��/G �](�]0�}8�@�H�ݤP�X�`�=h�]p�}x���ݥ���#k��/G�4Gb#_ �&��G@BTG�"""GHbHZk@BGTGP""Hb��""��/��/ HZk��`"" �@BGX!""TGHbHZkDG0�BGTG8�b� 7eZk���=�)G G�] ?E��/�GG""b#TGD$E���/��/��/�G]_"�GGTG""b#0AU_��G=AP�""�GTGb#K_ GG�*"TGGb#0AC_���/��/GGTG�*"b#:_��J G_G�4Gb#_GGk���/��/��/G��4G4Gb#n_G""O��GTGb#_GG�#"TGb#_GGTGp�""b#_��cGGTGb#��c�#"C�`�DD#�_��/��/��cCC�#!�DGGG��CTGb#_ _E5EA EE.A0AOEGC��/ �`G�G/��R���/��/GTGb#�#"_GG""TGb#_��cG���/GGTG�#"b#_��cG���/��/�G1���/GG4Gb#G_G�G'���/��/��/ G G��/��/�͡4G� "pb#EE��@Ӏ_EGb#`�"���J _EGAEA *E � ��/{_G G�"��Gb#4_ G���G��/��/��/ GGR�GG��/��/��/Bb�"""GTGcZkG;��G""b# 4Gz_GGTG �""b#��/s_��G��/4���/��/��/�% ?E%E��/�0`@���/�`5%A#i@GGTG�%"b#[_��G��/���/��/GGTG�%"b#N_GGTG""b#��/G_G� �GGGTGb#>_G��GG4Gb#_G��/ot% G<n!�G��/��/Bb� " �""*v�IxcZk�� �m+I jE �m�ͱ���GhG[GGG �;"}��/ecZk]��G�="}_cZk] ��G="}YcZk@G��/k��/��/��/�4GGk��/G �[GG0�;"(�}GcZkG@k��/��/#4G��~�^ �[(�{�^�~ �GGGG4dZk�`@01�@\����/��/��/!.61�B�G! 51�BGB�v@�!JQ�"B1��/L� ��.T�J��><�2� ��/��/��X/x""x#6B�G��XK#KG.�@�8.0B�X#�3J+F(� �.�J F0BB�8"��/ ���8/�;K0B+G� �X.�ZJKF0B�@�x.�qJ+F0B��/� 0B��/ ���/��/��/��.61B�J# F��0B��/G0F��/�?�u@��a.01BS�aJ��a>��/G�]�]�} �0�#��/k��/��/��/?9#��/��1,�G�1H�1H#�@��/��/��/+@�@�!B��.�J�J�@S�pB s�`�0 @� B��[.�[J�@沕KB�@�2B��t/�tK�tK � T�B ��0@B� B��3,�3H?��/��/<���� B��.�JG3�@G��/��a/tAJ0`B��  D��D[�aK�! tG�a?��.�J�� vJ ���a/0`B[�aK�! vGa?���.��J����.vJU�J0`B�� �! F>��`/�`K�� �@��.uAJ0`BT�J�! F>��.�J��/_�3B��.T�J��>k��������#��~�^�^�~ �(�0�޴8�@�G�GG ��GGGGG4GtGGb#_3���GHE"G4Gb#tG�_G ���#GG4GtGb#G�#_Q��GGXE"�4GtGb#_G ���#GG4GtGb#G�#_I��GGhE"�4GtGb#_��/K��GGxE"�ð�ð4GtGb#_ ���GGG4GtGb#G�㰫_F��GE"G�ð4GtGb#_���GE"G4Gb#tG���/_��/��/��/;�� ��0@�ð @F��GG4GPE"tGb#G��/;_�ð�GGG4G`E"tGb#G��//_�ð�Gx�GGpE"b#4GtG�#_�ðG�Gk��/��/��/GG4GE"tGb#G��/_�ð�G\�GGE"b#4GtG�_�ðG�GO��/��/��/�G�4G�]�]�} �(�0�ݤ8�@�P�#k��/��/��/ �P,�0#tG��~�^G�^�~��Q �4G �0G(�0�GGG�1 �p�q�Gb#_G��GG4GtGGb#��/_��/��/��/���# � 0@0 @���#� �CG0@G�GtGGb# @�@�4G_����/�# �G4GGb#tGG 0@0 @���#G_�,�#��G�GG4GtGGb#_��/����/��/��/�# �G4GGb#tGG 0@0 @]���#G_GGG4GtGGb#_��/����/��/��/�# �G4GGb#tGG 0@0 @A���#G_�,�#GG4GtGb#G�G_����/�# �G4GGb#tGG 0@0 @%���#G_GGG4GtGGb#_��/����/��/��/�# �G4GGb#tGG 0@0 @ ���#G_��/��/�,�#��G�]�]�4G�} �(�0�@�#k��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/,�0��1 0Bk��/��/��/#�0tGtG�^��~�^ �~(�0�8�޴@�GGG0GPb#�0� Gj_��/��/���G%���/�#@�@�B�#��\@�C�k��/��/�G���/��/G_��/��/���G ���/GG4Gb#_��/��/��/�4G��/��/��/G�]�] �}(�0�8�ݤ@�P�#k��/��/G_��/��/���G��/GG4Gb#_� �#D"GGb#TGtG! @��=_�� �#�!0@�#��/�# �CG4Gb#�#4QB_G��G��/_��/��/G2TBGtG�CtGD"b#_Ӷ��/��/Gn_��/��/���G��/GGtGD"tGb#m_ӤG^_��/��/���G��/GG4GD"tGb#]_ӔGN_��/��/���G��/GGtGD"tGb#M_ӄG._��/��/���G��/GG4Gb#__� �#$"GGPb#GtG�% @��/_�� �#!%@�#f��/��/�#�@�#��/_?@��b\@��C�k��/ �%B�TG_�� �%B�M��/GG4Gb#/_�GD"Gb#TGtG�z_�� �$@�9��/�#G�#_�� �C%EB�/��/��/��/GG4Gb#_&��/��/ �G4Gb#2@_GG��_��/%@G�_�����/GGtGD"tGb#_G_�� �$@���/GG4Gb#_��/��/G_�� �C%EB���/GG4GD"tGb#_G_��/��/���G��/GG4Gb#_� �$"GGPb#tGtG�%@��/_�� �#!%@�#��/��/�#8�DX�D�x�D�#.� �`��/Gy_��/�� �%B���/��/��/GG4Gb#_Ӯ��/��/ �G4Gb#2@b_GG��_ӡ��/G%@GD"�tGtGb#__Ӗ��/��/ �G4Gb#2@J_GG��r_Ӊ��/G%@G�D"�tGtGb#G_~��/��/G6_��/��/���Gy��/GG4Gb#W_� �D"GGb#TGtG&@���/_�� �%@�^��/��/�#G�#_�� �C&FB�ðS��/��/��/GG4Gb#3_�GD"Gb#TGtG�~_�� �%@�=��/�# �àG4Gb#�#2@_G��G��/_.��/��/G&@G D"�ðtGtGb#_"��/��/GGtG(D"tGb#_G_��/��/���G��/GGTG0D"tGb#_ �G4Gb#&@_GG��_��/%@G�_���G��/GGtG8D"tGb#_G_��/��/���G��/GG4G$"tGG`b#��/O_���G>�GG4Gb#_��/��/Gz_��/��/���G��/GGtG@D"tGb#_�G��/��/��/Gf_��/��/���G��/GGtGHD"tGb#u_�G��/��/��/ �GG$"4Gb#tGG%@_��/��/���G��/GB_��/��/���G��/ �àGG4Gb#%@���/o_�G��/�0#�^��~�^ �~(�0�8�޴@�GGG`{#�>w_�Gb# �E_ ��=GPb#��#*_��/��/'� �#,�GGb#tG$"�#�� 0@��/"�@���#�#GtG��/_G��/��/���G�8�D4GtG`$"b#G� ��G_��G�GG4G`b#_4G�Gx$"�` �#,�tGGb#�#�� 0@H�@���#�#GGf_G8�D=���X�DG�x�D4G`b#�'� �`2��G_� �#D"GGb#4GtG! @��=C_�� �#�!0@�#���/�CGG4G`b#�C_�GG4G`b#_���/��/G_��/��/��G���/GG4G`b#_4G�D"G� �#G4Gb#tG�#�#_��/��/�� ���� �#4GGGb#G%0B�Gx$"��/7_��/��/��/�� �#�# � �#GG4G`b#%%B���/_,��#p$"G �GtGb#��0@ @G %@� �à�����/_���ð��C�@�b�CX��\@h�C�k��/��/�ð���/��/GF_��/��/���ðz���/ �âGG4Gb#tG%BD"_�� �#GD"G4Gb#tG!%@�#��/_���ða�GG4G`b#O_�ðZ���/GG4GD"tG@b#%_�ðP���/��/��/GG4G`b#;_�ðF���/GGTGD"tGb#_��/���ð:���/GG4G`b#'_�ð2���/ �GGD"b#4GtG��n_��/��/ ���GD"G4G@b#tG�_���/ �àGG�D"b#4GtG�ðW_��/��/��/�� �� ��#GGD"@b#4GtG�#_ �GGGb#GtG�F_��/��/�� ��àGG`b#4G @��%1@��/�����/_ �àG`$"G4Gb#tGG4G�ð��/W_����/��/GG4G`$"tGGb#%1@K_��/��/��/GGD"!��à �#4GtGb#%&@�ð_�� �àGD"G4Gb#tG%@���/_��/��/��/ ���àGD"G4G@b#tG�ðv_�����/��/��/GGG$"�tGb#��/_��/��/��//��G�@�?\@�BT�C��/�k��/��/��/GG4G�D"tG@b#M_GG4GD"tG@b#E_GG4GD"tG@b#=_�à � @0@���ð��/�G�4G�]�] �}(�0�8�ݤ@�P�#��/k��/��/��/G #{#tGGtGGE?��/G4G#{#��/?�������������0#�^��~�^ �~(�0�8�޴@�H�P�GGG ��>��/��/��/�GG4G�b#GtG�;_ ���#G�D"GTGb#tG�#_ �� @0@�����/��G��/GG��/��/GGG�$"4GGGb#_)���G�D"G4G�b#tG� _G ���#�$"G4GGb#G�#_��GG �D"�4GtG�b#_G ����$"G4GGb#G�_�� �0@0@�㰨 @�����/GG4G�D"tGb#G��/_�GGG4G(�D"tGb#G��/_�G�G�4G�]�] �}(�0�8�ݤ@�H�P�`�#k��/��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/�0 �P#tG�^��~ �^(�~0�8� QBG@�GG�0G@Gb#�8 G��/_��/��/��/ ���#X�D8�DCGGb#�#_ӠCGG$"��DG�� ��@TG_G ��G4GPb#Q_�GG4GPb#K_ ��=�$"GGb#GtG!@ @�#�# �_X�D0���#8�DCGGb#�#_ӠCG$"G��DG��/ ����/��/��/��@TG��/k_��/��/��/���#�4GGPb#!q @ B �� �# 1@G� �#_�GG4GPb# _ � �=�$"GGb#GtG!@ @�#�#�Y_Ӵ�@���cGG��ce_`�C��D��\\B��C�k��/GG4GPb#_� �# D"GGb#TGtG! @��=/_�� �#�!0@�#���/�C �cG4GGb#tG rB�C(D"���/_�� ��=!@�#���/ �C�}G3SB�c*_���/��2UB�C�GG4GPb#_ӂ���/��/ �GG0D"b#4GtG @ �_��/��/s�� � �=GGPb#4G!@�#_i���/GG4GPb#_� �#8D"GGb#TGtG�% @��/_��/��/��/�� �#G@D"GTGb#tG!%@�#_��/�� �$@�C���/��/��/��G_�� �C%EB�7���/��/��/GG4GPb#[_.���/��/GG4GPb#S_� �H$"GGb#TGtG�%@��/_G�� �#!%@�#���/�#G�#_�� �c%eB� ���/��/��/G8DG4G�Pb#-_��/ ���4G$@�G�] �](�}0�8�@�P�#k��/��/�0#�^��~ �^(�~0�8�GGG{#�>_ �#,�4GG�Ghb#��� G� �cG�`G%_��/����/��/��/�# �G4GGhb#GG 0@0 @_���#G_GGG4GGGHb#I_��/����/��/��/�# �G4GGHb#GG 0@0 @C���#G6_�,�#tG��y�B����AGGG4GGGhb#_����/�# �G4GGhb#GG 0@0 @#���#G_GGG4GGGHb# _��/����/��/��/�# �G4GGHb#GG 0@0 @���#G_�,�#� �#�]Gb#�#�C_����/���/��/��/���/��/��/GGtG�$"�GHb#��/_>����@�?\@�B�C��/�k��/��/��/GG4GD"tGb#=_GG4GD"tGb#5_GG4GD"tGb#-_GG4GD"tGb#%_GG4GD"tGb#_Ӽ� �# @�0�@?��/��/��/�]�4G�CG�] �](�}0�8�@�#k��/GP!{#tGGTGG)<��/G4G!{#��/<������������G�4G�;P"4GGG��/��բ�F���wB0BB�"0 B�"�R"r��/k��/��/��/�#$�"H�^��~P�^X�~`�h�2Cp�G��GG�޲�p{# � �R�TBGR �2�_�C4G�G�LC F?�@1@C :B BSF��//�@��/��/��/�����@�"Ԣ @t4FU�BFFV�BW�BG֢[�xC?D{A�8@F!P�B�B�@�B�B�@�yC�@�9@�@�B�@�0@_ @ ���/��Ԣ�0�@�" @FV�B֢�B�@X�B?#<De#�`��[`�b��/ YZk<�"8�B(�B0�b@X X��/WZk[ � ����/��/��/0�"E@��h�b�$2CG� �DSNDJ CD>���/�GG�]"8b#tG11B��/O_��'? �&H�BP�bs"?#]@ @$"���_�?$P! � �`[��/[Zk8�"(�B0�bXnWZk<�"��/@X[(�(�=���/��/��/"Q B@��"E�@E�@E�@0�0�][8�=8�}[jKY[@�]@��GH�]P�]X�}`�h�p��#k����#4G�^G��~�^ �~(�GG�Gb#§_GG4G"xb#��/[_ӨP�B�¦x�p�B����C ��ò�B(�¦0�H� ��C�$�C(� �,�ò0�BB8�¦@�h4�C<��8�@�CD�H�òP¦pB��B�L�XX�P�CT�\�C`�d�òh�`Bx¦�B�l�Ct��Bp�x�C|��ò¦��B����C����C�ò�xG�]�] �}(�0�#k��/��/��/�0#4G��~�^G�^�~ �GGG��b#_G�4Gb#��/_�G�]�]�} �0�#k��/��/��/#4G�^G��~��^ �&" �~(�GG �>b#��//_B �?&G �&G(�1"0�¦P�b4G��/wXZk�=H�B8�"Pb# �� �U@�"G �C$ղ5u5_ӴG�G�]�] �}(�0�#��/k��/��/��/(�TG8�;"0�{k��/��/��/�TG �;"{k��/��/��/#TG �;"�^��~[�^ �GG��Cb\Zk�C �TG��(G�=b#8"��/_P �G4GXb�]�] �0�#q>k��/#TGH�^(�[��~P�^X�~`�h�p�GG@�GG�>"0�b*rZk�=�&GGPb#�"TGR H�0D�"�! �D��/����/��/��/3_@�Gb#g_8�B � $GG4G@�byZk8B �$$G4G@b��/iWZkG@4Gxb#_BGGGTGbVZkBG �""TGbyZk�4G �$$Gb#_BG""TGbm\Zk� �$$GG��TGb#"'_GG4G@b# _ �&B?&Bhb#b1" @ �&Bhb#0� @BGGTGb4GVZkBGTG""byZkBG �""TGbyZk �$Gb#`P_BGTG""b �d$1\Zk�GGTG��b#X"��/_GG4G@b# �d ʹ_ �&Bhb#0 @GG4G4 �b#D__�G��/��/�@w# ^"8�c %@"F�c�&�$�?'4""BGc 9#F��/��/��/CU#"@�" WC CzG�c? C����/0�C���" C�$&G1"6BF��/��/BBq""@�1" vB YBD�c CB�`��/0@B���1" CBHB �&4GPbG��/kZk����/��/ �&0@Ghb#BA @ HB �&4GPbG��/kZk���/��/ �&0@Ghb#B- @Ӡ @GH�]�GP�]X�}`�h�p��#k��/#0�X@F8@F8�^��~@�^H�~P�X�`�޴h�GGGGP�GuFF0�~b#%_0�} � $G4GՁ �$G�[��/�@ZkBG"G ��G�%b#R"��/k_���/��/GG4Gb# �$_BG4Gb��/VZkG�@4G0b#:_Ӏ�BGGGTG�b �e$tUZk`�BGTGp�""h�b��/xZk0�}G4G�[�@ZkBG"GG���%b#H�R"7_ӟ���/��/Bb �&GՐGtGB$bb ��/iZk �e&�C�"Gs�[4GG�@ZkG�4Gb#(@ӸB�DG �e&" ���%sG0b#R"_�H�3�r���/ �e&�CG�"s�[4GG �$�@ZkG�4Gb#y(@�CdG�"4GG�[��/�@ZkG�4Gb#j(@ՄB �&"GG0b#�DR"��/���%tՔ_�H���/@��B �&4GbjZk��G �e ��/��/b �e&G �"s4GG0@�c �[�@ZkG �4Gb#��/;(@"��/�B �&�$4Gb4e G jZk�b �e&G(�"s4GG0@�c �[�@ZkG(�4Gb#��/(@Ӱ @��/G8�]�G@�]H�}P�X�`�ݤh�p�#��/k��/��/��/�C#4G��^��H�[��~�^ �~(�0�G �^D��GGP�b{Zk �G��TG��#b#(�" _� �=4GG`b#����!*� ��_X�BGG4G`�bUZk �@x�BGTG��@�b���.P��J���>��DZkG ���Gb#��#tG_h�BG?"TGp�b��/JZk �GG4G b#����/__G��4G b#Z_��G�]�] �}(�0�@�#k��/# �&��~�^4"T"�^�~ �(�0�޴8�@�GGGՔG"8{#_ �$@BGG�tGHb � U�@C�D ����#hZk��/0@��&Gb#B@ � @B�$G�#GtGHbG4 hZk 0@��&Gb#Bv@Ӡ @�  �$$""D"8b#]_ӴG4GXb#��/����/��/��/_GG�]GXb#�]4G�} �(�0�ݤ8�@�P�#��/��/��/��/#4G��~�^[�^�~ �GG �&Gb={Zk(�B �&0�b4G7CZkG �&b#4Gѣ_GGb#G�]�]4G�} �0�#ƣ��/��/(0#GtG��~�^[�^�~ �GGG� �&bfhZk���/B �&4G�bviZk(G�G�]�]�} �0�#k��/#GGTG��~�^ �1&[1�^�GGb[ZkG4G�� �"b#����/��/��/_G�]�]�G� �#��/k��/��/��/# �s&tG�^��~�^ �~(�0�GGGՓG�>[b#G$@GGGtGb#B$@�B�G4GGGbNUZkG�8�DG��b#TG"ɲ_G�]�]�G �}(�0�@�#��/k��/��/��/#G �&G��~�^tG[�G(1{gZkG�]��G �#��/k��/��/��/# �s&TG�^��~ �^(�~0�8�GGsG �>�h;b#�^G��/%@�=GGTGh"b#������/��/��/%@GG0�@4Gb#Ţ_ �=�=G4GBbGG����G~Zk� ���G�] �](�}0�8��G@�#k��/�Gk��/��/#4G�^[��C �&��~�G{hZk�=$G�]��G �#k��/��/��/����1 B��/k��/��/��/# �0&4G^��~G^~ (0޴8@HGGG@b#";_ �$ �#$G�L9!4Gb#`"�D��/��_ �$ �#$G�\9!4Gb#"�D��_G �$ �&G `9GG �b�b#GF"@ �#$Ձ!3� ��/��/ �& �&$ctG`9t0@�B�[@��P��G1SBG�@ZkG �#&GTG1Pb#��/#%@ �#$GG4GatG�[�@Zk �C&G �$GRPb#@GGGPb#@Ӭ砧 @��/G �&`94Gb#Q_G �$ �&G`9L9TGtG\9峸( b#1@G �&4GH b#@B �&GG$#tGbfZkG �&GGtG( b#@ ���/G �c&�?"�"4GsG b#C@B �c&G�"G4GsGb TZkG�8�D4Gb#��"��/��/_&@G �&4GX b#3@0B �&4G8bgZkB �&GTGtGb��/fZkB �#&GTG1b��/XZkG�� 4G��b#"__G]]�G} (0ݤ8@HP#k��/��/ �0&#TG1�^��~G�^ �GG(� ` {#�?&"@ �"$$4G� �&p�[�@Zk�]G�]��@@�] �0�#k��/#�^��~�^ �~(�0�8�GGGG��p.�pJS�rB �� �3BG4Gb/RZk �D&G�CtGղR�b#G'#@ �$G�=4G`GGG�[�@ZkCGGb#@ �D&GGb#R@Ӭc �$�G0`@dG�]�] �}(�0�8�@�#��/k��/��/��/ �&# �&tG\9֢�^��~G�^ �~(�0�8�޴@�H�GGG�>GGՠ �&GTG b# �~��/�9@G �&4G b#@ӀB �&GTGtGbeZkGG4Gb#J_@�@ �%$ ��$d9�`9!��pBP�B��F�����/���'q1BQ�!B��1#F � � ���GrRBR�AB��RCF�@��G4G0b#x"��/_�� �e$B �$`9cGb4Gg@fZkC�@G0b#G�GtG\9`B0@\9少"@G �GtG0b#`B"@ӐB�G4GGGbRZkG�8�DG��0b#TG"]_@�BGGTGH�bWZkG�� 4G��0b#P"O_G�]�]�G �}(�0�8�ݤ@�H�P�#k��/��/��/ �&#GL9td9"�^��~�&�^ �~D"(�0�F8�޴@�GGGG�G�`��/��/B" @�" BV"G�c_v"�`��/0B���"" �'GG0�"tGb#QC_ �&GTGtGp�[�@ZkB �&GGtGb)eZk �$G4Gpb#�`�@P�@-_ �$$`9G�4G(b#_E�@4%� 4e �D&L92`9RGq1B �&TGpb#Q�2B��q�G��/_GGG4GPb#]_ �$$@�@ �d&�&L9! ��$G4GPb#��&d9 0 @�&d9L93��/*��J_@�@ �$$�& ��$d9��/�`9!��/��&q1BQ�!B��10F � �Ơ��/ ���FrRBR�AB��RPF�@�Ơ�G4Gb#"��/_��Ơ �$`9f@D�@�d�$eG�]�] �}(�0��G8�ݤ@�P�#��/k��/��/��/�Gk��/��/�Gk��/��/#�C4G �^��~ �s&G(�^0�~8�@�H�޴P�X�`�GGGՓb#�>�^_�=�@�@4��/���W���/4G��/��/��/@BN� GGGtGHb��/dZkGGx"TGb#y"@GG0�@4Gb#_ӰBG�@G4GGGbGM{Zk��,PbG�"4GGG@�H��<�[�@ZkG�4Gb##@PbGG�"4GGG�[��/�@ZkG�4Gb#"@ �BGGG(�b4G!OZkGGGXb#_��/��/��CG���ǰG �](�]0�}8�@��GH�ݤP�X�`�p�#k��/# �&4G �^��~[(�^0�~8�@�H�޴P�X�`�>h�^p�GGGGGԠbG�^OZk��#,�]G�#HA�%@ �!� �����`BGGtGhbcZkGG"TGb#��/!@G G0�@4Gb#_ Gh� ��/��/��/BG4GGGGb��/zZkxG DG�Gb#>�tG"m_ �IApG�"�� ,4GGG�C@� H�� <�[��/�@ZkG�4Gb#n"@�C�"G4G�[GG�@ZkG�4Gb#a"@BGGGGtGbasZkB��G4Gb#����/��/��/dZk%GGTG"b#� D��!@G G��G4Gxb#_G0 A4Gb#_ GB �$G4GbdZkP9�GGG4G�xb#��/��/˞_�����/��D�}��G �](�]0�}8�@��GH�ݤP�X�`�=h�]p��#k��/��/ �&# �&4GP90�^��~[8�^@�~H�P�X�޴`�GGGՔb��>�C �^��/g�ӢF��/c�(OZkB �#&GG(�tGP91bAcZkGG"TGb#;!@GG0�@4G(b#A_BG�@G4GGGbGzZk��%,(�BGtG0�bA�%H��%<�(�]rZkG ��G4Gb# �c$f_� �]P9����0�èG4G�"GG �c$�C�[�@ZkG�4Gb#!@�CG4G�"�[GG�@ZkG�4Gb#��/!@BGG4G�b dZk� �]P9��İ�����/��/��/�= �����G0�]8�]@�}H��GP�X�ݤ`�p�#k��/# �&tG�^��~ �^(�~0�8�GGGGՔ[�>G �~bGbZkGG"TG8b# @GG"TG��8b# @ �=G4GHb#����_(B��#�C4G�GG0byZk��}�G��dG�] �](�}0�8�@�#k��/��/�Gk��/��/�Gk��/��/�4Gk��/��/�Gk��/��/#4G��~�^x[{�^�GG �&cZk  �B$X9G�G�]�]� �#k��/# �&tG�^��~ �^(�~0�8�@�G �>G �3&GGմ@[GX91Hb�G��/WbZkBG4GbjcZk�GGb#B�@G�GtGb# �B%@GGG8Bb#tG@PB �G4GGGXbvOZkXG�8�DG��b#TG"_ӠBG4Gb��/?cZk �&@BGGT90tGHbX9G� ��/bZkG�=b#B�@@BGGGtGHbbZk� �$�GT9G�] �](�}0�8�@�P�#k��/��/ �&#G@[�^��~�^ �GG{#��@ �B�=GTG(�b��/oUZkG�� 4G�� b#h"_G�]�]�G �0�#��/k��/��/��/�Gk��/��/# �&tG �^��~(�^0�~8�@�H�޴P�GGGGGմ[b�> 3GaZkbG4G�"GG�[�@ZkG�4Gb#��/W @GGG" b#TG��/@�D%����/B�GGGtGb��/aZkbG�"4GGG�[�@ZkG�4Gb#6 @GGG" b#TG@�D��=�����GG"TG b#z@GG4G0b#����/_�ݠBG4GbGG����$MxZkG �](�]�G0�}8�@�H�ݤP�`�#k��/��/P�0B�G����k��/��/��/�Gk��/��/#4G�^G��~ �^(�GG��>�C�^b#@�}G4G�"�G�}�[��/�@ZkG8�DG� G0b#tG"_G�] �](�0�#k��/��/��/#G�^��~4G�"�^ �GGGGG�[�@ZkG�4Gb#��/@G�]�] �0�#k��/#4G�^@[��C �&��~�GH{bZk�=0G�]��G �#k��/��/��/ #4G`�>@ �^��~W�WB(�^0�~�� �!$G@"8�@�H�޴P�GGGG�ѠGb#�~ ���V��!� b_�G �4Gb# 1�@P�@�ћ_BG�=G�MZk�=F�&@��/���>���/`�B4Gb �&aZk@GGtG���� ����#b#�"j_`�=GGtG �Bb# �1&1}@ �`�=tGG �Bb#0@ �1&�D1r@`�}8�B4GG�@�bG �s&s��/MZk@DGG���#GGb#G"?_G �](�]0�}8�@�H�ݤP�`�#k��/#4G�^��~�^ �~(�0�8�޴@�GH�P�G �ѠGGGb#41@ �PB�c_@BG�=G�LZkG �G��/��/ �&0@��( �Bb#_�! @GG4Ghb#_�G�]�] �}(�0�8�ݤ@�H�P�`�#��/k��/��/��/#4G�^��~ �^(�~0�8�@�޴H�GGGG Gb# 1@:�P�@�"_ �BG�=G�GtGnLZk��0Ģ �&0�B8�b51BU�B�L�B�=`ZkH�� GtG���=��Cb#p�"��/_G��/��/@�b �d&G�"s4GG0`@� �[�@ZkG�4Gb#��/@Ӱ e@��/G�] �](�}0�8�@�ݤH�P�#k��/ Т#�G�^��~ �^(�~R�WB0�8���R@�޴H�G�ѠGGGG{#� �^Gm� ���/��/_�à�4GGPb#�@"C_ �@�@���G���Z�H�B �&4GP�b`ZkB �&GG�tGb_Zk�GG�� b#����CtG�"S_G �& �"TGhb#��/@G �& �"TG��hb#@�=��/��/�������/���=���B��G��4Gxb#{_X�B �e&��D�C�4GGs`�bIvZk���GtGGb#�D�"��/����C��/��/_B �&�=GtGbO_Zk�G�] �](�}0�8�@�ݤH�P�#��/k��/��/��/#4G�^G��~�^ �~(�0�GGG �&�b#ۨ_ �#&G�]"xb#1""_`BGTGp""hb"PZk �#$GGTG��0b#H�"��/۩_ �c$ՃG�]�] �}(�0�@�#k�����0#�^��~�^ �~(�0�8�޴@�H�P�GGG ��>��/��/��/���/��/��/GGGG�tGb#��/_��/��/��/G��G� @�_P�\<@�b��C��/�k��/��/��/GG4GD"tGb#_GG4GD"tGb# _GG4GD"tGb#_GG4GD"tGb#_GG4GD"tGb#_ӸGGTGD"tGb#_Ӱ� �# @�0�@� ���/��G��/GG��/��/GGG$"4G4GG0b#_)���GD"G4Gb#tG� _G ���#$"G4G4G0b#G�#_��GGD"�4GtGb#_G ���$"G4G4G0b#G�_�� �0@0@�㰨 @���ò��/GG4GD"tGb#G��/_�GGG4GD"tGb#G��/_�G�G�4G�]�] �}(�0�8�ݤ@�H�P�`�#k��/��/ �P,�0#4G�^��~G�^ �~��Q(�4G �0G0�8�GGG�1 �p�q �b#G��/_N���#GGG4G4Gb#G�=��/_G��GG4G4GGb#_|����/�# �G4GGb#4GG 0@0 @���#G~_k��=GGG4Gb#4GG�#r_GG��G4G4GGb#_��/V����/��/��/�# �G4GGb#4GG 0@0 @���#G_C�GGG4G�4GGb#_<���#GGG4G4Gb#G �=��/_G��GG4G4GGb#6_$����/�# �G4GGb#4GG 0@0 @���#G&_� �=GGG4Gb#4GG�#_��/��/ ���# � 0@0 @���#�c,�C��rG�GG4G4GGb#_��/����/��/��/�# �G4GGb#4GG 0@0 @]���#G_GGG4G4GGb#)_��/����/��/��/�# �G4GGb#4GG 0@0 @A���#G_�,�#GG4G4Gb#G�G_����/�# �G4GGb#4GG 0@0 @%���#G_GGG4G4GGb#_��/����/��/��/�# �G4GGb#4GG 0@0 @ ���#G_��/��/�,�#��G�]�]�4G �}(�0�8�@�#k��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/#�04GtG�^��~�^ �~(�0�8�޴@�GGG Gb#�00 G_��/��/���Gw��/�#P7@�B�#o�\@ �C�k��/��/�Gh��/��/G_��/��/���G_��/GG4Gb#_W��/��/G_��/��/���GO��/GG4Gb# _� �#D"GG0b#TGtG! @��=S_�� ��=!@�#6��/��G_�� �C�}2SB�C+��/��/GG4Gb#_#��/��/G_��/��/���G��/GGtGD"tGb#_Gv_��/��/���G ��/GG4GD"tGb#_Gf_��/��/���G���/GGGD"tGb#_�GN_��/��/���G���/GG4Gb#_���/��/,��� @��/���G���/GG4Gb#_� �#$"GGb#GtG�% @��/_�C���/�� �#%%B����/��/��/�CG�C _�� �%B����/��/��/GG4Gb#o_�GD"G0b#TGtG�8�D���#�#_�� �$@����/��/�#G�#_�� �C%EB����/��/��/GG4Gb#K_Ӈ���/��/G_��/��/���G���/GG4Gb#;_� �`$"GGb#tGtG�%@��/_�� �$@�g���/��/�#�8�DG�#`��_�� �C%EB�Z���/GG4Gb#_S���/��/G_��/��/���GK���/GG4Gb#_� ��D"GG0b#TGtG&@���/O_�� �%@�3���/��/�#G�#_�� �C&FB�ð(���/��/��/GG4Gb#_�GD"G0b#TGtG�._�� �$@����/�G�t_�� �C&FB�ð���/��/��/GG4Gb#_�4GG�]�] �}(�0�8�ݤ@�P�#��/k��/��/��/�0#�^��~�^ �~(�0�8�GGG�>{#5_�Gb#�_ ��=� GGGGpb#tG��#�_*���#G$"GGpb#tG�#��/_��/��/��/��GCG_ӠC8@FX@FG��DG4GtG��b#��/���/��/��/�@pD"M_�GG4G0b#g_ �Gb#�_��/��/'�� �#,�x$"GGpb#tG�#�� 0@��/�`�� ��#�#G��/_ �=��/��/���# ���/�#G�8�DG0b#4G�#��/��:_ �� �G�X$"4GTGGb#�Gu_��/�� �#�#)��#G�#_�� �c�c!�GG4G0b#_�GD"Gb#4GtG�f_��/��/�� �#�# ��#G�#_�� �c�c�GG4G0b#_� �#D"GGb#4GtG% @���/G_�� �#!%@�#���/��/�CGG$"b#GG�CtG*_�� �#!%@�#���/Gv_�� �C%EB����/GG4G0b#_�G$"Gb#tGtG��Q_ӡC0����/��/��/�8�DX�D�x�D�'� �@��/�`�� � B0�B���GG4GhD"tGb#_�GG4G`D"tGb#_�GG$"b#tGtG���/#_ӡC��/��/�G�]�]�4G �}(�0�8�@�#��/k��/��/��/G{#tGGtGG(��/G4GP{#��/(������������ �P,�0#G��~�^G�^�~ �(�0�GG��QG4G �G�b#G_��/����/��/��/ �#GGG�4GGGb# @0@��/� ���/��/o_���/�G*���/��/GGG4G�GG`b#_����/��/� �#GGG4G`b#GG @0@��/� �_��/,��ctG��dy`@�`���4G��/��/��/G�]�]�} �(�0�@�#k��/��/��/�G��/��/#�^��~�^ �~(�0�8�GGGP{#�_ �,�#GtG�p"G���!b#�1" @2�@��#�G��/C_���)��8�DX�Dp��x�DTGtGG0b#�G�@U"��/��/���_�pGGTGb#TGG$"_G ��G4GPb#_�GG4GPb#_ �,�TGtGp"Gb#����1" @������G_��/������/�# �4G�GPb# B��#01�B���G_ �,�GtGGb#tG��� @� �#�=p"��`1"�_�C������/��=5�@4GG��DPb#�#���G��/o_��4G�G�]�] �}(�0�8�@�#k��/��/��/G0{#tGG4GGa'��/G4G{#��/'������������# �;4G4G��~�^GG�^�~ �GGG@b#��/_���G� �"GG4G`b#4GG!"{_���G � �"GG4G@b#4GG!"_ӠCG�]�]�} �0�#k��/��/��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/0�0#tG��~�^�^�~ �(�0�޴8�G@���q.GPGGb#S�qJ��q>�4G� G�_G���#�E"G4G�b#tG�#_0�4G�� .r HQ� J2F�� >�4G��/��/���/��/��/GG4G%"4GGb#��/_ ���#G�E"G4Gb#tG�#_��/�� ��㰱 @0@� ��cGG�E"�b#4GtG�c�㰒_0���',pHA�'H0D��'<��/��/��/ �C,�#G4G�GGb#��Q4G ���%"_��/����/��/��/�à �G%"G4Gb#4GG @0@��/`��ð��/��/_G%"G4G4GGb#_����/�à �G%"G4Gb#4GG @0@��/D��ð_��/�à,�%"GG4G4Gb#G��İ��/_����/��/� �àG%"G4Gb#4GG @0@��/$����/��/o_G%"G4G4GGb#_����/� �àG%"G4Gb#4GG @0@��/����/��/_�,�à� �#G�GGtGp�%"�#�#`b#��/w_!���8�DX�DG�x�DG4G b#���/���/��/��/� �� _�GG4G E"tG�b#_�GGTGE"tG�b#_ �àGG0�%"`b#tGtG�ð�ðK_Ӏ���8�D�X�DGG%"4G4GGb#�j�s�� �#$$@&_����/��àG%"G4Gb#4GG @'1@��/a��_��/ �àGG b#4G$@�_� �à�%"GG`b#GtG$@_8�DI�� �àX�D�x�D0b#$@�&@+���?��,�#G��1D��/9� ��/��/��/S_4�� �G8"G4Gb#G2@&@�CG_�ð&��G01@4G� b# @��/����G_���/��/GGG0"G4GGb#_� ���/GZ_G(E"��GTGtG�b#N_ �GG@E"b#4GtG����/_ �� �GHE"G4Gb#tG�㰭_��/(���àG%"G4G4Gb#G�ð_��/����/��/��/��àG%"G4Gb#4GG @$1@��/ ����/��/_GPE"G4GtG�b#_ �G%"G`b#GtG��G��/_��/��/��/���à@GG�b�ð_ӠC��Dy���\@��C��/�k��/��/��/GGGXE"tG�b#_h�GGG`E"tG�b#_`�GGGhE"tG�b#_X�GGGpE"tG�b#_P�GGtGxE"tG�b#_H�GG4GE"tG�b#_@�GGtGE"tG�b#_8�GGtGE"tG�b#_0�GGTGE"tG�b#_(�GGTGE"tG�b#_ �GGtGE"tG�b#_�GGtGE"tG�b#_�GGtGE"tG�b#_�GGtGE"tG�b#}_��/ �GGX%"`b#GtG$@��$@��/_%���#x�DX�D8�DCG4G b#�#h_ӠCGG��D���@��/��/�`�y_�GGTGE"tG�b#Q_�GGTGE"tG�b#I_ �GG%"`b#tGtG$@��$@_X�D,���C8�DCGtGb#�C?_ӠCGG4G��D����/�`� �'BE"_ �� �àGE"G4Gb#tG&@�ð_ ��GG4G b#5_�GG4G b#/_ �GE"Gb#4GtG$@��'@w_���à �G0b#�ð&@_ ��&@G�ð_ ��G_ ��$@ �à$@�GG4G b# _ �àGGE"b#4GtG&@�ð�ðR_���GE"tGb#�_GG��4GE_G��G4G b#_�0����,�H*����/�àGG �E"b#4GtG�ð_��G��/ �#GG �E"�ð4GtGb# @0@� �ð�ð_��/��/�#G(�E"�ðG4GtG�b#�#_��G�4G�]�]�} �(�0�ݤ8�@�P�#k��/��/G {#tG4GTGG#��/G4G{#��/$������������#tGtG��~�^�^�~ �(�0�GGG� �Gb#�G��/_/��C��/�8�DX�D�x�D�'� �@��/�`�� � B0�B���GGTGxE"tGPb#M_�GGTGpE"tGPb#E_�GGGb#tGtG���/_ӡC��/��/�G�]�]�4G�} �(�0�@�#��/k��/��/��/ �P,�0#TG�^��~G�^ �~��Q(�4G �0G0�8�GGG�1 �p�q� �b#G��/S_N���#GGG4GTGb#G�=��/_G��GG4GTGGb#>_|����/�# �G4GGb#TGG 0@0 @���#G._k��=GGG4Gb#TGG�#"_GG��G4GTGGb#Y_��/V����/��/��/�# �G4GGb#TGG 0@0 @���#GF_C�GGG4G�TGGb#;_<���#GGG4GTGb#G �=��//_G��GG4GTGG>�b#_$����/�# �G4GGb#TGG 0@0 @���#G_� �=GGG4Gb#TGG�#_��/��/ ���# � 0@0 @���#�c,�C��rG�GG4GTGGb#_��/����/��/��/�# �G4GGb#TGG 0@0 @]���#G_GGG4GTGGb#_��/����/��/��/�# �G4GGb#TGG 0@0 @A���#G_�,�#GG4GTGb#G�Gz_����/�# �G4GGb#TGG 0@0 @%���#Gj_GGG4GTGGb#_��/����/��/��/�# �G4GGb#TGG 0@0 @ ���#G_��/��/�,�#��G�]�]�4G �}(�0�8�@�#k��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/#�0TGtG�^��~�^ �~(�0�8�GG�0GPGb#P GK_���Gd�#P�7@�B�#]�\@��C�k��/��/�GV��/��/G_��/��/���GM��/GG4Gb#_E��/��/G_��/��/���G=��/GGtG@D"tGb#_3G_��/��/���G-��/GG4GHD"tGb#_#G_��/��/���G��/GGGPD"tGb#}_,��� @��/���G ��/GG4Gb#_� �#$"GGb#GtG�% @��/_�C���/�� �#%%B����/��/��/�CG�Ch_�� �%B����/��/��/GG4Gb#g_�GXD"G b#TGtG�8�D���#�#_�� �$@����/��/�#G�#D_�� �C%EB����/��/��/GG4Gb#C_ӹ���/��/G2_��/��/���G���/GG4Gb#3_� �0$"GGb#TGtG�%@��/_�� �$@����/��/�#�8�DG�#��_�� �C%EB����/GG4Gb#_Ӆ���/��/G_��/��/���G}���/GG4Gb#_� �X$"GGb#tGtG�%@��/O_�� �$@�e���/��/�#�8�DG�#^��_�� �C%EB�X���/GG4Gb#_Q���/��/G_��/��/���GI���/GG4Gb#_� �`D"GG b#TGtG @��_�� ��$@�0���/�#G�#_�� �C�}2SB�C%���/��/GG4Gb#_���/��/G_��/��/���G���/GG4GhD"tG b#_��/���G ���/GGTGpD"tGb#i_�4GG�]�] �}(�0�8�@�#k��/��/��/�0#�^��~ �^(�~0�8�@�GGG�>{#_�Gb#�_ ��=G`b# ��#[_F�� �#,�GG@b#GtG�#�� 0@�@�� ��#�#GG_ �=��/��/��G�# ��#G�8�DG�b#4G�#��/��:_ �4G��` �G�GtG` $"@b#�G��/_��/��/��/:���C5�@�� D4G�b#�2��G _G.��G_+�� �#GXD"Gb#4GtG! @��=��/__���# �`D"G4Gb#tG B�#G�R_ �� �#�4G�b#!0@G�#_G��G_ ��= @� �#G�#GGtG@b#�# $"?_`���#8�DG�X�D4GPD"tGb#�#��/����/��/��/Q��G_N�G_GGI��4G�b#��/_� �#0D"GGb#4GtG! @� �=_��/��/��/���# �8D"G4Gb#tG B�#G�_���� �C �}G4GGb#tG3SB@D"�c_G���#HD" �4Gb#tG�# BG���/_ ��� �#4G�b#!0@G�#r_GG��_�GG$"`b#tGtG����/_/��C��/�8�DX�D�x�D�'� �@��/�`�� � B0�B���GG4GD"tGb#=_�GG4GD"tGb#5_�GG$"`b#tGtG���/_ӡC��/��/�G�] �]�4G(�}0�8�@�P�#��/k��/��/��/G{#tGGtGG9��/G4G@{#��/������������#4G�^G��~ �^(�~0�8�GGG�G@b#��/_GG�GGtG`b#_G4GG4G�����D �d@b#��/_G�GTG��@b##_�}��G�]�G �](�}0�8�@�#��/k��/��/��/#4G��~�^G�^�~ �GGG�"b#N_G�4Gb#_GG4Gb#��/_G�]�]�G�} �0�#k��/��/��/�0#TG�^��~G�^ �~Q B(�GGG�Pb#��/_�#GTG��b#0 @@� @�#� �#Ӌ_�}��G�]�] �}(�0�#k��/��/��k��/��/#��3@�^ �S��~H�^P�~X�`�h�޴p�x�GG�^�2N;!H2AK@B �D��DG�~�^��>� F ��[[��/`X[ � ���L4`C5TC!!H:AK(�=0�](�]0�}[[BjKYG[8�]8�� G�@��/��C �BG�GB��R�TBG?~Zk��$@�@b#G0@@��@��_ �GB? �B ��E�@��GG�@��/'~Zk��â�B�����#C��/� ��G@�]H�]P�}X�`�h�ݤp�x��#k��/��/�p#8@FX@F�^��~�^ �~(�0�GGGG��3BUF���/��/��â�@@dB��`��/��/�4G�"xb#4GGm_�@���/��G�G�]�] �}(�0�@�#k��/��/#��G�G8�^��~G�2N�SG@�^H�~1JP�X�B`�G2TC��/c�` ��>��B;JzB�~�>[`C[#[�QG�[G:G�@`X[��^�[O":B9B4J0J �(� �](�}[[jKYrFG��/[0�]0�C�@8C�B-� �WG�0�@�@8C�CC`@��Z�BCU}Zk���WG ��BD���@@�BG��W�CC�0�@�@8C`@��ZU}}Zk��W� �7�E@DG���G���/��/��/�wU�BG@�@����@��@g}Zk���@��G8�]@�]H�}P�X�`�p�#k��/��/��/#G4G4G�^��~{#�"�Gq_�G�]� �#�Dk��/��/#G4G4G�^��~{#��G�"_G�]��4G �#k�������� �P,�0#G�^��~G�^ �~��Q(�G �00�G �GG�1�PG�^Gb#[_����/��/�# �GGGb#GG 0@0 @]���#GJ_�,�#GGGGb#G��G~_����/�# �GGGb#GG 0@0 @A���#Gn_GGGGGGb#%_��/����/��/��/�# �GGGb#GG 0@0 @%���#G_GGGGGGb#I_��/����/��/��/�# �GGGb#GG 0@0 @ ���#G6_��/��/�,�#��=�4G�#G�]�] �}(�0�@�#k��/#�^��~ �^(�~0�8�@�GGGP{#�b_ �#,��G4G�tGpG�#��b#� G 0@`��#�#G_��/��/��G/���/�#8�DG�X�DG4Gb#�#� #��_!� �GG`E"0b#4GtG @�Ҿ_��/��/�� �#�hE"G4G0b#tG!0@G�#��/þ_��G�GG4Gb#g_4GG%"G� �TGtGb#��_��G ��G�8�D4Gb#���GO_4G ���/� ��#G @�#G�%"TGtGb# �_���GJ��G�8�D4Gb#���G3_� �#GtGGb# 0B�G%"�_�� �#�!0@�#.���/�#8�DG�X�DG4Gb#�#�`#��_!� �GGpE"0b#4GtG @�^_�� �#�xE"GG4G0b#tG! @�#R_�� �#�!0@�#�GG4Gb#_�4GG`%"GW�� �# �GtGb#! @�#�#A_G1���#8�DG�X�DG4Gb#�#� ��/��/$��_"���/ �GGE"0b#4GtG @�_��/��/�� �#�E"G4G0b#tG!0@G�#��/_��G�GG4Gb#_4G �G%"� �Gb#tG @G��_ӡC ���5�@G�� D4Gb#���G��/��/_ �GE"G0b#4GtG��_��/�� �#�#��#GG4Gb#�#_� �#G%"Gb#TGtG�  @�Ѿ_ӡC���,�#5�@G4Gb#��1 0B�FG�� D����/��/c_ ��= %"GGb#GtG @��_?���#8�DX�DG�x�D4Gb#�#��G�@3��I_1�GG4GE"tG0b#_G(��G4Gb#;_#���/��/GG4Gb#3_�GE"G0b#4GtG�~_��/��/���#GE"G4G0b#tG�#r_GG��4Gb#��/_���4GG�] �](�}0�8�@�P�#k��/��/��/G {#tGGTGG ��/G4G0{#��/_������������#GTG�^��~G^~ (޴08@>HGGG4G�b#?_�=0�BGG8�b4G!<H00!$00! �=��/QxZk? tG@�������/P�BG@�b�"X�bTGwZk��=��c���?D�`4G@� @���H����dz���B4G4G�bFQZZk��/����do���/0�B4G8�b�"%xZky�@GTG� ��c���/G�`tG tGG(I)'I� ��g.p�B4Gx�b�gJZZk!HC !A (@sH�F� �Q.0@R�QJSF�Q>0@ @� C�.0�BV�J4G�"8�b �¤�>��/wZk��=�@4G4G�]"#HDDgHDc @��-�c � ��HII��r.DC�"StJgJs"@��.�JwFzxJ ���/��/��/�`�8/Y�8K:G�8?0 @3gJgJ0 B B @�hG�R"G4G�4Gb#�"_�G�G�]]} (ݤ08@=HP#��/k������������ �P,�0#G�^��~G�^ �~��Q(�4G �0G0�8�GGG ��1 �p�q�G0b#=_GO���#GG4GGb#G�=r_GG��G4GGG0b#)_��/~����/��/��/�# �G4GG0b#GG 0@0 @���#G_k��=GGG4G0b#GG�# _GG��G4GGGb#A_��/V����/��/��/�# �G4GGb#GG 0@0 @���#G._C�GGG4G�GGb##_<���#GGG4GGb#G �=��/_G��GG4GGG0b#κ_$����/�# �G4GG0b#GG 0@0 @���#G_� �=GGG4G0b#GG�#_��/��/ ���# � 0@0 @���#�c,�C��rG�GG4GGG0b#_��/����/��/��/�# �G4GG0b#GG 0@0 @]���#G_GGG4GGGb#_��/����/��/��/�# �G4GGb#GG 0@0 @A���#G_�,�#GG4GG0b#G�Gb_����/�# �G4GG0b#GG 0@0 @%���#GR_GGG4GGGb#_��/����/��/��/�# �G4GGb#GG 0@0 @ ���#Gv_��/��/�,�#��G�]�]�4G �}(�0�8�@�#k��/,�0���1 0Bk��/��/��/,�0��1 0Bk��/��/��/#�0TGtG�^��~�^ �~(�0�8�GG�0GPG b# G3_���Gz�#`�7@�B�#s�\@��C�k��/��/�Gl��/��/G_��/��/���Gc��/GG4Gb#_[��/��/G_��/��/���GS��/GG4Gb#_� �#xD"GG`b#TGtG! @��=_�� ��=!@�#:��/��G_�� �C�}2SB�C/��/��/GG4Gb#_'��/��/G_��/��/���G��/GGtGD"tGb#Q_Gz_��/��/���G��/GG4GD"tGb#A_Gj_��/��/���G���/GGGD"tGb#1_�,��� @��/���G���/GG4Gb#C_� �#$"GG b#GtG�% @��/_�C ���/�� �#%%B����/��/��/�CG�C4_�� �%B����/��/��/GG4Gb#_ �GD"G`b#TGtG�8�D���#�#c_�� �$@����/��/�#G�#_�� �C%EB����/��/��/GG4Gb#_ӛ���/��/G_��/��/���G���/GG4Gb#_� �$"GG b#TGtG�%@��/7_�� �$@�{���/��/�#�8�DG�#t��_�� �C%EB�n���/GG4Gb#ü_g���/��/G_��/��/���G_���/GG4Gb#_� �$"GG b#tGtG�%@��/_�� �$@�G���/��/�#�8�DG�#@��_�� �C%EB�:���/GG4Gb#_3���/��/G_��/��/���G+���/GG4Gb#_� �D"GG`b#TGtG @��ǹ_�� ��$@����/�#G�#t_�� �C�}2SB�C���/��/GG4Gb#[_�4GG�]�] �}(�0�8�@�#k��/�0# �^��~(�^0�~8�@�H�GGG�>{#_ �GG�=GtGb#� �#��G_��/��/��/o���#G$"GtGb#tG�#_e��GG&_ӳ@BC���D]��\\BD�C��/�k��/��/��/�GGD"Xb#GtG�_J���/��/�GGD"Xb#GtG�߻_>���/��/�GGD"Xb#TGtG�ӻ_2���/��/�GGD"Xb#TGtG�ǻ_&���/��/�GGD"Xb#TGtG�_���/��/GG4Gxb#ӻ_���/��/GG4GD"tGb#_G��G4Gxb#û_��/��/��/ �Gb#�_Ӂ�� �#,�GGb#$"GtG�#�� 0@$�`����#�#G_�=��/��/��G�#��#�]�8�DGGb#tG�C�# ��4GD"_��G�GG4Gxb#_4GGp$"GM� �,�#tGb#���! @E�@�c �}��#�Gӹ_ �=��/��/���#8���/�# �]8�D�X�DGG4Gxb#�C�#���/*��b_(���/ �GGD"b#4GtG @�_��/��/�� �#�� �c�GD"Gb#4GtG3tB�}_�=� �#DG4Gxb#!0@G�#�#9_ �GG $"b#GtG��_S���#8�D�X�D4Gxb#�#C��K��G(_GG��G��/_� �#D"GGb#4GtG% @���/g_�� �#!%@�#3���/��/�# �CGtGGb# QB�#4G�D"���/S_�� �#!%@�#���/��/ �C�}G3SB%EB�c_��/������/GG4Gxb#_ ���/��/G_GG��4Gxb#��/ۺ_����/�#��/��/��/GGG$"�#tGb#��/W_>���#�@�#?\@�B(�C��/�k��/��/��/GG4GXD"tGXb#_GG4G`D"tGXb#_GG4GhD"tGXb#_GG4GpD"tGXb#}_GG4GxD"tGXb#u_Ӽ� �# @�0�@� ���/�G�4G �](�]0�}8�@�H�P�#k��/G {#tGGtGG��/G4G {#��/������������ �P,�0#G��~�^G�^�~ �(�0�GG��QG4G �G�b#G_��/����/��/��/ �#GGG�4GGGb# @0@��/� ���/��/k_���/�G*���/��/GGG4G�GGb#_����/��/� �#GGG4Gb#GG @0@��/� �_��/,��ctG��dy`@�`���4G��/��/��/G�]�]�} �(�0�@�#k��/��/��/�G��/��/#��~�^�^�~ �(�0�GGGP{#�_ �,�#GtG�p"G���!b#�1" @&�@��#�G��/?_�����8�Dp�X�D�4GGG�b#� �@4"��GTG��/_G ��G4Gb#ɹ_�GG4Gb#ù_ �,�GtGp"Gb#�����1" @�����G_��/��/�� �#�4GGb# 0@�#�#!1 @���#�#G_�GGtG �,�#pGb#���! @%� ���#�G_8�D���X�DG�x�DtGhE"pb#�� �`G��G]_ �GGtG`E"tGpb#U_�GG4Gb#o_��4G�C�CG�]�]�} �(�0�@�#k��/��/Gp {#tGG4GGa��/G4G {#��/������������=`B B;0B�� C�`2AJ�{#V@J@fC@B8`G� D�`G��D��/+����/��/��/���q2@B�1"��0q�"�p1p1p0q0q@B1p1pq0pq��/p�@��/��/��/��q��21@B�1"�"p��/_k��/��/�G}@BM�@��/��q.��p/�"�" �@�F� F�qJ�pKupJ[�pK�"�uGs1Hp?��Q.�.p#R�QJ�J"�1"SFQ>0,rJ�;HA�6Hq#"2DrJ0<1,A�;H2Dq.q#1<0,�wJ"�6H"rwJA�7H"2DrJ0<1,.A�6H�Jp#"2DrJ}�@1<0,�7HA�;H2D0<.avJW�JF>����/��/��q/��. 1�@�qK�JrJW�J�"Fs1H>��q/[�qKsG�1"q?k��/��/#TG��~�^G�S�^�~ �(�0�GGGGG�@Zk���EGGGTG��/�@Zk���EGGGTG��/�@ZkGD�G���/��/��/�EGGGTG�@Zk��/��/���EGGGTG�@ZkDG�GG�]�]�} �(�0�@�#k��/@#�p�F@�^��~@BH�^P�~X�`�h�޴p�x��>�^�~���޵��Gp@FG�D8@GT�DG BGGG G>�_` C8@G G���/��/��/0H11@3H@6�J�%N@G�Lv`Jb#�LG�r@ �p@ G� �@G �A�o@�k@}_G0A�AGGb#v_ G0A1AGGb#o_GGGb#Gi_ GC�@��á������̱���/GGGG_�e@�e@ GK�`��/��/��/AGGG � �FTG��/�@Zk&����/��/�FGGGTG�@Zk����/ �� 4G�`��,�� ��-�� �GGGG_,A-AA_Ai�� 4G�`��-��O��/��M�A-A��GGGG 4Gq_�A�A��/��/GGGGg_�A-A 4G��/��/��/AGGG ���FTG��/�@Zk2����/��/�FGGGTG�@Zk��G �� 4G�`GGGE_��� ��-�� ��,,A-AA��/?A��/��/�@ �`GGGG1_�A-A 4G��/�� ��/ 4G����-�A-A����/�� 4G��.�A���A��/��/��/�L8AE� 2A�CG YBF1A �s@�@G _.,A,AGG.A�CNBNG�@12A��/_�C-HGGC8KG �b � ��G��=[[`X[ � �=_ �C-H�GA#,A,I G�(�0� p`D(�0�= DT@E G[[`X[8�8�@?A���/�L�e@��d@Ag����/��/A G.A��/.�@�`��/��/�FGGGTG�@ZkG-A"��GAGG_�A��/�AA��/?G���/��/(A��/��/��/�FGGGTG�@Zk����(��M��--AA��H� A�AA?.���/�L�e@)CC�d@@&�@��/@G(@��/�`��/��/��/�FGGGTG�@Zk��/��/�������b����h���/GGGGk_"E@� AC@?�@@��/G@�]H�]P�}X�`�h�ݤp�x��=�]�}���ݥ���#��/k�������������G��/��/��/�J�0�@���J�0�@ ���J�0�@���J�0�@��/���J�0�@��/k��/��/#GTG�^��~�^ �~(�0�8�޴@�GGGGG���RGG�@ZkG�� 4G���b#P"Ǎ_��/��/��/G�]�] �}(�0�8�ݤ@�P�#k��/��/� ��/��/��/�� .oF`J0@r HoFQ� J�� wJ2F >��/�`��.`J0@oFV�J�� {�KF> �`��@/`J0@Z�@K�� [G@?��/� @��/��/%1@.G�D DG�JGTGPF�@Zk�� ��/��/G4G�b#0"y_�GG ����.�GT�J��>��/k��/��/��/���/OFPFyJFqJX��KG��`?[�`K�qG��`?@J� ��/_k��/��/#�GGG����1,� A�1H��1<�#k��/�"��/��/��/��p./D H0@Bt0J/DS�pJ�"{0JtFp>��/� ��. H0@B/DT�J�"F{0J>� ��. H0@BT�J�"F>?21@B^�@곙@B�>"2BK�`��/��/��/��q/G���/41@B@Fq.GG�qKX��Kq#FF.�{J4q@By HGF"GF���?��#� /txJ;Q@B�J.`Gq#q"Y�8KF7@B��#4GvJ�JG� ?5DF� /q/G2@B�D��� 1"Y�8K�#6G�sK`#p;H ?.FaxJU�JF@B>�7/Y�8K!G�7?�@��/��.GG�� @F��v.21@B�J1"FwJS�vJwF��v>_�#k��/��/��/#��~�^�^�~ �(�GGGG��/�C$HGG4G�C�@ZkD�DDGDG�]�G�]�} �(�0�#k��/��/��0�G��/��/��1, �H F���C�1H�1"/D0D�DG?D0�@��q/�qK �H��CoF�DpF�1"GF��/$�@��q/�qK �H��C/D�D0D�1"G?D��/�@��q/�qK �H��CoF�DpF�1"GF��/ �@��q/�qK �H��C/D�D0D�1"G?D��/_��0k��/0;GP�Jp�Jy1J0�J�GG{Q H��1?F?FF�`sq�H3F��Ck��/��/@[p�JP�J�1#wqJaJ�q#�"0�J��RsK_F�@��.V�JFwJ��>�,@�H�D�<�Q.R�[JSF�Q>�.V�JF�>k��/�.��1, JyJT JA1HF9D�>��1<k��/P;0�Jrq�J3bJP�J�SB4Jp�J��1�TB��UB?F� k��/��/�Gk��/��/�;��1?F��/� �p/�0,��,�H H�0"�"�qK1"J��@p#�;H��p/!!H�pK��@��@k��/��0.�0,0JA 0H�!F��Ck��/#��C��4�^��~G�^ �~(�0�8�G�GGGG��?D��sDK�$"��D.R�DJSF��D> �t_8@DG5@��/ �@��#!H0@u$H�PF����.T�JF��>s�ö=@@8@@4G�c 8� C=�C;G'� ��/��/��/���B�c B�D�D��/'��C_FD#�@FD��#?DD� cFD�`FD� B��/���/��/��/��c0B�c BGD�`��/?���/��/ �B@ �@��D.�DJR�DJPDpJPF��D>���/G_G �}8D8D$�`��/�@ �@��.�JP�JHFrDJF��>���/��/��.uHT�J�1"F>��.�J GW�JxKF��> ���/��/��d/�dK[�dK�D`H`G��d?�}��#G�]�] �}(�0�8�@�#k��/��/#�^��~�C�^ �~(�0�8�޴@�GGGG���q.01@B�qJS�qJ��:Z�BD�DaH�`aF��b>��/����/��/��/��zaKHG  @ H��C�DH��BB�@��b/�bK�D[�bK`H`G��b?01�BZ#��daJ_��B/GG4G�"�BK"D2� =`@��/(�@��/��/��/0`F�``B�vB���7J�6B��6/J�6KY�6KF{vK;G��6?���/��/��/��`B�zB7@K�:B��Z.H �HuHR�ZJUF��Z>0�B B0`B�"0`B`B�wB7`J�3B���/=`@4G� ��/ ����/��/��/��f0@� aKc_Ӻ @G��/_��",2`@G�"H,DH� ��/F�` CB@BtF7�`��/��/��/����q#�Q#��.�B F�q"� �xJW�J�1"F#>$,e;K@�H�D<ĠQ,aHB�ZHAD1 Q<.vJU�J BF>,eJ@�H�D<$Q,f!KB�AHFDQ< B ���/����,0�B� BeJ@�H�1"�D<���8G�]�] �}(�0�8�ݤ@�P�#k��/{"g��/��#GG�^��G4G��~�G��,��q/�H[�qK�#pHDpG��q?��@��3����D��F���"_���"����_���=��5G�]� �#k��/�C#�0FG��9GGG�^��~:!J �^(�~4@G0�GG�>���/����S��/F�`dGGhG4G ����/�`��y.�yJ�9#�=���/��/4GF=B�"__��%�G4G�]� �8"0�F���B�B�@7`J�SC��s/�sKaF��q�ö�B�B7J�VC��V.�VJ@J��Q0 @ 7@0�B�1"0�B�B�B7�J�PC� � � 4G�x ��/0B�"1_�c B?1B/� 7B= B4GSFG�@��/���B�{#[;{ۢ{��@C��[� @�a@;�B{ B�vB۲{�SC��{��/ B ���/��;�;0�B�{# B�9@��;��/_��/��/��/�G9� B @�@qD��/'�`��/��/��/���آ`B�#88 `BXX6J9!K!!HVD:AK0JYDAD2AJ5JZDPDRDUDز88XX wB^���/��X0`B�# wB:AKZDX��/S���/��/1B 7B BUF?�@��/��/��/��=`B�#��,�"�9 �"�ݲX G�"AH�H�@D�y,�=X�vH:AKCGx�Y.��AJ0JF8�,�H�"�آ6J�F qB�Y,�UH�"�X2AJBFX�9,�5H�"�x;aKaG8��/ wB����/�0`B�# wB��.�p �}8!!H�J0D8_�=�=��1G�] �](�}0�@�#k��/_R" ��/# �q�^��~ �^(�~0�8�@�޴H�P�X�>`�G�DGGGG`�`��/��/��/� �TGG��(b#�&41BHtB�B0BB B�H0D>y_�'$D�&�%!D���e pJwpJ�.��.V JUJFF�>��>�=�9#�=�C�g_��"�="b#�E �eG_�=�"b# �EGu_�'$�=�4GDH!Gb#�") A !A� ��/s_G�&GTGOȰb#�$cy_BDGGGlZk�$D� ���� �ĢGEG� �G�] �](�}0�8�@�ݤH�P�X�=`�p�#��/k��/��/��/3C0�#,B1F���G� #tN ^��~4G ^( ~0 8 GG�G:�@G@b#dJ5C3F�5B"B��C��/��x_G�� �B�]�="GG4GG(�bhZkxG��G�}Gb#G�"��/_�=BG� #B� ��/kZk���/��/�}G4G�"GDȰb#��/�x_�G ] ]( }0 8 @ #k��/��q#4G�^��~ �^(�~0�8�GG�rBGGGb#��@Ux_(�B�C��C�="�GG0�b��/ocZkGG���]G(b#G0�"_ �G��4G0b#{x_�]���D��G�] �](�}0�8�@�#k��/��/��/#�^��~�^ �~(�0�8�޴@�GGGG��"4_�"2_���/�b#_�ݢG�"�ݲ6B%@0@m_�]G �4Gb#@�@G��/_8�B�]GG:kZk�=�"�%@�@�=��6#@F ���/ _GG��/O_G��/#@��dG�]�] �}(�0�8�ݤ@�P�#��/k������������#4G�^��~�^ �~(�0�GGGG�^Gb#_F�^w_0�BG��tG4G �"8�bP�"SZk� �B�b4G`DGhZkG�@b#4G��w_0�BtGTG �"����p�"8�bSZk�`�BG4Gh�btG��0�@iLZk �dG�G�]�] �}(�0�@�#k��/��/��/+�� �GG4G��#��~�^�^�~ �GGG��Gb#����/w_GGGb#�]�]4G�} �0�#��/w��/��/��/GG4Gq#w��/��/��/k��/��/��/�P#TG�^��~G�^ �~�QB(�GG�>GPAB0b#��rw_PBtGG@"��"��Xb}SZk�C���@@�P@�G�]�] �}(�0�#k��/����,�H��/#��#��~�^�^�~ �GGG��/��/��C/4G�c#Z[K0�bGK(�B��/JZk��.qHP�J�c F>��C.�CJ_G�]�]�} �0�#k��/��/��/� � B��/�����B��0,�"A0H'H5(@(@5)@)@�`G*@5+@�D�D�D�Dk��/�Gk��/��/#TG0�;"��~�^ �[�^�~ �GGG��(�b_Zk��/���4G ���/ �B��TG8�""(�b~_Zk��/��/���4G���/ �B��TGH�""(�br_Zk��/��/���4G���/ �B��TG@�""(�bf_ZkCG�]�]�} �0�#k��/��/�k��/��/� � B��/ �����B��0,�"A0H'H��/k��/��/��/�Gk��/��/ � � B��/�����B��p/`PJ[�pK`G��p?k��/��/��/0�#H�> ��/�@�h��~�^�^�~ �(�0�޴8�G � GG`� � B�����B��/�Ġ �BG� G(�btG��.G�J���/KZk��/��/��/��@�BGP�""H�b4fZk�GG�]�]�} �(�0�ݤ8��#k��/��/�4G��/��//� #4G��~�^p[�^�~ �(�0�GGGGGxbgZk�#�GGb#� @01�B 0@G��/� _ �B��GTG(�b��/IZk��@�G�]�]�} �(�0�@�#k��/��/��/#4G�^�[��~�^ �~(�0�8�޴@�H�P�>X�^`�~h�p�x�GGb#��� �=�CfZkG$1�@�b# _GG�""b#_`"b#��/_G`"b#_ �Gxb# �G_Ә GTG"���G` �b"""b#4GJ_ӨCGG"_� DG �""b#��0�A_G �""b#{_*q`@)1@��/� A�@��/3���G@B�SF1�@��/��/��/�fGGG`A�`_�gGGG`B�`_�� �Gb#����Ǣ�ײ_Gb#_G�]Gb#�] �}(�0�8�ݤ@�H�P�=X�]`�}h�p�x��#ô AGG_ӵ@9�"/�"8�""�Gb# ���/��/��/0�A-_8�""Gb#)_ӰG0�A �""b##_G �""b#_Ӧ��/��/] @ 1@���/ \@8�C�k��/��/��G@�""b# _G@�""b#_0�A��/G""b#�_G""b#_0�AG_�XD4GT�D�A|ó=�A1Q�AG`"+�`G P�A(b"+_&��11�AGb#tG_P�A��GG��/{_�8 DGP�A�b"���"`"s_�DG1Q�AG��b#��/_ ��""b#G_""b#G_GLëC��Gb"GG`"b#Gz_��/��/ ��G �""b#_G �""b#_P�A5��/GGGb"G`"b#d_ ��G""b#_G""b#_P�A!��/GGTGPb"G`"b#P_ӻ��GGXb"��G`"b#GF_��/��/ ��G""b#_G""b#{_P�A��/+�`0�A�b"�"GG`"b#G._��Hb!G0�A��~`b!tGXb"�~""b#G _��GGPb"GG`"b#_ ��G""b#R_G""P�Ab#M_GGG�b"G"`"b#_ P�Aa��GGtGb"`"Gb#_`!W��1Q�A��GG�b" ""Gb#_GK��P�Ab"4GG �"`"b#_B��11�AX�" ���>G4G@�b"G`"("b#_ӡ�A"H�B"0�"�D"#B#��0" ���^��޶GP�A �(�^4Gb"0�>8�"8�"Gb#_��GG ��TGb"`"b#G_G��""���/GG""b#_G""b#_j��/��/G""Gb#_G""b#_^��/��/GGTGb"G`"b#_��1Q�AGb"GG`"b#_ ��G �""b#_G""P�Ab#_@0�AGtG�b"G 0�A`"b#o_ ��G""b#_G""p�Ab#_,GGTGb"G5�A`"b#[_V�� 8`EGG�`��/��//_� DM��` P�A��G4Gh�b"X�"0�"b#G P�AE_G3��b"`"P�ATGGb#<_+��21�A11�AG�`_�8D��/ ��GGG8b"@"`"Gb#*_��/��/ ��G`�""b#c_G`�""b#__p�A��/Gp�A""b#W_G""b#S_��/��/GG""b#K_G""b#G_��/��/G`b!b"H"��~GTG�"Gb#_"" ��Gb#��/3_G""b#/_P�A��/��~GGpb"TG�"@"b#G_!����~GGtG�b"�"�"Gb#_ ��G �""b#_G""P�Ab# _ӔGP�A �""b#_G �""b#_ӊ��/��/G""b#_G""b#_��~GG8b"TG�" "b#G_��/��/��p�Aq��/��~GGx�b"4G""b#G_ �� 4GGGTG�b"p"`"Gb#_ӋT�D� AXGV��/��/GGTG0b"G`"b#`!_"��P�A��Gh�b"X�""4GG P�Ab#w_ ��G(�""b#_G(�""p�Ab#_4GG�""b#_G�""b#_*��/��/ TGGGb"TG"`"b#GV_Ӌ4�DG""b#_""G� Ab#_��/��/��/0�AG!_�D4GG""T�Db#�A}_""Gb#y_�0�AG_� D 0�A11�AG��/������/��/_ ��G""b#f_""b#Gb_P�Aëy�ACP�AG E P�Ab#��/�`P�A��/��/_�8 DG(�""��N_(�""b#GJ_��/GG""b#C_G""b#?_��/��/=�A1Q�AG`! �`��4GH�b"G0�"p�"b#_��]�A`!1q�A �`��H�b"G4G0�"p�"Gb#_��/ ��}�A1�AG �4GH�b"0�"G`"b#_��P�A��/�`11�AG!_� Db"`b!1q�A�����~G�~4Gx�b""4G"b#_ ��G""b#_G""P�Ab#_x ��11�AGb#_�8 DG""��_G""b#_P�AhGGy_� D 8�EGG��/;��P�A��/��/�`_ ��b#G*_ ��""Gb#_8�""Gb#_LGGTG�b"G`"b#|_��GGb#S_�8 DG��/ ��_ ��8�""Gb#_""Gb#_0G""b#_G""b#_'��/��/��/GGTGb"G`"b#T_��Gb#��/_ ��""b#G_""b#G_P�A +��GG(b!_�8 D�b"�""#����~" "B#P� `b!�~� �>GTG0��G(b"(�^8�"0"Gb#@�~#_ ��G""b#^_G(�""P�Ab#Y_GGTGP�b"G`"b#_��GG_�8 D*��G`b!��~GG�b"G""b#_��11�AGX�b"4Gh�"`"b#G_G��11�A b"tGGX"`"b#_ ��G""b#&_G(�""P�Ab#!_ӨG`b!X�b"h�"��~G4G"G 4Gb#_��11�AGb"GGP"`"b#_��/��/��GGb#_�DG""T�D_""b#G_� AGGG�b"G"`"b#_*��Gb"GtG`"b#G_!��GGb"TG`"Gb#_G��GGhb"G`"b#_ ��G(�""b#_G(�""b#_P�AQ��/G(�""���/G""P�Ab#_G""b#_B��/��/��11�AG��/_��0�AG_ ��0�""b#G_0�""b#G_P�A,0�A*��/��/GGG�b"G 0�A`"b#W_v��Gxb"GG`"b#GN_m��G��GG�b"G`"b#D_��G(�""b#_G@�""P�11�AG,1�A_��Gb#��/_��GG _�8DGG��_� D��/��G(�""b#c_G0�""4��EG(�""b#����/��/��/W_G`""(� � 8�"B"H�"���"` �^�GG �޶(�b""4GG"b#_��G`" G��>4G �b""G"b#_��G(�""b#._G(�""b#*_GG_�X D 4GT�D� A��/��/���AG��/_�D ��G>�GGxb"`"b#G_��/��G0�""�G(�""0�Ab#_G0�""b#_ӊ��/��/0�AG_�x D 4GG""T�Db#_G""� Ab#_x0�AG_� D 0�A  E11�AG7��`!b"G�`��`"�"Gb#_��/��Gb""GTG`"b#G_ ��GG4G@�b"`"G`"b#_��11�AG�b"GG`"b#_ ��G""b#_G`""P�Ab#_<P�A���/��/GG""b#_G""b#_.��/��/11�AGtGb"G 0�A`"b#[_�� dE P�AP�A�GTGP�b"G`"b#O_��G�GG%_� D 4GT�D� A""Gb#_""Gb#}_0�AG_� D 4GG8�""T�Db#r_G8�""� Ab#m_0�AG_� D 0�AG""b#��P�Aa_""Gb#]_ TGGb"H�"G4G`"b#G_ӌ4�D""Gb#M_""G� Ab#H_��/��/��/0�AG_�8 D 4GG""T�Db#:_G""� Ab#5_Ӽ EGb#��/�`��/��/��/_��1Q�AGb"TGG`"b#_ ��1�AG8b"TG"G`"b#_��G`""�G"" 4Gb#_G""b# _0�AG_�X DT�D� A11�AGtG0b"G"`"b#_��0�AíC��GHb"GG`"b#G_��/��/ ��G""b#_G �""b#_0�Ai��/GGTGb"G`"b#@b!_��/��/��/#����~0�A`!�GGb"G""b#_ ��G �""b#_G �""P�Ab#_DGP�A""b#_G""b#_:��/��/GGtGb"G"`"b#g_Ӿ��Gb"GG`"b#G^_ӵ�� 0�A�!��`!0�AG�b"4G8�""b#GN_ ��GGb"4G`"Gb#E_��/��G �""b# TG~_G""b#z_GG4Gb"`"b#G2_ӌ4�D� A��/��/��/GGTGb"G p�A`"b##_R��P�AG_� DB""h"J����^`b!�p�A�޶�~GTGb"P�"h"TGb# _��Gp�AP�b"TGh"`"b#G_��/��/��G""�G""Gb#7_G""b#3_Ӻ��/��/�GtGGk_��GtG_� DG""b#��!_ �""Gb#_ӤGG""b#_G""b#_Ӛ��/��/ E1Q�AG`b" �TG"`"Gb#_G��`""���/G �"" TGb#_G �""b#_GG �b"4G"`"b#G_ӌ4�D� As��/��/��/Gb#A_ �"" ��Gb#��/_G""b#_p�Aa��/Gp�A �""b#_G �""b#_V��/��/GGGxb"G`"b#_ ��G""b#_G""b#_p�AA��/GGtGb"Gp"`"b#o_ ��G""b#_G""p�Ab#_,GGTGb"G TG`"b#[_��Gb"GtG`"b#GR_��0�AG4Gb"p�"G`"b#H_Ӎ4�DG""b#_G""b#� A~_��/P�AGTGHb"G"`"b# P�A2_��/��/��GGGG�b""`"b#&_ ��b"GGtG`"Gb#_P""��G���/G""Gb#S_G""b#O_��/��/0�AG_� D 4GG""T�Db#B_G""� Ab#=_GGTGb"G`"b#_ ��G""b#/_G""b#+_P�A��/#��0�AG 0�Ac_ ��Gb"GTG`"b#G_��/��/��GGT_��G@�""b#_G""�G@�""b#_G@�""b#_ E,1�A11�AG�`>_��/��//��G8!`b!���~Gb"GG@"X"b#_!��b"GGtG`"Gb#_G��Gb"�"G`"b#G_ ��G�""b#_p""b#G_�AX0�AV��/��/G0�A`""b#_G""b#_J��/��/ E1q�AGb"�tGx"`"Gb#u_1Q�A��Gb"TGG`"`"b#k_��G`�""b#_G`�""b#_ TG0�AG4Gx�b""G`"b#X_Ӌ4�D� A��/0�AG-_� D 0�AG(�""b#��P�A_(�""Gb#_ G`!b"h"��GTG"Gb#9_G���Ab#��/_Ӡ@11�AG� D�� _� D��G �""b#g_G �""�G �""b#`_G�"" 4Gb#[_GG_�X DT�D� A0�A��������#TG��~�^0�[�^�~ �(�0�޴8�@�H�>P�GGGGG4GG8�bfZkGGGPb#GG_0�BGGTG��8�b�`fZk(���/�`��/��/��/(�G0@GPb# �BѠ_ӡ @�� �A?�f0�B�GGTG8�bfZk �,� �G0�B4G8�bTG��/fZk$�0�G�G�]�]�} �(�0�ݤ8�@�H�=P�`�#k��/��/��/�0#��~�^�^�~ �(�0�GGG� � GG(�CG4G0@b#�EB@��_� @��/ �B(�4G(�b.fZk � �B4G(�b�,�'fZk$� �B4G(�b�0���/fZk��G4Gb#��慠_ �G�]G(�b�]4G�} �(�0�@�#��/ &k��/��/��/#GGG��~�^GG{#�^�GG �P_�G�]�]� �#k������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T���������������X������� �������������������������������������`�����@��p��@��p:�� ��@O�� �� O���� O����@O����������8��@O��@�� O��"�� O��#��@O��h2����>��@O���?�� O��H�� ��8H����H����H�� ��I�����X��@O��`X�� O��������������������� �������������#��&��(���)�� *��@*��+�� 2��9��G��U��[��_���������������������$��\��p\����������������D��D��q������p������p�����P��`��0������@ �� �� ��@ ����P����������0���� ��@��������P������ �������� �����P��`��p����������P��p����0��p���� �� ��p!��"��0#��`#��$��$��$��p&��&��&��`'��)��)��0*��P1��1��1��p2��2��3��7��7��9��=��=��>��?��`?��?��@���E��F��@G��PG��`G��pG���H��`H��pH��I��I��J��J��K��M��N��N��@O��PO���X�� X��@X��pX��^��@^��`^��_��@_��_��_���`��e��pe��������������������������� �������������������������������������@������� LIBZ_SHR32���������������������������������������������@������� CMA$TIS_SHR��������������������������������������������@�������DPML$SHR�����������������������������������������������@�������LIBOTS�������������������������������������������������@�������DECC$SHR�����������������������������������������������@�������SYS$PUBLIC_VECTORS�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'��������LIBTESTCompaq C V6.5-001�� �TRANSFER$BREAK$GO���� �main������ n �  n �  n �  n �   � � � � �L � ��� � � � � �  �( �  � �4�� � � �, ����� �� �� �����`���������0��display_results��0��� �d �d � �d d �  �a e � m � o � q � o �  k � ~ ��� k �  �  �<P  �$ $ �  . � / � 0 � 1 � 2 � 3 � 4 � - � > �8�� > � @ � G � F � F � ���4�� ��s�� ��'�v����4����<���������������p�����0�� ����������print_index_headers���������` ���print_header_value��` ��� � � � � � � �0 � � � ��� � � � �����!��@ ����print_error_or_abort��@ �{�� � � � � � � � � � � � � � ��� ������������ demo_stemming���������` ��stem_it��` �c�� � � �  � � � �  �  �  ����h������� �__main��������&��������SEARCHCompaq C V6.5-001����New_Search_Object����� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1�^�� 1� 1� 1� 1� 1�  1� 1� 1� 1�(�������� �SwishSearch_parent����� 2� 2� ���0��� ���p �SwishResults_parent����� 2� 2� ���0������P �ResultsSetRefPtr���*�� 2� 2� 2� 2����`�����P�@ �SwishResult_parent��P��� 2� 2� ���0������0 �SwishSetStructure��� �� $2�������!��� �SwishPhraseDelimiter����� +2� )2� ��������0� � SwishSetSort��0�|�� 62� 12� 62� 12� 12� 12� 62� =2� =2� @2� @2� @2� @2�4��� ����P� �Free_Search_Object��P�Y�� W2� Q2�  Q2�  [2� _2� d2� l2� j2�4���0�����p� SwishSetQuery���*�� z2� x2� x2� x2�$����������������New_Results_Object�����������������init_sort_propIDs���������� � SwishHits����� B3� F3� ��� ���!��0�x �SW_ResultToSW_HANDLE��0� �� M3���� ���"��P�h �SW_ResultsToSW_HANDLE��P� �� R3� ������ ��`�0 �Free_Results_Object��`��� e3� ^3� ^3�  k3� l3�  n3� u3� y3� x3� t3�  3� 3�4�� 3� 3� i3�* 3�D�������� � SwishQuery���5�� 3� 3� 3� 3�$���������P � SwishExecute����� 4� 4� 4� 4� !4� 2� 2� 2� 2� 2� 2� 2��� 2� 2�& 2� 2�  2� 2� 2� 2� 2�5 2� 2���V 2� 2� 3� 3� 3� 3� 3�  &3� 03� 3� 2��� 2� 2�u 3� 3� 3� 2�l )3� )3� )3� 2� 2� 2�_ 2�_ 2�a 2���\ 4� 4�>  4� 4� 4� 4� 4� 4� 9�n�� 4� 4� E4� 94� V4� Y4� ]4� d4� r4�T ����� ��*��>4�� ����� ����4�� ����� ��=%��4����� ����v��������4������������<�� ���T�� ��d ��(4�� ���d�� �� ��2��7�v����d����x����� ��� �L���4����8��������'�v����T���,����@� ���P�������������@������������limit_result_list����������������� query_index�����������SwishSeekResult����� 4� 4� 4� 4� �5� 5� 5� 5� 5� 5� 5� 5�f�� !5� !5� !5� !5� !5� !5� !5� !5� %5� )5� )5� )5�8���0���� "�H�SwishNextResult�� "��� 85� 85� 85� :5� D5�  \5� ]5� d5� j5� t5�!�� v5� a5�(���p����#�` � parseterm��#��� 5� 5� 5� 5�R 5� 5� 5� 5� 5� 5� 5�  5��� 7� 5� 5� 5� 5�  5� 5� 5� 5� 5� 5� 5� 5� 5��� 7� 5� 5� 5�( 5�  5�  5�  5� 5� 5� 5� 5�  5�  5��� 5�= 5� 5�  5� 5� 5�= 5� 5� 5� 5� 5�= 5� 5� 5�= �� 6� �6�  6� 6� 6�  6� $6� %6� (6� +6� .6��� 5�u) ^6� [6� [6� b6� <6�@ >6� C6� 5�F< H6� K6���L ���(�� ����=6���v����(���)������� �� ���$%�� ����5��_�v� ���$%� ���4%����@%����`%����t%����%����%����%����%����%���� &���������� ���$�� ����5�����t��� ���4$�� ����5���v����4$����<$� ���P$������� ������������������operate���������p*��newResultsList��p*�9�� 6� 6� 6� 6� 6� 6����`�����*��addResultToList��*��� 6����0�������������test_structure����������+�� getfileinfo���+��� 6� 6� 6� 6� 6� 6�  6� 6� 7� 7��� 7� 7�' (7� +7� 07� 97� 77� 97�  =7��� =7� 57� F7� O7� O7� 6� 6� 6� 6� e7��� o7� t7� t7� 7�  7� J:� M:� E:� S:� P:� S:��� S:� S:�H S:� S:� X:� [:� _:� _:� _:� _:� V:��� ~:� :� :� :� :� :� :� :� :� :� :� :� :��� :� :� :� :� :� :�  :� 6� 6�  t:���; 7�X ���.�� ��R��]7�����x��� ���0�� ��A'��7�� ���3�� ����:���v����3� ���3�������(����������� ������������ isbooleanrule����������������� isunaryrule����������������� getrulenum���������4�0�andresultlists��4��� 7� 7� 7� 7� 9� 7� 7� 7� 7�  �8� 7�,��@ 8� ���45�� ��j$��7�����0��� ���4�� ��j$��7���v����4���� 5�(������l������ ����6�� orresultlists��6��� ,8� 38� F8�  X8� Y8�  \8� ^8� `8� e8� h8�>�� D8�0 D8�0 D8�6 }8� 8���@������������marknum�����������������ismarked�����������������initmarkentrylist�����������������freemarkentrylist���������9�� notresultlist��9��� 8�  8� 8�" 8� 8� 8�D 8� 8�# 8� 8� 8�F 8� 8�F 8��� 8�@ 8� 8� 8� 8� 8�7 8� 8�  8�. 8� 8�)�� 8�@ 8� 8�0< 8� ���;�� ����8���v����;����;���������� ���:�� ��L��8���v����:����:����<��������� ���T:�� ��.��8���v����T:�4���:�������L��� ���9�� ��k��8���v����9����9�����������������<�`�phraseresultlists��<��� 9�  9�  9�| 9�o 9� 9� 9� $9�$ $9� $9� $9� $9�o�� $9� (9� -9� "9� 49� 69� A9� 9�6H ���4=�� ��j$��9�����0��� ���<�� ��j$��9���v����<���� =�(������|������`�����@��addtoresultlist���@�t�� Y9� Y9� Y9� Y9� Y9� Y9� d9� b9� b9�>� e9� i9� ��������@��isMetaNameOpNext��@��� q9� s9� v9����P���!����������make_db_res_and_free���������A�0�freeresultlist��A�B�� 9� 9� 9�  9� 9� 9�0 ���`A�� ��=%��9���v����`A����hA�������������������������� freeresult�������!��A��compResultsByFileNum��A� �� 9� ��� ���!��A��sortresultsbyfilenum��A��� 9� 9� 9�  9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�(�� 9� 9�  9�4�������C��notresultlists��C�_�� 9� 9� :�  :� :� 9� :�8���P���� E�� icomp_posdata�� E� �� ,:������� ����������mergeresulthashlist���������#��������MEMCompaq C V6.5-001��@E� �ecalloc��@E�"�� 2� 2� 2�$���`�����E� �emalloc��E�1�� 2� 2� 2� 2� 2�$�������� F� �erealloc�� F�*�� 2� 2� 2� 2� ��������F� �efree��F� �� 2� ��� �����F� � Mem_Summary��F� �� 3����������������� allocChunk���������F� �Mem_ZoneCreate��F�q�� 4� 2� 2� 2� 2� 2� 2� 4� 4� 4� 4� 4� ���F�� ��'��4��'�v����F����F����F����G�,������`�����������G� � Mem_ZoneAlloc��G��� 4� 4� 4�  4� 4�  2� 2� 2� 4� 4�1 5� 5�4 ���H�� ��(��4�� ���H�� ��'��4���v����H����H�0������<����v����H����H�L������X������ ����H�p � Mem_ZoneFree��H�<�� 5� 5�  2�! 2�# 5� 2�(( ���LI�� ��(��"5�������� ���8I�� ��(��!5�������� ���I�� ��(��5�������� ����I�� ��(��5����������������I�P � Mem_ZoneReset��I�9�� H5� C5� J5� 2�V 2�X M5�( ���I�� ��(��R5�������� ���I�� ��(��P5����������������0J� � Mem_ZoneSize��0J�Z�� [5�  `5� c5� a5� c5� a5� c5� a5� c5� a5����x�����)�������� PROPLIMITCompaq C V6.5-001��J� �GetPropertyByFile��J�.�� 0� 0� 0� 0� ������"��0K��SwishResetSearchLimit��0K��� 0� 0� 0�  1� 1� 1� 1� 1� 1� 1� 1� 1� ��8���P����L�p�ClearLimitParams��L� �� 31� .1� 31�$������ ��0M�@�SwishSetSearchLimit��0M�<�� S1� S1� S1� W1� ]1�$���������N��setlimit_params���N�\�� d1� k1�  s1� {1� }1� ~1� 1� 1�$���@����@O�� test_prop��@O�0�� 1� 1� 1�  1�(��������O�� binary_search��O��� 1� 1�  1�  1� 1� 1� 1� 1� 1� 1� 1� 1�6'��P 2� 2����������������� find_prop���������Q�� sortbysort��Q� �� 2���� �����R�� sortbyfile��R� �� 2���� ��� ����������create_lookup_array�����������������params_to_props����������������� load_index���������0R�p�Prepare_PropLookup��0R��� 3� 3� 3� 3� 3� z2� 3� 3� J3� F3�h ?3�  �3�I �3���P �3�_ 2� �3� 3�D F3� 3� 3� 3� 3� 3� 3��� 3�L F3�+ r3� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2��� 2� 2� 2� 2� 2� 2� 2� 2� =2� 92� =2� D2� D2� H2��� V2� d2� f2� f2� f2� q2� v2� v2� J 2� 2��� 2�w 2� 2� 2� 2� 2� 2� 2� 2� 2� F3�;0 3� 3�1�� L3� L3� V3�H 3�\ ���R�� ��1��3�� ���R�� ��|1��~3�� ���R�� ��0��2���v����R����W������X���v����R����U�l��@Y�������� ���HS�� ��1��h3��/�v����HS����PS����pS����|S�t���T�t�����<��'�v����R����R����S�8��[�p������` �����P ����\�`�LimitByProperty��\�~�� 3� 3� 3� 3� 3�  3� 3� 3� 3� 3�4P 4��������(��������SWSTRINGCompaq C V6.5-001��p^��lstrstr��p^��� .� .� .� .� .� .� .� .� .� .� .� .� .� .��� @ �/����������������getword����������`�0� getconfvalue���`��� c/�  c/�  m/� m/� o/� t/� v/� v/� y/� w/� w/� /� ��,���0����0b���replace��0b��� /� /� /� /� /� /� /� /� /� /� /� /� /�?�� /� /� /� /� /�L���P����d�� isoksuffix��d�U�� /� /�  /� /�  /� /� /� 0 /���������`e�� SafeStrCopy��`e�N�� /� /� /� /� �0� 0� 0�(��������Pf�@�ccomp��Pf� �� 0� ��� �����pf�� sortstring��pf�J�� 0� 0� 0� 0� 0� 0� 0� 0�(��������pg�P� mergestrings��pg��� #0�  #0�  #0�  #0�  -0� /0� .0� 00� 10� 40� 60� 80� 90� 80��� ;0� =0�(�������Pi��makelookuptable��Pi�q�� D0� D0� D0� D0�D D0� F0� F0� F0� F0� F0� F0� F0� F0� F0� F0���� ��&��pj��makeallstringlookuptables��pj� �� J0����0�����j�� parse_line��j��� R0� R0�  R0� R0�  `0� _0� B/� /� /� /� /� /� /��� +/� +/� +/� +/�   7/�  7/� L/� L/� L/� N/� L/�s�� N/� +/�  V/� Z/�  Z/� i0� f0�  s0� y0�P ���dk�� ��8��g0��'�v����dk� ���k���\m����xm����������������pn��freeStringList��pn�>�� 0� 0�$ 0� 0� 0� 0���������@o�� SafeMemCopy��@o�I�� 0� 0� 0�  0� 0� 0� 0�(���������p�`� isnumstring���p�>�� 0� 0� 0� 0� 0� 0�,��������p�0�remove_newlines��p�@�� 0� 0�  0� 0� 0� 0� 0�,��������q� � remove_tags��q�L�� 0� 0� 0� 0� 0�  0� 0���������r��� bin2string��r�?�� 0� 0� 0� 0� 0� 0� 0� ��������@s�� str_skip_ws��@s�3�� 1� �1� �1�Ԙ 1� 1� 1� ��������0t�� str_trim_ws��0t�G�� 1� 1� 1� 1� 1� 1� 1�,����� ��@u�`�charDecode_C_Escape��@u��� %1�* 21� %1�* %1�% *1� 21� P1� ]1� _1� _1� 21��� K1��������w�@� strtolower��w�;�� u1� q1� q1�$ u1� u1� z1�( z1� ��������w��char_ISO_normalize��w� �� 1���� �����w�0�str_ISO_normalize��w�i�� 1� 1� 1�$ 1� 1� 1� 1� 1� 1� 1� 1���������x���StringListToString��x��� 1� 1� 1� 1� 1�  1� 1� 1� 1� 1� 1� 1� 1�  1���  1�H�������`z��TranslateChars��`z�^�� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� ������ �� {��BuildTranslateChars�� {��� 2� 2� 2� !2�d !2� !2� $2� (2� 1�l 1�l 1�l 1�k 1�l 1�k}�� 1�l 1�l 1�k 1�l *2� 32� 32� 32� 32� 32� 32� 32� 32� 02�, ���(|�� ��C��,2��W�v� ���(|����@|����L|� ���\|����h|����|����|����|�,���|�����}�������������@����`~�p� cstr_basename��`~�!�� G2� I2� I2� I2����P�����~�P� str_basename��~�.�� S2� S2� S2� X2� X2� ���`������� cstr_dirname���X�� b2� b2� b2� l2� p2� p2� r2� q2� v2�$������� �X�estrdup�� �7�� 2� 2� 2� 2� 2�, 2� ��������Ѐ��estrndup��Ѐ�S�� 2� 2� 2� 2� 2�  2� 2� 2� ���������� estrredup���.�� 2� 2� 2� 2� 2����`������H�icomp2����� 2����0�������������thousep������������ comma_long����� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2� 2�  2��� $ ���T�� ��J��2���v����T����`����X������� �����t����%��������ERRORCompaq C V6.5-001���P�set_error_handle��� �� L2������� ����SwishErrorsToStderr��� �� Q2���� ������h�progerr���,�� U2� Y2� Y2� \2�$���������� progerrno���-�� l2� p2� p2� s2�$��������� set_progerr���(�� ~2� 2� ~2� ~2����`�������reset_lasterror����� 2� 2���� ������0� set_progerrno���2�� 2� 2� 2� 2�����������progwarn���,�� 2� 2� 2� 2�$���������� progwarnno���-�� 2� 2� 2� 2�$��������� SwishError����� 2� 2� ��� ������0�SwishErrorString��� �� 3� ��� �������P�SwishLastErrorMsg���� �� 3� ����������getErrorString���Q�� 23� ,3� ,3�$ 13� 13� 13� 13� 13� 13� 33�$������� ��SwishCriticalError�� �P�� M3� Q3� P3� P3� P3� P3� P3� P3� P3� R3������� ���`�SwishAbortLastError���^�� i3� g3� i3� g3� 3�e 3�R 3�g 3�g q3� q3� q3� ���p�� ��SN��o3���v����p�����������$��� ���T�� ��N��m3�������� ���4�� ��SN��m3����������������&��������SWISH2Compaq C V6.5-001����SwishNew���h�� 5� 5� 5� 5� 5�  5� 5� 5�  5�  5� ���������������� free_index���������Ќ��free_swish_memory��Ќ��� 6� 6� 5� 5� 5� 5� 5� 6� 6� 6�  6�  )6�<�� .6� .6� 16� 46� 86�< ����� ��Q�� 6���v���������������������0������� SwishClose����+�� I6� E6� N6� N6� N6����p�����p�0� SwishInit��p�o�� [6� b6� b6� l6� t6� t6� t6� w6� z6� d6� e6�0��������� SwishAttach���E�� 6� 6� 6� 6� 6�0 6�����������SwishSetRefPtr���*�� 6� 6� 6� 6����`�����P�`�SwishWordsByLetter��P��� 6� 6�$��������'��������STEMMERCompaq C V6.5-001��0�0� fuzzy_convert��0� �� 5� 5� 5����p�������no_stem��� �� 5� ���������@�fuzzy_free_word���M�� 5� 5� 5� 5� 5� 5� 5� 5���������p��create_fuzzy_word��p�L�� 5� 5�  5� 5� 5� 5� 5�$����������`�dump_fuzzy_list����G�� 5� 5� 5� 5� 5� 5� 5� 5�$������ ���(�create_fuzzy_struct���D�� 5� 5� 5� 5� 5� 5�(��������@��free_fuzzy_mode��@�8�� 6� 6� 6� 6� 6� 6���������Ж�H�set_fuzzy_mode��Ж�*�� 6� 6� 6� 6�0 6� ���������@�get_fuzzy_mode���p�� -6� (6� (6�, ,6� ,6� ,6� ,6� ,6� ,6� ,6� 36� /6� /6� /6����0����И�� fuzzy_string��И��� ?6� >6� A6����0�������0�fuzzy_mode_value������ F6� H6���� ����� � �stemmer_applied�� � �� N6���� �����@�� Stem_snowball��@�\�� U6� U6� X6� Y6� `6� f6� f6� m6�(���@������double_metaphone���m�� p6� p6� r6� w6� ~6�  6� 6� 6� ���@������ SwishStemWord���B�� 6� 6� 6� 6� 6�(����������SwishFuzzyWord����� 6� 6� ���0�����М��SwishFuzzyMode��М��� 6� 6����0��������SwishFuzzyWordList������ 6� 6� ��� ��� �� ��SwishFuzzyWordCount�� ��� 6� 6� ��� ��� ��@��SwishFuzzyWordError��@��� 6� 6� ��� �����`�p�SwishFuzzyWordFree��`� �� 6���������p�p�WordSize��p�e�� 7� 7�  7� 8 7� 7� 7� 7� 7� 7�8 7� 7����@������ ContainsVowel���!�� 8� 8� 8���������P�� EndsWithCVC��P�L�� 58� 58� 58� >8� >8� ?8� ?8� >8�0��� ����p��AddAnE��p��� S8�$���`�����Р�� RemoveAnE��Р��� h8�$���`�����0�� ReplaceEnd��0��� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8�0 8����������Т��Stem��Т��� 8� 8� 8� 8� 8� 8�( 8�  8� 8� 8� 8� 8� 8�A�� 8� �9� 9� 9� 9�,���D����'��������HEADERSCompaq C V6.5-001 �� �0!�print_index_headers�� �D�� .� .�  .� .� .� .� .�<����������`"�SwishHeaderNames����R�� .� .� .� .� .� .� .� .�,����������0"�SwishIndexNames������ .� .� .� .� .� .� .� .� .� .� .� .� .� .� .� >��� .� .� .�$�����"���"�SwishResultIndexValue��� �� .����������!�SwishHeaderValue���V�� .� .� .� /� .� .� .� .�$ ����� ��g��.�����4�������� ��� �fetch_single_header����� /� /� /� /� /� /� */� 1/� /� 3/� /� /��� /� /� /� /� /� /� /� /� /� /� /� 4/� 4/� ;/�X�� =/� >/� C/� E/� G/� K/� M/�4 ���x�� ��f��4/��'�v����x� ������������������(�����0�����!� fetch_header���G�� l/� b/� b/� j/� j/� s/� s/�4���0���� �!�SwishParsedWords�� �1�� ~/� ~/� /� /�������"���!�SwishRemovedStopwords���/�� /� /� /� /���������`�X �create_string_list��`��� /� /� /� /� /� /� /� /� /� /� /� /� /� /� /� /��� /�$�����"����������string_list_from_hash�����������������indexf_by_name����������X!�db_results_by_name���+�� 0� 0� 0� 0� ���p�����P��print_header_value��P��� 0� 0� 0� '0� '0� '0� '0�0 /0� 60� 60� B0� �� B0� B0� B0��������'��������DOCPROPCompaq C V6.5-001��@�"� freeProperty��@��� :8� 98����0�����p�&�freeDocProperties��p�O�� J8� F8� F8� :8� 98� J8� P8� P8� P8�0 ���ij�� ��h��M8����� �����������`�'� freefileinfo��`�/�� _8� b8� h8� h8�(���������@&�DecodeDocProperty����� ~8� ~8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8��� 8�,�������ж�@%�getDocProperty��ж�|�� 8� 8� 8� 8� 8� 8� 8�(�����"���&�getResultPropAsString���C�� 9� 9� 9� $9� :8� :8�$ ����� ��h��+9���v��������$����������������#��P�&�SwishResultPropertyStr��P��� @9� @9� D9� @9� M9� R9� Y9� :8�( :8�, g9� l9��� t9� w9�0 ���P�� ��h��f9���v����P����X���������������%��@� &�SwishResultPropertyULong��@�a�� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� ���������%�getResultPropValue����� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�~�� :8� :8� 9� :8� :8� :8� :� :8� :8� :8�$ ����� ��h���:���v������������̾������� ��� ����� ��h�� :���v�������� ����������� ��� ���d�� ��h��9���v����d����x�������������`�� ��p� %�freeResultPropValue��p�G�� :� :� :� :� :� #:� #:� #:���������0�"�EncodeProperty��0��� ?:� ?:�   P:�  \:� `:� b:� b:� g:� g:� k:� n:� l:��� V:�Z@ v:� v:� v:� v:� :� :� :� :� :�  :�[�� :� :� :� :� :� :� :� ��������p#�CreateProperty���`�� :� :� :�  :� :� :� :� :�4��� �����#�append_property����� :� :� :� :� �;� :�� ;� ;� ;� ;� ;�+�� ;� %;� %;� (;�0�������`��%�addDocProperties��`�C�� A;� <;� <;� C;� E;� F;� A;�H��� �����#�addDocProperty����� a;�  a;�  a;�  m;� p;� r;� r;� r;� x;� x;� z;� };� };� };�>�� };� };� ;� ;�0������� �$�Compare_Properties�� ��� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;�(�� ;� ;�,���P��&����������duplicate_in_mem_property�������!��p�#�allocatePropIOBuffer��p�E�� <� <� <� <� '<� %<�0������ ����������uncompress_property�������,��P� $�ReadSingleDocPropertiesFromDisk��P��� <� <�  <� <� <� <� <� <�  ;� ;�  <� ;��� ;� ;� <� R<�q Y<�k R<�q V<�k `<� `<� c<� g<�P��] m<� m<�W <� <� <� <�0 ����� ��u��<��7�v��������������������� �\���� ��������� ���<�� ��Fu��<���v����<����T�D������\��������)��0�$�ReadAllDocPropertiesFromDisk��0��� <� <� <�  <� <� <� <�  =� =� =� =� =�0���L����$��������LISTCompaq C V6.5-001���@'� newswline_n���:�� ,� ,� ,� ,� ,� ,�(���������(� newswline���/�� ,� ,� ,� ,�(���������@)� addswline���(�� ,� ,� -����p������ )� dupswline���9�� -� -� -� -�  -�,���������(� addindexfile���R�� -� -� -� -� -� -� "-�4���������p(� freeswline����� 7-� 3-� 7-�,��������@�'� init_header��@��� A-� A-� A-� A-� D-� F-� F-� G-� G-� K-� K-� L-� L-� P-��� P-� Q-� Q-� U-� U-� V-� V-� Z-� Z-� [-� [-� a-� a-� d-�{�� d-� e-� e-� f-� f-� g-� g-� h-� h-� i-� i-� k-� u-�(�������P�'� free_header��P�c�� -� }-� }-� }-� -� -� -� -��������$��������HASHCompaq C V6.5-001���`)� string_hash���U�� o-� k-� o-� o-� o-� o-� o-� o-� o-� o-� o-���������*�hash����� v-� v-� ��� ������*�bighash����� }-� }-� ��� �����0�`*�int_hash��0��� -�$ -����p������*�numhash��� �� -� ����� ��~��-�����0������@������p*� bignumhash��� �� -� ����� ��~��-�����8������@����� �H*� verybighash�� ��� -� -����0���#��P�)�add_word_to_hash_table��P��� -�  -�  -� -� -� -� -� -� -� -� -� -���4�����"���)�is_word_in_hash_table���A�� -� -� -� -� -� -�������!���p)�free_word_hash_table���(�� -� .� -� -����\�����+�������� RESULT_SORTCompaq C V6.5-001)����P+�compare_results_single_index������ 1� 1� + 1� 1� 1� 1� 1� 1� 1� 1�# 1�P�� 1� 1� 1� 1� 1�4 1�4( 1�9@ 1����������,�compare_results����� 2� 2� " 2� 2� 2� 2� 2�  2� 12� 72� A2�B�� D2� D2� D2� 2�, 2�,4 2�0@ )2���������*�LoadSortedProps���s�� a2� a2� a2� a2� s2� {2� z2� ~2� ~2� ~2�8�����&����������sort_single_index_results����������+� sortresults����� A3� A3� A3� 2� 2� 2� 2�  2� 2� 2� 2� 2� 2� 2��� 2� 2� 2� 2� 2� 2�  2�  2�  2� 2� 2� 2� 2��� 2� 2� 2� 2� 2� 2�   3� 3� 3� 3� 3�G�� "3� #3� H3� F3� N3� T3�4 ����� ��U��I3��������������'��������STEM_DKCompaq C V6.5-001��P� ,�r_mark_regions��P��� b� a� a� a� a� d� e� e� j� e� f� n� q� n��� t�0 q���������������� r_main_suffix�����������,�r_consonant_pair������ � � � � � � � � � � � � � � �"�� � � �$���������������r_other_suffix����������������� r_undouble����������-� danish_stem����� � � �g �g � � � � � � � � ���d � �E � � � � �  � �  �  �|�� �0 �# � � � � � � � � � �0 ���H�� �������v����H� ���X� ���h���������� ���,�� �������v����,����D�L�����d�� ����� ��������v��������������������������,�danish_create_env��� �� � ��� ������p,�danish_close_env��� �� ���������'��������STEM_NLCompaq C V6.5-001���-� r_prelude����� u� y� z� {� }� � x�$ � � � �y�� � � � � � � � � �  � �4���p������������r_mark_regions����������������� r_postlude���������@�.�r_R1��@� �� ���� �����`�p.�r_R2��`� �� ���� ������.� r_undouble���k�� � � � � � � � � � � �(��������P�.� r_e_ending��P�g�� "� !� !� "� "� %� '� '� )� )� ,� ���@�����/� r_en_ending���R�� 1� 3� 3� 5� 5� 6� :� :�,���0�����0/�r_standard_suffix����� D� B� B� B� E� D� G�  H�  S� S� T� P� L� L�  Y��� Y� ^� ^� `� c� e� e� i� i� l� n� q��� q� s� w� {� }� }� � � � � � ��� � � � � � � � � � � � �I�� � � � � � �(�������P�P/� dutch_stem��P��� � � � � � � � � � � � � � ��� � � � � � � � � � � � �*�� � � � �( ����� �������v��������� ����������� ����� �������v��������������������������@.�dutch_create_env��� �� � ��� ������.�dutch_close_env��� �� ���������(��������STEM_EN2Compaq C V6.5-001���/� r_prelude����� >� =� =� =� =� =� >� @� B� C� K� O� U� V�'�� Q� Q� c�4���������������r_mark_regions�����������P0�r_shortv����`�� � � � � � � � � � � �$���`����`�0�r_R1��`� �� ���� ������@0�r_R2��� �� ���� ������������� r_Step_1a����������������� r_Step_1b����������������� r_Step_1c�����������������r_Step_2�����������������r_Step_3�����������������r_Step_4�����������������r_Step_5����������������� r_exception2����������������� r_exception1����������������� r_postlude����������0� english_stem����� � �C � � �" � g� k��� g� k� n� p� s� p� w� z� w� � � ��� � � � � �y �y � � � � � ��� � � � � � � � � �x �h � � �Y ��� � � � � � � � � � � ��� � � � � � � �Y �# �' � � � ��� � � !� $� -� ,� -� .� -� /��� X� b� l� k� l� o� l� n��� � � � � � � � � � � � ��� � � � � � � � � � � �Z �]�� � �  � � � � � �L0 � ����� �� ��)���v�������� ��������� ��� �� ����0���v���� ���� � ���$ �x������� ��� �� ��=��:���v���� ���� � �����,�� ��� �� ��]��?���v���� ����(����0���������� ����� ��}��D���v�������������������� ����� ����I���v�������������0�����\�� ����� ����N���v���������������������� ����� ��ږ��S���v����������������������� ��� �� ����5���v���� ���� � ������<��� ����� ��?��[���v������������������ ����� �������v�������������������P�����0�english_create_env��� �� c� ��� ������/�english_close_env��� �� e����>������)�������� UTILITIESCompaq C V6.5-001��0�01�create_s��0�&�� +� +� +� -����P������1�lose_s��� �� 2� ��� ������4� in_grouping���G�� 5� 5� 6� 7� 7� 7� 9� �������� �4� in_grouping_b�� �G�� ?� ?� @� A� A� A� C� ���������4� out_grouping���'�� I� J� J� O���������0�4�out_grouping_b��0�'�� S� T� T� Y����������p4�in_range���.�� ^� _� _� `� c����p�����@�`4� in_range_b��@�.�� g� h� h� i� l����p������P4� out_range���&�� p� q� q� u����p����� �@4� out_range_b�� �&�� y� z� z� ~����p�������4�eq_s���O�� � � � � � � � �, � ��������P�3�eq_s_b��P�O�� � � � � � � � �, � ��������� 4�eq_v��� �� � �������� �3�eq_v_b�� � �� � ��������0�3� find_among��0��� � � � �  � � � � � � � � � ��� � � � � � � � � � � � � � � �m�� � � � � � � � �@ ����@����p �p3� find_among_b��p ��� � � � �  � �  �  � � � � � � ��� � � � � � � � � � � � � � � � �Z�� � � � � � �@ ����p����#��2� increase_size��#�I�� � � � � � 2� 2� �( ���8$�� �������v����8$����L$�������$�����������$�2� replace_s��$�S�� � � � � � � � � �,���0����%�H2� slice_check��%�9�� � � � � � $���������&�3� slice_from_s��&��� *� *� ,� ���p�����&�P3� slice_from_v��&� �� /� ���������'�03� slice_del���'� �� 4���������'�2�insert_s��'��� 7� 7�,��������'�2�insert_v��'��� =� =� =�$��������(�2�slice_to��(�!�� C� E� G�4��������(�(2� assign_to��(� �� M� M� N� ��������`)�`1�debug��`)�^�� W� U� U� `� b� Z�  f� f� f� f����x����'��������STEM_FICompaq C V6.5-001��*�4�r_mark_regions��*��� � � � � � � � � � � � � � ��� � � � � � � � � � � � #� ��0 ����������������r_R2�����������������r_particle_etc����������������� r_possessive���������-�p5�r_LONG��-�$�� z� z� z� {� ���P������.�6�r_VI���.�#�� � � � �(��������.� 6�r_case��.��� � � � � � � � � � � � � �X�� � � � � � �,���������������r_other_endings����������������� r_i_plural����������������� r_t_plural���������@2�5�r_tidy��@2��� %� #� "� "� #� "� "� )� '� '� ,� ,� ,� .��� 4� 4� 7� 6� 9� :� =� =� ?� A� C� B� C��� G� G� M� M� O� R� S� X� V� V� \� `�H�� a� [� ]� ]� a� f� f�(��� ����`6�H6� finnish_stem��`6��� o� n� r� 5�< 5�> 0�D 5� 0� 2� 8� 7� (� =�6 K���) K� M� S� R� X� X� \� b� d� k��� o� s�  � � � � � � � � ��� � � � � � � � � � � � ��� � � � � � � �� � �� � � � �[�� � � � � �y �4 ���6�� ��b��y�� ���,7�� ��G��A����� ���'�v����6����6����6����6���������� ���7�� ����~���v����7����7�8�����P�� ���9�� ��>�����v����9� ���9����:���������� ���:�� ��d����?�v����:����:����:� ���;�0���<;����D;����P;�$��������� ���;�� ������'�v����;����;����;����;�t���������� ����=�@5�finnish_create_env��=� �� � ��� �����=�5�finnish_close_env��=� �� ���������)�������� METANAMESCompaq C V6.5-001"��=�P7�add_default_metanames��=��� .� .� .�(��������P>�6� addMetaEntry��P>�-�� .� .�  .� ����������������create_meta_entry���������0?�6�addNewMetaEntry��0?��� .� .� .�  .�  .�  .� .� .� .� .�  .� .� �� .�, ���8?�� ����.��7�v����8?����D?����p?����?�D���?����?�������������P����@�8�ClearInMetaFlags��@�6�� .� .� .� .�4 .� .� .���������0A�8�init_property_list��0A�s�� /� /� /� /� /� /� /� /� /�  +/�(���p��%��B�8�getMetaNameByNameNoAlias��B�/�� F/� B/� G/�8 F/�0 J/� H/���������C�p8�getMetaNameByName��C�=�� W/� S/� X/�8 W/�0 ]/� Y/� Y/� Y/��������D�`8�getMetaNameByID��D��� h/�, h/� k/����p���%��E�@8�getPropNameByNameNoAlias��E�/�� x/� t/� y/�8 x/�0 |/� z/����������F� 8�getPropNameByName���F�=�� /� /� /�8 /�0 /� /� /� /��������G�8�getPropNameByID��G��� /�8 /� /����p�����G�7� is_meta_entry��G�&�� /� /� /� /����P�����G�7�freeMetaEntries��G�P�� /� /�  /� /� /� /� /�0���0�����I�7�isDontBumpMetaName���I�O�� /� /� /� /� /� /�( /� ��� ��"�� J�x7�properties_compatible�� J� �� 0���������'��������DB_READCompaq C V6.5-001��@J�8� initModule_DB��@J� �� /� ��� �����`J�P=� freeModule_DB��`J� �� /� ��� �����J� =� read_worddata��J��� 0�K 0� 0�K 0�K 0�H 0�[ 0�[ 0�X 0� 0�P #0�N $0�R &0���0 ���K�� ��R��&0�������� ���@K�� ����$0���v����@K����HK� ������(��� ���K�� ��R��0���v����K����K� ���$K�������$��� ���J�� ��S��0����� ��� ���J�� ����0��'�v����J����J����J����J�������`������P����K�<� read_header��K��� M1� =0� =0� =0�* =0�t 0� =0�( H0�  H0�] 0��� f0� c0� a0� ^0� \0� Y0� W0� T0� J0� R0� R0� W0� W0� \0� \0� a0��� a0� f0� f0�  w0� 0���$ H0� 0�T ���R�� ����0�������� ���Q�� ����0�����$��� ���lL�� ����G0�����(��� ���K�� ��i��E0��'�v����K����K����(L����dL���������������(��pR� <�parse_MetaNames_from_buffer��pR��� 0� 0� 0�  0� 0� 0� 0� 0� 0� 0� 0� 0� 0�P�� 0� 0� 0� 0� 0� 0� 0�L��� ��'��T�<�load_word_hash_from_buffer��T�u�� 0� 0� 0� 1� 1� 1� 1� 1� 1� 1� 1� 1� <���P��,��U�;�parse_integer_table_from_buffer��U�^�� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1�4������!��V�;�getTotalWordsPerFile��V� �� 71���� �����V�;�DB_Open��V� �� B1� ��� �����V�;�DB_Close��V� �� G1� ��� ������W�;�DB_InitReadHeader���W� �� M1� ��� ����� W�`;�DB_ReadHeaderData�� W� �� R1�0���0�����PW�@;�DB_EndReadHeader��PW� �� W1� ��� �����pW�p9�DB_InitReadWords��pW� �� ^1� ��� �����W� ;�DB_ReadWordHash��W� �� c1�0���0���*��W�P9�DB_ReadFirstWordInvertedIndex��W� �� h1�0���0���)��W�9�DB_ReadNextWordInvertedIndex��W� �� m1�0���0����� X��;�DB_ReadWordData�� X� �� r1�0���0�����PX�09�DB_EndReadWords��PX� �� w1� ��� �����pX�:�DB_CheckFileNum��pX� �� }1� ��� �����X�:�DB_ReadFileNum��X� �� 1�0���0���#��X�:�DB_InitReadSortedIndex��X� �� 1� ��� �����X�:�DB_ReadSortedIndex��X� �� 1�0���0�����Y�`:�DB_ReadSortedData��Y� �� 1�0���0���"��@Y�@:�DB_EndReadSortedIndex��@Y� �� 1� ��� ���!��`Y� :�DB_ReadPropPositions��`Y� �� 1�0���0�����Y��:�DB_ReadProperty��Y��� 1� 1� 1����@�����Y�9� getfilewords��Y��� 1� ^1�c 1� 1� ^1�U ^1�k h1�a h1�b 1� h1�f w1�W w1�Z w1�Z 1��� 1� 1� 1� m1�x m1�y 1� m1�} 1� 1� 1� 1� m1�&�� m1� m1�} @ ���0\�� ����1���v����0\����P\����X\�������D��� ���d[�� ����1���v����d[� ���t[����[�������4��� ���Z�� ��R��1���v����Z����Z����Z�������$��� ���`Z�� ����1���v����`Z����pZ����Z�������<��� ���Y�� ����1���v����Y����4Z����HZ�����������������+�������� SWISH_WORDSCompaq C V6.5-001��\�=� print_swline��\� �� 0�������#���]�@�initModule_Swish_Words���]�7�� 0� 0� 0� �1� 1�(������#��]�@�freeModule_Swish_Words��]�/�� 1� 1� 1� 1� ������!��^�>�isSearchOperatorChar��^�!�� 1� 1� 1� 1����0�����@^�>� next_token��@^��� 41� .1� .1� .1� 91� 71�  A1� B1� M1� M1� V1� D1� D1�T�� _1� D1� D1�" g1� 1�L���������������next_swish_word�����������������parse_swish_words���������b�>�replace_swline��b�b�� 1� 1� 1� 02� 02� 02���������������� checkbuzzword�����������������fudge_wildcard�������"��c�x>�isBooleanOperatorWord��c�+�� \2� \2� \2�,����������������isBooleanOperator�������"����������switch_back_operators�������"��d�?�tokenize_query_string��d��� 2� 2� 2�  2�  2� 2� 1�  2� 2� 2� 2��� 2� 2�" 2� 2� 2� 2� 2� 2� 3� 3� 2��� 62� ;2� >2� B2� 2� 1� 1� 1� 1� 1� 1� 1� 1��� 1� 1� 1�  1� 1� 1� 1� 1� 1� 1�z�� 1� 1�. 3� 2�M N2� N2� N2� N2� 13� T ���k�� ����63���v����k����k����k���������� ���e�� ����3�� ���@h�� ����1�����D���v����e����h������X�� ���g�� ����3���v����g����g����g�<������p������0����l�`@�parse_swish_query��l��� Y3� Y3�  Y3� Y3�K e3�H 3� r3�? 3� 3� 3� 3� 3� 3� 3��� 3� 3� 3� 3� 3� 4��� 4� 4� :4� @4� 3� [4� [4� ^4� u3� u3��� u3�P |3� 2� r2� r2� r2� s2� s2� x2� 2� 2� %5��� .5� 75� 75� 95� =5� #5� s4� r4� x4� x4� {4� |4� �� }4�  4�  4� 4� 4� 4� 4� 4� 3�7 4� 4� 4� v4���& 4� v4� 3�7 4� 3� 4� 4� 4� 4� 4� 4� 3�Z�� 4� 3�L 3�L 3�P 4� 4� 4� 4� 4� 4�  4� 4�W�� 4� 4�+ 5� 5� 5� 4�1 5� 5� 3� ���`u�� ��m��3�� ���u�� ����4���v����u����u����u��������������� ���s�� ��O��3��'�v����s����t� ���t����t�������T�� ���r�� ��,��3��'�v����r� ��t�p���t����t��������� ���q�� ����3�������� ���8q�� ��R��3�� ���@q�� ��*��2���v����@q����Lq����Tq�`������t����v����8q����@q���������� ���(m�� �����s3���v����(m����8m� ���Hm�T�����t�����p ����0w�P>�isrule��0w�!�� 3� 3� 3� ��������w�=� isnotrule��w�!�� 3� 3� 3� ���0���"����������ignore_words_in_query����������������� fixmetanames�����������������fixnot1�����������������fixnot2����������������� expandphrase�������!��w�=�stripIgnoreLastChars��w�]�� N5� N5� N5� U5� U5� U5� U5�  U5� , ^5������"��y�=�stripIgnoreFirstChars��y��� o5� i5� o5� o5� o5�  5� 5� 5� 5� 5� 5� 5�>�� 5� 5� 5� 5� 5� 5��������'��������STEM_FRCompaq C V6.5-001��p{�0A� r_prelude��p{��� r� r� v� v� y� {� |� � � � � � �>��� � � � ~� t� ! v�* � t� v�* � � t�* � t� ;��  v�* � � t�* �4���P����~�B�r_mark_regions��~��� � � � � � � � � � � � � � ��� � � � � � � � � � � � � �2�� � � � ����P������������ r_postlude�����������B�r_RV��� �� ���� �����0�B�r_R1��0� �� ���� �����P�A�r_R2��P� �� ���� �����p� B�r_standard_suffix��p��� � � !� $�0 ,� .� .� 1� 3� 7� 7��� O� N� R� X� Z� _� `� d� {� z��� ~� � � � � � � � � � � � � ��� � � � � � � � � � ��� ������������r_i_verb_suffix����������������� r_verb_suffix�����������������r_residual_suffix����������������� r_un_double����������������� r_un_accent���������P�B� french_stem��P��� � � ^�$ ^�' � � � � � ��� � � �  �  �  � � � � � !�p *��� )� ,� +� .� 4� 4� 6� 4� 6� 8� =� B��� F�  M�  P� S�D � � � �  ^�Y ^��� b� _� b�W l� j�R l� l�  r� u� t� y� }�E � �C�� � � � � �4 ����� ��M�����v�������������,�����P�� ���؍�� ��'�����v����؍�������������� ���܏�� ��q�����v����܏����������p������� ����� ������'�v������������8����T�P�������� ����� �������v����� ���Г���������� ����� ��5������������������A�french_create_env��� �� � ��� ������A�french_close_env��� �� ���������'��������STEM_DECompaq C V6.5-001��0��C� r_prelude��0��� _� ^� _� c� e� i� j� `� x� z� |� }� � �a�� � x� � v�  x� � v� x� �4���p������������r_mark_regions����������������� r_postlude����������C�r_R1��� �� ���� ������C�r_R2��� �� ���� ������C�r_standard_suffix����� � � � � � � � � � � � � ��� � � � � � � � � � �  � ��� � � � � !� &� &� *� )� *� .� 7�z�� ;� B� A� G� U� T� X� Z� Z� f�,��������HD� german_stem����� l� k� l� � � � � � � � � � � ��� � � � � � � � v� � � �%�� �$ ���Ȟ�� ����s���v����Ȟ����ܞ� ������������ ������ ���������0���������`�C�german_create_env��`� �� � ��� ������`C�german_close_env��� �� ���������$��������RANKCompaq C V6.5-001���D�build_struct_map���6�� .� .� .� .� .� ���p������D�getrank����� .� .� .�  .� .� .� .�  .�  .�  .� .� .� .��� .� .� .� .� /� .�  /� /� /� /� /� /� ��$���L����)�������� DB_NATIVECompaq C V6.5-001 ��`�E�initModule_DBNative��`��� 92� 92� 92� =2� A2� ?2� L2� J2� G2� J2�  P2���  S2�  P2� S2� c2� `2� _2� ^2� a2� _2� l2� i2� h2�K�� i2� u2� t2� s2� o2�  q2� s2�(����� �� �`O�freeModule_DBNative�� �)�� 2� 2� 2� 2�(����������������DB_CheckHeader����������N�newNativeDBHandle����� 2� 2� 2� 2� 2� 2� 2� 2� 2�  2�  3�(������!���F�openIndexFILEForRead��� �� 3� ��� ���)���M�openIndexFILEForReadAndWrite��� �� 3� ��� ���"����������openIndexFILEForWrite���������Щ�N�CreateEmptyFile��Щ�G�� 3� 3� 3� 3� 3� "3� &3� &3� ���ԩ�� ����#3��'�v����ԩ��������� ��� �������<������������������� is_directory���������`�O�DB_Create_Native��`��� 73� -3�  -3� ( -3� /3� /3� /3� I3� H3� I3� J3� J3� M3� P3��� 3�E Z3� Z3� ]3� c3� h3� 3�P 3�Q l3�\ o3� o3�W 3��� 3� 3� 3�@ 3� 3� 3� 3�H 3� 3� 3� 3� 3� 3�H 3� 3� 3�6�� 3� 3� 3� 3� 3� 3� ����� ����m3���v������������������ ����� ����[3�������� ���d�� ����C3��7�v����d����l������������Ī����Ԫ� ������|������P�����`N�DB_Open_Native����� 3� 3� 3� 3� 3� 3� 4� 4� 4� 4� 4� 4� 4��� 4� 4� 2�y 2�z 2� 2� 2�  2�  2� 2� 2�. 2��� 2� 2� 2� 2� 2� 2�( 4�) 4� 4� 4� 4� 4�"'�� 4�# 4� 4� 4�0 ���d�� ���4���v����d����� ������@��� ����� ���4���v��������� ������@��� ���@�� ����|4�� ���0�� ���2���v����0� ���@�(������8��� ����� ���2���v�������������������<��� ���t�� ���2���v����t����|�0������8���'�v����@����L����T�����������d�����@��!���F�DB_Close_File_Native����� 4� 4� 4� 4� 4� 4� 4� 4� 4� 4� 4� 4� �� $���p����`�M�DB_Close_Native��`��� 4� 4� 4�E 4�= 5� 5� 5� $5� $5� %5� .5� 05� 05� �� 05���������M�DB_Remove_Native���?�� 35� 35� 35� 35� =5� =5� =5� ������&���hM�DB_InitWriteHeader_Native���7�� K5� G5�  G5�  G5� Z5�������%�� �0M�DB_EndWriteHeader_Native�� �7�� ^5� ^5� ^5� d5� d5� g5�������&���M�DB_WriteHeaderData_Native���?�� j5� j5� j5� r5� r5� v5�$������%���L�DB_InitReadHeader_Native���(�� z5� z5� z5� 5����`���%���L�DB_ReadHeaderData_Native���e�� 5� 5� 5� 5� 5� 5� 5� 5� 5� ������$���L�DB_EndReadHeader_Native��� �� 5� ������%����L�DB_InitWriteWords_Native����1�� 5� 5� 5� 5� 5����`�����`� L�cmp_wordhashdata��`� �� 5���� ���$���0L�DB_EndWriteWords_Native����� 5�" 5�" 5�" 5� 5� 5� 5� 5�  5�  5� 5�  5�  5��� 5� 5� 5� 5�  6�  6� 6� 6� 6� 6� 6�;�� 6� !6� %6� %6� *6�,����� ��@�K�DB_GetWordID_Native��@�N�� 66� .6�  66� .6�  .6�  66� ;6� >6������� ��п�K�DB_WriteWord_Native��п�H�� C6� V6� R6� Y6� ^6�4��� ��$���K�DB_WriteWordData_Native����� l6� c6�  l6� c6� c6�  c6� u6� }6� }6� }6� }6� 6� 6�D�� 6� 6� 6� 6� 6� 6� 6�,�����$��� K�DB_WriteWordHash_Native����� 6� 6�  6� 6�  6�  6�  6� 6� 6�H 6� 6� 6� 6��� 7� 7� 7� 7� 7� 7� 7�$ 7� 7� #7� ��� ��$���K�DB_InitReadWords_Native��� �� )7� ������#����K�DB_EndReadWords_Native��� �� .7� ������#���J�DB_ReadWordHash_Native����� 27� 27� 27� 27� C7� I7� N7� P7� O7�X Q7�Y S7�X 9�;�� U7�V U7� U7� U7� a7� ����� ���T7���v�����4���L�������<��� ����� ���S7���v�������������������@��������1���J�$DB_ReadFirstWordInvertedIndex_Native����� d7�  d7�  d7�  k7� d7�  q7� 7� 7� 7�! 7�" 7�|�� 7�" 7�  7� 7� 7� 7� 7� 7�  7� 7�( ���\�� ���7���v����\�0����������8��� ����� ���7���v�������� � ���8� ������D���������0���hJ�#DB_ReadNextWordInvertedIndex_Native����� 7� 7�  7� 7� 7�  7� 7�  7� 7� 7� 7� 7� 7�z�� 7�  7� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7� ���`�� ���7���v����`�4����������<��� ���$�� ���7���v����$����@�������8������@��#���HJ�DB_ReadWordData_Native���[�� 7� 7� 7� 7� 7� 7� 7� 7� 7�(������#���8J�DB_WriteFileNum_Native��� �� ]8� ������"�� �(J�DB_ReadFileNum_Native�� � �� o8� ������#��0�J�DB_CheckFileNum_Native��0� �� z8� ������$��@�J�DB_RemoveFileNum_Native��@� �� 8� ������+��P�I�DB_InitWriteSortedIndex_Native��P�)�� 9� 9� 9� 9����`���'���I�DB_WriteSortedIndex_Native����� "9� "9� "9� "9� 79� 79� ;9� >9� ;9� >9� D9���,�����*��p�I�DB_EndWriteSortedIndex_Native��p�F�� K9� H9� K9� H9� K9� P9� P9� S9�������*���I�DB_InitReadSortedIndex_Native��� �� Y9� ������&�� �`I�DB_ReadSortedIndex_Native�� ��� \9� \9� `9� \9�E g9�D g9�  u9�2 y9�2 y9� l9� }9� n9� n9�,�� o9� q9� q9� s9�$ ����� ���y9���v�����0���<�������8��� ����� ���f9���v�����4����������<��������%����PI�DB_ReadSortedData_Native������ 9� 9���� ���)�� �@I�DB_EndReadSortedIndex_Native�� � �� 9� ��������0�H� printlong��0�8�� 9� 9� 9� 9� 9� 9�$���������G�readlong����� 9� 9����p���*��P� I�DB_InitWriteProperties_Native��P�1�� 9� 9� 9� 9� 9����`���$���H�DB_WriteProperty_Native����� 9� 9� 9� :� 9� 9�  9� 9� 9� :� :� :�=�� ":� /:� -:� 9:� 9:� ,������)���H�DB_WritePropPositions_Native���b�� Y:� Y:� Y:� \:� Y:� m:� k:� n:�  }:�  }:�@�����(���G�DB_ReadPropPositions_Native����� :� :�  :� :� :�  :� :� :� :�  9� 9� :�, ����� ���:���v��������� ������@������`��#�� �H�DB_ReadProperty_Native�� ��� ;� :� :� :�  :�  :� :� :�  ;� ;� ;� !;� #;�M�� #;� ,;� 2;�  ?;� B;� B;�8���P��/��p�G�"DB_Reopen_PropertiesForRead_Native��p�T�� R;� R;� R;� U;� V;� 3�L \;� \;� \;� ����� ����];����������������'��������STEM_ITCompaq C V6.5-001��@�O� r_prelude��@��� � � � � � � � �# � � �}�� � � � � � � �  � �� � � �4���`�����P�r_mark_regions����� � � � � � � � � � � � � � ��� $� %� '� *� '�  1� 3� 4� 6� 9� 6� >� @��� I� M� P� M� T� W� T� Z� \� _� \� c� f��� c� m���������������� r_postlude���������p�`P�r_RV��p� �� ���� �������������r_R1����������pP�r_R2��� �� ���� �������������r_attached_pronoun����������P�r_standard_suffix����� � � � � � � �F � � ��� � � � � � � � � � �8 ���p�� �������������������������� r_verb_suffix�����������������r_vowel_suffix���������0��Q� italian_stem��0��� N� M� � Q� � � � � � � � � ]��� �@ � &� %�< 4�4 4� 3� 5� 8� :� @� C�\��) u� t� w� � ~� {�>� s� t� v�( ���t�� ���\���v����t������������������ ����� ��O�f���v���������|��������� ���$�� ��s�m���v����$����,�������� ����� ��4�s���v��������������������������0P�italian_create_env��� �� y� ��� �������P�italian_close_env��� �� {���������'��������STEM_NOCompaq C V6.5-001��0�0Q�r_mark_regions��0��� a� `� `� `� `� c� d� d� i� d� e� m� p� m��� s�0 p���������������� r_main_suffix�����������������r_consonant_pair�����������������r_other_suffix����������Q�norwegian_stem����� � � �G �G � � �  �  �  �  �  � ��� �D �. � � � � � � � �* � �L�� � � � � � � �0 ����� ��{����v����� ���,����8���������� ����� ������v��������4�x��������� ����� ������v���������x��������������!���Q�norwegian_create_env��� �� � ��� ��� ���Q�norwegian_close_env��� �� ���������(��������STEM_EN1Compaq C V6.5-001���@R�r_shortv����� � � �(����������S�r_R1��� �� ���� ������R�r_R2��� �� ���� ������������� r_Step_1a����������������� r_Step_1b����������������� r_Step_1c�����������������r_Step_2�����������������r_Step_3�����������������r_Step_4����������������� r_Step_5a����������������� r_Step_5b����������S� porter_stem����� � � � � � � � � � � � � � ��� � � � � � � � � � � � ��� �� � �� � � � �5 �5 � � � � ���4 �% � � � � � � � � � ��� � � � � � � � � �# -� +� 0� 4��� 6� 9� 6� C� B� C� F� C� E��� z� y� z� {�  |�  ~� � � � � � ��� � � � � � � � � � � �y�� �s � � � �v ;� B� ?�  C� C� I� B� E��� D� U�0 ���h�� ��g"����v����h����p�������������� ��� �� ��"����v���� ����<� �����(�� ���L�� ��"����v����L����h���������� ���H�� ��"�$���v����H����d����p� �����H�� ������ ��"�)���v������������������������� ���`�� ��#�.���v����`������������������ ���H�� ��$#�3���v����H����h����p�l��������� ����� ��D#�8���v����������T������t������ ����P�R�porter_create_env��P� �� X� ��� �����p�R�porter_close_env��p� �� Z���������'��������STEM_PTCompaq C V6.5-001���S� r_prelude���`�� � � � � � � � � � �(���P�����T�r_mark_regions����� � � � � � � � � � � � � � ��� � � � � �  � � � � � � � ���� � � � � � � � � � � � #� &��� #� -���������������� r_postlude��������� �pT�r_RV�� � �� N���� �������������r_R1��������� �T�r_R2�� � �� X���� ����� �T�r_standard_suffix�� ��� \� \� \� a� S�! x� w� y� {� ~� ��� � � � � � � � � � ��0 ��� �� ��x-�v����������� ������������ r_verb_suffix�����������������r_residual_suffix�����������������r_residual_form����������0U�portuguese_stem����� � � �+ � �/ �X � � � �P ���Z � � � � �C .� .� 2� 1� 2� 4� 4� 6��� �O � � � � � � � � � � � � ��� � � � � � � �: 5� 4� 7� A� >� ;� 3��� 4� O�( ����� ��!/�,���v���������|��������� ���,�� ��E/�?���v����,����4�l������t��� ���T�� ��m/�F��'�v����T����t����P����X�������� ����� ��&-�L���v�����������������������"�� �@T�portuguese_create_env�� � �� R� ��� ���!��@�T�portuguese_close_env��@� �� T���������'��������RAMDISKCompaq C V6.5-001��`�PU�ramdisk_create��`�O�� ),� ),� ),� -,� 1,� .,� 3,� 5,�(��������P�V� ramdisk_close��P�*�� 9,� 9,� 9,� @,����������U�add_buffer_ramdisk���6�� E,� C,� C,� C,� C,� E,�$���������xV� ramdisk_tell��� �� N,� ���������U� ramdisk_write����� S,� S,� S,� S,� [,� [,� W,� a,� c,� d,� _,�  k,� ��4�������P�XV� ramdisk_seek��P�M�� ,� x,� x,� ,� ,�< ,� ,�$ ����� ��7�,���������������� �V� ramdisk_read�� ��� ,� ,� ,� ,�  ,� ,�  ,� ,� ,� ,�$ ,� ,� ,� ,��� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,��� ,� ,�0�������0�8V� ramdisk_getc��0�'�� ,� ,� ,� ,� ���P������U� ramdisk_putc���.�� ,� ,� ,� ,� ,����H�����'��������STEM_RUCompaq C V6.5-001���V�r_mark_regions����� =� <� <� <� <� >� <� <� ?� A� D� A� G� I�b�� L� I� P� S� P� W� Z� W� _�$���@������������r_R2������� ����������r_perfective_gerund����������������� r_adjective����������������� r_adjectival����������������� r_reflexive�����������������r_verb�����������������r_noun�����������������r_derivational����������������� r_tidy_up��������� �W� russian_stem�� ��� � � l� l� l� k�  o�  n�  r� r� v� v���3o �r � � �k � � �  � � � ��� �  �  �  � � �j �m �  �  �  ��� � � �] �T �W �W � � �Y =� B��� � �[ � e� � e� �V �M � � � � � �4�� � � � �K Q�0 ���h!�� ��:�*���v����h!� ���|!� ���!�<������`��� ���<$�� ��Q:�7��'�v����<$����L$� ���\$����d$�@������h��� ���8#�� ��4:�3���v����8#� ���P#� ���d#���������� ���!�� ��9�/�� ���!�� ��9���'�v����!����!�����"����"�$������X����v����!����!�����"�8�����\�� ���T �� ��9�%��'�v����T ����\ � ���p � ��� ��������� ���%�� ��n:�I�� ���8%�� ��9����v����8%����P%������� ����v����%����(%�L������p��� ���|%�� ��:�N���v����|%����%������(���������&�PW�russian_create_env��&� �� W� ��� ������'� W�russian_close_env���'� �� Y���������'��������SOUNDEXCompaq C V6.5-001�� '�W�soundex�� '��� $3� $3� $3� &3�$ ,3� K3�  S3�  ]3� ]3� ]3�  i3��� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3�J�� 3� 3� 3� 3�  3� 3�4�������'��������STEM_ESCompaq C V6.5-001��@*�X�r_mark_regions��@*��� � � � � � � � � � � � � � ��� � � � � �  � � � � � � � ��� � � � � � � � � � � � "� %��� "� ,���������������� r_postlude���������/�0Y�r_RV��/� �� V���� �������������r_R1���������0/�@Y�r_R2��0/� �� `���� �������������r_attached_pronoun���������P/�PY�r_standard_suffix��P/��� � � � � � � [�W � � � ��� � � � � � � � � � ��� �( ���1�� ��AD������������p������������r_y_verb_suffix����������������� r_verb_suffix�����������������r_residual_suffix���������5�Y� spanish_stem��5��� _� ^� g� g� f� h� i� k� o� s� w� {� ��� � i� �e � � � N �Q � ��� %� $� *� *� ,� .� .�D @�8 ?� B� J��� L� P� O� P� R� R� F� F�8 2� 3� 6� I��� 1�R �$ ����6�� ��D�h���v�����6� ���6����(6��������� ���8�� ��OF�v���v����8� ���8� ���8� �����D�� ���8�� ��)F�r���v����8����<8���������� ��� :�� ��sF�}���v���� :����<:�X�����t�� ���;�� ��C������0�����@�����=��Y�spanish_create_env���=� �� � ��� ����� =�X�spanish_close_env�� =� �� ���������'��������STEM_SECompaq C V6.5-001��@=�Y�r_mark_regions��@=��� p� o� o� o� o� r� s� s� x� s� t� |� � |��� �0 ���������������� r_main_suffix�����������������r_consonant_pair�����������������r_other_suffix���������>�Z� swedish_stem��>��� � � �I �I � � � � � � � � ���F �4 � � � � � � # �# � � �L�� � � � � � � �, ���,?�� ��fK����v����,?� ���<?����H?���������� ���?�� ��K����v����?����@�l��������� ���@�� ��K����v����@� ���@����@�����������������A�pZ�swedish_create_env��A� �� � ��� �����A�@Z�swedish_close_env��A� �� ���������+�������� SWISH_QSORTCompaq C V6.5-001��A��[�swapfunc��A��� � �� � �������pD�[�med3��pD�)�� � � �D �(�������E�0[� swish_qsort��E��� � � � � � �% �& � � � � � � ��� �  � �  �  �  �   �  � ��� �  �  �  �  �  �  �  �  � " � ! � $ � & � & ��� �? �> �B �B �/  �  �  �  �  �  �  �  �  �U��  �  �  �  �  � � �0 � � �CP�������(��������COMPRESSCompaq C V6.5-001��L�`[� sizeofcompint��L�<�� 5� 5� 5� 5� 5� 5� ���`�����L�]� compress1��L�w�� 5� 5� 5� 5� 0 5� 5�$ 5� 5� 5� 5� 5� 5� 5��������N�]� SW_compress2��N�G�� 5� 5� 5� 5� 5� 5� 5�  �������� O�p[� compress3�� O��� 5�  5� 5�$ 5� 5� 5� 5� 5� 5� 5� 5� 5�0 5� 5� 5� 5��� 5����P����pQ�]� uncompress1��pQ�6�� 5� 6� 6� 6� 6� ���������R�[� uncompress2���R��� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6����������S�p]�PACKLONG��S�*�� -6� '6�  -6� -6� ���P�����`S�`]� PACKLONG2��`S�*�� =6� =6� =6� D6���������T�P]� UNPACKLONG��T�%�� O6� O6� O6� U6� ���P�����`T�[� UNPACKLONG2��`T��� ^6� e6�������%��T�\�compress_location_values��T��� 6� 6�  6� 6� 6� 6�  6� 6� 6� 6� 6�` 6�F�� 6� 6� 6� 6� 6� ,�����(��W�\�compress_location_positions��W��� 6� 6� 6� 6� 6� 6� 6� 6� 6� 7� 7�0 7�o�� 7� 7� 7� 7� 7� 7� 7�P 7�8 7� 7� 7� 7�, 7����������������compress_location�������'�� [�0]�uncompress_location_values�� [�H�� \7� Z7� Z7�  Z7� `7� k7�������*��[�]�uncompress_location_positions��[��� |7� y7� y7� y7� y7�  y7�  y7� |7� y7� 7� � 7� 7� 7��� 7� 7� 7� 7� 7� 7� 7� 7� 7�4 7� 7� 7� 7��� 7� 7� 7� 7�d 7� 7� 7� 7� 7� 7� 7� 7� 7� 7�c�� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7������$��`�\�CompressCurrentLocEntry��`��� 7� 7� 7� #7�  57� 27� .7� .7� 27�  :7� K7� K7�6�� S7�{ 7� 7� 7� D ���`�� ��X�7���v����`����`�4�����H����� ����b�P\�compress_worddata��b��� 7� 7�  7�  7� 7� 7�  7� 7� 7� 7� 7� 7��� 8� 8� 8�$���`�� ���d�[�uncompress_worddata���d�d�� 8� 8� 8� 8� 8� 8� 8� 8� 8� %8�,������"��d�[�remove_worddata_longs��d�Y�� J8� [8� a8� d8� k8� k8�,���4����0��������DOUBLE_METAPHONECompaq C V6.5-001��0f�]� NewMetaString��0f�o�� +6� +6� .6� .6� 06� 46� 76� 56� 96� <6� ?6�(��� ����Pg�p^�DestroyMetaString��Pg�E�� G6� D6� I6� D6� I6� L6� L6� L6���������h�^�IncreaseBuffer��h�7�� S6� Q6� Q6� Q6� Q6� S6� ��������h�_� MakeUpper��h�$�� ^6� Z6�0 ^6� ^6�(��������`i�_�IsVowel��`i� �� j6� n6� k6� ���p�����i� _� SlavoGermanic��i�'�� w6� w6� w6�$��������j�d� GetLength��j� �� 6� ��������j�^�GetAt��j��� 6� 6� ���P����� k�^�SetAt�� k� �� 6����@�����`k�p_�StringAt��`k�;�� 6� 6�  6� 6� 6�0 6���������`l�^� MetaphAdd��`l�E�� 6� 6� 6� 6� 6� 6� 6�0��������0m�`b�DoubleMetaphone��0m��� 6�  6�  6�  6�  6� 6� 6� 6�' 6� 6� :��� :� :� :�8 :� 6�I 6�I 6�H 7� 7� 6� �� "7� $7� #7� "7� "7� %7� "7� &7� "7� "7�( 17� F7��� F7�$ P7� R7� R7� R7� P7� P7� W7�% ]7� ]7� a7� ]7� c7��� ]7� e7� ]7�  h7� h7� ]7� p7� r7� 7� l7� k7� k7� 7��� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7� 7��� 7� 7� 7� 7� 7� 7� 7� 7� 7��� 7� 7� 7� 7� 7�  8� 8� 8� !8��� !8�  #8� #8� &8� *8� *8� 28� 28� 28�( 28� 28� 28� �� C8� D8� B8� D8� D8� B8�  P8� J8� K8� J8� X8�  Z8� Z8��� c8� b8� b8� s8� ~8� }8� 8� 8� 8� }8� 8��� 8� 8�, 8� 8� 8� 8� 8�! 8�, 8� 8� 8� 8� 8���$ 8� 8� 8�  8� 8� 8� 8� 8� 8�  8�, 8� 8� 8��� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8� 8��� 8�$ 8� 8�/ 9� 9� 9� 9� 9� 9� 9�$ 9�$ 9� 9��� #9� 09� 29� 09� 09� 49� @9� @9� L9� N9��� U9� V9� a9� a9� h9� h9� h9�$ h9� r9�( 9��� 9� 9� 9� 9� 9� 9� 9� 9� 9�4 9�$ 9� 9��� 9� 9� 9� 9�  9� 9� 9� 9� 9� 9��� :� 9� 9� 9� 9�\ :� :� :� 2:��� !:�$ !:� !:� %:� %:�  =:� =:� L:�( L:� _:��� `:� `:� _:� _:�  d:� d:� y:� y:� y:� :� :� :�W�� :� :� :� :� :�  :�  :� 6����%����#��������APICompaq C V6.5-001�� �d� SN_create_env�� �h�� � � � � � � � � � � �<���p�����Pe� SN_close_env���3�� � � � � ���� ����� e�SN_set_current��� �� � � ����X�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������e������p����!������h6��@h���p� ������o'�������@E�h�� j�r��� �������&-�� �����J���j��� ��������7�� �����p^�%��0l����������@��d���'K��������T��l���P������������8��� ���������P��������<��o�x����@��0��������T��L �����0���@p�{��0����� ��@����1`��D����� ���v������ �P��P����uh�������@�<��`z�.��"���`����y��������\ ��}�g���@'� ��p����}����������`)�p���������������H ���~����*�P�������������P�t�� ,�p��@ �����k������4��~�4���-����x���� ��������~����/���� ���� �����0���`�2���01��������� �����*����D���4���#� ���������=�x �����6�@��`.�H���������b�����@J�������8���������'�����\�x��Ё�<���=���Ѝ����:��l �����p{����|���0A���.�����A�����0�d ���0����C���?�������������D����C���������a$�����`�6�����0E�P �������z�����@����H���O���c�H��������0���0Q���`y���!� ���������<���@R���0~�h��*��������� �(���S����8��\3������`�h��PU��������N8�������D ��V�������Q@������ '���W����Ъ� �������A������@*���P�d���X�p���X��sJ������@=�t��Y���P���N�Y�����A� ���[�X��� ����Q� �� ���L����r��`[���0����0��������@����P���� ���������^������0f�,��@����]����P����n�m����� ���d����`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.bin]SWISH-E.EXE������������������������������������)Iގ]�Dݎ]�������������������"����������� �������������������������������������������������������������������������>���������� ��h���������������%�����������������������������������(���ݎ]��������������0�������@�������������������������������������B���t ���������|����������?ݎ]�SWISH-E��������������������������������V1.0�����������A13-00�������������������������������$������������ ���������������$����2�������� ��������������$����D��������� ��������������$������������ ����������������$��������%�����J���;������������$����(�������� ���������������8�������������� �����������LIBZ_SHR32_001�������8�������������� ����������CMA$TIS_SHR_001������8������������������������� DPML$SHR_001���������4����&��������������������� LIBOTS_001�������8������������������������ DECC$SHR_001���������@���� �������������������CESYS$PUBLIC_VECTORS_001������������� �����Px�����+ �����0�����@ �����(�����@s �����n�����V �����g�����p| �����xL�����0�� �������0�����(� �� ����0�����)����� �����P{�����p�����0�����] �����k����� ����������P �����Pt�����0�� ���/�����@�����,�<�� �����d �����0:�����%s ����� �������0�� �� ����� �����$���� �����������?����I��������������%02d:%02d:%02d���A �����6�����C����� �����> �����4����� CPU time: �����Elapsed time: ��%s, ������������P �����H����� �����H�����Indexing done! �����������������p��������������s���������������0 �� ��)�����P�����,�<�� �����k�������������5 ����� .���������������������7 �����3����� �����hH����� �����0H������p �����@�����` ����� I�����` �����@z�����p@ �����6����� �����pG�����a����� ������] ������h�����`U �����f�����` �����pt�����a����������0�����)�����л �����~�����0��"��P �����0�����(� �� ����� �����x�����r �����l������������������� �����n�����@ �����82����� w �����@B�����0�����0����� 0�"��p������������0��"�������@�����(�<�� ������������P8 �����5�����#��������������c �����p:����� (��������������P5 �����.����������p*�����I��������������m �����A�����0��"�� ����������T�?� ����p(��������������%s%s%s����������@N �����`9����� �������dq������ 3����� �����R �����=��������������������INDEX_����������3 �����x.�����` �����[�������������������fs��������������` �����T����� %20s => %s ��� swish -V ���http������������`7 �����p3�����$������������� "��������������)�����0X�� ������������X�� ����)��������������������pp�������������������������������o �����A�����2.4.2�����������0��������������help����index.swish-e���swish-search����a�������SWISH-E %s �����p�������������� usage: ��������P ����������d �����9����������%�����N �����0>�����1�����P ����������`&���������� ����� ���������� ��������������@n�����`�����After indexing��Indexing "%s" ��^����������0@��"�������������@�� ��������������P�����`*�����Pc�����P����� �����V�����px����������0� �����`W�����М �����`����������&�����. ��������������@�����*�����@S �����=�����`e �����9�����# ������%s �����08��"���������P�����0��� ���������������������������������0 ��"��/�����@����� ��� ���������x ���������������0��"��A�����p�����D�� ��������������K �����8�����А����������0��"��`4�����@����� � �� ����0��"��5����������L�� �����������������: �����05����������'����� ��������������J �����8�����0�����)����� (��������������P����������0@��"��P7����������T�� ����`9 �����5�����p(���������������� ����������0�����)�����<=������ �����>=������0�����07�����0�����7�����0��"�� 3�����@�����(��� ������������3 �����x.�����0��"��P2�����@�����$� �� ����9 �����5�����0�� ��1�����0�����$��� ����0�� ��P0�����P�����@��� ����0�����_���������������������0�����^���������������������0��"��\�����P�����4�|�� ����0�����`+�����0�����)�����0�����)�����0��"��Z�����`�����4�� ������������������p(��������������0�� ��0X�����p�����8�� ����0�����^���������������������0P�� ��C����������4��� ���� �����`-�����0�������������(��������������` �����[�����A �����P6�����0������a���������������������0������pa���������������������0�� ���a����� ��������� ����0�����`���������������������0�����`���������������������0�����`���������������������0�����p`���������������������0�����@`���������������������0����� `���������������������0������`���������������������0�����_���������������������0�����_���������������������0�����p_���������������������0�����P_���������������������0�����0_���������������������0������^���������������������0�����^���������������������0�� ��]�����0�����(� �� ���������p*�����0� ��N����� ����X�� ���������p+�����p�����P-�����p� �����+�����0 ����� -����� ������-����� �����x,������ �����,�����0�� ��M�����0�����(� �� ���� �����@,������ �����+�����0 �� ���K����������D�� ���� �����H�����0�� ��`J�����0�����(���� ����0������a��������������������� �����\�����0�����po���������������������0�����o���������������������0�����@o���������������������0�����n���������������������0 ��"��Pq����������L�� ����p(����������������������������0�����)����������p*�����0�����)�����0�����q���������������������0������p���������������������0�����p���������������������0�����p���������������������0�����`p���������������������0�����@p���������������������0�����p���������������������0�����o���������������������0�����o���������������������0�����o���������������������0�����n���������������������0�����n���������������������0�����n���������������������0������`n���������������������0�����@n���������������������0������ n�����0�� ��`m�����P�����,�<�� ���������p+�����0�� ��i�����p�����D�� ����p�������������K �����P8�����0C ����� 7�����7 �����3�����0�� ��l�����P�����4��� ����j �����>�����0p�� ��Pc����������T�� ����0 �����2�����p� �����+�����@ �����2�����  �����(2������ �����[�����0 ��"���b�����`�����8�|�� ���� �����+�����0������a���������������������@ �����`f�����0�� �������@�����<�<�� ����I��������������0�������������p(�������������� "������������������������" ��������������0�����)�����%c������ ...����0�� �������@�����0�|�� ����K �����8���������������А���������� "�������������������x �������B����0(�� ��pt����������\�� ����������� ���������������p��������������**Compressed**��q��������������������0(��"��P�����@����� ��� ����`p����� �����@p�����@�����0�� �������`�����8�� ����ignore��SortKeyLen: %d ���������compare��������� META_INTERNAL�� META_PROP:����� *presorted*����H �����8�����unknown!��������DATE����NUMBER�������8 ����� Freq:%d�������� ������-�����swishdocpath���� %d/%x�� %d����� [%d���� %d (���%s �������������@n�����`�����o����������0 ����� -�����%d/%x�����������o����������n���������������p+�����0�� ��px�����P����T�� ����)�������������po����������@o����������0�����)����� %s������������� �����+�����> �����4�����Pc�����P�����P ����������,%d/%x�� %d�����`n�����@�����)]���������������J �����8����� Meta:%d������� Pos/Struct:���� %s�������������0��"�������0�����(� �� ������������������0�����)�����a����������@ �����82�����л �����~�����0��"�������@�����$�<�� ����P�������������pp��������������Pq�����0�����`9 �����5�����0�� ������� �����(���� ����7 �����3�����0��"�������0����� ��� ����Pc�����P�����@n�����`�����0��"�������@�����(�|�� ����p �����1������o �����A�����@" �����1�����0�� ��p�����P�����,��� ����0�����)�����t ������@�����K �����P8�����`n�����@�����` �����~�����`l �����`>�����a����������0�� �������0����� � �� ����0������А���������������������0�����)�����0�����)�����; �����4�����: �����05�����p(����������������������0��"�������`�����0�� ������������Љ������������� ��������������3 �����x.����� �����`-�����#��������������0��"��P�����P�����(�<�� ����������0 ��"��p�����`�����,�|�� �����������������p*�����0 ��"�������P�����(�<�� ����0��"��������0�����$��� ����7 �����3�����0��"������������,�|�� ����(default)�������K �����8�����0E �����09�����q������������������������0H��"������������P�� ����0��"�������@�����<��� ����'��������������p��������������(��������������0�� �������`�����<�� ����0�� ��������0�����@� �� ����0 ��"��`�����P�����0�<�� ����K �����p8�����Y����swishrank�������swishdbfile�����swishfilenum����swishreccount���0��"�������@�����$��� ������������ � �����@-������J �����8�����`9 �����5�����& ����� 1�����0��#��Й�����0����� � �� ����0��"�������@�����$��� ��������������������w��������������@��������������I��������������%lu�����0��"�������P�����,�|�� ����������(null)��0��"�������@�����(� �� ����0�� ��������@�����8�<�� ����0�� �������0������ �� ������������0�� �������0�����,��� ����3 �����x.�����0�����)�����0��"�������P�����0�|�� ����0�����)�����9 �����5�����������0�����`�����0����������� 0�"�������������� � (��������������=�������0 ��"��`�����P�����(�<�� ����������`9 �����5����������(�����0��"��0�����P�����0�|�� ����0�����������0��"������� �����,���� ����0�����*�����0��"�������@�����0�|�� ����0(�� ��@�����@�����0��� ����0�� ��P�����0�����$��� ���������x �����0x��"������������T�?� �����������������������p*�����0��"�� �����@�����(�<�� ������ ����������8!�����0��"��P�����`�����D�� ������������i �����`?�����0��"�������`�����8�� ����0��"������������D�� ����0 ����� -�����o����������po����������o����������(��������������@o����������o����������0`�"��@���������P�� ���������p+�����p(��������������o����������n�����������` �����Ȏ�����(!������������� �����+����� ������-�����0��"������������P�� ����$�����<or>����<and>���<not>���<andnot>��������<precd>���������0 �����2�����7 �����3�����G �����8�����P7�����P ����������(������p �����@�����swishrank�������asc�������������pp��������������0��"������������T�� �����J �����8�����`�����0*�����resultSort Zone���������desc����A�����@ ����� N �����7����� �����`~�����0�� �������@�����,�<�� ����P0�����p �����0��"��P�����0�����$� �� ����0�� �������`�����<�� ����P�����)���������0����������0�����p�����0�����P�����0�� ��p�����@�����8�|�� ������������p �����1�����m �����A�����@" �����1�����0�� ��в�����0�����4��� �������������������� ��������������0�����������0����������0�� ��0����� �����(���� ����0�����������0�����б�����0 ��"�������`�����4��� ����p����������`p����� �����@p�����@�����0�����)����������p+�����0�����)�����0��"�������p�����<�� ����������������`��������������������������0 ��"������������<�� ���������7 �����3�����@(��������������� ����������0��"�������p�����<�� ����0��"��0�����0����� ��� ����p�������������`"��������������7 �����3�����0��"�������0�������� ����������0����������0������0�����������������������������@"��������������0�� �� �����@�����(�<�� ����0�� ��P�����@�����,�<�� ����0��"��0�����P�����8��� ����0��"��`�����@�����$� �� ����3 �����x.�����0������P�����0��"�������0����� ��� ����p"��������������0�� ��@�����`�����<�� �����d �����0:����� %s�������������Pq�����0������������������p(��������������> �����4���������������%s �����%s:����� ���������������0����������0�����0�����0����������0�����p� ����������0�� ��� �����P�����(�|�� ���������7 �����3�����������0�� �� �����@�����(��� ��������������������������0�����)�����0�����)�����: �����05�����0 �"�� �����@ ����D��� ���� ���������������> ף����0�� �� �����P�����,�|�� ����0�� ��� �����@�����0�<�� ����0�� �� �����p�����8�� ������������0�����*����������p*�����0�� �� �����@�����@� �� ����0�� ��0 ����� �����,���� ����0����� � �����0������p�����0����� �����0��"�������0����� ��� ����0����������0�� ��������P�����0�|�� ����P8 �����5�����0��"��@ �����`�����@�� ���� ��������������p(��������������p��������������0H��"��5 �����p�����4��� ����$�����%lu�����I������������������0�����5 �����0��"��3 �����0�����(� �� ������������@(��������������0�����)�����0��"��P5 �����0����� ��� ����0�����)�����0��"��4 �����0�����$� �� ����������0��"��2 �����@�����0�<�� ������������(�������������� ���������������(��������������0��"��2 ����� �����(���� ����0��"��02 ����� �������� ����0�����+ ����������0��"��. �����0�����8� �� ������������ (��������������:ascii7:��������0�����0. �����0��"��, �����p�����D�� ���������p*�����0�����+ �����0��"��* �����0�����4��� ����0��"��) �����0�����(��� �����������������#��������������0�� ���( �����P�����0�|�� �������������������� ��������������0��"��' �����@�����8�<�� ����0��"��& �����0�����4� �� ����0������% �����0�� ��$ �����0�����4��� ����(��������������0��"��# �����@�����$�<�� ����P ��������������0��"��# �����@�����4��� ����0�� ��@" �����0�����$� �� ����0��"��p ���������`�� ����7 �����3�������������0������  ����� 0� ��@ ����������� �aeiouAEIOU������0�����  �����0��"��@ �����`�����4��� ������ ����������`2�����0�� ��@ �����0�����(��� ����0��"��0 �����@�����,�<�� ����0��"��P �����@�����4�|�� ������������pp��������������0��"��� ����������P�� �����)��������������0��"�� �����P�����(�|�� ����0������`7 �����P*�����0�� ��7 �����`�����,� �� ������������I��������������err: �����������P������� . �����I�������������� "��������������0��"��< ����� �����$��� ����������������� �������������I��������������0�����< ���������������������0�����< �����0�� ��> �����0�����0� �� ����%s������%s: %s��0�����= �����0�����< �����0�� ��; �����p�����,� �� ������������������� Warning: ������ ���������������`(��������������0�� ��: �����`�����,� �� ����0�� ��9 �����p�����0��� ����p(�����������������������������(��������������0������9 �����0�� ��`9 �����P�����<���� ����0�� ��P8 �����p�����,� �� ����0������p7 ���������������������00��(��? �����P�����$��� ���� ��������������8��������������0��"��A �����0�����$��� ���� ���������������������������0�����)�����@��������������w��������������0������A ���������������������0��(��p@ �����0�����(��� �����$tI������������v��������������0��"��0C �����P�����0�<�� ����0�����)�����3 �����x.����������p*�����0 ��"��PB �����@������ �� ����@�������������7 �����3�����* �����`0�����0�����)�����0�� ��A �����@�����$�<�� ���������0����� N �����0��"���M �����0�����0��� ����*������� (��������������pp��������������0�� ��K �����@�����0�|�� ����0��"��K ����� �����$���� ����0�����K �����0��"���J �����@�����0�|�� ����0��"��I �����@�����0�|�� ����0�����H �����0��"��G �����@�����0�|�� ����0��"��F �����@�����0�|�� ����0�� ��0E �����0�����$� �� ����0������D �����0�� ��@N ����� ����� ���� ����0�����)�����0��"��`e �����`�����H�� ����`�������������* �����`0������J �����8�����7 �����3�����0�� ��d �����>�0����� � �� ����3 �����x.����������p*�����0��"���d �����P�����,���� ����P���������������I�������������� 0�"��c �������������������� (��������������0��"��`Y �����0�����(��� �������������������) �����0�����%s������%f������@��������������%ld�����(null)��I��������������0�����)�����������������������0�� ��P_ �����p�����<�� ������������I�����������������������������������������2 �����p/�����swishdocpath����swishtitle������ ��������������w��������������%d������%lu�����0��"���\ �����P�����4��� ����' ������1�����(��������������(��������������fmt=����0�� ��W �����`�����8��� ����<�����0�"���Z �����0����L��� ����swishrank�������swishdocsize����swishreccount���swishdbfile�����I��������������=�����swishstartpos���<%s>����0�� ��R �����@�����,��� ���� ��������������������8 �����"���������������0�����!�����%r %p "%t" %l��������x �����0�� ��@S ����������d�� ����`�����x!�����p(��������������> �����4�����%c������ ������� "������0(��"��P �����`�����@�<�� ������������pp��������������0�� ��N �����@�����,�|�� ����0�����g �����0�� ��`l ����� �����(��� ����P�����)����� 0�"��k ����� �������������� (��������������0��"��j �����P�����0�|�� ����0�����*�����`�����0*�����Word Hash Zone����������������p(�������������������� 0�#��i ������������0�����h �����0�����i ���������0�����`i �����"���� 0�#��h ������������ 0�#��h ������������0��"��l �����0�����$� �� ����(��������������0�����)�����0�� ��t �����0�����(� �� ����0�����)�����`l �����`>����� �����xZ�����0�� ��p �����0�����(� �� ����  �����(2���������������������@ �����2�����0 �����2�����p�������������0 �����Z�����None������������. �����/�����0�� ���p �����0����� � �� ����0�� ���o �����@�����,�<�� ������������������3 �����x.�����A �����7�����0��"��Pm �����0����� ��� ������������������p(��������������0��"��Pn �����@�����$�<�� ����0��"��m ����� �������� ��������������������3 �����x.�����struct ENTRY����������������������������������`�����0*�����0�� �� w �����0�����0� �� ����0�����)����������������������������������.���������������All Locators����0�� �� �����`�����D��� ����wb������loc�����i �����8?�����bħ������������7 �����3����������p+�����` �����T�����������-����� �����x,����� ������-�����h.�������������0 ����� -�����0�����*�����������0X� �� ���������T�� ����@������0�����)�����0�����`+������� ���������� �����)������ �����,�����0��"��@ �����P�����,�|�� ���� (��������������p(��������������@(��������������0��"�� ����� �����$���� ����0������ �����0��"�� �����@�����(�<�� ����0����� ��������������������� BODY��� ) ����� TITLE��PROP_UNKNOWN����)����� EM�����0�� �� �����`�����8�� ������������I�������������� HEADING��������H �����8����� COMMENT�������� FILE��� META��� HEAD���0�� ��@ �����`�����8�� ����0��"��P �����`�����@�� ������������ �������������������p*����� �����{����� �����{�����0��"��0 �����P�����8�� �������������������� ��������������0`��"�� ����������P�� ����k �����>�����* �����`0�����swishdefault����G �����8�����0. �����0����� �����W����� �����Y�����P[ ����������j �����>�����0�� ��P �����P�����,��� ���������p-�����P8 �����5�����rb��������������@����������������������������0X�� �� ����������\�� ��������������������p��������������P�����)�����bħ������������0_����������`J�����`�����M�����������`�����0�����_�����p������K�����0�����0�� �� �����P�����,��� ���� 0�"��Ъ ������������0�� �� �����0�����,� �� ����PH�����5 ����� .�����0@� �� ���������L�� ����p�����P-�����p� �����+�����0�����P �����0H� �� ���������X�� ����m �����A�����0�����` �����0`�� �� ����������L�?� ���������0������J �����8����� �����`-�����swishdocpath����swishtitle������swishstartpos���swishdocsize����" ����������0(��"��0 �����`�����,�<�� ����@ �����8P��������������������� ���������� �����O�����D �����P9�����@��������������TXT2����DEFAULT (HTML2)��������� �����,�����6 ���������� (not opened) ��; �����4�����P�������������{ �����l�����HTML����HTML2���0R�������������� �����`V�����0`�� ��` ����������@�� ����XP����������XML2���������r���������������: �����05����� �����V��������������� (%d words) ���������)�����]�����0�����Ȥ�����I����� �����@l�����0��"�� �����P�����0�<�� ����P"��������������"��������������pp�������������� �����W�����tmpdir���������� �����@T�����TEMP����IgnoreLimit�����TMPDIR��TMP�����0�� ��p| �����@�����(�|�� ������������P��������������0� �����`W�����I��������������PB �����p7�����7 �����3�����@ �����-�����0�����)����������p*�����0�"�� �����0����,�|�� ���������������NAME������������* �����`0�����0�����)�����G �����8�����/b������/body���em������/em����� ��������������i�������/title��/i��������������P ����������������������0��"��@ �����`�����<�� ������������pp������������������������������ ��������������head����/head���b�������title���/strong���������strong��body����0��"�� ����� �����(���� ���� �����PF�����0 ��"�� ����������T�� ����0�����*�����p(��������������I��������������-�������������<%s>����</%s>���META����END�����% �����@1�����<body�����������@(��������������0��"��� ����������\�� ����(��������������$ �����P1�����STARTPX `gCONTENT0" 0 P! FileRules title0"@ 0, 0`" L M 8J 8: 050 0I0(" P$ $ P14 . PF0) 0I0 0@ PF`00E RJ 0): 05 0I9 C S@S0X" 4 SC PJ 87 3D @pL @  D K x0 ( 0 @( p*0 ( * `0@(p( (ppG 8M 80 p (< PB p7I0"` $ 0)0 $ p(swtmp0)TEMP9P8 50"` P,< (0P"TMPDIRTMPP/0  0$ 0 p @( ^ 2 p/P 2 _ py Xm0" $ 0H" p  3 x.0  04 #0" H 0*: 050 $0@"@ P 0@" P 0@"0 P 0@" P 0" 0 7 30 0" P4 p( ((0" 0$ 0)0"0 @0 @(3 x. 0" 0( (aeiouwxyaeiouaeiouy0"0  0"  0"  (0  0$ 0)0 0 0 0` 00 0"0 0 0  0( 0" 0$ 0"0 @(< pp0"  @$ Stem0" @  0" @(< 6 P0 0` 0"  0 ` 00 %s I0 aa`a8a`_^``P`@`d0dnative3 x.fb0cbcb0  0$ bcca bc`e0)dhdd ``^__bHaha`(a0! rb0 , @4 P8 50)@p(9`0 T @( 0#M 0$ @-0 P P,| @0"@R P<| p-7 3 0 PL 0  `-0 O `8 0 M `P| -0"pM ( 0@L 0 L 0 "@J `0| 00J 0"I 0( 0"G P,< 0"pG $ 0`G 0PG 0@G 00G 0"0F @( 00"C p<| (0 "@ D 0 "> p@ (i 8?0> 0> 0"; PD| i `?WriteWordHash`0*0*0"9 P@ `!  (0"7 @$< 0"`7 0( p 03 0"3 P@ cP) ` 80" ȫ0" 3 ( 03 0"2 @( 0"1 , 0"0 @( 0"@0 0 putc() failed: 0"/ 0, 0 / 0$ P0 - P8 0! rb+0" 00 (ȫ808"' p4| 9 P5]`9 5d(_prop@(0 ! 0$ wb0H"" ,< _temp0 @ 0( 0 `U `4  #0)0("Y L # ( 0"X @  0"PX  0"W 0< `pp `0 V @,< 0)0 ] 0)0 `n 04 I %s(` K pUp V0"k P8| 0)pP! 3 x.0 "o @$ p*iP 2 0W@~0 `e T ~; 4p(} In dir "%s": W0 q @,< 0 `W @T 0"o  ( filenametitlenotregex@(P 0"_ pP pp($isdirnamedirectorycontainspathname0"^ @,< FileMatchFileRules `FollowSymLinks0 ] 0$ + 00 r 0)0 P2 p/I'%p' '%P'0p(0"{ p4 @(0)2 /r) 03 x.%s %s0"y @<< Filter matchP! ppFileFilterMatch/FilterDirP  @T7 30 "pt p< @(P5 . WFileFilter0 @s @(< + 00 @( 0)` Tp(0)@(0(" P$ I0" 4 &0"0 0( )://0" @ (0"p 0 0"p `0  (h ?q 3 x.I0" @0< P 2Too deep.n pWrong suffix.0" @(< p*P8 5r@> ףperl "%s%s/swishspider("0 " @ .response" "%s" "#Status: %d. %s "text/ pU` K(filtered)Pc .contents(0 T 0 2text/html.linkspy Xm V@ 8P(0"Ђ P8 7 3ppdelaymaxdepth WPm `Aspiderdirectory @T0 P 00 0 ` $ 0)0  Vp UPath-NameNo-Contents:` KP pUw@ (I @T` TPATH%s%s%spZ V 3 x.#I((p0)7 30 X p(@(' 1: 05(P8 5; 4Document-TypeW @P:P" W stdin` TfltrContent-Length%s0r  V>Last-Mtime0"0 0, 0 pp0 00 0 P @$< + 0@ 0 0$ 0)0@ 0 0" 0 0#0 " P 0) y 0"  (0`+` 7 3`  I0( ` T ``p K 8Аp0" `@ ppp(0 PreSortedIndexResultSortOrderJ 8* `00 00 p @0 0 0 0( p( 0"  (0 @0| 7 30) 0" 0" 0( ppandnotor0 0" pL p* Y(`9 5(*G 8k >0. 0* `00"` L m A WH!Pm `Ap @l ?)'%s'0 " T <__not__>@(Pn A=0 ` 0, 0 л 0$ 0)0 @ 0  @0 Z7 30  0$ 0)p @0 0 @4| m A0" @$< pp@0 @ @$ + 00" 00 1onyes0offno0  @8 ignoreerrordisableindexauto0"` 0( 0" P4 P8 5#0 `W@p 1SwishDefaultr@ -0  < j > @TFile:: 05@" 1, `remove$prepend0  P0| 3 x.^append Hregexreplaceas-textIgnoreWordsBuzzWordsSoundexStemming_enMetaNameAliasExtractPathpt n z0 xIndexContentsIndexVerbose"IgnoreMetaTagsIndexCommentsindex.swish-eo AIndexFileParserWarnLevelBeginCharactersIndexPointerReplaceRulesEndCharactersIgnoreLastChar* `0p($I 8G 8@ 20 20 T PB p7J 8  (2, 00)F 9I# 1IndexAdminUseStemmingIndexNameIgnoreFirstCharIndexReportAbsoluteLinksNoContentsMinWordLimitWordCharactersMaxWordLimitIndexDirTruncateDocSizeDefaultContentsIndexOnly K "W gP =MetaNames. /UseSoundexStopWordsUseWordsMetaNamesRankPropertyNames0 , P,< 3 x.0 0)p(7 30 P p< notpp(0 + @$ 0)0"# P ` Matched)No Matchp(I0"" @,| 0"P! P, matchednope0  p@ 0" / P, y p u 0I p5 0I 4 06 05 05 0" 6 P4| Pz `p~  v 0w 0"p2 @D< v 0"A P,| 0{ 0"I `4 'y pu  00V p5 0V 4 0pL 0PL 0"L P8< Pz p~  v 0"@R @$ 0{ v 0PV P*0"pZ @$ @(p(0)0"W @,| (.0)0"W $ (0@"V `$ 0"P[ `L p(k > P 0 _ 0" ^ P8 pp0_ *0H"` 0< @?@F@> ף n0"p P0| p( 00"s p4 0 o op0@"q p0< r@@ W((I 0o `o0)0H"Pc X HJ0)p*(http%srobots.txt  q0"n P$< p p0"0u $ `"0 ` @,< I|[{%c' ]}0u @"0" @, 0"І 0( 0 0 I "0" @$< 0" `4 0 0( 0  0 0 0 0 0 0"p~ PD 0"0{ `H 0"Pz 0P '0 { 0"y 0L 0{ 0 y 0x 0@x 0w 00w 0v 0 v 0u 0" `4 Q u y p0{ 0 p5 0 4 0 00 0"P P4| Pz p~ 0"@ @D< v 0"З @(< v 0 @ P0| 0)I0  0< (7 3@@o(default)X 0 E0 - )@poofnumWordCharactersK P8'IgnoreLastCharEndCharactersxPcP'swishdocpath` [ ,АpP8 50)#> ף0 М P Yp+F 9J 8I 8 0 0Z Pywb BeginCharactersIgnoreFirstCharK 8H 8PB p7o +o CP -@ D6 ` Tnp*rb0 0"е @4< 8bu v 0@ p5 0 4 0" @$< p~   v 0" P4 )Iproperty meta (%s)%s 0) end ignore0 0$ 0P 0 `0 PF0`0 @ @$ p*0"  0" P4| 0(~) p( Y0  P< 0)J 8 0I* `00  @آȟP0H"` `, 0 0 @4 8888 P#0 @@ 0 @( pp' 1SwishCommand( 0indexnoindex@ -0` 0@ 0 PD %s(%c 0 p8 LR0"0 0$ (0 @(< M 8strongНbrFileRules titleheadbody0" P8| P! P titleemimgbi0 0 @(0 P8| *Start Ignore*: 057 30 p `< G 8PB p7<%s%s> %s 0" 0( 0 P< 0" P0< @-10 @L hrefROBOTSNOINDEXnamecontentasrcbase3 x.alt0" , 0H" `, swishdefaultswishtitle0" 00 g0w  v 0` p5 0@ 4 0 0 0" P<  Pz p~ u y pv  `0" @,< Pt0{  00 p5 0 4 0 0 0" @0< p~ Pz  0" @D< v u 0" P(< 0> 4 %lu P0  @( I %s # %s: %s10" 0$ p*0" @4| pp7 30 0ZFuzzy Mode` [Soundex Applied [0 P `0 8 0"  (0" @ 0"P @ 0"  P,| `9 50" @$ 0 0"0 0$ 0)0"0 0 0"p @( 0)`0*0*0  0, p*0@# 4 0"$ ( 08#0" pH< 0"@$ ( 0"`! @, 0 0"` 0$ 0)P)0$ #Ą0 0 @"0#` @@< Success!p(@((0p 0"@ P8< 0 " @( 0" @( 0"Ќ d `,p"`"'0"| `P 0" L 0"P $ 0P"` ,< 0Pv 0v 0 px 0 0w 8 0y ` @ spacexdigitcntrlP printlowergraph0`"( T (digitpunctalnumalphablankupper  p 0"0 `@ 0" 0  0"` 00 p,0"  0"p $ 0 0( 0"P @< u v 0 p5 0` 4 0" P$< Pz p~ 0" P@ p(@( @X 3 x. 0" @D< u v 0 p5 0 4 0 0 0" @0< p~ Pz  P0 "@ P(< 0{ 0" @4< u v 0 p5 0 4 0"p @$< p~   v 0@ 0" @0< 0@ T >0" @$  0)s != NULL(s->str != NULLp(0 0 04 0)0 0 0  0, p*0 @ @0< (0" 0( )WKWITZCZ0"@ 8| (P (0@ 0 00 ILLOASAGGIETOSYSLSHUMBMAKLIBDTGRANGERRGYESEBOWSKYEWSKYOM0OWSKIOUZIFXEAUSIASCHEIMHOLMTIATHOOOICCHYMHIACKHUVGNPNORCHESPSQCHIA GACHDG CCYCGCHCHAEOENCISAN YIEWICZWRVON SKZSCHMPKNRLFTX0  L? SJHNABEREKSIDCVAN ALLEEYTKCECIAJOSETSCIOCIECQHARISHARACMACHERBACHER QCAESARORCHIDMCARCHITU UCCEEUCCESHEMCHOREHORAIEMTCHTIONEDSIOHOEKUYSIANAUIAUZAZOAMTTHEWSKIWHEPEIMANGERDANGERINLIDDILELISLMEHOLZSUGAROGGIOGYILLAIER 0 0"4 `< 0u "0 6 0 0 p5 @(< @"u @0 6 T > ףpa0 ` `0E 09PaP X  7 30  0  @"0 @ @(< 0 0 0@ 0$ 0 @ @(< 0"` 0( p"`"0"к 0  0"9 0( PI8@))0 0 0" P0| 0" 0 0 @ P4| 0"p 0 0" P,| 0" P0| 0("0s H !0 0"p `@ "0 "o `@ 0" P p0" 0 0"` `< 0" P0 0("`a L 0" `< 0"O X P'0L 0` 0"` @0 0"py @, p0P"w , 0@"| X 0 "{ @ 0"r @ 0O 0"`N P(< 0"pM P(< 0pL 0L 0"K , 0"K , 0J 0J 0J 0"H @H< 0 0"H 00 0"0E P0| 0 E 0E 0D 0D 0D 0D 0D 0D 0D 0D 0pD 0PD 0@D 00D 0 D 0D 0D 0C 0C 0C 0C 0"@C  0C 0B 0"v 0$ 0"L @ 0"@ pH 0"` T? 0"< 0 0h"= < 0"p=  0"@{ @ p0" @4< u v 0 p5 0 4 0"P @4 p~ 0"` @  Pz   v  { P 0w 0" P0 x y p`u 0{ 0@ p5 0 4 0 0" 08 p~ 0 0" 0( 0w Pz 0" 0 0 " P, 0" @(< v 0"` P< y p u 0` p5 0@ 4 0 0"P @0 v 0w 0 0" P0| p~ Pz v 0{  `0" @D< u v 0@ p5 0 4 0"P ( p~ 0 " P<< Pz  0w  { P v  0"@ @<< 00(" `(< 0" 0( 0` 0@ 0" %0$ |0"`*( p0 " 04 0"pP4 00"p, 0"`+ ( 80L 0  0"%  0)0`)0")0  `@0P)0@)0 P4 00 `P(| 00"  0"0  0"  0"X Xx80p0@0U0  , 0"   0" $ 0`0"p 00"0  0"04 0" , 0" $ 0" $ 0" $ 0" $ 0" $ 00"p0, 0"P 0"0" , 0"pP8 0"@ $ 0"P $ 0" , 0" ( 0  , 0"  0"б $ 0p0"p 00"   0"04 0" , 0" $ 0"p $ 0" $ 0" $ 0" $ 0`0"`b0, 0"0^ 0"0" , 0"pwP8 0"@l $ 0"P $ 0" , 0"g ( 0\0 Y  0pX0 pU  0PT0pS0R0 O , 0M0@L0K0J0H0 G0"D  0A0@0"+P0 0"P0 0"? $ 0"=  00"`0 0" @,| 0" /P0 0"1P@ 0"P0| 0" P0 0"!P0 0"p'@4| 0"pP< 0 0p 0 0p 0 0p 0"+0, P(0PI0@I0"1P@ 0@0F0H`0G0E0F0 E0"C0, (0"B@8 80p<X0B0?0"@@<| 0@0`>00>0P?0"<P@ H0;0:0 ;0"9@, 0808070"@60, 05(05P0"p7@4 0"`4@4 h040 1`0P90`B`0<030-000@0p0/0".@0 0@.0"-0, 0`I002p`0 O02``4 #02P0$ 0P@-082 p(| P-`-  G P%pP&#%d;02P,| 02ІP,| ISO-8859-8ISO-8859-6EUC-JPISO-2022-JPISO-10646-UCS-2EBCDICISO-8859-2UTF-160wISO-10646-UCS-4ISO-8859-1ISO-8859-3UTF-8ISO-8859-4ISO-8859-9Shift-JISISO-8859-5ISO-8859-70p2Pn(|  (ISO LATIN 1UCS4ISO LATIN 2UTF16UCS202`s0(< UCS-2UCS-4UTF8ISO-LATIN-2SHIFT_JISISO-LATIN-1 HTMLASCII /UTF-16BE00 {00 ``@UTF-16LEUS-ASCIIx02@y@$< @/00~0 0x2`, P02 0 ebcdicSHIFT-JISShift_JIS00@m@<| 00|0  0K0R02N ( 02@ZP@ 0_02U@@| 02dPD 02`@@| 02Q < 02r0, 0p2o8| /0i00  p 0000Р00 00Г  02p04 /titlemetaframesetnoframesscripthtmlbody00@<< 3headstyleframebaselink0#02P4 00p0D 02 @(< p02 @,| pp*00  02@4| h] \]00 P8 (]^02@(| P02лp@ A---r -02@@,< 02`@<| ]020( 0 0PP( p?&02Н@(| p800 @L< <`@-0/charset=charset =X[`s0`02 @$< Hpd02H growing buffer 0/0p2,< 00h /http-equivcontentContent-Type0(0T 02@0 or ' expected P.Ш0 20`D -00p@0 00P $ 02@<| 02pP8 00p@0| 8DOCTYPE0(00`0| Tag %s invalid XAPk020$ hhv-0vp-u`-0:P02`;@( Y00@70( ~@@`d@W@PYp|0X`0 2EP$ 0\ 5p?e*P02pD@$ 10 2CP  `202 B@ @Z020A@ Z02?@  0Y02p>@  02=0  m0 02 @,< l/*02/P$< ,out of memory H1Np (@(p(02@=0 02<0 y024@8< 20230D 023 $ 02 6@$ 020 21P( 0202P@, `Z02-P,< >0/0 2)`0| 'p0G`6(02  02L 0 20(@4 encoder error 02 0$ 0@002T #%uP02ЫH 02@P| 02@@0< 02@@(< 0 G`0@Out of memoryReference gapEnd of fileUnknownCustom errorInvalid range0000 VALID(self)02@(< 0 2` #h h02 D P 02@pD [:print:]p [:xdigit:] [:upper:] pN` [:digit:]@ 02T O@[:cntrl:][:graph:][:alnum:] [:alpha:][:space:] [:lower:][:punct:]002\ @KpfINFINFINITE\HNAN0H2P `#L 02pH0( pg02`O`T pH0@\2`\8 VALID(format)VALID(InStream)020, VALID(buffer)0 2@, 02`@ P0000 0 20@, xVALID(stream)0(2`@, 02p@ 0 0@4 020, 0 2p@, 02`@ 00@4 VALID(file)02 0, 02`0, 02`@ 020, 020, 02`< 000 , `E 00P0$ 0G0`0vT 00p0@ 02I@,| 00}0@ 0 0`p8 @@-1@?@ 082J`,  @@?H@@x}@8 @0pG0 8M@$ @08N0@ qy O @@?@@ 2ı.n?inf-inf??@nan0?0x0l @`TB?AB-INF/$? A002D P0\20\0 020, 02`0, 02`@ 0000 P( 0000p000000`0@00000@0 0000`0 0000`0@00000@0 00000п002P ( 02 ( 00@4 @"0Ep02P0| :leave:enter JP`"0000 pp0@\2@`\8 02p@4 tP`kmpn002@pL 02@@0 020p< 0000 0 20@, P02 `D 020@$ 0 2@@$ 02Pp< 0000 020, 0 2@, 02`@ 0000 0 2@, 0(2@@, 02pp@ 00@@0 020, ( 0 2P@, 02`@ 00`00 020, 02@0, 02`@ 020, 02`0, 02`< 0 P00 ( p 00@ 0 =http://@H=0/9H02O`8 @- 0:`9@(90 ftp://02@L`0 NULL@Z02N@$ H10N0N0 p!8`+xml\@PY -02`I@\< ;/xmlP-п0[--0$$00`% 0 h( P020G0( @/(p(%02`E08  02:`D $02pD0< 02=`l 02@pD "`027@<< X0p:07026@0< 02(0(  /0%00% 0 p802-P4 file`(13A@/`M/0`6P/02'0$ ,02,P4| 0@6p/0250 02 50 020  write()0240  (02 3@( P002`2@( 020  close()020  read()0210  P020  fflush()p02 0$ fwrite()02P10  020, fread() 0200  02@0  02P-  02*@$ P@P00*0$ 00@0$ 02!@4< C`data to URItext/xml@"bytes to URI*0#POST02 0D 02@0, copying URI0 02 ( 00p& , 0#PUT020$ fclose()@02p0, (-file:///wb00$0`$0@$02# ( 02! 0  0020, r020, 0000p0RP0`*0P*0*0)02"@,< 0//growing buffer@-00&0( 00$@,< p?0&00@(@<< ":'"0 (0(00P%@4< 0!0!0`!02 00 02 00 00@0D 0 02P08 creating buffer /020$ ,020$ ,020( ~PA @0@0 00@@< 000$ 00r0( 00s0 000`0( -)PKOMO00`@ 000 00p|@4< 0KHKSKqP00x@,< !aDXQ<S*0V00P0, 02@p< 302 @8< WI02 `< 0/BXJ:020$ /building text@P.Ш0004 00@X| (!H!020$ 02@$ 02 02@0$ 02`  02p@( b00R L 02D `" " ]02@$ "000$ 02P(< a02@P(< 02P8 02@P8 02@L| 02@P8 02PP4 xml02 `8 #02`@8< 02P0 02 @8< 02p@$< 02PD 02``L 0@2 ,| Pdefault%.20s%.20s%ddefault%d02H 02P 00@( 02@0< X%020H 02pP8 P7p81baseheadurn:htmlhttp://hrefftp://0000$ 00`0$ 02 @(< preservespace00P08 020 lang0008 02 020$ 020( 000x2pT? /%s%s:%s?comment()%s%s%s%s%s[%d]%stext()/@02  '02`@, 002 @,< 02t@  building DTD020{0, building doc1.002@$ @/))02pP0 @)02P0 P0)copying node)02@0| 02@,| HH020@,| Y@#`FP,U`WPF>`S00 00p02p0$ 02@$ 020, building node02P0 0200 0200$ 02  02`@$ building CDATA02@( 020@ 02`0 02@0$ 02 @, 02@0 020, building PI02  02P4| 02`8 -@a0u020v@  0r0p0p02pj`8 AH]----020e`8 02\`8 02W`8 0V02T0 QName split0 20SP,< building QNamep(02*   /P-`-00A0( @-02 +`@ /0/P:%d00P@0( 00M02`M@( p(02Y@(< 02\@(< 02pqP0 02l@(< 02d@,| 02@w@(< 02_@(< 0(2{`(< 02`0( 020$ 0/02@`@ p?20C02P0 @/02>P`D :%d;/?:@&=+,$;:&=+$,://0 2pSP,< B/?;:@#+-.?@:@&=+$,/?;00?0 H %s00p 4 p 02 $ Y00 ( 02P,< 0/ /02p< @-P- $`-p%Found %s: '%s' 100@(< 053publicIdpreferrewriteURInextCataloguriStartStringrewriteSystempubliccatalog00P4 urisystemdelegatePublicrewritePrefixdelegateURIdelegateSystemgroupsystemIdnameH1p|`Z0YY02P4 ,P-out of memory @w0G`p?e02е`< p p ` Y``V 0h'020 P7urn:publicid:02@4| 7P7020H p?B02 0$ 00 08 P"00P0 P.Ш02`0  $%sP02 $ 020  02@(< 90208 02@0$ Resolve URI %s 02@( 020( 000D 00 0$ 002004 00004 0 020@ jA020 02`P8 o902@ NOTATIONBASELINKTYPEPUBLICENTITY02`8 DELEGATEDOCTYPESYSTEMCATALOGDOCUMENTSGMLDECL0(2P 02Л`8 #H!P@+`vtx(0{(rP1@p0$0@000$ 020( 02@@< 020 02p@8| 02@0 02`@@< 020 02P@@< 020 000$ 00 0$ @W00`04 @ =02pD /-0/02`4 A--02 @4< @@rb 02@0< ?0 2p@ OVERRIDE02@$< 02 @ 00 @$< 02  oЬ02 0 CATALOG DELEGATE "%s"SGMLDECL DOCTYPE ENTITY SYSTEM NOTATION 0000 H PUBLIC LINKTYPE ENTITY %%"%s" BASE DOCUMENT 02@  0000 00-0p 02 - 02- 02-00 02P4-00 $ p 0000  $ 00  $ , :)?+p(C00P0| ( ...p?(*#PCDATA | 0 02p 0, malloc failed /realloc failed/00  $ 0@28 @PD `@-0S.02@0 p0 Д0X'2'@ @`0???CDATA02PV@, YT.0`W02pP, 0H2@@ xmlns302P@ F0h2 P? BP+020$ j0L00YY02q`L b0/02PP0 pO`O`V '8@ЍصY`00G0( ~02HP4 r 02eP@ A--H]--02hP@ 02[P@ 02^P@ 02q 0 0 2WP( a@0X0@28 0@2P8 02@`8 `J #0H24| 0h'HTMLhtml02@(< KK0S@WN00KH02 @$ (~no DTD found! 02Y@  00@ < 00@(| 02 @$ 000 0 `L02N  00  $ 000P0 IDREFS split02 02@<< 02P  0 2p8 P7V.02``8 00}023@,| 02P}P,| kM0@2y0 0H2 u8 0p02Z00 0U0@P02pP @ 02pTP,| N @Y 02S0 0P00`O0$ 02M@D< 0@2PK, idnameinput000F0( (0(P SYSTEM @(0G0GP02D0( 0F n@P00B0( 0D8Q02BP4 0010, Q ( #FIXED #REQUIRED NMTOKEN CDATA IDREF ENTITY000>0( IDREFS ENTITIES NMTOKENS NOTATION (0A0AR02/0$ 02010$ S02<0( 0>@S0000$ S0040( 0<S025D? 0Y@0Z02022  PT00@@0 T00 ,0, EMPTY> 0/0/T020@0< 020$ `U02*0( 0,U0004 U00$0( P0*U02$p< o0002p  00`@( 0P-`-vY> ףH 0-.0p00P/00/00  p 0p00@$< / /000  @-02p 00  02 0(  fЍ/g(l`p-0-P000 00@0( *P00@0< @W@@`d, 9qP0200$ 02`0  02P8| 0/ `/P-H10G``IP 02@(< p?020$ Np 02@0| (UTF-16BEPUTF-16LEUTF-8XІx020( 00  02@0< EBCDICUCS4 2143 USC4 big endianUCS4 3412Shift_JISEUC-JPUCS2ISO-2022-JP020@, 00  02  ( 002@,| 02  702@8| 00@,< SfHpd000$ p:020, 02 < A-000( @-00`#@<< $&h":%"@(P- NDATA SYSTEM PUBLIC P' expected '=' 00`5  000  0@@03H@4| P-`-`/h]@PY00E0( 00D0$ ^02``D /W]0/02P`< 02p?04 00I04 %s(%d): 02P@0| p?`Z`001  002  00S@,< [gif \00p0( @gg1.0`g 2 02@F@,< 0200  p8@-UTF16UTF-16UTF-8[`UTF802p0H 02`p@(< 0hr 02sp< A---]-0(0d ]00@$< P7catalog9P.Ш02@$< 3p00d 0:000  0pD0 C004  02r@$ 00A@$ unparseable02<  007  02Dp< 02I@,< 02PK@,| 0S.0 0iP(< (0A02Pg0( pZXNp*0P0D 00@P4 00@6  003  02@04 /0070, xmlnsxml02P0| Np Y0G`0Y102@0 *P`202)@(< $0 b:lt02JP< 0 0 o` 020B04 0802wP? H]0203P<| 02p,P<| 002fP  n0H2pXT 0(2`T (]02Np< 00029@0< xml:spacexml:langpreservedefault02<L /0H02>0( >02p:@, 0P2UT `(1A@/YY02C04 080z0 XJp000wP0 pqPrp*#%d0/P0(08 H!`*nbktext#x%X`!q020`< p|0{(pseudorootP@+02pp< qP@`JP00/@4< 02PT 02H -02 @$ 00@T 0 2 L 0(0p8 faketx(@'02 00 020~H? 02`P@ /R02`@0< 0S02`0( 02p0 0(0` V.`V `Y0Y@02`@ U0@Ut02PP0 02@@D 02P0| 00 0 u00P `T 007@8< 005@4< 020  000, %g(hhp00 4 ` {` @0 `%020 -0PPȊ020@( 000  ~@W@*0X 90 2 P$ 0\ 502@ @$ 10 2 P  02 @ @Z02 @ Z02@  020@  020 02 @( 020 020 020 02 pL 'pH16(00 0 hH|``@> PH@؅`+H002p@$ 0p02@$ 02`@  0000p02@ ,00@,< 0Y02P$< 0@00p0P020$ 02@  0020`< 020  02 ( 02 P,| 00@$< 0vp-02P4 none00 2P`8| 02@@( 02pH 00p00p 0 0H2`P 0(2 P X0D0P02piP 00  P  0PP/0@p/00 -0 /02@ 0 @00020$ /0/02P@ 0@/00/02@ 0`/02@ 0/02`@ 0P/02@ 0.02 @ 0002@ 0p-02@ 0p-0`-0/0P-02@ 00-0-0,02P@ 0@,02@ 0,0P,0$0p*0`)02@$ 02 @$ 02@ )0p02@ 00000 000 pB@D0000$  C 2061100@ 0 P00`  p @ЇpЋ00hЌPȊH 00i )00`c0( H!+('0a02pLP, /r  /@)P.Ш00_P,| /0/~p?00`^0 p!+0 0`KP, X@FAPk`! "-W`.PKO u(Npip0$A@/P@J3004p@ @-fn`(1 JHHxmlnsS@OPHxml:idP#yN0@0@T XJ`WPFB0S.:00E`0 @0l@,r-JJ0020( PG0000( 0{( H1mx0000@'@8| 1`Pc`pc02$@0< b bp* }02$@  Np 00000@8 u`-0vp-x 0h 00h *00e0$ `+p*0 fP@h 00g , 00`g 00b0$ ,00.@H| 00-04 pHNBQ00+08 `M$XV0(0)`,< 5TP}M0S0 '`b0 0 `,| iIetx( \@PYHpd}0 0`]P, 0@0PO@ "%pXn00WP P@+0e00p0`0P02i@,<  /0p0~0pk@0@2nL @-0X2vX 4Ыp?0P2rL P700qP< P0m02l0$ 02`m  00  p 02 4 3P-`-02`< P02X 00 00pP4 @-00P08 0(2 P /0/00` 00@P4 /000pH 000`< 02 0( 02p0, adding state020  00@  02 08 00@@  02 08 020( 02 0  02@<< 00@  0200 02 0 020$ pushing atom020  allocating atom02pPP 02`L 02@,| 0 2`pL p(0/02PPH< 0000@0< 002Њ0$ 020 00@4| 02@,| 00p0$ H 00@0( saving regexp`p(`hh@HЋ8X--px- HP8020@8< Ap0-0PЌx (`@80Xx002PD  0X2`H? H]running regexp0P000@$ adding ranges00@$< P.ШIsXXXX expected000  Expecting '}'Expecting '{'00@  000 00P@0< 800P0 02@(< 0 2P, 02 0 PUNCT_CLOSE SEPAR_SPACE NUMBER_OTHERS PUNCT PUNCT_DASH OTHER_FORMAT OTHER_PRIVATE OTHER_NA SEPAR_PARA OTHER NUMBER_DECIMAL anychar notinitname charval ranges subexpr LETTER_OTHERS MARK MARK_ENCLOSING notnamechar notrealchar 00 0 realchar notdecimal decimal NUMBER LETTER namechar string epsilon initname notspace anyspace SYMBOL_OTHERS SYMBOL_MATH SYMBOL BLOCK OTHER_CONTROL SEPAR_LINE PUNCT_OPEN NUMBER_LETTER SEPAR PUNCT_OTHERS PUNCT_FINQUOTE state: %c - %c range: FINAL atom %d, to %d epsilon to %d removed char %c once regexp: %02d all * range 00 pD NULL '%s' + %d-%d onceonly %d atoms: ? atom: counted %d, trans: %d counters: char %c negative %d entries START %d states:00@( 02`4 02T 024 00@0| 020@$ 02P  $ `"0 0 0p 0 0` 0 0 0 0 0@ @"02  $ 0 0 0 00 P, `-P@( 02,0, 0/@-00@*00 0+0+0`+$0*0h0 %s 0P-00  @ p %s:%d: 00'L /@p? /%s00`%H 00#H warning: 00 H error: Catalog regexp : XSLT validity element %s: I/O output parser 00L? error : memory XInclude namespace HTML parser warning : %s:%d: C14N XPath Schemas parser 00pt /`p-H p00P ( 0 0 0` 02P.0, 0/W0`J02K@0< P-`-02Q  0P702@O 8 0E02L ( 0I0 G0D 02E 02PD04 @02C`4 P0p?02 @P0< /020/ ( 02B  02PAP4| /02=  0902<08 02; ( 0:0p803024  020200, 0 20 S02o`< @-30o0o0o0 20ZH 0/ /02`V0, 02 np@ 00lp@ 0k00jPH 0j00j $ >0 2cp< 4Ы02a@4| 02^`@ 02Y  02Y $ 0Y0Y0`Y0@Y00Y0Y00@Wp< 0PrP-`-0 /@-0/@//0P0Ј0P0004 P02 ( PP"%pP  XML_MEM_TRACE%ud00{`< H  NULL%c] [ null "%.25s"%s(%d)malloc() in skipstrdup() in w @@00P4 0 %s %I:%M:%S %p INVALID realloc() in 000< w.memdump@00p@,< ??? in %6lu %6lu 0{0p02yP(< p(`"@(0{none000 $ 000x@4< %p : Freed() @"02r@$< 02vP(| p"0 x0v02@t@$< 00p0, @-0004 000 02004 020 p /P-`-02p@8< 02Ѝ0$ 02Й0 000 00И@8< 00 @8< 0 00P04 00020( 0200$ 00Д0`0P0@020 020 02@$< 0204 0200 020 020 02  020  00PP000( @-02( p(PQUIT @ 0 send failed4020$ 02@(| P5> ףrecv failed0listen failedbind failedsocket failedP602P0, PASV `44440@20p  RETR %s TYPE I 0(2`,| 4PASS %s 5USER %s USER %s@%s SITE %s @400P8 @/(P-`-/Syntax Error 02@,< /`M/00@P8 Syntax error 0004 P"no_proxyftp_proxyftp_proxy_userFTP_PROXY020 (ftp://02@( 5020 02  select028 02P0< total02P, CWD %s 0 2p@ LIST -L LIST -L %s recv02P, DELE %s 020 02ЪP4 (0 0@$ 00М0$ 0P0-0-0-0-0p-0P-00@ 0( @-0@"02 H /0/Xrecv failed @ 0 5P502.P0| 02@,@0 (-Location:http://(#B;@/00@0< 9HP.Шcharset=Content-Type:HTTP/Content-Length:ContentType:0/02 D send failed 402@L? `4socket failed 5@4lselect failed Connect failed4 600P8 (Syntax Error /02P0$ /00P< p$00 4 P"no_proxyHTTP_PROXYhttp_proxy02`"T Pp(GEThttp%s %s http://%s%s%s %s02* 02   0 2*P$< 02p!@( 02!  00p $ 02 /0, 302P1`` 000 L P00pg@ $0/ISO-8859-1 >&"<00=P4 &p?;00C0, :pD@ "=":00>0@ xmlns:xml xmlns@(=00@@0$ /-->?> ,T0> R %_/>-2>00P0pD @-: 003z0$ 0(2M@( firstsecond(020z0$ 02y0$ 0 2L@( (02x0$ 02@x0$ 02O`8 02w0$ 02v0$ 02@KP4< 02Pv0$ 02u0$ 02pH@$ (02pI@, 02t00 02s00 02G0$ @(02i0 p"0`j02po@, 02@s0( 02n@, 02r0( 02G0$ 02r0$ 02`q0$ 02n ( 02pp@( 0pn02 J0  00E@"00pm0( 02m ( 02 l@, 00`k0, 02j@( 03@h0$ #0 h 02pg0$ #@ @P 0@2\d @@ ? 0?0 7f@$ 0 8f@$ 02`\0$ (delimiters020[`8 03Q@, FALSE0Punknown02pN0$ 02J0( 020F0$ (02E0$ (00p@8| H (NULL)#%X...02p0, p-=NULL o0u02`  P7p?NT%s -> %s %8d etca-000$ %snEpCd?default -> %shF0200 0p0, 0p0P, , unparsed , parameter , internal ENTITYDECL() URI=%s content= SystemID=%s , predefined ExternalID=%s NOTATION NMTOKENS (%s REQUIRED FIXED PBM noelem!!!ATTRDECL(%s) ID ENTITIES IDREFS0p0Ђ4| " IDREF ENTITY for %s CDATA NMTOKEN...) IMPLIED ENUMERATION|%s0000 , MIXED , UNDEFINEDELEMDECL(, EMPTYC, ANYExternalID=%s URI=%s NODE_%d !!! ENTITY_%d ! INCLUDE START , PUBLIC %sDTD(%s)TEXT PELEMENT DOCUMENT_TYPE NOTATION ENTITY_REF(%s) PI %s 0@0D content=ENTITY COMMENT DOCUMENT_FRAG :node is NULL CDATA_SECTION TEXT no enc DTDPBM: not a DTD INCLUDE END , SYSTEM %sb%s SystemID=%s 00P@4< 0p0P0< Attr is NULLATTRIBUTE 800@4< `0p0 8< NODE_%d URL=HTML DOCUMENT Error, TEXT DOCUMENT 0000 Error, COMMENT Error, PI Error, ENTITY encoding=version=name=02 ( 0200 @-p%02PP0 / 02p00 Ppx'02 @4| `-P-@?wx @0200$ 02@,< p|y2H1P8P0P2P4 H (~ pKx  L ------- pwd83savewrite00&lscdbaseP%s validates quitload //? > &*@;# +;0/dir@"%s is a string %s is a point p%s is a range 00P` (:`%s is a number %s : ;pز%s > X/@&* :relaxngexitvalidatehelpbyexpath@setnscatsetbasedugrepp$+P%dfree00@X< Result0FalseTrue000( 00p000$ ID "%s"UNKNOWN TYPE %dEntity is NULL content "%s" orig "%s"SYSTEM "%s"00@, jX#000, DTD is NULL 000, 00p $ pNp 02 8 P 2 out of memory 0/00P, @-00p@ 300 $ 02@@$< /00`@(< adding states /00P, pushing error 06 02000( storing states 02`8 00P8 0P020$ validating 0/02``4 '`''`-P-020( 02`< 020( 02@(< '02`8 #020@(< 02P4 H(02@@< 02p0, 00` D 0X204 0h'00 0 02@\ )p?0(,#anyY0 2T X*B#text>x*0*@`002P 02@4< 02PP, 0P2&H PG0`&0@&000p$@,< 02#0  02@8< 0208 020 TODO 020, 00@`P H +02@8< 00 00 00`  uno document ns="%s" > 00@H< - name="%s" %s 000$ %s RelaxNG: 00000`P4 @W00 $ 02 B, /|(02D@P< 02PGpH 00 RT 0Y@`V 02P(0$ p002300 01refparentRefvalueattributeinterleavenoopzeroOrMorechoiceP`Hemptyelementexcept Дp02@+`@ @0notAllowedtextPnonedatatypegrouponeOrMoreparamstartdeflistoptionalexternalRef020( 000, 00@4| p|000$ 300@(< `3000( 00 02500 300ID? 00N`8 building group 0x2h 40@0E00`8 h402`< 40@02oP4 nsNamensnameanyName`5 $4xmlnsW`.%02m`8 0(0 8 combineinterleave%dY`02 0  02P70$ datatypeLibrary:/#?P1data029`4 Ytype02@0< grammar76020z@8< 602pxp@ 7702@Z`@ 7#`8Mixed is empty mixed@#0(2Wp, 02u`4 02@  j(8;;02|p@ includedefine02=`@ IDREFSIDREF02pH P800 `8 href`(1A@/02`0( 90`+*H!`:P#p%100L `"T.y@!div"+02p@ 00 %08 0 2%P0 02 @(< >p=`><>Py00P<<<00@4| 020( (02Ф0, 020, 00`@0< 0(0< 00'  :j02#@0< tokenstring02#0( 02"0( 0 blengthenumerationp=dminLengthminExclusiveUfractionDigitsmaxExclusive02P<| UmaxInclusivetotalDigitsPjminInclusivemaxLengthLpatternwhiteSpace0(2 P@ 4ch020@ 02p  000`) 4 tp 02@0  /00`80, /p02 70$ @-00@{p< 0P00- < `02.@ 02m@(| P-`-0`,02n`\ p?02@40( 02?P4 00p`\ P7:025@( 00pjpD 0+00PfH 000bpD 02,0, 00=@,< 00_`< 000]`< 020304 02p>0$ 00P\0 00p[0 02 S\ `*`"H!x @!02XP4 PC00)P4| 0/00`I0( U`(1xmlnsA@/xpointer@PHh00A`< 3element0/ +h/@P02PNP0| 0 p0@BA BBBrangerange-tostring-rangeA02L0$ prange-insideAP8pAhere originstart-pointend-point0<0@;02:@,| 022@(< 020@0 02/@(< 0P02p $ xP-`-00P0  @-00Ё ( p 02@@(| maxLengthInternal ErrortotalDigitsmaxInclusivepatternminInclusive0minExclusivewhiteSpacemaxExclusiveenumerationfractionDigitslengthminLength02`4 p=d0ph02h @j0P2@P H<dPbhP.Ш%lu%de02АP0 /(302`@<< YYI02[0, 02X #002P0 j%02@<| #nilKtrue02p< 0 LschemaLocationtype02@@<< a@0h'0 000 020  00Г0, 000 ( 00 ( 02`D  j Нpreservecollapsereplace00@(| 02@<< Mp `P@005p@ M   `*000A@,< 0p Д02 @0| NPj0h02jP0 N02kP8 j0I0J000  02JP, O0`X020$ 000  02MP8 000( 02KP< 02PSP<| 020( adding wildcard02Z@,| P0(2\D 00uP0 8QQ02D\ r V.P#02@<< Q00 @(| Q00P(| Q02@<< R00C@8< 00@4| @Wp|ab8ba`[qPaa02004 0020@$ $02`@$ unboundedmaxOccurs02`0 minOccurs02pP<| `V allocating type0Y@0(2@p@ annotationany %d02 `@ W`.\@.T.02P(| (02P0D 02pP ##any##otherstrictprocessContentsidskip##localnamespacelax02P<| 0Z00 0$ P02  02 P@| fixedvalue02 @  false0p2@ privatieelem %d02@@ adding groupallanongroup %dnamerefsequence(WWHZchoice0(2@ L groupelementanysequence %dW0(2L choice %ddefaultnillableXkeycomplexTypeunique02pD simpleTypeformkeyrefqualifiedanonelem %dpZabstractYmemberTypessimpleType %ditemTypelist02 H unionrestriction#allfinallist %dunion %d002P restriction %dbaseXY02`4 attributeGroupattributeYanyAttributeY02P@ 02D usexmlnsanonattr %drequiredprohibitedoptional0(2L all%d02 0L extensionZmixedcomplexType %dcomplexContentsimpleContent002D extension %d00@8< P p&00 0 00P40( 02@0| jPy0/yHg@\ NM0Rj02*`H unqualifiedtargetNamespaceschemamx\finalDefaultversion000pL redefineimportinclude]add annotationnotation@]02PD 1`(1A@/p%02`H Y`]02 @0| 02P30, l020208 02 10, min: %d id '%s' default: %smax: %d : %s Element default nillable 00@, H  ns %s fixed global namespace '%s' abstract max: unbounded type: %sref '%s' 00Џ0( Annot: empty Annot: %s base %s, unknowntype%d extension subtypes: any mixed Type: NULL no nameall sequence simple 000$ basic choice ur complex %s, Type: element %s empty restriction unknown 00Е0$ no name, Schemas: Schemas: NULL ^`%s00@0< 00p0 000( 00P0( 0Ѓ00P02000, @-0P$> ף02` /02   02 P <@ApB?@A02#@  0X2&@ DGD0P)024P8 P0p0З23E.`-P-02p=0, EP0<02 ( 0020  P.Ш02L< AYMDHMS00p00020P,< 020 0/02@@( 0Y@unsignedIntunsignedShortunsignedBytenegativeIntegerlongintIDREFENTITIESIDtokenNCNametimegYeargYearMonthanyTypeanySimpleTypestringanyURIQNamebooleangMonthDaydouble0008 floatdurationgDayNOTATIONbase64BinaryhexBinarydecimal`V dategMonthdateTime>NMTOKENNamelanguageENTITYNMTOKENSIDREFSshortintegerbytepositiveIntegerunsignedLong08ipj-0e .%f%lfHHbPP#j028 W`.T.@0\@.PHA@/0/8mYK`(102`D 00020 Y020 00004 (Pa@WREGEXINDEX_HEADERShow the headers from the indexINDEX_WORDSList words stored in indexINDEX_WORDS_ONLYList only words, one per line, stored in indexINDEX_WORDS_METAList only words and associated metaID separated by a tabINDEX_WORDS_FULLList words stored in index (more verbose)INDEX_STOPWORDSList stopwords stored in indexINDEX_FILESList file data stored in indexINDEX_METANAMESList metaname table stored in indexINDEX_ALLDump data ALL above data from index fileLIST_FUZZY_MODESList fuzzy options available -- indexing -- INDEXED_WORDSDisplay words as they are indexedPARSED_WORDSDisplay words as they are parsed from sourcePROPERTIESDisplay properties associted with each file as they are indexedDebug regular expression processingPARSED_TAGSShow meta tags as they are foundPARSED_TEXTShow text as it's parsedno files indexed. %s total words. %s total bytes. %s file%s indexed. %s unique word%s indexed. Writing index entries ... Writing header ... Sorting words ... No unique words indexed!Writing main index... no words removed. %d words removed by IgnoreLimit: Invalid char '%c' found in argument to '-%c %s'Failed to convert '-%c %s' to a number: '-%c' requires a positive integer.Invalid search switch option '%c' Unknown escape sequence '\%c'. Must be one of \f \n \r \t \\0`'-d' requires an output delimiter. '-p' requires list of properties.'-x' requires an output format string. '-s' requires list of sort properties.-t must only include HBthec. Found '%c'`@ Specify tag fields (HBtheca).'-P' requires a phrase delimiter.-L requires three parameters '-w' requires list of search words.P P P P P P P P P P P P P P P P P P P P P P P P `P P P P P P P P @P @ P P P P `version: %s docs: http://swish-e.org Scripts and Modules at: (libexecdir) = %s -E : Append errors to file specified, or stderr if file not specified. -k : Print words starting with a given char. -H : "Result Header Output": verbosity (0 to 9) [1]. -x : "Extended Output Format": Specify the output format. -e : "Economic Mode": The index proccess uses less RAM. -V : prints the current version -P : next param is Phrase delimiter. -d : next param is delimiter. -s : sort by these document properties in the output "prop1 prop2 ..." -p : include these document properties in the output "prop1 prop2 ..." -N : index only files with a modification date newer than path supplied -M : merges index files -m : the maximum number of results to return [defaults to all results] -b : begin results at this number -l : follow symbolic links when indexing -T : Trace options ('-T help' for info -v : indexing verbosity level (0 to 3) [-v %d] -c : configuration file(s) to use for indexing -f : index file to create or file(s) to search from [%s] "HBthec" - in Head|Body|title|header|emphasized|comments -t : tags to search in - specify as a string -w : search for words "word1 word2 ..." -i : create an index from the specified files The default value is: "%s" "prog" - index files supplied by an external program "http" - index web site files using a web crawler "fs" - index local files in your File System Valid options are: -S : specify which indexing system to use. options: defaults are in brackets swish -N /path/to/compare/file swish -M index1 index2 ... outputfile swish -k (char|*) [-f file1 file2 ...] [-m num] [-t str] [-d delim] [-H (num)] [-x output_format] [-P phrase_delimiter] [-p prop1 ...] [-s sortprop1 [asc|desc] ...] \ swish -w word1 word2 ... [-f file1 file2 ...] \ swish [-e] [-i dir file ... ] [-S system] [-c file] [-f file] [-l] [-v (num)] '-k' requires a character (or '*').Unknown switch '-%c'. Use -h for options.Failed to open Error file '%s' for appending: '-M' requires an output file name. '-f' requires list of index files.Invalid index switch option '%s'Bad path '%s' specified with -N: -N requires a path to a local file '-c' requires one or more configuration files.Unknown -S option "%s" '-S' requires a valid data source. '-i' requires a list of index files.```````````````````` `````p`````````0Invalid debugging option '%s'. Use '-T help' for help. Available debugging options for swish-e: @@@@@@@0@@@0P@0@@P@ @@@@@@@@@@@0P0P@ P@P0@00@@00@P00Missing switch character at '%s'. Use -h for options.Missing parameter. Use -h for options.At end of programInvalid operation mode '%d'err: no results . # Run time: %0.3f seconds # Search time: %0.3f seconds # Number of hits: %d # Removed stopwords: # Parsed Words: # # Index File: %s # Search words: %s # SWISH format: 2.4.2Removing very common words... Indexing Data Source: "%s" Invalid operation mode '%d': Update mode only supported with USE_BTREE featureSpecify directories or files to index.Merge output file '%s' already exists. Won't overwrite. Failed to provide merge output fileFailed to list any input files for mergingSorry, this program is in readonly mode` `Binary Sort issue - please report to swish-e listCannot limit by swish result property '%s'Specified limit name '%s' is not a PropertyNameProperty '%s' value '%s' must be <= '%s'Failed to set range for property '%s' values '%s' and '%s'Property '%s' is already limitedLimits have been prepared (and executed) -- call SwishResetSearchLimit() first# Swish-e format: 2.4.2# SWISH format: 2.4.2failed to add new meta entry '%s:%d'Severe index error in headerp@P@`@ 0Pp propEntry=NULL %20s:%2d (%3d) %c: (No Properties) Number of File Entries: %d %20s: %d -> %d (%4.2f%%) ReadSingleDocPropertiesFromDisk: ReadAllDocProperties: Dumping File Properties for File Number: %d -----> FILES in index %s <----- Hey, there are only %d files [Alias for %s (%d)]STRING(case:%s) META_INDEX Rank Bias=%3d%20s : id=%2d type=%2d -----> METANAMES for %s <----- Failed to lookup meta entry -----> WORD INFO in index %s <----- Invalid index file '%s' passed to SwishWordsByLetterSwishSetRefPtr - passed null addressNo index file suppliedEncodeProperty called but doesn't know the property type :(EncodeProperty - Invalid char '%c' found in string '%s'EncodeProperty - Attempted to convert '%s' to a numberWarning: Attempt to add duplicate property.Asked for too small of a buffer size!Failed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d Mapped propID %d to invalid property indexFailed to add property '%s' in file '%s'Swish-e database error. Unknown property type '%d'Invalid property name '%s'Called getResultPropValue with NULL resultProperty '%s' is not numericInvalid property type for property '%s' %Y-%m-%d %H:%M:%S %ZDecodeDocProperty passed NULL meta_entrySwishResultPropertyStr was called with a NULL resultAttempted to read results before searchingAttempted to SwishSeekResult before searchingUnknown metaname '%s' -- swish_words failed to find.Property '%s' in index '%s' is not compatible with index '%s'Property '%s' is not defined in index '%s'Rank is not defined as an auto property - must specify sort parametersresultSearch ZonePassed in NULL search object to SwishExecuteResultsSetRefPtr - passed null addresscalled sort_single_index_results without a vaild sort_data structcalled sort_single_index_results with invalid number of sort keysRan out of memory (could not allocate %lu more bytes)!Ran out of memory (could not reallocate %lu more bytes)!# SWISH format: 2.4.2Internal error in remove_worddata_longsFailed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d WordData Compression Error. zlib compress2 returned: %d Worddata size: %d compress buf size: %dInternal error in compress_location routinecompress1 failed to write: compress1 failed to write null: 0@P`pParsed word '%s' exceeded max length of %dNo search words specifiedAll search words too common to be usefulUnknown property name in display propertiesUnknown property name to sort byInvalid property typeUnknown metanameSingle wildcard not allowed as wordWildcard not allowed within a wordWord not foundSearch word exceeded maxwordlimit settingFailed to setup limit by propertyNo more resultsIndex Header ErrorCould not open index fileUnknown index file formatIndex file(s) is emptyIndex file errorInvalid swish handleInvalid results objectSyntax error in query (missing end quote or unbalanced parenthesis?)Invalid error number '%d'Swish aborted with non-negative lasterror%Y-%m-%d %H:%M:%S %Zswishdefaultswishreccountswishrankswishfilenumswishdbfileswishdocpathswishtitleswishdocsizeswishlastmodifiedinternal error - called addMetaEntry without a nameCalled init_property_list with non-null header->propIDX_to_metaIDUnknown Display property name "%s"Swish-e database error. Unknown property type accessing property '%s'%Y-%m-%d %H:%M:%S %ZFormatstring: unknown abbrev '%%%c'swishlastmodifiedswishdescription`````````````@``````````````````````0```` `P%%r%s%%p%s%%t%s%%l%s: requires "name" "fmtstr"ResultExtFormatName0123456789abcdefghijklmnopqrstuvwxyzCurrent Chunk LocatorsPer Doc Temporal ZoneCannot write location to swap file Adding:[%d:%s(%d)] '%s' Pos:%d Stuct:0x%0X (White-space found word '%s' Could not open temp file %s: Failed to write locaton mark to index: Writing word data: Complete Writing word data: %3d%% Writing word data: ... Writing word hash: Complete Writing word hash: %3d%% Writing word hash: ... Writing word text: Complete Writing word text: %3d%% Writing word text: ...Sorting %s words alphabetically Getting IgnoreLimit stopwords: Complete Getting IgnoreLimit stopwords: %25s Getting IgnoreLimit stopwords: ...swishlastmodifiedswishdescriptionInternal error in remove_last_file_from_list (Skipped due to Robots Excluion Rule in meta tag) (Skipped due to 'FileRules title' setting) (no words indexed) - Using %s parser - 0P@Failed to open: '%s': Failed to open filter for file '%s'Skipping %s: last_mod date is too old %s: requires two values%s: requires one valueConfiguration setting for TmpDir '%s' will be overridden by environment setting '%s'%s: %s is not a directoryUndefinedMetaNames=error. Found meta name '%s' in file '%s', not listed as a MetaNames in configAdding automatic MetaName '%s' found in file '%s' property '%s' not added for document '%s' XML parse error in file '%s' line %d. Error: %sFailed to create XML parser object for '%s'swishdescriptionWarning: Tag found in %s is too long: '%s'UndefinedMetaNames=error. Found meta name '%s' in file '%s', not listed as a MetaNames in config!!!Adding automatic MetaName '%s' found in file '%s' XXXXXXCouldn't unlink temporary file '%s' :Couldn't create temporary file '%s' file descriptor: Couldn't open temporary file '%s': Substituted %d embedded null character(s) in file '%s' with a newline NoneStemSoundexssesssiesissssseedeeedingatateblbleizizebbbdddfffgggmmmnnnppprrrtttwwwxxxeyiationalatetionaltionencienceancianceizerizeabliableallialentlientelieousliousizationizeationateatoratealismalivenessivefulnesfulousnessousalitialivitiivebilitibleicateicativealizealicitiicicalicfulnessalanceenceericableibleantementmententsionstiontouismateitiousiveizeeelllStemming_enMetaphoneDoubleMetaphoneStemming_esStemming>_frStemming_itStemming_ptStemming_deStemming_nlStemming_en1Stemming_en2Stemming_noStemming_seStemming_dkStemming_ruStemming_ficalled fuzzy_convert with NULL FUZZY_OBJECTcalled fuzzy_free_data with null valueUnknown FuzzyIndexingModeInvalid FuzzyIndexingMode '%d' in index fileOptions available for FuzzyIndexingMode: Failed to rename '%s' to '%s' : Failed to close file '%s': Couldn't open the property file "%s": Failed to seek to property index located at %ld for file number %d : Failed to read properties located at %ld for file number %d : Failed to seek to properties located at %ld for file number %d : Failed to call DB_ReadProperty_Native with seek positionsError writing %d of %d bytes: Failed to write file number %d metaID %d to property file. Tried to write %d, wrote %Zu : O/S failed to tell me where I am - file number %d metaID %d : Property database file not opened putc() failed writing null: Error writing to device while trying to write %d bytes: Read %d bytes, expected %d in DB_ReadFirstWordInvertedIndex_NativeInternal db_native.c error in DB_WriteWordHash_Native: fputc() returned error writing null: Internal db_native.c error in DB_WriteWordData_Native: RAM Disk: write wordsfputc() failed writing null: Error while flushing ramdisk to disk:Internal DB_native error - DB->num_words != DB->worddata_counter: Internal DB_native error - DB->num_words != DB->wordhash_counter: Index file '%s' and property file '%s' are not related.File "%s" has an unknown format.Could not open the index file '%s': Couldn't write the file "%s": Couldn't create the property file "%s": Couldn't create the index file "%s": Index file '%s' is a directoryquotampaposltgtnbspiexclcentpoundcurrenyenbrvbarsectumlcopyordflaquonotshyregmacrdegplusmnsup2sup3acutemicroparamiddotcedilsup1ordmraquofrac14frac12frac34iquestAgraveAacuteAcircAtildeAumlAringAEligCcedilEgraveEacuteEcircEumlIgraveIacuteIcircIumlETHNtildeOgraveOacuteOcircOtildeOumltimesOslashUgraveUacuteUcircUumlYacuteTHORNszligagraveaacuteacircatildeaumlaringaeligccedilegraveeacuteecirceumligraveiacuteicirciumlethntildeograveoacuteocircotildeoumldivideoslashugraveuacuteucircuumlyacutethornyumlOEligoeligScaronscaronYumlfnofcirctildeAlphaBetaGammaDeltaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiOmegaalphabetagammadeltaepsilonzetaetathetaiotakappalambdamunuxiomicronpirhosigmafsigmatauupsilonphichipsiomegaupsihpivenspemspthinspzwnjzwjlrmrlmndashmdashlsquorsquosbquoldquordquobdquodaggerDaggerbullhellippermilprimePrimelsaquorsaquoolinefrasleuroimageweierprealtradealefsymlarruarrrarrdarrharrcrarrlArruArrrArrdArrhArrforallpartexistemptynablaisinnotinniprodsumminuslowastradicpropinfinangandorcapcupintthere4simcongasympneequivlegesubsupnsubsubesupeoplusotimesperpsdotlceilrceillfloorrfloorlangranglozspadesclubsheartsdiamsthetasymConvertHTMLEntitiesfsFile-SystemFile[Rules|Match] filenameFile[Rules|Match] dirnameFile[Rules|Match] pathnameChecking dir "%s"... FileMatch dircontainsFileRules dircontainsFailed to open dir '%s' :FileRules dirnameInvalid path '%s': Checking file "%s"... Checking dir "%s"... err: '%s' - invalid parameter '%s' err: %s must be followed by [is|contains|regex] err: Wrong number of parameters in %s _NULL_%s requires at least three parameters: 'filterprog' 'options' 'regexp' ['regexp'...] %s: requires "extension" "filter" "[options]"%s: requires one value%s: %s is not a directoryhttpHTTP-CrawlerLink already processed.Skipping %s: %s URL disallowed by robots.txt.Skipping %s: %s Wrong method or server.Failed to open file '%s': Now fetching [%s]...sleeping %d seconds before fetching %s %s/swishspider@%ld.links%s/swishspider@%ld.contents%s/swishspider@%ld.responseURL '%s' returned redirect code %d without a Location. Indexing %s: Content type: %s. %s Skipping %s: Wrong content type: %s. retrieving %s (%d)... %s/swishspider@%ldEquivalentServers requires at least one valueequivalentserverSpiderDirectory requires one valueSpiderDirectory. %s is not a directoryDelay requires one valueMaxDepth requires one valueprogExternal-ProgramFailed to properly close external program: Unknown header line: '%s' from program %sdocumnet type '%s' not a valid Swish-e document type in Document-Type header '%s'Failed to documnet type in Document-Type header '%s'Failed to parse Document-Type '%s'Failed to find path name in Path-Name header '%s'Failed to parse Path-Name header '%s'Failed to parse Last-Mtime header '%s'Failed to parse Content-Length header '%s'Error removing temporary file '%s': Processing %s... Failed to write temporary filter file '%s': External program returned zero Content-Length when processing file'%s'External program failed to return required headers Content-Length: when processing file '%s'External program failed to return required headers Path-Name:Failed to spawn external program '%s': External Program found: %s Failed to find program '%s' in PATH: %s Found '%s' in PATH but is not executable%s: requires at least one valueSwishProgParameters%d properties sorted. %-40s One property sorted. %-40s No properties sorted. %-40s Sorting property: %-40.40s Failed to lookup propIDX %d (metaID %d)%s: requires 3 parameters (Eg: [=|>] a )%s: parameter 1 must be = or >%s: parameter 2 must be one char length%s: parameter 1 must be one char length%s: parameter is not a propertyFatal Error: Failed to find insert point in replace_swlineTXTHTMLXMLWMLXML2HTML2TXT2XML*HTML*TXT*Invalid FuzzyIndexingMode '%s' in config file%s requires parameter #%d of yes|on|1 or no|off|0%s has too many paramter%s: possible values are error, ignore, index or auto%s: requires one value%s: missing %d. parameter%s: Unknown document type "%s"'%s' value of '%d' is not an integer between %d and %d.Invalid char '%c' found in argument to '%s %s''%s': Failed to convert '%s' to a number: '%s' requires an integer between %d and %d.IgnoreWords File: requires pathCouldn't open the word file '%s': SwishDefault is obsolete. See the CHANGES file.%s: requires at least one value%s: unknown argument '%s'. Must be prepend|append|remove|replace|regex.Too many errors. Can not continue.Bad directive on line #%d of file %s: %s %s: requires size parameter in bytesDontBumpPositionOnEndTagsDontBumpPositionOnStartTagsXMLClassAttributesUndefinedXMLAttributesUndefinedMetaTagsBumpPositionCounterCharacters%s: requires two or three valuesswishdescription%s: third parameter must be empty or a number%s: second parameter must be or a numberStoreDescriptionWhy are you redefining the max sort key length of property '%s'?PropertyNamesSortKeyLengthWhy are you redefining the max length of property '%s'?Can't assign a length to property '%s': it is an alias%s: requires only two or more values, a length and a list of property namesPropertyNamesMaxLength%s - name '%s' is already a PropertyName or PropertyNameAlias%s - name '%s' not a PropertyNamePropertyNameAliasPropertyNamesDatePropertyNamesNumericPropertyNamesStripCharsPropertyNamesNoStripCharsPropertyNamesCompareCase%s - name '%s' is not a STRING type of PropertyPropertyNamesIgnoreCase%s - name '%s' is already a PropertyNamePropCompressionLevelImageLinksMetaNameIndexAltTagMetaNameHTMLLinksMetaNameWhy are you redefining the rank of metaname '%s'?Can't assign a rank to metaname '%s': it is an alias%s: requires only two or more values, a rank (integer) and a list of property names%s - name '%s' is already a MetaName or MetaNameAlias%s - name '%s' must not be an alias%s - name '%s' not a MetaName%s - name '%s' is already a MetaName%s already defined for meta '%s' as '%s'%s: requires two values: metaname default_valueExtractPathDefault%s: requires at least three values: metaname expression type and a expression/strings%s: requires two values (same length) or one translation ruleTranslateCharactersIgnoreTotalWordCountWhenRankingFuzzyIndexingModeUseStemming is deprecated. See FuzzyIndexingMode in the docsIndexDescription%s: requires a value%s: requires at least two values%s: requires one value (a set of characters)IgnoreNumberCharsobeyRobotsNoIndexIncludeConfigFileParsing config file '%s' Couldn't open the configuration file '%s': Failed to complie regular expression '%s', pattern. Error: %d%s regexp %s: unknown flag '%c'%s regex: failed to find search pattern delimiter '%c' in pattern '%s'replace %s =~ m[%s][%s]: %s Result String: '%s' Original String: '%s' %s match %s %c~ m[%s] : %s %s regex: failed to find replace pattern delimiter '%c' in pattern '%s'`0 `Pp@ P ` @ppp @`%s/swishspider@%ld.links%s/swishspider@%ld.response%s/swishspider@%ld.contents%s/swishspider@%ld%3d (line %4d): [%d]'faulty slice operation: 0Pp@0Replaced file '%s %s' with '%s %s' (date not defined)(file name not defined)Header %s in index %s doesn't match output headerHeader %s in index %s doesn't match length in length with output headerRemoved %6d words no longer present in docs for index '%s' Processing words in index '%s': %6d words Processing words in index '%s': %6d words Getting words in index '%s': %6d words Getting words in index '%s': %3d words failed to reopen '%s' :Failed to write mapping data: failed to load or create sorted properties for index %sswishlastmodifiedCan't merge index %s. It doesn't contain the property %sIn index %s metaname '%s' is an alias for '%s'(%d). But another index already mapped '%s' to ID# '%d'Failed to lookup alias for %s in output indexFailed to lookup alias for %s in index %smeta name %s in index %s is different type than in output indexTranslateChars header doesn't match for index %signoreTotalWordCountWhenRanking Rules doesn't match for index %sFuzzyIndexingMode in index %s of '%s' doesn't match '%s'BumpPositionCharsInput index '%s' has %d files and %d words swishdescriptionError '%d' converting internal UTF-8 to Latin-1. Failed to convert internal UTF-8 to Latin-1. Replacing non ISO-8859-1 char with char '%c' Warning: Tag found in %s is too long: '%s' Tried to append tag %s to stack, but stack is emptyswish parser adding more stack space for tag %s. from %d to %d<%s> (%s [%s]%s) no meta name definedFound Swish-e reserved property name '%s' (undefined meta name - no action)Found meta name '%s' in file '%s', not listed as a MetaNames in config**Adding automatic MetaName '%s' found in file '%s' (void *)parse_data, Attribute '%s' on tag '%s' too long to build metaname ClassAttribute on tag '%s' too long  @` @ ` `NamePointerSaved asTotal WordsTotal FilesIndexed onDescriptionMaintained byMinWordLimitMaxWordLimitWordCharactersBeginCharactersEndCharactersIgnoreFirstCharIgnoreLastCharStopWordsBuzzWordsStemming AppliedSoundex AppliedFuzzy ModeIgnoreTotalWordCountWhenRanking Unknown header type '%d' p@Invalid HEADER type '%d'Invalid OTHER header '%s'Stemming AppliedpMust pass a results object to SwishRemovedStopwordsMust pass a results object to SwishParsedWordsIndex file '%s' does not have header '%s'Index file '%s' is not an active index fileSwishHeaderValue requires a valid swish handleSwish Handle does not have any associated index files!?!?SwishIndexNames requires a valid swish handleSwishHeaderNames requires a valid swish handleNo matchInvalid regular expressionInvalid collation characterInvalid character class nameTrailing backslashInvalid back referenceUnmatched [ or [^Unmatched ( or \(Unmatched \{Invalid content of \{\}Invalid range endMemory exhaustedInvalid preceding regular expressionPremature end of regular expressionRegular expression too bigUnmatched ) or \)`4444444444 5@ p !--0( !&$` '--@01`./0pPP`pp0@@     `@` Memory exhaustedNo previous regular expression0pPp@ PDISK$USER1:[jfp.swish-e-2_4_2.src]double_metaphone.c;1 `  P P0p@ `  "@"0$$Property Compression Error. zlib compress2 returned: %d Prop len: %d compress buf size: %d compress level:%dout of memorysyntax errorno element found>not well-formedunclosed tokenunclosed tokenmismatched tagduplicate attributejunk after document elementillegal parameter entity referenceundefined entityrecursive entity referenceasynchronous entityreference to invalid character numberreference to binary entityreference to external entity in attributexml processing instruction not at start of external entityunknown encodingencoding specified in XML declaration is incorrectunclosed CDATA sectionerror in processing external entity referencedocument is not standaloneppppppppppp0pppppppppppp0 `@`P0pp` `  ` p  p     p p                 0 ``0`p @ pP    @@ ` 0  @`p`0@ p  @ ` `  @` Pp 0P`p00000000000000P0PPPP0P0@0  000 00000000``  ```````  ```  ``````@p0`  @p```````````````0`````````````` ` ```` PP p`@p P  ```P``````0Pp@  P `` 0 P P P P P   pP P ` P P  p  `        0    @ @ P 0@00000`00000000@`Pp @PPP00000@p P  @  @@@@@ @@@ @@@@@@0Pp@@@@@@ @@@@@`@@@@@@@ @@@@ @ @@@@pp0Pp@@00@ `@@@pp0p@@@@@@@@@@@@@@`@````@`0@0  000 00000000PPPPPPPPPPPPPPPPPP@p0`  @p```````````````0`````````````` ` ```` PP p`@p P  ```P``````0PpP    P  `` 0 P P P P P   pP P ` P P  p  `        0    @ @ P 0@00000`00000000@`Pp @PPP00000@p P  @  @@@@@ @@@ @@@@@@0Pp@@@@@@ @@@@@`@@@@@@@ @@@@ @ @@@@pp0Pp@@00@ `@@@pp0pP`pp@PPPPPPPPPPPPPPPP  p 0` 0 P0 0 0`P 0  0000000000 000000 P  p@ `0ppppppppp@ `pppppppppppp0PP0PpppppppPPp         P  P P P P  0  pPPPPP0@ 0 0    `` `             p 0 @@ P @ @ @ @ @ p @ @ @  @ @ @ @ @ P p @ p00 0 0 0 00 0 0 0 0 0 0 0 P 0PPPpP                  PP`P``PP````00@@@00p`Pp0`@`0@@@@@ @@@@@@@@@@@@@pP````PpxmlCharEncOutFunc: no output function ! Bytes: 0x%02X 0x%02X 0x%02X 0x%02X output conversion failed due to conv error input conversion failed due to input error 0@Pp` 0@P`pxmlInitCharEncodingHandlers : out of memory ! xmlNewCharEncodingHandler : out of memory ! xmlNewCharEncodingHandler : no name ! $1$DKA200:[TOOLS.LIBSRC.libxml2-2_6_11]encoding.c;1 increase MAX_ENCODING_HANDLERS : %s xmlRegisterCharEncodingHandler: Too many handler registered xmlRegisterCharEncodingHandler: NULL handler ! iconv : problems with filters for '%s'   p  @ @`h1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonidclassstyletitlelangdironclickonkeyupidclassstyletitlelangdiridclassstyletitlelangdiridclassstyletitlelangdironclickonkeyupcharsettypenamehrefrelrevshapecoordsonfocusonblurtargetrowscolsaltsrcalthrefclearttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonph1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonparamidclassstyletitlearchivealtnameheightwidthalignhspacevspaceshapecoordshrefnohrefonfocusonbluridsizecolorfaceidclassstyletitlelangdironclickonkeyupciteh1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttoninsdelidclassstyletitlelangdironclickonkeyuponloadbgcolortextlinkvlinkalinkidclassstyletitlelangdironclickonkeyupnamevaluetypeonfocusonbluridclassstyletitlelangdironclickonkeyupspanwidthaligncharcharoffvaligncolidclassstyletitlelangdironclickonkeyupciteidclassstyletitlelangdironclickonkeyupcompactdtddcompactlabelh1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallem>strongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonlegendidclassstyletitlelangdirsizecolorfaceh1h2h3h4h5h6uloldirmenuttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonprepdivcenterisindexhrtableaddressidclassstyletitlelangdironclickonkeyupmethodenctypeacceptnameonresetidclassstyletitlenamesrcidclassstyletitlerowscolsonloadframelangdirprofiletitleisindexbasescriptstylemetalinkobjectalignnoshadesizewidthversionheadbodyidclassstyletitlenamesrcalignheightwidthidclassstyletitlelangdironclickonkeyupnameheightwidthusemapismapidclassstyletitlelangdironclickonkeyuptypenamevaluecheckedsizesrcaltusemapismaponfocusonbluracceptidclassstyletitlelangdirpromptidclassstyletitlelangdironclickonkeyupforonfocusonbluridclassstyletitlelangdironclickonkeyupalignidclassstyletitlelangdironclickonkeyupcharsethreftyperelrevmediah1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressareanameactionh1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddresslilangdirnameschemecontenttypebodyh1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonh1h2h3h4h5h6uloldirmenuprepdldivcenterformisindexhrtableaddressttibusstrikebigsmallemstrongdfncodesampkbdvarciteabbrimgappletobjectfontbrscriptmapqsubsupspanbdoselectlabelbuttonparamidclassstyletitlelangdironclickonkeyupdeclareclassiddatatypearchivestandbyheightwidthusemapnamealignborderhspacevspacetypecompactstartoptionidclassstyletitlelangdironclickonkeyupidclassstyletitlelangdironclickonkeyuplabelvalueidvaluetypewidthemstrongdfncodesampkbdvarciteabbracronymttibusstrikeabrscriptmapqspanbdoiframecharsetsrcdefereventforoptionidclassstyletitlelangdironclickonkeyupnamesizeonfocusonblurlangdirmediatitleidclassstyletitlelangdironclickwidthborderframerulesalignbgcolorcaptioncoltheadtfoottbodytrtridclassstyletitlelangdironclickonkeyupaligncharcharoffvalignnowrapbgcolorwidthheightidclassstyletitlelangdironclickonkeyupabbraxisheadersscoperowspancolspanaligncharcharoffvalignidclassstyletitlelangdironclickonkeyupnameonfocusonblurthtdbgcolorlitypecompactdiraanchor abbracronymaddressappletareabbasebdobigbodydivbrbuttoncaptioncentercitecodecolcoldddeldfndirlidivdldddtemfontformframeh1h2h3h4h5h6headhrhtmliiframeimginputinsisindexkbdlabellegendlilinkmapmenumetabodydivobjectdivollioptionoptionpparampreqssampscriptselectsmallspanstrikestrongstylesubsuptabletrtbodytrtdtfoottrththeadtrtitletrtdttuullivarformformphrh1h2h3h4h5h6dlulolmenudiraddressprelistingxmpheadheadptitlepbodyheadstylelinktitlepheadstylelinktitlepliph1h2h3h4h5h6dladdressprelistingxmpheadlihrpheadh1pheadh2pheadh3pheadh4pheadh5pheadh6pheaddirpheadaddresspheadulprepheadullistingpheadxmppheadpheaddlpdtmenudiraddressprelistingxmpheaddtpmenudiraddressprelistingxmpheadddddpmenudiraddressprelistingxmpheaddtulpheadolmenudiraddressprelistingxmpolpheadulmenupheadulppheadh1h2h3h4h5h6divpheadpheadcenterfontbipheadaacaptionpcaptioncolpcolcaptioncolptablepheadh1h2h3h4h5h6prelistingxmpaththtdpspanfontabiutdthtdpspanfontabiutrthtdtrcaptioncolptheadcaptioncoltfootthtdtrcaptioncoltheadtbodyptbodythtdtrcaptioncoltheadtfoottbodypoptionoptionoptionlegendpheadh1h2h3h4h5h6prelistingxmpahtmlheadbodyonclickonkeyuponloadonfocusonbluronrestdivtdthtrtheadtbodytfoottableheadbodyhtmlquotampaposltgtnbspiexclcentpoundcurrenyenbrvbarsectumlcopyordflaquonotshyregmacrdegplusmnsup2sup3acutemicroparamiddotcedilsup1ordmraquofrac14frac12frac34iquestAgraveAacuteAcircAtildeAumlAringAEligCcedilEgraveEacuteEcircEumlIgraveIacuteIcircIumlETHNtildeOgraveOacuteOcircOtildeOumltimesOslashUgraveUacuteUcircUumlYacuteTHORNszligagraveaacuteacircatildeaumlaringaeligccedilegraveeacuteecirceumligraveiacuteicirciumlethntildeograveoacuteocircotildeoumldivideoslashugraveuacuteucircuumlyacutethornyumlOEligoeligScaronscaronYumlfnofcirctildeAlphaBetaGammaDeltaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiOmegaalphabetagammadeltaepsilonzetaetathetaiotakappalambdamunuxiomicronpirhosigmafsigmatauupsilonphichipsiomegaupsihpivenspemspthinspzwnjzwjlrmrlmndashmdashlsquorsquosbquoldquordquobdquodaggerDaggerbullhellippermilprimePrimelsaquorsaquoolinefrasleuroimageweierprealtradealefsymlarruarrrarrdarrharrcrarrlArruArrrArrdArrhArrforallpartexistemptynablaisinnotinniprodsumminuslowastradicpropinfinangandorcapcupintthere4simcongasympneequivlegesubsupnsubsubesupeoplusotimesperpsdotlceilrceillfloorrfloorlangranglozspadesclubsheartsdiamsaabbracronymaddressappletbbdobigbodybuttoncaptioncentercitecodedddeldfndivdtemfontformh1h2h3h4h5h6iiframeinskbdlabellegendliobjectppreqssampsmallspanstrikestrongtdthttuvarnoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareaacronymabasefontiframeinputtextareaondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownhreflangaccesskeytabindexacronymabasefontiframeinputtextareanoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareacodebasetabindexaccesskeyondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownnoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareaondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownonunloadbackgroundondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndisabledtabindexaccesskeyondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndatetimeondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownnoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareaacronymabasefontiframeinputtextareanoscriptnoframesblockquotefieldsetondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownonsubmitaccept-charsetlongdescframebordermarginwidthmarginheightnoresizescrollingonunloadframesetnoframesframesetlongdescframebordermarginwidthmarginheightscrollingondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownlongdescondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndisabledreadonlymaxlengthtabindexaccesskeyonselectonchangeondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownaccesskeyondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownaccesskeyondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownhreflangnoscriptnoframesblockquotefieldsetnoscriptnoframesblockquotefieldsethttp-equivnoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareanoscriptnoframesblockquotefieldsetacronymabasefontiframeinputtextareaondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowncodebasecodetypetabindexondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndisabledondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndisabledselectedvaluetypelanguageoptgroupondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownmultipledisabledtabindexonchangeondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownonkeyupsummarycellspacingcellpaddingdatapagesizecolgroupondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydownondblclickonmousedownonmouseuponmouseoveronmouseoutonkeypressonkeydowndisabledreadonlytabindexaccesskeyonselectonchangeabbreviated forminformation on author java applet client-side image map area bold text styledocument base uri basefontbase font size i18n bidi over-ride large text styleblockquotelong quotation document body forced line break push button table caption shorthand for div align=center citationcomputer code fragmenttable column colgrouptable column group definition description deleted text instance definitiondirectory listgeneric language/style containerdefinition list definition term emphasisfieldsetform control group local change to font interactive form fieldsetsubwindow framesetwindow subdivisionnoframesheading heading heading heading heading heading document head horizontal rule document root element italic text styleinline subwindow embedded image form control inserted textsingle line prompt text to be entered by the userform field label text fieldset legend list item a media-independent link client-side image map menu list generic metainformation noframesalternate content container for non frame-based rendering noscriptalternate content container for non script-based rendering generic embedded object ordered list optgroupoption group selectable choice paragraph named property value preformatted text short inline quotation strike-through text stylesample program o>utput, scripts, etc.script statements option selector small text stylegeneric language/style container strike-through textstrong emphasisstyle info subscriptsuperscript table body table data celltextareamulti-line text field table footer table header celltable header document title table row teletype or monospaced text styleunderlined text styleunordered list instance of a variable or program argumentframesetblockquotenoscriptcolgroupcolgroupcolgroupcolgroupcolgroupcolgroupoptgroupfieldsetondblclickonmousedownonmouseuponmouseoveronmousemoveonmouseoutonkeypressonkeydownonunloadonsubmitonchangeonselectquotation mark = APL quote, U+0022 ISOnumampersand, U+0026 ISOnumsingle quoteless-than sign, U+003C ISOnumgreater-than sign, U+003E ISOnumno-break space = non-breaking space, U+00A0 ISOnuminverted exclamation mark, U+00A1 ISOnumcent sign, U+00A2 ISOnumpound sign, U+00A3 ISOnumcurrency sign, U+00A4 ISOnumyen sign = yuan sign, U+00A5 ISOnumbroken bar = broken vertical bar, U+00A6 ISOnumsection sign, U+00A7 ISOnumdiaeresis = spacing diaeresis, U+00A8 ISOdiacopyright sign, U+00A9 ISOnumfeminine ordinal indicator, U+00AA ISOnumnot sign, U+00AC ISOnumsoft hyphen = discretionary hyphen, U+00AD ISOnumregistered sign = registered trade mark sign, U+00AE ISOnummacron = spacing macron = overline = APL overbar, U+00AF ISOdiadegree sign, U+00B0 ISOnumplus-minus sign = plus-or-minus sign, U+00B1 ISOnumacute accent = spacing acute, U+00B4 ISOdiamicro sign, U+00B5 ISOnumpilcrow sign = paragraph sign, U+00B6 ISOnummiddle dot = Georgian comma Greek middle dot, U+00B7 ISOnumcedilla = spacing cedilla, U+00B8 ISOdiasuperscript one = superscript digit one, U+00B9 ISOnummasculine ordinal indicator, U+00BA ISOnumvulgar fraction one half = fraction one half, U+00BD ISOnuminverted question mark = turned question mark, U+00BF ISOnumlatin capital letter A with acute, U+00C1 ISOlat1latin capital letter A with circumflex, U+00C2 ISOlat1latin capital letter A with tilde, U+00C3 ISOlat1latin capital letter A with diaeresis, U+00C4 ISOlat1latin capital letter C with cedilla, U+00C7 ISOlat1latin capital letter E with grave, U+00C8 ISOlat1latin capital letter E with acute, U+00C9 ISOlat1latin capital letter E with circumflex, U+00CA ISOlat1latin capital letter E with diaeresis, U+00CB ISOlat1latin capital letter I with grave, U+00CC ISOlat1latin capital letter I with acute, U+00CD ISOlat1latin capital letter I with circumflex, U+00CE ISOlat1latin capital letter I with diaeresis, U+00CF ISOlat1latin capital letter ETH, U+00D0 ISOlat1latin capital letter N with tilde, U+00D1 ISOlat1latin capital letter O with grave, U+00D2 ISOlat1latin capital letter O with acute, U+00D3 ISOlat1latin capital letter O with circumflex, U+00D4 ISOlat1latin capital letter O with tilde, U+00D5 ISOlat1latin capital letter O with diaeresis, U+00D6 ISOlat1multiplication sign, U+00D7 ISOnumlatin capital letter U with grave, U+00D9 ISOlat1latin capital letter U with acute, U+00DA ISOlat1latin capital letter U with circumflex, U+00DB ISOlat1latin capital letter U with diaeresis, U+00DC ISOlat1latin capital letter Y with acute, U+00DD ISOlat1latin capital letter THORN, U+00DE ISOlat1latin small letter sharp s = ess-zed, U+00DF ISOlat1latin small letter a with acute, U+00E1 ISOlat1latin small letter a with circumflex, U+00E2 ISOlat1latin small letter a with tilde, U+00E3 ISOlat1latin small letter a with diaeresis, U+00E4 ISOlat1latin small letter ae = latin small ligature ae, U+00E6 ISOlat1latin small letter c with cedilla, U+00E7 ISOlat1latin small letter e with grave, U+00E8 ISOlat1latin small letter e with acute, U+00E9 ISOlat1latin small letter e with circumflex, U+00EA ISOlat1latin small letter e with diaeresis, U+00EB ISOlat1latin small letter i with grave, U+00EC ISOlat1latin small letter i with acute, U+00ED ISOlat1latin small letter i with circumflex, U+00EE ISOlat1latin small letter i with diaeresis, U+00EF ISOlat1latin small letter eth, U+00F0 ISOlat1latin small letter n with tilde, U+00F1 ISOlat1latin small letter o with grave, U+00F2 ISOlat1latin small letter o with acute, U+00F3 ISOlat1latin small letter o with circumflex, U+00F4 ISOlat1latin small letter o with tilde, U+00F5 ISOlat1latin small letter o with diaeresis, U+00F6 ISOlat1division sign, U+00F7 ISOnumlatin small letter u with grave, U+00F9 ISOlat1latin small letter u with acute, U+00FA ISOlat1latin small letter u with circumflex, U+00FB ISOlat1latin small letter u with diaeresis, U+00FC ISOlat1latin small letter y with acute, U+00FD ISOlat1latin small letter thorn with, U+00FE ISOlat1latin small letter y with diaeresis, U+00FF ISOlat1latin capital ligature OE, U+0152 ISOlat2latin small ligature oe, U+0153 ISOlat2latin capital letter S with caron, U+0160 ISOlat2latin small letter s with caron, U+0161 ISOlat2latin capital letter Y with diaeresis, U+0178 ISOlat2latin small f with hook = function = florin, U+0192 ISOtechmodifier letter circumflex accent, U+02C6 ISOpubsmall tilde, U+02DC ISOdiagreek capital letter alpha, U+0391greek capital letter beta, U+0392greek capital letter gamma, U+0393 ISOgrk3greek capital letter delta, U+0394 ISOgrk3greek capital letter epsilon, U+0395greek capital letter zeta, U+0396greek capital letter eta, U+0397greek capital letter theta, U+0398 ISOgrk3greek capital letter iota, U+0399greek capital letter kappa, U+039Agreek capital letter lambda, U+039B ISOgrk3greek capital letter mu, U+039Cgreek capital letter nu, U+039Dgreek capital letter xi, U+039E ISOgrk3greek capital letter omicron, U+039Fgreek capital letter pi, U+03A0 ISOgrk3greek capital letter rho, U+03A1greek capital letter sigma, U+03A3 ISOgrk3greek capital letter tau, U+03A4greek capital letter upsilon, U+03A5 ISOgrk3greek capital letter phi, U+03A6 ISOgrk3greek capital letter chi, U+03A7greek capital letter psi, U+03A8 ISOgrk3greek capital letter omega, U+03A9 ISOgrk3greek small letter alpha, U+03B1 ISOgrk3greek small letter beta, U+03B2 ISOgrk3greek small letter gamma, U+03B3 ISOgrk3greek small letter delta, U+03B4 ISOgrk3greek small letter epsilon, U+03B5 ISOgrk3greek small letter zeta, U+03B6 ISOgrk3greek small letter eta, U+03B7 ISOgrk3greek small letter theta, U+03B8 ISOgrk3greek small letter iota, U+03B9 ISOgrk3greek small letter kappa, U+03BA ISOgrk3greek small letter lambda, U+03BB ISOgrk3greek small letter mu, U+03BC ISOgrk3greek small letter nu, U+03BD ISOgrk3greek small letter xi, U+03BE ISOgrk3greek small letter omicron, U+03BF NEWgreek small letter pi, U+03C0 ISOgrk3greek small letter rho, U+03C1 ISOgrk3greek small letter final sigma, U+03C2 ISOgrk3greek small letter sigma, U+03C3 ISOgrk3greek small letter tau, U+03C4 ISOgrk3greek small letter upsilon, U+03C5 ISOgrk3greek small letter phi, U+03C6 ISOgrk3greek small letter chi, U+03C7 ISOgrk3greek small letter psi, U+03C8 ISOgrk3greek small letter omega, U+03C9 ISOgrk3thetasymgreek small letter theta symbol, U+03D1 NEWgreek upsilon with hook symbol, U+03D2 NEWgreek pi symbol, U+03D6 ISOgrk3en space, U+2002 ISOpubem space, U+2003 ISOpubthin space, U+2009 ISOpubzero width non-joiner, U+200C NEW RFC 2070zero width joiner, U+200D NEW RFC 2070left-to-right mark, U+200E NEW RFC 2070right-to-left mark, U+200F NEW RFC 2070en dash, U+2013 ISOpubem dash, U+2014 ISOpubleft single quotation mark, U+2018 ISOnumright single quotation mark, U+2019 ISOnumsingle low-9 quotation mark, U+201A NEWleft double quotation mark, U+201C ISOnumright double quotation mark, U+201D ISOnumdouble low-9 quotation mark, U+201E NEWdagger, U+2020 ISOpubdouble dagger, U+2021 ISOpubbullet = black small circle, U+2022 ISOpubhorizontal ellipsis = three dot leader, U+2026 ISOpubper mille sign, U+2030 ISOtechprime = minutes = feet, U+2032 ISOtechdouble prime = seconds = inches, U+2033 ISOtechsingle left-pointing angle quotation mark, U+2039 ISO proposedsingle right-pointing angle quotation mark, U+203A ISO proposedoverline = spacing overscore, U+203E NEWfraction slash, U+2044 NEWeuro sign, U+20AC NEWblackletter capital I = imaginary part, U+2111 ISOamsoscript capital P = power set = Weierstrass p, U+2118 ISOamsoblackletter capital R = real part symbol, U+211C ISOamsotrade mark sign, U+2122 ISOnumalef symbol = first transfinite cardinal, U+2135 NEWleftwards arrow, U+2190 ISOnumupwards arrow, U+2191 ISOnumrightwards arrow, U+2192 ISOnumdownwards arrow, U+2193 ISOnumleft right arrow, U+2194 ISOamsaleftwards double arrow, U+21D0 ISOtechupwards double arrow, U+21D1 ISOamsarightwards double arrow, U+21D2 ISOtechdownwards double arrow, U+21D3 ISOamsaleft right double arrow, U+21D4 ISOamsafor all, U+2200 ISOtechpartial differential, U+2202 ISOtechthere exists, U+2203 ISOtechempty set = null set = diameter, U+2205 ISOamsonabla = backward difference, U+2207 ISOtechelement of, U+2208 ISOtechnot an element of, U+2209 ISOtechcontains as member, U+220B ISOtechn-ary product = product sign, U+220F ISOamsbn-ary summation, U+2211 ISOamsbminus sign, U+2212 ISOtechasterisk operator, U+2217 ISOtechsquare root = radical sign, U+221A ISOtechproportional to, U+221D ISOtechinfinity, U+221E ISOtechangle, U+2220 ISOamsological and = wedge, U+2227 ISOtechlogical or = vee, U+2228 ISOtechintersection = cap, U+2229 ISOtechunion = cup, U+222A ISOtechintegral, U+222B ISOtechtherefore, U+2234 ISOtechtilde operator = varies with = similar to, U+223C ISOtechapproximately equal to, U+2245 ISOtechalmost equal to = asymptotic to, U+2248 ISOamsrnot equal to, U+2260 ISOtechidentical to, U+2261 ISOtechless-than or equal to, U+2264 ISOtechgreater-than or equal to, U+2265 ISOtechsubset of, U+2282 ISOtechsuperset of, U+2283 ISOtechnot a subset of, U+2284 ISOamsnsubset of or equal to, U+2286 ISOtechsuperset of or equal to, U+2287 ISOtechcircled plus = direct sum, U+2295 ISOamsbcircled times = vector product, U+2297 ISOamsbup tack = orthogonal to = perpendicular, U+22A5 ISOtechdot operator, U+22C5 ISOamsbleft ceiling = apl upstile, U+2308 ISOamscright ceiling, U+2309 ISOamscleft floor = apl downstile, U+230A ISOamscright floor, U+230B ISOamscleft-pointing angle bracket = bra, U+2329 ISOtechright-pointing angle bracket = ket, U+232A ISOtechlozenge, U+25CA ISOpubblack spade suit, U+2660 ISOpubblack club suit = shamrock, U+2663 ISOpubblack heart suit = valentine, U+2665 ISOpubblack diamond suit, U+2666 ISOpubblockquotenoframesnoscriptleft-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnumsuperscript two = superscript digit two = squared, U+00B2 ISOnumsuperscript three = superscript digit three = cubed, U+00B3 ISOnumright-pointing double angle quotation mark right pointing guillemet, U+00BB ISOnumvulgar fraction one quarter = fraction one quarter, U+00BC ISOnumvulgar fraction three quarters = fraction three quarters, U+00BE ISOnumlatin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1latin capital letter O with stroke latin capital letter O slash, U+00D8 ISOlat1latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1downwards arrow with corner leftwards = carriage return, U+21B5 NEWMemory allocation failed Memory allocation failed : %s Bytes: 0x%02X 0x%02X 0x%02X 0x%02X Input is not proper UTF-8, indicate encoding ! Char 0x%X out of allowed range htmlParseEntityRef: expecting ';' htmlParseEntityRef: no name htmlParseCharRef: invalid xmlChar value %d htmlParseCharRef: invalid value htmlParseCharRef: invalid decimal value htmlParseCharRef: invalid hexadecimal value htmlCheckEncoding: encoder error buffer allocation failed htmlParseStartTag: problem parsing attributes Attribute %s redefined AttValue: no value found AttValue: ' expected AttValue: " expected error parsing attribute name htmlParseStartTag: misplaced tag htmlParseStartTag: misplaced tag htmlParseStartTag: misplaced tag htmlParseStartTag: invalid element name Comment not terminated combine="choice" combine="interleave" xmlns="http://relaxng.org/ns/structure/1.0"RelaxNG has no top grammar getting element list in interleave computation Attributes conflicts in interleave Element >or text conflicts in interleave @@@@@@@PPPPPPPPPPPRNG internal error trying to compile %s  0@P`p`PPallocating define PPPbuilding choice Attributes conflicts in group Found forbidden pattern start//empty Found forbidden pattern data/except//empty Found forbidden pattern start//text Found forbidden pattern data/except//text Found forbidden pattern list//text Found forbidden pattern start//value Found forbidden pattern start//data Found forbidden pattern start//interleave Found forbidden pattern data/except//interleave Found forbidden pattern list//interleave Found forbidden pattern start//group Found forbidden pattern data/except//group Found forbidden pattern start//list Found forbidden pattern data/except//list Found forbidden pattern list//list Found forbidden pattern start//oneOrMore Found forbidden pattern data/except//oneOrMore Found nsName attribute without oneOrMore ancestor Found anyName attribute without oneOrMore ancestor Found forbidden pattern start//attribute Found forbidden pattern data/except//attribute Found forbidden pattern oneOrMore//interleave//attribute Found forbidden pattern oneOrMore//group//attribute Found forbidden pattern list//attribute Found forbidden pattern attribute//attribute Element %s has a content type error Element %s attributes have a content type error Found forbidden pattern attribute//element(ref) Found forbidden pattern list//element(ref) Found forbidden pattern data/except//element(ref) Found forbidden pattern data/except//ref Found forbidden pattern list//ref Detected a cycle in %s references expecting name, anyName, nsName or choice : got %s Element choice is empty nsName has no ns attribute Attribute with QName 'xmlns' is not allowed Attribute with namespace '%s' is not allowed http://www.w3.org/2000/xmlnsname '%s' is not an NCName Element %s name '%s' is not an NCName Expecting an except node except has no content exceptNameClass allows only a single except node Failed to add %s to hash table Failed to create interleaves hash table Some element miss the combine attribute uses unknown combine value '%s'' use both 'choice' and 'interleave' Internal error: start element not found Expecting a single text value for content Value '%s' is not acceptable for type '%s' Element has no content Error type '%s' is not exported by type library '%s' Internal error with type library '%s': no 'have' Use of unregistered type library '%s' http://relaxng.org/ns/structure/1.0value type '%s' is not an NCName start more than one children element notAllowed is not empty element empty is not empty start has no children Unexpected node %s is not a pattern Internal error parentRef definitions '%s' parentRef is not empty parentRef name '%s' is not an NCName parentRef has no name Use of parentRef without a parent grammar xmlRelaxNGParse: notAllowed element is not empty xmlRelaxNGParse: %s is empty Error refs definitions Error refs definitions '%s' Could not create references hash ref is not empty ref name '%s' is not an NCName ref has no name Element %s is empty text: had a child node empty: had a child node attribute has multiple children attribute has invalid content RNG Internal error, noop found in attribute xmlRelaxNGParseattribute: attribute has no children Element interleave is empty create interleaves RNG Internal error, noop found in element RNG Internal error, except found in element RNG Internal error, param found in element RNG Internal error, start found in element @`` ```````````````xmlRelaxNGParseElement: element has no content xmlRelaxNGParseElement: element has no children Element has no grammar has no children grammar has unexpected child %s Include document root is not a grammar Include document is empty Include node has no data Internal error on define aggregation of %s Could not create definition hash define has no children define name '%s' is not an NCName define has no name Element data has unexpected content %s param has no name Type library '%s' does not allow type parameters http://www.w3.org/2001/XMLSchema-datatypesdata type '%s' is not an NCName data has no type Unknown attribute %s on %s Attribute %s URI %s has a fragment ID Attribute %s URI %s is not absolute Attribute %s contains invalid URI %s Attribute %s is not allowed on %s element %s doesn't allow foreign elements Failed to create a name %s element Found nsName/except//nsName forbidden construct xmlRelaxNGParse: no namespace for prefix %s Found nsName/except//anyName forbidden construct Found anyName/except//anyName forbidden construct Failed to load include %s Failed to compute URL for include %s xmlRelaxNGParse: include has no href attribute Failed to load externalRef %s adding document xmlRelaxNG: allocate memory for doc %s xmlRelaxNG: could not load %s Detected an externalRef recursion for %s Failed to compute URL for externalRef %s Fragment forbidden in URI for externalRef %s Incorrect URI for externalRef %s xmlRelaxNGParse: externalRef has no href attribute xmlRelaxNG: included document %s root is not a grammar xmlRelaxNG: include %s has a define %s but not the included grammar xmlRelaxNG: include %s has define without name xmlRelaxNG: include %s has a start but not the included grammar xmlRelaxNG: included document is empty %s allocating include Detected an Include recursion for %s Relax-NG types library failed to register '%s' adding types library Relax-NG types library '%s' already registered xmlRelaxNGParse: nothing to parse in_memory_bufferxmlRelaxNGParse: could not parse schemas xmlRelaxNGParse: could not load %s Failed to allocate sh table for Relax-NG types building parser Reference %s has no matching definition Internal error: reference has content in CheckReference %s Internal error: no grammar in CheckReference %s Some defines for %s needs the combine attribute Defines for %s use unknown combine value '%s'' Defines for %s use both 'choice' and 'interleave' http://www.w3.org/2001/XMLSchemaMemory allocation failed : %s allocating locationsetadding location to setallocating range$1$DKA200:[TOOLS.LIBSRC.libxml2-2_6_11]xpointer.c;1Unimplemented block at %s:%d Internal error at %s:%d 000`0``00000`0``00    `   ``  allocating point PPPpPPPPPPPpppPppwarning: ChildSeq not starting by /1 unsupported scheme '%s' allocating bufferxmlXPtrEval: object(s) left on the eval stack xmlXPtrEval: evaluation failed to return a node set allocating evaluation contexthttp://www.w3.org/2001/XMLSchemahttp://www.w3.org/2001/XMLSchema-instance$1$DKA200:[TOOLS.LIBSRC.libxml2-2_6_11]xmlschemas.c;1Unimplemented block at %s:%d Attribute "%s" is required but missing. Attribute "%s": the value is not valid. Attribute "%s" is prohibited. Attribute "%s" is not allowed. p`P@0The value failed to validate against the facet "%s". Internal error: xmlSchemaValidateSimpleTypeValue, validating facets of union simple type "%s" Internal error: xmlSchemaValidateSimpleTypeValue, validating members of union simple type "%s" Internal error: xmlSchemaValidateSimpleTypeValue, union simple type "%s" has no member types The value is not valid with respect to the "pattern" facet(s) of type "%s". Internal error: xmlSchemaValidateSimpleTypeValue, validating "pattern" facets of type "%s" The value is not valid with respect to the "enumeration" facet(s). Internal error: xmlSchemaValidateSimpleTypeValue, validating facets of list simple type "%s" The value is not valid with respect to the facet "%s". The value with length "%s" is not facet-valid with respect to maxLength = "%s". The value with length "%s" is not facet-valid with respect to minLength = "%s". The value with length "%s" is not facet-valid with respect to length = "%s". Internal error: xmlSchemaValidateSimpleTypeValue, validating list simple type "%s" Internal error: xmlSchemaValidateSimpleTypeValue, validating facets of atomic simple type "%s" Internal error: xmlSchemaValidateSimpleTypeValue, validating atomic simple type "%s" Internal error: xmlSchemaValidateSimpleTypeValue, validating built-in type "%s" The value is not valid. The value of attribute "%s" is not valid. Element "%s": node type of node unexpected here. Element "%s": child "%s" should not be present. @@@@@@@@@@@@registering attributesthe default namespaceregistering required attributesInternal error: attribute %s type not resolved Internal error: xmlSchemaValidateAttributes: given type "%s"is not a complexType unimplemented content type %d Internal error: xmlSchemaValidateComplexType, Element "%s": the base type of the corresponding complex type "%s" is not a user derived or a built-in simple type. Internal error: xmlSchemaValidateComplexType, Element "%s": error while validating character content against complex type "%s"; failed to apply facets. Internal error: xmlSchemaValidateComplexType, Element "%s": error while validating character content against complex type "%s"; failed to compute the built-in simple type for facet validation. Internal error: xmlSchemaValidateComplexType, Element "%s": error while validating character content against complex type "%s". The character value is not valid with respect to the simple type. Element children are not allowed, because the content type is a simple type. Character children are not allowed, because the content type is element-only. Character or element children are not allowed, because the content type is empty. ```@`Element %s with xs:nil but not nillable Empty element %s cannot get a fixed value Element %s is not empty Element declaration %s is abstract 0 ` p  @ The attributes of element "%s" must be empty, excepting those whose namespace name is identical to http://www.w3.org/2001/XMLSchema-instance and whose local name is one of type, nil, schemaLocation or noNamespaceSchemaLocation. noNamespaceSchemaLocationElement "%s" must have no element children. Internal error: xmlSchemaValidateSimpleTypeElement %s content Internal error: xmlSchemaValidateSimpleTypeElement %s Element %s content check failure Element %s content check failed Element %s: missing child %s found %s Element %s: missing child %s Internal error: xmlSchemaValidateElementType Internal error: element reference %s not resolved ` P @p0 Element %s has no type Root element %s not global Element %s not declared document has no root allocating validation contextType "%s": the value "%s" of the facet "whiteSpace" is invalid. Type "%s": the value "%s" of the facet "pattern" is invalid. Internal error: xmlSchemaCheckFacet, failed to validate the value "%s" name of the facet "%s" against the base type "%s". Type "%s": the value "%s" of the facet "%s" is invalid. Internal error: xmlSchemaCheckFacet, creating a new validation context. Internal error: xmlSchemaCheckFacet, the type "%s" has no base type. `` ```Found unexpected type %d in %s content model Schemas: group %s reference %s is not foundSchemas: extension type %s is recursive `p P p  0 Found unexpected type = NULL in %s content model Content model of %s is not determinist: failed to compile %s content model Cannot create automata for elem %s Union simple type "%s": the facet "%s" is not allowed. Union simple type "%s": its member type "%s" is not validly derived from its corresponding member type "%s" of the base type "%s" as defined in Type Derivation OK (Simple). Internal error: xmlSchemaCheckDerivationValidSimpleRestriction (3.3.2.3), union simple type "%s", unequal number of member types in the base type Union simple type "%s": the "final" of its base type "%s" must not contain "restriction". Union simple type "%s": its base type "%s" has not a variety of union. Union simple type "%s": the facets must be empty. Union simple type "%s": the "final" of member type "%s" contains "union". Union simple type "%s": the member type "%s" is not an "atomic" simple type. List simple type "%s": its item type "%s" is not validly derived from the item type "%s" of the base type "%s" as defined in Type Derivation OK (Simple). xmlSchemaCheckDerivationValidSimpleRestriction: List simple type "%s": failed to evaluate the item type of its base type "%s". List simple type "%s": its base type "%s" must not have a "final" containing "restriction". List simple type "%s": its base type "%s" must have a variety of list. List simple type "%s": the facet "%s" is not allowed. List simple type "%s": the "final" of its item type "%s" must not contain "list". List simple type "%s": its item type is a union simple type, but the member type "%s" of this item type is not an "atomic" simple type. List simple type "%s": its item type "%s" is not an atomic or union simple type. Internal error: xmlSchemaCheckDerivationValidSimpleRestriction: failed to evaluate the item type of type "%s". Atomic simple type "%s": the facet "%s" is not allowed on primitive type "%s". xmlSchemaCheckDerivationValidSimpleRestriction: failed to get primitive type of type "%s". Atomic simple type "%s": the "final" of its base type "%s" must not contain "restriction". Atomic simple type "%s": its base type "%s" is not an atomic simple type. xmlSchemaCheckDerivationValidSimpleRestriction: the given type "%s" is not a user-derived simpleType. building attribute usescreating wildcard namespace constraint>The union of the wilcard is not expressible The intersection of the wilcard is not expressible Internal error: xmlSchemaBuildAttributeValidation: attribute uses not builded on base type "%s". ct-props-correct.5: Two attribute declarations, "%s" and "%s" have types which derived from ID derivation-ok-restriction.2.2: The attribute use "%s" has neither a matching attribute use, nor a matching wildcard in the base type derivation-ok-restriction.3: The "required" attribute use "%s" of the base type does not have a matching attribute use in the derived type derivation-ok-restriction.2.1.1: The "optional" attribute use "%s" is inconsistent with a matching "required" attribute use of the base type ct-props-correct.4: Duplicate attribute use with the name "%s" specified The wildcard in the derived type "%s" is not a valid superset of the one in the base type "%s". The process contents of the wildcard in the derived type "%s" is weaker than that in the base type "%s". The wildcard in the derived type "%s" is not a valid subset of the one in the base type "%s". The derived type "%s" has an attribute wildcard, but the base type "%s" does not have one. building attribute uses of complexTypeInternal error: xmlSchemaBuildAttributeValidation: type has no base type. Internal error: xmlSchemaBuildAttributeValidation: complex type "%s" has no base type. Internal error: xmlSchemaBuildAttributeValidation: attribute uses already builded. List "%s" references an unknown item type: "%s" List "%s": Either the "base" attribute or the child must be present, but not both. Simple type "%s": The alternative is chosen, thus either the "itemType" attribute or the child must be present, but not both. Simple type "%s": The alternative is chosen, thus either the "base" attribute or the child must be present, but not both. Simple type "%s": the "final" of its base type "%s" must not contain "restriction". Simple type "%s" is not derived from the simple ur-type definition (circular definitions are disallowed). Simple type "%s" has an absent variety. Simple type "%s" (not derived by restriction) must havethe simple ur-type definition as base type, not "%s". Simple type "%s": its base type "%s" is not a simple type. Simple type "%s" does not have a base type. Internal error: xmlSchemaCheckSRCSimpleType, no subtype on simple type "%s". fixing simpleTypeExtension "%s": the QName "%s" of the attribute "base" does not resolve to a schema component. Restriction "%s": Either the "base" attribute or the child must be present, but not both. Restriction "%s": the QName "%s" of the attribute "base" does not resolve to a schema component. p @  ` allocating a type linkUnion "%s" references an unknown member type "%s". Union "%s": the namespace prefix of member type "%s" is undefined Union "%s": Either the "memberTypes" attribute must be non-empty or there must be at least one child. Internal error: xmlSchemaParseUnionRefCheck, no parent type availableAttribute group "%s": the QName "%s" of the attribute "ref" does not resolve to a schema component. Attribute "%s": the QName "%s" of the attribute "ref" does not resolve to a schema component. Attribute "%s": the QName "%s" of the attribute "type" does not resolve to a schema component. Element "%s": the QName "%s" of the attribute "type" does not resolve to a schema component. Schemas: element %s has both type and subtype Element "%s": the QName "%s" of the attribute "ref" does not resolve to a schema component. Schemas: element %s has both ref and subtype allocating annotationinvalid value for maxOccurs: %s invalid value for minOccurs: %s Internal error on type %s definition Type %s already defined Sequence %s has unexpected content The schema attribute "%s" with the value "%s" is not of built-in atomic simple type "%s". The schema attribute "%s" with the value "%s" is not of built-in primitive type "%s". The schema attribute "%s" with the value "%s" is not of built-in list simple type "%s". Attribute "%s": the QName prefix "%s" is undefined. Internal error: xmlSchemaParseSchemaAttrValue, validation using this type in not implemented yet"%s". Attribute "%s": the QName prefix "%s" is undefined anyAttribute has unexpected content The namespace constraint of an anyAttribute is a set and must not contain "%s" ##targetNamespaceanyAttribute has unexpected content for processContents: %s Attribute %s already defined allocating attributeUnknown facet type %s Facet %s has unexpected child content Facet %s has no value allocating facetAttribute %s: the value %s is not boolean Element %s already defined allocating elementGroup %s has unexpected content Group %s already defined Group has no name nor ref Choice %s has unexpected content Element declaration %s has both "type" and a local simple type Element declaration %s has both "type" and a local complex type element %s has unexpected content Element declaration %s: only annotation is allowed as content in addition to ref Element %s has both default and fixed Element declaration %s: substitutionGroup is allowed on top-level declarations only substitutionGroupElement declaration %s: only minOccurs, maxOccurs and id are allowed in addition to ref Element declaration has both, "name" and "ref" Element declaration has no name nor ref SimpleType "%s" must have one of or or as a child SimpleType "%s" has unexpected content Union %s has unexpected content List %s has unexpected content The attribute "final" of type "%s" has an invalid value The attribute "name" is not allowed on a local simpleType definition Restriction "%s" has unexpected content. allocation a facet linkRestriction "%s" must have a "base" attribute. attribute group %s has unexpected content Attribute group %s already defined allocating attribute groupcreating attribute groupanonattrgroup %dAttributeGroup has no name nor ref attribute %s has unexpected content Attribute declaration %s has both ("ref" or "type") and Attribute declaration has "default" but "use" is not "optional" Attribute declaration has both, "default" and "fixed" Attribute declaration %s has an invalid value for "use" The target namespace of an attribute declaration, must not match "http://www.w3.org/2001/XMLSchema-instance"The name of an attribute declaration must not match "xmlns". Attribute declaration "%s" has both, "name" and "ref" Attribute declaration %s has "ref", thus "type" must be absent Attribute declaration %s has "ref", thus "form" must be absent Attribute declaration has no "name" or "ref" All %s has unexpected content invalid value for maxOccurs (must be 0 or 1) invalid value for minOccurs (must be 0 or 1) ComplexType %s has unexpected content ComplexContent %s has unexpected content complexContent %dSimpleContent %s has unexpected content simpleContent %dExtension %s has unexpected content Extension %s has no base schemas has no rootin_memory_bufferxmlSchemaParse: could not parse xmlSchemaParse: could not load %s File is not a schemasFile %s is not a schemasInvalid value for the attribute "finalDefault". Invalid value %s for attributeFormDefault attributeFormDefaultInvalid value %s for elementFormDefault elementFormDefaultallocating schemaSchemas: unexpected element %s here notation %s has unexpected content Notation %s already defined Notation has no name Include schemaLocation attribute missing File %s is not a schemaallocating included schemaschemas %s has no rootInclude has unexpected content Include schemaLocation attribute is not an URI: %s Import has unexpected content The namespace attribute on the element information item, requires the imported document to have a targetNamespace attribute with the value "%s". The namespace attribute "%s" of an element information item must be identical to the targetNamespace attribute "%s" of the imported document. There is no namespace attribute on the element information item, so the imported document must have no targetNamespace attribute. Redefining import for namespace %s with a different URI: %s Redefining import for default namespace with a different URI: %s Internal: failed to build import table Import schemaLocation attribute is not an URI: %s Import namespace attribute is not an URI: %s failed to import schema at location %s allocating imported schemaallocating schema parser contextallocating schama parser context substitutionGroup: %s@ ` @@@`@@ no target namespace ` @ p`P@0$1$DKA200:[TOOLS.LIBSRC.libxml2-2_6_11]xmlschemastypes.c;1Unimplemented block at %s:%d p@p@@@@@@@@ P@ @@ppppppppppppppp`             ``` ` ```    @`0@ @N@?http://www.w3.org/2001/XMLSchemacould not initialize basic typesnormalizedStringnonNegativeIntegernonPositiveIntegercould not create a wildcard on anyTypeallocating base64 dataallocating hexbin data  @@ `   p@ 0`0`0`0` 0@P`p 0@P`p 0@P````` !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvqxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !cloy|"c " -r 23'u . 1 " ?aaaaaaeceeeeiiiidnooooo ouuuuy saaaaaaeceeeeiiiidnooooo ouuuuy yxml=http://www.w3.org/XML/1998/namespaceversionyesnoUTF-8UTF-16encodingstandaloneISO-8859-1US-ASCIIUTF-16BEUTF-16LE1@T?|/`#m^##=ǿ@ ?%l ?PP1b,@ɀ?????_@L?`?T{?|=?ӟ9mӇ9^;9=ǿ==`=`@=%l;_??>fw  !"#$%&'CDATA[CDATA[CDATA[ANYATTLISTCDATADOCTYPEELEMENTEMPTYENTITYFIXEDIDIDREFIDREFSIGNOREIMPLIEDINCLUDENDATANMTOKENPCDATAPUBLICSYSTEMENTITIESNMTOKENSNOTATIONREQUIRED(nil)@(#)$Id: trio.c,v 1.11 2003/04/03 15:28:27 veillard Exp $0123456789abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz{\]^_`abcdefghijklmnopqrstuvwxyz{|}~@(#)$Id: trionan.c,v 1.14 2003/10/15 08:17:58 veillard Exp $@(#)$Id: triostr.c,v 1.3 2003/04/03 15:28:28 veillard Exp $;Zx0N<[y1O;Yx/N>\{2QPp@ p`P@  >   !"# $Pp@ p`P@     !"# $Pp@ p`P    !"# $Pp@ p`P    !"# $Pp0@0p`    !"# $Pp0@0p`    !"# $pPpP0    !"# $pPpP0    !"# $P2X2H`2hYh2p2x2Y2YP@2Yx2Y2YYZ2Z2(Z@ZPZ<2`Z2p2pZ 2Z2Z2Z2Z2Z2Z[[(23([3@[p3P[3h[\ 3(3x[H03[830@3[H3[[[P3\X3 \8\X`3H\X\h\X\4h3\Hp3\Hx3\H3\H3\H3\H3\xh3]3]@30]3H]3`](H43p]H3]p3]3]3] 3]\H3]4^4(^P4@^\4P^`p^^ 4^^(404_844@40_H4H@_P_pP48X4`_L`4x_Hh4_XPp4_xx4_<4_4_4`lh40`4H`4``4`4`4`h4`4`444`4`45` aat(5(a558a  5Pa(505`a85pa@5H5aP5aX5a`5h5ap=x==========d"=pc&=c'=c<=c>=c=d=Pd>d>d>d>d >e(>8e0>Xe8>e@>eH>pP>eX>e`>(fh>hfp>fx>f>ȍ>>g>0g>Pg>g>g>g>(h>X>>Xh>>h>@>h?i?Hi?i? ?(?i0?i8?(j@?`jH?jP?jX?k`?@kh?xkp?kx?k?l?Pl?l?l?l?0m?8?Xm?m?m?n?8n?pn?n??n@o@@o@po@ؐ @o(@o0@ p8@Pp@@pH@pP@pX@ q`@Pqh@qp@qx@q@r@Hr@xr@r@r@s@0@8s@hs@s@s@t@8t@htR@tS@t`AtaA0uxA`uAu Au(Av0A0v8AXv@AvHAvPAvXAw`A0whAXwpAwxAwAwAxA(xAHxApxAxAxAxAyA@yApyAyAyAyA(zAXzBzBzBzB{ B8{(B`{0B{8B{@B{HB|PB@|XBh|`B|hB|pB|xB}B8}Bh}B}B}B}B~B8~h~x~B~B~ B~ B B( BH Bx B B C C C  CP C (C 0C؀ 8C @C0! HCH" PCh& XC0 `CЁ2 hC3 pC9 xCH: C> CȂD C C!C0!Ch!C"!C5!C!C@!C`!C!C!C!C!C!D!D8!D`!D" D"(Dȅ"0D"8D"@D@"HDp "PD "XD"`D"hD"pD0"xDP"Dx"D"Dȇ "D'"D("D()"DP*"Dx+"D4"D<"D؈E"DH"D@`"Dpa"Dd"De"E؉"E"E("EH" Eh"(E"0E"8E"@E"HEP#PEp #XE #`E #hE)#pE*#xEH%E`&Ec&Ee&Ef&Ecommenttexttextnoenckk8kHkhkkkkl lPl`llll ll@l(m@mpmmmmmmk8n`npnn n (Hx В  ( P` ȓ 8Ph@P*`*p*&F 0{Yx 8 h  X\XX ȥ[إ[P[hP[ЉP[P[0  (P[Ћ 8P[ 0 HP[ XP[ hP[@xP[ PP[PP[б0P[`e(0f8@gHPhX`ihpjxYkYlmnoȡСpءqrst u(0v8@wHPxX`yhpzx`YȢТآ (08@HPX`hpxȣУ-أ./01 4(058@HPX`hpxȤФؤ (08@HPX`hpx@Y`"h&p'x<>ȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpxȯЯد (08@HPX`hpxRS`axȰаذ (08@HPX`hpxȱбر (08@H@PX` h p x          Ȳ в ز ! " & 0 2 3 9 : > (D 0 8!@!H!P"!X5!`!h!p!x!!!!!!!!""ȳ"г"س"" " """""" "("0 "8'"@("H)"P*"X+"`4"h<"pE"xH"`"a"d"e""""""ȴ"д"ش""# # # #)#*#% `&(c&0e&8f&@@HPX`hpxIUYiqUablIrireusivicabiliviqUeatriceanceencelogieableismeeuseisteiveifusionationutionateuriqUesatricesancesenceslogiesablesismeseusesistesivesifsusionsationsutionsateursmentsementsitsmentementissementammentemmentauxeauxeuxitiraieisseissanteiiraiirirasiesmesissesissantestesisiraisissaisirionsissionsironsissonsissantsitiraitissait>issantiraIentissaIentirentissentironttiriezissiezirezissezaeraasseanteeaieraieraserasmesassesantestesesaiseraisionserionsassionseronsantssaiteraitantaIenteraIentrentassenterontteziezeriezassiezerezeIreireionIerierelleillennonnettuUiIyYyYquUiuyiciqUloguentateuxiabliqUaticiqUeaualeuxantentesstigueYicissementsAgA ( 08@HPX`hpx   "# " "  (' 08@HPX`hpx   (08@HPX`hpx (08@HPX` h!p!x UYeemenernersesenerstestiglichendigunglichischikheitkeituussuUyYyuaouigeeeren0'8'A &&&&&&&&&&'''' '('@'H'P'X'`'h'p'x' @*'6>EL:QUY]a1dgiNlnpsuvx{z%|}E*܄$a ғe8ИXқ>G7סu?Ӥe!+/,#sVƯ5yKG l̵*AQY[VK:ֽ#pR0yP"g4w?C@~7s(cM1jH!W+_-`)[O>m'U 8dAmDn@i 6^&Mu7]@fCh@c6X{&Hi1Rs6Vv4Sr ,Ji;Yv &C`} )Ea} $@\w5Pk $>Xr 'AZt $=Un2Jc{ ":Qi #:Qh5Kbx)?Uk-BWm*?Sh} !5I^r&9Mat$7J^q .ATgy 2DWi{ /ASew&8IZl}(9J[l}$4EUfv )9IYjz(8GWgv 0?N^m|"1@O]l{+:HWet .<JXgu*8FTao} -;HVcq~*7ER_ly!.;GTanz+7DP\iu !-:FR^jv*6AMYeq|  +7BNYep|   & 2 = H S _ j u                & 1 < G R ] h s ~                + 5 @ K U ` k u                 ( 3 = H R ] g q |                 * 4 > I S ] g q {           Nf!G#F%'((*+,- /0 1123p41556F778 99B::Q;;Q<<B=='>>?h??3@@@QAAB^BBC[CCCJDDD-EvEEFIFFFGUGGGHQHHHI?IxIII JWJJJJ+K^KKKK&LVLLLLMAMoMMMM NKNvNNNNOFOnOOOO P3PYPPPPPQ8Q\QQQQQ R.RPRrRRRRRS7SWSwSSSSST1TPTnTTTTTUU:UWUsUUUUUUV4VOVjVVVVVVW W:WSWlWWWWWWXX1XIXaXxXXXXXXYY1YHY^YtYYYYYYYZ#Z8ZNZcZxZZZZZZZ[[1[E[Y[l[[[[[[[[\\.\A\T\g\z\\\\\\\\ ]]0]B]T]e]w]]]]]]]]^^#^4^E^V^f^w^^^^^^^^^ __*_:_I_Y_i_x_________``!`0`?`N`]`k`z`````````` aa'a6aDaRa`ana{aaaaaaaaaabbb,b9bGbTbabnb{bbbbbbbbbbb cc"c/c;cHcTcacmcycccccccccccc dd#d/d:dFdRd^diduddddddddddddd ee e+e7eBeMeXeceneyeeeeeeeeeeeeefff%f0f:fDfOfYfdfnfxffffffffffffffggg%g/g9gCgLgVg`gjgtg}ggggggggggggggh hh h)h3hmEmLmSmYm`mgmnmum|mmmmmmmmmmmmmmmmmmmmn nnnn#n*n1n7n>nDnKnQnXn^nenknrnxnnnnnnnnnnnnnnnnnnnnnno oooo#o)o/o6o(L0L8L@LHL PLXL`LhLpLxLLLLLLLLLLLL LLLLLMMMM M(M0M8M@MHMPMXM `MhMpMxMMM MMMMMMMMMMMMMMNNNN N(N0N8N@NHNPNXN`NhNpNxNNNNNNNNNNNNNNNNNOOOO O(O0O8O@OHOPOXO`OhO6pO6xOOO:O:O:O:OOOOAOAOAOAOOOOPPPP P(P0P8P@PHPPPXP`PaeedeandeendeaneeneheteneerteenhetenarerhetersasesedesendeseneshetenesenshetensersetsethetertastdtvtlegelegigeigligeligelslovelovslovhetslovweraaA0``````````a aaa  a(a0a8a@aHaPaXa`ahapaxaaaaaaaaaaaaaaa siesssesssbbddffggblmmnnpprratttizedeedingancienciablielialliouslientlialitibilitiivititionalationalalismationizationizeratorivenessfulnessousnessicateativealizeicitiicalfulnessicanceenceableibleateiveizeitialismionerousantentmentementouAAssieeeeyYitionenceanceableenteizeatealalfulousiveblealicstellyYyYYyfffeeeeeeeeeeeeeeeef f(f0f8f @f HfPf Xf`f hfpf xf ff fff f f fffffffffgggg g(g0g8g@gHgPgXg`ghgpgxgga~o~icadosivavelvelicabilivicanciairaadoraosaistaivaezalogaidadementeamentevelvelucinicoismoosoamentoimentoivoaa~oadoricasnciasirasadorasosasistasivasezaslogasidadesucionesadoresao~esicosismosososamentosimentosivosadaidaiaariaeriairiaaraerairaavaasseesseisseasteesteisteeiareiereiireiamiamariameriamiriamarameramiramavamemaremeremiremassemessemissemadoidoandoendoindoara~oera~oira~oarerirasadasidasiasariaseriasiriasaraserasirasavasesardeserdesirdesareseresiresassesessesissesastesestesistesisaiseisareisereisireisreisreisreissseissseissseisveiseisareisereisireisadosidosamosramosramosramosvamosamosaramoseramosiramosemosaremoseremosiremosssemosssemosssemosimosarmosermosirmosmosarsersirseuiuouareriraioosea~o~loguenteatateirugiccicmmnn0n8n@nHnPnA nn n(nXn`nhn pnxnnnnnnnn nnnnnnnnnoooo o (o0o8o@oHoPoXo`ohopoxooooooooooooooooopppp p(p0p8p@pHpPpXp`phpppxpppppppppppppppppqqqq q(q/0q/8q/@q2Hq2Pq2Xq/`q/hq/pq/xqq:q:q:q:q:q:q:q:q:q:q:q:qqGqGqIrIrIrIrI rI(rI0rI8rI@rIHrIPrTXrT`rThrprxrrZrZrZrZrZr_r_r_rrcrcrcrcrcrcrssss s(s0s8s@sHsPsXs`shspsxsssssssssPP`0px|HXX`hlp $ 0 @ Pthtxt @`x@h#"(0ȈЈЄ؄ (08@HPX`hpxȅЅ؅ 8@HPX`hpx    ȆІ؆ (08@ HP"X`hpx'',ȇЇ؇     (08@HPX`hpx؈123122245512623122>laselalemeseloselolasselasleslosselosnosandoiendoyendondoindoarerirrrricadosivableibleicabilivicaenciaadoraosaistaivaanzalogaidadableiblementeamenteacinucinicoismoosoamientoimientoivoadoricasenciasadorasosasistasivasanzaslogasidadesablesiblesacionesucionesadoresicosismosososamientosimientosivosyayeyanyenyeronyendoyoyasyesyaisyamosyabaadaidaaraieraaaraerairaadedidaseieseasteisteanabanaranierananaraneraniranenaseniesenaronieronarnernirnadoidoandoiendoarerirasabasadasidasarasierasasaraserasirasesasesiesesabaisaraisieraisaisaraiseraisiraisaseisieseisasteisisteisisisariserisirisadosidosamosbamosramosiramosamosaramoseramosiramosemosaremoseremosiremossemosisemosimosarsersirssarerirareririaeoosaeiouiendoandoareriruicloguenteatatuugugA  (08@HPX` hpxȔДؔ (08 @HPX`hp x ȕЕؕ  (08@HPX `hpxȖЖؖ (08@HPX`hpxȗЗؗ'''' '('0-8-@-HP1X1`hpx777Ș@И@ؘ@FFFFJ J(J08N@NHNPNXN`hpxșЙؙaarnaernaheternaornaadeadeandearneareasteenandenarenhetenernarerheterorsasarnasernasornasesadesandesensarenshetensernsatandethetastddgdnndtgtktttigligelsfulltlstwlsfullA @HPX`hpx   ȪЪت (08@HPX`hpx(8H` @pHhedethederedeeredeendeerendeeneerneereenhedenerenerhedererershedsesendeserendeseneserneseresenshedenserensersetseretseteretgddtgtktigligeligelslststiglsA0*@HPX`hpx    Ȱаذ (08@HPX`hpxIYddkktteneseenhedensendiginglijkbaarbaraaeeoouuaeiouyYiIyYyiegemheidheidcenigee`hpxAAC (08@HPXȵеصgeneriedsiesssesssusbbddffggblmmnnpprratttizedeedingedlyeedlyinglyancienciogilibliabliallifullilessliouslientlialitibilitiivititionalationalalismationizationizeratorivenessfulnessousnessicateativealizeicitiicaltionalationalfulnessicanceenceableibleateiveizeitialismionerousantentmentementelsucceedproceedexceedcanninginningearringherringoutingandesatlasbiascosmosdyingearlygentlyhoweidlylyingnewsonlysinglyskiesskisskytyinguglyAA7yYyYssieieeeeyYitionenceanceableentizeatealfulousiveblelogfullesstionatealicstlskiskydielietieidlgentlugliearlionlisinglYyȹйع (08@HPX`h px    Ⱥкغ    (08@HPX`hpxȻлػ (08@HPX`h px  ȼpastikaanhankinhnknkopkllanassataltastallnsstltstlleinensammennenisianennnsaaeeiioouuallanassataltastattalleineksinhandenseenhenttenhinsiinhonhnhnllnsstltstttejammaimmampaimpammiimmimpiimpiejmmimmmpimpijmmaimmakkseksiiaeioieepotpojouoj`hPX`hA A a  (08@HPXpx ( 08@HP X ` h p x       (08 @H @@`hp PX`@>x  !(!%(()0)))-.(V0(202H2GHH(H8HHHXH (08III (08@HhKx!!""""""""#$%%%O% %O(O8OHOXO(%0%8%@%H%P%X%hOxO`%Oh%p%x%%%%%%%%%%%%%%%O%&&&O& &OOOO(&0&8&H'P'X'`'h'p'x'))XS))-------..V.`/h/p/x//8V///00h0p0x00W000011 1(12 282@2(=0=8=p5x555555555555555556666 6(60686@6H6P6X6b`6h6p6x666666666666666667777 7(70787@7H7P7X7`7h7p7x777777777777777778888 8(8b0888@8H8P8X8`8h8p8x888888888888888889999 9(90989@9H9P9X9`9h9p9x99999999999999999:::: b :(:0:8:@:H:P:X:`:h:p:x:0b:@b:::::::::::::::;;;; ;(;0;8;@;H;P;X;`;h;p;x;;;;;;;;;;;;;;;Pb;;<<`b<< <(<0<8<pb@<H<P<X<`<h<p<x<<b<<<<b<<<b<<<<<<<<==== = (08@HPX`hpx8GHGXGhG (xG08@HGPX`hpxGG G(08@GHPX`hpxGG@HPX`hphHxHHHHHHxHHH (08@HPX`hpxII(I8I (08@HPX`hpHIXIhIxxII (08I@HPX`hpxIIPX`hpxIJJ(J8JHJXJhJxJJJ (08@HPX`hpxJJJJ (08@HPX`JJKK(K8KHKhpXKxKKKKKKKKKL     ( 0 8 L(L8LHLXLhLxL@ H P X ` h p        LLLLLLL L        MM(M8MHMXMhM!!0!8!@!H!P!X!`!h!p!x!!!!xMMM!!!!M!!!!!!!!!"""" "("0"8"M@"H"P"X"M`"h"p"x"""""M"M"""### #(#0#8#@#H#P#X#`#h#p#x############M####N#$$$$ $($0$N8$(N@$H$P$X$`$h$8NHNXNp$x$$hN$$$$$$$$xNNNNNNN$$$$$N$N@&H&P&X&`&h&p&OPP(P8PHPXPx&hP&&&&&&&&&&&&xPPPPPPP&&&&'PP'Q'' '('Q(Q0'8'8QHQ@''''''''XQhQxQQQQQ''Q'''''''((QQQRR(R8R(HR (((0(8(@(H(P(XRhRxRRRRRX(`(h(Rp(x((((((((((((((((RRR()))S) )8)@)H)P)X)`)h)p)x)))))S(S8S))))HS))**** *(*0*8*@*H*P*X*`*h*hSxSSp*x***S**************+++S+ +(+0+S8+@+H+P+X+`+h+p+Sx+S+++++++++++++++SST+,,,T, ,(,0,8,@,H,P,X,`,h,p,x,,,,,(T,,,,8T,,,,,,,,HT-XT--- -(-0-8-@-H-P-hTxTTTTTTX-`-h-Tp-x-T------T--.... .UU(U8UHUXUhU(.xU0.8.@.H.P.X.`.UUUUUUUh.Up.Vx.............//// /(/0/8/@/H/P/X////////HVXVhVxVVVV///VVV//V00 0(00080@0VWW(W8WHWXWhWH0P0X0`0xWWW0000000WWWWWXX000110181@1H1P1X1`1(X8XHXXXhXxXXh1p1x1111111111111111XXXXXXX12YY(Y8Y22HYXY@=bbbbbcc cH=P=0cX=`=@ch=Pc`cEEEEEEEE@EEEFFFF F(F0F8F@FHFPFXF`FhFpFxFFFFFFFFFP`FFFFFFFFGGGG G(G0G..,0 ئ0@PhЧ0HXp(@Xpȩ(8Phxت(8H`x`if o f o f o f o f o PY )@@FF001050000000!0)0N14>AHJ~P OQ\^1VYYa!:AJq 9 = = X a     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t     ( * 0 2 3 6 9 = = \ ] _ a     ( * 3 5 9 ` a     ( * 9 ` a .0023@E@GIi    <<>>@@LLNNPPTUYY_acceeggiimnrsuu EHMPWYY[[]]_}&!&!*!+!.!.!!!A00001,1E`aKRpp  < < > L M M Q T b c   < < > > ? ? @ B G H K M p q   < < > C G H K M V W   > D F H J M U V   > C F H J M W W 114:GN557799>>??q *0/00000PX`hpxp<sz `  * . ` c j o sz  2`P `   @eimr{qefmr7xgi{lX3 #JJ* X3 #xTX--  0000000012XXcc ?HA "$$ ?? ii H#0 #$g $&  ( ) / / _ _ 00 p`P0@P0 `pp`0PX@p0 @Xxp`P@0 0@Xhxp`P@0 0@P` p(`P0@0 (8@Xpp` P0 @P 0h  x @ H  PX   p``hPp@!0! 0!@!`!x!!!!x!p`"P@0  "0"X"p""""H8xX8 (08@HxPXX8`(hpxhH(x  * . ` c j o ۀAZaz6Pzz1VYYa!:@Jnoq/MO 9 = = P P X a     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t     ( * 0 2 3 5 9 = = \ ] _ a q q     ( * 3 5 9 ` a     ( * 9 ` a 023@F@GIj!#')*PUY_FHHJMPVXXZ]` FHZlov  1@Q`lnp wPmptk EHMPWYY[[]]_}q q   !!!! !!!!!!$!$!&!&!(!(!*!-!/!1!3!9!=!?!E!I!001050;0<0A000000001,1111111144MMNNף-0j(*68<>>@ACDF=Pptv!:AZf  &(:<=?MP]0I 578<<??TV  9;>@DFFJPR46NPnp֦֦az      !!##%%''))++--//11335578::<<>>@@BBDDFFHIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwzz||~      !!##%%''))++--//1136P0_aacceeggiikkmmooqqssuuwwyy{{}}      a+bk      !!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}} '07@EPW`gp}q q   ! !!!!!/!/!4!4!9!9!=!=!F!I!AZ(O3NTVg7Rk";Vo6NPUpzzYY@@FFCC,a001050;0;00000pp!:AJnoq/MO 9 = = P P X a     ( * 0 2 3 5 6 8 9 Y \ ^ ^ r t     ( * 0 2 3 5 9 = = \ ] _ a q q     ( * 3 5 9 ` a     ( * 9 ` a 023@E@GIj!#')*PUY_FHHJMPVXXZ]` FHZlov  1@Q`lnp BDwPmpt5!8!00<0<0A000000001,1111111144MMNNף-0j(*68<>>@ACDF=Pptvfoq  &(:<=?MP]0IP 578<<??֦֦AZ      ""$$&&((>**,,..0022446699;;==??AACCEEGGJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxy{{}}      ""$$&&((**,,..0022/``bbddffhhjjllnnpprrttvvxxzz||~~    1V      ""$$&&((**,,..0022446688::<<>>@@BBDDFFHHJJLLNNPPRRTTVVXXZZ\\^^``bbddffhhjjllnnpprrttvvxxzz||~~(/8?HMYY[[]]__ho!!!! ! !!!!!!!$!$!&!&!(!(!*!-!0!1!3!3!>!?!E!E!!:'4Mh  89;>@DFFJPl!<Up4VnW]oKXpp0J  < < > M Q T b c   < < > B G H K M p q   < < > C G H K M V W   > D F H J M U V   > C F H J M W W 114:GN557799>?q,269VY24RSrs   +0; *0/000 #  > @ I L   > @   > > @ @ G H K L W W   A D   > @ F H J L W W >?,,1188VW#&)+0138W]oKXpp0J  < < A H M M Q T b c   < < A B G H K M p q   < < ? ? A C M M V V > @ F H J M U V A C M M 114:GN557799q~-0226799XY24RSrs   "'(229; *0/000 #09`if o f o f o f o f o PY 3@Ii|FOp p t y S!!`$$$$v''00!0)080:011 2)2Q2_2222209`if o f o f o f o f o PY )@IiqFO *3r|p p t y S!_!`$$$$v''11 2)2Q2_22222!#%*,/:;?@[]__{{}}~~Z_  jm d e p p OOZ[:=JOahmn56 DE ' 0 C E Q S T W W } ~ )#*###h'u'''))))))0000000000=0=00000>?0RTacchhjk  ;=??[[]]_e))]]}};;==F F ~ ~ *#*###i'i'k'k'm'm'o'o'q'q's's'u'u''''''')))))))))))))))))))))))))))) 0 0 0 0 0 000000000000000??6688::<<>>@@BBDDHHZZ\\^^ ==]]``cc!#%'**,,./:;?@\\~~Z_  jm d e p p OOZ[JOahmn56 DE  ' 0 8 ; > A C G Q S S W W ##00=0=000EFILPRTW_ahhjk  <>557799;;==??AACCGGYY[[]];;[[__bb$$++<>^^``||~~tu p p ??446688@@D D R R z | !!!!! !!!!!!#!%!%!'!'!)!)!.!.!2!2!:!;!@!D!J!K!!(#+####$&$@$J$$$%&&}&&&&&''' ' ''')'K'M'M'O'R'V'V'X'^'a'g'''''''''')))))) +....////0000 0 06070>0?000111122*2C2P2P2`2}222222233MMƤ))bbdfii >>@@\\^^7?&*djlV55OOoo^^``tu00>>@@++<>||~~D D R R z | @!D!K!K!!!!!!!!!!!!!!!!!!!!"# # #!#|#|###%%%%%%o&o&'''')))))))*))bbdf \\^^55OOoo p p 446688@@!!!!! !!!!!!#!%!%!'!'!)!)!.!.!2!2!:!;!J!J!!!!!!!!!!!!!!!!!!!## ##"#(#+#{#}####$&$@$J$$$%%%%%%&&&n&p&}&&&&&''' ' ''')'K'M'M'O'R'V'V'X'^'a'g'''''''((+ +....////0000 0 06070>0?0111122*2C2P2P2`2}222222233MMƤ7?&*djlV&""?$@Y@@@@j@.AcAחAeA _BvH7BmB@0BļB4&k C7yAC؅W4vCNgmC=`XC@xD"# #8#P#x######$ $@$X$x$$$$$$%66 6(6P606`686p6@6H666xNpNx8x d'@Bʚ;( `vtxp0jkrs)))Ќ0Ћp@ȊHЇP0Ћp@ȊЇPAOUaousaAeEiIoOuUnNaAaAcCeEeEiIiIoOuUЌ0@Ћp@ȊHЇЇh0 pP_h @$?#8^0[~ "0#@^4GHcGG#  (#ݶ8brZk(=0b#@@BG4GHb/;uZkcG8]@]HP#/k///p#4GTG@^~[H^P~X`h޴px>GG>;"bsZkb#@@" G4GG@!b#!0G;@GGG"! TG4G DGGHb#=@$ B \b#BZ@GG4Gdb#@GG4GPkb#/@GG4Gqb#@"H`4G4G4GLcG.b#FLc@DC@G]G]} 0#k///W#4G~^G^~ GGGb#@GG4G0nb# @GG4Gpgb#/@GG4GLb#N[@GG4Gzb#Ѧ@GG4Gkb#/@GG4Gsb#@GG4Gwb#ɢ@G4GbT"/@GG4Gb#"@ӘG4G8)b#/8@ӘG4GG b#@GGG8)b#]]4G} 0#8//k/// ,HDG/k///Gk//GGGGG_"G/k///GGk/#TG^~^ ~(08GGG{#_8GGGp/b#x"I@8B="GTGtG@byZk? &GG6$H@GG@tG1b#0D8 H"I@8GGGp/b#@."@J R@J GJG/wI@G]G] }(08@#k/ #C4GX^~`^h~px޴[>^~޵GH>GGGGbP^}Zk@8BG""0@TG@bB/_Zk@PGTGp-b#4EH=8!"5I@H"TG (b G H%4G /.GTGp-b#JF8"I@HGTGp-b# 1,"A0H8"'HI@H .!"! J H6A7B8\BCGk/H"b#1_ GR///8BGTG""@bv_Zk88B@4G@bh"&cZkGG8B0A"'GtG @bcZkA/?#/8BGTG@b U_Zk/ 0AA/?/,/D,BGG8""tGb]_Zk/İoAOA8GGTGp-b#("H@H"b#/_ G젇6HL/H=GGb#G@HCH @@@8\@Ck/H_8G4Gp-b#X"H@E/@"b#_ӭG/GDTG;b#V@D@"b#_G//@H4G@"b#_8G Gp-b#0"//[H@ɡG////XB.G`b{Zk///ǡ /8GGTGp-b#"///;H@@H@HHZ_8G4Gp-b#"+H@ E/@"b#[_UG/G,TG;b#U@,@"b#O_G//@Há(@H///4G@"b#<_8G Gp-b#"G@(BGTG="0bVZk8GG/b#TG"H@*---* IN IEL@H/8@H0G@"b#'_@@H///8GGTGp-b#h"G@@Hu//H_8G4Gp-b#@"G@H"b#/_eG/GGTG:b#U@H"b#/_GWH_8G4Gp-b#"G@GH"b#_HGH_GGTG:b#/oU@//GG4G`(b#F@<H"b#_G/H_HG4GX-b#oG@%//TGH"b#_hBGG""pb@Zk8G GGTG/b#"G@GG4GX-b#/SG@ //8GGTGp-b#"UG@H H'/'?#//4GH"b#_8G Gp-b#"AG@BG4Gb/{Zk8G8D4Gp-b#"3G@tGm,ĠmHDDİGX]`]h}pxݤ=]}ݥ#/k///B4G4GbnZkGGUb#|@B4G4Gb~nZk//8BTG"h""@b>aZkBG4GbqnZk/8B4G@b"x"!!1aZk88B4G@b8"+aZk88B4G@b"%aZk8>8B4G@b"aZk88B4G@b`"aZk88B4G@b0"aZk88B4G@b" aZk88B4G@b"aZk8B4G"@baZkxBTG4GbBZk88B4G@b"`Zk88B4G@bx"`Zk88B4G@bP"`Zk88B4G@b"`ZkX,84GX""8B@bH"D G`Zkj-84G8B@bjI"nE`Zk-8TG8B@bIP"EG`Zk88B4G@b"`Zk88B4G@b"`Zk88B4G@b"`Zk88B4G@bP"`Zk88B""TG@b"/`Zk88B4G@b "`Zk88B4GTG@b "`Zk88B4G@bP "/`Zk88B4G@b "`Zk88B4G@b "`Zk88B4G@b "`Zk88B4G@bh "{`Zk88B4G@b "u`Zk88B4G@b "o`Zk88B4G@b` "i`Zk88B4G@b0 "c`Zk88B4G@b "]`Zk88B4G@b "W`Zk88B4G@b "Q`Zk88B4G@b@ "K`Zk88B4G@b "E`Zk88B4G@b "?`Zk88B4G@bh "9`Zk8B4G@b"/3`ZkGGMb#cw@88BGh""@btG "'`ZkB4G4GbZmZk//#4G>^G~^ ~(08޴@HP>X^`~hpxGGGGG4b#/oK@ @@3 \@HCk//_ӐG4G.b# "E@dGG4GP$b#4G/` 4@ ,A H </"@b#_G.J/ B4G(byZk BGG4G(b/yZk$@ B4G0@(b @//yZk BGG4G(byZkG@TG0@%b#0@/3@P"b"DBGb2.G2J4FG0""/bZk//_=/"}_"z_G4G.b#"KE@GGG$(b#Ee %@G4GHG/b#G@ /4G"@b#h_ӐGG.b#"//'E@,c EHH d/4G"@b#T_ӐGG.b#"E@,H/.%"PJJ,BX(F)F/@ `EFe, eHx/ Fe,eHoù.B:1,Bb// \\CDCk//d T`Dde,eH[ De,eHSD HFDe,eHK Fe,eHCĢ FIJe,eH;ÐGTG .b#"D@e,eH0/_ӐG4G.b#"D@"@b#/_!G/GTG=b#3R@"@b#_GG"Xb#_$ //G"Xb#_(//4G"@b#_ӐGG.b#"}D@GGGTG5b#wO@GGGDP8b#TG$K@/G"Xb#_D//_ӐG4G.b#"[D@"@b#/_G/G TG=b#Q@ "@b#_G4G"@b#|_ӐGG.b#p"=D@GGTG*b#C@X""TG#BbwZk ccq`Dp`D8dJY!K$GW @8/ BG4G(bGGGG 4G G TG GixZk{ G/(,(H+D 0@h/CRFB0@.u2HTJF>]//.B"VJJ8+BC/K \CCk//c{fC0@.aIPJF>@//CRFB0@.urITJF>4//@0@.yDIWJF>(//#1&B0@Q/`1IZQK@GQ?//#!&@0@a/rI[aKrGa?csfB.dIUJ0@F>/GTG.b#"C@G B0@G4G(b!wZk @/ccf@.PJ> c/GGTG.b#"C@G]] }(08ݤ@HP=X]`}hpx#k///80J?G$G8//#4G ^G~(^0~8@HGGG#(Fb#= ]}\@GG(#GTGFb#`@GG4GFb#;/\@GG4GFb#\@@#G1 *(P@  BTG(b"/o]Zk$O /// BTG%""(bb]Zk/ B4G"(bZ]ZkG4G>b#&O/Q@//  B4G(b"J]Zk@ 4G B(b"B]Zk( 4GGX1b#"B@@ 4G B(b"1]ZkGG4G8Fb#/_@@ 4G B(bh"#]ZkB4Gb9tZk( }GGGp b#@ "~G `@B4Gb%tZk@ 4G B(bH"]ZkG(#GTG@Eb#G`@@G4G+b#(GB@( " @B" BGtG(b("5@D\Zk(GGTG b#%# @HGG4GP2b#/cD@G(#GTGxb#E@@GG4G+b#\ //+B@  B5@@B"GD(btG"/\Zk(G4G+b# B@  BGTG(b"\Zk(cG4G+b#/A@  BGTG(b"/\Zk//  B4G(b"\Zk B"4G(b\ZkGG4b#D@=b#0X_ B4G(bp"/\ZkGG4b#D@=b#/0X_ B"4G(bu\Zk B4G(b"/o\ZkG ](]0}8@HP#k//#tG~^G^~ (0GGGGGP9b#/M@//GGGe"GP9b#0B"/#M@//GG]GGP9b#8B"]} (0tG@#/M#G ^G~(^0GG >>"rRb#@G4G"xb#q@G ](]0@#k//0P(/K@#~^^~ (0޴8@GGGGG{#=@,///#G%@@  /G4G(b#N0@4GG(b#////C0@4GG(b#/;0@0@ $ @?G]]} (0ݤ8@P#k///)#~^^~ (GGG/G4GHb#0@G4GHb#0@G 4GHb# 0@GG4GHb#0@GG]]} (0#k/#4G^G~ ^(~0GGG> ^~*b#A@B"tGG*b#8R"#//A@G /#b#] } @CHB@@G] ](}0@#k//#GG^~ ^(~08GGG~ >/ ///HBGPbYtZk/BG" GGR"G*b#iA@G///GG4G(b#S/@GGG4G#b#?@G4G#b#?@G 4G#b#?@] GDG] ](}08@#k/#^~ ^(~0 ^GCGp{#>3_G/4G/GGtG =b#9@GG4GPb#@G] ](}0@#k///# ~^^~ (0޴8@H>P^X~`hp޵xG>*1@BG GGGGGG !@/@B4GGF7`Kb#-A3GGmASA_ɱGG*1A jA / 0AG jA////g///G///G]]} (0ݤ8@H=P]X}`hpݥx#k//@SdAGb#GGMdAp_g4G Gm"GGb#d_.1`ADZ 0`A//G! 4G+b#@@1 B/k///1 B/k///@#CC@^~H^P~X`h޴px>^~޵GG G#q֠( 4G }ݰY0BU/(///!0@B Aw/ ///G-GTGP.b#jD@// BGb4G$D/ pBD B`"$ m G/ sZk0B//G8btZkGGGGGG8"b#V@/CkH//BGbp"4GrZk0BG8bsZkGGGGGGb#8"/3@0BG4G8bsZkGGGGGG8"b#"@0BG4G8b/sZkGGGGGG8"b#@$GG"GGG`+b#GD `BR"Go?@G///GGtGb#@ӢBG"GoGG`+b#GR"?@H//ag$/GGGpb#TG /+,@[gG4Gb#GP@-@G//@`!`@$ #@ @G3F// ///0@P@p@@Р@@R"Т "ҲPr@R02Ҳpr@@ @r202PR @/ ///0@R"" @pr/GGGGGHbhb0AdG4G51`@`0d`(+/? GGG> = 0"`b#>G!_ =G @D/4G0=d`51`@(4GGGG "("`b#G _ GAD/ (4G(}0]DSFD7`@G#/` BB:G //B@# B_ B /0B# BG/B SB31`BF (}G(#`(]// B WBF/Y0@0B9# B?GTh@G4GHb# G////,@yGGGGbHbGG_0AGG4Gb#,@!`@d`" #@ @2FR //d@"fB.wJVJF>C0x/X#`:K[zK`Gx?@Pe.%"tQJSqJtFe>BТ,"xJ@HD<$&CP,y#q[KEHD<DFBp,"utJ@HD<ĢB,#qJEHD<$&CP,@ @y#r[K@HD</ @/0"@0@ @.x%JWJF>/GG4GHb#z,@//34G } Hc/.`///0@A8D'//BG"Gm`+b#GGhR"">@/BG"Gm`+b#GG8R">@/G// }HcG///4GG@]H]P}X`hݤpx=]}ݥ#/k/// p#~^^~ (0޴8@H>P^X~`hGP`GGGGG!G/// GGTGP/b#B57B@7 Ga!@J$@ /*. J@EB4Gr.R"rJ&@,GGGb#O_G GGJGtGb# G@// JGGGb#tG/@@ӫ C 4GGG4Gb#r@//` C0@@ @_G/G]]} (0ݤ8@H=P]X}`hp#/k///4Gp#TGP^@[~X^`~hpx޴GGGGGGHGGHbL/UZk/// ," "0H&DGGCG4Gr[@Zkà0"TGGGGf 1"[@ZkàtG0"GGGf[@ZkG4G b#@/.@@G@="G#GGa[@ZkPB4GbGqZk#0@GGGGa[@ZkBG4GbpZkà0@GGGGf[/@ZkHݠ4GLG b#0ݰ8G4/k.@G4G b#04e.@G84G4 b#_.@8G0="GGGg[@ZkGG)b#>@ӰBGG4GbpZk0@GGGGg[@ZkGG4Gb#+@XB4GbGpZk0@GGGGg[@Zk`B4GbG/pZk0@4GGGGg[@ZkhB4GbG/pZk0@TGGGGg4G[@ZkG4G4G b#(.@(G(="GGGg[@ZkGt4GOb#/r@GC4G b# -@ tGG ="GGg[@ZkG4G b#-@GG="GGg[@ZkB4GbGCpZkà0@tGGGGf[/@ZklG4G b#-@GG="GGg[@ZkpG4G b#-@GG="GGg[@Zk B4GbGpZkà0@GGGGf[/@ZkB4GbGpZkà0@GGGGf[/@Zk$B4GbGoZkà0@GGGGf[/@ZkB4GbGoZkà0@4GGGGf[/@ZkGTGD"0b#"G@GtG Db#G6@GGGb#G@GG Db#G*@ӄGGL}G0b#D@cG4Gc[@ZkGP]X]`}hpxݤ#/k///C#4Gs~^C G0s >^[/@Zk= tG]1"R4qC[@Zk =G] 0#k///P#TG ^~G(^0~8@H޴PX`>h^pGGCG0b#GG>2&L1/+@=G!p ///G! "=4G@b#/,@=DGGTG b#..A"]JU J F C/0'L0@C/,@GTG@b#$LP%@P@ B@ P@P$/W)@Là$LƠ@GGTG0b#GG+@G GG b#TG$L%@/,@GTG@b#%LPH*@IA0`B rBRB2A0@B/`P(-)@Là$LƠ@B]GG@GYqZk/ XK?/#9'L9G b#0@%CTG,@GG="p8b#h&L&@ݰ(DOsU@cc$TG ](]0}8@HݤPX`=h]p#k///p#TG^~G^ ~(GG&G>T0" ^Lb#0@GTGPb#&T0L0@CcGG <c"&T1L1G]] }(0#3 @/k///ߞ#4G^~G^~޴>^~޵  GG࢞ž➧#GGG8"8=b#G/+@///G4Gb#8"0@+@G8"4Gb#+@8= @8 @D&TtPF@G$TGb#fB @&"P'Ls(@L4GàGb#$T0  //G(@G/ #B4GG!$T!LA@=pZk088"Gb#&L(/g+@G4G0"b#Ha+@HGTG(=b#B*@G8"4Gb#(/S+@GG0"4Gb#M+@G G4G8"b#G+@8=G4G0 b#!$@ @ C+@0=G G?E! 0=!///GG A(=iFTGb#Gs*@(CTGGb#&L-@G/w+@( E ( //G8"=" ]"Gb#}"/W-@= 4GGb#A/"P?@//'@G/P!GG]Gb#F8"j-@GP G4GE8b# '@8 AC%DC*D?/GB@(1A@4G/oZk8ݢ(8"Gb#5BB( *@GG4G8"b#*@8/A A CG0"="Gb# ]"}"-@G4G ݠb#PA//  ~'@GP!GG]Gb#F0"-@G}2@("G="G8b#Y+@G=G("]Gb#+@P GG4GE8b#//'@0]B4G(.GB1A/oZk0@ݠ0"(ݢGb#5@5A@B8@(0GDT ///s*@G0 G4G b#+@E8]B A@(G!DB1AAoZk8(8"8=9$C%GGb#5B5UAB(2 4GS*@GG8"4Gb#M*@8ݠ&@ @ C%0]B@ G(.GB1A/_oZk0(0"@G0=9'C5Bb#5A G4GB(/ .*@G0 G4G b#/*@0ݡ G!0ݱ%(=GG?ETGb#L0/@Ao*@@/G(=GTGb#GU)@(CGTGGb#%L/@Z*@(ݡ8]@4GB! DB(ݱC1@AoZk8=(ݢ8"88CGGb#!$@!AAB(= )@GG4G8"b#)@8-A Aà$(ݡGTGb#LƠ0A@.*@/8 ///G(=GTGb# G)@GCGTG(b#*@(0]@4GB!*GB(C1AnZk0}(0"@G0 @+gAb#+AD A(} /)@G0 G4G b#9*@0 G 0/?GG!D4G8b#&@c(c$LC( ATG]]}ݤ=]}ݥ   #k// #^~ ^(~08@޴HPX>`GGGGGG >~/ #B4G0@b&@@! lZk #@0@ @?G@4Gb#G&@GG GTGb#/(@ G/@G// #B4G0@b$@@kZkG GGGTGb#s(@BHGGTGEnZkG @b#/g(@GGTGb#a(@ȠGGTGb#0@Z(@GGTGb#/S(@ GGTGb#pA/>K(@ #G @?2@ }GGh[@ZkGG]G8b# ]4G(}08@ݤHPX=`p#/%///w@#^~ ^(~08@޴HPXGGGGGGG >~// //0B4G8b"0@tkZk@@0@&  ?G@<4Gb#Gw%@GGGGTG@b#/'@G////0B4G8b"QkZkGGGGTG@b#/'@ BGD"G@mZk0@' c ?2@ }GGu[@ZkGG4Gxb#/%@G] ]G(}08@ݤHPX`#k//Gk//#0`B4G^~G ^(~08@޴HGGGG@b# >P@^%@GGGGTGb#'@Gݠ`///G0@TGb# 0B/'@ӡ @G/?2$BG}Gp [@ZkGG4Gb#/+%@G] ]G(}08@ݤHP#/k///#C4G^~^ ~(G @p > N"GG ^b#CF /PB$@GQBTG@b#$@ӈc= A#@G]] }(0#k//PTGrk///4GpGk//4GpGk//GpGGGGk///4GpGk//4G,pGk//4G0pGk//tG4pGGG/k///tG8pGGG/k///G<pGGGGGk//4G@pGk//4GpGk//G\pGGGGk///TGhpGGk/4GlpGk//GppGGGGk///4GtpGk//#G~^G#(pGGGGG [/@ZkG] #k//tGpGGG/k///4GpGkG4G`L{#/+o///G4GpQ{#/o///#4G1" ^Т~(^0~8@H޴PGGDvGGGG>[/@Zk="tGDH`[@Zk4G/ #Xa [@ZkHG#G}"GGTa[@ZkG]GGtGb#C+@c4GXc[@ZkG ](]0}8@HݤP`#k//p#4Gp^~x^~޴>^~޵GG s[G!4!L!T!\q!dQ! !G 1!D  GG@Zk"="]"GG$`[/@Zk$"D"d""" " "#R (ݰ08@ݲHPX}`]h=///0QBB' \BHCk//G=GtGxb#-@GG4GXb#[-@GTGh=b# .@G tG=`]xb# -@GG4GXb# G-@G TGX=b#-@GtG=P]xb#,@GG4GXb#3-@GTGH=b#-@G$tG=@]xb#,@GG4GXb#$-@G$TG8=b#-@GtG=0]xb#,@GG4GXb# -@GGTGb#-@G4G0b#&@GtGTG`Gb#j@t///G4G0b#{&@ӄ/G4G0b#s&@l/G4G0b#k&@p/G=GtG0xb#,@0///G=GtGPxb#,@P///G=GtGXxb#y,@X{///G=GtG`xb#m,@`o///G=GtGhxb#a,@hc///GHtG=(]xb#U,@HW///G4G0b#&@=GG4G0b#"/&@=GG4G0b#"/ &@xİ|䰀;///] ?"@b#;@2//=Gb#@+///=Gpb#P@#///=Gb#@///G4Gb#|ĠP@/ "@ӈG@b#]|$@ÐG4G8b#("3@//G4GHb#7"@à"="]"GG$f[@Zk/c(cG4G[@ZkGp]x]}ݤ=]}ݥ#k//#4G^G~^ ~(08޴@HP>X^`~hGGG>$b#b8@G"4Gb#G/$@WG/G4Gb#"$@GG0@4GPb#!@ӨB]GGG4GiZkG"b#B@/XK?$@GG"4Gb#$@GG4G"b#$@G)1@"4Gb#$@G G4G"b#$@G+q@GGGGG`#b#5@GG b#GGtG3@G0@G4G @H( hb#!@///G]] }(08ݤ@HP=X]`}hp#/k///#4G^G~^ ~(08޴@HGGG">Pb#m$@G0G//G4GPb#"0@b$@GG0@4Gb#/#!@HB]GGGtG/siZkGGG*b#_"B@/XK?F?@G @G4Gxb#/G!@///G]] }(08ݤ@HP#/k///#4G^G~ ^(~08@GGGG"b#^$@`///G0@4G"b# $@ 1@ @G] ](}08@P#/k///P0Bk///ptGsk///4G pGk//4G pGk//G$pGGGGk///4G(pGk//4GDpGk//tGHpGGG/k///GLpGGGGk///GPpGGGGk///GTpGGGGGk//4GXpGk//TGdpGGk/G`pGGGGk///4GxpGk//G|pGGGGk///GpGGGGk///4GpGk//tGpGGG/k///#GpGGGGG  #k///p#?F4G0 ^~(^0~8@H޴PX`>h^p~xGFrB //GGGGDu[@Zk=DG="?D0D"C=2_J]cLs]"[e@Zk4G #Xa [/@ZkH0 v B4G(beZkGG N!4G0Ab#/@.8BG G4GPJ>]GgZkGhb#@).)JQ)JD/)>Q/'A"="]".G0@UJ>âPve[@Zk/;/// B4G(bieZk @ GGGP`ATG@b# (@ A!0A@ G8B]G'A 'A4GgZkGhb#@L-+AG]"LI D@.PJ>#0`A"Pqe="[/@Zk 'A ,@ H <'A.PJ> &GG ](]0}8@HݤPX`=h]p}x#kP# 1@BTG(^~@F0^8~@H@P޴X`h>p^x~޵^G#G1GGG @G@ 1@F[G $"b0@$!B  aFJZk @///8B4G G G@baZkBGTGb"JZkG="b#S@B4G("bJZkB4Gb"/JZkGGGTGb#9@="Gb#<@G4G@ b#"@B4G("bJZk I4GBb"JZkL@// GG="Hb#GG @G] @G9GGGTGX"b#!5@ GGGb#T@GGGmhb#]""G"/_= G]P?'H""B}9#b_@h"_[[/jKYTBYYJZkGG4G`b#/@GG4Gb#^@ 0`A A jAB("4Gb0@.1@0@BJZkG A4G"@ b#/@fBTG$b BH"2JZk8B 4G@bIaZkG(]0]8}@HPݤX`h=p]x}ݥ]#k//BGTGb "JZkB"4Gb/CWZk///#tG^G~^~޴>^ ~(08޵@HGGGG^ 14Gb#~V_4GHGb#/G//k1@G $"GtGDb#_GGGb4G0DD#/{@Gpb#G4G D////@GGTGb#GGD> $/K_///=DG="pb#Gh}"?D0DGC=2_J]]"K_h/B=TG"bIZkG4Gb#@GG="]"G0b#h}"/?_h//0@&  ?GG$TGPb#I_ŠF TGBbD"G $/kIZk ĠG!@4  &@ @2F& //p@"Тs֢PZ @3G @tG @UF @ @6F @wF @8G @F_ @ /00@" @1 @F/G4Gb#0@PBU@(0@C BS@GFs"gF //0!@c""$R" BFc 0@ '@////0 @R" '@_G 4GG$TGb#4G_=//==="h}"Gpb#G?D?E0DGC=2_J]]"_h/\///=BTG Gb.JEP`"HZkGh=]"x}"GGp" b#_Gp]"x="tGXb#/$@ӐG"4Gb#/ @G4G"b# @G G4G"b# @///ݠ GNFAG"="]"Gb#}"/G"@Ө=4GGb# AP?@@Ӏ=GG"]b#GG?Da"@BG"bTGDI /HZk(GP""TG b#"/2@*G@= "! G="/R"1"/_G"@"DTGHL b#/@B G"GTGb/WHZkGG4Gb#@/B4Gb"JHZkB=TG0"b/CHZkB4G"b>HZk/%!I 0@/BGTGp"b.HZkB"GTGb/'HZkB=x"TGb!HZk=G< G/BtGbD // JF"HZk&/ BtG"bHD/HZk//BtG`"bPD/)!H?DGZk // BtG"bHD/GZk0@)! @GG4Gb#E@ŠB4G"bPD//GZk=xݠ//A),AE iE"?G"4Gb#%@G G4G"b# G@/Š GݡH//.BGh"bTG /GZk 0 A! 'A_eB4Gb"aI`GZkG4Gb#@G4Gb#/@GG="]"Gh}"0b#B_hݠ/0A!(!?GG$TGPb#K_G4Gb#@GG]}b#De_G$GTGb#_G]]}ݤ=] }(08ݥ@HP#/k///#TG(^G~0^8GG>CC ^1b#+_ =]"}"GGpb#1/'_G4Gb#/@G(]0]8@#/k///#TG^~^ ~(08޴@P[HPGG`GG 1XbGG^"GZk =C/// PBGXbB`"(Hh/FZk`TGPBXbp"/ (FZkPB4GP"XbDFZkPB4G`"XbPD+FZkPB@B" ""TGXbDDF` X"/FZkPB(("TGXbFZkPBD4G" XbFZk PBD4G"XbFZkPB4GXb"FZk GGb#GY_PB4Gp"XbFZk(G"TG!b# ( 0@/G(TG"!b#21@`PBtG @Xb@"FZkPBp"4GXb0@@FZk  @/PG]Xb }(p"]08ݤ@HP4G`#ok///Q#4G~^^~ (0޴8GGG @0"/WFZk //GG ///EBGGGRTG"b#/@0@#G`b#%@@C0@@2 @?G]]} (0ݤ8@#/k///QG#~^^~AFBF@F D(0GGGGԔ(DtJFp/G0 BG$D(b"FZk B`4G(b0FZk3GGGTG b#Gu@ BG4GP"(bGEZk//@BG4GHb `Zk `@ B0`@"%,TG(bA%H'HEZk  B4G(b"/EZk B4Gp"(bEZkGG4Gxb#5@G]]} (0@#/k# "4G~^G^~ GGpb#@ BG ?"G4GE`ZkGGb#_GG4GXeb#/s@"H`4G4G4GLcGb#FLc@D/$@G]G]} 0#k///#~^^~ (0޴8@G(GG>/$GTGb# /_ G"4GG b#////30@GG4G$b#G /[:@///G4Ghb#@0@  G 4Ghb#@G4G0#b#%"/78@GG4Ghb#G@/GG4Gcb#*@GG4Gb#_,G4Ghb#/@,4GGhb#/@ӨG4Ghb#/@ӬG4Ghb#}@ӴG4Ghb#////s@G]]} (0ݤ8@P#/k///#~^^~ GGGp{#h_GGG b#]]4G} 0#M/k///#~^^~ (0޴8GGG{#_GG7`#,G4Gb##H1 /?$@GPB"GGb#tG`R"/*@+//GG/#GGTG0&b#0@&@@!F8@ @GG4G`b#// %@HGb# @ /PBG"Gb#tG`R"/*@G]G]} (0ݤ8@#/k///#~^^~ (GGG(8<//GG $4GtGb#_GtG$"HGb#G_Ӕ8#< @8DB<Hc`@///G]]} (0#/k///G//#C4G^G~G >{#@8")@=  G] #k/#^~^ ~(08GGGG^(/0B GTG8bZ@Zk//GG=GtG b#5_ G "G Bb#GG//*@GG]] }(08@#kG4G {#S///k///0GG// #~^^~ (0GGGG //G4G@ b#////@0@ # @?GG]G@ b#]} (04G@#////GG4G@ r#///#~^^~ GGG{#////_4GG b#/@G]]} 0#k///#4G^~^ ~(0GGGGGb#"2)@G "4Gb#/C(@S//GTGb#D$"$@G//GDG4G p b#}@GG4G b#2@0B"4G8b/iZkB@BGGHbGGR""ZkG%GDG4Gp b#]@GG4G b#@PBCG`""tGXbEZkG GTG#b#")@G4Gb# "/'@G]] }(0@#k///1# ^~(^0~ 8@HGGGGG~ ///}GGTG"b#-@G/GTGb#0$Fq 8""-@"#0?"_"!(! caL!!HN%HG4 D1@2D/G4Gb#k@G="4G"0b#/@T//GTGh""b#r-@cG4Gb#cR@="G"4G0b#@;/GTGX""b#Z-@G4Gb#/;@G="4G"0b#@$//GTGH""b#B-@cB4Gb c G/\ZkGGG"G0b#@ ///G} #"b#>@G ](]0}8@HP#k/#G4G^~G ^(~0GG"@b#/''@//G="hb#<_GG"4G@b#'@ Ghb#_GG4G` b#@G] ](}0@#k//#4G^~ ^(~08>@޴HGGGG>xb#"'@GTG=b# "k,@xBG"G $}b#R"/7(@( E/#G="b#GG !!H_G/ 5/Gb#h_GGG4G b#N@f,GG4G b#fHF@Ӹ 0eG4G b# ` $P?@/@0G BQ@e\Zk =G4G b#!A#@/*@0GD@İG] ](}08@ݤHP#k//#G^~^ ~(GGC{# >C%@] GG }G0b# @ @! FF " R R2B`R"/'@Gb#@G]] }(0#/k///#4G^~ ^(~08GGGG^hGpb#0"/''@GGb#TG "+@" GchBGGb# cR"#'@bGG4G b# Ho@? G=" Gb#G]1_GGL/=G4GTGb#! F/D0@BdD#"/"@GG4G b#@G2///!FG4G(b# //@GGG4G$ b#s@G/"FG4G(b# //@GGG4G$ b#_@G/hGTGpb#"&@GG] ](}08@#k/+GG4G8D0#~^G^~ GGG  b#6@GGG b#]]4G} 0#+///GG4G q##///k///#^~ ^(~08@޴HPXGGGG ۤ>&%d#/ D/Z[KGKQQC1!F/ //D.8B4Gd"@bRSJGJ/}Zk c$,GG b#4G$H/[ R%@BGG4Gb/ZZk///$@G!eH"/ (.Q2J'JQ3B1!F/ //.8B4G"@bTJJ/|Zk.'1@PJ!>/=G4GG b#Dw@///g@hBG="GTGtGpb_VZk(G!G&GTGxb#"&@GG4G@ b#/@///à0@ð/G///G] ](}08@ݤHPX`#/k///(tGGb#H.@"HJ!RHJ GJG&@GG4G@ b#a@GG4Gb#@.qH0HF"tIPH"#wuHpHf#PJzHF>f.SrJGtFf>.VJF>&/Y8K:GG&?,@H4G@ b#<=6@GDDGG/G".JJ`/B@yFJ" `.JF /XKG ?f/`J[fK `Gf?-! If,CfHf<=BG4Gb/YZk~//G4Gb#(&@r//#C^~ ^(~08@GGGG`GGG>"{#_G//G /GD/c @FaDG4G@ b#@@ BGG"G4G[ZkGG b#/@GG] ](}08@P#/k///# ^~~"(^0~8@H޴PGGGG>"`{#C_Ӏ"//xGXB!"R/ 0.Q0J'JPBF/* //}B4Gb.s"TJJ{Zk"X"!1 01Bp@P."PJPBFB //cB4Gb31`Bs@.s"J{Zk@4GG b#0@?@ !BQF /0N@./@  @B @QF %@GG@GTGx b#@GG 0 @@a".uSJTJF>âBv@]"GB[Zkð4GG b#////@G ]G(]0}8@HݤP`#/k/// #~^^~ (0޴8@H>P^XGG%GGGGGG G âGGb#GGBVGPF/ @ GG*b#tG"%@ C0A A A_G]]} (0ݤ8@H=P]X`#/k///#4G ^~(^0~8@HGGGG^G b#~/+10 @P!@o@GG`"$0 @ R 2 @ AB@BF//B s" B B</0Bs" B5//%GG@ b# 8C0CQC* TG]@G  0@3BR @ pB 3@R"F////!@ R" 3@ 0@/0 @R" 0@0B$G]}C%C# d`G`b#//_/PG4Gb#"b$@GG="b#]}=_}@/D@4GG ](]0}8@HP#k///?BC#_BtF^~ ^ ~uFC(0GF84G [G3`GG2"0(b"tGDCUZk'//D0BD" C$tG8bQBqF$"]C/yZk /@B]"$"tGHba{Zk/c d@///GG]] }(0@#k///#4G~^^~ (GGGG0G 8b#"#@,G4GH b#0#@ //@0?$G4G b#L! @@ FG/c@,0,G]]} (0#/k///0#4G^~^~޴G#GGG G P=G/@Gb#/7&@ //G/ &GTGGb#A@x"! "@GGGTGb#'@DDݠƠG4G "Pb#@&F@ @g ƠG&"cF" @FF"J_Y/àGGH"]G@" b#G޴/_G//GE/@}H}GG8}}`@}'://@=b#P_`BGG8="}GGhbQZkGG 8]}Gb#"-#@G///8G@G`///@]@ "Pb#PTx" @pF4GFP"_GGG4G b#@GG]]}ݤ#k//p#"<@8>H^ 0G~P^X~`hp޴xGGG@b#  G4G/%@ GGG%// $G8="b#G'@A]_ G@""`="@b#4G_GG4G b#@0@@ @@G4G b#/@GH]P]X}`hpݤx#k#4G^G~^ ~(08޴@GGG(G0b#>5@GGG//"! GGb#4G/G"@4GTGeG %%b#= //;@G/0@0@ 0@0@/0@/GP@4G0b#@G(c`// #G4G0b#0 @a!@F?@P?@@@BGG[VZk%$@@cG]G] }(08ݤ@P#k// /k///Gk// /k///Gk//#C4G^G~G > {#@"I!@= G] #k/k///Gk// 0k/C {(?Fs@#^~^ GGT4B`F/ //0[G4G8{wZk=AG]] 0#k//B?B#4GSF~^^~ (0޴8G,@GG.GG(b#J$ /@GG4G( b#GG@ G //$GTG0@b#&B@1k.@ @G?GG4G b#y@G]]} (0ݤ8@#k///F#4G~^^~ (0GGGGb#///S@G4Gb#.@GG4G`b#G_(////#G4Gb#%@@/7@//G4Gb#.@GG4Gb#)@G]]} (0@#/k///C#4G^G~^ GG >b#/ @ G4G b#u@G]G]] 0#k///Gk/k// /k///k//#~^^~ (0޴8@H>P^XG GGr ĠGGb# @G 4GGb#9.@G$4Gb#/3.@,//4($, /, G GB 4$/ ///,DG4G8b#HBRJBCBtF/`@4 0 A @A A,$G(@4G8b#@($0@A @?G,4G8b#/@0DG G@ ////0G4G8b# @/s@ D0A A J A_G04G8b#/g@GG4G8b#Ga@/G4G8b#Y@G4Gb#,"/@G4G0"b#@GG4G8b#I@G]]} (0ݤ8@H=P]X`#k///#4G^G~^ ~(GGG>`b# @Gb#=_HcCG@b# G`@Gb# _GG]] }(0#k//`#4G^~ ^(~08@޴HGPX>`^h~px޵GGG>b#"K@G4G b#@=G b# /_G4GG b#G 4G@G&4Gb#x" @ӠB?&GGx1"GtGTZk#GGb# h" @GGG@",tGb# @0(/GG4Gb#w @ GGG"!  ʰ0Aj  F///ETG"""Gc G b##@ *G G4G b#/w@G`G4G(*b#/K @ӠBGG4G, SZkGb# "@,G,,/z//(J///0@BB!!(JTG""b"/CuZk! +BTGX""b"9uZk/4Gk(*GTGb# ,@ APAQBDB, ) @ӠBGG, /sSZk GGTG b#"//#@GG (*,GTGxb#A!@A0@*$@!(*, Q!@P0BD0kGGb!/ "GBGG0b#4 R"/@%// "G BGG0b#/ R" @/G4G Gb# -Ib@H /_!HD GHGG4Gb#/'_ӆ /a/// 'G4GGXb#) A G(/#@@GG4G"b#0@] gf@GG4Gpb#/+,@/*g//&`c$`/'GtGb#) IA)C}_/ G/ǡG`4G "b#_//c]HJ @ /+ 롯 OA/ KݡH砢? H5+ k/`"HtGG4Gb#H / @ݠ /H// HG]G ](}08@ݤHPX=`]h}pxݥ#/k///#4G^G~^ ~(08޴@GGGGb#>@? DG `cH#b BtGGb# "0R"#@  V0G% @CrF/@///0B B0B B0B B0BC BF/ CGCYG CD&////0p0/ `SӢSG/ ///G0@b#@ @G/?c "  H/GG]] }(08ݤ@P#/k///#4G ^~(^0~8@HGGGG(b#@ G "tG= B8b#/c@G3/  /,0 %`GG} ///////G GTG"="xb#* @=/G=PDc0`BcGG ](]0}8@HP#k/p#4^~^ ~(08޴@HP>X^`~hpx޵GG G GG GGGGG TG!GG!"]"tG8b#4`E/@B GG8""bG/OZk'G4GGGG b!'_GGGxb#@' G G?U//BGb0""OZkB//G(""bOZkB GP""bOZkBG@""bOZk@/4GBG0""?b 4G/OZk7'?(/BGb("" TGOZk7'?BGb8"" tGOZk7'?BGbP"" GtOZk7'?BGb@""GhOZk碖D G7'/{?// .5`AGGA9C bEG JGD7@gGsgGE_8`EGGGb# G G@' GY?X`EGGb# G@' GN?/`EGGb# 4G Gh@' GA? `EGGb#`*@ G' G6?/8DTGb#/'/W@G//KGG`b#@GGGTGb#x"@DG%?D%D 4GGGGGG b_8`EGGGGb#/#@//X`EGGb#@/`EGGb#4G @ `EGGb#`@ G' G4G?WGG4G b#+1`AG}@ӐB GG4GbOZkGG`b#G@ӡ`AG+ \|A`Ck/GGGb#@//GGb#d@///GGGxb#@//GG4Gb#@//GGb#@GGG4Gb# G @/ g+ G'?/'1'GRG}G`G4Gb# @G]G] }(08ݤ@HP=X]`}hpxݥ#k///#TGG^~G {#G, @= G] #k//0p`;0k/// #`^~h^p~x޴>^~޵G Р GGGG G G _"GPX.JXFHG.BGTGTGbzsZk GD " .J F0BG4G8b/NZk@0BG4G8b `ENZk 1@@.PJ> GGXTG& b#Y_G`X@]"GfGb#/W_@GTGXb#*&_G/$,X ?"G$HX%D H'///GXG]"Gb#@}"C_@GTGXb#&__G/G4Gb#@,C//G@=0]"(}"XG"b#>_G0"](="tGb#S@0G8"4Gb#8/ @G G8"4Gb# @G///G4Gb#8" @8(] A G0= G4Gb#B2B8F8" @GGEw8ݡ/G8" ="H]"G0 b#P}"/ @P=H4GG b#A"P?@//W@G/` GGP]G b#F8" @PGGGG////6rBpBCGFWJF///0 @R"0B Bs"/_P=GX" &tGb# GF/_Gb#@_ GPGGGGGPb#@ PG4GBQ@$"aPZkG jb#@` GG4GDb#//;@8'@DG04Gb#2@GX`G]"@}"Gb#/w_@G4Gb#/@2//`GáG@GG4. &GD"F//"BA""@! PBؑ"rFcر"/0 B! "JG/4@///G4G G pb#%@@@4/h A` G A G/蠧 A/ G/( A/ G/ I4@ G/\//G G/MGFl@A 8 EGb G/smFAӢsmFAsmFA SsmFA/`3smFAG*1A,TG b#JEAG@0BGG GG/MZk $! ,  //,KP(@BQB$L"+QByOZk5@E/Gb#////_G/ o// aGo+GGGbpb A/ G/ G/\= 0 A\=)!?Gb#k@G GGX&TGb#_GG`]h]p}xݤ=]}ݥ#k/// #?B^_B>:D~ ^~޴>GGGGGG G{# /="b#@G@} / c /T@"b#@GE/PGGGG Gm///i@GDO //FgG:[C@Ơ9/@G4/'TGGb#B01BIB,G@BGGG/{LZk&pB  BB& 0A$" F@QB$F"//KNZkpB$"$G"&QBP6@BNZkƠGb#/_G GGDG_/?GDG`///GGb#n_GGG_//GG]]} (0ݤ8@H=P`#k/#^$~> ^ ~c (08޴@HP>XG/// !  @/GGGG]G Ѡ}'c; Gc{#A'DZ#GG///@">"@{# BPF@"c_`"`/0@{# ?//GGTG,b#@G GG4GXb#v#@%c!@@ )Ơ=@ 4G//GG4GXb#c#@$c @@//De )D/_ // F/W// )F/O G@Gb#////_GG_"GGGG8b#@ 0 A (A$Gc @ ^"@ '@FcF"_f"`/0@ ئ"Gb#/c@G]] }(08ݤ@HP=X`#k//4G//#?Bx^_B:D~ ^~޴>^~GGGGGG G{# /="b#@G@} / c /T@"b#@G/GD ///DG G G$g!$!3Bw`P/ GG/E KCY9#AKG&@ 0A A99!JG 0A A/1 JG 0A A/)@yaJG` 0A A/!JG 0A A///G0A GQATGb#/o@//GPA4Gb#G@MAAA G$ 0@A PAk!G 'D`b#2B B3B7 J///_G'GGGGGb#*@ BQAG4G$"wLZkGGb#[@`/ GD/wGGx]]}ݤ=]}#k/#!1BTG(^CZ~0^8 >GQ%@G,Gb#^~ >e@B =GQJZk =G=]  @ G(]0]8@#//GGGGGk/] }"(="HZk@G/k///0#~^^~ (GGG/ 1/G //G "b#4G_GG]]} (0#/k///11 Bk//#G~^^~ (0GdGGG0/ ///!0@ !0@ !0@ !0@/ !0@/?8DP@4GE@G@b#/W@#GG ///"0! 0!/ 0!/ 0!/ 0!/ 0!/?GGGGG(b0bAG//GG/ 0#pa0@ @0"GG4Gb##V@GG]]} (0@#/k///#GG~^^~ (0޴8GGG G5///G_F/ GD/@///dG0pCb# G`~_GGG_/GD/G`Gb#j_GGG~_//GG]]} (0ݤ8@#/k///1!JJ Bk#~^^~ (0޴8@H>P^X~`GpGGG! 4GC(n///, Bʢ 7B0@r @@]// *b# * *@ $#A @@B0@ @@!! @[ D/*G4Gb# C4RP_B_@ GPB4QBGIZk â*"GG`b#GGKBF x/_ GG* G`b#KBG+(F js*"_ tG0@@*  @ DGb#QB AAB1AG_GG]]} (0ݤ8@H=P]X}`p#k/JN/J*L/J L/#~^^~ (0޴8@H>P^X~`GpGGG!C(/m///,Ԣ, B B/ $8C0@n @@X// G4G b# 4PB/@ GB4QBGIZkG4G b# Ģ4֢PB@ GB4QBGIZk âG)"Gb#GGKBF xs_ GG* Gb#KBG+(F js*"c_ tG0@@)  @J $G b#AB J*B!J_//G/G]]} (0ݤ8@H=P]X}`p#k/) O/) L/#TG ^G~(^0~8@H޴PXGGG0Gb#/_G$]"}"G`b#_GTG b##&_G*=G4GGPb#G=#P?B6@$///$$G4G"b#0@&B@_@# @?G4Gb#^@GTG# b#/_$G ](]0}8@HݤPX`#k///# ^~(^0~8@H޴PX`>h^p~xG GGG4G///dG GGG b#4GH"`(/z@,G4G  b#////o@//// 0A/  0A 0 0A Q 0A@ 0A,$4ɢ)$(b# I_G 44Gxb#4GPA@ GG4$BQ?@GZk ɰ4G4ĢGxb#PB@$GA,@ / JGGGb#GSHBSKTBGuR_ J_// *A(@AJ@ PBPJ @ *Q(BQJ@ JRHBRJ/_G4$GG8bPbGA4dG GG`D/ $* B $ /// 0 AG +AĢGG4Gb#䰁@4@M$C%@倖k!}]=[[jX[ _(C//'!(G ]G(]0}8@HݤPX`=h]p}x#k#N^~^ GG{#> @ B=GyFZkG]] 0#k///#4G^0[~^ GGC8bcOZkGCx b#TG = @ G]] 0#k///#TG^ [~^ GG>C(b_OZkC TGG b#=8"a@ G]] 0#k//(4G0{/k///k///#4G^[~ ^(~0GGG >^b/OZkGGX b#GTG3@G4GHb#F@ =_"&G ! 2DCFG] ](}0@#k/#Pp B~^^~ (0@B0޴8@GGGq FP/B/âG@0BFGG4G8bNZkGG x b#GTG@Gb#R_ǰ ǰGd3eB@dG]]} (0ݤ8@P#k//00 #~^^~ (0GGG/B 4GbKNZkBG4GbENZkGB4Gb=NZkB4Gb/7NZkG]]} (0@#k/%#~^^~ (0GGG/B 4GbNZkBG4GbNZkGG]]} (0@#k/GG/k/////0@/ P@p@@k#4G~^G^~ (0޴8@H>PGGGGb#/_GG4G b#@GG4GB"Gb#PbM@(U@8D`/GG4G eGb#4GB"4G>@)/GEGGtGb#_ G///),GG0B"4Gb#GG)H %@`BG4Ghb/YDZk A 0@/?0@' !?#//GGGGtGb#a_ G///,GG0B"4Gb#GGH //@`BG4Ghb0DZk A 0@?GGB"4GtGb#/@G]]} (0ݤ8@H=P`#/kG///J0@J0@ J0@J0@/J0@/k//#GTG^~^ ~(08޴@GGGGGRGG@ZkG 4G0b#P"@///G]] }(08ݤ@P#k// /// .oF`J0@r HoFQ J wJ2F >/`.`J0@oFVJ {KF> `@/`J0@Z@K [G@?/ @//%1@.GD DGJGTGPF@Zk //G4G0b#0"i@GG .GTJ>/k////OFPFyJFqJXKG`?[`KqG`?@J /_k//#GGG1, A1H1<#k/"///p./D H0@Bt0J/DSpJ"{0JtFp>/ . H0@B/DTJ"F{0J> . H0@BTJ"F>?21@B^@곙@B>"2BK`///q/G/41@B@Fq.GGqKXKq#FF.{J4q@By HGF"GF?# /txJ;Q@BJ.`Gq#q"Y8KF7@B#4GvJJG ?5DF /q/G2@BD 1"Y8K#6GsK`#p;H ?.FaxJUJF@B>7/Y8K!G7?@/.GG @Fv.21@BJ1"FwJSvJwFv>_#k///#~^^~ (GGGG/C$HGG4GC@ZkDDDGDG]G]} (0#k//0G//1, H FC1H1"/D0DDG?D0@q/qK HCoFDpF1"GF/$@q/qK HC/DD0D1"G?D/@q/qK HCoFDpF1"GF/ @q/qK HC/DD0D1"G?D/_0k/0;GPJpJy1J0JGG{Q H1?F?FF`sqH3FCk//@[pJPJ1#wqJaJq#"0JRsK_F@.VJFwJ>,@HD<Q.R[JSFQ>.VJF>k/.1, JyJT JA1HF9D>1<k/P;0JrqJ3bJPJSB4JpJ1TBUB?F k//Gk//;1?F/ p/0,,H H0""qK1"J@p#;Hp/!!HpK@@k/0.0,0JA 0H!FCk/#C4^~G^ ~(08GGGGG?DsDK$"D.RDJSFD> t_8@DG5@/ @#!H0@u$HPF.TJF>sö=@@8@@4Gc 8 C=C;G' ///Bc BDD/'C_FD#@FD#?DD cFD`FD B////c0Bc BGD`/?// B@ @D.DJRDJPDpJPFD>/G_G }8D8D$`/@ @.JPJHFrDJF>//.uHTJ1"F>.J GWJxKF> //d/dK[dKD`H`Gd?}#G]] }(08@#k//#^~C^ ~(08޴@GGGGq.01@BqJSqJ:ZBDDaH`aFb>////zaKHG  @ HCDHBB@b/bKD[bK`H`Gb?01BZ#daJ_B/GG4G"BK"D2 =`@/(@///0`F``BvB7J6B6/J6KY6KF{vK;G6?///`BzB7@K:BZ.H HuHRZJUFZ>0B B0`B"0`B`BwB7`J3B/=`@4G / ///f0@ aKc_Ӻ @G/_",2`@G"H,DH /F` CB@BtF7`///q#Q#.B Fq" xJWJ1"F#>$,e;K@HD<ĠQ,aHBZHAD1 Q<.vJUJ BF>,eJ@HD<$Q,f!KBAHFDQ< B /,0B BeJ@H1"D<8G]] }(08ݤ@P#k/{"g/#GG^G4G~G,q/H[qK#pHDpGq?@3DF"_"_=5G] #k/C#0FG9GGG^~:!J ^(~4@G0GG>/S/F`dGGhG4G /`y.yJ9#=//4GF=B"__%G4G] 8"0FBB@7`JSCs/sKaFqöBB7JVCV.VJ@JQ0 @ 7@0B1"0BBB7JPC 4Gx /0B"1_c B?1B/ 7B= B4GSFG@/B{#[;{ۢ{@C[ @a@;B{ BvB۲{SC{/ B /;;0B{# B9@;/_///G9 B @@qD/'`///آ`B#88 `BXX6J9!K!!HVD:AK0JYDAD2AJ5JZDPDRDUDز88XX wB^/X0`B# wB:AKZDX/S//1B 7B BUF?@///=`B#,"9 "ݲX G"AHH@Dy,=XvH:AKCGxY.AJ0JF8,H"آ6JF qBY,UH"X2AJBFX9,5H"x;aKaG8/ wB/0`B# wB.p }8!!HJ0D8_==1G] ](}0@#k/_R" /# q^~ ^(~08@޴HPX>`GDGGGG``/// TGGb#&41BHtBB0BB BH0D_'$D&%!De pJwpJ..V JUJFF>>=9#=Cg_"="b#E eG_="b# EGu_'$=4GDH!Gb#") A !A /c @G&GTGOXb#$C_BDGGGAZk$D  ĢGEG G] ](}08@ݤHPX=`p#/k///3C0#,B1FG #tN ^~4G ^( ~0 8 GGG:@Gb#dJ5C3F5B"BC/~_G B]="GG4GG(b}ZkxGG}GHb#G"/ @=BG #B /@Zk//}G4G"GDXb#/_G ] ]( }0 8 @ #k/q#4G^~ ^(~08GGrBGGG8b#@5_(BCC="GG0b/kxZkGG]GX b#G0" @ G4Gb#[_]DG] ](}08@#k///#^~^ ~(08޴@GGGG"4_"2_/b#_ݢG"ݲ6B%@0@m_]G 4Gb#@@G/{ @8B]GG6@Zk="%@@=6#@F / _GG/O_G/#@dG]] }(08ݤ@P#/k#4G~^^~ (0޴8 [@H>PQ.GGGGQJ(b6`Zk0BGG4G8b$!}Zk0BG$1@G4G8b/}Zk @CG5@F8D/ ///c. B4G(bcJ`ZkD@BG" GtGHb/_Zk///'1@c @CF?GG]]} (0ݤ8@H=P`#k///G//G//#^~^ ~(08޴@GG{#> >CC_=kBG 4GbD/c (}Zk`@/% #.#JP0BF //c.B4GbcJ_Zk//#,#HX$D c /GB "4Gb#G /_#,G#H% U$@U!@!@2F!F /DGGTG`@ b#0@_G#,@0@q.#Hc t1HSqJtFq>.JUBUBBGCGF?@f/[fKf?G(b#@GGG4GHb#_G///GG]] }(08ݤ@P#k/#4G~^[^~ (0޴8@H>P^X~`hp޵xGGGGGb|ZkG@4Gb#0@ G G_B GGG4Gb|ZkBGG4Gb|Zk B GGGTG(bVtZk* G!AGTGPb#(@C AG A A+gA0@_G @BGGG nATG A/~ZkBGGG hA~Zk BAG(b//tZk G//BG4GbT|ZkAGGTG @0@Pb#+gA/{_G @BGGTGb{ZkGG4Gxb#_G]G]} (0ݤ8@H=P]X}`hpݥx#k///#4G4G~^[^~ (0޴8G GGG b|Zk`@B4G b"G |Zk1@(BGTG#B0b 6^Zk//GG]]} (0ݤ8@#k//4G//#4G^8[~^ ~(08GGGG>C@b{Zk$G@G4Gb#C @0D/ $G_G4GHb#0@_GHBG]e@GG)~Zk.UJ>G]] }(08@#k/q.P.qJPJ Bk//#4G~^X[^~ (GGG`b{ZkGGGG4GGbb4G/W@Ӡ=@4G"///a@P.."PJJxQJTF.WJF0 @>0@@ D@"?a@a/[aKa?G]]} (0#k//#4G^[~ ^(~08@޴HPGGCb >W{ZkB G4GbQ{ZkG`@G4G0@b#[_GG4Gb#U_ӠBG`GG]}ZkB@G ]/}ZkG//GG4GG(b0b/@f,',=@4G4Gf"fHA'HpgH0D'< ///@..#JJ{JFT/ZTK[G0@BT?0@ @s"@r,GG4G(b#CrHrH^P~X`h޵pxG GCTGb:]Zk//.PJ>GG4G b#_GGG4G b#GTGG"/{_"////] G}!b# GG@ ,G0" H/c/UAA0D/ G!.. EC.J/H ///?FC BFD-!I 0A?9õUBB (F F1/`///+YB9!G% B4Gb/\Zk/ G-+.tGGb#IQ+J!!r+Hk!/oA`"2F_"!+>G@-I?//!K.Gs+HRKJk!SFK>.UJ">ݱ eDb#@///-GGTGb#I/@///@Q@ _0`@ġA@pGG4Gb#_ eDG0@TGd@Q@b#_GCl@G]]} (ݤ08@=H]P}X`hݥpx#k//0#~^^~ GGG/ ///CG11 B4G#b#Q2B_#?G4Gb#/_GGb#G]]4G} 0#////k///#GB^~TG^ ~5B(0G BG>GGGb#ӲB_//GG4G`b#g_`B@G]{ZkG]] }(0@#k//#~^^~ (0G&GG0.`h0J ///e `#.#JTBF #J@. B4G(bJZ[Zk#,c #H?#.#J@/GG]]} (0@#k//;0.0J/7 #~^^~ (GGGG/// BTGTG(b[Zk .rH"Q J2F >`// BGGTG(b[Zk//.qH` PJF>/G]]} (0#k///-0.GGG0J' /."VJJFF/G/3/p/3K[pKrH"rGp? //.xJ4GWJ"F>.s"J0,A0H0<k/CG4G?F@#^G~^ ~(GG0 BGb#_B@]GGzZk.VJ>G]] }(0#k/0.G0J/3 #~^^~ (0GGG//$ C/CKAAC!!D //.B4GbJZZk//#,c #H?G]G]} (0@#k/Gk//#4G^@[~^ ~(08޴@GGHb (¤C'xZk=$G @ eD"/ $.Q2J'JQ3B1!F/ //.0B4G"8bTJJ/ZZk.#1`@PJ >/G]] }(08ݤ@P#k/#tG"^~> ^>"(GGP.0[8bPJKF.UJJG"BF# // sZk=2H! =C"///0.0J//"G]2GJ ](GJ0#/k///B 51B\BCk///G//G//G//TG//G//4G//tG//0BG"="tG8bsZk]2HB ]C///0.G0J/' #~^^~ (GGGGd.B4GbdJZZk.qHPJ F>D.DJ_G]G]} (0#/k///Gk//C0.0Jk///0.GGp0J) //3/`F3KY3KB.JaJs"!G3?/KKXK B6,6Hy3Hs"G?.JJUJ B.Jx3Js"F>3/3K_/k///#4G~^G^~ (0޴8@H>P^X~`GGGG"b#_#GG GI@ G @/0 ///B4Gb BvZkA GGG0 @TGPb# @/ @0@0@_GD@ 0AP.sPIRPJSFP>BBT@G6yZk0@ A A @/@.WJG>G]]} (0ݤ8@H=P]X}`p#k///Q.GGQJ(@////FKXKUByJ"G?.JJ RPBRUJwTJ"F>t.tJtJ A0@!r4HStJ"rFt>.J/k//#GG"~^GG^~GG GF/PB0B`">" bBB@ SGpBc`BЀBB@ B`0BpBPB@ BB`ЁBBB"`@ `/(V86"G0v?uZkG?GV/?FQ#_w"~ UB_G bBq#/ZBFG[BB 1#K/D?Gc@BYBq " "1"KDFCBUB[/`..[K`Jq#G[BJW/U/,KUK#Hw4GF/C X/XK/4@///y, GGyH*`..J#JBW@9#.Jy/yK@x.y,xJ#yHSwB9#s8.8J/ Y,YH/ @.y/J#yK@@9#@.J/y,yH/`x.xJB///GG]]} 0#/k///#~^^GG{# @G]b#]G #_///#GTG^~[{GC/ ZZkG ] #DGk//#GTG~^([^~ (0GGG0b/YZk///8"`b#,@#,G@.G#HR@J%@%DsJSF@>G @4Gb#C0@i_HBG@GGtGPbG/CYZkE,BEHE<G]G]} (0@#k//'#4G~^[^~ GGGb0uZkG0@4Gb#=_(BGGTG0btZk/GG]]} 0#/k///Gk//#4G^[~^ ~(GGCb >uZk ]GG4G b#@FQBGqF0@B _ B@]GG[wZk.VJ>G]] }(0#k/#4G^G~^ GG>b#+_Gb#]] 0#///Pq SB/1 Bk///#G(;"H^~tG"0[P^X~`hGG8b b]Zk=B "b4G?D7 tZk@!HGN6$Ha!@ @8DXD@* /d..dJVJ wcJc F>/c/KpK[cKc  pGc?$,.$Hs#HTJ c p#JF>.J #/Y#Kc 0G#?///C/ ZCKC?GH]P]X}`hp#/k;k/;k///H#(> /@h~^^~ GG{@C@(B8""TG0b/WZkXB8]"tG0=`b/\Zk(BP""TG0bWZkhB4G4Gpb/KgZk///#8> /@h^~^ ~(GG{{Cs@cB""TGb/WZkBH]"tG@=b/\Zk BG(b5vZkPB4GXb/GZkBG""tGb/sWZkB""TGbmWZk B4G4G(b/gZk/// #> /@h~^L"8~"[{GHGG?">aZkG]P#k/LP_FLPHk///#8> /@h^~G[ ^(GGbuZkB4Gb/GZk@=H4G B(bH0H=L"CsZk0B? X}"1 @P]G8baZk@B=TGHb/'VZkG] ](p#k/#(> /@h~^^~ GGP{{Cs@cB""TGb/VZkB8]"tG0=b/\ZkB""TGbVZkG]]} `#k//#8> /@h^~^ ~(GG{{Cs@cB0""TGb/VZkBH]"tG@=b/[Zk BG(biuZkPB4GXb/GZkBG""tGb/VZkB@""TGbVZkG]] }(p#k// k/Hk//H{#"{#/L k//(#GG~^^GG / 0 AF/' @ZF0`B#@`[F0`B`PF0`B0`BYbB/?bB @/` [F/`0`BbB/0"@B1" HbtG/[Zk /ssBStBG]] #k///4Gk/x[HGr"0s"F/F0 BӢF0 BF0 B0 BY"B/"B /3 s"F/ 0 B"B/4Gk/q1BQ2B/k///HGLp"/3#~^^~ GGGLP.SJ@G"b#q_GtGLC"("b#_//`G/"b#a_ "GTGb#_ӰG]b#]}4G 0#"/4Gt#"#0^0[~4G"8^@GG8b/qZk =G4G B(b@AZk] ]( (=G0][8][jX[@P# _ _[/k///#TGG^~"0[ ^(GG8b7UZk_ =0J_}[[ "aAYaYG] ](0#k///P{#//#"4G^~G ^(GGb#/_0BG4G8b!TZk`B4Ghb" ~ZkPBG?" BXbGSZkG] ](0#/k#~^^~ (0GGG ///0`@G$b#DG @Ӡ9a@ G]]} (0@#k/# ^~(^0~8GGG ^~ ,H/ G"4Gb#9_GG4Gb#/K_GGG4Gb#_ ]Gb#}@GG4G(b#_G ](]0}8@#k/ 0#4G^~G ^(~08@GGG> Gb# ^~>j_GGG///"! G4GXb# _}0@ GG4G%pFb#e/G//G_G/GQBTGPb#^_B@0@  GG] ](}08@P#k/// 0G' 3 B  qB`BF///ТAB " SB  0  0 p QB/0@B" QB ?k/ 0#4G~^^~ GH GG P`GXb#@"_ ?  #:G0@4Gb#P@_ #G4G b#0 @P?@_ CG_" "@ #qPFFӢF/ WB #0 C C cSY:CY///sS`BS 0B B1"/ â"/ G]]} 0#k/// P2@#~^^~ (0޴8GGGGGG/// c0BGTG8bfBs//RZk #0@@ @?GG]]} (0ݤ8@#k//Gk// cC@ P2@#~^^~ (0޴8GGGGGG/// cPBGTGXbfBs//gRZk #0@@ @?GG]]} (0ݤ8@#k//Gk// E@G% @G// PG@ G///a{`{;F `0@ @! G/k///@@k/ P2@#~^^~ (0޴8GGGGGG/// cBGTGbfBsPF/RZk #0@@ @?GG]]} (0ݤ8@#k//Gk// cC@ P2@#~^^~ (0޴8GGGGGG/// cBGTGbfBsPF/QZk #0@@ @?GG]]} (0ݤ8@#k//Gk// E@G% @G// PG@ G///a{P`F/`{;F/`0@ @! Gk/@@k/#TG~^[{GQZkG]@ #/k/// 0G #~^^~ (0޴8GGG* GG/// CG4GHb#EBҠ/{_$G4GHb#u_G4GHb#////k_GG4GHb#0@@/c_ à @/G 4GHb#Z_ G]]} (0ݤ8@#k//C#G ;"~^([^~ (GGG"0bmZk4G&GG4Gpb#_GG4GXb#Z_G/8BGTG#"@bQZk//cGG4Gb#_4G/GG4Gb#_GG]]} (0#k//Gk//1+F FBk#4G^G~GG{#_GG///"! /=G] #k/#4G~^^~ (0޴8GGGGhb#//_/G4Ghb#_G4Ghb#_ŠGG4Ghb#/_G//GG ////$G4G0@hb#%B@_  @/G4Ghb#_(àG////$G4Ghb#%@@/_ƠG4Ghb#/w_G4Ghb# o_G]]} (0ݤ8@#/k///Q#TG(^~0^8~@([4GHPGGG;0b ^1"/'PZk2#}GGb#4Gx D" c }Cc]_GG4Gb#_GG4Gb#_ ]   ]  //GTG =b#"m_G(]0]8}@H>P`#k/Q.QJF@#^~ ^(~08GGGG//,GG$ @HHDD D@ `b#@/ //G="]"b#S@GG4Gb#_G4Gb#/_ //GGGpb#G@G$,$H?G] ](}08@#k//p#41 BۦTG~^F^~ 4F(0޴8G@H>P^X~`hp޵xGGGG0b#Š[_G4Gb#_? D/C///GG4Gb#_ӡC GGGEGb# F@G4Gb# "/g_$1@Ơ0B4G8bG//mZkG`@4Gb# @%_ "PB GGGGXbGG1"ZUZk /G4Gb#"_ G//C///GG4Gb#_ӡCGGGEGGb# //@GG @j +p (j`/`Fs0B``F//s0B`F` s0B ``Fs0B/+TBT GP@ GN /G-GTGb#B_*BGGGP""tGbA/@.PZk/BGTG`""b&PZk.JJ//XFBTG""Gb/PZk //,B/ P""GbtG@HH PZk,!H*1BGTGb ""OZkGG4Gb# 0A!_ 롯 AG4G "b#_BGTGX""b/OZkj$1@dGG4Gb#_G]]} (0ݤ8@H=P]X}`hpݥx#/k///#^~ ^(~08@޴HP2,GGGGGG2H FA G/.GD"Hb#PJJGDDD)`/@=@+hBGGTGpbMrZk #///G="]"b#@G]=b#GG@G4G@b#S_G4G@b#N_ /GGGGG b9@G,H?G] ](}08@ݤHP`#k//#GTG^~ ^G(GGQ.Gb#QJ>"KF @//_= BGTG(b /qZkG] ](0#/k///2,GGTG2H$Dw  #C^~^~ "(GG ~GGp/[pKGgKHb}HB^DF`6@@T/: qZk8/NB2HB"/+0\\BCk//@ )//0 $/0 /P //0 // //0 //x //@ //0GTG=b#"_`B """GtGhbSZk` } ]"Gb#_/TGpb ="_G]]} (0#k/#4G^G~^ ~(08޴@HGGGGb#@⤀¤_ ,G4G"b# H'D _ ,G HC'@AF /'f .JSBsaF` //.B4GbJvMZk//%, %HC'@!F/?]G2@C0@B4Gb#_0BG=GtG8bNZkcf@,@H<%,%H'D  eGG4Gb#__@B` P""GGGtGHbNZk,&,, G&HEH H/&.F""Q2J'J#F f.tJkF`. JG7@C0B4Gb#_0BGGGtG8bNZk@,GH<F,FH#//DD/. JCBPF/f. fJCgBF/ `. JCBG/&/ &Kf/fKէ@@G]] }(08ݤ@HP#/k///#tG^G~ ^(~08@޴HPX>`GGGGG~CGb#/_BG"4Gb//PZk//HBGx"Pb4G /&8iZkGG"8b#9_GGh""tGb#_ GG4G(b#8 D /_GG4G0b#_G4GPb#/g_0BBB/ h\BCk//(B`Gb"DGFtG0b~MZk/(B`G DGFtG0brMZk/GG D"8$,G$H# /I8!Dh/ ///@.JSBsaF `.B4GbJBLZk//.qHPJF>D. DJ?(BGS`GFtG0b:MZkM/hGHB""PbtGp DGGhZk(BGG0b;`F%MZk8G"4Gb#_ӘB G"4GbuZkBGG?"GGb]KZkD(BGGTG0b//MZkGG4GPb#_/(B`?'!GGF@9#D0bLZkhGGTG@b#("_/GG4G8b#k_G] ](}08@ݤHPX=`p#k//GGGG / ]8G(}IhZk /GG/k///Gk/ #> /@hDG~^G 0BP#/k///(0[GtG8{8]"/QZkG]4GP#k/#TG^~^ ~(G>GpGb# cC rB`@P@BCQ_B1_GG b#4GG _4G #Gb#0B CCB_G]] }(0#k//Т V}@(p#~^^~ (0޴8@H>P^XGGGGG`/s0@`s0@ `s0@`s0@/`s0@/GP@4Gb#_GG// $0@4GGb#BP?B_ӡ @@? GG)///$G4G Gb# G&B_(/GTG"b# 0 A@ _&$ %A*@ @A!&@/ $0A A@?G/G]]} (0ݤ8@H=P]X`#k//Gk//G TG b#DA$_H P.#GPJ&@///0,S@F``Bp.0H"pJ@pJ"@p/A@` @pKpK"@@p/S@pK``BpK"@@P.PJA@` @@_1!J Bq";H~>>{FqFF`[[`X[~qN sC #k///GG?"G_Gk/GG'?"G_Gk/B Bq"F3FFtF/`#>>[[`X[~3N B #/k///[1CF2N6%J3CFtsBTBBSB Bk///[1CF2N%J3CFTsBtBBTBBSB Bk/?&GGG1"j_G/k///#"tG^~ ^(~08@޴HGGGGGРGG@"pb#TFU@G_G=GTG Pb#&_pBG=GhZk/.C.b#/#/JRCJKY#KFGG/@///GG4G#_`BGhbpgZkGG @TGPb#_=PB0@"GA&@/iZk0BG] ](}08@ݤHP#k///#GGG>GG >/_@@ / /// ]G(}"5fZk !/?GG #k///GG #/k///04G #~^G^GG{# "_G]] #k#4G^G~^ ~(GG!B >Pb# _ BG=" ]tG(bJZkGG]] }(0#/k///#4G^0[~^ GGC8bfZkG@4Gb# _ = B"]0 @7iZkG]] 0#/k///#~^{#^GGG_//@G/"G]G] #k//#~^^~ (0GGGGG//"b#_/G/Gc/G]G]} (0@#/k///#4G^G~^ ~(08GGG>( %"b#z_ BG %?"G4G/fZkG`hb#_ "@b#>@GG4Gb#/_///(GDG]] }(08@#/k///#~^^~ GG///pG4Gb#{_G//G]]} 0#/k///#?"4G~^G^~ GG(0G00b#00 0"_GGGtGxb#`"_GG4GXb#M_GTG#"b#_G4Gb#0@_GGtGC" xb#`"_GG4GXb# 3_G #"TGb#_G4Gb#0@_GGC"tGxb#`"_GG4GXb#_GTG#"b#_G4Gb#0@_GGC"0""tGxb#_GG4GXb#_G#"TGb#_ G4Gb#0@_GG C"0""$tGxb#_GG4GXb#$_G$TG #"b#_(G4Gb#0@_,_""4G .Gb#Q J >4CDCLCTC\CdC_P4G .Gb#Q J >TC0@B{_X4G .Gb#Q J >\C0@Bq_`4G .Gb#Q J >dC0@Bg_h4G .Gb#Q J >4C0@B]_04G .Gb#Q J >DC0@BS_HG0"TG .Gb#Q J >4Glp#"/?_G"0""0B"tGxb#/_Gt""TG@hb#/&@tG]]} 0#k///0#4G~^G^~ GGG b#/W_G4Gb# /O_G4Gb#/G_ G4Gb#$/?_G4Gb#/7_LG4Gb#P//_dG4Gb#h/'_\G4Gb#`/_TG4Gb#X/_DG4Gb#H/_4G4Gb#0/_(G4Gb#,/_G4G "`b#_G "4G`b#_G4G`b# "/{_ G4Gb#//_ G4Gb#_Gt4Gxb#/7&@ӈG4Gb# G]]} 0#///G]]} 0#k#4G^G~^&O" ~(GGb#u_B?&G&O1"&G4G/dZk=G"b#X Ha_G#&"4GPD"b#/W_&C&&&LT#"R"G""R#2 "0aB@F$1"/XK?r/[zKR#r?.PJ2 >/XK?r/"[zKR#r?.PJ>/XK?r/[zKr?. uBPJ R"> tB ///0`B1", tB@HR""c^#GFccP#      _0Gc'&G"tGO[O{GOb#_G#$GGOtGb#0/_G#$`"GOGtGb#_G#$G"OGtGb#_G#$G4GO "b#C_G"4G8b# c$P"_\OG]] }(0#k/#~^^~ (0޴8GGGGD&` G4G b# @ $&4GtOq[@Zk$$4GtOa[@Zk(B4G0bQZkG4G b#/?_0@  $$\G4G b#/3_G&4G b#D$/+_GL4G b#&_G\O4G b#!_GTO4G b#/_ӐO&(àƠGG$G4G b#O@/ //_$G4G b#O@_(0@@ @G&O4G b#_$G4Gxb#OO"////o_$G4Gxb#OO"////c_$G4Gxb#OO"////W_$G4Gxb#OO"////K_G4G b#_G4G b#/_GG4G b#_G]]} (0ݤ8@#k///Q#4GTG^~ ^(~08@GGG~`;"@[HbGnDZk//[#D&pB4GxbX D/K #\R],bZkG0@TGb#/W_$$BGTG\cb#aZkG&4Gpb#\/W@G&4G b#\@ӠGD&G\RtGb#"_ B4G"(blZk BG"4G(blZk BG"4G(b/lZk7GG$&tG`b#\1"]_-àGGTGb#"_%@BGTG""Hb$ DZk0B#4G8bx D _FZkO4Gc0B8b/WFZkO /GGTGb#"e_G] ](}08@P#k/#4GTG(^~0^8~@HPG#GG0 GGhb#,C]}XG &@GGGGTG b#K@ 7,$GGG]}[b# @C0DG/ @(/GG]`b#GGG @,H$///G ]""G4G4Gb#R&XR@e,GGGb#4GeH/ _GG(]0]8}@HP`#/k///P&#GO~^GG//@QF` QB?GG///, A QB/(@///a7`J3@qFa3@`@ qB@7`JqF`@`G@ qB @7`J`@qFG`z@ qBG&OGTG] #{#/`@GF4///UBuBQFG QB*FG&עVBBQF/;` QB//wFGUBuBQF. QB/FG עVBBQF"` QB/wFGG/// @&OG] #k///ڲG] #k/ @&OG]G #k/G]G #k///G] #k///G{#9/F"G/ k//BG /{C B {C B {C B {C B/ {C B/FpC/k///?G1"/?k//#21@B~^^~ (0GGGGPBB_EBBGb#@_B$GGGbZkO$#OdGG]]} (0@#k//@#TG`^~h^p~x޴G>^GР(GGGL(C@ppy`@`10b#X"s_GG4G` b#>/@;//8GG4G!b#//s<@pGTG$b#0"_/`BTG@""hb /dZkpGTG $b#"r_/$0@$T#G ]"tG=b#//f@,BBBCSFFF@ ///GGG4GtG b#@@($pPQB0,d31`B`BY\|BCk/T&TX" ݲU///"/B/# } 8KZXK:G |KKD E///L?&XM1" ==///L& WMs" }5///0.4"/5" ]8JY7KF!\KJ6D =%///..B" =JTJF58JJF P/TB/U" =KZVKG;g/V`///'M ӢFCBpGGX5G8G, #/:8D ZCB2F/ F/ZCB;G F ZCB2D :8F ZCBFUG/391 C3S3/ s`/ӢDzP:1@CPE21@BE//Gs0@ @  /?#&X1c$11 BX#e;1`Ce//>¦G="Gb#TG֢F//_GG="TGrb#@ӠGGG0b#tG11@S_$?% GG )!$.$JQ$J/$>H/ @///GGGTGb#_J/_0@ @ !&$X!&8 OH=PHP=P"[ @B2DF[tFSF@`X[XX]N52@GF%O 4Gb#_ӘOJ @G////GGb# @0@ @ GF%O 4Gb#/_ӜO&4GGOb#/_G`]h]p}xݤ=]#k/#4G^~ ^(~08@޴HGGG(Gb#G_G4GG(b#_E@GŢ // BG(b"\Zk֢/@'8/4GpJG$&0B8bY8K0GG8?#O1=4Gk]ZkG@TGb#_@BG"GTGHb/\ZkeGfŰ d0`Bd0BG] ](}08@ݤHP#/k///#TG~^^~ (0޴8@H>PGG#(GGGGGG {G"0 @ {Y`b#//_@B"h(B"GGG0bGX"/BZk(BD"4G0b/BZk(BD8"4G0b/BZk(BDX"4G0b/BZk(BDp"4G0b/BZk(BD"4G0b/BZk(BDx"4G0b/BZk(BPD"4G0b/BZk(B//4Gh"0bBZk(B4G"0bBZkGGXb# 'H{_4GD #V# G7E///IFG@idG`)7E//4GGGXb# 'H4GDS_ C@F/â0Bò*GG Ib#3_ DDDID /G F/ PGIF`GFTGID G 0C'H )DI CG]]} (0ݤ8@H=P`#k/0#TG`^~h^p~x޴G>^~G#(G@!GGP;"GGG2!pb#X/o_CB4Gb\ G!\ZkGGG\=GGGb#_GGTGP""b#/_8]"4G^8=GGG4G4G@"@ b#@X4GWd=S/GG4GHb#_GG']"tG?b#/_b@= G"" b# 09 cS&GXR4G4G@.///G4G=">G4G" b#CR&XRq@GGTGpb# _B G G4Gb[ZkGGGGGGGb#:_GG4Ghb#_砮G`""*GTGpb#_B GG4Gb/[ZkGGGGGGGb#_GGTG`""b# 4G3_ 0!G0GG4G4GH" b#H%@@"G+Gpb#TG1"_BGG4Gbl[ZkGGGGGGGb#_@"GGTGb# 4G1"_ G GG4G4G(" b#(@(d@"GTGGpb#1"`_(G G0b#4GP_GGGP]"PG4GGb#/_GG""TGpb#q_Gd//`dGP}C4G0b#/_GGP]"GPG4GGb#_GGTGp""pb#S_XGG0b#4GP_GGP]"GPG4GGb#_G`]h]p}xݤ=]}#/k///k//&O/k///0#4GH^~@[P^X~`hp޴x>^~޵G(Ġ&OGGGO(ް,OB@ Hb"/@ZkB4GbWZkG%G4G b# 4G G !! G_ G/#G,BR///O(ݠ&/"OGGtGb#SRBSsBSB0}8ݴ08=G[[/`X[@@} tB2`O֢ VB/@_"//_G&GTGGOb#_ӌO#/O,@S!DGTGGb#41B51B/ )AQ?A/_ GF@0@//G 0`A mA A?(G<PB4G b#GI_( C,&$AMA @@ E +E //0Ac, ^"$! -@ AFc A////0A! A?G////ʠ@TG@BHb &""ZkB 4GbVZkcG4G"Hb#k%`Ok/ `*_i@GGb# )A` A@@ HLH @Ơ/G "ݰ4GGb#_=G .).i!} JQ )J F C/ ///G"="]"}G0b# }"O_ =4GG b#@"P?@//_G/H!GG ]Gb#F"b_,=4GG b#A@  @) A GG_ =GG4G b#!@P?@_ /0 ]GTGGb#2B1BQ?B_GG $HD!@R2@0 B@R" s""@J  8B8saK0 Br } +B0 B/`J 5B(3!K0 B2 ] :B @s0 BaKr  0BӢ0 BJҲ 7B30 B!K2  Bs0 BaKr 4BĢ H"EB/_GG4Gb#v_]?GCcG&4Gb#k%`Ok`O%_0AJ! A (G,=/ɠGGGpblb#&@0A)! A,]$O尀@B4GOE@cHb`"`~ZkB 4Gb/UZkGH]P]X}`hpݤx=]}ݥ#/k///PP#4G@^~GH^P~X`h޴px>^~GGGGGb# G G8^"_G"4Gb#(/_GG4Gb#_8CG"C FG" ="(]"Gb#0}"/+_0=(@!4GGpb#" @AP?@/_ G =G"0]G`b#G?DA_@EA`G/ *  Q(1"(] FB#@0B B ( B0B B/@q(} fC`0B B/Q(] FB @0B B/ ( B0B B/(}0fGGGV`/T/// XG BAJ? AB!(! &F8 B/40`B yB/0F/,! :B/( 0`B yB/$`F/ B/0`B yB/!&F/ a zC/`0`B yB/ F/ᢷ B/0`B yB/?3pB3SC3aJ_FrF0B#X0 B/G0}"2IAGG="b#_G"=G0]Gb# G_@ GG4GEb#-_ , H!/ Gd]4CBCFC*`F/'ݢGF@0BGTGb#b_G"4Gb# G/_GG=GTGb#/C_G4Gb#_G( G!=]GGTGb##CBCd;_G@]H]P}X`hݤpx=]}#k///1GG[G}"1"|VZkG/k///0#4G^~^ ~1G(GGGb#a _@C@/_BGTGb8"/C}Zk(8B4G@bYTZkG4Gb# =!P?@/[_=&GG"cc 0/VqB/0`B"0`B0`B0`B 0`B0`B0`B0@B TBc 0GG bxmb#]G] }G(GG0#///G]] }(0#k/#~^^~ (0޴8@G$GGG G///#%B/ ///GGhb#@0@ @@G]]} (0ݤ8@P#k///P #TGX^~`^h~rGpx޴>^~޵G~`ӠGGG1`b#ް;_@4GBb"|Zk 0B4G8bSZkG4Gb#$O"n_G4Gb#$O"g_G4G`b#&`O0/ O//_ݠ' GG G G! @J/@#BTGb?@AE 0APAPBPB ݴ =[["/`X[((ݡ2AYAB@GC|Zk0B 4GG8bYSZk . $ D" $. d.tG .G b#JQ!JrJTJF @tFN"/_G//GGGtGb#_ 0 A `A &A@#B4Gb ¥" |ZkB4Gb"/|Zk0B4G8bSZk| %GG G G'F!-I///@BTGb ¥0AAAA!@A?@0C!D NJ1C0D"2'BYAB@G{Zk0B4G8b/RZk @///OGG/"b#G@d_% 0 A `A! ,A@#B 4Gbh" ¥{ZkB4GbH"/{Zk0B4G8bRZk! !408<///8}4GP0G`b#0CkE $`O!N J1CpE&/FG/ @O//_0GCGb#u@<@//// G G$`O_%/ ///! 0A ! 0A ! 0A ! 0A/ ! 0A/ ! 0A/?YAGqA@P?B4Gb#{_G GGG/G 0`A4G "" !b#_Ӳ mAΰ&1@/_GGGGGbpnb#G G @////k!///0@ Gk! @?GG4G(b#/_@á=TGBb A("NE/0AFAF@F@@ݴH=@H=[[/`X[PPݠ-@YAGzZk0B 4GG8b RZkGGGb#TG //_GGGGtGb#/7_//_4ݡ8}<%0A!xk! A A4ݱ8}<*@àB4G"bzZkG$GTGb#/_G4Gb#%O"/_cG4Gb#c$O"/_G4G(b#_GX]`]h}pxݤ=]}ݥ#k//#~^^~ (0޴8@H>P^XG`GGGGGG G G 0 AGGb#_GGGGb#J!F_Ӡ 'A/(0 @(G]]} (0ݤ8@H=P]X`#k//p#~^^~ (0޴8@H,GGGGG ۤ(H//'f C.JPBF /#0B4G8bQ.QJvZk/#! #!.!J?Cr.rJG 6@(//Ǣ .JUBF) /0B8b8/8K4GvZk/%GTG`b#D!@0 @%/C_$P.&B0@.PJuJTJF>â"ò/K4G@D/ZDKD?/GG]]} (0ݤ8@HP#k///#^~^ ~(08޴@HP , HGGGGG(РG /`/(B4G`K0bjvZk@@ #.JPBC@ a.`J.JG2//(B4G0bKNvZk@@(///#.JA&@!C@%EG1B@%0 BTGb#_$P.(B0A.PJuJTJF>â"/K}[0@C[@@.GR@J@>$TG"G5b#F@G$GTG5b#WG@CGG]] }(08ݤ@HP`#k/// #TG`^~h^p~x޴>^~޵GGGG#0A'\OZ&(PGGG G ]8=XO5=<=TOuG}PO B@G !G1" G @;"b#/_G  G G '# / GGTG b#MBҡn/` //Ƣ0B BB&)_&ΡP0Bб G 0A A A_f0`B` SuBƲƠGy/<=8]0" ="]"b#!%!0]e_@=` "HPXC//" TGBb1"P F =xZkG 4Gb#/7_ G * J"tG@b#/ . *. j. .JQ!JrJTJF ]tFW_///* GGGG8b#G_ 0`A XTGG =P5b#G/////E@G =GTG@5b#qF@ G *" "tG@b# , H/ J. j. . .QJSqJJSFGVJF_/// GGGGG 0`A8b#_G =TGPb#_ G(="]"G}"Xb#(i_////\*} G/< 3.3J/4 ///.`FJTB*.s"J&3/3KY*C9/ s/s"sK3,3HA*@! 3.s"3J .JTB/s"K S/SKY*C9/ s/s"sKS.SJ/@),)HA*@!BG4Gb //QZk 1@G=G AGtGGb# , H@ @qf@nGGGGG 0`A8b#9_c<=G GG]tG@b#)%`O)% %*,% .%j.%.*HP JjJTJ0DtF_ GGGGGG8b#_ 0`A@/G_&=tGHpb#R"/_ GTGG= Pb#@ G %///G0A H21@BHGGGG8b#G_ 0`AG b#/ )8 D/ -//_   !GG4G`b#@G(="]"}"GXb#_-0" ="]"b#_ӧ<] GR&\OXO=TO2=PO2G`]h]p}xݤ=]}ݥ#k/C#4G^G~ ^(~ $08`O!@޴HPGGGGG9 "GGb#2s_c@@"G(B"c@G(b#G``@@@ H LH@@@#&D`q" ""=@#$DG#&$GtGD1xOFb#_hOfc&G4GDsGG[@ZkGD4Gb#0"_G/G4G "b#A_Ӡ @G/#$//'$G] ](}08@ݤHP`#k//Q #X^~`^h~px޴>^~޵G@GGGGZ GG@//R0@@R0@ @R0@@R0@/@R0@/_G`@P@4Gxb#_$G G /G4Gb# "" J!/_G G"="G ]"}"b#_j =**)/?GGGGbHrb#GC@ G G*J!`$///& 0`AGJ! gAGG4Gb#/_ BG G$ G8] G//G!@"@4Gb#/_DG8%"2 GTG .e.0Bxb# JuJT JSeJFuF>e>8&1 CO_8}BGG1iARZk8GGGGb#3A_GG TG8C GGb# G/_G 8G@"0="P]"H}"Gb#!_H8=p@@@@.@!)@ &@[ //;8].e".xb#2SBV J EJwEJUJFF>>#8]1ICG&TG O/_8}BGG1iAQRZk8GGb#GG GG3A_GGGTG8b#/g_G!8 A0A G B//G@4Gxb#AA*E/_BGGGGG4G#RZkGGb#_8%@A( A GA8HG  P@4Gxb#_G/X!0ݥG@"H]Ghb#GEV_PG8"(="H}b#GG2 A/_G(=8"GH]P}Gb#2_HݡGG4Gb#!_ 0AG8ݡ$.%,!GTGxb#.A IP JqIA%HF1D>%<c8&1BO/_8ݠBGG1@QZk8GGb#GG3 A_ 4GcG8b#&`O/O//S_G *EG4G@b#/_GX]`]h}pxݤ=]}ݥ#/k///#^~^ ~(08޴@HGGGE$B%$D! (!/ //D'GTGxOz[@ZkpG4G b#"_$&4GtO`D[@Zk$D%$TG@""(`Bhb&`TZkp%&GTG( `1b#"_PBGGtGXbbZk$G$&TG(|O1pb#G_GhF`//$$G4G"pOaGG[@ZkG&Gb#TG`DO//>K_=@.&" .GG HR @Js HQ JTF3F@>4GG >pOu1@[@Zkݠ /$&G4GtGlOq1@[/@ZkG$&GTG|O1pb#/_G!Gd$GTGOb#_pOcGGG4GGG[/@ZkgG$&Gpb#TG}#'|O1_G//G]] }(08ݤ@HP#/k#TG^~^~޴ GG ~ G ^G0;"b#`/_/G , %H( C//'@D!F . JCBF. JCB7GE/ EK @CGCzF`, HC?/ .JBUBF/ //// KCUCCuGFG//E/D4Gb#EKGCdBUdBFD/! `D/ @ 0@_(BG]"?"GIPZkG0@GTGPb# _G%,f@0@q.%H t1HSqJtFq>GD@0@GTGPb#_GG4G@b#f@G,DH<7_GTGGb#"eCG/W_ ]//1BGbtG|U@%D .J/@R h"@]sZkGGG4GGGPb#_GxDG]tGhb# /_GG 4GeDxb#////_GG]]}ݤ 0#/k///C#TGR^G~^ ~(GG& >4GOb#_.G0""b#GGPJ> ]@//@GDGG]] }(0#k/P#GtG~^G20[" 9{#GKS@G]@ #k/#~^^~ (0޴8@H>PP.PJGGGGGGG8;/$@/// ( G/GKAAC!!D //.B4GbJroZk G.G"APJRGJ'HG>/ g.gJ/(BG`""TG0boZk/D/(BGTGX""0boZk//D/(BGTG""0boZk//QD/(BGTGp""0bnZk//TD/(BGTG""0bnZk//D/(BGTG""0bnZk//D/,HB4G# 8PbHD#-!I;oZk D# //#-!IA'@! D .B4G#"bJnZk/Dn/-HB4G8PbIoZk D# / #-!IA(@! D //.B4G#"bJnZk/DJ/(BGTG""0bDnZk(B?Gx""TG0b~nZk(B""7GTG0bwnZk(B//+G""TG0bnnZk(B""#GTG0bgnZk(B!""GTG0b/_nZk(B//Gh""TG0bVnZk(B""GTG0bOnZkD /D//D//D-cHHIE=G]G]} (0ݤ8@H=P`#k///Cp#TG>?F^~G^ ~(08޴@HP>X^`~hpx޵GGGGGGGJ @;"`b#/_GTG "`b#DGG""&_ BGGTG(bnZkBG4Gb$OKZkG0@GTGb#M_BGGGTGb$KZkGG4Gb#_GG4Gb#/_GGGTGb#}@ӀB@GG4GbKZk @/g,CgHg<G// G G G G8`G//(, BGG(bTG(H/, :nZkD " .J F B!GGTG(b+nZkG/., BG"(bTG0H"+D //nZkGG""N."TG`b#APJRNJG!N>m.mJ'H8dF/?`///_G9GP""TG`b#/_G//G""TG`b#_)GGP""TG`b#_G""GTG`b#G_G "GTG`b#/w_D4DIGG//GGTG""`b#j_//<GI@9-,GG""`b#TG-H8$D+ Z_G""'GTG`b#S_G//Gp""GTG`b#I_G G"GTG`b#A_ӨC @ B "EGTG(b////mZkGG//G .,!pHA-H0D.r/N.."!sHRQJSFN>iÀB!/M.JUBFP///h-. H"GABhI XdE/G`h!+@rA0 tF%`/.FJXF'/"KXG"P/"PKXDG/@,"HXD-"I XE"B B/ ///.JXdF/`" B/ FF G////@B4GHbKlZk//!/ G!/.#{H 4GXKG?CC ZEC@ElA DG,A0ATGFb#&O_B @GGG GLZk-NI= G?E@GGGGGPb#j@ GGG@"". TG`b#~_G"TG""D`b# Gv_ BGGTG(blZk G/ G栀B4GGb$O JZkG0@GTGb#_B GGGTGbpIZk// GG4Gb#_GG4Gb#)_GGGTGb#@ GݥB4GCGbEIZk @%A,DH<GG]] }(08ݤ@HP=X]`}hpxݥ#/k///`#P;4G ^~(^0~8@H޴PX`>h^p~x޵GGX{0BFGGG^G8b G G ~IZk#Gp@TGPb#&O/+_#GTGGPb#B&O!_@BGG`""GtGHbqZk@BGGh""tGHbqZkG4GTGPb#& O _ ,G?"TGPb#A H <&O_C.PJ> CM. m"!RSJGJX!E 0@AEAE&///" 'EIG?"TGPb#?!4G&O_ .GGr HQ J2F >m.E"!G09ATGPb#StJgJ/ â&O_ӈB0 AGG 9AG/KZkAاD0A.xHWJF>A.PJ>FGGGTG/@Zk*FGGGTG/@ZkTD/X`EG@TGPb#0@/AE #&O_ӈB0@G] @@ZKZku,I,,A,H!5D,<//.GWJ>/K////XGt0Jp.SpJtFp>P/"PKG0"p¥/. e,eHCu@caD` //,B4GbH.kZk//-IXE0A }G oAG-I2/&,pHD!0`@EAA&H 0D&<-.-J! .w&J0`@VJ F> / Kf/`K[fK0`@! `Gf?M-MI -aI0`@!LI E=,HcAc.0BScJc>4G8blHZk*1@ jA"@/// -IG@D //,B4GbHjZk-ICUAmD`-LI*1@A=k!_-GI////XDqH.PJF>D. DJ.JGG ](]0}8@HݤPX`=h]p}xݥ#k/#bFG1"^~G{#G#4G"/_G] #k// #`^~h^p~x޴>^~޵G#(РGGG{# =$]G(ݰ,0v_GGGTGb#/@4Gb#C_// / =GGb#4! ! A_0GGGG =G G$]0 G 4G4}b# Gg_GGTG8b#$O>_$](=C<4G"R"@]H//m.8BGG@bTGmJ/`NjZk D " .J F`.GS`J`>G!GTGb#_A[@,]G MA!GGGG<Gb#R&XR/_8B `AGGTG@b/#jZk// ,8BG"@bTG0H"+D jZk/GTG .xb#PJ>...JG8$F ""/_G//Gh""TGxb#_G""GTGxb#_ӎGh""GTGxb# E_ u(GGG"b#_8yGGTGb#HE AQA &O_8BG8<]QA/{IZk<TG.<=Gb#UIA5t./ _// 0AG=HTGHb#?_8B 0@AGIGGTG@b GiZkG.PJ>GGGTGb#@G GG4Gb#/_ӘBG4GbFZkGG@GGGGb#Y_ ] tGG.b#R";_///%,GpIA%H0D%<GGTG""xb# 4G _Ӏ_E<ݡ*1@A/@ G.,GG""xb#TGG.H8$D //_GG""TGxb#/_G// G""GTGxb#_,= GGGGP"b#!$X(G"_GC /4G8BTG"X=TGE@b'iZk8By!TGGTG@biZk G/),8BTG "@bTG0H "+D //iZk G/ .P J >GGGTGb#"@GGG4Gb#/7_|GTGb#@E/ t.;_ 0AGG= >GGX"G4GGb#_GGTGx.b##_ 0AGHP=TGHb#Y_ӘBGG4Gb FZkGG@GGGGb#_GG.b#tG"/o_ -TGhHOIE= gA G=/,,4G"GE4G."Gb# GH&8D h# XPݰG"_#GG Gb#_ G/ G//GGGTGb#_A G HA@,]G=!G>GGG<b#GR&XR]_ `AGG`]h]p}xݤ=]}ݥ#k#CTG(^~0^8~@GGG#4G=C b# ]$} 4/ n_GGG4Gb#/o_G b"G= ]GG`b#!_G`G4Gb#_ ]G4G"}}4G4GG"$=Rb#_G(]0]8}@P#/k`#4GX^G~`^h~px޴GGGGG~G`mb#g@(#44GGTG ! $(,C "Gpb#04@D=h1"H}LE8<]P /__ //@$] (GGGGGGGGb#_ GTG$Xb#8"_GG="TGtb#}@GGBtG(" tb#@GG"TGtb#/@hcGGTG"sb#/`@GG=4GDGrb#@GG4GHrb#[@GGG4Grb#9@GG4Gqb#/@GGGGGb# 3_GG4Glb#@" b#k@G4Ghb#_$ 4GX]`]h}pxݤ#k/ p#^~^~GGGG{#8/`B@ӰBG4GbDZk? GG@`b#tG<c"#_tàBGTG"bCZkG"4Gb#_GtTG="8b#o_(0@(pŢG/ ///Bb6""YCZk֢/ /V" WI@GTG="4 b#_ 0@ '//|%0BtG="8bX D @<C"RjZkG44G="GGb#_ 0@ |xD<#G"tG="Ab#_G4="TGb#]_/ 0@ #B "TGb=fZk/0@G]]}#k///#4G^@[~^~GGGGHbG/CZk? GG@b#tG<c"#S_R//0BGTG"8bDCZkG"4G b#M_ PB="Xb////BZk: 8Gb#u@8GTG="b#x_(0@(G="4TGb#/W_ /$1@ G4TG`b#="_/// $1@ #`B" TGhb/eZk///$1@G]]}#/k/// p#TG^~^ ~(0GGGG>`G@pb#B B!N" B0BF0B_# B]BGEZkBG]] }(0@#k//G8G4GWGGG9@#~^^~ GGG#(w#@@/Z@K@?G~7,Wb#/_$#GGb# @$@#<Cc41"]_#GGGb# @Cc#"_G]]} 0#k/#GG("~^G^G#GG(PGp{#0@B(P8,B_$"( @0B$(G]] #k#TG4G~^G{#G_qDGpDQs4HRTJSFWBQ/`G] #k//Q0 H_FSFQ//#4G~^ [({^GGBZkB.GGBJBJ ///KFwJ@.VJF>/1"K_=@A@@@@B 3`///"/"B"" @@Db#""KY"KB %D, ."?" JF/%"./2JXK%F?/ B/b.[KSpJEGb>/@.VJ@>=@/ //// 1@KXKB EF@=@??G]] #/k///#@^[~TG>"HG{\Zk//G@]HGP#k/=&G@]H"P#R H0D @/k///#@^[~TG>"HG{\Zk//G@]HGP#k/=&G@]?&H"P#1"R H0D1@k///#@^ [~TG>"HG({r\Zk//G@]HGP#k/=&G@]H"P#R H0D0@k/#@^0[~TG>"HG8{z\Zk//G@]H P#k/".%=.G"= @]HP#JQ !JFC/k/// [TGRrk//#TG^~^ ~(08޴@GHP>X^`~hpGPРGGG @@xb#^FC8F0@?p&O+_ ,BGG4GbGGA H <dlZk0@BG4G@b.PJ>=G AZk@GGGG`TG//.wPJJVJ`F0 B>0 @ %@"/xGtG Db#"_dGPG?&TGxb#%CM1"$%L!&L k!O/߻_.BG4GbGGPJ>GdGlZk @?& GPEM!&/ @GGTG!Dxb# hAR RBF/@c&O_HBGGGGG ACZkB @d4GGb/lZk A @AE? G@P.GRPJP>$G]] }(08ݤ@HP=X]`}hp#/k///P0 2B/'`#~^^~ (GG0G1QB BG_"G(b1"/ 4Gc/kZk#C @ 2B#/G]]} (0#k///cG4G (bG2tBcG]]} (0#+k///#G4G~^G{#G_GG"! /G] #k//#4G^G~^ ~(0GGGGb#/_,$GTG8b# d#U@,/`,\#G=GTG Xb#/O_GG$GCTGb#0d@G,TG8l#8b#U@4G]] }(0@#k//#H^~P^X~`hGGG{#@>D^_GGG4GXb#/_@G4GXb#F/_GG4GXb# _ B TG="(bZZk"=,%."} "]"*"#HP J0D$"}.%.rJT JtFD*.-/JX KF(IJDGpb#x_GH]GP]X}`hp#k///#4G~^G^~ GGG(b#N_G 4G(b#I_G4G(b#/C_GGG(b#]]4G} 0#/7///#4G^~ ^(~08@GG>G[b ~G@ZkGG"B4GbZkHB@4GX"@PbJZkHBG`"4GPbJZkHBG" 4GPb/{JZk=G/!$\/ .B4GbJFGZk@0@G4G8b#0@_.(BGG0bTGPJ> G/bZkGhb#/_(BGx""TG0bbZk(BGTG""0bbZk(B//`GGTG0bbZk(BGTG0b$aZkBG4GbrZkBGG4Gb/rZkBG` 4GbG/qZk8GG`b#TGh"'_ӸB=GTGb[Zk8GGGTGb#0"/_hBG>4Gpb/nZk8G Gb#TG"_GG4Gb#y_ G]G ](}08@P#/k#4G^~^ GG> G{#"_=GTG`G]] 0#k/G4G0{#0#4G~^^~ (GGGGb#"_// / ///G4Gb# '_GG]Gb#]} (4G0#/#< F^~G4G^ GGP#Bb# ɸ_ B =G4G#3Zk G]] 0#k///#4G~^0[^~P" (GGG8b/{dZk$ /0B0`@$ "TG8b /odZkyb@G]]} (0#k/#4G^G~^ ~(GGG >xb#}_Gb#@ =G# a/`[@ZkGG]] }(0#/k///#4G~^^~ GGG``[@ZkGGG b#]]4G} 0#////k///#^~^ ~(08GGGG$ /(BGTG0b I`Zk/0@y@/?G//G]] }(08@#k///d@b# "Q@_#G~^^GG `"//xs"`4F.Ӣ6F0@B*7F0@B&8F0@B"3!F0@B 0@BAB_yBB `/s"5F/0@ByBB/G "TGb#m_G]]G #k//"rRBGb#]] # ! QAB5/ /k///k/Gk/k/C/k///#C^~^ ~(08GGGG4G{#_BGG4Gb/y}ZkGGGGtGbb#/@}G4Gcc[/@Zk dG/`/G4G0`@4G%b#m_ BDG $/Zk @.VJ>G]G] }(08@#k///#^~ ^(~0GGC({#>TGn_GG="TGx_b#w@G4Gb#0,0H/ v_G 4Gb#q_!4G}B#=b#s =s`F`.J/ /// |Zk#0 C# ݢòG 4Gb#O_G]G ](}0@#k///#4G^~^ ~(0GGGG>b#/2_Ӵ ""Gb#_GG=b#_GC4Gb# /_Ӵb# _Gb#/s_ӴG]] }(0@#k//Gk/H{# ///GGG{# _Gk//Gk/ k//Gk/k// k/k//{#//0.GG0JI ///3 8 DX D/`<@0.0J"5,B,B5-B2D-B;D.B5/B2D4G;D1DT DGP.PJ?k/p/pK"5,B,B5-BAF-B.B;D4G2D1DT DU`CG@P.PJ/?k//0.0J5,B,B5-BAF-B.B;D4G2D1DT DGP."PJ?k/#G~^G0.0J  #/k///5,B,B5-B-BtF.B ["uFTGvFqF;"({/K`ZkCG] #k/#4G~^ [^~ (GGG(b|Zky@/ G)/$1@ BTG(bd@$1@0."Q0J0"'J/^Zk@d@ BTG.! (b$1@d@PJc JH"/^ZkC B@"TG#,(bA#H'H^Zk@G]]} (0#/k///#GG~^G8_Ӡ5@Gs#/_ӠCG] #/k///#GG~^G _Ӡ5@Gs#/_Ӡ@G] #/k///#4G~^ [^~ (0޴8@GGGG(b{Zk$`@%1@, // $0B8b&@0@f@"/@$//qzZk&/GV7KY&K&?d_Ӡ `BJG4Gd/`[//@Zk.qHPJF>D _G/G]]} (0ݤ8@P#k/ BG4G(b @{ZkĠ@0@@tG///@B$GTGHb]Zk#G^~^~ ޴(0GGG4G{#W_ӐBGG4Gb{Zk? tG@g///@BGTG"Hb(¤wzZk} D#`0b&C%"/ .PJJPBPBJ///4G$E/e.`B4G"hbStJgJ/]Zk%, %H? GtG //%"pb#@_ӡU @u @Gpb#0D" /7_xD0`@  a@//B4Gb"GzZk=@/` / İG4G4Gb#"m_GG]]} ݤ(0@#/k#4G^G~^ ~(GGG0b#_GG4G"b#/G_ӨPB¦xpBC òB(¦0H C$C( ,ò0BB8¦@h4C<8@CDHòP¦pBBLXXPCT\C`dòh`Bx¦BlCtBpxC|ò¦BCCòxG]] }(0#k///0#4G~^G^~ GGG8b#m_G4G8b#/g_G]]} 0#k///#4G^G~^ &" ~(GG >b#/ _B ?&G &G(1"0¦Pb4G/ozZk=HB8"pb#  U@"G C$ղ5u5_ӴGG]] }(0#/k///(TG8;"0{>k///TG ;"{>k///#TG ;"^~[^ GGCb~ZkC TG(G=b#8"/_P G4GXb]] 0#i k/#TGH^([~P^X~`hpGG@GG>"0b"TZk=&GGpb#"TGR H0D"! D////_@Gb#g_8B $GG4G@b[Zk8B $$G4G@b/ayZkG@4Gb#n_BGGGTGbxZkBG ""TGb[Zk4G $$Gb#_BG""TGbe~Zk $$GGTGb#"_GG4G`b#_ &B?&Bhb#b1" @ &Bhb#0 @BGGTGb4GxZkBGTG""b[ZkBG ""TGb[Zk $Gb#`P_BGTG""b d$)~ZkGGTGb#X"/_GG4G`b# d _ &Bhb#0 @GG4G4 b#D;_G//@w# ^"8c %@"Fc&$?'4""BGc 9#F///CU#"@" WC CzGc? C/0C" C$&G1"6BF//BBq""@1" vB YBDc CB`/0@B1" CBHB &4GPbG/MZk// &0@Ghb#BA @ HB &4GPbG/MZk// &0@Ghb#B- @Ӡ @GH]GP]X}`hp#k/#0X@F8@F8^~@^H~PX`޴hGGGGPGuFF0~b#%_0} $G4GՁ $G[/@ZkBG"G G%b#R"/W_//GG4Gb# $_BG4Gb/ xZkG@4Gb#_ӀBGGGTGb e$lwZk`BGTGp""hb/ZZk0}G4G[@ZkBG"GG%b#HR"#_ӟ//Bb &GՐGtGB$bb /KZk e&C"Gs[4GG@ZkG4Gb#_ӸBDG e&" %sGPb#R"_H3r/ e&CG"s[4GG $@ZkG4Gb#u_CdG"4GG[/@ZkG4Gb#f_ՄB &"GGPb#DR"/%tՔ_H/@B &4GbLZkG e //b e&G "s4GG0@c [@ZkG 4Gb#/7_"/B &$4Gb4e G LZkb e&G("s4GG0@c [@ZkG(4Gb#/_Ӱ @/G8]G@]H}PX`ݤhp#/k///C#4G^H[~^ ~(0G ^DGGPb]Zk GTG#b#("_ =4GGb#!* _XBGG4G`b wZk @xBGTG@b.PJ>~fZkG Gb##tG_hBG?"TGpb/lZk GG4Gb#/;_G4Gb#6_G]] }(0@#k/# &~^4"T"^~ (0޴8@GGGՔG"8{#_ $@BGGtGHb U@CD #JZk/0@&Gb#B@  @B$G#GtGHbG4 JZk 0@&Gb#Bv@Ӡ @  $$""D"8b#]_ӴG4Gb#////۰_GG]Gb#]4G} (0ݤ8@P#/˰///#4G~^[^~ GG &Gb5]Zk(B &0b4G/eZkG &b#4G_GGb#G]]4G} 0#//(0#GtG~^[^~ GGG &b^JZk/B &4GbnKZk(GG]]} 0#k/#GGTG~^ 1&[1^GGb}ZkG4G "b#///_G]]G #/k///# s&tG^~^ ~(0GGGՓG>[b#G_GGGtGb#B_BG4GGGbFwZkG8DGb#TG"_G]]G }(0@#/k///#G &G~^tG[G(1{IZkG]G #/k///# s&TG^~ ^(~08GGsG >h;b#^G/Dz_=GGTGh"b#///_GG0@4G@b#_ ==G4GBbGGG`Zk G] ](}08G@#k/Gk//#4G^[C &~G{JZk=$G]G #k///1 B/k///# 0&4G^~G^~ (0޴8@HGGGb#"_ $ #$GL9!4Gb#`"D/ _ $ #$G\9!4Gb#"D_G $ &G `9GG bRb#G޲@ #$Ձ!3 // & &$ctG`9t0@B[@PG1SBG@ZkG #&GTG1@b#/_ #$GG4GatG[@Zk C&G $GRPb#@GGGPb#@Ӭ砧 @/G &`94Ghb#-_G $ &G`9L9TGtG\9峸Hb#z@G &4GHb#sz@B &GG$#tGbHZkG &GGtGHb#z@ /G c&?""4GsGHb#z@B c&G"G4GsGbvZkG8D4Gb#"//s_&@G &4GIb#y@0B &4G8bIZkB &GTGtGb/HZkB #&GTG1b/zZkG 4Gb#"K_G]]G} (0ݤ8@HP#k// 0&#TG1^~G^ GG( H{#?&"sy@ "$$4G &p[@Zk]G]@@] 0#k/#^~^ ~(08GGGGp.pJSrB  3BG4Gb'tZk D&GCtGղRb#G#_ $G=4G`GGG[@ZkCGGb#@ D&GGb#R@Ӭc $G0`@dG]] }(08@#/k/// &# &tG\9֢^~G^ ~(08޴@HGGG>GGՠ &GTGIb# ~/y@G &4GIb#{y@ӀB &GTGtGbGZkGG4Gb#_@@ %$ $d9`9!pBPBF/'q1BQ!B1#F  GrRBRABRCF@G4GPb#x"/w_ e$B $`9cGb4Gg@HZkC@G b#GGtG\9`B0@\9對_G GtG b#`B_ӐBG4GGGbtZkG8DGPb#TG"I_@BGGTGHbyZkG 4GPb#P";_G]]G }(08ݤ@HP#k/// &#GL9td9"^~&^ ~D"(0F8޴@GGGGG`//B" @" BV"Gc_v"`/0B"" 'GG0"tGb#QCn_ &GTGtGp[@ZkB &GGtGb!GZk $G4Gb#`@P@ _ $$`9G4Gb#._E@4% 4e D&L92`9RGq1B &TGb#Q2BqG/o_GGG4G@b#_ $$@@ d&&L9! $G4G@b#&d9 0 @&d9L93/*_@@ $$& $d9/`9!/&q1BQ!B10F Ơ/ FrRBRABRPF@ƠG4Gb#"/{_Ơ $`9f@D@d$eG]] }(0G8ݤ@P#/k///Gk//Gk//#C4G ^~ s&G(^0~8@H޴PX`GGGՓxb#>^_=@@4/W/4G///@BN GGGtGHb/wFZkGGx"TGb#u_GG0@4GPb#[_ӰBG@G4GGGbGE]Zk,PbG"4GGG@H<[@ZkG4Gb#_PbGG"4GGG[/@ZkG4Gb#_ BGGG(b4GqZkGGGb#f_//CGǰG ](]0}8@GHݤPX`p#k/# &4G ^~[(^0~8@H޴PX`>h^pGGGGGԠbG^qZk#,]G#HA%@ ! `BGGtGhbEZkGG"TGb#/_G G0@4Gpb#٫_ Gh ///BG4GGGGb/\ZkxG DGGb#tG"Y_ IApG" ,4GGGC@ H <[/@ZkG4Gb#j_C"G4G[GG@ZkG4Gb#]_BGGGGtGbYUZkBG4Gb#///FZk%GGTG"b# D䚮_G GG4Gb#_G0 A4Gpb#z_ GB $G4GbFZkP9GGG4Gb#//_/D}G ](]0}8@GHݤPX`=h]p#k// &# &4GP90^~[8^@~HPX޴`GGGՔb>C ^/gӢF/c qZkB #&GG(tGP91b9EZkGG"TGb#7_GG0@4Gb#_BG@G4GGGbG\Zk%,(BGtG0bA%H%<(]TZkG G4G0b# c$B_ ]P90èG4G"GG c$C[@ZkG4Gb#_CG4G"[GG@ZkG4Gb#/_BGG4GbFZk ]P9İ///= G0]8]@}HGPXݤ`p#k/# &tG^~ ^(~08GGGGՔ[>G ~bGDZkGG"TG(b#_GG"TG(b#_ =G4Gb#_(B#C4GGG0b[Zk}GdG] ](}08@#k//Gk//Gk//4Gk//Gk//#4G~^x[{^GG &EZk  B$X9GG]] #k/# &tG^~ ^(~08@G >G 3&GGմ@[GX91HbG/ODZkBG4GbbEZkGGb#B@GGtGb# B!_GGG8Bb#tG_PB G4GGGXbnqZkXG8DGb#TG"ݻ_ӠBG4Gb/7EZk &@BGGT90tGHbX9G /DZkG=b#B@@BGGGtGHbDZk $GT9G] ](}08@P#k// &#G@[^~^ GG{#@ B=GTG(b/gwZkG 4G@b#h">_G]]G 0#/k///Gk//# &tG ^~(^0~8@H޴PGGGGGմ[b> 3GCZkbG4G"GG[@ZkG4Gb#/S_GGG"b#TG/_D%/BGGGtGb/CZkbG"4GGG[@ZkG4Gb#2_GGG"b#TG_D=GG"TGb#v_GG4Gb#/[_ݠBG4GbGG$EZZkG ](]G0}8@HݤP`#k//P0BGk///Gk//#4G^G~ ^(GG>C^b#_}G4G"G}[/@ZkG8DG GPb#tG"ݺ_G] ](0#k///#G^~4G"^ GGGGG[@ZkG4Gb#/_G]] 0#k/#4G^@[C &~GH{ DZk=0G]G #k/// #4G`>@ ^~WWB(^0~ !$G@"8@H޴PGGGGѠGb#~ V! N_G 4G8b# 1@P@_BG=GoZk=F&@/>/`B4Gb &CZk@GGtG #b#"V_`=GGtG Bb# 1&1y_ `=tGG Bb#0@ 1&D1n_`}8B4GG@bG s&s/oZk@DGG#GGb#G"+_G ](]0}8@HݤP`#k/#4G^~^ ~(08޴@GHPG ѠGGG`b#41@ PB?_@BG=GnZkG G// &0@( Bb#_! @GG4Gb#e_G]] }(08ݤ@HP`#/k///#4G^~ ^(~08@޴HGGGG G@b# 1@:P@_ BG=GGtGfnZk0Ģ &0B8b51BUBLB=AZkH GtG=Cb#p"/_G//@b d&G"s4GG0`@ [@ZkG4Gpb#/_Ӱ e@/G] ](}08@ݤHP#k/ Т#G^~ ^(~RWB08R@޴HGѠGGGG{# ^Gm //_à4GGpb#@"/_ @@GZHB &4GPbBZkB &GGtGbAZkGG b#CtG"?_G & "TGXb#/_G & "TGXb#{_=///=BG4Gb#W_XB e&DC4GGs`bAXZkGtGGb#D"/C//_B &=GtGbGAZkG] ](}08@ݤHP#/k///#4G^G~^ ~(0GGG &b#Ƿ_ #&G]"xb#1""_`BGTGp""hbrZk #$GGTGPb#H"/Ǹ_ c$ՃG]] }(0@#k#4G^G~^ ~(08@HGGGb#_ "=4GG( `0B1///B " J9@B /0B"B G( ///GG#1`@b#8/8K4GGGC/_ G]] }(08@H`#k///#4G^G~^ ~(08GGCG b#Ʀ_b /// //G4Gb#_G//0@c @?G]] }(08@#k/C #4GRTG> ;^0[~ ^1"(GG ~8boNZkG 4G4GtGb#-@ ]G] ](0#/k/// #^~{#G>C # //G] #k//#^~^ ~(0GGGG,HH /DqH @D."RDJ QFD>//="b#@ GsH?D/D.RDJ SFD>.J/XK?G]G] }(0@#k//p# (^~0^8~@HP޴X`h>p^x~P.PJDFGGGG @/ #,#H/// GtG"c/0BpK8bxF#.c #J+B/BQFG c ="GgZkG}0BGTG ="tG8bgZkGt///GGG=! B///.i.!(JSiJt JtFi>.JXxAG1/@BG4GHbMZk**( PpAF"/pBG4GxbMZk*( PpAF/`BG4GhbMZk h-)!hI 0@@//GC"Q.GRQJQ>c.tJoFVuB/7PB="Xb,jZkG /w7867 ݠ#/#Kc }f.fJugB@ ݰ }dGG(]0]8}@HPݤX`h=p]x}#/k#4G^G~GG{#_GG///"! /=G] #/k///#C4G^~^ ~(GGqGPb#G/3@G4G"Pb#3@G"4GPb#}3@G4GPb# "/w3@G4G"Pb#r3@G"4GPb#m3@G4GPb#"/g3@G4G"Pb#b3@G "4GPb#]3@G4GPb#$"/W3@GG4Gb#_}G]] }(0#k/q#TG~^^~ (0GGG0;"[bG/LZkGGpb#G1@%ÐBGTG ""bLZk//GGD"pb#"@/BGTGP""bLZkGG 4G4GtGb#+@(4G///GG]]} (0@#k//#TG~^^~ (@0޴8`[@H>P^X~`hGGGGGG"Ghb PZk!$ BTGH""(btGG GFLZk//c$} @/{ ///B4GbBjZk$ B G""(bTG(@aG+LZk///$!1 @ @< Gp@A4G b#_$ GqDpDv7I(@!.J FUJFWB0BCG8TG8biLZkBGTGb=iZk0BG@""8bTG@ @ , HD/SLZkDGG4Gb# HA_D0@A @_/ BTG""(b KZk/4G/d BTGp""(b KZk`BGhbTGp"}OZkBG4Gb砋iZkBGG4GbiZkGA4G b#P@_B GGGTGbhZk0BGTG""8b/LZk0BGGTG8bLZk BGTG""(bKZk GGGGb#G D"5.@M BGTG""(bKZk// G%"GGb#G D"".@:/ BGTGP""(brKZk// G%"GGb#G D".@&/ BGTG""(b^KZk// G%"GGb#G D"-@/ BGTG`""(bJKZkG %"GGb#G D"/-@GG4Gb#Z_4G `BGGhbtGH"/NZkGG]]} (0ݤ8@H=P]X}`hp#k//0 IFF //`#4G^H[~ ^(~08@޴HPX>`^h~px޵GGGGGPbGhZkGGG4Gb#(G//_W$,HBGGhb#tG$HR" (.@K (/ @XBG4G`b/OZk G// @cHGGTG(b#"4`:_2/BG4GbPZkHBG GG (hb#tGR".@HBG G (hb#tGR"/.@ /(BG4G0b7PZk// 4G](BG4G0b-PZkG"4Ghb#_!s_XB GG4G`buOZk G @cHGGTG(b#"`_/8D$,$H%D D]C!=C/BG4Gb?PZkHBm GG4GPb/5hZk,, G,H%D?@0 B JBG@ 9B0@AGTGb#W_ GBGGG/jZk'AGBG.xJ-@"G WJF>yjZk.GGb#UJ>(Ȣ4G/_GG4Gb#/_Gb#G@GGGb#///@GGH#TG@b#/_///GGb#@ӚGGb#@GGGb#@G//GG4Gb# GG_(BG4G0b/OZk#////G 0Ab#@'@G4Gb#A@_E A_G4Gb#_GG4Gb#/_;ơG G,//@cBTGh"by`A@'uMZk ëY`AHBTG`bx" A(iMZkGTGb@$_FG4G0Ab# IA A _ AG4Gb#_GG4Gb#/_G] ](}08@ݤHPX=`]h}pxݥ#/k///#0[tG^~G ^(~XR"08@޴HGGGG1P b#/O-@4G$ /}B}GGTGb/KZkBGGGTGb/KZkCGCGDD@CCFG4GF!F`"b#rF4D/ʱ_G ,GG b#4G&H=@.RFJ@>/_=.Gq&HPJF>ݰG4Gb#_,0BGGGP b#tGH8R"/ $,@G G4Gb#+_GG4Gb#&_4G#,0BGtGGP b#HR" $,@GCG4Gb#_GG4Gb#_G GG4Gb#_GG4Gb#_GG] ](}08@ݤHP#k///K @#TG~^@[y@^~ (GGGGGGHb KZk B//G0"TG(bnLZk/ BTG "0"(bfLZk8pB4Gxb/{cZkGGGGtGb#/_GGGGTGb#/C_GG]G@b#]4G} (0#O///k///G [GG1(}/IeZkGk/#4G ^G~(^0~8GGG>Gb#/G_G?$&G4G! "b# =_G4G4G#Pb#/_=#TGGHb#0BF1"#Q?BC_4G#GPb#0BPBCǰ_]G ]G(]0}8@#k/#4G~^G^~ (0GGGGGb#+_GG4GPb#_//@#G B(bTGY @0" KZkGGxb#_CGG4G0b#_6@#G B(bTGY @" /KZkGG4Gb#(%/ ///_%G%"b#f_GGb# _GH#GTGb#~_//GGb#S_ GGb#_/GGTGb#"5_G]]} (0@#/k#4G^G~GG{#_=G] #/k///#4G~^^~ (0GGGGb#檟_/%///G4Gb#_G4G "b#.@G4Gb#/_G4Gb#//_GG4Gb#_/4GGb#}_G]]} (0@#k///Q#TG ^~(^0~8@H޴P[X`GGG;"bG9GZkG/#TGb#X D c#_GG4G0b#/7_G4Gpb#_ GGDxb#tG"_4G /// GGTGxb#"_4G///BGTGp""bGZk//#G4G0b#u @ @F #/_cG4GĠGb## c=}ƞ_@BGGG4G//eZkGhb#k_G4Ghb#/c_//GB4Gb2.JF.G/dZkBG4GbdZk=G4Gb# @P@_.0BGG8bTGPJ>G/GZk0BG""TG8b GZk0BGGTG8bGZk4Gd/GG4Ghb##_4Gd/G/0G QG @rG`G/G/aİ4Gh/// GGTGxb#`"_4G\///BGTG""b^FZkQ 4GGxb#A"/˯_GG4Gb#._@BGGG4G/dZkàGhb#Ү_GG4G0b#/K_àG4Ghb#Ů_G4G '"cGGb# C"(@4G//Ƞ//fG`G EG@G/G/4GGG ](]0}8@HݤPX`p#k///4GGC#~^X[^~ (0GGGG`b/cZk`@// $GG B"b#tG /)@///'XB4G`bcZk1@HBTGPb#B EZk///GG]]} (0@#k///Gk//G//G//#^~ ^(~08@޴HPX>`G8GGD@r.rJ`^/"Gp"4GGHb#/g_.GGPJ>==a.aJ /GTG="b#G."UJJFF //C_.qH PJF>].r.UJrJvEJ F>"///= G9#=9#,@HHEEE E~ E Ec V`E/G@///+ # 7(BGTG0bobZkq%,pH%""sIA%H0D%<E.RQJSFE>.UJ>a G4Gb#N_G((BGTG0bObZkQ G4GPb#V_G(BTG0bGGG=bZkGG4Gмb#_:/# (BGTG0b-bZk///# (BGTG0b!bZk#//G4GPb#&_G(BTG0bGGG bZkGG4Gмb#_ /%,pI%"A%H0D%<E.RQJE>e.eJ/!///.)! EJ.)!J)/)!)K i/)!iK ),)!)H  .)! JI.)!IJ_.GJCBW/WKe/B[eKe?4GbUbZkBGG4GbObZkGA4GHb#P@[_G G4Gb#_ӸBGG""GGGb/JZkBGX""TGboZkGGG4Gмb#_GG4Gмb#z_GG4Gмb#u_G]G ](}08@ݤHPX=`p#k/// 4G({/0k#G^G~^ ~(0GGPb#_G&G4GPb#X"_=@BGGHb4GaZkG0@4GPb#_`BGGTGhbPaZkGGغb#d C$4GDB *_GGD@# ^"@c "@"Fc"/0@c #?G $G]] }(0@#k///C#4GQ^G~^ GG ^Hb#/_G 4GHb#_]G]] 0#k/Q#TG~^^~ (0޴80[@GGG4GH;"8bGCZkB#4GbX D cOFZk4GðG4Gb#"_Ӓ/0BGTG@""8bCZk#B4GbX D c4G3FZk ~/G4Gb#"_v/0BGTG""8bjCZk5#`B4GhbX D' #-aZkGP@GTGжb#4G/W_GTGcBb#`ZkG4Gb#Z_G4Gb#_ӰGGTG$b#"_AðG4Gb#x"_:/"0BGTG8bG`1"/+CZk.GGpb#4G=@4G_$G C=@B4G/@///cG4G0@b#gB@_% C @_ ðG4Gb#0"v_/GG]]G} (0ݤ8@P#k///#tG^~G^ ~(08GGGGGG~G@b# :@ @cBGBbtGy`@R""m`FZkk/ G0B"BbtG@ B8" D@cy`@Y`nFZkW/\#GGTG8b# U_Ӡ @cPB"BGbtGy`@p"D`YFZkBGGGTG b#9@ @cBGBbtGy`@PR""1`FFZk//GGb#8@G(G4G`b#b_GGG4GȽb#/ _]CGdG`/G>G բGG/wG/rG]G] }(08@#/k///P#^~ ^(~08@޴HPGGGGG^>"{#@GG4G`b#_=E@Š7///0B&GtG8b^ZkGGFGb#':@G="b#@G="b#@0BGG8b/^Zk///Ơ@c BGtGpBxby`@R"` "//EZk4G/GG4Gb#י_GGG4GHb#_GegG] ](}08@ݤHP`#k/#TG^([~>^8;" GG0{sWZkG= @GG]] 0#k//#^~ ^(~0GGC{#>>"_//G/=GTG(B0bBa G.BZk(BG4G0b/m_Zk]= @GG] ](}0@#k/#^~^ ~(GGG{#_/G /#B4Gb@G_ZkG]] }(0#/k///#4G ^~(^0~8@H޴P@[X`>h^pGGGGGGG?! ^Hb/_ZkG@4GPb#*_ӐB GGHtG""bbGZk BG4G(b/!FAZk% G4G B(b @@/;AZk%@#GtGBb @y B(A" G//DZkPBG4GXb@Zk BG4G(b!AZkGTG@#Bby @" DZk@"%4G@B%s!Hb"^Zk@BGG4GHb/^Zk@BAG4GHb^Zk@BAG4GHb^ZkGA4GPb#0@Ř_ӐBGG="GGGGbFZkBG4GbzZkGGG4Gطb#/_GG4Gطb#_// s/ BG4G(b@ZkBG0""TGb/AZkBG""TGbcZkGG GTGb#"/O_G//B?"G("tGb/e\ZkB4G("bNCZk'C@ GD 8@E/@L֤H&CDxD$BG?"GtGbL\Zk@BG4GHbK^Zk@B?"(",GtG bEH< @/9\Zk`BG("TGtGhb/+ZZk ݠBG4Gb/DZk@cBp"GbGtGy`@`// DZkGG ](]0}8@HݤPX`=h]p#/k///#4G(^[~0^8~@GGC >^b~]ZkB4Gb]Zk=G4Gb# @0@_ BG =G]}G(b9FZk}G4G[/@ZkGG4Ghb# -_ G(]0]8}@P#k/#4G^~^ ~(08GGGGb#$  /ϗ_GtG0B$8b[ZkG2B4Gb]Zk= 1@ @.JXD$///$GTG`b#1B͗_$0BGtG8b@0 B"[Zk$4G Bb!@G$]Zk 1@@ , HXDG]] }(08@#k/0GG"#~^ [^GG(b/gZk0G]]C #k//0k/`#4G^~ ^(~08@޴H[PX>`^h~px޵GGG&G\b8]ZkGp@4G b#/C_%$Gpb# \!=_`"`BGG]hbG1"sEZkBG4Gb]Zk'G@"4G b# "/#_ @.R@J@>gG" `"4G b#_@.R@J@>bGGGGGB0b# k!;_5 G/@#` GtGB)b"Y @ -MBZkPB 4GXbYZkG-GTGb#/s3@.`"]"b#GPJ>G'_DGGG -TGhb#_BGB"TGGtG/'_ZkB8""4Gb@ZkG GGTGHb#E_GGGGtGؿb#_/B GTGbAZkG " GtGؿb#_/G GtG-ؿb#_BG"" tGb/W@Zk@`tGBGb"yA,-cBZk)//@`p b"BGEGb"A/-//OBZkG GGtG0b#/_ݡGGGb#GTG(2_GG4Gb#E_B4G8""tGbO!@Zk"eH-N",H.(.3oJGhJshJ`BhbIA.HTGETF3F!HJuJVF5FH>(>p""NaZk//IGG b#S_G/BG4Gb\ZkAGb#G. PJ>-0 BGGV_ G b#G:_G/BG4GbBZk#//CGGRFGb#MI.COFxE , H/Gm/3_ G /@`GtGBbp"yAAZk%pb#\ϡf_`"G@b#GP1"_\pb#/[_`"GG@b#01"_\pb#Q_`"G@b#G1"_?GG4Gb#/ _G] ](}08@ݤHPX=`]h}pxݥ#/k#4G^G~GG{#_=$G] #k/C#4G$Q^G~^ GG ^Hb#/Ε_G 4GHb#ɕ_]$G]] 0#k/$q#TG^~^ ~(GGGp;0[8b  1"/}Zk#GG4G]b#tG= @ /_@4G/pGTG =xb#"_4G///GG]] }(0#/k///$P`#4G ^~[(^0~8@H޴PX`>h^p~x޵GGG!0"b G G>eZkG GGb#/'_ G//` G/0BG4G8bZZk0B GG4G8bZZkGA4Gb#P@_B GG8""GGb"Gb9CZkBHb ""bYZkG4G Gb#GG/_0B4G8b GZZkGG4G0b#w.@BG4Gb#4G0,0HpA%@%@/@2F!F/ ///ǔ_ ._"../"2@JBJ G@Jr@JTGb3FtJF5FF >>G=5}Zk G0A4Gb#_PB G=GTGXb/ZZkBGGTGb G/Zk.!PJ>=V`qACQ.QJ/P ///0BG4G8btZZkG0@4Gb#_PBGGTGXbYZk0BGG4G8bcZZk ///GGTG="b#.@GGGG&GtGb#.@GGG4G8b#_GG4G`b#-@ GPDGTGоb#"/_GG4G8b#_gA,HG GG=(b#tG"Υ_GG4G8b#q_@ GTGBbx"/ZkG /0B4G8b" ZZk@0@0BG4G8bZZkG@4Gb#0@/_PB GGGTGXb/eYZkGG4G8b#B_$///BGTG""bz|ZkB/"GTGb/s|Zk//pBG""TGxbgZk G GGTGpb#H"/_GG4G8b# G_G"4Gb#@¥Γ_ӀBPcGGP?"GtGb/WZk//GG4Gb#G2_ӀBGGTGTGb~Zk///#@ G////.D .P JJPBF /m.PB4GXbSmJgJ{Zk/!A/ .P J >0BG4G8buYZk G@4G(b#"_ G G(b#TG"_@ GGоb#TG`"YA////˥_GGb#_GGG4G@b#/ _GG4Gb# _= ,/GGGTG0b#_=(// 0/0 B0/8GGGGtG8b#/-8e_G  G4G88b#n_G o"G""GPB"Gxb#1_0BGOG4GGG8b/kZZk TGGpb#0"D /٤_BG4Gb4GZk@BGh"bTGy@~Zk BY@GbTG"~ZkGGGTGb#_ӰB 4GbGZk GTG /pb#"w_GG4Gb# GG G_/BGGX""tGb {ZkBGTGTGbr{Zk G GGTG(b#"Y_pBGTG "tGxbTZkGBGTG""tGbzZkBGTGTGbR{Zk GGGTG(b#"9_pBGTG"tGxb~TZkBGG""tGbzZk/ 0 A/BG4G""tGbzZkB3GTGTGb&{Zk G GGTG(b#p" _G4Gb# "/_, GGG(b#TGH8"/_0BG4G8bLXZkG0@4Gb#Y_PB GGGTGXbWZkF/BGG""tGbzZkB3GTGTGbzZk G GGTG(b#"ѣ_G4Gb# "/_, GGG(b#TGH"/_GG4G b#@ GCGGtG(b#"_ // GGtG]оb#P"/o_ӀBG?"GtGb/UZkBGHG8b#4G/;_PcG4GBb E ///fZk G 4Gpb# "{_G ](]0}8@HݤPX`=h]p}xݥ#/k///Gk#4G^G~^ ~(GG"Pb#_=b#G"<@Ӱb#4G"@CG]] }(0#k///C#4GQ^G~^ GG ^b#/J_G 4GHb#ё_]G]] 0#k/Q#4GTG^~^ ~(08޴@ [HPGҠGGGGP;"(bGyZkG'$E"4Gb#tG01 @= @ G/_@/G4Gb#"GŸ_(GGTGb#"_ӰGGظb#TGx"ߢ_ BGTG`""(b^yZk//d0B4G8b`Dy`d GWZkG8DGظb#TGH"_0BG4G8bWZkG8DGظb#TG"/_,HDD //4G /GGTGظb#"_Gd,GdHL`///(,$.(H$JA%@Q%Ba`Bq!.J @TB4.@ JD3(/(KY%Cd/dKyF@`@f9.J CPB0$.@ $J .JA%@.JTBC!. @@J VB6d/dK /GGTGظb#"M_G]] }(08ݤ@HP`#k// [0#tG1G~^([G{#A @@ B^@! #~//GGGG4GG/k/// G//]G }8"aUZk /GG/k///4GGk/`#4G ^~(^0~8@H޴PGX`>h^p~x޵GРGGP@GGb#"~E_GG4Gb#?_)GGP@4Gb#/ //3_@BC= VZk G G G/ ///ɢ 0@ABGGGGD!d0b#~_ A)+@ aAL G/_GGGGGp^x~޵GGGpb# C1kk_ GTG0b#$wk_ӽ//P@G G  GGTGPb# @G_ GGGGtGHb#" _.xb#_W.TGBb(b$D/O @ .x"5{Zk`B 4Ghb/KRZkGG]"b#G_G G G4GЮb#G GbG_G G////G GTG b#_#G G4Gb#,@w_0@ Ak! @/G3OAGGGPb#k_GG4GXb#]_GG4GXb#/W_}0`@} Ǡ0A A AG$TG0b#j_} GGC`//͡G4GXb#A/7_ 0@AA EAG 4GXb#._""TGݠ Bb@ƠP"/zZk B 8`E""`bTG("zZk //B=tGB"b zZkG(]0]8}@HPݤX`h=p]x}ݥ#k//#~^^~ (0GGGGG///0BG0@4G8b 1wZk H" D_F@/d4G 0B8bF0JEcBwZk$ H @FG]]} (0@#k//GGGP"GF///"Ba""" rB"@! F"`"c""a`" "a `"" " "a`""" "@aq"F'//բ"0JF6JWB@uF U0@JFSpB2AJBSDD `բ0J6J@@B5?F/?k//p..pJJSrBUBsuFE`//.F1" FJ"G.q/JqK@@TBJD/."1"/7`p/.pKJXCA2@!pKG/ "1"/'0/.0KJ@@SrBsD0K/"1"//q/KqKA2@VB!֢6D?..JJPBQ2B1 Bk///Gk//p..pJJSrBUBsuFE`//.F1" FJ"G.q/JqK@@TBJD/."1"/7`p/.pKJXCA2@!pKG/ "1"/'0/.0KJ@@SrBsD0K/"1"//q/KqKA2@VB!֢6D?..JJPBQ2B1 Bk///Gkk///#4G^G~^ ~(GGGb#J_=G"G4Gb# "/?_G]] }(0#k///C#4G^ G~^ GG b#/c_G 4Gb#^_] G]] 0#k//5BBBUB`FBDD@F0Dk/#~^^~ (0޴8@H>P^X~`h@/Z@KG [GGGGGGG@?p(".J ///*i C.JRSBRAF @/8B4G@b , H5uZk/#4G! #!.!J/?Cr.rJ G@ G (b///ˢ .JUBF /8B@b8/8K4G uZk/u%GTGb#!E!@0 @%/_G4."4JF ` 0@A//C.J?W/@4/GG4Kn_ĢB 0 A/jJXK G G?#9#C#.J?>$  "k#Q.QJ5 t.tJXeF#`;.JBD/JKBk aE` /4/8B"@b4K4GtZk/ GGE- EI0_ /h- A 0 A.hIu ITJF>â"ò @/4GXK?//GG]]} (0ݤ8@H=P]X}`hp#k///p#~^^~qF (0޴8GGGGG ///@RszP;$ DQ#5//G`//FDG`G@D/ G// $D/@G?/G b#4Gj_// c%#/&1&/ cðGG]Gb#]} 4G(0ݤ8@#///#TG8;"~^([^~ GGG0bsZk// /(BGTGH""0bsZk// /(BGTG@""0bsZk// /GG]]} 0#/k///`#^~ ^(~08@޴HPX>`^h~px޵G pҠGGFG>%!//GG"b#GGE_GTGb#%//o_0.P"Q2J'J(F?."J@/HG/GGC!///GC4Gb#!/S_G//GGTG0b#_GGG4Gb#/{_TB4Gb" GPZk8DGG8`EF_// 4J0JJFF9/GG4Gb#W_///3`Gb#8_/%0B GG8b""/ ///OZkŢb#"&_0B G G8b@"">OZkG"G GHb#_GG4Gb#Ʃ_ G"Hb#GG_è cGGb#`@GG@l-b#lI` #/ C/ . C.#KZCK:GGJRCJtGFG9_/m dGGGPb#TG G/˙_!//,,,H /,.0B4G8b,JsZk@@,,!,H?,.,JG, ///l.0B4G 0A8blJrZk@@GTGb#.!E!@.0 @ {_ ,.,J!B.u/JTJF>ˢB/XK?,/,KG?Gb#+@G+@+-IC// G^ /KXC/BG4GbPZk 1@A - I@@B 4Gb PZk @/?+1-1I?GtTGb#_ GGGb#TG X E  /3_!//GGTG""b#*_G/GTGb#/#_GG""TGb#_G/GTGb#_GG""TGb#_G GG4Gb#_V//?!GH$GHG"Hb#/_Ӧ/G "Ge"Gb#B"/ϛ_G4G0b#r_G?G=//ݡ8//0B4G""8b."/NZk*ΠB"GbfOZkBG"4GGb/OZkGAGTGb#y_ӠBGG"TGbrZk"GHb#Gt_GG"Hb#o_G/ΡG] ](}08@ݤHPX=`]h}pxݥ#k//`# 0 ^~(^0~8@Q"H޴PX`>h^p~x޵GGG0G`{#_# G G G G G GA!]?D/ݠG@4J8DJ/ GG G G GFGG _A_Et7JJFTFGm@ E/ e/ %# e. . E"YK[yKtG[GGrJPJ0b#G"GpF_GW$GTG`b# 0A4G//_$N/FFJ/ 0AF/8FG ,1A@FFTFG:/G4Gb#_///0"b#G@"b#@ӯC%Gpb#)@ӯ@ /// . E. % %# . /G0b#JRAJJXKFGtGF__G $GTG`b# 0A4G_$ 0`A ǠGG4Gb#////ۄ_TD!GǠݰ'G(G4G8b#و_XE D/Ǡݰ GG4G8b#Ɉ_///EG/Cݠ LE @H/ ? /E`H04G]Gb#RHR/@_G/G ](]0}8@HݤPX`=h]p}xݥ#k/G4G@b#_ &G@BTG"""GHbapZk@BGTGP""Hb""//WpZk`"" @BGX!""TGHbMpZkDG0BGTG8b MZk=)G G] ?E/GG""`b#TGD$E///G9_"GGTG""`b#0A1_G=AP""GTG`b#'_ GG*"TGG`b#0A_//GGTG*"`b#_J G_G4Gb#_GGk///G4G4Gb# _G""OGTG`b#_GG#"TG`b#_GGTGp""`b#_cGGTG`b#c#"C`DD#_//cCC#!DGGGCTG`b#Ӧ_ _E5EA EE.A0AOEGC/ `GG/R//GTG`b##"_GG""TG`b#_cG/GGTG#"`b#_cG//G1/GG4Gb##_GG'/// G G//͡4G "pb#EE@Ӏ_EGb#`"J _EGAEA *E /W_G G"Gb#4_ GG/// GGRGG///Bb"""GTGLZkG;G""`b# 4GV_GGTG ""`b#/O_G/4///% ?E%E/0`@/`5%A#i@GGTG%"`b#7_G///GGTG%"`b#*_GGTG""`b#/#_G GGGTG`b#_GGG4Gb#_G/ot% G<2 //X/x""x#6BGXK#KG.@8.0BX#3J+F( .J F0BB8"/ 8/;K0B+G X.ZJKF0B@x.qJ+F0B/ 0B/ ///.61BJ# F0B/G0F/?u@a.01BSaJa>/G]]} 0#/k///?9#/1,G1H1H#@///+@@!B.JJ@SpB s`0 @ B[.[J@沕KB@2Bt/tKtK TB 0@B B3,3H?//< B.JG3@G/a/tAJ0`B  DD[aK! tGa?.J vJ a/0`B[aK! vGa?.J.vJUJ0`B ! F>`/`K @.uAJ0`BTJ! F>.J/_3B.TJ>k#TG^G~^ GGC >Cb#/k_= TGG =Xb# G]P"] 0#/3///G]] 0#k//`#TG ^ [~ ^( ~0 8 @ ޴H P X >` ^h ~p x ޵ GGC >^;"(b~ $(}PZkG C 4G,Pb#%_/@GTG =b#p "/#_@TGB =b@P "Y@/'qZkG""TGb#G/_(DP"\"]-# ""$ #`==H-",M#x9#""PX#("m#4 @=h]- <"0p= m"!h!pM!xm!  M# 9!D!xX9" !`h=T"@P8H==C]ݰ]}ݲ=}= (08@/4G///0B,]?"H"tG8bHZk= GGb#4G0 @=/`&_GH"4Gb#-_G //?Р&.&Jx$F?BGTGbH""lZk#= @ /4G(=G4G]b# @///@GGTGxb#"I_Ӹ@"BGTGb8 1"lZkG#4G0b#X D _àG]}b&_ӝ/@GGTGxb#"%_ӔBGTG""blZk#G4G]b#= @ } @ӄ@GGTGxb#" _|BGTG""blZk=/+!//o?0=XF 4GG$]4Gb#/暄_àG4Ghb#/_0ݠGG4G0b# /{_R//@GGTGxb#"ٕ_HBGTG""bZlZk//#X D/ :GGGb## @ݠ@0@GGTGxb#"_(BGTG""b:lZk#GG4Gb#X D  @ݠ@GGTGxb#"_ @"BGTGb 1"lZkG4G4GPb#K @ݠBGTG""blZk G4G4GPb#< @ݠ/BGTG""bkZk//#"GG6dJb#X D / @0ݠ@GGTGxb#"]_BGTG8""bkZk//#"GG6dJb#X D / @0ݠ@GGTGxb#"=_ӬBGTG""bkZk G4G4GPb# @ݠh/@"BGTGb 1"kZk0'#tGG@]b#X D/ #X1_0ݠGG4Gb#X/_0GTG8=b#X/k_0ݠ\t@GGTGxb# "_lBGTG(""b~kZk//'#0GGb#tGX D # 1O_0ݠGG4Gb# /_0GTG0=b# /;_F//@GGTGxb#"͔_<BGTG0""bNkZk//'#0tGG(]b#X D #(1_0ݠGG4Gb#(/[_0GTG =b#(/ _//@GGTGxb#"_ BGTGh""bkZk//'#0tGG]b#X D #01_0ݠGG4Gb#0/+_0GTG=b#0/ۍ_//@GGTGxb#"m_BGTGx""bjZk//#X D/?#0G81]tGb#_0ݠGG4Gb#8_0GTG=b#8/_Ӷ//BGTG""bjZk//#X D/?#0G@1]tGb#_0ݠGG4Gb#@ӌ_0GTG=b#@/_ӎ//BGTGX""bjZk#Gb#G] @ #e @|@GGTGxb# "_tBGTG""bjZk//##GG4Gb#TG= @ 2_0GGGb#GtGlQ_0=GG4Gb#l_Q/@GGTGxb# "ٓ_H@"BGTGb 1"YjZkG##G4Gb#TG= @/ _0GGG]b#tGt%_0=GG4Gb#t^_%/@GGTGxb# "_BGTGH""b.jZk//##GG4Gb#TG= @ ڐ_0GGGb#GtG|_0=GG4Gb#|2_/@GGTGxb# "_BGTG""bjZk//##GG4Gb#TG= @ _0GGG]b#tG͋_0=GG4Gb#_/@GGTGxb#"U_BGTG""biZk@G4G b#@ "_G4GPb#4G@ӱ(""0 b#_ӬBGTG""biZk// G4G4GPb#@ӝ""0 b#_Ә@"BGTGb( 1"iZk@#GGxb#TG"X D _à0 b#&_Ӏ@"BGTGb 1"iZkG4G4GPb#@0ݠp@"BGTGb 1"iZk/#Y @/c?CG2RtGb#Ð_Z@GGxb#TG "_R//BGTGH""bbiZk//[#@GGxb#TGP " @ ͒_GGTGb# Ɩ_GG #G4GGG`b#!k_G#GX!!/!///0'F GPGF@G/pgF/ `G/ F/G/GG4Gb#_G/=XGP"b#G@/@"BGTGb8 1"hZk@3GGxb#TG "xEj_GGTGb#'c_ G GG4GGG`b#(/_ G@GGixb#G "`I/K_G4Ghb#]_ ///BGTG""bhZk//7@GGxb#TG"=@-_ 4G=AGGGTGb#@ /_ @GGxb#tG "AH/_GG4G`b#GG 0 AA@(_ (A/r//BGTG8""bhZkY@GGxb#TG "y@/_GGTGb#(_ G @GGtGxb# "G/ۑ_ @GtGGxb#` "G/ϑ_TG]A;G//GGTGb#@ /_ #@GGxb#tG( "(@A/_GGG`b#G0@@A IW_)  @/BGTG0""b"hZk//K@GGxb#TG"y@䍑_G_"TGb#@ GTG]@G#GGTGb#&@!/;_ @GGTGxb#" /k_ @TGG b#`"/'-_ GG4G`b#GG@ _G0A@ '# A?//@"BGTGbH1"gZk@#GGxb#TG"=@:_GGTGb#(3_= /GG4GGG`b#'֓_ݠ///@"BGTGb01"gZk@3GGxb#TG"=A_#BTG""b gZk// GoG4Gb#_ݠhG4Gb#/_àG4Ghb#_= T@"BGTGb1"egZk@#GGxb#TG"=@Ґ_GGTGb#(˔_= /7GG4GGG`b#'n_ݠ+///@"BGTGb1"9gZkGG4Gb#XE # @4///@GGTGxb#"_BGTG@""bgZk//7@GGxb#TG"=A児_#4G= A?GGGTGb#@ /_ #@GGxb#tG" (AI/k_#GGG`b#GG0@ (AA)_# @/?//@"BGTGb1"fZk@?GGxb#TG"=@F_ 4G=AG/GGTGb#@ /Ӕ_G// #GGGGG`b#'@!ْ_@GtGGxb#x"D#'@A_D# 0 A !A@?//@"BGTGbX1"fZk@?GGxb#TG"=A_ 4G=@jG/GGTGb#@ /_G// #GGGGG`b#(@!_@GtGGxb#x"D#(@Aӏ_D# 0 A !AA?://@"BGTGb81"IfZk@?GGxb#TG"=@䶏_ 4G=A"G/GGTGb#@ /C_G// #GGGGG`b#'@!I_@GtGGxb#x"D#'@A_D# 0 A !A@?//@"BGTGb1"fZk@?GGxb#TG"=An_ 4G=@G/GGTGb#@ /_G// #GGGGG`b#(@!_@GtGGxb#x"D#(@AC_D# 0 A !AA?//@"BGTGb1"eZk@7GGxb#TG"=@&_ 4G=AG/GGTGb#@ /_ @GGxb#tG"AH/ _GGTG`b#GG 0 AA@(_ (A/j//@"BGTGb1"yeZk@7GGxb#TG"=@_ 4G=ARG/GGTGb#@ /s_ @GGxb#tG"AH/ˎ_GGTG`b#GG 0 AA@(o_ (A/*//@"BGTGb1"9eZk@WGGxb#TG "y@䦎_GGTGb#(_ G @GGtGxb#"G/_ @GtGGxb#` "G/_TG]AG//GGTGb#@ /ג_ #@GGxb#tGh"(@A/k_GGG`b#G0@@A I_)  @/@"BGTGbP1"dZk@[GGxb#TG"y@F_"Gb#6dJG@ GTG]@G#GGTGb#'@!/_& @ GGTGxb#" /#_ @TGG b#"/*//_ @GtGGxb#x"D#'@A _ /GGG`b#GG@ _ G0A@*# A?f//@"BGTGbh1"udZk@[CGGxb#TG"y@A@_"Gb#6dJ4G TG9@#G] AE?G#GGTGb#'@!/+_& @ GGTGxb#" /_ @TGG b# "/)//_ @GtGGxb#x"D#'@A_ /GGG`b#GG@ J_ G 0@A@ # AA?//BGTG""bdZkB""GTGb dZkB//G""TGbdZkG=b# @BGTG ""bcZkG=b#@BGTG""bcZk G4G4GPb#@=@ tGG@/BGTG""bcZkCG4G]b#=@A@@Ӵ@GGTGxb#"=_ӬBGTG""bcZk9#GGb#4G] A* TG/{_GGb#4GZ@Gà]@/G//#GTG 0 Ab#(@A!_Gà &A}d3 'dx}dt@GGTGxb# "_l@"BGTGb1"}cZkGCGb#4Gu@A@A E TGQ{_ GG4Gb#@> 4G #Bb0.G0J'F ,AZk 1@B4Gb@-ID#GAZk 1@G4Ghb#@@-J@I@=#! tG"/Ӌ_ 4GGpb# HA/#AAA_/// "GG6dJb#GGA@ GTGC@Gxb#" x@E/@// ) /_@GTGGxb#"EI/@ //~_l /GTG@"ݠGb#l&1" _//@"GGGG`b#G1"_/@GGTGxb#`"Y_BGTGp""bbZk//Gb#4G=A/{@]` @GGTGxb#"=_Ӭ@"BGTGb@1"bZk0'GGb#tG=@/#H)_0GG4Gb#H/˄_0GTG=b#H/{_ӆ//@GGTGxb#" _|@"BGTGb(1"bZkGG]b#W@]|J/k_@G"GTGxb#/_b//@"BGTGb1"qbZkGG]b#;@R//BGTG""bbbZk//#G4G]b#=@////3@=p)/7?///G4GPb# "_)?,@GGTGxb#"_$@"BGTGb1"5bZkGC4G]b#=@A@/ @////G4GPb#"k_@GGTGxb#"_@"BGTGb1" bZkG#4Gx]b#= A /@//@GGTGxb#"q_@"BGTGb1"aZkGC4Gp]b#=@A@/@//@GGTGxb#"U_BGTGX""baZk//G4Gpb#XE R_ #B4Gb #dZk]P @GGTGxb#"1_ӠGGTGpb#._әGGTGb#[_ӒGGTGb#/c_///GGTGb#_/GGTGb# _/wGGTGb#_/oGTG h[@Zkf@BH}" ]=Gb`"-eZk 0@ @/W@G8"4Gxb#_PG=b#t@K///GG4Gb#_`B,4GhbeZk ]/#@(ݠ=/ //$}G ] ]( }0 8 @ ݤH P X =` ]h }p x ݥ #k/B4G4GbrZk///#G^~^ ~(08޴@GHGGGGGG0hb#"_0BGTG="tG8bzZk? &GG6$H@GG@tGb#0D0/ "_0GGGhb#@."@J R@J GJGb_ӣ @ @0G`DGGGGGhb#h"/S_G]G] }(08ݤ@HP#k///C#tG~^^~!1@ (GG !BGGGAFG/ p(b##")_Ià @BTG0"";#bA@`Zk///#B(""bTGA@`Zk&#B ""bTGA@`Zk#BH""bTGA@`ZkB #@""bTGA@/`Zk#B8""bTGA@v`Zk 4G //cGtGG(b##"߉_GG]]} (0#k//#C^~^ ~(0GGXq`///G4G"b#@GG4Gpb#G/_x_XG]] }(0@#/k///#TG^[~^ ~(08޴@GGGG G8;" ^b`ZkG4G"b#_GG4Gb#_Gd///BTG""b`ZkG0"4Gb#/_GG4Gb#_GL///BTG""b_ZkG4Gb#4Gs_GG"4Gb#m_G4///BTGX""b_ZkG4Gb#4G[_GG4Gb#U_G///BTGP""b_ZkGtG =Eb#@/GtG=Eb#"/_G GG4GGGGb#a@GG4Gb#/w_GG4Gb#w_G]] }(08ݤ@P#/k///#~^^~ (0GGGG0/// BGTG(b m_Zk/0@Y@/?G//G]]} (0@#k///0D@P#~^^~ 2B (GGGG@{#@ B_P#tGGb#R@!H"R_cPGtGGb##("_GG]]} (0#/k///p 3B(`#~^^~ (0޴8GGGGGF?B/#GTG0@b#&@@!_ @G?G]]} (0ݤ8@#/k///P#TG^~^~Y@B޴GGGGG@ȱb# "O_G""TGb#/~_ӐG4Gpb#"/ _G@""TGb#/~_l#G4Gb#x D/_ /ù_cpB""TGxbcGAZkGGG4Gb#/C_/// GGb#TG`"/?_///B?"G"tGbWzZk}+DxdD/?XaDG4G0b#"/_G ?GG/ ///#GG_"b#tG0@'B@1_ @GG4Gb#_ðBG4GbbZk//G4Gȱb#8"ʇ_à4GG=@/GG_"b#tG0@@@ Y_à @G]]}ݤ #k///q#TG^GX`F~^ ~(0GGGG`">زb#_`BTG(""hb^ZktG/$///G]] }(0@#/k///`BTG ""hb]ZkG`BhbTG0""/]Zk#`BTGH""hb]ZkTGc`BhbTG@""4G]ZkdàGTG=G]زb#] }("0@#B//#4G~^^~ (GGGDGpb#/K_HG4Gpb#E_\G4Gpb#/>_pG4Gpb#/7_ӠG4Gpb#///_tG4Gpb#)_xG4Gpb#/"_d////G4Gpb#//_Gd4Gb#u_Gdl/4GGb#u_Gl4Gb#/u_lG/G]]} (0#k#~^^~ (0޴8@H>P^X~`GG{GGG^`G/0BGTG ""8bG4G/7]Zk%/ 4G @BTGHb0.P"0!GQ2J'JG]ZkG GGGeGb#h"_ .j!P J >*.+J ///8-F`TD-F D .G"GEGb#TJ@"J/s_ ,k! H?GGGGGGb#@*-g I I*I 'E*=Ţ//0BTG8b ""G\Zk//4G G%G4GGGb#@ /G]]} (0ݤ8@H=P]X}`p#/k///#4G^G~^ ~(08޴@HP>X^`GGGGG0b#4GG>/_ ,B " GTGbA1H'HG]ZkHG GGGGG@b#h"/_),GG4G0b#A)H)!)<_BGGGTGb%H\ZkHG GHGGG@b#("_ ,GG4G0b#@ HJ! <_*-G*I //8-DTD-D D,D 0A J.HGj"G@b#GRSJ@"GJG/_*-J!*I?GGGGGb#@GG4GPb#Rt_GG4GPb#Mt_G G4G]Pb#] }(08ݤ@HP=X]`p#;t///#^~^ ~(08޴@HGG: GGGۤ///4dGG"4G%b#GG`}"//cl@ӠC /GG"}"4GGG%b#Wl@Ӡ@&4GBG0"" "GDGGb!D 48F"_Zk///GG]] }(08ݤ@HP#k/4G//#TG~^^~ (0޴8GGGGGۤf"aF?FG`^_Zk/////GGGb#G@&G!D?BGTG"bF_Zk//G]G]} (0ݤ8@#/k///@ #GG^~^~޴D>^~GGGB"GGGGG G G8DC0~"$dTG^G~8&b#k@ pB0" H"DG]}Gxb"^ZkGGTG0}"GG8&b#/k@G&PBG4GXb0 @&/xZk,$(@4GPBXb@ G(/xZk =(4GGb# LB0@r_ G0@PG BBGG3F/; ///./t#  @@FA"FJXK"yJ"R"G?T/r.[Kq@KS`J qF2"r>./JXKyJ""G?t/r.`KzHSqJ 0@zFr>./JyJXKG?? %@`/T/.0 @0A %@TKWJ"xJR"F>?0}L`eCGhA @/F`///j..0B F0A@EjJVJJ!wqJ1"F>0C B0B/..q/J0AJ!zJ[qK1"zGq?0}eB B0B/`.1,J0AJ!rJA1H1"2D1<0C B0B/*/Q/*K{HZQK0A1"J![GQ?0}eB B$D*,*H /.hA0A, GGJtJ@HD<///J/j"JK D*.3J/ 4G/D0= G* .G%Cy@J J!JF/%@ G%C"4FPB4GXbp@ BGxZk`@*, "0}"A0H'H!"7!B!"Q3B @"t@1q@ B%B/*! #hAC8Ax#:GxC;Ai F/O///),."@# EAi"D)HTJ)!q H  F>. /JY:K"rJ2G@" ? . .JQ!Ji"tJ 4F >..JyJVJ"@"F>I/.SKqaJPJI# F>..JvJUJ;AF>)/.:Kq!KPJF>_8A////. ,0AJA H)!8ApJ 0D </? //hA0A.rHWJF> Gj/J!jK/7hA(,`BTGhbA(H(<4p@BGZZkGG4G(b#q_0PBG4GXb/ `wZk AGGGGGXb _ GGG]]}ݤ=]}#/k///#C^~^ ~(0GGq `///$G4Ghb#~q_8G4Ghb#/wq_G4G"p$b#j@GG4Ghb#/kq_G//G]] }(0@#k/#4G ^G~(^0~8@HGGGGGb# ^~q_GG]"GtG@)b#h@GG0(b#GtG_GG`4Gb#/_//G4Gb#8"_ G4G8b#/_//G4Gb#8"_]=G4G`Bhb$0D4$vZk$d(,.J///G/C.CJKF/4G /DF"@.J(0B(#/c #K?]/  //!G G pG`G/4G/?G ](]0}8@HP#k#~^^~ (0޴8@GGG GGGGG4GtGG b#@3GHE"G4G b#tGy@G #GG4GtG b#G#r@QGGXE"4GtG b#e@G #GG4GtG b#G#^@IGGhE"4GtG b#Q@/KGGxE"ðð4GtG b#F@ GGG4GtG b#G?@FGE"Gð4GtG b#2@GE"G4G b#tG/'@///; 0@ð @FGG4GPE"tG b#G/@ðGGG4G`E"tG b#G/@ðGxGGpE" b#4GtG@ðGGk///GG4GE"tG b#G/@ðG\GGE" b#4GtG@ðGGO///G4G]]} (0ݤ8@P#k/// P,0#tG~^G^~Q 4G 0G(0GGG1 pqG@ b#@GGG4GtGG@ b#/@///#  0@0 @# CG0@GGtGG@ b# @@4G@/# G4GG@ b#tGG 0@0 @#G~@,#GGG4GtGG@ b#q@////# G4GG@ b#tGG 0@0 @]#G^@GGG4GtGG b#@////# G4GG b#tGG 0@0 @A#G@,#GG4GtG@ b#GG6@/# G4GG@ b#tGG 0@0 @%#G&@GGG4GtGG b#]@////# G4GG b#tGG 0@0 @ #GJ@//,#G]]4G} (0@#k/,01 0Bk///,01 0Bk///,01 0Bk///#0tGtG^~^ ~(08޴@GGG0G b#0 G@//G%/#@@B#\@Ck//G//G_//G /GG4G@ b#@///4G///G]] }(08ݤ@P#k//G_//G/GG4G@ b#_@ #D"GG b#TGtG! @=@ #!0@#/# CG4G@ b##4QB_GG/?@//G2TBGtGCtGD" b#@Ӷ//Gn_//G/GGtGD"tG b#@ӤG^_//G/GG4GD"tG b#@ӔGN_//G/GGtGD"tG b#@ӄG._//G/GG4G@ b#@ #$"GG b#GtG% @/C@ #!%@#f//#@#/_?@b\@Ck/ %BTG_ %BM/GG4G@ b#@GD"G b#TGtG@ $@9/#G#_ C%EB////GG4G@ b#@&// G4G@ b#2@_GG@/%@G_/GGtGD"tG b#e@G_ $@/GG4G@ b#w@//G_ C%EB/GG4GD"tG b#E@G_//G/GG4G@ b#W@ $"GG b#tGtG%@/@ #!%@#//#8DXDxD#. `/Gy_/ %B///GG4G@ b#+@Ӯ// G4G@ b#2@b_GG@ӡ/G%@GD"tGtG b#@Ӗ// G4G@ b#2@J_GG@Ӊ/G%@GD"tGtG b#@~//G6_//Gy/GG4G@ b#@ D"GG b#TGtG&@/3@ %@^//#G#_ C&FBðS///GG4G@ b#@GD"G b#TGtG@ %@=/# àG4G@ b##2@_GG/@.//G&@G D"ðtGtG b#@"//GGtG(D"tG b#u@G_//G/GGTG0D"tG b#e@ G4G@ b#&@_GGz@/%@G_G/GGtG8D"tG b#I@G_//G/GG4G$"tGG b#/ @GGG4G@ b#O@//Gz_//G/GGtG@D"tG b#@G///Gf_//G/GGtGHD"tG b# @G/// GG$"4G b#tGG%@b @//G/GB_//G/ àGG4G@ b#%@/@G/0#^~^ ~(08޴@GGG`{#>w_Gb# E_ =GPb##*_//' #,GGb#tG$"# 0@/"@##GtG/'@G//G8D4GtG`$" b#>G GG @GGG4Gb#@4GGx$"` #,tGGb## 0@H@##GG@G8D=XDGxD4Gb#' `2G@ #D"GG b#4GtG! @= @ #!0@#/CGG4Gb#Cu@GG4Gb#o@//G_//G/GG4Gb#_@4GD"G #G4G b#tG## @//  #4GGG b#G%0BGx$"/ @/// ## #GG4Gb#%%B//@,#p$"G GtGb#0@ @G %@ à/w@ðC@bCX\@hCk//ð//GF_//ðz/ âGG4G b#tG%BD"K @ #GD"G4G b#tG!%@#/? @ðaGG4Gb#@ðZ/GG4GD"tGpb#@ðP///GG4Gb#@ðF/GGTGD"tG b# @/ð:/GG4Gb#@ð2/ GGD" b#4GtG @// GD"G4Gpb#tG@/ àGGD" b#4GtGð @///  #GGD"pb#4GtG#g@ GGGb#GtG @// àGGb#4G @%1@//k@ àG`$"G4G b#tGG4Gð/ @//GG4G`$"tGG b#%1@ @///GGD"!à #4GtG b#%&@ð @ àGD"G4G b#tG%@/ @/// àGD"G4Gpb#tGð @///GGG$"tGb#/ @////G@?\@BTC/k///GG4GD"tGpb#@GG4GD"tGpb#@GG4GD"tGpb#@à  @0@ð/G4G]] }(08ݤ@P#/k///G3{#tGGtGGz/G4G3{#/z0#^~^ ~(08޴@HPGGG >///GG4G0 b#GtG @ #GD"GTG@b#tG#@  @0@/G/GG//GGG$"4GGG b# @)GD"G4G0 b#tG @G #$"G4GG b#G# @GG D"4GtG0 b# @G $"G4GG b#G @ 0@0@㰨 @/GG4GD"tG@b#G/+@GGG4G(D"tG@b#G/@GG4G]] }(08ݤ@HP`#k//,01 0Bk///,01 0Bk///0 P#tG^~ ^(~08 QBG@GG0G@Gb#8 G/_ @/// #XD8DCGGb##_ӠCGG$"DG @TG3 @G G4Gb# @GG4Gb# @ =$"GGb#GtG!@ @## - @XD0#8DCGGb##_ӠCG$"GDG/ ///@TG/ @///#4GGb#!q @ B # 1@G # @GG4Gb# @  =$"GGb#GtG!@ @## @Ӵ@cGGce_`CD\\BCk/GG4Gb#{ @ # D"GGb#TGtG! @= @ #!0@#/C cG4GGb#tG rBC(D"/ @ =!@#/ C}G3SBc*_/2UBCGG4Gb#C @ӂ// GG0D"b#4GtG @  @//s =GGb#4G!@#* @i/GG4Gb## @ #8D"GGb#TGtG% @/k @/// #G@D"GTGb#tG!%@#] @/ $@C///G_ C%EB7///GG4Gb# @.//GG4Gb# @ H$"GGb#TGtG%@/7 @G #!%@#/#G#_ c%eB ///G8DG4Gb# @/ 4G$@G] ](}08@P#k//0#^~ ^(~08GGG{#>_ #,4GGGb# G cG`G@////# G4GGb#GG 0@0 @_#G@GGG4GGGxb#@////# G4GGxb#GG 0@0 @C#G@,#tGyBAGGG4GGGb#z@/# G4GGb#GG 0@0 @##Gj@GGG4GGGxb#@////# G4GGxb#GG 0@0 @#G@,# #]Gb##C_///////GGtG$"Gxb#/ @>@?\@BC/k///GG4GD"tGb# @GG4GD"tGb# @GG4GD"tGb# @GG4GD"tGb# @GG4GD"tGb# @Ӽ # @0@?///]4GCG] ](}08@#k/G@1{#tGGTGGuw/G4G1{#/w;QR"/@1!  1BBD/k///#@^ [~TG>"H^PGG(b/GZkG&= "&4G"R HQ1"pF"R"@`Jw`JFxF}tGBFb#G tG2F0vJ_tG2FtG2`FG@]H]P`#/k///#GTG~^ [({GOZkG]C #/k///#4G~^^~ (0޴8GGGG[kb//)lZk @e@/c.JU'@@e@e@GU.UJ/(@///.J"XF u/uK0@FuKXD"//5.0@5J5J" X'F .0@JJ"@XFU/UK0@De@0@.J`$G4G4GЛb#e_BGTG0""bMkZkG/G#@4GЛb#0`@e_ BG@GGtG(bGOZk,GGFH<G/G//0,G4GXb#0H f_GTG4GЛb#/e_BG8""TGbkZkG]]} (0ݤ8@#k///#4G^8[~ ^(~0GGC >^@b/kZkG4G(b#@PBe_(BG=GTG0b/jZkG(BTG0b`@ .r H"Q J2F > =jZkG]G ](}0@#k# # "~^^~ (0޴8G@H>P^Xq.qJGGGGGb#GGG B/` 2/ 2, . .G("8KA8HJWJ!GtGF_0BG4G8b5kZk%G @ @G.J/r///d.0@"StJgJrF@@///G///G]]} (0ݤ8@H=P]X`#k//Gʢ//KWCF D/4GhbDK`B.MZk//0AA/?GG+.PB4GXbJMZk@@D0@@/?G/ ) D.DJQQB1"F //.pB4GxbJ2MZk//0@@/?GG.d.$" PJdJJ4G///7 #4G~^[^~ (0޴8@GGGGbjZk`@Ġ//B4Gb"GjZk1@ BGTG#B(b LZkƠGG]]} (0ݤ8@P#k/Gk//// G//@PF@`pF/ `//F///GkG4G;P"4GGG/բFwB0BB"0 B"R"r/k///#$"H^~P^X~`h2CpGGG޲p{# RTBGR 2_C4GGLC F?@1@C :B BSF//@///@"Ԣ @t4FUBFFVBWBG֢[xC?D{A8@F!PBB@BB@yC@9@@B@0@_ @ /Ԣ0@" @FVB֢B@XB?#/GG]"b#tG11B/B_'? &HBPbs"?#]@ @$"_?$P!  `[/olZk8"(B0bX2hZk<"/@X[((=///"Q B@"E@E@E@00][8=8}[jKY[@]@GH]P]X}`hp#k0#? 4GH^~P^X~`hp޴xG>^~޵G ۤGGG("`b#/&Uc_?"4GG`b#&"Kc_ G ="TGGb#/_GC="TG,G(b#G//_C0Gy/GGG@b#O@///Gi//GG4G`b#c_= G4GG`b#@ @c_ӠBG,]/&? :/" =! H/_kZk ݢ0JGBB,5/5Ha5HJpJD!GD0G<5?D }SB="0]FkZkĢ =B@#qGpGqJPJFW@B9 B GtGbp""LZkB4GbhZk@B4Gb @ /hZkG@TG0@b#b_tGx""BDbPZk(B4Gb&\/hZkGp@4G`b#b_(=GG,b#!$\!8=_("BGG,8]b`1"/PZkGGd", &]"Gb#=_(DB4Gb&\/mhZkf(@4GBb @& \/ahZkG TG0@b#b_G G TG(G TGfb# ¥&\!0/_("BGG0]bG@1"PZkBTG`""b/[mZkG4G@`b#I_GG0@4G`b#?b_.BG G4GGbGPJ>G@}&SZkA , `!fAA H <//&AG@/.JCUBBFF/s"fB/fB// Gc/kBGE/K@///3,`F3HCU!@!@ FDK.s"JCUBFBFB/s"KCUCDCD/8S/s"SKCUBB2F0F/3,s"3HCU@@FF&.s"JCUB )GB 4E/ /s"KCU@@RGEFs"kB?fB/3,3HCU!@!@FD/s"fB//XK3!?GBGtGTGbOJZkB GtGTGb/GJZk.PJ>%.%Jx$F/o///k?0BGGtGtG8b/IZk@W@AD^ X@E//@ TG 4GVGG]"b#.@=0BG ."GtG8btGx!D// IZk-G G4Gb#a_ / ///pG4Gb#a_G// 4G=G`b#0 @/Oa_`BGGtG]hb+KZkdg@#,A#H#<G4G`b#8F'.'JTGXD 4G3a_qDpDqIPJFW@B 0BG4GtG."8b^IZkXE TGG."]"b#@GGG4G`b#a_ GG4G`b# =0 Ba_`BGGtG]hbJZk@,@H<GG4Gb#3a_pB@4GxbMZkG,4Gb#)a_(GGb#$\Z_("GGGb#@G 1"_(}GGb#c$\cJ_("GGGb#@G@1"_(GGb#$\:_GGGGb#("@_GGH]P]X}`hpݤx=]}ݥ#k//0JFF//0IFFm//#^~ ^(~08@GG>C@{#_GCTG="4G#b#/ _G//4G/= /B4GbGXfZkBGGGtGb#JZk///GG] ](}08@P#k///4G//#4G^0[~^ ~(08޴@GGG8b (¤G/%fZk= @.J//Fe @.JSBsaF `//.@B4GHbJHZk//$, $H?0BG4G8bfZk G]G] }(08ݤ@P#k/0B(G4G8b ¤eZk% //&@P."PJPBF//#!1 @#%?c@@B4GHb.s"JBHZk#TG@^~GH^P~X`hGG(GGG >"b#/_GG="TG,b#/_GG="TG0b#/_GG="TG4b#/ _,=0CtG4=Bݢ?@B ]B0D?B81DB,4=3DUBb" F /GZkB ]tG08=bGZk4G(=/G%b#@G%b#@///GG@]H]P}X`hp#k///4G//#TG0^G~8^@~HPX޴`hGG(GCb# >"/_GG="(TG8b#/_ӡ@@G0D1 0`/GTG"="Gb#y_GGG="TG8b#_CC] =3FG@BHbtG0@TBFG0FG/ GYGZk@B]GGtGHbQGZk/cGG0]8]@}HPXݤ`hp#k/4G#TG4G~^ [({GfnZk4G G] #k/ ({4G".k/// 4G4G BТB0B.J B2B`w@J8B @@F!2H1/1K1D k///Gk//4G4G BТB41B."J B2B `w@J @8B@F!2H1/1K1D/ k/Gk// G Bk//Т4GGB.J B2B `w@J @8B@F!2H1/1K1D k/0B4G/k///G Bk//Т4GGB."J B2B`w@J8B @@F!2H1/1K1D /k///41B4G/k///p G tBk//GB.J UB BQF k//0`B4Gp/k///pG tBk//GB."J UB BQF k/31`B4Gp/k///p G tBk//GB.J UB BQF k//0`B4Gp/k///pG tBk//GB."J UB BQF k/31`B4Gp/k///p GGGtG @ @#0#~^[^~{ GGG3@aZk/"4G#@"//GG]]} 0#/k///Gk//pGGGtG `B @#0#~^ [3@^~({ GGG05@/aZk"4G!#@"/GG]]} 0#/k///Gk//G1{#G1{#à# G~^GG^~ (0޴8@H>PGGGBG/9VB///7 KG @GBWG@9C@@G@` ;@d`B//UG0@C] ,@H0B(.E`Fs"(JUG0@C1@ B@0BK 0 @/H ///C3--3II Bs"1'AUG @0B0@C8 0 @6/3-,IH Bs"1AUG@0B0@C@' 0 @/$ "3-,3IH Bs"0B1'AUG0@C 0 @//3-&. B3Is"&J1A 0 @//// GG ?" GG///GG9VB= C?BVBECD4G/w///VB4GGB @@ g`[G@Zk' @"ǢGG]]} (0ݤ8@H=P`#k/// // //#ТG~^GG^~ (0޴8@HGGGGB"/9UB///7 KG @GBwG@9C@@1@3B !:@!1 @k 軙 @/S`///6Fb`,HaC!1 @.D`Fs"JaC!1 @0@(1 BE/P0@C"/K,-HI0@(Q BEaC!1 @B0@C?,-"HI(q BE0@aC!1 @aC!1 @30@C">/,-HI( BE1 B0@ &0@C#,. @HJ0@/0@C/ ///6F11 B`,aCH!1 @s".J0@0@C?/ GG "GG///GG9UB= C{BUBhGCE4G/o///UBG4GFB @ @/ f/`[//@Zk'@GG]]} (0ݤ8@HP#/k/// // //#"B4G^~P[^ ~(0GGG0@Xb3kZk= B GG4G" #dZkBGbjZkG]G] }(0@#/k///#!QB^~^ ~(08޴@HPGG'aBGGGGP{# P@@ 2B@//_ =pBB1%BGBcZk âB B òB#÷ BpBcG]d@cZkG]G] }(08ݤ@HP`#k/0#~^^~ GGG  B 0 @ PZ :@^ ^~ 0#k/H" bTG(B0b1"/DZkG?"b#G@8B4G4G@b=TZk/#^~^ ~(GGG>8{# ^_} b#G#CG]] }(0#j//G1{#GG{##~^{#^~ GGGU_" a@ @"B r@`@BG]]} 0#/k///#Gs~^{#^~ GGG3_" a@ @"B r@`@BG]]} 0#k//#~^^~ (0GGGG{#^_#pb#%@1@ BG/_G#cGBGG#@bZkG]]} (0@#/k///#CqG^~^ ~(GGG{# r cBG`//_=BGGAbZk`G]] }(0#k/p#G~^^~ (0GGG [0 (bG/7FZk;G/ B4GH"(bD/+FZk B@"4G(bD/"FZk B4G8"(bDFZk B4G`"(bDFZk  B4Gh"(bD FZk @ BTG(b#%@.JP"t$FEZk0@ @ G](b} X"]4G(0@#k0#^~^ ~(08޴@HPGGG >//////GGGGtGb#/s_///GG @_P\<@bC/k///GG4GD"tGPb#_GG4GD"tGPb#_GG4GD"tGPb#_GG4GD"tGPb#_GG4GD"tGPb#_ӸGGTGD"tGPb#_Ӱ # @0@ /G/GG//GGG$"4G4GGb#_)GD"G4G@b#tG_G #$"G4G4Gb#G#_GGD"4GtG@b#_G $"G4G4Gb#G_ 0@0@㰨 @ò/GG4GD"tGPb#G//_GGG4GD"tGPb#G/#_GG4G]] }(08ݤ@HP`#k// P,0#4G^~G^ ~Q(4G 0G08GGG1 pq b#G/;_N#GGG4G4Gb#G=/o_GGG4G4GGb#&_|/# G4GGb#4GG 0@0 @#G_k=GGG4Gb#4GG# _GGG4G4GGb#A_/V///# G4GGb#4GG 0@0 @#G._CGGG4G4GGb##_<#GGG4G4Gb#G =/_GGG4G4GGb#_$/# G4GGb#4GG 0@0 @#G_ =GGG4Gb#4GG#_// #  0@0 @#c,CrGGG4G4GGb#_////# G4GGb#4GG 0@0 @]#G_GGG4G4GGb#_////# G4GGb#4GG 0@0 @A#G_,#GG4G4Gb#GGb_/# G4GGb#4GG 0@0 @%#GR_GGG4G4GGb#_////# G4GGb#4GG 0@0 @ #Gv_//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#04GtG^~^ ~(08޴@GGG Gb#00 G2_//Gw/#P7@B#o\@ Ck//Gh//G_//G_/GG4Gpb#_W//G_//GO/GG4Gpb#_ #D"GGb#TGtG! @=_ =!@#6/G_ C}2SBC+//GG4Gpb#_#//G_//G/GGtGD"tGPb#M_Gv_//G /GG4GD"tGPb#=_Gf_//G/GGGD"tGPb#-_GN_//G/GG4Gpb#?_//, @/G/GG4Gpb#/_ #$"GGb#GtG% @/_C/ #%%B///CGC _ %B///GG4Gpb#_GD"Gb#TGtG8D##O_ $@//#G#_ C%EB///GG4Gpb#_Ӈ//G_//G/GG4Gpb#_ `$"GGb#tGtG%@/#_ $@g//#8DG#`_ C%EBZ/GG4Gpb#_S//G_//GK/GG4Gpb#_ D"GGb#TGtG&@/_ %@3//#G#_ C&FBð(///GG4Gpb#{_GD"Gb#TGtG_ $@/Gt_ C&FBð///GG4Gpb#[_4GG]] }(08ݤ@P#/k///0#^~^ ~(08GGG>{#5_Gb#_ = GGGG0b#tG#_*#G$"GG0b#tG#/{_///GCG_ӠC8@FX@FGDG4GtGb#////@pD"_GG4Gb#_ Gb#_//' #,x$"GG0b#tG# 0@/` ##G/?_ =//# /#G8DGb#4G#/_  GX$"4GTGG`b#G _/ ##)#G#_ cc!GG4Gb#_GD"Gpb#4GtG_// ## #G#_ ccGG4Gb#_ #D"GGpb#4GtG% @/_ #!%@#//CGG$"`b#GGCtG_ #!%@#/Gv_ C%EB/GG4Gb#g_G$"GPb#tGtG_ӡC0///8DXDxD' @/` B0BGG4GhD"tGb#!_GG4G`D"tGb#_GG$"Pb#tGtG/_ӡC//G]]4G }(08@#/k///G0'{#tGGtGGe/G4G'{#/+fp#^~^~ (0޴8@H>P^X~`hp޵xGGGG#(;////BGG! 'gGb"@Zk(GGtGXbD (Dr!@Gf1_GG4Gb#|x변~k_H G4G8b#n/U_DHi($ ""b#Ga!G<@J"k"""b# 6@J"k" 0""b#0@J"k" ""b# *@ J" k" ""b#$@Ӡ"(J"(k"b# 1"@Gt 4G@b#/_G Gt 4G@b#_EG4Gb#/ t /Ϝ_Gt G4Gb#ɜ_ӠGGG(b#GGP"/f_ӄTGG(b# E" '/ f_B "+"_"tGb/kXZkGTG '(b#"e_( 4GGGb# 0A!PAYT_ @BG G 0AQAZZk * G /// GGTGb#BϢ/i_G/GTG`b#2j_GG G/OGGb#/wh_G/%tGG(b#0D" / G/e_%GTGGb#@ @ /F O@i_/G/GTG0b#j_ӠGG/ GtG(b#X"/e_GGTGb#(Si_//G(GTG`b#i_ӠGG%TG(b#("}e_ƠŰƠGG(b#"D/ 'Oh/ge_ ʠ 0AA A~Gp""$gGTG@b#i_ӠGGpB" 'tG(b#"/Oe_$GTG"G@b#h1" E/i_GGGTG%`b#/;R_G GG]"4GGb#/3_$TG$G(b#(" '/#e_GP@4Gb#&1@G/S_@BGQ@ G GA@'DYZk+ @@ E"@//0APAg"># BpAAAFAA Ac0APA A (!LlL̲,/ A`/0A! A_GGGG@bb#GV@G4G8b#$g$S_$$%/GGG""GGB"}"xb#>_G/( G // G4G8b#bS_G=" GG$hG b# @w`$E@%ȡ$@/A_%// Gg/G$tG%(%Mb#A_/D[/%(GG=" b#GGIA_ GG4G8b#/'S_="G GG$$-G b#G'A%LA_GG%GGtGb#@_//GGGGb#@$M% 4GG8b# 0@A$M/R_% GGGGb#Gv@$%4GG8b#0@$R_%G4GGb#:_GG4Gb#:_/s G4G8b#//R_ G$$G8b#4G0@G@$ͱ% %/R_% GP TGG`Gb#h} G(ġX(P\`%+/A_ G!///hP"(="GЃb#4GG$E"GGA,e/?_ 0@A! MA$X0@%GX="GTG`$b#Xﰘ0AP X\/c@GG4Gb#.:_h]BG4GbGG% "YZkG8D4Gpb#"c_ӐBG4Gh"GGbqYZkG8D4Gpb#"c_ӠX-1ACG!TGb# A N!DQA'R_ӈh] %JΡMAHHA /(c `//G$ 4G8b#3R_$k/ BG4G(b~Zk@BTG""Hb/\ZkGG=TGpb#"c_( B(¥//G,GTGbG GG;1_ӠBGtG ,b"}ZkB 4GbTZk//ݠDGG8b="x]"p}"GDDCݰ H/1_///p+//0AGx=GATGb#My_ӅHGx4GF@8b#F@F@Q_GF@G="&Hx]"p}"&&AGb1_BG ,btG"U}Zkp 0Am! B" ,GtGb G GE}ZkG,GTGxb1_ӘG4Gb#0@P@/_Q_Ә@BGGGtG0@Q@WZkoBGGb , !HEH9Da(HD </WkZk///BG4G"GGb 0A/BZkB//G"4GGGb/#BZk//DE@/ %ɰM(B (GtGb BX"|ZkB 4Gb/TZk$! /// , HA H <//(#}!! 0`A} /GGGiGXb]"/_0_Ӱ=GG]"b}""G /w0_G]"="tGxb#/X_ӨG"4Gb#/T_G4G"b#S_G G"4Gb#S_G///G"="]"Gb#}"//V_Ӹ=4GGb#@"P?@//P_G/!GG]Gb#G GF"/?V_Ӹ/ %) GGGb#A@JFGA/@$)QQA1 G-y_=0@k!0 @ @=2CGGTGXb#F/ GLNDJ3CFSsBSsBSB3B`/7W_GG 4GE8b#/P_Ӡ}ݡ='gA+eAD+D/?G4G"b#~S_G G4G"b#GwS_ӠoGGGXb#TG`/ W_G4G8b#nP_)/;?'Cb$EGGGM %wHLTG8b#3_Ӆ6H]G4G&Cpb#EF@F@F@F@&FAd &O Q_ġtGB]bX"%O($ ){Zk/]$ 0A  J! A](dB +]("tGb{Zk ¥B4GbRZk(c`/G %4G8b#P_G$4G8b#P_$cB4GbDZkG4GG8b#/P_G(E G@/0 B/je*,/1A豔 1@/ GJ_0@ @ B DtG"bv{ZkG]]} (0ݤ8@H=P]X}`hpݥx#k///CC#tG!^GD~ ^(GG >C^~"^Hb#a_=tG B(b1UTZkG] =GHb#] ](`"0#`//G] ](0#k//[ 1rPBQ3B1 B/k/// 0Bk//#TG^G~^ ~(08޴@GGGG$b#> ~%#{7_G%GTG=b#/s7_G$GTG%$b#/k7_G%GTG =b#/c7_#. GG..%,PB#J(0#@#GXbyFJGJFG%HFG8DzZkGG4Gb#2O_GG4Gb#-O_GG4Gb#/'O_GGGb#]]4G }(08ݤ@P#O P,0#G~^G^~ (0GGQG4G Gb#G_//// #GGG4GGGb# @0@/ //_/G*//GGG4GGGpb#_// #GGG4Gpb#GG @0@/ _/,ctGdy`@`4G///G]]} (0@#k///G//#^~^ ~(08GGGP{#_ ,#GtGp"G!b#1" @2@#G/_)8DXDpxDTGtGG@b#G@U"// _pGGTGb#TGG$"g_G G4G`b#_GG4G`b#_ ,TGtGp"Gb#1" @G]_//# 4GG`b# B#01BG_ ,GtGGb#tG @ #=p"`1"6_C/=5@4GGD`b##G/_4GG]] }(08@#k///G!{#tGG4GGq^/G4G!{#/^#GGGH^~G"P^XGG{#z@G"G"G8b#@ӈ"b#/@GH]P]X`#k/#GGGH^~G"P^XGGx{#Z@G"G"Gb#w@G4G0""TG b#c_G0""TGb#/c_G ""TGb#/b_"hb#O@GH]P]X`#k/#GGG^~^~GGGGG"{#B@$0B/$/"="(b#@G"b#4@/D PB/$G="_"PcXb#@G"b#4G@"pb#@PG]]}#k//#^~_">"^ ~(08޴@GGG{#X\GPd@G/G/#GG]"Ub#GG A GG]"GHb/BӰ#G ///G_"="b#Pdn@//#GGGGG=">`Vb# AGGG="G(bBӰ#G=" GG4GG`Vb#sAGG4G0Sb#A/GG="G(b4GG///BGG4Gb B0`B4GhbHàG/}RZkGGb#GN@(GtGb#@ӰGtGb#/z@Gb#@Ӱ//HG]] }(08ݤ@P#/k///#G~^^GGG "' $B"C @ BG@4@ @ B//GB0 @@:F@G B SBF@ " qB [4GGbG({-}Zk" @"G]] #/k///GG//s"R" [(;8PD@[d8<0;HPP1 \0{Y BXp0[y B TPk/(1#TG~^P[^~! (0޴8@GGGG4GcRZkT#GX4G\CGSGLG`c0"b#PCb_4G Gb# G@AZ_G4G"4G0G$0b#/K_,0/(#0 B(#GG8cD"4G0b#/K_@0%/ <0B<GGGGGPb#]]} GGGG(0ݤ8@P#/?u///#4G~^^~ (GGGG`b#/K_G4G`b#//K_ӴG4G`b#K_ Ghb#e @/4 //Ghb#] @/,G4G`b#//K_@G4G`b#K_cG]]} (0#k/#4G(0Т^p[~^~޴ (0>8GGGGGGxb'QZk? G"G@GGb#/\C1"R@Ӂ//BGTG@"bPZkG@"4G b#Y_ӄCB@"8""bGPZk8=@G Dj\0 /^% /B@""bOZk/%// G /BH""bOZkŢF G0BGTG(""8bD8/rZkG0""GTGb#/S_ X")#8<D#GG4G b#3Y_GG(b#@GGG}"G"0b#K@pBG4GxbPZkGGG@b#e@GGGb#D@GG(b#@///G4G@="0b#@ӠBG@"ibX""/OZk XGG b"b#D7@\//Bb@"""uOZkBXGGGb"b#$1  "@//*X#pBGG4Gxb! \PZkG@b#GG@G4G(b#`@GGG }"G"0b#@pBG4GxbEPZkGG@b#G@GGGb#@XG`b"b#GG@/Bb@"h""-OZk GGG b"b#@GG4G8b#Z_ӴG@="@]"0}"("0b#G@ӄ8G@"pBxb4G@D/vXàƠ/iGPZkpBGX@"4GxbPZk? "G@}"@b#G\C1"R@GRBTG"@="b%![OZk G@ .r H!Q J2F >e?`//Gb#/8)//@pB. 4GxbOZk@? "GP@tG@]"b#@1"U@G4G b#"0@:X_B)GTGb/%OZkG="@]"0}"G("0b#O@ӀG="b#G/@ )!/GG@="X#!b#G @G]]}ݤ (0=8@#/k///p4GD`#^[~^~GGGGGbsOZk? 8"GG@Gb#\C1"R@ (BGTG"0bNZkG"4Gb#W_ӄB" ""b TNZk// G="b#GJ@="Gb#]@G]]}#/k///p# ^~(^0~Ds8@H޴PX`GGGG>`(0 <P@cdCGG{#`b#'@TG Gb# @@'" BB 0@/`F#7I_ӠG%GGGDb#10B=e="pB}"k@=G/ %!B%.@"G"#XGP1"tGb/eB%4GTGG(b0@ @tH`.S`JtF`>@/B!@ G0 @=?Ð"GtGb1"EB@Gb#D#C/@ӔG&㠠àG"//'"/ %,A0H'HA1@!!D/' //E. B4Ge"(bRSJGJ/qZk#0@ @?G#C//pb#Z@G ](]0}8@HݤPX`p#k//G#Gpb#G@G4Gb#{@Ӕ@GE@`'1@`尤2A4G{#;"4à#TG^~^ ~(08޴@GHP>XGXGGGGGCb#t//G__L#0 @L#pǢ'/pBGxb6"5MZk///֢G4Gb#8@GG "b#G4G]@4"GG}4Gb#V@Ӏ0@//V"_GTGTGb#/]_D G`B* |tGhb("XD/ @GG/@\cS/sZkGTG4GGGb#K\_ G/DGTGb# @G "GG4Gb#@Ӏ0@ GGb#@GG "b#GG @Ӏ0@21|砠GGb#tGxD"\àFkY_$//P"G4Gb#@)G "E X("@ G/`B0@4G" @hbsZk/?b`B@"GhbG""s"sZkGTGTG0b#/]_"GGGXb#tGD1"/@ /GGb#@GG4"b#}G@#pBG#!xb ///qLZk G4Gb#x@ 0@ G]] }(08ݤ@HP=X`#/k///#^~^ ~(08^GGGGG 0"{#@#!1 @#G4#"b#G@GGTGb#/X#x/7^_///L#0 @L#G4Gxb#4@#BGTGb  /OoZk/// Gxb#4G8D @ $1@ G]] }(08@#/k///#? ^4GAF~^4G ~(08޴@GGGGGp[GC;">xbKZkGb#TG@l4G@l\0#C8<DpBGxb@""tGKZk//?Gb#B"Xâ֢6_ ? 4G#8<D島/\C4G0R/ @c8<D/\0(#91 C(#Gb#tG@ӈ/ @ # B # QFB QLch0`BBLchðkpBGxb""KZk/// GGb#@pL@0@LpW$.b" ¦$Js-F֢ `.TJJTBF //.0B4G#8bWJJ/nZk Gb#Gf@x@x1//pBGxbH""MKZkpB//GX""xbEKZkpB G""xb?KZkpBG`""xb9KZkGb#GB@|à0@|ð /#G ///|C21@B|CpBGxb4G""KZkpBGP""xbKZkG GHb#/K@PH""G4Gb#@G]] }(08ݤ@P#k/&#~^^~ (GGGG///BGTG$"bnZk//GG]]} (0#/k///Gk// //#4G^[~^~ ޴(08>@GGGG^GbKZkXàBG4Gb|&|=GKZk? 0"GG@Gb#\C1"R/@b// BGTG "(bKZkG  @ .r H Q J2F >tL`!/Gb#/E(_B<4GbwKZk@? 0GP@tGb#@`"(@+ B(GTG(bJZk(G4G "b#),)H S_G4Gb#e@ ="G ]"}""Gb#_BG4Gb/IKZkGGb#G _G ="Gb#_(!?|G]]} ݤ(08=@P#k///#TG^~^ ~(0GGGG>@0@ @'! @0@@GaGb#0@?E_#B]BGoMZkâBB/XK?G]] }(0@#k///#G^~ ^(~08@޴HPGG G#XP]@G% (B/P/// CDBZr/[rKgKRZBRAFB@ #8B4G@b$@.PJJ3mZk///4#(¤/" /// #C2Bq.SqJgJQ4B1!F //â4G8B@bB.WJJmZk#!1 @#?# d"/x`B."VJJBW/ZWKW?,H (¤!///'fE"/ %.Q2J'JQ3B1!F/ //.8B4G"@bUJJ/lZk%, %H?%.%JGGL"Gb#" (c `GPC }Gv_Hà@H\#`GCcTG%"b#{1_GGGpb`Cc#"1_=XB @à@.q&HPJF>cB1@LZkâ$@//G] ](}08@ݤHP`#/k///#G4G^~ ^(~08GG#GXP]@GGb# zQ_GGG4Gpb#Q_,GG@""b#TGHF///3L_ӡC@G " D4Gb#^Q_4GG= BGh""TG(bkZk/#0 @#*/// BGTG`""(bkZk# !1 @# GL"Gb#FGh0/ LC0@BLCGPCGKv_HL#@0 @HL#G] ](}08@#k/#> /@h^~G ~"[?""G^GGbvZkGTG="(bfBG]]@#/k///(#> /@h^~ "4G[^GGb/GoZkHB }""]?"GPbvZkG="TG@b/BG]]@#k/#GG^~" ^(~08@GGGG#]M@Xc G}/=4 /BGb #HZk/7!D"=G](& R @# \4GGTG8bAGG=GL"G4GGPCD }"Pb#u_H# 4G @HpG[@ZkGG] ](}08@P#k/04G4G/ d0h04 Dl0GT`G;Fp0tpD2DD!Fx0|0DrGD2DD;FDFk//C#C^~ ^(~08@޴HGGGGGGD~ >/ P @/B4Gb"0@nZk @#b"B"ps"0D/eݦB" "X"FbGGwnZkBG4GbHZkG@4Gb#B_G %0 B % ]F0BBG "TGbGZk=GG b#"0@#C 2B _BG/T_GTG `b#@Q@B_  #0@A@//#TGGxb# G"S_ cCe@ðG] ](}08@ݤHP#k///#GG~^^~ GGGGc [(b/` #AaB! "GZk//G /G4Gb#_Gb# @4GG]]} 0#k/0#G~^^~ (0޴8@G= 011 B0G GA!B3/dG` 01B /C:1@CC%"D  G//0B4G8bP"0@mZk @#0B@""XB""b"1DF $"`"G8bmZkGG4Gb# B_G]]} (0ݤ8@P#k// 0GG/ //p[@ {@0 @ 1@"_k//X#^~^~(޴ "(0>8^@GGGG_=GGG?D=////B4Gb"0@pGZk? 8B"""@TG@biZk @Gpx⤡ @ //BTG("="bG e@/?mZk///' "/ ),A0H'HA1@!!D/ //I.B4Gi"bRSJGJ/iZk0@)! @? @ @ G// e@ 0 Aj.jJUaBSF@/"/ .VJJVB֢F/ //*/bJ#Y:KB'K4G/iZk0@J! @? e@j" J.RSJGJRTBRPF@0@ @_//.XB4G"`bUJJ/KiZk0@ @_//*,BJ!H"bTG0@A*H'HlZkB"4GbFZkH A'e@@!  @.PJJA1@!!D /e@B4Gbr.R"SrJgJ3iZk/// B4G"bFZk A @ @_LøB4Gb "4GlZk @/G?B4G "b//lZkG]]}ݤ (0=8]@P#k# ;4G4G~^GG^~ GGGb#/_G "GG4Gb#4GG!"_G "GG4Gb#4GG!"_ӠCG]]} 0#k///,01 0Bk///,01 0Bk///00#tG~^^~ (0޴8G@q.GPGGpb#SqJq>4G GY_G#E"G4Gb#tG# _04G .r HQ J2F >4G/////GG4G%"4GG b#/;_ #GE"G4Gpb#tG#-_/ 㰱 @0@ cGGE"b#4GtGc_0',pHA'H0D'</// C,#G4GGG b#Q4G %"_////à G%"G4G b#4GG @0@/`ð//_G%"G4G4GGb#&_/à G%"G4Gb#4GG @0@/Dð_/à,%"GG4G4G b#Gİ/_// àG%"G4G b#4GG @0@/$//_G%"G4G4GGb#_/ àG%"G4Gb#4GG @0@///_,à #GGGtGp%"##b#/_!8DXDGxDG4Gb#//// M_GG4G E"tGb#%_GGTGE"tGb#_ àGG0%"b#tGtGðð_Ӏ8DXDGG%"4G4GGb#js #$$@j_/àG%"G4Gb#4GG @'1@/aY_/ àGGb#4G$@_ à%"GGb#GtG$@Y_8DI àXDxD0b#$@&@+?,#G1D/9 ///S_4 G8"G4G`b#G2@&@CG_ð&G01@4Gb# @/G_//GGG0"G4GG`b#_ /GZ_G(E"GTGtGb#_ GG@E" b#4GtG/_ GHE"G4G b#tG_/(àG%"G4G4Gb#Gð_////àG%"G4Gb#4GG @$1@/ //_GPE"G4GtGb#S_ G%"Gb#GtGG/_///à@GGbð_ӠCDy\@C/k///GGGXE"tGb#)_hGGG`E"tGb#!_`GGGhE"tGb#_XGGGpE"tGb#_PGGtGxE"tGb# _HGG4GE"tGb#_@GGtGE"tGb#_8GGtGE"tGb#_0GGTGE"tGb#_(GGTGE"tGb#_ GGtGE"tGb#_GGtGE"tGb#_GGtGE"tGb#_GGtGE"tGb#_/ GGX%"b#GtG$@$@//_%#xDXD8DCG4Gb##h_ӠCGGD@//`_GGTGE"tGb#_GGTGE"tGb#_ GG%"b#tGtG$@$@_XD,C8DCGtG b#C?_ӠCGG4GD/` 'BE"_ àGE"G4G b#tG&@ð_ GG4Gb#y_GG4Gb#s_ GE"G b#4GtG$@'@_à G0b#ð&@_ &@Gð_ G_ $@ à$@GG4Gb#M_ àGGE" b#4GtG&@ðð_>GE"tG b#_GG4G_GG4Gb#/_0,H*/àGG E"pb#4GtGðC_G/ #GG E"ð4GtGpb# @0@ ðð2_//#G(E"ðG4GtGb##_G4G]]} (0ݤ8@P#k//G`{#tG4GTGGM/G4G{#/M#tGtG~^^~ (0GGG GPb#G/W_/C/8DXDxD' @/` B0BGGTGxE"tGb#_GGTGpE"tGb#_GGGPb#tGtG/+_ӡC//G]]4G} (0@#/k/// P,0#TG^~G^ ~Q(4G 0G08GGG1 pq Hb#G/_N#GGG4GTG(b#G=/_GGG4GTGGHb#_|/# G4GGHb#TGG 0@0 @#Gr_k=GGG4GHb#TGG#f_GGG4GTGG(b#_/V///# G4GG(b#TGG 0@0 @#G_CGGG4GTGG(b#_<#GGG4GTG(b#G =/s_GGG4GTGGHb#*_$/# G4GGHb#TGG 0@0 @#G_ =GGG4GHb#TGG#_// #  0@0 @#c,CrGGG4GTGGHb#_////# G4GGHb#TGG 0@0 @]#G_GGG4GTGG(b#_////# G4GG(b#TGG 0@0 @A#G _,#GG4GTGHb#GG_/# G4GGHb#TGG 0@0 @%#G_GGG4GTGG(b#_////# G4GG(b#TGG 0@0 @ #G_//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#0TGtG^~^ ~(08GG0GPG`b#P G_Gd#P7@B#]\@Ck//GV//G_//GM/GG4G b#_E//G_//G=/GGtG@D"tGb#_3G_//G-/GG4GHD"tGb#_#G_//G/GGGPD"tGb#_, @/G /GG4G b#_ #$"GG`b#GtG% @/#_C/ #%%B///CGCh_ %B///GG4G b#_GXD"Gb#TGtG8D##_ $@//#G#D_ C%EB///GG4G b#_ӹ//G2_//G/GG4G b#w_ 0$"GG`b#TGtG%@/_ $@//#8DG#_ C%EB/GG4G b#S_Ӆ//G_//G}/GG4G b#C_ X$"GG`b#tGtG%@/_ $@e//#8DG#^_ C%EBX/GG4G b#_Q//G_//GI/GG4G b#_ `D"GGb#TGtG @W_ $@0/#G#_ C}2SBC%//GG4G b#_//G_//G/GG4GhD"tGb#-_/G /GGTGpD"tGb#_4GG]] }(08@#k///0#^~ ^(~08@GGG>{#_Gb#_ =G`b# #[_F #,GGb#GtG# 0@@ ##GG_ =//G# #G8DGb#4G#/~_ 4G` GGtG` $"b#G/_///:C5@ D4Gb#2G _G.G]_+ #GXD"Gb#4GtG! @=/_# `D"G4Gb#tG B#G_ #4Gb#!0@G#_GG5_ = @ #G#GGtGb## $"_`#8DGXD4GPD"tG`b##////QG_NG_GGI4Gb#/ _ #0D"GGb#4GtG! @ =S_///# 8D"G4Gb#tG B#GC_ C }G4GGb#tG3SB@D"c5_G#HD" 4Gb#tG# BG/'_  #4Gb#!0@G#r_GG_GG$"b#tGtG/G_/C/8DXDxD' @/` B0BGG4GD"tG`b#_GG4GD"tG`b#y_GG$"b#tGtG/_ӡC//G] ]4G(}08@P#/k///G{#tGGtGG5I/G4G{#/I0#^~ ^(~08@޴HPG GGDG //dG]"`b#G eB `/ @}b#C$@0@  @G] ](}08@ݤHP`#/k///#4G~^^~ GGGGb#h"/I_ӤGG4Gb/'8_GGP //B @1"pB Q¢Ѳ"@BQbqBQA @G]]} 0#/k///#4G~^^~ (GGGG؈b#8"I_ӨG/J(# /!0@ !0@ !0@ !0@/ !0@/?G"4G؈b#/gI_G0@4G(bP@G/7_(G /// 0@@!  d0@@a/0@@ 0@@ 0@@ $!/B@@G]]} (0#k/{# #4G^~ ^(~08GGGG^ ~Gb#"I_(# /B !Gbe|Zk!/?GGb# = ]/@// BGGGG@b#G0"R"/gI_} aHG] ](}08@#k/q#~^^~r 1(0޴8GG @GG"G ``\<@Ck// c@à c@à cb#@#>@G cTGGTG`b#@#c$E0`@GQB rB/@e//7_ӬGG/`//DSB&@/0BR"Ss"0B"X#x0BS`{0B; 3`â"0B 60B"  Y0B_0 B1  ? HEBF/// B#TGP"(b^ZkG4G4Gt b#_ Hd3` BTG#(b"^ZkG tGt4Gb# _ Hd"/// B#TGp"(b^ZkG4GtGtb#~_ӠU@d`GTG#xb#"1H_`GTG#xb#"*H_ HG]]} (0ݤ8@#k///#^~ ^(~08@޴HGGGGG ^//BGTGb ^Zk/0@@/?//%H]b#"BG_///0BG"GGpb#GŰ# chR"SH_ HG] ](}08@ݤHP#k///#4G^~ ^(~0GGG>GPhb#8"G_Gb#=@// b#3@]G](} AH ]0@#k/#4G^~ ^(~0GGG>Gpb#"G_Gb#=r@//$ b# @]G](} AH ]0@#k/#4GG~^^~ GGG/ ///0@B0@B 0@B0@B/0@B/" ABG BQ_BTG{#5_ӬGG/$`G//0Bq"R"r1 "0BҲ1# 0B1 0BQ#R1 0B1 21 q 0Br1/?PBG]]} 0#k// GGGG // ]G } hzZk GG/k///GGk/#TG^([~^ ~(0GGGG@"0b3aZk׀@"W\@tCk///C(G"PF]0b8"] }GTG(0@#/!k///(BCTG"0baZk//G]] }(0@#/k///(BC X""DTG0b8"`Zk//C# /(BTG0bP"c `Zk#/?(B4GH"0b`Zk/G4Gb#gH_///(GG]0bTG] }(0X"@# k#4G^G~ ^(~08GGGG(b/4_GGGGtG8b#5_G4GG4GD d(b/4_GGTGHbC5_}G]G ](}08@#/k///#4G~^G^~ GGG"@bn5_G4G0b4_GG4G0b/4_G]]G} 0#k///0#TG^~G^ ~Q B(GGG(b/4_#GTGb0 @@ @# #4_}G]] }(0#k//k//#3@^ S~H^P~X`h޴pxGG^2N;!H2AK@B DDG~^> F [[/`X[  L4`C5TC!!H:AK(=0](]0}[[BjKYG[8]8 G@/C BGGBRTBG{|Zk$@@b#G0@@@_ GB? B E@GG@/c|ZkâB#C/ G@]H]P}X`hݤpx#k//p#8@FX@F^~^ ~(0GGGG3BUF//â@@dB`//4G"xb#4GGm_@/GG]] }(0@#k//#GG8^~G2NSG@^H~1JPXB`G2TC/c` >B;JzB~>[`C[#[QG[G:G@`X[^[O":B9B4J0J ( ](}[[jKYrFG/[0]0C@8CB- WG0@@8CCC`@ZBCU{ZkWG BD@@BGWCC0@@8C`@ZU{ZkW 7E@DGG///wUBG@@@@{Zk@G8]@]H}PX`p#k///#G4G4G^~{#"Gq_G] #Dk//#G4G4G^~{#G"_G]4G #k_"0a G/R" 1"_4G4G///.u!J"A"x6JaBTJFu2J>.WJ"Fx6J>.TJA"Fu2J>.WJ"Fx6J>.TJA"Fu2J>.WJF>.TJ"x6J A"Fu!J>.WJ "Fx6J>.TJF> .WJu2J " ! Fx6J>.TJA"Fu2J>.WJ]oBF>.TJF>/4GA#/.u8J8 X"v!JBTJFu2J>x.SaJ8 vFv!Jx>.TJX"Fu2J>x.SaJ8 vFv!Jx>.TJX"Fu2J>x.SaJvFx>.TJ8 v!J X"Fu8J>x.SaJ 8 vFv!Jx>.TJF> x.SaJu2J 8 #vFv!Jx>.TJX"Fu2J>x.SaJ]BvFx>.TJF>/?0Fu1 JxQ Jrq Jaq J4G4F04JFC07vJFx1 JC06JF04F4F47JFCvQ J43vJvFv1 Jqq JC4`5JF48G4G8`3JvF8`\4JF\pk///;/k/// #4G`^~h^p~x޴@[>^~޵GӠGBGHb^" ް$(,04gAZk CGb#8G/<@ %-F%_%0BG8b TGiAZkCG @BG4GHbCAZkCG///G%$ ݠB8FD0H0HDDPFFFFCCC}EH`8DFC PD_#PX=GCFFFCCHFDD6HDDhCCC0FCCC{# 0`ECCCC 8E0Dpxݴ}ݵ}]=}ݶ}]==/k ݢ,t"}H/B.,.HEB6BwB \BC/k///$]}wB@G$3, 3H@+@F`5%@ /?GCCWG`/`K5BG`=?G0FCC/@:G  `/`K@GGF$/š///%:A G0@CQC'F1B/+@`%'B 0BG%TG8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////4GyJXK!G?à}J`/,$//e///e!AG0 @;@gG{C/+ egC`0BG%TG8b/[@Zk`E GD0]/A@-A @D@*NA @0],= ).A @,=(/(A@(////TGyJXK!G?ݤH//(=]h:! .J7CB9#/C7Gz/zKUe@k@ LE@kD///,Hu@@&D ݤ/xFF؋F xFc@B/k` `} pE D"X}s/=}+B1"" D}qA//`q.uJkB.ݤJ%B/B ECD DFDF$/e///E;AG0`CzCGGZC/+`F EGC@0BG%TG8b/Zk=`E GD0]/A@-A @D@*NA @0],= ).A @,=(/(A@(////GyJXK!G?]$}KGz!`.}J3AjB/\|B\Ck//$///š///8A G0CCFB/+ 岷B0BG%TG8b/gZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////4GyJXK!G?$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/#ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////TGyJXK!G?R$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/~ZkyEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////tGyJXK!G?$///š///e!A G0 @;@gG{C/+ FegC`0BG%TG8b/~Zk=EGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////GyJXK!G?$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/W~ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////TGyJXK!G?$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/~ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////tGyJXK!G?Bݤ2E4}<@ݡTG0@C 0`C8bEE0B4}BSA8 QB/}ZkC8/<ݱ%@]8D0]RRB3ARTBr6QA@0B/G1AA$Ҳ 2P BrM 2//š///!A Gp @ @D@/+ f@0BG%TG8b/}Zk]EGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(/////G"o#zJY/K!:G/?4ݡ.qIPJF>.TJ>@0B(,0@D //ݤ@}////`G>0]$F@/e///9AG0 C8CGC/+ @C0BG%TG8b/;}Zk`E GD0]/A@-A @D@*DA @0],= )$A @,=(/$A@(////tGGGyJXK!G?0=:QC2q@C@@}/`G@]8=:1@C@ZC@]@@ @ BD/@BR"G ``$(0]4ݢ BA,=C 6BBF/yHXKG?š///%1AGp B!B'D!@/+ @%'@ 0BG%TG8b/|Zk EGD0]/A@-A @D@*FA @0],= )&A @,=(/&A@(/////G"o#zJpvItHY/K!:G/?-NIE=o.S{JtFo> ݤ}/c //$ݤ"BBDD=$ݡ.G! H}//`4G/Y. YJ9#=@`/`K / EA&UAF+// E]$ G  ,H#/ AM.MJ, EA`*AA! D/ //#DB/BG4GbTZk///`E=$KkA kA0D A+fAa. aJ! =/ A.J///BG4GbTZk///D=$D@@0DA$@a. aJ! =/ A.J///G_#`ATG DC @:G;G &` /`$EE D `.`J  A.JTGEE`z /,=/' /// , $] ݰD @.J ݰ A.J@gD. JD// E@-IG%/////8AGpCCFB/+ @岷B0BG%TG8b/{Zky E GD}0]/A@+gA @D}@*GA @0],= )'A @,=(/'A@(///,=GG!(b#4A2qB` @( //=@%8DF@ @ PA///// AG @ @E A/+> Aű0BG%TG8b/G{Zk5 DG?D}0]2A@3cB@D}@*CA @0],= )#A @,=(/#A@(///,=AG!GG b#=@&@G2q@_ @G,=Gb#GGX @,31@G!G '@!2q@ @2AG,=31@Gb#F @!(U ///,%//š///Š+AG 0`AfA D@/+` Ű@0BG%TG8b/zZk EGD}0]/A@#d@@D}@*DA @0],= )$A @,=(/$A@(///.GvoJUJ!F> ,%/////9AG0 C8C GC/+ @ Ce0BG%TG8b/zZk E GD0]/A@'@@D@*NA @0],= ).A @,=(/(A@(///.GvoJUJ!F> ݤB4=n @]DC8:1@Cn [ZC@C7@LlC!/'///0:@Ct!@C E/#x,8D/ d F/P,8F/ <LXF/@(l xE/`lxF/ ` @/:1@C!F_/4G//G,$///;A GP`CwCFB/+`& 岷BŰ0BG%TG8b/zZk DGD=0]/A@!-@@D=@*MA @0],= )-A @,=(/( A@(///.G"xJktHWJ!F>o/[tKkGo?< //h*//,=/ /// = G$}h}] EuAAF8D8 F//// }.#DGJuAU/UKuBBUBuBEB8EGF8`GD@D;F /8KtA#,HuBBEUBuBNFB8`GGD8D*D'F/X/XK#G lA . JuBBUBuBvGB8DVF8ED/D.F/ ,H#`A`/`KuBBUBDGFDFBuFFz .J lA"/ / KEGu@@`GFuBB8F8FDD5F$}EuAAh]=8D8 FD/.F  DJuBBUBuBFB8@F#G8`GEJ`D;Fq.JBUBuB uBB F8@F8F D ,GD7D5F^`,H  DuBBUBuBlDB8@F#G8FF$`D6F/J-IuBBDUB'GuBB8@F E8G DD8F/6`/`K uBBUBwD#GF/`F BPGD ݡ @.J  An/nKFGuBBDFuBB 8E8FFD0F //}c }}s"}?F $////%.A GpAA$D!@/+ `%$@ 0BG%TG8b/xZk DGD=0]0A@1,B@D=@*LA @0],= ),A @,=(/( A@(///}ݢ }"`.Jv@/K/=Y/9#YK ݡ.n/.!nK/G=$Dn@C }pD,@lD/`A.AJ rA.J,H ݢ . "J///TGxݥ,=GvAG E8/A` 4G2qC,4GG!,A2qA @!$//////.A GpAA D@/+> `尧@e0BG%TG8b/xZk5 DGD0]/A@0 B@D@*LA @0],= ),A @,=(/( A@(///,=GD!ԡEGG(b#6A2qB @(=//////e'A Gp@@ cE kA/+ecA`e0BG%TG8b/wZkDGD}0]/A@+mA @D}@*MA @0],= )-A @,=(/( A@(///TG,=tG(b#G @!}$} G$ cE `/////%0A GPBB$D!@/+ %$@ 0BG%TG8b/wZkDGD0]/A@0 B@D@*LA @0],= ),A @,=(/( A@(///,///Š///Ţ7AG0BBFB/+ŲB0BG%TG8b/GwZk DGD0]/A@0B@D@*GA @0],= )'A @,=(/'A@(///G//.Y/KJիBtFzJ!:G/?}-ID{#}š///%2AG0@BQB$F1B/+@F`%$B 0BG%TG8b/vZk= EGD=0]/A@1&B@D=@*FA @0],= )&A @,=(/&A@(/////G!o!zJGG/ Y/K:GB/?o/ݥlK/mZkA E/.JUJD`HF>ݠ@ 8D///G  =pݤ/ "K8CX.XJk@D`$}D`,H C.JDwHD4GwA HW.WJRWJDswJSFW>/k@e@CFeD]@[Gr""/k@.J@8 FF/`B/`/KxFR#"R"@C".JxF.J B0F/=D}G@ ].!"J$= F/1D! "`=//@G\?} ]"$=G@/R//uk@U@$ݢGE$DF"5 / F//// ]7/7K"@YC9,9H$BFBCF ?Gz KUAA3F4F0F/ ,DHD<"?G///C ?G0B"r. XE8bSrJr>7.7J+F P""/UkZk0B@"X""8bOkZk0B@"`""8bIkZk0B@"""8bCkZk0B@"@""8b=kZk0B@"""8b7kZk0B@"""8b1kZk0B@"""8b+kZk0B@"H""8b%kZk0B@"""8bkZk0B@"h""8bkZk0B@"""8bkZk0B@"X""8b kZk0BB"h""8bkZk0B<"""8bkZk0B6"@""8bjZk0B0"P""8bjZk0B*"""8bjZk0B$"""8bjZk0B"""8bjZk0B"H""8bjZk0B"""8bjZk0B """8bjZk0B"`""8bjZk/$=DD?DFFGCCCF?G E"@FCCCE _E ?EE0}CCCG CG(]8=CC@HP¤ ///Lf"P=@gC$F @{sG`//BG4GbMZk,AH5A2FqDDB/ JF/BG4GbMZkA5A0DaDDñA5A2FqD l@DB/`F///pBG4Gxb{MZk &E 'B1 F BG4GbwMZk///,8DB/ 6J/y //`BG4GhbkMZk///m,0DB/ PF/a //BG4Gb_MZk///U,(DB/ F/I//BG4GbSMZk@ &E 'B1"F7 pBG4GxbOMZk0 &DE 'B1!F' ÀBG4GbKMZk &$E 'B1 /BG4GbGMZk,E BFÐBG4GbCMZk DwHD4GaA$HA.AJRAJDsaJSFA> 0A0B@""  4GL"F"/$///F"F"F"#F"# F" F# #"`##//? !" -INIEoIE =-IFMIwJ E= G/`DC#cDw@K`4G#yH GzA.JPJ`D`HF>=$=1@8 D3G/ X//]&p=CXݡ.! A@JR"kBkBeBeF5EFzG//r,lHk@8 FQG @/ ////KxKF@=! "A ,Hx Dm L/, AK+@!Ff eD",HDO]ukBXEUg@G`FS"sFw@J`/K`rA-4G3uJ GIOIwFwJE=i///$ݠGL#E]FG/@/// ݡt,tH"AC.CJ$=BF`CCFDuzHUgBkBFFD/ /XKG?"G///FD CXgF-NI=/`4/4KF;"F"$///F"F"F""F"" F"F" """"@// G +"" ,HFHGxKD <K/UK`DZUKcuHCGK?/0B8b"P""ihZk0B@"X""8bchZk0B@"`""8b]hZk0B@"""8bWhZk0B@"@""8bQhZk0B@"""8bKhZk0B@"""8bEhZk0B@"""8b?hZk0B@"H""8b9hZk0B@"""8b3hZk0B@"h""8b-hZk0B@"""8b'hZk0B@"X""8b!hZk0BB"h""8bhZk0B<"""8bhZk0B6"@""8bhZk0B0"P""8b hZk0B*"""8bhZk0B$"""8bgZk0B"""8bgZk0B"H""8bgZk0B"""8bgZk0B """8bgZk0B"`""8bgZk/$=DFFG?DDCEEF?GD"@FCCC E ECC0}CCCCCG (= GC8]@=H B///j=G4G/@E@B`b//JZk/'")@!0D A5AESF rD@//BG4Gb //JZkA5A0DaDD 'A5ASFrD)B1!J2F HDpBG4Gxb/JZk/')@!$D @DB//G4GbJZk/')@! D *D`B  G4GhbJZkv')@!6!Hp 8DB//G4GbJZkc/')@!P D\ 0DB//G4Gb{JZkO/')@!0DH *EpB  G4GxbvJZk>')@!"D8 *EB  G4GbrJZk.')@!!D( (DB//G4GbkJZk/')@!/ DB//G4GbcJZk/@D=?Dw HpAp. D4G!1HpJ4DSpJtJtFp>ݦ0A0B"ݶ A" 4G3/$=G"} ]G#//@G"} ]G"$=@}$ݠ fD#-#Ic } A,H ?Ew I E 4GzA!!I:.:JQ:J2DrZJ2F:>}$tB8`F9G///."J/*///"+#K!+!uAF/`JKk/[yK`Gk<"uA-FlJCjHIlD/+< "uA-FpJA)HI0D/+<+.K"2JqA6ݤUBDE%////e6AGpBBhFsB/+>ehB`0BG%TG8b/pZk5 DGD}0=/A@+cA @D} !#@@0=,]@2CB@,](/#B@(///D=G"(b#G!6B2qB@0=G( 'A2q@/K@0/////%$A Gp@@ (E )A/+`%(A 0BG%TG8b/spZk E G_D}0=/A@+mA @D} !-@@0=,]@2MB@,](/-B @(///,!Dðue@g@F/PHxoDSQ@kDZ#M`.JxFI,%///E///6AGPBB D@/+ @0BG%TG8b/pZk @E GD0/A@-A @D0B@0,}`3gB@,}(ݢ/'B@(///O/4GO!{KZOK![GO?(]/-I*I/=$//////#AG0`@h@EA/+`n AŰ0BG%TG8b/oZkeE GD=0/A@)'A @D=0B@0,}`3gB@,}(ݢ/'B@(////yIXK!G?(]z/zK[zK!lIlGz?$@8D0= +A2q`AG[@@=G// 7//G3//G///G+//G'//G#//G//G//G//G//G//G //G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//4G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G{//Gw//Gs//Go//Gk//Gg//Gc//G_//G[//GW//GS//tGO//GK//GG//GC//G?//G;//G7//G3//G///G+//G'//G#//G//G//G//G//G//G //B84GbnZkeG#AeG`]h]p}xݤ=]}ݥ#/k///T?9#R/"/1,{J""vTJAJyWJA1H;D1<.UJF>/XKG?k/q/tJ"1 xVJAJGaJ[qKtGtAJq?.q#WJvJF>.PJF"ywJ>,@HD</XKG?k///qFG3 /?#~q#^;BsCSGG1`/@/."a"# ! TKUJ@#vJF">.a.J@#@GA#tJSxJ@GtFa>..a"JwJTJ@F>>/.KwJUJF>/D /@/. ! D@KWJsJF>G] #x#G4 ~^FGB@q#;BtCTG2//@/.""!# ! UKVJ@#wJF">/.K@#@GA#uKTJ@GF>.."JxJUJ@F> /. KxJVJF>/D /@// ! D@KXKtJG?G] #<DG/ tGk/a/.!" bJtG`FqKJ !B/`k//!B0!H3!JCp# pC {BF~//?FUBu."SuJgJ3!J?FFPBw`J"B/p.SpJgJ///0!J.0 BF4G?G6JYBJWJ9#FxKF>/y.SyJgJ///0 B3J0 BFFWBw`J"B/XKK//0 B7!K/FP BF5JKWBFXK"y6KG?/w.SwJgJ///P B3JP BGFXBw`J#B8/Y8K'K//P B8J.p B3!JG {B0JJFWJxKF>!B)///?FPB."VJJ0!J?FFYBwJ9#B/y.SyJgJ///3!J.0 B`F4G!B3uJJPJyFy8KF>G/k///0p#G~^G4G^~ (3C0޴8@H>PG^G#G / AG?"GGPᤰ/_cZk1FB///G///8C8`FD/ `v%1@T@D1`G0DF4G4y.yJ9#cB@`\|BCk/9.4G9#9JGBQ/`JZQK@GGQ?///.J9#p7B=B//BFFw J1C.J/4G:zK4G:Fz`JC/ `/[`KzG`?01B /GG9.9JQ?B"?BBO/C`///z.4G0!Bz#tH@GSzJtF"z>.sHPJz#FsH>.PJ"FsH>.PJz#FsH>.PJ"FsH>.PJz#FsH>.PJF>.sHPJFsH?B>.PJ Z#F>" ///z/4G0 B`zJ"[zKZ#`Gz?,H9#`7@B@DDw`K;C.J/W4G1QK4GFqtJC/T/ZTKQGT? 1@"/GG4GGG/Q/4G{HQK8@G@3/Y3K;G3?0BP#1"s"_GG//GGG/t/4GtK{9J8FY/ZYK[GY?0@""9#GG//GG//,4G"B"pSK@HD"<3/`TKY4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K G3?s/`PK[pK" "`G`TKs?3/Y4K " G`SK3?s/[sKs"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K G3? vG  hG/` .TJG >//6 GG///Y/9."PK9J9#0JJ0J0B0C/{y/yKՁBBTGuy..9"qJ9#1'J'JJ1!J9#B0C/g:1@ZRCZYC%@a/.y/y"9#JyK9#3gJgJ3aJ3B/S?4G9#/..DY#~#JJ9#F0JJ@0JBT@0CA` )C+@ !EQ@ {#iC/AGGG@mcZk/ P@0@'G9#$64 F6/G9#9#//9#//v4`Fv  //D1E0D@DVGG]]} (0ݤ8@H=P`#/k///4_Z#2/?1"/AGa/_Zk/// @ѠFPBQqk///Gk/#GGG~^{#G#GG^G@G] #k//p#~^^~ (0޴8@H>P^X~`hp޵xG TBGGB#= uAtF9`GBG5uA +BGpUG"5BGG1"!FG `BP.PJUBF4G/ caF`Gb#L_  )@C@/C AAG2F A8@G@c8A/`/// @ @FF6CBG_ AC nC@ C2D/G ///u.FuJ"A.JA.J/`U.UJA.JA..1A"J/ .JAv.vJAS..1A"SJ/y@.JA4,4HAA/.1A"AK/m .JAS.SJA..1A"J/a@.1A A/ A[@/5,5H"Aa.aJA.JP .1A A_9.CAiô ACG C nCVG9/u.FuJ"A3,3H9 .JA..1A"J1.JAS..1A"SJ)@5,5HA..1A"J! .JAt..1A"tJ`U.UJA..1A"J@.1A A/? A /.J"AS/SK`.1A A9.CA/// @0AE@@0,0H@.J/@?DA.J//?DA@/@K AECqF /'ݢ=޶>GGGGG`b#GK@/// ////.1A0A0A(1A/G// // G]]} (0ݤ8@H=P]X}`hpݥx#/k///#GGG~^{#G#^GG @G] #/k///# $~C ^S>^~^~ (޴08@>H^P~X`h޵pxGs3 0@B!GGG 0A!~#޷>(,~048#ݷG<@0UA,C E {#lC/%ADGl#@ {#eC/:@AGGe#D {#zC/G@=D UCC]DH]z#DF/// {#`C/#@aDG`#L {#cC/GL]:u@}P}CAG~#_FD {#zC/3UCaFG]z#/ {#sC/_G0uBGF}Fs#/// {#pC/Gp#T0BF {#pC/GTCXD F // (@D]B@ B0R""pG6HCCL}6" 7@hݶ`p{#x]HPP] 6B= BF4G?#"R"6//BR"#;5""78{#pҢpFpBҲ;578pDp@;578pDp@;578Dp@ J @0ݢB///;50BR"78{#"2"##Fp B20B=GF  $ݲ$ݠ@\ B 0@Bݰ//@+0@}(=B= 0@ݢ!ByG ݲ/}@%PB}h=C0=}Z#s"BF, =@ @{1B8F0`C*"C@=F8F*B}]=]=/*E<=4Go=ݡ}87ABBp]xݢ EAA .EDB4G;A; }C 7E 9EF F& `=8}</ : //:0A$"$"$#$Z#\865zx6\5\65zx6565zx657I Bzx:8vu/0=A/ ///0=0A""#Z#A/? //)/")K)!B `\BtCk/ݦD/`}A8F $}/  =,]F/ ,H@B / K/e/eKXD/ F/ .,J@.J //.J 4A-:IP};IGRA:# :C yC[G/@///2 BR"0!J B#D2rcFrDFrcGr.B /0 BR".BF ///46AGG( A`@@BY/XPBQB~#9C!GHOB @// {#yC/0BG=GB!AGVA^Zk @ y#//6 96CQA!GNA {#yC/0BG=GGAG^Zk85AWA B67Cy#QAF(LA / {#vC/0BAGݶGG!AGG^Zk @ G?4G:I@D}S@G:#B!JG^P} :C 9@TBAG[BVBD /@CB`s" " {# "BG``638636363636363;3!H 9@/?@G0@pC s"0B"{#"G;@363/0@40@CR1@0 @D@ZQCQ1@ڱ0 @-/49AGG(¦5AuBB5CY /S@Q@~#7CFN@ // {#wC/0BGG@8AGYA^Zk6C w#//67BQAF(LA {#wC/0BGGGAG]Zk AAA @9Bw#QA!GOA / {#yC/0BAG=GG8AGG]ZkC G4=G:I@D}S@G".@2!HG^P} B WBT4@RG[;@Y#@D@/Ԣ@B`s" 9# {# "!@`ӲY`SԢ8ӲԢӲԢӲԢӲԢӲԢGӲYS[S2H WB/_@G0@pC s"0 @9#{#"G[@S/0@40@CUQB0@BD@ZQCQQBڱ0@Ba/=D/}A8F$}/ $}@.J$"#@.J///%/%KGB6I6 0JJPC.J8F|4AG* P} I 6@ @FWA////w@B"8AJ CcFw7#G7WCGWFעFײNB`/w0@B"NBcGw? ///=D/}A8@G@@$}/< $=@.J$}#s"@/K///.JGB:I"!'H'HAB.J8 D 4AG* P} I B @@GQA////ѢB1"8J CFѲFQCFQ1#D1QCGQB/q0B1"BcGq ///I.,=IJ)!Z D/ ///}E$}///D?E/,EK@ / K21@B )!`.`JD/_//4AG/s?8IP}x"6I xB BPAG//@C";AK sCDFFPCFPGNCQ/00@C"NC#F0HÌ}E $}///D..JJ 21@B)!4D/| _/),"4HD @/@}A8 Gl $}/h//e.,eJ@ . J.J.J?DBTBD @wHD4G2A H2/R"2KDD 7A1I)!"?DC 4A*`P}:I B PC:FGUA ///`B"9aJ 0CFUCFUբFղ5#D5UCGU?nB/0`B"nBG_ ///=G".P}JGN#@np`Gx`G/ `b#//# @.pDq DF).)JS#BsH@T4BU5B"Gp`F`BG/@Q8B@})/)KY;C , H@@E . JPBpaFp.4J #)!G4///).P}? GL]D=)JW#B[:BY9BpF9!C/ G/D]Q2BDݢ . JPB.JUBF4E!4!+//.J! ?D ///Y#C9 G/ ! ?D/@RCBR@F @! ?D/ Q#B1 F ! ?D/??D !4!/Ci/ "" BiKScBsaF ` /KBF/ G// BI"0 ]GG,=H @7@\@LCk/4G///A..!## `FYJJ2GJGJ2AJ2@///B/w/wK؁Fw.#xJ`FW.i/iK7"QJ5F?iKTB)#DD/&i.I..iJYJ2@J@}H=QBB[BZBXB ///z `BxI.),IJ0B"1"4H{#Z##ABB?"7,47!.0A:AG("pB)HBJ"!'HXC'H!!HAB[@G/yU@Q@~#)C !EhN@{`// {#iC/0BG=G@7AG{ZZk//g BPAi#8)0AQA !ENA] {#iC/0BG=GGAG_ZZk AUAK @QAi#)5A !ENAB/ {#iC/0BAG=GG5AGGAZZkB/ G//4G;I@]T@G"B2JVBIB\ B WBZBrGGD@/@B`" )! " Z#B`64I`飨T86464646464G64IT:4VT)2H WB4/_@G:0@p C "0B)!"Z#G4V@T/?4[@0@R@0@0BWBұSC0CB7 /// ,@"D]= H)!T@F@E @A f @vEFFaAWF8bD@B } /&yE @$ G///A`AFEDB ]8D$]}8lAGG2eB,} XBxG G`4@@ AhBGGGtGpb A/UZk@==@F 1$Fc?//E.e"SJXAF@FW//\ݢD/֢F/K//$=@//KE/EKXGD/7//ݤ@D/w//\D)qi,4=1A "i-(¦GGpH!A#gHa!@iI)!gH @#aH!BcAZ ///vTBQB~#9C!GwNB`// {#yC/0BG=GB8AGMAXZkC &-C//6DQAy#LA {#fC/0BAGݴGG(AGXZkAQAf#KA9@!G MA/ {#yC/0BAG=GG AGGXZk@ G4G0ID=P}G"A;IG_@} B tCL@QAFKASAD/ AC#C`! s" 1" k! A` 1,`8심ql 싸 QLӢ̲ql Ӣ̲q7AK Bl G Ӣ̲+,Ѡ̰/NC G 0@Cp@B !NC 0As"1"Gk!  Ӣ̲/0@4=0BYB0BD@TB#AHB$Ա0By@, , #"BH H)!G G&HH&H@ /-K"JBIk!ՀAA ,F"_F`),Gi#t[KA;H4DIv,vH8`D5a@JF@5a@TG`,"HG A .F! i#,JG 8E/ ``.aJ4D )/h[KY;K(G)?#/uAAFGwJ F.A @ AJF@D B4G+ J/ . J`EDG"/),htJA4H(D)<)/I#:K"GG)! # .cxKWJF>6q@TX}$1BVBF@G֢GKB@BB//@F11 B -B$qB11 B 6qBk!L K&-B11 B-Bp f ``$q@  /@$q@  G_~//)/I." #i#"7KXJ7JR[JJ7Jw@`#1`@)! DaHhI`tHHFI>),A4H D)///).I/"6JIK)!*A=1'J(A'J F1!J1C4*//],@FHR"*]r-rIR"/$`]2.2JR" ]r.rJ R"]r,rHR"/`].JR"HB]JB @/}3,3Hs"> }jB/}j@4.J""!F/ #.-7JI(B.c J4}4= AG}!Aa!@ @@/ZG(/mS@Q@6CFkO@/`~#/ {#vC/0BGݶG@8AGUAVZkC(B//6EQAv#NA {#hC/0BAGGG,AG@AVZkA6AQAFmh#kLA`/ {#vC/0BAGݶGG7AGGVZkBG4 G0I@D=P}G"B;JG^ B tCC@@BFQBSBD/ACB`c s" 1" B`Ѡð`8㋬qc㋸qcSCqcGSCq7AK BcӠðSC`c/NC`G0@Cp`C c NC0Bs"1"G SC/0@4}0BWB0BD@TB9ALBdԱ0B7, - , #!I" "I H(I@HI(I(@ !1 @?D!HcHs0HD <).Q0J3F)>///.i/I#JiK)!5JJ5J uA +A)!//.)/"!J)K)!4JJ4J A ,A / K --II I-I)!,, @DHpHA,H0D,<=Q/q"{HZSK[GQ?///\}@@ uE wE/$%#4C/K///$}c #C/`m,!mH//%, &HG$@(IIA.J5A@.@J///$=}1"s"@ 3.3J///E/EKG HHA.J5@E\ݢ#}=$=@@ wE vE`C,H$}c "C`p,pH///.E"JGb$=@!'H'HaBa/aK5 @ Q/QK///$!"@-I///-IG1'J'JqB.J5 B1DE?Àݢ$ݠ@/`-I$#"@/K///.JGb=]@&HYGHf@f/fK8Dj/?$"B-I$}!s"B-I///.%"JG HH`@ , H8DI}#$}@ EC@`///@.J$ݠ] Z#C,H///%/"6KG$@0JJA.J8F//w.wJ$=1"!@ ,.,J///e,eHG\@3gJgJA,H5@ D G//21@D=P;1@BRKB81`C[kCR$1CX C;Z@ءGRFGGWAQAA4/<@}CA/41Bc B$q @&1@41BZ#1""($& B$q@&1@c 41BB41BB : 1$q@&1@c ZQ ڢò `$q@&1@c :7G/?*A'@-IG,A7A!\A$C/k///4G///!"i/i,uK5JJmH!5Ju@A}`.JF/@@ED///'///.JaD/k//8= n/ c// _// [// W// S//8}N`ݠ<`}h4G@@p]x}Dݢ-DT#D` TC=@CF3`///Ak!"R""d72֡d˱7d2vkנҰ;I zCWR /0ݠA////0}0Ak!"R""vAk/ݡ4G0XB`b0@E6I@ pE#ESP@/ZZkXB4G`bOP_AZZk͠ D /h`DP`@h///(ݡ$= ]}g)@$@ *AA`ȱ砄iE0=4Gp]4G""x}/@F7 @/e ///ݠ}G@C(CG S FVG EB`@ B'*// 8Eݡ0n0@dA/HBQ@TGPb/kZZk]HBTGPb  QAbZZkݠD t///$ݡ ].CA}@ FCC#E&FCkK+B`˰$ $DC@ //O/BP0B=!0=!C0B0 BR"s"aGB?ݡ0A G 1ΡXANA///= 0@A! ЀA#YZA 0@A@yKA 0@A`9AA 0@A YRA 0@A @UA 0@A9YA? }$=(]A##AE%@ @// G]]} (ݤ08@=H]P}X`hݥpx#/k///8BG@b/#OZk///C#s^~ ^(~s"08~qB@GGGGg`/`/ `KFFm /S= ."0J@.0JJAJ =0JPBM%@a.A#zJaB8`F$`G!"tG(bY@=A%@=#"A.AJ! AF@=.Ja/7JJaK7J@Ba.A"rJAB8@F"ݢ/6#Kv/8K"KpK8KBGB(bGtG*@=/%@@ //GGtG" b^@@G/G] ](}08@P#k///=4G! 0//#B^~^ ~(0G(GGG// ," H !D `.pJ ,0J H J0J0@@=#@? //GG"b#@=//#@?4GG]] }(0@#/k///G//C# s ^~(^0GG3 ,[>H@\@]Ck//A/G"{#AK= _=pDA"@pFqFx FrF/ aD./"JK"5JJ5JC7B/}4G0///4GP.0 p."p#AJpJ""!'H'H!!HaB} P/[K/:GKGKK":AKZ@B]S/=.JB"BBp@D_]R"]/GG ](]0@#k/X@}@BE/0,,F2@B F0HH"1"aB`Ba/.aKJ DEp/1,pK1HtB`Bt/"1" ,tK HF7p/.pKJaB`Ba/.aK"1"J D)p/1,pK1HtB`Bt/ ,tK"1" HF}@B/@///0,,21@B0HH"1"aB`B.`/J`K D/_Gk/4Gk//#ۦG~^^GG{#ђFBVd_Ӏ"G]]! @@ #k//;#~^^~1@ (GGG/5 G3/0BG4G8bD /@WZk/( "0BG"4G$8bWZk( $4G BG2DJ(b4G2F$ 'NZkDGb#bGD s"_@@G]]} (0#k//#4G^@[~^ GG#CHbNZkG}b#GGG"i_G]] C 0#k//#&4G^~s"^ ~(08޴@[HPGG_&PDܲR"DGG>G?"b/OWZk//GX/GG//`B@8bRsB/ ///@S@s/`///G///.qH0@_"@0@PJF>_/BG4GbpZk BG4G(b5pZkD""D@F/#0G#cDCpB$HbGD4GxbwMZkGGG@b#g_DEG]] }(08ݤ@HP`#k/#4GP^h[~X^`~hpxGGG#pb8<=C@}DLMZk8}D=`@"GG3P FӢ"D0D?@/Բ5BӢs""/C0 F2@J1 J?DxBԲCP@$4Gb GXFQF B$=/ (}H/VZkxBH4G,bVZk,0@BF4Ga/(]""DG<}G^GGb#s_Ӥ@P,E2aHC`G0@ݢr" rB`BGWF//@/// B8"""TVLUV46uvUVt:!J SCv_#B/ `///U0 B""#B"V?B4G bUZkB04G bUZkGGP]X]`}hpx#k///B3B#4F^~ ; ^ ~4G (08GGGG@B/ @[HbDGLZk0@`B21@G=$@$1@G d@tGhbopZk,@H< ///PBGGTGXbKZkG]] }(08@#/k///0BG8b/OKZk///#4G~^^~ GGG [(b//UZk4G B(bvUZk4G# B(b!D#/kUZkG]]} 0#k P,0#G^~G^ ~Q(G 00G GG1PG^Gb#;_//# GGGb#GG 0@0 @]#G*_,#GGGGb#GG^_/# GGGb#GG 0@0 @A#GN_GGGGGGb#_////# GGGb#GG 0@0 @%#G_GGGGGGb#)_////# GGGb#GG 0@0 @ #G_//,#=4G#G]] }(0@#k/#^~ ^(~08@GGGP{#b_ #,G4GtGpG#b# G 0@`##G֨_//G//#8DGXDG4Gpb## #i_! GG`E"b#4GtG @_// #hE"G4Gb#tG!0@G#/_GGG4Gpb#G_4GG%"G TGtGb#_G G8D4Gpb#G/_4G / #G @#G%"TGtGb# {_GJG8D4Gpb#G_ #GtGGb# 0BG%"c_ #!0@#./#8DGXDG4Gpb##`#_! GGpE"b#4GtG @>_ #xE"GG4Gb#tG! @#2_ #!0@#GG4Gpb#ө_4GG`%"GW # GtGb#! @##!_G1#8DGXDG4Gpb## //$_"/ GGE"b#4GtG @_// #E"G4Gb#tG!0@G#/_GGG4Gpb#_4G G%" Gb#tG @G_ӡC 5@G D4Gpb#G//w_ GE"Gb#4GtG_/ ###GG4Gpb##a_ #G%"Gb#TGtG  @_ӡC,#5@G4Gpb#1 0BFG D//C_ = %"GGb#GtG @_?#8DXDGxD4Gpb##G@3)_1GG4GE"tGb#u_G(G4Gpb#_#//GG4Gpb#_GE"Gb#4GtG^_//#GE"G4Gb#tG#R_GG4Gpb#/_4GG] ](}08@P#k///G {#tGGTGG/G4G {#/#GTG^~G^~ (޴08@>HGGG4Gb#J_=0BGG8b4G!0@ @ C.0BVJ4G"8b ¤>/UIZk=@4G4G]"#HDDgHDc @-c  HIIr.DC"StJgJs"@.JwFzxJ ///`8/Y8K:G8?0 @3gJgJ0 B B @hGR"G4G4Gb"_GG]]} (ݤ08@=HP#/k P,0#G^~G^ ~Q(4G 0G08GGG 1 pqGb#_GO#GG4GGb#G=R_GGG4GGGb# _/~///# G4GGb#GG 0@0 @#G_k=GGG4Gb#GG#_GGG4GGGb#!_/V///# G4GGb#GG 0@0 @#G_CGGG4GGGb#_<#GGG4GGb#G =/_GGG4GGGb#_$/# G4GGb#GG 0@0 @#G_ =GGG4Gb#GG#_// #  0@0 @#c,CrGGG4GGGb#}_////# G4GGb#GG 0@0 @]#Gj_GGG4GGGb#_////# G4GGb#GG 0@0 @A#G_,#GG4GGb#GGB_/# G4GGb#GG 0@0 @%#G2_GGG4GGGb#i_////# G4GGb#GG 0@0 @ #GV_//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#0TGtG^~^ ~(08GG0GPGb# G_Gz#`7@B#s\@Ck//Gl//G_//Gc/GG4Gb#_[//G_//GS/GG4Gb#_ #xD"GG b#TGtG! @=ϣ_ =!@#:/G_ C}2SBC///GG4Gb#c_'//G_//G/GGtGD"tGb#1_Gz_//G/GG4GD"tGb#!_Gj_//G/GGGD"tGb#_, @/G/GG4Gb##_ #$"GGb#GtG% @/s_C / #%%B///CGC4_ %B///GG4Gb#_ GD"G b#TGtG8D##C_ $@//#G#_ C%EB///GG4Gb#ץ_ӛ//G_//G/GG4Gb#ǥ_ $"GGb#TGtG%@/_ $@{//#8DG#t_ C%EBn/GG4Gb#_g//G_//G_/GG4Gb#_ $"GGb#tGtG%@/_ $@G//#8DG#@_ C%EB:/GG4Gb#o_3//G_//G+/GG4Gb#__ D"GG b#TGtG @_ $@/#G#t_ C}2SBC//GG4Gb#;_4GG]] }(08@#k/0# ^~(^0~8@HGGG>{#_ GG=GtGxb# #Go_///o#G$"GtGxb#tG#b_eGG&_ӳ@BCD]\\BDC/k///GGD"b#GtGˤ_J//GGD"b#GtG_>//GGD"b#TGtG_2//GGD"b#TGtG_&//GGD"b#TGtG_//GG4G8b#_//GG4GD"tGb#_GG4G8b#_/// Gb#_Ӂ #,GGxb#$"GtG# 0@$`##G_=//G##]8DGGb#tGC# 4GD"ǡ_GGG4G8b#k_4GGp$"GM ,#tGxb#! @E@c }#G_ =//#8/# ]8DXDGG4G8b#C#/*B_(/> GGD"b#4GtG @_// # cGD"Gb#4GtG3tB}y_= #DG4G8b#!0@G##_ GG $"xb#GtGk_S#8DXD4G8b##CKG(_GGG/_ #D"GGb#4GtG% @/G_ #!%@#3//# CGtGGb# QB#4GD"/3_ #!%@#// C}G3SB%EBc_//GG4G8b#ǣ_ //G_GG4G8b#/_/#///GGG$"#tGb#/7_>#@#?\@B(C/k///GG4GXD"tGb#u_GG4G`D"tGb#m_GG4GhD"tGb#e_GG4GpD"tGb#]_GG4GxD"tGb#U_Ӽ # @0@ /G4G ](]0}8@HP#k/G` {#tGGtGG/G4G {#/o P,0#G~^G^~ (0GGQG4G Gb#Ga_//// #GGG4GGGb# @0@/ //K_/G*//GGG4GGG`b#{_// #GGG4G`b#GG @0@/ i_/,ctGdy`@`4G///G]]} (0@#k///G//#~^^~ (0GGGP{#_ ,#GtGp"G!b#1" @&@#G/_8DpXD4GGGb# @4"GTG/_G G4GPb#_GG4GPb#_ ,GtGp"Gb#1" @G_// #4GGPb# 0@##!1 @##G_GGtG ,#pGb#! @% #Gɠ_8DXDGxDtGhE"0b# `GG=_ GGtG`E"tG0b#5_GG4GPb#O_4GCCG]]} (0@#k//G{#tGG4GG /G4G{#/O=`B B;0B C`2AJ{#V@J@fC@B8`G D`GD/+///q2@B1"0q"p1p1p0q0q@B1p1pq0pq/p@///q21@B1""p/_k//G}@BM@/q.p/"" @F FqJpKupJ[pK"uGs1Hp?Q..p#RQJJ"1"SFQ>0,rJ;HA6Hq#"2DrJ0<1,A;H2Dq.q#1<0,wJ"6H"rwJA7H"2DrJ0<1,.A6HJp#"2DrJ}@1<0,7HA;H2D0<.avJWJF>//q/. 1@qKJrJWJ"Fs1H>q/[qKsG1"q?k//#TG~^GS^~ (0GGGGG@ZkEGGGTG/@ZkEGGGTG/@ZkGDG///EGGGTG@Zk//EGGGTG@ZkDGGG]]} (0@#k/@#pF@^~@BH^P~X`h޴px>^~޵Gp@FGD8@GTDG BGGG G_` C8@G G///0H11@3H@6J%N@GLv`Jb#LGr@ p@ G @G Ao@k@}_G0AAGGb#v_ G0A1AGGb#o_GGGb#Gi_ GC@á̱/GGGG_e@e@ GK`///AGGG FTG/@Zk&//FGGGTG@Zk/ 4G`, - GGGG_,A-AA_Ai 4G`-O/MA-AGGGG 4Gq_AA//GGGGg_A-A 4G///AGGG FTG/@Zk2//FGGGTG@ZkG 4G`GGGE_ - ,,A-AA/?A//@ `GGGG1_A-A 4G/ / 4G-A-A/ 4G.AA///L8AE 2ACG YBF1A s@@G _.,A,AGG.ACNBNG@12A/_C-HGGC8KG b G=[[`X[  =_ C-HGA#,A,I G(0 p`D(0= DT@E G[[`X[88@?A/Le@d@Ag//A G.A/.@`//FGGGTG@ZkG-A"GAGG_A/AA/?G//(A///FGGGTG@Zk(M--AAH AAA?./Le@)CCd@@&@/@G(@/`///FGGGTG@Zk//bh/GGGGk_"E@ AC@?@@/G@]H]P}X`hݤpx=]}ݥ#/k#4G^~^ ~(0GGGG^GHb_F^v^0BGtG4G "8bP"kZk Bb4G`DGT@ZkG@Hb4G_^0BtGTG "p"8bkZk`BG4GhbtG0@1dZk dGG]] }(0@#k///+ GG4G#~^^~ GGGG(b/k^GGG(b]]4G} 0#/_///GG4G(qW///k///P#TG^~G^ ~QB(GG>GPAB(b^PBtGG@""XbEkZkC@@P@G]] }(0#k/,H/##~^^~ GGG//C/4Gc#Z[K0bGK(B/kbZk.qHPJc F>C.CJ_G]]} 0#k///  B/B0,"A0H'H5(@(@5)@)@`G*@5+@DDDDk/Gk//#TG0;"~^ [^~ GGG(bQwZk/4G / BTG8""(bFwZk//4G/ BTGH""(b:wZk//4G/ BTG@""(b.wZkCG]]} 0#k//k//  B/ B0,"A0H'H/k///Gk//  B/Bp/`PJ[pK`Gp?k///0#H> /@h~^^~ (0޴8G GG`  BB/Ġ BG G(btG.GJ/bZk///@BGP""Hb}ZkGG]]} (0ݤ8#k//4G/// #4G~^p[^~ (0GGGGGxb~Zk#GGb# @01B 0@G/ _ BGTG(b/[aZk@G]]} (0@#k///#4G^[~^ ~(08޴@HP>X^`~hpxGGb# =C~ZkG$1@b# _GG""b#_`"b#/_G`"b#_ Gxb# G_Ә GTG"G` b"""b#4GJ_ӨCGG"_ DG ""b#0A_G ""b#{_*q`@)1@/ A@/3G@BSF1@///fGGG`A`_gGGG`B`_ Gb#Ǣײ_Gb#_G]Gb#] }(08ݤ@HP=X]`}hpx#ô AGG_ӵ@9"/"8""Gb# ///0A-_8""Gb#)_ӰG0A ""b##_G ""b#_Ӧ//] @ 1@/ \@8Ck//G@""b# _G@""b#_0A/G""b#_G""b#_0AG_XD4GTDA|ó=A1QAG`"+`G PA(b"+_&11AGb#tG_PAGG/{_8 DGPAb""`"s_DG1QAGb#/_ ""b#G_""b#G_GLëCGb"GG`"b#Gz_// G ""b#_G ""b#_PA5/GGGb"G`"b#d_ G""b#_G""b#_PA!/GGTGPb"G`"b#P_ӻGGXb"G`"b#GF_// G""b#_G""b#{_PA/+`0Ab""GG`"b#G._Hb!G0A~`b!tGXb"~""b#G _GGPb"GG`"b#_ G""b#R_G""PAb#M_GGGb"G"`"b#_ PAaGGtGb"`"Gb#_`!W1QAGGb" ""Gb#_GKPAb"4GG "`"b#_B11AX" >G4G@b"G`"("b#_ӡA"HB"0"D"#B#0" ^޶GPA (^4Gb"0>8"8"Gb#_GG TGb"`"b#G_G""/GG""b#_G""b#_j//G""Gb#_G""b#_^//GGTGb"G`"b#_1QAGb"GG`"b#_ G ""b#_G""PAb#_@0AGtGb"G 0A`"b#o_ G""b#_G""pAb#_,GGTGb"G5A`"b#[_V 8`EGG`///_ DM` PAG4Ghb"X"0"b#G PAE_G3b"`"PATGGb#<_+21A11AG`_8D/ GGG8b"@"`"Gb#*_// G`""b#c_G`""b#__pA/GpA""b#W_G""b#S_//GG""b#K_G""b#G_//G`b!b"H"~GTG"Gb#_"" Gb#/3_G""b#/_PA/~GGpb"TG"@"b#G_!~GGtGb"""Gb#_ G ""b#_G""PAb# _ӔGPA ""b#_G ""b#_ӊ//G""b#_G""b#_~GG8b"TG" "b#G_//pAq/~GGxb"4G""b#G_ 4GGGTGb"p"`"Gb#_ӋTD AXGV//GGTG0b"G`"b#`!_"PAGhb"X""4GG PAb#w_ G(""b#_G(""pAb#_4GG""b#_G""b#_*// TGGGb"TG"`"b#GV_Ӌ4DG""b#_""G Ab#_///0AG!_D4GG""TDb#A}_""Gb#y_0AG_ D 0A11AG///_ G""b#f_""b#Gb_PAëyACPAG E PAb#/`PA//_8 DG(""N_(""b#GJ_/GG""b#C_G""b#?_//=A1QAG`! `4GHb"G0"p"b#_]A`!1qA `Hb"G4G0"p"Gb#_/ }A1AG 4GHb"0"G`"b#_PA/`11AG!_ Db"`b!1qA~G~4Gxb""4G"b#_ G""b#_G""PAb#_x 11AGb#_8 DG""_G""b#_PAhGGy_ D 8EGG/;PA//`_ b#G*_ ""Gb#_8""Gb#_LGGTGb"G`"b#|_GGb#S_8 DG/ _ 8""Gb#_""Gb#_0G""b#_G""b#_'///GGTGb"G`"b#T_Gb#/_ ""b#G_""b#G_PA +GG(b!_8 Db"""#~" "B#P `b!~ >GTG0G(b"(^8"0"Gb#@~#_ G""b#^_G(""PAb#Y_GGTGPb"G`"b#_GG_8 D*G`b!~GGb"G""b#_11AGXb"4Gh"`"b#G_G11A b"tGGX"`"b#_ G""b#&_G(""PAb#!_ӨG`b!Xb"h"~G4G"G 4Gb#_11AGb"GGP"`"b#_//GGb#_DG""TD_""b#G_ AGGGb"G"`"b#_*Gb"GtG`"b#G_!GGb"TG`"Gb#_GGGhb"G`"b#_ G(""b#_G(""b#_PAQ/G(""/G""PAb#_G""b#_B//11AG/_0AG_ 0""b#G_0""b#G_PA,0A*//GGGb"G 0A`"b#W_vGxb"GG`"b#GN_mGGGb"G`"b#D_G(""b#_G@""P11AG,1A_Gb#/_GG _8DGG_ D/G(""b#c_G0""4EG(""b#///W_G`""(  8"B"H""` ^GG ޶(b""4GG"b#_G`" G>4G b""G"b#_G(""b#._G(""b#*_GG_X D 4GTD A//AG/_D GGGxb"`"b#G_/G0""G(""0Ab#_G0""b#_ӊ//0AG_x D 4GG""TDb#_G"" Ab#_x0AG_ D 0A  E11AG7`!b"G``""Gb#_/Gb""GTG`"b#G_ GG4G@b"`"G`"b#_11AGb"GG`"b#_ G""b#_G`""PAb#_<PA//GG""b#_G""b#_.//11AGtGb"G 0A`"b#[_ dE PAPAGTGPb"G`"b#O_GGG%_ D 4GTD A""Gb#_""Gb#}_0AG_ D 4GG8""TDb#r_G8"" Ab#m_0AG_ D 0AG""b#PAa_""Gb#]_ TGGb"H"G4G`"b#G_ӌ4D""Gb#M_""G Ab#H_///0AG_8 D 4GG""TDb#:_G"" Ab#5_Ӽ EGb#/`///_1QAGb"TGG`"b#_ 1AG8b"TG"G`"b#_G`""G"" 4Gb#_G""b# _0AG_X DTD A11AGtG0b"G"`"b#_0AíCGHb"GG`"b#G_// G""b#_G ""b#_0Ai/GGTGb"G`"b#@b!_///#~0A`!GGb"G""b#_ G ""b#_G ""PAb#_DGPA""b#_G""b#_://GGtGb"G"`"b#g_ӾGb"GG`"b#G^_ӵ 0A!`!0AGb"4G8""b#GN_ GGb"4G`"Gb#E_/G ""b# TG~_G""b#z_GG4Gb"`"b#G2_ӌ4D A///GGTGb"G pA`"b##_RPAG_ DB""h"J^`b!pA޶~GTGb"P"h"TGb# _GpAPb"TGh"`"b#G_//G""G""Gb#7_G""b#3_Ӻ//GtGGk_GtG_ DG""b#!_ ""Gb#_ӤGG""b#_G""b#_Ӛ// E1QAG`b" TG"`"Gb#_G`""/G "" TGb#_G ""b#_GG b"4G"`"b#G_ӌ4D As///Gb#A_ "" Gb#/_G""b#_pAa/GpA ""b#_G ""b#_V//GGGxb"G`"b#_ G""b#_G""b#_pAA/GGtGb"Gp"`"b#o_ G""b#_G""pAb#_,GGTGb"G TG`"b#[_Gb"GtG`"b#GR_0AG4Gb"p"G`"b#H_Ӎ4DG""b#_G""b# A~_/PAGTGHb"G"`"b# PA2_//GGGGb""`"b#&_ b"GGtG`"Gb#_P""G/G""Gb#S_G""b#O_//0AG_ D 4GG""TDb#B_G"" Ab#=_GGTGb"G`"b#_ G""b#/_G""b#+_PA/#0AG 0Ac_ Gb"GTG`"b#G_//GGT_G@""b#_G""G@""b#_G@""b#_ E,1A11AG`>_///G8!`b!~Gb"GG@"X"b#_!b"GGtG`"Gb#_GGb""G`"b#G_ G""b#_p""b#G_AX>0AV//G0A`""b#_G""b#_J// E1qAGb"tGx"`"Gb#u_1QAGb"TGG`"`"b#k_G`""b#_G`""b#_ TG0AG4Gxb""G`"b#X_Ӌ4D A/0AG-_ D 0AG(""b#PA_(""Gb#_ G`!b"h"GTG"Gb#9_GAb#/_Ӡ@11AG D _ DG ""b#g_G ""G ""b#`_G"" 4Gb#[_GG_X DTD A0A#TG~^0[^~ (0޴8@H>PGGGGG4GG8b~ZkGGGb#GG._0BGGTG8b`z~Zk(/`///(G0@Gb# B_ӡ @ A?f0BGGTG8ba~Zk , G0B4G8bTG/W~Zk$0GG]]} (0ݤ8@H=P`#k///0#~^^~ (0GGG  GG(CG4G0@b#EB@_ @/ B(4G(b}Zk B4G(b,}Zk$ B4G(b0/}ZkG4Gb#͏_ G]G(b]4G} (0@#/=k///#GGG~^GG{#^GG P_G]] #kp#TG^~^ ~(08޴@GHP>X^`~hpx޵GGG#( ѠGXb /%)^GG4Ghb/g_ GGG8bGGe///ei^^ G G b/ &GTGGxb @ APA< G9"1FB3aJ/'@sMdJB1"=C/^ӠBGM"GGm="4Gb/sZkG}GM@Gb4^GG@GGG޶GGGGGb^ 0 A @A (AGGGGeG8b^GG4Gb/^G]] }(08ݤ@HP=X]`}hpxݥ#k#4G~^[^~ (GGG"bE}Zk0"G"Gb#4G /Ӄ@BG"4G b(,048<@DHLPTX\`dhlpt 䳌䳐䳔䳘䳜$䳰}ZkB"4Gb䳨/|ZkGb#F4F 䳴䳴"䳼/`@/G4G@G$D|"b#tGx$"(,048<@DHLPTX\`dhlptx$|䳀䳄䳈 ĢGD@G"$IJf{@GG8b#B{@G///Gpb#@GG]]} (0#/k///#^~^ ~(GG>0{#9_GG|"x "GtG b#/7{@G4GGh b#{@#?FF0F#Gb# "F@Gb#@GGG]] }(0#/k///#4G~^^GG /"{#I@CG]] #k/(,Т`#$p"04> ^޲h^80<P@0DPTXТ\~ $>(^,>0^8<޲Pp`d0@~hPl0ptPТp^x~GGG4~{#DH>L^P>T^X\޲` 01'J'J p_GH/ b#_GB=} =G$(=($0d0=8}4,$<`D$8X=,}<$TdGX4=@DD=H%DLP}TD@dP$\`$dhldt/`p\$"= b#@ Gb#=@//GGxb#1@GGh]p]x}#k/// #~^^~ (GGGGcB4GbV{ZkBG4GbG/O{ZkG]]} (0#k//0#^~^ ~(08GGG ///B4Gb$#/'{Zk b#_ӠBG4Gb{Zk#?b#$ _Ӕb#4 _Ӵ"b#@"b#@4#=8cAaB ="@ /B4GbzZk"@Gb#S@Gb#/O@ "b#/K@0"b#H@@"b#@ӠB4Gb/zZkB4GbzZkB4GbzZkB 4Gb/zZkB4GbzZkc4G`[/@ZkBG4GbzZkG]] }(08@#k/k//pPSF/@00/k///0k//#~^{#^GG d"//@GÈ//4GG]] #/k///k//k//k//(0,Pk/00k//40k//80k//<0@Pk/D0k/4GD0p/k///H0LPk/P0k//X0k//\0k//T0k//`0dPk/h0k//l0k//G0FpP/k///t0Pk/ Bk//#4GG^~^ ~(08޴@GGGGGG@` 0PpG0P[@Zk4G/¤Gð// #GGFGiCEBGCc@C[@Zk/4Gg/#G#`//c@GGCG@}"[@Zk#G#L//x]Gc"0p#[/@Zk$@/,//#! @ @ @B@4GHbyZk0B@TG8bzZkb4G#Gc@@ B]G/rZkB 4G/GGb#T@ BGGGrZkGGb#G@G]] }(08ݤ@P#/k/// #0G^~P^ ~1@(GGGpQCC c"##_FG#GG[@ZkGc" x0p C#[@Zk4G/# G#G]] }(0#/k///GG!B !Ba # Т~^^~ ( @0GGG BpxWC0B PB GGJrZk 8  @B 7//$B"D/@ @@ @ @@ @`@ @/ @ @/?BG4Gb>yZkG4GG# C@xBG4G@c1rBrZkBbxZk C "@@CG]]} (0@#k/k//k//0 P1QB Bk/ k//0  0Bk//Gk//PGGp"@#~^^GGx60p[@ZkBG]0@@] #k/֢0Bk/PGGp"@#~^^GGx60p[@ZkG]] #k//k//D0GG{# 0Tt/Gx3Su#s//k///{BBQF PB/k///Gk//GGGGxP{#/#^~ ^(~0GGG>{# ^~v @ "=G ]}b##G] ](}0@# ///G] ](}0@#k/#G^~ ^(~08@GGG^GG~"xCp[@Zk B "= DGGb#CD]@G G//GGG] ](}08@P#k/#G^~ ^(~08@GGG^GG~"xCp[@Zk} "D 4GGGPb#' @ "4GGb#G##4GGxC!@G G//GGG] ](}08@P#k/GGG4GxP{#/#~x^~^@F~޴>^~޵G!0!GGGGG>(!=d!$!( TGc!/=GG}"G=e[@Zk=@BW@)M\@C/k///@,eGtG}[tB24@@ZkpDp="4G0ctG `[/@Zk///D.'/@%Gb#3B@G@GGb#GE@t#Gp# x#{ |C//w@Dc` Du.w n//#`D# C@.?D`]"GG b4 D.hClݱ`dGC#xBc_Fh=#/lcGb#/`F4F@GGF/lcpN n[/@Zk:áñ`D/(á]GGGGb#/@G/'///á///BG4GbvZkBuGG4Gb/vZk//k  GTGCNñ@ݢB.e[@Zk0@O@.TGBb10B QB Q@vZkK@BN./oZk(0B/ D#/c \//+/."P="GX}"APBX 8eBG[/@ZkPBTGbD9.10B1B1BvZk//G@G.n//΢G"X}GP="Pݲ n8eBX}"B[@ZkPBTGbD.10B1B1ByvZk@G/XG n"b#G.WJ>] "@Gw(cC .tG[/@ZkG@Ӏ/(]GGGGb#/@G/_///(]Gb#} ,á/DVGo@U@šGTGHeAG[@ZkAGGb#G8@8G8}"#GH"b##]@G3(ctG`C[8=@Zk,c `(// [8=TG/@ZkG//C@Hݡ/dcHTG/`5[@ZkHݡΡHݱ#/O///{=GGG`b# @LGTGFe@=[@ @ @/@Zkϡ0BGG8btGD-jZk/á,#.1AñJ //G O//:@o3B/./@F FJXKR"yJ1"G?)r/-rKNIR"pH1"E=/2,.2HVJR"w1H1"F> /.KTJR"{K1"F> ,,HsH@H1"R"D<,cTG[ /@Zk //Dá]Gb#}G/@ ϡ/dcTG` [/@Zk  #.ñNnGr/=GGG`b#W @Ӳ//(e=GTG[@Zk]0áGGb#0="TG/n@NGG0="GtG/@ZkW///D/0c4GtG(=" `(][@ZkC///Dá/<c4G`[@Zk /D]Gb#}G,@GG]"b#GG@Ӏ@bc\0c]G="G}"E`DšE6 #=8e$[/@ZktG0c #=[21@@ZkDe/ݡG="}"Gȱ #]=8e$[@ZktG0c #=[21@@ZkD//=ݡtG[2A@Zk/D6//]}G@b#G2@-/4G///G]]}ݤ=]}ݥ#k/]}G b#Gv@/D]}GGb#@Ӏ=G'///ɰ4GtGx="0c `x][@ZktG//Dá]Gb#GG/w@tG////cGhD`D//}Gg///GclD`D/tG//G=G'///G//]GG{///Gv//tGr//Gn//Gj//Gf//Gb//G^//GZ//GV//GR//GM/GJ//4GF//G?///0cG=" }"GG%`D% ?E C ]8e$[/@Zk0c #tG [2@@ZkݡtG/Ȱ/=tG[2@@ZkݡtGȰ/D#]Gb#GG / @ݡtG/Ȱ/cGoD`Ȱ/G//P#(^~0^8~@HP޴X`h>p^x~޵GGCGG^G GG4"{# ~( G1@ =Cd"`b#1/@ G4G/GGb# @CC4GGb#///C@4Gt $d[G=CcG@Zk G@BTGhAHb B B/ C1JCGsZkG4GT =GG pA$d[G@Zk.A GG C 4G` A0D///CGTGOB2d[ G@Zk@AGb#GGq@ G Ga.!"A"tHqJSrJ4GtFa>V,AB  0 A}G/S ?G/8 ///4{G////@ < QE# AE0@C `SE0@C`TE0@CUE0@C0@C NC/ HC/ YE/ 0@C HC///zZCZ[CZ2GJGJGGb#wGD @ P,A/#0##//cc/ L,AG b#GWw@ ##* GT4AG@b#E"@j0`J `tG{@ 0Au)1 AA AaJ TG 0A 0 A AA .* qIPJF >]0@B]/O// 0A 0 AA AG ]!Q!AG=@#V8/X#:KQ /Q )@ @ E#///Q01"XF?@DP`C;ѠDP`C7DP`C3q xEP`C/`ѡEP`C+P`C aC/ iC+/1"F/P`C iC/ //4G>//x-ID/â BG1/4G.//4G*//c//!J GG4GTG/@b#BWr .k"J5w3`2! 0IG/@*4G- 0A@ nH AMI E==P!A= 0 AA!A 0 A0 B=_.k"uHTJF>ע֢Y8A 0 AX8A 0 Aٲ 0A A@/_}[;A AGD } CE///GGb#G.""JVJX`F/`>+/?@/h ////㡼#Gb#E @/! B0@0.m.SmJ0Jt JtFm> @///.EJ!XF!(/(K!X'G/ h/hKXD!(,(H!X'D (.(J XE!/ .JXF!h.hJ!XgF/Gb#D//c@ӂ!,/.Hr/HQ/J2F/>h.hJ!/=:1 C]_@/// A=$Q!A A8 @EAA+///!A0! A.Q"TJ>.h"UJ>/"XK?!,Y#GH.@//G///G(]0]8}@HPݤX`h=p]x}ݥ#k/,g#@H<PA Ak!///4G//4G//}s`/ ."WJ>s/` 8/ Y'K8?s` SZ ,FH<s}{/+`{// /-EI!XD!-I!XE/L.LJXGF!@,,,H!X'D ,-,I X'E!/ L-LI XGE!_/c =G G//F/0@DFK `,0@H /.J0@ &.0@&J .J0@ /@-0@I ?ˡ@PB C$C C4GXb/oZk G//4GM/0BKG++hZkc `/// E CcB4GboZkKGG0B@hZkk d&//# ^~G^ (^0~8@H޴PX,HGGGGG>G$//.0@C{#`GJ{#/{.0@C{J{#`;,0@C;H{#;.;J0@C{#/ .J0@C{#{.0@C{J?DCTGb@C'B @ @=oZk/G[/GC!///BG4GbsoZkG//GG/B@4GbfoZkPBG4GXb/oZkG6='BǰGG/;hZkF/ǢB/"yJXKG?= 'E."EJDF/@/tG բDz`c/`[G$G/@Zk4GG ](]0}8@HݤPX`#k///#C^~ ^(~0G>GGP{#^~^"~x0@=Gb# xCG}&_G] ](}0@#k///#(^~0^8~ @xPHP޴:FX`h>p^xGGGGGGG@!0!///(! =(d =GGG}"[@Zk=") TG//@wAB/`\\BCk//0c4GtG="K`][@ZkN//0c] ="}"G>`D$?D3 8dG[$/@ZktG 0c #][2QB@Zk= D-/ G ="}" CG]8d]$[@ZktG 0c #][2QB@Zk= D =tG[2B@ZkD}Gpb# ]G@GG}"G d =[@Zk=")<]GH( }g#G"// G//D4G%@c`[/@Zk //Dà}Gpb# ]G/s@GG(]0]8}@HPݤX`h=p]x#k// BG(b/{cZk///#tGx0"~^^~ GGG|" {C[/@Zk G]]} G0#k//#GGb#]]} 0#~//#4G"P^~_#X^`~hpGG  # {GC"] [(=x# ,]C 0}C@Zk/TG%/=(4G8 DF |#Dc`Gx#0b#,]0}@= } tG x#@A@1QF cx#///G///GP]X]`}hp#/k/// =?xdGTGC"8=@=H][/@Zk8=Gb#@]H @@G4GGb# @XD_ //#G_"^~^# ^(~GG0GGGtp"/Z`///@0 "@" :@aF cPPPPPPPPPPPPPPPP?tG]" [@ZkG//+Gb#/g@xBG4GbmZkG 4G}`[//@Zk4G/# BGCC ]}1D="[@Zk]CxG /}4G/`[@ZkTGG] ](}0@#k/#^~ ^(~0GGG>{# ^~_ "=G ]}b##G] ](}0@# ///G] ](}0@#k/#G ^~(^0~8GGG#x=]CCp}}"[@Zkb#G]}x#G@G ](]0}8@#k/@#x0@^~H^!FP~X`h޴px>^~޵G!0!GGGGG ~ (!=C"04# !d!$C!(=8/CG#' 8"D ݠ/C///O@J E/?ݰ'Cc}GG0GG[/@Zk0@W@ \@Ck//}GGb#Gb_//{x/H#}Gb#GG /_@jHcGTG[/@ZkG@4d]GGGG[/@Zk///  #=b# @@30BGG=@GGG @ ײptxC4G@|#x/ hc//`[/@Zk///Lc4G/`[/@Zk//}GGb#G@// G(GGb# @G  F`tCpCpGb#t@ӊ//4G///G@]H]P}X`hݤpx=]}ݥ#k/}GGb#GB@/ F C2_J Ca/ F4F [/// "7JF R//xGb#/K c2gJ#3fJGJgJ@ӺA/@d CGG=Ghb#2GJGJ@4+@<@ Gvp#x#tGb#t#+ C2GJ#GJ@/"//@ddG}"=G[2+@@ @G/@Zk@@/w ///\@@Ck//}GGb#G @//F4G/@$aA=/- MGb#2F //@N m TGsI+ -K.RKJSFK>+(dGGTG[@ZkG="?GTG b#d@BG G!// -b#FG]@/; - 0`A fA" L..LJvAJ!UJF>d}[GGGG}"/@Zk@@///cTG,/G)//4G%//x#D cG//x#D cG//4G//xcD `c ///xݢD/òG t#GG8pc9yC8\tc8b# @ cG D \c+K[k@ZkXtpT|c4G `hc`[/@Zk/// 4GD à=Gb#G>@d@3+@ @   졮clp#t#1/ à}Gb#GG)/ @ opPct`/O[ oG@Zk àGXc`&F[ f@Zk//,d]GGtG[@Zk/ /}GGb#G^ @G/gxcGGGb#`/ @ //[D/tà pð///pt/tC pC //TâGGb#G}. @/7㱼4d]GGGG[/@ZkGGb#/@d@3A @G//G@ð/â=Gb#GT/@@38C @GGTc#C[/@ZkG! @ӀGG/ Tc//`#C[/@ZkG @lcTGBbAkA/`#iZk //B GG4Gc biZk Cc oA .P J >K///#CG2B.xJJWJoFF`>;///#CG:C-aHIOIDE=+///|c4G`hc`[/@ZkDàGGxGb#}@ xD D}G`GG(b# f@Ӂ}GGHb#G@y/Dà@@y@ lE}Gb#DGGCD//@dG}" ]GG[@ZkGݠG\GXGV//GR//tGN//TGJ//GF// GGb#G xC&_9/G6//G2//G.//TG*//DDTGTD#4G!/TG//TG//G//BGb/C^Zk///#(;G^~^ ~(08޴@GGGGGxG~"##p[/@Zk=@@#>// B\@Ck//DcGGb#`}x#/@//}Gx#b#GN@// 4G!/}Gx#b#G@//3x}"GG=p[@Zk=@@#////4G///G]] }(08ݤ@P#k//DCGGb#@x#G@///G4G//GGG//GG//k//#^~^ ~(GG^GC{#+@=// #p"1B"/ P.SJDF@ â FGpb#k @4G CG" #".Q"J">G]] }(0#k//`#G^~ ^(~08@޴HPX>`^h~px޵GG q[GGGGGGGG~"G@Zk@w@C C!$c! 8 E G//`b\@DCk//(dGGTG[@Zk@GE// (H22B1"@q.qJ$F G="TGb#a@GG!( b#FG @/ (0@ @" O..OJvAJ!UJF>}GGb#GF @//v4G/@ġ@ݰ/ ( 00@A"i!.2J$Fe h3D Gb#/ @Ӗ ȡ qNI Ȱ.PJF>T/@D,dGtG}[@2rB@ZkDGb# (0DG // @z ȡ. sI (N.RNJSFN>4/@Gb#G@3Bl @kGGb#G@Gx/c//΢GGG bFF4F_ N//c@nG/g`β#tB_GFe dݠGG}"GG[/@Zk@w@/3n//GS//x=D/#GIxDðGC//x#DðG;//xCDðG3//4G///4G+//4G'//4G#//xcDðtG//xDðG//xDðG //xâDðG//GG] ](}08@ݤHPX=`]h}pxݥ#/k///BGb/\Zk///0.0JB /!FF/ 0,"0H8 !D P."PJ2D0."0J, !F 0,"0H?/k///,GTGHDs2H 2."Q2JR"3F2>.JUBB //r.{H"SrJR"{Fr>.Jr.SrJr>k//4#^~^ ~(08޴@GGGG{#~D0C/@ @>/d@$GTG[!@ABAB@Zk@G"G }Gb#K @G//G'/#G =TG# d[/@Zk@$GGb#!@3BG2 @G/G/Gn_4cGGtG[@ZkG//S@4GG]] }(08ݤ@P#/k///8#^~^ ~(GGG{#D0 %@@1"b#CR2@a!@3aB@G//G /G2_8cGTG[/@Zk@4GG]] }(0#k/#^D^~ ^D(~08@޴HGGG #x0G !F  "GG}"G=8c="$[@ZktGDb "][2QB@ZkF/Db=tG[2@@ZkG] ](}08@ݤHP#k///# 0C^C~SG^ ~(0GGG^ G4@//( G/@00`C0" aC0`C aC0`CD[ aC0`CD/T aC//@PD/L@/// D/D///`C/@D0@J/@BG4Gb D GeZkCG (//B@TGq@Q?BbeZkCG /// #rBQQBFFF D_G4@GD0B 4GG]] }(0@#k//#~^^~ (0޴8@HGGGd GT ,HE///XD<E@///lCp#G0b#:D @/Cp#"pH..HJwAJ!EVJF>l#pGG0b#@////pG0b#( p#H.RHJH>t#Gp@'t (D ptp .J4G/G]]} (0ݤ8@HP#/k///G//G//G//l0p#^~ ^(~08D@޴HPXGGGd"GP{#> ^~////@Gp#`b#"pa.GSaJa>= ]}h@G/G D"Pb#G@G/G/&%D tp//p#C#E# "e"t#@.GJF&.JF"%/:K-G e/`K D%,0Hx.DT"Pb#/ %.3J/ X'F %"@/c f&? 1?J!F&ihGG/XFR"!r.0@@FrJR"[`XgF/`.J0@R"SXF/2/2K0@R"K X'G/ r/rK0@C//G//p#lPb#0DG @/p#0A A"pE..EJvAJ UJF>l#pG GPb#@//G/G//pGT"Pb# p%,A%H%XGGG= 0D"{#////@G#GG uAJ".TJF>â֢FC$B//#CGb#:G //@ӆ#!"#B0@ @p..VJpJwJF>4GT#=XXC GG/"^@}GGb#`âFj@a#tH"a.SaJtFa>.J/#Gb#G//S@N#"H..HJvAJ!UJF>.J/C#:G Gb#/;@:( sH#H.RHJSFH>FC)B G//âGb#F//@"#"GRHB0A Ar..VJrJwAJF>4GGq//Gm//Gi//Ge//Ga//$#=(XC ///"@AGFG`âb#F@/+qH(!#.PJF>G.GJ@///Gb#F@/$!#',D.'Hs$H RDJSFD>.J4G///G//G//âGb#F//@G(!#,EH<G]] }(08ݤ@HP=X`#/k///#~^^~ (0޴8@H>P^X~`hQ.QJG@GGGGp!P!T0!d! $ ///%,G%HACrF%@cFb#/Z@//Gb#$ #D.RDJD>#G@ ?D4 D .CJC@C.GJ EGb#/kG5B!âF///+@ӎGb#G ,.Q,J,>#@ӆ #GGPb#!F @/##%. %J!F/` //Gb#F//@n, #%..%Ju,J TJF>.JBCFC#:G b#G@YGGG0b#, #L.RLJL>Gc_O%,%HC@@.Je#CGb#2F @/?, #%..%Ju,J TJF>.JM4GG]]} (0ݤ8@H=P]X}`hp#/k///G//G//G//G//G//G//G//G//0.GGG0J+ //`/t3H@"[rKgKUABABDB;FpF2F/ 3"//`S.QJ$F S.RSJTFs"S> / .s/ J[sKu3Js"uGs?@. @J/?pF"s#.JFF,@H<k///0p#^~ ^(~04Q8@޴@@BHPX>`^h~pxGGG@ G0 /" @G 0b#@GGGb#@GUGS//  !\ $$A0@=/"@//CHLâ GGb#F/@-L#0b#"La.GSaJa>)@&G "Gb#m@ G#) ?F?D!F I_iC3V`JGF\#5JF2GGb#S@ /G //G//G//$C!=$A!A=//"@//gGG 0b#J@UGGb#G,@S ' G B4G(b a!@P?@B`Zk /KGG'>b# 1@ Gb#   gG`3 @ G  G'IGb#,B LBG11@ 0b#' ,@ BG!mF?FqFm! ///@ G  B 0`A A ) qA?/G//G//G//D GG]RB ]/"*@//{GG 0b#@]GGb#G@[ 'GG0b# @/W g mE?`<GG G0b#@///KG0GGb# f` G/@"//@/// &&Gb#!E @/ f*1@A+! & .k. Jt J!SkJtFk>_ f///`h'('?G0b#@ G//G//G//G//G//G //G//TD4GTCXXG] ](}08@ݤHPX=`]h}px#k//0.G0J/& ///0,p/2HF@0H"pK@ pKp/"2H@pK@ pKp/"2HpK@@ 0.pK"0J2H@@?/k///p#GTG^~^ ~(08޴@ [HPGGGGG`@GG(b^Zk/G/GG CG_DG_51`BCDW@S/KWG:,:HG7 D.DJ?@.. F1"Z#@GJJ1"Z#F&//q/Z.qK1"ZJZ#D@&..JJ0D1"Z#// q/Z.qK1"ZJZ# G ..JJAF/?@B// G/GF@/&1@@@/G/# G B(b0GTG/sBsB/o^ZkG//G/câ(1@GG=`//5(_DX@/,///G/ 1@Y@9/ G 1@Z@Z/@G 1@A@!/ G 1@P@/G 1@Q@1/?@@0BB"_BG4Gb/]Zk]!Hð6 H #HFS@s"`/G/&1@T@/G&1@U@/G&1@V@֢/G&1@W@/ BG@4GGTG(b]ZkF@GC0@@CG]] }(08ݤ@HP`#/k///0#~^^~ (0GGG GG/B4Gb@/]Zk0@@@B4Gb/]ZkG]]} (0@#k//0P//2F1 1"2D01 `0 2F `0G/k///Gk//0  k///p`//;p/ ` q0 k//#~^^~ (GGG/ /// B4G(b]ZkG/// /// B4G(b ]ZkG G]]} (0#k/#^ ^~^ ~(08޴@GGGGG{#//@G ///8dGG="GG[@ZkGb#D//s@GG]] }(08ݤ@P#k/#~^^~ (GGGG/ CGb#@F//O@ #" D..DJvAJUJF>.J / ##G]]} (0#/k///G//#~^^~ GGG{#_/G/ #b#0DG //@G C" #B.RBJB>G]]} 0#k//0#~^^~ (GGG/ /// 0Q"qpP1AB P0icQ;`CC B"@C1 BQ##CG/_UZk #  @B0"@# 0BK//TGP#D@c0B;`C{C8b@w\Zk//G7/`" #CdBc12B@)///â#@B4GHb B@ DGB/;\ZkG B Cc"SF1SBG/UZk â@# 6B@@ 4GG]]} (0#k P,0#G~^G^~ (0GGQG4G G b#Gm_//// #GGG4GGG b# @0@/ //m_/G*//GGG4GGGb#m_// #GGG4Gb#GG @0@/ m_/,ctGdy`@`4G///G]]} (0@#k///G//,0# P^~1!@B^ ~(0GGG @>G'G2ABG#CtGp"0b#CG1"go_///G #G4G]GG!2@b# $@#!1 @##p_4GG]] }(0@#k/#^~ ^(~08GGG{#C_ ,#GGtG0¦G!b#06" @&`#%o_//8D0XDGGG b# @4"G4G/l_G G4Gb#p_GG4Gb#p_ Gb#v_ GGTG0b#tG0 Gm_#GD"GTG0b#tG#/m_G//G4Gb#p_ ,#$"GGb#tG! @//@c}#G/n_=//#!/#]8DXDGGtGb#C#D"tG9p_GG4Gb#Sp_ #Gb# @ _ = @ #,C#GGGRGb# 2B&â#C#$" ݲ4Gl_ /(TGGb#G$kp_TG(# G`b#G!m_GG4Gb#p_4GG] ](}08@#/k///G{#tGG4G4G/G4G0{#/#~^^~ (0޴8@HGGG ///GGGtGtGb#/gm_///?G @_P\<@bC/k///GG4GE"tGb#o_GG4GE"tGb#o_GG4GE"tGb#o_GG4GE"tGb#o_GG4GE"tGb#o_Ӹ # @0@ /GG4GE"tGb#l_ G4GE"b#tGGco_G/GG//GGG%"4GGGb#k_GE"G4Gb#tGl_G #%"G4GGb#G#k_GGE"4GtGb#yl_/ 0@0@㰨 @!#///GG4GE"tGb#G/o_GGGE"b#4GtGGo_G///G4G]]} (0ݤ8@HP#k//,01 0Bk///,01 0Bk///P 0#tG^~G 2B0;^ ~tG(GGGb#x1"/Sm_G #G4G=G@b#!1@ 0@##!1 @G##n_4GG]] }(0#k///00#[tG^~^ ~(GGGR"q.Gpb#SqJq>4Gl_//G-/CGC_G%/ cGGG@b# rB4"4GG/3k_G #4GGb#!0@G#n_04GGb# .r HQ J2F >_ӠCG]] }(0#k/#^~^ ~(GGGb_//G2/C cG4G"GG zCGb#1"j_G! #tGtGBG0b#00@ 0@GR" k_//G/ # 4GGb#!0@G#Kn_Gpb#<_ӠCG]] }(0#/k///0 P#tG ^~(^0~8@GG QBGGG0b# Gl_8D)#XDxDGGb##@//G4G_GG$"j_GG4Gb# n_Gb#}_ G_G D"GGtGpb#m_ =Gb#!@ @#_ =G(D"Gb#GtG!@ @## 7k_)CGtGb#C_" cGG4G rB0D"'k_ #4GGb#!0@G#m_GG8D"b#TGtG/k_#Gb##1_  =Gh$"Gb#GtG!@ @##l_ӊC@bC\@C/k///G_GGw4Gb#/m_ #@D"GGb#TGtG! @=j_CGtGb#Cl_ cGG4G rBHD"j_ #4GGb#!0@G#mm_L =GPb# @Y_DGN_A cGG4Gb#tG rBPD" j_6 # 4GGb#!0@G#Mm_,G6_GG'4Gb#/Cm_Gb#/g_//G&_GG4Gb#/3m_//G_ 0CGGb#4Gr.rJ@/#m_/// =G$"G4Gb#GG!@ @#i_//( #$"GGb#tG 0@G/_k_G$"G4GGGb#i_ #4GGb#$@G @$1@/ /l_ ]4G"@CG ](]0}8@P#k//0#^~^ ~(08GGG>@{#_ #,4GG`Gb# G cG`G/h_//# G4GGb#GG 0@0 @a#Gh_GGG4GGGb#i_////# G4GGb#GG 0@0 @E#Gh_,#tGyBAGGG4GGGb#h_/# G4GGb#GG 0@0 @%#Gh_GGG4GGGb#h_////# G4GGb#GG 0@0 @ #Gh_//,# #]Gb##C_GG$"b#tGtGi_/C/8DXDxD' @/` B0BGG4G0D"tGPb#k_GG4G(D"tGPb#k_GG$"b#tGtG/i_ӡC//G]]4G }(08@#/k///G{#tG4GTGG/G4G{#/00#tG~^^~ (0޴8G@q.G GGb#SqJq>4GGh_//#G%"G4G4Gb#G#g_G GE"4GtG b#k_04G .r HQ J2F >4G///GG4G%"4GGb#/g_ #GE"G4Gb#tG#h_/ #㰡 @0@ CGG4G b#tGCE"fk_0',pHA'H0D'<///G4G]]} (0ݤ8@P#k///P 0#4G^~G^ ~(0GG 2BPGG4Gb# Gg_GG$"4G4GGb#/g_G// G$"4G4GGb#/g_4G #4G$"Gb#4GG!0@G#/g_GGG4G$"4GGb#/kg_Gc @G]] }(0@#k/,01 0Bk///,01 0Bk///#TGtG^~ ^(~08@޴HGGGGb#` Gzh_//Gm/ #Gw@ B/ca``\@`Ck/GZ//GGtGE"tGb#j_OGGtGE"tGb#j_GGGtGE"tGb#j_?GGtGE"tGb#j_7GGtGE"tGb#j_/GGtGE"tGb#j_'GGGE"tGb#}j_GGGE"tGb#uj_GGGE"tGb#mj_GGGE"tGb#ej_GGGE"tGb#]j_4Gp@b#x  # B/G/_ #,(%"GtGGb# C@4G/g_=G%"6G4G4Gb#G#/{f_//# 4G%"Gb#4GG 0@0 @[#Gjf_GG%"4G4GGb#f_////# 4G%"Gb#4GG 0@0 @?#Gf_,#%"G4G4Gb#GGBf_/# 4G%"Gb#4GG 0@0 @##G2f_GG%"4G4GGb#if_////# 4G%"Gb#4GG 0@0 @#GVf_,# #GGGtG##h%"`b#;h_Y8DXDxDGGGb#31@G & LC%" @H@c4G4Gf_////#4G%"Gb#4GG 0@!1 @4#Ge_//GG4G b#i_(/ #tGE"Gb# @0@$1@ @ GTG/{i_//G @GE"4GtGb#oi_ //GGTGE"tGb#ei_ GG`%"`b#GtGGg_# 0@#GGtG`b#%"; CCCGg_8DXDGG4G4GGb#j s #$$B%"e_////#4G%"Gb#4GG 0@!1 @_#Ge_ #GG b#4G!$@#=i_ G%"G`b#GtG$@g_H #8DXDxDb#$$@*`G=, $@D8_5 #"G4Gb#G20@$0@GCGi_&#G11@G4G b# @ ##/i_//GGG"G4GGb#h_ /G_GE"GTGtGb#h_ GGE"b#4GtGG3f_ #GE"G4Gb#tG#)f_/#G%"G4G4Gpb#G#Ue_GtG ##b#20@ B4G!2@E"G#h_ GG`%"`b#GtG$@$@ g_ӳ@#GG#_ӠCD`\\BCk/GGGE"tGb#uh_ӈGGGE"tGb#mh_ӀGGGE"tGb#eh_xGGG E"tGb#]h_pGGtG(E"tGb#Uh_hGGtG0E"tGb#Mh_`GGtG8E"tGb#Eh_XGGTG@E"tGb#=h_PGGtGHE"tGb#5h_HGGtGPE"tGb#-h_@GGtGXE"tGb#%h_8GGtG`E"tGb#h_0GG4GhE"tGb#e_G'GpE"TGtGb# h_ GGtGxE"tGb#h_GGGE"tGb#g_GGtG%"GGb#/[d_GG4G b# h_/ GG@%"`b#4GtG$@$@/[f_///G#@GG#_ӠCD=`\\BC/k///GGGE"tGb#g_,GGtGE"tGb#g_$GGTGE"tGb#g_GGTGE"tGb#g_GG4G b#g_//G_GG4G b#/g_/// GG%"`b#TGtG$@$@/f_/XD8DCGtGb#_ӠCGG4GD @ âE" B/d_ #E"G4Gb#tG!0@G#d_ GG4G b#}g_GG4G b#wg_ G@%"G`b#TGtG$@$@e_///0#8DXDtGb#E"#'GP_G#G4Gd_GG4G b#Qg_ CGb#3AB?_3SBGc2_ SBG_ #!0@#GG4G b#7g_  @0#q.qJ* /àGGE"b#4GtGðGd_G/ #GGE"ð4GtGb# @0@ ðð6d_//#G E"ðG4GtGb##f_4GG] ](}08@ݤHP#k//G//G {#tG4GTGG/G4G{#/ P,0#G~^G^~Q 4G 0G(0GGG b#1Gb_// #GGG4GGGb# @0@/ //b_/Gr//GGG4GGGb# c_// #GGG4Gb#GG @0@/ //b_/GN//,#GGG4Gb#GG$/b_// #GGG4GGGb# @0@/ //b_/G&//GGG4GGGb#b_// #GGG4Gb#GG @0@/ b_/,c4G>d///G]]} (0@#k///G//#p;GtG~^G {#G1"/{d_G]C #k/#`[4GtG^~G^ GGR"CPb#/[c_G `"G4GG@b#G!"Cb_ӠCG]] 0#/k///,0# P^~1!@B^ ~(0 @8GGGGC!ABG##GtG#]H GGpb#)d_=G##=7@##` \@C/k///G//GG4GD"tGb#c_/G/GG4GD"tGb#b_/G/GG4GD"tGb#b_/sG~/GG4GD"tGb#b_/gGr/GG4GD"tGb#b_/[Gf/GG4GD"tGb#b_/OGZ/ Pb#%BG;_/// #GD"GTGb#tG!%@#b_/ $@3/// #%B @ (%1@$GG4G$"GGb#/a_G%GG4G$"GGb#/a_GGG4GD"tGb#yb_/G/GG4G0b#4Ge_0cC,`HBCH@D4GC<G]] }(08@#k//,0# P ^~1!@B(^0~8@ @HGGGGC!ABGb# AB##]_ #4G=Gb#!1@ 0@##!1 @##Gd_ =G4G@GGG b#!@ @# # G/a_///#G$"G4GGb#G#Ea_GG4Gb#d_  =`D"GG0b#4GtG!@ @##a_G%#hD" 4G0b#tG# BG/a_/// #pD"G4G0b#tG!0@G#/a_///GG4Gb#~d_ =GxD"G0b#4GtG!@ @##/a_///#GD"G4G0b#tG#a_GG4Gb#/[d_ =$"4GGGGb#!@%@#G/`_// #4G$"Gb#GG%%@ @%1@%%@G`_ #G!%@ 0@###/G //(G!1 @G##TGb#$bd_GTG(G`b#%a_//G/GG4Gb# d_4GG ](]0}8@HP#k/0#(^~0^8~@HPGGG>x{#_0=GtG"GHb##@.H1"R@J@> ,TG B/"3b_8DXD@, B ØGG4Gxb#GG05"`_GG4Gb#c_ ,4GtGGHb# @#= GGb_=#}/#]@¦C#u\@(C/k/// GGD"b#tG B4G`_//_ =GGb#4G!@#zc_U/GG4Gb#sc_GD"Gb#tGtG`_//C#GD"GtGb#tG#>c_9/GG4Gb#Wc_2//GGG$"tGHb#a_G'G4Gb#Gc_"//GGG$"tGHb#a_GG4Gb#7c_//GGTGp$"tGHb#a_GG4Gb#'c_/// Gb#/_ ,GtGGHb# @/-#=G Gea_=#/#]8DGGb#tGC# D" BTG/G`_/// =!@#GG4Gb#b_ 0GtG=GHb#!@# .%@ J"4@1"",CR 2@ cC}TG'a_ = @#y#]G4GGb#C#b_  @l///,%@G4G @tG $@b# @XG8 G__//J/ #4GGGxb#G 0BG$"^_9 =4GGb#0BGb_,$"tG #GHb#20@!2@TG B"##G/`_8DGD"TGtGb# c%pBG__// $@GG4Gb#Ob_ $@GXb#@_4GG(]0]8}@HP`#/k///G{#tG4GTG4G/G4G {#/GGk//.x4G.Jp"1"WJpFJ`F J#FB0F1K.JPpBBBPBFCk//.q.4G"ۦ/JtJ1"FW`Jp"K0JFp`F JB0 G#FB H.JPBBBPBFC/k///.4G.Jp"1"WJpFJ`F J#FB0F1K.JPpBBBPBFCk//.q.4G"ۦ/JtJ1"FW`Jp"K0JFp`F JB0 G#FB H.JPBBBPBFC/k///."JB`.JFCk//B"1"/ .JB/K7B7B1Gk/GGk/.J1"Bq.qJ&FCk//#2F~^^~ (0޴8GG[GGG1,G1H%D 3U/ DM`/.h"Jp@Hp.pJwB\BR@ Ck/// @GGTGY@J`c[@ZkJ D.//0@GTGyBCdcG[@ZkB D//0@GTGB;hcG[@Zk: D// D &.&J%F  D2// ///G]]} (0ݤ8@#k// D //ŰG/ //ŰG/ //ŰG/ŰG/.GJ؇FŰ/G Ű2QBtGG4Gx@F"/1@q/[pKgK FF@/k//4Gq/Q"1"4G[rKgKIFMF@/k///4Gq/4G1"[qKgK)F-F k/4GG /k///GS4G/k///#2F^~ ^(~08@޴HPGGGGGG> M///$,"$Ha@Ha/aK! @#@\<@=Ck// 0//2@ GGY@BTG /-@Tc[/@Zk&/!@ GGy @TG / Xc[/@Zk/!@ GG @TG /  \c[/@ZkD/H ///.Jp@HP.PJ0BB\B`XCk// D? ///5@GGTGYB.Hc[@Zk. D? /!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /氷// //氯// //氧// //氟//G=G}"_氕 DP/."Ju@H.JB\BBCk///$@GGTGY@>`c[@Zk> D_ s/!@GGTGy @6 dc[@Zk6 D_ c/!@GGTG @. hc[@Zk. D_ S/ D- .JF G/ D_ A/// <//7// 4///// ,//'//#// //G=G}"w_  D/.J؇F  /////GG] ](}08@ݤHP`#k///#2F ~^^~ (0޴8;@GG.GGGGJBH.JWB\BsP&C/k///  "DF D/ GKKGb@ D.PJ"GGFZ@///  D/.GJt@H.JUa@@f/G 8@ GGYCTG`c[@Zk//Gz ///!@ GGy @TGo dc[@Zk//Gf //!@ GG @TG[ hc[@Zk//GR //GK/ DE /.Jp@HP.PJWB\B6`$&Ck///5@GGTGYB.`c[@Zk* D?&//!@GGTGy @ dc[@Zk D?//!@GGTG @ hc[@Zk  D?// D?/GG]]} (0ݤ8@P#k///#2F~^^~ (0޴8@GGGGGG $,"$Ha@Ha/aK! @#@\<@h$Ck// 0//2@ GGY@BTG /@Tc[/@Zk/!@ GGy @TG / Xc[/@Zk/!@ GG @TG / \c[/@ZkD/H ///.Jp@HP.PJ0BB\B}`$Ck// D? y///5@GGTGYB.Hc[@Zk. D? g/!@GGTGy @& Lc[@Zk& D? W/!@GGTG @ Pc[@Zk D? G/C// @//;// 8//3// 0//+// D/'.G'Jq@Hq.qJ9!Bx!F}!B/ "F  D / //G //GG]]} (0ݤ8@P#k///#2F~^^~ (0޴8@GGGGGG $,"$Ha@Ha/aK! @#@\<@Ck// 0//2@ GGY@BTG /y@Tc[/@Zkr/!@ GGy @TG /i Xc[/@Zkb/!@ GG @TG /Y \c[/@ZkRD/H ///.Jp@HP.PJ0BB\B]`Ck// D? 9///5@GGTGYB.Hc[@Zk. D? '/!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// ////4G // d"DeF$.$J/Fo _.Ju@H.J5B7Bfs"%#eF%CyBO[G/?@///3,`F3Ha@H,H"@C@=#@I 3.s"3Jq@H.J"@9=#@? .s"J`@H/K"@/`=#@5 S/s"SKb@H,H"@%=#@+ S.s"SJr@H2.2J"@=#@! s"yBeF////,H`@H`/`K"@ @=#@ s"eF/_ w/X"DTG s"fp//fk//,E"EBHg@H.J8D_ D@T FE/$/D$Ku@H/KXF8FJ@MD, DHa@Ha.aJX"D8#D/?///? . Jg@H,HXD8D2 5. Jv@H6/6KXF8F/'///'d/ dKz@H.JXF8F@ @D////$,$Ha@H,HX"D8#D/  D /TG GG]]} (0ݤ8@P#k///C#D^~^ ~(08޴@GGGGG>j//B@/@Kz@H:.:J1 B#B\//}Ge8 6//=G%0ݠGŰ,]4GB E'///}c dD}c.GcJgF`etGc eGG  //=G% //]GE //}Ge=G%ð#2F~^^~ (0޴8@GGGGGG v$,"$Ha@Ha/aK! @#@\<@i%Ck// 0//2@ GGY@BTG /Y@Tc[/@ZkR/!@ GGy @TG /I Xc[/@ZkB/!@ GG @TG /9 \c[/@Zk2D/H ///.Jp@HP.PJ0BB\B`0%Ck// D? ///5@GGTGYB.Hc[@Zk. D? /!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// //// D/'.'Jq@Hq.qJ1 B#B\PJWBFFFN`F/3"//IG/Fhc[/@ZkAB ED=//!@GGTGy @5 dc[@Zk1B ED-//!@GGTGY @% `c[@Zk!B ED//" B"%D%D".2J+F G%Db""eF .GJاFB EDFG///G]]} (0ݤ8@#k//fG/#2F~^^~ (0޴8@GGGGGG $,"$Ha@Ha/aK! @7#@\<@(Ck// 0//2@ GGY@BTG /@Tc[/@Zk/!@ GGy @TG / Xc[/@Zk/!@ GG @TG /} \c[/@ZkvD/H ///.Jp@HP.PJ0BB\B]`Ck// D? ]///5@GGTGYB.Hc[@Zk. D? K/!@GGTGy @& Lc[@Zk& D? ;/!@GGTG @ Pc[@Zk D? +/'// $//// //// ////G //G/GG]]} (0ݤ8@P#k///#SF~^^~ (0޴8@GRGGGGGG/%,H"%H@Ha/aK!@\<@>Ck///2@GGTGY@BB@`d[@ZkB D-//0@GTGyB;ddG[@Zk: D//0@GTGB3hdG[@Zk2 D //#D  / D- D G]]} (0ݤ8@P#k/ //G/ //G/ //G/G/G%.%J@HD.DJ@Ճ@`@FrF//$1@W@$CpD///#2F (~^^~ (0޴8;@HG.GGGGGJBH.J5QBWB\BX"Ck//GGD"b#GG5_ӞGGD"b#GG-_Ӗ ( D .Jp@HP.PJ0BB\B`!Ck// G $"DGG/y.Jv@H/KFBBxFA [Gb#@//g_g/ D /.(Jp@HP.PJ01BB\BU`!Ck// D M/// G"#FD.Jw@H#/#K9a@b@ @]a@cDaG`D5 G4//G//4G *GG$"b#G_#/G  $ %D/ /// D/$.$Jq@Hq.qJ8!FU!B"B F//  D/G"F  DG///G/GG$"b#G_/G 4G   $"d"D%F`$, $H+D/ D.SJGFTG@ //TG/G  ( D.Jt@H.J#1a@wc@\|@,!Ck//G tG G G/G 4G  (" D D/DKz@H.J0BB\B Ck// 0//3@ GGY`BTG /q`Tc[/@Zkj/!@ GGy @TG /a Xc[/@ZkZ/!@ GG @TG /Q \c[/@ZkJD/H ///.(Jp@HP.PJ0BB\B]`H Ck// D? 1///5@GGTGYB.Hc[@Zk. D? /!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// ////G///0@ GTGYBTG!/TcG[@Zk@HcGGTGtG![@Zk6!@ GGy @TGTG! Xc[/@Zk(LcGGTGtG![@Zk!@ GG @TGTG! \c[/@ZkPcGGTGtG![@ZkTG//tG!E/H ///.(Jp@HP.PJ0BB\Bu`Ck//!E? Cq///5@GGTGYB.Hc[@Zk.!E? C_/!@GGTGy @& Lc[@Zk&!E? CO/!@GGTG @ Pc[@Zk!E? C?/;// 8//3// 0//+// (//#//G/xDG!xDG!xD G!//GG]]} (0ݤ8@HP#k//#2F~^G  #k/G///.;JBH/K6QBwB\B Ck//1"2F_ 1"2F_1"2F_1"2F_/3GG] #k/5FG]1"{# #{///3GG] #k/5FG1 3G] #k//5F "F@G] #k/.GJBH/KUBBG] #k//5FG1#3G] #k//#2F G~^^G&G/."JBH/K6qBwB\B XCk//1"2F_ 1"2F_1"2F_1"2F_/3G//G]] #k//5F1"b#_//5F1"b#_//5FGQ S//5F 1 2D_.GJBH.JUB0@31"R"2F/6///.(;JBH.J51BWB\BXCk//,H8D/3G/k///.JF////.#WJJBBF/ ///1"2F?4Gk///3Gk/GG//4G///1"///.8ۦJBH7/7K7qBWB\B?Ck// @9HyB9 F4F 4G1"/// @!HaB! !?G4 G !4G1"/// @6HvB6 6?G4 G 64G1"/// @!HaB! !?G4 G !/XF @!H"aBTGG/F6H @vB?G//60@XF @9H# yBTGG/F7H @wBG// 70@ø @9H}yB1" 9?D 9{///8FGpøUB @6HGvBj? 6?Gg?7F//K$D" /KF1 KBH!/!KFS? G 1"R//8F GHáUB @7H6DwBB? 71"?G 7A/XF:k/#1"~^G.JGOFxGF/S`B@&/.PB F"B1"VJJB0B B; Q/QKxD/PBBq"ZSKGK1"pB0B B-@.JxF!1#XJPBKB1"Q"C0B B ,HxDq.SrJPBB1"gJPB0B B/.JxF///G]{# #3//G] #k///1"Kx'D?_'//q.Q"SrJgJ9HB51LB 9JYB6*CB J@B9&CFHBG//!J2FBCAF7ABAF1" B`.JxF//G] #k//2QB"CXFCxFCFG`2Y.UJJ8F8F1"Q/K1"G/K,H DGq/G1"qK.FT$F/k///q.G1"qJ1"nF5`Q.QJ1" F//.Jx.F$Fk//.GJ1"8F"1/1K G1"1,1H.D$D/k///q/G"1"tKF q.SqJgJ,F-F@怔'Fk/Gk//Gk//q.xqJBH.J3`BcB\|BICk///,KH1"R"G/////..JJ1"R"F/'`///.2,J2H1"R"F/ ,.H1"JR"DGk/r./rJKR"1"F/Gk/Gk//Gk//Gk//1,.x1HJ5DJ BH0/0K0BB\B/ $C/k///Gk//4Gk//.J6/2F F`F3./J1"2FKs"F-s/sKs""/#.JF1"2F!3/3Ks"/1,1H1"2F Ds/sKs" / .JF1" 3/3K2Bk/Gk//Gk//G///q.qJBH.J3`BcB\|BCk//1"//1"//1"//1"// 2Bk//G// @.@JBH.J]ABBB9ABFUF/_k//2F? ;/,HBH.J @@\@)Ck//1"#//1"//1"//1"30B//1"2F0@.JBH,HU@ B3/1"2F0Bk/4B6UBC B#BUB //2/ "2  D K2#DDR"UB`.JFF R"UB/KGGR"UB?Fr#rCBHF;///.0,"0#F#FJA0H"`J" D0<.,J@H"aJ5#D<.,J@H#aJ"D<.,JaJ@HD0#<.,J@HBaJD<F///5,.5HVJ"Fx0H"F>k//Ӣ#?'~^$9#^G BB?$F|///u/U#uKBH.JFFFZ`v#tG?///+c`/u/KF7WJ#xKu/zKGu/8KGGF:@K#xKGF_#F#7BVJF7CDVX/ZXK"bJBGX?W.xvKWJF">9U/U ZBKGKS/XK"{VH"G?,///U/.#u/UKJU#"ADFzK"AH7JGGWDZD?v/wVH[vK"wGv?U/.#UKJ"CDF"@HWD5V/ZVKxVH"XGV?BBF_ӲG]] #k///X/ JZ XKBGX?//. vKW JF>/// VHX KG?//v/ VH[ vKwGv?//V/ VHZ VKXGV?//F6/.JFJF3 B'Dy#Y@"(s/`9HXKG?xJu#s.WJF>19#C1Fk//s"tG" Ѳ,;,HuHA;H5D;<Fk//F#F"B1 y/@FyK5,A5H"{5K;D5< Ӳ1 / K.PJ2DuHFG>?k/5, 5KA 5H;D5<//. HP JF>//F&/F"/ 1 y/.VJyKw5KF>G34D`""8/a/8KpK[aKpGa?ѢF/k//F?FB1?BBB7 B GqG#Fk///Gk//BGF/k///#~^GF////./"JKGIB;BZ w`CpFWKv`KA?@!G7B;DpGu#B0 @8Ksu/W Hp DF! H"zJ!G[uK/DzGu?y5H"Ӳu/[uKyGu?Ӣ.J"p#P/[Kp@GZ_C HG6/GFY6K'D! "{J;G6?Sy:H#.WJFF>?]3C//`F"{KS ."FVJF>?J/3GVBG K#6GF7ByJ"YB<."WJF>yKU#S.WJFF>?+//sHFDVB!B[#y @ S;/aHG@KFG#"Y;KF!G;? {J5/Y5K;G5?S .wKFVJF>/S?G] #k/ 2 5B8WBCBB7JB C2/ KDDDF/0///F"*`ӲB5/. 5 2@ KJ HD/.WJxG!#uHF>1".a/JaK7JF! /.yHUJF>12D?k//. HW JF>//. HU JF>//#~^GF////./0#JKGIB;BZ w`CpFWKv`KA?@!G7B;DpGu#B0 @8Ksu/W Hp DF! H"zJ!G[uK/DzGu?y5H"0 Ӳu/[uKyGu?Ӣ.J"P/PKp@GZ_C HG6/GFY6K'D! "{J;G6?Sy:H#.WJFF>?]3C//`F"{KS ."FVJF>?J/3GVBG K#6GF7ByJ"YB<."WJF>yKU#S.WJFF>?+//sHFDVB!B[#y @ S;/aHG@KFG#"Y;KF!G;? {J5/Y5K;G5?S .wKFVJF>/S?G] #k/ 2 5B8WBCBB7JB C2/ KDDDF/0///F"*`ӲB5/.5 2@5K"J HD/.WJxGuH F>1".a/J`K7JF! /.yHUJF>12D?k//. HW JF>//. HU JF>//2FGGGp1,GQ#":HF/ q/qKFc@//7,w#;H/ .JBH@/@K /W/w/7  [aKZ@KgKGK_Ӻw@=/ @X\@HCk//0WBYBE/"///F Gk///1WB"y BF7 /// G/k///;WB"`C/+`F// G/k///"7 F/ @,H/.JF"F/@ G/k/// Gk/ Gk/ Gk/GG/k///W/G7 AK 7.7JF"Gk///GG/k///3GG/k///2QBtGG @F"/M@q/pK/ Q.R@JGJ DD `/4Gk/4Gk//4G.Q" 1"J q/[`KgK D D @ 4G/k///4Gk//4G.q#1"JQ.RQJGJ)F-F/ 4G /k///4Gk//4GG /k///Gs4G/k///#2FGG^~GG^ GGG 67,W#:H/ w/wKBH0.0J /W/W. 7 R@JZAKGJGK_GxU0BB@\BCk/7,U7"w/1H4GpR"ABwK.HD  JJA:@A2@! DC////U4G"F:`pB //.W#J/7.7JBH,H /7.w/W#7 [zKQ!JgK'JC_x @5@@\@Ck//.w/7"JwKP@@KCG,:ZJH@@@@DC///"F? ///8C YC///8C yC///8C C///GGG}"_///"F/-@///W/7 AK/ .JBHP.PJ /,w.w#W S{J@HgJH_GuB @x\B@Ck//"CY@@-@/"///F f:C"y@CF#@ ^!C" @F  V" F/ w/`K/W.WJF"E/// @// <// 8// 4//GGG}"_* "FW '.J"@.JF"//8C YC///8C yC/ //8C C////GG]] 0#/k///#2FGG~^G G #k//9WB 1 G G]> #k//B7,W#:H w/wKBH0.0J /7// W#XKY:KK'K'_G5WB\BCk// #G/@G] #k//8, 8"1H x/xK F#G/ G] #k//.GX#J8.8J'D #G] #/k///#s// "F/@G] #k//w/"pK/7/7KBH6.6J /W.7,# A8HR@J'HGJ_GG7#X!F9FG] #/k///G"G] #/k///8WB YC//G] #k//:WB y@C/@G] #k//#//!WB @/ G] #k//# //GG] #k/#G)/x/8"qK/ 8/8KBH9,9H /x/,"8"@H[qKHgK[_GW!@ \<@hCk//:XBY@C@/#G?/GG] #k/1XBy B?#G?/ XB@#G?/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H _G50BB@\BCk/7.H54Gw#,;Jp! 1@H.HD @KJPBAB! DC////H54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@HCk//.w/7"JwK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/s@G] #k//"F2`/.7 J/ W/WKBH.J /,/7#w#XK@HKHc_GG9!Bx!FN}!B//// "G] #/k///"F: "F_G] #k/G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G50BB-@\B8Ck/7.h54Gw#,;Jp! 1@H.HD @KJPBAB! DC////h54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@Ck//.w/7"JwK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//4G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/{@G] #k//"7 " FF`.Jr W/WK/FZ ?7/ K w/uKBHP/PK0B7BY/5,5"5#A1HXK'HK_0@7B/J/"F/5/U#:K/ 5,5HBHa/aK //. U#PJXKJK_G"@/ =#@"F_G] #/k///X"DTG "G] #k//// .JBHp/pK8F////GG] #k/W/7/#"Y8KZUK'KGK_8D//"F/ ///7/"5K/W/WKBH!.!J /,w/"#[pK@HgKH_GX"D8#D ?"FG] #k/TG"G] #/k///#CG^~D^ ~(08޴@HGhۤ>GGG4Gp //@/`#[K@.JP@Hp.pJ /@.@/ "`"ZQKRSJGKGJ7_Gt0BB@\BCk/ .@.`#;J@J@JFq.0HqJQ:BQ&B10FC2// C#G?/] r#D 2,;H r.`JS@H3.3J /@/ ,@"`"A2HZSK'HGK_G!F9!B @`]!B/_"F?=$G/= !"D@A/QK .JP@HP.PJ / .`/ @"Q!J[rK'JgK_GBBG9BrF/ @@]B/?F?=$Ge/}{#}cG[`///@.@#ZJ@ . JP@Hp/pK / .@. `#RAJQ;JGJ'J_GTFBN`5@\BC/k///=1a@Y B/ '//}2s@s"y@BC@#F}?"//=;q@1"`C`=C#F?//]G}"t#2"Ga_=#F?=! C=#F?// ///G]] }(08ݤ@HP#k/]R"CF]/2#Kr/rK@@H , H /2..r""Q3JUJ'JJ3_ 1@4@\@Ck//#GX/8 AK 8.8JQ@H.J /.,x""GHUJHJ_G41 B#Bq\ e_>(" G"2UBAB7@x! .5"U""FP C CJ*./"JK! F"u/rK"@,.HJD/"//G/G5"Pb#@_ ///G5"b#_///GG]] #/k///#2F 7QB~^GG^GG 1F7B/5#K5,5HBHa/aK ..5" PJVJJJ_G"W!@w\<@<Ck//G5"b#0_ӯ///G5"b#_ӧ/// "5 F@U,AH/ .JBH.J /5/.#U#WJY:KJ'Kw_GGU"XFFG" U #u#RDz. J35/"K+G/ U RDo 5.;JG .JFd///B //6UB YB/Z//8UB U yCS//7UB U BK//GE/U RD=@/"/" !K/ b/bKBH.J /..# VJWJJJ_G7BBWBFFFF淙B) / /B RD///!BBy @ B RD /;BBY`C`B RD//GS//G]] #k//"F?.#"B#RGJ.J F?".b#;J "#,HD/ FG///FGSG/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G(50B7B@\BlCk/7.54Gw#,;Jp! 1@H.HD @KJPBAB! DC////54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGKW_( @5@@\@Ck//.w/7"JwK0C@KCG,:KH@@@@DCk///"F?G] #k///2WB Y@B/W@G] #k//2WB y@B/K@G] #k//2WB @B/?@G] #k//G"G] #/k///2WB Y@B/'@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/GG] #k/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G50BB@\BCk/7.54Gw#,;Jp! 1@H.HD @KJPBAB! DC////54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGKc_Ө @5@v@\@\Ck//.w/7"JwK0C@KCG,:KH@@@@DC_///"F?G] #k///2WB Y@B/K@G] #k//2WB y@B/?@G] #k//2WB @B/3@G] #k//GG] #k/2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/SFGGG-GG/2,R#:H/ r/rKCH0.0J /2,,R#r#@HA;HH'H_G=B @@\BCk//1rBY B9 /R"///SF_ Gk///;rBR"y`CSF+`///_ G/k/// rBR"@SF///_ G/k///FR"SF `G/k/// Gk/ Gk/ Gk/TGG/k///T2"2,1H r/rKCH.J /r..R"R#WJSrJJgJS_GGBBBGGrFk/01BGWB0CpFk//#2FGG~^GG^GG g/9B  1 Ga B5,U#:H u/uKBH0.0J /U.u" RSJXKGJK_G(B0QBWBE \BCk/GGU"b#GG%_:GGU"b#GG_2 "5"F- .J/U.UJBH/K /u/5/U#5 Y:K[aK'KgK_G(2@BCB`\\B8Ck/ "5 F  U/AK/ .JBHp/pK //u.U"5#SrJXKgJK_G5"b#FBBxFc@xFG/`G//G_"F$ /5,"0H/ 5.5JBHq.qJ /u//U# XK[`KKgK_G(B11!B"B \`0 0?F4 F 04G9#/// C;K{B@; F4F 4G9#///XF C K9  `B@ TGG9#AD C1KqBG`10C9#/XF C!K"@aBTGG9#|AD C:KzBs`G :0C9#q/ C!KiaB9# aG ag///8F G9#_///UB C!K@GaBR FOd;G/,`///`9.9JG9 y#$F ,H@.JGY#F/y,zHBH#.#J ,9,y#Y#A;H@H'HH+_GbD/` $9#?D $//8FG9#///UB C K;F`B 9#?D /XF//9#//G]]G} (0#k///#Q"1"~^G.JG@q.qJoF%`&.#Q#J 1,1HxDO///A:H'H? PB1"B0@0&@ B/_///G] #k//&1"//q.#xJ/ `Q/QKxF'1 //`ZAKGK? 9(@@6J 1,@6@8B@9JD9@(@6B1"F BG_/3J!&@1"C3D7!@3D B_//G]{# #//2QB"#CBPB7JXFxFFu`/S///.J/.WJJ///"1 "#8F8F 1"{,H/wq/qK1"GNFq@q.tJn`.J1" Fi.Jf1/1K.FT$Fk/.1 1"q"G"J/W q/qK1"NFR@.JO`.J1" FJ/KG1/1Kx.F$Fk//.1 q""GJ9 q/qK1"8LF/3@.J//`.J1" F*/K'1/1K.F$Fk//.1 Q"q"1"J q/rKNF@.J`.VJJ//?"G,F-F怔'Fk/Gk//Gk//#GGG~^G.#J/6/6KBH , H /6.V/v##Z[KQ8JGK'J_ @4@o\@ Ck///2,K2H"R"8D/? ///6..6JJ"R" F/;///6/.6KJ"R"0G/76,.6H"JR"1D?G]G #k/,/HKR""D/'..JR"J"FG]G #k/G]G #k//G]G #k//G]G #k//G]G #k//2,R#:H/ 2/2KBHu/uK /..R"2"WJVJJJ?_G5BB \Bh Ck/G]G #k//G]4G #k//.JJ/2F"#GG.`FJE1/3,1K1""2F3Hs"D;.Js"0/////K"/1/1K1"2F0G)3,3H s"/.J /K1"2FF s/sK s"/.J/.J1"F /K2Bk/Gk//Gk//#GGG~^GG///.#J/5/5KBH , H /5.U/u##Z[KQ8JGK'J_ @3@\@ Ck//"//"//"//"//G] B #k//#GG~^G/."J/.JwBH7/7K /T/,4 t#@HZ[KHGKk_G]BB9BFF/"/G]G #k//2FGGGe#?#~^G/,7 H/W/WKBH.J /7.7,# Q8JA H'J'H7_GU0BB:(\B Ck/"3//"///3"30 @3'//"7"F0@W/QK 7,7H#BH,3HXDDW/.#7"PJZQK#JGK_XDD3//"3F0 @3G] #k/2FGGGm1,G""F1H/ q/pKF`@//7, 7H/ .JBH@/@K /w/W/7  [aKZ@KgKGK_Ӻw@=/ @\@tCk//0WBYBA/"///F Gk///1WB"y BF3 /// G/k///;WB"`C/'`F// G/k///"F @,H.7"JF"F@ Gk/// Gk/ Gk/ Gk/GG/k///W/G"WK 7.0JF"Gk///GG/k///3GG/k///2QBtGG @FO@q/qKQ.R@JGJ DD/ ` 4G/k///4Gk//4G.1" Jq/[`KgK D D/ @ 4G/k///4Gk//4G.1"J1"Q.RQJGJ)F-F/ 4G /k///4Gk//4GG /k///Gs4G/k///#2FGG^~GG^ GGG 27,"7H/ w/pKBH0.0J /W.W/ 7 R@JZAKGJGK_G8U0BB@\BCk/7,U4G w/7HpR"AB`K.HD  JJA:@A2@! DC////U4G"F:`pB //.7 J/7.!JBH,H /w/7.W#7 [zKQ!JgK'J_8 @5@@\@Ck//.w/W#JzKP@@KCG,:ZJH@@@@DC///"F? ///8C YC///8C yC///8C C///GGG}"_///"F/-@///W/7"WK/ .JBHP.PJ /w.,w#W S{J@HgJH_GuB @8\BlCk//"CY@@)@/"///F b:C"y@CF@ Z!C" @F  R"F w/wKW."PJF"C/ @// <// 8// 4//GGG}"_* "FW#'.J"@.JF"//8C YC///8C yC/ //8C C////GG]] 0#/k///#2FGG~^G G #k//9WB 1 G G] #k//B7,"7H w/pKBH0.0J //7/ W#XKY:KK'Kg_G5WBH\B Ck// #G/@G] #k//8, "8H x/pK F#G/ G] #k//.G8 J8.!J'D #G] #/k///#s// "F/@G] #k//w/W#wK/7/:KBH6.6J /7,W.# A8HR@J'HGJ_GG7#X!F9FG] #/k///G"G] #/k///8WB YC//G] #k//:WB y@C/@G] #k//#//!WB @/ G] #k//# //GG] #k/#G)/x/X#xK/ 8/:KBH9,9H /,x/"8"@H[qKHgK_GW!@ H\<@ Ck//:XBY@C@/#G?/GG] #k/1XBy B?#G?/ XB@#G?/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'HK_G50BB@\B Ck/7.5W#,7Jp! 1@H4G.HD @KJPBAB! DC////54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK _Ө @5@@\@t Ck//.w/W#JzK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/s@G] #k//"F2`/.7"J/ W/QKBH.J //,7#w#XK@HKH_GG9!Bx!FN}!B//// "G] #/k///"F: "F_G] #k/G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H#_G50BB-@\BdCk/7.(5W#,7Jp! 1@H4G.HD @KJPBAB! DC////(54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@Ck//.w/W#JzK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//4G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/{@G] #k//"7""FF`.J"r W/QK/FZ ?7/5K w/pKBHP/PK0B7BY5,/5"5#A1HXK'HK?_0@7B/J/"F/5/5"5K/ 5,1HBHa/aK /./ U#PJXKJK_G"@/ =#@"F_G] #/k///X"DTG "G] #k//// .7"JBHp/pK8F///GG] #k/7/W/#"Y8KZUK'KGK_8D//"F/ ///7/7 7K/W/AKBH!.!J /w/,"#[pK@HgKH_GX"D8#D ?"FG] #k/TG"G] #/k///#CG^~D^ ~(08޴@HG(ۤ>GGG4Gp //@/@"@K@.JP@Hp.pJ /@/@. "`"ZQKRSJGKGJw_Gt0BB@\B Ck/ .@." JPJ@JFq.0HqJQ:BQ&B10FC2// C#G?/] R#D 2, H r.zJS@H3.3J / ,@/@"`"A2HZSK'HGK7_G!F9!B @`]!B/_"F?=$G/= a#D@A/@K .JP@HP.PJ / .`/ @"Q!J[rK'JgK_GBBG9BrF/ @@]B/?F?=$Ge/}{#}cG[`///@."@J@ .0JP@Hp/pK /@. . `#RAJQ;JGJ'J_GTFBN`5@\B C/k///=1a@Y B/ '//}2s@s"y@BC@#F}?"//=;q@1"`C`=C#F?//]G}"t#2"Ga_=#F?=! C=#F?// ///G]] }(08ݤ@HP#k/]R"CF]/ Kr/`K@@H , H /2..r""Q3JUJ'JJs_ 1@4@\@ Ck//#GX/x#XK 8.;JQ@H.J /,.x""GHUJHJO_G41 B#Bq\ m_>" G"2UBAB7@! .P C"5" CU#@GJ*..JJ"! F"u/"uK@,.HJD/"//G/G5"Pb#D_ ///G5"b#_///GG]] #/k///#2F 7QB~^GG^GG 1F7B/U#K5,:HBHa/aK ..5" PJVJJJ_G"W!@wh\<@h Ck//G5"b#0_ӯ///G5"b#_ӧ/// "5"F@U,UH/ .JBH.J /.5/#U#WJY:KJ'K_GGU"XFFG" U U#"RDz. J35/:K+G/ U RDo 5."JG .JFd///B //6UB YB/Z//8UB U yCS//7UB U BK//GE/U RD=@/"/"""K/ b/qKBH.J /..# VJWJJJW_G7BBWBFFFF淙B) / /B RD///!BBy @ B RD /;BBY`C`B RD//GS//G]] #k//"F?.#"B#RGJ.J F?".b#;J "#,HD/ FG///FGSG/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H_G50B7B@\BCk/7.H5W#,7Jp! 1@H4G.HD @KJPBAB! DC////H54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@4Ck//.w/W#JzK0C@KCG,:KH@@@@DCk///"F?G] #k///2WB Y@B/W@G] #k//2WB y@B/K@G] #k//2WB @B/?@G] #k//G"G] #/>k///2WB Y@B/'@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/GG] #k/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H_Gh50BB@\BCk/7.5W#,7Jp! 1@H4G.HD @KJPBAB! DC////54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK_h @5@v@\@Ck//.w/W#JzK0C@KCG,:KH@@@@DC_///"F?G] #k///2WB Y@B/K@G] #k//2WB y@B/?@G] #k//2WB @B/3@G] #k//GG] #k/2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/SFGGG-GG/2,"2H/ r/pKCH0.0J /,2,R#r#@HA;HH'H_G=B @\BCk//1rBY B9 /R"///SF_ Gk///;rBR"y`CSF+`///_ G/k/// rBR"@SF///_ G/k///FR"SF `G/k/// Gk/ Gk/ Gk/TGG/k///T"2,2H r/pKCH.J /.r.R"R#WJSrJJgJ_GGBBBGGrFk/01BGWB0CpFk//#2FGG~^GG^GG g/9B  1 Ga B5,"5H u/pKBH0.0J U./u" RSJXKGJKW_GB0QBWBE \BCk/GGU"b#GG%_:GGU"b#GG_2 "u"F- .J/U.SJBH/K /5/u/U#5 Y:K[aK'KgK#_G2@BCB`\\BdCk/ "5"F  U/UK/ .JBHp/pK /u./U"5#SrJXKgJK_G5"b#FBBxFc@xFG/`G//G_"F$ /5,U"5H/ 5.2JBHq.qJ //u/U# XK[`KKgK_GB11!B"B \ //.r/JrK"R"F/;///,R/HRK"R"D/76.2/6J"2KR"0FG]G #k//"KR"F*2,v/2HvKDR""G]G #/k///G]G #k//G]G #k//G]G #k//G]G #k//2.#2J/R/XKBH.J /2,2/R"r#A;HY2K'H'K_Gx5BB \BCk/G]G #k//G]4G #k//.JJ/2F1#q#`GG.q#`FJ1"2FB/,KHs"G;.Js"0////.J1"2F.1,;H"0D) /Ks"/.J1"2F1/"6KFs/sKs"/ /K1".JF 3/3K/2Bk/Gk//Gk//#GGG~^GG///. J/5/ KBH , H /U/5.u##Z[KQ8JGK'J_Ө @3@\@0Ck//"//"//"//"//G] B #k//#GG~^G/.#J/.JwBH7/7K /,T/4 t#@HZ[KHGK_G]BB9BFF/"/G]G #k//2FGGGe#?#~^G/,w#H/W/[KBH.J /7.7,# Q8JA H'J'H{_GU0BB:\BCk/"3//"///3"30 @3'//"w#F0@W/WK 7,;H#BH,3HXDD.W/#7"PJZQK#JGKB_XDD3//"3F0 @3G] #k/G4G27GJ3gJ,q/F FHqK"1"!H;J" 3@ 2@ sC rCFF"7DFDFD6/..JJ!Ju#"1"4J 3@ 2@ B BD6 FDFFFF.q/JqK4H6'H B B`#"1" B BF"FFFD?DD/ 4G/k///Gk//GGG{#0_G/k///# ~"~"> ^G>"8p(G[@Zk= D G ]( 0#k///G ](0# HH/k///#2F4G^~^ ~(08޴@HGGGGGGP  HGGGb#_ӡ]@@@9@0D1D D7///@CGb#@GG_ӡ]@@@9@0D1D DD@4G$GGb#G_ / ///D@@b#]@9@G2FG3F Fs@@G_ ?/G//G]] }(08ݤ@HP#k///ƠD@c@GGb#G^_ӡ]@@@9@0DG1D2D /@cGGb#@GM_ӡ]@@@9@0DG1D2D/?U@@tF@ ݢ&H@HGb#GG4_D //01 @11@2@@7B7#B7AB@F @FFFF@@GGb#G_D/?@c4G@g//=//@CGb#@GG_ӡ]@@@9@0D1D2D?D~//#0^~8^@~HPX޴`hG#GGGG{#@BUB&BuB(  G}" =G""_=@ =?@D%dGG]=[ G@Zk=#`%/p]=@2 =GG ""}""b#_ =/%/ = /`%/4G//d]G(g"=G[/@Zk2=Gb#G_!1 @ 1@7#@7@ Dx}]`S(} =GtG@Ģ[2B@Zk= =G ]"^G}"""b#_ =%c/4G`/d]G8g"=G[/@Zk@=`D%O/d@Gg" ]=G[2TB@Zk4G0d@Gg" ]=G[2TB@Zk// =GGb#,_ӣ]@@@9@gDaD D////@$ Gb#BG =_ӧ]@@@9@DaD D/ F//4G//]EGG0]8]@}HPXݤ`hp#k//JG&";B"@_&;B@R"@ ?BF0D3Dk// k// ? B(P.PJF/k///gBrJ/ ,@HD<4Gk/JF0 " 1,XF{#sQJvtKTGA1H3D1<.UJF>k/?$JJ B\FgFF .{QJs"w`J"Q"VJF>1,A HvJtG7D1<.UJF>k///'WJJ" B>DgFJ`.u1Hs"{vJFF1 ""TJF"sJ>,tJ@HD<Q.RAJTFQ>,@HD<Gk//Gk//_&. B/`///+ .vJ4GUJF>/k///&?# B0BWJF'# q/&"sK"[qKsGq?.vJUJTGF>k//Gk//. JU JF>//q/ K[ qKsGq?//. JU JF>//t k//#TG~^^GGlpp[/@Zk!H// G/"HDD`J4G Jp1"0BP.PJPBBPBFCG]] #k/#TG~^^GGlpp[/@Zk!H// G/"HDD`J4G Jp1"0BP.PJPBBPBFCG]] #k/#TG~^^GGlpp[/@Zk!HGb#C //_Ӡ@G]] #/k///#^~^ ~(08޴@GGGGGG12F//.JWBt7/u u"Y K'KTGlb[p@ZkG="_"8@ @s#Y/YKA@H.J!C! #e1"3@ @d`#@/O///Ţ @F#v#eW/6,WKrJ"A6H2D6<e3"%.S/JaJ7"ZSKAGS?P"E7//W"1KXKa0JG?e"w/3/rKaSJ"Y3K!G3?0"%/p/KaJ7"@[pKaGp?Er"e7//1Ka2JXKG?////E 1@z#e.:.JrJ"Q:J2F:>#$F/wG]] }(08ݤ@P#k/#~^^~F (0޴8@G7ӢGGGGGF///GKCX@t8,t  H3GGTG;vH`lb[p@Zk#.JP@HP.PJ0@! # "Ų5/zHBY5K:G5?㢱B6F/?G]]} (0ݤ8@P#/k///@/Z @K:D5/ HY 5K:G5?//`#GGC^~ ^(~08@޴HPX>`^h~px޵G{c G ^~5,B""zJA5H":D5.PHzHWJU" F>u.pJ{JSrJ{Fu>HC#GG4G4G.JBCFwaG+`0 @0@Z#"ݢ%%H t Gt!!p! G G tG!JaHb"/`f/[fKaGf?H/`IZHK@GH?F4F'1?J'//G//@qEpEB"@&,"ApFHA&H0D&<DTJWBrñP@b@I@G HV.LDb1@HVJCCBtFJFF f/>[fKtGf?G_G4@GDz6JFDz.aJPJF>Q///Gy#_/.WJ>.zIUJF>F4FG2_JG9/// L@AH_DCDo`AJ.6HpfICJTBBTBF&,A&H0D&</ATG. .WJ J@@B@@DDtFJF>'"G_'D?D D'/c(.rHHQ(J2F(> 0 Ai"J!  !Wݡ } ylnp(909 `TnXn\nH.L.P.`.d.h.8@<G8///G] ](}08@ݤHPX=`]h}pxݥ#k/G//G//G//H/ IZ HK@GH? //F. JP JF>U//. IU JF>_//(. HHQ (J2F(>//#GG~^^~ GG {G#_c 0@@@@/_ //G]]} 0#k/G//#tF~^G  #k/H15@B S#TG8`G5@/`G] #k//DQ :FKGK:q@CW@C @G] #/k///S/SKBBCFF /BDQ0@KzG@G] #/k///.s/S#JzK&'"{#v1JF_'Z#FF Fb98@F'`D0HFfGs"uG] #/k///s/8@FsK/@D0JFNT.5@B"JFFLDѢ8@F0JF?Gs"uG] #k/8@F D19&K'K C C Cu C[GWGF'"F/G] #k//s#KGG]G #k///DQ8@F0@K@Gx@G F////D11&J'JP0B///RPBGGrGGG] #k///8@FPp k/`0 k/GGGGGG{#" //GGGGG4G{#"//#G^~{#^ GGG>_  GD"`1H(x01?J F D"]b0HB4GZG]] 0#k///@#^~ ~""^~GGG~G>^>"C8p~"[@Zk=DG/ "P.RPJP> "U_/@GXG/// "b#_#G/bC @@G]]}#k/#GGG~^G{#G#G ](0]@^GG^_G] #/k01q!B#ۦW"B~^^~ GGG.\@!DTG/ ?@ DtG 9BWB Ci C!G/T ///2/@F 1@2KR"8D'D0GG ;`KCaGCWB!G@ 2/ 1@2KR"8D'D0G8 ;`KCaGWBC9D 1@0 2/2KR"8D'D0G/( ;`KCaGWBC9D 1@ 2/2KR"8D'D0G/ ;`KCaGWBC9D 1@ 2/2KR"8D'D0G/ ;`KCaGWBC9D/?pCB/ /// 0/`pKY0K GWBG"0?z0B4BG/k///0B4B k//0B4B k//0B4B k//#G~^G^GBUBG#//UBBD/ ///r/rK0@ H`,@H! z0H"DP#<,H0,DA:H R"bH"D0< B!BC "@@B"DVB_v#vC[BD/S///R,@FRHP@0,`PHA0H DFR""0<,H@_P,zHBPHR""ZDP<,H@_0,bHA0H"DR""0<,H@_0,bHA0HR"""D0<,H@/_0,bHA0H"DR""0<,H@/_0,bHA0H"DR"[B"0<VB/?///R,RHP@/{0,zPHA0H:DR"VB"0<UBBDv?UBBF 2,2H0@v0H@,@HD"R"<0B2YBSG]]G #/k///B_B?BBG#GGG~^GDG/ #k///VwG [CWG1/ G] #k// UGG/oZk67G] #/k///GGGG@/k///WBBWB //2,G2HR"0@G 8@ <@#D/4G />@!DTG/ ?@ DtG 9BWB Ce C!G/T ///2/;`K@F 1@C2KR"8D'D0GaGWBb C!G@ 2/;`K 1@2KCR"8D'D0GaGC 1@R WB9D0 2/;`K2KCR"8D'D0GaGC 1@C WB9D/ 2/2K;`KCR"8D'D0GaGC 1@3 WB9D/ 2/2K;`KCR"8D'D0GaGC/# WB9D/?C% B 0/`pKGY0K" GWB0?~0B4BG/k///0B4B k//0B4B k//0B4B k//0B4B k//#G~^G^~ (B0F0޴8G8GG51B3'_'{#Z# @8@ '7 H!@ABCAB$ Q#B`@ b@@Y,YH 9# /y,Y, dHYH9##aHCD!CZDD/`y,yH 9#,y, HyH9#$HdD DD"WAHzDdDDCDCB P@wPH//,EHD"<+/ @HGE@F ,"fJEH"D<//X@AHGD . dHWJ"F> ///VBH,GD wHFH"D<BDZ///A,eHDH"DKD%.dHKD/.dHKD WJ"FBD#`@> .dHWJ"FBD>!CG60B2BSG/G]]} (0ݤ8@#k//0B7B //#/,D H9#DD'///,E H9#eD3///#GG~^G^~ (@B0޴8@G@Ѣ'?'_'{#B B@B&"7JBCB///R,GRHR"P@`GãX@\@`CD4G /^@TG`AD///_@tG`@D"@C D@/@@BD/T@///,@F$1@HR"XDGDDG#`HCbDC@BD@@,$1@HR"XDGDD8#`HCbD@BCED$1@0@,HR"XDGDD/(#`HCbD@BCED$1@ @,HR"XDGDD/#`HCbD@BCED$1@@,HR"XDGDD/#`HCbD@BCED/_z@6@/#c@// ,baHEH@BG! Dk ,tAHEH@B! DG//, AHE HD<//@GGwJ#`JYB.F>0/Y8K GTG0?TGk///G/k///>{#//#G~^G^~ (B0F0޴8G8GG51B3'_'{#Z# @8@ '7 H!@ABCAB$ Y,y, YHdH9#"AHCD//y,yH G9#!C ZD{D`/y,,yHH#aHdD,H G ED"WAH9#zDeDDCDCBP@wPH//,DHD "<* @HGC@D `p, fHCpH"fDp<//X@AHGD `. cHWJ"F> ///VBH,G`Dc wpHFH"D<BDZ`///Ap,dHCpH"dDKD%`.cHKD/`.cHKD WJ"FBD%Ѡ@> `.cHWJ"FBD>!CG:0BG2B//S///G]]} (0ݤ8@#k//0B7B //0B 2B///#/Y,B YHbDy,C yHD,#GG~^G^~ (TB0޴8@HG@///TB' ?$_'! C C?'9#7KCCB///R,GRHR"P@`GãX@\@`CD4G /^@TG`AD///_@tG`@D"BC D@/@TBD/T@///,@F$1@HR"XDGDDG#`HCbDCTBD@@,$1@HR"XDGDD8#`HCbDTBCED$1@0@,HR"XDGDD/(#`HCbDTBCED$1@ @,HR"XDGDD/#`HCbDTBCED$1@@,HR"XDGDD/#`HCbDTBCED/_z@BaH`@U,vHBUH"VDGU<,U ebHDHD<TBrO/U,duHGBUH"DDTBU0@y@/_C.cUJGG>`///8B="@bCB/ieZk#0B B?G/Gp]x]}ݤ#k//cCBòB?BP# SFp^~x^~޴G@ GGGG.(B4G"0b UJJHZk.DqHPJ F>0@y@/_C .¦UJGG4Ge>v `[@Zk// P/ b%TGs 0@BQB [@ZkGG&//8B="@bB!@/dZkŢ0@ @/4GxW@[/@ZkG4G`D@[@Zk/ŠG4G%dF&@[@Zk4G"de%[C#@@ZkŠ0@ŰGGp]x]}ݤ#k////#GG~^^~ (GGG@{#C @//cXBG`bwBB/dZk0@ @ /G]]} (0#/k/// k//8"#aY@4G[/@Zk8"4Ga@@[@ZkB 1@c @P@Q@GP"/gZk//#G^~^~ (GGGGx{#_D //.B4G#"bc PJJGZk.DqHPJ F>0@ D"/_C.BTJb""">0dZk//G/Bb" ""%dZk4GðBb"0""dZk4GðBb"""dZkTGðBb""" dZkTGðBb"""dZk4GðBb" ""cZk4GðBb"""cZk4GðBb"""cZkGðBb"(""cZkGðBb"""cZkGðBb"""cZkTGxðBb"X""cZkTGpðBb"""cZkTGhðBb"""cZktG`ðBb"8""cZktGXðBb"""cZktGPðBb"""cZkGHðBb"(""cZkG@ðBb"X""cZkG8ðBb"x""cZkG0ðBb"h""cZkG(ðBb"h""}cZk4G ðBb"8""ucZkTGðBb"""mcZktGðBb"H""ecZkGðB""""b\cZkDGG]]} (0#k///0BB[ \BCk///H k// k// k// k// k// k// k// k// k//( k// k//8 k//P k// k// k// k// k//` k// k//p k// k//Gk//#^~^~ (0GGGH{#> ^5_ӈ"D"TG`ax1"[@ZkGPG //.pB4G#"xbc PJJoFZk.DqHPJ F>0@ D"/_(bC.s4G"UJ>[@ZkeG"TG[H1"@ZkG XG4Ge[@ZkeG ""TG[H1"@ZkG / 4G bd G@GG]]} (0@#k///ۦ4G##~^^~ GG`[v G@Zkb4GTG#"s1"G]]} 0#k///k///0"tG bh"GV_B@" btG("P_tG"B b8"I_tG" b("hBB_Ӱ"H" btGpB<_B"tG" b6_BP""tG b0_G b`B"]]GtG} 0#$#~^^~ (GG{#hb_#c `< QB//0///Q01B1"@//$01B q01B`Q01B_d4GAC![/@Zkd4G#[@ @@Zk#QBd4G[@ZkG]]} (0#k///#^~^ ~(GGX{#{#c  5_X"TGh"`a@1"[@Zk /`"TGY@h" Xbc1"[/@ZkchBtG`[R"82"@Zk/#]0@@@#@G]] }(0#k//;#^~^ GG{#1/ _0@@\@ C/k///"/B/"b#@ "b#//@Ӛ/ "b#@`"b#//@ӏ"b#@ӊ/ "b#@`"b#//@"b#@zz/"b#}@X"tb#//w@o0"b#s@jj/8"b#m@/cc//"b#e@/[[//H"b#]@/SS//`"b#U@/KK//"b#M@/CC//"b#E@/;;//"b#=@/33//"b#5@/++//p"b#-@/##//"b#%@///("b#@Ӏ"b#//@8"b#@ /"b# @////GG]] 0#k/@#x^~^~޴GGG8{#$  _o`#,b#GG#Hi }_D G. B4G&"(b PJJ'DZk.DqHPJ F>0@y@/_C.dUJGG>`///0B"8bCB8Y`Zk$0B B?/DB00BGTG"8b zZk0B@GG""TG8b8D/zZk@G4G8DDp3 G[/@ZkBGG4Gb/aZkBG4GbaZk//G///Gx]]}ݤ#k/"G4Ga[@ZkG İ///8bDH"G@tGsx1"[/@Zkb#/_G /Xb#_G0BGG8b_ZkG4G@b=_#G0^~8^@~ HRPGGGG>>" ^""^0[~8b(~~".xZk(= = 0BC}2SBC///G @ B(bFbZk D  BG(b/bZkD/ / BG(b/bZk /GG0]8]@}HP`#k///# ^~ ^(~08@޴HGG^GGG   W T/dGTGGp:b#3tB}%1B= 3@ F@G}"Gc/`$D[2BE="/@ZkGG=GTG:b#/@}@d@.PJ>/ "b#/$De2B]"U_GG=GTG:b#ҥ@D?  }D@C@d.PJ>&" FF"@FGG] ](}08@ݤHP#k///# ^~ ^(~08@޴HGGGGG   z w/eGGG:b#TG}/m`ĢsB7BB wBʥ@$ @ 1@c`Dd[SBE="}"G@ZkGG=GTG:b#s@}@@ .Q J >/ "b#/DdSBe]"_GG=GTG:b#V@$"}@ @A.RAJA>? Fbf"`Bc" D[TG1"/@ZkcG%.,""%,.[4J"H 01"0HJ/@ZkG] ](}08@ݤHP#/k///#8^~@^H~PX`޴hGG GGqG4B C4B01@(p`1[3CG0>"(~"G@Zk//d$G0e@#@d!.Q!J!>("Xb#/DSB0]"GZ_d0e@@d.PJ>G///%(=| /(0GTGG ;b#B 5B@$ @ 1@0c`Dd[SBE0="(}"G@ZkGG(=GTG@;b#@$$0 @ B`.S`J`>#/0]"("Xb#wĢeB_GG(=GTG@;b#@$F"0 @B.TJ>0@///% ""BFPG  ="TGPbYAG#G"B"GG0'b#/I@G =GTG@;b#a@GG_"="tG:b#Υ@Ġ @ C @0%(=?G5/// b0"TG(cX1"[@ZkcGG .`" ,"..[3J0" H 01"JJ@Zk,aeH@HD<G /// ("TGp0"[/@Zk G8]@]H}PX`ݤhp#/k///# ~^^~ (G.G GG/'C@ c"`8t4G[@Zk(B4G0b////^ZkC$C (B4G0b^Zk" D8"G4Gq[@ZkGG]]} (0#/k///# ^~ ^(~08@޴HPXGk$p G} G d`#//[ Y4BC/ް'///#G="}"ݰG9'C=eG[/@Zk=   @@///c cd@+@3// ///E @/cG]""ݰb#3gB}G_"= / =@ @/ // // d@// c$c3tBs@G] ](}08@ݤHPX`#k#G? ~^^GG#/ //PZ#/6@TG4GTs3S TG~ bGtG >P>GGGG4G4G{{#H~8b(08@IA "GTGGtGGGG (4G{9#H>0G8b8@1AG]] #k///#~^^GG#/0! / GTG>T" ~(H^GGGP~XGG{GTG08@A G]] #/k///#~^^GG#/0! / GTG>T"8~H^P~GGGGG{G4G (0@/A G]] #/k///P#TG^~ [ @^ ~RB(GG>GPQ_Bz[@ZkGpb#G'_G /CB@0@#G]] }(0#k/0G /k///11 BG0/ k//p[;B ;0/k////k///P#G~^^~R" (0޴8G@G0GG //CTG8@G/@$0Q.Gq#QJDQ/[KTG@GHtb#/[ A,D% E"FGTGHtb#HDDV%.2J $TG/G A,D% E"FGTGHtb#HDDw///+%.2J/ $TG// ADG% "D"/c,HDD^%.e..%JtJ. FgFJ1W"JF 3aJ5נJ3FJ5FD%F /tG% %/e/,%K !GaK9!K'DH! HD!G D //TGE..EJ JCFD2@JEF"C51@@@@7B`F8F /'_'7@?#$?${#Z#;@B @! yC@FFBG4GGb#H|R"_GH//BG4G0b#GG|R"x_GXe`$àƠ.,&".."J"[H {1"JJ@ZkTG4G$cc#,#H4GQ.QJ///4GGGTGTG$sb#.JJB AGGGTGtb#>AG]]} (0ݤ8@#/k///#~^^~ (0GGGG4G///$TGTG0A/AK$@a#!@7`CDxqb#DG-/ N AGG4Gxb#0@/+A//$0!.!JX!F p0`B p/ Т0B в! 0#GTG0 C#a/aK TGxqb#/' A0@/G]G]} (0@#k//GG0"L ;GP!@(R",@hp4GGh""4`///V@0 @1"Ѳ$`///Ԣ0@ "t0@/`0@/Ԣ0@/t0@/ `0@/Ԣ0@/t0@/0@W@hwy,@h"CGPk/#~^^~ (0޴8GGG>GGۤ G@GTG 0b@/A0@s@?G//G]]} (0ݤ8@#k//D@P @@///G4"/ #~^^~ (0޴8GGGGGG///GGTGHb *A//0@/G]D@]} (0ݤ8@#k///TBk/[#~^^~R (0޴8@GGGG@{#//+_G¤/GGTGb0@ /"//A@/?b"s"'@p@CRFW JQ3Bllq ///GGTGbc A//GG]]} (0ݤ8@P#k/4G//0! 31 B/`#~^^~ G#1 BG//TG<``["@Zk#1`@G<_G]]} 0#/k///GGG/+ 0//% #~^^~ (GGGGGb#m_TG#// <a`[#@ZkG _Ӹ#?G]]} (0#k/Gs#/#4GTG~^G^~ (0G#@GGGGG2PbKA///Gb#3_4G //GGGtG b_//GG]]} (0@#k///4G//#4G~^^~ (0G GGG ////G$Gb#_///GG]]} (0@#k///4G//@[TGR/@#~^G^~ (0GGGGG;"(bA//#G""b# =_GtG""/8``[@ZkGGTG""(b/AG//G0""TG(bAӂ#GG(b""TG= @5 /AG*8""GTG(b/AG// G""TG(bAGX""GTG(bAG""GTG(b/AG P""GTG(b/A///G0""b#_0"";GGTG""(bGqAG<GH""TG(bjAG""4GTG(bcA///,G#GTG""(b0@$@SA#G0""(bTG$@@IA/# @/?G""b#_""GtG8d/`[/@ZkG]]} (0@#k//# ~^^~ (0G1GG ""{#_G ""Hb#"_G ""b#z_ ""GtG8d`[/@Zk4G/"!  //GGTGpb A//%?GG]]} (0@#k///G ""b#H_G ""Hb#_G ""b#@_GtG ""8d`[@Zk4G?0."0J-F6 p.tJmF.`#~^^~ (0޴8GۤGGGG //G@GTG5pb0@@A///S@?GG]]} (0ݤ8@#k//Gk//Gk//Gk//4G//#~^^~ (0޴8GGGGG ۤ/G@GTG Xb@/gA0@@?G//G]]} (0ݤ8@#k// d@@@GG;/ @@R3@PB>@spB0 B@2@/7`R0 B@3@PB1@spB0 B@2@+`R0 B@3@PB%@s0 B @2@ @pB`RPB0 B@0 B3!J~B?B/@/// @@spB `0 B?B/_///Gk//q1BA!B!0@?{@3B/k///#~^^~ (0޴8@H>P^X~`hp޵xGGGGGGGG G@// tG G @ u@@////.GJ BGBB F4GB` FTG@B`FtG EA @@CF/T///.D:1@CC:1@CC:1@CJ @FFqG0D/@ 0JCF< E.C:1@CEJ @XFGFFF/00JCF,.C:1@CJ @FFF0G/ 0JCF e/eK @WFC8F'FpF`0JCF@.J @DDFG/0JCF@# +@BqJ /- c.GScJc qFc>/$//4Gb#_B?GbVZk`@BsI"BG! @+@yI/ C.GRCJSFC>Nu XZk/XKG?Z#h@'@dG/G]]} (0ݤ8@H=P]X}`hpݥx#k//#h@'@ d//#h@'@ d//#h@'@ d//Ӣ`#^~ ^(~08@޴HPX>`^h~px޵G VBJBGGG G G GGGGB tGG/GK CGCC G4GC`GTG C@GtG3EA zB51@C`T@綝B/C///.DJ F4׀J0D e/eKFF 0FF E.EJXF0JGF pFF`E/EKF0JF 3B0GF51`B ,0JH DDpGF`.J8F H'F GC`BD0B/@///E.4׀JG51BCEJ XFGF0DF/o BBwGՄBBՇBh@yJFFF@/9 C/ZCKYG Gc C?/{0//GGb#_G " B"GGb#/?@!/@B4GHbGUZk`@@BtI"B! GG(@yI@ c. GScJtFc>u WZk/XKG?J#k@Gd),A//&G] ](}08@ݤHPX=`]h}pxݥ#/k///#k@ ),Ad///#k@ ),Ad///#k@ ),Ad///#G~^^~ (0޴8GGG@//1,0@ @1H1"$@a#!@7`CFF/ _$c{.J/4G///G]]} (0ݤ8@#k//G//FGGTG""HbA//GP""TGHbA/G""TGHbA/4G/G4GBb#@G/$!D F///$!F/ //DAF/@/#4c8F(s//`G/`¤GG  G@TG5Hb0@@SA///@?G//GG4G4b#@G`¤GG  G@TG!Hb0`@@3A///f@?hGj//[#4G^~^ ~(GGGr >[/@Zk"GGb#(1"/_G%/GG//"! } ]G4G# cG,8G SF8b#(CG$04<@D ""o@GG]] }(0#k/FG{#/@;01""///s#//$0`#p^~x^~1GGGG ,H @#@`#("7#@7CCbCB:D @@pG:FU@0D FDA/$P/PKB @p#(P#7@bCCC9BDZFUBp#@FB7aC] BRG8 D BrG1DZF D / E. p#`eKREJ@FE>%.sJQ%J3F%>G0@G4G`qb#EAӠ@ G(GtG="b/A//GGp]x]}#k//$0#TG~^^~ (0GGG TG$P0!:@G sb#Y?@ /A$ . Jp"" BUB7cB7BFtFpF/+// .J#B6#V#B7C7#C7AC`GGUBB@GTFGD/G%@"B(2@tGbխA$##%B# AEB Gb# @G]]} (0@#/k///$0#TG^~^ ~(08޴@HP>X^`GGGGG $TGP0!:@Gsb#Y?@ %A="GHb#_ӡ@@@31@0D41 @7cB5@1D7BעB6@tF B@"uF@G@vF8FwF/GGTGWb#H"@ӳCN @"!@Q BU@ @!0 @@1@0D F!B @@4G1DF8@"AF3D4D5D ////91@:1@;@ 7#C7CCbC0@:G @B@;G@8 F0GF //GGTGWb#H"z@ӰCN Q? &" @ B_"G@!0? FB3@!@D7aBTG!@Wb#h"D@FFG@/_@ӳCG@@@U@GTGDWb#DGDGD@M@////@D> GGGTGWb#>@//4䪝@0@G@$àGTGsb# $P012BY?B/ TGuA$C@ʠ&,&HX!D *0 B * 0B @ ="GHb#0C_Ӫ@@@GAE0D/s?$#GGtG`b1(1$B¬A/GG]] }(08ݤ@HP=X]`p#k/8[#4G^~ ^(~08@޴HPX>`^h~pxGGrGGGG[@Zk"GGb#}1"~_G$#GC% Gpb!.JD/@///BBB"tF7BF! uFb#vFSE`.JGx$D /@ӡ@rH" '.Q'J 2F'>+/"HG@F ."xJWJ F>//@HGAG ',Z#pGKA'H 0D'< ///VH.G F1"u'JTJ F>r`YeBc///<HG.8`B"K<H9aB!QbBFK<H0cBRGJGK"tJ'G<H#TFqKK9#G>'D<HG".w2KK! F:cB<H'#K;dB<H"VJGGK"Fx5HgGZ#>1QeB<H{#.K3fBD'F 1"TJG"FwJ>.VJuYKF>.TJF"pvKG"w2J>',A9H5DYeB'</XKG?.TJF>/`//<H.K3`B'GPJ9#v'K F>/ @;@ @`k@GGTG'@[@Zk///G@G="Hb#@= Gr'I4@GTG '.Q'J ,@ A2F'>k/[@G'@@Zk//G@+.q'IPJ F>.J@/k @6@G @TG @G'@[/@Zk///G@,,G.,H!s'HRGJ SFG>.J~ @7@kG @TG @G'@[/@ZkG@" EArI '.Q'J2F '>*"րIGAF ."xJWJ F>//AIGAG ,Z#aGK@H D< ///VIG.GF"tJRGJ TFG>7`YeBc///'G;QeB.qH TJr6HYeBF>."yTKPJFq`K>/XKG?.UJF>.PJF>/?`//+/"HG@F `."wJVJ F>//@HG!G g/9#l'K[gK lGg? ///VH'.G D! s'HQ'J 3F'>r@YEBc///<H',6@B'"K<H7AB8QBBFK<H,CBA'HFK"pJF<H"0DtJK"'<G<H' g.uJK# E9CB<H"K:DB<H!SqJ'GK'"tFtKGG9#g>;QEB<HZ#.K2FBDgG {#PJF">g.pISqJq5KtFg>',A6H0Dg"xSK'<.WJ' paKFYEB>.TJF>-LI E=/?@//<H'/K2@BFY'K"sJ 3G'?/_GG4Gqb#A$,,HC@2F^?,DH<G//G] ](}08@ݤHPX=`]h}px#/k///G ""b#_G//G ""b#_G//G ""b#_G//G ""b#_G//G ""b#_G//#4G$~^G^~ (0޴8GGGGG ,Xsb# H$D/8 AGb#[_ӘBGGGGGb#|R"_)$GTGsb#$P012BY?B TG@$GHb# , HxD İ_GGG4GXsb#^A /BGGb#GGp|R"_İGG]]} (0ݤ8@#/k///$0#4G^~^ ~1G(0GGGGpb#,HXD/7 ///+A$$G4Gpb# !.!J !@$@U$@0F7@GDtF`A/B!@G $@7@G@b0DGTG DxR"M$1@AGGG4Gpb#@E//GDG4G7pb#//@$ $G4Gpb# !.!J !@$@$@0F7@GDtF`@/B!@G $@7@G@b0DGTG DxR"$ 1@AGGG4Gpb#@ //GtG B"GGXb#_G]G] }(0@#/k///#4G^~^~GGGG$ 0!@ !  P @CG`pb# /B@$ , H@ "@G7 B2F3F_ //F1$."4#t#J8$D/KGT/[KEG@/C @c `dr`Dr`[="GtG@ZkGG8b# @)%D" .J" 0"7#B7B0F*Cr.uHSrJ0@uFr>"/dw/`Dw//`[="GtG@ZkGGG4G pb#/@$ , H@@ "G7 B2F3F?DaB"7BFdBBG4GR"`b#F_GG4G pb#/@C/@// db`Db`[="GtG@ZkG]]} #k/#4G^~^~ (޴08@>HGG$GG 0!@ !  P @CGtb# @$%?%="Gb#4G !)!$_//G///GF FDF cdF`51AB7BABFDB"F #9HB_#;GB8XB:CfC CGGu8DCsPJ/ 0.0@Q0J3F0> /GtG"Bsb#A@Pb#G$ / # G="_#HaG(b#_D`GtG="`[/@ZkG$ .JXF/@0@B @// 0B 8@G="b# #0 C#J_G/$G4Gtb# p033B s"`1B 1" //@$GTGsb# $P012BY?B/ TG@="Gb#%_h+#="Pb#G) /&G//o_="GtGHe/`[/@Zk//G(b#_àGtG="Df `[/@Zk//@ G]]} (ݤ08@=HP#/k///$P#4G ^~>(^R [0~8@H޴PX,GGG(bGHoZkx D B4G(b/g$#!.! JnZk8 D B4G(b/[$#!.! JnZkx D B4G(b/O$#!.! JnZk D B4G(b/C$#!.! JnZkD B4G(b/7$#!.! JnZk D4GGb#/+#$ @#P pR"`BP pGG.J"DBAB7BFF@8BhR"_Gb#/_Gb#/3_8BGGGGGb#@R"_ $ B4G(b , H/nZk D B4G(b$#!.! J/nZk D B4G(b$#!.! J/wnZkXD B4G(b$#!.! J/knZk D B4G(b$#!.! J/_nZk8 D B4G(b$#!.! J/SnZkxD4Gb#G#$ @#P p`BR"P pGG.JDB"AB7BFF@8B R"B_Gb#_$=G4GGpb#0¤ ,= HXD6G/@$0,0H@A. AJ //GG4Gpb#@$ , H@.J$#ѠF.FJXDF@GG8BU/ GTGb1@AGGG4Gpb#/@J//GDG4G;pb#0/>@$àƠ,H@.ݰJ//&.GG4Gpb#&JD/ @$àƠ,H@.J$#ѠF.FJDFG@8BGGTGb1@fAGGG4Gpb#/@ //BGtGR"GGb#_BGGGGb#R"//_Gb#x_$àGb#Ơ,HU@@D_GG ](]G0}8@HݤPX`#/k///PP# (^~0^8~@HP޴X`h>p^x~޵GGGG@$0!A/AK4GD/X$0Q.Q# ZJQ#8DFO@1, HDGJq/zKEGF@# p;;B {# `P1QCG(qb# 1"/ @$#G4G@! A1"@B! At[@Zk("GGb#}1"_ G4G="Hb#_$#G0.0JX!F/ a0`Ba // 0B =4G="Hb#BC0@CCG_$# G0.0JX!F a0`Ba / 0B =%%% G%!!!="Hb#BCG0@CC//_ӡ@ G8 D%AGA 21AA8F @A7@BAAESFDA1DTF /@/// @'1AAAA,7@DEH<DAD///"6NA"8MA5UAB CBFFe`A $C @GGTG[@Zk^G=@tH8 D/q. 0`ASqJtFq> /G@GtGPpb#M@ `A=4G=$CG Gr.JXFҢ0BҲ // R0@C RaB2#GHb#0 B#="+_ GG/$G4G(qb# P022B R"@p1qB 1" @$GTGTGpb#$0 @Y@/@G="Hb#g///("Gb#`1"_ 1? .NA"!AAA*MA/@LA.D*D (BGG8R"GGxb#,_h//GG4Gpb#@GTGPd`[/@ZkbkG4G[@Zk =#G(]0]8}@HPݤX`h=p]x}ݥ#/k///$0#~^^~ (GGGG ," H$D `/pKuB8 D`#/ @/[KOCKCFIcp`Cc  pB `/`KxD1/ "7!B "/@$H$Bß`#`C`#/$HdC$H@#@C@#DC P@GG4G sb#/w@$ , HxD `BGGb#GG@}R"_f///$#G4G sb#!.JGx'DF Y@D;  PB qP`B q.JxD#///GD@G"7B@4G" B sb#/;@$ , HxD `BGGb#GG}R"d_*///$#G4G sb#!.JGx'D @`BGGb#GG|R"L_!1@@@ 7 @0D1D) ///`BG4G`b#G|R"m_GG]]} (0#/k///&_"&"2@&s"֔"3@&TB6@uB"SFBVF_G#$0^~ ^0@(~08GGGa 0B {#a Gpb#_Gb#_BCGGGb#GR"_Gpb#_G="b#_GGpb#_$BGGGGb#R" , HD_GG4G@pb#/@]GG=``# [@ZkbG4Gc[@Zk4Gd[/@ZkG] ](}08@#k///B?BTG@F$0,!/ #^G~^ ~(08GGGGGP;"(bA 4Gx/GGTG`""(bAG D4Gk %,%H$@5!@!F?$C,0bs4G[@Zk$GG4GHbBA=GG4Gb#,G_GG G TGpb#'@/GG4Gb#_G//GGTGpb#@GT$GTG0b#0/) Q//%@q#`1!  5BGG@$GtG(b# $D/__B//G4GGG b#p}R"_$c G]] }(08@#k/$0p#4G^~^ ~1G(08޴@HP>X^`~hpx޵1,1H'DG,0@ GG@qb#@$GGTGpb# $P012BY?B TG//@Gb#/_ӀBCGGGb#GR"_$GG4G@qb#,H@@ Շ@D7@DD @/GTG ""bAӠCG=b# _G=`b#_ӼGTGP""b /AӀB G ?"}Gb#~R"_/GTG""b8D/ AӀBG ?"}Gb#~R"_GTGX""bG G/sA2#// ///GTGX""b0A B AbA# A?/BG ?"b#}Gx~R"X_$GG4G@qb#,H@@ Շ@(E7@DD@/G Gpb#_b B/$0!.#!J!B$Bq"'BF7`B%FtFvF#`/ .JF$CTG@p!aCGY?@ pb#TG_@G Gb#C_ӀBGG GGGb#GGX~R" _c//Gpb#_$GG4G@qb#-IDR///@Gpb#_$áGG4G@qb#Ρ,H XD@Ӡb#GTG_$BGGGG4G@qb#@~R"-,-HX$D) G@*GDG4G@qb#@GGb#_$BGGGG4G@qb#(~R",HD G@GGb#_ӀBGG4G~R"Gb#G_ GGGf GG#///GGTGb PA!/A/// A?ÀBGTGb#GG}R"_knG4G[@Zki/jG4GG[@ZkG G`b#G_kYG4G[@ZkT,0#/@hGTG @@Q@[@Zk// GG`b#_k=G4G[@Zk8,0GA@0@P@0@Q@б+///kG4G[@Zk//$-I!@@!@7A D@@EFDD.D D/ M.MJ اEGG4G@qb#@Gpb#_ EBG4GGG}R"b# _ ݡ@@ GDG$!+//(/IG)!(""GbTG/@AGH""GTGbA 4GGGTG8""b AӅ D )!DGGb#/+_G=b#;_á=G 8/GOGtG@Zk 4G=@ ////k4G/[//@Zk P@A FA?G]] }(08ݤ@HP=X]`}hpxݥ#/k///$0#~^^~ (0޴8@ ,GGG" H 'D `/pKFCP@CC qP`C qGb#_GGb#/C_$Gpb#G , H@@"@QF7BBpR"0F4GFGZ_/GG4Gob#@Ӽ%1@F@///#GGTG(b&@&@!?A%1@/BGGGPR"Gb#_ӼG%1@FG@#GGTG(b'@!/#A #b#%1@'@'@_Ӡ @2/G//,G#TG(bA&/b#_ӘB GGGpb#0H R"xD/_àTG/<f`[#@ZkG_G#GTG(bA/GG#TG(bAGG(bTG //AӘBGGGpb# R"_ӸGGTG(b/AàGTG<f`[/@ZkG//S_4G /BGTGGR"Gpb#_GG]]} (0ݤ8@P#/k///$0# ^~(^0~18@GGG4G{#,H1"DjQ/QKx$F /_c@D" =?F2F*//"H4GG@F "FF///'H4GG@!G }9#GyG} ///=VH4GG D! ?F!F=O`cB]"DB>//<Hr/6`B"K<H7aB8QbBFK<H9cB[rKFK"aJF<H"aGtJ"2 r?zJKr#2.G<H3cBK@#R"'GQ0J9#4F"2>.qKUJa4KF>.cBPJF>.VJF>`/<H.0@K3`BFPJ"qJR"F>Cx/G[xKx?b#_G="/D`//`/G="b#_Gb#/ _0""4GDd/`/_"@DF4GF("H4GG@F `ݢ"FFݲ///&H4GG@G ]#_GXG] ///VH4GG`G{#FFO@CB="$B>`//<HQ/5@B"K<H6AB7QBBFK<H8CBZQKFK"aJF<H"AGsJ"1 Q?yJKQ#q/F<H"K2CB"1"G@[pK#sGsJq?.TJaKF>.CBPJF>q/[uKaGq?@/<H.0@K2@BFPJ"sJ1"F>_CW/Gb#ZWKW?$_G="/(D`//$`/Gb#_4GtG0""/Dd`[@Zkc4GG(bD}}G/AGGG[tG/@ZkG ](]0}8@P#k///#4G~^G^~ (0޴8GGGxbAG/$#àTGGhob# $TGp3tBYB`///7@$Gb# , H 'D . JD M_////àü#GTGb @ @FG #A/$#G""bTG!.JG /AG//G""TGbAb#G_Ӛ/$`B4Ghb ,@" H 'DZ .2J8$FV `.`JdZkD`B4GhbN$#!.! JdZk D`B4GhbC$#!.! J/dZkxD`B4Ghb7$#!.! J/sdZk D`B4Ghb+$#!.! J/gdZk8 D`B4Ghb$#!.! J/[dZk D`B4Ghb$#!.JQdZkxBDG ?"(b"GPb#R"S_Gb#/7_$Gb# ,`"" H 'D/ @.SJ8DF @.JF.JD_/G4G bH@///$DGb#/_/ Gpb#/_D/$#?$P012BY?B?GTGTGhob#R@ /`bcG0b#E_ 4xBG4GGGPb#R"_`¤fG4G[@ZkG]]} (0ݤ8@#k/0DP#(^~0^8~@HP޴XGGG >/ @$0 aA$:[CB !>C$]GHb#_Ӽ##TG GbGF$ AGD //$G4Gob#0.0JFG/s@ӫ//Gb#%_GG B"!?"GGb#_$G ."J! F@a.tJgF`PB PB # <yTG`[/@Zk{//FG4Gob#_G//;@GTGpH h<`f`[@Zkb/G4G@b7A$àG///.b#JP"BBF7@BF G/3_$D# &@G?DG$# qQ$2SBBGTGib#]1=4="@$Gb#,H @@D7@ Da_(¤ G4Gf[@Zk/@BG4Gb#GGR"_G#GTGbAGG4G}b#/AG//_G(]0]8}@HPݤX`#k/#G^G~^ ~(GGG8b|AGG(bA$4GGTG #TGnb#$pP2SBY_B@/@@"TG,`//`[/@ZkG`b#/_$BGGGGb#XR" , H_4G 0`//`# [@Zk$ , H'D/ /// .@"" GHb#2J8$F `.tJeF`.JD _G`b#__$ , H'D?$#1Q.QJGFX@.B"J8FR.4Gb1"JgbZkDB4GbG$#!.! J/[bZk DB4Gb;$#!.! J/ObZkxDB4Gb/$#!.! J/CbZk DB4Gb#$#!.! J/7bZk8 DB4Gb$#!.! J/+bZk DB4Gb $#!.J!bZkDGb#/_G`b#/_$ , H'D / .@"" GHb#2J8$F `.tJeF`.JD _G`b#_$ , H'D?Gpb#_$Gb# , H6_4G4``[@ZkG4G>b#/[Z@ b@""G>b#Gs"0S"/sZ@], cG]@] C }(0#k///G4Gh{#/W///#"4G~^^~ (0GG{c[/@Zk"GG@b#1"/W_G/ BG?"GkZk BG?"gZkG8b/ǗA"G@b#(p1"/?_ /cG4G[@Zk"GG@b#p1"//_ /GG//"! Gc4G[/@Zk"G@b#0 p1"/_$( ,n//G"(4G$,Gc[@Zk"G@b#@ p1"_$( ,48<O///TG84G<4Gc[@Zk"G@b#TGp1"_$( ,48<䳸䳼0HbTGG;///%#a@;{# /4G@8"%H" d0"Gfb#p$ d4GDhlt$@GGG4Ggb#~@GGG]]} (0@#k//#CGC^~^ ~(0GG{# >/2@G0 _GG+GGtG =0b#eH@GG /GG4Ghfb#@GGG4Geb#/?@G/GTGGqb#D QQDB AGG]] }(0@#k/$0#~^G^Gu  @Cp B7G!///8CCTFCB!8@ BZ/BC CXGBF/KZ#GD/@/Z K8DD @/Z KED@/KG4GPB`pB A@9@B/KZ#ED/@/Z KED/)@/KG%pB BG_#//BB/BK8F#B/XKXFB/#XKbF/ @/// B /?/B KBF_0B B_в G]] #k///`#^~ ^(~08@޴HPX>`^h~px޵G$GGGCG G 4G G 4G@ۥ/$ dD:[C%B! $D!1QB%1@G!@D`b#_Ӽ4G/#! / /4p//`[/@Zk , H= c$0`BcԢ 0B"Բ $|ì#b0 C7"CQ@\$$, $H/+_Zk DB4Gb2$$, $H/_Zk8 DB4Gb&$$, $H/_Zk DB4Gb$$,$H _ZkDGGGb#GG/v_//Gb#_$cì$G`b#_$ 0@%@/! !$@%$@G" #G4Gb#Y@ @.@J].J5BGBDFz@/KGGG @/@KD 9_/GHb#@_$$#B4Gb!.! J^ZkDB4GbV$#!.! J/^Zk DB4GbJ$#!.! J/^ZkxDB4Gb>$#!.! J/^Zk DB4Gb2$#!.! J/^Zk8 DB4Gb&$#!.! J/s^Zk DB4Gb$#!.Ji^ZkD>GGGb#GG/_//3Gb#L_$cu,9@D@DD%#$j!/G`b#%_$ 0@%@/! !$@%$@G" #G4Gb#Y@ @.@J].J5BGBUF/KGGG @/@KD _/GHb#_$c1á@D #$*/$ D2@%@/1 1$@%$B  ""`.`J#@7C@FFY@@@`/aK5$@D@.QJGGb#%F `.GtJG4GDM_/GGHb#S_$///Y@ . J='F/ $///. JDC$//GGGGGb#_{Gb#_Ӽ##GTGGxbDGG /AD$#G4G0ib#!.JG'D7 /W@$XGhb# _GGB"!?"GGb#_$G ."J! F@a.tJgF`PB PB # <yTG`[/@ZkG_$r)/FG4G0ib#G//@GTGpI <``[@ZkG_$U BG4Gb#GGR"8_G#GTGxb.AGG4Gvb#/AG_$:/CGb#/@6J_FݲFݲ_4GtG="Do//`[/@Zk㳡5@D. 0.0JBB"FB7BB"âGF//Hv/Gb#_Do4GtG="`[/@Zk$! $$///Y@GTGxb$Q.QJ1"].J8""/AG""TGxb5AA=B4Gb?D'@Ef $0."0J/\ZkDB4GbZ$#!.! J/\Zk DB4GbN$#!.! J/\ZkxDB4GbB$#!.! J/\Zk DB4Gb6$#!.! J/s\Zk8 DB4Gb*$#!.! J/g\Zk DB4Gb$#!.J]\ZkDGGGb#GG/_)BGb" ?"b#GR"U_Gb#:_m/G4Gb#D@E/.$" JGFD.DJDGG /_GHb#_ӬLð@AE/D C$:/D`#$2/DGtGG GGb#~_G0b#n_)/GGGGGb#p_Gb#_//GGGGGb#`_ӿGAb#_EAEC$/#B4GGGb#R"E 4//G_GG4G0ib#/@$ïY@GGGGGb#._//GGPb##_Ӽ㳄E$BG4GR"O///BG4GR"G///BG4GhR"?///BG4G@R"7///BG4GR"////BG4GR"'///BG4Gb#GGR"|_Ӭ#$/B//BG4GpR"///BG4G8R"///BG4GR"GGb#\_Ӭ$/k"//Gb#%_5$@@G_!4G EAE/D T 㳬C/ 4g//`[/@Zk///@G!b#D//k_Ӽ4G/á!/ /4m//`[/@Zk//#I! !E?E@G4G8b#}S@b @""G8b#G Gs"0S"S@, GG] ](}08@ݤHPX=`]h}pxݥ#k/G@B#GC ^~GF(^0~8GGG~$Gxb##9#  7tG7B  @/oC@$] !!0@ 2@ ìcGtGb#s"`$/ 4 T @_ G4G B"GGb#_4GG=b#_]G@@ 5@F  T#4t4G`[/@Zk_ CTG ](]0}8@#k/#G ^G~(^0~8@H޴PGGGb >^~sAG4GPb#*?@G/G/b#_GGG4G0!b#?@G/=8 D 4G%}3`@¦4GvF/[@ZkG4G`[@Zk G4G@bc[@ZkcG4G[@ZkG=G!A 0B!! @ A/ @//`/GG4G@b#F@Ӵ4GGpG[@ZkX"Gb#1"_GG//"! /4G G $(0 G@¤G4G`eb#k@fG4G[@ZkG=`/GG4G(=b#;@GTGGxqb# BG/A]}tGGb#`@CD`$Š///0 &Ơ&@!$!B=OB@$eCB@ @B@GG ](]0}8@HݤP`#k/#G^G~ ^(~08@GGGGG~brA//`Gg/GG4GbWAGGb#_G-$ "4G,q[@Zk$GG4Gb2A=GG4GPb#,7_GG G TG@hb#@TD/ ///BGGpb#GGR"<_`G+/GG4Gb#_GGGTGhb#/@`G "4Ga[/@ZkGb#%_GG4Geb#/@GG] ](}08@P#k/GG{#tð#^~ ^(~08@GG{#G._G/Ge/G4GX?b#W@ "G(""GTGXa`[//@ZkGG4Ggb#f@GLGGGGtGb#G@p"G4G a[@Zk GG4Ggb#/N@G4GhGTG =sb#AG)`"b4GAӀBGG4GbuZk}@4G0@[@ZkpBGG""TGxbOuZk`BGpbGhbTGnXZkG@b#G_cG4G[@ZkGG] ](}08@P#k///#G ^G~(^0~8@GGG >Xb~qAb# =f_G/G/`$=d=$G b#c_$=`GG4Gfb#/@G ](]0}8@P#k//GG{#;/k///?BB@F//)##~^^~ (GGGGGGTGb ڿA//GG]]} (0#/k///Gk//Gk//Gk//4G//B?B#@F~^^GG4G///"{#_/4G/BG0@HT@DG]] #k//B?BD/[#^~^ ~(08GGGG^ //GGTG(b vA//G.//////GGTG(b ^A//G//= c/` /GGTG(bc FA//4GG]] }(08@#k///4Gk//TG//#4G^~ ^(~0>G4GGP{#8@FX@F` @_G#b#]~_#/G //=b# _Gb##_G4D///b#_b#_Gb#8_GGG] ](}0@#k///#4G~^G^~ (GG(Gub#1AG///G4Gjb#/@GG4Gub#"AG/# ($GTG48#G㳼(b# //䮑A"4Ga[@Zk#GGTG(b/ ///䚑A"4Ga[@Zk#GGTG(b/ ///䆑A"4Ga[@Zk#GGTG(b/ ///rA"4Ga[@Zk#GGTG(b/ ///^A4Gd[@ZkG4Gx/b#/P@ 4GX CH"4GbG\`㳬㳰 Cpchb#DTdClctCdC/s@\TGGHb CA\GTG`GHb/:A`G]]} (0#k/(FG@0 (BTh0t(Fh0D/@0 @Xp\h0$Fh0D h04G P @0Fh0// H 0;# H1hPl[FhPk//4G0l/k///#G4G^~^ ~(0GGG{#>G 4G_GGb# c /_G//GGTGlb#n@G4G`b$GǼAGxb#_ = lD/P$(C2F (GG4Ghjb#i@G]G] }(0@#/k///#^~ ^(GG> ^~ /G] ]G(0#k/G4G(b/wnAG//= ]}G]xb# ](G0##^~^ GGp{#^_G/ G]] G0#/k///}G]b#] GGG0#e/#TG^G~ ^(GG^ ~{b#>mAG/ G] ](G0#/k///= ]Gb#}G] ](0#=/#^~ ^(~08GG> ^~///G] ]G(}08@#k///GGTG`"b#<@GGGhb#@GGG4G $b#:@/GGGGtGkb#9@GG G4G $b#:@GG4GPhb#@GGTGhtb#@= ]Gb#}G]G ](}08@#/#^~ ^(~08GG~ ///G] ]G(}08@#k///GGG!b#3=@GGGhb#q@GGG4GP$b#^:@/GGGGtGkb#@GG G4GP$b#N:@GG4Ghb#M@GGTGtb#@= ]Gb#}G]G ](}08@#/#C^~ ^(~0GGG> ^~ /G] ]G(}0@#/k///Gb#/c_G=GTGjb#E@GGGTGtb#b@ =]GHb#}G]4G ](}0@#Q/#C^~ ^(~0GGG> ^~//G] ]G(}0@#/k///Gb#/'_G=GTGib#Q@GGGTGtb#&@ ]}GG]xb# ]G(}04G@#/# ^~(^0~8@GGG> ^~////G ](]G0}8@P#k///ݢGb#_GGtG =p"b#/;@G//GGGGtGXlb#/@GGG4G$b#/{9@//GGTG(ub#@=]Gb#}G ]4G(]0}8@P#/#C^~ ^(~08GGG> ^~////G] ]G(}08@#k///Gb#/_GGTGP#b#5;@GGGGGtGlb#/@GGG4G%b#/'9@//GGTGXub#{@ =]Gb#}G]4G ](}08@#i/#C ^~(^0~8@GGG> ^~///G ](]G0}8@P#k///Gpb#/;_GGG =]("b#;@G//GGGGtGlb#/c@GGG4Gp%b#/8@//GGTGub##@=]G8b#P}G ]4G(]0}8@P#0B[W B \BCk///4Gk//Gk//X;GG8A"!//r/rK/FoF` `/k///.r"R"TJJ@ B0BsGk/01BG8 Gk////`/`"`K[sK/D @// gK / 0B//Bk/C#tGR^G~ ^(GG>BTG>"({B=// = 1@!"@A@0 @.JDD@1 G] ](0#k/#4G~^^~ (0޴8GGGGG e[@ZkŠ////GGTGbʀB//İƠ4G/e[G@ZkG]G]} (0ݤ8@#/k///#X!F7AB8^~@^H~PXGGGGG\\B`;// C/k/// B(beVZkBTGbPBXb[Zk// B(bYVZkBBTGbb[Zk// B(bMVZkBTGb@BHb[Zk// B(bAVZkBBTGbb[Zk// B(b5VZkBBTGbb[Zk// B(b)VZkBTGbBb[Zky// B(bVZkBBTGbb[Zkm// B(bVZkBTGb`Bhb[Zka// B(bVZkBBTGbb[ZkU// B(bUZkBTGbpBxbs[ZkI// B(bUZk B(b=GUZk0BTG8b (==`Zk0B TG(=8b/`ZkB\-?#bQoZkB\b`Zk# B(bUZk B(b=GUZk0BTG8b (==`Zk0B TG(=8b0/`ZkB0\-?#b-oZkB\b`ZkG8]G@]#H}PX`#k//ZGc# ^~(^0GG>GġZb/c B"GGb/7B// B?#(bXD qZk B?#(b/qZk B?#(b=[zqZk=/j XJ]G ](]0@#/k///XFGFG# XF(TG#^~F^ GG //@{#>[_/ G]] 0#k/0k//,k//#tG^~^~޴@[ >(^0~8@H޵PXGCC>CC;!GDHb1" ^_""$~(,04//YZkG` /! ?G0B8b]pZk`BGG<TGb8}chZk@0,0H< /P.BGp"bTGRSJGJ2AJOB @/OhZk@4 DB"/p.]pJ0@BF]@0@B.JF]!="b#@_? C<,D@! 8DG $%,EH=% $%_%DC@ A#%FPTX\}"%@$%!$, ?%%/]@/r."¦StJgJ3dBWkB\|B Ck///4G//GR"3B0C\|B0Ck///TD//D//#D@D//@ݢ== @0B0.@ݲ0J%FU%B(BGD0@b## G="[_C<]DT0" 0@B<]T] /,=PݢTDH B0BFD,=D,]D} [C;D,]///GTGtG="bB=T!0@=@}D="b#8`F0`B@0B.@}JUBBG*G_<]CDXH0"/ 0@B<}/X}/DX0BD ///,ݢXD=H BG0BD,ݲD=,]D} [C;D,]LGTGtG="bB=]CBX/12B=<4G//="b#8F&D/_<]CPH0" 0@B<}P}DP0BD ///,ݢPD=H BG0BD,ݲD=,]D} [C;D,] D // ?"DDF]tG="GbD@"TGaB=P!0@=///DGDF;`D/D#HF+D/?#D/_#D/ #D/ D/"D/H}D G// BP`B.4#JئF/ /KG\}D///xFGP`B" 4,6HX&D \=D///8FTGP`B" `,HDݲ\=D///F4G0`BD}\=D//D//4G4D0]|<}HD0`C<\>D=\=0 BD=,=Dݢ 6@F,=j//"De/"%$$ $$%?%!_%@%%% %///=@/Y.y"BRSJGJ2DBWKB\\BCk///G//4G9#`"0B\\BZXCk///"D/<ݢHDD0B<ݲ\0BD/<}\},]D} [CF,]4G4D0D//D//H]D3: B.u"JD/ .JfF+`xDU#/u/zKXFG@8D"//KئF D4G0@B#=\ݲD///TGP@BD}\//GP@BD\z//GP@BD]\ݲr//"Dm/"Di/ "De/_#Da/#D]/D HGDU/DGD$FDM/ ? DD!G]tG="GbD@"TGB=P!0@=7///4G}//8FD+///D="b#_,]CCDP0"/ SBF0@HD,]D///<ݢHD0B<ݲP0CD//<=P=,]D} [C;D,]@=]b#G 8 F0 BD@0@Bp.@=="pJUeBhBF)`]G_,]CCDX0"D SBF0@HD,]D//<ݢHD0B<ݲX0CD//<=X=,]D} [C;D,]GTGtG="bvB=]CBX/g12B=@@.0B@JإFUBBUGD0B="b#&G_C,PGT0@0"DDݢH/ BFD,Dݲ/D]<T]0C0@C<D],=D 0@0F,={///GTGtG="b.B=T!0@=lDj//"D@dDb//TD^//4P]PH=# }PFTG`= Gx@YYCZC0@xC:@48KPxCa,aHCaH dHdDa<4T]hA }h A=!F(IIIA JA G0A`! AhA4ݰTj/jK[jK ` H`Gj?4=X]q!@ ]q!B#F1 JXXCZCQBG`}"0 @zB84X=qs-sIKsI!lI lEs=4\f@ f@!H&HHAAB G`}#0@oC4ݱ\F/KXKR"rOJG?=}a@$.D= 4 0 @ K%AQ$J'J$@@\@NdCk///$D//?'tA DtBG'9#D4JDDYEAtGD//_&D//&DG?$kA }D"DkmADGG+`IQG kB G/uA  GuBl@5JXD@{@,4GH@Af@ݰP.PJ B@f@ݰ:,:H%@@=a@,Hd/// xD@0@D 1@/ =! 0 C=-I/O//0AIwA 4GwB7JBAqA }@_#4Gq-BD1 JqBѰ7//kA ]%TGkmA4GX!+`ID KA*(///`A '@"` @G4G{# HDX=@@/%!D/pA ]_& "p BTG4GR"0JDXPC@p/$ D/uA ]?&@!uB G4G1"5JDX} UA@*/'{#D/tA @?$tBD4J@IJ///$ D/nA ]%nAD.INBβ///&"D/xA ]x C8KXCز/pA ݠ"Gp BD0J@&//hA }Gh A(IhA_%J!D/yA =Gy-CX}9 K9@///tA 4GtB4J@oA ݡTG 4GoA/IAϰ0!0O_G0Ox@/////8.}G""x"8 "#Q5J0`C'Jo؇D}0`C: XD/(.VJJd؇D}0`C/@XDX/ZSKGKZ؇D}0`C%XD8.Q!J'JP؇D}0`CXD ,@HHF؇D}`XD/]p@G1BG(b G(B(GtGOxBd@ 0A)A`"pA`G&p BB/0J4 0 AAE%Aа3/3KY3KZ#zSK:G3?, A GD=,4=]q!@`@G @"tGa!BG@(b! HEAp"xB؇D//Dݠ4`]!0=@m@.1@FAmAC`Af,-I 'E`@ HfHCfHk!kfIkDf< A' &A  D  M2D/ .1A ///sAPnnB.IA1FD΢PݲT" TX=9# ΡXݱXH=<= 8 E0@4D#TAG}P)@T\]<= m M}A.J,}(}=GU @`` G` A8E=!/. J8F+vBtB4JBG NvCK/@WC\CB8Ck///ݢ6JpB C///7JPB C///,I PA C=9!KP C C///ݡ.IPA C///]:AKP@C C{///'HP@ Cs///]*AI P@A Ck///}#aHP`@ Cc///$HP@ C[///ݠ&HP@ CS///$dc dc:/l7//$=q{#q{ n.L N+/xG//` "΢F //L N/Np@IDD///c@``@ HB _"# REN [E@/N$=0JF /" / F$} / / F$= /AR"AR N/ ÊJ$ݢ @/vs"vs n/,9 .F$ݠ /FZ#FZ N/lc/$=` xG ,,! @HH ///F l.J` G*FIFI N/ls nΠ$vH/ wc wcz/lw//$ n  j+$ݢ6H @" ^, .[/D$] / O/l nK/$נ װƠ ΰBL N?/$=6H/ #ئ ζ(//l# (.(//$} `B{c {bWZk (.DBb/ l/[cWZk (. //lBbWZk (.8} n,}0A A )!!G///G///G]]}ݤ =(]0}8@HݥPX`#k/=(ݠ`} ]!U A@ 8 E/, ݡH8DO a@` @ HA EvI/9WA\A5 Ck///8 +/; Bb6I E!/` oWZk (/Bb [ceWZk (///$Bb! /WWZk (/$ ! - (// (//$ݢ6I E`/// ! /$! /$]! /$vI/ ! $! / pILFDF`//@/`B`@ HA " E? EB0IF^FIO FAE3@&`` xE E w/d.dJ/G$HH l//ơ,!@HH c/$" [/$=# R N$}[Z#[ZF/LB/$! :&1 /6$ds"ds o. *$=  " $ݢ" /$=#  /$}[Z#[Z/F O,=0A Ac J! ?// AG(I C`-I EHB C//;/Y ;K FD.R DJrFr #tG`^~h^p~x޴p[>^~޵GG;GGGGGG"1"xbz_"OZk"{_"tGpBxb1""OZk QA"( pBW@ @|_"tGDxb1"@"OZk"0HHH"TAFD@@FDGA("1DtFFGD/@9CGBX}HX"W=! 0 D4G:FX}*1 CYC'z!@A///1H2I=]@B"=FFPG/ [[/`X[N 0BB$H1I. (= ](}[[jKYJp H0`C[0]I/0ZIKPGI?)!d_0`Cb#_Ӡ@G8]#G::A:YC@CDSR /C///!.i/ EA"!J[iK! z)J)")!zGi?,i.HSqJA"zH zFi>a/).rKs@JQ Ja# 3F)>A/).[Kr@KQ Ja# 2F)>a.).{JQ Ja#r`J3B `B0B2F)>A/).[KQ Jr@K2F)>/0B/!.i/G01B!J[iK! s)J)!sGi?/G!/o4B2@0@BC "'"F '@D0@D DD PDCC0HCCED'  @FC8FAED&@FCXE1Q@"D8`EEAG `EVFF&@SG///&Q@aEAE/ @&1@/ ///cGGTG[@Zk @&1@GG/tGGGcTG[@ZkXE- EEGGTGD///!c[/@ZkGcD///AGGEc /cGGTGD[@ZkTGcTDGTG[@Zk`!E %1@/c GGGTG&1@%1@[@Zk)!/@ - I////c,Gi!TG)!DH[H@Zk,H-1@@////cGGGTG-1A[/@Zk///_G`]h]p}xݤ=]}ݥ#/k///XP;BFGG@#~^!^~ (GGGGA!B!0D/[ //BG4GbDZkRcGGTG[/@Zk@!@"/ @%p\<@ C/k///cG4GKcGTGGcGGCcGG?cGTG;cGG7cGG3DGG/c,/cGGTG[@ZkG]Gb#G]}`_" (TG0#TGG///DGGTG @c[/@ZkcGG///cGGTGG]]} (0#k///wGGTGk//#tG ^~(^0~8@H޴P[X`GGP;GGGGn _"~"b1"iMZkP"o _"tGBb1""_MZk?$G! D //GG4GHb qBG? ]H@ @0 FTG0DGTG&D&GB/c[/@ZkDGC&1@/ ///cGGTG[@ZkG&1@(1@ /$,GGb#G(1A$H _'1@ //cGGGTG'1@[/@Zk_GTGTGc[@ZkG ](]0}8@HݤPX`p#k//#^~Qq;x^~[^~1"޴>^~޵^GGGGGG G ^D _"(~"tGbLZk"E _"BbtG1""LZk Q@"' B @W@F _"bD1"tG@"LZkpB TG(=xbSZkG\="?#buBG8D"""H0DQU@4G¥0HPE/ 8=HG¥b#_ӄ B(baZ!\_Zk/[ _0]08c5/ D¥/U@// G(/G¥b#{_Ӏ B(baZ!\_Zk/[ _@]@c//U@ G Gb#e_` B(baZ!\_Zk[ _H]Hp¥x8HE(0 '"`B@DT!F GGhb EGZk8HHCDPX=D`=E0D<&  G </G(/4G5JF(=`=0B (= 8 E@?%D`BhE8bH/hb4D/FZk`B//Ghb/oGZkpBTGxbsRZkp\-?#p= B ((b[`Zk@B\Hb9RZk0BGG8bFZk0B _G(=G8bFZk//Z(}pBTG xb 4G+gIGJRZk\Gb#_@B\HbRZk0BGGGG8bFZkDGDpBTGxbDDGG//RZk B\(b^Zk@B\HbQZk@BGGGGTGHbGZk0B8bBbbFZk@BGGGGTGHbGZkGGpBTGGGxb RZk B\(b^Zk/[ _x]x}c// E==P I (pBDGGTGxbb$ QZk\Gb#C_@B\HbD%EG/QZkpBTGxbQZkG\?#Xb B= D=C/// B(b/^Zk[`Bhb _]GcFZkpBGGPX=TGxbQZkpBGGTG%CxbQZk B\-?#(b/`Zk@B\HbwQZkBGGAGGTGbEuLZkh}A@G&"  4E(=aF=]pB TG(=xbQZk B\(bR^Zk@B\HbQQZk@BGGTG= (=HbCGZk0B]=GG}8bEZkDpBTG=xbbQZk\b#G_[/ _]=0 Ac//4G=@b#2@0A"P I0EE fA+FG (EC]C_B]GG}TGb/LZkBGG (=TGbFZkpB G GTGxb)QZk B\(b]Zk=BGGP]X}TGb/ Xc_@/'`KZkpB G GTGxb+CQZk B\(b]Zk@B\HbPZk@BAGG=(DG=GTGHbFZkhG}KA=E7/B GG(=bTG/FZkpBTGxbPZk B\(b]Zk@B\HbPZk0BGG8b=GGEZkDpBTG=xb/PZk\Gb#_[ _]}c 0`A 4G}}GG@b#8B0`Ib EG" A A ] }21@_ӐGGG /}"+mA }/!6I B]}TG@bfKZkBGGTG==b/+FZk0B]TG}8bJZkpBTGxbuPZk B\(bA]Zk@B\HbAPZk0BGG8b/DZk<DݡAI D(DE0E/' =// 4G$=!=" 0 A)!I=`=[ ][b#[ _=c_pB\xbJZk/[ _]=$=c/$U@IC$=(¤b#/C5 A& 0D=0@ݵG/FQB_/GG$=Bh0A8ݱCtDDPD7ACCDED,GC6G=GA8ݱ71B 7EPA8ݱFG8ݱ7 ///tGGGcTG[@Zk`GGTG/ c[/@ZkcGGTG[DD@Zk8D A/A ///cGGTG 0A[@Zk A3/=8ݡ/ A /cGGTG0A[@Zk A=G tGGcTGG[@Zk`ݥGGTG/ c[/@ZkcGGTG[ EE@Zk"G@b#("G21A_B]TG()!}"bYJZkB G G=GGTGb@$w/EZk$=D@8D///0BGG=8bTG/IZkpBTGxbWOZk B\(b#\Zk@B\Hb#OZk AJ"/*,cGA2H'H"/pBTGxb/?OZkpB\PTGX=xb/7OZkPBcB\-?#\Xb/eZk[G/_ = @A0.P"Q2J'JG[TGG@Zk0BGP]GX}TG8bIZk G GG b#_0f E`/co-G"TG!KtI[gI@Zko-oI}0A A%1@} GG`fE c[TG+gIgI@ZkfG` f!c,G TG0Ak!DH[H@Zk Aݡt G A/ 0BTGP]X}= @8bEa/?IZk0BP]TG=X}=8b5IZkB G] G}TGbaDZkpBTGxbNZk B\(b}[Zk@B\Hb}NZk@BGGGGGGTGHboDZkpBTGxb=GGNZkpB\PTGX=xb/>NZkPBB\-?#Xb\dZk/[_(=(ݠc /c,)1 A GTGDH[H@Zk//?cFAG-TG [HII@Zk 0 A 0`A nA/( A D`///cj-)1 A!GTGKlI[gI@Zk?$}G`=GGTGf`c EC[EE(E@ZkcGGTG[tD@ZkGGTG/c[/@Zkh21`AP"@b# GTEG_ӐBPGX=bUCZkG<`///ݡ/H%H!@.I0ݵ80]8[[b@X[@]@$HHPH=P]E[[E(E/a*X[X=XM!@cAA!.[G! Q!J'JTG 0A@Zk`ݴh A`]h[[b@X[p]pݠ8=& (A$/c 0 AGG (ATG[/@Zk/b!""/HD///B!""HDG]b#}G_Gx]]}ݤ=]}ݥ]#k/p#TG0^8[~8^@~HPX޴`hp>x^~GGGGGGG@bUZk,GGGH/.8BTG("@bPJGJ0JBGUZk)1@ / l//c.TG("0@!PJ[JG@ZkG)1 A[/(,r@rGB2@J(H@$D/G (.!(JE:r`F"`///Pp0@R" F@ҢF0@G0@ R@G0@ @D0@F0@pq@q'B1 J@&6It)A"iB) I @ ) E)CAPIFF F `zJAjJC*@I @ J @E/_!F/pBpB0J@ F21@B7AB 8\\Bb C/k///IGTGTG 0F@c[@ZkEC/ )1 A /c)1 AGGTG[@Zk/?G &b#GB_// `)1 A /c)1 AGGTG[@Zk/?GTGTG@c[/@Zk//G &Ghb#GGU_Ӕ (&G ="GGG8b# (=A_ӈG &Gb#GG_Ӏ}ݰ"b# & @y/ &0I @E/s ///`cil AE`cig/// BE@ _///I  W///E CIO///E c/w .viJUJF>A/=/G 4G0bslB GGGGGb#W_.//cGtGTG[@Zk &GGGGhb#TG_/0fG E/`E&/G0"b#`_G4G"/ } ݰq[@Zk//i@i'A0@) I @ɠ/cP@GGTG[ /c(-0@!GTGI(I'I[@Zk@h-hI~G0]8]@}HPXݤ`hp=x]}#k//. iJU JF>//У#GG^"?\^~\^ \GG`{# >4GC_ =]"b#*_]BBBDG\]\] \0\#/k///Þ#C?tG,>;@\^~H\^P\~X\GGG1"`[hb(0^L _"X "48///EZk"`B"`M _"hbtG1"&EZk0](4G b#,ݢ4}G ]@]" ݲ$8P_"@]"b#G_$}cDG@\]H\]P\}X\`\#k/#s _"tG>^H;[~^ ~(GGG"b1"DZkH"t _"tGBb1""DZk(BTG#0b_ 0@_Zk C/#0 @#G]] }(0#k//# _"tG>^;[~ ^(~0GGG"b1"DZk=tG="(B0b_ =C0@BC4GXZk //C/#0 @#G] ](}0@#k//# _"tG>^p;[~^ ~(GGG "b1"DZkp" _"tGBb1""{DZkC=TGb`[@ZkC0@@C // C H0@ CC0@BCG]] }(0#k///# _"tG>^;[~^ ~(GGG"b1"EDZk" _"tGBb1"";DZkC .rJQ J2F >bs"b0B0BG]] }(0#k///# _"tG>^;`[~^ ~(GGGp"hb1" DZk" _"tG`Bhb1""DZkC#] @@ p.tPJSpJtFp>"â0Bò0CG]] }(0#k///# _"tG>^;[~^ ~(GGG"b1"CZk" _"tGBb1""CZk=TGG(b!'H'H=rBC0@@C#0 @#G]] }(0#/k///#(> /@h0^`; "tG^~[^ GG@$_"b1"CZkpB8= "=GGb#0}@_G]] `#k//#CtG>^; [~ ^(GG@9_"@"(b1"qCZkGb#"}BG_G] ](0#k//#CtG >^;H[~^ GG@K_"h"Pb1"MCZk }Gb# BGG]] 0#///(#(> /@h0~;"f_"^~tGh[^ GG`1"pb'CZk8""g_"hBpbtG1"CZk@ 08}GG"b#B_G]] `#k/#CtG>^;[~ ^(GG^~_""`1"b/BZk""_"BbtG1"//BZk}G"BG(b#_G] ](0#k/#CtG >^;[~ ^(GG"^1"`_"b/BZk ""_"BbtG1"BZk }GPb#G BG] ](0#d#(> /@h8~h;("_"^~tG[^ GG`1"bBZkB8}@ 0"G"b#GE_G]] `#k///#CtG> ^;([~(^0GG^_"H"`1"0b/sBZkGB"}G"b#_G ](]0@#k/#CtG>^;P[~ ^(GGp"^1"`_"Xb/OBZkG B"b#}G_G] ](0#k/h#8> /@h@;"_"^~tG[ ^(GG1"b+BZkP""_"BbtG1"!BZk@H=X""G"Hb#BP} =G_G] ](p#k/#CtG>(^(;[~0^8GG~ ^"_"1"bAZk (""_"BbtG1"//AZkG"B }Ghb# "_G(]0]8@#k/#CtG> ^P;[~(^0GG"^~_"1"bAZkP""_"BbtG1"//AZkGG B}b# "__G ](]0@#k/#(> /@h0~;"3_"^~tG0[^ GG`1"8bAZk8"P"4_"0B8btG1"AZk@ B8}0"G"b#G/_0].PJ>G]] `#k/#CtG> ^;P[~(^0GG^N_""`1"Xb/[AZk"p"O_"PBXbtG1"//OAZkGB"}G"b#_].PJ>G ](]0@#k/#CtG>^;x[~ ^(GG"^1"`g_"b/'AZk""h_"xBbtG1"//AZkG B"b#}G_].PJ>G] ](0#k/x#8> /@h@_"("tG^~^ ~(GGG;[b1"@ZkP"_""BbtG1"@Zk`@11`@X B""G0FP}@"Xb#_@]/`.PJ>G]] }(p#k/#CtG ^~(^0~8GGG~8;[^_"H"b1"@Zk8"_""BbtG1"/@Zk`@11`@"B} "G Fxb#T_]`.PJ>G ](]0}8@#/k///#CtG^~ ^(~0GGGh"X;[^~_"b1"z@ZkX"_""BbtG1"/o@Zk`@11`@B"} G Fb#_]`.PJ>G] ](}0@#/k///#(> /@h0x;H""^~_"tG[^ GG1" b//;@Zk@x"8"_"B btG1"1@ZkG04Gpb/cB0=B0""Gb# @0=8=  B@}11@_0].PJ>G]] `#/k///#CtG> ^;@[~(^0GG~^"_"1"HbZk"`"_"@BHbtG1"ZkG4Gb/cB=="" B}Gb# @  B=11@_].PJ>G ](]0@#/k///@#8> /@h@^;"tG^~ ^(~0GG@_"1"[bZkG4Gxb"/CoBGH= `B=G"G@}G b#[_GG4GbmBGG4Gb/?mBGG4GblBG] ](}0p#k/#CtG>^;[~ ^(~0GG"@-_"1"bwZkG4G"boBGGGB}G"@b#_GG4GbcmBGG4GbmBGG4Gb/lBG] ](}0@#k///#8> /@hH~ ;"F_"^~tG[^ ~1"(0GG`b5Zk@G4G"b ೽nBP= BH}GG="`b#GG_GGG4G bmBGG4Gb/lB@=GG4Gb/GlBG]G] }(0p#k//#CtG>^;@[~ ^(~08GG^1"i_"``"Hb~ZkG4G@"8b rnBGG B"b#}GG_GG G4GxblBGG4Ghb/olB=GG4GXb/kBG]G ](}08@#k//#GTG^~^ ~(08޴@GGGGGbcG+ q.(""dJXgF`cBh"GaVGGh ""bTGcB/ dGJGG4G8bCbBӠ@//G?/G="b#$_G7/@Bh¤G4GHb\ZkG ,G&4G f[/@Zk//Ge /eG ///GG4G8b;cBGfG4GE/`f[/@ZkGG]] }(08ݤ@P#/k///#;_"tG^~ [ ^(~1"08GGG0"(b/~Zk="b#% /_C4G$G/ d[/@Zk///=1 D@d[G4G@ZkG4G8baB BG4G(b/[ZkG] ](}08@#k///C# _"tG1^~@[G1U!B ;1"H{ "}ZkG] #p k/C#_"tG1^~`[G1U!B ;1"h{ "}Zk G] #k/k/0k/ k/ 0k/k/0k/FCk/// PPFPk//ppFpk///J0Dk/// "PSFPk/"Fk//6J0Dk/// "PSFPk/"Fk//FCk/// PDFPk//pdFpk///FCk/// PHFPk//phFpk///FCk/// PBFPk//pbFpk///FCk/// PAFPk//paFpk///PFCk/// PT@FPk//pQ`Fpk///FCk/// P@FPk//p`Fpk///J0Dk///  "PSFPk/߿"Fk//J0Dk/// &PSFPk/&"Fk/J0Dk/// &s"PSFP/k///&"Fk/J0Dk/// "PSFPk/"Fk//vJ0Dk/// "PSFPk/"Fk//VJ0Dk/// "PSFPk/"Fk//P{#Uu 4@"p{#utFu *//C#1^10^[~8^@GG>bMBZk>`b# (> >"Aa _G0]8]@P#k///0{#Tt e/#(> /@h8~;`"0_"^~tG@[^ GG`1"Hb{Zk08=@ ]"Gb#W_G]] `#k/#CtG>^;`[~ ^(GG^B_""`1"hb/{Zk=]"b#G5_G] ](0#k///#CtG >^;[~ ^(GG"^1"`Q_"b/{Zk =b#G}G] ](0# GG/' #?D #~^~ GGG//d/TG$" [qKgKp[@Zk,HG]} 0#/k///`_"CTG"Gv#F]/#4G~^G^~ GGGb^B("8D! C.G]CJ]a} 0#/k///(GGGb]4GtG]}" 0#_/G#XtG~^4GG^GG("b_BXG4G(b("^BX"G]] #k///GxGG{tG8"/o_/// 0#^~^ ~(08GGG> (/$]/AAC!!D ///G]] }(08@#k//0B4G8bqZk///cG="TG[@Zk`#^~ ^(~08D@޴HPX>`^h~px޵GBGa/GGDaK+D/ 0@e@p.pJ F/t$0 B0@t$e@;,;H%D 0@0@e@."s")!PJJ@CQG /DxD e@B` Gk"/  .jPJJFXFF?@ G4`]2_JG]]:_K]D GGGFF]G E"bTG="_FRE]A`BA 0A!A!.rAIQ!J2F!>0An"!/ A -A. 0`AUJ" >!P@x@Y/YKX@//GG9 U@,@HH H  A FF/*.0@J! A0@- A0@Q*J A0@'J A0@JDAI!J0@BJ0-MIIMA,H"0B/$-LIILA̢w/wK"0B̲/@7,A7H'HA$@q.qJ1"0B/ @Q.RQJGJQ$Bѡ  Aj-jI0Aѱ/.0C9#J_ @0Ce@u/uKFN,/F@ 0A&///G4GGP"tG(b GGG_B/H? A@E/ //`BG4GhbOpZkΠ0@ΰ 0AAM!!_0@G4GGp"tG(b G G G_B/ȡAI ðBG4Gb7pZk͠0@Ͱ 0A @A!!0@G4GG0"tG(bG G G_B/ǡAΡE BG4GbpZk̠0@̰0A @A!!0@G4GG"tG(bG G Gb_B/AE BG4G(bpZk̠0@̰0A @A!!0@G4GG@"tG(bG G G>_B/ǡAΡ6I BG4GboZk̠0@̰0A @A!!0@kG4GG"tG(bG G G_B/APE pBG4GxboZk̠0@̰0A @A!!0@GG4GG`"tG(bG G G^B/ǡAΡE PBG4GXboZk̠0@̰0A @A!!0@#G4GG"tG(bG G G^B/AE àBG4GboZk̠0@>̰0A @A!!0@G4GG"tG(bG G G^B/ǡAΡE àBG4GboZk̠0@̰0A @A!!0@G4GG"tG(bG G G^B/A /BG4GbwoZk̠0@̰0A @A!!0@GTGG"tG(bG G Gf^B/ǡAΡE ÐBG4Gb_oZkl 0`Al0A @A!!P@F@ơ0AƱ///P@e@.J,///F! )A.0@ DAJ! @EF/@.J0@! إF/.J0@! F/!/!K0@!  %G/ a/aK0@ e/0@ e@K-KI KEv@P/F@ 0AJ/// e@0@F@e@-.-!Q-JNI'JIE`0B6///[ A5AXA[@ A, B AF!/8 A #x A0 C0`C0@8xX8 0@A 0AxX0A0 B0`B8x? A / 0A# A0B0@ e@,k!FHH@C E_G//G] ](}08@ݤHPX=`]h}pxݥ#k/ // //%HP@ C%H@ C`#tG>; ^[~(^1"0~8@H޴PX`>h^p~x޵GGGGGGGG._" "b?wZk"/_"tGBb1"x"5wZk Q@"B& W@ @0_"tGDb1"8"'wZk(" ¦?"G@BGH G//#MZk///u(0 @P @p @"7gJ8JJK9fJ JWBXC0eJ1J78 @3dJ4J$@'KHJ'JY6C@@gJJPBQ6BSvBTBY@PQstGb#_ӀցHGTG xD/c[G@Zk //DGGTGc[/@Zk4G U@8D@8D& @?DDHCTGFGF/ FGCc[/@Zk =4GG8b/+ NcB D/'///cGGTG[@Zk//HC¥0D///`#!*@ %@` N0"m[ SB/@saF/T`//G 4G8bcBXD//GM//B4Gb/mZk; # TG/@A,@/!G!" @ B2F/, cL[@G4G/@Zk//( G(!D// TGL"!,.Q2J'J0FG c[G0A/@Zk , H//A(.J }G2CgF/T4GG ](]0}8@HݤPX`=h]p}xݥ#k//#tG^~ ^(~08@޴HP[PX>`^h~pGG;GG^G1"_"`"XbuZk"_"tGPBXb1"x"uZk @=GG"B"F"?DC{/c GGGTG[@ZkEb @E/` 1 BW#B'@\ 0@ @" F0@/G] ](}08@ݤHPX=`]h}p#k/G//G//#tG~^^~ (0޴8 [@H>P^X~`GG;GGGG1"_"0"(b/uZk"_"tG B(b1"x"//#uZkG@@b#3_ӡ@G G`BEhb/" /// Kj0"SB @saF`/pB4Gxb/lZk GGGD4Gb#_0@)! @E?/@$.Q$J$>G]]} (0ݤ8@4GH=P]X}`p#k///P#? `B0^~ aB8^@~@GHPX޴`hp>x^~޵GG>0FGGGD{#GG0G_ G="TGu@@DSF @0ݢFF4G&1@0ݲc[/@Zk GCD8 D @ D 5 @FF ` Gb0=#'C//Lk FA=@A;@!!H0D /B4Gb;kZk FACDH.="TG0@ 0@AsJRHJG!SFH>c[/@Zk//CGTG0 0!. @ @8bQ!J0!>""/YBG//+G""TG8bYBG0"#""TG8b6HzYBGGHb/_A B\(bzZk$///GGHb/OAG//0}6HGG# 8 EXbDeD#E `/A B\(b_zZk$///GGhb/A B\(bOzZk$///0 8 EGGXbDD%E///AxGGhb/Ap C]G="0-TG0@aKILI E0=c[@ZkG4Gbu`B D C}G=" 0L-TG0@4GalIJLI AE0L=c[/@Zk]+@H fA 0E¥J!_EC/h`b(k!/-@AB!(D 2//B4GbjZk)/. =/ P0BF //PB4GXbgjZkC=TG00.0@r0HQ0J2F00>c[G="/@Zk!@ &@ D?) 'GGF// #GTGd"  D.RSJGJQF c[0A="/@Zk,H/oAO.1@ &BOJ"FA/F/}eFC0.xvJWJFGTG="0@$@Cb0>c[@Zk0! A/ݡ @MA֠I E"4B4G @bRjZkC D*//ݡ @/MAVI E $PB4G @XbiZkC D*,="TG0@0@pIA*HJ!0DG*<c[/@Zk//G4Gb_B D9 G4Gb_BD///C0,GTG="0@hIDHD0<c[@ZkCTG="uAApID/ 0 ,A H0DG0@0 <c[@Zk-@A AݡDAVHD//0}@GD`@#E`9PB4GXbiZk ACD]-="GTG0@ 0AdOINI!E=c[/@Zk//CG6H "0,GtG0="bDH0</"\B (=}#GGTG0"xb~^B] 4GG0]8]@}HPXݤ`hp=x]}ݥ#/k///0#TGH^~P^X~`hp޴x>^~޵GG(p[GCG0>"GGG/@Zk(BGGTG0bAZk(@0,0H/ ///P.(BGp"0bTG GRSJGJ2AJOB/@AZk-1@  f//(0}GTG @ 0A@Q.1"RQJGJqFs c[0="@Zk AP0!q@q'B1 JA@8F1 F/g ( @.x@xC8K"@JF/.JF8 G/" ///PpX0@# @G@@D0@8 F0@ x`F0@ `F0@آF0@p{@{gC;`K @ PH lPFtsBsB3`J@ sFvBtB4J@ (81CC`\CBC/k///TF ]="(b#G6_ =v#H0 H`F L0@//aF///bF`{///}!H@rs///=0D2k///$D /@.sJWJF>]/Y/ =Gv#K/@ , ]b#G_ =4Gv#HF@G/// =v#JG/@ , ]Hb#Gb_ =4Gv#HF@3///-.G-Jx+F5 ///(s"`F0B(.J0Bs"xF/%(s/sK0Bs"x D/(S.0BSJs"x+F/ (.J0Bs"xF/ (S/SKxKG0Bs"/@(3,3Hx+D?(8B 0A?"@" ]"FZk(G(="xb#@}"9_ ;GvI/ ("BG1"b}_"tG"pZk("~_"tGBb1"x"pZk AA_"1E G8@ F: EC8}G@"8="TGStBs`BE-`c[@Zk8 0@A OA!E D/?!// E GC/8TG@="QBu JG1 BE .TJF>c[ 0@A8="k!/@Zk8 OA!E D? A*.Q*J*> ]vCJ4GrF@~// 0JFwâ0B/q/F lFhÛJ`dF `F //-oJMI E=U/R// ݡGvI/@ ,G4`FG ]Gxb#3_ = 4G/v#I iE@;/// GvI/ ̡`" EGGTG="G(b#_}///n 4GÍvIGG="EGb#_p"G "PbTG1"/UB// 4G G ] 4G/T vCI jE@ 0@0(F//0TG0="FocG[@Zk(ݡPA(ݱ7///b!k `M-JOIGIJLAJ AE @// ,B4G! b@ HH/fZkGb#_0/(ݡ0G0="TG@n-!KnIgI E/ `c[/@Zk(] 0@A(](=@-IG//GH]P]X}`hpݤx=]}ݥ#k/(}+aI P`A C///!G D(=!!HP @ C///(=1!JP B C///. JW JF>//- JM I E=//#CtG?,>@\^`;~H\^P\~X\GGG1"[(0^_"0"b48//SoZk`"B "`_"btG1"JoZk(0]TGb#,ݢ4}G ]@]" ݲ$8t_"@]"8b#G_$}cDG@\]H\]P\}X\`\#k/#_"tG>^h;[~^ ~(0GGG1""boZkh"B8"_"btG1" oZk(BG4G0bCZk "?"/ DD#/Cc0@B0`BCcݢ/G]] }(0@#k//P#tG> ^;[R~(^0~8GGG1"^(_""bnZk B="4GtG(b/mZk? ?"@ @# #}"FD c â"/#0C0 C#]@²G ](]0}8@#k///#K_"tG>^;8[~^ ~(GGGH"@b1"nZk"L_"tG8B@b1""nZkC"b` /[4G/@Zk //" Cc0@B0`BCc/ cwG]] }(0#k//#o_"tG>^;([~^ ~(GGG8"0b1"MnZk"p_"tG(B0b1""CnZkC_" , H #/ C / 0B0B= cyG]] }(0#k/#(> /@h0^p;0"tG^~[^ GG@_"b1"nZkpB8= "=GGb#0}_G]] `#k//#CtG>^;0[~ ^(GG@_"P"8b1"mZkG0b#"}BGp_G] ](0#k//#CtG >^;X[~^ GG@_"x"`b1"mZk }GXb# BGG]] 0#G///8#(> /@h0~;"_"^~tGx[^ GG`1"bmZk8""_"xBbtG1"mZk@ 08}GG"xb#B_G]] `#k/#CtG>^;[~ ^(GG^_""`1"b/omZk""_"BbtG1"//cmZk}G"BGb#_G] ](0#k/#CtG >^ ;[~ ^(GG"^1"`_"b/?mZk  ""_"BbtG1"5mZk }Gb#G BG] ](0##(> /@h8~;H" _"^~tG([^ GG`1"0bmZkB8}@ 0"G"(b#G_G]] `#k///#CtG> ^;H[~(^0GG^_"h"`1"Pb/lZkGB"}G"Hb#s_G ](]0@#k/#CtG>^;p[~ ^(GG"^1"`,_"xb/lZkG B"pb#}GO_G] ](0#k/#8> /@h@ ;"B_"^~tG[ ^(GG1"blZkP ""C_"BbtG1"lZk@H=X""G"b#BP} =G_G] ](p#k/#CtG>(^@;[~0^8GG~ ^"W_"1"bolZk @""X_"BbtG1"//clZkG"B }Gb# "_G(]0]8@#k/#CtG> ^x;[~(^0GG("^~i_"1" b;lZkx"8"j_"B btG1"///lZkGG B}b# "_G ](]0@#k/ #(> /@h0~;"~_"^~tG`[^ GG`1"hblZk8""_"`BhbtG1"kZk@ B8}0"G"`b#G_G]] `#k/#CtG> ^;[~(^0GG^_""`1"b/kZk""_"BbtG1"//kZkGB"}G"b#S_G ](]0@#k/#CtG>^;[~ ^(GG("^1"`_"b/kZk""_"BbtG1"//kZkG B"b#}G#_G] ](0#k/0C[F01BB\B/' C/k///0 k// k/ k/p k/  k// k//` k//P k//@ kGG({GGGTGG///#G^~^ GG0[8b ^j BZk0BGG8b/b///BZk0B?"G8bD/V///AZk0B?"G8bxD/J///AZk0B?"G8b8D/>///AZk0B?"G8b D/2///AZk0B?"G8bD/&///AZk0B?"G8b D////AZk0B?"G8bXD////AZk0B?"G8bX D////AZk0B?"G8b8D////AZk0B?"G8b8D////AZk0B?"G8bD////AZk0B?"G8bxD////wAZk0B?"G8bD////kAZk0B?"G8bD////_AZk0B?"G8bD////SAZk0B?"G8bD////GAZk0B?"G8bD////;AZk0B?"G8bD/////AZk0B?"G8bD/~///#AZk0B?"G8bD/r///AZk0B?"G8bD/f/// AZk0B?"G8bD/Z///@Zk0B?"G8bxD/N///@Zk0B?"G8bXD/B///@Zk0B?"G8bD/6///@Zk0B?"G8bx D/*///@Zk0B?"G8bD////@Zk0B?"G8bD////@Zk0B?"G8b D////@Zk0B?"G8bD////@Zk0B?"G8bXD////@Zk0B?"G8b8 D////@Zk0B?"G8b8D////{@Zk0B?"G8bD////o@Zk0B?"G8b8D////c@Zk0B?"G8bD////W@Zk0B?"G8bXD////K@Zk0B?"G8bD////?@Zk0B?"G8bD////3@Zk0B?"G8bxD////'@Zk0B?"G8bD/v///@Zk0B?"G8bXD/j///@Zk0B?"G8bD/^///@Zk0B?"G8bD/R///Zk0B?"G8bD/>F///Zk0B?"G8bD/:///Zk0B?"G8bxD/.///Zk0B?"G8bD/"///Zk0B?"G8bD////Zk0B?"G8bD/ ///Zk? "DDG GbG$Q"$q"`F3GB4CTF G]]UUBGu 0#////#GGG~^TGGG#`//"/ hXTGT4G|3 "G4G^GG({ ^H>GP^G(08@/AG] #k//G4G{#/C_///x0P"21@B2 3@J.@굹@BCB#///2@Bs"@B $(,048<@DHLPTX\dhl/? @//21@Bs"_k// 0" k//P @/k/// 1@B6HCB k/0P""21@B/0 3@J,@굹@BCB!/2@Bs"@B $(,048<@DHLPTX\dhl/? @//21@Bs"_k//4Gk//Gk//#tG^0[~^ GG8b9fZkCG B"b#G//{_G]] 0#/k///#tG^8[~^ GG@b{ZkCG B"b#G//[_G]] 0#/k///#4G^8[~^ GG@bbZkCG B"(b#G//;_G]] 0#/k///4Gk//#H;;"~^[^~ (GGGb{Zk///P"GG4GbtG 01"'A///GGG ""GtGb/AӃDGG`///BGTG ""b@ZkGGGG0b#_GG]]} (0#k//#GGtG^~G^ ~(GGCb#/L@G//G/b#_Ӹ4G pG[@Zk G]] }(0#k//#ۦ0;"~^ [^~ (GGG(bzZk///"GG4GHbtG 01"A///GGG 8""GtGHb/AӃDGG`///PBGTG`""Xb@ZkGGGGb#s_GG]]} (0#k//#GGG^~4G8[^ GG@bJfZkCb# B"GGR_G]] 0#k///#CG^~0[^ GGG ^C4G8b|Zk=// GG B"0b#! !$D *_  ]LG]] 0#/k/// [(;#4G^~^ GG1R[bBB2F wZkGGB"b#_G/0"HBG4GPb!F/ aZkG 8B"b#@0CG/_G]] 0#/k///#4G^0[~^ GG8bwZk G B"pb#@0CG_G]] 0#/k///#p4G~^^~ GGG`[/@Zkb#/@pG4G`G]]} 0#k//#tGG;"~^G{GAG]@ #k///G({TGG[///(;#CG^~4G^ ~(GG9 Ga[@ZkGG GTGGGGb"AG'G4GPb/ӃAGGTGG G "Gb/AGb#/_G /Gb#@Gb#/{_GGG]] }(0#k//G{#/GtG({/3///7GGG?FG/+#^~^~ GG@GGG{#l@GG" ?"bG"HT" t"AG]"b# ?"_G]G]} 0#k/ k// k//#4G~^GH{GAG]G #k/#B@ ^?B~^~ZF (0GG##GG}@ Zb?"GGG0"Ps"P@c~"(b(S"IA]"G ?"b#_=///GG}"GGxbAG//-GG4GbA!@,@ /B?"GG4G`"(b0R""^BR"AG]"b# ?"v_GPG4GXb/Ad4G[@ZkGb#_G]]} (0@#k/{#;"/{#;"}/#tGG;"~^G8{GaAG]@ #k///G4G({////GtG({/߳///G4G0{/O///; ! Bk/6JCB0@54GU u!k//; ! Bk/X6JC"B0@54GU u!k/@;G {([0;#~^G{#_ Xxx#8_x8Xx#@8H4G_G] #k//;G{ [(;#~^Gh{#_p08x#8x@X4G_G] #/k///G/#~^^GG{#_G@"b#B b]] #///@4t#T t//;#4G^~^ ~(GGGq[@ZkGG GTGGGGb"}AG;///GG//"! /0"G4GP b#11B/=@p4GpG[@ZkG/G4G ೈb#ƕ_0G4G  P b#B<@///"Gc G]] }(0#k/8;#4G~^^~ (GGGGq[/@ZkGG GTGGGGb"}AG7/GG//"! GG b#e<@Ә4G pG[@ZkG///G"4Gx b# d `/<@GGGGtGb#[_//GG]]} (0#k//7#4G~^^~ GGGGb#/<@4G G8b#/;_c4G/`[/@ZkG4Gb#<@G4G"aG]]} 0#/k///k///# ^~^ ~(0G3GG0G{#/ @c4G`[/@ZkG#4GG@b#=<@4G Gxb#/_G4G@b#/<@?"4G#p1DG[@ZkDG]] }(0@#k///#^~^ ~"(08޴@GGGGh{#>/?_`G-8%1B!HCB/fG4G/ `[@ZkGf4G[@ZkG %1@ G////8b%Hb#_Ce@  B@G]] }(08ݤ@P#k/[#~^^GGr `^TG #/k///G]b#] #/p#^~^ ~(08޴@HGGG>GGG{#///_`GxGG4GH b#T@GGTGHb ""VAGGGb#GtGG@GGG4G`b#D@p$"! $1@ HC @/gG4G/ `[//@ZkgG4G[@ZkG$1@ /"G4Ga[@Zkp# $1@&HC@///fG4G/ `[@ZkGf4G[@ZkG $1@ G////$Hhb#'_C//G D@b B`@G]] }(08ݤ@HP#k/{#~^^GGs `^tG #/k///G]b#] #E/[#G^~^ GG`{#R@_/G /Gb#}_="b  `G]] 0#/k///[#G^~^ GGX{#R@_/G /Gb#_=x" b  `G]] 0#/k///#CG^~^ GG{#G@6_= b(" ` G]] 0#k/#CG^~^ ~(0GGGG>`G`//b#_ GG `GtG]b#I<@GG]] }(0@#/k///#CG^~^ ~(0GGG> ^L`GI//G4Gt[@ZkGG GTGGGG`b"zAG3GG//"! /GG=TG b#U:@H4G pG[@ZkG///G 4G`b#_G4G ( b#B9@"dGG]] }(0@#k/#CG^~^ GG{#G@_= "  G]] 0#k//#CG^~ GG >^/ 0#/k///h{#b_== }  `G] 0#k//#CG^~ GG >^/ 0#/k///`{#_== }  `G] 0#k//;{Dk//;{Dk//#GG^~^ ~(08^G' %GGpGG b#` 18@GtGG=` b#B;@CGtG0b# #b_GG ?"Gb#~_ G]] }(08@#k///#G! !@B #GGtG=` b#;@G///Gk//GG{#~^^~ B (0GGG#G ;BQG;Fxu# ?"0:@@  G/7_GP$@GTG` b#0 @ B/_:@ӘGG TGTGGG@bG"yAG8#GtG!cY`[BG/@Zk8"G/## #GG0 b#/; C@/c8@GGtGG b#:@CGtGb# #ʓ_G?"Gxb#/_ /G]]} (0@#k/// k// k//#! !@B #/cG#$B@#d.SdJd>//  G ?"xb#G//P{#/ @p//S UB k/ k//#~^^~ (G0޴8@H>PGz > GGGGG #G @GGGGG/ c` b#7@GGtGG b#':@C?"AGtGb#2!B0DK #ޓ_ DG 0 GGGtG b# :@#)$@@$ tG` D/1cG/+` #// C[2G@ZkGGBGTG b#8@SGGtG /@ZkGGG/TG b#8@///'@@G!G?"0b#G_ G]]} (0ݤ8@H=P`#k/// k// k// ?!G ?"0b#G_#G///C#tG4GGtG^~tG4GB ^(~TBB08TB@޴HFGPXGGG~ G^G/,hpH HD%B@,GH D<-pEHHIEpfJ =-HIE"=-fKHIE=n؇D&B @m,fpHEHD <-HI p'KEpeJ=-HIEeK"=-HIE=P//؄D&B @M,fpHEHD <-HI pGKEpJ=-HIEpJ =-HIfKE"=-HIE=*D&B @),fpHEHD <-HI pgKEp%H=-HIEpH =-HIfKE"=-HIE=,gHFH"D<BR"TBDm ݠ&BG'GBѰG] ](}08@ݤHPX`#k/#G4G^~ ^(~08@޴H [PX>`^hGpFGGGGGG(b/qZkG/G/#0 DGGh b#(4B41B â///O6@G}"GEG00B="@Zk##GtGHb#!A0BPB.TJ>CݢBCFn #>_ Dk PE="}"GGG A@Zk///bC**(A(@ !.Q!J!>CR}'@`"@G"FDc1` #G C:[tG@@ZkG GGOTG b#7@J  AG4XGGtG@(@ZkG GG7TG b#7@2  ArG"GTG b#P022B3BSB@/7@@//_G /?!G?"b#GR_# G] ](}08@ݤHPX=`]hp#k// !G ?"b#G:_G///7P4G//@* #~^`[^~ (GGGGGhb qZkGGG]}b#G] (0#r//G]]} (0#/k/// k// k// k//3GtG+0#~^^~ (GGGG& Gb#"T/W_ G?"Gpb#_ //G]]} (0#/k/// k// k//#tG c//`[A!@ZkGGGTGH b#:6@/ctG`#[A!@ZkGGGTGH b#'6@ Gpb# _ ?"G_CG/#G$@#///;#G^~^~1 GGG{# //{_0BG"oG_"tG8bJTZk=@B4G"Hb!>H=LpZk= ]" @2@@@B0 F%/.DJF' / K%G" `/ `KF/ . J%F . JF @@/ ///@/@K%G/ @/`.`J%FD ¦ / ]2_J]v/// ¦XK?v//PB?"TG"XbmZk// = "1>Ja=4G"[@ZkGGG]]} 0#k/G QG4G@rtF`/#^G~^ ~(08GGGGHb/߸A"Gp D//@1"/"GGh1"b#Z_GG4GLb#G/@d//G4GbAGCTG0""(bG|AG""TG(b/?|A-$G4Gxb/ǸAG//"GG4G`b#_GGGGtGMb#@ /BGGGGNb#GGPR"6@,dGG4GXb/`xA,4GGhbA"G4Ga/[@Zk4G`/[@ZkG4GGXbxAGG]] }(08@#/k///Gk//Gk//Gk//Gk//#^~ ^(~08@޴HPXGGGGGG @h{#vHG# hR@ho/GG.b#/k@GGu@U@tGDGG0-b#C@F/@Gul@G=5@GGTG1b#'D'DDG/j@GGGGD4Gxb rxAG]GGTG,b#CQF Gl@GGG4GE0b#}j@GG4G/Gg[@ZkD "( GDb#/G1"/[_G/GC@GGTGNb#Dn@dG`G4G[@ZkGG] ](}08@ݤHPX`#k//;k/k/#4G^G~ ^(~0GG> ^+$b#P@GGGTGGGGb0" tAGG] ](}0@#k/"G=tG ]a[/@Zkp"G4Ga[/@Zk/b=tG ]cG] ](}0@#k///#G^G~ ^(~0>8@޴HPXGGGGGp.b#Gj@MGu@U@tGDGG-b#C@F/@Gk@G=5@GGTG1b#'D'DDG/i@GGGGD4Gb ///wAG]GGTGh-b#CQF/ G//k@GGG4GEH1b#/i@G G4GGg[@ZkDGGh""tGbG/zAG//G""GtGbyA/ G?"GDpb#_hG4G[@ZkG GGGtG`b_hDGG4G`[@ZkGG] ](}08@ݤHPX`#/kGG({GGGTGTG+s///G;#"~^G0 GG{" q"Q#1"FGG:D^ #FGGTG s///#G ^~(^0~8@H^GGGG ~/D GA0BG4G8bUmZk0BG4G8bOmZk==G4G ]xb @?BP@s PB2F [@ZkG TGTGGGG "yb#rAG/BGGTG@G/oZk/yJB"GXKG?=@=oZk, DH<G ](]0}8@HP#k//#G^~^ ~(GJGGGp.pJUgB8FB'`/%///.0 B"FJ"CUB7GV/VKCUGC0 B"ZF@,H0 B"CU@`F.JCUB0 B5D?B}.GJTG@zb#//#vAGTGTGGG "Gyb#/WrA///G///G]] }(0#k/=G4G0|b#":vA//GTG "TGGGGyb#6rA/"a4G[@Zk;GG/7 p.pJUgB8F2'`/%///.0@B"FJ"CUB7Gv/vKCU@0@B"Fv.vJ0@B"CUgBG`6,6HCU'@0@BF?Bp/pKQ k///Gk//#GG^~^ ~(08޴@HPGGC //s".J"BB7BFF/K8 7#@X#7CC:D C8D/' ///s/s"sK0" B "B7#B7@7BF FBFDD `s".JT#BB7@CGG3,3H G/GGG]"GtG.b#/@!1@@G@7 @ F @1DAFaD ///}GG]".b#tG@Gן@!1@@@_"7 @ @GF1DAF/?41@51@7B7B6@FB7@FBe"@`F8GF //GGTGpb#"nj@ӴCN }"!@Q BG @!0 .b#tG1@0D @!B @@4G1DGG¤AF]"4D%D/ @//!1@01 @1@G7#@7B "B0D2@ @@1DCB8`F2D3D/GGTGpb#"2j@ӡCN Q"%" @ BG3@@!0"7aBTG0@Dpb#"BD" BG@F D//j@ӳCGե@@@GTGpb#DDGDG/j@////D GGGTGpb#i@// =GG.b#tG]"@G.@ӝ/!1@@@ 7 @ @F1DEaD /]GGtG.b#@]"G@'1@@@ @7@GED#D?CG]] }(08ݤ@HP`#/k///#GG^~^ ~(08޴@HPGGC //s".J"BB7BFF/K8 7#@X#7CC:D C8D/K ///s/s"sK0" B "B7#B7@7BF FBFDDXF/!3/s"3K#9 +C7C7#@G9D/' ///s/s"sK"+B""%B7B7B7BFF%BFFD `s".J#BB7C8GG3,3H G/GGG]"GtG/b#/@!1@@G@7 @ F @1DAFaD ///}GG]"/b#tG@Gg@!1@@@_"7 @ @GF1DAF/?41@51@7B7B6@FB7@FBe"@`F8GF //GGTGb#"h@ӴCN }"!@Q BG @!0 /b#tG1@0D @!B @@4G1DGG¤AF]"4D%D// "@//!1@01 @1@G7#@7B "B0D2@ @@1DCB8`F2D3D/GGTGb#"h@ӡCN Q?"E"0@!0"@BGB4@6@TGFB_"7BF EBb#"F0DG //h@ӶCGե@@@GTGb#0DG1DG2D/ h@////D GGGTGb#h@// GG/b#tG]"@G@ӝ/=XDG]"G/b#tG@G@!1@01 @1@2@7#@7B"B!0DCB@G1D8`F2D3D ///GGTGb#"Rh@ӡCN!%"0@Q! BGB!0!4G/b#2@F!@AB @@GF]"tGpFFG%D y@/!1@01 @1@!7#@7B"B2@0D @CB@1DG8`F2D3D/GGTGb#"h@ӡCN Q"%" @ B_"G@!0" EB3@0@D7aBTGBb#"DG@F D//g@ӳCGե@@@GTGb#DDGDG/g@////D GGGTGb#g@// GG/b#tG]"@G@ӝ/(1@@@ 7A @(D0D!FaD /]GGtG/b#@]"G@'1@@@ @7@GED#D?CG]] }(08ݤ@HP`#/k///#GG^~^ ~(08޴@HPGGC //s".J"BB7BFF/K C8 7#@X#UC7CC:DxG8D* //.s"J B""B7@7B7BFBDUBF0GDD/ `/s"S/SK#DCAC7C8D:D?3.3J G/GGG]"GtG(/b#/@!1@@G@7 @ F @1DAFaD ///}GG]"(/b#tG@Go@!1@@@_"7 @ @GF1DAF/?41@51@7B7B6@FB7@FBe"@`F8GF //GGTGb#"g@ӴCN @"!@Q B @!0 G(/b#1@0D G!B @U@4G1D@tG¤AFG]"4D3D%D )@/!1@01 @1@G7#@7B "B0D2@ @@1DCB8`F2D3D/GGTGb#"f@ӡCN Q"%" @ BG3@@!0"7aBTG0@Db#"BD" BG@F D/f@ӳCGե@U@@@GTGDb#DGDGDf@////D GGGTGb#f@// =GG(/b#tG]"@Gƛ@ӝ/!1@@@ 7 @ @F1DEaD /]GGtG(/b#@]"G@'1@@@ @7@GED#D?CG]] }(08ݤ@HP`#/k///#GG^~^ ~(08޴@HPGGC //s".J"BB7BFF/K C8 X#x#C7#@7CCF7aCC:DpGUC0DD D+///.s"J"B"5#B7B7B7!CQGեBFUB1GuGF5F/? `/s".J0 BB7 @DD.J`G/GGG]"GtG/b#//@!1@@G@7 @ F @1DAFaD ///}GG]"/b#tG@G@!1@@@_"7 @ @GF1DAF/?31@41@7cB7B5@ tFעB6@ @uFB@vF8FwF/GGTGb#P"e@ӳCN G"!@Q B4@ @!0 7BTG1@0D G!B @b#1DX"AFaF /e@ӴCGե@U@@@GTG0DGb#1DH"2D3D e@////D GGTGb#@"re@//4G/ݠGG]"/b#tGH@@¤G@/!1@01 @1@G7#@7B "B0D2@ @@1DCB8`F2D3D/GGTGb#P"Fe@ӡCN Q"%" @ BG3@@!0"7aBTG0@Db#X"BD" BG@F D/+e@ӳCGե@U@@@GTGDb#DGDGDe@////D GGGTGb# e@// =GG/b#tG]"@GB@ӝ/!1@@@ 7 @ @F1DEaD /]GGtG/b#@]"G+@'1@@@ @7@GED#D?CG]] }(08ݤ@HP`#/k///0;k/@k/#^~^ ~(08GGG>G8DGA/G Gp""TGbpA/G5/"G4Ga[@ZkGG TGTGGGGb"zkAG BGGTG4GZfZkG%b/coA//G4GGbZoA /`0# 0G///G]] }(08@#k///  %GTGGbF/@^pA/dGTGb`  %GF@//OpAGb#@G///Gb# @G///$0k/'#;4G~^^~ GGGa[@Zk" 4Ga[/@ZkG4G`G]]} 0#k///k///#~^^~ GG///pb#_GG]]} 0#/k///#^~ ^(~08GGG> ^~0/GI/@"G4Ga[@ZkGG TGTGGG "GPbjAG5/GG//"! GG4G$bnA4G GbnA44GGb////nA8`0GB b4G dRsG@[@ZkGG] ](}08@#/k///Gk/ //`aG` !D/ `aG `/ !D/ //,k/#^~ ^(~08GGG> ^~//_GHG4Gt[@Zk`GG TGTGGGG{b#p""jAGrGG//"! GG4G$P}b#nA4G GP}b#mA44GGP}b#/mA8/A`,d d c` 9///Fd //`///38 G s`S8@G/@s`s8`G `s/ `8D/s//`#$ d/ /G4G(¦vG[/@ZkGG] ](}08@#k// #~^^~ (0GGGGPBG4G "z!G/ [//@Zk C@/2G4G!@ @aF/ ^@G@b@G//#@GGTG`rb#/ ///FAAe4G[/@Zk8#GGTG`rb# /6AA//e84G[@Zk4#GGTG`rb#/ ///"AAe44G[/@Zk$G4G82b#//r@(G4G7b#l@,G4G4b#/rp@0G4GAb#/@<G4GAb#//@eG4G[@ZkG]]} (0@#k/;#4G0["~^^~ (GGGqFG[@ZkGG TGTGGG "Gb#hAG%/GG//"! G4GG$4Gb/lAӘ¦? 4G $$G4G($8LdvG/[@ZkGG]]} (0#/k///#x;4G~^p[^~ (0GGG!zPG/ [//@Zk@G4G,b#s@DG4G@H,b#u@,04GDGD?F@m@0G b_4G,e@,G b_ b# @4 b#_8#GTGGrb# /K@A///e84G[@Zk#GGTGrb#/ ///6@Ae4G[/@Zk<#GGTGrb# /&@A//e<4G[@ZkH#GGTGrb#/ ///@AeH4G[/@ZkeG4G[@ZkGG4Gsb#/`^h~px޵G2B $BGGGGGG 4G$!$AH{//g/D GgKb#u $F/o G@2@xF/G@1@G`b#0 @Ӓ `//GG @""/C@g.tJxdF?`.JF; @//KGxE+@/h#7aC -I mC//"B -I B//-IH"@B MB PA @`.JxEuA@G//"GGb#c_ GuA@///@G'  $@*'.'JxD&//@`.`JGxD/MA"7B A B!A/KxD_u@AG"Gb#G2_ Gu@A//$@GG)@DE9/'.D'JCu'BF/8 . JCuBG/0'/ 'KCu'CyG/( - ICu@F/ g. gJCugBF/`'. 'JCu'BG/  @/@ @/g/gKCu'CE @@//.JGD1@GTGbc`/jAGGGGTGp=b#/@G//0 pb# D (@ `GD&pb#x D/ (@G8 `6/G((b#@4///GGb# @gGGb# ( ( @ DH////  Q@r `/////GGGGHb# @GkG4G[@Zk GG"GTG7b#ŕ@C"pb#-NI=F@ `G@GG î@GHb# @G/ @@@ E2@Gb#)G/xD/2@ /kG4G[@Zk/"Gb#0_///1@G`b# @ `G/GGHb#U @GG] ](}08@ݤHPX=`]h}pxݥ#k/#G^~ ^(~08@޴HPX>`^h~pxG Gq/qKGGGGG qK4G@"//DD G2@wGb#/GEx@G@@1@GXb#T @ӛ `//GGF"&."2Jx$F f.tJoF3`. JxD(//#7C *@I C//G#@C`*@I JC PAA/*@I' @*@ P!@, HxD?u@@//"GGb#_ Gu@@///, HxDI///JJA'"7!B JA;@f. *B DfJxD"87BJJA JA B-&/ &KxD -`7@JJA JA @" . JxDg"7aB!JJA JA jB . JxD'#7!CJJA JA *C/ @. JxD?u@@///"GGb#?_ Gu@@///, GH,///xDD/$&. &JCu'BF/ . JCuBF// KCuCXG/ f/ fKCu@'D/ . J.GDGTGbJ 1@h/hAG GGGTGh@b#/@G//0 hb# D (@ `GI%hb#x D/ (@G< `:/G('b#(@9///GGb#@{ GGTG# '(b/ ( //_ D////  Q@r `/////GGGTG bG @GiG4G[@Zk GG"G$@TG:b#/@ C"hb#l-KlIl=h@ `G/f-GGfIGTG b @f-GfI/// f-fI/@@ E+@xE2@GGb#N@!/"Gb#T_///i`G4G[@Zk/1@GXb#@ `G/GGTG bp @GG] ](}08@ݤHPX=`]>h}px#k/// #^~^ ~(08޴@HP>XGGGGGCGTGbuAAF/#G//($lAGk/G($GTG(>b#@G G]GGTGblAgGG4G[/@ZkP//EGGTGI>b#%$@G 4GtG b_G< GGGTGb/lAgGG4G[@Zk.G($GTGblAG(//=G4G="btG ?E$E0JGlAG$GTGblA=GG="b4GtG ?Et'E=!?H=/kAG/GG]] }(08ݤ@HP=X`#k/Gk// #^~^ ~(08޴@HP>XGGGGGC@GTG}b#uAAF/#G//($YlAGk/G($GTG`4b#@G G]GGTG}b#FlAgGG4G[/@ZkP//EGGTGIh5b#%$@G 4GtG b_G< GGGTG}b#/#lAgGG4G[@Zk.G($GTG}b#lAG(//=G4G="x}b#tG ?E$E0JGckAG$GTG}b#kA=GG="x}b#4GtG ?Et'E=!?H=/OkAG/GG]] }(08ݤ@HP=X`#k/Gk//#C^~ ^(~08@GGG>G ^/G/`#G8 Dy ///BG4Gz[@ZkGG TGTGGGGbp"bAGbGG//"! TG%e` G4GhbfA =GGTG>b# 抜@GC@b#_  //  / G/?4Gu[@Zk/`,//,/// G G 0G QG/@G/`¦֢wG[G4G@ZkGG] ](}08@P#k/#C^~ ^(~08@GGG>G ^~Gw/"G4Ga[@Zk(GG TGTGGGG bp"BbAGbGG//"! TG%e` G$ 4Gb/fA=GGTG(?b#/ @GCxb#_ //Gb4Gs[/@Zk`,/,/// G G 0G QG/@G/¦֢wG[G4G@ZkGG] ](}08@P#k/#G4G^~^ ~(08޴@GGGGtGG> ~t@[/@ZkG//G`bTGTGGGG{b#p"/aAcG4G[@ZkGZGG//"! TG&f`  =G$GTG 4b#]@GGG b#T_ /G`bG4Gs[/@Zk`,/,ð///G G G0G/ G/Ű@񢦘¦vG[G4G@ZkGG]] }(08ݤ@P#/k///;#CG^~4G ^(~0GGGa >^H`[/@ZkGG TGTGGGGbp"aAG7/GG//"! TGG 4G#0bdA=b# / ///_ / /// ` G?(G4GuG[/@ZkGG] ](}0@#k///#~^^~ GG///ppb# @GG]]} 0#/k///S #~^^~ (GGGGP BG("4Gz!G [@Zk# ,P@0p `GGtG1b#k@#GG1b#TG l@ 4GHb@#GGTGhsb# a8A/H4Gd[@ZkHG4GdG]]} (0#/k///k///# ~^^GG0 0/, ,QPF/#`@//FGԢF/G//G/ G// /02 A///0,18b#p_GG]] #k/{#CG^~4G^ ~(GGGs >5@[@ZkGG TGTGGG "G{b#`AG&GG//"! /GG#4G~b#/cA G4G~b#/cA(4G"qG[G/@ZkGG]] }(0#k///;#CG^~4G^ ~(GGGa >/@[@ZkGG TGTGGG "Gp}b#_AG GG//"! /G4G #4Gb#/cA0B4Gb$GRsG/@[@ZkGG]] }(0#k/H;#G4G^~^ ~(0GGGaG1 [//@ZkGG키TGTGG"GG|b#k_AdG4G[@ZkGGG//"! /}4G(¦G4G$d$dvG[/@ZkGG]] }(0@#k//#^~^ ~(GGGG{# ~^_ =Gb#  _ /  /`G/ a0G pQG@q2G?`GG]] }(0#k///#^~^ ~(GGGG{# ~j_ =Gb#  _ /  /`G/ a0G pQG@q2G?`GG]] }(0#k///#^~ ^(~0GGGG{# ~_G (xb# $}m@] @ G////qG`/ ``GsGtGq#GG] ](}0@#k///h;#4G^~^ ~(GGGq[@ZkGG TGTGGGG0|b#X"i^AG///GG//"! /]tGHG4G# CuG[@ZkGG]] }(0#k/0;#4G^~^ ~(GGGq[@ZkGG TGTGGG"G@b*^AG"GG//"! /(BtGG4Gb#C// bA(4G"qG[G/@ZkGG]] }(0#k///#~^^~ GG///@G{#8D+ $0 _G/,///G///G]]} 0#k/5@@b#FG G_GGb#_G //xD b#_G//4GAa CG A  ##âG6#//[#4G^~^ ~(0GGGrG[@ZkGG TGTGGGG|b#8"]AGC/GG//"! /]GG$4G~b# D.J؄F/c G/seA`@GGTG.|b#! JGx'D/ 11@aA GGTG|b#aA//GG4G~b#GaAP"4G!pGG [/@ZkGG]] }(0@#k//[#4G^~^ ~(0GGGrG[@ZkGG TGTGGGGbp"]AGQ/GG//"! /]GG$4Gb D.J؄F/c G/eA`@GGTG.b! JGx'D/ 11@`A GGTGb`A//GG4Gb`AGCTG@b#/k@///(` (dxBbG4GRsG@[@ZkGG]] }(0@#/k///#^~{#GGo_=// G] #k/@[#4G^~^ ~(GGGr >[/@ZkGGTG TGG("GGPb/\AG#/GG//"! /8BtGG =TG#CPb/3`A(4G "qG[G/@ZkGG]] }(0#k///#^GG~G{#_=/ G] #k/8;#4G^~^ ~(GGGq[@ZkPGG TGTGGGG}b# "-\AG%///GG//"! /BGG4G@b##C// `A(4G"qG[G/@ZkGG]] }(0#k///{#4G^~ ^(~0GGGs >^[@ZkGGTG TGG "GG|b#/[AG#/GG//"! /] GG=TG# C}b#/_A(4G"qG[G/@ZkGG] ](}0@#k///#^~{#GG__=// G] #k/1 D/-0#8 D~^^~ (0GGGG/ , / GTG  b@/ GTG b// @ G]]} (0@#k/#~^^~ (GGGG GGb#D//_G]]} (0#k/#~^^~ GG///@G{#8D+ $0 _G/,///G///G]]} 0#k/5@@b#FG G_GGb#_G //xD b#_G//4GAa CG A  ##âG6#//#G^~^ ~(0GuGGG GoG@Gpb#xD5@#x D ($/@G0b#/@G\/#G4Gb< xF/8#!!F4 (^A#GGTGb(!cACTG b@4G`[@ZkG0b#@4/XDb#$$ $/+@//$b#Aw@ӡC@Gb#1D /_ # $G b#1D /_CdDd`@F`XFGG]] }(0@#k/#G^~^ ~(0G{GGG GuG:@G4Gb#xD/3`xF/(//?^AG(#GTGb#cAGCb#(@p4G`[@ZkGb#s@GN/b#*0x F' CpSF#@($/O@Gb#/_@:/XDb#$$ $/@//$0b#A@ӡC@G(b#1D /G_ # $b#G1D /__CdDd` @XF,F,/ F` GG]] }(0@#k///#G~^^~ (GMGGG GG# A/@! a`/0G G@G @:G/ G///GG@CGb#x@F/@Dx@G/ @$D($@Ghb#@G # Xb#FG_CdD@GG]]} (0#k/#G~^^~ (G>GGG G8 C@ b#xF/ТxFF($//@Gb#@GGb#@$ ///dGb# # F_d  GG]]} (0#/k///#G^~^ ~(0GGGG G$d@x D/+ Cx@G/@(c//`$Bb#FG/($)@Hb#G:@Gub#0Bx F PdSBTF/@($@GHb#&@a$G8b#d # D=QF@>_d@b#DQ#x D (CF G($ @GHb#/@GB/$X D5 ,,9/$DGb#/@$E@$GRb#@ӡC@Gb#1D /_,cC/@///G G G0G/ QG/_d  GG]] }(0@#k///Gk/k//#~^^~XD (0޴8@H>PGGGGh{# j_ӊ/5@@@4G0DG b D_~/ P¤//#fG4G'!DGi /// [@Zk 4Gb# D _5@u@@0D D ,////0b#a_G?GGTGsb#5@u@@@1D@F D (#/ ///Ae(4G[@Zk#5 Au"A"AD D 0////0Hb#_G?#GGTGsb# #u @!@AF/ ////Ae4G[/@ZkeG4G[@ZkG/G]]} (0ݤ8@H=P`#k//&#~^^~D (GGGG ^~ ({#0#//XDG8b#/ _//G]]} (0#/k///XDGb#/_/"G4GaG/[//@Zk P #b# F _b#5@u@@0D D,_GGTGqb#8D@@u@`F (#CF@F /7/A"(4Ga[/@Zk#GTGqb# #u @!@FG/ ///A4Gd[/@ZkXb#5@u@@DD0//:_G4GdG]]} (0#k/-D/ p// `,;0D/ ,0;0D 000XD ,qpG `,1 D 1Dpq 0! k/GGGGGGGk/// G//_GG/k///F1@3U @UB8 D8FF0DG/& % _ st`/TX@G/@, 3D/ , / F `sG`GGk// 0GG{#X"D 2 R//Gk//G&#~^^~ (0GGGGG/Gb#_/G/Gc/G]G]} (0@#k/Gk//#G~^^~ (0޴8GG GG/  /$  $ G$Ghb#_G//G/eb#$$GDF G R. @Gb#+$$$  A& @:#GG /QGG/@rGG `GGGG5GG? FF @b#X_$//$$GTG8b![A/$Ű / G$Db##@$/$Ghb#  %//@ ////GGDGtG&b#"@ cG` /@$ `@ $ 4Gb#s_GGG #GGb#G`@dG4G[/@ZkGG]]} (0ݤ8@#/k///G. #~^^~ (0޴8GGGGGG///GGTGb'_GGG]G]} (0ݤ8@#/k///Gk//#G~^^~ (0޴8@G0GGGGG{!1 @"@!@\<@C/k///GGTG0b_//Gb#_GGb#,@///G//x"G4Ga[@ZkGG TGTGGG8"G@b##UAG/GG//"! /#p¦ 'FDz/ "F@' ///(G4GbF /XA4GGb8FBBuB (CCFFpF G//XA(/88G2_J0vJPF8GXbts G4GG`[>@ZkGGb#_D b#|0/;_0G@b#G$C'@ R @#$# @b#G A @'G/ ///QG@rG `GG/5G/? @b#_$GTG,#Hb _,F//// #$F/ c gg4///G'GTGH9b# @ (/// U@Gb#GC&D/ 2@ //G/ $G GРGG4GXբGD/[@ZkGG]]} (0ݤ8@P#k/#~^^~ (0޴8@HGGAGGGGG/G4GbD2,$ R@ GG,0b#G_!GG"/GGG0b#_GG//GGG4GG b_GGG///DGcG]G]} (0ݤ8@HP#/k///GGG{#g///GG{#`GG{##G~^^~ (0޴8GGGG{#04PG8c_G//G/0G4G6b#///@04G$G'b#/K]@$4G(G+b#/V@(4G,G)b#/;[@,4G<G6b#/@< c/a`///àGGTG(b8D! 0cE`}`B//`B`BF=`#</G///aAG5@#0TGG(b://aAG)4DGGtG #0Cpb#Oa@G(DGGG <#C8c b#a@G///DGG`b#GG/_G @/ E/DGE//cGG]]} (0ݤ8@#k///#G^~^ ~(0GGG{#>H8_GGB "4Gq[@Zk4G<GhbVA<4GLݢ(bL$C$D((( ,_G,Gb#=_,4xb#G_4GGtG 0b////_ ////  G?GG]] }(0@#k//# ~^^GG  //G]] #k//08 D 8 vH//P @z5`Cu`C;D G ///05 @u @!F?G b]] #//[#CGx^~4G^~޴>^~GGr# "> [//@ZkXGG TGTGGGGPb"KRAG,/""4Ga[@ZkGXGbTGTGGGGPb"5RAcG4G[/@ZkG/.PJ>ݠ///& G!8B! G5!A!AF`.JF B!z/8 EtG"0B"O$& B!b# yGGG`Gö_ //GG"(B"tGGb#/_p(Ip!//// GTGpb8F-VAӠC `A`GE//-GTGpb8 F -VAӠC `AGE?4`E,/// 0`A'//!ERF B!@!@/rRaB sA@RB tA@RB uA @ҢRB vA/@RB wA_-`ƠGE&/&Ơ!CG yAE@fƠaCG {AE&Ơ!@ aA GEƠBG pAE/ fƠaBG sAE/4`E/ 0`A//u A A8FFF B!h!+@/R 0`A&@R 0`A#@R 0`A @R 0`A/@R 0`A/_// A///R xA@R xA @R xA@R xA/@R xA/_J`ƠGED %/Ơ 0`AGE=@Ơ 0`AGE8`Ơ 0`AGE3Ơ 0`AGE/- Ơ 0`A GE(Ơ 0`AGE4`Et/// A///Ơ qAGE`Ơ qAGEƠ qAGE Ơ qAGE/Ơ qAGE_4`EQ 0`AO//XB EG"?tGfb#G B!R"/_p!,Ip//// GTGpbF-UAӠC `A`GE//-GTGpb F -UAӠC `AGE?4`E/// 0`A // X E pB!//GG4G@bXA@GG4G@@bc@//XAg@GTG@@[@Zkg-GGGTG[@Zk>GG `GGPB"GGGGb#._ /GGGXB"GGGGb#!_GGG(B"GGb#G/_21/XGTGTGGPbGG"IPAmG4G[/@ZkmG4G[@ZkGXGTGTGBGPbGG"1PAjG4G[/@ZkjG4G[@ZkGbG4Gk[@ZkGGx]]}ݤ=]}#/k///Gk/ // 8 F @8@F/@//`8`F/ `//8F//k///#GGG~^^~ G:G G6/G_ SS G!/8Fc`8G/c//`#8 G/ c// `C8@G/@c/ `/// rrGb#_GGb#_GG]]} 0#/k///)P2q@BWBB%@[#^~^ ~(>GGGG R"{#@}GB"G]0b#] }(0#Gj //G]] }(0#k/#~^^~ GGG//BG ""(b#R" @//cGG]]} 0#k/Gk//1P2q@BWBB-@([#^~^ ~(>GGGG R"{#o@GB"b"8FG/GB"b"G] }xb#](0# /G]] }(0#k/;#~^^~ (0GGG///`BG0""b#R"b @GG ""GTGxb TAGP""GTGxbTAd//G4G[@Zkc G]]} (0@#k/// k//dG4G[@Zk4G/dG4G[@ZkG/#C^~^ ~(G>G@pG31`BbB \|BDCk////4Gw[@ZkG4Gb/RAG]] }(0#k///#~^^~ (GGGPG21@BBB'`\\BCk//H0¦4Gv[//@ZkH/G]]} (0#/k///GG4GbKRAH/B G@b#R"@G/G]B"GGb#]} (0#7 ///#0FG~^^~ (0޴8@HG@GGGG/ q9`F6 /(///GTGh""8b8FVTA G/GTGX""8bJTA G/GTGP""8b>TAG/G""pb# @|///[¤//$0BP""Pb#R"8"D8 D/;G//4 B @2GGGGTG0 b#9&@f3GG4G[@ZkfG4G[@ZkGGGp""GtG(b/SAG//CG""GtG(bSAG;G`""GtG(bSA/3G@4GbQA+//fG4G[@ZkfG4G[@ZkG`H#G4Gb G/zQA/GGTG0 b#%@hGG4G[/@ZkG/GG]]} (0ݤ8@HP#k///?BB#@F~^^~ (0GGGG/ /$xb!1 @"@\<@@HCk//($//G//Ghb#!q@DW @ /(%// @/G %TG b_ // 8"D/ GhDf%/ G?`^D/[@e//GT R//G_"0b#xF ($UBCF/ ///@<GGTG b_4($///G$TG 0=b#j@// &/ "//GGTG bk_ //GTG b5@u@@0DG D/W_$Ghb#@GG]]} (0@#k//0P{11 B"B\P^X~`GGJ GGGTG/8D>0#< ///h 0@4GP?B[@ZkA@CG G G//+ TGk!G8b 1F`fOA// 0@A EA/?g EA @@TG//@0@G[Q_B@ZkG'K@0@J@+)/?cGG]]} (0ݤ8@H=P]X}`p#k/GTGTGG GGbJAG/GTGTGG GGbJAG/#TG~^^~ (0޴8G@G GGGGq@GG ;"hb/OA///g84G/3`$pG8 D. [/@ZkPGG TGTGGGGHb"IAӍ//BGGTG4GDZkPGfb"/MAG4G "bMA G0$&0İs///4#8BG4Gr( [/@ZkPGTGTG4 GGHbG"IAY//BGGTG4GvDZk4àPGb"MA4G "4Gb/wMA 4@$ @ @5"@8 DFF/63 0d/`/// CD/5CF#G GTGhbwNA.c/D// $ CD`#CUFG@ǢGTGhb]NA/GG]]} (0ݤ8@P#k/G//G//G//G//C2BGGFJ#~^^~ (0޴8@GGGGGC//# @ @5"@8 D[GQG/7  0//// GGTGCDD/+`b/NA*/cCd@0D?dD 4`D///G]]} (0ݤ8@P#k/F 4F/k/// //G//G//#?B_BTG~^D^~ (0޴8G@H>P^XGGG`;GGGG1"xbMA//gH4G/3`$pG8 D. [/@Zk`GG TGTGGGGXb"HAӝ//BGGTG4GbCZk`Gfb"/kLAG4G0"beLA G0$&0İ///4#HBG4Gr( [/@Zk`GTGTG4 GGXbG"OHAi//BGGTG4G.CZk4à`Gb"7LA4G0"4Gb//LA 4P$MCU @C///BB5B8F2F3F/> ;0$/ /// GGTGxbCE/.MA/ )// GGGib#_8D/)?D $D@ GGTGxbCE@/MA  * GGGjb#_8DGG]]} (0ݤ8@H=P]X`#k//G//G//#G@^~H^P~X`h޴pGGK GGG4G@GDGGEb#_> eG"TGhb#0B"tG`i_GTG"@B"Ghb#a_]"GGb#_"///G& "XB"+ eTGGhb#`G0@K_ //GGTG"Ghb#0@HB"?_G]"b#Gz_G%]"b#_G@]H]P}X`hݤp#k//G//#~^^~ (0޴8@H>P^X~`hp޵xGGGG GGGG GH[{///$IkG4Gq@ [TG@ZkkGG4G[/@ZkGG>0A$IG BB3F/' ///"F+F0 @'G0 @#42G0 @ TRG0 @@trG0 @`D0 @0 @ 0@/ (@ /Ԣ"F/0 @ (@///W&@$(D! GGb#$I_j G @ @GTGQ@[@ZkjGGQ@TG[@ZkGPAMA0A$)0$,/}///$mkG4Gs` [TG@ZkkGG4G[/@ZkG G>!A$-G (@ @F/'///s"F+ӢF 0A'F 0A#G 0A31G 0A SQG 0A@sqG 0A` 0A A/ A@/s"F/ 0A A///TA$ E#GGb#$M_j G @// @GTGQ@[@ZkjGGQ@TG[@ZkGPANA0A$-0$ I/@ G_ó$A8`F` G `F$A8F/  G/ G$E?G?//)$E?G/?//GTGTGGbGG"FA GTGTGh¥GbGG" FAnG4G[/@Zk /GTGTGhGbGG"EAlG4G[/@Zk l/GTGTGhGbGG"EAmG4G[/@Zk X/GTGTGGbGG"EA KGTGTGhbGbGG"EAcG4G[/@Zk 8/GTGTGhGbGG"EAdG4G[/@Zk $/GTGTGhGbGG"EAgG4G[/@Zk /hG4Gh[@Zkh"G4Gi[@ZkGG]]} (0ݤ8@H=P]X}`hpݥx#k///B?B@F/K#~^^~ (0GGGG, /GGTGbrJA//>"! "/G // GGtG)b#,/#//SS@ 0GG)b#tG/#IS@/0//GG]]} (0@#k/Gk//K#~^^~ (0޴8@H>P^XGGGGG,Р@{#_$///GGTGbJA// $&GGbTG  JA"Ơ/"!/ ///G///G]]} (0ݤ8@H=P]X`#k//Gk//G// G,0?GGb#;_G$#G4G(b/ //HAGGTGP""8b/MAG#GTG8byMAG4G(bHA@b GG4Gc[@Zk//( G# /GGTGbIA//jGG,G)b#G cR@GG 0GGG)b#* aR@G*J!?@bcG4G[/@ZkcG4G[@ZkGòB?B@F//#~^^~ (0GGGG, /GGTGbbIA/#///G///G]]} (0@#k///Gk//  %4Gb#_G8"4G8bHA ,/G#GtG%b#)R@G 0G%b#tG#/R@///0G4G8bGAòB?B@F/3#~^^~ (0GGGG,/$EGTGb@G/HA//#///G///G]]} (0@#k///Gk//  %4Gb#o_Gx"4GxbGA ,/G#GtG&b#Q@G 0G&b#tG#/Q@///0G4GxbGAG#~^^~ (0޴8@GGGGG,Р@{#/_&/////GGTGbHA// $&GGbTG HAƠ/¤Ơ/#///G///G]]} (0ݤ8@P#k/Gk//  &4Gb#_GX"4GXb5GA à,/G#GtG%b#IQ@G 0GGtG%b##?Q@G8G_GGb#_GGTGb/3HAӺG04GXb GAӸòB?B@F/3,//+#~^^~ (0޴8GGGGGGGGTGbHA//$& GƠ /G]]} (0ݤ8@#k// k// k//b#,G_G&Gb#% _G/B_B#F~^^~ (0޴8@G,РG$GGGG G{#_//$ /GGTGbGA $&GTGb/ $/GAGƠ //G]]} (0ݤ8@P#k/&Gb#,#_Gb#G_G/B?B#D~^^~ (0޴8@GMPGGGG8@GF@, Р///GGTGbjGA//$' GGGb#>_./G GTG  >b# |@G G b#_  ǰ /  / G/?`G4Gu[@ZkGb#//_G/GG]]} (0ݤ8@P#/k///B_B#D~^^~ (0޴8@GGGGGG/G-/GGb#Gv_%/$G! ,///GGTGbFA $'GTGb/ $/FA/GGb#GGY_/G]]} (0ݤ8@P#k/ `b#/?_GGTG>b# $ y{@G Gb#p_ /``G@"G4Gq[/@ZkG/Gk/uBk/Gk/0Gu B BQF k/(p.pJ`///dB"aB"7BFF/`.J/4Gk/Gk//# TG^~^ ~(>GGG ^% pGptb#u`B`BF` /P// (#AG(tG= ]8bIAG(tG= ]HbaIA(C@ CG]] }(0#k//#4G~^^~ GGpG[@ZkGG TGTGGG"GbAAG)/ B4GPR Ct[/@ZkGTGTGGG"Gb/@AxG4G`[@ZkG/// ,A H <GG]]} 0#k/;#4G^~^ ~(GGGq[@ZkGG TGTGGG"Gb@AG.] b4Gx¦P@Bs@F cv/[//@ZkGTGTGGG"Gb/@AӠG4G`[@ZkG /// ,A H <GG]] }(0#k///8C# B@^~G^ ~SF4G(GGt@GG[@ZkGTG TGG "GGHb/_@AG/]TG`` @G]] }(0#k/// PX@F/@ 0k/3GG4G& 2X D #~^[^~ GGGz[@ZkG4G`G]]} 0#k//G4G`k//G4G`k//k///pGGG "` XFвGk///]0G/zZkGk/#GGG~^G G #k///v@ G] #k/// 1`B6XF 6 C6G] #k///@UB/|Zk֢C6/Y6K6?G] #/k/// P#GX^~TG^ ~X@F(GGG@pGu3B4B,B[>@ZkG TGTGh"GGGb?A /C BG]] }(0#/k///GG Gk///G/k///0 4GGR({uF+;k///Gk/k//Gk/k// P#~^^~X@F (0GGGGcP!B B@]@@P!B;BG/ ///@$B@@$B @@$B@$B/`@$B/? B4GGr[@ZkG)/#("TG @qG @/[//@ZkG/ "G4Ga[@Zk0BHG C#G4G{Zku[@Zk@.PJ>G TG8"TGGGGb>AG4GG]]} (0@#/k///#4G2 ~^^~ (0GG6 GGG GG0bXD-, /*@///@FAGb#"#%@P @0B GW_G TGTGGG"G@b>A#GGB@e{ZkâBB/XK?G]]} (0@#/k/// p#4G"~^^~X`F (0G8`GG5 GGG1GHb/-@///@jFAGb#%#%@P @0B G_G TGTGGG"GXbM>ACB#EB{ZkBGG{ZkâBB%/Y%K%?G]]} (0@#k/ P{#X@F/@_"Y?/k/// P#~^^~X@F (GGG+@G//' ,H////CcGPAC;B`b#/_"##0 @!Bd.dJwaJ .VJF>/Kc@,@H<G]]} (0#/k///GTGTGGGG`b"=A// Pp{#X@F/_k// P8{#X@F/_k// PTGX@F/c@#~^G^~ (0GGGGGTGG8bDAG;GGTG8bDA) ""Gb#}_.GJJ////XD%FGb# @2@_G H""b#G_G ,H/%F2@b# G_G@""b#T_GGb#D_G@"" /G ""b#H_GGb#8_G ""b#@_G]]} (0@#k/// k/$k//  $/k///=!B4aF$0/k///k/=BG4aFF\k(#4G~^^GGpG[@Zk0" 8TG "a[@ZkG GG//! B ?G]] #k/(;#G4G~^^~ (0޴8@H>PGGaG4GG[/@Zk"G" TGa 1"[/@ZkG/G /O.J/+///h @GTG @@0@[@Zk///G',@0@q.'H t1HSqJtFq>.J ⦸"TGw 1"[@ZkG/  @GTG@0@h[/@ZkgG"TG[ 1"@ZkG@TG0@.qIPJF>㠆g.G "gJ`/p@iGTG B@0@[@Zk//gGg/ gK[`Ku'@%@'@U'@(@$@'@u%@2FtFFF3FF$@%@5F:GgK%@9F +@F"@"7@%@7B7CB7 5$@/@U%@$@%@FDFFYG5%@FF1G@'GFuIG" g/4/0@@0@gK@0@ aFY4K`J=B5G=aBD4?F,BPB@HrxJuJD<.TJF>G.GJ_X@0@ .`9HVJF>G.GJ_L"TGx 1"[@ZkG/ "p@G ATG!i@0@[@ZkgG "TG[ 1"/@ZkG/ 0@@G.qI@tIGPJF>g.SgJtF0 A "g>㠡.J~//p@iGTG C@0@[@ZkeGg."ApJgJ'HeBkBeB5dB!"A"! 7#B7CB7!@oB2FUeBdBeB!FFF:G; `G5eBugBUgBdBgBueBdBeBF GF!FFGFFF@'3DtIG# ./0@@0@@0@JXKG !G KG=!C?R/=BZRK&FDBB`JtJ@GR?3.Q3J4F3>.J.@0@,J aJ@HD<.J//B"TGz" 1"[@ZkG^/ p@"G @TG@0@h[@ZkiG"TG[ 1"@ZkGE@ G0@(,p(IA(H0D(< G. GJ+@///h @GTG @0@[@Zk///G'-@0@P.'I s0HRPJSFP>.J ¦"TGv 1"[@ZkG/# P@G @TG h"@0@[@ZkiG "TG[ 1"/@ZkG/G1@@cGb#HB"/_@/ p@G $ATGg @0@"[@ZkhG " TG[ 1"/@ZkG/0@@ G.q&I@t(I GPJF>h.ShJtF0@ h>.J///p@gGTG C@0@[@Zk//gGh."ApJhJ'HeBkBeB!"A"5dB! 7#B7CB7!@F2FFoBUeB!FdBeBF= 5eBdBeBugBUgBhBdBgB:G`GF!FFG GFFFueB4D@'G3Dt9I# H/.0@@0@HKWJG@0@!FJF=B>q/=@FFF[qKB@CrJtHrGq?.PJF>H.HJ_G.@0@9,J!qJA9H1D9<H.HJ_9//b"TG{ 1"[@ZkG2/ "p@G ATG$i@0@[@ZkgG "TG[ 1"/@ZkG/ 0@@G.qI@tIPJF>g.SgJtF0 Ag># G. J//p@hGTG C@0@[@Zk//gGi. "ApJiJ'HeBkBeB!"A"5dB! 7#B7CB7!@F2FFoBUeB!FdBeBF= 5eBeBugBhBdBgBueBdB:G`GF!FFG GFFFeB4D@'G3DtH# I/.0@@0@IKWJG@0@)!FJF=B>q/=@FFF[qKB@CrJtHrGq?.PJF>I.IJ_.@0@9,J)!qJA9H1D9<I.IJ_//b"TG{ 1"[@ZkG~/ "p@G ATGi@0@[@ZkgG "TG[ 1"/@ZkGb/ @G0@G),pHA)H0D)<G. "GJ@//p@iGTG B@0@[@Zk//kGg."ApJgJ'HeBkBeB!"A"5dB! 7#B7CB7!@F2FFoBUeB!FdBeBFA 5eBugBeBgBUgBhBdBgB:G`GF!FFGueBdB GFF[GeBF4DSGG'@3DzIG" '/`/0@@0@'K@0@ AF[`K@JzG=AB=!B`?G6/FY6KBBpVJ`3J0G6?/XKG?G.GJ_.@0@;,J pJA;H0D;<G.GJ_//""yTG 1"[@ZkG/ "p@G ATGi@0@[@ZkgG "TG[ 1"/@ZkG/ @tG0@ ),pHGA)H0D)< c#.#J //p@hGTG dB`@0@[@Zk//kGC.# IAJCJ'IEBKBEB"!"5DB! 7B7#B7!@OBFUEBDBEBFFF5EBA uGBEBGBUGBHBDBGBG[GF D0F3DFuEBDBGD5DFEBFDF@'GDyHG"c/8,0@@0@cK@0@c FA8HJ9D=B=!A8<fF,&F@HB IC{Js6ID<V/ZVKSGV?.J#,@0@.#Hc `8HWJF>.J//"TG"t 1" [@ZkG/ ⤣ @@`0@GTG"g[/@ZkhG" TG[ 1"@ZkG@G,GH<G]]} (0ݤ8@H=P`#k//#^~^ ~(GGG{#_GG8""GtGpb#c_ӈG4G`G]] }(0#k///G]] }(0#k/O#;4G~^^~ GGGa[@Zk "4Gq[@Zk"4G q[@Zk"4Gq[@Zk "4Gq[@Zk"4G q[@Zk"4Gq[@Zk"4Gq[@ZkG]]} 0#k///W# ;4G~^^~ GGGa[@Zk " 4Ga[/@Zk "4Ga[/@Zk "4Ga[/@Zk " 4Ga[/@Zk "4Ga[/@Zk "4Ga[/@Zk "4Ga[/@Zk G4G`G]]} 0#k///k/// k/0,G0H%D% ///`/ D`K%D `/ `K%F/  , H%D  . J%F  , H%D/  . J%F? , HS G//%D`"6`@.SJEF1``. `JEF/@///`/ D`KeF``/ `KEF/@`. `JeF`@. @JEF@`. `JeF/`@. @JEF@`. `JeF~À@%D//8 `/`K/x`q/rqJD F [qK1"rGq?.JFuJ$@ fq/[qKuG1"q? , H%D{1H` Z .UJF1">@.@JEF{QJ  N@.UJF1">`.`JeF/?@.@JEF4@///`.`#  D{J`#F( `JeF$` ,`";HEF@ H%D `/ sKeF` `KEF@.J%D@"/  JeF`.JEF@ J%D?.Q.J uqJRQJ1"UFQ> , HG?.UJ>p/pKGF%/// , D H%D . JF/. JEF@`. `J%D `/ `KF/. JEF_`.`Jg p#B/.GJJEF( //%.`Fs"J%@C4D .s"JBCF .s"J>BCF/ .s"JBCF/ .s"JF?.JEFs"""wF@ ,4H%DF/ .JEF@.""J؅FG/3,6HC%@AF s"@///..`FFJVJs"aJ"F>)3,/3HXKs"t7H"G?/ S./SJXKs"aWJ"G?@./JXKs"r7H"G? ./JaWJXK"s"G?_@G+//.! 0@ DJBVF @.! J0@BG/a.! aJ0@eBSF/@.! J0@BF/.! J0@eBSF/_0D//C0@G/?aCF/3 ///."`"`FJF//@.# XJEF)_. J%D #?.`" JeF.#J F@." WJEF_ @?@/ ///`.#xJeF @///G//@.R@J@>.VJ>/KGFQ/.s#S"3 JإF,HD .J%@C1D s"JFpF//7s/sK/0///.qJ`Fs"FWJ"F>3,3Hs" p/r0H[pK"rGp?,Hs".xHWJ"F>.J .{0HTJs""F>3.3J//XK?Gk//P"0""@B7!BB2F0Fk///#G4G^~^ ~(0GGGG^([ 0bnZkGG/=4Gp 0@[/@ZkH"G8" PTGa@1"[/@ZkG/}G/#,"#c##HFu C.RVJGJ_/o.WJJ_j#/c Y;K'KY 7A@ @.T/JZTK"aJAGT?//"B #.t/#J[tK1"b4JbGt? ÿ9# C ./JXK! z4HG?.C"PJJc  7@T,c/THcK"@H4,Y@A4H$q@c B vTH"6D1//#CT/,4/$q@TKH2@Jc @BY4K aH"!G4?/"B T,.4.THJ"@HW@Q4JB rTH2F4>c $q@" /4,yJ$1@c A4H"9D4<{.PJG>G]] }(0@#k///#G4G~^G^~ (0޴8@H>P^XGGxb#GG;A/G/"@@4Ga[@Zk8"G ("@TGa1"[@ZkGp#,GG"#Hc //1@iGTGw B @G[@Zk//kG#,G#HEAKAEA5DAFOAUEAJ"FDAj""F7CB7cBEAFSF7B5EAFHETFGTGFyb#' GFD@F"1:AӁ@I@0@.xIQ!@G@F AE0@QAA@G0@WJ!BfFF{5H>U/ BZUKs@I[GU? .Q J3F > C.@0@7,CJuWJA7H5D7<#/c #K?@g,GCgHg<//G]]} (0ݤ8@H=P]X`#k//8b("TG@{1"[@ZkG/C* # ^~(^0~8@HGG{#_4G GG$ b#= @Gb#q_/G///G ](]0}8@HP#k///Gk//G@""b#$// _dG""TG[1"@ZkGGGTGpxb#;AGGTG""pxb#/{;A"GG4Ga[/@Zk0""b#$_"G "TGa1"[@Zk//GGTG""pxb#Z;AGGGTGpxb#/S;A"GG4Ga[/@Zk""b#)_"G "TGa1"[@Zk//GGTG""pxb#2;AGGGTGpxb#/+;AGGP""TGpxb#%;A"GG4Ga[@Zk 0""b#'_"G "TGa1"[@Zk]/#GG""pxb#TG /;AGGGTGGpxb#/:A"GG4Ga[/@ZkcG"TGb#GB"`֖_GGTG""pxb#/:AGG="TGpxb#:AGX""b#/N_"G "TGa1"[@Zk//GGGTGpxb#:A"GG4Ga[@Zk""b#$._"G "TGa1"[@Zk//GGTGH""pxb#:AGGGTGpxb#/:A"GG4Ga[/@Zk""b#_"G "TGa1"[@Zk//GGGTGpxb#z:A"GG4Ga[@Zk 8""b#$_"G "TGa1"[@Zk//GGTG8""pxb#Z:AGGGTGpxb#/S:A"GG4Ga[/@ZkGb#/_G/# ~^^~ (0GGGG1 úu'B%B'BU'BAGrG(B$B'Bu%BF2D[G$B%Bu/BD/BPF+B DzG/Bu+B+B[FF D+B,BDQGFD/s///%,%H$@/g  //%.E#A:J'Ha#"! 7cC7B7!@pGF?%J%B+B%B5$BDpG/BU%B$B%B2D[GD5%B:DDD/$F//_e/E#[zKgK: "Z#7!@B@C0D:D?,E"@HH `#u'B%B7aC"@BAGpGDF'BU'B(B$B[FAG'Bu%B$B%BFAFzGD Du/B/B/B+BPFzG+Bu+B+B,B DF[FDF //` @4G`[/@ZkGb#1@>_ GG]]} (0@#k//# ~^^~ (0GGGG= òu'B%B'BU'BPFzG(B$B'Bu%B DF[F$B%BDAGFD////`$cu/B/BPF/B+B+B+BAGF/o`u+B,BDQFD D/g///E/EKB/]/// ///%.E#A:J'Ha#"! 7cC7B7!@pGF?%J%B+B%B5$BDpG/BU%B$B%B2D[GD5%B:DDD/$F_e/E#[zKgK: "Z#7!@B@C0D:D/?,u'BE"@HH `#%B7aCAG"@BpGDF'BU'B(B$B[FAG'Bu%B$B%BFAFzGD DE/EKB  4G`[@ZkGb#1@_GG]]} (0@#/k///# ~^^~ (0G  GGG,e#ZHHGK@@":"Z#7B7#B7ACF @qGU@;D5@F@?5@PG@0F@QG1DDF";D3 ///7@%.Q0J'J%"p#0 "7aC @BaG0D* E/ZQKGK1"q#"u@@7aCB B:DpGU@!F@@FzG@@0F u@@PG;D1DF/ ///.JB/+ -/u@@U@@[G0F@@PG@u@;D:F@1DF;D?u@@`$C@ @0FaGu @ @@ @ @QGF`G F DtG/ ///%.E#@:J%JH%@/@"`# 7B7cC7@F+@[GU%@;F5%@F%@g5$@F$@@G%@F0F$DD"D[///@%.Q0J'J%"p# "7aC@B`GD"E/ZQKGK1"q#"u'@%@7aC BBDpG F'@(@F$@U'@70FzG'@$@PG%@u%@:FDDF*/u'@%@'@U'@zG0F(@$@PGu%@'@D:F$@%@DzGFD/u/@/@/@$`$#+@F@Gu+@+@F +@,@;FAG!FD/.JB{ }/xb4G{[@ZkGb#1@H_GG]]} (0@#/k///# ~^^~ (0޴8GG GG,e#ZHHGK@@":"Z#7B7#B7ACF @qGU@;D5@F@D5@PG@0F@QG1DDF";D8 )@%.Q0J'J%"p#0 "7aC @BaG0D/ E/ZQKGKu@1"q#"U@7aC BB:DpG!F@F@u@@0FzG@PGF0D ñu@U@@@:F@u@pG:D@0F DF e/eK$B   //,B4GHzD/ `//[@ZkG@b#1@_ / `"4Gq[/@ZkB4G%,Gr%H%D /`//[@Zk ¤4Gf[@Zk G^/G///E.e"EJRSJFGJQFB2///=GBD"%#)@. e#%"e"VJJ"7B//XKK #7C/E/Z[KGKZ# 7AC/@,@HH  7@/.PJJFB x D.JF 0 @ @? @ /GKG/ @%. Q J'J `"7@7cB`Fw.GE"PJJ""7B7BF"7BF %. %J%F' /// ///." WJJ6#7#C/?6 7#@/?"7B/e/eKG_GE. EJEFEF_GG//G//.G"%#JFF! &@//a/A#[zKgKz":"Z#7cB7#B7ACqF:F ! &@/! &DA".JEF@,! @HH "7B7@FG///`"y4G[/@Zk "4Gq[@Zk1@G@b#G_ %"E,EHX'D/f .PJJ" 7B/^`e."StJgJfBVG1`/=BD" M# ""Y9C9CBòe/[`KgKVB 7@B <@@ ð%.Q0J'JF@@P"7ABP"FB/.ðe.SwJgJB /G)ó=gBDE#E `%/ % "Y:K'K9#7!C e/[bKgKB  7A@ @,@HH  7@%.Q4J'JfB G//tGG]]} (0ݤ8@#k/# ~^^~ (0G GGG,e#ZHHGK@@":"Z#7B7#B7ACF @qGU@;D5@F@;5@PG@0F@QG1DDF";D/ ///3@%.Q0J'J%"p#0 "7aC @BaG0D& E/ZQKGK1"q#"u@@7aCB B:DpG@!Fu@@F@0FzG@PGF0D/ ///E/EKDC/'@ )/u@@@@:Fu@@pG:D@0F;DF?u@@`$#@ @[Gu @F @ @ @;FFAG F DtG/ ///%.e#@;J%JH%@/@@#" 7CC7B7@PG+@zGU%@;F5%@F%@W5$@F$@@G%@F0F$DD"DK)@%.Q0J'J%"p# "7aC@B`GD/E/ZQKGKu'@1"q#"(@7aC BBDpG F$@F$@u%@'@0FzG%@PGFD!ñu'@(@$@'@:Fu%@$@pGD%@0FDFu/@/@$`$#/@+@[Gu+@F+@@G +@,@;FF!FDE/EKDC_ /b4G{[@ZkG`b#1@ _GG]]} (0@#/k///# ^~^ ~(08޴@HG[ 1GGGG//,e#ZHHGK5@@":"Z#7B7#B7ACF@F @:F@/;@F0FU@@[G3F5@QGDF%"F-/3`E/ZQKGKE#q#"1"7aCB BpGF&e.SzJgJs"s#3"U@@7aC B`BFqG@pFu@@0F@zGqF@QG;FF////.J$B/  /U@@@@zFu@@qGF@qFF0Fu@@`$c@ @[Gu @0F @PG ` @ @{F F`FF///E/EKxGG/ /// ///%."S0J%JgJ5$B%B p#"7@7cC7BD%BD+BpG/B/\%BDFU%B$BsGF5%BpF$FD"DN/+e.SpJgJe"p# "7aC@B`GD.TJJs"s#"U'B(B7aCB`BDpG$B`Fu%B'BF$BtGpF%BFFD/#//U'B(B$B'BtFu%B$BpGD%BpFDF$cu/B/B/B+BFF+Bu+B+B,B{FFFpFD.JB /EG@  //I`!@CB @Gb4G/dZkG@0"4G0@a[@Zk"G" TGah1"[/@Zk (/C BGG@gZk@G`J6/0@Y6K G6?@.PJ>3@CCb#_4G`/[//@ZkGG]] }(08ݤ@HP#k/# ~^^~ (0G GGG{#?_/// $ .JC%@'@2F!F /"TKJKC"" CC5CCUCCC"7B7B[GF!FDF7BPG DFF5CGE#D/CC"+uCUC0D/.CFVJJCFD4#t#"7!C`CB;GC4GuCyGDE.RZJGJR"2"r"7!B`B@B3FAF!F D////.JB/ /CCuCUCCCCuCFpFQFFF5FF/G/ ////e"ZKKGKBBեB5BկB"S"UBBBs"7B7CB0FDF!GF7aBFFSF5BDC@FE"DBB"<UBuBF'e.B@GSrJgJդBFD#2"R"7C B@BGB2FuBGD .WJJ"p#0#7aC CByGF!G D///BBuBUBBդBBuB7FvGFUG6FF0F/.JdB /` 4Gw[/@Zk"4G q[@Zk"4Gq[@ZkG b#1@r_GG]]} (0@#k//# (^~0^8~@HPGC> GG{#_?  /TG .@" Q2J'J1"q"7cB7#BqFz /.E#YJJ'KuBBBFy#9 9#7cC7#@7!CFaG9D / /`X"4Gq[/@ZkGb#1@_C4GQ. EJXGF@H///G 1 1"b#Q/EKEG6@q.eJEF-@.J%D =="n_/+0.0J"%F  G="4GXb#_="8b#.J F/G/_G //G//G="b#X_GGb#GW ~_"= GP G"D.="b#DJD/.JF /#_G;$,$H %D  /u@@G="Db#/w_G#,H %D ="G4GXb#_G/G="8b#,H 'D //C_G/GGGb#/#_G/G="b#$,$H x$D //c_ b#G,H/ _4GGG(]0]8}@HP`#k//#CG^~^ ~(G G{#z_GG =b#/_Gb#7_G/GG]] }(0#/k///#_"^~^ ~(08޴@HGGG>GGGG0{#p.pJ/ `F_///GGG8b#_GGGG4G@xb#% ^+A/}` 0b#*_GG=8b#/w_& /G///b#B_G/Gpb#_Gpb#_Gpb#_G]G] }(08ݤ@HP#/k/// "4Ga[/@Zk G0b#_G/e//% b4GK I %sF /[//@Zk4G "a[@Zk/  b4Gc[//@Zk 4Gc[/@Zkfg "4Gq[@Zk/ "a4G[@Zk4G  "a/[//@Zk G| "4Ga[@Zk4G "q[@Zk4G  "q[@Zk 4G bc[ [@Zk 4Gc[/@ZkegQ/// "4Gq[//@Zk/  b4Gc [@Zk 4Gc/[@Zk&'GP. PJEF@t*@BTG`G4GHb`ZkP@@B4GHb///`Zk`@"4GGa[/@Zk`"P"TG ha>1"[/@Zk// ,GGA H </f///qB.J/F+/.0 B"FJ"CB7Gt/tKC@0 B"D4,4H0 B"C%@F .JCB0 B"GT/TKC%C0 BFqB,H0 Ba QB# B q@ CBFJ //ƢBC.8/JY8KtJ4G8?gB,rC{."H pHS`JpF{>&Ǣ2@.B/! "JXKy5HG?FRC,B.Z#H sHPJF>frCB@B;,/{#" CB;HXKy6HG? QB/w_///@@0@B QB.d/J[dKaHaGd?e/GGB/XK?%A y,yH/=`/// @ F@B,wH0@BDHD<e.J+ JǢ0BB0@B6/cJY6K#G6?EUC,H0B'2@.wH0@BPJF>euB3.3J0B grC.v;J0@BTJF>C8/8KGRC2,A2H2<G_G/ 4Gd[@Zk "a4G[@ZkGà#4G~^^~ (0޴8G@H>P^XGP.PJGGGGGG GG@yb#@EF//@)AӖ/b#_ӝGGGb#8_Ӎb#$,$H _ GGb#G+_Ӏ(GTGpzb# )AGTG (pzb#)AGG4G@yb#(Aii GG$,D"$H%D $.2J%FT FG.J؅F##@//KGc /FV/VKEC8@Gz@6,V"A2H'Hf@,H%D/: 9//. ." D0@""Fv"#UJ J "JBCF! V/.0@ZPKJGK BCF,@.EH@JH0@ @CD/ ..UJJ0@JBCF@f@.Q/"TJQKJGF[.[JEF@SF3@B&@7칝@@+ //// D"""a#K! F&.&1@JF/ A/TKF&1@!.0JF&1@,HD&1@/&1@@/ //A.AJ! EF@&1@//f@,@H"D/ ///.@@c @`DJc .B@Jc / c/%BcKc @c.@cJ@/GG4G@yb# (AӉG¤G4Gyb#'1@e@/,Af0@4Ge@[@ZkGyG//h}@Q/P.G""s0Hv4HP# yWI`:H'@FRPJSFp"P>.r&HUJF">/XKuSIG0#?p/[zK`Gx6Hz9Hp?0.Q&J2F P"0>.TJqPIF ">.t2HWJF #>,@HD<,FHw5HyXI "D.VJF}@>,@HD<//P.G'1@s0JRPJ"u0JSFP>0,A0H"`PI5D0<.WJF">BGGc`Zk//GG4G@yb#'AGGb#_ Gb#_GGG]]} (0ݤ8@H=P]X`#k/#G~^^~ (G$G{#G_ Gb#_GG4Gxyb#Q'Aøb#"_G/G/GG4Gxyb#C'AG b#;_GGb#_GG]]} (0#k# [TGG~^GGGu{#4GG#>>G H^GPG(08@c!AG] #k//#GGG~^GtGG# G^TG^G (H~GPXGGt{#08@`;!AG] #k//0#4G^~ ^(~08@GGGGG` >[@ZkGpb# "//_G//] 4GGwb# E//&A/ `G4GGwb#&A///峄DG4GGwb#/&A/ G]$EG] ](}08@P#k/[ ;G;tG8D!S#~^1"^~ GGGp{ P{@[/@Zk//Cp"tG"a@1"[@Zk p"TG"`1"[@Zkh"4Ga[/@Zkh"4Ga[/@Zkh"4Ga[/@ZkhG4G`G]]} 0#k///k///##~^^~ (GGG ///b# _G// G]G}b#] (0#|k///[#4G^~^ ~(GGGr >[/@ZkpGPb#"//_G/GG//"! TG= ݢTG4GGPub#,0#X F8ò/ /A4GG]] }(0#k/+#~^^~ (GGG<///b#%_G4G"xqb#TG//AG4GdG]]} (0#k//k///B?B#HSF~^^~ (G@G ۦGG4BwB\B|Ck///GGTG""Pb#_W/GGTGX""Pb#_O/GGTG""Pb#_G/GGTGH""Pb#_?/GGTG""Pb#_7/GGTG8""Pb#ރ_//GGTG""Pb#փ_'/GGTG""Pb#΃_/GGTGx""Pb#ƃ_/GGTG""Pb#_/GGTG""Pb#_/GGTG""Pb#_ @ ]@//@ GGC""tGPb#_ à@GGCtGh""Pb#_ GG""Pb#tG @@C/_GG]GPb#}p""TG] (0#z//G]]} (0#/k///#4G^G~^ ~(08޴@HPGGGb#G/÷_G// /xbGGX""b#Gs"HS"_GGGTGb#_x"GGGhb#tG1"_GGG4Gb#_ nGGGXB"GGxb#/[_GGG 4Gb#/w_GG4Gb#ַ_ VGGGTG0Gb#/__,`// 0@@# x\@Ck//D GGG B"GGxb#/'_GGGGtG8b#X""_GGGTGb#5_GGGPB"GGxb#/_GGGGtG8b#""_GGG""tG8b#/_GGGTGb#_GGGB"GGxb#/_GGGGtG8b#""_GGG""tG8b#/_GGGTGb#_GGG@B"GGxb#/_x"GGGG8b#tG1"_GGG""tG8b#_GGGTGb#_ӠGGGB"GGxb#/_x"GGGG8b#tG1"v_GGGX""tG8b#o_GGGTGb#_ӀGGGB"GGxb#/_x"GGGG8b#tG1"V_GGGX""tG8b#O_GGGTGb#_`GGGB"GGxb#/o_GGGGtG8b#""7_GGG""tG8b#//_GGGTGb#u_@GGGB"GGxb#/O_GGGGtG8b#0""_GGG""tG8b#/_GGGTGb#U_ GGGB"GGxb#//_GGGGtG8b#0""_GGGX""tG8b#/_GGGTGb#5_/GGTGxb#/ϣ_GG4GGb#/_ /GGG4GG`buAGGG4Gb#_GG]] }(08ݤ@HP`#k//B?B#SF~^^~ (GC@G4G;G=<Ѣ; 7B7B\BZCk///G /G C/G #/G C/G /G  /G #/G #/4G cG#GGtGkb#2A<d/G]]} (0#/k///0 //QG@rG `GG/5G/?p/G#GG]kb#tG(B]} (0#2//C(;G+ 1TGX F" #^~^ GG[a3[1"@ZkGtG]"sb#0"4V1AG]]G 0#k/// k// k//#GtG0;"^~G^~GGGCprb#^$A//G/=tGGGGtGGTGGtG . ! J//xFC ` .{ KQ J;F >///XFC0`@/,pJ0 B@HD<C.{JPJF>//xFC0`@/,pK0 B@HD<C.{KPJF>//Fa# /!.;JU&B8Da/dKXD C,p[K0`@! DHD</u&Ba#8 F/ ,HC8D ,dK@HD0`@! !/,C!"HqJD/,@H0`@! D<C,qJ@HD</C,dJ@HD<0`@! !.!J d@CdG)C,G@H"<4Gsb#/_!AG]]}#k///#G~^G^~ (0޴8@GGG#b#S@ "GG GTG@""Xa`[/@ZkGc/GGGTGb#_GGG4Gp#b#Q@GS/GG4G$b#+O@GGG4Gp#b#/Q@GC/GG4G8b#_ǰGTGƠG/b#& ''Ơ&BGǰ/e@ӴŠGG4GPb#/_GGDGdh G4G0Ab#/@ //Š/G4GGb#*_G4GGp#b#/Q@GG]]} (0ݤ8@P#k///k#TGP;"~^@[^~ (0GGHb/C\Zk BNGGGTGtG(b:kZkpBG?4Gxb/KlZk BG G6 GGtG(b)kZk"/P@4Ga[@ZkPG0b#0"/[_'//`BG4GGGGhb/AZk"GG4Ga[@Zk//0B@G4G8b}Zk,@H<G/0BG4G8b}ZkGG]]} (0@#k/Gk//#TG^~ ^(~08@޴HGPX>`G#GGGG4GG(b#G= G`_XbG GGr_"GGGb#xs"_GGGTG(b#_XbG GGr_"GGb#Gxs" _ G4G/`[/@Zk b//G4Gc[@ZkGbG GTGb#_GGGGTGb#g_Ӏ" G('H"GGGG!pX"`1"= @ ///[@Zk (bH¤Gh""GGc[@Zk GGGb#_ /XbGGs_"GGb#@s"_ bG4Gc[@Zk G4Gd[/@Zk ¤//G4Gf[@Zk bG 4Gc[@ZkG] ](}08@ݤHPX=`p#k/#TG~^G^~ (0޴8@GGG#Gp;"Gvb#G AG5""GTGb#/_G&(""GGTGvb# ATGGGTG""vb# A//4G /bGGt_"GG`b#s"B_G4G`[/@Zk GPb#G@Ӎ/GTG""vb#^ A//GGB"b" "y/GTG(""vb#N A//GG(B"xb" "i/GTG""vb#> AbGGB"@"s"Z//GTG0""vb#. AbGG0B"s"J///GTG`""vb# AbGG`B"s":///GTG ""vb# A//G4G B"b" ")/GTG""vb#A//GTGB"b"@"/GTGP""vb#APB"tGb" /GTG""vb#A B"tGGG"Gb#a_GGDŰD@//"G G 0G QG/@RG/_İG]]} (0ݤ8@P#k///*#~^^~ (0GGGGG//$"TGG@wb#1" AGGGtG b_cG]]} (0@#/k///# 4G^~^ ~(08޴@HP>XG#-0 * P &@GGGmb# /AG4Glb#/A//GTGPxb#,#//(AӀ$G"tGp C"1"[@Zk 8DG 4Glb#ZA/"tG"aC1"[/@Zkàb#G//_Ӏ"G "GtGah1"[@Zkà"GG0mb#0 =1AӰ"GGGGGP1"/@ZkGG4Gb#_G Gc""TG0ub#A//[$頰"TGG0ub#U1"RA4GOGGGG b#_GGG4G8b#_P/GGTG@""b#F_GG(""GTG0ub#A//TG/GGTG""0ub#A//4G /bGGt_"GGb#s"n_xG4G`[/@Zk Gb#G_GG4G8b#G/_//bGGu_"GGb#0s"N_GG4G8b#_GGTG4G ðlb#/A 0/ # 8 E //4G4G$G TGvb# 'AtG¤""f1"C[@ZkGGtG#xb#/'AG4Glb#jAGG]] }(08ݤ@HP=X`#/k///#{G^~^~s"޴>^ ~(GG#$]@GGGGG v_"{#_ӵ/0@GG G$ G/c`/// G4Gsb#xFFFF; .@`/8 G/ AGGGGtGrb#/A)@ @A?B//G 4Gsb# Aӡ @G GG )GtGrb#A/G)G?*//G)GTG@tb#A//)?0@)?b"tG"ka1"`[I@Zk$G4G@sb#$1@$ {AN//b"tG""ki1"`[G@ZkG4G@sb#eAG@GTG`sb#:!A$$1@$.//[@ G GN`/ )G4G Gsb#!DB  GV AGGGGtGrb#GA7 /`///G TG &@tb#UA/ 0@A KA/? KAYfA]" @RrA) 0`A2iGb#`_ɠDtGh"1"/@[I/@Zk Gb#G@//)?$C*1@A$C $à&1@$ðëGG@G`/// 'G4Gsb#x D D D/   GAGGGGtGrb#AG砪5@A A(G'GTG@tb#A//@bBtG""kjp1"`[G@Zk$G4G@sb#$1@$Aӆ//_ G GR`B/ +G4GGsb# DF  8FC GAGGGGtGrb#/A7 / ///G TG &@tb#A/0A A/? AY&A]" R2A+ 0 A2kGb#`_ˠtGg" P1"/[K/@Zk Gb#GV@//k$(1A$ ($à&1@$ð$G`/ 'b#x D/ //G_GGb#/////@/$c+1`A$cG///G]]}ݤ=] }(0#k/$C*1@A$C#^~^~޴>^ GG GGGGGG G (4Gx D8!DX!Dx!D=@G/`qb#/8  G/AGGGGtGxpb#/A@ A>//G4Gqb#Aӡ @G GG (GtGxpb#A/GG>&//G(GTGrb#A//0@`B"tG8"(Ja(1"@[H@ZkG4Gqb#AӋ/`BtG8"("Jh1"@[F@ZkG4Gqb#AGu@GTGqb#fAo/W G¤(`/// #G4G Gqb#!@u!@FA G/AGGGGtGxpb#/sA4 /@///GTG %rb#A/ 0 A *A/? *AYFA]" RRA# 0@A2cGb#`_'tGf8" 1"/ [C/@ZkGb#@c/ //// #Gb# x E # /_Gb#@cGG]]}ݤ=] 0#/k///#G2FtG~^^~ (0޴8GGGG GGGGG""0rb#GAG+b#//_"GG"!p"(1" G"d1"tG[@ZkGGGtG(b_ӸbGG4Gc[@ZkG[/GGG""tG0rb#AG;b#//K_"GG"!p"1" G"e1"tG[@ZkGG/GGGTGptb#A//G/GGtG(bG~_ӸbGG4Gc[@ZkG #@b#8 D/ G_GGtG b/c_GcGG]]} (0ݤ8@#/k///#G~^^~ (0GWGGGGG P//GGG`""tGpb#EAG+0b#_ӈ"0GGP"0!p`"1" /G`"Pd1"tG[@ZkG(bGpb#G_cGG4G[@ZkG/// #b#8 D/ //G_GTG b/_G/c//GG]]} (0@#k/C#^~>^ ~(08޴@HP>X^`~hGGGGTGTG,HXD@p ///DGc ///G0bTG4G "(B{[@Zk///kG@8D#. 0@iG eA#J#JAA$B!B"a.7B'B@FEFaJE4DF% /#  [@GTG@Zk/G#,@D.#Hc s$HRDJSFD>G///bb#"O_kG4G[@Zk1/@"4G$-I$I$=C-CIDAq* AA7 @FG*D [/@Zk//,"G4GHiD/[@Zk c G///b#"_GG]] }(08ݤ@HP=X]`}hp#/k///C@#^~>^~޴GGGG,H;1@01@1@2@7cC7B"BCBpG@@U@F8DFF"FDD/G^/ ///71@81@9@? 7B7C"C:@F @CC@F8`GFF //GGTG b#0" @ӷCN Q? " @B?"G@!0? $B2@!@D7ABG!@TG b#D F8"F// @ӲCGՅ@@@U@uHDDDD.TJF>.0@@c J G /GGTG" jb#vAGG]]}ݤ#/k///?B_B#D ^~(^0~8@H޴PX`>hGGGGG~G ///G4G(kb#p{AG//$,$HC / ///%.%J$Bq"!B7`BFuF"// %F .JF/ K /Ge#E/[KEG@, H.J F///="b#G_=GG .JBP"B7@BrFPF .J"BB7BFFG""TG(lb#/?AGGTG""(lb#6A//G/GTG""(lb#*A//tG/GTG""(lb#A//Gy/GTG""(lb#A//Gm/GTGx""(lb#A//4Ga/GTG`""(lb#A//TGU/GTG""(lb#A//GI/GTG""(lb#A//G=/GTG""(lb#A//G1/GTGp""(lb#A//G%/GTG""(lb#A//tG/GTG ""(lb#Ag4G[/@ZkG="b#O_G///g4G[@Zk Aw@"G\@LCk/E.EJDFAFG="b#0_G , H$@!"!@7 BQF!F.  e.eJ"dBaB7BFF/G="b#\_G , H$@!"!@7 BQF!F  e.eJ"dBaB7BFF//G="b#@_GgEGo4G// [/@ZkG4G(kb#AGKáAAGG0DTG8b# _@ G=GGGGb#!_GG=G4tGob#u AG)b#m_& E=GG& GGb# _G G=G4tGob#^ AGb#V_/GGTG8b#N_// GGGb#r@gG4G[@Zkg4G[@Zkg4G[@Zk/-I/O//g4G/[@Zkg4G[@ZkpbG4Gc[/@Zk@ CG ](]0}8@HݤPX`=hp#/k///#TG~^G{{#G A !D G] #/k///G]G #k//Gk//#TG~^G@v{#GA !D G] #/k///G]G #k//Gk//C#G^4~^ G ^G{# // _ =b# 4_GG]] 0#/k///#^~ ^(~08GGh{#CS_G//G&/"TGHb#!_Ӏ"GG4Ga[@ZkG/GG]b#4G^_Ӏ"G4Ga[@Zk}Gb#`*_GGG] ](}08@#k///#~^^~ (0GGG({#_G//Ga/D.GDJDJ ///EBGB"R"F7B7CBFF@.1"J_1/1KBTGb#'F# ://_@"GG4Ga[@ZkG5/G@bGGGb#_G$@b#//_cG4G[@ZkG à4Gb#%_@"GG4Ga[@ZkG/"4GGb#GG_<G4G@"a[@ZkGG]]} (0@#k///B?B#@F~^^~ (0GGGG/ K/#Gb#X D _G/ ?/GbGGGG b_cG4G[@Zk .ØG4Gd[@Zk&/4GG@b#GG<_<////DG@"G G0G/ G//<GG]]} (0@#k/#?BBG~^AFG[tG^~ (0GG& GGGh{Z"{@1"[@ZkGGb#8D< _GDD 4Gb#\_GG4Gmb#AGGG]]} (0@#k///#?BBG~^AFG[tG^~ (0GG& GGG{Z"{@1"[@ZkGGb#8D< _GDD 4Gb#_GG4GXmb#~AGGG]]} (0@#k///?BB#_F~^D^~ (0޴8GGGGGG/GB/@BGGD"GGZ@//`p"[1"@Zk"G"`1""G"`1"tG[@ZkGG(b#8D/< _GDD GGGb#_GG4Gmb#AGGG]]} (0ݤ8@#k/#?BBG~^AFG[tG^~ (0GG( GGG({Z`""H{@[@Zkb#G8D < _GDD//GGGb#_G//G4Gmb#AGG]]} (0@#k/?BBGGFGH{#/0G8 D <3/k///G4tG`qu# 5!//# ~^^~ (0޴8@H>PG08 DGGGGG / <p//l` C5@CU@CzG`b#f@G-_GG(""pb#TGGAG@IG""TGpb#G/AG//>G""TGpb#GAG6G0""TGpb#GAG.G`""TGpb#G}AG&G ""TGpb#4GuAGG""TGpb#TGmAGGP""TGpb#tGeAGG""TGpb#tG]AGG""TGpb#VAӨC8"G"tG !p"h1" [@Zk /#> // GTGpb#FG)6A)/ G?,8"tGBq"@1"[G@Zk 4Ge[/@Zk 4Gh[/@ZkGG4Gob#AGG4Gob# /A G8"GtG"!p" 1" [@Zk GGGGb#_ /GGGb#G_ TG8G#sb# /KAc`G//GGTG@""pb#A//G/GGTG""pb#A//Gv/GGTG ""pb#A//tGj/GGTG""pb#A//G^/GGTG0""pb#A//GR/GGTG""pb#A//4GF/GGTG""pb#A//TG:/GGTGh""pb#zA//G./GGTGX""pb#nA//G"/GGTGH""pb#bA//G/GGTG""pb#VA//G /GGG ""TGpb#IAtDGGGb#GG/7_4G GTGqb#4G////A4GGtGG40tb#AGGG]]} (0ݤ8@H=P`#/k///B?B#@F~^^~ (0޴8@GGG Q/0 8 D/C <G/; D5@CU@CzGb#5@/?`$// r_x¤$/$GGTG(qb# A/GG$TG(qb#A/'"f D1"@"D1"[tG@Zk G/// //G4GtGrb#8B AӀ4DG]]} (0ݤ8@P#k/#;~^^~ GGTGp{#1r_GG4 TG4Glb# //7A4/pb#04G__GG]]G} 0#k//# ~^G #k//04G8 F/ < G] #/k/// P 5@BU@BrF@G] #k/G] #Bk/44G G] #/k///G4Gl{#// A G]4G #/k///G]H #k//x[4GR"#~P^0[^~ GG "G8b-QZk4G#GG lb#A4GG]]} 0#/k///#~^^~ (0޴8@HG8{G{#c w//_G4G`kb#AB4Gb "/PZk4G##4GBbY X"PZk"G4Gb##8! D_MG< .JC/E///."JUJJDFAB"7BF/ /C_d/GdKD/$,@$"A1H'H! 7 @ Dd. dJC@F/G1@TGpb#6AG/4GGGGb#_DG4Gg[@Zk.JG4G@kb#/AG]]} (0ݤ8@HP#k///#^~ ^(~0GG{#x{#c  ///_G4Gcb#zAb#I_G4Gcb#sA /G4Gcb#jAG =b#_G4Gcb#^AG] ](}0@#k//#~^^~ (0GzGG///s`#.#J/o ///."JVJJdFaB"7BF/c /-`#,G#HU'@$@rG/@///#.!@"Q4J'J1"7 B!F .c JU'@$@CFGG1p@TGhb#AG Gb#/o_dG4G[@Zk,HXD//#,c `D#HX'D?C.c CJXGF/_.c JXF.c JXF/c KXG/C/c CKXGG_,c HXDG]]} (0@#k///({4G/?#~^G^~ GGs Peb#A"TG"a1"[@ZkGTG@qb#0"/SAb#///_G4G0eb#AGG4Geb#]]} 0#/w///k///;#^~^ GGh{#1/ B_Ӡ=Gb#]] 0#;#^~^ GG{#1/ *_=Gb#]] 0#H [#^~^ GG{#R >@///_ =b# ]G]] 0#p`;#^~^ GG({#1/ _`=Gb#]] 0#[C #^~^ GGR{#@//_=Gb#]] 0#/k///#(^~0^8~@GGH{#x{ >^cc /`_G4Ggb#AGTGx""pb#//A4G#(b#~_4GG ]b#G_=G4Ggb#<AG=b# ]}_G4G gb#/A G(]0]8}@P#k///#^~ ^(~0GGX{#8{#c  //k_G4Ghb#Ab#=J_G4Ghb#/AG] ](}0@#k///#^~^ ~(GG{#8{c B_G4Gib#eAb#z_G4Ghb#/_AG]] }(0#k///8k/X;#8FXF~^xF^~1 GGG ۦ$ 0;u/@`/1"0" "1"///0" "h1"///0" "H1"`TG[@ZkXG]]`} 0#k//x#C8F^~XF^ ~4(GGG @>CFP;//@w/ 1"P" @"`1"TG[@Zkx`G]] }(0#k/Fk///;#^~^ ~1(GGp{# _////pb#_GG]] }(0#/k///[#~^^~R (GGGG{#@/s_"G-"tG!p"1" [@Zk4GG0b#GGGT_`#/ ///G0G QG@rG/`3G/?GG]]} (0#k/{#^~^ ~s(0GGGG{#/`&_"dD"G4DBGG!q"1"/ ///[G@Zk"`G"``1""G"`@1"tG[@Zk/ G Gb#_ӣC@dD`GG]] }(0@#/k///@[#^~^ ~R(GGG{#@//_@"G`"tG!p ""/ [//@ZkGb#>_? C@aD GG]] }(0#k/#~^^~ (GGGp{#8$  /_P"TG"pa/1"[@Zk0@&`<GGb#X_"CGG@?"GB"0D8b# d Gl_GG4Grb#> HI A $Gb#/ 4_GG]]} (0#k///#~^^~ (GGG{#8$  /G_Ӱ"TG"a/p1"[@Zk0@&`<GGb#_"CGG@?"G(B"0Db# Gk_GG4G`rb# H A /$Gb#/ 4]_GG]]} (0#k_&GB/3@12vJ/' !1 @1/# ///aC@@7HS@.J/G`G TB/!1@ aC/Gk/."J/;G0@ SB` aC/Gk//4Gk//51B 1G//B`BaB7 HR1@B/51 @ B/Gk/R0 @B/@ B//Gk/4Gk//.V JF.T JF21B31 B4B?"7CB7cBׂB5BSFBGGGTFףBB UF8FGVFk//=~_G/k///21B"BB7@BB2F0C3FFk/?"31BBBB7`B8FtF@uFk/&&1B#?'?$""7B6B0B! BB7F!Fk///?"GGGBG Gk///=>_G/k///?"GGGB2B 7ABGk//=*_G/k///?"GGGBB Gk///=_G/k///N?"Q_"!0"p"1B`B4B"2BBB3F0C4FF/k///?"B/ CP.PJk///Gk#GGG~^^G#GpG B TG>tG >P>G>GG Z#GH^(4GGpeb#08@/A// bGTGGtGGGGH~ G(0peb#8@AG]] #k/#GG~^G^G#G0G`>H^TG> ~P~GGGGcb#GGG(4G08@A>H^GTGGGGGGG G(0cb#8@AG]] #k/#GGG~^GG# P0G^H~GGTG^ GtG(PGGXG e{#08@`iAG] #/k///#GGG~^GG# P0G^H~GGTG^ GtG8PGGXG[{#(0@`9AG] #/k///#GGG~^GG# P0G^H~GG4G^ GtG(PGGXGe{#08@` AG] #/k///P#G4G^~0[^ ~(GGG>@Gz[/@Zk//G ""b#_G #TGH" B!@qQ?@[/@ZkG8""b#_G CB@C#}Q@0@q cG]] }(0#k/0G /k///011 B0A!B  k// /k///p#H{@^~H^P~X`s"h޴pxGG#GGG4GGGd//#GtGQb#8 DX Dx D DS/// z@G/o à@u@F8<$/@<4GG8<Qb#/ @G//<GGtG Hb_G8GtG<$Qb#@cD#8 D?<GGGtGHb_G8GtG<$Qb#@G8GGtGQb#@8D<XDG xDD// GGG8tGQb#@4G/G8GGtGQb#@G8GGtGQb#@4GG8GGtGQb#@4G///HBG4Gb#GR"%_à<GtGGQb#5@G8D8/@<G/ GGtGHbF_cxD#8 D?GGGtGHb9_<dGGtG8Qb#G@<XDGxDDGG GtGQb#8//@4G/G8GGtGQb#y@G8GGtGQb#r@4GG8GGtGQb#i@4G///G<TG]"#G8b#C_H"GG(b#h1"/o_p//GGGSb#GG8EXExEE/;& //@8<$k@G8GG<GGGSb#a@2G8GtG<$Qb#)@G8GG<GGGSb#O@ //G8GG<$Sb#GGC@G8GG<tGQb# @ //G8GG<$Sb#GG/@<G 4GDh/chD`[//@Zk4G /HbGG4G@s"Gxb#G_GG@]H]P}X`hݤpx#k/B?B@#@F^~^~GGGG#Gl$G4G`Sb#!Df $D@Gb@4G/@//Z$GXGG Sb#/@bGG4G8 GGb#s"B_GDG4GRb#/@<Gxb#D()_G8TG<#Rb#@G84GOb#J@GG4G`Sb#4/w@8D?"xb#4GF(D"P@bGG_""b#s"_G84G$<Rb#o@8GG4GRb#<8f@84GG]]}#/k///#4G~^^GGpG[@ZkGx""b#R_G GG//! B ?G]] #k///P;4Gqk///#] B8 FX F^~^ ~(08GGGG4G @ [/O /// G`R"à@FBG`4G8R"G(b#V_G4G`[/@ZkGG""pb#_7GG//"! /4GG="E`GTGPb#/_GG4GUb#/AG}e ///G /BG4G(b#GR"_GG]] }(08@#k///#G~^^~ (G*GG0{#x_GG""Pb#_GG4G`Ub#jA4G b _  4G b_D@GG]]} (0#/k///#[~^4GG^~ 1@ GGw@GGR" ^~{# 0#///k/// 4G b////_4G b_ "4Ga[@Zk "4Ga[/@Zk G4G`G]]} 0#k/// #CTG^~G^ ~(0GGGGX;"@b#/#_tG b8DXDxDD ///o: G// $FuBF4F_GGTGx""b#_$tG b1Gx D DG/ q5`B8`F_h//GGGtG b__/GG4GtG b_W/HBG4Gb#GR"_N $GF@uB/G4GtG bG_GGTG""b#/_$tG b1G Dx DG q5`B8`F_*GGGtG bz_#/GG4GtG br_/$GGTGb# _GGTG""b#_G$GTGb#_GGTGh""b#_GG""b#TG_""b#TG8DXDxDD/# ///GG/G]] }(0@#k///GGTG`""b#b_G]] }(0@#k//GG]Gb# }TG""](0@#K///k///#4G^[~ ^(~08@޴HGGGGGb~@/azZk&@`@(BTGY@0b 汝@G/  @.8""@JD\Zk(BGX""0bTGC\ZkGb8DXDxDD //F GG Er`Fu`BFF4F_BG4Gb(zZk&@`@(B8""Y@ TG0b 䦝@.JGD\Zk(BGTGx""0b\ZkEGGbҠGxD 8FGG/_Ӑ//U@GGG8DGb_Ӆ/// EGGb2 Du @F4FGq_BG4Gb/yZk&@`@(B8""Y@TG 0b 䦝@/.JGDe\Zk(BGTG""0b^\ZkEGGbҠGD 8FGG/C_H//U@GGG8DGb8_=///G4Ggb#FAP@(BG8"" @TG0b1\ZkR(B%GTG0b*\Zk(BGTG""0b/#\ZkG4Ggb#*AP@(BG8"" @TG0b\Zk6%(BGTG0b \Zk(BGTGh""0b\Zkݤ(BG""0bTG[Zk(BG""0bTG8DXDxDD//[Zk(BGTG`""0b[Zk/(BGTG""0b[ZkG] ](}08@ݤHP#/k///3#4G~^G^~ GGGb#_(b#s_"4Ga[/@Zk"04Ga[/@Zk4G4GXBb# @G4G`G]]} 0#k/k///#G^~ ^(~08@޴HPX>`^hG#GGGGGGF @GC8DXDxDD3xBG4G#Gb#/5xR"_G0/xBG4Gb#GHR"_G&///xB"G4GGb#R"_G//xBG4GGb#R"_G //xB G4GGb#R"_G//GGTG="8b#_($GGDG4GVb# A( GGx"Xb#1"P_dG4G[@Zk¤4Gf[@ZkG/ $GGtG]hXb# ,! ( AG$ GGGG8Vb#/ ,, D,](AGb#/_G]GGtGhXb#/{ A"$ xb G"GG_"GGb# s"/_iG4G[@Zk4Gg/[//@ZkG/BG4Gj[@Zk G""GXb#_dG4G[@Zk¤4Gf/[//@ZkGl/GG//"! GGG*4GhTb#/A G""Xb#_dG4G[@Zkd4G[/@ZkdG4G[@ZkG?=GGGXb#GG0*] A//xb¤GG_"GGb#s"_Gb#_fG4G[@ZkG/=,*$ʰb#G_( /D DGDG4GBr[@ZkGG] ](}08@ݤHPX=`]hp#k///G ;TGPY{## ///;#4G~^^~ (GGGGq[/@ZkG//G""(b#7_G,/GG//"! GG4G$$C8Ub#$D//A/4G0G8Ub#//A0/0b#(P_(,GG]]} (0#k/G ;TGW{#///$Q#TG~^^~8@F (GGGGX@Fx@Fz @F ;"G@G1@b#_0$GGTGb# /׾_GG""TGb#پ_G$GTGb#˾_GG""TGb#;_G($4Gb#_GGG""b#]TG]} (0#/// BG4Gb#GR"_/G]]} (0#/k///GGTG ""b#_0$GGTGb#/ 掾_GGTG""b#/_G$GTGb#_GGTG""b#_G($b#4GF_GGTG""b#/w_//GGTG ""b#n_0$GGTGb#/ ///[_GG""TGb#]_G$GTGb#O_GG0""TGb#Q_ӠGGTG ""b#J_0$GGTGb#/ :_GGTG""b#/;_G$GTGb#-_GG]Gb#}TG8""] (0#/'///GG{#G///GGG ;X{#tG/P;#4G^~^ ~(GGGq[@ZkGG@""b#_G /G4GWb#/@GG]] }(0#k//'#4G~^^~ GGG {//_h"4Ga[/@ZkhG4G`G]]} 0#k///k///#G~^^~ (GGG{#_G4G b/_GG]]} (0#k//# #TG~^G^~ (GGGG1b#_G""b#TGGG]]} (0#/w///k///GGTG`""b#j_$G]G b]} (0#///Q$P/k///#GG^~G #/k///`G]G #k/,G G] #/k///G GG Y{#G"/AG] #k/#G~^^~ (0޴8G#GGGG ,Ѡ////(F bGG_"s"X@G/ @0@=@/`Pb#z_$Ơ/GG]]} (0ݤ8@#/k///?#4G~^G^~ GGGXb#_4b#_<@"4Ga[@Zk@"4Ga[/@Zk@"04Ga[/@Zk@"84Ga[/@Zk@G4G`G]]} 0#k///k///#^~^ ~(08޴@HP>X^`~hpxGGG#GGG=GG{# //_G/b#/_Gy/b#/_Gq/!1ABG4G7!@G`b#/ xR"_Ӑb#v_G` GGb#@b// GG>_"GGb# Gs"_$GGG GG8Zb#/0 $D/ ,//,/ AG4,DGG4GYb#@//A" Gb#G,h1"_G!/@"G4Ga[@Zk GG0""b#/_G/GG//"! GGG4GVb#+( @GG4GVb# @GG4GVb#8 @Ӏ]4GGVb#< , 4KG @0 GGGGXb#GGG/[Ab//GG_"GGb#8s"_Gb#_G/G4G G(GYb#/ JA"Gb#(1"_Y//G(G="b#TG@B/ˆ_GG G]DGtGZb# GAj G/G4G G[@Zk GG0""b#_5//GG//!  ?GGG 4GVb#/?@G4GVb# 9@GGGG$0 G]8[b#A4Gg[/@ZkB// G4Gj[@Zk GXEGb#L@G 2_bG G_"GGb#s"_$TG""G Wb#/'@28 G""Wb#TG////@&,*/ ///G TG""Wb#@8 G""Wb#TG@$  G/ $$$i ///,ʠ$˰/,$,j  D/@d drKdGG]] }(08ݤ@HP=X]`}hpx#k///G ;TG[{#///;#4G~^^~ (GGGGq[/@ZkG//G""pb#_G8/GG//"! G$b#(C(D,,4_44G<GWb#//k@<4GGWb#/c@4G8GWb#/[@84G0GWb#/S@0GG]]} (0#k/G ;TGY{# ///#TG~^G^~ (GGGG@;"b#/k_G<$GTG0b#]_GGTG""b#__8$GGTG0b# /O_GG(""TGb#Q_G$GTG0b#C_( 1@7@^ \@Ck/GGTG""b#:_X/GGTGP""b#2_P/GGTG""b#*_H/GGTG ""b#"_@/GGTG""b#_8/GGTG0""b#_0/GGTG""b# _(/>GGTGp""b#_ /GGTG""b#_Gb#4$^_/GGTG""b#_Gb#4$R_/BG4GHb#GxR"!_,GTGb#8DXDxDD/  G""ѹ_ðBG4GHb#G@R" _GGTGX""b#¹_/GGTG""b#_0GG""b#TG ///_G0$GTGb#_GG]Gb#}TGh""] (0#////GGp{#G///GGG ;[{#tG) //#;4G~^^~ GGGa[@Zk"4Ga[/@Zk"4Ga[/@ZkG4G`G]]} 0#k///k///#G^~^ ~(08޴@HGc GGGGGG@[//DGG[b#T$G4GAP"G0b#$/1"//_GB/bG4Gc[@ZkG""0b#/_G2/GG4G@Yb#/@GG4G@Yb#/@//G4GG@Yb#@GGGG]b#tG.APBG ?"Gb#R"*_Gb#__G/GG]] }(08ݤ@HP#/k///G ;TG(^{#///p;#4G~^^~ (GGGGq[/@ZkG//G`""b#_G#/G4GYb#n@4GGYb#//c@/4GGYb#//W@/GG]]} (0#k//G8;TGH\{# ///#TG~^G^~ (GGGGH;"8b#/k_G$GTGXb#]_GGX""8b#TG]_G$GTGb#__GG""8b#TG////K_G$GTGXb#=_ GGTGp""8b#>_G$GTGXb#//_GG]G8b#}h""TG] (0#*//GGh{#G///GGG ;0]{#tG/C#~^^~ (GGGGP#TGGHb#G //@`"4Ga[/@Zk #GGTGHb# /@//` 4Gd[@Zk`G4GdG]]} (0#/k///k///#G~^^~ (0޴8@HGGG#GGGr @GoGl/@GG4G`db#//;A"Gb#G@1"_GX/"G4Ga[@ZkGGx""b#/_GH/GG4Gbb#O@_"`,#GtG`Ib# P/&//#@  G4Gbb#7@ Ȱ 4GG0b#_GGGGtGfb#AbG_"G`@b#Gs"&_Gb#/7_G/TGG(G]]} (0ݤ8@HP#k/G ;TG8d{#///#@^~H^P~X`h޴pxGG@,GGG0GTG\b#F) "%@G("%TG\b#@ӀD/G///G@]H]P}X`hݤpx#k/G0""TG\b#@Ӡ@///$$G]"TGb#G/+ !//' _G,GEb#@GG0b#/E@G0G} D4G`eD[/@Zk///(砠U@$Eb#@G 0b#$E/@G//(砠U@O4GtG/G @ТA#~^G^~ (0GGGG 1b#_G!GGGTG@_b#AGGGGb_b#GDPb /AcG4G[@ZkGPG4Gd[@Zk G]]} (0@#/k/// k// k// k//#G~^^GGG @GGTGxb{#//AGDG]] #/k///#4G~^G^~ GGPgb#/A///"G4Gq[@Zk" 4Ga[/@ZkG4G`G]]} 0#k///G]]} 0#k/G4Gf{#O///k///pGTGGtF/`#~^Gh{#GWAG]G #k/4Gk//Gk//#G~^^~ (0޴8@G GGGGG@G///G|/DGG4G eb#//7A"Gb#GD1"_Gh/HG4Gd[@ZkGG8""b#/_GX/GG4Gbb#K@// `4G,cGbb#`/?@  İ4GGb#_GGGTGfb#AGG+ ("mb#TGABG G4GGhb#XR"_G"///GGGGtG`gb#AGG4G8mb#ABG4Ghb#G(R"_G //GGGTG@pb#^AGG]]} (0ݤ8@P#k//G0;TGpd{#///#^~^ ~(GGG>, ^0= ]b#F1R@ 0=b# ]1R@(xD@`4GGG]] }(0#/k///# ^~^ ~(08޴@GGEG//  ?/DG 4GtGb#7 #O_G// //GGGTG_b#A"GG4Ga[@Zk GGtG]"ݰ }pgb# "AGG4Ggb#AGGGGPb0`b#GAbG4Gc[@ZkGG]] }(08ݤ@P#/k///Gk/ Gk/DG/k///GTGh`{#////B?B#@F^~ ^(~08GGGG*///(PGG="TGb#]/@G//w_GDG]tGhb#GA=G4GpG [@ZkG4G`[@ZkGG] ](}08@#k/Gk/(G/k///GtGph{#/{///#GTG ^~(^0~8@GG>>"Gb#^-,pGC)`//'_GG]}GGGpdb#eA }4Gp`G[/@Zk bG4Gc[@Zk GG}G=Gpdb#/KAG ](]0}8@P#k/GGG/Gk/,G/k///GGG@d{#+///Gk/$G/k///GTGXg{#////#^~^ ~(0GGGG#% {#,G!/_0b#G//_= bG_"GGPb#GDs"/ //_G/4G// G]] }(0@#k///;G,/3#^~^ ~(GG>G{#C_0=b#/_$`_ 4G`bD á`@`@ 8D///4G// G]] }(0#/k/// k// k//#GG^~tG^"G^ ~(08޴@HGGGGb#:@11@21 @=3@7#B7CBbB4@2F"׃B@3FGa@4F8F5F //GGTG`b#"_ӱCN @"!@Q BG @!0 tGb#2@0D GAB @U@G2D]"¤aF1DG4D$D/p ///@=Ga@01@11@2@ 7B7#BBB3@F @cB@F8FFF //GGTG`b#"_ӰCN Q? $" @ B_"G@!0? DB3@!@D7aBTG!@`b#"D@FFG/_ӳCGՅ@@@U@GTGD`b#DGDGDm_////D GGGTG`b#^_//GG]"GtGb#/@Gg@///@G]] }(08ݤ@HP#/k///#GG^~tG^"G^ ~(08޴@HGoGGGb#j@11@21 @=3@7#B7CBbB4@2F"׃B@3FGa@4F8F5F //GGTG@b#" _ӱCN @"!@Q BG @!0 tGb#2@0D GAB @U@G2D]"¤aF1DG4D$D// .@//01@11 @=2@7B7#BG FBB3@ @FcB@a@F8FF ///GGTG@b#"_ӰCN G$"!@Q  B4@ @!0 7BTG2@1D @b#AB @"2DaFFG /_ӴCGՅ@@@U@GTG0DG@b#1DG2D3D _////D GGGTG@b#_ GG]"GtGb#@ӝ/01@@@ 7B @0FFD//GGG]"tGb#@'1@@@7@G'D @1Dp@D/?31@41 @7cB7B5@tFעB6@uFB@"@@vF8FwF //GGTG@b#"J_ӳCN @"!@Q BG'@!0 tGb#1@0D G!B @U@1DGAF]"3D4D$D r@//01@11 @=2@7B7#B BBF3@ @@FcBGa@F8FF ///GGTG@b#"_ӰCN Q? $" @ BG3@@!0? 7aBTG!@D@b#"!@D? $@@FFG/_ӳCGՅ@@@U@GTGD@b#DGDGD_////D GGGTG@b#_ GG]"GtGb#@ӝ/01@@@"7B @0FFDF@/G]] }(08ݤ@HP#k/G//#GG^~tG^"G^ ~(08޴@HGGGGXb#@G= 11@21@3@4@7#B7CBbB @2F׃B@a@3F8F4F5F/GGTGb#P"z_ӱCN G"!@Q B4@ @!0 7BTG2@0D GAB @b#2DaF!FX" //^_ӴCGՅ@@@U@GTG0DGb#1D0"2D3D /K_///D/$ ///0¤8//!1@01@1@ 7#@7B"B2@0D @CB@1D8`F2D3D//GGTGb#8""_//GV/GGTGb#P"_ӡCN Q"$" @ B_"G@!0" DB3@0@D7aBTGBb#X"DG@F D/_ӳCGՅ@@@U@GTGDb#DGDGD_////D GGGTGb#_//GG]"GtGXb#/@Gg@///@G]] }(08ݤ@HP#/k///#GG^~tG^"G^ ~(08޴@HGGGGb#@!1@@G=7 @@ F @2Dq@aF /GGG]"tGb#@!1@@=@7 @"GF @2Dq@aF/?41@51@7B7B6@ FB7@ @BF@F8GF/GGTGb#"f_ӴCN G"!@Q B3@ @!0 7aBTG1@0D G!B @b#1D"AFF //J_ӳCGՅ@@@U@GTG0DGb#1D"2D4D /7_///D/$ ///¤//!1@01@1@ 7#@7B"B2@0D @CB@1D8`F2D3D//GGTGb#"_//GE/GGTGb#"_ӡCN G$"0@Q  B4@B!0 7BTG2@F b#AB @"FpF0DG /_ӴCGՅ@@@U@GTG0DGb#1DG2D3D _////D GGGTGb#_//GG]"GtGb#/@=Ga@///01@@@ 7B @0FFD//GGG]"tGb#@'1@@@7@G'D @1Dp@D/?21@31 @7CB7cB4@ SFׂB5@ @TFףB@/UF8FVF ///GGTGb#"v_ӲCN G"!@Q B4@ @!0 7BTG1@0D G!B @b#1D"aFAF /[_ӴCGՅ@@@U@GTG0DGb#1DG2D3D I_////D GGGTGb#:_Ӆ/!1@01@1@ 7#@7B"B2@0D @CB@1D8`F2D3D //GGTGb#"_ӡCN Q"$" @ BG3@@!0"7aBTG0@Db#"BD" BG@F D/_ӳCGՅ@@@U@GTGDb#DGDGD_////D GGGTGb#_//GG]"GtGb#/@=Ga@///01@@@"7B @0FFD@/G]] }(08ݤ@HP#k/4G//G//4Gk// 01B;7B'#~^\B^GGC/k///Gb#Y_ Gb#_ Gb#_G@b#_4GG]] #k/4Gk//#!1`B`F7!@~^`F^~XaF (0޴8@H>P^XG#4GGGGGG{# ///{@`,G_Ӡ0Gb#_bGG_"s"GG4Gcb##@G//G/G///(, G(H!"K $@!@7 BQF!F /h.!hJ"dBaBC7BFFF/?h/GhK[hKh?GGTGb#$@bGG_"s" /0bGG_"hs"xD/G@b#G_GaHI@,@HD<///.JBP"B7@BrFPF!/0G4Gt[@Zk,/GGGTGb#R$@//($GGGb#TG 8 E (E$@bGG_"0s" /0bGG_"xDs"/G@b#GV_GGG]]} (0ݤ8@H=P]X`#k//`#GH^~P^X~`hp޴x>GG#GGGGGG@ @GG/G/$GTG]"b#G& 5$ Uw_ GG/,GGb#k_G//0GGb#a_GC"= !E4G q0EG[@Zk,Gb#$L_GGb#/ 0//$A_G4DG/(GGG4G\b#8D/@ G/G/,GGH$D$ //P."FPJDF@."JF/."JF0/"0K$G p/"pKD/,"H$D?p.pJE`///dF6@//."FJF ."JF/0/"0K$G ,"HD0,"0H$D/ P."PJDF@/"KFP/PKG`qK/,GH1"D</1,vqJ"A1H1"6D1<P.PJQ/ZQK5AGTG]b#Q?(cG@GhD`/@Өb @G_"Gb#s"@_@$GGH]P]X}`hpݤx=#/k///#G@^~H^P~X`h޴pxGGGGGG G///G/G/$GTG]"b#G" 4 Av_GG/,GGb#W_0GGb#/O_4G D$pDG [@Zk,$b#G>_ 0Gb#$7_G(8DG///GG4G\b#@Gu,GHdD%`///, DHDD@. JF/F. FJDF@. JF . JF// KGF/FKE@///DG6//f, DfHdD `F, FHDD/@. JFF. FJDF@. JF/ . JF/ KG,HGb$H/$.Q$J "F$>/.uDK PJ F>F.FJ_$/Y$K$?G@]H]P}X`hݤpx#/k///(XFQ0@BQk/#G^~^ ~(08޴@G#GGGG4G ,qG`0////4G/0%b# (_bGGG_">0b#<Hs"_0D(bG_"0b#XDs" ,%u @U @FG/ <_G(@b#XDP,<%_Gb#GB_ GG",$G<e_b#0,G/G@bG_"b#=Bs" %>G<_+/0G@b#/%<%_GGb#/_GbGb#=@G_" <ps"G_bGG_"0b#@ s"=@<_0/4/GTG0%]b#@//b <%>GG_"s"0b#0_GGG]] }(08ݤ@P#k/#G~^^~ (0޴8@H>PGG# ,qGGG4GG`0/4G/$xF(堀///Fz x8X G/q '/m ///IGTGX@G;@ iG/a`XF/]@^b#/@///% )GTG'@^b#/@///PbGG_"`s"/G ///PbGG_"(s"b#_G)/?,//G GTG@^b#Z@GTG! '@^b#S@///PbGG_"s"/G ///PbGG_"s"b#_G/,%b#_ӨC@G GETG@^b#00%F@///@ $)PbGG_"Gb# s"_G0%b#_өC@GG(ETG@^b#00%F@/@/// $PbGG_"Gb#s"_GGG]]} (0ݤ8@H=P`#/k///`#@^~H^P~X`h޴px>^GG#GGGGGG 4G ,1// 0Qz@GxTGGb#sr&p $E9@ 2]"6 s_ Gh$Gb#,F h_G0Gb#$fF s_,GFb#_G//0Gb#F_G"4G= AE qPEG[/@Zk///G$Fb#/@,%F j_Gb#;0//$&%F a_/,%b#FW_G//'0b#/%F/K_GbGG_"b#`s"_G//G@]H]P}X`hݤpx=]#k//(Gpb#({_Ӑb GG_"b# G(s"_,HGGTGab# @E/@0(//@ 0HbGG_" Gb# s"^_(HGGb#GG X@E@E_ӉD(HGGGGb#u@A@A*D =_ӉD(HGHb# XAE1@4H,/C_0Hb#G>_ %bGG_"G Gb#> s"q_/ @///G GTGab#@J_ @%b>GG_"GX s"b#W_ G(H 8AE@4H@/G GTGab#@//J_/ @%b>GG_" s"G Gb#7_,HGGTGab# @E/@0//@ 0HbGG_" Gb#^ s"_FGG(hGb#_ E9/`#@^~H^P~X`h޴px>^GG#GGGGGGG 4G,$/ 0D@GTGFGb# @]"O /'r_Ӱ" GGb# 1"T_G///G@]H]P}X`hݤpx=]#k// FGb"b#@,//k_G0Gb"b#/ Fa_,GB"b#_G 0B"Gb#////_G"= 4GAE qPEG[@Zk= Fb"b#@,%:_Gb"30b#/% F//_//,%B"b#_G!0B"b#%_GbGG _"b# s"j_Ӊ/bGG_"Gb#X s"^_}/(Gb# _ bGG_" s" /bGG_"G s" Gb#A_,HGGTGab# @E@0(/@/// bGG_"0( s">ðbGG_"0H s" Gb#_(HGGb#GG X@E@/_ӉD(HGGGGb#u@A@A*D/ _ӉD(HGhb# XAE/J@4H,/_0hb#G_// bG_"G s"GðbGG_"G s" Gb#_/@///G GTGab#6@//J_/@ bGh s"G_"GðbGG_"G s" Gb#_(H 8AE)@4H/@///G GTGab# @//J_/@ bG s"G_"GðbGG_"G s" Gb#_,HGGTGab# @E@0/@/// bGG_"0(H s">ðbGG_"0 s" Gb#e_ FGGb#G@(h//?_ E}/GGB"b#(hG5_ Es///P# X'^~`'^h'~p'x''޴'''>'^'GGGG#GG4GG@}@(24rD=/`b#//_G4G 4GRb#////o@ GGGtG4p]b#N@rGcG`"/'b#8 Dx D D DG G//K@= g/:` s8`_ HGG4Gb#_-GH$'GTG]"0b#G ! p_G/ GGGGtG]b#/@iG 4G@E'AE [/@Zk //GG'GtG]b#@砳///G_// G// //GGGGtG]b#@GGG4GP]b#O@@?!5@?"@4Gb# IECD/`/FD]"_H= BH"P""(bTG ?EH=/Zk//B 4GH"b ]Zk)@G"Y&Ay@$!1 @"@q@\<@C/k///$DG4Gdb#@ //@P@ BTGH" A(bk$D */Zk BH"""TG(bZkG4Gdb#/@P@ BH"TG A(b/c$//wZkD BH" ""(bTG/3@///kZk`GG4Gb#_&// BTGH"h""(bZZkD BH" ""(bTG@///OZkD BTGH"`""(bFZkD BH" ""(bTG@>Zk//~1/)@C BH" ATGG 0""-@,(bHD()Zk&)@C BH" ATGG 0""E-(bEIإDZké AC BH" G,G 0""TG(bHإD Zk/ BTGH"""(bZk@bH GG_"G"s"#///@bGG"_"H"s"///@b GG_"G`s" ///@bGG_"G0s"GGpb#_4G'!`㳇4 Ee/[@ZkGGX']`']h'}p'x''ݤ'''=']''#k/#^~^ ~(08޴@HG#GGGGGG?@2//; `$D@ b#G,_G,0Gb# $_GG4GD/%b#/,$/?_G0b#4G$7_GGDe`bG_"Gb#hs"_G/GG]] }(08ݤ@HP#/k///# ^~(^0~8@H޴PX`>hGG#GG4GG,=(//$C \CCk/G//'bG_"GGb#s"_(bG_"GGb#s" 8D/'_//GGG="TGHb#n_G?//GTG^b#XE&/! G/ @///ƠEGTG^b# & XE AG @@/Ơo8EƠ/i//4Gf//4Gb//GW//Z///&GGtG]H\b#X E/ 7/@G3GTG^b#/@////Ơ; EG]tG/ &H\b#/+ !X E/ G/@// &GG^b#TG/@///Ơ 8 E Ơ///4G//4G //GB?"0b#GR"_GbG_"G8 DGb#/# 'Xs"_/GGGhUb#tGG@/// 'bG_"Gb#Hs"_4G///G=}"8b#Gz_0G4#// TG0pG4G[@Zk4G""xb#I_J0#,TG( @ )Ahi)A4Q?A[@ZkG""xb#6_7/04@0,#4Gb#a!@A0@G(#$$g`F!`4/._4GGGUb#tG,4#e@@E@,4#GGb4GGb#hAH As"_,0@,G ]G(]0}8@HݤPX`=hp#/k///#4G~^^G#G@4GC///,p/;`(97$B\B3C/k///b4_"s"//G///q.0 @ 2@qJ1"dB"aB7BFF/`/b4_"s"Gb#/_///G///G]] #k//,04GGtG[ #~^^~G (0G#4GGG(GUb#/<e//`$s`F/`//@ %bGG_"Gb#xs"_/4G,G4GUb#4%1@a@,@ @  $1 F /@,4C`@@@ (//(GG]]} (0@#k/Gk//P#H^~P^X~`hp޴x>^~GGGG#G4G@  ,1 0Q@e";1`CwbC@\|CtC/k///@bGG4GPs"/ @bGG4G0s"///,@bGG4Gs"///$@bGG4Gs"///0@bGG4Gs"///(@bGG4Gs"///4G//4G//4G//@bGG4Gs"/@bGG4Gs"/@bGG4Gps"/@bGG4GPs"/GG@}"b#G_,#GBa $B^ @\B8Ck/@bGG_"hs"g @bGG_"Gpb#s"GG_B//(@@@$DG0D/O8D/K4G//: -/d4q`BB/&///`F`F/`// ĢGGb# ֢X_ //G_//d4q`BBG`u[4G@ZkGGG@bGpb#@_"Gs"_ `/GTG]"0b#G8D/$$ GU 1S /j_///(g G/:`///GTG0eb#XE  G@///*k' EGTG0eb# +// XE/ G/@///k 8Ek/ //@BG?"b#GR"_!hG4G LE@E/[//@ZkF`(/8///LGGTG0eb#X@E  @///&% @EGGTG@ l0eb#/`KX@E/ u@/ 8@E@/ //@BG?"b#GR"_/ @bGG_"Gpb#GXs"_V9/(@]8D 8@ED) /&///l x`E`(,///)!),)H!"$@!@7 BQF3F?//  @bGG_"GGpb#s"_G %G4GGb#j_ӆ D/, //,G! ""0eb#TG XE/@8@0%/N /// )/F I//@)@ )< ) )?7G8TG ""0eb#@//0,/GTG ,0eb#@//,E@//G TG'0eb#@8' $* $% `E /G TG<`E0eb#@//J_ 8@bGG_"s"G@bGG_"s"^///`@bGG _"8b#ps"_$zG 8`E@bGGy`b#8_"0s"{_$//gG|/EGTG ""e8'0eb#/3 //k@.0/Y/// l`/Q //K L @G $;GP/G0TG,0eb#F@@bG5G_"Gs"+G8TG ""0eb#6@//%0e#`/GTG +0eb#*@//k$G$/G0TG+0eb#@@bG G_" s"pb#_G$/G /@bGG4Gs"GGpb#_GGH]P]X}`hpݤx=]}#k/ #4GH^~GP^X~`hp޴xGGG#GGb#_^ GG ab#TG/W ,//OM/@J$%G]"TG b#G$ !" h_GGb#G_C,$GGTG ab#@= @G4GDPB %rD [/@Zk@ݠ8D/,G0""TG ab#/@G//8""TG ab#@ ,0bGG_"`b#s"_ /4G //0BG ?"b#GR"_GGH]P]X}`hpݤx#k//Gk//#G~^^~ (0޴8@H>PG_@2Gu"@"@4GGGG[GU@G R,G0$M /// D4GG0b#E GG_,Š0D////GG &GtGHb#v_ GGGGGGb#A_hD G4G[@ZkƠ/0% /$ŠGGGGGGG fGb#_)D? /GGGtG b_DGG]]} (0ݤ8@H=P`#k/#~^^~ (0޴8@HGGGG#G 0// GGGS4G^b#/@G//$䳷/G///%,G%H!"; $@!@7 BQFAF /e. eJ"dBaBC7BFFF/?e/eK[eKe? Gb#[_(b GG_"b# @s"X_$pI%,A%H0D%</%.%J$Bq"!B7`BFqF? /GHk/(Gb#xD 1_(beG_"GXb#&s"_$ZGDG4GU^b#5@GG ""b#c_$K/G///,HG ;@@7@ DD/.c Jp"BBC7`BFeFEF//KXK? Gb#_(b G_"GXb#&s"_$pH#,A#H0D#</#.#J$Bq"!B7`BFqF?c /GH4Gu[@ZkG]]} (0ݤ8@HP#k//#G1~^{#GR _G]4G #/k///#tG^>G0;~ ^^"G0j{#@G] #k/#[G~^^~ GGGR" ?"{#/_G /G4GDG #$ctGfb#0"j@$G]]} 0#k//#G^~ ^(~08G5@GGG G/0dGGb#0D}_=0$$/@GTGpcb#X"e@@TGDGpcb#0"]@DG4GGXb#S_GGPb#G_GG@b#_}]0d@DG] ](}08@#k/0PGx@F@(PC/@#^~>G{# 3_=8D$G] #k/#~^^~ (0޴8GG#GGG{#p(p]aBUaB`B`BFFF"0 G 1C_$$8 D $4à//// $CGb#(c_/$$8 D/ $Ơ/(#X!FBA <# àG 4GcR"xb#R_7/, b#/_GG b#>D 0<#_G b#///0!D/ <#_GbGGb#_"<`s"m_$bGG_"b#8D(s"<__$G]]} (0ݤ8@#/k///#G~^^~ (0G4 GGGG,1 0Q,@/4G GG$ tG,Gcb#("/J@0GGtGcb# "B@0GGtGcb#(" ,//6@0GGtGcb# ".@$G]]} (0@#/k///,Q#^~ ^(~08GGGG @0q ?"{#8[".`G/_GX/82 4/#0dGTG`42b#/@0//G?",`Bb#8dR"`_G;`BG?"b#4dR"_G2///@GTGdb#"@@TGDGdb#"@DGGpb#`_GG0b##_GGG4Gb#_GGb#G_=GGb# D+_}`DG] ](}08@#k/B?B#~^D_BD^~ (0޴8@GGGGGG `G b @GZ#8 FX Fx F=@ F#`GG/@///J G_GGGG b_? GGGG b_GGGG b_0/ GG/GTG0@'db# /@!% @?0B%cDBd GG/G'TG "db#0@ /@ e @%0 @A$@ B AG]]} (0ݤ8@P#k/k/// #F h^~p^x~޴>^~GGGGGG@ /// /GG"dD# "C0"GPݲ= g',b#_ Gb# '0/'//_ G /r ///`#T=//TG 'GTGGb#`GX=\] ""/w_P= G !@d]` `/ GDGh="]"b#( "_( Gh}!/+G"b# G G* '_/G TG 0A-db#!/@ A/? QA0A A@} 0 A 3Ak!/T``Xݢ DzG\d=Gb#*4G~_GGh]p]x}ݤ=]}#/k#G^G~^ ~(0GGGb#Œ@ CP"("GcD0bLq "@1"%H2CaDX@FG[TG@Zk "pGTGGhb#G@1"8_XGG(0"Lp "H2C`DYB/ G]] }(0@#k//G]] }(0@#/k///#G? ~^^GG#/ //PZ#/6@TG4GTs3S TG~@bGtG >P>GGGG4G4G{#H~`Pb#(08@=@@"GTGGtGGGG (4G9#H>0G`Pb#8@%@G]] #k///#~^^GG#/0! /! T"GtG> ~(H^GGG4GP~XGGTG L{#08@@///@ 4G G]] #/k///#~^^GG# /0! /! 4GTBG4GtG ^H>P^>GGGGG4G4GO{#(08@@//@ 4G G]] #/k///#~^^GG#/0! /! T"GtG>8~H^P~GGGGG4G4G8K{# (0@/{@///@ 4G G]] #/k///21B31 B4B#7CB7cBׂB5BSF~^0"^GTFףBBG/ UF8FVF ///G0;GTG{#_ӲCN? Q"""!A@!0" B"0@3S@G]1DaB B3DAD] #AF/k///P# TG^~^ ~(>GG0@ pGGؽb#*` ' $R / @Т1B/ϔ_#$! @B#$G=TGȱb#~[_CB #0D/ C!ABB #BBCG]] }(0#/k///# TG~^^GG& " # B @P !ACP?@@RAB P//@GP{#/Z_" !!F@b0pB0B "!!B"GG]] #k/0#TG~^^~ G7 GG PGb#/0@p.`,3tB]B1jBU_/#$! @B#$cssBcGWB?"TGb#Z_CB "D#  B @ #B"@#G]]} 0#/k///0#~^^~ 1"(0GG" GTG{#P8@F@$.J/ b_ #GGb#4G D A@$#4G1A.AJXAF@0B  0C A/AKDDA"Gb#/a.rJGTG@9_,D$ D"Fb#HDDsj$.2J $TG(_,D$ D"Fb#HDDb-$.2J $TG_D$ ""DU,HDD/O$01"0D...DJJ/J@FFF2WBJ4J6J TFKVFDDF///$# YZ#Yd/$,.dK HD D%H HJDDD?&&"1""'@BCG(b#1qB7wBC5BSBR"7F8F8 4G/_4//$ -///@BG4G@b#GGR"|_GXd`$.,%".."[J@"H 1"JJ@Zk$TG I//! 1C$0@BC.J/$4G,HXD00 B0 P 0B  0CD/DKTGb#n_$GG4Gb#,HD/ /@$TGb#,H/ ///S_GG4Gb#5@G]]} (0@#/k///P#G4G~^^~ (R"0޴8G@G$0GG.J"B/K ///#G"b#8 D T/TKDD@/`.J/GTG/ _,D% E"Fb#HDD/S%.2J/ $TG/_,D% E"Fb#HDDu/+%.2J/ $TG/_DG% "D"/c,HDD^%.e..%JtJ. FgFJ1W"JF 3aJ5נJ3FJ5FD%F /tG% %/e/,%K !GaK9!K'DH! HD!G D //TGE..EJ JCFD2@JEF"C51@@@@7B`F8F /'_'7@?#$?${#Z#;@B @! yC@FF`BG4GGHb#R"_Gd//$G%!%@ @ Y///`BG4G`b#GGR",_àGXf`$.,%".."[J`"H 1"JJ@ZkTG4GðD$cc,H.4G"$.JF t.uJ"XaF/`â0BòTG/4/4K/4G4 "d,HD/ T,AHX!D C0@BCTG/.JG]]} (0ݤ8@#/k///#4G~^^~ (0޴8GGGGG/ p8`F/`.J///.$ "d"GJFFFF$/!K\G>F8DF#0D/o $ 9@d/pKFF/g/// bD.SJXFPF]@..$/JJD/D !KF WH'D7JDK! HDDDDtGd"e..D.J FJ0JgFDJ3`JDFF //TG.$/J $KFD5נJF_#C!1@@@@7 @ DD/&?&:@_"&&"1"6@QC3@"BpB2F0FBG4GGb#R"_G.//BG4Gb#GGR"(_`àG/Xf//`$ . ,`".."[3J" H 1"JJ@Zk4GŰd,dH4GE$,$HG]]} (0ݤ8@#k//#0BG ~^G JG@XG .uPK0"GTJF>///&aJG0" vBDP/vHZPKVG &WbJG0" tBDaP/tHZPKTGP?R@CBE/rJ.0@B4ABDpJtJ6QBBFFvJ xHWJ" FF"#>wJpJ".:CB9CB2DBzJyJ F1"GG'GUJZ#9#F>,"@HD"xPK<.`JWJF v K>.TJFCB>.UJF>/ @//rJQ/2@BF"`JZQK1"@GQ?_G] !B #k///[G4G{#PR"_G]G #/k///0.rpJ4GQ0J2F0>G] #k/GGPB{#P.RRPJs0J4GSFP>/k///#= B8 F ~^^~ (0GGGG4G+@// < $Pp@0.0 p#0J"=F ,HxDp,{HwD`G4GGCBGGb#GG R"_///}@$#/ 0.""0J"=F p.tJxwF`.JFGG4G؈b#^0@G""@Ds\<@Ck//BGGG R"c//4GGj4GG#fbGGs"S"S//GGBPb"K///GGB b"C///GGB(b";///GGBhb"3///GGBb"+///(G4GNb#8D #/ $,/Z@G$//GGBb"///GGBxb"///GGBb"R"Gb#p_ /4GGGb#@G]]} (0@#k/#G4G~^^~ (0޴8G@ GG1GGG  F`Xb#^G / BP"" (b//iHZk/// Ģ.6 J"F/6/!K?D IJ B(b0""/QHZk ."J#F8,6H?D  B(b`""/=HZk$.#"J9#F 9,8Hx7D ,HD$ dDG%SB1SBTGb#ǎ_ĠGGb#&&/_tG$G(b#A Ҡ G/ !/^"//G81"G GtG!Hb#u^"G81"ec %#@#@ %0 $$0BG"G1"GXb#_ G]]} (0ݤ8@#k///# G$0#~^^~ GGG P{#-_4GG/ "GGb#`1"_ G]]} 0#k// k//C#;4G~^^~ GGGa[@Zk"4Ga[/@Zk",4Ga[/@Zk"04Ga[/@Zk(c4G/` [@ZkG4Gb#P_G4G`G]]} 0#k/k///;#4G^~^ GGqG[@Zk"b#P1"/_G/GG//"! / b4G" 40B83G]] 0#k///{@#TG^~ ^(~s0GGt >^`8"H[81"@ZkPb#_G/G/ ]=Xb#CRr ccRrBC _GG] ](}0@#k/#G~^^~ (GGGG ;{#1"_GV/"tG"!p"1" [D@Zk("/30$!1 @ @\<@+Ck//"GDb#1"_G1G4$GtG@pb#-Y_)"GDb#p1"_G!"GDb#81"_G"GDb#1"_GGb#9_/G /@d`($  ,$@ G]]} (0#k///#G~^^~ (0GGGG {#x;1"r_G'ð"8GtG@"!p0"1" [@ZkGHb#/_0"GGb#P1"/_G /GG4GOb# @@GG]]} (0@#/k///@[{#tG^~^ ~R(08޴@GGsGG @"G[1"@Zk//`G^/GGGTGb#.P_"CGGtGGb#x1"I_GJ/Gb#_GGB/=GGTGb#1W_GG6/G4GPb#G}@G4GPb#/w@GGG4G b#qV_GGG4Gb#_ 4GpG[@ZkGGGŰ4GPb#$ %%$@%cFQ@ӴGG]] }(08ݤ@P#k/#X;G~^^~ (GGGG1"{#_ /GG5b#/S@GG9b#{@X"Gb#(1"/_ /G4Gd[@ZkX"Gb#G1"_ GTGTG(5b#Ý@0,G4Gd[/@ZkX"Gb#0 1"/_$( ,㳟//G (4G $,XG\`㳬㳰㳴d[/@ZkX"Gb#@ 1"_$( ,48<yTG84G<4Gd[@ZkX"Gb#1"/_$( ,48<㳸㳼]TG㳸G4Gd[@ZkX"Gb#1"/_$( ,48<㳸㳼>/8¦TG4G Cc CdCxbdC֢bòh{ cCHr hp"lctp!/ t/t㲀GPDHLPTCCG]]} (0#k///#4G~^G^~ (0GGG b#/{@ G/b#_GG4G b#q@G"4Gq[/@Zk"4Ga[/@Zk"@4Ga[/@Zk"04Ga[/@Zk"4Ga[/@Zk"4Ga[/@Zk"4Ga[/@Zk"4Ga[/@ZkB4G@"rCB1D [/@Zk"4Ga[/@Zk"4Ga[/@Zk",4Ga[/@Zk(G4G8b#//7@"P4Ga[/@Zk"X4Ga[/@Zk"T4Ga[/@Zk\"TGGVb#!@`GGTGVb#/@t/ ///d4G[@ZkG//|/ ///e4G[@ZkG//e4G[@Zke4G[@Zke4G[@Zke4G[@Zke4G[@ZkG4G@b#/_eG4G[@ZkG]]} (0@#/k///8#4G~^^~ GGp"[@Zk"GGb#(1" _G/ BG?"/EZkGb#/_Gb#_G/GG]]} 0#/k///#~^^~ GGGH"{#3@GGxb#]]} 0#//k///#GGH"~^G7@LX@@@@P@@ 9D GG] #/k////k///# 4G~^^GG`/[@ZkG]] #/k///PGG4G@p// [B H6H`C41@UBUB5F4Gõ5BG0@?@rCF41@VB/PBBFk/#~^^~ (0GGGGH"1G_LGA@@ PCA:@F$Dd! Aa ///H#0CTGC# HCHB(Br4GQBPQ?B/[G/>@Zk// "TGa[@Zk"Gb#1"_pHCPB@HCL#PC7H#D%B9!J61 BU` CVBGQ BFVB?///0V5B"lpV<T6hvVX`VPt6Ph6ltVxVd(V,D6HLV\v@<V@X6\`Vpv6T7J BV 6$V064v8(,V0468VD6HvL|vB@/v51B"V vB$(,v0V4v8_E@E@0 Bd $e %L#G]]} (0@#k///;/k///;/k///;/k///[B4kW#G4G~^^~ GGG  D28 D PZF/@Gb#/p_ "4Ga[/@Zk "44Ga[/@Zk "84Ga[/@Zk "@4Ga[/@Zk "(4Ga[/@Zk "$4Ga[/@Zk G4G`G]]} 0#k///k///#G4G^~^ ~(08޴@H~GGGGGGG@F / @}@B// @B@G `< Jb#/G@<G<qGo//0#GG4G Jb# @00Gb/"G4Ga[@ZkP"G "TGaP1"[@ZkGN/GG//"! G4GG#4GGb#/@G4G0Gb#////@44G GGb#/@8//G4GGGb#@GGGTG,Eb#@(/,(GGG`Lb#GtG$@D/'@Gb# _G/GG]] }(08ݤ@HP#/k///_#G@;"~^TG^~ GGG0,G0H8,D,D-D8.D'`Ib#// G/7 ///@2 1GG bH""Ib#TG@/'( &/GG b`""Ib#TG@/p /GGTGX""Ib#z@ "/ /GG bP""Ib#TGm@/H /GG]]} 0#/k///Gk//ۦ#TG~^^~ GG vx"[1"@ZkG#0"TG¦a x"1"[@ZkG///Gb#_/G /` # #   G]]} 0#k//ۦ#TG~^^~ GG v"[1"@ZkG#,"TG¦a "p1"[@ZkG///Gb#_/G /` # #   G]]} 0#k///,P#TG^~^ ~(GGG>@<GCLb#/3@0cGTG=Lb#/`<//&@/GG]] }(0#/k///Gk//0GTG L{# 0/ //Gk//Gk//Gk//GG1,P#TG~^^~ (GGGG@0GXLb#@//(#GGXLb#TG8 D/ 0c//`0/@GGb#]]} (0#Gs#/G]]} (0#/k///@#GC8^~@^H~PX`޴hpx>^~޵(G GGGG/@RABbs "4G,[@Zk"C0""0TGa[@ZkG$,(} GG4Gb0BGG$H0/s ///`C 8DtG0,=TGb0@2,B1BCs @ @G,=0[/@ZkC0@E.xH"GpUK$#$"EJD.WJFtIxqH  >$,A5H0D$.WJF>e.eJ5/D{HG" D/qpJD"aI" ZDK [G{vHD?$/Y0K1G$?/XKG?D/ZVK[GD?e.eJDyH$"$ #.xI"{I" TJ F>.tIWJF>D/ZAK[GwpHD?d.SuJtFd>D.RPJWFD>e.eJ///@@U@5@8D[G@(F8FqH0E`}<F $/Y$K1G$?e. eJ ek@G 4G_@" TG[ 1"@Zk(G4G8"Hb#///+@(< %,G%H"0B"tGG(b#/)_ = !v?H FF =///D.sJD RDJ SFD>.J /yJXK G?@/@K@-pDKLI  E= . Jv$J} . UJ F>.Jt$/{JY$K  ;G$? , H/h//@D%"5נJ@E. TGQJ'FF+/@D"e#.%/8K tGJ;KF'GG4׀JF///@DE#" .%.2@J. G"J5JF'FJPFF0JF0JF8E/s`41aBaB#dB7BFF i/$_#&_":zB& ֵ" `B?&UC7wB@1"FBDVG"tGG0B"(b#F)_/GtG"HB"G(b#=)_= = 0vJ?F?F 6/d.t$JD! SdJ tFd>.J! ($/zJY$K :G$?a/aK$.rJQ$J!  2F$>a.aJudJ`.! WJ F>/K d/`K[dK!  `Gd?.J/?@e.eJW//k"TG [1"@Zk(G4G8"Hb#///@(< %,G%H"0B"tGG(b#/(_ = !v?H FF =///D.sJD RDJ SFD>.J /yJXK G?@/@K|@-pDKLI  E= . Jv$Jq . UJ F>.Jh$/{JY$K  ;G$? , H/\//FtG@#"7@CG(b#:DGP E.EJ0B"(_= !v?H FF=D//D.sJD RDJ SFD>.J 5/yJXK G?@/@K,@-pDKLI  E= . Jv$J! . UJ F>.J$/{JY$K  ;G$? , H/e. eJ//D.qHRDJ QFD>e. eJ//d,CdHd<0G8]@]H}PX`ݤhpx=]}ݥ#k/%CG tG 8D 4G%!GB0/,=07@4,C9CTGx B,=$@[@ZkC0@rE.EJDDD@KU@5@G'/// úU@5@@[G:D @8FE d.tH SdJ tFd>.J///@9@F/W: ø]@FF/4e/G"tGG0B"eK(b#'_== 0vJ?F?F#//d.t$JD! SdJ tFd>.J! $/zJY$K :G$?a/aK $.rJQ$J!  2F$>a.aJudJ`.! WJ F>/Kd/`K[dK!  `Gd?.J/?. JkF//w@@@@@G 4G'D%#e#").E/8K%, GJF[K0HGGG'D7JF7JF%..DE"4׀J tG"2JJ'FFF1 J5F /%/D TGe#8K;K'GG&? _&"8`E"R"!aB7wB4oBS#2@BB/@6D4D/o //11aBaBdB7 B5F;Fe j"[TG1"@Zk(}G4G8"Hb#/`///K@(}< %,G%H"0B"tGG(b#/'_ = !v?H FF =h`///D.sJD RDJ SFD>.J X/yJXK G?@/@KO@d-pDKKdI  pEd= . Jv$JD . UJ F>.J;$/{JY$K  ;G$? , H/. J//G "HB"tGG(b#/&_ //GtG"0B"G(b#&_= = 0vJ?F?F 6/d.t$JD! SdJ tFd>.J! ($/zJY$K :G$?a/aK$.rJQ$J!  2F$>a.aJudJ`.! WJ F>/K d/`K[dK!  `Gd?.J/?@.JW2//j"TG[ 1"@Zk(}G4G8"Hb#`///@(}< %,G%H"0B"tGG(b#/K&_ = !v?H FF =`///D.sJD RDJ SFD>.J /yJXK G?@/@K@d-pDKKdI  pEd= . Jv$J . UJ F>.J$/{JY$K  ;G$? , H/. J//D.qH RDJ QFD>.J/.wdHd""{IGGd!q4HD" VJ F>$/vKKY3K;G$?,@Hy2ID<.UJF>/XKG?.J///$,pdHGd#vJ$"D# sHA$H 0D$<.a:IUJF>D.RQJSFD>,@HD<.Jz//.udHG"spK""aHTJ F>D.t7IRPJSFD>,@HDP^X~`hp޵xGGp ["GG @Zk" (""TGa[/@ZkG/#,GG G 4G G G 4GGtGG#HG // b'@B1Q@GCTG 1@s @G[@Zk///@$,GvHr"" {K$H'D/ .UJ F>R/ZSK[GR?2.rwHQ7J2F3>.VJS"sIF>d.dJ///'DpH2#2"r/gIr"xqH [rKR"pGr?.TJFgI>.VJF>r/[sKgGr?d.dJ/$DuH""#2.gIr"tIysI Q2JR"5F2>.2"xIPJF>r/[vKtGr?.UJF>.WJF>d.dJ/`//X$DsH""'r/pVI2"t5I [rKR"yrHsGr?,GH{ID</XK G?R/ZQKxI[GR?.VJF>.WJR"F>d.dJV3/!DpHtGr"# r/u3K"4GR#" qI[rKpGr?,tGtwKGHD<.rKPJFV">s.SwJtFv>.PJF>d.dJ- /g2H XKR"G?d.dJ"r,CrHr<///G]]} (0ݤ8@H=P]X}`hpݥx#k/⦀TG8""w[/@ZkG/GK{#4GGC///{#/k///G8;TGxN{#k///8;#4G~^^~ (GGGGq[/@Zk"G" TGa1"[/@ZkG@/GG//"! 4GG4G$0CXJb#0D1@4G4GXJb#*@44G8GXJb#////@84G(GXJb#/@(4G$GXJb#/@$4G@GXJb#/@@GG]]} (0#k/G8;TGL{#/// PTGX@F/i@#~^G^~ (0GGGGGGGLb#@GGG@""TGb#_.GJJ./XDG%FG@2@tGb#`_G Gh""GtGb#_GDG%F2@GtGb#_G G`""GtGb#_G ,H/G%F2@ GtGb#_GG@""TGb#y_GGGTGb#Ҁ_G]]} (0@#k/0QHG 1@B@\@Q #~^[^~ (GGGGCk//GGTG""b#_G$GTGb#/_GG""TGb#_$$GGTG@b# 斀_/G($0b#X_GG]Gb#}TG0""] (0#{///GGTG""b#r_G$GTGb#/c_4GG8""b#TG////__G4$GTG@b#a_GGTG""b#S_G8$GTG@b#U_ GGTG""b#F_G8$GTG@b#/G_GG0""TGb#9_/G]]} (0#/k///GGTG""b#&_G$GTGb#/_4GG8""b#TG////_G4$GTG@b#_GGTG""b#_G8$GTG@b# _ GGTG""b#_G8$GTG@b#/_(GG""b#TG/_$$GGTGb#/ _/G($GTGb#_GGTG0""b#/_Ӛ//GGTGP""b#_G$GTGb#/_GG""TGb#_$$G0b# ($_//GGTG@b#_GG0""TGb#_pGGTGP""b#_G$GTGb#/_4GG8""b#TG////_G4$GTG@b#_GGTG""b#_G8$GTG@b#_ GGTG""b#v_G8$GTG@b#/w_GG0""TGb#i_0ðH3tG`ux1"k///GG{#G///GGG8;M{#tG#~^^~ G#GG///0! /> TGTG "tG~ ^GGP^GG(4G01"Db#4GH>0G8@//@// BTGGGtG >G(^P>G4GX^GZ#H^TGGDb#08@@ C4G @#G]]} 0#k//#~^^GG#/0! /  :1 BKC\\CCk//;X! /;0! /;! / ; //;! /;! /;! /;! /;! /;X! /;8! /;! /;8! /;! /;! /;! /;X! /;0! /;! /;! /;! /;! /;p! /;P! /; ! /;! {/;! w/;! s/;! o/;`! k/;0! g/;! c/;! _/;! [/;x! W/0; T//;P! O/;(! K/;! G/;! C/;! ?/;h! ;/;8! 7/;! 3/;! //;! +/@; (//;! #/;! /;h! /;@! /;(! /;! /;! /;! /;p! /;P! GtG>T" ^P^GGG(GG4G4GPD{#08@H>@ 4G G]] #/k///#~^^GG#/0! / GtG>T"H^GGG (GG4GGC{#08@@ 4G G]] #k//#GG~^G#/5! /& UT5$ @l:  D|//@TZ/G>4G ~GGTGA{#H^P~G(XGU4G>08@u@G] #/k///#~^^GG#G@"! / BT"$@l:  D|GTG> ~H^P~>(GGG4GlBp"A{#08@=@dG]] #k//#~^^GG#/0! / GtG>T"8~H^P~GGGGG<{#4G4G (0@/ @ 4G G]] #/k///#~^^GG#/0! / GtG>T" ~(8GGtGH^P~GG@>{#X`4GG0@Ҹ@ 4G G]] #k///#~^^GG#/0! / GtG>T" ~H^P~GGGGGD{#4G4G(08@/@ 4G G]] #/k///#G~^G#//0! / GTG> ~P~T4H^GGGGG4G0<{#4G(08@/c@G] #k//#~^^GG#/0! / GTG>T" ~(0GGtGH^P~GG={#X`tGG8@2@dG]] #k///5#~^_'^~Z# GG>G l :D t``x4GDG%b#tGtG(""(@G%b#tGG( ""8@X"GtGG%b#(<1"@@G]]} 0#k/k0,0"0H8-Dp/qK%F 8)D0"p/qK%F  //`/`K1" "7B7#BF// //D `0. JD+D`0. JD /`/`K1" "7B7#BF/ /! a#"7cC7#@aG) 0.0J `#7cC7@`G! , H / %D `/`K" 0"7#B7B0F/ , H!"7#B?9,@/]/@?4Gk//Gk//hp#G^~^ ~aJ(0GGG^G/3`H///PPG/ {#FP @ @/#@{dF/`P @ @/ F/P @ @/@{dF/`P @ @/? //A:@ !0D@ //LC@BTG/@PH# 2BRB) LCzQ_B[/@ZkGGGTGPb#_L@@7HL BTGG4GL#Hr[@ZkGGGTGPb#_L HCP#=0@@BA@0BABH!G]] }(0@#k//PP#G~^^GG@GCH"8[GtGX;@z @  1"[@ZkHH"/ G0/.1@GPb B BTF/@///!1 @B51 @A3@ B61BUB71BVB81BWB!1CXCY3@H" B/ HB//21@B0BUSB BHBG]] #k///#4G~^^~ (GGG,`![G@Zk4G?,pG[@Zk//7GT00///G]]} (0#/k///0C B rB/_ht1BP!BQ@TG[@Zk1C BhD,TG2NpT[V$J3CDQB@Zk///0TGGGTGb#_ (,P#TG^~[ @^ ~RB(GG>G,PQ_Bz0[@ZkGGGTG0(b#//_G /0C(B@0@$(#G]] }(0#k/(0G /k///0011 B(0A!B $k//$/k///8<P#TG^~[ @^ ~RB(GGG><PQ_Bz@[@ZkGGGTG@b#//__G/ 84Gb#pG@/@B_ @R"_ӬCG@#0@A@48#G]] }(0#k//80G /k///@011 B80A!B 4k//4/k///P#TG^~h[ @^ ~RB(GG>GPQ_Bz[@ZkG#Gb#TG @0@G7 H#_ ///#=A@0@!#CG]] }(0#/k///0G /k///011 B0A!B k///k///P#TG^~[ @^ ~RB(GG>GPQ_Bz[@ZkGGGTG@b#//_G /C#A"@0@B@CCG]] }(0#k///0G /k///011 B0A!B ?" !k/?"!k///#4G~^G^~ GGG$b#*_$GTGxb#0!.!JTG /_ GGb#]]} 0#/G]]} 0#k/#TGTG~^G^~ GGG$b#_$GTGb#0!.!JTG/ _ GGb#]]} 0#G]]} 0#k/(0#~^^~8 F (0GGGG1 xD.$0AG///.J//$B!B X!F7@FD4G  [0B,Z#H0@?[GGTGTG(b#r_$c[G//AD//$0.0J41@@@7BtFuF@/GG4Gb#0@_$,H11@@@7 BFF?//(cG0b#=`B `F/&@$,H$#!.J$DG@b# @ 1@@@?"7@ @ DDDG]G]} (0@#/k///(08 FA #~^^~ (0޴8GG (G0ۤ//etG@"[(C 1"@ZkG_GG4Gb#K_$GTGb#0!.!JTG _/(#8 D/?G//G]]} (0ݤ8@#k//Gk//$cc.J///E #G~^G^~ (GGGG ;"{$0 A{@[a@Zk(#G"d`0 @ 1"[@ZkGGb#?_$Gb#$   @Y@ G]]} (0#/G]]} (0#/k///$0#~^^~ (0޴8@H ,GGGGG"G H$D/ `/pKuB8 D`# @/[KOG@pB Q p@C QG`/`Kb#D@$GTGb#0!.!JTG /?_Gb##_$8b#/ $#!!BGY?@/ Z_$$  , HxDP//0@@8b#/$G/ $#GQ11QBY?B/ ///;_$,H 7!@ $H$@ñA @9 @"QFSF@$HBP@ /@9@$H 6F@5FP@ G@G4G(b#F/k_$,H0AxD///GGG8b#_G$,H xD (0 @ (#0 B#/// cG b#P`Bc PB .JD/;@$GTGTGb#,H//_Gb#_$G8b#$ @Y@_$-I%!xD/9///0@@8b#/ $G/ $#!!BGY?@/ _$D@G4G@(b#,H 7!@ $@@G$F/_$,H0@xD///GGG8b#7_G$-I xD '0 @ '#0 B#///GGG8b#_'1@!@ 7@@@DD/,///BG4Gxb#GR"_GG]]} (0ݤ8@HP#/k///?&&(@_"&&1""1@A3@"2BtBEEG/0;4Gqk///#[~^^~ (` R"0޴8GGGG{# 4G//_G_/"tG"!p"8 1" [D@ZkGG4G0b#r_G/GG/G4GDb#k@ӈ"@@4Ga[/@ZkG//GGTGb#*_G.@.GG"sJxJ#q@tG@!Q@41@PBR@Jq#K@@SFuJ"@>.WJF>c/[cKqGc?a.SaJuFH1@a>.VJ>DoZk( @GŰG]]} (0ݤ8@#/k///$0#^~^ ~1(08GGGG,HD?P0@C7BCF`0\\C C/k///0///,///(///$///TG//tG/////G/////`(#8 D .1"JBBP"C7@BFrFF/////GG4G@b#_G4G0b@ "GG"tG!p0" 1" [@ZkG$G@b#G4G , HxD/{_GTG```[@ZkG/+#8 D/ X//\# hC @pc0BG`tGG R"b#N_d㳭0BGtGb#GG R"_d㳣//0BGTGb#G R"_ә$"Ghb#G(D/_G8b#G_ӊ/0GGGb#TG@@ Dr_GG8b#_$GPb#$   @Y@_$"GTGPb#%@`""@' ,]_F H AF] ,3HC5Ja1 HF ,6HCaQ H8vKG , HC`qH:^K@G]G/^GGGTGb#/_0PbD8$,%"e"""H D/,.JF(E.SJOFG#@.JF.JF/K@%#@7 CYG%G4G//@/0BGGb#G R"M_4GGGPb#_G]] }(08@#k//0#CH^~@BP^X~`hp޴x>^~޵GG?@zGG 2BG#GG(b#=4G U@B(=G_N","4G,_!a[@Zk=(=> GGtGb#]")BG//_G/G ݤ"CPDC¥%B&B0D'BFFF0D C08=@///$F@=GG&"/C" :D@#K#xF @.@JDF@.JuB8F/ /:K/G3 `/fKxD)@///#7C3`JC//"B@3`JB//3`J'# C3C PaB&. uB&JsGxD_u@@dGGG(b#O_Gu@@[///&" , 'HxDM@///SsB"7BsB?.B DtBJ3GxD"7B9`SsBsBB/', tB'HSFxD#-7CSsBsBC". tBJ3GxD `7@SsBsB@ '.tB 'JSFxD"7BSsBsB G/B GKtBxD3GGGG(b#_Gu@@11aB? aBaBݰ 7 BdB2F4F/ ///BG4Ghb#R"_/&&!aB"'?'"ֵ"6vB5@8xB9#BC6D8D?G/GGG(b#_GGhATG `b#/_A /"0ݤ$BtGn] D:"1"[@Zk="Gb#3@G0GhATG`b#D/(,H_ABG4Gb#R"_/(G4G;b#G0@B@GGGGGGGbx_GG'1@//!1MA0LAhA 0@ A3FM /.D  "r#J Z/yJ0A@F"XKR"G?F/FK qGKK@r.0ASgJqFr>.JC.xJWJ0A F>&/&K9 ,q KGH0A D<f.fJ .`.uvJ0ATJF>.J%,gJ@H0A A D</? A /F/FK vrJ`.0A AUJR"F>o JAGGTG[/@Zkz GlG4G[@ZkQ//GhA4G;b# 0A@E.G!@AsJ!,@GG !ATGREJSFE>o JAG[@ZkU G`@iA/O///',H.""&@G#h#("E A'HRHJDs(H' ! SFH>..JWJxJ""F>'/,:K@He;KD <.H.Js1HRQJSF ' ("H>..JxJWJ@F>G/(/@K{HY%K;G(?.H.Js1HRQJSFH>////.,&1@ 0 AJ@H eJ!D</0 A iA .tGa)KP JF >//b8$BtGn sD]"1"`[//@ZkG="b#4@ӱàG4G;b#0@ð( G@GGGGGGGbK_G G'1@㰘/!1MA0LAhA 0@ A3FM /. E "r#J)![/yJ0A@FXKR"G?I/IK)!N@,sEK0AR#GHD<).)J)!C .w6JTJ0AF"> / K9,eK@H0A)!D<,H/.qH)!0AUJF>.J%2/`J0A A)!Y7K G2?/ A/i/iK)!urJ`2.0A AQ2JR"5F2>_o JAGGTG[/@ZkN GlG4G[@Zk%// hA`)J8D,FH0AD</GhATG`b#_A&LAo AGTG@/ JAG[@Zk" G=(GG]"tGb#%B/_GG =C'B%BD)BDDDhA.PJ>G/GGGTGb#_GGH]P]X}`hpݤx=]}ݥ#k//#4G0^G~8^@GG#C =] bP_G0]8]@P#k//#~^^~H D GGG DGmCGGZ8@Gg@`/@///.0`C rCJ1"$@A#!@7@CDD/4CG@O//GK//TGb#/ :G/_>8D/G:/$#G!.J! F/04 pG`.J%D( ///G4G`b#/+U_G//4c#8 D (c@G4Gb#/l_G 4cG4Gb# //k_Ӡ@/4GG]]} 0#/k///C#G4G^~^~޴G>^~^GGGGGGG@+b#G .JXFM@Ӆ$,$!"$HCUASF/E@///.wI0@ E@VJ"F> / K)!UACsIDD/4.Q4J3F4>I.IJ0@@)!"UAC{IFF/XK0@@"G?),)HUACwI)!0FF.UJF>)/0@@")K)!UACXGG"a@F@4G@[@ZkGG GGTG@b#_G$///BUACGFGB]"iZk& //P@jGTG B@G[@ZkG@0@!.rIQ!J2F!>i.iJUACF)! /GGGTG@b#_G @ .P J >GG"TGP)b#u@GGGXEI-="GGP)b#TGIIC/b@/*1@!1@@U@7CA7#@GGAE GtGb#0DG2D]"4 _01@11 @2@3@7B7#BBB FcB@ GF8F FFGGTGPb#"_ӰCN? Q?"K"!aA!0"@B"1@3sA tAkA2DaB0BTG3DGb#F0DGR"+D /_ӫ@)!  E<//$,pH 0@A E GAA$H 0D$<).)J)!CxHF).WJF 0@A GA >)/)K)!CaH {E`,@HD< . 0@A J GAC)! 3FvH . 0@A GATJ F>.JC)!YG?b{ GA>JA4G JA[@ZkGG GGTG@b#_G8///BGG]"hZk!/PAAhGTG @ kAG[@Zk G@ 0@A$,pHA$H0D$<).)J)!GGGTG@b#_G @,FH<GG"TGP)b#@GG]]}ݤ=]}#/k///$0#^~^ ~(08GGG {#$   @Y@/6_$ . Jp" B"UB7cB7BFtFpF7// .J#B6#V#B7C7#C7AC`GGUBB@GTFGD/G%@"B(2@tG(*b#Q@$#GCGTGb##%B# aGeB /;_/G4G bt@G]] }(08@#k///$P#^~^ ~(0GGGC>@{#$0A!!ACY?@ _$ .J+/D. DDDJF/!.!  J/KFA/! AK @$.$JQG .! J / D.DJF.!  J/K.JBB6"zF7 BBqF6F/  /Gb#9_D4GG]] }(0@#k/$0#^~^ ~(08޴@HP>X^`GGGGG{# $   @Y@/[_GG="TGpb#_ӡ@@@31@0D41 @7cB5@1D7BעB6@tF B@"uF@G@vF8FwF/GGTGb#@"_ӳCN @"!@Q BU@ @!0 @@1@0D F!B @@4G1DF08"AF3D4D5D ////91@:1@;@ 7#C7CCbC0@:G @B@;G@8 F0GF //GGTGb#@"_ӰCN Q? &" @ B_"G@!0? FB3@!@D7aBTG!@b#`"D@FF>G@/g_ӳCG@@@U@GTGDb#DGDGD@U_////@D?GGGTGb#F_7䪝@0@b# @$àG$#!!BGY?@ _$C@ʠ&,&HX!D *0 B */ 0B @ .JGPb#D/_GG="TGpb#!_Ӫ@@@GAE0Dr?$#GGtG)b#1(1$B~@GG]] }(08ݤ@HP=X]`p#k/#^~GtG^"^~޴>^~GGGGG@b#_01@11 @2@3@7B7#BBB FcB@GFG 8FFF //GGTGb#h"_ӰCN @'"!@Q  BU@ @!0 X`"2@1D AB @2DaF0D4D5D1 ///61@71@8@ 7B7BC9@F @#C@F@8@GFF //GGTGb#h"_ӶCN G"!@Q B3@ @!0 7aBTG1@0D G!B @b#1D"AFF @/o_ӳCG@@@U@GTG0DGb#1DG2D4D @]_////@D- GGGTGb#N_//#]CqH 8@E@.PJ0@F>GGTG]"FBb#U_@]G]"G@b#tG@@Gr_G/_ //GGTG":b#ɬ@ӫhB@4Gj @[@ZkG GGGTGb#_Ӛ0BGG]"8eZk//!1@51@6@ 7#@7BB7@5D @B@6D8G7D8D //GGTGb#h"_ӡCN Q"'" @ B_"G@!0" GB3@0@D7aBTGBb#"DG@F D/ӡ_ӳCG@@@U@GTGDb#DGDGD_////D5 GGGTGb#_//+ P@lG ATG JAG[@Zk G'fArH 8E!.0@Q!J2F!>GfAGTGb#_@GG@b#]"tG@G/_G}/fAG&,A&H&</GGGTGb#6_GG]]}ݤ=]}#/k///$P#^~^~޴>^~GGGGG @${#   @Y@//_GG="TGb#4G"B_G/!1@01@1@ 7#@7B"B2@0D @CB@1D@8`F2D3D //GGTGb#"_ӡCN G&"0@Q  B4@B!0 7BTG2@F b#AB @"FpF0DG @/_ӴCG@@@U@GTG0DGb#1DG2D3D @_////@DQ GGGTGb#ޠ_//G䪝@0@b# @$#G/ $000BYBGC_]CpH 8@E@ ,A H0@0D <GTG8b#="$BG_@$Cʠ&,&HX!D *0 B */ 0B ݢ@ʰGb#.JD/r_G@G="TGb#_Ga_GG"TG5b#5@àB@4Gj @[@ZkG GGGTGb#=_hBGG]"p.dZk//!1@51@6@ 7#@7BB7@5D @B@6D8G7D8D //GGTGb#"Z_ӡCN Q"&" @ B_"G@!0" FB3@0@D7aBTGBb#"DG@F D/?_ӳCG@@@U@GTGDb#DGDGD-_////D] GGGTGb#_//S䭝@0@b# $#G/ $000BYBG_ P@lGTG A JAG[@Zk G?dArH 8E!.0@Q!J2F!>GdAGTG8b# _@$͠&,&HX!D -0 B- // 0B ݢ@ͰGb#.JD/_GGTG="b#/_GU/dAG$,A$H$< //GGGTGb#z_GG]]}ݤ=]}#/k///`# ^~(^0~8@H޴PX`>h^p~x޵G#TGGGGG$= , HX$D$D/@G//K (b{[G4G@ZkGGGGTGxb#-_A$$tGb##hG `BY@/_GG4Gxb#%%% 4G%k!!!!_GGTG="Xb#V_// G///01!A!A$A) 7B FF//"4-A"6,A33ABBnBtFvF`&E$G/{o@ %C [@GGTG@ZkGg=@s0I8 D P.0@RPJSFP>G@GTGb#&_@$#0.0JX!F a0`Ba A// 0B B8b#0/0KFG_$ , H//((b#=B/ G//_$ , H$b#$#Q11QBY?B GG_GG="TGXb#_ G$#b#/ $000BYBG3_GG="TGXb#_lGGGTGxb#n_ӂ/@H-HI=-IB`I//AؤE8D3 0."0JxF.]GR"="b#]_GH-HIxEhBG(R"GGb#|_ GGGb# 8E/(c 8`E/`_oG4G[/@Zk] - I!m-mI&EH¥ GGGb#_n!///GG4Gxb#_GG4G@7b#:@GGGTGGG`b#q_C///HlG4G[@ZkGGGb#W_GG ](]0}8@HݤPX`=h]p}xݥ#k///P#4G(^~G0^8~@HP޴X`h>p^x~޵GGG#$psGGTG=],HXD/ PGݴb#_ /DGGG'#ݴG4Gb#_ӨG4GG tGGxb`[@ZkG// G="GTGb#_$#ݤ@CG!C8 EA.AJ@0DaF /$FGb#/ $âG֢."JxFgz_DG1Q@kI TG @G [@G@ZkGA0@.qIPJF>Z/2Q@kGTG @@@G[@ZkG0@tGA0@AtG$.rIwJ0 @A0`BA G{IAQ$JtI2F$>.VJqI0CF>A/ZAK[GA?.PJF>,FHD<&/5Q@kGTG @@G[@Zk//GGGAGtG`b# _@/Gxb#&@G0 0Q@kTG @8D/G @ [@GG/@Zk///gG(Ơ0@A0@BAtGwI`2K0BAtG G&,&H0CAAzI$DF/.VJF>r/[rK`Gr?.sIPJF>.`IWJ0@F>5/Y5K:G5?///A0@;.s;HQ;J3F;>G4G;b#///(ƠG/ӫ@GGG4GGb#G _//G G/!@0Q@A 0@ @3FM /.@Er""JJ!yJ[/0@@FXKR"G?J/JKJ!O@2.uSK0@Q3J5F2>.JF/yJXK0@J!2""G?j/jKJ!9r.uHSqJ0@ uFr>J/JK/.xJWJ0@J!F>*/*K% 2.s KQ J0@ @J!3F2>/ @@/.JJ!{J/0@ @XKR"G?k@GGTG[/@ZkG"G4Ga[@Zk*/*Q@kGTG @@@G[@ZkG(ƠAF-!.0@Q!JFIrH2F!>G4G;b#3@0& G4GG;b# D (//G%@G¤GG4GGGb#[_fG4G[@ZkA @0@TG.qI Q@ APJF>kG[@G@ZkNGA\@@AM/-,D.""*@AM#d#$"DA-HRDJEs$H-  !SFD>..JWJxJ""F>-/,:K@Hf;KD < .D.Js1HRQJSF - $"D>..JxJWJ@AF>M/$/@K{HY&K;G$? .D.Js1HRQJSFD>/@///.,*1@A0AJ@H!fJ D</_0AAn/pI[nKpGn?t///$B!BU!B ݤ2D5!BA3DG5DDzK& 8F/BC%E/.0@WJF>GAGTG@b#_@*Q@kG @TG @@G[@Zk///G4GݡGAa&J8E-MI0@ E=GATG@b#_@.Q@kG @TG/@G[@ZkG$C4G-IXD*0 @* / j0`B j AGb#.J E//// _$áGb#$àFƠ&FAY@_GGTG="b#2_$=@CG-I-@*DDb?C%E!AP.p"SJDF@".$1@"FJ"F.J$1@"F 0/0K$1@"$G p/pKD$1@AN-GGGb#JNIN=$àƠ&,&HD/_G+/}BGxb#GDHR"/&_G /GG4Gb#_//GGGGTGb#~_/GGGb#_GG(]0]8}@HPݤX`h=p]x}ݥ#k///GGG{#[-///0$`#^~ ^(~08@޴HPX>`^h~px޵GGGG>GG/ $P z0pC "Z:[CG Z#0b#@_$G4GTGb# , HXD/G1_ GDG4Gb#G/'_ӰG4G`[@ZkGGGGTGb# _G%%%GGTG="# 4G%k!b#!!C_/// G/// 'E01!A!A A 7B$AFF////A/1!A!A,7AEFH<㰙$A)D /"4-A"6,A33ABBnBtFvFo@ B @GGTG[@Zk///oG0@b#]@ $/ $#Q1G1QBY?B/ ^_GAr!I8D/!.Q!J0@2F!>/GAGTGHb#_@$#0.0JX!F a0`Ba A// 0B Bb#0/0KFG_GG="TGb#_ G$#b#/ $000BYBG_$#0b#/ $  00@ "  @G ////_GG="TGb#_TGGGTGb#B_$///"--A?"00AA),AB+A E E GGGb#_G//GG4Gb#3_G/GtGGb#_GG] ](}08@ݤHPX=`]h}pxݥ#k///$0#^~^ ~(08޴@HP>X^`~hpGGGGGG $p  B {0pC "b#/Gi_$G4GTGb# , HXDG_ GDG4Gb#G/_ӐG4G`[@ZkGGGGTGb#_Ӊ$#G`B b!A.AJiAj'A 0@. AGTGJCuF/S`///[@G@ZkBG0@b#A]@.q$IPJF>G @$cG`$4BYB<_GGG4Gb#_$ , H?$#  BY@Gb#(_$#Gb#/ $ , !@ !   A /_$#)-I//GGGTGb#R_"/A'EGG,Gb#EH<_ݠGð/GG4Gb#K_ݠGð ///GtGGb#_GG]] }(08ݤ@HP=X]`}hp#k//#$P^$P~^ ~(08޴@HGGG> @ r0pC "/R2[BG b# R"@/_$b#/ $#!!BGY?@/ _/8$#.JF @/ ///.JF/_XFA`$ 0B.JXF////0B DF/FKXAG_0B&. &JX!F/?0B. JXF/0B&/ &KX!G/?0BF/ FKX!D/?0B&. &JX!F/?//F/ ////K"v#6# 7BbC$C@F G5BFD/XFA $C r0`Br.JXF////0`B rD/KXG0`BrF/ FKXD/0`Br&. &JX!F/?0`Br. JXF/0`Br/ KXF/0`Br, HXD///F&".J+F?.f#J؇F/GGb#G_$cð{///$0'@/,DwHFG1,1H@@"@7@BrFG@F2@аGb#2_GHe /GDe/ `//`[GtG@Zk$ $Gf"&.&J!F .JXF` 0B'/ G&/&KDD-@/+$c` ''@ b#/ @ ///S_$àGb#$ @Y@t_$àƠ,H 5@+@ D$b# G=<@G]] }(08ݤ@HP#k/$0'@/аcDsHsGG2@{F`4Gb#_ GGtGHe[@Zk/àDf[GGtG@Zk//[GGtG@Zk$p@#P^~X^`~hpx޴>^~GGGGG@{#>/ `$ @ ::@ Z#@ @ _$ b#$#!!BGY?@ _GGTG="b#?%%%4G_%)!k!֌!_ӡ@@=G0D C31@@@F"7`B@tFuF`//"7@#9@6@B)CBFFD@$cG{.; {#JG+D ;.;J'F b#/ Gk/k_CqH8D.PJ0@F>GGTG]"DBXb#I_@Gb#C .PJ># CG@G="_àHfàDfG="tG`[@ZkG0@ b#]@ $/ $#!!BGY?@/ v_G$à , HX!D &0 B &// 0B ݢ@Gb#.JD/_GGTG="b#/_ӡ@@G0Dj?CGQ.b#RQJQ>c`GG="_///HeàDfG="tG`[@ZkGP]X]`}hpxݤ=]}#k///$p#^~^ ~(0GGGG> ^`{#$ @ ::@ Z#@ @ //_$#0.""0#p#P"0Jx DB`.J8F>.JxF:/K G6P/[Kxb#HG1@0.2J)F- c`Bc "ЀB /KFG+_$GTGTG`b# , H_Ghb#}_$B4GhR",H@ @7 @FG Dro/ DP"""x0.#P#"2J*F/p p.tJXhFl`.JFh.J8Fd0/:Kx(G` c`Cc A@Bxb# A.JFG_$GTGTG`b# , H/N_Ghb#2_$B4G8b#HR",H@ @7 @FG D=_G8b#_Gb#_GGb#G////_ BR"+$ , H@"@7B0F4GFG8b#_G8b#i_Gb#*_GGGGb#_G//G]] }(0@#/k///$Gb#/$   @Y@/_$,H@"@7B0FF/G/ D.DJ"DBAB7BFFDBUDBF_G$P#(^~0^8~ @HP޴X!"`h>p^x~޵A/AKGGG @G.J8FGGGA#/a/zKEG@!."0JGFà$C$ް#G @ `;;@ {#` @ Xb#_$#Gb#@! A1"@B! A.J$F /_$GTGb#0!.!JTG q_Gb#U_G4G`[@ZkGGGGTG(b#_$ݠðmGGTG="b#_Y$#G4G0.0JX!F a0`Ba  0B =Bb#P/PKFG_GG=">TGb#_ G7$#4G0.0JX!F/ a0`Ba // 0B =Bb#P/PKFG_GG="TGb#% G 4G!/_//AA G8 D%AGA 31AA8F @A7`BAADtFDA2DuF /$`/// @%1AAAA,7@DDH<DAD///"%7OA#6VA?'_'!BB9YAZ#F:CF/段%A.FGG8b# G_m`AGTG @@G[@ZkGs=@sI8 D P. 0`ARPJSFP>G@GTGpb#z_ `A=0@]@G G8b#= @$G/$բ5BYB_G$ .JXF@0@B@  0B 7@ Gb#/K$D/ ///_GG="TGb#1_ GGGi$Xb# $C rG4tB "R2SB R"@^_$àG8b# $áNΡ*NAY_A/@///{_GG="TGb# _@GGGTG(b#_$ݠðP///?!%/OA!)IA?$&֌!,AA!AA" -E0@!E/ B¤GGGb# R"C_f/$ }Gb#BTGdE R"_GG4G(b#_áGTGPn`[@ZkeG4G[/@Zk$ BGGGb# R"_oG4G[@ZkG(]0]8}@HPݤX`h=p]x}ݥ#/k///#~^^~ (0GGG{#_GF ,`"G" #b# H/@+@8 F!F: @.SJMB8FIBF4F2@.JB8FBF+7FB R" /KG_!$,G"b#G0HG/ z_/0% /GGTGBb# F@ %?BGX R"GGGb#_G]G]} (0@#k/#^~^ ~(08GGG>GC/ %,%Ha#$@!@7`CFF?G0""GGtG@b#@f  %,%H!"$@!@7 BQF3F?'D/f ///. J"BB7BFFBUB:GF e/ eKG"/DD/e. eJCB1D/ . JCBG/ . JCB6G/e/ eKe.GTG@b#eJ 1@c@G//%, %H!"$@!@7 BQF3F?GG TGb#&_ BGGpb#}G8 R" _G4Ge[@ZkG]] }(08@#/k///$`#^~ ^(~ 08@޴H!"PX>`^h~px޵A/AKGGG@G.JFGTGGGG! c㠬#P`Cc  PB a/aK$DGb# %_$GTGb#0!.!JTG/ _Gb#v_$b#$# !1B 1" !!0@G ! / ///{_Gb#_ӟ$#GHBb#F R"0.0J"'F> p.pJFTG9G f_$Gb#P@ %P @  % . JD_$GTGTGb#Р,H////C_Gb#'_GGtG à/Ld//`[/@Zk[G4G`[@ZkG G GGTGXb#_J///$GGb# , H21@@@7@B2FHB R" F4G&_Gb#[_G%%%GTG="8b# 4G%!!_! G///01AAAADA* 7B FF///$AHB GEG,GGb# R"FH</@_/ 3NA"5MA @AtBB@DDGE$/"KF/g@ %C [@GGTG@Zk Gg0@hb#]@ $$#Q1G1QBY?B _G$ArAI8D!.Q!J0@2F!>/G$AGTGb#b_@$#0.0JX!F a0`Ba a// 0B Bb#0/0KFG_GG="TG8b#1_ G$#b#/ $ P022B R"@0B "G__$CGhb#@$   @Y@/_GG="TG8b# _XGGGTGXb#_r///$}Gb#HB4GgE R"///7_$b#G PA P@! ,HD_$GTGTGb#p,H /_///Gb#_H"GTGGXBb#5AA 1" E/@G//Gb#/_ӥU@u@Ghb#DG////w_GGtG /Ld//`[/@Zk(G4Go[@ZkGGGhb#_ݠðG] ](}08@ݤHPX=`]h}pxݥ#k//$GG .!"JF.J8F#^~ ^(~08GGa/A#G"zKIG@!.0J Fa/A#"zKJG@!.0J8Fa/A#"zKJG@!.0J8 Fa/ "aKIG@ !.0J F$vG ` @u#::@ Z#@ @ /o_$#Xb#GP@! APAB 1"! A.J$F _$GTG@b#0!.!JTG /S_GHb#7_$Bb#R" , H@"@7B0F4GFGB_n/Gb#_Gb#_CGb#GG_^/$Bb#R" , H"@@7B0F4GFG/_J/Gb#m_="GGb# _GGb#d_$=b#B  F4GR".JG'D //_GG4Gb#z_]GG=/#// ` `[@Zk/G4GGb#_hbG4Gc[/@Zkh4Gd[/@ZkG] ](}08@#k///#$0(^~0^8~@HP޴X`GGGGG/ $PzZ:zChb#Y_C/@///_$ .a"""!#a#JF/A.SJ8DF"@.JFA".JF/K GA/[K8IGb#/@!.0J F|a.rJ8KFGw@$ 44@ " @ j_$#Gb#@! AAB1"! A.J$F //_$GTGb#0!.!JTG M_Gb#1_b#G_HBG4Gb#R"C_$GG4GXb# , HD/_Gb#/_HB//G4Gb#R"*_4GGb#_HBGGGb#R"_Gb#m_HBGb#4GXR"_TGb#C _$#1GQ.QJU$B$BqF ="/ _G#GGGGGGw uas`[@Zko/G4G="b#_=GGGGhb#D _GG]4Gb#/l_HBGGtGGb#@R""_O/ GGhb#G_}GGGGG/ #// ``[@ZkGG4Gػb#\_.$G="b#,HU@@ DA/_GG4GGGGG#/ g`[@ZkH"TGGX8b#1"89@/H4GG@b#" +_GGGGb#,0G ""3)_,GG4GGGxb#GGG/U@//G4G="b#g_GGGGhb#D._GG4Gb#/'l_HBGGtGGb#@R"_/ GGhb#G_GG4Gػb#/_\_$HBb#R",H@@ "@0D7 BG1D4G D _Gb#q_$G ,@"""# H )DU .2J(FQ `.tJ8hFM`.JFI.J8FE# C# g`C g , Hb#Dx_$GTGTGb# , H_Gb#_$HB4Gb#R",H@ @7 @FG D_Gb#&_Gb#_G]GGG/I#//E (gC`[@Zk?/}GTGGGG/g`[/@ZkH"TGGX8b#'1"8/S@ H4GG@b#"&*_GGGGb#,0G/ ""M(_,GGTGG}GGxb#GU@Gb#_$HBGGGb#R" , HD_/HBGb#TGDhR"////__GG4GXb#ھ_ =GGTG/9/// '`p%`[/@Zk///#$ GTG/ g//`[/@Zk/// GGGb#TGDT@$$(b4Gc[@Zk(G4Gg[@Zk(b//G4Gc[@Zk(4Gg[@ZkG(]0]8}@HPݤX`p#/k///C#$^~> ^ ~(GGGA/A"AKuDC8F/!.2JX*FC`A/A"RKHF>@a/A#zK8JGa#/7@A.[Ja#JF2@A/[Ka#8IG-@A.[JXJFa#/'@A/[KHG#@A.AJHF@C0ACC @0AB @ !  Ga/aKb#$D ,_$GTGb#0!.!JTG _Gb#~_TG8)Fa"""; A.!#a#SJa"IF/3@.JF/.JF+/K8 G'A/[KHGb#"@!.3J(F CABC B!  G /K$D _$GTGb#0!.!JTG Z_Gb#>_tGk4Ga""" =N!#a#A.G! SJHFF@.J8FB.JF>/KG:A/[KHGb#5@# B# ``B `.J$D _$GTGb#0!.!JTG/ _Gb#_$Gb# , ]BR" H"@@7B0F4GFG////_Gb#X_GGGPb#Gn@BtGGb##/T#R"/_//} G]] }(0#k//$0#G~^^~ (0GGGGG{# , H%D G//_G[/$#b# 0@ " 1  BG /_//GG4Gb#3_G b#/_Gb#/_GG4Gb#]_/4GGG b#_$ .J/D_ÐBGG b#8R"_/$#4GGb#!.JG8%D C/[_Ӡ@GG4G`Dhb#/Z_/GG4Gb#_GG]]} (0@#k/$0#G~^^~ (0޴8@H ,GGGGG{# H%D/ TG//#_GS/$#b# 0@ "1  BG /2_Ӡ¤/GG4Gb#_GPb#_Gb#y_G'GG4Gb#ڔ_fGG4G[/@Zk///$GGGPb#c_$,HE8EGtGb#G_/GtGGb#_//GG4Gb#s_GG]]} (0ݤ8@HP#k//$P#^~>^ ~(GGG ,"@# H )Da `/pK F`#/[ .:J*FW ,;H8(D@#`#Q .J@# F/K .;J8)F`#F ,:H)DB .J F0b#=#!B# 2!@ 2.JGD/#_$GTGb#0!.!JTG //_G b#s_$`Bb#`R" , H@"@7B0F4GFG~_GGb#_GTGb#_=D/G4Gb#_]DGG]] }(0#k/$P#^~^ ~(GGG>{# @$ @ ::@ Z#@ @ D_$ .""#A#JxF:@a.tJhF6`.J8F2.JF.!/:K8(G* c`Cc @@B!  @.J$DGb#/ ///_$GTGb#0!.!JTG _b#G_4GG]] }(0#k/5 Ba"""8 F!#a#/ A.SJHB8@Fb@.JXF..JF*/KG&A/[KxJGb#!@c`Bc ! ЀB G /K$D/ Z_$GTGb#0!.!JTG /Ǻ_Gb#_G//@a.""#tJXjF/'`.JF#.JF# C# ``CG!  `.b#J$D (_$GTGb#0!.!JTG _Gb#z_tG2Fb#! cG! P`Bc  PB !/!K$D/ _$GTGb#0!.!JTG /s_Gb#W_TGe/Fa"""w A.!#a#SJIB8 F/o .JF+.J8F'/K G#A/[K8KGb#@c`BG! c  РB !/!K$D _$GTGb#0!.!JTG 6_Gb#_G(? A.a"""!#a#SJa"JF5@.J8F1.JF-/K8 G)A/[KHGb#/#@!.3Jx*F CABC BG!  /K$D _$GTGb#0!.!JTG/ _Gb#_G FA"""!.#A#2JA")B8Fwa.tJjF"6`.JF2.JxF.!/:K(G* a/rKIFb#%@!.4Jx*F! caBc ! B G !/!K$D/ B_$GTGb#0!.!JTG /_Gb#_G/;!.A"""#A#! G2J*F// a.tJiF+`.JxF'.JF#!/:K)G c`Cc @@B b# @.J$D _$GTGb#0!.!JTG /s_Gb#W_Ge/=GGb#]] }(0#//$GG /!"KG.J8F`#(^~0^8~@HP޴X`h>p^x~A#"޵GGG#a/zK8HG}@!.0J Fya/A#"zKJGs@!.0J Foa/A#"zK8IGi@!.0Jx Fea/aKJGG ! _@70!B7 `0aC `!. v#!J$D/ _$GTGb#0!.!JTG /_///Gb#_$ Bb#R" , H"@@7B0F4GFG////_Gb#8_Ghb#_ BGGGb#R"_Gb#)_$@b#$#!!BGY?@ _0G¤//$@b# . JF$c`  @Y@G/_Ghb#_n$# G@b# $000BYB/G_$b# , H@"@7B0FFG/[_G="b#._e$# G@b# $000BYBG_$b# , H@"@7B0FFG/S///_G=" b#w_^$# G@b# $000BYB/G//_$b# , H@ "D@7 B/GQF FO_$]GGGG E/W#//  a`[^G@Zk/G4Gb#_D#=uAUA DGTG8b#4G GCC)D D\# /s@\//[G="Gb#TG G/w_GG_"(GtGb#va@ GG(_"tGb#na@G G]G(tGb#fa@ GG\GGtG0:b#@gGG4G[@ZkG)GGGG\GGp:b#@%/.GTGf @@@Q@ [//@Zk GGGGGGp:b#G!@ \՚@GGGTG0b#"_?/GGTG="b# G_GG (G_"tGb#/a@ G/G(_"tGb# a@G G]G(tGb#a@ G.GG5b#4GA?@A.@! #@GCGtG(b#`@.M?A 0 AMA =@ .D5`ACFG4G8b#`CTG @™@GGGTG`0b#ε_ /G`GGGG:b#/c@h4G[@Zk$$CjJ*jAY_A_G@b#j_}/ BGGb#R":_f/ BG4Gb#XR"2_h4G[[/@ZkW//h4G/P[@ZkM BG4Gb#(R"_h4G[/@ZkG4Gb#;_9h4G/[//@ZkG4Gb#+_) BG4Gb#R"_h4G[/@ZkG4Gb#͏_ BG4G@b#R"_h4G[/@ZkG4Gb#//_$C ݠGTG Bb#DR",H؇D/_GG4G0b#>_G(]>0]8}@HPݤX`h=p]x}ݥ#/k///$#^~^ ~(08޴@HGGG>GGG$0{#A!!ACY?@ _$ .a"""!#a#J! xFIA.SJ"JF/C@.JxF?.JF;/K8G7A/[KHb#JG2@!.0J8F.c`Bc B .J$D G_$GTG0b#0!.!JTG/ ///G_G8b#+_Gb#_$b# $# !1B 1" !!0@ ! G 1_$}(b# .JG8%D/' hCTG/@8xBDGR"/_GG4Gb#_GG4GTGb#/_$GGtGG4Gb#,HXD _ð%@/@G4GFGTGb# _GGG/$GG4Gb# !.!J/DZ`//g_G GGTGb#/o_6G GGGGTGb#b_GG+GTGTGb#Z_ /GGb#_Gb#_GGb# _$$   @Y@/Gb#/_Ӷ//Gt//Gp//xBGGb#xR"_GG4Gb#݈_Ga///$GTGTGb#'.J! 8FAa.aJX%DG/; // _tGİG(b#h] $#G812FxBR" TG_$GHb#P@ %P @  % . JD////_$GTGTG0b#,HE_G8b#)_GG4Gb#_GGb#G_GGGGb#_GG]] }(08ݤ@HP#k///#^~ ^(~08@޴HPX>`^h~pxGGGGP{#G>a_$b# $#!!BGY?@ ///'_$G4Gb# .JG%D 8r_GPb#C_G=TG@b_GPb#GG9_$e$#!!BY?@_ [Gb#_GGGb#G_GPGTGTGPb#[_GGGGGTGb#2_G@$#b# $000BYBG//_$GTG4Gb# , HD&G&_/XDGtG4G Gb#_//xDGGG&4Gb#_//4G$/ $#Q11QBY?B Gb#_GPb#_$b#/ $# !1B 1" !!0@G ! / f_4G TG G tG//$ .J8EEI /@GD`GG4Gb#Ѵ_GGtGTGPb#ۆ_///. /GG,///E`//G/ DGG4Gb#_GGGTGPb#_/// /GG///G Gb#$C@$cs3BYB`//_GPb#X_$Gb#/$ @Y@/_$GG4Gb#,HD8k_GPb#/;_GGTG@b_GGPb#2_6/Gb#_GGTGTGPb#b_$GG4Gb#,,,HE/ G/C_//XEGG4Gdb#/7_// xEGG4GDb#/+_//GPb#_$>$   @Y@/7Gb#/_2//BC@GTGGE b#@R"6_GG4Gb#/ˆ_G//G4Gb#Æ_G/C@GG E4Gb#////_GG4Gb#_GBC@GTGG KE b#@R"_GG@4Gb#/_G//G4Gb#_G/C@GGE4Gb#/_GG4Gb#/_G/GGGb# _G//G4Gb#o_G/GGGb#_G//G4Gb#__G/ GD hC=GBTGGpb#@$R"8E t_GG4Gb#{_$#TG),HD////F @E x@Et@EfG4GGb#b_`/ XD G% /fD///  U @u @F J@*U Bu BQF  FGG4Gb#/;_9//xD G G/2///)&X E x Et EFfF//// ' QU@Bu@BrF@ 4GUBuBF/ 4GF//fGG4Gb#_GG] ](}08@ݤHPX=`]h}px#/k///$C#G^~G^ ^8X[(~ 0GGGR"{#T/TKFn_ NGG4Ghb#˲_$xb#/ $#!!BGY?@/ f_Gb#_$G ,@"""#@# H x$D .2J*F `.tJxhF =`.JF.J8F /:K*G `/`K8Db#/j_tGG =b#_Gb#GZ_]}bG] ](}0@#k///#$0^~ ^(~08@޴HGGG / $PzZ:zCXb#Y_C/@_$ .a"""!#a#JF>A.SJ8DF"9@.JFA"4.JF0/KG,A/[KIGb#/&@!.0JF"a.rJIFG@.JF ! 0B  0!C A/AK$D $_$GTGTGb# , H_Gb#v_$8B4Gb#R",H@ @7 @FG D_Gb#_Gb#W_ $G$,$H/ ///(b#=B/ G//K_$,H$#!.J$@!"7 BQF!@8BGR"b#!F4G Q_b#G_$ .""#A#JGD/@a.tJiF+`.JF'.JF#!/:K8+G c`Cc  B !  a.aJ$Db# _$GTGTGb# , H/_Gb#_4G48DA""! '!.Gb#2J)F! a.tJ8kF`pB pB !/!K$D }_$GTGTGb# , H/_Gb#_TGDG]"b#[Gu_GGb#1_$ , H////(b#=B/G_$ , H/Gb#_$à4GGXb#&.JG'D _8BGb#TGDHR"/_GG4GHb#)_à}GGG$f`[/@ZkG4GXb#݃_GG] ](}08@ݤHP#k//D8BGb# `GxR"(8D/z_ 8BGGb#R"r_ 8BGGb#R"j_ 0$P#^~^ ~p B(008޴2 R@Hp@CP>X! GGG{#2 R.JG$D /_$GTGb#0!.!JTG //7_Gb#_Gb#_$ .a""#A#!"J8 FA.SJ Fa"/.JxF.JF!/:K*G a/qK(Fb# A.SJHF@B B!  !/!K$DG /_$GTGb#0!.!JTG //_Gb#_Gb#@_$GtGb#G , Hx D_GG4Gb#[_"Gbq""$#/ A@[a@Zk"TG"`P1"[@Zk/$//.""J]D//@d.tJkF`.JاFQD$$#/Kd#4GG8G/D/[KbxKG@1_á@@G 7@4Gb# DDG/ _ //DGb#/>@/Gb#@$,H////(#Gb#= @ R_$,H$FG/?$@D/GGb#G6_¤G""$eD//@[d/@Zke"TG[(1"/@Zk//F !"a","! Gb#HG؉D,HDA.SJXJF@.JFâBò C A/AK$D _$GTGTGb#Р,H/_Gb#_Gb#X_$GtGb#G,HxD_GG4Gb#s_¤""Gp/$@@[`@Zk"TG`1"[@Zk #4G/ #Gc$.h#( "J'Ea * H/[K8DGb#%@.Jx+DG/ #p B# gp`B g.J0@F////_$GTGb#0!.!JTG; _Ӱb#8G_5 +E( ("!+ ,b#H D&.JF"%1@G%Cp@BC pB .JE////_$GTGTGb#-I m_Ӱb#GQ_GG4Gb#_Ӗ""GƠd$@@[`/@Zkd"TG[1"/@Zk//GGGb#_$#G0b#-I/ $ %@ )''A /+_$Gb#tGGȠ,H_#G b# p A# p@Ȱ ,HD//_$GTGTGb#0,H_Gb#_G]] }(08ݤ@HP=X`#/k///$0#~^^~ GGG 8{#$   @Y@ _Gb#_Gb#w_Gb#/_Gb#_Gb#_Gb#_`Gb#(#8 D @`4G b(#= @ $0."0J"'F p.tJ8dF`.Jx FGE_tGCG]]} 0#/k///$0#~^^~ (GGG ," H 'D `/pKF @/AK/D `/"pK F @/AK-D `/`KP#BB7@C:D0D c`Cc B @/@KDGb#_$GTGxb#0!.!JTG V_Gb#:_$BPb#x R" , H@"@7B0F4GFGE_G4G b_G4G(b@GG0"4G0Eb#@G$#Pb#!.JG$@!"!@7 BQFB` R"!F4G/ "_$G4G8b0@TBGPb#GDD8 R"K //_G4G b__$Gb# ,`" H 'D) @.SJGF%@PB ĢPB IJ/KDu_$GTGTGxb# , H////߬_G]G} b#](0#'DG4Gb# G_GG4Gb#/K_///G]]} (0#/k///G4GGb#_$ , H 'D/ /// @.@J CGBF@.JCBG @/@KCGCF/?GG4Gb#_/G]Gb#]}GG (0#\#^~^ ~(08GGG>{# ^)_$b# $#!!BGY?@ ///_$G b# ,@""" H 'D .2J'F `.tJoF`.JF .J D_T? D#G4Gتb#P"_GG] }b#,0 G}_tG4G`/$C//.#JFBB [G.J7@B5BB7GDFF/i //BBt"BF7`BFF]$$âGb#R2DBY_B@!_$Gb# ,`" H 'D @.SJ8DF@.Jx D~_/$@!@G 7@4Gb#FGD/W_ //$DGb#/ @/Gb#_$ , H////(b#=B/G_$ , H/$C2$FG$DGGb#G_$GGGb#,H/w_G]] }(08@#k//#(^~0^8~@HP޴X`h>p^xGG#G$01,q#H1"DlQ/[KxDG(b#a@.J G_#="8 D/? @]_FD@FC]4G4JPDu/M`â//ID/ =GTGPB"b#GG/@+@F"/ ^ /GTG"B"GGb#/^TG=")@`//%`## [@Zk/GGTG"b#_CG.PJ># Dq="/ `c// `/Gb#@G #GTGP:b# /0  F/  ` ""`(//'.#J#.JFF@GGTG8b#"_4G08F/ $ DG4Gb#&_Ӱ//c0GbcF8DFG CG0@BCG}"/@#G!1 @##///XDGpb/#0 BG4"C@7.@#G!1 @# //@BG4Gb#GGR"_8DG4G`b#Gm_ӆDU0$5 @U @FG DE@ .xF% C@G@4GDS/Dâ4/// ײ/tU @CCGG9DtG/5 [@Zk24GD=/- ///p/`}/ //G4Gb#c&_//u@CGG DG`b#/ _ /G4Gb#///K&_TG @` `# [$@Zk 4/ /D$/ C@F/?@GGG,///GG4GTGb#*_GG DGTGدb#4_%_GDô#& D/ 8F/ 2// 85vJF80ĢwUBGGCFtG^[@Zk㳺 GGG7 4G! //GIG4GTGb#o*_G)GGGTGدb# E /%_G4GTGدb#%_ 'E G_"0DGGtGaU@CDG"[@Zk~G4G@"P9b#xD/@4G@" D$GP9b# *E@ xE@ TGG4 $`b#$_^GGGTGb#j_GGGHb#_0b#XDO$E- % %"e"EI _!EC%-&ID?,HD;.J F7E.SJMFG/1@.J"@@7BFF(_TDC"4GTG`b#G8D/_//(G4G9b#G/ D( à c@GGGG[tG@ZkG(]0]8}@HPݤX`h=p]x#/k///$0#~^^~ (0GGGG {#$   @Y@///_$GG4Gb# , HD/S_Gb#/_pBGGGb#R"_ӛ//$GG4Gb# , HxD//7_GTG!``[@ZkG #GGb#4G8 D$D /_G #GGb#TG8 D$D FG//>@G#8 D X/\# pBGtGR"b#G_dUpBGTGb#GR"_dL///0pBGGGb#xDPR" _>/#XDpBGGb#!D R"FG/w_///!@CGP"" DTG>b#/@G(G`>b#TG Ń@pBGGb#GR"Y_0pBGGGb# @R"7@M_GGGb#_G]G]} (0@#k/ GG#^~^ ~(08޴@GGGGG>"`/`K t#FG_PBG GGb#hR"_G]///GTG , H x'D/ c/`s//`[/@ZkGGG4G.b#/ϴ_G//'#GGGTGb##D =@G/#8 D/ X//\# PBGtGR"b#G _R/PBGTGb#GR"_I0PBGGGb#xDPR" _>/#XDPBGGb#!D R"FG/_///!@CG0"" DTG`=b#/9@G(G@=b#TG @PBGGb#GR"_0PBGGGb# @R"7@_GGGpb#?_0bG4Gc[@ZkG]DG]] }(08ݤ@P#/k///Gk//Gk//$0#4G~^^~1>G (0GGGG, b#HD_GXb#_BGGGb#R"#_ӧ//$GG4G b# , HxD//_GTG```[@ZkG/##8 D/ X//\# BGtG R"b#GG)_d4G\v/BGTGb#G R"_4G\k//0BGtGGGb#@@R" D////_4G\U$GHb#G(D/ ///_GGb#_4G\AGGGTG`b#_Gb#G_0D$,HD.%"JF/E.e"SJOF_."JF."JF// K@%#7 C@YG%GGPb#_TD GGG0b#W_G]]} (0@#k// GG#^~^ ~(08޴@GGGGG>"`/`K u#FhG_pBG GGb#@R"J_G]\///GTG , H x'D/C c/``s`[@ZkG/##8 D/ X//\# pBGtGG R"Gb#Q_4Gd\&/pBGTGb#G R"-_4G\//0pBGtGGGb#@@R" D/////_4G\GGGb#Ͻ_PbG4Gc[@ZkG]DG]] }(08ݤ@P#/k///Gk//Gk//#$0^~^0@ ~(08GGGa 0B {#a G,Hb#D/:_$GTGhb#0!.!JTG /_Gpb#_G@b#/_Gb#|_ӰBGGG@b#R"_G@b#_G4G="b#_=G4GDX##G@b#_]GGG `/`#// [/@Zk$GGb#G,HxD؇D/ ///>_GG4Gb#ݥ_G]] }(08@#/k///$0#tG4G~^^~1G (0GGG,b#Hx DK0_/$//.`b#J F.$G/_Gb#4_Gb#_$ , H////(b#=B/G_$ , H/$ $FG_$`DBG4GxR"b#ݼ_$GG4Gb#,HD///s_G`b#D_$GGb#G,H؇D_GG]Gb#]4G} (0@#/W///C#$^~^ ~(08GGG{#>$0A!!ACY?@ _Gb#_pBGGGb#R"_gGb#_$GG4Gb# , HDS"_Gb#_GGb#GG @ #GGGGTG0""`^h~px޵GG$G,0G@/@KGG@G@ 0TGTG b#0 @ 0C0@CC ,G H/_GXb#/_BCGb#GpR"_G Gb#M_$0b# $#!!BGY?@ ///_G Bb$ ."JFF"B@B7B `.JGէBFF/ //B0#BF7 CF="$ GGb#_GG GCCE[//G GTG @$   @Y@/_$Xb# .J! FA.a"SJEFG/{@PB PB /K$D/ _$GTG@b#0!.!JTG /_GHb#k_G#b#_$#Gb# $000BYBG_Gb#/_$b#0!.!J!Bq"$B'BF7`BFqF G4GG=_ GTG! 0@b#0@ c0`Bc.J TG/K_8DG " GBDcb#G R"&_/ <d//`[#TG/@ZkG_G]G] }(0@#ÈBG]G }(TGb#]0@#` R"///G{#M/$0#^~^ ~(08޴@HP>X^`GGGGG8{# $   @Y@/_GG="TGb#_ӡ@@@31@0D41 @7cB5@1D7BעB6@tF B@"uF@G@vF8FwF/GGTG8b#"o_ӳCN @"!@Q B@ @!0 @@1@0D F!B @F4G1D"AF3D4D //81@91@:@ 7C7#CBC;@G @cC@G@8FGG //GGTG8b#"Jo_ӰCN Q? &" @ B_"G@!0? FB3@!@D7aBTG!@8b#"D@FFG//@.o_ӳCG@@@GTG8b#DDGDG/@o_////@D?GGGTG8b#o_7䪝@0@8b# @$àG$#!!BGY?@ v_$C@ʠ&,&HX!D *0 B */ 0B @ .JGb#D/_GG="TGb#_Ӫ@@@GAE0Dr?$#GGtG'b#1(1$BJ@GG]] }(08ݤ@HP=X]`p#k/8P2F@@k///H0!Q @, PY!@[0@!@/{#D'([QF!Q @#@ D!Q @[QF!Q @@D!Q @[QF!Q @@!Q @Y!@/ //[{#QF/@!Q @?Gk///A0@?@.@J_G/k///$0#^~^ ~1(08GGG1, 1Ha#"+@7cC7BpGF/3 // D/DK"KC:  7B7#@7@FECpGECD DD%@Z#OC@G(2@tGh'b#/I@$#GCGTGb##%B# aGeB _Gb#a_G]] }(08@#/k///$P#~^^~ (0޴8GGGG@{#$   @Y@y_Gb#_G b#/$#!.JGX'D/# ///_BGGTGGGGb# R"_///G///G]]} (0ݤ8@#k//G//$#!.JX'D?GG4Gb#_GGb#I_BG&GTGGGb#GR"_G8"GGGGb#_(GGGbH'b#_"tGeI@cGG4G[@ZkG///$#BTGGGGb#! R".JGX'DB Y_GG4Gb#/O_G b#_GGGGGGb#S_GG(G_"tGH'b#/I@Ӹ"GG4Ga[@ZkİGGGG8"GGb#/7_GG(G_"tGH'b#I@Ӹ"GG4Ga[@ZkİGhİb//$#^~^ ~(08޴@HP>X^`GGGGG{#~$0A!!ACY?@/ 䚽_$Gb# !.G!JU$B$BqF GG/?_G/G b##Gp.@pJ!BGY?@$ C G /s_$  F!0@ @G]@@+`//.JB5BUBBF:G@FF/ @G$#$#Gb# 1 1 @Y@/F_$ !E!)@@G@/@. /G.GJ@DBOBDBFFGBDFFF  @G/GKDG@@?$#$ I iGb#))iBY?A/ _$# @E  @ A@ɢ@/?.@'" GJBPF+///j."J!"HAF*#* *"tJdBF` /J!KHACXGj/aKJ!HA$@D/ *-1IJ!HA$A IF/?///@///.J@B5BUBBF 8 E4GtF3E` @$$#Gb# 8  @Y@/䶼_$ !E!)@A@ AAë //6"6B@SFZ@///@~.DJ@BBդBG[GBXGG/o @/k ,H@@@@ SETF@ JF@E_ @/['/'K@$C/C$CPGG'CFFO @/K '-'I@$A/A$AF@E'AD D? @/;g/gK@DCOCDCG0GGCFF/ @/?@`@'G-GI@DAOADA EFGAF D @/$#$Cb# 9@90BYBG+_$C  E  @ A@ʢz//. GJDG /*HAD$c4GEG1HAGTG9b#7v@$c/ / 4G%]GGb#l_G]] }(08ݤ@HP=X]`p#k//0#TGP^~X^`~hpx޴G>^~޵GGG#$,0à0Hb#(=,]0}48ݰ!.!J! 'F/ p0`B0 pC0@BC,HTG_!//$b# $# !1B 1" !!0@ ! G u_$G ="b#@D GGH   @<_CL b#$#<}0= !!BG!+@1_$b#$#!!BGY?@ z_$p" -D ...J'F/`///%F!B"" .$B7B8GGJBF/!BQ#$B;F7@C:F $$ ݠG GGb# @Y@F_G="b#_ӐBGGG b#R"_|/`GGG}L]G`>b#F@ӤCG b#V_$GG4Gb#,HD/[ G//s_G b#/C_G="]"b#GY_ àGGP""cGTG;b#////v@ӐB GǷ_GTGR"GG b#_GG@""TG;b# G/{v@G//"Gp""TG;b#rv@G%/GGTG`"";b#4Gev@/c˰ GG//BG4Gb#GR"_ GG //BG4Gb#G`R"_GCGCG4Gh:b#Dk)y@GtG<ݠG]"b#DF~(/E@-G GGb#4GI ///KI_ӐBGGtGGG b#R"_BGGGG b#R"_GG4G b#9_4G5PH#0A BB2F@ @ & //` /%`00A/!(0A/ 0A/0A/ 0A/ @0A/ @0A A/ A /@ @0A A? AGGGpb#_ //GGGb#o_Ӡ CAiݡG4G/[@ZkG b#V_./DG]G(tG"b#kE@8GBGGGGGXb#R"D@D////g_iG4G[/@ZkG b#/+_//GG4Gb#H_ӐBGGtGGG b#R"_ BGGGG b#`R"_GG4G b#8_4G6HP$A @@DEA /#/// F$(EGF0A @ egF0A`F0AF0AŢF0A0A A/ A /% 'G/ 0A A/_ A//=GGpb#_/GGGb#˶_Ӡ CAiG4G/[@ZkG b#_$ D/4ݠ8@AGb#@ @D䒷_/eA,H,///0à,48ݰT#@]4]H}AACSRA 0@AURA 0@AVRA 0@AWRA 0@ARRA0@C 0@A@]w xAr=4 GH} /ݠ `fA,HiG4G[@Zk$Gb#$àƠ%@Y@2_$ ǠD:,H DD '.'JD|@@"7@B@G b#4GrF@FBPR"_G b#>_$à$EEDD]$&Ơ!&@Y?@ Gb#_$ E$,H'FNH@G G4=p ///Tg4G B/[@Zk0@ `A @/?$C<ݡ A 8E///G///GP]X]`}hpxݤ=]}ݥ#k/BGG b#8R"_/BG4Gb# R"Z_\GtGG ]L=>b#}@G !////iɡ4G2A}< E EC0H#P OB@BP0BtF""`//"/!(0 @/ 0 @/00 @/ P0 @/@p0 @/ `0 @ 2@/ /@/"0 @ /@ /@G G//_IGb#GD/_Ӡ CAhE 4G!A/G3PH /@ @FDA "//D NF$@(F 0A F 0AĢF 0AF 0AG 0A 0A A/? A @/d nG/` 0A A/ A//PGG/_ŠGGb#DFI7_Ӡ CAAG @4/E̠fEA A!?48]@A AB QB,b#F/ G//_0,484ݠLFA 0@AAFA 0@A0@A̱JFA0@AJFA=G_ 0`BSfBDFB 0B0B ɢDƲ0@ @)!"4=GD@!//mGBGw_ӐBD GG4GLXb#R"_*Gm4///' iF mǡ nE `/ D/@ @ ?//G-Gpb#װ_ //BGtGXb#GGR"г_@! @/ =GG7_ ݡB GG4GLXb#GDR"////_ ݠ(%CA,¥JEGD4ǰ,L ]L=(tVH%#0C HcP# `AU@EEG&C4GJEDݡGL ]L=GVH,CFE޵HG4G@ZkH@ݠG G4p !/Tcm4G jAk` /[//@Zk0@ @A! @L<$# ^~(^0~8@HGGGG^G{#~$0A!!ACY?@ _$hb# .a"J! F5A.SJEFG//@PB PB /K$D/ *_$GTGPb#0!.!JTG /_///GXb#x_$(BG0btG#[KZk$#B%.%J'F  4G/G#b#_G/$b#/ $#GQ11QBY?B/ 掶_$G .J/-///r. D@FrJF/!.! R"J2/2KFa/! aKR" .J4F .! JR"/ `.JpFA/! R"AK.GJF@a/aKXF! A.J, /// DFK3F/! !/! "!KV.VJF@.! J"/KF.! J"/ 6.6JFa/! "aK?V.4GVJ@.JէBBu"G7`BBFuF` /G="b#|_=DDD4 DGG$# $CrR2rBY_BGb#@_G(b##_$Gb#0!.!Jq"!B$B'BF7`BFqF/ G4G/>_// GTG! 0TGPb#0@ c0`Bc.J /_ӘB8D0" GDGcb# R"G~_G}Gxe`[#@ZkGk_=G@b# r_/GTGGb#[_G ](]0}8@HP#k//$0`# ^~(^0~8@H޴PX`>h^p~x޵ , H'DG G`/GGG" pK8F@/AKx+DG" `/ pKxF@/AK"(D `/pK8F /@/AK*D `/"pK8F@/@Kx+D  c0aCc Q0ACb# Q.JGD/_$GTGb#0!.!JTG /_Gb#_GG="GTGb#Ø_01@@ G7B@/ FF///&"&"3@&"ֵ"4@'uB7@B#tFBwF `GGGGb#_ӬW//$4G .JXF@0@B@ ` 0B 8@ Gb#!/!K$D/ F_GGTG="b#/w_01@@ G7B@/ FF///&"&"3A&"ֵ"4A'uB7AB#tFBwF `GGGGb#p_Ӭ //$ 4G .JXF@0@B@  0B 7@ Gb#/K$D/ _GGTG="b#/+_Ӹ" GG4Ga[/@ZkG GGGTGb#ϔ_//D EGE%D%%!D%!!///21AAAADA*"7@B SFTF"@///dABG GE,GGGhb#R"GH<y@/K_m/"6NA"8MA5UAB CBFFB@z %CG @GTG[@ZkU G=dAsH8 D P.0@RPJSFP>/GdAGTGPb#Ι_@=0@]@GGb#= @$G/$բ5BYB_G$ .JXF@0@B@  0B 7@ Gb#/K$D/ V_GGTG="b#/_D ED G0D1D/w?//GGGTGb#*_2/$á,HXD0@ ./ N 0@A NAGb# , HD////_à df`Df`[GGtG@Zk"iG4G[@ZkG ](]0}8@HݤPX`=h]p}xݥ#/k///$0#~^^~ (0޴8@GGG ${#   @Y@䁳_G$///.e"JB8 D/ E.SJEF@.J$B8DG"b# .JFG/__^/// %.E"""#E#% 2J8$F% e.tJ%"xkF/`.JxF.JF%/:K8(G e/aK*Db# E.QJ8(F .JxkF`G/_.//%,%"e" b#1H8$D E.SJEF @.JDG//_Ӭ/Gb#/_@//F4G b/GM_GGb#,_$Gb#/$   @Y@/_$,H//(#Gb#= @ ///_$,H$#b# $ P022B R"@0B "G_$$ DO?$DGB R"G4Gb#t_ӬG]]} (0ݤ8@P#/k///DP#8^~@^H~PX`޴hpGGGH/ @$ @ $`!:@aC>CG@?"/G b# _$D#0="(]"G}"b# _G G5_Gb#_GG-_GG8b#_h#4TGGb# /#Gl"D @ qD///_d# Dd$Pb#r."rJD/c.JF_PC PP@C PR"Pr.GrJDF@//_$GTGTGb# , H_Gb#_D(}GG0] x``# [@Zk/GTG/<e`[/@ZkGq_Gñ_HGb#D1@ȯ_ӤDàG="G`b#TG/$ $$ @ @ /Ϟ_ӏ//DGTGR"_ 0TGb#P0 @ 00B.J@_G4G@b>_$BGGG@b#PR" , H@"@D7BGDG~_G̰_G"_Gt_HGb#D1@Wy_UDàGxb#(]0= H4BG_G _//GGb#_@DàG="G`b#TG/8$ $$ @ @ /k_+//BG4GGGG@b# R";_G_G߰_G1_HàGb#D1@6_DGG`b#="TG $ Ġ$$ @ @ ?_G8]@]H}PX`ݤhp#/k///;#4G~^^~ (0޴8@H>PGGqGTGGTG[@ZkGG GGTGHb#y_GO///$#!.J'"G"g"@7#B7CB7aB@2FU@@3F4F5F6F7F1 // 0@hG %A @GTG[@Zk//7GG4G@Hb#.qHPJF>GS_$G'-'I ' @"7@7#@7B@DU@@DDDDD@,EH<GG]]} (0ݤ8@H=P`#k///GGGTGHb#_G$0GGG , H .D #~^^~ (GG`/GG" pK F@/AKX.D"/ `/pKxF@/ "AK8-D `/pK  F/|@/AK-Dx t`Ct Q@Cs# Q.JGD//߳_$GTGb#0!.!JTG M_Gb#1_hb#G_$GtGb#G , HD/_GJGG4Gb#_Ghb#/_$G4Gb# , HXDG/_Gb#/_$#GTGG4Gb#!.JGX$D! G_!GDG4Gb#//_Gb#/_$#GTGG4Gb#!.JG$D Gy_G4GGb#ϩ_GG]]} (0#k//Gk//$0#4G~^^~1 (0޴8@H>P,GGP{GGTGTGH{$ D#7#@7CC:D [@ZkGGGGTGb#+_G{/.GqH4Gb#4G PJF>G/+_$ , H///h"'"G"7B7#B7AB@F@@ 0@F &ATGFFFEG [@G@Zk///3GG4G@b#.qHPJF>G_$#G1 , H$ 44A ")B )! Gb#d_$Gb#/$# )  @Y@/_$'-'I//GGGTGb#_G@,FH<///GGGb#_GG]]} (0ݤ8@H=P`#k/#~^^~ (GGGG{#w_$ .a"""!#a#J!  FA.SJ"MF@.JxFA".JF/K GA/[K b#8MG/@!.0J Fa.rJLF@B B !/G!K$D n_$GTGb#0!.!JTG /ې_///Gb#_Gb#)_$GtGpb#G , HD䦨_GGG4G`b#C_Gb#/_$G4G`b# , HXDG/3_Gb#/_$#GTGG4G`b#!.JGX$D! G!_!GDG4G`b#//_Gb#/_$#GTGG4G`b#!.JG$D G_G4GGpb#[_G//WG@""TGPDb#Vk@G8""GGTGPDb#Ok@GAH""GTGPDb#/Gk@G1p""GTGPDb#/?k@///'$#0"4G,q[@Zk$GG4Ghb,/}^G//GGTGb#n_/PBGGb#G R"U_G///0" q///0"a4G[@ZkGG]]} (0#k///#~^^~ (GGG {#__$ .a"""!#a#JxF/XA.SJNF"S@.J8FA"N.JFJ/K G "/DA/[K8LG@@!.0J F<a.rJMFG7@.J؍F ! 2.JF.#P!C# `PaC `!.`b#!J$D /K_$GTGHb#0!.!JTG _GPb#_ b#G _$GtGb#G , HD/䆧_ GG4Gb##_G b#/_$G4Gb# , HDrG/_$ ."J F/'@a.tJmF#`PB PB !  a/GGaK`b#$D/ ///_$GTGHb#0!.!JTG7 e_Pb#4GI_18FA""! '!.G`b#2J,F! a.tJxnF`pB pB 4G !/!K$D /˰_$GTGHb#0!.!JTG 9_GPb#_GGGb#_$GGTG4Gb# , HD/}G_}GXDG4Gsb#//_$ ."J F/'@a.tJmF#`PB PB !  a/GGaK`b#$D/ ///_$GTGHb#0!.!JTG7 _Pb#4Gѭ_18FA""! '!.G`b#2J,F! a.tJxnF`pB pB 4G !/!K$D /S_$GTGHb#0!.!JTG _GPb#_GGGb#_$GGTG4Gb# , HXD/G-_G4GGb#_GG]]} (0#k//0$P#~^^~ B (GGG0@{#2 R@C! 2 R.JG$D _$GTG(b#0!.!JTG/ ///o_G0b#S_$pBb# R" , H@"@7B0F4GFG^_Gb#_Gb#_GGGGb#-_GGTG""5b#g@pBG4GGGb#R"u_P"4Ga/[@Zk@b#$#0."0J"q"$B!B'F7`BFuF3`/+ .JF'PC AP@C A,HDG_$GTGTG(b# , H/_///G]G} 0b#](0#/pBG4Gb#R"_G b#_T@b#Dt$, /1 0."0J"$Bq"!B'F7`BFuF$` .JFPC @P@C @,HDG/O_$GTGTG(b# , HG_ӸpBG4Gb#R"_Gb# _$Gb#_4Gb#_$G@b# ,`" H 'D @.SJGF@PB ĢPB IJ/KD//_$GTGTG(b# , H_Ӏ'DG4Gb# G]_GG4Gb#/_G]]} (0#k///G4GGb#G_$ , H 'D/ /// @.@J CGBF@.JCBG @/@KCGCF/?GG]Gb#]} (4G0#///#~^^~ (GGG//$#1,"H@8@G/@q/pKF 8F//,q#"HD 1,@ 0H7@@%@;D DD*/@@d#7`C;D0D! / @,G1"Hb#D/_/@GG 7@@4G b# DD/g_Ӻ//Gb#_ӴG]]} (0#/k///#^~^ ~(GGG{#@$b#$#!!BGY?@ _Gb#s_ "TG,`//`[/@ZkTGb1$#!!0@"# @) 0.F0J"F0.5JC7Jq1 JF0.8JCqQ J:v_KQG]0.0JCGpqJG HD"s^G//GGTGb#_$GGb#G , H/K_$b#/ $#!!BGY?@/ 䊪_$G ,@"""# H 'D* .2J'F& `.tJoF"`.JF.JF / K@@#@7@CzGb#@G/_TD /$#Gb#4!#_/G4G4b#"se@4G0p`# [/@Zk$b#/ $#!!BGY?@/ 6_G`b#_$b#/ $#!!BGY?@/ &_$ ,@"""#@#" H'DI  .2J8$F@"D `.tJhF4G/>`.JF:.JxF6 /:K*G2 `/pK8 Fb#- ,2H*DG(  . JD$_$tGb# , Hx DG/o_TGG# h`/`# #cC[@ZkG`b#G#q_$b#$#!!BGY?@ Ʃ_$pBGb#G@R" , HD䒤_/GG`b#_GG`b#N_$GGGb# , H/W_ 4G4p/`[/@Zkp"TGG4b# 81"e@G4Gb#/?^ /d GG]] }(0#/k///#G^G~^ ~(GGG8b#1@Ghb#/_$b#/ $#!!BGY?@/ ///S_p"TG,``[@Zk$GG  @""@/).}FJ! pF}.JC6Jp1JFݲ.JCpQJ9v?K0G=.JCaq HTG";~KaG}b3r^G//GGTG0b#r_$GGGb# , H/_$b#/ $#!!BGY?@/ _$G ,@"""# H 'D& .2J'F" `.tJoF`.JF.JF / K@@#@7@CzGPb#@G/ _TD >/GPb#_G4G0/b#0"c@4G 0p//`# [@ZkGhb#G_$G , H 'D @.@JDG/ GGGb#R_C4G@4b`[@Zk c@ CG]] }(0#/k///$09 a @C4 BF/!/֢v6CCTFC!6@tC B/.;#J6F/KXF.;#JvF / Bk//;#KXF0B B{# k///B?B#TGD;~^_BDG![;^G #1"/k///$(08 D $p s"tB/.`FJFs"tB S/SKGG @s"tB/3,3H'D s"tB/tB//qТGs"vBt /s/sKGGDGn///3s"vB/, ///.`FJF#s"vB s/sKDs"vB/3,3H$D s"vB/ .JF s"vB/`,HDs"vB/vBaB5XDG2@s"vB, ///3/`F3KXF#s"vB ,HXDs"vB/ S/SKX$F s"vB/ s/sKXF s"vB/.JXDs"vB/?vBzBs"vB?vBrG] #k/ #C/ ///x/GxK؇F#C,HD #C/@8.8J'F #C/C//G] #k/G] #k/$P0#H^~P^X~`hp޴x>^~޵GGG8>{#<@ R @ /_G(=" ]"G Gb#_8=bl"@⥬C/4G///T# C8@FU@$cs.J`//(Gb#=B ///_$ , H$/C0// pP2SB$B&/GtG(B"@b#/Ѣ ֢$BGG&B^$ !B@ !B $c s3B$Bâ0B7B䂧0B\B"Ck///C@"//@G`$#1Db,1 "H1"DC,H`1H3J`F},HC`QH6vJFݲ,HC`qHG9>K G=TGo^GsGGTG8b#_m/Y@@GG$G , . H JG 䡕'@@ Di////_өàx"TG,f`[/>@Zk$<ݢXb#B, "D" HD6$,0HG-D1 $.2J-F- d.dJ@"7B@FF/#<ݲ//{_TàG4G+b#Dy$4#/ ,//`@4G0d/`# [@ZkG4G8-b#8"?a@4G 0d//`# [@Zkx"TG/,d`[@ZkG8"4G8-b#!a@à4G0f`# [@ZkäY@Hà(8D2$#! }C<.J3@FF7 $C/@ /GGGGK_G?"G$b#I_DG="]"0}"8b#_Gb#Y_G'h#GTGb# /#@/ 4C// @ qSF/@///C_d# Dd$#QGb#r."rJR"DJ.JFFPC QP@CQ Q2,2H$D _$GTGTGb# , H /O_///Gb#0_Dà}GG]/x`//`# [@Zk/àGTG/<f`[/@ZkG _ӼàGD0GDG4Gb#_ BG4G8b#GhR"1_GG_G_DCX梤TG=G@âHc BB&fBQB$òe[@Zk# @0@/TGecX[ssBQB@Zk@@GGGTGb#7 H#S_ӬC/X#ABpBX#PB0cXssBStBXâuBUBհ0BC///GGb#_ӬC//Y@ ( 8E'$à$&4G%,%.E"G%H2J'@%BE///'BGGGE G/:_ Gb#_Ӡ/5$B8DE/㰙/5$BG"" EGG/e.tJeF`.JFG //_b#G_ӬC{ð'@E"""D#E#"?%.2Jx+F; e.tJxhF7`.JF3.J8F/%/:K*G+ e/pK8Fb#&,HGx D!# 0!B# f0aB f/KD/_$GTGTGb#0-I //+_Gb#_Gñ4à9@$DGtGEGG//// _/Gb#/_//(à,!(= @C@5@!FDE $ <lGGGG_jGb#GI_$àƠ,H////(Gb#=@ʤ_$,H$$%EEB!G4GR"b#_Ӭ/Y@ =/$#// 6$áΡA<,GGGG[_*DàGGG0b#/#XmADA$D_Ӽá%1@N@/ GàD///GàD/GG@b#_ӼàGD///GGGG_"á@ GAD/#// dn`$#!/Dn`$$[GtG@Zk$à pAG&á/,HXD/&0 @ &// F0@B F0@0A @ñ)!&ƠGb#.JD¦_$GTGTGb#%-%I//_Gb#_ӬC8GXb#}_$à& Ơ%%A%@ Ơ&&A%@G)"Y@ , . HJ@BE @GGG_yGb#._/5BG ) EGGG_,HD ,HD ///_]b#G_ӬD  "I"G-""I DA),0Hx(DG/; ).2JG*F6 i.tJ8kFG1`.JFG/+.J (E' ///^_-b#G_$tG-IxDTGGð # hm`[#cC@ZkG㳬/9@G(=" ]"Eb#$r_ӝ/GXb#_$á .%A%%A Ρ.A%@G-"Y@ , . HJ@B2E @GGG_Gb#_u/5BG!! 0EGGG ,HD,HD //_Gb#G~_ӬñXå@%E$$(="G ]"b# _K///GXb#_$ġ$ %%A%@Ρ Ρ$$A%A)"Y@/ , . HJ@GBD`GGGG_/GGb#;_Ӭ/5DBG ")!D),0HG%D ).)J %EG/ G/_jGb#G&_Ӭñ$#GTG ) @W)) @PFG))@O///`4A0B.JvFFB<//C`=/4ABpBG8/AX"""8K'G/7`QC//3.J4A8F.,HD*.JF&`/N. "NJF.JD.JF 0@CQC0B!<* `4GPB$ /`//<//X$G@0BBTG<$G0BBG<+G0B B,"H D 0B0BB//<úB_G/-G0`CqCI'D/' 8/#8KاF0`CqC,#HD0`CqCX/#XKE0`CqC_8,#8H'D0`CqC# ?/<Gb#_#G  hi//`[#cC@ZkG㳬ñ(k"TG[@1"@ZkC///k"tGTG[1"/@Zkñ/k"TG[1"@ZkC///k" tGTG[1"/@Zk#/k"TG[1"@ZkC///k"TG[`1"@Zk///k"TG[01"@Zk///k"TG[1"@Zk///#x"TG/ ,i`[@ZkGGGb#_á 4n[4G@Zk< /< //<//!G/GH]P]X}`hpݤx=]}ݥ#k/GGGb#W_C!c_4j//[4G@Zk</GJ_?!#4o/[4G@Zk</ /á//dg`$,/Dg`$C*[,_"tG@Zk$#G///-I XaE/` 0A // 0@ 0@ 0 A#!D"_Ce.Gb#oJD_$GTGTGb#p,H/_Gb#_<xæ@5DB@DDvGGG!b#ܙ_Cm_4jk[4G@Zk<a/T#(^~0^8~@GGG> ^~8FâGPb#_= tGG b#@C D-$+0) CR"&@q ]0BG =s3B }&^$ =} !B 3B !B /G=b#_T&#8 D# [//"$â֢// 6?V_GtG0bp^/""TGa1"[@Zk4G96$#Q@ q13tB13B/RѢ 1R1B1QB#FFGb#G =GG_Ӭ =GGGb# @@ D/;_ӬC4GB @//4``[@Zk_ CTG(]0]8}@P#/k/// $0_"4GPh{#/ qk/#C`BTG^~D ^(~08@޴HGPX>`GGGGGGG@b >G//Sh^GG4Gb#G^GG/GGhb#/W_("GGGTG8b#1"n_GG4GȖb#=^G///8(4Gpa!@P?@[/@ZkGGGTGX8b#S_GG4GȖb#"^GG4Gb#!_G///=B4G"7 rF [//@Zk8G4G`[@ZkGGGTG8b#)_GG4GȖb#/^GG4Gb#_Gr=G!A 0B!! @ A/ @///GG4G؏b#^ӴG4GGb#%_G GG4Gb#ʉ_GG4GȖb#^GA////GG4Gb#1_ Gb#砥@  BG_GGtGb#D$(/ 0 )))1A!'!BG^$dg@ @d@eGGGTGb#_GG] ](}08@ݤHPX=`p#k/#G^G~ ^(~08GG >GGGCb#/#^G//G]/GGb#/[_("GG4Ga[@ZkGM/=(B4G"1 rF [//@ZkXG4G`[@ZkGGG(bTGXb#/S~_cG4G[@ZkG(=G!A 0B!! @ A/ @GGG]tG`b#_GGG4Gb#/_G/G0b#U_GG] ](}08@#/k///#CGG ^~G(^0~8@H޴PGGGGb#>^`_G/G/ `H"4Gq[/@ZkeGb#6_GG=GtGb#G_G /`GG4G8b#_G///GGpb#_=GGTGb#C/ ރ_4GTG"& &4G$EG`b#R( FF^GGG""B"Gb"0b#/^=G00 $00B"1#B(Q.F"QJ1"FQ.VJC8Kr1@JGQ.YJCrQ@JTG;vKrG}Q.QJCqq Jb&HDGݰNf^GGGTGb#_G""B"b#_/% //00/ D /@///  բ V /_//GG4Gb#^`GG8b#4G_GG ](]0}8@HݤP`#/k///#2F~^^~ (0޴8@HGGGGGGG/G/GGb#/_G//G/ `"4Gq[/@ZkhGGtG/ pG/`[//@ZkG /`GG4Gb#ɇ_Gs///GGb#_$GGTGb @@ //e^GGGTG b#_GG4GHb#/_4GTG4G  "$hGb#s( ggȲ^GGG ""GGGxb#/^0GGGb#_' //0Р0/ & / ///A @r ` 4 /?//GG4GȠb#^//`GGb#4GU_GG]]} (0ݤ8@HP#/k///GGG{#G.//#4G^~ ^(~08@޴HGGGGGGBc/`F ] b#YG]@G S/b#CeEG}~_Gp"4Gb#Q^GGG4Gb#_ :# ,,0A0FHG4G-b#/;V@HGGB"Gb#GG^GG4G b#G/߆_GG4Gb#,0/o^ /Gb#y_Ű/ &C Q$eG b#/`$4BYB/_$GG  @""@'.}FJ! pF}.JC6Jp1JFݲ.JCpQJ9v?K0G=.JCaq HTG";~KaG}bd^GGGTGpb#Ɓ_$G ,@"""# H 'D .2J'F `.tJoF`.JF.JF / K@@#@7@CzG@b#@G////w_GhhdCdEâ0BŲpCpEttpt4G(Gx|峀峄b#/%@(G""tGpb#tG(c&@G(""G8tGpb#[&@"GGtG(pb#<1"R&@@8b#ll\C\E`G`d_hhdd$%G1Q.QJ1"GF/.J%F G/@GGG b#_4e GGG b#`D//_ e`T%4 DG/  ///0 Q@r`/ GݢGŲ(\`G4Gb#΅_GG4Gb#,0_^GG] ](}08@ݤHP#/k///#C^~@4G ^(~08@޴HPXGGh~GGG`>GG~@@`F@4G:`4G7/Gb#@GtG//DGhh`Ģ`DzDDHDHGLLPP/TGh`]Ǡ@GGpb#ږ_G8"4Gb#^GG GHL4GP糘b#[_4G/,#G4G8b#,(0#0(H///T@HGGHB"GXb#GGR^G ǰHG4GGb#LP5_GG4Gb#,0^4GGHb#ј_gb# ( a$ $'GQ11QBY?B/ _$g"GTGbc#`@`""`@'` ,]_F H AF] ,3HC5Ja1 HF ,6HCaQ H8vKG , HC`qH:^K@G]G/b^GGGTG8b#/#_$gb#c,#"c"""Hc D.JFC.SJOFG@.JF.JF /Kd@##a@7 CYG#G`_=GGb#g'_$gc,Hc D #.#JeDGG/`///GGGb#6_4g GGGb#`D//+_ g`T'4 DG/h]@ ( 12 //q `5/? GǰH'H$LgLdP'GP$HLPG4Gb#/g_GG4Gb#,0/^GG] ](}08@ݤHPX`#k//#GGG~^GGG#X{# ]G^_G] #k//#~^{#G#7@G] #k//#^~ ^(~@08@޴HPX>`GGGG^GG 4G ///4GGG4G88b#[W@GGb#;@G//tG/4G(G b##@(GtG0""b#tG($@G(G(""8tGb# $@`"GGtG(b#<1"/#@@b#G<_G4GXb#hhC"D////^GGG(4G0b#_4Gİ// GGB"GGb#/^=G4G0b#  0G (䳓_G//G4Gxb##^4G/Gb#-_Gh0BcdhâaFdlGb#l\C\D``_$G , H 'D @.@JDG/ GGGb#_4$GGGb#  D/_ T4DG/GGE/!$ 1 1% l /hcGGGb#tG ` #// ,Ѣ/7s_d# Dd)?D R dG` 4G@b#^d G(\G4G0b#`_G//G4Gxb#^GG] ](}08@ݤHPX=`p#k/C#@^~4G ^(~08@޴HPXGGGGGGG^ ~/ G G4G8-b#.V@Gb#G@G/ /}`eG4GXb#"/^GGG4G0b#/_ /`,#,(0#0(GGB"GGGb#^G ////G4GG0b#_GG4Gxb#,0*^ {Gb#5_/`/  p }Gh峬%b#eG_ ` Gb# _ //Gb#_$ec,Hc D #.#JeDGG/`///GGGb#_4e GGGb#`D//ߐ_ e`T%4 DG/G`=C`@5 BFPF/ h sf`/// բv/  /GG4G0b#_GG4Gxb#,0賮^GG] ](}08@ݤHPX`#k/#^~^> ~(0GGGGG`{#@G/G%/ `"4Gq[/@ZkdGb#R_ /$=G4Gb#r^/`GGpb#4Gс_G]] }(0@#/k///GG{#ð#G^G~^ ~(08޴@GGGGhb#> ^_GG_/G =GTGHb#^%_GG#G=GtGb#^GGG4Gb#_GFGb#_ӴŠGG4Gءb#///^GŠGD3`1GbGG=b#tG/^cGG 4G[/@ZkGG4Gb#f_GGb#_ӴeGG4Gءb#`///^GeGD "qG4G[@ZkGG]] }(08ݤ@P#/k///#G^G~^ ~(0GGG >b#/3_@"GGGTGPb#h1"Jv_G, =Gb#/ @GGGtGb#?^GGG4Gb#/ _G/G(b#]_ӴG4Gb#///C^GDG_D dGG]] }(0@#/k///G{#/#^~ ^(~08@GGGp{#>G ^~w@G b#_G//GI/ `@"4Gq[/@ZkeGb#+_= %%G 4Gb#^G%G4GGp.b#?DGO@ӴGb# _ 4GD $$$ /$ //G4GGxb#"^/`GG0b#4G_GG] ](}08@P#k///G{#/G4GG {#///GGG{#G~//GG4G{#Gv//#4G^G~^ ~(08GGGG^b#}_G//"Gx낤GTGb#1"cu_dG4G[@Zk/GG4Gb#k_G4G0b#//(_ G4GGp.b#wS@@Gb#Gq_G]] }(08@#/k///#^~ ^(~0GGG{# >G_G/ +/B4G "rF [@ZkGhb#Z_ =/ #GPb#_ ///T#"0F=]@GG4Gb#/_G] ](}0@#k///#CGC^~G^ ~(0GG >G<@G//8 b#_GG2/GGtG =b#^GGG4Gb#_G!GG4Gb#|_GGG 4GPb#/^GG4Gb#_G Gb#D QQDBВ_GG]] }(0@#k///#^~ ^(~08GGGGG~ {#_GG, `@"4Gq[/@ZkdGb#_ = $ Gb#'_ =DG4Gxb#^/`GG0b#4G-_G] ](}08@#/k///G{#/GGGGG{#/GGG4GG{#/#C ^~ ^(~0GG{#G >)G7_G// !/#(b#=G]_ = #Gb#_ ///T#"0F=]GCG4GPb#~_G] ](}0@#k/#G~^^~ GGG ^~ 0#/k///GG4G0b# R@GGPb#]]}G 0#/#G^~^ ~(0GGG{#^& G_GG `dGhb#_GPb#o_ =D G4G أb#^/`GGb#4Gu~_ G]] }(0@#/k///GGG{#///;k/4G  @#~^[^GGG:@?@AGG2b# E@Gb#Gz@G,b#GD@G9b#Grc@G8bGz`^Ghb#G@GPb#G^Gؙb#G"^GXbGh^Gb#G@GhbGf@Ӡ4GG] @] #k/ G /-#~^G^GGHb`^GGb#>_GG(b#^GGb#^GG b#A@GG+b#EL@GG)b#D@GG6b#]c@ G]]  #k/#~^^~ (GGG(`_G//G4Gb#/z_G//S_GC ($GTG48#G㳼b#C/ /// @"4Ga[@Zk#GGTGb#/ /// @"4Ga[@Zk#GGTGb#/ /// @"4Ga[@Zk#GGTGb#/ /// @"4Ga[@Zk#GGTGb#/ /// @4Gd[@ZkG4Gb#/^G4G H"4G X\`㳬㳰㳀b# òDTdòòdò/~_\TGG7b# wV@\GTG`G7b#/nV@`4GGb#/?_ӄG4G"H-b#/ G]]} (0#K///G]]} (0#/k///#4GC@B^~TG^ ~(08޴@GHP>X^`GGGGGGGGGGFFb//Z^GG4Gb#G ^ G4G/Gb#_X4G#pa!@P?@[@ZkGGGTGX b#q_GG4G`b#^4Gp/GG4Gpb#^ӴG4GG(b#y_G GG4G`b#^4GX/GG4GXb#o$_ *Gb#)@  ) BG*ُ_=GGtG8b#&E$C/@ 0 *J*QA!)!BG^$à @ & *A&@GG4Gb/o`^G//GGTGb#6y_/BGG0b#G R"_GGGTG0b#}w_GG]] }(08ݤ@HP=X]`p#k//G4G 1 B P// DTG/ 0 @D p @`FpPD P Q@D 0 @TD/`0 @X\D` P @// H `0{ Ha///PDD/ hP// tD/`p @h6H `0; 4G81lq<tx񳔖Hl //lPH`0 d񳛶H "`h FhvH`h0#;F h0Pk//#G4G^~^ ~(0GGG{#>G w_G G8b_^GGGTGPb#x_G4G03b# $///GJ@Gb#m_ G4G8b#/ G///^/ 4GGb#Go{_G]G] }(0@#k//#^~ ^(GG> ^~ /G] ]G(0#k/b#_G/= ]}G]b# ](G0##^~^ GG{#> ^C_G G]] G0#k///] }Gb#]]GG 0#e/#^~ ^(GG{#^ ~L_G G] ](G0#k///= ]G@b#}G] ](0#A/#^~ ^(~08GG> ^~///G] ]G(}08@#k///GGTG`b#^GGGb#/{_GGG4G b#/^//GGGGtGb#Ex_GG G4G b#^GG4GPb#z_Ghb#_= ]G`b#}G]G ](}08@#///#^~ ^(~08GG~ ///G] ]G(}08@#k///GGGb#?^GGGb#}{_GGG4G@b#j^/GGGGtGb#w_GG G4G@b#Z^GG4Gpb#Yz_Gb#_= ]Gb#}G]G ](}08@#///#C^~ ^(~0GGG> ^~ /G] ]G(}0@#/k///Gb#D_G=GTGb#Rx_G/Gb#/o_ =]Gb#}G]4G ](}0@#R//#C^~ ^(~0GGG> ^~//G] ]G(}0@#/k///Gb#_G=GTGb#^x_G/Gb#/3_ ]}GG](}b#G ]0@#4G//# ^~(^0~8@GGG> ^~////G ](]G0}8@P#k///ݢG b#_GGtG =Pb#/^G//GGGGtG8b#/w_GGG4Gb#/^//Gb#݌_=]Gb#}G ]4G(]0}8@P#///#C^~ ^(~08GGG> ^~////G] ]G(}08@#k///GPb#p_GGTG0b#B^G/GGGGtGhb#v_GGG4Gb#/3^//G8b#_ =]G0b#}G]4G ](}08@#k///#C ^~(^0~8@GGG> ^~///G ](]G0}8@P#k///Gb#/_GGG =]b#^G//GGGGtGb#/ov_GGG4G0b#/^//Gxb#1_=]Gpb#P}G ]4G(]0}8@P##G~^G^GG#b# ?@ "G]] #k/;4G/#~^G^GGxb# ?@G]] #k/#G~^^~ (GGGHGb#$/ >@4GGb#/>@G4G"b AG"4G@b A$4G"GbTG㳄# AbXB"pc(Cd#HB dlP"D $$HĢL "@"G CC"h##C(d,0$4Dcò#!8<@$D#"R"/Gb#tx#|c#4GCG]]} (0#>///#4G^~^ ~(GG{G >8b#/>@ =D <#/ b<cGG(b#]]4G }(0#o>///#4G^~^ ~(GG{G >Xb#/W>@ G4GGHb#]]@D }(0#/K>///`;4Gtk/#4G^~ ^(~0GG{Gb#->@b4G4G,#Gxb#,S=%>@G] ](}0@#k/x;4Gtk/#4G^~ ^(~0GG@{Gb#>@ b4G4G0#Gb#0S==@G] ](}0@#k/#4G^~^ ~(0GGh{Gb#/=@4=4G "Gb#4#D=@G]G] }(0@#/k///#4G^~^ ~(0GG{G b#/=@8=4G "G b#8#D=@G]G] }(0@#/k///k//k//k//k//k//#4G^~ ^(~0GG({G b#y=@#4GG b#=/s=@G] ](}0@#k///k//#4G^~ ^(~0GG`{G b#Q=@#4GG b#=/K=@G] ](}0@#k///k//k//k//#4G^~ ^(~0GG{GH!b#!=@#4GG8!b#=/=@G] ](}0@#k///k//k//k//k//#4G^~ ^(~0GGH{G!b#<@#4GG!b#=/<@G] ](}0@#k///k//#4G^~ ^(~0GG{G"b#<@H#4GG!b#H=/<@G] ](}0@#k///k//#4G^~ ^(~0GG{G8"b#<@L#4GG("b#L=/<@G] ](}0@#k///k//#4G^~ ^(~0GG{Gp"b#u<@$#4GG`"b#$=/o<@G] ](}0@#k///k//#4G^~ ^(~0GG({G"b#M<@ #4GG"b# =/G<@G] ](}0@#k///k//#4G^~ ^(~0GG`{G"b#%<@#4GG"b#=/<@G] ](}0@#k///k//#4G^~ ^(~0GG{G#b#;@ #4GG#b# =/;@G] ](}0@#k///k//k//#4G^~ ^(~0GG{Gh#b#;@#4GGX#b#=/;@G] ](}0@#k///k//#(;4G^~G ^(GG#b#;@ "=4G(BG#b#!;@G] ](0#/k///k//#4G^~ ^(~0GG{G$b#;@(#4GG#b#(=/{;@G] ](}0@#k///k//k//k//k#~^^GG#G@"! /! BT"$@l:  D|GTG> ~(H^P~X>GGGTGlBp""{#08@/S>@dG]] #/k///Gk//$k/$k/$ k/(5B/k///,C/k///0C/k///G4G/1#^G~ ^(~08GGG> ^pb#~W^ #GGGb#4G ^GG4G0b#^,GG= ]}Gb#b^,G] ](}08@#k/#SF ^~(^0~8@H޴PGGGGG>hТ GGG/#// ytG/`[/@ZkGG=GGGb#^b,4G$(#0#Cs G==[]@Zk0TGTG"TXp 1"`[@Zk =} 4G=$#(c,0Tð##^///GGGG(,cTG$b#Ή_$GGTG(b @ /Q^GGGTG`b# o_GG4Gb#///_4GGG GtG$cGb#s( ff_(à=@/ ///GG4Gb#G_(=@/G$4Gb#p_e04G[/@Zk ݠ]]$ð(C,0CG ](]0}8@HݤP`#k///#^~^ ~(0GGGG$c>G`3 #G@b#TG*_G(btGG=GG^ "G4GGa[@ZkG]G] }(0@#k/P#4G^~G^ ~(08GGGGG@b#v_/cGTGXb#G5(08 F2 cX`F `(G/x_#4GG(-//GGGTGXb#x_GG$GTGXb#(w_G#p"GtG Xax1"`[/@Zk d4G(0/GGGTGXb#w_G/h#  %G}"GGb#/ 0EX@F/ @4E@%/_G4G=GTGb#^DeG/G]] }(08@#k///p"GtGX`X1"/`[/@Zk dGh//GP{#TGKw///#G~^G8D^~ (0޴8GGGGG!pb#v_G" #N  1"KTpA@GGDD$#// ! #GGTGb#>?_@6/XDGGG#Gb#v_G #"' 1"$Tp/@GGD$#// ! #GGTGb#_@/" 1"XeGtG/`[/@ZkG]]} (0ݤ8@#k/#TG(^G~0^8~@HPGGGGC#=;"b#]B@ӡU@C`B?"DGGb#dR" G-_ dGG]"=tG@b#/_G4GݢGl"4G`]8Db# @c]޶^G,3G/B_//XD}ݢl";#`GG4G~޶G]0!b#B_ӐGdG@htGb# #l"/ #// ,/T_dDdp=pG 4G[/@Zkp//G4Gd[@Zk/`"GtGXd1"/`[/@ZkG`4GHb#>A_G(]0]8}@HP`#k/#GG~^GG^~G8D GGG 0Gl"Xb#,9G/3>_ //XDGGl"##GGXb#0!%>_GdtGhGb# #l" #/ ,/T_d# DdG]]} 0#k/Xp/"G]]} G1"0#tGk//#SFGG~^GG^~tG GGG;Xx@1"`[@Zkd /G]]} 0#k/GGGb#G8D/#l",1?E_ //XDGGl"#GGb#0!1E_Gdh/ #?#?,GtGb#l"/P_d# Dd///Xp/"G]]} G1"0#tGk//#GG~^GtGGG8D^~ (0޴8GGGGG%b#G u_G #" 1"T //PTpF/@GGDH$#// ! #GGTG0b#W_@:/XDGGtG'GGGb#t_G #"1"( //$Tp/@GGD$#// ! #GGTG0b#+_@/" 1"XeGtG/`[/@ZkG]]} (0ݤ8@#k/k/// 0#TG~^^~ (GGG PGGG8b@/a^TG0#// Xq0"1"`[/@ZkTG"4GTCLG4G8b#g^5G4GGPb#^?@<<4G#Gb#($lcD`(P/@G4Gإb#*H/'$#//# !/_H4GGPb#H/$c/3?@H/#0"TG1" Xa`[@ZkTG 4GTG]]} (0#/k///h0#TG~^^~ (GGG PGl"b# @0/ ,/Oa_d# Dd# C/@<r//`<20,G4Gb#/</>@<C/@c//`L# LCG]]} (0#/k///#tG^G~ ^(~08@޴HPX>`^hGGGGGb#^"~/?_7 ,GGTGp""0"b# H, /?@#" Xa1"" 1"T`GtG/`[/@Zk "4Ga[/@Zk G4G`[/@ZkGG4G0!b#z>@G/#"TG Xah1"/`[/@ZkTG 4G "Tð#qG4GGl"GGG#4Cb#/O_Ӑ#G8 D d CCE"&#f#"C@F`.JF.JFf"/K GF/G[Kb#MG/{@&,0Hx.Dw &.3JGGGq G4GG0BG_#G!1 @#//GG4Gb#$.G$J/& V_ G"#GtG TaH1"/`[/@Zk// "GtG #(1"/ Ta`[@ZkGG4Gb#_G4GGtGb#:^h#GGG}Gb#G/ #// # ,Q@4CuT_d# Ed gG4G[/@ZkgG4G[@ZkDgG=DGGb#),""I# )H)!/D i.tJmF`.JFG/)/:K-G I.@JxDG4GG/),)H/ #% 0BGGc_ G"TG$1@h1"Xp`[/@ZkTG 4G4GT #d[@ZkdG G"GtG,1"H/ #// Xa`[@Zk GG4Gb#/1 , H/-///_G#"GGG! Ta1"/`[/@Zk//"GGG #1" Ta//`[/@ZkGG4Gb#_G BGG4b#tGn^jG4G[/@ZkhGG}GGb#G # #// ,Q@4CS_dDdj[G4G@ZkjG4G[@Zk%EjGFB]GtGb#K@4#/^ G// #"]GG Xi1"`[@Zk4#,)/4 ///$ GGTG0"b#)/=@$)GTG0"b#AE/  !/=@///)?#TG"GTG Xa`1"`[j@Zk 4G GG4GGGGpb#^ G CGGTGb#@ à W^ /  G /G GTGb#^   4GG #Gb#c h//_ #G/[ #//W ,qU`C0BGGGG+_àG GGGGb#G&1@ð/ #4C/Q_dàDd///G ¤GG4#Gxb#N_f//G G4G[@ZkGG#G4CGGb#aQ_dG4GDdf[@ZkbGG4CGGGb#/OQ_dDdU///àDOC@`#X D/ H//DG4#GtG0b#B_G G#GGG0b#NB_3/GGtG4#b#D_G G#GGGpb#/?D_ //GGTG""0"b#<@GG4GTGФb#^BG?"GGb#0R"_GG#GGG0b#B_ ¤G4Gf[@Zk] d@4G[@ZkG] ](}08@ݤHPX=`]hp#k/@#tG@^~GH^P~X`h޴px>^~޵GGGGGG,b#4G~E_GG #GGtGb#G0sE_///G TGPB#,h(!8 F\ 0!//X hCE/T@///0kGGb#H`K8k<+0E_ DGGb#/<#K8k<+,E_G48 4G` b#2;@GGTG`"" b#/@@G+GTG b#@@G 4G` b#;@ G GG/GGGTG`!b#!5<@//@BGR"?"G<b#_$k//,Z/0ȡGTG""`!b#Q8/<@8G""`!b#TG <@/c `E/>`áG,H8h<(Gb#BE_ӭ@@G]"ETGG`b#,8( G^ G7 G//f`/GGGTG`!b#!;@/m//`GG0HG0b#_jG4G!E E[@Zk$8DGGáGtGb#G0/D_G5@"TGh1"Xm//`[/@Zk!4GT#G@]H]P}X`hݤpx=]}ݥ#/k///h#^~ ^(~08@޴HPGGG>G40բ,//$( ,5 0 BGGGGXR"Hb#_hG]"tGG=b#ˈ_GGCGGȡb#6^=G4Gp G[/@ZkTG 4GTð#GGTGb# /^//D#"&s" $C@R SB2v@J`85JF8//8'#F8GGGTGhb#U~_GGGb#TG8D/^/GGGTG`b#^ /#,/0!// ]=GGb#A_ -$D G_FF/%`///.#Q# }"JF.JF1/:K-G q/`K Db#1,0Hx.DG _'G G_FG]GtGb#^GGG]DGtGb# /^GGGGhb#tGGD/^G"tG]Te01"`[@Zk/ ,H/ ' GGGTGȢb#O^A$D  /: ///GGb# _$D/?-//G _F/&///,q"""1#HD/.J F .JF.JF/KxGGGb#c_$D G_Fh#Gl" G#TGb#\_d G#GTGؿb#4GGY_d㠈ðDd"a4G[/@ZkG] ](}08@ݤHP`#/k///# ^~GTG>"(^0~8@GGG4pb#/ DP @$p 4Bs~/Ok_h? Gl"#GtGb# #/ #// ,q`/U_dDdGG4Gb#_}_G ](]0}8@P#k///#~^^~ (0޴8@GtGGGGGp0G!1 @tPp0H"G4Gq[@ZkG@"TG#/ Xa//`[/@Zk4GTG TGðw///l#@#/M 0.}@0J`U$B$B'FF .J8F G(GGtG b#B @6/$,@$Ha"$@!@7`B5DF`'B1D) //@'BF/! .4G"D#J8F/=@/z/0 C %CzKZ#@@"@7@BF@F/ G(GGtG b# @GGG! c /?PBtGGGGTGp!b#G/7@(/(ǰG4G "XaG[@ZkGG]]} (0ݤ8@P#k/`#tG@^G~H^P~X`h޴px>^GGGG#GGGGGb#/@40/^G|âG[xV01B G|Cx/""TGɲ4#)c i$)lc/`4,0 ,0$/GG4GPb#7@ 4,0 ,0/Q@//rG`G GբG/VG/_1)bHBZ{G@[G4G@Zk///: /7.J/3//lGGGb#G4^ //G4GGG8b#^ GTG?"4GT##crG2@GtGb#I^ ///  G / 2@Gb#G_   ) c`hG //â,֢㢵/C> X/GXK#CDG @5X.XJD#C. x.xJdF#C/`///#-I#CE/8/8K$G#?#G0 @#2@GG4GGGG8b#/C_ G(1A// GGGl"G*@'.GGйb#'J/ #4C/#L_dDd///G1@GTG`b#6@G#Gl"4CGйb#GG/ L_dC@Ed///`GGl GTGPb#]"G4G(/^G//"#G4CGGGGb#H_Ӑ#G8 D d@B@r="@$FG4G[@Zk@G4GGd[@ZkGG#G4CGGйb#/K_dDd///G1@GTG`b#:6@G#Gl"4CGйb#GG/K_dC@Edr///#!Dl `#X F/ e//Ca@G4#GtGPb#S=_G//1@GTG`b# 6@GG#l"GGGPb#<_GGGtG4#оb#M?_G1@GTG`b#5@Gl"G#GGGb#>_/8CGTG$"`b#D(,H 8 D/".J1@ FD.DJG5@GGG4GTGb#^0BG?"GGb#0R"_G#Gl"GGPb#]<_@G4Ge[@ZkG@]H]P}X`hݤpx=]#/k///hp#^~^ ~(08޴@HP>X^`~hpx޵GGGGG~G4 G 00A@,!/ $a`( ,! 0! BGXR"GGGPb#o_hGt7p#U11 B Gp#tC/""/4Gl/GG4Gb#5@ 4G"!pGG [/@Zk///c&"/0`$. B4vJ%87JF8%lGGGЛb#GG/a^ GGGGGb#/^ G//TG"4GTC8*_'Z#:G8*GTG Gb#/^/E=G l!C/̡GtGGpb#!GG^%G 0 /@ GnE$ #GGG`b#G hC @ cG `#G ,Ѣ/K_dáEd0@ @?TG_"4GTCn/G"GGTGpb#/Oy_ȡGGGb#TG8E^GGGTGhb#^Әݠ/D&@D= $jG`GGtGb#/^GGGG$ tGpb#^"GtGTmH1"`[@Zk G0A/Gb# AO o!_hàGl"GTG b##/ #// X_d/ G#GTGb#4GT_dEdG]] }(08ݤ@HP=X]`}hpxݥ#/k///#DP ^~TG>"(^0~8@GGG4Gb#D @$p 4Bs~f_h? Gl"#GtG@b#/ # # ,q`/KQ_dDdGG4Gb#x_G ](]0}8@P#k///#TG~^^~ GGGQ.Gb#QJxDF/@^GTGb#^G4GGb#]TG]} 0#///4p#^~^ ~(08޴@GG`GGGӠ{# /G_Ӛ40@  C{¢TGG b#uB/sB/oE0CF ((&@G4G("b#/3@(TG# BBr B%B1B/=([@Zk#"TG Xa/`[/@ZkTG 4GTP=#((pBGGBzlZkâB(Ơ@/XK?=/GGGGtG@b#=^"TG/Xd`[@ZkTG 4GT4C4G RG"b#@(/7@0@///GGGb#_G G4TGxb#/G^4à Ơ/0@G]] }(08ݤ@P#k//k///#TG~^G^~ GGGGGHb#!^G4b#TG8D @cG,G]]} 0#///XDGTGb#c0/^///G]]} 0#k/cGTGb# FG^//pGTGb#8`D`^GGb#TG]]} 0#&//#TG~^G^~ (GGG4b#/;^"GHb#TG8D/cG,G]]} (0#////XDGTGHb#c0/^///G]]} (0#/k///GTGHb# D/^//dGGTGHb#8`D`/^//GG]G(b#]TG} (0#////#4G^G~^ ~(GGG> ^48b#/ ^ =G ]b#tG D GG]] }(0#//GtG= ]8b#m^G4GGb#]TG] }(0#9/p;5BUBtF` />k///k//KX F _& (;R"8<lPtx0| //8 F{p;/7 4G8p<0l0G{;[@;p{0;hPL0p0[{; Pp[0{0`PP; p08{H[;$P(px{[004p;,PD0[{H0;@Pdp[{PPT0Xp\pk/ k//GGG{lPGG{#3 @_TG/k///TG/k///GGG{#p4G_Gk///l0`[0;' (;0DP,00;x[; 480; <pP04G$(HH@LTPX\`d0hl0k///GGG{#0_G/k///l0(; [, 0;,0P0;8[; $ 40;HP0@[<0;0H(LTP8D04GP`d@Phl0X\k//GGG{#p_G/k0#G^~^ ~(08GGG>G/ ///aA:[C DC-@ ! @0F aA2SB DB#@ a! @[G/?(B?"rS@4GP@D BSG[GB@ZkG/G/ %@!"! # BGG]/iZkC$#!.UJ>G]] }(08@#k///Gk/0,]!B0H H`BQ.1"QJTG@1Q B!B- \^~GG  @Р;G Gq1HC>[@Zk/ð (BG=G " gZk/x///b#'7G_ H$H=$#@[ G$G[YG /`X[  =$O!@! HB7w5 u@0B B"FGG  4G/'; //Y9b#G_ Hâ((]5J00}B#[GG[XGjKY/[8]8O!@! H B 9Y+ yK kC !h[G4G@Zk// +G_0@ @  "G4Gq[@ZkGG@]H]P}X`hݤpx=]}#k/f#4G~^^~ 1@ (0޴8@GLGG {//_GGx¤+#/! /// 4G#%B P@////f`4G[@Zk GG 1@ /#0@ @@?xBr4G[/@Zkx/ ///dР4G[@ZkGdG4G[/@ZkG]]} (0ݤ8@P#/k///B?B`#GtFP^~4GX^`~hpx޴G>GG`GGGG@Ghb#3@GGpb#G _6HGݶ4J=#BGG[8G[/`X[O(B:IB 5 G( G/)GGtG`b#%F  G0@)0@)? // GGG`b#tGF/ //0@ #1H[  = !0J[((=p"[BqFpFF``X/[00}pN53B5J5@ Ȣ+/GGG`b#tGG///0@0@(?/J//GGG`b#tGF///w0@8#'H88!!H@=@=!"[ @'F!F[QF /`X[HH=!N(@GGG b#_GG/' (I@4G $ @Gb# c0`B c"QB_GGP]X]`}hpxݤ=#k///H"G4Ga[@ZkG/G/B_B@#GX^tF~4GG`^h~px޴>^~G`GGGb#GG 2@GGGG4Gb#2@@0@Gb#G_GGG4Gb#!1@//$,$Ha!@A!@!@]@2@ @r.R"rJ]@TGTFݲA71@7B.\BL"Ck/ D/ d#[KA.JA/$.d"3JA."JA.D"JA/"KA$/d#;KAD/"PKA$,d"3HA$.$JA B 1@PA 1@B7@/.\@$Ck// / "KAe/eKA/E/"PKAe.% aJA.%"JA."JA,E"HA/"KAe/%#yKAE/EKAc3aJ`B#"5I}= F[FF[/`X[  ݦN)B2 I2@  G, G/GGGb#tGF/J//.@J0@*?/ // GGtGb#F GJ.@// /#1I[ (=(!0J[00=p"[BqFpFF``X/[88}pN53B5J 5@ ɢ+/ GGGb#tGG/I//S.@)0@)?/ // GGtGb#F GI>.@// /#(I@@!!HH=H=!"[ @ (F!F[QF /`X[PP=!N)AGG GGhb#g_ G//cGy/GG4Gb#0@# G/ ///!0B B- A! ArF 4B B# ! AF/?b?#{Z@XAE4G CD[GC@ZkG/GE/ (@!"!!#aBGGGTGCeZk!BG,C,@,1AGwI .VJF>3eZk @!.VJ>`G/+@) I B4Gi @*@b# 0B CQ_Br"`G_GGX]`]h}pxݤ=]}#/k///"Gy4G[@Zk G/G/B?BSF/@/// //"5BԢ6B/B?B F// k/4Gk//Gk// k/0  1Bk// k#GTG~^G#PTGtG^GGG> >GG ;P{#4G(^P>GG08@H>/ &@G] #k//#GG? ~^G#P0 @? >(^[GtG >P>GGGG>G4GR"0{#H^8G@/%@G] #k//P#4G(^~0^8~@HP޴X`h>p^x~޵G GdG[@Zk"Gb#x1"_G4GG//"! /= G1%=0qe4$PB (1%G<qe@1%D1?B%rGd_F9// 9 G/ [ 4G@Zk"Cb# x1"G_dG4G[@ZkG%G]" %// ݠҰ0@ ݰ/r0B1"R"墷 B d PC4G[@Zk" Cb# x1"_d4G[/@ZkdG4G[@ZkG %4GdP?@[/@Zk" Cb#@x1"_d4G[@Zkd4G[@ZkdG4G[/@ZkG/ % G G ///G= B0 F/W PX@F/S@С/G GTGb#)!+@/0A A/?// AG4G]Gb#I@*@ 0@ 0`A A! oA/R//" G}i0A4G Ac [/@Zki4G[@Zki4G[/@Zki4G[@ZkiG4G[@ZkG7///4GGm[@Zkm4G[/@Zk ݡ/m0@4G @![/@Zkm4G[@ZkmG4G[/@ZkG / ݠ 0@4G =0@dM[PANA@Zkm C4G[@Zkm4G[@Zkm4G[@ZkmG4G[/@ZkG/(BGG G`Zk ݠeݡL`K?@ = GGN"NLXAx#LB,CD@///c=G4G " hB"+I//'@z8Z_CAaCqE@[@Zk(BG"GG`Zk)U@բA7@!/0 @F/ //0 @X@5D@)8)$# 0@A YAA?//"b#x1"_ 0A! A-/bG4Gc[/@Zkc4GG[@Zkc4G[/@Zkc4G[@Zk}c 0@4G @k![/@Zk///cD%4GB GŰG  ///e 0Ab# dA@ 1@š Aj[4G@ZkŠ GG / 0`Ab# A@ @ š nAj[4G@Zk }4Gݠ e($Ű,0j[@Zkj4G[@ZkG$(04<@G(]0]8}@HPݤX`h=p]x}ݥ#k/;#4G^~^ ~(GGGq[@ZkGG/GG//"! G4Gb#//(@"G# Dc#G]] }(0#/k///p[#4G^~^ GGr >G[@Zk "" b#/_G/GG//! B /? TG@ G]] 0#k///G0#~^^~ (0޴8@GGGGG ۤ/4#f4G%@ /[@ZkfG4G[/@Zk00@@ @ 4d4G[@Zkd4GD[@ZkdG4G[@ZkG]]} (0ݤ8@P#k///;#4G^~^ GGqG[@Zk"b#1"/o_G /GG//! B /?tG G]] 0#k//'GG;4G#~^^~ GGGa[@ZkG4G`G]]} 0#k/G4G`k//k///]#;4G~^^~ (0GGGa[//@Zk4GG0# /40@b#B@_0 @"a44G[/@Zk(G/$G/ ///(#0@b#%@@_$ @"a(4G[/@Zk@4Ge[/@ZkeG4G[@ZkG]]} (0@#k/11 B;&B(#~^\@m_GGGb#_GG@b#=G]"] }"G(0@##^~^ ~(0GGGG{#> ~@/G_GGpb#Gv_GGb#= GG]]" }(0@#//#^~^ ~(0GGGG{#> ~@/_GGb#GN_GG b#= GG]]" }(0@#//# ~^^~ (0޴8GGGGGG;`{#P1"_ &GGXb# Dv //7_ (&Gb#%F FG]_b#xDDDDVI /?G// & $&(FJ_Gb#_GGb#G_b#GG$&<_Gb#_@# TGGGXb#A@01BF21@BGA $F(&J_ b#G_Gb#GG_GGb#(&Gb_h/TGG$F(&_//TGGb#$&(F_G$F(&R/TGG$&(FK// Gb#/o_Gb#GG_G>GXb#_/ 9/ 6//GGG8b#G""_TGG"&"8b#x D D DG G FG_/TGGGb#G_GGGG""8b#_TGGGGb#_GG]]} (0ݤ8@#k//4#~^^~A B (@@B0޴8@H>P^X~`GG[//WGGTGGG5@CU@CzGN@XF'&GF@G G/GG" @j!`*$D4` /4#@1@G`*//jGGGG b`/_ //GGGGG b_ GGG4#@@ ///4CGGGG@ @"`b#Z_G0A "A A_G]]} (0ݤ8@H=P]X}`p#k/40#~^^~ (0޴8@H>P^XGG 0GG0G4G 4# G G%@!H/@///hjC/[DF/ @ [GG/@Ȱ{b#G_ 0 A BA( !A?00@ @@/0#4CG G"/ԢG֢//6 V/@v`0C C"/?0`B qB" G G/ /// 0 A 1AJ!Ҡ:4G= BTGR#//fGG& Ơ //f// `XC///G0B B 4G G/I@*8 G 0@ @)!//GGG G//4c0b#dB// _4@0#0A A@?G]]} (0ݤ8@H=P]X`#/k///FBGTG;@#~^?B:D^G+ GpQGrG8`GX`G#@x`G`G@G// @`1b#)"@0"B"G8a R"82"[@ZkG///  1B4GG]] #k/4Gk//#4G~^^~ (0޴8@H>P^XG4G3 1//. G GGGGGGDGGG bICZ/@Z:"/ 4CRRC2G_G/ G/ZGGb#EG@//_D0A "A A_GG]]} (0ݤ8@H=P]X`#k//G//D #~^0P^~ (0޴8@H>P^X~`hp޵xG4GGY@GGG4cG GfCK/G///' G G )B*5   20//Gb# LC͡"$mG`*.D/ !_? -/ Gb#_D//Gb#- 4MAG-N_//+G 0`A A hAǡ0A "A A////0#0@ @@?DGG]]} (0ݤ8@H=P]X}`hpݥx#k//G//01B#GB~^^~ (\B0GGG [GGCk/ //Ua@a@cG@/// cB t@cFä@///Ua@a@5a@d@UFAF#Dä@///11h@:1l@;x@4{@7#B7CCbC":F׃B@/;F8`F4F3F //GG"TGb#_ӱCN? Q"C"!a@!0"@B"0@3s@ Bk@2DaBUg@3DF!F5D#D/@///61h@71l@8x@ 7B7BC9{@F `@#C@F8@GFF //GG"TGb#_ӶCN? Q"#"!a@!0_" B"0@2r@ cBG1DAB4f@G2D7B"b#aFTGF /_ӴCGe@e@k@Ug@Gv@0DGTGb#1D"2D3D //Tj_ӡCG v@NG"b#TG/__ӡCGEä@///GG4GX8b#v@;//@///GG4G8b#v@G//,G4Gx6b#3w@G&G4G:b#u@!GG4G9b#v@//GG4G9b#3v@//GG4G9b# v@ //GG4G(9b#v@//GG4Gh9b#v@//GG4GH9b#v@//GG4G8b#v@//GG4G8b#+v@//GG4G8b# v@//GG4G8b# v@//GG4Gx8b#v@//GG4GX8b#v@//GG4GH8b#v@ӻ//GG4G(8b#+v@ӳ//GG4G8b#+v@ӫ//GG4G7b#+v@ӣ//GG4G7b#Cv@ӛ//GG4GX7b#ov@ӓ//GG4G7b#;v@Ӌ//GG4G7b#Gv@Ӄ//GG4G7b#3v@{//GG4Gx7b#Gv@s//GG4Gx6b#wv@k//GG4GH6b#v@c//GG4Gh6b#ov@[//GG4GX6b#kv@S//GG4G87b#/v@K//GG4G6b#?v@C//GG4G7b#'v@;//GG4G6b#'v@3//GG4G6b#/v@+//GG4G:b#t@#//GG4G:b#t@//GG4G9b#t@//GG4G9b#t@ //G//GGTG8:b#t@@G]]} (0@#/k////#G1 ~^:1!B^~7@C (0޴8@HGG!BGG[G$BPG ,// ///G]]} (0ݤ8@HP#/k/// k//?"'?$_#1@&{#! ;B!@'0@:@{#!FB0D?/11B" BO`P\^~GP>4GGG048H(,@$TPP`P_B@[@Zk<G0""b#c_ //#XB<Q?@+SZk//< ݢ/PH$B7/7KC/ X D/ @<(=F 2B1 J@@`` ///,@(}$;`K= G< Bɢ~ )IW7C !A!C B! B Gm/P=H}u@]"GGxb#tG3B.J/WJF_Gb#G_8D G$](I b#0BE*C cR"SB UB@_,4G b#H]P$0D@B'BH".J ꢡ 7@(} $(ݰz_$(}tG]"H=PGxb#BGF_GGb#_,8D G0A,==H]1QBH= J, TA*C jE`E `M `  J/@, 4G8`E`5`($0@(} mCr./ "GTGb1" z^$///$}("b#k 0A lA/`*_<]JA 0Ac @ @$()H=0B0EH=//(ݢ$///"b#_8]<@0=bGG/ ///8k4G@ [/@Zk00`@@ e@k[84G@Zk<4Gh/[@Zk]4G@G*! GGX]`]h}pxݤ=]}#k/#G^~^ ~(0GGG> ^[G$p`V/ G4Gu[@Zk"GGb# 1"_GF/GG//"! 4Gdd $(8@$C/@c{d= } $dPB4G ¦v[@Zk,Gb#"b 1"_cG4G[@ZkG///c(BGQ@QZk//,0G4DG]] }(0@#k///](0#~^^~ (0޴8GGG G,PۤG/@ p`/(f4GB [/@Zk 0@@ @"a(4G[/@Zk,4Ge[/@ZkD4àGG/De4G@[/@Zk40@@ @e[D4G@ZkeG4G[/@ZkG]]} (0ݤ8@#k/0#G4G^~ ^(~0GGG>{ ^/00G{[@Zk"Gpb#D"p 1"/_03/4# "TG0 @ @@ 0qDQ@[@Zk"// Gpb#p 1"_0@@7H0/D4G4CD#G`b#QQB=@] ]4#D0 @A0@P0BA4#G] ](}0@#k///#^~^ ~(08޴@HP>XG~8РG7 $15 0QGGG//@///@,0@LA@!U @(,dGG/`///0`C$GTGfOgCPpC@ b# $ B)1B 0DHBG@/,d0@A @! ///G]] }(08ݤ@HP=X`#k/// cGG8# `(d `,L[@F@}F/@Zk,D$0@@"MBD@BU@@///p# G^~^ ~(08޴@HP>X^`~hpx޵GG0  G$qGGGG`b#c_Ӳ//#4G4G!X D 4GGb# G//_8D@@5@8DC#1X F ,Ct@cӢ Bg/5J%GGW4k!DA  D'J`G/ 4G/s GG`//GTG b# BG*GE?F#@,âV6BM4Bv wA5//@-GG b#TG aA  mA/`J*/@///  0AAp AG//4G//_%G!V4J!  D"@s4G`////O"GF?F @,U5BQ4BѢ B 1 B 0 @ 3@!//G//,#Y@9@@@ YC@ CGs// GGTGl) b#/@ 8DG/  c,kL AH A A(CDb# 8E/T@ //P)N #G1c0`BPPB 3B 4GGG/_G(b#_ 4G4G_!cGb#E)8D# 0@AaA8c I AG4CG_G(b#/_GTGG) b#7@8DG0A+1`A8c# I QB1CEEl8E`/_c0B B/X// "P"!GbTG1"v^K/ cGG G?ED[)8I/@ZkcGGGb# 0`A A `4á///_G(b#_,H AH 0@AH'I-A)#/-Dá//84#0@ @8 @@/GG/GG/_"C// Gb#_//8CDHHA/s//ccU`@G]] }(08ݤ@HP=X]`}hpxݥ#k/# ^~^~޴Gh GGGGGG{#/]//Y_VðBG4GbMZkBG4GbMZk=BG4G @rP@B [//@ZkG?  #7/!BGGAGGyJOZk/B"GXKG?=A= OZk,GGb#GGH<#$Ѣ/;_//GGGb#_G "E4G/d[/@ZkGG]]}ݤ#k//#~^^~ (0GGG#GTG0Q.QJ D// 1"0.JF 1"#// FtG1 /@#/FG`1"#// FG@1"#// FG1"/#/4G// D"@1"#.J-D/G1"#///x,D4G"/@x/,DTG1"/ #p/Gm// D"!@1,0H,D/G"^///-DG@"U//-DG"/ L/tGI// DB@1"#1,1Hx,D/G1"#:///,D4G"/@0/x.DTG`1"#)//,DtG@1"#!//8-DG1"#//,DG"/@/-DG1"/ #/G//X D"!@1,0Hx.D/G"///-D4G@"//.DTG"/ /G//x D*@1"#1,1H-D/G1"#///x,DG"/@/x-DG`1"#//-DG1"/ #/tG//xD*`1"#1,1Hx,D/4G1"#///,DTG1"#//-DtG"/@/-DG1"/ #/G//8 D? 1"/#.JxF#0""G//1"q"#,H!1 @01@2@@7#@7B7AB0DG2D D^c.J71B81B9B7B7C7!CFBFFP/s"cs/sKs"%1@21@!@@7@7CB7!@DD$D/> c.J81B91B7B7C7#C7BGBs"GF/.cS/SKs"21LC%1HC$FCEC7CB7@7@EFDD/c,H91 @81@7@7#C7C7B8G@s"GF/c.J21B%1B:BB7CB7@7ACEFDDG1@TG` b#@GG#G@b# G/_///1GGb#GGx D/ C/_ //" G 1"b#=_G]]} (0@#/k///#~^^~ (GGG#{#0Q.QJD 0/ G_ GGb#GxFG C_ / D? Gb#8"#1"_//"G1"b##1,1HD#@1"#.JxF0""_/G1"b##_?"Gb# , H/D # ""/_// /D""b## q.0""pJxoF`G_ӻ/"b#G_4G"b# 0.0J/F cG ""_Ӧ"/Ջ@@u@@@u@DSFF5@DՍ@FU@@u@DFu@@sFF5@F@F5@FՅ@Du@F@Du@FU@D@3Du@D@2D@D@5DD@2q@S DFBGi"18\\B8C/k///G&//G"//4G//TG//tG//G//G//G //G//G///âG1"b##G/_+/6GGb#GGx D/! C/_//#Gb#/ TG_ /TGGb#GxFG C_ G]]} (0#k//#^~^ ~(0GGG#0Q.Q#QJD1,:Hx$D G1"0Q.QJDg 1"0Q.QJ;@01 @!1@7aCB @pGFaGQ/~ ///21 @G:@K1"@B#@FFQ.fGGQJ:PC1"!@21@31 @7!@@B`B2DfFd@#Q.:@K@C&DGQJ1"0@21@:[C31 @7B@B`BFfFR@#Q.:@K@CFGQJ>:AC1";@21@31 @7aC@B`BrGfF@@#Q.:@K@CfGQJ!@21@:PC7!@@BrG/?1//""Gc1"?//!@7!@5 /ZZC1"#ZCQ.@:FCQJ1"4@7B/#.ZZCZC@CJ9@:FC1"7!C/ #.ZZCZC@CJ0@:FC7B"xD_"CG1"/G  ///""G1"Hb#5_"GHb#G C#TG_///,H D/K4G1"#.J%B'FG*]+BG6Hø/B9q+BB//\ {_C=TGC/ c.JoF`C3///GTG/G4G b$â"ò_#.J/D?/#G4G b CR"Cq_G#Gb#x_,HDððG]] }(08ݤ@HP#k/#TG~^G^~ (0޴8@H>P^X~`GGG;"GHbm^GG ""TGHbm^/GGD(""tGHbGGm^GG""TGHbm^GG DP""tGHbm^ ////GGG""tGHbm^GGh""HbTG@/m^G//G ""TGHbm^ӿ/G'b#<_ 1@@E \@L Ck//GGTGX""Hbjm^7/GGTG""Hbbm^//GGTG`""HbZm^'/GGTG""HbRm^/GGTG0""HbJm^/GGTG""HbBm^/GGTG@""Hb:m^/GGTG""Hb2m^GG8""HbGD Gg'm^GG(""HbtGDG//m^GG""HbtGXD Gm^NxDGG""3 0GtGHbG Gm^0A///4'GG`""HbTG)@Al^ GG""HbTG/l^Gb#*_GGJP"" jGHb0A A/l^0G A/_//D"GG $'(GHb8 1" A gl^//GGTG""Hbl^ 0@@ @!GGDtG""Hbl^GGTG""Hb$ GGV4 /l^$ /ĠGG@""HbTG@Ơl^G//G ""TGHbl^ӄ/GG""HbTG8E/l^&GGp""HbTG X E l^Ӏ"GGG Ff GHb 1"wl^dGGG""HbTG @/kl^G//`G ""TGHbbl^K/ GG""HbTG/Wl^@//KGGx""HbtG@/Kl^ K"GTGGHb 1"EF Al^ À"G@GHbtG1"/7l^ GG""HbtG/K-l^ GG""HbtGX D/ @//l^ GGx""kHbG@l^f 0 AA +A 0@A @A@/cGG""DtGHbGl^Ġ G////d"GGGHbG0A1" iA !Akk^ AG]]} (0ݤ8@H=P]X}`p#/k///#^~^ ~(GG@{#"_G/G5/GPb#_G b#G_Gb#4G_ ""pb# ,1" HGg_#4GTGGb#!@_Gb#/_G /G0b#_Gb#_G]] }(0#k/B?BSF/@ k/{#z//# ~^^~ (0޴8GG5GG{#G@"/-@@4 G 0 /4$0@pb#&B@_0 @h"a44G[/@Zk _"b#$(0c4dDDG&_G(4G`b#_GG]]} (0ݤ8@#/k///#[4G~^^~ (0޴8GGGr[/@ZkGG# /0@b#B@A_ @"a4G[/@ZkG/ G/ ///#0@hb#%@@_  @"a4G[/@Zk4Ge[/@Zk$e4G[@Zk(e4G[@Zk0G/,G////e0#4G0@[&@@@Zk, @/e[04G@ZkeG4G[@ZkG]]} (0ݤ8@#k///#G^~^ ~(GG{#_GG/Gb#_CG b#/_G/Gb#_Ӱb#_Gb#_GGG]] }(0#/k///{#/k///Gk/k//B?B Fk//TGGq/k///CBC#BB^~F ^(~GF08@>GG {#GGG ~_GG/=G4G 0b#8% @GGG=b#_G(b#_G/GG] ](}08@P#k//CBB#B ^~GF(^0~F8@H޴PX`GGGGGh{#G> G`v_ =G8 GY?&.(BG0b4G&J/7 AZk(BG4G0b/AZk@"G4GaBP@[@ZkGpb#//_G6/8B@GGGGxJ/CZk.8B"GWJF>=@=!CZk,EH<///GG4Gxb# @Gb#G=G_Gpb#/O_G//GG ](]0}8@HݤPX`p#k///B?BC#F?C^~F ^(~G08@޴HPXGGGGGGG~MGJ// @@Gb#:DGG/? _G/G9/G4Gb# @ӡCG`}b#4 D= 8hGC_@#Gb# A@:_GGGb#i_GGGG "Xb#_GGxb#y_G /GGb#G_GG] ](}08@ݤHPX`#/k///CBC#C?C^~F^ ~GF(08޴@H>GGGGGG ~EGB// @@Gb#:DGG/7 f_G/G1/G 4Gb#; @GP]GG4Db# 'ǰ8G_@à4GGG8b#F@&&//_GGb#G_G=GGGxb#"Z_Gb#G_GG]] }(08ݤ@HP#k/#G^~^ ~(G GG{#_GCb#_G]] }(0#k//B?B#GtF~^{#^~ G`GG/_`GG]]} 0#/k///CB#GB^~F^ ~(08>GGGGG {# ~//@J_GGGb#y_?$&G =V4! W4"G"`b#FG_GG]] }(08@#k//# ^~{#^ GG> ^/ ///_ @B= =B@""G]] 0#/k///B?B`B#F~^GF^~{# G GG_//`/GG]]} 0#/k///B?B`B#F~^GF^~{# G GG_//`/GG]]} 0#/k///0 #~^^~ GGG{#_GG]0b#]} 0#/Gk//Gk// k/{#n#G4G~^ [({GHZkG]D #/k///4G{k///k///k///k///#G4G~^0[8{GHZkG]D #/k/// 4G({/_k///k///k///Gk//Gk//4Gk//k///k///k///k(#> /@h {@~^GS@GtG8{0]"?g^G]P#k//[;2k///0[2/k///[G2F|/k///[{3k///PGG;G(;"@#~^`pG #k///k///4tG 4S`k///p#h^~p^x~G>G ^ @G/ @///a/aKU!B!BQF ! 0@0@'@4GA/ D*B0 BAKUACACZF@! BzG@A.AJ*B0 BUABABrG@! BSG `a/aK*B0 BUABABRG@! B{FA/AKG]#ABXAF4@F;@!.#@!J9 //!B BU!B DrG0B! SFs:J B0B*@,@HZ#D<A.AJCUABAB! DsG{ZJD:.Q:J;F B0BZ#:>a.aJ! CU@@2FtG{H4F Z.RZJ[FZ>.JZ#?z.SzJz>} ""]"[ tG@ZkGG= `/// @0@vJ/ .JUJ@8AFF/@>@! A/G{K!"ZAKtG]"[GA?a.SqJ ""a>}[ @ZkGh]p]x}#k///[ ;{#R12//#(;`^~^~޴>^~GGGGGGGG G G`0 Ccn/8D///#$$8 I@(d=`C/ 0dSsC G3GG""G) I/@Fi/@Zk!//5ACG" DI @FG""GGG/@Zk //5ACG" DGFGtG@Zk""FGGGtG@Zk(1A"AU\AC/k///G""C/GP""?/G"";/G`""7/G0""3/G""//G""+/G@""'/G""#/G""/G""/"G1"G""/"G1"È"Gx1" G""/G""/G""FGTG@Zk//8EXE xE G ""/ /G ""/Gp""/G""FGTG@ZkGG4G b#/{ @ @G8""-G IXD /GG""ÈBG8""`R"FGtG/@Zk$GGb#G%_G@J""GG@Fj@Zk//5AC"GhEGtG/FJH1"@ZkGGb#G_ EG4G b#f GGb$@_ 1 @Ӡ @GG8""tGXFC/@Zk$c!+`@<` cA`A E////,`H, L"qHtH" #wHzH РAl#DHhH!D A< .PJF >l.SrJtFl>.VJF>,/Y8K:G,?L-J[I HEL= A ///,,pH 0A AA,H!0D,.WJ>F/@ZkG]]}ݤ=]}#k//x@#> /@h8[B~^G^~RH (0޴8@H>P^X~`hp޵xGG5BG GFA8D6DuA~TF7DAx@8DGGG!> G GD G// @s&s"`l;3F/ |{~ ¥΢}(B0vD@@AF}GCFD G &&s" lASG/`|a}=A G" 4Gb#/G@G2/0"G4GGba[/@ZkGG}"$GGGGGb/3f^ӡ@ /c@@TG0BDG[G@ZkGG GGGGGb/f^ӡ @D/?//@$*/ Q@(j=`B0SuB3 Ѣݲ1=!P]G_GGK g4G/ `Hb#////@ G&G0`@Ya@0`@Ya@0`@Ya@0`@8DYa@kC .E +8 D kCFK8@F @kCtF`8F/kCFGEGb# +/ H4G/@ G/`8D/8%vHGb#m@ 4G=Gb#, //@ /4G}Gb#l@ 4GGb#////@ 4GGb#/{@ Gb#H"$,̰0l1 1"E( /@ "_A8DD)D/ Tʡݱ/Xʡݱ/// b // k}è¤p} `[GTG/@Zk1//PX,G0(GGGGHb#@@D@@DD/_//@¡HbGGGGHb#@@E/`_/DG8""GtG@ZkG]]} (0ݤ8@H=P]X}`hpݥx#k//#X FGG~^TG^G#G*p;/tG X9#(08@H>%//pBTGGGtGGGG> (G8Z#08@H^///TG> (08@H~GGGG4GPGb#_G]] #k//`#h> /@h~^^~ (0޴8@H>P^XGGGGGG/$ (=B/00UBGGb#,_"TG ""GhB`[@ZkG4G`[/@ZkGG}"$ GGGGGxb/cd^ӡ@ /jA ATG0BDG[G@ZkGG GGGGGxb/Kd^ӡ @D/?p"0G""tG[@ZkdG4G[@Zk`Gb#_// G"b#_h ""TG[@ZkGb#_G]]} (0ݤ8@H=P]X#/k///`#h> /@h~^^~ (0޴8@H>P^XGGGGGG/$ (=B/00UBGGHb#_@"TG(""GB`[@ZkG4G`[/@ZkGG}"$ GGGGGb/c^ӡ@ /jA ATG0BDG[G@ZkGG GGGGGb/c^ӡ @D/?@p"hG""tG[@ZkdG4G[@Zk`@G b#6_// G"Hb#?_h ""TG[@ZkG b#&_G]]} (0ݤ8@H=P]X#/k///8p#X> /@h^~4GG^ ~(08޴@HPGGGGG(b#Gk@ӰC=@@& . JXD!/`$e/`(=B/0cCB ¦֢pb#G_hb"TG0c b01"[/@Zk/ "4G4GGpG[@ZkGG'p}"GGGGGbc^ӡ@/ ///h@@TG0BDG[G@ZkGG GGGGGb/c^ӡ @D/?hp0"G""tG[@Zkd`G4G[@ZkCGHb#D_G]] }(08ݤ@HP#/k///p#X> /@h~^4GG^~ (0޴8@H>PGGGGGb#@GGD@  .JXD $E@(c=`B0SuBb#GU_"TGG" "`1"[@ZkHG4G`[/@ZkGGp}"$GGGGG0b/b^ӡ@ /i@@TG0BDG[G@ZkGG GGGGG0b/sb^ӡ @D/?p"GP""tG[@ZkdG4G[@Zk`Gb#_G]]} (0ݤ8@H=P#k//G0/ k// Bk//C4G/?#~^^~ GGG[z[/@Zk"4Ga[/@Zk"4Ga[/@Zk"4Ga[/@Zk "4Ga[/@ZkGG/ B /G]]} 0#k/// {#/p"k///Gk/0G /k/// k//0"{#?///k///B?B#@F~^^~ (GGGG y///8B4Gz[//@Zk8"4Ga[/@Zk8"4Ga[/@Zk8"4Ga[/@Zk 8"4Ga[/@Zk4Gb# C D0â0IJ$$(C(D0G0,,/v@4GGb#//k@/4GGb#//_@/4GGb#//S@/4G Gb#//G@ / GG]]} (0#kC B#_B^~@F^ ~(GGGG/// "0`@4Ga[@ZkGGGTGb#%_G /@B@GG]xZk.VJ>G]] }(0#/k///3,GH+#~^G//Q/1" FQK Q/1"QK1,1"1H ,1"H1,1"1H ,1"HG]10B{# #///10B{#/Gk//C B#_B^~@F^ ~(GGGGh///"0`@4Ga[@ZkGGGTGb#%_GV/P`!`@G= #@ @GF;///..Q#s#@@ F"`FJWJ1"xJ"s"F>1/S.:KR[Jp;KPF"S>..JWJS"xJ""F>Q/3/PK{JY2K A@;G3?..JxJWJF>/_ C@ /q/.0@@ C@qKVJ1"wJs"F>/@.PJ>G]] }(0#/k///'P.GPJ@///.1" FJ.1"J1/1"1K 1,1"1H q.1"qJ@.1"J10B{#W///Gk//F 3@/k// 4Gk/q..F FqJJ1"" B/`1/p/1KpK1"" AB ..JJ1"" B / /0/K0K"1" 3CG/k///FG3@/k// Gk/1,P.F F1HPJ1""D/# q/,qKH1""D@q/,qKH1""D/ q/,qKH"1"D_4G/k///Gk//#~^GGG #/ G]G #k/@G]G #k/.J//.F"@FJR"F6&P/PK# r/rKR"" D/+ .J"/KR"F!/.J" R/RKR"F//@0,0H/.JR"GXFG] #/k///G]G #k//.. F@FJJR"1"F/'.1/J1KR"1"F,q/HqKR"1"@G@/ 2,.2HJ1"R"F ?G]4G #/k///G]G #k//A@F /= k/ 4Gk/q/,21@BF FqKH1"" @*)@//% q/,21@BqKH1"" @@21@B`q/,qKH1"" @@ q/,qKH @21@B"1"////@G/k///F C@/k// 4Gk/{///..F FJJ"tBvBJ1"/6/K6K B$/!/.KJxBtB8,T.J"1"8HTJ 2@/0/.0KJvBtB6,T.6HJ"1"TJ 2@G/k///M@F /I k/ 4Gk/;///,.21@BF FHJ" @4@`..`JJ @-,@.J(`..J @.1"J21@B"3@.JJ @@.Jp..1"pJJ @4@`..`JJ21@B" @/@q.qJ1"G/k///$P.GPJ @///QFD/@. J5F//. J 7F  / K !F `/ `K_Gk/7GGG/ #~^G@GG]G #k/U.UJ@/K///XFGG/@G//_5/"5K_G]G #/k///Gk//Gk//G]G #k//CGGG; #G~^^~ (G@GG!/X.wXJ/@.Jt@T/TK//8,GGw#8Ha@!.!JGD /_X/#XK?G/G]]} (0#/k///Gk//Gk//G//#~^GG #k// G]G #k/@G]G #k/. 4 BG BBF!/.F`B tBJ"/+0,0H"' ,H"#.J"0/0K"_ qB/ ///.0`B qBJ".JG]G #/k///G]G #k//G]G #{#/'0,G0H$ ///p/0@"FpK"/ p/0@pK" 0,0@0H" 0.0J0@"/ 0,0H0@?k//Gk//?B@B#D^~ ^(~08@GGGGGG-/`GG8b#s_&// bG_sGTG@0@[/@ZkG//GGTG(b#r!_G ==GxB@@G/_tZk.WJ>G] ](}08@P#k///?B@B#tF^~^ ~(08޴@GGGGG`{#/c_2//`GGb##_*// BGe_rG@4G0@[@ZkG GGTGb#&!_Gb#G _/BGGGtZkB@GG@/ tZk.WJ>G]] }(08ݤ@P#k//#G~^^GG G//G]] #k//'q.qJ/`///.R"@FJ/R"K2,R"2H r/R"rK.R"J`.R"J2QBb#'_//G]Gb#] # #(> /@hB_B~^F^GG ///G8=GH}"G{[^8=A@!."Q0J!>G]]`#k/B_B# ^F~GG0{^ GG>C[^=A@!."Q0J!>G]] 0#k//%0,4G0H0@`k/(DTGG/G//;D7JG/`F0DF `0@// 7`K0@0D`7J0@G /k///GGGGGCG Ck//G_GGGb_G/k///K0,G0HH ///0DP"9`0.D~G?D>D0F. 0"/`///' P.QJ"0@8F0F/ p/pK/?k//p/0@"pK?k//p/0@"pK?k//p/0@"pK?k// k//G0#?F/o@qm`.JY`By`B"DDD`B_F7.G">D?F ">FJFF3///5/ KDD. `B/ u/uKFFB).J?4G/k///p`BB.J?4Gk/P`BB.J?4Gk/0`BB.J?4Gk/Gk//Gk//Gk//[ G11 B/,@FGHO 0DR"(11 BJ`,HG 0DR"G11 B/@`,HG< 0DR"/11 B//4`,HG0 0DR"/11 B*`,H' 0DR" !@0D/`///!@R"0D!@0D!@R"`0D!@R" 0D!@R"`0D!@R"0DR"/G11 B/ PBk/Gk//B B#@F~^^~ (0GGGG/G"/bGG_sG0@4G[@Zk("0 0@ "tGa[/@ZkG /B@GGGzqZk.UJ>G]]} (0@#k//G61 BG #~^G5_Ӡ Bn//.FGJ"dF( 61BG/r4.4J"ZF61Bj/K"GQF/ 61BG/^4.4J"FF//61BT/K=F"K FF/6///BFFB> T.FBFBTJFB"XFPF!@F///K"GG/'@4,4H8D0D" / t/tKDD"/@.JFF"G]G #k///Gk//Gk//G61BG]G #k///B?BGGSFG4GGS@#~^G_/GKA/GGG_OGG"C@8D5 /CGCG;5.FCGC5JGC"8FG0F! /+`,H"DD/# .JFF"/`5.5J8F0F" /@,HDD"/G] #k// k//U.0 CUJ///G]G #k//#~^GG #k// G]G #k/@G]G #k/R G//.J"FS///CFG/S///BFB/7 0,FFB0H"8D0D$ /+.JFFB"F"0/0K8G0GF"BF /0,0H"8D0D /.JFF"G]G #k///0`B qB_G]G{# #B//G]G #k//G]G #k#G< 1,1H1"`{C@@@5`//!H.4H Fv H;gKgKB;@J1"D%1,5J;H6Hv`KJB1H1"B!JD.'HJ1"6H;HvJ4JvCJBD/ q/qK1"!H6Hv HB4@D/:@.JR"6///5Hr/1H@FvJ4JJ5B4BrKR"D%`.6gK!H5Hv HJBJR"6@1gKD`.'JJR"5H4HvJ!gKB'HBD/ `.JR"5H6HvJBBD/:`3.3Js"6 ///2H.!H`Fv@J1'J'J2@1@Js"D%.4J2H;Hv@JJrCJs"TB1'HD s/'JsKs"6H5HvJ4GJBJBD/ @.Js";H!Hv`K;@4@D?0JBp#5H>uG[[pGF``X/[~pO B #k/;# 4G~^^~ (GGGq FG[@Zk"G4G`cc@P@C@q[@ZkBGGGlZk //PG4Gu[@ZkGG]]} (0#k/#~^^~ (0޴8@H>P^X~`GGPPGGF@p`B@GGuF7`//â 4G B)( //i GTGD)@Zk h4G[@Zk h4G[@Zk h4G[@Zk@G4Gh[@Zk%1@ G G0@@@ @Dp4G[@Zk"G4Gi[@ZkG]]} (0ݤ8@H=P]X}`p#/k///GGG{#C///GG{#<GGG@{#Gb//GGG`{#GZ//GG`{#G{# /#GGG~^h{#G#P@G] #k///#G~^{#G#>@G] #k/B?B#D ^~(^0~8@H޴PX`>h^p~xGGGGGGG  ///GGGG_C`@GZ@:/ ///C#IBK///G!/GGTGb#"_GGTGb#_G// GTGb#_0@(? //GGTGb#_GGTGb#_G GTGb#/_Ӿ 0"G4Gq[@Zk G/ /GG4Gb#_GG4Gb# _GG4Gb# _4G  /(C0@B@@"Cݦy0"D@@ @yz@4GFP_CH_CFlà/i[@Zkðc/8BGGG#rkZk/ ///G8Xxq_#8`@Y@9XX YY@@0B B#"//0GG/'//DG$D dJ_#`@>GK@4GD$ $Kd+ +k@@i[@Zk G_0@ @!iG4G[@ZkGG ](]0}8@HݤPX`=h]p}x#k//B?B#D^~^ ~(08޴@HP>XGGGGGGGG/ /GGGG_C`@ GZ@:/ ///W =H(@_/// G)/G GTG`b#_GG TG`b#_G// GTG`b#_))? /H)G TG@ZkN///G GTG`b#_//G GTG`b#_/G GTG`b#_/GTG/H) @Zk(/4GpG[@ZkG/ /GG4G`b#_GG4G`b#y_G`b#4GG4Gr_ H0B GG]] }(08ݤ@HP=X`#k///GGA #~^^~ (0޴8GGGGGB_`@F@F @////GGTGb#Z_GGTGb#S_G GTGb#/K_///ƠGG]]} (0ݤ8@#k//Gk//Gk////#G ^~2F(^0~8@H޴PX`>hGG@A/AKGGGGGQ"a!@pA!@!@> q/qK5 //5!H,4 H@FvJ1'J'JBBHR"1D%`r/ gJ5!H: HvJHUCrKR"B4'J D R/JRKR";!H3 Hv`K5H{BJtB3D/ 2.2JR";!H: Hv`K[CUC5D?4!H HvJ@P@ Dd/dK"6@///3!H.2 HFv`J:GKGKSBZBJ"2D% u/ 'J3!H4 Hv`JHBuK"`B:GJ D@.GKJ";!H1 Hv`K3H;BgJ:B1D/ u/uK"4!H2 HvJTBSB2D_"@,H/6///1!H.2 HFv J HHQB BJ" D%`t/5gJ2!H: Hv@JJRCtK"UB1H2DT/'JTK";!H3 Hv`K5GJ{BJqB1D/ @,H";!H: Hv`K[CUC5D3!H2 Hv`JSBPGB2D9f/fK6@"//4!Hu.1 HFvJ:GKGK4B:BuJ"1D%u/2H4!H3 HvJGJtBuK"rB:'J2D .GKJ";!H Hv`K3GJ@gJ@ D/ @u/uK"4!H1 HvJ4B3B1D_"@G.GJ/6@/// !H.1 HFvH2GJGJ B@J" D%`t/5gJ1!H: Hv JJQCtK"5B2H1DT/GJTK";!H3 Hv`K5'J{BJrB2D/ t/tK":!H Hv@K@@ D_;!H3 Hv`K{BPgB3D9H/HK6 //4!H`/2 HDvJ5JJTBUB`K 2D% @/3'J4!H; HvJgJtC@K B5GJ3D@`/J`K :!H1 Hv@K4gJ:BJ5B1D/ `@/@K ;!H2 Hv`K[BTB2Dp3aJ`Bs#!!H=}=aG[[sGF`/`X[}sO2;@rRBIPB  /GGIGtGb#_GGGItGb#_GGG ItGb#_/)?GG ](]0}8@HݤPX`=hp#k/// //qtG1k///# ^^^"~>{#G`; @G] #/k///;: /705 #~^^~ (0޴8@GGGGGG/BFC`/`//GGGC@` @ZkG"0@@ @?G]]} (0ݤ8@P#k///{#//#~^^~ (0޴8@H>P^X~`hGdcG`0^ GGGGGG G G/C JCk/J`I`)/GGTG+`b#_GGTG`b#+//_GG +TG`b#_  GGGGKk /@Zk GGG+`b#TG/_GG +TG`b#_  GGGGKk /@Zk G 0 A CA A/G]]} (0ݤ8@H=P]X}`hp#k///#G~^^~ (0޴8@H>P^X~`G8GGG G2/GGb#_#G/% #/#'BU/@//55GTG UD G@ZkGGGGGb#_G//c0@@ @ceGG]]} (0ݤ8@H=P]X}`p#/k/// k/k//GGG{#///GG{#àB?B#D^~ ^(~08@޴HPXGGGGGGG'/_C`@H@( ////GGTGpb#_GGTGpb#_G// GTGpb#_G /G] ](}08@ݤHPX`#/k///}TG`[(/@Zk ¤4Gf[@Zk 4Ge[/@Zk  4Gd[/@Zk ¤GfG$1@Р0 "@@ P Т @y4G[/@ZkG$1@(0;tG8[p ;RGk/#^~^ ~(08GGG>H{#X ^  @8Bd@4G@b/oZk"G"TGa1"[/@Zk@b#//@G;/ ݢZ? 4GG 4G% eEŲb#_$d#@0@3@$/`$Gb#@G 4Gb# _%hb#D/_ӐD G"GpEF "1"[@Zkhb#_GG]] }(08@#k/#^~^ ~(08GGG>{#X ^d `@ӠBd@4Gb/nZk"G"TGa1"[/@Zkb#//G@G;/ ݢZ? GG 4G% eEŲpb#_$d#@0@3@$/`$GXb#C@G 4G`b#_%b#D//_D G"GpEF "1"[@Zkb#_GG]] }(08@#k/G{#x;"ð#^~ ^(~08@޴HGGGG{#^ ~GCC_//(b#%  @# pb#=["G @/G///G] ](}08@ݤHP#k//GZ 4Gb#1_ %G`b#4G  @@G b#)_(B@GTG0bnZkGpEx"GGpCF h" `@1"[@ZkHb#_ ݢZ TG=G4Gf& &Ʋ b#_ed@`@eeGb#@G 4Gb#_  G{#X["x[#?"TG~^F^~ (0GGGr "b[1"@Zk"tG ""Da CF[@Zkb#a_# b#G[!  ~@"GtGd1"[/@Zkb#M_HBZ? %G%G4G/SeZkGXb#_ eGb#4G @K@GHb#_8BG4G@bmZkG]]} (0@#k/#4G^~ ^(~08@GGC([{0b >^cZk#0@c Hb#/ 2@8B@4G@b-mZk ݢFZ? GtG G @4G b#U_#c$@0@3@#`#Gb#@G 4G b#E_%hb#D/ ///_HBG=TGPb/bZkCtG""`EFx1"[@Zkhb#//_G/GG] ](}08@P#k//G{#x;"k/#TG~^G^~ (0޴8@H>PGGG / X;"0b/[K^ӭ//G!G8"@///G. (GJGJQQB/10F/ //.HB4GPbJrEZk0@ @?@0.C@@$q@0JCCDrFG>@x/v///G"BF //CC[G@CCDCC 1E CCF/CCTF_CC7G`B dB H/"GGGX0bH1"/J^=//GDGx""TG0b/J^1//G G""GtG0b/J^%//GGTGp""0b GJ^////,G 0 A &AGtG`""0b DHHJ^///GGh""TG0bJ^G]]} (0ݤ8@H=P`#/k///#4G^@[~^~ (0޴8@GGGGHbDZkB"4GbGGnZkBG?""PB"Gb /DZkGG0""]"tG8b/oJ^"GGGEe8b1"fJ^"GGTG8b1"_J^G4GPb#_////"GGGg G0@8b1"IJ^@] \@C/k///GGTG""8b6J^ /GGTG""8b.J^/GGTGx""8b&J^/"GGTG8b1"J^"GGTG8b1"J^GGG""8bG@g/ J^GG`""8bTG[ J^0@GGb#@/_/GGTG""8bI^GGTGp""8b/I^砕"GGTG8bh1"I^G4G@b#/s_//G4G@b#k_G]]} (0ݤ8@P#/k///  0 k///0 0/k///  k/;#GtG~^^GGq"b[1"@Zk(b#G]] #/G]] #k//#{G~^^~ (0GGGG;GSsPb1"nI^G4Ghb#/_"GGqPbTGX1"_I^@CFg /GGE0"" eGPb/OI^@/ \@<Ck//GGTG""Pb>I^'/GGTG""Pb6I^/"GGTGPb1"-I^GGTG""Pb&I^/"GGTGPb1"I^GGTG ""PbI^EGG""PbG@e// I^GGx""PbTG[ I^G b#G_GGTG""Pb$1@H^@C DGG]Xb#]} (04G@#/{///`{TG ;"s"1#~^8[^~ (GGG("@b/eZkX"G/!#xb#$_HG]GPb]4G} (0#[k///G]]} (0#/k///X;# G~^4G^GGb#%AG_@X"4G0B8b0"3kZkG//Gp""XB(btG_^0B4G8b`"/#kZkXBG@""G(btGR"_^GG]] #k///[4G/#~^G^~ GGGb#_G]]} 0#k/ k/  k/@ k/` k/Gۦ56xW/k///  //@`G/k////?_ۦ֢ҲGk// k/  k/@ k/` k/ k/ۦG;6Wx/k///  @/`G/k////?ۦ֢Ѳ_ 0(;94GkQ#4G~^^~ GGGQZp`G[/@Zk G4G`G]]} 0#k///B @/k///B8Dk/PF/#@#~^^~ (GGGGbGTG[@Zk"D?G]G]} (0#/k///Gk//PF/#@#~^^~ (GGGGbGTG[@Zk"D?G]G]} (0#/k///Gk//#^~{#^ ~(GG>C_"G=TGD b[@Zk//G/GG]] }(0#/k///#^~{#^ ~(GG>C_"G=TGD b[@Zk//G/GG]] }(0#/k///[#4G^~^ ~(GGGr >[/@Zk"G" TGaP1"[/@ZkG0/BG4Gr[@Zk"TGp"(1"[/@Zk8G4G`[@ZkG///]@C // GG]] }(0#k//#~^{#GQ_/G] #k/G]G #k//#~^{#Ga_/G] #k/G]G #k//#^~^ GG{#>C_("G4G a[@Zk0"8 TG "a[@Zk4G///] @0 pGG]] 0#k///#^~^ ~(GG>C{#_`"GG4Ga[@Zkh" pTGX"a[/@ZkG /]@C`4GG]] }(0#/k///#~^^~ GGG{#u@4G`[@ZkG4G`G]]} 0#k///#^~^ GG{#C_GPb#/_4G/GG]] 0#k/#^~^ GG{#C_Gb#/_4G/GG]] 0#k/#~^^~ (0GGG{#GG_/ ///GG0@b#_G]G]} (0@#/k///0D/ #~^^~ (GGG/GGb#_#GD?G]]} (0#k///00B/k///k/k/G00F@///10@0F/ `10@0F10@0F10@0Fk//0{#QQF Ga/k///0{#QQF@1U/k///[#4G^~^ ~(GG>rpG[/@Zk" TG"a[@ZkG ]@C`4GG]] }(0#/k///[#4G^~^ ~(GG>rpG[@Zk" TG"a[@ZkG ]@C`4GG]] }(0#/k///k//0G0F`///2G10F2G10F 2G10Frr2k///0QQF/* #~^^~ (GGGp{#@GGb#_G(b#G@Gb#_GGb#]]} (0#i/G]]} (0#/k///pG/"`#~^^~ (0GGGGG//CGGTG@Zk"D?G]]} (0@#/k///pG/"`#~^^~ (0GGGGG//CGGTG@Zk"D?G]]} (0@#/k///#^~^ GG{#>C1@G]b#] 0#q/#C^~^ ~(GGG{#1_G/G /G=b#@G/GG]] }(0#/k///QҢF/'@#~^^~ (0GGGGG//G%b#H_$D?G//G]]} (0@#k///Gk//Gb#_4GGG{#GGGTG4G///[G4GJ#~^ [^~ GG0"(br fZk B44G@"(bfZk BG4G (b`"/>fZk///Gb#@ B4G(bP"eZk@"G4Ga[/@Zk 4G B(b"/eZk@"//G4Ga[@Zk4GCG]]} 0#/k///#;4G~^^~ GG {q[/@Zk4G#p G[@Zk4G #pG [@Zk G]]} 0#/k///#ۦ4G ^~(^0~8GG@{v >^~[@Zk"4Ga[/@Zk" 4Ga[/@Zk"4Ga[/@Zk4G"q[@Zk4G"q[@Zk  ]G ](]C0}8@#k///#4GP;^~^ ~(08޴@HGGGaGGGG[@Zk4GP"q[@Zk4G P"q[@Zk "Fd.dJ0 dJ/XD"%#/.JF/KGt/`H[tK`G0@ F""t?%,%HG_F?%,%H / "C4G".G qUJ>[/@Zk%,%H 0BG @.TJGTG8b>/|ZkC&"F"Z /G@///e.DD"eJUgBhBzdJFK$/Y$K:G0@D  $?e/$#eKU@@wH0D: .TJF>.0@ JD""UBB{JxF+`D/ 0@ZYK[GD?.JUBBwJ D.TJF> 0@#////e.eJUgBhBadJ:G $.Q$J0@!F $>  / C".4GGdTJ>[/@Zk="%,%H X'D/Q ///E.D""EJ HFxQJ9.WJ0@ F1"F>%/%K (Gs0K/*`1,A0H0@3D1<.J 1 FxJ"@.WJ0@F#>E/EK DsH`.PJF0@>%/%KF@.VJwJ0@ F>C,d4G"G@H<[@Zk & i  @0BGtGTG8b|Zk0BGGTG8b{Zk///#0BGtGTG8b{Zk0BGGTG8b{Zk%,%Hx+DX'D%@C Fw$H@2`.VJ0@F# > 3@"HBXB""ytGP1"[@Zk}/, "BH D6 /p.tHD 0@FSpJ"tFp>.JF{J$P/ZPK[G0@ "P?,H+Ds0H P.RPJSF0@ "P>.JFyJ .UJF0@ ">E/EK D/_0B@"TGTG8b/{Zkd BtGH"[0R" 2"@Zk, C4G" , dA H <[@Zk%",HX'D .PJJB (@/=BD""!.G@@ E# BUJJ"7B"%/Y:K'KG@@B y#7aCy# ,DHG@H@ gCB/%.%J%F`//D . JBCF. JBCF~, H@CD/v, H%F?p/ BC4G". rTJ>[@Zk% ,FHH&@)//='@D"! !@e.G@@ # '@StJgJ"7B".WJJG@@B 7#7!C7# @e/[`KG@gK@ 'C&@/,HD- //D). JBCF!e. eJeBCzF`e/ eKBCF/, HD / C4G0.gQ0J0>"[@ZkP"=", "HaJDG,H< ///.u1HD 0B F0#P"TJ1"F>.J dQK?G0#$@,@H1"0BD<,Hu1H_F P" .TJ0B1"F>.J vQK?G @,DHD0B1"<e/eKG_FC. ¤f"TJ>4G[@Zk G]] }(08ݤ@HP#k/# ^~^~ (0޴8@G? GGGGG 7// =#/0c /,`F/KK/1///X'Fd#d"/ D/[KEG@D.SJEF@.u9JTJF0@ #9#>.JGGJ /C(B="a/[aKa?0b/1VZk G  .J// % @'.Q'J'> /BGtGTG byZkBGGTG byZk///#BGtGTG byZkBGGTG byZk$,$Hx+DX'D%@C Fw'H@N`.VJ0@F# > P("0B@B""ytG1"[@Zk ," }" @eBH+@2F? //.w3HD 0@`F @VJs"F>/K CqKD*S.RSJQFS>.0@ @ s"J+@z3HF3/0@ @Y3Ks":G3?d/dK @tH'F/XKG?.0@ @ s"J+@7G/B("TGTG b/GyZkg// BtG0"[0R"2"@Zk F/C(B0b="',A'H'<uUZk 9. $#JXF/XKK C/* ///=CD$"#!.F@@ ""CPJJP"7ABP"`.TJJF@@FB T#7ACT# `,@HF@H@ FCCâD&$/$K%D//D $. $J%BC5F . JBCF. JBCF/, H%Dy/ //C(B0b=",GH<UZk .# WJJB( /=BD$#"!,F@@ d"d#BGHH"7B" D.RSJGJF@@B "7B" D/Z[KF@GK@ BB_D&/K%D2//D. $/ $K%BC3F& , H@CDd/ dKEBCTF/@. J%D/ o//C(B0b=".VJ>TZk a 84Gg[//@Zk 8"=",H`KDG,H/< ///.u1HD 0B F0#P"TJ1"F>.J fQK?G0#$@,@H1"0BD<,Hu1H_F P" .TJ0B1"F>.J vQK?G @,FHD0B1"<d/dKG_FC.e"TJ>4G[@Zk GG]]} (0ݤ8@P#/k///#4G;^~^~ (0޴8@GGGGaGG[@Zk%/ "/`]_F].JJ/)`///XgD$#d#//KGD/[KEG@6,pvHA6H0D0@ ""6<.JGF?J }//CG .UJ>.Jr} f@F##,A#H#</j@///BGtGTGb~wZkBGGTGbwwZk///#BGtGTGbmwZkBGGTGbfwZk$,$Hx+DX'D%@C Fw#H@ 1`.VJ0@F#>c 3Ð"B B"0"ytG1"[@Zk(/d, "BdH D6 /p.tHD 0@FSpJ"tFp>.JF{J$P/ZPK[G0@ "P?d,dH+Ds0H P.RPJSF0@ "P>.JFyJ .UJF0@ ">D/DK D/_Bb"TGTGb/vZkc 0BtG"[0R"P2"@ZkpbC4G" , cA H <[@Zkd,$"dH XgD`.PJJB(@/=BD""!.G@@ D#$ BUJJ"7B"$/Y:K'KG@@B y#7aCy# ,@HG@H@ gCB/$.$J%F`// .D J BCF.JBC F}$,$H%@C ;Dv ,H%Fq//pBC4G".  rTJ>[/@Zkd,CfHgHf@(/=g@D"c !@d.G@@ # g@StJgJ"7B".WJJG@@B 7#7!C7# @d/[fKG@gK@ 'Cf@/$,$H%D- //* .D J BCF d.dJeBC zF`d/dKBC Fd,dH%D //pC4G0.gQ0J0>"[@ZkG]]} (0ݤ8@P#k// ;#4G~^^~ (0GGGL"q[@ZkxGG 4GTGGGGXb#h"_G)/(BGL?"G4GGtG/SZkG"G@b$(IJ,8G@D?^G//G/`GGb#_bG4Gc[@ZkGG]]} (0@#k///;#0;4G~^^~ GGGa[@Zk0"4Ga[/@Zk0" 4Ga[/@Zk,4G B4G(#(b/yZk0B G4G,@DrG]]} 0#k//k///#~^^~ (0޴8GGG  < /@#_#":@a@?`D#:B"<R":@ 1@"7`0B1!B <"//UZk@#D@!BD#DcG B(bG2@G#@@t@,<4"=[ZkG4G@B"GtGbR^@B,4GHb/GyZk ", ///D#G Bq@D#<.<"UJ<>DâF@v@w@<#8#8C<"B///!C`?"W"y @""/$ w.SrJgJw""2FB7BRRB,@HHRB`#7aC`#rC 7.Q3J'JRRB"RB7B"B7,5H3C%D3DGGBE @G////w/FwKXF/."JX!D* w."wJXAF/$@7."7JXDw/"wKXF."JXF/7,"7HX!D "B_B /,HXD/"B/B//g`.JF"/G"!BBBH#:UG////w.FwJXaF/`w/"wKX!F* 7,"7HX!D/$ ,"HXD."JXF."JXF/w/"wKX!F "B_B /W/WKXD/"B/.JUaBB.JBpB2C8"DYNDJ&B C@ðD/G]]} (0ݤ8@#k//@ò// // //{#//P#^~>"G^GG//R" 1"_"]4GG" G,Z;AKCG0@C`K H="PpCbP@FGGB[Zk  G  b#_G4GG B"tGbUQ^ G]]#k//#GtGH["^~G^GG"@b;^(B4G0b"/!QZkxB="GbGG,]ZkCGGhB" tG4G`b/#Q^ /GG]]#k/# (^~0^8~@HP޴XGG G D@$@B㳅D $Hb4G/ GWZk@B4GHb/WZkpBG4GGHbtGR"P^ pCB4G"2_JT@FC` S-SZkB0vHb-gZk#B`SHTG4GGbtG!v>H D#=^ZkGGG B",4GtGHbP^ I/BGtG#"b QZkpBG4GGHbtGR"/P^B,4GbZwZk, ////G b#_XDB4Gb,//GwZk,ð d?""G(bGPB" v//`:^$B4G"b%H$dPZk`B="G,GGhb.]ZkGGPB"4GGtGHbiP^B,4Gb/wZk,ðGGb#_8DXDxDB4GS b/,/wZk,ð F dG`?""(B"G(b:^ pBG?""(btGR"/{:^$B"4Gb %H$PZk`BG,="GGhb\ZkGG4GGPB"tGHbP^B,4Gb/vZk,ðGG b#8_Ӡ}@B4Gb,//vZk,ð G?""(bG pB"W@XD /;c9:^$B4G"b%H$OZk`BG,="GGhb\ZkGG4GGtGHbPB"/O^B,4GbvZk,ðG_///G4Gb#_XDİ$B 4Gb8 D ,svZk, HcpB?""G(bGR"`c9^ G?""G(b`B"/9^$ݠB"4Gb&H$ݰOZk`BG=",GGhb R\ZkGG4GGPB"tGHbO^B,4Gb/;vZk,ðGGb#_Ӧ5@U@D/TG//G///G(]0]8}@HPݤX`#k//cpB?""G(btGR"`9^/G?""(B"G(b9^$B4G"b %H$/5OZk`BG=",GGhb[ZkG//GPB"4GGtGHb/7O^B,4GbuZk,ðG///Gb#Q_Ӧ5@U@DB ,4GbuZk,ð B ,4GbuZk, ///cpBG"G(btGR"`J9^/GG"PB"G(bA9^B4G"b$HNZk`BG,="GGhb[ZkG G4GGtGHbPB"/N^//GB 4G,b/uZk, `Gb#_XDWxDB ,4Gb{uZk, PcpBG"G(btGR"`8^/GG"(B"G(b8^ӔB4G"b%HNZk`BG,="GGhb][ZkG G4GGtGHbPB"/N^//GB 4G,b/?uZk, Gb#_XD pBGxD4G?"tGHbR"yN^B ,4Gb'uZk, #^~^ ~(GG{# >_GGpb#_("G4Ga[@Zk = #Gxb#7_G(b#3_G/GG]] }(0#/k///@#G?" ["^~GG^GG"Hb/o8^Ӝ=0B"4G8b!>H= NZkB="GbGG,ZZkCGGpB" tG4Ghb/N^  /b#1_D@ /U@G]]#k/@#G?" ["^~GG^GG"b//8^Ӝ=B"4Gb!>H=MZkB="GbGG,ZZkCGGB" tG4Gb/M^  /8b#_D@ /U@G]]#k/#4GGtG^~0[^~ GGGTG#8b/k0GGB"}GtGb3JT`F}=4GGM^ Z/(#GG(B"btG @"7^B4G@"bpMZkBG,@="GGb:ZZkCGGB"8tG4Gb/sM^ӀB04Gb"tZk 08///G@b#_XDDB4Gb 0/tZk 0 ///B04GbtZk (0H#q@<"".p"RJJGJR"7AB@/// "0=#4]#>^G$}"(","h1" ]"Gb]L^ BGD4G?"btGHR"#M^0B4Gb0  /sZk 0 /// =8=tGHb?D?F!F8=$]C(}r1@J,sQ`J04ݢ="8KtqJFGv1JC8:v_KSGC8] HD8<FFC2_JVF<]:v^KxSKXG]@B]0//MZk BG4GGbtG R"L^ӀB04GbsZk 0 /BtG="]"bMZk=`BtG="hb!v>H=]0/LZkG//4GB"GtGbL^ӀB04Gb/csZk 0 p///B0="]"tGbMZkPB04GTGXbTZkG//4GB"GtGbL^ӀB04Gb/?sZk 0 L///]G@"Gb4G0@JP@J_Fp@JPJpJ^޶ B6^=B4G@"b!>H=TLZkBG,@="GGbYZkCGGB"8tG4Gb/WL^ӀB04GbsZk 08//G@b#q_XDBb_ 4G0//rZk0C 0G]]} 0#/k///#4G^[~^ ~(0GGG 0b/rZk0G= " ! G= "",cG4aJcFJTBB/# ""B64G0`Bt5UK(B="G}"5GuG6G0b"UZkB4G,b/rZk, øB,4GbrZk,/G///G]] }(0@#/>k///Gxb#_XDB,4GbvrZk, ///#tG^H[~^~޴ >(G#GGGGGGG G@=D] ;"GP{YoZk" g.JF%///A.!  DAJDF@.! JF/.! JF!/! !K$G a/! aKD/a,! aHdD, EHH@/,///=@ Da""# .! I)A !# )APJ@JE@@"7B"B@.VJE@! J@#7C# CA/ZYKGK! @?! ,H@U@@fD`D "@ /"."Jx%F/ ///G///G]]}ݤ =(0#k///c /KDBUABABFF_KGGY!CCtK `0.0 CVJF0>.c J8]:v_K8]C.CJDF#@/#,c `D#H$D .c JF/.c JF/c KG ,c HD/C/c CKDG_#.#J_# Q!J'J&@)//='@`D##! !.I)A )Ac c##" )@PJJ#7C#,@HHI)A )A Cc @#7AC@# `C.RQJI)AGJ )Ac IC&@?.JF#/.c `DJFc/c cKF//c KdF`C.c CJD C/c CK$D/ #.c #J$F?.JKG//FYBCsJ ` /0BXKG ?C.c CJ8C .VJ >#.#J$F/% ///.c `DJFc.c cJdF/`C/c CKDF@.c JD #,c #H$D/ .c JF#.#J?G//$FYBCr3J S/0BZSKRGS?.c J?C!/Y!K!?.JF/%///.c `DJFc.c cJdF/`.c J$F .c JD #,c #H$D/ #/c #K$G?C.CJ"RWJGJFB)@//=GB`D"R"!#.HAAc c#"HBQ4J'J 7@ #,A;H'HHAA@c !#7!C!# .VJHAJAc (CFBC/CKdF#`/.c `DJFc/c cK$F/ ,c HD.c J$D #/c #KDF/@.c JFc.cJkG//dFyBCwqJ `/0BXKG?#,c #HXCR/ZRKR?.JF/%///.c `DJF.c JF/#/c #K$D c.c cJD .c JF/C/c CKF#.#J'"Q4J'J&B)//='B`Dc"1"! #,G@@c C#"'BA3H'H 7@ @.PJJG@@@c "7B" `.UJG@J@c B&B/KF#/#/c `D#KdF`C/c CK$D/ ,c HD.c JF .c J$F/ .c JF.JC.c"SJ_C/# AK?UGBU'@"AFb c/[uKgKB(/=B`D""! /F@@c c"c#BXKK4#7!C4#,@HHF@@&Cc @#7AC@# @#,A;HF@'H@c FCB?.JUBp@#.#Q8J'J&BZ///='B`DC"1"Q#/E@@c # #%BY2K'Kr#7aCr#DC/ZAKGKE@@eCc "7B"9.PJE@J@c B&B/.c"WJJfB)//=gB`DC"s"!C/D@@c # "dBZRKGKr#7aCr#/XKKD@@dCc "7B" #.Q7JD@'J@c BfB?.JF#/,c `DHD/c KDF/@c/c cKF.c J$D .c J$F/ c.c cJdF.JG//UBBBCGaJ @/`H.0BWJFH>.c J/CHy.SyJHy>C/CKUCCXF_/c c/cKU!@!@F?@}`[> ޴( H="0]" }"DGG"@Zk b@/# ^~(^0~8@H޴PX`>h^p~xGGGGGGG!{#` 0//_ G@b#_0  G?"" B"tGb 2^,Gb#HD #/_ G@b#_0  G?""0B"GGb/1^B"4GbDGZkPBG=",GGGXbRTZkCGG@B"tG4G8b/G^B04Gb:nZk0///Gb#_C4G8DBb 0/'nZk0 Cs///?! 4G//G= //" ! "] G"0c4aJcFJTBB//# ""B64G0`Bt5UK0B="G}"5GuG6G8b"PZkIG`b#_/KXD)PàB0@0 @2!AGGb GOZk@KGC.PJ>//GG b# @V_ `A/B"C1@'@R"/[IZk///Gb#_G///G ](]0}8@HݤPX`=h]p}x#k/B04GbmZk0 B04GbmZk0 B04GbmZk0/G4GG@B"tG8bF^B04Gb/{mZk0 Ð#@^~H^P~X`GGGG/ // /Gb#_0  G,?""0B"tGhb0^PB4GXb"/FZkBG=",GGbOSZkCGGB"4GtGb /F^B04Gb6mZk0`///Gb#_ C4GXDBb 0 #mZk 0 CL///G " B",?" cGhb0^ //G,?"" B"GGhb/0^8PB"4GXb H85FZkBG=",GGbRZkGGB"4GGtGb:F^B04GblZk 0G/Gb#U_8DBbG_  04G/lZk0C C0G@]H]P}X`p#k/// # ^~^~޴GGGGGGG` Y/ U/G(b#1_/ M/4G4G//G= //" ! " G="0cBGb4aJcF0`BGJ6HTBFԲ"/OZk6Gb#6_//;XDDB0_"="GG b/SNZkG//CDG="GGtG/@Zk///Gb#t_G]]}ݤ#/k///8B 04G@bBlZk0 ///8B 04G@b6lZk0 ///8B 04G@b*lZk0ðG///G4GG8B"tGb /gE^DG="GGtG/@Zk8B04G@blZk0 ///# ^~^ ~(G"GGG0 / //@G/`BGGhbMZkCGGB"4GtGb-E^Gb#_G]] }(0#k//#~^^~ GGG{#_ BG+`0"GGtG(b/hZkG!Gb#_GG/G b#_Gb#//_G/G #b#,_Gb#/_G/GG]]} 0#/k///# 4G~^^~ GGG0`[hb/~kZk 0,xb# Gw_`B,4GhbrkZk ,G@b#_GG]]} 0#kGG0{#GGGTGTG+///pG4G(#~^[^GG8":([0b/GOZk(BX"4G0bAOZk(BGH"4G0b:OZkGb#f@p4GG]@] #k/;#4G~^^GGqB[@ZkG]] #k///#4G;^~^~ (0޴8@GGGaGGGG[@Zk4G"q[@Zk4G "q[@Zk "Fd.dJ0 dJ/XD"%#/.JF/KGt/`H[tK`G0@ F""t?%,%HG_F?%,%H /`"C4G".G qUJ>[/@Zk%,%H  @f".UJ>/r`/// BGtGTG(bfZk BGGTG(bfZk///# BGtGTG(bufZk BGGTG(bnfZk%,%Hx+DX'D%@C Fw$H@:`.VJ0@F# > ;GTG?"0B"tGHbC^ӈ,?  ]" @FBH @F?//.vHD 0@@F @UJR"F>.JBpJzG*@2.Q2J0F2>e.0@ @ R"eJ @yHF/0@ @XKR"G?e/eKKCsRKF.WJF>.0@ @ R"J @G/ BTG"TG(bfZkBG TG?"HbtGR"/SC^.//`C4G" , dA H <[@Zk%",HX'D .PJJB (@/=BD""!.G@@ E# BUJJ"7B"%/Y:K'KG@@B y#7aCy# ,DHG@H@ gCB/%.%J%F`//D . JBCF. JBCF~, H@CD/v, H%F?p/`BC4G". rTJ>[@Zk% ,FHH&@)//='@D"! !@e.G@@ # '@StJgJ"7B".WJJG@@B 7#7!C7# @e/[`KG@gK@ 'C&@/,HD- //D). JBCF!e. eJeBCzF`e/ eKBCF/, HD /`C4G0.gQ0J0>"[@Zk@"=",`"HaJDG,H< ///.u1HD 0B F0#P"TJ1"F>.J dQK?G0#$@,@H1"0BD<,Hu1H_F P" .TJ0B1"F>.J vQK?G @,DHD0B1"<e/eKG_FC.`¤f"TJ>4G[@Zk G]]} (0ݤ8@P#k/#4G@;^~^~ (0޴8@HGGGGaGG [//@Zk ( "/`]_F].J'`JXgD$#d#//KGD/[KEG@6,pvHA6H0D0@ ""6<.JGF?J //CG .UJ>.Jz} f@F##,A#H#</r@///BGtGTGbVdZkBGGTGbOdZk///#BGtGTGbEdZkBGGTGb>dZk$,$Hx+DX'D%@C Fw#H@ 9`.VJ0@F#>c ;GTG?"B"tGb}A^3d,?  ]" @FBdH @F?//.vHD 0@@F @UJR"F>.JBpJzG*@2.Q2J0F2>d.0@ @ R"dJ @yHF/0@ @XKR"G?d/dKKCsRKF`.WJF>.0@ @ R"J @G/BTG"TGbcZkBG TG?"btGR"/#A^//bC4G" , cA H <[@Zkd,$"dH XgD`.PJJB(@/=BD""!.G@@ D#$ BUJJ"7B"$/Y:K'KG@@B y#7aCy# ,@HG@H@ gCB/d,dHeD@//`.D J BCFD/DKBC F},H%@C 9Dv d/dKeDq//"C4G"r.  qSrJr>[/@Zkd,CfHgHf@(/=g@D"c !@d.G@@ # g@StJgJ"7B".WJJG@@B 7#7!C7# @d/[fKG@gK@ 'Cf@/,HD-//*$.D $J %BC4F .JBC F`.JBC F.JD //C4G"(,gA(H(<[@ZkG]]} (0ݤ8@HP#k/ ;#4G^~^ ~(GGGq[@ZkGG TGTGGGGb#("_G///GG//"! /G"=#cGb#8<c_GG]] }(0#k/s#0;4G~^^~ GGGa[@Zk0"4Ga[/@Zk0" 4Ga[/@Zk0"4Ga[/@Zk0" 4Ga[/@Zk0"@4Ga[/@Zk0"L4Ga[/@Zk0"P4Ga[/@Zk0"D4Ga[/@Zk0"H4Ga[/@ZkG B4G#(b/RfZk0 4GpGG]]} 0#/k///k///pC@B #^~^~`FaF޴GGV GGGG4G///0B2@@GG8b/LZk@ @?//BGb vAZkBGbxD/nAZkxD#(G"1" "?"= G]"@BGGHb5JF0B"J7HUBG/HZk @ G TG B"GtG8bD?^G]G]}ݤ#k//#^~^~޴>^~޵G$$GG4G ; ([0///jG4GPDV #/ [//@Zk $(,0 ,CB5PB"WB (1C'AZk$#(,#!5@ @95C$#(,# (c0CBRBS#B+pBGTG$c0#,pCi,â[-B@Zk y @ @ @$(c,_"GGB(#bCGZk4}`!HB'`GPb@ZkyAAՆAUADu/G///G]]}ݤ=]}ݥ#k// xEZ`("G///1" "?"= G="xBGGb5JF0B"J7HUBG/ HZkfHBGPbr@ZkD_//8GTGTGGHb#GG "_4ð ///GTGTGGHb#8GG_mG4G[@Zk4ð //(c4`A(///GTGGXB"tGpb>^ ///#GtG~^[^~ (0G GGGGh;"b/aZk$," GA0H'H&@%@//='@D"" . $#d#TJJ"7B.VJJ" 7B /XKK# 7CD/Z[KGK&@ .JF"/2d.SuJgJ =gBfB@tF."WJJB$ /=BDD#$ d/ "d"[zKgKZ#7AC@,@HH  7@ D.RPJGJ" 7B.UJJB .JB5BG.// ,HDC5AC:D?D"@HH"7B///=@D" !`.Q1B1B d#"@TJJ4#7!C4#.WJJQ1B1B1C W#7ACW# D.RPJQ1BGJ1B QC@.JC@5@vFdF8#///GGGX""tGb#]_/ / $,$H$@5!@!F?@Hbs4G[@ZkG4GG`[@Zk@D.DJDJ+//DB5ABuGBEBFFDF@/ KCC5CuC[GDC@GD%. %JCB5BuBuFBFvFpF/. J_PH"a4G[/@ZkG1@GTGb#1_G@TGH""Pb#z_//. GJJ* /B5BuBBSFFDPF. JCB5BuBG[GBGG, HC@5@u@3F@F4F F/E. EJLHb{4G[/@ZkG1@GTGb#_L?///GGG""tGb#_/@ /.// $,$H$@5!@!F?Br[G4GG@Zk@$.$J$J* /$B5!Bu'B%BtFFDqF . JCB5BuB:G`GB GD. JC$@5!@u'@TF%@FUFAF/ e. eJ?PHb{>4G[/@ZkG1@GTGb#_G@TGH""Pb#_//. GJJ* /B5BuBBSFFDPF. JCB5BuBG[GBGG, HC@5@u@3F@F4F F/E. EJLHb{4G[/@ZkG1@GTGb#A_L///GG4G""tGb# _/3 / ,H$@5!@F?DHBr4G[@Zk,G4G"b#HD//O_G#GTGb#%_GGGTGb#_Da/G4Ge[@ZkDXè"GG4Gb#tGP1"/_  ,H$@5!@F?HHBr4G[@ZkG4Ge[/@ZkH5/"GGtGb#tG81"/_  ,H$@5!@F?HHBr4G[@ZkG4Ge[/@ZkH/GGGp""tGb#_BG"TGtGbEwZk<G]]} (0@#k///#4G^@[~^~޴>^~ (0GG(Hb08>BZkBGGTGGtGbR"5;^#8$$GG ~f 4GB!)vJ /// B@"XF5vJ@cdB #Sm}Zk(PBGXb7JF(@=,=4GfQZk( B`SH4GG(btG0vJF(TGvHZkG GTG 0B"GtGb/:^ӳ//`BGG]"tGhb/\ZkBG(="GtGb/{ZkBG b//|ZkBTGGGbtGR" q@7@/:^PBG4GXb}aZk!aIGH"H=" HA0@//R" 1"_cE IH]"B C G0`AGGbG $F "ZDZkB GTGQ G btGR":^PBG4GXbJaZkR/BG}"G_"b"G E)ݰLZkBGTGGbtGR"~:^:/BTGGGbtGhR"r:^PBG4GXb!aZkBGb|Zk G "G //GTGGpB"tGbY:^PBG4GXb/aZk//GTGGB"tGbI:^PBG4GXb/`Zk @! A G]]}ݤ=]} (0@#k/#G~^G# Gh{#GGG_@G] #k//#GG~^G# /GGG{#D@G] #k///# C^~^ ~(0GGGG> `@G(,Gb#4B B/_(,CB0B @0FG!|Zk,GB,G]] }(0@#k/{#/k///p#@; ^~^ ~(08޴@HP>X^`~hpx޵GGG#=GGGG!F{# G G_//`GHb#/O_ G /GHb#I_g GG4G[@ZkD H""4G Bb¥!/]xZk 0B8bMGTyZk"@ @!0BG4G8bIyZk G ,Pb#_E  G/ A0BG4G8b7yZkA P@ 0B4G8b/-yZkA @0BG4G8b/%yZk0B G4G8byZk"A4GA@@a[/@Zk.// GGGGG(b/ F/ L^BGR"/W#^//GGG`B" GG(bJ#^ /GGGpB" GG(b?#^BGAA!Al(bG1AR"/3#^A// fBG0AG(b1AGR"`/##^AGPB" !AGGG1A(b/#^ABG !AGGG1A(bR" #^ //G AGXB"1AtG(b/"^0B4GG4G 8bxZkGG,b#%_GGGb#_TG!///?"!0A B7,L(lGb#SF@/_ /,,", A..TJAJu.HX!D!DF>//?!/Gg#E,@H<///G//..gQ.J.>/// g0J 4G"[/@ZkGGhb#-GI >_mG4G[@Zk,̡G4G$̱m[@ZkD̡, N8 A @J//Gb#)_/mYAA 0@A7G4G/`[//@ZkgD 4G[@Zk Gb#G"_ӑ/BGTG?"HbtGxR"/8^K//¥Gb#_N`nH/Gb# _GTGTGG b#GGX"_=//Gb#_m6`1// @ g4G[//@Zk/GGEh m`G4G[@Zk]/@GBGTG?"HbtG@R"/7^ӰGb#_`oG4G[@ZkGG]] }(08ݤ@HP=X]`}hpxݥ#k/#GG~^{#G#G_G] #k///# ^~(^0~8@HGG>GG{#`_G 7BG""btGgvZk8B?"_"@b2{ZkGb#G//o_`4Gd[@Zk G="]"b#@](BGtG=0b/@vZkGb#S_BG4Gb^ZkGG ](]0}8@HP#/k///# GTG^~([ ^(~08GGGG*G8""0bvZkXB// G?"`bzZkGGb#_ G="]"b#K@]HBGtG=Pb/@vZkGb# _BG4Gb]ZkGG] ](}08@#k/ k/8k//Gk/Hk// k/<k//Gk/Dk//Gk/Lk//Gk/Pk//#^~~" ^(~08@޴HGGGSF FGG/$P//@(p&zC/G`b#_/<#@/? @?$#$Ű<c@ C f@"GD tD/ G] ](}08@ݤHP#k#F TG~^^~ (GGH@G ;GG"G b#1"_//4G:/ "GGTG b#1"_/4G./ "GGTG b#1"_/4G"/ "G`G b#TGx1"/_4G "GGTG b#@1"_/4G /GG "TG b#_ӠCGG]]} (0#k///G[Gp"G`# ~^0"P#Gr"2 "DGR"PG^G2FGGG{# #/{GGG{#GGhs"///#GtGP"~^tpJp"^~$" ( B0޴8@H>P^X0,A0HG4DG0<0,pJA2H0DpJG"2<2,A5H0D"2<"BG@D$ @tDXF8FaBGGGtGTG4G4GGGGGGtGTG4GG"/P ///!F;\A$Ck/jH;//jH7//jH3//jvH///jVH+//jVK'//j6K#//jK//jJ//jvJ//j6H//jJ//jJ //jH//jVJ//jH6- JI6I" *E6=/?5, tGb5IA5H "D5<,DH<G]]} (0ݤ8@H=P]X`#k///CC`#^~ ^(~08@޴HPX>`^h~px޵GTBBGBBFG>G%%Gk!֌! GG4GtGG G ~^///:Ar#Ic#@CGc"vJK#GE/ @#.Q#JaHc  @2FrH#>.WJF>,@HDh@AE<#.Q8J2F#>?/GE6Aa#I"BGc",q7KC"uH{H @@Hc D<.PJF>.TJF>#,A2H;D#<h@AE?DE1As#I"' BvI" C/{I " @ZCKSGsIC?/XKGvH?C.RTJ[FC>c,C`HsDw<.UJFw h@AE>/?//DAPAUAA5AAD2DqCIG c/ @[cKc h@AEqGc?u?y3AbXA\AYaB5@CEE"p`YB 6JkE/ RKGFF-ø^A!@AEe#y @ He"\ .. JJFgFD HDù_A0@@EE#s 簙B2@J#H..e#%, JJFF;HUF'D2@JVF2@JAF41!B!B"$B7B FD'//y"GGb#__//?#0+B_#'99B&B88B,C"0GCF/0A* AA7 @ DBD/; %.%J G@b#_ӡ@GAE?ݡ G#l@%@n//G] ](}08@ݤHPX=`]h}pxݥ#k/x"GGb#_//y"GGb#_ //("TG ¤d1"[@ZkE! = }#g@(HAi ð# ^~0[(^0~8@GWGGt0/ tP 8BG,"'tZkG//G4Gb#?_GpG=[[`X/[l(///p#(BDN0Bt@,"/uZkl(BD Bp#N0By@,"/uZkl(BD B p#N0Bw@,"/uZkl# B/?l#p O`@,/,"XK,?G ](]0}8@P#k///##H;4G~^^~ GGGa[@ZkG4Gpb;^HG4G`G]]} 0#k/k///8[#4G^~^ ~(0GGGGr>[@ZkxGG GTGGGG8b#"_G-/GG//"! /=GGb4G $/`V]{" GGb#_G`b#/_G /GG4Gxb#w_x"t$GHb#!_GG]] }(0@#/k/// M#~^^~ (0޴8@GGGGG///G4G ""btGxDD $/{y^à4GGb#G/K_GGGGtGb/ky^G8""4GtGb/cy^// $Gxb#(e2 @/G]]} (0ݤ8@P#/k///N TGXDJ1H #~^G^~ (GGGG 0;"`b#_G/ $ B"GGbtG/ ///>^G $GTGb5A^GGG8B"tGb>^GG4GPB"tGb>^GTG$G]Hb]} (0# z/G]]} (0#/k/// #~^^~ (GGGGGGb#_G]]} (0#k// GtG0["# ^G~(^0~8@HGGGGGTG8b/k>^G$GTGHb@^4GGG8btG B"/[>^GTG4$by^GG4GPB"tG8bN>^GTG8$b/y^//8GGG8btG@B"/:>^GTG8$b/y^0GtG8b($/ , $$ <DG4G@(B"!>^#GGtGXB"tG8b>^(b#($"$ DcGC} $f@=GPB"=GtG8b#(TG$#=^G ](]0}8@HP#/k///G #tGH["~^^~ (GGG4GG0bG=^$GGTG@b // >@^GG4G`B"tG0b=^G#GTG@b1@^GGTGXB"tG0b=^Gb#Gr_GGGPB"0b]4GtG]} (0#/=///k///B #~^^~ (0޴8@GGGG, //(CgtGGXb @8FG $l#p#G B@FG1L}=^GG`b#@(GG4GXbtG B"/o=^//G]]} (0ݤ8@P#/k///#TG~^^~ (0޴8@G GGGxDDD@`bG_xDGTG8b $_DGGTG b#/^//DGGTG b#/^//8DGGTG pb#/^//xDbG ($GtG(b G@@dF/tC}>^ӳGGGTGbf?^Ӭ/DGTGB"? (tGb#G<^G$GTGbS?^(dGG4GbtGB"`<^G($GTGb/C?^GGTG@B"tGb/<^Ӂ//GGTGB"tGb<^G$GTGb+?^GGTG@B"tGb/<^i//DGGB" (tGb^G//<^G($GTGb ?^GGtGB"tGb<^L/GDGB" 4GtGb<^G$GTGb>^GG4GB"tGb<^4/DJ (.GJ*/ FGd"" D.G4GtGbSJKF@.JB"؇F /c<^G1@GGtGbG[<^GGtG0B"tGb/S<^, HGdDG4GtGB"bF<^GGGTGb/>^GGtG0B"tGb/7<^//XDGGb# >_/XDGG0b#2_/(à8D& $///0u B B BSFQF uBBBFF/// uBBBGG/(G4GB"GbtG/;^$GGTGb ///S>^GG4G(B"tGb/;^G$GTGbE>^0 ///GG0b#_,/ ///GGb#_8D($ " 1GB"tGbFTGG;^bGG4GB"tGb;^GGtG(b8D($/ tC=^ GG4GbtGB"#(;^$/0@$G $TG8b_$'1@$㰈"!GtGb (/ $Cl#pc 2BFG,C"qNr;^GGTGB"tGbk;^$GGTGb ' =^GG4G(B"tGb[;^G$GTGb=^GG4GB"tGbN;^(ðG]]} (0ݤ8@P#k//<Q#G^~G ^(~08@޴HGGGGЫb#^ j_<àGG`B"GtG8b/;^8$GTGb /wv^ //GGG0B"tG8b ;^<$// G /LG4GHb8F 9]GGGTGB" tG8b/:^GGTGbMv^(BG4GG8btG8DR" :^ BGGG8btGR"/:^GGtGB"tG8b/:^GG4GxbI^//84 b#_ӀD  =GGTG:b#C /#iu@GGTG"":b#bu@ $//$GGb#?@GG4GB"tG8b/:^$GG@b#7_GG4GB"tG8b/:^//c/`<G] ](}08@ݤHP#/k///#~^^~ (0޴8@H>P^XG GGGGGGG0Q$DTGb#@""@G/_GJ$$GTG""b# /_G>$$GTG ""b# /{_G2$$GTG ""b# /o_ $$G""b#TG g_G$$ /(0.0JG4G9b#u@G 4Gbr[^G4G0bT^ GGPb#_/GE_EGTGb#""X //T2_G""> TGb#+_G88"" TGb#/#_G0"" TGb#/_G//& p""TGb#_G"" TGb# _Gx"" TGb#/_G"" TGb#/_G// X""TGb#_GGB"GtGb9^Gb#G^_GG4GB"tGb9^GGG`B"DtGtGb`9^GGb#I_GG4GB"tGb9^/GGGB"DGtGb ~9^Gb#G2_GG4GB"tGbs9^G]]} (0ݤ8@H=P]X`#k/#~^^~ (0޴8@H>P^X~`GG} xDDy DGGu@///`pb#_nDGG0b#TG^d//DGGTG b#/> ^X//8DGGTG  b#/^L//xDxbG ($GtGb@ G@@dF/tC:^6GGGTGbr;^//DGTGB"? (tGb#G8^G$GTGb_;^(dGG4GbtGB"`8^G($GTGb/O;^GGTGB"tGb/8^//GGTGB"tGb8^G$GTGb7;^GGTGB"tGb/8^//DGG@B" (tGbG//8^G($GTGb;^GGtG`B"tGb8^/GDGXB" 4GtGb8^G$GTGb;^GG4GpB"tGb8^ӷ/DJ($,G$H* /+DGD"" $.GtGb2JB"+F d.tJ4GgF` /o8^G1@GGtGbGg8^GGtGB"tGb/_8^, H?GdDG4GtGB"bR8^GGGTGb/:^GGtGB"tGb/C8^l//(à8D"  ///0u B BQF //pu`B`BF`/ uBBF///GGGHB"4GtGb/8^$GGTGb ///s:^GG4GB"tGb/7^G$GTGbe:^0 ///GGb#_G""TG@b#/'_/// $@"GGbTGX1"0$ /C:^,$G(b# ///[_@"TGG@b#8D81" $$ _z dw`$!.!J11,B!Bq`@\^G_GG/GG =]c0b/4^G@b#z_GGG] ](}0@#/k///#~^{#G_G]G #k///#~^({#G_G]G #k/// k/ /k///G4G{/7///# ^~^ ~(G GG{#_Gb#'_G]] }(0#k/// k/t0Gk/ k/x0Gk/#^~ ^(~08@޴HPX>`^h~pxG``S/SKGGGGG$?%_%SKLG )!%J!//XaF&FG2@`(btG/G//n^G `""GGtG(bn^G*/aFG&F2@GtG(b n^G GX""GtG(bn^G8aFG&F2@GtG(b n^G GP""GtG(bn^GXdFG&F2@GtG(b n^G Gx""GtG(bn^GgFG&F2@GtG(b n^G G""GtG(bn^GgFG&F2@GtG(b n^G Gh""GtG(bn^GdFG&F2@GtG(b ~n^G Gp""GtG(bvn^GópB`//<G&F G 4G2@ GtG(bcn^,Gb#GH@/x"//{_G@"4Gb#_<"b#-I_G ="G_"tG(bCn^G~/@DF"3`J . TGJF pF+/@D"&#./7J tGJKFGF5נJ F///@D&"F"@f/&, H. Gf"qK2H'F'DJDF HD H D8E/'91aAaA"dA7 C7GF /#:iA#2hA8xA[CGB CGG@"G@b#<_GG_"="tG(bm^G ///y"GGb#_G@"4Gb#_<"b#-I_G ="G_"tG(bm^G/ f-fI/G&F2@GtG(bm^G] ](}08@ݤHPX=`]h}px#k///#G ^G~(^0~8@GGG> ^`b#~b_ / =/` 9/ "G4Ga[@ZkGG GTGGG"G b#G_ %/GG//"! Gd Gb#= ]}U@ӐG4G`[@Zkc] b@G ](]0}8@P#/k///#G^G~^ ~(08GGGGb#Wb_G"GTGb/{0^GG `#GGGGG9b#!D s@GGGb#G4GG@GG4Gb.^G]] }(08@#k//0#G^G~^~޴GGGGGb#G ~b_G !  /?= }"b#(4}0=<}@T_GG4GXb;A^$4 b#8_GGTGH""Db#$#D/ 8F/_G GGTG7b#m@GGTG`""7b#m@"Gpb#_G" b#_G]]}ݤ#k// #^~> ^~޴GGGGGGGAF qn`/<àGG4Gb/ ]G//{"GGb#_Z/G4G`b/-^GGG TGG8"GGhb#/+_G//G //!  /?}"xb#(ݰ04}<@}_"b#G_GG4Gb4^ǠGTGb#/&%î_ //ǠGTGb#&%/_GG4Gb-^GGTGGGhb#h"GŠ_G]]}ݤ#/k///GG({#dGGH{#`Gh{#]/@# 4G^~^~GGGGG8b ^8 < G//s]0"G4G<a[@Zk<GTGG(b//^G// /G= //"! / "b# (,}48._"0b#G_GG4GXbe-^G]]}#/k///G{#/P#G^~G~"^~>GGG//"s"/"b# ](}48,_"Pb#=_GG4Gxb--^G]]}#k//P#G^~G"^~>GGG//""/ݢ"b# ](}48},ݲ_"pb#=_GG4Gb,^G]]}#k//@# ^~^~GGGGG ~:`///@< GG4G(b/]G// (/GtG$C8b.^G/ /G= //"! / "b# (,}48r_" b#Gb_GG4GHb,^G]]}#/k///Gp{#/GG{#GG{#pGGG41`B)#~^^~ G"1`B/"C VG(v@@7H@x@ bZk/"1`@ "C///0`@ "CGG]]} 0#k/Gk//Cx@/?&1"0BBk///?&1"0B Bk///?"0BB/k///?&_"P1"0BBk//?&p1"0BBk///0?"0B B/k///!?"0B B/k///Bk// ?"0BB/k///%?"0BB/k///1?"0BB/k///1?"0BB/k///%?"0BB/k///(?"0BB/k///@?"0BB/k///?&1"0BBk///3?"0BB/k///?&01"0BBk///?&_"1"0BBk//?&_"1"0BBk//.?"0BB/k///0?"0BB/k///N?"Q_"0BBk///4?"_"0BBk///_&?&0BߦR"Bk//?"0B B/k///?"0B B/k/// ?"0BB/k///?& 1"0BBk/// ?"0BB/k///$?"0BB/k/// ?"0BB/k///?&1"0BBk///?"0BB/k///?"0BB/k///?&1"0B Bk/// ?"0BB/k///'?"0BB/k///`$?"0BB/k///2?"0BB/k///?"_"0BBk/// ?"0B B/k///%?"0B B/k///?"0B B/k///?&01"0BBk///p?"0BB/k///?"0BB/k///p?"0BB/k/// ?"0BB/k/// ?"0BB/k///?&1"0BBk///01?"0B B/k///?"0BB/k///?&+_"1"0BBk// ?"0BB/k///?"0B B/k///?&1"0BBk///?&_"1"0BBk//@0?"0B B/k///P?"0B B/k////?"0BB/k///1?"0BB/k////?"0BB/k/// ?"0BB/k///0?"0B B/k///1?"0BB/k///?"0BB/k///?"0BB/k///?"0BB/k///0BBk/?"0BB/k///?"0BB/k///?"0BB/k///!?"0B B/k///?"0B B/k///?&1"0BBk///?&0BB/k///?&_"1"0BBk// ?"0BB/k///?&_"1"0BBk//"?"0BB/k///'?"0BB/k///)?"0BB/k///&?"0BB/k///+?"0BB/k///#?"0BB/k///?"0BB/k///?&1"0BBk///?"0BB/k///P!?"0BB/k///?"0BB/k///?&1"0BBk///@$?"0BB/k/// ?"0BB/k///?&1"0BBk///?"0BB/k///?&_&&"2B&1""1BTB0B3BB2F0F/k///?&_"1"0BBk//?"0B B/k///?&P1"0BBk/// ?"0BB/k///?&P1"0BBk///?"0B B/k///?&1"0BBk///p ?"0BB/k///'?"0BB/k///)?"0BB/k///*?"0BB/k///_&?&0BR"Bk//_&?&0BR"Bk//?"0B B/k///?"0BB/k///`?"0BB/k///?&0BB/k///P?"0BB/k///?&1"0B Bk/// ?"0BB/k/// ?"0BB/k///?"0BB/k///?"0BB/k///?"0BB/k///?&1"0BBk///?"_"0BBk///?&1"0BBk///?&1"0BBk///?&1"0BBk///?&_"1"0BBk//M?"0BB/k///#G ~^{#G_G//G] #k/G]G4G #/k///G;TG{1"^//1BB$BFk///G;TG{1"N//_&?&&&BR"1""BB&&2FBB"3FB4F5F0Fk//?&&_&&1"s"R"ߔ"1B3BBB7 B7`BQF3F0Fk//G;TG{1"//G(;TG {(1"//GH;TG@{81" //Gh;TG`{H1"//G;TG{1"//G;TG{1"//G;TG{1"//G;TG{1"//?" " ""P"1B3B@B0B7 Bw`BWB2F3F0Fk/G;TG{(1"ʝ//G8;TG0{`1"//GX;TGP{1"//`!_"?"!0"p"2B1B80"4BwDBW B`B&2F5BBJ"3FWBB4F5F0Fk/G;TG{1"//G;TG{1"//? _"& Bߐ"2B&3"ϰ"7@BB?&M"rF6BBe1"TF'7B7BUFBWB?#VFBWFPFk//G;TG{1"j//G;TG{1"b//uBP"p""@B`BB2F3F0Fk/ "uBP"ߐ"3B@BB"7`B2FB3F4F0Fk/G8;TG0{01">//GX;TGP{@1"6//Gx;TGp{P1".//G;TG{1"&//G;TG{1"//G;TG{1"//G;TG{1"//G8;TG0{/// @k/ @k/BB "p"`B2F5B"B3FwB"4FB""5FBB6F7F0Fk/#G ~^{#G_G//G] #k/G]G4G #/k#G/ p/p HpKC`F#vSJUJF"..P..PJJC0JFp"SJJG3vJY8K6G3 C`FxSJWJFC G B;rJA9H2D;!B "#k///////////////{#"G`!"Xc/ #~^^GG{#_G]]` #k//`k/Gh/Xc #~^^GG{#_ \"G]]h #k///1hk/0GX)"Xc/ #~^^GG{#Z_0G]]X #k//0Xk/{#4GG^~GG^ GGs"//qB51 B0@B @.uB.JrB6/CJ.CJ6K.xBxBX/>XKJ.JF7CFF8q BxB6C9Q BFyBrB1 BF.J7/C7KP@ByBV,FD.JDp@BuBC@BVH.JyB:/VDB.:KJT/uB!@YD8/TKF8KFDWCFFDG]] 0#CCF/k///#?#^[~^ GGb/XZkU@//4G/B?#bXZku@ CG]] 0#k///#?#^ [~^ ~(GGG(bWZk7@* \@Ck//4G*/G&/4GG#!tG/4GtGCG/4GGc//4G /GX/c 4GTGG]] }(0#/k///#^~{#>"G_G] #k//0!#~^^GG{#_@b#_Hb#_Ӏpb#"B_ "B4GG0]] #k///{#//{#N//#G[G^~^~GG#"GG "GR"b#ڪ_G"4GPb#_G4GPb#`"_ӐGTGTGc#c#":`[@Zk6/`TGG~tG ~GP~GGG#(0GGb#4G8@H֟_/GTGtG~GGGG (G`"08GGb#@H/_G]]}#/k/// [#TGG^~GG^ ~G(0R2B8GGG#G RGGGH^ G(0Pb#8@/_[// "GD"GGGGPb#Q@c1^TG^G#p@ GH>G(08~@e_9GG4G %TG%b#/_ӠTG #ca!"#e@a`[/@Zk// =CGGGGGGPb#G@@>TG> (08~@H+_G]] }(08@#k//G0{#m/s#~^^~ (0޴8@HGGG'0GGXۤ? //Cb#EC DG@/fG4G[@Zkf4G[//@Zk0@@ @/GG////b#@D/@à0@@ @G4Gb#/t_X4Gh[/@Zkh4G[@ZkhG4G[/@ZkG]]} (0ݤ8@HP#k///#TG^~ ^(~08@GGG ^GpB> B{Cc[{CRQCRG@Zk8"" #b# @0@G7 H#[_ X/Ձ@@#3D ݢ=}RB EQBP]X=u@$DŲ %tGeE_"Gb#CF- / t_P"X4Ga[@Zk//_"tG`=GP뢤b#/ #A!@D0@t_4Ge`[@Zk//CD@B@//X`CS@0@RrB G] ](}08@P#/k///;81 00/k///p#Gp^~G> x^~GGG)@///.0@a#"s[KPJa#F @9@Fa">J.vJUJ! F>.uSK0@ @TJ9@FF>.JUJ{J! F>@}"`B.""GTG(bUJ> ,JA HpJ0DG < ="//^GG0""TG(b^!GTG(b5@@0DG ="//^GGH""TG(b^ GXDGtGb#}@GGtGPb#}@Gp]x]}#/k///#G^~G> ^(~08@޴HPXGGGGG/)@///.0@a#a"q[KPJa#F @9@F!"A>SJa.tAJSaJ! tFa>A.sQK0@ @RQJ9@FSF>a.JSaJ{J! {Fa>@=" B`.@""GTGb="SrJ`> ,tJA Hp@J0DG 0/vJzJY0K"":G0?a.0@ @9@GSrJtFa>P/uJZPK{J"[GP?@Gb]"="@B.`""TJ> /JY Kz`J:GG ?TG/^@"GGTGb 1"/^Ӆ//@"GGtGDb0@GG1"^v///GGTG="b0@^G0@G""tGb^ĠGG`b#@@&_G AX/@"GGTGbG1"/^//* G.0A& f"qH A9A&#F{H PJF>.J"wGJVJ F>F/0A A9A6FZYK[GF?G.PKRGJu'H UFG>?Ab0@#="C7/"W#GY4K7?.:KPJGTGaJF>GkD//g@ds/c`^G0AG""tGb{^x x= G /*///`.0@ ""tJ @9@ F SqJqJtF"`>!/vJzJY!K! :G!?,0@ @9@FDHD</HXKyaJ! G?@GGTGx]"GB.g# WJb>'.JQ'JtH4F'> x="/3^GG""TGb-^ӫGGGGb#tG/?|@/GGTG="b^@"GGTGb1"^ӑ//@"GGTGb1" ^GG@""bTG^GGTG""b]x/b#_ @"G8DG7TGb/1"]gb#^`_@"G GbTGh1"/]Y//X="0b#\c //_@"GTGGbH1"]D/@"G?'GDb@9#(1"]9//@"GGTGb1"]/@"GGTGb1"]G$GTG`b#u@GG(""TGb]@"GGtG Db1"/]0@G`b#$B_GGTG(""b/]//$ZĠD (ES@"G1"GTGb/s]GG="TGbm]GGTG""bg] DGG""btG/@^]GGTG ""b0@W]0@G`b#$_GGTG="b/K]GGP""TGbE](DGG""btG@//;]GG ""TGb5]G$$G`b#_GGTG(""b*]Ө/@"GGTGb1"!]GGTG="b] DGG""btG/@]GGTG ""b/ ]0@G`b#$_ӄ/@"GGTGbGh1"/]//*H H G.0A& f"qH A9A&#F{H PJF>.J"wGJVJ F>F/0A A9A6FZYK[GF?G.PKRGJu'H UFG>?AGH"BH=".#(#TJ>h/J[hKTGpJpGGh?b/]@"GGTGbP1"/]-//ĠGG/&0@//GGTGH="b0@]G0@G""tGb]GGtGHb@'_GA @@"GGTGb01"]G] ](}08@ݤHPX`#k/0#G^~G > ^~޴GGGGGG/)`///.0@a#a"q[KPJa#F @9@F!"A>SJa.tAJSaJ! tFa>A.sQK0@ @RQJ9@FSF>a.JSaJ{J! {Fa>@ =" B`.@""GTGb ="SrJ`> ,tJA Hp@J0DG <"]G""GTGb]@//EwBB/3 ܂\\BCk//GGTG""b]/GGTG""b]/GGTGh""b]/ GG""bTG/]//GGTGp""b]/ GGp""bTG/]//GGTG""b]GGh""bTG]/ GG""bTG/]Ӹ//G8DGx"" TGb/]Ӭ//GXDG"" TGb/]Ӡ//GxDG""TGb/]Ӕ// GG0""bTG/]ӈ//G8DG""TGb/]|//GGTG8""bv]s/GGTG""bn]k/GGTG(""bf]c/GGTGX""b^][/GGTG""bV]S/GGTG`""bN]K/eG""GTGb } =] 1@@/m ܂\@pCk//GGTGH""b*]_/"GGTGbX1"!]VGGTG""b]O/GGTG""b]G/GGTG""b ]?/"GGTGb@1"]6GGTG""b]//"GGTGb(1"]&GGTG(""b]/GGTG""b]/GGTG""b]/"GGTGb1"]GGTG""b]= @4܂\<@Ck/GGTGH""b]'/GGTG""b]/GGTG ""b]/GGTGX""b]/GGTG""b]/GGTG8""b]xDDGD ""GTGb]GGTG ""b~]/GGTG""bv]/GGTG@""bn] ]GG""btG@f]]GG`""btG]@^][/GG""bTGU]GGGhb#_T///EGGP""ebG/@B]?/GGG""tGb9]6E"GGG eb@1"-]*è"GGGGbG1"#] //GGTG ""b]/GGTG""b]/GGTG8""b ]/GGTG""b]GGTG""b/]0@GGGb/G@R@{_0@GGGb/ E@R@o_//GGtG(""b]G]]}ݤ#k///`#Gp^~G"x^~GGGGG)@///.0`B" xJ eB9cBT":DWJFwJ4?. K4#qHPJ"F> .0`B eB9cB@GVJF?4.KQ4J{K";F4>sB= 3@.A""TGb="VJ>A/JZAKpAJPGGA?G~]H"GGbTG 1"v]/H"GGtGDb1"/k] $0@GGb#@@R@_Gp]x]}#k/0G /k///011 B0A!B k///k///P#TG^~([ @^ ~RB(GG>GPQ_Bz[@Zk08"TG/ p "H1"[@ZkG ///CB@0@#G]] }(0#k/#~^^~ (GGG_G TGGTGb#_G///$Gb#X D @GdG0b#@GG]]} (0#k///#^~^ ~(0GGGq_G TGGTGb#__///Gb#xD@D]Gb#k@G]] }(0@#k//#~^^~ (GGGA_G TGGTGb#_G///G(b#u@$G D Gb#=@GG]]} (0#/k///0#^~^ ~(GGG TG{#r_TGG,//1Gb#5 B5!B1DtG/ b_tGG//G_@`G4GGb]`////C?^Ӹ`G4G`[/@ZkG]] }(0#k///0#~^^~ GGG TG{#*_TGG//1Gb#!F tG_tGG/G_`Gb#@GG]]} 0#k//p#`^~h^p~x^GG^GG`{#_ 8DG0B"G{ tGb/=@//|G]yB\ b#U_G 䡝@GB"p GtGb]k//_X="b#B\c//_GGGbtG@B"]V/[GGwJ_H=H=P=P][KX/c// .VJF>1CC"G R/{KZRK[GR?R"q (= //3C.1FpNWJvdJ4C3F8CUBFB15BO01"`!J! F>/a.SaJvK9CFZ9CGZC4B0"uJ! uFa>/?7CB! ( @ BF/@////r. D@FKSrJ! @tKR"7CB BtF7Fr>+ ..J! @xJTJR";CB dCFF>/.R/J! @sJZRKR"8CB CSGFR?!/.!K! @p2KWJR":CB DCFzF>#CB d@/`/XK?///r/"[vKr?//_(/δYc/ѴZc B\ZG?'"GGGB"bc @9#/]`BG"TGhbsZk [B?#bc //SZk[ _X]X0@cGGGP?'B3PB"PB"!FGB\9#b ]= @G///0."F0J&F ."JF/."JF /"KGP/"PKFG/_0,0H%@8 DB//`..D D`JVJ y!J! F> /A.KRAJ pK! PFA>/`..`JVJ waJ! F> ` /. KPJ r!J! F>?B4G"bTPZk0@C $B" P.GRPJP>HBG]"RZk G]@GB"GtGb]G`]h]p}x]#k//G /k/// 0% //Q8@F @ q0@4C(/`G/k///ѢG/k//1 0F/ //G/k///k///B?BGGDGG/ k/pX`G`G4GXDG14GFAF)`/@////F6`F 2F.@F*`/ k/Gk//8 D 4 D/k///P XBF/`qXbF/1F/  qF/`k//8@F8`FSF/@(//(14C/ p !C`G B  ` B /k///QGG/@///pF0`Cs3 pF0`C`G/0D0`C/`@G/_GG///QF0 @yRQF0 @s@G/F0 @/k@G/rF`C/@ ;@ `C @rF@/! @ @ ;@/`///!1 @ ;@/_ aC @ B 4@rF/@///1;`C tC111111 aC/ `///;1`C1 aC/_///D@B"`2DGG `tCsGBFGG/ @;?@ D@ `tFGG k/// k//Q F/?@qF/`k//08 D 8F(p/`(Q3C/@ p `G2C rB  # rB@/k/////FF `F F `/ k/ k//4Gk//FGBB7 H@#~^^~ (0޴8@H>PG C;CGG@DCG/`GFP@PCGP@//'%@G Gv_ /'@@0 C 7C0@@0`@CC7 JG]]} (0ݤ8@H=P`#/k///#4G~^^~ (0G GGG`[XDz/70X"DG3 [@Zk"GGb#(1"_G/G]]} (0@#k/// BTGGG4GNZk%G8b#/_4G G8b#/_ eG///G///04GX"F+ )XD&#~^^~ GG [Gz[@Zk " 4Ga[/@Zk G4G`G]]} 0#k///k///8;#4G^~^ ~(0GGGGq[/>@Zk"GGb#@1"/s_G@/8BG4G7`r[@ZkGb#"b@1"^_cG4G[@ZkG&///G///!  ?TGb##X"F Dd0@BRSBG],_}/D$0@@AA@aGG]] }(0@#k/Q#~^^~XBF (0޴8GGGA@GGG/#///#TG&@!ADXBG/@G//#`!0F  !Pb#_#0@@ @/?///G///G]]} (0ݤ8@#k//4G//4G//GcC0 B 0BDF@F0 B 0B0 B 0BF  #$G0 B 0Bc  _/4G//_B?BD/x#~^R^~ (XBG0޴8@G`@GqGGGGG8`G/V`/#GTG`b#'B1 QXBF@1$D  1/w_A#0@@ @?à"qG4G[@Zk"Gb#/x1"m_+G///  TG#"TG&D@ ðqQ@[/@Zk"Gb#x1"M_ G(b#à#0@F@G2_G]]} (0ݤ8@P#k//| #G~^^~ (GGGG Pz0 @Z# @0 @dG/]` @0 @/ F/U @0 @/ `:$F/M @zdGH`?#hb{ G4G[@Zk"Gb#/x1"_6G///!  ?TGDB!@TG#Q?@r[@Zk"Gb#x1"_//b#XF #C0 BcC2BG_/C#0@@AA@G]]} (0#k//\ ;#~^4G^~ (GGGaGG[/@ZkP"Gpb#x1"/_8//G///!  ?TG#XbTG F@ sQ@[/@ZkP"Gpb#x1"u_b#XF #C0 BcC2BGW_/C#0@@AA@G]]} (0#k//#~^^~ (0޴8@H>P^X~`hpGGx GGG{#_GGGTGx"Bi// G# G G#DTGGb#-BGB1R2F`XF XF ѢF  2/_ 0A A A?/ 4GjG4G9` G/[//@ZkI/k! /#TG,D AQA i[@Zk/;b#d gAk XE #0 @M0@#G _ /#0AAAaD0@ @@_GG]]} (0ݤ8@H=P]X}`hp#k///p"Gb#1"_G/p"Gb#1"_G/Gr #~^^~ (0޴8@H>P^X~`GGGGGh{#_G$GGTG"/B ///CiG4G@[//@ZkIG" /CTGJF JAQ_A@Ch[@Zk/;@b#$&@A XF #C0 BK2BcG ?_ /#0 @A0@#Ad0@ @@GG]]} (0ݤ8@H=P]X}`p#k/Gk//"G(b#1"'_G/"G(b#1"_G/#~^^~ GGcb GP$@p//s"F0`@ r@/F/0`@ r@/31G/ 0`@ r@/31D/ 0`@ r@/_ r@//7@{#Pp@XF_" 1@Qa@ `@2@1"# @B r@tF`/`@1"Ѣ1q r@Ѳ1q `@ `///Q0`@1" `@Q@@G]]} 0#k/#~^{#^~ G;GGP 2B6@pS3BXF_" 1@Qa@ `@2@1"# @B r@tF`/`@1"Ѣ1q r@Ѳ1q `@ `///Q0`@1" `@Q@@G]]} 0#k/:#~^^~ (0GGGGG0 //CEC/pXbG/`b#//{_0@@ @"a4G[/@ZkG4Gd[@ZkG]]} (0@#/k///;#4G^~^ ~(GGGq[@Zk"GGb#@1"_GGG//"! 4Gb##i_GG]] }(0#/k///h;#4G^~^ ~(GGGq[@Zk"GGb#1"_GGG//"! 4G4G#C0b#3_GG]] }(0#k//#~^^~ (0޴8GGGG /#Gpb#/ _G4GGpb#{_#G= @ ///0@b#B@1_ @G]G]} (0ݤ8@#k//;#4G^~^ GGqG[@Zk"Gb#X1"/c_G/GG//! B ?=4G  G]] 0#k/;4Gqk//k///GR Q/K@qE`#~^^~ (0޴8@HGGGGG{#_G"`#G D G/GD @c @`T@4//GGPb#G_Gb#GR_0@ @G]G]} (0ݤ8@HP#k//Gk//Gk//Gk//#~^^~ (0޴8@HGGGG{#GJ_GG,`c//(`D/$#$G D@/`///GD @âV@6//GGpb#G_Gb#G_0@ @G]G]} (0ݤ8@HP#k//G~0/w //o#~^^~ (0޴8@H>P^XGGGG{#_G`GG4Gpb#GG/ _G2/GD  @#Q@1//GG4Gb GG@^G GGGTG0b#_GG GGtGb#_GPb#G_/hG4G[@Zk0@ @/?BGGTGвb#*/_G]G]} (0ݤ8@H=P]X`#/k///Gk//Gk//Gk//G0G P@#~^^GG{#_GG]]u# #dGk//Gk//Gk//#~^^~ (0޴8G,GGGGТ&p?FF"`G/////GD  @#Y@9//GG0@b#_/// @?GG]]} (0ݤ8@#k//4G//#G~^^~ (0޴8@G3 GG{#GG _G*`#G`b#& //"Ga_/`#GG GGD # @ CR@2//G0@Gb#$F`//_Ӡ @GG]]} (0ݤ8@P#k/#G^~{#CG >_ =Gu#] #/G Q/@qC/ `=@B2F/ 3{#GG{#k///GF Q/?@q9`#~^^~ GGG#@{#/Т//_G@b#_`=@c#/Gb#a_G]]} 0#k//G//G]}b#] G0#g///Gk//Gk//Gk//#G~^^~ (0޴8GG1 GG {#GF_GG(`#b#/$ // G_/`#G G/GD # @ CR@2//G&1@Gpb#$F`_/GG]]} (0ݤ8@#/k///#G^~{#CG >1_ =Gu#] #/G Q/@qC/ `@B2F/ 3{#GG{#k///GF Q/?@q9`#~^^~ GGG#{#/Т_Gb#_/`//c#/Gb#a_G]]} 0#k//G//G]}b#] G0#///Gk//Gk//Gk//GG{##^~^ ~(0GGGG^ ~// ///G]] }(0@#/k///(#GG`b#4G /_((#/? ]GG@G]GGb#ݞ_G]GG }G]Gb#] }(0@#%/p0tP/k///#^~^ ~(GGG> GG]] }(0#k/pc=GtG`[t/@Zk///=Gb#G]]G }(0##^~^ ~(0GGGG^///G///G]] }(0@#/k///pcG]tG`[t@Zk///(G]G]GHb#] }(tG0@#/˘///#TGG~^G{#^GG(&_(G]] #k///GG{##^~^ ~(0GGGG^ ~// ///G]] }(0@#/k///#GGb#4G /_#/? ]GG@G]bGb#_G]GG }G]Gb#] }(0@#/W///\0`P/k///#~^^GG/ G//G]] #k//\pGtG/`[`/@Zk//G]Gb#] ##^~^ ~(0GGGG^///G///G]] }(0@#/k///\cG]tG`[`/@Zk////GG]tGb#_G] }b#](G0@#///#8;TG~^G{#^GGJ_G]] #k///#^~^ ~(0GGGG^/// ///G]] }(0@#/k///XcGTGhb#4G`/ߖ_XXc/=BG GGtGb#R%_G4Gb#_"GGGhb#GGaG]] }(0@#s///#G~^^~ (0޴8GG=GGG 8//GGTG0""@b#_// *8#GG/ </8#GTG@b#&B1 Gލ_//<#0@@ @? /8cC@c ///GXGTG`b#6_G]]} (0ݤ8@#/k///#;TG~^G{#^GGX1_XG]] #k//#4G^~^ GGpG[@Zkp"Gb#1"/_G/GG//! B ?tG G]] 0#k/H;#4G^~^ GGqG[@Zk"Gb#1"/k_G/GG//! B ?TG CG]] 0#/k///(;#4G^~^ ~(GGGq[@Zk"GGb#1":_GGG//"! GG#4Gb#/_/G4Gb# "_GG]] }(0#k//;#4G^~^ GGqG[@ZkP"Gpb#1"/_G/GG//! B ?=G  G]] 0#k/;#4G^~^ ~(GGGq[@Zk0"GGPb#1"_GGG//"! GG#4Gb#/_GG]] }(0#k//h{#//p;#4G^~^ GGqG[@Zk"Gb#1"/_G/GG//! B ?=G  G]] 0#k/;#G4G~^^~ (0GGGGa[@ZkGG0""b#k_G~/##p$c $("d (C7AB\\Bj\Ck///G4Gb#_]/#G4G4G(b. !/+ G/ ^#GG4Gb#!!_ ccc c`/GGG4GtGXb)3^GGGTGxb-^cGb#_(Gb#_#///G#b#_/G#GTG`Zb#@cd /"tGpp"01"[@Zk///GG]]} (0@#k//#G~^G^~5@5@ (:D0޴8@GGGK p//?`t#/ //c_G4G8b".^N/GG/H$// $ /Db#FB pGXbF`_/GG4G8b.^0@@ @`4G[/@ZkGe///b#/'_//DG4Geb#// @ /D¤f4G[@ZkG4Gg[@ZkG]]} (0ݤ8@P#k//GG#~^4G("^GGb#^ #///G4Gq# "///`#x^~^^GG^{#}_ G8D"4G/ b#//_./B\b#_G4Gp"b#_#//_X="`b#B\c ā_G4G"b#ډ_/B\G="b#k_G4G"b#Ή_/G4Gb#H"lj_Gx]]]#/k///G4G({/9///G*0#~^G^GG{# /w_G4GbG]] #/8///GG0b#P"]]4G #//G4G0r#P"///#GG4G~^^GG "hb#^ #o///0₧B7!@\<@ Ck///G4Ghb#"[_///G]] #k//8b#_G4Ghb#G_//b#_b#1_"B "GaR"82"[@ZkGGhb#"]]4G #'///#~^^~ (GGGGp{# "//G]]} (0#T#"7!@/7\<@@Ck//b#I_G+///G]G]} (0#k///Pb#_G///0b#_G///"B "GaR"82"[@Zk/G@b#_0"pb#/G]GPb#]} (0#//_/k///{#//#;^~^ ~(GGG4Gb/8^"G/ /Gb#m@hG4G`[@ZkG]] }(0#k//# ;^~ ^(GG/b#_b#CJ@4G`[@ZkG] ](0#/k///GB0(_7!@\<@/6#~^^GG{C/k///b#_b#@//"_!\//8(Bh"G@"`R"82"[@Zk/G]] #/k///k/#_^~^ ~(GGG{#_//#GGb#x D //_\b#_Gb#H_G]] }(0#/k///^#~^x{#G_XG/c G]4G #/k///GG] #k//>#4G~^GP{#Gҋ_G]C #/k///Gk//C/k///Gk//?0G7!@\<@7#~^^GG{hCk//C ///G//b#_b#_//"B"G"aR"82"[@Zk/GG]] #k/Gk//#^~^ ~(GGGG@{#_//#GG b#X D //_G@b#_Gb#_G]] }(0#/k///;#4G^~^ ~(GGGq[@Zk"GG8b#1"R_GpBGG4G ~Zk=GGb##/ې_"(,b#04G@DHXC@GG]] }(0#k///#~^^~ GGG{#Y_G `hb#TGG(_Ghb#TG(㳸"_G4G"aG]]} 0#k//x[#4G^~ ^(~08@GGGGr[@Zk"GGb# 1"_Gk/GG//"! /=x碦G4G$$ du[/@Zk"GGb# 1"/_G//GG//"! xbTG"%4Gs[@Zk"GGb#/ h 1"_XG4G`[@ZkG /8B"GPBQBG/W}Zk 4GݢX梤  e[@ZkeG4G[/@ZkG /`G4Gb#/U_GG] ](}08@P#k/#(4G~^^~ GGG`[/@Zk b#/^_(G4G`G]]} 0#k//#4G~^^~ (0޴8GGGTGG0GG0b8!D //2^ c/`///G///G]]} (0ݤ8@#k//G#!1 @7"@킧\<@"4C/k///(cC.CJ_.c J#aHCB/c.J.c J#aHB/ // K//X킧";q@CaC\|C Ck//(/////."J @8D//3.J4G3.J 8ACCF/ 98"D/ G//?G/G`8/ G//?G/G/`GGy/Gv// AJ@q/6JVBm/P#4GC ^~(^0~8@H޴PX`>h^p~x޵^GG >CGG^~)5@5@ D;# Q5@C5ACzGa/@/G@/h// `[PB/@Zk`" Cb#G! 1"O_b#l_b#i_GG ](]0}8@HݤPX`=h]p}xݥ]#/k///' ݢ G GCf C8`FF 3F4F8 FC3F/GGpb#B9_\b#_L(\C=/D ///pb#B&_ b# _/G )ʴAX/c@4GG$/// iG/KXc4GG// G/δYc4GG //G/Yc 4GG0@ @`@)!/4G 0@A XA `A/"y[4G@Zkb#_b#_Gm/BB#D~^^~ (0޴8@H>P^X~`hpG'SG5@C5AC8`G8@GzGGGGGBG01BB \B0C/k///G"//Gb#_Gb#_//G///G]]} (0ݤ8@H=P]X}`hp#k///& G G킥0 ./)G4G b+B3^ GGb#_GGb#p_lG4G[@ZkG4G0b#@Gb#_GGb#`_GGGb#@G 0@A `A MA/Gb#/G_Gb#/C_G/GGGb#G_ӥ/ GF G G.@j,`///*G4G b-@93^ GGb#_GGb#$_hG4G[@ZkGb#p_GGb#_GGGb#g@ Gj 0A A A/Gb#/_Gb#/_Ge/GGb#_G4GHb#@GGb#_GGGb#C@R//(B>"G0BhR"82" [@Zk@à?BBGD#~^P^~ (0޴8@H>PGG5@C5ACzGG@GC#${ /#,#HGc/zK:AK@GA@G///b#B7_DG4Gb.$'@2^G GGGTGb#f_hG4G[/@Zk //GGTG0""b#V_// $0@@ @?;/hG4G[@Zk4G5/4G2//G//$b# 'A _DG4Gb$ 'A n2^G GGTG0""b#&_) GGGTGb#_hG#4G[/@Zk$0@@ @?G/G]]} (0ݤ8@H=P`#k///Gk//4G//hG4G[@Zk4G/w 5@5@ Dn#~^^~ (0޴8@H>P^X`^h~GGHR^GGGGCE;?@//eG4GgCb2^ G*Gb#/{_GG`b#_iG4G[@ZkGb#4G@G_`G b#_c\b#_////bXc///bXc E0@ @@/_//4GG]]G} (0ݤ8@H=P]`]h}Xp#k//Gk//Gk//`#^~ ^(~08@޴HPX>`^h~px޵GG_5@5@ DZY Q5@C5ACzGCS@ѠGGGMEK@J&/G 6`fEQBGG10@s" @0@4F/#/// @0@4F4F @0@ @0@4F4F @ /0B B///4G//P_B4Gh[@Zk`" CGb#/ 1" _/G///G] ](}08@ݤHPX=`]h}pxݥ#k/h%4G[P?@@Zk C Gb# @`"b1"_c4G[/@Zk//%B4GQ?@xZkh[PB@Zk G`"bGb#1"_c 4G[/@Zkc4G[@Zk/h&4G[P?@@ZkCGb#`"b1"_c 4G[/@Zkc4G[@ZkcG4G[@Zk&BG GQ?@VxZkݡ O//ŢGCb#GVA<_ ]/8/// &b#QA._ *F/'//NG4Ghb@eSA0^4G(Ghb PA0^TGG(лb#J_D/&0AJ!! A?4G 0A!! A/%"G ]// i4G/[@Zk0AJ! A/fG G`/// i4G/[//@Zk0@! @i[4G@ZkiG4G[/@Zki 4G[@Zki4G[@ZkG///q#;~^^~7aB (0޴8GGGGGB훧G\|BC/k///E7AC/3`킧\\CCk//$E2B(db#_Ӧ`@"//% .$JC!B$?B/BbrBX"R"82"///7@/ 킧\@|Ck//eb#_Ӧ`@//GGb#_G4Gb#\@G_G/8b#^p_C8b#/k_>\xb#_8Dxb#///_Ӧ5@/xb#_ xb#/_ @xb#_8Dxb#/_Ӧ5@/xb#_ xb#/_ @%G/Xc@4GG//G//B""BqR"82"///7@/ 킧\@TCk//$ Q.eQJCqB|eBy/GTG%hb#_GpGGb#@_G4Gb#@G_G8b#^_8b#C//_>\xb#O_8Dxb#///G_Ӧ5@M/xb#A_ xb#/;_ @@xb#5_8Dxb#//_Ӧ5@5/xb#)_ xb#/#_ @(%G/Xc@4GG//G//B""BqR"82" ///Bb"cR"82"G[@Zk/Gb#_Gb#_G]G]} (0ݤ8@#k///#~^^~ (0޴8GGGG_GG_Ӻ@@GGAGDb# _Gb#TG_G]D4G/X &5 B5!B5B5B8`F8 FPFqF0F%FF&F4F7B9 킧\BC/k///GGGb#_G)/f`c%C#@!/%?@/GGEb#GB_GG%Gb#_G /0b B,"G8"cR"82"[@Zk/Gb#E_Gb#B_GGGG(b#_G]]} (0ݤ8@#k/#~^^~ (0޴8GGGG_GG _Ӻ@@GGAGDb# _Gb#TGb_G^DG/Y &5 B5!B5B5B8`F8 FPFqF0F%FF&F4F7B9@킧\B|C/k///GG4Gb#K_G)/f`c%C#@8D %?@8DGGEb#4G_GG%4Gb#_G /Pb@B"GX"cR"82"[@Zk/Gb#_Gb#_GGGGHb#_Ӡ@G]]} (0ݤ8@#/k///#~^^~ (0޴8@HGGGG_GGG|_Ӳ@@GGZFGb#D@_Gb#TG_G' b#8 D5!@8DG/(5 B5!Bx FSF@/ G//s_G4GXb# @GQ_Gb#HGx@F @^_Gb#[_GTGb#_G/'GG b#x D //S_G4GXb#@G1_GGb#Gx@F @>_Gb#;_GTGb#_G/b#^_wb#_s\b#T_Gb#P_ӡCCC"`"@B0D5@5`@FF 4G`DGTF/\@///W'/ʴXc@4GGO//0D5@GC#@C 4G`D[GC@//?h/lYc4GG7//F5`@""B5@ 4GFF`DGF'@//#ȍ/дYc4GG//D5`@G " B4G`DQG // (G/QZc`4GG//GGb#_Gb#_G%///(GGGb#5 @5!@FG /_//ȠGGGGG5@5@&D @GGGGG b_G]]} (0ݤ8@HP#k//0#^~^ ~(0GGG{# 1x F/ 4G// @b#/C$x D/? ^/_Ә"//!$8\@b#|_8Dc.//#@b#o_ /c #="b#^Xc/ ///_c c / \/GtG@b#l_G]] }(0@#/k///#^~^ ~(0GGG_GTG*/Gxb#M_G@b#_G4Gb#/xD/@=xD/ XDcG]] }(0@#k///tGG] b#G] }(0@#/#^~^ ~(0GGG_GTG*/GXb# _G b#_G4Gb#/xD/N@=xD/*XDcG]] }(0@#k///tGG]b#G] }(0@#/#^~^ ~(0GGGi_GTG*/Gb#_Gb#q_G4Gb#/xD/ @=xD/JXDcG]] }(0@#k///tGG]`b#G] }(0@#/#^~^ ~(08^GGG$_GTGmGb#_\Gb#-_G4G(b#/xD/ @B\Pb#VxDS_MPb#^_B\G="b#/_Xc= /[_"Ac/Xc C;///˴[("/c`0ʹX bӍ/c*Ý(c5Yc#///Ҵ[ w/c@cԴY("/c vXĞcbtGGb#_G]] }(8]0@#k///#^~^ ~(0GGG_GTG6/Gb#_Gb#_G4GXb#/xD/: @pxDXc d/G]] }(0@#/k/// B=-?#(byZk/tGG]b#G] }(0@#/ /k///Gk//# Gk//Ph䛧21@BBB\\B` Ck// k// k//Gk//Gk//ѢG5BBFk/k//G 0K aU`CUbC;FF 0D` k/ k//  18"D!D`G/4 D/` ! /1G8"D/ 1 qG8bG `1 !G8"F a `;G8"D  !F  /?/// D/  //?Gk/Gk//GGG/ /GG/k///`U`BUbBF`GG/k///_Gk/_ C囧ۦ RrU`41BB\B/Kd #^~GCk//s `G] #/k///;Gp{#8GP 1"0/0KTG$D Z{_= !!G] #/k///G] #k// X"F ///GG] #k//Gk//Gk//Gk//#H䛧~^^~ (GGGGG  3 A:1@CBC\\C.``Ck///! (H"TG8DP 1" p/pKb#DG/@Gz_/ cc/////XF///G///G]]} (0#/k/// c `DD//_41BBH䂧\B¦ Ck/8G 0/0K$G?H"GTGb#P 1"/z_C/c X"D?/ /k///{#n// GPrU`BUbBF/`k//G0F/k// k/k// GPrU`BUbBF/`k//G0F/k// k/Ѣ FG//k/k// /k/// p3G/ k// //1 5F /k//Gk//Gk//G PW`//`؁FF4//J Т@ D/C֢BG ` 6qG@D?F`֢/F`֢F///֢F ֢F֢/k//////XG@2G qG `{G/`G/k//Gk// PG2 k//qXbF`1(Ѣ/FF#/; 0G9 9D9 (pD/`@(P//+@YF-G(RF@"G/# ( / ///aG`{G `GԢG/6G/?k//Gk//>Gk// P#蛦4G~^^~r4 (GGGXۦs4B8`F/L`xFG7 v[@Zk GTG(b$/)^xG cx#| ! ///0@BTAB|C0@BVAB|C֢0@BXAB/ |C0@B ZAB|CZ0@B@AB@|C肤4///|01B|PB /X"`G4Gq[@Zk cxGG]]} (0#k// GP/@k//rG8`F/`k// GPFk//,k//k//C# 1^~^ GG{#_G]b#] G0#/#^~^ ~(GGG G b#D/[_GG0b#]] }G(0#/GGGb#]] }(0#//#^~^ ~(GGG G b#H/[_GGb#]] }G(0#/GGGb#]] }(0#//#8 F^~^ ~(0GGG/ GW/GQ5@5@ D/Kn_G/3@1@`5`B5aBF/`_[(///G8D/R@R@ R@/R0 @@R0 @ @R0 @@R0 @/@R0 @/_=[///_`b#}_GGb#M_G]Gpb#] }(0@#;///GtGG] }(Pb#]0@#}/#G~^^~ (0޴8@Gi GG{#GGGl_G// .J!"$@!@7 BQF3F?(JP ///F.JB#CF7CF/E/ EK"ACCDC7BFPFF/G1@GTG0b#]v_G GGGTG(bu~^/ X D/ /5 @?DGGb# //w_gG4G[@Zk/ ,H4 BB7 @F1D?G/GG]]} (0ݤ8@P#k///#8 F~^^~ (0޴8@H>P^XGGG G{#_g//Gz_GGTGb#/_[//GGb#G5@5@ D:_$G) /&///!G4GHb'@}%^ # GGb#7_ GGb#G_Gb#G_hG 4G[/@Zk$0@@! @?Gb#J_GPb#_GG b#K_//Gb#_ à G b# _GPb#/_GG b#7_Gb#/+_G]]} (0ݤ8@H=P]X`#k/#^~^ ~(GGG {# _G b#G_4GG8 F G:G55@5@ D//_Cb#s`ss]BBXFF// u_ b#,HDm_"b#_GG b#_G]b#] }(0#GtGGb#]] }(0#//#^~^ ~(GGG {# Pv_G@b#G_4GG8 F G.G)5@5@ D/#_Cb#s ` ss51B7B$s`_"0b#_GG@b#_G]b#] }(0#|GtGGb#]] }(0#//#~^^~ (GGG {# P%_GGb#e_4GG8 F Gq///GG/g5@5@ Db5_@GG(b/S@rQ`RGG41B7B1.JF/C$G/ // ]$GG4Gb#!!!D/ G//t_GGb#0_Gb#G_/Gb#_GGb#_ àb#_Gb#G _Gb#4G_//G]Gb#]} (0#//"b#_GGb#_tGGG]} b#](0#-/#4G~^^~ GGG G`b/#^Gb#/_//8 FG GG]}b#] 0#G_GTGG/b#:_G8b#G]]}G 0##_ ^~(^0~8GGG5 {# P /_GG0b# ](]0}G8@#/G4GXb/#^GC4Gb#y_b#[_GbG0b#{_c4G[@Zk//G ](]0}8@#k/8 FG G1///G4Gb#D////s_G4GD/////_GCb# y_b#[l_GG0b#<_ b#1_GtGGb# ](]0}8@#v//Y BU B#SF~^^~ (0޴8GGGG@G{#/__Q//G4Gb#D/&_G/_G=@$1@@F9@/$///cG4Gb#`s`F/`_G_G@GTGb#$1@@F@%/gx_%Gb#&_/GGb#_//Gb#_Gb#_Gb#tG_/Gb#_G]]} (0ݤ8@#k///#X F~^^~ (0GGG GE/G4Gb#D/_G5D/1z_CGGb#4G/@R@F/@///_Gi_G@GTGPb#@F@$:v_ӰCpb#_GGb#s_Gb#h_Gb#e_ Gb#a_Gb#^_GtGb#_G]]} (0@#k/#X F~^^~ (0GGG GI/G4G0b#D/Z_G9D/5///_CGG0b#4G@R@F@E_G _G@G4Gb#@F@v_GGtG$b#t_Ӱ@b#k_GGhb#_G(b#_G(b#_ G(b#_G(b#_GtGb#F_G]]} (0@#k/Y BU B#SF0^~8^@~HPX޴`h^p~GGG_@G///u B} BG8DD GGb#4GxD///c@G/xD/_Ghb#@_G4Gb#xD//K@G/xD/_Ghb#`_G4Gpb#D//_G4GD////o_GG(b#w_xBG[˴jXcj]b#/bXc1_c\KHb#//_F[G_=][8/ `YYc/4G@B\Hb#_8DG_GTGGPb#b#_Gb#G]]}G 0#H#8 F~^^~ GGG G%///G4Gb#XD////_ X D BG]]} 0#/k///GtGG0b#]]} 0#V//#^~^ GG{# GC^ 0#D4Gb#Q_G]pb#] G0##^~^ GG{# GC^ 0#(G`b#5_G]b#] G0#ð#8 F^~^ ~(08޴@HGGG/ GO/G4G8b#D/_G4G>D;_ CG8b ^GGGD .J//D. B4G(bDJZGZk&, BG4G(b &HRGZkD $,$H/?4G=BG4Gr[@Zk 0b#t_b#_GGpb#u_GtGb#_G]] }(08ݤ@HP#k/#_^~^ ~(GGG) x{# /_;//G4Gb/W^Cb#@\xb#p_G`bGb#?_c4GG]] }(0#/k///8 FGhb#/ G//o_G]] }(0#/k///G_Gb#_GGb#]] }G(0# /#8 F~^^~ (0޴8@^GGG_/ G//GGG'5@5@ D"_@G@r/`///R0@b#FB@_D@X!\ @?B\`b#_GGb#_Gpb#_GtGPb#_G]]} (0ݤ@]8P#k/#8 F~^^~ GGG G5///G4GHb#xD////;_! x D /[ _ _[Yc/δ[c G]]} 0#k/0Y/c//GtGGb#]]} 0#//#8 F~^^~ GGG GA///G4Gb#xD/_`/ x D/+ [/ _ _[/Yc /δ[c /Yc/G]]} 0#k/ѴXBr/c ƲY/c@`//GtGG0b#]]} 0#b//#8 F~^^~ GGG Gi///G4GHb#xD////_pb#/S x D/O ^/_2\b#_8Db#/+#_ӠB /#c/Xc /[ _δX _[c/0YѴXc/ 3Yc/c// bӎZcÞG]]} 0#k/YٴX/c BYc/c//GtGGb#]]} 0#//#G~^^GG0A/A"AKPGa/rKXFPF\GDv@A"/?a/rKXFPF^Gm@D_GA"!^GGf@a/rKXFPFa#/_@A.A/ !.@JAKA.! @GD;JAJ:WBK H'F'D1 J@GDD /tGqA.,!"a/AJH! AFD2AJ HaK@F'DD //TGQa/,aK! HCFD2@J@F?"C;1@@@@7`C @GaGb#2D/' n_G$_''1@_"?$Z#{#:B;@_'!@rCZ#b#2F:@!FG /W_G /Gb#P_G//4GQ.JG]] #k//#~^^~ (GGG0, 0Ha#!"+@7cC7#BqG!F> / D/DK:"KC:  7#B7#@7@!FECqGECD DDDCGCECuKC!F`G DKCUGCHCUEC;F:D!F1@DG ///G]]} (0#/k///GTGb#/k_/G]Gb#]}G (0#}/#C^~^ ~(GGG>{#_#]."JXFa.aJ`GG] }b#](0#}/G]] }(0#k/#~^^~ (GGGp. pJ""kBUgB7B7BFFF/+`// /K C8 X#C7@7#@7ACqGDUCCQGFDD/G1@#CTGhb#j_G]]} (0#k//G]Gxb#]}4G (0#/#^~^~޴>^~GGGG{#>>"m_ӡ@@@u @0D @71@81 @1D@7B7C2D9@U@F3D"C:@@4DFCC8`G5DFG"F GGTG(b@"/_^ӷCN "!@Q B@ @!0 U@01@0D C!B @D81DAF7D3D5D /@է@@:1@F;1@7CC0@F7cC B[G1@- @PG#B@/ F8@FF ///GGTG(b@"j_^ӰCN G%"!@Q  B4@ @!0 7BTG2@1D (bAB @`"2DaFFG  /O_^ӴCGե@@@U@GTG0DDG(b1DG2D3D // :_^/ D GGGTG(b._^//=CrH8 E 0.Q0J0@2F0> GG}"dBtGXb/ە^@#="Gb#%A@_G?h"@4G @a[/@Zk G/GGb#|_G///G]]}ݤ=]}#/k///BGG]"xbbZk//!1@51@6@ 7#@7BB7@5D @B@6D8G7D8D //GGTG(b@"^^ӡCN Q"%" @ B_"G@!0" EB3@0@D7aBTGB(b`"DG@F D/^^ӳCGե@@@U@GTGDD(bDGDGD//^^/D5 GGGTG(b^^//+ P@kG ATG )AG[@Zk GwDAsH8E P.0@RPJSFP>GDAGtGXb)^@G="b#A_G~//DAG$,A$H$4GRAXTZ^.J؅Fx.G1"JB_ =BTF/|@///=BbB F"F5 XZ =.[c0`BbB1"J=BBTFF"[{_#(([.0`BbB1"J=BBFF"\Z/[\0ݶ0][.1"JB0`B/KZ lY]////.JX"SwBB/nZNX^/ @///=B F/.1"Js"7aB`.1"J"7B Q.1"QJR"7AB@.1"JB/.Q"J BBF/8.JeF4G1"_(ۦKóueBSB.JB'//=B F" Q.1"A!@!@QJB"7B".A!@!@B1"Jt"7aBt" .A!@1"J!@BaB//1"Q.QJ"DBAB7BFF(@///"B\5CUG8=8}0[ -?#8{[/^ZkA@X!\G@]P]H`#k///#GG8^~G@^H~PX^GG#G.JB=BBrG{Fb#/`G4G/c_//_'@"/=B""/ `LAX4G][ Y]c[.[J"7B"4G"ݍ[PAX/Z1^@ò`.`JBT.TJEF://@t#c#,H@BK`=@6F/H ///=@@""/#sX][VZVX^c.J"7B3#@xrZ" =[_/[@[[X_/ ##.J@/."J BBSF/]@////KG7"/`4G//#/?G4Gb#_U//xG"/â6/6K&C* /='CY""/$`A!@!@AB ò.4"J 7@ `A!@!@@##.J#y#7C# A!@!@Ccâv.vJ&C2CRG(=( B[(b-?#]Zk/A@X!\ c b#0B\p_G_"GtGhb#0=G_G8]@]H}X]P`#k/0#~^^~ GGGQ#Q.QJXD1 /PC //"/_@/@KACDCUDC:"2D7 B{FFACDC"2D7BGsGTGTG`b#/D`1@if_G0.0J"7 >/D"5/C //"/_@/@KACDCDCZ"3D7@BFF?ACDCz#3D7`CGFTGTG`b#/1@5f_G0.0J"  /G//tGG`b#_GG]]} 0#/k///#^~^ ~(0GGG#0Q.Q#QJXD> //PC //"/_@/@KACDCUDC:"2D7 B{FFACDC"2D7BGsGTGTGb#/h`1@e_#G.J! C#B/G]] }(0@#/k///D"M/C //$"#/_D/DKACDCDC: rF7 @DFACDC:#rF7 CGFTGTGb#/(1@e_#G.J! #ÿ cGb# _Gb=_"GGGb#e_cG4G[/@Zk//tGG]b#G] }(0@#E/#GTG~^G^~ G)GG""b#/f_4G GGTG""b#f_//4G/GGTG""b#f_//4G / "GGTGb#x 1"f_ӠCG]]} 0#k/#^~ ^(~08@޴HGG#G="{#G_C///GGb#_G] ](}08@ݤHP#k//"/? , H$@!@!"7 BQF3F?%D/// "3##/c.JBB"7BFF # 0.0J8F9/G`b#@.@J2 ՠ @/ G PGGG0@hb#_à,H8DD/?///F"Cu#c//.J#BB7C8GG =_"GGGhb#> 0w_à,H "//#.JP"BB7@BrFTFj_#^~^ ~(G#GG1 #/#,H@@@#7@CzGPGDK//!"#/_#a/aKDCAC"7B0FFDG GGb#_Ӛ//@ ="Gb#5_GGb#/_ӊ// ?"_"GGb# 0}?"~G _/"// , H!"$@!@7 BQF3Fj ?D#A//"/c.JBBp"7`B3D4D?Gb#@Gb# #.J8F @GǾ_///G]] }(0#k/ 3##//c.J"BB7BFF&D"1"7B Q.QJ1"7!B @U@FGb#_/G4G b_ ///G(b#_b"c//C,H"@@7B0FF`#p^~x^~GGGG`#c/? , H$@!@a#7`CFFA#7CCa#@ ("7cC@B[GD?@+@U'@pG@G}#F D^C/.J "@!"(A"7@7B"BCBD2F?@"D7B%@U'@ PF%@+@ FSF6@DFD7[.p;HR[J0@PF@{#Z#[>?TG`"" 1"[/@Zkcd@/,H" "@@"(`"@"@ @U@7B7#BBBcB@7BFGFSFFFF@FF0@c GGTG"b#c_/GGp]x]}#k///#~^^~ (0޴8GG#G4G`#c/? , H$@!@a#7`CFF$@%@[G$@ 7@U$@@GFD%@8@G////@c.{#J"7B/X%D//4G~/%D`4Gy(D 4Gu@4Gr/P#C/,H@@ 7 @AG;D?Gb# _GGK0""GTGжb#e_"G4G4Ga[@ZkN/GG4Gصb#f_#G @0.0J" /$B%F""7B!B`FF .0@J?/&@Gb#/KX'D%D/ /// _ӤC4G#"4Gq&@.[JG4 D/@Zk//GG b#0_G]]} (0ݤ8@#k//G4G?"_"à GGb#,HDD_G4G(b @u/G4G@b_./F"C/à,H@@ 7 @F1D?/G4GTG8b.JxFJ@/$"#//,H @@7@ DD.5#J"F7/KG(/;"#/?c,H$@!@"7BDD  0_"tGGb#4G_ _"TG4GGb# 0_G4G b@//"//à,HD @@7@@DD^#4G~^^~ (GGG# {_[//"/#.JBBP"7@BrFTF_/?"_"4GGGb#8/8KG=  c_ , H  3##/c.JBB"7BFFG4G b]_ GGb#GG P>_/d"c//,H"@@7B0FFG]]} (0#/k///#~^^~ (0GGG#GG`#c/? , H$@!@a#7`CFF4GCz/zKz#D4G$$@///c///p/pK DCAC7@`GD//_p#/G4G bD_TG_"GtDGb#/ ///  0ɼ_G]]} (0@#/k///#4G~^^~ (0GG#G {_~/"/#.JBBP"7@BrFTF_/8/x"X"8KU%C,G8`G`8.3J8-F .JNF @-G"W.J"FR8,7H,DN C `G  /,GX"4GC//-G# TG//u"c/?.J$@!@A#7@CzG@GG4G b-_GG@b#GG  P@_///D"C//,H @@7 @F1D?G]]} (0@#k///#4G~^^~ (0GG#G {T_V/"/#.JBBP"7@BrFTF_/8/x"8Ku%C%Cu%C`G; # / c/p#c/.JBB5 7 @F:D?G4G b_GGhb#GG  P̻_///D"C//,H @@7 @F1D?G]]} (0@#k///#4G~^^~ (0޴8GGG# {{_a"/#.JBBP"7@BrFTF_/8/"X"8K'C'C'C`GF #x.tJgB 8D C// â6,6H 6 #@"C/?.J$B!Bq"7`B3GpFG4G b9_GGb#GG  PL_///%"#//,H @@7@ DDG]]} (0ݤ8@#k//#4G~^^~ (0GG#G {p_b/"/#.JBBP"7@BrFTF_/8/x"8K'G8$G`/G8.3J'FC 'C X"C/ â6,6H 6 #@"C/?`.`J$B!B"7B4GFG4G b-_GtGb#GG  P̺_///D"C//,H @@7 @F1D?G]]} (0@#k///#4G~^^~ (GGG# {q__//"/#.JBBP"7@BrFTF_/8/ x"8K#8,G/C x/`K D?8.3J,F; ///0##/.JBB5 7 @F:D?G4G b1_G4Gb#GG  PP_///d"c//,H"@@7B0FFG]]} (0#/k///#4G~^^~ (GGG# {u_h//"/#.JBBP"7@BrFTF_/8/ 8K#-G= x/`KXD9 # /"/T.TJBB"7BFF?G4G b=_GTGb#GG+  Pܹ_///d"c//,H"@@7B0FF _"TGb#GG 0X1BWCF_G]]} (0#k///#^~^ ~(G#GG P=  a#c/_#A/AKDCAC"7B0FFxKG///GG]b#] }G(0#r//G]] }(0#k/@ 3##/c.JBB"7BFF Gb#,_#.J+D? =4G"F =b# PGGH_C,H/ #//Cr.rJ"dBaB7BFFð#?B_BG~^DB^~D (0޴8@GG{GGGGG BJ!"{R"2"[@ZkG#/Cr.rJdBaB"7BFFXeF/// ``tG GtGGGb#_GG@b#Gӷ_G/#.J!"$@!@7 BQF!F//3##/c.JBB"7BFFF"GGTG ""0b#.^_G4GŰ-GGTG0""0b#"^_4G"/"GGTG0b#Gx 1"/^_4GŰ//GGTG8""0b#tG^_4GgŰ#/Cr.rJdBaB"7BFF8b{DG&[4GG@ZkàGb#,H8D/TG//_àGG//"/#.JBBP"7@BrFTF_8/8K8¤8%G`f//[G4G@ZkGG@b#/_G /  /G///G]]} (0ݤ8@P#k/8¤G4Gf[@ZkG@b#G_GG?3.3JX'F" tG8/ 8KX%G ` G/tGGGb#_GG@b#G_G/#_"(^~0^8~@HP޴XG#GG $]//@#C/? , H$@!@a#7`CFF%D;@/`#@"[KEG!@C///; #/c,H@@@#7@CFF  0_"tGTG4G/// "3##//c.J"BB7BFFGG0b#$~G/;_GGH""wGTGb#\_r #4Gp !G[$=@Zk"/? , H$@!@!"7 BQF3F?%DGGb#S_k// "3##/c.JBB"7BFFGPb#_/P//"/#.JBBP"7@BrFTF_8FGGb#_7// 4G }/// #?" !Cr.rJ"dBaB7BFF//#G0b#.JXF/_G/G",H!1,@W"@/0肧\<@ Ck//GGTGX""b#b\_0"GCGb#TG 1"Z\_GTDG8""TGb#S\_tD//Gz/GGG ""TGb#E\_ŔDo//GGG(""TGb#9\_0"GŴDGb#TGG 1"//\_D//GV/GGG""TGb#!\_0"GDGb#TGG 1"/\_D//oG>/GGG""TGb# \_4Dc3//GGTG""b#G[_GTDGh""TGb#G[_0"GtDGb#TG 1"[_ƔDGG/GGGx""TGb#[_ŴDG///7G/"/#.JBBP"7@BrFTF_XF#!/¤A#:KX'G #f[G4G@ZkGK//àtG,&"HD /#/tG9G6GG="]"}"pb#_ݠG+//xkF `//GGTGbg_ , Hx D $=  GtGGG // =tGG]>G^ PXb#_G(]0]8}@HPݤX`#k/#~^^~ (0޴8GG#G/1 #/#,H@@@#7@CzGPGD'1,q#Q#;H%D5 C///; #/c,H@@ "7 BFF  0_"tGGb#4G_//G4G b_ , H!"$@!@7 BQF3F //?"1 #3##//c.J"BB7BFF/d#"K@8D/SD/[KEG'@/"/?c3.3J$@!@"7BFF  0_"tGGb#4GN_//G4G bX_/// ///"//#Q.QJ"DBAB7BFF_&"#//à,H @@7@ DDG]]} (0ݤ8@#k//#~^^~ (GGG#///1 #/#,H>@@@#7@CzGPG@8Fjq/GqK///TA/G a#@KD/c/P#C/P/PK@@ "7 B1D;D?  0_"tGGHb#4G´_+/  "/_P.PJDBAB"7BFFR#_Br#@2"( KBEBHB7CC@7cC"B@DuF[G F3DUEB@G2D DGb#_#,H%B8FG]]} (0#k/G]Gb#]} (0#//#^~^~޴>^~޵GGC>0P#G pGGG >^ y 1([8 Fu ܻ_=xb#$(] _ CGtG/i///!1@"!@/uH삧\<@ Ck//BGC ]lV//bGC }dN// GGC (/XB//¦ GC ݲ(N8GC H2//"GC =@*//BGC ]8"//bGC }0//8 GGC (/$//"GC =//("GC =//BGC ] //0b GG }( ݡ/$b#, ]_GXb#_G(b#G^_/ #,u@5@= CC088@F8D!u AC8`F4=CA<@}HPX]`h=p=x//,<ݢGb# GB}_]G@HP=`p!@X]x/// }GGTG[@Zk1G% D/+ F/BD/ G/&_/F/FG/& /_0B =H삧\^~޵G1QG qG ~>^ $(68F3//_=b#, _ CtG /$///!1@"!@/k`\<@Ck//0B C(]a//b C(}Y //8 C(P/C(I//(¦C(ݲA//C(9//C(1//"C(=)//PB C(] /b C(}//@ C(// C( //H" (=(ݡ,b#0 _Gpb# _G@b#_Ӥ=Gb# !!4=_0==Gu@ ݠ5@C8D8@F!u AC8C8`FAY C<@}HPX]`h=p=x0<G Gݢ]@}HP ֢X`ݤhxݥB@p](}GTG[@Zk G(F$$F/s?B }E@//Gm_/G=F9 G__0B$`\BC/k///Ǣ5BB5BBBBF:G0D2FuB!G3FB 1DrDAF 0 A$E//BvD 0 A$E/GGTGоb#D/`'//T_ӥ/XD///Gpb#XD 0 A$E 0G1_Ӡ $A/{//GTG оb#8D$'~ !//T_yo/p`B%"Gx"`R"82"[@Zk $A[//GGTGоb#8DXDXD; //Z CEV@~T_T 0 AG$Epb#N 0G1˼_Ӡ $A9iG'GTGоb#jT_//> $' !8 0 A$E5./$GTG оb#- /ST_) 0 A$E& //G'GTGоb#FT_$' 0 A$E/$GTG оb#  /3T_ 0 A$E bGGTG[@Zk $A//@ݤHP]X`ݥhp}x(}GTG[@Zk G F$F/[?B }D@//GQ_/G=F9 GC_0B$`\BC/k///GGоb#8D" 'TGS_///GTG оb# $' !S_/ 0 A$E/ //$ 0 A$E //XDGGTG' 'оb#/S_///GTG оb# $' !S_/ 0 A$E/ //$ / 0 A$E/ //XDGTGоb# CE~ GS_z 0 AG$Epb#u 0G1һ_p/p`B%"Gx"`R"82"[@Zkc/// @8D/Z 0 A$E/V O//Gpb#XDM 0 A$EJ 0G1_E//XD@ 0 A$E= 6/GGTGоb#D4/`'9S_/. 0 A$E/* #//=D@ D///@u@@5@8`F@@5@D2FF/ FvFwF`F 0 A$E b[GGTG@Zk $A08=<=0 @8= B<= 0@?} c4Gpb# 4G_G@b#%_,͠(,b#_$/}4Gp`Bx¦ sR"2"u%"[@ZktGb#H_GG]]}ݤ=]}ݥ#/k///?1"/?1"/p#G^~ ^(~08@޴HPXG=`1 GGGGGW"@/`삧\<@ Ck//G*//$GGtGbQ1BQ2BG_#GG8b# /08 F/ G/P@/_$A!@Q'@GGtGb_GGG#/+ !8 D/' j_CGG@R8@F@b_G%b#_G @b#Gs_Gb#/g_`G0b#O_@/GtGb#_G//GtGb#_G//Gb#A_G///Gb# HA'QA7@GGb#G!D@Q@*@@Gb# _Gb#G._GGb#!E@'Q@@GGb#G D@Q@@@G~ cGz//$Gb#"A!@r'Q1@G@àGGb#i$"A!@-A'@G!"F' AGR"#@!a"A!@`A'@GF!G xF/[/ _]]]}[ X/c//o_G9/GGGb#G_A0b#_GGb#_G'///GGtGb!D@/Q@/_GG8b#c/ `8D///_GGGb#@G] ](}08@ݤHPX`#/k///p#G(^~0^8~@HP޴X`GZ`1 GGGGGW"@/K`h삧\<@( Ck//GF// #dGG'tGѠq[{CHQD1}=QaC ]b_#b#G. #/ Q8@F/ @G/ p`/_@B ] аPDHXCQCGGtGb_GGG////8D/+_CGG@R8@F@_G'b#_Hb#GG_Gb#_}Gb# f@////۫_@GtGb#8_G//GtGb#0_G//G`b#_G///hb#% E@ Q@G@GGhb#G$ D@ Q@@@Gb# z_GHb#G_Ghb#% E@ Q@G@GGhb#G$ D@ Q@@@G cG~//$Ghb#"A!@v'Q1@G~@#GGb#m 0"PB- PBGPBF'@ps"/#`G"PBGBGGF/ǢxF/[ _]] ] }[/ Xc/_@=/GGGGGb-_@3///b#_GGHb#E_G'///GGtGb$ D@/ Q@/_GGb#c/ `8D///架_GGGhb# @G(]0]8}@HPݤX`p#k/P0#H^~P^X~`hp޴x>^~޵G@QGwBB Р`킧\\BGGGCk/ #TGFQPBHqD1] =}QBG b_#G4G0b#$~ //__GTG/-䰱_ CGGݢ  bDHҲƠD@Q@_$Gb#@_\G4G0b#<_G_ǠGb#GD_Gb#_GJ/$G// TG b%HD$FQ1BQ2B(=,G}_#G4G0b#0/ ///_GTG38D/////[_ C(GG,ݢ bDHҲƠD@Q@X_0Gb#@Y_G4G0b#_G>_Gb#GDR_Gb#G_G/0// TG bHD$FQ1BQ2BG*_#GTG b #DHĢƠVBQB_Gb#@ //^_/Gb#_GPb#n_Gb#G_G TG bHD$FQ1BQ2B G_# GTG$ b #DHĢƠVBQB_$Gb#@ $D/;_GPb#/;_GGb#߰_G/ TG bHD$FQ1BQ2BG_# GTG b/o 0"PB CDHƠQBG_ AGb#] _//GW//8DG`b#/_GMXDG@b#/_GExDàG4Gb#ƠxD//+_xEGb#tGΧ_-/ TG bH%D&PBQBGg_#GTG b #DH1ƠUBQBW_G b#  A_G 8DGb#/ _GXDGb#/_G TG b%HD&PBQBG/_#GTG b #1DHƠD@Q@_=G A/+8E/'///_GG8D////_Gb#%_GGb# _Ӡb#G_GGtGb#H_ӧ///GtGb#@_ӟ///Gb#_ӘGTG b HA&Q A_GGTG b/!D@ƠQ@/_@#b#{ /_GGb#˯_Gr/GTG b(!HA QA_G#GTG b/_  D@ƠQ@/_@GS cQ$GTG b I)AI&Q!A_GGb#A'!G@- ƠG@'"D/' "/#G'"G@ F@GFAF@Ơfx`F/`[G _8]8]@]@}[ X/c// _A/GGGGGpb=_A///b#_GGb#U_$GTG b I)AƠQ&A:_G$Gb# $*_G/#/¤ 0b#_fG ""DGd[1" /@ZkG/ $Gb#3_G///Gb#_G///GTG b'!G@ ƠQ@_G $TG"" Agp1"TG[@ZkG GGA ///'0@ @0@ @0@ @ G @`//// d`J¦"TGTGvp1"[@ZkGt///$ G`b#/ $/˼_// 0b#t_h G "¤DGd[01"/@ZkGR/ $G(b#ۼ_G"DtGg1"[@ZkG4Gb#ۥ_:// d$$GTG $hȠh($DllH[ $@Zk cGhðl&/ $GTG b(!"A!@ FQ2@__G TG b'G$"D@ ƠQ@O_ @'c`DG//$_""tGxbT)A "/{G@V@]"8E/sfQBSBXF%F"s/`xG/X/c@/K_4G/c//`8D/c`à=@#GI)AG@GTGpb#I0AG@) X"E/; 'X"F/7 G"""G@2@G@gaF.`/+ //'%/K_"G]"ƠtGbD@Q@d_#4G c`8D/c//`=AHA~ðz/$TG b"A!@&Q1@G_G#G4GG Gg !/d#G/` C! E`/_ GGGOb#/c ɢ//_F@)GGD c/) 0@Bb#*B1D3HsN_ GGGb#_TG b @@ Q@Gs_@#G' b_ GGGpb#@Ӑb# )*@Ǿ_GGGTGNb#a@Gb#a_G EH_Gb#Y_ cG @A) aAGb#O_ G GNb#4GDH]@GGb#I_ c=G#DHG@GƠ bTGQ@+_@G_Gb#,_GGb#0_c`DG 8 EGtGb# n_/>G_ GG`b# G_l//[`b_,GD c G/,0@Ab#)@ Ŷ_ GGGb#_ ,GTG bD H$Q"Q1B@fQ3B_@CG@//Ӭ_ GGGpb#F@,G0b#)@!_@Gb#׾_CG KE@_Gb#Ͼ_ c A G A/G b#þ_ áGb#DΰHΰ$_GGb#_ cGeDHGb#G_ c Y/GTG b$!D@ ƠQ@_Gá b#Jc/ `8D///_G=DGTG b!JJAfQKAz_GGb#GtG !+#ɡE// £_!/GZ_ CG4GJG GOb#}@j{` G @G c/* 0 Ab#,@!DH+G _ GGGb#T_dGTG b KkA&QaA:_@cGG G/`///#_@ G@F#@/1///GGOb#B΢B֢ 5$V(v@GGGTGNb#@0A A A/*GGTGQb#,@!+@G//GGTGNb#@`b#G_G E _Ӡb#G_ c G A @Gz/ #LAGTG bDHƠQA_@Gƫ_//Gb#Խ_G=b#ث_c`DG}é?A5AGb# .EtG /_r//G_C GGOb#4G GG^@G/@G>@ 'b# .A  j_ GGGb#_GTG bO!OA@&QA_@GTGB}_'G GGQb# .A @GGGTGNb#~@@Gb#~_G Ee_Gb#v_ 0`AAG jA_?!b#k_ GG4GNb#D/H/z@Gb#Gf_G ¤"tGf1"[@Zk///GGH]P]X}`hpݤx=]}ݥ#/k///; 0;4G7 #~^^~ GGGGa[/@Zk"Gb#  X 1"_pG4G`[/@ZkTG#TG C삦좦" t( 1" G]]} 0#k/k///R@@Gb#G]]} 0#Q@K Q#^~^ GG21@BAB+`p囧\\B, Ck//.//HqG_[jYc/#4G!/1 1C///G4Gb#G/wK_GC À"pB*"GaR"2"[@ZkGG]] 0#k//Gk//S 1#^~^ GG!1 @!@/3@{\<@ Ck/6// qGH_[jY/c*4G(1% 1C#///G4GȾb#G/'K_GC1 1C///B*"GpBR"2"[@ZkGG]] 0#k//Gk//#^~^ ~(0GG{# >_= b#_GGb#[_Gb#_G#GG0b#.JG/ n_/ Gb#_G// 4G b#F_GG]] }(0@#k/GG{#C?B#@^~GtF^ ~(08޴@HG`G{#G_"G`"H 1"`/"" 1"/ "" 1"aB&+"GR"[@Zkp颤4Gpp 0@=@%hbs[G4GG@Zk"GGb#X 1"_*//GG//!  /?h4GGpG[/@ZkH"G4G a[@Zk"Gb#X 1"r_ /}TGG f& fGb#M_g¤TG"f`G 1"[@ZkGb_GG__ G/Cpb#m_GW_@G/BG"btGDrG 1"[@ZkǠGpb#G/S_ G b#_ŠG&1@ŰG]] }(08ݤ@HP#/k///#~^^~ GGG {#]_Gb# G]]} 0#//G]]} 0#k/#^~^ ~(08GG{#GG_"`"`H 1"/"" 1"/ "" 1"aB|+"GR"[@Zkb#Gʾ_GGb#_Gb#_"TGG"a 1"[@ZkGGpb#G , H/_/G_GG_ G/Cb#@_G_G/bGD"悦tGs@Gp 1"[@ZkGb#G/_G@b#/_G]G] }(08@#k/#^~^ ~(08GG{#GG5_" `("`H 1"/" "( 1"/ " "( 1"aB+"GR"[@Zk0b#GB_GG0b#_Gb#//_Gb#GG , H䞟_/G6_GG3_ G/0@b#A_G+_G// bGD"(悦tGs@G 1"[@ZkG`b#_G]G] }(08@#k/#X F^~ ^(~08@޴HGGG G{#__ӳ//Gb#I_#G4Gb# ! D/ "_G_GG8b]GFF]2^J]}}.ݢCJ/v///B"#4#B7B7C7!C[GՅB5BՏBUBBBF:G0D2FuF5BF1DFvFNE#E"3DJ e/zK:#"Z# CB7AC7GF .J0" B""B7B5F0F3uBBBUBBՄBBuBDaFG:GDBBGFDD𔗀JYBGFݢGGtGtGB6Jq1 JF="ݲe.eJC!D8vKY!@fG(bACGaQ HGe^GGG4GtG(b]^, HGG4GXb/^Gb#/_GGPb#k_GG4GHb]b#[_G] ](}08@ݤHP#k/#Gh{;"~^^~ GGG{#_Gb#G""pb_GGb#""`b_Gb#G""b_GGb#""b_Gb#G""xb_GGb#""b_Gb#G0""bܴ_GGb# ""bִ_Gb#G(""bд_GGb#H""8bʴ_Gb#GX""bĴ_GGb#@""b_Gb#G""b_GGb#"" b_Gb#G""b_GGb#""(b_Gb#G0""b_GGb#8""b_Gb#G ""b_GGb#""b_Gb#G""Xb_ "GGb#xb1"_Ӑb#GG`""b{_Gb#8""GPbu_Ӑb#GG""bo_Gb#""G0bi_ BGbb#@""G]]} 0#R"\ß #~^^~ (0޴8@GGG#GTGH"" b#8 D RD_G@""TG b#KD_G//%""TG b#BD_ ca` c/^`///#GTG@"" b#8 D  .D_G""TG b#'D_c/E` c/B`///#GTG"" b#GG8 D4 2/D_/,/,/// GTGb#"0x F/ P""/@(/#E_G ""GTGb#/E_4GGp""TGb#E_ӅDGD cGG]]} (0ݤ8@P#k/Gk//Gk//GGTG""b#E_G"" GTGb#E_G""GTGb#/E_ GGTGP""b#E_G"" GTGb#E_G`""GTGb#/E_ D////,H@5@dD P# 0[Gp^~Gx^~R"޴GGGGG G"Xb]h=!>Hh= /%GTGb#8 F 8""D_G0""TGb#D_G//'""TGb#~D_J //%GTG0""b#8 D  jD_G""TGb#cD_// %GGB"G8bGG ///]GGGGTGHb]GG""B"tG(b/]GG`""]"tG(b/]x//GGGGGGB"8b]GGGGTGxbs]GG""B"tG(b/]GG`""]"tG(b/]T//eGTG""b#GG8`DG`E/D_B,e/,`/// #GTGb#" xF/!// (""C_G G""TGb#/C_4GG`""TGb#C_ӄDGD cDGGG4Ghb/ //c]GG4Gb]/GGp]x]}ݤ#k// G/##~^^~ (GGGGGGTGb# C_//GG]]} (0#/k///Gk//4G//#G^G~ ^(~08GGG> ^b/{^ // =/` 9/ "G4Ga[@ZkGG GTGGGGb#" =_ $GG//"! Gd G4Gb#= ].@G4G`[/@Zkc] b@G] ](}08@#/k///#G^G~ ^(~08GGGG >Hb^^G`G4GbQ]G8DG4Gb/{U]G G] ](}08@#/k///G 4G"bfU]GG"4Gb_U]GGTGGb/]G//G/G =](b#G@GG]Gb ]4G(}08@#a/4GG{#ð#G~^G^~ (0޴8@GGGGGbG/^///`_G@b#_GGG4G(bRQ]L#D8 D// KGG4GbU]G//?G 4G0"bT]GG`"4GbT]GG4G8bGq]G'GGGPb#4G2@GG4GHb]ǠGTGpb#/&%?_ //gGTGpb##%/?_GG4GHb]G]]} (0ݤ8@P#k//#~^^~ (0޴8@GG@GGGGG//GGGGGG b@G]]} (0ݤ8@P#k///#G^G~^ ~(08޴@HP>X^`~hGGGGG~G b^ӧG]4Gb#DD //G@әxDPBbTG7 (Gئb#%2B3BQF& H"" //A_ŠG""ئb#TGA_GG(%TG`b Gu^GrGGGTGb]dG4G[@Zkf/G(%GTGb]^/DGTG8"" (b/TG]G(%GTGb]GG""TGb]EDGTG0""# b/<G//]G%GTGby](GG@""bTGq]G(%GTGbk]GG""TGbe]GDG@"" TGb/[]G%GTGbU]GGTG""bO]//DGGTG(%b/ B]/$G4Gb//Z]G/GGG""TGb-]$GGTGb // "]GGTG(""b/]G%GTGb]0%GGTGb# ///_, "////GG@""TGb]$GGTGb // ]GGTG(""b/]G(GTGb] Xb#l//_G//eG (GtGbA]GW GG""TGb]$GTGp""ئb#?(= $!; @_G ""TGئb#@_Gh""TGئb#@_*G"0,0HA"$@!@7@BrFAF?G""TGb^G GGTGb]iG4G[/@Zk//GGTGb~]/GGTGbv]iG4G[@ZkGGTG""bv]/oCG""'Gp@IGTGb!@/g]G8""GbTGPH/uAA(E/ //,HDJ]/E 8@E@(%g eGTG""b#PH>_G""TGb#/>_G//G""TGb&])/GGTG""b]$EGGTGb/ @ *// ]GGTG(""b/ ]G%GTGb]GGTG""b]///%G8""GbTGCdEPH)u A A E///E-EID]Ӗ/GGTG""b]%GGTGb 8 E (%// ] ECGTG iEb9@ PI u@@ D  PE @% Q.QJG.F/ 8""]GG E}GHb#r_ gGGb8""TGP`I`Hu@A@AD ŠD/ // , HD]GGTG""b/]$eGGTGb ` + z]GGTG(""b/s]G%GTGbm]GGTG""bg]/// G8""GbTGPHE@Ju@A@AD/ //-ID/G]G]] }(08ݤ@HP=X]`}hp#/k///4G{#)/#G^G~ ^(~08@GGGG^Hb ~*^,GP""G(bTGG@///]G%GTG(b ]4GG""(bTG]GTG4%b]8GGh""(bTG////]GTG8%b]8GG""(bTG/]GTG8%b]GGTG""(b] DG}G Gb@_GGTG`""(b/]G] ](}08@P#/k///4G {#/#G^G~^ ~(08GGGGb^` CGb#_GGG4GbNM]L#GG4G`bD8 D  /. Q]G/ (/G 4G"`bP]GG"4G`bP]GGTGG0b/]G// /GGGb#4G._GG4Gb]G]] }(08@#/k///#G^G~^ ~(08GGGGbG^Gb#/_GGG4Gb/L]L#GG4GbD8 D  0 /P]G// (/G 4G"bP]GG"4GbP]GGtGG$Cb]G//G /GGGb#4G_GG4Gb]G]] }(08@#/k///#G^G~^ ~(08GGGGGb ~^GG4GHbL]L#GG4G(bD8 D 8 /?P]G// 0/GG/G0""pb#_G 4GP"(b*P]GG"4G(b#P]GGGGtGxb]G//G /GGGpb# }b_GG4Ghb-]G]] }(08@#/k///4Gx{#lP{8;0(8@F@;2@p{ 0p;h` 0 {;(H$p00`h{,<4p{;X0@D0H08Ldp T/P;T0{4GXp\plв/k///l0H[ۦ`;;8 F0{# P,вۦ0H04G;;Dвhۦ[  $(04080<p@LPPTXв\в`dhl0k//l0h[`;p;8 F( P 0X;[4;@0;0P<H4G0[8;ۦ $(,00P8вD0LPTX0\0`dhlk 4G({/s:k/// 4G({#:k///k/// 4G({/0k///#CtG^~@[^ GG >@GP"0;Hb*\Zk @BGh"0"HbtG!\Zk BTG =(b>OSZkG]]C 0#/k///#tG^x[~^ ~(GGG> ^G"h;b[Zk xBG"h"btG/[ZkBG4GbpZk=(BtG =0b @  @21@GTZkG]]4G }(0#k///#CtG^~[^ GG >@4G";b[Zk BTG""btG[ZkBTG =b'hZkG]]C 0#/k///#CtG^~[^ GG >@ _"";b[Zk B_"""btG[Zk BTG =(boZkG]]4G 0#/k///#tG^[~ ^(~0GGG> ^+_""p;bm[Zk B,_""p"btG/c[ZkB "-_"p"btGZ[Zk BGtG =(b21@]SZk]4Gb@",A"H"<G] ](}0@#/k///#CtG^~P[^ ~(0GGG@x"@_"@;Xb/+[ZkB0`@4GbGEyZkGGGb#]_G]G] }(0@#k/#4G^[~^ GGCboZkGb#]] 0#G//#o_"tG^~[^ ~(GGG>";bZZkBp_"8""btG//ZZk(BG4G0bxoZk=GGHb#]]@FG }(0#/#C_"tG^~[ ^(~08@GGGG";bZZkCB""_"tGb/ZZk=D/.J/ ///D.B4G"bDJ@.TJJQZk$,BG"4GbA0H'H/QZkD#,c  #H/?#.#J`@`D.DJ@///GG] ](}08@P#k//C#tG ^C~[(^0GG >";@_"b/WZZk B"_""btGC/KZZk= B =(bDmZk@GG ](]0@#k/C#tG(^C~0[0^8GG > "^`_" ;8b#ZZk0B("_" "8btGC /ZZk =tG0B ]=D8b/{RZk@/GG(]0]8@#k/#CtG^~[^ GG >@_"";bYZk BtG_""b"YZk =Gb#]] 0#à#CtG^~@[ ^(~08@޴HPGGGGG0;_"0"HbYZkC@B0"8"_"tGHbYZk=GD/3.J/"///E.@B"4GbEJCTF@.UJJPZk%,BG"4GbA0H'HPZkD#,c  0@#H?@ #.#J`@`E.EJ@G//GG] ](}08@ݤHP`#/k/// k//#CtG^~[ ^(GG >"^~V_";b/WYZkB0"W_""btG///KYZkB "X_""btGBYZk BY_"P""btG9YZk@G =]}GHb] ](0#/k///#t_"tG^~[^ ~(0GGGG>;"b/YZk"c 8D*#,A0H'H- //#.S@C""ddB`D## @c Q2JW@'J .dB@UJZ@J/dDCXK@KP@c/[`KdBgK@?B"_" "btGXZkG]G] }(0@#/k///#CtG^~[^ GG >@_"";bXZkTG =Gb]] 0# k///#CtG^~@[^ GG >@_""0;HbXZk TG =G(b]] 0#k///GG#~^_"tG[;^~ GGG"b}XZkGGGb# B]]} 0#&//GG Ss#///#_"tG~^@[^~ (0GGGG0;"Hb/SXZk@B//0""Hb_"tGIXZk,HXD$/C.B4Gc"bCJRSJ/cGJ//OZk$,B"G4GbA0H'HzOZkD/$,$H'DA $. c $JX%F?."JXF")///." FJ"XFV/VK "XEG@,H "XD6,6HX%D " 6.6J "X%F ,H XD /GGTG b_,Hc ?G/G]]} (0@#k///d.dJ@4G//#_"tG~^[^~ (GGGG";bWZkB"("b_"tGWZk,HXDG////C. CJc S@2B'BQFA .JX%FG.#JXF$#/)///Y/9#  GYK9#XEG@.J 9#XF.J 9#XEF@.JX%F 9# .J 9#XD/K XF /GGTG b_#,#Hc ?G/G]]} (0#/k///@//4G//#tG~^0[^~ (0޴8GGGGGG ;@"A_"8b5WZk0B "X"8bB_"tG-WZk0B "H"8bC_"tG%WZkD,DH//$,EG"G4G c 0@A0H'H/@Zk.qHPJF>D.DJ_G]G]} (0ݤ8@#/k///#CtG^~[^ GG >@^_" "p;bVZk B__"("p"btG//VZk@TG =GHb]] 0#/C#k///#tG^ [~^ ~(08޴@HPGGGG{_"> ;"(bVZk B//""(b|_"tGVZkBG4GbGGDkZk=G@( @/GGGb#_0@ @?/f@ } G]] }(08ݤ@HP`#k/#CtG^~`[^ GG >@_"0"P;hbrVZk TG =G(b]] 0#$k///@#@^~Q#^H^P~X`h޴px>^~޵q.qJDGGGGGGG[{1! 1, ۥ:H/@+@aG  //N "/G ),A0H'HA2@!(D/I /// ,X` HD.)!/O"/@i.StJgJSuBshF/`/// , H@ @ DI.)!IJuEBEBtFEB`})!".VJJVB֢F/ (///),B4Gi"bA3H'H/ MZk8BGGGGTG@bVZkGGI"n/ ),A2H'HA3@! D/ //.B4G"bTJJ/LZk), "A0H'H0&@ ).B4GI"bQ2J'J/LZk0@HBPb)!QZkBGGGGTGbQZkGGg///.B4G"bVJJ/LZk8BGGGGTG@brVZkn G GI"/ ),A2H'HA3@! D/ //.B4G"bTJJ/CLZk), "A0H'H0&@ ).B4GI"bQ2J'J/LZk0@HBPb)!PZk8BGGGGTG@b:VZkBGGGGTGbfQZkGG'/// /B)#bXK4GK/LZkFI-i!HAA)!JKIGIJ!HA0á@(¥xD0 G=4D ݵ( )B i"EI.RSJlGJRSBR@FJ@/i,iHeD/`///mL)!) [`i,CaHgHCr@c`D/``///i,iHl@h@l@h@2DcF#D`i,)!iHe@e@xeD4`D 6A/m "/g`i,CwHgHCx@c`D/i`r//.B4G"bTJJ/KZk///),8B "GGGTG@b)!A0HG'Ha UZkHBGGGPb#PZkBGGGGTGbPZkGGi,B4Gi"bCsHgH/{KZk///xBGGGGTGbUZki,HB G GPbC`HgH"OZk8BGGTG@bsUZkBGGGGTGbPZkGGpi,B)#bCyH4GgH/KKZk i,I!HAA)!CjHgHc h@BGGGGTGb/PZk}GG<B TG(=b`(IZZk0\-?#0=Bb[7iZkhB\pbZZkxBGGGGTGbUZk//B(I TG(=bZZk8\-?#8=Bb[iZkhB\pbqZZk8BGGGGTG@b UZkGG} 4G*GI`E/-G@]H]P}X`hݤpx=]}ݥ#/k///#GG ^~"(^0GGH{#_BTG=b^ZZkG ](]0@#/k///#GG ^~"(^0GGh{#p_=TGBbC0D/?ZZk[!\G ](]0@#k///#CtG^~[ ^(GG >"^`w_";bSZk"tGx_"Bb Q@8"W@SZk tG =]G(b] ](0#*$k// 4G({/ k///#CtG^~@[ ^(GG >"^`_"0;HbySZk0"tG_"@BHb Q@8"W@nSZk tG =]G(b] ](0#$k// 4G({/ k///GG#~^_"tG[;^~ GGG"bESZkGGGb# B]]} 0#//GG Ss#///#4G^~^ GG /@/BQC [TG({ =CSqZk //4G=G]] 0#/k///P0 B{#QB12B4G/k///#4G^ [~^ ~(0GGGG(b qZkG`@GGb#4@F_$!.Q!J!>d/Gb# @G]] }(0@#k///#p;^_"tG~^[^~ GGG"bRZk`B4Gb/pZkGGb]]4G} 0#/w0k///G]]} 0#k/#_"tG^~[^ ~(0GGGG;"b/RZkG@b##// @C @DG@0@ Dca@=G]] }(0@#/k///#;_"tG~^[^GG/8"{/KRZkG]] #k/#_"tG^~[^ ~(GGG>X";b.RZkB4Gb/oZkb#_G]] }(0#/k///#CtG_"^~[G ;"{ RZkG] #k//G{#}/#_"tG^~0[^ ~(0GGGG" ;8bQZk0B " "8b_"tGQZk$Gb#@=_// #@b#$0@%_4G/GG]] }(0@#k///#_"tG^~p[ ^(~08GGGG"`;xbQZkpB`"`"xb_"tGQZkBG4Gb"`;xbnQZkGb#Q_=GGb# @////_G C#4G=A@A.s!JRAJSFA>0BG] ](}0@#/k///#CtG^~[^ GG >@P_"(";b2QZk BQ_"""btG//'QZk =b#1G]] 0#D#CtG^~[^ GG >@b_"H";b QZk Bc_"""btG//PZk =b#G]] 0#/#t_"tG^~[^ ~(GGG>";bPZkBu_"""btG//PZkGb#=G]] }(0##_"tG^~P[^ ~(GGG>"@;XbPZkPB_"@"@"XbtG//PZkGb#=G]] }(0##;_"tG~^[^~ (GGG"bPZkBG4GbnZkGb##D_cd0`@d/GG]]} (0#k/# ;_"tG~^0[^~ (GGG "8b^PZkBG4GbynZkBGG4GbdZkGGb# _BG4Gb /dZk0@d///GG]]} (0#k/#CtG^~[^ GG >@_"";bPZk B_"""btG//PZk =b#1G]] 0#<#CtG^~[^ GG >@_"8";bOZk B_"""btG//OZk =b#G]] 0#/#CtG^~[ ^(GG >x"^`_";bOZkB_"""btG/OZk]b# =RG] ](0#///#CtG^~ [ ^(GG >"^`_";(bOZk B_"""(btG/OZk =b#]G] ](0##CtG^~`[^ GG >@"_""P;hbzOZk `B#_"P"P"hbtG//oOZk =b#1G]] 0##CtG^~[^ GG >@4_""p;bROZk B5_"p"p"btG//GOZk =b#G]] 0#/#CtG^~[ ^(GG >H"^`G_";b)OZkBH_"""btG/OZk]b# =RG] ](0#///#CtG^~[ ^(GG >h"^`Z_";bNZkB[_"""btG/NZk =b#]G] ](0##CtG^~P[ ^(GG >"^~n_"@;Xb/NZk =b#]}G] ](0#[///#CtG^~[^ GG >@_"H";bNZk =b#G]] 0##CtG^~[^ GG >@_"";bNZk =b#G]] 0##P;_"tG~^`[^~ GGG"hb{NZkB4Gb/cZkG]]} 0#k//#CtG_"^~[^ GG (";bWNZkb#G]] 0#//#CtG^~[^ GG >@_"p";b:NZk B_"""btG///NZk =b#1G]] 0##CtG^~[^ GG >@_""; bNZk B_""" btG//NZk =b#G]] 0#/#CtG^~[^ GG >@_"";bMZk B_"""btG//MZk =b#1G]] 0##CtG^~[^ GG >@_"(";bMZk B_"""btG//MZk =b#G]] 0#/#CtG^~[^ GG >@ _"";bMZk B_"""btG//MZk =b#1G]] 0##CtG^~0[^ GG >@_"" ;8brMZk 0B _" " "8btG//gMZk =b#G]] 0#a/#CtG0_"^~[^ GG ";bKMZkb#G]] 0#H[#TG~^^~RG (0޴8GGGF @;"(bG]6/GG//,0BGTG8bH@"@'7BPFFG/gZk//@GGP"",tG(bHʉ]/,0BGTG8bHgZk0@ @GGTG(bX""]G]]} (0ݤ8@#k/P#Gp^~G> x^~޴GGGG)@///.0@a#"q[KPJa#F @9@F!"a>tJ.uaJTJ! F>a.tQK0@ @SqJ9@FtF>.JTJ{J! F>@=" B.`""GTGb="TJ> ,JA Hp`J0DG> <^]Ӑ"GGbTG1"V]G/"GTGGbD1"J];/DGG""btG@/?] //"GGTGb1"5]<DGG@""btG@-]GGTG""b&]( 1@7@W \@C/k///GGTGP""b]G/GGTG""b ]?/GGTG(""b]7/GGTG""b]//GGTG0""b]'/GGTG""b]/GGTGX""b]/GGTG""bڈ]/GGTG""b҈]/GGTGx""bʈ]4G)///G G""EtGb/] //GGE""tGb]0@@ /GGh""TGb]GGTG""b],GG""bTG8DXDxDD// ]GGTGp""b]/GGTG""b~]0ĠGG ""bTG v]Gb#0$n_GGTG ""b/k]GGH""TGbe]"GTGGb1"/[] Ġ"GTGGbp1"R]"GTGGb Ġ @1"D//C]Ġ"GTGGb1" D5] Ơ"GTGGbD1"///']"GTGGb1"ĠƠD ] "GTGGbD1"]Gp]x]}ݤ#/k///#G> ^~G^~ GGGG/)@///.0@a#"q[KPJa#F @9@F!"a>tJ.uaJTJ! F>a.tQK0@ @SqJ9@FtF>.JTJ{J! F>@=" B.`""GTG0b="TJ> ,JA Hp`J0DG <]"GG0bTG1"]/"GTGG0bDp1"䞇]/GG@""0bTG /]G$b#_GG""TG0b]"GGTG0bX1"]$@/ \@DC/k///GGTG0""0bn]/GGTGP""0bf]/GGTGx""0b^]/GGTG ""0bV]/GGTG ""0bN]G4Gp"pbG8D(D/@p=?Fp=?"$^=GG""0bp]"tG?D=/3]GG""TG0b-]"GTGG0b(1"/#] "GTGG0b1"]"GTGG0b $ 1" D// ]"GTGG0b1"$ !$D ] "GTGG0bD1"///]"GTGG0bP1"$ !$D ] "GTGG0bD 1"ֆ]G]]} 0#k//`#Gp^~G> x^~GGGG'@/.0@a#"q[KPJa#F @9@F!"a>tJ.uaJTJ! F>a.tQK0@ @SqJ9@FtF>.JTJ{J! F>@=" B.`""GTGb="TJ> ,JA Hp`J0DG <]"GGbTG`1"z]/"GTGGb8D@1"n]/GGP""bTG /c]G$b#[_GG`""TGbY]"GGTGb 1"Q]0 1@@/5 \@Ck//GGTG@""b>]'/"GGTGb1"5]GGTG ""b.]/GGTG0""b&]/"GGTGb1"]GGTG""b]4GG="bTG /// ]GG4D""tGb/]8GG="bTG/]GG8D""tGb]@GG="bTG/]GG@Dh""tGb](GG="bTG/څ]GGTGx""b/Ӆ]G($b#_GG""TGbɅ]"GTGGb1"/] "GTGGb1"]"GTGGb $ p1" D//]"GTGGb@1"$ !$D 䙅] "GTGGbD1"///]"GTGGb1"$ !$D }] "GTGGbD1"r]Gp]x]}#k//`#Gp^~G> x^~GGGG'@/.0@a#"q[KPJa#F @9@F!"a>tJ.uaJTJ! F>a.tQK0@ @SqJ9@FtF>.JTJ{J! F>@=" B.`""GTG0b="TJ> ,JA Hp`J0DG <]"GG0bTG1"]>/D"GtGG0bXBFx1" ]2/"GtGG0b DP1"@]%"GGTG0b 1"] D"GtGG0b@1"] //"GGTG0b1"]G$b#_GGTG""0bׄ]Gp]x]}#k///`#Gp^~G> x^~GGGGG)@///.0@a#a"q[KPJa#F @9@F!"A>SJa.tAJSaJ! tFa>A.sQK0@ @RQJ9@FSF>a.JSaJ{J! {Fa>@=" B`.@""GTGb="SrJ`> ,tJA Hp@J0DG <~]G ""GTGbw]`//GGTG0""bn]Gb#$f_GGTG(""b/c] $0@GtG@b /@p"GTGGb1"R] p"GTGGbp1"I]p"GTGGb  @1"D/;]p"GTGGb1",D -] p"GTGGbD1""]p"GTGGb1"D]Gp]x]}#k/{G" #~^^~s (0GGGGFG//GGGtG b&_/G]]} (0@#k//{p#G@^~G> H^P~sX`h޴pxGGGGGF'@/.0@a#a"q[KPJa#F @9@F!"A>SJa.tAJSaJ! tFa>A.sQK0@ @RQJ9@FSF>a.JSaJ{J! {Fa>@=" Bf.F""GTGb="SrJf>&,tJA&HpFJ0DG&< //]GGh""TGb]ӡ 1@w@ \@ Ck//GGTG="bv]GGTG""b/o]$Gb# // b_GGTG`""b/_]G$b#W_GGX""TGbU]ӹGGTG="bN]Ӡ"GGTGb 1"G]ӫ//GGTG="b>]"G""GbTGD/3]ӗ//GGTG""b*]ӎ/GGTG="b"]GGTGx""b/]//GGTG="b]GGD""tGb ]o//GGTG="b]GGTG0""b/]_//GGTG="b]GGD""tGb]O//GGTG="b]GGTG@""b/ۂ]?//GGTG="b҂]Ӡ"GGTGb 1"˂]///GGTG="b‚]GGTG""b/]//GGTG="b]GGTGP""b/]//GGTG="b]GGTG""b/] GG="bTG/]Ӡ"GGTGb 1"]00@/ ///GGGb#_,$ 0@GtGbj_G"f"r0H""D8D/3 (/ &.Q0JG2F&>.VJ>f.&/uJzfJY&Kf"=":GJG&?f/eJ[sKTGeGf?b/K]GG ""TGbE]G($b#=_GGTGX""b;]//G$TG0@ bG/3Y^Gp *Gp= /F.0@&""sJ @9@f#F RQJqJSFf"F>/UJyJXK! G?,0@ @9@F@HD<.HWJxAJ! F>@GTGbp]#GC,"'"G@H<g.HSgJp="rHrFg>]0H&1@B@//\@ Ck//"GGTGb 1"ف]&à"GGTGbX 1"с]à"GGTGb0 1"Ɂ]à"GGTGb 1"]à"GGTGb1"]GGtGX""b]GGH""tGb]4GGp="bTG/ ///]GG4H(""tGb/]8GGp="bTG/䎁]GG8H""tGb]@ȠGGp="bTG/~]GG@H8""tGbw](GGp="bTG/n]GGTG ""b/g]G((b#__GGX""TGb]]䠠"GTGGb1"/S] Ġ"GTGGb1"J]"GTGGb  1"E//;]䠠"GTGGbX1"Ġ ƠD-] 砠"GTGGbD(1"///]"GTGGb1".D+])"GTGGbE1" ]/G- !G///.0@' g"qH @9@'#F{H PJF>.J"wHJVJ!F>G/0@ @9@6FZYK[GG?H.PKRHJu(H!UFH>?@G"B=".#&#TJ>f/J[fKTGpJpGGf?b]GG""bTGءD/]//DGG""btG@/]//GGTG""b]4DGGx""btG@暀]8DGG""btG@撀]GGTGX""b/]"GTGGb1"] 䠠"GTGGb1"y]"GTGGb Ġ `1"D/k]"GTGGb01" D]] "GTGGbD1"///O]"GTGGb1"Ġ^ƠD[A]Y"GTGGbE1"P6]N/GGGb#/_G//GGGb#{_?//GGGb#S_7//GGGb#_///GGTG="b]GGTGh""b/]//GGTG="b]GGTG""b/]//GGTG="b]GGDH""tGb]G@]H]P}X`hݤpx#k///X{`#Gp^~G> x^~sGGGGGF/G (@//.0@a#a"q[K @PJF9@D"A>a/SJsAJ[aKrPK! sGa?!.0@a# @Q0J9@D2Fa>A.{JRAJ{aJ! [FA>@"B@. "`"GGTG8bRQJ@> ,SJA Hd J="$D <]GGTG""8b/]//GGG`b#_ $0@b#G D @Gp]x]}#k/{G" #~^^~s (0GGGGFG//GGGtG br_/G]]} (0@#k//[#TG~^^~RG (GGGGF ;bG8 1"&]/D"!1@B!@o\<@ Ck//"GGTGb 1"]fØ"GGTGb 1" ]^GGTG""b]W/"GGTGb 1"~]NØ"GGTGb 1"~]FGGTGH""b~]?/GGTG8""b~]7/GGTG ""b~]//GGTG""b~]'/GGTG""b~]/"GGTGb 1"~]Ø"GGTGb 1"~]Ø"GGTGbp 1"~]GGtG""b~]GGx""bTG///~]G$b#_GGP""TGb~]8GGh""bTG ~]G8$b#_GGTGP""b~]<GGX""bTG////w~]G<$b#o_GGP""TGbm~]HGG""bTG e~]GH$b#]_GGTGP""b[~]("GTGGbX 1"R~]4/ ///GGGb#_G]]} (0#k/p[#TG~^^~R (GGGGF/ G;Pb^ (G~8 1"0#/~///G]]} (0#/k///GGb#_5@@ D $//?G]G} 4Gb#](0#à[#TG~^^~R (GGGGF/ G ;"b^(G~0#}/GGH""bTGD/}]//G]]} (0#/k///DGG0""btG@/}]//GGTG@""b}]4DGG ""btG@}]8DGGp""btG@}]GGTG""b/}]H"GTGGb`1" $  D///}]H"GTGGb01"$ !$D }}] H"GTGGbD1"///o}]H"GTGGb1"$ !$D a}] H"GTGGbD1"V}] $GGTGb/ H"1"/K}]z//G]G b#]}4G (0#/#TG~^^~ (GGGG GGH;"@b^~ (0#%}/GGC@""tG@b}]0C"!1@B @//\<@$Ck//"GGTG@b1" }]&"GGTG@b1"}]"GGTG@b1"|]"GGTG@b1"|]"GGTG@b1"|]GGtG0""@b|]4CGG ""@btG@|]8CGGx""@btG@|]$CGGh""@btG@|]GGX""@btG8D(C/@|]GG]G@b""]TG} (0#|/[#TG^~^ ~R(0GGGGF/ G;b^(0G ~8 1"@#/|///D"!1@B!@o\<@Ck//"GGTGb 1"}|]fÀ"GGTGb 1"u|]^GGTG""bn|]W/"GGTGb 1"e|]NÀ"GGTGb 1"]|]FGGTG0""bV|]?/GGTG ""bN|]7/GGTG""bF|]//GGTG""b>|]'/GGTG""b6|]/"GGTGb 1"-|]À"GGTGb 1"%|]À"GGTGbp 1"|]GGtG""b|],"GTGGb0 1"= |]GGtGb#0"K,_ //"GGTGb1"{]0"GTGGb0`1"///{]GGGtGb#0"/+,_G]] }(0@#k///G"GG]bTG] }(081"@#{//#G~^^GGG6/0 ;!1 @"@\<@@Ck// P// P// P //(G4GH{#!_/4G@//B0@@B0@ @B0@@B0@/@B0@/_G]] #k/#TG~^^~ (GGGG G~@;"b^ (0#j{// 1@7@w \@Ck//GGTG""bV{]o/GGTG""bN{]g/GGTG""bF{]_/GGTG@""b>{]W/GGTG""b6{]O/GGTG0""b.{]G/GGTG8""b&{]?/GGTG""b{]7/GGTGH""b{]//GGTGh""b{]'/GGTG""b{]/GGTGp""bz]/GGTG""bz]/GGTG(""bz]/GGTGP""bz]GG""bTGXD,$/ z]/GGTG""bz]0GG(""bTGz]/GGTG""bz]Gpb#_GGG""tGb/z] 1@7@^ \@TCk/DGG ""btG]@/z]Z//DGG ""btGQ@/z]N//($Gb#/G _E/DGG ""btG=@/z]://DGG ""btG1@/wz].//DGG ""btG%@/kz]"// DGGX""btG@D_z]//GGd""GbUz] DGG ""btG@/Kz]///GG]Gb}TGH""] (0#;z/// k/ k//G7B  G Fpxۦ_@\B;#~^^~C (0GGGGGk/"e 1"+///"e 1"#///e""e ""e8""e`""e`"" à"e 1"///"ep 1"[GtG/>@Zk///e"GtGG]]} H1"(0@#/k///v3GtGH1"/k///2 #G~^^~ GG`pGTGb#G8D@Gl_XDGGb#G_G 2GtG(b#j_GGGb]""]TG} 0#y//k///GG{#k///;#GTG~^G^~ (GGG@;"Pbiy]15!@!@F /X"D / //Gb#_/b#_G]]G} (0#/k///Gk//;#GTG~^G^~ (GGG@;"0b)y]G TG0b_]"GGTG0bP 1"y]/GGH"" b0btG/y]cG4G[@ZkG]]G} (0#k/Gk//3#GTG~^G^GG/@;"Pbx]//b#5@@SF@/_//XDGb#/ _Gxb#_G]]G #k/Gk//O#TG@;"~^G^~ GGG@bx]3//cGGTG8b#F/F/_GGtGb#_/GGTG(b#8Dk_//GGtG`b#i_GTGH""b/x]G]]G} 0#k///Gk//P#G~^^~ (0GGGG@RABGGGTGHb/Z] //GGGGtG8b1^G'#G4G(b8 D ]G4G4Ghb# /_4G`[@ZkGG4Gb#b_GG4GXb /+]G G]]} (0@#k//@#GTG~^^~ (0޴8GGY G1,GGG1HR r8aGaG:G/`(4b#g_e-P"G btG[ 1"@ZkEpBGTG@""xbTZk("G P" GtGa 1"[@Zk2/GG#GtG b#1i_`BG4Ghb/svZk///G //G#GTGb#k_ /(P" ¤GtGe 1"[@Zk (bP"TG ch 1"[@Zk G]]} (0ݤ8@#/k/// k//0# ~^^~ G4 GG Q/QK/@pA8AFGAFGTGXb# G/@_/b"TGc 1"[@Zk /GGGTGb#*k_Ө""GtGa 1"[@ZkGG]]} 0#k///@[ {#TGP^~X^`~RGhpGG ~~8b^H .JG^H=G"GGxbtG1/;^GGG4Ghb]H=GTG"Xb1A<^GGP]X]G`}hp#k///# ~^^~ (0޴8@GnGGGG@ gG///TG(""5@@[Gb/@G/v]//8DG/ ///G0@ ""TGbv]Ӡ @G""FtGb/v]栠5@@D Ơ1 @C'FG0@)ò@8@F%@f`///@//G%1@@8FƢ/ G/GDG //ƠDGG//GGG]]} (0ݤ8@P#k//# 4GG^~G^ ~(>G#@G8b/o]G// /G?" B"GG(b/x]=GB4G.! qHPJF>r[G@ZkGG]] }(0#k/# ;^^0[[~^~ (0޴PR"8@H>P^X~`hp޵xGXۤ@GG">?"mPZkޢGy4GG/E///A[xD/@Zk]G9G4Gb#`@v_G4Gb#7_ //= C/$$"B"GbG(b"1E ?"/#x]// iG"?"bGB"`x]/G?""0B"tGb x]4G" Hd[@Zk GG/! .JB5BSF_JG "//5BUBBCGzG DsJXGG.0B! PJ"F>A.AJDB5ABUABAB;GDCsWJ GG37.0B! Q7J"3F7>.JB5BUBBzGCrJ8GXGD7.Q7J2F7>a.0B! aJ"dB5aBUaBaByGXGC8GrwJD 7.0B! Q7J"2F7>.JFC :/Y:K :?m! .J@5@FXD GGJ}#BC DpJYG! /< ;. 0@A`GQ;J{#0F;>A.AJ! UABABCp[JDF*;/Y;K0G;?!. 0@A{#!J! U!B!BC`;JGF`.VJF 0@A{#>.JUBB:GCsJ! F .UJF 0@A{#>,HXFC. BWJ(b """TG>KZk B  """(bKZk B """(bKZk B """(bKZk0"Ghb 1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhbh1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhbp1"/t]0"GTGhbH1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhb1"/t]0"GTGhb(1"/t]0"GTGhb1"/t]0"GTGhb1"/{t]0"GTGhbx1"/st]0"GTGhb81"/kt]0"GTGhb1"/ct]0"GTGhb1"/[t]0"GTGhb1"/St]0"GTGhbP1"/Kt]A// B(b """KZk///GG="Gb#_/ B(b """ KZk///GG="Gb#_ B(b """4GJZkG"cb#//2@ "G GGh(b#GGv;@GG4Gb#u:@G GG4Gb#K3@g `0"]"tG[(1"@Zk/GG4G b#wR@ "G GGh b#GGS@G$GTGh b#/3S@G//""DtGhbs]0"G tGDhb1"s] //0"GtGDhb 1"/s]GG4G b#~R@GG4Gb#M@ӳ B(b """JZk///GG="G`b#_ӣ B(b """JZk///GG="Gb#_ӓ B(b "X""CTGoJZkGd"pb#GC6DaD _G"TGTGpb#_G"GTGpb#/_G//tG"TGpb#_h`/KGTG="Pb#AE ( _////GGb4GY]GGGh""tGhbVs]G x@EGTG="@( Pb#/_///G4G b=]GGGh""tGhb:s]KGGb#G_K5AAAAE k# +@AC  F@ G?+ G/?//`KRFk`//  `Fˢ/`F/  //`G+ K_k/ B(b """TGIZkGGb# Ee)_G"""]"tGxb/]G=TGb#U)_ B(b """IZk///GD="Gb#E_G""]"tGhbr]ӷ B(b "P""IZk///GGDGpb#_ӧ B(b """IZk///GGDG8b#e_ӗ B(b "0""TGtIZkgc0" E[ 1"/@Zk//G4Gb#"_ G G/Gl-GGGpb#TGlI G> //_ ,G" GGTGpb#A H </_ G.!PJ>G GGtGb#_0"GTGhb 1"Ur]eG4G[/@ZkE//0"GGGhbGx 1"Cr]eG4G[@Zk4/eG4G[@Zk-// B(b """TGIZkg#0" E[X 1"/@Zk//D $TG"G0b#Q/_G GGGtGb#Cp_GG4Gb#ƈ_/ B(b "@""TGHZkG="b/]// B(b """HZk BA """(bHZk B; """(bHZk} E`Ģ $TG"G0b#Ѳw_` G7aAg0\|A, Ck/0"g 1"W///0"TG 1"l 8`F/Lg XEG[/@ZkB/g0"G]"[ 1"/@Zk7//0"g 1"+///0"g 1"#///gP""g""g""g""g"" 0"g 1"///0"gp 1"[tG]"/@ZkGG4Gb#"_Z/ B(b "8""9HZkGGGb# ED_Kd $TG"G0b#q/_ӂ` G"7aAr0\|AH C/k///0"g 1"_///G^m\` G@/GGb#G0A A `AM^_ AJ/ G///GTG""hb0Aq]lGGb#Gk jA @AKC_ A///0"g 1"#///gP""g""g""g""g"" 0"g 1"///0"gp 1"[tG]"/@ZkGG4Gb#_ D///g0"tG]"[ 1"/@Zk D곳g0"tG ]"[0 1"/@Zk// B(b """GZkݥ@GGGb#E///D_ӓGGDb#G_ӌ/D $TG"G0b#Q+_v`G7aAk@0\|A Ck/0"g 1"[///N GZ@jGW` G////GGb#G 0A @ `A@f_@ A_B/ G///JGGb#G 0A LA AJ_N A./0"g 1"#///gP""g""g""g""g"" 0"g 1"///0"gp 1"[tG]"/@ZkGG4Gb#҆_ /g0"tG]"[ 1"/@Zk d볠BG4Gb/QZk//G 4Gb#o_DG4Gb@/]e4G[@ZkeG4G[/@ZkB G4GbPZkXG4Gm[@ZkG]]} (0ݤ8@H=P]X}`hpݥx#/k#GGG~^^G#G$0P p0 @$0TG ^tG^ B >GGGTG4GP>GPZ#(b#H^G08@/S _// bGTGG>tGG>GG (TG0{#H~0Gb#8@9 _G]] #k///#GGG~^^G#G0P p0 @0TG ^tG^B >GGGtG4GP>GPZ#(b#H^G08@/ _//bGTGG>tGG>GG (tG0{#H~0Gb#8@ _G]] #k///#GGG~^GG#/$P00 0@C$PGTG^ GGTG{(H~GPXGTG08@ _G] #k//U#`;4G~^^~ (0޴8GGGa[/@ZkG4G(b//]G4G(b%/抣]$GG $/ ///$0@b#B@@  @`"a$4G[/@Zk`G4Ge[@Zk`¤G4Gf[@ZkG]]} (0ݤ8@#k/'#;4G~^^~ GGGa[@ZkG4GbA]b#@G4G`G]]} 0#k/k///R#~^^~ (0GGG{#t@G4Gb]////b#]_G/4G b_G$GG #/ ///$#0@b#%B@E@  @"a$4G[/@ZkG4Gd[@ZkG]]} (0@#/k///;#4G^~^ GGqG[@Zk//Gb#?_G /GG//! B ?G]] 0#k///7#4G~^^~ GGG {//_4G b_GGTGb////;_GGTGb/3_0G4G`G]]} 0#k///k///P#G4G^~^ ~(GGG>P0L pG[@Zk"Gb#TH 1"/_G?/L#X"TG @@ PqTQ@[/@Zk"//Gb#H 1"_G'/T4G pG[@Zk"Gb#H 1"_G/GG//! B ?LT#&"0BPBLC0F0ݢG]] }(0#k///T 0#~^^~ (0޴8@GGGG, Gۤ!/// #f4G%@/[//@Zkf4G[@ZkfG4G[/@Zk0@@ @` 4G[/@ZkGGTGb#/s_G4Ge[@ZkG]]} (0ݤ8@P#k//[#TG~^^~D GGG $0/ P@z`[/@Zkb#/#x"D/ _GGTGb/#8"D/ ////_"4Ga[/@Zk" 4Ga[/@Zk"4Ga[/@Zk4G4Ghbq_ӀG4G`G]]} 0#k/k///#~^^~ (0GGG/ D H0 PP!1 @H0A:@- ""B4GBGa 1 BGP@[@Zk"GGb#1"_G/ "P@4Gq[@Zk"Gb# 1"/_dG4G[@ZkGGG]]} (0@#k//# TG^~^ ~(08޴@HPGGh{GG{@Q1 AC!@@ >Q?B[@ZkX""b#/_ / C}@G@GcGfBADD/jG//eFb$H:GG] d(aGGG0b#TGU (FGPD@FG/J(F///o_G?$G; $///Q0B!h B0B1" B0B裵 B0BSF B0B(@$(G B0B/ ///@q`G BȢF/ `QWF @/// HG4G/0@@ @0AEAð4G///G]] }(08ݤ@HP`#/k///G8b#@G//#G4G~^^~ (G5 GG>GPh;L#HqG[/@ZkPG ""(b#_LH#TG" @@qQ@ [//@ZkG ""(b#_/L#P!@L#DC@HcP0`BStBHG]]} (0#/k///b4Gc[@ZkcG4GG]]} (0#k//`#4GX^G~`^h~px޴GGGGGG (bj]G/G/,$ //@="Q@0@1/0@!?DC @r//`31`BrStB/G4Gu[@Zk"GGb#1"[_Gm/GG//"! cǰg// PG@B D4G P@r[@Zk"Gb#1"/+_=// Ǡ("Q@TGa @ [@Zk"Gb#1"_+ @Q@pB]"/DZk,/"// ///''G>GX]`]h}pxݤ#k/#G~^^~ (0Gw GGGD0/ A//@a:1@CAZ[C/4GpG[@Zkp"GG`b#1"_GW/GG//"! G GGĢ//Բ5BӢs""/4GBԲ $0  d eRPCGR@Zkp"G`b#1"/_/B @TG/ $rQ?B[@Zkp"G`b#1"/k_ / d e$ BQ?BDDZkGG]]} (0@#k/M #^~^ ~(08GGG+GG{#D//#_DTGD0bE%s QB1BQB@[@ZkG ""b#*_/=%%E0 BeQ2B//xb4Gc[//@ZkcG4G[@ZkG]] }(08@#k/ k/ P11 B4@FPP FTF1Q BC Ck//G@#~^^~ (0޴8@H>P^X~`hGX[GGGGGBC;J!CfG""DTG`$b/ _$&GTG*b _G// G4G(b4G]GG4G8bٮ]m EGTG""7$b/3// _.$GTG*b _G%Gh""TGb/] GG/(@G//HGGTGb _GG 4G(b4GK]GG4G8b]iG4G[@Zk10$G""bTG*o _///$$GTG*b /c _///4ƠG""bTG  S _ ƠGGGG@b Ơ FU_8D4DGmG]]} G(0ݤ8@H=P]X}`hp#/k///Gk//t#^~^ ~(08޴@HP>X^`~hGGGGG~GG|#GGTGb0@'@@! _/t# @/? //0bGG_"p#s"+//GGGGtGbE^0bGGG)_"!s"/`G4Gg[@Zk0"G Gb#X#1"_GG4Gb] /BGG4G@ZkGGbȰ _4G@}Gb@`G]G"" GGTGb+]G""G]tGb#]|#GG4G txg[@Zk0"Gb#|/X#1"I_xt#TG" 'A@ xQ@a|[@Zk0"Gb#|X#1"/3_ //|t#G'A 0 Apt#GGb#!.@Gp㳪/t |#'1@tI@)p#//p4GGb>]0bGGG_"(#s"//$GTGH""bB}O _z$&TGGb ' E _/o %j /f $)G""bTG!  7 _$)GTG'b/ _GG FG0b#4_0bMGGS_"GG@b#"s"j_)/?GO/$ GTG""b9 / _5$)GTG'b _G,""GTGb/]0b GG G_"GG@b#"s"@_)?G&G'@GG F0b#G_0bGG_"GG@b#`"s"*_jG4G[@Zk)?G /0bGG_" "s"GG@b#_GG]] }(08ݤ@HP=X]`}hp#k///00#~^^~ GG ,!811 Ba1B00C @ c#,p///,4GC@@`/[@Zk@"4Gq[@ZkG]]} 0#/k///#GG@; ^~B!F^~AFGGGD@\B{hCk///G//G4Gpb#H"_ӈ//BG?""(bGHR"/h]G//BG?""(bG R"/h];//BG?""(bGR"/h]///BG?""(bGR"/h]#//G4Gpb#"_O/G4Gpb#"_G/BG?""(bGR"/h]//BG?""(bGpR"/h]//G4Gpb#@"_'/G4Gpb#"_/BG?""(bGR"/h]//BG?""(bGR"/h]//BG?""(bGR"/sh]//BG?""(bGxR"/gh]ӻ//BG?""(bGPR"/[h]ӯ//BG?""(bG R"/Oh]ӣ//BG?""(bGR"/Ch]ӗ//BG?""(bGR"/7h]Ӌ//BG?""(bGR"/+h]//G4Gpb#"_ӫ/BG?""(bGXR"/h]k//BG?""(bG0R"/ h]_//BG?""(bGR"/g]S//BG?""(bGR"/g]G//BG?""(bGR"/g];//BG?""(bGR"/g]///BG?""(bG`R"/g]#//BG?""(bG8R"/g]//BG?""(bGR"/g] //BG?""(bGR"/g]B"?"G(bGGDR"/g]G4G"b# H_/G4Gpb#"_/G4Gpb#"z_/G4Gpb#"r_/G4Gpb#p"j_G]]}#k///#^~^ ~(08޴@HG#GGGGGGG{#] }0G//+_+(#G ( ]GGRFG`c0`BC# cTGGGtGTG b# (޴08@HPX޴_dG4G[/@ZkG]] }(08ݤ@HP#/k///0P#`1B~^~ 2B (޴08@GGG@GF@8#g4G&@H@/[@Zk4Gg/[@Zk0@@0# @?0/,G]} (ݤ08@P#k///00#~^^~ (0޴8@H>P^X~`GGS GGGG/8@ G G@, "/8ChTG JCG pGxb#(  F+/_G TG+xb#/_/// 0 A CA $AG(b#H h0@_(g4G /[//@Zk4Gg[/@Zk0@@0C @/_0G]]} (0ݤ8@H=P]X}`p#k///#^~^ ~(08޴@HGGGGGG/06 HAG 0p//`Hb#i_<@`GGGGGG b#_i///8BGG4G4#0r[@Zk8G ""b#s_T//,TG04#B B!@/4#a!@r8Q?@[/@Zk8G ""b#Y_:0#a!@@ @ ,,# <C@qRrF@1$F/) 08tBGG4Gb#GB4G _GG4Gb#/_ǰ<# QG1 '// 0,0B0G]] }(08ݤ@HP#k///#G ~^G/  #/k///;GTG+{#X&1"F@G]C #/k///C?BG0;B# TG^F~GX&1" ^(GG^ ~+b#%@G /G=G ]}0*b# @XD@TG/4G/@ CG] ](0#/k///C?B#TGB^~F ^(~08@޴HGGGGG~ G ;,b#X&1"/@GGGb#MY@GGG`""TGb_? &/GGTG""b_//? &vGGTG0""bz_//? &jGGTG""bn_//? &^GGTG@""bb_//? &RGGTG""bV_//? &FGGTG""bJ_//? &:GGTG""b>_//? &.GGTG""b2_//? &"GGTG""b&_//? &GGTGp""b_//? & GGTG""b _/'GGGGG b#G/@GG4GPb#Y@GG ]G}G'b#/[@GCG4GPb#Y@ C ///GG4GPb#Y@ G] ](}08@ݤHP#/k///G%{#4GGת///C?BC#C@(^~F0^8~GF@HGGG^~ / R/p"GTG0,b#X&1"@G/ F/G`G]"=}Gp*b#ϼ@ 9=  5}GG]"G =P}p*b#@G//4G$b#@ "/G4G$b#@ G=TG%b#@GG4G$b#F`r@Gd 4G$b#/k@` à@G(]0]8}@HP#k///# TG~^G^~ G GGG""b?_4GGGTG""b6_ӠCG]]} 0#k//# CTG^~G^ GG>@""b/_4GGTG""b_ӠCG]] 0#k///#CTG^~G^ ~(08GG>G(;"G (b/_G//GGTG(b_G5GTG ""(b_GG,GTG(b_&Gb#G /@GGGb#/@ӥ@@GGD GGTG (b_ӥC"`G4Ga[@ZkbG4Gc[@Zk/4GG]]G }(08@#k/'GG;4G#~^^~ GGGa[@ZkG4G`G]]} 0#k/G4G`k//k///#CBTG ^~H[(^0~8@GG@CGZ@ >H" ^~_CAGG;Db0DGS _Ӹ" "GtGa#1"[@Zk E "G4Ga[@Zk"GGb##1";_ 6/GG//"! /GG4Gxb _ ]GtGݢP]DG IJDHG(bm _Ӹ""GtGa#1"[@ZkGb#Gb_ GG ](]0}8@P#k///#G~^G^GG.b#a@"GTG "b/ _G]] #k///# ~^^~ (GGG/ /# D @0cR`KhG4G///pG`G 0 @"@|@\<@ Ck///4G b_p///4Gk//0#R H8D/,  /G4G b_8D /0CR@JF2v^JpSJPFR@JC0CpF5vJsS`JF08D0RKF8vKvSJGRK0 (GC;v~KyS KyG0c(# cCD//G@//0?&1"$vHD4G60c1v J3JqF0c/G4G bx_8D /////G4G bh_8D ///G0CR@J2v^JFpSJPF0C8D`0âRJF6vJtSJF0òG]]} (0#k//B?B# AF^~ ^(~08@޴HPG QGGGG0@C@\@` Ck//Gb#!_8D&GG"0$Hb!v H0D0vJ #C= ]04JF0Ġ^G/ /G4Gb/^ӈ /GGTG b_ Ơ//G#TGXb^G4Gb/^GG4Gb4^G4G8b/^ ݠð//GGGbGd`# / ^ӈ?&G0G1"HbRJ0vJ(DF1v JF //Ccà}05JF0V^G m/G4Gb/^ӈ/GGTG bW_ G#TGXb^G4Gb&^GG4Gb4/S^G//44Gb^44GG8bY^ð8/GGb#?@G/G$TG b#_G(/à$GTG b_GGtGC(b'^//GGtG#(b^ӈG/GGTG b_ G#GtG(b ^GGGtG(b^ӈ/Ġ //GGTG b_ Ơ/// ///GGTG b_ G#GtG(b^GGGtG(b^ӈ/àG////ðGGTG b_G/ 㰰/GGtG#(b^ 㰤///GGTG b_G// GGtG#(b^ӈGGTG$ b~_ӈCGGPb"bGG^GGGtG(b^ӈsGGtG#(by^ӈj///H¤B"\\@ Ck//B"S//`B"O//B"K//pB"G//B"C//B"?//@B";//B"7//HB"3//B"///(B"+//B"'//0B"#//B"//pB"//B"//B"//B"//XB" //B"//hB"//B""GtGXbh 1"]]GG] ](}08@ݤHP`#k/B?B#GAF~^^~ (GGGG/  B/DGBC@CzGb#@_0?&TG(b1"RJ0vJ(DFG /G/_'//$"0 @"@\<@ Ck//G$TG b_////GGTG b_/// GG]]} (0#k///o00#4G~^^~R H (GGW P DGS PG0@CBC\\CK`\ C/k///4G///0CR@J2v^JTFpSJPF0C8D7`0âRJ6vJ4FtSJF0ò///4G b_///G// //G4G b_ //G/ //G4G b_8D? /4G/ G]]} (0#k/// k//0.0J/ ///$B !B"7@ DD/p/pK/?4Gk/Gk//#TG~^^~ (GGGGO $//P;"b^ $#TGGb0^$#G""bTG7 ^3$#TGGb0/^*G ""GTG8b/g]///P" ,GG4Gq H [@Zk(GGTG8""Hb]G/G!/P"G4Ga[@ZkGc`//GG ""8bTG8D/6]G/c/G///G]]} (0#/k///P"$,G4Gq$H [@Zk//GGTG8""Hb]G/G/P"G4Ga[@ZkGà#^~^ ~(08޴@HP>XGGGX{#G*_GGGGGGG8""'TGb/ߴ]SGGw@GGGTGbI]HbGGX_"GGXb#@s"_GGb#'_HG G4Gb"^ G"GTG 'G0b_HbG GG\_"GGXb#s"r_GG_"eHbGG`s"/[TG'@ZkHb8DGGGW_"Gs"Xb#S_ G"4Gb/^>/(G4Gbu @ @FG+ //'.]HbGGG/`_"Xs"!$ e5@}"GGC&E['@Zk8DHbGG_"(s"  $ HbGGT_"s"GGXb# _GG]] }(08ݤ@HP=X`#k/#TG~^G^~ (0޴8@H>P^XGGGGGG ;"b/]0bGG GV_"GG@b# s"_G//G@GGGTGb/w]0b//GGX_"GG@b#s"_GGb#>S_0GG4Gb"C^GG@b#G"_"GG4Ga[@ZkGÈBGGG(ȰTG b_0b GG\_"GG@b#s"_=/GG_"`0bGG`s"@b#/_.//[TG(@Zk0b8DGG W_"G@b#s"l_///0"GGTGb1"^G(""TGb^G ""TGb^4Gð Ġ G/GTG""b^0"GHGbTG1"^0bGG"_"GG@b#s"4_Ơn//GTG""b^//*Ơ`GG@b#_G G"" GTGbO]0bGG#_" G@b#Gxs" _GG4Gb] //$H/ EGƠ/GTG""3bTG^$G@b#Gb_) GG 0bGG_"G@b#Gs"_/GGb#,@@ G/Ơ0bGG_"Hs"G@b#_GG]]} (0ݤ8@H=P]X`#k/#4G^~G` ^~GGGG|^/!  /?@5@pG2$x F 4Gq/C@(]("!(= c`.J]"}D]D`" ]"b#G./@(GTG b/R_QB5B0F/?D//@(]/xDu@8D>//B"XD""DBq R"82",(("Dݲ  8/8K D//(`"G ]"b#.@(GTG b_4G//Bb" R"82"dG[@ZkGG]]}#/k///?B_BF/71/// )#~^^~ (0GGGGG$ //b#E_ $?Gc 4GG]]} (0@#k///4Gk//4Gk//4Gk//G//$ /k///\ G//a`Cu`C`C`CFSFaC`CDFC5bCPFubCaCFUbCrFaCGbCFaC@FaCpFTFuaCFUaCGD{FD///G./ pP)` {[&` S# @/ T/?4G/k///1D` a/`G//4Gk/! 1D/ G?4Gk/Gk//$0#G~^^~ (0޴8@H>P^X~`hG& 5@B' GGGGGG8 DC{[/ AuAqG 5AE?@kG4G#[TG/@Zk)//"G`b#( 1"_G//G]]} (0ݤ8@H=P]X}`hp#/k///j @GTG @0@[Q?B@ZkA@0@P@D /7Gñ5AuAUAAAՁAAuA2FtFFFUA3FFA5F ,G ,F/'//?GG/?/// a Pp@ r tt/` 3s/?/砞D/ '//?GyÀ#^~^ ~(08޴@HP>X^`~hpxG 8D01R H$D $PGG @GG{#_$GGG4G/ /// !0@ !0@ !0@ !0@/ !0@/?"q[P@4G@Zk" GGb# 1"_/GTG4Gb//_G/GD G/t@///GGGHb#_ e5A G@8 F_B_@_ qF/\ ///GG(""bGGxEG//O_? DA EGGG;2!b RG/ @.J/G//7_ D*/G!GGGGGb+_ D/ RG!""GGbG@2,2H/ _ D G!G""GGGb_ D/!L!5A_B0FG Jk!/_ G G////l G G/`//KG(b#/@,_ӆ4D 0@Ak! MA/? 0A A!xb GG///k4G/[@Zk 0@Ac EAkG4G[/@Zk0RH%vH EmSID08E 0$R I BE)v>IjS@I *E0$GGGTGb1_0RH%vHDfSHD0G]] }(08ݤ@HP=X]`}hpx#k/#~^^~ (0޴8@H>P^XG U@@GGGG D/0QR@KDG@$p//`$/ 0@ 0@ 0@ 0@/ 0@/$ / 10@ 10@ 10@ 10@/ 10@/?"a[P@4G@ZkGG ""b#_k//$G G/ ///GG4G(b#_ 0A)! IA ///GG4G(b#_ 0A)! GG&/// G G///JGb#/@(//_ӨbG$_"Gb#G s"_ 0 AJ! 'A0@ @!?XB GG/j4G/[//@Zk 0 Ac %AjG4G[@Zk0RH%vHEhSID0G]]} (0ݤ8@H=P]X`#k/$qp#G~^^~ (0޴8@H>P^X~`hp޵xGC`GGGGGG4G/ 0@B 0@B 0@B 0@B/ 0@B/"i[P_B4G@Zk Gc G/ `///iG4G![@Zk GG G0@b#`uB@G_ GGb#4G_ ki[G4G G G/@ZkGGG4G 8b/_/ 0`A, fA GOjA)///Gb#/ )A/_`bG#_"Gpb#G s"%_G)b#@_`bG#_"Gpb#G` s"_ 0`A! fA)o )m /aGGG(bG!x`E "")!_)D/?[// `EGG(bK`!!G# A//@.J/ G)!_)D/??//GGGGG(b!)!_)D?/// AGGX""(bG @r-rI`/_ //GGX""GG(b/_!)!()TE D? //)!)!/?//G G!/[ E/0RJ5vJaFsS`JF08E4GXE/tG%,///`"G"@b#G G@ 1"_@//mi4G/ ` //[@Zki 4G[/@Zk0A! AiG4G[@ZkG8b#7_G]]} (0ݤ8@H=P]X}`hpݥx#/k///#(^~0^8~@HP޴X`GGGGG{#_G//Gs/tGGTG4G&8#b/ ~^8b#8"G1"z_/4cGG"8bGB"0`B4#fV]G="8GtG(b_bG"G_"Gb#s"_ bGG_"GGb#s"_6/H //$G""bTG^$'GTG$b^GGTGxb @////GGb#@ /// G/GG(]0]8}@HPݤX`p#k///#GTG^~^ ~(08޴@GHP>XG $1GGG 8;"XbF^$$TGGXb0=^GGTGb@Gw/$$GTG""Xbf /+^///_$"TGGXb!^VGGb#_Z4GpbGGGb#0CGGs"@ Ġ_"U_J GGb#4D G@ƠGTGb.G_ pbG_" "s"GñU @ @"@"@2F!F/  pbGG_"hs"GGb##_ƠpbGG_"GGb#@s"/_ݠ ð $GTG0""Xb%^"$ĠGTG%Xb^Gb#Gr_G/G/GG_" $pbGb#G s"/_//$ĠGTG""Xb&¤^"$GTG&Xb^Gb#GF_G/G/tGpbGU_"ŰGGb# s"G_Ӵ//$ĠGTG""Xb.¤g^*$GTG&Xb_^"Gb#G_G/G/GpbG_"ŰGb# $s" G_ӈ//G4Gb#l@//$$GTG0""Xb- 3^*$ĠGTG%Xb+^"Gb#G_G/Gd/GpbG_"ŰGb# $s" G__T//G4Gb#8@L//$$GTG`""Xb- ^*$ĠGTG%Xb^"Gb#G_G/G0/GpbG_"ŰGb# $s" G+_ //G4Gb#@//$$GTG""Xb- ^*$ĠGTG%Xb^"Gb#G~_G/G/4GpbG_"ŰGb# $s" G_//GGb#@//$$GTG(""Xb- ^*$ĠGTG%Xb^"Gb#GJ_G/G/TGpbG_"ŰGb# $s" G_Ӹ//GGb#@//$$GTG""Xb c^~$ĠGTG%Xb[^vGb#G_G/G/GtGG""ŰTGb/˪]pbGGN_"GGs"/[@GGTG(b-}]pbGGL_"s"Gb#w_ ĠpbGGO_"GGb#s"/k_àGTG4GHb////^GJ_"G#pbhs"GFG%GtGbV^CàGTGXb%j^pbGGJ_"Hs"//pbGGJ_"G(s"'/,,Ű,&$$GTG ""Xb ^///$ĠGTG%Xb/^///GGTG@b_G$ĠGTG""Xb¤^$GTG&Xb^G(b#G2_G$ĠGTGX""Xb.¤^*$GTG&Xb^"Gb#GV_G/G/GpbG_"ŰGb# $s" G_//GGb#@//$$GTG""Xb o^///$ĠGTG%Xb/c^///GGTG bb_G$ĠGTGp""Xbv¤O^///o$GTG&XbGC^f4ĠGGb#~_|GGG4G FbR@ ]pbGGGD_"s"fGGTG""b] G////$GG""bTG8 D/ ///] G G""GGtG8b4Gv]  G4Gd[@Zk GGhb# D #/@ /// G8DG""TGxb] ƠGǰ/$GTG""Xb"%^"$ĠGTG)Xb^Gb#G_G/G/4GpbGG_"Gb# $Gs"/ _/$ĠGTG""Xb^$GTG(Xb^#GbTG# $b @ # $GTG""Xb^ӂ$ĠGTG(Xb^z#pbGG'_"GGb# s"_G/GGb#,_GGGGG""TGb/]pbGG&_"GGs"/s@GGTG(bE{]pbGG%_"`s"Gb#_ $pbGG(_"GGb# @s"/_GTG4GHb////^G$_"Gàpbhs"G^%GGtGb\ m^GYTGXb%^pbGG$_"s"G/,,,F$$GTG`""Xb¤5 ^////$GTG&XbTG^& GG_"GHb"TG b#GG_GG! Gb# ) _GGb#_tG  pbGG[_"s"Gb# _GGG]] }(08ݤ@HP=X`#/k///#TG^~^ ~(08޴@GHPGGGGG^/S $Q;"b^ӈK$$TGGb0/^///?$0bGG_"GG@b# s"_ 0bGG_"s"1GG@b#,_0TG]4G G @FG//GG@b#_GGGGhb#(@ GG G/G /0bGG_"`s"GG@b#_GG]] }(08ݤ@HP`#k//#TG^~^ ~(08޴@GHGGGG $GG0;"b^ $$ TGGb0 ^//($$G8""bTG ^ $$ TGGb0^$$G ""bTG ^ $$TGGb0/^///%Gb# @5!@FG _F4GG ђF $dG0""o`TGb^j$$ TGGb0^GG_4Gb/]GG/ @GGGTGby]b$GG_"G 8s" //bGG_"GGs"b#_GG(""TG`b/] GCTG "GbF1"G//^bGGb_"Gb#Gs"_ =TGp""GbD.J/g^bGGa_"Gb#Gs"_ӡ$GTG8""b/S^$ "TGGb!J^  tG $Hb 5BG_(/$$GTG ""b> /3^:$ "TGGb!*^G(""/GTG`b]bGG!_" GGb#xs"c_ "TGGb 1" ^bGGb_" Gb#s"O_ $GtGHbC 堲5@O_(>/$GTGX""bZ ^V$ĠGTG'bG^MGGb#_4GPGG_"b# $bGGXs" G_ G//GGGtGhb_//( G/DG/(%// (Ű#/ Q@// rG` G G բG/ VG/_ ѰG bGG_"Gb# s"_GG]] }(08ݤ@HP#k///#^~^ ~(08޴@HP>XGGG{#G._G/G/GbG_"%GGb#0#xs"% ĠG_uGGGb#'_ƠbGG_"GGb#@s"_c//,#GTG,=///GG`b#_P B G0 @"@/H 삧\<@Ck//%G=GGb#FF ///_ 'G) 'G%$E I$%!bGG_"s"//bGG_"s"//bGG_"Xs"//bGG_"(s"GGb#3_Ơ=,#GG]] }(08ݤ@HP=X`#k/#5@B~^^~ (0޴8@H>P^X~`G[G0GH GGG 8DTGJ!//$$Gh""bTG) ^&$$GTG*b^GGTG(b!_ GG! &DGb# D0DG ///O_G gGGGTG b#_///G G/G]G]} (0ݤ8@H=P]X}`p#k///{#R_"G~^G^~ (s"0GGGG {#/_ /$$GTG""b& /C^"$$ TGGb0:^GGb#_G r/G_"b# bGG:Gs"/o_5//$GTG8""b&/^"$ "TGGb!^GGb#_G F/4GbG_"%GGb# $s" GC_ //GG4GtG> b_G#  0/ /// QG@ rG ` G G/ 5G/? / GQ_"b#$bGG hs"//_ /GG]]} (0@#k//#~^^~ (0޴8@H>P^X~`hGGGGk GTG!///S$G@""PbTG-^///'$$GTG(Pb/^/// $hbGR_"GGxb#s" G_GFGb# _? DG=///$GTG0""Pb G[^Ӯ$$GTG(PbS^G""GTGb/ϣ]hb GG G_"GGxb#0s"_GGZ @GGGTG b/+v]hb//GG_"GGxb#s"s_GGxb#_g GG4G [@Zk˰KG_" $hbGxb#Gs" GW_ //,GGb#,C._ ,TG4GG@bL@/^ G_"G#hbs"G6GGGtGb:^//1GGPbTG /K^,////,,G ,G ,0G ,QG/@,G/,`!,E&GhbGG_"Gs"Gxb#_?!!,EG$dGTG ""Pb Ga`^///[$DGTG(Pb /^///O4$hbGG_"GGxb#ps" _YG 4Gb[]hb GG G_"GG xb#Ps"_EG TG""Pbj^hbG G_"GGxb# s"_1 *GTGb _ӠC,C $GTGb _! D_!E/G/hbGG _"G xb#s"_/ //hbGG _"GGxb#s"w_ G]]} (0ݤ8@H=P]X}`hp#k//#{~^^~ (x%s"0GGGGGG#4G0///bG4G#8%s"%GGTGb//_^G/`///,,0 ,Q@,2/? //bG#M_"%s"GGb#_G]]} (0@#k//,p#(^~0^8~@HP޴X`h>p^xGG`GG ^GGGP;///GTG""8b&]G G?0""GTGb^&  4G./b+G#_"GG &s""///GGTG""b^&  G/b8D_"GG#G &s" //bG#Z_"GG%s"b#_iG4G[@Zk/4G /bG#_"GGb#%s"_,F!@EC4GG#b# _ӈtDPGG G`TG/Gb#@ G*/_ G E G,GTG,84Gxb^8G_"G8䠠b#s"4dGG"bGB" 0`B4$J]G="8GtGbW^Ӡb//G#"_"s"Gb#C_G(]0]8}@HPݤX`h=p]x#k/#(^~0^8~@HP޴X`h>p^xG GGG GG ;///(GTG""b !/ //^ (G ""bTG;] G /bG(S_"GG G b#s"_G"";@GTGb^& / 4G*/b'G(P_"Gs"GGTGx""b^&  G/b8DP_"GG(s" ///bG(Z_"G`s"G b#_iG4G[@Zk/4G /bG(_"GG b#(s"_ F!@EC4GG% b#_ӈtD4GGbTG4G D@ *8# ^8G_"G8#b 's"4cGG"XbG0B" 0`B4CI]G="8GtGHb^b//G'"_"s"G b#k_G(]0]8}@HPݤX`h=p]x#k/#G~^^~ (0޴8@H>P^XG$$: GGGG)v@J0@B //D!v IGtGuAAAApG b70D1v@KD:_KAGG/ 0D$/_01vH0JF0 GD_/0DbGb#G2FJs"FJD$@$K_"_ /G]]} (0ݤ8@H=P]X`#k// @EGG/@$/G$GtG b_ GD_/G` 1 3k///@rqG/` qr/k///$21D q$rk//(rqF` 1(2k//? G1/k///#~^^~ (0޴8@H>P^XG$G GGGG_B! D!vHtGuAAAA[G b/@0D0v@JD2_JAF0DG$G_ /8@E/5BBUBuB2FtFBB3FF8FGG5F G//G_ G/@GGGGCCUCuC4GF/r_ G//$GGtG b /_DGGtG b @E/@$$ _($GGtG b }_D @E(@$/ ///G^_8D/ 5$$ $/?/ 8G GK_8D// 7 8$ $/G$U"@u"@F $ / qGD/` %D G/ G &GGGXF/ 8F/G_ G:B/8FGGG.%5!C!CU"Cu"C UEF"C!C VEF8"G PEG'@ _ G&/GGGGBBUBuBF F5B TE@_ G//G  4G%/4G/G]]} (0ݤ8@H=P]X`#k/GP"1 @B @AF  k///Gk/ U@U B#DTG;F/k///P" @B@@F /k///5B5 B4G;D k//UBU BF0CPFk//#UbBubBHFx^~AFP@F^~8G8 G޴>^~޵GG5bBt 8EaBU`B8`FG@FGDFCCGDDDDDC~C8E 0D~%C4DDTD> GCD0>(~80D!@H~ GP^X`>h>p^/pbG:_"GGs"uAAzGb#/[@///@$_pb`G$4_"GGb#s"_0$? 2vIGG b &J1?JH2FG @2 0$d$_0$ G!v H1?J!F0$8 /2///GG=_/G///Gx]G]}ݤ=]}ݥ#k///0D8 2v@JET@FG//EGGb#[`///_pb`G$._"GGb#hs"_pb@G$7_"GGb#8s"_pbG$,_"GGb#s"}_pbG$,_"b#GGs"t_GGd$$G b_pbG$_"Gb#s"c_GGd$G b_pbGG $_"Gb#s"P_8 }8TG /w//8EpbG+_"cGGb#$ps"/7_pb@G$6_"Gb#G@s"-_`ݥpbG>_"GGb#s"$"_XݥpbG?_"GGb#$s"_pb`G$-_"Gb#Gs" _pb G$@_"GGb#`s"_ġpbG_"(s"/ //$/pbG$ _"s"GGb#_P]GdG$ b_8G /=//AApbGD3_"GGb#`$s"_pbG $F_"GGb#s"_@]GdG$ be_GG*_8G /EG9_"b##`pbGG@$`s"/_pb//`G$2_"GGb#0s"_pb G$E_"GGb#s"_GH]d$XEpbG0_"# GGb#`$ s"/_pb G$C_"Gb#G s"u_p]GdG$ b_Gb#GG_8 /xEpbG8_"#GGb#@$ s"/W_pb//`G$1_"GGb#H s"K_pb G$1_"GGb# s"A_Gh]d$XEG $FF//GG$EpbGA_" GGb# $ s" _GGd$G b_84G EsEpbGH_"GGb# $ s"_GGd$G b_84G -[xEpbG;_"#GGb#@$ s"/_pb//`G$5_"GGb#p s"_pb G$G_"GGb#H s"_8TG 3pbG/_"`$Gb#G s"_pb G$B_"GGb# s"_8G //8EGGb#_$GGd/$GGGG bM_8G 0}GG `/ _ GG"_/(GG/_/ 4Gݦ"!4GEG#^~^ ~(0GGG{#>_G//GQ/  Q@/rG`G GբG/VG/_/GTG=0b H_G_"b# $bGG= s"/;_GGb#_GGtG(b8"////^GGtG(b@"////^ ]GCG]] }(0@#/k///B?B#@F^~^ ~(08GGGG/G/8"G4Ga[@Zk//GGb#O_G/GG//"! G//G/,#GTG,b=$ ""/^$$`TGGb0z^//G $TG0b>_/GHb#_j# / A//@r`/GG բGG/wG//GG =TG8b_ ,EGb# 2G8 (_ GGb#D1 _ /$/// !   /@R"/@ `//` / "/ // /G $b#G"_GG]] }(08@#k///[#CG^~4G^ ~(GG Gr[@Zk"GGb#$1"_G/BGG4GYZkGhb^ӨBDGRCG]] }(0#/k///CC#@ @^~SF^ GG >@G!///0ꂦG4Gt[@Zk"Gb#$1"/G_G/BGG_YZk= ݢX \P@G]] 0#/k///#G4GTG^~G^ G"G(bF]`"C4GG/Gq[@Zk0"//Gb#$1" _G /BGG¦#YZk=H V@G]] 0#k/i#[4G~^^~ (0޴8GGGDr[/@Zk`b#/_8GGTGXb/ ^<////b#_G@/ b#_Gꂤl4Gd[/@Zk|d4G[//@ZkTGGL# /T0@b#B@y_L @d[T4G@ZkdG4G[/@ZkG]]} (0ݤ8@#k/GG/k///R",H`#@@7`C;D3D?PF/+Xr/rKdB3 aB7 @F3D r/R"rK/k///G//R"r/rK"@@7BpFF?//2rK/k///*r/rK/BBp"7`B3D DaJ/q.SqJaF///R",H"@@7BpFF//q.{HSqJ{Fq>.R"J1",@H<k/q.SqJq>/k///#~^^~ (0޴8@H>P^XG,GG Ghۤ//$%GTG'b G^///G ""TGb=^G3""TGb6^G""TGb/^G""TGb/'^G//""TGb^G""TGb^G""TGb/^ӸbGG _"s"GTG""b^G""TGb^Gh""TGb/^ӸbGG _"s"GTG ""b^G""TGb^Gp""TGb/^Ӹb}GG _"s"tGTG""b^G""TGb^Gi""TGb/^ӸbaGG _"s"XGTG8""b^G4GC  %tG@b>x]M ,G GG4G0b H/ /ô]Ӹb GG G_"Gb#s"_!/// bGG^_"Gb#s"//_ bGG]_"Gb#Xs"/_GG4G@b]fG4G[@ZkGTG""bb^ӸbGGY_"8s"b#_GG]]} (0ݤ8@H=P]X`#/k///p#^~^ ~(08޴@HP>X^`~hpx޵G({GG GGG[;8k!//G G4Gb]GG4GbG/;]GTG+b8D/W $- ^*Gb#G_GTG""b/^G0""GTGhb/{] G/// GTG0""hb8FGk] G//GGTGhb8""_]b GGG_"!s"G///Gb#_/G///ơ>GIGG4GHb]bGGG_"GGGb#!s"_jG4G[@Zkơ/#G./ bGG_"GGb#!s"G/_GG4GXb]jG4G[@ZkơG/GG4GXb]G GTGb-]GGGGTGbʳ]bGGG_"GGb#`!s"_jG4G[@Zk//jG4GG[@ZkơG/jG4G[@ZkjG4G[@ZkdG" G/lGGTGb0A @ AA^/d# A/?//bGG _"GG Gb#0!s"z_Ӡ/GGGGtGXb G/w^bGG G)_"GGb#!s"d_ӊ///iG4G G[@ZkbGGGTGGGb# s"O_GG4GHb*r]p/BGG4GUZkGGXbDZ^G4G<#G8b'</Ê]G0"" GGTG(bS]G0""GGtGbK]lGG4Gdhi[@Zk"Gb#l/ 1"q_hdTG @ Ahh[QAl/@Zk"Gb#l 1"/[_ //ldM @0@`dGG G`b#H@`/dá l#.1AdñAA!`#//` GGbG_"GGGb# s"_jG4G[@ZkơG/jG4G[@ZkjG4G[@Zk4!///GTG""bb^G8""GTGhbߕ]b GGG_"p s"///G GTGb]GGGGTGb]bGGG_"GGb#H s"_jG4G[@ZkfjG4GG[/@Zkơ//G/jG4G[@Zkj//G4G[@ZkGG0""TGhb]G/GG0""hbTG 8E/]G///GGGGGb_jGG4G[@ZkbGG_"GGb#G( s"._jG4G[@ZkơSG^/jG4G[@Zk4Ʊ/GTG""b@!/^G// (""TGb^G8""TGb^Gm(""TGb/^G//c ""TGb^G""[TGb^ӠCG@""TG Db// ///^ GGTGbD B_ ơG/ơGTG(""b!/w^, GGTGbD> *_ ơG/GTG@""bb^ bGG*_"GGb#s"I_ b6IGG<_"Gb#Gs"_GGTG0""(b G]/(/ϡGG0""hbTG8E/] G/ GG0""0B"tGb] GGG0""tGb]jG4G[/@ZkG8""TGb^G@G4GbK]G//8 G="GTGHb=f]G*G] GtGb/ێ]b GGI_"Gb#s"9_ GG@0""tGbY]GGGTGb]jG4G[@Zkj4G[@ZkjG4G[/@ZkG(""TGb^b} áGG=_"GGb#Ps"6Is/_p//GGTG8""hbG5]Ge GGGG8B"b$&//?}]G/G$TG8""bx]G GG GTGb ~]GG4Ghb/+z]GGGTGbE]bGG_"GGb#(s"_GG8""TGbI]jG4G[/@ZkGG0""TGhb]G GG0""GtGbӕ]jG4G[@Zk/GTG(""bR^GG0""tG0B"b]GTGp""b GC^G0""GTGhb/] G/2"//GGTG0""(b]GG0""GtGb]GG4Gb/]GGGTG8bG/ }] GGG4Gbր]GGGTG8bG|] GjG4G[@Zk0100!/GG šGG/G/ơ0GZGe&?Q8@F_G8""TGb^G ""bTG ^Gơ""bTG^/bGG _"s"///u@@E/(//w_ 8EG ""TGb/^/// ơG""bTG/^ӅD /5AAՠA E E/G/Ơ D/ G//ƠVGG 4Gb/;]GG4Gb]G]] }(08ݤ@HP=X]`}hpxݥ#k///#4G~^G^~ (GGGGGb/#]pbGG G_"DGb#s"_G//GTG b_GG]]} (0#k///#4G~^^~ (0GG#GTG(Gb$ % ^Ә"BTG q"$1"[@Zk`/8Gb# (0b@B"}_GGb#hpBxbt_4G`DGGGtGXb 9^bG,GG)_"D$s"XGGGXbGG/\#I^bGGG)_"`$s"/G4GXbH$"^G4GHXbH$"^D/HvHGG`b#Y_GGH4GHbm]HqGG4G8b]bGGG_"DGb#s"_GG4GHbm][//Gb#_GGG4GHbm]N/8GGtGHb`"/3^$Gxb# ///s_GG4GHbH㳙m]5%GGb# ! !"D !_G % Q@ G 4b#I_4G<#H%@C<EL@ T$CT8@G/@ eG bGG_" $s"GGb#_GG]]} (0@#k/0pPk/// k/ /@/`Gk///  0@@\@ #~^[^~ (0GGGGCk/GGTG""hbb8]/GGTG""hbZ8]/GGTGx""hbR8]/GGTG""hbJ8]GGx""hbTGB8] DGG""hbtG@:8]GGD""tGhb38]$ /GGTG b_ // /GGTG b_ //GGh""TGhb8]ӗGGTG""hb8]/ ///GGTG b_ //GG8""TGhb7]{GGTG""hb7]/ ///GGTG bg_ //GGH""TGhb7]_GGTG""hb7]/ ///GGTG bK_ //GGX""TGhb7]CGGTG""hb7]/ ///GGTG b/_ //GG""TGhb7]'GGTG ""hb7]/ ///GGTG b_ //GG""TGhb7] GGTG0""hb7]/ ///GGTG b_ //GG""TGhbm7]GGTG""hbf7]/ ///GGTG b_ //GG(""TGhbQ7]GGTG""hbJ7]/ ///GGTG b_ //GG""TGhb57]ӷGGTG`""hb.7]DGG(""hbtG@&7]GGTG""hb/7] /GGTG b_ //GG""TGhb 7]ӏGGTGp""hb7]DGG(""hbtG@6]GGTG""hb/6] /GGTG bo_ //GG""TGhb6]gGGTG@""hb6]DGG(""hbtG@6]GGTG""hb/6] /GGTG bG_ //GG""TGhb6]?GGTGP""hb6]/ ///GGTG b+_ //GG""TGhb6]#B"Ge R"82"[@ZkbB"Gc R"82"[@Zk  //GGTG b_ G]]} (0@#/k///#TG~^^~ (GGGG ;G0b^~ (1"0#Y6/GGTG0""0bR6]GG""0bTGJ6]/H@GG(""0btG@/?6]//GGTG ""0b66]"GTGG0b  1"-6]G]]} (0#k/GGTG@""0b6]"GGTG0b1"6]"GTGG0b8DXD1"/  6]"GGTG0b1"6]"GGTG0b1"5]GGTG""0b5] "GTGG0b`1"5]/GGTGp""0b5]Gb# $^_GGTG`""0b/5]GG]G0b}P""TG] (0#5//#TG~^^GG H;Gb^ #1"5///1GTGb 8""//5]G]] #k/GGb#TG]] #(///#GG~^GtG^~ GGG `h;Gb1"5]D// ,h"GGtGbH1"xD5r5](G1(#//@?BbGFGtGb h"x1"_5](G/(#/BtGGbF h"GP1"/K5](G/ (#/Gb#q@/pG]]} 0#k///`P#TG4G^~[^ ~(GGG>@\Gz[/@Zk`//GX""b#_ "/\#XTGPB B!@\#Q?@r`[@Zk`//GX""b#_ /XC`#G]0@@AA@XATCG]] }(0#/k///X0G /k///`011 BX0A!B !T0k//Tk//G#; ^~tGG^ ~1"(08޴@HP>XGGGGhG`G0b4]//4G B"tGd`G.G0b1"JxFG4](d`( d/ "@@G0DGtG0b G"x1"4](/(İ? d$/// "GtGG0bF/"GP1"r4](d/`( d///%GGGGG8b#8 D 6_dGb#`//_ d4dld///GGtGb8"^G? d$/Gb# _GGb#%_? d$x/<b#<$#  G@G//ddGGEGG8b#_<Gb#4G / @ddb#G<$I_H@ G GC%  ///GGb#0A@ A<峵 @/@% A?//Gb#4FG` @@ G/G//G 0 Ab#@A%_@ A/G b#D@$Y_@dd =$d$! b#/ G_<G]] }(08ݤ@HP=X`#/k///B_B# 3F~^G^~ (0Gc GGGTTGG{#1G//g_ S/G 4//lG/GGtGpb"^G/ ;/Gb#=_ GTGGb#GGA_ -///hdGG$DGb/@T$RW^ //GTGtG$ba^G GGDGGb#_///dc 8`D`DGGG]]} (0@#k/#~^^~ GG2GTG?F-`.JB"7BFBF/////1"K8 CCC7 @AG4DD/q/GqK4G Gp""tGb^GG B"GGb#_ G]]} 0#k/4G//;T0GtG_FG1 #^~^ ~(GGG_GCG8b^G GB"GG b#_///? 8DGG4Gb/^G]G] }(0#k/// k// k//;l0_F/3 #~^^~ (0GGGG{#2_(G<Gb#l#@( 4DG/ GGb#_<G G]]} (0@#k// k// k//GGGG G//@@u@@:DpGu@@0D F/ /// T@G/@(//_/GG/k///#G^~^ ~(Gk GG1,G1H/ ///p/"FpK P/"PK p/"pK 0."0J 0,"0H ,"H0"q0B0B4G[@Zk ""b#_G9GG/c .JP"BB7@BrFTF_'JBB"7BGFc C/CK:"DCAC7 BqF4F?//@.v"HPJF>B "/wJc Y"KB 7G"?c/cK".Q"J">G]] }(0#/k///#G^~G~"^ ~(08޴@HPGGGGG4@Ҡ//0 f`$G F[2G@ZkG AGG%GG/@ZkG/ GTGb##EGGW_TGGDf/`[/@Zk //G]] }(08ݤ@HP`#/k///8D GXDGGb#GG4G /// GtGb#EG4G _$GD/ ///GGFf/`[%Hh@Zk? D GDGb#/%// <C@<cG]GDTG/@f`[@ZkG<Y0W `/`K/ ///`/ D`K `/ `K@ . J @. @J@ . J @. @J_D/$ ///`/D`K@ D/` . J/  D/`@.@J/  D/`@.@J/  D/D// G/k///Gk/G/k///G #~^^~ (GGGG///GGb# @ G]]} (0#k/#~^^~ (0޴8@H>PGGG#1<pW"@GG"`x\<@xGCk/,GGH/0@C{#;,;H$@ !@7@FD?@&.&JC%C///G$GTGb#^//S$GG#  p `<cs[D$~d@Zk/ GGb#DGG_ v/5@G /o_m/G$b#_GGGb#_ӥ@@GGDGGTG b#/^Ӡ@%C ("G4Ga[/@Zk( G4Gd[/@Zk///?G_<GGGsG0b)_G3G_0àG4Dc//GGTG bK_G//<# ðG0b#%_0GGb#///_G_GG4G󠨃b#^GG"4Gb#^GG GGGGb#y_ ///H.GHJHJ$ ///DB"AB7BFF@.WJ1">/.JPJX#CC7@CzGXG>1"///1"1,1H/_<5.JAGF///Y/9#1C GYKG/y.9#yJ1C2D .9#J1CF.9#J1CF5///<pDGGTG b_G G<#AGGGb#/@!AF/ //_(G4Gd[@Zk<cðm/G$TG(bo_Ge/<à G4E/Ơ'AGTG(b@D G$//W_<àG/<GBG0b#O_>//0GGb#7_5/2//GGTG bS_) G&//"//GGTG bC_ G//G$TG b7_G /@¤xB9""G8"f R"82" [@Zk GG]]} (0ݤ8@H=P`#k//G #~^^~ (GGGG///GGxb#_ G]]} (0#k/#TG~^^~ (0GGGGGGb#2/^G@ G0.0J $e/`6//$GTGb#4//^G((%$X D  /GGGtG b_8D/ /// G//B""G"p R"82"[@Zk4GG]]} (0@#k///<P#^~^ ~(08޴@HPGGGGG ///$GGG[ R*@/{GTGgC؃b#(^// 0.0J $h/`$GTG4؃b#/o^///<c0@@ @GG4GtGs % 0bf]<Gb#G($=_<X"G4GaD[G/@Zk<cS#A@01BL///2GG/ ///RGGb#FBG_8D//<C0@@ @GG4GtG'  %0bf]<Gb#G($ =_<X"G4GaDG[@Zk<c ]C/@@#!1 @#!GG]] }(08ݤ@HP`#k//#~^^~ (0޴8@GGGGGG G//GGpb#8D //_ ? D/ 4G/G/8F<# @C//@GGb#C @  D GG]]} (0ݤ8@P#k/GGGb#GG_ ///B?B@F/?19 #~^^~ (0GGG /GG8D `Fb#Ga@8D 4G/u@@F/!x D/ $ /?G//G]]} (0@#k///Gk//Gk//4G//P#0P0^~8^@~HPX޴`hp>x^~޵GGG^G{# 001 EXER J>!F" G <$_G %ѠxD'Gb# @G<Gb#$_#G/>PA4GJAw[@Zk CG""Pb#`޼_ӈ/ B"G4GDZkaG[@Zk C G""Pb#˼_u// B G/DZk<#Gb#!_ G$///<GGb#WQ'GN  u@@tG2FG G""/^G1R8DGGtG%$*b#/ *A/ ^G!$*GtGX""b#A^GG*GtGb#^GGX""GtGb#/^GG/%`///'.1`B@b#P D PA0G1_ӎD///GG/ 'G@b#/@! !/_0AA A? AQAQ/@R/}NANQ*Gb#G*FE_ G< G(] G= ݠGGb#L_< '+@!I@Gb#!@C Gb#o<# !!_ GGGb#_<<I@=@#GG/[ !9G0Cb#9#1 _ G C?4GGGb#_@@A@#01B GG////!G 0Ab#.@A!_@ 01 @G AG(b#@#ҿ_@/ơ 0A A `A)! / GGJGGb#_< $/ GGJGGb#_< / ݰ<#Gb# //O_(= }!G<tGGGGb#/`_ ݠ$]C@DC/栩C@/ǰ /E/ gCeA `0D/ ˠC@fSF/_ =G0 Bb#_4Gl[/@Zkl 4G[@Zk GTGGb#GG_ G0]8]@}HPXݤ`hp=x]}ݥ#k/#8[GG~^^~ ( R"0GGGGG G{#w_ /<# @/GGb#@" D GG]]} (0@#k///GGGb#GGQ_ ///#TG~^^~ (0޴8G@GG1GGGGGxb# /^ GGDeGb#+_G/ GGb#.J/$eG/`EG/_G/GGTGxb#^)G4GE dGb#_G$%@GtGGGb#/ D@F/E//_G/ @GtGb#GG_Gx///(4GrXD&`4D#////GGGtG b_8D/  /4G//S`Q/`GML`J/8D:`4D(////GGGtG bZ_8DG  /Gb#/`///# _G"` `4G`G0GGhb#_G/` /HB$"G¤e R"82"[@Zk"GG]]} (0ݤ8@P#/k///?@0&? G"9 71#~^_'@BZ#GG//"B/բ BF G"B BFGG0@B @Bs"/ @?DA1@ !4G{#<0G] # //G] #k///<0G#G~^^~9 GG{# _ GTGpb#9GY`_ 09G* G///Q1"/+@0`@ a@///#0`@ a@/Q//@0`@ a@/ `0`@ a@`Q/@0`@ a@/G//G]]} 0#k/ Pp@tGpb#9GGUy__ C@//`#GGG ^~(^0~8@H޴PX`>h^p~x޵GGGGGG GP{#_ <G C¦0@B C0BB\BCk/////uCCCC:GxG8G///GGGb#+_ӫ//0àGGb##_G//GGDGGPb#X_à Gb#_Ӓ/GGGGGPb#8D //C_Gb#_~/4Gb#D/'_t,#r /9Gb#!D 'TG^///,àGTGb#&x"D/ '/^,àƠ@@&D/P GPb#/ _,#?IGGGb#_///# Gb#; _90GGb#G/ @/6_,à/(///GTGb#D'^,àGTGb#&x"D '/^,àƠ@@&D/ GPb#/_,à//à0D 3@cGG b#̼_# Gb# 9_<GTG`b<$$ /_GGGGGPb# _4 b#G G@<# =G_<@㳴@ G4@"pcB]F}xGGtGb"^ GpE//<CGGGXbG]A8E/2$̢,V^/GG,GtGb^ G$GGL///GAG4Gxb//c]G@""GGtGb^ G GGMPb#GG9_/@GGGGtGbj^ 8D G<CGG@B"GG!Pb#_Gb#_/!GG4Gb^pCJEp<= =@@#GGb#!<#a_@cEA`+! G GkGGb# 0A iA Ak<cK_/@c+ A?// Gb#4FG|_@# G GI@///)G 0`Ab# -A A),_@# `A/!G! D@#b#t_ð@㳅Es<#G4Gb#I//_GGd$GTG b _< G4GGGPb#<G_<G4GGPb#GG_@#! G G/; i`/)GGb# 0A *A @A)<#f_@#) A? Gb#4FG_@c G G+ ///kG 0@Ab# mA A+ļ_@c @A/!G! D@#b# _ð@㳅E <Gb#4G2_GGGb#_өC4ð<Gb#'_// Gb#G_v/ s//0=Gb# Akq_iC0cGpb#G 4@E_GG$TG b_<#Gb# /s_0àGGb#C<G @KQ_I@#GGb# _#/G4G b#_G@GGb#/S_0Gb#GC @/,2_*/GGb#̹_@#G<Cb#ǹ_<CGG0àGb# @_0$GTG bB_GG 0#Gb# ,A _/G4GGb#W_<# GGpb# /_GGb#G_/@C G Gʠ///JG 0`Apb# IA A*t_GGGb#_@C eA4Dð@G G GN0G ///HGTG bJBR@<C$_//+<CGb#G@]_8D<㳅4D+/@cGG/%`+ /kGGb#0@ nAAKG_@c8D4D+ @?G@#b# _@ ///<#Gb#/ ///_< 0 A @AȠ &A9G$TG b_Gb#<#_<-<CGb#G@//_ӥ5@<!@CGG/@j`/JGGb#0A FA@J_@C8D4Dj A/@/G@#b#_@,Gpb#͠1@ 8 F/@mKA+Ϻ_</Gb#/_ G͠ ALA/mG 0@Apb# lA A+_GGGb#Ǹ_͡ NA/@8D/CGb#G_@G//GG Gb#_0$0 GGGG@""tGb#R I "EK  G/G///`u`A`AD ^) 8`EGGtG%`$.b#/ .I/^ G%$GGtG""b#D^GG.GtGb#^G G""GGtGb#/^ GGGG@NPb#Gz_ӹ/GGpb#@G// 4Dc@///GGpb#8_GGGpb#@G)G4Gb#_ G<CGb#G@9_ @á G G/N@/ΡGGb# 0 AA `AN'_@áN *A_G@#b#_@/G<#b#_<ðG /GGb#冺_<@G//@G\b#_Y0#GGb# (AS Y_QG$TG b_GJ/GGTGhb_GB/GG8b#_G;//G$pb#L@G3//G G/GGTG0b#8EuAA E//(+M^Gk /GGPb#GG GϿ_Ӑ"GE!4G@ i[@Zk/G4G@"b#R^GGP""b#/k_//<GGb#Gh_!GGGGDPb#G_//<G4Gl[@Zk/ G G/*GGTG0b#8 Eu A A E// (*^ GJ_ /GGPb#GG Gs_ӐG!4G`l[@Zk/G`4G@"b#^ GGP""b#/_Ӛ//<àGGhb#f_<áGG !GGGPb# DE_G4G`g[@Zk{// G G/̠GGTG0b#8Du@@ FE//(,^ G /'GGPb#GG I_ӐbG!4GRk[@ZkN/G4G@"b#^ GGP""b#/_>//GG4G؀b#^<AGGhb#H_<#GG`!4GGGGPb#I`/߾_//GD鰐G4Gd[/@Zk//BB2("G¥j R"82"[@Zk/ àG&1@ ðG ](]0}8@HݤPX`=h]p}xݥ#k/<Pp#8;Y("^~G^ ~(08޴@0[HP>X^`~hpx޵GGGG@@ apB[ R"82"/@ZkG<#b#߸_<8b#@# G8FqsG<c&_@GGG@G G0B8b4Dc//GGTG bB@<_<# Gk~("pBG @ R"82" [ /@ZkG<#b#_<//?GG@#pb# <C_<W/<#@@0@ <O/@G GI G//E 0AGpb#GMB AR_Ӡ A: G G/0///!GGpb# 0A-@ AA_@# A//<#Gb#/ Z_<@ GG/ /G 0Ab# AA-H_@ A/G@#8b#_@0A A Ayݡñ G8b#G_@ðG%///=@G@//8DGG8b#eGk<cn_/GG 8b#g_@#G8b# ///__@("G<8"pB0B @i R" 82"[@ZkG<#b#_<G'GGTG b_<cG8e("pB0¥G `@e R"82"[@ZkG<#b#۷_<G8b#@# 8E1)<##_@GG]] }(08ݤ@HP=X]`}hpxݥ#k///;#4G^~^ GGqG[@Zkp"G`b#81"/_G/GG//"! /}8b0`s`U@,048 {(@D$`PG]] 0#k///n@0#~^^~ (0GGG GX{#_DGG  /G0@b#@@ \_D @/?GD#Xb#_PG/HG////P#G0@Xb#%@@!_H @@"aP4G[@Zk@84Ge[/@Zk`G/ _ GG4GXb/˧^G_Ge`4G[@ZkeG4G[@ZkG]]} (0@#/k///0pPk/// k/ /@/`Gk///B?B`# SFP^~GX^`~Ghpx޴G@GGGGh{#0 TGGD(H/g_ //!4EGP]X]`}hpxݤ#k//GG8b#d_H=Gb#<L 1_<#LG"b# //G!/_ӀF'@ GG!  /G0@b#@A7_ӆDG0b#G_@ @? "DGtGGGGhb#_ <#G0b# //k_<b#G_$à G8D/! 4G,GTG G0b C"]]Ӡ5@D (cgDG~# [TGG~^GGG8{4GG#>>G H^GPG(08@^G] #k//#TG4G^~G^ ~(08޴@GGG#GG]7 Р0/3FG0b&//^ӠTG #àca!"#f@a`[/@Zk1//GCTGGGGG (޴G4G08~pb@HPU^GGGTGGGGH G4G(0pb8@P=^G]] }(08ݤ@P#k/// k/ G /00@!@8!D8 D@[F;D0!B8!F8 F0@@rG2F/ 0!@8!D8 D0@@[F;D/k///G G ///`5`C5aCaCFF/0 @1D/@ 1@/k//#CGC^~4G0[^ GG >@G Gz[@Zkb#x" _GGG//! B ?= }G  `G]] 0#k///5G"D0$0?B- #~^^GG (BFrF B3C @@ B4FG//GTGP{#/&_G"/$"("" b$ "(bG]] #k/#C^~ ^(~0GG >^~G/= ]G4G}( G&@G$`pG[@ZkGpb#P"_G/GG//"! ] GݢGb##C $ò(_GG] ](}0@#k//#G~^^~ (0G8GGG G2///CGpG4G@Ft/&@dG`F"`[@Zk0Gb#P"G_G/GG//"! GGpb#%CE c e$ (>_GG]]} (0@#/k///#GC^~4G^ ~(0GGG>t.G//*@pGG`F%`[/@ZkPG0b#P"//_G/GG//"! G"$Gb#CD c d$(IJ_GG]] }(0@#k/#G~^^~ (0G7GGG G1///CGG4G@Ft/%@dG`F!`[@ZkpGPb#P"_G/GG//"! G"e% eGb#$ (_GG]]} (0@#k/#CGC^~4G[^ ~(GGG >)@G//% z[/@ZkpGPb#P"//k_G/GG//"! ] ݢG"#Gb# (C$òc_GG]] }(0#k///@;#CG^~4G^ GGa G[@Zkb#P"2_GGG//! B ?=G" `$(` G]] 0#k/#CG^~^ ~(0GGGq@// Gl/#G @8 D@`a// @ 0"8B2"GqBhR"82"[@ZkGP/"G4Ga[@ZkG`b#P"/_G@/>GG//"! ]G"$ Dâ8FFF/$#$$(c(d0BN"G8`hR"X2"[@ZkG///#$$ c(d ///cCcCr@c($dGb#_GG]] }(0@#k/;#4G^~^ ~(GGGq[@ZkG`b# "{_G0/b]G4Gs%@[//@Zk`b# "e_ G4G`[@ZkG/G///B  _#TG#0 @A0@cGG]] }(0#k// #G~^^~ (GGGG9P?B///4GF/! BqGG 0D2F@G/ FG 0D2FG/ 0 D2FG $0$D2FG (($B0 @ @Z#@GG4G؝b#2_9//#4Gp G[/@Zkb#8"_'G///!  ?TGD B!@TG#Q?@r[@Zkb#8"/_ //#0 @A0@#G]]} (0#k/#G~^^~ (0޴8GG GGQGG/@///dG0@b#fB@3X_ @GG]]} (0ݤ8@#k//WG//S P"@"F0`B rB/G/0`B rB/ D/ 0`B rB/ tqG/`0`B rB/ rB-21@B rBP @B% @ `BYwB;D9# /9`B9#٢9 `B9ٲ9 rB ///0`B9# rBRWBk///3P 2B21@B/` 2BP7@B( B 7BV4BG"//// B"6v 7Bv6v6v6 2B ///0 B" 2B?RTBk///4#~^^~ (0GGGGG0 //C4Gb#0@EC@G1_ @/p"a4G[@ZkpG4Gd[@ZkG]]} (0@#k//[#4G^~^ ~(GGGr >[/@ZkPG0b# "//_G/GG//"!  ]G#Pb#@/G_// =b#_Gb#_GG]] }(0#/k/// ;#4G~^^~ (0޴8@GGqGG[@ZkGb# "__G-/GG//"! GG`b#$`GG_///#G/ ///0@b#B@_GG(b#_ @GG]]} (0ݤ8@P#k/ ;#4G^~^ GGqG[@Zkb# "//_G/GG//! B ?=G  G]] 0#k/#4G^G~^ ~(08޴@HP>XGGGG b#CP_GGGGTGb#_//GGTGb# , H%D G_Ӿ "G4G4GxbG^@"0@4Ga[@ZkG`b#x"_Ө//GG ,G H[ /8%DGx1H/%1@M.WJF9/%Dp1H q/0@[qK1"pGq?0//+D"%@/ /K5BBBuJ0GF/Q.RQJUFQ>1"/.vqJTJ1"F>8/.PJ8KrK1"F>.{1HWJF1">.J C/GK?//.`#J/c. B4GPJ>rCG:,:H [/@ZkGGGTGb#Q_.GGTG""(bλ^ #4GðG4GGb#%=DEHE%t_ GGTG0""(b^5G4Gð.b#JF/ G//B_GG`b# @/GG4Gb#cO_ G4GpG[@ZkGGGTGb#/_//G`b#@///GGTG""(bz^GGð4Gb#N_GG 4Ge[@ZkeG4G[@ZkGGGTGb#_Ӹ//"/? , H$@!@!"7 BQF3F?'D e[G4G@ZkeG4G[/@ZkeG4G[@ZkGGGTGb#/_ӌ// "3##/c.JBB"7BFFGG4Gb/?]G// G4Ge[@ZkeG4G[/@ZkeG4G[@ZkGGGTGb#/w_T//GG4GXbx]GG  Gb4G/c~]h G4G[@ZkhG4G[/@ZkhG4G[@ZkGGGTGb#/O_,//G GG hb#tG/g,_G4Gh[@ZkhG4G[/@Zk //BGl?"(b#GXR"=_ G4Ge[@ZkeG4G[@ZkG]] }(08ݤ@HP=X`#k/# [G~^^~ (GGGG 0R"m?" , H %D# `/`K8Db#/_//GG4Gb#/-_GGGTGb#_G4G`[@ZkGG4GTG`b#B_ , H%D //G @"C.JB,///=BV#"/$ D@@DC#1,"1Ha"7aBa"D@@dB #Y/YK""7B" `D@@B5,5HB?GGK8F4G@b#F///_ @G4G?@FG'A8@F/#@//_G//G@b#/+._GG4G b#%_GGGTGb#/'_$//GGGTGb#_GG4G@b#._GG4G b#%_GGGTGb#/ _//GGtGTG b#J_,HG%D/oG]]} (0#k///#4G^G~^ ~(GG> ^b#R1_= }GCG4GGtGL P T`""b#hB)_GG""Bb#tG/)_GG8""tGb#HB/{)_GG""Bb#tG/s)_GG""Bb#tG/k)_GG""Bb#tG/c)_GGp""Bb#tG/[)_GGx""Bb#tG/S)_G]G] }(0#k///#G^G~^ ~(08޴@GGGGGPb#%_=@?@D/G /GGTGb#F1_ @B4GG$G4Gr [@Zkb#"_ӞTG&///#/Fr.rJdBaB"7BFFGeF `G4Gxb#*@_Gb#Gn_j/GG4Gb#L_GGGGTGb#s_l// , HDK///Gb#Y_]&//, 8FF !/ ! N! !/I GG4G b#_GG4G b#/,_GG4G b#_G///"Ʋ/?&!.!J$B!Bq"7`BFuFGG4Gb#/oL_GGb# _"/? , H$@!@!"7 BQF3F?G GGTGb#_BGn?"Gb# R"5@@ D/_//GG4G b#_GGG4G b#_G ///08 D 0Q8@F @1c13B8 F@//0@G4G b#,_GG4G b#f_G/BGo?"Gb#R"_fGG4G b#`Gg,_GG4GЦb#0_GG]] }(08ݤ@P#k///p#G4GTG~^^~ (0޴8G@H>P^X~`hp޵xGG0 DG РGGGG(b/$//G _] (0 Gb///GEGGTG3 JG(bx@F@^] G`G/GGGTG8bW]GGGTGHbY]Ӡ= AGG11 AG_G GFA=AtF11AG`G//_ G J_/FA@GGETGXb/;ʢuBBF( /G//U]GGoGB=A4Ghbc D/;T]GGcá=AGGGETG(bG ^]GG11AG_ GG]/GG4GTG(bG^]GGE//G-QAWA \ACk/lB"G [hR"82"@Zk//lB"G [hR"X2"@Zk //GG4GTG(bZ^]G/@GGDGTG8b Eb//2W]/GGGTGHbGX]Ӯ@@Gb#DG EY/@ G5/G///G]]} (0ݤ8@H=P]X}`hpݥx#k/( GGTGXbG/CU]GæFA=AD/)(AB0 A"//GGTGXb/U]G//GGTG8bV]GGTGHbX]Ӻ//lB "G [hR"X2"@ZkG/lB/"G [hR"X2"@ZkG/#G~^^~ (0޴8@HG0GGGGG8 D D D DS@///G`BG/ //E~@/ e4GgC b_GG//%4G b'@_GGGTGb/{V]//// G G 0G QG/@G/0@ @@F/b#>_C/GGTGbj]];/GG/5Š2G%b&@'(11 B"B@\]]GGGTGb/V]E/0@@ @GG]]} (0ݤ8@HP#k//#TG~^^~ GGG GGb#^~ 0#}/ GGTGb#P Gs_G]]} 0#/k///Gb#_GGpb#G]]GTG} 0#/#TG~^^~ GGG GG0b#^~ 0#E/ GGTG0b#T G;_G]]} 0#/k///Gb#]_GGb#G]]GTG} 0#/#8 FTG^~G^ ~(08޴@HPGGG Gb# _Ӏ//GG4Gb#r@5@ Dm/_ Gb#8 D h_GG4Gb#)_Gb#F_GG G4Gb#)_GGGTGb#_RĠGG/7&5 /GBP@r`F`F `/ ТXF/// 2b#_GGb#/ b_0@A @GG4Gb#[)_Gb#/_GGGTGb#_GG4Gb#K)_Gb#/__GGGTGb#I_GGtGTGb#_G]] }(08ݤ@HP`#k//#8 FTG^~G^ ~(08޴@HPGGG Gb#g_x//GG4GЛb#j@5@ De/_ Gb#8 D /_GG4GКb#(_GG0b#_ĠGG/;9/&(BQG@r`F`F///`$ТXF(2R@?" 2b#_GGb#/ _0@A @GG4GКb#(_Gb#/_GGGTGb#_GG4GКb#(_Gb#/_GGGTGb#_GGtGTGb# _G]] }(08ݤ@HP`#k//#8 FTG^~ ^(~08@޴HGPX>`^hGGGb# G _GG4G0b#@5@ D/W_ G0b#8 D /'_GG4G0b#](_GGb#GB"_%C/ ///Eb#HB` c/`FؠF}/o$T//@ 4(t_Gz/FG/ _GGGb#G_Gk//4B!1 @!@c\<@DCk//G_GGGb#G_GS//G"/4G///a!0@BaB8aF8`FVBFuF !C8G8G0@BZByGG/ !@8D8D0@BPBFDG0B !B8FB8FSGF?GTb#11B0BGS_G/jB"G [hR"82"@Zk //T tb#GG>_GGG0@Xb#_A @c0b#_GGGTGpb#_GG4G0b#'_GGtGTGb# _G] ](}08@ݤHPX=`]hp#/k///#8 FTG^~G ^(~08@޴HPX>`^h~pGGG G0b#/ _//GG4GPb#@5@ D/K_ GPb#8 D /_GG4GPb#Q'_GGb#GB"_%C/ ///Eb#HB` c/`s//`FؠFK>t$T@ 4(tG_Gv/+B!1 @!@o0\<@Ck//( GGb#GG/_G^/G4G(b/ǵ^GGb#GG_GP///G_GGGb#Gx_GC//j0Bb"G [hR"82"@Zk6//t 1@@. 0\@Ck/( GGb#GG/S_G/G4G(b/^GGb#GGE_G///G_GGGb#G8_G//GG0@xb#_eA @gPb#_GGGTGb#_GG4GPb#&_GGtGTG0b# _G] ](}08@ݤHPX=`]h}p#k///#8 FTG^~^ ~(08޴@GHP>X^`GGG`b# G _~GG4Gb#GG/o8D/kF_C #Gb#_$GH C/4GdG`b#hB_G GGGTGb#/C_GG4Gb#j_GG4Gb#/E_$ GGb#(@K_Gb#G_GG@4Gb#/&_CGG4Gb# IE/ _GG4Gb# &_ C0@A @G4Gb#&_ # Gb#DH_GGGTGb#_//GGtGTG`b#: _G]] }(08ݤ@HP=X]`p#/k///#~^^~ (0޴8GGGG ۤ(/?` //6G$0 @$/ ///c2`/ //$///c11 B$/#`#?cC5@Cu@C5ACACpGD@C@GFD/_fpB[hR"82" "G@ZkcG/G//G//GG]]} (0ݤ8@#k/B?BD/w//o#~^^~ (0޴8@H>P^XGK@GGGGG;_///5B5BB2F0FG/G//>_/GGb#d_GG GC4DG4GC&(b8 D (/^ Gi0Bh " @G G[hR"X2"@Zk@GGb# @*GA+ %@G/;_Ӿ// ///G]]} (0ݤ8@H=P]X`#k// k// k///ðGðGà#2Q BTG^~W@B^~޴G> ^(~08@޵HPGGHGCGb#LPTX` _bH@G4G#b#0/ !x D/ ///_CPC[/ _`]`Xc //GHtGTGb# _;/Hy@G4G#b#/xD////w_CLC[/ _h]h=T=c //GHtGTGb# _/HG4Gb#D///S_H=G4G\b#!/ ! @5 @FH /C_pG@b#_p=Pݠb#tC/18 F/ _Gp4Gxb#/?$_xpp(" ="8]"_B@}""0"BBB XBFTݢ= C!21B ?B=EEWE@]>= XE=///==9(C9?CG;D D/y`F`F`( Y @@ Z(] Z/@@/@]=pGFy`F`F //`٢ ݲ 9 8 /Y ] 9/ 8/8=("@="b#G^_ }8ݢ7//4`C5@B5ABABFBF@/8 8=_G"`/G/// GԢGG G4Gb8G(/Z^` }8\=q/ ]8"ݥ(@]]0`"/"//"c/$1@CcKC/%G4Gb8 D (/~2^ӡ @G 0@y //(%GTG8b$BG/^j(4G @G 0@/(@=xGG4Gb&1 A G^G0///=0@4GGbA AF* -8 F ( //^ӡ @G/@G! ( 2@tG(b@.AB^/+GGPb#O_///' GG/(@=4G;///G//(GGG(btGA@ï^(4G0ݰ@=$G //G//G//G @=0]GPb#@ @DG/4G//_Gi/G///L=8F(b#?@=]0}' ]("@="__Ӹ}@}"%(X]="b#`+1`A}R_]}(@=0@(4G0@/(]@}0GGHELE0b#2_Gb#t_=0}\(=@}d,H@eA@ //0A A A~tb#_GHGTG b#_Gp4Gb#/"_G\4Gb#~"_LG4Gb#/w"_PG4Gb#q"_GHtGTGb#_/GHtGTGb#_G]]}ݤ= ](}08@ݥHP`#k///#~^^~ (0޴8@H>P^X~`GGG//"/_#Q.QJDBAB"7BFFxKFGGGTGXb#q_@ 3##/c.JBB"7BFFC@RG@F@G4Gxb#_ #GGG Gb#rE/o@à_%GS C/ð4G 0AeGXb#iBs_G GGGTGb#_ %G4GGضb#D H`f_GG4Gxb#_GGGGTGHb#+e_ %G4Ghb#)@!_GGb#_GG4Gxb#!_GG4Gxb# E_GG4Gxb#/!_ C AG `A/GG4Gxb#!_ C Gxb#DH_GGGTGb#/_//GG4Gضb#DHEf_GG4Gxb#/g_GG4Gxb#u!_GGGTGb#w_#' c,GGGTGXb#H D@_/ )"#//#,H @@7@ DDGGtGTGXb#_G]]} (0ݤ8@H=P]X}`p#kGpGTGG({0`BpGG/ߧ///GGTGGG({է/#GGG~^GGG#660 @6GTG^ (GTG({H~PGGX>G08@/^G] #k//RFGGG# #P{#///#GGG~^GGG#V660@CVTG^ ~ ]0}G(GH^X~8]H}P(G@{0`^GGp~G8@h^G] #k//#GGG~^GGG#06,V6 0 @06GTG({R"^ (TGGH~PGGX4G>08@~^G] #k/#4G~^GpG[@Zk/G]G #k/GG//"! G] #k//#~^^~ GGG{#@G4G`G]]} 0#k///k///;4Gqk//k///0;4Gqk//k///#~^~ G`{///c4G[@ZkG//G]} 0#/k////# ;4G~^^~ GGGa[@Zk b#////_ "$4Ga[/@Zk G4G`G]]} 0#k///k///'#P[4G~^^~ GGGr[@Zk$0b#PD(_PG4G`G]]} 0#/k///k///#~^~ G{///c4G[@ZkG//G]} 0#/k///##p[4G~^^~ GGGr[@ZkTG4Gby^pG4G`G]]} 0#k/k////#4G~^^~ GGG G b#/#Q@$G4G(b//O^"4Ga[/@ZkG4G`G]]} 0#k///k///]#;4G~^^~ (0GGGa[//@ZkD/(b#_Gb#8DP//^_T/ D/0#"D/ b#//_\傤/ ///d4G[@ZkG//` /d4G[@ZkG//dG4G[@ZkG]]} (0@#k/#~^^~ GG///Hpb#_GG]]} 0#/k///#P;TG~^^~ (0޴8GGG,G(b/C^ GTG(bH"/;^$GTG(b@"/3^(GTG(bX"/+^GTG(b"/#^8GTG(b"/^0GTG(b`"/^@////GĠ 4G8bQ<]eG4G[/@ZkG//4Gd[/@ZkG4G8bDà/6<]G<4GxbYy^dG4G[/@ZkG]]} (0ݤ8@#k/#TG^~G^ ~(0GGGGG;"(bQ]0GGH""(bTGPD/G]GGC""tG(b/?]]GGX""(btG/@///3]0GG""(bTG////']0GG""(bTGD]0GG@""(bTGD]0GGp""(bTGD/ ]0GG""(btGDC//] CGG""(btG/@]GGTG""(b/](8D/,#8 D/- GG""TG(b](CGG""(btG8@F /],C@?$G""G(bTG AB ]G8@FG""tG(b/]//GGTG""(b]8CGG""(btG@]<CGG0""(btG@]/GGTG""(b]@C "GtGG(b@B1"]DCGG0""(btG@]GGTG""(b]LCGG""(btG @G]] }(0@#{///G]] }(0@#/k///' #4G^~G^ ~(GGb-W]GG8""GtGhb/S]ӘG4G`G]] }(0#k///k///GG ""hb]TG] }(0#/3///#TG~^^~ (GGGGGG;"b^~ (0#/G]]} (0#/k///GGTGX""b]CGGP""btG@]/GGTG""b]C"!1@B!@Q悧\<@CC/k///GGTG ""b]G/GGTG""b]?/GGTG@""b]7/GGTG""b]//GGTG(""b]'/GGTG""b]/GGTG8""b]/GGTG""b]/GGTG""b]/GGtGx""b]8CGGh""btG@]4@> 悧\@BCk/GGTG""b]1/GGTGx""bz])/GGTG`""br]!/GGTG""bj]/GGTG ""bb]/GGTG""bZ] /GGTG""bR]//GGTGX""bJ](8D,#8 D/- GG""TGb=](CGG""btG8@F /3],C@?$G""GbTG AB )]G8@FG""tGb/]//GGTGX""b]#G b# _cGG""TGb ]/ `///GGCp""tGb]cGG]Gb}X""] (TG0#//#TG~^^~ (GGGG G~@;"b^ (0#//GGTG0""b]DGG""btG@]/GGTG ""b]DGG`""btG@]/"GGTGbPC1"]GGTG""b]$Gb# 6_GGtGX"b^G(GG]P"tGb]} (0#/B?B@F/+,//##~^^~ (GGGGGGTGb^$$ GG]]} (0#/k///Gk//Gk//G//#TG^G~ ^(~0GGGG(bY]]GG/GG_"HbtGP/v^("G4Ga[/@ZkG] ](}0@#k///?BBtGDC#^G~^ ~(08GGGGG~(b^=$ 0PF!"G1"0TGb^//G0GTGb^}G GG b0`@_/0`P`D/`GG]] }(08@#k/Gk//#GtG~^^~ (0޴8G6 GGGGGhbƯ^0 !D) GGGTGb#/L@Gp"G0TGXb1"^G0GTGXb^// GGtG b_/0`aD/`GGG]]} (0ݤ8@#k///?BBtGD?#~^G^~ (0GGGGG 8bv^//<  @"G01"TG(be^G0GTG(b^^// GGtG@b_/<`//`GG]]} (0@#k/Gk//?BBtGD;#~^G^~ (0GGGGG$xb.^$ P D "G0TG1"hb^/G0GTGhb^ GGtG b_$`P`D`GG]]} (0@#k/Gk//?BBtGD;#~^G^~ (0GGGGG8b^0 !D "G0TG1"bڮ^/G0GTGbҮ^ GGtG b_0`aD`GG]]} (0@#k/Gk//0.0J/ ///$B !B"7@ DD/p/pK/?4Gk/Gk//B?B#^D_B~D^ ~(08޴@GGGGG~G^/ dGTG4G`Xb^ G4G  "qOG[@ZkG/`#0 @#GGTGGGG 1"Xb֟^G9GG//"! GGP_"tGbt^G=_"tGPbt^GGGG8D $c(bg^Ӏb//G0#_"GGb#1s"_dG4G[@ZkGGG]] }(08ݤ@P#k/B?BP#p^D_B~Dx^~޴GGGGGGGq(dGTG4G`b5^(G4G(H"qcG[@ZkG/`#0 @#GGTGGGG1"bV^GMGG//"! /GPG_"tGb/t^GG_"tGPbt^GGGG4G($cPb^G'(#" B"tGbG0 @(c]G(G]"GGGPb/ӭ^Өb//G0#_"GGb#1s";_dG4G[@ZkGGGp]x]}ݤ#/k///B?B#^D_B~D^ ~(08޴@GGGGG~G~/dGTG4G`(b//^G4G"q/lG[/@ZkG//`#0 @#GG0"TGGGG(b^GUGG//"! /GPG_"tGb/s^G]GGHGXb^Pb2T#G_"GGb#-s" 0#/_dG4G[@ZkG%GGtG]Hb/^Pb//G0#4GGGb#-s"_dG4G[@ZkG H`HfH4G(F,FPTGG]] }(08ݤ@P#k/;#4G~^^~ GGGGq[@Zk////`#0 @#HGGTGGGG" b6^GG]]} 0#k///(;#G4G~^^~ GGGGa[@Zk#GGTGGG "`bG0 @# ^G GG//B c /_4G  G]]} 0#k/#^~ ^(~08@޴HGGGGGp{#^C_GGV/ BGTGTG(bzZkGG GtGbS]G_" P tGbr^G<///GGTG="b+]G/G./GP_"tGbr^G]GtGPbr^GG GGtGbS]`bG G_"Gb#/s"_ ///GP_"tG ber^G] ](}08@ݤHP#k/#0["^~^ ~(0GGG{# >CC_G//4G^/GGTG ""xbz^//@$R/G//! .JP"BB7@BrFTF_BJ(///=B D" A/! Cc@c@AKB 7@  a.Cc@c@@! aJS"7ABS" .Cc@! Jc@BCB//! /Kx#CC7`C;F4F?b =_"x-s"GGb#8_4G//GG]] }(0@#k///# ["^~^ ~(GGC{#G >C$_G4GQG//! .JP"BB7@BrFUF_BJ(///=B D" @a/! Cc@c@aKB "7!B "`.Cc@c@#B! J"7B" /Cc@! Kc@BB//! A/AKz"DCAC7`BF`Fb @ =_"-s"Gb#_4G///GG]] }(0#/k///#^~ ^(~08GGG{# >CC^C_GG ""GTGb^//4G/GGTG ""b^//G /b_"b# =G1s"_G]G ](}08@#k//B_B#^D?B~D ^(~08@޴HPGGGG#G ///GG4GpbGO]GG P_"tGbGp^"GG4Ga[@ZkXŠGG4G0bTGDD/"*]GDøbGGTGGb#/s"/_ d/GG4GTG@bZ+]GGG="DGTGPb) /G)]]GGtG0b/ @ Q]Ӹb GG_"b#4GP/s"_"4Ga[@Zk"4Ga[/@Zk///)0" _"D.1" >ÀH $."> ///"8.! >_"GGGb# GG(_GG] ](}08@ݤHP`#k//#~^^~ (0޴8@H>PG`GG@GGGG!//$GTG0""pb /^$%GTG(pb^$%G ""pbTG/_ y^G[$%TG(pbq^/>S GG0""1$%TGpb e^G$%TG(pb]^GGGGG@bY@$%GTG ""pb /K^$%GTG(pbC^GGGGGXb@ G /&G"D &/8// &G/0//'G/(//%$EGH""pbTG@^///$%GTG(pb /^/// GGb#G@D(TG]]} 0ݤG(8@H=P`#/k///B?B_B#D~^D^~ (GGGGG/BG4Gz[@Zk/`#0 @#0GG`-"TGGGGb^GGGG]]} (0#/k///CB#?@^_B~D^ ~(0D8޴@GG#G{#G=/B_G/`#0 @#GGTGGG1"Gba^ӍG(B"b#G_CGG "Gx1"v///k$$G""bTG _^/// $$TGGb0S^? $$GTGb ""/G^/// $$TGGb0;^? $$GTGb ""//^/// $$TGGb0#^? $$GTGb  ""/^/// $$TGGb0 ^? $$GTGb ""/^/// $$TGGb0^? $$GTGb @""/^/// $$TGGb0۞^? $$GTGb ""/Ϟ^/// $$TGGb0Þ^? w$$GTGb 0""/^/// $$TGGb0^? _$$GTGb ""/^/// $$TGGb0^? G$$GTGb P""/^/// $$TGGb0{^? /$$GTGb ""/o^/// $$TGGb0c^? $$GTGb_ X""/W^///W$$TGGb0K^N? GG%HB"b#__% ]b#G ! "E B"?D/G//O_G G""TGb/+^4G% ĠGTG0""b#$F/@//^$&TGGb0^G=b#G(_ƠGG"b#P1"G?_G/GGG"81"b#2_Gb#_GG]] }(08ݤ@P#/k///B?B#(^D_B~D0^8~@HP޴X`GGGG#GGL///(cGG"G0B"0`Cb(c^\G]"Gb#G_GG5TG$Gpb#G 堐_(GG0b# _,% ""TG$Gb^Ә$'TGGb0/^GGb#G_GG"b#."G_GG(]0]8}@HPݤX`p#/k///#B?B~^D_BD^~ (0޴8@H>P^X~`GGGG#GG/G>/Gb#_GG6/GGXB" b#'GY_GG@B" b#S_G)8""GGTGb/^G!`""GTGb/'^4GGGTG""b^//TG/bGtGGG_"GPb#0s"_tG'GGxB" b#!_GGG ""TGb^GG(""TGb^//Gb#/{_$G(b#_G/H"//!///.J$@!"!@7 BSFFJB7#7 C GSFB UF/J/J!JK"DCACC7B0FFD/GHE1HAGTGhbW^G GG(""TGb/^GQ ""GTGb/^"GGGbTG01"^GGTGh""bG^GPG_"tGhbIl^G ' //E! !E/ !// AE/ @! aE`!/?/// Gb#_ ' G G /bG '_"GGPb#P0s"__iG4G[@Zk - IGj/iG4G[@ZkG(b#/k_G*/ 4GG GTG@""b¤$( +^$hGTG&b #^GGb#G9_GG"Gb#G(0"P_GG]]} (0ݤ8@H=P]X}`p#/k/// #B?B^~D^~޴>^GG_BDGGG#GGGGpGGB"Hb#_ G//CGB"G}"b#_8bG GG_"GGxb#x:s"_GT(#GtG"`bG4G0B"0 A(cY\=!GG]"Gb#_ GG|GPB"Hb#_8bG"G_"Gxb#0:s"_ӨB"GGHb#_8bgGG_""9s"^àC GGGB"Hb#_8b//GG_"GGxb#9s"_=/ GGGPB"Hb#_GGPB"Hb#_GGTG`""bc^/PFDGGGb#G*_ G/G/GGTG(""bJ^8bGG_"GGxb#p9s"P_GTG8 b 9^8bGG_"G9s"Gxb#?_@GG*<*4 F<*GG B"Hb#=_G+GG`""TGb^TG(*#/GGTGP""b^//(/GGTG@""b4G^8b GG_"GGxb#8s"_//TG(ʰGGB"Hb# _GGXB"Hb#_8b//GG_"GGxb#8s"_(ʠ8bGG_"Gxb#GXD@8s"/_j"GB"b#G _ 44Dh"" ŠGTGb/N$//^"$TGGb!/^GGGb#_ ƠGTG@""b1$&/# //^$"TGGb!^8킦GG G"G(b#7"_/GGGb#G@0 Ơ8킦GG(b#"GG7"_GG]]}ݤ=]#k// #B?B^~D^~޴>GG_BD#GGGG}`G/$G0B"hb#GQ_G7GG8B"}"b#_X킦GGGG"GHb#7"a_G///(XBtG "GbG0@7R"(c\  //`#0 @#X킦GGTGGGGp7"0b^G@GG0b4GFTG $$ /^$G4G$$pG [//@Zk G/`0AX킦GGTGGGGP7"0b^GkGG//!  /?GPG_"tGbi^GGGG D$$cbQ^XbG0#_"GGb#(7s"_hG4G[@ZkG?G G;ȰG($TF$ %$ $I""TGb@G ^$ɠ"TGGb!^GGG(b#_)GGGb#G_X킦 GGG"GHb#6"_G$G]]}ݤ=#/k/// #B?B^~D^~޴>^GG_BDGGG#GGB"(b#}/$GK_G9B"GG}"b#_bGGG_"GGXb#4s",_G///G]]}ݤ=]#k//(GtG "@bGPB"0@(c\G G ]"Gpb#K_G=/$ GC= // G/GG0B"(b#_GG0B"(b#_GGTG@""bט^/$P D $GGGpb#G_=GGGB"(b# _bGG_"GGXb#4s"_ӛGȰ$=(/0hhF0hCCF1,E/@/$ GTG""b& /^G!`"" TGb/^G"" TGb/^G// ""TGb^bGG_"GXb#H4s"_J_ 0TD0GGGB"Hb#_0H 4@E0HGGhB"Hb#G_0H BE0H$GG`B"(b#t_ <h"B"b#GGA_BGDh"b#8G04R"9_Ӫ@bGG *E@_"Xb#G 3s"/K_G8B"(b#GR_ Gb#GG_(GGXb#_,GGB"(b#B_L_EGGG"b#3"Y_@0(LH !E0( EGTGb@$*/  H""/^$*"TGGb! ^//GGGb#_J"3@)!o@$*G""bTG  ^$GTG)bߗ^K$ʠG ""bTG/  ՗^G$TG)b͗^/8$ʠG""bTG  ×^$GTG)b^'$ʠG""bTG/  //^$GTG)b^$ʠG8""bTG/ ^G$TG)b^/bGGEE_"GXb#X3s"_J_$Gk///GGG"Gb#03"_J/_$GW///@$ʠG""bTG! c^$*¤TGGb& Z^8ȠGGG"b#2"_0GGGGG`b@'$*GTG ""b#  ";^$ʠGTG)b3^8(GGG"b# 2"f_ /GGGGGbe@J" (¤Y@)!//$*GTG""b  / ^$*GTG)b^'$*G""bTG/  //^$*GTG)b^G8""-@$*TGb  ^G$*TG)bݖ^/dB- "G[XR"82"@ZkJ/_$G///GGG"Gb#03"_G$//#B?B^~_B^~޴>^~GDDGGG#GG8B"GH}g@XpL}pb#_G(#GP"tGGB"b0 @(c-\P]"GGG(H=`bGG _"GGb# (6s"//_GC/G8""0b#T_GGG4Gb#n;@GGGb#_/G//GGGdb#F_G/G#/H=G$( 0HAF0HGGB"pb#c_ G@B"pb#G]_G0( "0D0(//GGTG8""b2^0("0D0(yØ"// ///G/GKDB"AB7BFF?GKDC 7@ GFAC@F / .J! Ja"$@!@C7`BFzF3F/?GGE1GALGTGb^GGG(""TGb/^///0(?"V!H1D+0()GGTG""b^//0(?"v!H1D0(GGTG ""bҕ^//0(?"!H1D 0( `bGGTGGb#5s"_i//G4G[@Zk,HG EG""@$ TGb" /^$GTG)b^GGG0b#_JX GGTG(""\bB@$  ^$"TGGb!^ GGGtGbK @ GJ+$GTG""b /o^ӎ$"TGGb!_AD/c^ӂGG(GbHB"G0B"(c\G]"Gb#G<_ GGtG$IGG鰨B"pb#`_ TG"" Gb$' //7^$Ǡ"TGGb!.^GG0b#GD_ ""0b#G_<i"GGGB"b# _GG4Gb#8 /:@GGGb#_+$ǠGh""bTG^"$ǠTGGb!/^/// GGGGG b8_ @ `GG"Pb#G5""_G$GTG ""bb ה^Ӊ$GTG+bk!_A͔^D~GGGx(bXB"G G0B("(cb\G(]"Gb#G_GGeGGB"pb#ǰ$GG_ GB"pb#G_8""TG ʠGbO$//^G$&TG+b^GG0b#G_Ơ/7///$GTGh""b#/{^///$&GTG+b/o^///GGGGG b_  GƠ`GGG"5"Pb#_GJ G`GG "(@Gh5" ///` GGG "5"Pb#u_LGXG]]}ݤ=]} #k/// #B?B^~D^~޴>GG_BD#GGGG}`G(/GGHB"b#_G$PB"GG}"b#_pGG GG"G`b#X2"'_G /$=(#G "8B"Gb0 BtG(cz\ =@ DG///8G4GHbTG//k^8G4G8$pG [@Zk G`0AGG "TGGGGHb^GGG//!  /?GPG_"tGbWc^GGGG D8xb^pbG0#_"GGb#82s"_hG4G[@ZkG/4G}G4G(,鰜 G)$`0F0B"b#GG_ ȰGG=b#(I_(GGb#_,TG"" %G(b $ /O^$ɠGTG'(bG^GGG@b#]_)GG0""TG(bR $)  5^"$TGG(b!/+^///GGGtGxbY@7$GTG""(b /^$"TGG(b!^//GGGtGpb}@$GTGX""(b /^$"TGG(b!^//GGGtGhb @G)ȰpGG`b#" G2"_GG]]}ݤ=#/k///#B?B(^D_B~D0^8~@HP޴X`h>p^xG#GGGGGG///(cGG"G B"0`Cb(cB\G]"Gxb#G_GGG$GB"Gb#_ GGHb#o_bGG_"(=@Gb#G:s"_GGb#_bGG_",=@Gb#G:s"{_ G""TGbm$( a^p$(TGGb0/W^GGb#Gm_p"U)!$GTG""bC/C^///<$(GTG)b/7^///0GGGGb#_b&( GGG_"b#GG:s"= @/ ///+_, bGG_"Gb#G:s"=@////_GFG삦GGG":"b#8_GG(]0]8}@HPݤX`h=p]x#k/[#4G~^^~ (0޴8GGGGGr[@ZkG///`#0 @#8邦GGTGGGGB"b^GhGG//"! 4GGPb/3`^PGG_"TtGbPfa^,4G#C¦%GEv[@Zk8邦GG GTGGGGbpB"q^Gb#@G0GG_"tGPb?a^Gb#+'@8bGGTGGxb#Gp邤@Bs"_Gb#/@d4G[//@ZkdG4G[@ZkGGb#}@GG]]} (0ݤ8@#k//B?B#~^D_BD^~ (0޴8@H>PGG#GGG R/GGB"b#G_GGG4Gb/Kd]p邦GG GG"G`b#B"W_ 6/G4Gb/T]GB"b#G&_GGHG4Gb+d]p邦GG GG"G`b#A"7_ /G4Gb/>gT]G GTGb=]G %GGTGbH!//d] G/GGGTGb&d]Ө" GG4Ga[@ZkGG P_"btG`^hGG4G[/@Zk0GTG4GHb/_^p邦GGG0 "G`b#A"_ /p"G5TG0Xb1"/^ GGG TG(b/^p邦//GGG"G`b#`A"_x/GGTG0b_G// /p"GtG0(b1"ř^cG0GTGXbڙ^// /GUGG TG(b/[^p邦//JGGG"G`b# A"_@/GGTG0b__ G// b/ GGTG(b9^pb#GG_"G@s"/ pbGG_"G?s"pbGP?s"G_"GGb#*_Gb#_ 6/G0GGtG(ba^ *!/$GTG""(b/^///$ǠGTG((b/^///p邦 GGG"0?"`b#G"_ 4GG]]} (0ݤ8@H=P`#k//B?BF/e#~^^~ (0GGGE GG/G G4G(b~3]GG4G8bG/2]4GxD (//__GGHbz;]Ӡ5@D 05"B B BSFQF G/5@@ D/G/G/ D/ŢG//GG 4G(b/;3]GG4G8b2]G]]} (0@#k/#B?B~^_B^~ (0޴8@H>P^X~`hGDD[G#GGGP;J!|@X@//$fGTG8"" `b/7^$&GTG*b/^?$&G0""bTG/ %^G$&TG*b^/+GTG ""$&b/ //^$&GTG*b^$&Gx""bTG/ ^G$&TG*b^////$&Gx""TGb ^$&GTG*bߎ^GGGb#_$G igg4G[@Zkc//`$G0""bTGÎ^///$&GTG*b/^///GGGtGHba_A$GTG8""b/^$&GTG*b^T#GGGtGpb0 @T#@T 1@T"/$GTG ""b/^///$&GTG*b/w^i//HBF"G[XR"82"@ZkƠ)")!/$G""bTG[^///$FGTG)b /O^///GGG4Gb# @J$FGTGP""b@/;^///$FGTG)b //^///GGG4Gb#m_*$FGTG""b@/^///$FGTG)b /^///GGG4G0b#_ $FGTG""b@/^///$FGTG)b /^///GGG4Gb#_$FGTG""b@/ۍ^///$FGTG)b /ύ^///GGG4Gb#i_$FGTG""b@/^///$FGTG)b /^///GGG4Gb#_Ӫ$FGTG`""b@/^///$FGTG)b @^ӊ DGG@ B"Xb#_Hꂦ GGGG"G0>"à_A GG bDTG4G/H,$// ^, GG4G,$h< [@Zk G`c 0`AcGGTGGGGP" b:^ G)GG_"tG G Pb/]^GGGG D,Pb^HbG0#_"GGb#>s"D_gG4G[@Zk// GGTGx""-` b/)$,  ^$,GTG)b^GGb#G-_ HꂦGG"G="G /HꂦGGG"="8b#:_Ơ/,///$Gx""TGb/^ӆ$FGTG)b ^~GGb#G_dG`Ơ //g4G[@ZkƠ//X\G]]} (0ݤ8@H=P]X}`hp#k/B?B#~^D_BD^~ (0޴8@HGGG#GGG{#P["/_GGG4G8b/_]邦GGGG"G>"G4GHb/O]G GTGXb)9]G %GGTG(bH!/_]G/GGGTG(b_]"GG4Ga[@ZkGG P_"(btG\^gGG4G[/@Zk x!'///$GTG""b/C^///$'GTG(b/7^///邦GGG">"GGGTGtGbu@^bG GG_",Gb#s"_GG4GHb+]h//GGb#(_$GTGH""bB/^>$x"TGGbp!^g3G4G[@ZkG/`#0 @#邦GG>"TGGGGb^GG4GHb]2GG_"tGP(b~[^Gb#@@G EP_4G//bGG_"GGb#x>s"_GG4GHb] /邦GGG"H>"Gb#_ G]]} (0ݤ8@HP#k/#B?B(^D_B~D0^8~@HP޴X`h>p^xG#GGGGGGz///(cGG"G B"0`Cb(c\G]"G@b#GD_GGcG$GB"Gb#h_ GGb#/_(Gb#G_,TG GHb/I$(// ""/3^///$(8TGGHb0'^GGG`b#=_8"+)!$GTG""Hb /^$(GTG)Hb ^S$(G""HbTG/ ^G$(TG)Hb^/@GTG""$(Hb/ //^$(GTG)Hb^+$(G""HbTG/ ي^G$(TG)Hbъ^/$(Gx""HbTG NJ^///$(GTG)Hb/^/// GG""$(TGHb ^G$(TG)Hb^GGGGGbI_ GGy$(GTG""Hb" /^///$(GTG)Hb/^///GGGG b#U_ GrnGQz$(GTG""Hb /c^$(GTG)Hb[^GGb#Gu_ GRNG1Z$(GTGx""Hb /C^$(GTG)Hb;^GGb#GU@ G2.G:$(GTG""Hb /#^///$(GTG)Hb/^///GGGtGb_ G @GGFG //GGG"b#x2"2_GG(]0]8}@HPݤX`h=p]x#k///#B?B(^D_B~D0^8~@HP޴X`h>p^xG#GGGGGG///(cGG"G@B"0`Cb(cZ\G]"Gb#G_GGkG$G0B"Gb#_ GGhb#_(G(b#G_,TG Gb/Q$(// ""/^///$(TGGb0^GGGb#_"3)!$GTG(""b /k^$(GTG)bc^S$(G ""bTG/ Y^G$(TG)bQ^/@GTG8"" $(b/ //C^$(GTG)b;^+$(G""bTG/ 1^G$(TG)b)^/$(G""bTG ^///$(GTG)b/^/// GG(""$(TGb ^G$(TG)b^GGGGGPb_ GGy$(GTG ""b" /^///$(GTG)b/׈^///GGGGxb#_ GzvGQ$(GTG8""b /^$(GTG)b^GGb#G_ GZVG1b$(GTG""b" /^///$(GTG)b/^///GGGtGb_ G2.G :$(GTG""b /s^///$(GTG)b/g^///GGGtGb}_ G @GGFG //GGG"b#."_GG(]0]8}@HPݤX`h=p]x#k///p#B?B0^D_B~D8^@~HPX޴`hp>x^~GGGG#GG///($cG B"GG0B(} b"(c/\GG]"b#G_GG}/GG@B"b#&$G _ <f"0B"b#GG_8GG\킦"b#6"XFG_ GTGb$ $'/ (""/ˇ^$'TGGb0‡^GGGb#_\TGGbXD ""$GC@^Ӡ?$'TGGb0/^6GGGtGb_//XGGGGG8bE//_G킦GGGb#"p6"_(]G$CG0]8]@}HPXݤ`hp=x]}#k/$GTG""b/c^///$'TGGb0W^GGGhb#_Ӵ$GTG""b/G^///$'TGGb0;^GGGb#U_Ә$G0""TGb/+^Ӓ$'TGGb0"^//GGGGb#_|X5@BFzGG$'// TG""b^$'TGGb0^GGGGb#>_@砠")!$'GTGb ""/^$'GTG)b߆^$'G""bTG/ //ӆ^$'GTG)bˆ^G""$'TGb ^G$'TG)b^/$'G""bTG ^$'GTG)b^Ӡ$'G""bTG/ //^$'GTG)b^ӌ$'G8""bTG/ ^G$'TG)b^/y$'G""bTG w^/// $'GTG)b/k^///a$'G(""bTG _^$'GTG)bW^P$'G""bTG/ //K^$'GTG)bC^<$'GH""bTG/ 9^G$'TG)b1^/)$'G""bTG '^/// $'GTG)b/^///$'GP""bTG ^$'GTG)b^GGb#GY_/ ///X#DGZX#D1GB//jG4G[@Zk G X#G`)?DhG)/?>//`C0@BC킦G0GTGGG6"Gb^dG4G[/@ZkGA/B?B#0^D_B~D8^@~HPX޴`hpGGG#GG/G/($cG B"GG0B(}Xb"(c/7\GG]"b#Gy_GG/GGxB"@b#&$G_ G"<f"$GhB"b#g_0삦GGG8 b#"<"_ G`""TGb$' //_^$'TGGb0V^GGb#Gl_GGTG""b/m$//A^$'TGGb0/7^GGhb#Gi_T$'GTG@""b /'^///$'TGGb0^GGGb#_8$'GTG""b / ^///$'TGGb0^GGGHb#_$'GTGh""b /^///$'TGGb0^GGGGb#_GGGGxb#G&_0삦GGG" b#;"_(G$G0]8]@}HPXݤ`hp#/k///#B?B^~_B^~޴>^~ GDDGG#GGGGxB"H}/B@Xc$L}PGb#_G(#GtGGX"@B"b0 @(c/#\GX X]"GG/GGGdPb#^_G/G/GG8B"b#G_0(4 D0(HGH$0F0GGB"b#q_ $TG"" GXb$G@I^H$'TGGXb0/?^///GGpb#GR_XGTGXbH"N$')! `""/'^///$'GTG)Xb/^///0( 8 D0(@DG G(CGG"bG0@BB(c;R"\GGG]"Pb#_ G//G4GGB"b#*$G_ TG gGXb`$+/  ""/߃^$+GTG)Xb׃^GGpb#G_ k\C GGTGXb6`$+  h""/Ã^$+GTG)Xb^GGb#G_$+GTG ""Xb  /^///$+GTG)Xb/^///GGGtG0b_ Gk삦GG"b#;"`G_FG$'GTGP""XbHb@D  Gk!w^Ӗ$GTG+Xb o^ӎ//G(#BG("GbG0 @;R"(c\GGG(]"Pb#C_ G//GTGGB"b#ʰ$Gd_ TG"" ǠGXb$& //;^$GTG+Xb 3^GGGpb#I_ Ơ\C GGTGh""Xb/4$^$&GTG+Xb^GGGb#_$&GTG ""Xb /^///$&GTG+Xb/^///GGGtG0b5_ GƠ삦GG"b#P;"G#_IG{ Gp$ǠGTGXbH"`""//ӂ^$GGTG)Xb ˂^GGGb#_TU$ǠG""XbTGHB///^$'GTG*Xb ^GGGb#!_89$ǠG""XbTGH"///^$GGTG)Xb ^GGGb#_$ǠG""XbTGHB///^$'GTG*Xb w^GGGG0b#P_ G`hGGGb#G_G삦GG@"b#(;"_TH@0( "E0(LP$GXG]]}ݤ=]} 0#k/#B?BTG@F^~^ ~(08޴@GHP>XGG#r0GG=/W $UH;"b^xO$$TGGb0/^p"//CG4Ga[@ZkG/`#0 @#ꂦGGTGGG="Gb|^@GG//!  ?PG4GXbG</kP^///+GG0B"b#_GGP_"tG(bQ^GB"b#G_ GGxB"b#_BGGb#=R"_G GG""TGb^/&4 D&///GGTG ""b^ꂦGGG"Gb#`="_BGb#GH=R"_G GG""TGb^/&T D&///GGTG ""b^ꂦGGG"Gb#="_GhB"b#G_GG> ""GTGbj^//&'D&GG DtG`b_#Gb#D G_G㰜///// ///'/'K$Bq"!B7`BFF'K$Cy#7`C GF!C F/ ,)! H@"@@C7@BrFYFF/'EG1'AGTG(b^GGGP""TGb/^& D D;&9GGTG""b ^//&!D!D,&*/GGTGh""b^//&"D"D&/GGTG""b^//&$D$D & /bGGTGGGb#(@[//@Zk肦GG GTGGGGbB"#{^G/GG//"! G= }Gb8#<cYN^PGG]] }(0#/k///[#CG^~4G^ ~(GG' Gr[@Zk邦GG GTGGGGbB"z^GGG//"! G=G0b0#N^4GPG4#G]] }(0#/k///'#G4G~^^~ GGG0Gb/42// ]GP4GHbO^G4G`G]]} 0#k/k///x#tG^~^ ~(08޴@HP>X^`GG`G#GGp""H1"[@Zk/C"!Q@B!@p\<@Ck//xbpBGs|"XR"82"[@ZkG@G`b"L$GGb/r^L/,L$@&tGGb @G_(C=@B/7@@G/Ot^LG@_&tG(GHb11B@t^PGGtG bP_ G@GGL$cGbcr^LGGGLdG@8bGt^G@GGGGbt^Lu///PGtG bPq_ G@GGcGGb;r^LGtGG@L$bt^(cGGtGbS`@LDs^O/=@GtG b#(=@/P//PE_ G@GGcGGbr^LGtG(cGb/-`@LD/s^(//G@GGtGbs^LGtG,(#GHb21B11 @@t^PGGtG b/P_ G@GGL$cGbq^LGGGL$G@8b=!t^G@GG=Gb=t^LGGtG(cGb`@s^//(à,8D8D0D c/`///GGGtG b_c///L@&GG @btG/S=@1 @Gfs^LG@_&tG(#G@Hb11 @/s^cG/ `///GGGtG b_c/LdG@GGGG8bs^G@GGGGbs^Là //GGGtG b_Ơ/G@L$GtGb/#s^(cGGtGbs`@LDs^o/=@=@GGDGtGb?@// s^LGtG,(#GHb21B11 @@/[s^G/ ///GGGtG bN_/LG@GGGG8bfs^G@GGGGbs^LGGtG(cGb,`@/r^(// //GGGtG b"_/(cGG`@LDtGbr^/GLĠ4G@Xbr^,G8D /T///LİGGGtG b_G@GtGL$br^/?//@$@ 1@(G11BG@GtGHbr^G@G4GXb/cr^C G/@///LİGGGtG b_G@GtGL$bjr^J/_G@GGGG8br^G@GGGGbr^(cGGGbtG/`@//Kr^L/C@L$/L$GGGʠ btG/_(,GGb8F8FD LD^@Gj4G4Gq^ LDGG^@jxbGq^J//_(cG`@@L$GGb2r^LfGGtG b`e_^@pb_"b#G"Ls"G$#_P//4GGGtGL bM_CLD@//GGGtG bB_J/_8//GGtG b05_.àb## CP_pbG G_"G$#b#s"_GGtG b_//GGtG b _ xp"GG"gx1" [@ZkG]] }(08ݤ@HP=X]`p#/k///Tp#G~^^~ (0GGZ`GGGXSԢGGHbFM4ՀBBFH/Oo^"GBtG@ q"G1"[@Zk8/G4G8b/{o^LGb#G_G@TGL$(bwo^G@4Gxbr^bGTGTG$#s" /G4Ghb/?n^b8DGG$#s"GG0b#T_G@4GLXbBo^@G]]} (0@#/k///?BB#GtF~^G^~ (0GF`GGG0G{_" {#0-s" ТG/$#!_5 CGb#W_b G _"G$# b#,s"_%P#//8#b_"GG b# ,s"G$#_// <Cpb#_b G$#8 _"G b#@,s"_/G]]} (0@#k//P# {^~GG^ ~BF(0*s"8޴@HP>X^`~hpGG@X1GGG GTG{#$#_ ///8#b _"b#G P*s"G$#_8XĠx/"///0/0K$Bq"!B7`BFF0K$Cy#7`C GF!C F/ ,)! H`"@@C7`BFyFSF/_0EGTGw 10A0b/ z^G GG="TG@b/]G G]PGtG0bK^ G G G$#GGtGPb /,]bG_"$#Gb#*s"P_G //GP_"tG 0bJ^G Ghb#_b G G_"$#Gb#)s"5_4lGGb#G`// @hG4G[@Zk\GG4Gg[@Zki-GiIuD 0@ADGG)"TGGGGbu^ Xcx1`/4#GGb#G //_ @lG4G[@Zk`\Gc/Gc///$ 0 A$GG)"TGGGGbu^ $\Ơxb / G0E\//GF/kG4G[@Zk` G/ƠGG]] }(08ݤ@HP=X]`}hp#/k///D 0@ADGG)"TGGGGb^u^ /k///0!F 0 4/k///4k//!F p/`08/k///8k//Gk//#~^^~ (0޴8@GG, GGGG //GGGG bD/$_  /gG4G[@Zk% /fG//G]]} (0ݤ8@P#k/`0BGG"TGGGGXbt^ _@Y2#~^^~ (0޴8@G ҠGGGGG/Gb#e_//& /$ ƠG/GƠ/D$b#///_$ŠGb#E_$G$/ $///G$ G]]} (0ݤ8@P#/k/// k// k//q#~^^~`F (0޴8@GGGC Ѡ RGG@_CqG@ $$D_B@aF: /@R@F4G=/G'@G1S2D!@s ` D/s//`S2D/@s//` D/ s/`1//? `/4G`1/?/// `CCD7@GGGG%s;F`s`0F/s//`S:F/ @s//`Ӡ&F/s4GGb#/@_ Š  / //$$ ԢF//C5D/kCDgGD 9GDGG$Z //y`4GpG4FG?F`9/?CCF4GGb#//_ $@`/FGb#/ ///_ b#G$8_$ }$y/bDGG $_"Hb#Gs"_ l///QFGb#'Fc _ Gb#_$ Z/$TF/ ///KF/GGD 1 ///Q@1/ q//`1 1 Ѣ1?b#+Gd_ Gb#_$ !4GGb#V_ $@`//` 4Gb#İE_ $@e4G[@Zk$GG]]} (0ݤ8@P#/k///C#>^ R~^ ~(:D08޴@GGGF@ 2 @?B_B3D/K $c$`CBAGE /`s{{F?`@//G' GrasG!`! asG/`!// asG/`!// asG/ `!?/@R//_@/4G@R/_@/ G="b#_ @ C///$  C@$ CCDi ="Gb#_  /$c= G)//P@G"p//`G/ G/G/ // "y4G[@Zk}G ////0$F G}PDF@G/vpdF/`G/m// Т4Gw[@Zk_? /;GX/ #G uѢvF1 wF/1// xF/ 1// 1yF/ 1?4G]@/u zՠeG4G[/@ZkG#GñCGb#DAtSBCCVFSFb s"/@ 7_"G_ /at@dD`GG]] }(08ݤ@P#k//4G/k///$14G $r`k// 1GQ 3G. /G'G[ QF!  QF/ // QF/ // QF/ /+ {//Ck/4G" {/Ck/$R@ RF1 qrG/`1// 12D/ 1//?4Gk/Gk//S #~^^~ (0޴8GGGGGGGtG(D" bD.$$ $// _ /7$$4 D$$(D@%b# G//_Gb#(DGH_ &($!0 ! 0/Gb#_ GG]]} (0ݤ8@#k//Gk// // //hb#=_ ////0#4G~^^~ (GG G /'///GGTGbu^///G///G]]} (0#/k///Gk//4G//$GD/?GGTGbu^Ӡ@///p#4G(^G~0^8~@HP޴X`h>p^x~GGGGGb#GGG/@P$(bGTGGGhb# $$#s"_ /@(bGTGGhb# 0#s"$$_ ///(bG G$$TGGGhb#"s"_ t///CbA8 EF /PH@/kG4G[@Zk* PD@PJG_GJ/_D//@jUaA5aA+D JT JT/`0B(GG""TGGGGbp^ 1 DGTD"b#G_ /Td// `$ !T!aE 0F0 T$ D/@RTR2F@0dbF0d0PF/ ȢF/ T G TH b#p_  ThTd0d`E(bG_"hb#3 TX"s"/GT//$$_4G/(bGGG_ $$G_"!s"hb#_4G@$_"hb#(b0DG!s"#  B$$_4G/ P`EG`T( TD2F/`(b !s"/_ $$G_"hb#_4G/ @GG]"}"b#U_  /}<`0D P@E9@///K2@//+j3 3GTGb/t^/// TG _G _GGGb/st^///J_  (bGhb# s"4P_GGG_"p_k0D@E=// P$/}s`//P$ GR /ɢ6 6GTGb/?t^/// TG_G _GGGb//t^///)?- 4Ghb#(0GX F@i(s8`F_"/ `4(b@ s"_GGGG"_/ )(bGGhb#s"(!8 D 4@/_GGG_"_/ @0b#+(T/8!_4D(bGhb#/@ (s"4Po_GGG_"_Gkb#/-j_+/ G +&kP$ PDG//+=kP$ PDGGG/} P@E @/ `PĠ//Pd/='/PPD G@`¤@/0dP`F5`j3`///7 7GTGb/s^/// TG_G _GGGb/s^///k  (bGhb# s"4P_GGG_"_*G0G'///A8@F`4؀F>AF/'0!?/G/// (b_"/4g/_GG/_GGs"hb#GU_GjG(k/'`/// PöABABF/@@!?!?ᢸBUBB5BGWGGX!1@/*)f[J4G@Zk GJm_ }`D(bGTGXs"hb#G4/$(_GG(]0]8}@HPݤX`h=p]x}#/k///0qGG/ Gk/aJGr#R"`dG r"D0aF@FG DC/k//////\@/ \0 @\p `@\@Gk/\k//00(F- #~^G8D)0!x"D1 @0PHG@08 F xD&@00(D P8@G@01x"F @0DG]G #k/Gk//GG]4G!{# #////G] #k/#2F~^^~ (0޴8@GGGGGGGMÁVHG_"4GG @$Gd_CDGG@@Gb#/O@DGGG @$G b_//G./0GG4Gb#D /7@D//G/0D\///GGEGG b_///  /G//  G]]} (0ݤ8@P#/k///#{G~^^~ (@s"0޴8@GG#>QGG8{#@F @$14G_ ///0b8b#Hs"j@0UGAJ @ _"$$G_  // G_"_b G _"$$8b#s"_  D$4GG/ //00!J @0PAJ/@@/bG4G8b#$$G0s"_ /GG/G'GTGb#&@d$Db#@GG _"GXb#"~ (GGG_/ ? GD///Db#G_bGG 4G$$G8b#`s"p_ r//0bG8b# _"HDs"CD $$]_  _///\/%0!!H/ //0J bG8b#$$ _"xs":_  <@GG4Ghb#&@DG_"N ,_b G _"$$8b# s""_  $D// )Š /#//%! /  "////G///G]]} (0ݤ8@P#k/$Dbb#b@GGGs" _"8b#_  /@bG8b# _"0s"D$$_  / G_"_b G _"$$8b#8s"_  Gb#_G@bG4G$$8b#s"_ ///DGGb# G$_@$ _"ƠGG$$GXb#">޴ (G_  DĠ4G/? bb#s"!B @/ $DG@GGG8b# _"u_Ơ GDs///Dj\$/ ///00!J(F0@FQF !?//!bG8b#$$ _"s"N_  P@ĠGG4Ghb#:@D/#\ G%_"<_`Ġ7bG8s" _"$$8b#G._  0bG8b#$$ _"ps""_  $@bG8b# _"0s"D$$_  / G_" _b G _"$$8b#s"_  \GbTGG's"/_GG8b#GD$$_/bGTG$$G8b#s"_%FGb#2F/ //W_"ƠD4Gbb#s"0 0"?F/ $DG;@GGG8b# _"_ GD///Ơ _"G@$GXb#$$GƠ@">G޴ (_  ///#~^^~ (0޴8@HGeXGGGG0!1!@w!@ @\<@{)Ck///Q///4#I #:1 @/E 컗BC1`\\C4)C/k///GtG(b54P//@G_44+/0 GGGtG(b D0 //_8#b#/ <C_bG G$#8 _"GHb#(s"1_ 4GGGtG(b/_X4GD@Ű4#/P4GBB@tF/`4/TGF4@F/4ò/TG4/ GGtG(b@4P@a_@Ű8 # ! D/ //FbG`(s" _"$#Hb#G_ӷ/0bG_"GGHb#TDs"0L#G $#_Ӧ8#b# <CN_bG G$#8 _"GHb#'s"_//44GGGGtG(b/L_LX@@ðGtG40(b G_4GTG/4D@@ՠ@2FTF2 FG///TG@4DTDG`8D/4Ơ4ðZTG4W/XdGâ/֢5BUBF GG4Gxb#a@0à@D0ð0C4G4ctG@44GGtG(b_0àtG444GGb#|_X$//4GtG/04#/4C/0ctG`4///GGtG(b_//44GGG4#tG(b4P@XdG/_@GGtG(b4Xdy_àGG4Gxb#ƠxD/@0#@(D0#///àbGTG$#'s"}GDG4G@xb#@0#@0D/D@C/_0r"aJ0F0///hF0#(G0#//pF`0cpG0c`R_`à& /!G G ԢGG/5G/?G_G8#x", `CGF`G/G/ 1G G/h[G4G@Zk' `GG/~//d0`BdGG'"TGGGGbBh^G/G@G4Gxb# Y@GGG4Gxb#S@b G _"$#GHb#`'s"U_u'@b _" Hb# @5 @ 's" DFG$#C_c//DbG _"GHb# &s"D$#//_O//0bG _"G Hb#HDD&s"0DDD$#_:/@//GGGtG(b8D/ 4'// n_DD@/ G_"_b//G$# _"Hb# %s"_/b$#G _"G Hb#&s"_/GGGb#d_bD8(  FXSEPbG$# _" %s"F/xD8/@#B @?bG$# _"$s"5GDG4G4xb#//@\G/,/////'GGtG(b8 D 4G//_DD/ @///X[/bG$# _"&s"GHb#w_XO/TG4K/8# /// bG _"$# $s"G// <Cb#_bG_"$##s"8Hb#M_GGtG(b4Р/_G4GGGTG bZ_4 !'@w!@/ ///GGG4tG(b/_G]]} (0ݤ8@HP#k//(#4G~^G ^~ (0޴8@H>PGGG#GGGG 4Gb#@("?"0BbwB\B@HCk//bGTGGb#8Fs"@$$޾_ GGpb# @Ӏb G GTG$$Gb#s";_ ///< GG`b##4G@DGpb# D$Ccp",@G޴G~_"àpb#@BGGR"^TGGGGb# (Ѿ_ GPb# @_G4G8b]^ӀbG_"$U$$s"M///(GtG C"#b##@Ep!pb#A#_"G@޴GG>Gb# (G_.GTG@""8b4GIk^/$/GTG`""8b TG=k^/#/GTGP""8btG1k^/ /bG#_"hs"Gb#2_ GG]]} (0ݤ8@H=P`#k///#~^^~ (0޴8GGGGG@Dà //GGGb#G_Ơ/G]]} (0ݤ8@#k/#~^^~ (0޴8GGGGG@#b# # C_XbG G _"G #b#+s"ս_ GGGtG b_(Ơ(ðG]]} (0ݤ8@#/k///#^~^ ~(08޴@GGGGG@0#b#; # C/+_0bC _"pb#GG4#+s"_0&#b# Cf_0bG G _"G4#pb#x+s"_//GGGtG b_0Ơ0ð ///GG4Gb#c@0G]] }(08ݤ@P#/k///#G~^G^~ (0޴8GGGG b#O @ӯ`GTG,GtG$(Xb/ ^pbG.GG_",PGGGGGGCG7'1i#`///GG'GDcGb#/+@"G //GGDcGGb#q+@GGGb#/ @G 8c_GbGGb#s"x_/G//GG]]} (0ݤ8@H=P`#k//#~^~ GG //Gcd4G[@Zk//G]} 0#/k///#~^^~ (0޴8@LGGGG4G ۤ(H/$ ///$$GTG'8b /h^fG4G[@Zk/LC@HL/HHG//G]]} (0ݤ8@P#k/`0âTG,0B0òG4GTGGGGXb"/Gc^ /#~^^~ (0޴8GGGGGL/D///HbGGG0s"D8XD8D2@4G//`%(/xDbGG Gs"//DbGG Gs"/DbGG %Gs"bs"GGGGb#_G]G]} (0ݤ8@#/k///<#G<P^4Т~ ^{#(G4pG޲h@4<G] ](0#k//0#4GP^~X^`~hpx޴G>^~޵G<GGGGGG'b#8 Di D @D4("0¤5/ 1@@ \@Ck//i B%"G[XR"82"@Zk////8# bG`b#Gxs"_,</8# bGGG`b#@s" _,0/GG8cDC"GGb#  @G b0'_" (Es"&EG/8#GXFG ///GG/ bG8#TGs"0'GGGGG b!IC@'<#/k_ bGG8#TG@s"//!/`G@@'8F/@1q8`F/`@18F @18F@1Ѣ8F@18FGGb#G_ bGG8#TGs"/!/(EGXbb#7 G//K_ GG"////K$@A"!@7@BtFFKCX#7@C GtFC vF/l/!lK@"@@C7@BFXF2F/?GE1A* TGxb 0 Awe^ G<CGGG4GG b_kGG4G[/@Zk G/-I/ // b !G8# _"GG`b#s"1_/ bG8#TGs"JEGG4GH`b# G GCB/@G`D͡GGH}"b#G"0"FG/` G(@.G!  4G4DaðAGGB"DGGHbK("//\GH}"GGHbB" \ bG G 8#(""`b#0s"_>/ bG (" 8#G"`b#s"ѹ_/// bG (" 8#G"`b#s"_//8C bGb#_GGG@s"G`b#_  bG8#TGG`b#s"_EA bG/_"GG`b#@/!s"8#_G` G/ GGGb#GH}" //3(@ G@Ρ/N 8@E/_ bGTG8#8s" /// b.!G8#/_"s"G`b#\_kG4G[@Zkz/ 0E bGTGt G//_ GG8#s"`b#C_!+////MGGG4GG b<C_Ӯ@@G E`/ bG!_"!!8#Gs"/ bG8#TG s"G`b#_E/8`G6@@' 8E/@1ѡ8E/@1q 8`E `@1 8E@18D@118 D?GGb#G6_ bGG8#TGs" / !!G/8# b_"Gs"G`b#۸_<GGP]X]`}hpxݤ=]}ݥ#k///#~^^~ (0޴8@HG<GGGG804%4Р!1 @ @/w`\<@ Ck/////&5 Bu B B B@F[G BDDƠr&5 @u @ @ @D[F @DD/ ƠdF5@Cu@C@C@C FF@CDDƠ/bTGG0_"G s"Gb#m_KJ///GGtG(b8D @&^J^Ơ/9//4xD@@@tFXD/ (_ӠCDD////bGG2_"GGb#8 s";_//@@@FFƠ/ //GG4G b#G @@////AB5BFPF@hA`B5`BtFF/ `@A/ȢB5BFG@4% G@h`G/` G (8 D $/3 ///Q8@F!@1+ 8F/1//# 8F/1// 8F/ 1?/4//G/bGG1_"GG1 b# s"·_//u4G/ ///GG4GHbo]G<G4GG4Gpb#G_ӐbGGG<51_"GG1 b# s"_//Q(8 D/ ///@8F/@(8 F @H8@F@@h8`F`@8FbGGTGP s"b#u_ ^///bGGTGb# s"f_ OGG`Eb#G4G_ӐbGG1_"G s"/b8#GTG s"Gb#J_G&4Gg[@Zk!//bGGTGb# s"7_ /BB)"G¤hXR"82"[@Zkh"tG4E[1"@ZkGGb#GD//@,8G]]} (0ݤ8@HP#k/#^~ ^(~08@޴HPX>`^hG#GGG<80G ;;1 @ 찗bC\|C:|Ck///BBg)"rBXR"82"///GGhb#_4à,bGGTGG8b#Hs"P//¶_ <@GG<à4G8b#@SFbs" @TG/_4à</,/(bGGG8b#s"/_4à</o,r/GTG&b c^-dGGG`0âGC# ,0B0òB "TG ~tG`b(0Z#P~XGGH^G`4G8@\^4à<;,>/LH#Gxb#,' =_@TGtGG0b8"///F^@GGGfb#0@TGGGbtG@;H^bGGTGs"bGGTGs"8b#G*_G@4GPbF^GGhb#=_Lb#_ ==4<ðH#L@#4à<,÷@@b4FGGG TG8b#GHs"_4à,/GB"j$"G>B DXR"[82"/@Zku@@@@0D F D/4G/GbGG @#_"8b#Gs"ѵ_4à,/,"A/$HGTG)b*@ /;b^G//#h""TGb2b^G""TGb+b^GX""TGb/#b^"GTGb1"b^///bGG"_"8b# s"_4à//c,f/G0"G4Gb>] GGG4G4Gb#_i@G4G[@Zk<ð4àJ,MB)"hXR"82"7///B")"BiXR"82" +///B)"¤dXR"82"///B)"hXR"82"///B")"BiXR"82" ///B)"¤dXR"82"///B)"hXR"82"///B")"BiXR"82" ///B)"¤dXR"82"///B)"hXR"82"///B")"BiXR"82" ///B)"¤dXR"82"///B)"hXR"82"///B")"BiXR"82" ///B)"¤dXR"82"///B)"hXR"82"///?!!)@w!@}@\<@ Ck//B¤)"fXR"82"k///B⤥)""gXR"82" _///)"BBSB¤)"fXR"82"O///B⤫)""gXR"82" C///)"BB7B¤)"fXR"82"3///B⤱)""gXR"82" '///)"BBB¤)"fXR"82"///B⤷)""gXR"82" ///)"BBjXR"82"G[@Zk4à,/Ơ4ð,<G] ](}08@ݤHPX=`]hp#k/?BB_B#D~^D^~ (0޴8GGGGG/G_/0E@bGGGGb#BGx s"@/_O//"GG0""(btGA/]0%GG@""GbTG V`^1 Ġ@bGG4GGb#X s"γ_./0Š@bGGtGGb#D( s"L%/ _@bxGGGGb# s"_eG4G[/@Zk //GGTG8b< $4#_,G]]} (0ݤ8@#/k///rp#G^~^ ~`F(08޴@HP>X^`~hpx޵GGG>GGG `{CTG{#s"l_ //P%G T/// G G Gxb//LáG/j///GTGb`-// _^GX$$TGb -R _^N/-K /GTG-b_^B$$ 8 > 8 GTGb8!//_^384GG $TGGb#4#0m/ `bN GXs" _ ///G4GtG0b \0-GGGb#G4G<#_G< 4GTDlG[//@ZkΡk(G4G8D[/@Zk/// GG/wLá/Lð/`0TG,#0B0G4GTGGGGb0"/Z^ W/HİHTPL# TGbL /// 8EC)$! GTb#G_///5TGb#UAuAD,ɠ&_GG4GtG0bG  &/\0 GGG4G4Gb#<_ӄTD< G4Gk [/@Zk//T XE/I)/?,G]] }(08ݤ@HP=X]`}hpxݥ#k///;#4G^~^ GGqG[@ZkG 4GTGGGbGH"Y^G/GG//! B ?HLG]] 0#k///##~^^~ GGGH{#L_DG4Gb#/@hG4G`G]]} 0#k///k///0pPk///B?B# ^SF~4GG^ ~(08GG@G#GG@b% ]ӈbG GG4GGGb#0s"±_ӛ/$GGG0b#(%Di^ GGG0bG(%i^ӈbGGTGs" 0bGGtGPDs"/Gb#_$GGG0b (%D/i^ //#GGG0bG(%i^ӈbGG GTGGb#s"t_M///bGGGGb#s"e_>LH#Gb#,% =_TGGtGb"/A^@GGHb#dG8_TGGG btG@CC^ӈb//GGTGGb#s"7_G@4GbA^Gb#GJ_Lb#_ ]HCL,G]] }(08@#/k///B?B# F~^G #k///(;0[G0P p$E,"! [AGXR"82"/@ZkG]G #kGGG({GGTGGGX///{#4G^~^ ~(0GGGs ^G[@ZkGG GTGGGGxbh"&X^GEá5c@ub@GGR"1"/_} 0Duc@4G5DdIJ@ 0DHG0D/`0?"D0Gb@4}c@//bD 5qe@c@7BG //y`@5`@!G/ 0D@#[G0DBGGG@R"D=(bYf^XdGG]] }(0@#k///4G@/X#~^G^~ (GGGGbe^DGG"b#w_tGG4G@4@c u[/@ZkGG TGGG@bG"/W^$//GG//"! / C4GTG"b#`GTG_"b#4GCA_tGp"b#C;_TG"b#C5_CtG"b#/_G"b#C)_CG"b# #_4G"b#C$_CG"b#(_G"b#C4_CG8"b#0 _G("b#C,_CG "b#8_G"b#C<_CG"b#D_G"b#C@_CtG`"b#P_GP"b#CH_CG@"b#L_G"b#C_CG"b#_ӈGb#Cd"_XG("b#C_\@"Gb#dC_htGH"b#C_l"Gb#C_p4G"b#C_ӈdC4Gb#t"_`8"b#GC_xGC"b#_|"b#GC_ӀTGC"b#_TG "b#`C_ӈCTGb#T"~_ӈp"Gb#Cx_ӌ4G"b#Cr_G"Cb#l_TGC"b#f_Gx"Cb#`_ӜGh"b#CZ_GP"Cb#T_Ӥ4G"b#CN_Ө"tGb#CH_TGC"b#B_tGX"Cb#<_G]]} (0#k//@{4G@L3#~^G^~ GGGTxb#_GDTG0"Hb/Wd^G@]]} 0#k///P 8@F/@k//X031B_cB\|B/CC/k///1""B BFk//"#1#1 BC C @FQ""q"F@BB`BF"1"2DB B4D3D5D1Dk/q#"#1#`CBC CvG"Q"1"FB@B BFFFQFk///0qB7B/" q""1 B`BB @Fq#1"uF`C BaF;D1Dk//Gk//#^~^ ~(GG{#{@#@c  //_P 1@@\@/ C/k/////////// //,//4//0//$//(//////8//<//D//@{//w//s//o//k//g//c//_//[//W//S//O//K//G//PC//d?//X;//\7//`3//T///l+//|'//h#//x//p////t////H //L// //GG]] }(0#/k/// ;#4G~^GGq[/@Zk G]G #/k///}`G] #k/7#4G~^~@ GG  @D@` d[@Zk xDD / // 1@7@d4G[@ZkdG4GG]} 0#/k///k///[#^~^ GG{#@R >@_/ G]] G0#/k///"GtG= ]G(b]] 0#Dc///0G8 F/ k//XxF8FxF @/`k/Gk//k/ۦk/Q,"HR"`#@@7aC@`r.tJ@s#7aC `G;dK3HF{FDHTGF01BwB /k///4Gk//QGk/Q,"HR"`#@@7aC@`r.tJ@s#7aC `G;dK3HF{FDHTGF01BB /k///4Gk//QGk/QG,"HR" @@7!@@ .J@5 7!@ .JX'D#`" 4G0#k//4Gk//4Gk//G!7eJR"67J6DFaFp.J"R""A!@7B!@,HG5ץJ" @7B 6HuFFD G0#/k///4G0#k/r.4GrJXgF`0#k/.R" J"A!@7B!@r.`J" @7B /[0//4G[{R"M.J%DH ,R"H@B`=@4F=@@F`"<lKY~[OY/Z0r./cR"rJ"7B+rY"~[/UZ5ZО.cR"J"7B`wKZ" [ ^Z*[Zpr.cR"rJ@///G0#/k///4GG0#k///0ۋG6%H%HF'DBw'@F [c /[cQ0#k//TG0#k/QG  k///2,2Hu%@%@ X+DsG/` R"/ p`G QG/k///4Gk//r/2,r""sK2Hr"T"TB%@7ABB @.JU"B7ABt#/@k/4Gk//bCTG/k///S.SJXGF/@4Gk/Цt{C"s"TB"TBBFUFFж/K"RRB7BRB .JVB#7Cr#S"/k//4Gk//wgCTG/k///4J#"JBB4JFJF4CFBF DFЦ4FжQGk//"GFQk/ 0 7@7#@"   /k///p# 7aC/`k//xFG /k///FG /k///F F/k///# ^~ ^(~08@>GGGG^/ 1,1H%@&@='@pG0b#FG 0_G }`D="."Js""%D@.JF}S/SKEG@s"}G/_ݢ="G.JCUBuBBG6DGu _rGD/DKn9"="G_fG/7"KG/8=="/_1(bX/XKCUC0D*92C1FSNp F/ ///DJ;C5F[{C[{C[C;;B`EJ C2F@@@@ H  B'Y bDKFDKCGs"PBPC/&///G="]r.rJCUKBuEBEBFGF@_GD/DK9/ bJp{#JFFUBBuCCU CQF8D1D G="s_]//G:,:H /! "="b#7!@G /{_X/XKCU CuCC0D8FG1D=" P_]G:,:H a GGd.GdJeB"ueB8F7BFuFN`/4G"W/WK&@G/, ///='@F! $"0`CUBB5@%,HA!@ 7@ !@/@0`C"@%W.WJ"A!@7B"!@`0`C"B%W/WK&@䤙`C//`C`0.0JF /4CE@TGG/4GݢG="oV/VKCUBuBB$DvG6D _GD/DK^9=GQ.QJ1"EFU@=="_ݢGO=".JCUBuBBGVGD/ _4GD/DK/;9/=GQ.QJ1"EF1@=="_//+٢)J:CpFGF$1Cw@/(DO/ DK1CFQ1BQ1BQ?B1B EK2CFRRBRRB2@J2B@ bs"SCsJFB`//Gb#_4GG] ](}08@P#k/// JFp"UCB/},HCU @u@@0DG F=" D Q_]:,:H/?TGa]r.rJjFGR"="]b#Y_/G="8_ӿE/EK9?J!F21 BwAB_3C!DdNp DZ քH6C5DVBVBVB66@H7C$DWBWB7J!7@ J6JcG#X8BDJxC@GGGwGCD J6JCFcFJbBFwBp E%BEBDD/{[/cv?ĜB/˴ XcqtG`y{Dk]//@:GhGb#_Gc///"/`6,6H!F 0`@x`D/_///`b#_4GMø`@C8G/8`D!`/`[/ _]Bp, H//Ѝ=  Aa@0`@a\KY/Y,/cH [_=]xZC[Cp, H } ` 0 \%C!C 0G /4G//`b#~_G G]]}#k//o#G~^GP/PKPK$B1 !B7 @AG1D //,R"H@#@@@7@CzFqF1D/?,HG///3.s"`F3J ,s"HS/s"SK 3.s"3JS/s"SK 3.s"3JGs"rB //3.3J@ @7 @!F Ds"rB/?PBGs"SCF G]1rBGTG({ #/Q///G]G #k//Gk//>#G~^^~ GGGP/PKPKDC: AC7 @aG:D //,R"H`#@@@7`C;F:F1D/?2.2JG2J//$D:" `,H@`#@7`C;F F/ U!@5!@qG!@!F ,Z#H?#RCGZ#RC` //:.:J$Bq !B7`@#D1D Z#RC/PBTGZ#@1RCGFGG`b//Q^C//GG4G0b_Q^///7@G#.G#J#J/) ///$B!B"7BFF/."J7#BB7 CYG;G?//#,rcJA#H2D#<c .t#J"VJc F>/K?#/Y#K#?//GG]]} 0#/k///# 4G^~G^ ~(08޴@HP>X^G GGbGGGP^GG/ /G//.VJ! >.JBP"B7@BrFTF_?J/B7#B7 CYG7G,@H! </.JVJ"$B!B7BTFQF# >! ///.0@! JBP#B7@C:G0G////.! J`"@@C7`BFpFpG/A.AJ/x¦v Bpa"@R"@2"G[@ZkbG4Gc[@Zk//.@G GJF%/i.)!(A EiJuF/`.)!J(AFI/)!IK(A@G).)!)J(A2D  .)! J(AF///(EGGG[GG8b#@G//S),)H/% ///).)! E)J .)!J.)!J /)! KI/)!IK @ ,)! H),)!)H i.)!iJ?.J///(E.)! EJ/(E//I/)!IK(EI.)!IJ?(E).)!)J?(E.)!JxG4Gpx[/@Zk}dr"GB/`[@R"@2"@Zk?!DGG]] }(08ݤ@HP=X`#k///0#GG~^GGGa/aKGF"/.0@!  DJF//0@! KF/0@! KF /0@! KF/0@! KF!/!KG&!K//F#7C4/0B"0@4KCC=C:G8G/T/0B"TKC&C='C0@GG/T/0B"TK0@B@B//AB5 /.VB/!#BA/7B DJK!#! YK"#A#B.9#TBBCJ/A#TB"KA#B#4C!/:KBTB9#BBTBBCTBB4C_B ///.VB71BBBJ! "B_B/CB5 /.[{C/!#{CA/7B DJK!#! YK"#A#Ba/9#TBBCzK/a#TBZ#Ka#B#4C!/;KTB9#BTCTBBCBTBB4CB@///.[{C71B{CBJ! "B//@B5@/!/UB/A#B7B D!KK!/A#! "#B:K.A#TB9#BJA#C/"TBKA#B#4C!/:KBTB9#BBTBBCTBB4C_/ ////UB71BBK! "B0rӲG] #k//G ] #k/ #^~^~޴>^G@ GGGGGG G{#'x /_` Gb#x=?F XC5@BU@BrFG@///_GDXBB \B0C/k///gD`.GJJ$///BUB5BF:G"7Gg,H"䩵@U@5@ 1E E],H 䲵@U@SF5@"FFS,H/TGb#/W:_G GG4Gb'N^ %L?$,GG GG$Hx%D%D // 4G G.GGJFB/$///=GBDR"/ I)A )AK IBX#7ACX#`,I)A )A IC H "7!B " ,I)A H )AFB )B.$@JإF,. JBG/$`///=BD"@', I)A )A'H B 7@  G.I)A )A @ GJ"7B"`.I)A J )AB B#@g/tG0DgKb#/_oD d@ Bc1`H?DF&DC 3JcF`GGb#\_ G//GGGb#_ G/$,G GGd""b#$H D5 D.SJ8LF1@.J؉F-.<gDH¤ J/`///{_G/䁵[ c//hb#_/HGb#h_G~//hb#_ /D 4G .""b#JG8 D/C@f.tJiF?`.JبF;.< JRgD[`=_G /[ /cN//G[pcE/hb#J_/Gb# _G / 4'0////hb#2_ӽ/u@@ E&,&HCu%@%@&@2F3F/ //='@D/ . J"7B/ K#7C F/ FKZ#7AC@, H&@/F.FJEF$@&. &J&B//='BD/ . J"7B/ K#7C F/ FK)!7!A , H&B/f.fJLBHBF*@. JuBF4F@.JB//=BD/&- &I! 7!@ , H 7@ &. &J1"7!B . JB/.<Gb#JgD////`y_G'@""" GGtGb/\8D//%/Ghb#_tGb#a_GG@"GtGb""/\8D//m/Ghb#q_\, HD`,H/=8D . 4G$"J/6///D""#@d. 4GD#tJXnF `.JF .JF$/:K //Dd  $"+d/D" cK8lD%`,H D!$,1Hx.D .J F.J GGb#_/ d.GdJdJd@a@# 7 @F1D /`///aBUaB5aBdFFF/ `/R"KCCXG///R"r/rK/Gb#/_G G{G4GbK^ %GG4Gb]8D4Gb#///_GGcG4GbK^eGG4GTGbj\//TGb#/_GGKG4GbK^尰øGGGGbi_ө@///G@bG4GbTG8/\Dc GB"G[@R"@2"@Zk//GG4GTG`bGG/\GG GGDTGp="@b+ \p]GGGbtG @ /O\ 4GG4Gb>K^G@G&E4GDpG/ [@Zkp4G`/[//@ZkGGb#?EV-_G/ ` `LGG4GbK^//` fŰ@È"G4Ga[@Zk`G4Gd[@Zk/GGG4GTG0b\D GGb#/#_GGG4GbJ^GG4GTG0bC\ӣ@ GGb#gD _GGG4GbJ^尰Cb#pDG/`&bX F (FX@F/@///{_GGG &GGGbQ]cGG4G[@Zk TGGG &GGGb/ Q] TGTG(f/G@bG4G0bTGC/\ӧ@c GBD8"a"G[@R"@2"@ZkCGb#D/fX`D`tG5_GGG &GGGpbR]eG4G[@Zk(fGtGG &GGGpbR](f/TGGGGGb8_DGGD G~XD{(y/GG4GTG0bZ\ f Gt`D/ tGGb#/( _//GG GbTG]dGG4G[@Zk/`0cu`@`D///G GTGb]0`u`@`D/ G@CB A8""GDd@R"@2"[/@ZkCGD+`XD/'(%/ GGGGbGG _ө@?E`XD(ÈG4Ge[@ZktG///GG4GTG`bGG//\GG GGDTGh="@b* \h]GGGbtG @ /\ 4GG4GbI^G"@G!E4G?DqG[@Zk"h4Ga[@Zk/// tD tGGGG &tGbT]ө5@ 8 EGGb#?E/_//G ` `GG4GboI^//` fŰÈ"G4Ga[@Zk`G4Gd[@Zk/,GG4GbH /]G//gG4Gb ]nGb#O_GGG4Gb/;I^`S GG0`@)!),)H!"A"a"7!B@B`B2F3F?0`D//? n`=tGG"b#(_GGG4GbI^ӘGGTGGGPbG"E^iG4G[@Zk ä`@&1`@ Gd@7H`//i.iJSiJ9,@! t)H tFi>G&1@)! ///d/GG GdKdK/ ///o_@/0`@X.#XJ.J ///__Ӷ@@#. AJp`@cDW Kg9C p`D/ ``6/8 Ep`D@/`xF.JB_Ӷ@/ ///.#J8_ӳ@DP@//X Ep`D@/`XF.J&_ӷ@/ ///8/#8K_Ӳ@_D0@Gi@b#///_ӈ"5 G0`@4Gba[@ZkG GGTGGGGPb"nD^cG4G[@Zk|*G$,$H$H//G_.uHTJ)!F>.R"J)/Y)K)? Em/bG4Gc[@Zk w///`RG",HD/ 4G`çu@@``"X="P]"H}"b#G_`=//;H=P=X]I-1D2DIID2 XF. $/HPXF5@Xݢ`FBFF!H=P]F@X}:G`C?G jG@ H=P}5@5BX=#EqDCCFD `@C Db#_X] 0D@ @@ ?FD`}$dB5Jd1HF@ G.JF 4G //uB@@"8="0]"(}"b#@_@8D?'0]&9#D' A0"{#(G-4C5 AtCByFF? FB@$@GItFSFX2DF? =8ݠ0&' A5 A"{#( xFB@fC@wD&F@xDCfDgDF`%8(ݢ_%5 A0J!?# AFDA$C/F jFDF FDE(05 A A8]5BFPCCOCqGDF'FF/{ 0 Eb#/f_8}/` ``F 0EC 3J`s/// b "="]"}"b#d_ ]Z&}&=a"4?"",@@vB1A1ADHFDFGXF$E,A/=}$F]  S%CW%CfC&G_AD@E0=&F `"D?@B4D/ "//}UB]FB_BrFUF@b#////_= ݠ }` ?DC 2_J@ ÈbG4Gs[@Zk4G///G4Gd[@ZkG ///¤G4Gf[@ZkGG]]}ݤ=]#k//"/,s")"/"/ {GGGG{#P#4G/#@0 p`0 q` 1 q` 1AFF/?`qB C #/k/// #k/1?q/` 1 q4G #/k///BX` B` C #k///BL1B` C #k///0B #0CDk///6 H6@JG/DOF 2@ G CGq[16`J6JoFF!J3B>RrB[R5AJ>[`X/[>1@`1@// C #/k///2NB` C #k//FF #/k///#~^{#^GG_//G /"" B @G]] #k//CB#@^~@F^~޴^~GGG>/G{/b#_GGs/Gb#_GGpb#/_Gg/C=4G P5J DJ aFTFUB`C7JG? X¦JwBWBWB[4G7J AYDFDJFVFWBF&G$K!GYC91 C = }[ B0B8b(bpX(czZkAX(]H+AY cYN]_n]Y/3[[G_c_0ݙ%03H2DJ2FrFF&8=8ݢ6CE@&01@C /0@CEE"$0BSF8bE1@F0FFF}SZ\[/__[/wZ^MzZk0B[8bX _@]@c`pX/c>zZkAX/*XE&0B%H'DBH=H}[8bpXc-zZkHbAX*XL_] _l]Y/[[G@_0B8b/c _P%P2H1%JX=1DQF2D`=%hh6JGBp=p[pX/czZkAXHb*XL_] _l]Y[`G17%J[F_c _xx27HQFrFeXKGC91C[w!C//W CFpFC!CF LH0CFPBDKPB`CCGPB0pB` C2C1FTNEJ6C2FVBVB6J1vB "1"QC1è"p9#YC9C C!DLQC% /`H0C DPBPBPB!pB C4CBsFNEJ6CrFVBVB6J3vB`bs"SCs/"p9#XCx ///ƤHD@4@GG@gB///K%0B8b$J!F1Q B=[pX/cnyZkEX[!X _ #XݠBB5tBpF[/_ݙ=/c&7CFN$K;CF@{CA@R?@&B// 0CbFNJ4CFTBTB4J4B""T4B@eè¦"p"Q6B1@^/pG:CbG C/ [ODK CG@@@@@@ C !CBG2L%H&CGF@F@&H&C edJaF"PpB //¦p"JFUB1CG4N @$Jb7C/ GWBWBWB7C ;CBGzOEK CG@@@@ H C E"DJAF! AAB!/Ťbps"HDF@&4G'@ŤHFB01A[pX0B8bcxZkEXHb!X #XL_] _l]Y/[O\H_o]ZG0JD _1H0FQFE[_TBŲ/'///91B% 0BŲ/G0HD&H5@TGFD6HH0FFFH%FD5@8DDxFXF@///%?Z/c@//  õ5B4GD/D/tG$Gpb#_GG]]}ݤ]} #k//N_[/c//L_#[/c//L_E[/cA//\{#Z/"/?9#/L_o[/ck//O_x[/ct//#^~^ ~(0GGG>////G///G]] }(0@#/k///#G @u!@AG c;fKfK`Xb#/_G//=b#GG*X@c_G/Gb#/_G/G]Gb#] }(0@#//0[0 B/C !Cp@DD2LW`J$H%H5CD4CDp F3uBU1BUBUBtBBs !C1F2L$H4C!FTBTBTB44B 5C1FNEJ C2F@@@@ H  B/ 0$H!DA4@!aBk///J"FPBpBk///21 B4Cp@BRFRFNW HքJJ CSF3CTFp F  @A1BA1@A!@@ @2 4C1FN@քJ3C4FSsBSsBSB33B `!C1F>5L%H2C!FRRBRRB2@J12B {JFSBs@ k//J"FPB@ k// /_R"/B?BP#@FX^~`^h~px޴>GGGG/ /#G_b# D//y@_Gb#GF_Ŧb#G("JF@_Gb#G:_'b#G$HF@ @_b#G_ D6%H%Hb#%Fg'DTBTB6JJTB1&J3fJFCF&JfJRRB0BaBRRBpBa!@RRBPBA!@PPBABPBA?@=]G[[/,XmY0Y/ѴZc /_Gb#/_ n/G,"Gb#_ GGb#_ɦJF@ @4G9///D6JJG1%E#F FQ1BQ1B6%K%KQ1B:FK0J'G#DFKJA!@YCBA!@y9CpBA!@Y9CPBA9@P0BA?@PB=  ][[,X/mY0YѴ[/c 4G4GT`GGGb#_Gb#/_Gb#/_GGb#}_G///ĤG_b#:_ GG,"b#_ Gb#IE@._GGb#z_Gb#HD@ @Y_Gb#V_ D6HHb#)#DIDA!@A!@6%J0JA!@%J2FJcFJ'FFJSsBBQBSsBGg@q1BSsBG@Q1BA'@QqBA?@Q?B(=0=(0][[/,XmY0Y/ѴZc /_Gb#/_ /G("Gb#_GGb#'_ǦJF@ @4G9///D6JJG1)G#G FY9CY9C6%H:FKY9C%H0J#FFK'DJQ1BVCBQ1BvBa!@Q1BVBA!@V6CA!BVBA?@8ݶ@=8@][[,X/mY0YѴ[/c 4G4GT`GGGb#_Gb#/_Gb#/_GUGb#_Gb#_G_b#E_ //w_GGb#_%Gb#_$I #E @k_GGb#_GH6HcDօHF@DWB i@WB3 i@4G0`%E6%K8K%K'G#D:FKKA!@WB FKCA!@YCd@A!@y9CD@Y9CDBA9@D@A?@HH[P=P][/,XmY0Y/ѴZc /Ҵ[c@4GGGb#\_Gb#Y_G/// (A¤A' \A Ck///G//G//4G//TG//tG//tG //G//G//G '@@F \@Ck//DDTG/C@//DDTG/;@//8D0DTG/3@//XDPDTG/+@//xDpDTG/#@//xDpDTG/@//ؠDРDTG/@{//DDTG/ @s//GTGG/l@/// c tBc tB4G``///P@FTGPD/X //$K$KG!G CL@ C4G/H///@FTG D/@` // äHIDE @4 @4G/0///AFTGD/(@ //#C䤐6EH6HF#FEHH BGDD B4G G@  G@4G@$ ʴXc/@˴ XG/c`4GGGX]`]h}pxݤ=#k//B?B@F/ k/1//0,0H$@A"!@7@BDD"/1"Q.QJ DBAB7@`GD> /q/qK:@,H@@`#7`C;Dr#7`C3DDB{F/ ࡵABaF// //"p/pK3 dBaB7 @aG3D?//q/qKdB3 aB7 @aG3D 1"/;@"1"/`///`p.pJ/?p/pK/`// @k// k//4Gk//"0,0H $@!@7@`GD4G/ k//Q.QJ@1"q.qJ0 BB7 @DDC Ck///Gk//B?B#@F^~ ^(~08@^H~GGG{G@\@@Ck//ĢGb#F G_ӹúuBBBBAGF5BUBuBBBBBB0D5BSFF`GQGUBTFDGF2Db#DG D/_ӗ//ĢpbF/Cd/,KY[_ݙ2CFSNJ;C F 4G`{CV@GZBâGAZC1 H$3BC=[1Y1B;B/c` @/?Zcf@/Ӵ?Zc`4G 4`DG]_#8@FGY`4G//@[c/P///G5C /@?Z /cC//"4CGhb1CGGF;Nv$J!CFp @ 61 @p@CpFZGWHs@s`B``B5[RBRrCRRB@@B#1@"a!@A?@!BG0C01"A1@A0!@z@5D#D B 5@T`DvF;D`FG/DGuAB@B@B@B@BABUAB5ABFUG;DF5F2Db#!FG/ _/$U @"@5"@U"@"@"@"@"@#@U#@#@FSFFF#@FFGAGFGGFG /__//GTG`bF$>^G G $TG`b>^ӃTDGTG//$D!@!@8F8 DF/ @C/ d/D/[!\ d///D[k]GB\?#@bs^G//c\?#@bk^Ӡ@/Gc\?#@bc^ (bG/@Xc /`Xc@4GGw//`X " Gcn`/LXc /lXc4G Cc//lX4GG/c[дCX cWѴbX4GcS ֲCX/c@4GGTFGJ/G#FCcdD@4GxD=$GPbx%G7  $TGD $=^4G-àC C*/@ 4 D%GTGPbF  $D `$=^4G DGá@ 4 D ÀBT"Gxd@R"@2"[@Zk/ G] ](}0@]H}8P#k/_R"/ТGG" % TF@/k/// # & TB@k///" ' TB@k///Gk//GGG{#G//? #~^^~!@ (GGGw!@q@P{\<@Ck///G$GTG8bZ/^.? G8DDi`Gh///G #xb#_` ` ] +  DYG #xb#_` ` Q)" @ @ D! 0DIG #xb#_` ` A8D*  D=G #xb#_` ` 5á5@@(" D! 0D./GGTGb/ /+=^GDG //// // #G uB5BF/1?F/ `ӢxF /F X"01BBwP\B\Ck//G@ wR".J"@@7BFF?BJFF r#'`/FF>DF2"FKDD/;2/;K8G0G9 / ///7.J8FR"0F1 !R"//R"//B B7@FDR"r.rJ dBaB7@FD//`G(/R"0@C2/2KG / // // //G@G4G(bA^G "PB/"Ga@R"@2"[@Zk#% " ccD`Dq& ! cc@#C`Dh/// c'?"c@c qD^/ [// cF`Cu@B5DBFA@пF>//7`ӢuBBBB5BUBuBBBBBBF5B:GpG$D4FUFUBFF2FG@#F6F,#1D/ ///@cs0`JcBc {D!-  sc6`JoFcBc dD/ // //PBb"Gp@R"@2"[@Zk/GG]]} (0#kTX0 X N(`p:XP Ox@O@'@OH' O0 O0@O36X:@;@O; OAB B@xB@BB B0F O8F@OGM O0N@OO)X@OX O_ 8___ `f@Of Ohhr s v Ov@Ovphz|@O} O@O Op Ox@Oؒ@O Oد O@O@O O O@Oxp 8@HpPW0@O8 Oв@@Oh Op+I@ h( !"()+/3P:?0?0AABCHM SV`Xp[^iPnryP0`з@pP pH@0Z8f@`Б(0P"@(P*he,`,`4@` 0``cP@p@P PPp@P0 P P@`p@@0@P`!# $p%P'@))*+-..P..@/`//00p113@3333@4 5p55506@6666708@8`::::;p;;;0<@<<= >> ??A0D@DPD0EE@FPG`GG@JKLLLLMM N@NNO`OOpSSSST`TTTU U@U`U@VVPWX X0XXXYYZ\]@^P^`^p^_`_p_``aabdee@fPffgg g0ggPhphhiiijjjk k`lllllm@no oPooop`pp@qpqqqqr rPr`rr@ssstu@uPu`uuuuvv0vvvv0wPwww@xxy0zzzz{{|}`}}~Pp0@ Ј ` @P` @`p@``@0`p М@pPp0 0 0@P`pP`pв @p@p0@P`@P`P`p0P00`P  `@0`.0 8? ?0?P?`?pCCP[@kp@@0`p @pкp0p @P@P @@00@  @ 0  `     `0@0`p P!T$ @ LIBZ_SHR32@ CMA$TIS_SHR@DPML$SHR@LIBOTS@DECC$SHR@SYS$PUBLIC_VECTORS%SWISHCompaq C V6.5-001TRANSFER$BREAK$GOmain 9 9 9 9: 95 4; 2; 96 9 > > > > > > > > > > > /> /> 1> 2> <> E> I> Q> U> Y> Y> `> a> p> p> x> |> > ~> |>  > >O > > > > > ? ? #? ? ? &? &? +? /? > > :4G O; R; U; X; [; :  #: `  r:P p :  %?v   2:` 0 R :  :  9v ,@p\    printTime a 3: ,: ,:  ,: 5: 5: 5: 5: 7: ::usage printversionP p swish_newP q : : : : :  : : :  :  : p` swish_close_ : : : : : : : :p isDebugWordnew_swish_params%free_command_line_params0is_another_param0 j; j; @p next_paramp+ o; o; s; y; Pget_param_numberk }; }; ; ; ; ; ; ; ; ; ;  $get_command_line_params ;W ;_ ; ;_ ;W > > > ; ; ; 5< ; ; q:D ; ; ; ; ;i ; ; ; ; ; ;  ; ; ;  ; 0<  ;  ; ; |< <` ; < < <$ < <J ; < ; ; < <6 ;, ; < < < < ; ;  ; ; ; ;) < < !< <* I< O< O< P< ;D ; ; ; ; ;g\ ;$ : D: D: B: U: V: [: \:5 b: c:  5<7vx@84@  u<v`,   <0  ;wv4 DdP p@   ;'v LX40"fetch_indexing_params  fetch_search_params  < < < < < = = = = = = = $= $= 0= 0= 0=  >= >= >= D= D= D= D=  D=  D=  D= D= D= D= D= D= D= D= D=" g= j=  = = = = = = =  = = = = =j = = = = = ='P =  check_readonly_modecmd_dump cmd_index cmd_merge cmd_keywords cmd_search)0write_index_file) L? L? L? L?> N? U? [? n? {? ~? ~? ? ? ? ? ? ? ? ? ?,#display_result_headers/swline_header_out/C ? ? ? @ @ @ @__main) PROPLIMITCompaq C V6.5-001/ GetPropertyByFile/. 0 0 0 0 "P0p SwishResetSearchLimitP0 0 0 0  1 1 1 1 1 1 1 1 1 8P1P ClearLimitParams1 31 .1 31$ P2 SwishSetSearchLimitP2< S1 S1 S1 W1 ]1$ 3 setlimit_params 3\ d1 k1  s1 {1 }1 ~1 1 1$@`4  test_prop`40 1 1 1  1(5  binary_search5 1 1  1  1 1 1 1 1 1 1 1 16'P 2 2 find_prop7  sortbysort7 2 07  sortbyfile07 2 create_lookup_arrayparams_to_props load_indexP7P Prepare_PropLookupP7 3 3 3 3 3 z2 3 3 J3 F3h ?3  3I 3P 3_ 2 3 3D F3 3 3 3 3 3 3 3L F3+ r3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 =2 92 =2 D2 D2 H2 V2 d2 f2 f2 f2 q2 v2 v2 J 2 2 2w 2 2 2 2 2 2 2 2 2 F3;0 3 31 L3 L3 V3H 3\ 7 p3 7 ~3 7 2v74<Xv7:l`> h8 Jh3/vh8p888t09t<'v78(88@p` P A@ LimitByPropertyA~ 3 3 3 3 3  3 3 3 3 34P 4(DB_WRITECompaq C V6.5-001C  write_headerC 0 0 0 0 0 0 0 0 0 0$ 0 0 0 0 0$ 0 0 0 0 !0 "0 "0 #0 #0 $0 $0$ &0$ (0$ )0 )0 *0$ +0$ ,0 ,0 -0 -0 .0 .0 /07 /0 70 G0 L0< D /0$ E /0$ G /%0$ `G /'0$ G /)0$ H /+0$ `H /,0$ J 40L0 \I /00v\IdI ( I //0vI$I ( H /.0vHH ( H /-0vHH ( G /*0vGG ( F /$0vFFF( F /#0vFF$ DF /"0vDFLF$ E / 0vEE$ E /0vE$E ( D /0vDD$ dD /0vdDpD$ 1 @1 @1 C1 F1 I1 J1 N1 Q1 R1  X1 Z1 Z1 _1 k1 k1 t1 t1 t1 w1 y1 1 1 1 1 1 1 1  1 1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 V1~ V1  1 1 1 1 1 1 1 1 1( 1  1 1 2 1 1 2 2H 2 2 2 2 2 1 2Tp 0X` write_MetaNames0X 02 2 2 02 22 02 02 02 72 92 92 ;2 =2 ?2 =2 @2 B2 C2 D2 E2 F2 G2 =2  =2 J2 K2 K2 K2( K2 Z /K2vZ Z(`'Z write_hash_words_to_headerZ ^2 S2  S2 f2 g2 d2 a2 n2 l2 p2 p2 y2 {2 w2. t2^ 2R 2 2, 2 [ /2v[\(*\ write_integer_table_to_header\ 2 2 2  2 2 2 2 2 2 2 2 2@ 2: 2 2, D] /2vD]L] (@!]0setTotalWordsPerFile]M 2 2 2 2  2 2  2$^ DB_Create^ 2  ^ DB_Remove^ 2  ^ DB_InitWriteHeader^ 2  ^ DB_WriteHeaderData^ 200_ DB_EndWriteHeader_ 2  0_DB_InitWriteWords0_ 2  P_ DB_GetWordIDP_ 2  p_ DB_WriteWordp_ 200_pDB_WriteWordHash_ 200_PDB_WriteWordData_ 300`0DB_EndWriteWords` 3  # `DB_InitWriteProperties ` 3  @` DB_WriteFileNum@` 300p` DB_RemoveFileNump` 3  $` DB_InitWriteSortedIndex` "3  ` DB_WriteSortedIndex` '300#`p DB_EndWriteSortedIndex` ,3  aP DB_WritePropertya 03 03p"pa0 DB_WritePropPositionspa 7300(a DB_Reopen_PropertiesForReada =3'DB_READCompaq C V6.5-001a initModule_DBa /  a freeModule_DBa /  b read_worddatab 0K 0 0K 0K 0H 0[ 0[ 0X 0 0P #0N $0R &00 c =&0 b l=$0vbb ( b =0vbb b$ db <0 b l<0'vbb 0A 0C "1T 0$px DB_decompresspx *1 *1 *1 *1 ?1 ?1  K1 H1 P1 N1 X1 [1 a1 b1 a1( e1 _1 s1 v1 s1 z1 z1P z1 z1 z1 z1 1 1 1$ 1 1 1 1 1 1  1 1 1 1 10 1- 1 1 1 1 1 1 1 1 1 1 1 1$ 1 1 1 1 1 1g 1 1 1 1 2$ 1 1 2\ Pcheck_sorted_indexPB 2 2 2 2 2 *2(dump_metanames 22 22 22 22 22# 82 :2 >2 C2 G2 K2 K2 Q2 Q2 T2 T2 \2 `2 821 824 m2 m2 m2 m2!dump_file_propertiese {2 u2 u2 2 2 2 2 2 2 2 8! dump_single_property 2 2  2 2 2  2  2 2 2 2 2 2 2(&SWISH2Compaq C V6.5-001SwishNewh 5 5 5 5 5  5 5 5  5  5  free_indexp0free_swish_memoryp 6 6 5 5 5 5 5 6 6 6  6  )6< .6 .6 16 46 86<  J 6v0 SwishClose+ I6 E6 N6 N6 N6p SwishInito [6 b6 b6 l6 t6 t6 t6 w6 z6 d6 e60 SwishAttachE 6 6 6 6 60 6pSwishSetRefPtr* 6 6 6 6`SwishWordsByLetter 6 6$'DOCPROPCompaq C V6.5-001А freePropertyА :8 980X freeDocPropertiesO J8 F8 F8 :8 98 J8 P8 P8 P80 T JNM8 x  freefileinfo/ _8 b8 h8 h8(DecodeDocProperty ~8 ~8 8 8 8 8 8 8> 8 8 8 8 8 8,`getDocProperty`| 8 8 8 8 8 8 8("8 getResultPropAsStringC 9 9 9 $9 :8 :8$  JN+9v# SwishResultPropertyStr @9 @9 D9 @9 M9 R9 Y9 :8( :8, g9 l9 t9 w90  JNf9v%ЙSwishResultPropertyULongЙa 9 9 9 9 9 9 9 9 9 9 getResultPropValue 9 9 9 9 9 9 9 9 9 9 9 9~ :8 :8 9 :8 :8 :8 : :8 :8 :8$ D JN:vDL\  JN :v  JN9v` freeResultPropValueG : : : : : #: #: #:XEncodeProperty ?: ?:   P:  \: `: b: b: g: g: k: n: l: V:Z@ v: v: v: v: : : : : :  :[ : : : : : : : PCreatePropertyP` : : :  : : : : :4 pappend_propertyp : : : : ; : ; ; ; ; ;+ ; %; %; (;0`addDocPropertiesC A; <; <; C; E; F; A;H 0addDocProperty a;  a;  a;  m; p; r; r; r; x; x; z; }; }; };> }; }; ; ;0Compare_Properties ; ; ; ; ; ; ; ; ; ; ; ; ; ;( ; ;,P&duplicate_in_mem_property!PallocatePropIOBufferE < < < < '< %<0 uncompress_property,ReadSingleDocPropertiesFromDisk < <  < < < < < <  ; ;  < ; ; ; < R<q Y<k R<q V<k `< `< c< g<P] m< m<W < < < <0  [<7v\   ̬ Z<v̬D\)ReadAllDocPropertiesFromDisk < < <  < < < <  = = = = =0L&SEARCHCompaq C V6.5-001 New_Search_Object 1 1 1 1 1 1 1 1 1 1 1 1 1 1^ 1 1 1 1 1  1 1 1 1(б'SwishSearch_parentб 2 2 0 'SwishResults_parent 2 2 00'ResultsSetRefPtr0* 2 2 2 2`p'SwishResult_parent 2 2 0`'SwishSetStructure $2!в 'SwishPhraseDelimiterв +2 )2 p& SwishSetSortp| 62 12 62 12 12 12 62 =2 =2 @2 @2 @2 @24 &Free_Search_ObjectY W2 Q2  Q2  [2 _2 d2 l2 j240  SwishSetQuery* z2 x2 x2 x2$New_Results_Objectinit_sort_propIDsP& SwishHitsP B3 F3  !p&SW_ResultToSW_HANDLEp M3 "&SW_ResultsToSW_HANDLE R3  `&Free_Results_Object e3 ^3 ^3  k3 l3  n3 u3 y3 x3 t3  3 34 3 3 i3* 3DP@& SwishQueryP5 3 3 3 3$% SwishExecute 4 4 4 4 !4 2 2 2 2 2 2 2 2 2& 2 2  2 2 2 2 25 2 2V 2 2 3 3 3 3 3  &3 03 3 2 2 2u 3 3 3 2l )3 )3 )3 2 2 2_ 2_ 2a 2\ 4 4>  4 4 4 4 4 4 9n 4 4 E4 94 V4 Y4 ]4 d4 r4T о i>4  i4 п }4 vt<  "c(4  Kc27v< `L48'vl @limit_result_list query_index0!SwishSeekResult0 4 4 4 4 5 5 5 5 5 5 5 5f !5 !5 !5 !5 !5 !5 !5 !5 %5 )5 )5 )580`x!SwishNextResult` 85 85 85 :5 D5  \5 ]5 d5 j5 t5! v5 a5(p$ parseterm 5 5 5 5R 5 5 5 5 5 5 5  5 7 5 5 5 5  5 5 5 5 5 5 5 5 5 7 5 5 5( 5  5  5  5 5 5 5 5  5  5 5= 5 5  5 5 5= 5 5 5 5 5= 5 5 5=  6 6  6 6 6  6 $6 %6 (6 +6 .6 5u) ^6 [6 [6 b6 <6@ >6 C6 5F< H6 K6L  Gp=6v  d u5_v d t0L  ~u5t t u5vt|  operate!newResultsList9 6 6 6 6 6 6`!addResultToList 60test_structure@# getfileinfo@ 6 6 6 6 6 6  6 6 7 7 7 7' (7 +7 07 97 77 97  =7 =7 57 F7 O7 O7 6 6 6 6 e7 o7 t7 t7 7  7 J: M: E: S: P: S: S: S:H S: S: X: [: _: _: _: _: V: ~: : : : : : : : : : : : : : : : : : :  : 6 6  t:; 7X  q]7x  7  p:v (  isbooleanrule isunaryrule getrulenum`#andresultlists 7 7 7 7 9 7 7 7 7  8 7,@ 8 t (}70  (}7vL(l @# orresultlists ,8 38 F8  X8 Y8  \8 ^8 `8 e8 h8> D80 D80 D86 }8 8@marknumismarkedinitmarkentrylistfreemarkentrylistP# notresultlistP 8  8 8" 8 8 8D 8 8# 8 8 8F 8 8F 8 8@ 8 8 8 8 87 8 8  8. 8 8) 8@ 8 80< 8  Qx8v  x8v  w8v4L  )x8v"phraseresultlists 9  9  9| 9o 9 9 9 $9$ $9 $9 $9 $9o $9 (9 -9 "9 49 69 A9 96H t (}90  (}9vL(|`@@"addtoresultlist@t Y9 Y9 Y9 Y9 Y9 Y9 d9 b9 b9 e9 i9 H!isMetaNameOpNext q9 s9 v9P!make_db_res_and_freeP`"freeresultlistPB 9 9 9  9 9 90  }9v freeresult!8!compResultsByFileNum 9  ! "sortresultsbyfilenum  9 9 9  9 9 9 9 9 9 9 9 9 9 9( 9 9  94 "notresultlists_ 9 9 :  : : 9 :8P`(! icomp_posdata` ,: mergeresulthashlist+ RESULT_SORTCompaq C V6.5-001)@(compare_results_single_index 1 1 + 1 1 1 1 1 1 1 1# 1P 1 1 1 1 14 14( 19@ 1(compare_results 2 2 " 2 2 2 2 2  2 12 72 A2B D2 D2 D2 2, 2,4 20@ )2'LoadSortedPropss a2 a2 a2 a2 s2 {2 z2 ~2 ~2 ~28&sort_single_index_results( sortresults A3 A3 A3 2 2 2 2  2 2 2 2 2 2 2 2 2 2 2 2 2  2  2  2 2 2 2 2 2 2 2 2 2 2   3 3 3 3 3G "3 #3 H3 F3 N3 T34 ` I3#MEMCompaq C V6.5-001`)ecalloc" 2 2 2$`0)emalloc01 2 2 2 2 2$p*erealloc* 2 2 2 2 0)efree0 2  P`* Mem_SummaryP 3 allocChunk`0*Mem_ZoneCreate`q 4 2 2 2 2 2 2 4 4 4 4 4 d 4'vdl,`0* Mem_ZoneAlloc0 4 4 4  4 4  2 2 2 4 41 5 54  ʆ4  4v0<vLX P) Mem_ZoneFreeP< 5 5  2! 2# 5 2((  f"5  f!5  f5  f5 ) Mem_ZoneReset 9 H5 C5 J5 2V 2X M5( x fR5 ` fP5) Mem_ZoneSizeZ [5  `5 c5 a5 c5 a5 c5 a5 c5 a5x+ KEYCHAR_OUTCompaq C V6.5-001@* OutputKeyChar@ . . . . . . . . .( . . . .8T(COMPRESSCompaq C V6.5-001P+ sizeofcompint< 5 5 5 5 5 5 `- compress1w 5 5 5 5 0 5 5$ 5 5 5 5 5 5 5- SW_compress2G 5 5 5 5 5 5 5  0`+ compress30 5  5 5$ 5 5 5 5 5 5> 5 5 50 5 5 5 5 5Pp- uncompress16 5 6 6 6 6 p+ uncompress2 6 6 6 6 6 6 6 6 6 6 6 6 6 `-PACKLONG * -6 '6  -6 -6 PpP- PACKLONG2p* =6 =6 =6 D6 @- UNPACKLONG % O6 O6 O6 U6 Pp + UNPACKLONG2p  ^6 e6% ,compress_location_values 6 6  6 6 6 6  6 6 6 6 6` 6F 6 6 6 6 6 ,( x,compress_location_positions 6 6 6 6 6 6 6 6 6 7 70 7o 7 7 7 7 7 7 7P 78 7 7 7 7, 7compress_location'0 -uncompress_location_values0 H \7 Z7 Z7  Z7 `7 k7* -uncompress_location_positions |7 y7 y7 y7 y7  y7  y7 |7 y7 7 7 7 7 7 7 7 7 7 7 7 7 74 7 7 7 7 7 7 7 7d 7 7 7 7 7 7 7 7 7 7c 7 7 7 7 7 7 7 7 7 7$ ,CompressCurrentLocEntry 7 7 7 #7  57 27 .7 .7 27  :7 K7 K76 S7{ 7 7 7 D Ȓ7v  4H  @,compress_worddata 7 7  7  7 7 7  7 7 7 7 7 7 8 8 8$`  +uncompress_worddata d 8 8 8 8 8 8 8 8 8 %8," +remove_worddata_longs Y J8 [8 a8 d8 k8 k8,4(SWSTRINGCompaq C V6.5-001@ -lstrstr@ . . . . . . . . . . . . . . @ /getword P3 getconfvalue c/  c/  m/ m/ o/ t/ v/ v/ y/ w/ w/ / ,0 3replace / / / / / / / / / / / / /? / / / / /LPP 2 isoksuffixP U / /  / /  / / / 0 /0 2 SafeStrCopy0 N / / / / 0 0 0(  `2ccomp  0  @ 2 sortstring@ J 0 0 0 0 0 0 0 0(@ p2 mergestrings@ #0  #0  #0  #0  -0 /0 .0 00 10 40 60 80 90 80 ;0 =0(  (2makelookuptable  q D0 D0 D0 D0D D0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 &@ 82makeallstringlookuptables@ J00p 1 parse_linep R0 R0  R0 R0  `0 _0 B/ / / / / / / +/ +/ +/ +/   7/  7/ L/ L/ L/ N/ L/s N/ +/  V/ Z/  Z/ i0 f0  s0 y0P 4 g0'v4 ` ,! H! @" 1freeStringList@" > 0 0$ 0 0 0 0# 1 SafeMemCopy# I 0 0 0  0 0 0 0(# 1 isnumstring# > 0 0 0 0 0 0,$ P1remove_newlines$ @ 0 0  0 0 0 0 0,% @1 remove_tags% L 0 0 0 0 0  0 0& 1 bin2string& ? 0 0 0 0 0 0 0 ' 1 str_skip_ws' 3 1 1 1Ԙ 1 1 1 ( 0 str_trim_ws( G 1 1 1 1 1 1 1, ) 0charDecode_C_Escape) %1* 21 %1* %1% *1 21 P1 ]1 _1 _1 21 K1* `0 strtolower* ; u1 q1 q1$ u1 u1 z1( z1 + /char_ISO_normalize+ 1 + P0str_ISO_normalize+ i 1 1 1$ 1 1 1 1 1 1 1 1, 0StringListToString, 1 1 1 1 1  1 1 1 1 1 1 1 1  1  1H0. 0TranslateChars0. ^ 2 2 2 2 2 2 2 2 2 2  . /BuildTranslateChars. 2 2 2 !2d !2 !2 $2 (2 1l 1l 1l 1k 1l 1k} 1l 1l 1k 1l *2 32 32 32 32 32 32 32 32 02, / H,2Wv / 0 0 ,0 80 X0 l0 0 ,0 0 @02 / cstr_basename02 ! G2 I2 I2 I2P2 p/ str_basename2 . S2 S2 S2 X2 X2 `2 / cstr_dirname2 X b2 b2 b2 l2 p2 p2 r2 q2 v2$3 x.estrdup3 7 2 2 2 2 2, 2 4 .estrndup4 S 2 2 2 2 2  2 2 2 P5 . estrredupP5 . 2 2 2 2 2`5 h.icomp25  20thousep5 . comma_long5 2 2 2 2 2 2 2 2 2 2 2 2 2 2  2 $ $6 2v$6 06 (7  t%ERRORCompaq C V6.5-001`7 p3set_error_handle`7 L2 p7 5SwishErrorsToStderrp7 Q2 7 3progerr7 , U2 Y2 Y2 \2$P8 5 progerrnoP8 - l2 p2 p2 s2$`9 5 set_progerr`9 ( ~2 2 ~2 ~2`9 5reset_lasterror9  2 2 9 P5 set_progerrno9 2 2 2 2 2: 05progwarn: , 2 2 2 2$; 4 progwarnno; - 2 2 2 2$< 4 SwishError<  2 2  < P4SwishErrorString< 3  < p4SwishLastErrorMsg< 3 < 4getErrorString< Q 23 ,3 ,3$ 13 13 13 13 13 13 33$= 4SwishCriticalError= P M3 Q3 P3 P3 P3 P3 P3 P3 P3 R3 > 4SwishAbortLastError> ^ i3 g3 i3 g3 3e 3R 3g 3g q3 q3 q3 @? o3v@? `? $ $? 3m3 ? m3) DATE_TIMECompaq C V6.5-001? 6 get_cpu_secs? ? 6 6 6 6 6 6p@ 6 TimeElapsedp@ # 9 9 9$A 6TimeCPUA 9A P6 getTheDateISOA : 9 9 9 9 9) METANAMESCompaq C V6.5-001"A 7add_default_metanamesA  . . .(PB p7 addMetaEntryPB - . .  . create_meta_entry0C 7addNewMetaEntry0C . . .  .  .  . . . . .  . .  ., 8C ִ.7v8C DC pC C DC C PD P9ClearInMetaFlagsD 6 . . . .4 . . .0E 09init_property_list0E s / / / / / / / / /  +/(p%F 9getMetaNameByNameNoAliasF / F/ B/ G/8 F/0 J/ H/G 8getMetaNameByNameG = W/ S/ X/8 W/0 ]/ Y/ Y/ Y/H 8getMetaNameByIDH  h/, h/ k/p%I 8getPropNameByNameNoAliasI / x/ t/ y/8 x/0 |/ z/J 8getPropNameByNameJ = / / /8 /0 / / / /K 8getPropNameByIDK  /8 / /pK p8 is_meta_entryK & / / / /PK P8freeMetaEntriesK P / /  / / / / /00M 8isDontBumpMetaNameM O / / / / / /( /  " N 7properties_compatible N 0- RESULT_OUTPUTCompaq C V6.5-001$@N `9initModule_ResultOutput@N / 9 9 9 9$N 0>freeModule_ResultOutputN !9 !9 (9 .9  69  <9 @9 @9 @9 E9 K9 K9% K9 S9 Q98&P =configModule_ResultOutputP p9 n9  n9 n9 r9 n9  q99 {99 ; ; }9< }9*A }9C }9( Q ~9/v Q PQ 4Q Q Q `R =initPrintExtResultR N 9 9  9 9 9 9 9 9"(0@S =printSortedResults@S 9  9  9 9 9 9 9 9 9 9 9 : :  : : : : < )< )< )< )< )< 2< 5< 7< 9< ?< C<( ?<  ?< N< 5< 5< : \ DU : W X<printExtResultEntryW >: 7: 7: 7: 7: >: >: C: C: C: X: L: G: @: 4#`Y :printResultControlChar`Y B o: o: t: t: w: x:("Z <printTagAbbrevControlZ : :( : : : : : : : :( : : :'\ <parsePropertyResultControl\ :  :  : :   : : :d : : : : : : : : : : : : : :  ; ; ; ; ; ; ;<P'P_ H;printPropertyResultControlP_ "; "; "; *; -;  :; :; >; D; F; U; T; \; [; b; b; e; b; e;  n; u; v; y; ; ;+ ; ; ;<@"addResultExtFormatStrc p:hasResultExtFmtStrc , ; ; ; ; pd 0:resultHeaderOutd 0 ; ; < < < *printStandardResultProperties+d 9addSearchResultDisplayPropertyd 8 X< X< ]< c< c<$'`e 9initSearchResultProperties`e s< o<  < < <  < <  < < < < < <@ < < < @$HASHCompaq C V6.5-001g P> string_hashg U o- k- o- o- o- o- o- o- o- o- o-h ?hashh  v- v-  h ?bighashh  }- }-  h P?int_hashh  -$ -p`i x?numhash`i - `i -0@i `? bignumhashi - i -8@i 8? verybighashi  - -0#j >add_word_to_hash_tablej -  -  - - - - - - - - - -4"k >is_word_in_hash_tablek A - - - - - -!`l `>free_word_hash_table`l ( - . - -\$LISTCompaq C V6.5-001l ? newswline_nl : , , , , , ,(Pm `A newswlinePm / ,> , , ,(m A addswlinem ( , , -pPn A dupswlinePn 9 - - - -  -,o A addindexfileo R - - - - - - "-4p @ freeswlinep  7- 3- 7-,p P@ init_headerp A- A- A- A- D- F- F- G- G- K- K- L- L- P- P- Q- Q- U- U- V- V- Z- Z- [- [- a- a- d-{ d- e- e- f- f- g- g- h- h- i- i- k- u-(t @ free_headert c - }- }- }- - - - -%INDEXCompaq C V6.5-001 w @BinitModule_Index w 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  2  2 3 2  2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 !3" #3 "3 Pp| xLfreeModule_Indexp| 53 73 @3 C3 J3 <3 Q3 ^3 ^3 \3 h3T h3 k3 k3 m3 m3 o3 o3 s340 KconfigModule_Index 3 3 3 3 3 3 3 3 3 3 3 3 38 3 3 3('remove_last_file_from_list0 Iindex_no_content0 &4 &4 &4  ,4 +4 &4  (4 34 ;4 ;4 C4 G4 4 `Dalloc_location s4 q4 s4 q4 q4 z4, 4 4 4 4 4 4 4 4 4 4 4 4 4 4  4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 z48 46* 4# 4  4! 4 4 D new_location 4 Dis_location_full e 4 4 4 4 4 4 4 4 4  4 4 " Dadd_position_location 9 4 4 4 4,` K do_index_file` 5 5 5 5 5  5 !5  25 45 ;5 =5 M5; 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3F 6 6 o +6  96 96 ;6 96 ;6 >6 96  G6 F6< 6 @ Dgetentry@ Y6 Y6 [6 `6 [6 `6 g6 k6 p6 p6 y6  {6! 6 68 Eaddentry 6  6 6  6 6 6 4 4 6 6 6 6 6 4 6 4 6 6 6  6/ 6 6 68 t 6vt  ܕ 6vܕ  0IaddCommonProperties 7  7  7 7 7  7  7 7  *7 57 57 47O ;7O 7 7 7 7 7 7 C7 A7 C7 H7 M7 L7 S7 U7 Y7 Y7 _7 ^7  j7 l7 m7 t7 u7' z7 |7 }7T =7v  Xdindex_path_partsP H getfilecountP 7 (` IgetNumberOfIgnoreLimitWords` 7 - H getPositionsFromIgnoreLimitWords 7( 7( 7 7; 7 74  7 8 8 8 8 8 8 8 8 8 8 8 8- 58 88 88 7P 7P 7P :8 :8, :8 :8 >8 B8 H8 N8 W8 Y8 [8 [8 ]8 c8 e8 e8 n8 r8 n8 n8 t8 u8 {8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 a8( S88 8 >8R 89 8 8 8 8 8\ 7v  $ HadjustWordPositions 8 8 8 8 8 8 8 8 8 8 8 8 8܂ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8  8 8 8t 8 8 8 8 8 8 8 8 9L@Ъ PHentrystructcmpЪ  %9 #9 #9@ hH sort_words 49 -9  -9 -9  49 ?9 C9 C9 C9 C9 C9 C9 C9 C9 C99 C9 B9 G9 G9 G9 G9 G9 sortChunkLocations( 0Hcoalesce_all_word_locations . 9 9 9 9 8 pG write_index 9 9 9  9  9 9 9 9` 9 9  9T 9 9 9 9 9 9 9 9 9 9 9 9  9 : 9 9 : : : : 9 : : :  ": $: $: ": ": $:i 1:l  =    = = = = = =  = = = =  = = = 5: 5:U 5: <: @: .: :) I:T o4:v  |@ Eaddword@ . : : :, : :@0 F next_word0 a : : : : : : : : :< P Enext_swish_wordP z ; : : ; ; ; ; ; ; !;<@build_metaID_list PF indexstring g; ?;' k; g;  g;  p; ?;5 =; 4; 7; =; I; K; I;  W;$*T ;V ;f ; ;= ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < < #< #< < < ; ; 0<P ;v 4 \  B add_coalesced C< :< C< :< :< :< :< :< F< 6= 6= 8= >=I >= I< O< O< M< 4 ]I</v     4$ Ccoalesce_word_locations |< h< h< [9 X9  b9 b9 b9 b9 b9 i9 t9  v9 v9 y9 n9 9 9  9 9 9 < <  < < <  <  < < < < < < <+ < < < <  < < < <, < < < < < < <" < < < <x = = = = = = =\ <l SwapLocDataP G unSwapLocDataP H= H=  Y= a= a= c= c= l=  }= = = =? =$ m= q= m= m=!0$sortSwapLocData$HTMLCompaq C V6.5-001 M getHTMLMeta / /  / / /  / / / / / / / / / / / / / / / / / 0 / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 parseMetaData@ 8PparseHTMLtitle@ H 0 0 0 0 0 0 0  O isoktitle , 0 0 0 0 0 P@ M getstructure@ 0 0 0 0 0 0 0 0 0. 0 0 0  08 pOparseHtmlSummary 1 0 1 0 0  1 1 1 1 1 *1܀ .1 01 01 21 01  91 ;1 <1 ;1 ?1 A1 A1 P1 \1 b1 `1 `1 *1_ *1, V1  f1 i1 i1 i1 i1 i1 i1 e1  v1 1 1 1 1 1 1J 1 1 1 1 1X Nparsetag 1 1 1 1 1  1 1 1 1 1 1 1 1 1  1 1 1 2 2 2 2 2 2 2" F2 K2 J2 1\ 1+ 2 "2 !2 *2 *2 *2 *2 *2 *2 *2 *2 *2 *2 *2 *2 -2 12 12 52 62 52P N parsecomment `2 `2 `2` XPcountwords_HTML n2 |2 n2 n2 |2 2 2 2  2T 2 2 2A  p0 o0& 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 10 2 70 70 ;0 80 >0 >0 H0 H0 H0 F0 S0 Y0 e0܅ e0 o0 p0 c2 b2 3 3 c2 c2 3 3 3 3, 2L @ 3v@ x  P ` }3'v` X   4 #TXTCompaq C V6.5-001 Pcountwords_TXT f Q/ Q/ Q/ Q/  Q/ ]/ W/  f/ f/ $#XMLCompaq C V6.5-001 0Rcountwords_XML :1 :1 :1  =1  C1 C1  C1 E1  G1 I1 \1I e1 j1@ k1 k1 u1 z10p S start_hndlp 1 1  1 1 1 1 2 1 1 1 10 T 1vT ` 4 P @Send_hndl a 1 1 1 1 1 10 S char_hndl J %2 2) 2" =2 C2 C2 .2( X*2v , l append_buffer PQ flush_buffer Z ]2 ]2  c2 d2 ]2  ]2 j2 j2 u2  R comment_hndl T 2  2  2  2 2 2 2 2 2isIgnoreMetaName$FILECompaq C V6.5-001` T get_libexec` ( 4$ 4$ 4$ 5  @Tnormalize_path #5 #5 #5 )5 )5 *5 )5 -5 -5 -5 -5 -5 -5 -5P -5 -5 -5 -5 -5> -5 -5 -5( W isdirectory ? 95 95 95 >5 ?5 ?5 ?50 `Wisfile0 F E5 E5 E5 J5 K5 K5 K5 K5 0Wislink E Q5 Q5 Q5 W5 X5 X5 X5@ Wgetsize@ ? b5 b5 b5 g5 h5 h5 h5 V indexpath t5   V read_stream 5 5 5 5 5  5  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  5 5 5 5 5 5| 5 5  5  5 5 5 5 5 5 5P `V flush_stream T 5 5 5 5 5 5 5, 5 5! Vinit_file_properties $ 6 6 6`$p Uinit_file_prop_settingsp a 6 6 6 6  6 /6 /6 56( Vfile_properties a J6 J6 Q6 U6 V6 W6 _6 a6  r6$@! pUfree_file_properties 6 z6 z6 z6 6 6 6` Tcreate_tempfile` 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6  6 $'METHODSCompaq C V6.5-001'STEMMERCompaq C V6.5-001 W fuzzy_convert 5 5 5p \no_stem 5  Yfuzzy_free_word M 5 5 5 5 5 5 5 5 @Xcreate_fuzzy_word L 5 5  5 5 5 5 5$` [dump_fuzzy_list` G 5 5 5 5 5 5 5 5$  Zcreate_fuzzy_struct D 5 5 5 5 5 5( xZfree_fuzzy_mode 8 6 6 6 6 6 60 Zset_fuzzy_mode0 * 6 6 6 60 6  [get_fuzzy_mode p -6 (6 (6, ,6 ,6 ,6 ,6 ,6 ,6 ,6 36 /6 /6 /600 0Z fuzzy_string0  ?6 >6 A60` [fuzzy_mode_value`  F6 H6  [stemmer_applied N6  P[ Stem_snowball \ U6 U6 X6 Y6 `6 f6 f6 m6(@ [double_metaphone m p6 p6 r6 w6 ~6  6 6 6 @  Z SwishStemWord  B 6 6 6 6 6( XZSwishFuzzyWord  6 6 00 @ZSwishFuzzyMode0  6 60` ZSwishFuzzyWordList`  6 6   ZSwishFuzzyWordCount  6 6   ZSwishFuzzyWordError  6 6   YSwishFuzzyWordFree 6 WWordSize e 7 7  7 8 7 7 7 7 7 78 7 7@ Y ContainsVowel ! 8 8 8 X EndsWithCVC L 58 58 58 >8 >8 ?8 ?8 >80  `YAddAnE  S8$`0 @Y RemoveAnE0  h8$` W ReplaceEnd 8 8 8 8 8 8 8 8 8 8 80 80 XStem0 8 8 8 8 8 8( 8  8 8 8 8 8 8A 8 9 9 9 9,D) DB_NATIVECompaq C V6.5-001  \initModule_DBNative 92 92 92 =2 A2 ?2 L2 J2 G2 J2  P2  S2  P2 S2 c2 `2 _2 ^2 a2 _2 l2 i2 h2K i2 u2 t2 s2 o2  q2 s2( @ `ffreeModule_DBNative@ ) 2 2 2 2(DB_CheckHeader enewNativeDBHandle 2 2 2 2 2 2 2 2 2  2  3(!! ]openIndexFILEForRead! 3  )! dopenIndexFILEForReadAndWrite! 3  "openIndexFILEForWrite! eCreateEmptyFile! G 3 3 3 3 3 "3 &3 &3 ! H #3'v! " " ," < is_directory" fDB_Create_Native" 73 -3  -3 ( -3 /3 /3 /3 I3 H3 I3 J3 J3 M3 P3 3E Z3 Z3 ]3 c3 h3 3P 3Q l3\ o3 o3W 3 3 3 3@ 3 3 3 3H 3 3 3 3 3 3H 3 3 36 3 3 3 3 3 3 $ H m3v$ $  #  [3 " 2!C37v" " " " " " |P' `eDB_Open_Native' 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 2y 2z 2 2 2  2  2 2 2. 2 2 2 2 2 2 2( 4) 4 4 4 4 4"' 4# 4 4 40 + H<4v+ + @ + H<4v+ $+ @ `) |4 P* H<2vP* `* (8 * H<2v* * 4* < ) H<2v) ) 08'v`) l) t) * d@!, ]DB_Close_File_Native, 4 4 4 4 4 4 4 4 4 4 4 4  $p- dDB_Close_Native- 4 4 4E 4= 5 5 5 $5 $5 %5 .5 05 05  05/ dDB_Remove_Native/ ? 35 35 35 35 =5 =5 =5 &/ hdDB_InitWriteHeader_Native/ 7 K5 G5  G5  G5 Z5%@0 0dDB_EndWriteHeader_Native@0 7 ^5 ^5 ^5 d5 d5 g5&0 dDB_WriteHeaderData_Native0 ? j5 j5 j5 r5 r5 v5$%1 cDB_InitReadHeader_Native1 ( z5 z5 z5 5`%2 cDB_ReadHeaderData_Native2 e 5 5 5 5 5 5 5 5 5 $3 cDB_EndReadHeader_Native3 5 % 3 cDB_InitWriteWords_Native 3 1 5 5 5 5 5`3 ccmp_wordhashdata3 5 $3 0cDB_EndWriteWords_Native3 5" 5" 5" 5 5 5 5 5  5  5 5  5  5 5 5 5 5  6  6 6 6 6 6 6; 6 !6 %6 %6 *6, `7 bDB_GetWordID_Native`7 N 66 .6  66 .6  .6  66 ;6 >6 7 bDB_WriteWord_Native7 H C6 V6 R6 Y6 ^64 $9 bDB_WriteWordData_Native9 l6 c6  l6 c6 c6  c6 u6 }6 }6 }6 }6 6 6D 6 6 6 6 6 6 6,$; bDB_WriteWordHash_Native; 6 6  6 6  6  6  6 6 6H 6 6 6 6 7 7 7 7 7 7 7$ 7 7 #7  $> bDB_InitReadWords_Native> )7 #> bDB_EndReadWords_Native> .7 #> aDB_ReadWordHash_Native> 27 27 27 27 C7 I7 N7 P7 O7X Q7Y S7X 9; U7V U7 U7 U7 a7 4@ H<T7v4@ 4l@ < ? H<S7v? @ 0@ @1@ a$DB_ReadFirstWordInvertedIndex_Native@ d7  d7  d7  k7 d7  q7 7 7 7! 7" 7| 7" 7  7 7 7 7 7 7  7 7( |B H<7v|B 0B 8 4B H<7v4B @B XB D0C ha#DB_ReadNextWordInvertedIndex_NativeC 7 7  7 7 7  7 7  7 7 7 7 7 7z 7  7 7 7 7 7 7 7 7 7 7 7 E H<7vE 4E < DE H<7vDE `E 8@#0F HaDB_ReadWordData_Native0F [ 7 7 7 7 7 7 7 7 7(#0G 8aDB_WriteFileNum_Native0G ]8 "@G (aDB_ReadFileNum_Native@G o8 #PG aDB_CheckFileNum_NativePG z8 $`G aDB_RemoveFileNum_Native`G 8 +pG `DB_InitWriteSortedIndex_NativepG ) 9 9 9 9`'G `DB_WriteSortedIndex_NativeG "9 "9 "9 "9 79 79 ;9 >9 ;9 >9 D9,*I `DB_EndWriteSortedIndex_NativeI F K9 H9 K9 H9 K9 P9 P9 S9*0J `DB_InitReadSortedIndex_Native0J Y9 &@J ``DB_ReadSortedIndex_Native@J \9 \9 `9 \9E g9D g9  u92 y92 y9 l9 }9 n9 n9, o9 q9 q9 s9$ (K H<y9v(K 0\K 8 J H<f9vJ 4J <% L P`DB_ReadSortedData_Native L  9 9 )@L @`DB_EndReadSortedIndex_Native@L 9 PL _ printlongPL 8 9 9 9 9 9 9$M ^readlongM  9 9p*pM `DB_InitWriteProperties_NativepM 1 9 9 9 9 9`$M _DB_WriteProperty_NativeM 9 9 9 : 9 9  9 9 9 : : := ": /: -: 9: 9: ,)O _DB_WritePropPositions_NativeO b Y: Y: Y: \: Y: m: k: n:  }:  }:@(P ^DB_ReadPropPositions_NativeP  : :  : : :  : : : :  9 9 :, Q H<:vQ Q @`#@R _DB_ReadProperty_Native@R ; : : :  :  : : :  ; ; ; !; #;M #; ,; 2;  ?; B; B;8P/T ^"DB_Reopen_PropertiesForRead_NativeT T R; R; R; U; V; 3L \; \; \; T ];(ENTITIESCompaq C V6.5-001 `U finitModule_Entities`U -2 -2 -2  42 =2 42 F2 F2 F2 F2 T2 V2 T2 W2$ W2 [2 T2 8p V gfreeModule_EntitiesV R j2 j2 j2  o2  p2  ~2 {2 {2 ("W gconfigModule_EntitiesW g 2 2 2 2 2  2  2  2 2 2($PX `gsw_ConvHTMLEntities2ISOPX * 2 2 2 2 2`$X @gstrConvHTMLEntities2ISOX Y 2 2  2 2 2 2 2 2 Y fcharEntityDecodeY 3 3  3  3  3 3 3 3 3 M ;3M ;3M <3~L <3L A3 A3 93 E3 E3  W3  y3@ Z E=3/vZ Z Z Z [ Tis_EOE"FSCompaq C V6.5-001] h initModule_FS] % . . .$] k freeModule_FS] - . . @^ kconfigModule_FS^ H . . . . . .,0_ j get_rules_ . . . . . . / . . . / /} /> / . / / "/ :/H / pfs_already_indexed`e i indexadir`e {/  {/  {/  / / /  / / /( / / / /* / / / / / / / / / / / / /; 0  0 0 0   0< 0 0 0 0 0  0\ tj lM0 i KM0vi i ` indexafilek hcheck_FileTestsk @0 @0 @0 @0) L0& s0  |0 ~0 |0 {0 v0  0 v0 0` 0 0 0 N0A N0 N0 U04 4l QLM0v4l  2> V3  Z3  ]3 b3 b3 e3 d3 e3 j3 n3 t3 x3 z3 3 3 3 t30 2 2 2 &2 $2 *2  72 >2 C2C 2 2 2 2 2 2 2 2 2 2 2 2 2  2 2 2 2 2 2  [2z Z2 [2 ]2 a2 e2 j2n n2m 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 !3 "3 "3 %3 %3 %3$ 2 03+ 53 53 63 63\ 4 La2v4 T   a2 Fg2v  ( qg2'v( 4   $7v ( 4    4 " textprog_parseconfline B3!find_command_in_path)get_env_path_with_libexecdir(PRE_SORTCompaq C V6.5-001" xinitModule_ResultSort G 80 80 80 =0 ?0 C0(" P{freeModule_ResultSort B T0 R0 T0 R0 R0 R0 V0$ zconfigModule_ResultSort p0 m0 m0 m0 m0 t0 |0 ~0 ~0 0 0  0 0 0 0 0 0 0 0 0 0 0! 0 08 y compFileProps E 0 0 0 0  0 0 0 0 ` yis_presorted_prop 5 0 0  0 0 0  PyCreatePropSortArray 1 1 1 1 1 1 1 1 1 1  1 <1 91  91  91  91 T1 Q1  Q1  a1 d1 c1 k1L` @zsortFileProperties` w1 w1 w1  w1 1 w1 1  1, 1$ 1 1 1  1  1  1 1  1 1 1 1 1  1gA 1 1 1 1 1 1 1 1 1T+P pxinitStrCaseCmpTranslationTableP S =2 D2 D2 D2 D2 H2 I2 I2 I2 H2,'@ xinitStrCmpTranslationTable@ V2 V2 V2h V2 V2 V2 V2 Z2 [2 [2 [2 Z2 [2 [2 Z2 Z2 [2 [2 Z2  y sw_strcasecmp ^ d2 e2 d2 d2 d2 d2 d2 d2 d2 d2 d2 f2 @ x sw_strcmp@ ^ q2 r2 q2 q2 q2 q2 q2 q2 q2 q2 q2 s2x+ SWISH_WORDSCompaq C V6.5-001 { print_swline 0#л ~initModule_Swish_Wordsл 7 0 0 0 1 1(#` ~freeModule_Swish_Words` / 1 1 1 1 ! |isSearchOperatorChar ! 1 1 1 10 | next_token 41 .1 .1 .1 91 71  A1 B1 M1 M1 V1 D1 D1T _1 D1 D1" g1 1Lnext_swish_wordparse_swish_words |replace_swline b 1 1 1 02 02 02 checkbuzzwordfudge_wildcard" x|isBooleanOperatorWord + \2 \2 \2,isBooleanOperator"switch_back_operators"` }tokenize_query_string` 2 2 2  2  2 2 1  2 2 2 2 2 2" 2 2 2 2 2 2 3 3 2 62 ;2 >2 B2 2 1 1 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1z 1 1. 3 2M N2 N2 N2 N2 13 T h s63vh    | s3  r1Dv|  X ` s3v` t  <p0 `~parse_swish_query Y3 Y3  Y3 Y3K e3H 3 r3? 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 :4 @4 3 [4 [4 ^4 u3 u3 u3P |3 2 r2 r2 r2 s2 s2 x2 2 2 %5 .5 75 75 95 =5 #5 s4 r4 x4 x4 {4 |4  }4  4  4 4 4 4 4 4 37 4 4 4 v4& 4 v4 37 4 3 4 4 4 4 4 4 3Z 4 3L 3L 3P 4 4 4 4 4 4  4 4W 4 4+ 5 5 5 41 5 5 3 0 3 P ~4vP \ h  3'v T t  T p3'v  p` |  3  t3  nt2v  $ `tv   Ds3v   Ttp  P|isrule ! 3 3 3  { isnotrule ! 3 3 3 0"ignore_words_in_query fixmetanamesfixnot1fixnot2 expandphrase! {stripIgnoreLastChars ] N5 N5 N5 U5 U5 U5 U5  U5 , ^5" {stripIgnoreFirstChars o5 i5 o5 o5 o5  5 5 5 5 5 5 5> 5 5 5 5 5 5.PARSE_CONFFILECompaq C V6.5-001@ 0 fuzzy_or_die@ B x8 x8 x8 x8 z8 |8 |8   getdefaults 8 8 8 8 8 8 8 8  8 P9 3 P9 B9) R9 O < n9  B9)  8 9   2 ; `@ < _9& p< a9 # |< @9 8F @92 < 8 ; ; 9 9 9 9 }9 {9 n9 l9 a9 _9 R9 B9 @9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 *9 <9 >9 @9 @9 N9 P9 P9 ]9 _9 _9 j9 l9 l9 {9 {9 9> 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 : : : -= : 1= 1= 1= 1= A= : : : &: &: 3: 8: 6: 6: 6:  H: R: X: V: V: V: j: n:  t: t: v: y:, q: q: : : : : : : : : : : : :  : :ԃ : : :  : : : : : ; ; ; ; ; ; !; &; *; $; 6; :; ?; D; =; P; R; W; U; U; U;  _; a; f; d; d; d;  p; u; ; ; ; ; ; ; ; ; ;؁ ; ; ; ;, ; ; ; ; ; ; ; ; ; ; ;, ; ; ; < < < < < < < '< %< 1< 3< 3< 8< << >< ?< G< G< I< P< P< _< j< l< n< n< z< < < < < < <w < < < <t < ; 87P < :v    <  2  read_integer z < < < < < < < < < < < < =0p `getYesNoOrAbort \ = = = = = = = =t !=(add_ExtractPath @ (free_Extracted_Path@ 4 O= O= O= X= T=0 Build_ReplaceRules e=  e=  e= j= e=  e=  p= r= v= x= }= = =A = = = =8  strtoDocType $ =$ = =0 =` getDocTypeOrAbort` - = = = =00 grabCmdOptions0 0 = = = = = =8 word_hash_config > = = = = > > > -> 5> 5> 5>> 5> > > > > >8  ɓ>v  H\ readwordsfile parseconfline% get_undefined_meta_flags c L> J> J> L> J>0 R> [> ^> ^> ^> # freeSwishConfigOptions b> b> g> j> m> p> s> v> y> > > >$ > > >  'SWREGEXCompaq C V6.5-001P add_regex_patternsP ,  , , ,  , , , ,4 ,  ,, ,' , , ,/L# Hadd_replace_expression - - - -  $- #-  $-  /- 2- 2- 3- 7- 7-Q :- :- ;-4 ?-  Q- Q-, Q-P! match_regex_listP! N \- \-  c- c- h- g- a-0 k-`" process_regex_list" O y- y- {- {- {- -$ ~-  -0# p regex_replace# - -  -  -  - - - - - - - - - - - -( -h -$ - - - - - - - -0 -( -( - - - -  - - - - - - - -~ - - -8 - -$ - - - - -D . .L + 0free_regex_list+ F . . . $. '. ". $#, `add_regular_expression, <. <. <. >. <. >. D. I. K. J. J. K. Q. O.7 R. e.$\'STEM_FRCompaq C V6.5-001 / p r_prelude / r r v v y { |          ~ t ! v*  t v*   t*  t ;  v*   t* 4Pp2 r_mark_regionsp2                           2    P r_postlude5 @r_RV5  5 Pr_R15  6 0r_R26   6 `r_standard_suffix 6   ! $0 , . . 1 3 7 7 O N R X Z _ ` d { z ~                        r_i_verb_suffix r_verb_suffixr_residual_suffix r_un_double r_un_accentA  french_stemA   ^$ ^'                    !p * ) , + . 4 4 6 4 6 8 = B F  M  P SD      ^Y ^ b _ bW l jR l l  r u t y }E  C     4 - <- >- >- >-l$RANKCompaq C V6.5-001_ build_struct_map_ 6 . . . . . p` Ȏgetrank` . . .  . . . .  .  .  . . . . . . . . / .  / / / / / / $L* HTTPSERVERCompaq C V6.5-001Pc  getserverinfoPc 5 5 5 '5 5  15 15 25 45$ :5 B5 F5 I5 I5 K5 J5 L5# N5 p5 q5 r5 r5 y5 }5 }5 5 5 5 5 5] 5 5q 5q 5 5 5 5V 5 5R 5 5\ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6| $6 $6 &6  36 56 76 86 :6 :6 5T L5 g n5 th N5vth h Gvg g g g @h ph h n T n p urldisallowedn 7 5 5 5D 50 5  next_lineparserobotstxtp P isolatevaluep ? D6 D6 D6 D6 U6$ R6q equivalentserverq d6 Y6  Y6  Y6  Y6  Y6  f6 g6 h6 k6 k6 k6 k6 i6H k6 k6 q6 q6 {6 z60 }6s  serverinlists 6  6  6  6 6 6 6 6 6 6 6 6 6 6 6 0 6) UTILITIESCompaq C V6.5-0010u create_s0u & + + + -Pu @lose_su 2  u  in_groupingu G 5 5 6 7 7 7 9  v  in_grouping_b v G ? ? @ A A A C v  out_groupingv ' I J J O0w out_grouping_b0w ' S T T Yw in_rangew . ^ _ _ ` cp@x Д in_range_b@x . g h h i lpx  out_rangex & p q q up y  out_range_b y & y z z ~py peq_sy O        ,  Pz eq_s_bPz O        ,  { eq_v{   { Peq_v_b {  0{  find_among0{                              m        @ @p~  find_among_bp~                                 Z      @ p p increase_size I     > 2 2 ( 8 /v8 L $  replace_s S         ,0  slice_check 9      $  slice_from_s  * * , p  slice_from_v /   slice_del 4 `insert_s  7 7, @insert_v  = = =$ slice_to ! C E G4І  assign_toІ M M N ` Бdebug` ^ W U U ` b Z  f f f fx'STEM_ITCompaq C V6.5-001 0 r_prelude        #   }             4`@ r_mark_regions@               $ % ' * '  1 3 4 6 9 6 > @ I M P M T W T Z \ _ \ c f c m r_postlude r_RV  r_R10 r_R20  r_attached_pronounP 0r_standard_suffixP       F             8   r_verb_suffixr_vowel_suffixЗ  italian_stemЗ N M  Q         ] @  & %< 44 4 3 5 8 : @ C\) u t w  ~ { s t v(  U\v , P  ( fv( D | ę mvę ̙  h svh   italian_create_env y   italian_close_env {%MERGECompaq C V6.5-001М ` merge_indexesМ 1 1g 2  2 3 3 !3 $3% L3 Y3 \3 Z3 Z3 _3 _3 b3 |3 t3 |3 3 3 3 3 3 3 3 3 3 3f 3& 3 3 3 3 3 3 3 4 4 4 4 4 4D 4 4 4 4 4 4 2 2+ ?4 J4  L4  O4 O4  r4 v4 x4 z4 z4 {4 4 4 G4S 4 4 4  92 :2 4 4  4 4  4  4 4 4 4 4 5 5 5 5 5 5 5 5 5 ?2 ?2 G2  V2 L5  Q5 Z5 `5 `5 `5 a5 a5 a5 b5 b5 b5 ]5 W5 Z2? %5 %5  ,5 /5 45 65 :5 [2 Z2 V2  a2< b2 e2 g2 g2Y j2 l2 l2 s2 z2 {2 |2 2 2 2 5 5 2  2 2 2 2 2 2 2 2 2 2 2 2 2 2 o2T 2 2 2 2 2 j2 e2i 2J 2 2 2 2X 2D t Y[2vt  , ̩ wY2v̩  x  , :;2v, < H  p :2 < 2v<    l {2vl  d  R2 2v  \t@ dup_header @compare_header j ;3 63 ;3 63 ;3 63 63 >3 >3 ?3 ?3 ?3 check_header_match make_meta_map xcompnums 0 3 3 3 3 3 Pload_filename_sort@ print_file_removed@ $4 $4 $4 $4 (4 )4 +4 /4 ,4 /4 .4 /4 .4 14 /46 .4 .4 84 84 84#get_next_file_in_orderadd_fileget_mapdump_index_wordswrite_word_pos'STEM_NOCompaq C V6.5-001е r_mark_regionsе a ` ` ` ` c d d i d e m p m s0 p r_main_suffixr_consonant_pairr_other_suffix @norwegian_stem   G G               D .        *  L       0 v ̷ ط  v Ը x P vP l x! norwegian_create_env   @ norwegian_close_env@ &PARSERCompaq C V6.5-001`  parse_XML`  o o  parse_HTML = *o *o 4o 4o 5o 6o Ȥ parse_TXT D Fo Fo Fo So So Wo (  P parse_chunks oo oo  oo  qo o o o o o  o o0  o o8 read_next_chunk H o o o o  o( `init_sax_handler U p p p p p p p p init_parse_data $p "p "p "p "p "p ,p "p  .p 0p /p -p 4p 7pM  Ep Ep Np Mp Tp Tp Tp 8free_parse_data T \p \p _p bp ep np qp$  @ start_hndl p  p p p  p  p  p  p p* p p& p# p% s s s s  s sm Ou s p p pA p? t t u p[ pY .s .s 2s 2s 9s :s ;s ?s As Fs Fs Ns Us ?s p p pD Dpv    pv 8  p sv    آend_hndl X p p p  p p p q00  char_hndl )q #q #q 6qL q  q  q q q q q q q q q q q q >q >q Gq Jq Lqt Lq*8 Oq Rq Sq          (P اr_mark_regions                                        # & # - r_postlude `r_RV N r_R1 pr_R2 X  r_standard_suffix \ \ \ a S! x w y { ~           0  v  r_verb_suffixr_residual_suffixr_residual_form portuguese_stem   +  / X    P Z     C . . 2 1 2 4 4 6 O                    : 5 4 7 A > ; 3 4 O( | 1,v|  |  U?v $ lt D }F'vD d @ H  6Lv  " 0portuguese_create_env R  !0 portuguese_close_env0 T'HEADERSCompaq C V6.5-001 P print_index_headersP D . .  . . . . .<0 SwishHeaderNames0 R . . . . . . . .,0 SwishIndexNames0 . . . . . . . . . . . . . . .  . . .$" SwishResultIndexValue . pSwishHeaderValue V . . . / . . . .$ 4 U.4  fetch_single_header / / / / / / */ 1/ / 3/ / / / / / / / / / / / / / 4/ 4/ ;/X =/ >/ C/ E/ G/ K/ M/4  )4/'v    (0  @ fetch_header  G l/ b/ b/ j/ j/ s/ s/40P SwishParsedWordsP 1 ~/ ~/ / /" SwishRemovedStopwords / / / / / بcreate_string_list / / / / / / / / / / / / / / / / /$"string_list_from_hashindexf_by_name ةdb_results_by_name + 0 0 0 0 p xprint_header_value 0 0 0 '0 '0 '0 '00 /0 60 60 B0  B0 B0 B0'RAMDISKCompaq C V6.5-001p ramdisk_createp O ), ), ), -, 1, ., 3, 5,(` 8 ramdisk_close` * 9, 9, 9, @, Padd_buffer_ramdisk 6 E, C, C, C, C, E,$ ( ramdisk_tell N,   ramdisk_write S, S, S, S, [, [, W, a, c, d, _,  k, 4`!  ramdisk_seek`! M , x, x, , ,< , ,$ ! C,0" ȫ ramdisk_read0" , , , ,  , ,  , , , ,$ , , , , , , , , , , , , , , , , , , ,0@$  ramdisk_getc@$ ' , , , , P$  ramdisk_putc$ . , , , , ,H%REGEXCompaq C V6.5-001$ init_syntax_once$ x   $  ,    ,    ( h re_set_syntax(   (  regex_compile( C C   C C    J I b d l l l s vb v sbu      u       | y x# B   < | y B    }        xH B y H  x  J J O R R O R O               z zs     ; ; ; ; w  lԀ          ' - , * 7 @ E E M  \ \ ] _  g ^ b b n0 y.              Y A\ C        "(     a  a a c bp a c a $                                                                                       ' ) 3 ; ; ; A > A H J J J Y  Y e e e e e  o o o t e } } }                                                                             8             H J Y  J J  J M  M  M  e e e e  M }M        +                                                                                           8  t t k O O4 H           zl             v\  x ws +c\ ]#  ) ! t O )+W(   \  E /vE E E  0* /?v0* d* l* * D+ + + 0 / f/v/ / / D`MPv Ȯ store_op1Pv   Pv خ store_op2v 0      0w  insert_op10w S      (    @px  insert_op2px D    &( & & & )@at_begline_loc_pat_endline_loc_p#group_in_compile_stacky ( compile_rangey           h   0| @re_compile_fastmap|        Gm                               & ' ' ' & . . . . . 3 2 3 7 m w&        b        7D     Xre_set_registers   PP  re_searchP !   ` h re_search_2     &    3  4 2  :  L L R L L T T U ] \ ] ^ ] \ ] ^ ] \ ] ^ ] \ ] ^ ] \ \ ] \ \ a a a a a a a a h h h r F2\p 8re_matchp    $`Ќ ȭ re_match_2Ќ 8h 8 8. 8 86 8> 8                            z -   q [ Y                                B W  ,  * *    *   E D b *               * "  ! % * , , , , , , , , * , * * * * *s-̰  pp                           + + + + D D D  ] \ \D ^ \ b ` l l { {          \                        (  Ѐ     * * * * * *;P i i | | | |            3    A A M A A A S S S S S S S S S S> S S S V Vt  4 G ) +0  Ep E\ L        4  4k ? ? ? D ? ? B D D D D D B D D D B B B B B  T M T M M P U W V q q n q q n w y w y y y y [ a b c } ~ z w         %   ;\  p;&@ Pgroup_match_null_string_p@            4   V [0 >  >  @$ alt_match_null_string_p Z Q  Q  Q   ]  ]  X  X  X 0 h * common_op_match_null_string_p }  v  }  v             p @bcmp_translatep 6    4    re_compile_pattern ,    p` re_comp` w ! ! ! ! ! ! %! %! '! '!(@ аre_exec 9 /! /! /! 0 3 4! 35!v $ 00 regcomp0 _! _! _! _!  f! _!  _!t |! |! ! !$ ! !40` regexec` !  !  !  !  !  ! ! ! ! ! ! !  !  ! ! !    ! ! ! ! ! ! ! !c ! ! ! ! ! ! ! ! ! ! !0 3!v   4` Ьregerror`  ! ! ! ! ! ! ! ! ! " " "4 ! 0 regfree T " " " !" " !" $" $"'STEM_RUCompaq C V6.5-001P r_mark_regionsP = < < < < > < < ? A D A G Ib L I P S P W Z W _$@r_R2 r_perfective_gerund r_adjective r_adjectival r_reflexiver_verbr_nounr_derivational r_tidy_up 0 russian_stem   l l l k  o  n  r r v v3o r   k                 j m          ] T W W   Y = B  [  e  e V M      4    K Q0 8M*v <` wM7'v   @h ZM3v  \ M/ \ L'v\ d   $Xv\ d  8\ L%'v   MI Lv   v  Lp MNv  (` russian_create_env` W   бrussian_close_env Y'SOUNDEXCompaq C V6.5-001 soundex $3 $3 $3 &3$ ,3 K3  S3  ]3 ]3 ]3  i3 3 3 3 3 3 3 3 3 3 3 3 3 3 3J 3 3 3 3  3 34'STEM_ESCompaq C V6.5-001 0r_mark_regions                                        " % " , r_postlude r_RV V r_R1 r_R2 ` r_attached_pronoun r_standard_suffix       [W               ( @ gWpr_y_verb_suffix r_verb_suffixr_residual_suffix@ h spanish_stem@ _ ^ g g f h i k o s w {   i e    N Q   % $ * * , . .D @8 ? B J L P O P R R F F8 2 3 6 I 1R $ Whv   X uYvvX l | D OYrv   Y}v  Xt W0@ spanish_create_env    spanish_close_env 'STEM_SECompaq C V6.5-001 r_mark_regions p o o o o r s s x s t |  | 0  r_main_suffixr_consonant_pairr_other_suffixp P swedish_stemp   I I         F 4       # #   L       , ^v   x ^vx  l ^v  $  swedish_create_env    swedish_close_env + SWISH_QSORTCompaq C V6.5-001@ swapfunc@      med3 )   D (  swish_qsort      % &                                         "  !  $  &  &  ? > B B /                  U            0   CP0DOUBLE_METAPHONECompaq C V6.5-001  NewMetaString o +6 +6 .6 .6 06 46 76 56 96 <6 ?6( 0 DestroyMetaString0 E G6 D6 I6 D6 I6 L6 L6 L6 IncreaseBuffer 7 S6 Q6 Q6 Q6 Q6 S6   MakeUpper $ ^6 Z60 ^6 ^6(@ IsVowel@ j6 n6 k6 p P SlavoGermanic ' w6 w6 w6$  GetLength 6  GetAt  6 6 P жSetAt 6@@ StringAt@ ; 6 6  6 6 60 6@  MetaphAdd@ E 6 6 6 6 6 6 60 DoubleMetaphone 6  6  6  6  6 6 6 6' 6 6 : : : :8 : 6I 6I 6H 7 7 6  "7 $7 #7 "7 "7 %7 "7 &7 "7 "7( 17 F7 F7$ P7 R7 R7 R7 P7 P7 W7% ]7 ]7 a7 ]7 c7 ]7 e7 ]7  h7 h7 ]7 p7 r7 7 l7 k7 k7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7  8 8 8 !8 !8  #8 #8 &8 *8 *8 28 28 28( 28 28 28  C8 D8 B8 D8 D8 B8  P8 J8 K8 J8 X8  Z8 Z8 c8 b8 b8 s8 ~8 }8 8 8 8 }8 8 8 8, 8 8 8 8 8! 8, 8 8 8 8 8$ 8 8 8  8 8 8 8 8 8  8, 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8$ 8 8/ 9 9 9 9 9 9 9$ 9$ 9 9 #9 09 29 09 09 49 @9 @9 L9 N9 U9 V9 a9 a9 h9 h9 h9$ h9 r9( 9 9 9 9 9 9 9 9 9 94 9$ 9 9 9 9 9 9  9 9 9 9 9 9 : 9 9 9 9\ : : : 2: !:$ !: !: %: %:  =: =: L:( L: _: `: `: _: _:  d: d: y: y: y: : : :W : : : : :  :  : 6%#APICompaq C V6.5-0014  SN_create_env4 h           <pp5  SN_close_envp5 3      6 PSN_set_current6   X- DOCPROP_WRITECompaq C V6.5-001"6 WritePropertiesToDisk6 5 5 5  5 5 5  5C *59 *5 /5>z 352 f5 j5 r5 v5 u5 {5 5 85, '5L 7 w75'v7 7 8 8 compress_property(XMLPARSECompaq C V6.5-0019 XML_ParserCreate9 V V V Z X [-  ] v _  { y   ~            P O M P O   e        2 1 2 1 2V 1 2 P O     0 t;  ;  ;  ;  ; v; ; ( ; ovt; ; ; ` <; o $; ov$; ,; < `XML_ParserCreateNS< 8     ,p= XML_SetEncodingp= #   `+= XML_ExternalEntityParserCreate=                             j          0>`0@ destroyBindings0@ & * & ) *(@ XML_ParserFree@ { 6 2 = 6   B  C    N S( |A ϮN A v|A A 0&B XML_UseParserAsHandlerArgB Z C XML_SetUserDataC  _ b @@C  XML_SetBase@C  e e(C  XML_GetBaseC t +C pXML_GetSpecifiedAttributeCountC y $C `XML_GetIdAttributeIndexC ~ "C PXML_SetElementHandlerC (D @XML_SetCharacterDataHandlerD  0D 0#XML_SetProcessingInstructionHandlerD  " D XML_SetCommentHandler D  '0D XML_SetCdataSectionHandler0D "@D XML_SetDefaultHandler@D (PD XML_SetDefaultHandlerExpandPD    &pD XML_SetDoctypeDeclHandlerpD -D  XML_SetUnparsedEntityDeclHandlerD  3D &XML_SetExternalParsedEntityDeclHandlerD  3D &XML_SetInternalParsedEntityDeclHandlerD  'D XML_SetNotationDeclHandlerD  (D XML_SetNamespaceDeclHandlerD (D XML_SetNotStandaloneHandlerD  ,D pXML_SetExternalEntityRefHandlerD  /D `"XML_SetExternalEntityRefHandlerArgD  *E PXML_SetUnknownEncodingHandlerE & E @XML_SetParamEntityParsing E  0E  XML_Parse0E           T   ( % ) 08H XML_ParseBufferH } = ; ; ; ; ; @ ? A A A J I,H  XML_GetBufferH Q O O O O T V _ _ _ _ b c f. f g k( o J XML_GetErrorCodeJ t $J XML_GetCurrentByteIndexJ  y { 0$J XML_GetCurrentByteCountJ     0%K xXML_GetCurrentLineNumberK 4      'K XXML_GetCurrentColumnNumberK -      L 8XML_DefaultCurrentL   `pL XML_ErrorStringpL     @L contentProcessorL    (L externalEntityInitProcessorL 2      )pM externalEntityInitProcessor2pM V        ()`N externalEntityInitProcessor3`N W       ( +O externalEntityContentProcessorO    O P doContentO ( ( (  ( > 98  ; ; =/ q r^ t x y x x }   2 1    !                                        ) * (   8 > A A B C C H R V U T ] c fi j q^ u {            P   A @ A E K I I M Q R U \ _ ` e f% C  '            `a  storeAtts`a            ,                        ' . 6 5 = ; = @ A C G K K K K K K K K  # ] U U T T ^ _ ^ T e T l p m p p p8 x x    t   P  o     B     Po P addBindingo            8"r cdataSectionProcessorr ?    ) + .( r ۊvr r s (0s doCdataSection0s          % - 2 1 0 0 2 : : > >  * B E L2   3@ R v initializeEncodingv 5       w processXmlDeclw               l  0         "py handleUnknownEncodingpy       D      )     @{ prologInitProcessor@{ 2 " " ) * + { pprologProcessor{ 0 / / / / 5 | HdoProlog| :  :  : :U i  U R S S U o              KP            ) (   *- i h n u t t t *[ *[ *'             . - . 8 < J ] b i                      .           '  &  8 8 V V [ .   */ o) 3o 'v  | < ۊv  $@ epilogProcessor ? ? ? D I  V$ H* H* H I&0 L L M)  bP errorProcessor   storeAttributeValue +    $! pappendAttributeValue     *     ,              k  k    \  storeEntityValue normalizeLines                  ( reportProcessingInstruction k           8p p reportCommentp 8      @ P reportDefault@ U        4 ` defineAttribute`                U        ( ! setElementTypePrefix c     @    @ ` getAttributeId` 3 / / 3 / 3 3 3 8 ? B B B B B B B I P P P P P( S S S U W8 0 getContext n i i q q s@ v v    D   @   x  @     D  \ }v\ p  @  setContext@                  D    *  /P   ` normalizePublicId` Q         dtdInit dtdDestroy` @dtdCopy` : 0  0  0  0  0 9 > U J J O O T Z G p j j m p s x x z { ~    } o         (        L 0 y  v  0 v0 <   ` ev` h  Dv ,  ` 7/v` x   ȫ pPcopyEntityTablekeyeq hash a             p lookupp         !                                    3     @ 8 v8 H @ hashTableDestroy@ 0 % " & % *, hashTableInithashTableIterInit оhashTableIterNext 5 A A A A A F poolInit  poolClear V W  d c Z [ [ [ d c   poolDestroy ; i l q s y$  poolAppend +   ,к ppoolCopyStringк "  0 poolCopyStringN 0poolStoreString  $` poolGrow` !            l           8'STEM_DKCompaq C V6.5-001 r_mark_regions b a a a a d e e j e f n q n t0 q r_main_suffixP r_consonant_pairP               "   $r_other_suffix r_undouble`  danish_stem` >  g g         d  E            | 0 #          0 v  | v|  Ld v   danish_create_env    Pdanish_close_env 'STEM_NLCompaq C V6.5-001 p r_prelude u y z { }  x$    y            4pr_mark_regions r_postlude r_R1   Pr_R2   ` r_undouble k           (  r_e_ending g " ! ! " " % ' ' ) ) , @  r_en_ending R 1 3 3 5 5 6 : :,0 r_standard_suffix D B B B E D G  H  S S T P L L  Y Y ^ ^ ` c e e i i l n q q s w { } }                  I      ( 0 dutch_stem                          *    ( v   v   dutch_create_env   @ dutch_close_env@ (STEM_EN2Compaq C V6.5-001` ` r_prelude` > = = = = = > @ B C K O U V' Q Q c4r_mark_regionsP 0r_shortvP `           $` pr_R1   r_R2   r_Step_1a r_Step_1b r_Step_1cr_Step_2r_Step_3r_Step_4r_Step_5 r_exception2 r_exception1 r_postlude  english_stem  C   "  g k g k n p s p w z w        y y               x h   Y                   Y # '       ! $ - , - . - / X b l k l o l n                       Z ]         L0  D )vD X  \ 0v\ d t x , =:v, L , \ ]?v\ x   }Dv @ H  Iv   0\ 4 Nv4 T `  ( Sv( H P  5v  < 4 ?[v4 @  v , P@ english_create_env@ c  ` english_close_env` e'STEM_FICompaq C V6.5-001 r_mark_regions                          # 0 r_R2r_particle_etc r_possessiveP r_LONGP $ z z z { P r_VI #    (@ pr_case@             X      ,r_other_endings r_i_plural r_t_plural r_tidy % # " " # " " ) ' ' , , , . 4 4 7 6 9 : = = ? A C B C G G M M O R S X V V \ `H a [ ] ] a f f(   finnish_stem o n r 5< 5> 0D 5 0 2 8 7 ( =6 K) K M S R X X \ b d k o s                                   [     y 4 D y lA 'vD ` t   ~v 8 8P cv   p ?vp |  0   $ 0 'v0 8 H P t  finnish_create_env   @ `finnish_close_env@ &XMLTOKCompaq C V6.5-001` isNever`  p  utf8_isName2p  p  utf8_isName3 p utf8_isNmstrt2p  p utf8_isNmstrt3 p utf8_isInvalid3p     utf8_isInvalid4  0 normal_scanComment y Z Z Z ^, c, c, c0 u c l pnormal_scanDecl!`normal_checkPiTargetw   #             p normal_scanPi   , , , , , , , ,  ,  N,       /8$normal_scanCdataSection#ppnormal_cdataSectionTokp -  -  -  -  = > ? @ D E L OE T, [ , [ , [ [8 normal_scanEndTag  { {  ,  ,  ,          !8"normal_scanHexCharRefnormal_scanCharRefnormal_scanRef     ,   ,   ,        0 $ $ $  $      0 4 $ 4  &(      8  .  v40vhnormal_scanAtts    ( , ) ( ( ) ( ( , ) ( , (y0 A A E B A A B A A E B A E$ A W X8 U U8 U U8 U U U  U U U n  t t8  t8  t0  8  8  <  $ 4 M  g  O     { {  @ !0 normal_scanLt!   = , = , = , =               # !  " " "D8 `& v`& p&`p'Pnormal_contentTokp'         # ( + , - . 2 3 ?$ > , > , >  K >  > P Q >% >)0 U @+normal_scanPercent+v o o }  , }  , }  , }    w 8p!normal_scanPoundName /normal_scanLit /{    , , ,    0   1normal_prologTok1       8 Z             X  4             # ( + . 9 <     ,   ,   ,     p6 r, p6 r, p6 r, p6 r    m98 6 @v6 6 2 7v22P\` %=@normal_attributeValueTok=  1    ) -  ( ' " ! G        "? normal_entityValueTok?|      # '    @normal_isPublicId@1 S u0 U- }Anormal_getAttsA   , O , O , O             1       I  O    E  @!Dnormal_charRefNumberD                                P( Gnormal_predefinedEntityName G   ( + / 6  5 6 8 "  @  ,  + ( A Hnormal_sameNameHs H M0 \ G$ M4 M4 M4 l l l  } $Jpnormal_nameMatchesAsciiJ              K`normal_nameLengthK    @LP normal_skipS@L    P"Lnormal_updatePositionLM      M@ utf8_toUtf8MS ,   0       O  utf8_toUtf16O              !> " # " "h )       $ # "   R latin1_toUtf8Re         $  pSlatin1_toUtf16pSC    $     @PT ascii_toUtf8PT!  , ,  Uunicode_byte_typeUF         ppUlittle2_toUtf8pU $pXlittle2_toUtf16pX %``Y big2_toUtf8Y 0\ big2_toUtf16\ 1`` 0^little2_scanComment0^              L         little2_scanDecl"`plittle2_checkPiTarget` ' & % ' & ' I - I 7  =  I A F Hp`blittle2_scanPi`b O O W ]T \, ^  e g e e g e eH j j g  | ~ W/(@%little2_scanCdataSection$gplittle2_cdataSectionTokg   E  ?  7  2  ,$  (   $$  !$             @llittle2_scanEndTag@l  &   T       $  M   $ $ $ $ " !#little2_scanHexCharRef little2_scanCharRefplittle2_scanRefp _ _ d e mT l  w n  n  n  q p$ e e e B # " " #l +L 9> , ,F 4# j  E*h L+ Y R Q&$ pt h |t E7v|tttuuv?vpt8uuv@`v0w@w pwlittle2_scanAttspw } } }z } }z X            0         M0   T t I       " P0little2_scanLtP   & ?T >= @ V X  X  X j n o} q & ( ( *     T  7E(  /v pPlittle2_contentTok                   *   (     P little2_scanPercent      T           $  2      "Plittle2_scanPoundName     T             #   little2_scanLit     "   "   & % ( " "K " " * +  0 +  +  little2_prologTok ; ; C Q R| ]              X _ ft k s k w                     T 6F     9(  @Wv &0little2_attributeValueTok  1 % & &) &- U -( .' ." 4! 6 7D = > A B A$ I J #little2_entityValueTok Y Y+ _ ` `# `'  g" h! h m m r5 x y | } | $plittle2_isPublicIdY   $ @ .    little2_getAtts    , O , O , O , O    O " " O * * + O 0 0 O 8 8 1 < O > > > > > B > C >L > = J O L L4 L E  Q O R p" plittle2_charRefNumber  \ \ ^ x x x t  s b  d  d l d bU  p s g d b d  s    )`little2_predefinedEntityName           b      + + (  p@little2_sameNamep  1 0   : ! 4 4 4 $   %p0little2_nameMatchesAsciip  $             `бlittle2_nameLengthб-      little2_skipS ! +#little2_updatePosition 6 1 1 1 ? D F F F F 6 6Pbig2_scanCommentP              :        big2_scanDeclbig2_checkPiTarget ,  +  *  ,  +  N  2  N  <  A   B   N  F  K  M pp big2_scanPip T  T  \  b T a , c   j  l  j  j  l  j  j @ n  l     \ /(0"big2_scanCdataSection!big2_cdataSectionTok   E  ?  7  2  ,$  (   $$  !$             @Pbig2_scanEndTag@  &   !T  ! ! ! ! ! !$ ! !M ! ! !$ $ $ $ " ! big2_scanHexCharRefbig2_scanCharRef0 big2_scanRef d! d! i! j! r!T q!  |! s!  s!  s!  v! u!$ j! j! j! G! G! '! (! '! (!l 0!L >!> 1! 1!F 9!# o!3  J!h Q!+ ^! W! V!&$ p m!  J!7v?vp8@`0@ p0 big2_scanAttsp ! ! !z ! !z !X ! ! ! ! !  ! ! ! ! ! !0 ! ! ! ! !  ! ! !M0 ! ! !T !t !I ! " " " " " !" "Pp big2_scanLtP "" "" +" D"T C"= E" [" ]"  ]"  ]" o" s" t" v" +" -" -" /"     8 $  <"E(  =4"v pbig2_contentTok " " " " " " " " " " " " " " "  "  "* " " "( " " "  Pbig2_scanPercent " " "  " "T "  # "  "  "  " "$ " "2 " " " " " big2_scanPoundName # # # # #T #  # #  #  #  # # # ## # # # big2_scanLit $# # # $# '# $# $# '# $# $# +# *# -# '# '#K '# '# /# 0#  5# 0#  0#  big2_prologTok @# @# H# V# W#| ]                      X d# k#t p# x# p# |# # # # # # # # # # # # # # # #  # #  # #T #6F # $ $ $ #9(  p\#v #pbig2_attributeValueTok $$ $$1 *$ +$ +$) +$- Z$ 2$( 3$' 3$" 9$! ;$ <$D B$ C$ F$ G$ F$$ N$ O$  Pbig2_entityValueTok ^$ ^$+ d$ e$ e$# e$' $ l$" m$! m$ r$ r$ w$5 }$ ~$ $ $ $ $pbig2_isPublicIdY $ $ $ $@ $. $ $ $ $ big2_getAtts % % % , %O %, %O %, %O %, %O !% !% "% %O '% '% %O /% /% 0% %O 5% 5% %O =% =% %1 A% %O C% C% C% C% C% G% C% H% C%L C% %= O% %O Q%; Q% Q% %E  V% %O W% p0big2_charRefNumber0 a% a% c% }% }% }% y%  x% g%  i%  i% q% i% g%U  u% x% l% i% g% i%  x%  % % &big2_predefinedEntityName % % % % % % % %  % % % %d %" % % % % %+ %+ %( % p big2_sameNamep % %1 %0 % % % %: %!$ %4 %4 %4 %$ % % %"`pbig2_nameMatchesAscii` & & & & & & & & & & & & & `Pbig2_nameLength- & &  & & 0 big2_skipS  && 0& big2_updatePosition  ;& 6& 6& 6& D& I& K& K& K& K& ;& ;&@ streqci@  H' F' F' F' F' I' H' H' I' F' F' G' F' H' H' J'^ I' F' F' H' F' H' J' I' M' ` initUpdatePosition  U'0 `toAscii C \' \' \' \' b' d' d'isSpace!pparsePseudoAttributep w'  w'  j' ' j' j'' j'' j'' o'+  '30 ' j'B o'> ' j'E o'> ' ' ' ' ' '6 '  ' ' ' j'/ X 5''vXp h  5'  5''v, , 5'  5'doParseXmlDecl ' ' ' ' ' ' ' ' '> ' ' ' ( ( ( ( ( ( !( %( j' -( -( -( j' *(4  5.(v  p p(checkCharRefNumber] 9( 7(  9( 9( 9( 9( <(  >( 9( >( XmlUtf8Encode R( T( Y( X( X( Y( Y( ]( ]( ]( ^( _(  c( c( c(4 f( d( d( e( j( @XmlUtf16Encode@b q( o( r(  u( u( u( w( w( x( {( r( 0%pXmlSizeOfUnknownEncodingp ( xunknown_isName ( (0Xunknown_isNmstrt0 ( (8unknown_isInvalid" ( ( ((`unknown_toUtf8`i ( ( ( ( ( ( ( ( (,unknown_toUtf16T ( ( ( ( ( (  ( < ( #XmlInitUnknownEncoding ( ( ( ( ( (@ ($ ( ( ( ( ( ( (  ) ) ( ( (# ) ) ( ( (  ( ( ) ( ( ( ( ) ) ) ) (- ) ) ) )G ) ') ')P ( (    %getEncodingIndex %. N)  N)  [) [) ])% initScan% p) p)f {) |) |)` ) )[$ ) )Q )K ) ) ) )2$ ) ) ) ) ) ) )A )$ )# )! )  )? ) ) ); ) ) ) )'@)XmlGetUtf8InternalEncoding@) )(P)XmlGetUtf16InternalEncodingP) )`)`initScanProlog`) * * *0)@initScanContent) * * *0)XmlInitEncoding)A * * * * * *$`*8 findEncoding`*B * * * * )* ** `+XmlParseXmlDecl`+! 2*  2*  2*  t'XMLROLECompaq C V6.5-001+prolog0+}          j 2 $ , ]   -prolog1-\       M 2 $ - ]  -`prolog2-, B 2 A   . ] v. .P@.doctype0@.;      $ 2    p. ] `.doctype1.t            0   $   2 *      / ]+  @/doctype2/; 4  4  4  2 <  6  0 ]< `@0doctype3@0; E  E  E  2 M  G  p0 ]M `0pdoctype40? V  V  X  2 a  ]  ]  0 ]a  1doctype5 1; j  j  j  2 r  l  P1 ]r `1`internalSubset1 {  u  u  u  u         '  2 4 @3 ]  3@entity03?   H 2    3 ] 4entity14;   7 2   04 ] ``4entity2`4g         0  % 2  p5 ]  5hentity35;     2 &  5 ]&`5Pentity45; 0 0 0 2 8 2 6 ]8`@6(entity5@6Z ; ;  ; ; H C  2 N E E 6 ]O 7entity67; X X X 2 ` Z @7 ]``p7entity7p7g c  c c c  m m k0 q q 2 z 8 ]{  8entity88;    2   8 ]`8entity98;    2   9 ]`P9 notation0P9;    2   9 ]`9 notation19T      0  q 2  : ] : notation2:;   Z 2   : ]` ; notation3 ;;   I 2   P; ]`; notation4;K   5 2     ; ]<0attlist0<;   # 2   @< ]`p<attlist1p<A    2 #    < ]#<Xattlist2<q & & & & .@ <$ < < > B 2 K P> ]L p`>attlist3`>< U U U U  2 _ > ]_p>0attlist4>A h h j 2 s o j ? ]sP?Hattlist5P?/ | | ~ 2  ? ]`?attlist6?;    2   ? ]`@attlist7@A    2    P@ ]@attlist8@           ^ 2   A ] pBattlist9B;   M 2   0B ]``Belement0`B;   ; 2   B ]`B`element1Bx           ( 2  , C ] 0C8element2C      # ( ( - 0 3 6 2  :$ D ]: 0 E(element3 E@ C C C 2 O K E  `E ]OEelement4E: X X X 2 a Z E ]a`Felement5F@ j j j 2 u q l @F ]uFelement6Fo ~             2  `G ]Gelement7G              v 2  H ]`H declCloseH.   & 2  I ] `@IPerror@I ( commonPI8XmlPrologStateInitPI 8 (ENCODINGCompaq C V6.5-001`I asciiToUTF8`I V V V V V V V V V V V V V V V V V V V V V V V V V V V Vs V  V  V V V  V V V V V V  K UTF8ToasciiK V: V1 V V V V V V V V V V V V V V V V V V V V V V V V V' VQ  V) V V V& V V V V N isolat1ToUTF8N W W W W W W W W W W W W W W Wc W W W W W W W W  W W W !WQ` UTF8ToUTF8Qa 7W 2W 2W 2W 8W  9W 9W AW AW$R UTF8Toisolat1R \W? dW6 lW lW oW W W W W W W W W W W W W W W W W W W W W W W W W W  W nW% nW% nW. W sW sW+ W5 W W W {W {W# U UTF16LEToUTF8U W W W W W  W W W% W W W W W W W W W W W W W  W W W W W W( W W W W W W W W W W W W W W W W W W W W W W. W0 W0 W W W @Z UTF8ToUTF16LE@Z X X X X X! IX =X X! X7 X! X X "X 1X$ 5X 6X 5X 5X 6X 6X 5X 5X 6X 6X 5X 5X 6X 6X 5X 5X 6X 6X 5X =X X@ X! X$ DX X$ EX X) JX JX NX NX X/ OX X3 QX QX SX SX SX X4 YXF [X XB bX0 $X $X ,X  @_ UTF8ToUTF16_= xX }X |X ~X X X`@ UTF16BEToUTF8` X X X X X  X X X) X X X X X X X X X X X  X X X X X X( X X X X X X X X X X X X X X X X X X X X X X2 X4 X0 X X X X X d  UTF8ToUTF16BEd Y X X X X Y' Y7 ,Y Y Y9 Y Y Y Y !Y$ %Y &Y %Y %Y &Y &Y %Y %Y &Y &Y %Y %Y &Y &Y %Y %Y &Y &Y %Y ,Y Y  0Y Y$ 4Y Y$ Y$ Y' 8Y 8Y :Y >Y =Y =Y  >Y CY Y3 DY Y7 GY GY GYU Y= HY Y8 Y? OY@ Y Y Y P"ixmlDetectCharEncodingi iY iY jY jY, mY mY mY mY mY+ pY qY pY pY pY( sY tY sY sY sY% vY vY vY vY vY" yY zY yY yY yY Y Y Y Y Y Y Y Y Y Y Y Y Y Y  Y Y Y Y Y Y `&@m@xmlCleanupEncodingAliases@mP Y Y Y Y Y Y Y Y Y( PnxmlGetEncodingAliasPnn Y Y  Y Y Y Y Y Y Y Y Y0 YP oxmlAddEncodingAliaso Y Y Y Y Y Y Y Y Y Y Y Y Y Y Yu Y Y Y Y Y Y Y Y Y Y Z4p rxmlDelEncodingAliasri Z Z Z  !Z !Z &Z &Z &Z 0 0Z (Z *Z +Z P!`s0xmlParseCharEncoding`s ?Z ?Z ?Z KZ OZ PZ OZ SZ SZ Z0P#wxmlGetCharEncodingNamew Z, Z* Z( Z& Z$ Z" Z  Z Z Z Z Z Z ZK Z Z Z  Z  Z Z Z Z &@y`xmlNewCharEncodingHandler@y Z  Z  Z Z Z Z> Z [ Z [ [ [ [ [Y [ [ [ [ [  [ [0( {xmlInitCharEncodingHandlers { 6[ 6[ 2[ 9[ <[ <[ 8[ A[ A[  A[  E[ G[ I[ P[ P[ P[+|`xmlCleanupCharEncodingHandlers| k[ l[ n[ p[ q[ p[ q[ p[ q[ p[ q[ s[ r[ p[ p[ ,`+~xmlRegisterCharEncodingHandler~^ [ [ [ [ [ [ [ [ [ [$& xmlGetCharEncodingHandler  [ [ [ [ [ [ [ " \ @'`xmlFindCharEncodingHandler` "\  "\  /\ <\ =\ <\ @\ @\ B\ B\ B\ M\ M\ N\ O\ N\ O\ O\ Q\ R\$0 W\ Y\ a\ b\ a\ b\ p xmlIconvWrapperp| \ \ \ \ \ \ \ \ \ \ \,` ІxxmlCharEncFirstLineІ \ \ \ \ \ \ \ \ \ \ \ \ 4XxmlCharEncInFunc *] *] *] 8] ;] ;] A] H] I] L] L]c R] R] i] k] m] m] k] l] l] k] 8p xmlCharEncOutFunc  ] ] ]  ]  ] ] ] ] ] ] ]܀ ] ] ] ] ] ] ] ] ^ ^ ]q Z ^ ^ ^ ^ ^ ^ ^ ^ ] ] ]80 PxmlCharEncCloseFuncPe 0^ 0^ 0^ 0^ <^ =^ ?^ B^ D^ 0``xmlByteConsumed` e^ e^  e^ j^ }^ |^ ^ ^ ^ ^ ^N ^ ^ ^ ^ ^ ^ ^0* HTMLPARSERCompaq C V6.5-001 htmlErrMemoryS %b %b +b 0b 0b 5b 5b$PГP htmlParseErrГ Eb Kb(htmlParseErrInt ^b db(pp htmlnamePushpW }b {b {b }b {b {b b b b 0  htmlnamePop0E b b  b b b b b htmlCurrentChar c c c c c c c  c c "c $c &c $c *c ,c *c 0c /c /c /c 4c 4c 4c 5c 5c 6c :c ;c ;c ;c g0 >g >g >g Cg htmlEntityLookup, h$ h h h0 h" htmlEntityValueLookupo h, h h h h h h h h h h h h hPЫx UTF8ToHtmlЫ h7 i h h h h h h h h h h h h h h h h h h h h h h h h h h  h0 h h h i i h1 i i i h:< iP h h% h h h 0htmlEncodeEntities 'i $i !i !i !iA ci ,i ,i .i .i =i Ai Ai Ai Ai Ai Fi @i @i Ai Ai Ai Ai Ai @i @i @i Ai Ai Ai @i  Ki +i! +i# +i- Yi Zi ci ai `i ai +i5 ci di +i> ji\ 0i 1i 0i Ci Bi 8i 9i 8i@htmlNewInputStream  areBlanks  i i i i i"0 i i i i i i i i i- i i i i htmlNewDocNoDtD  i i i i i i i i  i i i j j j j  @ htmlNewDoc@' j j j j @`htmlParseHTMLName Aj =j =j Aj Aj Aj Ej Ej Ej Ej Dj Dj Ij Dj Dj ( Bj ,@H htmlParseName@ `j [j [j fj fj gj fj jj kj jj kj mj mj jj qj pj4!лhtmlParseNameComplexл j }j }j j j j j j j j j j j j j j j j j j j j j j j j j  j , j<0# htmlParseHTMLAttribute j j  j  j  j j j jX jN j j j j j j j j j j j j j jX j( j j j j j j j j j j j j j j j j j j  j j j j j j k k k k k k k k( kX k k k k k k k k k k k kj k k k kX k( k k k k jdP j    ` `hhtmlParseEntityRef` 7k k ?k @k Dk Jk Nk Nk Uk4htmlParseAttValue#htmlParseSystemLiteral k k k k k k k k k k k k k k] k k k k k k k k k(p"htmlParsePubidLiteralPhtmlParseScriptP k k l l l l l l l* /l /l .l$ phtmlParseCharData  Ll Ll Ll Rl Ul Rl Sl Sl Sl Sl( Sl Wl bl> hl tl vl zlD 0@htmlParseExternalID0 l l l l l l l, l l, l l l l l l l l, l l, l l l l k k k k k k k k k k k k k k k k k1 l l l l l0  lv,htmlParseComment l l  l l l l l l l l l l l l l l l l l l l l l l l l l m m l l l l l l l l l l m m m m\@htmlParseCharRef m m m m m $m &m (m (m #m +m +m 2m 2m~ 8m 7m 8m 7m 6m :m :m Am Am Dm Dm Mm Mm0 Jm!phtmlParseDocTypeDeclp `m `m `m pm om qm m m m m m,htmlParseAttribute 0htmlCheckEncoding  m m m  m   m m m m m m m nY n  n n n n  n n n( htmlCheckMetahtmlParseStartTag cn Yn  Yn  Yn  Yn Yn  ^n hn gn in mn qn n n n n n n n n n n n n n  n< n n n n n n n n( m m m m m m m m hk hk lk jk mk kk pk pk tk rk uk sk |k ~kC  m n n n n n n  n n n n n n n n n n n n n n n n n n  2n /n 0n 2n 8n 9n 9n 7n @n2 n o o o o\ d ܢn  ڙm(  nv phtmlParseEndTagp !o o o o 0o 0o 0o 0o :o :o :o ?o ?o Af Af  Ef Cf  Cf  Cf Pf Uf Uf Uf Zf Sf Po Qo6 Ro ]o #o "o "oA<  Jo4PhtmlParseReferenceP vo ro ro  |o vo vo o| o o4 o o o o o o o o o  o o  o o o o o o o o4 oL o o o o o o o o, phtmlParseContentp o o o o o o  o o o o o o o o o, o o, o o o o o o o o o oB p4 o3  p p,08htmlParseElement0 =p 7p Bp Bp Ip Ip Jp Lp Vp ]p _p ep p p p p p p p p p p p ip hp hp np5,htmlParseDocument p p p p p p p p p p p p p p  p( p p, p p, p p p p p p p[ p p q q q q q q qhtmlInitParserCtxt htmlFreeParserCtxt  q   htmlNewParserCtxt  q q q q &qx $q &q +q ,q 4q 8q 9q =q ?q >q Cq Fq Lq Mq Kq Iq Qq Rq Vq Xq _q `q ^q \q [q Yq eq dq fq eq kq mqF tq rq vq sq qq  q,  6qv <  qv< D 'PhtmlCreateMemoryParserCtxtP` q q  q q q q q$0$htmlCreateDocParserCtxt$phtmlParseLookupSequence ,r %r %r 1r> :r =r >r >r >r Hr Hr u Au GuA Ou Pu Pu Su Wu %) htmlCreatePushParserCtxt) vu vu vu vu u u u u i i i i  i i i  u u u u u u u# u u, + u-htmlSAXParseDoc- u u u q q q q q q  r r q u qa( |/ 6u . |uv..4$ / htmlParseDoc/ u%/htmlCreateFileParserCtxt/ v v v v v "v $v )v ,v v .v -v v 0v01phtmlSAXParseFile1_ Jv Jv Jv Jv Vv Uv \v q( 2 6bv2 htmlParseFile2 sv"2`htmlHandleOmittedElem2 v #3htmlElementAllowedHere3L v v v v v0 v v v v"3 htmlElementStatusHere3 v v v 4htmlAttrAllowed4\ v v v v v v v v0 v v 6@htmlNodeStatus 6^ v v v  v  v v v v v v ( @7P htmlCtxtReset@7 w w w w w w  w w #w "w w &w (w *w ,w .w /w 1w 4w 3w ?w 5w  Aw =w 0 htmlReadFdp>N w x x x x x x`? htmlReadIO?P %x -x /x 3x 8x ?x ?x`0AhtmlCtxtReadDoc0A@ Px Px  Vx  Wx ax ax BhtmlCtxtReadFile BU qx qx  wx  xx x x x x xCphtmlCtxtReadMemoryCM x x x x x x x`pD@htmlCtxtReadFdpDV x x x x x x x xPEhtmlCtxtReadIOEX x x x x x x y y\$TRIOCompaq C V6.5-001 GTrioIsQualifier G )1 G) P,pGTrioCalcThousandSeparatorLengthpGU ) ~) ) ) ) ) ) ) )$G0TrioFollowedBySeparatorGL ) ) ) ) ) )pH@TrioGetPositionpHC ) )  ) )  )  )ITrioFindNamespaceIA ) ) ) )  ) )0JP TrioPowerJ^ * * * <* <*M TrioLogarithmM9 L* E*  L* S*(N TrioLogarithmBaseNV g* c* c* g* c* c* k* j* i* `Op TrioParse`O x*( x*( x*( x*( * x*( x*( x*    * * * * * * * * * * *I + * * 4+ ,+ + * * e+n * *6 + * ) ) )1 * * * * * * * * + +  + + + + !+ ,+ -+ '+ '+ -+ )+ -+ 6+ 4+ 6+ D+ D+ D+ P+ M+  b+ g+ f+ g+ u+ u+ u+ + + + + + + + + +  + + + + + + + + + + + + + + +  + + +  , , * + *4 ,+8T +g   * ) ) )3 E) * * * *= , , , , , , , + + + + + + + + + + + + +  + +  + + + + + + + + + + + + + + + + + + + + + ]+ f+ e+ g+  f+ u+ u+ i+ i+ k+ *6 -+ *0 '+ -+ )+  -+ -+ 6+  5+ 4+ D+ D+ 8+ 8+ :+ P+ M+ * * * * + + + + + + + + + + + +  !+ * * * * *R ., 1, .,  0, ., 0, 1, 0, 1, 1, 0, 9, 6, 8, 6, 8, 9, 9, 8, A, >, @, >, @, @, A, @, I, F, H, F, H, H, I, H, O, O, O, [, \, Z, Y, \, h, g, g, f, i, i, i, q, n, n, p, s, u, y,  y,  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,' , , , , , , , , , , , , - - - - , - - - - - - - - - - - -   .- .-  3- .-  1- .-  1- .-  1- 7- 3- ;-  O- M- K- G- H- K- I- G- *K - V-I V-K - X-4 `- X- X- g-, *P &, + + + W+ Q+< - -  - - - - - - - -   -  - - - - - - - - - - - - - - - - - - - - -  . . . . . . . . . !. ". $. ". &. &. &. -. .. 0. .. 3. 4. 8. 9. <. V-P . X- . X- X- g- . -.  -. <. :. 9. 5.$ 4. /. .. .. 0. .. .  . . &. &. #. ". ". $. ". . . . . . . . . . . . . . . - - -  -  -  - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@ - - - - - V- Z- Q *7vQQQ<XXX<`'v@TrioWriteNumberv a. a. a. a. |. {. . {. . {.  . . .  . . . . . . . .  . .( . . .( . . . . . .  . . .  .  . . . . . . . . . . .  . . . .  .  .  . . . . / / /  / / / / / / /\0%}TrioWriteStringCharacter} 0/ ./ (/ (/ (/ 7/ 7/ C/ C/ C/ C/ I/ U/0p`TrioWriteString` `/  `/  `/  `/  `/  q/ n/ s/ p/ z/ z/ }/k / / / / / / / / / /8@TrioWriteDouble 0) 0) 0) 0 0 30 0) F0 K0 F0! l0 p0 p04 n0 s0 w0 |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0< 0 0 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 0 0 0 0 0< 0 1  1 1 1 1 1 1 1 1 1 1 1 1 !1 "1 !1 (1 (1 (1 (1 (1( &1 01 -1 01 -1 -1  41 01 /1 31 61 /1  71 /1 61 91 61  61 61 71 C1 91 71 91 <1 H1 M1 O1 O1 X1 Z1 Z1 _1 e1 n1 m1 m1 m1  n1  p1  |1 p1 q1 x1 |1 |1 1 1 1 1 n1 1 1 1 1 1 1 1 1 1 1 1 1 1 1$ 1 1 1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Q0 V0 Q0  `0 _0 ^0TTrioFormatProcess 1 1 1 1 2 2 2 2 2, 2  2  2 2 2 2 2 2 2 '2 22 82 Y2 ]2 ]2 > r2 r2 u2 2 2~ 2 2  2 2 3  3 2 2( 2D 2  TrioFormatRef: "3  "3  "3  "3  .3(@P TrioFormat@l <3  <3  <3  <3  <3  <3   O3  L3  O3  ` TrioOutStreamFile`B i3 i3 i3 s3 t3$(@( TrioOutStreamFileDescriptor@= 3 3 3 3$ TrioOutStreamCustomH 3 3 3 3 3( TrioOutStreamString5 3 3 3 3 3(#PTrioOutStreamStringMax: 3 3 3 3 3(' TrioOutStreamStringDynamicH 3 3 3 3 3 3 3,  trio_printf2 4 4 4 #4 #4 `  trio_vprintf`" 14 14 14 h  trio_printfv( C4 C4 C4 J4H  trio_fprintf- Z4 Z4 Z4 f4@(  trio_vfprintf@, u4 u4 u4 u4  trio_fprintfv9 4 4 4 4 4 4  trio_dprintf2 4 4 4 4 4$P  trio_vdprintfP+ 4 4 4 4`  trio_dprintfv+ 4 4 4 4p  trio_cprintfp@ 4  4  4  4 4 4@ trio_vcprintf@- 4 4 4 5 trio_cprintfv6 5 5 5 5 5 trio_sprintf. '5 '5 '5 35` trio_vsprintf/ C5 C5 C5 C58 trio_sprintfv/ \5 \5 \5 \5P trio_snprintfP4 z5  z5  5 5 5 @trio_vsnprintf@/ 5 5 5 5,0trio_snprintfv0/ 5 5 5 5, trio_snprintfcat G 5  5 5  5  5 5(0ptrio_vsnprintfcat08 5  5  5  5 5(00 trio_aprintf0F 6 6 6 6 6 6 @ trio_vaprintf@> "6 "6 "6 ,6 26(@ trio_asprintf@y 96  96  96  96  E6 L6 N6 G6 O6 Q6 Y6 0pptrio_vasprintfpe ]6 ]6 ]6 ]6 h6 j6 q6 z6   trio_register 6 6 6 6 6 6 6 6 6 6 6R 6 6 6  6 6 6 68trio_unregistern 6 6 6 6 6 6 6 6 6,@ptrio_get_format/ 7 7 7 7 7pPPtrio_get_argumentP( 7 7 7 7p@trio_get_width &7п0trio_set_widthп /7 trio_get_precision :7trio_set_precision C7 trio_get_base N7 trio_set_base W7  trio_get_long  b7 @ trio_set_long@ m7 p7@trio_get_longlong {7 trio_set_longlong 7 7 @ trio_get_longdouble 7 trio_set_longdouble 7 7 @@trio_get_short@ 7 `ptrio_set_short` 7 7@ `trio_get_shortshort 7 Ptrio_set_shortshort 7 7@!@trio_get_alternative 7 ! 0trio_set_alternative  7 7@` trio_get_alignment` 7 trio_set_alignment 8 8@trio_get_spacing 8 trio_set_spacing 8 8@  trio_get_sign  *8 @ trio_set_sign@ 58 88@trio_get_padding C8 trio_set_padding N8 Q8 @trio_get_quote \8 trio_set_quote g8 j8@@trio_get_upper@ u8 `ptrio_set_upper` 8 8P`trio_get_largest 8 Ptrio_set_largest 8 8 @@trio_get_ptrdiff 8 00trio_set_ptrdiff0 8 8 @p  trio_get_sizep 8  trio_set_size 8 8 @trio_print_int 8 8 trio_print_uint 8 8 80 trio_print_double A 9 8 8 8 9 9 9$trio_print_string 9 9 ptrio_print_ref2 $9 $9 $9 /9 /9`Ptrio_vprint_ref`+ 99 99 99 99$0trio_printv_ref1 H9 H9 H9 H9 P9p`trio_print_pointerpO e9 Y9 d9 Y9  e9 e9, t9 q9 t9 *Ptrio_locale_set_decimal_pointPg 9  9  9  9 9 9 9 9 9 9 9/"trio_locale_set_thousand_separator) 9  9  9  9%trio_locale_set_grouping 9 ,0 TrioSkipWhitespaces! 9 9, 9TrioGetCollation"`TrioGetCharacterClass :  :  : :  : (: 4: =:X` A:X A: B: A:( E: :` E:( n: : : : : : : : : : :  :  : : : : : : : : : : : : : : : : : : c : : : : : : : : : : : : : : : : : : : : : : : v: x: x: v: x: v: x: v: x: v: x: v: V: W: V: V:u V: a: d: d:T d: d: d: C: B: A:P : : `:  :v@ TrioReadNumber ; ; ; ; ; '; /; /; 5; 3; 5; 5; 5; 5; 5; 3; 3; 5; 5; 5; 5; 5; 5; 5; 5; 3; =; D;$ M; K;  O; O; U; X; Z; n; n; n; n; n; _; _; n; q; q; u; ; ; ; {; x; {; }; {;G }; {; {; n;' ; ; ;T@ ` TrioReadChar  ;  ;  ;  ;  ;* ; ; ; ; ; ; ;U ; ; ; ; ; ;,@ ; @TrioReadString@ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;$ ;$ TrioReadGroup0TrioReadDouble < < < <  < < < < < < < < < < < < < < < < < < < < < < < < < < < < = = = = =  = = =  = = = = = = = = = = = "= $= "= $= $= $= $= $= $= $= $= $= '= '= '= -= /= /= 1= 4= <= 4= 6= 6= A= ?= ?=\ TrioReadPointerTrioScanProcess ~= ~= ~= z< ~= = = = = = =  =  =  = = = = = = = = = = = = = = = = > > > 1> A> A> A> A> A> A> A> A> A> A> A> A> F> H> F> M> z< z< < ~< }< ~< < < < ~< < < ~< < < < ~< < < < < ~<  < _> > > > Y=  [=  i= j= i= i=0 > > = = > =,P =  =?{ T Q>/vTllt  > TrioScank >  >  >  >  >  >  >  >  >  TrioInStreamFile\ > > > ? ? ? ? ?('TrioInStreamFileDescriptorf !? ? ? !? ? !? (? 3? 3?(xTrioInStreamCustoma A? A? A? M? O? M? W? W?$TrioInStreamStringN e? e? e? p? x? x?  trio_scanf2 ? ? ? ? ?  trio_vscanf$ ? ? ? X trio_scanfv* ? ? ? ?8 trio_fscanf- ? ? ? ?` trio_vfscanf`. ? ? ? ?  trio_fscanfv = ? ? ? ? ? ? trio_dscanf2 @ @ @ @ @$ph trio_vdscanfp- @ @ @ @@ trio_dscanfv- #@ #@ #@ #@ trio_cscanf@ 4@  4@  4@  B@ B@ C@` trio_vcscanf`- K@ K@ K@ W@0 trio_cscanfv06 ]@ ]@ ]@ ]@ i@P trio_sscanf- r@ r@ r@ ~@0 trio_vsscanf. @ @ @ @ trio_sscanfv. @ @ @ @@ trio_strerror@W @ @ @  @  @  @ @ @ @%XMLIOCompaq C V6.5-001  xmlIOErrMemory  -c +c(0@ 0  __xmlIOErr@  9c 9c 9c ?c Ac Ac Dc Dc Gc Gc Jc Jc Mc Mc Pc Pc Sc Sc Vc Vc Yc Yc \c \c _c _c bc bc ec ec hc hc kc kc nc nc qc qc tc tc wc wc zc zc }c }c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c} c c c c c c c c c c c c@ xmlIOErr __xmlLoaderErr8 c c c c$pxxmlNorm>alizeWindowsPathp &d  %hxmlCleanupInputCallbacks 4d 4d 5d 7d 7d 7d 8d 8d 8d 8d 9d 7d 7d 7d !XxmlPopInputCallbacks7 Md Md  Pd Pd  Sd Sdp&HxmlCleanupOutputCallbacks hd hd kd id kd kd kd ld ld ld ld md kd kd kd  xmlCheckFilename d xmlNop d P xmlFdReadA d d d d c c c( 4 e/dv4<D ( xmlFdWriteA d d d d c c c(  e/dv  xmlFdCloseA d d d d c c c( 4 e/dv4<D  xmlFileMatch d xmlFileOpen_realr d d d d d e e e e c% c&( | e/ev|0( xmlFileOpen1 !e !e !e (e$pp xmlFileOpenWpr 9e =e 9e 9e Be Qe He He Le cg ch( \ e/Vev\d0h xmlFileRead: ee ee ee ge cz c{$  e/iev   xmlFileWrite A xe xe xe c c c( t e/~evt$ xmlFileClosey e e e e c c c e e c c c( h e/evht ,  e/ev$, xmlFileFlush> e e e c c c(  e/ev $!@pxmlFreeHTTPWriteCtxt@8 g g g g g xmlIOHTTPMatch$ g g g gP  xmlIOHTTPOpen  h  @XxmlIOHTTPOpenW@ h h h h -c -c -c h -c -c -c$  k*$hv 0  k*hv,@ xmlIOHTTPDfltOpenW  Qh   xmlIOHTTPRead  ah   8xmlIOHTTPWrite | vh rh rh  vh rh rh h h h h c h wh wh D! e/h!xmlIOHTTPClose!" h h h h @ !xmlIOHTTPCloseWrite! h  h h  h  h h h  h h h h h c9 hM h9 i i i i c1 i( " e/h$ T# e/i#xmlIOHTTPClosePut# 5i#xmlIOHTTPClosePost# Ci# xmlIOFTPMatch#$ Xi Xi Xi YiP@$P xmlIOFTPOpen@$ hi  `$  xmlIOFTPRead`$ wi  $ xmlIOFTPClose$ i  &$ xmlRegisterInputCallbacks$B i i i i i i i `'%xmlRegisterOutputCallbacks%: i i i i i i`-`% xmlRegisterDefaultInputCallbacks`%; i i i i i i.%!xmlRegisterDefaultOutputCallbacks%8 i i i i i j )p&xmlRegisterHTTPPostCallbacksp&- j j j j j0&'pxmlAllocParserInputBuffer'| (j %j %j -c -c -c .j 3j 4j 9j :j @' k*+jv@'L'h',!(HxmlAllocOutputBuffer( Oj Lj Lj -c! -c# -c$ Uj Zj ]j ]j ej( ( k*Rjv(((,%*PxmlFreeParserInputBuffer*W uj tj tj wj {j {j ~j j j!*xmlOutputBufferClose*x j j j j j j j j j j j j, 1,$__xmlParserInputBufferCreateFilename,x j j j j j j j j j  j j j,@/P-"xmlParserInputBufferCreateFilenameP-3 j j j j k kp,-__xmlOutputBufferCreateFilename- k k  k k k k k &k 6k 6k 6k 7k 7k 6kf  Kk Zk Zk Zk [k [k Zk qk rk tk0*@0xmlOutputBufferCreateFilename@05 k k k k k kp+0xmlParserInputBufferCreateFile0@ k k k k k k(&P1@xmlOutputBufferCreateFileP1@ k k k k k k()1xmlParserInputBufferCreateFd1B k k k k k kp*`2xmlParserInputBufferCreateMem`28 k k k k0- 3 xmlParserInputBufferCreateStatic 3r l l -c -c -c "l 'l .l ,l$ 3 k*lv333,$4pxmlOutputBufferCreateFd41 @l @l @l Fl p) 5xmlParserInputBufferCreateIO 56 ]l ]l  cl dl el$5xmlOutputBufferCreateIO56 {l {l  l l l6@6)xmlParserInputBufferCreateFilenameDefault@6 l l l  1`6P$xmlOutputBufferCreateFilenameDefault`6 l l l  %6(xmlParserInputBufferPush6 l l l l  l l c c l 0 l  l  l ,7 e/lv,787P7 endOfInput7 l %7xmlParserInputBufferGrow7 m m c"  m m m  m c&  c)  m -c  -c  -c  #m #m )m 5m >m Cm cY  mE0 mE mE Jm' Lm Mm .m c@  9 e/Gm T: e/.m 8 k*mv888, 7 e/mv7<8X8 x%p:xmlParserInputBufferReadp:# fm fm fm P!:xmlOutputBufferWrite: m m m m m  m  m m m m mw m m m m m c  mJ@ mJ mJ m c  T= e/m < e/m=`xmlEscapeContent= m m m! m m m m m m m m m  m m m m m m m m m m m m m m m m m| m m m n n n n n n m m n n n40'@xmlOutputBufferWriteEscape@ n n  n n  #n (n +n  3n  3n Cn Cn Xn Xn \n  _n bn gn gn gn in mn ln p ln ln nn wn wn wn On ca  (nZ@ sn c  DD e/sn C e/On'pD@xmlOutputBufferWriteStringpDa n n n n n n n0 n n n !`ExmlOutputBufferFlush`E n n  n n n c  n*0 n* n* n n n n n[ n n n n n c  c  n F e/nvFF  E e/n"0G`xmlParserGetDirectory0G n n  n  n n n n n n n n n n n n. n n o o 0`IP xmlCheckHTTPInput`I o o  o o o o  o  'o .o 2o 3o 3o 6o 5o~ 9o =o =o Ao Ho Jo Lo Po Vo0 Vo Vo Vo Vo xmlSysIDExists+@L0 xmlDefaultExternalEntityLoader@L o  o o o o o o o o o o o  o o o o o o o o o o o o o o o8`'N xmlSetExternalEntityLoaderN o'N xmlGetExternalEntityLoaderN o"Np xmlLoadExternalEntityN_ p p p -c  -c  -c  p p p O k*pvO O(O, xmlNoNetExists)O xmlNoNetExternalEntityLoaderO Np  Np  Np  Qp Zp ap ap `p `p kp jp pp pp wp vp yp yp ~p ~p p p p p p c  c 1 p p p p p4 Q e/pvQ Q$TREECompaq C V6.5-001RxmlTreeErrMemoryR T\ R\(0R" xmlTreeErrR` _\ _\ _\  _\ c\ h\ e\ _\ h\ e\  xmlGetEntityFromDtd)xmlGetParameterEntityFromDtd0S. xmlBuildQName0S \ \ \ \ \ \ \ T\ T\ T\ \ \ \, S _\vSS T(T.xmlSplitQName2T ] ] ]  ] ] ] ] #] #] T\ T\ T\ +] T\ T\ TV _.]vTV`V$ U _)]vUUU<V.xmlSplitQName3VM G] E]  H] R] R] R] R] L] W`.xmlValidateNCNameW q] q] z] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]1 ] ] ] ]@0\@.xmlValidateQName\ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ], ] ] ] ] ] ] ] ]4 ] ] ] ] ] ] ] ]' ^ ^ ^@`0e .xmlValidateName0e ^ ^ !^ !^ !^ &^ '^ &^ '^ &^ 4^ 5^ 8^ 7^ 7^ <^ <^ <^ <^ <^ ?^ <^ ?^ @^ @^ @^ @^ @^? @^ @^ B^ G^ F^ F^@@pj-xmlValidateNMTokenpj [^ [^ d^ d^ f^ e^ d^ k^ l^ k^ l^ k^ y^ z^ }^ |^ |^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^T ^ ^ ^ ^ ^ ^ ^ ^ ^@)p-xmlSetBufferAllocationSchemep ^)p-xmlGetBufferAllocationSchemep ^p0$xmlNewNsp ^ T\ T\ T\ ^ ^ ^0 ^ ^ ^ ^+ ^ ^ ^ ^  _ _ _ _ _5 _ _ _ _( v __vvvv,x  xmlFreeDtdx _ _ _ ` ` ` ` ` ` ` ` `(p0{( xmlNewDoc0{ 1` (` ,` (` ,` T\ T\ T\ 7` 7`  :` <` ;`  :` 9`0 x{ _4`vx{{{ ,@p| xmlFreeDocp|y Y` P`  P`  P`  [` d` g` f` p` y`,$%xmlStringLenGetNodeList ` ` ` ` `  `1 ` ` `  ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` a a a a a a a a a a a a a a %a 'a (a ` ` ` ` 3a 7a a `N 1f ;aP  z'av$ 4( ă z`văԃ,  z`v  `  ;a! "xmlStringGetNodeList Pa Pa Pa  Za Pa a \a ]a \a ca da ha ta {a {a a va ~a a a a a a a a a a a a a a a a a a  a a a a a aN a aM aJ aJ a a a a a a a a a a a a a a a a e a [a [aT [a [a [a a a4= 1f aL  zav( $ zav$4,  zav T ha  a! #xmlNodeListGetString  b b b b b b1 @b b7 b b b "b #b  0bo /b 1b @b b7 :b :b b  b78 b: $ -xmlNodeListGetRawString cb ]b gb gb gb ib2 b fb8 nb nb pb tb ub  bo b b b fb8 b b b b b  fb88 db; @" xmlNewProp@ b b b b T\j T\l T\m b b b$ b( ̓ _bv̓ؓ,p" xmlNewNsProp b b b T\ T\ T\ c c c 'c &c(  _cv(D,P -xmlNewNsPropEatName ^c Nc  Nc Nc Nc  T\  T\  T\  lc nc( wc vc8 x _acvx,``( xmlNewDocProp` c c c  c  c T\V T\X T\Y c c c c c(  _cvĚ,xmlFreePropList c c c,p` xmlFreeProp`K c c c c c c c`, xmlRemoveProp\ d d d d d d  d d,xmlNewPI @d 2d 2d  2d  2d T\ T\ T\ Fd Fd Hd Id Md(  _Cdv , ,@+ xmlNewNode kd ]d ]d  ]d  ]d T\ T\ T\ qd qd vd sd vd L _ndvLXl ,  p,xmlNewNodeEatName s d d d  d  d T\C T\B T\C d d( | _dv| (0P@+ xmlNewDocNodeP6 d d d d d$!@,xmlNewDocNodeEatName@6 d d d d d$0,xmlNewDocRawNode0@ d d d d d e$ x zdvx @P,xmlNewDocFragment@_ e e e T\ T\ T\ e e  _ev,@! xmlNewText@a 0e *e *e T\ T\ T\ 6e 6e =e( | _3ev| , `0,xmlNewTextChild` We We" ne  |e se te se ue xe ye  e e e `+ xmlNewCharRef e e e e T\N  T\P  T\Q  e e e e e e) e e e(  _ev0,p!xmlNewReferencep e e e e T\w  T\y  T\z  e e e e e e7 e e e  e0  _evĪ,`! xmlNewDocText` e ePx  xmlNewTextLens f f f f T\  T\  T\  T\  f f f(  _f'v00h!xmlNewDocTextLen .fP0+ xmlNewComment0d Df >f >f T\  T\  T\  Jf Jf Qf( p _Gfvp|,0`+xmlNewCDataBlock`u ff `f `f `f T\  T\  T\  T\  lf lf sf(  _if'v00+xmlNewDocComment f fP xmlSetTreeDoc7 f f f f f( xmlSetListDoc' f f f f$0`+ xmlNewChild0 f f" f  f f f f f f f  f g g ``"xmlAddNextSibling g g g +g 1g 1g 5g Uo \o eo yo o o  o, o o @"xmlNodeSetContentV o o o o o o o0!8%xmlNodeSetContentLenC o o p p p0! xmlNodeAddContentLenf Fp Hp @p @p Op Sp Tp  dp dp0 xmlNodeAddContent? p p p  p  p p p(! xmlTextMerge- p p p p$@ xmlGetNsList@ p p p p p p p p p p p p p pb p p p p" p'@ T\s T\t T\ T\  _pv 4$  _pv$P# xmlSearchNsP p p p p p q q q T\ T\ T\ q q q q q T\ T\ T\ q !q *q )q 0qh 3q 3q /q   T\@ T\C q q q q q T\O T\Q T\T q q q  q qg q q q q q q q q q@ q   _qv 8  _qv$@8 $xmlNewReconciliedNs k q  q  q q r r r r 0 r$xmlReconciliateNs %r %rk yr 4r 4r 9r rv$  xmlHasProp N r r r r  r r( s P   xmlHasNsProp  s s )s )s #s -@ ]s +s  9s @s As Bs Es GsG Ls Os Qs Qs Rs Ms Ms  $ xmlGetProp O us qs zs 0 s ~s  s s`#xmlGetNoNsProp`O s s s 0 s s  s s# xmlGetNsProp` s s s s s0 t s  t@# xmlUnsetProp\ (t %t ,t +t 0 8t 8t .t /t 1t 1t 0@`#xmlUnsetNsProp@q Ht Et Et Et Et Ot Ot Nt 0 Qt Rt Tt Tt P# xmlSetProp nt jt jt jt pt st rt }t ut wt t t t ot#<@ # xmlSetNsProp@ t t t t t t 0 t t t t t  p xmlNodeIsText  t t @`xmlIsBlankNode@I t  t t t  t t t t  xmlTextConcatB u  u u  u u$xmlBufferCreateu 3u 0u 0u T\ T\ T\ 8u 9u T\ T\ T\ t _>uvt0  _6uv( ,0 xmlBufferCreateSize Pu Mu Mu T\ T\ T\ Vu Uu Wu Vu Vu Xu T\ T\ T\(  _\uv0 < _Suv<H\ ,P"PxmlBufferCreateStaticP{ wu tu qu qu qu qu uu qu T\# T\$ T\% ~u |u(  _zuv,) pxmlBufferSetAllocationScheme  u @P xmlBufferFree@E u u u  u u u  u  u (xmlBufferEmpty / u u u u u `xmlBufferShrink: u  u  u  u u u$  xmlBufferGrow  u u u u u u u u T\ T\ T\ u u,  _uv  !(`! xmlBufferDump`!, v  v v vp!xmlBufferContent! #v &v  !xmlBufferLength! 5v 8v  "xmlBufferResize" Jv Ev Ev  Mv Mv Tv Tv  _v av av jv lv T\! T\ T\4 # _svv###($ xmlBufferAdd$~ v v v v   v v v T\K T\L T\M v v4 $ _vv$$$ (@P%pxmlBufferAddHeadP% v v v v v v  v v v v T\{ T\| T\} v( % _vv%%& (@& xmlBufferCat& v v0&h xmlBufferCCat&Z v v v v v v v0 T\ T\ ' _wv''$@(PxmlBufferWriteCHAR( w w  (0xmlBufferWriteChar2 ( !w !w  '@(xmlBufferWriteQuotedString@( 2w 2w 0w 0w 3w 3w :w ;w Q FQ GQ GQ IQ IQ FQ  FQ LQ LQ TQ TQ SQ TQ UQ VQ VQ YQ YQ aQ aQ `Q aQ bQ cQ cQ fQ fQ kQ lQ oQ qQ qQ yQ yQ yQ yQ |Q yQ Q nQ Q Q Q Q Q nQ nQ nQ tQ tQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q  Q  Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q  Q  Q Q] Q Q Q Q Q Q Q Q Q<?2 xmlPrintURI?+ R R R R P@/ xmlCleanURIP@c R R R R "R $R &R (R *R ,R(PA@/ xmlFreeURIA+ 9R 8R 8R CRp C1xmlNormalizeURIPathC [R bR aR bR bR bR bR bR bR  sR uR uR uR uR uR uR uR R R R R R R R R R R R R R R R R R R mR mR  R R R R R R RR R R R R R R R R R R R R R R R  R R R R R%  R R R R R R R R R- R R R R Rp  0M/is_hex0M* S S S S S0!`M/xmlURIUnescapeString`M S S %S %S &S 'S (S 1S @S ;S ;S =S@ =S =S >S DS 0S HS, P1xmlURIEscapeStrP WS WS WS WS WS bS cS eS eS jS nS kS lS nS vS xS }S zS zS zS }S }S$ kS kS S@ pS pS pS pSp2 xmlURIEscapepS S S  S S S SR0 SR S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S T T T T   Y 0xmlParseURIFragmentY8 #T #T *T -T,\@0xmlParseURIQuery\9 AT AT0 HTH KT4xmlParseURIScheme"_0xmlParseURIOpaquePart_E T T TT T T4d0xmlParseURIServerd T T T T T T T T T T T T T  T T T T T T T T U U U U U U U U U U U U U U T=,p"l0xmlParseURIRelSegmentlE *U *U *UD 2U 9U4$pq`0xmlParseURIPathSegmentspq PU PU PU@ ZU [U ZU   lU nU fU  mU pU tUV uU vU {U }U ~U U U U0!@w0xmlParseURIAuthority@wc U U U  U U@ U U U, xmlParseURIHierPart xmlParseAbsoluteURI xmlParseRelativeURI!{1xmlParseURIReference{ dV dV dV dV Va V eT fT fT iT oT V V U4 U6 U5 U U U U U U U U+V pV 3V@ sV /V 6V 6V ;V BV BV FV MV MV SV , {V {V V, X~ uVvX~d~HT | qV 0} V'v0}8}D}X} $| %V/v$|,| <|`|}v>| |$0`(1 xmlParseURI`0 V V V V,1 xmlBuildURI V V  V V V V V V<} W4 V V W W W W W W W W W W W &W &W )W )W +W +W  5W 5W :W :W BW DW FW FW OW ]W `W dW bW dW oW hW sW sW sW sW sW uW zW yW yW yW yW rW  W( W W W W W 7W >W^@ @1xmlBuildRelativeURI@ W W W  W W  W W  W W W W W  X X X X X X X X X X X0 X X X X X X X  'X 'X %X -X -X -X -X -X -X -X -X -X 3X  >X 7X >X >X HX HX HX GX HX HX IX HX HX HX IX HX HX IX GX HX GX GX GX HX IX GX GX We W<PH1xmlCanonicPath7 nX  nX  nX  nX  'CATALOGCompaq C V6.5-001 p 3xmlCatalogErrMemoryp' a a a a3 xmlCatalogErr! a a a3xmlNewCatalogEntryu a a a a a a a a a a(` 9xmlFreeCatalogEntry a a  a a a a  a  a a a a a a a a1 a a a a a$xmlFreeCatalogEntryList(=xmlFreeCatalogHashEntryListA b b b b &b &b &b 7xmlCreateNewCatalog d 7b 4b 4b 4b 7b 8b =b >b =b @b  >xmlFreeCatalog 6 Ob Mb b bI Rb Ub ` Rb @xmlCatalogDumpEntry hb gb hb gb gb gb b  b b b  b0Л;xmlDumpXMLCatalogЛ b  b  b  b  b b b b b b b b b b b b b b c c c; bU &c 'c +c8#AxmlCatalogConvertEntry Ec Dc Ec Dc Dc Dc Dc Ec  nc0 vc vcH vc vc vc vc ec ec ec ec "@:xmlConvertSGMLCatalogf c c c c c c c c c c  c   7xmlCatalogUnWrapURN c c c c c c c c  c c c c c c c c c c c  c c c  c c c  c c c c c c c  c c c  c c c c c c c9 c c c( c c,P 6xmlParseCatalogFile c c c c c c c c d d d= d d d d8@ >xmlLoadFileContent  8d )d )d )d Cd Kd Pd Xd Zd ad Ld( Md &xmlGetXMLCatalogEntryType&3xmlParseXMLCatalogOneNode d  d  d d  d d d d d d d d d d d d d d d d d d d d d d8#05xmlParseXMLCatalogNode d  d  d d  d  d d d d e e e e e e e e e +e /e /e ;e ;e ;e ;e ;e8 '4xmlParseXMLCatalogNodeList/ Ue Se Ve Ve Ue4#xmlParseXMLCatalogFile#е6xmlFetchXMLCatalogFileе e e e e  e e e e e e e e e e e e se pek se ue se ve ue ve {e |e {e |e |e |e e e e e e e e e e e e e? e e e e e e e e e e D L EevL`@xmlAddXMLCatalogxmlDelXMLCatalog!7xmlCatalogXMLResolve f  f f  f  f f f f f f  f f f  f f f f f f f f f f f f f f f f f f( f f f f f f f f f f f  f f g  g   g g g g g g g g "g 5g #g %g #g #g, #g 'g 'g 'g *g .g 1g 6g 4g 5g "g" ;g  Lg Pg Kg@ Sg$9xmlCatalogXMLResolveURI og og  og  g g g g g  g g g  g g g g g g g g g g g g g g g g g0 g g g g g g g g g g g2 g g gH@%P7xmlCatalogListXMLResolve g g g  g g  g  g h h h h h h h h h h h h h h h h &h  *h %h 8(8xmlCatalogListXMLResolveURI Bh Bh Bh Hh Kh Lh Mh Mh Rh Rh Uh Uh& [h _h Zh ('xmlParseSGMLCatalogComment%x>xmlParseSGMLCatalogPubid h h h h  h h h h h h h h h h h h h h h h h h h h h h h#L$`>xmlParseSGMLCatalogName`R h h h h h h h<`'xmlGetSGMLCatalogEntryType ?xmlParseSGMLCatalog 1i +i +i< 3i 5i 5i: 6i 7i h h h h  @i Di Bi fi hi qi   i i i i i i i i i i i i iM i 5i 5iw i i i i4 iD  ;iT0$`3xmlCatalogGetSGMLPublic: i i i i0 j j $8xmlCatalogGetSGMLSystem: j j j j0 j j "<xmlCatalogSGMLResolveD /j +j +j +j /j 5j 6j($AxmlLoadSGMLSuperCatalogG Lj Lj Vj Wj \j ^j,?xmlLoadACatalog qj }j j j j j j j j j j j j j0p?xmlExpandCatalogk j j j j j j j j j(%P=xmlACatalogResolveSystemP~ j j j j j j j j j j j j j0%`h=xmlACatalogResolvePublic`~ j j k j j k k k k k k k k0p(=xmlACatalogResolvep $k k k k (k 'k )k )k ,k +k /k /k 4k 5k xmlCatalogCleanup` l l l l l l l l l l l l l l l $=xmlCatalogResolveSystem7 l l l l l l`$=xmlCatalogResolvePublic7 l l l l l l`@H=xmlCatalogResolve@. m m m m mp!=xmlCatalogResolveURI7 m m m m m m`<xmlCatalogDump6 .m +m *m *m 1m 1m; xmlCatalogAddP Cm Fm Cm Nm Nm Rm Ym(@:xmlCatalogRemove! gm jm nm(x:xmlCatalogConvert! {m ~m m(" 0:xmlCatalogGetDefaults  m"0:xmlCatalogSetDefaults0 m m m m m m m m  m m m m m m m m'09xmlCatalogSetDefaultPrefer0n m m m m m  m m  m m m m m  9xmlCatalogSetDebug m m 9xmlCatalogFreeLocal 7 n m m n b b , p n9xmlCatalogAddLocal n n n n n n n !n !n *n *n *n *n *n$0#`9xmlCatalogLocalResolve Bn =n =n =n En In En Hn Hn  Nn Mn Ln Pn Pn Xn 0`&@(9xmlCatalogLocalResolveURI@Q nn jn jn nn qn tn tn yn  8xmlCatalogGetSystemp n n n n n n n n n n n n,P ``8xmlCatalogGetPublic`p n n n n n n n n n n n n D'CHVALIDCompaq C V6.5-001AxmlCharInRange * * + 0 5 5 0 8 = @ C  H H C  K 2PB xmlIsBaseCharP _( ^ _ _xB xmlIsBlank n0hB xmlIsChar } }HBxmlIsCombining   P(B xmlIsDigit   P B xmlIsExtender    PpAxmlIsIdeographicp PAxmlIsPubidCh>ar  8%VALIDCompaq C V6.5-001B xmlVErrMemoryC }V }V V V V V  hD xmlErrValid 4 V V V V0 CxmlErrValidNode0 1 V V V  V$ LxmlErrValidNodeNr 1 V V V  V$  CxmlErrValidWarning 1 W W W  W$ vstateVPush vstateVPopp D nodeVPushp t W W W W W W W W W W   DnodeVPop ; W W  W W W Wp'DxmlValidBuildAContentModel X X X XX XX XU Y Y &Y +Y +Y  ,Y   3Y  0Y >Y =Y =Y X X X X X X  Y  Y 6 Y9 Y= X X X X  X  X X X X X XS X X X X X XY X X X4@&@ExmlValidBuildContentModel@ QY OY OY SY XY `Y `Y bY kY kY lY pY( pY wY }Y00pVxmlNewValidCtxtp# Y Y Y$VxmlFreeValidCtxt Y  !0@UxmlNewElementContent0 Y Y Y Y Y  Y Y Y  Y Y Y Y Y3 Y Y Y Y Y0"`UxmlCopyElementContentD Y Y Y Y Y Y0"UxmlFreeElementContentd Z Z  Z Z Z Z Z Z  Z  Z Z0"@TxmlDumpElementContent@ +Z *Z *Z *Z .Z .Z NZ NZ NZ QZ VZ VZ :Z @Z @Z @Z CZ 3Z 3Z 0Z) ZZ  \Z  \Z  fZ cZ( `Z `Z `Z `Z%VxmlSprintfElementContent wZ&CxmlSnprintfElementContent Z Z Z Z Z Z Z Z* Z, Z( Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z} Z Z Z Z Z Z Z Z Z: Z  Z  Z Z8"xmlCreateElementTable$UxmlFreeElement$U Z Z Z Z Z Z Z [ [$XVxmlAddElementDecl$ [  [ >[ #[ #[ >[ E[ E[ 7[ 5[ 6[ /[ -[ .[ '[ %[ &[$ Z` Zh Zj W[ [[ [[ ][ _[ _[ h[ j[ i[ j[ k[ v[  }[ x[ }[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [8 [ [ [D |& i4X[v|&& &  *0VxmlFreeElementTable* [  *UxmlCopyElement*R [ [ [ [ [ [ [$@ ,UxmlCopyElementTable, \   ,TxmlDumpElementDecl , \ \ \ \ \ \ ;\ B\ B\ B\ E\ E\0 /\ 0\Q &\ '\ \ \% #\% #\% #\p#/TxmlDumpElementDeclScan/ T\ /UxmlDumpElementTable/ a\ `\ !/RxmlCreateEnumeration/4 r\ o\ o\ w\ y\$0SxmlFreeEnumeration0' \ \ \ \01SxmlCopyEnumeration01/ \ \ \ \(1QxmlDumpEnumeration1R \ \ \ \ \ \ \ \ \$xmlCreateAttributeTable)2PTxmlScanAttributeDeclCallback2 \ !2`TxmlScanAttributeDecl2G \ \  \  \  \ \$ \#3MxmlScanIDAttributeDecl3A ] ] ] ] ] ] 84SxmlFreeAttribute4r ] ] ] ] "] $] &] &] (] (] *] *] ,] 5TxmlAddAttributeDecl5 B]  K] r] \] \] r] x] {] z]  ] ] ] ] \ \ ] ] ] ] ] ] ] ] ] ] ]J Z, b Z Z+ b b b b !b !b "b $b *b *b /b 1b 0b ] ] ] ] ]l ] ] ] ] ] ] ] ]P 9 +P] 9 i4bv9$9 49$ d7 ;]vd77 "<SxmlFreeAttributeTable< ^  <@SxmlCopyAttribute<s ^ ^ ^ ^ "^ "^ $^ $^ &^ &^ (^ (^$p">`SxmlCopyAttributeTable> 7^  !0> RxmlDumpAttributeDecl0> F^ F^ F^ J^ q^ q^  u^  u^  ^@ ^ |^ y^  ^ ^ ^ ^%ARxmlDumpAttributeDeclScanA ^ "ARxmlDumpAttributeTableA ^ ^ #xmlCreateNotationTableB8QxmlFreeNotationBN ^ ^ ^ ^ ^ ^ ^ ^ ^BQxmlAddNotationDeclB ^ ^ ^  ^ ^/ ^6 ^: ^ ^ ^ ^ ^ ^- _ _ _< 8C C^v8CHCTC !DXQxmlFreeNotationTableD _  DPxmlCopyNotationDS ,_ )_ )_ 1_ 5_ 5_ 9_ 9_( !FPxmlCopyNotationTableF J_  0FOxmlDumpNotationDecl0FJ X_ X_ X_ [_ ^_ f_ f_ f_ P$GPxmlDumpNotationDeclScanG q_ !GPxmlDumpNotationTableG ~_ }_ xmlCreateIDTableGH xmlFreeIDG3 _ _ _ _ _ HHxmlAddIDH _ _ _8 _< _ _ _ _ _ _ _C _ _ _ _ `4 TI G_vTIpI P0KHKxmlFreeIDTable0K `  PKOxmlIsIDPK $` $` )` *` *`!0 *` 3` <` <` ?` ?` ?` B` D`0MO xmlRemoveIDM} ^` _` Y`  Y`  g` f` j` j` j` k`4 l` l` l` PNhLxmlGetIDN@ }` }` ` ` `(xmlCreateRefTable`OpO xmlFreeRef`OE ` ` ` ` ` ` ` ` @PNxmlFreeRefList@P ` `0pPNxmlWalkRemoveRefpPG ` ` ` ` ` ` ` ` pP`OxmlDummyCompareP ` PH xmlAddRefP a a a `b `f a a a %a .a .aP 8a Aa Ba Ca Ha Ja Ja4 dQ qKavdQQ SKxmlFreeRefTableS ]a  S@OxmlIsRefS; ma ma pa wa ~a,pTN xmlRemoveRefpTb a a a a a a a a8UxN xmlGetRefsU( a  a a a `!PVFxmlGetDtdElementDescPVJ a a a a a a a$"xmlGetDtdElementDesc2"`WPFxmlGetDtdQElementDesc`W Jb Kb Nb PWIxmlGetDtdAttrDescWW ^b ^b ^b  ^b db lb jb mb$ XJxmlGetDtdQAttrDescX b b b `"0YGxmlGetDtdNotationDesc0Y b b b P#YKxmlValidateNotationUseYU b b b b b b b b ,ZXNxmlIsMixedElementZY b b b b  b  b  b, b b ![pIxmlValidateNameValue[ b b b b b( b b b b b b b cZ c c c c c c c c<@"^IxmlValidateNamesValue^ c c c c #c( "c %c %c %c %c %c %c +c *c +c ,c ,c ,c ,c ,c ,c 6c 6c 6c 6c ;c ;c ;c ;c ;c ;c @c, ?c Bc Bc Bc Bc Bc Bc# Bc$ 5c0 =c@$eHxmlValidateNmtokenValuee ]c ]c ]c ]c0 dc fc fc fc fc fc  mcP jc fcX mc mc mc mc mc mc mc rc<%hPIxmlValidateNmtokensValueh c c c c c c c c c c c c c c c  cP c c c c c c c c c c c c c$ c c c c c c c c c cG c c c c c c0 c $pHNxmlValidateNotationDeclp c &qIxmlValidateAttributeValueq. c c c d 'qGxmlValidateAttributeValue2q &d &d &d &d &dI &dF qd td Nd Rd Rd Ud Xdw _d ^d ed 5d 7d ;d Bd Ad Ad7@`0 u(N#xmlValidCtxtNormalizeAttributeValue u d d d d d d d d d d d d[ d d d d d d dD`,yNxmlValidNormalizeAttributeValuey d d d d e e e e e e e e e<+0}MxmlValidateAttributeIdCallback0} 'e %P}MxmlValidateAttributeDeclP} =e =e =e Fe Ge He Ie Te Qe Qe Qe [e _e ke qe oe oe qe te {e ze ze {e {e eB ~e ~e e e e e,#`MxmlValidateElementDecl` e e e  e e e, e e e e e e e e e e e e e- e e e e e e\ e e e e e e e eD$P@JxmlValidateOneAttributeP #f #f +f +f .f 5f 8f 9f =f Af Af Ef Hf If Nf Wf Vf Wf +f@ \f \f _f af `f gf jf if if if qf vf vf }f f f f f f f f f f f f f f f f f f f f$ JxmlValidateOneNamespace f f f f f f f f f@ f f f f f f f f f f f f f f f g g g  g g g g g g g g g g g &g )g (g )g )g -g -g 6g ;g ;g Bg Mg Lg Ng Mg Qg Qg Yg `g _g _g cg cg ng ug tg tg xg xgZ g g g g g g g g g  xmlSnprintfElements&ExmlValidateElementContent i  i> i  i i i i i i$ i i i i i i i i i i i i iv dj dj Ai) @i Di Di Ei Li Mi Mi Ui Ui [i# Ci di Ci- ri  Ci Fi Fi Fi Ni Ni Ni Vi Vi*~ sj tj xj xj }j ~j j j j j j j j<  erjv @p'xmlValidateOneCdataElement"xmlValidateCheckMixed ppFxmlValidGetElemDeclp 7k 7k Fk Ik Jk Lk  Vk Xk Yk _k ^k _k  d< d d d d d  e e e e e e e e e e e e e e e e e e ey e e e 5e 5e 8e 9e 9e :e :e 9e !e0`! ]xmlCopyCharMultiByte  Le  Le  Le  Le l be bed be be be be be de ^e ]e ]e!  `e fe fe(] xmlCopyChar# ve ye {e@ \xmlSwitchEncoding e e e e e e e e e e e e e e e" e e e e e e e e e e e[ f f f f f f(#0[xmlSwitchInputEncoding /f /f /f /f  8f Qf Tf  Yf af af af ff ff ff ff pf pf rf rf pf pf pf {f }f f fM f f f f f f&4 [xmlSwitchToEncoding7 f f f f$ f @PYxmlFreeInputStream@9 f f f g g g `ZxmlNewInputStream`L g g g g g g g$ 0\xmlNewIOInputStream0Q 6g 2g 2g 2g 2g  X X X X! %X #X X X X X X X X  X X X X X X X X X X X !X X $X %X %X $X  Xu X4 =X ;X >X >X @X DX CX CX JX HX KX MX OX PX PX PX TX VX [X WX WX WX XX mX qX qX qX XU _X _X aX dX dX dX> wX wX wX wX |X {X {X Xu XT )X Xu XwP ^X %X X  X= X( X X X X X X X $X $X $X X X X L *XL {X {X {X Xu X!  =X ;X   MX  TX VX WX WX XX PX NX OX RX PX PX PX KX IX KX JX _X _X aX dX dX dX Xu Xf mX( nX qX qX qX X4 >X >X @X CX CX CX Xu X+ X+ X+ X !X X X X !X X X X X X X X  X X X  X Xu X0"@axmlEncodeSpecialChars@ X X X  X X X X  X X X X X X X X X X X X X X X X X  X X X X X X X X X X X X X X X X X X  X! X X X X& X X X X, X, X, X0P X0#@!HaxmlCreateEntitiesTable@! X  !`!`xmlFreeEntityWrapper`! X !!axmlFreeEntitiesTable! X  !h` xmlCopyEntity! Y Y Y Y Y Y Y Y Y Y Y Y Y Y* Y Y Y Y$!@#`xmlCopyEntitiesTable@# ,Y  !`#^xmlDumpEntityContent`# oxmlCtxtGrowAttrs> h h h h h 0 h h h h h h h h hpp?e inputPushp?Z h h h h h h h h h @@`dinputPop@@; h h  h h h hp@0lnodePush@ h h h h h h h h h h h h h$APknodePopA; i i  i i i ip nameNsPush nameNsPop0BmnamePush0Bv ci ai ai ci ai ai fi  ii ji ji mi oi, CinamePop C; i i  i i i ipCp spacePushCV i i i i i i i i i(pDispacePoppDB i i i i i i ipDd xmlSHRINKD9 j j j j j j j EdxmlGROWE9 j j j j j j j @F@gxmlSkipBlankChars@F @j 9j 9j Fj Fj Fj Jj Kj Mj Xj Wj \j \j \j gj,@Hpd xmlPopInputH\ {j zj zj }j |j }j j j {j0 {j j @Ie xmlPushInputIq j j j j j j j j j j j j j j00JmxmlParseCharRefJ j j j j j j j j j j j j j j j  j j j j  j  j j j j j jW  j j j j j j@ j "xmlParseStringCharRef!P`deallocblankswrapperP jk  +PexmlNewBlanksWrapperInputStreamP mk mk mk qk vk vk }k k k k k k) k k k8'SfxmlParserHandlePEReferenceS k k k  k k k k k k  l l  l l l l l l l l l l  l l   6l 6l 7l p Ap Ap, Ap Ap@ Ap Ap Ap Ap Gp Gp Gp Gp Hp Kp Kp Rp Tp Tp o{ oe} `p hp cp dp cp cp hp gp oX  =pv 8Td  =5p'v ؒ ` 0 oxmlParseAttValue0 p  "PrxmlParseSystemLiteralP p p p p p p p p p p p  p p p{ p p p p p p p pа p p p)XP!rxmlParsePubidLiteral p p p p p p p q q q q q q q q q q qܼ q q q %q #q %q p'H@kxmlParseCharData@ ;q ;q ;q Mq Pq Oq Oq Oq Oq Oq Oq Oq Oq Oq Oq Oq kq kq lq nq kq rq uq tq tq tq tq tq tq tq tq tq tq tq zq |q q q q q q q q q q q Kqf q0 Vq [q Xq [q$kxmlParseCharDataComplex q q q q q q q q q( q q q q q q q q q q q q! q% q q qL0 sxmlParseExternalID  r r r r r r r r +r *r *r *r /r= 3r 7r 7r Lr0 BrhxmlParseComment fr ^r  ^r  ^r  ^r ^r  ^r lr lr mr lr orЀ sr tr yr r r r r r r! r r r r! r r r r r r> r r r r r r r rT r r r r r r r\0ixmlParsePITarget r r r r r r r r r r r r r r r r hxmlParseCatalogPIb r s s s s s s4hi xmlParsePI s >s =s Js Ns Ls Ls Ls Ms Vs Vs ]s cs ds ds is  js is js is s s s js js js ls ms vs ps s s s s s s s s s sT`!(sxmlParseNotationDecl s s( s s s̀ s s s s s s s s sh s s s s s s s s,hsxmlParseEntityDecl t t t t t t t t t t t t #t %t *t +t /t /t 4t 7t 7t 7t >t ?t Bt Et Ft Gt Ot Yt Vt Vt Vt bt ct dt dt dt lt lt nt qt qt rt yt zt }t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t  t<P sxmlParseDefaultDecl  u u u u u u u u u u u u u u- p !u !u #u$  g!u@!` txmlParseNotationType` @u v >v Ev Ev Gv Gv Iv Qv Qv Sv [v [v ]v ]v _v fv fv hv hv jv$ v v vX 8 |vv8 H\l  eyvv \` ,P8uxmlParseElementMixedContentDeclP v v܀ v v v v v v v v v v v v v v@ v  v v v v v v  v8/`t"xmlParseElementChildrenContentDecl` w w w w w w )w 0w /w 3w 2w 6w 5wx w w ?w ?w    w  w w w w w w w@ Kw Jw Jw Jw Mw Ow Ww Ww rw rw rw uw ww w w w# w w w$ w w w w w w w w w w w_  w w w w w w wP '@XuxmlParseElementContentDecl@ x x  x !x x x x  $x #x +x +x +x /x 0x 3x( xuxmlParseElementDecl Ex Ex Kx Kx Kx( Lx Px Ox Ox Ox Tx Zx Zx ]x ]x \x \x ax gx gx gx nx x x x x x x x x x x x0 tx vx tx tx tx zx+ yx yx Wx Vx Vx@(P uxmlParseConditionalSectionsP  x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x xȔ x x x x x x x x x x x x x$ x y x y y y? y y y y yD  uxmlParseMarkupDecl 3  # # & & & & & & * ނ  G       ł6, $k VׂT omxmlParseCDSect o                 $ & + , - 1 1 1 I H K H 1 3 3m 3 5 = < ? = 2 2 1\0wpxmlParseContent0w i h j j j j j m l s {   A     <zpxmlParseElementz Ƀ  ʃ ʃ σ ԃ ۃ       ؈            . - - - - 8 8 @ L M M OX         ".<PxexmlParseVersionNumP f ` ` ` b f k l l l q s y yD y l n l l l@ u  pgxmlParseVersionInfop              -   (  ` exmlParseEncName`        „ „ „ Ą ń ʄ ʄ  ʄ ̈́ ̈́ ̈́ ̈́ ̈́ ҄ ӄ Ԅ ڄ ڄ ڄ ք 8!0`gxmlParseEncodingDecl0  Ԅ                 $$ $  . . 0 3 2 6 6 '  '  ,` vxmlParseSDDecl Z ^ؐ a g$ j l l l n t s w] w$ z | | | ~  (@vxmlParseXMLDecl                % % %   Ņ υ υ υ څԜ ܅, $   i xmlParseMiscd             0@wxmlParseDocument    ! " ! ( + + + - , 3 ; ; G L Z Z Z ^ f f g k n w v v z |     , !|xmlParseExtParsedEnt     Ć Ć ņ Ȇ ʆ Ɇ І ؆Y ؆    ,#p~xmlParseLookupSequencep` # ( 1 3 4 6 8 3 p~xmlParseGetLastsp i e i e e i j) j) k j p v x. x     `~xmlParseTryOrFinish` ڇ < 9 ڇ Ċ ߇^ , >                       ! ) + + -  > B A H D D E D D$ D  N V W Z Z c d o n q r  [   [                ψ ψ ҈ ҈ "i ؈ i i #i i *i *i  .i  1i 3i 4i 8i ܈                             & 2 2 5 5 = D H I I Ji Li Mi  Ni  Pi  S Q ` r u x |                              ‰ lj Ή Ή ݉                          $ BL D F H J I e P Q P P S U S S S Z Z Z Y X X b!e ]!e g J I I k J I" I o o J I:e y x z y x z y x z y x z y x z y x e             Š Š ˊ ˊ Ԋ Ԋ ݊ ݊ L / . 2 = P  a b E b e i| & & * +  ڈ7vİаܰpX̱  D NvD h T  xmlParseChunk              g  ( ( + + + 2 5,~ xmlStopParser% M N N P0$~xmlCreatePushParserCtxt h  h  h  h h  x ~               80"@h~xmlCreateIOParserCtxt@ ֋ ֋ ֋ ֋         0PH~ xmlIOParseDTDP      & < @  A C C C K K L L  L P O V V X Y Y Zg i l k l k l k l k8~xmlSAXParseDTD                ͌ Ќ ό Ќ ό Ќ ό Ќ ό@0(~ xmlParseDTD  ' }xmlParseCtxtExternalEntity      ! " " % . 1 1 2 5 H H I L N M V V m k j o p q s u {    N       8*0qxmlParseExternalEntityPrivate0                       ' ' + + 5 I H I H I H I H( T Y8#}xmlParseExternalEntity! v v v`(0p}xmlParseBalancedChunkMemory0  @0pPr#xmlParseBalancedChunkMemoryInternalp     ʎ ˎ ̎ Ў ώ Ҏ Վ ׎ ؎        v       & + . 08/0P}"xmlParseBalancedChunkMemoryRecover0 Z P  P  P P  b h o p }          ;     4}xmlSAXParseEntity< ُ ޏ  0  Nޏ0}xmlParseEntity  &lxmlCreateEntityParserCtxt     $ ' / 4 4 5 = 8# pyxmlCreateURLParserCtxt g X X X X ^ d g h n0P$p{xmlCreateFileParserCtxtp $P|xmlSAXParseFileWithData            Đ 0  N@p|xmlSAXParseFile@ P| xmlRecoverDocP  p| xmlParseFilep   t P |xmlRecoverFile    P $|xmlSetupParserForBufferI    & , / 040 {xmlSAXUserParseFileU @(   H H K(  NFv &mxmlCreateMemoryParserCtxti s s  s  y    ,`&`P{xmlSAXParseMemoryWithData`:   ő00p{xmlSAXParseMemory {xmlParseMemory    S {xmlRecoverMemory    S "0{xmlSAXUserParseMemoryW       & #yxmlCreateDocParserCtxt7 6 6$ ; < ; <pzxmlSAXParseDocpF O O O O a0p{ xmlParseDocp v "xmlAddEntityReference&zxmlSetEntityReferenceFunc v xmlInitParserd          @zxmlCleanupParser=     Ȕw xmlCtxtReset                          # '2 ' - - 0 10 yxmlCtxtResetPush  A A  A  A A K K Y Z i r u u w | | ~        @0PhwxmlCtxtUseOptionsP N      ĕ Ε ӕX ߕ ޕ ߕ     0w xmlDoRead0           " ' Py xmlReadDoc7 6 ; = @ @ @y xmlReadFile= N N T U U U UPy xmlReadMemory/ e e k l l00y xmlReadFd0] }        py xmlReadIOP   >     ` xxmlCtxtReadDoc @ Җ Җ  ؖ  ٖ    xxmlCtxtReadFile G          xxmlCtxtReadMemory M    ( ) / /`@ `x xmlCtxtReadFd@ ] B B I J S T U Z ZP  x xmlCtxtReadIO X m m v w    T'GLOBALSCompaq C V6.5-001xmlInitGlobals& P P P PP@؅xmlCleanupGlobals@/ Q Q Q Q Q`%xxmlInitializeGlobalState R P  P P R R  R R R R R R R R R R R' R% R  R R R  R R7  R R R R R  `RvH)xmlThrDefSetGenericErrorFunc: S S S S S S S,0xmlThrDefSetStructuredErrorFunc0A S S S S S S S S#؄xmlRegisterNodeDefault "S "S $S )xmlThrDefRegisterNodeDefaultD *S *S 1S /S 2S 1S /S %pxmlDeregisterNodeDefaultp CS CS ES +xmlThrDefDeregisterNodeDefaultD KS KS RS PS SS RS PS < X/xmlThrDefParserInputBufferCreateFilenameDefault E ZS ZS ZS aS dS aS gS(70*xmlThrDefOutputBufferCreateFilenameDefaultE kS kS kS sS vS sS yS($`__docbDefaultSAXHandler` S $p__htmlDefaultSAXHandlerp S __xmlLastError S $Ѓ__oldXMLWDcompatibility S #__xmlBufferAllocScheme S 'xmlThrDefBufferAllocScheme2 S S S S S(#@__xmlDefaultBufferSize@ S 'P`xmlThrDefDefaultBufferSizeP2 S S S S S(#H__xmlDefaultSAXHandler T #0__xmlDefaultSAXLocator T 0#__xmlDoValidityCheckingDefaultValue T 4'xmlThrDefDoValidityCheckingDefaultValue2 T T T !T T(__xmlGenericError *T !Ȃ__xmlStructuredError 3T %__xmlGenericErrorContext b >b >b Kb Mb Sb40!$xmlSAX2ResolveEntity$A kb kb wb ~b b$0xmlSAX2GetEntity$ b b  b  b  b b b b b b b b bs b b  b b  b  b 0 b b b b b `& 'xmlSAX2GetParameterEntity ' b  @'xmlSAX2EntityDecl@' c b  b  c b  c c c c c c c0 +c +c +c,!)@xmlSAX2AttributeDecl) >c  >c  >c  >c >c  Kc Qc Kc Kc Pc Wc Wc Xc Yc Xc \c ]c  ]c  jc jc jc jc jc oc oc qc ac! bc ac ac(+xmlSAX2ElementDecl+ c c  c  c c  c  c c c c c c c c  c  c` -xmlSAX2NotationDecl- c  c  c  c  c c c c c c c c c  c  c&.xmlSAX2UnparsedEntityDecl. c c  c c  c c c c d d d" d d d,&0ЋxmlSAX2SetDocumentLocator0 'd!0pxmlSAX2StartDocument0 9d 0d  0d ;d =d >d Ad  Od Qd Qd  Ud  Ud W dd dd dd gd gd Wd Xd Wd Zd 02@xmlSAX2EndDocument2r {d sd  sd {d {d {d {d d d d d00%4xmlSAX2AttributeInternal4 d  d  d  d  d d d d d d d d d d d d d d  d d d  d d d d d d d d d d d d d d d d d d d d e e e e e e e e e e e e e e e e e #e e e %e 'e 3e 1e 1e 6e h Bh Ah Oh g Uh Uh g g g g g g g g g g g g \h ^h gh yh th zh yh {h |h h h h h h h h h h h h h h h h h h h h h h h h hH LR P]hvLRR8"WxmlSAX2StartElementNsW h h  h h h h h h h h  h h h h i i  i i i i i i i; "i  #i $i %i +i 6i 6i 6i 6i "i  0i =i =i Hi| Yi Zi ^i ]i ]i gi gi gi gi  ri zi zi\ `]PxmlSAX2EndElementNs`]c i  i  i i i i i i i i,`^HxmlSAX2Reference`^7 i  i i i i i_ЇxmlSAX2Characters_ i i i  i i  i i i j j j j j j j j j j #j 'j 'j .j -j 0'aPxmlSAX2IgnorableWhitespacea Jj)bhxmlSAX2ProcessingInstructionb Uj  Uj  Uj  cj ej fj hj lj lj tj j j ``cxmlSAX2Comment`c j j j j j j j0 j j j j j jexmlSAX2CDataBlocked j j j j j j j j j j!exmlSAXDefaultVersione" j j j @ fЍ xmlSAXVersion f j j k k k k k k k k k k k k k k k k k k k k k #k k @)`gHxmlSAX2InitDefaultSAXHandler`g0 3k 5k 3k 5k xmlDictAddQStringpkxmlDictComputeKeypk4 ]P ^P ^P aPxmlDictComputeQKeyl xmlDictCreatelc P P P P P P P P P P$`mxmlDictCreateSub`m P P P( m PpmxxmlDictReferencem P P P0n xmlDictGrown P   P  P  P P Q Q Q Q Q  6 (Q 1Q *Q (Q@qP xmlDictFreeq ^Q VQ VQ  VQ  VQ  VQ dQ hQ iQ oQ rQ nQ iQ# {Q |Q {Q<r  xmlDictLookupr Q Q Q Q  Q  Q Q Q Q Q Q Q  Q   Q Q Q Q Q Q Q  Q   Q Q Q Q' Q Q@ Q vؑxmlDictQLookupv R R R R  R R  R  R R  ~P ~P }P P P P P P Pn R R R R R "R "R 'R (R -R -R ,R +R 2R 2RX *P  .P .P 4P 1P 4P 1P  ;P >P P >P BP CP KP LPT MP CR KR NR MRP ?R 8| :Rv8|(p|@} pw Rvpw|w ,~ xmlDictOwns~= cR fR cR cR  hR mR pp xmlDictSizep {R }R R8) XMLREGEXPCompaq C V6.5-001ВxmlRegexpErrMemory) Y Y Y `@xmlRegexpErrCompile`: Y Y Y Y Y xmlRegEpxFromParse  Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z Z Z Z Z  Z Z Z Z Z Z &Z 'Z 'Z *Z *Z 0Z &Z 4Z 4Z 4Z 4Z ?Z AZ AZ AZ KZ LZ KZ MZ KZ TZ \Z  \Z aZ fZ bZ7 bZ iZ lZ mZ lZ nZ xZ xZ Z Z Z hZ  \Z- Z Z Z Z Z Z Z# Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z# Z ZP ЊxmlRegNewParserCtxtЊ= Z Z Z Z Z Z,xmlRegNewRangexmlRegFreeRange xmlRegNewAtom@ $[ ![ ![ ![ %[ *[$pxmlRegFreeAtompR <[ 8[ [* [+ [) @[ @[ B[8  3@[vČԌ0L0 xmlRegNewState= K[ H[ H[ H[ L[ Q[ PxmlRegFreeStateP3 _[ ][ ][ a[ ][ c[!ЗxmlRegFreeParserCtxt} p[ m[ m[ r[ t[ u[ u[ u[ y[ z[ z[ z[ ~[ ~[( 8xmlRegPrintAtomType [ [ [i [i [i [g [t [ [ [ 0!xmlRegPrintQuantTypexmlRegPrintRangexmlRegPrintAtomxmlRegPrintTransxmlRegPrintState@xmlRegAtomAddRange \ \ \ \ \ \ \ \ \ \ Z Z) [ [,  \v00D`xmlRegGetCounterb \ \ \ \ \ \ \ \,@xmlRegAtomPushr \ \ \ \ \ \ \ \ \ \,` @`xmlRegStateAddTrans@ \ \ ] ] ] ] ]  ] ] ] &] $]" )] >]@0pxmlRegStatePushpp F] F] F] F] F] Q] Q] X] ]],@'xmlFAGenerateAllTransition+ xmlFAGenerateEpsilonTransition0 ] ] ] ] ]2@%xmlFAGenerateCountedEpsilonTransition@0 ] ] ] ] ] +@xmlFAGenerateCountedTransition0 ] ] ] ] ] %(xmlFAGenerateTransitions ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]; ^ ^  ^  ^  ^  ^,  #^ #^ ^ ^ 0*0xmlFAReduceEpsilonTransitions0 C^ :^ :^  :^ :^  :^ :^ M^$ U^ U^ ^^ f^3 t^ y^ y^ T^)@-0 xmlFAEliminateEpsilonTransitions0 ^ ^ ^  ^ ^ ^ ^ ^ ^ ^# ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^= ^ ^" ^ ^ ^ H`xmlFACompareAtomsj _ _ _ _ _ _ _ _ _ _  _  $PxmlFARecurseDeterminismV *_ *_ *_ 3_ @_ 2_@ C_`%xxmlFAComputesDeterminism \_ Q_ Q_ Q_ d_ h_ r_ u_ w_ ~_ _( q_ g_$ c_+P _0&00xmlRegCheckCharacterRange0 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _d4`!xmlRegCheckCharacter H` D` D` D` D` D`^@ I`^ H` R` T` U` T`$ [`  K`U@ȘxmlFARegExecSave@ ` ` ` ` ` ` ` ` ` ` `8 ` ` ` ` `(0!pxmlFARegExecRollBackpe ` ` ` a a a a a a a,`Л xmlFARegExec` a a a !a (a -a a ka 6a3 6a 7a 6a 6a Ca Ca Ca Ha  Ya Ua Xa  Za ba ia ma oa pa va pa qa qa a ~a ~a a a a a a a a  a TaK a a 6a aN a a a a a a aH0xmlRegNewExecCtxt0 a a b b b b b b b b b b %b,xmlRegFreeExecCtxto 3b 1b 6b 6b :b 9b  ?b ?b Eb Eb Db,(`xmlFARegExecSaveInputString Sb Nb Nb Nb Ub \b \b `b bb ib jb jb (p$xmlRegCompactPushString ~b ~b ~b  b b b b b b/@ b b b b!xmlRegExecPushString b b b b  b  b b b b b b b  b  b  b b c c c c c c c c c c c  $c  *c 6c 6c 2c Ec Ec Pc Qc Vc Vc  \c ]c ]c ]c cc hc mc pc pc  ~c c c c c c {c/ bS McP c ch c c c c bP"xmlRegExecPushString2 c c c  d d d d d d d d d d9 d d d d d8 xmlFAIsCharpxmlFAParseCharProp d d d d d d d d e e e e e e e e e e )e -e ,e 0e 4e 8e =e  (h (h (hL  Ѯ&h  _\'vXl'v< 0 !h  ]+\vT  2 \$v0P(H НxmlRegexpCompile K 9h Hh Hh Kh Sh 0P xmlRegexpExecP gh ih0#pxmlRegexpIsDeterminist{ uh uh uh  ~h {h {h ~h h h h hY h8 t h@PxmlRegFreeRegexp h h h h h h h h h h h h  h h h6 h h h h h400xmlNewAutomataF h h h h h h,  h L hvLX xmlFreeAutomata h $xmlAutomataGetInitState h h  %xmlAutomataSetFinalState# i i i i@%PxmlAutomataNewTransitionPW i i i i i i i %i,&`HxmlAutomataNewTransition2` Hi Ci Ci Hi Ci Ci Ci Ii Ji Ni Ti Ui Xi \i6 \i ]i ^i ^i Oi<0%xmlAutomataNewCountTrans i i i i i i i i i  i i i  i i@$pxmlAutomataNewOnceTransp i i i i i i i i i i i i i i " i i0 `xmlAutomataNewState ! i i i$p"@xmlAutomataNewEpsilon7 j j j j j j,#xmlAutomataNewAllTransP &j $j &j $j $j $j o]  n] , \ ²)jv\pTh" xmlAutomataNewCounter / 9j 9j 9j Bj(' xmlAutomataNewCountedTrans @ Wj Uj Uj Wj Uj Uj Uj,' `xmlAutomataNewCounterTrans @ oj mj mj oj mj mj mj, ДxmlAutomataCompile ? j j j j j j j %0 xmlAutomataIsDeterminist0  j j'THREADSCompaq C V6.5-001P   xmlNewMutexP * T T T  T P P xmlFreeMutex  T T0 @ xmlMutexLock  T 0xmlMutexUnlock  T  xmlNewRMutex * U U U UP@  xmlFreeRMutex@  4U  `  xmlRMutexLock`  _Up pxmlRMutexUnlockp  U УxmlGetGlobalState  5V  xmlGetThreadId  PV  xmlIsMainThread  sV  xmlLockLibrary  V xmlUnlockLibrary  V `xmlInitThreads  V PxmlCleanupThreads  V%ERRORCompaq C V6.5-001' pxmlGenericErrorDefaultFunc + UO UO XO [Op(` initGenericErrorDefaultFunc`  nO kO jO mO@# xmlSetGenericErrorFunc  O O O0& xmlSetStructuredErrorFunc  O O # ХxmlParserPrintFileInfo F O O O O O O O O .!xmlParserPrintFileContextInternal O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Oj O O O O O O O O O O( &xmlParserPrintFileContext O O O hxmlReportError O P O  O P P %P 'P *P -P 3P 3P 6P  xP  P }P zP P P P P P P P P P P P P( P P PT P* P P P PLp __xmlRaiseErrorp P  P P  P P P P P P P  P P P P P P P P P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q #Q #Q &Q &Q (Q (Q *Q *Q ,Q /Q +Q 5Q 9Q ;Q GQ KQ7 IQ IQ IQ NQ NQTP__xmlSimpleErrorPI _Q _Q _Q dQ eQ jQ jQ P xmlParserError a }Q Q Q Q Q Q Q QH`#xmlParserWarning#a Q Q Q Q Q Q Q QH`#`%`xmlParserValidityError`%s Q Q Q Q Q Q Q Q Q Q@%'xmlParserValidityWarning'V R R R R R R R<0*pxmlGetLastError* 1R 1R 3R 0@* xmlResetError@*K @R BR =R CR ER GR IR KR( `+HxmlResetLastError`+ ZR ZR0 +8xmlCtxtGetLastError+$ lR nR nR pR @"+xmlCtxtResetLastError+ R0, xmlCopyError, R R R R R R R R  R R R R R R0 R R R R H) XMLSTRINGCompaq C V6.5-001P.Ш xmlStrndupP.> uV rV rV rV wV {V,0/ xmlStrdup0/5 V V V V V V 0xmlCharStrndup0 V V V V V V V V$ Vh V( V V V V V, 2  xmlCharStrdup 2 V V V 2 xmlStrcmp2H V V V V V V V V3 xmlStrEqual3K V V V V V V V V V 4Ы xmlStrQEqual4 V  V  V  V  V  W W W W W W W W W0 W W5 W W W W W$ WP7 xmlStrncmpP7l W W  W  !W !W !W !W !W !W !W !W "W "W p8 xmlStrcasecmpp8[ YW YW [W ]W ]W ]W ]W ]W ]W ]W09HxmlStrncasecmp9U rW sW uW wW wW wW wW wW wW xWP: xmlStrchr:\ W W W W W W W W W W W; xmlStrstr;o W W W W W W W W W W W W W<` xmlStrcasestr<f W W W W W W W W W0 W W W0=( xmlStrsub= W  W W W W W W W W W W W W W$ W W W p? xmlStrlenp?^ W W W W W W W W W W  @ xmlStrncat @N X X X X X X X X00PA xmlStrncatNewPAQ *X &X &X /X /X 1X 6X 6X0PB xmlStrcatB2 GX GX KX LX LXC` xmlStrPrintfC/ ^X ^X ^X fXPD( xmlStrVPrintfPD: }X zX zX zX zX ~X D xmlUTF8SizeDp X X  X X X X X X X X X X XExmlUTF8CharcmpE X X X`E xmlUTF8StrlenE X X X X X X X X X X X X X X X/ X X X X X  @ GxmlGetUTF8Char G Y Y Y Y Y Y  Y  Y  Y Y Y Y Y Y Y Y Y Y Y Y Y Y !Y !Y &Y0 'Y 'Y 'Y  ,Y 1YI xmlCheckUTF8I HY IY JY MY JY PY HY HY VY HY YY HY \Y HY$ KY NY QY  ``JxmlUTF8Strsize`J rY oY uY uY uY uY uY uY uY uY yY yY yY yY yY yY uY sY  K(xmlUTF8StrndupKU Y Y Y Y Y Y Y Y Y,L xmlUTF8StrposL Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YB Y Y Y  Y  Y  Y  Y`@O xmlUTF8Strloc@O Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Q` xmlUTF8StrsubQ Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y; Z Y  Z Z Y  Y$HASHCompaq C V6.5-001 S@xmlHashComputeKey S N N N N N N N N N$ N N N N N N N Nb N$ N N N N N N N N N$ N N @xmlHashComputeQKey`V  xmlHashCreate`VW O O O O O O O O$ xmlHashGrow@W xmlHashFree@Wv |O |O O O O O O O O O OLY`xmlHashAddEntryY O 0Y@xmlHashAddEntry20Y O @Y xmlHashUpdateEntry@Y O `YxmlHashUpdateEntry2`Y O Y xmlHashLookupY OYxmlHashLookup2Y PYxmlHashQLookupY P P P PYxmlHashQLookup2Y )P )P )P@0ZxmlHashAddEntry30Z EP >P >P LP OP QP QP QP PP OP WP WP eP fP iP gP hP .OA ,OE 6O< ,O ,O  .O ;Oa EO DO MO XO XO OO MO D \ tP'v\\\\ ^`xmlHashUpdateEntry3^ P P P P P P P P P P P P P4 P P P P@a@xmlHashLookup3aV P P P P P$ P P0 P P P@cxmlHashQLookup3c P  P  P N" N N" N N N N N N N N$ N N N N N N N N N$ N N N N N N N N N N$ N N N N N N N N N$ N N N N N N N N N N$ N N N N N N N N N$ N N  N  Q& Q Q Q@ Q Xc Q'vXctcc\iLPp jstubHashScannerFullj Q  j xmlHashScanj) #Q #Q #Q #Q$PjxmlHashScanFulljG 9Q 3Q  ?Q CQ DQ BQ >Q 8k xmlHashScan3k ^Ql`xmlHashScanFull3l pQ pQ  pQ  ~Q Q Q Q Q Q Q Q Q Q= Q Q Q Q Q }QL  n@ xmlHashCopy ni Q Q Q Q Q Q >Q Q Q Q LpoЬ xmlHashSizeo Q Q  oxmlHashRemoveEntryo Q oxmlHashRemoveEntry2o Q  oPxmlHashRemoveEntry3o R Q Q Q R R R R@ R R R R R R: R R R R Rh) XMLMEMORYCompaq C V6.5-001 PrxmlMallocBreakpointPr sU sU sU0r8 xmlMallocLocr U U U U U U U U U U U U, U U U U(@tдxmlMallocAtomicLoc@t U U U U U U U U U U U U, U U U U(v xmlMemMallocv VvX xmlReallocLocv V V 'V &V 'V.0 -V ,V ,V .V ;V ;V  V V V V V(y8xmlMemStrdupLocy V V V V V V V V V V V VY V V V V V V V V,{xmlMemoryStrdup{ V{ xmlMemUsed{ W{xmlMemContentShow{ W W W W W WD W W W W W $W &Wt &W &W &W &W "W 1W 1W 6W 7W 7W 7W 7WD` xmlMemDisplay HW  HW  HW  SW MW [W TW TW  UW aW oW rW `W  <`p(debugmem_list_addp W W0!debugmem_list_delete W W@ȳdebugmem_tag_error? W W W W W W W pز xmlMemShowp~ W W W W W W W W W W W Wx xmlMemoryDumpU W W W W W W W W0 xmlInitMemoryr X X  X  X  X X X X X "X !X$HxmlCleanupMemory7 9X 9X 4X 4X >X =XpP8 xmlMemSetupP] [X ]X _X  aX  dX cX eX fX cX fXЈ( xmlMemGetЈ! }X }X X P xmlGcMemSetupPg X X X X  X  X X X X X X xmlGcMemGet X X$LISTCompaq C V6.5-001pxmlLinkDeallocatorp. 6R 4R 4R 4R :RxmlLinkCompare JR JR LR00XxmlListLowerSearch0# _R [R `R( `R  xmlListHigherSearch# qR mR rR( rR xmlListLinkSearch- R R R R,%0xmlListLinkReverseSearch0- R R R R,Ѝص xmlListCreateЍu R R R R R R R R R R R$`0 xmlListSearch0! R R$ R`!`xmlListReverseSearch! R R$ R`x xmlListInsertF R R S S S S$@ xmlListAppend5 S S #S $S,8 xmlListDelete 6S :SxmlListRemoveFirst GS GSp xmlListRemoveLast ^S ^SpxmlListRemoveAll) uS uS zS |S, xmlListClear* S S S S,  xmlListEmpty  S @p xmlListFront@ SP` xmlListEndP S`P xmlListSize` S S pД0xmlListPopFrontД S; S: Д ,SvДؔ0xmlListPopBack SH SG  ,Sv00xmlListPushFront0A S S S S S S,жxmlListPushBackB T T T T T T,xmlLinkGetData /T xmlListReverse= ;T ;T >T =T =T =TP xmlListSortP; S NT  [T6 aT _T _T0  W1_T P ,ST ` xmlListWalk  pT mT pT4И@xmlListReverseWalkИ T T T4  xmlListMerge$ T T T TPЙ xmlListDupЙ T T,p xmlListCopyp* T T T0 T T'NANOFTPCompaq C V6.5-001PxmlFTPErrMemoryP }r {r(0xmlNanoFTPInit~ r r r r  r r r r r r r r,PМ0xmlNanoFTPCleanupМJ r r r r r r r r(xmlNanoFTPProxy r r r r r r r r r r r r r r r0xmlNanoFTPScanURL r r r r r r r s s  s s s s  s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s !s !s $s $s #s $s $s $s $s $s #s $s $s $s #s #s 's; 0s 0s 0s 7s, Us /s; /s 2s 8s 9s 9s 9s 9s 9s 9s 9s 9s 9s 9s 9s 9s 9s t @t @t @t @t @t @t @t @t @t Gt Nt Nt Ot Nt Ot Rt Rt Rt Rt Rt Rt Rt Rt Rt Xt ]t ]t ]t4P(xmlNanoFTPNewCtxt} ut qt qt }r }r }r {t t |t ~t t0 ػ o2xtvػ,PxmlNanoFTPFreeCtxtK t t t t t t t t$xmlNanoFTPParseResponsexmlNanoFTPGetMore#xmlNanoFTPReadResponse u tk t t t t t t t  t u u u u /u /u 6u t t  t  t t t t t} t t t t t 8u  >u @u t Ou Ou0 Hu *u x !A8u  OA)uv dT"xmlNanoFTPGetResponse gu$xmlNanoFTPCheckResponseT uu uu zu }u }u }u }u }u u xmlNanoFTPSendUser!xmlNanoFTPSendPasswdxmlNanoFTPQuitB u u u u u u0xmlNanoFTPConnect u u u u5 v u1 1v 5v >v =v @v @v Av Av Mv Mv gu gu Yv%  v v v v gu0! v" v v! v v v v v guH guF v v v v v v v guq guo v v v v v v gu4#0 v v v w w w gu w u u u u u u %w gu  +w  u uh u u u u{ :w gu Dw @w Dw  C w 0 Cv  Cvv  Cvv  Cv  C@w 0 D:w  C+w  \D%w  CYvv xmlNanoFTPConnectTo1 ^w ^w ew fw,P xmlNanoFTPCwdPW |w  |w  |w  w w w w gu-  Cw PxmlNanoFTPDelePW w w w w w w w gu]  Cw $PxmlNanoFTPGetConnectionP w w w w  w w w w x x x x x *x *x ,x *x *x ,x .x 3x 3x 8x~ Dx Fx Mx _x _x dx ex jx kx gu  qx,  Cqx 0&HxmlNanoFTPCloseConnection x x x$ x x x x x x x x x x x0 gu9  Cx  PxmlNanoFTPParseListP x x x x x x x x x x x x x xI@ x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y} y y y y y y y y y y y y !y  p@xmlNanoFTPListp 5y ?y >y Fy Oy Py Ty Uy [y [y \y  ay ay dy dy fy dy dy dy fy oy  ~y ~y  y@ ly 0xmlNanoFTPGetSocket0 y y y y y y y y y y y y  y y,Ƚ xmlNanoFTPGet y y y y y y y y@ y zxmlNanoFTPRead; $z $z $z $z ,z$xmlNanoFTPOpen. Az Fz Kz,xmlNanoFTPClose< az az az gz kz>(NANOHTTPCompaq C V6.5-001PxmlHTTPErrMemory [y Yy(0 socket_errnoxmlNanoHTTPInitf y y y y y  y y y y ypxxmlNanoHTTPCleanupp1 y y y y yp`xmlNanoHTTPScanURL y y y y y y y y y  y y y y  y y y y y y y y y, z y; y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y z z z z z z z z z z z z z z z z z z z z z zz z "z "z "z "z "z "z "z "z "z "z "z "z "z $z0 !xmlNanoHTTPScanProxy 4z 4z 4z 4z 4z 7z Jz Lz Lz Lz Nz Nz Wz Yz Yz _z, }z z Xz: Xz `z az az az az az az az az az az az az az az az az az az ez dz ez jz jz jz kz nz pz pz pz pz pz pz pz pz pz wz ~z ~z z ~z z z z z z z z z z z z  z z z4pPxmlNanoHTTPNewCtxtPc z z z [yH [yJ [yK z z  5Vzv, @ xmlNanoHTTPFreeCtxt@ N z z z z z z z z pxmlNanoHTTPSend  z z z z z! z z z z ey| ey~ z ey zI z z z z z  z z {0  xVzv     xVzv   8xmlNanoHTTPRecv  {  { {H {% .{ {> { { { { { #{ #{ #{ '{ '{ ){ *{ *{ 6{ 5{ >{ ey eyP B{w T{ W{ W{ W{ Y{ { [y [y [y [y [y P 5V1{vPXl (  xVC{v  5V{v4$ xmlNanoHTTPReadLine"xmlNanoHTTPScanAnswer { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { {܂ { { { { { { { { { { { { { { { { { { { { { { { { { { { { {J { { | | | |0 &xmlNanoHTTPConnectAttempt#xmlNanoHTTPConnectHost |A |A | 3 | |A$ |# | H| | H| 3|? $} %} %} (} 3| 3| 3| 6| 3| 6|  G| H| ey ey ey h| v| v| v| s|  w| s| | | | | | |2 | |$ | $}H x f9}  xVi|v$/vx 0 xmlNanoHTTPOpen  T}A W}  mW}`!!XxmlNanoHTTPOpenRedir! h} pp!8xmlNanoHTTPReadp!< {} {} } } }$@"xmlNanoHTTPClose@" } #`"`xmlNanoHTTPMethodRedir`" }  }  } }  }  }  }  } } } } } } } } } }  } } ~ ~ ~ ~  ~ ~ ~   ,~  ;~ q{ u{ { x{ w{ { { >~ ?~ A~ A~  M~ T~ T~ V~ } } } }\ [y [y f~ l~ p~ o~  } }P & Pc?~( ) 5V}v )@)00*xmlNanoHTTPMethod*! ~ ~ ~ P*xmlNanoHTTPFetch*k ~ ~ ~ ~ ~ } } ~ ~ },4 + Rj~ l+ Rj~vl+t+`@,xmlNanoHTTPSave@,` ~ ~  ~ ~ ~ ~ }I ~ }S$ - Rj~ , Rj~ "P-пxmlNanoHTTPReturnCodeP- ~   "p-xmlNanoHTTPAuthHeaderp-    %-xmlNanoHTTPContentLength- # #  -xmlNanoHTTPRedir- 2 2  -xmlNanoHTTPEncoding- A A  -xmlNanoHTTPMimeType- P P  $.xmlNanoHTTPFetchContent.Z `  `  `  }  t('XMLSAVECompaq C V6.5-001 / xmlIsXHTML /< X X X X X,xmlSaveErrMemory0 xmlSaveErr0 X X X X X X X X X X X  X X  X #P1xmlSerializeHexCharRefP1 X X X X  Y X  X X X Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YD4xmlEscapeEntities4 Y AY >Y >Y GY HY >Y  >Y  >Y OY PY >Y QY RY >Y >Y XY YY XY >Y >Y >Y$ _Y cY cY eY iY mY oY pY sY sY sY wY xY {Y {Y {Y |Y Y Y Y >YS >YS >Y[ Y Y YFP fY Y Y  Y  Y Y Y9xmlSaveCtxtInit9y Y Y Y Y Y Y Y Y Y Y Y Y Y Y,;xmlFreeSaveCtxt;5 Y Y Y Y Y Y@<HxmlNewSaveCtxt@<s Y Y Y Y X  X  X  Y Y Y0 < arYv<<<,`$=xmlAttrSerializeContent=K Z Z Z Z Z Z Z  Z<P>`xmlNsDumpOutput>Q 3Z 4Z 2Z 2Z 6Z 9Z ?Z ?Z0P @@xmlNsListDumpOutput@@ MZ LZ MZ(p@xmlDtdDumpOutput@ `Z [Z aZ [Z [Z fZ kZ oZ oZ oZ oZ yZ wZ xZK vZ {Z xZ }Z ~Z Z }Z ~Z4PCxmlAttrDumpOutputCH Z Z Z Z Z Z Z Z0"xmlAttrListDumpOutput"0DxmlNodeListDumpOutput0D] Z Z  Z Z Z Z Z Z Z Z < &PE0xmlNodeDumpOutputInternalPE Z  Z Z Z Z Z Z Z Z Z Z Z Z Z [ [ [ [ [ [ [ [ "[ "[ "[ %[ ![ ![  +[ +[ 2[ 6[ @[ ?[ >[ @[ ?[ >[ @[ ?[ >[ I[ NZ MZ Z Z U[] T[ [[ ^[ c[ d[ d[ d[ j[4 K M|S[ pK zQ[p$MxmlDocContentDumpOutputM [ {[ {[ {[ [ ~[ [ [ [ [ [ [X [ [ [ [ [  [80 xhtmlIsEmpty$PxhtmlAttrListDumpOutputP \ \ *\ -\ -\ -\ -\ 2\ \ ?\ ?\ ?\ ?\ ?\ ?\ ?\ ?\ ?\ ?\  Q\ Q\ V\ V\<@$xhtmlNodeListDumpOutput 0UxhtmlNodeDumpOutput0U \ \ \  \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  \ \ \ \ \ \ \ \ \ NZ MZ ] \ \ ] [. [. ] [ [ [ [ [ [ [ [ [ [ ] ] ] ] %] %] %] %] %] -] -] 3] 3] 3] 3]  @] C] B] C] B] B] G] A]  A]  N]  ,]) Y] W] ,]4 a] n\ q\ q\ q\ s\ s\ x\ p\ i] j]6 j] k] k] k] q]H a Xh] [  ]v[[[, Z z\c xmlSaveToFdc ] ],pdxmlSaveToFilenamepd ],0eh xmlSaveToIO0e ] ],e( xmlSaveDoce ] ] ]@0f xmlSaveTree0f ^ ^ ^@pf xmlSaveFlushpf ^ ^ ^ Pf xmlSaveClosef! +^ +^ +^(p0gxmlSaveSetEscape0g A^ B^ !PgxmlSaveSetAttrEscapePg R^ S^ 'pg0xmlAttrSerializeTxtContentpg f^ f^T o^ n^ f^[ o^ o^ p^ r^ v^ u^ v^ x^ |^ {^ |^ ~^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^k ^ ^ ^ ^ ^ ^  n^k ^ ^Lm` xmlNodeDumpm ^ ^ ^ ^ X/ X1 X2 _ _ _0 n ar_vnn(n ,o0 xmlElemDumpoN _ _ _ +_ 4_ 7_ 7_,pxmlNodeDumpOutputp V_ V_ V_ \_ V_ e_ f_ b_ n_ o_ o_ o_ r_0&qxmlDocDumpFormatMemoryEncq _ _ _  X X X X _ _ _O _ _ _ X X X< s ar_vsss4 tr ar_'vtr|rrr0`txmlDocDumpMemoryt _#txmlDocDumpFormatMemoryt _  txmlDocDumpMemoryEnc t `0txmlDocFormatDump0tj `  `  `  ,` -` 9` 6` 5`4`u xmlDocDumpu L`u xmlSaveFileTouG Z` Z` Z` Z` d` a` ``$ `vxmlSaveFormatFileTo`vG x` x` x` x` ` ` `$! wxmlSaveFormatFileEnc wW ` ` ` ` ` `4`x`xmlSaveFileEncx `x@xmlSaveFormatFilex ` >x  xmlSaveFilex `* XMLUNICODECompaq C V6.5-001x xmlUnicodeLookupxL        "yxmlUCSIsAegeanNumbersy  0yp#xmlUCSIsAlphabeticPresentationFormsy  y`xmlUCSIsArabicy  -yP xmlUCSIsArabicPresentationFormsAy   -z@ xmlUCSIsArabicPresentationFormsBz  0z0xmlUCSIsArmenian0z  Pz xmlUCSIsArrowsPz $ pzxmlUCSIsBasicLatinpz 1 zxmlUCSIsBengaliz > "zxmlUCSIsBlockElementsz K zxmlUCSIsBopomofoz X %zxmlUCSIsBopomofoExtendedz e {xmlUCSIsBoxDrawing{ r $ {xmlUCSIsBraillePatterns {  @{ xmlUCSIsBuhid@{  ,`{xmlUCSIsByzantineMusicalSymbols`{  %{xmlUCSIsCJKCompatibility{  *{pxmlUCSIsCJKCompatibilityForms{  /{`"xmlUCSIsCJKCompatibilityIdeographs{   9{P,xmlUCSIsCJKCompatibilityIdeographsSupplement{   *|@xmlUCSIsCJKRadicalsSupplement|  - |0 xmlUCSIsCJKSymbolsandPunctuation |  )@| xmlUCSIsCJKUnifiedIdeographs@|  3`|&xmlUCSIsCJKUnifiedIdeographsExtensionA`|  3|&xmlUCSIsCJKUnifiedIdeographsExtensionB|   |xmlUCSIsCherokee|  .|!xmlUCSIsCombiningDiacriticalMarks| ( 8|+xmlUCSIsCombiningDiacriticalMarksforSymbols| 5 '}xmlUCSIsCombiningHalfMarks} B - } xmlUCSIsCombiningMarksforSymbols } O $@}xmlUCSIsControlPictures@} \ $`}xmlUCSIsCurrencySymbols`} i %}xmlUCSIsCypriotSyllabary} v }pxmlUCSIsCyrillic}  '}`xmlUCSIsCyrillicSupplement}  }PxmlUCSIsDeseret}  ~@xmlUCSIsDevanagari~   ~0xmlUCSIsDingbats ~  *@~ xmlUCSIsEnclosedAlphanumerics@~  0`~#xmlUCSIsEnclosedCJKLettersandMonths`~  ~xmlUCSIsEthiopic~  '~xmlUCSIsGeneralPunctuation~  $~xmlUCSIsGeometricShapes~  ~xmlUCSIsGeorgian~  xmlUCSIsGothic    xmlUCSIsGreek   "@xmlUCSIsGreekExtended@ , #`xmlUCSIsGreekandCoptic` 9 xmlUCSIsGujarati F pxmlUCSIsGurmukhi S /`"xmlUCSIsHalfwidthandFullwidthForms ` ,PxmlUCSIsHangulCompatibilityJamo m @xmlUCSIsHangulJamo z $ 0xmlUCSIsHangulSyllables    @ xmlUCSIsHanunoo@  `xmlUCSIsHebrew`  - xmlUCSIsHighPrivateUseSurrogates  #xmlUCSIsHighSurrogates   xmlUCSIsHiragana  "xmlUCSIsIPAExtensions  5(xmlUCSIsIdeographicDescriptionCharacters   xmlUCSIsKanbun   #@xmlUCSIsKangxiRadicals@  `xmlUCSIsKannada`  xmlUCSIsKatakana  /p"xmlUCSIsKatakanaPhoneticExtensions # ` xmlUCSIsKhmer 0 !PxmlUCSIsKhmerSymbols = @ xmlUCSIsLao J % 0xmlUCSIsLatin1Supplement  W#0 xmlUCSIsLatinExtendedA0 d #PxmlUCSIsLatinExtendedBP q ,pxmlUCSIsLatinExtendedAdditionalp ~ &xmlUCSIsLetterlikeSymbols   xmlUCSIsLimbu  %ЂxmlUCSIsLinearBIdeogramsЂ  %xmlUCSIsLinearBSyllabary  "xmlUCSIsLowSurrogates   0xmlUCSIsMalayalam0  4P'xmlUCSIsMathematicalAlphanumericSymbolsP   *pxmlUCSIsMathematicalOperatorsp  6p)xmlUCSIsMiscellaneousMathematicalSymbolsA  6`)xmlUCSIsMiscellaneousMathematicalSymbolsB  )ЃPxmlUCSIsMiscellaneousSymbolsЃ  2@%xmlUCSIsMiscellaneousSymbolsandArrows  +0xmlUCSIsMiscellaneousTechnical ' 0 xmlUCSIsMongolian0 4 #PxmlUCSIsMusicalSymbolsP A pxmlUCSIsMyanmarp N xmlUCSIsNumberForms [  xmlUCSIsOgham h ЄxmlUCSIsOldItalicЄ u 0#xmlUCSIsOpticalCharacterRecognition   xmlUCSIsOriya  0xmlUCSIsOsmanya0  'PxmlUCSIsPhoneticExtensionsP  pxmlUCSIsPrivateUsep3      P#pxmlUCSIsPrivateUseArea   ` xmlUCSIsRunic  PxmlUCSIsShavian   @xmlUCSIsSinhala   &@0xmlUCSIsSmallFormVariants@  +` xmlUCSIsSpacingModifierLetters`  xmlUCSIsSpecials  .!xmlUCSIsSuperscriptsandSubscripts  (xmlUCSIsSupplementalArrowsA - (xmlUCSIsSupplementalArrowsB : 6)xmlUCSIsSupplementalMathematicalOperators G 1 $xmlUCSIsSupplementaryPrivateUseAreaA  T  1@$xmlUCSIsSupplementaryPrivateUseAreaB@ a  `xmlUCSIsSyriac` n xmlUCSIsTagalog { xmlUCSIsTagbanwa  p xmlUCSIsTags  ` xmlUCSIsTaiLe  'PxmlUCSIsTaiXuanJingSymbols   @ xmlUCSIsTamil   @0xmlUCSIsTelugu@  ` xmlUCSIsThaana`   xmlUCSIsThai  xmlUCSIsTibetan  xmlUCSIsUgaritic  7*xmlUCSIsUnifiedCanadianAboriginalSyllabics  'xmlUCSIsVariationSelectors   1 $xmlUCSIsVariationSelectorsSupplement  $  @xmlUCSIsYiRadicals@ 1  `xmlUCSIsYiSyllables` >   *xmlUCSIsYijingHexagramSymbols K  h xmlUCSIsBlockF X  X  X  ]  ^  ^  ^  ^  H xmlUCSIsCatC  k   @8 xmlUCSIsCatCc@ y  x  x  ` xmlUCSIsCatCf`    xmlUCSIsCatCoY            ` xmlUCSIsCatCsC         P0 xmlUCSIsCatL0   P xmlUCSIsCatLlP   p xmlUCSIsCatLmp   x xmlUCSIsCatLo   X xmlUCSIsCatLt   Ћ8 xmlUCSIsCatLuЋ    xmlUCSIsCatM !   xmlUCSIsCatMc !  0 xmlUCSIsCatMe08 ! ! ! ! ! !@p xmlUCSIsCatMnp -!   xmlUCSIsCatN :!   xmlUCSIsCatNd G!  Ќx xmlUCSIsCatNlЌd U! T! V! U! T! W! U! T! T! W! T! T!`0X xmlUCSIsCatNo0 f!  P8 xmlUCSIsCatPP s!  p( xmlUCSIsCatPcp ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  xmlUCSIsCatPd !   xmlUCSIsCatPe !  0 xmlUCSIsCatPf0 ! ! !0` xmlUCSIsCatPi`; ! ! ! ! ! ! !@ xmlUCSIsCatPo !   xmlUCSIsCatPs !  h xmlUCSIsCatS !  H xmlUCSIsCatSc !   ( xmlUCSIsCatSk  "  @ xmlUCSIsCatSm@ "  ` xmlUCSIsCatSo` "   xmlUCSIsCatZ *"   xmlUCSIsCatZl 7" xmlUCSIsCatZp D"x xmlUCSIsCatZsO R" Q" S" Q" T" Q" Q" Q" Q"` P xmlUCSIsCat F e" e" e" j" k" k" k" k"t%XPATHCompaq C V6.5-001trio_make_double+ jk qk qk qk rk@@%trio_is_special_quantitytrio_is_negative trio_nzero k trio_pinf7 k k k k  k kp trio_ninfp. k k k  k ktrio_nan7 l k l k  l "lp trio_isnanp k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k Kl p pJl/vpxH|  trio_isinf $ sl sl sl7$(@trio_fpclassify_and_signbit\ lV lV lV Im Om Um*,@p trio_signbit m m@0  xmlXPathInit0S ]n \n _n `n k k k bn dn  cnvЗ xmlXPathIsNaNЗ sn xmlXPathIsInf nxmlXPathGetSignpxmlXPathErrMemory n n n n n n n n n n n n n,xmlXPathPErrMemory xmlXPathErr o o o o o o o $o "o #o )o $o $os -o .o -o .o .o 2o 2o 8o 8o 8o 8o,@ xmlXPatherror Mo  xmlXPathNewCompExpr!pxmlXPathFreeCompExpr o o o o o o o  o o o  o o p< xxmlXPathCompExprAdd p p p p "p &p &p (p )p )p  /p 0p 0p /p 2p 0p 7p 1p 4p 6p 6p 6p :p ?p Ap ?p @p Fp Ip4@ hxmlXPathCompSwap  ^p bp0"PpxmlXPathDebugDumpNodeP p p p p p$ p p p p p p p p p p p,&xmlXPathDebugDumpNodeList%xmlXPathDebugDumpNodeSet'xmlXPathDebugDumpValueTree)xmlXPathDebugDumpLocationSet$PxmlXPathDebugDumpObjectP q q q q q$ q q q q q q q q p p p p4 p p p p p p p p p p p pT pG p p p p4 p p p p p p p1 p p p; p p p p4 p p p p p p p*D$ n #q #q #q sn sn +q m m -q (q  ?q ?q  Lq Nq Oq Sq Aq Cq Fq pu p p p p4 pq p p p p p p p p p p pp4  E_qv $ .q $ nv$@$v$@$  ,qv>  $q 4 q  pv  Pv4P  0 q` $xmlXPathDebugDumpStepOp iq iq iq nq nq$ nq nq nq nq nq pq pq sq q q q q q q q q q q q q q q q q q q q q q q q q q q q r& r r r8 &PxmlXPathDebugDumpCompExprPz "r "r "r 'r 'r 'r0 'r 'r 'r 'r )r )r -r( valuePop ; Kr Kr  Or Mr Nr Qrp0 valuePushZ br `r `r br `r `r er dr mr pxmlXPathPopBooleanp) |r Oo2 r,  (r0PxmlXPathPopNumber0) r OoM r( h (r0xmlXPathPopString, r Ooh r0 ( (rxmlXPathPopNodeSetk r r Oo Oo Oo Oo r rz Ww r(  ar  (rv$$ ܿ (r   xmlXPathPopExternalD r r Oo Oo Oo r$ $ (rv$4  (r !pxmlXPathFormatNumber ?s4 n As As sn Ks Ls m m Ns Ps Ws Zs ]s _s _s ^s ^s _s _s ^s ^s cs ds ds ds ds ds ds ds ds ds ds ds ds ds ds ds ds  ~s ~s s$ ~s} s s s s s s s Hs Gs Gs_, T Os T nvTp$vTp$  Ls  Bs" xmlXPathOrderDocElems V s s s s s s s s `xmlXPathCmpNodes s s s| s s s t t t t t t t td tb t^ t t tW t t t t $t t  )tF 2t 3t 2t 3t 2t 3t 2t 9t 8t 9t 8t 9t 8t @t Gt Ft Ft Ft Kt Jt Jt Jt Nt Ot Nt Nt Nt Nt Nt Nt Ot :t7 Xt Xt _t _t _t _t _t  ht ntL nt nt nt nt nt nt nt At0 tZ  pxmlXPathNodeSetSorts t {t {t  t t t t t t t t t tD0!xmlXPathNodeSetDupNs t  t t t t t t t0 t t t t t t t@"xmlXPathNodeSetFreeNsM t t t t t t t t"xmlXPathNodeSetCreatev t t t t t t t t t t t$$PpxmlXPathNodeSetContainsP u u u u u u u u u u0 u u u u u$ u u u u! `xmlXPathNodeSetAddNs  *u 'u 'u 'u 'u 'u  +u *u 3u 3u 3u 3u 2u  =u >u9 Gu Gu Mu4 xmlXPathNodeSetAdd  au  ^u  ^u  lu lu lu lu lu lu ru su u |u u" u u(% xmlXPathNodeSetAddUnique z u  u  u  u  u u u u u u(!xmlXPathNodeSetMerge u u6 u% u u u u u u u   u uZ v v v v v u9P u  '`HxmlXPathNodeSetMergeUnique` #v #v :v 2v -v 1v ;v ;v Gv Hv Jv! -v"@ Pv 5v   xmlXPathNodeSetDel [v dv dv dv dv ov ov rv sv rv sv sv sv sv sv sv "PxmlXPathNodeSetRemovePo v v v v v v v v v v v v v 0 xmlXPathFreeNodeSet7 v v v v v4"xmlXPathFreeValueTreexmlXPathNewNodeSet: v v v v v,!PxmlXPathNewValueTreePG w w w w w w w$# `xmlXPathNewNodeSetList G %w ,w /w /w 0w 0w 0w 4w( `xmlXPathWrapNodeSet? Cw @w @w @w Dw Iw$@xmlXPathFreeNodeSetList Xw Ww0 xmlXPathDifferencej gw gw pw pw sw vw uw qw 0 mw  mw  mw  `!PxmlXPathIntersectionPG w  w w w w w w 0@#xmlXPathDistinctSorted w w  w w w w w w w  w@ w w w t Fwvt  xmlXPathDistinctL w w w w w w w w w !0xmlXPathHasSameNodes0Y w w w w w w w w w0 w &PxmlXPathNodeLeadingSortedPd x x x x x x x4 x x x x 00 pxmlXPathNodeLeading' (x (x (x *x *xP"PxmlXPathLeadingSorted& :x ;x =x =x`00xmlXPathLeading0f Px Px Sx Wx$ Xx Tx Tx Tx Rx Rx Rx 0'`xmlXPathNodeTrailingSorted`d hx hx hx hx qx qx qx4 vx xx vx sx 80!xmlXPathNodeTrailing' x x x x xP#xmlXPathTrailingSorted& x x x x`@xmlXPathTrailing@f x x x x$ x x x x x x x 0!pxmlXPathRegisterFuncp x #xmlXPathRegisterFuncNS< x 0 x x x x x '`xmlXPathRegisterFuncLookup y #xmlXPathFunctionLookup; y  y y y y y%pxxmlXPathFunctionLookupNSpC ,y0 0y 3y @y @y @y+pxmlXPathRegisteredFuncsCleanupp& Ly Jy Jy Jy$`%@xmlXPathRegisterVariable dy 'xmlXPathRegisterVariableNSB vy 0 {y ~y y y y0+xmlXPathRegisterVariableLookup y #0xmlXPathVariableLookup03 y  y y y y%xmlXPathVariableLookupNSE y0 y y y y y/"xmlXPathRegisteredVariablesCleanup& y y y y$`@xmlXPathRegisterNs@N y 0 y y y y y y y@xmlXPathNsLookupW z z z z z z z z8`(xmlXPathRegisteredNsCleanup& /z -z -z -z `@xmlXPathNewFloat@? Iz Fz Fz Fz Jz OzxmlXPathNewBoolean? `z ]z ]z ]z az fz(xmlXPathNewStringK wz tz tz wz }z }z ~z$xmlXPathWrapString? z z z z z zP xmlXPathNewCStringP= z z z z z z$ xmlXPathWrapCString  z!0xxmlXPathWrapExternal0? z z z z z zxmlXPathObjectCopy z z z z z z z z z z z { {' {,pxmlXPathFreeObjectp /{ .{ .{ .{ 2{ v v v v v| 8{ <{ @{4  [7{v $ (xmlXPathCastBooleanToString+ X{ X{ X{ [{ p'xmlXPathCastNumberToStringo j{$ n  l{ l{ l{ sn  t{ m  m  v{ q{,  w{  nvv ` u{ $ m{@%@0xmlXPathCastNodeToString@ {  (`xmlXPathCastNodeSetToString`J { { { { {  { { {,  F{v8!0 XxmlXPathCastToString0 ` { { { { { { { {p" xmlXPathConvertString [ { { { {$ { { { { (@ xmlXPathCastBooleanToNumber@  | '` @xmlXPathCastStringToNumber`  |%p `xmlXPathCastNodeToNumberp ? #| #| { { | |$  -|v    F*|v   ( xmlXPathCastNodeSetToNumber + ;| ;| |+ |+( \  C|v\  t ! (xmlXPathCastToNumber O P| Q| P| |J |]( n| D kh|  b|  "HxmlXPathConvertNumber$ ~| ~| |,(xmlXPathCastNumberToBoolean2 | sn sn  | |  |v(8xmlXPathCastStringToBoolean3 | | | | | | `)`pxmlXPathCastNodeSetToBoolean` | | 0"xmlXPathCastToBooleanM | | | | | |  | #`xmlXPathConvertBoolean | |,P8xmlXPathNewContextPy } } } }  } } }  } #} "}( PxmlXPathFreeContextP1 4} Ny Ky OyU 8}  8}v  | 7}v|,%pxmlXPathNewParserContext h} e} e} h} o  o  o o o o o o oH o o  q} q} w}(  br}v@&xmlXPathCompParserContext&0xmlXPathFreeParserContext0. } } } } }  xxmlXPathNodeValHash }  } } } };0 } } } ~Z ~ }8 ~ }8 "~ }8 ~ ~ xmlXPathStringHash(xmlXPathCompareNodeSetFloat)xmlXPathCompareNodeSetString$xmlXPathCompareNodeSets ~" ~ ~  ~ ~ ~ ~ ~ ~ ~:` ~  ~ ~    ~ ~ sn ~ ~ sn  ~ ~     ~ ( 8xmlXPathCompareNodeSetValue  1 / / / / /0 ^~P h~ i~ { { m~o j~  ~ ~ { { ~ ~ 0  =  F~v    >8  Fl~v  v0p'!xmlXPathEqualNodeSetString! ^ W W W W >~# >~ A~' k  j j k lu$ i w k j j k l l i `@ ` t m |! ^ iv|!!$8&$xmlXPathEqualNodeSetFloat$           { {  sn5   <   %  $ Fv$$"%xmlXPathEqualNodeSets%                     TP                        " #, " % & %&+XxmlXPathEqualValuesCommon+ 7 0 0 0 0  O T W m sn sn sn n n n n n n n n n n n n y    sn@ snA sn@ n4 n4 n5 n9 n9 n: n> n> n? nC nC nD   , 0 Ȁv00  p0 ǀ P0 ÀvP0X0  @0 € 0 v 0(0  0  / v// /  / v// / v// p. vp.x.  `.  @. v@.H.  0.  . v..  .  - |v-- - { - y - xv--  10xmlXPathEqualValues1            "! %, #3xmlXPathNotEqualValues3 E J K K X  ^ ^ ^ ^ f u! x80"5xmlXPathCompareValues5         ́ ́ с ց snl snl snl nb        ~        *    N8 7  7  7  7 v77 ":xmlXPathValueFlipSign:   sn sn  n n  n ! m$ m $ 0 ; % ; nv;;4v;;4 X; " ;  v ;(; : v:;,0<xmlXPathAddValues0<5 6 A, A A A@=xmlXPathSubValues@=5 N Y, Y Y YP>pxmlXPathMultValuesP>5 f q, q q q`?@xmlXPathDivValues`? ~ sn sn sn sn m m m     -    0 @  @ nv@$@ @@,v@$@ @@, @ v@@ ? v?@0AxmlXPathModValuesAV    0    @B xmlXPathNextSelfB ւ ؂ 0CxmlXPathNextChildCT "          #CxmlXPathNextDescendantC  $ ## & * 7 6 7 6 7 6 7 8 6 4 P)ExmlXPathNextDescendantOrSelfE) W [ [ a EPxmlXPathNextParentE u v o$       $      ! GxmlXPathNextAncestor G    ҃ Ѓ Ѓ у Ѓ Ѓ 80   #    '@I(xmlXPathNextAncestorOrSelf@I 3 50)pIxmlXPathNextFollowingSiblingpI= E E E H H J L p)I0xmlXPathNextPrecedingSiblingII ] ] ]  ` `  b d i "JxmlXPathNextFollowingJ7 {  }    xmlXPathIsAncestor" KxmlXPathNextPreceding K}  , *       +   „ pK V)ĄvpKK Kd*L@xmlXPathNextPrecedingInternalL ڄ ۄ ބ          /       p"NpxmlXPathNextNamespaceN                0    ("OxmlXPathNextAttributeOD ( (  * * , - / 1 @PH xmlXPathRoot@P< K J J J K L L L`!PxmlXPathLastFunctionPC a c d d d j j %PQHxmlXPathPositionFunctionPQG z | } ~ }   "RxmlXPathCountFunctionR             $    %SxmlXPathGetElementsByIdsSy     ̅ ˅ ̅ Ѕ υ  ˅8UxmlXPathIdFunctionU      {  {  {     < V FvV VV 0&XxmlXPathLocalNameFunctionX 4 = = A C  K K D Y Y @ @ @ p)pYxmlXPathNamespaceURIFunctionpYp k s s w  y z   v v v @!Z0xmlXPathNameFunctionZ          Ɔ Ɇ ˆN    ҆ ׆ ׆  & & P#]xmlXPathStringFunction]T  {s  {x       ] Fv]0]D)]xmlXPathStringLengthFunction]   " # # # {  {  (  - / 0 / / / P^ F(vP^t^(#_PxmlXPathConcatFunction_h C ? ? I R X O S J4%a0xmlXPathContainsFunctionaK l l q r u v q('0cxmlXPathStartsWithFunction0cS        (&dxmlXPathSubstringFunctiond ȇ ‡ ‡ ˇ Ӈ Շ ڇ ܇ ߇   sn| snm nm 0 ny  n~ 0     .    ڇF@ 0g  g  f vff f vff,hxmlXPathSubstringBeforeFunctionhY 1 1 : < ? > A B4+`jxmlXPathSubstringAfterFunction`jw \ \ e g j i l m m m n n,&plhxmlXPathNormalizeFunctionpl  {  {             0 tl FvtllLp&n@xmlXPathTranslateFunctionn Έ  Έ  ۈ ݈ ߈       V          <$rxmlXPathBooleanFunctionr:       psxmlXPathNotFunctionps- . ., 1 1 1 !`txmlXPathTrueFunction`t0 > > ? @ @ @p"t@xmlXPathFalseFunctiont0 L L M N N Np!@uxmlXPathLangFunction@uw g g p r r q s t, u u u p 0#whxmlXPathNumberFunctionw]     ,    ` `xxmlXPathSumFunction`xp            0@"y xmlXPathFloorFunctionyA ˉ ˉ ׉ Љ Љ Љ 0$zxmlXPathCeilingFunctionzT          `"0| xmlXPathRoundFunction0|   sn sn n n n      !#    | v|| |  | v||, 0~xmlXPathCurrentChar0~ F F  Z \ ^ ` b c c h i h h h j i o o o p v v v w y y y y y    PxmlXPathParseNCName               '0    0xmlXPathParseQName0M ъ ъ Ԋ ֊ ֊ ي ي ي hxmlXPathParseName              0   @% xmlXPathParseNameComplex                            # # + 0P 1 1 2 2 2 2 2 2 2 7 7$ @ Cp%xmlXPathStringEvalNumber m m r m  z                                      O         $xmlXPathCompNumber ͋ ͋ ͋  ڋ                          $0!ГpxmlXPathParseLiteralГ "  " % ' ' * - - . 0 2 2 5 9,  xmlXPathCompLiteral J N Q S S V0 Y Y Z \ ^ ^ a/ h e e e*xmlXPathCompVariableReference0xmlXPathIsNodeType3     %xmlXPathCompFunctionCalld    &0 Ì  Ռ ڌ ܌@$`xmlXPathCompPrimaryExpr`c  >  j     @  L p#xmlXPathCompFilterExprПPxmlXPathScanNameП = B  C B G H I G L M L O O QD Q Q Q S Q Q D,`!0xmlXPathCompPathExpr0 p p u u u u      )   2     ҍ ҍ ؍0 wm  8   #@  zNP"xmlXPathCompUnionExpr4    0"``xmlXPathCompUnaryExpr`A # ( ( ) 04+8xmlXPathCompMultiplicativeExpr G G K K K K K K K N T W ]0p%`xmlXPathCompAdditiveExpr`? o o t t }0'0xmlXPathCompRelationalExpr0Y        0%0xmlXPathCompEqualityExpr0-   Ύ0 0xmlXPathCompAndExpr0% ߎ ߎ 0 pxmlXPathCompileExpr 6    ,"0xmlXPathCompPredicate0R       @! xmlXPathCompNodeTest  I I I I I [ \ \  t o  p  q q  t s s s ~ ~     P &0 w    xmlXPathIsAxisName  xmlXPathCompStep    ' 0 ; < > >8 @ U U я ԏ ׏ [ ܏ ܏~    x [    r [  n     f [  b [o ^ a i i i k m s   ,  W\?v P P ` 0l -@ xmlXPathCompRelativeLocationPath@B  @   ǐ0`%0xmlXPathCompLocationPath]        ,   `'xmlXPathNodeCollectAndTest      / 0 4 @b Aa I HZ IY Q OR QN Y XJ YF a `B aA i h: i9 p o3 p2 x w+ x*  ~#               1<   ) .< ۑ(   ۑ  ݑ' $  ~   ݑ ݑ ݑI $ $  >                   ]   h q / 5$ t y W Y ( b  @ ( I  #              H > I  B  > >  b  Y Y  >5 t y :   !  q    h               ]     P ܑ     /z\  *xmlXPathNodeCollectAndTestNth      Ғ Ւ ^ K  V K  N K  G K  @ K  8 K  1 K % $) K - , +" K 4 3 K ; : K C B  K K I Q0 # 6 ,  %  #     "   p    C   : 4 p  C                     ēU ˓ ˓ Г B ޓ0 ޓ/              W/               @ ޓ    ޓ ޓ     ޓ0 ޓ/     ړ  ē ē                   WWm   &8 )    ђ\\  $8xmlXPathCompOpEvalFirst C < < D < < J L M M X Z \ ^ a ^ [ m m o p r v v x y            t         @p#xmlXPathCompOpEvalLast ɔ     ʔ     ϔ є Д є Ԕ ֔ ֔ ޔ                                   ) 5 9 9/ = > >0PPxmlXPathCompOpEvalP \ Q  Q  ] Q  Q  b d c d f i k n l n p p v w j | }                               • ƕ ɕ ɕ ˕ ˕ ͕ ӕ ו ە ݕ ޕ ݕ                                     !  ' * 6 < < @ ? I I K K P _ _ c b b c h h h h h h j j j r t y y { {                         Ö Ö Ö ϖ ϖ Ζ Ζ Ԗ Ӗ Ӗ Ӗ Ӗ Ӗ Ӗ ݖ ݖ         @         ! ( ( . . 0 / 2 9 ; : : B D #% #+ Q P T      ? _ c e y          {# {)    f :         ŗ ė Η ϗ  ݗ ї. ݗ ݗ                    ߗ0 ߗ ߗ җ җ ֗8     $ $ & % (r * . , 7   ( D E M M\@XxmlXPathRunEval \ \ Y _ oT) oW) oX) g k l l m q q q  ev 0"xmlXPathEvalPredicateG       @,xmlXPathEvaluatePredicateResultE   Ę Ę ј ` `xmlXPathCtxtCompile`g ߘ ߘ  Oo) Oo) Oo) Oo) $  ('v$`xmlXPathCompile`  !pxmlXPathCompiledEvalp '   '      " . . } } } } } } } } } > = > > G G GO N O N N O S T \< l ;PxmlXPathEvalExpr i k l ` xmlXPathEval z z j k     Oo<*  Oo=*  M         $ (v$ D$  }  # @xmlXPathEvalExpression    j kQ Oop*  Ooq* ř Ǚ ř ˙ ̙ ˙ ̙ љ  (v 4  }(&xmlXPathEscapeUriFunction            " $  $  & '   * *   - . /  Q 4 4 7 7 8 8 1 !,@)00xmlXPathRegisterAllFunctions0 L xy! L x{! x}! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x! x]! x! x! x! x! x! x!    ! v!!! ! v! ! ! v!!! |! }v|! ! d! {vd! x! H! yvH! \! 0! wv0! D! ! uv! ,! ! sv! !  qv    ov    mv    kv    iv   p  gvp   X  evX  l  @  cv@  T  (  av(  <    _v  $   ]v   [v   Yv   Wv   Uv   Sv  h Qvh | 4 Ov4`4(HTMLTREECompaq C V6.5-001 "htmlGetMetaEncoding" N\ I\  V\ W\ Y\ U\  h\ i\ g\ z\ \ \ \ \ \ \ \ y\0 \ \ \ \ \$ \ \  %htmlSetMetaEncoding% \ \  \  \  \ \ \ \ \ \ \  \> \ \ \ \ \ \ ] ] ] ]W ] ] ] ] %] $] ]'4 )0htmlIsBooleanAttr)9 O] K] K] O] O]0 T] Q]htmlSaveErrMemory htmlSaveErrhtmlNodeDumpFormatp* htmlNodeDumpp*o ] ] ] ] f]D f]F f]G ] ] ]0 * ] * E]v*+$+, #+htmlNodeDumpFileFormat+ ] ] ] ] ] ] ] ]0 ] ] ] ^ ^ ^p-htmlNodeDumpFilep- ^-`htmlDocDumpMemory- ^ ^ ^ !^ .^ ,^ 2^ H^ I^ U^ V^ Z^ [^4 . 4U^ htmlDtdDumpOutputhtmlAttrDumpOutput#htmlAttrListDumpOutput#/ htmlNodeListDumpOutput/ ^ ^ ^8%P0htmlNodeDumpFormatOutputP0 ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ %_ &_ -_ /_ 2_ 9_ 9_ ?_ @_ I_ O_ T_ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Y_ Y_ [_ \_ \_ \_ \_ e_ g_ g_ g_ g_ m_ t_ t_ t_ v_ v_ v_ v_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _L H4 X_ H4 Ԑ^vH4`48PvH4`4D\ 0 4_v000P ;@htmlNodeDumpOutput; _+;htmlDocContentDumpFormatOutput; _ _ _ _ _ |^S |^R |^ ~^ ^ ^J _4 < _v<<0< %=htmlDocContentDumpOutput= _= htmlDocDump=x _ _ _ ` ` ` ` ` ` _>4 > 4$`@? htmlSaveFile@?t 3` 3` 3` =` ;` A` A` R` S` _x4 p@ 4^`@@htmlSaveFileFormat@u o` o` o` o` w` {` {` ` `4pBhtmlSaveFileEncpB `  #SAXCompaq C V6.5-001%BinitxmlDefaultSAXHandlerB 7a ;a 7a 8a >a ;a Aa @a Ga @a Da Eac Ga La Ea Ma Ja =a Ja Na Ua&C inithtmlDefaultSAXHandlerC ha  qa ya ha |a ia  qa {a za ma a na ta# ra  la &@DinitdocbDefaultSAXHandler@D a  a a a  a  a a a a a a a  a aF  a a a a  a'TRIOSTRCompaq C V6.5-001E  trio_createE   0Ep trio_destroy0E  0`E  trio_length`E   E@ trio_appendE*    0Ftrio_append_max0FG   ( <    F G trio_containsG* + + + 3G trio_copyG, G G G PpH trio_copy_maxpH. d d d o,pI0TrioDuplicateMaxpI= x x x    I ,vII JPtrio_duplicate J5       $J 'v$J,JHJ pJP`Jtrio_duplicate_maxJH   ,      J vJ K@K trio_equal@K{   ) ' ' ' ' '   , L v L,L@L$ K 'vKLL$L4L trio_equal_caseLA       MP trio_equal_case_maxMS        pNtrio_equal_localepN4 $ $ $ / /O@trio_equal_maxO ? ? ? H Q O Q Q Q Q O O < O RvOPP O R'vOOOP<P trio_errorP z !P trio_format_date_maxP;      Q trio_hashQ             *    (`0S  trio_index0S/     S@ trio_index_lastS/     0T  trio_lower0T.     ,T@  trio_matchT    !   ! ! ! ! !   (; ( ( ( ( (0  U "vUUU dU "'vdUpUUU@`0W trio_match_case0W H H H P P P V P P  ] ] ] ] ] ]0 T@YP trio_span_function@YI x x x  $  0@Z trio_substringZ0     0[`trio_substring_max0[e       (     4 [ v[[[$0`\  trio_tokenize`\/      \Htrio_to_long_double\       ' (             " " "   / 0 : : ; : A S R Z [ [@ A C C D C C C M ` a g8 j o t tH ` #v``a _ v___  ftrio_to_doublef!   (pf trio_to_floatf!   $pg trio_to_longpg9        hp trio_to_lower h   "@h@trio_to_unsigned_long@h9       h  trio_to_upperh   i  trio_upperi.          ,TrioStringAllociTrioStringGrowiE C   C  L  Q  S  T (`jTrioStringGrowTo`j" j  i  j  j 0j trio_string_createjJ y  1 G 1 G 1 H  , j  vjjj L `ktrio_string_destroy`kU         k a  ltrio_string_get lJ    0 mtrio_string_extractm(   ppmtrio_xstring_setpm5 ! ! !  @, m a !ntrio_string_sizen" ! ! !`"pn0trio_string_terminatepn (!nPtrio_string_appendn: 5! 5! 5! ?! C!, potrio_xstring_appendpoN Q! Q! Q! ~ ~ [! _!, o \!voo%pptrio_xstring_append_charppC l! l! l! s! x! x!,!`qtrio_string_contains`q) ! ! ! !"rtrio_xstring_containsr) ! ! ! !rptrio_string_copyr* ! ! ! !@s0trio_xstring_copy@s* ! ! ! !"sptrio_string_duplicatesC ! ! ! 1  ! (t !(#tPtrio_xstring_duplicatet ! ! ! 1  T W Y ! ! ! % " " Du "vDuLu`u u !'v uu$u,u , t !'vtuu(u4utrio_string_equalu) " " " "Pvtrio_xstring_equalPv) $" $" $" ,""vtrio_string_equal_maxv2 6" 6" 6" 6" ?"#w`trio_xstring_equal_maxw2 I" I" I" I" R"#@x trio_string_equal_case@x) \" \" \" d"$xtrio_xstring_equal_casex) n" n" n" v"'y trio_string_equal_case_maxy2 " " " " "(0z trio_xstring_equal_case_max0z2 " " " " "(z0 trio_string_format_date_maxz1 " " " " "`{ trio_string_index`{( " " " "p#{p trio_string_index_last{( " " " "p@| trio_string_length@|9 " " "  $ | "v| | | trio_string_lower|( " " " " p@} trio_string_match@}) " " " #}h trio_xstring_match}) # # # ##~ trio_string_match_case~) ## ## ## +#$  trio_xstring_match_case ) 5# 5# 5# =#"x trio_string_substring) G# G# G# O##`P trio_xstring_substring`) Y# Y# Y# a# trio_string_upper( k# k# k# q#h(DEBUGXMLCompaq C V6.5-001ppxmlDebugDumpStringpY Ff Af Af Af Lf Lf Pf Kf,` xmlDebugDumpDtdNode!ЂxmlDebugDumpAttrDeclЂ f f f f f$ f f f f f f f f f f f f f f f f  f  f  f f f f f f f f f f f g g 8!hxmlDebugDumpElemDecl g g g g g g$ g g g g g g g g g g g 0g 0g 6g >g @g Bg Bg Dg< Hg Hg Kg Og Og(#PxmlDebugDumpEntityDeclP Ug Ug Ug Yg Yg$ Yg Yg Yg Yg Yg [g [g _g cg cg gg g g g g g g g gG g g g g g g("hxmlDebugDumpNamespace g g g g g$ g g g g g g g g g g2 g g g,p&xmlDebugDumpNamespaceListxmlDebugDumpEntityPxmlDebugDumpAttrP> h h h h h$ h h h h h h h "h )h\ /h 1h 3h 3h 5h 9h 9h m >m P xmlShellLoad Vm Om Om Ym cm am dm gm gm lm om sm,`  xmlShellWrite  m m m m m   m  m m m m m m m m7 m m m m m-8 m- 0 xmlShellSave0t m m m m m m m  m m m m m( P0xmlShellValidatePz n n n n n n  n n n n n  n P xmlShellDuP 0n 0n 0n >n >n Bn Bn Ln On On Yn+ _n  Vn =n34 p xmlShellPwdp< n n n n  n P0!xmlShellP n n n n o l n n n n n n n n n n` lO n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n o o o o l< l< l l l l l l l m m$ |l l l ~l l l l l l l l l l l l l l l l# l ;o ;o ^ ^ ^ ^ ^ ^ ^&xmlRelaxNGFreeIncludeList!xmlRelaxNGNewRelaxNG&xmlRelaxNGFreeInnerSchema83xmlRelaxNGFreen <_ 9_ >_ @_ ^ ^o ^ ^J F_ I_ I_ I_4 P F_ 0 D_`! 5xmlRelaxNGNewGrammar - ^_ Z_ Z_ Z_$"3xmlRelaxNGFreeGrammarO r_ o_ o_ t_ w_ z_ }_ _ 2xmlRelaxNGNewDefine _ _ _ _ _ _ _ _ _ _ _($`h/xmlRelaxNGFreePartition`U _ _ _ _ _ _ _  _4`!2xmlRelaxNGFreeDefine} _ _  _ _ _ _ _ _ _ _ _ _ _ @%xmlRelaxNGNewStates@s ` ` ` ` ` ` ` ` ` `,@$xmlRelaxNGAddStatesUniq &xmlRelaxNGAddStates W` W`  W`  ^` `` e` i` m` q` q` Za \a ca ha ka ka ka ka ka ka ka ka ka ka ka ka ka q` p`@ r` 8 'r`v8DP0!X&xmlRelaxNGFreeStates ` ` ` ` ` ` ` ` ` `0 `  ` $0(xmlRelaxNGNewValidState0 ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` 0%0 (xmlRelaxNGCopyValidState0 a a a a a (a 'a )a *a /a 6a 6a$ ;a @a(0&xmlRelaxNGEqualValidState%`%xmlRelaxNGFreeValidState` }a ya ya a =`D =`D 8` 8` 8` <` E`9 a a (  ~avx@">xmlRelaxParserSetFlag+ a  a a a P"xmlRelaxNGIncludePush!xmlRelaxNGIncludePop%8xmlRelaxNGRemoveRedefine b  b" b b b b b b b b b *bB 'b 'b /b /b b) ;b< ;b  "`:xmlRelaxNGLoadInclude \b Lb \b \b \b ^b hb  ub {b |b ~b ~b b b b a a a a a a a a a a a a b( b  b b b$ b b b bX b b$ b b b b$ b b b,H  b8   b%xmlRelaxNGValidErrorPush$ )xmlRelaxNGValidErrorPop m :c 6c >c >c ?c Dc Dc Ec Gc Hc Jc,#xmlRelaxNGDocumentPush"xmlRelaxNGDocumentPop&xmlRelaxNGLoadExternalRefxmlRelaxNGDefName% $xmlRelaxNGGetErrorString  7d 7d  =d 7d 7d  7d  _d _d od od wd wd  d d# d d(% %xmlRelaxNGShowValidErrory d d  d  d d 9^ ;^ ?^ >^ @^ C^< 0 dv0<@,|` &xmlRelaxNGPopErrorsc d d  d d d d d d d d 8%H%xmlRelaxNGDumpValidError e e e e e e e e e$ e e e #e &e" 'e )e eH$&xmlRelaxNGAddValidError xmlRelaxNGSchemaTypeHavep9 we we e }e }e e&`>xmlRelaxNGSchemaTypeCheckQ e e  e e e e  e('p=xmlRelaxNGSchemaFacetCheck e e  e e e  e e e e e e e eG e e e e e e 8& <xmlRelaxNGSchemaFreeValue  f f (  >xmlRelaxNGSchemaTypeCompare  f f  f  f  f f  !f !f &f *f 0f 4f% 8f 9f ;f,&"<xmlRelaxNGDefaultTypeHave"- Nf Nf Nf Nf$'#<xmlRelaxNGDefaultTypeCheck#% gf gf gf$)#P<xmlRelaxNGDefaultTypeCompare#q f  f  f  f f f f f f f& %:xmlRelaxNGFreeTypeLibrary %3 f f f f f >f*%:xmlRelaxNGRegisterTypeLibrary% f  f f  f  f  f  f  f  f f f f fg f f f f f f f f f, xmlRelaxNGInitTypes#'<xmlRelaxNGCleanupTypes'6 #g #g #g &g 'g$$P(p0xmlRelaxNGIsCompileableP( Bg Bg Ig Lg [g `g  kg g g) g g(@+1xmlRelaxNGCompile@+ g g g g g g g g g g g g g g g g g g h h h h h h h h h h 6h :h ?h Gh Mh Rh Wh [h  ch [h  rh  |h h h hi  c c cl0 1 hv11tP!30xmlRelaxNGTryCompile3j h h h h h h h h ,!53xmlRelaxNGIsNullable5 i i i i %i i 0 1i @i Ni, Wi 60&xmlRelaxNGIsBlank6, li ni ni mi pi p)P75xmlRelaxNGGetDataTypeLibraryP7r i i i i i i  i0 i i i!9H6xmlRelaxNGParseValue9 i i i i i i i i i i i i i i i i i i i i i i i i iR i i i i i i i i80 =`8xmlRelaxNGParseData= j  j  j  j j j j j #j (j -j -j /j 3j 4j :j ;j :j ;j @j @j Aj Ej Ej Ej Ej Ej Tj Wj Uj Wj Yj Wj Yj ]j ]j bj aj cj fj dj fj Tj% yj zj yj |j j j j3 j  j j j< ) B/xmlRelaxNGCompareNameClasses B j j  j j j j j j j j( j0p*D/xmlRelaxNGCompareElemDefListsD] k k  #k #k "k "k !k 0 !k  !k  !k  %k)EX4xmlRelaxNGGenerateAttributesE Ak Ak5 Fk Ek Hk Jk Mk Mk Pk Gk  Rk Tk Vk Vk Ok  ^k ]k ^k ]k ^k ]k ^k ]k ^k ]k Fk/ dk Fk*/ kk Fk/ Nk( "PG0xmlRelaxNGGetElementsPG k k k  k k  k k k k k k k 0P k k k k k k k k k k k  k kX k k k k k k k k k7 k-I3 xmlRelaxNGCheckChoiceDeterminismI k  k k k k k k k k k k k k k k l l l l l l l #l  *l #l $l &l &l 6l 5l 0l 1l 1l 1l l  l l* @l} l0 Dl El Hl Gl Dl Pl Pl Ql Pl Zl \lH&N3xmlRelaxNGCheckGroupAttrsN jl jl ql l l l l l l l l l l l l l l l l l l l l l l l l la l l l l l l l l l l<@) R00xmlRelaxNGComputeInterleaves R l l  l l  l l l l l l l l l l l l l l l l l l m m m m m m m m m m m m m !m "m m m 'm  (m 'm .m m m  *m m m 9m 4m 5m 5m =mq s 8s  Bs Cs /s  Hs Is Js Hsr Qs /s& Us Vs Xs Zs ls ds ws ws s s s s s s" s /sr  s s s s s  s /s  s s sD s s s /s /si <'3xmlRelaxNGGroupContentType? s s s s s sp% 3xmlRelaxNGMaxContentType A s s s s s s s p! 4xmlRelaxNGCheckRules t  t t#H t  t  t  t( t +t t] F `t ot 5t tB# t 5t tlc= u Vt tq t t et `tp t t t t t t t t t t t u t (uP !t $t !t &t &t +t ,t 0t 1t 5t 6t ;t ;t  Ft Gt Lt Nt Ot u St Ut Wt Ut Vt Wt [t \t at `t at ft et ft jt kt ot pt wt tt {t {t t t t t t t t t t t u t t t t t t t t t t t t t t tV u t t t t t t t t t t t t t t t/ t- t t t t t' t% t t t t t t t t t t u t u u u u  u u u u u u u` #7xmlRelaxNGParseGrammar 6u 6u Ku Ku Ku Ku Ku Iu Qu Xu Yu Xu Yu au iu nu0$6xmlRelaxNGParseDocument u ~u ~u _w _q u u u u u u u u u u u u u u u u u u u u u u u u 0  uv4@0p@$;xmlRelaxNGNewParserCtxtT u u u u u u u u,'Ф;xmlRelaxNGNewMemParserCtxtФP u u u u u u u('`;xmlRelaxNGNewDocParserCtxt\ v v v v v v v !v%@;xmlRelaxNGFreeParserCtxt 1v .v .v 2v 4v 6v ^ ^e ^ ^K v @v Cv Cv Cv, P  v v vB v v v v v v v v v v v v v v v v v v v v v v} v v v v v v v v v v v vGH"9xmlRelaxNGCleanupTree v v vN c jc v v v v v  v w w w w w wG w w w? w wK w !w w7 !wA *w +w ,w .w# 4w3 9w :w c c c c c c c c c c c c c c c c c c c c c \c \c ]c _c gc gc jc ic rcj c c c cZV =w >w >w& Fw Ew Iw Nw Ow Vw Ww Xw Yw _w dw ew kw jw jw rw uw ww vw }wq w w, w- w w@ wB w w w w wk w w w w xd x x x x x x w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w wo  x x "x (x .x &x .x &x  1x ;x  ky kyC ky kyH ky kyM y ky kyU y ky ky] y ky kye ky+ kyj ky kyw4 d R y(  R y4 H R y,  R y,  R y, ` R y4  R y4  R y4  R y4  R y4 0 R y4  R y4 P R y4  R y,  R y,@"xmlRelaxNGDumpGrammar.xmlRelaxNGDump z z z z z z $z$ y y y y z( z z z  {V )z'v80<T p`H,xmlRelaxNGDumpTree`E 3z 3z 6z 9z } 5}  3} (`'xmlRelaxNGValidateValueList" O} L} Q}$$`'xmlRelaxNGValidateValue` d} j} d} j} m} p} {} } } } } } } } } } } } } }  } } } } } } } } } } } } } }  } ~ ~ ~ ~ ~ !~ !~ %~ !~ '~K 2~ A~ ;~ Q~ K~ <+'xmlRelaxNGValidateValueContent" m~ j~ o~$%'xmlRelaxNGAttributeMatcha ~ ~ ~ ~ ~ ~ ~0('xmlRelaxNGValidateAttribute ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~ ~ ~ ~ ~ ~ ~ ~ ~E ~ ~ ~ ~ ~8@,Px*xmlRelaxNGValidateAttributeListPz " ) + - * 0 / * 4 : 50 <`&p(xmlRelaxNGNodeMatchesListd W R \ \ \ a a [ 0 h h d0)0*xmlRelaxNGValidateInterleave u u  u x                                  G      ! % % % 2 2 2 2 2     8 9 E J G H  P P U V U V U V [ \ P-X* xmlRelaxNGValidateDefinitionListL o o o ~ z 0 #H(xmlRelaxNGElementMatch          p  À ܀ ۀ  ހ < xmlRelaxNGBestState#`(xmlRelaxNGLogBestError`z 3    ! !   $ 8 9 ; h um 8/vhp)p(xmlRelaxNGValidateElementEndpd P K K Q T( [ [ [ [ [ ]$)xmlRelaxNGValidateState q q                        ˁ ́ Ё с Ձ ԁ ԁ ׁ ԁ ԁ ԁ ԁ  ݁ ݁     zf   zh z zl z z z  z  z z z z z! z z z/           ! " ! ! ! & & - 3 8 9 E H H H Q X Y X X X ] ] q x                   ˂ ̂ т ӂ т т ҂ т ݂               %         . / 9 ; 9 9 : 9 E S W R X X e i j o s y               ȃ ʃ ʃ σ Ƀ ˃  փ փ ۃ ݃                      & ( ( - ' )  4 4 9 ; B F I G N  W L t  Y 'vt    <@)@ )xmlRelaxNGValidateDefinition@ z q  q  q  q                        Ä ń Ą Ą Ą 3 ф Մ քm ڄ ܄         VT@'xmlRelaxNGValidateDocument## +xmlRelaxNGNewValidCtxt#a Y U U U Z _ b g f$$p$+xmlRelaxNGFreeValidCtxtp$ z u } ~ ~ ~          4%@&*xmlRelaxNGSetValidErrors@&   %`&*xmlRelaxNGGetValidErrors`&  P"&*xmlRelaxNGValidateDoc& ׅ Ӆ ׅ Ӆ   Ӆ     ܅8            $  31 8 8 9 @ & { ݅/v&&''<'(XPOINTERCompaq C V6.5-001`)>xmlXPtrErrMemory`)' hY jY hY hY)xC xmlXPtrErr)g xY xY  xY |Y Y Y Y Y ~Y4+AxmlXPtrGetArity+} Y  Y Y Y Y Y Y Y Y Y Y Y Y Y YxmlXPtrGetIndex`,@xmlXPtrGetNthChild`,. Y Y Y Y  pxmlXPtrCmpPoints,AxmlXPtrNewPoint,C Z Z Z Z !Z$#-@xmlXPtrRangeCheckOrder-x 2Z .Z Y7 Y; .Z Y Y Y2 :Z ;Z  zZ Z Z$ "/FxmlXPtrNewRangePoints/_ Z Z Z Z Z Z Z Z4@%0FxmlXPtrNewRangePointNode0k Z Z  Z  Z Z Z Z Z Z$ %2`FxmlXPtrNewRangeNodePoint2n Z Z Z Z Z Z Z Z Z Z(0!03`BxmlXPtrNewRangeNodes03u [ [ [ [ [ [ [ [ [ [(%@4@xmlXPtrNewCollapsedRange@4_ &[ [ [ [ [ '[ ,[ ,[ -[&5PAxmlXPtrNewRangeNodeObject5 >[ >[ E[ E[  U[ [[ [[ \[ `[ h[$ % 7P?xmlXPtrLocationSetCreate 7h [ [ [ [ [ [ [ [ [ [$@"`8?xmlXPtrLocationSetAdd`8 [ [ [ PZY OZ NZL [ [ [ [ [ [$ 8 [v88 $:@FxmlXPtrLocationSetMerge:B [ [ [ [  [ [ [0"@;0FxmlXPtrLocationSetDel@; [ [ [ [ [ [ \ \ \ \ \ \ \ \ \p%< FxmlXPtrLocationSetRemove<V \ \ \ \ \ \ \ \, \ \ \#=BxmlXPtrFreeLocationSet=7 #\ \ %\ %\ %\ %\,'p>BxmlXPtrNewLocationSetNodesp>\ ;\ 8\ 8\ 8\ ;\ <\ A\ A\ B\,)?@xmlXPtrNewLocationSetNodeSet? V\ S\ S\ S\ V\ \\ a\ a\ e\ e\ f\ e\0P#@>xmlXPtrWrapLocationSet@? z\ w\ w\ w\ {\ \xmlXPtrGetChildNo APDxmlXPtrEvalXPtrPartA \ \ \ \ \ \ \ ] ] ]  ] ] ] ] ] ] ] ] ] ] ] ] ] "] $] $]  *]  ,]  3] *]  4] 3] <] =] A] A] B]r K] S] j] l] s] y] y]8 xmlXPtrEvalFullXPtr `ICxmlXPtrEvalChildSeq`I ] ] ] ] ] ] ] ] ] ] ] ] ] ]l \ \ \ \ \ \ \ \ \ \3 ] , 4K ]Tp xmlXPtrEvalXPointerLxExmlXPtrNewContextL_ I^ I^ I^ L^ O^ O^ d^ PND xmlXPtrEvalPN r^ r^ r^ r^ ^p }^ ^ ^ ^ ^ ^ ^  ^  ^ ^ ^ ]  ] ] ] *^U ^ ^f ^ ^ ^ ^ ^ ^ ^ ^4 N y ^ P  "^ vNN& SBxmlXPtrBuildRangeNodeList S ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^0 ^7 _ _ _ _ _ _ _ _ _ ^S _ &_ =_ >_ >_ E_ M_ M_ ^YP ^ ^  ^ ^ ^ ^ ^X  !XPCxmlXPtrBuildNodeListX a_ a_ a_5 g_/ g_- _ _ _ _ _ _ _ _  i_= k_  m_ m_ _ l_?8!xmlXPtrNbLocChildren p[BxmlXPtrHereFunctionp[C _ _ _ _, _ _ _ _"P\BxmlXPtrOriginFunctionP\C _ _ _ _, _ _ _ _&0]@BxmlXPtrStartPointFunction0] ` ` ` ` ` %` &` *` /` 5` 9` ?`( V` 8`  #`88$_ BxmlXPtrEndPointFunction_ x` x` x` ~` ~` ` ` ` ` ` ` `0 ` ` `  `78p!xmlXPtrCoveringRange!0bAxmlXPtrRangeFunction0b a a a a a a a a %a `) %a `S ` ` ` ` `  Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y# `0 ` `Y &a &a aH c  )a Td r `vcDcPcD xmlXPtrInsideRange'PfAxmlXPtrRangeInsideFunctionPf a a a a a a a a a a0 a baW =a ?a ja ma  wa 0 Da Ja Ma  Wa$ Aaw a a aH @g h av@gtgg4t #pjpAxmlXPtrRangeToFunctionpj a a a a a a a a a a a ab a a a a b a! a' b a4Hm`@xmlXPtrAdvanceNodemn b  b  ,b .b ,b 8b :b 7b$ 'b b,n@xmlXPtrAdvanceCharn Ub Pb  Pb6 ab cb ab eb ab nb  xb b b b] b b b b b \b8@ b b ob0xmlXPtrMatchString xmlXPtrSearchStringxmlXPtrGetLastChar!xmlXPtrGetStartPointxmlXPtrGetEndPoint'pAxmlXPtrStringRangeFunctionp c  c  c c c c c c c c, c c c c d d, c d d d d1 d d1 d d cz c c$ c c3 d$ d d c c Xc c6  c c  c cO c c c c cs Xc Xc ac `c [c Zc hc hc hc hc kc kc 5d c% c c c c c c  c bo b b b b b b b b be b  bU bU 'c 'c c* @c @c Bc c1 9d 9d =d =d ?d Bd Gd 9c 8c ;c 9c Ld< Ld Kd Td d? d d`X s  8d w ޠ "c'vww x,TxX?vssst(vDvpy  s 1 )dvst(u4 s 'd'vssstp s Z &d?vssss(tZ >Z @Z  4 Z Z Y Y Y Z Z  4 Zv< UxmlSchemaFreeFacet G Z Z Z Z Z Y Y Z  4 Zv  axmlSchemaFreeType Z Z Y Y Y Z Z Z Z  Z vZ uZ tZP Z(  ޯ Z$  4 Zv,4L"paxmlSchemaFreeTypeListp Z Z Z,pPR xmlSchemaFree Z Z Z Z Z Z Z Z Z [ Y Y Y: Y [ Y; Y= [, \ 4 [v\h   ׬ [  Yv,LvD\!^xmlSchemaElementDump '[ ![ ![ ![ ![ *[ -[ 0[ 2[ 4[ 6[ 8[ :[ ?[a A[ C[ C[ H[ J[ O[ Q[ V[ W[0Џ_xmlSchemaAnnotDumpЏ^ g[ b[ b[ b[ j[ i[ l[ n[ n[ n[ n[`xmlSchemaTypeDump y[ y[] |[]0 [ [ [m [ [ [ [ [ [ [ [ [ [ Е0a xmlSchemaDumpЕl [ [ [ [ [ [ [ [ [ [!PTxmlSchemaGetPropNodeP< \ \ \ \0 \ \ \$xmlSchemaGetNodeContent0 SxmlSchemaGetProp0+ -\ -\ -\ 6\(RxmlSchemaGetElemJ \ \ \  \  \ \ ( \ 0 NxmlSchemaGetType J \ \ \ \ \ 4@"`IxmlSchemaGetAttribute`A ] ] ]  ]  !] ( 5]  'QxmlSchemaGetAttributeGroupA I] I] C]  C]  R] ( f]  MxmlSchemaGetGroupA z] z] t]  t]  ] ( ] pJxmlSchemaIsBlank, ] ] ] ] ] p!xmlSchemaAddNotation"UxmlSchemaAddAttribute ] ] ] ] ^ ^ ^ XT XS XT ^ ^ ^  ^ ^,  Z ^vԟ8'xmlSchemaAddAttributeGroup hVxmlSchemaAddElement _^ Y^ Y^ Y^ h^ j^ k^ X X X s^ t^ w^- {^ }^ ~^<  Z p^vԡ8`pSxmlSchemaAddTypep ^ ^ ^ ^ ^ ^ ^ X X ^ ^ ^C ^ ^ ^ ^, 4 Z ^v4P4xmlSchemaAddGroup-O xmlSchemaNewWildcardNsConstraintB _ _ _ X^ X] X^( @ Z _v@Tp8!PxmlSchemaAddWildcardF ._ '_ '_ Xy X Xz  Z 1_v0TxmlGetQNamePropi M_ M_ Z_ \_ e_ f_ j_ i_ j_,`PSxmlGetMaxOccurs` }_ }_ }_ _ _ _ >_ _ _ _ _ _ _ _ _# _ _ _,`SxmlGetMinOccurs` _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _# _ _ _, @VxmlGetBooleanProp I _ _ _ _ _ _ _ * XTxmlSchemaParseSchemaAttrValue  #` ` ` ` \ \ \ \ \ &` E` E` +` +` ,` ,` 0` 1` 5` 6` 8` 6` >` >` @` @`  O` N`W N` O` O` V` Z` W`  a` a` ^`4  U &`X$XYxmlSchemaParseAttrDecls v`  v` v` |` |` |` |` ` ` |`  |` |` `, %0RxmlSchemaParseAnnotation0U ` ` ` ` Y X X X0  `  Z Yv8l VxmlSchemaParseFacet  ` ` ` ` ` `  ` X X X ` ` `쨃 ` ` ` ` ` ` ` a a a a# ` ` `8  Z `v< @ TxmlSchemaParseAny@g *a #a #a #a 0a 1a 2a ;a :a ;a<#xmlSchemaParseNotation'UxmlSchemaParseAnyAttribute |a |a |a a a a a a a a a a a4 a a a a a a a a a  a a a a a a a a a a a' a a3 a aA% a a aL$YxmlSchemaParseAttribute b b b b b b b %b )b .b /b 4b 5b  ^ >^ A^ B^k I^ b b b b c c c #cD  ܼ b @ Z ;^v@Tp8?v $T0d  Z bv8 "pWxmlSchemaParseElementp 3c  3c  3c  3c 7c  3c 3c  Fc Jc Kc'@ Qc Rc Uc Xc \c ec jc ic jc qc c c c c c c c ~c c c c c c  c c c c c c  c c c c c c c c c c c c c c X  X  c9 c c c c9 c c c c c c c c c c c c c c c c, c'  c c c c x cvx$p xmlSchemaParseUnionxmlSchemaParseList%XxmlSchemaParseSimpleType d d d d  d  d d d d d d d d d d d d d d d d d d d d d d d d d d d dH Sd Td Td Zd [d ^d fd hd id zd yd zduD d d d d d d "d #d 'd 7d 6d 7d d d d e e eH  dv $ * dv$ 8` @VxmlSchemaParseGroup@ e e e e e +e ,e -e ^T ^ ^P ^ ^L ^ X7 X  ^ ^ ^ ^ ^ ^= ^= 9e ^9j _9 :e @e @e De Ye Xe YeD l ] 8e  Z ^v4Gvl(D `HZxmlSchemaParseAll ne ne ne ne ne }e ~e e e e e e e ew e e e e e e e e e e<" ]xmlSchemaImportSchema  e e e X  X  X  e e e e e X ] X  X  e e e e e e0 ` Z ev`l, @ Q$ ev@L  Z ev8p!]xmlSchemaParseImport f e  e  f f f f f f f f f (f ,f +f ,f 0f 3f 1f 3f ;f :f ;f Cf Df Ef Pf Pf ]f ^f _f jf kf lfY uf tf uf |f |f f f f< [xmlSchemaCleanupDoc f f f  f f f f  f f f f f f1 f()0\xmlSchemaParseSchemaTopLevel0 f f f f g f f Y0  f f f f f f f f f f g Y Y9  g g f1 Y\  gL Va Va Va Xa Ya Za ] ] ] ] ] X X ]  ] ] ] ] ] _a ha ha gaR )g )g 0g /g Y Yh  /g  8gD  4 5gv pd $ o 'g $ _a 4 Z ]v4(`4v$Dv$|(  4 gv p  "@]xmlSchemaParseInclude Sg Hg  Hg Hg Hg  [g Zg ^g _g `g lg pg og pg  |g g g g  g g g  g  g  Xk X X g g g g g vg tg tgP4 P Z gvPdp8!WxmlSchemaParseChoice g g g g g g g g g g g g g g g g g g g g g g, g g h g h g  h g  h g h g g h hD#@ (WxmlSchemaParseSequence@  &h &h &h &h &h 5h 6h ;h @h @h @h @h @h @h @h @h @h @h @h @h @h @h, @h Fh Xh @h Xh @h  Xh @h  Xh @h Xh @h! @h  _h _hD&YxmlSchemaParseRestriction th th th th h h h h h h h h h hW h h h h h@ h h h h  h h  h h h h h h h h h h h h h h h h h h h, h h h h h h h h h h  h  h , h  h  h  h  h h hF h h X1 X1 X0 X1 p Z h'vp < $ZxmlSchemaParseExtension i i i i i i i "i "i &i $i &i9 ?i Ai Fi@ (xmlSchemaParseSimpleContent)xmlSchemaParseComplexContent& pZxmlSchemaParseComplexType  i i i i i i  i i i i i ]i ]i `i di di hi zi xi yi~ ie i4 if ia i i i i i iI= j j j j jD % i'v%& &T&l t# ] i'vt###T#0 !*@\xmlSchemaParseSchema* +j 2j +j  +j +j D Y Y X X X Y Y ;j Bj Dj Cj Hj Gj Hj  Tj Sj Xj Wj Xj _j& j j j j lj kj mj nj rj tj wj zj }ja j j j j kj j j j j< t+ 9j + Z Yv+++ 8vt+ +X+P`# 1P^xmlSchemaNewParserCtxt 1` j j j j X X X j j( l1 Z jvl1x11,&020^xmlSchemaNewMemParserCtxt02q j j j j j j X1 X3 X5 j j, 2 Z jv222, &P3]xmlSchemaNewDocParserCtxtP3s k j j j XO XQ XS k k k k, 3 Z kv333,$P4[xmlSchemaFreeParserCtxtP4- k k k k #k(5MxmlSchemaBuildAContentModel5 :k 5k 5k 5k :k 5k :k Ek Dk Lk Nk Lk Xk Xk Xk \k$ ck hk kk pk$ wk ~k$ k#؂ k k k k k k k k k k k k k k k k k k k k k k k k k l k l k k l l l l l l  )l *l 2l El Gl Jl Ul  pl pl tl il l l l l l l l lm l l l l l l l l lH0 '0A NxmlSchemaBuildContentModel0A l l l l  l l l l l l l l  l l  l4&C0RxmlSchemaRefFixupCallbackC m m  m m  m m m m m m m m 'm #m4 &m /m 0m,'xmlSchemaParseListRefFixup(D8QxmlSchemaParseUnionRefCheckD m om om om om om om  m m m m3 m m% m m m m m m m m m m m m m m m m m1 X X X m m m m  m X( X' X(  m m m mP XG XF XH I Z mvIII8 H Z mvHHH8 G Z mvGGG8`(IPOxmlSchemaGetOnymousAttrNameI n +J`OxmlSchemaGetOnymousTargetNsURIJ2 +n  0n 1n 6n 8n >.!xmlSchemaIsDerivedFromBuiltInType&xmlSchemaGetPrimitiveType-JO xmlSchemaBuildAttributeUsesOwnedJp n n n n n n0 X X X K Z nvKKK8`0KHP#xmlSchemaCloneWildcardNsConstraintsK n n n  n n n  n n n n n n< n n $MPxmlSchemaUnionWildcardsM n n  n  n  n n n n o o o o o n  o n  +o /o 0o 0o 0o 0o 7o -o :o   Ho Ho Ho Ro Ro  Yo ]o co  so wo {o o o o o o o o o o o o o o o o o o o o<(PShPxmlSchemaIntersectWildcardsPS o o  o  o  o o o p p p p p p  p p  $p 1p 3p 3p 3p 3p ?p Bp Bp Bp Vp \p ^p ^p ^p ^p ep\ [p [p yp xp {p xp p02`XO%xmlSchemaIsWildcardNsConstraintSubset`X p p5 p p p/ p p p p p p p pW  p p  p p p p p 4ZP'xmlSchemaBuildCompleteAttributeWildcardZu p p p p p p p p&0 q p '[JxmlSchemaMatchesWildcardNs[K !q q q q *q0 3q ,q .\P!xmlSchemaBuildAttributeValidation\ @q @q @q Cq Cq Pq Iq Oq Pq Wq Vq Wq ^q `q gq yq qq  qq  qq q q X X X q q q q q q q q q q q q q q q q q q q q n n r r r  r r r r r r r "r n n 'r 'r %r( $r *r +r +r 0r 0r s s s s s s p/hH"xmlSchemaGetListSimpleTypeItemTypehx 's %s  's  's  's (s (s /s /s /s /s )jNxmlSchemaCheckCOSSTDerivedOKj Ks  Ks  ]s ^s ]s gs ns ns ws vs vs  s s `s/<)xmlSchemaCheckSTPropsCorrect)kOxmlSchemaCheckCOSSTRestrictsk t t t t t t #t t t "t .t 0t =t mn mn mn Ct Ct on Mt Pt Mt  Mt Mt } bt bt et ft gt ut st tt st  t  t t t t  t  t t t t t$0 t t t t t t t t t t  t t t t t  t t t t t t u u  u u u  +u 4u 4u  3u :u 8u 8u Ku [u [u Ru Pu Nu Nu fu eu eu pu ru u u u u u u u u u u" u u u u u u  u u  u u u u u  l 8 Btvl<Pmp (xmlSchemaCheckSRCSimpleTypeuQxmlSchemaTypeFixupu nv nv  v v v v v v v v v  v v v v v v v v  v v v v v  v v  w w w v w w w w )w (w  0w 7w 1w 0w  6w 7w Ow Qw  \w aw bw fw lw qw {w |w w w w w w w w w w w u u u w w w w w w w w w w w w w w w w w w x w& w% w XG XF XG s s s s  s s s s s s s s s s s s s s s s s  s s s s s s s s s s u v v v v v v *v *v .v  9v 9v =v Gv Jv Gv Ev Ov Mv Mv Jm Jm Jm  Sm Sm \m Zm \m am am>  x v 5x 5x 6x+8 ~ Z wv~$~0~8 @  x |  x P~  u4'v| P~xЀ$$$ LxmlSchemaCheckFacet xx qx qx xx qx yx x x x x x x x x x  x x x x2 y y  y y^ y y y )y +y -y 0y 1y@#MxmlSchemaCheckDefaults Hy Ty," QxmlSchemaAttrGrpFixup : dy jy ny py 8QxmlSchemaAttrFixuph y y y y y y y y8p[xmlSchemaParse y y y y y y y y y y y y  z z z z z  z 8z Hz Iz y y yL8@%@LxmlSchemaSetParserErrors ^z `z 'HxmlSchemaFacetTypeToStringy pz tz vz xz zz |z ~z z  z  z z z z ,xHxmlSchemaValidateFacetsInternalm z z z z  z z z z z z<p)P(GxmlSchemaFreeAttributeStatesP# { { { {,(АIxmlSchemaRegisterAttributesА { { { { { { { { { { {0 'Y (Y" +Y" +Y"  {v 0Dp%@GxmlSchemaCheckAttributes@ { { { { { | | | | | | | | |< | | | | {  |0+xmlSchemaValidateCheckNodeList&Г LxmlSchemaValidateCallbackГE | |  | |  |  | | p-@H xmlSchemaValidateSimpleTypeValue@ d}  d}  d} d} m}  u}  u}  } } } } }  } } } } } } } } } } } } } } } } }  } } } } } } } } } }  ~ } ~ ~ ~ ~ ~  ~  ~ ~  !~ )~ )~ )~ +~) .~' 1~ 1~ 1~ 9~ 8~ 8~ 9~ ?~ >~ =~ =~ >~ D~ C~ B~ B~ C~ H~ H~ H~ H~ H~ O~ Q~ P~ P~  Y~ a~ Z~ \~  o~ r~ q~ p~ ~~ }~ ~~ ~ ~ ~  ~ ~ ~ ~ ~ ~ ~ ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~T /"xmlSchemaValidateSimpleTypeElement)xmlSchemaValidateElementType)JxmlSchemaValidateComplexType + + 1  F H B  A F H B  A F H B  A N O Y X  i d d s s i j d X+                             Ӏ Ӏ Ӏ Ӏ Ӏ ր Հ ր  € €l        o    4%KxmlSchemaValidateContent !  ! 'U : < : [ Y X [ [+ FA a c b$ FA m @Y/& AY GY FY EY)& NY MY!& MY:( FA w w          FA ~ ~ ~ ~ ~ o| q| p| p| p| t| s| o|  w|   v             " "e . . 0T N0 ,>! < Ԧ ;. F  o'v,ܧ 8'vԦ@04P,  . L  e( vp`'v<Pp "JxmlSchemaValidateType               A   ˁ ˁ Ձ8(8JxmlSchemaValidateAttributes          o H          9 C  E  E H O T U W Y ] ` a a o  'Y (YC) +Y@) +YA)"     ‚ ł ł Ƃ Ȃ ʂ ΂ 1X  mv̶D %xmlSchemaValidateElement&xmlSchemaValidateDocument"LxmlSchemaNewValidCtxtV     +Yl* +Ym* +Yn* $  v(#KxmlSchemaFreeValidCtxt+   ƒ ă ƃ$ KxmlSchemaSetValidErrors  ؃ ڃ !@KxmlSchemaValidateDoc@     S  S S S U Z o s r r             ) *"  ; ==w4 \ 9 t 9 zv\0$pFxmlSchemaValidateStreamp<       /XMLSCHEMASTYPESCompaq C V6.5-00>1#`bxmlSchemaTypeErrMemory ] ]$0#@fxmlSchemaInitBasicType@ ] ] ] ] ] ] ] ^ ^ ^ ^ +^ +^,  > ^v,HgxmlSchemaInitTypes 9^ 9^ 7^ 7^ E^ D^ A^ ]^ ]_ ]` O^ P^ O^ S^ ^^ a^ d^ g^ j^ m^ p^ s^ v^ y^ |^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^M ^ ^ ^ ^ ^(  > L^v,"jxmlSchemaCleanupTypes8 ^ ^ ^ ^ ^ ^$(jxmlSchemaIsBuiltInTypeFacet _ _= _ _ _9 _ _ _ _ _ _ _$ 2_ 2_` 2_ 2_ 2_  _  _ _ _ _. =_ $jxmlSchemaGetBuiltInType L_ N_&,`bxmlSchemaNewValue`8 _ _ _ _ _ _bxmlSchemaFreeValueR _ _ _ _ _ _ _ _ _'PjxmlSchemaGetPredefinedTypeA ` ` ` ` ` ` ` `6@j)xmlSchemaGetBuiltInListSimpleTypeItemTypeI ` `  ` ` `  ` ` `!_xmlSchemaParseGYear"e_xmlSchemaParseGMonth* ` ` ` ` e_xmlSchemaParseGDay* ` ` ` ` pe_xmlSchemaParseTimep a a a a a a a "a $a $a  (a (a& ,a ,a -a $xe_xmlSchemaParseTimeZone @a6 Fa Fa* va Ya Ua Ua Ua  Ya! \a _a ca ca ca ea ha ha ka ka ka ka ka ka la Ha0 Ia /#e_xmlSchemaBase64Decode> a a a a a a a#0exmlSchemaValidateDates0 a a a a a a  a a a  b b b b \ b  9b 8b  8b :b ` }` ~` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Db Jb Jb Ob Ub Ub Zb@0 Zb bb bb.< b b9  F Dbp &@exmlSchemaValidateDuration b b b b b b b b b b b b b b bl b b b b b b b b b b b b1 b& b& b b b1 b4 c c c c b1 bG,P0exmlSchemaStrip0T c c c c %c 'c 'c c  c  $exmlSchemaCollapseString 3c 3c 3c :c ;c ;c Ec Ic Jc Qc Pc Qc$ Qc Qc 8c#,'jxmlSchemaValAtomicListNode lc lc lc lc lc pc c ch ~c  c c cI c c c c c@  a cv  dxmlSchemaParseUInt c c c c c c c c c c c c c c c c cp c( c c c c c c c c c c ct c( c c& c c c#8ixmlSchemaValAtomicType c c c c c c d d d d d d d d d  d d d %d &d &d &d &d &d &d &d &d &d *d ,d -d .d .d .d .d .d .d .d .d .d 4d 4d 8d :d ;d ;d  Qd  Vd Vd Xd \d  `d dd dd hd td td vd xd zd d d d d d d d d d d d d d d d d d d d d d d d d d d d d d  d d d d d d d d d d d d d d d d d d  d d e e e e 'e 'e 'e (e -e 0e 1e 1e 4e 5e ;e >e >e >e @e @e Ce Ie Oe Qe Ye Ye Ze [e ee ee fe ge  oe  oe  pe oe {e ze |e e e e e e e e e e  e e e e e e e e e e e e e e e e e e e e e e g e e e e e e e e e e e e e e e e e f f f f f f f f 'f 'f (f 'f .f 3f 5f 6f 5f ]N ]O ]P Bf @f Df Df Cf Cf _f ff ff  uf pf pf f f f f f f f f f f f f f f f f f ] ] ] f f f g f f f f f f f f f f f f f f f f g g g  g g g g g g g g g g g  g g  *g ,g ,g 'g &g *g )g &g 'g 2g 2g 1g 1g 4g ;g 8g 9g ;g ;g  Ag @g Bg Gg Yg _g _g [g _g ^g [g [g ]g hg hg kg ig qg qg rg vg wg |g ~g g g g' g g@ 0fa   > fvl x  ,'hxmlSchemaValPredefTypeNode g, jxmlSchemaValidatePredefinedType g  a g%cxmlSchemaCompareDecimals g g g g g g g g g' g g g g" g g g h g g g g g g g h h`&xmlSchemaCompareDurations cxmlSchemaDupVal  wh wh 0c_xmlSchemaDateAdd h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h i i i4 i iH h p ##cxmlSchemaDateNormalize#W i0 %i %i %i %i -i 'i 'i @'P$b_xmlSchemaDateCastYMToDaysP$ Ii Ii Ki Ki Ji Ji| Ji  Mi Ji  Pi Pi Pi Oi Oix Oi Ri Oi MiP"&cxmlSchemaCompareDates& vi pi pi yi }i i i i i i i i i i i i i i i i i  i i i i i i 4j 0j 4j 0j 4j 0j 4j 0j 4j 0j 4j 0j 4j 0j 4j 0j 1j 7j ?j @j Ij Jj Sj; Tj Uj Vj Xj ]j< (2bxmlSchemaCompareNormStrings2} vj  xj ~j ~j }j j j j  j j j j p#xmlSchemaCompareFloats#4cxmlSchemaCompareValues4 j j j j j j k k k k k k k k k k  (h 'h (h h )h $h )h $h >h Lh Ph Qh Qh Qh Vh  ]h Wh Wh \h Zh  !k "k $k (k !k  7k 9k =k Ak 6k  Ek Fk Gk j Nk Nk j j j j j j j  js Sk \k ]k dk kk tk, Rh t9 k Qkvt99 6 c kv6$6<xmlSchemaNormLen1<d$xmlSchemaValidateListSimpleTypeFacet<U k k k k k k k  k k #p=dxmlSchemaValidateFacetp= k k k k k l $l  1l 8l :l :l0 k k k k k k k k Nl Nl Nl Ul \l _l* cl* >l, kl klv sl  ul ul yl l ql  l l ol ? n Olv??4 AdT/k $ / DC(07 4bapfBpt0 uJ<Px@)"NА<Љ. ^!h6  0-H 'P@Lhpr)P@T*` rP+p*`*0,@,p*$˜ @ %-$dͬ`7 T p38P*}?  6A x @ 7@H] @N `` `9bg P>pIl \ pg? & w TX+A @@  "LE $P  OPQ0` $0T#@h,P)L  {W  `a$ 60\P pAA`U `f #E] ph)Nr @lU  n)_ `  5pt)g `px0#+0Wp' x<{~@ B@ 0/@PP q`9l  / `|pAI d 0@&%PV Ќ P*  P[ < #_ *0Pc tPPJH@ 0u 2Pz H0`JH  М  #`е `` L4p  <0eh  (m8l DP P@0Pp h3$ d`H# p,`,tKP D ЄwS  U Pd0pX] t@aY@ Xe ,tm4 Hv6 `pxA9 x \@ tp@k 4`4px ` `   0D e` t/|& `4 @C+|  2^"`II $#}J 8 # ^ G`Z #@E*4 dIC $^o R`)@P0!*g/r4p4q 3$$,% HA-------*(VTB0*`L70V >"<.P)^h0`[*! cp@/`&hpPP@- /0//@//,,P,`/0-p-///.0/ -p/P/P-/`--0//,p-*p)p$4Gt&`Kl0 `$ i@t@p¤{A ВP=P  PE X!p xp`JoP.$ Шp & S(@` Pr^P$& ppsG2#P,[0 V8PHP p$qd" /I 6,x p `1  000 p">%&D0@0p0P0`0"l 600(8ޙ&B %EX<6U P PD'phP7p07{p>pNz&p$@p(@ })`)4Vt>P/ l>xeCF( `= Z4`b(p00[swish-e.conf]Makefile.am##bEb2;!8exampledir = $(datadir)/doc/$(PACKAGE)/examples/conf conf_dir = \ stopwords/dutch.txt \ stopwords/english.txt \ stopwords/german.txt \ stopwords/spanish.txt \ README \ example1.config \ example2.config \ example3.config \ example4.config \ example5.config \ example6.config \ example7.config \ example8.config \ example9.config \ example9.pl nobase_example_DATA = $(conf_dir) EXTRA_DIST = $(conf_dir) 0[swish-e.conf]Makefile.in##\@*c2 [ʢ&# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ exampledir = $(datadir)/doc/$(PACKAGE)/examples/conf conf_dir = \ stopwords/dutch.txt \ stopwords/english.txt \ stopwords/german.txt \ stopwords/spanish.txt \ README \ example1.config \ example2.config \ example3.config \ example4.config \ example5.config \ example6.config \ example7.config \ example8.config \ example9.config \ example9.pl nobase_example_DATA = $(conf_dir) EXTRA_DIST = $(conf_dir) subdir = conf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(nobase_example_DATA) DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign conf/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: nobase_exampleDATA_INSTALL = $(install_sh_DATA) install-nobase_exampleDATA: $(nobase_example_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(exampledir) @list='$(nobase_example_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="$$p"; \ echo " $(nobase_exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f"; \ $(nobase_exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f; \ done uninstall-nobase_exampleDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_example_DATA)'; for p in $$list; do \ f="$$p"; \ echo " rm -f $(DESTDIR)$(exampledir)/$$f"; \ rm -f $(DESTDIR)$(exampledir)/$$f; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/stopwords @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(exampledir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-nobase_exampleDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-nobase_exampleDATA .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-nobase_exampleDATA \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-info-am \ uninstall-nobase_exampleDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0[swish-e.conf]README.##d2aϟ This "conf" directory contains example swish-e configuration settings. In the "stopwords" directory are files that contain lists of common stopwords for a few languages. They can be selected with the IgnoreWords configuration directive. See SWISH-CONFIG.pod for more information. Configuration examples: Note: In many cases you may not need a configurataion file at all when indexing with swish. The configuration defaults should get you started. The configuration defaults can also be set when compiling swish-e by adjusting the settings in config.h. For example, you can index a directory (and sub directories) simply by calling swish as: swish-e -i . In general, though, you will use a config file to specify the configuration parameters to use while indexing: swish-e -c mysettings.config If you are having problems indexing some files, you can specify a single file on the command line which will override the IndexDir configuration setting in your config file: swish-e -c mysettings.config -i test.html -f other.index which will index with your settings, but only index one file, and write the index to the file specified with the -f option. The files included here are examples. It is recommended that you create your own configuration file as needed, only adding additional directives when you need to change the default behavior. If you are generating a number of indexes, then consider moving common configuration directives into a single file, and then including that configuration file in other configuration files. See the IncludeConfig directive in the SWISH-CONFIG.pod manual page. Examples: example1.conf - index only html files, plus add labels to the index file example2.conf - include metanames in your index example3.conf - add descriptive tags to your index example4.conf - site-wide settings example5.conf - Using "FileRules" to control what gets indexed example6.conf - spider using "prog" feature example7.conf - spider using the "http" method of indexing example8.conf - using "filters" to convert PDF files. example9.conf - using the "prog" method for filtering example9.pl 0[swish-e.conf]example1.config##iX262# ----- Example 1 - limit by extension ------------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to limit # indexing to just .htm and .html files. # #--------------------------------------------------- # By default, swish creates an index file in the current directory # called "index.swish-e" (and swish uses this name by default when # searching. This is convenient, but not always desired. IndexFile /home/indexfiles/docs.index # Although you can specify which files or directories to # index on the command line with -i, it's common to specify # it here. Note that these are relative to the current directory. # Index two directories, "docs" (below current directory) and # "/home/otherdocs", and within those directories (and all sub # directories) index only files ending in .html and .htm. IndexDir docs /home/otherdocs IndexOnly .htm .html # If you wish to follow symbolic links use the following. # Note that the default is "no". I you are indexing many # files, and you do not have any symbolic links, you may # still want to set this to "yes". This will avoid an extra # lstat system call for every file while indexing. FollowSymLinks yes # end of example 0[swish-e.conf]example2.config##oZ262# ----- Example 2 - Include MetaNames ------------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to include # MetaNames in your index. # The metanames can be used when searching: # # swish-e -w foo author=shakespeare # #--------------------------------------------------- # Specify what you want to be indexed. # (see example1.config) IndexFile /home/indexfiles/docs.index IndexDir docs /home/otherdocs IndexOnly .htm .html FollowSymLinks yes # Now, specify which meta name to include in the index. MetaNames author description # By default, undefined meta names are indexed as plain text # This feature can change this behaviour. Here we say # don't index text in metatags unless defined in MetaNames UndefinedMetaTags ignore # end of example 0[swish-e.conf]example3.config##MZ262# ----- Example 3 - Descriptive Index Files ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to include # descriptive names to your index file # #--------------------------------------------------- # Define headers values for the index -- this might be # helpful if you have a common front end program that # reads more than one index file. These headers can be # returned when running swish (see the -H switch). IndexName "Test index" IndexDescription "This is an index of our two document directories." IndexPointer "http://someplace" IndexAdmin "Doc Manager (dmanager@foo.invalid)" # From previous examples: # What to index IndexFile /home/indexfiles/docs.index IndexDir docs /home/otherdocs IndexOnly .htm .html FollowSymLinks yes # Index meta tags MetaNames author description UndefinedMetaNames ignore # end of example 0[swish-e.conf]example4.config##_+[2M& # ----- Example 4 - Site-wide settings ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to define # settings that change the way swish indexes. # Since you will probably want consistent # settings for all your indexes, you can # create one file, and include it in other # config files. # # Once you define a common configuration file you # can include it in other configuration files. For # example, if this file was saved as "common.config" # you can include it in other configuration files # with the following directive: # # ... # IncludeConfig /home/swish/common.config # ... # #--------------------------------------------------- # These settings tell swish what defines a word. # We only index words that include letters, numbers, a dash, # or a period. (Not very realistic) # These are the characters that are allowed in a "word". # i.e. words are split on any character NOT found in WordCharacters WordCharacters abcdefghijklmnopqrstuvwxyz0123456789.- # We allow a period and a dash within words, but strip them # from the beginning or end of a word. This is done after # WordCharacters above is used to split words. IgnoreFirstChar .- IgnoreLastChar .- # Finally, resulting words must begin/end with one # of the characters listed here BeginCharacters abcdefghijklmnopqrstuvwxyz0123456789 EndCharacters abcdefghijklmnopqrstuvwxyz0123456789 # Turn this on for a slight performance improvement #FollowSymLinks yes # This is how detailed you want reporting. You can specify numbers # 0 to 3 - 0 is totally silent, 3 is the most verbose. # 4 is debugging. Can be overridden with -v on the command line IndexReport 2 # Set the stopwords (words to ignore when searching and when indexing) # Carefully think about this feature before using a list of stopwords # You can list the words here: # IgnoreWords of or and the a to # Or you can use the compiled in defaults: # IgnoreWords SwishDefault # Or you can use a file that includes your own words: IgnoreWords file: stopwords/my_stopwords.txt # Another option is to use the IgnoreLimit directive, and # swish will determine what stopwords to use. But please # read the documentation before using the IgnoreLimit directive. # It can be slow, and may not work with other options. # Since we are using such a restrictive WordCharacters settings, we # want to map eight-bit characters to ascii. # For example, "resum" will be indexed and searched as "resume". # See docs for more info. TranslateCharacters :ascii7: # We don't want pharse searches to work across sentenses, plus # we use the pipe "|" to force a break in phrases when indexing. BumpPositionCounterCharacters |. # end of example 0[swish-e.conf]example5.config##M \262# ----- Example 5 - Using FileRules ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This is a simple example of how to use FileRules # to limit what is indexed. # #--------------------------------------------------- # Include our site-wide configuration settings: IncludeConfigFile example4.config # Index the current directory IndexDir . # Now let's index only these example scripts # It would be easier to use IndexOnly, true, # but, this is just an example... # Don't index the stopwords directory FileRules pathname contains stopwords CVS # And don't index example6.spider or any index files FileRules filename contains .spider index. # end of example 0[swish-e.conf]example6.config##]262 # ----- Example 6 - Spider using "prog" feature ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to use the # new (as of 2.2) "prog" document source feature # to spider a webserver. # # The "prog" document source feature allows # an external program to feed documents to # swish, one after another. This allows you # to index documents from any source (e.g. web, DBMS) # and to filter and adjust the content before swish # indexes the content. # # This example uses the provided spider.pl program # to spider a remote web server. This spider offers # more features than the "http" spider method shown # in example7.config. # # ** Please don't test with this exact config ** # spider your own web server # # Indexing (spidering) is started with the following # command issued from the "conf" directory: # # swish-e -S prog -c example6.config # # Note: You should have the current Bundle::LWP bundle # of perl modules installed. This was tested with: # libwww-perl-5.53 # Run "perldoc spider.pl" in the prog-bin directory for # more information. # # ** Do not spider a web server without permission ** # #--------------------------------------------------- # Include our site-wide configuration settings: IncludeConfigFile example4.config # Specify the program to run IndexDir ../prog-bin/spider.pl # When running under the "prog" document source method you can # pass a list of parameters to the program (specified with -i or IndexDir). # If a parameter is passed to spider.pl, it will use that as the configuration # file. # As a special case, the word "default" followed by URL(s). # In this case the spider will use default settings to spider the provided URLs. SwishProgParameters default http://swish-e.org # Note: the default used by spider.pl is SwishSpiderConfig.pl. # See prog-bin/SwishSpiderConfig.pl for examples # that include filtering PDF and MS Word documents. # Tell swish that about how to parse the content DefaultContents HTML IndexContents HTML .htm .html IndexContents TXT .txt .conf # Just to make it interesting, let's modify the URL that get's indexed: # replace http://swish-e.org/ => http:/localhost/ ReplaceRules replace swish-e.org localhost # end of example 0[swish-e.conf]example7.config##S^262# ----- Example 7 - Spider using "http" method ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to use the # the "http" method of spidering. # # Indexing (spidering) is started with the following # command issued from the "conf" directory: # # swish-e -S http -c example7.config # # Note: You should have the current Bundle::LWP bundle # of perl modules installed. This was tested with: # libwww-perl-5.53 # # ** Do not spider a web server without permission ** # #--------------------------------------------------- # Include our site-wide configuration settings: IncludeConfigFile example4.config # Specify the URL (or URLs) to index: IndexDir http://swish-e.org # If a server goes by more than one name you can use this directive: EquivalentServer http://swish-e.org http://www.swish-e.org # This defines how many links the spider should # follow before stopping. A value of 0 configures the spider to # traverse all links. The default is 5 # The idea is to limit spidering, but seems of questionable use # since depth may not be related to anything useful. MaxDepth 10 # The number of seconds to wait between issuing # requests to a server. The default is 60 seconds. Delay 1 # (default /var/tmp) The location of a writeable temp directory # on your system. The HTTP access method tells the Perl helper to place # its files there. The default is defined in src/config.h and depends on # the current OS. TmpDir . # The "http" method uses a perl helper program to fetch each document # from the web called "swishspider" and is included in the src directory of # the swish-e distribution. SpiderDirectory ../src # end of example 0[swish-e.conf]example8.config## Ȗ_262# ----- Example 8 - Filtering PDF files ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to use swish's # "filter" feature to index PDF documents. # # Filters can be used to filter PDF or MS Word documents # to uncompress gzipped files, or to modify content # before indexing. # # You will need the xpdf package installed to use # this filter. # # See filter-bin/_pdf2html.pl for more information. # # Please see the documentation on File Filters in # the SWISH-CONFIG.pod manual page. # # Note: # If you are filtering many documents and/or using # a perl script to filter, see example9.config for # perhaps a faster way to filter. # #--------------------------------------------------- # Include our site-wide configuration settings: IncludeConfigFile example4.config # Index the example config files and .pdf files # in the current directory (and sub directories) IndexDir . IndexOnly .config .pdf # Assign the pdf2text.pl filter to .pdf files # Please see docs on what data can be passed to the filter. FileFilter .pdf ../filter-bin/_pdf2html.pl # end of example 0[swish-e.conf]example9.config##{`262 # ----- Example 9 - Filtering PDF with "prog" ------- # # Please see the swish-e documentation for # information on configuration directives. # Documentation is included with the swish-e # distribution, and also can be found on-line # at http://swish-e.org # # # This example demonstrates how to use swish's # "prog" document source feature to filter documents. # # The "prog" document source feature allows # an external program to feed documents to # swish, one after another. This allows you # to index documents from any source (e.g. web, DBMS) # and to filter and adjust the content before swish # indexes the content. # # Using the "prog" method to filter documents requires more # work to set up than using the "filters" described in # example8.config because you must write a program to retrieve # the documents and feed them to swish. # # On the otherhand, the "prog" method should be faster than the # filter method in example8.config because swish doesn't need to fork # itself and run an external program for each document to filter. # This can be significant if you are using a perl script as a filter since # the perl script must be compiled each time it is run. This "prog" method # avoides that overhead. # # This example uses the example9.pl program. This program # is very similar to the included DirTree.pl program found in # the prog-bin directory. This program simple reads files from the # file system, and passes their content onto swish if they are the correct # type. PDF files are converted by the prog-bin/pdf2xml.pm module. # # The PDF info fields (e.g. author) are placed in xml tags # which allows indexing the PDF info as MetaNames. # By specifying metanemes you can limit searches by this PDF info. # # For this example, you will need the xpdf package. # Type "perldoc pdf2xml" from the prog-bin directory for # more information. # # Run this example as: # # swish-e -S prog -c example9.config # #--------------------------------------------------- # Include our site-wide configuration settings: IncludeConfigFile example4.config # Define the program to run IndexDir ./example9.pl # Pass in the top-level directory to index # (here we specify the current directory) SwishProgParameters . # Swish can index a number of different types of documents. # .config are text, and .pdf are converted (filtered) to xml: IndexContents TXT .config IndexContents XML .pdf # Since the pdf2xml module generates xml for the PDF info fields and # for the PDF content, let's use MetaNames # Instead of specifying each metaname, let's let swish do it automatically. UndefinedMetaTags auto # Show what's happening IndexReport 3 # end of example 0[swish-e.conf]example9.pl##c`a2x櫟#!/usr/local/bin/perl -w use strict; # This is a short example that basically does the same # thing as the default file system access method by # recursing directories, but also shows how to process different # file types -- in this example pdf is converted to xml for indexing. # in this example, only .pdf and .config files are indexed. # the pdf2xml module is in the prog-bin directory of the swish-e distribution use lib '../prog-bin'; use File::Find; # for recursing a directory tree use pdf2xml; # example module for pdf to xml conversion # Not that you need IndexContents XML .pdf in the # swish-e config file # See perldoc File::Find for information on following symbolic links use constant DEBUG => 0; # See if a directory was passed in via the SwishProgParameters swish # directive my $dir = shift || '.'; find( { wanted => \&wanted, no_chdir => 1, }, $dir, ); sub wanted { return if -d; if ( /\.pdf$/ ) { print STDERR "Indexing pdf $File::Find::name\n" if DEBUG; print ${ pdf2xml( $File::Find::name ) }; } elsif ( /\.config$/ ) { print STDERR "Indexing $File::Find::name\n" if DEBUG; print ${ get_content( $File::Find::name ) }; } else { print STDERR "Skipping $File::Find::name\n" if DEBUG; } } sub get_content { my $path = shift; my ( $size, $mtime ) = (stat $path )[7,9]; open FH, $path or die "$path: $!"; my $content = <; return \$content; } 0[swish-e.filter-bin]Makefile.am##ƫ2;!8exampledir = $(datadir)/doc/$(PACKAGE)/examples/filter-bin example_DATA = \ README \ swish_filter.pl \ _binfilter.sh \ _pdf2html.pl CLEANFILES = swish_filter.pl swish_filter.pl: swish_filter.pl.in @rm -f swish_filter.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/swish_filter.pl.in > swish_filter.pl EXTRA_DIST = \ README \ swish_filter.pl.in \ _binfilter.sh \ _pdf2html.pl 0[swish-e.filter-bin]Makefile.in##vȫ2ʢ&# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ exampledir = $(datadir)/doc/$(PACKAGE)/examples/filter-bin example_DATA = \ README \ swish_filter.pl \ _binfilter.sh \ _pdf2html.pl CLEANFILES = swish_filter.pl EXTRA_DIST = \ README \ swish_filter.pl.in \ _binfilter.sh \ _pdf2html.pl subdir = filter-bin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(example_DATA) DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign filter-bin/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: exampleDATA_INSTALL = $(INSTALL_DATA) install-exampleDATA: $(example_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(exampledir) @list='$(example_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f"; \ $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f; \ done uninstall-exampleDATA: @$(NORMAL_UNINSTALL) @list='$(example_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(exampledir)/$$f"; \ rm -f $(DESTDIR)$(exampledir)/$$f; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(exampledir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exampleDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-exampleDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exampleDATA install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-exampleDATA uninstall-info-am swish_filter.pl: swish_filter.pl.in @rm -f swish_filter.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/swish_filter.pl.in > swish_filter.pl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0wish-e.filter-bin]README.##}ɫ2Here are some very basic filter scripts that could be used with the FileFilter configuration directive. In general, Swish-e's FileFilter feature is best used with binary programs to avoid the time parsing and compiling a script for each document that needs to be filtered. _binfilter.sh This filter uses the strings(1) command to extract text out of binary files. _pdf2html.pl Filter uses the xpdf package's programs pdfinfo and pdftotext to convert a PDF file into html. swish_filter.pl Uses the SWISH::Filter module to filter a number of different types of documents with the same script. 0![swish-e.filter-bin]_binfilter.sh##jG˫2at9#!/bin/sh # Example of a shell script filter # Simple filter for binary files (eg: exe files) # Note: This is just an example of a shell script. In general you would not # use a shell script to just call a program -- rather call the program directly from # swish using a FileFilter command. # e.g. FileFilter .exe strings "'%p'" strings "$1" - 2>/dev/null 0 [swish-e.filter-bin]_pdf2html.pl##&S̫2 D? #! /usr/bin/perl -w use strict; # -- Filter PDF to simple HTML for swish # -- # -- 2000-05 rasc # =pod This filter requires two programs "pdfinfo" and "pdftotext". These programs are part of the xpdf package found at http://www.foolabs.com/xpdf/xpdf.html. These programs must be found in the PATH when indexing is run, or explicitly set the path in this program: $ENV{PATH} = '/path/to/programs' "pdfinfo" extracts the document info from a pdf file, if any exist, and creates metanames for swish to index. See man pdfinfo(1) for information what keywords are available. An HTML title is created from the "title" and "subject" pdf info data. Adjust as needed below. How the extracted keyword info is indexed in Swish-e is controlled by the following Swish-e configuration settings: MetaNames, PropertyNames, UndefinedMetaTags. Passing the -raw option to pdftotext may improve indexing time by reducing the size of the converted output. =cut my $file = shift || die "Usage: $0 \n"; # # -- read pdf meta information # my %metadata; open F, "pdfinfo $file |" || die "$0: Failed to open $file $!"; while () { if ( /^\s*([^:]+):\s+(.+)$/ ) { my ( $metaname, $value ) = ( lc( $1 ), escapeHTML( $2 ) ); $metaname =~ tr/ /_/; $metadata{$metaname} = $value; } } close F or die "$0: Failed close on pipe to pdfinfo for $file: $?"; # Set the default title from the title and subject info my @title = grep { $_ } @metadata{ qw/title subject/ }; delete $metadata{$_} for qw/title subject/; my $title = join ' // ', ( @title ? @title : 'Unknown title' ); my $metadata = join "\n", map { qq[] } sort keys %metadata; print < $title $metadata EOF # Might be faster to use sysread and read in larger blocks open F, "pdftotext $file - |" or die "$0: failed to run pdftotext: $!"; print escapeHTML($_) while ( ); close F or die "$0: Failed close on pipe to pdftotext for $file: $?"; print "\n"; # How are URLs printed with pdftotext? sub escapeHTML { my $str = shift; for ( $str ) { s/&/&/go; s//>/go; s/"/"/go; } return $str; } 0&[swish-e.filter-bin]swish_filter_pl.in##W]mr}2#!@@perlbinary@@ -w use strict; # This is set to where Swish-e's "make install" installed the helper modules. use lib qw( @@perlmoduledir@@ ); use SWISH::Filter; =pod This is an example of how to use the SWISH::Filter module to filter documents using Swish-e's C feature. This will filter any number of document types, depending on what filter modules are installed. This program should typically only be used for the -S fs indexing method. For -S http the F program calls SWISH::Filter directly. And -S prog programs written in Perl can also make use of SWISH::Filter directly. In general, you will not want to filter with this program if you have a lot of files to filter. Running a perl program for many documents will be slow (due to the compiliation of the perl program). If you have many documents to convert with the -S fs method of indexing then consider using -S prog with F and use the SWISH::Filter module (see F). Swish-e configuration: FileFilter .pdf /path/to/swish_filter.pl FileFilter .doc /path/to/swish_filter.pl FileFilter .mp3 /path/to/swish_filter.pl IndexContents HTML2 .pdf .mp3 IndexContents TXT2 .doc Then when indexing those type of documents this program will attempt to filter (convert) them into a text format. See SWISH-CONFIG documentation on Filtering for more information. =cut my ( $work_path, $real_path ) = @ARGV; my $filter = SWISH::Filter->new; my $filtered = $filter->filter( document => $work_path, name => $real_path, content_type => \$real_path, # use the real path to lookup the content type ); print STDERR $filtered ? " - Filtered: $real_path\n" : " - Not filtered: $real_path ($work_path)\n"; print $filtered ? ${$filter->fetch_doc} : $real_path; 0[swish-e.filters]Makefile.am##EΫ2 #lSUBDIRS = SWISH exampledir = $(datadir)/doc/$(PACKAGE)/examples/filters bin_SCRIPTS = swish-filter-test example_DATA = README CLEANFILES = swish-filter-test swish-filter-test: swish-filter-test.in @rm -f swish-filter-test @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/swish-filter-test.in > swish-filter-test EXTRA_DIST = \ README \ swish-filter-test.in 0[swish-e.filters]Makefile.in##NyЫ2ʢ># Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = SWISH exampledir = $(datadir)/doc/$(PACKAGE)/examples/filters bin_SCRIPTS = swish-filter-test example_DATA = README CLEANFILES = swish-filter-test EXTRA_DIST = \ README \ swish-filter-test.in subdir = filters ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = SCRIPTS = $(bin_SCRIPTS) DIST_SOURCES = DATA = $(example_DATA) RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ ps-recursive install-info-recursive uninstall-info-recursive \ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am DIST_SUBDIRS = $(SUBDIRS) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign filters/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) binSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \ $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: exampleDATA_INSTALL = $(INSTALL_DATA) install-exampleDATA: $(example_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(exampledir) @list='$(example_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f"; \ $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f; \ done uninstall-exampleDATA: @$(NORMAL_UNINSTALL) @list='$(example_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(exampledir)/$$f"; \ rm -f $(DESTDIR)$(exampledir)/$$f; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if (etags --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ else \ include_option=--include; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(exampledir) install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-exampleDATA install-exec-am: install-binSCRIPTS install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-exampleDATA \ uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ clean-generic clean-libtool clean-recursive ctags \ ctags-recursive distclean distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am \ dvi-recursive info info-am info-recursive install install-am \ install-binSCRIPTS install-data install-data-am \ install-data-recursive install-exampleDATA install-exec \ install-exec-am install-exec-recursive install-info \ install-info-am install-info-recursive install-man \ install-recursive install-strip installcheck installcheck-am \ installdirs installdirs-am installdirs-recursive \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ pdf-recursive ps ps-am ps-recursive tags tags-recursive \ uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-exampleDATA uninstall-info-am \ uninstall-info-recursive uninstall-recursive swish-filter-test: swish-filter-test.in @rm -f swish-filter-test @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/swish-filter-test.in > swish-filter-test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0[swish-e.filters]README.##kѫ2@QFiltering documents with SWISH::Filter -------------------------------------- Swish-e knows only how to parse HTML, XML, and text files. Other file types may be indexed with the help of filters. SWISH::Filter is a Perl module designed to make converting documents from one type of content to another type of content easy. It's uses a plug-in type of system where new filters can be added with little effort. SWISH::Filter (and associated plug-in filter modules) do not normally do the actual filtering. This system provides only an interface to the programs that do the filtering. For example, the Swish-e distribution includes a filter plug-in called SWISH::Filters::Pdf2HTML. For this filter to work you must install the xpdf package that includes the pdftotext and pdfinfo programs. SWISH::Filters::Pdf2HTML only provides a unified interface to this programs. The included program F will use SWISH::Filter by default. This means that installing the programs that do the filter is all that is needed to start filtering documents. For example, installing the xpdf package will enable indexing of PDF file when spidering. The filter modules are in the $libexecdir/perl directory. Running swish-e -h will list the setting for $libexecdir, but is typically /usr/local/lib/swish-e if swish-e was built from source, or /usr/lib/swish-e if installed as a package. On Window $libexecdir will be set at installation time. Note that $libexecdir/perl is not normally part of Perl's @INC array. So to read documenation on a specific filter you will need to either specify the full path to the filter or set PERL5LIB. For example: export PERL5LIB=/usr/local/lib/swish-e/perl perldoc SWISH::Filter Documentation for SWISH::Filter can also be found in the html directory and at http://swish-e.org. Swish-e has another filter system. The FileFilter directive that can be used to filter documents through an external program while indexing. That system requires a separate filter setup for each type of document. See the SWISH-CONFIG page for information on that type of filtering. Testing SWISH::Filter --------------------- The program swish-filter-test in installed by default (in the same location as the swish-e binary). This program can be used to test SWISH::Filter. For example, run the command: $ swish-filter-test foo.pdf foo.txt Document foo.pdf was filtered. Document: foo.pdf Content-Type: text/html (initial was application/pdf) Parser type: HTML* Document foo.txt was not filtered. Document: foo.txt Content-Type: text/plain (initial was text/plain) Parser type: TXT* Run the command $ swish-filter-test -man for documentation. Current filters distributed with Swish-e: ----------------------------------------- All of these filters require installation of helper programs and/or Perl modules. See the individual module's documentation for dependencies. SWISH::Filters::Doc2txt - converts MS Word documents to text SWISH::Filters::Pdf2HTML - converts PDF files to HTML with info tags as metanames SWISH::Filters::ID3toHTML - extracts out ID3 (v1 and v2) tags from MP3 files SWISH::Filters::XLtoHTML - converts MS Excel to HTML Filters that depend on Perl modules that are not installed will not load. Setting the environment variable FILTER_DEBUG may report helpful errors when using filters. See perldoc SWISH::Filter for instructions on creating filters. 0#[swish-e.filters.SWISH]Filter_pm.inFCF?r{|2CC>package SWISH::Filter; use 5.005; use strict; use File::Basename; #use MIME::Types; # require below use Carp; use FindBin; # for locating libexecdir (mostly under windows) use vars qw/ $VERSION %extra_methods/; $VERSION = '0.02'; # Define the available parameters %extra_methods = map {$_ => 1} qw/name user_data /; # Map content types to swish-e parsers. my %swish_parser_types = ( 'text/html' => 'HTML*', 'text/xml' => 'XML*', 'text/plain' => 'TXT*', ); # For testing only if ( $0 =~ 'Filter.pm' && @ARGV >= 2 && shift =~ /^test/i) { die "Please use the 'swish-filter-test' program.\n"; } =head1 NAME SWISH::Filter - Perl extension for filtering documents with Swish-e =head1 SYNOPSIS use SWISH::Filter; # load available filters into memory my $filter = SWISH::Filter->new; # convert a document my $doc = $filter->convert( document => \$scalar_ref, # path or ref to a doc content_type => $content_type, # content type if doc reference name => $real_path, # optional name for this file (useful for debugging) user_data => $whatever, # optional data to make available to filters ); return unless $doc; # empty doc, zero size, or no filters installed # Was the document converted by a filter? my $was_filtered = $doc->was_filtered; # Skip if the file is not text return if $doc->is_binary; # Print out the doc my $doc_ref = $doc->fetch_doc; print $$doc_ref; # Fetch the final content type of the document my $content_type = $doc->content_type; # Fetch swish-e parser type (TXT*, XML*, HTML*, or undefined) my $doc_type = $doc->swish_parser_type; =head1 DESCRIPTION SWISH::Filter provides a unified way to convert documents into a type that swish-e can index. Individual filters are installed as separate perl modules. For example, there might be a filter that converts from PDF format to HTML format. Note that this is just a framework for filtering documents. Additional helper programs or Perl module may need to be installed to use SWISH::Filter to filter documents. For example, to filter PDF documents you must install the Xpdf package. The filters are automatically loaded when Cnew()> is called. Filters define a type and priority that determines the processing order of the filter. Filters are processed in this sort order until a filter accepts the document for filtering. The filter uses the document's content type to determine if the filter should handle the current document. The individual filters are not designed to be used as separate modules. All access to the filters is through this SWISH::Filter module. Normally, once a document is filtered processing stops. Some filters can filter the document yet set a flag saying that filtering should continue (for example a filter that uncompresses a MS Word document before passing on to the filter that converts from MS Word to text). All this should be transparent to the end user. The idea of SWISH::Filter is that new filters can be created, and then downloaded and installed to provide new filtering capabilities. For example, if you needed to index MS Excel documents you might be able to download a filter from the Swish-e site and magically next time you run indexing MS Excel docs would be indexed. The SWISH::Filter setup can be used with -S prog or -S http. It works best with the -S prog method because the filter modules only need to be loaded and compiled one time. The -S prog program F will automatically use SWISH::Filter when spidering with default settings (using "default" as the first parameter to spider.pl). The -S http indexing method uses a Perl helper script called F. F has been updated to work with SWISH::Filter, but (unlike spider.pl) does not contain a "use lib" line to point to the location of SWISH::Filter. This means that by default F will B use SWISH::Filter for filtering. The reason for this is because F runs for every URL fetched, and loading the Filters for each document can be slow. The recommended way of spidering is using -S prog with spider.pl, but if -S http is desired the way to enable SWISH::Filter is to set PERL5LIB before running swish so that F will be able to locate the SWISH::Filter module. Here's one way to set the PERL5LIB with the bash shell: $ export PERL5LIB=`swish-filter-test -path` =head1 METHODS =over 4 =item $filter = SWISH::Filter->new() This creates a SWISH::Filter object. You may pass in options as a list or a hash reference. =back =head2 SWISH::Filter->new Options There is currently only one option that can be passed in to new(): =over 4 =item ignore_filters Pass in a reference to a list of filter names to ignore. For example, if you have two filters installed "Pdf2HTML" and "Pdf2XML" and want to avoid using "Pdf2XML": my $filter = SWISH::Filter->new( ignore_filters => ['Pdf2XML']; =cut sub new { my $class = shift; $class = ref( $class ) || $class; my %attr = ref $_[0] ? %{$_[0]} : @_ if @_; my $self = bless {}, $class; $self->{skip_filters} = {}; $self->ignore_filters( delete $attr{ignore_filters} ) if $attr{ignore_filters}; warn "Unknown SWISH::Filter->new() config setting '$_'\n" for keys %attr; $self->get_filter_list; eval { require MIME::Types }; if ( $@ ) { $class->mywarn( "Failed to load MIME::Types\n$@\nInstall MIME::Types for more complete MIME support"); # handle the lookup for a small number of types locally $self->{mimetypes} = $self; } else { $self->{mimetypes} = MIME::Types->new; } return $self; } # Here's some common mime types my %mime_types = ( doc => 'application/msword', pdf => 'application/pdf', html => 'text/html', htm => 'text/html', txt => 'text/plain', text => 'text/plain', xml => 'text/xml', mp3 => 'audio/mpeg', ); sub mimeTypeOf { my ( $self, $file ) = @_; $file =~ s/.*\.//; return $mime_types{$file} || undef; } sub ignore_filters { my ( $self, $filters ) = @_; unless ( $filters ) { return unless $self->{ignore_filter_list}; return @{$self->{ignore_filter_list}}; } @{$self->{ignore_filter_list}} = @$filters; # create lookup hash for filters to skip $self->{skip_filters} = map { $_, 1 } @$filters; } =item $filtered = $filter->filter(); B: Use the convert() method instead. See $swish->convert for options. Returns true if the document was converted. =cut sub filter { my $self = shift; # Reset parameters stored locally delete $self->{doc_ref}; delete $self->{doc_type}; # html|txt|xml delete $self->{original_content_type}; $self->{content_type} = ''; # now call the convert method my $doc_object = $self->convert( @_ ); return unless $doc_object; # Save the reference to the doc (filtered or not) # to make it easy for the caller to access # may read doc off disk $self->{doc_ref} = $doc_object->fetch_doc_reference; $self->{content_type} = $doc_object->content_type; # Return true if any filters were used return $doc_object->was_filtered; } =item $doc_object = $filter->convert(); This method filters a document. Returns an object of the class SWISH::Filter::Document or undefined if passed in an empty document, a filename that cannot be read off disk, or if no filters have been loaded. Methods in SWISH::Filter::Document Methods below can be called on the object to, for example, check if the document was filtered and to fetch the document content (filtered or not). You must pass in a hash (or hash reference) of parameters to the convert() method. The possible parameters are: =over 8 =item document This can be either a path to a file, or a scalar reference to a document in memory. This is required. =item content_type The MIME type of the document. This is only required when passing in a scalar reference to a document is passed. The content type string is what the filters use to match a document type. When passing in a file name and C is not set, then the content type will be determined from the file's extension by using the MIME::Types Perl module (available on CPAN). =item name Optional name to pass in to filters that will be used in error and warning messages. =item user_data Optional data structure that all filters may access. This can be fetched in a filter by: my $user_data = $doc_object->user_data; And used in the filter as: if ( ref $user_data && $user_data->{pdf2html}{title} ) { ... } It's up to the filter author to use a unique first-level hash key for a given filter. =back Example of using the convert() method: $doc_object = $filter->convert( document => $doc_ref, content-type => 'application/pdf', ); =cut sub convert { my $self = shift; my %attr = ref $_[0] ? %{$_[0]} : @_ if @_; # Any filters? return unless $self->{filters}; my $doc = delete $attr{document}; die "Failed to supply document attribute 'document' when calling filter()\n" unless $doc; my $content_type = delete $attr{content_type}; # Allow a reference to a file name (where is this used??) if ( ref $content_type ) { my $type = $self->decode_content_type( $$content_type ); unless ( $type ) { warn "Failed to set content type for file reference '$$content_type'\n"; return; } $content_type = $type; } if ( ref $doc ) { die "Must supply a content type when passing in a reference to a document\n" unless $content_type; } else { $content_type ||= $self->decode_content_type( $doc ); unless ( $content_type ) { warn "Failed to set content type for document '$doc'\n"; return; } $attr{name} ||= $doc; } $self->mywarn("\n>> Starting to process new document: $content_type"); # Deprecated $self->{original_content_type} = $content_type; ## Create a new document object my $doc_object = SWISH::Filter::document->new( $doc, $content_type ); return unless $doc_object; # fails on empty doc or doc not readable local $SIG{__DIE__}; local $SIG{__WARN__}; # Look for left over config settings that we do not know about for ( keys %extra_methods ) { next unless $attr{$_}; my $method = "set_" . $_; $doc_object->$method(delete $attr{$_}); # if given a name then use that in error messages if ( $_ eq 'name' ) { $SIG{__DIE__} = sub { die "$$ Error- ", $doc_object->name, ": ", @_ }; $SIG{__WARN__} = sub { warn "$$ Warning - ", $doc_object->name, ": ", @_ }; } } warn "Unknown filter config setting '$_'\n" for keys %attr; # Now run through the filters my @filter_set = @{$self->{filters}}; my @cur_filters; my $done; for my $filter ( @filter_set ) { if ( $done ) { push @cur_filters, $filter; next; } $doc_object->continue( 0 ); # reset just in case a non-filtering filter set this $self->mywarn(" ++Checking filter [$filter] for $content_type" ); my $start_content_type = $doc_object->content_type; my $filtered_doc; eval { local $SIG{__DIE__}; $filtered_doc = $filter->filter($doc_object); }; if ( $@ ) { $self->mywarn("Problems with filter '$filter'. Filter disabled:\n -> $@"); next; } $self->mywarn(" ++ $content_type " . ($filtered_doc ? '*WAS*' : 'was not') . " filtered by $filter\n"); # save the working filters in this list push @cur_filters, $filter; if ( $filtered_doc ) { # either a file name or a reference to the doc # Track chain of filters push @{$doc_object->{filters_used}}, { name => $filter, start_content_type => $start_content_type, end_content_type => $doc_object->content_type, }; $doc_object->cur_doc($filtered_doc); # and save it (filename or reference) # All done? $done++ unless $doc_object->continue( 0 ); } } # Replace the list of filters with the current working ones $self->{filters} = \@cur_filters; $doc_object->dump_filters_used if $ENV{FILTER_DEBUG}; return $doc_object; } # deprecated sub original_content_type { my $self = shift; return $self->{original_content_type}; } =item $doc_ref = $filter->fetch_doc; B: Use $doc->fetch_doc instead. Returns a reference to a scalar that contains the document passed in. If the file is on disk it will be read from disk into memory. Deprecated example: (don't use) $filtered = $filter->filter( $doc_ref, 'application/pdf' ); if ( $filtered ) { $doc_ref = $filter->fetch_doc; print $$doc_ref; } =cut sub fetch_doc { my ( $self ) = @_; return $self->{doc_ref} || undef; } =item $type = $filter->content_type B Returns the content type of the document after filtering. Use $doc->content_type instead. =cut sub content_type { return $_[0]->{content_type}; } =item $type = $filter->swish_parser_type B use $doc->swish_parser_type instead. Returns the swish parser type for the document, or undefined. For example, in a -S prog program you can set the parser that swish-e will use: if ( my $type = $filter->swish_parser_type ) { print "Document-Type: $type\n"; } =cut # Deprecated as a SWISH::Filter method, but not as a SWISH::Filter::Document method -- leave sub swish_parser_type { my $self = shift; my $content_type = $self->content_type || return; for ( keys %swish_parser_types ) { return $swish_parser_types{$_} if $content_type =~ /^\Q$_/; } return; } =item $self->mywarn() Internal function used for writing warning messages to STDERR if $ENV{FILTER_DEBUG} is set. Set the environment variable FILTER_DEBUG before running to see the verbose warning messages. =cut sub mywarn { my $self = shift; print STDERR @_,"\n" if $ENV{FILTER_DEBUG}; } =item $path = $self->find_binary( $prog ); Use in a filter's new() method to test for a necesary program located in $PATH. Returns the path to the program or undefined if not found or does not pass the -x file test. =cut use Config; my @path_segments; sub find_binary { my ( $self, $prog ) = @_; unless ( @path_segments ) { my $path_sep = $Config{path_sep} || ':'; @path_segments = split /\Q$path_sep/, $ENV{PATH}; if ( my $libexecdir = get_libexec() ) { push @path_segments, $libexecdir; } } $self->mywarn("Find path of [$prog] in " . join ':', @path_segments); for ( @path_segments ) { my $path = "$_/$prog"; # For buggy Windows98 that accepts forward slashes if the filename isn't too long $path =~ s[/][\\]g if $^O =~ /Win32/; if ( -x $path ) { $self->mywarn(" * Found program at: [$path]\n"); return $path; } $self->mywarn(" Not found at path [$path]" ); # ok, try Windows extenstions if ( $^O =~ /Win32/ ) { for my $extension ( qw/ exe bat / ) { if ( -x "$path.$extension" ) { $self->mywarn(" * Found program at: [$path.>$extension]\n"); return "$path.$extension"; } $self->mywarn(" Not found at path [$path.$extension]" ); } } } return; } # Try and return libexecdir in case programs are installed there (the case with Windows) # Assumes that we are running from libexecdir or bindir # The other option under Windows would be to fetch libexecdir from the Windows registry, # but that could break if a new (another) swish install was done since the registry # would then point to the new install location. sub get_libexec { return '@@mylibexecdir@@'; # the below isn't robust, so set at install time return unless $FindBin::Bin; # Look for something we expect in libexecdir. # Are we in $libexecdir already (like with swishspider or spider.pl) return $FindBin::Bin if -e "$FindBin::Bin/spider.pl"; # Are we in $prefix/bin? (swish-filter-test) return "$FindBin::Bin/../lib/swish-e" if -e "$FindBin::Bin/../lib/swish-e/spider.pl"; return; } =item $bool = $self->use_modules( @module_list ); Attempts to load each of the module listed and calls its import() method. Use to test and load required modules within a filter without aborting. return unless $self->use_modules( qw/ Spreadsheet::ParseExcel HTML::Entities / ); A warning message is displayed if the FILTER_DEBUG environment variable is true. =back =cut sub use_modules { my ( $self, @modules ) = @_; for my $mod ( @modules ) { $self->mywarn("trying to load [$mod]"); eval { eval "require $mod" or die "$!\n" }; if ( $@ ) { my $caller = caller(); $self->mywarn("Can not use Filter $caller -- need to install $mod: $@"); return; } $self->mywarn(" ** Loaded $mod **"); # Export back to caller $mod->export_to_level( 1 ); } return 1; } # Fetches the list of filters installed sub get_filter_list { my ( $self ) = @_; my @filters; # Look for filters to load for my $inc_path ( @INC ) { my $cur_path = "$inc_path/SWISH/Filters"; next unless opendir( DIR, $cur_path ); while ( my $file = readdir( DIR ) ) { my $full_path = "$cur_path/$file"; next unless -f $full_path; my ($base,$path,$suffix) = fileparse( $full_path,"\.pm"); next unless $suffix eq '.pm'; # Should this filter be skipped? next if $self->{skip_filters}{$base}; $self->mywarn("\n>> Loading filter: [SWISH/Filters/${base}$suffix]"); eval { require "SWISH/Filters/${base}$suffix" }; if ( $@ ) { if ( $ENV{FILTER_DEBUG} ) { print STDERR "Failed to load 'SWISH/Filters/${base}$suffix'\n", '-+' x 40, "\n", $@, '-+' x 40, "\n"; } next; } my $package = "SWISH::Filters::" . $base; my $filter = $package->new( name => $full_path ); $self->mywarn(":-( Filter [SWISH/Filters/${base}$suffix] not loaded\n") unless $filter; next unless $filter; # may not get installed push @filters, $filter; } } unless ( @filters ) { warn "No SWISH filters found\n"; return; } # Now sort the filters in order. $self->{filters} = [ sort { $a->type <=> $b->type || $a->priority <=> $b->priority } @filters ]; } # Set default method for name() type() and priority() sub name { $_[0]->{name} || "Filter did not set a name" } sub type { 2 } sub priority{ 50 } sub decode_content_type { my ( $self, $file ) = @_; return unless $file; return ($self->{mimetypes})->mimeTypeOf($file); } #========================================================================= package SWISH::Filter::document; use strict; use File::Temp; use Symbol; use vars '$AUTOLOAD', '@ISA'; @ISA = 'SWISH::Filter'; =head1 SWISH::Filter::Document Methods These methods are available to Filter authors, and also provide access to the document after calling the convert() method to end-users of SWISH::Filter. End users of SWISH::Filter will use a subset of these methods. Mostly: $doc_object->fetch_doc # and alias for fetch_document_reference() $doc_object->was_filtered # true the document was filtered $doc_object->content_type # document's current content type (mime type) $doc_object->swish_parser_type # returns a parser type to use with swish-e -S prog method $doc_object->is_binary # returns $content_type !~ m[^text/]; These methods are also available to the individual filter modules. The filter's "filter" function is also passed a SWISH::Filter::Document object. Method calls may be made on this object to check the document's current content type, or to fetch the document as either a file name or a reference to a scalar containing the document content. =cut # Returns a new SWISH::Filter::Document object # or null if just can't process the document sub new { my ( $class, $doc, $content_type ) = @_; return unless $doc && $content_type; my $self = bless {}, $class; if ( ref $doc ) { unless ( length $$doc ) { warn "Empty document passed to filter\n"; return; } die "Must supply a content type when passing in a reference to a document\n" unless $content_type; } else { unless ( -r $doc ) { warn "Filter unable to read doc '$doc': $!\n"; return; } } $self->set_content_type( $content_type ); $self->{cur_doc} = $doc; return $self; } sub DESTROY { my $self = shift; $self->remove_temp_file; } sub cur_doc { my ( $self, $doc_ref ) = @_; $self->{cur_doc} = $doc_ref if $doc_ref; return $self->{cur_doc}; } sub remove_temp_file { my $self = shift; unlink delete $self->{temp_file} if $self->{temp_file}; } # Used for tracking what filter(s) were used in processing sub filters_used { my $self = shift; return $self->{filters_used} || undef; } sub dump_filters_used { my $self = shift; my $used = $self->filters_used; local $SIG{__WARN__}; warn "\nFinal Content type for ", $self->name, " is ", $self->content_type, "\n"; unless ( $used ) { warn " *No filters were used\n"; return; } warn " >Filter $_->{name} converted from [$_->{start_content_type}] to [$_->{end_content_type}]\n" for @$used; } =head2 Methods used by end-users and filter authors =over 4 =item $doc_ref = $doc_object->fetch_doc_reference; Returns a scalar reference to the document. This can be used when the filter can operate on the document in memory (or if an external program expects the input to be from standard input). If the file is currently on disk then it will be read into memory. If the file was stored in a temporary file on disk the file will be deleted once read into memory. The file will be read in binmode if $doc->is_binary is true. Note that $doc_object->fetch_doc is an alias. =cut sub fetch_doc_reference { my ( $self ) = @_; return ref $self->{cur_doc} # just $self->read_file should work ? $self->{cur_doc} : $self->read_file; } # here's an alias for fetching a document reference. *fetch_doc = *fetch_doc_reference; =item $was_filtered = $doc_object->was_filtered Returns true if some filter processed the document =cut sub was_filtered { my $self = shift; return $self->filters_used ? 1 : 0; } =item $content_type = $doc_object->content_type; Fetches the current content type for the document. Example: return unless $filter->content_type =~ m!application/pdf!; =cut sub content_type { return $_[0]->{content_type} || ''; } =item $doc_object->is_binary Returns true if the document's content-type does not match "text/". =back =cut sub is_binary { my $self = shift; return $self->content_type !~ m[^text]; } =head2 Methods used by filter authors =over 4 =item $file_name = $doc_object->fetch_filename; Returns a path to the document as stored on disk. This name can be passed to external programs (e.g. catdoc) that expect input as a file name. If the document is currently in memory then a temporary file will be created. Do not expect the file name passed to be the real path of the document. The file will be written in binmode if $doc->is_binary is true. This method is not normally used by end-users of SWISH::Filter. =cut # This will create a tempoary file if file is in memory sub fetch_filename { my ( $self ) = @_; return ref $self->{cur_doc} ? $self->create_temp_file : $self->{cur_doc}; } =item $doc_object->set_continue; Processing will continue to the next filter if this is set to a true value. This should be set for filters that change encodings or uncompress documents. =cut sub set_continue { my ( $self ) = @_; return $self->continue(1); } sub continue { my ( $self, $continue ) = @_; my $old = $self->{continue} || 0; $self->{continue}++ if $continue; return $old; } =item $doc_object->set_content_type( $type ); Sets the content type for a document. =cut sub set_content_type { my ( $self, $type ) = @_; die "Failed to pass in new content type\n" unless $type; $self->{content_type} = $type; } sub read_file { my $self = shift; my $doc = $self->{cur_doc}; return $doc if ref $doc; my $sym = gensym(); open($sym, "<$doc" ) or die "Failed to open file '$doc': $!"; binmode $sym if $self->is_binary; local $/ = undef; my $content = <$sym>; close $sym; $self->{cur_doc} = \$content; # Remove the temporary file, if one was created. $self->remove_temp_file; return $self->{cur_doc}; } # write file out to a temporary file sub create_temp_file { my $self = shift; my $doc = $self->{cur_doc}; return $doc unless ref $doc; my ( $fh, $file_name ) = File::Temp::tempfile(); # assume binmode if we need to filter... binmode $fh if $self->is_binary; print $fh $$doc or die "Failed to write to '$file_name': $!"; close $fh or die "Failed to close '$file_name' $!"; $self->{cur_doc} = $file_name; $self->{temp_file} = $file_name; return $file_name; } =item $doc_object->name Fetches the name of the current file. This is useful for printing out the name of the file in an error message. This is the name passed in to the SWISH::Filter->convert method. It is optional and thus may not always be set. my $name = $doc_object->name || 'Unknown name'; warn "File '$name': failed to convert -- file may be corrupt\n"; =item $doc_object->user_data Fetches the the user_data passed in to the filter. This can be any data or data structure passed into SWISH::Filter->new. This is an easy way to pass special parameters into your filters. Example: my $data = $doc_object->user_data; # see if a choice for the was passed in if ( ref $data eq 'HASH' && $data->{pdf2html}{title_field} { ... ... } =cut sub AUTOLOAD { my ( $self, $newval ) = @_; no strict 'refs'; if ($AUTOLOAD =~ /.*::set_(\w+)/ && $SWISH::Filter::extra_methods{$1}) { my $attr_name=$1; *{$AUTOLOAD} = sub { $_[0]->{$attr_name} = $_[1]; return }; return $self->{$attr_name} = $newval; } elsif ($AUTOLOAD =~ /.*::(\w+)/ && $SWISH::Filter::extra_methods{$1}) { my $attr_name=$1; *{$AUTOLOAD} = sub { return $_[0]->{$attr_name} }; return $self->{$attr_name}; } die "No such method: $AUTOLOAD\n"; } # These methods really belong in SWISH::Filter, but geneally don't make sense without # a SWISH::Filter::Document object. =item $doc_ref = $filter->run_program( $program, @args ); Runs $program with @args. Must pass in @args. Under Windows calls IPC::Open2, which may pass data through the shell. Double-quotes are escaped (backslashed) and each parameter is wrapped in double-quotes. On other platforms a fork and exec is used to avoid passing any data through the shell. Returns a reference to a scalar containing the output from your program, or dies. This method is intended to read output from a program that converts one format into text. The output is read back in text mode -- on systems like Windows this means \r\n (CRLF) will be convertet to \n. =cut sub run_program { my $self = shift; die "No arguments passed to run_program()\n" unless @_; die "Must pass arguments to program '$_[0]'\n" unless @_ > 1; my $fh = $^O =~ /Win32/i || $^O =~ /VMS/i ? $self->windows_fork( @_ ) : $self->real_fork( @_ ); local $/ = undef; return <$fh>; } #================================================================== # Run swish-e by forking # use Symbol; sub real_fork { my ( $self, @args ) = @_; # Run swish my $fh = gensym; my $pid = open( $fh, '-|' ); die "Failed to fork: $!\n" unless defined $pid; return $fh if $pid; delete $self->{temp_file}; # in child, so don't want to delete on destroy. exec @args or exit; # die "Failed to exec '$args[0]': $!\n"; } #===================================================================================== # Need # sub windows_fork { my ( $self, @args ) = @_; require IPC::Open2; my ( $rdrfh, $wtrfh ); my @command = map { s/"/\\"/g; qq["$_"] } @args; my $pid = IPC::Open2::open2($rdrfh, $wtrfh, @command ); # IPC::Open3 uses binmode for some reason (5.6.1) # Assume that the output from the program will be in text # Maybe an invalid assumption if running through a binary filter binmode $rdrfh, ':crlf'; # perhpaps: unless delete $self->{binary_output}; $self->{pid} = $pid; return $rdrfh; } =back =cut 1; __END__ =head1 WRITING FILTERS Filters are standard perl modules that are installed into the SWISH::Filters name space. Filters are not complicated -- see the existing filters for examples. Filters are linked together in a chain, and have a type and priority that set the order of the filter in the chain. Filters check the content type of the document to see if they should process the document. If the filter processes the document it returns either a file name or a reference to a scalar. Normally a reference to a scalar of the converted document should be returned. If the filter does not process the document then it returns undef and the next filter in the chain has a chance to process the document. If a filter calls die then the filter is removed from the chain and will not be called again I<during the same run>. Calling die when running with -S http or -S fs has no effect since the program is run once per document. Once a filter returns something other than undef no more filters will be called. If the filter calls $filter->set_continue then processing will continue as if the file was not filtered. For example, a filter can uncompress data and then set $filter->set_continue and let other filters process the document. This is the list of methods the filter should or may define (as specificed): =over 4 =item new() * required * This method returns either an object which provides access to the filter, or undefined if the filter is not to be used. The new() method is a good place to check for required modules or helper programs. Returning undefined prevents the filter from being included in the filter chain. =item filter() * required * This is the function that does the work of converting a document from one content type to another. =it �em type() Returns a number from 1 to 10. Filters are sorted (for processing in a specific order) and this number is simply the primary key used in sorting. If not specified the filter's type used for sorting is 2. =item priority() Returns a number from 1 to 10. Filters are sorted (for processing in a specific order) and this number is simply the primary key used in sorting. If not specified the filter's priority is 50. =back Again, the point of the type() and priority() methods is to allow setting the sort order of the filters. Useful if you have two filters that for filtering similar content-types, but prefer to use one over the other. Here's a module to index MS Word documents using the program "catdoc": package SWISH::Filters::Doc2txt; use vars qw/ @ISA $VERSION /; $VERSION = '0.01'; @ISA = ('SWISH::Filter'); sub new { my ( $pack, %params ) = @_; my $self = bless { name => $params{name} || $pack, }, $pack; # check for helpers for my $prog ( qw/ catdoc / ) { my $path = $SELF->find_binary( $prog ); unless ( $path ) { $self->mywarn("Can not use Filter $pack -- need to install $prog"); return; } $self->{$prog} = $path; } return $self; } sub filter { my ( $self, $document ) = @_; # Do we care about this document? return unless $document->content_type =~ m!application/msword!; # We need a file name to pass to the catdoc program my $file = $document->fetch_filename; # Grab output from running program my $content = $document->run_program( $self->{catdoc}, $file ); return unless $content; # update the document's content type $document->set_content_type( 'text/plain' ); # return the document return \$content; } 1; =head1 TESTING Filters can be tested with the F<swish-filter-test> program. Run: swish-filter-test -man for documentation. =head1 SUPPORT Please contact the Swish-e discussion list. http://swish-e.org =head1 Bugs, todo items, and other notes I wonder if the filters shouldn't just register the content types they handle instead of checking the content type. Would want to be able to register regular expressions. =head1 AUTHOR Bill Moseley =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut ����������������������������0)[swish-e.filters.SWISH.Filters]Doc2txt.pm#�������������������#�������}����������ܫ2��u�����������������������������������������������������������������������������������������������������������package SWISH::Filters::Doc2txt; use vars qw/ @ISA $VERSION /; $VERSION = '0.01'; @ISA = ('SWISH::Filter'); sub new { my ( $pack, %params ) = @_; my $self = bless { name => $params{name} || $pack, }, $pack; # check for helpers for my $prog ( qw/ catdoc / ) { my $path = $self->find_binary( $prog ); unless ( $path ) { $self->mywarn("Can not use Filter $pack -- need to install $prog"); return; } $self->{$prog} = $path; } return $self; } sub name { $_->{name} || 'unknown' }; sub filter { my ( $self, $filter) = @_; # Do we care about this document? return unless $filter->content_type =~ m!application/msword!; # We need a file name to pass to the catdoc program my $file = $filter->fetch_filename; # Grab output from running program my $content = $filter->run_program( $self->{catdoc}, $file ); return unless $content; # update the document's content type $filter->set_content_type( 'text/plain' ); # return the document return \$content; } 1; __END__ =head1 NAME SWISH::Filters::Doc2txt - Perl extension for filtering MSWord documents with Swish-e =head1 DESCRIPTION This is a plug-in module that uses the "catdoc" program to convert MS Word documents to text for indexing by Swish-e. "catdoc" can be downloaded from: http://www.ice.ru/~vitus/catdoc/ver-0.9.html The program "catdoc" must be installed and your PATH before running Swish-e. =head1 BUGS This filter does not specify input or output character encodings. This will change in the future to all use of the user_data to set the encoding. A minor optimization during spidering (i.e. when docs are in memory instead of on disk) would be to use open2() call to let catdoc read from stdin instead of from a file. =head1 AUTHOR Bill Moseley =head1 SEE ALSO L<SWISH::Filter> ���������������������������������������������������������������������������������������������������������������������������������������0+[swish-e.filters.SWISH.Filters]ID3toHTML.pm#���������������� ���#�������v�����������[ޫ2��u�������������������� ��������������� ������������������������������������������������������������������������package SWISH::Filters::ID3toHTML; use strict; #use MP3::Tag; #use HTML::Entities; use vars qw/ @ISA $VERSION /; $VERSION = '0.03'; @ISA = ('SWISH::Filter'); # Convert known ID3v2 tags to metanames. my %id3v2_tags = ( TIT2 => 'song', # 4.2.1 TIT2 Title/songname/content description TYER => 'year', # 4.2.1 TYER Year TRCK => 'track', # 4.2.1 TRCK Track number/Position in set TCOP => 'copyright', # 4.2.1 TCOP Copyright message # * WinAMP seems to prepend a (C) to this value. TPE1 => 'artist', # 4.2.1 TPE1 Lead performer(s)/Soloist(s) TALB => 'album', # 4.2.1 TALB Album/Movie/Show title TENC => 'encoded', # 4.2.1 TENC Encoded by TOPE => 'artist_original', # 4.2.1 TOPE Original artist(s)/performer(s) TCOM => 'composer', # 4.2.1 TCOM Composer TCON => 'genre', # 4.2.1 TCON Content type # 4.3.2 WXXX User defined URL link frame WXXX_URL => 'url', # * URL => http://URL/HERE WXXX_Description => 'url_description', # * Description => WinAMP provides no description # 4.11 COMM Comments COMM_Text => 'comment', # * Text => COMMENT COMM_Language => 'comment_lang', # * Language => eng COMM_short => 'comment_short' # * short => WinAMP provides no short ); sub new { my ( $pack, %params ) = @_; my $self = bless { name => $params{name} || $pack, }, $pack; return unless $self->use_modules( qw/ MP3::Tag HTML::Entities / ); return $self; } sub name { $_->{name} || 'unknown' }; sub filter { my ( $self, $filter) = @_; # Do we care about this document? return unless $filter->content_type =~ m!audio/mpeg!; # We need a file name to pass to the conversion function my $file = $filter->fetch_filename; my $content_ref = get_id3_content_ref( $file ); return unless $content_ref; # update the document's content type $filter->set_content_type( 'text/html' ); # If filtered must return either a reference to the doc or a pathname. return \$content_ref; } # ======================================================================= sub get_id3_content_ref { my $filename = shift; my $mp3 = MP3::Tag->new($filename); # return unless we have a file with tags return format_empty_doc( $filename ) unless ref $mp3 && $mp3->get_tags(); # Here we will store all of the tag info my %metadata; # Convert tags to metadata giving ID3v2 precedence get_id3v1_tags($mp3, \%metadata); get_id3v2_tags($mp3, \%metadata); # will replace any v1 tags that are the same # HTML or bust return %metadata ? format_as_html( \%metadata ) : format_empty_doc( $filename ); } sub get_id3v1_tags { my ($mp3, $metadata) = @_; return unless exists $mp3->{ID3v1}; # Read all ID3v1 tags into metadata hash my $id3v1 = $mp3->{ID3v1}; for ( qw/ artist album comment genre song track year / ) { $metadata->{$_} = $id3v1->$_ if $id3v1->$_; } } sub get_id3v2_tags { my ($mp3, $metadata) = @_; # Do we even have an ID3 v2 tag? return unless exists $mp3->{ID3v2}; # Get the tag and a hash of frame ids. my $id3v2 = $mp3->{ID3v2}; # keys are 4-character-codes and values are the long names my $frameIDs_hash = $id3v2->get_frame_ids; # Go through each frame and translate it to usable metadata foreach my $frame (keys %$frameIDs_hash) { my ($info, $name) = $id3v2->get_frame($frame); # We have a user defined frame if (ref $info) { # $$$ We really only want COMM and WXXX while(my ($key,$val)=each %$info) { next if $key =~ /^_/ || !$val; # leading underscore means binary data # Concatenate frame and key for our lookup hash my $code = ${frame} . "_" .${key}; # fails when frame is appended with digits (e.g. "COMM01"); my $metaname = $id3v2_tags{$code} || $code; # Assign value if not empty and has a key $metadata->{$metaname} = encode_entities($val) if $val; } } # We have a simple frame else { my $metaname = $id3v2_tags{$frame} || $frame || 'blank frame'; $metadata->{$metaname} = encode_entities($info) unless !$info; } } } sub format_as_html { my $metadata = shift; my $title = $metadata->{song} || $metadata->{album} || $metadata->{artist} || 'No Title'; my $metas = join "\n", map { qq[<meta name="$_" content="$metadata->{$_}">] } sort keys %$metadata; my $url = ''; if ( $metadata->{url} ) { my $desc = $metadata->{url_description} || $metadata->{url}; $url = qq[<p><a href="$metadata->{url}">$desc</a>]; } my $comment = ''; if ( $metadata->{comment} ) { my $lang = get_iso_lang($metadata->{comment_lang} || 'en'); # wrong assuming "en"? $comment = qq[<p name="comment" lang="$lang">$metadata->{comment}</p>]; } return <<EOF; <html> <head> <title>$title $metas $url $comment EOF } sub format_empty_doc { my $filename = shift; require File::Basename; my $base = File::Basename::basename( $filename, '.mp3' ); return format_as_html( { song => $base, notag => 1 } ); } sub get_iso_lang { my $lang = shift; # Do we need to translate undocumented ID3 Lang codes to ISO? # 4.11.Comments # Language $xx xx xx # * WinAMP may be mistaken for using "eng" instead of an ISO designator return $lang unless $lang == "eng"; return "en"; } 1; __END__ =head1 NAME SWISH::Filters::ID3toHTML - ID3 tag to HTML filter module =head1 DESCRIPTION SWISH::Filters::ID3toHTML translates ID3 tags into HTML metadata for use by the SWISH::Filter module and SWISH-E. Depends on two perl modules: MP3::Tag; HTML::Entities; =head1 SUPPORT Please contact the Swish-e discussion list. http://swish-e.org/ =cut 0*[swish-e.filters.SWISH.Filters]Pdf2HTML.pm##j@߫2upackage SWISH::Filters::Pdf2HTML; use strict; use vars qw/ @ISA $VERSION /; $VERSION = '0.01'; @ISA = ('SWISH::Filter'); sub new { my ( $pack, %params ) = @_; my $self = bless { name => $params{name} || $pack, }, $pack; # check for helpers for my $prog ( qw/ pdftotext pdfinfo / ) { my $path = $self->find_binary( $prog ); unless ( $path ) { $self->mywarn("Can not use Filter $pack -- need to install $prog"); return; } $self->{$prog} = $path; } return $self; } # set sort order for this filter sub name { $_->{name} || 'unknown' }; sub filter { my ( $self, $filter) = @_; return unless $filter->content_type =~ m!application/pdf!; my $user_data = $filter->user_data; my $title_tag = $user_data->{pdf}{title_tag} if ref $user_data eq 'HASH'; my $metadata = $self->get_pdf_headers( $filter ); my $headers = format_metadata( $metadata ); if ( $title_tag && exists $metadata->{ $title_tag } ) { my $title = escapeXML( $metadata->{ $title_tag } ); $headers = "$title\n" . $headers } # Check for encrypted content my $content_ref; # patch provided by Martial Chartoire if ( $metadata->{encrypted} && $metadata->{encrypted} =~ /yes\.*\scopy:no\s\.*/i ) { $content_ref = \''; } else { $content_ref = $self->get_pdf_content_ref( $filter ); } # update the document's content type $filter->set_content_type( 'text/html' ); my $txt = < $headers
$$content_ref
EOF return \$txt; } sub get_pdf_headers { my ($self, $filter ) = @_; # We need a file name to pass to the pdf conversion programs my %metadata; my $headers = $filter->run_program( $self->{pdfinfo}, $filter->fetch_filename ); return \%metadata unless $headers; for (split /\n/, $headers ) { if ( /^\s*([^:]+):\s+(.+)$/ ) { my ( $metaname, $value ) = ( lc( $1 ), $2 ); $metaname =~ tr/ /_/; $metadata{$metaname} = $value; } } return \%metadata; } sub format_metadata { my $metadata = shift; my $metas = join "\n", map { qq['; } sort keys %$metadata; return $metas; } sub get_pdf_content_ref { my ( $self, $filter ) = @_; my $content = escapeXML( $filter->run_program($self->{pdftotext}, $filter->fetch_filename, '-' ) ); return \$content; } # How are URLs printed with pdftotext? sub escapeXML { my $str = shift; return '' unless $str; for ( $str ) { s/&/&/go; s/"/"/go; s//>/go; } return $str; } 1; __END__ =head1 NAME SWISH::Filters::Pdf2HTML - Perl extension for filtering PDF documents with Swish-e =head1 DESCRIPTION This is a plug-in module that uses the xpdf package to convert PDF documents to html for indexing by Swish-e. Any info tags found in the PDF document are created as meta tags. This filter plug-in requires the xpdf package available at: http://www.foolabs.com/xpdf/ You may pass into SWISH::Filter's new method a tag to use as the html if found in the PDF info tags: my %user_data; $user_data{pdf}{title_tag} = 'title'; $was_filtered = $filter->filter( document => $filename, user_data => \%user_data, ); Then if a PDF info tag of "title" is found that will be used as the HTML <title>. =head1 AUTHOR Bill Moseley =head1 SEE ALSO L<SWISH::Filter> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0*[swish-e.filters.SWISH.Filters]XLtoHTML.pm#�������������������#�������!�����������%૿2�!AQ�����������������������������������������������������������������������������������������������������������package SWISH::Filters::XLtoHTML; use strict; # use Spreadsheet::ParseExcel; # use HTML::Entities; use vars qw/ @ISA $VERSION /; $VERSION = '0.01'; @ISA = ('SWISH::Filter'); sub new { my ( $pack, %params ) = @_; my $self = bless { name => $params{name} || $pack, }, $pack; return unless $self->use_modules( qw/ Spreadsheet::ParseExcel HTML::Entities / ); return $self; } sub name { $_->{name} || 'unknown' }; sub filter { my ( $self, $filter) = @_; # Do we care about this document? return unless $filter->content_type =~ m!(application/vnd.ms-excel|application/excel)!; # We need a file name to pass to the conversion function my $file = $filter->fetch_filename; my $content_ref = get_xls_content_ref( $file ) || return; # update the document's content type $filter->set_content_type( 'text/html' ); # If filtered must return either a reference to the doc or a pathname. return \$content_ref; } sub get_xls_content_ref { my $file = shift; my $oExcel = Spreadsheet::ParseExcel->new; return unless $oExcel; my $oBook = $oExcel->Parse($file); my($iR, $iC, $oWkS, $oWkC, $ExcelWorkBook); # Here we gather up all the workbook metadata my $ExcelFilename = encode_entities($oBook->{File}); my $ExcelSheetCount = encode_entities($oBook->{SheetCount}); my $ExcelAuthor = encode_entities($oBook->{Author}) if defined $oBook->{Author}; my $ExcelVersion = encode_entities($oBook->{Version}) if defined $oBook->{Version}; # Name of the first worksheet my $ExcelFirstWorksheetName = encode_entities($oBook->{Worksheet}[0]->{Name}); my $ReturnValue = <<EOF; <html> <head> <title>$ExcelFirstWorksheetName - $ExcelFilename v.$ExcelVersion EOF # Here we collect content from each worksheet for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) { # For each Worksheet do the following $oWkS = $oBook->{Worksheet}[$iSheet]; # Name of the worksheet my $ExcelWorkSheet = "

" . encode_entities($oWkS->{Name}) . "

\n"; $ExcelWorkSheet .= "\n"; for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) { # For each row do the following $ExcelWorkSheet .= "\n"; for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) { # For each cell do the following $oWkC = $oWkS->{Cells}[$iR][$iC]; my $CellData = encode_entities($oWkC->Value) if($oWkC); $ExcelWorkSheet .= "\t\n" if $CellData; } $ExcelWorkSheet .= "\n"; # Our last duty $ExcelWorkBook .= $ExcelWorkSheet; $ExcelWorkSheet = ""; } $ExcelWorkBook .= "
" . $CellData . "
\n"; } $ReturnValue .= < $ExcelWorkBook EOF return $ReturnValue; } __END__ =head1 NAME SWISH::Filters::XLtoHTML - MS Excel to HTML filter module =head1 DESCRIPTION SWISH::Filters::XLtoHTML extracts data from MS Excel spreadsheets for indexing. Depends on two perl modules: Spreadsheet::ParseExcel HTML::Entities; =head1 SUPPORT Please contact the Swish-e discussion list. http://swish-e.org/ =cut 0"[swish-e.filters.SWISH]Makefile.am##ث2ܚsk|perlmoduledir = $(libexecdir)/perl/SWISH perlmodule_SCRIPTS = Filter.pm CLEANFILES = Filter.pm Filter.pm: Filter.pm.in @rm -f Filter.pm @sed \ -e 's,@@mylibexecdir@@,$(libexecdir),' \ $(srcdir)/Filter.pm.in > Filter.pm nobase_perlmodule_SCRIPTS = \ Filters/Doc2txt.pm \ Filters/Pdf2HTML.pm \ Filters/ID3toHTML.pm \ Filters/XLtoHTML.pm EXTRA_DIST = \ Filter.pm.in \ Filters/Doc2txt.pm \ Filters/Pdf2HTML.pm \ Filters/ID3toHTML.pm \ Filters/XLtoHTML.pm 0"[swish-e.filters.SWISH]Makefile.in##^٫2ʢ*# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ perlmoduledir = $(libexecdir)/perl/SWISH perlmodule_SCRIPTS = Filter.pm CLEANFILES = Filter.pm nobase_perlmodule_SCRIPTS = \ Filters/Doc2txt.pm \ Filters/Pdf2HTML.pm \ Filters/ID3toHTML.pm \ Filters/XLtoHTML.pm EXTRA_DIST = \ Filter.pm.in \ Filters/Doc2txt.pm \ Filters/Pdf2HTML.pm \ Filters/ID3toHTML.pm \ Filters/XLtoHTML.pm subdir = filters/SWISH ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = SCRIPTS = $(nobase_perlmodule_SCRIPTS) $(perlmodule_SCRIPTS) DIST_SOURCES = DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign filters/SWISH/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) nobase_perlmoduleSCRIPT_INSTALL = $(install_sh_SCRIPT) install-nobase_perlmoduleSCRIPTS: $(nobase_perlmodule_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(perlmoduledir) @list='$(nobase_perlmodule_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ f=`echo "$$p" | sed 's|[^/]*$$||'`"$$f"; \ echo " $(nobase_perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f"; \ $(nobase_perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f; \ else :; fi; \ done uninstall-nobase_perlmoduleSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(nobase_perlmodule_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ f=`echo "$$p" | sed 's|[^/]*$$||'`"$$f"; \ echo " rm -f $(DESTDIR)$(perlmoduledir)/$$f"; \ rm -f $(DESTDIR)$(perlmoduledir)/$$f; \ done perlmoduleSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-perlmoduleSCRIPTS: $(perlmodule_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(perlmoduledir) @list='$(perlmodule_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f"; \ $(perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f; \ else :; fi; \ done uninstall-perlmoduleSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(perlmodule_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(perlmoduledir)/$$f"; \ rm -f $(DESTDIR)$(perlmoduledir)/$$f; \ done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/Filters @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: $(mkinstalldirs) $(DESTDIR)$(perlmoduledir) $(DESTDIR)$(perlmoduledir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-nobase_perlmoduleSCRIPTS \ install-perlmoduleSCRIPTS install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-nobase_perlmoduleSCRIPTS \ uninstall-perlmoduleSCRIPTS .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-nobase_perlmoduleSCRIPTS \ install-perlmoduleSCRIPTS install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am uninstall-nobase_perlmoduleSCRIPTS \ uninstall-perlmoduleSCRIPTS Filter.pm: Filter.pm.in @rm -f Filter.pm @sed \ -e 's,@@mylibexecdir@@,$(libexecdir),' \ $(srcdir)/Filter.pm.in > Filter.pm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0%[swish-e.filters]swish-filter-test.in##Ipҫ2#ly $ExcelSheetCount = encode_entities($oBook->{SheetCount}); &#!@@perlbinary@@ -w use strict; # This is set to where Swish-e's "make install" installed the helper modules. use lib qw( @@perlmoduledir@@ ); ################################################################################### # # Copyright (C) 2001 Bill Moseley swishscript@hank.org # Program to test the SWISH::Filter module # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version # 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # The above lines must remain at the top of this program # # $Id: swish-filter-test.in,v 1.5 2003/10/02 22:52:53 whmoseley Exp $ # #################################################################################### use Getopt::Long; use SWISH::Filter; use Pod::Usage; use URI; use constant ABORT => 0; use constant DEBUG => 1; use constant INFO => 2; my ( $verbose, $show_content, @file, @url, $help, $man, $quiet, $headers, $path, $depreciated); my $skip_binary = 1; my $lines = 10; my $max_chars = 1000; GetOptions( 'verbose!' => \$verbose, # turn on INFO messages 'content!' => \$show_content, 'quiet' => \$quiet, 'lines=i' => \$lines, 'help|?' => \$help, 'man' => \$man, 'headers' => \$headers, 'skip_binary!' => \$skip_binary, 'path' => \$path, 'depreciated'=> \$depreciated, ) || pod2usage(2); pod2usage( -verbose => 1 ) if $help; pod2usage( -verbose => 2 ) if $man; if ( $path ) { print '@@perlmoduledir@@',"\n"; exit; } pod2usage( -verbose => 0, -message => "Must specify a file or URL", -exitvar => 1, ) unless @ARGV; $ENV{FILTER_DEBUG} = 1 if $verbose; # used by SWISH::Filter msg(INFO, "SWISH::Filter found at [%s]\n", $INC{'SWISH/Filter.pm'} ); my $filter = SWISH::Filter->new; my $return = 0; for my $doc ( @ARGV ) { eval { $depreciated ? process_doc_old( $doc ) : process_doc( $doc ) }; $return = 1 if $@; warn "** $0:\n $@\n" if $@; # always warn on die } exit $return; sub process_doc { my ($file) = @_; my $uri; eval { $uri = URI->new( $file ) }; my %config = !$@ && $uri->scheme ? fetch_url( $file ) : fetch_file( $file); my $doc = $filter->convert( %config, name => $file, ); die "Failed to process document [$file]\n" unless $doc; my $content_type = $doc->content_type || "unknown"; my $parser_type = $doc->swish_parser_type || ''; my $binary = $doc->is_binary; my $msg = $doc->was_filtered ? '' : 'not'; my $name = $doc->name; msg(DEBUG, <filters_used ) { for my $filter ( @$filters_used ) { msg( DEBUG, " >Filter used: $filter->{name} ( $filter->{start_content_type} -> $filter->{end_content_type} )" ); } } if ( !$binary ) { my @doc = split /\n/, substr( ${$doc->fetch_doc}, 0, $max_chars ); $lines = @doc-1 if $lines >= @doc; msg(INFO, join "\n", '-- Output Content Sample --', @doc[0..$lines],'','-- end --','' ); } die "Skipping binary [$file]\n" if $binary && $skip_binary; if ($headers ) { my $len = length ${$doc->fetch_doc}; print "Path-Name: $file\nContent-Length: $len\n"; print "Document-Type: $parser_type\n" if $parser_type; print "\n"; } print ${$doc->fetch_doc} if $show_content; } sub process_doc_old { my ($file) = @_; my $uri; eval { $uri = URI->new( $file ) }; my %config = !$@ && $uri->scheme ? fetch_url( $file ) : fetch_file( $file); my $was_filtered = $filter->filter( %config, name => $file, ); my $content_type = $filter->content_type || "unknown"; my $orig_content_type = $filter->original_content_type || "unknown"; my $parser_type = $filter->swish_parser_type || ''; my $binary = $content_type !~ m[^text/]; my $msg = $was_filtered ? '' : 'not'; msg(DEBUG, <fetch_doc}, 0, $max_chars ); $lines = @doc-1 if $lines >= @doc; msg(INFO, join "\n", '-- Output Content Sample --', @doc[0..$lines],'','-- end --','' ); } die "Skipping binary [$file]\n" if $binary && $skip_binary; if ($headers ) { my $len = length ${$filter->fetch_doc}; print "Path-Name: $file\nContent-Length: $len\n"; print "Document-Type: $parser_type\n" if $parser_type; print "\n"; } print ${$filter->fetch_doc} if $show_content; } sub fetch_file { my $file = shift; # just try to open for error reporting open FH, "<$file" or die "Failed to open '$file': $!\n"; close FH; die "File '$file' has zero size\n" if -z $file; return ( document => $file ); } sub fetch_url { my $url = shift; eval { require LWP::UserAgent }; die "LWP::UserAgent is required to fetch a URL\n$@\n" if $@; my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new('GET', $url ); my $response = $ua->request( $request ); die sprintf "Error while getting '%s'. Server returned %s.", $response->request->uri,$response->status_line unless $response->is_success; my $content = $response->content; my $content_type = $response->content_type; return ( document => \$content, content_type => $content_type, ); } sub msg { my $msg_level = shift; return if $quiet; return if !$verbose && $msg_level > DEBUG; printf( STDERR @_), print STDERR "\n"; } __END__ =head1 NAME swish-filter-test - program to test the SWISH::Filter module. =head1 SYNOPSIS swish-filter-test [options] <...> Options: -quiet don't generate messages to stderr -content output content to stdout -(no)skip_binary skip output of binary files (default) -lines Number of lines of content to display to stderr if verbose -headers output with headers for swish-e -S prog method -verbose enable $ENV{FILTER_DEBUG} for verbose output -path output @INC path to SWISH::Filter module -help brief help message -man full documentation =head1 DESCRIPTION swish-filter-test is a program to test the Perl module SWISH::Filter. SWISH::Filter is a module that is included with the swish-e distribution. Documents supplied to this script (as a URL or a plain file) on the command line are passed to the SWISH::Filter module. This is useful for testing filters. The SWISH::Filter module works by checking a document's content-type and looking for an available filter. Most filters require additional helper programs (e.g. the filter to convert PDF to HTML requires the Xpdf package). Using the -verbose options should indicate if a required program is missing. Options to this script control how much output is generated. Options can also be specified to generate output that can be piped directly to swish-e (see C<-headers> below). All messages are sent to stderr unless --content or -headers are specified and then content is sent to stdout. =head1 OPTIONS =over 8 =item B<-quiet> Don't write info out to stderr. Normally not useful unless you just want to filter a document and not really test the SWISH::Filter module. Fatal errors are written to stderr error regardless of the -quiet option. =item B<-verbose> Enables FILTER_DEBUG mode in the SWISH::Filter module, and enables extra info including a summary of the filtered document to stderr. Enable if trying to find out why a filter does not work. =item B<-lines> Number of summary lines of summary content to show. Summary lines are only showed if -verbose is selected. Lines are sent to stderr, not stdout. Note, the summary is limited to 1000 characters regardless of this option. =item B<-content> Specifying -content will output full content to stdout. The default is to only display a few lines. =item B<-(no)skip_binary> The default is to not output content from binary files. -noskip_binary will disable this. =item B<-headers> Prints the headers used by swish-e when reading documents with -S prog. This can be used to filter documents directly to swish-e: swish-filter-test -headers -content http://localhost/ test.pdf | swish-e -S prog -i stdin -v1 =item B<-path> Prints the installed location of the SWISH::Filter parent directory for use in PERL5LIB, Allows using SWISH::Filter in other programs, or with the Swish-e -S http method with swishspider. For example: PERL5LIB=`swish-filter-test -path` swish-e -S http -i http://localhost =item B<-help> Print a brief help message and exits. =item B<-man> Prints the manual page and exits. =back =cut 0[swish-e.html].htaccess##I⫿2 y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  SetHandler cgi-script allow from all 0[swish-e.html]API.htmlF7FZ嫿2 77y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH::API - Perl interface to the Swish-e C Library

Swish-E Logo


SWISH::API - Perl interface to the Swish-e C Library


[ TOC ]

SYNOPSIS

 
    use SWISH::API;

 
    my $swish = SWISH::API->new( 'index.swish-e' );

 
    $swish->AbortLastError
        if $swish->Error;

 
    # A short-cut way to search
    
    my $results = $swish->Query( "foo OR bar" );

 
    # Or more typically
    my $search = $swish->New_Search_Object;

 
    # then in a loop 
    my $results = $search->Execute( $query );

 
    # always check for errors (but aborting is not always necessary)

 
    $swish->AbortLastError
        if $swish->Error;

 
    # Display a list of results

 
    my $hits = $results->Hits;
    if ( !$hits ) {
        print "No Results\n";
        return;  /* for example *.
    }

 
    print "Found ", $results->Hits, " hits\n";

 
    # Seek to a given page - should check for errors
    $results->SeekResult( ($page-1) * $page_size );

 
    while ( my $result = $results->NextResult ) {
        printf("Path: %s\n  Rank: %lu\n  Size: %lu\n  Title: %s\n  Index: %s\n  Modified: %s\n  Record #: %lu\n  File   #: %lu\n\n",
            $result->Property( "swishdocpath" ),
            $result->Property( "swishrank" ),
            $result->Property( "swishdocsize" ),
            $result->Property( "swishtitle" ),
            $result->Property( "swishdbfile" ),
            $result->ResultPropertyStr( "swishlastmodified" ),
            $result->Property( "swishreccount" ),
            $result->Property( "swishfilenum" )
        );
    }

[ TOC ]


DESCRIPTION

This module provides a Perl interface to the Swish-e search engine. This module allows embedding the swish-e search code into your application avoiding the need to fork to run the swish-e binary and to keep an index file open when running multiple queries. This results in increased search performance.

[ TOC ]


DEPENDENCIES

You must have installed Swish-e version 2.4 before building this module. Download from:

 
    http://swish-e.org

[ TOC ]


OVERVIEW

This module includes a number of classes.

Searching consists of connecting to a swish-e index (or indexes), and then running queries against the open index. Connecting to the index creates a swish object blessed into the SWISH::API class.

A SWISH::API::Search object is created from the SWISH::API object. The SWISH::API::Search object can have associated parameters (e.g. result sort order).

The SWISH::API::Search object is used to query the associated index file or files. A query on a search object returns a results object of the class SWISH::API::Results. Then individual results of the SWISH::API::Result class can be fetched by calling a method of the results object.

Finally, a result's properties can be accessed by calling methods on the result object.

[ TOC ]


METHODS

[ TOC ]


SWISH::API - Swish Handle Object

To begin using Swish you must first create a Swish Handle object. This object makes the connection to one or more index files and is used to create objects used for searching the associated index files.

$swish = SWISH::API->new( $index_files );

This method returns a swish handle object blessed into the SWISH::API class. $index_files is a space separated list of index files to open. This always returns an object, even on errors. Caller must check for errors (see below).

@indexes = $swish->IndexNames;

Returns a list of index names associated with the swish handle. These were the indexes specified as a parameter on the SWISH::API->new call. This can be used in calls below that require specifying the index file name.

@header_names = $swish->HeaderNames;

Returns a list of possible header names. These can be used to lookup header values. See SwishHeaderValue method below.

@values = $swish->HeaderValue( $index_file, $header_name );

A swish-e index has data associated with it stored in the index header. This method provides access to that data.

Returns the header value for the header and index file specified. Most headers are a single item, but some headers (e.g. ``Stopwords'') return a list.

The list of possible header names can be obtained from the SwishHeaderNames method.

[ TOC ]


Error Handling

All errors are stored in and accessed via the SWISH::API object (the Swish Handle). That is, even an error that occurs when calling a method on a result (SWISH::API::Result) object will store the error in the parent SWISH:API object.

Check for errors after every method call. Some errors are critical errors and will require destruction of the SWISH::API object. Critical errors will typically only happen when attaching to the database and are errors such as an invalid index file name, permissions errors, or passing invalid objects to calls.

Typically, if you receive an error when attaching to an index file or files you should assume that the error is critical and let the swish object fall out of scope (and destroyed). Otherwise, if an error is detected you should check if it is a critical error. If the error is not critical you may continue using the objects that have been created (for example, an invalid meta name will generate a non-critical error, so you may continue searching using the same search object).

Error state is cleared upon a new query.

Again, all error methods need to be called on the parent swish object

$swish->Error

Returns true if an error occurred on the last operation. On errors the value returned is the internal Swish-e error number (which is less than zero).

$swish->CriticalError

Returns true if the last error was a critical error

$swish->AbortLastError

Aborts the running program and prints an error message to STDERR.

$str = $swish->ErrorString

Returns the string description of the current error (based on the value returned by $swish->Error). This is a generic error string.

$msg = $swish->LastErrorMsg

Returns a string with specific information about the last error, if any. For example, if a query of:

 
    badmeta=foo

and ``badmeta'' is an invalid metaname $swish->ErrorString might return ``Unknown metaname'', but $swish->LastErrorMsg might return ``badmeta''.

[ TOC ]


Generating Search and Result Objects

$search = $swish->New_Search_Object( $query );

This creates a new search object blessed into the SWISH::API::Search class. The optional $query parameter is a query string to store in the search object.

See the section on SWISH::API::Search for methods available on the returned object.

The advantage of this method is that a search object can be used for multiple queries:

 
    $search = $swish->New_Search_Objet;
    while ( $query = next_query() ) {
        $results = $search->Execute( $query );
        ...
    }

$results = $swish->Query( $query );

This is a short-cut which avoids the step of creating a separate search object. It returns a results object blessed into the SWISH::API::Results class described below.

This method basically is the equivalent of

 
    $results = $swish->New_Search_Object->Execute( $query );

[ TOC ]


SWISH::API::Search - Search Objects

A search object holds the parameters used to generate a list of results. These methods are used to adjust these parameters and to create the list of results for the current set of search parameters.

$search->SetQuery( $query );

This will set (or replace) the query string associated with a search object. This method is typically not used as the query can be set when executing the actual query or when creating a search object.

$search->SetStructure( $structure_bits );

This method may change in the future.

A ``structure'' is a bit-mapped flag used to limit search results to specific parts of an HTML document, such as the title or in H tags. The possible bits are:

 
    IN_FILE         = 1      This is the default
    IN_TITLE        = 2      In <title> tag
    IN_HEAD         = 4      In <head> tag
    IN_BODY         = 8      In <body>
    IN_COMMENTS     = 16     In html comments
    IN_HEADER       = 32     In <h*> 
    IN_EMPHASIZED   = 64     In <em>, <b>, <strong>, <i>
    IN_META         = 128    In a meta tag (e.g. not swishdefault)

So if you wish to limit your searches to words in heading tags (e.g. <H1>) or in the <title> tag use:

 
    $search->SetStructure( IN_HEAD | IN_TITLE );
    

$search->PhraseDelimiter( $char );

Sets the character used as the phrase delimiter in searches. The default is double-quotes (``).

$search->SetSearchLimit( $property, $low, $high );

Sets a range from $low to $high inclusive that the give $property must be in to be selected as a result. Call multiple times to set more than one limit on different properties. Limits are ANDed, that is, a result must be within the range of all limits specified to be included in a list of results.

For example to limit searches to docu0ments modified in the last 48 hours:

 
    my $start = time - 48 * 60 * 60;
    $search->SetSearchLimit( 'swishlastmodified', $start, time() );

An error will be set if the property has already been specified or if $high > $low.

Other errors may not be reported until running the query, such as the property name is invalid or if $low or $high are not numeric and the property specified is a numeric property.

Once a query is run you cannot change the limit settings without calling the ResetSearchLimit method first.

$search->ResetSearchLimit;

Clears the limit parameters for the given object. This must be called if the limit parameters need to be changed.

$search->SetSort( $sort_string );

Sets the sort order of search results. The string is a space separated list of valid document properties. Each property may contain a qualifier that sets the direction of the sort.

For example, to sort the results by path name in ascending order and by rank in descending order:

 
    $search->SetSort( 'swishdocpath asc swishrank desc' );

The ``asc'' and ``desc'' qualifiers are optional, and if omitted ascending is assumed.

Currently, errors (e.g invalid property name) are not detected on this call, but rather when executing a query. This may change in the future.

[ TOC ]


SWISH::API::Results - Generating and accessing results

Searching generates a results object blessed into the SWISH::API::Results class.

$results = $search->Execute( $query );

Executes a query based on the parameters in the search object. $query is an optional query string to use for the search ($query replaces the set query string in the search object).

A typical use would be to create a search object once and then call this method for each query using the same search object changing only the passed in $query.

The caller should check for errors after making this all.

[ TOC ]


Results Methods

A query creates a results object that contains information about the query (e.g. number of hits) and access to the individual results.

$hits = $results->Hits;

Returns the number of results for the query. If zero and no errors were reported after calling $search->Execute then the query returned zero results.

@parsed_words = $results->ParsedWords( $index_name );

Returns an array of tokenized words and operators with stopwords removed. This is the array of tokens used by swish for the query.

$index_name must match one of the index files specified on the creation of the swish object (via the SWISH::API->new call).

The parsed words are useful for highlighting search terms in associated documents.

@removed_stopwords = $results->RemovedStopwords( $index_name) ;

Returns an array of stopwords removed from a query, if any, for the index specified.

$index_name must match one of the index files specified on the creation of the swish object (via the SWISH::API->new call).

$results->SeekResult( $position );

Seeks to the position specified in the result list. Zero is the first position and $results->Hits-1 is the last position. Seeking past the end of results sets a non-critical error condition.

Useful for seeking to a specific ``page'' of results.

$result = $results->NextResult;

Fetches the next result from the list of results. Returns undef if no more results are available. $result is an object blessed into the SWISH::API::Result class.

[ TOC ]


SWISH::API::Result - Result Methods

The follow methods provide access to data related to an individual result.

$prop = $result->Property( $prop_name );

Fetches the property specified for the current result. An invalid property name will cause an exception (which can be caught by wrapping the call in an eval block).

Can return undefined.

Date properties are returned as a timestamp. Use something like Date::Format to format the strings (or just call scalar localtime( $prop ) ).

$prop = $result->ResultPropertyStr( $prop_name );

Fetches and formats the property. Unlike above, invalid property names return the string ``(null)'' -- this will likely change to match the above (i.e. throw an exception).

Undefined values are returned at the null string (``'').

$value = $result->ResultIndexValue( $header_name );

Returns the header value specified. This is similar to $swish->HeaderValue(), but the index file is not specified (it is determined by the result).

[ TOC ]


Utility Methods

$stemmed_word = $swish->StemWord( $word );

*Deprecated*

Returns the stemmed version of the passed in word.

Deprecated because only stems using the original Porter Stemmer and uses a shared memory location in the SW_HANDLE object to store the stemmed word. See below for other stemming options.

$mode_string = $result->FuzzyMode;

Returns the string (e.g. ``Stemming_en'', ``Soundex'', ``None'' ) indicating the stemming method used while indexing the given document.

$fuzzy_word = $result->FuzzyWord( $word );

Converts $word using the same fuzzy mode used to index the $result. Returns a SWISH::API::FuzzyWord object. Methods on the object are used to access the converted words and other data as shown below.

$count = $fuzzy_word->WordCount;

Returns the number of output words. Normally this is the value one, but may be more depending on the stemmer used. DoubleMetaphone can return two strings for a single input string.

$status = $fuzzy_word->WordError;

Returns any error code that the stemmer might set. Normally, this return value is zero, indicating that the stemming/fuzzy operation succedded. The values returned are defined in the swish-e source file /src/stemmer.h.

@words = $fuzzy_word->WordList;

Returns the converted words from the stemming/fuzzy operation. Normally, the array will contain a single element, although may contain more (i.e. if DoubleMetaphone is used and the input word returns two strings).

In the even that a word does not stem (e.g. trying to stem a number), this method will return the original input word specified when $result->FuzzyWord( $word ) was called.

@parsed_words = $swish->SwishWords( $string, $index_file );

* Not implemented *

Splits up the input string into tokens of swish words and operators.

NOTES

Perl's garbage collection makes it easy to write code for searching with Swish-e, but care must be taken not to keep objects around too long which can use up memory.

Here's an example of a potential problem. Say you have a very large number of documents indexed and you want to find the first hit for a number of popular keywords (error checking omitted in this bad example):

 
    sub first_hit {
      my $query = shift;
      my $handle = SWISH::API->new( 'index.swish-e');
      my $results = $handle->Query( $query );
      my $first_hit = $results->NextResult;
      return $first_hit;
    }

 
    my @first_hit_list;
    for ( @keywords )
        push @first_hit_list, $first_hit($_);
    }

The first_hit() subroutine is returning a SWISH::Result object. That makes it easy to access properties:

 
   # print file names
   for my $result ( @first_hit_list ) {
      print $result->Property('swishdocpath'),"\n";
   }

But as long as a SWISH::API::Result object is around, so is the entire list of results generated by the $handle->Query() call, and the index file is still open (because a SWISH::API::Result depends on a SWISH::API::Results object, which depends on a SWISH::API object).

In this case it would be better to return from first_hit() just the properties you need:

 
      ...
      my $first_hit = $results->NextResult;
      return $first_hit->Property('swishdocpath');
   }

Then when first_hit() sub ends the result list will be freed, and the index file closed, thanks to Perl's reference count tracking.

Note: the other problem with the above code is that the same index file is opened for each call to the function. Don't do that, instead open the index file once.

COPYRIGHT

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Bill Moseley moseley@hank.org. 2002/2003

SUPPORT

Please contact the Swish-e discussion email list for support with this module or with Swish-e. Please do not contact the developers directly.

[ TOC ]

0[swish-e.html]CHANGES.htmliai8嫿2s6aay $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: CHANGES - List of revisions

Swish-E Logo


CHANGES - List of revisions


[ TOC ]

Revision History

This document contains list of bug fixes and feature additions to Swish-e.

[ TOC ]


Version 2.4.2 - March 09, 2004

  • UseStemming didn't take no for an answer

    UseStemming was coded as an alias for FuzzyIndexingMode when Snowball was compiled in (the default), but ``no'' doesn't always mean no when the Norwegian stemmer is available.

  • Fixed problem building incremental version

    Fixed compile problem with building incremental indexing mode. This is an experimental option with swish-e to allow adding files to an index. See configure --help for build option. Incremental indexes are not compatible with stanard indexes.

  • Updated build instructions in INSTALL

    Added a few comments about use of CPPFLAGS and LDFLAGS.

  • Updated the index_hypermail.pl

    Updated to work with latest version of hypermail (pre-2.1.9).

  • Time zone in ResultPropertyStr()

    Format string for generating date did not include the time zone in location. Add strftime format string to config.h

  • Undefined and Blank Properties and (NULL)

    Fixed a few problems with printing properties:

    1) Using -p and -x showed different results if a bad property value was given:

     
        $ swish-e -w not dkdk -p badname -H0
        err: Unknown Display property name "badname"
        .
        $ swish-e -w not dkdk -x '<badname>\n' -H0
        (NULL)

    Now both return an error.

    2) Fixed bug where using a ``fmt'' string with -x output generated (bad) output if the result did not have the specified property.

     
        $ swish-e -w not dkdk -x '<somedate>\n' -H0  # undefined value

     
        $ swish-e -w not dkdk -x '<somedate fmt="%Y %B %d">\n' -H0
        %Y %B 1075353525

    Now nothing is printed if the property does not exist.

    3) Updated SWISH::API to croak() on invalid property names, and to return undefined values for missing properties.

    4) Updated swish.cgi and search.cgi to not generate warnings on undefined values return as properties. Note that swish.cgi will now die on undefined properties. Previously would just display (NULL).

  • Fixed segfault when generating warnings while parsing

    Parser.c was incorrectly calling warning() incorrectly. And -Wall was not catching this!

  • Added check for internal property names.

    Parser was not checking for use of Swish-e reserved property names.

     
       <swishrank>foo</swishrank>

    This will now generate a warning.

[ TOC ]


Version 2.4.1 - December 17, 2003

  • Added new example CGI script

    search.cgi is a new skeleton CGI script that uses SWISH::API for searching. It is installed in the same location as swish.cgi.

  • Add Fuzzy access to C and Perl interfaces

    Added a number of functions to the C API (and SWISH::API) to access the stemmer used when indexing a given index.

  • Commas in numbers

    Added commas to summary display at end of indexing.

  • Insert whitespace between tags

    Parser.c was updated to flush the text buffer before and after every (non-inline HTML) tag.

    The problem was that:

     
        foo<tag>bar</tag>baz

    would index as a single word ``foobarbaz''.

  • DirTree.pl

    DirTree.pl was updated to work with SWISH::Filter and to work on Windows. DirTree.pl is a program to fetch files from the file system and works with the -S prog input method.

  • Problem with --enable-incremental option

    Fixed configure script to build incremental option. Note that this is still experimental. But testers are welcome.

  • headers.c bug

    Mark Fletcher with the help of valgrind found a bug in headers.c function SwishIndexHeaderNames used by the C API.

  • Clarify documentation regarding search order

    At the prompting of Doralyn Rossmann updated SEARCH.pod to try and make the explanation of searching clearer, and to fix an error in the description of nested searches.

[ TOC ]


Version 2.4.0 - October 27, 2003

  • Note: Different Index Format

    Swish-e version 2.4.0 has a different index file format from previous versions of Swish-e. Upgrading will require reindexing -- version 2.4.0 cannot read indexes created with previous versions.

[ TOC ]


Version 2.4.0 (Release Candidate 4) September 26, 2003

  • robots.txt not closed correctly

    When using -S http method robots.txt was not closed and that caused the (last) .contents file to not be unlinked under Windows. Windows seems to think filenames are related to files.

  • SWISH::Filter and locating programs on Windows

    SWISH::Filter now scans $libexecdir in addition to the PATH for programs (such at catdoc and pdftotext), and also checks for programs by adding the extensions ``.exe'' and ``.bat'' to the program name.

  • Install sample templates

    The sample templates included with swish.cgi are now installed in $pkgdatadir (typically /usr/local/share/swish-e).

[ TOC ]


Version 2.4.0 (Release Candidate 3) September 11, 2003

[ TOC ]


Version 2.4.0 (Release Candidate 2) September 10, 2003

  • Indexing HTML title

    Fixed a problem when these were used in combination:

     
      MetaNames swishtitle
      MetaNameAlias swishtitle title

    That failed to correctly reset the metaname stack and indexed text under the wrong metaID.

  • Single Wildcards

    Due to the way the query parser ``works'' a search of

     
       "foo *"

    would result in a search of ``foo*''. Now that results in:

     
       err: Single wildcard not allowed as word 

  • Fixed search parsing bug

    Brad Miele reported that the word ``andes'' was not being found. It was being stemmed to ``and'' when was then considered an operator. [moseley]

  • Add new directive PropertyNamesSortKeyLength

    PropertyNamesSortKeyLength sets the sort key length to use when sorting string properties. The default is 100 characters. There was a hard-coded 100 char limit before, but that was a problem where people were not building from source (Windows). The value of this is questionable -- it's intended to limit how much memory is used when sorting while indexing and searching. [moseley]

  • Fixed sorting issues with multiple indexes and reverse sorting

    Reworked much of the sorting code. Still to do is setting the character sort order. [moseley]

  • Fixed minor memory leak

    Fixed leak of not releasing memory of index file name and swish_handle destroy, and fixed SwishStemWord to default to the Stemmer_en. [moseley]

    Fixed libtest.c example program that was not cleaning up memory after an error condition.

  • Replaced Swish-e's Porter Stemmer with Snowball

    Swish-e now has support for Snowball stemmers (http://snowball.tartarus.org/). The stemmers are enabled for an index with FuzzyIndexingMode Stemming_* where ``*'' can be:

     
      de, dk, en1, en2, es, fi, fr, it, nl, no, pt, ru, se

    In addition, UseStemming yes or FuzzyIndexingMode Stemming_en will use the old stemmer.

[ TOC ]


Version 2.4.0 (Release Candidate 1) May 21, 2003

  • Security Fix: swish.cgi

    The swish.cgi script was not correctly escaping HTML when searching by the right combination of metanames and highlighting module. This could lead to cross-site scripting if indexing un-trusted documents. [moseley]

  • Added Support for building a Debian Package

    To build as a .deb unpack the distribution and chdir then run

     
       $ fakeroot debian/build binary

    Then install the generated .deb file with dpkg -i

  • Use SWISH::Filter by default with spider.pl

    spider.pl is installed in the libexecdir directory as well as the SWISH::Filter modules. PDF, MS Word, MP3, and XML documents will be indexed automatically if the required helper applications (e.g. catdoc, pdftotext) or scripts (e.g. MP3::Tag) are installed.

    Swish also knows about libexecdir, so you you specify a relative path with -S prog swish-e will look for the program in libexecdir. This is mostly for spider.pl so indexing only requires:

     
        IndexDir spider.pl
        SwishProgParameters default http://localhost/index.html

    And swish-e will find spider.pl and SWISH::Filter will be used to convert docs.

  • Fixed Document-Type bug

    Document-Type was not being reset after set input from a -S prog program causing the wrong parser to be used. [moseley]

  • New Directive: PropertyNamesNoStripChars

    Swish replaces all series of low ASCII chars with a single space character. This option instructs swish to store all chars in the property. [moseley]

  • Change HTTP access defaults

    Defaults used with -S http access method were changed.

    Delay was reduced from one minute between start of each request to five seconds between requests.

    MaxDepth was changed from five to zero, meaning there is no limit to depth indexed by default. [moseley]

  • swishspider location and SpiderDirectory

    The swishspider program is now installed in $prefix/lib/swish-e by default. This can be changed by the --libexecdir option to configure.

    The SpiderDirectory option now defaults to the value of libexecdir instead of the current directory. [moseley]

  • Added libtool and automake support

    Replaces the build system with Autotools. Now builds libswish-e as a shared library on systems that support shared libraries. The swish-e binary links against thi>s shared library. Can also build outside the source tree on platforms with GNU make. [moseley]

  • Updates to installation

    Running ``make install'' now installs additional files. Files include the swish-e binary, the libswish-e search library, swish-e.h header, documentation files, the swishspider program, and Perl modules used for the example swish.cgi search script. Directories will be created if they do not already exist. Installation directories can be specified at build time.

  • Fixed bug when searching at end of inverted index

    Swish was not correctly detecting the end of the inverted index when searching a wildcard word that was past the last word in the index. Caught by Frank Heasley. [moseley]

  • Increase sort key length from 50 to 100 characters

    The setting MAX_SORT_STRING_LEN in src/config.h sets the max length used when sorting in swish-e. You may reduce this number to save memory while sorting, or increase it if you have very long properties to sort.

  • Remove &quot; entity from -p output

    The -p option to print properties was escaping double quotes in properties with the &quot; entity. -x does not do that, so inconsistent. -p no longer converts double quotes. The user should pick a good delimiter with -d or preferably use the -x method for generating output.

  • XML parser and Windows

    The XML parser was being passed the incorrect buffer length when used on Windows platform causing the parser to abort with an error.

  • Version Numbering

    SWISH-E versions starting with 2.3.4 use kernel version numbering. Versions are in the form: Major.Minor.Build. Odd minor versions are development. Even minor versions are releases. 2.3.4 would be a development version. 2.4.0 would be a release version. 2.3.20 would be the 20th build of 2.3.

  • Added RPM support

    RPMs can be built with:

     
        ./configure
        make dist

    Copy the resulting tarball to RPM's SOURCES directory and then run as a superuser:

     
        rpmbuild -ba rpm/swish-e.spec

    You should have swish-e packages in your RPMS/<arch> directory. [augur]

  • Changed default perl binary location

    Most perl scripts provided with SWISH-E now use /usr/bin/perl by default. Note that some scripts are generated at build time, so those will look in the path for the location of the perl binary.

  • New Feature: MetaNamesRank

    MetaNamesRank can be used to adjust the ranking for words based on the word's MetaName.

  • New Swish Library API and Perl Module

    The Swish-e C library interface was rewritten to provide better memory management and better separation of data. Most indexing related code has been removed from the library. A new header file is provided for the API: swish-e.h.

    The Perl module SWISHE was replaced with the SWISH::API module in the Swish-e distribution.

    Previous versions of the SWISHE module will not work with this version of Swish-e.

    If you are using the SWISHE module from a previous version of Swish then you must either rewrite your code to use the new SWISH::API module (highly recommended) or use the replacement SWISHE module. The replacement SWISHE module is a thin interface to the SWISH::API module. It can be downloaded from

     
        http://swish-e.org/Download/old/SWISHE-0.03.tar.gz

  • NoContents not working with libxml2 parser

    Corrected problem when using NoContents with binary files and the HTML2 parser.

    Trying to index image file names with:

     
        IndexOnly .gif .jpeg
        NoContents .gif .jpeg

    failed to index the path names because the default parser (HTML2 when libxml2 is linked with swish-e) was not finding any text in the binary files. [moseley]

  • Updates to swish.cgi

    The example/swish.cgi script can now use the SWISH::API module for searching an index. Combined with mod_perl this module can improve search performance considerably.

    The Perl modules used with the swish.cgi script have all been moved into the SWISH::* namespace. Hence, files in the modules directory were moved into the modules::SWISH directory.

[ TOC ]


Version 2.2.3 - December 11, 2002

Multiple -L options were ORing instead of ANDing. Catch by Patrick Mouret. [moseley]

[ TOC ]


Version 2.2.2 - November 14, 2002

Pass non- text/* files onto indexing code IF there is a FileFilter associated with the *extension* of the URL. Fixes the problem of not being able to index, say, pdf files by using the FileFilter configuation option.

Fixed bug where nulls were stripped when using FileFilter with -S prog. Catch by Greg Fenton. [moseley]

[ TOC ]


Version 2.2.1 - September 26, 2002

[ TOC ]


Version 2.2 - September 18, 2002

  • Default parser

    Swish-e will now use the HTML2 (libxml2) parser by default if libxml2 is installed and DefaultContents or IndexContents is not used.

  • Selecting parsers

    Allow HTML*, XML*, and TXT* to automatically select the libxml2-based parsers if libxml2 is linked with Swish-e, otherwise fallback to the built-in parsers.

  • SwishSpider and Filters

    Filters (FileFilter directive) did not work correctly when spidering with the -S http method. A new filter system was developed and now filtering of documents (e.g. pdf->html or MSWord->text) is handled by the src/SwishSpider program.

    When indexing with the -S http method only documents of content-type ``text/*'' are indexed. Other documents must be converted to text by using the filter system.

  • Buffer overflow in xml.c

    Fixed bug in xml.c reported by Rodney Barnett when very long words were indexed. [moseley]

  • configure script updates

    Updated from _WIN32 checks to feature checks using autoconf [moseley, norris]

  • updates to run on Alpha (Linux 2.4 (Debian 3.0))

    Fixed a cast error when calling zlib, and the calls to read/write a packed longs to disk. [jmruiz, moseley]

  • COALESCE_BUFFER_MAX_SIZE

    Some people were seeing the following error:

     
        err: Buffer too short in coalesce_word_locations.
        Increase COALESCE_BUFFER_MAX_SIZE in config.h and rebuild.

    This was due to indexing binary data or files with very large number of words. The best solution is to not index binary data or files with a very large number of words.

    Swish-e will now automatically reallocate the buffer as needed. [jmruiz]

[ TOC ]


Version 2.2rc1 - August 29, 2002

Many large changes were made internally in the code, some for performance reasons, some for feature changes and additions, and some to prepare for new features in later versions of Swish-e.

  • Documentation!

    Documentation is now included in the source distribution as .pod (perldoc) files, and as HTML files. In addition, the distribution can now generate PDF, postscript, and unix man pages from the source .pod files. See README for more information.

  • Indexing and searching speed

    The indexing process has been imporoved. Depending on a number of factors, you may see a significant improvement in indexing speed, especially if upgrading from version 1.x.

    Searching speed has also been improved. Properties are not loaded until results are displayed, and properties are pre-sorted during indexing to speed up sorting results by properties while searching.

  • Properties are written to a sepearte file

    Swish-e now stores document properties in a separate file. This means there are now two files that make up a Swish-e index. The default files are index.swish-e and index.swish-e.prop.

    This change frees memory while indexing, allowing larger collections to be indexed in memory.

  • Internal data stored as Properties

    Pre 2.2 some internal data was stored in fixed locations within the index, namely the file name, file size, and title. 2.2 introduced new internal data such as the last modified date, and document summaries. This data is considered meta data since it is data about a document.

    Instead of adding new data to the internal structure of the index file, it was decided to use the MetaNames and PropertyNames feature of Swish-e to store this meta information. This allows for new meta data to be added at a later time (e.g. Content-type), and provides an easy and customizable way to print results with the -p switch and the new -x switch. In addition, search results can now be sorted and limited by properties.

    For example, to sort by the rank and title:

     
        swish-e -w foo -s swishrank desc swishtitle asc

  • The header display has been slightly reorganized.

    If you are parsing output headers in a program then you may need to adjust your code. There's a new switch <-H> to control the level of header output when searching.

  • Results are now combined when searching more than one index.

    Swish-e now merges (and sorts) the results from multiple indexes when using -f to specify more than one index. This change effects the way maxhits (-m) works. Here's a summary of the way it works for the different versions.

     
        1.3.2 - MaxHits returns first N results starting from the first index.
                e.g. maxhits=20; 15 hits Index1, 40 hits Index2
                All 15 from Index1 plus first five from Index2 = 20 hits.

     
        2.0.0 - MaxHits returns first N results from each index.
                e.g. Maxhits=20; 15 hits Index1, 40 hits Index2
                All 15 from Index1 plus 15 from Index2.

     
        2.2.0 - Results are merged and first N results are returned.
                e.g. Maxhits=20; 15 hits Index1, 40 hits Index2
                Results are merged from each index and sorted
                (rank is the default sort) and only the first
                20 are returned.

  • New prog document source indexing method

    You can now use -S prog to use an external program to supply documents to Swish-e. This external program can be used to spider web servers, index databases, or to convert any type of document into html, xml, or text, so it can be indexed by Swish-e. Examples are given in the prog-bin directory.

  • The indexing parser was rewritten to be more logical.

    TranslateCharacters now is done before WordCharacters is checked. For example,

     
        WordCharacters abcdefghijklmnopqrstuvwxyz
        TranslateCharacters  n

    Now El Nio will be indexed as El Nino (el and nino), even though is not listed in WordCharacters.

    Previously, stopwords were checked after stemming and soundex conversions, as well as most of the other word checks (WordCharacters, min/max length and so on). This meant that the stopword list probably didn't work as expected when using stemming.

  • The search parser was rewritten to be more logical

    The search parser was rewritten to correct a number of logic errors. Swish-e did not differentiate between meta names, Swish-e operators and search words when parsing the query. This meant, for example, that metanames might be broken up by the WordCharacters setting, and that they could be stemmed.

    Swish-e operator characters "*()=> can now be searched by escaping with a backslash. For example:

     
        ./swish-e -w 'this\=odd\)word'

    will end up searching for the word this=odd)word. To search for a backslash character preceed it with a backslash.

    Currently, searching for:

     
        ./swish-e -w 'this\*'

    is the same as a wildcard search. This may be fixed in the future.

    Searching for buzzwords with those characters will still require backslashing. This also may change to allow some un-escaped operator characters, but some will always need to be escaped (e.g. the double-quote phrase character).

  • Quotes and Backslash escapes in strings

    A bug was fixed in the parse_line() function (in string.c) where backslashes were not escaping the next character. parse_line() is used to parse a string of text into tokens (words). Normally splitting is done at whitespace. You may use quotes (single or double) to define a string (that might include whitespace) as a single parameter. The backslash can also be used to escape the following character when *within* quotes (e.g. to escape an embedded quote character).

     
        ReplaceRules append "foo bar"   <- define "foo bar" as a single word
        ReplaceRules append "foo\"bar"  <- escape the quotes
        ReplaceRules append 'foo"bar'   <- same thing

  • Example user.config file removed.

    Previous versions of Swish-e included a configuration file called user.config which contained examples of all directives. This has been replaced by a series of example configuration files located in the conf directory. The configuration directives are now described in SWISH-CONFIG.

  • Ports to Win32 and VMS

    David Norris has included the files required to build Swish-e under Windows. See src/win32. A self-extracting Windows version is available from the Download page of the swish-e.org web site.

    Jean-Franois Pironne has provided the files required to build Swish-e under OpenVMS. See src/vms for more information.

  • String properties are concatenated

    Multiple string properties of the same name in a document are now concatenated into one property. A space character is added between the strings if needed. A warning will be generated if multiple numeric or date properties are found in the same document, and the additional properties will be ignored.

    Previously, properties of the same name were added to the index, but could not be retrieved.

    To do: remove the next pointer, and allow user-defined character to place between properties.

  • regex type added to ReplaceRules

    A more general purpose pattern replacement syntax.

  • New Parsers

    Swish-e's XML parser was replaced with James Clark's expat XML parser library.

    Swish-e can now use Daniel Veillard's libxml2 library for parsing HTML and XML. This requires installation of the library before building Swish-e. See the INSTALL document for information. libxml2 is not required, but is strongly recommended for parsing HTML over Swish-e's internal HTML parser, and provides more features for both HTML and XML parsing.

  • Support for zlib

    Swish-e can be compiled with zlib. This is useful for compressing large properties. Building Swish-e with zlib is stronly recommended if you use its StoreDescription feature.

  • LST type of document no longer supported

    LST allowed indexing of files that contained multiple documents.

  • Temporary files

    To improve security Swish-e now uses the mkstemp(3) function to create temporary files. Temporary files are used while indexing only. This may result in some portability issues, but the security issues were overriding.

    (Currently this does not apply to the -S http indexing method.)

    mkstemp opens the temporary with O_EXCL|O_CREAT flags. This prevents overwriting existing files. In addition, the name of the file created is a lot harder to guess by attackers. The temporary file is created with only owner permissions.

    Please report any portability issues on the Swish-e discussion list.

  • Temporary file locations

    Swish-e now uses the environment variables TMPDIR, TMP, and TEMP (in that order) to decide where to write temporary files. The configuration setting of TmpDir will be used if none of the environment variables are set. Swish-e uses the current directory otherwise; there is no default temporary directory.

    Since the environment variables override the configuration settings, a warning will be issued if you set TmpDir in the configuration file and there's also an environment variable set.

    Temporary files begin with the letters ``swtmp'' (which can be changed in config.h), followed by two or more letters that indicate the type of temporary file, and some random characters to complete the file name. If indexing is aborted for some reason you may find these temporary files left behind.

  • New Fuzzy indexing method Double Metaphone

    Based on Lawrence Philips' Metaphone algorithm, add two new methods of creating a fuzzy index (in addition to Stemming and Soundex).

Changes to Configuration File Directives. Please see SWISH-CONFIG for more info.

  • New directives: IndexContents and DefaultContents

    The IndexContents directive assigns internal Swish-e document parsers to files based on their file type. The DefaultContents directive assigns a parser to be used on file that are not assigned a parser with IndexContents.

  • New directive: UndefinedMetaTags [error|ignore|index|auto]

    This describes what to do when a meta tag is found in a document that is not listed in the MetaNames directive.

  • New directive: IgnoreTags

    Will ignore text with the listed tags.

  • New directive: SwishProgParameters *list of words*

    Passes words listed to the external Swish-e program when running with -S prog document source method.

  • New directive: ConvertHTMLEntities [yes|no]

    Controls parsing and conversion of HTML entities.

  • New directive: DontBumpPositionOnMetaTags

    The word position is now bumped when a new metatag is found -- this is to prevent phrases from matching across meta tags. This directive will disable this behavior for the listed tags.

    This directive works for HTML and XML documents.

  • Changed directive: IndexComments

    This has been changed such that comments are not indexed by default.

  • Changed directive: IgnoreWords

    The builtin list of stopwords has been removed. Use of the SwishDefault word will generate a warning, and no stop words will be used. You must now specify a list of stopwords, or specify a file of stopwords.

    A sample file stopwords.txt has been included in the conf/stopwords directory of the distribution, and can be used by the directive:

     
        IgnoreWords File: /path/to/stopwords.txt

  • Change of the default for IgnoreTotalWordCountWhenRanking

    The default is now ``yes''.

  • New directive: Buzzwords

    Buzzwords are words that should be indexed as-is, without checking for stopwords, word length, WordCharacters, or any other of the word limiting features. This allows indexing of things like C++ when ``+'' is not listed in WordCharacters.

    Currenly, IgnoreFirstChar and IgnoreLastChar will be stripped before processing Buzzwords.

    In the future we may use separate IgnoreFirst/Last settings for buzzwords since, for example, you may wish to index all + within Swish-e words, but strip + from the start/end of Swish-e words, but not from the buzzword C++.

  • New directives: PropertyNamesNumeric PropertyNamesDate

    Before Swish-e 2.2 all user-defined document properties were stored in the index as strings. PropertyNamesNumeric and PropertyNamesDate tell it that a property should be stored in binary format. This allows for correct sorting of numeric properties.

    Currenly, only integers can be stored, such as a unix timestamp. (Swish-e uses strtoul to convert the number to an unsigned long internally.)

    PropertyNamesDate only indicates to Swish-e that a number is a unix timestamp, and to display the property as a formatted time when printing results. Swish does not currently parse date strings; you must provide a unix timestamp.

  • New directive: MetaNameAlias

    You may now create alias names for MetaNames. This allow you to map or group multiple names to the same MetaName.

  • New directive: PropertyNameAlias

    Creates aliases for a PropertyName.

  • New directive: PropertyNamesMaxLength

    Sets the max length of a text property.

  • New directive: HTMLLinksMetaName

    Defines a metaname to use for indexing href links in HTML documents. Available only with libxml2 parser.

  • New directive: ImageLinksMetaName

    Defines a metaname to use for indexing src links in <img> tags. Allow you to search image pathnames within HTML pages. Available only with libxml2 parser.

  • New directive: IndexAltTagMetaName

    Allows indexing of image ALT tags. Only available when using the libxml2 parser.

  • New directive: AbsoluteLinks

    Attempts to convert relative links indexed with HTMLLinksMetaName and ImageLinksMetaName to absolute links. Available only with libxml2 parser.

  • New directive: ExtractPath

    Allows you to use a regular expression to extract out part of the path of each file and index it with a meta name. For example, this allows searches to be limited to parts of your file tree.

  • New directive: FileMatch

    FileMatch is similar to FileRules. Where FileRules is used to exclude files and directoires, FileMatch is used to include files.

  • New directive: PreSortedIndex

    Controls which properties are pre-sorted while indexing. All properties are sorted by default.

  • New directive: ParserWarnLevel

    Sets the level of warning printed when using libxml2.

  • New directive: obeyRobotsNoIndex [yes|NO]

    When using libxml2 to parse HTML, Swish-e will skip files marked as NOINDEX.

     
        <meta name="robots" content="noindex">

    Also, comments may be used within HTML and XML source docs to block sections of content from indexing:

     
           <!-- SwishCommand noindex -->
           <!-- SwishCommand index -->

    and/or these may be used also:

     
           <!-- noindex -->
           <!-- index -->

  • New directive: UndefinedXMLAttributes

    This describes how the content of XML attributes should be indexed, if at all. This is similar to UndefinedMetaTags, but is only for XML attributes and when parsed by libxml2. The default is to not index XML attributes.

  • New directive: XMLClassAttributes

    XMLClassAttributes can specify a list of attribute names whose content is combined with the element name to form metanames.

  • New directive: PropCompressionLevel [0-9]

    If compiled with zlib, Swish-e uses this setting to control the level of compression applied to properties. Properties must be long enough (defined in config.h) to be compressed. Useful for StoreDescription.

  • Experimental directive: IgnoreNumberChars

    Defines a set of characters. If a word is made of of *only* those characters the word will not be indexed.

  • New directive: FuzzyIndexingMode

    This configuration directive is used to define the type of ``fuzzy'' index to create. Currently the options are:

     
        None
        Stemming
        Soundex
        Metaphone
        DoubleMetaphone

Changes to command line arguments. See SWISH-RUN for documentation on these switches.

[ TOC ]

0[swish-e.html]Filter.htmlF7Fh櫿2 77y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH::Filter - Perl extension for filtering documents with Swish-e

Swish-E Logo


SWISH::Filter - Perl extension for filtering documents with Swish-e


[ TOC ]

SYNOPSIS

 
  use SWISH::Filter;

 
  # load available filters into memory
  my $filter = SWISH::Filter->new;

 
  # convert a document

 
  my $doc = $filter->convert(
        document     => \$scalar_ref,  # path or ref to a doc
        content_type => $content_type, # content type if doc reference
        name         => $real_path,    # optional name for this file (useful for debugging)
        user_data    => $whatever,     # optional data to make available to filters
   );

 
  return unless $doc;  # empty doc, zero size, or no filters installed

 
  # Was the document converted by a filter?
  my $was_filtered = $doc->was_filtered;

 
  # Skip if the file is not text
  return if $doc->is_binary;

 
  # Print out the doc
  my $doc_ref = $doc->fetch_doc;
  print $$doc_ref;

 
  # Fetch the final content type of the document
  my $content_type = $doc->content_type;

 
  # Fetch swish-e parser type (TXT*, XML*, HTML*, or undefined)
  my $doc_type = $doc->swish_parser_type;

[ TOC ]


DESCRIPTION

SWISH::Filter provides a unified way to convert documents into a type that swish-e can index. Individual filters are installed as separate perl modules. For example, there might be a filter that converts from PDF format to HTML format.

Note that this is just a framework for filtering documents. Additional helper programs or Perl module may need to be installed to use SWISH::Filter to filter documents. For example, to filter PDF documents you must install the Xpdf package.

The filters are automatically loaded when SWISH::Filters->new() is called. Filters define a type and priority that determines the processing order of the filter. Filters are processed in this sort order until a filter accepts the document for filtering. The filter uses the document's content type to determine if the filter should handle the current document.

The individual filters are not designed to be used as separate modules. All access to the filters is through this SWISH::Filter module.

Normally, once a document is filtered processing stops. Some filters can filter the document yet set a flag saying that filtering should continue (for example a filter that uncompresses a MS Word document before passing on to the filter that converts from MS Word to text). All this should be transparent to the end user.

The idea of SWISH::Filter is that new filters can be created, and then downloaded and installed to provide new filtering capabilities. For example, if you needed to index MS Excel documents you might be able to download a filter from the Swish-e site and magically next time you run indexing MS Excel docs would be indexed.

The SWISH::Filter setup can be used with -S prog or -S http. It works best with the -S prog method because the filter modules only need to be loaded and compiled one time. The -S prog program spider.pl will automatically use SWISH::Filter when spidering with default settings (using ``default'' as the first parameter to spider.pl).

The -S http indexing method uses a Perl helper script called swishspider. swishspider has been updated to work with SWISH::Filter, but (unlike spider.pl) does not contain a ``use lib'' line to point to the location of SWISH::Filter. This means that by default swishspider will not use SWISH::Filter for filtering. The reason for this is because swishspider runs for every URL fetched, and loading the Filters for each document can be slow. The recommended way of spidering is using -S prog with spider.pl, but if -S http is desired the way to enable SWISH::Filter is to set PERL5LIB before running swish so that swishspider will be able to locate the SWISH::Filter module. Here's one way to set the PERL5LIB with the bash shell:

 
  $ export PERL5LIB=`swish-filter-test -path`

[ TOC ]


METHODS

$filter = SWISH::Filter->new()

This creates a SWISH::Filter object. You may pass in options as a list or a hash reference.

[ TOC ]


SWISH::Filter->new Options

There is currently only one option that can be passed in to new():

ignore_filters

Pass in a reference to a list of filter names to ignore. For example, if you have two filters installed ``Pdf2HTML'' and ``Pdf2XML'' and want to avoid using ``Pdf2XML'':

 
    my $filter = SWISH::Filter->new( ignore_filters => ['Pdf2XML'];

$filtered = $filter->filter();

Deprecated: Use the convert() method instead.

See $swish->convert for options.

Returns true if the document was converted.

$doc_object = $filter->convert();

This method filters a document. Returns an object of the class SWISH::Filter::Document or undefined if passed in an empty document, a filename that cannot be read off disk, or if no filters have been loaded.

Methods in SWISH::Filter::Document Methods below can be called on the object to, for example, check if the document was filtered and to fetch the document content (filtered or not).

You must pass in a hash (or hash reference) of parameters to the convert() method. The possible parameters are:

document

This can be either a path to a file, or a scalar reference to a document in memory. This is required.

content_type

The MIME type of the document. This is only required when passing in a scalar reference to a document is passed. The content type string is what the filters use to match a document type.

When passing in a file name and content_type is not set, then the content type will be determined from the file's extension by using the MIME::Types Perl module (available on CPAN).

name

Optional name to pass in to filters that will be used in error and warning messages.

user_data

Optional data structure that all filters may access. This can be fetched in a filter by:

 
    my $user_data = $doc_object->user_data;

And used in the filter as:

 
    if ( ref $user_data && $user_data->{pdf2html}{title} ) {
       ...
    }

It's up to the filter author to use a unique first-level hash key for a given filter.

Example of using the convert() method:

 
    $doc_object = $filter->convert(
        document     => $doc_ref,
        content-type => 'application/pdf',
    );

$doc_ref = $filter->fetch_doc;

Deprecated: Use $doc->fetch_doc instead.

Returns a reference to a scalar that contains the document passed in. If the file is on disk it will be read from disk into memory.

Deprecated example: (don't use)

 
    $filtered = $filter->filter( $doc_ref, 'application/pdf' );
    if ( $filtered ) {
        $doc_ref = $filter->fetch_doc;
        print $$doc_ref;
    }

$type = $filter->content_type

Deprecated

Returns the content type of the document after filtering. Use $doc->content_type instead.

$type = $filter->swish_parser_type

Deprecated use $doc->swish_parser_type instead.

Returns the swish parser type for the document, or undefined.

For example, in a -S prog program you can set the parser that swish-e will use:

 
    if ( my $type = $filter->swish_parser_type ) {
        print "Document-Type: $type\n";
    }

$self->mywarn()

Internal function used for writing warning messages to STDERR if $ENV{FILTER_DEBUG} is set. Set the environment variable FILTER_DEBUG before running to see the verbose warning messages.

$path = $self->find_binary( $prog );

Use in a filter's new() method to test for a necesary program located in $PATH. Returns the path to the program or undefined if not found or does not pass the -x file test.

$bool = $self->use_modules( @module_list );

Attempts to load each of the module listed and calls its import() method.

Use to test and load required modules within a filter without aborting.

 
    return unless $self->use_modules( qw/ Spreadsheet::ParseExcel  HTML::Entities / );

A warning message is displayed if the FILTER_DEBUG environment variable is true.

[ TOC ]


SWISH::Filter::Document Methods

These methods are available to Filter authors, and also provide access to the document after calling the convert() method to end-users of SWISH::Filter.

End users of SWISH::Filter will use a subset of these methods. Mostly:

 
   $doc_object->fetch_doc      # and alias for fetch_document_reference()
   $doc_object->was_filtered   # true the document was filtered
   $doc_object->content_type   # document's current content type (mime type)
   $doc_object->swish_parser_type # returns a parser type to use with swish-e -S prog method
   $doc_object->is_binary      # returns $content_type !~ m[^text/];

These methods are also available to the individual filter modules. The filter's ``filter'' function is also passed a SWISH::Filter::Document object. Method calls may be made on this object to check the document's current content type, or to fetch the document as either a file name or a reference to a scalar containing the document content.

[ TOC ]


Methods used by end-users and filter authors

$doc_ref = $doc_object->fetch_doc_reference;

Returns a scalar reference to the document. This can be used when the filter can operate on the document in memory (or if an external program expects the input to be from standard input).

If the file is currently on disk then it will be read into memory. If the file was stored in a temporary file on disk the file will be deleted once read into memory. The file will be read in binmode if $doc->is_binary is true.

Note that $doc_object->fetch_doc is an alias.

$was_filtered = $doc_object->was_filtered

Returns true if some filter processed the document

$content_type = $doc_object->content_type;

Fetches the current content type for the document.

Example:

 
    return unless $filter->content_type =~ m!application/pdf!;

$doc_object->is_binary

Returns true if the document's content-type does not match ``text/''.

[ TOC ]


Methods used by filter authors

$file_name = $doc_object->fetch_filename;

Returns a path to the document as stored on disk. This name can be passed to external programs (e.g. catdoc) that expect input as a file name.

If the document is currently in memory then a temporary file will be created. Do not expect the file name passed to be the real path of the document.

The file will be written in binmode if $doc->is_binary is true.

This method is not normally used by end-users of SWISH::Filter.

$doc_object->set_continue;

Processing will continue to the next filter if this is set to a true value. This should be set for filters that change encodings or uncompress documents.

$doc_object->set_content_type( $type );

Sets the content type for a document.

$doc_object->name

Fetches the name of the current file. This is useful for printing out the name of the file in an error message. This is the name passed in to the SWISH::Filter->convert method. It is optional and thus may not always be set.

 
    my $name = $doc_object->name || 'Unknown name';
    warn "File '$name': failed to convert -- file may be corrupt\n";

$doc_object->user_data

Fetches the the user_data passed in to the filter. This can be any data or data structure passed into SWISH::Filter->new.

This is an easy way to pass special parameters into your filters.

Example:

 
    my $data = $doc_object->user_data;
    # see if a choice for the <title> was passed in
    if ( ref $data eq 'HASH' && $data->{pdf2html}{title_field}  {
       ...
       ...
    }

$doc_ref = $filter->run_program( $program, @args );

Runs $program with @args. Must pass in @args.

Under Windows calls IPC::Open2, which may pass data through the shell. Double-quotes are escaped (backslashed) and each parameter is wrapped in double-quotes.

On other platforms a fork and exec is used to avoid passing any data through the shell. Returns a reference to a scalar containing the output from your program, or dies.

This method is intended to read output from a program that converts one format into text. The output is read back in text mode -- on systems like Windows this means \r\n (CRLF) will be convertet to \n.

[ TOC ]


WRITING FILTERS

Filters are standard perl modules that are installed into the SWISH::Filters name space. Filters are not complicated -- see the existing filters for examples.

Filters are linked together in a chain, and have a type and priority that set the order of the filter in the chain. Filters check the content type of the document to see if they should process the document. If the filter processes the document it returns either a file name or a reference to a scalar. Normally a reference to a scalar of the converted document should be returned. If the filter does not process the document then it returns undef and the next filter in the chain has a chance to process the document.

If a filter calls die then the filter is removed from the chain and will not be called again during the same run. Calling die when running with -S http or -S fs has no effect since the program is run once per document.

Once a filter returns something other than undef no more filters will be called. If the filter calls $filter->set_continue then processing will continue as if the file was not filtered. For example, a filter can uncompress data and then set $filter->set_continue and let other filters process the document.

This is the list of methods the filter should or may define (as specificed):

new() * required *

This method returns either an object which provides access to the filter, or undefined if the filter is not to be used.

The new() method is a good place to check for required modules or helper programs. Returning undefined prevents the filter from being included in the filter chain.

filter() * required *

This is the function that does the work of converting a document from one content type to another.

type()

Returns a number from 1 to 10. Filters are sorted (for processing in a specific order) and this number is simply the primary key used in sorting. If not specified the filter's type used for sorting is 2.

priority()

Returns a number from 1 to 10. Filters are sorted (for processing in a specific order) and this number is simply the primary key used in sorting. If not specified the filter's priority is 50.

Again, the point of the type() and priority() methods is to allow setting the sort order of the filters. Useful if you have two filters that for filtering similar content-types, but prefer to use one over the other.

Here's a module to index MS Word documents using the program ``catdoc'':

 
    package SWISH::Filters::Doc2txt;
    use vars qw/ @ISA $VERSION /;

 
    $VERSION = '0.01';
    @ISA = ('SWISH::Filter');

 
    sub new {
        my ( $pack, %params ) = @_;

 
        my $self = bless {
            name => $params{name} || $pack,
        }, $pack;

 
        # check for helpers
        for my $prog ( qw/ catdoc / ) {
            my $path = $SELF->find_binary( $prog );
            unless ( $path ) {
                $self->mywarn("Can not use Filter $pack -- need to install $prog");
                return;
            }
            $self->{$prog} = $path;
        }

 
        return $self;

 
    }

 
    sub filter {
    my ( $self, $document ) = @_;

 
        # Do we care about this document?
        return unless $document->content_type =~ m!application/msword!;

 
        # We need a file name to pass to the catdoc program
        my $file = $document->fetch_filename;

 
        # Grab output from running program
        my $content = $document->run_program( $self->{catdoc}, $file );

 
        return unless $content;

 
        # update the document's content type
        $document->set_content_type( 'text/plain' );

 
        # return the document
        return \$content;
    }
    1;

[ TOC ]


TESTING

Filters can be tested with the swish-filter-test program. Run:

 
   swish-filter-test -man

for documentation.

[ TOC ]


SUPPORT

Please contact the Swish-e discussion list. http://swish-e.org

[ TOC ]


Bugs, todo items, and other notes

I wonder if the filters shouldn't just register the content types they handle instead of checking the content type. Would want to be able to register regular expressions.

[ TOC ]


AUTHOR

Bill Moseley

[ TOC ]


COPYRIGHT

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. [ TOC ]


0[swish-e.html]INSTALL.html꫿2s6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: INSTALL - Swish-e Installation Instructions

Swish-E Logo


INSTALL - Swish-e Installation Instructions


[ TOC ]

OVERVIEW

This document describes how to download, build and install Swish-e from source. Also below is a basic overview of using Swish-e to index documents with pointers to other more advanced examples.

This document also provides instructions on how to get help installing and using Swish-e (and the important information you should provide when asking for help). Please read these instructions before requesting help on the Swish-e discussion list. See QUESTIONS AND TROUBLESHOOTING.

Although building from source is recommended, some OS distributions (e.g. Debian) provide pre-compiled binaries. Check with your distribution for available packages. Build from source if your distribution does not offer the current version of swish-e.

Also, please read the Swish-e FAQ SWISH-FAQ as it answers many frequently asked questions.

Swish-e knows how to index HTML, XML, and plain text documents. Helper applications and other tools are used to convert documents such as PDF or MS Word into a format that swish-e can index. These additional applications and tools (listed below) must be installed separately. The process of converting douments is called ``filtering.''

NOTE: Swish-e version 4.2.0 installs a lot more files when running ``make install''. Be aware that the Swish-e documentation may thus include errors about where files are located. Please notify the swish-e discussion list of any documentation errors.

[ TOC ]


Upgrading from previous versions of Swish-e

If upgrading from a previous version of Swish-e read the CHANGES page before installing. The Swish-e index format may have changed and existing indexes may not work with the newer version of Swish-e.

If you have existing indexes you may need to reindex your data before running the ``make install'' step described below. Swish-e may be run from the build directory after compiling but before installation.

[ TOC ]


Windows Users

A Windows binary version is available as a separate download from the Swish-e site (http://swish-e.org). Many of the installation instructions below will not apply to Windows users; the Windows version is pre-compiled and includes libxml2, zlib, xpdf and catdoc.

A number of Perl modules may also be needed. These can be installed with ActiveState's PPM utility.

 
   libwww-perl   - the LWP modules (for spidering)
   HTML-Tagset   - used by web spider
   HTML-Parser   - used by web spider
   MIME-Types    - used for filtering documents when not spidering
   HTML-Template - formatting output from swish.cgi (optional)
   HTML-FillInForm (if HTML-Template is used)

[ TOC ]


SYSTEM REQUIREMENTS

Swish-e makes use of a number of libraries and tools that are not distributed with Swish-e. Some libraries need to be installed before building Swish-e from source, where other tools can be installed at any time. See below for details.

[ TOC ]


Software Requirements

Swish-e is written in C and up to this time has been tested on a number of platforms, including Sun/Solaris, Dec Alpha, BSD, Linux, OS X, and Open VMS.

The GNU C compiler, gcc, and GNU make are strongly recommended. Repeat: you will find life easier if you use the GNU tools.

[ TOC ]


Optional but Recommended Packages

Most of these packages listed below are available as easily installable packages. Check your operating system vendor, or install from source. Most are very common packages that may already be installed on your computer.

As noted below, some packages need to be installed before building Swish-e from source, while others may be added after Swish-e is installed.

  • Libxml2

    Libxml2 is very strongly recommended. It is used for parsing both HTML and XML files. Swish-e can be built and installed without libxml2, but the HTML parser built into swish-e is not as accurate as libxml2.

     
        http://xmlsoft.org/

    For swish-e to use libxml2 it must be installed before building swish-e.

    If libzml2 is installed in a non-standard location (e.g. libxml2 is built with --prefix $HOME/local) then make sure you add the bin directory to your $PATH before building swish-e. Swish-e's configure script uses a program created by libxml2 (xml2-config) to find the location of libxml2. Use ``which xml2-config'' to verify the program can be found where expected.

  • Zlib Compression

    The Zlib compression library is commonly installed on most systems and is recommended for use with Swish-e. Zlib is used for compressing text stored in the swish-e index.

     
        http://www.gzip.org/zlib/

    Zlib must be installed before building swish-e.

  • Perl Modules

    Although Swish-e is a compiled C program, many support features use Perl. For example, the web spiders are written in Perl, and modules to help with filtering documents are also written in Perl.

    The following Perl modules may be required. Check your current Perl installation as many may already be installed.

     
        LWP
        URI
        HTML::Parser
        HTML::Tagset
        MIME::Types (optional)

    Not that installing Bundle::LWP with the CPAN module

     
        perl -MCPAN -e 'install Bundle::LWP'

    will install many of the above.

    If you wish to use HTML-Template with swish.cgi to generate output:

     
        HTML::Template
        HTML::FillInForm

    If you wish to use Template-Toolkit with swish.cgi to generate output install:

     
        Template

    Questions about installing these modules may be sent to the swish-e discussion list.

    The ``search.cgi'' example script requires both Template-Toolkit and HTML::FillInForm.

  • Indexing PDF Documents

    Indexing PDF files requires the xpdf package. This is a common package available with most operating systems and often provided as a package.

     
        http://www.foolabs.com/xpdf/

    Xpdf may be added after swish-e is installed.

  • Indexing MS Word Documents

    Indexing MS Word documents requires the Catdoc program.

     
        http://www.45.free.net/~vitus/ice/catdoc

    Catdoc may be added after swish-e is installed.

  • Indexing MP3 ID3 Tags

    Indexing MP3 ID3 Tags requires the MP3::Tag Perl module. See http://search.cpan.org. MP3::Tag may be installed after swish-e is installed.

  • Indexing MS Excel Files

    Indexing MS Excel files is supported by the following Perl modules, also available at http://search.cpan.org.

     
        Spreadsheet::ParseExcel
        HTML::Entities

    These Perl modules may be installed after swish-e is installed.

[ TOC ]


INSTALLATION

Here are brief installation instructions that should work in most cases. Following this section are more detailed instructions and examples.

[ TOC ]


Building Swish-e

Download swish-e using your favorite web browser or a utility like wget, lynx, or lwp-download. Unpack and build using the following steps:

Note: ``swish-e-2.4.0'' is used as an example. Download the most current version available and adjust the commands below! Also, if running Debian, see notes below on building a .deb package from the swish-e source package.

The ``$'' symbol indicates steps run as an unprivileged user. The ``#'' indicates steps run as the superuser (root).

 
    $ wget http://swish-e.org/Download/swish-e-2.4.0.tar.gz
    $ gzip -dc swihs-e-2.4.0.tar.gz | tar xof -
    $ cd swish-e-2.4.0  (this directory will depend on the version of Swish-e)

 
    $ ./configure
    $ make
    $ make check
    ...
    ==================
    All 3 tests passed
    ==================

 
    $ su root  (or use sudo)
    (enter password)

 
    # make install
    # exit
    $ swish-e -V
    SWISH-E 2.4.0

IMPORTANT: Once installed do not run swish-e as the superuser (root) -- root is only required during the installation step when installing into system directories. Please do not break this rule.

NOTE: If you are upgrading from an older version of swish-e be sure and review the CHANGES file. Old index files may not be compatible with the newer version of swish-e. After building swish-e (before running ``make install''), swish-e can be run from the build directory:

 
    $ src/swish-e -V

To minimize downtime, create new index files before running ``make install'' by using swish-e from the build directory. Then copy the index files to the live location and run ``make install'':

  >
    $ src/swish-e -c /path/to/config -f index.new

Keep in mind that where you index from may effect the paths stored in the index file.

[ TOC ]


Installing without root access

Here's another installation example. This might be used if you do not have root access or you wish to install swish someplace other than /usr/local.

This example also shows building Swish-e in a ``build'' directory separate from where the source files are located. This is the recommended way to build Swish-e, but requires GNU Make. Without GNU Make you will likely need to build from within the source directory as shown in the previous example.

 
    $ tar zxof swish-e-2.4.0.tar.gz  (GNU tar with "z" option)
    $ mkdir build
    $ cd build

Note that the current directory is not where Swish-e was unpacked.

Swish-e uses a configure script. configure has many options, but uses reasonable and standard defaults. Running

 
    $ ../swish-e-2.4.0/configure --help

will display the options.

Two options are of common interest: --prefix sets the top-level installation directory, and --disable-shared will link swish-e statically, which may be needed on some platforms (Solaris 2.6 perhaps).

Platforms vary on how to link against libraries when libraries are installed in non-standard locations. Swish-e uses the GNU autoconf tools for building the package. Autoconf is good at building and testing, but still requires you to provide information appropriate for your platform. This may mean reading the manual page for your compiler and linker to see how to specify non-standard file locations.

For most unix-type platforms you use LDFLAGS and CPPFLAGS environment variables to specify paths to include (header) files and libraries not in standard locations.

Now, in this example we do not have root access, and we have installed libxml2 and libz in $HOME/local. Swish-e will also be installed in $HOME/local (by using the --prefix setting).

In this case you would need to add $HOME/local/bin to the start of your shell's PATH setting. This is required because libxml2 installs a program that is used when running the configure script. Before running configure type:

 
    $ which xml2-config

And it should list $HOME/local/bin/xml2-config.

Now run configure (remember, we are in a separate ``build'' directory):

 
    $ ../swish-e-2.4.0/configure \
        --prefix=$HOME/local \
        CPPFLAGS=-I$HOME/local/include \
        LDFLAGS="-R$HOME/local/lib -L$HOME/local/lib"

 
    $ make >/dev/null  (redirect output to only see warnings and errors)

 
    $ make check
    ...
    ==================
    All 3 tests passed
    ==================

 
    $ make install
    $ $HOME/local/bin/swish-e -V 
    SWISH-E 2.4.0

Note the use of dobule quotes in the LDFLAGS line above. This allows $HOME to be expanded.

[ TOC ]


Run-time paths

The -R option says to add that path to the paths used to find shared libraries at run time. This path is stored in the swish-e binary. When swish-e is run it will look in this directory for shared libraries.

Some platforms may not support the -R option and you may instead have to set the LD_RUN_PATH environment variable before running make.

Some systems such as Redhad do not look in /usr/local/lib for libraries. In these cases you can either use -R as above when building swish-e or add /usr/local/lib to /etc/ld.so.conf and run ldconfig as root.

If all else fails, you may need to actually read the man pages for your platform.

[ TOC ]


Building a Debian Package

The Swish-e distribution includes the files requires to build a Debian pakcage.

 
    $ tar zxof swish-e-2.4.0.tar.gz  (GNU tar with "z" option)
    $ cd swish-e-2.4.0
    $ fakeroot debian/rules binary
    [lots of output]
    dpkg-deb: building package `swish-e' in `../swish-e_2.4.0-0_i386.deb'.
    $ su
    # dpkg -i ../swish-e_2.4.0-0_i386.deb

[ TOC ]


What's installed

Swish installs a number of files. By default all files are installed below /usr/local, but this can be changed by setting --prefix when running configure (as shown above). Individual paths may also be set. Run configure --help for details.

 
   $prefix/bin/swish-e         The swish-e binary program
   $prefix/share/doc/swish-e/  Full documentation and examples
   $prefix/lib/libswish-e      The swish-e C library
   $prefix/include/swish-e.h   The library header file
   $prefix/man/man1/           Documentation as manual pages
   $prefix/lib/swish-e/        Helper programs (spider.pl, swishspider, swish.cgi)
   $prefix/lib/swish-e/perl/   Perl helper modules

Note that the Perl modules are not installed in the system Perl library. Swish-e and the Perl scripts that require the modules know where to find the modules, but the perldoc program used for reading documentation does not. This can be corrected by adding $prefix/lib/swish-e and $prefix/lib/swish-e/perl to the PERL5LIB environment variable.

[ TOC ]


Documentation

Documentation can be found in the $prefix/share/doc/swish-e directory. Documentation can also be read on-line at the Swish-e web site:

 
    http://swish-e.org/

[ TOC ]


The Swish-e documentation as man(1) pages

Running ``make install'' installs some of the Swish-e documentation as man pages. The following man pages are installed:

 
    SWISH-FAQ(1)
    SWISH-CONFIG(1)
    SWISH-RUN(1)
    SWISH-LIBRARY(1)

The man pages are installed in the system man directory. This directory is determined by running ./configure and can be set by passing the directory when running ./configure.

For example,

 
    ./configure --mandir=/usr/local/doc/man

The man director is relative to the --prefix setting. If you use --prefix you do not normally need to also specify --mandir.

Information on running ./configure can be found by typing:

 
    ./configure --help

[ TOC ]


Join the Swish-e discussion list

The final step when installing Swish-e is to join the Swish-e discussion list.

The Swish-e discussion list is the place to ask questions about installing and using Swish-e, see or post bug fixes or security announcements, and a place where you can offer help to others. Please do not contact the developers directly.

The list is typically very low traffic, so it won't overload your inbox. Please take time to subscribe. See http://Swish-e.org.

If you are using Swish-e on a public site, please let the list know so it can be added to the list of sites that use Swish-e!

Please review the next section before posting a question to the Swish-e list.

[ TOC ]


QUESTIONS AND TROUBLESHOOTING

Support for installation, configuration and usage is available via the Swish-e discussion list. Visit http://swish-e.org for information. Do not contact developers directly for help -- always post your question to the list.

It's very important to provide the right information when asking for help.

Please search the Swish-e list archive before posting a question, and check the SWISH-FAQ to see if your question hasn't already been asked.

Before posting use tools available to narrow down the problem.

Swish-e has the -T, -v, and -k switches that may help resolve issues. These switches are described on the SWISH-RUN page. For example, if you cannot find a document by a keyword that you believe should be indexed try indexing just that single file, and use the -T INDEXED_WORDS option to see if the word is actually being indexed. First try without any changes to default settings:

 
    swish-e -i testdoc.html -T indexed_words | less

if that works then add in your configuration file:

 
    swish-e -i testdoc.html -c swish.conf -T indexed_words | less

If that still isn't working as you expect try to reduce the test document to a very small example. This will be very helpful when asking for help.

Other tools are to use -H9 when searching to display full headers in search results. Look at the ``Parsed Words'' header to see what words swish-e is searching for.

[ TOC ]


When posting please provide the following information:

Use these guidelines when asking for help. The most important tip is to provide the least amount of information that can be used to reproduce your problem. Do not paraphrase output -- copy-and-paste -- but trim text that is not necessary.

  • The exact version of Swish-e that you are using. Running Swish-e with the -V switch will print the version number. Also, supply the output from uname -a or similar command that identifies the operating system you are running on. If you are running an old version of swish be prepared for a response to your question of ``upgrade.''

  • A summary of the problem. This should include the commands issued (e.g. for indexing or searching) and their output, and why you don't think it's working correctly. Please cut-n-paste the exact commands and their output instead of retyping to avoid errors.

  • Include a copy of the configuration file you are using, if any. Swish-e has reasonable defaults so in many cases you can run it without using a configuration file. But, if you need to use a configuration file, reduce it down to the absolute minimum number of commands required to demonstrate your problem. Again, cut-n-paste.

  • A small copy of a source document that demonstrates the problem.

    If you are having problems spidering a web server, use lwp-download or wget to copy the file locally to make sure you can index the document using the file system method. This will help determine if the problem is with spidering or with indexing.

    If you expect help with spidering, don't post fake URLs, as it makes it impossible to test. If you don't want to expose your web page to the people on the Swish-e list, find some other site to test spidering on. If that works, but you still cannot spider your own site then post your real URL if you want help, or make a test document available via some other source.

  • If you are having trouble building Swish-e please cut-n-paste the output from make (or from ./configure if that's where the problem is).

The key is to provide enough information so that others may reproduce the problem.

[ TOC ]


ADDITIONAL INSTALLATION OPTIONS

These steps are not required for normal use of Swish-e.

[ TOC ]


The SWISH::API Perl Module

The Swish-e distribution includes a module that provides a Perl interface to the Swish-e C library. This module provides a way to search a Swish-e index without running the swish-e program. Searching an index will be many times faster when running under a persistent environment such as Apache/mod_perl with the SWISH::API module.

See the perl/README file for information on installing and using the SWISH::API Perl module.

[ TOC ]


Creating PDF and Postscript documentation

The Swish-e documentation in HTML format was created with Pod::HtmlPsPdf, a package of Perl modules written and/or modified by Stas Bekman to automate the conversion of documents in pod format (see perldoc perlpod) to HTML, Postscript, and PDF. A slightly modified version of this package is included with the Swish-e distribution and used for building the HTML.

If your system has the necessary tools to build Postscript and the converter ps2pdf installed, you may be able to build the Postscript and PDF versions of the documentation. After you have run ./configure, type from the doc directory of the distribution:

 
    make pdf

And with any luck you will end up with the these two files in the top-level dir>ectory:

 
    swish-e_documentation.pdf
    swish-e_documentation.ps

Most people find reading the documentation in HTML most convenient.

[ TOC ]


GENERAL CONFIGURATION AND USAGE

This section should give you a basic overview of indexing and searching with Swish-e. Other examples can be found in the conf directory which will step you through a number of different configurations. Also, please review the SWISH-FAQ.

Swish-e is a command line program. The program is controlled by passing switches on the command line. A configuration file may be used, but often is not required. Swish-e does not include a graphical user interface. There are example CGI scripts provided in the distribution, but they require additional setup to use.

[ TOC ]


Introduction to Indexing and Searching

Swish-e can index files on the local file system. For example, running:

 
     swish-e -i /var/www/htdocs

will index all files in the /var/www/htdocs directory. You may specify one or more files or directories with the -i option. By default this will create an index (which is made up of more than one file) in the current directory called index.swish-e.

Then to search the resulting index for a given word:

 
     swish-e -w apache

This will find the word ``apache'' in the body or title of the indexed documents.

As mentioned above, Swish-e will index all files in a directory unless instructed otherwise. So if /var/www/htdocs contains non-HTML then you will need a configuration file to limit the files that Swish-e indexes. Create a file called ``swish.conf'':

 
    # Example configuration file

 
    # Tell swish what to index (same as -i switch above)
    IndexDir /var/www/htdocs

 
    # Only index HTML and text files
    IndexOnly .htm .html .txt

 
    # Tell swish that .txt files are to use the text parser.
    IndexContents TXT* .txt

 
    # Otherwise, use the HTML parser
    DefaultContents HTML*

Save that as ``swish.conf'' and reindex:

 
    swish-e -c swish.conf

The Swish-e configuration settings are described in the SWISH-CONFIG manual page. Order of statements in the configuration file is typically not important, although some statements depend on previously set statements. There are many possible settings. Good advice is to use as few settings as possible when first starting out with Swish-e.

The runtime options (switches) are described in the SWISH-RUN manual page. You may also see a summary of options by running:

 
    swish-e -h

Swish-e has two other methods reading input files. One method uses a Perl helper script and the LWP Perl library to spider remote web sites:

 
    swish-e -S http -i http://localhost/index.html -v2

This will spider the web server running on the local host. The -S option defines the input source method to be ``http'', -i specifies the URL to spider, and -v sets the verbose level to two. There are a number of configuration options specific to the -S http input source. See SWISH-CONFIG. Note that only files of Content-Type text/* will be indexed.

The -S http method is deprecated in favor of the next input method.

The other method is a general purpose input method where Swish-e reads input from a program that produces documents in a special format. The program might read and format data stored in a database, or parse and format messages in a mailing list archive, or run a program that spiders web sites like the previous method.

The Swish-e distribution includes a spider program that uses this method of input. This spider program is much more configurable and feature-rich than the previous -S http method.

To duplicate the previous example create a configuration file called ``swish2.conf''

 
    # Example for spidering
    # Use the "spider.pl" program included with Swish-e
    IndexDir spider.pl

 
    # Define what site to index
    SwishProgParameters default http://localhost/index.html

Then create the index using the command:

 
    swish-e -S prog -c swish2.conf

This says to use the -S prog input source method. Note that in this case the IndexDir settings does not list a file or directory to index, but a program name run. This program, spider.pl, does the work of fetching the documents from the web server and passing them to Swish-e for indexing.

The SwishProgParameters options is a special feature that allows passing command line parameters to the program specified with IndexDir. In this case passing the word ``default'' which tells spider.pl to use default settings, and the URL to spider.

Running a script under Windows requires specifying the interpreter (e.g. perl.exe) and then use SwishPropParameters to specify the script and the script's parameters. See Notes when using -S prog on MS Windows on the SWISH-RUN page.

The advantage of the -S prog method of spidering (over the previous -S http method) is that the Perl code is only compiled once instead of for every document fetched from the web server. In addition it is a much more advanced spider with many, many features. Still, as used here, spider.pl will automatically index PDF or MS Word documents if (when) Xpdf and Catdoc are installed.

A special form of the -S prog input source method is:

 
    ./myprog --option | swish-e -S prog -i stdin -c config

This allows running Swish-e from a program (instead of running the external program from Swish-e). Thus, this also can be done:

 
    ./myprog --option > outfile
    swish-e -S prog -i stdin -c config < outfile

or

 
    ./myprog --option > outfile
    cat outfile | swish-e -S prog -i stdin -c config

One final note about the -S prog input source method. The program specified with -i or IndexDir needs to be an absolute path. The exception is when the program is installed in the ``libexecdir'' directory and then a plain program name may be specified (as in the example showing spider.pl above).

All three input source methods are described in more detail on the SWISH-RUN page.

[ TOC ]


Metanames and Properties

There's two key Swish-e concepts that you need to be familiar with: Metanames and Properties.

  • Metanames

    Swish-e creates a reverse index. Just like an index in a book, you look up a word and it lists the pages (or documents) where that word can be found.

    Swish-e can create multiple index tables within the same index file. For example, you might want to create an index of just words in HTML titles so searches can be limited to just titles. Or you might have descriptive words in a meta tag called ``keywords'' you would like to search.

    Some database systems might call these different ``fields'' or ``columns'', but swish-e calls them MetaNames (as a result of first indexing HTML meta tags).

    To find documents with ``foo'' in their title you might run:

     
        swish-e -w swishtitle=foo

    or more advanced:

     
        swish-e -w swishtitle=(foo or bar) or swishdefault=(baz)

    The Metaname ``swishdefault'' is the name used by Swish-e if no other name is specified. The following two searches are the same:

     
        swish-e -w foo
        swish-e -w swishdefault=foo

    When indexing HTML documents Swish-e indexes words in the body and title under the Metaname ``swishdefault''.

  • Properties

    Swish-e search results is a list of files -- actually internally swish uses file numbers. Data can be associated with each file number when indexing. For example, by default Swish-e associates the file's name, title, last modified date, and size with the file number and these items can be printed in search results. In Swish-e this associated data is called a file's Properties. Properties can be any data you wish to associated with a document -- even the entire text of the document can be stored in the index. What data is stored as a Property is controlled by the PropertyNames (and others) configuration directive.

    What properties are printed with search results depends on the -x or -p switches. By default Swish-e returns the rank, path/URL, title and file size in bytes for each result.

[ TOC ]


Getting Started With Swish-e

Swish-e reads a configuration file (see SWISH-CONFIG) for directives that control what and how Swish-e indexes files. Swish-e is also controlled by command line arguments (see SWISH-RUN). Many of the command line arguments have equivalent configuration directives (e.g. -i and IndexDir).

Swish-e does not require a configuration file, but most people need to change the default behavior by placing settings in a configuration file.

To try the examples below you may change to the tests subdirectory of the distribution. The tests will use the *.html files in this directory when creating the test index. You may wish to review these *.html files to get an idea of the various native file formats that Swish-e supports.

You may also use your own test documents. It's recommended to use small test documents when first using Swish-e.

[ TOC ]


Step 1: Create a Configuration File

The configuration file controls what and how Swish-e indexes. The configuration file consists of directives, comments, and blank lines. The configuration file can be any name you like.

This example will work with the documents in the tests directory. You may wish to review the tests/test.config configuration file used for the make test tests.

For example, a simple configuration file (swish-e.conf):

 
    # Example Swish-e Configuration file

 
    # Define *what* to index
    # IndexDir can point to a directories and/or a files
    # Here it's pointing to the current directory
    # Swish-e will also recurse into sub-directories.
    IndexDir .

 
    # But only index the .html files
    IndexOnly .html

 
    # Show basic info while indexing
    IndexReport 1

And that's a simple configuration file. It says to index all the .html files in the current directory and sub-directories, if any, and provide some basic output while indexing.

As mentioned above, the complete list of all configuration file directives are described in SWISH-CONFIG.

[ TOC ]


Step 2: Index your Files

Run Swish-e using the -c switch to specify the name of the configuration file.

 
    swish-e -c swish-e.conf

 
    Indexing Data Source: "File-System"
    Indexing "."
    Removing very common words...
    no words removed.
    Writing main index...
    Sorting words ...
    Sorting 55 words alphabetica>lly
    Writing header ...
    Writing index entries ...
      Writing word text: Complete
      Writing word hash: Complete
      Writing word data: Complete
    55 unique words indexed.
    4 properties sorted.                                              
    5 files indexed.  1252 total bytes.  140 total words.
    Elapsed time: 00:00:00 CPU time: 00:00:00
    Indexing done!

This created the index file index.swish-e. This is the default index file name unless the IndexFile directive is specified in the configuration file:

 
    IndexFile ./website.index

You may use the -f switch to specify a index file at indexing time. The -f option overrides a IndexFile setting in the configuration file.

[ TOC ]


Step 3: Search

You specify your search terms with the -w switch. For example, to find the files that contain the word sample you would issue the command:

 
    swish-e -w sample

This example assumes that you are in the tests directory. Swish-e returns in response to that command the following:

 
    swish-e -w sample

 
    # SWISH format: 2.4.0
    # Search words: sample
    # Number of hits: 2
    # Search time: 0.000 seconds
    # Run time: 0.005 seconds
    1000 ./test_xml.html "If you are seeing this, the METATAG XML search was successful!" 159
    1000 ./test.html "If you are seeing this, the test was successful!" 437
    .

So the word sample was found in two documents. The first number shown is the relevance or rank of the search term, followed by the file containing the search term, the title of the document, and finally the length of the document.

The period (``.'') alone at the end marks the end of results.

Much more information may be retrieved while searching by using the -x and -H switches (see SWISH-RUN) and by using Document Properties (see SWISH-CONFIG).

[ TOC ]


Phrase Searching

To search for a phrase in a document use double-quotes to delimit your search terms. (The default phrase delimiter is set in src/swish.h.)

You must protect the quotes from the shell.

For example, under Unix:

 
    swish-e -w '"this is a phrase" or (this and that)'
    swish-e -w 'meta1=("this is a phrase") or (this and that)'

Or under Windows command.com shell.

 
    swish-e -w \"this is a phrase\" or (this and that)

The phrase delimiter can be set with the -P switch.

[ TOC ]


Boolean Searching

You can use the Boolean operators and, or, or not in searching. Without these Boolean, Swish-e will assume you're anding the words together.

Here are some examples:

 
    swish-e -w 'apples oranges'
    swish-e -w 'apples and oranges'  ( Same thing )

 
    swish-e -w 'apples or oranges'

 
    swish-e -w 'apples or oranges not juice' -f myIndex 

retrieves first the files that contain both the words ``apples'' and ``oranges''; then among those the ones that do not contain the word ``juice''

A few others to ponder:

 
    swish-e -w 'apples and oranges or pears'
    swish-e -w '(apples and oranges) or pears'  ( Same thing )
    swish-e -w 'apples and (oranges or pears)'  ( Not the same thing )

Swish processes the query left to right.

See SWISH-SEARCH for more information.

[ TOC ]


Context Searching

The -t option in the search command line allows you to search for words that exist only in specific HTML tags. Each character in the string you specify in the argument to this option represents a different tag in which the word is searched; that is you can use any combinations of the following characters:

 
    H search in all <HEAD> tags
    B search in the <BODY> tags
    t search in <TITLE> tags
    h is <H1> to <H6> (header) tags
    e is emphasized tags (this may be <B>, <I>, <EM>, or <STRONG>)
    c is HTML comment tags (<!-- ... -->)

For example:

 
    # Find only documents with the word "linux" in the <TITLE> tags.
    swish-e -w linux -t t

 
    # Find the word "apple" in titles or comments
    swish-e -w apple -t tc

[ TOC ]


META Tags

As mentioned above, Metanames are a way to define ``fields'' in your documents. You can use the Metanames in your queries to limit the search to just the words contained in that META name of your document. For example, you might have a META tagged field in your documents called subjects and then you can search your documents for the word ``foo'' but only return documents where ``foo'' is within the subjects META tag.

Document Properties are somewhat related: Properties allow the content of a META tag in a source document to be stored within the index, and that text to be returned along with search results.

META tags can have two formats in your documents.

 
    <META NAME="keyName" CONTENT="some Content">

And in XML format

 
    <keyName>
        Some Content
    </keyName>

If using libxml, you can optionally use a non-html tag as a metaname:

 
    <html>
    <body>
        Hello swish users!
        <keyName>
            this is meta data
        </keyName>.
    </body>

This, of course, is invalid HTML.

To continue with our sample Swish-e.conf file, add the following lines:

 
    # Define META tags
    MetaNames meta1 meta2 meta3

Reindex to include the changes:

 
    swish-e -c swish-e.conf

Now search, but this time limit your search to META tag ``meta1'':

 
    swish-e -w 'meta1=metatest1'

Again, please see SWISH-RUN and SWISH-CONFIG for complete documentation of the various indexing and searching options.

[ TOC ]


Spidering and Searching with a Web form.

This example demonstrates how to spider a web site and setup the included CGI script to provide a web-based search page. This example uses Perl programs included in the Swish-e distribution: spider.pl will be used for reading files from the web server, and swish.cgi will provide the web search form and display results.

As an example we will index the Apache Web Server documentation installed on the local computer at http://localhost/apache_docs/index.html

  1. Make a Working Directory

    Create a directory to store the Swish-e configuration and the Swish-e index.

     
        ~$ mkdir web_index
        ~$ cd web_index/
        ~/web_index$

  2. Create a Swish-e Configuration file

     
        ~/web_index$ cat swish.conf 
        # Swish-e config to index the Apache documentation
        #
        # Use spider.pl for indexing (location of spider.pl set at installation time)
        IndexDir spider.pl

     
        # Use spider.pl's default configuration and specify the URL to spider
        SwishProgParameters default http://localhost/apache_docs/index.html

     
        # Allow extra searching by title, path
        Metanames swishtitle swishdocpath

     
        # Set StoreDescription for each parser
        #  to display context with search results
        StoreDescription TXT* 10000
        StoreDescription HTML* <body> 10000

  3. Generate the Index

    Now run swish-e to create the index:

     
        ~/web_index$ swish-e -S prog -c swish.conf 

     
        Indexing Data Source: "External-Program"
        Indexing "spider.pl"
        /usr/local/lib/swish-e/spider.pl: Reading parameters from 'default'

     
        Summary for: http://localhost/apache_docs/index.html
            Duplicates:     4,188  (349.0/sec)
        Off-site links:       276  (23.0/sec)
               Skipped:         1  (0.1/sec)
           Total Bytes: 2,090,125  (174177.1/sec)
            Total Docs:       147  (12.2/sec)
           Unique URLs:       149  (12.4/sec)
        Removing very common words...
        no words removed.
        Writing main index...
        Sorting words ...
        Sorting 7736 words alphabetically
        Writing header ...
        Writing index entries ...
          Writing word text: Complete
          Writing word hash: Complete
          Writing word data: Complete
        7736 unique words indexed.
        5 properties sorted.                                              
        147 files indexed.  2090125 total bytes.  200783 total words.
        Elapsed time: 00:00:13 CPU time: 00:00:02
        Indexing done!

    The above output is actually a mix of output from both swish-e and from spider.pl. Spider.pl reports the ``Summary for: http://localhost/apache_docs/index.html''.

    Also note that swish-e knows to find spider.pl at /usr/local/lib/swish-e/spider.pl. The script installation directory (called libexecdir) is set at configure time. You can see your setting by running swish-e -h:

     
        ~/web_index$ swish-e -h | grep libexecdir
         Scripts and Modules at: (libexecdir) = /usr/local/lib/swish-e

    This directory will be needed when setting up the CGI script in the next step.

    Finally, verify that the index can be searched from the command line:

     
        ~/web_index$ swish-e -w installing -m3
        # SWISH format: 2.4.0
        # Search words: installing
        # Removed stopwords: 
        # Number of hits: 17
        # Search time: 0.018 seconds
        # Run time: 0.050 seconds
        1000 http://localhost/apache_docs/install.html "Compiling and Installing Apache" 17960
        718 http://localhost/apache_docs/install-tpf.html "Installing Apache on TPF" 25734
        680 http://localhost/apache_docs/windows.html "Using Apache with Microsoft Windows" 27165
        .

    Now try limiting the search to the title:

     
        ~/web_index$ swish-e -w swishtitle=installing -m3 
        # SWISH format: 2.3.5
        # Search words: swishtitle=installing
        # Removed stopwords: 
        # Number of hits: 2
        # Search time: 0.018 seconds
        # Run time: 0.048 seconds4
        1000 http://localhost/apache_docs/install-tpf.html "Installing Apache on TPF" 25734
        1000 http://localhost/apache_docs/install.html "Compiling and Installing Apache" 17960
        .

    Note that the above can also be done using the -t option:

     
        ~/web_index$ swish-e -w installing -m3 -tH

  4. Setup the CGI script

    Swish-e does not include a web server, therefore you must use your locally installed web server. Apache is highly recommended, of course.

    Locate your web server's CGI directory. This may be a cgi-bin directory in your home directory or a central cgi-bin directory setup by the web server administrator. Once located copy the swish.cgi script into the cgi-bin directory.

    Where CGI scripts can be located depends completely on the web server used and how it is configured. See your web server's documentation or your site's administrator for additional information.

    This example will use a site cgi-bin directory located at /usr/lib/cgi-bin. Copy the swish.cgi script into the cgi-bin directory. Again, we will need the location of the libexecdir directory:

     
        ~/web_index$ swish-e -h | grep libexecdir
         Scripts and Modules at: (libexecdir) = /usr/local/lib/swish-e

     
        ~/web_index$ cd /usr/lib/cgi-bin
        /usr/lib/cgi-bin$ su
        Password: 
        /usr/lib/cgi-bin# cp /usr/local/lib/swish-e/swish.cgi .

    If your operating system supports symbolic links, AND your web server allows programs to be symbolic links, then you may wish to create a link to the swish.cgi program instead.

     
        /usr/lib/cgi-bin# ln -s /usr/local/lib/swish-e/swish.cgi

    We need to tell the swish.cgi script where to look for the index created in the previous step. It's also recommended to enter the path to the swish-e binary, otherwise the swish.cgi script will look for the binary in the PATH, and that may change when running under the CGI environment.

    Here's the configuration file:

     
        /usr/lib/cgi-bin# cat .swishcgi.conf 
        return {
            title        => 'Search Apache Documentation',
            swish_binary => '/usr/local/bin/swish-e',
            swish_index  => '/home/moseley/web_index/index.swish-e',
        }

    Now, test the script from the command line as a normal user:

     
        /usr/lib/cgi-bin# exit
        exit

     
        /usr/lib/cgi-bin$  ./swish.cgi | head
        Content-Type: text/html; charset=ISO-8859-1

     
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
            <head>
               <title>
                  Search Apache Documentation
               </title>
            </head>
            <body>

    Notice that the CGI script returns the HTTP header (Content-Type) and the body of the web page, just like a well behaved CGI scrip should do.

    Now test using the web server (this step depends on the location of your cgi-bin directory). This example uses the ``GET'' command that is part of the LWP Perl library, but any web browser can run this test.

     
        /usr/lib/cgi-bin$ GET http://localhost/cgi-bin/swish.cgi | head
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tranitional//EN">
        <html>
            <head>
               <title>
                  Search Apache Documentation
               </title>
            </head>
            <body>
                <h2>

    The script reports errors to stderr, so consult the web server's error log if problems occur. The message ``Service currently unavailable'' reported by running swish.cgi typically indicates a configuration error, and the exact problem will be listed in the web server's error log.

    Detailed instructions on using the swish.cgi script and debugging tips can be found by running:

     
        $ perldoc swish.cgi

    while in the cgi-bin directory where swish.cgi was copied.

    The spider program spider.pl also has a large number of configuration options.

    Documentation is also available in the directory $prefix/share/doc/swish-e or at http://swish-e.org.

    Note: Also check out the search.cgi script found at the same location as the swish.cgi script. This is more of a skeleton script for those that want to create a custom search script.

Now you are ready to search.

[ TOC ]


Indexing Other Types of Documents - Filtering

Swish-e can only index HTML, XML and text documents. In order to index other documents such as PDF or MS Word documents you must use a utility to convert or ``filter'' those documents.

How documents are filtered with Swish-e has changed over time. This has resulting in a bit of confusion. It's also a somewhat complex process as different programs need to communicate with each other.

You may wish to read the Swish-e FAQ question on filtering before continuing here. How Do I filter documents?

[ TOC ]


Filtering Overview

There's two ways to filter documents with Swish-e. Both are described in the SWISH-CONFIG man page. They are using the FileFilter directive and the SWISH::Filter perl module.

The FileFilter directive is a general purpose method of filtering. It allows running of an external program for each document processed (based on file extension), and requires. The external programs open an input file, convert as needed, and write their output to standard output.

Previous versions of Swish-e (before 2.4.0) used a collection of filter programs for converting files such as PDF or MS Word documents. The external programs call other program do to the work of filtering (e.g. pdftotext to extract the contents from PDF files). Although these filter programs are still included with the Swish-e distribution as examples, it is not recommended to use the SWISH::Filter method instead.

One disadvantage of using FileFilter is that the filter is called once for every document that needs to be filtered. This can slow down the indexing process.

The SWISH::Filter Perl module works very much like the old system and uses the same helper programs. But, it provides a single interface for filtering all types of documents. The advantage of SWISH::Filter is that it is built into the program used for spidering web sites (spider.pl), so all that's required is installing the filter programs that do the actual work of filtering (e.g. catdoc, xpdf). (The Windows binary includes some of the filter programs.)

But, Swish-e will not use SWISH::Filter by default when using the file system method of indexing. To use SWISH::Filter when indexing by file system method (-S fs) you can use a FileFilter directive with the ``swish_filter.pl'' filter (which is just a program that uses SWISH::Filter), or use the -S prog method of indexing and use the DirTree.pl program for fetching documents. DirTree.pl is included with the Swish-e distribution and is designed to work with SWISH::Filter. Using DirTree.pl will likely be faster way to index since the SWISH::Filter set of modules do not need to be compiled for every document that needs to be filtered.

See the contents of swish_filter.pl and DirTree.pl for specifics on their use.

[ TOC ]


Filtering Examples

The FileFilter directive can be used in your config file to convert documents based on their extension. This is the old way of filtering, but provides an easy way to add filters to swish-e.

For example:

 
    FileFilter .pdf  pdftotext   "'%p' -"
    IndexContents TXT* .pdf

will cause all .pdf files to be filtered through the pdftotext program (part of the Xpdf package), and to parse the resulting output from pdftotext with the text (``TXT'') parser.

The other ways to filter documents is to use a -S prog program and convert the documents before passing them onto Swish-e.

For example, spider.pl makes use of the Perl module included with the Swish-e distribution called SWISH::Filter. SWISH::Filter is passed a document and the document's content type and then looks for modules and utilities to convert the document into one of the types that Swish-e can index.

Swish-e comes ready to index PDF, MS Word, MP3 ID3 tags, and MS Excel file types. But these filters need extra modules or tools to do the actual conversion.

For example, the Swish-e distribution includes a module called SWISH::Filter::Pdf2HTML that uses the pdftotext and pdfinfo utilities provided by the Xpdf package.

This means that if you are using spider.pl to spider your web site and you wish to index PDF documents, all that is needed is to install the Xpdf package and Swish-e (with the help of spider.pl) will begin indexing your PDF files.

Ok, so what does all that mean? For a very simple site you should be able to run this:

 
    $ /usr/local/lib/swish-e/spider.pl default http://localhost/ | swish-e -S prog -i stdin

which is running the spider with default spider settings, indexing the Web server on localhost and piping its output into Swish-e using default indexing settings. Documents will be filtered automatically if you have the required helper applications installed.

Most people will not want to just use the default settings (for one thing the spider will take a while because its default is to delay a few seconds between every request). So, read the documentation for spider.pl to learn how to use a spider config file. And also read SWISH-CONFIG to learn about what configuration options can be used with Swish-e.

The SWISH::Filter documentation provides more details on filtering and hints for debugging problems when filtering.

[ TOC ]


Document Info

$Id: INSTALL.pod,v 1.36.2.5 2004/01/30 19:47:17 whmoseley Exp $

. [ TOC ]


0[swish-e.html]Makefile.am##}lR뫿2&[ y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); pod_dir = $(top_srcdir)/pod version_file = $(top_srcdir)/doc/Version.pm timestamp = $(srcdir)/timestamp htmldir = $(datadir)/doc/$(PACKAGE)/html imagedir = $(datadir)/doc/$(PACKAGE)/html/images if BUILDDOCS # List of all files that are built by the doc system # This is a pain because for non-GNU Make (like on BSD) must specify # the srcdir for these targets, which means they must be separated by # directory -- and that means need to write things twice below. All has to do with VPATH... targets = \ $(srcdir)/CHANGES.html \ $(srcdir)/INSTALL.html \ $(srcdir)/README.html \ $(srcdir)/SWISH-3.0.html \ $(srcdir)/SWISH-BUGS.html \ $(srcdir)/SWISH-CONFIG.html \ $(srcdir)/SWISH-FAQ.html \ $(srcdir)/SWISH-LIBRARY.html \ $(srcdir)/SWISH-RUN.html \ $(srcdir)/SWISH-SEARCH.html \ $(srcdir)/API.html \ $(srcdir)/spider.html \ $(srcdir)/swish.html \ $(srcdir)/search.html \ $(srcdir)/Filter.html \ $(srcdir)/style.css \ $(srcdir)/index.html \ $(srcdir)/index_long.html image_targets = \ $(srcdir)/images/dotrule1.gif \ $(srcdir)/images/swish2b.gif \ $(srcdir)/images/swish2.gif \ $(srcdir)/images/swishbanner1.gif \ $(srcdir)/images/swish.gif endif # These are the source files -- if any are newer than the timestamp # then the docs need to be rebuilt source_files = \ $(pod_dir)/CHANGES.pod \ $(pod_dir)/INSTALL.pod \ $(pod_dir)/README.pod \ $(pod_dir)/SWISH-3.0.pod \ $(pod_dir)/SWISH-BUGS.pod \ $(pod_dir)/SWISH-CONFIG.pod \ $(pod_dir)/SWISH-FAQ.pod \ $(pod_dir)/SWISH-LIBRARY.pod \ $(pod_dir)/SWISH-RUN.pod \ $(pod_dir)/SWISH-SEARCH.pod \ $(top_srcdir)/perl/API.pm \ $(top_srcdir)/prog-bin/spider.pl.in \ $(top_srcdir)/example/swish.cgi.in \ $(top_srcdir)/example/search.cgi.in \ $(top_srcdir)/filters/SWISH/Filter.pm.in # Extra files for creating the search page for the docs: search_doc_files = \ .htaccess \ searchdoc.html \ .swishcgi.conf \ swish.conf \ split.pl # These are what get installed -- they will also be # a dependency of the all-am target (because of _DATA) html_DATA = $(targets) $(search_doc_files) image_DATA = $(image_targets) # These are all placed in the distribution EXTRA_DIST = $(targets) $(image_targets) $(source_files) $(timestamp) $(search_doc_files) ## Here's the work if BUILDDOCS # Deal with missing targets - which is the case in a fresh CVS checkout # Automake automatically adds this target by the "html_DATA" entry above # Touch the time-stamp, but make it very old so any source_file will be newer # (is touch -t portable?) $(targets) $(image_targets): @touch -t 197001010000 $(timestamp) # Make sure the version is up to date -- the version is in configure.in $(version_file): $(top_srcdir)/configure.in @echo "updating version file $(version_file) = $(VERSION)" @echo 'package SWISHE::Doc;$$VERSION=q[$(VERSION)];1' > $(version_file) @touch -t 197001010000 $(timestamp) # Need some way to have make check the source files against the timestamp all-local: $(version_file) $(timestamp) # If any source files are *newer* than the timestamp then # run the "build_docs" program, and then update the timestamp $(timestamp) : $(source_files) @(cd $(top_srcdir)/doc && bin/build -f) @touch $(timestamp) endif # @(cd $(htmldir) && $(PERL) split.pl | $(bindir)/swish-e$(EXEEXT) -S prog -i stdin -c swish.conf -v0) # Target to build searchable HTML docs searchdoc : cp $(libexecdir)/swish.cgi $(htmldir) ( cd $(htmldir) && \ $(PERL) split.pl | $(bindir)/swish-e$(EXEEXT) -S prog -i stdin -c swish.conf && \ $(PERL) -i.orig -pe 's{}{
[Search The Documentation]
}' index.html index_long.html) 0[swish-e.html]Makefile.in##J7쫿2ʢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); 8# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ pod_dir = $(top_srcdir)/pod version_file = $(top_srcdir)/doc/Version.pm timestamp = $(srcdir)/timestamp htmldir = $(datadir)/doc/$(PACKAGE)/html imagedir = $(datadir)/doc/$(PACKAGE)/html/images # List of all files that are built by the doc system # This is a pain because for non-GNU Make (like on BSD) must specify # the srcdir for these targets, which means they must be separated by # directory -- and that means need to write things twice below. All has to do with VPATH... @BUILDDOCS_TRUE@targets = \ @BUILDDOCS_TRUE@ $(srcdir)/CHANGES.html \ @BUILDDOCS_TRUE@ $(srcdir)/INSTALL.html \ @BUILDDOCS_TRUE@ $(srcdir)/README.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-3.0.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-BUGS.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-CONFIG.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-FAQ.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-LIBRARY.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-RUN.html \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-SEARCH.html \ @BUILDDOCS_TRUE@ $(srcdir)/API.html \ @BUILDDOCS_TRUE@ $(srcdir)/spider.html \ @BUILDDOCS_TRUE@ $(srcdir)/swish.html \ @BUILDDOCS_TRUE@ $(srcdir)/search.html \ @BUILDDOCS_TRUE@ $(srcdir)/Filter.html \ @BUILDDOCS_TRUE@ $(srcdir)/style.css \ @BUILDDOCS_TRUE@ $(srcdir)/index.html \ @BUILDDOCS_TRUE@ $(srcdir)/index_long.html @BUILDDOCS_TRUE@image_targets = \ @BUILDDOCS_TRUE@ $(srcdir)/images/dotrule1.gif \ @BUILDDOCS_TRUE@ $(srcdir)/images/swish2b.gif \ @BUILDDOCS_TRUE@ $(srcdir)/images/swish2.gif \ @BUILDDOCS_TRUE@ $(srcdir)/images/swishbanner1.gif \ @BUILDDOCS_TRUE@ $(srcdir)/images/swish.gif # These are the source files -- if any are newer than the timestamp # then the docs need to be rebuilt source_files = \ $(pod_dir)/CHANGES.pod \ $(pod_dir)/INSTALL.pod \ $(pod_dir)/README.pod \ $(pod_dir)/SWISH-3.0.pod \ $(pod_dir)/SWISH-BUGS.pod \ $(pod_dir)/SWISH-CONFIG.pod \ $(pod_dir)/SWISH-FAQ.pod \ $(pod_dir)/SWISH-LIBRARY.pod \ $(pod_dir)/SWISH-RUN.pod \ $(pod_dir)/SWISH-SEARCH.pod \ $(top_srcdir)/perl/API.pm \ $(top_srcdir)/prog-bin/spider.pl.in \ $(top_srcdir)/example/swish.cgi.in \ $(top_srcdir)/example/search.cgi.in \ $(top_srcdir)/filters/SWISH/Filter.pm.in # Extra files for creating the search page for the docs: search_doc_files = \ .htaccess \ searchdoc.html \ .swishcgi.conf \ swish.conf \ split.pl # These are what get installed -- they will also be # a dependency of the all-am target (because of _DATA) html_DATA = $(targets) $(search_doc_files) image_DATA = $(image_targets) # These are all placed in the distribution EXTRA_DIST = $(targets) $(image_targets) $(source_files) $(timestamp) $(search_doc_files) subdir = html ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(html_DATA) $(image_DATA) DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign html/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: htmlDATA_INSTALL = $(INSTALL_DATA) install-htmlDATA: $(html_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(htmldir) @list='$(html_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(htmlDATA_INSTALL) $$d$$p $(DESTDIR)$(htmldir)/$$f"; \ $(htmlDATA_INSTALL) $$d$$p $(DESTDIR)$(htmldir)/$$f; \ done uninstall-htmlDATA: @$(NORMAL_UNINSTALL) @list='$(html_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(htmldir)/$$f"; \ rm -f $(DESTDIR)$(htmldir)/$$f; \ done imageDATA_INSTALL = $(INSTALL_DATA) install-imageDATA: $(image_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(imagedir) @list='$(image_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(imageDATA_INSTALL) $$d$$p $(DESTDIR)$(imagedir)/$$f"; \ $(imageDATA_INSTALL) $$d$$p $(DESTDIR)$(imagedir)/$$f; \ done uninstall-imageDATA: @$(NORMAL_UNINSTALL) @list='$(image_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(imagedir)/$$f"; \ rm -f $(DESTDIR)$(imagedir)/$$f; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/$(pod_dir) $(distdir)/$(srcdir) $(distdir)/$(top_srcdir)/example $(distdir)/$(top_srcdir)/filters/SWISH $(distdir)/$(top_srcdir)/perl $(distdir)/$(top_srcdir)/prog-bin @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) all-local installdirs: $(mkinstalldirs) $(DESTDIR)$(htmldir) $(DESTDIR)$(imagedir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-htmlDATA install-imageDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-htmlDATA uninstall-imageDATA uninstall-info-am .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool distclean distclean-generic distclean-libtool \ distdir dvi dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-htmlDATA \ install-imageDATA install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-htmlDATA uninstall-imageDATA \ uninstall-info-am # Deal with missing targets - which is the case in a fresh CVS checkout # Automake automatically adds this target by the "html_DATA" entry above # Touch the time-stamp, but make it very old so any source_file will be newer # (is touch -t portable?) @BUILDDOCS_TRUE@$(targets) $(image_targets): @BUILDDOCS_TRUE@ @touch -t 197001010000 $(timestamp) # Make sure the version is up to date -- the version is in configure.in @BUILDDOCS_TRUE@$(version_file): $(top_srcdir)/configure.in @BUILDDOCS_TRUE@ @echo "updating version file $(version_file) = $(VERSION)" @BUILDDOCS_TRUE@ @echo 'package SWISHE::Doc;$$VERSION=q[$(VERSION)];1' > $(version_file) @BUILDDOCS_TRUE@ @touch -t 197001010000 $(timestamp) # Need some way to have make check the source files against the timestamp @BUILDDOCS_TRUE@all-local: $(version_file) $(timestamp) # If any source files are *newer* than the timestamp then # run the "build_docs" program, and then update the timestamp @BUILDDOCS_TRUE@$(timestamp) : $(source_files) @BUILDDOCS_TRUE@ @(cd $(top_srcdir)/doc && bin/build -f) @BUILDDOCS_TRUE@ @touch $(timestamp) # @(cd $(htmldir) && $(PERL) split.pl | $(bindir)/swish-e$(EXEEXT) -S prog -i stdin -c swish.conf -v0) # Target to build searchable HTML docs searchdoc : cp $(libexecdir)/swish.cgi $(htmldir) ( cd $(htmldir) && \ $(PERL) split.pl | $(bindir)/swish-e$(EXEEXT) -S prog -i stdin -c swish.conf && \ $(PERL) -i.orig -pe 's{}{
[Search The Documentation]
}' index.html index_long.html) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0[swish-e.html]README.html##MB2s6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); 2 SWISH-Enhanced: The Swish-e README File

Swish-E Logo


The Swish-e README File


[ TOC ]

Upgrading?

If you are upgrading Swish-e please review the CHANGES file before installation. The index format may change and existing indexes may need to be re-created before use.

[ TOC ]


What is Swish-e?

Swish-e is Simple Web Indexing System for Humans - Enhanced. Swish-e can quickly and easily index directories of files or remote web sites and search the generated indexes.

Swish-e it extremely fast in both indexing and searching, highly configurable, and can be seamlessly integrated with existing web sites to maintain a consistent design. Swish-e can index web pages, but can just as easily index text files, mailing list archives, or data stored in a relational database.

Swish is designed to index small to medium sized collection of documents, Although a few users are indexing over a million documents, typical usage is more often in the tens of thousands. Currently, Swish-e only indexes eight bit character encodings.

Swish-e version 2.2 was a major rewrite of the code and the addition of many new features. Memory requirements for indexing have been reduced and indexing speed is significantly improved from previous versions. New features allow more control over indexing, better document parsing, improved indexing and searching logic, better filter code, and the ability to index from any data source.

Swish-e version 2.4 includes a major rewrite of the C API and a new Perl module for accessing the swish-e C library. In addition, Swish-e 2.4 uses the GNU Auto Tools. The significant changes are where files are installed, and the use of Libtool to create the swish-e library as a shared library on many platforms. Basically, installation is easier than previous versions, and more files are installed in ``standard'' locations (e.g. documentation is installed in $prefix/share/doc/swish-e).

Note: Due to the new build and installation system in Swish-e 2.4 some documentation may incorrectly list the location of files. Please report any documentation errors to the Swish-e Discussion list.

Swish-e is not a ``turn-key'' indexing and searching solution. The Swish-e distribution contains most of the parts to create such a system, but you need to put the parts together as best meets your needs. This gives you the power to index and search your documents the way you wish and to seamlessly integrate a search engine into your web site or application.

To use swish-e you will need to configure Swish-e to index your documents, create an index by running Swish-e, and setup an interface such as a CGI script (a script is included) to search the index and display results. Swish uses helper programs to index documents of types that Swish-e cannot natively index. These programs may need to be installed separately from Swish-e.

Swish-e is an Open Source (see: http://opensource.org ) program supported by developers and a large group of users. Please take time to join the Swish-e discussion list at http://Swish-e.org.

[ TOC ]


Key features

  • Quickly index a large number of documents in different formats including text, HTML, and XML

  • Use ``filters'' to index other types of files such as PDF, gzip, or Postscript.

  • Includes a web spider for indexing remote documents over HTTP. Follows Robots Exclusion Rules (including META tags).

  • Can use an external program to supply documents to Swish-e, such as an advanced spider for your web server or a program to read and format records from a relational database.

  • Document ``properties'' (some subset of the source document, usually defined as a META or XML elements) may be stored in the index and returned with search results

  • Document summaries can be returned with each search

  • Word stemming, soundex, metaphone, and double-metaphone indexing for ``fuzzy'' searching

  • Phrase searching and wildcard searching

  • Limit searches to HTML links

  • Use powerful Regular Expressions to select documents for indexing or exclusion

  • Easily limit searches to parts or all of your web site

  • Results can be sorted by relevance or by any number of properties in ascending or descending order

  • Limit searches to parts of documents such as certain HTML tags (META, TITLE, comments, etc.) or to XML elements.

  • Can report structural errors in your XML and HTML documents

  • Index file is portable between platforms.

  • A Swish-e library is provided to allow embedding Swish-e into your applications for very fast searching. A Perl module is available that provides a standard API for accessing Swish-e.

  • Includes example search script with context summaries and search term and phrase highlighting. Can be used with popular Perl templating systems.

  • Swish-e is fast.

  • It's open source and FREE! You can customize Swish-e and you can contribute your fancy new features to the project.

  • Supported by on-line user and developer groups

[ TOC ]


Where do I get Swish-e?

The current version of Swish-e can be found at:

http://Swish-e.org

Please make sure you use a current version of Swish-e.

Information about Windows binary distributions can also be found at this site.

[ TOC ]


How Do I Install Swish-e?

Read the INSTALL page.

Building from source is recommended. On most platforms Swish-e should build without problems. A list of platforms where Swish-e has been built can be found in the INSTALL page. Information on building for VMS and Win32 can be found in sub-directories of the src directory. Check the Swish-e site for information about binary distributions (such as for Windows).

In addition to the INSTALL page, make sure you read the SWISH-FAQ page if you have any questions, or to get an idea of questions that you might someday ask.

Problems or questions about installing Swish-e should be directed to the Swish-e discussion list (see the Swish-e web site at http://Swish-e.org).

Please read Where do I get help with Swish-e? below before posting any questions to the Swish-e list.

[ TOC ]


The Swish-e Documentation

Documentation is provided as HTML pages installed in $prefix/share/doc/swish-e where $prefix is /usr/local if building from source, or /usr if installed as part of a package from your OS vendor. Under Windows $prefix is selected at installation time.

A subset of the documentation is installed as system man pages as well.

Documentation is also available on-line at http://swish-e.org.

If your system includes the required support files and programs, the distribution make files can also generate the documentation in these formats:

 
    Postscript
    PDF (Adobe Acrobat)

See INSTALL for information on creating the PDF and Postscript versions of the documentation.

Patches or updates to the documentation should be done against the POD files located in the pod directory of the distribution, or (preffered) against the cvs repository.

[ TOC ]


Where do I get help with Swish-e?

If you need help with installing or using Swish-e please subscribe to the Swish-e mailing list. Visit the Swish-e web site listed above for information on subscribing to the mailing list.

Before posting any questions please read QUESTIONS AND TROUBLESHOOTING.

[ TOC ]


Speling mistakes

Please contact the Swish-e list with corrections to this documentation. Any help in cleaning up the docs will be appreciated!

Any patches should be made against the .pod files, not the .html files.

[ TOC ]


Swish-e Development

Swish-e is currently being developed as an open source project on SourceForge http://sourceforge.net.

Contact the Swish-e list for questions about Swish-e development.

[ TOC ]


Swish-e's History

SWISH was created by Kevin Hughes circa 1994 to fill the need of the growing number of Web administrators on the Internet - many of the indexing systems were not well documented, were hard to use and install, and were too complex for their own good. The system was widely used for several years, long enough to collect some bug fixes and requests for enhancements.

In Fall 1996, The Library of UC Berkeley received permission from Kevin Hughes to implement bug fixes and enhancements to the original binary. The result is Swish-enhanced or Swish-e, brought to you by the Swish-e Development Team.

[ TOC ]


Document Info

Each document in the Swish-e distribution contains this section. It refers only to the specific page it's located in, and not to the Swish-e program or the documentation as a whole.

$Id: README.pod,v 1.17.2.1 2004/01/30 18:35:55 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-3_0.html##jErv2y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); $ SWISH-Enhanced: Proposed changes for Swish-e 3.0

Swish-E Logo


Proposed changes for Swish-e 3.0


[ TOC ]

Overview

This pages is intended to give users of Swish-e an idea of the changes to come, to foster discussion of the direction of Swish-e, and a place where developers can map out new ideas.

None of this is written in stone. Any of the developers can write their ideas in this document, but that doesn't mean it will actually happen ;).

[ TOC ]


Support Incremental Indexing

The Swish-e index structure currently makes it difficult to do incremental indexing, range limiting, and presents limits to indexing due to memory requirements. A database may solve some of these issues, at possibly a cost of performance.

Swish-e has been linked with Berkeley DB. Although much slower in indexing, this may allow incremental indexing. Currently, the idea is to offer both database backends.

[ TOC ]


Split code into Search and Indexing code

There may be a small benefit from creating a smaller search-only program. CGI scripts may be faster, and the code would be smaller for those that want to embed Swish-e in to other applications.

Currently, linking libswish-e into a program adds about 720K. Not real significant, but it could be if a number of processes are running with Swish-e. Another option is to build libswish-e as a shared library.

[ TOC ]


Swish Server

Somone needs to write a threaded Swish-e server. Or maybe just a pre-forking server in perl, to see how it works...

[ TOC ]


Switch to Content-Types

Moseley: Dec 28, 2000

I'm wondering if it might be smart to switch from the current ``Document Types'' to Content-Types. Currently, Swish-e know how to parse three types of documents TXT, HTML, and XML. There's currently two new configuration directives DefaultContents and IndexContents that map file extensions to one of the three types. This doesn't really work when spidering since it's the content-type that describes the document and not the file extension.

It's an issue that can wait, but I'm concerned about backward compatiblity before people start using the IndexContents and DefaultContents config directives and then we change to content-type in the future. There's probably not that many people using those, but it might be work noting in the documentation that it will change, if we agree.

The main reason to use content-type instead is for http processing where you can't depend on the file extension to determine the document type, so with http we have to use content-type to determine how to deal with the file. This is somewhat moot, as mapping can now be done with -S prog.

I'd propose that Swish-e uses a mime.types file to map from extension to content-type. You could add or override mappings in the config file:

 
   AddType text/plain .doc .log

 
   DefaultType text/html  # like DefaultContents currently

The file source ``plug-in'' (whatever that ends up being) would return a content-type, but if not returned then Swish-e would map the type from the file name using the mime.types file or any AddType directives.

Again, internally Swish-e only knows about text/[TXT|HTML|XML], so there should be a way to map other types, otherwise Swish-e might ignore the file. We could continue to use the three type names or switch completely to content-types.

For example, if we continued to use [TXT|HTML|XML]

 
    MapType TXT  text/directory text/logfile
    MapType HTML text/html

Or maybe just extend the current directives

 
    IndexContents HTML .htm .html text/html

Where the content-type would have precedence over the file extensions.

This would tell Swish-e that those types are handled by those internal handlers.

Then as I've mentioned before, you might specify filters as such

 
   FilterDocument application/msword /path/to/word-to-text

And word-to-text would convert to text and return one of the three content-types that Swish-e knows how to parse, or a different content type if were to chain filters.

[ TOC ]


Enhanced the PropertyNames directive

Moseley: Updated Jan 13, 2001

If the PropertyNames directive was enhanced to be able to limit the number of characters stored, optionally extract text from HTML, and was able to define what type of docs (text, XML, HTML) it applied to, then the existing PropertyNames feature would work like the new StoreDescription feature but be useful for more than just one use.

I'm not clear how to enhance the syntax of Properties and/or Metanames, but here's some ideas. Rainer suggested that an xml-type of format might be best and commonly understood. That's a good idea. Below are some older ideas that I had. But you will get the idea...

The metaname structure could have flags for properties:

 
    1 - limiting to a length
    2 - stripping HTML
    3 - encoding HTML entities on output

Oct 9, 2001 - The code is now in Swish-e to limit a string property to a length. The stripping of HTML is an issue for discussion. And encoding entities on output should be a result_outpu.c issue.

[ TOC ]


Apache/XML style configuration

This would be to allow some directives to be set per directory, or perl file extenstion (or content-type).

[ TOC ]


Document Info

$Id: SWISH-3.0.pod,v 1.6 2002/04/15 02:34:43 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-BUGS.html# #_2  y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  SWISH-Enhanced: SWISH-BUGS - List of bugs known in Swish-e

Swish-E Logo


SWISH-BUGS - List of bugs known in Swish-e


[ TOC ]

DESCRIPTION

This file contains a list of bugs reported or known in Swish-e. If you find a bug listed here you do not need to report it as a bug. But feel free to bug the developers about it on the Swish-e discussion list.

[ TOC ]


Bugs in Swish-e version 2.4

  • Wild card searching can be very slow

    Wild card searching needs to be optimized.

    Here's a three letter search:

     
      $ swish-e -w 'tra*' -m1
      # Number of hits: 99952
      # Search time: 5.424 seconds

    Two letters:

     
      $ swish-e -w 'tr*' -m1
      # Number of hits: 100000
      # Search time: 10.563 seconds

    Single letter search:

     
      $ swish-e -w 't*' -m1
      # Number of hits: 100000
      # Search time: 510.939 seconds

    and used about 280MB or RAM.

    This is a potential for a DoS attack. If you have a large index you may wish to filter out single character wild cards.

  • Character Encodings

    The XML parser (Expat) returns UTF-8 data to swish-e. Therefore, the XML parser should only be used for parsing US-ASCII encoded text.

    The XML2 & HTML2 parsers (Libxml2) converts characters from UTF-8 to 8859-1 encodings before indexing and writing properties. Indexing non-8859-1 data may result in invalid character mappings.

    These issues will be resolved soon.

  • Phrase search failes with DoubleMetaphone

    DoubleMetaphone searching can produce two search words for a single query word. The words are expanded to (word1 OR word2), but that fails in a phrase query: ``some phrase (word1 or word2) here''

    swish-e query parser is due for a rewrite, and this could be resolved then.

     
        Reported: August 20, 2002 - moseley

  • Merging

    merge.c does not check for matching stopwords or buzzwords in each index.

    History:

     
        Reported: September 3, 2002 - moseley

  • ResultSortOrder

    ResultSort order is not used (and is not documented). The problem is that the data passed to Compare_Properties() does not have access to the ResultSortOrder table.

History:

 
    Reported: September 3, 2002 - moseley

[ TOC ]


Document Info

$Id: SWISH-BUGS.pod,v 1.7 2003/08/14 20:43:35 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-CONFIG.htmlb2s6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH-CONFIG - Configuration File Directives

Swish-E Logo


SWISH-CONFIG - Configuration File Directives


[ TOC ]

Swish-e CONFIGURATION FILE

What files Swish-e indexes and how they are indexed, and where the index is written can be controlled by a configuration file.

The configuration file is a text file composed of comments, blank lines, and configuration directives. The order of the directives is not important. Some directives may be used more than once in the configuration file, while others can only be used once (e.g. additional directives will overwrite preceding directives). Case of the directive is not important -- you may use upper, lower, or mixed case.

Comments are any line that begin with a ``#''.

 
    # This is a comment

Directives may take more than one parameter. Enclose single parameters that include whitespace in quotes (single or double). Inside of quotes the backslash escapes the next character.

 
    ReplaceRules append "foo bar"   <- define "foo bar" as a single parameter

If you need to include a quote character in the value either use a backslash to escape it, or enclose it in quotes of the other type.

For example, under unix you can use quotes to include white space in a single parameter. Here, to protect against path names (%p) that might have white space embedded use single quotes (this also protects against shell expansion or metacharacters):

 
    FileFilter .foo foofilter "'%p'"  <- parameter passed through the shell in single quotes
    FileFilter .foo foofilter '"%p"'  <- windows uses double-quotes
    FileFilter .foo foofilter '\'%p\''<- silly example

Backslashes also have special meaning in regular expressions.

 
    FileFilterMatch pdftotext "'%p' -" /\.pdf$/

This says that the dot is a real dot (instead of matching any character). If you place the regular expression in quotes then you must use double-backslashes.

 
    FileFilterMatch pdftotext "'%p' -" "/\\.pdf$/"

Swish-e will convert the double backslash into a single backslash before passing the parameter to the regular expression compiler.

Commented example configuration files are included in the conf directory of the Swish-e distribution.

Some command line arguments can override directives specified in the configuration file. Please see also the SWISH-RUN for instructions on running Swish-e, and the SWISH-SEARCH page for information and examples on how to search your index.

The configuration file is specified to Swish-e by the -c switch. For example,

 
    swish-e -c myconfig.conf

You may also split your directives up into different configuration files. This allows you to have a master configuration file used for many different indexes, and smaller configuration files for each separate index. You can specify the different configuration files when running from the command line with the -c switch (see SWISH-RUN), or you may include other Configuration file with the IncludeConfigFile directive below.

Typically, in a configuration file the directives are grouped together in some logical order -- that is, directives that control the source of the documents would be grouped together first, and directives that control how each document is filtered or its words index in another group of directives. (The directives listed below are grouped in this order).

The configuration file directives are listed below in these groups:

[ TOC ]


Alphabetical Listing of Directives

[ TOC ]


Directives that Control Swish

These configuration directives control the general behavior of Swish-e.

IncludeConfigFile *path to config file*

This directive can be used to include configuration directives located in another file.

 
    IncludeConfigFile /usr/local/swish/conf/site_config.config

IndexReport [0|1|2|3]

This is how detailed you want reporting wh>ile indexing. You can specify numbers 0 to 3. 0 is totally silent, 3 is the most verbose. The default is 1.

This may be overridden from the command line via the -v switch (see SWISH-RUN).

ParserWarnLevel [0|1|2|3]

Sets the error level when using the libxml2 parser for XML and HTML. libxml2 will point out structural errors in your documents.

 
    0 = no report
    1 = fatal errors
    2 = errors
    3 = warnings

The exception to this is UTF-8 to Latin-1 conversion errors are reported at level 1. This is because words may be indexed incorrectly in these cases.

Note that unlike other errors generated by Swish-e, these errors are sent to stderr.

IndexFile *path*

Index file specifies the location of the generated index file. If not specified, Swish-e will create the file index.swish-e in the current directory.

 
    IndexFile /usr/local/swish/site.index

obeyRobotsNoIndex [yes|NO]

When enabled, Swish-e will not index any HTML file that contains:

 
    <meta name="robots" content="noindex">

The default is to ignore these meta tags and index the document. This tag is described at http://www.robotstxt.org/wc/exclusion.html.

Note: This feature is only available with the libxml2 HTML parser.

Also, if you are using the libxml2 parser (HTML2 and XML2) then you can use the following comments in your documents to prevent indexing:

 
       <!-- SwishCommand noindex -->
       <!-- SwishCommand index -->

and/or these may be used also:

 
       <!-- noindex -->
       <!-- index -->

For example, these are very helpful to prevent indexing of common headers, footers, and menus.

NOTE: This following items are currently not available. These items require Swish-e to parse the configuration file while searching.

EnableAltSearchSyntax [yes|NO]

NOTE: This following item is currently not available.

Enable alternate search syntax. Allows the usage of a basic ``Altavista(c)'', ``Lycos(c)'', etc. like search syntax. This means a search query can contain ``+'' and ``-'' as syntax parameter.

Example:

 
    swish-e -w "+word1 +word2 -word3  word4 word5"
    "+"  = following word has to be in all found documents
    "-"  = following word may not be in any document found
    " "  = following word will be searched in documents

SwishSearchOperators <and-word> <or-word> <not-word>

NOTE: This following item is currently not available.

Using this config directive you can change the boolean search operators of Swish-e, e.g. to adapt these to your language. The default is: AND OR NOT

Example (german):

 
    SwishSearchOperators   UND  ODER  NICHT

SwishSearchDefaultRule [<AND-WORD>|<or-word>]

NOTE: This following item is currently not available.

SwishSearchDefaultRule defines the default Boolean operator to use if none is specified between words or phrases. The default is AND.

The word you specify must match one of the available SwishSearchOperators.

Example:

 
    SwishSearchOperators   UND  ODER  NICHT
    # Make it act like a web search engine
    SwishSearchDefaultRule ODER

ResultExtFormatName name -x format string

NOTE: This following item is currently not available.

The output of Swish-e can be defined by specifying a format string with the -x command line argument. Using ResultExtFormatName you can assign a predefined format string to a name.

Examples:

 
    ResultExtFormatName  moreinfo   "%c|%r|%t|%p|<author>|<publishyear>\n"

Then when searching you can specify the format string's name

 
    swish-e   ...  -x moreinfo  ...

See the -x switch in SWISH-RUN for more information about output formats.

[ TOC ]


Administrative Headers Directives

Swish-e stores configuration information in the header of the index file. This information can be retrieved while searching or by functions in the Swish-e C library. There are a number of fields available for your own use. None of these fields are required:

IndexName *text*

IndexDescription *text*

IndexPointer *text*

IndexAdmin *text*

These variables specify information that goes into index files to help users and administrators. IndexName should be the name of your index, like a book title. IndexDescription is a short description of the index or a URL pointing to a more full description. IndexPointer should be a pointer to the original information, most likely a URL. IndexAdmin should be the name of the index maintainer and can include name and email information. These values should not be more than 70 or so characters and should be contained in quotes. Note that the automatically generated date in index files is in D/M/Y and 24-hour format.

Examples:

 
    IndexName "Linux Documentation"
    IndexDescription "This is an index of /usr/doc on our Linux machine." 
    IndexPointer http://localhost/swish/linux/index.html
    IndexAdmin webmaster

[ TOC ]


Document Source Directives

These directives control what documents are indexed and how they are accessed. See also Directives for the File Access method only and Directives for the HTTP Access Method Only for directives that are specific to those access methods.

IndexDir [directories or files|URL|external program]

IndexDir defines the source of the documents for Swish-e. Swish-e currently supports three file access methods: File system, HTTP (also called spidering), and prog for reading files from an external program.

The -S command line argument is used to select the file access method.

 
    swish-e -c swish.config -S fs    - file system
    swish-e -c swish.config -S http  - internal http spider
    swish-e -c swish.config -S prog  - external program of any type

For the fs method of access IndexDir is a space-separated list of files and directories to index. Use a forward slash as the path separator in MS Windows.

For the http method the IndexDir setting is a list of space-separated URLs.

For the prog method the IndexDir setting is a list of space-separated programs to run (which generate documents for swish to index).

You may specify more than one IndexDir directive.

Any sub-directories of any listed directory will also be indexed.

Note: While processing directories, Swish-e will ignore any files or directories that begin with a dot (``.''). You may index files or directories that begin with a dot by specifying their name with IndexDir or -i.

Examples:

 
    # Index this directory an any subdirectories
    IndexDir /usr/local/home/http

 
    # Index the docs directory in current directory
    IndexDir ./docs

 
    # Index these files in the current directory
    IndexDir ./index.html ./page1.html ./page2.html
    # and index this directory, too
    IndexDir ../public_html

For the HTTP method of access specify the URL's from which you want the spidering to begin.

Example:

 
    IndexDir http://www.my-site.com/index.html
    IndexDir http://localhost/index.html

Obviously, using the HTTP method to index is much slower than indexing local files. Be well aware that some sites do not appreciate spidering and may block your IP address. You may wish to contact the remote site before spidering their web site. More information about spidering can be found in Directives for the HTTP Access Method Only below.

For the prog method of access IndexDir specifies the path to the program(s) to execute. The external program must correctly format the documents being passed back to Swish-e. Examples of external programs are provided in the prog-bin directory.

 
    IndexDir ./myprogram.pl

See prog for details.

Note: Not all directives work with all methods.

NoContents *list of file suffixes*

Files with these suffixes will not have their contents indexed, but will have their path name (file name) indexed instead.

If the file's type is HTML or HTML2 (as set by IndexContents or DefaultContents) then the file will be parsed for a HTML title and that title will be indexed. Note that you must set the file's type with IndexContents or DefaultContents: .html and .htm are NOT type HTML by default. For example:

 
   IndexContents HTML* .htm .html

If a title is found, it will still be checked for FileRules title, and the file will be skipped if a match is found. See FileRules.

If the file's type is not HTML, or it is HTML and no title is found, then the file's path will be indexed.

For example, this will allow searching by image file name.

 
    NoContents .gif .xbm .au .mov .mpg .pdf .ps

Note: Using this directive will not cause files with those suffixes to be indexed. That is, if you use IndexOnly to limit the types of files that are indexed, then you must specify in IndexOnly the same suffixes listed in NoContents.

This does not work:

 
    # Wrong!
    IndexOnly .htm .html
    NoContents .gif .xbm .au .mov .mpg .pdf .ps

A -S prog program may set the No-Contents: header to enable this feature for a specific document (although it would be smarter for the -S prog program to simply only send the pathname or title to be indexed.

ReplaceRules [replace|remove|prepend|append|regex]

ReplaceRules allows you to make changes to file pathnames before they're indexed. These changed file names or URLs will be returned in search results.

For example, you may index your files locally (with the File system indexing method), yet return a URL in search results. This directive can be used to map the file names to their respective URLs on your web server.

There are five operations you can specify: replace, append, remove, prepend, and regex They will parse the pathname in the order you've typed these commands.

This directive uses C library regex.h regular expressions.

>
 
   replace "the string you want replaced" "what to change it to"
   remove "a string to remove"   
   prepend "a string to add before the result"
   append "a string to add after the result"
   regex  "/search string/replace string/options"

Remember, quotes are needed if an expression contains white space, and backslashes have special meaning.

Regex is an Extended Regular Expression. The first character found is the delimiter (but it's not smart enough to use matched chars such as [], (), and {}).

The replace string may use substitution variables:

 
    $0      the entire matched (sub)string
    $1-$9   returns patterns captured in "(" ")" pairs
    $`      the string before the matched pattern
    $'      the string after the matched pattern

The options change the behavior of expression:

 
    i       ignore the case when matching
    g       repeat the substitution for the entire pattern

Examples:

 
    ReplaceRules replace testdir/ anotherdir/
    ReplaceRules replace [a-z_0-9]*_m.*\.html index.html

 
    ReplaceRules remove testdir/

 
    ReplaceRules prepend http://localhost/
    ReplaceRules append .html

 
    ReplaceRules regex  !^/web/(.+)/!http://$1.domain.com/!
    replaces a file path:
        /web/search/foo/index.html
    with
        http://search.domain.com/foo/index.html

 
    ReplaceRules regex  #^#http://localhost/www#
    ReplaceRules prepend http://localhost/www  (same thing)

 
    # Remove all extensions from C source files
    ReplaceRules remove .c     # ERROR! That "." is *any char*
    ReplaceRules remove \.c    # much better...

 
    ReplaceRules remove "\\.c" # if in quotes you need double-backslash!  
    ReplaceRules remove "\.c"  # ERROR! "\." -> "." and is *any char*

IndexContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*] *file extensions*

The IndexContents directive assigns one of Swish-e's document parsers to a document, based on the its extension. Swish-e currently knows how to parse TXT, HTML, and XML documents.

The XML2, HTML2, and TXT2 parsers are currently only available when Swish-e is configured to use libxml2.

You may use XML*, HTML*, and TXT* to select the parser automatically. If libxml2 is installed then it will be used to parse the content. Otherwise, Swish-e's internal parsers will be used.

Documents that are not assigned a parser with IndexContents will, by default, use the HTML2 parser if libxml2 is installed, otherwise will use Swish-e's internal HTML parser. The DefaultContents directive may be used to assign a parser to documents that do not match a file extension defined with the IndexContents directive.

Example:

 
    IndexContents HTML* .htm .html .shtml
    IndexContents TXT*  .txt .log .text
    IndexContents XML*  .xml

HTML* is the default type for all files, unless otherwise specified (and this default can be changed by the DefaultContents directive. Swish-e parses titles from HTML files, if available, and keeps track of the context of the text for context searching (see -t in SWISH-RUN).

If using filters (with the FileFilter directive) to convert documents you should include those extensions, too. For example, if using a filter to convert .pdf to .html, you need to tell Swish-e that .pdf should be indexed by the internal HTML parser:

 
    FileFilter  .pdf   pdf2html
    IndexContent  HTML  .pdf

See also Document Filter Directives.

Note: Some of this may be changed in the future to use content-types instead of file extensions. See SWISH-3.0

DefaultContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*]

This sets the default parser for documents that are not specified in IndexContents. If not specified the default is HTML.

The XML2, HTML2, and TXT2 parsers are currently only available when Swish-e is configured to use libxml2.

You may use XML*, HTML*, and TXT* to select the parser automatically. If libxml2 is installed then it will be used to parse the content. Otherwise, Swish-e's internal parsers will be used.

Example:

 
    DefaultContents HTML

The DefaultContents directive should be used when spidering, as HTML files may be returned without a file extension (such as when requesting a directory and the default index.html is returned).

FileInfoCompression [yes|NO]

** This directive is currently not supported **

Setting FileInfoCompression to yes will compress the index file to save disk space. This may result in longer indexing times. The default is no.

Also see the -e switch in SWISH-RUN for saving RAM during indexing.

[ TOC ]


Document Contents Directives

These directives control what information is extracted from your source documents, and how that information is made available during searching.

ConvertHTMLEntities [YES|no]

ASCII entities can be converted automatically while indexing documents of type HTML (not for HTML2). For performance reasons you may wish to set this to no if your documents do not contain HTML entities. The default is yes.

If ConvertHTMLEntities is set no the entities will be indexed without conversion.

NOTE: Entities within XML files and files parsed with libxml2 (HTML2) are converted regardless of this setting.

MetaNames *list of names*

META names are a way to define ``fields'' in your XML and HTML documents. You can use the META names in your queries to limit the search to just the words contained in that META name of your document. For example, you might have a META tagged field in your documents called subjects and then you can search your documents for the word ``foo'' but only return documents where ``foo'' is within the subjects META tag.

 
    swish-e -w subjects=foo

(See also the -t switch in SWISH-RUN for information about context searching in HTML documents.)

The MetaNames directive is a space separated list. For example:

 
    MetaNames meta1 meta2 keywords subjects

You may also use UndefinedMetaTags to specify automatic extraction of meta names from your HTML and XML documents, and also to ignore indexing content of meta tags.

META tags can have two formats in your HTML source documents:

 
    <META NAME="meta1" CONTENT="some content">

and (if using the HTML2/libxml2 parser)

 
    <meta1>
        some content
    </meta1>

But this second version is invalid HTML, and will generate a warning if ParserWarningLevel is set (libxml2 only).

And in XML documents, use the format:

 
    <meta1>
        Some Content
    </meta1>

Then you can limit your search to just META meta1 like this:

 
    swish-e -w 'meta1=(apples or oranges)'

You may nest the XML and the start/end tag versions:

 
    <keywords>
        <tag1>
            some content
        </tag1>
        <tag2>
            some other content
        </tag2>
    <keywords>

Then you can search in both tag2 and tag2 with:

 
    swish-e -w 'keywords=(query words)'

Swish-e indexes all text as some metaname. The default is swishdefault, so these two queries are the same:

 
    swish-e -w foo
    swish-e -w swishdefault=foo

When indexing HTML Swish-e indexes the HTML title as default text, so when searching Swish-e will find matches in both the HTML body and the HTML title. Swish also, by default, indexes content of meta tags. So:

 
    swish-e -w foo

will find ``foo'' in the body, the title, or any meta tags.

Currently, there's no way to prevent Swish-e from indexing the title contents along with the body contents, but see UndefinedMetaTags for how to control the indexing of meta tags.

If you would like to search just the title text, you may use:

 
    MetaNames swishtitle

This will index the title text separately under the built-in swish internal meta name ``swishtitle''. You may then search like

 
    swish-e -w foo  -- search for "foo" in title, body (and undefined meta tags)
    swish-e -w swishtitle=foo -- search for "foo" in title only

In addition to swishtitle, you can limit searches to documents' path with:

 
   MetaNames swishdocpath

Then to search for ``foo'' but also limit searches to documents that include ``manual'' or ``tutorial'' in their path:

 
   swish-e -w foo swishdocpath=(manual or tutorial)

See also ExtractPath.

MetaNameAlias *meta name* *list of aliases*

MetaNameAlias assigns aliases for a meta name. For example, if your documents contain meta tags ``description'', ``summary'', and ``overview'' that all give a summary of your documents you could do this:

 
    MetaNames summary
    MetaNameAlias summary description overview

Then all three tags will get indexed as meta tag ``summary''. You can then search all the fields as:

 
    -w summary=foo

The Alias work at search time, too. So these will also limit the search to the ``summary'' meta name.

 
    -w description=foo
    -w overview=foo

MetaNamesRank integer *list of meta names*

 
    * Not implemented yet *

You can assign a bias to metanames that will affect how ranking is calculated. The range of values is from -10 to +10, with zero being no bias.

 
    MetaNamesRank 4 subject
    MetaNamesRank 3 swishdefault
    MetaNamesRank 2 author publisher
    Meta>NamesRank -5 wrongwords

This feature is not implemented yet

HTMLLinksMetaName *metaname*

Allows indexing of HTML links. Normally, HTML links (href tags) are not indexed by Swish-e. This directive defines a metaname, and links will be indexed under this meta name.

Example:

 
    HTMLLinksMetaName links

Now, to limit searches to files with a link to ``home.html'' do this:

 
    -w links='"home.html"'

The double quotes force a phrase search.

To make Swish-e index links as normal text, you may use:

 
    HTMLLinksMetaName swishdefault

This feature is only available with the libxml2 HTML parser.

ImageLinksMetaName *metaname*

Allows indexing of image links under a metaname. Normally, image URLs are not indexed.

Example:

 
    ImagesLinksMetaName images

Now, if you would like to find pages that include a nice image of a beach:

 
    -w images='beach'

To make Swish-e index links as normal text, you may use:

 
    ImageLinksMetaName swishdefault

This feature is only available with the libxml2 HTML parser.

IndexAltTagMetaName *tagname*|as-text

Allows indexing of images <IMG> ALT tag text. Specify either a tag name which will be used as a metaname, or the special text ``as-text'' which says to index the ALT text as if it were plain text at the current location.

For example, by specifying a tag name:

 
   IndexAltTagMetaName bar

would make this markup:

 
    <foo>
        <img src="/someimage.png" alt="Alt text here">
    </foo>

appear like

 
    <foo>
        <bar>Alt text here</bar>
    </foo>

Then the normal rules (MetaNames and PropertyNames) apply to how that text is indexed.

If you use the special tag ``as-text'' then

 
    <foo>
        <img src="/someimage.png" alt="Alt text here">
    </foo>

simply becomes

 
    <foo>
        Alt text here
    </foo>

This feature is only available when using the libxml2 parser (HTML2 and XML2).

AbsoluteLinks [yes|NO]

If this is set true then Swish-e will attempt to convert relative URIs extracted from HTML documents for use with HTMLLinksMetaName and ImageLinksMetaName into absolute URIs. Swish-e will use any <BASE> tag found in the document, otherwise it will use the file's pathname. The pathname used will be the pathname *after* ReplaceRules has been applied to the document's pathname.

For example, say you wish to index image links under the metaname ``images''.

 
    ImageLinksMetaName images

If an image is located in http://localhost/vacations/france/index.html and AbsoluteLinks is set to no, then a image within that document:

 
     <img src="beach.jpeg">

will only index ``beach.jpeg''.

But, if you want more detail when searching, you can enable AbsoluteLinks and Swish-e will index ``http://localhost/vacations/france/beach.jpeg''. You can then look for images of beaches, but only in France:

 
    -w images=(beach and france)

This also means you can search for any images within France:

 
    -w images=(france)

This feature is only available with the libxml2 HTML parser.

UndefinedMetaTags [error|ignore|INDEX|auto]

This directive defines the behavior of Swish-e during indexing when a meta name is found but is not listed in MetaNames. There are four choices:

error

If a meta name is found that is not listed in MetaNames then indexing will be halted and an error reported.

ignore

The contents of the meta tag are ignored and not indexed unless a metaname has been defined with the MetaNames directive.

index

The contents of the meta tag are indexed, but placed in the main index unless there's an enclosing metatag already in force. This is the default.

auto

This method create meta tags automatically for HTML meta names and XML elements. Using this is the same as specifying all the meta names explicitly in a MetaNames directive.

UndefinedXMLAttributes [DISABLE|error|index|auto]

This is similar to UndefinedMetaTags, but only applies to XML documents (parsed with libxml2). This allows indexing of attribute content, and provides a way to index the content under a metaname. For example, UndefinedXMLAttributes can make

 
    <person age="23">
          John Doe
    </person>

look like the following to swish:

 
    <person>
        <person.age>
            23
        </person.age>
        John Doe
    </person>

What happens to the text ``23'' will depend on the setting of UndefinedXMLAttributes:

disable

XML attributes are not parsed and not indexed. This is the default.

error

If the concatenated meta name (e.g. person.age) is not listed in MetaNames then indexing will be halted and an error reported.

ignore

The contents of the meta tag are ignored and not indexed unless a metaname has been defined with the MetaNames directive.

index

The contents of the meta tag are indexed, but placed in the main index unless there's an enclosing metatag already in force.

auto

This method will create meta tags from the combined element and attributes (and XML Class name) This options should be used with caution as it can generate a lot of metaname entries.

See also the example below XMLClassAttribues.

XMLClassAttributes *list of XML attribute names*

Combines an XML class name with the element name to make up a metaname. For example:

 
    XMLClassAttributes class

 
    <person class="first">
        John
    </person>
    <person class="last">
        Doe
    </person>

Will appear to Swish-e as:

 
    <person>
        <person.first>
        John
        </person.first>
    </person>
    <person>
        <person.last>
        Doe
        </person.last>
    </person>

How the data is indexed depends on MetaNames and UndefinedMetaTags.

Here's an example using the following configuration which combines the two directives XMLClassAttributes and UndefinedXMLAttributes.

 
    XMLClassAttributes class
    UndefinedMetaTags auto
    UndefinedXMLAttributes auto
    IndexContents XML2 .xml

The source XML file looks like:

 
    <xml>
    <person class="student" phone="555-1212" age="102">
       John
    </person>
    <person greeting="howdy">Bill</person>
    </xml>

Swish-e parses as:

 
    ./swish-e -c 2 -i 1.xml -T parsed_tags  parsed_text  -v 0
    Indexing Data Source: "File-System"

 
    <xml> (MetaName)

 
        <person> (MetaName)
            <person.student> (MetaName)
                <person.student.phone> (MetaName)
                    555-1212
                </person.student.phone> 
                <person.student.age> (MetaName)
                    102
                </person.student.age> 
                John
        </person> 

 
        <person> (MetaName)
            <person.greeting> (MetaName)
                howdy
            </person.greeting> 
            Bill
        </person> 

 
    </xml> 
    Indexing done!

One thing to note is that the first <person> block finds a class name ``student'' so all metanames that are created from attributes use the combined name ``person.student''. The second <person> block doesn't contain a ``class'' so, the attribute name is combined directly with the element name (e.g. ``person.greeting'').

ExtractPath *metaname* [replace|remove|prepend|append|regex]

This directive can be used to index extracted parts of a document's path. A common use would be to limit searches to specific areas of your file tree.

The extracted string will be indexed under the specified meta name.

See ReplaceRules for a description of the various pattern replacement methods, but you will use the regex method.

For example, say your file system (or web tree) was organized into departments:

 
    /web/sales/foo...
    /web/parts/foo...
    /web/accounting/foo...

And you wanted a way to limit searches to just documents under ``sales''.

 
    ExtractPath department regex !^/web/([^/]+)/.*$!$1!

Which says, extract out the department name (as substring $1) and index it as meta name department. Then to limit a search to the sales department:

 
    swish-e -w foo AND department=sales

Note that the regex method uses a substitution pattern, so to index only a sub-string match the entire document path in the regular expression, as shown above. Otherwise any part that is not matched will end up in the substitution pattern.

See the ExtractPathDefault option for a way to set a value if not patterns match.

Although unlikely, you may use more than one ExtractPath directive. More than one directive of the same meta name will operate successively (in order listed in the configuration file) on the path. This allows you to use regular expressions on the results of the previous pattern substitution (as if piping the output from one expression to the patter of the next).

>
 
    ExtractPath foo regex !^(...).+$!$1!
    ExtractPath foo regex !^.+(.)$!$1!

So, the third letter is indexed as meta name ``foo'' if both patterns match.

 
    ExtractPath foo regex !^X(...).+$!$1!
    ExtractPath foo regex !^.+(.)$!$1!

Now (not the ``X''), if the first pattern doesn't match, the last character of the path name is indexed. You must be clear on this behavior if you are using more than one ExtractPath directive with the same metaname.

The document path operated on is the real path swish used to access the document. That is, the ReplaceRules directive has no effect on the path used with ExtractPath.

The full path is used for each meta name if more than one ExtractPath directive is used. That is, changes to the path used in ExtractPath foo do not affect the path used by ExtractPath bar.

ExtractPathDefault *metaname* default_value

This can be used with ExtractPath to set a default string to index under the given metaname if none of the ExtractPath patterns match.

For example, say your want to index each document with a metaname ``department'' based on the following path examples:

 
    /web/sales/foo...
    /web/parts/foo...
    /web/accounting/foo...

But you are also indexing documents that do not follow that pattern and you want to search those separately, too.

 
    ExtractPath department regex !^/web/([^/]+)/.*$!$1!
    ExtractPathDefault department other

Now, you may search like this:

 
    -w foo department=(sales)      - limit searches to the sales documents
    -w foo department=(parts)      - limit searches to the parts documents
    -w foo department=(accounting) - limit searches to the accounting documents
    -w foo department=(other)      - everything but sales, parts, and accounting.

This basically is a shortcut for:

 
    -w foo not department=(sales or parts or accounting)

but you don't need to keep track of what was extracted.

PropertyNames *list of meta names*

PropertyNamesCompareCase *list of meta names*

PropertyNamesIgnoreCase *list of meta names*

Swish-e allows you to specify certain META tags that can be used as document properties. The contents of any META tag that has been identified as a document property can be returned as part of the search results along with the rank, file name, title, and document size (see the -p and -x switches in SWISH-RUN).

Properties are useful for returning additional data from documents in search results -- this saves the effort of reading and parsing the source files while reading Swish-e search results, and is especially useful when the source documents are no longer available or slow to access (e.g. over http).

Another feature of properties is that Swish-e can use the PropertyNames for sorting the search results (see the -s switch).

 
    PropertyNames author subjects

Two variations are available. PropertyNamesCompareCase and PropertyNamesIgnoreCase. These tell Swish-e to either ignore or compare case when sorting results. The default for PropertyNames is to ignore the case.

 
    PropertyNamesIgnoreCase subject
    PropertyNamesCompareCase keyword

The defaults for ``internal'' properties are:

 
    swishtitle          --  ignore the case
    swishdocpath        --  compare case
    swishdescription    --  compare case

These can be overridden with PropertyNamesCompareCase and PropertyNamesIgnoreCase.

 
    PropertyNamesCompareCase swishtitle    

Use of PropertyNames will increase the size of your index files, sometimes significantly. Properties will be compressed if Swish-e is compiled with zlib as described in the INSTALL manual page.

If Swish-e finds more than one property of the same name in a document the property's contents will be concatinated for strings, and a warning issues for numeric (or date) properties.

PropertyNamesNoStripChars

PropertyNamesNoStripChars specifies that the listed properties should not have strings of low ASCII characters replaced with a space character. Properties will be stored as found in the document.

When printing properties with the swish-e binary newlines are replaced with a space character. Use the swish-e library (or SWISH::API perl module) to fetch properties without newlines replaced.

PropertyNamesNumeric

This directive is similar to PropertyNames, but it flags the property as being a string of digits (integer value) that will be stored as binary data instead of a string. This allows sorting with -s and limiting with -L to sort and limit the property correctly.

Swish-e uses strtoul(3) to convert the string into an unsigned long integer. Therefore, only positive integers can be stored.

Future versions of Swish-e may be able to store different property types (such as negative integers and real numbers). This directive may change in future releases of Swish.

PropertyNamesDate

This directive is exactly like PropertyNamesNumeric, but it also flags the number as a machine timestamp (seconds since Epoch), and will print a formatted date when returning this property. See -x in SWISH-RUN.

Swish-e will not parse dates when indexing; you must use a timestamp.

PropertyNameAlias *property name* *list of aliases*

This allows aliases for a property name. For example, if you are indexing HTML files, plus XML files that are written in English, German, and Spanish and thus use the tags ``title'', ``titel'', and ``ttulo'' you can use:

 
    PropertyNameAlias swishtitle title titel ttulo titulo

Note that ``swishtitle'' is the built-in property used to store the title of a document, and therefore you do not need to specify it as a PropertyName before use.

PropertyNamesMaxLength integer *list of meta names*

This option will set the max length of the text stored in a property. You must specify a number between 0 and the max integer size on your platform, and a list of properties. The properties specified must not be aliases.

If any of the property names do not exist they will be created (e.g. you do not need to define the property with PropertyNames first).

In general, this feature will only be useful when parsing HTML or XML with the libxml2 parser.

For example:

 
    PropertyNamesMaxLength 1000 swishdescription
    PropertyNameAlias swishdescription body

Is somewhat like

 
    StoreDescription HTML <body> 1000
    StoreDescription XML <body> 1000
    StoreDescription HTML2 <body> 1000
    StoreDescription XML2 <body> 1000

but StoreDescription allows setting the tag for each parser type.

 
    PropertyNamesMaxLength 1000 headings
    PropertyNameAlias headings h1 h2 h3 h4

collects all the heading text into a single property called ``headings'', not to exceed 1000 characters.

PropertyNamesSortKeyLength integer *list of meta names*

Sets the length of the string used when sorting. The default is 100 characters. The -T metanames debugging option will list the current values for an index.

This setting is used when sorting during indexing, and perhaps when sorting while searching. It also effects the order when limiting to a range of values with the -L option.

PreSortedIndex *list of property names*

By default Swish-e generates presorted tables while indexing for each property name. This allows faster sorting when generating results. On large document collections this presorting may add to the indexing time, and also adds to the total size of the index. This directive can be used to customize exactly which properties will be presorted.

If PreSortedIndex it is not present in the config file (default action), all the properties will be presorted at indexing time. If it is present without any parameter, no properties will be presorted. Otherwise, only the property names specified will be presorted.

For example, if you only wish to sort results by a property called title:

 
    PropertyNames title age time
    PreSortedIndex  title

StoreDescription [XML <tag> size|HTML <meta> size|TXT size]

StoreDescription allows you to store a document description in the index file. This description can be returned in your search results when the -x switch is used to include the swishdescription for extended results, or by using -p swishdescription.

The document type (XML, HTML and TXT) must match the document type currently being indexed as set by IndexContents or DefaultContents. See those directives for possible values. A common problem is using StoreDescription yet not setting the document's type with IndexContents or DefaultContents. Another problem is different types:

 
    IndexContents HTML2 .html
    StoreDescription HTML <body>

Then .html documents are assigned a type of HTML2 (and parsed by the libxml2 parser), but the description will not be stored since it is type HTML instead of HTML2.

For text documents you specify the type TXT (or TXT2 or TXT*) and the number of characters to capture.

 
    StoreDescription TXT 20

The above stores only the first twenty characters from the text file in the Swish-e index file.

For HTML, and XML file types, specify the tag to use for the description, and optionally the number of characters to capture. If not specified will capture the entire contents of the tag.

 
    StoreDescription HTML <body> 20000
    StoreDescription XML  <desc> 40

Again, note that documents must be assigned a document type with IndexContents or DefaultContents to use this feature.

Swish-e will compress the descriptions (or any other large property) if compiled to use zlib (see INSTALL). This is recommended when using StoreDescription and a large number of documents. Compression of 30% to 50% is not uncommon with HTML files.

PropCompressionLevel [0-9]

This directive sets the compression level used when storing properties to disk. A setting of zero is no compression, and a setting of nine is the most compression.

The default depends on the default setting compiled with zlib, but is typically six.

This option is useful when using StoreDescription to store a large amount text in properties (or if using PropertyNames with large property sizes).

Properties must be over a value defined in config.h (100 is the default) before compression will be attempted. Swish-e will never store the results of the compression if the compressed data is larger than the original data.

This option is only available when Swish-e is compiled with zlib support.

TruncateDocSize *number of characters*

TruncateDocSize limits the size of a document while indexing documents and/or using filters. This config directive truncates the numbers of read bytes of a document to the specified size. This means: if a document is larger, read only the specified numbers of bytes of the document.

Example:

>
    TruncateDocSize    10000000
 

The default is zero, which means read all data.

Warning: If you use TruncateDocSize, use it with care! TruncateDocSize is a safety belt only, to limit e.g. filteroutput, when accessing databases, or to limit ``runnaway'' filters. Truncating doc input may destroy document structures for Swish-e (e.g. swish may miss closing tags for XML or HTML documents).

TruncateDocSize does not currently work with the prog input source method.

FuzzyIndexingMode NONE|Stemming|Soundex|Metaphone|DoubleMetaphone

Selects the type of index to create. Only one type of index may be created.

It's a good idea to create both a normal index and a fuzzy index and allow your search interface select which index to use. Many people find the fuzzy searches to be too fuzzy.

The available fuzzy indexing options can be displayed by running

 
   swish-e -T LIST_FUZZY_MODES

Available options include:

None

Words are stored in the index without any conversion. This is the default.

Stemming_*

This options uses one of the installed Snowball stemmers (http://snowball.tartarus.org/).

The installed stemmers can be viewed by running

 
   swish-e -T LIST_FUZZY_MODES

For example, to use the Spanish stemming module:

 
   FuzzyIndexingMode Stemming_es

Stem or Stemming_en

Selects the legacy Swish-e English stemmer.

This is deprecated in favor of the Snowball English stemmers (Stemming_en1, Stemming_en2). Future versions of Swish-e will likely use the Stemming_en2 stemmer by default.

Words are converted using the Porter stemming algorithm.

From: http://www.tartarus.org/~martin/PorterStemmer/

 
    The Porter stemming algorithm (or Porter stemmer) is a
    process for removing the commoner morphological and inflexional
    endings from words in English. Its main use is as part of a
    term normalisation process that is usually done when setting up
    Information Retrieval systems.

This will help a search for ``running'' to also find ``run'' and ``runs'', for example.

The stemming function does not convert words to their root, rather programmatically removes endings on words in an attempt to make similar words with different endings stem to the same string of characters. It's not a perfect system, and searches on stemmed indexes often return curious results. For example, two entirely different words may stem to the same word.

Stemming also can be confusing when used with a wildcard (truncation). For example, you might expect to find the word ``running'' by searching for ``runn*''. But this fails when using a stemmed index, as ``running'' stems to ``run'', yet searching for ``runn*'' looks for words that start with ``runn''.

Soundex

Soundex was developed in the 1880s so records for people with similar sounding names could be found more readily. Soundex is a coded surname based on the way a surname sounds rather than spelling. Surnames that sound similar, like Smith and Smyth, are filed together under the same Soundex code. This is mostly useful for US English.

Soundex should not be used to search for sound-alike words. Metaphone would be more appropriate for generic sound matching of words. Soundex should only be used where you need to search multiple documents for proper names which sound similar. This is primarily used for indexing genealogical records. This may be useful for indexing other collections of data consisting mostly of names. Many common name variations are matched by Soundex. The only notable exception is the first letter of the name. The first letter is not matched for sound.

Metaphone and DoubleMetaphone

Words are transformed into a short series of letters representing the sound of the word (in English). Metaphone algorithms are often used for looking up mis-spelled words in dictionary programs.

From: http://aspell.sourceforge.net/metaphone/

 
    Lawrence Philips' Metaphone Algorithm is an algorithm which returns
    the rough approximation of how an English word sounds.

The DoubleMetaphone mode will sometimes generate two different metaphones for the same word. This is supposed to be useful when a word may be pronounced more than one way.

A metaphone index should give results somewhere in between Soundex and Stemming.

UseStemming [yes|NO]

Put yes to apply word stemming algorithm during indexing, else no.

 
    UseStemming no
    UseStemming yes

When UseStemming is set to yes every word is stemmed before placing it in to the index.

This option is deprecated. It has been superceded by FuzzyIndexingMode.

UseSoundex [yes|NO]

When UseSoundex is set to yes every word is converted to a Soundex code before placing it in to the index.

This option is deprecated. It has been superceded by FuzzyIndexingMode.

IgnoreTotalWordCountWhenRanking [YES|no]

Put yes to ignore the total number of words in the file when calculating ranking. Often better with merges and small files. Default is yes.

 
    IgnoreTotalWordCountWhenRanking no

The default was changed from no to yes in version 2.2.

MinWordLimit *integer*

Set the minimum length of an word. Shorter words will not be indexed. The default is 1 (as defined in src/config.h).

 
    MinWordLimit 5

MaxWordLimit *integer*

Set the maximum length of an indexable word. Every longer word will not be indexed. The Default is 40 (as defined in src/config.h).

WordCharacters *string of characters*

IgnoreFirstChar *string of characters*

IgnoreLastChar *string of characters*

BeginCharacters *string of characters*

EndCharacter *string of characters*

These settings define what a word consists of to the Swish-e indexing engine. Compiled in defaults are in src/config.h.

When indexing Swish-e uses WordCharacters to split up the document into words. Words are defined by any string of non-blank characters that contain only the characters listed in WordCharacters. If a string of characters includes a character that is not in WordCharacters then the word will be spit into two or more separate words.

For example:

 
    WordCharacters abde

Would turn ``abcde'' into two words ``ab'' and ``de''.

Next, of these words, any characters defined in IgnoreFirstChar are stripped off the start of the word, and IgnoreLastChar characters are stripped off the end of the word. This allows, for example, periods within a word (www.slashdot.com), but not at the end of a word. Characters in IgnoreFirstChar and IgnoreLastChar must be in WordCharacters.

Finally, the resulting words MUST begin with one of the characters listed in BeginCharacters and end with one of the characters listed in EndCharacters. BeginCharacters and EndCharacters must be a subset of the characters in WordCharacters. Often, WordCharacters, BeginCharacters and EndCharacters will all be the same.

Note that the same process applies to the query while searching.

Getting these settings correct will take careful consideration and practice. It's helpful to create an index of a single test file, and then look at the words that are placed in the index (see the -v 4, -D and -k searching switches).

Currently there is only support for eight-bit characters.

Example:

 
    WordCharacters  .abcdefghijklmnopqrstuvwxyz
    BeginCharacters abcdefghijklmnopqrstuvwxyz
    EndCharacters   abcdefghijklmnopqrstuvwxyz
    IgnoreFirstChar .
    IgnoreLastChar  .

So the string

 
    Please visit http://www.example.com/path/to/file.html.

will be indexed as the following words:

 
    please
    visit
    http
    www.example.com
    path
    to
    file.html

Which means that you can search for www.example.com as a single word, but searching for just example will not find the document.

Note: when indexing HTML documents HTML entities are converted to their character equivalents before being processed with these directives. This is a change from previous versions of Swish-e where you were required to include the characters 0123456789&#; to index entities. See also ConvertHTMLEntities

Buzzwords [*list of buzzwords*|File: path]

The Buzzwords option allows you to specify words that will be indexed regardless of WordCharacters, BeginCharacters, EndCharacters, stemming, soundex and many of the other checks done on words while indexing.

Buzzwords are case insensitive.

Buzzwords should be separated by spaces and may span multiple directives. If the special format File:filename is used then the Buzzwords will be read from an external file during indexing.

Examples:

 
    Buzzwords C++ TCP/IP

 
    Buzzwords File: ./buzzwords.lst

If a Buzzword contains search operator characters they must be backslashed when searching. For example:

 
    Buzzwords C++ TCP/IP web=http

 
    ./swish-e -w 'web\=http'

Buzzwords are found by splitting the text on whitespace, removing IgnoreFirstChar and IgnoreLastChar characters from the word, and then comparing with the list of Buzzwords. Therefore, if adding Buzzwords to an index you will probably want to define IgnoreFirstChar and IgnoreLastChar settings.

Note: Buzzwords specific settings for IgnoreFirstChar and IgnoreLastChar may be used in the future.

IgnoreWords [*list of stop words*|File: path]

The IgnoreWords option allows you to specify words to ignore, called stopwords. The default is to not use any stopwords.

Words should be separated by spaces and may span multiple directives. If the special format File:filename is used then the stop words will be read from an external file during indexing.

In previous versions of Swish-e you could use the directive

 
    IgnoreWords swishdefault - obsolete!

to include a default list of compiled in stopwords. This keyword is no longer supported.

Examples:

 
    IgnoreWords www http a an the of and or

 
    IgnoreWords File: ./stopwords.de

UseWords [*list of words*|File: path]

UseWords defines the words that Swish-e will index. Only the words listed will be indexed.

You can specify a list of words following the directive (you may specify more than one UseWords directive in a config file), and/or use the File: form to specify a path to a file containing the words:

 
    UseWords perl python pascal fortran basic cobal php
    UseWords File: /path/to/my/wordlist

Please drop the Swish-e list a note if you actually use this feature. It may be removed from future versions.

IgnoreLimit *integer integer*

This automatically omits words that appear too often in the files (these words are called stop>words). Specify a whole percentage and a number, such as ``80 256''. This omits words that occur in over 80% of the files and appear in over 256 files. Comment out to turn off auto-stopwording.

 
    IgnoreLimit 50 1000

Swish-e must do extra processing to adjust the entire index when this feature is used. It is recommended that instead of using this feature that you decided what words are stopwords and add them to IngoreWords in your configuration file. To do this, use IgnoreLimit one time and note the stop words that are found while indexing. Add this list to IgnoreWords, and then remove IgnoreLimit from the configuration file.

IgnoreMetaTags *list of names*

IgnoreMetaTags defines a list of metatags to ignore while indexing XML files (and HTML files if using libxml2 for parsing HTML). All text within the tags will be ignored -- both for indexing (MetaNames) and properties (PropertyNames). To still parse properties, yet do not index the text, see UndefinedMetaTags.

This option is useful to avoid indexing specific data from a file. For example:

 
    <person>
        <first_name>
            William
        </first_name> <last_name>
            Shakespeare
        </last_name> <updated_date>
            April 25, 1999
        </updated_date>
    </person>

In the above example you might not want to index the updated date, and therefore prevent finding this record by searching

 
    -w 'person=(April)'

This is solved by:

 
    IgnoreMetaTags updated_date

See also UndefinedMetaTags.

IgnoreNumberChars *list of characters*

Experimental Feature

This experimental feature can be used to define a set of characters that describe a number. If a word is found to contain only those characters it will not be indexed. The characters listed must be part of WordCharacters settings. In other words, the ``word'' checked is a word that Swish-e would otherwise index.

For example,

 
    IgnoreNumberChars 0123456789$.,

Then Swish-e would not index the following:

 
    123
    123,456.78
    $123.45

You might be tempted to avoid indexing hex numbers with:

 
    IgnoreNumberChars 0123456789abcdef

which will not index 0D31, but will also not index the word ``bad''.

This is an experimental feature that may change in future versions. One possible change is to use regular expressions instead.

IndexComments [NO|yes]

This option allows the user decide if to index the contents of HTML comments. Default is no. Set to yes if comment indexing is required.

 
    IndexComments yes

Note: This is a change in the default behavior prior to version 2.2.

TranslateCharacters [*string1 string2*|:ascii7:]

The TranslateCharacters directive maps the characters in string1 to the characters listed in string2.

For example:

 
    # This will index a_b as a-b and mo as amo
    TranslateCharacters _ -a

TranslateCharacters :ascii7: is a predefined set of characters that will translate eight bit characters to ascii7 characters. Using the :ascii7: rule will translate ``'' to ``aac''. This means: searching ``elik'', ``elik'' or ``celik'' will all match the same word.

TranslateCharacters is done early in the indexing process, after converting HTML entities but before splitting the input text into words based on WordCharacters. So characters you are translating from do not need to be listed in word characters.

The same character translations take place when searching.

BumpPositionCounterCharacters *string*

When indexing Swish-e assigns a word position to each word. This enables phrase searching. There may be cases where you would like to prevent phrase matching. The BumpPositionCounterCharacters directive allows you to specify a set of characters that when found in the text will increment the word position -- effectively preventing phrase matches across that character.

For example, if you have a tag:

 
    <subjects>
        computer programming | apple computers
    </subjects>

You might want to prevent matching ``programming apple'' in that meta name.

 
    BumpPositionCounterCharacters |

There is no default, and you may list a string of characters.

DontBumpPositionOnEndTags *list of names*

DontBumpPositionOnStartTags *list of names*

Since metatags are typically separate data fields, the word position counter is automatically bumped between metatags (actually, bumped when a start tag is found and when an end tag is found). This prevents matching a phrase that spans more than one metaname. DontBumpPositionOnEndTags and DontBumpPositionOnStartTags disables this feature for the listed metanames.

For example,

 
    <person>
        <first_name>
            William
        </first_name>
        <last_name>
            Shakespeare
        </last_name>
        <updated_date>
            April 25, 1999
        </updated_date>
    </person>

In the configuration file:

 
    DontBumpPositionOnEndTags first_name
    DontBumpPositionOnStartTags last_name

This configuration allows this phrase search

 
    -w 'person=("william shakespeare")'

but this phrase search will fail

 
    -w 'person=("shakespeare april")'

[ TOC ]


Directives for the File Access method only

Some directives have different uses depending on the source of the documents. These directives are only valid when using the File system method of indexing.

IndexOnly *list of file suffixes*

This directive specifies the allowable file suffixes (extensions) while indexing. The default is to index all files specified in IndexDir.

 
    # Only index .html .htm and .q files
    IndexOnly .html .htm .q

IndexOnly checks that the file end in the characters listed. It does not check ``extensions''. IndexOnly is tested right before FileRules is processed.

FollowSymLinks [yes|NO]

Put ``yes'' to follow symbolic links in indexing, else ``no''. Default is no.

 
    FollowSymLinks no
    FollowSymLinks yes

Note that when set to no extra stat(2) system calls must be made for each file. For large number of files you may see a small reduction in indexing time by setting this to yes.

See also the -l switch in SWISH-RUN.

FileRules [type] [contains|is|regex] *regular expression*

FileMatch [type] [contains|is|regex] *regular expression*

FileRules and FileMatch are used to, respectively, exclude and include files and directories to index. Since, by default, Swish-e indexes all files and recurses all directories (but see also FollowSymLinks) you will typically only use FileRules to exclude files or directories. FileMatch is useful in a few cases, for example, to override the behavior of IndexOnly. Some examples are included below.

Except for FileRules title ..., this feature is only available for file access method (-S fs), which is the default indexing mode. Also, any pathname modification with ReplaceRules happens after the check for FileRules. (It's unlikely that you would exclude files with FileRules based on text you added with ReplaceRules!)

The regular expression is a C regex.h extended regular expression. You may supply more than one regular expression per line, or use separate directives. Preceding the regular expression with the word ``not'' negates the match.

The regular expression is compared against [type] as described below.

For historical reasons, you can specify contains or is. is simply forces the regular expression to match at the start and end of the string (by internally prepending ``^'' and appending ``$'' to the regular expression).

The regex option requires delimiter characters:

 
    FileRules title regex /^private/i

The only advantage of regex is if you want to do case insensitive matches, or simply like your regular expressions to look like perl regular expressions. You must use matching delimiters; (), {}, and [], are not currently supported for no good reason other than laziness.

Use quotes (`` or ') around a pattern if it contains any white space. Note that the backslash character becomes the escape character within quotes.

For example, these sets generate the same regular expressions.

 
    FileRules title is hello
    FileRules title contains ^hello$
    FileRules title regex /^hello$/

These all need quotes due to the included space character

 
    FileRules title is "hello there"
    FileRules title contains "^hello there$"
    FileRules title regex "!^hello there$!"

These show how the backslash must be doubled inside of quotes. Swish-e converts a double-backslash into a single backslash, and then passes that single onto the regular expression compiler.

 
    FileRules filename regex /\.pdf/
    FileRules filename regex "/\\.pdf/"

 
    FileRules filename regex !hello\\there!     # need double for real backslash 
    FileRules filename regex "!hello\\\\there!" # need double-double inside of quotes

Matching Types

The following types of match strings my be supplied:

 
    FileRules pathname
    FileRules dirname
    FileRules filename
    FileRules directory
    FileRules title

 
    FileMatch pathname
    FileMatch filename
    FileMatch dirname
    FileMatch directory

pathname matches the regular expression against the current pathname. The pathname may or may not be absolute depending on what you supplied to IndexDir.

Example:

 
    # Don't index paths that contain private or hidden
    FileRules pathname contains (private|hidden)

 
    # Same thing
    FileRules pathname regex /(private|hidden)/

 
    # Don't index exe files
    FileRules pathname contains \.exe$

dirname and filename split t>he path name by the last delimiter character into a directory name, and a file name. Then these are compared against the patterns supplied. Directory names do not have a trailing slash. All path names use the forward slash as a delimiter within Swish-e.

Example:

 
    # Same as last example - don't index *.exe files.
    FileRules filename contains \.exe$

 
    # Don't index any file called test.html files
    FileRules filename contains ^test\.html$

 
    # Same thing
    FileRules filename is test\.html

 
    # Don't index any directories that contain "old"  (/usr/local/myold/docs)
    FileRules dirname contains old

 
    # Don't index any directories that contain the path segment "old" (/usr/local/old/foo)
    FileRules dirname contains /old/  

 
    # Index only .htm, .html, plus any all-digit file names
    IndexOnly .htm .html
    FileMatch filename contains ^\d+$

 
    # Same as previous, but maybe a little slower
    FileRules filename regex not !\.(htm|html)$!
    FileMatch filename contains ^\d+$

Swish-e checks these settings in the order of pathname, dirname, and filename, and FileMatch patterns are checked before FileRules, in general. This allows you to exclude most files with FileRules, yet allow in a few special cases with FileMatch. For example:

 
    # Exclude all files of .exe, .bin, and .bat
    FileRules filename contains \.(exe|bin|bat)$
    # But, let these two in
    FileMatch filename is baseball\.bat incoming_mail\.bin

 
    # Same, but as a single pattern
    FileMatch filename is (baseball\.bat|incoming_mail\.bin)

The directory type is somewhat unique. When Swish-e recurses into a directory it will compare all the files in the directory with the pattern and then decide if that entire directory should or should not be indexed (or recursed). Note that you are matching against file names in a directory -- and some of those names may be directory names.

A FileRules directory match will cause Swish-e to ignore all files and sub-directories in the current directory.

Warning: A match with FileMatch directory says to index everything in the *current* directory and ignore any FileRules for this directory.

Example:

 
    # Don't index any directories (and sub directories) that contain
    # a file (or sub-directory) called "index.skip"
    FileRules directory contains ^index\.skip$

 
    # Don't index directories that contain a .htaccess file.
    FileRules directory contains ^\.htaccess

Note: While processing directories, Swish-e will ignore any files or directories that begin with a dot (``.''). You may index files or directories that begin with a dot by specifying their name with IndexDir or -i.

title checks for a pattern match in an HTML title.

Example:

 
    FileRules title contains construction example pointers

 
    # This example says to ignore case
    FileRules title regex "/^Internal document/i"

Note: FileRules title works for any input method (fs, prog, or http) that is parsed as HTML, and where a title was found in the document.

In case all this seems a bit confusing, processing a directory happens in the following order.

First the directory name is checked:

 
    FileRules dirname - reject entire directory if matches

Next the directory is scanned and each file name (which might be the name of a sub-directory) is checked:

 
    FileRules directory - reject entire dir if *any* files match
    FileMatch directory - accept entire dir if *any* files match

Then, unless FileMatch directory matched, each file is tested with FileMatch. A match says to index the file without further testing (i.e. overrides FileRules and IndexOnly):

 
    FileMatch pathname  \
    FileMatch dirname   - file is accepted if any match
    FileMatch filename  /

otherwise

 
    IndexOnly - file is checked for the correct file extension

 
    FileRules pathname  \
    FileRules dirname   - file is rejected if any match
    FileRules filename  /

finally, the file is indexed.

Files (not directories) listed with IndexDir or -i are processed in a similar way:

 
    FileMatch pathname  \
    FileMatch dirname   - file is accepted if any match
    FileMatch filename  /

otherwise, the file is rejected if it doesn't have the correct extension or a FileRules matches.

 
    IndexOnly - file is checked for the correct file extension

 
    FileRules pathname  \
    FileRules dirname   - file is rejected if any match
    FileRules filename  /

Note: If things are not indexing as you expect, create a directory with some test files and use the -T regex trace option to see how file names are checked. Start with very simple tests!

[ TOC ]


Directives for the HTTP Access Method Only

The HTTP Access method is enabled by the ``-S http'' switch when indexing. It works by running a Perl program called SwishSpider which fetches documents from a web server.

Only text files (content-type of ``text/*'') are indexed with the HTTP Access Method. Other document types (e.g. PDF or MSWord) may be indexed as well. The SwishSpider will attempt to make use of the SWISH::Filter module (included with the Swish-e distribution) to convert documents into a format that Swish-e can index.

Note: The -S prog method of spidering (using spider.pl) can be a replacement for the -S http method. It offers more configuration options and better spidering speed.

These directives below are available when using the HTTP Access Method of indexing.

MaxDepth *integer*

MaxDepth defines how many links the spider should follow before stopping. A value of 0 configures the spider to traverse all links. The default is MaxDepth 0.

 
    MaxDepth 5

Note: The default was changed from 5 to 0 in release 2.4.0

Delay *seconds*

The number of seconds to wait between issuing requests to a server. This setting allows for more friendly spidering of remote sites. The default is 5 seconds.

 
    Delay 1

Note: The default was changed from 60 to 5 seconds in release 2.4.0

TmpDir *path*

The location of a writable temp directory on your system. The HTTP access method tells the Perl helper to place its files in this location, and the -e switch causes Swish-e to use this directory while indexing. There is no default.

 
    TmpDir /tmp/swish

If this directory does not exist or is not writable Swish-e will fail with an error during indexing.

Note, the environment variables of TMPDIR, TMP, and TEMP (in that order) will override this setting.

SpiderDirectory *path*

The location of the Perl helper script called swishspider. If you use a relative directory, it is relative to your directory when you run Swish-e, not to the directory that Swish-e is in. The default is the location swishspider was installed. Normally this does not need to be set.

 
    SpiderDirectory /usr/local/swish

EquivalentServer *server alias*

Often times the same site may be referred to by different names. A common example is that often http://www.some-server.com and http://some-server.com are the same. Each line should have a list of all the method/names that should be considered equivalent. Multiple EquivalentServer directives may be used. Each directive defines its own set of equivalent servers.

 
    EquivalentServer http://library.berkeley.edu http://www.lib.berkeley.edu
    EquivalentServer http://sunsite.berkeley.edu:2000 http://sunsite.berkeley.edu

[ TOC ]


Directives for the prog Access Method Only

This section details the directives that are only available for the ``prog'' document source feature of Swish-e. The ``prog'' access method runs an external program that ``feeds'' documents to Swish-e. This allows indexing and filtering of documents from any source.

See prog - general purpose access method in the SWISH-RUN man page for more information.

A number of example programs for use with the ``prog'' access method are provided in the prog-bin directory. Please see those example if you have questions about implementing a ``prog'' input program.

SwishProgParameters *list of parameters*

This is a list of parameters that will be sent to the external program when running with the ``prog'' document source method.

 
    SwishProgParameters /path/to/config hello there
    IndexDir /path/to/program.pl

Then running:

 
    swish-e -c config -S prog

Swish-e will execute /path/to/program.pl and pass /path/to/config hello there as three command line arguments to the program. This directive makes it easy to pass settings from the Swish-e configuration file to the external program.

For example, the spider.pl program (included in the prog-bin directory) uses the SwishProgParameters to specify what file to read for configuration information.

 
    SwishProgParameters spider.config
    IndexDir ./spider.pl

The spider.pl program also has a default action so you can avoid using a configuration file:

 
    SwishProgParameters default http://www.swishe.org/ http://some.other.site/
    IndexDir ./spider.pl

And the spider program will use default settings for spidering those sites.

Swish-e can read documents from standard input, so another way to run an external program with parameters is:

 
    ./spider.pl spider.conf | ./swish-e -S prog -i stdin

Notes when using MS Windows

You should use unix style path separators to specify your external program. Swi:sh will convert forward slashes to backslashes before calling the external program. This is only true for the program name specified with IndexDir or the -i command line option.

In addition, Swish-e will make sure the program specified actually exists, which means you need to use the full name of the program.

For example, to run the perl spider program spider.pl you would need a Swish-e configuration file such as:

 
    IndexDir e:/perl/bin/perl.exe
    SwishProgParameters prog-bin/spider.pl default http://swish-e.org

and run indexing with the command:

 
    swish-e -c swish.cfg -S prog -v 9

The IndexDir command tells Swish-e the name of the program to run. Under unix you can just specify the name of the script, since unix will figure out the program from the first line of the script.

The SwishProgParameters are the parameters passed to the program specified by IndexDir (perl.exe in this case). The first parameter is the perl script to run (prog-bin/spider.pl). Perl passes the rest of the parameters directly to the perl script. The second parameter default tells the spider.pl program to use default settings for spidering (or you could specify a spider config file -- see perldoc spider.pl for details), and lastly, the URL is passed into the spider program.

[ TOC ]


Document Filter Directives

Internally, Swish-e knows how to parse only text, HTML, and XML documents. With ``filters'' you can index other types of documents. For example, if all your web pages are in gzip format a filter can uncompress these on the fly for indexing.

You may wish to read the Swish-e FAQ question on filtering before continuing here. How Do I filter documents?

There are two suggested methods for filtering.

[ TOC ]


Filtering with SWISH::Filter

The Swish-e distribution includes a Perl module called SWISH::Filter and individual filters located in the filters directory. This system uses plug-in filters to extend the types of documents that Swish-e can index. The plug-in filters do not actually do the filtering, but rather provide a standard interface for accessing programs that can filter or convert documents. The programs that do the filtering are not part of the Swish-e distribution; they must be downloaded and installed separately.

The advantage of this method is that new filtering methods can be installed easily.

This system is designed to work with the -S http and -prog methods, but may also be used with the FileFilter feature and -S fs indexing method. See $prefix/share/doc/swish-e/examples/filter-bin/swish_filter.pl for an example.

See the filters/README file for more information.

[ TOC ]


Filtering with the FileFilter feature

A filter is an external program that Swish-e executes while processing a document of a given type. Swish-e will execute the filter program for each file that matches the file suffix (extension) set in the FileFilter or FileFilterMatch directives. FileFilterMatch matches using regular expressions and is described below.

Filters may be used with any type of input method (i.e. -S fs, -S http, or -S prog). But because

Swish-e calls the external program passing as default arguments:

$0

the name of the filter program

$1

the physical path name of the file to read. This may be a temporary file location if indexing by the http method.

$2

When indexing under the file system this will be the same as $1 (the path to the source file), but when indexing under the http method this will be the URL of the source document.

Swish-e can also pass other parameters to the filter program. These parameters can be defined using the FileFilter or FileFilterMatch directives. See Filter Options below.

The filter program must open the file, process its contents, and return it to Swish-e by printing to STDOUT.

Note that this can add a significant amount of time to the indexing process if your external program is a perl or shell script. If you have many files to filter you should consider writing your filter in C instead of a shell or perl script, or using the ``prog'' Access Method.

FilterDir *path-to-directory*

This is the path to a directory where the filter programs are stored. Swish-e looks in this directory to find the filter specified in the FileFilter directive. If this directive is omitted, you have to specify the full path to the filterscript on each FileFilter directive.

This feature does *not* apply to the FileFilterMatch directive.

Example:

 
    FilterDir /usr/local/swish/filters

FileFilter *suffix* "filter-prog" ["filter-options"]

This maps file suffix (extension) to a filter program. If filter-prog starts with a directory delimiter (absolute path), Swish-e doesn't use the FilterDir settings, but uses the given filter-prog path directly.

Filter options:

Filter options are a string passed as arguments to the filter-prog. Filter options can contain variables, replaced by Swish-e. If you omit filter-options Swish-e will use default parameters for the options listed above.

 
    Default:      "'%p' '%P'"
    Which means:  pass   "workfile path" and "documentfile path" to filter (each quoted).

Variables in filter options:

 
    %%   =  %
    %P   =  Full document pathname (e.g. URL, or path on filesystem)  
    %p   =  Full pathname to work file (maybe a tmpfile or the real document path on filesystem)
    %F   =  Filename stripped from full document pathname
    %f   =  Filename stripped from "work" pathname
    %D   =  Directoryname stripped from full document pathname
    %d   =  Directoryname stripped from full "work" pathname

Examples of strings passed:

 
    %P =  document pathname:  http://myserver/path1/mydoc.txt
    %p =  work pathname:      /tmp/tmp.1234.mydoc.txt
    %F =     mydoc.txt
    %f =     tmp.1234.mydoc.txt
    %D =     http://myserver/path1
    %d =     /tmp

Important hint for security:

When using variable substitution, use quotes to ensure filename integrity.

 
        e.g. "'%f'"  -->  'file name with spaces.doc'.

If you don't use this, your system security may be compromised, or filtering may not work for these files.

Notes when using MS Windows

Windows uses double quotes to escape shell metacharacters, so reverse the quotes in the examples above. e.g.:

 
        '"%f"' --> "file name with spaced.doc"

You can specify the filter program using forward slashes (unix style). Swish will convert the slashes to backslashes before running your program.

 
    FileFilter .mydoc     c:/some/path/mydocfilter.exe  '-d "%d" -example -url "%P" "%f"'

Examples of filters:

 
    FileFilter .doc       /usr/local/bin/catdoc "-s8859-1 -d8859-1 '%p'"
    FileFilter .pdf       pdftotext   "'%p' -"
    FileFilter .html.gz   gzip  "-c '%p'"
    FileFilter .mydoc     "/some/path/mydocfilter"  "-d '%d' -example -url '%P' '%f'"

The above examples are running a binary filter program. For more complicated filtering needs you may use a scripting language such as Perl or a shell script. Here's some examples of calling a shell and perl script:

 
    FileFilter .pdf       pdf2html.sh
    FileFilter .ps        ghostscript-filter.pl

Using a scripting language (or any language that has a large startup cost) can greatly increase the indexing time. For small indexing jobs, this may not be an issue, but for large collections of files that require processing by a scripting language, you may be better off using the -S prog access method where the script will only be compiled once, instead of for each document.

Filters are probably easier to write than a -S prog program. Which you decide to use depends on your requirements. Examples of filter scripts can be found in the filter-bin directory, and examples of -S prog programs can be found in the prog-bin directory.

FileFilterMatch *filter-prog* *filter-options* *regex* [*regex* ...]

This is similar to FileMatch except uses regular expressions to match against the file name. *filter-prog* is the path to the program. Unlike FileFilter this does not use the FilterDir option. Also unlike FileFilter you must specify the *filter-options*.

Examples:

 
    FileFilterMatch ./pdftotext "'%p' -" /\.pdf$/

Note that will also match a file called ``.pdf'', so you may want to use something that requires a filename that has more than just an extension. For example:

 
    FileFilterMatch ./pdftotext "'%p' -" /.\.pdf$/

To specify more than one extension:

 
    FileFilterMatch ./check_title.pl "%p" /\.html$/  /\.htm$/

Or a few ways to do the same thing:

 
    FileFilterMatch ./check_title.pl %p /\.(html|html)$/
    FileFilterMatch ./check_title.pl %p /\.html?$/

And to ignore case:

 
    FileFilterMatch ./check_title.pl %p /\.html?$/i

You may also precede an expression with ``not'' to negate regular expression that follow. For example, to match files that do not have an extension:

 
    FileFilterMatch ./convert "%p %P" not /\..+$/

[ TOC ]


Document Info

$Id: SWISH-CONFIG.pod,v 1.74.2.2 2003/12/23 15:52:02 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-FAQ.html~@t2 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: The Swish-e FAQ - Answers to Common Questions

Swish-E Logo


The Swish-e FAQ - Answers to Common Questions


Table of Contents:

[ TOC ]

Frequently Asked Questions

[ TOC ]


General Questions

[ TOC ]


What is Swish-e?

Swish-e is Simple Web Indexing System for Humans - Enhanced. With it, you can quickly and easily index directories of files or remote web sites and search the generated indexes for words and phrases.

[ TOC ]


So, is Swish-e a search engine?

Well, yes. Probably the most common use of Swish-e is to provide a search engine for web sites. The Swish-e distribution includes CGI scripts that can be used with it to add a search engine for your web site. The CGI scripts can be found in the example directory of the distribution package. See the README file for information about the scripts.

But Swish-e can also be used to index all sorts of data, such as email messages, data stored in a relational database management system, XML documents, or documents such as Word and PDF documents -- or any combination of those sources at the same time. Searches can be limited to fields or MetaNames within a document, or limited to areas within an HTML document (e.g. body, title). Programs other than CGI applications can use Swish-e, as well.

[ TOC ]


Should I upgrade if I'm already running a previous version of Swish-e?

A large number of bug fixes, feature additions, and logic corrections were made in version 2.2. In addition, indexing speed has been drastically improved (reports of indexing times changing from four hours to 5 minutes), and major parts of the indexing and search parsers have been rewritten. There's better debugging options, enhanced output formats, more document meta data (e.g. last modified date, document summary), options for indexing from external data sources, and faster spidering just to name a few changes. (See the CHANGES file for more information.

Since so much effort has gone into version 2.2, support for previous versions will probably be limited.

[ TOC ]


Are there binary distributions available for Swish-e on platform foo?

Foo? Well, yes there are some binary distributions available. Please see the Swish-e web site for a list at http://swish-e.org/.

In general, it is recommended that you build Swish-e from source, if possible.

[ TOC ]


Do I need to reindex my site each time I upgrade to a new Swish-e version?

At times it might not strictly be necessary, but since you don't really know if anything in the index has changed, it is a good rule to reindex.

[ TOC ]


What's the advantage of using the libxml2 library for parsing HTML?

Swish-e may be linked with libxml2, a library for working with HTML and XML documents. Swish-e can use libxml2 for parsing HTML and XML documents.

The libxml2 parser is a better parser than Swish-e's built-in HTML parser. It offers more features, and it does a much better job at extracting out the text from a web page. In addition, you can use the ParserWarningLevel configuration setting to find structural errors in your documents that could (and would with Swish-e's HTML parser) cause documents to be indexed incorrectly.

Libxml2 is not required, but is strongly recommended for parsing HTML documents. It's also recommended for parsing XML, as it offers many more features than the internal Expat xml.c parser.

The internal HTML parser will have limited support, and does have a number of bugs. For example, HTML entities may not always be correctly converted and properties do not have entities converted. The internal parser tends to get confused when invalid HTML is parsed where the libxml2 parser doesn't get confused as often. The structure is better detected with the libxml2 parser.

If you are using the Perl module (the C interface to the Swish-e library) you may wish to build two versions of Swish-e, one with the libxml2 library linked in the binary, and one without, and build the Perl module against the library without the libxml2 code. This is to save space in the library. Hopefully, the library will someday soon be split into indexing and searching code (volunteers welcome).

[ TOC ]


Does Swish-e include a CGI interface?

Yes. Kind of.

There's two example CGI scripts included, swish.cgi and search.cgi. Both are installed at $prefix/lib/swish-e.

Both require a bit of work to setup and use. Swish.cgi is probably what most people will want to use as it contains more features. Search.cgi is for those that want to start with a small script and customize it to fit their needs.

An example of using swish.cgi is given in the INSTALL man page, and it the swish.cgi documentation. Like often is the case, it will be easier to use if you first read the documentation.

Please use caution about CGI scripts found on the Internet for use with Swish-e. Some are not secure.

The included example CGI scripts were designed with security in mind. Regardless, you are encouraged to have your local Perl expert review it (and all other CGI scripts you use) before placing it into production. This is just a good policy to follow.

[ TOC ]


How secure is Swish-e?

We know of no security issues with using Swish-e. Careful attention has been made with regard to common security problems such as buffer overruns when programming Swish-e.

The most likely security issue with Swish-e is when it is run via a poorly written CGI interface. This is not limited to CGI scripts written in Perl, as it's just as easy to write an insecure CGI script in C, Java, PHP, or Python. A good source of information is included with the Perl distribution. Type perldoc perlsec at your local prompt for more information. Another must-read document is located at http://www.w3.org/Security/faq/wwwsf4.html.

Note that there are many free yet insecure and poorly written CGI scripts available -- even some designed for use with Swish-e. Please carefully review any CGI script you use. Free is not such a good price when you get your server hacked...

[ TOC ]


Should I run Swish-e as the superuser (root)?

No. Never.

[ TOC ]


What files does Swish-e write?

Swish writes the index file, of course. This is specified with the IndexFile configuration directive or by the -f command line switch.

The index file is actually a collection of files, but all start with the file name specified with the IndexFile directive or the -f command line switch.

For example, the file ending in .prop contains the document properties.

When creating the index files Swish-e appends the extension .temp to the index file names. When indexing is complete Swish-e renames the .temp files to the index files specified by IndexFile or -f. This is done so that existing indexes remain untouched until it completes indexing.

Swish-e also writes temporary files in some cases duri>ng indexing (e.g. -s http, -s prog with filters), when merging, and when using -e). Temporary files are created with the mkstemp(3) function (with 0600 permission on unix-like operating systems).

The temporary files are created in the directory specified by the environment variables TMPDIR and TMP in that order. If those are not set then swish uses the setting the configuration setting TmpDir. Otherwise, the temporary file will be located in the current directory.

[ TOC ]


Can I index PDF and MS-Word documents?

Yes, you can use a Filter to convert documents while indexing, or you can use a program that ``feeds'' documents to Swish-e that have already been converted. See Indexing below.

[ TOC ]


Can I index documents on a web server?

Yes, Swish-e provides two ways to index (spider) documents on a web server. See Spidering below.

Swish-e can retrieve documents from a file system or from a remote web server. It can also execute a program that returns documents back to it. This program can retrieve documents from a database, filter compressed documents files, convert PDF files, extract data from mail archives, or spider remote web sites.

[ TOC ]


Can I implement keywords in my documents?

Yes, Swish-e can associate words with MetaNames while indexing, and you can limit your searches to these MetaNames while searching.

In your HTML files you can put keywords in HTML META tags or in XML blocks.

META tags can have two formats in your source documents:

 
    <META NAME="DC.subject" CONTENT="digital libraries">

And in XML format (can also be used in HTML documents when using libxml2):

 
    <meta2>
        Some Content
    </meta2>

Then, to inform Swish-e about the existence of the meta name in your documents, edit the line in your configuration file:

 
    MetaNames DC.subject meta1 meta2

When searching you can now limit some or all search terms to that MetaName. For example, to look for documents that contain the word apple and also have either fruit or cooking in the DC.subject meta tag.

[ TOC ]


What are document properties?

A document property is typically data that describes the document. For example, properties might include a document's path name, its last modified date, its title, or its size. Swish-e stores a document's properties in the index file, and they can be reported back in search results.

Swish-e also uses properties for sorting. You may sort your results by one or more properties, in ascending or descending order.

Properties can also be defined within your documents. HTML and XML files can specify tags (see previous question) as properties. The contents of these tags can then be returned with search results. These user-defined properties can also be used for sorting search results.

For example, if you had the following in your documents

 
   <meta name="creator" content="accounting department">

and creator is defined as a property (see PropertyNames in SWISH-CONFIG) Swish-e can return accounting department with the result for that document.

 
    swish-e -w foo -p creator

Or for sorting:

 
    swish-e -w foo -s creator

[ TOC ]


What's the difference between MetaNames and PropertyNames?

MetaNames allows keywords searches in your documents. That is, you can use MetaNames to restrict searches to just parts of your documents.

PropertyNames, on the other hand, define text that can be returned with results, and can be used for sorting.

Both use meta tags found in your documents (as shown in the above two questions) to define the text you wish to use as a property or meta name.

You may define a tag as both a property and a meta name. For example:

 
   <meta name="creator" content="accounting department">

placed in your documents and then using configuration settings of:

 
    PropertyNames creator
    MetaNames creator

will allow you to limit your searches to documents created by accounting:

 
    swish-e -w 'foo and creator=(accounting)'

That will find all documents with the word foo that also have a creator meta tag that contains the word accounting. This is using MetaNames.

And you can also say:

 
    swish-e -w foo -p creator

which will return all documents with the word foo, but the results will also include the contents of the creator meta tag along with results. This is using properties.

You can use properties and meta names at the same time, too:

 
    swish-e -w creator=(accounting or marketing) -p creator -s creator

That searches only in the creator meta name for either of the words accounting or marketing, prints out the contents of the contents of the creator property, and sorts the results by the creator property name.

(See also the -x output format switch in SWISH-RUN.)

[ TOC ]


Can Swish-e index multi-byte characters?

No. This will require much work to change. But, Swish-e works with eight-bit characters, so many characters sets can be used. Note that it does call the ANSI-C tolower() function which does depend on the current locale setting. See locale(7) for more information.

[ TOC ]


Indexing

[ TOC ]


How do I pass Swish-e a list of files to index?

Currently, there is not a configuration directive to include a file that contains a list of files to index. But, there is a directive to include another configuration file.

 
    IncludeConfigFile /path/to/other/config

And in /path/to/other/config you can say:

 
    IndexDir file1 file2 file3 file4 file5 ...
    IndexDir file20 file21 file22

You may also specify more than one configuration file on the command line:

 
    ./swish-e -c config_one config_two config_three

Another option is to create a directory with symbolic links of the files to index, and index just that directory.

[ TOC ]


How does Swish-e know which parser to use?

Swish can parse HTML, XML, and text documents. The parser is set by associating a file extension with a parser by the IndexContents directive. You may set the default parser with the DefaultContents directive. If a document is not assigned a parser it will default to the HTML parser (HTML2 if built with libxml2).

You may use Filters or an external program to convert documents to HTML, XML, or text.

[ TOC ]


Can I reindex and search at the same time?

Yes. Starting with version 2.2 Swish-e indexes to temporary files, and then renames the files when indexing is complete. On most systems renames are atomic. But, since Swish-e also generates more than one file during indexing there will be a very short period of time between renaming the various files when the index is out of sync.

Settings in src/config.h control some options related to temporary files, and their use during indexing.

[ TOC ]


Can I index phrases?

Phrases are indexed automatically. To search for a phrase simply place double quotes around the phrase.

For example:

 
    swish-e -w 'free and "fast search engine"'

[ TOC ]


How can I prevent phrases from matching across sentences?

Use the BumpPositionCounterCharacters configuration directive.

[ TOC ]


Swish-e isn't indexing a certain word or phrase.

There are a number of configuration parameters that control what Swish-e considers a ``word'' and it has a debugging feature to help pinpoint any indexing problems.

Configuration file directives (SWISH-CONFIG) WordCharacters, BeginCharacters, EndCharacters, IgnoreFirstChar, and IgnoreLastChar are the main settings that Swish-e uses to define a ``word''. See SWISH-CONFIG and SWISH-RUN for details.

Swish-e also uses compile-time defaults for many settings. These are located in src/config.h file.

Use of the command line arguments -k, -v and -T are useful when debugging these problems. Using -T INDEXED_WORDS while indexing will display each word as it is indexed. You should specify one file when using this feature since it can generate a lot of output.

 
     ./swish-e -c my.conf -i problem.file -T INDEXED_WORDS

You may also wish to index a single file that contains words that are or are not indexing as you expect and use -T to output debugging information about the index. A useful command might be:

 
    ./swish-e -f index.swish-e -T INDEX_FULL

Once you see how Swish-e is parsing and indexing your words, you can adjust the configuration settings mentioned above to control what words are indexed.

Another useful command might be:

 
     ./swish-e -c my.conf -i problem.file -T PARSED_WORDS INDEXED_WORDS

This will show white-spaced words parsed from the document (PARSED_WORDS), and how those words are split up into separate words for indexing (INDEXED_WORDS).

[ TOC ]


How do I keep Swish-e from indexing numbers?

Swish-e indexes words as defined by the WordCharacters setting, as described above. So to avoid indexing numbers you simply remove digits from the WordCharacters setting.

There are also some settings in src/config.h that control what ``words'' are indexed. You can configure swish to never index words that are all digits, vowels, or consonants, or that contain more than some consecutive number of digits, vowels, or consonants. In general, you won't need to change these settings.

Also, there's an experimental feature called IgnoreNumberChars which allows you to define a set of characters that describe a number. If a word is made up of only those characters it will not be indexed.

[ TOC ]


Swish-e crashes and burns on a certain file. What can I do?

This shouldn't happen. If it does please post to the Swish-e discussion list the details so it can be reproduced by the developers.

In the mean time, you can use a FileRules directive to exclude the particular file name, or pathname, or its title. If there are serious problems in indexing certain types of files, they may not have valid text in them (they may be binary files, for instance). You can use NoContents to exclude that type of file.

Swish-e will issue a warning if an embedded null character> is found in a document. This warning will be an indication that you are trying to index binary data. If you need to index binary files try to find a program that will extract out the text (e.g. strings(1), catdoc(1), pdftotext(1)).

[ TOC ]


How to I prevent indexing of some documents?

When using the file system to index your files you can use the FileRules directive. Other than FileRules title, FileRules only works with the file system (-S fs) indexing method, not with -S prog or -S http.

If you are spidering, use a robots.text file in your document root. This is a standard way to excluded files from search engines, and is fully supported by Swish-e. See http://www.robotstxt.org/

You can also modify the spider.pl spider perl program to skip, index content only, or spider only listed web pages. Type perldoc spider.pl in the prog-bin directory for details.

If using the libxml2 library for parsing HTML, you may also use the Meta Robots Exclusion in your documents:

 
    <meta name="robots" content="noindex">

See the obeyRobotsNoIndex directive.

[ TOC ]


How do I prevent indexing parts of a document?

To prevent Swish-e from indexing a common header, footer, or navigation bar, AND you are using libxml2 for parsing HTML, then you may use a fake HTML tag around the text you wish to ignore and use the IgnoreMetaTags directive. This will generate an error message if the ParserWarningLevel is set as it's invalid HTML.

IgnoreMetaTags works with XML documents (and HTML documents when using libxml2 as the parser), but not with documents parsed by the text (TXT) parser.

If you are using the libxml2 parser (HTML2 and XML2) then you can use the the following comments in your documents to prevent indexing:

 
       <!-- SwishCommand noindex -->
       <!-- SwishCommand index -->

and/or these may be used also:

 
       <!-- noindex -->
       <!-- index -->

[ TOC ]


How do I modify the path or URL of the indexed documents.

Use the ReplaceRules configuration directive to rewrite path names and URLs. If you are using -S prog input method you may set the path to any string.

[ TOC ]


How can I index data from a database?

Use the ``prog'' document source method of indexing. Write a program to extract out the data from your database, and format it as XML, HTML, or text. See the examples in the prog-bin directory, and the next question.

[ TOC ]


How do I index my PDF, Word, and compressed documents?

Swish-e can internally only parse HTML, XML and TXT (text) files by default, but can make use of filters that will convert other types of files such as MS Word documents, PDF, or gzipped files into one of the file types that Swish-e understands.

Please see SWISH-CONFIG and the examples in the filters and filter-bin directory for more information.

See the next question to learn about the filtering options with Swish-e.

[ TOC ]


How do I filter documents?

The term ``filter'' in Swish-e means the converstion of a document of one type (one that swish-e cannot index directly) into a type that Swish-e can index, namely HTML, plain text, or XML. To add to the confusion, there are a number of ways to accomplish this in Swish-e. So here's a bit of background.

The FileFilter directive was added to swish first. This feature allows you to specify a program to run for documents that match a given file extension. For example, to filter PDF files (files that end in .pdf) you can specify the configuation setting of:

 
    FileFilter .pdf pdftotext   "'%p' -"

which says to run the program ``pdftotext'' passing it the pathname of the file (%p) and a dash (which tells pdftotext to output to stdout). Then for each .pdf file Swish-e runs this program and reads in the filtered document from the output from the filter program.

This has the advantage that it is easy to setup -- a single line in the config file is all that is needed to add the filter into Swish-e. But it also has a number of problems. For example, if you use a Perl script to do your filtering it can be very slow since the filter script must be run (and thus compiled) for each processed document. This is exacerbated when using the -S http method since the -S http method also uses a Perl script that is run for every URL fetched. Also, when using -S prog method of input (reading input from a program) using FileFilter means that Swish-e must first read the file in from the external program and then write the file out to a temporary file before running the filter.

With -S prog it makes much more sense to filter the document in the program that is fetching the documents than to have swish-e read the file into memory, write it to a temporary file and then run an external program.

The Swish-e distribution contains a couple of example -S prog programs. spider.pl is a reasonably full-featured web spider that offers many more options than the -S http method. And it is much faster than running -S http, too.

The spider has a perl configuration file, which means you can add programming logic right into the configuration file without editing the spider program. One bit of logic that is provided in the spider's configuration file is a ``call-back'' function that allows you to filter the content. In other words, before the spider passes a fetched web document to swish for indexing the spider can call a simple subroutine in the spider's configuration file passing the document and its content type. The subroutine can then look at the content type and decide if the document needs to be filtered.

For example, when processing a document of type ``application/msword'' the call-back subroutine might call the doc2txt.pm perl module, and a document of type ``appliation/pdf'' could use the pdf2html.pm module. The prog-bin/SwishSpiderConfig.pl file shows this usage.

This system works reasonably well, but also means that more work is required to setup the filters. First, you must explicitly check for specific content types and then call the appropriate Perl module, and second, you have to know how each module must be called and how each returns the possibly modified content.

In comes SWISH::Filter.

To make things easier the SWISH::Filter Perl module was created. The idea of this module is that there is one interface used to filter all types of documents. So instead of checking for specific types of content you just pass the content type and the document to the SWISH::Filter module and it returns a new content type and document if it was filtered. The filters that do the actual work are designed with a standard interface and work like filter ``plug-ins''. Adding new filters means just downloading the filter to a directory and no changes are needed to the spider's configuation file. Download a filter for Postscript and next time you run indexing your Postscript files will be indexed.

Since the filters are standardized, hopefully when you have the need to filter documents of a specific type there will already be a filter ready for your use.

Now, note that the perl modules may or may not do the actual conversion of a document. For example, the PDF conversion module calls the pdfinfo and pdftotext programs. Those programs (part of the Xpfd package) must be installed separately from the filters.

The SwishSpiderConfig.pl examle spider configuration file shows how to use the SWISH::Filter module for filtering. This file is installed at $prefix/share/doc/swish-e/examples/prog-bin, where $prefix is normally /usr/local on unix-type machines.

The SWISH::Filter method of filtering can also be used with the -S http method of indexing. By default the swishspider program (the Perl helper script that fetches documents from the web) will attempt to use the SWISH::Filter module if it can be found in Perls library path. This path is set automatically for spider.pl but not for swishspider (because it would slow down a method that's already slow and spider.pl is recommended over the -S http method).

Therefore, all that's required to use this system with -S http is setting the @INC array to point to the filter directory.

For example, if the swish-e distribution was unpacked into ~/swish-e:

 
   PERL5LIB=~/swish-e/filters swish-e -c conf -S http

will allow the -S http method to make use of the SWISH::Filter module.

Note that if you are not using the SWISH::Filter module you may wish to edit the swishspider program and disable the use of the SWISH::Filter module using this setting:

 
    use constant USE_FILTERS  => 0;  # disable SWISH::Filter

This prevents the program from attempting to use the SWISH::Filter module for every non-text URL that is fetched. Of course, if you are concerned with indexing speed you should be using the -S prog method with spider.pl instead of -S http.

If you are not spidering, but you still want to make use of the SWISH::Filter module for filtering you can use the DirTree.pl program (in $prefix/lib/swish-e). This is a simple program that traverses the file system and uses SWISH::Filter for filtering.

Here's two examples of how to run a filter program, one using Swish-e's FileFilter directive, another using a prog input method program. See the SwishSpiderConfig.pl file for an example of using the SWISH::Filter module.

These filters simply use the program /bin/cat as a filter and only indexes .html files.

First, using the FileFilter method, here's the entire configuration file (swish.conf):

 
    IndexDir .
    IndexOnly .html
    FileFilter .html "/bin/cat"   "'%p'"

and index with the command

 
    swish-e -c swish.conf -v 1

Now, the same thing with using the -S prog document source input method and a Perl program called catfilter.pl. You can see that's it's much more work than using the FileFilter method above, but provides a place to do additional processing. In this example, the prog method is only slightly faster. But if you needed a perl script to run as a FileFilter then prog will be significantly faster.

 
    #!/usr/local/bin/perl -w
    use strict;
    use File::Find;  # for recursing a directory tree

 
    $/ = undef;
    find(
        { wanted => \&wanted, no_chdir => 1, },
        '.',
    );

 
    sub wanted {
        return if -d;
        return unless /\.html$/;

 
        my $mtime  = (stat)[9];

 
        my $child = open( FH, '-|' );
        die "Failed to fork $!" unless defined $child;
        exec '/bin/cat', $_ unless $child;

 
        my $content = <FH>;
        my $size = length $content;

 
        print <<EOF;
    Content-Length: $size
    Last-Mtime: $mtime
    Path-Name: $_

 
    EOF

 
        print <FH>;
    }

And index with the command:

 
    swish-e -S prog -i ./catfilter.pl -v 1

This example will probably not work under Windows due to the '-|' open. A simple piped open may work just as well:

That is, replace:

 
    my $child = open( FH, '-|' );
    die "Failed to fork $!" unless defined $child;
    exec '/bin/cat', $_ unless $child;

with this:

 
    open( FH, >"/bin/cat $_ |" ) or die $!;

Perl will try to avoid running the command through the shell if meta characters are not passed to the open. See perldoc -f open for more information.

[ TOC ]


Eh, but I just want to know how to index PDF documents!

See the examples in the conf directory and the comments in the SwishSpiderConfig.pl file.

See the previous question for the details on filtering. The method you decide to use will depend on how fast you want to index, and your comfort level with using Perl modules.

Regardless of the filtering method you use you will need to install the Xpdf packages available from http://www.foolabs.com/xpdf/.

[ TOC ]


I'm using Windows and can't get Filters or the prog input method to work!

Both the -S prog input method and filters use the popen() system call to run the external program. If your external program is, for example, a perl script, you have to tell Swish-e to run perl, instead of the script. Swish-e will convert forward slashes to backslashes when running under Windows.

For example, you would need to specify the path to perl as (assuming this is where perl is on your system):

 
    IndexDir e:/perl/bin/perl.exe

Or run a filter like:

 
    FileFilter .foo e:/perl/bin/perl.exe 'myscript.pl "%p"'

It's often easier to just install Linux.

[ TOC ]


How do I index non-English words?

Swish-e indexes 8-bit characters only. This is the ISO 8859-1 Latin-1 character set, and includes many non-English letters (and symbols). As long as they are listed in WordCharacters they will be indexed.

Actually, you probably can index any 8-bit character set, as long as you don't mix character sets in the same index and don't use libxml2 for parsing (see below).

The TranslateCharacters directive (SWISH-CONFIG) can translate characters while indexing and searching. You may specify the mapping of one character to another character with the TranslateCharacters directive.

TranslateCharacters :ascii7: is a predefined set of characters that will translate eight-bit characters to ascii7 characters. Using the :ascii7: rule will, for example, translate ``'' to ``aac''. This means: searching ``elik'', ``elik'' or ``celik'' will all match the same word.

Note: When using libxml2 for parsing, parsed documents are converted internally (within libxml2) to UTF-8. This is converted to ISO 8859-1 Latin-1 when indexing. In cases where a string can not be converted from UTF-8 to ISO 8859-1 (because it contains non 8859-1 characters), the string will be sent to Swish-e in UTF-8 encoding. This will results in some words indexed incorrectly. Setting ParserWarningLevel to 1 or more will display warnings when UTF-8 to 8859-1 conversion fails.

[ TOC ]


Can I add/remove files from an index?

Not really. Swish-e currently has no way to add or remove items from its index. But, Swish-e indexes so quickly that it's often possible to reindex the entire document set when a file needs to be added, modified or removed. If you are spidering a remote site then consider caching documents locally compressed.

Incremental additions can be handled in a couple of ways, depending on your situation. It's probably easiest to create one main index every night (or every week), and then create an index of just the new files between main indexing jobs and use the -f option to pass both indexes to Swish-e while searching.

You can merge the indexes into one index (instead of using -f), but it's not clear that this has any advantage over searching multiple indexes.

How does one create the incremental index?

One method is by using the -N switch to pass a file path to Swish-e when indexing. It will only index files that have a last modification date newer than the file supplied with the -N switch.

This option has the disadvantage that Swish-e must process every file in every directory as if they were going to be indexed (the test for -N is done last right before indexing of the file contents begin and after all other tests on the file have been completed) -- all that just to find a few new files.

Also, if you use the Swish-e index file as the file passed to -N there may be files that were added after indexing was started, but before the index file was written. This could result in a file not being added to the index.

Another option is to maintain a parallel directory tree that contains symlinks pointing to the main files. When a new file is added (or changed) to the main directory tree you create a symlink to the real file in the parallel directory tree. Then just index the symlink directory to generate the incremental index.

This option has the disadvantage that you need to have a central program that creates the new files that can also create the symlinks. But, indexing is quite fast since Swish-e only has to look at the files that need to be indexed. When you run full indexing you simply unlink (delete) all the symlinks.

Both of these methods have issues where files could end up in both indexes, or files being left out of an index. Use of file locks while indexing, and hash lookups during searches can help prevent these problems.

[ TOC ]


I run out of memory trying to index my files.

It's true that indexing can take up a lot of memory! Swish-e is extremely fast at indexing, but that comes at the cost of memory.

The best answer is install more memory.

Another option is use the -e switch. This will require less memory, but indexing will take longer as not all data will be stored in memory while indexing. How much less memory and how much more time depends on the documents you are indexing, and the hardware that you are using.

Here's an example of indexing all .html files in /usr/doc on Linux. This first example is without -e and used about 84M of memory:

 
    270279 unique words indexed.
    23841 files indexed.  177640166 total bytes.
    Elapsed time: 00:04:45 CPU time: 00:03:19

This is with -e, and used about 26M or memory:

 
    270279 unique words indexed.
    23841 files indexed.  177640166 total bytes.
    Elapsed time: 00:06:43 CPU time: 00:04:12

You can also build a number of smaller indexes and then merge together with -M. Using -e while merging will save memory.

Finally, if you do build a number of smaller indexes, you can specify more than one index when searching by using the -f switch. Sorting large results sets by a property will be slower when specifying multiple index files while searching.

[ TOC ]


"too many open files" when indexing with -e option

Some platforms report ``too many open files'' when using the -e economy option. The -e feature uses many temporary files (something like 377) plus the index files and this may exceed your system's limits.

Depending on your platform you may need to set ``ulimit'' or ``unlimit''.

For example, under Linux bash shell:

 
  $ ulimit -n 1024

Or under an old Sparc

 
  % unlimit openfiles

[ TOC ]


My system admin says Swish-e uses too much of the CPU!

That's a good thing! That expensive CPU is supposed to be busy.

Indexing takes a lot of work -- to make indexing fast much of the work is done in memory which reduces the amount of time Swish-e is waiting on I/O. But, there's two things you can try:

The -e option will run Swish-e in economy mode, which uses the disk to store data while indexing. This makes Swish-e run somewhat slower, but also uses less memory. Since it is writing to disk more often it will be spending more time waiting on I/O and less time in CPU. Maybe.

The other thing is to simply lower the priority of the job using the nice(1) command:

 
    /bin/nice -15 swish-e -c search.conf

If concerned about searching time, make sure you are using the -b and -m switches to only return a page at a time. If you know that your result sets will be large, and that you wish to return results one page at a time, and that often times many pages of the same query will be requested, you may be smart to request all the documents on the first request, and then cache the results to a temporary file. The perl module File::Cache makes this very simple to accomplish.

[ TOC ]


Spidering

[ TOC ]


How can I index documents on a web server?

If possible, use the file system method -S fs of indexing to index documents in you web area of the file system. This avoids the overhead of spidering a web server and is much faster. (-S fs is the default method if -S is not specified).

If this is impossible (the web server is not local, or documents are dynamically generated), Swish-e provides two methods of spidering. First, it includes the http method of indexing -S http. A number of special configuration directives are available that control spidering (see Directives for the HTTP Access Method Only). A perl helper script (swishspider) is included in the src directory to assist with spidering web servers. There are example configurations for spidering in the conf directory.

As of Swish-e 2.2, there's a general purpose ``prog'' document source where a program can feed documents to it for indexing. A number of example programs can be found in the prog-bin directory, including a program to spider web servers. The provided spider.pl program is full-featured and is easily customized.

The advantage of the ``prog'' document source feature over the ``http'' method is that the program is only executed one time, where the swishspider.pl program used in the ``http'' method is executed once for every document read from the web server. The forking of Swish-e and compiling of the perl script can be quite expensive, time-wise.

The other advantage of the spider.pl program is that it's simple and efficient to add filtering (such as for PDF or MS Word docs) right into the spider.pl's configuration, and it includes features such as MD5 checks to prevent duplicate indexing, options to avoid spidering some files, or index but avoid spidering. And since it's a perl program there's no limit on the features you can add.

[ TOC ]


Why does swish report "./swishspider: not found"?

Does the file swishspider exist where the error message displays? If not, either set the configuration option SpiderDirectory to point to the directory where the swishspider program is found, or place the swishspider program in the current directory when running swish-e.

If you are running Windows, make sure ``perl'' is in your path. Try typing perl from a command prompt.

If you not running windows, make sure that the shebang line (the first line of the swishspider program that starts with #!) points to the correct location of perl. Typically this will be /usr/bin/perl or /usr/local/bin/perl. Also, make sure that you have execute and read permissions on swishspider.

The swishspider perl script is only used with the -S http method of indexing.

[ TOC ]


I'm using the spider.pl program to spider my web site, but some large files are not indexed.

The spider.pl program has a default limit of 5MB file size. This can be changed with the max_size parameter setting. See perldoc spider.pl for more information.

[ TOC ]


I still don't think all my web pages are being indexed.

The spider.pl program has a number of debugging switches and can be quite verbose in telling you what's happening, and why. See perldoc spider.pl for instructions.

[ TOC ]


Swish is not spidering Javascript links!

Swish cannot follow links generated by Javascript, as they are generated by the browser and are not part of the document.

[ TOC ]


How do I spider other websites and combine it with my own (filesystem) index?

You can either merge -M two indexes into a single index, or use -f to specify more than one index while searching.

You will have better results with the -f method.

[ TOC ]


Searching

[ TOC ]


How do I limit searches to just parts of the index?

If you can identify ``parts'' of your index by the path name you have two options.

The first options is by indexing the document path. Add this to your configuration:

 
    MetaNames swishdocpath

Now you can search for words or phrases in the path name:

 
    swish-e -w 'foo AND swishdocpath=(sales)'

So that will only find documents with the word ``foo'' and where the file's path contains ``sales''. That might not works as well as you like, though, as both of these paths will match:

 
    /web/sales/products/index.html
    /web/accounting/private/sales_we_messed_up.html

This can be solved by searching with a phrase (assuming ``/'' is not a WordCharacter):

 
    swish-e -w 'foo AND swishdocpath=("/web/sales/")'
    swish-e -w 'foo AND swishdocpath=("web sales")'  (same thing)

The second option is a bit more powerful. With the ExtractPath directive you can use a regular expression to extract out a sub-set of the path and save it as a separate meta name:

 
    MetaNames department
    ExtractPath department regex !^/web/([^/]+).+$!$1/

Which says match a path that starts with ``/web/'' and extract out everything after that up to, but not including the next ``/'' and save it in variable $1, and then match everything from the ``/'' onward. Then replace the entire matches string with $1. And that gets indexed as meta name ``department''.

Now you can search like:

 
    swish-e -w 'foo AND department=sales'

and be sure that you will only match the documents in the /www/sales/* path. Note that you can map completely different areas of your file system to the same metaname:

 
    # flag the marketing specific pages
    ExtractPath department regex !^/web/(marketing|sales)/.+$!marketing/
    ExtractPath department regex !^/internal/marketing/.+$!marketing/
    
    # flag the technical departments pages
    ExtractPath department regex !^/web/(tech|bugs)/.+$!tech/

Finally, if you have something more complicated, use -S prog and write a perl program or use a filter to set a meta tag when processing each file.

[ TOC ]


How can I limit searches to the title, body, or comment?

Use the -t switch.

[ TOC ]


I can't limit searches to title/body/comment.

Or, I can't search with meta names, all the names are indexed as "plain".

Check in the config.h file if #define INDEXTAGS is set to 1. If it is, change it to 0, recompile, and index again. When INDEXTAGS is 1, ALL the tags are indexed as plain text, that is you index ``title'', ``h1'', and so on, AND they loose their indexing meaning. If INDEXTAGS is set to 0, you will still index meta tags and comments, unless you have indicated otherwise in the user config file with the IndexComments directive.

Also, check for the UndefinedMetaTags setting in your configuration file.

[ TOC ]


I've tried running the included CGI script and I get a "Internal Server Error"

Debugging CGI scripts are beyond the scope of this document. Internal Server Error basically means ``check the web server's log for an error message'', as it can mean a bad shebang (#!) line, a missing perl module, FTP transfer error, or simply an error in the program. The CGI script swish.cgi in the example directory contains some debugging suggestions. Type perldoc swish.cgi for information.

There are also many, many CGI FAQs available on the Internet. A quick web search should offer help. As a last resort you might ask your webadmin for help...

[ TOC ]


When I try to view the swish.cgi page I see the contents of the Perl program.

Your web server is not configured to run the program as a CGI script. This problem is described in perldoc swish.cgi.

[ TOC ]


How do I make Swish-e highlight words in search results?

Short answer:

Use the supplied swish.cgi script located in the examples directory.

Long answer:

Swish-e can't because it doesn't have access to the source documents when returning results, of course. But a front-end program of your creation can highlight terms. Your program can open up the source documents and then use regular expressions to replace search terms with highlighted or bolded words.

But, that will fail with all but the most simple source documents. For HTML documents, for example, you must parse the document into words and tags (and comments). A word you wish to highlight may span multiple HTML tags, or be a word in a URL and you wish to highlight the entire link text.

Perl modules such as HTML::Parser and XML::Parser make word extraction possible. Next, you need to consider that Swish-e uses settings such as WordCharacters, BeginCharacters, EndCharacters, IgnoreFirstChar, and IgnoreLast, char to define a ``word''. That is, you can't consider that a string of characters with white space on each side is a word.

Then things like TranslateCharacters, and HTML Entities may transform a source word into something else, as far as Swish-e is concerned. Finally, searches can be limited by metanames, so you may need to limit your highlighting to only parts of the source document. Throw phrase searches and stopwords into the equation and you can see that it's not a trivial problem to solve.

All hope is not lost, thought, as Swish-e does provide some help. Using the -H option it will return in the headers the current index (or indexes) settings for WordCharacters (and others) required to parse your source documents as it parses them during indexing, and will return a ``Parsed Words:'' header that will show how it parsed the query internally. If you use fuzzy indexing (word stemming, soundex, or metaphone) then you will also need to stem each word in your document before comparing with the ``Parsed Words:'' returned by Swish-e. The Swish-e stemming code is available either by using the Swish-e Perl module or C library (included with the swish-e distribution), or by using the SWISH::Stemmer module available on CPAN. Also on CPAN is the module Text::DoubleMetaphone.

[ TOC ]


Do filters effect the performance during search?

No. Filters (FileFilter or via ``prog'' method) are only used for building the search index database. During search requests there will be no filter calls.

[ TOC ]


I have read the FAQ but I still have questions about using Swish-e.

The Swish-e discussion list is the place to go. http://swish-e.org/. Please do not email developers directly. The list is the best place to ask questions.

Before you post please read QUESTIONS AND TROUBLESHOOTING located in the INSTALL page. You should also search the Swish-e discussion list archive which can be found on the swish-e web site.

In short, be sure to include in the following when asking for help.

[ TOC ]


Document Info

$Id: SWISH-FAQ.pod,v 1.31.2.2 2003/12/18 00:10:06 whmoseley Exp $

. [ TOC ]


0 [swish-e.html]SWISH-LIBRARY.htmlF6FY2 66y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH-LIBRARY - Interface to the Swish-e C library

Swish-E Logo


SWISH-LIBRARY - Interface to the Swish-e C library


[ TOC ]

What is the Swish-e C library?

The C library in an interface to the Swish-e search code. It provides a way to embed Swish-e into your applications. This API is based on Swish-e version 2.3.

Note: This is a NEW API as of Swish-e version 2.3. The C language interface has changed as has the perl interface to Swish-e. The new Perl interface is the SWISH::API module and is included with the Swish-e distribution. The old SWISHE perl module has been rewritten to work with the new API. The SWISHE perl module is no longer included with the Swish-e distribution, but can be downloaded from the Swish-e web site.

The advantage of the library is that the index files or files can be opened one time and many queries made on the open index. This saves the startup time required to fork and run the swish-e binary, and the expensive time of opening up the index file. Some benchmarks have shown a three fold increase in speed.

The downside is that your program now has more code and data in it (the index tables can use quite a bit of memory), and if a fatal error happens in swish it will bring down your program. These are things to think about, especially if embedding swish into a web server such as Apache where there are many processes serving requests.

The best way to learn about the library is to look at two files included with the Swish-e distribution that make use of the library.

src/libtest.c

This file gives a basic overview of linking a C program with the Swish-e library. Not all available functions are used in that example, but it should give you a good overview of building a C program with swish-e.

To build and run libtest chdir to the src directory and run the commands:

 
    $ make libtest
    $ ./libtest [optional name of index file]

You will be prompted for the search words. The default index used is index.swish-e. This can be overridden by placing a list of index files in a quote-protected string.

 
    $ ./libtest 'index1 index2 index3'

perl/API.xs

The API.xs file is a Perl ``xsub'' interface to the C library and is part of the SWISH::API Perl module. This is an object-oriented interface to the Swish-e library and demonstrates how the various search ``objects'' are created by C calls and how they are destroyed when no longer needed.

[ TOC ]


Installing the Swish-e library

The Swish-e library is installed when you run ``make install'' when building Swish-e. No extra installation steps are required.

The library consists of a header file ``swish-e.h'' and a library ``libswish-e.*'' that can either be a static or shared library depending on your platform.

[ TOC ]


Library Overview

When you first attach to an index file (or index files) you are returned a ``swish handle''. From the handle you create one or more ``search objects'' which holds the parameters to query the index, such as the query string, sort order, search phrase delimiter, limit parameters and HTML structure bits. The ``object'' is really just a pointer to a C structure, but it's helpful to think of it as an object that data and functionality associated with it.

The search object is used to query the index. A query returns a ``results object''. The results object holds the number of hits, the parsed query per index, and the result set. The results object keeps track of the current position in the result set. You may ``seek'' to a specific record within the result set (useful for displaying a page of results).

Finally, a result object represents a single result from the result list. A result object provides access to the result's properties (such as file name, rank, etc.).

In addition to results, there are functions available to access the header values stored in the index file, functions to check and report errors, and a few utility functions.

[ TOC ]


Available Functions

Below is the list of available function included in the Swish-e C language API.

These functions (and typedefs) are defined in the swish-e.h header file. The common objects (e.g. structures) used are:

 
    SW_HANDLE  - swish handle that associates with an index file
    SW_SEARCH  - search "object" that holds search parameters
    SW_RESULTS - results "object" that holds a result set
    SW_RESULT  - a single result used for accessing the result's properties
    SW_FUZZYWORD - used for fuzzy (stemming) word conversion    

[ TOC ]


Searching

SW_HANDLE SwishInit(char *IndexFiles);

This functions opens and reads the header info of the index files included in IndexFiles string. The string should contain a space-separated list of index files.

 
    SW_HANDLE myhandle;
    myhandle = SwishInit("file1.idx");

Typically you will open a handle at the beginning of your program and use it to make multiple queries on an index.

This function will always return a swish handle. You must check for errors, and on error free the memory used by the handle, or abort.

Here's an example of aborting:

 
    SW_HANDLE swish_handle;
    swish_handle = SwishInit("file1.idx file2.idx");
    if ( SwishError( swish_handle ) )
        SwishAbortLastError( swish_handle );

And here's an example of catching the error:

 
    SW_HANDLE swish_handle;
    swish_handle = SwishInit("file1.idx file2.idx");
    if ( SwishError( swish_handle ) )
    {
        printf("Failed to connect to swish. %s\n", SwishErrorString( swish_handle ) );
        SwishClose( swish_handle );  /* free the memory used */
        return 0;
    }

You may have more than one handle active at a time.

Swish-e will not tell you if the index file changes on disk (such as after reindexing). In a persistent environment (e.g. mod_perl) the calling program should check to see if the index file has changed on disk. A common way to do this is to store the inode number before opening the index file(s), and then stat the file name every so often and reopen the index files if the inode number changes.

void SwishClose(SW_HANDLE handle);

This function closes and frees the memory of a Swish handle. Every swish handle should be freed when done searching the index. Failing to close the handle will result in a memory leak.

SW_SEARCH New_Search_Object(SW_HANDLE handle, const char *query);

Returns a new search ``object''. The search object holds the parameters used for searching an index. A single search object can be used to query the index multiple times. The available settings listed below are ``sticky'' in that they remain set on the search object until change.

void SwishSetStructure( SW_SEARCH srch, int structure );

Sets the ``structure'' flag in the search object. The structure flag is used to limit searches to parts of HTML files (such as to the title or headers). The default is to not limit. This provides the functionality of the -H command line switch.

void SwishPhraseDelimiter( SW_SEARCH srch, char delimiter );

Sets the phrase delimiter character. The default is double-quotes.

void SwishSetSort( SW_SEARCH srch, char *sort );

Sets the sort order of the results. This is the same as the -s switch used with the swish-e binary.

void SwishSetQuery( SW_SEARCH srch, char *query );

Sets the query string in the search object. This typically is not needed since it can be set when creating the search object or when executing a query.

void SwishSetSearchLimit( SW_SEARCH srch, char *propertyname, char *low, char *hi);

Sets the limit parameters for a search. Provides the same functionality as the -L command line switch. You may specify a range of property values that search results must be within. You may call SwishSetSearchLimit() only one time for each property (but can set limits on more than one property at a time).

Unlike the other settings on the search object, once you run a query on the search object you must call SwishResetSearchLimit() to change or clear the limit parameters.

void SwishResetSearchLimit( SW_SEARCH srch );

Resets the limits set on a search object set by SwishSetSearchLimit().

void Free_Search_Object( SW_SEARCH srch );

Frees the search object. This must be called when done with the search object. Generally, you can reuse a search object for multiple queries so typically you would call this right before calling SwishClose().

You may free the search object before freeing and generated results objects.

SW_RESULTS SwishExecute( SW_SEARCH search, const char *query);

Searches the index or indexes based on the parameters in the search object. Returns a results object. See below for functions to access the data stored in the results object.

You should always check for errors after calling SwishExecute().

SW_RESULTS SwishQuery(SW_HANDLE, const char *words );

This is a short-cut function that bypasses the creation of a search object (actually, bypasses the need to create and free a search object). This only allows passing in a query string; other search parameters cannot be set. The results are sorted by rank.

You should always check for errors after calling SwishQuery().

[ TOC ]


Reading Results

int SwishHits( SW_RESULTS results );

Returns the number of results in the results object.

SWISH_HEADER_VALUE SwishParsedWords( SW_RESULTS, const char *index_name );

Returns the tokenized query. Words are split by WordCharacters and stopwords are removed. The parsed words are useful for highlighting search terms in your program.

The ``index_name'' is the name of the index supplied in the SwishInit() function call.

Returns a SWISH_HEADER_VALUE union of type SWISH_LIST which is a char **. See src/libtest.c for an example of accessing the strings in this list, but in general you may cast this to a (char **).

SWISH_HEADER_VALUE SwishRemovedStopwords( SW_RESULTS, const char *index_name );

Returns a list of stopwords removed from the input query.

Returns a SWISH_HEADER_VALUE union of type SWISH_LIST which is a char **. See src/libtest.c for an example of accessing the strings in this list, but in general you may cast this to a (char **).

int SwishSeekResult( SW_RESULTS, int position );

Sets the current seek position in the list of results, with position zero being the first record (unlike -b where one is the first result).

Returns the position or a negative number on error.

SW_RESULT SwishNextResult( SW_RESULTS );

Returns the next result, or NULL if not more results are available.

The result object returned does not need to be freed after use (unlike the swish handle, search object, and results object).

const char *SwishResultPropertyStr(SW_RESULT, char *propertyname);

This function is mostly useful for testing as it returns odd results on errors.

Aborts if called with a NULL SW_RESULT object

Returns a string value of the specified property.

Returns the empty string ``'' if the current result does not have the specified property assigned.

Returns the string ``(null)'' on invalid property name (i.e. property name is not defined in the index) and sets an error (see below) indicating the invalid property name.

The string returned does not need to be freed, but is only valid for the current result. If you wish to save the string you must copy it locally.

Dates are formatted using the hard-coded format string: ``%Y-%m-%d %H:%M:%S'' in localtime.

unsigned long SwishResultPropertyULong(SW_RESULT r, char *propertyname);

Returns a numeric property as an unsigned long. Numeric properties are used for both PropertyNamesNumeric and PropertyNamesDate type of properties. Dates are returned as a unix timestamp as reported by the .system when the index was created.

Swish-e will abort if called with a NULL SW_RESULT object. Without the SW_RESULT object swish-e cannot set any error codes.

On error returns UMAX_LONG. This is commonly defined in limits.h. Check SwishError() (see below) for the type of error.

If SwishError() returns false (zero) then it simply means that this result does not have any data for the specified property.

If SwishError() returns true (non-zero) then either the propertyname specified is invalid, or the property requested is not a numeric (or date) property (e.g. it's a string property).

See below on how to fetch the specific error message when SwishError() is true.

PropValue *getResultPropValue (SW_RESULT r, char *propertyname, int ID );

This is a low-level function to fetch a property regardless of type. This is likely the best function for accessing properties.

Swish-e will abort if called with a NULL SW_RESULT object. Propertyname is the name of the property. ID is the id number of the property, if known. ID is not normally used in the API, but it's purpose is to avoid looking up the property ID for every result displayed.

The return PropValue is a structure that contains a flag to indicate the type, and a union that holds the property value. They flags and structure are defined in swish-e.h.

The property must be copied locally and the returned ``PropValue'' value must be freed by calling freeResultPropValue() to avoid a memory leak.

On error returns NULL. Check SwishError() (see below) for the type of error.

If returns NULL but SwishError() returns false (zero) then it simply means that this result does not have any data for the specified property.

If SwishError() returns true (non-zero) then the property name specified is invalid (i.e. not defined for the index).

See below on how to fetch the specific error message when SwishError() is true.

See perl/API.xs for an example on using this function.

void freeResultPropValue(void)

Frees the ``PropValue'' returned after calling getResultPropValue().

void Free_Results_Object( SW_RESULTS results );

Frees the results object (frees the result set). This must be called when done reading the results and before calling SwishClose().

[ TOC ]


Accessing the Index Header Values

Each index file has associated header values that describe the index. These functions provide access to this data. The header data is returned as a union SWISH_HEADER_VALUE, and a pointer to a SWISH_HEADER_TYPE is passed in and the returned value indicates the type of data that is returned. See src/libtest.c and perl/API.xs for examples.

const char **SwishHeaderNames( SW_HANDLE );

Returns the list of possible header names. This list is the same for all index files of a given version of Swish-e. It provides a way to gain access to all headers without having to list them in your program.

const char **SwishIndexNames( SW_HANDLE );

Returns a list of index files opened. This is just the list of index files specified in the SwishInit() call. You need the name of the index file to access a specific index's header values.

SWISH_HEADER_VALUE SwishHeaderValue( SW_HANDLE, const char *index_name, const char *cur_header, SWISH_HEADER_TYPE *type );

Fetches the header value for the given index file, and the header name. The call sets the ``type'' passed in to the type of value returned.

See src/libtest.c and perl/API.xs for examples.

SWISH_HEADER_VALUE SwishResultIndexValue( SW_RESULT, const char *name, SWISH_HEADER_TYPE *type );

This is like SwishHeaderValue() above, but instead of supplying an index file name and a swish handle, supply a result object and the header value is fetched from the result's related index file.

[ TOC ]


Checking for Errors

You should check for errors after all calls. The last error is stored in the swish handle object, and is only valid until the next operation (which resets the error flags).

Currently, some errors are flagged as ``critical'' errors. In these cases you should destroy (by calling the SwishClose() function ) the current swish handle. If you have other objects in scope (e.g. a search object or results object) destroy those first.

The types of errors that are critical can be seen in src/error.c. Currently the list includes:

 
    Could not open index file
    Unknown index file format
    Index file(s) is empty
    Index file error
    Invalid swish handle
    Invalid results object

int SwishError( SW_HANDLE );

This returns true if an error condition exists. It returns the error number, which is a integer less than zero on error. This should be checked before calling any of the other error functions below.

const char *SwishErrorString( SW_HANDLE );

This returns a general text description of the current error.

const char *SwishLastErrorMsg( SW_HANDLE );

In some cases this will return a string with specifics about the current error. For example, SwishErrorString() may return ``Unknown metaname'', but SwishLastErrorMsg() will return a string with the name of the unknown metaname.

int SwishCriticalError( SW_HANDLE );

Returns true if the current error condition is a critical error. On critical errors you should free up any current objects and call SwishClose() as swish may be in an unstable state.

void SwishAbortLastError( SW_HANDLE );

This is a convenience function that will format and print the last error message, and then abort the program.

void set_error_handle( FILE *where );

Sets where errors and warnings are printed (when printed by swish). For historical reasons, when swish-e first starts up errors and warnings are sent to stdout.

void SwishErrorsToStderr( void );

A convenience method to send errors to stderr instead of stdout.

[ TOC ]


Utility Functions

const char *SwishWordsByLetter(SWISH * sw, char *indexname, char c);

Returns all the words in the index ``indexname'' that begin with the letter passed in. Returns NULL if the name of the index file is invalid.

This fuction may change in the future since only 8-bit chars can currently be used.

char * SwsishStemWord( SW_HANDLE sw, char *in_word );

Deprecated

This can be used to convert a word to its stem. It uses only the original Porter Stemmer.

SW_FUZZYWORD SwishFuzzyWord( SW_RESULT r, char *word );

Stems ``word'' based on the fuzzy mode selected during indexing.

The fuzzy mode used during indexing is stored in the index file. Since each result is linked to a given index file this method allows stemming a word based on it's index file.

One possible use for this is to highlight search terms in a document summary, which would be based on a given result.

The methods below can be used to access the data returned. The SW_FUZZYWORD object must be freed when done to avoid a memory leak.

const char **SwishFuzzyWordList( SW_FUZZYWORD fw );

Returns a null terminated list of strings returned by the stemmer. In most cases this will be a single string.

Here's an example:

 
    SW_FYZZYWORD fuzzy_word = SwishFuzzyWord( result );
    const char **word_list = SwishFuzzyWordList( fuzzy_word );
    while ( *word_list )
    {
        printf("%s\n", *word_list );
        word_list++;
    }
    SwishFuzzyWordFree( fuzzy_word );

If the stemmer does not convert the string (for example attempting to stem numeric data) the word_list will contain the original word. To tell if the stemmer actually stemmed the word check the return value with SwishFuzzyWordError().

int SwishFuzzyWordError( SW_FUZZYWORD fw );

This returns zero if the stemming operation was sucessfull, otherwise it returns a value indicating the reason the word was not stemmed. The return values are defined in the swish-e src/stemmer.h file.

Not all stemmers set this value correctly. But since SwishFuzzyWordList() will return a valid string regardless of the return value, you can often just ignore this setting. That's what I do.

int SwishFuzzyWordCount( SW_FUZZYWORD fw );

Returns the count of string in the word list available by calling SwishFuzzyWordList().

This is normally just one, but in the case of DoubleMetaphone it can be one or two (i.e. DoubleMetaphone can return one or two strings).

const char *SwishFuzzyMode( SW_RESULT r );

Returns the name of the stemmer used for the given result (which is related to an index).

void SwishFuzzyWordFree( SW_FUZZYWORD fw );

Frees the memory used by the SW_FUZZYWORD.

[ TOC ]


Bug-Reports

Please report bug reports to the Swish-e discussion group. Feel also free to improve or enhance this feature.

[ TOC ]


Author

Original interface: Aug 2000 Jose Ruiz jmruiz@boe.es

Updated: Aug 22, 2002 - Bill Moseley

Interface redesigned for Swish-e version 2.3 Oct 17, 2002 - Bill Moseley

[ TOC ]


Document Info

$Id: SWISH-LIBRARY.pod,v 1.9.2.3 2004/01/24 18:30:33 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-RUN.htmlk=2s6kky $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH-RUN - Running Swish-e and Command Line Switches

Swish-E Logo


SWISH-RUN - Running Swish-e and Command Line Switches


[ TOC ]

OVERVIEW

The Swish-e program is controlled by command line arguments (called switches). Often, it is run manually from a shell (command prompt), or from a program such as a CGI script that passes the command line arguments to swish.

Note: A number of the command line switches may be specified in the Swish-e configuration file specified with the -c command line argument. Please see SWISH-CONFIG for a complete description of available configuration file directives.

There are two basic operating modes of Swish-e: indexing and searching. There are command line arguments that are unique to each mode, and others that apply to both (yet may have different meaning depending on the operating mode). These command line arguments are listed below, grouped by:

INDEXING -- describes the command line arguments used while indexing.

SEARCHING -- lists the command line arguments used while searching.

OTHER SWITCHES -- lists switches that don't apply to searching or indexing.

Beginning with Swish-e version 2.1, you may embed its search engine into your applications. Please see SWISH-LIBRARY.

[ TOC ]


INDEXING

Swish-e indexing is initiated by passing command line arguments to swish. The command line arguments used for searching are described in SEARCHING. Also, see SWISH-SEARCH for examples of searching with Swish-e.

Swish-e usage:

 
    swish-e [-i dir file ... ] [-c file] [-f file] [-l] \
            [-v (num)] [-S method(fs|http|prog)] [-N path]

The -h switch (help) will list the available Swish-e command line arguments:

 
    swish-e -h

Typically, most if not all indexing settings are placed in a configuration file (specified with the -c switch). Once the configuration file is setup indexing is initiated as:

 
    swish-e -c /path/to/config/file

See SWISH-CONFIG for information on the configuration file.

Security Note: If the swish binary is named swish-search then swish will not allow any operation that would cause swish to write to the index file.

When indexing it may be advisable to index to a temporary file, and then after indexing has successfully completed rename the file to the final location. This is especially important when replacing an index that is currently in use.

 
    swish-e -c swish.config -f index.tmp
    [check return code from swish or look for err: output]
    mv index.tmp index.swish-e

[ TOC ]


Indexing Command Line Arguments

-i *directories and/or files* (input file)

This specifies the directories and/or files to index. Directories will be indexed recursively. This is typically specified in the configuration file with the IndexDir directive instead of on the command line. Use of this switch overrides the configuration file settings.

-S [fs|http|prog] (document source/access mode)

This specifies the method to use for accessing documents to index. Can be either fs for local indexing via the file system (the default), http for spidering, or prog for reading documents from an external program.

Located in the conf directory are example configuration files that demonstrate indexing with the different document source methods.

See the SWISH-FAQ for a discussion on the different indexing methods, and the difference between spidering with the http method vs. using the file system method.

fs - file system

The fs method simply reads files from a local (or networked) drive. This is the default method if the -S switch is not specified. See SWISH-CONFIG for configuration directives specific to the fs method.

http - spider a web server

The http method is used to spider web servers. It uses an included helper program called swishspider. See SWISH-CONFIG for configuration directives specific to the http method.

Security Note: Under Windows swish passes the URLs fetched from remote documents through the shell (swish uses the system() command for running swishspider under Windows), and this may be considered an additional security risk.

The http method is deprecated (or at least not very well appreciated). Consider using the prog method described below for spidering. There's a spider program available in the prog-bin directory for use with the prog method. Here's a number of limitation with this method that are solved with the prog method:

  • swishspider only spiders standard <a href=``...''> links. Frames and other links are not followed.

  • By default, this method of spidering only indexes files that have a content type of ``text/*'' (e.g. text/plain, text/html, text/xml). You should use DefaultContents and IndexContents to map file extensions to parsers used by swish (e.g. IndexContents HTML* .html .htm), but this will fail where a document does not have a file extension.

  • Swish-e's FileFilter directive can be used with the http access method, although it requires a separate process (in addition to the swsihspider process) for each document filtered.

  • The SWISH::Filter modules can be used with the swishspider program. SWISH::Filter provides a general purpose filtering system (see SWISH::Filter documentation). To use SWISH::Filter set PERL5LIB to point to the location of the SWISH module name space (typically /usr/local/lib/swish-e under Unix). For example:

     
       export PERL5LIB=/usr/local/lib/swish-e  # bash, bourne shells
       setenv PERL5LIB /usr/local/lib/swish-e  # csh, tcsh

    or under Windows

     
       set PERL5LIB=c:\program files\swish-e2.4\lib\swish-e

    SWISH::Filter is not enabled by default due to the overhead of loading the modules for every document fetched.

    The Swish-e distribution includes perl modules in the SWISH::Filters::* namespace to make converting non-text documents into a format that Swish-e can parse easy. As mentioned above, the helper script swishspider will use these modules if can be found via PERL5LIB. These modules only provide an interface to programs that do the conversion. For example, you will need to download and install the ``catdoc'' program to convert MSWord documents into text for indexing. Please see filters/README to see how to use this filter system.

prog - general purpose access method

The prog method is new to Swish-e version 2.2. It's designed as a general purpose method to feed documents to swish from an external program.

For example, the external program can read a database (e.g. MySQL), spider a web server, or convert documents from one format to another (e.g. pdf to html). Or, you can simply use it to read the files of the file system (like -S fs), yet provide you with full control of what files are indexed.

The external program name to run is passed to swish either by the IndexDir directive, or via the -i option.

The program specified should be an absolute path as swish-e will attempt to stat() the program to make sure it exists. Swish does this to help in error reporting.

If the program specified with -i or IndexDir is not an absolute path (i.e. does not include ``/'' ) then swish-e will append the ``libexecdir'' directory defined during configuration. Typically, libexecdir is set to ``$prefix/lib/swish-e'' (/usr/local/lib/swish-e), but is platform and installation dependent. Running swish-e -h will report the directory.

For example, the -S prog program ``spider.pl'' is a Perl helper program for use with -S prog and is installed in libexecdir.

 
    IndexDir spider.pl
    SwishProgParameters default http://localhost/index.html

and swish-e will find spider.pl in libexecdir.

Additional parameters may be passed to the external program via the SwishProgParameters directive. In the example above swish-e will pass two parameters to spider.pl, ``default'' and ``http://localhost/index.html''.

A special name ``stdin'' may be used with -i or IndexDir which tells swish to read from standard input instead of from an external program. See example below.

The external program prints to standard output (which swish captures) a set of headers followed by the content of the file to index. The output looks similar to an email message or a HTTP document returned by a web server in that it includes name/value pairs of headers, a blank line, and the content.

The content length is determined by a content-length header supplied to swish by the program; there is no ``end of record'' character or flag sent between documents. Therefore, it is critical that the content-length header is correct. This is a common source of errors.

One advantage of this method (over using filters, for example) is that the external program is run only once for the entire indexing job, instead of once for every document. This avoids forking and creating a new process for every document, and makes a huge difference when your external program is something like perl that has a large startup cost.

Here's a simple example written in Perl:

 
    #!/usr/local/bin/perl -w
    use strict;

 
    # Build a document
    my $doc = <<EOF;
    <html>
    <head>
        <title>Document Title</title>
    </head>
        <body>
            This is the text.
        </body>
    </html>
    EOF

 
    # Prepare the headers for swish
    my $path = 'Example.file';
    my $size = length $doc;
    my $mtime = time;

 
    # Output the document (to swish)
    print <<EOF;
    Path-Name: $path
    Content-Length: $size
    Last-Mtime: $mtime
    Document-Type: HTML*

 
    EOF

 
        print $doc;

The external program passes to swish a header. The header is separated from the body of the document with a blank line. The available headers are:

Path-Name:

This is the name of the file you are indexing. This can be any string, so for example it could be an ID of a record in a database, a URL or a simple file name.

This header is required.

Content-Length:

This header specifies the length in bytes of the document that follows the header. This length must be exactly the length of the document -- do not make the mistake of adding an extra line feed at the end of the document.

This header is required.

Last-Mtime:

Thi parameter is the last modification time of the file, and must be a time stamp (seconds since the Epoch on your platform).

This header is not required.

Document-Type:

You may override swish's determination of document type (Indexcontents) by using the Document-Ty>pe: header. The document type is used to select which parser Swish-e uses to parse the document's contents.

For example, a spider program might map the content-type returned from a web server to one of the types Swish-e understands. For example,

 
    my $doc_type = 'HTML*' if $response->content_type =~ m!text/html!'

This header is not required.

The above example program only returns one document and exits, which is not very useful. Normally, your program would read data from some source, such as files or a database, format as XML, HTML, or text, and pass them to swish, one after another. The Content-Length: header tells swish where each document ends -- there is not any special ``end of record'' character or marker.

To index with the above example you need to make sure that the program is executable (and that the path to perl is correct), and then call swish telling to run in prog mode, and the name of the program to use for input.

 
    % chmod 755 example.pl
    % ./swish-e -S prog -i ./example.pl

Programs can and should be tested prior to running swish. For example:

 
    % ./example.pl > test.out

A few more useful example programs are provided in the swish-e distribution located in the prog-bin directory. Some include documentation:

 
    % cd prog-bin
    % perldoc spider.pl

Others are small examples that include comments:

 
    % cd prog-bin
    % less DirTree.pl

The spider.pl program can be used as a replacement for the -S http method. It is far more feature-rich and offers much more control over indexing.

If you use the special program name ``stdin'' with -i or IndexDir then swish-e will read from standard input instead of from a program. For example:

 
    % ./example.pl --count=1000 /path/to/data | ./swish-e -S prog -i stdin

This is basically the same as using a swish-e configuration file of:

 
    SwishProgParameters --count=1000 /path/to/data
    IndexDir ./example.pl

in a config file and running

 
    % ./swish-e -S prog -c swish.conf

This gives an easy way to run swish without a configuration file with a -S prog program that requires parameters. It also means you can capture data to a file and then index more once with the same data:

 
    % ./example.pl /path/to/data --count=1000 > docs.txt
    % cat docs.txt | ./swish-e -S prog -i stdin -c normal_index
    % cat docs.txt | ./swish-e -S prog -i stdin -c fuzzy_index

Using ``stdin'' might also be useful for programs that call swish (instead of swish calling the program).

(The reason ``stdin'' is used instead of the more common ``-'' dash is due to the rotten way swish parses the command line. This should be fixed in the future.)

The prog method bypasses some of the configuration parameters available to the file system method -- settings such as IndexOnly, FileRules, FileMatch and FollowSymLinks are ignored when using the prog method. It's expected that these operations are better accomplished in the external program before passing the document onto swish. In other words, when using the prog method, only send the documents to swish that you want indexed.

You may use swish's filter feature with the prog method, but performance will be better if you run filtering programs from within your external program. See also filters/README for an example how to easily add document converstion and filtering into your Perl-based programs.

Notes when using -S prog on MS Windows

Windows does not use the shebang (#!) line of a program to determine the program to run. So, when running, for example, a perl program you may need to specify the perl.exe binary as the program, and use the SwishProgParameters to name the file.

 
    IndexDir e:/perl/bin/perl.exe
    SwishProgParameters read_database.pl

Swish will replace the forward slashes with backslashes before running the command specified with IndexDir. Swish uses the popen(3) command which passes the command through the shell.

-f *indexfile* (index file)

If you are indexing, this specifies the file to save the generated index in, and you can only specify one file. See also IndexFile in the configuration file.

If you are searching, this specifies the index files (one or more) to search from. The default index file is index.swish-e in the current directory.

-c *file ...* (configuration files)

Specify the configuration file(s) to use for indexing. This file contains many directives that control how Swish-e proceeds. See SWISH-CONFIG for a complete listing of configuration file directives.

Example:

 
    swish-e -c docs.conf

If you specify a directory to index, an index file, or the verbose option on the command-line, these values will override any specified in the configuration file.

You can specify multiple configuration files. For example, you may have one configuration file that has common site-wide settings, and another for a specific index.

Examples:

 
    1) swish-e -c swish-e.conf
    2) swish-e -i /usr/local/www -f index.swish-e -v -c swish-e.conf
    3) swish-e -c swish-e.conf stopwords.conf

  1. The settings in the configuration file will be used to index a site.

  2. These command-line options will override anything in the configuration file.

  3. The variables in swish-e.conf will be read, then the variable in stopwords.conf will be read. Note that if the same variables occur in both files, older values may be written over.

-e (economy mode)

For large sites indexing may require more RAM than is available. The -e switch tells swish to use disk space to store data structures while indexing, saving memory. This option is recommended if swish uses so much RAM that the computer begins to swap excessively, and you cannot increase available memory. The trade-off is slightly longer indexing times, and a busy disk drive.

-l (symbolic links)

Specifying this option tells swish to follow symbolic links when indexing. The configuration file value FollowSymLinks will override the command-line value.

The default is not to follow symlinks. A small improvement in indexing time my result from enabling FollowSymLinks since swish does not need to stat every directory and file processed to determine if it is a symbolic link.

-N path (index only newer files)

The -N option takes a path to a file, and only files newer than the specified file will be indexed. This is helpful for creating incremental indexes -- that is, indexes that contain just files added since the last full index was created of all files.

Example (bad example)

 
    swish-e -c config.file -N index.swish-e -f index.new

This will index as normal, but only files with a modified date newer than index.swish-e will be indexed.

This is a bad example because it uses index.swish-e which one might assume was the date of last indexing. The problem is that files might have been added between the time indexing read the directory and when the index.swish-e file was created -- which can be quite a bit of time for very large indexing jobs.

The only solution is to prevent any new file additions while full indexing is running. If this is impossible then it will be slightly better to do this:

Full indexing:

 
    touch indexing_time.file
    swish-e -c config.file -f index.tmp
    mv index.tmp index.full

Incremental indexing:

 
    swish-e -c config.file -N indexing_time.file -f index.tmp
    mv index.tmp index.incremental

Then search with

 
    swish-e -w foo -f index.full index.incremental

or merge the indexes

 
    swish-e -M index.full index.incremental index.tmp
    mv index.tmp index.swish-e
    swish-e -w foo

-v [0|1|2|3] (verbosity level)

The -v option can take a numerical value from 0 to 3. Specify 0 for completely silent operation and 3 for detailed reports.

If no value is given then 1 is assumed. See also IndexReport in the configuration file.

Warnings and errors are reported regardless of the verbosity level. In addition, all error and warnings are written to standard out. This is for historical reasons (many scripts exist that parse standard out for error messages).

[ TOC ]


SEARCHING

The following command line arguments are available when searching with Swish-e. These switches are used to select the index to search, what fields to search, and how and what to print as results.

This section just lists the available command line arguments and their usage. Please see SWISH-SEARCH for detailed searching instructions.

Warning: If using Swish-e via a CGI interface, please see CGI Danger!

Security Note: If the swish binary is named swish-search then swish will not allow any operation that would cause swish to write to the index file.

[ TOC ]


Searching Command Line Arguments

-w *word1 word2 ...* (query words)

This performs a case-insensitive search using a number of keywords. If no index file to search is specified (via the -f switch), swish-e will try to search a file called index.swish-e in the current directory.

 
    swish-e -w word

Phrase searching is accomplished by placing the quote delimiter (a double-quote by default) around the search phrase.

 
    swish-e -w 'word or "this phrase"'

Search would should be protected from the shell by quotes. Typically, this is single quotes when running under Unix.

Under Windows command.com you may not need to use quotes, but you will need to backslash the quotes used to delimit phrases:

 
    swish-e -w \"a phrase\"

The phrase delimiter can be set with the -P switch.

The search may be limited to a MetaName. For example:

 
    swish-e -w meta1=(foo or baz)

will only search within the meta1 tag.

Please see SWISH-SEARCH for a description of MetaNames

-f *file1 file2 ...* (index files)

Specifies the index file(s) used while searching. More than one file may be listed, and each file will be searched. If no -f switch is specified then the file index.swish-e in the current directory will be used as the index file.

-m *number* (max results)

While searching, this specifies the maximum number of results to return. The default is to return all results.

This switch is often used in conjunction with the -b switch to return results one page at a time (strongly recommended for large indexes).

-b *number* (beginning result)

Sets the begining search result to return (records are numbered from 1). This switch can be used with the -m switch to return results in groups or pages.

Example:

 
    swish-e -w 'word' -b 1 -m 20    # first 'page'
    swish-e -w 'word' -b 21 -m 20   # second 'page'

-t HBthec (con>text searching)

The -t option allows you to search for words that exist only in specific HTML tags. Each character in the string you specify in the argument to this option represents a different tag in which to search for the word. H means all HEAD tags, B stands for BODY tags, t is all TITLE tags, h is H1 to H6 (header) tags, e is emphasized tags (this may be B, I, EM, or STRONG), and c is HTML comment tags

search only in header (<H*>) tags

 
    swish-e -w word -t h

-d *string* (delimiter)

Set the delimiter used when printing results. By default, Swish-e separates the output fields by a space, and places double-quotes around the document title. This output may be hard to parse, so it is recommended to use -d to specify a character or string used as a separator between fields.

The string dq means ``double-quotes''.

 
    swish-e -w word -d ,    # single char
    swish-e -w word -d ::   # string
    swish-e -w word -d '"'  # double quotes under Unix
    swish-e -w word -d \"   # double quotes under Windows
    swish-e -w word -d dq   # double quotes

The following control characters may also be specified: \t \r \n \f.

Warning: This string is passed directly to sprintf() and therefore exposes a securty hole. Do not allow user data to set -d format strings directly.

-P *character*

Sets the delimiter used for phrase searches. The default is double quotes ".

Some examples under bash: (be careful about you shell metacharacters)

 
    swish-e -P ^ -w 'title=^words in a phrase^'
    swish-e -P \' -w "title='words in a pharse"'

-p *property1 property2 ...* (display properties)

This causes swish to print the listed property in the search results. The properties are returned in the order they are listed in the -p argument.

Properties are defined by the ProperNames directive in the configuration file (see SWISH-CONFIG) and properties must also be defined in MetaNames. Swish stores the text of the meta name as a property, and then will return this text while searching if this option is used.

Properties are very useful for returning data included in a source documnet without having to re-read the source document while searching. For example, this could be used to return a short document description. See also see Document Summeries and PropertyNames in SWISH-CONFIG.

To return the subject and category properties while indexing.

 
    swish-e -w word -p subject category

Properties are returned in double quotes. If a property contains a double quote it is HTML escaped ("). See the -x switch for a more advanced method of returning a list of properties.

NOTE: it is necessary to have indexed with the proper PropertyNames directive in the user config file in order to use this option.

-s *property [asc|desc] ...* (sort)

Normally, search results are printed out in order of relevancy, with the most relevant listed first. The -s sort switch allows you to sort results in order of a specified property, where a property was defined using the MetaNames and PropertyNames directives during indexing (see SWISH-CONFIG).

The string passed can include the strings asc and desc to specify the sort order, and more than one property may be specified to sort on more than one key.

Examples:

sort by title property ascending order

 
    -s title

sort descending by title, ascending by name

 
    -s title desc name asc

Note: Swish limits sort keys to 100 characters. This limit can be changed by changing MAX_SORT_STRING_LEN in src/config.h and rebuilding swish-e.

-L limit to a range of property values (Limit)

This is an experimental feature!

The -L switch can be used to limit search results to a range of property values

Example:

 
    swish-e -w foo -L swishtitle a m

finds all documents that contain the word foo, and where the document's title is in the range of a to m, inclusive. By default, the case of the property is ignored, but this can be changed by using PropertyNamesCompareCase configuation directive.

Limiting may be done with user-defined properties, as well.

For example, if you indexed documents that contain a created timestamp in a meta tag:

 
    <meta name="created_on" content="982648324">

Then you tell Swish that you have a property called created_on, and that it's a timestamp.

 
    PropertyNamesDate created_on

After indexing you will be able to limit documents to a range of timestamps:

 
    -w foo -L created_on  946684800 949363199

will find documents containing the word foo and that have a created_on date from the start of Jan 1, 2000 to the end of Jan 31, 2000.

Note: swish currently does not parse dates; Unix timestamps must be used.

Two special formats can be used:

 
    -L swishtitle <= m
    -L swishtitle >= m

Finds titles less than or equal, or grater than or equal to the letter m.

This feature will not work with swishrank or swishdbfile properties.

This feature takes advantages of the pre-sorted tables built by swish during indexing to make this feature fast while searching. You should see in the indexing output a line such as:

 
   6 properties sorted.

That indicates that six pre-sorted tables were built during indexing. By default, all properties are presorted while indexing. What properties are pre-sorted can be controlled by the configuration parameter PreSortedIndex.

Using the -L switch on a property that was not pre-sorted will still work, but may be much slower during searching.

Note that the PropertyNamesSortKeyLength setting is used for sorting properties. Using too small a PropertyNamesSortKeyLength could result in -L selecting the wrong properties due to incomplete sorting.

This is an experimental feature, and its use and interface are subject to change.

-x formatstring (extended output format)

The -x switch defines the output format string. The format string can contain plain text and property names (including swish-defined internal property names) and is used to generate the output for every result. In addition, the output format of the property name can be controlled with C-like printf format strings. This feature overrides the cmdline switches -d and -p, and a warning will be generated if -d or -p are used with -x.

Warning: The format string (fmt) is passed directly to sprintf() and therefore exposes a securty hole. Do not allow user data to set -x format strings directly.

For example, to return just the title, one per line, in the search results:

 
    swish-e  -w ...   -x '<swishtitle>\n' ...

Note: the \n may need to be protected from your shell.

See also ResultExtFormatName for a way to define named format strings in the swish configuration file.

Format of "formatstring":

 
    "text<propertyname>text<propertyname fmt=propfmtstr>text..."

Where propertyname is:

  • the name of a user property as specified with the config file directive ``PropertyNames''

  • the name of a swish Auto property (see below). These properties are defined automatically by swish -- you do not need to specify them with PropertyNames directive. (This may change in the future.)

propertynames must be placed within ``<'' and ``>''.

User properties:

Swish-e allows you to specify certain META tags within your documents that can be used as document properties. The contents of any META tag that has been identified as a document property can be returned as part of the search results. Doucment properties must be defined while indexing using the PropertyNames configuration directive (see SWISH-CONFIG).

Examples of user-defined PropertyNames:

 
    <keywords>
    <author>
    <deliveredby>
    <reference>
    <id>

Auto properties:

Swish defines a number of ``Auto'' properties for each document indexed. These are available for output when using the -x format.

 
    Name               Type     Contents
    --------------     -------  ----------------------------------------------
    swishreccount      Integer  Result record counter
    swishtitle         String   Document title
    swishrank          Integer  Result rank for this hit
    swishdocpath       String   URL or filepath to document
    swishdocsize       Integer  Document size in bytes
    swishlastmodified  Date     Last modified date of document
    swishdescription   String   Description of document (see:StoreDescription)
    swishdbfile        String   Path of swish database indexfile

The Auto properties can also be specified using shortcuts:

 
    Shortcut    Property Name        
    --------    --------------
      %c        swishreccount
      %d        swishdescription
      %D        swishlastmodified
      %I        swishdbfile
      %p        swishdocpath
      %r        swishrank
      %l        swishdocsize
      %t        swishtitle

For example, these are equivalent:

 
   -x '<swishrank>:<swishdocpath>:<swishtitle>\n'
   -x '%r:%p:%t\n'

Use a double percent sign ``%%'' to enter a literal percent sign in the output.

Formatstrings of properties:

Properties listed in an -x format string can include format control strings. These ``propertyformats'' are used to control how the contents of the associated property are printed. Property formats are used like C-language printf formats. The property format is specified by including the attribute ``fmt'' within the property tag.

Format strings cannot be used with the ``%'' shortcuts described above.

General syntax:

 
    -x '<propertyname fmt="propfmtstr">'

where subfmt controls the output format of propertyname.

Examples of property format strings:

 
        date type:    <swishlastmodified fmt="%d.%m.%Y">
        string type:  <swishtitle fmt="%-40.35s">
        integer type: <swishreccount fmt=/%8.8d/>

Please see the manual pages for strftime(3) and sprintf(3) for an explanation of format strings. Note: some versions of strftime do not offer the %s format string (number of seconds since the Epoch), so swish provides a special format string ``%ld'' to display the number of seconds since the Epoch.

The first character of a property format string defines the delimiter for the format string. For example,

 
    -x  "<author  fmt=[%20s]> ...\n"
    -x  "<author  fmt='%20s'> ...\n"
    -x  "<author  fmt=/%20s/> ...\n"

Standard predefined formats:

If you ommit the sub-format, the following formats are used:

Text in "formatstring" or "propfmtstr":

Text will be output as-is in format strings (and property format strings). Special characters can be escaped with a backslash. To get a new line for each result hit, you have to include the Newline-Character ``\n'' at the end of ``fmtstr''.

 
    String type:       "%s"  (like printf char *)
    Integer type:      "%d"  (like printf int)
    Float type:        "%f"  (like printf double) 
    Date type:         "%Y-%m-%d %H:%M:%S" (like strftime)
 
    -x "<swishreccount>|<swishrank>|<swishdocpath>\n"
    -x "Count=<swishreccount>, Rank=<swishrank>\n"
    -x "Title=\<b\><swishtitle>\</b\>"
    -x 'Date: <swishlastmodified fmt="%m/%d/%Y">\n'
    -x 'Date in seconds: <swishlastmodified fmt=/%ld/>\n'

Control/Escape charcters:

you can use C-like control escapes in the format string:

 
   known controls:      \a, \b, \f, \n, \r, \t, \v,
   digit escapes:       \xhexdigits   \0octaldigits
   character escapes:   \anychar  

Example,

 
    swish -x "%c\t%r\t%p\t\"<swishtitle fmt=/%40s/>\"\n"

Examples of -x format strings:

 
    -x "%c|%r|%p|%t|%D|%d\n"
    -x "%c|%r|%p|%t|<swishdate fmt=/%A, %d. %B %Y/>|%d\n"
    -x "<swishrank>\t<swishdocpath>\t<swishtitle>\t<keywords>\n
    -x "xml_out: \<title\><swishtitle>\>\</title\>\n"
    -x "xml_out: <swishtitle fmt='<title>%s</title>'>\n"

-H [0|1|2|3|<n>] (header output verbosity)

The -H n switch generates extened header output. This is most useful when searching more than one index file at a time by specifying more than one index file with the -f switch. -H 2 will generate a set of headers specific to each index file. This gives access to the settings used to generate each index file.

Even when searching a single index file, -H n will provided additional information about the index file, how it was indexed, and how swish is interperting the query.

 
    -H 0 : print no header information, output only search result entries.
    -H 1 : print standard result header (default).
    -H 2 : print additional header information for each searched index file.
    -H 3 : enhanced header output (e.g. print stopwords).
    -H 9 : print diagnostic information in the header of the results (changed from: C<-v 4>)

[ TOC ]


OTHER SWITCHES

-V (version)

Print the current version.

-k *letter* (print out keywords)

The -k switch is used for testing and will cause swish to print out all keywords in the index beginning with that letter. You may enter -k '*' to generate a list of all words indexed by swish.

-D *index file* (debug index)

The -D option is no longer supported in version 2.2.

-T *options* (trace/debug swish)

The -T option is used to print out information that may be helpful when debugging swish-e's operation. This option replaced the -D option of previous versions.

Running -T help will print out a list of available *options*

[ TOC ]


Merging Index Files

In previous versions of Swish-e indexing would require a very large amount of memory and the indexing process could be very slow. Merging provided a way to index in chunks and then combine the indexes together into a single index.

Indexing is much faster now and uses much less memory, and with the -e switch very little memory is needed to index a large site.

Still, at times it can be useful to merge different index files into one file for searching. This could be because you want to keep separate site indexes and a common one for a global search, or you have separate collections of documents that you wish to search all at one time, but manage separately.

-M *index1 index2 ... indexN out_index

Merges the indexes specified on the command line -- the last file name entered is the output file. The output index must not exist (otherwise merge will not proceed).

Only indexes that were indexed with common settings may be merged. (e.g. don't mix stemming and non-stemming indexes, or indexes with different WordCharacter settings, etc.).

Use the -e switch while merging to reduce memory usage.

Merge generates progress messages regardless of the setting of -v.

-c *configuration file*

Specify a configuration file while indexing to add administrative information to the output index file.

[ TOC ]


Document Info

$Id: SWISH-RUN.pod,v 1.33.2.2 2004/01/24 18:31:05 whmoseley Exp $

. [ TOC ]


0[swish-e.html]SWISH-SEARCH.htmlF+F$"2s6++y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: SWISH-SEARCH - Swish-e Searching Instructions

Swish-E Logo


SWISH-SEARCH - Swish-e Searching Instructions


[ TOC ]

OVERVIEW

This page describes the process of searching with Swish-e. Please see the SWISH-CONFIG page for information the Swish-e configuration file directives, and SWISH-RUN for a complete list of command line arguments.

Searching a Swish-e index involves passing command line arguments to it that specify the index file to use, and the query (or search words) to locate in the index. Swish-e returns a list of file names (or URLs) that contain the matched search words. Perl is often used as a front-end to Swish-e such as in CGI applications, and perl modules exist to for interfacing with Swish-e.

[ TOC ]


Searching Syntax and Operations

The -w command line argument is used specify the search query to Swish-e.

 
    swish-e -w airplane

will find all documents that contain the word airplane.

When running Swish-e from a shell prompt, be careful to protect your query from shell metacharacters and shell expansions. This often means placing single or double quotes around your query. See Searching with Perl if you plan to use Perl as a front end to Swish-e. In the examples below single quotes are used to protect the search from the shell.

The following section describes various aspects of searching with Swish-e.

[ TOC ]


Boolean Operators

You can use the Boolean operators and, or or not in searching. Without these Boolean operators Swish-e will assume you're and'ing the words together. The operators are not case sensitive. These three searches are the same:

 
    swish-e -w foo bar
    swish-e -w bar foo
    swish-e -w foo AND bar

[Note: you can change the default to oring by changing the variable DEFAULT_RULE in the config.h file and recompiling Swish-e.]

The not operator inverts the results of a search.

 
   swish-e -w not foo

finds all the documents that do not contain the word foo.

Parentheses can be used to group searches.

 
   swish-e -w 'not (foo and bar)'

The result is all documents that have none or one term, but not both.

To search for the words and, or, or not, place them in a double quotes. Remember to protect the quotes from the shell:

 
    swish-e -w '"not"'
    swish-e -w \"not\"

will search for the word ``not''.

Other examples:

 
     swish-e -w smilla or snow

Retrieves files containing either the words ``smilla'' or ``snow''.

 
     swish-e -w smilla snow not sense 
     swish-e -w '(smilla and snow) and not sense'  (same thing)

retrieves first the files that contain both the words ``smilla'' and ``snow''; then among those the ones that do not contain the word ``sense''.

[ TOC ]


Truncation

The wildcard (*) is available, however it can only be used at the end of a word: otherwise is is considered a normal character (i.e. can be searched for if included in the WordCharacters directive).

 
     swish-e -w librarian

this query only retrieves files which contain the given word.

On the other hand:

 
     swish-e -w 'librarian*'

retrieves ``librarians'', ``librarianship'', etc. along with ``librarian''.

Note that wildcard searches combined with word stemming can lead to unexpected results. If stemming is enabled, a search term with a wildcard will be stemmed internally before searching. So searching for running* will actually be a search for run*, so running* would find runway. Also, searching for runn* will not find running as you might expect, since running stems to run in the index, and thus runn* will not find run.

[ TOC ]


Order of Evaluation

In general, the order of evaluation is not important. Internally swish-e processes the search terms from left to right. Parenthesis can be used to group searches together, effectively changing the order of evaluation. For example these three are the same:

 
    swish-e -w foo not bar baz
    swish-e -w not bar foo baz
    swish-e -w baz foo not bar

but these two are not the same:

 
    swish-e -w foo not bar baz
    swish-e -w foo not (bar baz)

The first finds all documents that contain both foo and baz, but do not contain bar. The second finds all that contain foo, and contain either bar or baz, but not both.

It is often helpful in understanding searches to use the boolean terms and parenthesis. So the above two become:

 
    swish-e -w foo AND (not bar) AND baz
    swish-e -w foo AND (not (bar AND baz))

These four examples are all the same search (assuming that AND is the default search type):

 
    swish-e -w 'juliet not ophelia and pac'
    swish-e -w '(juliet) AND (NOT ophelia) AND (pac)'
    swish-e -w 'juliet not ophelia pac'
    swish-e -w 'pac and juliet and not ophelia'

Looking at the the first three searches, first Swish-e finds all the documents with ``juliet''. Then it finds all documents that do not contain ``ophelia''. Those two lists are then combined with the boolean AND operator resulting with a list of documents that include ``juliet'' but not ``ophelia''. Finally, that list is ANDed with the list of documents that contain ``pac'' resulting.

However it is always possible to force the order of evaluation by using parenthesis. For example:

 
    swish-e -w 'juliet not (ophelia and pac)'

retrieves files with ``juliet'' that do not contain both words ``ophelia'' and ``pac''.

[ TOC ]


Meta Tags

MetaNames are used to represent fields (called columns in a database) and provide a way to search in only parts of a document. See SWISH-CONFIG for a description of MetaNames, and how they are specified in the source document.

To limit a search to words found in a meta tag you prefix the keywords with the name of the meta tag, followed by the equal sign:

 
    metaname = word
    metaname = (this or that)
    metaname = ( (this or that) or "this phrase" )

It is not necessary to have spaces at either side of the ``='', consequently the following are equivalent:

 
    swish-e -w "metaName=word"
    swish-e -w "metaName = word"
    swish-e -w "metaName= word"

To search on a word that contains a ``='', precede the ``='' with a ``\'' (backslash).

 
    swish-e -w "test\=3 = x\=4 or y\=5"

this query returns the files where the word ``x=4'' is associated with the metaName ``test=3'' or that contains the word ``y=5'' not associated with any metaName.

Queries can be also constructed using any of the usual search features, moreover metaName and plain search can be mixed in a single query.

 
     swish-e -w "metaName1 = (a1 or a4) not (a3 and a7)"

This query will retrieve all the files in which ``a1'' or ``a2'' are found in the META tag ``metaName1'' and that do not contain the words ``a3'' and ``a7'', where ``a3'' and ``a7'' are not associated to any meta name.

[ TOC ]


Phrase Searching

To search for a phrase in a document use double-quotes to delimit your search terms. (The phrase delimiter is set in src/swish.h.)

You must protect the quotes from the shell.

For example, under Unix:

 
    swish-e -w '"this is a phrase" or (this and that)'
    swish-e -w 'meta1=("this is a phrase") or (this and that)'

Or under Windows:

 
    swish-e -w \"this is a phrase\" or (this and that)

You can not use boolean search terms inside a phrase. That is:

 
    swish-e -w 'this and that'

finds documents with both words ``this'' and ``that'', but:

 
    swish-e -w '"this and that"'

finds documents that have the phrase ``that and that''. A phrase can consist of a single word, so this is how to search for the words used as boolean operators:

 
   swish-e -w 'this "and" that'

finds documents that contain all three words, but in any order.

You can use the -P switch to set the phrase delimiter character. See SWISH-RUN for examples.

[ TOC ]


Context

At times you might not want to search for a word in every part of your files since you know that the word(s) are present in a particular tag. The ability to search according to context greatly increases the chances that your hits will be relevant, and Swish-e provides a mechanism to do just that.

The -t option in the search command line allows you to search for words that exist only in specific HTML tags. Each character in the string you specify in the argument to this option represents a different tag in which the word is searched; that is you can use any combinations of the following characters:

 
    H means all<HEAD> tags
    B stands for <BODY> tags
    t is all <TITLE> tags
    h is <H1> to <H6> (header) tags
    e is emphasized tags (this may be <B>, <I>, <EM>, or <STRONG>)
    c is HTML comment tags (<!-- ... -->)

 
    # This search will look for files with these two words in their titles only.
    swish-e -w "apples oranges" -t t

 
    # This search will look for files with these words in comments only.
    swish-e -w "keywords draft release" -t c

 
    This search will look for words in titles, headers, and emphasized tags.
    swish-e -w "world wide web" -t the

[ TOC ]


Searching with Perl

Perl ( http://www.perl.com/ ) is probably the most common programming language used with Swish-e, especially in CGI interfaces. Perl makes searching and parsing results with Swish-e easy, but if not done properly can leave your server vulnerable to attacks.

When designing your CGI scripts you should carefully screen user input, and include features such as paged results and a timer to limit time required for a search to complete. These are to protect your web site against a denial of service (DoS) attack.

Included with every distribution of Perl is a document called perlsec -- Perl Security. Please take time to read and understand that document before writing CGI scripts in perl.

Type at your shell/command prompt:

 
    perldoc perlsec

If nothing else, start every CGI program in perl as such:

 
    #!/usr/local/bin/perl -wT
    use strict;

That alone won't make your script secure, but may help you find insecure code.

[ TOC ]


CGI Danger!

There are many examples of CGI scripts on the Internet. Many are poorly written and insecure. A commonly seen way to execute Swish-e from a perl CGI script is with a piped open. For example, it is common to see this type of open():

 
    open(SWISH, "$swish -w $query -f $index|");

This open() gives shell access to the entire Internet! Often an attempt is made to strip $query of bad characters. But, this often fails since it's hard to guess what every bad character is. Would you have thought about a null? A better approach is to only allow in known safe characters.

Even if you can be sure that any user supplied data is safe, this piped open still passes the command parameters through the shell. If nothing else, it's just an extra unnecessary step to running Swish-e.

Therefore, the recommended approach is to fork and exec swish-e directly without passing through the shell. This process is described in the perl man page perlipc under the appropriate heading Safe Pipe Opens.

Type:

 
    perldoc perlipc

If all this sounds complicated you may wish to use a Perl module that does all the hard work for you.

[ TOC ]


Perl Modules

The Swish-e distribution includes a Perl module called SWISH::API. SWISH::API provides access to the Swish-e C Library.

The SWISH::API module is not installed by default.

The SWISH::API module will embed Swish-e into your perl program so that searching does not require running an external program. Embedding the Swish-e program into your perl program results in faster Swish-e searches, especially when running under a persistent environment like mod_perl since it avoids the cost of opening the index file for every request (mod_perl is much also much faster than CGI because it avoids the need to compile Perl code for every request).

See the README file in the perl directory of the Swish-e distribution for installation instructions. Documentation for the SWISH::API module is available at http://swish-e.org and is installed along with other HTML documentation on your computer.

[ TOC ]


Document Info

$Id: SWISH-SEARCH.pod,v 1.5.2.1 2003/11/12 21:33:54 whmoseley Exp $

. [ TOC ]


0[swish-e.html]_swishcgi.conf##$r瀿2y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); return { title => 'Search Swish-e Documentation Table of contents', date_ranges => undef, template => { package => 'SWISH::TemplateFrame', }, } 0[swish-e.html]index.html# #諿2  y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  SWISH-Enhanced

Swish-E Logo


SwishE2 Logo

[ TOC ] [ Full TOC ]

SWISH-Enhanced is a fast, powerful, flexible, free, and easy to use system for indexing collections of Web pages or other text files. Key features include the ability to limit searches to certain HTML tags (META, TITLE, comments, etc.). SWISH-E is an enhanced version of SWISH, which was originally written by Kevin Hughes and modified and released with his permission.

SwishE2 Logo is a new version with much of the code base rewritten for additional features, increased speed of indexing and searching, and improved security. See the SWISH-E README file for a list of features, downloading instructions, documentation overview, and support information.

Swish Version 2.4.2
Documentation created on Mar 9, 2004

Table of Contents:

0[swish-e.html]index_long.htmlF5Fծ髿2 55y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced

Swish-E Logo


SwishE2 Logo

[ TOC ] [ Dense TOC ]

SWISH-Enhanced is a fast, powerful, flexible, free, and easy to use system for indexing collections of Web pages or other text files. Key features include the ability to limit searches to certain HTML tags (META, TITLE, comments, etc.). SWISH-E is an enhanced version of SWISH, which was originally written by Kevin Hughes and modified and released with his permission.

SwishE2 Logo is a new version with much of the code base rewritten for additional features, increased speed of indexing and searching, and improved security. See the SWISH-E README file for a list of features, downloading instructions, documentation overview, and support information.

Swish Version 2.4.2
Documentation created on Mar 9, 2004

Table of Contents:

0[swish-e.html]search.html##+'2 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); " SWISH-Enhanced: search.cgi -- Example Perl program for searching with Swish-e and SWISH::API

Swish-E Logo


search.cgi -- Example Perl program for searching with Swish-e and SWISH::API


[ TOC ]

DESCRIPTION

This is a very simple program that shows how to use the SWISH::API module in a CGI script. Unlike swish.cgi, this is suppose to not have many built-in features. So don't ask why it doesn't do something. The point is that this is used as a starting point that YOU customize.

This program is intended for programmers that want to create a custom search script.

This program does require that some modules are installed from CPAN. See REQUIREMENTS below for details and an explanation of why.

This program does not handle multiple index files, special metanames that can be selected by drop-down boxes or anything else fancy. Again, the point is that this script gets customized by you.

Template-Toolkit is used to render the output. The template is included below the program code in the __DATA__ section. A Template-Toolkit ``filter'' is created to highlight terms in the description. The filter uses the same modules that the swish.cgi script uses for highlighting.

The template can be placed in its own file if you like. That's the normal way templates are used. It's in the __DATA__ section in this script so that only one file is needed. If you run under mod_perl or SpeedyCGI you must use a separate template file.

The index file is hard-coded as index.swish-e. Change it as needed. The script uses page numbers instead of record numbers. Record numbers might be more flexible.

This script can be run under SpeedyCGI by changing the top line to:

 
    #!/usr/bin/speedy -w

and installing SpeedyCGI, of course. When run under SpeedyCGI or mod_perl the template must be moved out into a separate file. Set the INCLUDE_PATH to the directory where you store the template file.

The script can also be run as a mod_perl handler. If you use mod_perl you might want to use Apache::Request instead of CGI.pm.

[ TOC ]


USAGE

The script is installed when Swish-e is installed. On unix-like systems this will like be at /usr/local/lib/swish-e/search.cgi. If you used a different --prefix option at compile time then it would be wise to look there, instead. Windows users will find the program someplace similar, but different. If installed as part of your OS distribution then it might be in /usr/lib/swish-e.

Install the required modules (see next section) and then copy or symlink the program to where you normally run CGI scripts. Use .htaccess or whatever your web server requires to indicate that the script is indeed a CGI script.

Create an index. If the index is not in the current working directory when the script is run, and is not called ``index.swish-e'' (the default swish-e index name) then modify the script to find the correct index file.

Testing CGI script from the command line first will impress your friends.

The script is lightly commented so that hopefully you can understand how it works and thus understand how to add the features you need.

[ TOC ]


REQUIREMENTS

To use this script as-is a few Perl modules will need to be installed. You are not required to use these modules, but I like them and thus I'm recommending that you give them a try.

Template-Toolkit

Template-Toolkit (or TT) is available from CPAN or from

 
    http://search.cpan/org/
    http://tt2.org/

TT is used to generate the HTML output. It's good code design to separate the output generation from the ``model'' code that does the work of fetching the data.

I'm a big fan of Template-Toolkit. It's simple enough that it's easy to learn how to work with basic templates. It's also not limiting and provides power to do what's needed in the template without requiring too much setup in the logic part of your code. Note in the code how TT works directly with the objects returned by SWISH::API. TT's dot notation means that you can change the backend data (e.g. from a hash to an object) and the template does not need to change.

Please give TT a try. It's a much better use of your time than writing Yet Another Homemade Templating System.

HTML::FillInForm

This module is also available from CPAN

 
    http://search.cpan.org/

HTML::FillInForm makes HTML forms ``sticky'' -- that is, it takes previous data from a CGI request and fills in the form elements. What this means is you can write very plain, basic HTML forms in the template and HTML::FillInForm will make them sticky.

The other way to have sticky forms is to use the CGI.pm module (which can be used directly with Template-Toolkit). Besides requiring that the large CGI.pm module gets loaded, it means there's more programming-like code in the template, which should really just be basic HTML, and means the template writer needs to also learn a little more Perl.

[ TOC ]


SUPPORT

Not much support is provided. But what support is provided is ONLY provided via the Swish-e discussion list.

 
    http://swish-e.org/

[ TOC ]


AUTHOR

Bill Moseley

[ TOC ]


LICENSE

Copyright 2003 Bill Moseley. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

[ TOC ]


SEE ALSO

SWISH::API, Template, HTML::FillInForm [ TOC ]


0[swish-e.html]searchdoc.html## 﫿2y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  Search Swish-e Documenation 0[swish-e.html]spider.htmlidi﫿2 ddy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: spider.pl - Example Perl program to spider web servers

Swish-E Logo


spider.pl - Example Perl program to spider web servers


[ TOC ]

SYNOPSIS

 
  swish.config:
    IndexDir ./spider.pl
    SwishProgParameters spider.config
    # other swish-e settings

 
  spider.config:
    @servers = (
        {
            base_url    => 'http://myserver.com/',
            email       => 'me@myself.com',
            # other spider settings described below
        },
    );

Begin indexing:

 
    swish-e -S prog -c swish.config

Note: When running on some versions of Windows (e.g. Win ME and Win 98 SE) you may need to index using the command:

 
    perl spider.pl | swish-e -S prog -c swish.conf -i stdin

This pipes the output of the spider directly into swish.

[ TOC ]


DESCRIPTION

This is a swish-e ``prog'' document source program for spidering web servers. It can be used instead of the http method for spidering with swish.

The spider typically uses a configuration file that lists the URL(s) to spider, and configuration parameters that control the behavior of the spider. In addition, you may define callback perl functions in the configuration file that can dynamically change the behavior of the spider based on URL, HTTP response headers, or the content of the fetched document. These callback functions can also be used to filter or convert documents (e.g. PDF, gzip, MS Word) into a format that swish-e can parse. Some examples are provided.

You define ``servers'' to spider, set a few parameters, create callback routines, and start indexing as the synopsis above shows. The spider requires its own configuration file (unless you want the default values). This is NOT the same configuration file that swish-e uses.

The example configuration file SwishSpiderConfig.pl is included in the prog-bin directory along with this script. Please just use it as an example, as it contains more settings than you probably want to use. Start with a tiny config file and add settings as required by your situation.

The available configuration parameters are discussed below.

If all that sounds confusing, then you can run the spider with default settings. In fact, you can run the spider without using swish just to make sure it works. Just run

 
    ./spider.pl default http://someserver.com/sometestdoc.html

And you should see sometestdoc.html dumped to your screen. Get ready to kill the script if the file you request contains links as the output from the fetched pages will be displayed.

 
    ./spider.pl default http://someserver.com/sometestdoc.html > output.file

might be more friendly.

If the first parameter passed to the spider is the word ``default'' (as in the preceeding example) then the spider uses the default parameters, and the following parameter(s) are expected to be URL(s) to spider. Otherwise, the first parameter is considered to be the name of the configuration file (as described below). When using -S prog, the swish-e configuration setting SwishProgParameters is used to pass parameters to the program specified with IndexDir or the -i switch.

If you do not specify any parameters the program will look for the file

 
    SwishSpiderConfig.pl

in the current directory.

The spider does require Perl's LWP library and a few other reasonably common modules. Most well maintained systems should have these modules installed. If not, start here:

 
    http://search.cpan.org/search?dist=libwww-perl
    http://search.cpan.org/search?dist=HTML-Parser

See more below in REQUIREMENTS. It's a good idea to check that you are running a current version of these modules.

[ TOC ]


Robots Exclusion Rules and being nice

By default, this script will not spider files blocked by robots.txt. In addition, The script will check for <meta name=``robots''..> tags, which allows finer control over what files are indexed and/or spidered. See http://www.robotstxt.org/wc/exclusion.html for details.

This spider provides an extension to the <meta> tag exclusion, by adding a NOCONTENTS attribute. This attribute turns on the no_contents setting, which asks swish-e to only index the document's title (or file name if not title is found).

For example:

 
      <META NAME="ROBOTS" CONTENT="NOCONTENTS, NOFOLLOW">

says to just index the document's title, but don't index its contents, and don't follow any links within the document. Granted, it's unlikely that this feature will ever be used...

If you are indexing your own site, and know what you are doing, you can disable robot exclusion by the ignore_robots_file configuration parameter, described below. This disables both robots.txt and the meta tag parsing. You may disable just the meta tag parsing by using ignore_robots_headers.

This script only spiders one file at a time, so load on the web server is not that great. And with libwww-perl-5.53_91 HTTP/1.1 keep alive requests can reduce the load on the server even more (and potentially reduce spidering time considerably!)

Still, discuss spidering with a site's administrator before beginning. Use the delay_sec to adjust how fast the spider fetches documents. Consider running a second web server with a limited number of children if you really want to fine tune the resources used by spidering.

[ TOC ]


Duplicate Documents

The spider program keeps track of URLs visited, so a document is only indexed one time.

The Digest::MD5 module can be used to create a ``fingerprint'' of every page indexed and this fingerprint is used in a hash to find duplicate pages. For example, MD5 will prevent indexing these as two different documents:

 
    http://localhost/path/to/some/index.html
    http://localhost/path/to/some/

But note that this may have side effects you don't want. If you want this file indexed under this URL:

 
    http://localhost/important.html

But the spider happens to find the exact content in this file first:

 
    http://localhost/developement/test/todo/maybeimportant.html

Then only that URL will be indexed.

[ TOC ]


Broken relative links

Some times web page authors use too many /../ segments in relative URLs which reference documents above the document root. Some web servers such as Apache will return a 400 Bad Request when requesting a document above the root. Other web servers such as Micorsoft IIS/5.0 will try and ``correct'' these errors. This correction will lead to loops when spidering.

The spider can fix these above-root links by placing the following in your spider config:

 
    remove_leading_dots => 1,

It is not on by default so that the spider can report the broken links (as 400 errors on sane webservers).

[ TOC ]


Compression

If The Perl module Compress::Zlib is installed the spider will send the

 
   Accept-Encoding: gzip

header and uncompress the document if the server returns the header

 
   Content-Encoding: gzip

MD5 checksomes are done on the compressed data.

MD5 may slow down indexing a tiny bit, so test with and without if speed is an issue (which it probably isn't since you are spidering in the first place). This feature will also use more memory.

Note: the ``prog'' document source in swish bypasses many swish-e configuration settings. For example, you cannot use the IndexOnly directive with the ``prog'' document source. This is by design to limit the overhead when using an external program for providing documents to swish; after all, with ``prog'', if you don't want to index a file, then don't give it to swish to index in the first place.

So, for spidering, if you do not wish to index images, for example, you will need to either filter by the URL or by the content-type returned from the web server. See CALLBACK FUNCTIONS below for more information.

[ TOC ]


REQUIREMENTS

Perl 5 (hopefully at least 5.00503) or later.

You must have the LWP Bundle on your computer. Load the LWP::Bundle via the CPAN.pm shell, or download libwww-perl-x.xx from CPAN (or via ActiveState's ppm utility). Also required is the the HTML-Parser-x.xx bundle of modules also from CPAN (and from ActiveState for Windows).

 
    http://search.cpan.org/search?dist=libwww-perl
    http://search.cpan.org/search?dist=HTML-Parser

You will also need Digest::MD5 if you wish to use the MD5 feature. HTML::Tagset is also required. Other modules may be required (for example, the pod2xml.pm module has its own requirementes -- see perldoc pod2xml for info).

The spider.pl script, like everyone else, expects perl to live in /usr/local/bin. If this is not the case then either add a symlink at /usr/local/bin/perl to point to where perl is installed or modify the shebang (#!) line at the top of the spider.pl program.

Note that the libwww-perl package does not support SSL (Secure Sockets Layer) (https) by default. See README.SSL included in the libwww-perl package for information on installing SSL support.

[ TOC ]


CONFIGURATION FILE

Configuration is not very fancy. The spider.pl program simply does a do "path"; to read in the parameters and create the callback subroutines. The path is the first parameter passed to the spider script, which is set by the Swish-e configuration setting SwishProgParameters.

For example, if in your swish-e configuration file you have

 
    SwishProgParameters /path/to/config.pl
    IndexDir /home/moseley/swish-e/prog-bin/spider.pl

And then run swish as

 
    swish-e -c swish.config -S prog

swish will run /home/moseley/swish-e/prog-bin/spider.pl> and the spider.pl program will receive as its first parameter /path/to/config.pl, and spider.pl will read /path/to/config.pl to get the spider configuration settings. If SwishProgParameters is not set, the program will try to use SwishSpiderConfig.pl by default.

There is a special case of:

 
    SwishProgParameters default http://www.mysite/index.html ...

Where default parameters are used. This will only index documents of type text/html or text/plain, and will skip any file with an extension that matches the pattern:

 
    /\.(?:gif|jpeg|.png)$/i

This can be useful for indexing just your web documnts, but you will probably want finer control over your spidering by using a configuration file.

The configuration file must set a global variable @servers (in package main). Each element in @servers is a reference to a hash. The elements of the has are described next. More than one server hash may be defined -- each server will be spidered in order listed in @servers, although currently a global hash is used to prevent spidering the same URL twice.

Examples:

 
    my %serverA = (
        base_url    => 'http://swish-e.org/',
        same_hosts  => [ qw/www.swish-e.org/ ],
        email       => 'my@email.address',
    );
    my %serverB = (
        ...
        ...
    );
    @servers = ( \%serverA, \%serverB, );

[ TOC ]


CONFIGURATION OPTIONS

This describes the required and optional keys in the server configuration hash, in random order...

base_url

This required setting is the starting URL for spidering.

Typically, you will just list one URL for the base_url. You may specify more than one URL as a reference to a list

 
    base_url => [qw! http://swish-e.org/ http://othersite.org/other/index.html !],

You may specify a username and password:

 
    base_url => 'http://user:pass@swish-e.org/index.html',

but you may find that to be a security issue. If a URL is protected by Basic Authentication you will be prompted for a username and password. This might be a slighly safer way to go.

The parameter max_wait_time controls how long to wait for user entry before skipping the current URL.

See also credentials below.

same_hosts

This optional key sets equivalent authority name(s) for the site you are spidering. For example, if your site is www.mysite.edu but also can be reached by mysite.edu (with or without www) and also web.mysite.edu then:

Example:

 
    $serverA{base_url} = 'http://www.mysite.edu/index.html';
    $serverA{same_hosts} = ['mysite.edu', 'web.mysite.edu'];

Now, if a link is found while spidering of:

 
    http://web.mysite.edu/path/to/file.html

it will be considered on the same site, and will actually spidered and indexed as:

 
    http://www.mysite.edu/path/to/file.html

Note: This should probably be called same_host_port because it compares the URI host:port against the list of host names in same_hosts. So, if you specify a port name in you will want to specify the port name in the the list of hosts in same_hosts:

 
    my %serverA = (
        base_url    => 'http://sunsite.berkeley.edu:4444/',
        same_hosts  => [ qw/www.sunsite.berkeley.edu:4444/ ],
        email       => 'my@email.address',
    );

email

This required key sets the email address for the spider. Set this to your email address.

agent

This optional key sets the name of the spider.

link_tags

This optional tag is a reference to an array of tags. Only links found in these tags will be extracted. The default is to only extract links from a tags.

For example, to extract tags from a tags and from frame tags:

 
    my %serverA = (
        base_url    => 'http://sunsite.berkeley.edu:4444/',
        same_hosts  => [ qw/www.sunsite.berkeley.edu:4444/ ],
        email       => 'my@email.address',
        link_tags   => [qw/ a frame /],
    );

delay_sec

This optional key sets the delay in seconds to wait between requests. See the LWP::RobotUA man page for more information. The default is 5 seconds. Set to zero for no delay.

When using the keep_alive feature (recommended) the delay will used only where the previous request returned a ``Connection: closed'' header.

Note: A common recommendation is to use a delay of one minute between requests. For example, one minute is the default used in the LWP::RobotUA Perl module.

delay_min (deprecated)

Set the delay to wait between requests in minutes. If both delay_sec and delay_min are defined, delay_sec will be used.

max_wait_time

This setting is the number of seconds to wait for data to be returned from the request. Data is returned in chunks to the spider, and the timer is reset each time a new chunk is reported. Therefore, documents (requests) that take longer than this setting should not be aborted as long as some data is received every max_wait_time seconds. The default it 30 seconds.

NOTE: This option has no effect on Windows.

max_time

This optional key will set the max minutes to spider. Spidering for this host will stop after max_time minutes, and move on to the next server, if any. The default is to not limit by time.

max_files

This optional key sets the max number of files to spider before aborting. The default is to not limit by number of files. This is the number of requests made to the remote server, not the total number of files to index (see max_indexed). This count is displayted at the end of indexing as Unique URLs.

This feature can (and perhaps should) be use when spidering a web site where dynamic content may generate unique URLs to prevent run-away spidering.

max_indexed

This optional key sets the max number of files that will be indexed. The default is to not limit. This is the number of files sent to swish for indexing (and is reported by Total Docs when spidering ends).

max_size

This optional key sets the max size of a file read from the web server. This defaults to 5,000,000 bytes. If the size is exceeded the resource is skipped and a message is written to STDERR if the DEBUG_SKIPPED debug flag is set.

keep_alive

This optional parameter will enable keep alive requests. This can dramatically speed up spidering and reduce the load on server being spidered. The default is to not use keep alives, although enabling it will probably be the right thing to do.

To get the most out of keep alives, you may want to set up your web server to allow a lot of requests per single connection (i.e MaxKeepAliveRequests on Apache). Apache's default is 100, which should be good.

When a connection is not closed the spider does not wait the ``delay_sec'' time when making the next request. In other words, there is no delay in requesting documents while the connection is open.

Note: try to filter as many documents as possible before making the request to the server. In other words, use test_url to look for files ending in .html instead of using test_response to look for a content type of text/html if possible. Do note that aborting a request from test_response will break the current keep alive connection.

Note: you must have at least libwww-perl-5.53_90 installed to use this feature.

skip

This optional key can be used to skip the current server. It's only purpose is to make it easy to disable a server in a configuration file.

debug

Set this to a number to display different amounts of info while spidering. Writes info to STDERR. Zero/undefined is no debug output.

The following constants are defined for debugging. They may be or'ed together to get the individual debugging of your choice.

Here are basically the levels:

 
    DEBUG_ERRORS   general program errors (not used at this time)
    DEBUG_URL      print out every URL processes
    DEBUG_HEADERS  prints the response headers
    DEBUG_FAILED   failed to return a 200
    DEBUG_SKIPPED  didn't index for some reason
    DEBUG_INFO     more verbose
    DEBUG_LINKS    prints links as they are extracted

For example, to display the urls processed, failed, and skipped use:

 
    debug => DEBUG_URL | DEBUG_FAILED | DEBUG_SKIPPED,

To display the returned headers

 
    debug => DEBUG_HEADERS,

You can easily run the spider without using swish for debugging purposes:

 
    ./spider.pl test.config > spider.out

And you will see debugging info as it runs, and the fetched documents will be saved in the spider.out file.

Debugging can be also be set by an environment variable when running swish. This will override any setting in the configuration file. Set the variable SPIDER_DEBUG when running the spider. You can specify any of the above debugging options, separated by a comma.

For example with Bourne type shell:

 
    SPIDER_DEBUG=url,links

quiet

If this is true then normal, non-error messages will be supressed. Quiet mode can also be set by setting the environment variable SPIDER_QUIET to any true value.

 
    SPIDER_QUIET=1

max_depth

The max_depth parameter can be used to limit how deeply to recurse a web site. The depth is just a count of levels of web pages decended, and not related to the number of path elements in a URL.

A max_depth of zero says to only spider the page listed as the base_url. A max_depth of one will spider the base_url page, plus all links on that page, and no more. The default is to spider all pages.

ignore_robots_file

If this is set to true then the robots.txt file will not be checked when spidering this server. Don't use this option unless you know what you are doing.

use_cookies

If this is set then a ``cookie jar'' will be maintained while spidering. Some (poorly written ;) sites require cookies to be enabled on clients.

This requires the HTTP::Cookies module.

use_md5

If this setting is true, then a MD5 digest ``fingerprint'' will be made from the content of every spidered document. This digest number will be used as a hash key to prevent indexing the same content more than once. This is helpful if different URLs generate the same content.

Obvious example is these two documents will only be indexed one time:

 
    http://localhost/path/to/index.html
    http://localhost/path/to/

This option requires the Digest::MD5 module. Spidering with this option might be a tiny bit slower.

validate_links

Just a hack. If you set this true the spider will do HEAD requests all links (e.g. off-site links), just to make sure that all your links work.

credentials

You may> specify a username and password to be used automatically when spidering:

 
    credentials => 'username:password',

A username and password supplied in a URL will override this setting.

credential_timeout

Sets the number of seconds to wait for user input when prompted for a username or password. The default is 30 seconds.

remove_leading_dots

Removes leading dots from URLs that might reference documents above the document root. The default is to not remove the dots.

[ TOC ]


CALLBACK FUNCTIONS

Three callback functions can be defined in your parameter hash. These optional settings are callback subroutines that are called while processing URLs.

A little perl discussion is in order:

In perl, a scalar variable can contain a reference to a subroutine. The config example above shows that the configuration parameters are stored in a perl hash.

 
    my %serverA = (
        base_url    => 'http://sunsite.berkeley.edu:4444/',
        same_hosts  => [ qw/www.sunsite.berkeley.edu:4444/ ],
        email       => 'my@email.address',
        link_tags   => [qw/ a frame /],
    );

There's two ways to add a reference to a subroutine to this hash:

sub foo { return 1; }

 
    my %serverA = (
        base_url    => 'http://sunsite.berkeley.edu:4444/',
        same_hosts  => [ qw/www.sunsite.berkeley.edu:4444/ ],
        email       => 'my@email.address',
        link_tags   => [qw/ a frame /],
        test_url    => \&foo,  # a reference to a named subroutine
    );

Or the subroutine can be coded right in place:

 
    my %serverA = (
        base_url    => 'http://sunsite.berkeley.edu:4444/',
        same_hosts  => [ qw/www.sunsite.berkeley.edu:4444/ ],
        email       => 'my@email.address',
        link_tags   => [qw/ a frame /],
        test_url    => sub { reutrn 1; },
    );

The above example is not very useful as it just creates a user callback function that always returns a true value (the number 1). But, it's just an example.

The function calls are wrapped in an eval, so calling die (or doing something that dies) will just cause that URL to be skipped. If you really want to stop processing you need to set $server->{abort} in your subroutine (or send a kill -HUP to the spider).

The first two parameters passed are a URI object (to have access to the current URL), and a reference to the current server hash. The server hash is just a global hash for holding data, and useful for setting flags as described below.

Other parameters may be also passed in depending the the callback function, as described below. In perl parameters are passed in an array called ``@_''. The first element (first parameter) of that array is $_[0], and the second is $_[1], and so on. Depending on how complicated your function is you may wish to shift your parameters off of the @_ list to make working with them easier. See the examples below.

To make use of these routines you need to understand when they are called, and what changes you can make in your routines. Each routine deals with a given step, and returning false from your routine will stop processing for the current URL.

test_url

test_url allows you to skip processing of urls based on the url before the request to the server is made. This function is called for the base_url links (links you define in the spider configuration file) and for every link extracted from a fetched web page.

This function is a good place to skip links that you are not interested in following. For example, if you know there's no point in requesting images then you can exclude them like:

 
    test_url => sub {
        my $uri = shift;
        return 0 if $uri->path =~ /\.(gif|jpeg|png)$/;
        return 1;
    },

Or to write it another way:

 
    test_url => sub { $_[0]->path !~ /\.(gif|jpeg|png)$/ },

Another feature would be if you were using a web server where path names are NOT case sensitive (e.g. Windows). You can normalize all links in this situation using something like

 
    test_url => sub {
        my $uri = shift;
        return 0 if $uri->path =~ /\.(gif|jpeg|png)$/;

 
        $uri->path( lc $uri->path ); # make all path names lowercase
        return 1;
    },

The important thing about test_url (compared to the other callback functions) is that it is called while extracting links, not while actually fetching that page from the web server. Returning false from test_url simple says to not add the URL to the list of links to spider.

You may set a flag in the server hash (second parameter) to tell the spider to abort processing.

 
    test_url => sub {
        my $server = $_[1];
        $server->{abort}++ if $_[0]->path =~ /foo\.html/;
        return 1;
    },

You cannot use the server flags:

 
    no_contents
    no_index
    no_spider

This is discussed below.

test_response

This function allows you to filter based on the response from the remote server (such as by content-type). This function is called while the web pages is being fetched from the remote server, typically after just enought data has been returned to read the response from the web server.

The spider requests a document in ``chunks'' of 4096 bytes. 4096 is only a suggestion of how many bytes to return in each chunk. The test_response routine is called when the first chunk is received only. This allows ignoring (aborting) reading of a very large file, for example, without having to read the entire file. Although not much use, a reference to this chunk is passed as the forth parameter.

Web servers use a Content-Type: header to define the type of data returned from the server. On a web server you could have a .jpeg file be a web page -- file extensions may not always indicate the type of the file. The third parameter ($_[2]) returned is a reference to a HTTP::Response object:

For example, to only index true HTML (text/html) pages:

 
    test_response => sub {
        my $content_type = $_[2]->content_type;
        return $content_type =~ m!text/html!;
    },

You can also set flags in the server hash (the second parameter) to control indexing:

 
    no_contents -- index only the title (or file name), and not the contents
    no_index    -- do not index this file, but continue to spider if HTML
    no_spider   -- index, but do not spider this file for links to follow
    abort       -- stop spidering any more files

For example, to avoid index the contents of ``private.html'', yet still follow any links in that file:

 
    test_response => sub {
        my $server = $_[1];
        $server->{no_index}++ if $_[0]->path =~ /private\.html$/;
        return 1;
    },

Note: Do not modify the URI object in this call back function.

filter_content

This callback function is called right before sending the content to swish. Like the other callback function, returning false will cause the URL to be skipped. Setting the abort server flag and returning false will abort spidering.

You can also set the no_contents flag.

This callback function is passed four parameters. The URI object, server hash, the HTTP::Response object, and a reference to the content.

You can modify the content as needed. For example you might not like upper case:

 
    filter_content => sub {
        my $content_ref = $_[3];

 
        $$content_ref = lc $$content_ref;
        return 1;
    },

I more reasonable example would be converting PDF or MS Word documents for parsing by swish. Examples of this are provided in the prog-bin directory of the swish-e distribution.

You may also modify the URI object to change the path name passed to swish for indexing.

 
    filter_content => sub {
        my $uri = $_[0];
        $uri->host('www.other.host') ;
        return 1;
    },

Swish-e's ReplaceRules feature can also be used for modifying the path name indexed.

Here's a bit more advanced example of indexing text/html and PDF files only:

 
    use pdf2xml;  # included example pdf converter module
    $server{filter_content} = sub {
       my ( $uri, $server, $response, $content_ref ) = @_;

 
       return 1 if $response->content_type eq 'text/html';
       return 0 unless $response->content_type eq 'application/pdf';

 
       # for logging counts
       $server->{counts}{'PDF transformed'}++;

 
       $$content_ref = ${pdf2xml( $content_ref )};
       return 1;
    }

Note: Swish-e not includes a method of filtering based on the SWISH::Filter Perl modules. See the SwishSpiderConfig.pl file for an example how to use SWISH::Filter in a filter_content callback function.

Note that you can create your own counters to display in the summary list when spidering is finished by adding a value to the hash pointed to by $server-{counts}>.

 
    test_url => sub {
        my $server = $_[1];
        $server->{no_index}++ if $_[0]->path =~ /private\.html$/;
        $server->{counts}{'Private Files'}++;
        return 1;
    },

Each callback function must return true to continue processing the URL. Returning false will cause processing of the current URL to be skipped.

[ TOC ]


More on setting flags

Swish (not this spider) has a configuration directive NoContents that will instruct swish to index only the title (or file name), and not the contents. This is often used when indexing binary files such as image files, but can also be used with html files to index only the document titles.

As shown above, you can turn this feature on for specific documents by setting a flag in the server hash passed into the test_response or filter_content subroutines. For example, in your configuration file you might have the test_response callback set as:

 
    test_response => sub {
        my ( $uri, $server, $response ) = @_;
        # tell swish not to index the contents if this is of type image
        $server->{no_contents} = $response->content_type =~ m[^image/];
        return 1;  # ok to index and spider this document
    }

The entire contents of the resource is still read from the web server, and passed on to swish, but swish will also be passed a No-Contents header which tells swish to enable the NoContents feature for this document only.

Note: Swish will index the path name only when NoContents is set, unless the document's type (as set by the swish configuration settings IndexContents or DefaultContents) is HTML and a title is found in the html document.

Note: In most cases you probably would not want to send a large binary file to swish, just to be ignored. Therefore, it would be smart to use a filter_content callback routine to replace the contents with single character (you cannot use the empty string at this time).

A similar flag may be set to prevent indexing a document at all, but still allow spidering. In general, if you want completely skip spidering a file you return false from one of the callback routines (test_url, test_response, or filter_content). Returning false from any of those three callbacks will stop processing of that file, and the file will not be spidered.

But there may be some cases where you still want to spider (extract links) yet, not index the file. An example might be where you wish to index only PDF files, but you still need to spider all HTML files to find the links to the PDF files.

 
    $server{test_response} = sub {
        my ( $uri, $server, $response ) = @_;
        $server->{no_index} = $response->content_type ne 'application/pdf';
        return 1;  # ok to spider, but don't index
    }

So, the difference between no_contents and no_index is that no_contents will still index the file name, just not the contents. no_index will still spider the file (if it's text/html) but the file will not be processed by swish at all.

Note: If no_index is set in a test_response callback function then the document will not be filtered. That is, your filter_content callback function will not be called.

The no_spider flag can be set to avoid spiderering an HTML file. The file will still be indexed unless no_index is also set. But if you do not want to index and spider, then simply return false from one of the three callback funtions.

[ TOC ]


SIGNALS

Sending a SIGHUP to the running spider will cause it to stop spidering. This is a good way to abort spidering, but let swish index the documents retrieved so far.

[ TOC ]


COPYRIGHT

Copyright 2001 Bill Moseley

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

[ TOC ]


SUPPORT

Send all questions to the The SWISH-E discussion list.

See http://sunsite.berkeley.edu/SWISH-E. [ TOC ]


0[swish-e.html]split.pl##2VLmy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/usr/bin/perl -w use strict; # swish-e -S program to index the HTML docs in sections. my $pat = qr[([^<]+)]i; opendir( DIR, '.' ) || die "Failed to opendir current directory: $!"; while ( my $name = readdir DIR ) { next unless $name =~ /\.html$/; next if $name =~ /^index/; unless ( open( FH, "<$name" ) ) { warn "Failed to open file [$name]\n"; next; } local $/; index_doc( $name, ); } sub index_doc { my ($name, $doc) = @_; my @sections = split /$pat/, $doc; die unless @sections; # Get rid of the first part shift @sections; my ( $title ) = $doc =~ m[([^<]+)]is; $title ||= "Swish-e Documentation"; $title =~ s/^SWISH-Enhanced: //; while ( @sections ) { my ( $section, $sec_text, $text ) = splice( @sections, 0, 3 ); output( $name, $section, $sec_text, $text, $title ); } } sub output { my ( $name, $section, $sec_text, $text, $title ) = @_; my $date = (stat $name)[9]; my $doc = <<EOF; <html><head><title>$title : $sec_text $text EOF my $len = length $doc; print <{SheetCount});  body { /* font-family: helvetica, arial, sans-serif; */ color: #000000; background-color: #ffffff; margin: 1em 4em 0em 2em; } h1, h2, h3 { color: #005A9C; } h1.banner { text-align: center; color: blue; } pre { font-family: courier new, courier, monospace; color: #000000; /* these will screw up Netscape 4.08 */ /* border: solid; */ /* border-color: white white white blue; */ /* border-left: dashed red; */ } code { font-family: courier new, courier, monospace; /* font-size: 100%; */ } div.footer { align: center; padding: .25em; font-size: 10pt; } div.notice { align: center; padding: .25em; border: dashed green; } div.ad { padding: .25em; margin: .25em; border: dashed red; color: #000000; } div.navbar { align: center; padding: .25em; /* border: thin dashed blue; color: blue; */ } div.navbar { text-align: center; } div.navbar a { text-decoration: none; font-family: helvetica, arial, sans-serif; } div.toc a { text-decoration: none; } div.search { text-align: center; padding: .25em; #border: thin dashed blue; # color: blue; } 0[swish-e.html]swish.conf##V2VLmy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); DefaultContents HTML* StoreDescription HTML* MetaNames swishtitle swishdocpath 0[swish-e.html]swish.html02 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); > SWISH-Enhanced: swish.cgi -- Example Perl script for searching with the SWISH-E search engine.

Swish-E Logo


swish.cgi -- Example Perl script for searching with the SWISH-E search engine.


[ TOC ]

DESCRIPTION

swish.cgi is a CGI script for searching with the SWISH-E search engine version 2.1-dev and above. It returns results a page at a time, with matching words from the source document highlighted, showing a few words of content on either side of the highlighted word.

The script is highly configurable. Features include searching multiple (or selectable) indexes, limiting searches to a subset of documents, sorting by a number of different properties, and limiting results to a date range.

On unix type systems the swish.cgi script is installed in the directory $prefix/lib/swish-e, which is typically /usr/local/lib/swish-e. This can be overridden by the configure options --prefix or --libexecdir.

The standard configuration (i.e. not using a config file) should work with most swish index files. Customization of the parameters will be needed if you are indexing special meta data and want to search and/or display the meta data. The configuration can be modified by editing this script directly, or by using a configuration file (.swishcgi.conf by default). The script's configuration file is described below.

You are strongly encouraged to get the default configuration working before making changes. Most problems using this script are the result of configuration modifications.

The script is modular in design. Both the highlighting code and output generation is handled by modules, which are included in the example/modules distribution directory and installed in the $libexecdir/perl directory. This allows for easy customization of the output without changing the main CGI script.

Included with the Swish-e distribution is a module to generate standard HTML output. There's also modules and template examples to use with the popular Perl templating systems HTML::Template and Template-Toolkit. This is very useful if your site already uses one of these templating systems The HTML::Template and Template-Toolkit packages are not distributed with Swish-e. They are available from the CPAN (http://search.cpan.org).

This scipt can also run basically unmodified as a mod_perl handler, providing much better performance than running as a CGI script. Usage under mod_perl is described below.

Please read the rest of the documentation. There's a DEBUGGING section, and a FAQ section.

This script should work on Windows, but security may be an issue.

[ TOC ]


REQUIREMENTS

A reasonably current version of Perl. 5.00503 or above is recommended (anything older will not be supported).

The Date::Calc module is required to use the date range feature of the script. The Date::Calc module is also available from CPAN.

[ TOC ]


INSTALLATION

Here's an example installation session under Linux. It should be similar for other operating systems.

For the sake of simplicity in this installation example all files are placed in web server space, including files such as swish-e index and configuration files that would normally not be made available via the web server. Access to these files should be limited once the script is running. Either move the files to other locations (and adjust the script's configuration) or use features of the web server to limit access (such as with .htaccess).

Please get a simple installation working before modifying the configuration file. Most problems reported for using this script have been due to improper configuration.

The script's default settings are setup for initial testing. By default the settings expect to find most files and the swish-e binary in the same directory as the script.

For security reasons, once you have tested the script you will want to change settings to limit access to some of these files by the web server (either by moving them out of web space, or using access control such as .htaccess). An example of using .htaccess on Apache is given below.

It's expected that swish-e has already been unpacked and the swish-e binary has be compiled from source and ``make install'' has been run. If swish-e was installed from a vendor package (such as from a RPM or Debian package) see that pakage's documentation for where files are installed.

Example Installation:

  1. Symlink or copy the swish.cgi.

    Symlink (or copy if your platform or webserver does not allow symlinks) the swish.cgi script from the installation directory to a local directory. Typically, this would be the cgi-bin directory or a location where CGI script are located. In this example a new directory is created and the script is symlinked.

     
        ~$ mkdir swishdir
        ~$ cd swishdir
        ~/swishdir$ ln -s /usr/local/lib/swish-e/swish.cgi

    The installation directory is set at configure time with the --prefix or --libexecdir options, but by default is in /usr/local/lib/swish-e.

  2. Create an index

    Use an editor and create a simple configuration file for indexing your files. In this example the Apache documentation is indexed. Last we run a simple query to test that the index works correctly.

     
        ~/swishdir$ cat swish.conf
        IndexDir /usr/local/apache/htdocs
        IndexOnly .html .htm
        DefaultContents HTML*
        StoreDescription HTML* <body> 200000
        MetaNames swishdocpath swishtitle
        ReplaceRules remove /usr/local/apache/

    If you do not have the Apache docs installed then pick another directory to index such as /usr/share/doc.

    Create the index.

     
        ~/swishdir$ swish-e -c swish.conf
        Indexing Data Source: "File-System"
        Indexing "/usr/local/apache/htdocs"
        Removing very common words...
        no words removed.
        Writing main index...
        Sorting words ...
        Sorting 7005 words alphabetically
        Writing header ...
        Writing index entries ...
          Writing word text: Complete
          Writing word hash: Complete
          Writing word data: Complete
        7005 unique words indexed.
        5 properties sorted.
        124 files indexed.  1485844 total bytes.  171704 total words.
        Elapsed time: 00:00:02 CPU time: 00:00:02
        Indexing done!

    Now, verify that the index can be searched:

     
        ~/swishdir$ swish-e -w install -m 1
        # SWISH format: 2.1-dev-25
        # Search words: install
        # Number of hits: 14
        # Search time: 0.001 seconds
        # Run time: 0.040 seconds
        1000 htdocs/manual/dso.html "Apache 1.3 Dynamic Shared Object (DSO) support" 17341
        .

    Let's see what files we have in our directory now:

     
        ~/swishdir$ ls -1
        index.swish-e
        index.swish-e.prop
        swish.cgi
        swish.conf

  3. Test the CGI script

    This is a simple step, but often overlooked. You should test from the command line instead of jumping ahead and testing with the web server. See the DEBUGGING section below for more information.

     
        ~/swishdir$ ./swish.cgi | head
        Content-Type: text/html; charset=ISO-8859-1

     
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
            <head>
               <title>
                  Search our site
               </title>
            </head>
            <body>

    The above shows that the script can be run directly, and generates a correct HTTP header and HTML.

    If you run the above and see something like this:

     
        ~/swishdir >./swish.cgi
        bash: ./swish.cgi: No such file or directory

    then you probably need to edit the script to point to the correct location of your perl program. Here's one way to find out where perl is located (again, on unix):

     
        ~/swishdir$ which perl
        /usr/local/bin/perl

     
        ~/swishdir$ /usr/local/bin/perl -v   
        This is perl, v5.6.0 built for i586-linux
        ...

    Good! We are using a reasonably current version of perl.

    Now that we know perl is at /usr/local/bin/perl we can adjust the ``shebang'' line in the perl script (e.g. the first line of the script):

     
        ~/swishdir$ pico swish.cgi
        (edit the #! line)
        ~/swishdir$ head -1 swish.cgi
        #!/usr/local/bin/perl -w

  4. Test with the web server

    How you do this is completely dependent on your web server, and you may need to talk to your web server admin to get this working. Often files with the .cgi extension are automatically set up to run as CGI scripts, but not always. In other words, this step is really up to you to figure out!

    This example shows creating a symlink from the web server space to the directory used above. This will only work if the web server is configured to follow symbolic links (the default for Apache).

    This operation requires root access:

     
        ~/swishdir$ su -c "ln -s $HOME/swishdir /usr/local/apache/htdocs/swishdir"
        Password: *********

    If your account is on an ISP and your web directory is ~/public_html the you might just move the entire directory:

     
        mv ~/swishdir ~/public_html

    Now, let's make a real HTTP request:

     
        ~/swishdir$ GET http://localhost/swishdir/swish.cgi | head -3
        #!/usr/local/bin/perl -w
        package SwishSearch;
        use strict;

    Oh, darn. It looks like Apache is not running the script and instead returning it as a static page. Apache needs to be told that swish.cgi is a CGI script.

    .htaccess comes to the rescue:

     
        ~/swishdir$ cat .htaccess 

     
        # Deny everything by default
        Deny From All

     
        # But allow just CGI script
        <files swish.cgi>
            Options ExecCGI
            Allow From All
            SetHandler cgi-script
        </files>

    That ``Deny From All'' prevents access to all files (such as config and index files), and only access is allowed to the swish.cgi script.

    Let's try the request one more time:

     
        ~/swishdir >GET http://localhost/swishdir/swish.cgi | head
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
            <head>
               <title>
                  Search our site
               </title>
            </head>
            <body>
                <h2>
                <>a href="http://swish-e.org">

    That looks better! Now use your web browser to test.

    Now, you may note that the links are not valid on the search results page. The swish config file contained the line:

     
         ReplaceRules remove /usr/local/apache/

    To make those links works (and assuming your web server will follow symbolic links):

     
        ~/swishtest$ ln -s /usr/local/apache/htdocs

    BTW - ``GET'' used above is a program included with Perl's LWP library. If you do no have this you might try something like:

     
        wget -O - http://localhost/swishdir/swish.cgi | head

    and if nothing else, you can always telnet to the web server and make a basic request.

     
        ~/swishtest$ telnet localhost 80
        Trying 127.0.0.1...
        Connected to localhost.
        Escape character is '^]'.
        GET /swishtest/swish.cgi http/1.0

     
        HTTP/1.1 200 OK
        Date: Wed, 13 Feb 2002 20:14:31 GMT
        Server: Apache/1.3.20 (Unix) mod_perl/1.25_01
        Connection: close
        Content-Type: text/html; charset=ISO-8859-1

     
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
            <head>
               <title>
                  Search our site
               </title>
            </head>
            <body>

    This may seem like a lot of work compared to using a browser, but browsers are a poor tool for basic CGI debugging.

If you have problems check the DEBUGGING section below.

[ TOC ]


CONFIGURATION

If you want to change the location of the swish-e binary or the index file, use multiple indexes, add additional metanames and properties, change the default highlighting behavior, etc., you will need to adjust the script's configuration settings.

Again, please get a test setup working with the default parameters before making changes to any configuration settings. Better to debug one thing at a time...

In general, you will need to adjust the script's settings to match the index file you are searching. For example, if you are indexing a hypermail list archive you may want to make the script use metanames/properties of Subject, Author, and, Email address. Or you may wish to provide a way to limit searches to subsets of documents (e.g. parts of your directory tree).

To make things somewhat ``simple'', the configuration parameters are included near the top of the swish.cgi program. That is the only place that the individual parameters are defined and explained, so you will need to open up the swish.cgi script in an editor to view the options. Further questions about individual settings should be referred to the swish-e discussion list.

The parameters are all part of a perl hash structure, and the comments at the top of the program should get you going. The perl hash structure may seem a bit confusing, but it makes it easy to create nested and complex parameters. Syntax is important, so cut-n-paste should be your best defense if you are not a perl programmer.

By the way, Perl has a number of quote operators. For example, to quote a string you might write:

 
    title => 'Search My Site',

Some options take more than one parameter, where each parameter must be quoted. For example:

 
    metanames => [ 'swishdefault', 'swishtitle',  'swishdocpath' ],

which assigns an array ( [...] ) of three strings to the ``metanames'' variable. Lists of quoted strings are so common in perl that there's a special operator called ``qw'' (quote word) to save typing all those quotes:

 
    metanames => [ qw/ swishdefault swishtitle swishdocpath / ],

or to use the parenthesis as the quote character (you can pick any):

 
    metanames => [ qw( swishdefault swishtitle swishdocpath ) ],

There are two options for changing the configuration settings from their default values: One way is to edit the script directly, or the other was is to use a separate configuration file. In either case, the configuration settings are a basic perl hash reference.

Using a configuration file is described below, but contains the same hash structure.

There are many configuration settings, and some of them are commented out either by using a ``#'' symbol, or by simply renaming the configuration directive (e.g. by adding an ``x'' to the parameter name).

A very basic configuration setup might look like:

 
    return {
        title           => 'Search the Swish-e list',   # Title of your choice.
        swish_binary    => 'swish-e',                   # Location of swish-e binary
        swish_index     => 'index.swish-e',             # Location of your index file
    };

Or if searching more than one index:

 
    return {
        title           => 'Search the Swish-e list',
        swish_binary    => 'swish-e',
        swish_index     => ['index.swish-e', 'index2'],
    };

Both of these examples return a reference to a perl hash ( return {...} ). In the second example, the multiple index files are set as an array reference.

Note that in the example above the swish-e binary file is relative to the current directory. If running under mod_perl you will need to use absolute paths.

The script can also use the SWISH::API perl module (included with the swish-e distribution in the perl directory) to access the swish-e index. The use_library option is used to enable the use of the SWISH::API module:

 
    return {
        title           => 'Search the Swish-e list',
        swish_index     => ['index.swish-e', 'index2'],
        use_library     => 1, # enable use of the SWISH::API module
    };

The module must be available via the @INC array, like all Perl modules.

Using the SWISH::API module avoids the need to fork and execute a the swish-e program. Under mod_perl you will may see a significant performance improvement when using the SWISH::API module. Under normal CGI usage you will probably not see any speed improvements.

Using A Configuration File

As mentioned above, configuration settings can be either set in the swish.cgi script, or set in a separate configuration file. Settings in a configuration file will override the settings in the script.

By default, the swish.cgi script will attempt to read settings from the file .swishcgi.conf. For example, you might only wish to change the title used in the script. Simply create a file called .swishcgi.conf in the same directory as the CGI script:

 
    > cat .swishcgi.conf
    # Example swish.cgi configuration script.
    return {
       title => 'Search Our Mailing List Archive',
    };

The settings you use will depend on the index you create with swish:

 
   return {
        title           => 'Search the Apache documentation',
        swish_binary    => 'swish-e',
        swish_index     => 'index.swish-e',
        metanames       => [qw/swishdefault swishdocpath swishtitle/],
        display_props   => [qw/swishtitle swishlastmodified swishdocsize swishdocpath/],
        title_property  => 'swishdocpath',
        prepend_path    => 'http://myhost/apachedocs', 

 
        name_labels => {
            swishdefault        => 'Search All',
            swishtitle          => 'Title',
            swishrank           => 'Rank',
            swishlastmodified   => 'Last Modified Date',
            swishdocpath        => 'Document Path',
            swishdocsize        => 'Document Size',
        },

 
    };

The above configuration defines metanames to use on the form. Searches can be limited to these metanames.

``display_props'' tells the script to display the property ``swishlastmodified'' (the last modified date of the file), the document size, and path with the search results.

The parameter ``name_labels'' is a hash (reference) that is used to give friendly names to the metanames.

Here's another example. Say you want to search either (or both) the Apache 1.3 documentation and the Apache 2.0 documentation indexed seperately.

 
    return {
       title       => 'Search the Apache Documentation',
       date_ranges => 0,
       swish_index => [ qw/ index.apache index.apache2 / ],
       select_indexes  => {
            method  => 'checkbox_group',
            labels  => [ '1.3.23 docs', '2.0 docs' ],  # Must match up one-to-one to swish_index
            description => 'Select: ',
        },

 
    };

Now you can select either or both sets of documentation while searching.

All the possible settings are included in the default configuration located near the top of the swish.cgi script. Open the swish.cgi script with an editor to look at the various settings. Contact the Swish-e Discussion list for help in configuring the script.

[ TOC ]


DEBUGGING

Most problems with using this script have been a result of improper configuration. Please get the script working with default settings before adjusting the configuration settings.

The key to debugging CGI scripts is to run them from the command line, not with a browser.

First, make sure the program compiles correctly:

 
    $ perl -c swish.cgi
    swish.cgi syntax OK

Next, simply try running the program:

 
    $ ./swish.cgi | head
    Content-Type: text/html; charset=ISO-8859-1

 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
           <title>
              Search our site
           </title>
        </head>
        <body>

Under Windows you will need to run the script as:

 
   C:\wwwroot\swishtest> perl swish.cgi

Now, you know that the program compiles and will run from the command line. Next, try accessing the script from a web browser.

If you see the contents of the CGI script instead of its output then your web server is not configured to run the script. With Apache look at settings like ScriptAlias, SetHandler, and Options.

If an error is reported (such as Internal Server Error or Forbidden) you need to locate your web server's error_log file and carefully read what the problem is. Contact your web administrator for help locating the web server's error log.

If you don't have access to the web server's error_log file, you can modify the script to report errors to the browser screen. Open the script and search for ``CGI::Carp''. (Author's suggestion is to debug from the command line -- adding the browser and web server into the equation only complicates debugging.)

The script does offer some basic debugging options that allow debugging from the command line. The debugging options are enabled by setting an environment variable ``SWISH_DEBUG''. How that is set depends on your operating system and the shell you are using. These examples are using the ``bash'' shell syntax.

Note: You can also use the ``debug_options'' configuration setting, but the recommended method is to set the environment variable.

You can list the available debugging options like this:

 
    $ SWISH_DEBUG=help ./swish.cgi >outfile
    Unknown debug option 'help'.  Must be one of:
           basic: Basic debugging
         command: Show command used to run swish
         headers: Show headers returned from swish
          output: Show output from swish
         summary: Show summary of results
            dump: Show all data available to templates

Debugging options may be combined:

 
    $ SWISH_DEBUG=command,headers,summary ./swish.cgi >outfilere>
        

You will be asked for an input query and the max number of results to return. You can use the defaults in most cases. It's a good idea to redirect output to a file. Any error messages are sent to stderr, so those will still be displayed (unless you redirect stderr, too).

Here are some examples:

 
    ~/swishtest$ SWISH_DEBUG=basic ./swish.cgi >outfile
    Debug level set to: 1
    Enter a query [all]: 
    Using 'not asdfghjklzxcv' to match all records
    Enter max results to display [1]: 

 
    ------ Can't use DateRanges feature ------------

 
    Script will run, but you can't use the date range feature
    Can't locate Date/Calc.pm in @INC (@INC contains: modules /usr/local/lib/perl5/5.6.0/i586-linux /usr/local/lib/perl5/5.6.0 /usr/local/lib/perl5/site_perl/5.6.0/i586-linux /usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl/5.005/i586-linux /usr/local/lib/perl5/site_perl/5.005 /usr/local/lib/perl5/site_perl .) at modules/DateRanges.pm line 107, <STDIN> line 2.
    BEGIN failed--compilation aborted at modules/DateRanges.pm line 107, <STDIN> line 2.
    Compilation failed in require at ./swish.cgi line 971, <STDIN> line 2.

 
    --------------
    Can't exec "./swish-e": No such file or directory at ./swish.cgi line 1245, <STDIN> line 2.
    Child process Failed to exec './swish-e' Error: No such file or directory at ./swish.cgi line 1246, <STDIN> line 2.
    Failed to find any results

The above indicates two problems. First problem is that the Date::Calc module is not installed. The Date::Calc module is needed to use the date limiting feature of the script.

The second problem is a bit more serious. It's saying that the script can't find the swish-e binary file. In this example it's specified as being in the current directory. Either correct the path to the swish-e binary, or make a local copy or symlink to the swish-e binary.

 
    ~/swishtest$ cat .swishcgi.conf
        return {
           title       => 'Search the Apache Documentation',
           swish_binary => '/usr/local/bin/swish-e',
           date_ranges => 0,
        };

Now, let's try again:

 
    ~/swishtest$ SWISH_DEBUG=basic ./swish.cgi >outfile
    Debug level set to: 1

 
    ---------- Read config parameters from '.swishcgi.conf' ------
    $VAR1 = {
              'date_ranges' => 0,
              'title' => 'Search the Apache Documentation'
            };
    -------------------------
    Enter a query [all]: 
    Using 'not asdfghjklzxcv' to match all records
    Enter max results to display [1]: 
    Found 1 results

 
    Can't locate SWISH::TemplateDefault.pm in @INC (@INC contains: modules /usr/local/lib/perl5/5.6.0/i586-linux /usr/local/lib/perl5/5.6.0 /usr/local/lib/perl5/site_perl/5.6.0/i586-linux /usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl/5.005/i586-linux /usr/local/lib/perl5/site_perl/5.005 /usr/local/lib/perl5/site_perl .) at ./swish.cgi line 608.

This means that the swish.cgi script could not locate a required module. To correct this locate where the SWISH::Template module is installed and add a ``use lib'' line to your configuration file (or to the swish.cgi script):

 
    ~/swishtest$ cat .swishcgi.conf
    use lib '/home/bill/local/lib/perl';

 
    return {
       title       => 'Search the Apache Documentation',
       date_ranges => 0,
    };

 
    ~/swishtest$ SWISH_DEBUG=basic ./swish.cgi >outfile
    Debug level set to: 1

 
    ---------- Read config parameters from '.swishcgi.conf' ------
    $VAR1 = {
              'date_ranges' => 0,
              'title' => 'Search the Apache Documentation'
            };
    -------------------------
    Enter a query [all]: 
    Using 'not asdfghjklzxcv' to match all records
    Enter max results to display [1]: 
    Found 1 results

That is much better!

The ``use lib'' statement tells Perl where to look for modules by adding the path supplied to an array called @INC.

Note that most modules are in the SWISH namespace. For example, the default output module is called SWISH::TemplateDefault. When Perl is looking for that module it is looking for the file SWISH/TemplateDefault.pm. If the ``use lib'' statement is set as:

 
    use lib '/home/bill/local/lib/perl';

then Perl will look (among other places) for the file

 
    /home/bill/local/lib/perl/SWISH/TemplateDefault.pm

when attempting to load the SWISH::TemplateDefault module. Relative paths may also be used.

 
    use lib 'modules';

will cause Perl to look for the file:

 
    ./modules/SWISH/TemplateDefault.pm

relative to where the swish.cgi script is running. (This is not true when running under mod_perl).

Here's another common problem. Everything checks out, but when you run the script you see the message:

 
    Swish returned unknown output

Ok, let's find out what output it is returning:

 
    ~/swishtest$ SWISH_DEBUG=headers,output ./swish.cgi >outfile
    Debug level set to: 13

 
    ---------- Read config parameters from '.swishcgi.conf' ------
    $VAR1 = {
              'swish_binary' => '/usr/local/bin/swish-e',
              'date_ranges' => 0,
              'title' => 'Search the Apache Documentation'
            };
    -------------------------
    Enter a query [all]: 
    Using 'not asdfghjklzxcv' to match all records
    Enter max results to display [1]: 
      usage: swish [-i dir file ... ] [-S system] [-c file] [-f file] [-l] [-v (num)]
      ...
    version: 2.0
       docs: http://sunsite.berkeley.edu/SWISH-E/

 
    *** 9872 Failed to run swish: 'Swish returned unknown output' ***
    Failed to find any results

Oh, looks like /usr/local/bin/swish-e is version 2.0 of swish. We need 2.1-dev and above!

[ TOC ]


Frequently Asked Questions

Here's some common questions and answers.

[ TOC ]


How do I change the way the output looks?

The script uses a module to generate output. By default it uses the SWISH::TemplateDefault.pm module. The module used is selected in the swish.cgi configuration file. Modules are located in the example/modules/SWISH directory in the distribution, but are installed in the $prefix/lib/swish-e/perl/SWISH/ directory.

To make simple changes you can edit the installed SWISH::TemplatDefault module directly, otherwise make a copy of the module and modify its package name. For example, change directories to the location of the installed module and copy the module to a new name:

 
    $ cp TemplateDefault.pm MyTemplateDefault.pm

Then at the top of the module adjust the ``package'' line to:

 
    package SWISH::MyTemplateDefault;

To use this modules you need to adjust the configuration settings (either at the top of swish.cgi or in a configuration file:

 
        template => {
            package     => 'SWISH::MyTemplateDefault',
        },

The module does not need to be in the SWISH namespace, and can be stored in any location as long as the module can be found via the @INC array (i.e. modify the ``use lib'' statement in swish.cgi if needed).

[ TOC ]


How do I use a templating system with swish.cgi?

In addition to the TemplateDefault.pm module, the swish-e distribution includes two other Perl modules for generating output using the templating systems HTML::Template and Template-Toolkit.

Templating systems use template files to generate the HTML, and make maintaining the look of a large (or small) site much easier. HTML::Template and Template-Toolkit are separate packages and can be downloaded from the CPAN. See http://search.cpan.org.

Two basic templates are provided as examples for generating output using these templating systems. The example templates are located in the example directory. The module SWISH::TemplateHTMLTemplate uses the file swish.tmpl to generate its output, while the module SWISH::TemplateToolkit uses the search.tt file.

To use either of these modules you will need to adjust the ``template'' configuration setting. Examples for both templating systems are provided in the configuration settings near the top of the swish.cgi program.

Use of these modules is an advanced usage of swish.cgi and are provided as examples only.

All of the output generation modules are passed a hash with the results from the search, plus other data use to create the output page. You can see this hash by using the debugging option ``dump'' or by using the included SWISH::TemplateDumper module:

 
    ~/swishtest >cat .swishcgi.conf 
        return {
           title       => 'Search the Apache Documentation',
           template => {
                package     => 'SWISH::TemplateDumper',
            },
        };

And run a query. For example:

 
    http://localhost/swishtest/swish.cgi?query=install

[ TOC ]


Why are there three different highlighting modules?

Three are three highlighting modules included with the swish-e distribution. Each is a trade-off of speed vs. accuracy:

 
    SWISH::DefaultHighlight - reasonably fast, but does not highlight phrases
    SWISH::PhraseHighlight  - reasonably slow, but is reasonably accurate
    SWISH::SimpleHighlight  - fast, some phrases, but least accurate

Eh, the default is actually ``PhraseHighlight''. Oh well.

All of the highlighting modules slow down the script. Optimizations to these modules are welcome!

[ TOC ]


My ISP doesn't provide access to the web server logs

There are a number of options. One way it to use the CGI::Carp module. Search in the swish.cgi script for:

 
    use Carp;
    # Or use this instead -- PLEASE see perldoc CGI::Carp for details
    # use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

And change it to look like:

 
    #use Carp;
    # Or use this instead -- PLEASE see perldoc CGI::Carp for details
    use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

This should be only for debugging purposes, as if used in production you may end up sending quite ugly and confusing messages to your browsers.

[ TOC ]


Why does the output show (NULL)?

Swish-e displays (NULL) when attempting to display a property that does not exist in the index.

The most common reason for this message is that you did not use StoreDescription in your config file while indexing.

 
    StoreDescription HTML* <body> 200000
>

That tells swish to store the first 200,000 characters of text extracted from the body of each document parsed by the HTML parser. The text is stored as property ``swishdescription''.

The index must be recreated after changing the swish-e configuration.

Running:

 
    ~/swishtest > ./swish-e -T index_metanames

will display the properties defined in your index file.

This can happen with other properties, too. For example, this will happen when you are asking for a property to display that is not defined in swish.

 
    ~/swishtest > ./swish-e -w install -m 1 -p foo   
    # SWISH format: 2.1-dev-25
    # Search words: install
    err: Unknown Display property name "foo"
    .

 
    ~/swishtest > ./swish-e -w install -m 1 -x 'Property foo=<foo>\n'
    # SWISH format: 2.1-dev-25
    # Search words: install
    # Number of hits: 14
    # Search time: 0.000 seconds
    # Run time: 0.038 seconds
    Property foo=(NULL)
    .

To check that a property exists in your index you can run:

 
    ~/swishtest > ./swish-e -w not dkdk -T index_metanames | grep foo
            foo : id=10 type=70  META_PROP:STRING(case:ignore) *presorted*

Ok, in this case we see that ``foo'' is really defined as a property. Now let's make sure swish.cgi is asking for ``foo'' (sorry for the long lines):

 
    ~/swishtest > SWISH_DEBUG=command ./swish.cgi > /dev/null
    Debug level set to: 3
    Enter a query [all]: 
    Using 'not asdfghjklzxcv' to match all records
    Enter max results to display [1]: 
    ---- Running swish with the following command and parameters ----
    ./swish-e  \
    -w  \
    'swishdefault=(not asdfghjklzxcv)'  \
    -b  \
    1  \
    -m  \
    1  \
    -f  \
    index.swish-e  \
    -s  \
    swishrank  \
    desc  \
    swishlastmodified  \
    desc  \
    -x  \
    '<swishreccount>\t<swishtitle>\t<swishdescription>\t<swishlastmodified>\t<swishdocsize>\t<swishdocpath>\t<fos>\t<swishrank>\t<swishdocpath>\n'  \
    -H  \
    9

If you look carefully you will see that the -x parameter has ``fos'' instead of ``foo'', so there's our problem.

[ TOC ]


How do I use the SWISH::API perl module with swish.cgi?

Use the use_library configuration directive:

 
    use_library => 1,

This will only provide improved performance when running under mod_perl or other persistent environments.

[ TOC ]


Why does the "Run time" differ when using the SWISH::API module

When using the SWISH::API module the run (and search) times are calculated within the script. When using the swish-e binary the swish-e program reports the times. The ``Run time'' may include the time required to load and compile the SWISH::API module.

[ TOC ]


MOD_PERL

This script can be run under mod_perl (see http://perl.apache.org). This will improve the response time of the script compared to running under CGI by loading the swish.cgi script into the Apache web server.

You must have a mod_perl enabled Apache server to run this script under mod_perl.

Configuration is simple. In your httpd.conf or your startup.pl file you need to load the script. For example, in httpd.conf you can use a perl section:

 
    <perl>
        use lib '/usr/local/apache/cgi-bin';  # location of the swish.cgi file
        use lib '/home/yourname/swish-e/example/modules';  # modules required by swish.cgi
        require "swish.cgi";
    </perl>

Again, note that the paths used will depend on where you installed the script and the modules. When running under mod_perl the swish.cgi script becomes a perl module, and therefore the script does not need to be installed in the cgi-bin directory. (But, you can actually use the same script as both a CGI script and a mod_perl module at the same time, read from the same location.)

The above loads the script into mod_perl. Then to configure the script to run add this to your httpd.conf configuration file:

 
    <location /search>
        PerlSetVar Swish_Conf_File /home/yourname/swish-e/myconfig.pl
        allow from all
        SetHandler perl-script
        PerlHandler SwishSearch
    </location>

Note that you use the ``Swish_Conf_File'' setting in httpd.conf to tell the script which config file to use. This means you can use the same script (and loaded modules) for different search sites (running on the same Apache server). You can just specify differnt config files for each Location and they can search different indexes and have a completely different look for each site, but all share the same code.

Note that the config files are cached in the swish.cgi script. Changes to the config file will require restarting the Apache server before they will be reloaded into the swish.cgi script. This avoids calling stat() for every request.

Unlike CGI, mod_perl does not change the current directory to the location of the script, so your settings for the swish binary and the path to your index files must be absolute paths (or relative to the server root).

Using the SWISH::API module with mod_perl will provide the most performance improvements. Use of the SWISH::API module can be enabled by the configuration setting use_library:

 
    use_library     => 1,

Without highlighting code enabled, using the SWISH::API module resulted in about 20 requests per second, where running the swish-e binary slowed the script down to about 8 requests per second.

Note that the highlighting code is slow. For the best search performance turn off highlighting. In your config file you can add:

 
    highlighting    => 0,  # disable highlighting

and the script will show the first 500 chars of the description (or whatever you set for ``max_chars''). Without highlight one test was processing about 20 request per second. With The ``PhraseHighlight'' module that dropped to a little better than two requests per second, ``DefaultHighlight'' was about 2.3 request per second, and ``SimpleHighlight'' was about 6 request per second.

Experiement with different highlighting options when testing performance.

Please post to the swish-e discussion list if you have any questions about running this script under mod_perl.

Here's some general request/second on an Athlon XP 1800+ with 1/2GB RAM, Linux 2.4.20.

 
                              Highlighting Mode

 
                      None     Phrase    Default     Simple
   Using SWISH::API   45        1.5        2          12
   ----------------------------------------------------------------------------
   Using swish-e      12        1.3       1.8         7.5
     binary

As you can see the highlighting code is a limiting factor.

[ TOC ]


SpeedyCGI

SpeedyCGI (also called PersistentPerl) is another way to run Perl scripts persistently. SpeedyCGI is good if you do not have mod_perl available or do not have root access. SpeedyCGI works on Unix systems by loading the script into a ``back end'' process and keeping it in memory between requests. New requests are passed to the back end processes which avoids the startup time required by a Perl CGI script.

Install SpeedyCGI from http://daemoninc.com/ (your OS may provide a packaged version of SpeedyCGI) and then change the first line of swish.cgi. For example, if the speedy binary is installed in /usr/bin/speedy, use the line:

 
    #! /usr/bin/speedy -w -- -t60

The -w option is passed to Perl, and all options following the double-dash are SpeedyCGI options.

Note that when using SpeedyCGI configuration data is cached in memory. If you change the swish.cgi configuration file (.swishcgi.conf) then touch the main swish.cgi script to force reloading of configuration data.

[ TOC ]


Spidering

There are two ways to spider with swish-e. One uses the ``http'' input method that uses code that's part of swish. The other way is to use the new ``prog'' method along with a perl helper program called spider.pl.

Here's an example of a configuration file for spidering with the ``http'' input method. You can see that the configuration is not much different than the file system input method. (But, don't use the http input method -- use the -S prog method shown below.)

 
    # Define what to index
    IndexDir http://www.myserver.name/index.html
    IndexOnly .html .htm

 
    IndexContents HTML* .html .htm
    DefaultContents HTML*
    StoreDescription HTML* <body> 200000
    MetaNames swishdocpath swishtitle

 
    # Define http method specific settings -- see swish-e documentation
    SpiderDirectory ../swish-e/src/
    Delay 0

You index with the command:

 
    swish-e -S http -c spider.conf

Note that this does take longer. For example, spidering the Apache documentation on a local web server with this method took over a minute, where indexing with the file system took less than two seconds. Using the ``prog'' method can speed this up.

Here's an example configuration file for using the ``prog'' input method:

 
    # Define the location of the spider helper program
    IndexDir ../swish-e/prog-bin/spider.pl

 
    # Tell the spider what to index.
    SwishProgParameters default http://www.myserver.name/index.html

 
    IndexContents HTML* .html .htm
    DefaultContents HTML*
    StoreDescription HTML* <body> 200000
    MetaNames swishdocpath swishtitle

Then to index you use the command:

 
    swish-e -c prog.conf -S prog -v 0

Spidering with this method took nine seconds.

[ TOC ]


Stemmed Indexes

Many people enable a feature of swish called word stemming to provide ``fuzzy'' search options to their users. The stemming code does not actually find the ``stem'' of word, rather removes and/or replaces common endings on words. Stemming is far from perfect, and many words do not stem as you might expect. Plus, currently only English is supported. But, it can be a helpful tool for searching your site. You may wish to create both a stemmed and non-stemmed index, and provide a checkbox for selecting the index file.

To enable a stemmed index you simply add to your configuration file:

 
    UseStemming yes

If you want to use a stemmed index with this program and continue to highlight search terms you will need to install a perl module that will stem words. This section explains how to do this.

The perl module is included with the swish-e distribution. It can be found in the examples directory (where you found this file) and called something like:

 
    SWISH-Stemmer-0.05.tar.gz

The module should also be available on CPAN (http://search.cpan.org/).

Here's an example session for installing the module. (There will be quite a bit of output when running make.)

 
    % gzip -dc SWISH-Stemmer-0.05.tar.gz |tar xof -
    % cd SWISH-Stemmer-0.05
    % perl Makefile.PL
    or
    % perl Makefile.PL PREFIX=$HOME/perl_lib
    % make
    % make test

 
    (perhaps su root at this point if you did not use a PREFIX)
    % make install
    % cd ..
<P> Use the PREFIX if you do not have root access or you want to install the modules in a local library. If you do use a PREFIX setting, add a use lib statement to the top of this swish.cgi program.

For example:

 
    use lib qw(
        /home/bmoseley/perl_lib/lib/site_perl/5.6.0
        /home/bmoseley/perl_lib/lib/site_perl/5.6.0/i386-linux/
    );

Once the stemmer module is installed, and you are using a stemmed index, the swish.cgi script will automatically detect this and use the stemmer module.

[ TOC ]


DISCLAIMER

Please use this CGI script at your own risk.

This script has been tested and used without problem, but you should still be aware that any code running on your server represents a risk. If you have any concerns please carefully review the code.

See http://www.w3.org/Security/Faq/www-security-faq.html

Security on Windows questionable.

[ TOC ]


SUPPORT

The SWISH-E discussion list is the place to ask for any help regarding SWISH-E or this example script. See http://swish-e.org.

Before posting please review:

 
    http://swish-e.org/2.2/docs/INSTALL.html#When_posting_please_provide_the_

Please do not contact the author or any of the swish-e developers directly.

[ TOC ]


LICENSE

swish.cgi $Revision: 1.13.2.2 $ Copyright (C) 2001 Bill Moseley search@hank.org Example CGI program for searching with SWISH-E

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

[ TOC ]


AUTHOR

Bill Moseley [ TOC ]


0[swish-e.html]timestamp.2 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); 0wish-e.lib]LIBSWISH-E.OLBE?EZFڎ]$iNَ]"> >y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >% Librarian A09-22=Qَ];pَ]!>?987BBq# DAddAnEBuildTranslateCharsClearInMetaFlagsClearLimitParams0Compare_PropertiesuzCompressCurrentLocEntry D ContainsVowel\CreatePropSortArray0CreatePropertyDB_CheckFileNumDB_CheckFileNum_NativeDB_CloseDB_Close_Native DB_CreateDB_Create_NativeDB_EndReadHeaderDB_EndReadHeader_NativeDB_EndReadSortedIndexndReadWords_NativeDB_EndWriteHeader_NativeDB_EndWriteSortedIndex_Nativez#! apibashcheckuzcompress; date_time db_nativedb_readdb_write0docprop  docprop_writeSdouble_metaphone"dump]$entities$errorKextprogfile4Pfilter fsD@hashheaders html dhttpC httpserver$indexC keychar_outPlisto memmergeodsYPparse_conffileY Nparser\pre_sort proplimit ramdiskrank result_output~xmlKinitModule_ProginitModule_ResultOutput\initModule_ResultSort2initModule_Swish_WordsinitPrintExtResultinitSearchResultProperties\initStrCaseCmpTranslationTable\initStrCmpTranslationTableinit_file_prop_settingsinit_file_propertiesP init_headerinit_property_listinsert_sinsert_vD@int_hashisDontBumpMetaNameisMetaNameOpNext$is_location_fullsnumstring isoksuffix  isoktitleDB_EndReadSortedIndex&DB_EndWriteSortedIndex_NativeDB_InitWriteHeader_NativeDB_ReadNextWordInvertedIndex%DB_ReadWordData_NativeDB_WriteHeaderData_NativeDecodeDocProperty( FilterOpenMem_ZoneCreatePACKLONGResultsSetRefPtr SwishError SwishNextResult SwishSeekResult XML_ExternalEntityParserCreate/XML_GetIdAttributeIndex24l8$, addMetaEntry!add_position_location_position_locationgget_next_path_element getconfvalueYP getdefaults getdoctype$getentry$ getfilecount getfilewordsgetrankC getserverinfogetsizeYPgrabCmdOptionshasResultExtFmtStrhasdescription4P hasfilterD@hash dhttp_already_indexed dhttp_indexpath\iTranslationTableExceptionsicomp2 in_grouping in_grouping_bin_range in_range_b indexpath$ indexstring initModule_DBdex|'uzfour_bit_bytesuzfour_bit_calleduzfour_bit_count0freeDocPropertiesfreeMetaEntries freeModule_DBfreeModule_DBNative]$freeModule_Entities  freeModule_FS4PfreeModule_Filter dfreeModule_HTTP$freeModule_IndexKfreeModule_ProgfreeModule_ResultOutput\freeModule_ResultSort2freeModule_Swish_WordsfreeResultPropValuefreeStringListYPfreeSwishConfigOptionsYPfree_Extracted_Pathfreeswline' comma_longcompare_results  compfilenamesuz compress1uz compress3uzcompress_location_positionsuzcompress_location_valuesuzcompress_worddata]$configModule_Entities configModule_FS4PconfigModule_Filter dconfigModule_HTTP$configModule_IndexKconfigModule_ProgconfigModule_ResultOutput\configModule_ResultSort countwords_HTMLcountwords_TXT~countwords_XML Dcreate_fuzzy_structinelush_stream'4add_regex_patterns4add_regular_expression4add_replace_expression dadd_urlD@add_word_to_hash_table add_worddata$addentryP addindexfileP addswline$adjustWordPositions$alloc_location0allocatePropIOBuffer0append_property assign_toD@bighashD@ bignumhash bin2stringbuild_worddataccompcharDecode_C_Escapeata$coalesce_all_word_locations$coalesce_word_locationsr SwishSetQuery(SwishSetRefPtrSwishSetSearchLimit SwishSetSortSwishSetStructure D SwishStemWord(SwishWordsByLetter;TimeCPU; TimeElapsedTranslateCharsuz UNPACKLONGuz UNPACKLONG2 DWordSize WritePropertiesToDisk` XML_DefaultCurrent` XML_ErrorString` XML_ExternalEntityParserCreate  XML_GetBuffer` XML_GetCurrentLineNumber` XML_GetErrorCode` XML_GetIdAttributeIndexXML_SetCharacterDataHandlero read_worddata dreadlinereadlongk 6regcompk 6regerrork 6regexeck 6regfreeremove_newlines remove_tagsuzremove_worddata_longsreplace replace_s$reset_lasterrorresultHeaderOut\russian_close_env\russian_create_env\ russian_stemsetTotalWordsPerFile$set_error_handle_mode$ set_progerr$ set_progerrnosetlimit_paramsuz sizeofcompint\sortFileProperties$ sort_words5SwishParsedWordsSwishPhraseDelimiter SwishQuerySwishRemovedStopwordsSwishResetSearchLimitSwishResultIndexValue0SwishResultPropertyStr0SwishResultPropertyULongSwishResult_parentSwishResults_parentSwishSearch_parentSwishSeekResultu$SwishErrorString$SwishErrorsToStderr SwishExecute DSwishFuzzyMode DSwishFuzzyWord DSwishFuzzyWordCount DSwishFuzzyWordError DSwishFuzzyWordFree DSwishFuzzyWordListSwishHeaderNamesSwishHeaderValue SwishHitsSwishIndexNames( SwishInit$SwishLastErrorMsg(SwishNewSwishNextResultY!  SN_close_env!  SN_create_env! SN_set_currentSW_ResultToSW_HANDLESW_ResultsToSW_HANDLEuz SW_compress2 SafeMemCopy SafeStrCopySSetAtS SlavoGermanicSStringAtStringListToString$SwishAbortLastError( SwishAttach( SwishClose$SwishCriticalError$ SwishErrorgetMetaNameByIDgetMetaNameByNamegetMetaNameByNameNoAlias$getNumberOfIgnoreLimitWords$getPositionsFromIgnoreL39lunrk$getPropNameByIDgetPropNameByNamegetPropNameByNameNoAlias0getResultPropAsString0getResultPropValue; getTheDateISOgetTotalWordsPerFileYPgetYesNoOrAbort; get_cpu_secs Dget_fuzzy_mode get_libexecuz PACKLONG2Prepare_PropLookup0ReadAllDocPropertiesFromDisk0ReadSingleDocPropertiesFromDisk D RemoveAnE D ReplaceEndResultsSetRefPtrcnorwegian_close_envcnorwegian_create_envcnorwegian_stemuznot_fouruznot_four_bytesD@numhash out_groupingout_grouping_b out_range out_range_b parseHTMLtitleY N parse_HTMLparse_MetaNames_from_bufferY N parse_TXTY N parse_XMLparse_integer_table_from_buffer parse_line2parse_swish_query  parsecommenti porter_close_envntSortedResultsprint_index_headers printlongamdisk_createeamU'7@dutch_close_env7@dutch_create_env7@ dutch_stemo ecalloco efreeo emalloc 2english_close_env 2english_create_env 2 english_stem$entrystructcmpeq_seq_s_beq_veq_v_bC equivalentservero erealloc$ error_handleestrdupestrndup estrredupfile_properties file_status find_amongFfinnish_close_envFfinnish_create_envF finnish_stem flush_stream0french_close_envfrench_create_env french_stem  fs_indexpath D fuzzy_convert Dfuzzy_free_word Dfuzzy_mode_valueYP fuzzy_or_die D fuzzy_string* german_close_env* german_create_env*  german_stem dget0getDocProperty$getErrorStringyisokword,italian_close_env,italian_create_env, italian_stem dlgetpidlose_slstrstrmake_full_pathnamemakeallstringlookuptablesmakelookuptable4match_regex_list merge_indexes mergestrings$ new_locationP newswlineP newswline_n$next_swish_word$ next_wordnormalize_patho  Mem_ZoneFreeo  Mem_ZoneReseto  Mem_ZoneSizeS MetaphAddS NewMetaStringNew_Search_ObjectC OutputKeyCharuzPACKLONGFree_Results_ObjectFree_Search_ObjectSGetAtS GetLength dHTTPIndexingDataSourceSIncreaseBufferSIsVowelLimitByPropertyLoadSortedPropsS MakeUppero  Mem_Summaryo  Mem_ZoneAlloco Mem_ZoneCreateDB_WritePropPositionsDB_WritePropPositions_NativeDB_WritePropertyDB_WriteProperty_NativeDB_WriteSortedIndexDB_WriteSortedIndex_Native DB_WriteWordDB_WriteWordDataDB_WriteWordData_NativeDB_WriteWordHashDB_WriteWordHash_NativeDB_WriteWord_Native" DB_decompress( DEBUG_MASK0DecodeDocPropertyDoubleMetaphone EndsWithCVCKExternalProgramDataSource4P FilterClose4P FilterOpenDB_InitWritePropertiesDB_InitWriteProperties_NativeDB_InitWriteSortedIndexDB_InitWriteSortedIndex_NativeDB_InitWriteWordsDB_InitWriteWords_NativeDB_OpenDB_Open_NativeDB_ReadFileNumDB_ReadFileNum_NativeDB_ReadFirstWordInverte37ugako$DB_ReadFirstWordInvertedIndexDB_ReadHeaderDataDB_ReadHeaderData_NativeDB_ReadNextWordInverted3jc21sj$DB_ReadNextWordInvertedIndexdWordData_NativeNativeHDB_EndWriteWordsDB_EndWriteWords_Native DB_GetWordIDDB_GetWordID_NativeDB_InitReadHeaderDB_InitReadHeader_NativeDB_InitReadSortedIndexDB_InitReadSortedIndex_NativeDB_InitReadWordsDB_InitReadWords_NativeDB_InitWriteHeaderDB_InitWriteHeader_NativeCDB_ReadWordHashDB_ReadWordHash_Native DB_RemoveDB_RemoveFileNumDB_RemoveFileNum_NativeDB_Remove_NativeDB_Reopen_PropertiesFor05g7evv$DB_Reopen_PropertiesForReadDB_WriteFileNumDB_WriteFileNum_NativeDB_WriteHeaderDataDB_WriteHeaderData_NativekgetErrorString get_libexeciTranslationTableExceptions7 initModule_DB2initModule_Indexis_location_full* isoktitlenormalize_pathporter_close_env5 printlong4ramdisk_create$ read_stream set_error_handle8 sort_words1strConvHTMLEntities2ISO uncompress1write_worddata`XML_GetIdAttributeIndex.add_position_location' freeswlinewrite_worddataorddatad' Dcreate_fuzzy_wordcreate_screate_tempfile cstr_basename cstr_dirnameN zdanish_close_envN zdanish_create_envN z danish_stemB data_sourcesdebug$ do_index_file"dump_file_properties Ddump_fuzzy_list"dump_index_file_list"dump_metanames"dump_single_propertyP dupswline'free_file_properties Dfree_fuzzy_modeP free_header4free_regex_list(free_swish_memoryD@free_word_hash_table0 freefileinfoP freeswlinePuz uncompress2uzuncompress_location_positionsuzuncompress_location_valuesuzuncompress_worddata d url_method durl_serverport durl_uriC urldisallowedD@ verybighashwrite_MetaNames write_header$ write_indexwrite_integer_table_to_header write_wordwrite_worddata>fstr_ISO_normalize str_basename str_skip_ws str_trim_wsD@ string_hash2stripIgnoreFirstChars2stripIgnoreLastCharsYP strtoDocType strtolower]$sw_ConvHTMLEntities2ISO\ sw_strcasecmp\ sw_strcmpswedish_close_envswedish_create_env swedish_stem8 swish_qsortuz uncompress1.addNewMetaEntryaddSearchResultDisplayProperty add_buffer_ramdisk$ add_coalescedadd_default_metanames$add_position_location# result_sortsearch)soundex* stem_deN zstem_dki stem_en1 2stem_en2 stem_esFstem_fistem_fr,stem_it7@stem_nlcstem_nozstem_pt\stem_rustem_se Dstemmer(swish28 swish_qsort2 swish_words4swregexswstringtxt utilities~xml` xmlparse! xmlrole xmltok-merge3 result_output"xmltok  ramdisk_getc  ramdisk_putc  ramdisk_read  ramdisk_seek  ramdisk_tell  ramdisk_writek 6re_compk 6re_compile_fastmapk 6re_compile_patternk 6re_execk 6re_matchk 6 re_match_2k 6re_max_failuresk 6 re_searchk 6 re_search_2k 6re_set_registersk 6 re_set_syntaxk 6re_syntax_options read_header read_streamDB_ReadPropPositionsDB_ReadPropPositions_NativeDB_ReadPropertyDB_ReadProperty_NativeDB_ReadSortedDataDB_ReadSortedData_NativeDB_ReadSortedIndexDB_ReadSortedIndex_NativeDB_ReadWordDataDB_ReadWordData_NativeDB_EndReadSortedIndex_NativeDB_EndReadWordsDB_EndReadWords_NativeDB_EndWriteHeaderDB_EndWriteHeader_NativeDB_EndWriteSortedIndexDB_EndWriteSortedIndex_Native charDecode_C_Escape)coalesce_word_locationscreate_fuzzy_struct dupswline estrredup6 flush_streamfreeModule_Swish_Words0free_Extracted_Path freeswlineSDestroyMetaStringSDoubleMetaphone D EndsWithCVCKExternalProgramDataSource FileSystemIndexingDataSource4P FilterClose4P FilterOpen']$charEntityDecodechar_ISO_normalize"check_sorted_index dcmdfcmp_wordhashdata$coalesce_all_word_locations$coalesce_word_locations is_meta_entry\is_presorted_propD@is_word_in_hash_table isdirectoryisfileislink isnumstring isoksuffix  isoktitle.` XML_SetCommentHandler` XML_SetDefaultHandler` XML_SetDefaultHandlerExpand` XML_SetDoctypeDeclHandler` XML_SetElementHandler` XML_SetEncoding` XML_SetExternalEntityRe0eoulj4$` XML_SetExternalEntityRefHandler` XML_SetExternalParsedEn0prcdc6$` XML_SetInternalParsedEn23bh9jo$` XML_SetNamespaceDeclHandler` XML_SetNotStandaloneHandler` XML_SetNotationDeclHandler` XML_SetParamEntityParsing` XML_SetProcessingInstru3sa24l8$.` XML_SetUnknownEncodingHandler` XML_SetUnparsedEntityDe0esr0km$` XML_SetUserData` XML_UseParserAsHandlerArg XmlGetUtf16InternalEncoding XmlGetUtf8InternalEncoding XmlInitEncoding XmlInitUnknownEncoding XmlParseXmlDecl! XmlPrologStateInit XmlSizeOfUnknownEncoding XmlUtf16Encode  XmlUtf8Encodeabsolute_program$addCommonProperties0addDocProperties0addDocProperty addMetaEntry.` XML_GetSpecifiedAttributeCount`  XML_Parse` XML_ParseBuffer` XML_ParserCreate` XML_ParserCreateNS` XML_ParserFree`  XML_SetBase` XML_SetCdataSectionHandler` XML_SetCharacterDataHandlerw-XML_SetCharacterDataHandler+XML_SetProcessingInstru3sa24l8$, addMetaEntry!add_position_location`  XML_GetBase`  XML_GetBuffer` XML_GetCurrentByteCount` XML_GetCurrentByteIndex` XML_GetCurrentColumnNumber` XML_GetCurrentLineNumber` XML_GetErrorCode` XML_GetIdAttributeIndexy'0 freeProperty0freeResultPropValuefreeStringListYPfreeSwishConfigOptionsYPfree_Extracted_Path sortbyfile sortbysort sortresults sortstring)soundex spanish_close_env spanish_create_env  spanish_stem Dstemmer_applied]$strConvHTMLEntities2ISOinitModule_DBNative]$initModule_Entities  initModule_FS4PinitModule_Filter dinitModule_HTTP$initModule_Index# metanamesBmethodsYPparse_conffileY Nparser\pre_sort proplimit ramdiskrankk 6regex result_output4process_regex_list$progerr$ progerrno$progwarn$ progwarnnoproperties_compatible  ramdisk_close ramdisk_createi porter_create_envi porter_stemzportuguese_close_envzportuguese_create_envzportuguese_stemprintSortedResultsprint_index_headers printlong'file_properties file_status find_among find_among_bFfinnish_close_envFfinnish_create_envF finnish_stem flush_streamicomp2 in_grouping in_grouping_bin_range in_range_b increase_size indexpath$ indexstring initModule_DB Dset_fuzzy_mode$ set_progerr$ set_progerrnosetlimit_paramsuz sizeofcompint slice_del slice_from_s slice_from_vslice_to\sortFileProperties$ sort_words:;<=>?>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^>_`abcdefghijklmnopqrstuvwxyz{|}>~>>1URَ]V1.0AAcheckV1.0 4-AUG-2004 09:31Compaq C V6.5-001` ` $ABS$i<$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jisokword0J getdoctype0JhasdescriptionT T =D<# # "~^^~ (0޴8@[@H>P^Xq.qJGGGGGHbGGG B/` 2/ 2, . .G("8KA8HJWJ!GtGF@Zk0BG4G8b@Zk%G @ @G.J/r///d.0@"StJgJrF@@///G///G]]} (0ݤ8@H=P]X`#k//Gʢ//KWCF D/4GhbDK`B@Zk//0AA/?GG+.PB4GXbJ@Zk@@D0@@/?G/ ) D.DJQQB1"F //.pB4GxbJ@Zk//0@@/?GG.d.$" PJdJJ4G///7 #4G~^[^~ (0޴8@GGGGb@Zk`@Ġ//B4Gb"G@Zk1@ BGTG#B(b @ZkƠGG]]} (0ݤ8@P#k/Gk//// G>//@PF@`pF/ `//F///Gk<,Gis_word_in_hash_table<\b#is_word_in_hash_table<@is_word_in_hash_table4G decc$strlen4b# decc$strlen4@ decc$strlen4b# decc$isdigit4G decc$isdigit4@ decc$isdigit4G decc$tolower4b# decc$tolower4@ decc$tolower4 dGx decc$ispunct4 lb# decc$ispunct4 t@x decc$ispunct4G decc$strlen4b# decc$strlen4@ decc$strlen40GH decc$strlen48b# decc$strlen4D@H decc$strlen4 LGhdecc$strcasecmp4 \b#decc$strcasecmp4 d@hdecc$strcasecmp =0";=`L 7decc$$gl___ctypea7decc$$ga___ctypet decc$strlen is_word_in_hash_table decc$tolower decc$isdigit decc$ispunct=0;=0";=P8 decc$strcasecmp@ @6=> >=.&%CHECKCompaq C V6.5-001; ;= 44=isokword4= , , , ,  ,. , , , , , ,E@ ,N , ,+ ,+ ,+ ,= =  = 44= getdoctype4=nfe - -  -  -  (- (- %-  !-0 5- ,- =  = 44=hasdescription4=@87 >- <- >- >- >- = l =   decc$strlendecc$strcasecmp decc$isdigit decc$ispunct decc$tolower decc$$ga___ctypet decc$$gl___ctypea is_word_in_hash_table c$stww1Sَ]V1.0@@fileV1.0 4-AUG-2004 09:32Compaq C V6.5-001p p $ABS$i$$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J get_libexec0J0normalize_path0Jp@ isdirectory(JPisfile(J `islink(Jgetsize0Jp indexpath0J read_stream0JP flush_stream0J file_properties8Jinit_file_properties8J init_file_prop_settings8J`` free_file_properties0J create_tempfile =,$#TG4G~^ [({G@ZkqDGpDQs4HRTJSFWBQ/`G] #k//Q0 H_FSFQ//#4G~^ [({^GG@ZkB.GGBJBJ ///KFwJ@.VJF>/1"K_=@A@@@@B 3`///"/"B"" @@Db#""KY"KB %D, ."?" JF/%"./2JXK%F?/ B/b.[KSpJEGb>/@.VJ@>=@/ //// 1@KXKB EF@=@??G]] #/k///#@^[~TG>"HG{@Zk//G@]HGP#k/=&G@]H"P#R H0D @/k///#@^[~TG>"HG{@Zk//G@]HGP#k/=&G@]?&H"P#1"R H0D1@k///#@^ [~TG>"HG({@Zk//G@]HGP#k/=&G@]H"P#R H0D0@k/#@^0[~TG>"HG8{@Zk//G@]H P#k/".%=.G"= @]HP#JQ !JFC/k/// [TGRrk//#TG^~^ ~(08޴@([HP>X^`~hpGPРGGG @@0b^FC8F0@?p&O@Zk ,BGG4GbGGA H <d@Zk0@BG4G@b.PJ>=G @Zk@GGGG`TG//.wPJJVJ`F0 B>0 @ %@"/x8BtG D@b"@ZkdGP(B?&TG0b%CM1"$%L!&L k!O/@Zk.BG4GbGGPJ>Gd@Zk @?& GPEM!&/ @(BGTG!D0b hAR RBF/@c&O@ZkHBGGGGG A@ZkB @d4GGb/@Zk A @AE? G@P.GRPJP>$G]] }(08ݤ@HP=X]`}hp#/k///P0 2B/'`#~^^~ (GG0G1QB BG_"G(b1"/ 4Gc/@Zk#C @ 2B#/G]]} (0#k///cG4G (bG2tBcG]]} (0#k///#G4G~^0[8{G@ZkGG"! /G] #k//#4G^0[~^ ~(0GGGG8b/@Zk,$ BTG(b d#@Zk,/`,\#@B=GTG Hb/@ZkG`B$GCTGhb0d@ZkPB,TG8l#Xb@Zk4G]] }(0@#k//#H^~P^X~`hGGG{#@>D^_0BGG4G8b/@Zk@0B4G8bF/@Zk0BG4G8b @Zk B TG="(b@Zk"=,%."} "]"*"#HP J0D$"}.%.rJT JtFD*.-/JX KF(IJDGpb#x_GH]GP]X}`hp#k///#4G~^[^~ GGGb@ZkB 4Gb@ZkB4Gb/@ZkGGb]]4G} 0#/k///#4G^~ ^(~08@GG>G[b ~G@@ZkGG"B4Gb@ZkHB@4GX"@Pb@ZkHBG`"4GPb@ZkHBG" 4GPb/@Zk=G/!$\/ .B4GbJFG@Zk@0@XB4G`b0@@Zk.(BGG0bTGPJ> G/@ZkGhb#/_(BGx""TG0b@Zk(BGTG""0b@Zk(B//`GGTG0b@Zk(BGTG0b$@ZkBG4Gb@ZkBGG4Gb/@ZkBG` 4GbG/@Zk8BG`bTGh"@ZkB=GTGb@Zk8BGGTGb0"/@ZkhBG4Gpb/@Zk8B GbTG"@ZkBG4Gb@Zk G]G ](}08@P#/k,G(emalloc,{#emalloc,$@(emalloc 4G decc$strlen4{#0 decc$strlen4@ decc$strlen4HGhdecc$__utc_stat4 `{#pdecc$__utc_stat4d@hdecc$__utc_stat4Gdecc$__utc_stat4 {#Pdecc$__utc_stat4@decc$__utc_stat<+hGdecc$__utc_lstat<,{# decc$__utc_lstat<+@decc$__utc_lstat4Gdecc$__utc_stat4 {#decc$__utc_stat4@decc$__utc_stat4%G$ Mem_ZoneAlloc4&b# Mem_ZoneAlloc4% @$ Mem_ZoneAlloc4#(GT decc$fread4$8b# decc$fread4#P@T decc$fread4XG decc$strlen4hb# decc$strlen4@ decc$strlen4'Gprogwarn4(b#progwarn4'@progwarn4%GT Mem_ZoneAlloc4& b# Mem_ZoneAlloc4%P@T Mem_ZoneAlloc4#XG decc$fread4$db# decc$fread4#@ decc$fread4%G Mem_ZoneAlloc4&b# Mem_ZoneAlloc4%@ Mem_ZoneAlloc4)GOTS$MOVE4)@OTS$MOVE4#G$ decc$fread4$b# decc$fread4# @$ decc$fread4#G decc$fread4$b#P decc$fread4#@ decc$fread4#pG decc$fread4$tb#P decc$fread4# decc$fread,Gemalloc,{#emalloc,@emalloc4 GT str_basename4H b# str_basename4P @T str_basename4X Gx getdoctype4d b# getdoctype4t @x getdoctype4 G isoksuffix4 b# isoksuffix4 @ isoksuffix4 G hasfilter4 b# hasfilter4 @ hasfilter4 G hasdescription4 b#hasdescription4 @ hasdescription,!X Gt estrdup,"h b#estrdup,!p @t estrdup,!x G estrdup," b#estrdup,! @ estrdup,! G estrdup," b#estrdup,! @ estrdup4 G decc$__utc_stat4  b#decc$__utc_stat4 @ decc$__utc_stat,p G efree, b#`efree, @ efree, ,, G efree, b#`efree, @ efree, G efree, b#`efree, @ efree, G efree, b#`efree,  efree48 GX decc$strlen4< b# decc$strlen4T @X decc$strlen4h G| decc$strlen4p b# decc$strlen4x @| decc$strlen4| G decc$getenv4 b# decc$getenv4 @ decc$getenv4 G decc$getenv4 b# decc$getenv4 @ decc$getenv4 G decc$getenv4 b# decc$getenv4 @ decc$getenv4 G decc$strlen4 b# decc$strlen4 @ decc$strlen, G4 emalloc,( b#emalloc,0 @4 emalloc4 8 Gd decc$strcat4D b# decc$strcat4 ` @d decc$strcat4 t G decc$strcat4 b# decc$strcat4  @ decc$strcat4  G decc$strcat4 b# decc$strcat4  @ decc$strcat4  G decc$strcat4 b# decc$strcat4  @ decc$strcat4  G decc$strcat4 b# decc$strcat4  @ decc$strcat4  G decc$umask4  b# decc$umask4  @ decc$umask4 G decc$mkstemp4b# decc$mkstemp4@ decc$mkstemp4 G4 decc$umask4 $b# decc$umask4 0@4 decc$umask4 8GT progerrno4 Db# progerrno4 P@T progerrno4TGl decc$fdopen4db# decc$fdopen4h@l decc$fdopen4 pG progerrno4 b# progerrno4 @ progerrno4G decc$remove4b# decc$remove4@ decc$remove4 G progerrno4 b# progerrno4 @ progerrno,Gefree,b#efree,>@efree' '=XXXXXXD D=0'Couldn't unlink temporary file '%s' :0=@7Couldn't create temporary file '%s' file descriptor: h=0%Couldn't open temporary file '%s': =PHSubstituted %d embedded null character(s) in file '%s' with a newline  =0";= $ emalloc=0 ;= $  decc$strlen=swtmppefree decc$fdopen=TEMP decc$umask progerrno;=0" ;=P,<  decc$strcat; decc$getenv= TMPDIRTMP0 decc$remove=/P decc$mkstemp=0 ` ;=0$ =0  ;=@(  getdoctype str_basename isoksuffixhasdescription hasfilter=0";= $ =0H" ;=p  decc$__utc_stat!estrdup=0 ;=04 # decc$fread;=0";=H % Mem_ZoneAlloc'progwarn8OTS$MOVE=0p;7IndexingDataSource=0@";=P =0@"`;=P +decc$__utc_lstat=0@";=P =0@"@;=P , ,4@ @6== ==-%$FILECompaq C V6.5-001 = 44= get_libexec4=1)( 4$ 4$ 4$ 5  = D D= 404=normalize_path4= #5 #5 #5 )5 )5 *5 )5 -5 -5 -5 -5 -5 -5 -5P -5 -5 -5 -5 -5 -5 -5 -5( =  = @4p4= isdirectory@4=H@? 95 95 95 >5 ?5 ?5 ?5 =  = 4P4= isfile4=OGF E5 E5 E5 J5 K5 K5 K5 K5 =  = `4 4= islink`4=NFE Q5 Q5 Q5 W5 X5 X5 X5 =  = 44= getsize4=H@? b5 b5 b5 g5 h5 h5 h5 = v v= p44= indexpathp4= t5  =   = 44= read_stream4= 5 5 5 5 5  5  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  5 5 5 5 5 5| 5 5  5  5 5 5 5 5 5 5P =  = 4P4= flush_stream4=]UT 5 5 5 5 5 5 5, 5 5 =  = !44="init_file_properties4=-%$ 6 6 6 = ` = $ 44=%init_file_prop_settings 4=jba 6 6 6 6  6 /6 /6 56( =  =  44=file_properties 4=jba J6 J6 Q6 U6 V6 W6 _6 a6  r6$ = @ = !` 4`4="free_file_properties` 4=?76 z6 z6 z6 6 6 6 =  =  44=create_tempfile 4= 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6  6  = $ = ( ( decc$mkstemp decc$umask decc$getenv decc$fread decc$remove decc$fdopen decc$strcat decc$strlendecc$__utc_stat decc$__utc_lstat IndexingDataSourceemallocefree Mem_ZoneAlloc isoksuffix str_basenameestrdup progerrnoprogwarn getdoctypehasdescription hasfilterOTS$MOVE c$mkww1SSَ]V1.0AAindexV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$iTX$CODE$+ $LITERAL$ $LINK$$DATA$@$BSS$ $READONLY_ADDR$ $READONLY$8J`initModule_Index8J PfreeModule_Index8J configModule_Index0J @ do_index_file0J0 getentry0J(addentry8JP addCommonProperties0J0& getfilecount@J@@&getNumberOfIgnoreLimitWords@J`&getPositionsFromIgnoreL39lunrk$0J3 sort_words0JppD indexstring@JP5coalesce_all_word_locations8J`Ncoalesce_word_locations8Jp.adjustWordPositions0J6 write_index0J  alloc_location0J new_location8Jis_location_full8Jadd_position_location0Jp3entrystructcmp0J0@ next_word0J0Bnext_swish_word0JL add_coalesced =#4G^ [~^&O" ~(GG(b@ZkB?&G&O1"& G4G/@Zk= B"(bX H@Zk B#&"4GPD"(b/@Zk&C&&&LT#"R"G""R#2 "0aB@F$1"/XK?r/[zKR#r?.PJ2 >/XK?r/"[zKR#r?.PJ>/XK?r/[zKr?. uBPJ R"> tB ///0`B1", tB@HR""c^#GFccP#      _0Bc'& G"tGO[O{GOb@ZkB#$GGOtGb0/@ZkB#$`"GOGtGb@ZkB#$G"OGtGb@Zk B#$G4GO "(b@ZkB"4Gb c$P"@Zk\OG]] }(0#k/#~^^~ (0޴8GGGGD&` 8B4G@b@Zk $&4GtOq[@Zk$$4GtOa[@Zk(B4G0b@ZkHB4GPb/@Zk0@  $$\HB4GPb/@ ZkHB&4GPbD$/@ZkHBL4GPb@ZkHB\O4GPb@ZkHBTO4GPb/@ZkO&(àƠGG$HB4GPbO@/ //@Zk$HB4GPbO@@Zk(0@@ @HB&O4GPb@Zk$8B4G@bOO"////@Zk$8B4G@bOO"////@Zk$8B4G@bOO"////@Zk$8B4G@bOO"////@ZkHB4GPb@ZkHB4GPb/@ZkHBG4GPb@ZkG]]} (0ݤ8@#k///Q#4GTG^~ ^(~08@GGG~`;"@[HbG@Zk//[#D&pB4GxbX D/K #\R]@ZkB0@TGb/@Zk$$BGTG\cb#@ZkpB&4Gxb\/@ZkPB&4GXb\@Zk0BD&G\RtG8b"@Zk B4G"(b@Zk BG"4G(b@Zk BG"4G(b/@Zk7GB$&tGb\1"@Zk-à0BGTG8b"@Zk%@BGTG""Hb$@Zk0B#4G8bx D @ZkO4Gc0B8b/@ZkO /0BGTG8b"@ZkG] ](}08@P#k/#4GTG(^~0^8~@HPG#GG0 G [(b,C]}XG @ZkPBGGGTGXb@Zk 7,$@BGG]}Hb @C0DG/ @Zk(/GG]`b#GGG @,H$///G ]""G4G4Gb#R&XR@e,BGGb4GeH/ @ZkGG(]0]8}@HP`#/k///P&#GO~^GG//@QF` QB?GG///, A QB/(@///a7`J3@qFa3@`@ qB@7`JqF`@`G@ qB @7`J`@qFG`z@ qB &OGTG] #({k/`@GF4///UBuBQFG QB*FG&עVBBQF/;` QB//wFGUBuBQF. QB/FG עVBBQF"` QB/wFGG/// @&OG] #k///ڲG] #k/ @&OG]G #k/G]G #k///G] #k///G{# =9/F"G/ k//BG /{C B {C B {C B {C B/ {C B/FpC/k///?G1"/?k//#21@B~^^~ (0GGGGPBB_EBBGb#@_B$GGG@ZkO$#OdGG]]} (0@#k//@#TG`^~h^p~x޴P[>^GР(GGGL(C@ppy`@`1XbX"@ZkBG4Gb>/@Zk;//8BG4Gb//@ZkpBTG$b0"@Zk/`BTG@""hb /@ZkpBTG $b"@Zk/$0@$T#B ]"tGb/@Zk,BBBCSFFF@ ///`BGG4GtGhb@Zk@($pPQB0,d31`B`BY\|BCk/T&TX" ݲU///"/B/# } 8KZXK:G |KKD E///L?&XM1" ==///L& WMs" }5///0.4"/5" ]8JY7KF!\KJ6D =%///..B" =JTJF58JJF P/TB/U" =KZVKG;g/V`///'M ӢFCBpGGX5G8G, #/:8D ZCB2F/ F/ZCB;G F ZCB2D :8F ZCBFUG/391 C3S3/ s`/ӢDzP:1@CPE21@BE//Gs0@ @  /?#&X1c$11 BX#e;1`Ce//¦pB="GxbTG֢F//@ZkBG="TGb@ZkGGBbtG11@@Zk$?% GG )!$.$JQ$J/$>H/ @///pBGGTGxb@ZkJ/_0@ @ !&$X!&8 OH=PHP=P"[ @B2DF[tFSF@`X[XX]N52@BF%O 4Gb@ZkOJ @G////GGb# @0@ @ BF%O 4Gb/@ZkO&4GBOb/@ZkG`]h]p}xݤ=]#k/#4G^~ ^(~08@޴HGGG(P[XbG@ZkG4GBb@ZkE@GŢ // BG(b"@Zk֢/@'8/4GpJG$&0B8bY8K0GG8?#O1=4G@ZkpB@TGxb@Zk@BG"GTGHb/@ZkeGfŰ d0`Bd0BG] ](}08@ݤHP#/k///#TG~^^~ (0޴8@H>PGG#(GGGGGG {HB"0 @ {Y`Pb//@Zk@B"h(B"GGG0bGX"/@Zk(BD"4G0b/@Zk(BD8"4G>0b/@Zk(BDX"4G0b/@Zk(BDp"4G0b/@Zk(BD"4G0b/@Zk(BDx"4G0b/@Zk(BPD"4G0b/@Zk(B//4Gh"0b@Zk(B4G"0b@ZkGGXb# 'H{_4GD #V# G7E///IFG@idG`)7E//4GGGXb# 'H4GDS_ C@F/â0Bò* =GG Ib#3_ DDDID /G F/ PGIF`GFTGID G 0C'H )DI CG]]} (0ݤ8@H=P`#k/0#TG`^~h^p~x޴0[>^~G#(G@!GGP;"GGG2!8bX/@ZkCB4Gb\ G@Zk BGG\=GGG(b@ZkpBGTGP""xb/@Zk8]"4G^8=GGG4G4G@"@ b#@X4GWd=S/BG4Gb@ZkBG']"tGb/@Zk= G"" b# 09 cS&GXR4G4G@.///G4G=">G4G" b#CR&XRq@0BGTG8b @ZkB G G4Gb@Zk BGGGGGG(b@ZkBG4Gb@Zk砮0B`""*GTG8b@ZkB GG4Gb/@Zk BGGGGGG(b@ZkpBGTG`""xb 4G@Zk 0!G0GG4G4GH" b#H%@@"0B+G8bTG1"@ZkBGG4Gb@Zk BGGGGGG(b@Zk@"pBGTGxb 4G1"@Zk G GG4G4G(" b#(@(d@"GTG0B8b1"`@Zk(@B GHb4GP@Zk BGGP]"PG4GG(b/@Zk0BG""TG8b@ZkGd//`d@BP}C4GHb/@Zk BGP]"GPG4GG(b@Zk0BGTGp""8b@ZkX@BGHb4GP@Zk BGP]"GPG4GG(b@ZkG`]h]p}xݤ=]}#/k///k//&O/k///0#4GH^~@[P^X~`hp޴x>^~޵G(Ġ&OGGGO(ް,OB@ Hb"/@ZkB4Gb@ZkpB%G4Gxb 4G G !! G@Zk G/#G,BR///O(ݠ&/"OBGtGbSRBSsBSB0}8ݴ08=G[[/`X[@@} tB2`O֢ VB/@_"//@Zk B&GTGGO(b@ZkO#/O,@S!DGTGBb41B51B/ )AQ?A/@Zk GF@0@//G 0`A mA A?(pB<PB4GxbG@Zk( C,&$AMA @@ E +E //0Ac, ^"$! -@ AFc A////0A! A?G////ʠ@TG@BHb &""@ZkB 4Gb@ZkcB4G"bk%`Ok/ `@Zki@GGb# )A` A@@ HLH @Ơ/ B "ݰ4GG(b@Zk=G .).i!} JQ )J F C/ ///B"="]"}Gb }"@Zk =4GpBxb@"P?@//@ZkG/H!`BG ]GhbF"@Zk,=4GpBxbA@  @) A GG@Zk =pBG4Gxb!@P?@@Zk / 0 ]GTGBb2B1BQ?B@ZkGG $HD!@R2@0 B@R" s""@J  8B8saK0 Br } +B0 B/`J 5B(3!K0 B2 ] :B @s0 BaKr  0BӢ0 BJҲ 7B30 B!K2  Bs0 BaKr 4BĢ H"EB/_BG4Gb@Zk]?GCcB&4Gbk%`Ok`O@Zk0AJ! A (G,=/ɠB!GGpbb&@Zk0A)! A,]$O尀@B4GOE@cHb`"`@ZkB 4Gb/@ZkGH]P]X}`hpݤx=]}ݥ#/k///PP#4G@^~p[H^P~X`h޴px>^~GGGGGxb G G8^"@ZkpB"4Gxb(/@Zk0BG4G8b@Zk8CG"C FB" ="(]"Gb0}"/@Zk0=(@!4GBb" @AP?@/@Zk" G = /=B"0]GbG?D@Zk@EA`G/ *  Q(1"(] FB#@0B B ( B0B B/@q(} fC`0B B/Q(] FB @0B B/ ( B0B B/(}0fGGGV`/T/// XG BAJ? AB!(! &F8 B/40`B yB/0F/,! :B/( 0`B yB/$`F/ B/0`B yB/!&F#/ a zC/`0`B yB/ F/ᢷ B/0`B yB/?3pB3SC3aJ_FrF0B#X0 B/`B0}"2IAGG="hb@ZkB"=G0]Gb G@Zk@ BG4GE(b@Zk , H!/ Gd]4CBCFC*`F/'ݢ BF@0BGTG(b@ZkpB"4Gxb G/@Zk0BG=GTG8b/@Zk0B4G8b@ZkG( G!=] BGTG(b#CBCd@Zk$G@]H]P}X`hݤpx=]}#k///1GG[G}"1"@ZkG/k///0#4G^~^ ~1([(GGG0ba _@C@/@ZkBGTGb8"/@Zk(8B4G@b@ZkB4Gb =!P?@/@Zk=&GG"cc 0/VqB/0`B"0`B0`B0`B 0`B0`B0`B0@B TB%c 0xG bb]G] }G(GG0#k///G]] }(0#k/#~^^~ (0޴8@G$GGG G///#%B/ ///GGhb#@0@ @@G]]} (0ݤ8@P#k///P #TGX^~`^h~r`[px޴>^~޵G~`ӠGGG1hbް@Zk@4GBb"@Zk 0B4G8b@&Zk@B4GHb$O"@Zk@B4GHb$O"@ZkB4Gb&`O0/ O//@Zkݠ' GG G G! @J/@#BTGb?@AE 0APAPBPB ݴ =[["/`X[((ݡ2AYAB@G@Zk0B 4GG8b@Zk . $ D" $. d.tG .BbJQ!JrJTJF @tFN"/@ZkpB//GGGtGxb@Zk 0 A `A &A@#B4Gb ¥" @ZkB4Gb"/@Zk'0B4G8b@Zk| %GG G G'F!-I///@BTGb ¥0AAAA!@A?@0C!D NJ1C0D"2'BYAB@G@Zk0B4G8b/@Zk @///OBG/"bG@d@Zk% 0 A `A! ,A@#B 4Gbh" ¥@ZkB4GbH"/@Zk0B4G8b@Zk! !408<///8}4GP0Bb0CkE $`O!N J1CpE&/FG/ @O//@Zk0G(CGb#u@<@//// G G$`O_%/ ///! 0A ! 0A ! 0A ! 0A/ ! 0A/ ! 0A/?YABqA@P?B4Gb@ZkG GGG/B 0`A4G "" !b@Zk mAΰ&1@/_pBGGGGbxbG G@Zk////k!///0@ Gk! @?PBG4GXb/@Zk@á=TGBb A("NE/0A)FAF@F@@ݴH=@H=[[/`X[PPݠ-@YAG@Zk0B 4GG8b@Zk塰BGGbTG //@ZkBGGGtGb/@Zk//_4ݡ8}<%0A!xk! A A4ݱ8}<*@àB4G"b@ZkB$GTGb/@Zk@B4GHb%O"/@Zkc@B4GHbc$O"/@ZkPB4GXb@ZkGX]`]h}pxݤ=]}ݥ#k//#~^^~ (0޴8*@H>P^XG`GGGGG t?=G G G 0 AGGb#_GGGGb#J!F_Ӡ 'A/(0 @(G]]} (0ݤ8@H=P]X`#k//p#~^^~ (0޴8@H,GGGGG ۤ(H//'f C.JPBF /#0B4G8bQ.QJ@Zk/#! #!.!J?Cr.rJG 6@(//Ǣ .JU+BF) /0B8b8/8K4G@Zk/%BTGbD!@0 @%/@Zk$P.&B0@.PJuJTJF>â"ò/K4G@D/ZDKD?/GG]]} (0ݤ8@HP#k///#^~^ ~(08޴@HP , HGGGGG(РG /`/(B4G`K0b@Zk@@ #.JPBC@ a.`J.JG2//(B4G0bK,@Zk@@(///#.JA&@!C@%E8B1B@%0 BTG@b@Zk$P.(B0A.PJuJTJF>â"/K}[0@C[@@.XBR@J@>$TG"G`b@ZkHB$GTGPb@ZkCGG]] }(08ݤ@HP`#k/// #TG`^~h^p~x޴>^~޵GGGG#0A'\OZ&(PGGG G ]8=XO5=<-=TOuP[}PO B@G !G1" G @;"Xb/@ZkG  G G '# / GBTGbMBҡn/` //Ƣ0B BB&@Zk&ΡP0Bб G 0A A A_f0`B` SuBƲƠGy/<=8]0" ="]"b#!%!0]e_@=` "HPXC//" TGBb1"P F =@Zk0B 4G8b/@Zk B * J"tG(b/ .. *. j. .JQ!JrJTJF ]tF@Zk///* GGGG8b#G_ 0`A XTGB =bG/////@ZkB =GTGb@Zk  B *" "tG(b , H/ J. j. . .QJSqJJSFGVJF@Zk/// GGGGG 0`A8b#_`B =TGPhb@Zk G(="]"G}"Xb#(i_////\*} G/< 3.3J/4 ///.`FJTB*.s"J&3//3KY*C9/ s/s"sK3,3HA*@! 3.s"3J .JTB/s"K S/SKY*C9/ s/s"sKS.SJ/@),)HA*@!BG4Gb //@Zk 1@B=G AGtGb , H@ @q@ZknGGGGG 0`A8b#9_c<=G G B]tG(b)%`O)% %*,% .%j.%.*HP JjJTJ0DtF@Zk GGGGGG8b#_ 0`A@/B_&=tGHbR"/@Zk G0TGpB= xb@Zk G %///G0A H21@BHGGGG8b#G_ 0`AG b#/ )8 D/ -//_   !BG4Gb@ZkG(="]"}"GXb#_-0" ="]"b#_ӧ<] GR&\OXO=TO2=PO2G`]h]p}xݤ=]}ݥ#k/C#4G^0[~ ^(~ $08`O!@޴HPGGGGG9 "GG8b2@Zkc1@@"pB(B"c@GxbG``@@@ H LH@@@#&D`q" ""@Zk#$DB#&$GtGD1xOFb@ZkhOfc&G4GDsGG[@ZkPBD4GXb0"@ZkG/`B4G "hb@Zk @G/#$//'$G] ](}08@ݤHP`#k//Q #X^~`^h~px޴>^~޵G@GGGGZ GG@//R0@@R20@ @R0@@R0@/@R0@/_B`@P@4Gb@Zk$G G  LO=  /xB4Gb "" J!/@ZkB G"="G ]"}"b@Zkj =**)/?HBGGGbPbG@Zk G G*J!`$///& 0`AGJ! gA(BG4G0b/@Zk BG G$ G8] G//xB!@"@4Gb/@ZkDG8%"2 BTG .e.0Bb JuJT JSeJF3uF>e>8&1 CO@Zk8}BGG1iA@Zk8GGGGb#3A_8BG TG8C GG@b G/@ZkG 8B@"0="P]"H}"Gb!@ZkH8=p@@@@.@!)@ &@[ //;8].e".b2SBV J EJwEJUJFF>>#8]1ICB&TG O/@Zk8}BGG1iA@Zk8GGb#GG GG3A_8BGGTG8@b/@ZkG!8 A0A G B//B@4GbAA*E/@4ZkBGGGGG4G@Zk(BG0b@Zk8%@A( A GA8HB  P@4Gb@ZkG/X!0ݥB@"H]GbGE@ZkPhB8"(="H}pbGG2 A/@ZkB(=8"GH]P}Gb@ZkHݡ(BG4G0b!@Zk 0AG8ݡ$.%,!BTGb.A IP JqIA%HF1D>%<c8&1BO/@Zk8ݠBGG1@@Zk8GGb#GG3 A_ 4GcXB`b&`O/O//@Zk(B *E5G4G@0b/@ZkGX]`]h}pxݤ=]}ݥ#/k///#^~^ ~(08޴@HGGGE$B%$D! (!/ //D'GTGxOz[@Zkp0B4G 8b"@Zk$&4GtO`D[@Zk$D%$TG@""(`Bhb&`@Zkp%&0BTG( `18b"@ZkPBGGtGXb@Zk$ B$&TG(|O1(bG@ZkGhF`//$$G4G"pOaGG[@Zk6B&GbTG`DO//@Zk=@.&" .GG HR @Js HQ JTF3F@>4GG >pOu1@[@Zkݠ /$&G4GtGlOq1@[/@Zk B$&GTG|O1(b/@ZkG!ÀBd$GTGOb@ZkpOcGGG4GGG[/@Zkg B$&G(bTG}#'|O1@ZkG//G]] }(08ݤ@HP#/k, G<emalloc,4b#`emalloc,78@<emalloc4<GdOTS$ZERO4`@dOTS$ZERO,hGemalloc,pb#`emalloc,@emalloc,Gemalloc,b#`emalloc,@emalloc,Gemalloc,b#`emalloc,>8@emalloc,Gemalloc,b#`emalloc,@emalloc4<GlMem_ZoneCreate4db#`Mem_ZoneCreate4h@lMem_ZoneCreate4lGMem_ZoneCreate4b#`Mem_ZoneCreate4@Mem_ZoneCreate4G9Mem_ZoneCreate4b#`Mem_ZoneCreate4@Mem_ZoneCreate4GMem_ZoneCreate4b#`Mem_ZoneCreate4@Mem_ZoneCreate,Gemalloc,b#`emalloc,@emalloc,G(estrdup,b#`estrdup:,$@(estrdup,Gisfile,b# isfile ,@isfile4G decc$remove4b# decc$remove4@ decc$remove,Gefree,b# efree,@efree,,GDe;free,4b# efree,@@Defree,DGdefree,Pb# efree,`@defree,dGxefree,pb# efree,t@xefree,xGefree,b# efree,@efree,<Gefree,b# efree,@efree,Gefree,b# efree,@efree,Gefree,b# efree,@efree,,GDefree,<b# efree,@@De=free4UHGt Mem_ZoneFree4VPb# Mem_ZoneFree4Up@t Mem_ZoneFree4UxG Mem_ZoneFree4Vb# Mem_ZoneFree4U@ Mem_ZoneFree4UG Mem_ZoneFree4Vb# Mem_ZoneFree4U@ Mem_ZoneFree4UG> Mem_ZoneFree4Vb# Mem_ZoneFree4U@ Mem_ZoneFree,Gefree,b# efree,@efree,G4efree,(b# efree,0@4efree,4GHefree,@b# efree,D@H?efree4Gdecc$strcasecmp4b# decc$strcasecmp4@decc$strcasecmp4)G decc$strlen4*b# decc$strlen4) @ decc$strlen43 G4 erealloc44( b# erealloc430 @4 erealloc4+8 G@X decc$strcpy4,L b# decc$strcpy4+T @X decc$strcpy4X Gt normalize_path4d b# normalize_path4p @t normalize_path4t G isdirectory4 b# isdirectory4 @ isdirectory,  G progerr,  Ab# progerr,  @ progerr4 G decc$getenv4 b# decc$getenv4 @ decc$getenv4 G decc$getenv4 b# decc$getenv4 @ decc$getenv4 G decc$getenv4 b# decc$getenv4 B@ decc$getenv4 G, progwarn4 b# progwarn 4( @, progwarn, 4 GL progerr, @ b# progerr, H @L progerr4P Gl decc$strcasecmp4` b# decc$strcasecmp4h @l decc$strcasecmp4l GC decc$atol4| b# decc$atol4 @ decc$atol4 G decc$atol4 b# decc$atol4 @ decc$atol,  G progerr,  b# progerr,  @ progerr4sX G parseHTMLtitle4t\ b#DparseHTMLtitle4s @ parseHTMLtitle4w G isoktitle4x b# isoktitle4w @ isoktitle4u G parse_HTML4v b# parse_HTML4u @ parse_HTML,d G efree,p b#efree, @ Eefree4 G Mem_ZoneAlloc4 {# Mem_ZoneAlloc4  Mem_ZoneAlloc4GOTS$MOVE4@OTS$MOVE4hGprogwarn4b# progwarn4@progwarn4G flush_stream4b# F flush_stream4@ flush_stream4G$ FilterOpen4b# FilterOpen4 @$ FilterOpen, (GHprogerr, <b# progerr, D@Hprogerr4QTGt decc$fopen4R`b# decc$fopen4Qp@t decGc$fopen4xG progwarnno4b# progwarnno4@ progwarnno<qGprocess_regex_list<rb# process_regex_list<q@process_regex_list4G, read_stream4$b# read_stream4(@, read_streamH4GOTS$MOVE4@OTS$MOVE4-G decc$txprintf4.b# decc$txprintf4-@ decc$txprintf<yG$ClearInMetaFlags<zb# ClearInMetaFlags<y @$ClearInMetaFlags4lG FilterClose4tIb# FilterClose4@ FilterClose4{G decc$fclose4|b# decc$fclose4{@ decc$fclose4G flush_stream4b# flush_stream4@ flush_stream4-G  decc$txprintf4.b# decc$txprintfJ4-@  decc$txprintf4-G, decc$txprintf4. b# decc$txprintf 4-(@, decc$txprintf4-0GL decc$txprintf4.Db# decc$txprintf4-H@L decc$txprintf4-TGt decc$txprintf4.db# decc$txprintf4-p@tK decc$txprintf4-G decc$txprintf4.b# decc$txprintf4-@ decc$txprintf4SG decc$fflush4Tb# decc$fflush4S@ decc$fflush, Gprogerr, b# progerr, @progerr<Gdump_fiLle_properties<b# dump_file_properties<@dump_file_properties<G,WritePropertiesToDisk<$b# WritePropertiesToDisk<(@,WritePropertiesToDisk<<GTsetTotalWordsPerFile<@b# setTotalWordsPerFile<P@TsetTotalWordsPerFile<}MGCompressCurrentLocEntry<~b# CompressCurrentLocEntry<}@CompressCurrentLocEntry4<GX Mem_ZoneSize4Pb# Mem_ZoneSize4T@X Mem_ZoneSize4#G Mem_ZoneReset4$b# Mem_ZoneReset4#@ Mem_ZoneReset4#GN Mem_ZoneReset4$b# Mem_ZoneReset4#@ Mem_ZoneReset,\Gxemalloc,`b#0emalloc,t@xemalloc4 G verybighash4 b#0 verybighash4 @ verybighash4'G decc$strcmp4(b#0O decc$strcmp4'@ decc$strcmp4)G decc$strlen4*b#0 decc$strlen4)@ decc$strlen4G4 Mem_ZoneAlloc4,b#0 Mem_ZoneAlloc40@4 Mem_ZoneAlloc4+4GT decc$strcpy4,Hb#0 decc$strcpy4+PP@T decc$strcpy4/<GdgetMetaNameByID40Tb#(getMetaNameByID4/`@dgetMetaNameByID4-xG decc$txprintf4.b#( decc$txprintf4-@ decc$txprintf4-G decc$txprintf4.b#( decc$txprintf4-@ decc$txprintf4-QG decc$txprintf4.b#( decc$txprintf4-@ decc$txprintf4-G decc$txprintf4.b#( decc$txprintf4-@ decc$txprintf4-G$ decc$txprintf4.b#( decc$txprintf4- @$ decc$txprintf4-$GD decc$txRprintf4.8b#( decc$txprintf4-@@D decc$txprintf4-DGd decc$txprintf 4.Xb#( decc$txprintf4-`@d decc$txprintf4-dG decc$txprintf4.xb#( decc$txprintf4-@ decc$txprintf4-G decc$txprintf4.b#S( decc$txprintf4-@ decc$txprintf4-G decc$txprintf4.b#( decc$txprintf4-@ decc$txprintf<m G$!getPropNameByName<n!b#PgetPropNameByName<m !@$!getPropNameByName4)(!GD! decc$strlen4*0!b#P dTecc$strlen4)@!@D! decc$strlen4kD!Gh!addDocProperty4l`!b#PaddDocProperty4kd!@h!addDocProperty<?h!G!getMetaNameByName<@x!b#PgetMetaNameByName<?!@!getMetaNameByName,!G!estrdup,!b#Pestrdup,!U@!estrdup<q!G"process_regex_list<r"b#Pprocess_regex_list<q"@"process_regex_list<m"G"getPropNameByName<n"b#PgetPropNameByName<m"@"getPropNameByName4)"G" decc$strlen4*"b#P decc$strlen4)"V@" decc$strlen4k"G#addDocProperty4l#b#PaddDocProperty4k#@#addDocProperty,#G#efree,#b#Pefree,#@#efree<m(#GD#getPropNameByName<n<#b#PgetPropNameByName<m@#@D#getPropNameByName>W4)D#Gd# decc$strlen4*X#b#P decc$strlen4)`#@d# decc$strlen4kd#G#addDocProperty4l#b#PaddDocProperty4k#@#addDocProperty<?#G#getMetaNameByName<@#b#PgetMetaNameByName<?#@#getMetaNameByName<m#XG#getPropNameByName<n#b#PgetPropNameByName<m#@#getPropNameByName4)#G$ decc$strlen4*$b#P decc$strlen4)$@$ decc$strlen4k$G<$addDocProperty4l4$b#PaddDocProperty4k8$@<$addDocProperty<?@$GY\$getMetaNameByName<@L$b#PgetMetaNameByName<?X$@\$getMetaNameByName<m$G$getPropNameByName<n$b#PgetPropNameByName<m$@$getPropNameByName4o$G$PACKLONG4p$b#PPACKLONG4o$@$PACKLONG4k$ZG%addDocProperty4l$b#PaddDocProperty4k%@%addDocProperty<m%G%getPropNameByName <n%b#PgetPropNameByName<m%@%getPropNameByName4o8%GT%PACKLONG4pH%b#PPACKLONG4oP%@T%PACKLONG4kT%G[|%addDocProperty4lt%b#PaddDocProperty4kx%@|%addDocProperty<m|%G%getPropNameByName<n%b#PgetPropNameByName<m%@%getPropNameByName4o%G%PACKLONG4p%b#PPACKLONG4o%@%PACKLONG4k%G%add\DocProperty4l%b#PaddDocProperty4k%@%addDocProperty4-t&G' decc$txprintf4.'b# decc$txprintf4-'@' decc$txprintf4S'G,' decc$fflush4T 'b# decc$fflush4S('@,' decc$fflush,,'GX'emalloc,<'b#]emalloc,T'@X'emalloc<I'G(add_word_to_hash_table<J'b#add_word_to_hash_table<I(@(add_word_to_hash_table4i(G$( addswline4j(b# addswline4i (@$( addswline43`(G(erealloc44d(b#erealloc43^(@(erealloc,(G(emalloc,(b#emalloc,(@(emalloc4-)G) decc$txprintf4.)b# decc$txprintf4-)@) decc$txprintf4S)G) decc$fflush4T)b# decc$fflush4S)@) decc$fflush4 )_G* verybighash4 )b# verybighash4 *@* verybighash4 P*Gt* uncompress24l*b# uncompress24 p*@t* uncompress2D*G*uncompress_location_valuesD*b#uncompress_location_valuesD*@*uncompress_location_values,`*G+emalloc,*b#emalloc,+@+emallocD+G8+uncompress_location_positionsD(+b#uncompress_location_positionsD4+@8+uncompress_location_positions,D+Gl+emalloc,H+b#emalloc,h+@l+emalloc,p+G+emalloc,a|+b#emalloc,+@+emalloc43+G+erealloc44+b#erealloc43+@+erealloc,$-G8-efree,0-b#efree,4-@8-efree4#H-Gl- Mem_ZoneReset4$T-b# Mem_ZoneReset4#h-@l-b Mem_ZoneReset4!-G- swish_qsort4"-b# swish_qsort4!-@- swish_qsort4--G- decc$txprintf 4.-b# decc$txprintf4--@- decc$txprintf4S-G. decc$fflush4T.b# decc$fflush4S.@. decc$fflush4 c.G. uncompress24.b# uncompress24 .@. uncompress24 .G/ uncompress24.b# uncompress24 /@/ uncompress24g/G/ UNPACKLONG24h/b# UNPACKLONG24g/@/ UNPACKLONG2D@/Gd/uncompress_lodcation_valuesDT/b#uncompress_location_valuesD`/@d/uncompress_location_values,t/G/emalloc,x/b#emalloc,/@/emallocD/G/uncompress_location_positionsD/b#uncompress_location_positionsD/@/uncompress_location_positionsD%1eG2compress_location_valuesD&2b#compress_location_valuesD%2@2compress_location_valuesD2G<2compress_location_positionsD02b#compress_location_positionsD82@<2compress_location_positions,@2G\2efree,P2b#efree,X2@f\2efree4e2G2 PACKLONG24f2b# PACKLONG24e2@2 PACKLONG24 2G2 uncompress242b# uncompress24 2@2 uncompress242G3 compress34 2b# compress343@3 compress34g3gG3 UNPACKLONG24h3b# UNPACKLONG24g3@3 UNPACKLONG24eD3Gd3 PACKLONG24fP3b# PACKLONG24e`3@d3 PACKLONG24'3G3 decc$strcmp4(3}#p decc$strcmp4'3@3 decc$strcmp4c4GD4 comma_long4dh$4b# comma_long4c@4@D4 comma_long4-H4Gd4 decc$txprintf4.T4b# decc$txprintf4-`4@d4 decc$txprintf4Sh4G|4 decc$fflush4Tp4b# decc$fflush4Sx4@|4 decc$fflush,4G4emalloc,4b#emalloc,i4@4emalloc4!l5G5 swish_qsort4"x5b# swish_qsort4!55 swish_qsort<W6G$7DB_InitWriteWords<X7b#DB_InitWriteWords<W 7@$7DB_InitWriteWords4-07GD7 decc$txprintf4.47b# decc$txprintf4-@7@D7j decc$txprintf4SH7G\7 decc$fflush4TP7b# decc$fflush4SX7@\7 decc$fflush4U`7Gx7 Mem_ZoneFree 4Vh7b# Mem_ZoneFree4Ut7@x7 Mem_ZoneFree4U|7G7 Mem_ZoneFree4V7b# Mem_ZoneFree4U7@7 Mem_ZoneFree4#k7G7 Mem_ZoneReset4$7b# Mem_ZoneReset4#7@7 Mem_ZoneReset4-7Gd8 decc$txprintf4.7b# decc$txprintf4-`8@d8 decc$txprintf4Sd8G|8 decc$fflush4Tt8b# decc$fflush4Sx8@|8 decc$fflush<;8G8is_word_in_lhash_table<<8b#is_word_in_hash_table<;8@8is_word_in_hash_table4Y8G8 write_word4Z8b# write_word4Y8@8 write_word4-9G89 decc$txprintf4.$9b# decc$txprintf4-49@89 decc$txprintf4-<9GT9 decc$txprintf4.mD9b# decc$txprintf4-P9@T9 decc$txprintf4ST9Gh9 decc$fflush4T`9b# decc$fflush4Sd9@h9 decc$fflush4-9G9 decc$txprintf4.9b# decc$txprintf4-9@9 decc$txprintf4S9G: decc$fflush4T9b# decc$fflushn4S:@: decc$fflush<_$:GD:DB_WriteWordHash<`0:b#DB_WriteWordHash<_@:@D:DB_WriteWordHash4-l:G: decc$txprintf4.x:b# decc$txprintf4-:@: decc$txprintf4-:G: decc$txprintf4.:b# decc$txprintf4-o:@: decc$txprintf4S:G: decc$fflush4T:b# decc$fflush4S:@: decc$fflush4#:GD; Mem_ZoneReset4$:b# Mem_ZoneReset4#@;@D; Mem_ZoneReset,<G$<emalloc,<b#emalloc, <@$<emalloc4 @<pGd< uncompress24\<b# uncompress24 `<@d< uncompress24!<G< swish_qsort4"<b# swish_qsort4!<@< swish_qsort,<G=efree,=b#efree,=@=efree4-$=G= decc$txprintf4.(=b#q decc$txprintf4-=@= decc$txprintf4S=G= decc$fflush4T=b# decc$fflush4S=@= decc$fflush4a=G=build_worddata4b=b#build_worddata4a=@=build_worddata4[=G=write_worddata4\=b#write_worddata4[=r@=write_worddata4-@>GX> decc$txprintf4.P>b# decc$txprintf4-T>@X> decc$txprintf<]X>Gt>DB_EndWriteWords <^h>b#DB_EndWriteWords<]p>@t>DB_EndWriteWords4Ux>G> Mem_ZoneFree4V>b# Mem_ZoneFree4U>@s> Mem_ZoneFree4U>G> Mem_ZoneFree4V>b# Mem_ZoneFree4U>@> Mem_ZoneFree,>G>efree,>b#efree,>@>efree49@G@ decc$isspace4:@b#0 decc$isspace49@@@ decc$isspace494AGLAt decc$isspace4:8Ab#0 decc$isspace49HA@LA decc$isspace43XAGAerealloc44`Ab#0erealloc43A@Aerealloc41BGB decc$tolower42Bb# decc$tolower41B@B decc$tolower41CGC decc$tolower42 Cub# decc$tolower41C@C decc$tolower43XCG|Cerealloc44tCb#erealloc43xC@|Cerealloc<7CG DstripIgnoreLastChars<8Db#stripIgnoreLastChars<7D@ DstripIgnoreLastChars<5 DG$DstripIgnoreFirstChars<6Db#>vstripIgnoreFirstChars<5 D@$DstripIgnoreFirstChars<?EGdEgetMetaNameByName<@XEb#pgetMetaNameByName<?`E@dEgetMetaNameByName43EGEerealloc44Eb#perealloc43E@Eerealloc4-FGF decc$txprintf4.Fb#wp decc$txprintf4-F@F decc$txprintf4=FGF strtolower4>Fb#p strtolower4=F@F strtolower<;FG4Gis_word_in_hash_table<<Fb#pis_word_in_hash_table<;0G@4Gis_word_in_hash_table<7|GGGstripIgnoreLastChars<8Gb#pxstripIgnoreLastChars<7G@GstripIgnoreLastChars<5GGGstripIgnoreFirstChars<6Gb#pstripIgnoreFirstChars<5G@GstripIgnoreFirstChars<;GGHis_word_in_hash_table<<Gb#pis_word_in_hash_table<;H@His_word_in_hash_table4APHGhHTranslateChars4yB`Hb#pTranslateChars4AdH@hHTranslateChars4)IGI decc$strlen4*Ib#p decc$strlen4)I@I decc$strlen4GIG Jisokword4HIb#pisokword4GJ@ Jisokword<;LJGJis_word_in_hash_table<<XJb#pzis_word_in_hash_table<;J@Jis_word_in_hash_table<IJGJadd_word_to_hash_table<JJb#padd_word_to_hash_table<IJ@Jadd_word_to_hash_table 4CKGK fuzzy_convert4D Kb#p fuzzy_convert4CK@K fuzzy_convert4EKGKfuzzy_free_word4FKb#{pfuzzy_free_word4EK@Kfuzzy_free_word4 LGL verybighash4 Lb# verybighash4 L@L verybighash4LGLMcreate_tempfile4 Mb#create_tempfile4HM@LMcreate_tempfile4TMGxM compress14pMb# compress14|tM@xM compress1, MGMprogerr, Mb#progerr, M@Mprogerr4 MGM uncompress24Mb# uncompress24 M@M uncompress2,$OGam dump_file_properties= (%d words)   Mem_ZoneSize setTotalWordsPerFile7 parse_TXT; FilterClose=0";=P0<  decc$getenv decc$atol decc$strcasecmp isdirectory=tmpdir` normalize_path=TEMPx = IgnoreLimit = TMPDIRTMP =0 P;=@(|   decc$removeisfile@ @6=> >=.&%INDEXCompaq C V6.5-001* *= 4`4=initModule_Index4= 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  2  2 3 2  2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 !3" #3 "3  = PK K= P4 4=freeModule_IndexP4= 53 73 @3 C3 J3 <3 Q3 ^3 ^3 \3 h3T h3 k3 k3 m3 m3 o3 o3 s34 = 00 0= 4 4= configModule_Index4= 3 3 3 3 3 3 3 3 3 3 3 3 38 3 3 3( = 4 4=0('remove_last_file_from_list =  =  44=index_no_content 4= &4 &4 &4  ,4 +4 &4  (4 34 ;4 ;4 C4 G4 4 = $ $=  44=alloc_location 4= s4 q4 s4 q4 q4 z4, 4 4 4 4 4 4 4 4 4 4 4 4 4 4  4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 z48 46* 4# 4  4! 4 4 = y y= 44= new_location4= 4 =  = 44=is_location_full4=nfe 4 4 4 4 4 4 4 4 4  4 4  =  = "44=#add_position_location4=B:9 4 4 4 4, = j j= @4 4= do_index_file@4= 5 5 5 5 5  5 !5  25 45 ;5 =5 M5; 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3F 6 6 o +6  96 96 ;6 96 ;6 >6 96  G6 F68 B8 H8 N8 W8 Y8 [8 [8 ]8 c8 e8 e8 n8 r8 n8 n8 t8 u8 {8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 a8( S88 8 >8R 89 8 8 8 8 8\Z Z=  &4=  $e4= 7] ]=v&4= &4= $ = t t=  p.44=!adjustWordPositionsp.4= 8 8 8 8 8 8 8 8 8 8 8 8 8܂ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8  8 8 8t 8 8 8 8 8 8 8 8 9L = @ = 34p4=entrystructcmp34=& %9 #9 #9 = @( (= 344= sort_words34= 49 -9  -9 -9  49 ?9 C9 C9 C9 C9 C9 C9 C9 C9 C99 C9 B9 G9 G9 G9 G9 G9  = , ,=( sortChunkLocations =  = (54P4=)!coalesce_all_word_locations54=7/. 9 9 9 9 8 = O O= 644= write_index64= 9 9 9  9  9 9 9 9` 9 9  9T 9 9 9 9 9 9 9 9 9 9 9 9  9 : 9 9 : : : : 9 : : :  ": $: $: ": ": $:i 1:l  =    = = = = = =  = = = =  = = = 5: 5:U 5: <: @: .: :) I:T: :=  ;4= 4:] ]=v;4= ;4= | =  =  ?44= addword ?4=7/. : : :, : :@ =  = @404= next_word@4=jba : : : : : : : : :< =   = 0B44=next_swish_word0B4={z ; : : ; ; ; ; ; ; !;< = @+ +='build_metaID_list =  = pD4p4= indexstringpD4= g; ?;' k; g;  g;  p; ?;5 =; 4; 7; =; I; K; I;  W;$*T ;V ;f ; ;= ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < < #< #< < < ; ; 0<PZ Z=  tD4=  $e4= ;} }=vtD4= E4= =I >= I< O< O< M< 4: :=  L4= I< =/vL4= L4= L4= L4= L4= 4 =  = $`N44=%coalesce_word_locations`N4= |< h< h< [9 X9  b9 b9 b9 b9 b9 i9 t9  v9 v9 y9 n9 9 9  9 9 9 < <  < < <  <  < < < < < < <+ < < < <  < < < <, < < < < < < <" < < < <x = = = = = = =\Z Z=  N4=  e4= < = l = % %=! SwapLocData = 3 3= 0U4 4= unSwapLocData0U4= H= H=  Y= a= a= c= c= l=  }= = = =? =$ m= q= m= m=!0 = $) )=%sortSwapLocData =  e4g&e4@"x%e4 =  decc$ga_stdout decc$fread decc$fwrite decc$fclose decc$fflush decc$fseek decc$ftell decc$txprintf decc$remove decc$fgetc decc$fputc decc$fopen decc$atol decc$getenv decc$strcpy decc$strcmp decc$strlendecc$strcasecmp decc$isspace decc$tolower decc$$ga___ctypet decc$$gl___ctypea fuzzy_convertfuzzy_free_word DEBUG_MASKemallocereallocefreeMem_ZoneCreate Mem_ZoneAlloc Mem_ZoneFree Mem_ZoneReset Mem_ZoneSizeicomp2 strtolowerTranslateCharsestrdup comma_long process_regex_list verybighash add_word_to_hash_table is_word_in_hash_table>isokwordaddDocProperty WritePropertiesToDiskprogerr progerrnoprogwarn progwarnnonormalize_path isdirectoryisfile read_stream flush_streamcreate_tempfile compress1 compress3 uncompress1 uncompress2PACKLONG PACKLONG2 UNPACKLONG2(compress_location_values(compress_location_positions(uncompress_location_values(uncompress_location_positions CompressCurrentLocEntrycountwords_HTMLparseHTMLtitle isoktitlecountwords_XML parse_HTML parse_XML parse_TXTcountwords_TXT getMetaNameByNamegetMetaNameByID getPropNameByName ClearInMetaFlags FilterOpen FilterClose write_wordbuild_worddatawrite_worddata setTotalWordsPerFile DB_InitWriteWords DB_WriteWordHash DB_EndWriteWords dump_file_properties swish_qsort stripIgnoreFirstChars stripIgnoreLastChars addswlineOTS$ZEROOTS$MOVE P`c$gaww1XSَ]V1.0BBsearchV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$ih6$CODE$ $LITERAL$ $LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8J@New_Search_Object8JSwishSetStructure8JSwishPhraseDelimiter0J(` SwishSetSort0J SwishSetQuery8JpFree_Search_Object0J@  SwishQuery0J  SwishExecute0J@ SwishHits8JFree_Results_Object0JPSwishNextResult0J  SwishSeekResult8J1isMetaNameOpNext8JSwishSearch_parent8JSwishResults_parent8J ResultsSetRefPtr8JSwishResult_parent8J`SW_ResultToSW_HANDLE8JSW_ResultsToSW_HANDLE =#4G^ [~^ ~(08޴@GGG(G(b>@ZkGGG//"! G0B8b4G/@Zk4GTGeG %%b#= //;@G/0@0@ 0@0@/0@/ BP@4G(b@ZkG(c`// # B4G(b0 @a!@F?@P?@@Zk@BGG@Zk%$@@cG]G] }(08ݤ@P#k// /k///Gk// /k///Gk//#C4G^[~G >{@"@Zk= G] #k/k///Gk// 0k/C {(?Fs@#^~^ GGT4B`F/ //0[G4G8{@Zk=AG]] 0#k//B?B#4GSF~^^~ (0޴8G,@GG.x[GbJ$@Zk(BG4G0bGG@Zk G //$8BTG0@@b&B@1@Zk @G?HBG4GPb@ZkG]]} (0ݤ8@#k///F#4G~^^~ (0GGG[b///@Zk0B4G8b@Zk BG4G(bG@Zk(////#B4Gb%@@/@Zk//B4Gb@ZkBG4Gb@ZkG]]} (0@#/k///C#4G^0[~^ GG >8b/@Zk  B4G(b@ZkG]G]] 0#k///Gk/k// /k///k//#~^^~ (0޴8@H>P^XG GGr ĠGGb# @B 4GGb@ZkB$4Gb/@Zk,//4($, /, G GB 4$/ ///,DpB4GxbHBRJBCBtF/`@Zk4 0 A @A A,$pB(@4Gxb@Zk($0@A @?pB,4Gxb/@Zk0DG G@ ////0pB4Gxb @/@Zk D0A A J A_pB04Gxb/@ZkpBG4GxbG@Zk/pB4Gxb@Zk B4G(b,"/@Zk B4G0"(b@ZkpBG4Gxb@ZkG]]} (0ݤ8@H=P]X`#k///#4G^[~^ ~(GGG>b@ZkGb#=_HcCG@b# G`@Gb# _GG]] }(0#k//`#4G^~ ^(~08@޴H[PX>`^h~px޵GGG>b"@ZkB4Gb@Zk=G b# /_ӐB4GGbG 4G@ZkB&4Gbx"@ZkB?&GGx1"GtG@Zk#G0B8b h"@Zk0BGG@",tG8b@Zk0(/BG4Gb@Zk GGG"!  ʰ0Aj  F///ETG""" Bc G(b@Zk *B G4Gb/@ZkB`G4G(*b/@ZkBGG4G, @ZkBb "@Zk,G,,/z//(J///0@BB!!(JTG""b"/@Zk! +BTGX""b"@Zk/4Gk(*@BTGHb ,@ APAQBDB, @ZkBGG, /@Zk BGTG(b"/@ZkGpB (*,GTGxbA!@A0@@Zk!(*, Q!@P0BD0kGGb!/ "GB BG(b4 R"/@Zk%// "G BG B(b/ R" @Zk/@B4G GHb -I@ZkH /_!HD GHBG4Gb/@Zk /a/// 'G4GBb) A G(/@Zk@GG4G"b#0@] gf@BG4Gb/@Zk/*g//&`c$`/'`BtGhb) IA)C@Zk/ G/ǡB`4G "b@Zk =//c]HJ @ /+ 롯 OA/ KݡH砢? H5+ k/`"HtBG4GbH /@Zkݠ /H// HG]G ](}08@ݤHPX=`]h}pxݥ#/k///#4G^P[~^ ~(08޴@GGGGXb>@Zk? DG `cH#b BtGBb "0R"#@Zk  V0G% @CrF/@///0B B0B B0B B0BC BF/ CGCYG CD&////0p0/ `SӢSG/ ///G0@b#@ @G/?c "  H/GG]] }(08ݤ@P#/k///#4G ^~(^0~8@HGGG[b@Zk (B "tG= B0b/@ZkG3/  /,0 %`GG} ///////G 8BTG"="@b@Zk=/G=PDc0`BcGG ](]0}8@HP#k/p#4^~^ ~(08޴@HP>X^`~hpx޵GG G GG GGGGG TG!`BG!"]"tGhb4`E/@ZkB GG8""bG/@Zk'G4GGGG b!'_GGGxb#@' G G?U//BGb0""@ZkB//G(""b@ZkB GP""b@ZkBG@""b@Zk@/4GBG0""?b 4G/@Zk7'?(/BGb("" TG@Zk7'?BGb8"" tG@Zk7'?BGbP"" G@Zk7'?BGb@""G@Zk碖D G7'/{?// .5`AGGA9C bEG JGD7@gGsgGE_8`EGGGb# G G@' GY?X`EGGb# G@' GN?/`EGGb# 4G Gh@' GA? `EGGb#`*@ G' G6?/8DTGb#/'/W@ӀB//KGGb@ZkpBGGTGxbx"@ZkDG%?D%D 4GGGGGG b_8`EGGGGb#/#@//X`EGGb#@/`EGGb#4G @ `EGGb#`@ G' G4G?W0BG4G8b+1`AG@ZkB GG4Gb@ZkGG`b#G@ӡ`AG+ \|A`Ck/GGGb#@//GGb#d@///GGGxb#@//GG4Gb#@//GGb#@G@BG4GHb G@Zk/ g+ G'?/'1'GRG}@B`G4GHb@ZkG]G] }(08ݤ@HP=X]`}hpxݥ#k///#TGG^~ [({G,@Zk= G] #k//0p`;0k/// #`^~h^p~x޴>^~޵G Р GGGG G G _"GPX.JXFHG.BGTGTGb@Zk GD " .J F0BG4G8b/@Zk@0BG4G8b `E@Zk 1@@.PJ> GPBXTG&Xb@ZkB`X@]"GfGb/@Zk@BTGXb*&@ZkG/$,X ?"G$HX%D H'///BXG]"Gb@}"@Zk@BTGXb&@ZkG/B4Gb@Zk,C//@B@=0]"(}"XG"Hb@ZkB0"](="tGb@Zk0 B8"4G(b8/@Zk B G8"4G(b@ZkG/// B4G(b8"@Zk8(] A G0= B4G(bB2B8F8"@ZkGGEw8ݡ/B8" ="H]"GbP}"/@ZkP=H4GBbA" =P?@//@ZkG/` BGP]GbF8"@ZkPGGGG////6rBpBCGFWJF///0 @R"0B Bs"/_P=BX" &tGb GF/@ZkGb#@_ GPGGGGGPb#@ PG4GBQ@$"@Zk`B hb@Zk` BG4GDb//@Zk8'@DB04Gb@ZkBX`G]"@}"Gb/@Zk@B4Gb/@Zk2//`GáG@GG4. &GD"F//"BA""@! PBؑ"rFcر"/0 B! "JG/4@///@B4G G Hb@Zk@@4/h A` G A G/蠧 A/ G/( A/ G/ I4@ G/\//G G/MGFl@A 8 EGb G/smFAӢsmFAsmFA SsmFA/`3smFA B*1A,TG(bJEAG@Zk0BGG GG/@Zk $! ,  //,KP(@BQB$L"+QB@Zk5@E/Gb#////_G/ o// aBo+GGGbpb@Zk/ G/ G/\= 0 A\=)!?Gb#k@G GBX&TGb@ZkGG`]h]p}xݤ=]}ݥ#k/// #?B^_B:D~ ^~޴>GGGGGG G{# /="b#@G@} / c /T@"b#@GE/PGGGG Gm///i@GDO //FgG:[C@Ơ9/@G4/'TGBbB01BIB,G@ZkBGGG/@Zk&pB  BB& 0A$" F@QB$F"//@ZkpB$"$G"&QBP6@@ZkƠGb#/_G GGDG_/?GDG`///GGb#n_GGG_//GG]]} (0ݤ8@H=P`#k/#^$~> ^ ~c (08޴@HP>XG/// !  @/GGGG]G Ѡ}'c; Gc{#A'DZ#GG///@">"@{# BPF@"c_`"`/0@{# ?//BGTG,b@Zk(B GG4G0b@Zk%c!@@ )Ơ=@ 4G//(BG4G0b@Zk$c @@//De )D/_ // F/W// )F/O G@Gb#////_GG_"GGGG8b#@ 0 A (A$Gc @ ^"@ '@FcF"_f"`/0@ ئ"Gb#/c@G]] }(08ݤ@HP=X`#k//4G//#?Bx^_B:D~ ^~޴>^~GGGGGG G{# /="b#@G@} / c /T@"b#@G/GD ///DG G G$g!$!3Bw`P/ GG/E KCY9#AKG&@ 0A A99!JG 0A A/1 JG 0A A/)@yaJG` 0A /= A/!JG 0A A///0B0A GQATG8b/@Zk//pBPA4Gxb@ZkMAAA G$ 0@A PAk!G 'D`b#2B B3B7 J///_G'GGGGGb#*@ BQAG4G$"@Zk@BGHb@Zk`/ GD/wGGx]]}ݤ=]}#k/#!1BTG(^CZ~0^8 >GQ%@G,[b^~ >@ZkB =G@Zk =G=]  >@ G(]0]8@#//GGGGGk/] }"(="@Zk@G/k///0#~^^~ (GGG/ 1/G // B "(b4G@ZkGG]]} (0#/k///11 Bk//#G~^^~ (0GdGGG0/ ///!0@ !0@ !0@ !0@/ !0@/?8DP@4GE@0B8b/@Zk#GG ///"0! 0!/ 0!/ 0!/ 0!/ 0!/? BGGGG(b0b@ZkG//GG/ 0#pa0@ @0"BG4Gb#@ZkGG]]} (0@#/k///#GG~^^~ (0޴8GGG G5///G_F/ GD/@///dG0pCb# G`~_GGG_/GD/G`Gb#j_GGG~_//GG]]} (0ݤ8@#/k///1!JJ Bk, GLemalloc,@b#@emalloc,H@Lemalloc4Greset_lasterror4b#@reset_lasterror4@reset_lasterror,G(emalloc, b#@emalloc,$@(emalloc,DGdemalloc,Lb#@emalloc,`@demalloc4 dGtOTS$ZERO4 p@tOTS$ZERO,;8G\progerr,<L{#progerr,;X@\progerr4[ G4 decc$isspace4\,{# decc$isspace4[0@4 decc$isspace4CG freeswline4Db#( freeswline4C@ freeswline4UG parse_line4Vb#( parse_line4U@ parse_line4WG$ addswline4Xb#( addswline4W @$ addswline4Y8GLfreeStringList4ZDb#(freeStringList4YH@LfreeStringList,Gefree,b#pefree,@efree4CG freeswline4Db#p freeswline4C@ freeswline<QGSwishResetSearchLimit<Rb#pSwishResetSearchLimit<Q@SwishResetSearchLimit,$GDefree,,b#pefree,@@Defree,TGhefree,`b#pefree ,d@hefree,hG|efree,tb#pefree,x@|efree,Gefree,b#efree,@efree,G estrdup,b#estrdup,@ estrdup4CG  freeswline4Db# freeswline4C@  freeswline4C G$ freeswline4Db# freeswline4C @$ freeswline,tGefree,|b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree,4GTefree,<b#efree,P@Tefree,lGefree,xb#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree4SG Mem_ZoneFree4Tb# Mem_ZoneFree4S@ Mem_ZoneFree4SG Mem_ZoneFree4Tb# Mem_ZoneFree4S@ Mem_ZoneFree,Gefree,b#efree,@efree4L Gx reset_lasterror4p b#reset_lasterror4t @x reset_lasterror,; GT progerr,<H b#progerr,;P @T progerr4X Gl reset_lasterror4` b#reset_lasterror4h @l reset_lasterror4 G reset_lasterror4 b#reset_lasterror4 @ reset_lasterror, G emalloc, b#emalloc, @ emalloc4  G OTS$ZERO4  @ OTS$ZERO4I G Mem_ZoneCreate4J b#Mem_ZoneCreate4I @ Mem_ZoneCreate4I G Mem_ZoneCreate4J b#Mem_ZoneCreate4I @ Mem_ZoneCreate,0 GD emalloc,< b#emalloc,@ @D emalloc<G G getPropNameByName<H b#getPropNameByName<G @ getPropNameByName4 G reset_lasterror4 b#reset_lasterror4 @ reset_lasterror, G emalloc, b#emalloc, @ emalloc4  G OTS$ZERO4  @ OTS$ZERO,; G$ progerr,< b#progerr ,; @$ progerr4Ed G decc$strcasecmp4F b#decc$strcasecmp4E @ decc$strcasecmp4E G decc$strcasecmp4F b#decc$strcasecmp4E @ decc$strcasecmp4 G erealloc4 b#erealloc4 @ erealloc4  G OTS$ZERO4  @ OTS$ZERO<G G4 getPropNameByName<H$ b#getPropNameByName<G0 @4 getPropNameByName<M< Gh properties_compatible<NT b#properties_compatible<Md @h properties_compatible4  G set_progerr4 b# set_progerr4  @ set_progerr4  G( set_progerr4b# set_progerr4 $@( set_progerr,4GXestrdup,@b#estrdup,T@Xestrdup<?GPrepare_PropLookup<@b#Prepare_PropLookup<?@Prepare_PropLookup<OGparse_swish_query<Pb#parse_swish_query<O@parse_swish_query4C(GD freeswline4D4b# freeswline4C@@D freeswline4KtGLimitByProperty4L|b#LimitByProperty4K@LimitByProperty4G freefileinfo4b# freefileinfo4@ freefileinfo4AtG sortresults4Bb# sortresults4A@ sortresults4,Glreset_lasterror4`b# reset_lasterror4h@lreset_lasterror4 G set_progerr4b#  set_progerr4 @ set_progerr4Greset_lasterror4b#reset_lasterror4@reset_lasterror4 G set_progerr4b# set_progerr4 @ set_progerr4@GXcompare_results4Pb#compare_results4T@Xcompare_results49@Gd SafeStrCopy4:Tb# SafeStrCopy49`@d SafeStrCopy4 dG decc$strcmp4 tb# decc$strcmp4 @ decc$strcmp4 G decc$strcmp4 b# decc$strcmp4 @ decc$strcmp4 G decc$strcmp4  b# decc$strcmp4 @ decc$strcmp4 G, decc$strcmp4 $b# decc$strcmp4 (@, decc$strcmp4 ,GD decc$strcmp4 <b# decc$strcmp 4 @@D decc$strcmp4 TGt decc$strcmp4 db# decc$strcmp4 p@t decc$strcmp4 G decc$strcmp4 b# decc$strcmp4 @ decc$strcmp4 G decc$strcmp4 b# decc$strcmp4 @ decc$strcmp4 G decc$strcmp4 b# decc$strcmp4 @ decc$strcmp4  G8 decc$strcmp4 (b# decc$strcmp4 4@8 decc$strcmp<=GgetMetaNameByName<>b#getMetaNameByName<=@getMetaNameByName,;Gprogerr,<b#progerr,;@progerr,Gestrdup,b#estrdup,@estrdup4-G decc$strlen4.b# decc$strlen4-@ decc$strlen,Gefree,b#efree,@efree,0GHefree,@b#efree,D@Hefree4G Mem_ZoneAlloc4{#P Mem_ZoneAlloc4@ Mem_ZoneAlloc4%G decc$strrchr4&b#P decc$strrchr4%@ decc$strrchr4- G$ decc$strlen4.b#P decc$strlen4- @$ decc$strlen4-(GH decc$strlen4.4b#P decc$strlen4-D@H decc$strlen<1dG|DB_InitReadWords<2tb#PDB_InitReadWords<1x@|DB_InitReadWords4#|GDB_ReadWordHash4$b#PDB_ReadWordHash4#@DB_ReadWordHash4)GDB_EndReadWords4*b#PDB_EndReadWords4)@DB_EndReadWordsD'G$DB_ReadFirstWordInvertedIndexD(b#PDB_ReadFirstWordInvertedIndexD' @$DB_ReadFirstWordInvertedIndex4)(GDDB_EndReadWords4*4b#PDB_EndReadWords4)@@DDB_EndReadWords,PGdefree,\b#Pefree,`@defree4/pGDB_ReadWordData40b#PDB_ReadWordData4/@DB_ReadWordData<5Guncompress_worddata<6b#Puncompress_worddata<5@uncompress_worddata4+G uncompress24,b#P uncompress24+@ uncompress24+G uncompress24,b#P uncompress24+@ uncompress24+G uncompress24,b#P uncompress2 4+@> uncompress24+,GT uncompress24,4b#P uncompress24+P@T uncompress2DpGuncompress_location_valuesDb#Puncompress_location_valuesD@uncompress_location_values,Gemalloc,b#Pemalloc,@emallocD7Guncompress_location_positionsD8b#Puncompress_location_positionsD7@uncompress_location_positions4x G DB_CheckFileNum4  b#PDB_CheckFileNum4 @ DB_CheckFileNum4 G OTS$MOVE4 @ OTS$MOVE,3 G !getrank,4!b#Pgetrank,3!@ !getrank,!G4!efree, !b#Pefree,0!@4!efree,D!GX!efree,P!b#Pefree,T!@X!efreeD!X!G!DB_ReadNextWordInvertedIndexD"x!b#PDB_ReadNextWordInvertedIndexD!!@!DB_ReadNextWordInvertedIndex,!G!efree,!b#Pefree,!@!efree4"G" bignumhash4"b#P bignumhash4"@" bignumhash4$G($ Mem_ZoneAlloc4$b#P Mem_ZoneAlloc4$$@($ Mem_ZoneAlloc4 ($GD$OTS$ZERO4 @$@D$OTS$ZERO4|$G$OTS$MOVE4$@$OTS$MOVE4$G% swish_qsort4%b#P swish_qsort4%@% swish_qsort4)l%G%DB_EndReadWords4*|%b#PDB_EndReadWords4)%@%DB_EndReadWords4P'Gd'OTS$MOVE4`'@d'OTS$MOVE4t'G'OTS$MOVE4'@'OTS$MOVE4(G( Mem_ZoneAlloc4(b# Mem_ZoneAlloc4(@( Mem_ZoneAlloc4 (G(OTS$ZERO4 (@(OTS$ZERO4(GT)OTS$MOVE4P)@T)OTS$MOVE4X)Gx)OTS$MOVE4t)@x)OTS$MOVE4+G+ Mem_ZoneAlloc4+b#h Mem_ZoneAlloc4+@+ Mem_ZoneAlloc4+G+ bignumhash4+b#h bignumhash4+@+ bignumhash4+G, bignumhash4+b#h bignumhash4,@, bignumhash4/G/erealloc4/b#erealloc4/@/erealloc,/G0emalloc,/b#emalloc,0@0emalloc40G0OTS$MOVE 40@0OTS$MOVE,0G0efree,0b#efree,0@0efree4l1G1 Mem_ZoneAlloc4p1b# Mem_ZoneAlloc41@1 Mem_ZoneAlloc4 1G1OTS$ZERO4 1@1OTS$ZERO4 2G$2 decc$strcmp4 2}# decc$strcmp4  2@$2 decc$strcmp42G2 freefileinfo42b# freefileinfo42@2 freefileinfo,3G3emalloc,3b#0emalloc,3@3emalloc4D4Gd4 swish_qsort4X4b#0 swish_qsort4`4@d4 swish_qsort,4G4efree,4b#0efree,4@4efree =8,Attempted to read results before searching0=8/Attempted to SwishSeekResult before searching`= x=@6Unknown metaname '%s' -- swish_words failed to find.=H?Property '%s' in index '%s' is not compatible with index '%s'=8,Property '%s' is not defined in index '%s' =h[Rank is not defined as an auto property - must specify sort parametersresultSearch Zone=8.Passed in NULL search object to SwishExecute=0(ResultsSetRefPtr - passed null addressX X=0 ;=0, estrdupefree=0";=P0| emalloc reset_lasterror8OTS$ZERO=0P6;=02;= 0"1;=  decc$strcmp===0 "P;=P(< ; set_progerr compare_results=0" ;=P0| =0;=0";= ,  Mem_ZoneAlloc=0"5;=@0| =0( 01;=@0 =0 @2;=0$  freefileinfo=0x"-;=T? 8OTS$MOVE erealloc=0"3;=@(<  swish_qsort;=0"@*;=`D  bignumhash=0"(;=`8 =0"%;=D (uncompress_location_values DB_CheckFileNum(!DB_ReadNextWordInvertedIndex #DB_ReadWordHash% decc$strrchr('DB_ReadFirstWordInvertedIndex )DB_EndReadWords=0`"0;=P + uncompress2- decc$strlen /DB_ReadWordData 1DB_InitReadWords3getrank; 5uncompress_worddata(7uncompress_location_positions=0";=P ;= =(=0= @= P9 SafeStrCopy;progerr =getMetaNameByName ?Prepare_PropLookupA sortresultsC freeswline= swishrank=asc Edecc$strcasecmp=0" ;=T GgetPropNameByNameIMem_ZoneCreate= resultSort Zone8=desc@ KLimitByProperty Mproperties_compatible Oparse_swish_query=0 ;=@,< QSwishResetSearchLimit=0"@ ;=0$ =0 ;=`< S Mem_ZoneFree==0;=0`;=0@;=0 `;=@8| PU parse_lineW addswlineYfreeStringList=0 ;=04 7decc$$gl___ctypea7decc$$ga___ctypet[ decc$isspace=0;=0;=0  ;= ( =0;=0;@ @6=? ?=/'&SEARCHCompaq C V6.5-001U U= 4@4=New_Search_Object4= 1 1 1 1 1 1 1 1 1 1 1 1 1 1^ 1 1 1 1 1  1 1 1 1( =  = 44= SwishSearch_parent4= 2 2  = 0 =  44=!SwishResults_parent4= 2 2  = 0 =  44=ResultsSetRefPtr 4=3+* 2 2 2 2 = ` = 44= SwishResult_parent4= 2 2  = 0 = 44=SwishSetStructure4= $2 =  = !44="SwishPhraseDelimiter4= +2 )2  =  = `4(4= SwishSetSort`4=}| 62 12 62 12 12 12 62 =2 =2 @2 @2 @2 @24 =   = 4p4= Free_Search_Object4=bZY W2 Q2  Q2  [2 _2 d2 l2 j24 = 0 = 4 4= SwishSetQuery4=3+* z2 x2 x2 x2$ = , ,=( New_Results_Object = + +='init_sort_propIDs =  = @44= SwishHits@4= B3 F3  =  = !`44="SW_Res ultToSW_HANDLE`4= M3 =  = "44=#SW_ResultsToSW_HANDLE4= R3  = 0 0=  44=!Free_Results_Object4= e3 ^3 ^3  k3 l3  n3 u3 y3 x3 t3  3 34 3  3 i3* 3D =  = @ 44= SwishQuery@ 4=>65 3 3 3 3$ = s s=  44= SwishExecute 4=  4 4 4 4 !4 2 2 2 2 2 2 2  2 2& 2 2  2 2 2 2 25 2 2V 2 2 3 3 3 3 3  &3 03 3 2 2 2u 3 3 3 2l )3 )3 )3 2 2 2_ 2_ 2a 2\ 4 4>  4 4 4 4 4 4  9n 4 4 E4 94 V4 Y4 ]4 d4 r4T: :=  4= >4: :=  4= 4: :=  4= 4 =  ] ]=v4= d4=  = <Z Z=   4=  te4= (4Z Z=   4=  e4= 2 =7v 4=  4= , 4=  P 4= L 4= 4 4= 8 ='v 4= \4= p4=  4=  = @+ +='limit_result_list = % %=! query_index = \ \=  4 4=SwishSeekResult 4= 4 4 4 4 5 5 5 5 5 5 5 5f !5 !5 !5 !5 !5 !5 !5 !5 %5 )5 )5 )58 = 0 = P44=SwishNextResultP4= 85 85 85 :5 D5  \5 ]5 d5 j5 t5! v5 a5( = p = 44= parseterm4= 5 5 5 5R 5> 5 5 5 5 5 5  5 7 5 5 5 5  5 5 5 5 5 5 5 5 5 7 5 5 5( 5  5  5  5 5 5 5 5  5  5 5= 5 5  5 5 5= 5 5 5 5 5= 5 5 5=  6 6  6 6 6  6 $6 %6 (6 +6 .6 5u) ^6 [6 [6 b6 <6@ >6 C6 5F< H6 K6L: :=  4= =6] ]=v4= 4=  : :=  T4= 5} }=_v T4=  d4= p4= 4= 4= 4= 4= 4= 4=  4= <4= : :=  4= 5 = t: :=  d4= 5} }=vd4= l4=  4=   = ! !=operate =  = 4P4=newResultsList4=B:9 6 6 6 6 6 6 = ` = 4@4=addResultToList4= 6 = 0( (=$test_structure =  = 04P4= getfileinfo04= 6 6 6 6 6 6  6 6 7 7 7 7' (7 +7 07 97 77 97  =7 =7 57 F7 O7 O7 6 6 6 6 e7 o7 t7 t7 7  7 J: M: E: S: P: S: S: S:H S: S: X: [: _: _: _: _: V: ~: : : : : : : : : : : : : : : : : : :  : 6 6  t:; 7XZ Z=  4=  be4= ]7 = x: :=  !4= 7Z Z=  $4=  e4= :] ]=v$4=  $4= ( =   =  ' '=# isbooleanrule = % %=! isunaryrule = $ $=  getrulenum =  = %44=andresultlists%4= 7 7 7 7 9 7 7 7 7  8 7,@ 8: :=  d&4= 7 = 0: :=  %4= 7] ]=v%4= <&4= (l =  0 0= (44= orresultlists(4= ,8 38 F8  X8 Y8  \8 ^8 `8 e8 h8> D8 0 D80 D86 }8 8 = @! !=marknum = " "=ismarked = + +='initmarkentrylist = + +='freemarkentrylist =  = @*4h4= notresultlist@*4=80 8  8 8" 8 8 8D 8 8# 8 8 8F 8 8F 8 8@ 8 8 8 8 87 8 8  8. 8 8) 8@ 8 80< 8Z Z=  ,4=  e4= 8] ]=v,4= ,4= Z Z=  +4=  \e4= 8} }=v+4=  ,4= -4= Z Z=  +4=  >e4= 8] ]=v+4= 4+4= LZ Z=  *4=  {e4= 8] ]=v*4= *4=  = h h= -44=phraseresultlists-4= 9  9  9| 9o 9 9 9 $9$ $9 $9 $9 $9o $9 (9 -9 "9 49 69 A9 96H: :=  d.4= 9 = 0: :=  -4= 9] ]=v-4= <.4= (| = ` = 0144=addtoresultlist014=}ut Y9 Y9 Y9 Y9 Y9 Y9 d9 b9 b9 e9 i9  =  = 144=isMetaNameOpNext14=' q9 s9 v9 = P. .=*"!make_db_res_and_free =  = @244=freeresultlist@24=KCB 9 9 9  9 9 90: :=  24= 9] ]=v24= 24=  =  $ $=  freeresult =  = !244="compResultsByFileNum24= 9  =  ! != !3404="sortresultsbyfilenum34= 9 9 9  9 9 9 9 9 9 9 9 9 9 9( 9 9  !94 =  = 544=notresultlists54=h`_ 9 9 :  : : 9 :8 = P{ {= P644= icomp_posdataP64= ,: = - -=)! mergeresulthashlist =  " : e4  e40 Me4e4e4@e4_e4Q!e4ze4ze46#ze4Uze4Me4 =   decc$strrchr decc$strcmp decc$strlendecc$strcasecmp decc$isspace decc$$ga___ctypet decc$$gl___ctypeaemallocereallocefreeMem_ZoneCreate Mem_ZoneAlloc Mem_ZoneFree SafeStrCopy$ parse_linefreeStringListestrdup properties_compatible getMetaNameByName getPropNameByName addswline freeswline bignumhash freefileinfoprogerr set_progerrreset_lasterror uncompress2(uncompress_location_values(uncompress_location_positions uncompress_worddatacompare_results sortresults %DB_InitReadWordsDB_ReadWordHash(DB_ReadFirstWordInvertedIndex(DB_ReadNextWordInvertedIndexDB_ReadWordDataDB_EndReadWordsDB_CheckFileNum parse_swish_query swish_qsort SwishResetSearchLimit Prepare_PropLookupLimitByPropertygetrankOTS$ZEROOTS$MOVE .@c$stww18Tَ]V1.0AA&errorV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$iT$CODE$ $LITERAL$$LINK$$DATA$8$BSS$ $READONLY_ADDR$ $READONLY$  error_handle8Jset_error_handle8JSwishErrorsToStderr(J0progerr0J`' progerrno0J@ set_progerr0J set_progerrno0J`progwarn0J`  progwarnno0JgetErrorString0JP0 SwishError8JPSwishErrorString8JpSwishLastErrorMsg8J`SwishAbortLastError8J@(SwishCriticalError0J0`reset_lasterror0  error_handle =\T;k/;k///H#(> /@h~^^~ GG{@C@(B8""TG0b/@ZkXB8]"tG0=`b/@Zk(BP""TG0b@ZkhB4G4Gpb/@Zk///#8> /@h^~^ ~(GG{{Cs@cB""TGb/@ZkBH]")tG@=b/@Zk BG(b@ZkPB4GXb/@ZkBG""tGb/@ZkB""TGb@Zk B4G4G(b/@Zk/// #> /@h~^L"8~"[{GHGG?"@ZkG]P#k/LP_FLPHk///#8> /@h^~G[ ^(GGb@ZkB4Gb/@Zk@=H4G B(bH0H=L"C@Zk0B? X}"1 @P]G8b@Zk@B=TGHb/@ZkG] ](p#*k/#(> /@h~^^~ GGP{{Cs@cB""TGb/@ZkB8]"tG0=b/@ZkB""TGb@ZkG]]} `#k//#8> /@h^~^ ~(GG{{Cs@cB0""TGb/@ZkBH]"tG@=b/@Zk BG(b@ZkPB4GXb/@ZkBG""tGb/@ZkB@""TGb@ZkG]] }(p#k// k/Hk//+H{#"{#/L k//(#GG~^^GG / 0 AF/' @ZF0`B#@`[F0`B`PF0`B0`BYbB/?bB @/` [F/`0`BbB/0"@B1" HbtG/@Zk /ssBStBG]] #k///4Gk/x[HGr"0s"F/F0 BӢF0 BF0 B0 BY"B/"B /3 s"F/ 0 B"B/4Gk/q1BQ2B,/k///HGLp"/3#~^^~ GGGLP.SJ@G"b#q_GtGLC"("b#_//`G/"b#a_ "GTGb#_ӰG]b#]}4G 0#"/4Gt#"4xGdecc$txfprintf4b#decc$txfprintf4@decc$txfprintf4Gdecc$txvfprintf4b#-decc$txvfprintf4@decc$txvfprintf4Gdecc$txfprintf4b#decc$txfprintf4@decc$txfprintf4G decc$exit4b# decc$exit4@ decc$exit48GTdecc$txfprintf4Hb#`decc$txfprintf4P.@Tdecc$txfprintf4TGtdecc$txvfprintf4hb#`decc$txvfprintf4p@tdecc$txvfprintf< xGCMA$TIS_ERRNO_GET_ADDR< b#`CMA$TIS_ERRNO_GET_ADDR< @CMA$TIS_ERRNO_GET_ADDR4 G decc$strerror4b#` decc$strerror4 @/ decc$strerror4Gdecc$txfprintf4b#`decc$txfprintf4@decc$txfprintf4Gdecc$txfprintf4b#`decc$txfprintf4@decc$txfprintf4G decc$exit4b#` decc$exit4@ decc$exit<$>0GHdecc$txvsnprintf<({#@decc$txvsnprintf<D@Hdecc$txvsnprintfp p < GCMA$TIS_ERRNO_GET_ADDR< b#CMA$TIS_ERRNO_GET_ADDR< @CMA$TIS_ERRNO_GET_ADDR4 G decc$strerror4b# decc$strerror4 @ decc$strerror41G decc$strlen4b# decc$strlen4@ decc$strlen<G(decc$txvsnprintf< b#decc$txvsnprintf<$@(decc$txvsnprintf4(GD decc$strcat48b# decc$strcat4@@D decc$strcat42Gdecc$txfprintf4b#decc$txfprintf4@decc$txfprintf4Gdecc$txvfprintf4b#decc$txvfprintf4@decc$txvfprintf4Gdecc$txfprintf4b#decc$txfprintf4@decc$txfprintf4hGdecc$txfprintf43xb#`decc$txfprintf4@decc$txfprintf4Gdecc$txvfprintf4b#`decc$txvfprintf4@decc$txvfprintf< GCMA$TIS_ERRNO_GET_ADDR< b#`CMA$TIS_ERRNO_GET_ADDR< @CMA$TIS_ERRNO_GET_ADDR4 G decc$strerror44b#` decc$strerror4 @ decc$strerror4Gdecc$txfprintf4b#`decc$txfprintf4@decc$txfprintf4G decc$txfprintf4b#`decc$txfprintf4@ decc$txfprintf4 8GTdecc$txsprintf4 Db#decc$txsprintf4 5P@Tdecc$txsprintf ==(No search words specified(=8)All search words too common to be usefulX=8,Unknown property name in display properties=0!Unknown property name to sort by= Invalid property type= Unknown metaname=0$Single6 wildcard not allowed as word=0#Wildcard not allowed within a word0=Word not found@=8*Search word exceeded maxwordlimit settingp=0"Failed to setup limit by property=0#No more resultsIndex Header Error=(Could not open index file=(Unknown index file format= 7Index file(s) is empty= Index file error0= Invalid swish handleH= Invalid results object`=MESyntax error in query (missing end quote or unbalanced parenthesis?) =(Invalid error number '%d'=3+Swish aborted with non-negative lasterror| |=0;;=80 0;=`, @decc$txfprintf=err: X7decc$ga_stdout8 OTS$HOME_ARGS= . p decc$txvfprintf decc$exit=0";= $ ;;; decc$txsprintf=0P;=09p;=0 `;= 00 %s8=%s: %s=0;=00;=0  ;=p, CMA$TIS_ERRNO_GET_ADDR= Warning: =  decc$strerror=0 `;=`, =0 ;=p0:  decc$strlen decc$txvsnprintf decc$strcat=0`;=0 ;=P< =0 ;=p, =0;7decc$ga_stderr 64=4=(4=X4=;4= 4= 4= 4=4= 04=@4=`4=p4= 4=4=4=4=4=<4=04=H4@ @6=$ $= > >=.&%ERRORCompaq C V6.5-001~ ~= 44=set_error_handle4= L2 =  =  44=!SwishErrorsToStderr=4= Q2 =  = 044= progerr04=5-, U2 Y2 Y2 \2$ =  = 4`4= progerrno4=6.- l2 p2 p2 s2$ =  = 4@4= set_progerr>4=1)( ~2 2 ~2 ~2 = ` = `404=reset_lasterror`4= 2 2 =  = 44= set_progerrno4=;32 2 2 2 2 =  = `44=progwa?rn`4=5-, 2 2 2 2$ =  =  4`4= progwarnno 4=6.- 2 2 2 2$ =  = 04P4= SwishError04= 2 2  =  } }= P44=@SwishErrorStringP4= 3  =   = p44=SwishLastErrorMsgp4= 3  =  = 44=getErrorString4=ZRQ 23 ,3 ,3$ 13 13 13 13 13 13 33$ =  = 4A@4= SwishCriticalError4=YQP M3 Q3 P3 P3 P3 P3 P3 P3 P3 R3 =  =  `44=!SwishAbortLastError`4=g_^ i3 g3 i3 g3 3e 3R 3g 3g q3 q3 q3 Z Z=  4=  ,e4= o3] ]=Bv4= 4= $Z Z=  4=  fe4= m3 = Z Z=  4=  ,e4= m3 =  =  = 8 8decc$ga_stderrdecc$ga_stdoutdecc$txfprintfdecc$txsprintfdecc$txvfprintf decc$txvsnpriCntf decc$exit decc$strcat decc$strlen decc$strerror CMA$TIS_ERRNO_GET_ADDR OTS$HOME_ARGS  c$gaww1(Vَ]V1.0CCmethodsV1.0 4-AUG-2004 09:32Compaq C V6.5-001   $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ D$READONLY_ADDR$ $READONLY$  data_sources0  data_sources@ @6= >(FileSystemIndexingDataSource> HTTPIndexingDataSource> ExternalProgramDataSource6 @ @=0('METHODSCompaq C V6.5-001 = x x(FileSystemIndexingDataSource HTTPIndexingDataSourceE(ExternalProgramDataSource ww1 NVَ]V1.0@@hashV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$p$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J string_hash0JPint_hashF(JXhash(J(numhash(J@0bighash0J bignumhash0J@ verybighash8Jppadd_word_to_hash_table8J@is_word_in_hash_table8Jfree_word_hash_table =$P.#GPJ&@///0,S@F``Bp.0H"pJ@pJ"@Gp/A@` @pKpK"@@p/S@pK``BpK"@@P.PJA@` @@_1!J Bq";H~>>{FqFF`[[`X[~qN sC #k///GG?"G_Gk/GG'?"G_Gk/B Bq"F3FFtF/`#>>[[`X[~3N B #/k///[1CF2N6%J3CFtsBTBBSB Bk///[1CF2N%J3CFTsBtBBTBBSB Bk/?&GGGH1"j_G/k///#"tG^~ ^(~08@޴HGGGGGР0[G@"8bTFU@G@Zk B=GTG (b@ZkpBG=G@Zk/.C.b#/#/JRCJKY#KFGG/@///GG4G#_`BGhb@Zk BG @TG(b@Zk=PB0@"GA&@/@Zk0BG] ](}08@ݤHP#k///#GGG>GG >/_@@I / /// ]G(}"@Zk !/?GG #k///GG #/k///04G #~^ [^GG({ "@ZkG]] #k4GMem_ZoneCreate4b#pMem_ZoneCreate4@Mem_ZoneCreate4G Mem_ZoneAlloc4b#p Mem_ZoneAlloc4@J Mem_ZoneAlloc4 G OTS$ZERO4 @ OTS$ZERO4 tG decc$strlen4 |b#p decc$strlen4 @ decc$strlen4G Mem_ZoneAlloc4b#p Mem_ZoneAlloc4@ Mem_ZoneAlloc4 GOTS$MOVE4 K@OTS$MOVE4`Gt decc$strcmp4h}#@ decc$strcmp4p@t decc$strcmp4G Mem_ZoneFree4{# Mem_ZoneFree4@ Mem_ZoneFree =0;=0 ;= (  Mem_ZoneFree= 0"L;= ` decc$strcmp=0"p;=P0|  Mem_ZoneAllocMem_ZoneCreate=Word Hash Zone8OTS$MOVE decc$strlen8OTS$ZERO= 0#@;==0P;=0;==0;="= 0#0M;== 0#;=@ @6== ==-%$HASHCompaq C V6.5-001 = 44= string_hash4=^VU o- k- o- o- o- o- o- o- o- o- o- = ~ ~= 4X4= hashN4= v- v-  =  = 04@4= bighash04= }- }-  =   = P44=int_hashP4= -$ - = pw w= 4(4= numhash4= ->OZ Z=  4=  e4= - = 0 = @z z= 44= bignumhash4= -Z Z=  4=  e4= - = 8 = @ = @44= verybighash@4P= - - = 0 = #p4p4=$add_word_to_hash_tablep4= -  -  - - - - - - - - - -4 =  = "4@4=#is_word_in_hash_table4=JBA - - - Q - - - =  = !44="free_word_hash_table4=1)( - . - - = \ =   decc$strcmp decc$strlenMem_ZoneCreate Mem_ZoneAlloc Mem_ZoneFreeOTS$ZEROOTS$MOVE c$stww1 tVَ]V1.0R@@listV1.0 4-AUG-2004 09:32Compaq C V6.5-001P P $ABS$i\ $CODE$g $LITERAL$ $LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J newswline_n0J newswline0J  addswline0J dupswlineS0JP@ addindexfile0J0@ freeswline0J init_header0J@ free_header =d \ #4G^0[~^ ~(GG!B >8b@Zk BG=" ]tG(b@ZkGG]] }(0#/k///#4G^0[~^ GGC8b@ZkB@4Gb @Zk = B"]0 @@ZkG]] 0#/Tk///#~^{#^GGG_//@G/"G]G] #k//#~^^~ (0GGGGG//"b#_/G/Gc/G]G]} (0@#/k///#4G^[~^ ~(08GGG>( %"b@Zk BG %?"G4G/@Zk0B`8b@Zk "@b#>@@BG4GHb/@Zk///(GDUG]] }(08@#/k///#~^^~ GG///p0B4G8b@ZkG//G]]} 0#/k///#?"4G~^[^~ GG(0G00b00 0"@ZkPBGGtGXb`"@Zk@BG4GHb@Zk BTG#"(b@ZkB4Gb0@@ZkPBGtGC" Xb`"@Zk@BG4GHb @Zk B #"TG(b@ZkB4Gb0@@ZkPBGC"tGXb`"@Zk@VBG4GHb@Zk BTG#"(b@ZkB4Gb0@@ZkPBGC"0""tGXb@Zk@BG4GHb@Zk B#"TG(b@Zk B4Gb0@@ZkPBG C"0""$tGXb@Zk@BG4GHb$@Zk B$TG #"(b@Zk(B4Gb0@@Zk,_""4G .BbQ J >4CDCLCTC\CdC@ZkP4G .BbQ J >TC0@B@ZkX4G .BbQ J >\C0@B@Zk`4G .BbQ J >dC0@B@Zkh4G .BbQ J >4C0@B@Zk0W4G .BbQ J >DC0@B@ZkHG0"TG . B(bQ J >4Glp#"/@ZkB"0""0B"tGb/@ZkpBt""TG@xb/@ZktG]]} 0#k///0#4G~^ [^~ GGG (b/@Zk B4G(b /@Zk B4G(b/@Zk  B4G(b$/@Zk B4G(b/@ZkL B4G(bP/@Zkd B4G(bh/@Zk\ B4G(b`/@ZkT XB4G(bX/@ZkD B4G(bH/@Zk4 B4G(b0/@Zk( B4G(b,/@Zk0B4G "8b@Zk0B "4G8b@Zk0B4G8b "/@Zk  B4G(b//@Zk  B4G(b@Zk@Bt4GHb/@Zk 4G(b G]]} 0#k///G]]} 0#k, G<emalloc,4b#emalloc,8@<emalloc4<YG\ decc$strncpy4Tb# decc$strncpy4X@\ decc$strncpy4G decc$strlen4b# decc$strlen4@ decc$strlen,Gemalloc,b#emalloc,@emalloc4GOTS$MOVE4@ZOTS$MOVE,LGemalloc,b#Pemalloc,@emalloc4GOTS$ZERO4@OTS$ZERO,Gestrdup,b#Pestrdup,@estrdup<Gadd_default_metanames<b#Padd_default_metanam[es<@add_default_metanames,tGefree,|b#0efree,@efree,Gemalloc ,b#emalloc,@emalloc4G4 SafeStrCopy4(b# SafeStrCopy40@4 SafeStrCopy4 4\GL sortstring4@b# sortstring4 H@L sortstring4 LGdmakelookuptable4 \b#makelookuptable4 `@dmakelookuptable,hG|emalloc,pb#emalloc,x@|emalloc4|G SafeStrCopy4b#] SafeStrCopy4@ SafeStrCopy4 G sortstring4b# sortstring4 @ sortstring4 Gmakelookuptable4 b#makelookuptable4 @makelookuptable,Gemalloc,b#emalloc,@^emalloc4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4 G sortstring4b# sortstring4 @ sortstring4 G4makelookuptable4 ,b#makelookuptable4 0@4makelookuptable,8_GLemalloc,@b#emalloc,H@Lemalloc4LGl SafeStrCopy4db# SafeStrCopy4h@l SafeStrCopy4 lG sortstring4xb# sortstring4 @ sortstring4 Gmakelookuptable4 b#`makelookuptable4 @makelookuptable,Gemalloc,b#emalloc,@emalloc4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4 G sortstring4b# sortstring4 @ sortsatring4 Gmakelookuptable4 b#makelookuptable4 @makelookuptable,Gemalloc,b#emalloc,@emalloc,0G\emalloc,4b#emalloc,X@\emalloc,hGemalloc,lb#bemalloc,@emalloc,Gemalloc,b#emalloc,@emalloc,Gemalloc,b#emalloc,@emalloc,Gemalloc,b#emalloc,@emalloc,G$emalloc,c b#emalloc, @$emalloc4 8Gdmakelookuptable4 <b#makelookuptable4 `@dmakelookuptable <dGBuildTranslateChars<xb#BuildTranslateChars<@BuildTranslateChars4Gset_fuzzy_mode4b#dset_fuzzy_mode4@set_fuzzy_mode,Gefree,b#@efree,@efree,G4efree, b#@efree,0@4efree,8GTefree,@b#@efree,P@Tefree,XGtefreee,`b#@efree,p@tefree,xGefree,b#@efree,@efree,Gefree,b#@efree,@efree,Gefree,b#@efree,@efree,fGefree,b#@efree,@efree,G efree, b#@efree, @ efree, G4 efree, b#@efree,0 @4 efree,8 GT efree,@ b#@efree,P @T efrgee,X Gt efree,` b#@efree,p @t efree<t G free_word_hash_table< b#@free_word_hash_table< @ free_word_hash_table< G free_word_hash_table< b#@free_word_hash_table< @ free_word_hash_table<h G free_word_hash_table< b#@free_word_hash_table< @ free_word_hash_table, G efree, b#@efree, @ efree, G efree, b#@efree, @ efree4  G free_fuzzy_mode4  ib#@free_fuzzy_mode4  @ free_fuzzy_mode, G4 efree, b#@efree,0 4 efree =og0123456789abcdefghijklmnopqrstuvwxyz =0";=0$  decc$strncpyemalloc=0 j;=0( efree free_word_hash_table free_fuzzy_mode=0 ;=0( makelookuptable= sortstring SafeStrCopy;set_fuzzy_mode=None  BuildTranslateChars=0 @;=0 =0 k@;=@,< 8OTS$ZEROestrdup add_default_metanames=0";=0  8OTS$MOVE decc$strlen=0";=@$< =0" ;=  @ @6== ==-%$LISTCompaq C V6.5-001l = 44= newswline_n4=C;: , , , , , ,( =  = 44= newswline4=80/ , , , ,( =  =  44= addswline 4=1)( , ,m - = p = 44= dupswline4=B:9 - - - -  -, =  = @4P4= addindexfile@4=[SR - - - - - - "-4 =  = @4>n04= freeswline@4=& 7- 3- 7-, =  = 44= init_header4=~ A- A- A- A- D- F- F- G- G- K- K- L- L- P- P- Q- Q- U- U- V- V- Z- Z- [- [- a- a- d-{ d- eo- e- f- f- g- g- h- h- i- i- k- u-( =  = 4@4= free_header4=ldc - }- }- }- - - - - =  = p p decc$strncpy decc$strlenset_fuzzy_modefree_fuzzy_modeemallpocefree add_default_metanames SafeStrCopy sortstringmakelookuptable BuildTranslateCharsestrdup free_word_hash_tableOTS$ZEROOTS$MOVE c$stww1 @ B=G@ZkG]] 0#k///#4G^0[~^ GGC8b@Zk@BCHbTG = @Zk G]] 0#k///#TG^ [~^ GG>C(b@ZkC TGBb=8"@Zk G]] 0#k//(4G0{/k///k/s//#4G^[~ ^(~0GGG >^b/@Zk BG(bGTG@Zk B4G(b@Zk =_"&G ! 2DCFG] ](}0@#k/#Pp B~^^~ (0@B0޴8@GGGq FP/B/âG@0BFGG4G8b@Zk@BG HbGTG@ZkGb#R_ǰ ǰGd3eB@dG]]} (0ݤ8@P#k//t00 #~^^~ (0GGG/B 4Gb@ZkBG4Gb@ZkGB4Gb@ZkB4Gb/@ZkG]]} (0@#k/%#~^^~ (0GGG/B 4Gb@ZkBG4Gb@ZkGG]]} (0@#k/GG/k/////0@/ P@p@@k4,uG<OTS$ZERO48@<OTS$ZERO4lG decc$malloc4b# decc$malloc4@ decc$malloc,Gprogerr,b#progerr,@progerr4 G decc$realloc4  b#` decc$realloc4 @v decc$realloc,(G<progerr,,b#`progerr,8@<progerr4`Gt decc$free4h{# decc$free4pt decc$free4G decc$malloc4b#  decc$malloc4@ decc$malloc,Gprowgerr,b# progerr,@progerr, Gestrdup, b# estrdup, @estrdup4G decc$malloc4b# decc$malloc4@ decc$malloc,G progerr,b#progerr,@ pxrogerr4G decc$free4b# decc$free4@ decc$free4G decc$free4b# decc$free4@ decc$free4G  decc$free4b# decc$free4@  decc$free4 G$y decc$free4b# decc$free4 @$ decc$free4G decc$free4b# decc$free4@ decc$free4G decc$free4b# decc$free4@ decc$free =zrRan out of memory (could not allocatze %lu more bytes)!Ran out of memory (could not reallocate %lu more bytes)! =0"`;=0  ;0 decc$mallocprogerr=0";=0 8OTS$ZERO=0;=0`; decc$free=0 P;=@(< ={0 ;=@,< =0"`;=P8 =0";=@$  estrdup=0;=0";=0   decc$realloc@ @6=< <=,$#MEMCompaq C V6.5-001 = 4P4|= ecalloc4=+#" 2 2 2$ = ` = `44= emalloc`4=:21 2 2 2 2 2$ =  = 4`4=erealloc4=3+* 2 2 2 2  = r r= `4}4= efree`4= 2  =  x x= 4P4= Mem_Summary4= 3 = $ $=  allocChunk =  = 4 4=Mem_ZoneCreate4=zrq 4 2 2 2 2 2 2 4 ~4 4 4 4 Z Z=  4=  ne4= 4 ='v4= 4= 4= 4= ,` =  = `44= Mem_ZoneAlloc`4= 4 4 4  4 4  2 2 2 4 41 5 54Z Z=  4=  ~e4= 4Z Z=  4=  ne4= 4] ]=v4= 4= 0<] ]=v4= 4= LX =   = 44= Mem_ZoneFree4=E=< 5 5  2! 2# 5 2((Z Z=   4=  e4= "5 = Z Z=  4=  e4= !5 = Z Z=  4=  e4= 5 = Z Z=  4=   e4= 5 =  =  = P44= Mem_ZoneResetP4=B:9 H5 C5 J5 2V 2X M5(Z Z=  4=  e4= R5 = Z Z=  4=  e4= P5 =   =  = 4x4= Mem_ZoneSize4=c[Z [5  `5 c5 a5 c5 a5 c5 a5 c5 a5 = x =   decc$free decc$malloc decc$reallocprogerrestrdupOTS$ZERO Pc$frww1 Wَ]V1.0AAmergeV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J merge_indexes =p#^~^~ (0޴8@H>P^X~`hp޵xGGGG#(;////BGG! 'gGb"@Zk(PBGtGXbD (Dr!@G@ZkBG4Gb|x변@ZkH B4Gbn/@ZkDHi($ ""b#Ga!G<@J"k"""b# 6@J"k" 0""b#0@J"k" ""b# *@ J" k" ""b#$@Ӡ"(J"(k"b# 1"@ӀBt 4Gb/@ZkB Gt 4Gb@ZkEB4Gb/ t /@ZkBt G4Gb@ZkBGGbGGP"/@ZkTGBb E" '/@ZkB "+"_"tGb/@ZkBTG 'b"@Zk( 4GGBb 0A!PA@Zk @BG G 0AQA@Zk * G /// `BGTGhbBϢ/@ZkÀB/GTGb@Zk@BG G/OGGHb/@ZkG/%tGBb0D" / G/@Zk%GTG0B8b@ @ /F O@@Zk/ B/GTG(b@ZkBG/ GtGbX"/@Zk`BGTGhb(@Zk//B(GTGb@ZkBG%TGb("@ZkƠŰƠGBb"D/ 'Oh/@Zk ʠ 0AA A~pBp""$gGTGxb@ZkBGpB" 'tGb"/@Zk$GTG"pBxbh1" E/@Zk`BGGTG%hb/@ZkB GG]"4GGb/@Zk$TG$Bb(" '/@ZkBP@4Gb&1@G/@Zk@BGQ@ G GA@'D@Zk+ @@ E"@//0APAg"># BpAAAFAA Ac0APA A (!LlL̲,/ A`/0A! A_BGGG@bbG@ZkB4Gb$g$@Zk$$%/GBG""GGB"}"b@ZkG/( G // B4Gb@ZkG=" GG$hPBXb @w`$E@%ȡ$@/@Zk%// Gg/B$tG%(%Mb@Zk/D[/%(PBG="XbGGI@Zk BG4Gb/@Zk="G GG$$-PBXbG'A%L@ZkBG%GGtGb@Zk//GGGGb#@$M% 4GBb 0@A$M/@Zk% GGGGb#Gv@$%4GBb0@$@Zk%G4GBb@ZkBG4Gb@Zk/s B4Gb//@Zk G$$Bb4G0@G@$ͱ% %/@Zk% GP TGB`Gbh} G(ġX(P\`%+/@Zk G!///hP"(="pBxb4GG$E"GGA,e/@Zk 0@A! MA$X0@%BX="GTGbXﰘ0AP X\/@Zk`BG4Ghb@Zkh]BG4GbGG% "@ZkB8D4Gb"@ZkBG4Gh"GGb@ZkB8D4Gb"@ZkX-1ACB!TGb A N!DQA@Zkh] %JΡMAHHA /(c `//B$ 4Gb@Zk$k/ BG4G(b@Zk@BTG""Hb/@ZkBG=TGb"@Zk( B(¥//B,GTGbG GG@ZkBGtG ,b"@ZkB 4Gb@Zk//ݠD0BG8b="x]"p}"GDDCݰ H@Zk///p+//0ABx=GATGbM@ZkHBx4GF@bF@F@@ZkBF@G="&Hx]"p}"&&AGb@ZkBG ,btG"@Zkp 0Am! B" ,GtGb G G@ZkpB,GTGxb@ZkB4Gb0@P@/@Zk@BGGGtG0@Q@@ZkoBGGb , !HEH9Da(HD </@Zk///BG4G"GGb 0A@ZkB//G"4GGGb/@Zk//DE@/ %ɰ =, $ M(B (GtGb BX"@ZkB 4Gb/@Zk$! /// , HA H <//(#}!! 0`A} /PBGGiGXb]"/@Zk=BG]"b}""G /@Zk`B]"="tGhb/@Zk0B"4G8b/@Zk0B4G"8b@Zk0B G"4G8b@ZkG///B"="]"Gb}"/@Zk=4GBb@"P?@//@ZkG/!BG]GbG GF"/@Zk/ %) GG>BbA@JFGA/@$)QQA1 G@Zk=0@k!0 @ @=2CBGTGbF/ GLNDJ3CFSsBSsBSB3B`/@ZkBG 4GEb/@Zk}ݡ='gA+eAD+D/?0B4G"8b@Zk0B G4G"8bG@ZkoBGGbTG`/@ZkB4Gb@Zk)/;?'Cb$EBGGM %wHLTGb@Zk6H]B4G&CbEF@F@F@F@&FAd &O@ZkġtGB]bX"%O($ )@Zk/]$ 0A  J! A](dB +]("tGb@Zk ¥B4Gb@Zk(c`/B %4Gb@ZkB$4Gb@Zk$cB4Gb@ZkB4GGb/@ZkG(E G@/0 B/je*,/1A豔 1@/ GJ_0@ @ B DtG"b@ZkG]]} (0ݤ8@H=P]X}`hpݥx#k///CC#tG!^0[D~ ^(GG >C^~"^8b@Zk=tG B(b1@Zk0] =G8b] ](`"0#k//G] ](0#k//[ 1rPBQ3B1 B/k/// 0Bk//#TG^0[~^ ~(08޴@GGGG$8b> ~%#@Zk0B%GTG=8b/@Zk0B$GTG%$8b/@Zk0B%GTG =8b/@Zk#. GG..%,PB#J(0#@#GXbyFJGJFG%HFG8D@Zk@BG4GHb@Zk@BG4GHb@Zk@BG4GHb/@Zk@GGHb]]4G }(08ݤ@P#k4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4%G read_header4&b# read_header4%@ read_header4!GfreeMetaEntries4"b#freeMetaEntries4!@freeMetaEntries, G$efree,b#efree, @$efree<)Gfuzzy_mode_value<*b#fuzzy_mode_value<)@fuzzy_mode_value<)Gfuzzy_mode_value<*b#fuzzy_mode_value<)@fuzzy_mode_value4GG$ fuzzy_string4Hb# fuzzy_string4G @$ fuzzy_string4G$G< fuzzy_string4H4b# fuzzy_string4G8@< fuzzy_string, @Gdprogerr, Lb#progerr, `@dprogerr, tGprogerr, xb#progerr, @progerr4#G decc$memcmp4$b# decc$memcmp4#@ decc$memcmp , Gprogerr, b#progerr, @progerr,5Gemalloc,6b#emalloc,5@emalloc49GOTS$ZERO49@OTS$ZEROD=4G\getMetaNameByNameNoAliasD>@b#getMetaNameByNameNoAliasD=X@\getMetaNameByNameNoAliasDA`GxgetPropNameByNameNoAliasDBpb#getPropNameByNameNoAliasDAt@xgetPropNameByNameNoAlias4QxG addMetaEntry4Rb# addMetaEntry4Q@ addMetaEntry, Gprogerr, b#progerr, @progerr4OGgetMetaNameByID4Pb#getMetaNameByID4O@getMetaNameByID4M G8getPropNameByID4N0b#getPropNameByID4M4@8getPropNameByID, <Gdprogerr, Tb#progerr, `@dprogerrD=hGgetMetaNameByNameNoAliasD>tb#getMetaNameByNameNoAliasD=@getMetaNameByNameNoAliasDAGgetPropNameByNameNoAliasDBb#getPropNameByNameNoAliasDA@getPropNameByNameNoAlias, Gprogerr, b#progerr, @progerr, G$progerr, b#progerr,  @$progerr<?8GTgetPropNameByName<@Lb#getPropNameByName<?P@TgetPropNameByName, XGprogerr, tb#progerr, @progerr<?GgetPropNameByName<@b#getPropNameByName<?@getPropNameByName4'GLoadSortedProps4(b#LoadSortedProps4'@LoadSortedProps<IGCreatePropSortArray<Jb#CreatePropSortArray<I@CreatePropSortArray, G4progerr, b#progerr, 0@4progerr,54GTemalloc,6@b#emalloc,5P@Temalloc49TGtOTS$ZERO49p@tOTS$ZERO4K$GD swish_qsort4L8b# swish_qsort4K@@D swish_qsort,DG\efree,Lb#efree,X@\efree4ctGcreate_tempfile4db#create_tempfile4c@create_tempfile,Gefree,b#efree,@efreeD;G4ReadSingleDocPropertiesFromDisk D<b#ReadSingleDocPropertiesFromDiskD;0@4ReadSingleDocPropertiesFromDisk<+PGlCompare_Properties<,db#Compare_Properties<+h@lCompare_PropertiesD;GReadSingleDocPropertiesFromDiskD<b#ReadSingleDocPropertiesFromDiskD;@ReadSingleDocPropertiesFromDisk,Gefree,b#efree,@efreeD;G ReadSingleDocPropertiesFromDiskD<b#ReadSingleDocPropertiesFromDiskD; @ ReadSingleDocPropertiesFromDisk<+ G( Compare_Properties<, b#Compare_Properties<+$ @( Compare_Properties,X Gt efree,\ b#efree,p @t efree, G efree, b#efree, @ efree4/ G freeProperty40 b# freeProperty4/ @ freeProperty4/ G freeProperty40 b# freeProperty4/ @ freeProperty, G efree, b#efree, @ efree,$ GT efree,( b#efree,P @T efreeDed G ReadAllDocPropertiesFromDiskDfp b#ReadAllDocPropertiesFromDiskDe @ ReadAllDocPropertiesFromDisk4 G addDocProperty4 b#addDocProperty4 @ addDocProperty<a( Gd WritePropertiesToDisk<b8 b#WritePropertiesToDisk<a` @d WritePropertiesToDisk<d Gx freeDocProperties<p b#freeDocProperties<t @x freeDocProperties4C| G decc$fwrite4D b# decc$fwrite4C @ decc$fwrite43 G progerrno44 b# progerrno43 @ progerrno4C G decc$fwrite4D b# decc$fwrite4C @ decc$fwrite43 G progerrno44 b# progerrno43 @ progerrno4i GD erealloc4j$ b#erealloc4i@ @D erealloc, G efree, b#efree, @ efree4  G decc$fclose4  b# decc$fclose4  @ decc$fclose4 G decc$fopen4 b# decc$fopen4 @ decc$fopen43 G progerrno44 b# progerrno43 @ progerrno<g G4 DB_InitReadWords <h b#DB_InitReadWords<g0 @4 DB_InitReadWords48 GT decc$txprintf4H b# decc$txprintf4P @T decc$txprintf41T Gh decc$fflush42` b# decc$fflush41d @h decc$fflushD x G DB_ReadFirstWordInvertedIndexD b#DB_ReadFirstWordInvertedIndexD  @ DB_ReadFirstWordInvertedIndex4_ G getentry4` b#getentry4_ @ getentry, Gefree,b#efree,@efreeDGHDB_ReadNextWordInvertedIndexD@b#DB_ReadNextWordInvertedIndexDD@HDB_ReadNextWordInvertedIndex4PGl decc$txprintf4\b# decc$txprintf4h@l decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4WGDB_EndReadWords4Xb#DB_EndReadWords4W@DB_EndReadWords,5Gemalloc,6b#emalloc,5@emalloc49GOTS$ZERO49@OTS$ZERO4 GD decc$fseek4b# decc$fseek4@@D decc$fseek4EPGt decc$fread4Fhb# decc$fread4Ep@t decc$fread4EtG decc$fread4Fb# decc$fread4E@ decc$fread4G  decc$txprintf4b# decc$txprintf4@  decc$txprintf41 G$ decc$fflush42b# decc$fflush41 @$ decc$fflush4SGDB_ReadWordHash4Tb#DB_ReadWordHash4S@DB_ReadWordHash4GDB_ReadWordData4 b#DB_ReadWordData4@DB_ReadWordData<UGuncompress_worddata<Vb#uncompress_worddata<U@uncompress_worddata47G4 uncompress248$b# uncompress2470@4 uncompress2474GL uncompress248@b# uncompress247H@L uncompress247LGh uncompress248`b# uncompress247d@h uncompress2DGuncompress_location_valuesDb#uncompress_location_valuesD@uncompress_location_values,5Gemalloc,6b#emalloc,5@emallocD]Guncompress_location_positionsD^b#uncompress_location_positions D]@uncompress_location_positions40Gladdentry4>4b#addentry4h@laddentry<-GCompressCurrentLocEntry<.b#CompressCurrentLocEntry<-@CompressCurrentLocEntry,Gefree,b#efree,@efree474GH uncompress248@b# uncompress247D@H uncompress247HGd uncompress248Xb# uncompress247`@d uncompress2<-tGCompressCurrentLocEntry<.b#CompressCurrentLocEntry<-@CompressCurrentLocEntry,Gefree,b#efree,@efree<YGcoalesce_word_locations<Zb#coalesce_word_locations<Y@coalesce_word_locations4G( Mem_ZoneReset4b# Mem_ZoneReset4$@( Mem_ZoneReset44GX decc$txprintf4<b# decc$txprintf4T@X decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf41G decc$fflush42b# decc$fflush41@ decc$fflush,Gefree,b#efree,@efree,Gefree,b#efree,@efree4[G( decc$remove4\ b# decc$remove4[$@( decc$remove,(GDefree,8b#efree,@@Defree4G decc$txprintf4b# decc$txprintf4@ decc$txprintf, dGprogerr, b#`progerr, @progerr4G decc$strcmp4b#` decc$strcmp4@ decc$strcmp, Gprogerr, b#`progerr, progerr<|GDecodeDocProperty<b#DecodeDocProperty<@DecodeDocProperty<GDecodeDocProperty<b#DecodeDocProperty<@DecodeDocProperty<GDecodeDocProperty<b#DecodeDocProperty<@DecodeDocProperty<G$DecodeDocProperty<b#DecodeDocProperty< @$DecodeDocProperty4@G decc$txprintf4Tb# decc$txprintf4@ decc$txprintf,Gefree,b#efree ,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,efreeA A=0%Replaced file '%s %s' with '%s %s' (= (date not defined)@=((file name not defined)`=@3Header %s in index %s doesn't match output header=XIHeader %s in index %s doesn't match length in length with output header=H=Removed %6d words no longer present in docs for index '%s' (=8,Processing words in index '%s': %6d words X=8,Processing words in index '%s': %6d words =8)Getting words in index '%s': %6d words =8)Getting words in index '%s': %3d words =(failed to reopen '%s' :=hYFailed to write mapping data: failed to load or create sorted properties for index %sh= swishlastmodified=H;Can't merge index %s. It doesn't contain the property %s=In index %s metaname '%s' is an alias for '%s'(%d). But another index already mapped '%s' to ID# '%d'Failed to lookup alias for %s in output indexX=8+Failed to lookup alias for %s in index %s=PAmeta name %s in index %s is different type than in output index=@2TranslateChars header doesn't match for index %s=PBignoreTotalWordCountWhenRanking Rules doesn't match for index %sP=H:FuzzyIndexingMode in index %s of '%s' doesn't match '%s'= BumpPositionChars=5-Input index '%s' has %d files and %d words L L =0 p;=P0| ;0 DecodeDocPropertyefree decc$txprintf=0 @;=0<  decc$strcmp progerr decc$fclose( DB_ReadFirstWordInvertedIndex decc$fopen= (default) freeDocPropertiesaddDocPropertyaddentry(uncompress_location_values Mem_ZoneReset decc$fseek(DB_ReadNextWordInvertedIndex DB_ReadWordData=fnumh=WordCharacters !freeMetaEntries# decc$memcmp=(IgnoreLastCharEndCharacters;% read_header 'LoadSortedProps=swishdocpath )fuzzy_mode_value +Compare_Properties(-CompressCurrentLocEntry/ freeProperty1 decc$fflush3 progerrno5emalloc;=> ף=0 ;=P 7decc$ga_stdout=Y7 uncompress28OTS$ZERO0;ReadSingleDocPropertiesFromDisk(=getMetaNameByNameNoAlias ?getPropNameByName(AgetPropNameByNameNoAliasC decc$fwriteE decc$freadG fuzzy_string ICreatePropSortArray=wb`K swish_qsort= BeginCharacters= IgnoreFirstChar MgetPropNameByID OgetMetaNameByIDQ addMetaEntry SDB_ReadWordHash Uuncompress_worddata WDB_EndReadWords(Ycoalesce_word_locations[ decc$remove(]uncompress_location_positions_getentry aWritePropertiesToDisk ccreate_tempfile(eReadAllDocPropertiesFromDisk gDB_InitReadWordsierealloc=rb=0 ;@ @6=> >=.&%MERGECompaq C V6.5-001 = 44= merge_indexes4={s 1 1g 2  2 3 3 !3 $3% L3 Y3 \3 Z3 Z3 _3 _3 b3 |3 t3 |3 3 3 3 3 3 3 3 3 3 3f 3& 3 3 3 3 3 3 3 4 4 4 4 4 4D 4 4 4 4 4 4 2 2+ ?4 J4  L4  O4 O4  r4 v4 x4 z4 z4 {4  4 4 G4S 4 4 4  92 :2 4 4  4 4  4  4 4 4 4 4 5 5 5 5 5 5 5 5 5 ?2 ?2 G2  V2 L5  Q5 Z5 `5 `5 `5 a5 a5 a5 b5 b5 b5 ]5 W5 Z2? %5 %5  ,5 /5 45 65 :5 [2 Z2 V2  a2< b2 e2 g2 g2Y j2 l2 l2 s2 z2 {2 |2 2 2 2 5 5 2  2 2 2 2 2 2 2 2 2 2 2 2 2 2 o2T 2 2 2 2 2 j2 e2i 2J 2 2 2 2X: :=  (4= 2 = D: :=  4= [2] ]=v4= 4= ,: :=   4= Y2} }=v 4=  4= 4= : :=  \ 4= ;2} }=v\ 4=  l 4= x 4= : :=  4= :2 = : :=  l4= 2} }=vl4= 84= D4= : :=  4= 2} }=v4= 4= d@4= : :=  04= 2 = : :=  4= 2] ]=v4= 4= \t = @$ $=  dup_header =  = @4`4=compare_header@4=skj ;3 63 ;3 63 ;3 63 63 >3 >3 ?3 ?3 ?3  = , ,=( check_header_match = ' '=# make_meta_map =  =  44=compnums 4=910 3 3 3 3 3  = P, ,=( load_filename_sort = / /= p44= print_file_removedp4= $4 $4 $4 $4 (4 )4 +4 /4 ,4 /4 .4 /4 .4 14 /46 .4 .4 84 84 84 = 0 0=,$# get_next_file_in_order = " "=add_file = ! !=get_map = * *=&dump_index_words = ( (=$write_word_pos =   e4N e4!l e4`/ e4 e4 e4p e4< G e4[  e4 =  decc$ga_stdout decc$fread decc$fwrite decc$fclose decc$fflush decc$fseek decc$txprintf decc$remove decc$fopen decc$memcmp decc$strcmp fuzzy_mode_value fuzzy_stringemallocereallocefree Mem_ZoneResetprogerr progerrnogetentryaddentry coalesce_word_locationscreate_tempfile freeProperty freeDocPropertiesaddDocProperty Compare_Properties DecodeDocProperty WritePropertiesToDisk(ReadSingleDocPropertiesFromDisk(ReadAllDocPropertiesFromDisk uncompress2(uncompress_location_values(uncompress_location_positions CompressCurrentLocEntry uncompress_worddata(getMetaNameByNameNoAliasgetMetaNameByID(getPropNameByNameNoAlias getPropNameByNamegetPropNameByID addMetaEntryfreeMetaEntries read_header DB_InitReadWordsDB_ReadWordHash(DB_ReadFirstWordInvertedIndex(DB_ReadNextWordInvertedIndexDB_ReadWordDataDB_EndReadWords CreatePropSortArrayLoadSortedProps swish_qsortOTS$ZERO 5c$gaww1 YWَ]V1.0BBswish2V1.0 4-AUG-2004 09:32Compaq C V6.5-001x x $ABS$i<$CODE$x> $LITERAL$@$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$ DEBUG_MASK0J SwishAttach0JSwishNew0J@ SwishInit0J  SwishClose8Jfree_swish_memory0  DEBUG_MASK0JSwishSetRefPtr8Jp`SwishWordsByLetter =D<# "4G~^0[^~ GG8b@Zk BG ?"G4G@Zk@BGHb@Zk`BG4Ghb/@Zk"H`4G4G4GLcPBXbFLc@D/@ZkG]G]} 0#k///#~^^~ (0޴8@G(GG>/$PBTGXb /@Zk @B"4GGHb////@Zk0BG4G8bG /@Zk/// B4G(b@Zk0@   B 4G(b@ZkpB4Gxb%"/@Zk BG4G(bG@Zk/`BG4Ghb@ZkBG4Gb@Zk, B4G(b/@Zk,4G B(b/@Zk B4G(b/@Zk B4G(b@Zk B4G(b////@ZkG]]} (0ݤ8@P#/k///#~^^~ GGGp{#h_ӐGGb]]4G} 0#k/k///#~^^~ (0޴8GGG{#_G B7`#,G4G(b#H1 /@ZkGPB"BGbtG`R"/@Zk+//GG/#0BGTG8b0@&@@!@Zk @@BG4G`Hb//@ZkHGb# @ /PBB"GbtG`R"/@ZkG]G]} (0ݤ8@#/k///#~^^~ (GGG(8<//0BG $4GtG8b@ZkGtG$"H B(bG@Zk8#< @8DB<Hc`@///G]]} (0#/k///G//#C4G^ [~G >({@8"@Zk=  G] #k/#^~^ ~(08GGGG^(/0B GTG8b@Zk//@BG=GtGHb@Zk PB "G BXbGG/@ZkGG]] }(08@#k,G4emalloc,,b#emalloc,0@4emalloc44GLOTS$ZERO4H@LOTS$ZERO4LG\ initModule_DB4Tb# initModule_DB4X@\ initModule_DB< \GtinitModule_Swish_Words< hb#initModule_Swish_Words< p@tinitModule_Swish_WordsDGmakeallstringlookuptablesDb#makeallstringlookuptablesD@makeallstringlookuptables4#$GDDB_Close4$4b#DB_Close4#@@DDB_Close4!HGtfreeMetaEntries4"Xb#freeMetaEntries4!p@tfreeMetaEntries4tG free_header4 b# free_header4@ free_header,Gefree,b#efree,@efree,Gefree,b#efree,@efree<'Gfree_word_hash_table<(b#free_word_hash_table<'@free_word_hash_table,G efree,b#efree,@ efree<%G(freeModule_Swish_Words<& b#freeModule_Swish_Words<%$@(freeModule_Swish_Words4)(G< freeModule_DB4*4b# freeModule_DB4)8@< freeModule_DB,@GXefreet t ,Hb#efree,T@Xefree,dGxefree,hb#efree,t@xefree,|Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree,@Glefree,Lb# efree,hlefree4G parse_line4b#@ parse_line4@ parse_line4G set_progerr4b#@ set_progerr4@ set_progerr44GX addindexfile4@b#@ addindexfile4T@X addindexfile4dGfreeStringList4tb#@freeStringList4@freeStringList4G set_progerr4b#@ set_progerr4@ set_progerr,@G\DB_Open,Tb#DB_Open,X@\DB_Open4pG read_header4tb# read_header4@ read_header,G<progerr,,{#progerr,8@<progerr4 Gdecc$strcasecmp4 b#pdecc$strcasecmp4 @decc$strcasecmp4 G getfilewords4b#p getfilewords4 @ getfilewords4G set_progerr4b#p set_progerr4@ set_progerr =@6Invalid index file '%s' passed to SwishWordsByLetter8=0&SwishSetRefPtr - passed null address`= No index file supplied =0";=0( 8OTS$ZERO0emalloc initModule_DB(makeallstringlookuptables initModule_Swish_Words=0"`;=@$< ; decc$strcasecmp getfilewords set_progerr=0 ;= ( progerr=0";=0   read_headerDB_Open=0";=@(|  parse_line addindexfilefreeStringList=0 ;=P, efree free_header !freeMetaEntries#DB_Close %freeModule_Swish_Words 'free_word_hash_table) freeModule_DB=0 ;=0 @ @6=$ $= ? ?=/'&SWISH2Compaq C V6.5-001 = 44=SwishNew4=qih 5 5 5 5 5  5 5 5  5  5  = $ $=  free_index = 2 2= 44=free_swish_memory4= 6 6 5 5 5 5 5 6 6 6  6  )6< .6 .6 16 46 86 0[8{"@Zk=GTG`G]] 0#k/G4G0{#0#4G~^^~ (GGG [(b"@Zk// / /// B4G(b @Zk G]G(b]} (4G0#k/#< F^~0[4G^ GGP#B8b @Zk B =G4G#@Zk G]] 0#k///#4G~^0[^~P" (GGG8b/@Zk$ /0B0`@$ "TG8b /@Zkyb@G]]} (0#k/#4G^[~^ ~(GGG >b@ZkGb#@ =G# a/`[@ZkGG]] }(0#/k///#4G~^^~ GGG``[@ZkXGG`b]]4G} 0#/k///k///#^~^ ~(08GGGG$ /(BGTG0b @Zk/0@y@/?G//G]] }(08@#k///d@b# "Q@_#G~^^GG `"//xs"`4F.Ӣ6F0@B*7F0@B&8F0@B"3!F0@B 0@BAB_yBB `/s"5F/0@ByBB/ B "TG(b@ZkG]]G #k//"rRBGb#]] # ! QAB5/ /k///k/Gk/k/C/k///#C^~^ ~(08GGGG4G{#_BGG4Gb/@Zk0BGGGtG8b/@Zk}G4Gcc[/@Zk dG/`/ B4G0`@4G%(b@Zk BDG $/@Zk @.VJ>G]G] }(08@#k///#^~ ^(~0GGC({#>TGn_(BG="TG0b@ZkB4Gb0,0H/ @ZkB 4Gb@Zk!4G}B#=b#s =s`F`.J/ ///@Zk#0 C# ݢòøB 4Gb@ZkG]G ](}0@#k///#4G^~^ ~(0GGG[>b/@Zk ""Gb#_GG=b#_BC4Gb /@Zkb# _Gb#/s_ӴG]] }(0@#k//Gk/H{# ///GGG{# _Gk//Gk/ k//Gk/k// k/k//{#//0.GG0JI ///3 8 DX D/`<@0.0J"5,B,B5-B2D-B;D.B5/B2D4G;D1DT DGP.PJ?k/p/pK"5,B,B5-BAF-B.B;D4G2D1DT DU`CG@P.PJ/?k//0.0J5,B,B5-BAF-B.B;D4G2D1DT DGP."PJ?k/#G~^G0.0J  #/k///5,B,B5-B-BtF.B ["uFTGvFqF;"({/@ZkCG] #k/#4G~^ [^~ (GGG(b@Zky@/ G)/$1@ BTG(bd@$1@>0."Q0J0"'J/@Zk@d@ BTG.! (b$1@d@PJc JH"/@ZkC B@"TG#,(bA#H'H@Zk@G]]} (0#/k///#GG~^G8_Ӡ5@Gs#/_ӠCG] #/k///#GG~^G _Ӡ5@Gs#/_Ӡ@G] #/k///#4G~^ [^~ (0޴8@GGGG(b@Zk$`@%1@, // $0B8b&@0@f@"/@$//@Zk&/GV7KY&K&?d_Ӡ `BJG4Gd/`[//@Zk.qHPJF>D _G/G]]} (0ݤ8@P#k/ BG4G(b @ZkĠ@0@@tG///@B$GTGHb@Zk#G^~^~ ޴(0GGG = 4G{#W_ӐBGG4Gb@Zk? tG@g///@BGTG"Hb(¤@Zk} D#`0b&C%"/ .PJJPBPBJ///4G$E/e.`B4G"hbStJgJ/@Zk%, %H? GtG //%"pb#@_ӡU @u @Gpb#0D" /7_xD0`@  a@//B4Gb"G@Zk=@/` / İPB4G4GXb"@ZkGG]]} ݤ(0@#/k,,G<progerr,0{#progerr,8@<progerr,Gprogerr,b#progerr,@progerr,Gefree,b#efree,@efree, G<efree,b#efree,8<efree, PG|emalloc, pb#emalloc, x@|emalloc4 |GOTS$ZERO4 @OTS$ZERO4!G decc$txprintf4"b#0 decc$txprintf4!@ decc$txprintf4! GD decc$txprintf4"4b#0 decc$txprintf4!@@D decc$txprintf, |Gemalloc, b#emalloc, @emalloc,TGefree,`b#efree,efree4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp,8GLprogerr,Db#progerr,H@Lprogerr4XGt decc$strlen4hb# decc$strlen4p@t decc$strlen4tGSN_set_current4 b#SN_set_current4@SN_set_current, Gemalloc, b#emalloc, @emalloc4GOTS$MOVE4@OTS$MOVE4GDoubleMetaphone4b#xDoubleMetaphone4@DoubleMetaphone,Gefree,b#xefree,@efree,Gefree,b#xefree,@efree4G4 decc$strcmp4b#x decc$strcmp40@4 decc$strcmp,PGdefree,\b#xefree,`@defree,Gefree,b#Pefree,@efree, G$ estrdup, b#Pestrdup, @$ estrdup4 G decc$strpbrk4 {# decc$strpbrk4 @ decc$strpbrk40 GX decc$strlen4P b#P decc$strlen4T @X decc$strlen4t G decc$strchr 4| b#P decc$strchr4 @ decc$strchr4 G  decc$strchr4 b#P decc$strchr4 @ decc$strchr4 G decc$strchr4 b#P decc$strchr4 @ decc$strchr4GH decc$strlen4@b#P decc$strlen4D@H decc$strlen4dG decc$strcmp4hb#P decc$strcmp4@ decc$strcmp4@GX decc$strlen4Lb#P decc$strlen4T@X decc$strlen4G decc$strcat4b#P decc$strcat4@ decc$strcat4G decc$strlen4b# decc$strlen4@ decc$strlen4  G< decc$strcpy40b# decc$strcpy4 8@< decc$strcpy4G decc$isalpha4b# decc$isalpha4@ decc$isalpha4PGh decc$strlen4Xb# decc$strlen4d@h decc$strlen,Gestrdup,b#estrdup,@estrdup =None=Stem= Soundexsses =ss(=ies0=i8=ss@=ssH=sP=X=eed`=eeh=edp=x=ing==at=ate=bl=ble=iz=ize=bb=b=dd=d=ff=f=gg=g=mm=m=nn=n=pp =p(=rr0=r8=tt@=tH=wwP=wX=xx`=xh=p=ex=y=i= ationalate=tional=tion=enci=ence=anci=ance=izer=ize=abli=able=alli=al=entli=ent=eli=e=ousli =ous(= izationize8=ation@=ateH=atorP=ateX=alism`=alh= ivenessivex=fulnes=ful= ousnessous=aliti=al=iviti=ive=biliti=ble=icate=ic=ative==alize=al=iciti=ic=ical=ic=ful =(=ness0=8=al@=H=anceP=X=ence`=h=erp=x=ic==able==ible=$ $=ant==ement==ment==ent==sion=s=tion=t=ou==ism =(=ate0=8=iti@=H=ousP=X=ive`=h=izep=x=e==e==ll=l= Stemming_en= Metaphone=(DoubleMetaphoneStemming_es= Stemming_fr= Stemming_it= Stemming_pt= Stemming_de(= Stemming_nl8= Stemming_en1H= Stemming_en2X= Stemming_noh= Stemming_sex= Stemming_dk= Stemming_ru= Stemming_fiG G=8-called fuzzy_convert with NULL FUZZY_OBJECT=PCcalled fuzzy_free_data with null valueUnknown FuzzyIndexingMode =8.Invalid FuzzyIndexingMode '%d' in index fileP=3+Options available for FuzzyIndexingMode:  =0";=0 ;0progerr=0@ ;=0";=P4  decc$strlen decc$strcmp decc$strcat=0"@;=0$ 8OTS$ZERO emalloc=0";=@0 p;7decc$$gl___ctypea7decc$$ga___ctypet  decc$strcpyestrdup decc$isalpha=0" ;=0(  decc$strchr= aeiouwxy=aeiou=aeiouy=0" ;=  =0"@ ;=  =0" ;=   decc$strpbrk=0 ;=0$ efree=00 ;`=0 ;=0 ;=0 ;=0;= 0" ;==0p ;=0 ;=0( =0"p;=0$ =0";=@(< @ decc$strcasecmp=0";= @$ Stemx=0"P;=@  DoubleMetaphone=0";=@(< 8OTS$MOVESN_set_current=0;=0;=0"p;=  =0 ;=(00 %s `! decc$txprintf=0p; ={6x44= 46=644= #6X4444h4H4 484> 64p4= 644= 644= 64>soundex= 64x4= 64x4= 644>spanish_create_env>spanish_close_env> spanish_stem=644>french_create_env>french_close_env> french_stem=644>italian_create_env>italian_close_env> italian_stem=64 4> portuguese_create_env> portuguese_close_env>portuguese_stem= 644>german_create_env>german_close_env> german_stem= 6(44>dutch_create_env>dutch_close_env> dutch_stem= 6844>porter_create_env> porter_close_env> porter_stem= 6H44>english_create_env>english_close_env> english_stem= 6X44> norwegian_create_env>norwegian_close_env>norwegian_stem=6h44>swedish_create_env>swedish_close_env> swedish_stem= 6x44>danish_create_env>danish_close_env> danish_stem=644>russian_create_env>russian_close_env> russian_stem=644>finnish_create_env>finnish_close_env> finnish_stem=e64 4= f6(404= g684@4= h6H4P4=  6=i6X4`4= j6h4p4= 4=k6x44= 46=l644= m644= n644= o64 4= p644= q644= r644= s644= t644= u64 4= v6(404= w684@4= x6H4P4= y6X4`4= z6h4p4= 46=644= 644= 644= 644= 644= 644= 644= 644= 644= 64 4= 6(404= 684@4= 6H4P4= 6X4`4= 6h4p4= 6x44= 644= 644= 644= 644='6h=-644= .644= /644= 0644= 1644= 464 4= 56(404=$6=684@4= 6H4P4= 6X4`4 = 6h4p4= 6x44= 644= 644= 644= 644= 644= 644= 644= 644= 644= 64 4= 6(404= 684@4= 6H4P4= 6X4`4= 6h4p4= #6 =6x44= 644= 46 @ @6=@ @=0('STEMMERCompaq C V6.5-001 = 44= fuzzy_convert4=)! 5 5 5 = pw w= p4p4= no_stemp4= 5  =  = 44=fuzzy_free_word4=VNM 5 5 5 5 5 5 5 5 =  = @44=create_fuzzy_word@4=UML 5 5  5 5 5 5 5$ =  = 404=dump_fuzzy_list4=PHG 5 5 5 5 5 5 5 5$ =  =  p44=!create_fuzzy_structp4=MED 5 5 5 5 5 5( =  = 44=free_fuzzy_mode4=A98 6 6 6 6 6 6 =  = 44=set_fuzzy_mode4=3+* 6 6 6 60 6  =  = p44=get_fuzzy_modep4=yqp -6 (6 (6, ,6 ,6 ,6 ,6 ,6 ,6 ,6 36 /6 /6 /6 = 0 = 4 4= fuzzy_string4=# ?6 >6 A6 = 0 = 44=fuzzy_mode_value4= F6 H6 =  } }= 44=stemmer_applied4= N6 =  = 44= Stem_sno!wball4=e]\ U6 U6 X6 Y6 `6 f6 f6 m6( = @ = P4x4=double_metaphoneP4=vnm p6 p6 r6 w6 ~6  6 6 6  = @ = 4P4= SwishStemWord"4=KCB 6 6 6 6 6( =  = p 44=SwishFuzzyWordp 4= 6 6  = 0 =  44=SwishFuzzyMode 4= 6 6 = 0 =  44= SwishFuzzy#WordList 4= 6 6  =  =   4p4=!SwishFuzzyWordCount 4= 6 6  =  =   4`4=!SwishFuzzyWordError 4= 6 6  =   = 0 4@4= SwishFuzzyWordFree$0 4= 6 =  = @ 4@4=WordSize@ 4=nfe 7 7  7 8 7 7 7 7 7 78 7 7 = @ =  44= ContainsVowel 4=*"! 8 8 8 =  =  %4P4= EndsWithCVC 4=UML 58 58 58 >8 >8 ?8 ?8 >80 =  y y= @ 44= AddAnE@ 4= S8$ = `| |=  44= RemoveAnE 4= h8$ = ` = &4P4= ReplaceEnd4= 8 8 8 8 8 8 8 8 8 8 80 8 = * *= 44= Stem4= 8 8 8 8 8 8( 8  8 8 8 8 8 8A 8 9' 9 9 9, = D = @ @ decc$txprintf decc$strcat decc$strchr decc$strcpy decc$strpbrk decc$strcmp decc$strlendecc$strcasecmp decc$isalpha decc$$ga___ctypet decc$$gl___ctypeaSN_set_currentprogerrsoundexestrdupemallocefreeDoubleMetaphone >(spanish_create_env spanish_close_env spanish_stem french_create_env french_close_env french_stem italian_create_env italian_close_env italian_stem portuguese_create_env portuguese_close_envportuguese_stem german_create_env german_close_env german_stem dutch_create_envdutch_close_env dutch)_stem porter_create_env porter_close_env porter_stem english_create_env english_close_env english_stem norwegian_create_env norwegian_close_envnorwegian_stem swedish_create_env swedish_close_env swedish_stem danish_create_env danish_close_env danish_stem russian_create_env russian_close_e*nv russian_stem finnish_create_env finnish_close_env finnish_stemOTS$ZEROOTS$MOVE c$txww1Xَ]V1.0CCsoundexV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$$LINK$ $DATA$$BSS$ +$READONLY_ADDR$ $READONLY$(Jsoundex =#GTG^~`[^~ (޴08@>HGGG4Ghb@Zk=0BGG8b4G!0@ @ C.0BVJ4G"8b ¤>/@Zk=@4G4G]"#HDDgHDc @-c  HIIr.DC"StJgJs"@.JwFzxJ ///`8/Y8K:G8?0 @3gJgJ0 B B @hGR"B4G4Gb"@ZkGG]]} (ݤ08@=HP#/k<GTcreate_fuzzy_word<Lb#c-reate_fuzzy_word<P@Tcreate_fuzzy_word4XG decc$strlen4db# decc$strlen4@ decc$strlen4G decc$strcpy4b# decc$strcpy4@ decc$strcpy4 G  decc$isalpha4 b# decc$isalpha4 .@  decc$isalpha4 G4 decc$strlen4(b# decc$strlen40@4 decc$strlen4tG decc$tolower4|b# decc$tolower4@ decc$tolower4G decc$strlen4b# decc$strlen4@ decc$strl/en, Gestrdup, b#estrdup, @estrdupl l=0";=P@ ;0 decc$strlen7decc$$gl___ctypeaP decc$strcpy create_fuzzy_word decc$tolower estrdup7decc$$ga___ctypet decc$isalpha:0 :="123122245512623122@ @6=@ @=0('SOUNDEXCompaq C V6.5-001 = 44= soundex4=VN $3 $3 $3 &3$ ,3 K3  S3  ]3 ]3 ]3  i3 3 3 3 3 3 3 3 31 3 3 3 3 3 3J 3 3 3 3  3 34 =  =   decc$strcpy decc$strlen decc$isalpha decc$tolower decc$$ga___ctypet decc$$gl___ctypea create_fuzzy_wordestrdup c$stww1>Xَ]V1.0CCdocpropV1.0 24-AUG-2004 09:32Compaq C V6.5-001  $ABS$i<$CODE$. $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J freeProperty8Jx0freeDocProperties0J  freefileinfo8Jp0allocatePropIOBuffer0J3getDocProperty0JCreateProperty8J addDocProperties0JP@addDocProperty8J0Compare_Properties8JX@getResultPropAsString8JDecodeDocProperty8J8 getResultPropValue8J0 freeResultPropValue@JReadSingleDocProperti4esFromDisk@JReadAllDocPropertiesFromDisk8J(SwishResultPropertyStr@J SwishResultPropertyULong0Jappend_property = 4G({k///k///0GG// #~^^~ (0GGGG //B4Gb///@Zk0@ # @?G]Gb]} (045G@#/k///G4Grk///#~^^~ GGG{#////_4GBb/@ZkG]]} 0#k///#4G^~^ ~(0GGGG"@ZkB "4Gb/@ZkS//BTGbD$"@ZkG//pBDG4G xb@ZkBG4Gb@Zk0B"4G8b/@ZkB@BGGHbGGR"@ZkG%pBDG4G6xb@ZkBG4Gb@ZkPBCG`""tGXb@ZkG BTG#b"@ZkB4Gb "/@ZkG]] }(0@#k///1# ^~(^0~ 8@HGGGGG~ ///}BGTG"b@ZkG/ BTG(b0$Fq 8""@Zk"#0?"_"!(! caL!!HN%HG4 D1@2D/B4Gb@ZkG="4G"0b#/@T// BT7Gh""(b@ZkcB4Gbc@Zk="G"4G0b#@;/ BTGX""(b@ZkB4Gb/@ZkG="4G"0b#@$// BTGH""(b@ZkcB4Gb c G/@ZkGGG"G0b#@ ///G} #"b#>@G ](]0}8@HP#k/#G4G^~h[ ^(~0GG"pb/@Zk//G="hb#<_hBG"4Gpb@Zk Ghb#_B8G4Gb@ZkG] ](}0@#k//#4G^~ ^(~08@޴HGGGh[>xpb"@ZkHBTG=Pb "@ZkxBXB"G $}`bR"/@Zk( E/#G="b#GG !!H_G/ 5/Gb#h_BGG4Gb@Zkf,BG4GbfH@Zk 0eB4Gb ` $P?@/@Zk0G BQ@@Zk =B4Gb!A#@/@Zk0GD@9İG] ](}08@ݤHP#k//#G^~^ ~(GGC{# >C%@] GB }Gb @ @! FF " R R2B`R"/@ZkGb#@G]] }(0#/k///#4G^~ ^(~08GGGG^hX[`b0"/@Zk8BG@bTG "@Zk" GchBGHBPb cR"#@ZkbBG4Gb H@Zk? G=" Gb#G]:1_GGL/=XB4GTG`b! F/D0@BdD#"/@ZkBG4Gb@ZkG2///!F(B4G0b //@ZkBGG4G$b@ZkG/"F(B4G0b //@ZkBGG4G$b@ZkG/hXBTG`b"@ZkGG] ](}08@#k/+GG4G8D0#~^[^~ GGG b@ZkGGb]]4G} 0#k///;G4Gqk///k///#^~ ^(~08@޴HPXGGGG ۤ>&%d#/ D/Z[KGKQQC1!F/ //D.8B4Gd"@bRSJGJ/@Zk c$,HBGPb4G$H/[ @ZkBGG4Gb/@Zk///$@G!eH"/ (.Q2J'JQ3B1!F/ //.8B4G"@bTJJ/@Zk.'1@PJ!>/=G4GBbDw@//</@ZkhBG="GTGtGpb@Zk(B!G&GTGb"@ZkBG4Gb/@Zk///à0@ð/G///G] ](}08@ݤHPX`#/k///(tGBbH.@"HJ!RHJ GJG@ZkBG4Gb =ld@ZkXBG4G`b@Zk.qH0HF"tIPH"#wuHpHf#PJzHF>f.SrJGtFf>.VJF>&/Y8K:GB&?,@H4Gb<=@ZkGD=DGG/G".JJ`/B@yFJ" `.JF /XKG ?f/`J[fK `Gf?-! If,CfHf<=BG4Gb/@Zk~//B4Gb(@Zkr//#C^~ ^(~08@GGGG`GGG>"{#_G//G /GD/c @FaD@B4GHb@@Zk BGG"G4G@Zk0BG8b/@ZkGG] ](}08@P#>/k///# ^~~"(^0~8@H޴PGGGG>"`{#C_Ӏ"//xGXB!"R/ 0.Q0J'JPBF/* //}B4Gb.s"TJJ@Zk"X"!1 01Bp@P."PJPBFB //cB4Gb31`Bs@.s"J@Zk@4GBb0@?@ !BQF /0@Zk./@  @B @QF %@G(B@GTG0b@ZkGG 0 @@a"?.uSJTJF>âBv@]"G@Zkð4GBb////@ZkG ]G(]0}8@HݤP`#/k/// #~^^~ (0޴8@H>P^XGG%GGGGGG G âGGb#GGBVGPF/ @ BG*btG"@Zk C0A A A_G]]} (0ݤ8@H=P]X`#/k///#4G ^~(^0~8@HGGGG^[@b~/+10 @P!@@ZkGG`"$0 @ R 2 @ AB@BF//B s" B B</0Bs" B5//%GBb 8C0CQC* TG@ZkG  0@3BR @ pB 3@R"F////!@ R" 3@ 0@/0 @R" 0@0B$G]}C%C# d`G`b#//_/PB4Gb"@ZkGG="Ab#]}=_}@/D@4GG ](]0}8@HP#k///?BC#_BtF^~ ^ ~uFC(0GF84G [G3`GG2"0(b"tGDC@Zk'//D0BD" C$tG8bQBqF$"]C/@Zk /@B]"$"tGHb@Zk/c d@///GG]] }(0@#k///#4G~^^~ (GGGG0 [ (b"@BZk,B4Gb0#@ //@Zk0?$B4GbL! @@ FG/@Zk,0,G]]} (0#/k///0#4G^~^~޴G#GGG G P=G/@@[Hb/@Zk //G/ &GTGBbA@x"! @Zk0BGGTG8b@ZkDDݠƠG4G "Pb#@&F@ @g ƠG&"cF" @FF"J_Y/àPBGH"C]G@"XbG޴/@ZkG//GE/@}H}GG8}}`@}'://@=b#P_`BGG8="}GGhb@ZkBG 8]}Gb"@ZkG///8G@G`///@]@ "Pb#PTx" @pF4GFP"_ӀBGG4Gb@ZkGG]]}ݤ#k//p#"<@8>H^ 0[~P^X~`hp޴xGGGb  G4G/@Zk DGGG%// $G8="b#G'@A]_ G@""`="@b#4G_BG4Gb@Zk0@@ @@B4Gb/@ZkGH]P]X}`hpݤx#k,Gefree, {#efree ,efree,Gefree,b#xefree,@efree,GEefree,b#xefree,efree,Gefree, r#xefree,efree,pGefree,tb#efree,@efree,Gprogerr,b#progerr,@progerr,F Gestrdup,b#estrdup, @estrdup4/$GD bin2string40,b# bin2string4/@@D bin2string,PGlemalloc,db#emalloc,h@lemalloc4)pG UNPACKLONG4*|b# U>GNPACKLONG4)@ UNPACKLONG<1Gdecc$__utctz_localtime<2b#decc$__utctz_localtime<1@decc$__utctz_localtime<3Gdecc$__utc_strftime<4b#decc$__utc_strftime<3@decc$__utc_strftime,Gemalloc,b#Hemalloc,@emalloc4)G UNPACKLONG4*b# UNPACKLONG4)@ UNPACKLONG45G(decc$txsprintf46 b#decc$txsprintf45$@(decc$txsprintf44GLprogwarn4@b#progwarn4H@LpIrogwarn, LGdestrdup,Tb#estrdup, `@destrdup4G getPropNameByID4b#getPropNameByID4@ getPropNameByID4'$GD is_meta_entry4(,b# is_meta_entry4'@@D is_meta_entry4GPACKLONGJ4b#PACKLONG4@PACKLONG4'G is_meta_entry4(b# is_meta_entry4'@ is_meta_entry4GPACKLONG4b#PACKLONG4@PACKLONG4'0GH is_meta_entry4(@b#K is_meta_entry4'D@H is_meta_entry4HGdPACKLONG4Xb#PACKLONG4`@dPACKLONG4'G is_meta_entry4(b# is_meta_entry4'@ is_meta_entry4 G decc$strlen4 b# decc$strlen4 L@ decc$strlen, TGestrdup,xb#Xestrdup, @estrdup, Gestrdup,b#Xestrdup, @estrdup,Gefree ,b#Xefree,@efree,DGdprogerr,Xb#M(progerr,`@dprogerr<+hGgetPropNameByName<,tb#(getPropNameByName<+@getPropNameByName4-G set_progerr4.b#( set_progerr4-@ set_progerr,G(efree, b#(efree,$N@(efree,,GHefree,8b#(efree,D@Hefree,TGtemalloc,\b#(emalloc,p@temalloc47GOTS$ZERO47@OTS$ZERO,Gefree,b#(efree,@Oefree4-L G set_progerr4.X b# set_progerr4- @ set_progerr, G$ progerr, b#8progerr, @$ progerr<+, GH getPropNameByName<,4 b#8getPropNameByName<+D @H getPropNameByName4-d PG| set_progerr4.h b#8 set_progerr4-x @| set_progerr, G emalloc, b#8emalloc, @ emalloc4/ G$ bin2string40 b#8 bin2string4/ @$ bin2string,$ G< efree,0 b#8efrQee,8 @< efree4)T Gt UNPACKLONG4*\ b#8 UNPACKLONG4)p @t UNPACKLONG,t G efree, b#8efree, @ efree4) G UNPACKLONG4* b#8 UNPACKLONG4) @ UNPACKLONG, RG efree, b#8efree, @ efree, G progerr, b#8progerr, @ progerr,\ G efree, b#efree, @ efree, G efree, b#efree,  Sefree, G efree, q#efree,  efree4  G decc$isspace4  b#x decc$isspace4  @ decc$isspace,  G estrdup, b#xestrdup,  @ estrdup4  G decc$strlen4  b#Tx decc$strlen4  @ decc$strlen4 TGt decc$isspace4 `b#x decc$isspace4 p@t decc$isspace,Gemalloc,b#xemalloc,@emalloc 4G decc$strtoul4b#x decc$strtoul4@U decc$strtoul4G  progwarnno4b#x progwarnno4@  progwarnno, G$efree,b#xefree, @$efree4Gprogwarn4b#xprogwarn4@progwarn,GefrVee,b#xefree,@efree4GPACKLONG4b#xPACKLONG4@PACKLONG,`Gefree,tb#xefree,@efree4 8GT decc$strlen4 Hb#x decc$strlen4 PW@T decc$strlen4`Gtprogwarn4hb#xprogwarn4p@tprogwarn,G,emalloc, b#emalloc,(@,emalloc4,GHOTS$MOVE4D@HOTS$MOVE,LGhefree,Xb#efrXee,d@hefree4 TGt decc$isspace4 \b# decc$isspace4 p@t decc$isspace4 G decc$isspace4 b# decc$isspace4 @ decc$isspace,G(efree,b#efree,$@(efree4PYGherealloc4`b#erealloc4d@herealloc4GOTS$MOVE4@OTS$MOVE,Gefree,b#efree,@efree4Gprogwarn4b#progwarn4@Zprogwarn,|Gemalloc,b#Pemalloc,@emalloc4LGlerealloc4Pb#Perealloc4h@lerealloc4TGhprogwarn4\b#Pprogwarn4d@hprogwarn4!(Gd[ decc$memcmp4"Hb#0 decc$memcmp4!`@d decc$memcmp<#tGdecc$strncasecmp<$b#0decc$strncasecmp<#@decc$strncasecmp4%G decc$strncmp4&b#0 decc$strncmp4%@ decc$strncmp,dGxprogerr,\lb#pprogerr,t@xprogerr,|Gefree,b#pefree,@efree,Gemalloc,b#pemalloc,@emalloc<tGinit_property_list <xb#init_property_list<@]init_property_list,Gprogerr,b#progerr,@progerr4GgetPropNameByID4b#getPropNameByID4@getPropNameByID4dGDB_ReadProperty4b#DB_ReadProperty4@DB_ReadProperty4G^ uncompress4  b# uncompress4@ uncompress4G<progwarn40b#progwarn48@<progwarn,Gefree,b#efree,@efree<Gdinit_property_list<Hb#_init_property_list<`@dinit_property_list,Gefree,b#efree,@efree,Gefree,b#efree,@efree =H=EncodeProperty called but doesn't know the property type :(@=H9EncodeProperty - Invalid char '%`c' found in string '%s'=peEncodeProperty - Attempted to convert '%s' to a numberWarning: Attempt to add duplicate property.=0'Asked for too small of a buffer size!=pbFailed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d x=8,Mapped propID %d to invalid property index=8*Failed to add property '%s' in file '%as'=@5Swish-e database error. Unknown property type '%d'=(Invalid property name '%s'0=8,Called getResultPropValue with NULL result`=(Property '%s' is not numeric=8*Invalid property type for property '%s' = %Y-%m-%d %H:%M:%S %Z=8*DecodeDocProperty passed NULL meta_entryb=>6SwishResultPropertyStr was called with a NULL result =0; efreeemalloc progwarnnoprogwarn decc$strlen7decc$$ga___ctypet=0" ;=`0 7decc$$gl___ctypea; decc$isspace estrdupPACKLONG decc$strtoulc=0";=P(< 8OTS$MOVE=0 ";=`,| @erealloc=0 "@;=P(< =0"0;=0$ progerr=0";=(,| (default) getPropNameByID init_property_list DB_ReadPropderty uncompress=0H";=P =0";=@< ! decc$memcmp #decc$strncasecmp% decc$strncmp=0  ;=`< =0 0 ;=0@ =0 ";=P0< ' is_meta_entry= Yswishrank= swishdebfile=swishfilenum(=swishreccount8=0" ;=@$ `) UNPACKLONG +getPropNameByName- set_progerr/ bin2string=0# ;=0 =0";= @$  1decc$__utctz_localtime 3decc$__utc_strf>ftime5decc$txsprintf=%lu(=0";=P,| 8OTS$ZERO=(null)=0"@;=@( =0 0;=@8< =0  ;=0 @ @6=@ @=0('DOCPROPCompaq C V6.5-001 = g44= freeProperty4= :8 98 = 0 = 04x4=freeDocProperties04=XPO J8 F8 F8 :8 98 J8 P8 P8 P80Z Z=  4=  (e4= M8 =   =  =  4h4= freefileinfo 4=80/ _8 b8 h8 h8( =   = 44=DecodeDocProperty4= ~8 ~8 8 8 8 8 8 8 8 8 8 8 8 8, =  = 44=getDociProperty4=}| 8 8 8 8 8 8 8( =  = "@4X4=#getResultPropAsString@4=LDC 9 9 9 $9 :8 :8$Z Z=  4=  (e4= +9] ]=vj4= 4=  =  = #4(4=$SwishResultPropertyStr4= @9 @9 D9 @9 M9 R9 Y9 :8( :8, g9 l9 t9 w90Z Z=  4=  (e4= f9] ]=v4k= 4=  =  = % 44=&SwishResultPropertyULong 4=jba 9 9 9 9 9 9 9 9 9 9  = w w=  484= getResultPropValue 4=  9 9 9 9 9 9l 9 9 9 9 9 9~ :8 :8 9 :8 :8 :8 : :8 :8 :8$Z Z=  t 4=  (e4= :} }=vt 4= | 4=  4=  Z Z=   4=  (e4= m :} }=v 4=  4=  4=  Z Z=  $ 4=  (e4= 9] ]=v$ 4= 8 4=  = ` =  0 44=!freeResultPropValue0 4=PHG : : : : :n #: #: #: =  =  4x4=EncodeProperty 4=ld ?: ?:   P:  \: `: b: b: g: g: k: n: l: V:Z@ v: v: v: v: : : : : :  :[ : : : : : :o :  =  = 44=CreateProperty4=ia` : : :  : : : : :4 =   = 44=append_property4= : : : : ; : ; ; ; ;p ;+ ; %; %; (;0 =  =  44=addDocProperties 4=LDC A; <; <; C; E; F; A;H =  5 5= @4P4=addDocProperty@4= a;  a;  a;  m; p; r; r; r; x;q x; z; }; }; };> }; }; ; ;0 = ! != 404= Compare_Properties4= ; ; ; ; ; ; ; ; ; ; ; ; ; ;( ; ;, = P3 3=/'&duplicate_in_mem_property =r  = !04p4="allocatePropIOBuffer04=NFE < < < < '< %<0 = - -=)! uncompress_property =  = ,44=-%ReadSingleDocPropertiesFromDisk4=`X < <  < < < <s < <  ; ;  < ; ; ; < R<q Y<k R<q V<k `< `< c< g<P] m< m<W < < < <0Z Z=  4=  { e4= < =7v4= 4= 4= 4=t 4= \P4= Z Z=  4=   e4= <] ]=v4= 4= D\ =  = )44=*"ReadAllDocPropertiesFromDisk4= < < <  < < < <  =u = = = =0 = L =  decc$txsprintf decc$strtoul decc$memcmp decc$strncmp decc$strlen decc$strncasecmp decc$isspace decc$$ga___ctypet decc$$gl___ctypea decc$__utc_strftime decc$__utctz_localtime bin2stringestrdupemallocereallocefreevprogerr set_progerrprogwarn progwarnnoPACKLONG UNPACKLONG getPropNameByNamegetPropNameByID is_meta_entry init_property_listDB_ReadProperty uncompressOTS$MOVEOTS$ZERO c$txww1Xَ]V1.0DDcompressV1.0 4-AUG-2004 09:32Compwaq C V6.5-001h h $ABS$i$CODE$r $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$ four_bit_count four_bit_bytesnot_four not_four_bytes four_bit_called0J sizeofcompint0JP` compress10J cxompress30J  uncompress10J p uncompress20JPACKLONG0J PACKLONG20J UNPACKLONG0J0 UNPACKLONG2@JHPcompress_location_values@J( compress_location_positions@Juncompress_location_values@Jy@uncompress_location_positions8JhCompressCurrentLocEntry8Jcompress_worddata8Jpuncompress_worddata8JH`remove_worddata_longs0J@ SW_compress20 four_bit_count0 four_bit_bytes0 not_four0 not_fzour_bytes0 four_bit_called  not_four_called0 not_four_called =G///J0@J0@ J0@J0@/J0@/k//#GTG^~^ ~(08޴@GGGGGRGG@Zk B 4G(bP"@Zk///G]] }(08ݤ@P#k// /// .oF`J0@r HoFQ J wJ2F >{/`.`J0@oFVJ {KF> `@/`J0@Z@K [G@?/ @//%1@.GD DGJGTGPF@Zk // B4G(b0"@ZkGG .GTJ>/k////OFPFyJFqJXKG`?[`KqG`?@J /_k//#GGG1, A1H1<#k/"///p./D H0@Bt0J/DSpJ"{0JtFp>/ . H0@B/DTJ"F{0J> . H0@BTJ"F>|?21@B^@곙@B>"2BK`///q/G/41@B@Fq.GGqKXKq#FF.{J4q@By HGF"GF?# /txJ;Q@BJ.`Gq#q"Y8KF7@B#4GvJJG ?5DF /q/G2@BD 1"Y8K#6GsK`#p;H ?.FaxJUJF@B>7/Y8K!G7?@/.GG @Fv.21@BJ1"FwJSvJwFv>_#k///#~^^~ (GGGG/C$HGG4GC@ZkDDDGD}G]G]} (0#k//0G//1, H FC1H1"/D0DDG?D0@q/qK HCoFDpF1"GF/$@q/qK HC/DD0D1"G?D/@q/qK HCoFDpF1"GF/ @q/qK HC/DD0D1"G?D/_0k/0;GPJpJy1J0JGG{Q H1?F?FF`sqH3FCk//@[pJPJ1#wqJaJq#"0JRsK_F@.VJFwJ>,@HD<Q.R[JSFQ>.~VJF>k/.1, JyJT JA1HF9D>1<k/P;0JrqJ3bJPJSB4JpJ1TBUB?F k//Gk//;1?F/ p/0,,H H0""qK1"J@p#;Hp/!!HpK@@k/0.0,0JA 0H!FCk/#C4^~G^ ~(08GGGGG?DsDK$"D.RDJSFD> t_8@DG5@/ @#!H0@u$HPF.TJF>sö=@@8@@4Gc 8 C=C;G' ///Bc BDD/'C_FD#@FD#?DD cFD`FD B////c0Bc BGD`/?// B@ @D.DJRDJPDpJPFD>/G_G }8D8D$`/@ @.JPJHFrDJF>//.uHTJ1"F>.J GWJxKF> //d/dK[dKD`H`Gd?}#G]] }(08@#k//#^~C^ ~(08޴@GGGGq.01@BqJSqJ:ZBDDaH`aFb>////zaKHG  @ HCDHBB@b/bKD[bK`H`Gb?01BZ#daJ_B/GG4G"BK"D2 =`@/(@///0`F``BvB7J6B6/J6KY6KF{vK;G6?///`BzB7@K:BZ.H HuHRZJUFZ>0B B0`B"0`B`BwB7`J3B/=`@4G / ///f0@ aKc_Ӻ @G/_",2`@G"H,DH /F` CB@BtF7`///q#Q#.B Fq" xJWJ1"F#>$,e;K@HD<ĠQ,aHBZHAD1 Q<.vJUJ BF>,eJ@HD<$Q,f!KBAHFDQ< B /,0B BeJ@H1"D<8G]] }(08ݤ@P#k/{"g/#GG^G4G~G,q/H[qK#pHDpGq?@3DF"_"_=5G] #k/C#0FG9GGG^~:!J ^(~4@G0GG>/S/F`dGGhG4G /`y.yJ9#= = //4GF=B"__%G4G] 8"0FBB@7`JSCs/sKaFqöBB7JVCV.VJ@JQ0 @ 7@0B1"0BBB7JPC 4Gx /0B"1_c B?1B/ 7B= B4GSFG@/B{#[;{ۢ{@C[ @a@;B{ BvB۲{SC{/ B /;;0B{# B9@;/_///G9 B @@qD/'`///آ`B#88 `BXX6J9!K!!HVD:AK0JYDAD2AJ5JZDPDRDUDز88XX wB^/X0`B# wB:AKZDX/S//1B 7B BUF?@///=`B#,"9 "ݲX G"AHH@Dy,=XvH:AKCGxY.AJ0JF8,H"آ6JF qBY,UH"X2AJBFX9,5H"x;aKaG8/ wB/0`B# wB.p }8!!HJ0D8_==1G] ](}0@#k/_R" /# q^~ ^(~08@޴HPX>`GDGGGG``/// TG8B@b&41BHtBB0BB BH0D@Zk'$D&%!De pJwpJ..V JUJFF>>=9#=C>g_"="b#E eG_="b# EGu_'$=4GDH!Bb") A !A /@Zk(B&GTGO0b$@ZkBDGGG@Zk$D  ĢGEG G] ](}08@ݤHPX=`p#/k///3C0#,B1FG #tN ^~4G ^( ~0 8 GGG:@[bdJ5C3F5B"BC/@ZkG B]="GG4GG(b@ZkxBG}GbG"/@Zk=BG #B /@Zk//}G4G"BDb/@ZkG ] ]( }0 8 @ #k/q#4G^~ ^(~08GGrBG8[G@b@@Zk(BCC="GG0b/@ZkXBG]G`bG0"@Zk HB4GPb@Zk]DG] ](}08@#k///#^~^ ~(08޴@GGGG"4_"2_/b#_ݢG"ݲ6B%@0@m_]G 4G0b@@(B/@Zk8B]GG@Zk="%@@=6#@F / _GG/O_G/#@dG]] }(08ݤ@P#/k4G progerrno4b#P progerrno4@ progerrno4G  progerrno4b#P progerrno4@  progerrno4\Gerealloc4db#herealloc4@erealloc,DGdprogerr,Hb#hprogerr,`@dprogerr4dG Mem_ZoneAlloc4xb#h Mem_ZoneAlloc4@ Mem_ZoneAlloc4GOTS$MOVE4@OTS$MOVE,dGemalloc,hb#emalloc,@emalloc4 G compress24b# compress24 @ compress2,Gprogerr,b#progerr,@progerr4GOTS$MOVE4@OTS$MOVE, 0GHefree, 8b#efree, D@Hefree,Gemalloc ,b#emalloc,@emalloc4G uncompress4b# uncompress4@ uncompress4 G progwarn4 b#progwarn4 @ progwarn, G$efree, b#efree,  @$efree,b#Hprogerr,Gprogerr,@progerr4GOTS$MOVE4@OTS$MOVE =8)Internal error in remove_worddata_longs0=pbFailed to uncompress Property. zlib uncompress returned: %d. uncompressed size: %d buf_len: %d =pcWordData Compression Error. zlib compress2 returned: %d Worddata size: %d compress buf size: %d=8-Internal error in compress_location routine0=(compress1 failed to write: P=*"compress1 failed to write null:  =0;=0;=0p;=0;;=0 `;=P(| ;progerr8OTS$MOVE=0 p;=@(  uncompressemalloc efree progwarn=0 ";=@ D  compress2=> ף=0  ;=P,| =0 P;=@0< =0 ;=p8  Mem_ZoneAllocerealloc=0 @;=@@ =0 ;= , =0;=0;=0;=0";=0  =0;=0 `;=P0|  progerrnoD D6= $ $= $ $ = $ $ = $ $ = $ $ = A A=1)(COMPRESSCompaq C V6.5-001 = 44= sizeofcompint4=E=< 5 5 5 5 5 5  = ` = `4P4= compress1`4=xw 5 5 5 5 0 5 5$ 5 5 5 5 5 5 5 =  = 4@4= SW_compress24=PHG 5 5 5 5 5 5 5   =  = 44= compress34= 5  5 5$ 5 5 5 5 5 5 5 5 50 5 5 5 5 5 = P = 4 4= uncompress14=?76 5 6 6 6 6  =  = p4 4= uncompress2p4= 6 6 6 6 6 6 6 6 6 6 6 6 6 =  = 44=PACKLONG4=3+* -6 '6  -6 -6  = P = 44= PACKLONG24=3+* =6 =6 =6 D6 =  = 44= UNPACKLONG4=.&% O6 O6 O6 U6  = P = 404= UNPACKLONG24=! ^6 e6 = E E= %P4H4=&compress_location_valuesP4= 6 6  6 6 6 6  6 6 6 6 6` 6F 6 6 6 6 6 , = o o= ( 4(4=)!compress_location_positions 4= 6 6 6 6 6 6 6 6 6 7 70 7o 7 7 7 7 7 7 7P 78 7 7 7 7, 7 = + +='compress_location =  = '44=( uncompress_location_values4=QIH \7 Z7 Z7  Z7 `7 k7 = n n= *@44=+#uncompress_location_positions@4= |7 y7 y7 y7 y7  y7  y7 |7 y7 7 7 7 7 7 7 7 7 7 7 7 7 74 7 7 7 7 7 7 7 7d 7 7 7 7 7 7 7 7 7 7c 7 7 7 7 7 7 7 7 7 7 = 2 2= $4h4=%CompressCurrentLocEntry4= 7 7 7 #7  57 27 .7 .7 27  :7 K7 K76 S7{ 7 7 7 DZ Z=  P4=  e4= 7] ]=vP4= d4= 4H =   = 44=compress_worddata4= 7 7  7  7 7 7  7 7 7 7 7 7 8 8 8$ = ` =  p44=!uncompress_worddatap4=med 8 8 8 8 8 8 8 8 8 %8, =  = "`4H4=#remove_worddata_longs`4=bZY J8  [8 a8 d8 k8 k8, = 4 =  emallocereallocefree Mem_ZoneAllocprogerr progerrnoprogwarn compress2 uncompressOTS$MOVE  llocww1gXَ]V1.0??xmlV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i $CODE$O $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jcountwords_XML = `#4GX^[~`^h~px޴GGGGG~Gb@Zk(#44GGTG ! $(,C "@BHb04@D=h1"H}LE8<]P /@Zk //@$] (BGGGGGGGb@Zk PBTG$Xb8"@ZkBG="TGb@Zk0BGBtG("8b@Zk`BG"TGhb/@ZkhcBGTG"b/`@ZkpBG=4GDGxb@ZkBG4Gb@ZkBGG4Gb@ZkpBG4Gxb/@ZkBGGGGb @ZkBG4Gb@Zk" b#k@B4Gb@Zk$ 4GX]`]h}pxݤ#k/ p#^~^~GGGG{#8/`B@ӰBG4Gb@Zk? BG@btG<c"#@ZktàBGTG"b@ZkB"4Gb@ZkBtTG="b@Zk(0@(pŢG/ ///Bb6""@Zk֢/ /V" WI@BTG="4b@Zk 0@ '//|%0BtG="8bX D @<C"R@Zk B44G="GG(b@Zk 0@ |xD<#B"tG="Ab@ZkB4="TGb@Zk/ 0@ #B "TGb@Zk/0@G]]}#k///#4G^@[~^~GGGGHbG/@Zk? BG@btG<c"#@ZkR//0BGTG"8b@Zk B"4G(b@Zk PB="Xb////@Zk: 8Gb#u@8BTG="bx@Zk(0@(pB="4TGxb/@Zk /$1@ 0B4TG8b="@Zk/// $1@ #`B" TGhb/@Zk///$1@G]]}#/k/// p#TG^~^ ~(0GGGG>`0[@8bB B!N" B0BF0B@Zk# B]BG@ZkBG]] }(0@#k//G8G4GWGGG9@#~^^~ GGG#(w#@@/Z@K@? V~7,W(b/@Zk$#0BG8b @$@#<Cc41"@Zk#@BGGHb @Cc#"@ZkG]]} 0#k/#GG("~^G^G#GG(P[{0@B(P8,B@Zk$"( @0B$(G]] #k< GTXML_ParserCreate<Lb#XML_ParserCreate<P@TXML_ParserCreate<GgetPropNameByName<b#getPropNameByName<@getPropNameByName<G$addCommonProperties<b#addCommonProperties< @$addCommonProperties,(GDprogerr,8b#progerr,@@Dprogerr4DG\XML_SetUserData4Tb#XML_SetUserData4X@\XML_SetUserData<\GxXML_SetElementHandler<pb#XML_SetElementHandler<t@xXML_SetElementHandlerDxGXML_SetCharacterDataHandlerDb#XML_SetCharacterDataHandlerD@XML_SetCharacterDataHandler<!GXML_SetCommentHandler<"b#XML_SetCommentHandler<!@XML_SetCommentHandler4G XML_Parse4b# XML_Parse4@ XML_Parse D#GXML_GetCurrentLineNumberD$b#XML_GetCurrentLineNumberD#@XML_GetCurrentLineNumber< >G XML_GetErrorCode< b#XML_GetErrorCode< @ XML_GetErrorCode4 G$XML_ErrorString4b#XML_ErrorString4 @$XML_ErrorString4 $GDprogwarn48b#progwarn4 @@Dprogwarn4DGXXML_ParserFree4 Pb#XML_ParserFree4T@XXML_ParserFree, hG|efree, pb#efree, x@|efree4-G decc$strlen4.b# decc$strlen4-@ decc$strlen4 $GLprogwarn40b#progwarn4 H@Lprogwarn4+PGh decc$strcpy4,`b# decc$strcpy4+d@h decc$strcpy4)hG| strtolower4*tb# strtolower4)x@| strtolower<5|GisDontBumpMetaName<6b#isDontBumpMetaName<5@isDontBumpMetaName4/G decc$strcmp40b# decc$strcmp4/@ decc$strcmp<3GgetMetaNameByName<4 b#getMetaNameByName<3@getMetaNameByName494Gh decc$txprintf4:@b# decc$txprintf49d@h decc$txprintf47hG addMetaEntry48b# addMetaEntry47@ addMetaEntry,Gprogerr,b#progerr,@progerr<GgetPropNameByName<b#getPropNameByName<@getPropNameByName41G decc$strcasecmp42b#decc$strcasecmp41@ decc$strcasecmp4-\G decc$strlen4.b# decc$strlen4-@ decc$strlen4 Gprogwarn4b#progwarn4 @progwarn4+G decc$strcpy4,b# decc$strcpy4+@ decc$strcpy4)G strtolower4*b# strtolower4)@ strtolower4/G$ decc$strcmp40b# decc$strcmp4/ @$ decc$strcmp<5@GXisDontBumpMetaName<6Lb#isDontBumpMetaName<5T@XisDontBumpMetaName<3hGgetMetaNameByName<4xb#getMetaNameByName<3@getMetaNameByName <GgetPropNameByName<b#getPropNameByName<@getPropNameByName41Gdecc$strcasecmp42b#decc$strcasecmp41@decc$strcasecmp4'|Gerealloc4(b#erealloc4'@erealloc4%GOTS$MOVE4%@OTS$MOVE4xG indexstring4b# indexstring4@ indexstring<GaddDocProperties<b#addDocProperties<@addDocProperties4GaddDocProperty4b#addDocProperty4@addDocProperty4` G| indexstring4d {# indexstring4x @|  indexstring =@2XML parse error in file '%s' line %d. Error: %s8=8-Failed to create XML parser object for '%s'h= swishdescription=8,Warning: Tag found in %s is too long: '%s'=pcUndefinedMetaNames=error. Found meta name '%s' in file '%s', not listed as a MetaNames in config=?7!!!Adding automatic MetaName '%s' found in file '%s' 4 4=0 ;=0@  indexstring addDocPropertiesaddDocProperty XML_Parse;p XML_GetErrorCode efree progwarn addCommonProperties XML_ParserCreate XML_SetUserData;;=0X";=4 ;; XML_SetElementHandler getPropNameByNameprogerr(XML_SetCharacterDataHandler XML_ErrorStringXML_ParserFree !XML_SetCommentHandler(#XML_GetCurrentLineNumber=0  ;= ( =0 @;=@( 8OTS$MOVE'erealloc=0 P;=( ) strtolower+ decc$strcpy- decc$strlen/ decc$strcmp 1decc$strcasecmp 3getMetaNameByName 5isDontBumpMetaName=0 ;=(< 7 addMetaEntry9 decc$txprintf@ @6=< <=,$#XMLCompaq C V6.5-001< <= 44=countwords_XML4= :1 :1 :1  =1  C1 C1  C1 E1  G1 I1 \1I e1 j1@ k1 k1 u1 z10 =  = 44= start_hndl4= 1 1  1 1 1 1 2 1 1 1 10: :=  4= 1} }=v4= 4= 44= P =  = P44=end_hndlP4=jba 1 1 1 1 1 10 =  = @44= char_hndl@4=SKJ %2 2) 2" =2 C2 C2 .2(: :=  H4= *2] ]=vH4= |4= l = ' '=# append_buffer =  = 44= flush_buffer4=c[Z ]2 ]2  c2 d2 ]2  ]2 j2 j2 u2  =  =  44= comment_hndl 4=]UT 2  2  2  2 2 2 2 2 2 = * *=&isIgnoreMetaName = | |e4$Ve4 =   decc$txprintf decc$strcpy decc$strcmp decc$strlendecc$strcasecmpereallocefree strtolower addDocPropertiesaddDocPropertyprogerrprogwarn addCommonProperties indexstring getMetaNameByName getPropNameByName addMetaEntry isDontBumpMetaName XML_ParserCreate XML_SetElementHandler(XML_SetCharacterDataHandler XML_SetCommentHandlerXML_SetUserData XML_Parse XML_GetErrorCode(XML_GetCurrentLineNumberXML_ParserFreeXML_ErrorStringOTS$MOVE c$txww1#Yَ]V1.0??txtV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i$$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jcountwords_TXTP P=,$#CTG(^~0^8~@GGG#4@[=CHb ]$} 4/ @Zk0BGG4G8b/@ZkpB b"G= ]GGxb@Zk`B`G4Ghb@Zk ]PB4G"}}4G4GG"$=RXb@ZkG(]0]8}@P#/k48Ghestrndup4Hb#estrndup4d@hestrndup4hGremove_newlines4xb#remove_newlines4@remove_newlines< GaddCommonProperties< b#addCommonProperties< @addCommonProperties,Gefree,b#efree,@efree4G indexstring4b# indexstring4@ indexstring =0(";= P$ 0 remove_newlinesestrndup indexstringefree addCommonProperties@ @6=< <=,$#TXTCompaq C V6.5-001 = 44=countwords_TXT4=ogf Q/ Q/ Q/ Q/  Q/ ]/ W/  f/ f/  = $ =  efreeremove_newlinesestrndup addCommonProperties indexstring eeww1oYَ]V1.0EE metanamesV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$ix $CODE$ $LITERAL$@$LINK$H$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8J` properties_compatible8Jadd_default_metanames@JgetMetaNameByNameNoAlias8JgetMetaNameByName0JgetMetaNameByID@JPgetPropNameByNameNoAlias8J@getPropNameByName0JpP getPropNameByID0JP addMetaEntry0JpaddNewMetaEntry0J0 freeMetaEntries8J@ isDontBumpMetaName0JP  is_meta_entry8J0ClearInMetaFlags8Jpinit_property_list = x #~^^~ (0GGG ///0`@G$b#DG @Ӡ9a@ G]]} (0@#k/# ^~(^0~8GGG ^~ ,H/ 0B"4G8b@ZkBG4Gb/@Zk@BGG4GHb@Zk ]Gb#}@PBG4GXb@ZkG ](]0}8@#k/ 0#4G^~ [ ^(~08@GGG> G(b ^~>@ZkGGG///"! 0B4G8b@Zk}0@ G B4G%pF(be/G//@ZkG/@BQBTGHb@ZkB@0@  GG] ](}08@P#k/// 0G' 3 B  qB`BF///ТAB " SB  0  0 p QB/0@B" QB ?k/ 0#4G~^^~ GH GG P`p[xb@"@Zk ?  #:B0@4GbP@@Zk #B4G b0 @P?@@Zk CG_" "@ #qPFFӢF/ WB #0 C C cSY:CY///sS`BS 0B B1"/ â"/ G]]} 0#k/// P2@#~^^~ (0޴8GGGGGG/// c0BGTG8bfBs//@Zk #0@@ @?GG]]} (0ݤ8@#k//Gk// cC@ P2@#~^^~ (0޴8GGGGGG/// cPBGTGXbfBs//@Zk #0@@ @?GG]]} (0ݤ8@#k//Gk// E@G% @G// PG@ G///a{`{;F `0@ @! G/k///@@k/ P2@#~^^~ (0޴8GGGGGG/// cBGTGbfBsPF/@Zk #0@@ @?GG]]} (0ݤ8@#k//Gk// cC@ P2@#~^^~ (0޴8GG>GGGG/// cBGTGbfBsPF/@Zk #0@@ @?GG]]} (0ݤ8@#k//Gk// E@G% @G// PG@ G///a{P`F/`{;F/`0@ @! Gk/@@k/#TG~^[{G@ZkG]@ #/k/// 0G #~^^~ (0޴8GGG* GG/// CpB4GxbEBҠ/@Zk$pB4Gxb@ZkpB4Gxb////@ZkpBG4Gxb0@@/@Zk à @/pB 4Gxb@Zk G]]} (0ݤ8@#k//C#G ;"~^([^~ (GGG"0b@Zk4G&HBG4GPb@ZkBG4Gb@ZkG/8BGTG#"@b@Zk//cøBG4Gb@Zk4G/BG4Gb@ZkGG]]} (0#k//Gk//1+F FBk,Gprogerr,b#Pprogerr,@progerr,Gestrdup,b#Pestrdup,@estrdup4 G strtolower4 b#P strtolower4 @ strtolower, 4GLefree, @b#Pefree, H@Lefree,Gemalloc,b#emalloc,@emalloc,Gestrdup,b#estrdup,@estrdup,GTemalloc ,4b#emalloc,P@Temalloc4`Gxerealloc4pb#erealloc4t@xerealloc,Gprogerr,b#progerr,@progerr,Gemalloc,b#emalloc,@emalloc,Gemalloc,b#emalloc,@emalloc44Gddecc$strcasecmp4@b#decc$strcasecmp4`@ddecc$strcasecmp4$GTdecc$strcasecmp40b#decc$strcasecmp4P@Tdecc$strcasecmp4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4 G decc$strcasecmp4 {#Pdecc$strcasecmp4 @ decc$strcasecmp, d G efree, l b#0efree,  @ efree,  G efree,  b#0efree,  @ efree,  G efree,  b#0efree,  @ efree,  G efree,  b#0efree,  @ efree,  G efree,  b#0efree,  @ efree4 X G decc$strcmp4| b# decc$strcmp4  @ decc$strcmp, G estrdup, b#estrdup, @ estrdup4  G strtolower4  b# strtolower4  @ strtolower4 G decc$strcasecmp4 b#decc$strcasecmp4 @ decc$strcasecmp,  G efree,  b#efree,  @ efree,  G$ efree,  b#efree,  @$ efree = swishdefault=swishreccount = swishrank0= swishfilenum@= swishdbfileP= swishdocpath`= swishtitlep= swishdocsize=swishlastmodified =@5internal error - called addMetaEntry without a name=KCCalled init_property_list with non-null header->propIDX_to_metaIDT T=0"p;=P0< emallocestrduperealloc=0 ";=@ ;progerr strtolower efree=0 ;=@$< ;=0` ;=0"@ ;= 00 * decc$strcmp decc$strcasecmp=0  ;=@0| =0" ;= $ =0P ;=0"@;=@0| =0"P;=@0| =0;=0";=@0| =0";=@0| =0 p;=0$ =0;- -4=64=*6 4=*604=*6@4=&6P4=6`4=F6p4= 64=6 @ @6=B B=2*) METANAMESCompaq C V6.5-001 = "44=#add_default_metanames4=& . . .( =  = 4P4= addMetaEntry4=6.- . .  .  = + +='create_meta_entry =  = p44=addNewMetaEntryp4= . . .  .  .  . . . . .  . .  .,Z Z=  x4=  e4= . =7vx4= 4= 4= 4= D4= $4=  = P = 404=ClearInMetaFlags4=?76 . . . .4 . . . =  = p44= init_property_listp4=|ts / / / / / / / / /  +/( = p = %44=&getMetaNameByNameNoAlias4=80/ F/ B/ G/8 F/0 J/ H/ =  = 44=getMetaNameByName4=F>= W/ S/ X/8 W/0 ]/ Y/ Y/ Y/ =  = 44=getMetaNameByID4=(  h/, h/ k/ = p = %P44=&getPropNameByNameNoAliasP4=80/ x/ t/ y/8 x/0 |/ z/ =  = @44=getPropNameByName@4=F>= / / /8 /0 / / / / =  = P 4p4=getPropNameByIDP 4=(  /8 / / = p =  4P4= is_meta_entry 4=/'& / / / / = P =  404=freeMetaEntries 4=YQP / /  / / / / /0 = 0 = @ 44= isDontBumpMetaName@ 4=XPO / / / / / /( /  =   = "` 44=#properties_compatible` 4= 0 =  =   decc$strcmpdecc$strcasecmpemallocereallocefree strtolowerestrdupprogerr c$stww1 Yَ]V1.0GG result_sortV1.0 4-AUG-2004 09:32Compaq C V6.5-001` ` $ABS$iH $CODE$ $LITERAL$P$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J0compare_results0J sortresults0JLoadSortedProps =P H #~^^~ (0޴8@H>P^X~`GpGGG! 4GC(n///, Bʢ 7B0@r @@]// *b# * *@ $#A @@B0@ @@!! @[ D/*B4Gb C4RP_B@Zk GPB4QBG@Zk â*"G0B8bGGKBF x/@Zk GG* 0B8bKBG+(F js*"@Zk tG0@@*  @ D@BHbQB AAB1A@ZkGG]]} (0ݤ8@H=P]X}`p#k/JN/J*L/J L/#~^^~ (0޴8@H>P^X~`GpGGG!C(/m///,Ԣ, B B/ $8C0@n @@X// @B4GHb 4PB/@Zk GB4QBG@Zk@B4GHb Ģ4֢PB@Zk GB4QBG@Zk âG)"BbGGKBF x@Zk GG* BbKBG+(F js*"@Zk tG0@@)  @J $BbAB J*B!J@Zk//G/G]]} (0ݤ8@H=P]X}`p#k/) O/) L/#TG ^@[~(^0~8@H޴PXGGG0GHb/@Zk0B$]"}"G8b@Zk BTG(b#@ZkG*=pB4GGxbG=#P?B@Zk$///$$`B4G"hb0@&B@@Zk# @?PB4GXb@Zk BTG#(b/@Zk$G ](]0}8@HݤPX`#k///# ^~(^0~8@H޴PX`>h^p~xG GGG4G///dG G(BG0b4GH"`(/@Zk,(B4G 0b////@Zk//// 0A/  0A 0 0A Q 0A@ 0A,$4ɢ)$(b# I_ӘB 44Gb4GPA@Zk GG4$BQ?@@Zk ɰ4G4ĢBbPB@Zk$GA,@ / JBGGbGSHBSKTBGu@Zk J_// *A(@AJ@ PBPJ @ *Q(BQJ@ JRHBRJ/_HB4$GG8bPbG@Zk4dG GG`D/ $* B $ /// 0 AG +AĢxBG4Gb@Zk4@M$C%@倖k!}]=[[jX[ _(C//'!(G ]G(]0}8@HݤPX`=h]p}x#k, G4emalloc, b#emalloc, 0@4emalloc4@GTOTS$FILL4P@TOTS$FILL4 dGgetDocProperty4hb#getDocProperty4 @getDocProperty4 GgetDocProperty4b#getDocProperty4 @getDocProperty<GCompare_Properties<b#Compare_Properties<@Compare_Properties, TGtemalloc, \b#0emalloc, p@temalloc4GOTS$FILL4@OTS$FILL, Gemalloc, b#0emalloc, @emalloc4GOTS$FILL4@OTS$FILL4 GgetDocProperty4b#0getDocProperty4 @getDocProperty4 (GTgetDocProperty 4,b#0getDocProperty4 P@TgetDocProperty<xGCompare_Properties<|b#0Compare_Properties<>@Compare_Properties<GdDB_InitReadSortedIndex<Xb#DB_InitReadSortedIndex<`@dDB_InitReadSortedIndex<dGDB_ReadSortedIndex<b#DB_ReadSortedIndex<@DB_ReadSortedIndex<GDB_EndReadSortedIndex<b#DB_EndReadSortedIndex<@DB_EndReadSortedIndex, Gemalloc, b#emalloc, @emalloc4 G uncompress24 b# uncompress24 @ uncompress2,$G8efree,0b#efree,4@8efree<8GTDB_EndReadSortedIndex<Hb#DB_EndReadSortedIndex<P@TDB_EndReadSortedIndex,G(progerr,b#progerr,$@(progerr,,GTprogerr,8b#progerr,P@Tprogerr, G emalloc, b#emalloc, @ emalloc4G(OTS$FILL4$@(OTS$FILL, 4GDemalloc, 8b#emalloc, @@Demalloc4 dGgetDocProperty4pb#getDocProperty4 @getDocProperty4 G$ swish_qsort4 b# swish_qsort4 @$ swish_qsort, G efree, b#efree, @ efree =PCcalled sort_single_index_results without a vaild sort_data structH=KCcalled sort_single_index_results with invalid number of sort keysx x=0 ";=`4 DB_EndReadSortedIndex DB_ReadSortedIndex DB_InitReadSortedIndexefree uncompress2 emalloc=0";= p<  getDocProperty Compare_Properties8OTS$FILL=0 ";=< ;progerr;  swish_qsort=0";=p< @ @6=D D=4,+ RESULT_SORTCompaq C V6.5-001R R= )44=*"compare_results_single_index4= 1 1 + 1 1 1 1 1 1 1 1# 1P 1 1 1 1 14 14( 19@ 1 = 6 6= 404=compare_results4= 2 2 " 2 2 2 2 2  2 12 72 A2B D2 D2 D2 2, 2,4 20@ )2 =  = 44=LoadSortedProps4=|ts a2 a2 a2 a2 s2 {2 z2 ~2 ~2 ~28 = 3 3=/'&sort_single_index_results = > >= 44= sortresults4= A3 A3 A3 2 2 2 2  2 2 2 2 2 2 2 2 2 2 2 2 2  2  2  2 2 2 2 2 2 2 2 2 2 2   3 3 3 3 3G "3 #3 H3 F3 N3 T34Z Z=  4=  e4= I3 =  =  =  emallocefreegetDocProperty Compare_Properties uncompress2progerr DB_InitReadSortedIndex DB_ReadSortedIndex DB_EndReadSortedIndex swish_qsortOTS$FILL  llocww1EYَ]V1.0@@htmlV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$i"$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J`countwords_HTML0J parsecomment0JxparseHTMLtitle0J0p isoktitle =#TG^~^~޴ GG ~ [ ^G0;"b`/@Zk/G , %H( C//'@D!F . JCBF. JCB7GE/ EK @CGCzF`, HC?/ .JBUBF/ //// KCUCCuGFG//E/D4GbEKBCdBUdBFD/! `D/ @ 0@@Zk(BG]"?"G@ZkB0@GTGb@ZkG%,f@0@q.%H t1HSqJtFq>BD@0@GTGb@ZkG@B4GHbf@G,DH<@ZkGTG`Bhb"eCG/@Zk ]//1BGbtG|U@%D .J/@R h"@]@ZkBGG4GGGb@ZkBxDG]tGb @ZkPBG 4GeDXb////@ZkGG]]}ݤ 0#/k///C#TGR^[~^ ~(GG& >4GOb@Zk.G0""b#GGPJ> ]@//@GDGG]] }(0#k/P#GtG~^ [20["({G@ZkG]@ #k/#~^^~ (0޴8@H>PP.PJGGGGGGG8;/$@/// ( G/GKAAC!!D //.B4GbJ@Zk G.G"APJRGJ'HG>/ g.gJ/(BG`""TG0b@Zk/D/(BGTGX""0b@Zk//D/(BGTG""0b@Zk//QD/(BGTGp""0b@Zk//TD/(BGTG""0b@Zk//D/(BGTG""0b@Zk//D/,HB4G# 8PbHD#-!I@Zk D# //#-!IA'@! D .B4G#"bJ@Zk/Dn/-HB4G8PbI@Zk D# / #-!IA(@! D //.B4G#"bJ@Zk/DJ/(BGTG""0bD@Zk(B?Gx""TG0b@Zk(B""7GTG0b@Zk(B//+G""TG0b@Zk(B""#GTG0b@Zk(B!""GTG0b/@Zk(B//Gh""TG0b@Zk(B""GTG0b@ZkD /D//D//D-cHHIE=G]G]} (0ݤ8@H=P`#k///Cp#TG>?F^~[^ ~(08޴@HP>X^`~hpx޵GGGGGGGJ @;"b@ZkBTG "bDGG""@Zk BGGTG(b@ZkBG4Gb$O@ZkpB0@GTGxb@ZkBGGGTGb@Zk0BG4G8b@ZkBG4Gb/@Zk`BGGTGhb@ZkB@GG4Gb@Zk @/g,CgHg<G// G G G G8`G//(, BGG(bTG(H/, @ZkD " .J F B!GGTG(b@ZkG/., BG"(bTG0H"+D //@ZkGB""N."TGbAPJRNJG!N>m.mJ'H8dF/?`///@ZkB9GP""TGb/@ZkB//G""TGb@Zk)BGP""TGb@ZkB""GTGbG@ZkB "GTGb/@ZkD4DIGG//BGTG""b@Zk//<GI@9-,BG""bTG-H8$D+ @ZkB""'GTGb@ZkB//Gp""GTGb@ZkB G"GTGb@ZkC @ B "EGTG(b////@ZkGG//G .,!pHA-H0D.r/N.."!sHRQJSFN>iÀB!/M.JUBFP///h-. H"GABhI XdE/G`h!+@rA0 tF%`/.FJXF'/"KXG"P/"PKXDG/@,"HXD-"I XE"B B/ ///.JXdF/`" B/ FF G////@B4GHbK@Zk =//!/ G!/.#{H 4GXKG?CC ZEC@ElA DpB,A0ATGFxb&O@ZkB @GGG G@Zk-NI= G?E@GGGGGPb#j@ GBG@"". TGb@ZkB"TG""Db G@Zk BGGTG(b@Zk G/ G栀B4GGb$O@ZkpB0@GTGxb@ZkB GGGTGb@Zk// 0BG4G8b@ZkBG4Gb@Zk`BGGTGhb@Zk GݥB4GCGbE@Zk @%A,DH<GG]] }(08ݤ@HP=X]`}hpxݥ#/k///`#P;4G ^~(^0~8@H޴PX`>h^p~x޵GGX{0BFGGG^G8b G G ~@Zk# Bp@TG(b&O/@Zk#GTG B(bB&O@Zk@BGG`""GtGHb@Zk@BGGh""tGHb@Zk B4GTG(b& O@Zk , B?"TG(bA H <&O@ZkC.PJ> CM. m"!RSJGJX!E 0@AEAE&///" 'EI B?"TG(b?!4G&O@Zk .GGr HQ J2F >m.E"! B09ATG(bStJgJ/ â&O@ZkB0 AGG 9AG/@ZkAاD0A.xHWJF>A.PJ>FGGGTG/@Zk*FGGGTG/@ZkTD/X`E B@TG(b0@/AE #&O@ZkB0@G] @@@Zku,I,,A,H!5D,<//.GWJ>/K////XGt0Jp.SpJtFp>P/"PKG0"p¥/. e,eHCu@caD` //,B4GbH@Zk//-IXE0A }G oAG-I2/&,pHD!0`@EAA&H 0D&<-.-J! .w&J0`@VJ F> / Kf/`K[fK0`@! `Gf?M-MI -aI0`@!LI E=,HcAc.0BScJc>4G8b@Zk*1@ jA"@/// -IG@D //,B4GbH@Zk-ICUAmD`-LI*1@A=k!_-GI////XDqH.PJF>D. DJ.JGG ](]0}8@HݤPX`=h]p}xݥ#k/#bFG1"^~ [({G#4G"/@ZkG] #k// #`^~h^p~x޴>^~޵G#(РGGG{# =$]G(ݰ,0v_xBGGTGb/@Zk4Gb#C_// / =GGb#4! ! A_0GGGhB =G G$]0 G 4G4}pb G@ZkBGTG8b$O@Zk$](=C<4G"R"@]H//m.8BGG@bTGmJ/`@Zk D " .J F`.xBS`J`>G!GTGb_A@Zk,]XB MA!GGGG<G`bR&XR/@Zk8B `AGGTG@b/@Zk// ,8BG"@bTG0H"+D @Zk/BTG .bPJ>...JG8$F ""/@ZkB//Gh""TGb@ZkB""GTGb@ZkBh""GTGb E@Zk u(GGG"b#_8yGBTGbHE AQA &O@Zk8BG8<]QA/@Zk<TG.<=(B0bUIA5t./@Zk// 0A8B=HTG@b@Zk8B 0@AGIGGTG@b G@ZkG.PJ>xBGGTGb@ZkHB GG4GPb/@ZkBG4Gb@ZkXBG@GGGG`b@Zk ] tGHB.PbR"@Zk///%,GpIA%H0D%<ØBGTG""b 4G@Zk_E<ݡ*1@A/@ G.,BG""bTGG.H8$D //@ZkBG""TGb/@ZkB// G""GTGb@Zk,= GGGGP"b#!$X(G"_GC /4G8BTG"X=TGE@b =LD@Zk8By!TGGTG@b@Zk G/),8BTG "@bTG0H "+D //@Zk G/ .P J >xBGGTGb@ZkHBGG4GPb/@Zk|(BTG0b@E/ t.@Zk 0AXBG= >GGX"G4GG`b@Zk(BGTGx.0b@Zk 0A8BHP=TG@b@ZkBGG4Gb@ZkXBG@GGGG`b@ZkHBG.PbtG"/@Zk -TGhHOIE= gA G=/,,4G"XBE4G."G`b GH&8D h# XPݰG"@Zk#GG Gb#_ G/ G//xBGGTGb_A G HA@Zk,]XB=!G>GGG<`bGR&XR@Zk `AGG`]h]p}xݤ=]}ݥ#k,8Gdlstrstr,Lb#`lstrstr,`@dlstrstr, b#`emalloc, Gemalloc, @emalloc4 GOTS$MOVE4 @OTS$MOVE4 Gerealloc4 b#`erealloc4 @erealloc4 8G\erealloc4 Tb#`erealloc4 X@\erealloc4`G strtolower4hb#` s>trtolower4@ strtolower<GgetMetaNameByName<b#`getMetaNameByName<@getMetaNameByName4G  decc$txprintf4b#` decc$txprintf4@  decc$txprintf4 G, addMetaEntry4$b#` addMetaEntry4(@, addMetaEntry,0GTprogerr,Hb#`progerr,P@Tprogerr,TGefree,hb#`efree,@efree4G  Mem_ZoneAlloc4 b#x Mem_ZoneAlloc4@  Mem_ZoneAlloc</Gmatch_regex_list<0{#0match_regex_list</@match_regex_list4dGx decc$isspace4lb#8 decc$isspace4t@x decc$isspace4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4G(decc$strcasecmp4 b#8decc$strcasecmp4$@(decc$strcasecmp4@GXdecc$strcasecmp4Pb#8decc$strcasecmp4T@Xdecc$strcasecmp4pGdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4G decc$tolower4b#8 decc$tolower4@ decc$tolower 4DG\ decc$isdigit4Pb#8 decc$isdigit4X@\ decc$isdigit4tG decc$tolower4b#8 decc$tolower4@ decc$tolower4G decc$isdigit4b#8 decc$isdigit4@ decc$isdigit4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4G8decc$strcasecmp40b#8decc$strcasecmp44@8decc$strcasecmp48GTdecc$strcasecmp4Lb#8decc$strcasecmp4P@Tdecc$strcasecmp4TGxdecc$strcasecmp4pb#8decc$strcasecmp4t@xdecc$strcasecmp4xGdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b#8decc$strcasecmp4@decc$strcasecmp4Gdecc$strcasecmp4b# 8decc$strcasecmp4@decc$strcasecmp, G lstrstr, b#lstrstr, @ lstrstr, G( lstrstr, b#lstrstr,$ @( lstrstr4)( GD decc$strchr4*< b# decc$strchr4)@ @D decc$strchr4! H Gd decc$strlen4"T b# decc$strlen4!` @d decc$strlen4d G| Mem_ZoneAlloc4 t b# Mem_ZoneAlloc4x @| Mem_ZoneAlloc4'| G decc$strcpy4( b# decc$strcpy4' @ decc$strcpy4+ G remove_ newlines4, b#remove_newlines4+ @ remove_newlines4% G remove_tags4& b# remove_tags4% @ remove_tags<- G sw_ConvHTMLEntities2ISO<. b#sw_ConvHTMLEntities2ISO<- @ sw_ConvHTMLEntities2ISO4! G decc$strlen4"  b# decc$strlen4! @ decc$strlen4)D Gh decc$strchr4*P b# decc$strchr4)d @h decc$strchr4) G decc$strchr4* b# decc$strchr4) @ decc$strchr4) G decc$strchr4* b# decc$st rchr4) @ decc$strchr, GD lstrstr, b#lstrstr,@ @D lstrstr,D Gd lstrstr,X b#lstrstr,` @d lstrstr,d G lstrstr, b#lstrstr , @ lstrstr, G lstrstr, b#lstrstr, @ lstrstr, G lstrstr, b#lstrstr, @ lstrstr, G lstrstr, b#lstrstr, @ lstrstr, G lstrstr, b#lstrstr, @ lstrstr,4 GX lstrstr,@ b#lstrstr,T @X lstrstr,X Gt lstrstr,l b#lstrstr,p @t lstrstr,t G lstrstr, b#lstrstr, @ lstrstr, G lstrstr, b#lstrstr, @ lstrstr4) G decc$strchr4* b# decc$strchr4) @ decc$strchr4G decc$isspace4b# decc$isspace4@ decc$isspace40GX Mem_ZoneAlloc4 Hb# Mem_ZoneAlloc4T@X Mem_ZoneAlloc4 XGtOTS$MOVE4 p@tOTS$MOVE,Glstrstr,b#lstrstr,@lstrstr,Glstrstr,b#lstrstr,@lstrstr4)G decc$strchr4*b# decc$strchr4)@ decc$strchr4!G4 decc$strlen4"$b# decc$strlen4!0@4 decc$strlen44GL Mem_ZoneAlloc4 Db# Mem_ZoneAlloc4H@L Mem_ZoneAlloc4'LGh decc$strcpy4(`b# decc$strcpy4'd@h decc$strcpy4+tGremove_newlines4,b#remove_newlines4+@remove_newlines4%G remove_tags4&b# remove_tags4%@ remove_tags<-Gsw_ConvHTMLEntities2ISO<.b#sw_ConvHTMLEntities2ISO<-@sw_ConvHTMLEntities2ISO4!G decc$strlen4"b# decc$strlen4!@ decc$strlen4!G decc$strlen4"b# decc$strlen4!@ decc$strlen4G Mem_ZoneAlloc4 b# Mem_ZoneAlloc4@ Mem_ZoneAlloc4G, Mem_ZoneAlloc4 b# Mem_ZoneAlloc4(@, Mem_ZoneAlloc4#,GLdecc$txsprintf4$Db#decc$txsprintf4#H@Ldecc$txsprintf4#LGhdecc$txsprintf4$`b#decc$txsprintf4#d@hdecc$txsprintf4lG Mem_ZoneAlloc 4 xb# Mem_ZoneAlloc4@ Mem_ZoneAlloc4G Mem_ZoneAlloc4 b# Mem_ZoneAlloc4@ Mem_ZoneAlloc40GT Mem_ZoneAlloc4 <b# Mem_ZoneAlloc4P@T Mem_ZoneAlloc4G Mem_ZoneAlloc4 b# Mem_ZoneAlloc4@ Mem_ZoneAlloc4 GOTS$MOVE4 @OTS$MOVE4\G Mem_ZoneAlloc4 hb# Mem_ZoneAlloc4@ Mem_ZoneAlloc4 GOTS$MOVE4 @OTS$MOVE4tG decc$isspace4|b# decc$isspace4@ decc$isspace4!G decc$strlen4"b# decc$strlen4!@ decc$strlen4G decc$isspace4 b# decc$isspace4@ decc$isspace4GD indexstring4{# indexstring4@@D indexstring<-Gsw_ConvHTMLEntities2ISO<.b#sw_ConvHTMLEntities2ISO<-@sw_ConvHTMLEntities2ISO<9dGaddCommonProperties<:b#addCommonProperties<9@addCommonProperties4G Mem_ZoneAlloc4 b# Mem_ZoneAlloc4@ Mem_ZoneAlloc4)G decc$strchr4*b# decc$strchr4)@ decc$strchr<-<Gdsw_ConvHTMLEntities2ISO<.Xb#sw_ConvHTMLEntities2ISO<-`@dsw_ConvHTMLEntities2ISO4hG indexstring4b# indexstring4@ indexstring4)G decc$strchr4*b# decc$strchr4)@ decc$strchr4)G decc$strchr4*b# decc$strchr4)@ decc$strchr,GDlstrstr,b#lstrstr,@@Dlstrstr,DGhlstrstr,`b#lstrstr,d@hlstrstr,hGlstrstr,|b#lstrstr,@lstrstr,Glstrstr,b#lstrstr,@lstrstr4G Mem_ZoneAlloc4 b# Mem_ZoneAlloc4@ Mem_ZoneAlloc4 G$OTS$MOVE4  @$OTS$MOVE<14GTisDontBumpMetaName<28b#isDontBumpMetaName<1P@TisDontBumpMetaName<3lGgetPropNameByName<4|b#getPropNameByName<3@getPropNameByName4)G decc$strchr< <4*b# decc$strchr4)@ decc$strchr<-Gsw_ConvHTMLEntities2ISO<.b#sw_ConvHTMLEntities2ISO<-@sw_ConvHTMLEntities2ISO4+Gremove_newlines4,b#remove_newlines4+@remove_newlines4!G decc$strlen4"b# decc$strlen4!@ decc$strlen47G,addDocProperty48$b#addDocProperty47(@,addDocProperty45<GTprogwarn46Db#progwarn45P@Tprogwarn,Glstrstr,b#lstrstr,@lstrstr,G> lstrstr,b#lstrstr,@lstrstr,Glstrstr,b#lstrstr,@lstrstr,G<lstrstr,4b#lstrstr,8@<lstrstr4)G decc$strchr4*b# decc$strchr4)@! decc$strchr4)G decc$strchr4*b# decc$strchr4)@ decc$strchr4)G decc$strchr4*b# decc$strchr4) @ decc$strchr<-0 GH sw_ConvHTMLEntities2ISO<.@ b#sw_ConvHTMLEntities2ISO<-D @H sw_ConvHTMLEnti"ties2ISO4+H Gd remove_newlines4,X b#remove_newlines4+` @d remove_newlines<1h G isDontBumpMetaName<2p b#isDontBumpMetaName<1 @ isDontBumpMetaName4 G indexstring4 b# indexstring4 @ indexstring<1# G isDontBumpMetaName<2 b#isDontBumpMetaName<1 @ isDontBumpMetaName<3!G!getPropNameByName<4!b#getPropNameByName<3!@!getPropNameByName4!!G8! decc$strlen4"0!b# decc$strlen4!4!@8! decc$strlen$478!G\!addDocProperty48T!b#addDocProperty47X!@\!addDocProperty45`!G!progwarn46p!b#progwarn45!@!progwarn4!G " indexstring4!b# indexstring4"@ " indexstring<-@"Gd"%sw_ConvHTMLEntities2ISO<.P"b#sw_ConvHTMLEntities2ISO<-`"@d"sw_ConvHTMLEntities2ISO4h"G" indexstring4"b# indexstring4"@" indexstring$ $=pcUndefinedMetaNames=error. Found meta name '%s' in file '%s', not listed as a MetaNames in configh=@4Adding automatic MetaName '%s' found i&n file '%s' =4,property '%s' not added for document '%s'   decc$txprintf addMetaEntryprogerrlstrstr emalloc erealloc=0";=0,| ;8OTS$MOVE=NAME strtolowerefree getMetaNameByName=/b='/body=em=/em decc$isspace=i= /title/i  decc$isdigit7decc$$ga___ctypet=0";=`< ` decc$strcasecmp7decc$$gl___ctypea decc$tolower=head=/head(=b=title= /strong=strongbody=0";= (  indexstring=0 "P;=T  Mem_ZoneAlloc! decc$strlen#decc$txsprintf7lstrstr7 decc$strstr=<%s>h=p=METAx)=END% remove_tags==START(-sw_ConvHTMLEntities2ISO= CONTENT0=0"p;= 0 /match_regex_list= *FileRules titlex=0";=0, =0`"`;=L  1isDontBumpMetaName 3getPropNameByName5progwarn7addDocProperty 9addCommonProperties@ @6== ==-%$HTMLCompaq C V6.5-001 = 4+`4= getHTMLMeta4= / /  / / /  / / / / / / / / / / / / / / / / / 0 / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 = ' '=#, parseMetaData =  = 4x4=parseHTMLtitle4=QIH 0 0 0 0 0 0 0  =  = p404= isoktitlep4=5-, 0 0 0 0 0  = P! != 484-= getstructure4= 0 0 0 0 0 0 0 0 0. 0 0 0  08 =  =  44=parseHtmlSummary 4=\T 1 0 1 0 0  1 1 1 1 1 *1. .1 01 01 21 01  91 ;1 <1 ;1 ?1 A1 A1 P1 \1 b1 `1 `1 *1_ *1, V1  f1 i1 i1 i1 i1 i1 i1 e1  v1 1 1 1 1 1 1J 1 1 1 1 1X =  = /P44=parsetagP4= 1 1 1 1 1  1 1 1 1 1 1 1 1 1  1 1 1 2 2 2 2 2 2 2" F2 K2 J2 1\ 1+ 2 "2 !2 *2 *2 *2 *2 *20 *2 *2 *2 *2 *2 *2 *2 -2 12 12 52 62 52P =  = 44= parsecomment4=)! `2 `2 `2 = ` = `44=countwords_HTML`4=:2 n2 |2 n2 n2 |2 2 21 2  2T 2 2 2A  p0 o0& 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 10 2 70 70 ;0 80 >0 >0 2H0 H0 H0 F0 S0 Y0 e0܅ e0 o0 p0 c2 b2 3 3 c2 c2 3 3 3 3, 2LZ Z=  !4=  te4= 3} }=v!4= !4= "4= PZ Z=  4=  3e4= 3 ='v4= 4= L4= l4= 4 =   = ( ( decc$txprintfdecc$txsprintf decc$strchr decc$strcpy decc$strstr decc$strlendecc$strcasecmp decc$isdigit decc$isspace decc$tolower dec4c$$ga___ctypet decc$$gl___ctypeaemallocereallocefree Mem_ZoneAlloclstrstrremove_newlines remove_tags strtolower match_regex_list addCommonProperties indexstringaddDocProperty getMetaNameByName getPropNameByName addMetaEntry isDontBumpMetaName sw_ConvHTMLEntities2ISOprogerr5progwarnOTS$MOVE `c$txww1.Zَ]V1.0BBfilterV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i $CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8JinitModule_Filter8J`6freeModule_Filter8JconfigModule_Filter0JH hasfilter0J0 FilterOpen0J0  FilterClose = #4G^ [~GG({@Zk=G] #/k///#4G~^^~ (0GGGp[xb@Zk/%///pB4Gxb@Zk B4G "(b@Zk7pB4Gxb/@ZkpB4Gxb//@ZkGpB4Gxb@Zk/4GpBxb@ZkG]]} (0@#k///Q#TG ^~(^0~8@H޴P[X`GGG;"bG@ZkPB/#TGXbX D c#@ZkBG4Gb/@Zk`B4Ghb@Zk BGDbtG"@Zk4G /// BGTGb"@Zk4G///BGTGp""b@Zk//#B4Gbu8 @ @F #/@ZkcG4GĠ B(b# c=}@Zk@BGGG4G/@Zk0B8b@Zk0B4G8b/@Zk//GB4Gb2.JF.G/@ZkBG4Gb@Zk= B4G(b @P@@Zk.0BGG8bTGPJ>G/@Zk0BG""TG8b@Zk0BGGTG8b@Zk4Gd/0BG4G8b@Zk4Gd/G/0G QG @rG`G/9G/aİ4Gh/// BGTGb`"@Zk4G\///BGTG""b@ZkQ 4GBbA"/@Zk BG4G(b@Zk@BGGG4G/@Zkà0B8b@ZkBG4Gb/@Zkà0B4G8b@ZkG4G '"cBGb C"@Zk4G//Ƞ//fG`G EG@G/G/4GGG ](]0}8@HݤPX`p#k/://4GGC#~^X[^~ (0GGGG`b/@Zk`@// $8BG B"@btG /@Zk///'XB4G`b@Zk1@HBTGPb#B @Zk///GG]]} (0@#k///Gk//G//G//#^~ ^(~08@޴HPX>`G8GGD@r.rJ`^/"hBp"4GGpb/@Zk.GGPJ>==a.;aJ /hBTG="pbG."UJJFF //@Zk.qH PJF>].r.UJrJvEJ F>"///= G9#=9#,@HHEEE E~ E Ec V`E/G@///+ # 7(BGTG0b@Zkq%,pH%""sIA%H0D%<E.RQJSFE>.UJ>a B4Gb@ZkG((BGTG0b@ZkQ HB4GPb@ZkG(BTG0bGG<G@Zk8BG4G@b@Zk:/# (BGTG0b@Zk///# (BGTG0b@Zk#//HB4GPb@ZkG(BTG0bGGG@Zk8BG4G@b@Zk /%,pI%"A%H0D%<E.RQJE>e.eJ/!///.)! EJ.)!J)/)!)K i/)!iK ),)!)H  .)! JI.)!IJ_.GJCBW/WKe/B[eKe?4Gb@ZkBGG4Gb=@ZkhBA4GpbP@@ZkxB G4Gb@ZkBGG""GGGb/@ZkBGX""TGb@Zk8BGG4G@b@Zk8BG4G@b@Zk8BG4G@b@ZkG]G ](}08@ݤHPX=`p#k/// 4G({/k, G,emalloc,${#emalloc,(@,emalloc,Gefree,b#efree,>@efree,Gefree,b#efree,@efree4)Gfree_regex_list4*b#free_regex_list 4)@free_regex_list,Gefree,b#efree,@efree,G$efree,>?b#efree, @$efree,,G<efree,4b#efree,8@<efree,LG\efree,Tb#efree,X@\efree4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4%@G estrredup4&b# estrredup4%@ estrredup4G4normalize_path4$b#normalize_path40@4normalize_path4'4GH isdirectory4(@b# isdirectory4'D@H isdirectory,LGlprogerrA, \b#progerr,h@lprogerr,Gprogerr, b#progerr,@progerr4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4Gnormalize_path4b#normalize_path4@Bnormalize_path,G8emalloc,b#emalloc,4@8emalloc4#8GTOTS$ZERO4#P@TOTS$ZERO,TGdestrdup,\b#estrdup,`@destrdup,hGestrdup,tb#estrdup,@Cestrdup4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4 G decc$strlen4 b# decc$strlen4 @ decc$strlen,Gemalloc,b#emalloc,@emalloc4!G$ decc$stDrcat4"b# decc$strcat4! @$ decc$strcat4!$G< decc$strcat4"4b# decc$strcat4!8@< decc$strcat4!<GT decc$strcat4"Lb# decc$strcat4!P@T decc$strcat,pGestrdup,|b#eEstrdup,@estrdup,G,progerr,  b#progerr,(@,progerr4@GXdecc$strcasecmp4Pb#decc$strcasecmp4T@Xdecc$strcasecmp,hGprogerr, lb#progerr,@progerr,GFemalloc,b#emalloc,@emalloc4#GOTS$ZERO4#@OTS$ZERO,Gestrdup,b#estrdup ,@estrdup4Gnormalize_path4b#normalize_path4@normalize_path,GGestrdup,b#estrdup,@estrdup<G$add_regex_patterns<b#add_regex_patterns< @$add_regex_patterns4 G4 decc$strlen4 (b#H decc$strlen4 0@4 decc$strlen<DGdmatch_regex_lHist<Pb#Hmatch_regex_list<`@dmatch_regex_list4 G decc$strlen4 b#H decc$strlen4 @ decc$strlen4Gdecc$strcasecmp4b#Hdecc$strcasecmp4@decc$strcasecmp,Gemalloc,Ib#emalloc,@emalloc<G$ charDecode_C_Escape<b#charDecode_C_Escape< @$ charDecode_C_Escape4  G decc$strcpy4 b# decc$strcpy4  @ decc$strcpy4T Gh str_basename4\ b# str_basenameJ4d @h str_basename4 x G decc$strcpy4 b# decc$strcpy4  @ decc$strcpy4 G cstr_dirname4 b# cstr_dirname4 @ cstr_dirname4  G decc$strcpy4 b# decc$strcpy4  @ K decc$strcpy, G efree, b#efree, @ efree4  G decc$strcpy4 b# decc$strcpy4  @ decc$strcpy4 0 GD decc$strcpy4< b# decc$strcpy4 @ @D decc$strcpy4T Gh cstr_dirnLame4\ b# cstr_dirname4d @h cstr_dirname4 x G decc$strcpy4 b# decc$strcpy4  @ decc$strcpy, G efree, b#efree, @ efree4  G decc$strlen4  b# decc$strlen4M  @ decc$strlen4  G decc$strlen4  b# decc$strlen4  @ decc$strlen, G emalloc, b#emalloc, @ emalloc, G estrdup, b#estrdup, @ estrdup4 G$ dNecc$txsprintf4 b#decc$txsprintf4 @$ decc$txsprintf4 $ G< decc$popen4 4 b# decc$popen4 8 @< decc$popen,< GT efree ,L b#efree,P @T efree,T Gh efree,` b#efree,Od @h efree,h G| efree,t b#efree,x @| efree4 G decc$pclose4 {#0 decc$pclose4  decc$pclose' '=_NULL_ =`W%s requires at least three parameters: 'filterprog' 'options' 'regexp' ['regexp'...] `P=8/%s: requires "extension" "filter" "[options]"=;3%s: requires one value%s: %s is not a directory8 8=0 ;= emalloc=0 ;P decc$pclose str_basenamedecc$txsprintf= '%p' '%P' decc$popen decc$strlen;=0"Q0;=p4  decc$strcpyefree cstr_dirname=r  charDecode_C_Escapeestrdup=%s %sH=0";=(@<< Filter match match_regex_list decc$strcasecmp= FileFilterMatch=/=R FilterDir add_regex_patternsnormalize_pathprogerr=0 ";=p< ;0! decc$strcat8OTS$ZEROP% estrredup' isdirectory= FileFilter=0 `;=@(< )free_regex_list, ,S4@ @6=? ?=/'&FILTERCompaq C V6.5-001 = 44=initModule_Filter4=6.- / / / /$ = ` = `44=freeModule_Filter`4=VNM / / %/ 3/ 5/T // 0 = 0G G=  44=!configModule_Filter4= R/ O/ O/ O/ O/ T/ U/ V/ V/ Y/ ]/ e/? h/? h/? / / / / / / / m/N h/J m/N h/T / / / / / / h/ k/ w/U w/ {/ |/ ~/ ~/I  /  / / / / / /<: :=   4= i/ =?v 4= 4= 44= (`4= p4= 4= 4= X = P# #= addfilter =V  = 4H4= hasfilter4=xpo /  / / /  /  /  /  / /0 / / = P = 044= FilterOpen04=VN 0 04Q T0 T0 U0 ]0  d0 d0 0 0 0؂W 0 0  0  0  0 0 0 0 0 0 0 f0 e0 Y0 "0IN "0 "0 #0 %0 ,0 208: :=  4= !0: :=  4= f0} }=v4=  4=  4= ] ]=v4=  X 4=   = x x=  404= FilterClose 4= =0 = - -=)! filterCallCmdOptStr = 0 0=,$#filterCallCmdOptParam2 =  he4De4Yne4 =   decc$strcat decc$strcpy decc$strlendecc$strcasecmpdecc$txsprintf decc$popen decc$pclosenormalize_path isdirectoryemallocefree charDecode_C_Escape str_basename cstr_dirnameestrdup estrredup add_regex_patterns match_regex_listfree_regex_liZstprogerrOTS$ZERO c$stww1zZَ]V1.0JJparse_conffileV1.0 4-AUG-2004 09:33Compaq C V6.5-0010 0 $ABS$iB$CODE$ $LITERAL$/$LINK$P$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J:grabCmdOptions0J[ getdefaults0J0@4getYesNoOrAbort0J`9 strtoDocType8J6free_Extracted_Path8JPP@freeSwishConfigOptions0J fuzzy_or_die =#TG^0[~^ GGC >C8b/@Zk= TG@ =Hb G]P"] 0#/k///G]] 0#k//`#TG ^\ [~ ^( ~0 8 @ ޴H P X >` ^h ~p x ޵ GGC >^;"(b~ $(@ZkPB C 4G,Xb@Zk/@0BTG =8bp "/@Zk@TGB =b@P "Y@/@ZkB""TGbG/@Zk(DP"\"]-# ""$ #`==H-",M#x9#""PX#("m#4 @=h]- <"0p= m"!h!pM!xm!  M# 9!D!xX9" !`h=T"@P8]H==C]ݰ]}ݲ=}= (08@/4G///0B,]?"H"tG8b@Zk= BGb4G0 @=/`@ZkpBH"4Gxb@ZkG //?Р&.&Jx$F?BGTGbH""@Zk#= @ /4G(=G4G]b# @///@`BGTGhb"@Zk@"BGTGb8 1"@ZkB#4GbX D @ZkàG]}b&_ӝ/@`BGTG>^hb"@ZkBGTG""b@Zk#G4G]b#= @ } @ӄ@`BGTGhb"@Zk|BGTG""b@Zk=/+!//o?0=XF 4GB$]4Gb/@ZkàB4Gb/@Zk0ݠBG4Gb /@ZkR//@`BGTGhb"@ZkHBGTG""b@Zk//#X D/ :GGGb## @ݠ@0@`BGTGhb"@Zk(BGTG""b@Zk#GG4Gb#X D _ @ݠ@`BGTGhb"@Zk @"BGTGb 1"@ZkG4G4GPb#K @ݠBGTG""b@Zk G4G4GPb#< @ݠ/BGTG""b@Zk//#"GG6dJb#X D / @0ݠ@`BGTGhb"@ZkBGTG8""b@Zk//#"GG6dJb#X D / @0ݠ@`BGTGhb"@ZkBGTG""b@Zk G4G4GPb# @ݠh/@"`BGTGb 1"@Zk0'#tGB@]bX D/ #X1@Zk0ݠBG4GbX/@Zk0@BTG8=HbX/@Zk0ݠ\t@`BGTGhb "@ZklBGTG(""b@Zk//'#0GBbtGX D # 1@Zk0ݠBG4Gb /@Zk0@BTG0=Hb /@ZkF//@`BGTGhb"@Zk<BGTG0""b@Zk//'#0tGB(]bX D #(1@Zk0ݠBG4Gb(/@Zk0@BTaG =Hb(/@Zk//@`BGTGhb"@Zk BGTGh""b@Zk//'#0tGB]bX D #01@Zk0ݠBG4Gb0/@Zk0@BTG=Hb0/@Zk//@`BGTGhb"@ZkBGTGx""b@Zk//#X D/?#0B81]tGb@Zk0ݠBG4Gb8@Zk0@BTG=Hb8/@Zk//BGTG""b@Zk//#X D/?#0B@1]tGb@Zkb0ݠBG4Gb@@Zk0@BTG=Hb@/@Zk//BGTGX""b@Zk#Gb#G] @ #e @|@`BGTGhb "@ZktBGTG""b@Zk//##PBG4GXbTG= @ @Zk0BGGbGtGl@Zk0=BG4Gbl@ZkQ/@`BGTGhb "@ZkH@"BGTGb 1"@ZkPB##G4GXbTG= @/ @Zk0BGG]btGt@Zk0=BG4Gbt@Zk%/@`BGTGhcb "@ZkBGTGH""b@Zk//##PBG4GXbTG= @ @Zk0BGGbGtG|@Zk0=BG4Gb|@Zk/@`BGTGhb "@ZkBGTG""b@Zk//##PBG4GXbTG= @ @Zk0BGG]btG@Zk0=BG4Gb@Zk =/@`BGTGhb"@ZkBGTG""b@Zk@B4Gb@ "@ZkG4GPb#4G@ӱ(""0 b#_ӬBGTdG""b@Zk// G4G4GPb#@ӝ""0 b#_Ә@"BGTGb( 1"@Zk@#G`BhbTG"X D @Zkà0 b#&_Ӏ@"BGTGb 1"@ZkG4G4GPb#@0ݠp@"BGTGb 1"@Zk/#Y @/c?CB2RtGb@ZkZ@`BGhbTG "@ZkR//BGTGH""b@Zk//[#@G`BhbTGP " @ @ZkBGTGb @ZkG B #G4GGG(b!@ZkeG#GX!!/!///0'F GPGF@G/pgF/ `G/ F/G/`BG4Ghb@ZkG/=XGP"b#G@/@"BGTGb8 1"@Zk@3G`BhbTG "xE@ZkBGTGb'@Zk G  BG4GGG(b(/@Zk G@`BGihbG "`I/@ZkB4Gb@Zk ///BGTGf""b@Zk//7@G`BhbTG"=@@Zk 4G=AGBGTGb@ /@Zk @G`BhbtG "AH/@Zk BG4G(bGG 0 AA@(@Zk (A/r//BGTG8""b@ZkY@G`BhbTG "y@/@ZkpBGTGxb(@Zk G @`BGtGhb "G/@Zk @GtG`Bhb` "G/@ZkTG]A;G//pBGTGxb@ /@Zk g#@G`BhbtG( "(@A/@Zk BGG(bG0@@A I@Zk)  @/BGTG0""b@Zk//K@G`BhbTG"y@@ZkG_"TGb#@ GTG]@G#pBGTGxb&@!/@Zk @G`BTGhb" /@Zk @TGBb`"/'@Zk  BG4G(bGG@ @ZkG0A@ '# A?//@"BGTGbH1"@Zk@#G`BhhbTG"=@@ZkBGTGb(@Zk= / BG4GGG(b'@Zkݠ///@"BGTGb01"@Zk@3G`BhbTG"=A@Zk#BTG""b @Zk// GoB4Gb@ZkݠhB4Gb/@ZkàB4Gb@Zk= T@"BGTGb1"@Zk@#G`BhbTG"=@@ZkBGTGb(@Zk= /7 BG4GGGi(b'@Zkݠ+///@"BGTGb1"@ZkGG4Gb#XE # @4///@`BGTGhb"@ZkBGTG@""b@Zk//7@G`BhbTG"=A@Zk#4G= A?G0BGTG8b@ /@Zk #@G`BhbtG" (AI/@Zk# BGG(bGG0@ (AA)@Zk# @/?//@"BGTGb1"@Zk@?G`BhbTG"=@@Zk 4G=AjG/0BGTG8b@ /@ZkG// # BGGGG(b'@!@Zk@GtG`Bhbx"D#'@A@ZkD# 0 A !A@?//@"BGTGbX1"@Zk@?G`BhbTG"=A@Zk 4G=@jG/0BGTG8b@ /@ZkG// # BGGGG(b(@!@Zk@GtG`Bhbx"D#(@A@ZkD# 0 A !AA?://@"BGTGkb81"@Zk@?G`BhbTG"=@@Zk 4G=A"G/0BGTG8b@ /@ZkG// # BGGGG(b'@!@Zk@GtG`Bhbx"D#'@A@ZkD# 0 A !A@?//@"BGTGb1"@Zk@?G`BhbTG"=A@Zk 4G=@G/ =0BGTG8b@ /@ZkG// # BGGGG(b(@!@Zk@GtG`Bhbx"lD#(@A@ZkD# 0 A !AA?//@"BGTGb1"@Zk@7G`BhbTG"=@@Zk 4G=AG/0BGTG8b@ /@Zk @G`BhbtG"AH/@Zk BGTG(bGG 0 AA@(@Zk (A/j//@"BGTGb1"@Zk@7G`BhbTG"=@@Zk 4G=ARG/0BGTG8b@ /@Zk @G`BhbtG"AH/@Zkm BGTG(bGG 0 AA@(@Zk (A/*//@"BGTGb1"@Zk@WG`BhbTG "y@@ZkBGTGb(@Zk G @`BGtGhb"G/@Zk @GtG`Bhb` "G/@ZkTG]AG//BGTGb@ /@Zk #@G`BhbtGh"(@A/@Zk BGG(bG0@@A I@Zk)  @/@"BGTGbP1"@Zk@[G`BnhbTG"y@@Zk"Gb#6dJG@ GTG]@G#BGTGb'@!/@Zk& @ G`BTGhb" /@Zk @TGBb"/*//@Zk @GtG`Bhbx"D#'@A@Zk / BGG(bGG@ @Zk G0A@*# A?f//@"BGTGbh1"@Zk@[CG`BhbTG"y@A@@Zk"Gb#6dJ4G TG9@#G] AE?G#BGTGb'@o!/@Zk& @ G`BTGhb" /@Zk @TGBb "/)//@Zk @GtG`Bhbx"D#'@A@Zk / BGG(bGG@ @Zk G 0@A@ # AA?//BGTG""b@ZkB""GTGb@ZkB//G""TGb@ZkG=b# @BGTG ""b@ZkG=b#@BGTG""b@Zk G4G4GPb#@=@ tGG@/BGTG""bp@ZkCG4G]b#=@A@@Ӵ@`BGTGhb"@ZkBGTG""b@Zk9#`BGhb4G] A* TG/@ZkGGb#4GZ@Gà]@/G//#BTG 0 Ab(@A!@ZkGà &A}d3 'dx}dt@`BGTGhb "@Zkl@"BGTGb1"@Zk`BCGhb4Gu@A@A E TG@Zk GG4Gb#@ 4G #Bb0.G0J'F @Zk 1@B4Gb@q-ID#G@Zk 1@B4Gb@@-J@I@=#! tG"/@Zk 4GBb HA/#AAA@Zk/// "GG6dJb#GGA@ GTGC@`Bhb" x@E/@// ) /@Zk@GTG`Bhb"EI/@ //@Zkl /GTG@"ݠ0B8bl&1"@Zk//@" BGGG(bG1"@Zk/@`BGTGhb`"@ZkBGTGp""b@Zkr//Gb#4G=A/{@]` @`BGTGhb"@Zk@"BGTGb@1"@Zk0'GBbtG=@/#H)@Zk0BG4GbH/@Zk0@BTG=HbH/@Zk//@`BGTGhb"@Zk|@"BGTGb(1"@ZkGG]b#W@]|J/k_@`B"GTGhb/@Zkb//@"BGTGb1"@ZkGG]b#;@R//BGTG""b@Zk//#G4Gs]b#=@////3@=p)/7?///B4Gb "@Zk)?,@`BGTGhb"@Zk$@"BGTGb1"@ZkGC4G]b#=@A@/ @////B4Gb"@Zk@`BGTGhb"@Zk@"BGTGb1"@ZkG#4Gx]b#= A /@//@`BGTGhb"@Zk@"BG /=TGb1"@ZkGC4Gp]b#=@A@/@t//@`BGTGhb"@ZkBGTGX""b@Zk//B4GbXE @Zk #B4Gb @Zk]P @`BGTGhb"@ZkBGTGb@Zk`BGTGhb@ZkBGTGb/@Zk///pBGTGxb@Zk/BGTGb@Zk/wBGTGb@Zk/oGTG h[@Zkf@BH}" ]=Gb`"@Zk 0@ @/W@`B8"4Ghb@ZkPGu=b#t@K///BG4Gb@Zk`B,4Ghb@Zk ]/#@(ݠ=/ //$}G ] ]( }0 8 @ ݤH P X =` ]h }p x ݥ #k/B4G4Gb@Zk///#G^~^ ~(08޴@P[HGGGGGG0Xb"@Zk0BGTG="tG8b@Zk? & BG6$H@GG@tG(b0D0/ "@Zk0GGPBXb@."@J R@J GJG@Zk @ v@0PB`DGGGGGXbh"/@ZkG]G] }(08ݤ@HP#k///C#tG~^^~!1@ (GG !BGG[AFG/ pb#"@ZkIà @BTG0"";#bA@@Zk///#B(""bTGA@@Zk&#B ""bTGA@@Zk#BH""bTGA@@ZkB #@""bTGA@/@Zk#B8""bTGA@@Zk 4G //cGtGBbw#"@ZkGG]]} (0#k//#C^~^ ~(0GGXq`///(B4G"0b@ZkxBG4GbG/@ZkXG]] }(0@#/k///#TG^[~^ ~(08޴@GGGG G8;" ^b@Zk B4G"(b@Zk BG4G(b@ZkGd///BTG""b@Zk B0"4G(b/@Zk BG4G(b@ZkGL///BTG""xb@Zk B4G(b4G@Zk BG"4G(b@ZkG4///BTGX""b@Zk B4G(b4G@Zk BG4G(b@ZkG///BTGP""b@Zk@BtG =EHb@Zk/BtG=Eb"/@ZkB GG4GGGGb@ZkBG4Gb/@ZkBG4Gb@ZkG]] }(08ݤ@P#/k///#~^^~ (0GGGG0/// BGTG(b @Zky/0@Y@/?G//G]]} (0@#k///0D@P#~^^~ 2B (GGGG@{#@ B_P#tGpBxbR@!H"R@ZkcPGtGpBxb#("@ZkGG]]} (0#/k///p 3B(`#~^^~ (0޴8GGGGGF?B/# BTG0@(b&@@!@Zk @G?G]]} (0ݤ8@#/k///Pz#TG^~^~Y@B޴[GGGG@b "@ZkB""TGb/@ZkPB4GXb"/@ZkB@""TGb/@Zkl#0B4G8bx D/_ /@ZkcpB""TGxbcG@ZkBGG4Gb/@Zk/// BGbTG`"/@Zk///B?"G"tGb@Zk}+DxdD/?XaDB4Gb"/@ZkG ?GG/ ///# BG_"{(btG0@'B@1@Zk @`BG4Ghb@ZkðBG4Gb@Zk//B4Gb8"@Zkà4GG=@/ BG_"(btG0@@@ @Zkà @G]]}ݤ #k///q#TG^[X`F~^ ~(0GGGG`">b@Zk`BTG(""hb@ZktG/$///G]] }(0@#/k/// t?=`BTG ""hb|@ZkG`BhbTG0""/@Zk#`BTGH""hb@ZkTGc`BhbTG@""4G@ZkdàTG=G]b] }("0@#k//#4G~^^~ (GGGD0[8b/@ZkH0B4G8b@Zk\0B4G8b/@Zkp0B4G8b/@Zk0B4G8b//@Zkt0B4G8b@Zkx0B4G8b/@Zkd////0B4G8b//@Zk Bd4G(>}b@ZkGdl/4G B(b@Zk Bl4G(b/@ZklG/G]]} (0#k4 GDset_fuzzy_mode48b#set_fuzzy_mode4@@Dset_fuzzy_mode,PGprogerr,Xb#progerr,progerr4#G< decc$fopen4$b#~ decc$fopen4#8@< decc$fopen,<G\isfile,Tb#isfile,X@\isfile4hG progerrno4tb# progerrno4@ progerrno4OG decc$txprintf4Pb# decc$txprintf4O@ decc$txprintf45G addindexfile46b# addindexfile45@ addindexfile4% G< decc$fgets4&4b# decc$fgets4%8@< decc$fgets4!DGhfreeStringList4"Lb#freeStringList4!d@hfreeStringList4hG| parse_line4tb# parse_line4x@| parse_line4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,G,progerr, b#progerr,(@,progerr4 4GLdecc$strcasecmp4 @b#decc$strcasecmp4 H@Ldecc$strcasecmp4LGtnormalize_path4\b#normalize_path4p@tnormalize_path,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr4  G8decc$strcasecmp4 0b#decc$strcasecmp4 4@8decc$strcasecmp,lGefree,xb#efree,@efree,)Gestrdup,*b#estrdup,)@estrdup4Gnormalize_path4b#normalize_path4@normalize_path,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp ,TGlprogerr,`b#progerr,h@lprogerr4 pGdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp4  G8decc$strcasecmp4 0b#decc$strcasecmp4 4@8decc$strcasecmp4 `Gxdecc$strcasecmp4 pb#decc$strcasecmp4 t@xdecc$strcasecmp,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,DG\progerr,Pb#progerr,X@\progerr4 `Gxdecc$strcasecmp4 pb#decc$strcasecmp4 t@xdecc$strcasecmp4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp4AG SafeStrCopy4Bb# SafeStrCopy4A@ SafeStrCopy4?G sortstring4@ b# sortstring4? @ sortstring4G G4 makelookuptable4H$ b#makelookuptable4G0 @4 makelookuptable,D G\ progerr,P b#progerr,X @\ progerr4 ` Gx decc$strcasecmp4 p b#decc$strcasecmp4 t @x decc$strcasecmp4A G SafeStrCopy4B b# SafeStrCopy4A @ SafeStrCopy4? G sortstring4@ b# sortstring4? @ sortstring4G G makelookuptable4H b#makelookuptable4G @ makelookuptable, G progerr, b#progerr, @ progerr4  G8 decc$strcasecmp4 0 b#decc$strcasecmp4 4 @8 decc$strcasecmp4AP Gt SafeStrCopy4BX b# SafeStrCopy4Ap @t SafeStrCopy4?x G sortstring4@ b# sortstring4? @ sortstring4G G makelookuptable4H b#makelookuptable4G @ makelookuptable, G progerr, b#progerr, @ progerr4  G decc$strcasecmp4  b#decc$strcasecmp4  @ decc$strcasecmp4A G4 SafeStrCopy4B b# SafeStrCopy4A0 @4 SafeStrCopy 4?8 GT sortstring4@D b# sortstring4?P @T sortstring4GX Gt makelookuptable4Hd b#makelookuptable4Gp @t makelookuptable, G progerr, b#progerr, @ progerr4  G decc$strcasecmp4  b#decc$strcasecmp4  @ decc$strcasecmp4A G SafeStrCopy4B b# SafeStrCopy4A @ SafeStrCopy4? G sortstring4@ b# sortstring4? @ sortstring4G G4 makelookuptable4H$ b#makelookuptable4G0 @4 makelookuptable4 @ GX decc$strcasecmp4 P b#decc$strcasecmp4 T @X decc$strcasecmp4A| G SafeStrCopy4B b# SafeStrCopy4A @ SafeStrCopy4? G sortstring4@ b# sortstring4? @ sortstring4G G makelookuptable4H b#makelookuptable4G @ makelookuptable4  G decc$strcasecmp4  b#decc$strcasecmp4  @ decc$strcasecmp,$ G< progerr,0 b#progerr,8 @< progerr4 @ GX decc$strcasecmp4 P b#decc$strcasecmp4 T @X decc$strcasecmp<Ih G StringListToString<Jt b#StringListToString<I @ StringListToString4A G SafeStrCopy4B b# SafeStrCopy4A @ SafeStrCopy, G efree, b#efree, @ efree, G progerr, b#progerr, @ progerr4  G decc$strcasecmp4 b#decc$strcasecmp4 @ decc$strcasecmp<I G8StringListToString<J b#StringListToString<I4@8StringListToString4A<G\ SafeStrCopy4BLb# SafeStrCopy4AX@\ SafeStrCopy,`Gxefree,lb#efree,t@xefree,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp<IGStringListToString<Jb#StringListToString<I@StringListToString4AG  SafeStrCopy4Bb# SafeStrCopy4A@  SafeStrCopy,G(efree,b#efree ,$@(efree,4GLprogerr,@b#progerr,H@Lprogerr4 PGhdecc$strcasecmp4 `b#decc$strcasecmp4 d@hdecc$strcasecmp<IxGStringListToString<Jb#StringListToString<I@StringListToString4AG SafeStrCopy4Bb# SafeStrCopy4A@ SafeStrCopy,Gefree,b#efree,@efree,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp4G4progwarn4 (b#progwarn40@4progwarn4 `Gxdecc$strcasecmp4 pb#decc$strcasecmp4 t@xdecc$strcasecmp4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr4 G,decc$strcasecmp4  b#decc$strcasecmp4 (@,decc$strcasecmp4 TGldecc$strcasecmp4 `b#decc$strcasecmp4 h@ldecc$strcasecmp<[GBuildTranslateChars<\b#BuildTranslateChars<[@BuildTranslateChars,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr<= G8getMetaNameByName<>,b#getMetaNameByName<=4@8getMetaNameByName4C<Gd addMetaEntry4DXb# addMetaEntry4C`@d addMetaEntry,KGemalloc,Lb#emalloc,K@emalloc4 dG|decc$strcasecmp4 pb#decc$strcasecmp4 x@|decc$strcasecmp,Gprogerr,b#progerr,@progerr<=GgetMetaNameByName<>b#getMetaNameByName<=@getMetaNameByName4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry,G$progerr,b#progerr, @$progerr,)(G<estrdup,*0b#estrdup,)8@<estrdup4 PGhdecc$strcasecmp4 `>b#decc$strcasecmp 4 d@hdecc$strcasecmp,Gprogerr,b#progerr,@progerr<=GgetMetaNameByName<>b#getMetaNameByName<=@getMetaNameByName,Gprogerr,b#progerr,@progerr4CG4 addMetaEntry4Db# addMetaEntry4C0@4 addMetaEntry4 PGhdecc$strcasecmp4 `b#decc$strcasecmp4 d@hdecc$strcasecmp,xGprogerr,|b#progerr,@progerrDMGgetMetaNameByNameNoAliasDNb#getMetaNameByNameNoAliasDM@getMetaNameByNameNoAlias,Gprogerr,b#progerr,@progerr,Gprogerr,b#progerr,@progerrDM4GTgetMetaNameByNameNoAliasDN@b#getMetaNameByNameNoAliasDMP@TgetMetaNameByNameNoAlias,dGprogerr,hb#progerr,@progerr4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerrDMTGtgetMetaNameByNameNoAliasDN`b#getMetaNameByNameNoAliasDMp@tgetMetaNameByNameNoAlias,Gprogerr,b#progerr,@progerr4Gprogwarn4 b#progwarn4@progwarn4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry4 $G<decc$strcasecmp4 0b#decc$strcasecmp4 8@<decc$strcasecmp,LGhprogerr,Pb#progerr,d@hprogerr<=lGgetMetaNameByName<>xb#getMetaNameByName<=@getMetaNameByName4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr4 G4decc$strcasecmp4 (b#decc$strcasecmp4 0@4decc$strcasecmp,TGdefree,\b#efree,`@defree,tGefree ,|b#efree,@efree,)Gestrdup,*b#estrdup,)@estrdup4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr<= G$getMetaNameByName<>b#getMetaNameByName<= @$getMetaNameByName4C8GX addMetaEntry4DLb# addMetaEntry4CT@X addMetaEntry4 tGdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gprogerr,b#progerr,@progerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp, G<progerr,$b#progerr,8@<progerr<ETGtgetPropNameByName<F`b#getPropNameByName<Ep@tgetPropNameByName,Gprogerr,b#progerr,@progerr4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry4 G decc$strcasecmp4 b#decc$strcasecmp4 @ decc$strcasecmp,G8progerr, b#progerr,4@8progerr<ETGtgetPropNameByName<F`b#getPropNameByName<Ep@tgetPropNameByName4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry,Gprogerr,b#progerr,@progerr4 G,decc$strcasecmp4  b#decc$strcasecmp4 (@,decc$strcasecmp,<GXprogerr,@b#progerr,T@Xprogerr<EtGgetPropNameByName<Fb#getPropNameByName<E@getPropNameByName4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry,Gprogerr,b#progerr,@progerr4 4GLdecc$strcasecmp4 @b#decc$strcasecmp4 H@Ldecc$strcasecmp,\Gxprogerr,`b#progerr,t@xprogerr<EGgetPropNameByName<Fb#getPropNameByName<E@getPropNameByName4CG addMetaEntry4Db# addMetaEntry4C@ addMetaEntry,G$progerr ,b#progerr, @$progerr4 TGldecc$strcasecmp4 `b#decc$strcasecmp4 h@ldecc$strcasecmp,|Gprogerr,b#progerr,@progerr<EGgetPropNameByName<Fb#getPropNameByName<E@getPropNameByName4CG addMetaEntry4Db# addMetaEntry4C @ addMetaEntry, GD progerr,$ b#progerr,@ @D progerr4 t G decc$strcasecmp4  b#decc$strcasecmp4  @ decc$strcasecmp, G progerr, b#progerr, @ progerr<E G getPropNameByName<F b#getPropNameByName<E @ getPropNameByName,!G$!progerr,!b#progerr, !@$!progerr4C(!GT! addMetaEntry4D4!b# addMetaEntry4CP!@T! addMetaEntry4 t!G!decc$strcasecmp4 !b#decc$strcasecmp4 !@!decc$strcasecmp,!G!progerr,!b#progerr,!@!progerr<E!G!getPropNameByName<F!b#getPropNameByName<E!@!getPropNameByName,"G$"progerr,"b#progerr, "@$"progerr4C("GT" addMetaEntry4D4"b# addMetaEntry4CP"@T" addMetaEntry4 t"G"decc$strcasecmp4 "b#decc$strcasecmp4 "@"decc$strcasecmp,"G"progerr,"b#progerr,"@"progerrD;"G"getPropNameByNameNoAliasD<"b#getPropNameByNameNoAliasD;"@"getPropNameByNameNoAlias,"G#progerr,"b#progerr,#@#progerr,#G4#progerr,#b#progerr,0#@4#progerrD;T#Gt#getPropNameByNameNoAliasD<`#b#getPropNameByNameNoAliasD;p#@t#getPropNameByNameNoAlias,#G#progerr,#b#progerr,#@#progerr4C#G# addMetaEntry4D#b# addMetaEntry4C#@# addMetaEntry4 #G $decc$strcasecmp4 $b#decc$strcasecmp4 $@ $decc$strcasecmp,$G8$progerr, $b#progerr,4$@8$progerrD;t$G$getPropNameByNameNoAliasD<$b#getPropNameByNameNoAlias D;$@$getPropNameByNameNoAlias,$G$progerr,$b#progerr,$@$progerr4$G$progwarn4 $b#progwarn4$@$progwarn,%G(%progerr,%b#progerr,$%@(%progerr4C4%GX% addMetaEntry4D@%b# addMetaEntry4CT%@X% addMetaEntry4 %G%decc$strcasecmp4 %b#decc$strcasecmp4 %@%decc$strcasecmp,%G%progerr,%b#progerr,%@%progerrD;&G$&getPropNameByNameNoAliasD<&b#getPropNameByNameNoAliasD; &@$&getPropNameByNameNoAlias,4&GT&progerr,<&b#progerr,P&@T&progerr4`&G&progwarn4 d&b#progwarn4&@&progwarn,&G&progerr,&b#progerr,&@&progerr4C&G& addMetaEntry4D&b# addMetaEntry4C&@& addMetaEntry4 'G('decc$strcasecmp4  'b#decc$strcasecmp4 $'@('decc$strcasecmp4 ('GD'decc$strcasecmp4 <'b#decc$strcasecmp4 @'@D'decc$strcasecmp4 D'Gh'decc$strcasecmp4 `'b#decc$strcasecmp4 d'@h'decc$strcasecmp4 'G'decc$strcasecmp4 'b#decc$strcasecmp4 '@'decc$strcasecmp4 'G'decc$strcasecmp4 'b#decc$strcasecmp4 '@'decc$strcasecmp4 (G(decc$strcasecmp4 (b#decc$strcasecmp4 (@(decc$strcasecmp,D(G\(progerr,P(b#progerr,X(@\(progerr4 `(Gx(decc$strcasecmp4 p(b#decc$strcasecmp4 t(@x(decc$strcasecmp,K(G(emalloc,L(b#emalloc,K(@(emalloc4 (G) addswline4 (b# addswline4 )@) addswline,D)G\)progerr,P)b#progerr,X)@\)progerr4 d)G|)decc$strcasecmp4 p)b#decc$st>rcasecmp4 x)@|)decc$strcasecmp,K|)G)emalloc,L)b#emalloc,K)@)emalloc49)G) decc$strlen4:)b# decc$strlen49)@) decc$strlen49)G,* decc$strlen4:*b# decc$strlen49(*@,* decc$strlen,)0*Gd*estrdup,*8*b#estrdup ,)`*@d*estrdup4Qp*G* isnumstring4Rt*b# isnumstring4Q*@* isnumstring,*G+progerr,*b#progerr,+@+progerr,$+GX+progerr,(+b#progerr,T+@X+progerr<E+G+getPropNameByName<F+b#getPropNameByName<E+@+getPropNameByName4C+G+ addMetaEntry4D+b# addMetaEntry4C+@+ addMetaEntry,+G+progerr,+b#progerr,+@+progerr4 +G,decc$strcasecmp4 ,b#decc$strcasecmp4 ,@,decc$strcasecmp,D,G\,progerr,P,b#progerr,X,@\,progerr4 d,G|,decc$strcasecmp4 p,b#decc$strcasecmp4 x,@|,decc$strcasecmp4A,G, SafeStrCopy4B,b# SafeStrCopy4A,@, SafeStrCopy4?,G, sortstring4@,b# sortstring4?,@, sortstring4G,G,makelookuptable4H,b#makelookuptable4G,@,makelookuptable,-G-progerr,-b#progerr,-@-progerr4 $-G<-decc$strcasecmp4 0-b#decc$strcasecmp4 8-@<-decc$strcasecmp,h-G-progerr,x-b#progerr,-@-progerr4 -G-decc$strcasecmp4 -b#decc$strcasecmp4 -@-decc$strcasecmp4 -G-decc$strcasecmp4 -b#decc$strcasecmp4 -@-decc$strcasecmp47@.GT. strtolower48H.b# strtolower47P.@T. strtolower,d.G|.progerr,p.b#progerr,x.@|.progerr4 .G.decc$strcasecmp4 .b#decc$strcasecmp4 .@.decc$strcasecmp47.G. strtolower48.b# strtolower47.@. strtolower,/G/progerr,/b#progerr,/@/progerr4 $/G decc$fclose4=b# decc$fclose4>@> decc$fclose,>G(>progerr,>b#progerr,$>@(>progerr<D>Gl>add_word_to_hash_table<P>b#add_word_to_hash_table<h>@l>add_word_to_hash_table,>G?progerr,?b#progerr,?@?progerr4  ?G$?decc$strcasecmp4 ?b#decc$strcasecmp4  ?@$?decc$strcasecmp4 t?G?decc$strcasecmp4 ?b#decc$strcasecmp4 ?@?decc$strcasecmp4 ?G?decc$strcasecmp4 ?b#decc$strcasecmp4 ?@?decc$strcasecmp4 ?G?decc$strcasecmp4 ?b#decc$strcasecmp4 ?@?decc$strcasecmp4 ?G@decc$strcasecmp4 ?b#decc$strcasecmp4 @@@decc$strcasecmp,@GH@progerr,(@b#progerr,D@H@progerr4@G@ freeswline>4@b#P freeswline4@@@ freeswline4@G@ freeswline4@b#P freeswline4@@@ freeswline4@G@ freeswline4@b#P freeswline4@@@ freeswline4@G@ freeswline4@b#P freeswline4@@@ freeswline4@GA freeswline4@b#P freeswline4A@A freeswline4AGA freeswline4Ab#P freeswline4A@A freeswline4 AG8A freeswline4(Ab#P freeswline44A@8A freeswline4TAGtA freeswline4`Ab#P freeswline 4pA@tA freeswline,tAGAefree,Ab#Pefree,A@Aefree,AGAefree,Ab#Pefree,A@Aefree,AGAefree,Ab#Pefree,A@Aefreei i=TXT=HTML=XML=WML =XML2(=HTML20=TXT28=XML*@=HTML*H= TXT* P=8/Invalid FuzzyIndexingMode '%s' in config file=@3%s requires parameter #%d of yes|on|1 or no|off|0=(%s has too many paramter=@6%s: possible values are error, ignore, index or auto=@3%s: requires one value%s: missing %d. parameterH=hY%s: Unknown document type "%s"'%s' value of '%d' is not an integer between %d and %d.=h\Invalid char '%c' found in argument to '%s %s''%s': Failed to convert '%s' to a number: =8-'%s' requires an integer between %d and %d.8=0!IgnoreWords File: requires path`=0$Couldn't open the word file '%s': =@1SwishDefault is obsolete. See the CHANGES file.=0!%s: requires at least one value=XJ%s: unknown argument '%s'. Must be prepend|append|remove|replace|regex.8=0%Too many errors. Can not continue.`=8+Bad directive on line #%d of file %s: %s =0&%s: requires size parameter in bytes=(DontBumpPositionOnEndTags=(DontBumpPositionOnStartTags= XMLClassAttributes=8+UndefinedXMLAttributesUndefinedMetaTags@=(BumpPositionCounterCharacters`=0"%s: requires two or three values= swishdescription=8/%s: third parameter must be empty or a number=@6%s: second parameter must be or a number= StoreDescription =PBWhy are you redefining the max sort key length of property '%s'?h=(PropertyNamesSortKeyLength=H9Why are you redefining the max length of property '%s'?=Can't assign a length to property '%s': it is an alias%s: requires only two or more values, a length and a list of property namesP=`WPropertyNamesMaxLength%s - name '%s' is already a PropertyName or PropertyNameAlias=0#%s - name '%s' not a PropertyName= PropertyNameAlias= PropertyNamesDate= PropertyNamesNumeric=(PropertyNamesStripChars8=(PropertyNamesNoStripCharsX=(PropertyNamesCompareCasex=@1%s - name '%s' is not a STRING type of Property=(PropertyNamesIgnoreCase=8*%s - name '%s' is already a PropertyName= PropCompressionLevel= ImageLinksMetaName0= IndexAltTagMetaNameH= HTMLLinksMetaName`=@3Why are you redefining the rank of metaname '%s'?=@6Can't assign a rank to metaname '%s': it is an alias=`U%s: requires only two or more values, a rank (integer) and a list of property names( =@7%s - name '%s' is already a MetaName or MetaNameAlias` =0%%s - name '%s' must not be an alias =(%s - name '%s' not a MetaName =0&%s - name '%s' is already a MetaName =8*%s already defined for meta '%s' as '%s' =@1%s: requires two values: metaname default_value8  = ExtractPathDefaultP =`W%s: requires at least three values: metaname expression type and a expression/strings =H?%s: requires two values (same length) or one translation rule = TranslateCharacters =0!IgnoreTotalWordCountWhenRanking( = FuzzyIndexingMode@ =H?UseStemming is deprecated. See FuzzyIndexingMode in the docs = IndexDescription = %s: requires a value =0"%s: requires at least two values =8.%s: requires one value (a set of characters) = IgnoreNumberChars = obeyRobotsNoIndex8 = IncludeConfigFileP =(Parsing config file '%s' p =5-Couldn't open the configuration file '%s':  =0 ;=0  ;0set_fuzzy_modeprogerr=0 P@;=0$ efree freeswline=0 :;=@4|  addswline=0"`9;=@$< decc$strcasecmp;=0 6;=@$   free_regex_list=0"@4;= 00 1X=on`=yesh=0p=offx=no=0 >;=(@8 ignoreerror= disable=index=auto=0" :;=0( =0"2;=P4  progerrno decc$strtolisfile decc$fclose parse_line=SwishDefaultp=rlstrstr=0 ;;= < add_word_to_hash_tablenormalize_path=File:progwarn!freeStringList# decc$fopen% decc$fgets=0 'add_regular_expression= remove$P= prepend`=0 6;=P0| )estrdup=^=append +add_replace_expression=regex= replace= as-text= IgnoreWords= BuzzWords= Soundex= Stemming_en=MetaNameAlias(= ExtractPath@ -configModule_Filter(/configModule_ResultSort 1configModule_Prog=IndexContents=IndexVerbose3 decc$atol=(IgnoreMetaTagsIndexComments=index.swish-e5 addindexfile= IndexFile;= ParserWarnLevel= BeginCharacters(=IndexPointer8=ReplaceRulesH=EndCharactersX=IgnoreLastCharp7 strtolower9 decc$strlen7IndexingDataSource(;getPropNameByNameNoAlias =getMetaNameByName? sortstringA SafeStrCopy=0 ;= T C addMetaEntry EgetPropNameByName Gmakelookuptable IStringListToStringKemalloc(MgetMetaNameByNameNoAliasO decc$txprintfQ isnumstring= IndexAdmin= UseStemming= IndexName= IgnoreFirstChar= IndexReport=AbsoluteLinks= NoContents=MinWordLimit=(WordCharactersMaxWordLimit(= IndexDir8= TruncateDocSizeP = DefaultContentsh= IndexOnly SconfigModule_IndexU decc$exit WconfigModule_Entities(YconfigModule_ResultOutput= MetaNames [BuildTranslateChars= UseSoundex= StopWords= UseWords=MetaNamesRank =PropertyNamesi i4=64=64=64=6 4=6(4=604=684=6@4=6H4=6 @ @6=G G=7/.PARSE_CONFFILECompaq C V6.5-001 = 44= fuzzy_or_die4=KCB x8 x8 x8 x8 z8 |8 |8  =  = 44= getdefaults4=< 4 8 8 8 8 8 8 8 8  8 P9 3 P9 B9) R9 O < n9  B9)  8 9   2 ; `@ < _9& p< a9 # |< @9 8F @92 < 8 ; ; 9 9 9 9 }9 {9 n9 l9 a9 _9 R9 B9 @9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 *9 <9 >9 @9 @9 N9 P9 P9 ]9 _9 _9 j9 l9 l9 {9 {9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 : : : -= : 1= 1= 1= 1= A= : : : &: &: 3: 8: 6: 6: 6:  H: R: X: V: V: V: j: n:  t: t: v: y:, q: q: : : : : : : : : : : : :  : :ԃ : : :  : : : : : ; ; ; ; ; ; !; &; *; $; 6; :; ?; D; =; P; R; W; U; U; U;  _; a; f; d; d; d;  p; u; ; ; ; ; ; ; ; ; ;؁ ; ; ; ;, ; ; ; ; ; ; ; ; ; ; ;, ; ; ; < < < < < < < '< %< 1< 3< 3< 8< << >< ?< G< G< I< P< P< _< j< l< n< n< z< < <> < < < <w < < < <t < ; 87P < : :=  h4= :} }=vh4= p4= 4= : :=  T14= < =   =  2 = 244= read_integer24={z < < < < < < < < < < < < =0 = p = @4404=getYesNoOrAbort@44=e]\ = = = = = = = =t !=( = ) )=%add_ExtractPath =  =  644=!free_Extracted_Path64==54 O= O= O= X= T=0 = : := 64`4= Build_ReplaceRules64= e=  e=  e= j= e=  e=  p= r= v= x= }= = =A = = = =8 =  = `944= strtoDocType`94=-%$ =$ = =0 = =  =  :44=getDocTypeOrAbort :4=6.- = = = =0 =  = :44=grabCmdOptions:4=910 = = = = = =8 = 5 5= ;44=word_hash_config;4= > = = = = > > > -> 5> 5> 5>> 5> > > > > >8: :=  <4= > !] ]= v<4= <4= H\ = ' '=# readwordsfile = ' '=# parseconfline =  = %>44=&get_undefined_meta_flags>4=ldc L> J> J> L> J>0 R> [> ^> ^> ^>  =   = #P@4P4=$freeSwishConfigOptionsP@4= b> b> g> j> m> p> s> v> y> > > >$ > > >   =   e4A oe4Ke4 =   decc$fclose decc$txprintf decc$fopen decc$fgets decc$atol decc$exit decc$strtol decc$strlendecc$strcasecmpset_fuzzy_mode IndexingDataSourcelstrstr SafeStrCopy sortstringmakelookuptable parse_linefreeStringList isnumstring strtolower StringListToString BuildTranslateCharsestrdup add_replace_expressionfree_regex_list add_regular_expressionemallocefree addswline addindexfile freeswlinenormalize_pathisfile(getMetaNameByNameNoAlias getMetaNameByName(getPropNameByNameNoAlias getPropNameByName addMetaEntry add_word_to_hash_tableprogerr progerrnoprogwarn configModule_Entities configModule_Filter configModule_Index(configModule_ResultOutput configModule_ResultSort configModule_Prog .c$fcww1 HZَ]V1.0II result_outputV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i`$CODE$  $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$@JPaddSearchResultDisplayProperty8JinitModule_ResultOutput8JfreeModule_ResultOutput@JpconfigModule_ResultOutput8JinitPrintExtResult8J0printSortedResults@J0 initSearchResultProperties8JPhasResultExtFmtStr0JresultHeaderOut =#4G^ [~GG({@ZkGG///"! /=G] #k/#4G~^^~ (0޴8GGG[b//@Zk/B4Gb@ZkB4Gb@ZkŠBG4Gb/@ZkG//GG ////$B4G0@b%B@@Zk  @/B4Gb@Zk(àG////$B4Gb%@@/@ZkƠB4Gb/@ZkB4Gb @ZkG]]} (0ݤ8@#/k///Q#TG(^~0^8~@([4GHPGGG;0b ^1"/@Zk2#}GBb4Gx D" c }Cc]@ZkBG4G b@ZkBG4G b@Zk ]   ]  //BTG =b"@ZkG(]0]8}@HP`#k/Q.QJF@#^~ ^(~08GGGG//,GG$ @HHDD D@ `b#@/ //G="]"b#S@BG4Gb@ZkB4Gb/@Zk //GGGpb#G@G$,$H?G] ](}08@#k//p#41 BۦTG~^F^~ 4F(0޴8[@H>P^X~`hp޵xGGGGbŠ@Zk@B4GHb@Zk? D/C/// BG4G(b@ZkC GGGEGb# F@B4Gb "/@Zk$1@Ơ0B4G8bG//@ZkB`@4Gb @@Zk "PB GGGGXbGG1"@Zk /B4Gb"@Zk G//C/// BG4G(b@ZkCGGGEGGb# //@GG @j +p (j`/`Fs0B``F//s0B`F` s0B ``Fs0B/+TBT GP@ GN /B-GTGb@Zk*BGGGP""tGbA/@@Zk/BGTG`""b@Zk.JJ//XFBTG""Gb/@Zk //,B/ P""GbtG@HH@Zk,!H*1BGTGb ""@ZkBG4Gb 0A!@Zk 롯 AB4G "b@ZkBGTGX""b/@Zkj$1@dÐBG4Gb@ZkG]]} ( 0ݤ8@H=P]X}`hpݥx#/k///#^~ ^(~08@޴HP2,GGGGGG2H FA G/.GD"Hb#PJJGDDD)`/@=@+hBGGTGpb@Zk #///G="]"b#@G]=b#GG@B4Gb@ZkB4Gb@Zk /GGGGG b9@G,H?G] ](}08@ݤHP`#k//#GTG^~ ^G( GGQ.0[8bQJ>"KF @//@Zk= BGTG(b /@ZkG] ](0#/k///2,GGTG2H$Dw  #C^~^~ "(GG ~GGp/[pKGgKHb}HB^DF`6@@T/: @Zk8/NB2HB"/+0\\BCk//@ )//0 $/0 /P //0 // //0 //x //@ //0`BTG=hb"@Zk`B  """GtGhb@Zk` } ]"Gb#_/TGpb ="_G]]} (0#k/#4G^ [~^ ~(08޴@HGGGG(b@⤀¤@Zk , B4G"(b H'D @Zk ,G HC'@AF /'f .JSBsaF` //.B4GbJ@Zk//%, %HC'@!F/?]B2@C0@B4Gb@Zk0BG=GtG8b@Zkcf@,@H<%,%H'D   e BG4G(b@Zk@B` P""GGGtGHb@Zk,&,, G&HEH H/&.F""Q2J'J#F f.tJkF`. J = B7@C0B4Gb@Zk0BGGGtG8b@Zk@,GH<F,FH#//DD/. JCBPF/f. fJCgBF/ `. JCBG/&/ &Kf/fKէ@@G]] }(08ݤ@HP#/k/// #tG^[~ ^(~08@޴HPX>`GGGGG~CGb/@ZkBG"4Gb/@Zk//HBGx"Pb4G /&@ZkHBG"Pb@ZkBGh""tGb@Zk XBG4G`b8 D /@ZkBG4Gb@ZkB4Gb/@Zk0BBB/ h\BCk//(B`Gb"DGFtG0b@Zk/(B`G DGFtG0b@Zk/GG D"8$,G$H# /I8!Dh/ ///@.JSBsaF `.B4GbJ@Zk//.qHPJF>D. DJ?(BGS`GFtG0b@ZkM/hGHB""PbtGp DGG@Zk(BGG0b;`F@Zk88B"4G@b@ZkB G"4Gb@ZkBGG?"GGb@ZkD(BGGTG0b//@ZkBG4Gb@Zk/(B`?'!GGF@9#D0b@ZkhBGTGb("@Zk/HBG4GPb@ZkG] ](}08@ݤHPX=`p#k//GGGG / ]8G(}@Zk /GG/k///Gk/ #> /@hDG~^G 0BP#/k///(0[GtG8{8]"/@ZkG]4GP#k/#TG^~^ ~(G>Gp0[8b cC rB`@P@BCQ_B@ZkÐBGb4GG@Zk4G # B(b0B CCB@ZkG]] }(0#k//Т V}@(p#~^^~ (0޴8@H>P^XGGGGG`/s0@`s0@ `s0@`s0@/`s0@/BP@4Gb@ZkGG// $0@4GBbBP?B@Zk @@? GG)///$0B4G G8b G&B@Zk(/@BTG"Hb 0 A@ @Zk&$ %A*@ @A!&@/ $0A A@?G/G]]} (0ݤ8@H=P]X`#k//Gk//PB TG XbDA$@ZkH , G,emalloc,${#emalloc,(@,emalloc,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree, G$efree,b#efree, @$efree,dGefree,pb#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree,G4efree,b#efree,0@4efree4=Gdecc$strcasecmp4>b#decc$strcasecmp4=@decc$strcasecmp,Gemalloc,b#emalloc,@emalloc , G,estrdup, $b#estrdup, (@,estrdup, ,GDestrdup, 8b#estrdup, @@Destrdup,Gprogerr,b#progerr,@progerr,tGefree,b#efree,@efree,Gefree,b#efree,@efree438GSwishSeekResult44xb#0SwishSeekResult43@SwishSeekResult<;GSwishAbortLastError<<b#0SwishAbortLastError<;@SwishAbortLastError47GSwishNextResult48b#0SwishNextResult47@SwishNextResult45G freefileinfo46b#0 freefileinfo45@ freefileinfo49$GD decc$strlen4:,b#0 decc$strlen49@@D decc$strlen,DG\emalloc,Pb#0emalloc,X@\emalloc4/`Gdecc$txsprintf40tb#0decc$txsprintf4/@decc$txsprintf, Gestrdup, b#0>estrdup, @estrdup47GSwishNextResult48b#0SwishNextResult47@SwishNextResult<1GgetResultPropAsString<2b#0getResultPropAsString<1@getResultPropAsString4Gdecc$txfprintf4 b#0decc$txfprintf4@decc$txfprintf4Gdecc$txfprintf4 b#0decc$txfprintf4@decc$txfprintf44GTdecc$txfprintf4 Hb#0decc$txfprintf4P@Tdecc$txfprintf4dGdecc$txfprintf4 tb#0decc$txfprintf4@decc$txfprintf4Gdecc$txfprintf4 b#0decc$txfprintf4@decc$txfprintf,Gefree,b#0efree,@efree45G freefileinfo46b#0 freefileinfo45@ freefileinfo4G decc$txfprintf4  b#0decc$txfprintf4 @ decc$txfprintf, G4 efree,, b#0efree,0 @4 efree40 GL decc$fputc4D b# decc$fputc4H @L decc$fputc, G efree, b#efree, @ efree, G efree, b#efree, @ efree<P Gt charDecode_C_Escape <T b#@charDecode_C_Escape<p @t charDecode_C_Escape4x G decc$fputc4 b#@ decc$fputc4 @ decc$fputc40 b#  decc$fputc4H GX decc$fputc4T @X decc$fputc,$ G< progerr,0 b# progerr,8 @< progerr4/< G\ decc$txsprintf40T b# decc$txsprintf4/X @\ decc$txsprintf4) G str_skip_ws4*b# str_skip_ws4)@ str_skip_ws4)G< str_skip_ws4*(b# str_skip_ws4)8@< str_skip_ws4%G decc$isspace4&b# decc$isspace4%@ decc$isspace,Gemalloc,b#emalloc,@emalloc4+G decc$strncpy4, b# decc$strncpy4+@ decc$strncpy4)@GT str_skip_ws4*Lb# str_skip_ws4)P@T str_skip_ws4-TGx decc$strncmp4.pb# decc$strncmp4-t@x decc$strncmp,G emalloc,b#emalloc,@emalloc4+G decc$strncpy4,b# decc$strncpy4+@ decc$strncpy<GtgetResultPropValue<hb#getResultPropValue<p@tgetResultPropValue4tG decc$txprintf4!b# decc$txprintf4@ decc$txprintf4G decc$strcmp4b# decc$strcmp4@ decc$strcmp<!GfreeResultPropValue<"b#freeResultPropValue<!@freeResultPropValue<GgetResultPropValue<"b#getResultPropValue<@getResultPropValue4#G$ str_basename4$ b# str_basename4# @$ str_basename, $G8estrdup, 0b#estrdup, 4@8estrdup,8GTefree,Hb#efree,P@#Tefree4Gdecc$txfprintf4 b#decc$txfprintf4@decc$txfprintf4Gdecc$txfprintf4 b#decc$txfprintf4@decc$txfprintf4%dGx decc$isspace4&lb# decc$isspace4%t@x decc$isspace4$Gdecc$txfprintf4 b#decc$txfprintf4@decc$txfprintf4G decc$strcmp4b# decc$strcmpl l 4@ decc$strcmp4Gdecc$txfprintf4  b#decc$txfprintf4@decc$txfprintf, G4emalloc,%,b#emalloc,0@4emalloc<'4GLdecc$__utctz_localtime<(Db#decc$__utctz_localtime<'H@Ldecc$__utctz_localtime<LGldecc$__utc_strftime<db#decc$__utc_strftime<h@ldecc$__utc_strftime4pGdecc$txfprintf4 &b#decc$txfprintf4@decc$txfprintf,Gefree,b#efree,@efree4Gdecc$txfprintf4 b#decc$txfprintf4@decc$txfprintf,Gprogerr,b#progerr,@pro'gerr<!GfreeResultPropValue<" b#freeResultPropValue<!@freeResultPropValue4pG decc$strcmp4|}# decc$strcmp4@ decc$strcmp4G4decc$txvfprintf4 {#decc$txvfprintf40@4decc$txvfprintf4 (|Gerealloc4 b#erealloc4 @erealloc,Gemalloc,b#emalloc,@emalloc, Gestrdup, b#estrdup, @estrdup,Gemalloc,b#0emalloc,)@emalloc,Gemalloc,b#0emalloc,@emalloc4DGd strtolower4Pb#0 strtolower4`@d strtolower<tGgetPropNameByName<b#0getPropNameByName<@getPropNameByName*,4GTprogerr,Db#0progerr,P@Tprogerr  =0$Unknown Display property name "%s"(=h^Swish-e database error. Unknown property type accessing property '%s'%Y-%m-%d %H:%M:%S %Z=(=0%Formatstring: unknown abbrev '%%%c'= swishlastmodified+= swishdescription=`````````````@``````````````````````0```` `P%%r%s%%p%s%%t%s%%l=(%s: requires "name" "fmtstr"=ResultExtFormatName =0 ;= ema,lloc=0" ;=`H ;` strtolower getPropNameByNameprogerr=0 P;=0  estrdup erealloc=0";=P, 8 OTS$HOME_ARGS7decc$ga_stdout decc$txvfprintf= 0"P;=0- decc$strcmp=0" ;=0(  decc$fputc charDecode_C_Escape=%s=%f decc$__utc_strftime=%ld=(null) decc$txprintfefree getResultPropValue7decc$$gl___ctypea=0 ;=p< decc$txfprintf7.decc$$ga___ctypet0 !freeResultPropValue# str_basename=swishdocpath`= swishtitlep% decc$isspace 'decc$__utctz_localtime=%d=%lu=0" ;=P4 ) str_skip_ws+ decc$strncpy- decc$strncmp=fmt==0  /;=`8  ;=0" ;=(0L swishrankP=swishdocsize`=swishreccountp= swishdbfile/decc$txsprintf;=swishstartpos=<%s>=0 ;= @,  1get0ResultPropAsString=" 3SwishSeekResult=%r %p "%t" %l 5 freefileinfo=0 ;=d 7SwishNextResult9 decc$strlen ;SwishAbortLastError=%c= = "=0("p;=`@<  =decc$1strcasecmp=0 ;=@,| @ @6=F F=6.- RESULT_OUTPUTCompaq C V6.5-001 = $44=%initModule_ResultOutput4=80/ 9 9 9 9 = # #= $44=%freeModule_ResultOutput24= !9 !9 (9 .9  69  <9 @9 @9 @9 E9 K9 K9% K9 S9 Q98 = + += &p44='configModule_ResultOutputp4= p9 n9  n9 n9 r9 n9  q99 {99 ; ; }9< }9*A }9C3 }9(: :=  4= ~9 =/v4= 4= 4H4= `4= h4=  = ` = 44= initPrintExtResult4=WON 9 9  9 9 9 9 9 9"( = 40 = 404= printSortedResults4= 9  9  9 9 9 9 9 9 9 9 9 : :  : : : : < )< )< )< )< )< 2< 5< 7< 9< ?< C<( ?<  ?< N< 5<5 5< : \: :=  4= : =  =  =   44=!printExtResultEntry 4= >: 7: 7: 7: 7: >: >: C: C: C: X: L: G: @: 4 =  = # 4@4=$printResultControlChar6 4=KCB o: o: t: t: w: x:( = # #= " 4 4=#printTagAbbrevControl 4= : :( : : : : : : : :( : : : =  = ' 44=( >7parsePropertyResultControl 4=' :  :  : :   : : :d : : : : : : : : : : : : : :  ; ; ; ; ; ; ;< = P = '44=( printPropertyResultControl4==5 ";8 "; "; *; -;  :; :; >; D; F; U; T; \; [; b; b; e; b; e;  n; u; v; y; ; ;+ ; ; ;< = @/ /=+#"addResultExtFormatStr =  = P44= hasResultExtFmtStrP49=5-, ; ; ; ;  = p = 44=resultHeaderOut4=910 ; ; < < <  = 7 7=3+*printStandardResultProperties =  = +P44=,$addSearchResultDisplayPropertyP4=A98 X< X<: ]< c< c<$ =  = ' 404=( initSearchResultProperties 4= s< o<  < < <  < <  < < < < < <@ < < <  = @| |b e4 e4 =; h h decc$isspace decc$$ga___ctypet decc$$gl___ctypea decc$strncpy decc$strcmp decc$strncmp decc$strlendecc$strcasecmp decc$__utc_strftime decc$__utctz_localtimedecc$ga_stdoutdecc$txfprintf decc$txprintfdecc$txsprintfdecc$txvfprintf decc$fputcemallocereallocefree strto<lower str_skip_ws charDecode_C_Escape str_basenameestrdup getPropNameByNameSwishNextResultSwishSeekResult freefileinfo getResultPropAsString getResultPropValue freeResultPropValueprogerr SwishAbortLastError OTS$HOME_ARGS c$isww19[َ]V1.0EE date_timeV1.0 4-AUG-=2004 09:33Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J TimeElapsed(J@TimeCPU0J@P getTheDateISO0J get_cpu_secs =#0^0[~4G">8^@GG8b/@Zk =G4G B(b@@Zk] ]( (=G0][8][jX[@P# _ _[/k///#TGG^~"0[ ^(GG8b@Zk_ =0J_}[[ "aAYaYG] ](0#k///P{#//#"4G^~@[ ^(GGHb/@Zk0BG4G8b@Zk`B4Ghb"@ZkPBG?" BXbG@ZkG] ](0#/k4G4? decc$times4(b# decc$times40@4 decc$times4DGX decc$sysconf4Hb# decc$sysconf4T@X decc$sysconf< Gdecc$gettimeofday<b#decc$gettimeofday< @decc$gettimeofday,dGemalloc@,xb#@emalloc,@emalloc4Gdecc$__utc_time4b#@decc$__utc_time4@decc$__utc_time< Gdecc$__utctz_localtime< b#@decc$__utctz_localtime< @decc$__utctz_localtime< Gdecc$__utc_strftime< Ab#@decc$__utc_strftime< @decc$__utc_strftime6 6=%Y-%m-%d %H:%M:%S %Z =00(;=P$  decc$sysconf decc$times=0"P;=0$ ;p decc$__utc_timeemalloc decc$__utc_strftime decc$__utctz_localtimBe=0@;=0(;= 0( $tI decc$gettimeofday@ @6=B B=2*) DATE_TIMECompaq C V6.5-001 = 44= get_cpu_secs4=H@? 6 6 6 6 6 6 = C = 44= TimeElapsed4=,$# 9 9 9$ = t t= @44= TimeCPU@4= 9 =  = P4@4= getTheDateISOP4=C;: 9 9 9 9 9 = D  =  decc$__utc_time decc$__utc_strftime decc$__utctz_localtime decc$times decc$gettimeofdayemalloc decc$sysconf c$__ww1܅[َ]V1.0GG keychar_outV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$iT$CODE$ $LITERAL$$ELINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J OutputKeyChar@ @ =\T#4G~^[^~ (0޴8@H>PGGGGb/@ZkpBG4Gxb@Zk BG4GB"G(bPb@Zk(U@8D`/ BG4G eG(b4GB"4G@Zk)/@BEGGtGHb@Zk G///), BG0B"4G(bGG)H @Zk`BG4FGhb/@Zk A 0@/?0@' !?#//@BGGGtGHb@Zk G///, BG0B"4G(bGGH //@Zk`BG4Ghb@Zk A 0@? BGB"4GtG(b/@ZkG]]} (0ݤ8@H=P`#/k4 GT SwishAttach4 Hb# SwishAttach4 P@T SwishAttach<TGlSwishAbortLastError<Gdb#SwishAbortLastError<h@lSwishAbortLastError4lGresultHeaderOut4b#resultHeaderOut4@resultHeaderOut4GresultHeaderOut4b#resultHeaderOut4@resultHeaderOut4G getfilewords4b#H getfilewords4@ getfilewords4G,resultHeaderOut4b#resultHeaderOut4(@,resultHeaderOut4,GD decc$strlen48b# decc$strlen4@@D decc$strlen4pG getfilewords4b# getfilewords4I@ getfilewords4GresultHeaderOut4b#resultHeaderOut4@resultHeaderOut4G decc$strlen4b# decc$strlen4@ decc$strlen4GresultHeaderOut4b#resultHeaderOut4@resultHeaderOJut7 7=# SWISH format: 2.4.2{ {=0 ;=`< resultHeaderOut= %s@ getfilewords;` decc$strlen SwishAbortLastError SwishAttach=%s =%s:=  @ @6=KD D=4,+ KEYCHAR_OUTCompaq C V6.5-001 = 44= OutputKeyChar4= . . . . . . . . .( . . . .8 = T =   decc$strlen SwishAttach SwishAbortLastErrorresultHeaderOut getfilewords Lc$stww1[َ]V1.0CCextprogV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i$CODE$5 $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$(ExternalProgramDataSource0JinitModule_Prog0JPfreeMModule_Prog8JconfigModule_Prog@ ExternalProgramDataSource =#4G^ [~GG({@Zk=$G] #k/C#4G$Q^[~^ GG ^b/@ZkB 4Gb@Zk]$G]] 0#k/$q#TG^~^ ~(GGGp;0[8b  1"/@Zk# BG4G](btG= @ /@Zk4NG/p@BTG =Hb"@Zk4G///GG]] }(0#/k///$P`#4G ^~[(^0~8@H޴PX`>h^p~x޵GGG!0"b G G>@Zk B GG(b/@Zk G//` G/0BG4G8b@Zk0B GG4G8b@Zk0BA4G8bP@@ZkB GG8""GGb"Gb@ZkBHb ""b@ZkB4G GbGG/@Zk0B4G8b G@ZkBOG4Gb@ZkB0B4G8b4G0,0HpA%@%@/@2F!F/ ///@Zk ._"../"2@JBJ G@Jr@JTGb3FtJF5FF >>G=@Zk 0B0A4G8b@ZkPB G=GTGXb/@ZkBGGTGb G/@Zk.!PJ>=V`qACQ.QJ/P ///0BG4G8b@Zk0B0@4G8b@ZkPBGGTGXb@Zk0BGG4G8b@Zk ///BGTG="b@ZkG@BGG&GtGHb@PZkBGG4Gb@ZkPBG4GXb@Zk pBPDGTGxb"/@ZkBG4Gb@ZkgA,HG BG=btG"@ZkBG4Gb@Zk@ GTGBbx"/@ZkG /0B4G8b"@Zk@0@0BG4G8b@Zk0B@4G8b0@/@ZkPB GGGTGXb/@ZkBG4Gb@Zk$///BGTG""b@ZkB/"GTGb/@Zk//pBG""TGxb@Zk BQ GGTGbH"/@ZkBG4Gb G@Zk0B"4G8b@¥@ZkBPcGGP?"GtGb/@Zk//`BG4GhbG@ZkBGGTGTGb@Zk///#@ G////.D .P JJPBF /m.PB4GXbSmJgJ@Zk/!A/ .P J >0BG4G8b@Zk B@4Gb"@Zk B GbTG"@Zk@ GpBxbTG`"YA////@Zk`BGhRb@Zk`BGG4G@hb/@Zk`BG4Ghb @Zk= ,/pBGGTGxb@Zk=(// 0/0 B0/8BGGGtGb/-8@ZkB  G4G8b@Zk@B o"G""GPB"GHb@Zk0BGOG4GGG8b/@Zk TGBb0"D /@ZkBG4Gb4G@Zk@BGh"bTGy@@Zk BY@GbTG"@ZkBGGTGb@ZkB 4Gb@Zk BTG /Sb"@ZkBG4Gb GG G@Zk/BGGX""tGb@ZkBGTGTGb@Zk B GGTGb"@ZkpBGTG "tGxb@ZkGBGTG""tGb@ZkBGTGTGb@Zk BGGTGb"@ZkpBGTG"tGxb@ZkBGG""tGb@Zk/ 0 A/BG4G""tGb@ZkB3GTGTGb@Zk B GGTGbp"@Zk`B4Ghb "/@Zk, GGBbTGTH8"/@Zk0BG4G8b@Zk0B0@4G8b@ZkPB GGGTGXb@ZkF/BGG""tGb@ZkB3GTGTGb@Zk B GGTGb"@Zk`B4Ghb "/@Zk, GGBbTGH"/@ZkBG4Gb@Zk BCGGtGb"@Zk // pBGtG]xbP"/@ZkBG?"GtGb/@ZkBBHGb4G/@ZkPcG4GBb E ///@Zk B 4GbU "@ZkG ](]0}8@HݤPX`=h]p}xݥ#/k///Gk, G,emalloc ,${#emalloc,(@,emalloc,+hGefree,,b#efree,+@efree,+Gefree,,b#efree,+@efr>Vee4Q G$decc$strcasecmp4Rb#decc$strcasecmp4Q @$decc$strcasecmp4O,GTgrabCmdOptions4P<b#grabCmdOptions4OP@TgrabCmdOptions,-dG|progerr,.pb#progerr,-x@|progerr4AGL decc$getenv4BW0b# decc$getenv4AH@L decc$getenv4LGd get_libexec4Xb# get_libexec4`@d get_libexec4/G decc$strlen40b# decc$strlen4/@ decc$strlen4/G decc$strlen40b# decc$stXrlen4/@ decc$strlen,Gemalloc,b#emalloc,@emalloc4Gdecc$txsprintf4b#decc$txsprintf4@decc$txsprintf4G decc$strcmp4b# decc$strcmp4@ decc$strcmpY4G4normalize_path4 b#normalize_path40@4normalize_path4/8GL decc$strlen40@b# decc$strlen4/H@L decc$strlen<ELGdabsolute_program<F\b#absolute_program<E`@dabsolute_program,lZGemalloc,tb#emalloc,@emalloc4%G  decc$strcat4&b# decc$strcat4%@  decc$strcat,G$emalloc,b#emalloc, @$emalloc41$GD decc$strcpy428b# decc$strcpy[41@@D decc$strcpy47DGd decc$strrchr48Tb# decc$strrchr47`@d decc$strrchr4/G decc$strlen40b# decc$strlen4/@ decc$strlen,Gemalloc,b#emalloc,@emalloc41\G decc$strcpy42b# decc$strcpy41@ decc$strcpy4/G decc$strlen40b# decc$strlen4/@ decc$strlen<=G(get_next_path_element<> b#get_next_path_element<=$@(get_next_path_element<,]GLmake_full_pathname<Db#make_full_pathname<H@Lmake_full_pathname ,+LGdefree,,\b#efree,+`@defree4dGx file_status4pb# file_status4t@x file_status45Gprogwarn^46b#progwarn45@progwarn,+Gefree,,b#efree,+@efree,-Gprogerr,.b#progerr,-@progerr,+G efree,,b#efree,+@ efree4#_G4 decc$txprintf4$ b# decc$txprintf4#0@4 decc$txprintf4/@GT decc$strlen40Hb# decc$strlen4/P@T decc$strlen4/dGx decc$strlen40pb# decc$strlen4/t@x decc$strlen,xGemalloc`,b#emalloc,@emalloc41G decc$strcpy42b# decc$strcpy41@ decc$strcpy,+Gefree,,b#efree,+@efree4%G decc$strcat4&b# decc$strcat4%@a decc$strcat4%G decc$strcat4&b# decc$strcat4%@ decc$strcat4K$G< decc$popen4L4b# decc$popen4K8@< decc$popen49@Gd progerrno4:Tb# progerrno49`@d progerrno,+dbG|efree,,pb#efree,+x@|efree,|Gemalloc,b#emalloc,@emalloc4!G decc$fgets4"b# decc$fgets4!@ decc$fgets43G str_skip_ws44b# str_skip_wsc43@ str_skip_ws47G decc$strrchr48b# decc$strrchr47@ decc$strrchr4dG| decc$isspace4lb# decc$isspace4x@| decc$isspace4/G decc$strlen40b# decc$strlen4/@d decc$strlen,-Gprogerr,.b#progerr,-@progerr,-Gprogerr,.b#progerr,-@progerr45 G4 progwarn46 b#progwarn450 @4 progwarn<4 GD init_file_properties<e< b#init_file_properties<@ @D init_file_properties,D Gd estrdup,X b#estrdup ,` @d estrdup,d G| estrdup,p b#estrdup,x @| estrdup< G init_file_prop_settings< b#init_file_prop_settings<f @ init_file_prop_settings4M G read_stream4N b# read_stream4M @ read_stream,+ G efree,, b#efree,+ @ efree4I G< create_tempfile4J4 b#create_tempfile4I8 @< create_tempfile4Gg< Gd decc$fwrite4HX b# decc$fwrite4G` @d decc$fwrite49p G progerrno4:t b# progerrno49 @ progerrno4 G decc$fclose4 b# decc$fclose4 @ decc$fclose4# G decc$txhprintf4$ b# decc$txprintf4# @ decc$txprintf4# G decc$txprintf4$ b# decc$txprintf4# @ decc$txprintf4  G do_index_file4  b# do_index_file4  @ do_index_file4  G$ decc$remove4  b#i decc$remove4  @$ decc$remove4;( GD progwarnno4<8 b# progwarnno4;@ @D progwarnno< D Gd free_file_properties<P b#free_file_properties< ` @d free_file_properties<)p G decc$strncasecmp<* b#jdecc$strncasecmp<) @ decc$strncasecmp4' G decc$strchr4( b# decc$strchr4' @ decc$strchr,- G progerr,. b#progerr,- @ progerr4 G decc$strtol4  b# decc$strtol4 @ k decc$strtol<) G decc$strncasecmp<* b#decc$strncasecmp<) @ decc$strncasecmp4' G( decc$strchr4( b# decc$strchr4'$ @( decc$strchr,-, GL progerr,.@ b#progerr,-H @L progerr4L lGh decc$strtol4 ` b# decc$strtol4d @h decc$strtol<)p G decc$strncasecmp<* b#decc$strncasecmp<) @ decc$strncasecmp<) G decc$strncasecmp<* b#decc$strncasecmp<) @ decc$strncasecmp4'm G decc$strchr4( b# decc$strchr4' @ decc$strchr,- G progerr,. b#progerr  ,- @ progerr43 G str_skip_ws44 b# str_skip_ws43 @ str_skip_ws,-$ GD progerr,.( nb#progerr,-@ @D progerr4/D GX decc$strlen40P b# decc$strlen4/T @X decc$strlen,X Gl emalloc,d b#emalloc,h @l emalloc41l G decc$strcpy42 b# decc$strcpy41 @ decc$storcpy<) G decc$strncasecmp<* b#decc$strncasecmp<) @ decc$strncasecmp4' G decc$strchr4( b# decc$strchr4' @ decc$strchr,- G progerr,. b#progerr,- @ progerr43 Gp str_skip_ws44 b# str_skip_ws43@ str_skip_ws,-G4progerr,.b#progerr,-0@4progerr4C4GH strtoDocType4D@b# strtoDocType4CD@H strtoDocType,-LGtprogerr,.hb#progerr,q-p@tprogerr45Gprogwarn46b#progwarn45@progwarn4!G decc$fgets4"b# decc$fgets4!@ decc$fgets,+Gefree,,b#efree,+@efree4?rG decc$pclose4@b# decc$pclose4?@ decc$pclose4;G4 progwarnno4<(b# progwarnno4;0@4 progwarnnoU U=prog=External-Program- - =8-Failed to properly close external program: P=8+Unknown header linse: '%s' from program %s=`Sdocumnet type '%s' not a valid Swish-e document type in Document-Type header '%s'=@6Failed to documnet type in Document-Type header '%s'=0$Failed to parse Document-Type '%s'8=@3Failed to find path name in Path-Name header '%s'p=0'Failed to parse Path-Name header '%s'=`TFailed to parse Last-Mtime hteader '%s'Failed to parse Content-Length header '%s'=0&Error removing temporary file '%s': = Processing %s... 0=8.Failed to write temporary filter file '%s': `=External program returned zero Content-Length when processing file'%s'External program failed to return required headers Content-Length: when processing file '%s'=H?External program failed to>u return required headers Path-Name:H=8)Failed to spawn external program '%s': x=(External Program found: %s =8*Failed to find program '%s' in PATH: %s =8*Found '%s' in PATH but is not executable=0!%s: requires at least one value =SwishProgParameters =0 ;v= $ emalloc=0; decc$isspace init_file_properties(init_file_prop_settings= Path-Name=No-Contents: do_index_file decc$remove free_file_properties=w decc$fclose decc$strcmpdecc$txsprintfnormalize_path get_libexec=wPATH(=%s%s%s make_full_pathname file_statusestrdup decc$strtol! decc$fgets# decc$txprintf% decc$strcat' decc$strchr7decc$$ga___ctypet )decc$strncasecmp+efree-progerr=0 ;=X ; / decc$strlen7decc$$gl___xctypea7 decc$ga_stdin1 decc$strcpy3 str_skip_ws5progwarn7 decc$strrchr9 progerrno; progwarnno=Document-Type =get_next_path_element? decc$pclose=:A decc$getenvC strtoDocType Eabsolute_program=stdin G decc$fwrite Icreate_tempfile=fltryH= Content-Length%s`K decc$popen=rx= M read_stream= Last-Mtime=0";=0, OgrabCmdOptions Qdecc$strcasecmp=0 P;=00 @ @6=h hz44404@ @=0('EXTPROGCompaq C V6.5-001 = 44=initModule_Prog4=7/. 1 1 1 1 = P = P44=freeModule_ProgP4=MED 1 1 1 1 1 1 1 { =  = 44=configModule_Prog4=^VU 1 1 1 1 1 1  1 2, = / /=+#"open_external_program = + +='save_to_temp_file =  = 44=extprog_indexpath|4=ME 2e@ t2@ t2H 2q3 2 t2 4 3 3 2 2 2C R3 2> 2> V3  Z3  ]3 b3 b3 e3 d3 e3 j3 n3 t3 x3 z3 3 3 3 t30 2 2 2 &2 $2 *2  72 >2 C2C 2 2 2 2} 2 2 2 2 2 2 2 2 2  2 2 2 2 2 2  [2z Z2 [2 ]2 a2 e2 j2n n2m 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 !3 "3~ "3 %3 %3 %3$ 2 03+ 53 53 63 63\Z Z=   4=  e4= 2} }=v 4=  4=  4= Z Z=  4=  e4= 2: :=  $4= 2} }=v$4=  84=  H4= : :=  4= 2 ='v4= 4= ,4= H4= $ =7v4= 4= 4=  4= ,4= H 4= 4 =  = "404=#extprog_parseconfline4= B3 = . .=*"!find_command_in_path = 6 6=2*)get_env_path_with_libexecdir = | |e4e4 = P P decc$ga_stdin decc$fwrite decc$fclose decc$txprintf decc$removedecc$txsprintf decc$fgets decc$popen decc$pclose decc$getenv decc$strtol decc$strcat decc$strchr decc$strcpy decc$strrchr decc$strcmp decc$strlendecc$strcasecmp decc$strncasecmp decc$isspace decc$$ga___ctypet decc$$gl___ctypeaemallocefree str_skip_wsestrdup do_index_file get_libexecnormalize_path read_stream init_file_properties init_file_prop_settings free_file_propertiescreate_tempfileprogerr progerrnoprogwarn progwarnnograbCmdOptions strtoDocType file_status absolute_program get_next_path_element make_full_pathname )c$gaww1K[َ]V1.0@@bashV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$ $LINK$ $DATA$$BSS$ $READONLY_ADDR$ $READONLY$0JP file_status8JPabsolute_program8Jpget_next_path_element8J make_full_pathname, , =;QR"/@1!  1BBD/k///#@^ [~TG>"H^PGG(b/@ZkG&= "&4G"R HQ1"pF"R"@`Jw`JFxF}tGBFb#G tG2F0vJ_tG2FtG2`FG@]H]P`#/k///#GTG~^ [({G@ZkG]C #/k///#4G~^^~ (0޴8GGGG[kb//@Zk @e@/c.JU'@@e@e@GU.UJ/(@///.J"XF u/uK0@FuKXD"//5.0@5J5J" X'F .0@JJ"@XFU/UK0@De@0@.J`$B4G4Gb@ZkBGTG0""b@ZkG/B#@4Gb0`@@Zk BG@GGtG(bG@Zk,GGFH<G/G//0,@B4GHb0H @ZkBTG4Gb/@ZkBG8""TGb@ZkG]]} (0ݤ8@#k///#4G^8[~ ^(~0GGC >^@b/@ZkHB4GPb@PB@Zk(BG=GTG0b/@ZkG(BTG0b`@ .r H"Q J2F > =@ZkG]G ](}0@#k4 XGdecc$__utc_stat4xb#decc$__utc_stat4 @decc$__utc_stat4 dGx decc$strchr4 h{# decc$strchr4 t@x decc$strchr4G decc$strlen4b#p decc$strlen4@ decc$strlen,G emalloc,b#pemalloc,@ emalloc4 G$ decc$strcpy4b#p decc$strcpy4 @$ decc$strcpy,0GHemalloc,<b#pemalloc,D@Hemalloc4HGl decc$strncpy4`b#p decc$strncpy4h@l decc$strncpy, Gefree, b#pefree, @efree,Gemalloc,b#pemalloc,@emalloc4G decc$strcpy4b#p decc$strcpy4@ decc$strcpy4,Gd decc$strlen4Xb# decc$strlen4`@d decc$strlen,hGemalloc,tb#emalloc,@emalloc4G decc$strcpy4b# decc$strcpy4@ decc$strcpy4G decc$strcpy4b# decc$strcpy4@ decc$strcpyD D=0;;=0" ;=@$ @ decc$strcpy decc$strlenemalloc=0";=@,|  decc$strncpy==. efree=0"P;= $  decc$strchr=0@"P;=`$ decc$__utc_stat, ,= @ @6== ==-%$BASHCompaq C V6.5-001 = 44= group_member4=! ! = P = P44= file_statusP4=zy ? ? ? J J J c h _  g( =  = P44=absolute_programP4=/'& } } }  = P, ,=( extract_colon_unit =   = "4p4=#get_next_path_element4=  )0            4Z Z=  4=  fe4=  ='v4= 4= P04= Dx4=  =  =  44= make_full_pathname 4=ZRQ          =  =   decc$strchr decc$strcpy decc$strncpy decc$strlenemallocefreedecc$__utc_stat c$stww1-p\َ]V1.0EE db_nativeV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i6$CODE$ $LITERAL$P $LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8JinitModule_DBNative8J0 freeModule_DBNative8J DB_Create_Native0J0 P DB_Open_Native0JDB_Close_Native8JXDB_Remove_Native@J80DB_InitWriteHeader_Native@JDB_EndWriteHeader_Native@JPDB_WriteHeaderData_Native@J0DB_InitReadHeader_Native@JDB_ReadHeaderData_Native8JDB_EndReadHeader_Native@JpDB_InitWriteWords_Native8JDB_GetWordID_Native8JpDB_WriteWord_Native8J DB_WriteWordHash_Native8JPDB_WriteWordData_Native8J DB_EndWriteWords_Native8J@ DB_InitReadWords_Native8J` DB_ReadWordHash_Native@Jpp"DB_ReadFirstWordInverte37ugako$@J8p%DB_ReadNextWordInverted3jc21sj$8J'DB_ReadWordData_Native8JP DB_EndReadWords_Native8J(DB_WriteFileNum_Native8J(DB_ReadFileNum_Native8J(DB_CheckFileNum_Native8J(DB_RemoveFileNum_Native@J(DB_InitWriteSortedIndex_Native@JP)DB_WriteSortedIndex_Native@J`+>DB_EndWriteSortedIndex_Native@JP+DB_InitReadSortedIndex_Native@J0+DB_ReadSortedIndex_Native@J -DB_ReadSortedData_Native@J-DB_EndReadSortedIndex_Native@J.DB_InitWriteProperties_Native8JP/DB_WriteProperty_Native@JP1DB_WritePropPositions_Native@J`2DB_ReadPropPositions_Native8J3DB_ReadProperty_Native@JP6DB_Reopen_PropertiesFor05g7evv$0JP- printlong0Jp.readlong8Jcmp_wordhashdata =#4G^`[~^ ~(GGGhb@ZkBG4G"b/@ZkPB¦xpBC òB(¦0H C$C( ,ò0BB8¦@h4C<8@CDHòP¦pBBLXXPCT\C`dòh`Bx¦BlCtBpxC|ò¦BCCòxG]] }(0#k///0#4G~^[^~ GGGb@ZkB4Gb/@ZkG]]} 0#k///#4G^8[~^ &" ~(GG >@b/@ZkB ?&G &G(1"0¦Pb4G/@Zk=HB8"b  U@"B C$ղ5u5@ZkGG]] }(0#/k///(TG8;"0{k///TG ;"{k///#TG ;"^~[^ GGCb@ZkC TG(0B=8b8"/@ZkP G4GXb]] 0#k/#TGH^([~P^X~`hpGG@GG>"0b@Zk=&8BG@b"TGR H0D"! D////@Zk@Gb#g_8B $GG4G@b@Zk8B $$G4G@b/@Zk(B@4G0b@ZkBGGGTGb@ZkBG ""TGb@Zk4G $$Gb#_BG""TGb@Zk $$BGTGb"@ZkBG4Gb@Zk &B?&Bhb#b1" @ &Bhb#0 @BGGTGb4G@ZkBGTG""b@ZkBG ""TGb@Zk $Gb#`P_BGTG""b d$@ZkBGTGbX"/@ZkBG4Gb d @Zk &Bhb#0 @BG4G4 bD@ZkG//@w# ^"8c %@"Fc&$?'4""BGc 9#F///CU#"@" WC CzGc? C/0C" C$&G1"6BF//BBq""@1" vB YBDc CB`/0@B1" CBHB &4GPbG/@Zk// &0@Ghb#BA @ HB &4GPbG/@Zk// &0@Ghb#B- @Ӡ @GH]GP]X}`hp#k/#0X@F8@F8^~@^H~PX`޴hGGGGPGuFF0~b#%_0} $G4GՁ $G[/@ZkB B"G G%(bR"/@Zk//@BG4GHb $@ZkBG4Gb/@ZkB@4Gb@ZkBGGGTGb e$@Zk`BGTGp""hb/@Zk0}G4G[@ZkB B"GG%(bHR"@Zk//Bb &GՐGtGB$bb /@Zk e&C"Gs[4GG@Zk`B4Ghb@ZkBD@B e&" %sGHbR"@ZkH3r/ e&CG"s[4GG $@Zk`B4Ghb@ZkCdG"4GG[/@Zk`B4Ghb@ZkՄB &"@BGHbDR"/%tՔ@ZkH/@B &4Gb@ZkG e //b e&G "s4GG0@c [@Zk`B 4Ghb/@Zk"/B &$4Gb4e G @Zkb e&G("s4GG0@c [@Zk`B(4Ghb/@Zk @/G8]G@]H}PX`ݤhp#/k///C#4G^H[~^ ~(0G ^DGGPb@Zk (BTG#0b("@Zk =4GBb!* @ZkXBGG4G`b@Zk @xBGTG@b.PJ>@Zk(B G0b#tG@ZkhBG?"TGpb/@Zk 8BG4G@b/@Zk8B4G@b@ZkG]] }(0@#k/# &~^4"T"^~ (0޴8@GGGՔG"8{#_ $@BGGtGHb U@CD #@Zk/0@&Gb#B@  @B$G#GtGHbG4  =@Zk 0@&Gb#Bv@Ӡ @  $$""D"8b#]_ӴpB4Gxb////@ZkpG]Gxb]4G} (0ݤ8@P#/k///#4G~^[^~ GG &Gb@Zk(B &0b4G@ZkB &b4G@ZkGbG]]4G} 0#k//(0#GtG~^[^~ GGG &b@Zk/B &4Gb@Zk(GG]]} 0#k/#GGTG~^ 1&[1^GGb@ZkB4G "b///@ZkG]]G #/k///# s&tG^~^ ~(0GGGՓ[>[bG@ZkBGGtGbB@ZkBG4GGGb@ZkB8DGbTG"@ZkG]]G }(0@#/k///#G &G~^tG[G(1{@ZkG]G #/k///# s&TG^~ ^(~08GGsp[ >h;xb^G/@Zk=pBGTGh"xb///@ZkpBG0@4Gxb@Zk ==G4GBbGGG@Zk G] ](}08G@#k/Gk//#4G^[C &~G{@Zk=$G]G #k///1 B/k///# 0&4G^~0[^~ (0޴8@HGGG8b"@Zk $ #$BL9!4Gb`"D/@Zk $ #$B\9!4Gb"D@Zk@B $ &G `9GG bHbG@Zk #$Ձ!3 // & &$ctG`9t0@B[@PG1SBG@ZkB #&GTG1b/@Zk #$GG4GatG[@Zk C&G $GRPb#@GGGPb#@Ӭ砧 @/B &`94Gb@ZkpB $ &G`9L9TGtG\9峸xb@ZkB &4Gb@ZkB &GG$#tGb@ZkpB &GGtGxb@Zk /`B c&?""4GsGhb@ZkB c&G"G4GsGb@ZkB8D4Gb"//@Zk&@PB &4GXb@Zk0B &4G8b@ZkB &GTGtGb/@ZkB #&GTG1b/@ZkB 4Gb"@ZkG]]G} (0ݤ8@HP#k// 0&#TG1^~ [^ GG( ({?&"@Zk "$$4G &p[@Zk]G]@@] 0#k/#^~^ ~(08GGGGp.pJSrB  3BG4Gb@Zk D&0BCtGղR8bG@Zk $G=4G`GGG[@ZkCGGb#@ D&GGb#R@Ӭc $G0`@dG]] }(08@#/k/// &# &tG\9֢^~ [^ ~(08޴@HGGG>GGՠ &GTG(b ~/@Zk0B &4G8b@ZkB &GTGtGb@ZkBG4Gb@Zk@@ %$ $d9`9!pBPBF/'q1BQ!B1#F  GrRBRABRCF@B4Gbx"/@Zk e$B $`9cGb4Gg@@ZkC@BbGGtG\9`B0@\9@ZkB GtGb`B@ZkBG4GGGb@ZkB8DGbTG"@Zk@BGGTGHb@ZkB 4GbP"@ZkG]]G }(08ݤ@HP#k/// &#GL9td9"^~&^ ~D"(0F8޴@GGGGG`//B" @" BV"Gc_v"`/0B"" '@BG0"tGHbQC@Zk &GTGtGp[@ZkB &GGtGb@Zk $ B4G(b`@P@@Zk $$`9B4Gb@ZkE@4% 4e D&L92`9RPBq1B &TGXbQ2BqG/@Zk BGG4G(b@Zk $$@@ d&&L9! $ B4G(b&d9 0 @&d9L93/*@Zk@@ $$& $d9/`9!/&q1BQ!B10F Ơ/ FrRBRAB =RPF@ƠB4Gb"/@ZkƠ $`9f@D@d$eG]] }(0G8ݤ@P#/k///Gk//Gk//#C4G ^~ s&0[(^0~8@H޴PX`GGGՓ8b>^@Zk=@@4/W/4G///@BN GGGtGHb/@ZkBGx"TGb@ZkBG0@4Gb@ZkBG@G4GGGbG@Zk,PbG"4GGG@H<[@ZkB4Gb@ZkPbGG"4GGG[/@ZkB4Gb@Zk BGGG(b4G@ZkpBGGxb@Zk//CGǰG ](]0}8@GHݤPX`p#k/# &4G ^~[(^0~8@H޴PX`>h^pGGGGGԠbG^@Zk#,]G#HA%@ ! `BGGtGhb@ZkBG"TGb/@ZkB G0@4Gb@Zk Gh ///BG4GGGGb/@ZkxB DGGbtG"@Zk IApG" ,4GGGC@ H <[/@Zk B4G(b@ZkC"G4G[GG@Zk B4G(b@ZkBGGGGtGb@ZkBG4Gb#///@Zk%BGTG"b D@ZkB GG4Gb@ZkB0 A4Gb@Zk GB $G4Gb@ZkP9GBG4Gb//@Zk/D}G ](]0}8@GHݤPX`=h]p#k// &# &4GP90^~[8^@~HPX޴`GGGՔb>C ^/gӢF/c@ZkB #&GG(tGP91b@ZkBG"TGb@ZkBG0@4Gb@ZkBG@G4GGGbG@Zk%,(BGtG0bA%H%<(]@ZkB G4Gb c$@Zk ]P90èG4G"GG c$C[@ZkXB4G`b@ZkCG4G"[GG@ZkXB4G`b/@ZkBGG4Gb@Zk ]P9İ///= G0]8]@}HGPXݤ`p#k/# &tG^~ ^(~08GGGGՔ[>G ~bG@ZkBG"TGb@ZkBG"TGb@Zk =B4Gb@Zk(B#C4GGG0b@Zk}GdG] ](}08@#k//Gk//Gk//4Gk//Gk//#4G~^x[{^GG &@Zk  B$X9GG]] #k/# &tG^~ ^(~08@G >G 3&GGմ@[GX91HbG/@ZkBG4Gb@ZkGGb#B@@BGtGHb B@Zk@BGG8BHbtG@ZkPB G4GGGXb@ZkX`B8DGhbTG"@ZkBG4Gb/@Zk &@BGGT90tGHbX9G /@ZkG=b#B@@BGGGtGHb@Zk $GT9G] ](}08@P#k// &#G@[^~^ GG{#@ B=GTG(b/@ZkB 4Gbh"@ZkG]]G 0#/k///Gk//# &tG ^~(^0~8@H޴PGGGGGմ[b> 3G@ZkbG4G"GG[@Zk`B4Ghb/@ZkBGG"bTG/@ZkD%/BGGGtGb/@ZkbG"4GGG[@Zk`B4Ghb@ZkBGG"bTG@ZkD=BG"TGb@ZkBG4Gb/@ZkݠBG4GbGG$@ZkG ](]G0}8@HݤP`#k//P0BGk///Gk//#4G^ [~ ^(GG>C^(b@Zk}G4G"G}[/@ZkB8DG GbtG"@ZkG] ](0#k///#G^~4G"^ GGGGG[@Zk B4G(b/@ZkG]] 0#k/#4G^@[C &~GH{@Zk=0G]G #k/// #4G`>@ ^~WWB(^0~ !$x[ /=\T@"8@H޴PGGGGѠGb~ V! @ZkhB 4Gpb 1@P@@ZkBG=G@Zk=F&@/>/`B4Gb &@Zk@HBGtG #Pb"@Zk`=(BGtG B0b 1&1@Zk `=tG(B B0b0@ 1&D1@Zk`}8B4GG@bG s&s/@Zk@DHBG#GGPbG"@ZkG ](]0}8@HݤP`#k/#4G^~^ ~(08޴@[HPG ѠGGGb41@ PB@Zk@BG=G@ZkG G// &0@( Bb#_! @BG4Gb@ZkG]] }(08ݤ@HP`#/k///#4G^~ ^(~08@޴HGGGG p[xb 1@:P@@Zk BG=GGtG@Zk0Ģ &0B8b51BUBLB=@ZkH PBtG=CXbp"/@ZkG//@b d&G"s4GG0`@ [@ZkB4Gb/@Zk e@/G] ](}08@ݤHP#k/ Т#G^~ ^(~RWB08R@޴HGѠGGGG{# ^Gm //_à4G8B@b@"@Zk @@GZHB &4GPb@ZkB &GGtGb@ZkBG bCtG"@Zk(B & "TG0b/@Zk(B & "TG0b@Zk=///=B(B4G0b@ZkXB e&DC4GGs`b@ZkGtGBbD"/C//@ZkB &=GtGb@ZkG] ](}08@ݤHP#/k///#4G^ [~^ ~(0GGG &(b@Zk #&G]"xb#1""_`BGTGp""hb@Zk #$BGTGbH"/@Zk c$ՃG]] }(0@#k, G8emalloc,0b#emalloc,4@8emalloc,8GTestrdup,Hb#estrdup,P@Testrdup, Gefree, b#0 efree, @efree, Gefree, b#0 efree, @efree,LGemalloc,xb#emalloc,@emalloc4G>OTS$ZERO4@OTS$ZERO,b#estrdup,Gestrdup,@estrdup40GD decc$fopen4<{# decc$fopen4@D decc$fopen4PGd decc$fopen4\{# decc$fopen4`d decc$fopen4G decc$fopen4b# decc$fopen4@ decc$fopen4G progerrno4b# progerrno4@ progerrno4 G decc$fclose4 b# decc$fclose4  decc$fclose4O GHdecc$__utc_stat4P@b# decc$__utc_stat4OD@Hdecc$__utc_stat,PGprogerr,Xb# progerr,@progerr4QGdecc$__utc_time4Rb# decc$__utc_time4Q@decc$__utc_time4 G decc$strlen 4b# decc$strlen4 @ decc$strlen,Gemalloc,b# emalloc,@emalloc4MG decc$strcpy4N b# decc$strcpy4M@ decc$strcpy4KG, decc$strcat4L$b# decc$strcat4K(@, decc$strcat4DG\ decc$fopen4Tb# decc$fopen4X@\ decc$fopen4dG progerrno4xb# progerrno4@ progerrno,Gestrdup,b# estrdup,@estrdup4MG decc$strcpy4Nb# decc$strcpy4M@ decc$strcpy4KG decc$strcat4Lb# decc$strcat4K@ decc$strcat4KG decc$strcat4Lb# decc$strcat4K@ decc$strcat40GL decc$fopen4@b#  decc$fopen4H@L decc$fopen4PGt progerrno4db# progerrno4p@t progerrno,tGestrdup,b# estrdup,@estrdup, Gefree, b# efree, @efree4G decc$ftell4b# decc$ftell4@ decc$ftell4G decc$ftell4b# decc$ftell4@ decc$ftell4G G set_progerrno4H b#0 set_progerrno4G @ set_progerrno, G( estrdup, b#0 estrdup,$ @( estrdup4 ( GD decc$strlen44 b#0 decc$strlen4 @ @D decc$strlen,D GX emalloc,P b#0 emalloc,T @X emalloc4MX Gx decc$strcpy4Nl b#0 decc$strcpy4Mt @x  decc$strcpy4Kx G decc$strcat4L b#0 decc$strcat4K @ decc$strcat4G G set_progerrno4H b#0 set_progerrno4G @ set_progerrno4 G decc$fseek4 b#0 decc$fseek4 @ decc$fseek48 GL UNPACKLONG4D b#0 UNPACKLONG4H @L UNPACKLONG4IT G| set_progerr4Jp b#0 set_progerr4Ix @| set_progerr4 G UNPACKLONG4 b#0 UNPACKLONG4 @ UNPACKLONG4 G UNPACKLONG 4 b#0 UNPACKLONG4 @ UNPACKLONG4I GD set_progerr4J b#0 set_progerr4I@ @D set_progerr4T Gl decc$ftell4d b#0 decc$ftell4h @l decc$ftell4 G UNPACKLONG4 b#0  UNPACKLONG4 @ UNPACKLONG4 G decc$ftell4 b#0 decc$ftell4 @ decc$ftell4, GD UNPACKLONG48 b#0 UNPACKLONG4@ @D UNPACKLONG4  G decc$fclose4  b# decc$fclose4  @ decc$fclose4 G progerrno4 b# progerrno4 @ progerrno,G$estrdup, b#estrdup, @$estrdup4 $G< decc$strlen44b# decc$strlen4 8@< decc$strlen4@Gh decc$rename4Pb# decc$rename4d@h decc$rename4hG progerrno4xb# progerrno4@ progerrno4G decc$chmod4b# decc$chmod4@ decc$chmod, Gefree, b#efree, @efree, Gefree, b#efree, @efree4XG decc$fseek4lb# decc$fseek4@ decc$fseek4G decc$fseek4b# decc$fseek4@ decc$fseek,  GDefree, (b#efree, @@Defree, DGefree, Tb#efree, efree4 G decc$fclose4 b#X decc$fclose4 @ decc$fclose4EG decc$remove4Fb#X decc$remove4E@ decc$remove, Gefree, b#Xefree, @efree, G(efree, b#Xefree, $(efree4HGx decc$fseek4pb#8 decc$fseek4t@x decc$fseek4G decc$ftell4b#8 decc$ftell4@ decc$ftell4'G decc$putc4(b# decc$putc4'@ decc$putc4G$ progerrno4 b# progerrno4 @$ progerrno4#G compress1 4$b# compress14#@ compress14#G compress14$b# compress14#@ compress14%G decc$fwrite4&b# decc$fwrite4%@ decc$fwrite4G progerrno4b# progerrno4@ progerrno4LGh decc$fseek4`{# decc$fseek4d@h decc$fseek4G uncompress14b# uncompress14@ uncompress14G uncompress14b# uncompress14@ uncompress1,G,emalloc,$b#emalloc,(@,emalloc4<G\ decc$fread4 @b# decc$fread4X@\ decc$fread4G decc$ftell4{#p decc$ftell4@ decc$ftell4=8Gt Mem_ZoneFree4>hb# Mem_ZoneFree4=p@t Mem_ZoneFree4G progerrno4b# progerrno4@ progerrno4G progerrno4b# progerrno4@ progerrno4?G swish_qsort4@b# swish_qsort4?@ swish_qsort4dG uncompress14xb# uncompress14@ uncompress1, Gefree, b#efree, @efree45G, ramdisk_seek46$b# ramdisk_seek45(@, ramdisk_seek47,GD ramdisk_tell488b# ramdisk_tell47@@D ramdisk_tell4DGh decc$fseek4`b# decc$fseek4d@h decc$fseek45hG ramdisk_seek46b# ramdisk_seek45@ ramdisk_seek4CG ramdisk_read4Db# ramdisk_read4C@ ramdisk_read4%G decc$fwrite4&b# decc$fwrite4%@ decc$fwrite4G progerrno4b# progerrno4@ progerrno4A G$ ramdisk_close4Bb# ramdisk_close4A @$ ramdisk_close4$G< decc$ftell40b# decc$ftell48@< decc$ftell4<Gd decc$fseek4Xb# decc$fseek4`@d decc$fseek49dG decc$fputc4:xb# decc$fputc 49@ decc$fputc4G progerrno4b# progerrno4@ progerrno4;G$ramdisk_create4<{#ramdisk_create4; @$ramdisk_create4 G decc$strlen4b# decc$strlen4 @ decc$strlen4#G compress14$b# compress14#@ compress145G  ramdisk_seek46b#P ramdisk_seek45@  ramdisk_seek47 G$ ramdisk_tell48b#P ramdisk_tell47 @$ ramdisk_tell4$GD decc$fseek4<b#P decc$fseek4@@D decc$fseek4/DGX bignumhash40Pb#P bignumhash4/T@X bignumhash4G progerrno4b#P progerrno4@ progerrno4G decc$ftell4 b#P decc$ftell4@ decc$ftell4# GL compress14$$b#P compress14#H@L compress14#LGh compress14$\b#P compress14#d@h compress14%hG decc$fwrite4&b#>P decc$fwrite4%@ decc$fwrite4G progerrno4b#P progerrno4@ progerrno49G decc$fputc4:b#P decc$fputc49@ decc$fputc4G progerrno4b#P progerrno4@ progerrno41 G(Mem_ZoneCreate42b#Mem_ZoneCreate41$@(Mem_ZoneCreate4LGl decc$fseek4db# decc$fseek4h@l decc$fseek,pGemalloc,xb#emalloc,@emalloc4-G verybighash4.b# verybighash4-@ verybighash43G Mem_ZoneAlloc44b# Mem_ZoneAlloc43@ Mem_ZoneAlloc4/G  bignumhash40b# bignumhash4/@  bignumhash4/$GX bignumhash40,b# bignumhash4/T@X bignumhash4G progerrno4b# progerrno4@ progerrno4-x G verybighash4. b# verybighash4- @ verybighash4 G! decc$fseek4!b# decc$fseek4!@! decc$fseek 4!G,! uncompress14$!b# uncompress14(!@,! uncompress1,,!GD!emalloc,46G6 progerrno46b#P progerrno46@6 progerrnot t=0"Failed to rename '%s' to '%s' : (=(Failed to close file '%s': H=xoCouldn't open the property file "%s": Failed to seek to property index located at %ld for file number %d : =Failed to read properties located at %ld for file number %d : Failed to seek to properties located at %ld for file number %d : @=H;Failed to call DB_ReadProperty_Native with seek positions=}Error writing %d of %d bytes: Failed to write file number %d metaID %d to property file. Tried to write %d, wrote %Zu : =pdO/S failed to tell me where I am - file number %d metaID %d : Property database file not opened h=(putc() failed writing null: =H:Error writing to device while trying to write %d bytes: =PDRead %d bytes, expected %d in DB_ReadFirstWordInvertedIndex_Native=H9Internal db_native.c error in DB_WriteWordHash_Native: P=0'fputc() returned error writing null: x=H9Internal db_native.c error in DB_WriteWordData_Native: = RAM Disk: write words=(fputc() failed writing null: =0'Error while flushing ramdisk to disk:=PDInternal DB_native error - DB->num_words != DB->worddata_counter: `=PDInternal DB_native error - DB->num_words != DB->wordhash_counter: =H9Index file '%s' and property file '%s' are not related.=0"File "%s" has an unknown format.=0&Could not open the index file '%s': 8=XJCouldn't write the file "%s": Couldn't create the property file "%s": =0'Couldn't create the index file "%s": =( Index file '%s' is a directory ;;;p;;`;;P;0; ;;;;=nativeestrdup ;P;;;;;=0 ;=0$ ;p;;;;;0 ;emalloc;8;X;;P;;;;;;8;;;=00; decc$fopen=rb=0  ;=@4 ; progerrno efree decc$fclose  decc$strlen decc$chmod decc$rename=0 6;=@( =0#.;=0$  UNPACKLONG=0 `2;=P,| 8OTS$ZERO decc$fseek7 decc$fread=0"3;=P<| 7 decc$fgetc uncompress1progerr decc$ftell decc$fread=0 -;=0  !PACKLONG=0 P1;=`8 7 decc$fwrite=0 P/;=`P| 7 decc$putc# compress1% decc$fwrite=0".;= ( =0-;=0-;=0 "+;=`0| =0+;=0"+;=0( ' decc$putc=0"P);=P,< 7 decc$fputc=0"(;= $ =0(;=0(;=0(;=0(;=0"';=@( =00"p%;=p<| `) decc$strncmp=0 "p";=D =0 "` ;=p@ + decc$strcmp- verybighash=0P ;=0@ ;=0" ;=PD| / bignumhash=WriteWordHash01Mem_ZoneCreate3 Mem_ZoneAlloc=0";=P@ 5 ramdisk_seek7 ramdisk_tell9 decc$fputc=0"p;=@$< =0";=0( ;ramdisk_create=0;=0" ;=P@ ;0= Mem_ZoneFree? swish_qsortA ramdisk_closeC ramdisk_read=0";= ( =0;=0";=@( =0"0;= , =0"P;=@( =0";=0! 0 putc() failed: 8` `=0"0;=0, =0 ;=0$ E decc$remove=0 ;=P8 =0P;=rb+=0"@;=00 7 ramdisk_seek7 ramdisk_write7 ramdisk_tell7 ramdisk_read7 ramdisk_getc7 ramdisk_putc7 ramdisk_close=08"P ;=p4| G set_progerrno;p I set_progerr; K decc$strcat=_prop M decc$strcpy=0 p;= 0$ wb =0H";= ,< _temp  Odecc$__utc_stat Qdecc$__utc_time=0 ;=0( @ @6=B B=2*) DB_NATIVECompaq C V6.5-001 =  44=!initModule_DBNative4=YQ 92 92 92 =2 A2 ?2 L2 J2 G2 J2  P2  S2  P2 S2 c2 `2 _2 ^2 a2 _2 l2 i2 h2K i2 u2 t2 s2 o2  q2 s2( =  =  40 4=!freeModule_DBNative4=2*) 2 2 2 2( = ( (=$DB_CheckHeader =  = @44=newNativeDBHandle@4= 2 2 2 2 2 2 2 2 2  2  3( =  = !044="openIndexFILEForRead04= 3  =  = )P44=*"openIndexFILEForReadAndWriteP4= 3  =  / /=+#"openIndexFILEForWrite =  = p4 4=CreateEmptyFilep4=PHG 3 3 3 3 3 "3 &3 &3Z Z=  t4=  he4= #3 ='vt4= 4= 4=  4= < = & &=" is_directory = 4 4= 4 4=DB_Create_Native4= 73 -3  -3 ( -3 /3 /3 /3 I3 H3 I3 J3 J3 M3 P3 3E Z3 Z3 ]3 c3 h3 3P 3Q l3\ o3 o3W 3 3 3 3@ 3 3 3 3H 3 3 3 3 3 3H 3 3 36 3 3 3 3 3 3 Z Z=  04=  he4= m3] ]=v04= H4= Z Z=  D4=  "e4= [3 = Z Z=  4=  Re4= C3 =7v4=  4= 84= \4= d4= t4= | = P" "= P 40 4=DB_Open_NativeP 4= 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 2y 2z 2 2 2  2  2 2 2. 2 2 2 2 2 2 2( 4) 4 4 4 4 4"' 4# 4 4 40: :=   4= 4] ]=v 4= $ 4= @: :=   4= 4] ]=v 4=  4= @Z Z=   4=   e4= |4: :=   4= 2] ]=v 4=   4= (8: :=   4= 2} }=v 4=  4=  4= <: :=   4=   2] ]=v 4=  4= 08 ='v 4=  4=  4=  4= d = @ = ! 44="DB_Close_File_Native 4= 4 4 4 4 4 4 4 4   4 4 4 4  $ = p = 44=DB_Close_Native4= 4 4 4E 4= 5 5 5 $5 $5 %5 .5 05 05  05 =  = 4X4=DB_Remove_Native4=H@? 35 35 35 3 5 =5 =5 =5  =  = &0484='DB_InitWriteHeader_Native04=@87 K5 G5  G5  G5 Z5 =  = %44=&DB_EndWriteHeader_Native4=@87 ^5 ^5 ^5 d5 d5 g5 =  = &P4 4='DB_WriteHeaderData_NativeP4=H@? j5 j5 j5 r5 r5 v5$ =  = %044=&DB_InitReadHeader_Native04=1)( z5 z5 z5 5 = ` = %44=&DB_ReadHeaderData_Native4=nfe 5  5 5 5 5 5 5 5 5  =  = $44=%DB_EndReadHeader_Native4= 5  =  = %4p4=&DB_InitWriteWords_Native4=:21 5 5 5 5 5 = `~ ~= 44=cmp_wordhashdata4= 5 =   = $ 44=%DB_EndWriteWords_Native 4=KC 5" 5" 5" 5 5 5 5 5  5  5 5  5  5 5 5 5 5  6  6 6 6 6 6 6; 6 !6 %6 %6 *6,  =  =  44=!DB_GetWordID_Native4=WON 66 .6  66 .6  .6  66 ;6 >6 =  =  p44=!DB_WriteWord_Nativep4=QIH C6 V6 R6 Y6> ^64 =  A A= $4P4=%DB_WriteWordData_Native4= l6 c6  l6 c6 c6  c6 u6 }6 }6 }6 }6 6 6D 6 6 6 6 6 6 6, = } }= $ 44=%DB_WriteWordHash_Native 4=  6 6  6 6  6  6  6 6 6H 6 6 6 6 7 7 7 7 7 7 7$ 7 7 #7  =   = $@ 44=%DB_InitReadWords_Native@ 4= )7  =  = #P 44=$DB_EndReadWords_NativeP 4= .7  = ; ;= #` 44=$DB_ReadWordHash_Native` 4= 27 27 27 27 C7 I7 N7 P7 O7X Q7Y S7X 9; U7V U7 U7 U7 a7: :=  !4= T7] ]=v!4= 4!4= <: :=  t!4= S7} }=vt!4= !4= !4= @ =  = 1p"4p4=2*$DB_ReadFirstWordInvertedIndex_Nativep"4=  d7  d7  d7  k7 d7  q7 7 7 7! 7" 7| 7" 7  7 7 7 7 7 7  7 7(: :=  #4= 7] ]=v#4= 00$4= 8: :=  #4= 7} }=v#4= #4=  #4=  D =  = 0p%484=1)#DB_ReadNextWordInvertedIndex_Nativep%4= 7 7  7 7 7  7 7  7 7 7 7 7 7z 7  7 7 7 7 7 7 7 7 7 7 7: :=  '4= 7] ]=v'4= 48'4= <: :=  &4= 7] ]=v&4= &4= 8 = @ = #'44=$DB_ReadWordData_Native'4=d\[ 7 7 7 7 7 7 7 7 7( =  = #(44=$DB_WriteFileNum_Native(4= ]8  =  = "(44=#DB_ReadFileNum_Native(4= o8  =  = #(44=$DB_CheckFileNum_Native(4= z8  =  = $(44=%DB_RemoveFileNum_Native(4= 8  =  = +(44=,$DB_InitWriteSortedIndex_Native(4=2*) 9 9 9 9 = `  = 'P)44=( DB_WriteSortedIndex_NativeP)4= "9 "9 "9 "9 79 79 ;9 >9 ;9 >9 D9, =  = *+4`4=+#DB_EndWriteSortedIndex_Native+4=OGF K9 H9 K9 H9 K9 P9 P9 S9 =  = *+4P4=+#DB_InitReadSortedIndex_Native+4= Y9  = * *= &+404='DB_ReadSortedIndex_Native+4= \9 \9 `9 \9E g9D g9  u92 y92 y9 l9 }9 n9 n9, o9 q9 q9 s9$: :=  ,4= y9] ]=v,4= 0,4= 8: :=   ,4= f9] ]=v ,4= 4X,4= < =  = %-4 4=&DB_ReadSortedData_Native-4= 9 9 =  = )-44=*"DB_EndReadSortedIndex_Native-4= 9  =  = -4P4= printlong-4=A98 9 9 9 9 9 9$ =  = .4p4=readlong.4=  9 9 = p = *.44=+#DB_InitWriteProperties_Native.4=:21 9 9 9 9 9 = `: := $P/44=%DB_WriteProperty_NativeP/4= 9 9 9 : 9 9  9 9 9 : : := ": /: -: 9: 9: , =  = )P144=*"DB_WritePropPositions_NativeP14=kcb Y: Y: Y: \: Y: m: k: n:  }:  }:@ =  = (`244=)!DB_ReadPropPositions_Native`24= : :  : : :  : : : :  9 9 :,Z Z=  D34=  he4= :] ]=vD34= d34= @ = `K K= #344=$DB_ReadProperty_Native34= ; : : :  :  : : :  ; ; ; !; #;M #; ,; 2;  ?; B; B;8 = P = /64P4=0("DB_Reopen_PropertiesForRead_Native 64=]UT R; R; R; U; V; 3L \; \; \; Z Z=  p64=  e4= ]; =  =  he4. he4{ he4 he4 h!e4he4he4nhe4he4%he4\he4 he4Ahe4 =   decc$__utc_time decc$fread decc$fwrite" decc$fclose decc$fseek decc$ftell decc$remove decc$rename decc$fgetc decc$fputc decc$putc decc$fopen decc$strcat decc$strcpy decc$strcmp decc$strncmp decc$strlendecc$__utc_stat decc$chmodemallocefreeMem_ZoneCreate Mem_ZoneAlloc Mem_ZoneFreeprogerr# progerrno set_progerr set_progerrnoestrdup compress1 uncompress1PACKLONG UNPACKLONG bignumhash verybighash swish_qsortramdisk_create ramdisk_close ramdisk_tell ramdisk_write ramdisk_seek ramdisk_read ramdisk_getc ramdisk_putcOTS$ZERO )c$__ww1$)\َ]V1.0@@dumpV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$u$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J` DB_decompress0Jdump_metanames8Jpdump_file_properties8%Jdump_single_property8Jdump_index_file_list8Jcheck_sorted_index =P# 1@BTG(^~@F0^8~@H@P޴X`h>p^x~޵^G#G1GGG @G@ 1@F[G $"b0@$!B  aF@Zk @///8B4G G G@b@ZkBGTGb"@ZkG="b#S@B4G("b&@ZkB4Gb"/@ZkBGGTGb@Zk="Gb#<@B4Gb"@ZkB4G("b@Zk I4GBb"@ZkL@// hBG="pbGG @G@ZkB9GGGTGb@Zk GGGb#T@XBGGm`b]""G"/@Zk= G]P?'H""B}9#b_@h"_[[/jKYTBY@ZkhBG4Gpb/@ZkBG4Gb@Zk 0`A A jAB("4Gb0@.1@0@@ZkB A4G"b'/@ZkfBTG$b BH"@Zk8B 4G@b@ZkG(]0]8}@HPݤX`h=p]x}ݥ]#k//BGTGb "@ZkB"4Gb/@Zk///#tG^[~^~޴>^ ~(08޵@HGGGG^ 14Gb~@Zk4GHBb/G//@ZkB $"GtGDb@ZkBGGb4G0DD#/@ZkGpb#G4G D////@(BGTGbGGD> $/@Zk///=D@B="HbGh}"?D0DGC=2_J]]"@Zkh/B=TG"b@Zk B4G(b@Zk0BG="]"G8bh}"/@Zkh//0@&  ?BG$TGb@ZkŠF TGBbD"G $/@Zk ĠG!@4  &@ @2F& //p@"Тs֢PZ @3G @tG @UF @ @6F @wF @8G @F)_ @ /00@" @1 @F/PB4GXb0@PB@Zk(0@C BS@GFs"gF //0!@c""$R" BFc 0@ '@////0 @R" '@_B 4GG$TGb4G@Zk=//==="h}"@BHbG?D?E0DGC=2_J]]"@Zkh/\///=BTG Gb.JEP`"@ZkBh=]"x}"GGp"b@ZkpBp]"x="tGxb/@ZkB*"4Gb/@ZkB4G"b@ZkB G4G"b@Zk///ݠ GNFAB"="]"Gb}"/@Zk=4GPBXb AP?@@Zk=@BG"]HbGG?D@ZkBG"bTGDI /@Zk(BP""TGb"/@Zk*G@= "! G="/R"1"/_ B"@"DTGHL (b/@ZkB G"GTGb/@Zk BG4G(b@Zk/B4Gb"@ZkB=TG0"b/@Zk+B4G"b@Zk/%!I 0@/BGTGp"b@ZkB"GTGb/@ZkB=x"TGb@Zk=G< G/BtGbD // JF"@Zk&/ BtG"bHD/@Zk//BtG`"bPD/)!H?D@Zk // BtG"bHD/@Zk0@)! @ BG4G(b@ZkŠB4G"bPD//@Zk=xݠ//A),AE iE"?B"4Gb@ZkB, G4G"b G@Zk/Š GݡH//.BGh"bTG /@Zk 0 A! 'A_eB4Gb"aI`@Zk B4G(b@Zk B4G(b/@Zk0BG="]"Gh}"8b@Zkhݠ/0A!(!?BG$TGb@Zk B4G(b@ZkGG]}b#De_B$GTGb@ZkG]]}ݤ=] }(08ݥ@HP#/k///#TG(^0[~0^8GG>-CC ^18b@Zk =]"}" BG(b1/@ZkB4Gb/@ZkG(]0]8@#/k///#TG^~^ ~(08޴@P[HPG =D<G`GG 1XbGG^"@Zk =C/// PBGXbB`"(Hh/@Zk`TGPBXbp"/ (@ZkPB4GP"XbD@ZkPB4G`"XbPD+@ZkPB@B" ""TGXbDDF`. X"/@ZkPB(("TGXb@ZkPBD4G" Xb@Zk PBD4G"Xb@ZkPB4GXb"@Zk GGb#GY_PB4Gp"Xb@Zk(B"TGb ( @Zk/B(TG"b@Zk`PBtG @Xb@"@ZkPBp"4GXb0@@@Zk  @/PG]Xb }(p"]08ݤ@HP4G`#k///Q#4G~^^~ (0޴8GGG @0"/@Zk //GG>/ ///EB BGGRTG(b/@@Zk#G`b#%@@C0@@2 @?G]]} (0ݤ8@#/k///QG#~^^~AFBF@F D(0GGGGԔ(DtJFp/G0 BG$D(b"@Zk B`4G(b0@Zk3`BGGTGhbG@Zk BG4GP"(bG@Zk//@BG4GHb @Zk `@ B0`@"%,TG(bA%H'H@Zk  B4G(b"/@Zk B4Gp"(b@0ZkBG4Gb@ZkG]]} (0@#/k4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$fflush4b# decc$fflush4@ decc$fflush4G decc$txprintf4b# decc$txprintf4@1 decc$txprintf4$G8 decc$txprintf40b# decc$txprintf44@8 decc$txprintf4<GT decc$txprintf4Db# decc$txprintf4P@T decc$txprintfD TGlReadAllDocPropertiesFromDiskD db#ReadAllDocPropertiesFromDiskD h@l2ReadAllDocPropertiesFromDisk4G freefileinfo4b# freefileinfo4@ freefileinfo4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintfD3GReadSingleDocPropertiesFromDiskDb#ReadSingleDocPropertiesFromDiskD@ReadSingleDocPropertiesFromDisk4 GgetPropNameByID4 b#getPropNameByID4 @getPropNameByID44GdDB_ReadProperty4Db#DB_ReadProperty4`@dDB_ReadPr4operty4G decc$txprintf4b# decc$txprintf4@ decc$txprintf,Gefree,b#efree,@efree4 G freeProperty4b# freeProperty4 @ freeProperty4G decc$txprintf45b# decc$txprintf4@ decc$txprintf4G4 freefileinfo4(b# freefileinfo 40@4 freefileinfo4<GX decc$txprintf4Hb# decc$txprintf4T@X decc$txprintf4XGl decc$fflush4db#6 decc$fflush4h@l decc$fflush4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$exit4b# decc$exit4@ decc$exit,# GxDB_Open,$lb#`DB_Open,#t@xD7B_Open<7GSwishAbortLastError<8b#`SwishAbortLastError<7@SwishAbortLastError49G read_header4:b#` read_header49@ read_header<;Gprint_index_headers<<b#`print_index_headers<;@print_i8ndex_headers<+(GTDB_InitReadWords<,4b#`DB_InitReadWords<+P@TDB_InitReadWordsD1hGDB_ReadFirstWordInvertedIndexD2pb#`DB_ReadFirstWordInvertedIndexD1@DB_ReadFirstWordInvertedIndex4G decc$txprintf4b#` decc$txprintf94@ decc$txprintf,Gefree,b#`efree,@efreeD/GDB_ReadNextWordInvertedIndexD0b#`DB_ReadNextWordInvertedIndexD/@DB_ReadNextWordInvertedIndex4)$G<DB_EndReadWords4*4b#`DB_EndReadWords4)8:@<DB_EndReadWords4PGt decc$txprintf4Tb#` decc$txprintf4p@t decc$txprintf,3TGlemalloc,4\b#`emalloc,3h@lemalloc<+G4DB_InitReadWords<,(b#`DB_InitReadWords<+0@4DB_InitReadWords;D1PGDB_ReadFirstWordInvertedIndexD2Tb#`DB_ReadFirstWordInvertedIndexD1@DB_ReadFirstWordInvertedIndex4G decc$txprintf4b#` decc$txprintf4@ decc$txprintf4%GDB_ReadWordData4&b#`DB_ReadWordData4%@DB_Read<WordData<5G uncompress_worddata<6 b#`uncompress_worddata<5 @ uncompress_worddata4- G4 uncompress24.$ b#` uncompress24-0 @4 uncompress24-4 GL uncompress24.@ b#` uncompress24-H @L uncompress24-=L Gd uncompress24.\ b#` uncompress24-` @d uncompress2D' G uncompress_location_values D( b#`uncompress_location_valuesD' @ uncompress_location_values,3 G emalloc,4 b#`emalloc,3 @ emallocD! >G uncompress_location_positionsD" b#`uncompress_location_positionsD! @ uncompress_location_positions4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf<? G4 getPropNameByName<@$ b#`getPropNameByName<?0 @4 get?PropNameByName<t G getResultPropAsString<  b#`getResultPropAsString< @ getResultPropAsString4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf, G efree, b#`efree, @ efree4 @G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf4 G( decc$txprintf4 b#` decc$txprintf4$ @( decc$txprintf4P Gh decc$txprintf4A` b#` decc$txprintf4d @h decc$txprintf4h G decc$txprintf4x b#` decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b#` decc$Btxprintf4 @ decc$txprintf4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf4$ GT decc$txprintf40 b#` decc$txprintf4P @T decc$txprintf4d G decc$txprintf4p b#` decc$txprintf4 @C decc$txprintf, G efree, b#`efree, @ efree4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf4- G uncompress24. b#` uncompress24- @ uncompress24- G( uDncompress24. b#` uncompress24-$ @( uncompress24T Gt decc$txprintf4` b#` decc$txprintf4p @t decc$txprintf4 G decc$txprintf4 b#` decc$txprintf4 @ decc$txprintf, G efree, b#`Eefree, @ efree, G efree, b#`efree, @ efreeD/ G DB_ReadNextWordInvertedIndex D0 b#`DB_ReadNextWordInvertedIndexD/ @ DB_ReadNextWordInvertedIndex4)G4DB_EndReadWords4*,b#`DB_EndReadWords4F)0@4DB_EndReadWords,4GHefree,@b#`efree,D@Hefree4=lGDB_Close4>|b#`DB_Close4=@DB_Close<G$DB_InitReadSortedIndex<b#DB_InitReadSortedIndex< @$DB_InitReadSoGrtedIndex<4GTDB_ReadSortedIndex<@b#DB_ReadSortedIndex<P@TDB_ReadSortedIndex,XGtefree,db#efree,p@tefree4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4$GHT decc$txprintf4,b# decc$txprintf4P@T decc$txprintf4`G| decc$txprintf4db# decc$txprintf4x@| decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4Ib# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G  decc$txprintf4b# decc$txprintf4@  decc$txprintf4G, decc$txprintf4$b# decc$txprintfJ4(@, decc$txprintf40GL decc$txprintf4Db# decc$txprintf4H@L decc$txprintf4PGd decc$txprintf4Xb# decc$txprintf4`@d decc$txprintf4|G decc$txprintf4b# decc$txprintf4@ dKecc$txprintf4GgetMetaNameByID4b#getMetaNameByID4@getMetaNameByID4 GgetPropNameByID4 b#getPropNameByID4 @getPropNameByID4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4GL decc$txprintf4b# decc$txprintf4@ decc$txprintf4$Gd decc$txprintf40b# decc$txprintf4`d decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4 GgetPropNameByID4 Mb#getPropNameByID4 @getPropNameByID4G decc$txprintf4b# decc$txprintf4@ decc$txprintf 4G decc$txprintf4b# decc$txprintf4@ decc$txprintf< G<DecodeDocProperty<0b#>NDecodeDocProperty<8@<DecodeDocProperty4<GX decc$txprintf4Lb# decc$txprintf4T@X decc$txprintf4`Gx decc$strlen4lb# decc$strlen4t@x decc$strlen4|G decc$txprintf4b# decc$txprintf4O@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf,Gefree,b#efree,@efree P=  propEntry=NULL =  %20s:%2d (%3d) %c:0=  (No Properties) H=( Number of File Entries: %d h=( %20s: %d -> %d (%4.2f%%) =0#ReadSingleDocPropertiesFromDisk: =PFReadAllDocProperties: Dumping File Properties for File Number: %d =0$ -----> FILES in index %s <----- Q =(Hey, there are only %d files @=  [Alias for %s (%d)]X= STRING(case:%s) p=( META_INDEX Rank Bias=%3d=(%20s : id=%2d type=%2d =0# -----> METANAMES for %s <----- =( Failed to lookup meta entry=/' -----> WORD INFO in index %s <----- =R0 ;=@<<  decc$txprintf;@ decc$strlen= "` DecodeDocProperty=" efree=%c= ...=0 p;=@0| getPropNameByID( ReadAllDocPropertiesFromDisk freeProperty decSc$exit freefileinfo=B=0( ;=\ 7decc$ga_stdout= P decc$fflush=**Compressed** DB_ReadProperty0ReadSingleDocPropertiesFromDisk=0(";=@  DB_ReadSortedIndex DB_InitReadSortedIndex=0 ;=8)`8 igTnoreSortKeyLen: %d = compare =( META_INTERNAL META_PROP:@= *presorted*P getMetaNameByID= unknown!p=DATEx=NUMBER getResultPropAsString= Freq:%d(!uncompress_location_positions=swishdocpath= %d/%x %dU= [%d= %d (=%s #DB_Open %DB_ReadWordData('uncompress_location_values=%d/%x0 )DB_EndReadWords +DB_InitReadWords- uncompress2=0 ;=PT 7 DEBUG_MASK(/DB_ReadNextWordInvertedIndex(1DB_ReadFiVrstWordInvertedIndex3emalloc= %s 5uncompress_worddata 7SwishAbortLastError9 read_header ;print_index_headers= ,%d/%x %d =DB_Close=)]@ ?getPropNameByName= Meta:%d`= Pos/Struct:p=  %s@ @6=W= ==-%$DUMPCompaq C V6.5-001 = !44="dump_index_file_list4=  0 0 0 0 0 0  0  0 0 0 0 0 1 1 1 1 1 0> 0A 0C "1T 0$ = k k= X4`4= DB_decompress4= *1 *1 *1 *1 ?1 ?1  K1 H1 P1 N1 X1 [1 a1 b1 a1( e1 _1 s1 v1 s1 z1 z1P z1 z1 z1 z1 1 1 1$ 1 1 1 1 1 1  1 1 1 Y1 10 1- 1 1 1 1 1 1 1 1 1 1 1 1$ 1 1 1 1 1 1g 1 1 1 1 2$ 1 1 2\ =  = 44= check_sorted_index4=KCB 2Z 2 2 2 2 *2( = y y= 44=dump_metanames4= 22 22 22 22 22# 82 :2 >2 C2 G2 K2 K2 Q2 Q2 T2 T2 \2 `2 821 824 m2 m2 m2 m2 =  = ![p44="dump_file_propertiesp4=nfe {2 u2 u2 2 2 2 2 2 2 2 8 =  = !44="dump_single_property4= 2 2  2 2 2  2  2 2 2 2 2 2 2(\ =  =  decc$ga_stdout decc$fflush decc$txprintf decc$exit decc$strlen DEBUG_MASKemallocefree freeProperty freefileinfo getResultPropAsString DecodeDocProperty(ReadSingleDocPropertiesFromDisk(ReadAllDocPropertiesFromDisk read_headerDB_OpenDB_Close DB_InitReadWord]s(DB_ReadFirstWordInvertedIndex(DB_ReadNextWordInvertedIndexDB_ReadWordDataDB_EndReadWords DB_InitReadSortedIndex DB_ReadSortedIndexDB_ReadProperty uncompress2(uncompress_location_values(uncompress_location_positions uncompress_worddatagetMetaNameByID getPropNameByNamegetPropNameByID print_index_headers SwishAbortLastError^  c$gaww1s)]َ]V1.0DDentitiesV1.0 4-AUG-2004 09:33Compaq C V6.5-001   $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8JinitModule_Entities8JPpfreeModule_Entities8_J@configModule_Entities8Jsw_ConvHTMLEntities2ISO8JPstrConvHTMLEntities2ISO8J@@charEntityDecode =#4G^0[~^ ~(08@HGGG8b@Zk "=4GG( `0B1///B " J9@B /0B"B G( ///0BG#1``@8b8/8K4GGGC/@Zk G]] }(08@H`#k///#4G^ [~^ ~(08GGCG (b@Zkb /// // B4G(b@ZkG//0@c @?G]] }(08@#k/C #4GRTG> ;^0[~ ^1"(GG ~8b@Zk@B 4G4GtGHb@Zk ]G] ](0#/k/// #a^~{#G>C # //G] #k//#^~^ ~(0GGGG,HH /DqH @D."RDJ QFD>//="b#@ GsH?D/D.RDJ SFD>.J/XK?G]G] }(0@#k//p# (^~0^8~@HP޴X`h>p^x~P.PJDFGGGG @/ #,#H/// GtG"c/0BpK8bxF#.c b#J+B/BQFG c ="G@ZkG}0BGTG ="tG8b@ZkGt///GGG=! B///.i.!(JSiJt JtFi>.JXxAG1/@BG4GHb@Zk**( PpAF"/pBG4Gxb@Zk*( PpAF/`BG4Ghb@Zk h-)!hI 0@@//GC"Q.GRQJQ>c.tJoFVuB/7PB="Xb@ZkG c/w7867 ݠ#/#Kc }f.fJugB@ ݰ }dGG(]0]8}@HPݤX`h=p]x}#/k, GHemalloc,@b#emalloc,D@Hemalloc,G$emalloc,b#emalloc, @$emalloc,|Gefree,b#Pdefree,@efree,Gefree,b#Pefree,@efree4 dGdecc$strcasecmp4b#decc$strcasecmp4 @decc$strcasecmp4GgetYesNoOrAbort4b#getYesNoOrAbort4@getYesNoOrAbort4eG decc$strtoul4b#@ decc$strtoul4@ decc$strtoul4 G< decc$strtoul44b#@ decc$strtoul48@< decc$strtoul4G decc$isprint4b#@ decc$isprint4@ decc$isprint4 G decc$fispunct4  b#@ decc$ispunct4 @ decc$ispunct4 @GT decc$isspace4 Lb#@ decc$isspace4 P@T decc$isspace4G decc$strcmp4b#@ decc$strcmp4@ decc$strcmp =quot=ampg=apos=lt =gt(=nbsp0=iexcl8=cent@=poundH=currenP=yenX=brvbar`=secth=umlp=copyx=ordfh=laquo=not=shy=reg=macr=deg=plusmn=sup2=sup3=acute=micro=para=middot=cedili=sup1=ordm=raquo=frac14=frac12=frac34 =iquest(=Agrave0=Aacute8=Acirc@=AtildeH=AumlP=AringX=AEligj`=Ccedilh=Egravep=Eacutex=Ecirc=Euml=Igrave=Iacute=Icirc=Iuml=ETH=Ntilde=Ograve=Oacute=Ocirck=Otilde=Ouml=times=Oslash=Ugrave=Uacute=Ucirc=Uuml=Yacute=THORN =szlig(=agrave0=aacute8=acirc@l=atildeH=aumlP=aringX=aelig`=ccedilh=egravep=eacutex=ecirc=euml=igrave=iacute=icirc=iuml=eth>m=ntilde=ograve=oacute=ocirc=otilde=ouml=divide=oslash=ugrave=uacute=ucirc=uuml=yacute=thorn n=yuml(=OElig0=oelig8=Scaron@=scaronH=YumlP=fnofX=circ`=tildeh=Alphap=Betax=Gamma=Delta = EpsilonZetao=Eta=Theta=Iota=Kappa=Lambda=Mu=Nu=Xi= OmicronPi=Rho=Sigma=Tau= UpsilonPhi=pChi=Psi =Omega(=alpha0=beta8=gamma@=deltaH= epsilonzetaX=eta`=thetah=iotap=kappax=lambda=muq=nu=xi= omicronpi=rho=sigmaf=sigma=tau= upsilonphi=chi=psi=omega=upsih=piv=enspr=emsp=thinsp=zwnj =zwj(=lrm0=rlm8=ndash@=mdashH=lsquoP=rsquoX=sbquo`=ldquoh=rdquop=bdquosx=dagger=Dagger=bull=hellip=permil=prime=Prime=lsaquo=rsaquo=oline=frasl=euro=image=weierpt=real=trade= alefsymlarr=uarr=rarr=darr =harr(=crarr0=lArr8=uArr@=rArrH=dArrP=hArrX=forallu`=parth=existp=emptyx=nabla=isin=notin=ni=prod=sum=minus=lowast=radic=prop=infinv=ang=and=or=cap=cup=int=there4=sim=cong=asymp =ne(=equiv0=le8=ge w@=subH=supP=nsubX=sube`=supeh=oplusp=otimesx=perp=sdot=lceil=rceil=lfloor=rfloor=langx=rang=loz=spades=clubs=hearts=diams= thetasym5 5=ConvertHTMLEntities =0 ;=`4 ;;emalloc=0("@;=yL 7decc$$gl___ctypea7decc$$ga___ctypet decc$strtoul decc$isprint decc$strcmp decc$isspace decc$ispunct=0"P;=@  =0";=  =0"@;=0< ;0 decc$strcasecmp getYesNoOrAbort=0 p;=z@,< efree =4="64=&64='64=<6 4=>6(4=604=6{84=6@4=6H4=6P4=6X4=6`4=6h4=6p4=6x4|=64=64=64=64=64=64=64=64=}64=64=64=64=64=64=64=64=6~4=64=64=64=6 4=6(4=604=684=6@4=6H4=6P4=6X4=6`4=6h4=6p4=6x4=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=6 4=6 4=6(4=604=684=6@4=6H4=6P4=6X4=6`4=6h4=6p4=6x4=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=6 4=6(4=R604=S684=`6@4=a6H4=x6P4=6X4=6`4=6h4=6p4=6x4=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=64=6 4=6(4=604=6 84=6@4=6H4=6P4=6X4=6`4=6h4=6p4=6x4=64=64=64=64=64=64=6>4=64=64=64=64=64=64=64=64=64=64=64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64=! 64=" 64=& 64=0 64=2 64=3 64=9 64=: 64=> 64=D 64= 64=!64=!64=!64="!64=5!64=!64=!64=!64=!6 4=!6(4=!604=!684=!6@4=!6H4=!6 P4=!6X4="6`4="6h4="6p4="6x4="64="64= "64= "64="64="64="64="64="64="64="64= "64='"64=("64=)"64=*"64=+"64=4"64=<"64=E"64=H"6 4=`"6(4=a"604=d"684=e"6@4="6H4="6P4="6X4="6`4="6h4="6p4="6x4="64="64=#64= #64= #64= #64=)#64=*#64=%64=`&64=c&64=e&64=f&6 @ @6=A A=1)(ENTITIESCompaq C V6.5-001 =  44=!initModule_Entities4= -2 -2 -2  42 =2 42 F2 F2 F2 F2 T2 V2 T2 W2$ W2 [2 T2 8 = p =  p4P4=!freeModule_Entitiesp4=[SR j2 j2 j2  o2  p2  ~2 {2 {2 ( =  = "@44=#configModule_Entities@4=phg 2 2 2 2 2  2  2  2 2 2( =  = $44=%sw_ConvHTMLEntities2ISO4=3+* 2 2 2 2 2 = ` = $P44=%strConvHTMLEntities2ISOP4=bZY 2 2  2 2 2 2 2 2  = w w= @4@4=charEntityDecode@4=  3 3  3  3  3 3 3 3 3 M ;3M ;3M <3~L <3L A3 A3 93 E3 E3  W3  y3@: :=  `4= =3 =/v`4= |4= 4= 4= 4=  = T =is_EOE = L LSe4 =   decc$strtoul decc$strcmpdecc$strcasecmp decc$isprint decc$ispunct decc$isspace decc$$ga___ctypet decc$$gl___ctypeaemallocefreegetYesNoOrAbort  c$stww1u]َ]V1.0GG swish_wordsV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$ix$CODE$< $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8Jparse_swish_query8JxinitModule_Swish_Words8JXfreeModule_Swish_Words8JstripIgnoreFirstChars8J stripIgnoreLastChars =k///#4G^([~^ ~(GGG0b@Zk=(B"G4G0b "/@ZkG]] }(0#k///C#4G^ h[~^ GG pb/@ZkhB 4Gpb@Zk] G]] 0#k//5BBBUB`FBDD@F0Dk/#~^^~ (0޴8@H>P^X~`h@/Z@KG [GGGGGGG@?p(".J ///*i C.JRSBRAF @/8B4G@b , H@Zk/#4G! #!.!J/?Cr.rJ G@ G (b///ˢ .JUBF /8B@b8/8K4G@Zk/u%HBTGPb!E!@0 @%/@ZkG4."4JF ` 0@A//C.J?W/@4/GG4Kn_ĢB 0 A/jJXK G G?#9#C#.J?>$  "k#Q.QJ5 t.tJXeF#`;.JBD/JKBk aE` /4/8B"@b4K4G@Zk/ GGE- EI0_ /h- A 0 A.hIu ITJF>â"ò @/4GXK?//GG]]} (0ݤ8@H=P]X}`hp#k///p#~^^~qF (0޴8GGGGG ///@RszP;$ DQ#5//G`//FDG`G@D/ G// $D/@G?/(B 0b4G@Zk// c%#/&1&/ cð8G]G@b]} 4G(0ݤ8@#k///#TG8;"~^([^~ GGG0b@Zk// /(BGTGH""0b@Zk// /(BGTG@""0b@Zk// /GG]]} 0#/k///`#^~ ^(~08@޴HPX>`^h~px޵G pҠGGFG>%!//GG"b#GGE_ BTG(b%//@Zk0.P"Q2J'J(F?."J@/HG/GGC!///PBC4GXb!/@ZkB//GGTGb@ZkBGG4Gb/@ZkTB4Gb" G@Zk8DGG8`EF_// 4J0JJFF9/BG4Gb@Zk///3`Gb#8_/%0B GG8b""/ ///@ZkŢb#"&_0B G G8b@""@ZkG"G GHb#_`BG4Ghb@Zk G"Hb#GG_è cGGb#`@GG@l-blI` #/ C/ . C.#KZCK:GBJRCJtGFG@Zk/m dBGGbTG G/@Zk!//,,,H /,.0B4G8b,J@Zk@@,,!,H?,.,JG, ///l.0B4G 0A8blJ@Zk@@`BTGhb.!E!@.0 @ @Zk ,.,J!B.u/JTJF>ˢB/XK?,/,KG?Gb#+@G+@+-IC// G^ /KXC/BG4Gb@Zk 1@A - I@@B 4Gb@Zk @/?+1-1I?@BtTGHb@Zk BGG(bTG X E  /@Zk!// BGTG""(b@Zk B/GTG(b/@Zk BG""TG(b@Zk B/GTG(b@Zk BG""TG(b@ZkpB GG4Gxb@ZkV//?!GH$GHG"Hb#/_Ӧ/B "Ge"GbB"/@ZkpB4Gxb@ZkG?G=//ݡ8//0B4G""8b."/@Zk*ΠB"Gbf@ZkBG"4GGb/@ZkBAGTGb@ZkBGG"TGb@Zk"GHb#Gt_GG"Hb#o_G/ΡG] ](}08@ݤHPX=`]h}pxݥ#k//`# 0 = ^~(^0~8@Q"H޴PX`>h^p~x޵GGG0G`{#_# G G G G G GA!]?D/ݠG@4J8DJ/ GG G G GFGG _A_Et7JJFTFGm@ E/ e/ %# e. . E"YK[yKtG[G0BrJPJ8bG"GpF@ZkBW$GTGb 0A4G/@Zk$N/FFJ/ 0AF/8FG ,1A@FFTFG:/B4Gb@Zk///0"b#G@"b#@ӯC%Gpb#)@ӯ@ /// . E. % %# . /0B8bJRAJJXKFGtGF@ZkB $GTGb 0A4G@Zk$ 0`A ǠBG4Gb////@ZkTD!GǠݰ'G(B4Gb@ZkXE D/Ǡݰ BG4Gb@Zk///EG/Cݠ LE @H/ ? /E`H04G]BbRHR/@@ZkG/G ](]0}8@HݤPX`=h]p}xݥ#k/@B4GHb@Zk &G@BTG"""GHb@Zk@BGTGP""Hb""//@Zk`"" @BGX!""TGHb@ZkDG0BGTG8b @Zk=)G G] ?E/BG""bTGD$E///G@Zk"ÀBGTG""b0A@ZkB=AP""GTGb@Zk GB*"TGGb0A@Zk//BGTG*"b@ZkJ G_B4Gb@ZkGGk///B4G4Gb@ZkB""OGTGb@ZkBG#"TGb@ZkBGTGp""b@ZkcBGTGbc#"C`DD#@Zk//cCC#!DBGGCTGb@Zk _E5EA EE.A0AOEGC/ `GG/R//BTGb#"@ZkBG""TGb@ZkcG/BGTG#"b@ZkcG//G1/BG4Gb@ZkGG'/// G G//͡4G "pb#EE@Ӏ_EBb`"J _EGAEA *E /@ZkG G"Gb#4_ GG/// GGRGG///Bb"""GTG@ZkB;G>""b 4G@ZkBGTG ""b/@ZkG/4///% ?E%E/0`@/`5%A#i@BGTG%"b@ZkG///BGTG%"b@ZkBGTG""b/@ZkG ÀBGGTGb@ZkGBG4Gb@ZkG/ot% G<2 //X/x""x#6BGXK#KG.@8.0BX#3J+F( .J F0BB8"/ 8/;K0B+G X.ZJKF0B@x.qJ+F0B/ 0B/ ///.61BJ# F0B/G0F/?u@a.01BSaJa>/G]]} 0#/k///?9#/1,G1H1H#@///+@@!B.JJ@SpB s`0 @ B[.[J@沕KB@2Bt/tKtK TB 0@B B3,3H?//< B.JG3@G/a/tAJ0`B  DD[aK! tGa?.J vJ a/0`B[aK! vGa?.J.vJUJ0`B ! F>`/`K @.uAJ0`BTJ! F>.J/_3B.TJ>k,/GHemalloc,0@b#xemalloc,/D@Hemalloc,/LGtemalloc,0\b#xemalloc,/p@temalloc,Gefree ,b#Xefree,@efree,Gefree,b#Xefree,@efree4 G, decc$isspace4 b#X decc$isspace4 (@, decc$isspace4 G decc$isspace4 b#X decc$isspace4 @ decc$isspace4 Gerealloc4b#Xerealloc4 @erealloc4 $G< decc$isspace4 ,b#X decc$isspace4 8@< decc$isspace,G(progerr,b#progerr,$@(progerr,|Gefree,b#efree,efree4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp4 G(decc$strcasecmp4  b#decc$strcasecmp4 $@(decc$strcasecmp4 @GXdecc$strcasecmp4 Pb#decc$strcasecmp4 T@Xdecc$strcasecmp4<Gd addswline4Lb#@ addswline4`@d addswline<#GisMetaNameOpNext<$b#@isMetaNameOpNext<#@isMetaNameOpNext<G getMetaNameByName< b#@getMetaNameByName< @ getMetaNameByName4 G4 strtolower4( b#@ strtolower40 @4 strtolower4@ GX decc$strlen4H b#@ decc$strlen4T @X decc$strlen4 G strtolower4 b#@ strtolower4 @ strtolower4 G decc$strcmp4 b#@ decc$strcmp4 @ decc$strcmp4( GD decc$strcmp48 b#@ decc$strcmp4@ @D decc$strcmp4%d Gx newswline4&p b#@ newswline4%t @x newswline< b#@is_word_in_hash_table< G is_word_in_hash_table< @ is_word_in_hash_table4$ GD TranslateChars40 b#@TranslateChars4@ @D TranslateChars4d Gx decc$tolower4 l b#@ decc$tolower4t @x decc$tolower4 G decc$tolower4  b#@ decc$tolower4 @ decc$tolower4  G erealloc4 b#@erealloc4  @ erealloc4 G decc$strlen4 b#@ decc$strlen4 @ decc$strlen4 G decc$strlen 4 b#@ decc$strlen4 @ decc$strlen4! G( fuzzy_convert4" b#@ fuzzy_convert4!$ @(  fuzzy_convert4, GT addswline48 b#@ addswline4P @T addswline4` Gx addswline4p b#@ addswline4t @x addswline4x G addswline4 b#@ addswline4 @ addswline4 G addswline4 b#@ addswline4 @ addswline4 G addswline4 b#@ addswline4 @ addswline4 G addswline4 b#@ addswline4 @ addswline4 G fuzzy_free_word4 b#@fuzzy_free_word4 @ fuzzy_free_word4@Gd set_progerr4Tb#@ set_progerr4`@d set_progerr4'dGx freeswline4(pb#@ freeswline4't@x freeswline4G decc$strcmp4b#@ decc$strcmp4@ decc$strcmp4G decc$strlen4b#@ decc$strlen4@ decc$strlen4G decc$strlen4b#@ decc$strlen4@ decc$strlen4)G newswline_n4*b#@ newswline_n4)@ newswline_n4G8 decc$strcat40b#@ decc$strcat44@8 decc$strcat<G<is_word_in_hash_table<(b#is_word_in_hash_table<8@<is_word_in_hash_table4<Gd addswline4Pb# addswline4`@d addswline<#GisMetaNameOpNext<$b#isMetaNameOpNext<#@isMetaNameOpNext<HGtis_word_in_hash_table<Lb#is_word_in_hash_table<p@tis_word_in_hash_table4tG addswline4b# addswline4@ addswline<#GisMetaNameOpNext<$b#isMetaNameOpNext<#@isMetaNameOpNext,G efree,b#efree,@ efree,8GLefree,Db#efree,H@Lefree4'G freeswline4(b# freeswline4'@ freeswline4-0GD dupswline4.<b# dupswline4-@@D dupswline 4 PGldecc$strcasecmp4 db#decc$strcasecmp4 h@ldecc$strcasecmp4 lGdecc$strcasecmp4 |b#decc$strcasecmp4 @decc$strcasecmp4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp4+G decc$strcpy4,b# decc$strcpy4+@ decc$strcpy4G< addswline4b# addswline48@< addswline4@G\ addswline4Pb# addswline4X@\ addswline4dG addswline4|b# addswline4@ addswline4G addswline4b# addswline4@ addswline4G addswline4b# addswline4@ addswline4'G freeswline4(b# freeswline4'@ freeswline<#GisMetaNameOpNext<$b#isMetaNameOpNext<#@isMetaNameOpNext4G4 addswline4,b# addswline40@4 addswline44GL addswline4Db# addswline4H@L addswline4LGd addswline4\b# addswline4`@d addswline4hG addswline4tb# addswline4@ addswline4G addswline4b# addswline4@ addswline4 G4 addswline4(b# addswline40@4 addswline44GL addswline4Db# addswline4H@L addswline4`Gx addswline4pb# addswline4t@x addswline4'G freeswline4(b# freeswline4'@ freeswline4%G4 newswline4&b# newswline4%0@4 newswline4G decc$strcmp4b# decc$strcmp4@ decc$strcmp4G addswline4b# addswline4@ addswline4G addswline4b# addswline4@ addswline4,GD addswline4<b# addswline4@@D addswline4`Gx addswline4pb# addswline4t@x addswline 4xG addswline4b# addswline4@ addswline4G addswline4b# addswline4@ addswline4'G freeswline4(b# freeswline4'@ freeswline4G decc$strcmp4b# decc$strcmp4@ decc$strcmp4DGd decc$strcmp4X}# decc$strcmp4`@d decc$strcmp4dG| decc$strcmp4t}# decc$strcmp4x@| decc$strcmp4|G decc$strcmp4}# decc$strcmp4@ decc$strcmp4G decc$strcmp4}#P decc$strcmp4@ decc$strcmp4G( decc$strlen4{# decc$strlen4$@( decc$strlen\ \=D<Fatal Error: Failed to find insert point in replace_swline =0;=0;=0 ;=0(  decc$strlen= 0">;=p decc$strcmp==0  ;=@0| ;progerrefree= 0"@;===0";=0(   decc$strcasecmp=and8=not@=orH=0 ;=0"P;=pL 7decc$$gl___ctypea7decc$$ga___ctypet decc$isspace erealloc fuzzy_free_word=( set_progerr decc$strcat=* getMetaNameByName is_word_in_hash_tableTranslateChars strtolower=0";=L  addswline decc$tolower! fuzzy_convert #isMetaNameOpNext% newswline' freeswline) newswline_n=)='%s'=0 ";=(T <__not__>+ decc$strcpy- dupswline= @= P==X=0 ;=0, =0 ;=0$ /emalloc@ @6=D D=4,+ SWISH_WORDSCompaq C V6.5-001y y= 44= print_swline4=  0 =  = #4x4=$initModule_Swish_Words4=@87 0 0 0 1 1( =  = #4X4=$freeModule_Swish_Words4=80/ 1 1 1 1  =  = ! 4H4="isSearchOperatorChar 4=*"! 1 1 1 1 = 0E E= P4X4= next_tokenP4= 41 .1 .1 .1 91 71  A1 B1 M1 M1 V1 D1 D1T _1 D1 D1" g1 1L = ) )=%next_swish_word = + +='parse_swish_words =  =  44=replace_swline 4=kcb 1 1 1 02 02 02 = ' '=# checkbuzzword = ( (=$fudge_wildcard =  = "44=#isBooleanOperatorWord4=4,+ \2 \2 \2, = + +='isBooleanOperator = / /=+#"switch_back_operators =  = "4@4=#tokenize_query_string4= 2 2 2  2  2 2 1  2 2 2 2 2 2" 2 2 2 2 2 2 3 3 2 62 ;2 >2 B2 2 1 1 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1z 1 1. 3 2M N2 N2 N2 N2 13 TZ Z=  4=  e4= 63} }=v4= 4= 4= Z Z=  4=  e4= 3Z Z=  P 4=  e4= 1 = D] ]=v4=  4= XZ Z=   4=  me4= 3} }=v 4=  4=  4= <p = 0 = 44=parse_swish_query4=rj Y3 Y3  Y3 Y3K e3H 3 r3? 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 :4 @4 3 [4 [4 ^4 u3 u3 u3P |3 2 r2 r2 r2 s2 s2 x2 2 2 %5 .5 75 75 95 =5 #5 s4 r4 x4 x4 {4 |4  }4  4  4 4 4 4 4 4 37 4 4 4 v4& 4 v4 37 4 3 4 4 4 4 4 4 3Z 4 3L 3L 3P 4 4 4 4 4 4  4 4W 4 4+ 5 5 5 41 5 5 3: :=  p4= 3: :=  4= 4} }=v4= 4= 4=  = : :=   4= 3 ='v 4= 4=  4= 4= T: :=  4= 3 ='v4=   4= p4= 4= : :=  4= 3 = Z Z=  H4=  ?e4= 3Z Z=  P4=  e4= 2} }=vP4= \4= d4= `t] ]=vH4= P4= : :=  84= s3} }=v84= H4=  X4= Tt = p = @44=  isrule@4=*"! 3 3 3  =  = 4P4= isnotrule4=*"! 3 3 3  = 0/ /=+#"ignore_words_in_query = & &=" fixmetanames = ! !=fixnot1 = ! !=fixnot2 = & &=" expandphrase =  = !4 4="stripIgnoreLastChars4=f^] N5 N5 N5 U5 U5 U5 U5  U5 , ^5 = 9 9= "44=#stripIgnoreFirstChars4= o5 i5 o5 o5 o5  5 5 5 5 5 5 5> 5 5 5 5 5 5 = < < Ze4 e4 <e4D e4 xe4 e4 =   decc$strcat decc$strcpy decc$strcmp decc$strlendecc$strcasecmp decc$isspace decc$tolower decc$$ga___ctypet decc$$gl___ctypea fuzzy_convertfuzzy_free_wordemallocereallocefree strtolowerTranslateChars isMetaNameOpNext newswline_n newswline addswline dupswline freeswline is_word_in_hash_tableprogerr set_progerr getMetaNameByName c$stww1 ]َ]V1.0EE proplimitV1.0 4-AUG-2004 09:33Compaq C V6.5-001p p $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8JpSwishResetSearchLimit8J SwishSetSearchLimit8JPClearLimitParams0JPsetlimit_params8JPPrepare_PropLookup0J@LimitByProperty0J@ sortbysort0J` sortbyfile =#G ^0[~(^0GG >>"rR8b@Zk B4G"(b@ZkG ](]0@#k//0P(/K@#~^^~ (0޴8@GGGGG{#=@,///#G%@@  /B4Gb@Zk4GBb////@Zk4GBb/@Zk0@ $ @?G]]} (0ݤ8@P#k///)#~^^~ (GGG/B4Gb@ZkB4Gb@ZkB 4Gb@ZkBG4Gb@ZkGG]]} (0#k/#4G^ [~ ^(~0GGG> ^~(b@ZkB"tGPBXb8R"#//@ZkG /#b#] } @CHB@@G] ](}0@#k//#GG^~ ^(~08GGG~ >/ ///HBGPb@Zk/BB" GGR"Gb@ZkG///BG4Gb@Zk(BGG4G0b@Zk(B4G0b@Zk(B 4G0b@Zk] GDG] ](}08@#k/#^~ ^(~0 ^GCGp{#>3_G/4G/BGtG =b@ZkBG4Gb@ZkG] ](}0@#k///# ~^^~ (0޴8@H>P^X~`hp޵xG>*1@BG GGGGGG !@/@B4GGF7`Kb#-A3GGmASA_ɱGG*1A jA / 0AG jA////g///G///G]]} (0ݤ8@H=P]X}`hpݥx#k//@SdAGb#GGMdAp_g4G Gm"GGb#d_.1`ADZ 0`A//0B! 4G8b@Zk1 B/k///1 B/k///@#CC@^~H^P~X`h޴px>^~޵GG G#q֠( 4G }ݰY0BU/(///!0@B Aw/ ///B-GTGb@Zk// BGb4G$D/ pBD B`"$ m G/@Zk0B//G8b@ZkBGGGGG8"b@Zk/CkH//BGbp"4G@Zk0BG8b@ZkBGGGGGb8"/@Zk0BG4G8b@ZkBGGGGG8"b@Zk0BG4G8b/@ZkBGGGGG8"b@Zk$G B"GGG(bGD `BR"Go@ZkG///BGtGb@ZkB B"GoGG(bGR"@ZkH//ag$/BGGbTG /@Zk[gPB4GXbGP@@ZkG//@`!`@$ #@ @G3F// ///0@P@p@@Р@@R"Т "ҲPr@R02Ҳpr@@ @r202PR @/ ///0@R"" @pr/@BGGGGHbhb@ZkdG4G51`@`0d`(+/? GGG> = 0"`b#>G!_ =G @D/4G0=d`51`@(4GGGG "("`b#G _ GAD/ (4G(}0]DSFD7`@G#/` BB:G //B@# B_ B /0B# BG/B SB31`BF (}G(#`(]// B WBF/Y0@0B9# B?GTh@B4Gb G////@Zky@BGGGbHbGG@ZkPBG4GXb@Zk!`@d`" #@ @2FR //d@"fB.wJVJF>C0x/X#`:K[zK`Gx?@Pe.%"tQJSqJtFe>BТ,"xJ@HD<$&CP,y#q[KEHD<DFBp,"utJ@HD<ĢB =,#qJEHD<$&CP,@ @y#r[K@HD</ @/0"@0@ @.x%JWJF>/BG4Gb@Zk//34G } Hc/.`///0@A8D'//B B"Gm(bGGhR"@Zk/B B"Gm(bGG8R"@Zk/G// }HcG///4GG@]H]P}X`hݤpx=]}ݥ#/k/>// p#~^^~ (0޴8@H>P^X~`hGP`GGGGG!G/// 0BGTG8bB5@Zk7 Ga!@J$@ /*. J@EB4Gr.R"rJ&@,GGGb#O_ B GGJGtG(b G@Zk// J BGG(btG/@@Zk C 4G@BG4GHb@Zk//` C0@@ @_G/G]]} (0ݤ8@H=P]X}`hp#/k///4GD GDReadSingleDocPropertiesFromDiskD<b#ReadSingleDocPropertiesFromDiskD@@DReadSingleDocPropertiesFromDisk4DG\ freefileinfo4Pb# freefileinfo4X@\ freefileinfo,G(efree,b#pefree,$@(efree,4GTefree,8b#pefree,P@Tefree,`Gtefree,db#pefree,p@tefree,Gefree, b#Pefree,@efree,G(efree, b#Pefree,$@(efree,(G<efree,4b#Pefree,8@<efree,@GTefree,Lb#Pefree,P@Tefree4!Greset_lasterror4"b# reset_lasterror4!@reset_lasterror4G set_progerr4b#  set_progerr4@ set_progerr4G decc$strcmp4b# decc$strcmp4@ decc$strcmp4G set_progerr4b# set_progerr4@ set_progerr,Gemalloc, b#emalloc,@emalloc,G,estrdup, $b#estrdup,(@,estrdup,,GDestrdup, <b#estrdup,@@Destrdup,DG\estrdup, Tb#estrdup,X@\estrdup<GCompare_Properties<b#Compare_Properties<@Compare_Properties4 G freeProperty4 b# freeProperty4 @ freeProperty4  G8progwarn4 0b#progwarn4 4@8progwarn<pGgetPropNameByName<b#PgetPropNameByName <@getPropNameByName4G decc$strcmp4b#P decc$strcmp4@ decc$strcmp4G decc$strlen4b#P decc$strlen4 @ decc$strlen4 G( CreateProperty4 b#PCreateProperty4$ @( CreateProperty4` Gx decc$strcmp4h b#P decc$strcmp4t @x decc$strcmp4x G decc$strlen4 b#P decc$strlen4 @ decc$strlen4 G CreateProperty4 b#PCreateProperty4 @ CreateProperty4 G decc$strlen4 b#P decc$strlen4 @ decc$strlen4 G CreateProperty4 b#PCreateProperty4 @ CreateProperty4 G decc$strlen4 b#P decc$strlen4 @ decc$strlen4 G8 CreateProperty40 b#PCreateProperty44 @8 CreateProperty4@ G| set_progerr4X b#P set_progerr4x @| set_progerr< G Compare_Properties< b#PCompare_Properties< @ Compare_Properties4 G set_progerr4 b#P set_progerr4 @ set_progerr4  G LoadSortedProps4 b#PLoadSortedProps4  @ LoadSortedProps, G4 emalloc,$ b#Pemalloc,0 @4 emalloc4D Gd swish_qsort4X b#P swish_qsort4` @d swish_qsort,LGefree,\b#Pefree,@efree4G swish_qsort4b#P swish_qsort4@ swish_qsort,Gemalloc,b#Pemalloc,@emalloc,dGxefree,pb#Pefree,t@xefree4G set_progerr4b#P set_progerr4@ set_progerr4G8 set_progerr4$b#P set_progerr44@8 set_progerr4DGdgetPropNameByID4Pb#@getPropNameByID4`@dgetPropNameByID<GCompare_Properties<b#@Compare_Properties<@Compare_Properties<GCompare_Properties<b#@Compare_Properties<@Compare_Properties4 $G8 freeProperty4 0b#@ freeProperty8 84 4@8 freePropertyP P=@3Binary Sort issue - please report to swish-e list8=8,Cannot limit by swish result property '%s'h=@1Specified limit name '%s' is not a PropertyName=8*Property '%s' value '%s' must be <= '%s'=H<Failed to set range for property '%s' values '%s' and '%s'=0"Property '%s' is already limited8=XPLimits have been prepared (and executed) -- call SwishResetSearchLimit() first  =0 ";=@   freefileinfo0ReadSingleDocPropertiesFromDisk=0";=pD Compare_Properties getPropNameByID freeProperty=0";=@  =0"@;=L ; progwarn LoadSortedProps; getPropNameByNameefree decc$strcmpCreateProperty=0@";=T  set_progerr decc$strlen swish_qsortemalloc=<=;=>==0`;=0@;=0"P;=@( estrdup=0";=@$ !reset_lasterror=0 ;=0$ =0 ;=P@ @ @6=B B=2*) PROPLIMITCompaq C V6.5-001 = 44=GetPropertyByFile4=7/. 0 0 0 0  =  = "4p4=#SwishResetSearchLimit4= 0 0 0  1 1 1 1 1 1 1 1 1 8 = P = 4P4=ClearLimitParams4=)! 31 .1 31$ =  =  4 4=!SwishSetSearchLimit4=E=< S1 S1 S1 W1 ]1$ =  = P44=setlimit_paramsP4=e]\ d1 k1  s1 {1 }1 ~1 1 1$ = @ = 44= test_prop4=910 1 1 1  1( =  = @44= binary_search@4= 1 1  1  1 1 1  1 1 1 1 1 16'P 2 2 = # #= find_prop = x x= @44= sortbysort@4= 2 =  x x= `44= sortbyfile`4= 2 =  - -=)! create_lookup_array = ) )=%params_to_props = $ $=  load_index =  = 4P4= Prepare_PropLookup4=G? 3 3 3 3 3 z2 3 3 J3 F3h ?3  3I 3P 3_ 2 3 3D F3 3 3 3 3 3 3 3L F3+ r3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 =2 92 =2 D2 D2 H2 V2 d2 f2 f2 f2 q2 v2 v2 J 2 2 2w 2 2 2 2 2 2 2 2 2 F3;0 3 31 L3 L3 V3H 3\Z Z=  4=  e4= 3Z Z=  4=  Ve4= ~3Z Z=  4=  e4= 2] ]=v4= d 4= X} }=v4=  4= l4= Z Z=  4=  e4= h3 =/v4= 4= 4= 4= t` 4= t< ='v4= 84= X4= 84= p`  = P = 4@4=LimitByProperty4=~ 3 3 3 3 3  3 3 3 3 34P 4 =  =   decc$strcmp decc$strlenestrdupemallocefree freeProperty freefileinfoCreateProperty Compare_Properties(ReadSingleDocPropertiesFromDisk getPropNameByNamegetPropNameByID set_progerrprogwarnreset_lasterrorLoadSortedProps swish_qsort c$stww1Q^َ]V1.0GG swish_qsortV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i $CODE$ $LITERAL$X$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J0 swish_qsort = =`B B;0B C`2AJ{#V@J@fC@B8`G D`GD/+///q2@B1"0q"p1p1p0q0q@B1p1pq0pq/p@///q21@B1""p/_k//G}@BM@/q.p/"" @F FqJpKupJ[pK"uGs1Hp?Q..p#RQJJ"1"SFQ>0,rJ;HA6Hq#"2DrJ0<1,A;H2Dq.q#1<0,wJ"6H"rwJA7H"2DrJ0<1,.A6HJp#"2DrJ}@1<0,7HA;H2D0<.avJWJF>//q/. 1@qKJrJWJ"Fs1H>q/[qKsG1"q?k//#TG~^GS^~ (0GGGGG@ZkEG>GGTG/@ZkEGGGTG/@ZkGDG///EGGGTG@Zk//EGGGTG@ZkDGGG]]} (0@#k/@#pF@^~@BH^P~X`h޴px>^~޵Gp@FGD8@GTDG BGGG G_` C8@G G///0H11@3H@6J%N@GLv`Jb#LGr@ p@ G @G Ao@k@}_G0AAGGb#v_ G0A1AGGb#o_G GGb#Gi_ GC@á̱/GGGG_e@e@ GK`///AGGG FTG/@Zk&//FGGGTG@Zk/ 4G`, - GGGG_,A-AA_Ai 4G`-O/MA-AGGGG 4Gq_AA//GGGGg_A-A 4G///AGGG FTG/@Zk2//FGGGTG@ZkG 4G`GGGE_  - ,,A-AA/?A//@ `GGGG1_A-A 4G/ / 4G-A-A/ 4G.AA///L8AE 2ACG YBF1A s@@G _.,A,AGG.ACNBNG@12A/_C-HGGC8KG b G=[[`X[  =_ C-HGA#,A,I G(0 p`D(0= DT@E G[[`X[88@?A/Le@d@Ag//A G.A /.@`//FGGGTG@ZkG-A"GAGG_A/AA/?G//(A///FGGGTG@Zk(M--AAH AAA?./Le@)CCd@@&@/@G(@/`///FGGGTG@Zk//bh/GGGGk_"E@ AC@?@@/G@]H]P}X`hݤpx=]}ݥ#/k =0 ;=0";=@0< =0@ ;=T 0;@ @6=D D=4,+ SWISH_QSORTCompaq C V6.5-001 = 44=swapfunc4=(      =  = 4 4= med34=2*)   D ( =  = 404= swish_qsort4=ph      % &                                         "  !  $  &  &  ? > B B /                  U            0   CP =  =  ww1 v4^َ]V1.0CCramdiskV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$ih$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jramdisk_create0J8 ramdisk_close8JPadd_buffer_ramdisk0J(  ramdisk_tell0J0 ramdisk_write0J ramdisk_seek0J ramdisk_read0J ramdisk_getc0J  ramdisk_putc =ph#4G^ [~ ^(~08GGGG(b/@Zk0BGGGtG8b@Zk B4GG4GD d(b/@Zk@BGTGHb@Zk}G]G ](}08@#/k///#4G~^8[^~ GGG"@b@Zk(B4G0b@Zk(BG4G0b/@ZkG]]G} 0#k///0#TG^~ [^ ~Q B(GGG(b/@Zk#BTGb0 @@ @# #@Zk}G]] }(0#k//k//#3@^ S~H^P~X`h޴pxGG^2N;!H2AK@B DDG~^> F [[/`X[  L4`C5TC!!H:AK(=0](]0}[[BjKYG[8]8 G@/C BGGBRTBG@Zk$@@b#G0@@@_ GB? B E@GG@/@ZkâB#C/ G@]H]P}X`hݤpx#k//p#8@FX@F^~^ ~(0GGGG3BUF//â@@dB`//4G"xb#4GGm_@/GG]] }(0@#k//#GG8^~G2NSG@^H~1JPXB`G2TC/c` >B;JzB~>[`C[#[QG[G:G@`X[^[O":B9B4J0J ( ](}[[jKYrFG/[0]0C@8CB- WG0@@8CCC`@ZBCU@ZkWG BD@@BGWCC0@@8C`@ZU@ZkW 7E@DGG///wUBG@@@@@Zk@G8]@]H}PX`p#k///#G4G4G^~{#"Gq_G] #Dk//#G4G4G^~{#G"_G]4G #k, GDemalloc,8b#emalloc,@@Demalloc4DGdMem_ZoneCreate4\b#Mem_ZoneCreate4`@dMem_ZoneCreate,dGemalloc,b#emalloc,@emalloc4G Mem_ZoneAlloc4b# Mem_ZoneAlloc4@ Mem_ZoneAlloc4 G( Mem_ZoneFree4 b#8 Mem_ZoneFree4 $@( Mem_ZoneFree, (G<efree, 4b#8efree, 8@<efree, <GTefree, Hb#8efree, P@Tefree4Gerealloc4b#Perealloc4@erealloc4G Mem_ZoneAlloc4b#P Mem_ZoneAlloc4@ Mem_ZoneAlloc4 G4OTS$MOVE4 0@4OTS$MOVE4 lGOTS$MOVE4 @OTS$MOVE4 GOTS$MOVE4 @OTS$MOVE4 4G<OTS$MOVE4 8@<OTS$MOVE4 tGOTS$MOVE4 @OTS$MOVE =0";=@( emallocMem_ZoneCreate Mem_ZoneAlloc=0 ;=0, erealloc=0@#0;=4 8OTS$MOVE=0" ;= ( =08#;=pH< =0";= ( =0";=@, =0 ;=0";=0$ ` efree Mem_ZoneFree@ @6=@ @=0('RAMDISKCompaq C V6.5-001 = 44=ramdisk_create4=XPO ), ), ), -, 1, ., 3, 5,( =  = 484= ramdisk_close4=3+* 9, 9, 9, @, =  = 4P4= add_buffer_ramdisk4=?76 E, C, C, C, C, E,$ = z z=  4(4= ramdisk_tell 4= N,  =  = 044= ramdisk_write04= S, S, S, S, [, [, W, a, c, d, _,  k, 4 =  = 44= ramdisk_seek4=VNM , x, x, , ,< , ,$: :=  `4= , =  =  = 44= ramdisk_read4=*" , , , ,  , ,  , , , ,$ , , , , , , , , , , , , , , , , , , ,0 =  = 44= ramdisk_getc4=0(' , , , ,  = P =  44= ramdisk_putc 4=7/. , , , , , = HL Le4 =  emallocereallocefreeMem_ZoneCreate Mem_ZoneAlloc Mem_ZoneFreeOTS$MOVE llocww1^َ]V1.0@@rankV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$(Jpgetrank =G4G;P"4GGG/բFwB0BB"0 B"R"r/k///#$"H^~P^X~`h2CpGGG޲p{# RTBGR 2_C4GGLC F?@1@C :B BSF//@///@"Ԣ @t4FUBFFVBWBG֢[xC?D{A8@F!PBB@BB@yC@9@@B @0@_ @ /Ԣ0@" @FVB֢B@XB?#/xBG]"btG11B/@Zk'? &HBPbs"?#]@ @$"_?$P!  `[/@Zk8"(B0bX@Zk<"/@X[((=///"Q B@"E@E@E@00][8=8}[jKY[@]@GH]P]X}`hp!#k4G$ decc$tlog_24b# decc$tlog_24 @$ decc$tlog_24,GD MATH$FLOOR_T40b# MATH$FLOOR_T4@@D MATH$FLOOR_T<GgetTotalWordsPerFile<b#getTotalWordsPerFile<@getTotalWordsPerFile4"G MATH$LOG10_T4b# MATH$LOG10_T4@ MATH$LOG10_T4G( MATH$FLOOR_T4b# MATH$FLOOR_T4$@( MATH$FLOOR_TP P=0;;=0H"p;=0< @ MATH$FLOOR_T=?#@F` MATH$LOG10_T decc$tlog_2=> ף getTotalWordsPerFileY Y=0! @6 x x0=`X*'6>EL:QUY]a1dgiNlnpsuvx{z%|}E*܄$a ғe8ИXқ>G$7סu?Ӥe!+/,#sVƯ5yKG l̵*AQY[VK:ֽ#pR0yP"g4w?C@~7s(cM1jH!%W+_-`)[O>m'U 8dAmDn@i 6^&Mu7]@fCh@c6X{&Hi1Rs6V&v4Sr ,Ji;Yv &C`} )Ea} $@\w5Pk $>Xr 'AZt $=Un2Jc{ ":Qi #:Qh>'5Kbx)?Uk-BWm*?Sh} !5I^r&9Mat$7J^q .ATgy 2DWi{ /ASew(&8IZl}(9J[l}$4EUfv )9IYjz(8GWgv 0?N^m|"1@O]l{+:HWet) .<JXgu*8FTao} -;HVcq~*7ER_ly!.;GTanz+7DP\iu* !-:FR^jv*6AMYeq|  +7BNYep|   & 2 = H S _ j u                & 1 < G R ] h s ~                + 5 @ K U ` k u     +            ( 3 = H R ] g q |                l l=TL * 4 > I S ] g q {          x x=`X Nf!G#F%'((*+,- /0 1123p41556F778 99B::Q;;Q<<B=='>>?h??3@@@QAAB^BBC[C,CCJDDD-EvEEFIFFFGUGGGHQHHHI?IxIII JWJJJJ+K^KKKK&LVLLLLMAMoMMMM NKNvNNNNOFOnOOOO P3PYPPPPPQ8Q\QQQQQ R.RPRrRRRRRS7SWSwSSSSST1TPTnTTTTTUU:UWUsUUUUUUV4VOVjVVVVVVW W:WSWlWWWWWWXX-1XIXaXxXXXXXXYY1YHY^YtYYYYYYYZ#Z8ZNZcZxZZZZZZZ[[1[E[Y[l[[[[[[[[\\.\A\T\g\z\\\\\\\\ ]]0]B]T]e]w]]]]]]]]^^#^4^E^V^f^w^^^^^^^^^ __*_:_I_Y_i_x_________``!`0`?`N`]`k`z`````````` aa.'a6aDaRa`ana{aaaaaaaaaabbb,b9bGbTbabnb{bbbbbbbbbbb cc"c/c;cHcTcacmcycccccccccccc dd#d/d:dFdRd^diduddddddddddddd ee e+e7eBeMeXeceneyeeeeeeeeeeeeefff%f0f:fDfOfYfdfnfxffffffffffffff/ggg%g/g9gCgLgVg`gjgtg}ggggggggggggggh hh h)h3hmEmLmSmYm`mgmnmum|mmmmmmmmmmmmmmmmmmmmn nnnn#n*n1n7n>nDnKnQnXn^nenknrnxnnnnnnnnnnnnnn1nnnnnnnno oooo#o)o/o6oP^X~`GG{GGG^`G/0BGTG ""8bG4G/@7Zk%/ 4G @BTGHb0.P"0!GQ2J'JG@ZkB GGGeGbh"@Zk .j!P J >*.+J ///8-F`TD-F D .G"BEGbTJ@"J/@Zk ,k! H?GGGGGGb#@*-g I I*I 'E*=Ţ//0BTG8b ""G@Zk//4G G%G4GGGb#@ /G]]} (0ݤ8@H=P]X}`p#/k//8/#4G^8[~^ ~(08޴@HP>X^`GGGGG@b4GG>@Zk ,B " GTGbA1H'HG@ZkHB GGGGGbh"/@Zk),8BG4G@bA)H)!)<@ZkBGGGTGb%H@ZkHB GHGGGb("@Zk ,8BG4G@b@ HJ! <@Zk*-G*I //8-DTD-D D,D 0A J.HGj"BbGRSJ@"GJG/@Zk*-J!*I?GGG9GGb#@BG4G b@ZkBG4G b@Zk G4G] b] }(08ݤ@HP=X]`p#k///#^~^ ~(08޴@HGG: GGGۤ///4dBG"4GbGG`}"//@ZkC /BG"}"4GGGb@Zk@&4GBG0"" "GDGGb!D 48F"@Zk///GG]] }(08ݤ@HP#k/4G//#TG~^:^~ (0޴8GGGGGۤf"aF?FG`@Zk/////GGGb#G@&G!D?BGTG"b@Zk//G]G]} (0ݤ8@#/k///@ #GG^~^~޴D>^~GGGB"GGGGG G G8DC0~"$dTG^ B~(b@Zk pB0" H"DG]}Gxb"@Zk BGTG0}"GG(;b/@ZkG&PBG4GXb0 @&/@Zk,$(@4GPBXb@ G(/@Zk =(4G@BHb LB0@@Zk G0@PG BBGG3F/; ///./t#  @@FA"FJXK"yJ"R"G?T/r.[Kq@KS`J qF2"r>./JXKyJ""G?t/r.`KzHSqJ 0@zFr>./JyJXKG?? %@`/T/.0 @0A %@TKWJ"xJR"F>?0}L`eCGhA @/F`<///j..0B F0A@EjJVJJ!wqJ1"F>0C B0B/..q/J0AJ!zJ[qK1"zGq?0}eB B0B/`.1,J0AJ!rJA1H1"2D1<0C B0B/*/Q/*K{HZQK0A1"J![GQ?0}eB B$D*,*H /.hA0A, GGJtJ@HD<///J/j"JK D*.3J/ 4G/D0= G* .G%Cy@J J!JF/%@ G%C"4FPB4=GXbp@ BG@Zk`@*, "0}"A0H'H!"7!B!"Q3B @"t@1q@ B%B/*! #hAC8Ax#:GxC;Ai F/O///),."@# EAi"D)HTJ)!q H  F>. /JY:K"rJ2G@" ? . .JQ!Ji"tJ 4F >..JyJVJ"@"F>I/.SKqaJPJI# F>..JvJUJ;AF>)/.:Kq!KPJF>_8A////. ,0AJA H)!>8ApJ 0D </? //hA0A.rHWJF> Gj/J!jK/7hA(,`BTGhbA(H(<4p@BG@ZkBG4Gb@Zk0PBG4GXb/ @Zk AGGGGGXb _ GGG]]}ݤ=]}#/k///#C^~^ ~(0GGq `///$0B =4G8b@Zk80B4G8b/@Zk B4G"(b@Zk0BG4G8b/?@ZkG//G]] }(0@#k/#4G ^P[~(^0~8@HGGGGGXb ^~@Zk@BG]"GtGHb@ZkpBG0xbGtG@Zk BG`4G(b/@Zk// B4G(b8"@Zk  B4G8(b/@Zk// B4G(b8"@Zk]=G4G`Bhb$0D4$@Zk$d(,.J///G/C.CJKF/4G /DF"@.J(0B(#/@c #K?]/  //!G G pG`G/4G/?G ](]0}8@HP#k4 `Gdecc$strcasecmp4 pb#decc$strcasecmp4 @decc$strcasecmp4 G decc$strchr4b# decc$strchr4 @ decc$strchr, GAprogerr, b#progerr, @progerr, PGtprogerr, \b#progerr, p@tprogerr4 Gdecc$strcasecmp4 b#decc$strcasecmp4 @decc$strcasecmp,Gestrdup,b#estrdup,@Bestrdup4 G decc$strchr4b# decc$strchr4 @ decc$strchr, GDprogerr, 4b#progerr, @@Dprogerr,HGhestrdup,Tb#estrdup,d@hestrdup4 hG decc$strchr4|Cb# decc$strchr4 @ decc$strchr, Gprogerr, b#progerr, @progerr,Gestrdup,b#estrdup,@estrdup, 0GTprogerr, 4b#progerr, P@Tprogerr,GDefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,efree,TGregexec,db#regexec,@regexec,EGregexec,b#regexec,@regexec4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G( decc$txprintf4 >Fb# decc$txprintf4$@( decc$txprintf, Gregexec,b#regexec,@regexec4 GL decc$txprintf4@b# decc$txprintf4H@L decc$txprintf,LGtregexec ,hb#regexec,p@tGregexec4G decc$strlen4b# decc$strlen4@ decc$strlen4G decc$strlen4b# decc$strlen4@ decc$strlen,Gemalloc,b#emalloc,@emalloc4X Gx decc$strlenH4d b# decc$strlen4t @x decc$strlen4G decc$strcat4b# decc$strcat4@ decc$strcat,Gefree,b#efree,@efree4G decc$strlen4b# decc$strlen4I@ decc$strlen,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gregfree,b#regfree,@regfree,G4efree,(b#Jefree,0@4efree,|Gemalloc,b#emalloc,@emalloc,Gregcomp,b#regcomp,@regcomp, Gprogerr, b#progerr, @progerr,G$estrdupK,b#estrdup, @$estrdup,0GDestrdup,8b#estrdup,@@Destrdup,HGdestrdup,Tb#estrdup,`@destrdup,pGestrdup,xb#estrdup,@estrdup4GL decc$strlen4b# decc$strlen4@ decc$strlen =H?Failed to complie regular expression '%s', pattern. Error: %d@=0!%s regexp %s: unknown flag '%c'h=pf%s regex: failed to find search pattern delimiter '%c' in pattern '%s'replace %s =~ m[%s][%s]: %s =@1 Result String: '%s' Original String: '%s' M=(%s match %s %c~ m[%s] : %s (=QI%s regex: failed to find replace pattern delimiter '%c' in pattern '%s' =0 p;=P,< estrdup;=@regcompemalloc decc$strlen progerr=0 ;= p< notN decc$strcasecmp decc$strchr=0 ;=@$ regfreeefree=0"p;=P regexec= MatchedP7 DEBUG_MASK= No Matchh; decc$strcat decc$txprintf=0"`;=@,| =0"O;=(P, matched=nope=0 ;=p@ @ @6=@ @=0('SWREGEXCompaq C V6.5-001 = 44= add_regex_patterns4= ,  , , ,  , , ,P ,4 ,  ,, ,' , , ,/L = N N= #44=$add_replace_expression4= - - - -  $- #-  $-  /- 2- 2- 3- 7- 7-Q :- :- ;-4 ?-  Q- Q-, Q- =  = Q44=match_regex_list4=WON \- \-  c- c- h- g- a-0 k- = ` = `44= process_regex_list`4=XPO y- y- {- {- {- -$ ~-  -0 = u u= p44= regex_replacepR4=  - -  -  -  - - - - - - - - - - - -( -h -$ - - - - - - - -0 -( -( - - - -  - - - - - - - -~ - - -8 - -$ - - - - -DS . .L =   = 44=free_regex_list4=OGF . . . $. '. ". $ = 2 2= #p44=$add_regular_expressionp4= <. <. <. >. <. >. D. I. K. J. J. K.T Q. O.7 R. e.$ = \ =   decc$txprintf decc$strcat decc$strchr decc$strlendecc$strcasecmpregcompregexecregfree DEBUG_MASKemallocefreeestrdupprogerr  c$txww1 /^َ]V1.0LLdouble_metaphoneV1.0 4U-AUG-2004 09:33Compaq C V6.5-001  $ABS$i,$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0JDoubleMetaphone0J NewMetaString8J DestroyMetaString0JIncreaseBuffer0J MakeUVpper(J0IsVowel0J@ SlavoGermanic0J GetLength(JGetAt(JSetAt0J0StringAt0J0 MetaphAdd =#4G^~^ ~(0GGGG^@[Hb_F^@Zk0BGtG4G "8bP"@Zk Bb4G`DG@Zk@B@Hb4WG@Zk0BtGTG "p"8b@Zk`BG4GhbtG0@@Zk dGG]] }(0@#k///+ GG4G#~^^~ GGG [(b/@Zk GG(b]]4G} 0#/k/// G4G(qk///k///P#TG^~ [^ ~QB(GG>GPAB(b@ZkPBtGG@""Xb@ZkC@@P@G]] }(0#k/,H/X##~^^~ GGG//C/4Gc#Z[K0bGK(B/@Zk.qHPJc F>C.CJ_G]]} 0#k///  B/B0,"A0H'H5(@(@5)@)@`G*@5+@DDDDk/Gk//#TG0;"~^ [^~ GGG(b@Zk/4G / BTG8""(b@Zk//4G/ BTGH""(b@Zk//4G/ BTG@""(b@ZkCG]]} 0#kY//k//  B/ B0,"A0H'H/k///Gk//  B/Bp/`PJ[pK`Gp?k///0#H> /@h~^^~ (0޴8G GG`  BB/Ġ BG G(btG.GJ/@Zk///@BGP""Hb@ZkGG]]} (0ݤ8#k//4G/// #4G~^p[^~ (0GGGGGxb@Zk#GZGb# @01B 0@G/ _ BGTG(b/@Zk@G]]} (0@#k///#4G^[~^ ~(08޴@HP>X^`~hpxGGb# =C@ZkG$1@b# _GG""b#_`"b#/_G`"b#_ Gxb# G_Ә GTG"G` b"""b#4GJ_ӨCGG"_ DG ""b#0A_G ""b#{_*q`@)1@/ A@/3G@BSF1@//[/fGGG`A`_gGGG`B`_ Gb#Ǣײ_Gb#_G]Gb#] }(08ݤ@HP=X]`}hpx#ô AGG_ӵ@9"/"8""Gb# ///0A-_8""Gb#)_ӰG0A ""b##_G ""b#_Ӧ//] @ 1@/ \@8Ck//G@""b# _G@""b#_0A/G""b#_G""b#_0AG_XD4GTDA|ó=A1QAG`"+`G\ PA(b"+_&11AGb#tG_PAGG/{_8 DGPAb""`"s_DG1QAGb#/_ ""b#G_""b#G_GLëCGb"GG`"b#Gz_// G ""b#_G ""b#_PA5/GGGb"G`"b#d_ G""b#_G""b#_PA!/GGTGPb"G`"b#P_ӻGGXb"G`"b#GF_// G""b#_G""b#{_PA/+`0Ab""GG`"b#]G._Hb!G0A~`b!tGXb"~""b#G _GGPb"GG`"b#_ G""b#R_G""PAb#M_GGGb"G"`"b#_ PAaGGtGb"`"Gb#_`!W1QAGGb" ""Gb#_GKPAb"4GG "`"b#_B11AX" >G4G@b"G`"("b#_ӡA"HB"0"D"#B#0" ^޶GPA (^4Gb"0>8"8"Gb#_GG TGb"`"b#G_^G""/GG""b#_G""b#_j//G""Gb#_G""b#_^//GGTGb"G`"b#_1QAGb"GG`"b#_ G ""b#_G""PAb#_@0AGtGb"G 0A`"b#o_ G""b#_G""pAb#_,GGTGb"G5A`"b#[_V 8`EGG` =///_ DM` PAG4Ghb"X"0"b#G PAE_G3b"`"PATGGb#<_+_21A11AG`_8D/ GGG8b"@"`"Gb#*_// G`""b#c_G`""b#__pA/GpA""b#W_G""b#S_//GG""b#K_G""b#G_//G`b!b"H"~GTG"Gb#_"" Gb#/3_G""b#/_PA/~GGpb"TG"@"b#G_!~GGtGb"""Gb#_ G ""b#_G""PAb# _ӔGPA ""b#_G ""b#_ӊ//G""b#`_G""b#_~GG8b"TG" "b#G_//pAq/~GGxb"4G""b#G_ 4GGGTGb"p"`"Gb#_ӋTD AXGV//GGTG0b"G`"b#`!_"PAGhb"X""4GG PAb#w_ G(""b#_G(""pAb#_4GG""b#_G""b#_*// TGGGb"TG"`"b#GV_Ӌ4DG""b#_""G Ab#_///0AG!_D4GG""TDb#Aa}_""Gb#y_0AG_ D 0A11AG///_ G""b#f_""b#Gb_PAëyACPAG E PAb#/`PA//_8 DG(""N_(""b#GJ_/GG""b#C_G""b#?_//=A1QAG`! `4GHb"G0"p"b#_]A`!1qA `Hb"G4G0"p"Gb#_/ }A1AG 4GHb"0"G`"b#_PA/`11AG!_ Db"`b!1qA~G~4Gxb"b"4G"b#_ G""b#_G""PAb#_x 11AGb#_8 DG""_G""b#_PAhGGy_ D 8EGG/;PA//`_ b#G*_ ""Gb#_8""Gb#_LGGTGb"G`"b#|_GGb#S_8 DG/ _ 8""Gb#_""Gb#_0G""b#_G""b#_'///GGTGb"G`"b#T_Gb#/_ ""b#G_""b#G_PA +GGc(b!_8 Db"""#~" "B#P `b!~ >GTG0G(b"(^8"0"Gb#@~#_ G""b#^_G(""PAb#Y_GGTGPb"G`"b#_GG_8 D*G`b!~GGb"G""b#_11AGXb"4Gh"`"b#G_G11A b"tGGX"`"b#_ G""b#&_G(""PAb#!_ӨG`b!Xb"h"~G4G"G 4Gb#_11AGb"GGP"`"b#_//GGb#_dDG""TD_""b#G_ AGGGb"G"`"b#_*Gb"GtG`"b#G_!GGb"TG`"Gb#_GGGhb"G`"b#_ G(""b#_G(""b#_PAQ/G(""/G""PAb#_G""b#_B//11AG/_0AG_ 0""b#G_0""b#G_PA,0A*//GGGb"G 0A`"b#W_vGxb"GG`"b#GN_mGGGb"G`"b#D_>eG(""b#_G@""P11AG,1A_Gb#/_GG _8DGG_ D/G(""b#c_G0""4EG(""b#///W_G`""(  8"B"H""` ^GG ޶(b""4GG"b#_G`" G>4G b""G"b#_G(""b#._G(""b#*_GG_X D 4GTD A//AG/_D GGGxb"`"b#G_/G0""G(""0Ab#_G0f""b#_ӊ//0AG_x D 4GG""TDb#_G"" Ab#_x0AG_ D 0A  E11AG7`!b"G``""Gb#_/Gb""GTG`"b#G_ GG4G@b"`"G`"b#_11AGb"GG`"b#_ G""b#_G`""PAb#_<PA//GG""b#_G""b#_.//11AGtGb" =@ 8 G 0A`"b#[_ dE PAPAGTGPb"G`"b#Og_GGG%_ D 4GTD A""Gb#_""Gb#}_0AG_ D 4GG8""TDb#r_G8"" Ab#m_0AG_ D 0AG""b#PAa_""Gb#]_ TGGb"H"G4G`"b#G_ӌ4D""Gb#M_""G Ab#H_///0AG_8 D 4GG""TDb#:_G"" Ab#5_Ӽ EGb#/`///_1QAGb"TGG`"b#_ 1AG8b"TG"G`"b#_G`""G"" 4Ghb#_G""b# _0AG_X DTD A11AGtG0b"G"`"b#_0AíCGHb"GG`"b#G_// G""b#_G ""b#_0Ai/GGTGb"G`"b#@b!_///#~0A`!GGb"G""b#_ G ""b#_G ""PAb#_DGPA""b#_G""b#_://GGtGb"G"`"b#g_ӾGb"GG`"b#G^_ӵ 0A!`!0AGb"4G8i""b#GN_ GGb"4G`"Gb#E_/G ""b# TG~_G""b#z_GG4Gb"`"b#G2_ӌ4D A///GGTGb"G pA`"b##_RPAG_ DB""h"J^`b!pA޶~GTGb"P"h"TGb# _GpAPb"TGh"`"b#G_//G""G""Gb#7_G""b#3_Ӻ//GtGGk_GtG_ DG""b#!_ ""Gb#_ӤGG""b#_G""b#j_Ӛ// E1QAG`b" TG"`"Gb#_G`""/G "" TGb#_G ""b#_GG b"4G"`"b#G_ӌ4D As///Gb#A_ "" Gb#/_G""b#_pAa/GpA ""b#_G ""b#_V//GGGxb"G`"b#_ G""b#_G""b#_pAA/GGtGb"Gp"`"b#o_ G""b#_G""pAb#_,GGTGb"G TG`"b#[_Gb"GtG`k"b#GR_0AG4Gb"p"G`"b#H_Ӎ4DG""b#_G""b# A~_/PAGTGHb"G"`"b# PA2_//GGGGb""`"b#&_ b"GGtG`"Gb#_P""G/G""Gb#S_G""b#O_//0AG_ D 4GG""TDb#B_G"" Ab#=_GGTGb"G`"b#_ G""b#/_G""b#+_PA/#0AG 0Ac_ Gb"GTG`"b#G_//lGGT_G@""b#_G""G@""b#_G@""b#_ E,1A11AG`>_///G8!`b!~Gb"GG@"X"b#_!b"GGtG`"Gb#_GGb""G`"b#G_ G""b#_p""b#G_AX0AV//G0A`""b#_G""b#_J// E1qAGb"tGx"`"Gb#u_1QAGb"TGG`"`"b#k_G`""b#_G`""b#_ TG0AG4Gxb""G`"b#Xm_Ӌ4D A/0AG-_ D 0AG(""b#PA_(""Gb#_ G`!b"h"GTG"Gb#9_GAb#/_Ӡ@11AG D _ DG ""b#g_G ""G ""b#`_G"" 4Gb#[_GG_X DTD A0A,4GHemalloc,8b#emalloc,D@Hemalloc4HGl decc$__assert4`b# decnc$__assert4h@l decc$__assert4pG decc$strlen4tb# decc$strlen4@ decc$strlen,Gemalloc,b#emalloc,@emalloc4G decc$__assert 4b# decc$__assert4@ decc$__oassert4G decc$strncpy4b# decc$strncpy4@ decc$strncpy, `Gtefree, db#efree, p@tefree, tGefree, b#efree, efree, Gefree, q#pefree, efree4 G(erealloc4 b#erealloc4 $@(erealloc4(GL decc$__assert4Db# decc$__assert4H@L decc$__assert4b# decc$toupper4G decc$toupper4@q decc$toupper4G decc$strstr4b#@ decc$strstr4@ decc$strstr4G decc$strstr4b#@ decc$strstr4@ decc$strstr4 G8 decc$strstr40b#@ decc$strstr44@8 decc$strstr4PrGh decc$strstr4`b#@ decc$strstr4d@h decc$strstr4G decc$strncmp4b# decc$strncmp4@ decc$strncmp4G decc$strcmp4b# decc$strcmp4@ decc$strcmp4DGx decc$strlen4spb# decc$strlen4t@x decc$strlen4 G decc$strcat4b# decc$strcat4 @ decc$strcat4 Gl decc$strlen4Pb# decc$strlen4h@l decc$strlen =@8DISK$USER1:[jfp.swish-e-2_4_2.src]double_metaphone.c;1=pht `  P P0p@ `  "@"0$$ =0";=@$ ;0 decc$__assertemalloc= s != NULL` decc$strncpy=s->str != NULL decc$strlen=0  ;=04  efree=0;u=0;=0 ;=0,  erealloc=0 0;=@0<  decc$strcat=0";=0(  decc$strstr=Wx=K=WITZ=CZ=0"0;=8|  decc$vstrncmp8 OTS$HOME_ARGS decc$strcmp==00;=0 ;=00   decc$toupper=ILLO8=AS@=AGGIH=ETP=OSX=YSL`=SHhw=UMBp=MAx=KL=IB=DT=G= RANGERRGY=ES=EB=OWSKY=EWSKY=OM=0=OWSKIx=OU=ZI=FX=EAU=SIA=SC=HEIM=HOLM =TIA(=TH0=OO8=OI@=CCH=HYMPy=HIAX=CK`=HUh=Vp=GNx=PN= ORCHESPS=Q=CHIA= G=ACH=DG= C=CYz=CG=CH=CHAE=O=EN=CI=SAN =Y=IE=WICZ=WR =VON (=SK0=Z8{=SCH@=MH=PP=KNX=R`=Lh=Fp=Tx=X=0 ;= L? S=J=H=N|=A=B=ER =E=KS=I=D=C=VAN =ALLE=EY=TK =CE(=CI}A0=JOSE8=TS@=CIOH=CIEP=CQX=HARIS`=HARACh= MACHERBACHER = Q= CAESARORCHIDMC= ARCHITU= =~UCCEE=UCCES=HEM=CHORE=HOR=AI=EM=TCH=TION=ED=SIO=HOEK=UY =SIAN(=AU0=IAU8=ZA@=ZOH=AMP=TTHX=EWSKI`=WHh=EPp=EIx= MANGERDANGERIN=LI=DD=IL=EL=ISL=ME=HOLZ=SUGAR=OGGI=OGY=ILLA=IER =0;@ @6=I I=910DOUBLE_METAPHONECompaq C V6.5-001 = 44= NewMetaString4=xpo +6 +6 .6 .6 06 46 76 56 96 <6 ?6( =   =  44=DestroyMetaString 4=NFE G6 D6 I6 D6 I6 L6 L6 L6 =  = 44=IncreaseBuffer4=@87 S6 Q6 Q6 Q6 Q6 S6  =  = 44= MakeUpper4=-%$ ^6 Z60 ^6 ^6( =  = 044= IsVowel04=)! j6 n6 k6  = p = 4@4= SlavoGermanic4=0(' w6 w6 w6$ = w w= 44= GetLength4= 6  =  = 44= GetAt4= 6 6  = Pv v= 4>4= SetAt4= 6 = @ = 044=StringAt04=D<; 6 6  6 6 60 6 =  = 044= MetaphAdd04=NFE 6 6 6 6 6 6 60 =   = 44=DoubleMetaphone4= 6  6  6  6  6 6 6 6' 6 6 : : : :8 : 6I 6I 6H 7 7 6  "7 $7 #7 "7 "7 %7 "7 &7 "7 "7( 17 F7 F7$ P7 R7 R7 R7 P7 P7 W7% ]7 ]7 a7 ]7 c7 ]7 e7 ]7  h7 h7 ]7 p7 r7 7 l7 k7 k7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7  8 8 8 !8 !8  #8 #8 &8 *8 *8 28 28 28( 28 28 28  C8 D8 B8 D8 D8 B8  P8 J8 K8 J8 X8  Z8 Z8 c8 b8 b8 s8 ~8 }8 8 8 8 }8 8 8 8, 8 8 8 8 8! 8, 8 8 8 8 8$ 8 8 8  8 8 8 8 8 8  8, 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8$ 8 8/ 9 9 9 9 9 9 9$ 9$ 9 9 #9 09 29 09 09 49 @9 @9 L9 N9 U9 V9 a9 a9 h9 h9 h9$ h9 r9( 9 9 9 9 9 9 9 9 9 94 9$ 9 9 9 9 9 9  9 9 9 9 9 9 : 9 9 9 9\ : : : 2: !:$ !: !: %: %:  =: =: L:( L: _: `: `: _: _:  d: d: y: y: y: : : :W : : : : :  :  : 6 = % =   decc$toupper decc$strcat decc$strncpy decc$strstr decc$strcmp decc$strncmp decc$strlen decc$__assertemallocereallocefree OTS$HOME_ARGS  c$toww1e_َ]V1.0CCdb_readV1.0 4-AUG-2004 09:33Compaq C V6.5-001h h $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J initModule_DB0Jp  freeModule_DB0J@@ read_worddata0J read_header@J@0parse_MetaNames_from_buffer@J parse_integer_table_from_buffer0J getfilewords8J` getTotalWordsPerFile(J DB_Open0J DB_Close8J DB_InitReadHeader8J DB_ReadHeaderData8J` DB_EndReadHeader8J0 DB_InitReadWords0J@P DB_ReadWordHash@Jp DB_ReadFirstWordInvertedIndex@J0 DB_ReadNextWordInvertedIndex0J  DB_ReadWordData0JPDB_EndReadWords8JDB_InitReadSortedIndex8JDB_ReadSortedIndex8JDB_ReadSortedData8J`DB_EndReadSortedIndex0JPDB_ReadFileNum0J0DB_CheckFileNum8J@ DB_ReadPropPositions0J PDB_ReadProperty = 4G({/k/// 4G({/k///#4G1" ^Т~(^0~8@H޴PGGDvGGGG>[/@Zk="tGDH`[@Zk4G/ #Xa [@ZkHG#G}"GGTa[@Zk B]GGtG(b@Zkc4GXc[@ZkG ](]0}8@HݤP`#k//p#4Gp^~x^~޴>^~޵GG s[G!4!L!T!\q!dQ! !G 1!D  GG@Zk"="]"GG$`[/@Zk$"D"d""" " "#R (ݰ08@ݲHPX}`]h=///0QBB' \BHCk// B=GtG(b@Zk@BG4GHb@ZkPBTGh=Xb@Zk B tG=`](b@Zk@BG4GHb @ZkPB TGX=Xb@Zk BtG=P](b@Zk@BG4GHb@ZkPBTGH=Xb@Zk B$tG=@](b@Zk@BG4GHb$@ZkPB$TG8=Xb@Zk BtG=0](b@Zk@BG4GHb@ZkPBGTGXb@Zk0B4G8b@Zk`BtGTGhb@Zkt///0B4G8b@Zk/0B4G8b@Zkl/0B4G8b@Zkp/ B=GtG0(b@Zk0/// B=GtGP(b@ZkP/// B=GtGX(b@ZkX{/// B=GtG`(b@Zk`o/// B=GtGh(b@Zkhc/// BHtG=(](b@ZkHW///0B4G8b@Zk=0BG4G8b"/@Zk=0BG4G8b"/@Zkxİ|䰀;///] ?"@b#;@2//=Gb#@+///=Gpb#P@#///=Gb#@///@B4GHb|ĠP@/@ZkG@b#]|$@ÐB4Gb("@Zk// B4G(b@Zkà"="]"GG$f[@Zk/c(cG4G[@ZkGp]x]}ݤ=]}ݥ#k//#4G^0[~^ ~(08޴@HP>X^`~hGGG>8b@ZkB"4GbG/@ZkWG/B4Gb"@ZkBG0@4Gb@ZkB]GGG4G@ZkB"bB@/XK?@ZkBG"4Gb@ZkBG4G"b@ZkB)1@"4Gb@ZkB G4G"b@Zk@B+q@GGGGGHb@ZkPBG XbGGtG@ZkB0@G4G @H( hb@Zk///G]] }(08ݤ@HP=X]`}hp#/k///#4G^[~^ ~(08޴@HGGG">b@ZkG0G//B4Gb"0@@ZkpBG0@4Gxb/@ZkHB]GGGtG/@Zk BGG(b_"B@/XK?@ZkPB @G4GXb/@Zk///G]] }(08ݤ@HP#/k///#4G^ [~ ^(~08@GGGG"(b^@Zk`/// B0@4G"(b @Zk 1@ @G] ](}08@P#/k///P0Bk///ptGsk///4G pGk//4G pGk//G$pGGGGk///4G(pGk//4GDpGk//tGHpGGG/k///GLpGGGGk///GPpGGGGk///GTpGGGGGk//4GXpGk//TGdpGGk/G`pGGGGk///4GxpGk//G|pGGGGk///GpGGGGk///4GpGk//tGpGGG/k///#GpGGGGG  #k///p#?F4G0 ^~(^0~8@H޴PX`>h^p~x =GFrB //GGGGDu[@Zk=DG="?D0D"C=2_J]cLs]"[e@Zk4G #Xa [/@ZkH0 v B4G(b@Zk`BG N!4G0Ahb/@Zk.8BG G4GPJ>]G@Zk@BHb@Zk).)JQ)JD/)>Q/'A"="]".G0@UJ>âPve[@Zk/;/// B4G(b@Zk @ GPBGP`ATGXb (@ A!0A@Zk G8B]G'A 'A4G@Zk@BHb@ZkL-+AG]"LI D@.PJ>#0`A"Pqe="[/@Zk 'A ,@ H <'A.PJ> &GG ](]0}8@HݤPX`=h]p}x#k<GinitModule_DBNative<{#initModule_DBNative<initModule_DBNative<# G4freeModule_DBNative<$({#pfreeModule_DBNative<#04freeModule_DBNative<!(GDuncompress_worddata<"<b#@uncompress_worddata<!@@Duncompress_worddata4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G sortstring4b# sortstring4@ sortstring4G,makelookuptable4$b#makelookuptable4(@,makelookuptable40GL SafeStrCopy4Db# SafeStrCopy4H@L SafeStrCopy4LGd sortstring4Xb# sortstring4`@d sortstring4dG|makelookuptable4tb#makelookuptable4x@|makelookuptable4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G sortstring4b# sortstring4@ sortstring4Gmakelookuptable4b#makelookuptable4@makelookuptable4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G sortstring4b# sortstring4@ sortstring4Gmakelookuptable4b#makelookuptable4@makelookuptable4 G< SafeStrCopy44b# SafeStrCopy48@< SafeStrCopy4<GT sortstring4Hb# sortstring4P@T sortstring4TGlmakelookuptable4db#makelookuptable4h@lmakelookuptable4pG UNPACKLONG24|b# UNPACKLONG24@ UNPACKLONG24Gget_fuzzy_mode4 b#get_fuzzy_mode4@get_fuzzy_mode4G UNPACKLONG24b# UNPACKLONG2 4@ UNPACKLONG24G UNPACKLONG24b# UNPACKLONG24@ UNPACKLONG24G UNPACKLONG24b# UNPACKLONG24@ UNPACKLONG24G, SafeStrCopy4$b# SafeStrCopy4(@, SafeStrCopy4@G\ SafeStrCopy4Tb# SafeStrCopy4X@\ SafeStrCopy4pG SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy4G SafeStrCopy4b# SafeStrCopy4@ SafeStrCopy40GD UNPACKLONG24<b# UNPACKLONG24@@D UNPACKLONG24HGd UNPACKLONG24Tb# UNPACKLONG24`@d UNPACKLONG24hG UNPACKLONG24tb# UNPACKLONG24@ UNPACKLONG2, $GDema>lloc, ,b#emalloc, @@Demalloc,dGxprogerr,lb#progerr,t@xprogerr,Gefree,b#efree,@efree4<GfreeMetaEntries4b#@freeMetaEntries4@freeMetaEntries4 G uncompress24b#@ uncompress24 @ uncompress24 G uncompress24b#@ uncompress24 @ uncompress2, Gemalloc, b#@emalloc, @emalloc4GOTS$MOVE4@OTS$MOVE4 G$ uncompress24 b#@ uncompress24  @$ uncompress24 $ G< uncompress244 b#@ uncompress24 8 @< uncompress24 < GT uncompress24L b#@ uncompress24 P @T uncompress24 T Gl uncompress24d b#@ uncompress24 h @l uncompress24 l G uncompress24| b#@ uncompress24  @ uncompress24 G addNewMetaEntry4 b#@addNewMetaEntry4 @ addNewMetaEntry, G progerr, b#@progerr, @ progerr, G efree, b#@efree, @ efree 4 \ G uncompress24 b# uncompress24  @ uncompress24  G uncompress24 b# uncompress24  @ uncompress2,  G emalloc,  b#emalloc,  @ emalloc4 G OTS$MOVE4 @ OTS$MOVE< G8 add_word_to_hash_table< b#add_word_to_hash_table<4 @8 add_word_to_hash_table,8 GT efree,H b#efree,P @T efree4  G uncompress24 b# uncompress24  @ uncompress24  G uncompress24 b# uncompress24  @ uncompress24G decc$strlen4b# decc$strlen4@ decc$strlen, Gemalloc, b#emalloc, @emalloc4GOTS$MOVE4@OTS$MOVE,Gefree,b#efree,@efree4pG decc$strlen4|b# decc$strlen4@ decc$strlen4 Gerealloc4 b#erealloc4 @erealloc4GOTS$MOVE4@OTS$MOVE,Gefree,b#efree,@efree =0&failed to add new meta entry '%s:%d'(=(Severe index error in headerH=xp@P@`@ 0Pp` `=0;  initModule_DBNative=0 ;P=0;p=0 ;=00 ;=0 ";=L  decc$strlen=8OTS$MOVEefree erealloc emalloc=0P;@=0 ;`=0;=0;=0;=0;=0P;=00; =0 ;@=0P ;`=0 ;=0 ;=0 ;=0 ;=0 ;=0` ;=0  ;=P,<  uncompress2=0 0;=pD ;p freeMetaEntries addNewMetaEntryprogerr=0 P ;=P4 add_word_to_hash_table=0p ;=T  SafeStrCopy UNPACKLONG2 sortstring makelookuptableget_fuzzy_mode=0 "@;=`8| !uncompress_worddata=0 ; #freeModule_DBNative@ @6=@ @=0('DB_READCompaq C V6.5-001z z= 44= initModule_DB4= /  =  z z=  4p4= freeModule_DB 4= /  =  = @4@4= read_worddata@4= 0K 0 0K 0K 0H 0[ 0[ 0X 0 0P #0N $0R &00: :=  D4= &0 = : :=  4= $0] ]=v4= 4= (: :=  4= 0} }=v4= 4=  4= $: :=  4=  0 =  : :=  D4= 0 ='vD4= T4= |4= 4= ` = P  = 44= read_header4= M1 =0 =0 =0* =0t 0 =0( H0  H0] 0 f0 c0 a0 ^0 \0 Y0 W0 T0 J0 R0 R0 W0 W0 \0 \0 a0 a0 f0 f0  w0 0$ H0 0T: :=  4= 0 = : :=  4= 0 = $: :=  ,4= G0 = (: :=  4= E0 ='v4= 4= 4= $4=  = T T= (04@4=)!parse_MetaNames_from_buffer04= 0 0 0  0 0 0 0 0 0 0 0 0 0P 0 0 0 0 0 0 0L =   = 'P 44=( load_word_hash_from_bufferP 4=~vu 0 0 0 1 1 1 1 1 1 1 1 1 < = P = , 44=-%parse_integer_table_from_buffer 4=g_^ 1 1 1 1 1 1 1 1 1 14 =  = !` 44="getTotalWordsPerFile` 4= 71 =  t t=  44= DB_Open 4= B1  =  u u=  44=DB_Close 4= G1  =  ~ ~=  44=DB_InitReadHeader 4= M1  =  ~ ~=  44=DB_ReadHeaderData 4= R10 = 0} }=  4`4=DB_EndReadHeader 4= W1  =  } }= 0 44=DB_InitReadWords0 4= ^1  =  | |= P 4@4=DB_ReadWordHashP 4= c10 = 0 = * 4p4=+#DB_ReadFirstWordInvertedIndex 4= h10 = 0 = ) 404=*"DB_ReadNextWordInvertedIndex 4= m10 = 0| |=  4 4=DB_ReadWordData 4= r10 = 0| |= 4P4=DB_EndReadWords4= w1  =  | |= 044=DB_CheckFileNum04= }1  =  { {= P44=DB_ReadFileNumP4= 10 = 0 = #44=$DB_InitReadSortedIndex4= 1  =   = 44= DB_ReadSortedIndex4= 10 = 0~ ~= 44=DB_ReadSortedData4= 10 = 0 = "4`4=#DB_EndReadSortedIndex4= 1  =  = ! 4@4="DB_ReadPropPositions 4=  10 = 0 = P4 4=DB_ReadPropertyP4=" 1 1 1 = @ = 44= getfilewords4=7/ 1 ^1c 1 1 ^1U ^1k h1a h1b 1 h1f w1W w1Z w1Z 1 1 1 1 m1x m1y 1 m1} 1 1 1 1 m1& m1 m1} @Z Z=  4=  " e4= 1} }=v4= 4= 4= DZ Z=  $4=  " e4= 1} }=v$4=  44= D4= 4Z Z=  `4=   e4= 1} }=v`4= h4= t4= $Z Z=   4=  e4= 1} }=v 4= 04= D4= <Z Z=  4=  he4= 1} }=v4= 4= 4=  =  S e4rh e4 e4e4he4.e47e4Ve4ue4 =   decc$strlenget_fuzzy_modeemallocereallocefree SafeStrCopy sortstringmakelookuptable add_word_to_hash_table uncompress2 UNPACKLONG2 uncompress_worddatap>rogerraddNewMetaEntryfreeMetaEntries initModule_DBNative freeModule_DBNativeOTS$MOVE c$stww1_َ]V1.0DDdb_writeV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i($CODE$7 $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J write_header0J write_word0Jpbuild_worddata0J`` write_worddata0J0  add_worddata0Jwrite_MetaNames@J@write_integer_table_to_header8J0setTotalWordsPerFile0J DB_Create0J` DB_Remove8J0DB_InitWriteHeader8JDB_EndWriteHeader8J PDB_WriteHeaderData8J@DB_InitWriteWords0J  DB_GetWordID0J DB_WriteWord8JDB_WriteWordHash8J@DB_WriteWordData8JpDB_EndWriteWords8J DB_InitWriteSortedIndex8J DB_WriteSortedIndex8JPDB_EndWriteSortedIndex0J`DB_WriteFileNum8J@DB_RemoveFileNum8JDB_InitWriteProperties8JpDB_WriteProperty8JDB_WritePropPositions@JDB_Reopen_PropertiesForRead =p#TGP^@[~X^`~hpx޴GGGGGGHGGHbL/@Zk/// ," "0H&DGGCG4Gr[@Zkà0"TGGGGf 1"[@ZkàtG0"GGGf[@Zk B4G(b@/@Zk@G@="G#GGa[@ZkPB4GbG@Zk#0@GGGGa[@ZkBG4Gb@Zkà0@GGGGf[/@ZkHݠ4GL B(b0ݰ8G4/@Zk B4G(b04@Zk B84G4(b@Zk8G0="GGGg[@Zk`BGhb@ZkBGG4Gb@Zk0@GGGGg[@ZkpBG4Gxb@ZkXB4GbG@Zk0@GGGGg[@Zk`B4GbG/@Zk0@4GGGGg[@ZkhB4GbG/@Zk0@TGGGGg4G[@Zk B4G4G(b(@Zk(G(="GGGg[@ZkPBt4GXb/@Zk BC4G(b @Zk tGG ="GGg[@Zk B4G(b@ZkGG="GGg[@ZkB4GbG@Zkà0@tGGGGf[/@Zkl B4G(b@ZkGG="GGg[@Zkp B4G(b@ZkGG="GGg[@Zk B4GbG@Zkà0@GGGGf[/@ZkB4GbG@Zkà0@GGGGf[/@Zk$B4GbG@Zkà0@GGGGf[/@ZkB4GbG@Zkà0@4GGGGf[/@ZkGTGD"0b#"G@GtG Db#G6@GGGb#G@GG Db#G*@ӄGGL}G0b#D@cG4Gc[@ZkGP]X]`}hpxݤ#/k///C#4Gs~^C G0s >^[/@Zk= tG]1"R4qC[@Zk =G] 0#k///P#TG ^~[(^0~8@H޴PX`>h^pGGCGbGG>2&L1/@Zk=G!p ///PB! "=4GXb/@Zk=DG`BTGhb..A"]JU J F C/0'L0@C/@Zk BTG(b$LP%@P@ B@ P@P$/@ZkLà$LƠ@BGTGbGG@Zk`B GGhbTG$L%@/@Zk BTG(b%LPH*@IA0`B rBRB2A0@B/`P(@ZkLà$LƠ@B]GG@G@Zk/ XK?/#9'L9`Bhb0@%CTG@Zk BG="(bh&L&@ݰ(DOs@Zkcc$TG ](]0}8@HݤPX`=h]p#k///p#TG^~0[^ ~(GG&G>T0" ^L8b@Zk BTG(b&T0L@ZkCcGG <c"&T1L1G]] }(0#3 @/k///ߞ#4G^~ [^~޴>^~޵  GG࢞ž➧#GGG8"8=(bG/@Zk/// B4G(b8"0@@Zk B8"4G(b@Zk8= @8 @D&TtPF@B$TGbfB @&"P'L@ZkL4GàBb$T0  //@ZkG/ #B4GG!$T!LA@=@Zk088" B(b&L(/@Zk B4G0"(bH@ZkHBTG(=bB@Zk B8"4G(b(/@Zk BG0"4G(b@Zk B G4G8"(b@Zk8=@B4G0Hb!$@ @ C@Zk0=G G?E! 0=!///BG A(=iFTGbG@Zk(CTG0B8b&L-@G/@Zk( E ( //PB8"=" ]"GXb}"/@Zk= 4GBbA/"P?@//@ZkG/P!`BG]GhbF8"@ZkBP G4GEb @Zk8 AC%DC*D?/GB@(1A@4G/@Zk8ݢ(8" B(b5BB( @Zk BG4G8"(b@Zk8/A A CPB0"="GXb ]"}"@ZkB4G ݠbPA//  @ZkGP!`BG]GhbF0"@Zk =XPB}2@("G="Gb@ZkpB=G("]Gxb@ZkP BG4GEb//@Zk0]B4G(.GB1A/@Zk0@ݠ0"(ݢ B(b5@5A@B8@(0GDT ///@Zk@B0 G4GHb@ZkE8]B A@(G!DB1AA@Zk8(8"8=9$C%G B(b5B5UAB(2 4G@Zk BG8"4G(b@Zk8ݠ&@ @ C%0]B@ G(.GB1A/@Zk0(0"@ B0=9'C5B(b5A G4GB(/ @Zk@B0 G4GHb/@Zk0ݡ G!0ݱ%(=0BG?ETG8bL0/@A@Zk@/B(=GTGbG@Zk(CGTG0B8b%L/@@Zk(ݡ8]@4GB! DB(ݱC1@A@Zk8=(ݢ8"88CG B(b!$@!AAB(= @Zk BG4G8"(b@Zk8-A Aà$(ݡ0BTG8bLƠ0A@@Zk/8 ///B(=GTGb G@Zk0BCGTG(8b@Zk(0]@4GB!*GB(C1A@Zk0}(0"@ B0 @+gA(b+AD A(} /@Zk@B0 G4GHb@Zk0 G 0/?BG!D4Gb@Zkc(c$LC( ATG]]}ݤ=]}ݥ   #k// #^~ ^(~08@޴HPX>`GGGGGG >~/ #B4G0@b&@@!@Zk #@0@ @?B@4GbG@ZkBG GTGb/@Zk G/@G// #B4G0@b$@@@ZkB GGGTGb@ZkBHGGTG@ZkB @b/@ZkBGTGb@ZkȠBGTGb0@@ZkBGTGb/@Zk BGTGbpA/@Zk #G @?2@ }GGh[@ZkG]Gb ]4G(}08@ݤHPX=`p#/k///w@#^~ ^(~08@޴HPXGGGGGGG >~// //0B4G8b"0@@Zk@@0@&  ?B@<4GbG@ZkBGGGTGb/@ZkG////0B4G8b"@ZkBGGGTGb/@Zk BGD"G@@Zk0@' c ?2@ }GGu[@ZkBG4Gb/@ZkG] ]G(}08@ݤHPX`#k//Gk//#0`B4G^~0[ ^(~08@޴HGGGG8b >P@^@Zk BGGGTG(b@ZkGݠ`/// B0@TG(b 0B/@Zk @G/?2$BG}Gp [@Zk@BG4GHb/@ZkG] ]G(}08@ݤHP#/k///#C4G^~^ ~(G @p > N"[G ^bCF /PB@Zk BQBTG(b@Zkc= A#@G]] }(0#k//PTGrk///4GpGk//4GpGk//GpGGGGk///4GpGk//4G,pGk//4G0pGk//tG4pGGG/k///tG8pGGG/k///G<pGGGGGk//4G@pGk//4GpGk//G\pGGGGk///TGhpGGk/4GlpGk//GppGGGGk///4GtpGk//#G~^G#(pGGGGG [/@ZkG] #k//tGpGGG/k///4GpGk4  Gd decc$strrchr4Tb# decc$strrchr4 `@d decc$strrchr4 GPACKLONG4 b#PACKLONG4 @PACKLONG4 @GT decc$strlen 4 Hb# decc$strlen4 P@T decc$strlen4 xG decc$strlen4 b# decc$strlen4 @ decc$strlen4 GPACKLONG4 b#PACKLONG4 @PACKLONG4 GPACKLONG4 b#PACKLONG4 @PACKLONG4 GPACKLONG4  b#PACKLONG4 @PACKLONG4<GL getTheDateISO4Db# getTheDateISO4H@L getTheDateISO4 LGd decc$strlen4 \b# decc$strlen4 `@d decc$strlen,Gefree,b#efree,@efree4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4 G4 decc$strlen4 $b# decc$strlen4 0@4 decc$strlen4 \GtPACKLONG4 hb#PACKLONG4 p@tPACKLONG<Gfuzzy_mode_value<b#fuzzy_mode_value<@fuzzy_mode_value4 GPACKLONG4 b#PACKLONG4 @PACKLONG4 G PACKLONG4 b#PACKLONG4 @ PACKLONG4 8GL decc$strlen4 @b# decc$strlen4 H@L decc$strlen4 xGPACKLONG4 b#PACKLONG4 @PACKLONG4 GPACKLONG4 b#PACKLONG4 @PACKLONG4 G  decc$strlen4 b# decc$strlen4 @  decc$strlen4 8GL decc$strlen4 @b# decc$strlen4 H@L decc$strlen4 xG decc$strlen4 b# decc$strlen4 @ decc$strlen4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4G compress34b# compress34@ compress34G$ uncompress24b# uncompress24 @$ uncompress240G PACKLONG248b# PACKLONG24@ PACKLONG24Gerealloc4b#erealloc4@erealloc4G compress3 4b# compress34@ compress34G$ PACKLONG24 b# PACKLONG24 @$ PACKLONG24( Gl erealloc40 b#erealloc4h @l erealloc4 G OTS$MOVE4 @ OTS$MOVE4 G PACKLONG24 b# PACKLONG24 @ PACKLONG2<' G adjustWordPositions<( b#adjustWordPositions<' @ adjustWordPositions<%t G remove_worddata_longs<& b#`remove_worddata_longs<% @ remove_worddata_longs<# G compress_worddata<$ b#`compress_worddata<# @ compress_worddata4D G uncompress24 b# uncompress24 @ uncompress24 G uncompress24 >b# uncompress24 @ uncompress24 G uncompress24 b# uncompress24 @ uncompress24( GT erealloc44 b#erealloc4P @T erealloc,` G emalloc,d b#emalloc, @ emalloc4 G OTS$MOVE4 @ OTS$MOVE4 G uncompress24 b# uncompress24 @ uncompress24 G uncompress24 b# uncompress24 @ uncompress24 G compress34 b# compress34 @ compress34 G4 uncompress24$ b# uncompress240 @4 uncompress244 GL uncompress24D b# uncompress24H @L uncompress24L Gd uncompress24\ b# uncompress24` @d uncompress24h G UNPACKLONG24t b# UNPACKLONG24 @ UNPACKLONG24 G compress34 b# compress34 @ compress34 G PACKLONG24 b# PACKLONG24@ PACKLONG2D GDuncompress_location_valuesD4b#uncompress_location_valuesD@@Duncompress_location_values,PGtemalloc,Tb#emalloc,p@temallocDGuncompress_location_positionsDb#uncompress_location_positionsD@uncompress_location_positions,Gefree ,b#efree,@efree4GOTS$MOVE4@OTS$MOVE4 G< uncompress24$b# uncompress248@< uncompress24<GT uncompress24Lb# uncompress24P@T uncompress2DdGuncompress_location_valuesDtb#uncompress_location_valuesD@uncompress_location_values,Gemalloc,b#emalloc,@emallocDGuncompress_location_positionsDb#uncompress_location_positionsD@uncompress_location_positionsD!Gcompress_location_valuesD"b#compress_location_valuesD!@compress_location_valuesDGcompress_location_positionsD b#compress_location_positionsD@compress_location_positions, GDefree,0b#efree,@@Defree4HGdOTS$MOVE4`@dOTS$MOVE4tG uncompress24xb# uncompress24@ uncompress24G UNPACKLONG24b# UNPACKLONG24@ UNPACKLONG24GOTS$MOVE4@OTS$MOVE4G4 uncompress24b# uncompress240@4 uncompress244GL uncompress24Db# uncompress24H@L uncompress24dGOTS$MOVE4@OTS$MOVE4G uncompress24b# uncompress24@ uncompress24G UNPACKLONG24b# UNPACKLONG24@ UNPACKLONG24G$ PACKLONG24b# PACKLONG24 @$ PACKLONG240GL compress34@b# compress34H@L compress34`Gx PACKLONG24db# PACKLONG24t@x PACKLONG24GOTS$MOVE4@OTS$MOVE4G uncompress24b# uncompress24@ uncompress24G uncompress24b# uncompress24@ uncompress24 G( PACKLONG24b# PACKLONG24$@( PACKLONG24@G\ compress34Pb# compress34X@\ compress34\Gx PACKLONG2 4pb# PACKLONG24t@x PACKLONG24GOTS$MOVE4@OTS$MOVE4G uncompress24b# uncompress24@ uncompress24G UNPACKLONG24b# UNPACKLONG24@ UNPACKLONG2,G4efree,,b#efree,0@4efree4 G( decc$strlen4 b# decc$strlen4 $@( decc$strlen,<GTemalloc,Hb#emalloc,P@Temalloc4TGt compress34hb# compress34p@t compress34 G decc$strlen4 b# decc$strlen4 @ decc$strlen4G compress34b# compress34@ compress34GOTS$MOVE4@OTS$MOVE4G compress34b# compress34@ compress34G compress34b# compress34@ compress34 G8 compress34,b# compress344@8 compress348GT compress34Hb# compress34P@T compress34XGt compress34db# compress34p@t compress3,Gefree,b#efree,efree4 pG decc$strlen4 xb# decc$strlen4 @ decc$strlen,Gemalloc,b#emalloc,@emalloc4G compress34b# compress34@ compress34 G decc$strlen4 b# decc$strlen4 @ decc$strlen4G4 compress34(b# compress340@4 compress344GLOTS$MOVE4H@LOTS$MOVE,Gefree,b#efree,@efree,GLemalloc,0b#@emalloc,H@Lemalloc4LGh compress34`b#@ compress34d@h compress34G compress34b#@ compress34@ compress3,Gefree,b#@efree,@efree,lGemalloc,xb#emalloc ,@emalloc4Gerealloc4b#erealloc4@ereallocs s=(# Swish-e format: 2.4.2 =# SWISH format: 2.4.2  =0; =0P;@=0";=P4|  compress3emallocefree=0";=`4 8OTS$MOVE decc$strlen=0 ;=p8 =00;=0P ;=4  PACKLONG;P decc$strrchr fuzzy_mode_value getTheDateISO=0;=0;=0 p;=  =0P;=0 ; =0;@=0;`=0;=0;=0p;=0@;=0;=0; =0;@=0;`=0;=0;=0 0;=0( erealloc=0 0 ;= X  uncompress2 PACKLONG2 UNPACKLONG2(uncompress_location_values(uncompress_location_positions(compress_location_positions(!compress_location_values=0 ` ;=0( #compress_worddata %remove_worddata_longs=0 p;=D 'adjustWordPositions=0 ;=0( @ @6=A A=1)(DB_WRITECompaq C V6.5-0013 3= 44= write_header4= 0 0 0 0 0 0 0 0 0 0$ 0 0 0 0 0$ 0 0 0 0 !0 "0 "0 #0 #0 $0 $0$ &0$ (0$ )0 )0 *0$ +0$ ,0 ,0 -0 -0 .0 .0 /07 /0 70 G0 L0<: :=  4 = 0 = $: :=  4= 0 = $: :=  x4= %0 = $: :=  4= '0 = $: :=  4= )0 = $: :=  4= +0 = $: :=  4 = ,0 = $: :=  |4= L0 = : :=  4= 00] ]=v4= 4= (: :=  4= /0] ]=v4= 4= (: :=  L4= .0] ]=vL4= T4= (: :=   4= -0] ]=v 4= 4= (: :=  L4= *0] ]=vL4= T4= (: :=  44= $0} }=v44>= <4= T4= (: :=  4= #0] ]=v4= 4= $: :=  4= "0] ]=v4= 4= $: :=  d4= 0] ]=vd4= l4= $: :=  4= 0] ]=v4= 4= (: :=  T4= 0] ]=vT4= \4= $: :=  4= 0] ]=v4= 4= $: :=  4= 0} }=v4= 4= 4= (: :=  4= 0 =  =  = 44= write_word4=c[Z 2 R0 R0 R0 R0 X0 2 X0 Z0 : :=  4= Y0 ='v4= 4= (4= 04= 0: :=  4= W0 =7v4= 4= 4= 4= 4=  $4= X =  = p44=build_worddatap4=B: 0 x0 x0 x0 x0 0 0 x0 0  0 0 0  0 0  0 0 0 0 0 0  0 0 0 02 0 0X 0 0D =  = ` 4`4=write_worddata` 4=kcb 1 0 0 0 0 0 1 1 1 1: :=   4= 1 ='v 4=  4=  4=  4= ` = P P= 0 44= add_worddata0 4= 1 1 1 "1 #1 '1 ,1 01 ,1 .1 61 61 ;1 :1 :1 >1 @1 @1 C1 F1 I1 J1 N1 Q1 R1  X1 Z1 Z1 _1 k1 k1 t1 t1 t1 w1 y1 1 1 1 1 1 1 1  1 1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 V1~ V1  1 1 1 1 1 1 1 1 1( 1  1 1 2 1 1 2 2H 2 2 2 2 2 1 2T = p } }= 44=write_MetaNames4=  02 2 2 02 22 02 02 02 72 92 92 ;2 =2 ?2 =2 @2 B2 C2 D2 E2 F2 G2 =2  =2 J2 K2 K2 K2( K2: :=  4= K2] ]=v 4= 4= ( = `. .= '44=( write_hash_words_to_header4= ^2 S2  S2 f2 g2 d2 a2 n2 l2 p2 p2 y2 {2 w2. t2^ 2R 2 2, 2 : :=  d4= 2] ]=vd4 = p4= ( =  = *4@4=+#write_integer_table_to_header4= 2 2 2  2 2 2 2 2 2 2 2 2@ 2: 2 2,: :=  4= 2] ]=v4= 4= (  = @ = !044="setTotalWordsPerFile04=VNM 2 2 2 2  2 2  2$ = v v= 44= DB_Create4= 2  =  v v= 4`4= DB_Remove4=  2  =   = 044= DB_InitWriteHeader04= 2  =   = P4 4= DB_WriteHeaderDataP4= 20 = 0~ ~= 44=DB_EndWriteHeader4= 2  =  ~ ~=  4@4=DB_InitWriteWords4= 2  =  y y= 4 4= DB_GetWordID4= 2  =  y y= 44= DB_WriteWord4= 20 = 0} }= 44=DB_WriteWordHash4= 20 = 0} }= @44=DB_WriteWordData@4= 30 = 0} }= p44=DB_EndWriteWordsp4= 3  =  = #44=$DB_InitWriteProperties4=  3  =  | |= 4`4=DB_WriteFileNum4= 30 = 0} }= 4@4=DB_RemoveFileNum4= 3  =  = $4 4=%DB_InitWriteSortedIndex4= "3  =  =   44=!DB_WriteSortedIndex 4= '30 = 0 = #P44=$DB_EndWriteSortedIndexP4= ,3  =  = p44=DB_WritePropertyp4= 03 03 = p = "44=#DB_WritePropPositions4= 730 = 0 = (44=)!DB_Reopen_PropertiesForRead4= =3 = \ \8e4=8e4\8e4{8e48e48e48e4te48e4M8e48e48e48e4)8e4h8e48e48e4 8e4D8e4{8e48e4e4 e4e4, e48e48e48e4 = 8 8 decc$strrchr decc$strlen fuzzy_mode_valueemallocereallocefree adjustWordPositions getTheDateISO compress3 uncompress2PACKLONG PACKLONG2 UNPACKLONG2(compress_location_values(compress_location_positions(uncompress_location_values(uncompress_location_positions compress_worddata remove_worddata_longsOTS$MOVE c$stww1#|J`َ]V1.0DDswstringV1.0 4-AUG-2004 09:33Compaq C V6.5-001  $ABS$i%$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$(Jlstrstr0J getconfvalue0J isoksuffix(JPreplace0J SafeStrCopy0J sortstring0J  mergestrings0JX makelookuptable@Jh makeallstringlookuptables(Jp#icomp20J 0  parse_line0JfreeStringList0J isnumstring0Jremove_newlines0Jp remove_tags0JP@ bin2string0J strtolower0J0 str_skip_ws0J str_trim_ws8JcharDecode_C_Escape8J`char_ISO_normalize8Jstr_ISO_normalize8JPPStringListToString8JBuildTranslateChars0J@TranslateChars0J@  str_basename0J cstr_basename0JH  cstr_dirname(J!estrdup0J `"estrndup0J# estrredup0JP# comma_long(Jccomp0J SafeMemCopy  d comma_buffer0 comma_buffer =#4G~^^~ (0޴8 [@H>PQ.GGGGQJ(b@Zk0BGG4G8b$!@Zk0BG$1@G4G8b/@Zk @CG5@F8D/ ///c. B4G(bcJ@ZkD@BG" GtGHb/@Zk///'1@c @CF?GG]]} (0ݤ8@H=P`#k///G//G//#^~^ ~(08޴@GG{# >CC_=kBG 4GbD/c @Zk`@/% #.#JP0BF //c.B4GbcJ@Zk//#,#HX$D c /`BB "4GhbG /@Zk#,G#H% U$@U!@!@2F!F /DBGTG`@b0@@ZkG#,@0@q.#Hc t1HSqJtFq>.JUBUBBGCGF?@f/[fKf?G(b#@ӐBGG4Gb@ZkG///GG]] }(08ݤ@P#k/#4G~^[^~ (0޴8@H>P^X~`hp޵xGGGGGb@ZkB@4Gb0@ G G@ZkB GGG4Gb@ZkBGG4Gb@Zk B GGGTG(b@Zk* G!A BTG(b(@C AG A A+gA0@@ZkG @BGGG nATG A/@ZkBGGG hA@Zk BAG(b/@Zk G//BG4Gb@ZkA BGTG @0@(b+gA/@ZkG @BGGTGb@ZkBG4Gb@ZkG]G]} (0ݤ8@H=P]X}`hpݥx#k///#4G4G~^[^~ (0޴8G GGG b@Zk`@B4G b"G@Zk1@(BGTG#B0b @Zk//GG]]} (0ݤ8@#k//4G//#4G^8[~^ ~(08GGGG>C@b@Zk$G@B4G bC @0D/ $G@ZkB4Gb0@@ZkGHBG]e@GG@Zk.UJ>G]] }(08@#k/q.P.qJPJ Bk//#4G~^X[^~ (GGG`b@ZkBGGG4GGbb4G/@Zk=@4G"///a@P.."PJJxQJTF.WJF0 @>0@@ D@"?a@a/[aKa?G]]} (0#k//#4G^[~ ^(~08@޴HPGGCb >@ZkB G4Gb@Zk@B`@G4G0@Hb@Zk@BG4GHb@ZkBG`GG]@ZkB@G ]/@Zk B//GG4GG(b0b/@Zkf,',=@4G4Gf"fHA'HpgH0D'< ///@..#JJ{JFT/ZTK[G0@BT?0@ @>s"@r,pBG4GxbCrHr<@ZkG]G ](}08@ݤHP`#k/GG DBBa#"@! `C{Fr"c.J4G"///.FJ"@@`.JJ"TB@t,HH "@@`.JJ"@TBt0,0H?/k///GGGD0""_G/k///#CGTG^~[^~ (޴08@>H^P~X` h޵pxG GCTGb@Zk//.PJ>BG4Gb@ZkBGG4GbGTGG"/@Zk"////] G}!b# GG@ ,G0" H/c/UAA0D/ G!.. EC.J/H ///?FC BFD-!I 0A?9õUBB (F F1/`///+YB9!G% B4Gb/@Zk/ G-+.tG B(bIQ+J!!r+Hk!/!oA`"2F_"!+>G@Zk-I?//!K.Gs+HRKJk!SFK>.UJ">ݱ eDb#@///-GPBTGXbI/@///@Q@@Zk0`@ġA@pBG4Gb@Zk eDPB0@TGd@Q@Xb@ZkGCl@G]]} (ݤ08@= =H]P}X`hݥpx#k//0#~^^~ GGG/ ///CB11 B4"G#bQ2B@Zk#?B4Gb/@ZkGbG]]4G} 0#/k///k///#GB^~TG^ ~5B(0G BG>GG[bӲB@Zk//BG4Gb@Zk`B@G]@ZkG]] }(0@#k//#~^^~ (0G&GG0.`h0J ///e `#.#JTBF #J@. B4G(bJ@Zk#,c #H?#.#J@#/GG]]} (0@#k//;0.0J/7 #~^^~ (GGGG/// BTGTG(b@Zk .rH"Q J2F >`// BGGTG(b@Zk//.qH` PJF>/G]]} (0#k///-0.GGG0J' /."VJJFF/G/3/p/3K[pKrH"rGp? //.xJ4GWJ"F>.s"J0,A0H0<k/$CG4G?F@#^[~^ ~(GG0 BGb@ZkB@]GG@Zk.VJ>G]] }(0#k/0.G0J/3 #~^^~ (0GGG//$ C/CKAAC!!D //.B4GbJ@Zk//#,c #H?G]G]} (0@#k/Gk//#4G^@[~^ ~(08޴@GGHb (¤C@Zk=$G @ eD"/ $.Q2J%'JQ3B1!F/ //.0B4G"8bTJJ/@Zk.#1`@PJ >/G]] }(08ݤ@P#k/#tG"^~> ^>"(GGP.0[8bPJKF.UJJG"BF# // @Zk=2H! =C"///0.0J//"G]2GJ ](GJ0#/k///B 51B\BCk///G//G//G//TG//G&//4G//tG//0BG"="tG8b@Zk]2HB ]C///0.G0J/' #~^^~ (GGGGd.B4GbdJ@Zk.qHPJ F>D.DJ_G]G]} (0#/k///Gk//C0.0Jk///0.GGp0J) //3/`F3KY3KB.JaJs"!G3?/KKXK B6,6Hy3Hs"G?.JJUJ B.Jx3Js"F>'3/3K_/k///#4G~^[^~ (0޴8@H>P^X~`GGGG"b@Zk#GG GI@ G @/0 ///B4Gb B@ZkA G BG0 @TG(b @/ @0@0@@ZkGD@ 0AP.sPIRPJSFP>BBT@G@Zk0@ A A @/@.WJG>G]]} (0ݤ8@H=P]X}`p#k///Q.GGQJ(@////FKXKUB(yJ"G?.JJ RPBRUJwTJ"F>t.tJtJ A0@!r4HStJ"rFt>.J/k//#GG"~^GG^~GG GF/PB0B`">" bBB@ SGpBc`BЀBB@ B`0BpBPB@ BB`ЁBBB"`@ `/(V86"G0v@ZkG?GV/?FQ#_w"~ UB_G bBq#/ZBFG[BB 1#K/D?Gc@BYBq )" "1"KDFCBUB[/`..[K`Jq#G[BJW/U/,KUK#Hw4GF/C X/XK/4@///y, GGyH*`..J#JBW@9#.Jy/yK@x.y,xJ#yHSwB9#s8.8J/ Y,YH/ @.y/J#yK@@9#@.J/y,yH/`x.xJB =ld///GG]]} 0#/k///#~^*^GG{# @G]b#]G #_///#GTG^~[{GC/@ZkG ] #DGk//#GTG~^([^~ (0GGG0b/@Zk///8"`b#,@#,G@.G#HR@J%@%DsJSF@>ØB @4GbC0@@ZkHBG@GGtGPbG/@ZkE,BEHE<G]G]} (0@#k//'#4G~^[^~ GGGb@Zk8B0@4G@+b@Zk(BGGTG0b@Zk/GG]]} 0#/k///Gk//#4G^[~^ ~(GGCb >@Zk ]GB4Gb@FQBGqF0@B@Zk B@]GG@Zk.VJ>G]] }(0#k/#4G^ [~^ GG>(b@ZkGb#]] 0#///Pq SB/1 Bk///#G(;"H^~tG"0[P^X~`hGG8b b@Zk=B ,"b4G?D7 @Zk@!HGN6$Ha!@ @8DXD@* /d..dJVJ wcJc F>/c/KpK[cKc  pGc?$,.$Hs#HTJ c p#JF>.J #/Y#Kc 0G#?///C/ ZCKC?GH]P]X}`hp#/k4(GX decc$tolower4Pb# decc$tolower4T@X decc$tolower4XGt decc$strlen4-hb# decc$strlen4p@t decc$strlen4tG decc$strlen4b# decc$strlen4@ decc$strlen4G decc$tolower4b# decc$tolower4@ decc$tolower<Gdecc$strncasecmp<b#.decc$strncasecmp<@decc$strncasecmp4G decc$strlen4b# decc$strlen4@ decc$strlen4DGX decc$isspace4Lb# decc$isspace4T@X decc$isspace, Gemalloc, b#emalloc, /@emalloc4Gerealloc4b#erealloc4@erealloc, dG|efree,tb#efree, x@|efree4G( decc$strlen4 b#P decc$strlen4$@( decc$strlen, (GHema0lloc, 4b#Pemalloc, D@Hemalloc4HGd decc$strlen4\b#P decc$strlen4`@d decc$strlen4dG| decc$strlen4tb#P decc$strlen4x@| decc$strlen4'|G decc$strstr4(b#P decc$strstr14'@ decc$strstr4Gerealloc4b#Perealloc4@erealloc4GOTS$MOVE4@OTS$MOVE4GOTS$MOVE4@OTS$MOVE 4'G4 decc$strstr4((b#P2 decc$strstr4'0@4 decc$strstr4DGX decc$strlen4Pb#P decc$strlen4T@X decc$strlen4\Gerealloc4pb#Perealloc4@erealloc4 G decc$strcpy4 b#P decc$strcpy4 3@ decc$strcpy, Gefree,b#Pefree, @efree4$G\ decc$strlen4Tb# decc$strlen4X@\ decc$strlen4`Gx decc$strlen4hb# decc$strlen4t@x decc$strlen4%|G4decc$strcasecmp4&b#decc$strcasecmp4%@decc$strcasecmp4G8 decc$strlen40b# decc$strlen44@8 decc$strlen, DGtefree,Lb#efree, p@tefree, xGemalloc, b#emalloc5, @emalloc4GOTS$MOVE4@OTS$MOVE4G8 decc$strlen40b# decc$strlen44@8 decc$strlen4#8Gd swish_qsort4$Pb# swish_qsort4#`@d swish_qsort4 GL decc$strl6en4@ b# decc$strlen4H @L decc$strlen4L Gd decc$strlen4\ b# decc$strlen4` @d decc$strlen, d G emalloc, x b#emalloc,  @ emalloc,  G emalloc,  b#emalloc,  7@ emalloc4 G OTS$MOVE4 @ OTS$MOVE4 G OTS$MOVE4 @ OTS$MOVE4# G swish_qsort4$ b# swish_qsort4# @ swish_qsort,  G efree, b#efree,  @ 8efree4H G decc$strchr4 b#  decc$strchr4 @ decc$strchr,  G emalloc,  b# emalloc,  @ emalloc,  G emalloc,  b# emalloc,  @ emalloc4 G4 decc$isspace4(9b#  decc$isspace40@4 decc$isspace,!TGprogerr,"Xb# progerr,!@progerr4 GDerealloc4b# erealloc4@@Derealloc, `Gtefree,lb# efree , p@tefr:ee4xGerealloc4b# erealloc4@erealloc, DGdefree,Tb#efree, `@defree, lGefree,xb#efree, @efree, Gefree,b#e;free, efree4G4erealloc4 b#erealloc40@4erealloc, @GTemalloc, Lb#emalloc, P@Temalloc4TGhOTS$MOVE4d@hOTS$MOVE4G( decc$isdigit4 <b# decc$isdigit4$@( decc$isdigit4G decc$strchr4b# decc$strchr4@ decc$strchr4G( decc$strchr4 b# decc$strchr4$@( decc$strchr, \Gemalloc, b#Pemalloc, =@emalloc4GOTS$MOVE4@OTS$MOVE4TGh decc$isspace4\b#0 decc$isspace4d@h decc$isspace4G  decc$strlen4b# decc$strlen4@  decc$strlen4dG decc$isspace4>>pb# decc$isspace4@ decc$isspace4GH decc$strtoul4b# decc$strtoul4D@H decc$strtoul4`G| decc$strtoul4tb# decc$strtoul4x@| decc$strtoul4G decc$tolower4b# decc$tolo?wer4@ decc$tolower, `Gemalloc, b#Pemalloc, @emalloc4G decc$strlen4b#P decc$strlen4@ decc$strlen4G4erealloc4b#Perealloc40@4erealloc4@`GxOTS$MOVE4t@xOTS$MOVE4G decc$strcmp4v# decc$strcmp4@ decc$strcmp4T Gt decc$strrchr4X {# decc$strrchr4p @t decc$strrchr4 G decc$strrchr4 b#H decc$Astrrchr4 @ decc$strrchr, 0!GL!emalloc, ?@abcdefghijklmnopqrstuvqxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"6 =g_!cloy|"c " -r 23'u . 1 " ?aaaaaaeceeeeiiiidnooooo ouuuuy saaaaaaeceeeeiiiidnooooo ouuuuy yA A=1)(SWSTRINGCompaq C V6.5-001 = 4K4= lstrstr4= . . . . . . . . . . . . . . @ / = ! !=getword =  = 44= getconfvalue4= c/  c/  m/ m/ o/ t/ v/ v/ y/ wL/ w/ / , = 0. .= 4P4= replace4= / / / / / / / / / / / / /? / / / / /L = P = 44= isoksuffix4=^VU /M /  / /  / / / 0 / =  = 44= SafeStrCopy4=WON / / / / 0 0 0( = s s= 44= ccomp4= 0  =  = 4N4= sortstring4=SKJ 0 0 0 0 0 0 0 0( =  =  44= mergestrings 4= #0  #0  #0  #0  -0 /0 .0 00 10 40 60 80 90 80 ;0 =0( =  =  4XO4=makelookuptable 4=zrq D0 D0 D0 D0D D0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 =   = & 4h4='makeallstringlookuptables 4= J0 = 0 = 0 4 4= parse_line0 4=| R0 R0  PR0 R0  `0 _0 B/ / / / / / / +/ +/ +/ +/   7/  7/ L/ L/ L/ N/ L/s N/ +/  V/ Z/  Z/ i0 f0  s0 y0PZ Z=   4=  e4= g0  ='v Q4=   4= 4= 4=  =  = 44=freeStringList4=G?> 0 0$ 0 0 0 0 =  = 44= SafeMemCopy4=RJI 0 0 0  0 0R 0 0( =  = 44= isnumstring4=G?> 0 0 0 0 0 0, =  = 44=remove_newlines4=IA@ 0 0  0 0 0 0 0, =  = 4Sp4= remove_tags4=UML 0 0 0 0 0  0 0 =  = @4P4= bin2string@4=H@? 0 0 0 0 0 0 0  =  = 404= str_skip_ws4=<43 1 1 1TԘ 1 1 1  =  = 44= str_trim_ws4=PHG 1 1 1 1 1 1 1, =  =  44=!charDecode_C_Escape4= %1* 21 %1* %1% *1 21 P1 ]1 _1 _1 21U K1 =  = 44= strtolower4=D<; u1 q1 q1$ u1 u1 z1( z1  =  = `44= char_ISO_normalize`4= 1 =  = 44=str_ISO_normalizeV4=rji 1 1 1$ 1 1 1 1 1 1 1 1 =   = P4P4= StringListToStringP4= 1 1 1 1 1  1 1 1 1 1 1 1 1  1  1H =  = 4@4=WTranslateChars4=g_^ 2 2 2 2 2 2 2 2 2 2  = u u=  44=!BuildTranslateChars4= 2 2 2 !2d !2 !2 $2 (2 1l 1l 1l 1k 1l 1k} 1l 1l 1k 1l *2 32 32 32 32 32X 32 32 32 02,Z Z=  4=   e4= ,2] ]=Wv 4= 4= 4=  4= 4= 4= ,4= @4= ,x4= 4=  = @Y = 44= cstr_basename4=*"! G2 I2 I2 I2 = P = @ 44= str_basename@ 4=7/. S2 S2 S2 X2 X2  = ` =  4H4= cstr_dirname 4=aYX b2 b2 b2Z l2 p2 p2 r2 q2 v2$ =  = !44= estrdup!4=@87 2 2 2 2 2, 2  =  = `"4 4=estrndup`"4=\TS 2 2 2 2 2  2 2 2  =  = [#44= estrredup#4=7/. 2 2 2 2 2 = `| |= p#44= icomp2p#4= 2 = 0! !=thousep =  = #4P4= comma_long#4= 2 2 2\ 2 2 2 2 2 2 2 2 2 2 2  2 $Z Z=  #4=  e4= 2} }=v#4= #4= $4=   = t =   decc$isdigit decc$isspace decc$tolower decc$$ga___ctypet decc$$gl_>]__ctypeadecc$txsprintf decc$strtoul decc$strchr decc$strcpy decc$strncpy decc$strrchr decc$strstr decc$strcmp decc$strlendecc$strcasecmp decc$strncasecmpemallocereallocefree swish_qsortprogerrOTS$MOVE c$isww1 `َ]V1.0DD^pre_sortV1.0 4-AUG-2004 09:33Compaq C V6.5-001h h $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$(0iTranslationTableExceptions8JPinitModule_ResultSort8JfreeModule_ResultSort8J@configModule_ResultSort8J_CreatePropSortArray8J`sortFileProperties@J@@ initStrCmpTranslationTable@JP initStrCaseCmpTranslationTable0J sw_strcasecmp0J@ sw_strcmp8JHis_presorted_prop@ iTranslationTableExceptions =#4G^ [~^` ~(GG"(b@Zk=b#G"<@Ӱb#4G"@CG]] }(0#k///C#4GQ^ [~^ GG ^(b/@Zk B 4G(b@Zk]G]] 0#k/Q#4GTG^~^ ~(08޴@ [HPGҠGGGGP;"(bG@Zk@B'$E"4GHbtG01 @= @ G/@Zk/B4Gb"G@Zk(BGTGb"@ZkPBGXbTGx"@aZk BGTG`""(b@Zk//d0B4G8b`Dy`d G@ZkPB8DGXbTGH"@Zk0BG4G8b@ZkPB8DGXbTG"/@Zk,HDD //4G /PBGTGXb"@ZkGd,GdHL`///(,$.(H$JA%@Q%Ba`Bq!.J @TB4.@ JD3(/(KY%Cd/dKyF@`@f9.J CPB0$.@ $J .JA%@.JTBCb!. @@J VB6d/dK /PBGTGXb"@ZkG]] }(08ݤ@HP`#k// [0#tG10~^([G8{A @@ B^@! #k//GGGG4GG/k/// G//]G }8"@Zk /GG/k///4GGk/`#4G ^~(^0~8@H޴P[X`>h^p~x޵GРGGP@GcGb"~@ZkBG4Gb@Zk)BGP@4Gb/ //@Zk@BC= @Zk G G G/ ///ɢ 0@ABGGG0BD!d8b@Zk A)+@ aAL G/_PBGGGGXb`b@Zk///G 4GGG"b#O_ӠC A0A Ac E@_ BG4G(b@Zk} GG`//// B4G(b@/@Zk 0A@ A B 4Gd(b@ZkGG ](]0}8@HݤPX`=h]p}xݥ#k//P#TG(^[~0^8~@HP޴X`h>p^x~޵GGGb C1@Zk 0BTG8b$@Zk//P@G G  @BGTGHb @G@Zk BGGGtGb"@Zk.xb#_W.TGBb(b$D/O @ .x"@Zk`B 4Ghb/@ZkGG]"b#G_ӠB G eG4GbG Gb@ZkG G////B GTGb@Zk#PB G4GXb,@@Zk0@ Ak! @/B3OAGGGb@Zk0BG4G8b@Zk0BG4G8b/@Zk}0`@} Ǡ0A A A0B$TG8b@Zk} GGC`//͡0B4G8bA/@Zk 0@AA EA0B 4G8b@Zk""TGݠ Bb@ƠP"/@Zk B 8`E""`bTG("@Zk //B=tGB"bf @ZkG(]0]8}@HPݤX`h=p]x}ݥ#k//#~^^~ (0GGGGG///0BG0@4G8b @Zk H" D_F@/d4G 0B8bF0JEcB@Zk$ H @FG]]} (0@#k//GGGP"GF///"Ba""" rB"@! F"`"c""a`" "a `"" " "a`""" "g@aq"F'//բ"0JF6JWB@uF U0@JFSpB2AJBSDD `բ0J6J@@B5?F/?k//p..pJJSrBUBsuFE`//.F1" FJ"G.q/JqK@@TBJD/."1"/7`p/.pKJXCA2@!pKG/ "1"/'0/.0KJ@@SrBsD0K/"1"// h=q/KqKA2@VB!֢6D?..JJPBQ2B1 Bk///Gk//p..pJJSrBUBsuFE`//.F1" FJ"G.q/JqK@@TBJD/."1"/7`p/.pKJXCA2@!pKG/ "1"/'0/.0KJ@@SrBsD0K/"1"//q/KqKA2@VB!֢6D?..JJPBQ2B1 Bk///Gk,i G8emalloc,0b#Pemalloc,4@8emalloc4-G freeswline4.b# freeswline4-@ freeswline,Gefree,b#efree,@efree4#@G|decc$strcasecmp4$lb#@decc$jstrcasecmp4#x@|decc$strcasecmp4'|GgrabCmdOptions4(b#@grabCmdOptions4'@grabCmdOptions4+G strtolower4,b#@ strtolower4+@ strtolower<)GgetPropNameByName<*b#@getPropNameByName<)k@getPropNameByName,Gprogerr,b#@progerr,@progerr4# G8decc$strcasecmp4$0b#@decc$strcasecmp4#4@8decc$strcasecmp4%HGt decc$strlen4&Pb#@ decc$strlen4%p@t decc$strlen,xlGprogerr,b#@progerr,@progerr4%G decc$strlen4&b#@ decc$strlen4%@ decc$strlen,Gprogerr,b#@progerr,@progerr,Gprogerr,b#@progerr,m@progerr,DG\progerr,Pb#@progerr,X@\progerr<GCompare_Properties<{#Compare_Properties<Compare_Properties4PGd decc$strcmp4X}#H decc$strcmp4`@d decc$strcmp,nGemalloc,b#emalloc,@emalloc,G4emalloc,,b#emalloc,0@4emalloc,8Gdemalloc,Hb#emalloc,`@demalloc4 dGxOTS$ZERO4 t@xOTS$ZEROD oGReadSingleDocPropertiesFromDiskD b#ReadSingleDocPropertiesFromDiskD @ReadSingleDocPropertiesFromDisk4 G4 swish_qsort4(b# swish_qsort4 0@4 swish_qsort,Gefree,b#efree,@efree,Gpefree ,b#efree,@efree,Gefree,b#efree,@efree<lGDB_InitWriteSortedIndex<b#DB_InitWriteSortedIndex<@DB_InitWriteSortedIndex<G DB_EndWriteSortedIndex<qb#DB_EndWriteSortedIndex< @ DB_EndWriteSortedIndex4$ GD getPropNameByID40 b#getPropNameByID4@ @D getPropNameByID,H Gl progerr,` b#progerr,h @l progerr4 G decc$txprintf4 b# decc$txprintf4 r@ decc$txprintf4! G decc$fflush4" b# decc$fflush4! @ decc$fflush, G emalloc, b#emalloc, @ emalloc40 GH compress34@ b# compress34D @H compress34L Gsl freeProperty4 X b# freeProperty4h @l freeProperty< G DB_WriteSortedIndex< b#DB_WriteSortedIndex< @ DB_WriteSortedIndex, G efree, b#efree, @ efree, G efree, tb#efree, @ efree< G DB_EndWriteSortedIndex< b#DB_EndWriteSortedIndex< @ DB_EndWriteSortedIndex,4 GT efree,< b#efree,P @T efree,d Gx efree,p b#efree,t @x eufree4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf4 G v decc$tolower4 b# decc$tolower4 @ decc$tolower4 G decc$tolower4 b# decc$tolower4 @ decc$tolower =0#%d properties sorted. %-40s (=0#One property sorted. %-40s P=0#No properties sorted. %-40s xw=(Sorting property: %-40.40s =8)Failed to lookup propIDX %d (metaID %d)=8-%s: requires 3 parameters (Eg: [=|>] a )=XI%s: parameter 1 must be = or >%s: parameter 2 must be one char lengthH=8)%s: parameter 1 must be one char lengthx=)!%s: parameter is not a property =0 P ;=x@$< ;0 decc$tolower=0@ ;=0 ;=0$ emalloc=0@;=0;=0";= 0 ;; Compare_Properties=0 ";=P efree0 ReadSingleDyocPropertiesFromDisk8OTS$ZERO0 swish_qsort;= 0";= decc$strcmp compress3 DB_WriteSortedIndexprogerr(DB_InitWriteSortedIndex=  decc$txprintf=0( `;=T ;7decc$ga_stdout DB_EndWriteSortedIndex zgetPropNameByID freeProperty! decc$fflush=0";=`@ #decc$strcasecmp% decc$strlen'grabCmdOptions=0!PreSortedIndexResultSortOrder )getPropNameByName+ strtolower=0 ;=00 - freeswline$ $= @ @6{=Y Y=0"AOUaousaAeEiIoOuUnNaAaAcCeEeEiIiIoOuU6 A A=1)(PRE_SORTCompaq C V6.5-001 = "4P4=#in>|itModule_ResultSort4=PHG 80 80 80 =0 ?0 C0( =  = "44=#freeModule_ResultSort4=KCB T0 R0 T0 R0 R0 R0 V0 =  = $4@4=%configModule_ResultSort4=2* p0 m0} m0 m0 m0 t0 |0 ~0 ~0 0 0  0 0 0 0 0 0 0 0 0 0 0! 0 08 =  = 44= compFileProps4=NFE 0 0 0 0  0 0 0 0  = `~ = 4H4=is_presorted_prop4=>65 0 0  0 0 0  =  =  44=!CreatePropSortArray4=  1 1 1 1 1 1 1 1 1 1  1 <1 91  91  91  91 T1 Q1  Q1  a1 d1 c1 k1L =  = `44= sortFileProperties`4=tl w1 w1 w1  w1 1 w1 1  1, 1$ 1 1 1  1  1  1 1  1 1 1 1 1  1gA 1 1 1 1 1 1 1 1 1T =  = +P 44=,$initStrCaseCmpTranslationTableP 4=\TS =2 D2 D2 D2 D2 H2 I2 I2 I2 H2, =  = '@ 4@4=( initStrCmpTranslationTable@ 4= V2 V2 V2h V2 V2 V2 V2 Z2 [2 [2 [2 Z2 [2 [2 Z2 Z2 [2 [2 Z2  =  = 44= sw_strcasecmp4=g_^ d2 e2 d2 d2 d2 d2 d2 d2 d2 d2 d2 f2  =  = @44= sw_strcmp@4=g_^ q2 r2 q2 q2 q2 q2 q2 q2 q2 q2 q2 s2 = x = h hdecc$ga_stdout decc$fflush decc$txprintf decc$strcmp decc$strlendecc$strcasecmp decc$tolower strtoloweremallocefree freeswline freeProperty Compare_Properties(ReadSingleDocPropertiesFromDisk getPropNameByNamegetPropNameByID compress3progerr DB_InitWriteSortedIndex DB_WriteSortedIndex DB_EndWriteSortedIndexgrabCmdOptions swish_qsortOTS$ZERO Pc$gaww15 aَ]V1.0BBparserV1.0 4-AUG-2004 09:33Compaq C V6.5-001` ` $ABS$iL4$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J parse_XML0JH parse_HTML0J(` parse_TXT =#GGGH^~G"P^XGG{#z@G"G"G8b#@ӈ"b#/@GH]P]X`#k/#GGGH^~G"P^XGGx{#Z@G"G"Gb#w@8B4G0""TG @b@ZkB0""TGb/@ZkB ""TGb/@Zk"hb#O@GH]P]X`#k/#GGG^~^~GGGGG"{#B@$0B/$/"="(b#@G"b#4@/D PB/$G="_"PcXb#@G"b#4G@"pb#@PG]]}#k//#^~_">"^ ~(08޴@GGG{#X\GPd@G/G/#PBG]"XbGG @Zk @BG]"GHb/@Zk#G ///G_"="b#Pdn@//#0BGGGG="8b @Zk BGG="G(b@Zk#0B=" GG4GG8b@ZkpBG4Gxb@Zk/ BG="G(b4GG///@ZkBG4Gb@Zk0`B4GhbHàG/@ZkGGb#GN@(GtGb#@ӰGtGb#/z@Gb#@Ӱ//HG]] }(08ݤ@P#/k///#G~^^GGG "' $B"C @ BG@4@ @ B//GB0 @@:F@G B SBF@ " qB [4GGbG({@Zk" @"G]] #/k///GG//s"R" [(;8PD@[d8<0;HPP1 \0{Y BXp0[y B TPk/(1#TG~^P[^~! (0޴8@GGGG4G@ZkT#GX4G\CGS@BLG`c0"HbPC@Zk4G pBxb G@@Zk B4G"4G0G$(b/@Zk,0/(#0 B(# BG8cD"4G(b/@Zk@0%/ <0B<`GGGGhb]]} GGGG(0ݤ8@P#/k///#4G~^^~ (GGG[b/@ZkB4Gb//@ZkB4Gb@Zk Ghb#e @/4 //Ghb#] @/,B4Gb//@Zk@B4Gb@ZkcG]]} (0#k/#4G(0Т^p[~^~޴ (0>8GGGGGGxb@Zk? G"G@GGb#/\C1"R@Ӂ//BGTG@"b@ZkB@"4Gb@ZkCB@"8""bG@Zk8=@G Dj\0 /^% /B@""b@Zk/%// G /BH""b@ZkŢF G0BGTG(""8bD8/@ZkB0""GTGb/@Zk X")#8<D#BG4Gb@ZkGG(b#@GGG}"G"0b#K@pBG4Gxb@ZkGGG@b#e@GGGb#D@GG(b#@///G4G@="0b#@ӠBG@"ibX""/@Zk XGG b"b#D7@\//Bb@"""@ZkBXGGGb"b#$1  "@//*X#pBGG4Gxb! @ZkG@b#GG@G4G(b#`@GGG }"G"0b#@pBG4Gxb@ZkGG@b#G@GGGb#@XG`b"b#GG@/Bb@"h""@Zk GGG b"b#@pBG4Gxb@ZkG@="@]"0}"("0b#G@ӄ8G@"pBxb4G@D/vXàƠ/iG@ZkpBGX@"4Gxb@Zk? "G@}"@b#G\C1"R@GRBTG"@="b%!@Zk G@ .r H!Q J2F >e?`//Gb#/8)//@pB. 4Gxb@Zk@? "GP@tG@]"b#@1"U@B4Gb"0@@ZkB)GTGb/@ZkG="@]"0}"G("0b#O@Ӏ =G="b#G/@ )!/GG@="X#!b#G @G]]}ݤ (0=8@#/k///p4GD`#^[~^~GGGGGb@Zk? 8"GG@Gb#\C1"R@ (BGTG"0b@ZkxB"4Gb@ZkB" ""b @Zk// G="b#GJ@="Gb#]@G]]}#/k///p# ^~(^0~Ds8@H޴PX`GGGG>`(0 <P@cdCGG{#`b#'@TG Bb @@'" BB 0@/`F#@ZkG%GG0B8b10B=e="pB}"@Zk=G/ %!B%.@"B"#XGP1"tGb/@Zk%4GTG B(b0@ @tH`.S`JtF`>@/@Zk!@ G0 @=?Ð"BtGb1"@Zk@Gb#D#C/@ӔG&㠠àG"//'"/ %,A0H'HA1@!!D/' //E. B4Ge"(bRSJGJ/@Zk#0@ @?G#C//pb#Z@G ](]0}8@HݤPX`p#k//G#Gpb#G@G4Gb#{@Ӕ@GE@`'1@`尤2A4G{#;"4à#TG^~^ ~(08޴@[HP>XGXGGGGGCbt//@ZkL#0 @L#pǢ'/pBGxb6"@Zk///֢G4Gb#8@GG "b#G4G]@4"GG}4Gb#V@Ӏ0@//V"_ BTGTG(b/@ZkD G`B* |tGhb("XD/ @GG/@\cS/@Zk0BTG4GGG8b@Zk G/DGTGb# @G "GG4Gb#@Ӏ0@ GGb#@GG "b#GG @Ӏ0@21|砠GBbtGxD"\àF@Zk$//P"G4Gb#@)G "E X("@ G/`B0@4G" @hb@Zk/?b`B@"GhbG""s"@ZkBTGTGb/@Zk"GGGXb#tGD1"/@ /GGb#@GG4"b#}G@#pBG#!xb ///@Zk G4Gb#x@ 0@ G]] }(08ݤ@HP=X`#/k///#^~^ ~(08^GGGGG 0"{#@#!1 @#G4#"b#G@ BGTG(b/X#x/@Zk///L#0 @L#G4Gxb#4@#BGTGb  /@Zk/// Gxb#4G8D @ $1@ G]] }(08@#/k///#? ^4GAF~^4G ~(08޴@GGGGGp[GC;">xb@ZkGb#TG@l4G@l\0#C8<DpBGxb@""tG@Zk//? B(bB"Xâ֢6@Zk ? 4G#8<D島/\C4G0R/ @c8<D/\0(#91 C(#Gb#tG@ӈ/ @ # B # QFB QLch0`BBLchðkpBGxb""@Zk/// GGb#@pL@0@LpW$.b" ¦$Js-F֢ `.TJJTBF //.0B4G#8bWJJ/@Zk Gb#Gf@x@x1//pBGxbH""@ZkpB//GX""xb@ZkpB G""xb@ZkpBG`""xb@ZkGb#GB@|à0@|ð /#G ///|C21@B|CpBGxb4G""@ZkpBGP""xb@ZkB Gb/@ZkPH""G4Gb#@G]] }(08ݤ@P#k/&#~^^~ (GGGG///BGTG$"b@Zk//GG]]} (0#/k///Gk// //#4G^[~^~ ޴(08>@GGGG^G =b@ZkXàBG4Gb|&|=G@Zk? 0"GG@Gb#\C1"R/@b// BGTG "(b@ZkG  @ .r H Q J2F >tL`!/Gb#/E(_B<4Gb@Zk@? 0GP@tGb#@`"(@+ B(GTG(b@Zk(pB4G "xb),)H @ZkG4Gb#e@ ="G ]"}""Gb#_BG4Gb/@ZkGGb#G _G ="Gb#_(!?|G]]} ݤ(08=@P#k///#TG^~^ ~(0GGGG>@0@ @'!  @0@@ BaG(b0@@Zk#B]BG@ZkâBB/XK?G]] }(0@#k///#G^~ ^(~08@޴HPGG G#XP]@G% (B/P/// CDBZr/[rKgKRZBRAFB@ #8B4G@b$@.PJJ@Zk///4#(¤/" /// #C2Bq.SqJgJQ4B1!F //â4G8B@bB.WJJ@Zk#!1 @#?# d"/x`B."VJJBW/ZWKW?,H (¤!///'fE"/ %.Q2J'JQ3B1!F/ //.8B4G"@bUJJ/@Zk%, %H?%.%JHBGL"GPb" (c `GPC }G@ZkHà@H\#`xBCcTG%"b@ZkhBGGpb`Cc#"@Zk=XB @à@.q&HPJF>cB1@@Zkâ$@//G] ](}08@ݤHP`#/k///#G4G^~ ^(~08GG#GXP]@0BG8b @ZkPBGG4GXb@Zk,BG@""bTGHF///@ZkC@0B " D4G8b@Zk4GG= BGh""TG(b@Zk/#0 @#*/// BGTG`""(b@Zk# !1 @# GL"`BhbFGh0/ LC0@BLCGPCG@ZkHL#@0 @HL#G] ](}08@#k/#> /@h^~G ~"[?""G^GGb@Zk BTG="(b@ZkG]]@#/k///(#> /@h^~ "4G[^GGb/@ZkHB }""]?"GPb@Zk8B="TG@b/@ZkG]]@#k/#GG^~" ^(~08@GGGG#]M@Xc G}/=4 /BGb @Zk/7!D"=G](& R @# \40BGTG8b@ZkGG=BL"G4GGPCD }"b@ZkH# 4G @HpG[@ZkGG] ](}08@P#k/04G4G/ d0h04 Dl0GT`G;Fp0tpD2DD!Fx0|0DrGD2DD;FDFk//C#C^~ ^(~08@޴HGGGGGGD~ >/ P @/B4Gb"0@@Zk @#b>"B"ps"0D/eݦB" "X"FbGG@ZkBG4Gb@ZkB@4Gb@ZkG %0 B % ]F0BBG "TGb@Zk=G@BHb"0@#C 2B _BG/@ZkBTG b@Q@@Zk  #0@A@//#TGPBXb G"@Zk cCe@ðG] ](}08@ݤHP#k///#GG~^^~ GGGGc [(b/` #AaB! "@Zk//G /G4Gb#_Gb# @4GG]]} 0#k/0#G~^^~ (0޴8@G= 011 B0G GA!B3/dG` 01B /C:1@CC%"D  G//0B4G8bP"0@@Zk @#0B@""XB""b"1DF $"`"G8b /=@ZkpBG4Gxb@ZkG]]} (0ݤ8@P#k// 0GG/ //p[@ {@0 @ 1@"_k//X#^~^~(޴ "(0>8^@GGGG_=GGG?D=////B4Gb"0@@Zk? 8B"""@TG@b@Zk @Gpx⤡ @ //BTG("="bG e@/@Zk///' "/ ),A0H'HA1@!!D/ //I.B4Gi"bRSJGJ/@Zk0@)! @? @ @ G// e@ 0 Aj.jJUaBSF@/"/ .VJJVB֢F/ //*/bJ#Y:KB'K4G/@Zk0@J! @? e@j" J.RSJGJRTBRPF@0@ @_//.XB4G"`bUJJ/@Zk0@ @_//*,BJ!H"bTG0@A*H'H@ZkB"4Gb@ZkH A'e@@!  @.PJJA1@!!D /e@B4Gbr.R"SrJgJ@Zk/// B4G"b@Zk A @ @_LøB4Gb "4G@Zk @/G?B4G "b//@ZkG]]}ݤ (0=8]@P#k<#GgetPropNameByName<$b#HgetPropNameByName<#@getPropNameByName<SGgetMetaNameByName<Tb#HgetMetaNameByName<S@getMetaNameByName<SG4getMetaNameByName<T(b#HgetMetaNameByName<S0@4getMetaNameByNameDGhtmlCreatePushParserCtxtDb#htmlCreatePushParserCtxtD@htmlCreatePushParserCtxt< GDxmlCreatePushParserCtxt<8b#xmlCreatePushParserCtxt<@@DxmlCreatePushParserCtxt4GhtmlParseChunk4b#htmlParseChunk4@htmlParseChunk4G xmlParseChunk4b# xmlParseChunk4@ xmlParseChunk4GhtmlParseChunk4b#htmlParseChunk4@htmlParseChunk<GhtmlFreeParserCtxt<b#htmlFreeParserCtxt<@htmlFreeParserCtxt4$GT xmlParseChunk44b# xmlParseChunk4P@T xmlParseChunk<TGhxmlFreeParserCtxt< `b#xmlFreeParserCtxt<d@hxmlFreeParserCtxt4lG decc$strlen4tb# decc$strlen4@ decc$strlen4G decc$fread4{# decc$fread4@ decc$fread4%GOTS$ZERO4%@OTS$ZERO<# GHgetPropNameByName<$8b#@getPropNameByName<#D@HgetPropNameByName4)XG| strtolower4*\b#@ strtolower4)x@| strtolower,!|Gemalloc,"b#@emalloc,!@emalloc,!Gemalloc ,"b#@emalloc,!@emalloc<'GTaddCommonProperties<(b#@addCommonProperties<'PTaddCommonProperties,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree, G4 efree, b#efree,0 @4 efree,8 GL efree,@ b#efree,H @L efree4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4M0 GH decc$strcpy4N@ b# decc$strcpy4MD @H decc$strcpy4)H G\ strtolower4*T b# strtolower4)X @\ strtolower4Cd G decc$strcmp4Dt b# decc$strcmp4C @ decc$strcmp4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp430 GT decc$strcasecmp44@ b#decc$strcasecmp43P @T decc$strcasecmp,9T Gt lstrstr,:h b#lstrstr,9p @t lstrstr4) G strtolower4* b# strtolower4) @ strtolower4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4CT Gt decc$strcmp4Dd b# decc$strcmp4Cp @t  decc$strcmp4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4` Gt decc$strlen4l b# decc$strlen4p @t decc$strlen4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp,Y Gestrdup,Z b#estrdup,Y@estrdup48Gl decc$strlen4<b# decc$strlen4h@l decc$strlen4lG decc$strlen4b# decc$strlen4@ decc$strlen4MG decc$strcpy4Nb# decc$strcpy4M@ decc$strcpy44GL decc$strlen4Db# decc$strlen4H@L decc$strlen4)G strtolower 4*b# strtolower4)@ strtolower4MG decc$strcpy4Nb# decc$strcpy4M@ decc$strcpy4G decc$strlen4b#8 decc$strlen4@ decc$strlen4MG decc$strcpy4Nb#8 decc$strcpy4M@ decc$strcpy4)G strtolower4*b#8 strtolower4)@ strtolower4C G8 decc$strcmp4D,b#8 decc$strcmp4C4@8 decc$strcmp48Gterealloc4<b#erealloc4p@terealloc4AG UTF8Toisolat14Bb# UTF8Toisolat14A@ UTF8Toisolat1<-G xmlParserWarning<.b#xmlParserWarning<-@ xmlParserWarning4?GT xmlUTF8Strpos4@ b# xmlUTF8Strpos4?P@T xmlUTF8Strpos<-tGxmlParserWarning<.b#xmlParserWarning<-@xmlParserWarning4$GD decc$isspace40b# decc$isspace4@@D decc$isspace<E8GisDontBumpMetaName<Flb#isDontBumpMetaName<E@isDontBumpMetaName4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp<S8GTgetMetaNameByName<THb#getMetaNameByName<SP@TgetMetaNameByName4`G decc$txprintf4pb# decc$txprintf4@ decc$txprintf4UG addMetaEntry4Vb# addMetaEntry4U@ addMetaEntry,Q`Gprogerr,Rdb#progerr,Q@progerr4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf<#G4getPropNameByName<$(b#getPropNameByName<#0@4getPropNameByName4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp<EGisDontBumpMetaName<Fb#PisDontBumpMetaName<E@isDontBumpMetaName43Gdecc$strcasecmp44b#Pdecc$strcasecmp43@decc$strcasecmp4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4C0GH decc$strcmp4D8b# decc$strcmp 4CD@H decc$strcmp<ITGxmatch_regex_list<JXb#match_regex_list<It@xmatch_regex_list4CPGd decc$strcmp4DXb# decc$strcmp4C`@d decc$strcmp4KG decc$isdigit4Lb# decc$isdigit4K@ decc$isdigit4C@GT decc$strcmp4DHb# decc$strcmp4CP@T decc$strcmp4CTGt decc$strcmp4Dlb# decc$strcmp4Cp@t decc$strcmp4CtG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4CG, decc$strcmp4D$b# decc$strcmp4C(@, decc$strcmp4G,GD htmlTagLookup4H8b# htmlTagLookup4G@@D htmlTagLookup43Gdecc$strcasecmp44b# decc$strcasecmp43@decc$strcasecmp4lG decc$strlen4b#@ decc$strlen4@ decc$strlen4G decc$strlen4b#@ decc$strlen4@ decc$strlen4M G8 decc$strcpy4N0 b#@ decc$strcpy4M4 @8 decc$strcpy4 G decc$strlen4 b#@ decc$strlen4 @ decc$strlen4M G decc$strcpy4N b#@ decc$strcpy4M @ decc$st>rcpy4) G! strtolower4*!b#@ strtolower4)!@! strtolower4L!Gd! decc$strlen4X!b#@ decc$strlen4`!@d! decc$strlen48"GT"erealloc4@"b#Perealloc4P"@T"erealloc4 `"Gt"OTS$MOVE4 p"@t"OTS$MOVE4t#G# decc$isspace4|#b# decc$isspace4#@# decc$isspace4 $G($ decc$isspace4$b# decc$isspace4$$@($ decc$isspace4$G% decc$isspace4%b# decc$isspace4%@% decc$isspace40%Gl% indexstring4D%b# indexstring4h%@l% indexstring< %G%addDocProperties<%b#addDocProperties< %@%addDocProperties4 %G%addDocProperty4 %b#addDocProperty 4 %@%addDocProperty4 %G&OTS$MOVE4 &@&OTS$MOVE45&G& str_skip_ws46&b# str_skip_ws45&@& str_skip_ws47&G& str_trim_ws48&b# str_trim_ws47&@& str_trim_ws,9&G'lstrstr,:&b#lstrstr,9'@'lstrstr45'G8' str_skip_ws46,'b# str_skip_ws454'@8' str_skip_ws43D'G\'decc$strcasecmp44T'b#decc$strcasecmp43X'@\'decc$strcasecmp43'G'decc$strcasecmp44'b#decc$strcasecmp43'@'decc$strcasecmp4'G( indexstring4'b# indexstring4(@( indexstring</d(G(decc$txvsnprintf<0(b#decc$txvsnprintf</(@(decc$txvsnprintf41(G(xmlParserError42(b#xmlParserError41(@(xmlParserError4(G) decc$txprintf4)b#( decc$txprintf4)@) decc$txprintf</)G4)decc$txvsnprintf<0,)b#(decc$txvsnprintf</0)@4)decc$txvsnprintf<-8)GT)xmlParserWarning<.D)b#(xmlParserWarning<-P)@T)xmlParserWarning4C)G) decc$strcmp4D)b#` decc$strcmp4C)@) decc$strcmp4WD*GX* xmlBuildURI4XP*b#` xmlBuildURI4WT*@X* xmlBuildURI4h*G* indexstring4*b#` indexstring4*@* indexstring4+G+ decc$txprintf4+b#p decc$txprintf4+@+ decc$txprintf40,GT, decc$txprintf4D,b#p decc$txprintf4P,@T, decc$txprintf4T,Gh, decc$strlen4`,b#p decc$strlen4d,@h, decc$strlen,!h,G|,emalloc,"t,b#pemalloc,!x,@|,emalloc4M,G, decc$strcpy4N,b#p decc$strcpy4M,@, decc$strcpy4O,G-progwarn4P,b#pprogwarn4O-@-progwarn4-G8-erealloc4$-b#perealloc44-@8-erealloc,Ql-G-progerr,Rp-b#pprogerr,Q-@-progerr4C.G(. decc$strcmp4D.b#  decc$strcmp4C$.@(. decc$strcmp40/GH/ decc$txprintf48/b# decc$txprintf4D/@H/ decc$txprintft t4\/G/ decc$txprintf4/b# decc$txprintf4/@/ decc$txprintf,/G/efree,/b#efree,/@/efree40G0 decc$strlen40b#x decc$strlen40@0 decc$strlen4;0G0 decc$strcat4<0b#x decc$strcat4;0@0 decc$strcat41G41 decc$txprintf4 1b#x decc$txprintf401@41 decc$txprintf41G1 decc$isspace41b#x decc$isspace41@1 decc$isspace442b#x decc$isspace4@2GT2 decc$isspace4P2@T2 decc$isspace4=2G2 decc$isprint4>2b#x decc$isprint4=2@2 decc$isprint42G3 decc$txprintf43b#x decc$txprintf43@3 decc$txprintf43G,3 decc$strlen4$3b#x decc$strlen4(3@,3 decc$strlen4t3G3 decc$isspace4|3b#x decc$isspace43@3 decc$isspace43G3 decc$strlen43b#x decc$strlen43@3 decc$strlen43G3 decc$txprintf43b#x decc$txprintf43@3 decc$txprintf43G4 decc$txprintf44b#x decc$txprintf44@4 decc$txprintf* *= swishdescription=@3Error '%d' converting internal UTF-8 to Latin-1. P=h\Failed to convert internal UTF-8 to Latin-1. Replacing non ISO-8859-1 char with char '%c' =8-Warning: Tag found in %s is too long: '%s' =@5Tried to append tag %s to stack, but stack is empty=`Sswish parser adding more stack space for tag %s. from %d to %d<%s> (%s [%s]%s) p= no meta name defined=8,Found Swish-e reserved property name '%s' =0#(undefined meta name - no action)=~Found meta name '%s' in file '%s', not listed as a MetaNames in config**Adding automatic MetaName '%s' found in file '%s' `=XM (void *)parse_data, Attribute '%s' on tag '%s' too long to build metaname =.&ClassAttribute on tag '%s' too long  =0".;=P4 7 DEBUG_MASK0 decc$txprintf= propertyP= X=meta`= (%s)%s pefree== end ignore=0 `;=0$ =0*;=0 ";=`0 7decc$$gl___ctypea7decc$$ga___ctypet decc$isspace indexstring8OTS$MOVE0 addDocProperty addDocProperties=0 !;=@$ erealloc=0"0;=   decc$fread=0";=P4|  xmlParseChunkhtmlParseChunk(xmlCreatePushParserCtxt(htmlCreatePushParserCtxt decc$strlen htmlFreeParserCtxt xmlFreeParserCtxt=0 ;=P< !emalloc; #getPropNameByName8OTS$ZERO 'addCommonProperties) strtolower=0 ;;;;8;(;;@;=0H";=`, =0 (;= @4 8888 P8 OTS$HOME_ARGS` -xmlParserWarning /decc$txvsnprintf=0 @(;=@@ 1xmlParserError=0 p&;=@( 3decc$strcasecmp5 str_skip_ws=SwishCommand7 str_trim_ws=index= noindex09lstrstr=0;`= h=0/;=0 00;= PD =%s; decc$strcat=%c= decc$isprint=0 ;=p8 ? xmlUTF8StrposA UTF8Toisolat1=0"-;=0$ C decc$strcmp=0 0;=@(< EisDontBumpMetaName=strongG htmlTagLookup=br= FileRules title=head=body=0";=P8| Imatch_regex_listK decc$isdigit=title=em =img(=b0=i8=0 p;=0 `M decc$strcpy=0 p+;=0!P8| *Start Ignore*OprogwarnQprogerr=0 ;=`< SgetMetaNameByNameU addMetaEntry= <%s%s> %s  =0";=0( =0 `;=P< =0"p);=P0< 7xmlFreeW xmlBuildURI=0  ; = @L href= ROBOTSNOINDEX=name= content=a=src=baseYestrdup=alt(=0"`;=, =0H";=(`, swishdefaultx= swishtitle@ @6=? ?=/'&PARSERCompaq C V6.5-001 = 44= parse_XML4=% o o =  = 4H4= parse_HTML4=F>= *o *o 4o 4o 5o 6o =  = `4(4= parse_TXT`4=MED Fo Fo Fo So So Wo ( =  ! != 44= parse_chunks4= oo oo  oo  qo o o o o o  o o0  o o8 =  = 044=read_next_chunk04=QIH o o o o  o( =  =  44=init_sax_handler 4=^VU p p p p p p p p = F F= 4@4=init_parse_data4= $p "p "p "p "p "p ,p "p  .p 0p /p -p 4p 7pM  Ep Ep Np Mp Tp Tp Tp =  = `44=free_parse_data`4=]UT \p \p _p bp ep np qp$ =   =  44= start_hndl 4=2* p  p p p  p  p  p  p p* p p& p# p%> s s s s  s sm Ou s p p pA p? t t u p[ pY .s .s 2s 2s 9s :s ;s ?s As Fs Fs Ns Us ?s p p pD: :=  44= p ] ]=v44= d4= : :=   4= p] ]=v 4=  4= : :=  | 4= p: :=   4= s = } }=v| 4=  4=  4=  =  = p484=end_hndlp4=aYX p p p  p p p q0 = 0 = 44= char_hndl4=<4 )q #q #q 6qL q  q  q q q q q q q q q q q q >q >q Gq Jq Lqt Lq*8 Oq Rq Sq: :=  $4= @G cTGBTGb@#c$E0`@GQB rB/@e/@ZkGG/`//DSB&@/0BR"Ss"0B"X#x0BS`{0B; 3`â"0B 60B"  Y0B_0 B1  ? HEBF/// B#TGP"(b@Zk@B4G4GtHb@Zk Hd3` BTG#(b"@ZkB tGt4Gb@Zk Hd"/// B#TGp"(b@Zk`B4GtGthb@ZkU@d`0BTG#8b"@Zk`0BTG#8b"@Zk HG]]} (0ݤ8@#k///#^~ ^(~08@޴HGGGGG ^//BGTGb @Zk/0@@/?//%H]b#"BG_///0BG" BG(bGŰ# chR"@Zk HG] ](}08@ݤHP#k///#4G^~ ^(~0GGG> [P(b8"@ZkGb#=@// b#3@]G](} AH ]0@#k/#4G^~ ^(~0GGG>@[pHb"@ZkGb#=r@//$ b# @]G](} AH ]0@#k/#4GG~^^~ GGG/ ///0@B0@B 0@B0@B/0@B/" AB([ BQ_BTG0{@ZkGG/$`G//0Bq"R"r1 "0BҲ1# 0B1 0BQ#R1 0B1 21 q 0Br1/?PBG]]} 0#k// GGGG // ]G } @Zk GG/k///GGk/#TG^([~^ ~(0GGGG@"0b@Zk׀@"W\@tCk///C(G"PF]0b8"] }GTG(0@#/k///(BCTG"0b@Zk//G]] }(0@#/k///(BC X""DTG0b8"@Zk//C# /(BTG0bP"c @Zk#/?(B4GH"0b@Zk/B4Gb@Zk///(GG]0bTG] }(0X"@#k, G$progerr, b#progerr,  @$progerr,(GDemalloc,4b#emalloc,@@Demalloc,  G$progerr, b#pprogerr,  @$progerr, Gprogerr , b#pprogerr, @progerr,Gemalloc,b#pemalloc,@emalloc, Gprogerr, b#0progerr, @progerr4G decc$strcmp4b#0 decc$strcmp4@ decc$strcmp4PGt set_progerr4Xb#0 set_progerr4p@t set_progerr4XGerealloc4`b#erealloc4@erealloc4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4 G fuzzy_string4 b# fuzzy_string4 @ fuzzy_string4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp4>Gstemmer_applied4b#stemmer_applied4@stemmer_applied4 G8decc$strcasecmp40b#decc$strcasecmp44@8decc$strcasecmp< 8GTfuzzy_mode_value<Lb#fuzzy_mode_value< P@Tfuzzy_mode_value, dG|progerr, pb#progerr, x@|progerr, Gprogerr, b#progerr, @progerr4 G<decc$strcasecmp40b#decc$strcasecmp48@<decc$strcasecmp4G set_progerr4b# set_progerr4@ set_progerr, , GD progerr, 8 b#progerr, @ @D progerr,  G progerr,  b#progerr,  @ progerr4 G erealloc4 {#erealloc4 @ erealloc4 G  decc$strcmp4 }# decc$strcmp4 @ decc$strcmp4< Gt decc$txprintf4l b#8 decc$txprintf4p @t decc$txprintf4 G decc$txprintf4 b#8 decc$txprintf4  decc$txprintf4 G decc$txprintf4 b#8 decc$txprintf4 @ decc$txprintf4@ Gd decc$txprintf4X b#8 decc$txprintf4` @d decc$txprintf4 G decc$txprintf4 b#8 decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b#8 decc$txprintf4 @ decc$txprintf< G SwishAbortLastError< b#8SwishAbortLastError< @ SwishAbortLastError 4 G decc$txprintf4 b#8 decc$txprintf4 decc$txprintf8 8=Name= PointerSaved as = Total Words0= Total Files@= Indexed onP= Description`=Maintained byp= MinWordLimit= MaxWordLimit=WordCharacters=(BeginCharactersEndCharacters=(IgnoreFirstCharIgnoreLastChar= StopWords= BuzzWords= Stemming Applied=(Soundex AppliedFuzzy Mode8=( IgnoreTotalWordCountWhenRankingd dX=( Unknown header type '%d' =@6p@Invalid HEADER type '%d'=(Invalid OTHER header '%s'= Stemming Applied= p =@5Must pass a results object to SwishRemovedStopwords8=h[Must pass a results object to SwishParsedWordsIndex file '%s' does not have header '%s'=8-Index file '%s' is not an active index file=xkSwishHeaderValue requires a valid swish handleSwish Handle does not have any associated index files!?!?8=8/SwishIndexNames requires a valid swish handleh =80SwishHeaderNames requires a valid swish handle =0 SwishAbortLastError=(= %lu 0;=0 0 ;=@( ` decc$txprintf= %s x=# %s:= = %s=1 =0"@ ;=0$ erealloc=0";=@4| decc$strcasecmp progerr fuzzy_string= Fuzzy Mode0 fuzzy_mode_value= Soundex Applied` stemmer_applied=0 ;=`0 ; = 0" ;= decc$strcmp=0" ;=@ =0" ;=@ =0";=P,|  set_progerr=0";=@$ =0;p=0";=0$ emalloc=0" ;=0  4= P64= 06 4= x604= |6@4= H6P4= X64= ` 6`4= h6p4= l64= p64= 64=  64= 64= $6 4= 64=  64=  64= t64= t6(4= t684= 6 @ @6 =@ @=0('HEADERSCompaq C V6.5-001 =  4p4=!print_index_headers4=MED . .  . . . . .< =  = 44=SwishHeaderNames4=[SR . . . . . . . . , =  = 4p4=SwishIndexNames4= . . . . . . . . . . . . . . .  . . .$ =  = "4P4=#SwishResultIndexValue4= . =  =  404=SwishHeaderValue4=_WV . . . / . . . .$: :=  4= . = 4 =  =  44=!fetch_single_header4=jb / / / / / / */ 1/  / 3/ / / / / / / / / / / / / / 4/ 4/ ;/X =/ >/ C/ E/ G/ K/ M/4: :=  X4= 4/ ='vX4=  x4= 4= x4= ( = 0 = 44= fetch_header4=PHG l/ b/ b/ j/ j/ s/ s/4 = 0 =  44=SwishParsedWords 4=:21 ~/ ~/ / / =  = " 44=#SwishRemovedStopwords 4=80/ / / / / =   = @ 44= create_string_list@ 4= / / / / / / / / / / / / / / / / /$ = / /=+#"string_list_from_hash = ( (=$indexf_by_name  =  =  44= db_results_by_name 4=4,+ 0 0 0 0  = p = 0 484= print_header_value0 4= 0 0 0 '0 '0 '0 '00 /0 60 60 B0  B0 B0 B0 =  | |e4we4 =   decc$txprintf decc$strcmpdecc$strcasecmp fuzzy_mode_value fuzzy_stringstemmer_appliedemallocereallocprogerr set_progerr SwishAbortLastError  pc$txww1aَ]V1.0 II docprop_writeV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$i$CODE$p $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$8JWritePropertiesToDisk =p#TG^~^ ~(08޴@P[HP>X^`~hpx޵GGG# ( ѠGXb /%@Zk`BG4Ghb/@Zk 0BGG8bGGe///e@Zk^ G G b/ &GTGpBxb @ APA< G9"1FB3aJ/'@sMdJB1"=C/@ZkBGM"GGm="4Gb/@ZkB}GM@Gb4@ZkGG@GGB޶GGGGGb@Zk 0 A @A (A0BGGGeG8b@ZkBG4Gb/@ZkG ]] }(08ݤ@HP=X]`}hpxݥ#k<(GDB_InitWriteProperties<tb#DB_InitWriteProperties<@DB_InitWriteProperties<Ginit_property_list<b#init_property_list<@init_property_list<GDB_WritePropPositions< b#DB_WritePropPositions<@DB_WritePropPositions<GdallocatePropIOBuffer<b#allocatePropIOBuffer<`@dallocatePropIOBuffer4 dG compress24b# compress24 @ compress2,Gprogerr, b#progerr,@progerr< G DB_WriteProperty< b#DB_WriteProperty< @ DB_WriteProperty<G<DB_WritePropPositions<4b#DB_WritePropPositions<8@<DB_WritePropPositions< <GTfreeDocProperties< H b#freeDocProperties< P@TfreeDocProperties =xpProperty Compression Error. zlib compress2 returned: %d Prop len: %d compress buf size: %d compress level:%d =0 ;= T > ף0 DB_WritePropPositions;P DB_InitWriteProperties init_property_list a llocatePropIOBuffer DB_WriteProperty freeDocProperties compress2progerr@ @6=F F=6.- DOCPROP_WRITECompaq C V6.5-001t t= "44=#WritePropertiesToDisk4= 5 5 5  5 5 5  5C *59 *5  /5>z 352 f5 j5 r5 v5 u5 {5 5 85, '5L: :=  4= 75 ='v4= 4=  4= (4=  = + +='compress_property = L Ld>  e4 =  progerr init_property_list freeDocProperties allocatePropIOBuffer DB_InitWriteProperties DB_WriteProperty DB_WritePropPositions compress2 gerrww1aَ]V1.0CCstemmerV1.0 4-AUG-2004 09:32Compaq C V6.5-001  $ABS$ i$CODE${ $LITERAL$$LINK$ $DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J fuzzy_convert0Jfuzzy_free_word8J@create_fuzzy_word8Jfuzzy_mode_value0J fuzzy_string0Jset_fuzzy_mode0Jp get_fuzzy_mode0Jfree_fuzzy_mode0Jstemmer_applied0J0dump_fuzzy_list8Jpcreate_fuzzy_struct0JP SwishStemWord0Jp SwishFuzzyWord0J SwishFuzzyMode8J SwishFuzzyWordList8Jp SwishFuzzyWordCount8J` S wishFuzzyWordError8J@0 SwishFuzzyWordFree0J@@ WordSize0J  ContainsVowel0JP  EndsWithCVC(J@ AddAnE0J  RemoveAnE0JP ReplaceEnd =#4G^~^ GG> 0[8{"@Zk=GTG`G]] 0#k/ G4G0{#0#4G~^^~ (GGG [(b"@Zk// / /// B4G(b @Zk G]G(b]} (4G0#k/#< F^~0[4G^ GGP#B8b @Zk B =G4G#@Zk G]] 0#k///#4G~^0[^~P" (GGG8b/@Zk$ /0B0`@$ "TG8b /@Zkyb@G]]} (0#k /#4G^[~^ ~(GGG >b@ZkGb#@ =G# a/`[@ZkGG]] }(0#/k///#4G~^^~ GGG``[@ZkXGG`b]]4G} 0#/k///k///#^~^ ~(08GGGG$ /(BGTG0b @Zk/0@y@/?G//G]] }(08@#k///d@b# "Q@ _#G~^^GG `"//xs"`4F.Ӣ6F0@B*7F0@B&8F0@B"3!F0@B 0@BAB_yBB `/s"5F/0@ByBB/ B "TG(b@ZkG]]G #k//"rRBGb#]] # ! QAB5/ /k///k/Gk/k/C/k///#C^~^ ~(08GGGG4G{#_BG G4Gb/@Zk0BGGGtG8b/@Zk}G4Gcc[/@Zk dG/`/ B4G0`@4G%(b@Zk BDG $/@Zk @.VJ>G]G] }(08@#k///#^~ ^(~0GGC({#>TGn_(BG="TG0b@ZkB4Gb0,0H/ @ZkB 4Gb@Zk!4G}B#=b#s =s`F`.J/ ///@Zk#0 C# ݢòøB 4 Gb@ZkG]G ](}0@#k///#4G^~^ ~(0GGG[>b/@Zk ""Gb#_GG=b#_BC4Gb /@Zkb# _Gb#/s_ӴG]] }(0@#k//Gk/H{# ///GGG{# _Gk//Gk/ k//Gk/k// k/k//{#//0.GG0JI  ///3 8 DX D/`<@0.0J"5,B,B5-B2D-B;D.B5/B2D4G;D1DT DGP.PJ?k/p/pK"5,B,B5-BAF-B.B;D4G2D1DT DU`CG@P.PJ/?k//0.0J5,B,B5-BAF-B.B;D4G2D1DT DGP."PJ?k/#G~^G0.0J  #/k///5,B,B5-B-BtF.B ["uFTGvFqF;"({/@ZkCG] #k/#4G~^ [^~ (GG! G(b@Zky@/ G)/$1@ BTG(bd@$1@0."Q0J0"'J/@Zk@d@ BTG.! (b$1@d@PJc JH"/@ZkC B@"TG#,(bA#H'H@Zk@G]]} (0#/k///#GG~^G8_Ӡ5@Gs#/_ӠCG] #/k///#GG~^G _Ӡ5@Gs#/_Ӡ@G] #/k///#4G~^ [^~ (0޴8@GGGG(b@Zk" $`@%1@, // $0B8b&@0@f@"/@$//@Zk&/GV7KY&K&?d_Ӡ `BJG4Gd/`[//@Zk.qHPJF>D _G/G]]} (0ݤ8@P#k/ BG4G(b @ZkĠ@0@@tG///@B$GTGHb@Zk#G^~^~ ޴(0GGG = 4G{#W_ӐBGG4Gb@Zk? tG@g///# @BGTG"Hb(¤@Zk} D#`0b&C%"/ .PJJPBPBJ///4G$E/e.`B4G"hbStJgJ/@Zk%, %H? GtG //%"pb#@_ӡU @u @Gpb#0D" /7_xD0`@  a@//B4Gb"G@Zk=@/` / İPB4G4GXb"@ZkGG]]} ݤ(0@#/k,,G<progerr,$ 0{#progerr,8@<progerr,Gprogerr,b#progerr,@progerr,Gefree,b#efree,@efree, G<efree,b#efree,8<efree, PG|% emalloc, pb#emalloc, x@|emalloc4 |GOTS$ZERO4 @OTS$ZERO4!G decc$txprintf4"b#0 decc$txprintf4!@ decc$txprintf4! GD decc$txprintf4"4b#0 decc$txprintf4!@@D decc$& txprintf, |Gemalloc, b#emalloc, @emalloc,TGefree,`b#efree,efree4Gdecc$strcasecmp4b#decc$strcasecmp4@decc$strcasecmp,8GLprogerr,Db#' progerr,H@Lprogerr4XGt decc$strlen4hb# decc$strlen4p@t decc$strlen4tGSN_set_current4 b#SN_set_current4@SN_set_current, Gemalloc, b#emalloc, @emalloc4( GOTS$MOVE4@OTS$MOVE4GDoubleMetaphone4b#xDoubleMetaphone4@DoubleMetaphone,Gefree,b#xefree,@efree,Gefree,b#xefree,@) efree4G4 decc$strcmp4b#x decc$strcmp40@4 decc$strcmp,PGdefree,\b#xefree,`@defree,Gefree,b#Pefree,@efree, G$ estrdup, b#P* estrdup, @$ estrdup4 G decc$strpbrk4 {# decc$strpbrk4 @ decc$strpbrk40 GX decc$strlen4P b#P decc$strlen4T @X decc$strlen4t G decc$strchr 4| b#P decc$strchr4 @+ decc$strchr4 G decc$strchr4 b#P decc$strchr4 @ decc$strchr4 G decc$strchr4 b#P decc$strchr4 @ decc$strchr4GH decc$strlen4@b#P decc$strlen4D@H decc$strlen4, dG decc$strcmp4hb#P decc$strcmp4@ decc$strcmp4@GX decc$strlen4Lb#P decc$strlen4T@X decc$strlen4G decc$strcat4b#P decc$strcat4@ decc$strcat4G decc$strlen- 4b# decc$strlen4@ decc$strlen4  G< decc$strcpy40b# decc$strcpy4 8@< decc$strcpy4G decc$isalpha4b# decc$isalpha4@ decc$isalpha4PGh decc$strlen4Xb#. decc$strlen4d@h decc$strlen,Gestrdup,b#estrdup,@estrdup =None=Stem= Soundexsses =ss(=ies0=i8=ss@=ss/ H=sP=X=eed`=eeh=edp=x=ing==at=ate=bl=ble=iz=ize0 =bb=b=dd=d=ff=f=gg=g=mm=m=nn=n=pp =p1 (=rr0=r8=tt@=tH=wwP=wX=xx`=xh=p=ex=y=i= ationalate=tional2 =tion=enci=ence=anci=ance=izer=ize=abli=able=alli=al=entli=ent=eli3 =e=ousli =ous(= izationize8=ation@=ateH=atorP=ateX=alism`=alh= ivenessivex=fulnes=ful= 4 ousnessous=aliti=al=iviti=ive=biliti=ble=icate=ic=ative==alize=al=iciti5 =ic=ical=ic=ful =(=ness0=8=al@=H=anceP=X=ence`=h=erp=>6 x=ic==able==ible=$ $=ant==ement==ment==ent7 ==sion=s=tion=t=ou==ism =(=ate0=8=iti@=H=ousP8 =X=ive`=h=izep=x=e==e==ll=l= Stemming_en= Metaphone=(DoubleMetaphon9 eStemming_es= Stemming_fr= Stemming_it= Stemming_pt= Stemming_de(= Stemming_nl8= Stemming_en1H= Stemming_en2X= Stemming_noh= Stemming_sex= Stemming_dk= Stemming_ru: = Stemming_fiG G=8-called fuzzy_convert with NULL FUZZY_OBJECT=PCcalled fuzzy_free_data with null valueUnknown FuzzyIndexingMode =8.Invalid FuzzyIndexingMode '%d' in index fileP=3+Options available for FuzzyIndexingMode:  =0";=0 ;0proge; rr=0@ ;=0";=P4  decc$strlen decc$strcmp decc$strcat=0"@;=0$ 8OTS$ZERO emalloc=0";=@0 p;7decc$$gl___ctypea7decc$$ga___ctypet  decc$strcpyestrdup dec< c$isalpha=0" ;=0(  decc$strchr= aeiouwxy=aeiou=aeiouy=0" ;=  =0"@ ;=  =0" ;=   decc$strpbrk=0 ;=0$ efree=00 ;= `=0 ;=0 ;=0 ;=0;= 0" ;==0p ;=0 ;=0( =0"p;=0$ =0";=@(< @ decc$strcasecmp> =0";= @$ Stemx=0"P;=@  DoubleMetaphone=0";=@(< 8OTS$MOVESN_set_current=0;=0;=0"p;=  =0 ;=(00? %s `! decc$txprintf=0p; ={6x44= 46=644= #6X4444h4@ H4 48464p4= 644= 644= 64>soundex= 64x4= 6A 4x4= 644>spanish_create_env>spanish_close_env> spanish_stem=644>french_create_env>french_close_env> french_stem=644>italian_create_env>italian_close_env> italian_stemB =644> portuguese_create_env> portuguese_close_env>portuguese_stem= 644>german_create_env>german_close_env> german_stem= 6(44>dutch_create_env>dutch_close_env> dutch_stem= 6C 844>porter_create_env>porter_close_env> porter_stem= 6H44>english_create_env>english_close_env> english_stem= 6X44> norwegian_create_env>norwegian_close_env>norwegian_stem=6h44>swedish_creatD e_env>swedish_close_env> swedish_stem=6x44>danish_create_env>danish_close_env> danish_stem=644>russian_create_env>russian_close_env> russian_stem=644>finnish_create_env>finnish_close_env> finnish_stem=E e64 4= f6(404= g684@4= h6H4P4=  6=i6X4`F 4= j6h4p4= 4=k6x44= 46=l644= m644= nG 644= o64 4= p644= q644= r644= s6H 44= t644= u64 4= v6(404= w684@4= x6H4I P4= y6X4`4= z6h4p4= 46=644= 644= 6J 44= 644= 644= 644= 644= 64K 4= 644= 64 4= 6(404= 684@4= 6H4P4= L 6X4`4= 6h4p4= 6x44= 644= 644= M 644= 644='6h=-644= .644= /644= N 0644= 1644= 464 4= 56(404=$6=684@4= O 6H4P4= 6X4`4 = 6h4p4= 6x44= 644= 6P 44= 644= 644= 644= 644= 6Q 44= 644= 644= 64 4= 6(404= 684@4R = 6H4P4= 6X4`4= 6h4p4= #6 =6x44= 6S 44= 46 @ @6=@ @=0('STEMMERCompaq C V6.5-001 = 44= fuzzy_convert4=)! 5 5 5 = pw w= p4p4= no_stemp4= T 5  =  = 44=fuzzy_free_word4=VNM 5 5 5 5 5 5 5 5 =  = @44=create_fuzzy_word@4=UML 5 5  5 5 5 5 5$ =  = >U 404=dump_fuzzy_list4=PHG 5 5 5 5 5 5 5 5$ =  =  p44=!create_fuzzy_structp4=MED 5 5 5 5 5 5( =  = 44=free_fuzzy_mode4=A9V 8 6 6 6 6 6 6 =  = 44=set_fuzzy_mode4=3+* 6 6 6 60 6  =  = p44=get_fuzzy_modep4=yqp -6 (6 (6, ,6 ,6 ,6 ,6 ,6 ,6 ,6 36 /6 /6 /6 = W 0 = 44= fuzzy_string4=# ?6 >6 A6 = 0 = 44=fuzzy_mode_value4= F6 H6 =  } }= 44=stemmer_applied4= N6 =  = X 44= Stem_snowball4=e]\ U6 U6 X6 Y6 `6 f6 f6 m6( = @ = P4x4=double_metaphoneP4=vnm p6 p6 r6 w6 ~6  6 6 6  = @ = 4Y P4= SwishStemWord4=KCB 6 6 6 6 6( =  = p 44=SwishFuzzyWordp 4= 6 6  = 0 =  44=SwishFuzzyMode 4= 6 6 = 0 = Z  44= SwishFuzzyWordList 4= 6 6  =  =   4p4=!SwishFuzzyWordCount 4= 6 6  =  =   4`4=!SwishFuzzyWordError 4= 6 6  =   = 0[ 4@4= SwishFuzzyWordFree0 4= 6 =  = @ 4@4=WordSize@ 4=nfe 7 7  7 8 7 7 7 7 7 78 7 7 = @ =  44= ContainsVowel 4=*"! 8 8 8\  =  =  4P4= EndsWithCVC 4=UML 58 58 58 >8 >8 ?8 ?8 >80 =  y y= @ 44= AddAnE@ 4= S8$ = `| |=  44= RemoveAnE 4= h] 8$ = ` = 4P4= ReplaceEnd4= 8 8 8 8 8 8 8 8 8 8 80 8 = * *= 44= Stem4= 8 8 8 8 8 8( 8  8 8^  8 8 8 8A 8 9 9 9 9, = D = @ @ decc$txprintf decc$strcat decc$strchr decc$strcpy decc$strpbrk decc$strcmp decc$strlendecc$strcasecmp decc$isalpha decc$$ga___ctypet decc$$gl___ctypeaSN_set_currentprogerrsoundexestrdup_ emallocefreeDoubleMetaphone spanish_create_env spanish_close_env spanish_stem french_create_env french_close_env french_stem italian_create_env italian_close_env italian_stem portuguese_create_env portuguese_close_envportuguese_stem german_create_env german_close_env german_stem d` utch_create_envdutch_close_env dutch_stem porter_create_env porter_close_env porter_stem english_create_env english_close_env english_stem norwegian_create_env norwegian_close_envnorwegian_stem swedish_create_env swedish_close_env swedish_stem danish_create_env danish_close_env danish_stema  russian_create_env russian_close_env russian_stem finnish_create_env finnish_close_env finnish_stemOTS$ZEROOTS$MOVE c$txww1(dَ]V1.0DDxmlparseV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$x $LIb NK$\$DATA$$BSS$ $READONLY_ADDR$@ $READONLY$8JXML_ParserCreate8JXML_ParserCreateNS8JP XML_SetElementHandler@J` XML_SetCharacterDataHandler@Jp XML_SetProcessingInstru3sa24l8$8J XML_SetCommentHandler@J XML_SetCdc ataSectionHandler8J XML_SetDefaultHandler@Jp XML_SetDefaultHandlerExpand@J` XML_SetDoctypeDeclHandler@JP XML_SetUnparsedEntityDe0esr0km$@J  XML_SetNotationDeclHandler@J@ XML_SetExternalParsedEn0prcdc6$@J0 XML_SetInternalParsedEn23bh9jo$@J XML_SetNamed spaceDeclHandler@J0 XML_SetNotStandaloneHandler@J@ XML_SetExternalEntityRefHandler@JP XML_SetExternalEntityRe0eoulj4$@Jp XML_SetUnknownEncodingHandler8JpXML_DefaultCurrent0J0` XML_SetUserData0J0 XML_SetEncoding@J@P XML_UseParserAsHandlerArg0Je  XML_SetBase0J  XML_GetBase@J0 XML_GetSpecifiedAttributeCount8J@ XML_GetIdAttributeIndex0J  XML_Parse0JHP XML_GetBuffer0Jx`XML_ParseBuffer@J 0XML_ExternalEntityParserCreate@J XML_SetParamEntityParsing8J8f XML_GetErrorCode@JpXML_GetCurrentLineNumber@JXML_GetCurrentColumnNumber8J(XML_GetCurrentByteIndex8J@XML_GetCurrentByteCount0J XML_ParserFree0JXML_ErrorString =#4G~^[^~ (GGG"b@Zk0" B"G(b4G /@ZkBG"g 4G b(,048<@DHLPTX\`dhlpt 䳌䳐䳔䳘䳜$䳰@ZkB"4Gb䳨/@ZkGb#F4F 䳴䳴"䳼/`@/G4G@PB$D|"XbtGx$"(,048<@DHLPTX\`dhlptx$|䳀䳄䳈 h ĢGD@G"$IJ@Zk@BGHb@ZkG///Gpb#@GG]]} (0#/k///#^~^ ~(GG>0{#9_ӀBG|"x "GtGb/@ZkpB4GGxb@Zk#?FF0F#Gb# "F@Gb#@GGG]] }(0#/k///#4G~^^GG /"{#I@CG]] #k/(,Т`#$p"04> ^޲h^80i <P@0DPTXТ\~ $>(^,>0^8<޲Pp`d0@~hPl0ptPТp^x~GGG4~{#DH>L^P>T^X\޲` 01'J'J p_GH/ b#_GB=} =G$(=($0d0=8}4,$<`D$8X=,}<$TdGX4=@DD=H%DLP}TD@dP$\`$dhldt/`p\$"= b#@ Gb#=@//GGxb#1@j GGh]p]x}#k/// #~^^~ (GGGGcB4Gb@ZkBG4GbG/@ZkG]]} (0#k//0#^~^ ~(08GGG ///B4Gb$#/@Zk b#_ӠBG4Gb@Zk#?b#$ _Ӕb#4 _Ӵ"b#@"b#@4#=8cAaB ="@ /B4Gb@Zk"@Gb#S@Gk b#/O@ "b#/K@0"b#H@@"b#@ӠB4Gb/@ZkB4Gb@ZkB4Gb@ZkB 4Gb/@ZkB4Gb@Zkc4G`[/@ZkBG4Gb@ZkG]] }(08@#k/k//pPSF/@00/k///0k//#~^{#^GG d"//@GÈ//4GG]] #/k///k//k//k//(l 0,Pk/00k//40k//80k//<0@Pk/D0k/4GD0p/k///H0LPk/P0k//X0k//\0k//T0k//`0dPk/h0k//l0k//G0FpP/k///t0Pk/ Bk//#4GG^~^ ~(08޴@GGGGGG@` 0PpG0P[@Zk4G/¤Gð// #GGFGim CEBGCc@C[@Zk/4Gg/#G#`//c@GGCG@}"[@Zk#G#L//x]Gc"0p#[/@Zk$@/,//#! @ @ @B@4GHb@Zk0B@TG8b@Zkb4G#Gc@@ B]G/@ZkB 4G/GGb#T@ BGGG@ZkGGb#G@G]] }(08ݤ@n P#/k/// #0G^~P^ ~1@(GGGpQCC c"##_FG#GG[@ZkGc" x0p C#[@Zk4G/# G#G]] }(0#/k///GG!B !Ba # Т~^^~ ( @0GGG BpxWC0B PB GG@Zk 8  @ =B 7//$B"D/@ @@ @ @@ o @`@ @/ @ @/?BG4Gb@ZkG4GG# C@xBG4G@c1rB@ZkBb@Zk C "@@CG]]} (0@#k/k//k//0 P1QB Bk/ k//0  0Bk//Gk//PGGp"@#~^^GGx60p[@ZkBG]0@@] #k/֢0Bk/PGGp"@#~^^p GGx60p[@ZkG]] #k//k//D0GG{# 0Tt/Gx3Su#s//k///{BBQF PB/k///Gk//GGGGxP{#/#^~ ^(~0GGG>{# ^~v @ "=G ]}b##G] ](}0@# ///G] ](}0@#k/#G^~ ^(~08@GGG^GG~"xq Cp[@Zk B "= DGGb#CD]@G G//GGG] ](}08@P#k/#G^~ ^(~08@GGG^GG~"xCp[@Zk} "D 4GGGPb#' @ "4GGb#G##4GGxC!@G G//GGG] ](}08@P#k/GGG4GxP{#/#~xr ^~^@F~޴>^~޵G!0!GGGGG>(!=d!$!( TGc!/=GG}"G=e[@Zk=@BW@)M\@C/k///@,eGtG}[tB24@@ZkpDp="4G0ctG `[/@Zk///D.'/@%Gb#3B@G@GGb#GE@t#Gp# x#{ |C//w@Dc` Du.w s n//#`D# C@.?D`]"GG b4 D.hClݱ`dGC#xBc_Fh=#/lcGb#/`F4F@GGF/lcpN n[/@Zk:áñ`D/(á]GGGGb#/@G/'///á///BG4Gb@ZkBuGG4Gb/@Zk//k  GTGCNñ@ݢ>t B.e[@Zk0@O@.TGBb10B QB Q@@ZkK@BN./@Zk(0B/ D#/c \//+/."P="GX}"APBX 8eBG[/@ZkPBTGbD9.10B1B1B@Zk//G@G.n//΢G"X}GP="Pݲ n8eBX}"B[@ZkPBTGbD.10B1B1B@Zk@Gu /XG n"b#G.WJ>] "@Gw(cC .tG[/@ZkG@Ӏ/(]GGGGb#/@G/_///(]Gb#} ,á/DVGo@U@šGTGHeAG[@ZkAGGb#G8@8G8}"#GH"b##]@G3(ctG`C[8=@Zk,c `(// [8=TG/@ZkG//C@Hݡ/dcHTG/`v 5[@ZkHݡΡHݱ#/O///{=GGG`b# @LGTGFe@=[@ @ @/@Zkϡ0BGG8btGD@Zk/á,#.1AñJ //G O//:@o3B/./@F FJXKR"yJ1"G?)r/-rKNIR"pH1"E=/2,.2HVJR"w1H1"F> / =.KTJR"{K1"Fw > ,,HsH@H1"R"D<,cTG[ /@Zk //Dá]Gb#}G/@ ϡ/dcTG` [/@Zk  #.ñNnGr/=GGG`b#W @Ӳ//(e=GTG[@Zk]0áPBGXb0="TG/@ZkNGG0="GtG/@ZkW///D/0c4GtG(=" `(][@ZkC///Dá/<c4G`[@x Zk /D]Gb#}G,@GG]"b#GG@Ӏ@bc\0c]G="G}"E`DšE6 #=8e$[/@ZktG0c #=[21@@ZkDe/ݡG="}"Gȱ #]=8e$[@ZktG0c #=[21@@ZkD//=ݡtG[2A@Zk/D6//]}G@b#G2@-/4G///G]]}ݤ=]}y ݥ#k/]}G b#Gv@/D]}GGb#@Ӏ=G'///ɰ4GtGx="0c `x][@ZktG//Dá]Gb#GG/w@tG////cGhD`D//}Gg///GclD`D/tG//G=G'///G//]GG{///Gvz //tGr//Gn//Gj//Gf//Gb//G^//GZ//GV//GR//GM/GJ//4GF//G?///0cG=" }"GG%`D% ?E C ]8e$[/@Zk0c #tG [2@@ZkݡtG/Ȱ/=tG[2@@ZkݡtGȰ/D#]Gb#GG / @ݡtG/Ȱ/cGoD`Ȱ/G{ //P#(^~0^8~@HP޴X`h>p^x~޵GGCGG^G GG4"{# ~( G1@ =Cd"`b#1/@ G4G/GGb# @CC4GGb#///C@4Gt $d[G=CcG@Zk G@BTGhAHb B B/ C1JCG@ZkG4GT =GG pA$d[G@Zk.A GG C 4G` | A0D///CGTGOB2d[ G@Zk@AGb#GGq@ G Ga.!"A"tHqJSrJ4GtFa>V,AB  0 A}G/S ?G/8 ///4{G////@ < QE# AE0@C `SE0@C`TE0@CUE0@C0@C NC/ HC/ YE/ 0@C HC///zZCZ[CZ2GJGJGGb#wGD @ P,A/#0##//cc} / L,AG b#GWw@ ##* GT4AG@b#E"@j0`J `tG{@ 0Au)1 AA AaJ TG 0A 0 A AA .* qIPJF >]0@B]/O// 0A 0 AA AG ]!Q!AG=@#V8/X#:KQ /Q )@ @ E#///Q01"XF?@DP`C;ѠDP`C7DP`C3q xEP`C/`ѡEP`C+P`C aC/ iC+/1"F/P`C iC/~ //4G>//x-ID/â BG1/4G.//4G*//c//!J GG4GTG/@b#BWr .k"J5w3`2! 0IG/@*4G- 0A@ nH AMI E==P!A= 0 AA!A 0 A0 B=_.k"uHTJF>ע֢Y8A 0 AX8A 0 Aٲ 0A A@/_}[;A AGD } CE/ / =//GGb#G.""JVJX`F/`>+/?@/h ////㡼#Gb#E @/! B0@0.m.SmJ0Jt JtFm> @///.EJ!XF!(/(K!X'G/ h/hKXD!(,(H!X'D (.(J XE!/ .JXF!h.hJ!XgF/Gb#D//c@ӂ!,/.Hr/HQ/J2F/>h.hJ!/ =:1 C]_@/// A=$Q!A A8 @EAA+///!A0! A.Q"TJ>.h"UJ>/"XK?!,Y#GH.@//G///G(]0]8}@HPݤX`h=p]x}ݥ#k/,g#@H<PA Ak!///4G//4G//}s`/ . "WJ>s/` 8/ Y'K8?s` SZ ,FH<s}{/+`{// /-EI!XD!-I!XE/L.LJXGF!@,,,H!X'D ,-,I X'E!/ L-LI XGE!_/c =G G//F/0@DFK `,0@H /.J0@ &.0@&J .J0@ /@-0@I ?ˡ@PB C$C C4GXb/@Zk G //4GM/0BKG++@Zkc `/// E CcB4Gb@ZkKGG0B@@Zkk d&//# ^~G^ (^0~8@H޴PX,HGGGGGG$//.0@C{#`GJ{#/{.0@C{J{#`;,0@C;H{#;.;J0@C{#/ .J0@C{#{.0@C{J?DCTGb@C'B @ @=@Zk/G[/GC! ///BG4Gb@ZkG//GG/B@4Gb@ZkPBG4GXb/@ZkG6='BǰGG/@ZkF/ǢB/"yJXKG?= 'E."EJDF/@/tG բDz`c/`[G$G/@Zk4GG ](]0}8@HݤPX`#k///#C^~ ^(~0G>GGP{#^~^"~x0@=Gb# xC G}&_G] ](}0@#k///#(^~0^8~ @xPHP޴:FX`h>p^xGGGGGGG@!0!///(! =(d =GGG}"[@Zk=") TG//@wAB/`\\BCk//0c4GtG="K`][@ZkN//0c] ="}"G>`D$?D3 8dG[$/@ZktG 0c #][2QB@Zk= D-/ G ="}"  CG]8d]$[@ZktG 0c #][2QB@Zk= D =tG[2B@ZkD}Gpb# ]G@GG}"G d =[@Zk=")<]GH( }g#G"// G//D4G%@c`[/@Zk //Dà}Gpb# ]G/s@GG(]0]8}@HPݤX`h=p]x#k// BG(b/@Zk///#tGx0"~ ^^~ GGG|" {C[/@Zk G]]} G0#k//#GGb#]]} 0#~//#4G"P^~_#X^`~hpGG  # {GC"] [(=x# ,]C 0}C@Zk/TG%/=(4G8 DF |#Dc`Gx#0b#,]0}@= } tG x#@A@1QF cx#///G///GP]X]`}hp#/k/// =?x dGTGC"8= `?=@=H][/@Zk8=Gb#@]H @@G4GGb# @XD_ //#G_"^~^# ^(~GG0GGGtp"/Z`///@0 "@" :@aF cPPPPPPPPPPPPPPPP?tG]" [@Zk(B//+G0b/@ZkxBG4Gb@ZkG 4G}`[//@Zk4G/# BGC C ]}1D="[@Zk]CxG /}4G/`[@ZkTGG] ](}0@#k/#^~ ^(~0GGG>{# ^~_ "=G ]}b##G] ](}0@# ///G] ](}0@#k/#G ^~(^0~8GGG#x=]CCp}}"[@Zkb#G]}x#G@G ](]0}8@#k/@#x0@^~H^!FP~X`h޴px>^ ~޵G!0!GGGGG ~ (!=C"04# !d!$C!(=8/CG#' 8"D ݠ/C///O@J E/?ݰ'Cc}GG0GG[/@Zk0@W@ \@Ck//}GGb#Gb_//{x/H#}Gb#GG /_@jHcGTG[/@ZkG@4d]GGGG[/@Zk///  #=b# @@30BG G=@GGG @ ײptxC4G@|#x/ hc//`[/@Zk///Lc4G/`[/@Zk//}GGb#G@// G(GGb# @G  F`tCpCpGb#t@ӊ//4G///G@]H]P}X`hݤpx=]}ݥ#k/}GGb#GB@/ F C2_J Ca/ F4F [/// "7JF R//xGb#/K c2gJ#3fJGJgJ@ӺA/@d CGG=Ghb#2GJGJ@4+@<@ Gvp#x#tGb#t#+ C2GJ#GJ@/"//@ddG}"=G[2+@@ @G/@Zk@@/w ///\@@Ck//}GGb#G @//F4G/@$aA=/- MGb#2F //@N m TGsI+ -K.RKJSFK>+(dGGTG[@ZkXB="?GT G`b@ZkBG G!// -b#FG]@/; - 0`A fA" L..LJvAJ!UJF>d}[GGGG}"/@Zk@@///cTG,/G)//4G%//x#D cG//x#D cG//4G//xcD `c ///xݢD/òG t#GG8pc9yC8\tc8b# @ cG D \c+K[k@ZkXt pT|c4G `hc`[/@Zk/// 4GD à=Gb#G>@d@3+@ @   졮clp#t#1/ à}Gb#GG)/ @ opPct`/O[ oG@Zk àGXc`&F[ f@Zk//,d]GGtG[@Zk/ /}GGb#G^ @G/gxcGGGb#`/ @ //[D/tà pð// /pt/tC pC //TâGGb#G}. @/7㱼4d]GGGG[/@ZkGGb#/@d@3A @G//G@ð/â=Gb#GT/@@38C @GGTc#C[/@ZkG! @ӀGG/ Tc//`#C[/@ZkG @lcTGBbAkA/`#@Zk //B G G4Gc b@Zk Cc oA .P J >K/ 8O=//#CG2B.xJJWJoFF`>;///#CG:C-aHIOIDE=+///|c4G`hc`[/@ZkDàGGxGb#}@ xD D}G`GG(b# f@Ӂ}GGHb#G@y/Dà@@y@ lE}Gb#DGGCD//@dG}" ]GG[@ZkG ݠG\GXGV//GR//tGN//TGJ//GF// GGb#G xC&_9/G6//G2//G.//TG*//DDTGTD#4G!/TG//TG//G//BGb/@Zk///#(;G^~^ ~(08޴@GGGGGxG~"##p[/@Zk=@@#>// B\@Ck//DcG Gb#`}x#/@//}Gx#b#GN@// 4G!/}Gx#b#G@//3x}"GG=p[@Zk=@@#////4G///G]] }(08ݤ@P#k//DCGGb#@x#G@///G4G//GGG//GG//k//#^~^ ~(GG^GC{#+@=// #p"1B"/ P.SJDF@ â FGpb#k @4G CG" #".Q"J">G]] }(0#k//`#G^~ ^(~08@޴HPX>`^h~px޵GG q[GGGGGGGG~"G@Zk@w@C C!$c! 8 E G//`b\@DCk//(dGGTG[@Zk@GE// (H22B1"@q.qJ$F 0B="TG8b@ZkGG!( b#> FG @/ (0@ @" O..OJvAJ!UJF>}GGb#GF @//v4G/@ġ@ݰ/ ( 00@A"i!.2J$Fe h3D Gb#/ @Ӗ ȡ qNI Ȱ.PJF>T/@D,dGtG}[@2rB@ZkDGb# (0DG // @z ȡ. sI (N.RNJSFN>4/@Gb#G@3Bl @kGGb#G@Gx/c//΢GGG bF F4F_ N//c@nG/g`β#tB_GFe dݠGG}"GG[/@Zk@w@/3n//GS//x=D/#GIxDðGC//x#DðG;//xCDðG3//4G///4G+//4G'//4G#//xcDðtG//xDðG//xDðG //xâDðG//GG] ]( }08@ݤHPX=`]h}pxݥ#/k///BGb/@Zk///0.0JB /!FF/ 0,"0H8 !D P."PJ2D0."0J, !F 0,"0H?/k///,GTGHDs2H 2."Q2JR"3F2>.JUBB //r.{H"SrJR"{Fr>.Jr.SrJr>k//4#^~^ ~(08޴@GGGG{#~D0C/@ @>/d@$G TG[!@ABAB@Zk@G"G }Gb#K @G//G'/#G =TG# d[/@Zk@$GGb#!@3BG2 @G/G/Gn_4cGGtG[@ZkG//S@4GG]] }(08ݤ@P#/k///8#^~^ ~(GGG{#D0 %@@1"b#CR2@a!@3aB@G//G /G2_8cGTG[/@Zk@4GG]] }(0#k/# ^D^~ ^D(~08@޴HGGG #x0G !F  "GG}" _=G=8c="$[@ZktGDb "][2QB@ZkF/Db=tG[2@@ZkG] ](}08@ݤHP#k///# 0C^C~SG^ ~(0GGG^ G4@//( G/@00`C0" aC0`C aC0`CD[ aC0`CD/T aC//@PD /L@/// D/D///`C/@D0@J/@BG4Gb D G@ZkCG (//B@TGq@Q?Bb@ZkCG /// #rBQQBFFF D_G4@GD0B 4GG]] }(0@#k//#~^^~ (0޴8@HGGGd GT ,HE///XD<E@///lCp#G0b#:D  @/Cp#"pH..HJwAJ!EVJF>l#pGG0b#@////pG0b#( p#H.RHJH>t#Gp@'t (D ptp .J4G/G]]} (0ݤ8@HP#/k///G//G//G//l0p#^~ ^(~08D@޴HPXGGGd"GP{#> ^~////@Gp#`b#"pa.GSaJa>= ]}h@ G/G D"Pb#G@G/G/&%D tp//p#C#E# "e"t#@.GJF&.JF"%/:K-G e/`K D%,0Hx.DT"Pb#/ %.3J/ X'F %"@/c f&? 1?J!F&ihGG/XFR"!r.0@@FrJR"[`XgF/`.J0@R"SXF/2/2K0@R"K X'G/ r/rK0@C//G//p#lPb#0DG @ /p#0A A"pE..EJvAJ UJF>l#pG GPb#@//G/G//pGT"Pb# p%,A%H%XGGG= 0D"{#////@G#GG uAJ".TJF>â֢FC$B//#CGb#:G //@ӆ#!"#B0@ @p..VJpJwJF>4GT#=XXC GG/"^@}GGb#`âFj@a#tH"a.SaJtFa>.J/#Gb#G//S@N#"H..HJvAJ!UJF>.J/C#:G Gb#/;@:( sH#H.RHJSFH>FC)B G//âGb#F//@"#"GRHB 0A Ar..VJrJwAJF>4GGq//Gm//Gi//Ge//Ga//$#=(XC ///"@AGFG`âb#F@/+qH(!#.PJF>G.GJ@///Gb#F@/$!#',D.'Hs$H RDJSFD>.J4G///G//G//âGb#F//@G(!#,EH< G]] }(08ݤ@HP=X`#/k///#~^^~ (0޴8@H>P^X~`hQ.QJG@GGGGp!P!T0!d! $ ///%,G%HACrF%@cFb#/Z@//Gb#$ #D.RDJD>#G@ ?D4 D .CJC@C.GJ EGb#/kG5B!âF///+@ӎGb#G ,.Q,J,>#@ӆ #G GPb#!F @/##%. %J!F/` //Gb#F//@n, #%..%Ju,J  n=TJF>.JBCFC#:G b#G@YGGG0b#, #L.RLJL>Gc_O%,%HC@@.Je#CGb#2F @/?, #%..%Ju,J TJF>.JM4GG]]} (0ݤ8@H=P]X}`hp# /k///G//G//G//G//G//G//G//G//0.GGG0J+ //`/t3H@"[rKgKUABABDB;FpF2F/ 3"//`S.QJ$F S.RSJTFs"S> / .s/ J[sKu3Js"uGs?@. @J/?pF"s#.JFF,@H<k///0p#^~ ^(~04Q8@޴@@BHPX>`^h~pxGGG@ G0 /" @G 0b#@GGGb#@GUGS//  !\ $$A0@=/"@//CHLâ GGb#F/@-L#0b#"La.GSaJa>)@&G "Gb#m@ G#) ?F?D!F I_iC3V`JGF\#5JF2GGb#S@ /G //G//G//$C!=$A!A=//"@//gGG 0b#J@UGGb#G,@ S ' G B4G(b a!@P?@@Zk /KGG'b# 1@ Gb#   gG`3 @ G  G'IGb#,B LBG11@ 0b#' ,@ BG!mF?FqFm! ///@ G  B 0`A A ) qA?/G//G//G//D GG]RB ]/"*@//{GG 0b#@]GGb#G@[ 'GG0b# @/W  g mE?`<GG G0b#@///KG0GGb# f` G/@"//@/// &&Gb#!E @/ f*1@A+! & .k. Jt J!SkJtFk>_ f///`h'('?G0b#@ G//G//G//G//G//G //G//TD4GTCXXG] ](}08@ݤHPX=`]h}px#k//0. G0J/& ///0,p/2HF@0H"pK@ pKp/"2H@pK@ pKp/"2HpK@@ 0.pK"0J2H@@?/k///p#GTG^~^ ~(08޴@ [HPGGGGG`@GG(b@Zk/G/GG CG_DG_51`BCDW@S/KWG:,:HG7 D.DJ?@.. F1"Z#@GJJ1"Z#F&//q/Z. qK1"ZJZ#D@&..JJ0D1"Z#// q/Z.qK1"ZJZ# G ..JJAF/?@B// G/GF@/&1@@@/G/# G B(b0GTG/sBsB/@ZkG//G/câ(1@GG=`//5(_DX@/,///G/ 1@Y@9/ G 1@Z@Z/@G 1@A@!/ G 1@P@ /G 1@Q@1/?@@0BB"_BG4Gb/@Zk]!Hð6 H #HFS@s"`/G/&1@T@/G&1@U@/G&1@V@֢/G&1@W@/ BG@4GGTG(b@ZkF@GC0@@CG]] }(08ݤ@HP`#/k///0#~^^~ (0GGG GG/B4Gb@/@ Zk0@@@B4Gb/@ZkG]]} (0@#k//0P//2F1 1"2D01 `0 2F `0G/ ~=@8k///Gk//0  k///p`//;p/ ` q0 k//#~^^~ (GGG/ /// B4G(b@ZkG// / /// B4G(b@ZkG G]]} (0#k/#^ ^~^ ~(08޴@GGGGG{#//@G ///8dGG="GG[@ZkGb#D//s@GG]] }(08ݤ@P#k/#~^^~ (GGGG/ CGb#@F//O@ #" D..DJvAJUJF>.J / ##G ]]} (0#/k///G//#~^^~ GGG{#_/G/ #b#0DG //@G C" #B.RBJB>G]]} 0#k//0#~^^~ (GGG/ /// 0Q"qpP1AB P0icQ;`CC B"@C1 BQ##CG/@Zk #  @B0"@# 0BK//TGP#D@c0 B;`C{C8b@@Zk//G7/`" #CdBc12B@)///â#@B4GHb B@ DGB/@ZkG B Cc"SF1SBG/@Zk â@# 6B@@ 4GG]]} (0#k4G< decc$malloc44b# decc$malloc48@< decc$malloc< @GdXmlPrologStateI nit< Pb#XmlPrologStateInit< `@dXmlPrologStateInit4dG4 decc$malloc4b# decc$malloc40@4 decc$malloc44GT decc$malloc4@b# decc$malloc4P@T decc$malloc4 GXmlInitEncoding4 b#XmlInitEncoding4 @XmlInitEncodingD GXmlGetUtf8InternalEncodingD b#XmlGetUtf8InternalEncodingD @XmlGetUtf8InternalEncoding4 GDXmlInitEncoding48b#XmlInitEncoding4 @@DXmlInitEncodingD DG\XmlGetUtf8InternalE ncodingD Pb#XmlGetUtf8InternalEncodingD X@\XmlGetUtf8InternalEncoding4G decc$free4b#` decc$free4@ decc$free4G decc$free4b#` decc$free4@ decc$free4tG decc$free 4|b# decc$free4@ decc$free4G decc$free4b# decc$free4@ decc$free4(G< decc$free44b# decc$free48@< decc$free4G decc$free4b# decc$free4@ decc$free4G decc$free4b# decc$free4@ decc$free 4G decc$free4b# decc$free4@ decc$free4G decc$free4b# decc$free4 @ decc$free4G decc$free4b# decc$free4@ decc$free4 G( decc$free4 b# decc$free4$ @( decc$free4T Gl decc$malloc4d b# decc$malloc4h @l decc$malloc 4p G decc$realloc4 b# decc$realloc4 @ decc$realloc4 G OTS$MOVE4 @ OTS$MOVE4GOTS$MOVE4@OTS$MOVE4GOTS$MOVE4@OTS$MOVE4DGX> decc$malloc4Pb#H decc$malloc4T@X decc$malloc4xGOTS$MOVE4@OTS$MOVE4G decc$free4b#H decc$free4@ decc$free4G decc$malloc4b# decc$malloc4 @ decc$malloc4G decc$malloc4b# decc$malloc4@ decc$malloc40GL decc$realloc44b# decc$realloc4H@L decc$realloc4\GtOTS$MOVE4p@tOTS$MOVE4G4 decc$realloc4 b# decc$realloc40@4 decc$realloc4G decc$realloc4b# decc$realloc4@ decc$realloc4G decc$memcmp4b# decc$memcmp4@ decc$memcmp4 G! XmlUtf8Encode4 b# XmlUtf8En code4!@! XmlUtf8Encode4)GL) decc$realloc4)b# decc$realloc4H)@L) decc$realloc4@5Gd5 decc$malloc4X5b# decc$malloc4`5@d5 decc$malloc45G5OTS$MOVE45@5OTS$MOVE45G5 decc$free45b# decc$free45@5 decc$free45G5OTS$MOVE45@5OTS$MOVE4 7b# decc$realloc47G87 decc$realloc447@87 decc$realloc4p7G7 decc$malloc4|7b# decc$malloc47 @7 decc$malloc47G7 decc$malloc47b# decc$malloc47@7 decc$malloc47G7 decc$free< <47b# decc$free47@7 decc$free47G8OTS$MOVE48@8OTS$MOVE4 =G4= decc$abort 4(=b#` decc$abort40=@4= decc$abortD@G@XmlSizeOfUnknownEncodingD@b#hXmlSizeOfUnknownEncodingD@@@XmlSizeOfUnknownEncoding4@G@ decc$malloc4@b#h decc$malloc4@@@ decc$malloc4HGI Xml Utf8Encode4 Ib# XmlUtf8Encode4I@I XmlUtf8Encode4NGN decc$realloc4Nb# decc$realloc4N@N decc$realloc4NG O decc$malloc4Ob# decc$malloc4O@ O decc$malloc4RGR decc$abort4Rb#  decc$abort4R@R decc$abort4VGV XmlUtf8Encode4Vb# XmlUtf8Encode4V@V XmlUtf8Encode4[G[ decc$abort4[b# decc$abort4[@[ decc$abort4`Ga decc$malloc4`b#H decc$malloc4 a@a decc$malloc4 aGDa decc$realloc4  4= ] ]=v4= 4=  =  = 44= XML_ParserCreateNS4=A98     , =  = 40 4=XML_SetEncoding4=,$#     = ` = +04 4=,$XML_ExternalEntityParserCreate04=yq                             j           0 = ` = 4`4=destroyBindings4=/'& * & ) *( =  =  44=XML_ParserFree 4=|{ 6 2 = 6   B  C    N S(: :=   4= N: :=  4=  = ] ]=v4= 4=  = 0 = &P 4@4='XML_UseParserAsHandlerArgP 4= Z  =  = ` 404=XML_SetUserData` 4 = _ b  = @ =  44= XML_SetBase 4=(  e e( = y y=  44= XML_GetBase 4= t  =  = +0 44=,$XML_GetSpecifiedAttributeCount0 4=  y  =  = $@ 44=%XML_GetIdAttributeIndex@ 4= ~  =  = "P 44=#XML_SetElementHandlerP 4=  =  = (` 44=)!XML_SetCharacterDataHandler` 4=   =   = 0p 44=1)#XML_SetProcessingInstructionHandlerp 4=   =  = " 44=#XML_SetCommentHandler 4=   =  = ' 44=( XML_SetCdataSectionHandler 4=  =   = " 44=#XML_SetDefaultHandler 4=  =  = ( 4p4=)!XML_SetDefaultHandlerExpand 4=   =  = & 4`4='XML_SetDoctypeDeclHandler 4=  =  = -  4P4=.& XML_SetUnparsedEntityDeclHandler 4=   =  = 3 4@4=4,&XML_SetExternalParsedEntityDeclHandler 4=   =  = 3 404=4,&XML_SetInternalParsedEntityDeclHandler 4=   =  =  ' 4 4=( XML_SetNotationDeclHandler 4=   =  = ( 44=)!XML_SetNamespaceDeclHandler 4=  =  = (0 44=)!XML_SetNotStandaloneHandler0 4=   =  = ,@ 44=-%XML_SetExternalEntityRefHandler@ 4=   =  = /P 44=0("XML_SetExternalEntityRefHandlerArgP 4=  =  = *p 44=+#XML_SetUnknownEncodingHandlerp 4=  =  = & 44='XML_SetParamEntityParsing 4=   = B B=  44= XML_Parse 4=           T   ( % ) 08 =  =  `4x4=XML_ParseBuffer`4=~} = ; ; ; ; ; @ ? A A A J I, = " "= P4H4= XML_GetBufferP4= Q O O O O T V _ _ _ _ b c f. f  g k( o  = ~ ~= 484=XML_GetErrorCode4= t  =  = $4(4=%XML_GetCurrentByteIndex4= y {  = 0 = $@44=%XML_GetCurrentByteCount@4=#      = 0 = %p44=&XML_GetCurrentLineNumberp4==54       =  = '44=( XML_GetCurrentColumnNumber4=6.-       =  = p44= XML_DefaultCurrentp4=)!    = ` = 44=XML_ErrorString4=#     = @ = 44=contentProcessor4=   =  = (04x4 =)!externalEntityInitProcessor04=;32       =  = )4x4=*"externalEntityInitProcessor24=_WV        ( =  = )4P4=*"externalEntityInitProcessor34 =`XW       ( =   = +404=,$externalEntityContentProcessor4=   =   = 44= doContent4= ( ( (  ( > 98  ; ; =/  q r^ t x y x x }   2 1    !                                         ) * (   8 > A A B C C H R V U T ] c fi j q^ u {            P    A @ A E K I I M Q R U \ _ ` e f% C  '              = F F= '44= storeAtts'4=            ,                        ' . 6 5 = ; = @ A C G K K K  K K K K K  # ] U U T T ^ _ ^ T e T l p m p p p8 x x    t   P  o     B      = P  = 644= addBinding64=            8 =  = "844=#cdataSectionProcessor84=H@?    ) + .(Z Z=  @ 94=  e4= } }=v@94= X94= d94= ( =  = 94`4=doCdataSection94=?7          % - 2 1 0 0 2 :  : > >  * B E L2   3@ R  =  = @=4P4= initializeEncoding@=4=>65        = _ _= =44=processXmlDecl=4=                l  0          = & &= "?4h4=#handleUnknownEncoding?4=       D      )       $ =  =  A4P 4=!prologInitProcessorA4=;32 " " ) * +  =  = @B44=prologProcessor@B4=910 / / / / 5  =  = B4 4=doPrologB4=ME :  :  : :U i  U R S S U o              KP            ) (    *- i h n u t t t *[ *[ *'             . - . 8 < J ] b i                       .           '  &  8 8 V V [ .   */ o) 3o : :=  G4=  ='vG4= > G4= H4= |R4= < Z Z=  DQ4=  e4= ] ]=vDQ4= `Q4= $ = @  =  R404=epilogProcessor R4= ? ? ? D I  V $ H* H* H I&0 L L M)  b = P| |= pT4h4=errorProcessorpT4=   =  =  T404=!storeAttributeValueT4=4,+    $ =  = !`U4 4="appendAttributeValue`U4=~v     *     ,              k  k    \   = * *=& storeEntityValue =  =  [44=normalizeLines [4=                  =   = (@\44=)!reportProcessingInstruction@\4=tlk            8 =  = ]44= reportComment]4=A98       =  = ^44= reportDefault^4=^VU        4 =  M M=  _4H4=defineAttribute_4=                U        ( =   = !a4p4="setElementTypePrefixa4=ldc      @    @  =  = c4P4=getAttributeIdc4=,$ 3 / / 3 / 3 3 3 8 ? B B B B B B B I P P P P P( S S S U W8 =  } }= g44= getContextg4= n i i q q s@ v v    D   @   x  @     D: :=  j4=  =  : :=   h4= }] ]=vh4= h4=  =   = l44= setContextl4=                  D    *  /P   =   = p484=normalizePublicIdp4=ZRQ          = ! !=dtdInit = $ $=  dtdDestroy =  = q44= dtdCopyq 4=  : 0  0  0  0  0 9 > U J J O O T Z G p j j m p s x x z { ~    } o         (         L: :=  u4= : :=  hv4= ] ]=vhv4= @w4= : :=  u4= ] ]=vu4= u4=   = : :=  s4= e] ]= vs4= s4=  : :=  r4= D] ]=vr4= r4=  : :=  q4= 7 =/vq4= q4= q4= q4= (r4= p = P) )=%copyEntityTable =  =keyeq =  = x44= hashx4=jba              = & &= x44= lookupx4=          !                                    3     @Z Z=  y4=  :e4=  ] ]=vy4= y4=  =  = }404=hashTableDestroy}4=910 % " & % *, = ' '=# hashTableInit = + +='hashTableIterInit =  = `~4P4= hashTableIterNext`~4=>65 A A A A A F  = " "=poolInit =  = ~4p4= poolClear~4=_WV W  d c Z [ [ [ d c  =  = p44= poolDestroy p4=D<; i l q s y$ =  = @44= poolAppend@4=4,+   , =  = 044=poolCopyString04=+#"  0  = ) )=%poolCopyStringN  =  = 44=poolStoreString4= $ = ^ ^= 44=poolGrow4= !            l             = 8 <6e4R=e4q=e4=e4=e4U>e4.U>e4MU>e46e4 =e4J*-e44=e44=e49_:e409@e4g9=e49=e49=e4:=e4 =    decc$memcmp decc$abort decc$free decc$calloc decc$malloc decc$reallocXmlParseXmlDeclXmlInitEncoding(XmlGetUtf8InternalEncoding XmlUtf8Encode(XmlSizeOfUnknownEncoding XmlInitUnknownEncoding XmlPrologStateInitOTS$MOVE  c$meww1 dَ]V1.0BBxml tokV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$it/$CODE$|& $LITERAL$ $LINK$4$DATA$$BSS$  $READONLY_ADDR$ $READONLY$0J/XmlParseXmlDecl0J`-XmlInitEncoding@J,XmlGetUtf8InternalEncoding@J,XmlGetUtf16InternalEncoding0 J0 XmlUtf8Encode0JXmlUtf16Encode@JXmlSizeOfUnknownEncoding8J #XmlInitUnknownEncoding =Gk//.x4G.Jp"1"WJpFJ`F J#FB0F1K.JPpBBBPBFCk//.q.4G"ۦ/JtJ1"FW`Jp"K0JFp`F JB0 G#FB H.JPBBBPBFC/k ///.4G.Jp"1"WJpFJ`F J#FB0F1K.JPpBBBPBFCk//.q.4G"ۦ/JtJ1"FW`Jp"K0JFp`F JB0 G#FB H.JPBBBPBFC/k///."JB`.JFCk//B"1"/ .JB/K7B7B1Gk/GGk/.J1"Bq.qJ&FCk//#2F~^^~ (0޴8GG[GG G1,G1H%D 3U/ DM`/.h"Jp@Hp.pJwB\BR@ Ck/// @GGTGY@J`c[@ZkJ D.//0@GTGyBCdcG[@ZkB D//0@GTGB;hcG[@Zk: D// D &.&J%F  D2// ///G]]} (0ݤ8@#k// D //ŰG/ //ŰG/  //ŰG/ŰG/.GJ؇FŰ/G Ű2QBtGG4Gx@F"/1@q/[pKgK FF@/k//4Gq/Q"1"4G[rKgKIFMF@/k///4Gq/4G1"[qKgK)F-F k/4GG /k///GS4G/k///#2F^~ ^(~08@޴HPGGGGGG> M///$,"$Ha@Ha/aK! @#@\<@=Ck// 0//2@ GGY@BTG /-@Tc[/@Zk&/!@ GGy @TG / Xc[/@Zk/!@ GG @TG /  \c[/@ZkD/H ///.Jp@HP.PJ0BB\B`XCk// D? ///5@GGTGYB.Hc[@Zk. D? /!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D?  /氷// //氯// //氧// //氟//G=G}"_氕 DP/."Ju@H.JB\BBCk///$@GGTGY@>`c[@Zk> D_ s/!@GGTGy @6 dc[@Zk6 D_ c/!@GGTG @. hc[@Zk. D_ S/ D- .JF G/ D_ A/// < //7// 4///// ,//'//#// //G=G}"w_  D/.J؇F  /////GG] ](}08@ݤHP`#k///#2F ~^^~ (0޴8;@GG.GGGGJBH.JWB\BsP&C/k///  "DF D/ GKKGb@ D.PJ" GGFZ@///  D/.GJt@H.JUa@@f/G 8@ GGYCTG`c[@Zk//Gz ///!@ GGy @TGo dc[@Zk//Gf //!@ GG @TG[ hc[@Zk//GR //GK/ DE /.Jp@HP.PJWB\B6`$&Ck///5@GGTGYB.`c[@Zk* D?&> //!@GGTGy @ dc[@Zk D?//!@GGTG @ hc[@Zk  D?// D?/GG]]} (0ݤ8@P#k///#2F~^^~ (0޴8 =@GGGGGG $,"$Ha@Ha/aK! @#@\<@h$Ck// 0//2@ GGY@BTG /@Tc[/@Zk/!@ GGy @TG / Xc[/@Zk/!@ GG @TG / \c[/@ZkD/H ///.Jp@HP.PJ0BB\B}`$Ck// D? y///5@GGTGYB.Hc[@Zk. D? g/!@GGTGy @& Lc[@Zk& D? W/!@GGTG @ Pc[@Zk D? G/C// @//;// 8//3// 0//+/ / D/'.G'Jq@Hq.qJ9!Bx!F}!B/ "F  D / //G //GG]]} (0ݤ8@P#k///#2F~^^~ (0޴8@GGGGGG $,"$Ha@Ha/aK! @#@\<@Ck// 0//2@ GGY@BTG /y@Tc[/@Zkr/!@ GGy @TG /i Xc[/@Zkb /!@ GG @TG /Y \c[/@ZkRD/H ///.Jp@HP.PJ0BB\B]`Ck// D? 9///5@GGTGYB.Hc[@Zk. D? '/!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// ////4G  // d"DeF$.$J/Fo _.Ju@H.J5B7Bfs"%#eF%CyBO[G/?@///3,`F3Ha@H,H"@C@=#@I 3.s"3Jq@H.J"@9=#@? .s"J`@H/K"@/`=#@5 S/s"SKb@H,H"@%=#@+ S.s"SJr@H2.2J"@=#@! s"yBeF////,H`@H`/`K"@ @=#@ s"eF/_ w/X"DTG s"fp//fk//,E" EBHg@H.J8D_ D@T FE/$/D$Ku@H/KXF8FJ@MD, DHa@Ha.aJX"D8#D/?///? . Jg@H,HXD8D2 5. Jv@H6/6KXF8F/'///'d/ dKz@H.JXF8F@ @D////$,$Ha@H,HX"D8#D/  D /TG GG]]} (0ݤ8@P#k///C#D^~^ ~(0 8޴@GGGGG>j//B@/@Kz@H:.:J1 B#B\//}Ge8 6//=G%0ݠGŰ,]4GB E'///}c dD}c.GcJgF`etGc eGG  //=G%  //]GE //}Ge=G%ð#2F~^^~ (0޴8@GGGGGG v$,"$Ha@Ha/aK! @#@\<@i%Ck// 0//2@ GGY@BTG /Y@Tc[/@ZkR/!@ GGy @TG /I Xc[/@ZkB/!@ GG @TG /9 \c[/@Zk2D/H ///.Jp@HP.PJ0BB\B`0%Ck// D? ///5@GGTGYB.Hc[@Zk. D? /!@GGTGy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// //// D/'.'Jq@Hq.qJ1 B#B\Ck///2@GGTGY@BB@`d[@ZkB D-//0@GTGyB;ddG[@Zk: D//0@GTGB3hdG[@Zk2 D //#D"   / D- D G]]} (0ݤ8@P#k/ //G/ //G/ //G/G/G%.%J@HD.DJ@Ճ@`@FrF//$1@W@$CpD///#2F (~^^~ (0޴8;@HG.GGGGGJBH.J5QBWB\BX"Ck//GGD"b#GG5_ӞGGD"b#GG-_Ӗ#  ( D .Jp@HP.PJ0BB\B`!Ck// G $"DGG/y.Jv@H/KFBBxFA [Gb#@//g_g/ D /.(Jp@HP.PJ01BB\BU`!Ck// D M/// G"#FD.Jw@H#/#K9a@b@ @]a@cDaG`D5 G4//G//4G *GG$"b#G_#/G  $ %D/ /$ // D/$.$Jq@Hq.qJ8!FU!B"B F//  D/G"F  DG///G/GG$"b#G_/G 4G   $"d"D%F`$, $H+D/ D.SJGFTG@ //TG/G  ( D.Jt@H.J#1a@wc@\|@,!Ck//G tG G G/G%  4G  (" D D/DKz@H.J0BB\B Ck// 0//3@ GGY`BTG /q`Tc[/@Zkj/!@ GGy @TG /a Xc[/@ZkZ/!@ GG @TG /Q \c[/@ZkJD/H ///.(Jp@HP.PJ0BB\B]`H Ck// D? 1///5@GGTGYB.Hc[@Zk. D? /!@GGT& Gy @& Lc[@Zk& D? /!@GGTG @ Pc[@Zk D? /// //// //// ////G///0@ GTGYBTG!/TcG[@Zk@HcGGTGtG![@Zk6!@ GGy @TGTG! Xc[/@Zk(LcGGTGtG![@Zk!@ GG @TGTG! \c[/@Zk' PcGGTGtG![@ZkTG//tG!E/H ///.(Jp@HP.PJ0BB\Bu`Ck//!E? Cq///5@GGTGYB.Hc[@Zk.!E? C_/!@GGTGy @& Lc[@Zk&!E? CO/!@GGTG @ Pc[@Zk!E? C?/ t?=;// 8//3// 0//+// (//( #//G/xDG!xDG!xD G!//GG]]} (0ݤ8@HP#k//#2F~^G  #k/G///.;JBH/K6QBwB\B Ck//1"2F_ 1"2F_1"2F_1"2F_/3GG] #k/5FG]1"{# #{///3GG] #) k/5FG1 3G] #k//5F "F@G] #k/.GJBH/KUBBG] #k//5FG1#3G] #k//#2F G~^^G&G/."JBH/K6qBwB\B XCk//1"2F_ 1"2F_1"2F_1"2F_/3G//G]] #k//5F1"b#_//5F1"b#_//5F* GQ S//5F 1 2D_.GJBH.JUB0@31"R"2F/6///.(;JBH.J51BWB\BXCk//,H8D/3G/k///.JF////.#WJJBBF/ ///1"2F?4Gk///3Gk/GG//4G///1"///.8ۦJBH7/7K7qBWB\B?Ck// @9HyB9 + F4F 4G1"/// @!HaB! !?G4 G !4G1"/// @6HvB6 6?G4 G 64G1"/// @!HaB! !?G4 G !/XF @!H"aBTGG/F6H @vB?G//60@XF @9H# yBTGG/F7H @wBG// 70@ø @9H}yB1" 9?D 9{///8FGpøUB @6HGvBj? 6?Gg?, 7F//K$D" /KF1 KBH!/!KFS? G 1"R//8F GHáUB @7H6DwBB? 71"?G 7A/XF:k/#1"~^G.JGOFxGF/S`B@&/.PB F"B1"VJJB0B B; Q/QKxD/PBBq"ZSKGK1"pB0B B-@.JxF!1#XJPBKB1"Q"C0B B ,HxDq.SrJPBB1"gJPB0B B/.JxF///- G]{# #3//G] #k///1"Kx'D?_'//q.Q"SrJgJ9HB51LB 9JYB6*CB J@B9&CFHBG//!J2FBCAF7ABAF1" B`.JxF//G] #k//2QB"CXFCxFCFG`2Y.UJJ8F8F1"Q/K1"G/K,H DGq/G1"qK.FT$F/k///q.G1"qJ1"nF5`Q.QJ1" F//.Jx.F$Fk/>. /.GJ1"8F"1/1K G1"1,1H.D$D/k///q/G"1"tKF q.SqJgJ,F-F@怔'Fk/Gk//Gk//q.xqJBH.J3`BcB\|BICk///,KH1"R"G/////..JJ1"R"F/'`///.2,J2H1"R"F/ ,.H1"JR"DGk/r./rJKR"1"F/Gk/Gk//Gk//G/ k//1,.x1HJ5DJ BH0/0K0BB\B/ $C/k///Gk//4Gk//.J6/2F F`F3./J1"2FKs"F-s/sKs""/#.JF1"2F!3/3Ks"/1,1H1"2F Ds/sKs" / .JF1" 3/3K2Bk/Gk//Gk//G// LO=/q.qJBH.J3`BcB\|B0 Ck//1"//1"//1"//1"// 2Bk//G// @.@JBH.J]ABBB9ABFUF/_k//2F? ;/,HBH.J @@\@)Ck//1"#//1"//1"//1"30B//1"2F0@.JBH,HU@ B3/1"2F0Bk/4B6UBC B#BUB //2/ "2  D1 K2#DDR"UB`.JFF R"UB/KGGR"UB?Fr#rCBHF;///.0,"0#F#FJA0H"`J" D0<.,J@H"aJ5#D<.,J@H#aJ"D<.,JaJ@HD0#<.,J@HBaJD<F///5,.5HVJ"Fx0H"F>k//Ӣ#?'~^$9#^G BB?$F|///2 u/U#uKBH.JFFFZ`v#tG?///+c`/u/KF7WJ#xKu/zKGu/8KGGF:@K#xKGF_#F#7BVJF7CDVX/ZXK"bJBGX?W.xvKWJF">9U/U ZBKGKS/XK"{VH"G?,///U/.#u/UKJU#"ADFzK"AH7JGGWDZD?v/wVH[vK"wGv?U/.#UKJ"CDF"@HWD5V/ZVKxVH"XGV?BBF_ӲG]]3 #k///X/ JZ XKBGX?//. vKW JF>/// VHX KG?//v/ VH[ vKwGv?//V/ VHZ VKXGV?//F6/.JFJF3 B'Dy#Y@"(s/`9HXKG?xJu#s.WJF>19#C1Fk//s"tG" Ѳ,;,HuHA;H5D;<Fk//F#F"B1 y/@FyK5,A5H"{5K4 ;D5< Ӳ1 / K.PJ2DuHFG>?k/5, 5KA 5H;D5<//. HP JF>//F&/F"/ 1 y/.VJyKw5KF>G34D`""8/a/8KpK[aKpGa?ѢF/k//F?FB1?BBB7 B GqG#Fk///Gk//BGF/k///#~^GF////./"JKGIB5 ;BZ w`CpFWKv`KA?@!G7B;DpGu#B0 @8Ksu/W Hp DF! H"zJ!G[uK/DzGu?y5H"Ӳu/[uKyGu?Ӣ.J"p#P/[Kp@GZ_C HG6/GFY6K'D! "{J;G6?Sy:H#.WJFF>?]3C//`F"{KS ."FVJF>?J/3GVBG K#6GF7ByJ"YB<."WJF>yKU#S.WJFF>?+//sH6 FDVB!B[#y @ S;/aHG@KFG#"Y;KF!G;? {J5/Y5K;G5?S .wKFVJF>/S?G] #k/ 2 5B8WBCBB7JB C2/ KDDDF/0///F"*`ӲB5/. 5 2@ KJ HD/.WJxG!#uHF>1".a/JaK7JF! /.yHUJF>12D?k//. HW JF>//.7 HU JF>//#~^GF////./0#JKGIB;BZ w`CpFWKv`KA?@!G7B;DpGu#B0 @8Ksu/W Hp DF! H"zJ!G[uK/DzGu?y5H"0 Ӳu/[uKyGu?Ӣ.J"P/PKp@GZ_C HG6/GFY6K'D! "{J;G6?Sy:H#.WJFF>?]3C//`F"{KS ."FVJF> $_=?J8 /3GVBG K#6GF7ByJ"YB<."WJF>yKU#S.WJFF>?+//sHFDVB!B[#y @ S;/aHG@KFG#"Y;KF!G;? {J5/Y5K;G5?S .wKFVJF>/S?G] #k/ 2 5B8WBCBB7JB C2/ KDDDF/0///F"*`ӲB5/.5 2@5K"J HD/.WJxGuH9  F>1".a/J`K7JF! /.yHUJF>12D?k//. HW JF>//. HU JF>//2FGGGp1,GQ#":HF/ q/qKFc@//7,w#;H/ .JBH@/@K /W/w/7  [aKZ@KgKGK_Ӻw@=/ @X\@HCk//0WBYBE/"///F Gk///1WB"y BF7 /// G/k///: ;WB"`C/+`F// G/k///"7 F/ @,H/.JF"F/@ G/k/// Gk/ Gk/ Gk/GG/k///W/G7 AK 7.7JF"Gk///GG/k///3GG/k///2QBtGG @F"/M@q/pK/ Q.R@JGJ DD `/4Gk/4Gk//4G.Q" 1"J ; q/[`KgK D D @ 4G/k///4Gk//4G.q#1"JQ.RQJGJ)F-F/ 4G /k///4Gk//4GG /k///Gs4G/k///#2FGG^~GG^ GGG 67,W#:H/ w/wKBH0.0J /W/W. 7 R@JZAKGJGK_GxU0BB@\BCk/7,U7"w/1H4GpR"ABwK.HD  JJA:@A2@! DC/< ///U4G"F:`pB //.W#J/7.7JBH,H /7.w/W#7 [zKQ!JgK'JC_x @5@@\@Ck//.w/7"JwKP@@KCG,:ZJH@@@@DC///"F? ///8C YC///8C yC///8C C///GGG}"_///"F/-@///W/7 AK/ .JBHP.PJ /,w.w#= W S{J@HgJH_GuB @x\B@Ck//"CY@@-@/"///F f:C"y@CF#@ ^!C" @F  V" F/ w/`K/W.WJF"E/// @// <// 8// 4//GGG}"_* "FW '.J"@.JF"//8C YC///8C yC/ //8C C//> //GG]] 0#/k///#2FGG~^G G #k//9WB 1 G G] #k//B7,W#:H w/wKBH0.0J /7// W#XKY:KK'K'_G5WB\BCk// #G/@G] #k//8, 8"1H x/xK F#G/ G] #k//.GX#J8.8J'D #G] #/k///? #s// "F/@G] #k//w/"pK/7/7KBH6.6J /W.7,# A8HR@J'HGJ_GG7#X!F9FG] #/k///G"G] #/k///8WB YC//G] #k//:WB y@C/@G] #k//#//!WB @/ G] #k//# //GG] #k/#G)/x/8"qK/ 8/8K@  n=BH9,9H /x/,"8"@H[qKHgK[_GW!@ \<@hCk//:XBY@C@/#G?/GG] #k/1XBy B?#G?/ XB@#G?/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H _G50BB@\BCk/7.H54Gw#,;Jp! 1@H.HD @KA JPBAB! DC////H54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@HCk//.w/7"JwK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/s@G] #k//"F2`/.7 JB / W/WKBH.J /,/7#w#XK@HKHc_GG9!Bx!FN}!B//// "G] #/k///"F: "F_G] #k/G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/#2FGG~^GG  #k//7,W#C :H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G50BB-@\B8Ck/7.h54Gw#,;Jp! 1@H.HD @KJPBAB! DC////h54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@Ck//.w/7"JwK0C@KCG,:KH@@@@DC///"F?G] #k///2D WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//4G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/{@G] #k//"7 " FF`.Jr W/WK/FZ ?7/ K w/uKBHP/PK0B7BY/5,5"5#A1HXK'HK_0@7B/JE /"F/5/U#:K/ 5,5HBHa/aK //. U#PJXKJK_G"@/ =#@"F_G] #/k///X"DTG "G] #k//// .JBHp/pK8F////GG] #k/W/7/#"Y8KZUK'KGK_8D//"F/ ///7/"5K/W/WKBH!.!J /,w/"#[pK@HgKH_GX"D8#D F ?"FG] #k/TG"G] #/k///#CG^~D^ ~(08޴@HGhۤ>GGG4Gp //@/`#[K@.JP@Hp.pJ /@.@/ "`"ZQKRSJGKGJ7_Gt0BB@\BCk/ .@.`#;J@J@JFq.0HqJQ:BQ&B10FC2// C#G?/] r#D 2,;H r.`JS@H3.3J /@/ ,@"`"G A2HZSK'HGK_G!F9!B @`]!B/_"F?=$G/= !"D@A/QK .JP@HP.PJ / .`/ @"Q!J[rK'JgK_GBBG9BrF/ @@]B/?F?=$Ge/}{#}cG[`///@.@#ZJ@ . JP@Hp/pK / .@. `#RAJQ;JGJ'J_GTFBN`5@\BC/k///=1a@Y B/ '//}2s@s"y@BC@#F}?"H //=;q@1"`C`=C#F? ~=//]G}"t#2"Ga_=#F?=! C=#F?// ///G]] }(08ݤ@HP#k/]R"CF]/2#Kr/rK@@H , H /2..r""Q3JUJ'JJ3_ 1@4@\@Ck//#GX/8 AK 8.8JQ@H.J /.,x""GHUJHJ_G41 B#Bq\ e_>(" G"2UBAB7@x! .5">M U""FP C CJ*./"JK! F"u/rK"@,.HJD/"//G/G5"Pb#@_ ///G5"b#_///GG]] #/k///#2F 7QB~^GG^GG 1F7B/5#K5,5HBHa/aK ..5" PJVJJJ_G"W!@w\<@<Ck//G5"b#0_ӯ///G5"b#_ӧ/// N "5 F@U,AH/ .JBH.J /5/.#U#WJY:KJ'Kw_GGU"XFFG" U #u#RDz. J35/"K+G/ U RDo 5.;JG .JFd///B //6UB YB/Z//8UB U yCS//7UB U BK//GE/U RD=@/"/" !K/ b/bKBH.J /..# VJWJJJ_G7BBWBFFFO F淙B) / /B RD///!BBy @ B RD /;BBY`C`B RD//GS//G]] #k//"F?.#"B#RGJ.J F?".b#;J "#,HD/ FG///FGSG/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G(50B7BP @\BlCk/7.54Gw#,;Jp! 1@H.HD @KJPB =AB! DC////54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGKW_( @5@@\@Ck//.w/7"JwK0C@KCG,:KH@@@@DCk///"F?G] #k///2WB Y@B/W@G] #k//2WB y@B/Q K@G] #k//2WB @B/?@G] #k//G"G] #/k///2WB Y@B/'@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/GG] #k/#2FGG~^GG  #k//7,W#:H/ w/wKBH0.0J /7,,W#w#@HA;HH'H_G50BBR @\BCk/7.54Gw#,;Jp! 1@H.HD @KJPBAB! DC////54G"F: p9#//w/"pK/W/WKBH,H /7.W/w#7 Q;JZAK'JGKc_Ө @5@v@\@\Ck//.w/7"JwK0C@KCG,:KH@@@@DC_///"F?G] #k///2WB Y@B/K@G] #k//2WB y@B/?@G] #k//2WBS  @B/3@G] #k//GG] #k/2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/SFGGG-GG/2,R#:H/ r/rKCH0.0J /2,,R#r#@HA;HH'H_G=B @@\BCk//1rBY B9 /R"///SF_ Gk///;rBR"y`CSF+`//T /_ G/k/// rBR"@SF///_ G/k///FR"SF `G/k/// Gk/ Gk/ Gk/TGG/k///T2"2,1H r/rKCH.J /r..R"R#WJSrJJgJS_GGBBBGGrFk/01BGWB0CpFk//#2FGG~^GG^GG g/9B  1 Ga B5,U#:H u/uKBH0.U 0J /U.u" RSJXKGJK_G(B0QBWBE \BCk/GGU"b#GG%_:GGU"b#GG_2 "5"F- .J/U.UJBH/K /u/5/U#5 Y:K[aK'KgK_G(2@BCB`\\B8Ck/ "5 F  U/AK/ .JBHp/pK //u.U"5#SrJXKgJK_G5"b#FBBxFc@xFG/`G//G_"F$ /5,"0H/V 5.5JBHq.qJ /u//U# XK[`KKgK_G(B11!B"B \l //:WB y@C/@G] #k//#//!WB @/ G] #k//# //GG] #k/#G)/x/X#xK/ 8/:KBH9,9H /,x/"8"@H[qKHgK_GW!@ H\<@ Ck//:XBY@C@/#G?/GG] #k/1XBy B?#G?/ XB@#G?/#2FGG~^GG  #k//m 7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'HK_G50BB@\B Ck/7.5W#,7Jp! 1@H4G.HD @KJPBAB! DC////54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK _Ө @5@@\@t Ck//.w/W#JzK0C@KCG,:KH@@@@DC///"F?G] #k//n /2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/s@G] #k//"F2`/.7"J/ W/QKBH.J //,7#w#XK@HKH_GG9!Bx!FN}!B//// "G] #/k///"F: "F_G] #k/G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@o G] #k//2WB @B/@G] #k//GG] #k/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H#_G50BB-@\BdCk/7.(5W#,7Jp! 1@H4G.HD @KJPBAB! DC////(54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGKp _ @5@@\@Ck//.w/W#JzK0C@KCG,:KH@@@@DC///"F?G] #k///2WB Y@B/@G] #k//2WB y@B/@G]  = #k//2WB @B/@G] #k//4G"G] #/k///2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB q @B/{@G] #k//"7""FF`.J"r W/QK/FZ ?7/5K w/pKBHP/PK0B7BY5,/5"5#A1HXK'HK?_0@7B/J/"F/5/5"5K/ 5,1HBHa/aK /./ U#PJXKJK_G"@/ =#@"F_G] #/k///X"DTG "G] #k//// .7"JBHp/pK8F///r GG] #k/7/W/#"Y8KZUK'KGK_8D//"F/ ///7/7 7K/W/AKBH!.!J /w/,"#[pK@HgKH_GX"D8#D ?"FG] #k/TG"G] #/k///#CG^~D^ ~(08޴@HG(ۤ>GGG4Gp //@/@"@K@.JP@Hp.pJ /@/@. "`"ZQKRSJGKGJw_Gt0BB@s \B Ck/ .@." JPJ@JFq.0HqJQ:BQ&B10FC2// C#G?/] R#D 2, H r.zJS@H3.3J / ,@/@"`"A2HZSK'HGK7_G!F9!B @`]!B/_"F?=$G/= a#D@A/@K .JP@HP.PJ / .`/ @"Q!J[rK'JgK_GBBG9BrF/ @@]B/?F?=$Ge/}{#}cG[`///t @."@J@ .0JP@Hp/pK /@. . `#RAJQ;JGJ'J_GTFBN`5@\B C/k///=1a@Y B/ '//}2s@s"y@BC@#F}?"//=;q@1"`C`=C#F?//]G}"t#2"Ga_=#F?=! C=#F?// ///G]] }(08ݤ@HP#k/]R"CF]/ Kr/`K@@H , H /2..r""Q3JUJ'JJu s_ 1@4@\@ Ck//#GX/x#XK 8.;JQ@H.J /,.x""GHUJHJO_G41 B#Bq\ m_>" G"2UBAB7@! .P C"5" CU#@GJ*..JJ"! F"u/"uK@,.HJD/"//G/G5"Pb#D_ ///G5"b#_///GG]] #/k///#2F 7QB~^GG^GGz  1F7B/U#K5,:HBHa/aK ..5" PJVJJJ_G"W!@wh\<@h Ck//G5"b#0_ӯ///G5"b#_ӧ/// "5"F@U,UH/ .JBH.J /.5/#U#WJY:KJ'K_GGU"XFFG" U U#"RDz. J35/:K+G/ U RDo 5."JG .JFd///B //6UB YB/Z{ //8UB U yCS//7UB U BK//GE/U RD=@/"/"""K/ b/qKBH.J /..# VJWJJJW_G7BBWBFFFF淙B) / /B RD///!BBy @ B RD /;BBY`C`B RD//GS//G]] #k//"F?.#"B#RGJ.J F?".b#;J "#,HD/ FG/| //FGSG/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H_G50B7B@\BCk/7.H5W#,7Jp! 1@H4G.HD @KJPBAB! DC////H54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK_ @5@@\@4Ck//.w/W#} JzK0C@KCG,:KH@@@@DCk///"F?G] #k///2WB Y@B/W@G] #k//2WB y@B/K@G] #k//2WB @B/?@G] #k//G"G] #/k///2WB Y@B/'@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/GG] #~ k/#2FGG~^GG  #k//7,"7H/ w/pKBH0.0J /,7,W#w#@HA;HH'H_Gh50BB@\BCk/7.5W#,7Jp! 1@H4G.HD @KJPBAB! DC////54G"F: p9#//w/7 wK/W/AKBH,H /7.W/w#7 Q;JZAK'JGK_h @5@v@\@Ck//.w/W#JzK0C@KCG,:KH@@@ @DC_///"F?G] #k///2WB Y@B/K@G] #k//2WB y@B/?@G] #k//2WB @B/3@G] #k//GG] #k/2WB Y@B/@G] #k//2WB y@B/@G] #k//2WB @B/@G] #k//GG] #k/SFGGG-GG/2,"2H/ r/pKCH0.0J  /,2,R#r#@HA;HH'H_G=B @\BCk//1rBY B9 /R"///SF_ Gk///;rBR"y`CSF+`///_ G/k/// rBR"@SF///_ G/k///FR"SF `G/k/// Gk =/ Gk/ Gk/TGG/k///T"2,2H r/pKCH.J /.r.R"R#WJ SrJJgJ_GGBBBGGrFk/01BGWB0CpFk//#2FGG~^GG^GG g/9B  1 Ga B5,"5H u/pKBH0.0J U./u" RSJXKGJKW_GB0QBWBE \BCk/GGU"b#GG%_:GGU"b#GG_2 "u"F- .J/U.SJBH/K /5/u/U#5 Y:K[aK'KgK#_G2@BCB`\\BdCk / "5"F  U/UK/ .JBHp/pK /u./U"5#SrJXKgJK_G5"b#FBBxFc@xFG/`G//G_"F$ /5,U"5H/ 5.2JBHq.qJ //u/U# XK[`KKgK_GB11!B"B \ KiaB9# aG ag///8F G9#_///UB C!K@GaBY#Q FNd;G,`///`9.:JG9 y#$F ,H@.JGY#F/y,zHBH#.#J 9,,y#Y#A;H@H'HHg_GbD/` $9#?D $//8FG9#///UB C K;F`B 9#?D /XF//9#//G]]G} (0#k///#1"~^ G.JG@q."uJoF%`&. Q#J 1, HxDO///A:H'H? PB1"B0@0&@ B/_///G] #k//&1"//q."qJ/ `Q/WKxF'1 //`ZAKGK? 9(@@6J 1,@6@8B@9JD9@(@6B1"F BG_/3J!&@1"C3D7!@3D B_//G]x{# #//2QB#CBPB7JXFxFFr`Q/.J/.W JJ///"Q""8F8F 1"/{,H1"wq/rKGNFr@q.qJo`.1"J Fj.Jg1/1"1K.FT$Fk/.1"Q""GJ1"/W q/rKNFS@.J1"O`.J FK/K1"G1/1Kx.F$Fk//.GQ""J1"9 q/rK8LF5@.J2`.J F1"-/K1")1/1K.F$F/k///.1 Q"J q/rKNF@.J1"`.VJJ///?" G,F-F怔'Fk/Gk//Gk//#GGG~^G. J/6/ KBH , H /V/6.v##Z[KQ8JGK'J_ @@k x\@Ck//R/"RKR"F> //.r/JrK"R"F/;///,R/HRK"R"D/76.2/6J"2KR"0FG]G #k//"KR"F*2,v/2HvKDR""G]G #/k///G] G #k//G]G #k//G]G #k//G]G #k//2.#2J/R/XKBH.J /2,2/R"r#A;HY2K'H'K_Gx5BB \BCk/G]G #k//G]4G #k//.JJ/2F1#q#`GG.q#`FJ1"2FB/,KHs"G;.Js"0////.J1"2F.1,;H"0D) /Ks"/. J1"2F1/"6KFs/sKs"/ /K1".JF 3/3K/2Bk/Gk//Gk//#GGG~^GG///. J/5/ KBH , H /U/5.u##Z[KQ8JGK'J_Ө @3@\@0Ck//"//"//"//"//G] B #k/ l =/#GG~^G/.#J/ .JwBH7/7K /,T/4 t#@HZ[KHGK_G]BB9BFF/"/G]G #k//2FGGGe#?#~^G/,w#H/W/[KBH.J /7.7,# Q8JA H'J'H{_GU0BB:\BCk/"3//"///3"30 @3'//"w#F0@W/WK 7,;H#BH,3HXDD.W/#7"PJZQK#JGKB_X DD3//"3F0 @3G] #k/G4G27GJ3gJ,q/F FHqK"1"!H;J" 3@ 2@ sC rCFF"7DFDFD6/..JJ!Ju#"1"4J 3@ 2@ B BD6 FDFFFF.q/JqK4H6'H B B`#"1" B BF"FFFD?DD/ 4G/k///Gk//GGG{#0_G/k///# ~"~"> ^G >"8p(G[@Zk= D G ]( 0#k///G ](0# HH/k///#2F4G^~^ ~(08޴@HGGGGGGP  HGGGb#_ӡ]@@@9@0D1D D7///@CGb#@GG_ӡ]@@@9@0D1D DD@4G$GGb#G_ / ///D@@b#]@9@G2FG3F Fs@@G_ ?/G/ /G]] }(08ݤ@HP#k///ƠD@c@GGb#G^_ӡ]@@@9@0DG1D2D /@cGGb#@GM_ӡ]@@@9@0DG1D2D/?U@@tF@ ݢ&H@HGb#GG4_D //01 @11@2@@7B7#B7AB@F @FFFF@@GGb#G_D/?@c4G@g//=//@CGb#@GG_ӡ]@@@9@0D1D2D?D~ //#0^~8^@~HPX޴`hG#GGGG{#@BUB&BuB(  G}" =G""_=@ =?@D%dGG]=[ G@Zk=#`%/p]=@2 =GG ""}""b#_ =/%/ = /`%/4G//d]G(g"=G[/@Zk2=Gb#G_!1 @ 1@7#@7@ Dx}]`S(} = GtG@Ģ[2B@Zk= =G ]"^G}"""b#_ =%c/4G`/d]G8g"=G[/@Zk@=`D%O/d@Gg" ]=G[2TB@Zk4G0d@Gg" ]=G[2TB@Zk// =GGb#,_ӣ]@@@9@gDaD D////@$ Gb#BG =_ӧ]@@@9@DaD D/ F//4G//]EGG0]8]@} HPXݤ`hp#k//JG&";B"@_&;B@R"@ ?BF0D3Dk// k// ? B(P.PJF/k///gBrJ/ ,@HD<4Gk/JF0 " 1,XF{#sQJvtKTGA1H3D1<.UJF>k/?$JJ B\FgFF .{QJs"w`J"Q"VJF>1,A HvJtG7D1<.UJF>k///'WJJ" B>DgFJ`.u1Hs"{vJFF1 " "TJF"sJ>,tJ@HD<Q.RAJTFQ>,@HD<Gk//Gk//_&. B/`///+ .vJ4GUJF>/k///&?# B0BWJF'# q/&"sK"[qKsGq?.vJUJTGF>k//Gk//. JU JF>//q/ K[ qKsGq?//. JU JF>//t k//#TG~^^GGlp D=p[ /@Zk!H// G/"HDD`J4G Jp1"0BP.PJPBBPBFCG]] #k/#TG~^^GGlpp[/@Zk!H// G/"HDD`J4G Jp1"0BP.PJPBBPBFCG]] #k/#TG~^^GGlpp[/@Zk!HGb#C //_Ӡ@G]] #/k///#^~^ ~(08޴@GGGGGG12F //.JWBt7/u u"Y K'KTGlb[p@ZkG="_"8@ @s#Y/YKA@H.J!C! #e1"3@ @d`#@/O///Ţ @F#v#eW/6,WKrJ"A6H2D6<e3"%.S/JaJ7"ZSKAGS?P"E7//W"1KXKa0JG?e"w/3/rKaSJ"Y3K!G3?0"%/p/KaJ7"@[pKaGp?Er"e7//1Ka2JXKG?////E 1@z#e .:.JrJ"Q:J2F:>#$F/wG]] }(08ݤ@P#k/#~^^~F (0޴8@G7ӢGGGGGF///GKCX@t8,t  H3GGTG;vH`lb[p@Zk#.JP@HP.PJ0@! # "Ų5/zHBY5K:G5?㢱B6F/?G]]} (0ݤ8@P#/k///@/Z @K:D5/ HY 5K:G5?//`#GGC^~ ^ (~08@޴HPX>`^h~px޵G{c G ^~5,B""zJA5H":D5.PHzHWJU" F>u.pJ{JSrJ{Fu>HC#GG4G4G.JBCFwaG+`0 @0@Z#"ݢ%%H t Gt!!p! G G tG!JaHb"/`f/[fKaGf?H/`IZHK@GH?F4F'1?J'//G//@qEpEB"@&,"ApFHA&H 0D&<DTJWBrñP@b@I@G HV.LDb1@HVJCCBtFJFF f/[fKtGf?G_G4@GDz6JFDz.aJPJF>Q///Gy#_/.WJ>.zIUJF>F4FG2_JG9/// L@AH_DCDo`AJ.6HpfICJTBBTBF&,A&H0D&</ATG. .WJ J@@B@@DDtFJF>'"G_'D?D D'/c(.rHHQ(J2F(> 0 Ai" J!  !Wݡ } ylnp(909 `TnXn\nH.L.P.`.d.h.8@<G8///G] ](}08@ݤHPX=`]h}pxݥ#k/G//G//G//H/ IZ HK@GH? //F. JP JF>U//. IU JF>_//(. HHQ (J2F(>//#GG~^^~ GG {G#_c 0@@@@/_ //G] ]} 0#k/G//#tF~^G  #k/H15@B S#TG8`G5@/`G] #k//DQ :FKGK:q@CW@C @G] #/k///S/SKBBCFF /BDQ0@KzG@G] #/k///.s/S#JzK&'"{#v1JF_'Z#FF Fb98@F'`D0HFfGs"uG] #/k///s/8@FsK/@ D0JFNT.5@B"JFFLDѢ8@F0JF?Gs"uG] #k/8@F D19&K'K C C Cu C[GWGF'"F/G] #k//s#KGG]G #k///DQ8@F0@K@Gx@G F////D11&J'JP0B///RPBGGrGGG] #k///8@FPp k/`0 k/GGGGGGx x-=`X{#" //GGGGG4G{#"//#G^~{#^ GGG>_  GD"`1H(x01?J F D"]b0HB4GZG]] 0#k///@#^~ ~""^~GGG~G>^>"C8p~"[@Zk=DG/ "P.RPJP> "U_/@GXG/// "b#_#G/bC @@G]]} #k/#GGG~^G{#G#G ](0]@^GG^_G] #/k = P`p= =pd=pd=pd000000000000 00P0PPPP0P=xl0@0  000 00000000=xl``  ```````  ```  ``````=pd@p=ph0`   =pd@p```````````````=pd0`````````````` ` ````=xp P=XPP p`=@p =pd P  =H@```P``````=pd0Pp@=pd  =xp P=@8 ``= 0 P P P P P   pP P ` P P =xp p  `=`X   = pd    = 0    @ @ P =pd0@00000`00000000=@4@`=0$Pp=pd @ PPP00000=pd@p=pd P  =pd@  @@@@@ @@@ @@@@@@=pd0Pp@@@@@@ @@@ @@=pd`@@@@@@@ @@@@ @ @@@@=8,pp0Pp=8,@@00@ `@@@=8,pp0p= =pd=pd> =`X@@@@@@@@@@@@@@`@``` $= `@`=xl0@0  000 00000000=xlPPPPPPPPPPPPPPPPPP=pd@p =ph0`  =pd@p```````````````=pd0`````````````` ` ````=xp  P=XPP p`=@p=pd P  =H@```P``````=pd0PpP =pd  =xp  P =@8 ``= 0 P P P P P   pP P ` P P =xp p   `=`X   =pd    = 0    @ @ P =pd0@00000`000 00000=@4@`=0$Pp=pd @PPP00000=pd@p=pd P  =pd@  @@@@@ @@@ @@@@@@=pd0Pp@@@@@@ @@@@@=pd`@@@@@@@ @@@@ @ @@@@=8,pp0Pp=8,@@00@ `@@@=8,pp0p=pdP`p =pd=pdp@PPPPPPPPPPPPPPPP=xl  p 0` 0 P0 0 0=xl` =pdP=( 0  00| | H=PH00000000 000000 =pdP=pd   =xpp@ =XP`0=H@ppppppppp@=pd `pppppppppppp=pd0 =xpPP0Pp=@8ppppppPP=p         P  P P P P  0  =pPPPPP0=pd@  0 0 =xp   =`X`` `  =pd     =       p 0 =pd@@ P @ @ @ @ @ p @ @ @  @ @ @ @ @ =@4P p =0$@ p=pd00 0 0 0 00 0 0 0 0 0 0 0 =pdP=pd =pd0PPPp=pdP=pd                  =8,PP`P=8, ``PP````=4,00@@@00 =0;=0;=0"(;=0$ ;=0".;=( 0;=0 "p;=04 =0";=P4 =00" ;=p, =0"/;= ( H;=00P;;= 0 @;= ;=0"P);=  =00-;p=0-;=0"`-;=0  p;P ;;=0,;=0,;=0 !;=P4 =00;=0 ;=P(| =0;=0";=  =0";=  =0" ;=  =0" #; =X h;;H;;;=0;=0;=0X;=0 0;= , =0"p ;=  =0"` ;= $ =0 ;=0";=  =0;=0";=  =0"`;=04 =0";= , =0";= $ =0";= $ =0"0;= $ =0";= $ =0";=  $ =0;=0";=0, = 0";== 0" ;==0";= , =0";=P8 =0";= $ =0";= $ =0"`;= , =0"@;= ( =0 @;= , =0";=  =0"p;= $ =0;=0";= =0;=0";=  =0"P;=04 = 0";= , =0";= $ =0"t;= $ =0"0;= $ =0";= $ =0";= $ =0d;=0"f;=0, = 0"a;== 0" ;==0";= , =0"{; =P8 =0"o;= $ =0";= $ =0"`;= , =0"@k;= ( =0p`;=0 p];=   =0\;=0 Y;=  =0W;=0W;=0 V;=0  S;= , =00Q;=0O;=0@O;=00N;=0`L;=0J;=0" pH;=  =00E;=0 D;=0"P/;=P0 =0";=P0 =0"B;= $ =0"@;=  =0P;=0"P;=`0 =0";=@,| = 0"2;=P0 =0"@5;=P@ =0"p;=P0| =0";=P0 =0"$;=P0 =0"+;=@4| =0" ;=P< =0;=0;=0 ;=0;=0;=0; 4P444444X4h4(404x44  4` 4 4 P 40 4 4 4p 4` 4 4 4 44 4P 40 4=    !"# $@6 6=(  4  44 4 444 4 4p 4` 4 4P 40 4 4 4p 4` 4 4 4 44 4P 40 4=     !"# $@6 6=(  4 44 4 444 4 4 4` 4 4P 4 0 4 4 4p 4` 4 4 4 44 4 4 4=    !"# $-6=`V> $6P 4` 4 4P 40 4 4 4p 4` 4 4 4 44 4 4 4=    !"# $ 64`44@4 4P4@4 4444p44444=    !"# $ -6=`V$604`44@4 4P4@4 4444p44444=     !"# $-6=`V$6 4444`444`41 1@44 44 4444=    !"# $-6=`V$6  4444` 444`4@4444 4444=    !"# $-6=`V$6   6= versionyes =no(=UTF-80=UTF-168= encodingH= standaloneX= ISO-8859-1h= US-ASCIIx= UTF-16BE= UTF-16LE6 6=1@T?|/`#m^##=ǿ@ ?%l  6=H:? PP1b,@ɀ?????_@L?`?T{?|=?ӟ9mӇ9^; 9=ǿ==`=`@=%l;_??>fw Q6= +6=(6=XN !"#$%&' Q6= +6=(6=CDATA[=CDATA[=CDATA[? ?=/'&XMLTOKCompaq C V6.5-001u u= 44= isNever4=   = z z= 4 4= utf8_isName2 4=   = pz z= 4 4= utf8_isName34=  = | |= 4 4=utf8_isNmstrt24=   = p| |= 4 4=utf8_isNmstrt34=  =  = 4 4=utf8_isInvalid34=!    = } }= 4 4=utf8_isInvalid44=   = 0 = 4 4= normal_scanComment4=zy Z Z Z ^, c, c, c 0 u c l p = ) )=%normal_scanDecl =  = !P4p 4="normal_checkPiTargetP4=xw   #              = B B= P4 4= normal_scanPi P4=   , , , , , , , ,  ,  N,       /8 = 1 1=-%$normal_scanCdataSection = A A= # 4 4=$normal_cdataSectionTok 4= -  -  -  -  =  > ? @ D E L OE T, [ , [ , [ [8 =  = 4 4=normal_scanEndTag4= { {  ,  ,  ,          !8 = / /=+#"normal _scanHexCharRef = , ,=( normal_scanCharRef =  = 4 4=normal_scanRef4=80     ,   ,   ,        0 $ $ $  $      0 4 $ 4  &(       8Z Z=  4=  ^e4= Z Z=  4=  2e4= } }=v4= 4= `4= 0] ]=v4= h 4=  = N N= p4  4=normal_scanAttsp4=    ( , ) ( ( ) ( ( , ) ( , (y0 A A E B A A B A A E B A E$ A W X8 U U8 U U8 U U U  U U U  n  t t8  t8  t0  8  8  <  $ 4 M  g  O     { {   = @  = $4@ 4= normal_scanLt$4=   = , = , =  , =               # !  " " "D8Z Z=  *4=  8e4= ] ]=v*4=  *4=  = ` = +4` 4=normal_contentTok +4=         # ( + , - . 2 3 ?$ > , > , >  K >  > P Q >% >)0 U  = @ = P/4 4= normal_scanPercentP/4=wv o o }  , }   , }  , }    w 8 = p. .=*"!normal_scanPoundName =  = 24 4=normal_scanLit24=|{    , , ,    0    =  = @54 4=normal_prologTok @54=       8 Z             X  4             # ( + . 9 <     ,    ,   ,     p6 r, p6 r, p6 r, p6 r    m98Z Z=   :4=  e4= @] ]=v :4=  0:4= Z Z=  `64=  ge4= ] ]=v`6 4= l64= P\ = ` E E= %@4P 4=&normal_attributeValueTok@4=  1    ) -  ( ' " ! G         =  = "B40 4=# normal_entityValueTokB4=}|      # '     =  =  D4 4=normal_isPublicId D4=:21 S u0 U- } =  = 0E4 4=normal_getAtts0E4=W O   , O , O , O             1       I  O    E   = @ = !pH4 4="normal_charRefNumberpH4=                                  = PB B= (J4 4=)!normal_predefinedEntityNameJ4=   ( + / 6  5 6 8  "  @  ,  + ( A  =  = `L4 4=normal_sameName`L4=|ts H M0 \ G$ M4 M4 M4 l l l  }  =  = $0N4 4=%normal_nameMatchesAscii0N4=               =  = @O4p 4=normal_nameLength@O4='     =  = O4` 4= normal_skipSO4=     = P = "> 0P44=#normal_updatePosition0P4=VNM       =  = 0Q4P 4= utf8_toUtf80Q4=\TS ,   0        = ] ]=  S40 4= utf8_toUtf16  S4=              ! " # " "h )       $ # "    =  =  V4 4= latin1_toUtf8 V4=nfe         $    =  = W4 4=latin1_toUtf16W4=LDC    $     @ =  = W4 4= ascii_toUtf8W4=*"!  , ,   =  = X44=unicode_byte_typeX 4=OGF          = p| |= Y44=little2_toUtf8Y4= $ = } }= \44=little2_toUtf16\4= %` = `y y= p]44= big2_toUtf8 p]4= 0 = z z= p`44= big2_toUtf16p`4= 1` = `H H=  a44=!little2_scanCommenta4=              L           = * *=&little2_scanDecl =  = "d44=#little2_checkPiTargetd4= ' & % ' & ' I - I 7  =  I A F H = p< <= f44=little2_scanPif 4= O O W ]T \, ^  e g e e g e eH j j g  | ~ W/( = @2 2=.&%little2_scanCdataSection =  = $@k44=%little2_cdataSectionTok@k4=)!   E  ?   7  2  ,$  (   $$  !$              = E E= o4 4= little2_scanEndTago4=  &   T       $  M    $ $ $ $ " ! = 0 0=,$#little2_scanHexCharRef = - -=)! little2_scanCharRef =  = t44=little2_scanReft4=80 _ _ d e mT l  w n  n  n  q p$ e e e B  # " " #l +L 9> , ,F 4# j  E*h L+ Y R Q&$Z Z=  x4=  %e4= hZ Z=  x4=  $e4= E =7vx4= $x4= Hx4= Ty4= py 4= y4=  =?vx4= 8Ty4= py4= y4= @z4= z4= z4=  =  = {44=little2_scanAtts{4= } } }z } }z  X            0         M0   T t I       "  = p p= 4@4=little2_scanLt4=   & ?T >= @ V X  X  X j n o} q & ( ( *     T  7E(Z Z=  @4=  O"e4= /] ]=v@4=  P4=  = p = `4 `4= little2_contentTok`4=                   *   (      = P* *=  44=!little2_scanPercent4=       T           $  2       =  = "4`4=#little2_scanPoundName4=     T             #    = B B=  44=little2_scanLit 4=     "   "   & % ( " "K " " * +  0 +  +   =  = 44=little2_prologTok4=[S ; ; C  Q R| ]              X _ ft k s k w                     T 6F      9(Z Z=  @4=  p e4= W] ]=v@4= H4=  =  C C= &4@4='little2_attributeValueTok4=  1 % & &) &- U -( .' ." 4! 6  7D = > A B A$ I J  = 1 1= #04 4=$little2_entityValueTok04= Y Y+ _ ` `# `'  g" h! h m m r5 x y | } | $ = p = 44= li ttle2_isPublicId4=bZY   $ @ .     = 1 1= P44=little2_getAttsP4=    , O , O , O , O    O " " O * * + O 0 0 O 8  8 1 < O > > > > > B > C >L > = J O L L4 L E  Q O R  = pR R= "44=#little2_charRefNumber4= \ \ ^ x x x t  s b  d  d l d bU   p s g d b d  s     = c c= )4p4=*"little2_predefinedEntityName4=           b      + + (   =  =  4P4=little2_sameName4=  1 0   : ! 4 4 4 $    =  = %4@4=&little2_nameMatchesAscii4=  $               = ` = p4 4= little2_nameLengthp4=6.-      =  = 44= little2_skipS4=% ! + =  = #@44=$little2_updatePosition @4= 6 1 1 1 ? D F F F F 6 6 = 4 4= 44=big2_scanComment4=              :        =  ' '=# big2_scanDecl =  = 44= big2_checkPiTarget4= ,  +  *  ,  +  N  2  N  <  A   B   N  F  K  M  = p1 1= 44= big2_scanPi4= T  T  \  b  T a , c   j  l  j  j  l  j  j @ n  l     \ /( = 0/ /=+#"big2_scanCdataSection =  = !@44="big2_cdataSectionTok@4=)!   E  ?  7  2  ,$   (   $$  !$              = B B= 4`4=big2_scanEndTag4=  &   !T  ! ! ! ! ! !$ ! !M ! ! !$ $ $ $ " !  = - -=)! big2_scanHexCharRef = * *=&big2_scanCharRef =  = 4@4= big2_scanRef4=>6 d! d! i! j! r!T q!  |! s!  s!  s!  v! u!$ j! j! j! G! G! '! (! '! (!l 0!L >!> 1! 1! F 9!# o!3  J!h Q!+ ^! W! V!&$Z Z=  4=  @e4= m!Z Z=   4=  ?e4= J! =7v 4= 04= H4= T4= p4= 4=  =?v 4= 8T4= p4= 4= @4= 4= 4=  =  = 4@4= big2_scanAtts4= ! ! !z ! !z !X ! ! ! ! !  ! !>  ! ! ! !0 ! ! ! ! !  ! ! !M0 ! ! !T !t !I ! " " " " " !" " = t t= 44= big2_scanLt4= "" "" +" D"T C"= E" [" ]"  ]"  ]" o" s" t" v" +" -" -" /"     8 $  <"E(Z Z=  @4=  m=e4= 4"] ]=v@4=  P4=  = p = `44=big2_contentTok`4= " " " " " " " " " " " " " " "  "  "* " " "( " " "   = P' '= 4 4=big2_scanPercent4= " " "  " "T "  # "  "  "   " "$ " "2 " " " " "  =  = 44= big2_scanPoundName4= # # # # #T #  # #  #  #  # # # ## # # # = ? ?=  44= big2_scanLit 4= $# # # $# '# $# $# '# $# $# +# *# -# '# '#K '# '# /# 0#  5# 0#  0#   =  = 4 4=big2_prologTok4=[S @# @# H# V# W#| ]                       X d# k#t p# x# p# |# # # # # # # # # # # # # # # #  # #  # #T #6F # $ $ $ #9(Z Z=  @4=  ;e4= \#] ]=v@4= H4=  =  @ @= #44=$big2_attributeValueTok4= $$ $$1 *$ +$ +$) +$- Z$ 2$( 3$' 3$" 9$! ;$ <$D B$ C$ F$ G$ F$$ N$ O$  =  . .=  04`4=!big2_entityValueTok04= ^$ ^$+ d$ e$ e$# e$' $ l$" m$! m$ r$ r$ w$5 }$ ~$ $ $ $ $ = p = 44=big2_isPublicId4=bZY $ $ $ $@ $.  $ $ $ $ = 1 1= `44= big2_getAtts`4= % % % , %O %, %O %, %O %, %O !% !% "% %O '% '% %O /% /% 0% %O 5% 5% %O =% =% %1 A% %O C% C% C% C% C% G% C%  H% C%L C% %= O% %O Q%; Q% Q% %E  V% %O W%  = pO O= 44= big2_charRefNumber4= a% a% c% }% }% }% y%  x% g%  i%  i% q% i% g%U  u% x% l% i% g% i%  x%  % %  = b  b= &44='big2_predefinedEntityName4= % % % % % % % %  % % % %d %" % % % % %+ %+ %( %  =  = 44= big2_sameName4= %  %1 %0 % % % %: %!$ %4 %4 %4 %$ % % % =  = " 44=#big2_nameMatchesAscii 4= & & & & & & & & & & & & &  = ` = ` 4`4=bi g2_nameLength` 4=6.- & &  & & =  = p 4@4= big2_skipSp 4=% && 0& =  =  04 4=!big2_updatePosition04= ;& 6& 6& 6& D& I& K& K& K& K&  ;& ;& = N N= 44= streqci4= H' F' F' F' F' I' H' H' I' F' F' G' F' H' H' J'^ I' F' F' H' F' H' J' I' M'  = ` = @44= initUpdatePosition @4= U' = 0 = p4p4= toAsciip4=LDC \' \' \' \' b' d' d' = ! !=isSpace =  = !44="parsePseudoAttribute4=B: w'  w'  j' ' j'  j'' j'' j'' o'+  '30 ' j'B o'> ' j'E o'> ' ' ' ' ' '6 '  ' ' ' j'/Z Z=  4=  JWe4= ' ='v4= 4= <4= T4= hZ  Z=  \4=  JWe4= ' = Z Z=  44=  JWe4= ' ='v44= D4= P4= X4= ,Z Z=  4=  JWe4= ' = Z Z=   4=  JWe4= ' =  =  = 44=doParseXmlDecl4=! ' ' ' ' ' ' ' ' ' ' ' ' ( ( ( ( ( ( !( %( j' -( -( -( j' *( 4Z Z=  4=  JWe4= .(] ]=v4=  4= p =  = 484= checkCharRefNumber4=f^] 9( 7(  9( 9( 9( 9( <(  >( 9( >( = * *= 04 4= XmlUtf8Encode04= R( T( Y( X( X( Y( Y( ]( ]( ]( ^( _(  c( c( c(4 f( d( d( e( j(  =  = 44=XmlUtf16Encode4=kcb q( o( r(  u( u( u( w( w( x( {( r(  = 0  = %44=&XmlSizeOfUnknownEncoding4= (  =  =  44=unknown_isName 4=$ ( ( =  = 4h4=unknown_isNmstrt4=$ ( ( =   = 4H4=unknown_isInvalid4=+#" ( ( (( =  = 44=unknown_toUtf84=rji ( ( ( ( ( ( ( ( (, =  = !44=unknown_toUtf16 !4=]UT ( ( ( ( ( (  ( < (  = G G= # #44=$XmlInitUnknownEncoding #4= ( ( ( ( ( (@ ($ ( ( ( ( ( ( (  ) ) ( ( (# ) ) ( ( (  ( (  ) ( ( ( ( ) ) ) ) (- ) ) ) )G ) ') ')P ( (    =  = (4 4=getEncodingIndex(4=7/. N)  N)  [) [) ]) =  = P)404=initSc anP)4=OG p) p)f {) |) |)` ) )[$ ) )Q )K ) ) ) )2$ ) ) ) ) ) ) )A )$ )# )! )  )? ) ) ); ) ) ) ) =  = ',44=( XmlGetUtf8InternalEncoding,4=  ) =  = (,44=)!XmlGetUtf16InternalEncoding,4= ) =  = -4p4=initScanProlog-4=' * * * = 0 = 0-4P4=initScanContent0-4=' *!  * * = 0 = `-44=XmlInitEncoding`-4=JBA * * * * * *$ =  = .4H4= findEncoding.4=KCB * * * * )* **  =  = /4 " 4=XmlParseXmlDecl/4=*"! 2*  2*  2*   = t =  ww1eَ]V1.0CCxmlroleV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$i|$CODE$ $LITERAL$ $LINK$ $DATA$$BSS$ $READONLY_ADDR$#  $READONLY$8JHpXmlPrologStateInit =01q!B#ۦW"B~^^~ GGG.\& /k///Gk//1q!B#ۦ7"B~^^~ (\   $   2 *     : :=  4= +  =   = @ = 44=doctype24=D<; 4  4  4  2 <  6  : :=  04= <  =  = ` = `44= ? doctype3`4=D<; E  E  E  2 M  G  : :=  4= M  =  = ` = 44=doctype44=H@? V  V  X  2 a  ]  ] : :=  4= a  =  =  = @ @44=doctype5@4=D<; j  j  j  2 r  l  : :=  p4= r  =  = ` = 4p4=internalSubset4= {  u  u  u  u          A '  2 4: :=  `4=  =   =  = 4P4= entity04=H@?   H 2   : :=  4=  =  =  =  44= entity1B  4=D<;   7 2   : :=  P4=  =  = ` = 44= entity24=phg         0  % 2 : :=   4=  =   =C   =  4x4= entity3 4=D<;     2 &  : :=   4= & =  = ` =  4`4= entity4 4=D<; 0 0 0 2 8 2 : :=  0 4= D 8 =  = ` = ` 484= entity5` 4=c[Z ; ;  ; ; H C  2 N E E: :=   4= O =   =  = 0 4(4= entity60 4=D<; X X X> E  2 ` Z : :=  ` 4= ` =  = ` =  44= entity7 4=phg c  c c c  m m k0 q q 2 z: :=   4= { =   =   =  4 F 4= entity8 4=D<;    2   : :=   4=  =  = ` =  44= entity9 4=D<;    2   : :=  @ 4=  =  = `G = p 44= notation0p 4=D<;    2   : :=   4=  =  = ` =  44= notation1 4=]UT      0  q 2 : :=  H 4=  =   =  = 44= notation24=D<;   Z 2   : :=  4=  =  = ` = @44= notation3@4=D<;   I 2 I    : :=  p4=  =  = ` = 44= notation44=TLK   5 2     : :=  4=  =  =  = 04@4=attlist0 J 04=D<;   # 2   : :=  `4=  =  = ` = 44=attlist14=JBA    2 #   : :=  4= # =  =  = K 4h4=attlist24=zrq & & & & .@ <$ < < > B 2 K: :=  p4= L =   = p = 4(4=attlist34=E=< U U U U  2 _: :=  4L = _ =  = p = 4@4=attlist44=JBA h h j 2 s o j: :=  04= s =  =  = p4X4=attlist5p4=80/ | | ~ 2 M  : :=  4=  =  = ` = 44=attlist64=D<;    2   : :=  4=  =  = ` = 044=attlist704=JBAN    2   : :=  p4=  =  =  = 44=attlist84=           ^ 2  : :=  4=  =  O  = p =  44=attlist9 4=D<;   M 2   : :=  P4=  =  = ` = 4(4=element04=D<;   ; 2   : :=  P 4=  =  = ` = 4p4=element14=yx           ( 2  ,: :=  4=  =   = 0 = 4H4=element2Q 4=      # ( ( - 0 3 6 2  :$: :=  4= : =   = 0 = @484=element3@4=IA@ C C C 2 O K E : :=  4= OR  =  =  = 44=element44=C;: X X X 2 a Z : :=  4= a =  = ` =  4 4=element5 4=IA@ j j j 2 u q l: :=S  `4= u =  =  = 44=element64=xpo ~             2 : :=  4=  =  =  = 44=element7T 4=              v 2 : :=  4=  =  = ` = 44= declClose4=7/.   & 2 : :=  @4= U  =  = `s s= `4`4= error`4= (  =  =common =  = p4H4= XmlPrologStateInitp4= 8 =  \ \Ce4uV Ce4Ce4Ce4?Ce4Ce4ECe4Ce4OCe4ECe4Ce4MCe4W Ce4}Ce4Ce4 Ce4" Ce4 Ce4R Ce4 Ce4X Ce4 Ce4y X Ce4 Ce4Ce4Ce4Ce4VCe4Ce4cCe4Ce4]Ce4Ce4Y Ce4>Ce4Ce4Ce4ZCe4Ce4dCe4Ce4Ce4Ce4CZ e4 =  ww1eَ]V1.0BBparserV1.0 4-AUG-2004 09:33Compaq C V6.5-001` ` $ABS$iL4$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J parse_XML0JH[ parse_HTML0J(` parse_TXT =#GGGH^~G"P^XGG{#z@G"G"G8b#@ӈ"b#/@GH]P]X`#k/#GGGH^~G"P^XGGx{#Z@G"G"Gb#w@8B4G0""TG @b@ZkB0""TGb/@ZkB ""TGb/@Zk"hb#O@GH]P]X`#k/#GGG^~^~GGG\ GG"{#B@$0B/$/"="(b#@G"b#4@/D PB/$G="_"PcXb#@G"b#4G@"pb#@PG]]}#k//#^~_">"^ ~(08޴@GGG{#X\GPd@G/G/#PBG]"XbGG @Zk @BG]"GHb/@Zk#G ///G_"="b#Pdn@//#0BG] GGG="8b @Zk BGG="G(b@Zk#0B=" GG4GG8b@ZkpBG4Gxb@Zk/ BG="G(b4GG///@ZkBG4Gb@Zk0`B4GhbHàG/@ZkGGb#GN@(GtGb#@ӰGtGb#/z@Gb#@Ӱ//HG]] }(08ݤ@P#/k///#G~^^GGG "' $B"C @ BG@4^ @ @ B//GB0 @@:F@G B SBF@ " qB [4GGbG({@Zk" @"G]] #/k///GG//s"R" [(;8PD@[d8<0;HPP1 \0{Y BXp0[y B TPk/(1#TG~^P[^~! (0޴8@GGGG4G@ZkT#GX4G\CGS@BLG`c0"HbPC@Zk4G pBxb G@@Zk B4G_ "4G0G$(b/@Zk,0/(#0 B(# BG8cD"4G(b/@Zk@0%/ <0B<`GGGGhb]]} GGGG(0ݤ8@P#/k///#4G~^^~ (GGG[b/@ZkB4Gb//@ZkB4Gb@Zk Ghb#e @/4 //Ghb#] @/,B4Gb//@Zk@B4Gb@ZkcG]]} (0#k` /#4G(0Т^p[~^~޴ (0>8GGGGGGxb@Zk? G"G@GGb#/\C1"R@Ӂ//BGTG@"b@ZkB@"4Gb@ZkCB@"8""bG@Zk8=@G Dj\0 /^% /B@""b@Zk/%// G /BH""b@ZkŢF G0BGTG(""8bD8/@ZkB0""GTGb/@Zk a X")#8<D#BG4Gb@ZkGG(b#@GGG}"G"0b#K@pBG4Gxb@ZkGGG@b#e@GGGb#D@GG(b#@///G4G@="0b#@ӠBG@"ibX""/@Zk XGG b"b#D7@\//Bb@"""@ZkBXGGGb"b#$1  "@//*X#pBGG4Gxb! @ZkG@b#GG@G4G(b#`@GGG }"G"0b#@pBG4Gxb@b ZkGG@b#G@GGGb#@XG`b"b#GG@/Bb@"h""@Zk GGG b"b#@pBG4Gxb@ZkG@="@]"0}"("0b#G@ӄ8G@"pBxb4G@D/vXàƠ/iG@ZkpBGX@"4Gxb@Zk? "G@}"@b#G\C1"R@GRBTG"@="b%!@Zk G@ .r H!Q J2F >e?`//Gb#/8)//@pB. 4Gxb@Zk@? "GP@tG@]"b#c @1"U@B4Gb"0@@ZkB)GTGb/@ZkG="@]"0}"G("0b#O@Ӏ =G="b#G/@ )!/GG@="X#!b#G @G]]}ݤ (0=8@#/k///p4GD`#^[~^~GGGGGb@Zk? 8"GG@Gb#\C1"R@ (BGTG"0b@ZkxB"4Gb@ZkB" ""b @Zk// >d G="b#GJ@="Gb#]@G]]}#/k///p# ^~(^0~Ds8@H޴PX`GGGG>`(0 <P@cdCGG{#`b#'@TG Bb @@'" BB 0@/`F#@ZkG%GG0B8b10B=e="pB}"@Zk=G/ %!B%.@"B"#XGP1"tGb/@Zk%4GTG B(b0@ @tH`.S`Je tF`>@/@Zk!@ G0 @=?Ð"BtGb1"@Zk@Gb#D#C/@ӔG&㠠àG"//'"/ %,A0H'HA1@!!D/' //E. B4Ge"(bRSJGJ/@Zk#0@ @?G#C//pb#Z@G ](]0}8@HݤPX`p#k//G#Gpb#G@G4Gb#{@Ӕ@GE@`'1@`尤2A4G{#;"4à#TG^~^ ~(08޴@f [HP>XGXGGGGGCbt//@ZkL#0 @L#pǢ'/pBGxb6"@Zk///֢G4Gb#8@GG "b#G4G]@4"GG}4Gb#V@Ӏ0@//V"_ BTGTG(b/@ZkD G`B* |tGhb("XD/ @GG/@\cS/@Zk0BTG4GGG8b@Zk G/DGTGb# @G "GG4Gb#@Ӏ0@ GGb#@GG "g b#GG @Ӏ0@21|砠GBbtGxD"\àF@Zk$//P"G4Gb#@)G "E X("@ G/`B0@4G" @hb@Zk/?b`B@"GhbG""s"@ZkBTGTGb/@Zk"GGGXb#tGD1"/@ /GGb#@GG4"b#}G@#pBG#!xb ///@Zk G4Gb#x@ 0@ G]] }(08ݤ@HP=X`#/k//h /#^~^ ~(08^GGGGG 0"{#@#!1 @#G4#"b#G@ BGTG(b/X#x/@Zk///L#0 @L#G4Gxb#4@#BGTGb  /@Zk/// Gxb#4G8D @ $1@ G]] }(08@#/k///#? ^4GAF~^4G ~(08޴@GGGGGp[GC;">xb@ZkGb#TG@l4G@l\0#C8<i DpBGxb@""tG@Zk//? B(bB"Xâ֢6@Zk ? 4G#8<D島/\C4G0R/ @c8<D/\0(#91 C(#Gb#tG@ӈ/ @ # B # QFB QLch0`BBLchðkpBGxb""@Zk/// GGb#@pL@0@LpW$.b" ¦$Js-F֢ `.TJJTBF //.0B4G#8bWJJ/@Zk Gb#j Gf@x@x1//pBGxbH""@ZkpB//GX""xb@ZkpB G""xb@ZkpBG`""xb@ZkGb#GB@|à0@|ð /#G ///|C21@B|CpBGxb4G""@ZkpBGP""xb@ZkB Gb/@ZkPH""G4Gb#@G]] }(08ݤ@P#k/&#~^^~ (GGGG///BGTG$"b@Zk//GG]k ]} (0#/k///Gk// //#4G^[~^~ ޴(08>@GGGG^G =b@ZkXàBG4Gb|&|=G@Zk? 0"GG@Gb#\C1"R/@b// BGTG "(b@ZkG  @ .r H Q J2F >tL`!/Gb#/E(_B<4Gb@Zk@? 0GP@tGb#@`"(@+ B(GTG(l b@Zk(pB4G "xb),)H @ZkG4Gb#e@ ="G ]"}""Gb#_BG4Gb/@ZkGGb#G _G ="Gb#_(!?|G]]} ݤ(08=@P#k///#TG^~^ ~(0GGGG>@0@ @'! @0@@ BaG(b0@@Zk#B]BG@ZkâBB/XK?G]] }(0@#k///#G^~ ^(~08@޴HPm GG G#XP]@G% (B/P/// CDBZr/[rKgKRZBRAFB@ #8B4G@b$@.PJJ@Zk///4#(¤/" /// #C2Bq.SqJgJQ4B1!F //â4G8B@bB.WJJ@Zk#!1 @#?# d"/x`B."VJJBW/ZWKW?,H (¤!///'fE"/ %.Q2J'JQ3B1!F/ n //.8B4G"@bUJJ/@Zk%, %H?%.%JHBGL"GPb" (c `GPC }G@ZkHà@H\#`xBCcTG%"b@ZkhBGGpb`Cc#"@Zk=XB @à@.q&HPJF>cB1@@Zkâ$@//G] ](}08@ݤHP`#/k///#G4G^~ ^(~08GG#GXP]@0BG8b @ZkPBGG4GXbo @Zk,BG@""bTGHF///@ZkC@0B " D4G8b@Zk4GG= BGh""TG(b@Zk/#0 @#*/// BGTG`""(b@Zk# !1 @# GL"`BhbFGh0/ LC0@BLCGPCG@ZkHL#@0 @HL#G] ](}08@#k/#> /@h^~G ~"[?""G^GGb@Zk BTG="(b@ZkG]]@#/k///(#p > /@h^~ "4G[^GGb/@ZkHB }""]?"GPb@Zk8B="TG@b/@ZkG]]@#k/#GG^~" ^(~08@GGGG#]M@Xc G}/=4 /BGb @Zk/7!D"=G](& R @# \40BGTG8b@ZkGG=BL"G4GGPCD }"b@ZkH# 4G @HpG[@ZkGG] ]q (}08@P#k/04G4G/ d0h04 Dl0GT`G;Fp0tpD2DD!Fx0|0DrGD2DD;FDFk//C#C^~ ^(~08@޴HGGGGGGD~ >/ P @/B4Gb"0@@Zk @#b"B"ps"0D/eݦB" "X"FbGG@ZkBG4Gb@ZkB@4Gb@ZkG %0 B % ]F0BBG "TGb@Zkr =G@BHb"0@#C 2B _BG/@ZkBTG b@Q@@Zk  #0@A@//#TGPBXb G"@Zk cCe@ðG] ](}08@ݤHP#k///#GG~^^~ GGGGc [(b/` #AaB! "@Zk//G /G4Gb#_Gb# @4GG]]} 0#k/0#G~^^~ (0޴8@G= 011 B0Gs GA!B3/dG` 01B /C:1@CC%"D  G//0B4G8bP"0@@Zk @#0B@""XB""b"1DF $"`"G8b /=@ZkpBG4Gxb@ZkG]]} (0ݤ8@P#k// 0GG/ //p[@ {@0 @ 1@"_k//X#^~^~(޴ "(0>8^@GGGG_=GGG?D=/t ///B4Gb"0@@Zk? 8B"""@TG@b@Zk @Gpx⤡ @ //BTG("="bG e@/@Zk///' "/ ),A0H'HA1@!!D/ //I.B4Gi"bRSJGJ/@Zk0@)! @? @ @ G// e@ 0 Aj.jJUaBSF@/"/ .VJJVB֢F/ //*/bJ#Y:KB'K4G/@Zk0@J! @? e@j" J.RSJGJRTBRPF@0u @ @_//.XB4G"`bUJJ/@Zk0@ @_//*,BJ!H"bTG0@A*H'H@ZkB"4Gb@ZkH A'e@@!  @.PJJA1@!!D /e@B4Gbr.R"SrJgJ@Zk/// B4G"b@Zk A @ @_LøB4Gb "4G@Zk @/G?B4G "b//@ZkG]]}ݤ (0=8]@P#k<#GgetPropNameByName<$v b#HgetPropNameByName<#@getPropNameByName<SGgetMetaNameByName<Tb#HgetMetaNameByName<S@getMetaNameByName<SG4getMetaNameByName<T(b#HgetMetaNameByName<S0@4getMetaNameByNameDGhw tmlCreatePushParserCtxtDb#htmlCreatePushParserCtxtD@htmlCreatePushParserCtxt< GDxmlCreatePushParserCtxt<8b#xmlCreatePushParserCtxt<@@DxmlCreatePushParserCtxt4GhtmlParseChunk4b#htmlParseChunk4@htmlParseChunk4x G xmlParseChunk4b# xmlParseChunk4@ xmlParseChunk4GhtmlParseChunk4b#htmlParseChunk4@htmlParseChunk<GhtmlFreeParserCtxt<b#htmlFreeParserCtxt<@htmlFreeParserCtxt4$y GT xmlParseChunk44b# xmlParseChunk4P@T xmlParseChunk<TGhxmlFreeParserCtxt< `b#xmlFreeParserCtxt<d@hxmlFreeParserCtxt4lG decc$strlen4tb# decc$strlen4@ decc$strlen4Gz decc$fread4{# decc$fread4@ decc$fread4%GOTS$ZERO4%@OTS$ZERO<# GHgetPropNameByName<$8b#@getPropNameByName<#D@HgetPropNameByName4)XG| strtolower4*\b#@ strtolowe{ r4)x@| strtolower,!|Gemalloc,"b#@emalloc,!@emalloc,!Gemalloc ,"b#@emalloc,!@emalloc<'GTaddCommonProperties<(b#@addCommonProperties<'PTaddCommonProperties| ,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree, G4 efree, b#efree,0 } @4 efree,8 GL efree,@ b#efree,H @L efree4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4M0 GH decc$strcpy4N@ b# decc$strcpy4MD @H decc$strcpy4)H G\ s~ trtolower4*T b# strtolower4)X @\ strtolower4Cd G decc$strcmp4Dt b# decc$strcmp4C @ decc$strcmp4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp4C G decc$strcmp4D b#  decc$strcmp4C @ decc$strcmp430 GT decc$strcasecmp44@ b#decc$strcasecmp43P @T decc$strcasecmp,9T Gt lstrstr,:h b#lstrstr,9p @t lstrstr4) G strtolower4* b# strtolower4) @  strtolower4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4CT Gt decc$strcmp4Dd b# decc$strcmp4Cp @t decc$strcmp4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp4  G decc$strlen4 b# decc$strlen4 @ decc$strlen4` Gt decc$strlen4l b# decc$strlen4p @t decc$strlen4C G decc$strcmp4D b# decc$strcmp4C @ decc$strcmp,Y Gestrdup,Z  b#estrdup,Y@estrdup48Gl decc$strlen4<b# decc$strlen4h@l decc$strlen4lG decc$strlen4b# decc$strlen4@ decc$strlen4MG decc$strcpy4Nb# decc$strcpy4M> @ decc$strcpy44GL decc$strlen4Db# decc$strlen4H@L decc$strlen4)G strtolower 4*b# strtolower4)@ strtolower4MG decc$strcpy4Nb# decc$strcpy4M@ decc$strcpy 4G decc$strlen4b#8 decc$strlen4@ decc$strlen4MG decc$strcpy4Nb#8 decc$strcpy4M@ decc$strcpy4)G strtolower4*b#8 strtolower4)@ strtolower4C G8 decc$strcmp4D,b#8 decc$strcmp4C4@8 decc$strcmp48Gterealloc4<b#erealloc4p@terealloc4AG UTF8Toisolat14Bb# UTF8Toisolat14A@ UTF8Toisolat1<-G xmlParserWarning<. b#xmlParserWarning<-@ xmlParserWarning4?GT xmlUTF8Strpos4@ b# xmlUTF8Strpos4?P@T xmlUTF8Strpos<-tGxmlParserWarning<.b#xmlParserWarning<-@xmlParserWarning4$GD decc$isspace4 0b# decc$isspace4@@D decc$isspace<E8GisDontBumpMetaName<Flb#isDontBumpMetaName<E@isDontBumpMetaName4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp<S8GTgetMetaNameByName<TH b#getMetaNameByName<SP@TgetMetaNameByName4`G decc$txprintf4pb# decc$txprintf4@ decc$txprintf4UG addMetaEntry4Vb# addMetaEntry4U@ addMetaEntry,Q`Gprogerr,Rdb#progerr ,Q@progerr4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf<#G4getPropNameByName<$(b#getPropNameByName<#0@4 getPropNameByName4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp<EGisDontBumpMetaName<Fb#PisDontBumpMetaName<E@isDontBumpMetaName43Gdecc$strcasecmp44b#Pdecc$strcasecmp43@d ecc$strcasecmp4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4C0GH decc$strcmp4D8b# decc$strcmp 4CD@H decc$strcmp<ITGxmatch_regex_list<JXb#match_regex_list<It@xmatch_regex_list 4CPGd decc$strcmp4DXb# decc$strcmp4C`@d decc$strcmp4KG decc$isdigit4Lb# decc$isdigit4K@ decc$isdigit4C@GT decc$strcmp4DHb# decc$strcmp4CP@T decc$strcmp4CTGt decc$strcmp4Dlb# decc$strcmp4Cp@t decc$strcmp4CtG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4CG decc$strcmp4Db# decc$strcmp4C@ decc$strcmp4CG decc$strcmp4D b# decc$strcmp4C@ decc$strcmp4CG, decc$strcmp4D$b# decc$strcmp4C(@, decc$strcmp4G,GD htmlTagLookup4H8b# htmlTagLookup4G@@D htmlTagLookup43Gdecc$strcasecmp44b# decc$strcasecmp4 3@decc$strcasecmp4lG decc$strlen4b#@ decc$strlen4@ decc$strlen4G decc$strlen4b#@ decc$strlen4@ decc$strlen4M G8 decc$strcpy4N0 b#@ decc$strcpy4M4 @8 decc$ strcpy4 G decc$strlen4 b#@ decc$strlen4 @ decc$strlen4M G decc$strcpy4N b#@ decc$strcpy4M @ decc$strcpy4) G! strtolower4*!b#@ strtolower4)!@! strtolower4L!G d! decc$strlen4X!b#@ decc$strlen4`!@d! decc$strlen48"GT"erealloc4@"b#Perealloc4P"@T"erealloc4 `"Gt"OTS$MOVE4 p"@t"OTS$MOVE4t#G# decc$isspace4|#b# decc$isspace4# @# decc$isspace4 $G($ decc$isspace4$b# decc$isspace4$$@($ decc$isspace4$G% decc$isspace4%b# decc$isspace4%@% decc$isspace40%Gl% indexstring4D%b# indexstring4h%@l% indexstring < %G%addDocProperties<%b#addDocProperties< %@%addDocProperties4 %G%addDocProperty4 %b#addDocProperty 4 %@%addDocProperty4 %G&OTS$MOVE4 &@&OTS$MOVE45&G& str_skip_ws46 &b# str_skip_ws45&@& str_skip_ws47&G& str_trim_ws48&b# str_trim_ws47&@& str_trim_ws,9&G'lstrstr,:&b#lstrstr,9'@'lstrstr45'G8' str_skip_ws46,'b# str_skip_ws454' @8' str_skip_ws43D'G\'decc$strcasecmp44T'b#decc$strcasecmp43X'@\'decc$strcasecmp43'G'decc$strcasecmp44'b#decc$strcasecmp43'@'decc$strcasecmp4'G( indexstring4'b# indexstring4(@( indexstring< /d(G(decc$txvsnprintf<0(b#decc$txvsnprintf</(@(decc$txvsnprintf41(G(xmlParserError42(b#xmlParserError41(@(xmlParserError4(G) decc$txprintf4)b#( decc$txprintf4)@) decc$txprintf</) G4)decc$txvsnprintf<0,)b#(decc$txvsnprintf</0)@4)decc$txvsnprintf<-8)GT)xmlParserWarning<.D)b#(xmlParserWarning<-P)@T)xmlParserWarning4C)G) decc$strcmp4D)b#` decc$strcmp4C)@) decc$strcmp4W D*GX* xmlBuildURI4XP*b#` xmlBuildURI4WT*@X* xmlBuildURI4h*G* indexstring4*b#` indexstring4*@* indexstring4+G+ decc$txprintf4+b#p decc$txprintf4+@+ decc$txprintf40,GT, decc$txpr intf4D,b#p decc$txprintf4P,@T, decc$txprintf4T,Gh, decc$strlen4`,b#p decc$strlen4d,@h, decc$strlen,!h,G|,emalloc,"t,b#pemalloc,!x,@|,emalloc4M,G, decc$strcpy4N,b#p decc$strcpy4 M,@, decc$strcpy4O,G-progwarn4P,b#pprogwarn4O-@-progwarn4-G8-erealloc4$-b#perealloc44-@8-erealloc,Ql-G-progerr,Rp-b#pprogerr,Q-@-progerr4C. G(. decc$strcmp4D.b#  decc$strcmp4C$.@(. decc$strcmp40/GH/ decc$txprintf48/b# decc$txprintf4D/@H/ decc$txprintft t4\/G/ decc$txprintf4/b# decc$txprintf4/@/ decc$txprintf,/G/efree ,/b#efree,/@/efree40G0 decc$strlen40b#x decc$strlen40@0 decc$strlen4;0G0 decc$strcat4<0b#x decc$strcat4;0@0 decc$strcat41G41 decc$txprintf4 1b#x decc$txprintf4 01@41 decc$txprintf41G1 decc$isspace41b#x decc$isspace41@1 decc$isspace442b#x decc$isspace4@2GT2 decc$isspace4P2@T2 decc$isspace4=2G2 decc$isprint4>2b#x decc$isprint4=2@2 decc$ isprint42G3 decc$txprintf43b#x decc$txprintf43@3 decc$txprintf43G,3 decc$strlen4$3b#x decc$strlen4(3@,3 decc$strlen4t3G3 decc$isspace4|3b#x decc$isspace43@3 decc$isspace43G 3 decc$strlen43b#x decc$strlen43@3 decc$strlen43G3 decc$txprintf43b#x decc$txprintf43@3 decc$txprintf43G4 decc$txprintf44b#x decc$txprintf44@4 decc$txprintf* *= swishdescription =@3Error '%d' converting internal UTF-8 to Latin-1. P=h\Failed to convert internal UTF-8 to Latin-1. Replacing non ISO-8859-1 char with char '%c' =8-Warning: Tag found in %s is too long: '%s' =@5Tried to append tag %s to stack, but stack is empty=`Sswish parser adding more stack space for tag %s. from %d to %d<%s> (%s [%s]%s) p= no meta name defined=8,Found Swish-e reserved property name '%s' =0#(undefined meta name - no action)=~Found meta name '%s' in file '%s', not listed as a MetaNames in config**Adding automatic MetaName '%s' found in file '%s' `=XM (void *)parse_data, Attribute '%s' on tag '%s' too long to build metaname =.&ClassAttribute on tag '%s' too long  > =0".;=P4 7 DEBUG_MASK0 decc$txprintf= propertyP= X=meta`= (%s)%s pefree== end ignore=0 `;=0$ =0*;=0  ";=`0 7decc$$gl___ctypea7decc$$ga___ctypet decc$isspace indexstring8OTS$MOVE0 addDocProperty addDocProperties=0 !;=@$ erealloc=0"0;=   decc$fread=0";=P4|  xmlParseChunk htmlParseChunk(xmlCreatePushParserCtxt(htmlCreatePushParserCtxt decc$strlen htmlFreeParserCtxt xmlFreeParserCtxt=0 ;=P< !emalloc; #getPropNameByName8OTS$ZERO 'addCommonProperties) strtolower=0 ;; ;;8;(;;@;=0H";=`, =0 (;= @4 8888 P8 OTS$HOME_ARGS` -xmlParserWarning /decc$txvsnprintf=0 @(;=@@ 1xmlParserError=0 p&;=@(  3decc$strcasecmp5 str_skip_ws=SwishCommand7 str_trim_ws=index= noindex09lstrstr=0;`= h=0/;=0 00;= PD =%s; decc$strcat= %c= decc$isprint=0 ;=p8 ? xmlUTF8StrposA UTF8Toisolat1=0"-;=0$ C decc$strcmp=0 0;=@(< EisDontBumpMetaName=strongG htmlTagLookup=br= FileRules title=head =body=0";=P8| Imatch_regex_listK decc$isdigit=title=em =img(=b0=i8=0 p;=0 `M decc$strcpy=0 p+;=0!P 8| *Start Ignore*OprogwarnQprogerr=0 ;=`< SgetMetaNameByNameU addMetaEntry= <%s%s> %s  =0";=0( =0 `;=P< =0"p);=P0< 7xmlFreeW xmlBuildURI= 0  ; = @L href= ROBOTSNOINDEX=name= content=a=src=baseYestrdup=alt(=0"`;=, =0H";=(`,  swishdefaultx= swishtitle@ @6=? ?=/'&PARSERCompaq C V6.5-001 = 44= parse_XML4=% o o =  = 4H4= parse_HTML4=F>= *o *o 4o 4o  5o 6o =  = `4(4= parse_TXT`4=MED Fo Fo Fo So So Wo ( =  ! != 44= parse_chunks4= oo oo  oo  qo o o o o o  o o0   o o8 =  = 044=read_next_chunk04=QIH o o o o  o( =  =  44=init_sax_handler 4=^VU p p p p p p p p = F F= 4@4=init_parse_data4= $p "p "p "p "p "p ,p "p  .p 0p /p -p 4p 7pM  Ep Ep Np Mp Tp Tp Tp =  = `44=free_parse_data`4=]UT \p \p _p bp  ep np qp$ =   =  44= start_hndl 4=2* p  p p p  p  p  p  p p* p p& p# p% s s s s  s sm Ou s p p pA p? t t u  p[ pY .s .s 2s 2s 9s :s ;s ?s As Fs Fs Ns Us ?s p p pD: :=  44= p ] ]=v44= d4= : :=   4= p] ]=v  4=  4= : :=  | 4= p: :=   4= s = } }=v| 4=  4=  4=  =  = p484=end_hndlp4=aYX p p p  p  p p q0 = 0 = 44= char_hndl4=<4 )q #q #q 6qL q  q  q q q q q q q q q q q q >q >q Gq Jq Lqt Lq*8 Oq Rq Sq: :=  $4=  decc$strlendecc$strcasecmp decc$isdigit decc$isprint decc$isspace decc$$ga___ctypet decc$$gl___ctypea DEBUG_MASKemallocereallocefreelstrstr strtolower str_skip_ws str_trim_wsestrdup match_regex_list addDocPropertiesaddDocPropertyprogerrprogwarn addCommon Properties indexstring getMetaNameByName getPropNameByName addMetaEntry isDontBumpMetaNameOTS$MOVEOTS$ZERO OTS$HOME_ARGS -c$frww1fَ]V1.0>>fsV1.0 4-AUG-2004 09:34Compaq C V6.5-0010 0 $ABS$i$CODE$ $LITERAL$$LINK$ $DATA$$BSS$ $READONLY_ADDR$ $READONLY$0FileSystemIndexingDataSource0J initModule_FS0J freeModule_FS0JconfigModule_FS0Jp compfilenames0J0 fs_indexpath@ FileSystemIndexingDataSource =#4G^ [~GG({@ZkGG///"! /=G] #/k///#C4G^~^ ~(GGq [(bG/@Zk B4G"(b@Zk B"4G(b@Zk B4G(b "/@Zk B4G"(b@Zk B"4G(b@Zk B4G(b"/@Zk B4G"(b@Zk B "4G(b@Zk B4G(b$"/@ZkBG4Gb@Zk}G]] }(0#k/q#TG~^^~ (0GGG0;"[ bG/@ZkGGpb#G1@%ÐBGTG ""b@Zk//GGD"pb#"@/BGTGP""b@Zk@BG 4G4GtGHb@Zk(4G///GG]]} (0@#k//#TG~^^~ (@0޴8`[@H>P^X~`hGGGGGG"Ghb@Zk!$ BTGH""(btGG G@Zk//c$} @/{ ///B4GbB@Zk$ B G""(bTG(@aG @Zk///$!1 @ @< 0Bp@A4G8b@Zk$ GqDpDv7I(@!.J FUJFWB0BCG8TG8b@ZkBGTGb@Zk0BG@""8bTG@ @ , HD/@ZkDBG4Gb HA@ZkD0@A @_/ BTG""(b @Zk/4G/d BTGp""(b @Zk`BGhbTGp"@ZkBG4Gb@ZkBGG4Gb@Zk0BA4G8bP@@ZkB GG GTGb@Zk0BGTG""8b/@Zk0BGGTG8b@Zk BGTG""(b@Zk BGGGbG D"@ZkM BGTG""(b@Zk// B%"GGbG D"@Zk:/ BGTGP""(b@Zk// B%"GGbG D"@Zk&/ BGTG""(b@Zk// B%"GGbG D"@Zk/ BGTG`""(b@ZkB %"GGbG D"/@ZkBG4Gb@Zk4G `BGGhbtGH"/@Zk GG]]} (0ݤ8@H=P]X}`hp#k//0 IFF //`#4G^H[~ ^(~08@޴HPX>`^h~px޵GGGGGPbG@ZkBGG4Gb(G//@ZkW$,HBGXB`btG$HR" (@ZkK (/ @XBG4G`b/@Zk G// @cH8BGTG@b"4`@Zk2/BG4Gb@ZkHBXB GG (`btGR"@ZkHBXB G  (`btGR"/@Zk /(BG4G0b@Zk// 4G](BG4G0b@ZkxB"4Gb_!@ZkXB GG4G`b@Zk G @cH8BGTG@b"`@Zk/8D$,$H%D D]C!=C/BG4Gb@ZkHBm GG4GPb/@Zk,, G,H%D?@0 B JBB@ 9B0@AGTGb@Zk GBGGG/@Zk'AGBG.xJ-@"G WJF>@Zk.BGbUJ>(Ȣ4G/@ZkxBG4G b/@ZkGb#G@GGGb#///@BGH#TGb/@Zk///GGb#@ӚGGb#@GGGb#@G//8BG4G@b GG@Zk(BG4G0b/@Zk#////G 0Ab#@'@8B4G@bA@@ZkE A_8B4G@b@Zk8BG4G@b/@Zk;ơG G,//@cBTGh"by`A@'@Zk ëY`AHBTG`bx" A(@ZkGTGb@$_F8B4G0A@b IA A @Zk A8B4G@b@Zk8BG4G@b/@ZkG] ](}08@ݤHPX=`]h}pxݥ#/k///#0[tG^~@[ ^(~XR"08@޴HGGGG1Hb/@Zk4G$ /}B}GGTGb/@ZkBGGGTGb/@ZkCGCGDD@CCFPB4GF!F`"XbrF4D/@ZkG ,PB  =G Xb4G&H=@.RFJ@>/@Zk=.Gq&HPJF>ݰPB4GXb@Zk,0BGG@BHbtGH8R"/ $@Zk B G4G(b@Zk BG4G(b@Zk4G#,0BGtG@BHbHR" $@Zk BCG4G(b@Zk BG4G(b@ZkG BG4G(b@Zk BG4G(b@ZkGG] ](}08@ݤHP#k///K @#TG~^@[y@^~ (GGGGGGHb@Zk B//G0"TG(b@Zk/ BTG "0"(b@Zk8pB4Gxb/@ZkBGGGtGb/@ZkPBGGGTGXb/@Zk`G]Ghb]4G} (0#k///k///G [GG1(}/@ZkGk/#4G ^[~(^0~8GGG>Gb/@ZkB?$&G4G! "b @ZkB4G4G#b/@Zk=#TG(B0b0BF1"#Q?B@Zk4G #Bb0BPBC@Zk]G ]G(]0}8@#k/#4G~^0[^~ (0GGGGG8b@ZkBG4Gb@Zk//@#G B(bTGY @0" @ZkGGxb#_C BG4G(b@Zk6@#G B(bTGY @" /@ZkPBG4GXb(%/ ///@Zk%G%"b#f_GGb# _@BH#GTGHb@Zk//GGb#S_ GGb#_/BGTGb" @ZkG]]} (0@#/k, G,emalloc,${#emalloc,(@,emalloc49Gfree_regex_list4:b#free_regex_list49@free_regex_list49Gfree_regex_list4:b#free_regex_list49@free_regex_list49 Gfree_regex_list4:b#free_regex_list49@free_regex_list49Gfree_regex_list4:b#free_regex_list49@free_regex_list49Gfree_regex_list4:b#free_regex_list49@free_regex_list49G,free_regex_list4 :$b#free_regex_list49(@,free_regex_list49,GDfree_regex_list4:4b#free_regex_list49@@Dfree_regex_list49DGXfree_regex_list4:Pb#free_regex_list49T@Xfree_regex_list49XGlfree_regex_list4:db#free_ regex_list49h@lfree_regex_list49lGfree_regex_list4:tb#free_regex_list49@free_regex_list,Gefree,b#efree,@efree43Gdecc$strcasecmp44b#decc$strcasecmp43@decc$strcasecmp 430GHdecc$strcasecmp44@b#decc$strcasecmp43D@Hdecc$strcasecmp43pGdecc$strcasecmp44b#decc$strcasecmp43@decc$strcasecmp47GgetYesNoOrAbort48b#getYesNoOrAbort47@getYesNoOrAbort4 Gl d ecc$txprintf 4db# decc$txprintf4h@l decc$txprintf43tGdecc$strcasecmp44b#decc$strcasecmp43@decc$strcasecmp4#G decc$strlen4$b# decc$strlen4#@ decc$strlen43Gdecc$strcasecmp44 b#decc$strcasecmp43@decc$strcasecmp,$G8emalloc,0b#emalloc,4@8emalloc45G decc$strcat46b# decc$strcat45@ decc$strcat4/G decc$strcpy40b# decc$strcpy4/@  decc$strcpy45G decc$strcat46b# decc$strcat45@ decc$strcat,Gefree,b#efree,@efree434GLdecc$strcasecmp44@b#decc$strcasecmp43H@Ldecc$strcasecmp43dG|d ecc$strcasecmp44pb#decc$strcasecmp43x@|decc$strcasecmp4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4#G decc$strlen4$b# decc$strlen4#@ decc$strlen4#G decc$strlen4$b#  decc$strlen4#@ decc$strlen,Gemalloc,b#emalloc,@emalloc4/G decc$strcpy40b# decc$strcpy4/@ decc$strcpy45G$ decc$strcat46b# decc$strcat45 @$ decc$strcat45$G< decc$strcat464b# decc$strcat458@< decc$strcat43<GTdecc$strcasecmp44Lb#decc$strcasecmp43P@Tdecc$strcasecmp<1\G|add_regex_patterns<2lb#add_regex_patterns<1x@|add_regex_patterns 43Gdecc$strcasecmp44b#decc$strcasecmp43@decc$strcasecmp<1Gadd_regex_patterns<2b#add_regex_patterns<1@add_regex_patterns43Gdecc$strcasecmp44b#decc$strcasecmp43@decc$strcasecmp<1 Gadd_regex_patterns<2b#add_regex_patterns<1@add_regex_patterns43 G8decc$strcasecmp440b#decc$strcasecmp434@8decc$strcasecmp<1HGhadd_regex_patterns<2Xb#add_regex_patterns<1d@hadd_regex_patterns 43pGdecc$strcasecmp 44b#decc$strcasecmp43@decc$strcasecmp<1Gadd_regex_patterns<2b#add_regex_patterns<1@add_regex_patterns,Gefree,b#efree,@efree4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4#lG decc$strlen4$b# decc$strlen4#@ decc$strlen,G islink,b#islink, @ islink< G4 match_regex_list< b# match_regex_list<0 @4 match_regex_list4%L Gd decc$opendir4&X b# decc$opendir4%` @d decc$opendir4!| G progwarnno4" b# progwarnno4! @ progwarnno4 G decc$readdir4 b# decc$readdir4  @ decc$readdir< G match_regex_list< b#match_regex_list< @ match_regex_list< G match_regex_list< b#match_regex_list< @ match_regex_list4 G$ decc$closedir4  b# decc$clos> edir4 @$ decc$closedir48 GL decc$closedir4 D b# decc$closedir4H @L decc$closedir,L Gd emalloc,X b#emalloc,` @d emalloc4%d G| decc$opendir4&t b# decc$opendir4%x @| decc$opendir4 ! G progwarnno4" b# progwarnno4! @ progwarnno4 G decc$readdir4 b# decc$readdir4 @ decc$readdir4# G decc$strlen4$ b# decc$strlen4# @ decc$strlen44 GT ereal loc4L b#erealloc4P @T erealloc4X Gt OTS$MOVE4p @t OTS$MOVE4| G OTS$MOVE4 @ OTS$MOVE, G islink, b#islink, @ islink4' G isdirectory 4( b# isdirectory4' @ isdirectory44 GT isoksuffix4H b# isoksuffix4P @T isoksuffix, G efree, b#efree, @ efree4 G decc$closedir4  b# decc$closedir4 @ decc$closedir, G< efree ,( b#efree,8 @< efree,H G\ efree,T b#efree,X @\ efree,\ Gt efree,h b#efree,p @t efree4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf, G,efree,b#efree,(@,efree,8GLefree,Db#efree,H@L efree,LGdefree,Xb#efree,`@defree<Gmatch_regex_list<b#match_regex_list<@match_regex_list44GT decc$strrchr4Hb# decc$strrchr4P@T decc$strrchr4TGt decc$strrchr4hb# decc$strrchr4p@t decc$strrchr,Gestrdup,b#estrdup,@estrdup,Gestrdup,b#estrdup,@estrdup,$G8estrdup,0b#estrdup,4@ 8estrdup<HGlmatch_regex_list<Lb#match_regex_list<h@lmatch_regex_list,lGefree,|b#efree,@efree,Gefree,b#efree,@efree<Gmatch_reg ex_list<b#match_regex_list<@match_regex_list,Gefree,b#efree,@efree,Gefree,b#efree,@efree,Gefree, b#efree, @efree,G(efree, b#efree,$@(efree4xG decc$strrchr4b#0 decc$strrchr4@ decc$strrchr4G decc$txprintf4b#0 decc$txprintf4@ decc$txprintf4G d ecc$txprintf4b#0 decc$txprintf4@ decc$txprintf4 G decc$fflush4 b#0 decc$fflush4 @ decc$fflush4 G4file_properties4(b#0file_properties4 0@4file_properties44GT do_index_file4Hb# 0 do_index_file4P@T do_index_file < TGfree_file_properties< db#0free_file_properties< free_file_properties4-G decc$strcmp4.}#p decc$strcmp4-@ decc$strcmp,Gemalloc,b#(ema lloc,@emalloc,G<emalloc,0b#(emalloc,8@<emalloc,<Gdestrdup,Xb#(estrdup,`@destrdup4|Gerealloc4b#(erealloc4@erealloc,Ge strdup,b#(estrdup,@estrdup4+GDnormalize_path4,<b#0normalize_path4+@@Dnormalize_path4'DGX isdirectory4(Pb#0 isdirectory4'T@X isdirectory4pG decc$txprintf4tb#0 decc$txprin tf4@ decc$txprintf,)Gisfile,*b#0isfile,)@isfile4G decc$txprintf4b#0 decc$txprintf4@ decc$txprintf,Gislink,b#0islink,@islink4@GX isoksuffix4Pb#0 isoksuffix4T@X isoksuffix4!G progwarnno4"b#0 progwarnno4!@ progwarnnoP P=fs= File-System( (=(File[Rules|Match] filename8=(File[Rules|Match] dirnameX =(File[Rules|Match] pathnamex= Checking dir "%s"... = FileMatch dircontains= FileRules dircontains=(Failed to open dir '%s' := FileRules dirname= Invalid path '%s': =( Checking file "%s"... 0=H= Checking dir "%s"... err: '%s' - invalid parameter  '%s' p=@2err: %s must be followed by [is|contains|regex] =0(err: Wrong number of parameters in %s X X=0 ;= emalloc=0 `;=04  decc$txprintf= %sh7decc$ga_stdout decc$strrchr do_index_file free_file_properties d ecc$fflush file_properties=0";=P8| efree; match_regex_listestrdup=(=0 ";=@$ Perealloc;p isoksuffixislink decc$readdir8OTS$MOVE=0 ` ;=T  decc$closedir! progwarnno# decc$strlen% decc$opendir= In dir "%s": ' isdirectory=0 ;=@,< )isfile+normalize_path= 0";=- decc$strcmp= = filename=title =not=regex/ decc$strcpy 1add_regex_patterns=0";=pP 3decc$strcasecmp5 decc$strcat=$8=is@= dirnameP= directory`= containsp= pathname=0 ";=(@,< FileMatch= FileRules 7getYesNoOrAbort=FollowSymLinks=0 ;=0$ 9free_regex_list@ @6=h h44044; ;=+#"FSCompaq C V6.5- 001 = 44= initModule_FS4=.&% . . .$ =  = 44= freeModule_FS4=6.- . .  = @ = 44=configModule_FS4=QIH . . .  . . ., = 0m m= 44= get_rules4=  . . . . . . / . . . / /} / / . / / "/ :/H /  = p, ,=( fs_already_ind exed = 0 0= `44= indexadir`4= {/  {/  {/  / / /  / / /( / / / /* / / / / / / / / / / / / /; 0  0 0 0    0< 0 0 0 0 0  0\: :=  t 4= 0 = : :=   4= 0] ]=v 4=  4=  = `$ $=  indexafile = V V= 44=check_FileTests 4= @0 @0 @0 @0) L0& s0  |0 ~0 |0 {0 v0  0 v0 0` 0 0 0 N0A N0 N0 U04: :=  44= M0} }=v44= <4= @4=  = $ $=  split_path =   = `404= printfile`4=tlk 0 0  0  0 0 0 0 0 0 0 = @ = 4p4= compfilenames4= 0 0  = 0$ $=  printfiles = # #= printdirs =  = 4(4= adddocentry4= 1 1 1 1 1 1 1 1 1 1 1 1 1 = 0 = 404= fs_indexpath4=skj '1 '1 '1 /1 /1 71 71 0 (Z Z=  4=  e4= :1 =  =  me4Le4Re4 =  decc$ga_stdout decc$fflush decc$txprintf decc$strcat decc$strcpy decc$st> rrchr decc$strcmp decc$strlendecc$strcasecmp decc$opendir decc$readdir decc$closediremallocereallocefree isoksuffixestrdup add_regex_patterns match_regex_listfree_regex_list do_index_filenormalize_path isdirectoryisfileislinkfile_properties free_file_properties p rogwarnnogetYesNoOrAbortOTS$MOVE c$gaww1fَ]V1.0@@httpV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$(HTTPIndexingDataSource0J initModule_HTTP0JfreeModule_HTTP8JconfigModule_HTTP0Jp  url_method0J url_serverport(JP url_uri(J@ get(Jpcmdf0JPreadline(JPlgetpid8Jphttp_already_indexed(J @add_url0J0http_indexpath8 HTTPIndexingDataSource =#G^0[~^ ~(0GG8b@Zk B&G4G(bX"@Zk=@BGGHb4G@Zk B0@4G(b@Zk`BGGTGhb@ZkGPBXbd C$4GDB @ZkGGD@# ^"@c "@"Fc"/0@c #? G $G]] }(0@#k///C#4GQ^[~^ GG ^b/@ZkB 4Gb@Zk]G]] 0#k/Q#TG~^^~ (0޴80[@GGG4GH;"8bG@ZkB#4GbX D c@Zk4Gð B4G(b"@Zk/0BGTG@""8b@Zk#B4GbX D c4G@Zk ~/ B4G(b"@Zkv/0BGTG""8b@Zk5 #`B4GhbX D' #@ZkBP@GTGb4G/@ZkGTGcBb#@ZkB4Gb@Zk`B4Ghb@Zk BGTG$(b"@ZkAð B4G(bx"@Zk:/"0BGTG8bG`1"/@Zk.@BGHb4G=@4G@Zk$G C=@B4G/@///cpB4G0@xbgB@@Zk% C @_ ð B4G(b0"@Zk/GG]]G} (0ݤ8@P#k///# tG^~[^ ~(08GGGGGG~Gb @Zk @cBGBbtGy`@R""m`@Zkk/ G0B"BbtG@ B8" D@cy`@Y`@ZkW/\# BGTG(b @Zk @cPB"BGbtGy`@p"D`@ZkB@BGGTGHb@Zk @cBGBbtGy`@PR""1`@Zk//GGb#8@0B(G4G8b@ZkBGG4Gb/@Zk]CGdG`/G G բGG/wG/rG]G] }(08@#/k///P#^~ ^(~08@޴HPGGGGG^>"{#@@BG4GHb@Zk=E@Š7///0B&GtG8b@ZkPBGFGXb@ZkG="b#@G="b#@0BGG8b/@Zk///Ơ@c BGtGpBxby`@R"` "//@Zk4G/BG4Gb@Zk`BGG4Ghb@ZkGeg G] ](}08@ݤHP`#k/#TG^([~>^8;" GG0{@ZkG= @GG]] 0#k//#^~ ^(~0GGC{#>>"_//G/=GTG(B0bBa G@Zk(BG4G0b/@Zk]= @GG] ](}0@#k/#^~^ ~(GGG{#_/G /#B4Gb@@ZkG]] }(0#/k ///#4G ^~(^0~8@H޴P@[X`>h^pGGGGGGG?! ^Hb/@Zk B@4G(b@ZkB GGHtG""b@Zk BG4G(b/!@Zk% G4G B(b @@/@Zk%@#GtGBb @y B(A" G//@ZkPBG4GXb@Zk BG4G(b@ZkGTG@#Bby @" @Zk@"%4G@B%s!Hb"@Zk@BGG4GHb/@Zk@BAG4GHb@Zk@B AG4GHb@Zk BA4G(b0@@ZkBGG="GGGGb@ZkBG4Gb@ZkPBGG4GXb/@ZkPBG4GXb@Zk// s/ BG4G(b@ZkBG0""TGb/@ZkBG""TGb@ZkBG GTGb"/@ZkG//B?"G("tGb/@ZkB4G("b@Zk'C@ GD 8@E/@L֤H&CDxD$BG?"GtGb@Zk@BG4GHb@Zk@B?"(",GtG bEH<  @/@Zk`BG("TGtGhb/@Zk ݠBG4Gb/@Zk@cBp"GbGtGy`@`//@ZkGG ](]0}8@HݤPX`=h]p = #/k///#4G(^[~0^8~@GGC >^b~@ZkB4Gb@Zk=B4Gb @0@@Zk BG =G]}G(b@Zk}G4G[/@ZkBG4Gb @Zk G(]0]8}@P#k/#4G^~^ ~(08 GGG[b$  /@ZkGtG0B$8b@ZkG2B4Gb@Zk= 1@ @.JXD$///$ BTG(b1B@Zk$0BGtG8b@0 B"@Zk$4G Bb!@G$@Zk 1@@ , HXDG]] }(08@#k/0GG"#~^ [^GG(b/@Zk0G]]C #k//0k/`#4G^~ ^(~08@޴H[ PX>`^h~px޵GGG&G\b@ZkBp@4Gb/@Zk%$Gpb# \!=_`"`BGG]hbG1"@ZkBG4Gb@Zk'B@"4Gb "/@Zk @.R@J@>gB" `"4Gb@Zk@.R@J@>bGGGGGB0b# k!;_5 G/@#` GtGB)b"Y @ -M@ZkPB 4GXb@ZkB-GTGb/@Zk.`"]"b#GPJ>G'_D` BGG -TGhb@ZkBGB"TGGtG/@ZkB8""4Gb@ZkB GGTGb@Zk BGGGtG(b@Zk/B GTGb@Zk B " GtG(b@Zk/ B GtG-(b@ZkBG"" tGb/@Zk@`tGBGb"yA,-@Zk)//@`p b"BGEGb"A/-//@ZkB GGtGb/@ZkݡBGGbGTG(@ZkBG4Gb@ZkB 4G8""tGbO!@Zk"eH-N",H.(.3oJGhJshJ`BhbIA.HTGETF3F!HJuJVF5FH>(>p""@Zk//IGG b#S_G/BG4Gb@ZkAGb#G. PJ>-0 BGGV_ G b#G:_G/BG4Gb@Zk#//CGGRFGb#MI.COFxE , H/Gm/3_ G /@`GtGBbp"yA@Zk%pb#\ϡf_`"G@b#GP1"_\pb#/[_`" GG@b#01"_\pb#Q_`"G@b#G1"_? BG4G(b/@ZkG] ](}08@ݤHPX=`]h}pxݥ#/k4 G8 get_libexec40b# get_libexec44@8 get_libexec,8GTemalloc,Hb#emalloc,P@Temalloc4XGt decc$strlen 4db# decc$strlen4p@t decc$strlen,tGemalloc,b#emalloc,@emalloc4 G decc$strcpy4 b# decc$strcpy4 @ decc$strcpy,Gefree,b#efree, @efree,Gefree,b#efree,@efree,Gefree,b#efree,@efree4O<Gldecc$strcasecmp4P`b#decc$strcasecmp4Oh@ldecc$strcasecmp45lG decc$atoi46 |b# decc$atoi45@ decc$atoi,MGprogerr,Nb#progerr ,M@progerr4OGdecc$strcasecmp4Pb#decc$strcasecmp4O@decc$strcasecmp45G decc$atoi46b# decc$atoi45 @ decc$atoi,MG(progerr,Nb#progerr,M$@(progerr4O0GHdecc$strcasecmp4P@b#decc$strcasecmp4OD@Hdecc$strcasecmp4PGt decc$strlen4Xb# decc$strlen4p@t decc$strlen4!tG erealloc4"b#erealloc4!@erealloc4 G decc$strcpy4 b# decc$strcpy4 @ decc$strcpy4UGnormalize_path4Vb#normalize_path4U@normalize_path4QG isdirectory4R b# isdirectory4Q@ isdirectory,MGprogerr,Nb#progerr,M@progerr,MGprogerr,N b#progerr,M@progerr4O$GDdecc$strcasecmp4P0b#decc$strcasecmp4O@@Ddecc$strc asecmp,LGlemalloc,Tb#emalloc,h@lemalloc4SG newswline4Tb# newswline4S@ newswline,MGprogerr,Nb#progerr,M@progerr<TGequivalentserver< b#equivalentserver<@equivalentserver4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4G decc$txprintf4b# decc$txprintf4@ decc$txprintf4$G< isoksuffix40b# isoks uffix48@< isoksuffix4LGl decc$txprintf4Tb# decc$txprintf4h@l decc$txprintf4pG urldisallowed4 b# urldisallowed4@ urldisallowed4G decc$txprintf4b# decc$txprintf4@  decc$txprintf,Gemalloc,b#emalloc,@emalloc,Gestrdup,b#estrdup,@estrdup,Gbighash, b#pbighash,@bighash40GH decc$strcmp4@b#p decc$strcmp4D@H decc$strcmp<HGdequivalentserver<\b#pequivalentserver <`@dequivalentserver4G decc$strcmp4b#p decc$strcmp4@ decc$strcmp4G decc$txprintf4b#p decc$ txprintf4@ decc$txprintf, G emalloc, b#pemalloc, @ emalloc, G, estrdup,$ b#pestrdup,( @, estrdup4| G decc$strstr4 {# decc$strstr4 @ decc$strstr4@ G X decc$strchr4D b# decc$strchr4T @X decc$strchr4X Gt decc$strlen4h b# decc$strlen4p @t decc$strlen4 G decc$strlen4 b#P decc$strlen4 @ decc$strlen4h G decc$strlen4 b# decc$strlen4 @ decc$strlen, G emalloc, b#emalloc, @ emalloc4  G decc$txsprintf4  b#decc$txsprintf4  @ decc$txsprintf4- G decc$__utc_time4. b#decc$__utc_time4- > @ decc$__utc_time4- G4 decc$__utc_time4. b#decc$__utc_time4-0 @4 decc$__utc_time4H Gt decc$txprintf4L b# decc$txprintf4p @t decc$txprintf4/t G decc$sleep40 b# decc$sleep4/ @ decc$sleep4-  G decc$__utc_time4. b#decc$__utc_time4- @ decc$__utc_time4 G decc$txprintf4 b# decc$txprintf4 @ decc$txprintf4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4 G decc$st rlen4 b# decc$strlen4 @ decc$strlen4 G, decc$strlen4$ b# decc$strlen4( @, decc$strlen4, GD decc$strlen4< b# decc$strlen4@ @D decc$strlen,D G\ emalloc,P b#e! malloc,X @\ emalloc4 \ G decc$txsprintf4 | b#decc$txsprintf4  @ decc$txsprintf4+ G decc$system4, b# decc$system4+ @ decc$system, G efree, b#efree, @ efree," G efree, b#efree, @ efree4- G decc$__utc_time4. b#decc$__utc_time 4- @ decc$__utc_time4) G decc$strcat4*b# decc$strcat4)@ decc$strcat43G, decc$fopen44$# b# decc$fopen43(@, decc$fopen4%0GT progerrno4&Db# progerrno4%P@T progerrno4#`G decc$fgets4$tb# decc$fgets4#@ decc$fgets45G decc$atoi46b# decc$atoi$ 45@ decc$atoi4#G decc$fgets4$b# decc$fgets4#@ decc$fgets4G decc$strlen4b# decc$strlen4@ decc$strlen4#G4 decc$fgets4$b# decc$fgets4#0@4 dec% c$fgets414GT decc$strtol42Hb# decc$strtol41P@T decc$strtol4'\Gt decc$fclose4(hb# decc$fclose4'p@t decc$fclose4xG decc$txprintf4b# decc$txprintf4@ decc$txprintf4G& 4 decc$strlen4(b#p decc$strlen40@4 decc$strlen44GL decc$strlen4Db#p decc$strlen4H@L decc$strlen,PGhemalloc,Xb#pemalloc,d@hemalloc4 hGdecc$txsprintf4 b#p' decc$txsprintf4 @decc$txsprintf,Gefree,b#pefree,@efree,G4emalloc,b#Pemalloc,0@4emalloc4#@GT decc$fgets4$Lb#P decc$fgets4#P@T decc$fgets4d( Gx decc$strlen4lb#P decc$strlen4t@x decc$strlen4!Gerealloc4"b#Perealloc4!@erealloc4#G decc$fgets4$b#P decc$fgets4#@ decc$fgets4G  decc$strlen4) b#P decc$strlen4@  decc$strlen4 tG decc$getpid4b# decc$getpid4 @ decc$getpid4GH decc$strlen4@b#0 decc$strlen4D@H decc$strlen,HGdemalloc,Tb#0emalloc,* `@demalloc4 Gdecc$txsprintf4 b#0decc$txsprintf4 @decc$txsprintf4G decc$strlenD D4b#0 decc$strlen4@ decc$strlen,Gemalloc,b#0emalloc,@emalloc,+ Gemalloc,b#0emalloc,@emalloc4pG decc$txprintf4xb#0 decc$txprintf4@ decc$txprintf4CG decc$fflush4Db#0 decc$fflush4C@ decc$fflush4;G getserverinfo4<b#, 0 getserverinfo4;@ getserverinfo4EG hasfilter4F b#0 hasfilter4E@ hasfilter4=G4OTS$MOVE4=0@4OTS$MOVE4?4GL decc$strncmp4@Db#0 decc$strncmp4?H@L decc$strncmp4IL- GlparseHTMLtitle4Jdb#0parseHTMLtitle4Ih@lparseHTMLtitle4AlG SafeStrCopy4Bb#0 SafeStrCopy4A@ SafeStrCopy4KG decc$strrchr4Lb#0 decc$strrchr4K@ decc$strrchr4AG SafeStrCopy. 4Bb#0 SafeStrCopy4A@ SafeStrCopy4AG SafeStrCopy4Bb#0 SafeStrCopy4A@ SafeStrCopy4?G decc$strncmp4@b#0 decc$strncmp4?@ decc$strncmp4$GD decc$txprintf4,b#0 d/ ecc$txprintf4@@D decc$txprintf4`G decc$txprintf4pb#0 decc$txprintf4@ decc$txprintf4GGfile_properties4Hb#0file_properties4G@file_properties49G do_index_file4:b#0 do_index_file49@0  do_index_file<7Gfree_file_properties<8b#0free_file_properties<7@free_file_properties4?G  decc$strncmp4@b#0 decc$strncmp4?@  decc$strncmp434Gx decc$fopen448b#0 decc$fopen43t@x d1 ecc$fopen4G decc$strlen4b#0 decc$strlen4@ decc$strlen4'G decc$fclose4(b#0 decc$fclose4'@ decc$fclose4G decc$txprintf4b#0 decc$txprintf4@ decc$txprintf,,G2 Defree,8b#0efree,@@DefreeQ Q=http= HTTP-Crawler =(Link already processed.8= Skipping %s: %s P=(URL disallowed by robots.txt.p= Skipping %s: %s =(Wrong method or server.=(3 Failed to open file '%s': = Now fetching [%s]...=8)sleeping %d seconds before fetching %s =(%s/swishspider@%ld.links0=(%s/swishspider@%ld.contentsP=(%s/swishspider@%ld.responsep=H9URL '%s' returned redirect code %d without a Location. =0%Indexing %s: Content type: %s. %s 4 =`TSkipping %s: Wrong content type: %s. retrieving %s (%d)... %s/swishspider@%ld0=8/EquivalentServers requires at least one value`= equivalentserverx=0$SpiderDirectory requires one value=PBSpiderDirectory. %s is not a directoryDelay requires one value=%MaxDepth requires one value| | =05 ;=@( emalloc get_libexec decc$strlenefree decc$strcpy=0(";=P$  decc$txsprintf=0"P;= 4  decc$getpid;=0"p ;=0(  decc$strstr=://=0"6  ;=@ @ decc$strchr=0" ;=0 =0";=`0 ; decc$strcmpbighash equivalentserverestrdup decc$txprintf=0"@;=@0<  isoksuffix= Too deep.07  urldisallowed=Wrong suffix.P=0";=@(< !erealloc# decc$fgets% progerrno=r' decc$fclose=( > ףperl "%s%s/swishspider) decc$strcat+ decc$system=0 "@ ;=@ -decc$__utc_time= .response@=" "%s" "P8 / decc$sleep1 decc$strtol= Status: %d. %s 3 decc$fopen5 decc$atoi=text/ 7free_file_properties9 do_index_file= (filtered); getserverinfo= .contents8OTS$MOVE7 decc$unlink? decc$strncmp=0 ;=T A SafeStrCopy79 decc$ga_stdout= text/htmlx=.linksC decc$fflushE hasfilter= Gfile_propertiesIparseHTMLtitleK decc$strrchr=0";=P8 Mprogerr Odecc$strcasecmp=delay(= maxdepth@Q isdirectoryS newswline= spiderdire: ctoryUnormalize_path=0 ;=00 < <=$@ @6=h h44044= ==-%$HTTPCompaq C V6.5-001 = 44=initModule_HTTP; 4= 8 8 8 8 8 8 8 8 8 8 8 8 8 8&H 8 8 8 8, =  = 44=freeModule_HTTP4=IA@ 8 8 8 8 8 8 8 =  = 44=configModule< _HTTP4=  8 8  8  8 8 8 8 8 8 8 8$ 8 8 8 8 8 8 8 8 8  9, = 0C C= @44= add_url@4= 9 9 9 9 9 9 !9>= !9 &9 &9 +9 -9 -9W 39 39 69 89 99  :9  T9, = p = !4p4="http_already_indexed4=[SR c9 ]9  c9 j9 m9 m9 s9 v90 =  = p 44= url_methodp 4> =80/ }9 }9 }9 }9  = p =  44=url_serverport 4=B:9 9 9 9 9  =  =  4P4= url_uri 4=% 9 9, =  = @ 44= ? get@ 4=)! 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 : : : : ": ": ": 1:H =  = 4p4= cmdf4=RJI 7: 7: 7: 7: 7:@  <: @:  =  = 4P4=readline4=skj E: E: J: J:  ]:  [:  [: [: [:( = p = P44= lgetpidP4=MED y: u: y: u: u: {: }: }: = Y Y= A 404=http_indexpath4= : : :  : : : : : : : :. :e : :) : :  : : : : : : :  : : : : ; : : : : ;  ;  ; ; ; ;YB  ; "; ; *; *; /;( :oP =  = ( ( decc$getpid decc$sleep decc$unlink decc$atoi decc$system decc$strtoldecc$__utc_timedecc$ga_stdout decc$fclose decc$fflush decc$txprintfdecc$txsprintf decc$fopen decc$fgets decc$strcatC decc$strchr decc$strcpy decc$strrchr decc$strstr decc$strcmp decc$strncmp decc$strlendecc$strcasecmpemallocereallocefree isoksuffix SafeStrCopyestrdup do_index_filebighash get_libexecnormalize_path isdirectoryfile_properties free_file_propertiesprogerr progerrnoD  newswline getserverinfo urldisallowed equivalentserverparseHTMLtitle hasfilterOTS$MOVE +c$geww1GKgَ]V1.0FF httpserverV1.0 4-AUG-2004 09:34Compaq C V6.5-001h h $ABS$i$CODE$t $LITERAL$P$LINK$H$DATA$E $BSS$ $READONLY_ADDR$ $READONLY$0J` getserverinfo0J   urldisallowed8Jpequivalentserver =0#? 4GH^~P^X~`hp޴x[>^~޵G ۤGGG("b/&@Zk?"4GBb&"@Zk G ="TGBb/@Zk BC="TG,G(bG/F /@ZkC0Gy/GGG@b#O@///Gi//BG4Gb@Zk= G4GBb@ @@ZkBG,]/&? :/" =! H/@Zk ݢ0JGBB,5/5Ha5HJpJD!GD0G<5?D }SB="0]@ZkĢ =B@#qGpGqJPJFW@B9 B GtGbp""@ZkB4Gb@Zk@B4Gb @ /@ZkPB@TG0@Xb@ZkG tGx""BDb@Zk(B4Gb&\/@ZkBp@4Gb@Zk(=BG,b!$\!8=@Zk("BGG,8]b`1"/@ZkBGd", &]"Gb@Zk(DB4Gb&\/@Zkf(@4GBb @& \/@ZkPB TG0@Xb@ZkG G TG(B TGfb ¥&\!0/@Zk("BGG0]bG@1"@ZkBTG`""b/@ZkB4G@b@ZkBG0@4Gb@Zk.BGH G4GGbGPJ>G@}@ZkA , `!fAA H <//&AG@/.JCUBBFF/s"fB/fB// Gc/kBGE/K@///3,`F3HCU!@!@ FDK.s"JCUBFBFB/s"KCUCDCD/8S/s"SKCUBB2F0F/3,s"3HCU@@FF&.s"JCUB )GB 4E/ /s"KCU@@RGEFs"kB?fB/3,3HI CU!@!@FD/s"fB//XK3!?GBGtGTGb@ZkB GtGTGb/@Zk.PJ>%.%Jx$F/o///k?0BGGtGtG8b/@Zk@W@AD^ X@E//@ TG 4GVGG]"b#.@=0BG ."GtG8btGx!D// @Zk-0B G4G8b@Zk / ///p0B4G8b@ZkG// 4G=Bb0 @/@Zk`BGGtG]hb@Zkdg@#,A#H#<J B4Gb8F'.'JTGXD 4G@ZkqDpDqIPJFW@B 0BG4GtG."8b@ZkXE TGG."]"b#@GBG4Gb@Zk BG4Gb =0 B@Zk`BGGtG]hb@Zk@,@H<0BG4G8b@ZkpB@4Gxb@Zk0B,4G8b@Zk(BGb$\@Zk("BGGb@G 1"@Zk(}BGbc$\c@Zk("BGGb@G@1"@Zk(BGb$\@ZkBK GGGb("@@ZkGGH]P]X}`hpݤx=]}ݥ#k//0JFF//0IFFm//#^~ ^(~08@GG>C@{#_ BCTG="4G#(b/@ZkG//4G/= /B4GbG@ZkBGGGtGb@Zk///GG] ](}08@P#k///4G//#4G^0[~^ ~(08޴L @GGG8b (¤G/@Zk= @.J//Fe @.JSBsaF `//.@B4GHbJ@Zk//$, $H?0BG4G8b@Zk G]G] }(08ݤ@P#k/0B(G4G8b ¤@Zk% //&@P."PJPBF//#!1 @#%?c@@B4GHb.s"J@Zk#TG@^~[H^P~X`hGG(GGG >"b/@ZkBG="TM G,b/@ZkBG="TG0b/@ZkBG="TG4b/@Zk,=0CtG4=Bݢ?@B ]B0D?B81DB,4=3DUBb" F /@ZkB ]tG08=b@Zk4G(=/G% =b#@G%b#@///GG@]H]P}X`hp#k///4G//#TG0^ [~8^@~HPX޴`hGG(GC(b >"/@Zk0BN G="(TG8b/@Zk@@G0D1 0`/ BTG"="G(b@Zk0BGG="TG8b@ZkCC] =3FG@BHbtG0@TBFG0FG/ G@Zk@B]GGtGHb@Zk/cGG0]8]@}HPXݤ`hp#k/4G,,Gemalloc,xb#`emalloc,@emalloc,Gemalloc,b#O `emalloc,@emalloc4G url_method4b#` url_method4@ url_method4Gurl_serverport4b#`url_serverport4@url_serverport,`Gtemalloc,lb#`emalloc,p@temallocP ,Gemalloc,b#`emalloc,@emalloc4GOTS$MOVE4@OTS$MOVE4G(OTS$MOVE4$@(OTS$MOVE4lG decc$strncmp4b#` decc$strncmp4@ decc$strncmp4Q G decc$strlen4b#` decc$strlen4@ decc$strlen4G decc$strlen4b#` decc$strlen4@ decc$strlen4Gerealloc4 b#`erealloc4@erealloc4Gdecc$txsprintR f4 b#`decc$txsprintf4@decc$txsprintf4G4 decc$strlen4 b#` decc$strlen40@4 decc$strlen,4GHemalloc,@b#`emalloc,D@Hemalloc,LGllgetpid,Xb#`lgetpid,h@S llgetpid4pGdecc$txsprintf4b#`decc$txsprintf4@decc$txsprintf,%Gget,&b#`get,%@get4G decc$strlen4b#` decc$strlen4@ decc$strlen4G decc$T strlen4b#` decc$strlen4@ decc$strlen4G4erealloc4 ,b#`erealloc40@4erealloc,HGtlgetpid,Tb#`lgetpid,p@tlgetpid4xGdecc$txsprintf4b#`decc$txsprintfU 4@decc$txsprintf4'G decc$fopen4(b#` decc$fopen4'@ decc$fopen, Ggetsize,b#`getsize , @getsize,Gemalloc,b#`emalloc,@emalloc4#GV  decc$fread4$b#` decc$fread4#@ decc$fread4(GD decc$strchr4<b#` decc$strchr4@@D decc$strchr4DGd decc$strchr4Xb#` decc$strchr4`@d decc$strchr< Gdecc$strncasecmp< W b#`decc$strncasecmp< @decc$strncasecmp< G(decc$strncasecmp< b#`decc$strncasecmp< $@(decc$strncasecmp,0GHefree,<b#`efree,D@Hefree,dGtefree,lb#`X efree,p@tefree,Gemalloc,b#`emalloc,@emalloc4!G decc$strncpy4"b#` decc$strncpy4!@ decc$strncpy,G emalloc,b#`emalloc, @ emalloc< < GX Y decc$strncasecmp< P b#`decc$strncasecmp< T @X decc$strncasecmp, G emalloc, b#`emalloc, @ emalloc, G emalloc, b#`emalloc, @ emalloc4! G decc$strncpy4" b#` decc$stZ rncpy4! @ decc$strncpy, G efree, b#`efree, @ efree4  G( decc$fclose4  b#` decc$fclose4 $ @( decc$fclose,( G< efree,4 b#`efree,8 @< efree,@ G[ X lgetpid,H b#`lgetpid,T @X lgetpid,\ G| cmdf,h b#`cmdf,x @| cmdf, G lgetpid, b#`lgetpid, @ lgetpid, G cmdf, b#`cmdf, @ cmdf,>\  G lgetpid, b#`lgetpid, @ lgetpid, G cmdf, b#`cmdf, @ cmdf,) G url_uri,* b# url_uri,) @ url_uri4$ G8 decc$strlen4, b#  decc$strlen4] 4 @8 decc$strlen48 GT decc$strncmp4L b#  decc$strncmp4P @T decc$strncmp4 G decc$strlen4 b# decc$strlenX X 4 @ decc$strlen4T Gh decc$isspace4\ b# decc$isspace4d @h decc$^ isspace4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4 G decc$strlen4 b# decc$strlen4 @ decc$strlen4LGh decc$isspace4Tb# decc$isspace4d@h decc$isspace4G_  url_method4b# url_method4@ url_method4Gurl_serverport4b#url_serverport4@url_serverport4G url_method4b# url_method4@ url_method4G$url_serverport4` b#url_serverport4 @$url_serverport< TGdecc$strncasecmp< |b#decc$strncasecmp< @decc$strncasecmp< Gdecc$strncasecmp< b#decc$strncasecmp< @decc$strncasecmp4\G url_method4a b#P url_method4@ url_method4Gurl_serverport4b#Purl_serverport4@url_serverport4G url_method4b#P url_method4@ url_method4Gurl_serverport4b#Purl_sb erverport4@url_serverport< 8Gldecc$strncasecmp< <b#Pdecc$strncasecmp< h@ldecc$strncasecmp< lGdecc$strncasecmp< b#Pdecc$strncasecmp< @decc$strncasecmp =(%s/swishspider@%ld.links c =(%s/swishspider@%ld.response@=(%s/swishspider@%ld.contents`=%s/swishspider@%ld  =0" ;=P0| 7decc$$ga___ctypet7decc$$gl___ctypea decc$strlen decc$isspace=00"P;=p4  url_methodurl_serverport decc$strncasecmp=0@"p;d = p0< r decc$fclose getsize decc$strncmp8OTS$MOVE decc$strchrdecc$txsprintfcmdflgetpidemalloc=0H";=X 8;;efree7 decc$unlinkerealloc! decc$strncpy=httpe =%srobots.txt# decc$fread%get' decc$fopen=0" ;=P$< )url_uri == user-agent:= disallow:(= swishspider8=@ @6=C C=3+f * HTTPSERVERCompaq C V6.5-001z z= 4`4= getserverinfo4=  5 5 5 '5 5  15 15 25 45$ :5 B5 F5 I5 I5 K5 J5 L5# N5 p5 q5 r5 r5 y5 }5 }5 5 5 5 5 5] 5 5q 5q 5g  5 5 5V 5 5R 5 5\ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6| $6 $6 &6  36 56 76 86 :6 :6 5T L5 : :=  <4= 5: :=  h $4= 5] ]=v$4= @4=  =Gv<4= L4= X4= d4= 4=  4=  44= p 4= T =  =  4  i 4= urldisallowed 4=@87 5 5 5D 50 5 =  # #= next_line = ( (=$parserobotstxt =  =  44= isolatevalue 4=H@? D6 D6 D6 D6 U6$ R6 = = == p4j 4=equivalentserverp4= d6 Y6  Y6  Y6  Y6  Y6  f6 g6 h6 k6 k6 k6 k6 i6H k6 k6 q6 q6 {6 z60 }6 =  = P4P4= serverinlistP4= 6  6  6  6 6 6 6 6 6 k 6 6 6 6 6 6 0 6 = | |ge4}ee4 = ( ( decc$unlink decc$fread decc$fclosedecc$txsprintf decc$fopen decc$strchr decc$strncpy decc$strncmp decc$strlen decc$strncasecmp decc$isspacel  decc$$ga___ctypet decc$$gl___ctypeaemallocereallocefree url_methodurl_serverporturl_urigetcmdflgetpidgetsizeOTS$MOVE `c$unww1gَ]V1.0AAregexV1.0 4-AUG-2004 09:34Compaq C V6.5-001  $ABS$id$CODE$m ` $LITERAL$$LINK$H$DATA$ $BSS$ $READONLY_ADDR$ $READONLY$ re_syntax_options re_max_failures8 re_syntax_options0J re_set_syntax8Jre_compile_pattern8JXre_compile_fastmap0Jpa re_search0Jan  re_search_20Jgre_match0JHg re_match_28J are_set_registers(Jpre_comp(JPre_exec(J Pregcomp(J(regexec0JPregerror(J regfree0 re_max_failures =o _"0a G/R" 1"_4G4G///.u!J"A"x6JaBTJFu2J>.WJ"Fx6J>.TJA"Fu2J>.WJ"Fx6J>.TJA"Fu2J>.WJF>.TJ"x6J A"Fu!J>.WJ "Fx6J>.TJF> .WJu2J " ! Fx6J>.TJA"Fu2J>.WJ]oBF>.TJF>/4GA#/.u8J8 X"v!JBTJFu2J>x.SaJ8 vFv!Jx>.TJX"Fu2J>p x.SaJ8 vFv!Jx>.TJX"Fu2J>x.SaJvFx>.TJ8 v!J X"Fu8J>x.SaJ 8 vFv!Jx>.TJF> x.SaJu2J 8 #vFv!Jx>.TJX"Fu2J>x.SaJ]BvFx>.TJF>/?0Fu1 JxQ Jrq Jaq J4G4F04JFC07vJFx1 JC06JF04F4F47JFCvQ J43vJvFv1 Jqq JC4`5JF48G4G8`3JvF8`\4JF\pk///;/k/// #4G`^~h^q p~x޴@[>^~޵GӠGBGHb^" ް$(,04@Zk CGb#8G/<@ %-F%_%0BG8b TG@ZkCG @BG4GHb@ZkCG///G%$ ݠB8FD0H0HDDPFFFFCCC}EH`8DFC PD_#PX=GCFFFCCHFDD6HDDhCCC0r FCCC{# 0`ECCCC 8E0Dpxݴ}ݵ}]=}ݶ}]==/k ݢ,t"}H/B.,.HEB6BwB \BC/k///$]}wB@G$3, 3H@+@F`5%@ /?GCCWG`/`K5BG`=?G0FCC/@:G  `/`K@GGF$/š///%:A G0@CQC'F1B/+@`%'B 0BG%TGs 8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////4GyJXK!G?à}J`/,$//e///e!AG0 @;@gG{C/+ egC`0BG%TG8b/@Zk`E GD0]/A@-A @D@*NA @0],= ).A @,=(/(A@(////TGyJXK!G?ݤH//(=]h:! .J7Ct B9#/C7Gz/zKUe@k@ LE@kD///,Hu@@&D ݤ/xFF؋F xFc@B/k` `} pE D"X}s/=}+B1"" D}qA//`q.uJkB.ݤJ%B/B ECD DFDF$/e///E;AG0`CzCGGZC/+`F EGC@0BG%TG8b/@Zk=`E GD0]/A@-A @D@*NA @0],= ).A @,=(u /(A@(////GyJXK!G?]$}KGz!`.}J3AjB/\|B\Ck//$///š///8A G0CCFB/+ 岷B0BG%TG8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////4GyJXK!G?$///š///e!A G0 @;@gG{C/+ egC`v 0BG%TG8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////TGyJXK!G?R$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/@ZkyEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////tGyJXK!G?$///š///e!A G0 @w ;@gG ={C/+ FegC`0BG%TG8b/@Zk=EGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////GyJXK!G?$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////TGx yJXK!G?$///š///e!A G0 @;@gG{C/+ egC`0BG%TG8b/@ZkEGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(////tGyJXK!G?Bݤ2E4}<@ݡTG0@C 0`C8bEE0B4}BSA8 QB/@ZkC8/<ݱ%@]8D0]RRB3ARTBr6QA@0B/G1AA$Ҳ 2P BrM 2//y š///!A Gp @ @D@/+ f@0BG%TG8b/@Zk]EGD0]/A@-A @D@*KA @0],= )+A @,=(/( A@(/////G"o#zJY/K!:G/?4ݡ.qIPJF>.TJ>@0B(,0@D //ݤ@}////`G0]$F@/e///9AG0 C8CGC/+ @C0BG%TG8b/@Zkz `E GD0]/A@-A @D@*DA @0],= )$A @,=(/$A@(////tGGGyJXK!G?0=:QC2q@C@@}/`G@]8=:1@C@ZC@]@@ @ BD/@BR"G ``$(0]4ݢ BA,=C 6BBF/yHXKG?š///%1AGp B!B'D!@/+ @%'@ 0BG%TG8b/@Zk EGD0]/A@-A @D@*FA @0],>{ = )&A @,=(/&A@(/////G"o#zJpvItHY/K!:G/?-NIE=o.S{JtFo> ݤ}/c //$ݤ"BBDD=$ݡ.G! H}//`4G/Y. YJ9#=@`/`K / EA&UAF+// E]$ G  ,H#/ AM.MJ, EA`*AA! D/ //#DB/BG4Gb| @Zk///`E=$KkA kA0D A+fAa. aJ! =/ A.J///BG4Gb@Zk///D=$D@@0DA$@a. aJ! =/ A.J///G_#`ATG DC @:G;G &` /`$EE D `.`J  A.JTGEE`z /,=/' /// , $] ݰD @.J ݰ A.J@gD.} JD// E@-IG%/////8AGpCCFB/+ @岷B0BG%TG8b/@Zky E GD}0]/A@+gA @D}@*GA @0],= )'A @,=(/'A@(///,=GG!(b#4A2qB` @( //=@%8DF@ @ PA///// AG @ @E A/+> Aű0BG%TG8b/@Zk5 DG?D}0]2A~ @3cB@D}@*CA @0],= )#A @,=(/#A@(///,=AG!GG b#=@&@G2q@_ @G,=Gb#GGX @,31@G!G '@!2q@ @2AG,=31@Gb#F @!(U ///,%//š///Š+AG 0`AfA D@/+` Ű@0BG%TG8b/@Zk EGD}0]/A@#d@@D}@*DA @0],= )$A @,=(/$A@(// /.GvoJUJ!F> ,%// =///9AG0 C8C GC/+ @ Ce0BG%TG8b/@Zk E GD0]/A@'@@D@*NA @0],= ).A @,=(/(A@(///.GvoJUJ!F> ݤB4=n @]DC8:1@Cn [ZC@C7@LlC!/'///0:@Ct!@C E/#x,8D/ d F/P,8F/ <LXF/@(l  xE/`lxF/ ` @/:1@C!F_/4G//G,$///;A GP`CwCFB/+`& 岷BŰ0BG%TG8b/@Zk DGD=0]/A@!-@@D=@*MA @0],= )-A @,=(/( A@(///.G"xJktHWJ!F>o/[tKkGo?< //h*//,=/ /// = G$}h}] EuAAF8D8 F/ /// }.#DGJuAU/UKuBBUBuBEB8EGF8`GD@D;F /8KtA#,HuBBEUBuBNFB8`GGD8D*D'F/X/XK#G lA . JuBBUBuBvGB8DVF8ED/D.F/ ,H#`A`/`KuBBUBDGFDFBuFFz .J lA"/ / KEGu@@`GFuBB8F8FDD5F$}Eu AAh]=8D8 FD/.F  DJuBBUBuBFB8@F#G8`GEJ`D;Fq.JBUBuB uBB F8@F8F D ,GD7D5F^`,H  DuBBUBuBlDB8@F#G8FF$`D6F/J-IuBBDUB'GuBB8@F E8G DD8F/6`/`K uBBUBwD#GF/`F BPGD ݡ @.J  An/nKFGuBBDFuB B 8E8FFD0F //}c }}s"}?F $////%.A GpAA$D!@/+ `%$@ 0BG%TG8b/@Zk DGD=0]0A@1,B@D=@*LA @0],= ),A @,=(/( A@(///}ݢ }"`.Jv@/K/=Y/9#YK ݡ.n/.!nK/G=$Dn@C }pD,@lD/`A.AJ rA.J,H ݢ . "J///TGxݥ,=GvAG E8/A` 4G2qC,4GG!,A2qA @!$//////.A GpAA D@/+> `尧@e0BG%TG8b/@Zk5 DGD0]/A@0 B@D@*LA @0],= ),A @,=(/( A@(///,=GD!ԡEGG(b#6A2qB @(=//////e'A Gp@@ cE kA/+ecA`e0BG%TG8b /@ZkDGD}0]/A@+mA @D}@*MA @0],= )-A @,=(/( A@(///TG,=tG(b#G @!}$} G$ cE `/////%0A GPBB$D!@/+ %$@ 0BG%TG8b/@ZkDGD0]/A@0 B@D@*LA @0],= ),A @,=(/( A@(///,///Š///Ţ7AG0BBFB/+ŲB 0BG%TG8b/@Zk DGD0]/A@0B@D@*GA @0],= )'A @,=(/'A@(///G//.Y/KJիBtFzJ!:G/?}-ID{#}š///%2AG0@BQB$F1B/+@F`%$B 0BG%TG8b/@Zk= EGD=0]/A@1&B@D=@*FA @0],= )&A @,=(/&A@(/////G!o!zJGG/ Y/K:GB/? o/ݥlK/@ZkA E/.JUJD`HF>ݠ@ 8D// /=/G  =pݤ/ "K8CX.XJk@D`$}D`,H C.JDwHD4GwA HW.WJRWJDswJSFW>/k@e@CFeD]@[Gr""/k@.J@8 FF/`B/`/KxFR#"R"@C".JxF.J B0F/=D}G@ ] .!"J$= F/1D! "`=//@G\?} ]"$=G@/R//uk@U@$ݢGE$DF"5 / F//// ]7/7K"@YC9,9H$BFBCF ?Gz KUAA3F4F0F/ ,DHD<"?G///C ?G0B"r. XE8bSrJr>7.7J+F P""/@Zk0B@"X""8b@Zk0B@"`""8b@Zk0B@"""8b@Zk0B@"@""8b@ Zk0B@"""8b@Zk0B@"""8b@Zk0B@"""8b@Zk0B@"H""8b@Zk0B@"""8b@Zk0B@"h""8b@Zk0B@"""8b@Zk0B@"X""8b@Zk0BB"h""8b@Zk0B<"""8b@Zk0B6"@""8b@Zk0B0"P""8b@Zk0B*"""8b@Zk0B$"""8b@Zk0B"""8b@Zk0B"H""8b@Zk0B"""8b@Zk0B """8b@Zk0B"`""8b@Zk/$=DD?DFFGCC CF?G E"@FCCCE _E ?EE0}CCCG CG(]8=CC@HP¤ ///Lf"P=@gC$F @{sG`//BG4Gb@Zk,AH5A2FqDDB/ JF/BG4Gb@ZkA5A0DaDDñA5A2FqD l@DB/`F///pBG4Gxb@Zk &E 'B1 F B G4Gb@Zk///,8DB/ 6J/y //`BG4Ghb@Zk///m,0DB/ PF/a //BG4Gb@Zk///U,(DB/ F/I//BG4Gb@Zk@ &E 'B1"F7 pBG4Gxb@Zk0 &DE 'B1!F' ÀBG4Gb@Zk &$E 'B1 /BG4Gb@Zk, E BFÐBG4Gb@Zk DwHD4GaA$HA.AJRAJDsaJSFA> 0A0B@""  4GL"F"/$///F"F"F"#F"# F" F# #"`##//? !" -INIEoIE =-IFMIwJ E= G/`DC#cDw@K`4G#yH GzA.JPJ`D`HF>=$=1@8 D3G/ X //]&p=CXݡ.! A@JR"kBkBeBeF5EFzG//r,lHk@8 FQG @/ ////KxKF@=! "A ,Hx Dm L/, AK+@!Ff eD",HDO]ukBXEUg@G`FS"sFw@J`/K`rA-4G3uJ GIOIwFwJE=i///$ݠGL#E]FG/@/// ݡt,tH"AC.CJ$=BF`CCFDuzHUgBkBF FD/ /XKG?"G///FD CXgF-NI=/`4/4KF;"F"$///F"F"F""F"" F"F" """"@// G +"" ,HFHGxKD <K/UK`DZUKcuHCGK?/0B8b"P""@Zk0B@"X""8b@Zk0B@"`""8b@Zk0B@"""8b@Zk0B@"@""8b@Zk0B@"""8b@Zk0B@"""8 b@Zk0B@"""8b@Zk0B@"H""8b@Zk0B@"""8b@Zk0B@"h""8b@Zk0B@"""8b@Zk0B@ t?="X""8b@Zk0BB"h""8b@Zk0B<"""8b@Zk0B6"@""8b@Zk0B0"P""8b@Zk0B*"""8b@Zk0B$"""8b@Zk0B"""8b@Zk0B"H""8b@Zk0B"""8b@Zk0B """8b@Zk0B"`""8b@Zk/$=DFFG?DDCEEF ?GD"@FCCC E ECC0}CCCCCG (= GC8]@=H B///j=G4G/@E@B`b//@Zk/'")@!0D A5AESF rD@//BG4Gb //@ZkA5A0DaDD 'A5ASFrD)B1!J2F HDpBG4Gxb/@Zk/')@!$D @DB//G4Gb@Zk/ ')@! D *D`B  G4Ghb@Zkv')@!6!Hp 8DB//G4Gb@Zkc/')@!P D\ 0DB//G4Gb@ZkO/')@!0DH *EpB  G4Gxb@Zk>')@!"D8 *EB  G4Gb@Zk.')@!!D( (DB//G4Gb@Zk/')@!/ DB//G4Gb@Zk /@D=?Dw HpAp. D4G!1HpJ4DSpJtJtFp>ݦ0A0B"ݶ A" 4G3/$=G"} ]G#//@G"} ]G"$=@}$ݠ fD#-#Ic } A,H ?Ew I E 4GzA!!I:.:JQ:J2DrZJ2F:>}$tB8`F9G///."J/*///"+#K!+!uAF/`JKk/[yK`Gk<"uA-FlJCjHIlD/ +< "uA-FpJA)HI0D/+<+.K"2JqA6ݤUBDE%////e6AGpBBhFsB/+>ehB`0BG%TG8b/@Zk5 DGD}0=/A@+cA @D} !#@@0=,]@2CB@,](/#B@(///D=G"(b#G!6B2qB@0=G( 'A2q@/K@0/////%$A Gp@@ (E )A/+`%(A 0BG%TG8b /@Zk E G_D}0=/A@+mA @D} !-@@0=,]@2MB@,](/-B @(///,!Dðue@g@F/PHxoDSQ@kDZ#M`.JxFI,%///E///6AGPBB D@/+ @0BG%TG8b/@Zk @E GD0/A@-A @D0B@0,}`3gB@,}(ݢ/'B@(///O/4GO!{KZOK![GO?(]/- I*I/=$//////#AG0`@h@EA/+`n AŰ0BG%TG8b/@ZkeE GD=0/A@)'A @D=0B@0,}`3gB@,}(ݢ/'B@(////yIXK!G?(]z/zK[zK!lIlGz?$@8D0= +A2q`AG[@@=G// 7//G3//G///G+//G'//G#//G//G//G// G//G//G //G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//G//4G//G//G//G//G//G//G//G//G//G//G//G//G/ /G//G//G//G//G//G//G{//Gw//Gs//Go//Gk/ LO=/Gg//Gc//G_//G[//GW//GS//tGO//GK//GG//GC//G?//G;//G7//G3//G///G+//G'//G#//G //G//G//G//G//G //B84Gb@ZkeG#AeG`]h]p}xݤ=]}ݥ#/k///T?9#R/"/1,{J""vTJAJyWJA1H;D1<.UJF>/XKG?k/q/tJ"1 xVJAJGaJ[qKtGtAJq?.q#WJvJF>.PJF"ywJ>,@HD</XKG?k///qFG3 /?#~ q#^;BsCSGG1`/@/."a"# ! TKUJ@#vJF">.a.J@#@GA#tJSxJ@GtFa>..a"JwJTJ@F>/.KwJUJF>/D /@/. ! D@KWJsJF>G] #x#G4 ~^FGB@q#;BtCTG2//@/.""!# ! UKVJ@#wJF">/.K@#@GA#uKTJ@GF>.."JxJUJ@F> /.> KxJVJF>/D /@// ! D@KXKtJG?G] #<DG/ tGk/a/.!" bJtG`FqKJ !B/`k//!B0!H3!JCp# pC {BF~//?FUBu."SuJgJ3!J?FFPBw`J"B/p.SpJgJ///0!J.0 BF4G?G6JYBJWJ9#FxKF>/y.SyJgJ///0 B3J0 BFFWBw`J"B/XKK//0 B7!K/FP BF5JKWBFXK"y6KG?/w.SwJgJ///P B3JP BGFXBw`J#B8/Y8K'K//P B8J.p B3!JG {B0JJFWJxKF>!B)///?FPB."VJJ0!J?FFYBwJ9#B/y.SyJgJ///3!J.0 B`F4G!B3uJJPJyFy8KF>G/k///0p#G~^G4G^~ (3C0޴8@H>PG^G# G / AG?"GGPᤰ/@Zk1FB///G///8C8`FD/ `v%1@T@D1`G0DF4G4y.yJ9#cB@`\|BCk/9.4G9#9JGBQ/`JZQK@GGQ?///.J9#p7B=B//BFFw J1C.J/4G:zK4G:Fz`JC/ `/[`KzG`?01B /GG9.9JQ?B"?BBO/C`///z.4G0!Bz#tH@GSzJtF "z>.sHPJz#FsH>.PJ"FsH>.PJz#FsH>.PJ"FsH>.PJz#FsH>.PJF>.sHPJFsH?B>.PJ Z#F>" ///z/4G0 B`zJ"[zKZ#`Gz?,H9#`7@B@DDw`K;C.J/W4G1QK4GFqtJC/T/ZTKQGT? 1@"/GG4GGG/Q/4G{HQK8@G@3/Y3K;G3?0BP#1"s"_GG//GGG/ t/4GtK{9J8FY/ZYK[GY?0@""9#GG//GG//,4G"B"pSK@HD"<3/`TKY4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K G3?s/`PK[pK" "`G`TKs?3/Y4K " G`SK3?s/[sKs"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K" G`PK3?s/[pK"`G`TKs?3/Y4K G3? vG   hG/` .TJG >//6 GG///Y/9."PK9J9#0JJ0J0B0C/{y/yKՁBBTGuy..9"qJ9#1'J'JJ1!J9#B0C/g:1@ZRCZYC $_=%@a/.y/y"9#JyK9#3gJgJ3aJ3B/S?4G9#/..DY#~#JJ9#F0JJ@0JBT@0CA` )C+@ !EQ@ {#iC/AGGG@@Zk/ P@0@'G9#$ 64 F6/G9#9#//9#//v4`Fv  //D1E0D@DVGG]]} (0ݤ8@H=P`#/k///4_Z#2/?1"/AGa/@Zk/// @ѠFPBQqk///Gk/#GGG~^{#G#GG^G@G] #k//p#~^^~ (0޴8@H>P^X~`hp޵xG TBGGB#= uAtF9`GBG5uA +BGpUG"5BGG1"!FG `BP.PJUBF4G/ caF`Gb#L_  )@C@/C AAG2F A8@G@c8A/`/// @ @FF6CBG_ AC nC@ C2D/G ///u.FuJ"A.JA.J/`U.UJA.JA..1A"J/ .JAv.vJAS..1A"SJ/y@ .JA4,4HAA/.1A"AK/m .JAS.SJA..1A"J/a@.1A A/ A[@/5,5H"Aa.aJA.JP .1A A_9.CAiô ACG C nCVG9/u.FuJ"A3,3H9 .JA..1A"J1.JAS..1A"SJ)@5,5HA..1A"J! .JAt..1A"tJ`U.UJA..1A"J@.1A A/? A /.J"AS/SK`.1A A9.CA/// @0AE@@0,0H@.J/@?DA.J//?DA@/@K AECqF /'ݢ=޶>GGGGG`b#GK@/// ////.1A0A0A(1A/G// // G]]} (0ݤ8@H=P]X}`hpݥx#/k///#GGG~^{#G#^GG @G] #/k///# $~C ^S >^~^~ (޴08@>H^P~X`h޵pxGs3 0@B!GGG 0A!~#޷>(,~048#ݷG<@0UA,C E {#lC/%ADGl#@ {#eC/:@AGGe#D {#zC/G@=D UCC]DH]z#DF/// {#`C/#@aDG`#L {#cC/GL]:u@}P}CAG~#_FD {#zC/ 3UCaFG]z#/ {#sC/_G0uBGF}Fs#/// {#pC/Gp#T0BF {#pC/GTCXD F // (@D]B@ B0R""pG6HCCL}6" 7@hݶ`p{#x]HPP] 6B= BF4G?#"R"6//BR"#;5""78{#pҢpFpBҲ;578pDp@;578pDp@;578 Dp@ J @0ݢB///;50BR"78{#"2"##Fp B20B=GF  $ݲ$ݠ@\ B 0@Bݰ//@+0@}(=B= 0@ݢ!ByG ݲ/}@%PB}h=C0=}Z#s"BF, =@ @{1B8F0`C*"C@=F8F*B}]=]=/*E<=4Go=ݡ}87ABBp]xݢ EA A .EDB4G;A; }C 7E 9EF F& `=8}</ : //:0A$"$"$#$Z#\865zx6\5\65zx6565zx657I B n=zx:8vu/0=A/ ///0=0A""#Z#A/? //)/")K)!B `\BtCk/ݦD/`}A8F $}/  =,]F/ ,H@B / K/e/eKXD/ F/ .,J@.J //.J 4A-:IP};IGRA:# :C yC[G/@///2 BR"0!J B#D2rcFrDFrcGr.B /0 BR".BF ///46AGG( A`@@BY/XPBQB~#9C!GHOB @// {#yC/0B G=GB!AGVA@Zk @ y#//6 96CQA!GNA {#yC/0BG=GGAG@Zk85AWA B67Cy#QAF(LA / {#vC/0BAGݶGG!AGG@Zk @ G?4G:I@D}S@G:#B!JG^P} :C 9@TBAG[BVBD /@CB`s" " {# "BG``638636363 636363;3!H 9@/?@G0@pC s"0B"{#"G;@363/0@40@CR1@0 @D@ZQCQ1@ڱ0 @-/49AGG(¦5AuBB5CY /S@Q@~#7CFN@ // {#wC/0BGG@8AGYA@Zk6C w#//67BQAF(LA {#wC/0BGGGA G@Zk AAA @9Bw#QA!GOA / {#yC/0BAG=GG8AGG@ZkC G4=G:I@D}S@G".@2!HG^P} B WBT4@RG[;@Y#@D@/Ԣ@B`s" 9# {# "!@`ӲY`SԢ8ӲԢӲԢӲԢӲԢӲԢGӲYS[S2H WB/_@G0@ pC s"0 @9#{#"G[@S/0@40@CUQB0@BD@ZQCQQBڱ0@Ba/=D/}A8F$}/ $}@.J$"#@.J///%/%KGB6I6 0JJPC.J8F|4AG* P} I 6@ @FWA////w@B"8AJ CcFw7#G7WCGWFעFײNB`/w0@B"NBcGw? /// =D/}A8@G@@$}/< $=@.J$}#s"@/K///.JGB:I"!'H'HAB.J8 D 4AG* P} I B @@GQA////ѢB1"8J CFѲFQCFQ1#D1QCGQB/q0B1"BcGq ///I.,=IJ)!Z D/ ///}E$}///D?E/,EK@ / K21@B  )!`.`JD/_//4AG/s?8IP}x"6I xB BPAG//@C";AK sCDFFPCFPGNCQ/00@C"NC#F0HÌ}E $}///D..JJ 21@B)!4D/| _/),"4HD @/@}A8 Gl $}/h//e.,eJ@ . J.J.J?DBTBD @wHD4G2A H2/R" 2KDD 7A1I)!"?DC 4A*`P}:I B PC:FGUA ///`B"9aJ 0CFUCFUբFղ5#D5UCGU?nB/0`B"nBG_ ///=G".P}JGN#@np`Gx`G/ `b#//# @ ~=.pDq DF).)JS#BsH@T4BU5B"Gp`F`BG/@Q8B@})/)KY;C , H@@E . JPBp aFp.4J #)!G4///).P}? GL]D=)JW#B[:BY9BpF9!C/ G/D]Q2BDݢ . JPB.JUBF4E!4!+//.J! ?D ///Y#C9 G/ ! ?D/@RCBR@F @! ?D/ Q#B1 F ! ?D/??D !4!/Ci/ "" BiKScBsaF ` /KBF/ G// BI"0 ]GG,= H @7@\@LCk/4G///A..!## `FYJJ2GJGJ2AJ2@///B/w/wK؁Fw.#xJ`FW.i/iK7"QJ5F?iKTB)#DD/&i.I..iJYJ2@J@}H=QBB[BZBXB ///z `BxI.),IJ0B"1"4H{#Z##ABB?"7,47!.0A:AG("pB)HBJ"!'HXC'H!!HAB[@G/yU@Q@~#) C !EhN@{`// {#iC/0BG=G@7AG@Zk//g BPAi#8)0AQA !ENA] {#iC/0BG=GGAG@Zk AUAK @QAi#)5A !ENAB/ {#iC/0BAG=GG5AGG@ZkB/ G//4G;I@]T@G"B2JVBIB\ B WBZBrGGD@/@B`" )! " Z#B`64I`飨T864 64646464G64IT:4VT)2H WB4/_@G:0@p C "0B)!"Z#G4V@T/?4[@0@R@0@0BWBұSC0CB7 /// ,@"D]= H)!T@F@E @A f @vEFFaAWF8bD@B } /&yE @$ G///A`AF EDB ]8D$]}8lAGG2eB,} XBxG G`4@@ AhBGGGtGpb A/@Zk@==@F 1$Fc?//E.e"SJXAF@FW//\ݢD/֢F/K//$=@//KE/EKXGD/7//ݤ@D/w//\D)qi,4=1A "i-(¦GGpH!A#gHa!@iI)!gH @#aH!BcA Z ///vTBQB~#9C!GwNB`// {#yC/0BG=GB8AGMA@ZkC &-C//6DQAy#LA {#fC/0BAGݴGG(AG@ZkAQAf#KA9@!G MA/ {#yC/0BAG=GG AGG@Zk@ G4G0ID=P}G"A;IG_@} B tCL@QAFKASAD/ AC#C`! s" 1" k! A` 1,` 8심ql 싸 QLӢ̲ql Ӣ̲q7AK Bl G Ӣ̲+,Ѡ̰/NC G 0@Cp@B !NC 0As"1"Gk!  Ӣ̲/0@4=0BYB0BD@TB#AHB$Ա0By@, , #"BH H)!G G&HH&H@ /-K"JBIk!ՀAA ,F"_F`),Gi#t[KA;H4DIv,vH8`D5a@ JF@5a@TG`,"HG A .F! i#,JG 8E/ ``.aJ4D )/h[KY;K(G)?#/uAAFGwJ F.A @ AJF@D B4G+ J/ . J`EDG"/),htJA4H(D)<)/I#:K"GG)! # .cxKWJF>6q@TX} =$1BVBF@G֢GKB@BB//@F11 B -B$qB11 B 6qBk!L K&-B11 B-Bp f ``$q@  /@$q@  G_~//)/I." #i#"7KXJ7JR[JJ7Jw@`#1`@)! DaHhI`tHHFI>),A4H D)///).I/"6JIK)!*A=1'J(A'J F1!J1C4*//],@FHR"*]r-rIR"/$`]2.2JR" ]r.rJ R"]r,rHR"/`].JR"HB]JB @/}3,3Hs" > }jB/}j@4.J""!F/ #.-7JI(B.c J4}4= AG}!Aa!@ @@/ZG(/mS@Q@6CFkO@/`~#/ {#vC/0BGݶG@8AGUA@ZkC(B//6EQAv#NA {#hC/0BAGGG,AG@A@ZkA6AQAFmh#kLA`/ {#vC/0BAGݶGG7AGG@ZkBG4 G0I@D=P}G"B;JG^ B tCC@@BFQBSBD/ACB`c s" 1" B`Ѡð`8㋬qc㋸qcSCqcGSCq7AK BcӠðSC`c/NC`G0@Cp`C c NC0Bs"1"G SC/0@4}0BWB0BD@TB9ALBdԱ0B7, - , #!I" " I H(I@HI(I(@ !1 @?D!HcHs0HD <).Q0J3F)>///.i/I#JiK)!5JJ5J uA +A)!//.)/"!J)K)!4JJ4J A ,A / K --II I-I)!,, @DHpHA,H0D,<=Q/q"{HZSK[GQ?///\}@@ uE wE/$%#4C/K///$}c #C/`m,!mH//%, &HG$@(IIA.J5A@.@J ///$=}1"s"@ 3.3J///E/EKG HHA.J5@E\ݢ#}=$=@@ wE vE`C,H$}c "C`p,pH///.E"JGb$=@!'H'HaBa/aK5 @ Q/QK///$!"@-I///-IG1'J'JqB.J5 B1DE?Àݢ$ݠ@/`-I$#"@/K///.JGb=]@& HYGHf@f/fK8Dj/?$"B-I$}!s"B-I///.%"JG HH`@ , H8DI}#$}@ EC@`///@.J$ݠ] Z#C,H///%/"6KG$@0JJA.J8F//w.wJ$=1"!@ ,.,J///e,eHG\@3gJgJA,H5@ D G//21@D=P;1@BRKB81`C[kCR$1C X C;Z@ءGRFGGWAQAA4/<@}CA/41Bc B$q @&1@41BZ#1""($& B$q@&1@c 41BB41BB : 1$q@&1@c ZQ ڢò `$q@&1@c :7G/?*A'@-IG,A7A!\A$C/k///4G///!"i/i,uK5JJmH!5Ju@A}`.JF/@@ED ///'///.JaD/k//8= n/ c// _// [// W// S//8}N`ݠ<`}h4G@@p]x}Dݢ-DT#D` TC=@CF3`///Ak!"R""d72֡d˱7d2vkנҰ;I zC =WR /0ݠA////0}0 Ak!"R""vAk/ݡ4G0XB`b0@E6I@ pE#ESP@/@ZkXB4G`bOP_A@Zk͠ D /h`DP`@h///(ݡ$= ]}g)@$@ *AA`ȱ砄iE0=4Gp]4G""x}/@F7 @/e ///ݠ}G@C(CG S FVG EB`@ B'*// 8Eݡ0n0@dA/HBQ@TGPb/@Zk ]HBTGPb  QA@ZkݠD t///$ݡ ].CA}@ FCC#E&FCkK+B`˰$ $DC@ //O/BP0B=!0=!C0B0 BR"s"aGB?ݡ0A G 1ΡXANA///= 0@A! ЀA#YZA 0@A@yKA 0@A`9AA 0@A YRA 0@A @UA 0@A9YA? }$=(]A##AE% @ @// G]]} (ݤ08@=H]P}X`hݥpx#/k///8BG@b/@Zk///C#s^~ ^(~s"08~qB@GGGGg`/`/ `KFFm /S= ."0J@.0JJAJ =0JPBM%@a.A#zJaB8`F$`G!"tG(bY@=A%@=#"A.AJ! AF@=.Ja/7JJaK7J@Ba.A"rJAB8@F"ݢ/6#Kv/ 8K"KpK8KBGB(bGtG*@=/%@@ //GGtG" b^@@G/G] ](}08@P#k///=4G! 0//#B^~^ ~(0G(GGG// ," H !D `.pJ ,0J H J0J0@@=#@? //GG"b#@=//#@?4GG]] }(0@#/k///G//C# s  ^~(^0GG3 ,[>H@\@]Ck//A/G"{#AK= _=pDA"@pFqFx FrF/ aD./"JK"5JJ5JC7B/}4G0///4GP.0 p."p#AJpJ""!'H'H!!HaB} P/[K/:GKGKK":AKZ@B]S/=.JB"BBp@D_]R"]/GG ](]0@#k/X@}@BE/0,,F2@B F0H H"1"aB`Ba/.aKJ DEp/1,pK1HtB`Bt/"1" ,tK HF7p/.pKJaB`Ba/.aK"1"J D)p/1,pK1HtB`Bt/ ,tK"1" HF}@B/@///0,,21@B0HH"1"aB`B.`/J`K D/_Gk/4Gk//#ۦG~^^GG{#ђFBVd_Ӏ"G]]! @@ #k//;#~^^~1@ (GG G/5 G3/0BG4G8bD /@@Zk/( "0BG"4G$8b@Zk( $4G BG2DJ(b4G2F$ @ZkDGb#bGD s"_@@G]]} (0#k//#4G^@[~^ GG#CHb@ZkG}b#GGG"i_G]] C 0#k//#&4G^~s"^ ~(08޴@[HPGG_&PDܲR"DGG >G?"b/@Zk//GX/GG//`B@8bRsB/ ///@S@s/`///G///.qH0@_"@0@PJF>_/BG4Gb@Zk BG4G(b@ZkD""D@F/#0G#cDCpB$HbGD4Gxb@ZkGGG@b#g_DEG]] } \=(08ݤ@HP`#k/#4G P^h[~X^`~hpxGGG#pb8<=C@}D@Zk8}D=`@"GG3P FӢ"D0D?@/Բ5BӢs""/C0 F2@J1 J?DxBԲCP@$4Gb GXFQF B$=/ (}H/@ZkxBH4G,b@Zk,0@BF4Ga/(]""DG<}G^GGb#s_Ӥ@P,E2aHC`G0@ݢr" rB`BGWF//@/// B8"""TV LUV46uvUVt:!J SCv_#B/ `///U0 B""#B"V?B4G b@ZkB04G b@ZkGGP]X]`}hpx#k///B3B#4F^~ ; ^ ~4G (08GGGG@B/ @[HbDG@Zk0@`B21@G=$@$1@G d@tGhb@Zk,@H< ///PBGGTGXb@ZkG]] }(08@# /k///0BG8b/@Zk///#4G~^^~ GGG [(b//@Zk4G B(b@Zk4G# B(b!D#/@ZkG]]} 0#k4Gt decc$malloc4Hb#` decc$malloc4p@t decc$malloc4 G decc$realloc4b#` decc$realloc4  @ decc$realloc4G decc$malloc4b#` decc$malloc4@ decc$malloc4 G decc$realloc4b#` decc$realloc4 @ decc$realloc4 G decc$realloc4 b#` decc$realloc4  @ decc$realloc 4 h G decc$realloc4x b#` decc$realloc4  @ decc$realloc4  G decc$realloc4 b#` decc$realloc4  @ decc$realloc4  G decc$realloc4 b#` decc$realloc4  @ decc$realloc4 G d ecc$realloc4b#` decc$realloc4 @ decc$realloc4 G decc$realloc4b#` decc$realloc4 @ decc$realloc4 G$ decc$realloc4b#` decc$realloc4  @$ decc$realloc4 G4 decc$realloc4(b# ` decc$realloc4 0@4 decc$realloc4b#` decc$realloc4 G$ decc$realloc4  @$ decc$realloc4 G decc$realloc4b#` decc$realloc4 @ decc$realloc4 xG decc$realloc4b#` decc$realloc4  @ decc$realloc4 8GT decc$realloc4Hb#` decc$realloc4 P@T decc$realloc4G decc$isdigit4 b#` decc$isdigit4@ decc$isdigit4G decc$isdigit4  b#` decc$isdigit 4@ decc$ isdigit4 G4 decc$realloc4(b#` decc$realloc4 0@4 decc$realloc4 HGd decc$realloc4Xb#` decc$realloc4 `@d decc$realloc4 G decc$realloc4b#` decc$realloc4 @ decc$realloc4 G  decc$realloc4 b#` decc$realloc4  @ decc$realloc4 "G4" decc$realloc4("b#` decc$realloc4 0"@4" decc$realloc4 'G( decc$realloc4(b#` decc$realloc4 (@( decc$realloc4 *G4* decc$realloc4(* b#` decc$realloc4 0*@4* decc$realloc4 8+GT+ decc$realloc4H+b#` decc$realloc4 P+@T+ decc$realloc4 X,Gt, decc$realloc4h,b#` decc$realloc4 p,@t, decc$realloc4 H-Gd- decc$realloc4X-b#` decc$realloc 4 `-@d- decc$realloc4 x.G. decc$realloc4.b#` decc$realloc4 .@. decc$realloc48/GT/OTS$ZERO4P/@T/OTS$ZERO4!x2G2 decc$strcmp4"2b#` decc$strcmp4!2@2 decc$strcmp4!2G2 d ecc$strcmp4"2b#` decc$strcmp4!2@2 decc$strcmp4!2G2 decc$strcmp4"2b#` decc$strcmp4!2@2 decc$strcmp4!2G2 decc$strcmp4"2b#` decc$strcmp4!2@2 decc$strcmp4!2G3 decc$strcmp4" 3b# ` decc$strcmp4!3@3 decc$strcmp4!3G,3 decc$strcmp4"$3b#` decc$strcmp4!(3@,3 decc$strcmp4!,3GD3 decc$strcmp4"<3b#` decc$strcmp4!@3@D3 decc$strcmp4!D3G\3 decc$strcmp4"T3b#` decc$strcmp4! X3@\3 decc$strcmp4!\3Gt3 decc$strcmp4"l3b#` decc$strcmp4!p3@t3 decc$strcmp4!t3G3 decc$strcmp4"3b#` decc$strcmp4!3@3 decc$strcmp4!3G3 decc$strcmp4"3b#` decc$strcmp4!3@3 decc$strcmp 4!3G3 decc$strcmp4"3b#` decc$strcmp4!3@3 decc$strcmp4!3G3 decc$strcmp4"3b#` decc$strcmp4!3@3 decc$strcmp4!3G3 decc$strcmp4"3b#` decc$strcmp4!3@3 decc$strcmp 4!3G> 4 decc$strcmp4"3b#` decc$strcmp4!4@4 decc$strcmp4!4G4 decc$strcmp4"4b#` decc$strcmp4!4@4 decc$strcmp4!4G44 decc$strcmp4",4b#` decc$strcmp4!04@44 decc$strcmp4!44GL4 decc$strcmp4"D4 b#` decc$strcmp4!H4@L4 decc$strcmp4!L4Gd4 decc$strcmp4"\4b#` decc$strcmp4!`4@d4 decc$strcmp4!d4G|4 decc$strcmp4"t4b#` decc$strcmp4!x4@|4 decc$strcmp4!|4G4 decc$strcmp4"4b#` decc$strcmp 4!4@4 decc$strcmp4!4G4 decc$strcmp4"4b#` decc$strcmp4!4@4 decc$strcmp4!4G4 decc$strcmp4"4b#` decc$strcmp4!4@4 decc$strcmp4!4G4 decc$strcmp4"4b#` decc$strcmp4!4@4 d ecc$strcmp4)5G5 decc$isalnum4*5b#` decc$isalnum4)5@5 decc$isalnum4@6GT6 decc$isalpha4L6b#` decc$isalpha4P6@T6 decc$isalpha46G6 decc$iscntrl46b#` decc$iscntrl46@6 decc$iscntrl47G 7 decc$isdigit4  7b#` decc$isdigit47@7 decc$isdigit4`7Gt7 decc$isgraph4l7b#` decc$isgraph4p7@t7 decc$isgraph4+7G7 decc$islower4,7b#` decc$islower4+7@7 decc$islower4 8G48 decc$isprint4 ,8b#` decc$isprint408@48 decc$isprint4#`8Gt8 decc$ispunct4$l8b#` decc$ispunct4#p8@t8 decc$ispunct4%8G8 decc$isspace4&8b#` decc$isspace4%8@8 decc$isspace4'8G8 decc$isupper4(8b#` decc$isuppe r4'8@8 decc$isupper4 9G49 decc$isxdigit4,9b#` decc$isxdigit409@49 decc$isxdigit4!P>Gd> decc$strcmp4"T>b#` decc$strcmp4!`>@d> decc$strcmp4!d>G|> decc$strcmp4"t>b#` decc$strcmp4!x>@|> decc$strcmp4!|>G> decc$strcmp4">b#` decc$strcmp4!>@> decc$strcmp4!>G> decc$strcmp4">b#` decc$strcmp4!>@> decc$strcmp4!>G> decc$strcmp4">b#` decc$strcmp4!>@> decc$strcmp 4!> G> decc$strcmp4">b#` decc$strcmp4!>@> decc$strcmp4!>G> decc$strcmp4">b#` decc$strcmp4!>@> decc$strcmp4!>G ? decc$strcmp4"?b#` decc$strcmp4!?@ ? decc$strcmp4! ?G$? decc$strcmp 4"?b#` decc$strcmp4! ?@$? decc$strcmp4!$?G valid character class namep= Trailing backslash= Invalid back reference= Unmatched [ or [^= Unmatched ( or \(= Unmatched \{=8*Invalid content of \{\}Invalid range end= Memory exhausted(=0%Invalid preceding regular expressionP=0$ Premature end of regular expressionx=(Regular expression too big=Unmatched ) or \)@ @=t`=0(4444444444=0(=t 5@ p !--0( !&$` '--@0 1`./=t0pPP`pp0@@=`X     `@=xp ` (= Memory exhausted@=( No previous regular expression@ @ =0; ;D;=0 ;=0  decc$free=0#;=(@@< Success  decc$abort decc$strlen decc$strcpy decc$strncpy=0;=0"`;=P8< ;(;=0 ";=@( ;=0";=@( =0"g;= d p ;8OTS$MOVE=  decc$realloc decc$malloc decc$memcmp=0"X;=`P 8OTS$ZERO=0"a;=L =0"pa;= $ =0P";=,< =0pQ;=0Q;=0 S;= =0  PR;= 8 =0T; decc$isgraph decc$iscntrl decc$isalpha decc$isxdigit decc$isprint=space=xdigitcntrl0 decc$isdigit=printH=lowerP=graphX7decc$$ga___ctypet=0`";=T 7decc$$gl___ctypea! decc$strcmp=digit=punct=alnum=alpha=blank=upper# decc$ispunct% decc$isspace' decc$isupper) decc$isalnum+ decc$islower=0"P;=`@ - decc$tolower=0 ";=0  =0";=00 ;=0";=  =0"g;= $ =0 a;=0;| |64404P4p44 444444(4P4x44= @ @6=$ $= $ $ = > >=.&%REGEXCompaq C V6.5-001 = 44=init_syntax_once 4=yx   $  ,    ,     =  = 44= re_set_syntax4=  =   = 4`4= regex_compile4=h` C C   C C     J I b d l l l s vb v sbu      u       | y x# B   < | y B    }        xH B y H  x   J J O R R O R O               z zs     ; ; ; ; w  lԀ          ' -  , * 7 @ E E M  \ \ ] _  g ^ b b n0 y.              Y A\ C        " (     a  a a c bp a c a $                                                                                        '  ) 3 ; ; ; A > A H J J J Y  Y e e e e e  o o o t e } } }                                                                              8              H J Y  J J  J M  M  M  e e e e  M }M        +   =                                                                                           8  t t k O O4 H           zl             v\  x ws +c\ ]#  ) ! t O )+W (   \  : :=   4= } }=v 4=  4=  4= : :=  P4=  =?vP4= 4= 4= 4= d4= 4=  4= 0: :=   4= } }=v 4=  4=  4= D` = M = pQ4H4= store_op1pQ4=   = P = Q4X4= store_op2Q4= 910       =  = PR44= insert_op1PR4=\TS      (     = @ = S4h4= insert_op2S4=MED    &( & & & ) = @*  *=&at_begline_loc_p = * *=&at_endline_loc_p = 0 0=,$#group_in_compile_stack =  = T44= compile_rangeT4=           h    = 0 =  X44= re_compile_fastmapX4=sk        Gm                               & ' ' ' & . . . . .  3 2 3 7 m w&        b        7D    =  =  a44=re_set_registers a4=&   = P = pa44= re_searchpa4 =*"!    = ` = a44= re_search_2a4=     &    3  4 2  :  L L R L L T T U ] \ ] ^ ] \ ] ^ ] \ ] ^ ] \ ]  ^ ] \ \ ] \ \ a a a a a a a a h h h r F2\ =  = g44=re_matchg4=(    $ = `R R = g4H4= re_match_2g4=  8h 8 8. 8 86 8> 8                            z -   q [ Y                                 B W  ,  * *    *   E D b *               * "  ! % * , , ,> , , , , , * , * * * * *s-̰  pp                           + + + + D D D  ] \ \D ^ \ b ` l l { {          \                        (  Ѐ     * * * * * *;P i i | | | |            3    A A M A A A S S S S S S S S S S S S S V Vt  4  G ) +0  Ep E\ L        4  4k ? ? ? D ? ? B D D D D D B D D D B B B B B  T M T M M P U W V q q n q q n w y w y y y y [ a b c } ~ z w         %   ;\   = p;# #= &`44='group_match_null_string_p`4=             4   V [0 >  >   = @ = $4(4=%alt_match_null_string_p4=c[Z Q  Q  Q   ]  ]  X  X  X 0 h  = " "= *44=+#common_op_match_null_string_p4= }  v  }  v               =  = 44=bcmp_translate4=?76    4    =  = 44= re_compile_pattern4=5-,      = p = 4p4= re_comp4=xw ! ! ! ! ! ! %! %! '! '!( = @ = 4P4= re_exec4=B:9 /! /! /! 0 3 4!Z Z=  4=   e4= 5!] ]=v4= $$4= 0 =  = P4 4= regcompP4= _! _! _! _!  f! _!  _!t |! |! ! !$ ! !4 = 0 = 4(4 = regexec4=sk !  !  !  !  !  ! ! ! ! ! ! !  !  ! ! !    ! ! ! ! ! ! ! !c ! ! ! ! ! ! ! ! ! ! !0Z Z=  Я4=  e4= ! } }=vЯ4= ܯ4= 4= 4 =  = 4P4=regerror4= ! ! ! ! ! ! ! ! ! " " "4 !  = 0 = 4 4= regfree! 4=]UT " " " !" " !" $" $" =  ie4e4e4 = p p decc$strcpy decc$strncpy decc$memcmp decc$strcmp decc$strlen decc$abort decc$free d" ecc$malloc decc$realloc decc$isalnum decc$isalpha decc$iscntrl decc$isdigit decc$isgraph decc$islower decc$isprint decc$ispunct decc$isspace decc$isupper decc$isxdigit decc$tolower decc$$ga___ctypet decc$$gl___ctypeaOTS$MOVEOTS$ZERO c$stww1%0hَ]V1.0# ??apiV1.0 4-AUG-2004 09:34Compaq C V6.5-001` ` $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J SN_create_env0Jpp SN_close_env0J@SN_set_current =#TG$ ~^0[^~ (0޴8@H>PGGGGG4GG8b@Zk BGG(bGG@Zk0BGGTG8b`@Zk(/`///( B0@G(b B@Zk @ A?f0BGGTG8b@Zk , G0B4G8bTG/@Zk$0GG]]} (0ݤ8@H=P`#k///0#~^^~ (0GGG  GG(C0B4G0@8bEB@@Zk @/ B(4G(b@Zk B4G% (b,@Zk$ B4G(b0/@Zk0B4G8b@Zk G]G(b]4G} (0@#/k///#GGG~^G [({^GG P@ZkG]] #k4G\ decc$calloc4Tb# decc$calloc4X@\ decc$calloc4\Gxcreate_s4hb#create_s4t& @xcreate_s4xG decc$calloc4b# decc$calloc4@ decc$calloc4Gcreate_s4b#create_s4@create_s4G decc$calloc4b# decc$calloc4@ decc$calloc4'  G$ decc$calloc4b# decc$calloc4 @$ decc$calloc, Glose_s, b#plose_s, @lose_s4G decc$free4b#p decc$free4@ decc$free4G decc$free4( b#p decc$free4@ decc$free4G4 decc$free4 b#p decc$free40@4 decc$free, 8GLlose_s, @b#plose_s, H@Llose_s4LG decc$free4\b#p decc$free4)  decc$free4G replace_s4{#@ replace_s4@ replace_s< <=0";=`< create_s decc$calloc=0 ;= 0  replace_s=0 p;=@(<  decc$free lose_s@ * @6=< <=,$#APICompaq C V6.5-001 = 44= SN_create_env4=qih           < = p = p4p4= SN_close_envp4=<43   +     =   = 4@4=SN_set_current4=)!    = X = x xcreate_slose_s replace_s decc$free decc$calloc ate_ww1JVhَ]V1.0CCstem_deV1.0 4-AUG-2004 09:34, Compaq C V6.5-001p p $ABS$id $CODE$0 $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0JH` german_stem8J0 german_create_env8J`P german_close_env =l d 0#^~^ ~(08޴@HPGGG - >///0BG4G8bGtG@Zk #PBD"GTGXbtG#@Zk  @0@/G/GG//@BGG$"4GGGHb@Zk)0BD"G4G8btG@Zk@B #$"G4GGHbG#@Zk0BG D"4GtG8b@Zk@B $"G4GGHbG@Zk 0@0@㰨 @/PBG4GD"tGXbG/@ZkGPBG4G(D"tGXbG/@ZkGG4. G]] }(08ݤ@HP`#k//,01 0Bk///,01 0Bk///0 P#tG^~ ^(~08 QBG@GG0G@@[Hb8 G/@Zk/// #XD8DCGGXb#_ӠCPBG$"DG @TG@Zk B G4G(b@Zk BG4G(b@Zk =$"G@BHbGtG!@ @## @ZkXD0#8DCGGXb#_ӠCPB$"GDG/ //// @TG/@Zk///#4G B(b!q @ B # 1@G #@Zk BG4G(b@Zk  =$"G@BHbGtG!@ @##@Zk@cGGce_`CD\\BCk/ BG4G(b@Zk # D"G0B8bTGtG! @=@Zk #!0@#/C cG4G0B8btG rBC(D"/@Zk =!@#/ C}G3SBc*_/2UBC BG4G(b@Zk// 0BG00 D"8b4GtG @ @Zk//s =G B(b4G!@#@Zki/ BG4G(b@Zk #8D"G0B8bTGtG% @/@Zk/// #0B@D"GTG8btG!%@#@Zk/ $@C///G_ C%EB7/// BG4G(b@Zk.// BG4G(b@Zk H$"G@BHbTGtG%@/@ZkG #!%@#/#G#_ c%eB /// B8DG4G(b@Zk/ 1 4G$@G] ](}08@P#k//0#^~ ^(~08GGG{#>_ #,4GGBb G cG`G@Zk////# G4GBbGG 0@0 @_#G@Zk8BGG4GGG@b@Zk////# G4G8B@bGG 0@0 @C#G@Zk,#tGyBABGG4GGGb@Zk/# G4GBbGG 0@0 @##G@Zk8B2 GG4GGG@b@Zk////# G4G8B@bGG 0@0 @#G@Zk,# #]Gb##C_///////(BGtG$"G0b/@Zk>@?\@BC/k///BG4GD"tGb@ZkBG4GD"tGb@ZkBG4GD"tGb@ZkBG4GD"tGb@ZkBG4GD"tGb@Zk # @0@?///]4GCG] ](}3 08@#k/ ({tGGTGGk/ 4G({/k,TGteq_s,`b#eq_s,p@teq_s4|G slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4b# in_grouping4@ in_gr4 ouping, G,eq_s,b#eq_s,(@,eq_s4,GX in_grouping4Hb# in_grouping4T@X in_grouping,\G|eq_s,tb#eq_s,x@|eq_s 4|G in_grouping4>5 b# in_grouping4@ in_grouping4G slice_from_s4b# slice_from_s4@ slice_from_s4G$ slice_from_s4b# slice_from_s4 @$ slice_from_s4G find_among_b4b# find_among_b46 @ find_among_b4<b# in_grouping_b4LGt in_grouping_b4p@t in_grouping_b4 tG slice_del4 b# slice_del4 @ slice_del4 G slice_del4 b# slice_del4 @ slice7 _del4G find_among_b4b# find_among_b4@ find_among_b4b# in_grouping_b4GD in_grouping_b4@@D in_grouping_b4 `G slice_del4 db# slice_del4 @ slice_del4 G8  slice_del4 b# slice_del4 @ slice_del4G find_among_b4b# find_among_b4@ find_among_b4  G4 slice_del4 ,b# slice_del4 0@4 slice_del, DGdeq_s_b,H9 b#eq_s_b, `@deq_s_b, Geq_s_b,b#eq_s_b, @eq_s_b4 G slice_del4  b# slice_del4 @ slice_del, $GHeq_s_b,0b#eq_s_b, D@Heq_s_b4 `: Gx slice_del4 db# slice_del4 t@x slice_del4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b,b#eq_s_b, @eq_s_b, Geq_s_b,b#e; q_s_b, @eq_s_b4 PGd slice_del4 \b# slice_del4 `@d slice_del4 pG slice_del4 |b# slice_del4 @ slice_del4G find_among_b4b# find_among_b4@ fin< d_among_b4 G slice_del4 b# slice_del4 @ slice_del4G in_grouping4b#H in_grouping4@ in_grouping4 G( in_grouping4 b#H in_grouping 4$ @( in_grouping4, = GL out_grouping4D b#H out_grouping4H @L out_grouping4p G out_grouping4t b#H out_grouping4 @ out_grouping4 G in_grouping4 b#H in_grouping4 @ in_grouping4 G in_grouping4>  b#H in_grouping4 @ in_grouping4 G< out_grouping44 b#H out_grouping48 @< out_grouping4` G out_grouping4d b#H out_grouping4 @ out_grouping4 G find_among4 b#H find_am? ong4 @ find_among4@ G\ slice_from_s4T b#H slice_from_s4X @\ slice_from_s4` G| slice_from_s4t b#H slice_from_s4x @| slice_from_s4 G slice_from_s4 b#H slice_from_s4 @ @ slice_from_s4 G slice_from_s4 b#H slice_from_s4 @ slice_from_s4 G slice_from_s4 b#H slice_from_s4 @ slice_from_s4 0 GL SN_create_env4 4 {# SN_create_env4 H L SN_create_env4P A Gd SN_close_env4X {#` SN_close_env4` d SN_close_env\ \= ppp=$ @` =0";=`4 ;0eq_s in_grouping slice_from_s=0P ; SN_close_env=B 00 ; SN_create_env=0;=0p;=0";=P8<  slice_del eq_s_b find_among_b in_grouping_b;=0"`;=@$ p find_among out_grouping! !=UC =Y== =(=e0=em8=en@=ernH=erP=sX=es`=enh=erp=stxD =est=ig=lich=end=ig=ung=lich=isch=ik=heit=keit=u=u==E ss=u=U=y=Y=y=u =a(=o0=u8=ig@=eH=eP=erX=F en`=64= 64=6= A = 64= 64= 64= 6G 4= 6 4=6=6(4= 604= 684= 6@4= 6H4= 6H P4= 6X4=6=6`4= 6h4= 6p4= 6x4=6=6I 4= 64= 64= 64= 64= 64= 64= 64=J 6 @ @=0('STEM_DECompaq C V6.5-001T T= 44= r_prelude4= _ ^ _ c e i j ` x z | }  a  x  v  x  v x 4 = p( (=$r_mark_regions = K $ $=  r_postlude = t t= p44= r_R1p4=  =  t t= 44= r_R24=  =  x x= 44=r_standard_suffix4=     L                            ! & & * ) * . 7z ; B A G U T X Z Z f, = M  = `4H4= german_stem`4=1) l k l                   v   % $Z Z=  4=  9e4= s}N }=v4= 4=  4= Z Z=   4=  ^e4=  = 0 = ~ ~= 0 44=german_create_env0 4=   =  } }= P 4`4=german_close_env O P 4=  =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingeq_seq_s_b find_among find_among_b slice_from_s slice_del  creaww1hَ]V1.0CCstem_dkV1.0 4-AUG-2004 09:35CompP aq C V6.5-001p p $ABS$it$CODE$ $LITERAL$p$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J danish_stem8J@danish_create_env8JP`danish_close_env =|t P,0#G~^G^~ (0GGQG4G 0[8bGQ @Zk//// #0BGG4GGG8b @0@/ //@Zk/G*//@BGG4GGGHb@Zk// #GG@B4GHbGG @0@/ @Zk/,ctGdy`@`4G///G]]} (0@#k///G//,0# P^~1!@B^ ~(0GGG @>G'0B2ABG#CtGp"8bCG1"@Zk///G R #G4G] BG!2@(b $@#!1 @##@Zk4GG]] }(0@#k/#^~ ^(~08GGG{#C_ ,#GGtG0¦B!b06" @&`#@Zk//8D0XDGG@BHb @4"G4G/@ZkB G4Gb@ZkBG4Gb@Zk Gb#v_ BGTG(btG0 G@Zk# BD"GTG(btG#/@ZkB//G4GS b@Zk ,#$"GBbtG! @//@c}#G/@Zk=//#!/#]8DXD0BGtG8bC#D"tG@ZkBG4Gb@Zk #Gb# @ _ = @ #,C#GGGRpBxb 2B&â#C#$" ݲ4G@Zk /(TG`BhbG$@ZkTG(# PBXbG!@ZkBG4Gb@Zk4GG] ](}08@#/k/// (>T {tGG4G4Gk/ 4G({/k4HG\ in_grouping4Pb# in_grouping4X@\ in_grouping4tG in_grouping4b# in_grouping4@ in_grouping4G out_grouping4b# out_grouping4@ out_groU uping4G< out_grouping4b# out_grouping48@< out_grouping4 G4 find_among_b4  b# find_among_b4 0@4 find_among_b4 dG slice_del4 xb# slice_del4 @ slice_del4 G<V find_among_b4 b# find_among_b4 8@< find_among_b4lG in_grouping_b4pb# in_grouping_b4@ in_grouping_b4 G slice_del4 b# slice_del4 @ slice_del4 G slice_del4 W b# slice_del4 @ slice_del, Geq_s_b,b#eq_s_b, @eq_s_b, G4eq_s_b, b#eq_s_b, 0@4eq_s_b4 4GT slice_del4 Lb# slice_del4 P@T slice_delX 4 dG find_among_b4 hb# find_among_b4 @ find_among_b4G slice_from_s4b# slice_from_s4@ slice_from_s4 G slice_del4  b# slice_del 4 @ slice_del4\GY out_grouping_b4`b#out_grouping_b4@out_grouping_b4Gslice_to4b#slice_to4@slice_to,Geq_v_b,b#eq_v_b,@eq_v_b4 G slice_del4 b# sliZ ce_del4 @ slice_del4@G\ SN_create_env4D{# SN_create_env4X\ SN_create_env4`Gt SN_close_env4h{#P SN_close_env4pt SN_close_envt t=0";=@4< `;0[  in_grouping out_grouping=0`;p SN_close_env=0@; SN_create_env=0";=@4  slice_del find_among_b=0";=@   eq_s_b slice_from_s in_grouping_beq_v_bslice_toout_grouping_b \ =hed=ethed=ered=e =erede(=ende0=erende8=ene@=erneH=ereP=enX=heden`=erenh=er] p=hederx=erer=s=heds=es=endes=erendes=enes=ernes=eres=ens=hedens=erens=ers^ =ets=erets=et=eret=gd=dt=gt=kt =ig(=lig0=elig8=els@=lstH=st_ P=igX=ls`= A0x= *=64= 64= 64= 64= 6`  4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= a 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 6b 4= 64= 64= 64= 64= 64= 64= 64= c 64= 64= 64= 64= 64=6=64= 64=d  64= 64=6=6 4= 6(4= 604= 684= 6@e 4=6 @ @=0('STEM_DKCompaq C V6.5-001 = 44=r_mark_regions4= b a a a a d e e j e f n q n t0 q = ' '=# r_main_suffix =  = 4f 4=r_consonant_pair4=               "   $ = ( (=$r_other_suffix = $ $=  r_undouble =  = 44= danish_stem4=g   g g         d  E            | 0 #          0Z Z=  4=  e4= } }=vh 4=  4=  4= Z Z=  4=  e4= ] ]=v4= 4= LdZ Z=  D4=  e4= ] ]=vD4= L4=  = ~ ~i = @44=danish_create_env@4=   =  } }= `4P4=danish_close_env`4=  =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingout_grouping_beq_s_beq_v_bj find_among_b slice_from_s slice_delslice_to  creaww1hَ]V1.0DDstem_en1V1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$< $LITERAL$$LINK$h$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jk  porter_stem8Jporter_create_env8JPporter_close_env =# ;4G4G~^G0[^~ GGG8b/@ZkG "@BG4GHb4GG!"@ZkG "0BG4G8b4GG!"@ZkCG]]} 0#k///,01 0Bk///,01 0Bk///00#tG~^^~ (0޴8p[@q.GPl GGxbSqJq>4G G@Zk B#E"G4G(btG#@Zk04G .r HQ J2F >4G/////`BG4G%"4GGhb/@Zk #pBE"G4GxbtG#@Zk/ 㰱 @0@ c BGE"(b4GtGc@Zk0',pHA'H0D'</// C,#G4GG`BhbQ4G %"@Zk////à G%"`B4Ghb4GG @0@/`ð//@ZkB%"G4G4m GGb@Zk/à G%"B4Gb4GG @0@/Dð@Zk/à,%"`BG4G4GhbGİ/@Zk// àG%"`B4Ghb4GG @0@/$//@ZkB%"G4G4GGb@Zk/ àG%"B4Gb4GG @0@///@Zk,à #PBGGtGp%"##Xb/@Zk!8DXD0BxDG4G8b//// @Zk BG4G E"tG(b@Zk Bn GTGE"tG(b@Zk àPBG0%"XbtGtGðð@Zk8DXDpBG%"4G4GGxbjs #$$@@Zk/àG%"pB4Gxb4GG @'1@/a@Zk/ à0BG8b4G$@@Zk à%"GPBXbGtG$@@Zk8DI àXDxD0b#$@&@+?,#G1D/9 ///S_4 㠠B8"G4GbG2@&@CG@Zkð&0B01@4G8b @/G@Zk//BGG0o "G4GGb@Zk /GZ_ B(E"GTGtG(b@Zk @BG@E"Hb4GtG/@Zk @BHE"G4GHbtG@Zk/(àpB%"G4G4GxbGð@Zk////àG%"pB4Gxb4GG @$1@/ //@Zk BPE"G4GtG(b@Zk PB%"GXbGtGG/@Zk///à@GGbð_ӠCDy\@C/k/// BGGXE"tG(b@Zkh BGp G`E"tG(b@Zk` BGGhE"tG(b@ZkX BGGpE"tG(b@ZkP BGtGxE"tG(b@ZkH BG4GE"tG(b@Zk@ BGtGE"tG(b@Zk8 BGtGE"tG(b@Zk0 BGTGE"tG(b@Zk( BGTGE"tG(b@Zk BGtGE"tG(b@Zk BGtGE"tG(b@Zk BGtGE"tG(b@Zk BGtGE"tG(b@Zk/ PBGX%"XbGtG$@$@/@Zk%#xDXD8DCG4G8b#h_Ӡq C0BGD@//`@Zk BGTGE"tG(b@Zk BGTGE"tG(b@Zk PBG%"XbtGtG$@$@@ZkXD,C8DCGtGHbC?_ӠC@BG4GD/` 'BE"@Zk à@BE"G4GHbtG&@ð@Zk 0BG4G8b@Zk0BG4G8b@Zk @BE"GHb4GtG$@'@@Zkà G0b#ð&@_ &@Gð_ G_ $@ à$@0BG4G8b@Zk à@BGE"r Hb4GtG&@ðð@ZkGE"tGHb_@BG4G@Zk0BG4G8b@Zk0,H*/àpBG E"xb4GtGð@ZkG/ #pBG E"ð4GtGxb @0@ ðð@Zk//# B(E"ðG4GtG(b#@ZkG4G]]} (0ݤ8@P#k// ({tG4GTGGk/ 4G({/k4GDout_grouping_b48b#out_group>s ing_b4@@Dout_grouping_b4TGt in_grouping_b4`b# in_grouping_b 4p@t in_grouping_b4Gout_grouping_b4b#out_grouping_b4@out_grouping_b,<G|eq_s,Xb#eq_s,x@|eq_st 4 |G slice_from_s4 b# slice_from_s4 @ slice_from_s4G in_grouping4b# in_grouping4@ in_grouping, G,eq_s,b#eq_s,(@,eq_s4 TGx slice_from_s4 u `b# slice_from_s4 t@x slice_from_s4G in_grouping4b# in_grouping4@ in_grouping4G4 in_grouping4b# in_grouping40@4 in_grouping48GX out_grouping4Pb# out_groupv ing4T@X out_grouping4pG out_grouping4xb# out_grouping4@ out_grouping4G in_grouping4b# in_grouping4@ in_grouping4G$ in_grouping4b# in_grouping4 @$w in_grouping4(GH out_grouping4@b# out_grouping4D@H out_grouping4`G out_grouping4hb# out_grouping4@ out_grouping4G find_among_b4b# find_among_b4@ find_among_b4 x G slice_del4 b# slice_del4 @ slice_del4  G< slice_from_s4 4b# slice_from_s4 8@< slice_from_s4 @G\ slice_from_s4 Tb# slice_from_s4 X@\ slice_from_s4`G find_among_b4y lb# find_among_b4@ find_among_b4G in_grouping_b4b# in_grouping_b4@ in_grouping_b4G  in_grouping_b4b# in_grouping_b4@  in_grouping_b4 G4 slice_del4  b# slicez _del4 0@4 slice_del4DG\ find_among_b4Hb# find_among_b4X@\ find_among_b4Ginsert_s4b#insert_s4@insert_s4 G$ slice_del4 b# slice_del4  @{ $ slice_del40GTinsert_s4Lb#insert_s4P@Tinsert_s 4 hG slice_from_s4 b# slice_from_s4 @ slice_from_s, Geq_s_b,b#eq_s_b, @eq_s_b, G| eq_s_b,b#eq_s_b, @eq_s_b4G  in_grouping_b4b# in_grouping_b4@  in_grouping_b40Gd in_grouping_b48b# in_grouping_b4`@d in_grouping_b4 hG slice_from_s4 |b# slice} _from_s4 @ slice_from_s4G find_among_b4b# find_among_b4@ find_among_b4  G, slice_from_s4 $ b# slice_from_s4 ( @, slice_from_s4 0 GL slice_from_s4 D b# slice_from_s4 H @~ L slice_from_s4 P Gl slice_from_s4 d b# slice_from_s4 h @l slice_from_s4 p G slice_from_s4  b# slice_from_s4  @ slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4   G slice_from_s4  b# slice_from_s4  @ slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4  G, slice_from_s 4 $ b# slice_from_s4 ( @, slice_from_s4 0 GL slice_from_s4 D b# slice_from_s4 H @L slice_from_s4 P Gl slice_from_s4 d b# slice_from_s4 h @l slice_from_s4 p G slice_from_s4  b# s lice_from_s4  @ slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4 G find_among_b4 b# find_among_b4 @  find_among_b4 $ b# slice_del4 4 G\ slice_del4 X @\ slice_del4 ` G| slice_from_s4 t b# slice_from_s4 x @| slice_from_s4  G slice_from_s4  b# slice_from_s4  @ slice_from_s4 G find_among_b4 b# find_among_b4 @ find_among_b, b#eq_s_b ,  G( eq_s_b, $ @( eq_s_b, 0 GT eq_s_b,@ b#eq_s_b, P @T eq_s_b4 X Gl slice_del4 d b# s lice_del4 h @l slice_del4 p G slice_del4 | b# slice_del4  @ slice_del,  G eq_s_b, b#eq_s_b,  @ eq_s_b4  G slice_del4  b# slice_del4  @ slice_del ,  GH eq_s_b,, b#eq_s_b, D @H eq_s_b,\ b#eq_s_b, h G| eq_s_b, x @| eq_s_b4 | G slice_del4  b# slice_del4  @ slice_del, G eq_s, b#e q_s, @ eq_s, Geq_s, b#eq_s,@eq_s4 (GL slice_from_s4 @b# slice_from_s4 H@L slice_from_s4G SN_create_env4{# SN_create_env4 SN_create_env4 G SN_close_env4{#P SN_close_env4 SN_close_env\ \=D<  @` @ `  =0";=00 ;0out_grouping_b in_grouping_b=0;p SN_close_env=0 ; SN_create_env=0;=0;=0";=P<  slice_from_s slice_del eq_s_b find_among_b in_groupingeq_s out_grouping;pinsert_s =s=ies =sses=ss =bb(=dd0=ff8=gg@=blH=mmP=nnX=pp`=rrh=atp=ttx=iz =ed=eed=ing=anci=enci=abli=eli=alli=ousli=entli=aliti=biliti=iviti=tional =ational=alism=ation=ization=izer=ator =iveness(=fulness0=ousness8=icate@=ativeH=alizeP=icitiX=ical` =fulh=nessp=icx=ance=ence=able=ible=ate=ive=ize=iti=al=ism=ion= er=ous=ant=ent=ment=ement=ou=A=A=ss =i(=ee0=e8=e@= yH=YP=iX=tion`=enceh=ancep=ablex=ent=e=ize=ate=al=al=ful= ous=ive=ble=al=ic=s=t=e=l=l=y=Y=y=Y = Y(=y0=64= 64= 64=6p=64= 64 = 6 4= 64=6= 6 4= 6(4= 604= 684= 6@4= 6> H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4=6= 64= 64= 64= 64= 64= 64= 64= 6 4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 6=684= 6@4=  6H4= 6P4= 6X4= 6`4= 6h4=6=6p4= 6 x4= 64= 64= 64= 64= 64= 64= 64=  64= 64= 64= 64= 64= 64= 64 = 6 4= 64= 64=6 A A=1)(STEM_EN1Compaq C V6.5-001 = 44=r_shortv4=&   ( = t t= 44= r_ R14=  =  t t= 44= r_R24=  =  # #= r_Step_1a = # #= r_Step_1b = # #= r_Step_1c = " "=r_Step_2 = " "=r_Step_3 = " "=r_Step_4 = # #= r_Step_5a = # #= r_Step_5b = & &= 44= porter_stem4=                                  5 5     4 %                   # - + 0 4 6 9 6 C  B C F C E z y z {  |  ~                 y s    v ; B ?  C C I B E D U0 Z Z=  4=  e4= } }=v4= 4= 4= Z Z=  `4=  e4= ] ]=v`4= |4= (Z Z=  4=  e4= ] ] =v4= 4= Z Z=  4=  1e4= $} }=v4= 4= 4= HZ Z=   4=  Pe4= )} }=v 4=  4=  4 = Z Z=   4=  oe4= .} }=v 4=  4=  4= Z Z=   4=  e4= 3} }=v 4=  4=  4= lZ Z=   4=  e4= 8] ]=v 4= @ 4= Tt =  ~ ~= 44=porter_create_env4= X  =  } }= 4P4=porter_close_env4= Z =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingout_grouping_beq_seq_s_b find_among_b slice_from_s slice_delinsert_s  creaww1(;iَ]V1.0DDstem_en2V1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$  $LITERAL$$LINK$ $DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J  english_stem8Jenglish_create_env8J`english_close_env =00#tG~^^~ (0޴80[@q.G GG8bSqJq>4GG@Zk//#PB%"G4G4GXbG#@Zk@B GE"4GtGHb@Zk04G .r HQ J2F >4G///PBG4G%"4GGXb/@Zk #0BE"G4G8btG#@Zk/ #㰡 @0@ C@BG4GHbtGCE"@Zk0',pHA'H0D'<///G4G]]} (0ݤ8@P#k///P 0#4G^~G^ ~(0GG 2BP0[G4G8b G@Zk BG$"4G4GG(b/@Zk0B// G$"4G4GG8 b/@Zk4G #4G$"0B8b4GG!0@G#/@ZkG BG4G$"4GG(b/@ZkGc @G]] }(0@#k/,01 0Bk///,01 0Bk///#TGtG^~ ^(~08@޴HGGGp[xb` G@Zk//Gm/ #Gw@ B/ca``\@`Ck/GZ// BGtGE"tG(b@ZkO BGtGE"tG(b@ZkG B GtGE"tG(b@Zk? BGtGE"tG(b@Zk7 BGtGE"tG(b@Zk/ BGtGE"tG(b@Zk' BGGE"tG(b@Zk BGGE"tG(b@Zk BGGE"tG(b@Zk BGGE"tG(b@Zk BGGE"tG(b@Zk4Gp@b#x  # B/G/_ #,(%"GtGpBxb C@4G/@Zk=0B%"6G4G4G8bG#/@Zk//# 4G%"0B8b4GG 0@0 @[ #G@ZkPBG%"4G4GGXb@Zk////# 4G%"PBXb4GG 0@0 @?#G@Zk,#%"0B4G4G8bGG@Zk/# 4G%"0B8b4GG 0@0 @##G@ZkPBG%"4G4GGXb@Zk////# 4G%"PBXb4GG 0@0 @#G@Zk,# #0BGGtG##h%"8b@ZkY8DXDxDBGGb31@G & LC%" @H@c4G4G@Zk// //#4G%"Bb4GG 0@!1 @4#G@Zk// BG4G(b@Zk(/ #tGE" B(b @0@$1@ @ GTG/@Zk// B @GE"4GtG(b@Zk // BGTGE"tG(b@Zk 0BG`%"8bGtGG@Zk# 0@#0BGtG8b%"; CCCG@Zk8DXDBG4G4GGbj s #$$B%"@Zk////#4G%"Bb4GG 0@!1 @_# G@Zk # BG(b4G!$@#@Zk G%"0B8bGtG$@@ZkH #8DXDxDb#$$@*`G=, $@D8_5 #"B4GbG20@$0@GCG@Zk&# B11@G4G(b @ ##/@Zk//BGG"G4GGb@Zk /G_ BE"GTGtG(b@Zk @BGE"Hb4GtGG@Zk #@BE"G4GHbtG#@Zk/#B%"G4G4GbG#@Zk BtG ##(b20@ B4G!2@E"G#@Zk 0BG`%"8bGtG$@$@@Zk@#GG#_ӠCD`\\BCk/ BGGE"tG(b@Zk BGGE"tG(b@Zk BGGE"tG(b@Zkx BGG E"tG(b@Zkp BGtG(E"tG(b@Zkh BGtG0E"tG(b@Zk` BGtG8E"tG(b@ZkX BGTG@E"tG(b@ZkP BGtGHE"tG(b@ZkH BGtGPE"tG(b@Zk@ B GtGXE"tG(b@Zk8 BGtG`E"tG(b@Zk0@BG4GhE"tGHb@Zk B'GpE"TGtG(b@Zk BGtGxE"tG(b@Zk BGGE"tG(b@ZkBGtG%"GGb/@Zk BG4G(b@Zk/ 0BG@%"8b4GtG$@$@/@Zk///G#@GG#_ӠCD =D<=`\\BC/k/// BGGE"tG(b@Zk, BGtGE"tG(b@Zk$ BGTG E"tG(b@Zk BGTGE"tG(b@Zk BG4G(b@Zk//G_ BG4G(b/@Zk/// 0BG%"8bTGtG$@$@/@Zk/XD8DCGtGHb_ӠC@BG4GD @ âE" B/@Zk #E"@B4GHbtG!0@G#@Zk BG4G(b@Zk BG4G(b@Zk 0B@%"G8bTGtG$@$@@Zk///0#8DXDtGHbE"#'GP_@B#G4G@Zk B G4G(b@Zk CGb#3AB?_3SBGc2_ SBG_ #!0@# BG4G(b@Zk  @0#q.qJ* /àBGE"b4GtGð@ZkG/ #BGE"ð4GtGb @0@ ðð@Zk//# B E"ðG4GtG(b#@Zk4GG] ](}08@ݤHP#k//G// ({tG4GTGGk/ 4G({/k,,Gheq_s ,Hb#eq_s,d@heq_s4xG in_grouping4b# in_grouping4@ in_grouping4G slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4b# in_grouping4 @ in_grouping,G<eq_s,,b#eq_s,8@<eq_s4dG slice_from_s4pb# slice_from_s4@ slice_from_s4 ,GLout_grouping_b4<b#out_grouping_b4 H@Lout_grouping_b4 L Gt in_grouping_b4 hb# in_grouping_b4 p@t in_grouping_b4 tGout_grouping_b4b#out_grouping_b4 @out_grouping_b4 Gout_grouping_b4b#out_grouping_b4 @out_grouping_b4 G in_grouping_b> 4 b# in_grouping_b4 @ in_grouping_b4G find_among4b#  find_among4@ find_among4PGl slice_from_s4db#  slice_from_s4h@l slice_from_s4pG slice_from_s4b#  s lice_from_s4@ slice_from_s4G slice_from_s4b#  slice_from_s4@ slice_from_s4G slice_from_s4b#  slice_from_s4@ slice_from_s4G slice_from_s4b#  slice_from_s4@  slice_from_s4G  slice_from_s4b#  slice_from_s4@  slice_from_s4G, slice_from_s4$b#  slice_from_s4(@, slice_from_s40GL slice_from_s 4Db#  slice_from_s4H@L slice_from_s4 PGl slice_from_s4db#  slice_from_s4h@l slice_from_s4pG slice_from_s4b#  slice_from_s4@ slice_from_s4G slice_from_s4b#  slice_from_s4@ slice_from_s4G$ find_ among4b#  find_among4 @$ find_among4(GT in_grouping4@b#  in_grouping4P@T in_grouping4pG in_grouping4tb#  in_grouping4@ in_grouping4G out_grouping4b#  out_grouping4@ out_grouping4G out_grouping4b#  out_grouping4@ out_grouping4G8 in_grouping4$b#  in_grouping44@8 in_grouping4PGx in_grouping4Tb#  in_grouping4t @x in_grouping4|G out_grouping4b#  out_grouping4@ out_grouping4G out_grouping4b#  out_grouping4@ out_grouping4G$ find_among_b4b#  find_among_b4 @$ find_among_b 4 8G| in_grouping_b4 Db#  in_grouping_b4 x@| in_grouping_b4 G in_grouping_b4 b#  in_grouping_b4 @ in_grouping_b4G slice_del4b#  slice_del4@ slice_del4 G4 s lice_from_s4 b#  slice_from_s40 @4 slice_from_s4@ Gd slice_from_s4\ b#  slice_from_s4` @d slice_from_s4p G slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G find_among_b4 b#   find_among_b4 @ find_among_b4 G find_among_b4 b#  find_among_b4 @ find_among_b4  G< in_grouping_b4  b#  in_grouping_b4 8 @< in_grouping_b4 ` G in_grouping_b4 d b#  in_grouping_b4  @ in_grouping_b4 G slice_del4 b#  slice_del4 @ slice_del4 G find_among_b4 b#  find_among_b4 @ find_among_b40 GX insert_s 48 b# insert_s4T @X inser t_s4d G slice_del4x b#  slice_del4 @ slice_del4 G insert_s4 b# insert_s4 @ insert_s4 G slice_from_s4 b#  slice_from_s4 @ slice_from_s, G $ eq_s_b, b# eq_s_b, @$ eq_s_b,, GL eq_s_b,< b# eq_s_b,H @L eq_s_b4 X G| out_grouping_b4l b# out_grouping_b4 x @| out_grouping_b4| G slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G find_among_b4 b#  find_among_b4 @ find_among_b40 GL slice_from_s4D b#  slice_from_s4H @L slice_from_s4P Gl slice_from_s4d b#  slice_from_s4h @l slice_from_ s4p G slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G  slice_from_s4 b#  slice_from_s4 @ slice_from_s4 G  slice_from_s4b#  slice_from_s4@  slice_from_s4G, slice_from_s4$b#  slice_from_s4(@, slice_from_s40GL slice_from_s4D b#  slice_from_s4H@L slice_from_s4PGl slice_from_s4db#  slice_from_s4h@l slice_from_s4pG slice_from_s4b#  slice_from_s4@ slice_from_s4G slice_from_s4b#  slice_from_s4 @ slice_from_s,Geq_s_b,b# eq_s_b,@eq_s_b4G slice_from_s4b#  slice_from_s4@ slice_from_s4G  slice_from_s4b#  slice_from_s4@  slice_from_s4 G, slice_from_s4$b#  slice_from_s4(@, slice_from_s4 0GT in_grouping_b4 Hb#  in_grouping_b4 P@T in_grouping_b4TGl slice_del4db#  slice_del 4h@l slice_del4tG find_among_ b4b#  find_among_b4@ find_among_b4G slice_from_s4b#  slice_from_s4@ slice_from_s4 G< slice_from_s44b#  slice_from_s48@< slice_from_s4@G\ slice_from_s4Tb#  slice_from_s4X@\ slice_from_s4`G| slice_from_s4tb#  slice_from_s4x@| slice_from_s4G slice_del4b#  slice_del4@ slice_del4G slice_del4b#  slice_del4 @ slice_del4G find_among_b4b#  find_among_b4@ find_among_b, b# eq_s_b,0Gdeq_s_b,`@deq_s_b,tGeq_s_b,|b# eq_s_b,@eq_s_b4G slice_del 4b#  slice_del4@ slice_del4G slice_del4b#  slice_del4@ slice_del4G find_among_b4b#  find_among_b4@ find_among_b,b# eq_s_b,0GDeq_s_b, @@Deq_s_b4DG\ slice_del4Tb#  slice_del4X@\ slice_del4G slice_del4b#  slice_del4@ slice_del,Geq_s,b# eq_s,@eq_s,$ GXeq_s,<b# eq_s,T@Xeq_s4hG slice_from_s4b#  slice_from_s4@ slice_from_s4 G SN_create_env4 {# SN_create_env4  SN_create_env4G SN_close_env4{#` SN_close_env4 SN_close_env =(@ p  =PD @ ` ` =80 @` =0";=P< X;0eq_s slice_from_s in_grouping=0;  SN_close_env=0; SN_create_env=0p;=0";=@0  in_grouping_b out_grouping_b=0P;=0";=P0|  slice_del find_among_beq_s_b out_grouping; find_among insert_s =gener=ied=s=ies =sses(=ss0=us8=bb@=ddH=ffP=ggX=bl`=mm h=nnp=ppx=rr=at=tt=iz=ed=eed=ing=edly=eedly=ingly=anci=enci =ogi=li=bli=abli=alli=fulli=lessli=ousli=entli =aliti(=biliti0=iviti8=tional@=ational H=alismP=ationX=ization`=izerh=atorp=ivenessx=fulness=ousness=icate=ative=alize=iciti=ical=tional> =ational=ful=ness=ic=ance=ence=able=ible=ate=ive=ize=iti=al =ism( =ion0=er8=ous@=antH=entP=mentX=ement`=eh=lp=succeedx=proceed=exceed=canning=inning =earring=herring=outing=andes=atlas=bias=cosmos=dying=early=gently=howe=idly=lying=news =only=singly=skies =skis(=sky0=tying8=ugly@=AH=AP=7X=y`=Yh=yp=Yx =ss=ie =i=ee=e=e=y=Y=i=tion=ence=ance=able=ent =ize=ate=al=ful=ous=ive=ble =l(=og0=ful8=less@=tionH=ateP=alX =ic`=sh=tp=lx=ski=sky=die=lie=tie=idl=gentl=ugli=earli=onli =singl=Y=y=64=6=6`4= 6h4=6=64= 6 4= 64= 6 4= 6(4= 604=6= 684= 6@4=  6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 6 4= 64= 64=6=64= 64= 64= 64= 6 4= 64=6=64= 64= 64= 64= 64=  6 4= 64 = 64= 64= 64=  64= 6 4= 6( 4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4=  6h4= 6p4= 6x4= 64= 6=64= 64= 64=  64= 64= 64= 64= 64= 64=6 =64 = 64= 64= 64= 64= 64= 64= 64=  64= 64= 6 4= 6(4= 604= 684= 6@4= 6H 4= 6P4= 6X4=6=6p4= 6x4= 64= 64= 6 4= 64= 64= 64=6=64= 64= 64= 6 4= 64= 6i i4= 64= 64= 64= 64= 64=  64= 64= 64= 6 4= 6(4= 604= 684=6 A A =1)(STEM_EN2Compaq C V6.5-001 = 44= r_prelude4= > = = = = = > @ B C K O U V' Q Q c4 = ( (=$r_mark_regions =  = 44=r_shor tv4=ia`           $ = `t t= P44= r_R1P4=  =  t t= p44= r_R2p4=  =  # #= r_Step_1a = #  #= r_Step_1b = # #= r_Step_1c = " "=r_Step_2 = " "=r_Step_3 = " "=r_Step_4 = " "=r_Step_5 = & &=" r_exception2 = & &=" r_exception1 = $ $=  r_postlude =  = 4 4= english_stem4=|t  C   "  g k g k n p s p w z w        y y                x h   Y                   Y # '       ! $ - , - . - / X b l k l o l n                       Z ]         L0 Z Z=  4=  e4= )] ]=v4= 4= Z Z=  4=   e4= 0} }=v4= 4=  4= xZ Z=   4=   +e4= :] ]=v 4=  4= ,Z Z=   4=  Ke4= ?} }=v 4=  4=  4= Z Z=   4=  ke4= D} }=v 4=   4=  4= Z Z=  t4=  e4= I} }=vt4= 4= 4= 0\Z Z=  4=  e4= N} }=v4= 4= 4= Z Z> =  4=  e4= S} }=v4= 4= 4= Z Z=   4=  e4= 5] ]=v 4=  4= <Z Z=  4=  -e4= [] ]= v4= 4= Z Z=  4=   e4= ] ]=v4= 4=  = P = 44= english_create_env4= c  =  ~ ~= 4`4 =english_close_env4= e =  = 0 0 SN_create_env SN_close_env in_grouping in_grouping_b out_groupingout_grouping_beq_seq_s_b find_among find_among_b slice_from_s slice_delinsert_s  creaww1riَ]V1.0C Cstem_esV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$d $LITERAL$p$LINK$X$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J8  spanish_stem8Jspanish_create_env8JPspanish_close_env = P,0 #G^~G^ ~Q(4G 00[08GGG 1 pqG8b@Zk@BO#GG4GGHbG=@Zk0BGG4GGG8b@Zk/~///# G4G0B8bGG 0@0 @#G@Zkk=0BGG4G8bGG#@Zk@BGG4GGGHb@Zk/V///# G4G@BHbGG 0@0 @#G@ZkC@BGG4GGGHb@Zk<#@BGG4GGHbG =/@ Zk0BGG4GGG8b@Zk$/# G4G0B8bGG 0@0 @#G@Zk =0BGG4G8bGG#@Zk// #  0@0 @#c,Cr0BGG4GGG8b@Zk////# G4G0B8bGG 0@0 @]#G@Zk@BGG4GGGHb@Zk////# G4G@BHbGG 0@0 @A#G@Zk,#G0B4GG8bGG@Zk/# G4G0B8bG G 0@0 @%#G@Zk@BGG4GGGHb@Zk////# G4G@BHbGG 0@0 @ #G@Zk//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#0TGtG^~^ ~(08GG0GP0[8b G@ZkGz#`7@B#s\@Ck//Gl//G_//Gc/ BG4G(b@Zk[//G _//GS/ BG4G(b@Zk #xD"G@BHbTGtG! @=@Zk =!@#:/G_ C}2SBC/// BG4G(b@Zk'//G_//G/PBGtGD"tGXb@ZkGz_//G/PBG4GD"tGXb@ZkGj_//G/PBGGD"tGXb@Zk, @/G/ BG4G(b@Zk #$"G0B8bGtG% @/@ZkC /  #%%B///CGC4_ %B/// BG4G(b@Zk @BD"GHbTGtG8D##@Zk $@//#G#_ C%EB/// BG4G(b@Zk//G_//G/ BG4G(b@Zk $"G0B8bTGtG%@/@Zk $@{//#8DG#t_ C%EBn/ BG4G(b@Zkg//G_//G_/ BG4 G(b@Zk $"G0B8btGtG%@/@Zk $@G//#8DG#@_ C%EB:/ BG4G(b@Zk3//G_//G+/ BG4G(b@Zk D"G@BHbTGtG @@Zk $@/#G#t_ C}2SBC// BG4G(b@Zk4GG]] }(08@#k/0# ^~(^0~8@HGGG>{#_ GG=BtGb # G@Zk///o#B$"GtGbtG#@ZkeGG&_ӳ@BCD]\\BDC/k///BGD"bGtG@ZkJ//BGD"bGtG@Zk>//BGD"bTGtG@Zk2//BGD"bTGtG@Zk&//BGD"bTGtG@Zk//BG4Gb@Zk//BG4GD"tGb@ZkBG4Gb@Zk/// Gb#_Ӂ #, GBb$"GtG# 0@$`##G@Zk=//G##]8DGBbtGC# 4GD"@ZkGøBG4Gb@Zk4GBp$"GM ,#tGb! @E@c }#G@Zk =//#8/# ]8DXDBG4GbC#/*@Zk(/ BGD"b4GtG @@Zk// # cGD"Bb4GtG3tB}@Zk= #DB4Gb!0@G##  =$@Zk BG $"bGtG@ZkS#8DXD4Gb#CKG(_ӸBGG/@Zk #D"GBb4GtG% @/@Zk #!%@#3//# CGtGBb QB#4GD"/@Zk #!%@#// C}G3SB%EBc_//BG4Gb@Zk //G_ӸBG4Gb/@Zk/#///(BGG$"#tG0b/@Zk>#@#?\@ B(C/k///BG4GXD"tGb@ZkBG4G`D"tGb@ZkBG4GhD"tGb@ZkBG4GpD"tGb@ZkBG4GxD"tGb@Zk # @0@ /G4G ](]0}8@HP#k/ ({tGGtGGk/ 4G({/k44Gl in_grouping4db# in_grouping4h@l in_grouping4lG out_grouping4b# out_grouping4@ out_grouping4G in_grouping4b# in_grouping4@ in_grouping4G in_grouping4b# in_grouping4@ in_grouping4G8 in_grouping4 $b# in_grouping44@8 in_grouping48G\ out_grouping4Tb# out_grouping4X@\ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4G out_grouping4b# out_grouping 4@ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4G( in_grouping4 b# in_grouping4$@( in_grouping4@Gh in_grouping4Db# in_grouping4d@h in_grouping4tG in_grouping4b# in_grouping4@ in_grouping4G in_grouping4b# in_grouping4@ in_grouping4G8 in_grouping4b# in_grouping44@8 in_grouping4<G\ out_grouping4Tb# out_grouping4X@\ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4G in_grouping4b# in_grouping4@ in_grouping4G in_grouping4b# in_grouping4@ in_grouping4G< out_grouping44b# out_grouping48@< out_grouping4`G out_grouping4db# out_grouping4@ out_grouping4 PGd find_among_b4 Tb# find_among_b 4 `@d find_among_b4 G slice_del4 b# slice_del4 @ slice_del4 G$ slice_del4 b# slice_del4  @$ slice_del, 4GTeq_s_b,8b#eq_s_b, P@Teq_s_b4 G slice_del4 b# slice_del4 @ slice_del4G slice_from_s4b# slice_from_s4@ slice_from_s4 G< slice_from_s44b# slice_from_s48@< slice_from_s4`G| slice_from_s4tb# slice_from_s4x@| slice_from_s4 G slice_del4 b# slice_del4 @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b4 @GT slice_del4 Lb# slice_del4 P@T slice_del, XGeq_s_b,db#eq_s_b, @eq_s_b4 G slice_del4 b# slice_del4 @ slice_del4  G$ slice_del4  b# slice_del4  @$  slice_del4 4 GT find_among_b4 8 b# find_among_b4 P @T find_among_b4  G slice_del4  b# slice_del4  @ slice_del4  G slice_del4  b# slice_del4  @ slice_del4  G$ find_among_b4  b# find_among_b4  @$ find_among_b4 p G slice_del4 | b# slice_del4  @ slice_del4  G slice_del4  b# slice_del4  @ slice_del,  G eq_s_b,  b#eq_s_b,  @ eq_s_b4 @ GT slice_del4 L b# slice_del4 P @T slice_del4  G find_among_b4  b#8 find_among_b4  @ find_among_b4  G( find_among_b4  b#8 find_among_b4 $  @( find_among_b4t G slice_from_s4 b#8 slice_from_s4 @ slice_from_s4 G slice_from_s4 b#8 slice_from_s4 @ slice_from_s4 G slice_from_s4 b#8 slice_from_s4 @ slice_from_s  4 G$ slice_from_s4 b#8 slice_from_s4 @$ slice_from_s44 GT slice_from_s4@ b#8 slice_from_s4P @T slice_from_s4 ` Gt slice_del4 l b#8 slice_del4 p @t slice_del,  G  eq_s_b, b#8eq_s_b,  @ eq_s_b4  G slice_del4  b#8 slice_del4  @ slice_del4  G$ find_among_b4  b#8 find_among_b4  @$ find_among_b, PGteq_s_b,Tb#8eq_s_b,  p@teq_s_b4 G slice_del4 b#8 slice_del4 @ slice_del4 G find_among_b4 b#8 find_among_b4 @ find_among_b4 G8 slice_del4 b#8 slice_del4 4@8 slice_del>, DGheq_s_b,Pb#8eq_s_b, d@heq_s_b, Geq_s_b,b#8eq_s_b, @eq_s_b4 G slice_del4 b#8 slice_del4 @ slice_del4 G find_among_b4 b#8 find_among_b4 @ find_among_b4 b#8 slice_del4 0GD slice_del4 @@D slice_del, TGteq_s_b,Xb#8eq_s_b, p@teq_s_b, Geq_s_b,b#8eq_s_b, @eq_s_b4 G$ slice_del4 b#8 slice_del4  @$ slice_del4 8GT slice_del4 Hb#8 slice_del4 P@T slice_del4pG find_among4b#8 find_among4@ find_among4G slice_from_s4b#8 slice_from_s4@ slice_from_s4G  slice_from_s4b#8 slice_from_s4@  slice_from_s4G, slice_from_s4$b#8 slice_from_s4(@, slice_from_s40GL slice_from_s4Db#8 slice_from_s4H@L slice_from_s4PGl slice_from_s4db#8 slice_from_s4h@l slice_from_s4G SN_create_env4{# SN_create_env4 SN_create_env4G SN_close_env4{#P SN_close_env4 SN_close_env =0(0p=(Pp=( @ P =0";=@D< 8;0 in_grouping out_grouping=0;p SN_close_env=0; SN_create_env=0;=0;=0";=@0<  slice_del find_among_b eq_s_b slice_from_s;=0 " ;=P(< ` find_among ==== =(=la0=sela8=le@=meH=seP=loX=selo`=lash=selasp=lesx=los=selos=nos=ando=iendo=yendo=ndo=indo=ar=er=ir=r=r=r=ic=ad=os=iv=able=ible=ic =abil(=iv0=ica8=encia@=adoraH=osaP=istaX=iva`=anzah=logap=idadx=able=ible=mente=amente=acin=ucin=ico=ismo=oso=amiento=imiento=ivo=ador=icas=encias=adoras=osas=istas=ivas=anzas=logas =idades(=ables0=ibles8=aciones@=ucionesH=adoresP=icosX=ismos`=ososh= amientosimientosivos=ya=ye=yan=yen=yeron=yendo=yo=yas=yes=yais=yamos=y=aba=ada=ida=ara=iera=a=ara=era =ira(=ad0=ed8=id@=aseH=ieseP=asteX=iste`=anh=abanp=aranx=ieran=an=aran =eran=iran=en=asen=iesen=aron=ieron=arn=ern=irn=ado=ido=ando=iendo=ar=er=ir=as =abas(=adas0=idas8=aras@=ierasH=asP=arasX=eras`=irash=esp=asesx=ieses=abais=arais=ierais=ais=arais=erais=irais=aseis=ieseis=asteis=isteis=is=is=aris=eris=iris =ados=idos=amos=bamos =ramos(=iramos0=amos8=aramos@=eramosH=iramosP=emosX=aremos`=eremosh=iremos!p=semosx=isemos=imos=ars=ers=irs=s=ar=er=ir=ar=er=ir=i"=a=e=o=os==== =a(=e0=i8=o@=uH=iendoP#=andoX=ar`=erh=irp=ux=ic=log=u=ente=at=at=u=u=g$=u=g=64= 64=6=64= 6 4= 6  (4=68=% A P= 64= 64= 64= 64= 6 4=6=6(4= &604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6'h4= 6p4= 6x4= 64= 64=6=64= 64= (64= 64= 64= 64= 64= 64= 64= 6)4= 64=6 =64= 64= 64= 64=6=60*4= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= +6p4= 6x4= 64= 64= 64= 64= 64= 6,4= 64= 64= 64= 64= 64= 64=  64= >-64= 64= 64= 64= 64= 64= 64= 6. 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4/= 6`4= 6h4= 6p4= 6x4= 6=64= 64= 640= 64= 64= 64= 64= 64= 64= 64= 164= 64=6=64= 64= 64= 64= 64= 264= 64= 64= 6 4= 6(4= 604= 684= 63@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 464= 64= 64= 64= 64= 64= 64=  654= 64= 64= 64= 64= 64= 64= 64=6 64= 64= 64= 64= 64= 6 4= '6(4= '6704= '684= '6@4= '6H4= '6P4= -6X4= -6`4= -6h84= 6p4= 16x4= 164= 64= 64= 64= 64= 7964= 764= 764= 64= 64= 64= 64= 6:4= 64= @64= @64= @64= 64= 64= 64= F;6 4= F6(4= F604= F684= J6@4= J6H4= J6P4= 6<X4= N6`4= N6h4= N6p4= N6x4= N64= 64= 64= = 64= 64= 64= 64= 64= 64= 64= 6>4= 64=6=64= 64= 64= 64= 64= ?64= 64= 64=6 @ @=0('STEM_ESCompaq C V6.5-001 = 44=r_mark_regions4=             @                           " % " , = $ $=  r_postlude = t t= 44= r_RV4= V A =   =r_R1 = t t= 44= r_R24= ` =  , ,=( r_attached_pronoun =  = 44=r_standard_suffix4=+#       [ BW               (Z Z=  4=  Oe4=  =  = p) )=%r_y_verb_suffix = ' '=# r_verb_suffix = + +='r_resiCdual_suffix =  =  484= spanish_stem 4=.& _ ^ g g f h i k o s w {   i e    N Q   % $ * * , . .D @8 D? B J L P O P R R F F8 2 3 6 I 1R $Z Z=   4=  e4= h} }=v 4=   4=  4= Z Z=  4=  ]e4= vE} }=v4=  4=  4= DZ Z=   4=  7e4= r] ]=v 4=  4= Z Z=  4=  e4= }] ]=v4= 4= XtZ F Z=  `4=  e4=  = 0 = @ = 44= spanish_create_env4=   =  ~ ~= 4P4=spanish_close_env4=  =  =   SN_create_env SGN_close_env in_grouping out_groupingeq_s_b find_among find_among_b slice_from_s slice_del  creaww1iَ]V1.0CCstem_fiV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$D $LITERAL$$LINK$ $DATA$$BSS$H $READONLY_ADDR$ $READONLY$0J  finnish_stem8Jfinnish_create_env8JPfinnish_close_env = P,0#G~^G^~Q 4G 00[(0GGG 8b1G@Zk// #0BGG4GGG8b @0@/ //@Zk/Gr//@BGG4GGGHb@Zk/I/ #GG@B4GHbGG @0@/ //@Zk/GN//,#GG0B4G8bGG$/@Zk// #0BGG4GGG8b @0@/ //@Zk/G&//@BGG4GGGHb@Zk// #GG@B4GHbGG @0@/ @Zk/,c4Gd///G]]} (0@#k///G//#p;GtG~^ [({GJ1"/@ZkG]C #k/#`[4GtG^~@[^ GGR"CHb/@ZkG `"B4GGbG!"@ZkCG]] 0#/k///,0# P^~1!@B^ ~(0 @8GGGGC!ABG##GtG#]H pBGxb@Zk=G##=7@##` \@C/k///G//BG4GD"tGb@Zk/G/BG4GD"tKGb@Zk/G/BG4GD"tGb@Zk/sG~/BG4GD"tGb@Zk/gGr/BG4GD"tGb@Zk/[Gf/BG4GD"tGb@Zk/OGZ/ Pb#%BG;_/// #BD"GTGbtG!%@#@Zk/ $@3/// #%B @ (%1@$BG4G$"GGb/@ZkG%BG4G$"GGb/@ZkGàBG4GD"tGb@Zk>L/G/BG4Gb4G@Zk0cC,`HBCH@D4GC<G]] }(08@#k//,0# P ^~1!@B(^0~8@ @HGGGGC!ABGb# AB##]_ #4G=0B8b!1@ 0@##!1 @##G@Zk =G4G@`BGGhb!@ @# # G/@Zk///#@B$"G4GGHbG#@Zk0BG4G8b@Zk  =`D"G B(b4GtG!@ @##M@Zk B%#hD" 4G(btG# BG/@Zk/// #pD" B4G(btG!0@G#/@Zk///0BG4G8b@Zk =GxD" B(b4GtG!@ @##/@Zk///# BD"G4G(btG#@Zk0BG4G8b/@Zk =$"4G@BGGHb!@%@#G/@Zk// #4G$"@BHbGG%%@ @%1@%%@G@Zk #G!%@ 0@###/G //N(pB!1 @G##TGxb$@ZkGTG(PBXb%@Zk//G/0BG4G8b@Zk4GG ](]0}8@HP#k/0#(^~0^8~@HPGGG>x{#_0=GtG"HBPb#@.H1"R@J@> ,TG B/"@Zk8DXD@, B ØBG4GbGG05"@ZkBG4Gb@Zk ,4GtGHBPb @#=O GG@Zk=#}/#]@¦C#u\@(C/k/// xBGD"btG B4G@Zk//_ =GBb4G!@#@ZkU/BG4Gb@ZkxBD"GbtGtG@Zk//C#(BD"GtG0btG#@Zk9/BG4Gb@Zk2//HBGG$"tGPb@ZkB'G4Gb@Zk"//HBGG$"tGPb@ZkBG4Gb@Zk//HBGTGp$"tGPb@ZkBPG4Gb@Zk/// Gb#/_ ,GtGHBPb @/-#=G G@Zk=#/#]8DGxBbtGC# D" BTG/@Zk/// =!@#B =G4Gb@Zk 0GtG=HBPb!@# .%@ J"4@1"",CR 2@ cC}TG@Zk = @#y#]G4GBbC#@Zk  @l//Q/,%@xB4G @tG $@b @XG8 G@Zk//J/ #4GGBbG 0BG$"@Zk9 =4GBb0BG@Zk,$"tG #HBPb20@!2@TG B"##G/@Zk8DxBD"TGtGb c%pBG@Zk// $@BG4Gb@Zk $@GXb#@_4GG(]0]8}@HP`#/k/// (R{tG4GTG4Gk/ 4G({/k44Gd in_grouping4Pb# in_grouping4`@d in_grouping4tG in_grouping4b# in_grouping4@ in_grouping4G out_grouping4b# out_grouping4@ out_groSuping4GD out_grouping4b# out_grouping4@@D out_grouping4pG in_grouping4xb# in_grouping4@ in_grouping4G in_grouping4b# in_grouping4@ in_grouping4G$T out_grouping4b# out_grouping4 @$ out_grouping4@Gl out_grouping4Hb# out_grouping4h@l out_grouping4 G find_among_b4 {# find_among_b4 @ find_among_b, 8Gdeq_s_b, Xb#Ueq_s_b, `@deq_s_b4tG in_grouping_b4b# in_grouping_b4@ in_grouping_b4 <GL find_among_b4 Db#` find_among_b4 H@L find_among_b, Geq_s_b, b#`eq_s_b, @eq_s_Vb, Geq_s_b, b#`eq_s_b, @eq_s_b, G,eq_s_b, $b#`eq_s_b, (@,eq_s_b, @G\eq_s_b, Tb#`eq_s_b, X@\eq_s_b, pGeq_s_b, b#`eq_s_b, W@eq_s_b, Geq_s_b, b#`eq_s_b, @eq_s_b, Geq_s_b, b#`eq_s_b, @eq_s_b4pG in_grouping_b4b#` in_grouping_b4@ in_grouping_b4Gout_grouping_b4Xb#`out_grouping_b4@out_grouping_b, Geq_s_b, b#`eq_s_b, @eq_s_b4 G slice_del 4 b#` slice_del4 @ slice_del4 G slice_del4b# slice_del4 Y@ slice_del40Gd in_grouping_b4<b# in_grouping_b4`@d in_grouping_b4xGout_grouping_b4b#out_grouping_b4@out_grouping_b4 G slice_del4b# slice_del4 @ slice_delZ, Geq_s_b, b#eq_s_b, @eq_s_b, G$ eq_s_b,  b#eq_s_b,  @$ eq_s_b, @ Gd eq_s_b, H b#eq_s_b, ` @d eq_s_b4 t G slice_del4 b# slice_del4 [ @ slice_del,  G eq_s_b,  b#eq_s_b,  @ eq_s_b,  G eq_s_b,  b#eq_s_b,  @ eq_s_b4  G slice_del4 b# slice_del4  @ slice_del4( GT out\_grouping_b44 b#out_grouping_b4P @T out_grouping_b4p G out_grouping_b4t b#out_grouping_b4 @ out_grouping_b4 G slice_to4 b#slice_to4 @ slice_to, G( eq_v_b, b#]eq_v_b,$ @( eq_v_b4 @ GT slice_del4L b# slice_del4 P @T slice_del4  G$ find_among_b4  b# find_among_b4  @$ find_among_b4d G in_grouping_b4p b# in_grouping_b4 @ ^ in_grouping_b4  G slice_del4 b# slice_del4  @ slice_del4  G find_among_b4  b# find_among_b4  @ find_among_b, D Gh eq_s_b, P b#eq_s_b, d @h eq_s_b4  G slice_del_4 b# slice_del4  @ slice_del4  G slice_del4 b# slice_del4  @ slice_del,  G eq_s_b,  b#eq_s_b,  @ eq_s_b4 G slice_from_s4 b# slice_from_s4`@ slice_from_s4 G$ slice_del4b# slice_del4  @$ slice_del4 0GL find_among_b4 Db# find_among_b 4 H@L find_among_b4 LGd slice_del4\b# slice_del4 `@da slice_del4 pG find_among_b4 b# find_among_b4 @ find_among_b4 G slice_del4b# slice_del4 @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b4 bG slice_del4b# slice_del4 @ slice_del4 G\ find_among_b4 b# find_among_b4 X@\ find_among_b, Geq_s_b, b#eq_s_b, @eq_s_b4 G slice_del4b#c slice_del4 @ slice_del4 GT find_among_b4 b# find_among_b4 P@T find_among_b4 G slice_del4b# slice_del4 @ slice_del, Geq_s_b, b#eq_s_b, @deq_s_b40GT in_grouping_b44b# in_grouping_b4P@T in_grouping_b4 lG slice_del4pb# slice_del4 @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b, Geeq_s_b, b#eq_s_b, @eq_s_b4 0GD slice_del4<b# slice_del4 @@D slice_del4G SN_create_env4{# SN_create_env4 SN_create_env4G SN_close_env4{#P SfN_close_env4 SN_close_envl l=0( P=$p 0P P=0";=@D< ;0 in_grouping out_grouping=0;p SN_close_env=0; SN_create_egnv=0";= (  find_among_b=0 "`;=P<<  eq_s_b slice_delout_grouping_beq_v_b in_grouping_bslice_to=0";=@<< ;=0(" ;=`(<  slice_from_s=0" ;=0h(  =pa=sti=kaan=han =kin(=hn0=kn8=ko@=pH=kP=llaX=na`=ssahi=tap=ltax=sta=ll=n=ss=t=lt=st=lle=ine=nsa=mme=nnej=ni=si=an=en=n=ns=aa=ee=ii =oo(=uu0=8=@=aH=>kllaP=naX=ssa`=tah=ltap=stax=tta=lle=ine=ksi=n=han=den=seen=lhen=tten=hin=siin=hon=hn=hn==ll=n=ss=t=lt =st(=mtt0=eja8=mma@=immaH=mpaP=impaX=mmi`=immih=mpip=impix=ej=mm=imm=mp=nimp=i=j=mma=imma=k=kse=ksi=i=a=e=i=o==o=ie=e =po(=t0=po8=j@=oH=uP=oX=j`=64= 6p4=6 =64= 64=6=64= 64=6= = A = Aq  = a 8=64= 64= 64= 64= 6 4= 6(4= r604= 684= 6@4= 6H4=6=6P4= 6X4= 6`4= s6h4= 6p4= 6x4=6=64= 64= 64= 64= t64= 64=6=64= 64= 64= 64= 64= u64= 64= 64= 64=6=64= 64= 6v4= 6 4= 6(4= 604= 684=68=6@4= 6H4= w6P4= 6X4= 6`4= 6h4= 6p4= 6x4=  64= 6x4= 64y y = 64= 64= 64= 4=64= 4=64= y64= 4=64= 64= 4=64= 64= 64= 64=z 64= 64= 64= 64= 64= 6 4= 6(4= 6{=604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= |6h4= 6p4= 6x4= 64= 64= 64= 64= 6 @ @=0('}STEM_FICompaq C V6.5-001 = 44=r_mark_regions4=                          # 0  =  =r_R2 = ( ~ (=$r_particle_etc = & &=" r_possessive =  = 44= r_LONG4=-%$ z z z {  = P =  44= r_VI 4=,$#    ( = D D= 4 `4= r_case4=             X      , = ) )=%r_other_endings = $ $=  r_i_plural = $ $=  r_t_plural = 8 8= `44= r_tidy`4= % # " " # " " ) ' ' , , , . 4 4 7 6 9 : = = ? A C B C G G M M O R S X V V \ `H a [ ] ] a f f( =  V V=  44= finnish_stem 4= o n r 5< 5> 0D 5 0 2 8 7 ( =6 K) K M S R X X \ b d k o s                                   [     y 4Z Z=   4=  e4= yZ Z=  L 4=  de4= A =  ='v 4=  4=  4=  4= Z Z=   4=  e4= ~] ]=v 4=  4= 8PZ Z=  4=  [e4= } }=v4=  4= $4= Z Z=  4=  e4=  =?v4= 4= 4=  (4= 0\4= d4= p4= $Z Z=  4=  e4=  ='v4= 4= 4= 4= t =   = 44= finnish_create_env4=   =  ~ ~= 4P4=finnish_close_env4=  =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingout_grouping_beq_s_beq_v_b find_among_b slice_from_s slice_delslice_to  creaww1 jَ]V1.0CCstem_frV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$| $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J french_stem8Jfrench_create_env8J`french_close_env =#~^^~ (0޴8@GGG GPBGGG4GtGGXb@Zk30BHE"G4G8btG@ZkPB #GG4GtGXbG#@ZkQ0BGXE"4GtG8b@ZkPB #GG4GtGXbG#@ZkI0BGhE"4GtG8b@Zk/K0BGxE"ðð4GtG8b@Zk PBGG4GtGXbG@ZkF0BE"Gð4GtG8b@Zk0BE"G4G8btG/@Zk///; 0@ð @F@BG4GPE"tGHbG/@ZkðG@BG4G`E"tGHbG/@ZkðGx@BGpE"Hb4GtG@ZkðGGk///@BG4GE"tGHbG/@ZkðG\@BGE"Hb4GtG@ZkðGGO///G4G]]} (0ݤ8@P#k/// P,0#tG~^G^~Q 4G 0[(0GGG1 pqGb@ZkBGG4GtGGb/@Zk///#  0@0 @># CB0@GGtGGb @@4G@Zk/# G4GBbtGG 0@0 @#G@Zk,#BGG4GtGGb@Zk////# G4GBbtGG 0@0 @]#G@Zk BGG4GtGG(b@Zk////# G4G B(btGG 0@0 @A#G@Zk,#GB4GtGbGG@Zk/# G4GBbtGG 0@0 @%#G@Zk BGG4GtGG(b@Zk////# G4G B(btGG 0@0 @ #G@Zk//,#G]]4G} (0@#k/,01 0Bk///,01 0Bk///,01 0Bk///#0tGtG^~^ ~(08޴@GGG0P[Xb0 G@Zk//G%/#@@B#\@Ck//G//G_//G / BG4G(b@Zk///4G///G]] }(08ݤ@P#k//G_//G/ BG4G(b@Zk #D"G0B8bTGtG! @=@Zk #!0@#/# CG4G(b#4QB_ BG/@Zk//PB2TBGtGCtGD"Xb@Zk//Gn_//G/PBGtGD"tGXb@ZkG^_//G/PBG4GD"tGXb@ZkGN_//G/PBGtGD"tGXb@ZkG._//G/ BG4G(b@Zk #$"GPBXbGtG% @/@Zk #!%@#f//#@#/_?@b\@Ck/ %BTG_ %BM/ BG4G(b@Zk0BD"G8bTGtG@Zk $@9/#G#_ C%EB//// BG4G(b@Zk&// G4G(b2@_ BG@Zk/%@G_/PBGtGD"tGXb@ZkG_ $@/ BG4G(b@Zk//G_ C%EB/PBG4GD"tGXb@ZkG_//G/ BG4G(b@Zk $"GPBXbtGtG%@/@Zk #!%@#//#8DXDxD#. `/Gy_/ %B/// BG4G(b@Zk// G4G(b2@b_ BG@Zk/PB%@GD"tGtGXb@Zk// G4G(b2@J_ BG@Zk/PB%@GD"tGtGXb@Zk~//G6_//Gy/ BG4G(b@Zk D"G0B8bTGtG&@/@Zk %@^//#G#_ C&FBðS/// BG4G(b@Zk0BD"G8bTGtG@Zk %@=/# àG4G(b#2@_ BG/@Zk.//PB&@G D"ðtGtGXb@Zk"//PBGtG(D"tGXb@ZkG_//G/PBGTG0D"tGXb@Zk G = 4G(b&@_ BG@Zk/%@G_G/PBGtG8D"tGXb@ZkG_//G/pBG4G$"tGGxb/@ZkG BG4G(b@Zk//Gz_//G/PBGtG@D"tGXb@ZkG///Gf_//G/PBGtGHD"tGXb@ZkG/// `BG$"4GhbtGG%@@Zk//G/GB_//G/ à BG4G(b%@/@ZkG/0#^~^ ~(08޴@GGG`{#>w_Gb# E_ =GPb##*_//' #,GBbtG$"# 0@/"@##GtG/@ZkG//B8D4GtG`$"bG G@ZkGpBG4Gxb@Zk4GGx$"` #,tGBb# 0@H@##GG@ZkG8D=XDpBxD4Gxb' `2G@Zk #D"GBb4GtG! @=@Zk #!0@#/CpBG4GxbC@ZkpBG4Gxb@Zk//G_//G/pBG4Gxb@Zk4GD"G #B4GbtG##@Zk//  #4GGBbG%0BGx$"/@Zk/// ## #pBG4Gxb%%B/@Zk,#p$"G BtGb0@ @G %@ à/@ZkðC@bCX\@hCk//ð//GF_//ðz/ âBG4GbtG%BD"@Zk #BD"G4GbtG!%@#/@ZkðapBG4Gxb@ZkðZ/BG4GD"tGb@ZkðP///pBG4Gxb@ZkðF/BGTGD"tGb@Zk/ð:/pBG4Gxb@Zkð2/ BGD"b4GtG@Zk// BD"G4GbtG@Zk/ àBGD"b4GtGð@Zk///  #BGD"b4GtG#@Zk BGGbGtG@Zk// àGpBxb4G @%1@//@Zk àB`$"G4GbtGG4Gð/@Zk//BG4G`$"tGGb%1@@Zk///BGD"!à #4GtGb%&@ð@Zk àBD"G4GbtG%@/@Zk/// àBD"G4GbtGð@Zk/// BGG$"tG(b/@Zk////G@?\@BTC/k///BG4GD"tGb@ZkàBG4GD"tGb@ZkàBG4GD"tGb@Zkà  @0@ð/G4G]] }(08ݤ@P#/k/// ({tGGtGGk/ 4G({/k4@Gd in_grouping4\b# in_grouping4`@d in_grouping,lGeq_s,|b#eq_s,@eq_s4G in_grouping4b# in_grouping4@ in_grouping,Geq_s,b#eq_s,@eq_s4G in_grouping4b# in_grouping4@ in_grouping, G,eq_s,$b#eq_s,(@,eq_s,4GXeq_s,Pb#eq_s,T@Xeq_s4`G in_grouping4tb# in_grouping4@ in_grouping,Geq_s,b#eq_s ,@eq_s,Geq_s,b#eq_s,@eq_s4G$ slice_from_s4b# slice_from_s4 @$ slice_from_s40GT slice_from_s4Db# slice_from_s4P@T slice_from_s4dG slice_from_s4pb# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4b#p in_grouping4@ in_grouping4G in_grouping4b#p in_grouping4@ in_grouping4GH in_grouping40b#p in_grouping4D@H in_grouping4`G in_grouping4db#p in_grouping4@ in_grouping4G in_grouping4b#p in_grouping4@ in_grouping4G in_grouping4b#p in_grouping4@ in_grouping4 G, out_grouping4$b#p out_grouping4(@, out_grouping4PGx out_grouping4Tb#p out_grouping4t@x out_grouping4G in_grouping4b#p in_grouping4@ in_grouping4G in_grouping4b#p in_grouping4@ in_grouping4G  out_grouping4b#p out_grouping4@  out_grouping40GX out_grouping44b#p out_grouping4T@X out_grouping4@GX find_among_b4Db# find_among_b4T@X find_among_b4 G slice_del4 b# slice_del4 @ slice_del4 PGd slice_del4 \b# slice_del4 `@d slice_del, tGeq_s_b,xb#eq_s_b, @eq_s_b4 b# slice_del4 G slice_del4 @ slice_del4G slice_from_s4 b# slice_from_s4 @ slice_from_s4@ G\ slice_from_s4T b# slice_from_s4X @\ slice_from_s4 G slice_from_s4 b# slice_from_s4 @ slice_from_s 4 G slice_from_s4 b# slice_from_s4 @ slice_from_s4  G slice_del4  b# slice_del4  @ slice_del4$ GD find_among_b4( b# find_among_b4@ @D find_among_b4  G slice_del4  b# slice_del4  @ slice_del,  G eq_s_b, b#eq_s_b,  @ eq_s_b4 @ GT slice_del4 L b# slice_del4 P @T slice_del4 l b# slice_del4 x G  slice_del4  @ slice_del4 G slice_from_s4 b# slice_from_s4 @ slice_from_s4  G slice_del4  b# slice_del4  @ slice_del40 GL slice_from_s4D b# slice_from_s4H @L slice_from_s4 p G slice_del4 | b# slice_del4  @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b4  G4 slice_del4 , b# slice_del4 0 @4 slice_del4 L b# slice_del4 X Gh slice_del4 d @h slice_del4p G slice_from_s4 b# slice_from_s4 @ slice_from_s4  b# slice_del4  G slice_del4  @ slice_del4 G slice_from_s4 b# slice_from_s4 @ slice_from_s4  G4 slice_del4 ,b# slice_del4 0@4 slice_del, DGdeq_s_b,Hb#eq_s_b, `@deq_s_b4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b,b#eq_s_b, @eq_s_b4 b# slice_del4  G4 slice_del4 0@4 slice_del4@Gd slice_from_s4\b# slice_from_s4`@d slice_from_s4pG slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4 b# slice_del4 G slice_del4 @ slice_del4 G< slice_from_s 44b# slice_from_s48@< slice_from_s4`Gout_grouping_b4xb#out_grouping_b4@out_grouping_b4 G slice_del4 b# slice_del4 @ slice_del4G slice_from_s4b#> slice_from_s4@ slice_from_s4 G< slice_from_s44b# slice_from_s48@< slice_from_s4TGx in_grouping_b4db# in_grouping_b4t@x in_grouping_b4 G slice_del4 b# slice_del4 @ slice_del4pG find_among_b4tb# find_among_b4@ find_among_b4Gout_grouping_b4b#out_grouping_b4@out_grouping_b4 G slice_del4  b# slice_del4 @ slice_del44Gh find_among_b48b# find_among_b4d@h find_among_b4 |G slice_del4 b# slice_del4 @ slice_del, Geq_s_b,b#eq_s_b, @eq_s_b4 G  slice_del4 b# slice_del4 @  slice_del4 G$ slice_del4 b# slice_del4  @$ slice_del4 PGd slice_del4 \b# slice_del4 `@d slice_del, |Geq_s_b,b#eq_s_b, @eq_s_b4Gout_grouping_b4b#out_grouping_b4@out_grouping_b4 G$ slice_del4 b# slice_del4  @$ slice_del48Gt find_among_b4@b# find_among_b4p@t find_among_b, Geq_s_b,b#eq_s_b, @eq_s_b,  G4eq_s_b,b#eq_s_b, 0@4eq_s_b4 @GT slice_del4 Lb# slice_del4 P@T slice_del4`G| slice_from_s4tb# slice_from_s4x@| slice_from_s4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b,b#eq_s_b, @eq_s_b4 G slice_del4 b# slice_del4 @ slice_del, G(eq_s_b ,b#eq_s_b, $@(eq_s_b48GX slice_from_s4Hb# slice_from_s4T@X slice_from_s, dGeq_s_b,pb#eq_s_b, @eq_s_b4G slice_from_s4b# slice_from_s4@ slice_from_s4G find_among_b4b# find_among_b4@ find_among_b4 G4 slice_del4 b# slice_del4 0@4 slice_del48Gdout_grouping_b4Hb#out_grouping_b4`@dout_grouping_b4pGout_grouping_b4b#out_grouping_b4@out_grouping_b, Geq_s_b,b#eq_s_b, @eq_s_b, Geq_s_b,b#eq_s_b, @eq_s_b4G8 slice_from_s4(b# slice_from_s44@8 slice_from_s4PGt find_among4hb# find_among4p@t find_among4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4 G SN_create_env4 {# SN_create_env4  SN_create_env4G SN_close_env4{#` SN_close_env4 SN_close_env = `=H@0 `Pp@ P = ` @=D D=0";=P, ;0eq_s slice_from_s in_grouping=0; SN_close_env=0; SN_create_env=0;=0;=0;=0";=P4|  slice_del eq_s_b;@ find_among_b in_grouping_bout_grouping_b=0"P;=@D<  out_grouping=0";=P,|  find_among =I=U=Y=iqU =abl(=Ir0=ir8=eus@=ivH=icP=abilX=iv`=iqUeh=atricep=ancex=ence=logie=able=isme=euse=iste=ive=if=usion=ation=ution=ateur=iqUes=atrices=ances=ences=logies=ables=ismes=euses=istes =ives(=ifs0=usions8=ations@=utionsH=ateursP=mentsX=ements`=itsh=mentp=ementx=issementamment=emment=aux=eaux=eux=it=ira=ie=isse=issante=i=irai=ir=iras=ies=mes=isses= issantestes=is =irais(=issais0=irions8=issions@=ironsH=issonsP=issantsX=it`=iraith=issaitp=issantx=iraIent= issaIentirent=issent=iront=t=iriez=issiez=irez=issez=a=era=asse=ante=e=ai=erai=er=as=eras=mes =asses(=antes0=tes8=es@=aisH=eraisP=ionsX=erions`=assionsh=eronsp=antsx=s=ait=erait=ant =aIent=eraIent=rent=assent=eront=t=ez=iez=eriez=assiez=erez==e=Ire=ire=ion=Ier =ier(=0=ell8=eill@=ennH=onnP=ettX=u`=Uh=ip=Ix=y=Y=y=Y=q=u=U=i=u=y=ic=iqU=log=u=ent=at=eux=i=abl=iqU=at =ic(=iqU0=eau8=al@=euxH=antP=entX=e`=sh=sp=tx=i=gu===e=Y=i==c=6H4= 6P4= 6X4=6= issements= Ag(= A@= 64= 64= 64=6=64= 6 4= 6(4= 604= 684= 6@4=6=6`4= 6h4= 6p4= 6x4= 64= 64= 64=  64= 64= 64= 64= 64= 64=> 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4=  64=  6`4= 6h4= 6p4= "6x4= # 64= " 64= "64= 64= ' 64= 64=6h =64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6 h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64=6( =64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= !64= !64= 64=6=64= 64= 64= 64= 64= 6 4= 6(4=6=604= 6 84= 6@4= 6H4= 6P4=6 @ @=0('STEM_FRCompaq C V6.5-001 = 44= r_prelude4=IA r r v v y { |          ~ t ! v*  t v*   t*  t ;  v*   t* 4 = P = P4p4=r_mark_regionsP4=C;                           2     = P$ $=  r_postlude = t t= 44= r_RV4=  =  t t= 44= r_R14=  =  t t= 44= r_R24=  =   = 44=r_standard_suffix4=    ! $0 , . . 1 3 7 7 O N R X Z _ ` d { z ~                         =  ) )=%r_i_verb_suffix = ' '=# r_verb_suffix = + +='r_residual_suffix = % %=! r_un_double = % %=! r_un_accent = A A= 44= french_stem4=   ^$ ^'                    !p * ) , + . 4 4 6 4 6 8 = B F  M  P SD      ^Y ^ b _ bW l jR l l  r u t y }E  C     4Z Z=  4=  e4= } }=v4= ,4= @4= ,PZ Z=  h4=  e4= ] ]=vh4= 4= Z Z=  l4=  7e4= } }=vl4= |4= 4= pZ Z=  4=  _e4=  ='v4= 04= 4= 4= PZ Z=  84=  e4= ] ]=v84=  `4= Z Z=  @4=  e4=  =  = ~ ~= 44=french_create_env4=   =  } }= 4`4=french_close_env4=  =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingout_grouping_beq_seq_s_b find_among find_among_b slice_from_s slice_del  creaww1Pljَ]V1.0CCstem_itV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$H $LITERAL$$LINK$H$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J italian_stem8Jitalian_create_env8Jitalian_close_env =0#^~^ ~(08޴@HPGGG >//////pBGGGtGxb/@Zk///GG @_P\<@bC/k///0BG4GD"tG8b@Zk0BG4GD"tG8b@Zk0BG4GD"tG8b@Zk0BG4GD"tG8b@Zk0BG4GD"tG8b@Zk0BGTGD"tG8b@Zk # @0@ /G/GG//@BGG$"4G4GGHb@Zk)`BD"G4GhbtG@Zk@B #$"G4G4GHbG#@Zk`BGD"4GtGhb@Zk@B $"G4G4GHbG@Zk 0@0@㰨 @ò/0BG4GD"tG8bG/@ZkG0BG4GD"tG8bG/@ZkGG4G]] }(08ݤ@HP`#k// P,0#4G^~G^ ~Q(4G 0[08GGG1 pq bG/@ZkN# BGG4G4G(bG=/@ZkBGG4G4GGb@Zk|/# G4GBb4GG 0@0 @#G@Zkk=BGG4Gb4GG#@Zk BGG4G4GG(b@Zk/V///# G4G B(b4GG 0@0 @#G@ZkC BGG4G4GG(b@Zk<# BGG4G4G(bG =/@ZkBGG4G4GGb@Zk$/# G4GBb4GG 0@0 @#G@Zk =BGG4Gb4GG#@Zk// #  0@0 @#c,CrBGG4G4GGb@Zk////# G4GBb4GG 0@0 @]#G@Zk BGG4G4GG(b@Zk////# G4G B(b4GG 0@0 @A#G@Zk,#GB4G4GbGG@Zk/# G4GBb4GG 0@0 @%#G@Zk BGG4G4GG>(b@Zk////# G4G B(b4GG 0@0 @ #G@Zk//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#04GtG^~^ ~(08޴@GGG @[Hb00 G@Zk//Gw/#P7@B#o\@ Ck//Gh//G_//G_/ BG4G(b@ZkW//G_//GO/ BG4G(b@Zk #D"G0B8bTGtG! @=@Zk =!@#6/G_ C}2SBC+// BG4G(b@Zk#//G_//G/0BGtGD"tG8b@ZkGv_//G /0BG4GD"tG8b@ZkGf_//G/0BGGD"tG8b@ZkGN_//G/ BG4G(b@Zk//, @/G/ BG4G(b@Zk #$"G@BHbGtG% @/@ZkC/ #%%B///CGC _ %B/// BG4G(b@Zk0BD"G8bTGtG8D##@Zk $@//#G#_ C%EB/// BG4G(b@Zk//G_//G/ BG4G(b@Zk `$"G@BHbtGtG%@/@Zk $@g//#8DG#`_ C%EBZ/ BG4G(b@ZkS//G_//GK/ BG4G(b@Zk D"G0B8bTGtG&@/@Zk %@3//#G#_ C&FBð(/// BG4G(b@Zk0BD"G8bTGtG@Zk $@/Gt_ C&FBð/// BG4G(b@Zk4GG]] }(08ݤ@P#/k///0#^~^ ~(08GGG>{#5_Gb#_ = GBGGbtG#@Zk*#B$"GGbtG#/@Zk///GCG_ӠC8@FX@FBD = G4GtGb////@pD"@ZkàBG4Gb@Zk Gb#_//' #,x$"BGbtG# 0@/` ##G/@Zk =//# /#B8DGb4G#/@Zk   BX$"4GTGG(bG@Zk/ ##)#G#_ cc!àBG4Gb@ZkBD"Gb4GtG@Zk// ## #G#_ ccàBG4Gb@Zk #D"GBb4GtG% @/@Zk #!%@#//C BG$"(bGGCtG@Zk #!%@#/Gv_ C%EB/BG4Gb@ZkB$"GbtGtG@ZkC0///8DXDxD' @/` B0BðBG4GhD"tGb@ZkðBG4G`D"tGb@ZkBG$"btGtG/@ZkC//G]]4G }(08@#/k/// ({tGGtGGk/ 4G({/k4`G find_among4xb# find_among4@ find_among4G slice_from_s4b# slice_from_s4@ slice_from_s4G  slice_from_s4b# slice_from_s4@  slice_from_s4G, slice_from_s4$b# slice_from_s4(@, slice_from_s40GL slice_from_s4Db# slice_from_s4H@L slice_from_s4PGl slice_from_s4db# slice_from_s4h@l slice_from_s4pG slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4b# in_grouping4@ in_grouping,Geq_s, b#eq_s,@eq_s4GH in_grouping48b# in_grouping4D@H in_grouping,LGleq_s,db#eq_s,h@leq_s4lG in_grouping4b# in_grouping4@ in_grouping4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4b#P in_grouping4@ in_grouping4G out_grouping4b#P out_grouping4@ out_grouping4G( in_grouping4 b#P in_grouping4$@( in_grouping4@Gh in_grouping4Db#P in_grouping4d@h in_grouping4tG in_grouping4b#P in_grouping4@ in_grouping4G out_grouping4b#P out_grouping 4@ out_grouping4G out_grouping4b#P out_grouping4@ out_grouping4G4 out_grouping4,b#P out_grouping40@4 out_grouping4<Gd out_grouping4Pb#P out_grouping4`@d out_grouping4dG in_grouping4b#P in_grouping4@ in_grouping4G in_grouping4b#P in_grouping4@ in_grouping4G in_grouping4b#P in_grouping4@ in_grouping4(GL in_grouping4Db#P in_grouping4H@L in_grouping4pG in_grouping4tb#P in_grouping4@ in_grouping4G out_grouping4b#P out_grouping4@ out_grouping4G out_grouping4b#P out_grouping4@ out_grouping4G8 in_grouping4$b#P in_grouping44@8 in_grouping4PGx in_grouping4Tb#P in_grouping4t@x in_grouping4|G out_grouping4b#P out_grouping4@ out_grouping4G out_grouping4b#P out_grouping4@ out_grouping4G find_among_b4b# find_among_b4@ find_among_b4 @ GT slice_del4L b# slice_del4 P @T slice_del4  G slice_del4 b# slice_del4  @ slice_del, G eq_s_b, b#eq_s_b, @ eq_s_b4  G$ slice_del4 b# slice_del4  @$ slice_del4P Gl slice_from_s4d b# slice_from_s4h @l slice_from_s4 G slice_from_s4 b# slice_from_s4 @ slice_from_s4 G slice_from_s4 b# slice_from_s4 @ slice_from_s4  G$ slice_del4 b# slice_del4  @$ slice_del4 P Gd slice_del4\ b# slice_del4 ` @d slice_del4t G find_among_b4x b# find_among_b4 @  find_among_b4  G slice_del4 b# slice_del4  @ slice_del , G4 eq_s_b, b#eq_s_b,0 @4 eq_s_b4  G slice_del4 b# slice_del4  @ slice_del4  G  slice_del4 b# slice_del4  @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b4 P Gd slice_del4\ b# slice_del4 ` @d slice_del4  G slice_del4 b# slice_del4  @ slice_del, G eq_s_b, b#eq_s_b, @ eq_s_b4  G4 slice_del4,b# slice_del4 0@4 slice_del,8GXeq_s_b,Db#eq_s_b,T@Xeq_s_b4 G slice_del4b# slice_del4 @ slice_del4TGx find_among_b4`b# find_among_b4t@x find_among_b4G find_among_b4b# find_among_b4@ find_among_b4G  slice_from_s4b# slice_from_s4@  slice_from_s4 G$ slice_del4b# slice_del4  @$ slice_del4PG find_among_b4Xb# find_among_b4@ find_among_b4 G slice_del4b# slice_del4 @ slice_del4G  in_grouping_b4b# in_grouping_b4@  in_grouping_b4 @GT slice_del4Lb# slice_del4 P@T slice_del,XGxeq_s_b,db#eq_s_b,t@xeq_s_b4 G slice_del4b# slice_del4 @ slice_del,Geq_s_b,b#eq_s_b,@eq_s_b4G8 in_grouping_b4 b# in_grouping_b44@8 in_grouping_b4 pG slice_del4|b# slice_del4 @ slice_del4G find_among4b# find_among4@ find_among4G slice_from_s4b# slice_from_s4@ slice_from_s4 G< slice_from_s44b# slice_from_s48@< slice_from_s4@Gd find_among4Lb# find_amongp p4`@d find_among4 G SN_create_env4 {# SN_create_env4  SN_create_env4 G SN_close_env4 {# SN_close_env4  SN_close_envp p=( 0Pp=0(@0 =0";=`4 p;0 slice_from_s in_grouping;`eq_s find_among=0; SN_close_env=0; SN_create_env=00;=0P;=0"p;=P4|  slice_deleq_s_b find_among_b=0"`;=@D<  out_grouping=0";=@(<  in_grouping_b =qu=>== =(=0=I8=U@=laH=celaP=glielaX=mela`=telah=velap=lex=cele=gliele=mele=tele=vele=ne=cene=gliene=mene=sene=tene=vene=ci=li=celi=glieli=meli=teli=veli=gli=mi =si(=ti0=vi8=lo@=celoH=glieloP=meloX=telo` =veloh=andop=endox=ar=er=ir=ic=abil=os=iv=ic=abil=iv=ica =logia=osa=ista=iva=anza=enza=ice=atrice=iche=logie =abile(=ibile0=usione8=azione@ =uzioneH=atoreP=oseX=mente`=amenteh=istep=ivex=anze=enze=ici=atrici=ichi=abili=ibili =ismi=usioni=azioni=uzioni=atori=osi=amenti=imenti=isti=ivi=ico=ismo=oso=amento  =imento(=ivo0=it8=ist@=istH=istP=iscaX=enda`=atah=itap=utax=ava=eva =iva=erebbe=irebbe=isce=ende=are=ere=ire=asse=ate=avate=evate=ivate=ete=erete=irete=ite=ereste=ireste =ute(=erai0=irai8=isci@=endiH=ereiP=ireiX=assi`=atih=itip=erestix=iresti=uti=avi=evi=ivi=isco=ando=endo=Yamo=iamo=avamo=evamo=ivamo=eremo=iremo=assimo=ammo=emmo=eremmo=iremmo=immo =ano(=iscano0=avano8=evano@=ivanoH=erannoP=irannoX=ono`=isconoh=aronop=eronox=irono= erebberoirebberoassero=essero=issero=ato=ito=uto=avo=evo=ivo=ar=ir=er=ir=er=ir=== =(=0=8=qU@=uH=UP=iX=I`=ih=up=ex=ic=log=u=ente=at=at=ic=i=h= 604= 684=6=64= 64= 64= 6@= AX= Ap= 64= 64= 64= 64= 6 4= 6(4=6=6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4=6 =6h4= 6p4= 6x4= 64= 64=6P =64= 64= 64= 64=6=64= 64= 64 = 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4=  6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 6!4= 64= 64= 64= 64= 64= 64= 64= "64= 64= 64= 64= 64= 64= 64= 6#4= 64= 64= 64= 6 4= 6(4= 604= 684= $6@4= 6H4=6x=6P4= 6X4= 6`4= 6h4= 6>%p4= 6x4= 64= 64= 64= 64= 64= 64= &64 = 64= 64= 64= 64= 64= 64= 6'4= 64= 64= 64= 64= 64= 64= 6 4(= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= )6`4= 6h4= 6p4= 6x4= 64= 64= 64= 6*4= 64= 64= 64= 64= 64= 64= 64= +64= 64= 64= 64= 64= 64= 64= 66,4= 664= 6 4= 6(4= :604= :684= :6@4= :6H4= -6P4= 6X4= 6`4= A6h4= A6p4= A6x4= A64= 6.4= 64 = 64= 64= 64= 64= 64= 64/= 64= 64= 64= 64= 64= 64= 64= 064=6 @ @=0('STEM_ITCompaq C V6.5-001m m= 44= r_prelude4=         #   }             41 = ` = `4P4=r_mark_regions`4=               $ % ' * '  1 3 4 6 9 6 > @ I M P M T W T Z \ _ 2 \ c f c m = $ $=  r_postlude = t t= 044= r_RV04=  =   =r_R1 = t t= P44= r_R2P4=  =  , ,=( 3r_attached_pronoun = x x= p44=r_standard_suffixp4=        F             8Z Z=  0 4=  xe4=4  =  = ' '=# r_verb_suffix = ( (=$r_vowel_suffix =  = 44= italian_stem4=me N M  Q         ] @  & %< 44 54 3 5 8 : @ C\) u t w  ~ { s t v(Z Z=  44=  e4= \} }=v44= L4= p4= Z Z=  H4=  Ae4= f] ]=vH46= d4= |Z Z=  4=  ee4= m] ]=v4= 4= Z Z=  4=  &e4= s] ]=v4= 4=  =  = 474= italian_create_env4= y  =  ~ ~= 44=italian_close_env4= { =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_groupingeq_seq_s_b find_among find_among_b slice_from_s8 slice_del  creaww10oَ]V1.0CCstem_nlV1.0 4-AUG-2004 09:35Compaq C V6.5-001h h $ABS$i4$CODE$4 $LITERAL$$LINK$x$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J  dutch_stem8Jdutch_cre9ate_env0J dutch_close_env =#~^^~ (0޴8@HGGG ///pBGGtGtGxb/@Zk///?G @_P\<@bC/k///0BG4GE"tG8b@Zk0BG4GE"tG8b@Zk0BG4GE"tG8b@Zk0BG4GE"tG8b@Zk0BG4GE"tG8b@Zk # @0@ /@BG4GE"t:GHb@Zk 0B4GE"8btGG@ZkG/GG//`BGG%"4GGGhb@Zk@BE"G4GHbtG@Zk`B #%"G4GGhbG#@Zk@BGE"4GtGHb@Zk/ 0@0@㰨 @!#///0BG4GE"tG8bG/@ZkG0BGE"8b4GtGG@ZkG///G4G]]} (0ݤ8@HP#k//,01 0Bk///,0;1 0Bk///P 0#tG^~0[ 2B0;^ ~tG(GGG8bx1"/@ZkG #G4G= B(b!1@ 0@##!1 @G##@Zk4GG]] }(0#k///00#[tG^~^ ~(GGGR"q.0[8bSqJq>4G@Zk//G-/CGC_G%/ cGG B(b rB4"4GG/@ZkG #4GBb!0@G#@Zk04GGb# .r HQ< J2F >_ӠCG]] }(0#k/#^~^ ~(GGGb_//G2/C cG4G"GG zCBb1"@ZkG! #tGtGBBb00@ 0@GR" @Zk//G/ # 4GBb!0@G#@ZkGpb#<_ӠCG]] }(0#/k///0 P#tG ^~(^0~8@GG QBG[G0b G@Zk8D)#XDxDGGb#@//G=4G_BG$"@ZkpBG4Gxb@ZkGb#}_ G_ӐB D"GGtGb@Zk =Gb#!@ @#_ =G(D"BbGtG!@ @## @Zk)CGtGbC_" cBG4G rB0D"@Zk #4GpBxb!0@G#@ZkBG8D"bTGtG/@Zk#Gb##1_  =Gh$"BbGtG!@ @##@ZkC@bC\@C/k///G_pBGw>4Gxb/@Zk #@D"GBbTGtG! @=@ZkCGtGbCl_ cBG4G rBHD"@Zk #4GpBxb!0@G#@ZkL =GPb# @Y_DGN_A cBG4GbtG rBPD" @Zk6 # 4GpBxb!0@G#@Zk,G6_pBG'4Gxb/@ZkGb#/g_//G&_pBG4Gxb/@Zk//G_ 0CpBGxb4Gr.rJ@/@Zk/// =G$"B4Gb?GG!@ @#@Zk//( #$"BGbtG 0@G/@ZkB$"G4GGGb@Zk #4GpBxb$@G @$1@/ /@Zk ]4G"@CG ](]0}8@P#k//0#^~^ ~(08GGG>@{#_ #,4GG`Bb G cG`G/@Zk//# G4GBbGG 0@0 @a#G@Zk BGG4GGG(b@Zk/@///# G4G B(bGG 0@0 @E#G@Zk,#tGyBABGG4GGGb@Zk/# G4GBbGG 0@0 @%#G@Zk BGG4GGG(b@Zk////# G4G B(bGG 0@0 @ #G@Zk//,# #]Gb##C_BG$"btGtG@Zk/C/8DXDxD' @/` B0BpBG4G0D"tGxb@ZkApBG4G(D"tGxb@ZkBG$"btGtG/@ZkC//G]]4G =d\ }(08@#/k/// ({tG4GTGGk/ 4G({/k4PGt find_among4hb# find_among4p@t find_among4G slice_from_s4b# slice_from_s4B@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4 G< slice_from_s44b# slice_from_s48@< slice_from_sC4@G\ slice_from_s4Tb# slice_from_s4X@\ slice_from_s,Geq_s,b#eq_s,@eq_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G in_grouping4>D b# in_grouping4@ in_grouping,G<eq_s,,b#eq_s,8@<eq_s4<Gh in_grouping4Xb# in_grouping4d@h in_grouping,lGeq_s,b#eq_s,@eEq_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G find_among_b4b# find_among_b4@ find_among_b4 $GTF slice_del4(b# slice_del4 P@T slice_del,Geq_s_b,b#@eq_s_b,@eq_s_b4 GDout_grouping_b4$b#@out_grouping_b4@@Dout_grouping_b4 \Gt slice_del4`b#@ sliceG_del4 p@t slice_del4 G4out_grouping_b4$b#out_grouping_b40@4out_grouping_b,TGxeq_s_b,Xb#eq_s_b,t@xeq_s_b4 G slice_del4b# slice_del4 @ slice_delH4,GL find_among_b4<b# find_among_b4H@L find_among_b4hb#out_grouping_b4Gout_grouping_b4@out_grouping_b4 G slice_del4b# slice_del4 @ slice_del4G sIlice_from_s4b# slice_from_s4@ slice_from_s ,,GTeq_s_b,0b#eq_s_b,P@Teq_s_b,db#eq_s_b,xGeq_s_b,@eq_s_b4 G slice_del4b# slice_del4 J@ slice_del,Geq_s_b,b#eq_s_b,@eq_s_b4 G4 find_among_b4 b# find_among_b40 @4 find_among_b4 x G slice_del4 b# slice_del4  @ slice_del, GK eq_s_b, b#eq_s_b, @ eq_s_b, b#eq_s_b, G eq_s_b, @ eq_s_b4  G, slice_del4 b# slice_del4 ( @, slice_del,` G eq_s_b,l b#eq_s_b, L@ eq_s_b4  G slice_del4 b# slice_del4  @ slice_del4  G slice_del4 b# slice_del4  @ slice_del4  G slice_del4 b# slice_del4  @ slice_del4 0 MGT slice_del48 b# slice_del4 P @T slice_del4p G out_grouping_b4x b#out_grouping_b4 @ out_grouping_b4 G find_among_b4 b# find_among_b4 @ find_among_b4 G out_grouping_bN4 b#out_grouping_b4 @ out_grouping_b4  GD slice_del4 b# slice_del4 @ @D slice_del4 G in_grouping4 b# in_grouping4 @ in_grouping4 GH in_grouping4$ b# in_Ogrouping4D @H in_grouping4L Gl out_grouping4d b# out_grouping4h @l out_grouping4 G out_grouping4 b# out_grouping4 @ out_grouping4 G in_grouping4 b# in_grouping4 @P in_grouping4G8 in_grouping4b# in_grouping44@8 in_grouping4<G\ out_grouping4Tb# out_grouping4X@\ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4QG find_among4b# find_among4@ find_among 4PGl slice_from_s4db# slice_from_s4h@l slice_from_s4pG slice_from_s4b# slice_from_s4@ slice_from_s4G find_amRong4b# find_among4@ find_among4 G SN_create_env4 {# SN_create_env4  SN_create_env4  G4 SN_close_env4 ({# SN_close_env4 04 SN_close_env` `=( @`= pS`0 =0";=P0 h;0 slice_from_seq_s;` in_grouping find_among=0 ; SN_close_env=0; SN_create_env=0;=0";=T08  slice_del find_among_b=0p;=0";=0( out_grouping_beq_s_b=0";=0 =0 ";=P, =0" ;=@(<  out_grouping ==U== =(=0=8=@=H=P=IX=Y`=ddh=kkp=ttx=ene=Vse=en=heden=s=end=ig=ing=lijk=baar=bar=aa=ee=oo=uu=Wa=e=i=o=u=y =Y(=i0=I8=y@=YH=yP=iX=e`=Xgemh=heidp=heidx=c=en=ig=e=e= 6P4= 6X4=6=Y6`4= 6h4= 6p4=6 = A8= AP= Ch= 64= 6Z4= 64= 64= 6 4= 6(4= 604= 684= 6@4[= 6H4=6H=6x4= 64= 64= 64= 64=6\=64= 64= 64= 64= 64= 64=6 - -=6]4= 64= 64= 64=6 @ @=0('STEM_NLCompaq C V6.5-001i i= 44= r_prelude4= u y z { }  x ^$    y            4 = p( (=$r_mark_regions = $ $=  r_postlude = t t= p404= r_R1p4=  =  t t= 4_4= r_R24=  =  = 44= r_undouble4=tlk           ( =  = 4@4= r_e_ending4=phg " ! ! " " %` ' ' ) ) ,  = @ = 44= r_en_ending4=[SR 1 3 3 5 5 6 : :, = 0 = 44=r_standard_suffix4=^V D B B B E D G  H  S Sa T P L L  Y Y ^ ^ ` c e e i i l n q q s w { } }                  I      b( =  =  44= dutch_stem 4=91                          *    (Z Z=   4=  >cNe4= } }=v 4=  4=   4= Z Z=  4=  se4= ] ]=v4= 4=  = } }= 44=dutch_create_env4=   =d  | |=  44=dutch_close_env 4=  =  =   SN_create_env SN_close_env in_grouping out_groupingout_grouping_beq_seq_s_b find_among find_among_b slice_from_s slice_del  creaww1:}oَ]V1.0eCCstem_noV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jnorwegian_stem8JPnorwegian_create_env8JPpnorwegian_close_env f= P,0#G~^G^~ (0GGQG4G 0[8bG@Zk//// #0BGG4GGG8b @0@/ //@Zk/G*//@BGG4GGGHb@Zk// #GG@B4GHbGG @0@/ @Zk/,ctGdy`@`4G///G]]} (0@#k///G//#^~^ ~(08GGGP{#_ ,g#GtGp"0B!8b1" @2@#G/@Zk)8DXDpxDTGtG@BHbG@U"//@ZkpPBGTGXbTGG$"@Zk B G4G(b@Zk BG4G(b@Zk ,TGtGp"0B8b1" @G@Zk//# 4G B(b B#01BG@Zk ,GtG0B8btG @ #=p"`1"@ZkC/=h5@4G BD(b#G/@Zk4GG]] }(08@#k/// ({tGG4GGk/ 4G({/k4HG\ in_grouping4Pb# in_grouping4X@\ in_grouping4tG in_grouping4b# in_grouping4@ in_grouping4G oiut_grouping4b# out_grouping4@ out_grouping4G< out_grouping4b# out_grouping48@< out_grouping4 G4 find_among_b4  b# find_among_b4 0@4 find_among_b4 `G slice_from_s4db#j slice_from_s4 @ slice_from_s4G in_grouping_b4b# in_grouping_b4@ in_grouping_b4 G slice_del4 b# slice_del4 @ slice_del4 G slice_del4 b# slice_del4 k@ slice_del4 G, find_among_b4 b# find_among_b4 (@, find_among_b4 PG| slice_del4 Tb# slice_del4 x@| slice_del4 G find_among_b4 b# find_among_b4 @ find_among_lb4 G slice_del4 b# slice_del4 @ slice_del4PGl SN_create_env4T{# SN_create_env4hl SN_create_env4pG SN_close_env4x{#P SN_close_env4 SN_close_env =m0";=@4< ;0 in_grouping out_grouping=0p;p SN_close_env=0P; SN_create_env=0";=@$<  slice_del find_among_b slice_from_s in_grouping_b =an=e=ede=ande =ende(=ane0=ene8=hetene@=erteH=enP=hetenX=ar`=erh=heterp=sxo=as=es=edes=endes=enes=hetenes=ens=hetens=ers=ets=et=het=ert=astp=dt=vt=leg=eleg=ig=eig=lig =elig(=els0=lov8=elov@=slovH=hetslovP=wXq=er`=64= 64=6= A0=64= 64= 64= 6r4= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= s6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 6t4= 64= 64= 64= 64= 64= 64= 64=u 64= 64= 64=6=64= 64= 64= % %6v4= 64= 6 4= 6(4= 604= 684= 6@4= 6H4=w 6 @ @=0('STEM_NOCompaq C V6.5-001 = 44=r_mark_regions4= a ` ` ` ` c d d i d e m p m s0 p = ' '=# r_main_suffix = * *=&r_consonant_pair x= ( (=$r_other_suffix =  = 44=norwegian_stem4=YQ   G G               D .        *  L    y   0Z Z=  4=  e4= } }=v4=  4= 4= Z Z=  4=  e4= ] ]=v4= 4= xZ Z=  4=   z>e4= ] ]=v4= 4= x =  = !P44="norwegian_create_envP4=   =  =  p4P4=!norwegian_close_envp4=  =  =   SN_create_env{ SN_close_env in_grouping in_grouping_b out_grouping find_among_b slice_from_s slice_del creaww1_oَ]V1.0CCstem_ptV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$i$CODE$( $LITERAL$$LINK$8$DATA$$BSS$| $READONLY_ADDR$ $READONLY$0Jp portuguese_stem8Jportuguese_create_env8JPportuguese_close_env =#tGtG~^^~ (0GGG 0[8bG/@Zk/C/8DXDxD' @/` B0B@BGTGxE"tGHb@Zk@BGTGpE"tGHb@Zk0BGG8btGtG/@}ZkC//G]]4G} (0@#/k/// P,0#TG^~G^ ~Q(4G 08[08GGG1 pq @bG/@ZkN#(BGG4GTG0bG=/@Zk8BGG4GTGG@b@Zk|/# G4G8B@bTGG 0@0 @#G@Zkk=8BGG4G@bTGG#@Zk(BGG4GTGG0b@Zk/V///# G4G(B0bTGG 0@0 @#G@Zk~C(BGG4GTGG0b@Zk<#(BGG4GTG0bG =/@Zk8BGG4GTGG@b@Zk$/# G4G8B@bTGG 0@0 @#G@Zk =8BGG4G@bTGG#@Zk// #  0@0 @#c,Cr8BGG4GTGG@b@Zk////# G4G8B@bTGG 0@0 @]#G@Zk(BGG4GTGG0b@Zk////# G4G(B0bTGG 0@0 @A#G@Zk,#G8B4GTG@bGG@Zk/# G4G8B@bTGG 0@0 @%#G@Zk(BGG4GTGG0b@Zk////# G4G(B0bTGG 0@0 @ #G@Zk//,#G]]4G }(08@#k/,01 0Bk///,01 0Bk///#0TGtG^~^ ~(08GG0GP0[8bP G@ZkGd#P7@B#]\@Ck//GV//G_//GM/ BG4G(b@ZkE//G_//G=/pBGtG@D"tGxb@Zk3G_//G-/pBG4GHD"tGxb@Zk#G_//G/pBGGPD"tGxb@Zk, @/G / BG4G(b@Zk #$"G0B8bGtG% @/@ZkC/ #%%B///CGCh_ %B/// BG4G(b@Zk@BXD"GHbTGtG8D##@Zk $@//#G#D_ C%EB/// BG4G(b@Zk//G2_//G/ BG4G(b@Zk 0$"G0B8bTGtG%@/@Zk $@//#8DG#_ C%EB/ BG4G(b@Zk//G_//G}/ BG4G(b@Zk X$"G0B8btGtG%@/@Zk $@e//#8DG#^_ C%EB>X/ BG4G(b@ZkQ//G_//GI/ BG4G(b@Zk `D"G@BHbTGtG @@Zk $@0/#G#_ C}2SBC%// BG4G(b@Zk//G_//G/@BG4GhD"tGHb@Zk/G /pBGTGpD"tGxb@Zk4GG]] }(08@#k///0#^~ ^(~08@GGG>{#_Gb#_ =G`b# #[_F #,GBbGtG# 0@@ ##GG@Zk =//G# #B8DGb4G#/@Zk 4G` BGtG` $"bG/@Zk///:C5@ D4Gb2G _ӀB.G@Zk+ #GXD"Bb4GtG! @=/@Zk# `D"B4GbtG B#G@Zk #4Gb!0@G#_ӀBG@Zk = @ #B#GGtGb# $"@Zk`#8DBXD4GPD"tGb#////QG@ZkNG_ӀBGI4Gb/@Zk #0D"GBb4GtG! @ =@Zk///# 8D"B4GbtG B#G@Zk C } =G4GBbtG3SB@D"c@ZkB#HD" 4GbtG# BG/@Zk  #4Gb!0@G#r_ӀBG@ZkBG$"btGtG/@Zk/C/8DXDxD' @/` B0BBG4GD"tGb@ZkBG4GD"tGb@ZkBG$"btGtG/@ZkC//G] ]4G(}08@P#/k/// ({tGGtGGk/ 4G({/k4<GT find_among4@b# find_among4P@T find_among4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G find_among4b# find_among4@ find_among4G in_grouping4b#( in_grouping4@ in_grouping4G out_grouping4b#( out_grouping4@ out_grouping4G in_grouping4b#( in_grouping4@ in_grouping40GX in_grouping44b#( in_grouping4T@X in_grouping4dG in_grouping4tb#( in_grouping4@ in_grouping4G out_grouping4b#( out_grouping4@ out_grouping4G out_grouping4b#( out_grouping4@ out_grouping4G$ out_grouping4b#( out_grouping4 @$ out_grouping4,GT out_grouping4@b#( out_grouping4P@T out_grouping4TGx in_grouping4pb#( in_grouping4t@x in_grouping4G in_grouping4b#( in_grouping4@ in_grouping4G in_grouping4b#( in_grouping4@ in_grouping4G< in_grouping44b#( in_grouping48@< in_grouping4`G in_grouping4db#( in_grouping4@ in_grouping4G out_grouping4b#( out_grouping4@ out_grouping4G out_grouping4b#( out_grouping4@ out_grouping4G( in_grouping4b#( in_grouping4$@( in_grouping4@Gh in_grouping4Db#( in_grouping4d@h in_grouping4lG out_grouping4b#( out_grouping 4@ out_grouping4G out_grouping4b#( out_grouping4@ out_grouping4 G find_among_b4 b# find_among_b4 @ find_among_b4  G4 slice_del4 ,b# slice_del4 0@4 slice_del4`G| slice_from_s4tb# slice_from_s4x@| slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4G slice_from_s4b# slice_from_s4@ slice_from_s4  G4 slice_del4 ,b# slice_del4 0@4 slice_del4 DGd find_among_b4 Hb# find_among_b4 `@d find_among_b4 G slice_del4 b# slice_del4 @ slice_del, G eq_s_b,b#eq_s_b,  @ eq_s_b4 P Gd slice_del4 \ b# slice_del4 ` @d slice_del4  G slice_del4  b# slice_del4  @ slice_del4  G find_among_b4  b# find_among_b4  @ find_among_b4  G4 slice_del4 , b# slice_del4 0 @4 slice_del4 ` Gt slice_del4 l b# slice_del4 p @t slice_del4  G find_among_b4  b# find_among_b4  @ find_among_b4  G slice_del4  b# slice_del4  @ slice_del4 0 GD slice_del4 < b# slice_del4 @ @D slice_del, T Gt eq_s_b,X b#eq_s_b, p @t eq_s_b4  G slice_del4  b# slice_del4  @ slice_del,  G eq_s_b, b#eq_s_b,  @ eq_s_b40 GL slice_from_s4D b# slice_from_s4H @L slice_from_s4  GD find_among_b4  b#p find_among_b4 @ @D find_among_b4 d G slice_del4 p b#p slice_del4  @ slice_del4  G find_among_b4  b#p find_among_b4  @ find_among_b4  b#p slice_del4  G  slice_del4 @  slice_del,  GDeq_s_b ,$b#peq_s_b, @@Deq_s_b, TGxeq_s_b,\b#peq_s_b, t@xeq_s_b4 b#p slice_del4 G slice_del4 @ slice_del4 G find_among_b4 b#p find_among_b4 @ find_among_b4G, slice_from_s4b#p slice_from_s4(@, slice_from_s4 8GT slice_del4 Hb#p slice_del4 P@T slice_del, dGeq_s_b,hb#peq_s_b, @eq_s_b, Geq_s_b,b#peq_s_b, @eq_s_b, Geq_s_b,b#peq_s_b, @eq_s_b, G4eq_s_b,b#peq_s_b, 0@4eq_s_b4 Db#p slice_del4 XGh slice_del4 d@h slice_del4lG find_among4xb#p find_among4@ find_among4G slice_from_s4b#p slice_from_s4@ slice_from_s4G slice_from_s4b#p slice_from_s4@ slice_from_s4 GD find_among4,b#p find_among4@@D find_among4G SN_create_env4{# SN_create_env4 SN_create_env4G SN_close_env4{#P SN_close_env4 SN_close_envH H=0( ` =0";=@,< `;0 find_among slice_from_s=0;p SN_close_env=0; SN_create_env=0 ;=0@;=0"`;=@0<  slice_del find_among_b eq_s_b;=0"P;=@D< P out_grouping in_grouping=0" ;=P(<  ===a~=o~ =ic(=ad0=os8=iv@=avelH=velP=icX=abil`=ivh=icap=nciax=ira=adora=osa=ista=iva=eza=loga=idade=mente=amente=vel=vel=ucin=ico=ismo=oso=amento=imento=ivo=aa~o=ador =icas(=ncias0=iras8=adoras@=osasH=istasP=ivasX=ezas`=logash=idadesp=ucionesx=adores=ao~es=icos=ismos=osos=amentos=imentos=ivos=ada=ida=ia=aria=eria=iria=ara=era=ira=ava=asse=esse=isse =aste(=este0=iste8=ei@=areiH=ereiP=ireiX=am`=iamh=ariamp=eriamx=iriam=aram=eram=ir>am=avam=em=arem=erem=irem=assem=essem=issem=ado=ido=ando=endo=indo=ara~o=era~o=ira~o=ar =er(=ir0=as8=adas@=idasH=iasP=ariasX=erias`=iriash=arasp=erasx=iras=avas =es=ardes=erdes=irdes=ares=eres=ires=asses=esses=isses=astes=estes=istes=is=ais=eis=areis=ereis=ireis =reis(=reis0=reis8=sseis@=sseisH=sseisP=veisX=eis`=areish=ereisp=ireisx=ados=idos=amos=ramos=ramos=ramos=vamos=amos=aramos=eramos=iramos=emos=aremos=eremos=iremos=ssemos=ssemos=ssemos=imos=armos=ermos =irmos(=mos0=ars8=ers@=irsH=euP=iuX=ou`=arh=erp=irx=a=i=o=os====e====a~=o~===log=u=ente=at=at=e =ir(=u0=g8=i@=cH=cP=iX=c`= 64= 64=6= 64= 64=6=6@4= 6H4=6=6P4= 6X4= 6`4= 6H= A `=6 4= 6(4= 604= 684=6=6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64=6=64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= /6@4= /6H4= /6P4= 26X4= 26`4= 26h4= /6p4= /6x4= /64= /64= 64= :64= :64= :64= :64= :64= :64= :64= :64= :64= :64= :64= :64 = 64= G64= G64= I64= I64= I6 4= I6(4= I604= I684= I6@4= I6H4= I6P4= I6X4= I6`4= T6h4= T6p4= T6x4= 64= 64= 64= Z64= Z64= Z64= Z64= Z64= _64= _64= _64= 64= c64= c64= c64= c64= c64=> c64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4=6=6x4= 64= 64= 64= 64= 64= 64=6=64= 64= 64= 69 94=6 @ @=0('STEM_PTCompaq C V6.5-001 = 44= r_prelude4=ia`          ( = P = P4(4=r_mark_regionsP4=                                         # & # - = $ $=  r_postlude = t t=  44= r_RV 4= N =   =r_R1 = t t= @44= r_R2@4= X =   = `44=r_standard_suffix`4=  \ \ \ a S! x w y { ~           0Z Z=  4=   e4= v =  =  ' '=# r_verb_suffix = + +='r_residual_suffix = ) )=%r_residual_form =  =  4p4=portuguese_stem 4=5-   +  / X    P Z     C . . 2 1 2 4 4 6 O                    : 5 4 7 A > ; 3 4 O(Z Z=   4=  e4= ,] ]=v 4=  4= |Z Z=   4=  e4= ?] ]=v 4=  4= ltZ Z=   4=  e4= F ='v 4=  4= 4= 4= Z Z=  l4=  e4= L] ]=vl4= 4=  =  = "44=#portuguese_create_env4= R  =  = !4P4="portuguese_clo se_env4= T =  =   SN_create_env SN_close_env in_grouping out_groupingeq_s_b find_among find_among_b slice_from_s slice_del  creaww1oَ]V1.0CCstem_ruV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$iD $CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J@ russian_stem8J russian_create_env8JP0 russian_close_env =L D P,0#G^~G^ ~Q(G 00G GG1PG^0[8b@Zk//# GG0B8bGG 0@0 @]#G@Zk,#G@BGGHbGG@Zk/# GG@BHbGG 0@0 @A#G@Zk0BGGGGG8b@Zk////# GG0B8bGG 0@0 @%#G@Zk@BGGGGGHb@Zk////# GG@BHbGG 0@0 @ #G@Zk//,#=4G#G]] }(0@#k/#^~ ^(~08@GGGP{#b_ #,G4GtGp@B#Hb G 0@`##G@Zk//G//#8D BXDG4G(b# #@Zk! 0BG`E"8b4GtG @@Zk// #hE"0B4G8btG!0@G#/@ZkG BG4G(b@Zk4G@B%"G TGtGHb@ZkG  B8D4G(bG@Zk4G / #@B @#G%"TGtGHb @ZkGJ B8D4G(bG@Zk #GtG@BHb 0BG%"@Zk #!0@#./#8D BXDG4G(b#`#@Zk! 0BGpE"8b4GtG @@Zk #xE"0BG4G8btG! @#@Zk #!0@# BG4G(b@Zk4G@B`%"GW # GtGHb! @##@ZkG1#8D BXDG4G(b# //$@Zk"/ 0BGE"8b4GtG @@Zk// #E"0B4G8btG!0@G#/@ZkG BG4G(b@Zk4G @B%" GHbtG @G@ZkC 5@ B D4G(bG//@Zk 0BE"G8b4GtG@Zk/ ### BG4G(b#@Zk #G%"@BHbTGtG  @@ZkC,#5@ B4G(b1 0BFG D//@Zk = %"G@BHbGtG @@Zk?#8DXD BxD4G(b#G@3@Zk10BG4GE"tG8b@Zk B(G4G(b@Zk#// BG4G(b@Zk0BE"G8b4GtG@Zk//#0BE"G4G8btG#@Zk BG4G(b/@Zk4GG] ](}08@P#k/// ({tGGTGGk/ 4G({/k4XGd in_grouping4\b# in_grouping4`@d in_grouping4G in_grouping4b# in_grouping4@ in_grouping4G out_grouping4b# out_grouping4@ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4G< in_grouping44b# in_grouping48@< in_grouping4`G in_grouping4db# in_grouping4@ in_grouping4G out_grouping4b# out_grouping4@ out_grouping4G out_grouping4b# out_grouping4@ out_grouping4 G find_among_b4b# find_among_b4 @ find_among_b4 G  slice_del4 b# slice_del4 @  slice_del, G8eq_s_b,  b#eq_s_b , 4@8eq_s_b, PGteq_s_b, Xb#eq_s_b, p@teq_s_b4 G slice_del4 b# slice_del4 @ slice_del4 G find_among_b4b# find_among_b4 @ find_among_b4 G slice_del4 b# slice_del4 @ slice_del4  G4 find_among_b4(b# find_among_b4 0@4 find_among_b4 DGd slice_del4 Pb# slice_del4 `@d slice_del4 tG find_among_b4xb# find_among_b4 @ find_among_b4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b, b#eq_s_b, @eq_s_b, G8eq_s_b, $b#eq_s_b, 4@8eq_s_b4 PGd slice_del4 \b# slice_del4 `@d slice_del4 hG find_among_b4b# find_among_b4 @ find_among_b4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b, b#eq_s_b, @eq_s_b,  GDeq_s_b, (b#eq_s_b, @@Deq_s_b4 PGd slice_del4 \b# slice_del4 `@d slice_del4 lG find_among_b4b# find_among_b4 @ find_among_b4 G slice_del4 b# slice_del4 @ slice_del, Geq_s_b, b#eq_s_b, @eq_s_b4 G, slice_del4  b# slice_del4 (@, slice_del4 <G\ find_among_b4@b# find_among_b4 X@\ find_among_b4 pG slice_del4 xb# slice_del4 @ slice_del4 G find_among_b4b# find_among_b4 @ find_among_b4 G  slice_del4 b# slice_del4 @  slice_del, G,eq_s_b, $b#eq_s_b, (@,eq_s_b4 ,GD slice_del4 <b# slice_del4 @@D slice_del4 PGd slice_del4 \b# slice_del 4 `@d slice_del, hGeq_s_b, tb#eq_s_b, @eq_s_b, Geq_s_b, b#eq_s_b, @eq_s_b4 G slice_del4 b# slice_del4 @ slice_del4 G, SN_create_env4 {# SN_create_env4( , SN_create_env40 GD SN_close_env48 {#P SN_close_env4@ D SN_close_env =0";=@< (;0 in_grouping out_grouping=00 ;p SN_close_env=0 ; SN_create_env=0"@;=>P$<  slice_del eq_s_b find_among_b ==== =(=0=8=@=H=P=X=`=h=p=x===================== =(=0=8=@=H=P=X=`=h=p=x===================== =(=0=8=@=H=P=X=`=h=p=x===================== =(=0=8=@=H=P=X=`=h=p=x== =================== =(=#"0=8=@=H=P=X=`=h=p=x==6X4= 6`4=6=64= 64=6=64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4=6=6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64=6=64= 6 4=  6(4= 604= 684= 6@4= 6H4= 6P4=6=6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= "64= 64= 64= 64= 64= '64= '64= 64= 64= 64=,6=64= 64= 64= 64= 64= 64= 64=  64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64=6=64= 64= 64= 6 4=6 @ @=0('STEM_RUCompaq C V6.5-001U U= 44=r_mark_regions4= = < < < < > < < ? A D A G Ib L I P S P W Z W _$ = @ =r_R2 = - -=)! r_perfective_gerund = % %=! r_adjective = & &=" r_adjectival = % %=! r_reflexive =  =r_verb =  =r_noun = ( (=$r_derivational = # #= r_tidy_up = / /= @44=> russian_stem@4=   l l l k  o  n  r r v v3o r   k                 j m          ] T W W   Y = B  [  e  e V M      4    K Q0Z Z=  4=  e4= *} }=v4=  4=  4= <`Z Z=  l4=  e4= 7 ='vl4= |4=  4= 4= @hZ Z=  h4=  e4= 3} }=vh4=  4=  4= Z Z=   4=  e4= /Z Z=   4=  e4=  ='v 4= 4= 04= @4= $X} }=v 4= 4= 04= 8\Z Z=  4=  Ue4= % ='v4= 4=  4=  4= Z Z=  44=   e4= IZ Z=  h4=  :e4= ] ]=vh4= 4=  ] ]=v44= X4= LpZ Z=  4=  Ee4= N] ]=v4= 4= ( =  =  44= russian_create_env 4= W  =  ~ ~= 0 4P4=russian_close_env0 4=  Y =  =   SN_create_env SN_close_env in_grouping out_groupingeq_s_b find_among_b slice_del creaww1pَ]V1.0CCstem_seV1.0 4-AUG-2004 09:35Compaq C V6.5-001p p $ABS$it$CODE$ $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0J swedish_stem8J@swedish_create_env8JP`swedish_close_envT T=|t P,0#G~^G^~ (0GGQG4G 0[8bG@Zk//// #0BGG4GGG8b @0@/ //@Zk/G*//@BGG4GGGHb@Zk// #GG@B4GHbGG @0@/ @Zk/,ctGdy`@`4G///G]]} (0@#k///G//#~^^~ (0GGGP{#_ ,#GtGp"0B!8b1" @&@#G/@Zk8DpXD4GGPBXb @4"GTG/@Zk B G4G(b@Zk BG4G(b@Zk ,GtGp"0B8b1" @G@Zk// #4G B(b 0@##!1 @##G@ZkGGtG ,#p0B8b! @% #G@Zk8DXD@BxDtGhE"Hb `GG@Zk @BGtG`E"tGHb@Zk BG4G(b@Zk4GCCG]]} (0@#k// ({tGG4GGk/ 4G({/k4HG\ in_grouping4Pb# in_grouping4X@\ in_grouping4tG in_grouping4b# in_grouping4@ in_grouping4G out_grouping4b# out_grouping4@ out_grouping4G< out_grouping4b# out_grouping48 @< out_grouping4 G4 find_among_b4  b# find_among_b4 0@4 find_among_b4\G in_grouping_b4`b# in_grouping_b4@ in_grouping_b4 G slice_del4 b# slice_del4 @ slice_del 4 G slice_del4 b# slice_del4 @ slice_del4 G find_among_b4 b# find_among_b4 @ find_among_b4 G< slice_del4 b# slice_del4 8@< slice_del4 XG fin d_among_b4 \b# find_among_b4 @ find_among_b4 G slice_from_s4b# slice_from_s4 @ slice_from_s4 G slice_from_s4b# slice_from_s4 @ slice_from_s4 G slice_del4 b#  slice_del4 @ slice_del4@G\ SN_create_env4D{# SN_create_env4X\ SN_create_env4`Gt SN_close_env4h{#P SN_close_env4pt SN_close_env =0";=@4< ;0  in_grouping out_grouping=0`;p SN_close_env=0@; SN_create_env=0";=@$<  slice_del find_among_b slice_from_s in_grouping_b =a=arna=erna=heterna =orna(=ad0=e8=ade@=andeH=arneP=areX=aste`=enh=andenp=arenx=heten=ern=ar=er=heter=or=s=as=arnas=ernas=ornas=es=ades=andes=ens=arens=hetens=erns=at=andet=het =ast(=dd0=gd8=nn@=dtH=gtP=ktX=tt`=igh=ligp=elsx=fullt=lst=w=ls=full= A =64= 64= 64= 64= 6 4= 6(4= 604= 684= 6@4= 6H4= 6P4= 6X4= 6`4= 6h4= 6p4= 6x4= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 64= 5 564= 64= 64= 64= 64= 6 4=6=6(4= 604= 684= 6@4= 6H4= 6P4= 6X4=60=6`4= 6h4= 6p4= 6x4= 64=6 @ @=0('STEM_SECompaq C V6.5-001 = 44=r_mark_regions4= p o o o o r s s x s t  |  | 0  = ' '=# r_main_suffix = * *=&r_consonant_pair = ( (=$r_other_suffix =  = 44= swedish_stem4=WO   I I         F 4       # #   L       ,Z Z=  4=  e4= } }=v4=  4= 4= Z Z=  4=  e4= ] ]=v4= 4= lZ Z=  @4=  >e4= } }=v@4=  P4= d4=  =  = @44= swedish_create_env@4=    =  ~ ~= `4P4=swedish_close_env`4=  =  =   SN_create_env SN_close_env in_grouping in_grouping_b out_grouping find_among_b slice_from_s slice_del creaww1;pَ]V1.0EE utilities>V1.0 4-AUG-2004 09:35Compaq C V6.5-001  $ABS$i$CODE$2 $LITERAL$$LINK$$DATA$$BSS$ $READONLY_ADDR$ $READONLY$0Jcreate_s(JPlose_s0Jp in_grouping0Jp in_grouping_b0J`p out_grouping0JPout_grouping_b0J@in_range0J0 in_range_b0J  out_range0J out_range_b(J`eq_s(J eq_s_b(Jeq_v(Jeq_v_b0J` find_among0J@@  find_among_b0J  increase_size0J`  replace_s0JP slice_from_s0J  slice_from_v0J slice_del0Jinsert_s0J`insert_v0J`slice_to0J assign_to(J00debug =#TG 4G~^ [({G@Zk4G G] #k/ ({4G"k/// 4G4G BТB0B.J B2B`w@J8B @@F!2H1/1K1D k///Gk//4G4G BТB41B."J B2B `w@J @8B@F!2H1/1K1D/ k/Gk// G Bk//Т4GGB.J B2B `w@J @8B@F!2H1/1K1D k/0B4G/k///!G Bk//Т4GGB."J B2B`w@J8B @@F!2H1/1K1D /k///41B4G/k///p G tBk//GB.J UB BQF k//0`B4Gp/k///pG tBk//GB."J UB BQF k/31`B4Gp/k///p G tBk//GB.J UB BQF k//0`B4Gp/k///pG" tBk//GB."J UB BQF k/31`B4Gp/k///p GGGtG @ @#0#~^[^~{ GGG3@@Zk/"4G#@"//GG]]} 0#/k///Gk//pGGGtG `B @#0#~^ [3@^~({ GGG05@/@Zk"4G!#@"/GG]]} 0#/k///Gk//G1{#G#1{#à# G~^GG^~ (0޴8@H>PGGGBG/9VB///7 KG @GBWG@9C@@G@` ;@d`B//UG0@C] ,@H0B(.E`Fs"(JUG0@C1@ B@0BK 0 @/H ///C3--3II Bs"1'AUG @0B0@C8 0 @6/3-,IH Bs"1AUG@0B0@C@' 0 @/$ "3-,3IH Bs"0B1'AUG0@C 0 @//3-&.$ B3Is"&J1A 0 @//// GG ?" GG///GG9VB= C?BVBECD4G/w///VB4GGB @@ g`[G@Zk' @"ǢGG]]} (0ݤ8@H=P`#k/// // //#ТG~^GG^~ (0޴8@HGGGGB"/9UB///7 KG @GBwG@9C@@1@3B !:@!1 @k 軙% @/S`///6Fb`,HaC!1 @.D`Fs"JaC!1 @0@(1 BE/P0@C"/K,-HI0@(Q BEaC!1 @B0@C?,-"HI(q BE0@aC!1 @aC!1 @30@C"/,-HI( BE1 B0@ &0@C#,. @HJ0@/0@C/ ///6F11 B`,aCH!1 @s".J0@0@C?/ GG "GG///GG9UB= C{BUBhGCE4G/o&///UBG4GFB @ @/ f/`[//@Zk'@GG]]} (0ݤ8@HP#/k/// // //#"B4G^~P[^ ~(0GGG0@Xb@Zk= B GG4G" #@ZkBGb@ZkG]G] }(0@#/k///#!QB^~^ ~(08޴@HPGG'aBGGGGP{# P@@ 2B@/'/_ =pBB1%BGB@Zk âB B òB#÷ BpBcG]d@@ZkG]G] }(08ݤ@HP`#k/0#~^^~ GGG  B 0 @ PZ :@^ ^~ 0#k/H" bTG(B0b1"/@ZkG?"b#G@8B4G4G@b@Zk/#^~^ ~(GGG>8{# ^_} b#G#CG]] }(0#j//G1{#GG( ={##~^{#^~ GGGU_" a@ @"B r@`@BG]]} 0#/k///#Gs~^{#^~ GGG3_" a@ @"B r@`@BG]]} 0#k//#~^^~ (0GGGG{#^_#pb#%@1@ BG/_G#cGBGG#@@ZkG]]} (0@#/k///#CqG)^~^ ~(GGG{# r cBG`//_=BGGA@Zk`G]] }(0#k/p#G~^^~ (0GGG [0 (bG/@Zk;G/ B4GH"(bD/@Zk B@"4G(bD/@Zk B4G8"(bD@Zk B4G`"(bD@Zk  B4Gh"(bD@Zk @ BTG(b#%@.JP"t$F@Zk0@ @ G](b} X"]4G(0@#k*4G( decc$malloc4{# decc$malloc4$@( decc$malloc4PGd decc$free4T{# decc$free4`d decc$free4 G decc$memcmp4{# decc$memcmp4 @ decc$memcmp4 TG dec+c$memcmp4d{# decc$memcmp4 @ decc$memcmp4 G decc$malloc4 b# decc$malloc4 @ decc$malloc4 G OTS$MOVE4 @ OTS$MOVE4 G, decc$free4$ b# decc$free4( @,, decc$free4 GOTS$MOVE4@OTS$MOVE4<GXOTS$MOVE4T@XOTS$MOVE4  G$decc$txfprintf4 b#decc$txfprintf4  @$decc$txfprintf4 8GL decc$exit4 Db# decc$exit4 -H@L decc$exit4TGhOTS$MOVE4d@hOTS$MOVE4G OTS$MOVE4@ OTS$MOVE4hG decc$txprintf4tb#0 decc$txprintf4@ decc$txprintf4G decc$txprintf4b#0 decc$txprintf.4@ decc$txprintf4G decc$txprintf4b#0 decc$txprintf4@ decc$txprintf4G decc$txprintf4b#0 decc$txprintf4@ decc$txprintf4G decc$txprintf4b#0 decc$txprintf4@/ decc$txprintf4G8 decc$txprintf4(b#0 decc$txprintf44@8 decc$txprintf4<Gh decc$txprintf4Db#0 decc$txprintf4d@h decc$txprintf4tG decc$txprintf4b#0 decc$txprintf4 decc$txprintfn n0= %3d (line %4d): [%d]'="faulty slice operation: ` `=0";= $  decc$malloc=0 0;=@,<  decc$txprintf;=|p=[x={=%c=' =]1=}=0P; decc$free=0" ;=@, 8OTS$MOVE=0";=0( =0 ;=0 7decc$ga_stderr decc$txfprintf decc$exit=0";=@$< =0"` ;=`24 =0 `;=0( =0 ;=0 =0 P;=0 =0; =0;@=0"@ ;=PD =0";=`H =0" ;=0P  decc$memcmp3=0;=0"`;=0L =0;=0;=0;=0;=0;=0;=0p;=0;=0p;@ @64=B B=2*) UTILITIESCompaq C V6.5-001 = 44=create_s4=/'& + + + - = Ps s= P44= lose_sP4= 2  =  = p44= in_groupingp45=PHG 5 5 6 7 7 7 9  =  = 4p4= in_grouping_b4=PHG ? ? @ A A A C  =  = p4`4= out_groupingp4=0(' I J J O =  = 64P4=out_grouping_b4=0(' S T T Y =  = 4@4=in_range4=7/. ^ _ _ ` c = p = 404= in_range_b4=7/. g h h i l7 = p = 4 4= out_range4=/'& p q q u = p = 44= out_range_b4=/'& y z z ~ = p = `44= eq_s`4=XPO    8    ,   =  =  44= eq_s_b 4=XPO        ,   = r r= 44= eq_v4=   = t t= 44= eq_v_b94=   =  = 4`4= find_among4=yq                              m      :  @  = @ = @ 4@4= find_among_b@ 4=h`                                 Z      ;@  = p =  44= increase_size 4=RJI      2 2 (Z Z=   4=  ye4= ] ]=v 4=  4= $ =  = ` 44<= replace_s` 4=\TS         , = 0 = 44= slice_check4=B:9      $ =  = P44= slice_from_sP4=" * * ,  = =pz z= 4 4= slice_from_v4= /  = v v= 44= slice_del4= 4 =  = 44=insert_s4= 7 7, =  = `4>4=insert_v`4=$ = = =$ =  = 4`4=slice_to4=*"! C E G4 =  = 44= assign_to4=)! M M N  =  = 0404= debug04=g_^ W U U ` b Z  f f f f = x =  decc$ga_stderrdecc$txfprintf decc$txprintf decc$free decc$exit decc$malloc decc$memcmpOTS$MOVE c$gaww0[swish-e.man]Makefile.am##Ym2cz{y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); if BUILDDOCS man_MANS = \ $(srcdir)/swish-e.1 \ $(srcdir)/SWISH-CONFIG.1 \ $(srcdir)/SWISH-FAQ.1 \ $(srcdir)/SWISH-LIBRARY.1 \ $(srcdir)/SWISH-RUN.1 endif $(srcdir)/swish-e.1 : $(top_srcdir)/pod/swish-e.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/swish-e.pod > $@ $(srcdir)/SWISH-CONFIG.1 : $(top_srcdir)/pod/SWISH-CONFIG.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-CONFIG.pod > $@ $(srcdir)/SWISH-FAQ.1 : $(top_srcdir)/pod/SWISH-FAQ.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-FAQ.pod > $@ $(srcdir)/SWISH-LIBRARY.1 : $(top_srcdir)/pod/SWISH-LIBRARY.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-LIBRARY.pod > $@ $(srcdir)/SWISH-RUN.1 : $(top_srcdir)/pod/SWISH-RUN.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-RUN.pod > $@ EXTRA_DIST = $(man_MANS) 0[swish-e.man]Makefile.in##)2ʢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); ,# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ @BUILDDOCS_TRUE@man_MANS = \ @BUILDDOCS_TRUE@ $(srcdir)/swish-e.1 \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-CONFIG.1 \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-FAQ.1 \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-LIBRARY.1 \ @BUILDDOCS_TRUE@ $(srcdir)/SWISH-RUN.1 EXTRA_DIST = $(man_MANS) subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = NROFF = nroff MANS = $(man_MANS) DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign man/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: $(mkinstalldirs) $(DESTDIR)$(man1dir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-man install-exec-am: install-info: install-info-am install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-man uninstall-man: uninstall-man1 .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-man1 install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am uninstall-man uninstall-man1 $(srcdir)/swish-e.1 : $(top_srcdir)/pod/swish-e.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/swish-e.pod > $@ $(srcdir)/SWISH-CONFIG.1 : $(top_srcdir)/pod/SWISH-CONFIG.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-CONFIG.pod > $@ $(srcdir)/SWISH-FAQ.1 : $(top_srcdir)/pod/SWISH-FAQ.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-FAQ.pod > $@ $(srcdir)/SWISH-LIBRARY.1 : $(top_srcdir)/pod/SWISH-LIBRARY.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-LIBRARY.pod > $@ $(srcdir)/SWISH-RUN.1 : $(top_srcdir)/pod/SWISH-RUN.pod -rm -f $@ -pod2man --center="SWISH-E Documentation" --lax --release='$(VERSION)' $(top_srcdir)/pod/SWISH-RUN.pod > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0wish-e.man]SWISH-CONFIG.126rﴢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SWISH-CONFIG 1" .TH SWISH-CONFIG 1 "2003-12-23" "2.4.1" "SWISH-E Documentation" .SH "NAME" SWISH\-CONFIG \- Configuration File Directives .SH "Swish-e CONFIGURATION FILE" .IX Header "Swish-e CONFIGURATION FILE" What files Swish-e indexes and how they are indexed, and where the index is written can be controlled by a configuration file. .PP The configuration file is a text file composed of comments, blank lines, and \fBconfiguration directives\fR. The order of the directives is not important. Some directives may be used more than once in the configuration file, while others can only be used once (e.g. additional directives will overwrite preceding directives). Case of the directive is not important \*(-- you may use upper, lower, or mixed case. .PP Comments are any line that begin with a \*(L"#\*(R". .PP .Vb 1 \& # This is a comment .Ve .PP Directives may take more than one parameter. Enclose single parameters that include whitespace in quotes (single or double). Inside of quotes the backslash escapes the next character. .PP .Vb 1 \& ReplaceRules append "foo bar" <- define "foo bar" as a single parameter .Ve .PP If you need to include a quote character in the value either use a backslash to escape it, or enclose it in quotes of the other type. .PP For example, under unix you can use quotes to include white space in a single parameter. Here, to protect against path names (%p) that might have white space embedded use single quotes (this also protects against shell expansion or metacharacters): .PP .Vb 3 \& FileFilter .foo foofilter "'%p'" <- parameter passed through the shell in single quotes \& FileFilter .foo foofilter '"%p"' <- windows uses double-quotes \& FileFilter .foo foofilter '\e'%p\e''<- silly example .Ve .PP Backslashes also have special meaning in regular expressions. .PP .Vb 1 \& FileFilterMatch pdftotext "'%p' -" /\e.pdf$/ .Ve .PP This says that the dot is a real dot (instead of matching any character). If you place the regular expression in quotes then you must use double\-backslashes. .PP .Vb 1 \& FileFilterMatch pdftotext "'%p' -" "/\e\e.pdf$/" .Ve .PP Swish-e will convert the double backslash into a single backslash before passing the parameter to the regular expression compiler. .PP Commented example configuration files are included in the \fIconf\fR directory of the Swish-e distribution. .PP Some command line arguments can override directives specified in the configuration file. Please see also the SWISH-RUN for instructions on running Swish\-e, and the SWISH-SEARCH page for information and examples on how to search your index. .PP The configuration file is specified to Swish-e by the \f(CW\*(C`\-c\*(C'\fR switch. For example, .PP .Vb 1 \& swish-e -c myconfig.conf .Ve .PP You may also split your directives up into different configuration files. This allows you to have a master configuration file used for many different indexes, and smaller configuration files for each separate index. You can specify the different configuration files when running from the command line with the \f(CW\*(C`\-c\*(C'\fR switch (see SWISH-RUN), or you may include other Configuration file with the \fBIncludeConfigFile\fR directive below. .PP Typically, in a configuration file the directives are grouped together in some logical order \*(-- that is, directives that control the source of the documents would be grouped together first, and directives that control how each document is filtered or its words index in another group of directives. (The directives listed below are grouped in this order). .PP The configuration file directives are listed below in these groups: .IP "\(bu" 4 Administrative Headers Directives \&\*(-- You may add administrative information to the header of the index file. .IP "\(bu" 4 Document Source Directives \*(-- Directives for selecting the source documents and the location of the index file. .IP "\(bu" 4 Document Contents Directives \*(-- Directives that control how a document content is indexed. .IP "\(bu" 4 Directives for the File Access method only \*(-- These directives are only applicable to the File Access indexing method. .IP "\(bu" 4 Directives for the \s-1HTTP\s0 Access Method Only \*(-- Likewise, these only apply to the \s-1HTTP\s0 Access method. .IP "\(bu" 4 Directives for the prog Access Method Only \*(-- These only apply to the prog Access method. .IP "\(bu" 4 Document Filter Directives \*(-- This is a special section that describes using document filters with Swish\-e. .Sh "Alphabetical Listing of Directives" .IX Subsection "Alphabetical Listing of Directives" .IP "\(bu" 4 AbsoluteLinks [yes|NO] .IP "\(bu" 4 BeginCharacters *string of characters* .IP "\(bu" 4 BumpPositionCounterCharacters *string* .IP "\(bu" 4 Buzzwords [*list of buzzwords*|File: path] .IP "\(bu" 4 ConvertHTMLEntities [YES|no] .IP "\(bu" 4 DefaultContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*] .IP "\(bu" 4 Delay *seconds* .IP "\(bu" 4 DontBumpPositionOnEndTags *list of names* .IP "\(bu" 4 DontBumpPositionOnStartTags *list of names* .IP "\(bu" 4 EnableAltSearchSyntax [yes|NO] .IP "\(bu" 4 EndCharacter *string of characters* .IP "\(bu" 4 EquivalentServer *server alias* .IP "\(bu" 4 ExtractPath *metaname* [replace|remove|prepend|append|regex] .IP "\(bu" 4 FileFilter *suffix* *program* [options] .IP "\(bu" 4 FileFilterMatch *program* *options* *regex* [*regex* ...] .IP "\(bu" 4 FileInfoCompression [yes|NO] .IP "\(bu" 4 FileMatch [contains|is|regex] *regular expression* .IP "\(bu" 4 FileRules [contains|is|regex] *regular expression* .IP "\(bu" 4 FuzzyIndexingMode [NONE|Stemming|Soundex|Metaphone|DoubleMetaphone] .IP "\(bu" 4 FollowSymLinks [yes|NO] .IP "\(bu" 4 HTMLLinksMetaName *metaname* .IP "\(bu" 4 IgnoreFirstChar *string of characters* .IP "\(bu" 4 IgnoreLastChar *string of characters* .IP "\(bu" 4 IgnoreLimit *integer integer* .IP "\(bu" 4 IgnoreMetaTags *list of names* .IP "\(bu" 4 IgnoreNumberChars *list of characters* .IP "\(bu" 4 IgnoreTotalWordCountWhenRanking [YES|no] .IP "\(bu" 4 IgnoreWords [*list of stop words*|File: path] .IP "\(bu" 4 ImageLinksMetaName *metaname* .IP "\(bu" 4 IncludeConfigFile .IP "\(bu" 4 IndexAdmin *text* .IP "\(bu" 4 IndexAltTagMetaName *tagname*|as\-text .IP "\(bu" 4 IndexComments [yes|NO] .IP "\(bu" 4 IndexContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*] *file extensions* .IP "\(bu" 4 IndexDescription *text* .IP "\(bu" 4 IndexDir [URL|directories or files] .IP "\(bu" 4 IndexFile *path* .IP "\(bu" 4 IndexName *text* .IP "\(bu" 4 IndexOnly *list of file suffixes* .IP "\(bu" 4 IndexPointer *text* .IP "\(bu" 4 IndexReport [0|1|2|3] .IP "\(bu" 4 MaxDepth *integer* .IP "\(bu" 4 MaxWordLimit *integer* .IP "\(bu" 4 MetaNameAlias *meta name* *list of aliases* .IP "\(bu" 4 MetaNames *list of names* .IP "\(bu" 4 MinWordLimit *integer* .IP "\(bu" 4 NoContents *list of file suffixes* .IP "\(bu" 4 obeyRobotsNoIndex [yes|NO] .IP "\(bu" 4 ParserWarnLevel [0|1|2|3] .IP "\(bu" 4 PreSortedIndex *list of property names* .IP "\(bu" 4 PropCompressionLevel [0\-9] .IP "\(bu" 4 PropertyNameAlias *property name* *list of aliases* .IP "\(bu" 4 PropertyNames *list of meta names* .IP "\(bu" 4 PropertyNamesCompareCase *list of meta names* .IP "\(bu" 4 PropertyNamesIgnoreCase *list of meta names* .IP "\(bu" 4 PropertyNamesNoStripChars *list of meta names* .IP "\(bu" 4 PropertyNamesDate *list of meta names* .IP "\(bu" 4 PropertyNamesNumeric *list of meta names* .IP "\(bu" 4 PropertyNamesMaxLength integer *list of meta names* .IP "\(bu" 4 PropertyNamesSortKeyLength integer *list of meta names* .IP "\(bu" 4 ReplaceRules [replace|remove|prepend|append|regex] .IP "\(bu" 4 ResultExtFormatName name \-x format string .IP "\(bu" 4 SpiderDirectory *path* .IP "\(bu" 4 StoreDescription [\s-1XML\s0 |HTML |TXT size] .IP "\(bu" 4 SwishProgParameters *list of parameters* .IP "\(bu" 4 SwishSearchDefaultRule [<\s-1AND\-WORD\s0>|] .IP "\(bu" 4 SwishSearchOperators .IP "\(bu" 4 TmpDir *path* .IP "\(bu" 4 TranslateCharacters [*string1 string2*|:ascii7:] .IP "\(bu" 4 TruncateDocSize *number of characters* .IP "\(bu" 4 UndefinedMetaTags [error|ignore|INDEX|auto] .IP "\(bu" 4 UndefinedXMLAttributes [DISABLE| error|ignore|index|auto] .IP "\(bu" 4 UseStemming [yes|NO] .IP "\(bu" 4 UseSoundex [yes|NO] .IP "\(bu" 4 UseWords [*list of words*|File: path] .IP "\(bu" 4 WordCharacters *string of characters* .IP "\(bu" 4 XMLClassAttributes *list of \s-1XML\s0 attribute names* .Sh "Directives that Control Swish" .IX Subsection "Directives that Control Swish" These configuration directives control the general behavior of Swish\-e. .IP "IncludeConfigFile *path to config file*" 4 .IX Item "IncludeConfigFile *path to config file*" This directive can be used to include configuration directives located in another file. .Sp .Vb 1 \& IncludeConfigFile /usr/local/swish/conf/site_config.config .Ve .IP "IndexReport [0|1|2|3]" 4 .IX Item "IndexReport [0|1|2|3]" This is how detailed you want reporting while indexing. You can specify numbers 0 to 3. 0 is totally silent, 3 is the most verbose. The default is 1. .Sp This may be overridden from the command line via the \f(CW\*(C`\-v\*(C'\fR switch (see SWISH-RUN). .IP "ParserWarnLevel [0|1|2|3]" 4 .IX Item "ParserWarnLevel [0|1|2|3]" Sets the error level when using the libxml2 parser for \s-1XML\s0 and \s-1HTML\s0. libxml2 will point out structural errors in your documents. .Sp .Vb 4 \& 0 = no report \& 1 = fatal errors \& 2 = errors \& 3 = warnings .Ve .Sp The exception to this is \s-1UTF\-8\s0 to Latin\-1 conversion errors are reported at level 1. This is because words may be indexed incorrectly in these cases. .Sp Note that unlike other errors generated by Swish\-e, these errors are sent to stderr. .IP "IndexFile *path*" 4 .IX Item "IndexFile *path*" Index file specifies the location of the generated index file. If not specified, Swish-e will create the file \fIindex.swish\-e\fR in the current directory. .Sp .Vb 1 \& IndexFile /usr/local/swish/site.index .Ve .IP "obeyRobotsNoIndex [yes|NO]" 4 .IX Item "obeyRobotsNoIndex [yes|NO]" When enabled, Swish-e will not index any \s-1HTML\s0 file that contains: .Sp .Vb 1 \& .Ve .Sp The default is to ignore these meta tags and index the document. This tag is described at http://www.robotstxt.org/wc/exclusion.html. .Sp Note: This feature is only available with the libxml2 \s-1HTML\s0 parser. .Sp Also, if you are using the libxml2 parser (\s-1HTML2\s0 and \s-1XML2\s0) then you can use the following comments in your documents to prevent indexing: .Sp .Vb 2 \& \& .Ve .Sp and/or these may be used also: .Sp .Vb 2 \& \& .Ve .Sp For example, these are very helpful to prevent indexing of common headers, footers, and menus. .PP \&\fB\s-1NOTE\s0\fR: This following items are currently not available. These items require Swish-e to parse the configuration file while searching. .IP "EnableAltSearchSyntax [yes|NO]" 4 .IX Item "EnableAltSearchSyntax [yes|NO]" \&\fB\s-1NOTE\s0\fR: This following item is currently not available. .Sp Enable alternate search syntax. Allows the usage of a basic \&\*(L"Altavista(c)\*(R", \*(L"Lycos(c)\*(R", etc. like search syntax. This means a search query can contain \*(L"+\*(R" and \*(L"\-\*(R" as syntax parameter. .Sp Example: .Sp .Vb 4 \& swish-e -w "+word1 +word2 -word3 word4 word5" \& "+" = following word has to be in all found documents \& "-" = following word may not be in any document found \& " " = following word will be searched in documents .Ve .IP "SwishSearchOperators " 4 .IX Item "SwishSearchOperators " \&\fB\s-1NOTE\s0\fR: This following item is currently not available. .Sp Using this config directive you can change the boolean search operators of Swish\-e, e.g. to adapt these to your language. The default is: \s-1AND\s0 \s-1OR\s0 \s-1NOT\s0 .Sp Example (german): .Sp .Vb 1 \& SwishSearchOperators UND ODER NICHT .>Ve .IP "SwishSearchDefaultRule [<\s-1AND\-WORD\s0>|]" 4 .IX Item "SwishSearchDefaultRule [|]" \&\fB\s-1NOTE\s0\fR: This following item is currently not available. .Sp \&\f(CW\*(C`SwishSearchDefaultRule\*(C'\fR defines the default Boolean operator to use if none is specified between words or phrases. The default is \f(CW\*(C`AND\*(C'\fR. .Sp The word you specify must match one of the available \&\f(CW\*(C`SwishSearchOperators\*(C'\fR. .Sp Example: .Sp .Vb 3 \& SwishSearchOperators UND ODER NICHT \& # Make it act like a web search engine \& SwishSearchDefaultRule ODER .Ve .IP "ResultExtFormatName name \-x format string" 4 .IX Item "ResultExtFormatName name -x format string" \&\fB\s-1NOTE\s0\fR: This following item is currently not available. .Sp The output of Swish-e can be defined by specifying a format string with the \f(CW\*(C`\-x\*(C'\fR command line argument. Using \f(CW\*(C`ResultExtFormatName\*(C'\fR you can assign a predefined format string to a name. .Sp Examples: .Sp .Vb 1 \& ResultExtFormatName moreinfo "%c|%r|%t|%p||\en" .Ve .Sp Then when searching you can specify the format string's name .Sp .Vb 1 \& swish-e ... -x moreinfo ... .Ve .Sp See the \f(CW\*(C`\-x\*(C'\fR switch in SWISH-RUN for more information about output formats. .Sh "Administrative Headers Directives" .IX Subsection "Administrative Headers Directives" Swish-e stores configuration information in the header of the index file. This information can be retrieved while searching or by functions in the Swish-e C library. There are a number of fields available for your own use. None of these fields are required: .IP "IndexName *text*" 4 .IX Item "IndexName *text*" .PD 0 .IP "IndexDescription *text*" 4 .IX Item "IndexDescription *text*" .IP "IndexPointer *text*" 4 .IX Item "IndexPointer *text*" .IP "IndexAdmin *text*" 4 .IX Item "IndexAdmin *text*" .PD These variables specify information that goes into index files to help users and administrators. IndexName should be the name of your index, like a book title. IndexDescription is a short description of the index or a \s-1URL\s0 pointing to a more full description. IndexPointer should be a pointer to the original information, most likely a \s-1URL\s0. IndexAdmin should be the name of the index maintainer and can include name and email information. These values should not be more than 70 or so characters and should be contained in quotes. Note that the automatically generated date in index files is in D/M/Y and 24\-hour format. .Sp Examples: .Sp .Vb 4 \& IndexName "Linux Documentation" \& IndexDescription "This is an index of /usr/doc on our Linux machine." \& IndexPointer http://localhost/swish/linux/index.html \& IndexAdmin webmaster .Ve .Sh "Document Source Directives" .IX Subsection "Document Source Directives" These directives control \fIwhat\fR documents are indexed and \fIhow\fR they are accessed. See also Directives for the File Access method only and Directives for the \s-1HTTP\s0 Access Method Only for directives that are specific to those access methods. .IP "IndexDir [directories or files|URL|external program]" 4 .IX Item "IndexDir [directories or files|URL|external program]" IndexDir defines the source of the documents for Swish\-e. Swish-e currently supports three file access methods: \fBFile system\fR, \fB\s-1HTTP\s0\fR (also called \fBspidering\fR), and \fBprog\fR for reading files from an external program. .Sp The \f(CW\*(C`\-S\*(C'\fR command line argument is used to select the file access method. .Sp .Vb 3 \& swish-e -c swish.config -S fs - file system \& swish-e -c swish.config -S http - internal http spider \& swish-e -c swish.config -S prog - external program of any type .Ve .Sp For the \fBfs\fR method of access \fBIndexDir\fR is a space-separated list of files and directories to index. Use a forward slash as the path separator in \s-1MS\s0 Windows. .Sp For the \fBhttp\fR method the \fBIndexDir\fR setting is a list of space-separated URLs. .Sp For the \fBprog\fR method the \fBIndexDir\fR setting is a list of space-separated programs to run (which generate documents for swish to index). .Sp You may specify more than one \fBIndexDir\fR directive. .Sp Any sub-directories of any listed directory will also be indexed. .Sp Note: While \fIprocessing\fR directories, Swish-e will ignore any files or directories that begin with a dot (\*(L".\*(R"). You may index files or directories that begin with a dot by specifying their name with \&\f(CW\*(C`IndexDir\*(C'\fR or \f(CW\*(C`\-i\*(C'\fR. .Sp Examples: .Sp .Vb 2 \& # Index this directory an any subdirectories \& IndexDir /usr/local/home/http .Ve .Sp .Vb 2 \& # Index the docs directory in current directory \& IndexDir ./docs .Ve .Sp .Vb 4 \& # Index these files in the current directory \& IndexDir ./index.html ./page1.html ./page2.html \& # and index this directory, too \& IndexDir ../public_html .Ve .Sp For the \fB\s-1HTTP\s0\fR method of access specify the \s-1URL\s0's from which you want the spidering to begin. .Sp Example: .Sp .Vb 2 \& IndexDir http://www.my-site.com/index.html \& IndexDir http://localhost/index.html .Ve .Sp Obviously, using the \fB\s-1HTTP\s0\fR method to index is \fBmuch\fR slower than indexing local files. Be well aware that some sites do not appreciate spidering and may block your \s-1IP\s0 address. You may wish to contact the remote site before spidering their web site. More information about spidering can be found in Directives for the \s-1HTTP\s0 Access Method Only below. .Sp For the prog method of access \fBIndexDir\fR specifies the path to the program(s) to execute. The external program must correctly format the documents being passed back to Swish\-e. Examples of external programs are provided in the \fIprog-bin\fR directory. .Sp .Vb 1 \& IndexDir ./myprogram.pl .Ve .Sp See prog for details. .Sp Note: Not all directives work with all methods. .IP "NoContents *list of file suffixes*" 4 .IX Item "NoContents *list of file suffixes*" Files with these suffixes will \fBnot\fR have their contents indexed, but will have their path name (file name) indexed instead. .Sp If the file's type is \s-1HTML\s0 or \s-1HTML2\s0 (as set by \f(CW\*(C`IndexContents\*(C'\fR or \&\f(CW\*(C`DefaultContents\*(C'\fR) then the file will be parsed for a \s-1HTML\s0 title and that title will be indexed. Note that you must set the file's type with \&\f(CW\*(C`IndexContents\*(C'\fR or \f(CW\*(C`DefaultContents\*(C'\fR: \&\f(CW\*(C`.html\*(C'\fR and \f(CW\*(C`.htm\*(C'\fR are \s-1NOT\s0 type \s-1HTML\s0 by default. For example: .Sp .Vb 1 \& IndexContents HTML* .htm .html .Ve .Sp If a title is found, it will still be checked for \f(CW\*(C`FileRules title\*(C'\fR, and the file will be skipped if a match is found. See \f(CW\*(C`FileRules\*(C'\fR. .Sp If the file's type is not \s-1HTML\s0, or it is \s-1HTML\s0 and no title is found, then the file's path will be indexed. .Sp For example, this will allow searching by image file name. .Sp .Vb 1 \& NoContents .gif .xbm .au .mov .mpg .pdf .ps .Ve .Sp Note: Using this directive will \fBnot\fR cause files with those suffixes to be indexed. That is, if you use \f(CW\*(C`IndexOnly\*(C'\fR to limit the types of files that are indexed, then you must specify in \f(CW\*(C`IndexOnly\*(C'\fR the same suffixes listed in \f(CW\*(C`NoContents\*(C'\fR. .Sp This does \fBnot\fR work: .Sp .Vb 3 \& # Wrong! \& IndexOnly .htm .html \& NoContents .gif .xbm .au .mov .mpg .pdf .ps .Ve .Sp A \f(CW\*(C`\-S prog\*(C'\fR program may set the \f(CW\*(C`No\-Contents:\*(C'\fR header to enable this feature for a specific document (although it would be smarter for the \f(CW\*(C`\-S prog\*(C'\fR program to simply only send the pathname or title to be indexed. .IP "ReplaceRules [replace|remove|prepend|append|regex]" 4 .IX Item "ReplaceRules [replace|remove|prepend|append|regex]" ReplaceRules allows you to make changes to file pathnames before they're indexed. These changed file names or URLs will be returned in search results. .Sp For example, you may index your files locally (with the File system indexing method), yet return a \s-1URL\s0 in search results. This directive can be used to map the file names to their respective URLs on your web server. .Sp There are five operations you can specify: \fBreplace\fR, \fBappend\fR, \&\fBremove\fR, \fBprepend\fR, and \fBregex\fR They will parse the pathname in the order you've typed these commands. .Sp This directive uses C library regex.h regular expressions. .Sp .Vb 5 \& replace "the string you want replaced" "what to change it to" \& remove "a string to remove" \& prepend "a string to add before the result" \& append "a string to add after the result" \& regex "/search string/replace string/options" .Ve .Sp Remember, quotes are needed if an expression contains white space, and backslashes have special meaning. .Sp Regex is an Extended Regular Expression. The first character found is the delimiter (but it's not smart enough to use matched chars such as [], (), and {}). .Sp The \fBreplace\fR string may use substitution variables: .Sp .Vb 4 \& $0 the entire matched (sub)string \& $1-$9 returns patterns captured in "(" ")" pairs \& $` the string before the matched pattern \& $' the string after the matched pattern .Ve .Sp The \fBoptions\fR change the behavior of expression: .Sp .Vb 2 \& i ignore the case when matching \& g repeat the substitution for the entire pattern .Ve .Sp Examples: .Sp .Vb 2 \& ReplaceRules replace testdir/ anotherdir/ \& ReplaceRules replace [a-z_0-9]*_m.*\e.html index.html .Ve .Sp .Vb 1 \& ReplaceRules remove testdir/ .Ve .Sp .Vb 2 \& ReplaceRules prepend http://localhost/ \& ReplaceRules append .html .Ve .Sp .Vb 5 \& ReplaceRules regex !^/web/(.+)/!http://$1.domain.com/! \& replaces a file path: \& /web/search/foo/index.html \& with \& http://search.domain.com/foo/index.html .Ve .Sp .Vb 2 \& ReplaceRules regex #^#http://localhost/www# \& ReplaceRules prepend http://localhost/www (same thing) .Ve .Sp .Vb 3 \& # Remove all extensions from C source files \& ReplaceRules remove .c # ERROR! That "." is *any char* \& ReplaceRules remove \e.c # much better... .Ve .Sp .Vb 2 \& ReplaceRules remove "\e\e.c" # if in quotes you need double-backslash! \& ReplaceRules remove "\e.c" # ERROR! "\e." -> "." and is *any char* .Ve .IP "IndexContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*] *file extensions*" 4 .IX Item "IndexContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*] *file extensions*" The \f(CW\*(C`IndexContents\*(C'\fR directive assigns one of Swish\-e's document parsers to a document, based on the its extension. Swish-e currently knows how to parse \s-1TXT\s0, \s-1HTML\s0, and \s-1XML\s0 documents. .Sp The \s-1XML2\s0, \s-1HTML2\s0, and \s-1TXT2\s0 parsers are currently only available when Swish-e is configured to use libxml2. .Sp You may use XML*, HTML*, and TXT* to select the parser automatically. If libxml2 is installed then it will be used to parse the content. Otherwise, Swish\-e's internal parsers will be used. .Sp Documents that are not assigned a parser with \f(CW\*(C`IndexContents\*(C'\fR will, by default, use the \s-1HTML2\s0 parser if libxml2 is installed, otherwise will use Swish\-e's internal \s-1HTML\s0 parser. The \f(CW\*(C`DefaultContents\*(C'\fR directive may be used to assign a parser to documents that do not match a file extension defined with the \f(CW\*(C`IndexContents\*(C'\fR directive. .Sp Example: .Sp .Vb 3 \& IndexContents HTML* .htm .html .shtml \& IndexContents TXT* .txt .log .text \& IndexContents XML* .xml .Ve .Sp HTML* is the default type for all files, unless otherwise specified (and this default can be changed by the \fBDefaultContents\fR directive. Swish-e parses titles from \s-1HTML\s0 files, if available, and keeps track of the context of the text for context searching (see \f(CW\*(C`\-t\*(C'\fR in SWISH-RUN). .Sp If using filters (with the \f(CW\*(C`FileFilter\*(C'\fR directive) to convert documents you should include those extensions, too. For example, if using a filter to convert .pdf to .html, you need to tell Swish-e that .pdf should be indexed by the internal \s-1HTML\s0 parser: .Sp .Vb 2 \& FileFilter .pdf pdf2html \& IndexContent HTML .pdf .Ve .Sp See also Document Filter Directives. .Sp \&\fBNote:\fR Some of this may be changed in the future to use content-types instead of file extensions. See \s-1SWISH\-3\s0.0 .IP "DefaultContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*]" 4 .IX Item "DefaultContents [TXT|HTML|XML|TXT2|HTML2|XML2|TXT*|HTML*|XML*]" This sets the default parser for documents that are not specified in \&\fBIndexContents\fR. If not specified the default is \s-1HTML\s0. .Sp The \s-1XML2\s0, \s-1HTML2\s0, and \s-1TXT2\s0 parsers are currently only available when Swish-e is configured to use libxml2. .Sp You may use XML*, HTML*, and TXT* to select the parser automatically. If libxml2 is installed then it will be used to parse the content. Otherwise, Swish\-e's internal parsers will be used. .Sp Example: .Sp .Vb 1 \& DefaultContents HTML .Ve .Sp The \f(CW\*(C`DefaultContents\*(C'\fR directive \fIshould\fR be used when spidering, as \s-1HTML\s0 files may be returned without a file extension (such as when requesting a directory and the default index.html is returned). .IP "FileInfoCompression [yes|NO]" 4 .IX Item "FileInfoCompression [yes|NO]" ** This directive is currently not supported ** .Sp Setting \fBFileInfoCompression\fR to \f(CW\*(C`yes\*(C'\fR will compress the index file to save disk space. This may result in longer indexing times. The default is \f(CW\*(C`no\*(C'\fR. .Sp Also see the \f(CW\*(C`\-e\*(C'\fR switch in SWISH-RUN for saving \s-1RAM\s0 during indexing. .Sh "Document Contents Directives" .IX Subsection "Document Contents Directives" These directives control what information is extracted from your source documents, and how that information is made available during searching. .IP "ConvertHTMLEntities [YES|no]" 4 .IX Item "ConvertHTMLEntities [YES|no]" \&\s-1ASCII\s0 \fIentities\fR can be converted automatically while indexing documents of type \s-1HTML\s0 (not for \s-1HTML2\s0). For performance reasons you may wish to set this to \f(CW\*(C`no\*(C'\fR if your documents do not contain \s-1HTML\s0 entities. The default is \f(CW\*(C`yes\*(C'\fR. .Sp If \f(CW\*(C`ConvertHTMLEntities\*(C'\fR is set \f(CW\*(C`no\*(C'\fR the entities will be indexed without conversion. .Sp \&\fB\s-1NOTE:\s0\fR Entities within \s-1XML\s0 files and files parsed with libxml2 (\s-1HTML2\s0) are converted regardless of this setting. .IP "MetaNames *list of names*" 4 .IX Item "MetaNames *list of names*" \&\s-1META\s0 names are a way to define \*(L"fields\*(R" in your \s-1XML\s0 and \s-1HTML\s0 documents. You can use the \s-1META\s0 names in your queries to limit the search to just the words contained in that \s-1META\s0 name of your document. For example, you might have a \s-1META\s0 tagged field in your documents called \f(CW\*(C`subjects\*(C'\fR and then you can search your documents for the word \*(L"foo\*(R" but only return documents where \*(L"foo\*(R" is within the \f(CW\*(C`subjects\*(C'\fR \s-1META\s0 tag. .Sp .Vb 1 \& swish-e -w subjects=foo .Ve .Sp (See also the \f(CW\*(C`\-t\*(C'\fR switch in SWISH-RUN for information about \fIcontext\fR searching in \s-1HTML\s0 documents.) .Sp The \fBMetaNames\fR directive is a space separated list. For example: .Sp .Vb 1 \& MetaNames meta1 meta2 keywords subjects .Ve .Sp You may also use UndefinedMetaTags to specify automatic extraction of meta names from your \s-1HTML\s0 and \s->1XML\s0 documents, and also to ignore indexing content of meta tags. .Sp \&\s-1META\s0 tags can have two formats in your \fB\s-1HTML\s0\fR source documents: .Sp .Vb 1 \& .Ve .Sp and (if using the HTML2/libxml2 parser) .Sp .Vb 3 \& \& some content \& .Ve .Sp But this second version is invalid \s-1HTML\s0, and will generate a warning if ParserWarningLevel is set (libxml2 only). .Sp And in \fB\s-1XML\s0\fR documents, use the format: .Sp .Vb 3 \& \& Some Content \& .Ve .Sp Then you can limit your search to just \s-1META\s0 \fBmeta1\fR like this: .Sp .Vb 1 \& swish-e -w 'meta1=(apples or oranges)' .Ve .Sp You may nest the \s-1XML\s0 and the start/end tag versions: .Sp .Vb 8 \& \& \& some content \& \& \& some other content \& \& .Ve .Sp Then you can search in both tag2 and tag2 with: .Sp .Vb 1 \& swish-e -w 'keywords=(query words)' .Ve .Sp Swish-e indexes all text as some metaname. The default is \&\f(CW\*(C`swishdefault\*(C'\fR, so these two queries are the same: .Sp .Vb 2 \& swish-e -w foo \& swish-e -w swishdefault=foo .Ve .Sp When indexing \s-1HTML\s0 Swish-e indexes the \s-1HTML\s0 title as default text, so when searching Swish-e will find matches in both the \s-1HTML\s0 body and the \&\s-1HTML\s0 title. Swish also, by default, indexes content of meta tags. So: .Sp .Vb 1 \& swish-e -w foo .Ve .Sp will find \*(L"foo\*(R" in the body, the title, or any meta tags. .Sp Currently, there's no way to prevent Swish-e from indexing the title contents along with the body contents, but see UndefinedMetaTags for how to control the indexing of meta tags. .Sp If you would like to search just the title text, you may use: .Sp .Vb 1 \& MetaNames swishtitle .Ve .Sp This will index the title text separately under the built-in swish internal meta name \*(L"swishtitle\*(R". You may then search like .Sp .Vb 2 \& swish-e -w foo -- search for "foo" in title, body (and undefined meta tags) \& swish-e -w swishtitle=foo -- search for "foo" in title only .Ve .Sp In addition to swishtitle, you can limit searches to documents' path with: .Sp .Vb 1 \& MetaNames swishdocpath .Ve .Sp Then to search for \*(L"foo\*(R" but also limit searches to documents that include \&\*(L"manual\*(R" or \*(L"tutorial\*(R" in their path: .Sp .Vb 1 \& swish-e -w foo swishdocpath=(manual or tutorial) .Ve .Sp See also ExtractPath. .IP "MetaNameAlias *meta name* *list of aliases*" 4 .IX Item "MetaNameAlias *meta name* *list of aliases*" MetaNameAlias assigns aliases for a meta name. For example, if your documents contain meta tags \*(L"description\*(R", \*(L"summary\*(R", and \*(L"overview\*(R" that all give a summary of your documents you could do this: .Sp .Vb 2 \& MetaNames summary \& MetaNameAlias summary description overview .Ve .Sp Then all three tags will get indexed as meta tag \*(L"summary\*(R". You can then search all the fields as: .Sp .Vb 1 \& -w summary=foo .Ve .Sp The Alias work at search time, too. So these will also limit the search to the \*(L"summary\*(R" meta name. .Sp .Vb 2 \& -w description=foo \& -w overview=foo .Ve .IP "MetaNamesRank integer *list of meta names*" 4 .IX Item "MetaNamesRank integer *list of meta names*" .Vb 1 \& * Not implemented yet * .Ve .Sp You can assign a bias to metanames that will affect how ranking is calculated. The range of values is from \-10 to +10, with zero being no bias. .Sp .Vb 4 \& MetaNamesRank 4 subject \& MetaNamesRank 3 swishdefault \& MetaNamesRank 2 author publisher \& MetaNamesRank -5 wrongwords .Ve .Sp This feature is not implemented yet .IP "HTMLLinksMetaName *metaname*" 4 .IX Item "HTMLLinksMetaName *metaname*" Allows indexing of \s-1HTML\s0 links. Normally, \s-1HTML\s0 links (href tags) are not indexed by Swish\-e. This directive defines a metaname, and links will be indexed under this meta name. .Sp Example: .Sp .Vb 1 \& HTMLLinksMetaName links .Ve .Sp Now, to limit searches to files with a link to \*(L"home.html\*(R" do this: .Sp .Vb 1 \& -w links='"home.html"' .Ve .Sp The double quotes force a phrase search. .Sp To make Swish-e index links as normal text, you may use: .Sp .Vb 1 \& HTMLLinksMetaName swishdefault .Ve .Sp This feature is only available with the libxml2 \s-1HTML\s0 parser. .IP "ImageLinksMetaName *metaname*" 4 .IX Item "ImageLinksMetaName *metaname*" Allows indexing of image links under a metaname. Normally, image URLs are not indexed. .Sp Example: .Sp .Vb 1 \& ImagesLinksMetaName images .Ve .Sp Now, if you would like to find pages that include a nice image of a beach: .Sp .Vb 1 \& -w images='beach' .Ve .Sp To make Swish-e index links as normal text, you may use: .Sp .Vb 1 \& ImageLinksMetaName swishdefault .Ve .Sp This feature is only available with the libxml2 \s-1HTML\s0 parser. .IP "IndexAltTagMetaName *tagname*|as\-text" 4 .IX Item "IndexAltTagMetaName *tagname*|as-text" Allows indexing of images <\s-1IMG\s0> \s-1ALT\s0 tag text. Specify either a tag name which will be used as a metaname, or the special text \*(L"as\-text\*(R" which says to index the \s-1ALT\s0 text as if it were plain text at the current location. .Sp For example, by specifying a tag name: .Sp .Vb 1 \& IndexAltTagMetaName bar .Ve .Sp would make this markup: .Sp .Vb 3 \& \& Alt text here \& .Ve .Sp appear like .Sp .Vb 3 \& \& Alt text here \& .Ve .Sp Then the normal rules (\f(CW\*(C`MetaNames\*(C'\fR and \f(CW\*(C`PropertyNames\*(C'\fR) apply to how that text is indexed. .Sp If you use the special tag \*(L"as\-text\*(R" then .Sp .Vb 3 \& \& Alt text here \& .Ve .Sp simply becomes .Sp .Vb 3 \& \& Alt text here \& .Ve .Sp This feature is only available when using the libxml2 parser (\s-1HTML2\s0 and \s-1XML2\s0). .IP "AbsoluteLinks [yes|NO]" 4 .IX Item "AbsoluteLinks [yes|NO]" If this is set true then Swish-e will attempt to convert relative URIs extracted from \s-1HTML\s0 documents for use with \f(CW\*(C`HTMLLinksMetaName\*(C'\fR and \&\f(CW\*(C`ImageLinksMetaName\*(C'\fR into absolute URIs. Swish-e will use any <\s-1BASE\s0> tag found in the document, otherwise it will use the file's pathname. The pathname used will be the pathname *after* \f(CW\*(C`ReplaceRules\*(C'\fR has been applied to the document's pathname. .Sp For example, say you wish to index image links under the metaname \&\*(L"images\*(R". .Sp .Vb 1 \& ImageLinksMetaName images .Ve .Sp If an image is located in http://localhost/vacations/france/index.html and \f(CW\*(C`AbsoluteLinks\*(C'\fR is set to no, then a image within that document: .Sp .Vb 1 \& .Ve .Sp will only index \*(L"beach.jpeg\*(R". .Sp But, if you want more detail when searching, you can enable \&\f(CW\*(C`AbsoluteLinks\*(C'\fR and Swish-e will index \&\*(L"http://localhost/vacations/france/beach.jpeg\*(R". You can then look for images of beaches, but only in France: .Sp .Vb 1 \& -w images=(beach and france) .Ve .Sp This also means you can search for any images within France: .Sp .Vb 1 \& -w images=(france) .Ve .Sp This feature is only available with the libxml2 \s-1HTML\s0 parser. .IP "UndefinedMetaTags [error|ignore|INDEX|auto]" 4 .IX Item "UndefinedMetaTags [error|ignore|INDEX|auto]" This directive defines the behavior of Swish-e during indexing when a meta name is found but is \fBnot\fR listed in \fBMetaNames\fR. There are four choices: .RS 4 .IP "error" 2 .IX Item "error" If a meta name is found that is not listed in \fBMetaNames\fR then indexing will be halted and an error reported. .IP "ignore" 2 .IX Item "ignore" The contents of the meta tag are ignored and \fBnot\fR indexed unless a metaname has been defined with the \f(CW\*(C`MetaNames\*(C'\fR directive. .IP "index" 2 .IX Item "index" The contents of the meta tag are indexed, but placed in the main index unless there's an enclosing metatag already in force. This is the default. .IP "auto" 2 .IX Item "auto" This method create meta tags automatically for \s-1HTML\s0 meta names and \s-1XML\s0 elements. Using this is the same as specifying all the meta names explicitly in a \fBMetaNames\fR directive. .RE .RS 4 .RE .IP "UndefinedXMLAttributes [DISABLE|error|index|auto]" 4 .IX Item "UndefinedXMLAttributes [DISABLE|error|index|auto]" This is similar to \f(CW\*(C`UndefinedMetaTags\*(C'\fR, but only applies to \s-1XML\s0 documents (parsed with libxml2). This allows indexing of attribute content, and provides a way to index the content under a metaname. For example, \f(CW\*(C`UndefinedXMLAttributes\*(C'\fR can make .Sp .Vb 3 \& \& John Doe \& .Ve .Sp look like the following to swish: .Sp .Vb 6 \& \& \& 23 \& \& John Doe \& .Ve .Sp What happens to the text \*(L"23\*(R" will depend on the setting of \f(CW\*(C`UndefinedXMLAttributes\*(C'\fR: .RS 4 .IP "disable" 2 .IX Item "disable" \&\s-1XML\s0 attributes are not parsed and not indexed. This is the default. .IP "error" 2 .IX Item "error" If the concatenated meta name (e.g. person.age) is not listed in \&\fBMetaNames\fR then indexing will be halted and an error reported. .IP "ignore" 2 .IX Item "ignore" The contents of the meta tag are ignored and \fBnot\fR indexed unless a metaname has been defined with the \f(CW\*(C`MetaNames\*(C'\fR directive. .IP "index" 2 .IX Item "index" The contents of the meta tag are indexed, but placed in the main index unless there's an enclosing metatag already in force. .IP "auto" 2 .IX Item "auto" This method will create meta tags from the combined element and attributes (and \s-1XML\s0 Class name) This options should be used with caution as it can generate a lot of metaname entries. .Sp See also the example below \f(CW\*(C`XMLClassAttribues\*(C'\fR. .RE .RS 4 .RE .IP "XMLClassAttributes *list of \s-1XML\s0 attribute names*" 4 .IX Item "XMLClassAttributes *list of XML attribute names*" Combines an \s-1XML\s0 class name with the element name to make up a metaname. For example: .Sp .Vb 1 \& XMLClassAttributes class .Ve .Sp .Vb 6 \& \& John \& \& \& Doe \& .Ve .Sp Will appear to Swish-e as: .Sp .Vb 10 \& \& \& John \& \& \& \& \& Doe \& \& .Ve .Sp How the data is indexed depends on \f(CW\*(C`MetaNames\*(C'\fR and \f(CW\*(C`UndefinedMetaTags\*(C'\fR. .Sp Here's an example using the following configuration which combines the two directives \f(CW\*(C`XMLClassAttributes\*(C'\fR and \f(CW\*(C`UndefinedXMLAttributes\*(C'\fR. .Sp .Vb 4 \& XMLClassAttributes class \& UndefinedMetaTags auto \& UndefinedXMLAttributes auto \& IndexContents XML2 .xml .Ve .Sp The source \s-1XML\s0 file looks like: .Sp .Vb 6 \& \& \& John \& \& Bill \& .Ve .Sp Swish-e parses as: .Sp .Vb 2 \& ./swish-e -c 2 -i 1.xml -T parsed_tags parsed_text -v 0 \& Indexing Data Source: "File-System" .Ve .Sp .Vb 1 \& (MetaName) .Ve .Sp .Vb 10 \& (MetaName) \& (MetaName) \& (MetaName) \& 555-1212 \& \& (MetaName) \& 102 \& \& John \& .Ve .Sp .Vb 6 \& (MetaName) \& (MetaName) \& howdy \& \& Bill \& .Ve .Sp .Vb 2 \& \& Indexing done! .Ve .Sp One thing to note is that the first block finds a class name \&\*(L"student\*(R" so all metanames that are created from attributes use the combined name \*(L"person.student\*(R". The second block doesn't contain a \*(L"class\*(R" so, the attribute name is combined directly with the element name (e.g. \*(L"person.greeting\*(R"). .IP "ExtractPath *metaname* [replace|remove|prepend|append|regex]" 4 .IX Item "ExtractPath *metaname* [replace|remove|prepend|append|regex]" This directive can be used to index extracted parts of a document's path. A common use would be to limit searches to specific areas of your file tree. .Sp The extracted string will be indexed under the specified meta name. .Sp See \f(CW\*(C`ReplaceRules\*(C'\fR for a description of the various pattern replacement methods, but you will use the \fIregex\fR method. .Sp For example, say your file system (or web tree) was organized into departments: .Sp .Vb 3 \& /web/sales/foo... \& /web/parts/foo... \& /web/accounting/foo... .Ve .Sp And you wanted a way to limit searches to just documents under \*(L"sales\*(R". .Sp .Vb 1 \& ExtractPath department regex !^/web/([^/]+)/.*$!$1! .Ve .Sp Which says, extract out the department name (as substring \f(CW$1\fR) and index it as meta name \f(CW\*(C`department\*(C'\fR. Then to limit a search to the sales department: .Sp .Vb 1 \& swish-e -w foo AND department=sales .Ve .Sp Note that the \f(CW\*(C`regex\*(C'\fR method uses a substitution pattern, so to index only a sub-string match the \fIentire\fR document path in the regular expression, as shown above. Otherwise any part that is not matched will end up in the substitution pattern. .Sp See the \f(CW\*(C`ExtractPathDefault\*(C'\fR option for a way to set a value if not patterns match. .Sp Although unlikely, you may use more than one \f(CW\*(C`ExtractPath\*(C'\fR directive. More than one directive of the \fIsame\fR meta name will operate successively (in order listed in the configuration file) on the path. This allows you to use regular expressions on the results of the previous pattern substitution (as if piping the output from one expression to the patter of the next). .Sp .Vb 2 \& ExtractPath foo regex !^(...).+$!$1! \& ExtractPath foo regex !^.+(.)$!$1! .Ve .Sp So, the third letter is indexed as meta name \*(L"foo\*(R" if both patterns match. .Sp .Vb 2 \& ExtractPath foo regex !^X(...).+$!$1! \& ExtractPath foo regex !^.+(.)$!$1! .Ve .Sp Now (not the \*(L"X\*(R"), if the first pattern doesn't match, the last character of the path name is indexed. You must be clear on this behavior if you are using more than one \f(CW\*(C`ExtractPath\*(C'\fR directive with the same metaname. .Sp The document path operated on is the real path swish used to access the document. That is, the \f(CW\*(C`ReplaceRules\*(C'\fR directive has no effect on the path used with \f(CW\*(C`ExtractPath\*(C'\fR. .Sp The full path is used for each meta name if more than one \f(CW\*(C`ExtractPath\*(C'\fR directive is used. That is, changes to the path used in \f(CW\*(C`ExtractPath foo\*(C'\fR do not affect the path used by \f(CW\*(C`ExtractPath bar\*(C'\fR. .IP "ExtractPathDefault *metaname* default_value" 4 .IX Item "ExtractPathDefault *metaname* default_value" This can be used with \f(CW\*(C`ExtractPath\*(C'\fR to set a default string to index under the given metaname if none of the \f(CW\*(C`ExtractPath\*(C'\fR patterns match. .Sp For example, say your want to index each document with a metaname \&\*(L"department\*(R" based on the following path examples: .Sp .Vb 3 \& /web/sales/foo... \& /web/parts>/foo... \& /web/accounting/foo... .Ve .Sp But you are also indexing documents that do not follow that pattern and you want to search those separately, too. .Sp .Vb 2 \& ExtractPath department regex !^/web/([^/]+)/.*$!$1! \& ExtractPathDefault department other .Ve .Sp Now, you may search like this: .Sp .Vb 4 \& -w foo department=(sales) - limit searches to the sales documents \& -w foo department=(parts) - limit searches to the parts documents \& -w foo department=(accounting) - limit searches to the accounting documents \& -w foo department=(other) - everything but sales, parts, and accounting. .Ve .Sp This basically is a shortcut for: .Sp .Vb 1 \& -w foo not department=(sales or parts or accounting) .Ve .Sp but you don't need to keep track of what was extracted. .IP "PropertyNames *list of meta names*" 4 .IX Item "PropertyNames *list of meta names*" .PD 0 .IP "PropertyNamesCompareCase *list of meta names*" 4 .IX Item "PropertyNamesCompareCase *list of meta names*" .IP "PropertyNamesIgnoreCase *list of meta names*" 4 .IX Item "PropertyNamesIgnoreCase *list of meta names*" .PD Swish-e allows you to specify certain \s-1META\s0 tags that can be used as \&\fBdocument properties\fR. The contents of any \s-1META\s0 tag that has been identified as a document property can be returned as part of the search results along with the rank, file name, title, and document size (see the \f(CW\*(C`\-p\*(C'\fR and \f(CW\*(C`\-x\*(C'\fR switches in SWISH-RUN). .Sp Properties are useful for returning additional data from documents in search results \*(-- this saves the effort of reading and parsing the source files while reading Swish-e search results, and is especially useful when the source documents are no longer available or slow to access (e.g. over http). .Sp Another feature of properties is that Swish-e can use the PropertyNames for sorting the search results (see the \f(CW\*(C`\-s\*(C'\fR switch). .Sp .Vb 1 \& PropertyNames author subjects .Ve .Sp Two variations are available. \f(CW\*(C`PropertyNamesCompareCase\*(C'\fR and \&\f(CW\*(C`PropertyNamesIgnoreCase\*(C'\fR. These tell Swish-e to either ignore or compare case when sorting results. The default for \f(CW\*(C`PropertyNames\*(C'\fR is to ignore the case. .Sp .Vb 2 \& PropertyNamesIgnoreCase subject \& PropertyNamesCompareCase keyword .Ve .Sp The defaults for \*(L"internal\*(R" properties are: .Sp .Vb 3 \& swishtitle -- ignore the case \& swishdocpath -- compare case \& swishdescription -- compare case .Ve .Sp These can be overridden with \f(CW\*(C`PropertyNamesCompareCase\*(C'\fR and \&\f(CW\*(C`PropertyNamesIgnoreCase\*(C'\fR. .Sp .Vb 1 \& PropertyNamesCompareCase swishtitle .Ve .Sp Use of PropertyNames will increase the size of your index files, sometimes significantly. Properties will be compressed if Swish-e is compiled with zlib as described in the \s-1INSTALL\s0 manual page. .Sp If Swish-e finds more than one property of the same name in a document the property's contents will be concatinated for strings, and a warning issues for numeric (or date) properties. .IP "PropertyNamesNoStripChars" 4 .IX Item "PropertyNamesNoStripChars" PropertyNamesNoStripChars specifies that the listed properties should not have strings of low \s-1ASCII\s0 characters replaced with a space character. Properties will be stored as found in the document. .Sp When printing properties with the swish-e binary newlines are replaced with a space character. Use the swish-e library (or \s-1SWISH::API\s0 perl module) to fetch properties without newlines replaced. .IP "PropertyNamesNumeric" 4 .IX Item "PropertyNamesNumeric" This directive is similar to \f(CW\*(C`PropertyNames\*(C'\fR, but it flags the property as being a string of digits (integer value) that will be stored as binary data instead of a string. This allows sorting with \f(CW\*(C`\-s\*(C'\fR and limiting with \f(CW\*(C`\-L\*(C'\fR to sort and limit the property correctly. .Sp Swish-e uses \f(CWstrtoul(3)\fR to convert the string into an unsigned long integer. Therefore, only positive integers can be stored. .Sp Future versions of Swish-e may be able to store different property types (such as negative integers and real numbers). This directive may change in future releases of Swish. .IP "PropertyNamesDate" 4 .IX Item "PropertyNamesDate" This directive is exactly like \f(CW\*(C`PropertyNamesNumeric\*(C'\fR, but it also flags the number as a machine timestamp (seconds since Epoch), and will print a formatted date when returning this property. See \f(CW\*(C`\-x\*(C'\fR in SWISH-RUN. .Sp Swish-e will not parse dates when indexing; you must use a timestamp. .IP "PropertyNameAlias *property name* *list of aliases*" 4 .IX Item "PropertyNameAlias *property name* *list of aliases*" This allows aliases for a property name. For example, if you are indexing \&\s-1HTML\s0 files, plus \s-1XML\s0 files that are written in English, German, and Spanish and thus use the tags \*(L"title\*(R", \*(L"titel\*(R", and \*(L"ttulo\*(R" you can use: .Sp .Vb 1 \& PropertyNameAlias swishtitle title titel ttulo titulo .Ve .Sp Note that \*(L"swishtitle\*(R" is the built-in property used to store the title of a document, and therefore you do not need to specify it as a PropertyName before use. .IP "PropertyNamesMaxLength integer *list of meta names*" 4 .IX Item "PropertyNamesMaxLength integer *list of meta names*" This option will set the max length of the text stored in a property. You must specify a number between 0 and the max integer size on your platform, and a list of properties. The properties specified must not be aliases. .Sp If any of the property names do not exist they will be created (e.g. you do not need to define the property with PropertyNames first). .Sp In general, this feature will only be useful when parsing \s-1HTML\s0 or \s-1XML\s0 with the libxml2 parser. .Sp For example: .Sp .Vb 2 \& PropertyNamesMaxLength 1000 swishdescription \& PropertyNameAlias swishdescription body .Ve .Sp Is somewhat like .Sp .Vb 4 \& StoreDescription HTML 1000 \& StoreDescription XML 1000 \& StoreDescription HTML2 1000 \& StoreDescription XML2 1000 .Ve .Sp but StoreDescription allows setting the tag for each parser type. .Sp .Vb 2 \& PropertyNamesMaxLength 1000 headings \& PropertyNameAlias headings h1 h2 h3 h4 .Ve .Sp collects all the heading text into a single property called \*(L"headings\*(R", not to exceed 1000 characters. .IP "PropertyNamesSortKeyLength integer *list of meta names*" 4 .IX Item "PropertyNamesSortKeyLength integer *list of meta names*" Sets the length of the string used when sorting. The default is 100 characters. The \-T metanames debugging option will list the current values for an index. .Sp This setting is used when sorting during indexing, and perhaps when sorting while searching. It also effects the order when limiting to a range of values with the \-L option. .IP "PreSortedIndex *list of property names*" 4 .IX Item "PreSortedIndex *list of property names*" By default Swish-e generates presorted tables while indexing for each property name. This allows faster sorting when generating results. On large document collections this presorting may add to the indexing time, and also adds to the total size of the index. This directive can be used to customize exactly which properties will be presorted. .Sp If \f(CW\*(C`PreSortedIndex\*(C'\fR it is \fInot\fR present in the config file (default action), all the properties will be presorted at indexing time. If it is present without any parameter, no properties will be presorted. Otherwise, only the property names specified will be presorted. .Sp For example, if you only wish to sort results by a property called \&\f(CW\*(C`title\*(C'\fR: .Sp .Vb 2 \& PropertyNames title age time \& PreSortedIndex title .Ve .IP "StoreDescription [\s-1XML\s0 size|HTML size|TXT size]" 4 .IX Item "StoreDescription [XML size|HTML size|TXT size]" \&\fBStoreDescription\fR allows you to store a document description in the index file. This description can be returned in your search results when the \f(CW\*(C`\-x\*(C'\fR switch is used to include the \fIswishdescription\fR for extended results, or by using \f(CW\*(C`\-p swishdescription\*(C'\fR. .Sp The document type (\s-1XML\s0, \s-1HTML\s0 and \s-1TXT\s0) must match the document type currently being indexed as set by \f(CW\*(C`IndexContents\*(C'\fR or \f(CW\*(C`DefaultContents\*(C'\fR. See those directives for possible values. A common problem is using \f(CW\*(C`StoreDescription\*(C'\fR yet not setting the document's type with \&\f(CW\*(C`IndexContents\*(C'\fR or \f(CW\*(C`DefaultContents\*(C'\fR. Another problem is different types: .Sp .Vb 2 \& IndexContents HTML2 .html \& StoreDescription HTML .Ve .Sp Then .html documents are assigned a type of \s-1HTML2\s0 (and parsed by the libxml2 parser), but the description will not be stored since it is type \s-1HTML\s0 instead of \s-1HTML2\s0. .Sp For text documents you specify the type \s-1TXT\s0 (or \s-1TXT2\s0 or TXT*) and the number of \fIcharacters\fR to capture. .Sp .Vb 1 \& StoreDescription TXT 20 .Ve .Sp The above stores only the first twenty characters from the text file in the Swish-e index file. .Sp For \s-1HTML\s0, and \s-1XML\s0 file types, specify the tag to use for the description, and optionally the number of characters to capture. If not specified will capture the entire contents of the tag. .Sp .Vb 2 \& StoreDescription HTML 20000 \& StoreDescription XML 40 .Ve .Sp Again, note that documents must be assigned a document type with \f(CW\*(C`IndexContents\*(C'\fR or \f(CW\*(C`DefaultContents\*(C'\fR to use this feature. .Sp Swish-e will compress the descriptions (or any other large property) if compiled to use zlib (see \s-1INSTALL\s0). This is recommended when using StoreDescription and a large number of documents. Compression of 30% to 50% is not uncommon with \s-1HTML\s0 files. .IP "PropCompressionLevel [0\-9]" 4 .IX Item "PropCompressionLevel [0-9]" This directive sets the compression level used when storing properties to disk. A setting of zero is no compression, and a setting of nine is the most compression. .Sp The default depends on the default setting compiled with zlib, but is typically six. .Sp This option is useful when using \f(CW\*(C`StoreDescription\*(C'\fR to store a large amount text in properties (or if using \f(CW\*(C`PropertyNames\*(C'\fR with large property sizes). .Sp Properties must be over a value defined in \fIconfig.h\fR (100 is the default) before compression will be attempted. Swish-e will never store the results of the compression if the compressed data is larger than the original data. .Sp This option is only available when Swish-e is compiled with zlib support. .IP "TruncateDocSize *number of characters*" 4 .IX Item "TruncateDocSize *number of characters*" TruncateDocSize limits the size of a document while indexing documents and/or using filters. This config directive truncates the numbers of read bytes of a document to the specified size. This means: if a document is larger, read only the specified numbers of bytes of the document. .Sp Example: .Sp .Vb 1 \& TruncateDocSize 10000000 .Ve .Sp The default is zero, which means read all data. .Sp Warning: If you use TruncateDocSize, use it with care! TruncateDocSize is a safety belt only, to limit e.g. filteroutput, when accessing databases, or to limit \*(L"runnaway\*(R" filters. Truncating doc input may destroy document structures for Swish-e (e.g. swish may miss closing tags for \s-1XML\s0 or \s-1HTML\s0 documents). .Sp TruncateDocSize does not currently work with the \f(CW\*(C`prog\*(C'\fR input source method. .IP "FuzzyIndexingMode NONE|Stemming|Soundex|Metaphone|DoubleMetaphone" 4 .IX Item "FuzzyIndexingMode NONE|Stemming|Soundex|Metaphone|DoubleMetaphone" Selects the type of index to create. Only one type of index may be created. .Sp It's a good idea to create both a normal index and a fuzzy index and allow your search interface select which index to use. Many people find the fuzzy searches to be too fuzzy. .Sp The available fuzzy indexing options can be displayed by running .Sp .Vb 1 \& swish-e -T LIST_FUZZY_MODES .Ve .Sp Available options include: .RS 4 .IP "None" 4 .IX Item "None" Words are stored in the index without any conversion. This is the default. .IP "Stemming_*" 4 .IX Item "Stemming_*" This options uses one of the installed Snowball stemmers (http://snowball.tartarus.org/). .Sp The installed stemmers can be viewed by running .Sp .Vb 1 \& swish-e -T LIST_FUZZY_MODES .Ve .Sp For example, to use the Spanish stemming module: .Sp .Vb 1 \& FuzzyIndexingMode Stemming_es .Ve .IP "Stem or Stemming_en" 4 .IX Item "Stem or Stemming_en" Selects the legacy Swish-e English stemmer. .Sp This is deprecated in favor of the Snowball English stemmers (Stemming_en1, Stemming_en2). Future versions of Swish-e will likely use the Stemming_en2 stemmer by default. .Sp Words are converted using the Porter stemming algorithm. .Sp From: http://www.tartarus.org/~martin/PorterStemmer/ .Sp .Vb 5 \& The Porter stemming algorithm (or Porter stemmer) is a \& process for removing the commoner morphological and inflexional \& endings from words in English. Its main use is as part of a \& term normalisation process that is usually done when setting up \& Information Retrieval systems. .Ve .Sp This will help a search for \*(L"running\*(R" to also find \*(L"run\*(R" and \*(L"runs\*(R", for example. .Sp The stemming function does not convert words to their root, rather programmatically removes endings on words in an attempt to make similar words with different endings stem to the same string of characters. It's not a perfect system, and searches on stemmed indexes often return curious results. For example, two entirely different words may stem to the same word. .Sp Stemming also can be confusing when used with a wildcard (truncation). For example, you might expect to find the word \*(L"running\*(R" by searching for \&\*(L"runn*\*(R". But this fails when using a stemmed index, as \*(L"running\*(R" stems to \&\*(L"run\*(R", yet searching for \*(L"runn*\*(R" looks for words that start with \*(L"runn\*(R". .IP "Soundex" 4 .IX Item "Soundex" Soundex was developed in the 1880s so records for people with similar sounding names could be found more readily. Soundex is a coded surname based on the way a surname sounds rather than spelling. Surnames that sound similar, like Smith and Smyth, are filed together under the same Soundex code. This is mostly useful for \s-1US\s0 English. .Sp Soundex should not be used to search for sound-alike words. Metaphone would be more appropriate for generic sound matching of words. Soundex should only be used where you need to search multiple documents for proper names which sound similar. This is primarily used for indexing genealogical records. This may be useful for indexing other collections of data consisting mostly of names. Many common name variations are matched by Soundex. The only notable exception is the first letter of the name. The first letter is not matched for sound. .IP "Metaphone and DoubleMetaphone" 4 .IX Item "Metaphone and DoubleMetaphone" Words are transformed into a short series of letters representing the sound of the word (in English). Metaphone algorithms are often used for looking up mis-spelled words in dictionary programs. .Sp From: http://aspell.sourceforge.net/metaphone/ .Sp .Vb 2 \& Lawrence Philips' Metaphone Algorithm is an algorithm which returns \& the rough approximation of how an English word sounds. .Ve .Sp The \f(CW\*(C`DoubleMetaphone\*(C'\fR mode will sometimes >generate two different metaphones for the same word. This is supposed to be useful when a word may be pronounced more than one way. .Sp A metaphone index should give results somewhere in between Soundex and Stemming. .RE .RS 4 .RE .IP "UseStemming [yes|NO]" 4 .IX Item "UseStemming [yes|NO]" Put yes to apply word stemming algorithm during indexing, else no. .Sp .Vb 2 \& UseStemming no \& UseStemming yes .Ve .Sp When UseStemming is set to \f(CW\*(C`yes\*(C'\fR every word is stemmed before placing it in to the index. .Sp This option is deprecated. It has been superceded by \f(CW\*(C`FuzzyIndexingMode\*(C'\fR. .IP "UseSoundex [yes|NO]" 4 .IX Item "UseSoundex [yes|NO]" When UseSoundex is set to \f(CW\*(C`yes\*(C'\fR every word is converted to a Soundex code before placing it in to the index. .Sp This option is deprecated. It has been superceded by \f(CW\*(C`FuzzyIndexingMode\*(C'\fR. .IP "IgnoreTotalWordCountWhenRanking [YES|no]" 4 .IX Item "IgnoreTotalWordCountWhenRanking [YES|no]" Put yes to ignore the total number of words in the file when calculating ranking. Often better with merges and small files. Default is yes. .Sp .Vb 1 \& IgnoreTotalWordCountWhenRanking no .Ve .Sp The default was changed from no to yes in version 2.2. .IP "MinWordLimit *integer*" 4 .IX Item "MinWordLimit *integer*" Set the minimum length of an word. Shorter words will not be indexed. The default is 1 (as defined in \fIsrc/config.h\fR). .Sp .Vb 1 \& MinWordLimit 5 .Ve .IP "MaxWordLimit *integer*" 4 .IX Item "MaxWordLimit *integer*" Set the maximum length of an indexable word. Every longer word will not be indexed. The Default is 40 (as defined in \fIsrc/config.h\fR). .IP "WordCharacters *string of characters*" 4 .IX Item "WordCharacters *string of characters*" .PD 0 .IP "IgnoreFirstChar *string of characters*" 4 .IX Item "IgnoreFirstChar *string of characters*" .IP "IgnoreLastChar *string of characters*" 4 .IX Item "IgnoreLastChar *string of characters*" .IP "BeginCharacters *string of characters*" 4 .IX Item "BeginCharacters *string of characters*" .IP "EndCharacter *string of characters*" 4 .IX Item "EndCharacter *string of characters*" .PD These settings define what a word consists of to the Swish-e indexing engine. Compiled in defaults are in \fIsrc/config.h\fR. .Sp When indexing Swish-e uses \fBWordCharacters\fR to split up the document into words. Words are defined by any string of non-blank characters that contain only the characters listed in WordCharacters. If a string of characters includes a character that is not in WordCharacters then the word will be spit into two or more separate words. .Sp For example: .Sp .Vb 1 \& WordCharacters abde .Ve .Sp Would turn \*(L"abcde\*(R" into two words \*(L"ab\*(R" and \*(L"de\*(R". .Sp Next, of these words, any characters defined in \fBIgnoreFirstChar\fR are stripped off the start of the word, and \fBIgnoreLastChar\fR characters are stripped off the end of the word. This allows, for example, periods within a word (www.slashdot.com), but not at the end of a word. Characters in IgnoreFirstChar and IgnoreLastChar must be in WordCharacters. .Sp Finally, the resulting words \s-1MUST\s0 begin with one of the characters listed in \fBBeginCharacters\fR and end with one of the characters listed in \&\fBEndCharacters\fR. BeginCharacters and EndCharacters must be a subset of the characters in WordCharacters. Often, WordCharacters, BeginCharacters and EndCharacters will all be the same. .Sp Note that the same process applies to the query while searching. .Sp Getting these settings correct will take careful consideration and practice. It's helpful to create an index of a single test file, and then look at the words that are placed in the index (see the \f(CW\*(C`\-v 4\*(C'\fR, \&\f(CW\*(C`\-D\*(C'\fR and \f(CW\*(C`\-k\*(C'\fR searching switches). .Sp Currently there is only support for eight-bit characters. .Sp Example: .Sp .Vb 5 \& WordCharacters .abcdefghijklmnopqrstuvwxyz \& BeginCharacters abcdefghijklmnopqrstuvwxyz \& EndCharacters abcdefghijklmnopqrstuvwxyz \& IgnoreFirstChar . \& IgnoreLastChar . .Ve .Sp So the string .Sp .Vb 1 \& Please visit http://www.example.com/path/to/file.html. .Ve .Sp will be indexed as the following words: .Sp .Vb 7 \& please \& visit \& http \& www.example.com \& path \& to \& file.html .Ve .Sp Which means that you can search for \f(CW\*(C`www.example.com\*(C'\fR as a single word, but searching for just \f(CW\*(C`example\*(C'\fR will not find the document. .Sp Note: when indexing \s-1HTML\s0 documents \s-1HTML\s0 entities are converted to their character equivalents before being processed with these directives. This is a change from previous versions of Swish-e where you were required to include the characters \f(CW\*(C`0123456789&#;\*(C'\fR to index entities. See also ConvertHTMLEntities .IP "Buzzwords [*list of buzzwords*|File: path]" 4 .IX Item "Buzzwords [*list of buzzwords*|File: path]" The Buzzwords option allows you to specify words that will be indexed regardless of WordCharacters, BeginCharacters, EndCharacters, stemming, soundex and many of the other checks done on words while indexing. .Sp Buzzwords are case insensitive. .Sp Buzzwords should be separated by spaces and may span multiple directives. If the special format \f(CW\*(C`File:filename\*(C'\fR is used then the Buzzwords will be read from an external file during indexing. .Sp Examples: .Sp .Vb 1 \& Buzzwords C++ TCP/IP .Ve .Sp .Vb 1 \& Buzzwords File: ./buzzwords.lst .Ve .Sp If a Buzzword contains search operator characters they must be backslashed when searching. For example: .Sp .Vb 1 \& Buzzwords C++ TCP/IP web=http .Ve .Sp .Vb 1 \& ./swish-e -w 'web\e=http' .Ve .Sp Buzzwords are found by splitting the text on whitespace, removing \&\f(CW\*(C`IgnoreFirstChar\*(C'\fR and \f(CW\*(C`IgnoreLastChar\*(C'\fR characters from the word, and then comparing with the list of \f(CW\*(C`Buzzwords\*(C'\fR. Therefore, if adding \f(CW\*(C`Buzzwords\*(C'\fR to an index you will probably want to define \&\f(CW\*(C`IgnoreFirstChar\*(C'\fR and \f(CW\*(C`IgnoreLastChar\*(C'\fR settings. .Sp Note: Buzzwords specific settings for \f(CW\*(C`IgnoreFirstChar\*(C'\fR and \&\f(CW\*(C`IgnoreLastChar\*(C'\fR may be used in the future. .IP "IgnoreWords [*list of stop words*|File: path]" 4 .IX Item "IgnoreWords [*list of stop words*|File: path]" The IgnoreWords option allows you to specify words to ignore, called \&\fIstopwords\fR. The default is to not use any stopwords. .Sp Words should be separated by spaces and may span multiple directives. If the special format \f(CW\*(C`File:filename\*(C'\fR is used then the stop words will be read from an external file during indexing. .Sp In previous versions of Swish-e you could use the directive .Sp .Vb 1 \& IgnoreWords swishdefault - obsolete! .Ve .Sp to include a default list of compiled in stopwords. This keyword is no longer supported. .Sp Examples: .Sp .Vb 1 \& IgnoreWords www http a an the of and or .Ve .Sp .Vb 1 \& IgnoreWords File: ./stopwords.de .Ve .IP "UseWords [*list of words*|File: path]" 4 .IX Item "UseWords [*list of words*|File: path]" UseWords defines the words that Swish-e will index. \fBOnly\fR the words listed will be indexed. .Sp You can specify a list of words following the directive (you may specify more than one \f(CW\*(C`UseWords\*(C'\fR directive in a config file), and/or use the \&\f(CW\*(C`File:\*(C'\fR form to specify a path to a file containing the words: .Sp .Vb 2 \& UseWords perl python pascal fortran basic cobal php \& UseWords File: /path/to/my/wordlist .Ve .Sp Please drop the Swish-e list a note if you actually use this feature. It may be removed from future versions. .IP "IgnoreLimit *integer integer*" 4 .IX Item "IgnoreLimit *integer integer*" This automatically omits words that appear too often in the files (these words are called stopwords). Specify a whole percentage and a number, such as \*(L"80 256\*(R". This omits words that occur in over 80% of the files and appear in over 256 files. Comment out to turn off auto\-stopwording. .Sp .Vb 1 \& IgnoreLimit 50 1000 .Ve .Sp Swish-e must do extra processing to adjust the entire index when this feature is used. It is recommended that instead of using this feature that you decided what words are stopwords and add them to \fBIngoreWords\fR in your configuration file. To do this, use IgnoreLimit one time and note the stop words that are found while indexing. Add this list to IgnoreWords, and then remove IgnoreLimit from the configuration file. .IP "IgnoreMetaTags *list of names*" 4 .IX Item "IgnoreMetaTags *list of names*" \&\f(CW\*(C`IgnoreMetaTags\*(C'\fR defines a list of metatags to ignore while indexing \&\s-1XML\s0 files (and \s-1HTML\s0 files if using libxml2 for parsing \s-1HTML\s0). All text within the tags will be ignored \*(-- both for indexing (\f(CW\*(C`MetaNames\*(C'\fR) and properties (\f(CW\*(C`PropertyNames\*(C'\fR). To still parse properties, yet do not index the text, see UndefinedMetaTags. .Sp This option is useful to avoid indexing specific data from a file. For example: .Sp .Vb 9 \& \& \& William \& \& Shakespeare \& \& April 25, 1999 \& \& .Ve .Sp In the above example you might \fBnot\fR want to index the updated date, and therefore prevent finding this record by searching .Sp .Vb 1 \& -w 'person=(April)' .Ve .Sp This is solved by: .Sp .Vb 1 \& IgnoreMetaTags updated_date .Ve .Sp See also UndefinedMetaTags. .IP "IgnoreNumberChars *list of characters*" 4 .IX Item "IgnoreNumberChars *list of characters*" Experimental Feature .Sp This experimental feature can be used to define a set of characters that describe a number. If a word is found to contain only those characters it will not be indexed. The characters listed must be part of \f(CW\*(C`WordCharacters\*(C'\fR settings. In other words, the \*(L"word\*(R" checked is a word that Swish-e would otherwise index. .Sp For example, .Sp .Vb 1 \& IgnoreNumberChars 0123456789$., .Ve .Sp Then Swish-e would not index the following: .Sp .Vb 3 \& 123 \& 123,456.78 \& $123.45 .Ve .Sp You might be tempted to avoid indexing hex numbers with: .Sp .Vb 1 \& IgnoreNumberChars 0123456789abcdef .Ve .Sp which will not index 0D31, but will also not index the word \*(L"bad\*(R". .Sp This is an experimental feature that may change in future versions. One possible change is to use regular expressions instead. .IP "IndexComments [NO|yes]" 4 .IX Item "IndexComments [NO|yes]" This option allows the user decide if to index the contents of \s-1HTML\s0 comments. Default is no. Set to yes if comment indexing is required. .Sp .Vb 1 \& IndexComments yes .Ve .Sp Note: This is a change in the default behavior prior to version 2.2. .IP "TranslateCharacters [*string1 string2*|:ascii7:]" 4 .IX Item "TranslateCharacters [*string1 string2*|:ascii7:]" The TranslateCharacters directive maps the characters in string1 to the characters listed in string2. .Sp For example: .Sp .Vb 2 \& # This will index a_b as a-b and mo as amo \& TranslateCharacters _ -a .Ve .Sp \&\f(CW\*(C`TranslateCharacters :ascii7:\*(C'\fR is a predefined set of characters that will translate eight bit characters to ascii7 characters. Using the :ascii7: rule will translate \*(L"\*(R" to \*(L"aac\*(R". This means: searching \&\*(L"elik\*(R", \*(L"elik\*(R" or \*(L"celik\*(R" will all match the same word. .Sp TranslateCharacters is done early in the indexing process, after converting \s-1HTML\s0 entities but before splitting the input text into words based on \fBWordCharacters\fR. So characters you are translating \fIfrom\fR do not need to be listed in word characters. .Sp The same character translations take place when searching. .IP "BumpPositionCounterCharacters *string*" 4 .IX Item "BumpPositionCounterCharacters *string*" When indexing Swish-e assigns a word position to each word. This enables phrase searching. There may be cases where you would like to prevent phrase matching. The BumpPositionCounterCharacters directive allows you to specify a set of characters that when found in the text will increment the word position \*(-- effectively preventing phrase matches across that character. .Sp For example, if you have a tag: .Sp .Vb 3 \& \& computer programming | apple computers \& .Ve .Sp You might want to prevent matching \*(L"programming apple\*(R" in that meta name. .Sp .Vb 1 \& BumpPositionCounterCharacters | .Ve .Sp There is no default, and you may list a string of characters. .IP "DontBumpPositionOnEndTags *list of names*" 4 .IX Item "DontBumpPositionOnEndTags *list of names*" .PD 0 .IP "DontBumpPositionOnStartTags *list of names*" 4 .IX Item "DontBumpPositionOnStartTags *list of names*" .PD Since metatags are typically separate data fields, the word position counter is automatically bumped between metatags (actually, bumped when a start tag is found and when an end tag is found). This prevents matching a phrase that spans more than one metaname. \f(CW\*(C`DontBumpPositionOnEndTags\*(C'\fR and \f(CW\*(C`DontBumpPositionOnStartTags\*(C'\fR disables this feature for the listed metanames. .Sp For example, .Sp .Vb 11 \& \& \& William \& \& \& Shakespeare \& \& \& April 25, 1999 \& \& .Ve .Sp In the configuration file: .Sp .Vb 2 \& DontBumpPositionOnEndTags first_name \& DontBumpPositionOnStartTags last_name .Ve .Sp This configuration allows this phrase search .Sp .Vb 1 \& -w 'person=("william shakespeare")' .Ve .Sp but this phrase search will fail .Sp .Vb 1 \& -w 'person=("shakespeare april")' .Ve .Sh "Directives for the File Access method only" .IX Subsection "Directives for the File Access method only" Some directives have different uses depending on the source of the documents. These directives are only valid when using the \fBFile system\fR method of indexing. .IP "IndexOnly *list of file suffixes*" 4 .IX Item "IndexOnly *list of file suffixes*" This directive specifies the allowable file suffixes (extensions) while indexing. The default is to index all files specified in \fBIndexDir\fR. .Sp .Vb 2 \& # Only index .html .htm and .q files \& IndexOnly .html .htm .q .Ve .Sp \&\f(CW\*(C`IndexOnly\*(C'\fR checks that the file end in the characters listed. It does not check \*(L"extensions\*(R". \f(CW\*(C`IndexOnly\*(C'\fR is tested right before \f(CW\*(C`FileRules\*(C'\fR is processed. .IP "FollowSymLinks [yes|NO]" 4 .IX Item "FollowSymLinks [yes|NO]" Put \*(L"yes\*(R" to follow symbolic links in indexing, else \*(L"no\*(R". Default is no. .Sp .Vb 2 \& FollowSymLinks no \& FollowSymLinks yes .Ve .Sp Note that when set to \f(CW\*(C`no\*(C'\fR extra \fIstat\fR\|(2) system calls must be made for each file. For large number of files you may see a small reduction in indexing time by setting this to \f(CW\*(C`yes\*(C'\fR. .Sp See also the \f(CW\*(C`\-l\*(C'\fR switch in SWISH-RUN. .IP "FileRules [type] [contains|is|regex] *regular expression*" 4 .IX Item "FileRules [type] [contains|is|regex] *regular expression*" .PD 0 .IP "FileMatch [type] [contains|is|regex] *regular expression*" 4 .IX Item "FileMatch [type] [contains|is|regex] *regular expression*" .PD FileRules and FileMatch are used to, respectively, exclude and include files and directories to index. Since, by default, Swish-e indexes all files and recurses all directories (but see also \f(CW\*(C`FollowSymLinks\*(C'\fR) you will typically only use >\f(CW\*(C`FileRules\*(C'\fR to exclude files or directories. \&\f(CW\*(C`FileMatch\*(C'\fR is useful in a few cases, for example, to override the behavior of \f(CW\*(C`IndexOnly\*(C'\fR. Some examples are included below. .Sp Except for \f(CW\*(C`FileRules title ...\*(C'\fR, this feature is only available for file access method (\-S fs), which is the default indexing mode. Also, any pathname modification with \f(CW\*(C`ReplaceRules\*(C'\fR happens after the check for \f(CW\*(C`FileRules\*(C'\fR. (It's unlikely that you would exclude files with \&\f(CW\*(C`FileRules\*(C'\fR based on text you added with \f(CW\*(C`ReplaceRules\*(C'\fR!) .Sp The regular expression is a C regex.h extended regular expression. You may supply more than one regular expression per line, or use separate directives. Preceding the regular expression with the word \&\*(L"not\*(R" negates the match. .Sp The regular expression is compared against \fB[type]\fR as described below. .Sp For historical reasons, you can specify \f(CW\*(C`contains\*(C'\fR or \f(CW\*(C`is\*(C'\fR. \f(CW\*(C`is\*(C'\fR simply forces the regular expression to match at the start and end of the string (by internally prepending \*(L"^\*(R" and appending \*(L"$\*(R" to the regular expression). .Sp The \f(CW\*(C`regex\*(C'\fR option requires delimiter characters: .Sp .Vb 1 \& FileRules title regex /^private/i .Ve .Sp The only advantage of \f(CW\*(C`regex\*(C'\fR is if you want to do case insensitive matches, or simply like your regular expressions to look like perl regular expressions. You must use matching delimiters; (), {}, and [], are not currently supported for no good reason other than laziness. .Sp Use quotes (" or ') around a pattern if it contains any white space. Note that the backslash character becomes the escape character within quotes. .Sp For example, these sets generate the same regular expressions. .Sp .Vb 3 \& FileRules title is hello \& FileRules title contains ^hello$ \& FileRules title regex /^hello$/ .Ve .Sp These all need quotes due to the included space character .Sp .Vb 3 \& FileRules title is "hello there" \& FileRules title contains "^hello there$" \& FileRules title regex "!^hello there$!" .Ve .Sp These show how the backslash must be doubled inside of quotes. Swish-e converts a double-backslash into a single backslash, and then passes that single onto the regular expression compiler. .Sp .Vb 2 \& FileRules filename regex /\e.pdf/ \& FileRules filename regex "/\e\e.pdf/" .Ve .Sp .Vb 2 \& FileRules filename regex !hello\e\ethere! # need double for real backslash \& FileRules filename regex "!hello\e\e\e\ethere!" # need double-double inside of quotes .Ve .Sp \&\fBMatching Types\fR .Sp The following types of match strings my be supplied: .Sp .Vb 5 \& FileRules pathname \& FileRules dirname \& FileRules filename \& FileRules directory \& FileRules title .Ve .Sp .Vb 4 \& FileMatch pathname \& FileMatch filename \& FileMatch dirname \& FileMatch directory .Ve .Sp \&\fBpathname\fR matches the regular expression against the current pathname. The pathname may or may not be absolute depending on what you supplied to \f(CW\*(C`IndexDir\*(C'\fR. .Sp Example: .Sp .Vb 2 \& # Don't index paths that contain private or hidden \& FileRules pathname contains (private|hidden) .Ve .Sp .Vb 2 \& # Same thing \& FileRules pathname regex /(private|hidden)/ .Ve .Sp .Vb 2 \& # Don't index exe files \& FileRules pathname contains \e.exe$ .Ve .Sp \&\fBdirname\fR and \fBfilename\fR split the path name by the last delimiter character into a directory name, and a file name. Then these are compared against the patterns supplied. Directory names do \fBnot\fR have a trailing slash. All path names use the forward slash as a delimiter within Swish\-e. .Sp Example: .Sp .Vb 2 \& # Same as last example - don't index *.exe files. \& FileRules filename contains \e.exe$ .Ve .Sp .Vb 2 \& # Don't index any file called test.html files \& FileRules filename contains ^test\e.html$ .Ve .Sp .Vb 2 \& # Same thing \& FileRules filename is test\e.html .Ve .Sp .Vb 2 \& # Don't index any directories that contain "old" (/usr/local/myold/docs) \& FileRules dirname contains old .Ve .Sp .Vb 2 \& # Don't index any directories that contain the path segment "old" (/usr/local/old/foo) \& FileRules dirname contains /old/ .Ve .Sp .Vb 3 \& # Index only .htm, .html, plus any all-digit file names \& IndexOnly .htm .html \& FileMatch filename contains ^\ed+$ .Ve .Sp .Vb 3 \& # Same as previous, but maybe a little slower \& FileRules filename regex not !\e.(htm|html)$! \& FileMatch filename contains ^\ed+$ .Ve .Sp Swish-e checks these settings in the order of \f(CW\*(C`pathname\*(C'\fR, \f(CW\*(C`dirname\*(C'\fR, and \&\f(CW\*(C`filename\*(C'\fR, and \f(CW\*(C`FileMatch\*(C'\fR patterns are checked before \f(CW\*(C`FileRules\*(C'\fR, in general. This allows you to exclude most files with \f(CW\*(C`FileRules\*(C'\fR, yet allow in a few special cases with \f(CW\*(C`FileMatch\*(C'\fR. For example: .Sp .Vb 4 \& # Exclude all files of .exe, .bin, and .bat \& FileRules filename contains \e.(exe|bin|bat)$ \& # But, let these two in \& FileMatch filename is baseball\e.bat incoming_mail\e.bin .Ve .Sp .Vb 2 \& # Same, but as a single pattern \& FileMatch filename is (baseball\e.bat|incoming_mail\e.bin) .Ve .Sp The \f(CW\*(C`directory\*(C'\fR type is somewhat unique. When Swish-e recurses into a directory it will compare all the \fIfiles\fR in the directory with the pattern and then decide if that entire directory should or should not be indexed (or recursed). Note that you are matching against file names in a directory \*(-- and some of those names may be directory names. .Sp A \f(CW\*(C`FileRules directory\*(C'\fR match will cause Swish-e to ignore all files and sub-directories in the current directory. .Sp Warning: A match with \f(CW\*(C`FileMatch directory\*(C'\fR says to index \fBeverything\fR in the *current* directory and \fBignore\fR any FileRules for this directory. .Sp Example: .Sp .Vb 3 \& # Don't index any directories (and sub directories) that contain \& # a file (or sub-directory) called "index.skip" \& FileRules directory contains ^index\e.skip$ .Ve .Sp .Vb 2 \& # Don't index directories that contain a .htaccess file. \& FileRules directory contains ^\e.htaccess .Ve .Sp Note: While \fIprocessing\fR directories, Swish-e will ignore any files or directories that begin with a dot (\*(L".\*(R"). You may index files or directories that begin with a dot by specifying their name with \&\f(CW\*(C`IndexDir\*(C'\fR or \f(CW\*(C`\-i\*(C'\fR. .Sp \&\f(CW\*(C`title\*(C'\fR checks for a pattern match in an \s-1HTML\s0 title. .Sp Example: .Sp .Vb 1 \& FileRules title contains construction example pointers .Ve .Sp .Vb 2 \& # This example says to ignore case \& FileRules title regex "/^Internal document/i" .Ve .Sp Note: \f(CW\*(C`FileRules title\*(C'\fR works for any input method (fs, prog, or http) that is parsed as \s-1HTML\s0, and where a title was found in the document. .Sp In case all this seems a bit confusing, processing a directory happens in the following order. .Sp First the directory name is checked: .Sp .Vb 1 \& FileRules dirname - reject entire directory if matches .Ve .Sp Next the directory is scanned and each file name (which might be the name of a sub\-directory) is checked: .Sp .Vb 2 \& FileRules directory - reject entire dir if *any* files match \& FileMatch directory - accept entire dir if *any* files match .Ve .Sp Then, unless \f(CW\*(C`FileMatch directory\*(C'\fR matched, each file is tested with FileMatch. A match says to index the file without further testing (i.e. overrides FileRules and IndexOnly): .Sp .Vb 3 \& FileMatch pathname \e \& FileMatch dirname - file is accepted if any match \& FileMatch filename / .Ve .Sp otherwise .Sp .Vb 1 \& IndexOnly - file is checked for the correct file extension .Ve .Sp .Vb 3 \& FileRules pathname \e \& FileRules dirname - file is rejected if any match \& FileRules filename / .Ve .Sp finally, the file is indexed. .Sp Files (not directories) listed with \f(CW\*(C`IndexDir\*(C'\fR or \f(CW\*(C`\-i\*(C'\fR are processed in a similar way: .Sp .Vb 3 \& FileMatch pathname \e \& FileMatch dirname - file is accepted if any match \& FileMatch filename / .Ve .Sp otherwise, the file is rejected if it doesn't have the correct extension or a FileRules matches. .Sp .Vb 1 \& IndexOnly - file is checked for the correct file extension .Ve .Sp .Vb 3 \& FileRules pathname \e \& FileRules dirname - file is rejected if any match \& FileRules filename / .Ve .Sp Note: If things are not indexing as you expect, create a directory with some test files and use the \f(CW\*(C`\-T regex\*(C'\fR trace option to see how file names are checked. Start with very simple tests! .Sh "Directives for the \s-1HTTP\s0 Access Method Only" .IX Subsection "Directives for the HTTP Access Method Only" The \s-1HTTP\s0 Access method is enabled by the \*(L"\-S http\*(R" switch when indexing. It works by running a Perl program called SwishSpider which fetches documents from a web server. .PP Only text files (content\-type of \*(L"text/*\*(R") are indexed with the \s-1HTTP\s0 Access Method. Other document types (e.g. \s-1PDF\s0 or MSWord) may be indexed as well. The SwishSpider will attempt to make use of the SWISH::Filter module (included with the Swish-e distribution) to convert documents into a format that Swish-e can index. .PP Note: The \-S prog method of spidering (using spider.pl) can be a replacement for the \-S http method. It offers more configuration options and better spidering speed. .PP These directives below are available when using the \s-1HTTP\s0 Access Method of indexing. .IP "MaxDepth *integer*" 4 .IX Item "MaxDepth *integer*" MaxDepth defines how many links the spider should follow before stopping. A value of 0 configures the spider to traverse all links. The default is MaxDepth 0. .Sp .Vb 1 \& MaxDepth 5 .Ve .Sp Note: The default was changed from 5 to 0 in release 2.4.0 .IP "Delay *seconds*" 4 .IX Item "Delay *seconds*" The number of seconds to wait between issuing requests to a server. This setting allows for more friendly spidering of remote sites. The default is 5 seconds. .Sp .Vb 1 \& Delay 1 .Ve .Sp Note: The default was changed from 60 to 5 seconds in release 2.4.0 .IP "TmpDir *path*" 4 .IX Item "TmpDir *path*" The location of a writable temp directory on your system. The \s-1HTTP\s0 access method tells the Perl helper to place its files in this location, and the \f(CW\*(C`\-e\*(C'\fR switch causes Swish-e to use this directory while indexing. There is no default. .Sp .Vb 1 \& TmpDir /tmp/swish .Ve .Sp If this directory does not exist or is not writable Swish-e will fail with an error during indexing. .Sp Note, the environment variables of \f(CW\*(C`TMPDIR\*(C'\fR, \f(CW\*(C`TMP\*(C'\fR, and \f(CW\*(C`TEMP\*(C'\fR (in that order) will \fBoverride\fR this setting. .IP "SpiderDirectory *path*" 4 .IX Item "SpiderDirectory *path*" The location of the Perl helper script called \fIswishspider\fR. If you use a relative directory, it is relative to your directory when you run Swish\-e, not to the directory that Swish-e is in. The default is the location swishspider was installed. Normally this does not need to be set. .Sp .Vb 1 \& SpiderDirectory /usr/local/swish .Ve .IP "EquivalentServer *server alias*" 4 .IX Item "EquivalentServer *server alias*" Often times the same site may be referred to by different names. A common example is that often http://www.some\-server.com and http://some\-server.com are the same. Each line should have a list of all the method/names that should be considered equivalent. Multiple EquivalentServer directives may be used. Each directive defines its own set of equivalent servers. .Sp .Vb 2 \& EquivalentServer http://library.berkeley.edu http://www.lib.berkeley.edu \& EquivalentServer http://sunsite.berkeley.edu:2000 http://sunsite.berkeley.edu .Ve .Sh "Directives for the prog Access Method Only" .IX Subsection "Directives for the prog Access Method Only" This section details the directives that are only available for the \&\*(L"prog\*(R" document source feature of Swish\-e. The \*(L"prog\*(R" access method runs an external program that \*(L"feeds\*(R" documents to Swish\-e. This allows indexing and filtering of documents from any source. .PP See prog \- general purpose access method in the SWISH-RUN man page for more information. .PP A number of example programs for use with the \*(L"prog\*(R" access method are provided in the \fIprog-bin\fR directory. Please see those example if you have questions about implementing a \*(L"prog\*(R" input program. .IP "SwishProgParameters *list of parameters*" 4 .IX Item "SwishProgParameters *list of parameters*" This is a list of parameters that will be sent to the external program when running with the \*(L"prog\*(R" document source method. .Sp .Vb 2 \& SwishProgParameters /path/to/config hello there \& IndexDir /path/to/program.pl .Ve .Sp Then running: .Sp .Vb 1 \& swish-e -c config -S prog .Ve .Sp Swish-e will execute \f(CW\*(C`/path/to/program.pl\*(C'\fR and pass \f(CW\*(C`/path/to/config hello there\*(C'\fR as three command line arguments to the program. This directive makes it easy to pass settings from the Swish-e configuration file to the external program. .Sp For example, the \f(CW\*(C`spider.pl\*(C'\fR program (included in the \f(CW\*(C`prog\-bin\*(C'\fR directory) uses the \f(CW\*(C`SwishProgParameters\*(C'\fR to specify what file to read for configuration information. .Sp .Vb 2 \& SwishProgParameters spider.config \& IndexDir ./spider.pl .Ve .Sp The \f(CW\*(C`spider.pl\*(C'\fR program also has a default action so you can avoid using a configuration file: .Sp .Vb 2 \& SwishProgParameters default http://www.swishe.org/ http://some.other.site/ \& IndexDir ./spider.pl .Ve .Sp And the spider program will use default settings for spidering those sites. .Sp Swish-e can read documents from standard input, so another way to run an external program with parameters is: .Sp .Vb 1 \& ./spider.pl spider.conf | ./swish-e -S prog -i stdin .Ve .PP \&\fBNotes when using \s-1MS\s0 Windows\fR .PP You should use unix style path separators to specify your external program. Swish will convert forward slashes to backslashes before calling the external program. This is only true for the program name specified with \f(CW\*(C`IndexDir\*(C'\fR or the \f(CW\*(C`\-i\*(C'\fR command line option. .PP In addition, Swish-e will make sure the program specified actually exists, which means you need to use the full name of the program. .PP For example, to run the perl spider program \fIspider.pl\fR you would need a Swish-e configuration file such as: .PP .Vb 2 \& IndexDir e:/perl/bin/perl.exe \& SwishProgParameters prog-bin/spider.pl default http://swish-e.org .Ve .PP and run indexing with the command: .PP .Vb 1 \& swish-e -c swish.cfg -S prog -v 9 .Ve .PP The \f(CW\*(C`IndexDir\*(C'\fR command tells Swish-e the name of the program to run. Under unix you can just specify the name of the script, since unix will figure out the program from the first line of the script. .PP The \f(CW\*(C`SwishProgParameters\*(C'\fR are the parameters passed to the program specified by \f(CW\*(C`IndexDir\*(C'\fR (perl.exe in this case). The first parameter is the perl script to run (\fIprog\-bin/spider.pl\fR). Perl passes the rest of the parameters directly to the perl script. The second parameter \&\fIdefault\fR tells the \fIspider.pl\fR program to use default settings for spidering (or you could specify a spider config$ file \*(-- see \f(CW\*(C`perldoc spider.pl\*(C'\fR for details), and lastly, the \s-1URL\s0 is passed into the spider program. .Sh "Document Filter Directives" .IX Subsection "Document Filter Directives" Internally, Swish-e knows how to parse only text, \s-1HTML\s0, and \s-1XML\s0 documents. With \*(L"filters\*(R" you can index other types of documents. For example, if all your web pages are in gzip format a filter can uncompress these on the fly for indexing. .PP You may wish to read the Swish-e \s-1FAQ\s0 question on filtering before continuing here. How Do I filter documents? .PP There are two suggested methods for filtering. .PP \fIFiltering with SWISH::Filter\fR .IX Subsection "Filtering with SWISH::Filter" .PP The Swish-e distribution includes a Perl module called SWISH::Filter and individual filters located in the \fIfilters\fR directory. This system uses plug-in filters to extend the types of documents that Swish-e can index. The plug-in filters do not actually do the filtering, but rather provide a standard interface for accessing programs that can filter or convert documents. The programs that do the filtering are not part of the Swish-e distribution; they must be downloaded and installed separately. .PP The advantage of this method is that new filtering methods can be installed easily. .PP This system is designed to work with the \-S http and \-prog methods, but may also be used with the \f(CW\*(C`FileFilter\*(C'\fR feature and \-S fs indexing method. See \&\fI$prefix/share/doc/swish\-e/examples/filter\-bin/swish_filter.pl\fR for an example. .PP See the \fIfilters/README\fR file for more information. .PP \fIFiltering with the FileFilter feature\fR .IX Subsection "Filtering with the FileFilter feature" .PP A filter is an external program that Swish-e executes while processing a document of a given type. Swish-e will execute the filter program for each file that matches the file suffix (extension) set in the \&\fBFileFilter\fR or \fBFileFilterMatch\fR directives. \fBFileFilterMatch\fR matches using regular expressions and is described below. .PP Filters may be used with any type of input method (i.e. \-S fs, \-S http, or \-S prog). But because .PP Swish-e calls the external program passing as \fBdefault\fR arguments: .IP "$0" 4 .IX Item "$0" the name of the filter program .IP "$1" 4 .IX Item "$1" the physical path name of the file to read. This may be a temporary file location if indexing by the http method. .IP "$2" 4 .IX Item "$2" When indexing under the file system this will be the same as \f(CW$1\fR (the path to the source file), but when indexing under the http method this will be the \s-1URL\s0 of the source document. .PP Swish-e can also pass other parameters to the filter program. These parameters can be defined using the \fBFileFilter\fR or \fBFileFilterMatch\fR directives. See Filter Options below. .PP The filter program must open the file, process its contents, and return it to Swish-e by printing to \s-1STDOUT\s0. .PP Note that this can add a significant amount of time to the indexing process if your external program is a perl or shell script. If you have many files to filter you should consider writing your filter in C instead of a shell or perl script, or using the \*(L"prog\*(R" Access Method. .IP "FilterDir *path\-to\-directory*" 4 .IX Item "FilterDir *path-to-directory*" This is the path to a directory where the filter programs are stored. Swish-e looks in this directory to find the filter specified in the \&\fBFileFilter\fR directive. If this directive is omitted, you have to specify the full path to the filterscript on each FileFilter directive. .Sp This feature does *not* apply to the \f(CW\*(C`FileFilterMatch\*(C'\fR directive. .Sp Example: .Sp .Vb 1 \& FilterDir /usr/local/swish/filters .Ve .ie n .IP "FileFilter *suffix* ""filter\-prog"" [""filter\-options""]" 4 .el .IP "FileFilter *suffix* ``filter\-prog'' [``filter\-options'']" 4 .IX Item "FileFilter *suffix* filter-prog [filter-options]" This maps file suffix (extension) to a filter program. If \fIfilter-prog\fR starts with a directory delimiter (absolute path), Swish-e doesn't use the FilterDir settings, but uses the given \fIfilter-prog\fR path directly. .Sp Filter options: .Sp Filter options are a string passed as arguments to the \fIfilter-prog\fR. Filter options can contain variables, replaced by Swish\-e. If you omit \&\fIfilter-options\fR Swish-e will use default parameters for the options listed above. .Sp .Vb 2 \& Default: "'%p' '%P'" \& Which means: pass "workfile path" and "documentfile path" to filter (each quoted). .Ve .Sp Variables in filter options: .Sp .Vb 7 \& %% = % \& %P = Full document pathname (e.g. URL, or path on filesystem) \& %p = Full pathname to work file (maybe a tmpfile or the real document path on filesystem) \& %F = Filename stripped from full document pathname \& %f = Filename stripped from "work" pathname \& %D = Directoryname stripped from full document pathname \& %d = Directoryname stripped from full "work" pathname .Ve .Sp Examples of strings passed: .Sp .Vb 6 \& %P = document pathname: http://myserver/path1/mydoc.txt \& %p = work pathname: /tmp/tmp.1234.mydoc.txt \& %F = mydoc.txt \& %f = tmp.1234.mydoc.txt \& %D = http://myserver/path1 \& %d = /tmp .Ve .Sp Important hint for security: .Sp When using variable substitution, use quotes to ensure filename integrity. .Sp .Vb 1 \& e.g. "'%f'" --> 'file name with spaces.doc'. .Ve .Sp If you don't use this, your system security may be compromised, or filtering may not work for these files. .Sp \&\fBNotes when using \s-1MS\s0 Windows\fR .Sp Windows uses double quotes to escape shell metacharacters, so reverse the quotes in the examples above. e.g.: .Sp .Vb 1 \& '"%f"' --> "file name with spaced.doc" .Ve .Sp You can specify the filter program using forward slashes (unix style). Swish will convert the slashes to backslashes before running your program. .Sp .Vb 1 \& FileFilter .mydoc c:/some/path/mydocfilter.exe '-d "%d" -example -url "%P" "%f"' .Ve .Sp Examples of filters: .Sp .Vb 4 \& FileFilter .doc /usr/local/bin/catdoc "-s8859-1 -d8859-1 '%p'" \& FileFilter .pdf pdftotext "'%p' -" \& FileFilter .html.gz gzip "-c '%p'" \& FileFilter .mydoc "/some/path/mydocfilter" "-d '%d' -example -url '%P' '%f'" .Ve .Sp The above examples are running a \fIbinary\fR filter program. For more complicated filtering needs you may use a scripting language such as Perl or a shell script. Here's some examples of calling a shell and perl script: .Sp .Vb 2 \& FileFilter .pdf pdf2html.sh \& FileFilter .ps ghostscript-filter.pl .Ve .Sp Using a scripting language (or any language that has a large startup cost) can \fBgreatly increase the indexing time\fR. For small indexing jobs, this may not be an issue, but for large collections of files that require processing by a scripting language, you may be better off using the \f(CW\*(C`\-S prog\*(C'\fR access method where the script will only be compiled once, instead of for each document. .Sp Filters are probably easier to write than a \f(CW\*(C`\-S prog\*(C'\fR program. Which you decide to use depends on your requirements. Examples of filter scripts can be found in the \fIfilter-bin\fR directory, and examples of \f(CW\*(C`\-S prog\*(C'\fR programs can be found in the \fIprog-bin\fR directory. .IP "FileFilterMatch *filter\-prog* *filter\-options* *regex* [*regex* ...]" 4 .IX Item "FileFilterMatch *filter-prog* *filter-options* *regex* [*regex* ...]" This is similar to \f(CW\*(C`FileMatch\*(C'\fR except uses regular expressions to match against the file name. *filter\-prog* is the path to the program. Unlike \f(CW\*(C`FileFilter\*(C'\fR this does \fBnot\fR use the \f(CW\*(C`FilterDir\*(C'\fR option. Also unlike \f(CW\*(C`FileFilter\*(C'\fR you \fBmust\fR specify the *filter\-options*. .Sp Examples: .Sp .Vb 1 \& FileFilterMatch ./pdftotext "'%p' -" /\e.pdf$/ .Ve .Sp Note that will also match a file called \*(L".pdf\*(R", so you may want to use something that requires a filename that has more than just an extension. For example: .Sp .Vb 1 \& FileFilterMatch ./pdftotext "'%p' -" /.\e.pdf$/ .Ve .Sp To specify more than one extension: .Sp .Vb 1 \& FileFilterMatch ./check_title.pl "%p" /\e.html$/ /\e.htm$/ .Ve .Sp Or a few ways to do the same thing: .Sp .Vb 2 \& FileFilterMatch ./check_title.pl %p /\e.(html|html)$/ \& FileFilterMatch ./check_title.pl %p /\e.html?$/ .Ve .Sp And to ignore case: .Sp .Vb 1 \& FileFilterMatch ./check_title.pl %p /\e.html?$/i .Ve .Sp You may also precede an expression with \*(L"not\*(R" to negate regular expression that follow. For example, to match files that do not have an extension: .Sp .Vb 1 \& FileFilterMatch ./convert "%p %P" not /\e..+$/ .Ve .SH "Document Info" .IX Header "Document Info" $Id: \s-1SWISH\-CONFIG\s0.pod,v 1.74.2.2 2003/12/23 15:52:02 whmoseley Exp $ .PP \&. 0[swish-e.man]SWISH-FAQ.1tlÑ 2&tty $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SWISH-FAQ 1" .TH SWISH-FAQ 1 "2003-12-17" "2.4.1" "SWISH-E Documentation" .SH "NAME" The Swish\-e FAQ \- Answers to Common Questions .SH "Frequently Asked Questions" .IX Header "Frequently Asked Questions" .Sh "General Questions" .IX Subsection "General Questions" \fIWhat is Swish\-e?\fR .IX Subsection "What is Swish-e?" .PP Swish-e is \fBS\fRimple \fBW\fReb \fBI\fRndexing \fBS\fRystem for \fBH\fRumans \- \&\fBE\fRnhanced. With it, you can quickly and easily index directories of files or remote web sites and search the generated indexes for words and phrases. .PP \fISo, is Swish-e a search engine?\fR .IX Subsection "So, is Swish-e a search engine?" .PP Well, yes. Probably the most common use of Swish-e is to provide a search engine for web sites. The Swish-e distribution includes \s-1CGI\s0 scripts that can be used with it to add a \fIsearch engine\fR for your web site. The \s-1CGI\s0 scripts can be found in the \fIexample\fR directory of the distribution package. See the \fI\s-1README\s0\fR file for information about the scripts. .PP But Swish-e can also be used to index all sorts of data, such as email messages, data stored in a relational database management system, \&\s-1XML\s0 documents, or documents such as Word and \s-1PDF\s0 documents \*(-- or any combination of those sources at the same time. Searches can be limited to fields or \fIMetaNames\fR within a document, or limited to areas within an \s-1HTML\s0 document (e.g. body, title). Programs other than \s-1CGI\s0 applications can use Swish\-e, as well. .PP \fIShould I upgrade if I'm already running a previous version of Swish\-e?\fR .IX Subsection "Should I upgrade if I'm already running a previous version of Swish-e?" .PP A large number of bug fixes, feature additions, and logic corrections were made in version 2.2. In addition, indexing speed has been drastically improved (reports of indexing times changing from four hours to 5 minutes), and major parts of the indexing and search parsers have been rewritten. There's better debugging options, enhanced output formats, more document meta data (e.g. last modified date, document summary), options for indexing from external data sources, and faster spidering just to name a few changes. (See the \s-1CHANGES\s0 file for more information. .PP Since so much effort has gone into version 2.2, support for previous versions will probably be limited. .PP \fIAre there binary distributions available for Swish-e on platform foo?\fR .IX Subsection "Are there binary distributions available for Swish-e on platform foo?" .PP Foo? Well, yes there are some binary distributions available. Please see the Swish-e web site for a list at http://swish\-e.org/. .PP In general, it is recommended that you build Swish-e from source, if possible. .PP \fIDo I need to reindex my site each time I upgrade to a new Swish-e version?\fR .IX Subsection "Do I need to reindex my site each time I upgrade to a new Swish-e version?" .PP At times it might not strictly be necessary, but since you don't really know if anything in the index has changed, it is a good rule to reindex. .PP \fIWhat's the advantage of using the libxml2 library for parsing \s-1HTML\s0?\fR .IX Subsection "What's the advantage of using the libxml2 library for parsing HTML?" .PP Swish-e may be linked with libxml2, a library for working with \s-1HTML\s0 and \s-1XML\s0 documents. Swish-e can use libxml2 for parsing \s-1HTML\s0 and \s-1XML\s0 documents. .PP The libxml2 parser is a better parser than Swish\-e's built-in \s-1HTML\s0 parser. It offers more features, and it does a much better job at extracting out the text from a web page. In addition, you can use the \&\f(CW\*(C`ParserWarningLevel\*(C'\fR configuration setting to find structural errors in your documents that could (and would with Swish\-e's \s-1HTML\s0 parser) cause documents to be indexed incorrectly. .PP Libxml2 is not required, but is strongly recommended for parsing \s-1HTML\s0 documents. It's also recommended for parsing \s-1XML\s0, as it offers many more features than the internal Expat xml.c parser. .PP The internal \s-1HTML\s0 parser will have limited support, and does have a number of bugs. For example, \s-1HTML\s0 entities may not always be correctly converted and properties do not have entities converted. The internal parser tends to get confused when invalid \s-1HTML\s0 is parsed where the libxml2 parser doesn't get confused as often. The structure is better detected with the libxml2 parser. .PP If you are using the Perl module (the C interface to the Swish-e library) you may wish to build two versions of Swish\-e, one with the libxml2 library linked in the binary, and one without, and build the Perl module against the library without the libxml2 code. This is to save space in the library. Hopefully, the library will someday soon be split into indexing and searching code (volunteers welcome). .PP \fIDoes Swish-e include a \s-1CGI\s0 interface?\fR .IX Subsection "Does Swish-e include a CGI interface?" .PP Yes. Kind of. .PP There's two example \s-1CGI\s0 scripts included, swish.cgi and search.cgi. Both are installed at \fI$prefix/lib/swish\-e\fR. .PP Both require a bit of work to setup and use. Swish.cgi is probably what most people will want to use as it contains more features. Search.cgi is for those that want to start with a small script and customize it to fit their needs. .PP An example of using swish.cgi is given in the \s-1INSTALL\s0 man page, and it the swish.cgi documentation. Like often is the case, it will be easier to use if you first read the documentation. .PP Please use caution about \s-1CGI\s0 scripts found on the Internet for use with Swish\-e. Some are not secure. .PP The included example \s-1CGI\s0 scripts were designed with security in mind. Regardless, you are encouraged to have your local Perl expert review it (and all other \s-1CGI\s0 scripts you use) before placing it into production. This is just a good policy to follow. .PP \fIHow secure is Swish\-e?\fR .IX Subsection "How secure is Swish-e?" .PP We know of no security issues with using Swish\-e. Careful attention has been made with regard to common security problems such as buffer overruns when programming Swish\-e. .PP The most likely security issue with Swish-e is when it is run via a poorly written \s-1CGI\s0 interface. This is not limited to \s-1CGI\s0 scripts written in Perl, as it's just as easy to write an insecure \s-1CGI\s0 script in C, Java, \s-1PHP\s0, or Python. A good source of information is included with the Perl distribution. Type \f(CW\*(C`perldoc perlsec\*(C'\fR at your local prompt for more information. Another must-read document is located at \&\f(CW\*(C`http://www.w3.org/Security/faq/wwwsf4.html\*(C'\fR. .PP Note that there are many \fIfree\fR yet insecure and poorly written \s-1CGI\s0 scripts available \*(-- even some designed for use with Swish\-e. Please carefully review any \s-1CGI\s0 script you use. Free is not such a good price when you get your server hacked... .PP \fIShould I run Swish-e as the superuser (root)?\fR .IX Subsection "Should I run Swish-e as the superuser (root)?" .PP No. Never. .PP \fIWhat files does Swish-e write?\fR .IX Subsection "What files does Swish-e write?" .PP Swish writes the index file, of course. This is specified with the \&\f(CW\*(C`IndexFile\*(C'\fR configuration directive or by the \f(CW\*(C`\-f\*(C'\fR command line switch. .PP The index file is actually a collection of files, but all start with the file name specified with the \f(CW\*(C`IndexFile\*(C'\fR directive or the \f(CW\*(C`\-f\*(C'\fR command line switch. .PP For example, the file ending in \fI.prop\fR contains the document properties. .PP When creating the index files Swish-e appends the extension \fI.temp\fR to the index file names. When indexing is complete Swish-e renames the \&\fI.temp\fR files to the index files specified by \f(CW\*(C`IndexFile\*(C'\fR or \f(CW\*(C`\-f\*(C'\fR. This is done so that existing indexes remain untouched until it completes indexing. .PP Swish-e also writes temporary files in some cases during indexing (e.g. \f(CW\*(C`\-s http\*(C'\fR, \f(CW\*(C`\-s prog\*(C'\fR with filters), when merging, and when using \f(CW\*(C`\-e\*(C'\fR). Temporary files are created with the \fImkstemp\fR\|(3) function (with 0600 permission on unix-like operating systems). .PP The temporary files are created in the directory specified by the environment variables \f(CW\*(C`TMPDIR\*(C'\fR and \f(CW\*(C`TMP\*(C'\fR in that order. If those are not set then swish uses the setting the configuration setting TmpDir. Otherwise, the temporary file will be located in the current directory. .PP \fICan I index \s-1PDF\s0 and MS-Word documents?\fR .IX Subsection "Can I index PDF and MS-Word documents?" .PP Yes, you can use a \fIFilter\fR to convert documents while indexing, or you can use a program that \*(L"feeds\*(R" documents to Swish-e that have already been converted. See \f(CW\*(C`Indexing\*(C'\fR below. .PP \fICan I index documents on a web server?\fR .IX Subsection "Can I index documents on a web server?" .PP Yes, Swish-e provides two ways to index (spider) documents on a web server. See \f(CW\*(C`Spidering\*(C'\fR below. .PP Swish-e can retrieve documents from a file system or from a remote web server. It can also execute a program that returns documents back to it. This program can retrieve documents from a database, filter compressed documents files, convert \s-1PDF\s0 files, extract data from mail archives, or spider remote web sites. .PP \fICan I implement keywords in my documents?\fR .IX Subsection "Can I implement keywords in my documents?" .PP Yes, Swish-e can associate words with \fIMetaNames\fR while indexing, and you can limit your searches to these MetaNames while searching. .PP In your \s-1HTML\s0 files you can put keywords in \s-1HTML\s0 \s-1META\s0 tags or in \s-1XML\s0 blocks. .PP \&\s-1META\s0 tags can have two formats in your source documents: .PP .Vb 1 \& .Ve .PP And in \s-1XML\s0 format (can also be used in \s-1HTML\s0 documents when using libxml2): .PP .Vb 3 \& \& Some Content \& .Ve .PP Then, to inform Swish-e about the existence of the meta name in your documents, edit the line in your configuration file: .PP .Vb 1 \& MetaNames DC.subject meta1 meta2 .Ve .PP When searching you can now limit some or all search terms to that MetaName. For example, to look for documents that contain the word apple and also have either fruit or cooking in the \s-1DC\s0.subject meta tag. .PP \fIWhat are document properties?\fR .IX Subsection "What are document properties?" .PP A document property is typically data that describes the document. For example, properties might include a document's path name, its last modified date, its title, or its size. Swish-e stores a document's properties in the index file, and they can be reported back in search results. .PP Swish-e also uses properties for sorting. You may sort your results by one or more properties, in ascending or descending order. .PP Properties can also be defined within your documents. \s-1HTML\s0 and \&\s-1XML\s0 files can specify tags (see previous question) as properties. The \fIcontents\fR of these tags can then be returned with search results. These user-defined properties can also be used for sorting search results. .PP For example, if you had the following in your documents .PP .Vb 1 \& .Ve .PP and \f(CW\*(C`creator\*(C'\fR is defined as a property (see \f(CW\*(C`PropertyNames\*(C'\fR in SWISH-CONFIG) Swish-e can return \f(CW\*(C`accounting department\*(C'\fR with the result for that document. .PP .Vb 1 \& swish-e -w foo -p creator .Ve .PP Or for sorting: .PP .Vb 1 \& swish-e -w foo -s creator .Ve .PP \fIWhat's the difference between MetaNames and PropertyNames?\fR .IX Subsection "What's the difference between MetaNames and PropertyNames?" .PP MetaNames allows keywords searches in your documents. That is, you can use MetaNames to restrict searches to just parts of your documents. .PP PropertyNames, on the o>ther hand, define text that can be returned with results, and can be used for sorting. .PP Both use \fImeta tags\fR found in your documents (as shown in the above two questions) to define the text you wish to use as a property or meta name. .PP You may define a tag as \fBboth\fR a property and a meta name. For example: .PP .Vb 1 \& .Ve .PP placed in your documents and then using configuration settings of: .PP .Vb 2 \& PropertyNames creator \& MetaNames creator .Ve .PP will allow you to limit your searches to documents created by accounting: .PP .Vb 1 \& swish-e -w 'foo and creator=(accounting)' .Ve .PP That will find all documents with the word \f(CW\*(C`foo\*(C'\fR that also have a creator meta tag that contains the word \f(CW\*(C`accounting\*(C'\fR. This is using MetaNames. .PP And you can also say: .PP .Vb 1 \& swish-e -w foo -p creator .Ve .PP which will return all documents with the word \f(CW\*(C`foo\*(C'\fR, but the results will also include the contents of the \f(CW\*(C`creator\*(C'\fR meta tag along with results. This is using properties. .PP You can use properties and meta names at the same time, too: .PP .Vb 1 \& swish-e -w creator=(accounting or marketing) -p creator -s creator .Ve .PP That searches only in the \f(CW\*(C`creator\*(C'\fR \fImeta name\fR for either of the words \&\f(CW\*(C`accounting\*(C'\fR or \f(CW\*(C`marketing\*(C'\fR, prints out the contents of the contents of the \f(CW\*(C`creator\*(C'\fR \fIproperty\fR, and sorts the results by the \f(CW\*(C`creator\*(C'\fR \&\fIproperty name\fR. .PP (See also the \f(CW\*(C`\-x\*(C'\fR output format switch in SWISH-RUN.) .PP \fICan Swish-e index multi-byte characters?\fR .IX Subsection "Can Swish-e index multi-byte characters?" .PP No. This will require much work to change. But, Swish-e works with eight-bit characters, so many characters sets can be used. Note that it does call the ANSI-C \fItolower()\fR function which does depend on the current locale setting. See \f(CWlocale(7)\fR for more information. .Sh "Indexing" .IX Subsection "Indexing" \fIHow do I pass Swish-e a list of files to index?\fR .IX Subsection "How do I pass Swish-e a list of files to index?" .PP Currently, there is not a configuration directive to include a file that contains a list of files to index. But, there is a directive to include another configuration file. .PP .Vb 1 \& IncludeConfigFile /path/to/other/config .Ve .PP And in \f(CW\*(C`/path/to/other/config\*(C'\fR you can say: .PP .Vb 2 \& IndexDir file1 file2 file3 file4 file5 ... \& IndexDir file20 file21 file22 .Ve .PP You may also specify more than one configuration file on the command line: .PP .Vb 1 \& ./swish-e -c config_one config_two config_three .Ve .PP Another option is to create a directory with symbolic links of the files to index, and index just that directory. .PP \fIHow does Swish-e know which parser to use?\fR .IX Subsection "How does Swish-e know which parser to use?" .PP Swish can parse \s-1HTML\s0, \s-1XML\s0, and text documents. The parser is set by associating a file extension with a parser by the \f(CW\*(C`IndexContents\*(C'\fR directive. You may set the default parser with the \f(CW\*(C`DefaultContents\*(C'\fR directive. If a document is not assigned a parser it will default to the \s-1HTML\s0 parser (\s-1HTML2\s0 if built with libxml2). .PP You may use Filters or an external program to convert documents to \s-1HTML\s0, \&\s-1XML\s0, or text. .PP \fICan I reindex and search at the same time?\fR .IX Subsection "Can I reindex and search at the same time?" .PP Yes. Starting with version 2.2 Swish-e indexes to temporary files, and then renames the files when indexing is complete. On most systems renames are atomic. But, since Swish-e also generates more than one file during indexing there will be a very short period of time between renaming the various files when the index is out of sync. .PP Settings in \fIsrc/config.h\fR control some options related to temporary files, and their use during indexing. .PP \fICan I index phrases?\fR .IX Subsection "Can I index phrases?" .PP Phrases are indexed automatically. To search for a phrase simply place double quotes around the phrase. .PP For example: .PP .Vb 1 \& swish-e -w 'free and "fast search engine"' .Ve .PP \fIHow can I prevent phrases from matching across sentences?\fR .IX Subsection "How can I prevent phrases from matching across sentences?" .PP Use the BumpPositionCounterCharacters configuration directive. .PP \fISwish-e isn't indexing a certain word or phrase.\fR .IX Subsection "Swish-e isn't indexing a certain word or phrase." .PP There are a number of configuration parameters that control what Swish-e considers a \*(L"word\*(R" and it has a debugging feature to help pinpoint any indexing problems. .PP Configuration file directives (SWISH-CONFIG) \&\f(CW\*(C`WordCharacters\*(C'\fR, \f(CW\*(C`BeginCharacters\*(C'\fR, \f(CW\*(C`EndCharacters\*(C'\fR, \&\f(CW\*(C`IgnoreFirstChar\*(C'\fR, and \f(CW\*(C`IgnoreLastChar\*(C'\fR are the main settings that Swish-e uses to define a \*(L"word\*(R". See SWISH-CONFIG and SWISH-RUN for details. .PP Swish-e also uses compile-time defaults for many settings. These are located in \fIsrc/config.h\fR file. .PP Use of the command line arguments \f(CW\*(C`\-k\*(C'\fR, \f(CW\*(C`\-v\*(C'\fR and \f(CW\*(C`\-T\*(C'\fR are useful when debugging these problems. Using \f(CW\*(C`\-T INDEXED_WORDS\*(C'\fR while indexing will display each word as it is indexed. You should specify one file when using this feature since it can generate a lot of output. .PP .Vb 1 \& ./swish-e -c my.conf -i problem.file -T INDEXED_WORDS .Ve .PP You may also wish to index a single file that contains words that are or are not indexing as you expect and use \-T to output debugging information about the index. A useful command might be: .PP .Vb 1 \& ./swish-e -f index.swish-e -T INDEX_FULL .Ve .PP Once you see how Swish-e is parsing and indexing your words, you can adjust the configuration settings mentioned above to control what words are indexed. .PP Another useful command might be: .PP .Vb 1 \& ./swish-e -c my.conf -i problem.file -T PARSED_WORDS INDEXED_WORDS .Ve .PP This will show white-spaced words parsed from the document (\s-1PARSED_WORDS\s0), and how those words are split up into separate words for indexing (\s-1INDEXED_WORDS\s0). .PP \fIHow do I keep Swish-e from indexing numbers?\fR .IX Subsection "How do I keep Swish-e from indexing numbers?" .PP Swish-e indexes words as defined by the \f(CW\*(C`WordCharacters\*(C'\fR setting, as described above. So to avoid indexing numbers you simply remove digits from the \f(CW\*(C`WordCharacters\*(C'\fR setting. .PP There are also some settings in \fIsrc/config.h\fR that control what \*(L"words\*(R" are indexed. You can configure swish to never index words that are all digits, vowels, or consonants, or that contain more than some consecutive number of digits, vowels, or consonants. In general, you won't need to change these settings. .PP Also, there's an experimental feature called \f(CW\*(C`IgnoreNumberChars\*(C'\fR which allows you to define a set of characters that describe a number. If a word is made up of \fBonly\fR those characters it will not be indexed. .PP \fISwish-e crashes and burns on a certain file. What can I do?\fR .IX Subsection "Swish-e crashes and burns on a certain file. What can I do?" .PP This shouldn't happen. If it does please post to the Swish-e discussion list the details so it can be reproduced by the developers. .PP In the mean time, you can use a \f(CW\*(C`FileRules\*(C'\fR directive to exclude the particular file name, or pathname, or its title. If there are serious problems in indexing certain types of files, they may not have valid text in them (they may be binary files, for instance). You can use NoContents to exclude that type of file. .PP Swish-e will issue a warning if an embedded null character is found in a document. This warning will be an indication that you are trying to index binary data. If you need to index binary files try to find a program that will extract out the text (e.g. \fIstrings\fR\|(1), \fIcatdoc\fR\|(1), \fIpdftotext\fR\|(1)). .PP \fIHow to I prevent indexing of some documents?\fR .IX Subsection "How to I prevent indexing of some documents?" .PP When using the file system to index your files you can use the \&\f(CW\*(C`FileRules\*(C'\fR directive. Other than \f(CW\*(C`FileRules title\*(C'\fR, \f(CW\*(C`FileRules\*(C'\fR only works with the file system (\f(CW\*(C`\-S fs\*(C'\fR) indexing method, not with \&\f(CW\*(C`\-S prog\*(C'\fR or \f(CW\*(C`\-S http\*(C'\fR. .PP If you are spidering, use a \fIrobots.text\fR file in your document root. This is a standard way to excluded files from search engines, and is fully supported by Swish\-e. See http://www.robotstxt.org/ .PP You can also modify the \fIspider.pl\fR spider perl program to skip, index content only, or spider only listed web pages. Type \f(CW\*(C`perldoc spider.pl\*(C'\fR in the \f(CW\*(C`prog\-bin\*(C'\fR directory for details. .PP If using the libxml2 library for parsing \s-1HTML\s0, you may also use the Meta Robots Exclusion in your documents: .PP .Vb 1 \& .Ve .PP See the obeyRobotsNoIndex directive. .PP \fIHow do I prevent indexing parts of a document?\fR .IX Subsection "How do I prevent indexing parts of a document?" .PP To prevent Swish-e from indexing a common header, footer, or navigation bar, \s-1AND\s0 you are using libxml2 for parsing \s-1HTML\s0, then you may use a fake \s-1HTML\s0 tag around the text you wish to ignore and use the \&\f(CW\*(C`IgnoreMetaTags\*(C'\fR directive. This will generate an error message if the \f(CW\*(C`ParserWarningLevel\*(C'\fR is set as it's invalid \s-1HTML\s0. .PP \&\f(CW\*(C`IgnoreMetaTags\*(C'\fR works with \s-1XML\s0 documents (and \s-1HTML\s0 documents when using libxml2 as the parser), but not with documents parsed by the text (\s-1TXT\s0) parser. .PP If you are using the libxml2 parser (\s-1HTML2\s0 and \s-1XML2\s0) then you can use the the following comments in your documents to prevent indexing: .PP .Vb 2 \& \& .Ve .PP and/or these may be used also: .PP .Vb 2 \& \& .Ve .PP \fIHow do I modify the path or \s-1URL\s0 of the indexed documents.\fR .IX Subsection "How do I modify the path or URL of the indexed documents." .PP Use the \f(CW\*(C`ReplaceRules\*(C'\fR configuration directive to rewrite path names and URLs. If you are using \f(CW\*(C`\-S prog\*(C'\fR input method you may set the path to any string. .PP \fIHow can I index data from a database?\fR .IX Subsection "How can I index data from a database?" .PP Use the \*(L"prog\*(R" document source method of indexing. Write a program to extract out the data from your database, and format it as \s-1XML\s0, \s-1HTML\s0, or text. See the examples in the \f(CW\*(C`prog\-bin\*(C'\fR directory, and the next question. .PP \fIHow do I index my \s-1PDF\s0, Word, and compressed documents?\fR .IX Subsection "How do I index my PDF, Word, and compressed documents?" .PP Swish-e can internally only parse \s-1HTML\s0, \s-1XML\s0 and \s-1TXT\s0 (text) files by default, but can make use of \fIfilters\fR that will convert other types of files such as \s-1MS\s0 Word documents, \s-1PDF\s0, or gzipped files into one of the file types that Swish-e understands. .PP Please see SWISH-CONFIG and the examples in the \fIfilters\fR and \fIfilter-bin\fR directory for more information. .PP See the next question to learn about the filtering options with Swish\-e. .PP \fIHow do I filter documents?\fR .IX Subsection "How do I filter documents?" .PP The term \*(L"filter\*(R" in Swish-e means the converstion of a document of one type (one that swish-e cannot index directly) into a type that Swish-e can index, namely \s-1HTML\s0, plain text, or \s-1XML\s0. To add to the confusion, there are a number of ways to accomplish this in Swish\-e. So here's a bit of background. .PP The FileFilter directive was added to swish first. This feature allows you to specify a program to run for documents that match a given file extension. For example, to filter \s-1PDF\s0 files (files that end in .pdf) you can specify the configuation setting of: .PP .Vb 1 \& FileFilter .pdf pdftotext "'%p' -" .Ve .PP which says to run the program \*(L"pdftotext\*(R" passing it the pathname of the file (%p) and a dash (which tells pdftotext to output to stdout). Then for each .pdf file Swish-e runs this program and reads in the filtered document from the output from the filter program. .PP This has the advantage that it is easy to setup \*(-- a single line in the config file is all that is needed to add the filter into Swish\-e. But it also has a number of problems. For example, if you use a Perl script to do your filtering it can be very slow since the filter script must be run (and thus compiled) for each processed document. This is exacerbated when using the \-S http method since the \-S http method also uses a Perl script that is run for every \s-1URL\s0 fetched. Also, when using \-S prog method of input (reading input from a program) using FileFilter means that Swish-e must first read the file in from the external program and then write the file out to a temporary file before running the filter. .PP With \-S prog it makes much more sense to filter the document in the program that is fetching the documents than to have swish-e read the file into memory, write it to a temporary file and then run an external program. .PP The Swish-e distribution contains a couple of example \-S prog programs. \fIspider.pl\fR is a reasonably full-featured web spider that offers many more options than the \-S http method. And it is much faster than running \-S http, too. .PP The spider has a perl configuration file, which means you can add programming logic right into the configuration file without editing the spider program. One bit of logic that is provided in the spider's configuration file is a \*(L"call\-back\*(R" function that allows you to filter the content. In other words, before the spider passes a fetched web document to swish for indexing the spider can call a simple subroutine in the spider's configuration file passing the document and its content type. The subroutine can then look at the content type and decide if the document needs to be filtered. .PP For example, when processing a document of type \*(L"application/msword\*(R" the call-back subroutine might call the doc2txt.pm perl module, and a document of type \&\*(L"appliation/pdf\*(R" could use the pdf2html.pm module. The \fIprog\-bin/SwishSpiderConfig.pl\fR file shows this usage. .PP This system works reasonably well, but also means that more work is required to setup the filters. First, you must explicitly check for specific content types and then call the appropriate Perl module, and second, you have to know how each module must be called and how each returns the possibly modified content. .PP In comes SWISH::Filter. .PP To make things easier the SWISH::Filter Perl module was created. The idea of this module is that there is one interface used to filter all types of documents. So instead of checking for specific types of content you just pass the content type and the document to the SWISH::Filter module and it returns a new content type and document if it was filtered. The filters that do the actual work are designed with a standard interface and work like filter \*(L"plug\-ins\*(R". Adding new filters means just downloading the filter to a directory and no changes are needed to the spider's configuation file. Download a filter for Postscript and next time you run> indexing your Postscript files will be indexed. .PP Since the filters are standardized, hopefully when you have the need to filter documents of a specific type there will already be a filter ready for your use. .PP Now, note that the perl modules may or may not do the actual conversion of a document. For example, the \s-1PDF\s0 conversion module calls the pdfinfo and pdftotext programs. Those programs (part of the Xpfd package) must be installed separately from the filters. .PP The SwishSpiderConfig.pl examle spider configuration file shows how to use the SWISH::Filter module for filtering. This file is installed at \f(CW$prefix\fR/share/doc/swish\-e/examples/prog\-bin, where \f(CW$prefix\fR is normally /usr/local on unix-type machines. .PP The SWISH::Filter method of filtering can also be used with the \-S http method of indexing. By default the \fIswishspider\fR program (the Perl helper script that fetches documents from the web) will attempt to use the SWISH::Filter module if it can be found in Perls library path. This path is set automatically for spider.pl but not for swishspider (because it would slow down a method that's already slow and spider.pl is recommended over the \-S http method). .PP Therefore, all that's required to use this system with \-S http is setting the \f(CW@INC\fR array to point to the filter directory. .PP For example, if the swish-e distribution was unpacked into ~/swish\-e: .PP .Vb 1 \& PERL5LIB=~/swish-e/filters swish-e -c conf -S http .Ve .PP will allow the \-S http method to make use of the SWISH::Filter module. .PP Note that if you are not using the SWISH::Filter module you may wish to edit the \fIswishspider\fR program and disable the use of the SWISH::Filter module using this setting: .PP .Vb 1 \& use constant USE_FILTERS => 0; # disable SWISH::Filter .Ve .PP This prevents the program from attempting to use the SWISH::Filter module for every non-text \&\s-1URL\s0 that is fetched. Of course, if you are concerned with indexing speed you should be using the \-S prog method with spider.pl instead of \-S http. .PP If you are not spidering, but you still want to make use of the SWISH::Filter module for filtering you can use the DirTree.pl program (in \f(CW$prefix\fR/lib/swish\-e). This is a simple program that traverses the file system and uses SWISH::Filter for filtering. .PP Here's two examples of how to run a filter program, one using Swish\-e's \&\f(CW\*(C`FileFilter\*(C'\fR directive, another using a \f(CW\*(C`prog\*(C'\fR input method program. See the \fISwishSpiderConfig.pl\fR file for an example of using the SWISH::Filter module. .PP These filters simply use the program \f(CW\*(C`/bin/cat\*(C'\fR as a filter and only indexes .html files. .PP First, using the \f(CW\*(C`FileFilter\*(C'\fR method, here's the entire configuration file (swish.conf): .PP .Vb 3 \& IndexDir . \& IndexOnly .html \& FileFilter .html "/bin/cat" "'%p'" .Ve .PP and index with the command .PP .Vb 1 \& swish-e -c swish.conf -v 1 .Ve .PP Now, the same thing with using the \f(CW\*(C`\-S prog\*(C'\fR document source input method and a Perl program called catfilter.pl. You can see that's it's much more work than using the \f(CW\*(C`FileFilter\*(C'\fR method above, but provides a place to do additional processing. In this example, the \f(CW\*(C`prog\*(C'\fR method is only slightly faster. But if you needed a perl script to run as a FileFilter then \f(CW\*(C`prog\*(C'\fR will be significantly faster. .PP .Vb 3 \& #!/usr/local/bin/perl -w \& use strict; \& use File::Find; # for recursing a directory tree .Ve .PP .Vb 5 \& $/ = undef; \& find( \& { wanted => \e&wanted, no_chdir => 1, }, \& '.', \& ); .Ve .PP .Vb 3 \& sub wanted { \& return if -d; \& return unless /\e.html$/; .Ve .PP .Vb 1 \& my $mtime = (stat)[9]; .Ve .PP .Vb 3 \& my $child = open( FH, '-|' ); \& die "Failed to fork $!" unless defined $child; \& exec '/bin/cat', $_ unless $child; .Ve .PP .Vb 2 \& my $content = ; \& my $size = length $content; .Ve .PP .Vb 4 \& print <; \& } .Ve .PP And index with the command: .PP .Vb 1 \& swish-e -S prog -i ./catfilter.pl -v 1 .Ve .PP This example will probably not work under Windows due to the '\-|' open. A simple piped open may work just as well: .PP That is, replace: .PP .Vb 3 \& my $child = open( FH, '-|' ); \& die "Failed to fork $!" unless defined $child; \& exec '/bin/cat', $_ unless $child; .Ve .PP with this: .PP .Vb 1 \& open( FH, "/bin/cat $_ |" ) or die $!; .Ve .PP Perl will try to avoid running the command through the shell if meta characters are not passed to the open. See \f(CW\*(C`perldoc \-f open\*(C'\fR for more information. .PP \fIEh, but I just want to know how to index \s-1PDF\s0 documents!\fR .IX Subsection "Eh, but I just want to know how to index PDF documents!" .PP See the examples in the \fIconf\fR directory and the comments in the \fISwishSpiderConfig.pl\fR file. .PP See the previous question for the details on filtering. The method you decide to use will depend on how fast you want to index, and your comfort level with using Perl modules. .PP Regardless of the filtering method you use you will need to install the Xpdf packages available from http://www.foolabs.com/xpdf/. .PP \fII'm using Windows and can't get Filters or the prog input method to work!\fR .IX Subsection "I'm using Windows and can't get Filters or the prog input method to work!" .PP Both the \f(CW\*(C`\-S prog\*(C'\fR input method and filters use the \f(CW\*(C`popen()\*(C'\fR system call to run the external program. If your external program is, for example, a perl script, you have to tell Swish-e to run perl, instead of the script. Swish-e will convert forward slashes to backslashes when running under Windows. .PP For example, you would need to specify the path to perl as (assuming this is where perl is on your system): .PP .Vb 1 \& IndexDir e:/perl/bin/perl.exe .Ve .PP Or run a filter like: .PP .Vb 1 \& FileFilter .foo e:/perl/bin/perl.exe 'myscript.pl "%p"' .Ve .PP It's often easier to just install Linux. .PP \fIHow do I index non-English words?\fR .IX Subsection "How do I index non-English words?" .PP Swish-e indexes 8\-bit characters only. This is the \s-1ISO\s0 8859\-1 Latin\-1 character set, and includes many non-English letters (and symbols). As long as they are listed in \f(CW\*(C`WordCharacters\*(C'\fR they will be indexed. .PP Actually, you probably can index any 8\-bit character set, as long as you don't mix character sets in the same index and don't use libxml2 for parsing (see below). .PP The \f(CW\*(C`TranslateCharacters\*(C'\fR directive (SWISH-CONFIG) can translate characters while indexing and searching. You may specify the mapping of one character to another character with the \&\f(CW\*(C`TranslateCharacters\*(C'\fR directive. .PP \&\f(CW\*(C`TranslateCharacters :ascii7:\*(C'\fR is a predefined set of characters that will translate eight-bit characters to ascii7 characters. Using the \&\f(CW\*(C`:ascii7:\*(C'\fR rule will, for example, translate \*(L"\*(R" to \*(L"aac\*(R". This means: searching \*(L"elik\*(R", \*(L"elik\*(R" or \*(L"celik\*(R" will all match the same word. .PP Note: When using libxml2 for parsing, parsed documents are converted internally (within libxml2) to \s-1UTF\-8\s0. This is converted to \s-1ISO\s0 8859\-1 Latin\-1 when indexing. In cases where a string can not be converted from \s-1UTF\-8\s0 to \s-1ISO\s0 8859\-1 (because it contains non 8859\-1 characters), the string will be sent to Swish-e in \s-1UTF\-8\s0 encoding. This will results in some words indexed incorrectly. Setting \f(CW\*(C`ParserWarningLevel\*(C'\fR to 1 or more will display warnings when \s-1UTF\-8\s0 to 8859\-1 conversion fails. .PP \fICan I add/remove files from an index?\fR .IX Subsection "Can I add/remove files from an index?" .PP Not really. Swish-e currently has no way to add or remove items from its index. But, Swish-e indexes so quickly that it's often possible to reindex the entire document set when a file needs to be added, modified or removed. If you are spidering a remote site then consider caching documents locally compressed. .PP Incremental additions can be handled in a couple of ways, depending on your situation. It's probably easiest to create one main index every night (or every week), and then create an index of just the new files between main indexing jobs and use the \f(CW\*(C`\-f\*(C'\fR option to pass both indexes to Swish-e while searching. .PP You can merge the indexes into one index (instead of using \-f), but it's not clear that this has any advantage over searching multiple indexes. .PP How does one create the incremental index? .PP One method is by using the \f(CW\*(C`\-N\*(C'\fR switch to pass a file path to Swish-e when indexing. It will only index files that have a last modification date \f(CW\*(C`newer\*(C'\fR than the file supplied with the \f(CW\*(C`\-N\*(C'\fR switch. .PP This option has the disadvantage that Swish-e must process every file in every directory as if they were going to be indexed (the test for \f(CW\*(C`\-N\*(C'\fR is done last right before indexing of the file contents begin and after all other tests on the file have been completed) \*(-- all that just to find a few new files. .PP Also, if you use the Swish-e index file as the file passed to \f(CW\*(C`\-N\*(C'\fR there may be files that were added after indexing was started, but before the index file was written. This could result in a file not being added to the index. .PP Another option is to maintain a parallel directory tree that contains symlinks pointing to the main files. When a new file is added (or changed) to the main directory tree you create a symlink to the real file in the parallel directory tree. Then just index the symlink directory to generate the incremental index. .PP This option has the disadvantage that you need to have a central program that creates the new files that can also create the symlinks. But, indexing is quite fast since Swish-e only has to look at the files that need to be indexed. When you run full indexing you simply unlink (delete) all the symlinks. .PP Both of these methods have issues where files could end up in both indexes, or files being left out of an index. Use of file locks while indexing, and hash lookups during searches can help prevent these problems. .PP \fII run out of memory trying to index my files.\fR .IX Subsection "I run out of memory trying to index my files." .PP It's true that indexing can take up a lot of memory! Swish-e is extremely fast at indexing, but that comes at the cost of memory. .PP The best answer is install more memory. .PP Another option is use the \f(CW\*(C`\-e\*(C'\fR switch. This will require less memory, but indexing will take longer as not all data will be stored in memory while indexing. How much less memory and how much more time depends on the documents you are indexing, and the hardware that you are using. .PP Here's an example of indexing all .html files in /usr/doc on Linux. This first example is \fIwithout\fR \f(CW\*(C`\-e\*(C'\fR and used about 84M of memory: .PP .Vb 3 \& 270279 unique words indexed. \& 23841 files indexed. 177640166 total bytes. \& Elapsed time: 00:04:45 CPU time: 00:03:19 .Ve .PP This is \fIwith\fR \f(CW\*(C`\-e\*(C'\fR, and used about 26M or memory: .PP .Vb 3 \& 270279 unique words indexed. \& 23841 files indexed. 177640166 total bytes. \& Elapsed time: 00:06:43 CPU time: 00:04:12 .Ve .PP You can also build a number of smaller indexes and then merge together with \f(CW\*(C`\-M\*(C'\fR. Using \f(CW\*(C`\-e\*(C'\fR while merging will save memory. .PP Finally, if you do build a number of smaller indexes, you can specify more than one index when searching by using the \f(CW\*(C`\-f\*(C'\fR switch. Sorting large results sets by a property will be slower when specifying multiple index files while searching. .PP \fI\*(L"too many open files\*(R" when indexing with \-e option\fR .IX Subsection "too many open files when indexing with -e option" .PP Some platforms report \*(L"too many open files\*(R" when using the \-e economy option. The \-e feature uses many temporary files (something like 377) plus the index files and this may exceed your system's limits. .PP Depending on your platform you may need to set \*(L"ulimit\*(R" or \*(L"unlimit\*(R". .PP For example, under Linux bash shell: .PP .Vb 1 \& $ ulimit -n 1024 .Ve .PP Or under an old Sparc .PP .Vb 1 \& % unlimit openfiles .Ve .PP \fIMy system admin says Swish-e uses too much of the \s-1CPU\s0!\fR .IX Subsection "My system admin says Swish-e uses too much of the CPU!" .PP That's a good thing! That expensive \s-1CPU\s0 is supposed to be busy. .PP Indexing takes a lot of work \*(-- to make indexing fast much of the work is done in memory which reduces the amount of time Swish-e is waiting on I/O. But, there's two things you can try: .PP The \f(CW\*(C`\-e\*(C'\fR option will run Swish-e in economy mode, which uses the disk to store data while indexing. This makes Swish-e run somewhat slower, but also uses less memory. Since it is writing to disk more often it will be spending more time waiting on I/O and less time in \s-1CPU\s0. Maybe. .PP The other thing is to simply lower the priority of the job using the \&\fInice\fR\|(1) command: .PP .Vb 1 \& /bin/nice -15 swish-e -c search.conf .Ve .PP If concerned about searching time, make sure you are using the \-b and \-m switches to only return a page at a time. If you know that your result sets will be large, and that you wish to return results one page at a time, and that often times many pages of the same query will be requested, you may be smart to request all the documents on the first request, and then cache the results to a temporary file. The perl module File::Cache makes this very simple to accomplish. .Sh "Spidering" .IX Subsection "Spidering" \fIHow can I index documents on a web server?\fR .IX Subsection "How can I index documents on a web server?" .PP If possible, use the file system method \f(CW\*(C`\-S fs\*(C'\fR of indexing to index documents in you web area of the file system. This avoids the overhead of spidering a web server and is much faster. (\f(CW\*(C`\-S fs\*(C'\fR is the default method if \f(CW\*(C`\-S\*(C'\fR is not specified). .PP If this is impossible (the web server is not local, or documents are dynamically generated), Swish-e provides two methods of spidering. First, it includes the http method of indexing \f(CW\*(C`\-S http\*(C'\fR. A number of special configuration directives are available that control spidering (see \*(L"Directives for the \s-1HTTP\s0 Access Method Only\*(R" in SWISH-CONFIG). A perl helper script (swishspider) is included in the \fIsrc\fR directory to assist with spidering web servers. There are example configurations for spidering in the \fIconf\fR directory. .PP As of Swish-e 2.2, there's a general purpose \*(L"prog\*(R" document source where a program can feed documents to it for indexing. A number of example programs can be found in the \f(CW\*(C`prog\-bin\*(C'\fR directory, including a program to spider web servers. The provided spider.pl program is full-featured and is easily customized. .PP The advantage of the \*(L"prog\*(R" document source feature over the \*(L"http\*(R" method is that the program is only executed one time, where the swishspider.pl program used in the \*(L"http\*(R" method is executed once for every document read from the web server. The forking of Swish-e and compiling of the perl script can be quite expensive, time\-wise. .PP The other advantage .of the \f(CW\*(C`spider.pl\*(C'\fR program is that it's simple and efficient to add filtering (such as for \s-1PDF\s0 or \s-1MS\s0 Word docs) right into the spider.pl's configuration, and it includes features such as \s-1MD5\s0 checks to prevent duplicate indexing, options to avoid spidering some files, or index but avoid spidering. And since it's a perl program there's no limit on the features you can add. .PP \fIWhy does swish report \*(L"./swishspider: not found\*(R"?\fR .IX Subsection "Why does swish report ./swishspider: not found?" .PP Does the file \fIswishspider\fR exist where the error message displays? If not, either set the configuration option SpiderDirectory to point to the directory where the \fIswishspider\fR program is found, or place the \&\fIswishspider\fR program in the current directory when running swish\-e. .PP If you are running Windows, make sure \*(L"perl\*(R" is in your path. Try typing \fIperl\fR from a command prompt. .PP If you not running windows, make sure that the shebang line (the first line of the swishspider program that starts with #!) points to the correct location of perl. Typically this will be \fI/usr/bin/perl\fR or \fI/usr/local/bin/perl\fR. Also, make sure that you have execute and read permissions on \fIswishspider\fR. .PP The \fIswishspider\fR perl script is only used with the \-S http method of indexing. .PP \fII'm using the spider.pl program to spider my web site, but some large files are not indexed.\fR .IX Subsection "I'm using the spider.pl program to spider my web site, but some large files are not indexed." .PP The \f(CW\*(C`spider.pl\*(C'\fR program has a default limit of 5MB file size. This can be changed with the \f(CW\*(C`max_size\*(C'\fR parameter setting. See \f(CW\*(C`perldoc spider.pl\*(C'\fR for more information. .PP \fII still don't think all my web pages are being indexed.\fR .IX Subsection "I still don't think all my web pages are being indexed." .PP The \fIspider.pl\fR program has a number of debugging switches and can be quite verbose in telling you what's happening, and why. See \f(CW\*(C`perldoc spider.pl\*(C'\fR for instructions. .PP \fISwish is not spidering Javascript links!\fR .IX Subsection "Swish is not spidering Javascript links!" .PP Swish cannot follow links generated by Javascript, as they are generated by the browser and are not part of the document. .PP \fIHow do I spider other websites and combine it with my own (filesystem) index?\fR .IX Subsection "How do I spider other websites and combine it with my own (filesystem) index?" .PP You can either merge \f(CW\*(C`\-M\*(C'\fR two indexes into a single index, or use \f(CW\*(C`\-f\*(C'\fR to specify more than one index while searching. .PP You will have better results with the \f(CW\*(C`\-f\*(C'\fR method. .Sh "Searching" .IX Subsection "Searching" \fIHow do I limit searches to just parts of the index?\fR .IX Subsection "How do I limit searches to just parts of the index?" .PP If you can identify \*(L"parts\*(R" of your index by the path name you have two options. .PP The first options is by indexing the document path. Add this to your configuration: .PP .Vb 1 \& MetaNames swishdocpath .Ve .PP Now you can search for words or phrases in the path name: .PP .Vb 1 \& swish-e -w 'foo AND swishdocpath=(sales)' .Ve .PP So that will only find documents with the word \*(L"foo\*(R" and where the file's path contains \*(L"sales\*(R". That might not works as well as you like, though, as both of these paths will match: .PP .Vb 2 \& /web/sales/products/index.html \& /web/accounting/private/sales_we_messed_up.html .Ve .PP This can be solved by searching with a phrase (assuming \*(L"/\*(R" is not a WordCharacter): .PP .Vb 2 \& swish-e -w 'foo AND swishdocpath=("/web/sales/")' \& swish-e -w 'foo AND swishdocpath=("web sales")' (same thing) .Ve .PP The second option is a bit more powerful. With the \f(CW\*(C`ExtractPath\*(C'\fR directive you can use a regular expression to extract out a sub-set of the path and save it as a separate meta name: .PP .Vb 2 \& MetaNames department \& ExtractPath department regex !^/web/([^/]+).+$!$1/ .Ve .PP Which says match a path that starts with \*(L"/web/\*(R" and extract out everything after that up to, but not including the next \*(L"/\*(R" and save it in variable \f(CW$1\fR, and then match everything from the \*(L"/\*(R" onward. Then replace the entire matches string with \f(CW$1\fR. And that gets indexed as meta name \&\*(L"department\*(R". .PP Now you can search like: .PP .Vb 1 \& swish-e -w 'foo AND department=sales' .Ve .PP and be sure that you will only match the documents in the /www/sales/* path. Note that you can map completely different areas of your file system to the same metaname: .PP .Vb 3 \& # flag the marketing specific pages \& ExtractPath department regex !^/web/(marketing|sales)/.+$!marketing/ \& ExtractPath department regex !^/internal/marketing/.+$!marketing/ .Ve .PP .Vb 2 \& # flag the technical departments pages \& ExtractPath department regex !^/web/(tech|bugs)/.+$!tech/ .Ve .PP Finally, if you have something more complicated, use \f(CW\*(C`\-S prog\*(C'\fR and write a perl program or use a filter to set a meta tag when processing each file. .PP \fIHow can I limit searches to the title, body, or comment?\fR .IX Subsection "How can I limit searches to the title, body, or comment?" .PP Use the \f(CW\*(C`\-t\*(C'\fR switch. .PP \fII can't limit searches to title/body/comment.\fR .IX Subsection "I can't limit searches to title/body/comment." .PP Or, \fII can't search with meta names, all the names are indexed as \&\*(L"plain\*(R".\fR .PP Check in the config.h file if #define \s-1INDEXTAGS\s0 is set to 1. If it is, change it to 0, recompile, and index again. When \s-1INDEXTAGS\s0 is 1, \s-1ALL\s0 the tags are indexed as plain text, that is you index \*(L"title\*(R", \*(L"h1\*(R", and so on, \s-1AND\s0 they loose their indexing meaning. If \s-1INDEXTAGS\s0 is set to 0, you will still index meta tags and comments, unless you have indicated otherwise in the user config file with the IndexComments directive. .PP Also, check for the \f(CW\*(C`UndefinedMetaTags\*(C'\fR setting in your configuration file. .PP \fII've tried running the included \s-1CGI\s0 script and I get a \*(L"Internal Server Error\*(R"\fR .IX Subsection "I've tried running the included CGI script and I get a Internal Server Error" .PP Debugging \s-1CGI\s0 scripts are beyond the scope of this document. Internal Server Error basically means \*(L"check the web server's log for an error message\*(R", as it can mean a bad shebang (#!) line, a missing perl module, \s-1FTP\s0 transfer error, or simply an error in the program. The \s-1CGI\s0 script \fIswish.cgi\fR in the \fIexample\fR directory contains some debugging suggestions. Type \f(CW\*(C`perldoc swish.cgi\*(C'\fR for information. .PP There are also many, many \s-1CGI\s0 FAQs available on the Internet. A quick web search should offer help. As a last resort you might ask your webadmin for help... .PP \fIWhen I try to view the swish.cgi page I see the contents of the Perl program.\fR .IX Subsection "When I try to view the swish.cgi page I see the contents of the Perl program." .PP Your web server is not configured to run the program as a \s-1CGI\s0 script. This problem is described in \f(CW\*(C`perldoc swish.cgi\*(C'\fR. .PP \fIHow do I make Swish-e highlight words in search results?\fR .IX Subsection "How do I make Swish-e highlight words in search results?" .PP Short answer: .PP Use the supplied swish.cgi script located in the \fIexamples\fR directory. .PP Long answer: .PP Swish-e can't because it doesn't have access to the source documents when returning results, of course. But a front-end program of your creation can highlight terms. Your program can open up the source documents and then use regular expressions to replace search terms with highlighted or bolded words. .PP But, that will fail with all but the most simple source documents. For \s-1HTML\s0 documents, for example, you must parse the document into words and tags (and comments). A word you wish to highlight may span multiple \&\s-1HTML\s0 tags, or be a word in a \s-1URL\s0 and you wish to highlight the entire link text. .PP Perl modules such as HTML::Parser and XML::Parser make word extraction possible. Next, you need to consider that Swish-e uses settings such as WordCharacters, BeginCharacters, EndCharacters, IgnoreFirstChar, and IgnoreLast, char to define a \*(L"word\*(R". That is, you can't consider that a string of characters with white space on each side is a word. .PP Then things like TranslateCharacters, and \s-1HTML\s0 Entities may transform a source word into something else, as far as Swish-e is concerned. Finally, searches can be limited by metanames, so you may need to limit your highlighting to only parts of the source document. Throw phrase searches and stopwords into the equation and you can see that it's not a trivial problem to solve. .PP All hope is not lost, thought, as Swish-e does provide some help. Using the \f(CW\*(C`\-H\*(C'\fR option it will return in the headers the current index (or indexes) settings for WordCharacters (and others) required to parse your source documents as it parses them during indexing, and will return a \&\*(L"Parsed Words:\*(R" header that will show how it parsed the query internally. If you use fuzzy indexing (word stemming, soundex, or metaphone) then you will also need to stem each word in your document before comparing with the \*(L"Parsed Words:\*(R" returned by Swish\-e. The Swish-e stemming code is available either by using the Swish-e Perl module or C library (included with the swish-e distribution), or by using the SWISH::Stemmer module available on \s-1CPAN\s0. Also on \s-1CPAN\s0 is the module Text::DoubleMetaphone. .PP \fIDo filters effect the performance during search?\fR .IX Subsection "Do filters effect the performance during search?" .PP No. Filters (FileFilter or via \*(L"prog\*(R" method) are only used for building the search index database. During search requests there will be no filter calls. .Sh "I have read the \s-1FAQ\s0 but I still have questions about using Swish\-e." .IX Subsection "I have read the FAQ but I still have questions about using Swish-e." The Swish-e discussion list is the place to go. http://swish\-e.org/. Please do not email developers directly. The list is the best place to ask questions. .PP Before you post please read \fI\s-1QUESTIONS\s0 \s-1AND\s0 \s-1TROUBLESHOOTING\s0\fR located in the \s-1INSTALL\s0 page. You should also search the Swish-e discussion list archive which can be found on the swish-e web site. .PP In short, be sure to include in the following when asking for help. .IP "* The swish-e version (./swish\-e \-V)" 4 .IX Item "The swish-e version (./swish-e -V)" .PD 0 .IP "* What you are indexing (and perhaps a sample), and the number of files" 4 .IX Item "What you are indexing (and perhaps a sample), and the number of files" .IP "* Your Swish-e configuration file" 4 .IX Item "Your Swish-e configuration file" .IP "* Any error messages that Swish-e is reporting" 4 .IX Item "Any error messages that Swish-e is reporting" .PD .SH "Document Info" .IX Header "Document Info" $Id: \s-1SWISH\-FAQ\s0.pod,v 1.31.2.2 2003/12/18 00:10:06 whmoseley Exp $ .PP \&. 0[swish-e.man]SWISH-LIBRARY.1F9Fcv 2A6ʢ99y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SWISH-LIBRARY 1" .TH SWISH-LIBRARY 1 "2004-01-24" "2.4.2" "SWISH-E Documentation" .SH "NAME" SWISH\-LIBRARY \- Interface to the Swish\-e C library .SH "What is the Swish-e C library?" .IX Header "What is the Swish-e C library?" The C library in an interface to the Swish-e search code. It provides a way to embed Swish-e into your applications. This \s-1API\s0 is based on Swish-e version 2.3. .PP \&\fBNote:\fR This is a \s-1NEW\s0 \s-1API\s0 as of Swish-e version 2.3. The C language interface has changed as has the perl interface to Swish\-e. The new Perl interface is the \s-1SWISH::API\s0 module and is included with the Swish-e distribution. The old \s-1SWISHE\s0 perl module has been rewritten to work with the new \s-1API\s0. The \s-1SWISHE\s0 perl module is no longer included with the Swish-e distribution, but can be downloaded from the Swish-e web site. .PP The advantage of the library is that the index files or files can be opened one time and many queries made on the open index. This saves the startup time required to fork and run the swish-e binary, and the expensive time of opening up the index file. Some benchmarks have shown a three fold increase in speed. .PP The downside is that your program now has more code and data in it (the index tables can use quite a bit of memory), and if a fatal error happens in swish it will bring down your program. These are things to think about, especially if embedding swish into a web server such as Apache where there are many processes serving requests. .PP The best way to learn about the library is to look at two files included with the Swish-e distribution that make use of the library. .IP "src/libtest.c" 4 .IX Item "src/libtest.c" This file gives a basic overview of linking a C program with the Swish-e library. Not all available functions are used in that example, but it should give you a good overview of building a C program with swish\-e. .Sp To build and run libtest chdir to the src directory and run the commands: .Sp .Vb 2 \& $ make libtest \& $ ./libtest [optional name of index file] .Ve .Sp You will be prompted for the search words. The default index used is \fIindex.swish\-e\fR. This can be overridden by placing a list of index files in a quote-protected string. .Sp .Vb 1 \& $ ./libtest 'index1 index2 index3' .Ve .IP "perl/API.xs" 4 .IX Item "perl/API.xs" The \fI\s-1API\s0.xs\fR file is a Perl \*(L"xsub\*(R" interface to the C library and is part of the \&\s-1SWISH::API\s0 Perl module. This is an object-oriented interface to the Swish-e library and demonstrates how the various search \*(L"objects\*(R" are created by C calls and how they are destroyed when no longer needed. .SH "Installing the Swish-e library" .IX Header "Installing the Swish-e library" The Swish-e library is installed when you run \*(L"make install\*(R" when building Swish\-e. No extra installation steps are required. .PP The library consists of a header file \*(L"swish\-e.h\*(R" and a library \&\*(L"libswish\-e.*\*(R" that can either be a static or shared library depending on your platform. .SH "Library Overview" .IX Header "Library Overview" When you first attach to an index file (or index files) you are returned a \*(L"swish handle\*(R". From the handle you create one or more \*(L"search objects\*(R" which holds the parameters to query the index, such as the query string, sort order, search phrase delimiter, limit parameters and \s-1HTML\s0 structure bits. The \*(L"object\*(R" is really just a pointer to a C structure, but it's helpful to think of it as an object that data and functionality associated with it. .PP The search object is used to query the index. A query returns a \*(L"results object\*(R". The results object holds the number of hits, the parsed query per index, and the result set. The results object keeps track of the current position in the result set. You may \*(L"seek\*(R" to a specific record within the result set (useful for displaying a page of results). .PP Finally, a result object represents a single result from the result list. A result object provides access to the result's properties (such as file name, rank, etc.). .PP In addition to results, there are functions available to access the header values stored in the index file, functions to check and report errors, and a few utility functions. .SH "Available Functions" .IX Header "Available Functions" Below is the list of available function included in the Swish-e C language \s-1API\s0. .PP These functions (and typedefs) are defined in the \fIswish\-e.h\fR header file. The common objects (e.g. structures) used are: .PP .Vb 5 \& SW_HANDLE - swish handle that associates with an index file \& SW_SEARCH - search "object" that holds search parameters \& SW_RESULTS - results "object" that holds a result set \& SW_RESULT - a single result used for accessing the result's properties \& SW_FUZZYWORD - used for fuzzy (stemming) word conversion .Ve .Sh "Searching" .IX Subsection "Searching" .IP "\s-1SW_HANDLE\s0 SwishInit(char *IndexFiles);" 4 .IX Item "SW_HANDLE SwishInit(char *IndexFiles);" This functions opens and reads the header info of the index files included in IndexFiles string. The string should contain a space-separated list of index files. .Sp .Vb 2 \& SW_HANDLE myhandle; \& myhandle = SwishInit("file1.idx"); .Ve .Sp Typically you will open a handle at the beginning of your program and use it to make multiple queries on an index. .Sp This function will always return a swish handle. You must check for errors, and on error free the memory used by the handle, or abort. .Sp Here's an example of aborting: .Sp .Vb 4 \& SW_HANDLE swish_handle; \& swish_handle = SwishInit("file1.idx file2.idx"); \& if ( SwishError( swish_handle ) ) \& SwishAbortLastError( swish_handle ); .Ve .Sp And here's an example of catching the error: .Sp .Vb 8 \& SW_HANDLE swish_handle; \& swish_handle = SwishInit("file1.idx file2.idx"); \& if ( SwishError( swish_handle ) ) \& { \& printf("Failed to connect to swish. %s\en", SwishErrorString( swish_handle ) ); \& SwishClose( swish_handle ); /* free the memory used */ \& return 0; \& } .Ve .Sp You may have more than one handle active at a time. .Sp Swish-e will not tell you if the index file changes on disk (such as after reindexing). In a persistent environment (e.g. mod_perl) the calling program should check to see if the index file has changed on disk. A common way to do this is to store the inode number before opening the index file(s), and then stat the file name every so often and reopen the index files if the inode number changes. .IP "void SwishClose(\s-1SW_HANDLE\s0 handle);" 4 .IX Item "void SwishClose(SW_HANDLE handle);" This function closes and frees the memory of a Swish handle. Every swish handle should be freed when done searching the index. Failing to close the handle will result in a memory leak. .IP "\s-1SW_SEARCH\s0 New_Search_Object(\s-1SW_HANDLE\s0 handle, const char *query);" 4 .IX Item "SW_SEARCH New_Search_Object(SW_HANDLE handle, const char *query);" Returns a new search \*(L"object\*(R". The search object holds the parameters used for searching an index. A single search object can be used to query the index multiple times. The available settings listed below are \*(L"sticky\*(R" in that they remain set on the search object until change. .IP "void SwishSetStructure( \s-1SW_SEARCH\s0 srch, int structure );" 4 .IX Item "void SwishSetStructure( SW_SEARCH srch, int structure );" Sets the \*(L"structure\*(R" flag in the search object. The structure flag is used to limit searches to parts of \s-1HTML\s0 files (such as to the title or headers). The default is to not limit. This provides the functionality of the \-H command line switch. .IP "void SwishPhraseDelimiter( \s-1SW_SEARCH\s0 srch, char delimiter );" 4 .IX Item "void SwishPhraseDelimiter( SW_SEARCH srch, char delimiter );" Sets the phrase delimiter character. The default is double\-quotes. .IP "void SwishSetSort( \s-1SW_SEARCH\s0 srch, char *sort );" 4 .IX Item "void SwishSetSort( SW_SEARCH srch, char *sort );" Sets the sort order of the results. This is the same as the \-s switch used with the swish-e binary. .IP "void SwishSetQuery( \s-1SW_SEARCH\s0 srch, char *query );" 4 .IX Item "void SwishSetQuery( SW_SEARCH srch, char *query );" Sets the query string in the search object. This typically is not needed since it can be set when creating the search object or when executing a query. .IP "void SwishSetSearchLimit( \s-1SW_SEARCH\s0 srch, char *propertyname, char *low, char *hi);" 4 .IX Item "void SwishSetSearchLimit( SW_SEARCH srch, char *propertyname, char *low, char *hi);" Sets the limit parameters for a search. Provides the same functionality as the \-L command line switch. You may specify a range of property values that search results must be within. You may call \fISwishSetSearchLimit()\fR only one time for each property (but can set limits on more than one property at a time). .Sp Unlike the other settings on the search object, once you run a query on the search object you must call \fISwishResetSearchLimit()\fR to change or clear the limit parameters. .IP "void SwishResetSearchLimit( \s-1SW_SEARCH\s0 srch );" 4 .IX Item "void SwishResetSearchLimit( SW_SEARCH srch );" Resets the limits set on a search object set by \fISwishSetSearchLimit()\fR. .IP "void Free_Search_Object( \s-1SW_SEARCH\s0 srch );" 4 .IX Item "void Free_Search_Object( SW_SEARCH srch );" Frees the search object. This must be called when done with the search object. Generally, you can reuse a search object for multiple queries so typically you would call this right before calling \fISwishClose()\fR. .Sp You may free the search object before freeing and generated results objects. .IP "\s-1SW_RESULTS\s0 SwishExecute( \s-1SW_SEARCH\s0 search, const char *query);" 4 .IX Item "SW_RESULTS SwishExecute( SW_SEARCH search, const char *query);" Searches the index or indexes based on the parameters in the search object. Returns a results object. See below for functions to access the data stored in the results object. .Sp You should always check for errors after calling \fISwishExecute()\fR. .IP "\s-1SW_RESULTS\s0 SwishQuery(\s-1SW_HANDLE\s0, const char *words );" 4 .IX Item "SW_RESULTS SwishQuery(SW_HANDLE, const char *words );" This is a short-cut function that bypasses the creation of a search object (actually, bypasses the need to create and free a search object). This only allows passing in a query string; other search parameters cannot be set. The results are sorted by rank. .Sp You should always check for errors after calling \fISwishQuery()\fR. .Sh "Reading Results" .IX Subsection "Reading Results" .IP "int SwishHits( \s-1SW_RESULTS\s0 results );" 4 .IX Item "int SwishHits( SW_RESULTS results );" Returns the number of results in the results object. .IP "\s-1SWISH_HEADER_VALUE\s0 SwishParsedWords( \s-1SW_RESULTS\s0, const char *index_name );" 4 .IX Item "SWISH_HEADER_VALUE SwishParsedWords( SW_RESULTS, const char *index_name );" Returns the tokenized query. Words are split by WordCharacters and stopwords are removed. The parsed words are useful for highlighting search terms in your program. .Sp The \*(L"index_name\*(R" is the name of the index supplied in the \fISwishInit()\fR function call. .Sp Returns a \s-1SWISH_HEADER_VALUE\s0 union of type \s-1SWISH_LIST\s0 which is a char **. See src/libtest.c for an example of accessing the strings in this list, but in general you may cast this to a (char **). .IP "\s-1SWISH_HEADER_VALUE\s0 SwishRemovedStopwords( \s-1SW_RESULTS\s0, const char *index_name );" 4 .IX Item "SWISH_HEADER_VALUE SwishRemovedStopwords( SW_RESULTS, const char *index_name );" Returns a list of stopwords removed from the input query. .Sp Returns a \s-1SWISH_HEADER_VALUE\s0 union of type \s-1SWISH_LIST\s0 which is a char **. See src/libtest.c for an example of accessing the strings in this list, but in general you may cast this to a (char **). .IP "int SwishSeekResult( \s-1SW_RESULTS\s0, int position );" 4 .IX Item "int SwishSeekResult( SW_RESULTS, int position );" Sets the current s4eek position in the list of results, with position zero being the first record (unlike \-b where one is the first result). .Sp Returns the position or a negative number on error. .IP "\s-1SW_RESULT\s0 SwishNextResult( \s-1SW_RESULTS\s0 );" 4 .IX Item "SW_RESULT SwishNextResult( SW_RESULTS );" Returns the next result, or \s-1NULL\s0 if not more results are available. .Sp The result object returned does not need to be freed after use (unlike the swish handle, search object, and results object). .IP "const char *SwishResultPropertyStr(\s-1SW_RESULT\s0, char *propertyname);" 4 .IX Item "const char *SwishResultPropertyStr(SW_RESULT, char *propertyname);" This function is mostly useful for testing as it returns odd results on errors. .Sp Aborts if called with a \s-1NULL\s0 \s-1SW_RESULT\s0 object .Sp Returns a string value of the specified property. .Sp Returns the empty string "" if the current result does not have the specified property assigned. .Sp Returns the string \*(L"(null)\*(R" on invalid property name (i.e. property name is not defined in the index) and sets an error (see below) indicating the invalid property name. .Sp The string returned does not need to be freed, but is only valid for the current result. If you wish to save the string you must copy it locally. .Sp Dates are formatted using the hard-coded format string: \*(L"%Y\-%m\-%d \f(CW%H:\fR%M:%S\*(R" in localtime. .IP "unsigned long SwishResultPropertyULong(\s-1SW_RESULT\s0 r, char *propertyname);" 4 .IX Item "unsigned long SwishResultPropertyULong(SW_RESULT r, char *propertyname);" Returns a numeric property as an unsigned long. Numeric properties are used for both PropertyNamesNumeric and PropertyNamesDate type of properties. Dates are returned as a unix timestamp as reported by the system when the index was created. .Sp Swish-e will abort if called with a \s-1NULL\s0 \s-1SW_RESULT\s0 object. Without the \s-1SW_RESULT\s0 object swish-e cannot set any error codes. .Sp On error returns \s-1UMAX_LONG\s0. This is commonly defined in limits.h. Check \fISwishError()\fR (see below) for the type of error. .Sp If \fISwishError()\fR returns false (zero) then it simply means that this result does not have any data for the specified property. .Sp If \fISwishError()\fR returns true (non\-zero) then either the propertyname specified is invalid, or the property requested is not a numeric (or date) property (e.g. it's a string property). .Sp See below on how to fetch the specific error message when \fISwishError()\fR is true. .IP "PropValue *getResultPropValue (\s-1SW_RESULT\s0 r, char *propertyname, int \s-1ID\s0 );" 4 .IX Item "PropValue *getResultPropValue (SW_RESULT r, char *propertyname, int ID );" This is a low-level function to fetch a property regardless of type. This is likely the best function for accessing properties. .Sp Swish-e will abort if called with a \s-1NULL\s0 \s-1SW_RESULT\s0 object. Propertyname is the name of the property. \s-1ID\s0 is the id number of the property, if known. \s-1ID\s0 is not normally used in the \s-1API\s0, but it's purpose is to avoid looking up the property \s-1ID\s0 for every result displayed. .Sp The return PropValue is a structure that contains a flag to indicate the type, and a union that holds the property value. They flags and structure are defined in swish\-e.h. .Sp The property must be copied locally and the returned \*(L"PropValue\*(R" value must be freed by calling \fIfreeResultPropValue()\fR to avoid a memory leak. .Sp On error returns \s-1NULL\s0. Check \fISwishError()\fR (see below) for the type of error. .Sp If returns \s-1NULL\s0 but \fISwishError()\fR returns false (zero) then it simply means that this result does not have any data for the specified property. .Sp If \fISwishError()\fR returns true (non\-zero) then the property name specified is invalid (i.e. not defined for the index). .Sp See below on how to fetch the specific error message when \fISwishError()\fR is true. .Sp See perl/API.xs for an example on using this function. .IP "void freeResultPropValue(void)" 4 .IX Item "void freeResultPropValue(void)" Frees the \*(L"PropValue\*(R" returned after calling \fIgetResultPropValue()\fR. .IP "void Free_Results_Object( \s-1SW_RESULTS\s0 results );" 4 .IX Item "void Free_Results_Object( SW_RESULTS results );" Frees the results object (frees the result set). This must be called when done reading the results and before calling \fISwishClose()\fR. .Sh "Accessing the Index Header Values" .IX Subsection "Accessing the Index Header Values" Each index file has associated header values that describe the index. These functions provide access to this data. The header data is returned as a union \s-1SWISH_HEADER_VALUE\s0, and a pointer to a \s-1SWISH_HEADER_TYPE\s0 is passed in and the returned value indicates the type of data that is returned. See src/libtest.c and perl/API.xs for examples. .IP "const char **SwishHeaderNames( \s-1SW_HANDLE\s0 );" 4 .IX Item "const char **SwishHeaderNames( SW_HANDLE );" Returns the list of possible header names. This list is the same for all index files of a given version of Swish\-e. It provides a way to gain access to all headers without having to list them in your program. .IP "const char **SwishIndexNames( \s-1SW_HANDLE\s0 );" 4 .IX Item "const char **SwishIndexNames( SW_HANDLE );" Returns a list of index files opened. This is just the list of index files specified in the \fISwishInit()\fR call. You need the name of the index file to access a specific index's header values. .IP "\s-1SWISH_HEADER_VALUE\s0 SwishHeaderValue( \s-1SW_HANDLE\s0, const char *index_name, const char *cur_header, \s-1SWISH_HEADER_TYPE\s0 *type );" 4 .IX Item "SWISH_HEADER_VALUE SwishHeaderValue( SW_HANDLE, const char *index_name, const char *cur_header, SWISH_HEADER_TYPE *type );" Fetches the header value for the given index file, and the header name. The call sets the \*(L"type\*(R" passed in to the type of value returned. .Sp See src/libtest.c and perl/API.xs for examples. .IP "\s-1SWISH_HEADER_VALUE\s0 SwishResultIndexValue( \s-1SW_RESULT\s0, const char *name, \s-1SWISH_HEADER_TYPE\s0 *type );" 4 .IX Item "SWISH_HEADER_VALUE SwishResultIndexValue( SW_RESULT, const char *name, SWISH_HEADER_TYPE *type );" This is like \fISwishHeaderValue()\fR above, but instead of supplying an index file name and a swish handle, supply a result object and the header value is fetched from the result's related index file. .Sh "Checking for Errors" .IX Subsection "Checking for Errors" You should check for errors after all calls. The last error is stored in the swish handle object, and is only valid until the next operation (which resets the error flags). .PP Currently, some errors are flagged as \*(L"critical\*(R" errors. In these cases you should destroy (by calling the \fISwishClose()\fR function ) the current swish handle. If you have other objects in scope (e.g. a search object or results object) destroy those first. .PP The types of errors that are critical can be seen in src/error.c. Currently the list includes: .PP .Vb 6 \& Could not open index file \& Unknown index file format \& Index file(s) is empty \& Index file error \& Invalid swish handle \& Invalid results object .Ve .IP "int SwishError( \s-1SW_HANDLE\s0 );" 4 .IX Item "int SwishError( SW_HANDLE );" This returns true if an error condition exists. It returns the error number, which is a integer less than zero on error. This should be checked before calling any of the other error functions below. .IP "const char *SwishErrorString( \s-1SW_HANDLE\s0 );" 4 .IX Item "const char *SwishErrorString( SW_HANDLE );" This returns a general text description of the current error. .IP "const char *SwishLastErrorMsg( \s-1SW_HANDLE\s0 );" 4 .IX Item "const char *SwishLastErrorMsg( SW_HANDLE );" In some cases this will return a string with specifics about the current error. For example, \fISwishErrorString()\fR may return \*(L"Unknown metaname\*(R", but \fISwishLastErrorMsg()\fR will return a string with the name of the unknown metaname. .IP "int SwishCriticalError( \s-1SW_HANDLE\s0 );" 4 .IX Item "int SwishCriticalError( SW_HANDLE );" Returns true if the current error condition is a critical error. On critical errors you should free up any current objects and call \fISwishClose()\fR as swish may be in an unstable state. .IP "void SwishAbortLastError( \s-1SW_HANDLE\s0 );" 4 .IX Item "void SwishAbortLastError( SW_HANDLE );" This is a convenience function that will format and print the last error message, and then abort the program. .IP "void set_error_handle( \s-1FILE\s0 *where );" 4 .IX Item "void set_error_handle( FILE *where );" Sets where errors and warnings are printed (when printed by swish). For historical reasons, when swish-e first starts up errors and warnings are sent to stdout. .IP "void SwishErrorsToStderr( void );" 4 .IX Item "void SwishErrorsToStderr( void );" A convenience method to send errors to stderr instead of stdout. .Sh "Utility Functions" .IX Subsection "Utility Functions" .IP "const char *SwishWordsByLetter(\s-1SWISH\s0 * sw, char *indexname, char c);" 4 .IX Item "const char *SwishWordsByLetter(SWISH * sw, char *indexname, char c);" Returns all the words in the index \*(L"indexname\*(R" that begin with the letter passed in. Returns \s-1NULL\s0 if the name of the index file is invalid. .Sp This fuction may change in the future since only 8\-bit chars can currently be used. .IP "char * SwsishStemWord( \s-1SW_HANDLE\s0 sw, char *in_word );" 4 .IX Item "char * SwsishStemWord( SW_HANDLE sw, char *in_word );" Deprecated .Sp This can be used to convert a word to its stem. It uses only the original Porter Stemmer. .IP "\s-1SW_FUZZYWORD\s0 SwishFuzzyWord( \s-1SW_RESULT\s0 r, char *word );" 4 .IX Item "SW_FUZZYWORD SwishFuzzyWord( SW_RESULT r, char *word );" Stems \*(L"word\*(R" based on the fuzzy mode selected during indexing. .Sp The fuzzy mode used during indexing is stored in the index file. Since each result is linked to a given index file this method allows stemming a word based on it's index file. .Sp One possible use for this is to highlight search terms in a document summary, which would be based on a given result. .Sp The methods below can be used to access the data returned. The \&\s-1SW_FUZZYWORD\s0 object must be freed when done to avoid a memory leak. .IP "const char **SwishFuzzyWordList( \s-1SW_FUZZYWORD\s0 fw );" 4 .IX Item "const char **SwishFuzzyWordList( SW_FUZZYWORD fw );" Returns a null terminated list of strings returned by the stemmer. In most cases this will be a single string. .Sp Here's an example: .Sp .Vb 8 \& SW_FYZZYWORD fuzzy_word = SwishFuzzyWord( result ); \& const char **word_list = SwishFuzzyWordList( fuzzy_word ); \& while ( *word_list ) \& { \& printf("%s\en", *word_list ); \& word_list++; \& } \& SwishFuzzyWordFree( fuzzy_word ); .Ve .Sp If the stemmer does not convert the string (for example attempting to stem numeric data) the word_list will contain the original word. To tell if the stemmer actually stemmed the word check the return value with \&\fISwishFuzzyWordError()\fR. .IP "int SwishFuzzyWordError( \s-1SW_FUZZYWORD\s0 fw );" 4 .IX Item "int SwishFuzzyWordError( SW_FUZZYWORD fw );" This returns zero if the stemming operation was sucessfull, otherwise it returns a value indicating the reason the word was not stemmed. The return values are defined in the swish-e src/stemmer.h file. .Sp Not all stemmers set this value correctly. But since \fISwishFuzzyWordList()\fR will return a valid string regardless of the return value, you can often just ignore this setting. That's what I do. .IP "int SwishFuzzyWordCount( \s-1SW_FUZZYWORD\s0 fw );" 4 .IX Item "int SwishFuzzyWordCount( SW_FUZZYWORD fw );" Returns the count of string in the word list available by calling \&\fISwishFuzzyWordList()\fR. .Sp This is normally just one, but in the case of DoubleMetaphone it can be one or two (i.e. DoubleMetaphone can return one or two strings). .IP "const char *SwishFuzzyMode( \s-1SW_RESULT\s0 r );" 4 .IX Item "const char *SwishFuzzyMode( SW_RESULT r );" Returns the name of the stemmer used for the given result (which is related to an index). .IP "void SwishFuzzyWordFree( \s-1SW_FUZZYWORD\s0 fw );" 4 .IX Item "void SwishFuzzyWordFree( SW_FUZZYWORD fw );" Frees the memory used by the \s-1SW_FUZZYWORD\s0. .SH "Bug-Reports" .IX Header "Bug-Reports" Please report bug reports to the Swish-e discussion group. Feel also free to improve or enhance this feature. .SH "Author" .IX Header "Author" Original interface: Aug 2000 Jose Ruiz jmruiz@boe.es .PP Updated: Aug 22, 2002 \- Bill Moseley .PP Interface redesigned for Swish-e version 2.3 Oct 17, 2002 \- Bill Moseley .SH "Document Info" .IX Header "Document Info" $Id: \s-1SWISH\-LIBRARY\s0.pod,v 1.9.2.3 2004/01/24 18:30:33 whmoseley Exp $ .PP \&. 0[swish-e.man]SWISH-RUN.1iYi[ 2A6ʢYYy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SWISH-RUN 1" .TH SWISH-RUN 1 "2004-01-24" "2.4.2" "SWISH-E Documentation" .SH "NAME" SWISH\-RUN \- Running Swish\-e and Command Line Switches .SH "OVERVIEW" .IX Header "OVERVIEW" The Swish-e program is controlled by command line arguments (called \&\fIswitches\fR). Often, it is run manually from a shell (command prompt), or from a program such as a \s-1CGI\s0 script that passes the command line arguments to swish. .PP Note: A number of the command line switches may be specified in the Swish-e configuration file specified with the \f(CW\*(C`\-c\*(C'\fR command line argument. Please see SWISH-CONFIG for a complete description of available configuration file directives. .PP There are two basic operating modes of Swish\-e: indexing and searching. There are command line arguments that are unique to each mode, and others that apply to both (yet may have different meaning depending on the operating mode). These command line arguments are listed below, grouped by: .PP \&\s-1INDEXING\s0 \*(-- describes the command line arguments used while indexing. .PP \&\s-1SEARCHING\s0 \*(-- lists the command line arguments used while searching. .PP \&\s-1OTHER\s0 \s-1SWITCHES\s0 \*(-- lists switches that don't apply to searching or indexing. .PP Beginning with Swish-e version 2.1, you may embed its search engine into your applications. Please see SWISH-LIBRARY. .SH "INDEXING" .IX Header "INDEXING" Swish-e indexing is initiated by passing \fIcommand line arguments\fR to swish. The command line arguments used for \fIsearching\fR are described in \s-1SEARCHING\s0. Also, see SWISH-SEARCH for examples of searching with Swish\-e. .PP Swish-e usage: .PP .Vb 2 \& swish-e [-i dir file ... ] [-c file] [-f file] [-l] \e \& [-v (num)] [-S method(fs|http|prog)] [-N path] .Ve .PP The \f(CW\*(C`\-h\*(C'\fR switch (help) will list the available Swish-e command line arguments: .PP .Vb 1 \& swish-e -h .Ve .PP Typically, most if not all indexing settings are placed in a configuration file (specified with the \f(CW\*(C`\-c\*(C'\fR switch). Once the configuration file is setup indexing is initiated as: .PP .Vb 1 \& swish-e -c /path/to/config/file .Ve .PP See SWISH-CONFIG for information on the configuration file. .PP Security Note: If the swish binary is named \fIswish-search\fR then swish will not allow any operation that would cause swish to write to the index file. .PP When indexing it may be advisable to index to a temporary file, and then after indexing has successfully completed rename the file to the final location. This is especially important when replacing an index that is currently in use. .PP .Vb 3 \& swish-e -c swish.config -f index.tmp \& [check return code from swish or look for err: output] \& mv index.tmp index.swish-e .Ve .Sh "Indexing Command Line Arguments" .IX Subsection "Indexing Command Line Arguments" .IP "\-i *directories and/or files* (input file)" 4 .IX Item "-i *directories and/or files* (input file)" This specifies the directories and/or files to index. Directories will be indexed recursively. This is typically specified in the configuration file with the \fBIndexDir\fR directive instead of on the command line. Use of this switch overrides the configuration file settings. .IP "\-S [fs|http|prog] (document source/access mode)" 4 .IX Item "-S [fs|http|prog] (document source/access mode)" This specifies the method to use for accessing documents to index. Can be either \f(CW\*(C`fs\*(C'\fR for local indexing via the file system (the default), \&\f(CW\*(C`http\*(C'\fR for spidering, or \f(CW\*(C`prog\*(C'\fR for reading documents from an external program. .Sp Located in the \f(CW\*(C`conf\*(C'\fR directory are example configuration files that demonstrate indexing with the different document source methods. .Sp See the SWISH-FAQ for a discussion on the different indexing methods, and the difference between spidering with the http method vs. using the file system method. .RS 4 .IP "fs \- file system" 4 .IX Item "fs - file system" The \f(CW\*(C`fs\*(C'\fR method simply reads files from a local (or networked) drive. This is the default method if the \f(CW\*(C`\-S\*(C'\fR switch is not specified. See SWISH-CONFIG for configuration directives specific to the \f(CW\*(C`fs\*(C'\fR method. .IP "http \- spider a web server" 4 .IX Item "http - spider a web server" The \f(CW\*(C`http\*(C'\fR method is used to spider web servers. It uses an included helper program called \fIswishspider\fR. See SWISH-CONFIG for configuration directives specific to the \f(CW\*(C`http\*(C'\fR method. .Sp Security Note: Under Windows swish passes the URLs fetched from remote documents through the shell (swish uses the \fIsystem()\fR command for running \fIswishspider\fR under Windows), and this may be considered an additional security risk. .Sp The \f(CW\*(C`http\*(C'\fR method is deprecated (or at least not very well appreciated). Consider using the \f(CW\*(C`prog\*(C'\fR method described below for spidering. There's a spider program available in the \&\fIprog-bin\fR directory for use with the \f(CW\*(C`prog\*(C'\fR method. Here's a number of limitation with this method that are solved with the \f(CW\*(C`prog\*(C'\fR method: .RS 4 .IP "*" 4 swishspider only spiders standard links. Frames and other links are not followed. .IP "*" 4 By default, this method of spidering only indexes files that have a content type of \*(L"text/*\*(R" (e.g. text/plain, text/html, text/xml). You should use \f(CW\*(C`DefaultContents\*(C'\fR and \f(CW\*(C`IndexContents\*(C'\fR to map file extensions to parsers used by swish (e.g. \f(CW\*(C`IndexContents HTML* .html .htm\*(C'\fR), but this will fail where a document does not have a file extension. .IP "*" 4 Swish\-e's \f(CW\*(C`FileFilter\*(C'\fR directive can be used with the \f(CW\*(C`http\*(C'\fR access method, although it requires a separate process (in addition to the swsihspider process) for each document filtered. .IP "*" 4 The SWISH::Filter modules can be used with the swishspider program. SWISH::Filter provides a general purpose filtering system (see SWISH::Filter documentation). To use SWISH::Filter set \s-1PERL5LIB\s0 to point to the location of the \s-1SWISH\s0 module name space (typically /usr/local/lib/swish\-e under Unix). For example: .Sp .Vb 2 \& export PERL5LIB=/usr/local/lib/swish-e # bash, bourne shells \& setenv PERL5LIB /usr/local/lib/swish-e # csh, tcsh .Ve .Sp or under Windows .Sp .Vb 1 \& set PERL5LIB=c:\eprogram files\eswish-e2.4\elib\eswish-e .Ve .Sp SWISH::Filter is not enabled by default due to the overhead of loading the modules for every document fetched. .Sp The Swish-e distribution includes perl modules in the SWISH::Filters::* namespace to make converting non-text documents into a format that Swish-e can parse easy. As mentioned above, the helper script \&\fIswishspider\fR will use these modules if can be found via \s-1PERL5LIB\s0. These modules only provide an interface to programs that do the conversion. For example, you will need to download and install the \&\*(L"catdoc\*(R" program to convert MSWord documents into text for indexing. Please see \&\fIfilters/README\fR to see how to use this filter system. .RE .RS 4 .RE .IP "prog \- general purpose access method" 4 .IX Item "prog - general purpose access method" The \f(CW\*(C`prog\*(C'\fR method is new to Swish-e version 2.2. It's designed as a general purpose method to feed documents to swish from an external program. .Sp For example, the external program can read a database (e.g. MySQL), spider a web server, or convert documents from one format to another (e.g. pdf to html). Or, you can simply use it to read the files of the file system (like \f(CW\*(C`\-S fs\*(C'\fR), yet provide you with full control of what files are indexed. .Sp The external program name to run is passed to swish either by the IndexDir directive, or via the \f(CW\*(C`\-i\*(C'\fR option. .Sp The program specified should be an absolute path as swish-e will attempt to \fIstat()\fR the program to make sure it exists. Swish does this to help in error reporting. .Sp If the program specified with \-i or IndexDir is not an absolute path (i.e. does not include \*(L"/\*(R" ) then swish-e will append the \*(L"libexecdir\*(R" directory defined during configuration. Typically, libexecdir is set to \&\*(L"$prefix/lib/swish\-e\*(R" (/usr/local/lib/swish\-e), but is platform and installation dependent. Running swish-e \-h will report the directory. .Sp For example, the \-S prog program \*(L"spider.pl\*(R" is a Perl helper program for use with \-S prog and is installed in libexecdir. .Sp .Vb 2 \& IndexDir spider.pl \& SwishProgParameters default http://localhost/index.html .Ve .Sp and swish-e will find spider.pl in libexecdir. .Sp Additional parameters may be passed to the external program via the SwishProgParameters directive. In the example above swish-e will pass two parameters to spider.pl, \*(L"default\*(R" and \&\*(L"http://localhost/index.html\*(R". .Sp A special name \*(L"stdin\*(R" may be used with \f(CW\*(C`\-i\*(C'\fR or IndexDir which tells swish to read from standard input instead of from an external program. See example below. .Sp The external program prints to standard output (which swish captures) a set of headers followed by the content of the file to index. The output looks similar to an email message or a \s-1HTTP\s0 document returned by a web server in that it includes name/value pairs of headers, a blank line, and the content. .Sp The content length is determined by a content-length header supplied to swish by the program; there is no \*(L"end of record\*(R" character or flag sent between documents. Therefore, it is critical that the content-length header is correct. This is a common source of errors. .Sp One advantage of this method (over using filters, for example) is that the external program is run only once for the entire indexing job, instead of once for every document. This avoids forking and creating a new process for every document, and makes a huge difference when your external program is something like perl that has a large startup cost. .Sp Here's a simple example written in Perl: .Sp .Vb 2 \& #!/usr/local/bin/perl -w \& use strict; .Ve .Sp .Vb 11 \& # Build a document \& my $doc = < \& \& Document Title \& \& \& This is the text. \& \& \& EOF .Ve .Sp .Vb 4 \& # Prepare the headers for swish \& my $path = 'Example.file'; \& my $size = length $doc; \& my $mtime = time; .Ve .Sp .Vb 6 \& # Output the document (to swish) \& print <er to one of the types Swish-e understands. For example, .Sp .Vb 1 \& my $doc_type = 'HTML*' if $response->content_type =~ m!text/html!' .Ve .Sp This header is not required. .RE .RS 4 .Sp The above example program only returns one document and exits, which is not very useful. Normally, your program would read data from some source, such as files or a database, format as \&\s-1XML\s0, \s-1HTML\s0, or text, and pass them to swish, one after another. The \f(CW\*(C`Content\-Length:\*(C'\fR header tells swish where each document ends \*(-- there is not any special \*(L"end of record\*(R" character or marker. .Sp To index with the above example you need to make sure that the program is executable (and that the path to perl is correct), and then call swish telling to run in \f(CW\*(C`prog\*(C'\fR mode, and the name of the program to use for input. .Sp .Vb 2 \& % chmod 755 example.pl \& % ./swish-e -S prog -i ./example.pl .Ve .Sp Programs can and should be tested prior to running swish. For example: .Sp .Vb 1 \& % ./example.pl > test.out .Ve .Sp A few more useful example programs are provided in the swish-e distribution located in the \fIprog-bin\fR directory. Some include documentation: .Sp .Vb 2 \& % cd prog-bin \& % perldoc spider.pl .Ve .Sp Others are small examples that include comments: .Sp .Vb 2 \& % cd prog-bin \& % less DirTree.pl .Ve .Sp The \fIspider.pl\fR program can be used as a replacement for the \fI\-S http\fR method. It is far more feature-rich and offers much more control over indexing. .Sp If you use the special program name \*(L"stdin\*(R" with \f(CW\*(C`\-i\*(C'\fR or IndexDir then swish-e will read from standard input instead of from a program. For example: .Sp .Vb 1 \& % ./example.pl --count=1000 /path/to/data | ./swish-e -S prog -i stdin .Ve .Sp This is basically the same as using a swish-e configuration file of: .Sp .Vb 2 \& SwishProgParameters --count=1000 /path/to/data \& IndexDir ./example.pl .Ve .Sp in a config file and running .Sp .Vb 1 \& % ./swish-e -S prog -c swish.conf .Ve .Sp This gives an easy way to run swish without a configuration file with a \f(CW\*(C`\-S prog\*(C'\fR program that requires parameters. It also means you can capture data to a file and then index more once with the same data: .Sp .Vb 3 \& % ./example.pl /path/to/data --count=1000 > docs.txt \& % cat docs.txt | ./swish-e -S prog -i stdin -c normal_index \& % cat docs.txt | ./swish-e -S prog -i stdin -c fuzzy_index .Ve .Sp Using \*(L"stdin\*(R" might also be useful for programs that call swish (instead of swish calling the program). .Sp (The reason \*(L"stdin\*(R" is used instead of the more common \*(L"\-\*(R" dash is due to the rotten way swish parses the command line. This should be fixed in the future.) .Sp The \f(CW\*(C`prog\*(C'\fR method bypasses some of the configuration parameters available to the file system method \*(-- settings such as \&\f(CW\*(C`IndexOnly\*(C'\fR, \f(CW\*(C`FileRules\*(C'\fR, \f(CW\*(C`FileMatch\*(C'\fR and \f(CW\*(C`FollowSymLinks\*(C'\fR are ignored when using the \f(CW\*(C`prog\*(C'\fR method. It's expected that these operations are better accomplished in the external program before passing the document onto swish. In other words, when using the \f(CW\*(C`prog\*(C'\fR method, only send the documents to swish that you want indexed. .Sp You may use swish's filter feature with the \f(CW\*(C`prog\*(C'\fR method, but performance will be better if you run filtering programs from within your external program. See also \fIfilters/README\fR for an example how to easily add document converstion and filtering into your Perl-based programs. .Sp \&\fBNotes when using \-S prog on \s-1MS\s0 Windows\fR .Sp Windows does not use the shebang (#!) line of a program to determine the program to run. So, when running, for example, a perl program you may need to specify the perl.exe binary as the program, and use the \&\f(CW\*(C`SwishProgParameters\*(C'\fR to name the file. .Sp .Vb 2 \& IndexDir e:/perl/bin/perl.exe \& SwishProgParameters read_database.pl .Ve .Sp Swish will replace the forward slashes with backslashes before running the command specified with \&\f(CW\*(C`IndexDir\*(C'\fR. Swish uses the \fIpopen\fR\|(3) command which passes the command through the shell. .RE .RE .RS 4 .RE .IP "\-f *indexfile* (index file)" 4 .IX Item "-f *indexfile* (index file)" If you are indexing, this specifies the file to save the generated index in, and you can only specify one file. See also \fBIndexFile\fR in the configuration file. .Sp If you are searching, this specifies the index files (one or more) to search from. The default index file is index.swish\-e in the current directory. .IP "\-c *file ...* (configuration files)" 4 .IX Item "-c *file ...* (configuration files)" Specify the configuration file(s) to use for indexing. This file contains many directives that control how Swish-e proceeds. See SWISH-CONFIG for a complete listing of configuration file directives. .Sp Example: .Sp .Vb 1 \& swish-e -c docs.conf .Ve .Sp If you specify a directory to index, an index file, or the verbose option on the command\-line, these values will override any specified in the configuration file. .Sp You can specify multiple configuration files. For example, you may have one configuration file that has common site-wide settings, and another for a specific index. .Sp Examples: .Sp .Vb 3 \& 1) swish-e -c swish-e.conf \& 2) swish-e -i /usr/local/www -f index.swish-e -v -c swish-e.conf \& 3) swish-e -c swish-e.conf stopwords.conf .Ve .RS 4 .IP "1" 3 .IX Item "1" The settings in the configuration file will be used to index a site. .IP "2" 3 .IX Item "2" These command-line options will override anything in the configuration file. .IP "3" 3 .IX Item "3" The variables in swish\-e.conf will be read, then the variable in stopwords.conf will be read. Note that if the same variables occur in both files, older values may be written over. .RE .RS 4 .RE .IP "\-e (economy mode)" 4 .IX Item "-e (economy mode)" For large sites indexing may require more \s-1RAM\s0 than is available. The \f(CW\*(C`\-e\*(C'\fR switch tells swish to use disk space to store data structures while indexing, saving memory. This option is recommended if swish uses so much \s-1RAM\s0 that the computer begins to swap excessively, and you cannot increase available memory. The trade-off is slightly longer indexing times, and a busy disk drive. .IP "\-l (symbolic links)" 4 .IX Item "-l (symbolic links)" Specifying this option tells swish to follow symbolic links when indexing. The configuration file value \fBFollowSymLinks\fR will override the command-line value. .Sp The default is not to follow symlinks. A small improvement in indexing time my result from enabling FollowSymLinks since swish does not need to stat every directory and file processed to determine if it is a symbolic link. .IP "\-N path (index only newer files)" 4 .IX Item "-N path (index only newer files)" The \f(CW\*(C`\-N\*(C'\fR option takes a path to a file, and only files \fInewer\fR than the specified file will be indexed. This is helpful for creating incremental indexes \*(-- that is, indexes that contain just files added since the last full index was created of all files. .Sp Example (bad example) .Sp .Vb 1 \& swish-e -c config.file -N index.swish-e -f index.new .Ve .Sp This will index as normal, but only files with a modified date newer than \fIindex.swish\-e\fR will be indexed. .Sp This is a bad example because it uses \fIindex.swish\-e\fR which one might assume was the date of last indexing. The problem is that files might have been added between the time indexing read the directory and when the \fIindex.swish\-e\fR file was created \*(-- which can be quite a bit of time for very large indexing jobs. .Sp The only solution is to prevent any new file additions while full indexing is running. If this is impossible then it will be slightly better to do this: .Sp Full indexing: .Sp .Vb 3 \& touch indexing_time.file \& swish-e -c config.file -f index.tmp \& mv index.tmp index.full .Ve .Sp Incremental indexing: .Sp .Vb 2 \& swish-e -c config.file -N indexing_time.file -f index.tmp \& mv index.tmp index.incremental .Ve .Sp Then search with .Sp .Vb 1 \& swish-e -w foo -f index.full index.incremental .Ve .Sp or merge the indexes .Sp .Vb 3 \& swish-e -M index.full index.incremental index.tmp \& mv index.tmp index.swish-e \& swish-e -w foo .Ve .IP "\-v [0|1|2|3] (verbosity level)" 4 .IX Item "-v [0|1|2|3] (verbosity level)" The \f(CW\*(C`\-v\*(C'\fR option can take a numerical value from 0 to 3. Specify 0 for completely silent operation and 3 for detailed reports. .Sp If no value is given then 1 is assumed. See also \fBIndexReport\fR in the configuration file. .Sp Warnings and errors are reported regardless of the verbosity level. In addition, all error and warnings are written to standard out. This is for historical reasons (many scripts exist that parse standard out for error messages). .SH "SEARCHING" .IX Header "SEARCHING" The following command line arguments are available when searching with Swish\-e. These switches are used to select the index to search, what fields to search, and how and what to print as results. .PP This section just lists the available command line arguments and their usage. Please see SWISH-SEARCH for detailed searching instructions. .PP \&\fBWarning\fR: If using Swish-e via a \s-1CGI\s0 interface, please see \s-1CGI\s0 Danger! .PP Security Note: If the swish binary is named \fIswish-search\fR then swish will not allow any operation that would cause swish to write to the index file. .Sh "Searching Command Line Arguments" .IX Subsection "Searching Command Line Arguments" .IP "\-w *word1 word2 ...* (query words)" 4 .IX Item "-w *word1 word2 ...* (query words)" This performs a case-insensitive search using a number of keywords. If no index file to search is specified (via the \f(CW\*(C`\-f\*(C'\fR switch), swish-e will try to search a file called index.swish\-e in the current directory. .Sp .Vb 1 \& swish-e -w word .Ve .Sp Phrase searching is accomplished by placing the quote delimiter (a double-quote by default) around the search phrase. .Sp .Vb 1 \& swish-e -w 'word or "this phrase"' .Ve .Sp Search would should be protected from the shell by quotes. Typically, this is single quotes when running under Unix. .Sp Under Windows \fIcommand.com\fR you may not need to use quotes, but you will need to backslash the quotes used to delimit phrases: .Sp .Vb 1 \& swish-e -w \e"a phrase\e" .Ve .Sp The phrase delimiter can be set with the \f(CW\*(C`\-P\*(C'\fR switch. .Sp The search may be limited to a \fIMetaName\fR. For example: .Sp .Vb 1 \& swish-e -w meta1=(foo or baz) .Ve .Sp will only search within the \fBmeta1\fR tag. .Sp Please see SWISH-SEARCH for a description of MetaNames .IP "\-f *file1 file2 ...* (index files)" 4 .IX Item "-f *file1 file2 ...* (index files)" Specifies the index file(s) used while searching. More than one file may be listed, and each file will be searched. If no \f(CW\*(C`\-f\*(C'\fR switch is specified then the file \fIindex.swish\-e\fR in the current directory will be used as the index file. .IP "\-m *number* (max results)" 4 .IX Item "-m *number* (max results)" While searching, this specifies the maximum number of results to return. The default is to return all results. .Sp This switch is often used in conjunction with the \f(CW\*(C`\-b\*(C'\fR switch to return results one page at a time (strongly recommended for large indexes). .IP "\-b *number* (beginning result)" 4 .IX Item "-b *number* (beginning result)" Sets the \fIbegining\fR search result to return (records are numbered from 1). This switch can be used with the \f(CW\*(C`\-m\*(C'\fR switch to return results in groups or pages. .Sp Example: .Sp .Vb 2 \& swish-e -w 'word' -b 1 -m 20 # first 'page' \& swish-e -w 'word' -b 21 -m 20 # second 'page' .Ve .IP "\-t HBthec (context searching)" 4 .IX Item "-t HBthec (context searching)" The \f(CW\*(C`\-t\*(C'\fR option allows you to search for words that exist only in specific \s-1HTML\s0 tags. Each character in the string you specify in the argument to this option represents a different tag in which to search for the word. H means all \s-1HEAD\s0 tags, B stands for \s-1BODY\s0 tags, t is all \s-1TITLE\s0 tags, h is H1 to H6 (header) tags, e is emphasized tags (this may be B, I, \&\s-1EM\s0, or \s-1STRONG\s0), and c is \s-1HTML\s0 comment tags .Sp search only in header () tags .Sp .Vb 1 \& swish-e -w word -t h .Ve .IP "\-d *string* (delimiter)" 4 .IX Item "-d *string* (delimiter)" Set the delimiter used when printing results. By default, Swish-e separates the output fields by a space, and places double-quotes around the document title. This output may be hard to parse, so it is recommended to use \f(CW\*(C`\-d\*(C'\fR to specify a character or string used as a separator between fields. .Sp The string \f(CW\*(C`dq\*(C'\fR means \*(L"double\-quotes\*(R". .Sp .Vb 5 \& swish-e -w word -d , # single char \& swish-e -w word -d :: # string \& swish-e -w word -d '"' # double quotes under Unix \& swish-e -w word -d \e" # double quotes under Windows \& swish-e -w word -d dq # double quotes .Ve .Sp The following control characters may also be specified: \f(CW\*(C`\et \er \en \ef\*(C'\fR. .Sp Warning: This string is passed directly to \fIsprintf()\fR and therefore exposes a securty hole. Do not allow user data to set \-d format strings directly. .IP "\-P *character*" 4 .IX Item "-P *character*" Sets the delimiter used for phrase searches. The default is double quotes \f(CW\*(C`"\*(C'\fR. .Sp Some examples under bash: (be careful about you shell metacharacters) .Sp .Vb 2 \& swish-e -P ^ -w 'title=^words in a phrase^' \& swish-e -P \e' -w "title='words in a pharse"' .Ve .IP "\-p *property1 property2 ...* (display properties)" 4 .IX Item "-p *property1 property2 ...* (display properties)" This causes swish to print the listed property in the search results. The properties are returned in the order they are listed in the \f(CW\*(C`\-p\*(C'\fR argument. .Sp Properties are defined by the \fBProperNames\fR directive in the configuration file (see SWISH-CONFIG) and properties must also be defined in \fBMetaNames\fR. Swish stores the text of the meta name as a \fIproperty\fR, and then will return this text while searching if this option is used. .Sp Properties are very useful for returning data included in a source documnet without having to re-read the source document while searching. For example, this could be used to return a short document description. See also see \fBDocument Summeries\fR and PropertyNames in SWISH-CONFIG. .Sp To return the subject and category properties while indexing. .Sp .Vb 1 \& swish-e -w word -p subject category .Ve .Sp Properties are returned in double quotes. If a property contains a double quote it is \s-1HTML\s0 escaped ("). See the \f(CW\*(C`\-x\*(C'\fR switch for a more advanced method of returning a list of properties. .Sp \&\s-1NOTE:\s0 it is necessary to have indexed with the proper PropertyNames directive in the user config file in order to use this option. .IP "\-s *property [asc|desc] ...* (sort)" 4 .IX Item "-s *property [asc|desc] ...* (sort)" Normally, search results are printed out in order of relevancy, with the most relevant listed first. The \f(CW\*(C`\-s\*(C'\fR sort switch allows you to sort results in order of a specified \fIproperty\fR, where a \fIproperty\fR was defined using the \fBMetaNames\fR and \fBPropertyNames\fR directives during indexing (see SWISH-CONFIG). .Sp The string passed can include the strings \f(CW\*(C`asc\*(C'\fR and \f(CW\*(C`desc\*(C'\fR to specify the sort order, and more 6than one property may be specified to sort on more than one key. .Sp Examples: .Sp sort by title property ascending order .Sp .Vb 1 \& -s title .Ve .Sp sort descending by title, ascending by name .Sp .Vb 1 \& -s title desc name asc .Ve .Sp Note: Swish limits sort keys to 100 characters. This limit can be changed by changing \s-1MAX_SORT_STRING_LEN\s0 in src/config.h and rebuilding swish\-e. .IP "\-L limit to a range of property values (Limit)" 4 .IX Item "-L limit to a range of property values (Limit)" \&\fBThis is an experimental feature!\fR .Sp The \f(CW\*(C`\-L\*(C'\fR switch can be used to limit search results to a range of property values .Sp Example: .Sp .Vb 1 \& swish-e -w foo -L swishtitle a m .Ve .Sp finds all documents that contain the word \f(CW\*(C`foo\*(C'\fR, and where the document's title is in the range of \f(CW\*(C`a\*(C'\fR to \f(CW\*(C`m\*(C'\fR, inclusive. By default, the case of the property is ignored, but this can be changed by using PropertyNamesCompareCase configuation directive. .Sp Limiting may be done with user-defined properties, as well. .Sp For example, if you indexed documents that contain a created timestamp in a meta tag: .Sp .Vb 1 \& .Ve .Sp Then you tell Swish that you have a property called \f(CW\*(C`created_on\*(C'\fR, and that it's a timestamp. .Sp .Vb 1 \& PropertyNamesDate created_on .Ve .Sp After indexing you will be able to limit documents to a range of timestamps: .Sp .Vb 1 \& -w foo -L created_on 946684800 949363199 .Ve .Sp will find documents containing the word foo and that have a created_on date from the start of Jan 1, 2000 to the end of Jan 31, 2000. .Sp Note: swish currently does not parse dates; Unix timestamps must be used. .Sp Two special formats can be used: .Sp .Vb 2 \& -L swishtitle <= m \& -L swishtitle >= m .Ve .Sp Finds titles less than or equal, or grater than or equal to the letter \f(CW\*(C`m\*(C'\fR. .Sp This feature will not work with \f(CW\*(C`swishrank\*(C'\fR or \f(CW\*(C`swishdbfile\*(C'\fR properties. .Sp This feature takes advantages of the pre-sorted tables built by swish during indexing to make this feature fast while searching. You should see in the indexing output a line such as: .Sp .Vb 1 \& 6 properties sorted. .Ve .Sp That indicates that six pre-sorted tables were built during indexing. By default, all properties are presorted while indexing. What properties are pre-sorted can be controlled by the configuration parameter \f(CW\*(C`PreSortedIndex\*(C'\fR. .Sp Using the \f(CW\*(C`\-L\*(C'\fR switch on a property that was not pre-sorted will still work, but may be \fImuch\fR slower during searching. .Sp Note that the PropertyNamesSortKeyLength setting is used for sorting properties. Using too small a PropertyNamesSortKeyLength could result in \-L selecting the wrong properties due to incomplete sorting. .Sp This is an experimental feature, and its use and interface are subject to change. .IP "\-x formatstring (extended output format)" 4 .IX Item "-x formatstring (extended output format)" The \f(CW\*(C`\-x\*(C'\fR switch defines the output format string. The format string can contain plain text and property names (including swish-defined internal property names) and is used to generate the output for every result. In addition, the output format of the property name can be controlled with C\-like printf format strings. This feature overrides the cmdline switches \f(CW\*(C`\-d\*(C'\fR and \&\f(CW\*(C`\-p\*(C'\fR, and a warning will be generated if \f(CW\*(C`\-d\*(C'\fR or \f(CW\*(C`\-p\*(C'\fR are used with \f(CW\*(C`\-x\*(C'\fR. .Sp Warning: The format string (fmt) is passed directly to \fIsprintf()\fR and therefore exposes a securty hole. Do not allow user data to set \-x format strings directly. .Sp For example, to return just the title, one per line, in the search results: .Sp .Vb 1 \& swish-e -w ... -x '\en' ... .Ve .Sp Note: the \f(CW\*(C`\en\*(C'\fR may need to be protected from your shell. .Sp See also ResultExtFormatName for a way to define \fInamed\fR format strings in the swish configuration file. .Sp \&\fBFormat of \*(L"formatstring\*(R":\fR .Sp .Vb 1 \& "texttexttext..." .Ve .Sp Where \fBpropertyname\fR is: .RS 4 .IP "*" 4 the name of a user property as specified with the config file directive \*(L"PropertyNames\*(R" .IP "*" 4 the name of a swish Auto property (see below). These properties are defined automatically by swish \*(-- you do not need to specify them with PropertyNames directive. (This may change in the future.) .RE .RS 4 .Sp propertynames must be placed within "<\*(L" and \*(R">". .Sp \&\fBUser properties:\fR .Sp Swish-e allows you to specify certain \s-1META\s0 tags within your documents that can be used as \fBdocument properties\fR. The contents of any \s-1META\s0 tag that has been identified as a document property can be returned as part of the search results. Doucment properties must be defined while indexing using the \fBPropertyNames\fR configuration directive (see SWISH-CONFIG). .Sp Examples of user-defined PropertyNames: .Sp .Vb 5 \& \& \& \& \& .Ve .Sp \&\fBAuto properties:\fR .Sp Swish defines a number of \*(L"Auto\*(R" properties for each document indexed. These are available for output when using the \f(CW\*(C`\-x\*(C'\fR format. .Sp .Vb 10 \& Name Type Contents \& -------------- ------- ---------------------------------------------- \& swishreccount Integer Result record counter \& swishtitle String Document title \& swishrank Integer Result rank for this hit \& swishdocpath String URL or filepath to document \& swishdocsize Integer Document size in bytes \& swishlastmodified Date Last modified date of document \& swishdescription String Description of document (see:StoreDescription) \& swishdbfile String Path of swish database indexfile .Ve .Sp The Auto properties can also be specified using shortcuts: .Sp .Vb 10 \& Shortcut Property Name \& -------- -------------- \& %c swishreccount \& %d swishdescription \& %D swishlastmodified \& %I swishdbfile \& %p swishdocpath \& %r swishrank \& %l swishdocsize \& %t swishtitle .Ve .Sp For example, these are equivalent: .Sp .Vb 2 \& -x '::\en' \& -x '%r:%p:%t\en' .Ve .Sp Use a double percent sign \*(L"%%\*(R" to enter a literal percent sign in the output. .Sp \&\fBFormatstrings of properties:\fR .Sp Properties listed in an \f(CW\*(C`\-x\*(C'\fR format string can include format control strings. These \*(L"propertyformats\*(R" are used to control how the contents of the associated property are printed. Property formats are used like C\-language printf formats. The property format is specified by including the attribute \*(L"fmt\*(R" within the property tag. .Sp Format strings cannot be used with the \*(L"%\*(R" shortcuts described above. .Sp General syntax: .Sp .Vb 1 \& -x '' .Ve .Sp where \f(CW\*(C`subfmt\*(C'\fR controls the output format of \f(CW\*(C`propertyname\*(C'\fR. .Sp Examples of property format strings: .Sp .Vb 3 \& date type: \& string type: \& integer type: .Ve .Sp Please see the manual pages for \fIstrftime\fR\|(3) and \fIsprintf\fR\|(3) for an explanation of format strings. Note: some versions of strftime do not offer the \f(CW%s\fR format string (number of seconds since the Epoch), so swish provides a special format string \*(L"%ld\*(R" to display the number of seconds since the Epoch. .Sp The first character of a property format string defines the delimiter for the format string. For example, .Sp .Vb 3 \& -x " ...\en" \& -x " ...\en" \& -x " ...\en" .Ve .Sp \&\fBStandard predefined formats:\fR .Sp If you ommit the sub\-format, the following formats are used: .Sp .Vb 4 \& String type: "%s" (like printf char *) \& Integer type: "%d" (like printf int) \& Float type: "%f" (like printf double) \& Date type: "%Y-%m-%d %H:%M:%S" (like strftime) .Ve .Sp \&\fBText in \*(L"formatstring\*(R" or \*(L"propfmtstr\*(R":\fR .Sp Text will be output as-is in format strings (and property format strings). Special characters can be escaped with a backslash. To get a new line for each result hit, you have to include the Newline-Character \*(L"\en\*(R" at the end of \*(L"fmtstr\*(R". .Sp .Vb 5 \& -x "||\en" \& -x "Count=, Rank=\en" \& -x "Title=\e\e" \& -x 'Date: \en' \& -x 'Date in seconds: \en' .Ve .Sp \&\fBControl/Escape charcters:\fR .Sp you can use C\-like control escapes in the format string: .Sp .Vb 3 \& known controls: \ea, \eb, \ef, \en, \er, \et, \ev, \& digit escapes: \exhexdigits \e0octaldigits \& character escapes: \eanychar .Ve .Sp Example, .Sp .Vb 1 \& swish -x "%c\et%r\et%p\et\e"\e"\en" .Ve .Sp \&\fBExamples of \-x format strings:\fR .Sp .Vb 5 \& -x "%c|%r|%p|%t|%D|%d\en" \& -x "%c|%r|%p|%t||%d\en" \& -x "\et\et\et\en \& -x "xml_out: \e\e>\e\en" \& -x "xml_out: \en" .Ve .RE .IP "\-H [0|1|2|3|] (header output verbosity)" 4 .IX Item "-H [0|1|2|3|] (header output verbosity)" The \f(CW\*(C`\-H n\*(C'\fR switch generates extened \fIheader\fR output. This is most useful when searching more than one index file at a time by specifying more than one index file with the \f(CW\*(C`\-f\*(C'\fR switch. \&\f(CW\*(C`\-H 2\*(C'\fR will generate a set of headers specific to each index file. This gives access to the settings used to generate each index file. .Sp Even when searching a single index file, \f(CW\*(C`\-H n\*(C'\fR will provided additional information about the index file, how it was indexed, and how swish is interperting the query. .Sp .Vb 5 \& -H 0 : print no header information, output only search result entries. \& -H 1 : print standard result header (default). \& -H 2 : print additional header information for each searched index file. \& -H 3 : enhanced header output (e.g. print stopwords). \& -H 9 : print diagnostic information in the header of the results (changed from: C<-v 4>) .Ve .SH "OTHER SWITCHES" .IX Header "OTHER SWITCHES" .IP "\-V (version)" 4 .IX Item "-V (version)" Print the current version. .IP "\-k *letter* (print out keywords)" 4 .IX Item "-k *letter* (print out keywords)" The \f(CW\*(C`\-k\*(C'\fR switch is used for testing and will cause swish to print out all keywords in the index beginning with that letter. You may enter \f(CW\*(C`\-k '*'\*(C'\fR to generate a list of all words indexed by swish. .IP "\-D *index file* (debug index)" 4 .IX Item "-D *index file* (debug index)" The \-D option is no longer supported in version 2.2. .IP "\-T *options* (trace/debug swish)" 4 .IX Item "-T *options* (trace/debug swish)" The \-T option is used to print out information that may be helpful when debugging swish\-e's operation. This option replaced the \f(CW\*(C`\-D\*(C'\fR option of previous versions. .Sp Running \f(CW\*(C`\-T help\*(C'\fR will print out a list of available *options* .SH "Merging Index Files" .IX Header "Merging Index Files" In previous versions of Swish-e indexing would require a very large amount of memory and the indexing process could be very slow. Merging provided a way to index in chunks and then combine the indexes together into a single index. .PP Indexing is much faster now and uses much less memory, and with the \f(CW\*(C`\-e\*(C'\fR switch very little memory is needed to index a large site. .PP Still, at times it can be useful to merge different index files into one file for searching. This could be because you want to keep separate site indexes and a common one for a global search, or you have separate collections of documents that you wish to search all at one time, but manage separately. .IP "\-M *index1 index2 ... indexN out_index" 4 .IX Item "-M *index1 index2 ... indexN out_index" Merges the indexes specified on the command line \*(-- the last file name entered is the output file. The output index must not exist (otherwise merge will not proceed). .Sp Only indexes that were indexed with common settings may be merged. (e.g. don't mix stemming and non-stemming indexes, or indexes with different WordCharacter settings, etc.). .Sp Use the \f(CW\*(C`\-e\*(C'\fR switch while merging to reduce memory usage. .Sp Merge generates progress messages regardless of the setting of \f(CW\*(C`\-v\*(C'\fR. .IP "\-c *configuration file*" 4 .IX Item "-c *configuration file*" Specify a configuration file while indexing to add administrative information to the output index file. .SH "Document Info" .IX Header "Document Info" $Id: \s-1SWISH\-RUN\s0.pod,v 1.33.2.2 2004/01/24 18:31:05 whmoseley Exp $ .PP \&. 0[swish-e.man]swish-e.1# #2 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "SWISH-E 1" .TH SWISH-E 1 "2003-05-16" "2.4.1" "SWISH-E Documentation" .SH "NAME" Swish\-e \- A Search Engine .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 8 \& swish [-e] [-i dir file ... ] [-S system] [-c file] [-f file] [-l] [-v (num)] \& swish -w word1 word2 ... [-f file1 file2 ...] \e \& [-P phrase_delimiter] [-p prop1 ...] [-s sortprop1 [asc|desc] ...] \e \& [-m num] [-t str] [-d delim] [-H (num)] [-x output_format] \& swish -k (char|*) [-f file1 file2 ...] \& swish -M index1 index2 ... outputfile \& swish -N /path/to/compare/file \& swish -V .Ve .PP See the the \s-1\fISWISH\-RUN\s0\fR\|(1) man page for details on run-time options. .SH "DESCRIPTION" .IX Header "DESCRIPTION" Swish-e is Simple Web Indexing System for Humans \- Enhanced. Swish-e can quickly and easily index directories of files or remote web sites and search the generated indexes. .PP Swish-e it extremely fast in both indexing and searching, highly configurable, and can be seamlessly integrated with existing web sites to maintain a consistent design. Swish-e can index web pages, but can just as easily index text files, mailing list archives, or data stored in a relational database. .PP Swish is designed to index small to medium sized collection of documents, Although a few users are indexing over a million documents, typical usage is more often in the tens of thousands. Currently, Swish-e only indexes eight bit character encodings. .SH "DOCUMENTATION" .IX Header "DOCUMENTATION" Documentation is provided as \s-1HTML\s0 pages installed in \&\f(CW$prefix\fR/share/doc/swish\-e where \f(CW$prefix\fR is /usr/local if building from source, or /usr if installed as part of a package from your \s-1OS\s0 vendor. Under Windows \f(CW$prefix\fR is selected at installation time. .PP Documentation is also available on-line at http://swish\-e.org. .PP A subset of the documentation is installed as system man pages as well. The following man pages should be installed: .IP "\fIswish\-e\fR\|(1)" 4 .IX Item "swish-e" This man page. .IP "\s-1\fISWISH\-CONFIG\s0\fR\|(1)" 4 .IX Item "SWISH-CONFIG" Defines options that can be used in a configuration file. .IP "\s-1\fISWISH\-RUN\s0\fR\|(1)" 4 .IX Item "SWISH-RUN" Describes the run-time options and switches. .IP "\s-1\fISWISH\-FAQ\s0\fR\|(1)" 4 .IX Item "SWISH-FAQ" Answers to commonly asked questions. .IP "\s-1\fISWISH\-LIBRARY\s0\fR\|(1)" 4 .IX Item "SWISH-LIBRARY" \&\s-1API\s0 for the Swish-e search library. Applications can link against this library. .SH "SUPPORT" .IX Header "SUPPORT" Support for Swish-e is provide via the Swish-e discussion list. See http://swish\-e.org for information. 0[swish-e.perl]API.pm###F 2HZw8Ƣ##y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >package SWISH::API; # $Id: API.pm,v 1.7.2.4 2004/01/24 18:26:45 whmoseley Exp $ require DynaLoader; use vars qw/ @ISA $VERSION /; @ISA = 'DynaLoader'; $VERSION = '0.01'; bootstrap SWISH::API $VERSION; # Preloaded methods go here. 1; __END__ =head1 NAME SWISH::API - Perl interface to the Swish-e C Library =head1 SYNOPSIS use SWISH::API; my $swish = SWISH::API->new( 'index.swish-e' ); $swish->AbortLastError if $swish->Error; # A short-cut way to search my $results = $swish->Query( "foo OR bar" ); # Or more typically my $search = $swish->New_Search_Object; # then in a loop my $results = $search->Execute( $query ); # always check for errors (but aborting is not always necessary) $swish->AbortLastError if $swish->Error; # Display a list of results my $hits = $results->Hits; if ( !$hits ) { print "No Results\n"; return; /* for example *. } print "Found ", $results->Hits, " hits\n"; # Seek to a given page - should check for errors $results->SeekResult( ($page-1) * $page_size ); while ( my $result = $results->NextResult ) { printf("Path: %s\n Rank: %lu\n Size: %lu\n Title: %s\n Index: %s\n Modified: %s\n Record #: %lu\n File #: %lu\n\n", $result->Property( "swishdocpath" ), $result->Property( "swishrank" ), $result->Property( "swishdocsize" ), $result->Property( "swishtitle" ), $result->Property( "swishdbfile" ), $result->ResultPropertyStr( "swishlastmodified" ), $result->Property( "swishreccount" ), $result->Property( "swishfilenum" ) ); } =head1 DESCRIPTION This module provides a Perl interface to the Swish-e search engine. This module allows embedding the swish-e search code into your application avoiding the need to fork to run the swish-e binary and to keep an index file open when running multiple queries. This results in increased search performance. =head1 DEPENDENCIES You must have installed Swish-e version 2.4 before building this module. Download from: http://swish-e.org =head1 OVERVIEW This module includes a number of classes. Searching consists of connecting to a swish-e index (or indexes), and then running queries against the open index. Connecting to the index creates a swish object blessed into the SWISH::API class. A SWISH::API::Search object is created from the SWISH::API object. The SWISH::API::Search object can have associated parameters (e.g. result sort order). The SWISH::API::Search object is used to query the associated index file or files. A query on a search object returns a results object of the class SWISH::API::Results. Then individual results of the SWISH::API::Result class can be fetched by calling a method of the results object. Finally, a result's properties can be accessed by calling methods on the result object. =head1 METHODS =head2 SWISH::API - Swish Handle Object To begin using Swish you must first create a Swish Handle object. This object makes the connection to one or more index files and is used to create objects used for searching the associated index files. =over 4 =item $swish = SWISH::API->new( $index_files ); This method returns a swish handle object blessed into the SWISH::API class. $index_files is a space separated list of index files to open. This always returns an object, even on errors. Caller must check for errors (see below). =item @indexes = $swish->IndexNames; Returns a list of index names associated with the swish handle. These were the indexes specified as a parameter on the SWISH::API->new call. This can be used in calls below that require specifying the index file name. =item @header_names = $swish->HeaderNames; Returns a list of possible header names. These can be used to lookup header values. See C method below. =item @values = $swish->HeaderValue( $index_file, $header_name ); A swish-e index has data associated with it stored in the index header. This method provides access to that data. Returns the header value for the header and index file specified. Most headers are a single item, but some headers (e.g. "Stopwords") return a list. The list of possible header names can be obtained from the SwishHeaderNames method. =back =head3 Error Handling All errors are stored in and accessed via the SWISH::API object (the Swish Handle). That is, even an error that occurs when calling a method on a result (SWISH::API::Result) object will store the error in the parent SWISH:API object. Check for errors after every method call. Some errors are critical errors and will require destruction of the SWISH::API object. Critical errors will typically only happen when attaching to the database and are errors such as an invalid index file name, permissions errors, or passing invalid objects to calls. Typically, if you receive an error when attaching to an index file or files you should assume that the error is critical and let the swish object fall out of scope (and destroyed). Otherwise, if an error is detected you should check if it is a critical error. If the error is not critical you may continue using the objects that have been created (for example, an invalid meta name will generate a non-critical error, so you may continue searching using the same search object). Error state is cleared upon a new query. Again, all error methods need to be called on the parent swish object =over 4 =item $swish->Error Returns true if an error occurred on the last operation. On errors the value returned is the internal Swish-e error number (which is less than zero). =item $swish->CriticalError Returns true if the last error was a critical error =item $swish->AbortLastError Aborts the running program and prints an error message to STDERR. =item $str = $swish->ErrorString Returns the string description of the current error (based on the value returned by $swish->Error). This is a generic error string. =item $msg = $swish->LastErrorMsg Returns a string with specific information about the last error, if any. For example, if a query of: badmeta=foo and "badmeta" is an invalid metaname $swish->ErrorString might return "Unknown metaname", but $swish->LastErrorMsg might return "badmeta". =back =head3 Generating Search and Result Objects =over 4 =item $search = $swish->New_Search_Object( $query ); This creates a new search object blessed into the SWISH::API::Search class. The optional $query parameter is a query string to store in the search object. See the section on C for methods available on the returned object. The advantage of this method is that a search object can be used for multiple queries: $search = $swish->New_Search_Objet; while ( $query = next_query() ) { $results = $search->Execute( $query ); ... } =item $results = $swish->Query( $query ); This is a short-cut which avoids the step of creating a separate search object. It returns a results object blessed into the SWISH::API::Results class described below. This method basically is the equivalent of $results = $swish->New_Search_Object->Execute( $query ); =back =head2 SWISH::API::Search - Search Objects A search object holds the parameters used to generate a list of results. These methods are used to adjust these parameters and to create the list of results for the current set of search parameters. =over 4 =item $search->SetQuery( $query ); This will set (or replace) the query string associated with a search object. This method is typically not used as the query can be set when executing the actual query or when creating a search object. =item $search->SetStructure( $structure_bits ); This method may change in the future. A "structure" is a bit-mapped flag used to limit search results to specific parts of an HTML document, such as the title or in H tags. The possible bits are: IN_FILE = 1 This is the default IN_TITLE = 2 In tag IN_HEAD = 4 In <head> tag IN_BODY = 8 In <body> IN_COMMENTS = 16 In html comments IN_HEADER = 32 In <h*> IN_EMPHASIZED = 64 In <em>, <b>, <strong>, <i> IN_META = 128 In a meta tag (e.g. not swishdefault) So if you wish to limit your searches to words in heading tags (e.g. E<lt>H1E<gt>) or in the E<lt>titleE<gt> tag use: $search->SetStructure( IN_HEAD | IN_TITLE ); =item $search->PhraseDelimiter( $char ); Sets the character used as the phrase delimiter in searches. The default is double-quotes ("). =item $search->SetSearchLimit( $property, $low, $high ); Sets a range from $low to $high inclusive that the give $property must be in to be selected as a result. Call multiple times to set more than one limit on different properties. Limits are ANDed, that is, a result must be within the range of all limits specified to be included in a list of results. For example to limit searches to documents modified in the last 48 hours: my $start = time - 48 * 60 * 60; $search->SetSearchLimit( 'swishlastmodified', $start, time() ); An error will be set if the property has already been specified or if $high > $low. Other errors may not be reported until running the query, such as the property name is invalid or if $low or $high are not numeric and the property specified is a numeric property. Once a query is run you cannot change the limit settings without calling the ResetSearchLimit method first. =item $search->ResetSearchLimit; Clears the limit parameters for the given object. This must be called if the limit parameters need to be changed. =item $search->SetSort( $sort_string ); Sets the sort order of search results. The string is a space separated list of valid document properties. Each property may contain a qualifier that sets the direction of the sort. For example, to sort the results by path name in ascending order and by rank in descending order: $search->SetSort( 'swishdocpath asc swishrank desc' ); The "asc" and "desc" qualifiers are optional, and if omitted ascending is assumed. Currently, errors (e.g invalid property name) are not detected on this call, but rather when executing a query. This may change in the future. =back =head2 SWISH::API::Results - Generating and accessing results Searching generates a results object blessed into the SWISH::API::Results class. =over 4 =item $results = $search->Execute( $query ); Executes a query based on the parameters in the search object. $query is an optional query string to use for the search ($query replaces the set query string in the search object). A typical use would be to create a search object once and then call this method for each query using the same search object changing only the passed in $query. The caller should check for errors after making this all. =back =head2 Results Methods A query creates a results object that contains information about the query (e.g. number of hits) and access to the individual results. =over 4 =item $hits = $results->Hits; Returns the number of results for the query. If zero and no errors were reported after calling $search->Execute then the query returned zero results. =item @parsed_words = $results->ParsedWords( $index_name ); Returns an array of tokenized words and operators with stopwords removed. This is the array of tokens used by swish for the query. $index_name must match one of the index files specified on the creation of the swish object (via the SWISH::API->new call). The parsed words are useful for highlighting search terms in associated documents. =item @removed_stopwords = $results->RemovedStopwords( $index_name) ; Returns an array of stopwords removed from a query, if any, for the index specified. $index_name must match one of the index files specified on the creation of the swish object (via the SWISH::API->new call). =item $results->SeekResult( $position ); Seeks to the position specified in the result list. Zero is the first position and $results->Hits-1 is the last position. Seeking past the end of results sets a non-critical error condition. Useful for seeking to a specific "page" of results. =item $result = $results->NextResult; Fetches the next result from the list of results. Returns undef if no more results are available. $result is an object blessed into the SWISH::API::Result class. =back =head2 SWISH::API::Result - Result Methods The follow methods provide access to data related to an individual result. =over 4 =item $prop = $result->Property( $prop_name ); Fetches the property specified for the current result. An invalid property name will cause an exception (which can be caught by wrapping the call in an eval block). Can return undefined. Date properties are returned as a timestamp. Use something like Date::Format to format the strings (or just call scalar localtime( $prop ) ). =item $prop = $result->ResultPropertyStr( $prop_name ); Fetches and formats the property. Unlike above, invalid property names return the string "(null)" -- this will likely change to match the above (i.e. throw an exception). Undefined values are returned at the null string (""). =item $value = $result->ResultIndexValue( $header_name ); Returns the header value specified. This is similar to $swish->HeaderValue(), but the index file is not specified (it is determined by the result). =back =head2 Utility Methods =over 4 =item $stemmed_word = $swish->StemWord( $word ); *Deprecated* Returns the stemmed version of the passed in word. Deprecated because only stems using the original Porter Stemmer and uses a shared memory location in the SW_HANDLE object to store the stemmed word. See below for other stemming options. =item $mode_string = $result->FuzzyMode; Returns the string (e.g. "Stemming_en", "Soundex", "None" ) indicating the stemming method used while indexing the given document. =item $fuzzy_word = $result->FuzzyWord( $word ); Converts $word using the same fuzzy mode used to index the $result. Returns a SWISH::API::FuzzyWord object. Methods on the object are used to access the converted words and other data as shown below. =item $count = $fuzzy_word->WordCount; Returns the number of output words. Normally this is the value one, but may be more depending on the stemmer used. DoubleMetaphone can return two strings for a single input string. =item $status = $fuzzy_word->WordError; Returns any error code that the stemmer might set. Normally, this return value is zero, indicating that the stemming/fuzzy operation succedded. The values returned are defined in the swish-e source file /src/stemmer.h. =item @words = $fuzzy_word->WordList; Returns the converted words from the stemming/fuzzy operation. Normally, the array will contain a single element, although may contain more (i.e. if DoubleMetaphone is used and the input word returns two strings). In the even that a word does not stem (e.g. trying to stem a number), this method will return the original input word specified when $result->FuzzyWord( $word ) was called. =item @parsed_words = $swish->SwishWords( $string, $index_file ); * Not implemented * Splits up the input string into tokens of swish words and operators. =head1 NOTES Perl's garbage collection makes it easy to write code for searching with Swish-e, but care must be taken not to keep objects around too long which can use up memory. Here's an example of a potential problem. Say you have a very large number of documents indexed and you want to find the first hit for a number of popular keywords (error checking omitted in this bad example): sub first_hit { my $query = shift; my $handle = S�WISH::API->new( 'index.swish-e'); my $results = $handle->Query( $query ); my $first_hit = $results->NextResult; return $first_hit; } my @first_hit_list; for ( @keywords ) push @first_hit_list, $first_hit($_); } The first_hit() subroutine is returning a SWISH::Result object. That makes it easy to access properties: # print file names for my $result ( @first_hit_list ) { print $result->Property('swishdocpath'),"\n"; } But as long as a SWISH::API::Result object is around, so is the entire list of results generated by the $handle->Query() call, and the index file is still open (because a SWISH::API::Result depends on a SWISH::API::Results object, which depends on a SWISH::API object). In this case it would be better to return from first_hit() just the properties you need: ... my $first_hit = $results->NextResult; return $first_hit->Property('swishdocpath'); } Then when first_hit() sub ends the result list will be freed, and the index file closed, thanks to Perl's reference count tracking. Note: the other problem with the above code is that the same index file is opened for each call to the function. Don't do that, instead open the index file once. =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Bill Moseley moseley@hank.org. 2002/2003 =head1 SUPPORT Please contact the Swish-e discussion email list for support with this module or with Swish-e. Please do not contact the developers directly. =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.perl]API.xs#�������������������#�������n����������� 2��@8Ƣ����������������������������������������y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); ��6�#include "EXTERN.h" #include "perl.h" #include "XSUB.h" /* $Id: API.xs,v 1.8.2.2 2004/01/24 18:27:10 whmoseley Exp $ */ #include <swish-e.h> #ifndef newSVuv # define newSVuv(i) newSViv(i) #endif #ifndef call_pv # define call_pv(i,j) perl_call_pv(i,j) #endif MODULE = SWISH::API PACKAGE = SWISH::API PREFIX = Swish # Make sure that we have at least xsubpp version 1.922. REQUIRE: 1.922 # This returns SW_HANDLE void new(CLASS, index_file_list ) char *CLASS char *index_file_list PREINIT: SW_HANDLE handle; PPCODE: SwishErrorsToStderr(); handle = SwishInit( index_file_list ); ST(0) = sv_newmortal(); sv_setref_pv( ST(0), CLASS, (void *)handle ); SwishSetRefPtr( handle, (void *)SvRV(ST(0)) ); XSRETURN(1); void DESTROY(self) SW_HANDLE self; CODE: SwishClose( self ); void SwishIndexNames(self) SW_HANDLE self PREINIT: const char **index_name; PPCODE: index_name = SwishIndexNames( self ); while ( *index_name ) { XPUSHs(sv_2mortal(newSVpv( (char *)*index_name ,0 ))); index_name++; } void SwishHeaderNames(self) SW_HANDLE self PREINIT: const char **name; PPCODE: name = SwishHeaderNames( self ); while ( *name ) { XPUSHs(sv_2mortal(newSVpv( (char *)*name ,0 ))); name++; } void SwishHeaderValue(swish_handle, index_file, header_name) SW_HANDLE swish_handle char * index_file char * header_name PREINIT: SWISH_HEADER_TYPE header_type; SWISH_HEADER_VALUE head_value; int i; PPCODE: head_value = SwishHeaderValue( swish_handle, index_file, header_name, &header_type ); PUSHMARK(SP); XPUSHs((SV *)swish_handle); XPUSHs((SV *)&head_value); XPUSHs((SV *)&header_type); PUTBACK; i = call_pv( "SWISH::API::decode_header_value", G_ARRAY ); SPAGAIN; void decode_header_value( swish_handle, header_value, header_type ) SV *swish_handle SV *header_value SV *header_type PREINIT: const char **string_list; SWISH_HEADER_VALUE *head_value; PPCODE: head_value = (SWISH_HEADER_VALUE *)header_value; switch ( *(SWISH_HEADER_TYPE *)header_type ) { case SWISH_STRING: if ( head_value->string && head_value->string[0] ) XPUSHs(sv_2mortal(newSVpv( (char *)head_value->string,0 ))); else ST(0) = &PL_sv_undef; break; case SWISH_NUMBER: XPUSHs(sv_2mortal(newSVuv( head_value->number ))); break; case SWISH_BOOL: // how about pushing &PL_sv_yes and &PL_sv_no or using boolSV()? XPUSHs(sv_2mortal(newSViv( head_value->boolean ? 1 : 0 ))); break; case SWISH_LIST: string_list = head_value->string_list; if ( !string_list ) /* Don't think this can happen */ XSRETURN_EMPTY; while ( *string_list ) { XPUSHs(sv_2mortal(newSVpv( (char *)*string_list ,0 ))); string_list++; } break; case SWISH_HEADER_ERROR: SwishAbortLastError( (SW_HANDLE)swish_handle ); break; default: croak(" Unknown header type '%d'\n", header_type ); } # Error Management void SwishAbortLastError(self) SW_HANDLE self int SwishError(self) SW_HANDLE self char * SwishErrorString(self) SW_HANDLE self char * SwishLastErrorMsg(self) SW_HANDLE self int SwishCriticalError(self) SW_HANDLE self # Return a search object SW_SEARCH New_Search_Object(swish_handle, query = NULL) SW_HANDLE swish_handle char *query PREINIT: char * CLASS = "SWISH::API::Search"; CODE: RETVAL = New_Search_Object( swish_handle, query ); if ( RETVAL ) SvREFCNT_inc( (SV *)SwishSearch_parent( RETVAL ) ); OUTPUT: RETVAL # Returns a SW_RESULTS object void SwishQuery( swish_handle, query = NULL ) SW_HANDLE swish_handle char *query PREINIT: char * CLASS = "SWISH::API::Results"; SW_RESULTS results; PPCODE: results = SwishQuery( swish_handle, query ); if ( results ) { SvREFCNT_inc( (SV *)SwishResults_parent( results ) ); ST(0) = sv_newmortal(); sv_setref_pv( ST(0), CLASS, (void *)results ); ResultsSetRefPtr( results, (void *)SvRV(ST(0)) ); XSRETURN(1); } # Misc utility routines void SwishWordsByLetter(handle, filename, c) SW_HANDLE handle char *filename char c PREINIT: char *Words,*tmp; int c2; PPCODE: if(c=='*') { for(c2=1;c2<256;c2++) { Words=(char *)SwishWordsByLetter(handle,filename,(unsigned char)c2); for(tmp=Words;tmp && tmp[0];tmp+=strlen(tmp)+1) { XPUSHs(sv_2mortal(newSVpv(tmp,0))); } } } else { Words=(char *)SwishWordsByLetter(handle,filename,c); for(tmp=Words;tmp && tmp[0];tmp+=strlen(tmp)+1) { XPUSHs(sv_2mortal(newSVpv(tmp,0))); } } char * SwishStemWord(handle, word) SW_HANDLE handle char *word # ************************************************************** # # SWISH::API::Search # # *************************************************************** MODULE = SWISH::API PACKAGE = SWISH::API::Search PREFIX = Swish void DESTROY(search) SW_SEARCH search CODE: if ( search ) { SV *parent = (SV *)SwishSearch_parent( search ); Free_Search_Object( search ); SvREFCNT_dec( parent ); } void SwishSetQuery(search,query) SW_SEARCH search char * query void SwishSetStructure(search, structure) SW_SEARCH search int structure void SwishPhraseDelimiter(search, delimiter) SW_SEARCH search char * delimiter CODE: SwishPhraseDelimiter(search, delimiter[0] ); void SwishSetSearchLimit(search, property, low, high) SW_SEARCH search char * property char * low char * high void SwishResetSearchLimit(search) SW_SEARCH search void SwishSetSort(search, sort_string) SW_SEARCH search char *sort_string # Returns a SW_RESULTS object void SwishExecute( search, query = NULL ) SW_SEARCH search char *query PREINIT: char * CLASS = "SWISH::API::Results"; SW_RESULTS results; PPCODE: results = SwishExecute( search, query ); { SvREFCNT_inc( (SV *)SwishResults_parent( results ) ); ST(0) = sv_newmortal(); sv_setref_pv( ST(0), CLASS, (void *)results ); ResultsSetRefPtr( results, (void *)SvRV(ST(0)) ); XSRETURN(1); } # ************************************************************** # # SWISH::API::Results # # *************************************************************** MODULE = SWISH::API PACKAGE = SWISH::API::Results PREFIX = Swish void DESTROY(results) SW_RESULTS results CODE: if ( results ) { SV *parent = (SV *)SwishResults_parent( results ); Free_Results_Object( results ); SvREFCNT_dec( parent ); } int SwishHits(self) SW_RESULTS self int SwishSeekResult(self, position) SW_RESULTS self int position SW_RESULT SwishNextResult(results) SW_RESULTS results PREINIT: char * CLASS = "SWISH::API::Result"; CODE: RETVAL = SwishNextResult(results); if ( RETVAL ) SvREFCNT_inc( (SV *)SwishResult_parent( RETVAL )); OUTPUT: RETVAL void SwishRemovedStopwords(results, index_name) SW_RESULTS results char * index_name PREINIT: SW_HANDLE swish_handle; SWISH_HEADER_TYPE header_type; SWISH_HEADER_VALUE head_value; int i; PPCODE: swish_handle = SW_ResultsToSW_HANDLE( results ); header_type = SWISH_LIST; head_value = SwishRemovedStopwords( results, index_name ); PUSHMARK(SP); XPUSHs((SV *)swish_handle); XPUSHs((SV *)&head_value); XPUSHs((SV *)&header_type); PUTBACK; i = call_pv( "SWISH::API::decode_header_value", G_ARRAY ); SPAGAIN; # PUTBACK; void SwishParsedWords(results, index_name) SW_RESULTS results char * index_name PREINIT: SW_HANDLE swish_handle; SWISH_HEADER_TYPE header_type; SWISH_HEADER_VALUE head_value; int i; PPCODE: swish_handle = SW_ResultsToSW_HANDLE( results ); header_type = SWISH_LIST; head_value = SwishParsedWords( results, index_name ); PUSHMARK(SP); XPUSHs((SV *)swish_handle); XPUSHs((SV *)&head_value); XPUSHs((SV *)&header_type); PUTBACK; i = call_pv( "SWISH::API::decode_header_value", G_ARRAY ); SPAGAIN; # PUTBACK; # ************************************************************** # # SWISH::API::Result (single result) # # # *************************************************************** MODULE = SWISH::API PACKAGE = SWISH::API::Result PREFIX = Swish void DESTROY(result) SW_RESULT result CODE: if ( result ) { SV *parent = (SV *)SwishResult_parent(result); SvREFCNT_dec( parent ); } void SwishProperty(result, property) SW_RESULT result char *property PREINIT: PropValue *pv; PPCODE: # This will abort swish-e if result is NULL pv = getResultPropValue( result, property, 0 ); if ( !pv ) { # this is always the case SW_HANDLE h = SW_ResultToSW_HANDLE( result ); if ( SwishError( h ) ) croak("%s %s", SwishErrorString( h ), SwishLastErrorMsg( h ) ); XSRETURN_UNDEF; } switch (pv->datatype) { case PROP_INTEGER: PUSHs(sv_2mortal(newSViv(pv->value.v_int))); break; case PROP_ULONG: PUSHs(sv_2mortal(newSViv(pv->value.v_ulong))); break; case PROP_STRING: PUSHs(sv_2mortal(newSVpv(pv->value.v_str,0))); break; case PROP_DATE: PUSHs(sv_2mortal(newSViv(pv->value.v_date))); break; case PROP_UNDEFINED: freeResultPropValue(pv); XSRETURN_UNDEF; break; default: croak("Unknown property data type '%d' for property '%s'\n", pv->datatype, property); } freeResultPropValue(pv); char * SwishResultPropertyStr( result, pname) SW_RESULT result char * pname void SwishResultIndexValue(self, header_name) SW_RESULT self char * header_name PREINIT: SW_HANDLE swish_handle; SWISH_HEADER_TYPE header_type; SWISH_HEADER_VALUE head_value; int i; PPCODE: swish_handle = SW_ResultToSW_HANDLE( self ); head_value = SwishResultIndexValue( self, header_name, &header_type ); PUSHMARK(SP); XPUSHs((SV *)swish_handle); XPUSHs((SV *)&head_value); XPUSHs((SV *)&header_type); PUTBACK; i = call_pv( "SWISH::API::decode_header_value", G_ARRAY ); SPAGAIN; # PUTBACK; # This returns a fuzzy word object based on the result SW_FUZZYWORD SwishFuzzyWord(result, word) SW_RESULT result char *word PREINIT: char * CLASS = "SWISH::API::FuzzyWord"; CODE: RETVAL = SwishFuzzyWord(result,word); OUTPUT: RETVAL # This returns the name of the stemmer used for this index const char* SwishFuzzyMode(result) SW_RESULT result # ************************************************************** # # SWISH::API::FuzzyWord # # Methods for accessing a SW_FUZZYWORD structure # # *************************************************************** MODULE = SWISH::API PACKAGE = SWISH::API::FuzzyWord PREFIX = SwishFuzzy # method to automatically free memory when object goes out of scope void DESTROY(fw) SW_FUZZYWORD fw CODE: if ( fw ) SwishFuzzyWordFree( fw ); # returns number of words in the fuzzy structure int SwishFuzzyWordCount( fw ) SW_FUZZYWORD fw # returns return value from stemmer int SwishFuzzyWordError( fw ) SW_FUZZYWORD fw # returns an array of stemmed (or not) words. # The "or not" is because the word might not have been stemmed. void SwishFuzzyWordList( fw ) SW_FUZZYWORD fw PREINIT: const char **list; PPCODE: list = SwishFuzzyWordList( fw ); while ( *list ) { XPUSHs(sv_2mortal( newSVpv( (char *)*list, 0 ) )); list++; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.perl]Changes.#�������������������#������������������2�uW����������������������������������������y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); ���Revision history for Perl extension Text::Aspell. ## $Id: Changes,v 1.1 2002/10/14 23:51:53 whmoseley Exp $ ## 0.01 Mon Oct 14, 2002 Initial module [moseley] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.perl]MANIFEST.#�������������������#�������x�����������2�uW����������������������������������������y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); ���Changes MANIFEST README Makefile.PL API.pm API.xs typemap t/test.t t/test.conf t/first.html t/second.html t/third.html ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.perl]Makefile.PL#�������������������#������������������2�E"k����������������������������������������y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); �� �use ExtUtils::MakeMaker; # $Id: Makefile.PL,v 1.7 2003/09/30 19:28:37 whmoseley Exp $ set_swish_version(); WriteMakefile( 'NAME' => 'SWISH::API', 'VERSION_FROM' => 'API.pm', 'LIBS' => ['-lswish-e'], 'NORECURS' => 1, # keep it from recursing into subdirectories 'DIR' => [], 'XSPROTOARG' => '-noprototypes', ); sub set_swish_version { $|=1; print "\n\nFor testing we will need the path to your SWISH-E binary.\n", qq[** Enter "skip" (without quotes) to skip testing - you will not be able to run "make test"\n\n]; my $swish = ''; for ( split /:/, $ENV{PATH} ) { if ( -x "$_/swish-e" && !-d _ ) { $swish = "$_/swish-e"; last; } } my $version; while ( 1 ) { my $enter = $swish; print "Enter the location of the swish-e executable[$enter]: "; $enter = <STDIN>; chomp $enter; if ( $enter =~/skip/i ) { print "\nNo swish-e binary selected -- not creating test index\n", "You will not be able to run make test\n\n"; return; } $enter = $enter || $swish; $enter =~ s/^(~|\$HOME)/($ENV{HOME}||'')/e; if ( $enter && !-x $enter ) { print "File '$enter' missing or not exectuable\n"; } else { $version = `$enter -V`; $version =~ tr/[0-9].//cd; if ( $version ) { print "Your SWISH-E version: $version\n"; $swish = $enter; last; } else { print "Failed to parse version from '$enter'\n"; } } } create_index( $swish, $version ); } sub create_index { my ($swish, $version) = @_; my $index = 't/index.swish-e'; my $conf = 't/test.conf'; unlink $index if -e $index; my @command = ( $swish, '-c', $conf, '-f', $index, '-v','0' ); print "Creating index...'@command'\n\n"; system(@command); die "Failed to create index file" unless -r $index; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0[swish-e.perl]README.#�������������������#�����������������2��gm����������������������������������������y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); ���SWISH::API - Perl interface to the Swish-e C search library $Id: README,v 1.5 2003/06/08 21:52:05 augur Exp $ DESCRIPTION ----------- SWISH::API is an Object Oriented Perl interface to the swish-e C library. This can be used to embed the swish-e search code into your perl program avoiding the need to run the swish-e binary for searching. The real difference is that search speed is improved since you may attach to a swish-e index once and then run many queries on that open "swish handle". This speed comes at a cost of memory added to your program. Note: This module replaces the SWISHE module available with versions prior to 2.3 of Swish-e. There is a SWISHE interface module available on the Swish-e site if you have existing code that depends on previous versions of the SWISHE module. http://swish-e.org/Download/SWISHE-0.03.tar.gz That version is simply an interface to the SWISH::API module. You must install the SWISH::API module to use SWISHE-0.03.tar.gz. It's recommended to upgrade your Perl code to use the SWISH::API module directly instead of using the SWISHE-0.03 interface module if possible. INSTALLATION ------------ See the FAQ below if you do not have root access or installed swish in a non-standard directory. 1) Download, build and install swish-e See http://swish-e.org for instructions. Swish is also available as a binary package from some operating system distributions (e.g. Debian). 2) Build the module in the normal way perl Makefile.PL make make test Note that running "perl Makefile.PL" will ask for the location of the swish-e binary. Make sure you specify the location of the swish-e binary that matches the version of swish-e you are linking the module with (i.e. from the same package as the SWISH::API perl module). Be aware that many ISPs have outdated versions of swish-e installed. FAQ --- I do not have root access. How do I link to the swish-e library? When building the SWISH::API module the compiler and linker look in locations for header and library files. If swish was installed in a non-standard location you will need to specify that location when building the module. For example, to install swish in $HOME/local: $ ./configure --prefix=$HOME/local $ make && make install Now to build the SWISH::API module: $ cd perl $ perl Makefile.PL PREFIX=$HOME/local \ CCFLAGS=-I$HOME/local/include \ LIBS="-L$HOME/local/lib -lswish-e" $ LD_RUN_PATH=$HOME/local/lib make $ make test && make install That last line above is bourne shell syntax. Other shells may use a different syntax for setting the LD_RUN_PATH environment variable before running make. The "PREFIX" parameter to Makefile.PL sets where the module will be installed when running "make install". How do I build a PPM under Windows using MSVC and PERL 5.8? $ cd perl $ perl Makefile.PL \ LIBS="../src/win32/libswish-e-mt.lib ../../zlib/lib/zlib.lib libcmt.lib" \ OPTIMIZE="-MT -Zi -DNDEBUG -O1 -I../src" # Logic says to use CCFLAGS for -I../src but it explodes spectacularly... $ nmake $ nmake ppd $ tar cvzf SWISH-API.tar.gz blib Edit SWISH-API.ppd to your liking and upload it and SWISH-API.tar.gz to your repository in the appropriate locations. PROBLEMS -------- If you have problems or need help please contact the swish-e discussion list. The list is low traffic and is the place to get help with this module or swish-e in general. ���������������������������������������������������������������������������������������������������0[swish-e.perl.t]first.html#�������������������#������������������R2��zuW�����������������������������������������������������������������������������������������������������������<html> <head> <title>Title of First Firstbody 0wish-e.perl.t]second.html##2zuW Title of Second Secondbody foo 0[swish-e.perl.t]test.conf##2]Js# Test swish-e config file for the SWISH::API perl module IndexDir t/first.html t/second.html t/third.html MetaNames meta_name PropertyNamesNumeric age PropertyNamesDate blankdate IgnoreWords stopword otherstop BuzzWords C++ mod_perl #FuzzyIndexingMode Stem 0[swish-e.perl.t]test.t## 2[t8Ƣ #!perl -w # $Id: test.t,v 1.7.2.2 2004/01/24 18:28:51 whmoseley Exp $ use strict; require SWISH::API; my $lastcase = 115; print "1..$lastcase\n"; my $test_num = 1; my $mem_test = 0; ###################################################################### { my $swish = SWISH::API->new( 't/index.swish-e' ); check_error('Call SWISH::API::new', $swish); my @header_names = $swish->HeaderNames; is_ok( "header names " . join(':',@header_names), @header_names); my @index_names = $swish->IndexNames; for my $index ( @index_names ) { is_ok( "index name '$index'", $index); for my $header ( @header_names ) { my @value = $swish->HeaderValue( $index, $header ); my $value = @value ? join( ':', @value) : '*undefined*'; is_ok( "Header '$header' = '$value'", defined $value ); } } # A short-cut way to search { my $results = $swish->Query( "foo OR bar" ); check_error('Call $swish->Query', $swish); my $hits = $results->Hits; is_ok( "returned $hits hits", $hits ); my $result = $results->NextResult; if ( !$result ) { is_ok("failed to read a resut -- can't test stemmers", 0); } else { stem_it($result,"running"); stem_it($result,"runs"); stem_it($result,"sugar"); stem_it($result,""); stem_it($result,"1234"); } } # A short-cut way to search with a metaname { my $results = $swish->Query( "meta_name=f*" ); check_error('metaname Call $swish->Query', $swish); my $hits = $results->Hits; is_ok( "returned $hits hits", $hits ); } # Or more typically my $search = $swish->New_Search_Object; check_error('Call $swish->New_Search_Object', $swish); $search->SetSort("swishfilenum"); # then in a loop my $query = "not dkdkd stopword otherstop"; my $results = $search->Execute( $query ); check_error('Call $swish->Execute', $swish); # Check parsed words my @parsed_words = $results->ParsedWords( 't/index.swish-e' ); is_ok("ParsedWords [" . join(', ', @parsed_words) . "]", scalar @parsed_words ); my @removed_stopwords = $results->RemovedStopwords( 't/index.swish-e' ); is_ok("RemovedStopwords [" . join( ', ', @removed_stopwords). "]", scalar @removed_stopwords ); # Display a list of results my $hits = $results->Hits; is_ok( "returned $hits results", $hits ); # Seek to a given page - should check for errors #$results->SeekResult( ($page-1) * $page_size ); my @props = qw/ swishreccount swishfilenum age blankdate swishdocpath swishrank swishdocsize swishtitle swishdbfile swishlastmodified /; # access results my $seen; my @results; while ( my $result = $results->NextResult ) { push @results, $result; check_error('Call $swish->NextResult', $swish) unless $seen; my %props; $props{$_} = $result->Property( $_ ) for @props; check_error('Call $result->Property', $swish) unless $seen; my $string = $result->Property('swishdocpath') ."\n" . join "\n", map { " $_ => " . (defined $props{$_} ? $props{$_} : '*not defined*') } @props; is_ok( "$string\n", $string ); for ( @props ) { my $propstr = $result->ResultPropertyStr( $_ ); # I don't like this method ' is_ok(" ResultPropertyStr($_) = " . $propstr || '??', defined $propstr ); } unless ( $seen++ ) { my $header = $result->ResultIndexValue( 'WordCharacters' ); is_ok("header '$header'", $header ); } last if $seen >= 20; } # Check for catching invalid property name is_ok("Seek to start of results", $results->SeekResult(0) == 0 ); eval { $results->NextResult->Property('badpropname') }; is_ok( "Croak on bad property: " . ($@ || "nope!"), $@ ); my $strnull = $results->NextResult->ResultPropertyStr('blankdate'); # check on blank props using the Str method is_ok( "Returns empty string for ResultPropertyStr: [$strnull]", $strnull eq '' ); $strnull = $results->NextResult->ResultPropertyStr('badpropname'); # check on blank props using the Str method is_ok( "Returns '(null)' string for ResultPropertyStr: [$strnull]", $strnull eq '(null)' ); $results = $search->Execute('firstbody or secondbody'); is_ok("firstbody or secondbody", $results->Hits == 2 ); $results = $search->Execute('foo'); is_ok("foo", $results->Hits == 2 ); my $IN_HEAD = 32; $search->SetStructure( $IN_HEAD ); $results = $search->Execute('foo'); $hits = $results->Hits; is_ok("foo in tags $hits hits", $hits == 1 ); $search->SetStructure( 1 ); $results = $search->Execute('foo'); $hits = $results->Hits; is_ok("foo again $hits hits", $hits == 2 ); $search->SetSearchLimit("age", 30, 40 ); check_error('SetSearchLimit', $swish); $results = $search->Execute('not dkdkd'); check_error('1st Execute', $swish); $hits = $results->Hits; is_ok("Limit Search range $hits hits", $hits == 2 ); $search->ResetSearchLimit; $search->SetSearchLimit("age", 40, 40 ); check_error('2nd SetSearchLimit', $swish); $results = $search->Execute('not dkdkd'); check_error('2nd Execute', $swish); $hits = $results->Hits; is_ok("2nd Limit Search range $hits hits", $hits == 1 ); if ( $mem_test ) { require Time::HiRes; my $t0 = [Time::HiRes::gettimeofday()]; my $count = 0; my $flags = 'v'; my $ttl; while ( 1 ) { my $results = $search->Execute("not dkdk"); while ( my $result = $results->NextResult ) { my $path = $result->Property('swishdocpath'); $ttl ++; } unless ( $count % 1000 ) { $hits = $results->Hits; my $elapsed = Time::HiRes::tv_interval ( $t0, [Time::HiRes::gettimeofday()]); my $ps = $count % 10000 ? '': `/bin/ps $flags -p $$`; printf("$count - Results: $hits - Total Results: $ttl %d req/s\n$ps", $count/$elapsed ); $flags = 'hv'; } $count++; } } my @words = $swish->WordsByLetter( 't/index.swish-e' , 'f' ); check_error('WordsByLetter', $swish); is_ok( "WordsByLetter 'f' [@words]", @words ); for ( qw/running runs library libraries/ ) { my $stemmed = $swish->StemWord( $_ ); is_ok( "Stemmed: '$_' => '" . ($stemmed||'*failed to stem*') ."'", $stemmed ); } # cough, hack, cough.... print "ok $_ (noop)\n" for $test_num..$lastcase } sub check_error { my ( $str, $swish ) = @_; my $num = $test_num++; if ( !$swish->Error ) { print "ok $num $str\n"; return; } my $msg = $swish->ErrorString . ' (' . $swish->LastErrorMsg . ')'; print "not ok $num $str - $msg\n"; die "Found critical error" if $swish->CriticalError; } sub is_ok { my ( $str, $is_ok ) = @_; my $num = $test_num++; print $is_ok ? "ok $num $str\n" : "not ok $num $str\n"; } sub stem_it { my ($result, $word) = @_; my $fw; is_ok("Testing FuzzyWord [$word]", ($fw = $result->FuzzyWord($word)) ); return unless $fw; my $wc = $fw->WordCount; is_ok(" Word count $wc", $wc ); my $error = $fw->WordError; is_ok(" Fuzzy status $error", 1); my @words = $fw->WordList; is_ok(" [$word] -> [@words]", scalar @words ); } 0[swish-e.perl.t]third.html##2zuW Title of Third Thirdbody

foo

0[swish-e.perl]typemap.##x2q8Ƣy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); # $Id: typemap,v 1.1.2.2 2004/01/24 18:27:38 whmoseley Exp $ TYPEMAP SW_HANDLE O_OBJECT SW_SEARCH O_OBJECT SW_RESULTS O_OBJECT SW_RESULT O_OBJECT SW_FUZZYWORD O_OBJECT const char * T_PV # From: "perlobject.map" Dean Roehrich, version 19960302 # O_OBJECT -> link an opaque C or C++ object to a blessed Perl object. OUTPUT # The Perl object is blessed into 'CLASS', which should be a # char* having the name of the package for the blessing. O_OBJECT sv_setref_pv( $arg, CLASS, (void*)$var ); INPUT O_OBJECT if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) $var = ($type)SvIV((SV*)SvRV( $arg )); else{ warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" ); XSRETURN_UNDEF; } 0[swish-e.prog-bin]DirTree_pl.in##;sr,!F|2y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); *#!@@perlbinary@@ -w use strict; ## Run this program with the -man option for documentation ## # This is set to where Swish-e's "make install" installed the helper modules. use lib qw( @@perlmoduledir@@ ); use File::Find; # for recursing a directory tree use Getopt::Long; use Pod::Usage; #--------------- User Configuration Section ------------------------ # Regular expression that says these files are text # even though SWISH::Filter thinks they might be binary my @not_binary_extensions = qw/ .pl .pm .c .conf rc /; # Subroutine to validate file names: return true if file is ok to process # or false to skip the file. # The first parameter passed in is the sub check_path { my $path = shift; return 1; # return true to process } sub check_dir { my $dir = shift; return 1; # return true to process this directory } #-------------------- End User Config ------------------------------------ my $extensions = join '|', map { quotemeta } @not_binary_extensions; my $textre = qr/($extensions)$/; my %options; GetOptions( \%options, 'verbose!', 'debug!', 'symlinks!', 'path', 'man', 'no_skip', ) || pod2usage(2); pod2usage( -verbose => 2 ) if $options{man}; if ( $options{path} ) { print '@@perlmoduledir@@',"\n"; exit; } pod2usage("Must supply at least one directory") unless @ARGV; $ENV{FILTER_DEBUG} = 1 if $options{debug}; # See perldoc File::Find for information on following symbolic links # and other important topics. use constant DEBUG => 0; # Try to load the filter module eval { require SWISH::Filter }; my $filter = SWISH::Filter->new unless $@; find( { wanted => \&wanted, no_chdir => 1, # 5.6 feature follow => $options{follow_symlinks}, }, @ARGV, ); sub wanted { my $path = $File::Find::name; if ( -d ) { #stat if ( !check_dir( $path ) ) { $File::Find::prune = 1; warn "Skipped dir [$path] by user function check_dir()\n" if $options{verbose} || $options{debug}; } return; } if ( !-r _ ) { warn "$File::Find::name is not readable\n"; return; } my $mtime = (stat _ )[9]; if ( !check_path( $path ) ) { warn "Skipped path [$path] by user function check_path()\n" if $options{verbose} || $options{debug}; return; } if ( $filter ) { my $doc = $filter->convert( document => $path, ); unless ( $doc ) { if ( $options{no_skip} ) { process_file( $path, $mtime ); return; } warn "Failed [$path] SWISH::Filter->convert failed.\n" if $options{verbose}; return; } if ( $doc->is_binary && $path !~ /$textre/ ) { # ignore "binary" files (not text/* mime type) warn "Skipping [$path] due to content type: " . $doc->content_type .": may be binary\n" if $options{verbose}; return; } my $bytes = output_document( $path, $doc->fetch_doc, $mtime, $doc->swish_parser_type ); if ( $options{verbose} ) { print STDERR "Indexed [$path] ", ($doc->was_filtered ? "(Was filtered) " : "(Not filtered) "), $doc->content_type . " ", ($doc->swish_parser_type || '(parser unspecified)'), " ($bytes bytes)", "\n"; } return; } # Otherwise, fetch document manually process_file( $path, $mtime ); } sub process_file { my ( $path, $mtime ) = @_; unless ( open FH, $path ) { warn "Failed to open '$path': $!\n"; return; } local $/ = undef; my $content = ; close FH; my $bytes = output_document( $path, \$content, $mtime ); if ( $options{verbose} ) { print STDERR "Indexed [$path] (not processed with SWISH:Filter) ($bytes bytes)\n"; } } sub output_document { my ( $path, $content_ref, $mtime, $parser_type ) = @_; # Get the length of the content - have to worry about multi-byte content # ugly and maybe expensive, but perhaps more portable than "use bytes" my $bytecount = length pack 'C0a*', $$content_ref; my $header = "Path-Name: $path\nContent-Length: $bytecount\nLast-Mtime: $mtime\n"; $header .= "Document-Type: $parser_type\n" if $parser_type; print $header . "\n" . $$content_ref; } __END__ =head1 NAME DirTree.pl - program to fetch local documents for Swish-e =head1 SYNOPSIS DirTree.pl [options] directory | swish-e -S prog -i stdin Options: -verbose Display processing info -debug Enable debugging (including SWISH::Filter debugging) -man Display documentation -path Display location lib path set at installation -no_skip Process documents even if filtering fails -symlinks Follow symbolic links. Default is to NOT follow symlinks =head1 DESCRIPTION DirTree.pl is an example Perl script that can be used with Swish-e to fetch documents from the local file system. It works somewhat like Swish-e's default -S fs input method (reading from the file system). DirTree.pl will attempt to load the SWISH::Filter module for use in filtering documents (e.g. PDF or MS Word). DirTree.pl is a thin wrapper around Perl's File::Find module. Before modifying this script for your own use please read the documentation for File::Find: $ perldoc File::Find IMPORTANT: By default DirTree.pl will attempt to index all files in the directories and sub-directories supplied. It's expected that you will customize this script for your own needs. When using -S prog many of the features available to select or exclude files that can be specified in the swish-e config file will have no effect. It's expected that checks on files will be added to the DirTree.pl program. This is much more powerful and allows more control, but requires more work to setup. There are two skeleton functions at the top of DirTree.pl that can be modified for filtering what gets indexed: check_path() and check_dir(). Both are passed in the path or directory name as their only parameter. Return FALSE to skip the given path or directory. Here's two examples: # Skip all .wav files. sub check_path { my $path = shift; return if $path =~ /\.wav$/; # return false if ends in .wav? return 1; # otherwise return true } # Skip all directories that start with a dot (hidden dirs) sub check_dir { my $dir = shift; return ! m[^\.]; # return true if does not start with a dot } Those are called for each file or directory processed. The File::Find module also provides a preprocess option where all the files and directories in a directory are passed in as a list to a subroutine. This list can be filtered and passed back to File::Find. This would be useful if, say, you wanted to skip a directory if a file "noindex" existed in the directory. See perldoc File::Find for details. =head2 Filtering Filtering is the process of converting a document that swish-e cannot index into a document that swish-e can index. The SWISH::Filter module is used for filtering documents. SWISH::Filter is part of the swish-e distribution and was installed at the same time Swish-e was installed. SWISH::Filter uses "helper" programs to do the actual filtering. For example, to filter PDF files you would need to have the Xpdf package installed (included with the Windows version of Swish-e). When SWISH::Filter is first loaded it determines which filters are available. SWISH::Filter uses the MIME::Types module to convert a file name into a MIME type (e.g. .doc => application/msword) and that type is used to determine what filter to use, if any. Filters convert the document to a new MIME type (e.g. the MS Word filter might convert the document to text/html or text/plain). Binary Files After Filtering, this program (DirTree.pl) then checks to see if the file is a binary file. This is a very simple test that simply looks for "text/" at the start of the MIME type. Clearly, this is incorrect for man MIME types. For example, if you were indexing Perl scripts of type "application/x-perl" this program would think the file was binary and not index it. At the top of the program is a list of file endings that tell DirTree.pl that they should be indexed even if their MIME type does not start with "text/". Another problem is some files will not map to a MIME type. The best solution is to add the file ending and MIME type to your mime.types file. But, if you just want to index any file that does not have a MIME type use the -no_skip option. =head1 REQUIREMENTS To use the SWISH::Filter module you will need the helper applications installed. Check with your OS packages or Google for sources. PDF conversion requires the Xpdf package MS Word conversion requires the Catdoc package The Windows version of Swish-e includes Xpdf and Catdoc packages. For content type matching install the Perl Mime::Types module. =head1 OPTIONS A few options may be passed to DirTree.pl =over 8 =item B<-verbose> Produces information about each file as it is processed. =item B<-debug> Enables detailed debugging. SWISH::Filter debugging is also enabled. =item B<-no_skip> When set documents that fail processing with SWISH::Filter will still be processed. Typically this means documents where a content-type could be determined. Make sure you have the Mime::Types module installed. =item B<-symlinks> When specified will recurse into directories that are symbolic links. The default is to NOT recurse into symbolic links. This options sets the "follow" option in the File::Find module. =back =head1 BUGS May not work well on multi-byte input files. In order to work on Windows (where two chars are used to terminate lines) this program reads the ENTIRE file into memory so that an accurate byte count can be made. Therefore, it's probably a good idea not to index files that are too big. =head1 SUPPORT Contact the Swish-e discussion list. See: http://swish-e.org 0[swish-e.prog-bin]Makefile.am##ex:2~䐢y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); perlmoduledir = $(libexecdir)/perl exampledir = $(datadir)/doc/$(PACKAGE)/examples/prog-bin libexec_SCRIPTS = spider.pl DirTree.pl # These are really out dated perlmodule_SCRIPTS = \ doc2txt.pm \ pdf2html.pm \ pdf2xml.pm CLEANFILES = spider.pl DirTree.pl spider.pl: spider.pl.in @rm -f spider.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/spider.pl.in > spider.pl DirTree.pl: DirTree.pl.in @rm -f spider.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/DirTree.pl.in > DirTree.pl other_examples = \ README \ file.pl \ SwishSpiderConfig.pl \ MySQL.pl \ index_hypermail.pl \ pdf2xml.pm \ pdf2html.pm \ doc2txt.pm example_DATA = $(other_examples) EXTRA_DIST = \ spider.pl.in \ DirTree.pl.in \ $(other_examples) 0[swish-e.prog-bin]Makefile.in##];2ʢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); .# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ perlmoduledir = $(libexecdir)/perl exampledir = $(datadir)/doc/$(PACKAGE)/examples/prog-bin libexec_SCRIPTS = spider.pl DirTree.pl # These are really out dated perlmodule_SCRIPTS = \ doc2txt.pm \ pdf2html.pm \ pdf2xml.pm CLEANFILES = spider.pl DirTree.pl other_examples = \ README \ file.pl \ SwishSpiderConfig.pl \ MySQL.pl \ index_hypermail.pl \ pdf2xml.pm \ pdf2html.pm \ doc2txt.pm example_DATA = $(other_examples) EXTRA_DIST = \ spider.pl.in \ DirTree.pl.in \ $(other_examples) subdir = prog-bin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = SCRIPTS = $(libexec_SCRIPTS) $(perlmodule_SCRIPTS) DIST_SOURCES = DATA = $(example_DATA) DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign prog-bin/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) libexecSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-libexecSCRIPTS: $(libexec_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libexecdir) @list='$(libexec_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(libexecSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(libexecdir)/$$f"; \ $(libexecSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(libexecdir)/$$f; \ else :; fi; \ done uninstall-libexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(libexec_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(libexecdir)/$$f"; \ rm -f $(DESTDIR)$(libexecdir)/$$f; \ done perlmoduleSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-perlmoduleSCRIPTS: $(perlmodule_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(perlmoduledir) @list='$(perlmodule_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f"; \ $(perlmoduleSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(perlmoduledir)/$$f; \ else :; fi; \ done uninstall-perlmoduleSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(perlmodule_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(perlmoduledir)/$$f"; \ rm -f $(DESTDIR)$(perlmoduledir)/$$f; \ done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: exampleDATA_INSTALL = $(INSTALL_DATA) install-exampleDATA: $(example_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(exampledir) @list='$(example_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f"; \ $(exampleDATA_INSTALL) $$d$$p $(DESTDIR)$(exampledir)/$$f; \ done uninstall-exampleDATA: @$(NORMAL_UNINSTALL) @list='$(example_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(exampledir)/$$f"; \ rm -f $(DESTDIR)$(exampledir)/$$f; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(libexecdir) $(DESTDIR)$(perlmoduledir) $(DESTDIR)$(exampledir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exampleDATA install-perlmoduleSCRIPTS install-exec-am: install-libexecSCRIPTS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-exampleDATA uninstall-info-am \ uninstall-libexecSCRIPTS uninstall-perlmoduleSCRIPTS .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exampleDATA install-exec \ install-exec-am install-info install-info-am \ install-libexecSCRIPTS install-man install-perlmoduleSCRIPTS \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-exampleDATA uninstall-info-am \ uninstall-libexecSCRIPTS uninstall-perlmoduleSCRIPTS spider.pl: spider.pl.in @rm -f spider.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/spider.pl.in > spider.pl DirTree.pl: DirTree.pl.in @rm -f spider.pl @sed \ -e 's,@@perlmoduledir@@,$(libexecdir)/perl,' \ -e 's,@@swishbindir@@,$(bindir),' \ -e 's,@@perlbinary@@,$(PERL),' \ $(srcdir)/DirTree.pl.in > DirTree.pl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0[swish-e.prog-bin]MySQL.pl##B<2sZy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/usr/bin/perl -w use strict; =pod This is an example program to index data stored in a MySQL database. In this example, a table is read that contains "minutes" from some organization's meetings. The text of the minutes was stored in a blob, compressed with zlib. This script reads the record from MySQL, uncompresses the text, and formats for swish-e. The example below uses HTML, but you could also format at XML, or even plain text. =cut use DBI; use Compress::Zlib; use Time::Local; my %database = { dsn => 'dbi:mysql:test', user => 'user', password => 'pass', }; my $dbh = DBI->connect( @database{qw/ dsn user password /}, { RaiseError => 1 } ); my $sth = $dbh->prepare("select id, date, minutes from meetings"); $sth->execute(); while ( my( $id, $date, $minutes) = $sth->fetchrow_array ) { my $uncompressed = uncompress( $minutes ); my $unix_date = unixtime( $date ); my $content = < Minutes for meeting on date $date $uncompressed EOF my $length = length $content; print <2?*y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); These are example scripts that you can use the with "prog" document source feature of Swish-e. The "prog" document source feature of Swish-e allow you to index any type of document, provided you can convert the document into a format that Swish-e can parse (text, html, or xml). spider.pl Working example of a web spider. This program is a full-featured spider, that is fully customizable through its configuration file. Note: spider.pl is installed in the scripts directory. Running swish-e -h will display the scripts directory. SwishSpiderConfig.pl Example configuration file for the spider.pl program file.pl A very simple examle of a program that feeds documents to swish. Its purpose it to demonstrate how to write a program for use with Swish-e's "prog" input method. DirTree.pl A slightly more advanced example that reads a directory tree and indexes a few files types. Uses the pdf2xml module for pdf files. Its purpose it to demonstrate how to write a program for use with Swish-e's "prog" input method. MySQL.pl Another simple example that shows how to index data stored in a MySQL database. Instructions are included on how to configure the swish.cgi program index_hypermail.pl An example program for indexing mailing list archives that are created with the popular Hypermail program. pdf2xml.pm and pdf2html.pm Perl modules to convert pdf to xml documents for indexing. Requires the pdftotext program. Type perldoc pdf2xml.pm or perldoc pdf2html.pm from the prog-bin directory for documentation. doc2txt.pm Perl module to convert MS Word documents to text. Requires the catdoc program. Type perldoc doc2txt.pm from the prog-bin directory for documentation. Note: The modules to convert PDF and MS Word documents are outdated. See SWISH::Filter for more information. 0&[swish-e.prog-bin]SwishSpiderConfig.pl##J@2uc,ky $ExcelSheetCount = encode_entities($oBook->{SheetCount}); (=pod =head1 NAME SwishSpiderConfig.pl - Sample swish-e spider configuration =head1 DESCRIPTION This is a sample configuration file for the spider.pl program provided with the swish-e distribution. A spider.pl configuration file is not required as spider.pl has reasonable defaults. In fact, it's recommended that you only use a spider.pl configuration file *after* successfully indexing with spider.pl's default settings. To use the default settings set in your *swish-e* config file: SwishProgParameters default IndexDir spider.pl The "default" parameter instructs spider.pl to use its default parameters. To specify a spider configuration file use: SwishProgParameters IndexDir spider.pl If no parameters are passed to spider.pl (i.e. SwishProgParameters is not used) then spider.pl will look for a file called F in the current directory. A spider.pl config file is useful when you need to change the default behavior of the way spider.pl operates. For example, you may wish to index just part of your site, or tell the spider that example.com, www.example.com and web.example.com are all the same site. The configuration file is actually Perl code. This makes it possible to do reasonably complicated things directly within the config file. For example, parse HTML content into sections and index each section as a separate "document" allowing searches to be targeted. The spider.pl config file must set an array called "@servers". The "@servers" array holds one or more descriptions of a server to index. In other words, you may define multiple configurations to index different servers (or different parts of the same server) and group then together in the @servers array. Each server description is contained in a single Perl hash. For example, to index two sites define two Perl hashes: my %main_site = ( base_url => 'http://example.com', same_hosts => 'www.example.com', email => 'admin@example.com', ); my %news_site = ( base_url => 'http://news.example.com', email => 'admin@example.com', ); @servers = ( \%main_site, \%news_site ); 1; The above defines two Perl hashes (%main_site and %news_site) and then places a *reference* (the backslash before the name of the hash) to each of those hashes in the @servers array. The "1;" at the end is required at the end of the file (Perl must see a true value at the end of the file). Below are two example configurations, but included in the same @servers array (as anonymous Perl hashes). They both have the skip flag set which disables their use (this is just an example after all). The first is a simple example of a few parameters, and shows the use of a "test_url" function to limit what files are fetched from the server (in this example only .html files are fetched). The second example is slightly more complex and makes use the the SWISH::Filter module to filter documents (such as PDF and MS Word). Note: The examples below are outside "pod" documentation -- if you are reading this with the "perldoc" command you will not see the examples below. =cut # @servers is a list of hashes -- so you can spider more than one site # in one run (or different parts of the same tree) # The main program expects to use this array (@SwishSpiderConfig::servers). ### Please do not spider these examples -- spider your own servers, with permission #### @servers = ( #============================================================================= # This is a simple example, that includes a few limits # Only files ending in .html will be spidered (probably a bit too restrictive) { skip => 1, # skip spidering this server base_url => 'http://www.swish-e.org/index.html', same_hosts => [ qw/swish-e.org/ ], agent => 'swish-e spider http://swish-e.org/', email => 'swish@domain.invalid', # limit to only .html files test_url => sub { $_[0]->path =~ /\.html?$/ }, delay_sec => 2, # Delay in seconds between requests max_time => 10, # Max time to spider in minutes max_files => 100, # Max Unique URLs to spider max_indexed => 20, # Max number of files to send to swish for indexing keep_alive => 1, # enable keep alives requests }, #============================================================================= # This example just shows more settings, and makes use of the SWISH::Filter # module for converting documents. Some sites require cookies, so this # config enables spider.pl's use of cookies, and also enables MD5 # checksums to catch duplicate pages (i.e. if / and /index.html point # to the same page). # This example also only indexes the "docs" sub-tree of the swish-e # site by checking the path of the URLs { skip => 0, # Flag to disable spidering this host. base_url => 'http://swish-e.org/current/docs/', same_hosts => [ qw/www.swish-e.org/ ], agent => 'swish-e spider http://swish-e.org/', email => 'swish@domain.invalid', keep_alive => 1, # Try to keep the connection open max_time => 10, # Max time to spider in minutes max_files => 20, # Max files to spider delay_secs => 2, # Delay in seconds between requests ignore_robots_file => 0, # Don't set that to one, unless you are sure. use_cookies => 1, # True will keep cookie jar # Some sites require cookies # Requires HTTP::Cookies use_md5 => 1, # If true, this will use the Digest::MD5 # module to create checksums on content # This will very likely catch files # with differet URLs that are the same # content. Will trap / and /index.html, # for example. # This will generate A LOT of debugging information to STDOUT debug => DEBUG_URL | DEBUG_SKIPPED | DEBUG_HEADERS, # Here are hooks to callback routines to validate urls and responses # Probably a good idea to use them so you don't try to index # Binary data. Look at content-type headers! # test_url => \&test_url, # test_response => \&test_response, filter_content => \&filter_content, }, ); #---------------------- Public Functions ------------------------------ # Here are some examples of callback functions # # # Use these to adjust skip/ignore based on filename/content-type # Or to filter content (pdf -> text, for example) # # Remember to include the code references in the config as above. # #---------------------------------------------------------------------- # This subroutine lets you check a URL before requesting the # document from the server # return false to skip the link sub test_url { my ( $uri, $server ) = @_; # return 1; # Ok to index/spider # return 0; # No, don't index or spider; # ignore any common image files return if $uri->path =~ /\.(gif|jpg|jpeg|png)?$/; # make sure that the path is limited to the docs path return $uri->path =~ m[^/current/docs/]; } # This routine is called when the *first* block of data comes back # from the server. If you return false no more content will be read # from the server. $response is a HTTP::Response object. # It's useful for checking the content type of documents. # # For example, say we have a lot of audio files linked our our site that we # do not want to index. But we also have a lot of image files that we want # to index the path name only. sub test_response { my ( $uri, $server, $response ) = @_; return if $response->content_type =~ m[^audio/]; # In this example set the "no_contents" flag for $server->{no_contents}++ unless $response->content_type =~ m[^image/]; return 1; # ok to index and spider } # This is an example of how to use the SWISH::Filter module included # with the swish-e distribution. # # Returns: # true if content-type is text/* or if the document was filtered # false if document was not filtered # aborts if module cannot be loaded or filter object cannot be created. # my $filter; # cache the object. sub filter_content { my ( $uri, $server, $response, $content_ref ) = @_; # Uncomment this to enable debugging of SWISH::Filter # $ENV{FILTER_DEBUG} = 1; my $content_type = $response->content_type; # Ignore text/* content type -- no need to filter return 1 if !$content_type || $content_type =~ m!^text/!; # Load the module - returns FALSE if cannot load module. unless ( $filter ) { eval { require SWISH::Filter }; if ( $@ ) { $server->{abort} = $@; return; } $filter = SWISH::Filter->new; unless ( $filter ) { $server->{abort} = "Failed to create filter object"; return; } } # If not filtered return false and doc will be ignored (not indexed) my $doc = $filter->convert( document => $content_ref, name => $response->base, content_type => $content_type, ); return unless $doc; # return unless $doc->was_filtered # could do this since checking for text/* above return if $doc->is_binary; $$content_ref = ${$doc->fetch_doc}; # let's see if we can set the parser. $server->{parser_type} = $doc->swish_parser_type || ''; return 1; } ## Must return a true value!! 1; 0[swish-e.prog-bin]doc2txt.pm##72d0m0y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  package doc2txt; use strict; =pod =head1 NAME doc2txt - swish-e sample module to convert MS Word docs to text =head1 SYNOPSIS use doc2txt; my $doc_record_ref = doc2txt( $doc_file_name ); # or by passing content in a scalar reference my $doc_text_ref = doc2txt( \$doc_content ); =head1 DESCRIPTION Sample module for use with other swish-e 'prog' document source programs. Pass either a file name, or a scalar reference. The differece is when you pass a reference to a scalar only the content is returned. When you pass a file name an entire record is returned ready to be fed to swish -- this includes the headers required by swish for indexing. =head1 REQUIREMENTS Uses the catdoc program. http://www.fe.msk.ru/~vitus/catdoc/ You may need to adjust the parameters used to call catdoc. You will also need the module File::Temp available from CPAN if passing content to this module (instead of a file name). I'm not thrilled about how that currently works... =head1 AUTHOR Bill Moseley =cut use Symbol; use vars qw( @ISA @EXPORT $VERSION ); # $Id: doc2txt.pm,v 1.3 2003/06/12 04:00:45 whmoseley Exp $ $VERSION = sprintf '%d.%02d', q$Revision: 1.3 $ =~ /: (\d+)\.(\d+)/; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(doc2txt); my @InfoTags = qw/Title Subject Author CreationDate Creator Producer ModDate Keywords/; my $catdoc = 'catdoc -a'; # how cat doc is called. Rainer uses catdoc -s8859-1 -d8859-1 sub doc2txt { my $file_or_content = shift; my $file = ref $file_or_content ? create_temp_file( $file_or_content ) : $file_or_content; # This doesn't work my $path = $file; for ( $path ) { s/"/\\"/g; $path = qq["$path"]; } my $content = `$catdoc $path`; return \$content if ref $file_or_content; # otherwise build the headers my $mtime = (stat $file )[9]; my $size = length $content; my $ret = < 1 ); print $fh $$scalar_ref or die $!; close $fh or die "Failed to close '$file_name' $!"; return $file_name; } 0[swish-e.prog-bin]file.pl##G182sZy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/usr/bin/perl -w use strict; # This is a short example that basically does the same # thing as the default file system access method # This will index only one directory (the current directory) # See the more advanced example DirTree.pl in the swish-e prog-bin directory. my $dir = '.'; opendir D, $dir or die $!; while ( $_ = readdir D ) { next unless /\.htm$/; my ( $size, $mtime ) = (stat "$dir/$_" )[7,9]; open FH, "$dir/$_" or die "$! on $dir/$_"; print <; } 0$[swish-e.prog-bin]index_hypermail.pl##K92ʢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); $# !/usr/bin/perl -w use strict; ## See documentation below. Script may require customization ## read documentation with "perldoc index_hypermail.pl" use File::Find; use Date::Parse; use HTML::TreeBuilder; use Data::Dumper; ## This is the string that is removed while indexing from email addresses ## as defined in the hypermailrc file. # #---------------------- config ----------------------------------------------------- my $dumb_spamblock = '(at)not-real.'; #------------------------------------------------------------------------------------ my $dir = shift || die "must specfy directory to search"; debug(@ARGV) if $dir eq 'debug'; # Do all the work find( { wanted => \&wanted }, $dir ); sub wanted { return if -d; # don't need to process directories return unless /^\d+\.html$/; # If you want it to parse using HTML::Parser use the first line # and comment out the second. But it's a LOT slower #output_file( $File::Find::name, parse_file($_) ); output_file( $File::Find::name, fast_parse($_) ); } sub output_file { my ( $file, $data ) = @_; local $SIG{__WARN__} = sub { "$file: @_" }; # Get last_mod date my $date = str2time( $data->{comments}{received} ); unless ( $data ) { warn "Failed to parse received date in $file\n"; $date = str2time( $data->{comments}{send} ); unless ( $date ) { warn "Failed to parse any dates: skipping $file\n"; return; } } $data->{received} = $date; my $comments = $data->{comments}; $comments->{email} =~ s/\Q$dumb_spamblock/-blabla-/; my $metas = join "\n", map { qq[] } sort keys %{$data->{comments}}; my $title = $comments->{subject} || ''; my $html = < $title $metas $data->{body} EOF my $bytecount = length pack 'C0a*', $html; print <new; $tree->store_comments(1); # meta data is in the comments $tree->warn(1); $tree->parse_file( $file ); my %comments; # Extract out metadata for ( $tree->look_down( '_tag', '~comment' )) { my $comment = $_->attr("text"); $comments{$1} = $2 if $comment =~ /(\w+)="([^"]+)/; } $data{comments} = \%comments if %comments; # should die here if not. # Extract out the searchable content my $body = $tree->look_down('_tag', 'div', 'class', 'mail'); unless ( $body ) { warn "$file: failed to find
\n"; return; } # Remove some sub-nodes we don't care about $body->look_down('_tag', 'address', 'class', 'headers')->delete; $body->look_down('_tag', 'span', 'id', 'received')->delete; $data{body} = $body->as_HTML; $tree->delete; return \%data; } sub fast_parse { my $file = shift; local $_; unless ( open FH, "<$file" ) { warn "Failed to open '$file'. Error: $!"; return; } my %data; my %comments; # First parse out the comments while () { if ( my( $tag, $content) = /$/ ) { unless ( $content ) { warn "File '$file' tag '$tag' empty content\n"; next; } last if $tag eq 'body'; # no more comments in this section $comments{$tag} = $content; } } $data{comments} = \%comments; # Now grab the content my $end_str; # for skipping sections my $body = ''; while ( ) { # loo for ending tag, or maybe even the signature last if // || /^-- $/ || /^--$/ || /^(_|-){40,}\s*$/; # Look for ending tag for a skipped tag set if ( $end_str ) { $end_str = '' if /\Q$end_str/; next; } # These are sections to skip if ( /\Q
100000 UndefinedMetaTags ignore Copy index_hypermail.pl to the current directory. Swish-e installs index_hypermail.pl in the $prefix/share/doc/swish-e/examples/prog-bin directory, where $prefix is typically "/usr/local" or simply "/usr" on some distributions. $ cp /usr/local/share/doc/swish-e/example/prog-bin/index_hypermail . Then Index the documents: $ swish-e -c swish.conf -S prog Now create the search interface: $ cp /usr/local/lib/swish-e/swish.cgi . $ cat .swishcgi.conf $ENV{TZ} = 'UTC'; # display dates in UTC format return { title => "Search the Foo List Archive", display_props => [qw/ name email swishlastmodified /], sorts => [qw/swishrank swishtitle email swishlastmodified/], metanames => [qw/swishdefault swishtitle name email/], name_labels => { swishrank => 'Rank', swishtitle => 'Subject Only', name => "Poster's Name", email => "Poster's Email", swishlastmodified => 'Message Date', swishdefault => 'Subject & Body', }, highlight => { package => 'SWISH::PhraseHighlight', xhighlight_on => '', xhighlight_off => '', meta_to_prop_map => { # this maps search metatags to display properties swishdefault => [ qw/swishtitle swishdescription/ ], swishtitle => [ qw/swishtitle/ ], email => [ qw/email/ ], name => [ qw/name/ ], swishdocpath => [ qw/swishdocpath/ ], }, }, }; Setup web server (OS/web server dependent): /var/www # ln -s /path/to/hypermail/search /var/www # ln -s /path/to/hypermail/archive and maybe tell apache to run the script: $ cat .htaccess Deny from all Allow from all SetHandler cgi-script Options +ExecCGI =head1 DESCRIPTION This script is used to parse files produced by hypermail. Last tested with hypermail pre-2.1.9. It scans the directory passed as the first parameter for files matching \d+\.html and then extracts out the content, email, name and subject. This is then passed to swish-e for indexing. The swish.cgi script is used for searching the resulting index. Configuration settings are stored in the .swish.cgi file located in the current directory. By default, swish.cgi expects the current working directory to be the location of the cgi script. On other web servers this may not be the case and you will need to edit swish.cgi to use absolute path names for .swishcgi.conf and the index files. =head1 USAGE See the SYNOPSIS above. If you do not use the directory structure above you may need to use ReplaceRules in the swish-e config file to adjust the paths stored in the swish-e index file. =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Hypermail can be downloaded from: http://hypermail.org =head1 AUTHOR Bill Moseley moseley@hank.org. 2004 =head1 SUPPORT Please contact the Swish-e discussion email list for support with this module or with Swish-e. Please do not contact the developers directly. 0[swish-e.prog-bin]pdf2html.pm# #'=2d0m0 y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); package pdf2html; use strict; =pod =head1 NAME pdf2html - swish-e sample module to convert pdf to html =head1 SYNOPSIS use pdf2html; my $html_record_ref = pdf2html( $pdf_file_name, 'title' ); # or by passing content in a scalar reference my $html_text_ref = pdf2html( \$pdf_content, 'title' ); =head1 DESCRIPTION Sample module for use with other swish-e 'prog' document source programs. Pass either a file name, or a scalar reference. The differece is when you pass a reference to a scalar only the content is returned. When you pass a file name an entire record is returned ready to be fed to swish -- this includes the headers required by swish for indexing. The second optional parameter is the extracted PDF info tag to use as the HTML title. The plan is to find a library that will do this to avoid forking an external program. =head1 REQUIREMENTS Uses the xpdf package that includes the pdftotext conversion program. This is available from http://www.foolabs.com/xpdf/xpdf.html. You will also need the module File::Temp (and its dependencies) available from CPAN if passing content to this module (instead of a file name). =head1 AUTHOR Bill Moseley =cut use Symbol; use vars qw( @ISA @EXPORT $VERSION ); # $Id: pdf2html.pm,v 1.8 2003/06/12 04:00:45 whmoseley Exp $ $VERSION = sprintf '%d.%02d', q$Revision: 1.8 $ =~ /: (\d+)\.(\d+)/; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(pdf2html); if ( $0 eq 'pdf2html.pm' ) { my $file = shift || die "Usage: perl pdf2html.pm file.pdf [title tag]\n"; my $title = shift; print ${pdf2html( $file, $title )}; } sub pdf2html { my $file_or_content = shift; my $title_tag = shift; my $file = ref $file_or_content ? create_temp_file( $file_or_content ) : $file_or_content; my $metadata = get_pdf_headers( $file ); my $headers = format_metadata( $metadata ); if ( $title_tag && exists $metadata->{ $title_tag } ) { my $title = escapeXML( $metadata->{ $title_tag } ); $headers = "$title\n" . $headers } # Check for encrypted content my $content_ref; # patch provided by Martial Chartoire if ( $metadata->{encrypted} && $metadata->{encrypted} =~ /yes\.*\scopy:no\s\.*/i ) { $content_ref = \''; } else { $content_ref = get_pdf_content_ref( $file ); } my $txt = < $headers
$$content_ref
EOF if ( ref $file_or_content ) { # unlink $file; return \$txt; } my $mtime = (stat $file )[9]; my $size = length $txt; my $ret = <) { if ( /^\s*([^:]+):\s+(.+)$/ ) { my ( $metaname, $value ) = ( lc( $1 ), $2 ); $metaname =~ tr/ /_/; $metadata{$metaname} = $value; } } close $sym or warn "$0: Failed close on pipe to pdfinfo for $file: $?"; return \%metadata; } sub format_metadata { my $metadata = shift; my $metas = join "\n", map { qq['; } sort keys %$metadata; return $metas; } sub get_pdf_content_ref { my $file = shift; # This doesn't work my $path = $file; for ( $path ) { s/"/\\"/g; $path = qq["$path"]; } my $sym = gensym; open $sym, "pdftotext $path - |" or die "$0: failed to run pdftotext: $!"; local $/ = undef; my $content = escapeXML(<$sym>); close $sym or warn "$0: Failed close on pipe to pdftotext for $file: $?"; return \$content; } # How are URLs printed with pdftotext? sub escapeXML { my $str = shift; for ( $str ) { s/&/&/go; s/"/"/go; s//>/go; } return $str; } # This is the portable way to do this, I suppose. # Otherwise, just create a file in the local directory. sub create_temp_file { my $scalar_ref = shift; require "File/Temp.pm"; my ( $fh, $file_name ) = File::Temp::tempfile(); print $fh $$scalar_ref or die $!; close $fh or die "Failed to close '$file_name' $!"; return $file_name; } 1; 0[swish-e.prog-bin]pdf2xml.pm## >2d0m0y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); package pdf2xml; use strict; =pod =head1 NAME pdf2xml - swish-e sample module to convert pdf2xml =head1 SYNOPSIS use pdf2xml; my $xml_record_ref = pdf2xml( $pdf_file_name ); # or by passing content in a scalar reference my $xml_text_ref = pdf2xml( \$pdf_content ); =head1 DESCRIPTION Sample module for use with other swish-e 'prog' document source programs. Pass either a file name, or a scalar reference. The differece is when you pass a reference to a scalar only the content is returned. When you pass a file name an entire record is returned ready to be fed to swish -- this includes the headers required by swish for indexing. The plan is to find a library that will do this to avoid forking an external program. =head1 REQUIREMENTS Uses the xpdf package that includes the pdftotext conversion program. This is available from http://www.foolabs.com/xpdf/xpdf.html. You will also need the module File::Temp (and its dependencies) available from CPAN if passing content to this module (instead of a file name). =head1 AUTHOR Bill Moseley =cut use Symbol; use vars qw( @ISA @EXPORT $VERSION ); # $Id: pdf2xml.pm,v 1.5 2003/06/12 04:00:45 whmoseley Exp $ $VERSION = sprintf '%d.%02d', q$Revision: 1.5 $ =~ /: (\d+)\.(\d+)/; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(pdf2xml); my @InfoTags = qw/Title Subject Author CreationDate Creator Producer ModDate Keywords/; sub pdf2xml { my $file_or_content = shift; my $file = ref $file_or_content ? create_temp_file( $file_or_content ) : $file_or_content; my $headers = get_pdf_headers( $file ) || ''; my $content_ref = get_pdf_content_ref( $file ); my $txt = < $headers $$content_ref EOF return \$txt if ref $file_or_content; my $mtime = (stat $file )[9]; my $size = length $txt; my $ret = <) { if ( /^\s*([^:]+):\s+(.+)$/ ) { my ( $metaname, $value ) = ( lc( $1 ), escapeXML( $2 ) ); $metaname =~ tr/ /_/; $metadata{$metaname} = $value; } } close $sym or die "$0: Failed close on pipe to pdfinfo for $file: $?"; return join "\n", map { "<$_>$metadata{$_}" } sort keys %metadata; } sub get_pdf_content_ref { my $file = shift; # This doesn't work my $path = $file; for ( $path ) { s/"/\\"/g; $path = qq["$path"]; } my $sym = gensym; open $sym, "pdftotext $path - |" or die "$0: failed to run pdftotext: $!"; local $/ = undef; my $content = escapeXML(<$sym>); close $sym or die "$0: Failed close on pipe to pdftotext for $file: $?"; return \$content; } # How are URLs printed with pdftotext? sub escapeXML { my $str = shift; for ( $str ) { s/&/&/go; s/"/"/go; s//>/go; } return $str; } # This is the portable way to do this, I suppose. # Otherwise, just create a file in the local directory. sub create_temp_file { my $scalar_ref = shift; require "File/Temp.pm"; my ( $fh, $file_name ) = File::Temp::tempfile( UNLINK => 1 ); print $fh $$scalar_ref or die $!; close $fh or die "Failed to close '$file_name' $!"; return $file_name; } 0[swish-e.prog-bin]spider_pl.inr=;|2y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); >#!@@perlbinary@@ -w use strict; # This is set to where Swish-e's "make install" installed the helper modules. use lib qw( @@perlmoduledir@@ ); # $Id: spider.pl.in,v 1.8.2.2 2003/12/23 15:52:02 whmoseley Exp $ # # "prog" document source for spidering web servers # # For documentation, type: # # perldoc spider.pl # # Copyright (C) 2001-2003 Bill Moseley swishscript@hank.org # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version # 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # The above lines must remain at the top of this program #---------------------------------------------------------------------------------- $HTTP::URI_CLASS = "URI"; # prevent loading default URI::URL # so we don't store long list of base items # and eat up memory with >= URI 1.13 use LWP::RobotUA; use HTML::LinkExtor; use HTML::Tagset; use vars '$VERSION'; $VERSION = sprintf '%d.%02d', q$Revision: 1.8.2.2 $ =~ /: (\d+)\.(\d+)/; use vars '$bit'; use constant DEBUG_ERRORS => $bit = 1; # program errors use constant DEBUG_URL => $bit <<= 1; # print out every URL processes use constant DEBUG_HEADERS => $bit <<= 1; # prints the response headers use constant DEBUG_FAILED => $bit <<= 1; # failed to return a 200 use constant DEBUG_SKIPPED => $bit <<= 1; # didn't index for some reason use constant DEBUG_INFO => $bit <<= 1; # more verbose use constant DEBUG_LINKS => $bit <<= 1; # prints links as they are extracted my %DEBUG_MAP = ( errors => DEBUG_ERRORS, url => DEBUG_URL, headers => DEBUG_HEADERS, failed => DEBUG_FAILED, skipped => DEBUG_SKIPPED, info => DEBUG_INFO, links => DEBUG_LINKS, ); use constant MAX_SIZE => 5_000_000; # Max size of document to fetch use constant MAX_WAIT_TIME => 30; # request time. #Can't locate object method "host" via package "URI::mailto" at ../prog-bin/spider.pl line 473. #sub URI::mailto::host { return '' }; # This is not the right way to do this. sub UNIVERSAL::host { '' }; sub UNIVERSAL::port { '' }; sub UNIVERSAL::host_port { '' }; sub UNIVERSAL::userinfo { '' }; #----------------------------------------------------------------------- use vars '@servers'; my $config = shift || 'SwishSpiderConfig.pl'; if ( lc( $config ) eq 'default' ) { @servers = default_urls(); } else { do $config or die "Failed to read $0 configuration parameters '$config' $! $@"; } # Check if can use zlib compression eval { require Compress::Zlib }; my $can_uncompress = 1 unless $@; print STDERR "$0: Reading parameters from '$config'\n" unless $ENV{SPIDER_QUIET}; my $abort; local $SIG{HUP} = sub { warn "Caught SIGHUP\n"; $abort++ } unless $^O =~ /Win32/i; my %visited; # global -- I suppose would be smarter to localize it per server. my %validated; my %bad_links; for my $s ( @servers ) { if ( !$s->{base_url} ) { die "You must specify 'base_url' in your spider config settings\n"; } my @urls = ref $s->{base_url} eq 'ARRAY' ? @{$s->{base_url}} :( $s->{base_url}); for my $url ( @urls ) { $s->{base_url} = $url; process_server( $s ); } } if ( %bad_links ) { print STDERR "\nBad Links:\n\n"; foreach my $page ( sort keys %bad_links ) { print STDERR "On page: $page\n"; printf(STDERR " %-40s %s\n", $_, $validated{$_} ) for @{$bad_links{$page}}; print STDERR "\n"; } } #----------------------------------------------------------------------- sub process_server { my $server = shift; # set defaults if ( $ENV{SPIDER_DEBUG} ) { $server->{debug} = 0; $server->{debug} |= (exists $DEBUG_MAP{lc $_} ? $DEBUG_MAP{lc $_} : die "Bad debug setting passed in environment '$_'\nOptions are: " . join( ', ', keys %DEBUG_MAP) ."\n") for split /\s*,\s*/, $ENV{SPIDER_DEBUG}; } else { $server->{debug} ||= 0; die "debug parameter '$server->{debug}' must be a number\n" unless $server->{debug} =~ /^\d+$/; } $server->{quiet} ||= $ENV{SPIDER_QUIET} || 0; # Lame Microsoft $URI::ABS_REMOTE_LEADING_DOTS = $server->{remove_leading_dots} ? 1 : 0; $server->{max_size} ||= MAX_SIZE; die "max_size parameter '$server->{max_size}' must be a number\n" unless $server->{max_size} =~ /^\d+$/; $server->{max_wait_time} ||= MAX_WAIT_TIME; die "max_wait_time parameter '$server->{max_wait_time}' must be a number\n" if $server->{max_wait_time} !~ /^\d+/; $server->{link_tags} = ['a'] unless ref $server->{link_tags} eq 'ARRAY'; $server->{link_tags_lookup} = { map { lc, 1 } @{$server->{link_tags}} }; die "max_depth parameter '$server->{max_depth}' must be a number\n" if defined $server->{max_depth} && $server->{max_depth} !~ /^\d+/; for ( qw/ test_url test_response filter_content/ ) { next unless $server->{$_}; $server->{$_} = [ $server->{$_} ] unless ref $server->{$_} eq 'ARRAY'; my $n; for my $sub ( @{$server->{$_}} ) { $n++; die "Entry number $n in $_ is not a code reference\n" unless ref $sub eq 'CODE'; } } my $start = time; if ( $server->{skip} ) { print STDERR "Skipping Server Config: $server->{base_url}\n" unless $server->{quiet}; return; } require "HTTP/Cookies.pm" if $server->{use_cookies}; require "Digest/MD5.pm" if $server->{use_md5}; # set starting URL, and remove any specified fragment my $uri = URI->new( $server->{base_url} ); $uri->fragment(undef); if ( $uri->userinfo ) { die "Can't specify parameter 'credentials' because base_url defines them\n" if $server->{credentials}; $server->{credentials} = $uri->userinfo; $uri->userinfo( undef ); } print STDERR "\n -- Starting to spider: $uri --\n" if $server->{debug}; # set the starting server name (including port) -- will only spider on server:port # All URLs will end up with this host:port $server->{authority} = $uri->canonical->authority; # All URLs must match this scheme ( Jan 22, 2002 - spot by Darryl Friesen ) $server->{scheme} = $uri->scheme; # Now, set the OK host:port names $server->{same} = [ $uri->canonical->authority || '' ]; push @{$server->{same}}, @{$server->{same_hosts}} if ref $server->{same_hosts}; $server->{same_host_lookup} = { map { $_, 1 } @{$server->{same}} }; # set time to end $server->{max_time} = $server->{max_time} * 60 + time if $server->{max_time}; # set default agent for log files $server->{agent} ||= 'swish-e spider 2.2 http://swish-e.org/'; # get a user agent object my $ua; # set the delay unless ( defined $server->{delay_sec} ) { if ( defined $server->{delay_min} && $server->{delay_min} =~ /^\d+\.?\d*$/ ) { # change if ever move to Time::HiRes $server->{delay_sec} = int ($server->{delay_min} * 60); } $server->{delay_sec} = 5 unless defined $server->{delay_sec}; } $server->{delay_sec} = 5 unless $server->{delay_sec} =~ /^\d+$/; if ( $server->{ignore_robots_file} ) { $ua = LWP::UserAgent->new; return unless $ua; $ua->agent( $server->{agent} ); $ua->from( $server->{email} ); } else { $ua = LWP::RobotUA->new( $server->{agent}, $server->{email} ); return unless $ua; $ua->delay( 0 ); # handle delay locally. } # If ignore robots files also ignore meta ignore $ua->parse_head( 0 ) if $server->{ignore_robots_file} || $server->{ignore_robots_headers}; # Set the timeout - used to only for windows and used alarm, but this # did not always works correctly. Hopefully $ua->timeout works better in # current versions of LWP (before DNS could block forever) $ua->timeout( $server->{max_wait_time} ); $server->{ua} = $ua; # save it for fun. # $ua->parse_head(0); # Don't parse the content $ua->cookie_jar( HTTP::Cookies->new ) if $server->{use_cookies}; if ( $server->{keep_alive} ) { if ( $ua->can( 'conn_cache' ) ) { my $keep_alive = $server->{keep_alive} =~ /^\d+$/ ? $server->{keep_alive} : 1; $ua->conn_cache( { total_capacity => $keep_alive } ); } else { delete $server->{keep_alive}; warn "Can't use keep-alive: conn_cache method not available\n"; } } # uri, parent, depth eval { spider( $server, $uri ) }; print STDERR $@ if $@; # provide a way to call a function in the config file when all done check_user_function( 'spider_done', undef, $server ); delete $server->{ua}; # Free up LWP to avoid CLOSE_WAITs hanging around when using a lot of @servers. return if $server->{quiet}; $start = time - $start; $start++ unless $start; my $max_width = 0; my $max_num = 0; for ( keys %{$server->{counts}} ) { $max_width = length if length > $max_width; my $val = commify( $server->{counts}{$_} ); $max_num = length $val if length $val > $max_num; } print STDERR "\nSummary for: $server->{base_url}\n"; for ( sort keys %{$server->{counts}} ) { printf STDERR "%${max_width}s: %${max_num}s (%0.1f/sec)\n", $_, commify( $server->{counts}{$_} ), $server->{counts}{$_}/$start; } } #----------------------------------------------------------------------- # Deal with Basic Authen # Thanks Gisle! sub get_basic_credentials { my($uri, $server, $realm ) = @_; my $netloc = $uri->canonical->host_port; my ($user, $password); eval { local $SIG{ALRM} = sub { die "timed out\n" }; alarm( $server->{credential_timeout} || 30 ) unless $^O =~ /Win32/i; if ( $uri->userinfo ) { print STDERR "\nSorry: invalid username/password\n"; $uri->userinfo( undef ); } print STDERR "Need Authentication for $uri at realm '$realm'\n( skips)\nUsername: "; $user = ; chomp($user); die "No Username specified\n" unless length $user; alarm( $server->{credential_timeout} || 30 ) unless $^O =~ /Win32/i; print STDERR "Password: "; system("stty -echo"); $password = ; system("stty echo"); print STDERR "\n"; # because we disabled echo chomp($password); alarm( 0 ) unless $^O =~ /Win32/i; }; return if $@; return join ':', $user, $password; } #----------- Non recursive spidering --------------------------- sub spider { my ( $server, $uri ) = @_; # Validate the first link, just in case return unless check_link( $uri, $server, '', '(Base URL)' ); my @link_array = [ $uri, '', 0 ]; while ( @link_array ) { die $server->{abort} if $abort || $server->{abort}; my ( $uri, $parent, $depth ) = @{shift @link_array}; delay_request( $server ); my $new_links = process_link( $server, $uri, $parent, $depth ); push @link_array, map { [ $_, $uri, $depth+1 ] } @$new_links if $new_links; } } #---------- Delay a request based on the delay time ------------- sub delay_request { my ( $server ) = @_; # return if no delay or first request return if !$server->{delay_sec} || !$server->{last_response_time}; if ( $server->{keep_alive_connection} ) { $server->{counts}{'Connection: Keep-Alive'}++; # no delay on keep-alives return; } $server->{counts}{'Connection: Close'}++; my $wait = $server->{delay_sec} - ( time - $server->{last_response_time} ); return unless $wait > 0; print STDERR "sleeping $wait seconds\n" if $server->{debug} & DEBUG_URL; sleep( $wait ); } #----------- Process a url and return links ----------------------- sub process_link { my ( $server, $uri, $parent, $depth ) = @_; $server->{counts}{'Unique URLs'}++; die "$0: Max files Reached\n" if $server->{max_files} && $server->{counts}{'Unique URLs'} > $server->{max_files}; die "$0: Time Limit Exceeded\n" if $server->{max_time} && $server->{max_time} < time; # make request my $ua = $server->{ua}; my $request = HTTP::Request->new('GET', $uri ); $request->header('Accept-encoding', 'gzip; deflate') if $can_uncompress; my $content = ''; # Really should just subclass the response object! $server->{no_contents} = 0; $server->{no_index} = 0; $server->{no_spider} = 0; # Set basic auth if defined - use URI specific first, then credentials # this doesn't track what should have authorization if ( my ( $user, $pass ) = split /:/, ( $uri->userinfo || $server->{credentials} || '' ) ) { $request->authorization_basic( $user, $pass ); } my $been_here; my $callback = sub { # Cache user/pass if ( $server->{cur_realm} && $uri->userinfo ) { my $key = $uri->canonical->host_port . ':' . $server->{cur_realm}; $server->{auth_cache}{$key} = $uri->userinfo; } $uri->userinfo( undef ) unless $been_here; die "test_response" if !$been_here++ && !check_user_function( 'test_response', $uri, $server, $_[1], \$_[0] ); if ( length( $content ) + length( $_[0] ) > $server->{max_size} ) { print STDERR "-Skipped $uri: Document exceeded $server->{max_size} bytes\n" if $server->{debug}&DEBUG_SKIPPED; die "too big!\n"; } $content .= $_[0]; }; ## Make Request ## # Used to wrap in an eval and use alarm on non-win32 to fix broken $ua->timeout my $response = $ua->simple_request( $request, $callback, 4096 ); return if $server->{abort}; if ( $response && $response->code == 401 && $response->header('WWW-Authenticate') && $response->header('WWW-Authenticate') =~ /realm="([^"]+)"/i ) { my $realm = $1; my $user_pass; # Do we have a cached user/pass for this realm? my $key = $uri->canonical->host_port . ':' . $realm; if ( $user_pass = $server->{auth_cache}{$key} ) { # If we didn't just try it, try again unless( $uri->userinfo && $user_pass eq $uri->userinfo ) { $uri->userinfo( $user_pass ); return process_link( $server, $uri, $parent, $depth ); } } # otherwise, prompt: if ( $user_pass = get_basic_credentials( $uri, $server, $realm ) ) { $uri->userinfo( $user_pass ); $server->{cur_realm} = $realm; # save so we can cache my $links = process_link( $server, $uri, $parent, $depth ); delete $server->{cur_realm}; return $links; } print STDERR "Skipping $uri\n"; } $uri->userinfo( undef ); # Log the response if ( ( $server->{debug} & DEBUG_URL ) || ( $server->{debug} & DEBUG_FAILED && !$response->is_success) ) { print STDERR '>> ', join>( ' ', ( $response->is_success ? '+Fetched' : '-Failed' ), $depth, "Cnt: $server->{counts}{'Unique URLs'}", $uri, ( $response->status_line || $response->status || 'unknown status' ), ( $response->content_type || 'Unknown content type'), ( $response->content_length || '???' ), "parent:$parent", ),"\n"; } print STDERR "\n----HEADERS for $uri ---\n", $response->headers_as_string,"-----END HEADERS----\n\n" if $server->{debug} & DEBUG_HEADERS; # Deal with the client generated responses # If the LWP callback aborts if ( $response->header('client-aborted') ) { my $msg = $response->header('X-Died') || 'unknown'; delete $server->{keep_alive_connection}; # aborting kills the connection if ( $msg !~ /test_response/ ) { $server->{counts}{Skipped}++; print STDERR "Request for '$uri' aborted because: '$msg'\n" if $server->{debug}&DEBUG_SKIPPED; } return; } $response->request->uri->userinfo( undef ) if $response->request; # skip excluded by robots.txt if ( !$response->is_success && $response->status_line =~ 'robots.txt' ) { print STDERR "-Skipped $depth $uri: ", $response->status_line,"\n" if $server->{debug}&DEBUG_SKIPPED; $server->{counts}{'robots.txt'}++; return; } # save the request completion time for delay_min $server->{last_response_time} = time; # LWP failes to return the Connection header after the first response my $connection = $response->header('Connection') || 'Keep-alive'; $server->{keep_alive_connection} = $server->{keep_alive} && $connection !~ /close/i; # Report bad links (excluding those skipped by robots.txt if ( $server->{validate_links} && !$response->is_success ) { validate_link( $server, $uri, $parent, $response ); } # And check for meta robots tag # -- should probably be done in request sub to avoid fetching docs that are not needed # -- also, this will not not work with compression $$$ check this unless ( $server->{ignore_robots_file} || $server->{ignore_robots_headers} ) { if ( my $directives = $response->header('X-Meta-ROBOTS') ) { my %settings = map { lc $_, 1 } split /\s*,\s*/, $directives; $server->{no_contents}++ if exists $settings{nocontents}; # an extension for swish $server->{no_index}++ if exists $settings{noindex}; $server->{no_spider}++ if exists $settings{nofollow}; } } unless ( $response->is_success ) { # look for redirect if ( $response->is_redirect && $response->header('location') ) { my $u = URI->new_abs( $response->header('location'), $response->base ); if ( $u->canonical eq $uri->canonical ) { print STDERR "Warning: $uri redirects to itself!.\n"; return; } return [$u] if check_link( $u, $server, $response->base, '(redirect)','Location' ); } return; } # Check for meta refresh # requires that $ua->parse_head() is enabled (the default) my $refresh = $response->header('refresh') || ''; if ( $refresh =~ /URL\s*=\s*(.+)/ ) { my $u = URI->new_abs( $1, $response->base ); if ( $u->canonical eq $uri->canonical ) { print STDERR "Warning: $uri redirects to itself!.\n"; return; } return [$u] if check_link( $u, $server, $response->base, 'meta','refresh' ); } # return unless $content; # $$$ any reason to index empty files? # make sure content is unique - probably better to chunk into an MD5 object above if ( $server->{use_md5} ) { my $digest = $response->header('Content-MD5') || Digest::MD5::md5($content); if ( $visited{ $digest } ) { print STDERR "-Skipped $uri has same digest as $visited{ $digest }\n" if $server->{debug} & DEBUG_SKIPPED; $server->{counts}{Skipped}++; $server->{counts}{'MD5 Duplicates'}++; return; } $visited{ $digest } = $uri; } # Uncompress content if ( $can_uncompress && (my $encoding = $response->header('Content-Encoding') ) ) { $content = Compress::Zlib::memGunzip($content) if $encoding =~ /gzip/i; $content = Compress::Zlib::uncompress($content) if $encoding =~ /deflate/i; } # Extract out links (if not too deep) my $links_extracted = extract_links( $server, \$content, $response ) unless defined $server->{max_depth} && $depth >= $server->{max_depth}; # Index the file if ( $server->{no_index} ) { $server->{counts}{Skipped}++; print STDERR "-Skipped indexing $uri some callback set 'no_index' flag\n" if $server->{debug}&DEBUG_SKIPPED; } else { return $links_extracted unless check_user_function( 'filter_content', $uri, $server, $response, \$content ); output_content( $server, \$content, $uri, $response ) unless $server->{no_index}; } return $links_extracted; } #=================================================================================================== # Calls a user-defined function # #--------------------------------------------------------------------------------------------------- sub check_user_function { my ( $fn, $uri, $server ) = ( shift, shift, shift ); return 1 unless $server->{$fn}; my $tests = ref $server->{$fn} eq 'ARRAY' ? $server->{$fn} : [ $server->{$fn} ]; my $cnt; for my $sub ( @$tests ) { $cnt++; print STDERR "?Testing '$fn' user supplied function #$cnt '$uri'\n" if $server->{debug} & DEBUG_INFO; my $ret; eval { $ret = $sub->( $uri, $server, @_ ) }; if ( $@ ) { print STDERR "-Skipped $uri due to '$fn' user supplied function #$cnt death '$@'\n" if $server->{debug} & DEBUG_SKIPPED; $server->{counts}{Skipped}++; return; } next if $ret; print STDERR "-Skipped $uri due to '$fn' user supplied function #$cnt\n" if $server->{debug} & DEBUG_SKIPPED; $server->{counts}{Skipped}++; return; } print STDERR "+Passed all $cnt tests for '$fn' user supplied function\n" if $server->{debug} & DEBUG_INFO; return 1; } #============================================================================================== # Extract links from a text/html page # # Call with: # $server - server object # $content - ref to content # $response - response object # #---------------------------------------------------------------------------------------------- sub extract_links { my ( $server, $content, $response ) = @_; return unless $response->header('content-type') && $response->header('content-type') =~ m[^text/html]; # allow skipping. if ( $server->{no_spider} ) { print STDERR '-Links not extracted: ', $response->request->uri->canonical, " some callback set 'no_spider' flag\n" if $server->{debug}&DEBUG_SKIPPED; return; } $server->{Spidered}++; my @links; my $base = $response->base; $visited{ $base }++; # $$$ come back and fix this (see 4/20/03 lwp post) print STDERR "\nExtracting links from ", $response->request->uri, ":\n" if $server->{debug} & DEBUG_LINKS; my $p = HTML::LinkExtor->new; $p->parse( $$content ); my %skipped_tags; for ( $p->links ) { my ( $tag, %attr ) = @$_; # which tags to use ( not reported in debug ) my $attr = join ' ', map { qq[$_="$attr{$_}"] } keys %attr; print STDERR "\nLooking at extracted tag '<$tag $attr>'\n" if $server->{debug} & DEBUG_LINKS; unless ( $server->{link_tags_lookup}{$tag} ) { # each tag is reported only once per page print STDERR " <$tag> skipped because not one of (", join( ',', @{$server->{link_tags}} ), ")\n" if $server->{debug} & DEBUG_LINKS && !$skipped_tags{$tag}++; if ( $server->{validate_links} && $tag eq 'img' && $attr{src} ) { my $img = URI->new_abs( $attr{src}, $base ); validate_link( $server, $img, $base ); } next; } # Grab which attribute(s) which might contain links for this tag my $links = $HTML::Tagset::linkElements{$tag}; $links = [$links] unless ref $links; my $found; # Now, check each attribut to see if a link exists for my $attribute ( @$links ) { if ( $attr{ $attribute } ) { # ok tag # Create a URI object my $u = URI->new_abs( $attr{$attribute},$base ); next unless check_link( $u, $server, $base, $tag, $attribute ); push @links, $u; print STDERR qq[ $attribute="$u" Added to list of links to follow\n] if $server->{debug} & DEBUG_LINKS; $found++; } } if ( !$found && $server->{debug} & DEBUG_LINKS ) { print STDERR " tag did not include any links to follow or is a duplicate\n"; } } print STDERR "! Found ", scalar @links, " links in ", $response->base, "\n\n" if $server->{debug} & DEBUG_INFO; return \@links; } #============================================================================= # This function check's if a link should be added to the list to spider # # Pass: # $u - URI object # $server - the server hash # $base - the base or parent of the link # # Returns true if a valid link # # Calls the user function "test_url". Link rewriting before spider # can be done here. # #------------------------------------------------------------------------------ sub check_link { my ( $u, $server, $base, $tag, $attribute ) = @_; $tag ||= ''; $attribute ||= ''; # Kill the fragment $u->fragment( undef ); # Here we make sure we are looking at a link pointing to the correct (or equivalent) host unless ( $server->{scheme} eq $u->scheme && $server->{same_host_lookup}{$u->canonical->authority||''} ) { print STDERR qq[ ?? <$tag $attribute="$u"> skipped because different host\n] if $server->{debug} & DEBUG_LINKS; $server->{counts}{'Off-site links'}++; validate_link( $server, $u, $base ) if $server->{validate_links}; return; } $u->host_port( $server->{authority} ); # Force all the same host name # Allow rejection of this URL by user function return unless check_user_function( 'test_url', $u, $server ); # Don't add the link if already seen - these are so common that we don't report # Might be better to do something like $visited{ $u->path } or $visited{$u->host_port}{$u->path}; if ( $visited{ $u->canonical }++ ) { #$server->{counts}{Skipped}++; $server->{counts}{Duplicates}++; # Just so it's reported for all pages if ( $server->{validate_links} && $validated{$u->canonical} ) { push @{$bad_links{ $base->canonical }}, $u->canonical; } return; } return 1; } #============================================================================= # This function is used to validate links that are off-site. # # It's just a very basic link check routine that lets you validate the # off-site links at the same time as indexing. Just because we can. # #------------------------------------------------------------------------------ sub validate_link { my ($server, $uri, $base, $response ) = @_; $base = URI->new( $base ) unless ref $base; $uri = URI->new_abs($uri, $base) unless ref $uri; # Already checked? if ( exists $validated{ $uri->canonical } ) { # Add it to the list of bad links on that page if it's a bad link. push @{$bad_links{ $base->canonical }}, $uri->canonical if $validated{ $uri->canonical }; return; } $validated{ $uri->canonical } = 0; # mark as checked and ok. unless ( $response ) { my $ua = LWP::UserAgent->new(timeout => $server->{max_wait_time} ); my $request = HTTP::Request->new('HEAD', $uri->canonical ); $response = $ua->simple_request( $request ); } return if $response->is_success; my $error = $response->status_line || $response->status || 'unknown status'; $error .= ' ' . URI->new_abs( $response->header('location'), $response->base )->canonical if $response->is_redirect && $response->header('location'); $validated{ $uri->canonical } = $error; push @{$bad_links{ $base->canonical }}, $uri->canonical; } sub output_content { my ( $server, $content, $uri, $response ) = @_; $server->{indexed}++; unless ( length $$content ) { print STDERR "Warning: document '", $response->request->uri, "' has no content\n"; $$content = ' '; } $server->{counts}{'Total Bytes'} += length $$content; $server->{counts}{'Total Docs'}++; # ugly and maybe expensive, but perhaps more portable than "use bytes" my $bytecount = length pack 'C0a*', $$content; # Decode the URL my $path = $uri; $path =~ s/%([0-9a-fA-F]{2})/chr hex($1)/ge; my $headers = join "\n", 'Path-Name: ' . $path, 'Content-Length: ' . $bytecount, ''; $headers .= 'Last-Mtime: ' . $response->last_modified . "\n" if $response->last_modified; # Set the parser type if specified by filtering if ( my $type = delete $server->{parser_type} ) { $headers .= "Document-Type: $type\n"; } elsif ( $response->content_type =~ m!^text/(html|xml|plain)! ) { $type = $1 eq 'plain' ? 'txt' : $1; $headers .= "Document-Type: $type*\n"; } $headers .= "No-Contents: 1\n" if $server->{no_contents}; print "$headers\n$$content"; die "$0: Max indexed files Reached\n" if $server->{max_indexed} && $server->{counts}{'Total Docs'} >= $server->{max_indexed}; } sub commify { local $_ = shift; 1 while s/^([-+]?\d+)(\d{3})/$1,$2/; return $_; } sub default_urls { my $validate = 0; if ( $ARGV[0] eq 'validate' ) { shift @ARGV; $validate = 1; } die "$0: Must list URLs when using 'default'\n" unless @ARGV; ## See if we have any filters my ($filter_sub, $response_sub); eval { require SWISH::Filter }; unless ( $@ ) { my $filter = SWISH::Filter->new; $filter_sub = sub { my ( $uri, $server, $response, $content_ref ) = @_; my $content_type = $response->content_type; # Ignore text/* content type -- no need to filter return 1 if !$content_type || $content_type =~ m!^text/!; my $doc = $filter->convert( document => $content_ref, name => $response->base, content_type => $content_type, ); return 1 unless $doc; # so just proceed as if not using filter if ( $doc->is_binary ) { # ignore "binary" files (not text/* mime type) die "Skipping " . $response->base . " due to content type: " . $doc->content_type ." may be binary\n"; } # nicer to use **char... $$content_ref = ${$doc->fetch_doc}; # let's see if we can set the parser. $server->{>parser_type} = $doc->swish_parser_type || ''; return 1; } } else { warn "Failed to find the SWISH::Filter module\n"; my @content_types = qw{ text/html text/plain }; $response_sub = sub { my $content_type = $_[2]->content_type; my $ok = grep { $_ eq $content_type } @content_types; return 1 if $ok; print STDERR "$_[0] $content_type != (@content_types)\n"; return; } } return map { { #debug => DEBUG_HEADERS, #debug => DEBUG_URL|DEBUG_SKIPPED|DEBUG_INFO, base_url => \@ARGV, email => 'swish@user.failed.to.set.email.invalid', link_tags => [qw/ a frame /], keep_alive => 1, test_url => sub { $_[0]->path !~ /\.(?:gif|jpeg|png)$/i }, test_response => $response_sub, filter_content => $filter_sub, validate_links => $validate, } } @ARGV; } __END__ =head1 NAME spider.pl - Example Perl program to spider web servers =head1 SYNOPSIS swish.config: IndexDir ./spider.pl SwishProgParameters spider.config # other swish-e settings spider.config: @servers = ( { base_url => 'http://myserver.com/', email => 'me@myself.com', # other spider settings described below }, ); Begin indexing: swish-e -S prog -c swish.config Note: When running on some versions of Windows (e.g. Win ME and Win 98 SE) you may need to index using the command: perl spider.pl | swish-e -S prog -c swish.conf -i stdin This pipes the output of the spider directly into swish. =head1 DESCRIPTION This is a swish-e "prog" document source program for spidering web servers. It can be used instead of the C method for spidering with swish. The spider typically uses a configuration file that lists the URL(s) to spider, and configuration parameters that control the behavior of the spider. In addition, you may define I perl functions in the configuration file that can dynamically change the behavior of the spider based on URL, HTTP response headers, or the content of the fetched document. These callback functions can also be used to filter or convert documents (e.g. PDF, gzip, MS Word) into a format that swish-e can parse. Some examples are provided. You define "servers" to spider, set a few parameters, create callback routines, and start indexing as the synopsis above shows. The spider requires its own configuration file (unless you want the default values). This is NOT the same configuration file that swish-e uses. The example configuration file C is included in the C directory along with this script. Please just use it as an example, as it contains more settings than you probably want to use. Start with a tiny config file and add settings as required by your situation. The available configuration parameters are discussed below. If all that sounds confusing, then you can run the spider with default settings. In fact, you can run the spider without using swish just to make sure it works. Just run ./spider.pl default http://someserver.com/sometestdoc.html And you should see F dumped to your screen. Get ready to kill the script if the file you request contains links as the output from the fetched pages will be displayed. ./spider.pl default http://someserver.com/sometestdoc.html > output.file might be more friendly. If the first parameter passed to the spider is the word "default" (as in the preceeding example) then the spider uses the default parameters, and the following parameter(s) are expected to be URL(s) to spider. Otherwise, the first parameter is considered to be the name of the configuration file (as described below). When using C<-S prog>, the swish-e configuration setting C is used to pass parameters to the program specified with C or the C<-i> switch. If you do not specify any parameters the program will look for the file SwishSpiderConfig.pl in the current directory. The spider does require Perl's LWP library and a few other reasonably common modules. Most well maintained systems should have these modules installed. If not, start here: http://search.cpan.org/search?dist=libwww-perl http://search.cpan.org/search?dist=HTML-Parser See more below in C. It's a good idea to check that you are running a current version of these modules. =head2 Robots Exclusion Rules and being nice By default, this script will not spider files blocked by F. In addition, The script will check for tags, which allows finer control over what files are indexed and/or spidered. See http://www.robotstxt.org/wc/exclusion.html for details. This spider provides an extension to the tag exclusion, by adding a C attribute. This attribute turns on the C setting, which asks swish-e to only index the document's title (or file name if not title is found). For example: says to just index the document's title, but don't index its contents, and don't follow any links within the document. Granted, it's unlikely that this feature will ever be used... If you are indexing your own site, and know what you are doing, you can disable robot exclusion by the C configuration parameter, described below. This disables both F and the meta tag parsing. You may disable just the meta tag parsing by using C. This script only spiders one file at a time, so load on the web server is not that great. And with libwww-perl-5.53_91 HTTP/1.1 keep alive requests can reduce the load on the server even more (and potentially reduce spidering time considerably!) Still, discuss spidering with a site's administrator before beginning. Use the C to adjust how fast the spider fetches documents. Consider running a second web server with a limited number of children if you really want to fine tune the resources used by spidering. =head2 Duplicate Documents The spider program keeps track of URLs visited, so a document is only indexed one time. The Digest::MD5 module can be used to create a "fingerprint" of every page indexed and this fingerprint is used in a hash to find duplicate pages. For example, MD5 will prevent indexing these as two different documents: http://localhost/path/to/some/index.html http://localhost/path/to/some/ But note that this may have side effects you don't want. If you want this file indexed under this URL: http://localhost/important.html But the spider happens to find the exact content in this file first: http://localhost/developement/test/todo/maybeimportant.html Then only that URL will be indexed. =head2 Broken relative links Some times web page authors use too many C segments in relative URLs which reference documents above the document root. Some web servers such as Apache will return a 400 Bad Request when requesting a document above the root. Other web servers such as Micorsoft IIS/5.0 will try and "correct" these errors. This correction will lead to loops when spidering. The spider can fix these above-root links by placing the following in your spider config: remove_leading_dots => 1, It is not on by default so that the spider can report the broken links (as 400 errors on sane webservers). =head2 Compression If The Perl module Compress::Zlib is installed the spider will send the Accept-Encoding: gzip header and uncompress the document if the server returns the header Content-Encoding: gzip MD5 checksomes are done on the compressed data. MD5 may slow down indexing a tiny bit, so test with and without if speed is an issue (which it probably isn't since you are spidering in the first place). This feature will also use more memory. Note: the "prog" document source in swish bypasses many swish-e configuration settings. For example, you cannot use the C directive with the "prog" document source. This is by design to limit the overhead when using an external program for providing documents to swish; after all, with "prog", if you don't want to index a file, then don't give it to swish to index in the first place. So, for spidering, if you do not wish to index images, for example, you will need to either filter by the URL or by the content-type returned from the web server. See L<"CALLBACK FUNCTIONS"> below for more information. =head1 REQUIREMENTS Perl 5 (hopefully at least 5.00503) or later. You must have the LWP Bundle on your computer. Load the LWP::Bundle via the CPAN.pm shell, or download libwww-perl-x.xx from CPAN (or via ActiveState's ppm utility). Also required is the the HTML-Parser-x.xx bundle of modules also from CPAN (and from ActiveState for Windows). http://search.cpan.org/search?dist=libwww-perl http://search.cpan.org/search?dist=HTML-Parser You will also need Digest::MD5 if you wish to use the MD5 feature. HTML::Tagset is also required. Other modules may be required (for example, the pod2xml.pm module has its own requirementes -- see perldoc pod2xml for info). The spider.pl script, like everyone else, expects perl to live in /usr/local/bin. If this is not the case then either add a symlink at /usr/local/bin/perl to point to where perl is installed or modify the shebang (#!) line at the top of the spider.pl program. Note that the libwww-perl package does not support SSL (Secure Sockets Layer) (https) by default. See F included in the libwww-perl package for information on installing SSL support. =head1 CONFIGURATION FILE Configuration is not very fancy. The spider.pl program simply does a C to read in the parameters and create the callback subroutines. The C is the first parameter passed to the spider script, which is set by the Swish-e configuration setting C. For example, if in your swish-e configuration file you have SwishProgParameters /path/to/config.pl IndexDir /home/moseley/swish-e/prog-bin/spider.pl And then run swish as swish-e -c swish.config -S prog swish will run C and the spider.pl program will receive as its first parameter C, and spider.pl will read C to get the spider configuration settings. If C is not set, the program will try to use C by default. There is a special case of: SwishProgParameters default http://www.mysite/index.html ... Where default parameters are used. This will only index documents of type C or C, and will skip any file with an extension that matches the pattern: /\.(?:gif|jpeg|.png)$/i This can be useful for indexing just your web documnts, but you will probably want finer control over your spidering by using a configuration file. The configuration file must set a global variable C<@servers> (in package main). Each element in C<@servers> is a reference to a hash. The elements of the has are described next. More than one server hash may be defined -- each server will be spidered in order listed in C<@servers>, although currently a I hash is used to prevent spidering the same URL twice. Examples: my %serverA = ( base_url => 'http://swish-e.org/', same_hosts => [ qw/www.swish-e.org/ ], email => 'my@email.address', ); my %serverB = ( ... ... ); @servers = ( \%serverA, \%serverB, ); =head1 CONFIGURATION OPTIONS This describes the required and optional keys in the server configuration hash, in random order... =over 4 =item base_url This required setting is the starting URL for spidering. Typically, you will just list one URL for the base_url. You may specify more than one URL as a reference to a list base_url => [qw! http://swish-e.org/ http://othersite.org/other/index.html !], You may specify a username and password: base_url => 'http://user:pass@swish-e.org/index.html', but you may find that to be a security issue. If a URL is protected by Basic Authentication you will be prompted for a username and password. This might be a slighly safer way to go. The parameter C controls how long to wait for user entry before skipping the current URL. See also C below. =item same_hosts This optional key sets equivalent B name(s) for the site you are spidering. For example, if your site is C but also can be reached by C (with or without C) and also C then: Example: $serverA{base_url} = 'http://www.mysite.edu/index.html'; $serverA{same_hosts} = ['mysite.edu', 'web.mysite.edu']; Now, if a link is found while spidering of: http://web.mysite.edu/path/to/file.html it will be considered on the same site, and will actually spidered and indexed as: http://www.mysite.edu/path/to/file.html Note: This should probably be called B because it compares the URI C against the list of host names in C. So, if you specify a port name in you will want to specify the port name in the the list of hosts in C: my %serverA = ( base_url => 'http://sunsite.berkeley.edu:4444/', same_hosts => [ qw/www.sunsite.berkeley.edu:4444/ ], email => 'my@email.address', ); =item email This required key sets the email address for the spider. Set this to your email address. =item agent This optional key sets the name of the spider. =item link_tags This optional tag is a reference to an array of tags. Only links found in these tags will be extracted. The default is to only extract links from C
tags. For example, to extract tags from C tags and from C tags: my %serverA = ( base_url => 'http://sunsite.berkeley.edu:4444/', same_hosts => [ qw/www.sunsite.berkeley.edu:4444/ ], email => 'my@email.address', link_tags => [qw/ a frame /], ); =item delay_sec This optional key sets the delay in seconds to wait between requests. See the LWP::RobotUA man page for more information. The default is 5 seconds. Set to zero for no delay. When using the keep_alive feature (recommended) the delay will used only where the previous request returned a "Connection: closed" header. Note: A common recommendation is to use a delay of one minute between requests. For example, one minute is the default used in the LWP::RobotUA Perl module. =item delay_min (deprecated) Set the delay to wait between requests in minutes. If both delay_sec and delay_min are defined, delay_sec will be used. =item max_wait_time This setting is the number of seconds to wait for data to be returned from the request. Data is returned in chunks to the spider, and the timer is reset each time a new chunk is reported. Therefore, documents (requests) that take longer than this setting should not be aborted as long as some data is received every max_wait_time seconds. The default it 30 seconds. NOTE: This option has no effect on Windows. =item max_time This optional key will set the max minutes to spider. Spidering for this host will stop after C minutes, and move on to the next server, if any. The default is to not limit by time. =item max_files This optional key sets the max number of files to spider before aborting. The default is to not limit by number of files. This is the number of requests made to the remo>te server, not the total number of files to index (see C). This count is displayted at the end of indexing as C. This feature can (and perhaps should) be use when spidering a web site where dynamic content may generate unique URLs to prevent run-away spidering. =item max_indexed This optional key sets the max number of files that will be indexed. The default is to not limit. This is the number of files sent to swish for indexing (and is reported by C when spidering ends). =item max_size This optional key sets the max size of a file read from the web server. This B to 5,000,000 bytes. If the size is exceeded the resource is skipped and a message is written to STDERR if the DEBUG_SKIPPED debug flag is set. =item keep_alive This optional parameter will enable keep alive requests. This can dramatically speed up spidering and reduce the load on server being spidered. The default is to not use keep alives, although enabling it will probably be the right thing to do. To get the most out of keep alives, you may want to set up your web server to allow a lot of requests per single connection (i.e MaxKeepAliveRequests on Apache). Apache's default is 100, which should be good. When a connection is not closed the spider does not wait the "delay_sec" time when making the next request. In other words, there is no delay in requesting documents while the connection is open. Note: try to filter as many documents as possible B making the request to the server. In other words, use C to look for files ending in C<.html> instead of using C to look for a content type of C if possible. Do note that aborting a request from C will break the current keep alive connection. Note: you must have at least libwww-perl-5.53_90 installed to use this feature. =item skip This optional key can be used to skip the current server. It's only purpose is to make it easy to disable a server in a configuration file. =item debug Set this to a number to display different amounts of info while spidering. Writes info to STDERR. Zero/undefined is no debug output. The following constants are defined for debugging. They may be or'ed together to get the individual debugging of your choice. Here are basically the levels: DEBUG_ERRORS general program errors (not used at this time) DEBUG_URL print out every URL processes DEBUG_HEADERS prints the response headers DEBUG_FAILED failed to return a 200 DEBUG_SKIPPED didn't index for some reason DEBUG_INFO more verbose DEBUG_LINKS prints links as they are extracted For example, to display the urls processed, failed, and skipped use: debug => DEBUG_URL | DEBUG_FAILED | DEBUG_SKIPPED, To display the returned headers debug => DEBUG_HEADERS, You can easily run the spider without using swish for debugging purposes: ./spider.pl test.config > spider.out And you will see debugging info as it runs, and the fetched documents will be saved in the C file. Debugging can be also be set by an environment variable when running swish. This will override any setting in the configuration file. Set the variable SPIDER_DEBUG when running the spider. You can specify any of the above debugging options, separated by a comma. For example with Bourne type shell: SPIDER_DEBUG=url,links =item quiet If this is true then normal, non-error messages will be supressed. Quiet mode can also be set by setting the environment variable SPIDER_QUIET to any true value. SPIDER_QUIET=1 =item max_depth The C parameter can be used to limit how deeply to recurse a web site. The depth is just a count of levels of web pages decended, and not related to the number of path elements in a URL. A max_depth of zero says to only spider the page listed as the C. A max_depth of one will spider the C page, plus all links on that page, and no more. The default is to spider all pages. =item ignore_robots_file If this is set to true then the robots.txt file will not be checked when spidering this server. Don't use this option unless you know what you are doing. =item use_cookies If this is set then a "cookie jar" will be maintained while spidering. Some (poorly written ;) sites require cookies to be enabled on clients. This requires the HTTP::Cookies module. =item use_md5 If this setting is true, then a MD5 digest "fingerprint" will be made from the content of every spidered document. This digest number will be used as a hash key to prevent indexing the same content more than once. This is helpful if different URLs generate the same content. Obvious example is these two documents will only be indexed one time: http://localhost/path/to/index.html http://localhost/path/to/ This option requires the Digest::MD5 module. Spidering with this option might be a tiny bit slower. =item validate_links Just a hack. If you set this true the spider will do HEAD requests all links (e.g. off-site links), just to make sure that all your links work. =item credentials You may specify a username and password to be used automatically when spidering: credentials => 'username:password', A username and password supplied in a URL will override this setting. =item credential_timeout Sets the number of seconds to wait for user input when prompted for a username or password. The default is 30 seconds. =item remove_leading_dots Removes leading dots from URLs that might reference documents above the document root. The default is to not remove the dots. =back =head1 CALLBACK FUNCTIONS Three callback functions can be defined in your parameter hash. These optional settings are I subroutines that are called while processing URLs. A little perl discussion is in order: In perl, a scalar variable can contain a reference to a subroutine. The config example above shows that the configuration parameters are stored in a perl I. my %serverA = ( base_url => 'http://sunsite.berkeley.edu:4444/', same_hosts => [ qw/www.sunsite.berkeley.edu:4444/ ], email => 'my@email.address', link_tags => [qw/ a frame /], ); There's two ways to add a reference to a subroutine to this hash: sub foo { return 1; } my %serverA = ( base_url => 'http://sunsite.berkeley.edu:4444/', same_hosts => [ qw/www.sunsite.berkeley.edu:4444/ ], email => 'my@email.address', link_tags => [qw/ a frame /], test_url => \&foo, # a reference to a named subroutine ); Or the subroutine can be coded right in place: my %serverA = ( base_url => 'http://sunsite.berkeley.edu:4444/', same_hosts => [ qw/www.sunsite.berkeley.edu:4444/ ], email => 'my@email.address', link_tags => [qw/ a frame /], test_url => sub { reutrn 1; }, ); The above example is not very useful as it just creates a user callback function that always returns a true value (the number 1). But, it's just an example. The function calls are wrapped in an eval, so calling die (or doing something that dies) will just cause that URL to be skipped. If you really want to stop processing you need to set $server->{abort} in your subroutine (or send a kill -HUP to the spider). The first two parameters passed are a URI object (to have access to the current URL), and a reference to the current server hash. The C hash is just a global hash for holding data, and useful for setting flags as described below. Other parameters may be also passed in depending the the callback function, as described below. In perl parameters are passed in an array called "@_". The first element (first parameter) of that array is $_[0], and the second is $_[1], and so on. Depending on how complicated your function is you may wish to shift your parameters off of the @_ list to make working with them easier. See the examples below. To make use of these routines you need to understand when they are called, and what changes you can make in your routines. Each routine deals with a given step, and returning false from your routine will stop processing for the current URL. =over 4 =item test_url C allows you to skip processing of urls based on the url before the request to the server is made. This function is called for the C links (links you define in the spider configuration file) and for every link extracted from a fetched web page. This function is a good place to skip links that you are not interested in following. For example, if you know there's no point in requesting images then you can exclude them like: test_url => sub { my $uri = shift; return 0 if $uri->path =~ /\.(gif|jpeg|png)$/; return 1; }, Or to write it another way: test_url => sub { $_[0]->path !~ /\.(gif|jpeg|png)$/ }, Another feature would be if you were using a web server where path names are NOT case sensitive (e.g. Windows). You can normalize all links in this situation using something like test_url => sub { my $uri = shift; return 0 if $uri->path =~ /\.(gif|jpeg|png)$/; $uri->path( lc $uri->path ); # make all path names lowercase return 1; }, The important thing about C (compared to the other callback functions) is that it is called while I links, not while actually fetching that page from the web server. Returning false from C simple says to not add the URL to the list of links to spider. You may set a flag in the server hash (second parameter) to tell the spider to abort processing. test_url => sub { my $server = $_[1]; $server->{abort}++ if $_[0]->path =~ /foo\.html/; return 1; }, You cannot use the server flags: no_contents no_index no_spider This is discussed below. =item test_response This function allows you to filter based on the response from the remote server (such as by content-type). This function is called while the web pages is being fetched from the remote server, typically after just enought data has been returned to read the response from the web server. The spider requests a document in "chunks" of 4096 bytes. 4096 is only a suggestion of how many bytes to return in each chunk. The C routine is called when the first chunk is received only. This allows ignoring (aborting) reading of a very large file, for example, without having to read the entire file. Although not much use, a reference to this chunk is passed as the forth parameter. Web servers use a Content-Type: header to define the type of data returned from the server. On a web server you could have a .jpeg file be a web page -- file extensions may not always indicate the type of the file. The third parameter ($_[2]) returned is a reference to a HTTP::Response object: For example, to only index true HTML (text/html) pages: test_response => sub { my $content_type = $_[2]->content_type; return $content_type =~ m!text/html!; }, You can also set flags in the server hash (the second parameter) to control indexing: no_contents -- index only the title (or file name), and not the contents no_index -- do not index this file, but continue to spider if HTML no_spider -- index, but do not spider this file for links to follow abort -- stop spidering any more files For example, to avoid index the contents of "private.html", yet still follow any links in that file: test_response => sub { my $server = $_[1]; $server->{no_index}++ if $_[0]->path =~ /private\.html$/; return 1; }, Note: Do not modify the URI object in this call back function. =item filter_content This callback function is called right before sending the content to swish. Like the other callback function, returning false will cause the URL to be skipped. Setting the C server flag and returning false will abort spidering. You can also set the C flag. This callback function is passed four parameters. The URI object, server hash, the HTTP::Response object, and a reference to the content. You can modify the content as needed. For example you might not like upper case: filter_content => sub { my $content_ref = $_[3]; $$content_ref = lc $$content_ref; return 1; }, I more reasonable example would be converting PDF or MS Word documents for parsing by swish. Examples of this are provided in the F directory of the swish-e distribution. You may also modify the URI object to change the path name passed to swish for indexing. filter_content => sub { my $uri = $_[0]; $uri->host('www.other.host') ; return 1; }, Swish-e's ReplaceRules feature can also be used for modifying the path name indexed. Here's a bit more advanced example of indexing text/html and PDF files only: use pdf2xml; # included example pdf converter module $server{filter_content} = sub { my ( $uri, $server, $response, $content_ref ) = @_; return 1 if $response->content_type eq 'text/html'; return 0 unless $response->content_type eq 'application/pdf'; # for logging counts $server->{counts}{'PDF transformed'}++; $$content_ref = ${pdf2xml( $content_ref )}; return 1; } Note: Swish-e not includes a method of filtering based on the SWISH::Filter Perl modules. See the SwishSpiderConfig.pl file for an example how to use SWISH::Filter in a filter_content callback function. =back Note that you can create your own counters to display in the summary list when spidering is finished by adding a value to the hash pointed to by C<$server->{counts}>. test_url => sub { my $server = $_[1]; $server->{no_index}++ if $_[0]->path =~ /private\.html$/; $server->{counts}{'Private Files'}++; return 1; }, Each callback function B return true to continue processing the URL. Returning false will cause processing of I URL to be skipped. =head2 More on setting flags Swish (not this spider) has a configuration directive C that will instruct swish to index only the title (or file name), and not the contents. This is often used when indexing binary files such as image files, but can also be used with html files to index only the document titles. As shown above, you can turn this feature on for specific documents by setting a flag in the server hash passed into the C or C subroutines. For example, in your configuration file you might have the C callback set as: test_response => sub { my ( $uri, $server, $response ) = @_; # tell swish not to index the contents if this is of type image $server->{no_contents} = $response->content_type =~ m[^image/]; return 1; # ok to index and spider this document } The entire contents of the resource is still read from the web server, and passed on to swish, but swish will also be passed a C header which tells swish to enable the NoContents feature for this document only. Note: Swish will index the path name only when C is set, unless the document's type (as set by the swish configuration settings C or C) is HTML I a title is found in the html document. Note: In most cases you probably would not want to send a large binary file to swish, just to be ignored. Therefore, it would be smart to use a C callback routine to replace the contents with single character (you cannot use the empty string at this time). A similar flag may be set to prevent indexing a document at all, but still allow spidering. In general, if you want completely skip spidering a file you return false from one of the callback routines (C, C, or C). Returning false from any of those three callbacks will stop processing of that file, and the file will B be spidered. But there may be some cases where you still want to spider (extract links) yet, not index the file. An example might be where you wish to index only PDF files, but you still need to spider all HTML files to find the links to the PDF files. $server{test_response} = sub { my ( $uri, $server, $response ) = @_; $server->{no_index} = $response->content_type ne 'application/pdf'; return 1; # ok to spider, but don't index } So, the difference between C and C is that C will still index the file name, just not the contents. C will still spider the file (if it's C) but the file will not be processed by swish at all. B If C is set in a C callback function then the document I. That is, your C callback function will not be called. The C flag can be set to avoid spiderering an HTML file. The file will still be indexed unless C is also set. But if you do not want to index and spider, then simply return false from one of the three callback funtions. =head1 SIGNALS Sending a SIGHUP to the running spider will cause it to stop spidering. This is a good way to abort spidering, but let swish index the documents retrieved so far. =head1 COPYRIGHT Copyright 2001 Bill Moseley This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SUPPORT Send all questions to the The SWISH-E discussion list. See http://sunsite.berkeley.edu/SWISH-E. =cut 0[swish-e]startup.com##Oh@ r^< r stem_it($result,"runs"); stem_it($result,"sugar"$!$!$!#$ proc = f$environment("PROCEDURE")3$ proc = f$parse(proc,"sys$disk:[]",,,"NO_CONCEAL")2$ cur_dev = f$parse(proc,,,"DEVICE","SYNTAX_ONLY")5$ cur_dir = f$parse(proc,,,"DIRECTORY","SYNTAX_ONLY")4$ cur_dir = f$extract(1,f$length(cur_dir)-2,cur_dir)$ cur_dir = cur_dir - "["$ cur_dir = cur_dir - "]"$ cur_dir = cur_dir - "<"$ cur_dir = cur_dir - ">"$$ root_dir = cur_dir$O$ define/nolog/system/exec /trans=concealed swish-e_root 'cur_dev'['root_dir'.]0[swish-e.tests]Makefile.am##x2y^ءy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); TESTS = check_index check_search check_metasearch TESTS_ENVIRONMENT = top_builddir=$(top_builddir) EXTRA_DIST = \ test.config \ test.html \ test.txt \ test.xml \ test_meta.html \ test_meta2.html \ test_phrase.html \ test_xml.html \ $(TESTS) common.sh DISTCLEANFILES = \ index.swish-e.prop \ index.swish-e .PHONEY: test test: check 0[swish-e.tests]Makefile.in##mj2$ʢy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); *# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BTREE_OBJS = @BTREE_OBJS@ BUILDDOCS_FALSE = @BUILDDOCS_FALSE@ BUILDDOCS_TRUE = @BUILDDOCS_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIB = @LIBXML2_LIB@ LIBXML2_OBJS = @LIBXML2_OBJS@ LIBXML_REQUIRED_VERSION = @LIBXML_REQUIRED_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE_CFLAGS = @PCRE_CFLAGS@ PCRE_CONFIG = @PCRE_CONFIG@ PCRE_LIBS = @PCRE_LIBS@ PCRE_REQUIRED_VERSION = @PCRE_REQUIRED_VERSION@ PERL = @PERL@ POD2MAN = @POD2MAN@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XML2_CONFIG = @XML2_CONFIG@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ TESTS = check_index check_search check_metasearch TESTS_ENVIRONMENT = top_builddir=$(top_builddir) EXTRA_DIST = \ test.config \ test.html \ test.txt \ test.xml \ test_meta.html \ test_meta2.html \ test_phrase.html \ test_xml.html \ $(TESTS) common.sh DISTCLEANFILES = \ index.swish-e.prop \ index.swish-e subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/acconfig.h CONFIG_CLEAN_FILES = DIST_SOURCES = DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list='$(TESTS)'; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all tests failed"; \ else \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ test -n "$$skipped" && echo "$$skipped"; \ test -n "$$report" && echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool distclean distclean-generic distclean-libtool \ distdir dvi dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am .PHONEY: test test: check # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: 0wish-e.tests]check_index.##9 2j6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/bin/sh ## -*- sh -*- ## incomplete.test -- Test incomplete command handling # Common definitions if test -z "$srcdir"; then srcdir=`echo "$0" | sed 's,[^/]*$,,'` test "$srcdir" = "$0" && srcdir=. test -z "$srcdir" && srcdir=. test "${VERBOSE+set}" != set && VERBOSE=1 fi . $srcdir/common.sh # this is the test script $SWISH -c $srcdir/test.config -i $srcdir -T indexed_words 0 [swish-e.tests]check_metasearch.##2j6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/bin/sh ## -*- sh -*- ## incomplete.test -- Test incomplete command handling # Common definitions if test -z "$srcdir"; then srcdir=`echo "$0" | sed 's,[^/]*$,,'` test "$srcdir" = "$0" && srcdir=. test -z "$srcdir" && srcdir=. test "${VERBOSE+set}" != set && VERBOSE=1 fi . $srcdir/common.sh # this is the test script $SWISH -w meta1=metatest1 | egrep '^[0-9]' 0[swish-e.tests]check_search.##s2j6y $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/bin/sh ## -*- sh -*- ## incomplete.test -- Test incomplete command handling # Common definitions if test -z "$srcdir"; then srcdir=`echo "$0" | sed 's,[^/]*$,,'` test "$srcdir" = "$0" && srcdir=. test -z "$srcdir" && srcdir=. test "${VERBOSE+set}" != set && VERBOSE=1 fi . $srcdir/common.sh # this is the test script $SWISH -w test | egrep '^[0-9]' 0[swish-e.tests]common.sh##O2_ءy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); #!/bin/sh # From GNU Autoconf book # Make sure srcdir is an absolute path. Supply the variable # if it does not exist. We want to be able to run the tests # stand-alone!! # srcdir=${srcdir-.} if test ! -d $srcdir ; then echo "defs: installation error" 1>&2 exit 1 fi # IF the source directory is a Unix or a DOS root directory, ... # case "$srcdir" in /* | [A-Za-z]:\\*) ;; *) srcdir=`\cd $srcdir && pwd` ;; esac case "$top_builddir" in /* | [A-Za-z]:\\*) ;; *) top_builddir=`\cd ${top_builddir-..} && pwd` ;; esac progname=`echo "$0" | sed 's,^.*/,,'` testname=`echo "$progname" | sed 's,-.*$,,'` # User can set VERBOSE to prevent output redirection case x$VERBOSE in xNO | xno | x0 | x) exec > /dev/null 2>&1 ;; esac echo "=== Running test $progname" SWISH="${top_builddir}/src/swish-e" 0[swish-e.tests]test.config##7KO2_ءy $ExcelSheetCount = encode_entities($oBook->{SheetCount}); # Config file for indexing the test files IndexOnly .html .txt .xml MetaNames meta1 meta2 meta3 PropertyNames meta1 meta2 meta3 IndexComments yes DefaultContents TXT* IndexContents XML* .xml IndexContents HTML* .htm .html StoreDescription TXT* 20 StoreDescription HTML* 50 StoreDescription XML* 0[swish-e.tests]test.html##NZ2/eHy $ExcelSheetCount = encode_entities($oBook->{SheetCount});  If you are seeing this, the test was successful! This is an initial paragraph...

This is a number one header.

This is a number two header.

This is a paragraph. I have typed some bold text, some italic text too. This is sample of entities: España This is an example and not a real doc 0[swish-e.tests]test.txt##7Qe2Ay $ExcelSheetCount = encode_entities($oBook->{SheetCount}); This is just a text file Line two Line three Line four 0[swish-e.tests]test.xml##~/J2/zy $ExcelSheetCount = encode_entities($oBook->{SheetCount});  This is metatest3 Just a sample This is the DESCRIPTION of test.xml 0[swish-e.tests]test_meta.html## /21FBPy $ExcelSheetCount = encode_entities($oBook->{SheetCount});  If you are seeing this, the METATAG search 1 was successful! Bla, Bla 0[swish-e.tests]test_meta2.html##21FBPy $ExcelSheetCount = encode_entities($oBook->{SheetCount});  If you are seeing this, the METATAG search 2 was successful! This is metatest2 Bla, bla This is is the DESCRIPTION of metatest2 Bla, Bla 0[swish-e.tests]test_phrase.html##2 ʉ_y $ExcelSheetCount = encode_entities($oBook->{SheetCount});  If you are seeing this, the PHRASE search was successful! Once upon time there was three little pigs and the wolf 0[swish-e.tests]test_xml.html##25{Ay $ExcelSheetCount = encode_entities($oBook->{SheetCount});  If you are seeing this, the METATAG XML search was successful! This is metatest3 Just a sample