pax_global_header00006660000000000000000000000064152641526540014524gustar00rootroot0000000000000052 comment=be53970b446d9e630249094d171f32bdf8ec9796 tools-0.8.0-beta.1/000077500000000000000000000000001526415265400137415ustar00rootroot00000000000000tools-0.8.0-beta.1/.gitignore000066400000000000000000000002141526415265400157260ustar00rootroot00000000000000# keep this alphabetical please *~ *.bak */build/* build *.egg-info fd_tool/dist freedict-database.xml *.mo *.pyc *__pycache__* *.swo *.swp tools-0.8.0-beta.1/CHANGELOG000066400000000000000000000041721526415265400151570ustar00rootroot00000000000000# 0.8 UNRELEASED - Require Python 3.12 or newer and PyGlossary 5.4.2 or newer. - Improve virtual environment creation and configuration registration, including actionable ICU dependency errors. - dicts.mk: Make StarDict builds safe under parallel Make execution, rebuild missing outputs, and preserve existing outputs when conversion fails. - dicts.mk: Preserve StarDict synonyms in release archives and installations. Honour unsupported formats. - Install and uninstall all supported binary dictionary formats. - Preserve semantic version suffixes, correctly order FreeDict revisions, and align API schema validation with supported dictionary versions. Select tools releases by semantic version and use the selected tag's date. - Validate the configured API output, propagate generation failures, and clean up remote access after failures. Support Jing through `USE_JING=1`, with xmllint remaining the default validator. - Add forced WikDict downloads, preserve existing dictionaries when replacement fails, and retain changelog history after successful imports. - Run Unison synchronization noninteractively and preserve the caller's environment when remote access fails. - Update the Esperanto-English importer for the October 2024 source, including UTF-8 byte order mark handling and corrected metadata. - Add `make test` and parallel component runners through `make -j4 test`, with support for selecting the Python interpreter. # 0.7 - Replace the legacy StarDict converter with PyGlossary and produce compressed release archives with checksums. - Include StarDict downloads in the generated dictionary API. - Support deploying individual dictionary formats, including adding a format to an existing release. - Use tools release archive URLs with predictable extracted directory names for packaging. - Update the WikDict download source and prepend import changelog entries instead of replacing previous entries. - Report tokenization errors with line information in the Esperanto-English importer. - Prevent em dashes from disrupting phonetic output alignment. tools-0.8.0-beta.1/COPYING000066400000000000000000000440751526415265400150060ustar00rootroot00000000000000This software is (c) 2000-2020 The FreeDict Project . This code is licensed under the terms of the GNU General Public License, version 2.0 or any later version, as published by the Free Software Foundation. For individual files, special licensing terms might apply. These are noted within the file to which they apply. The full license text for this package can be found below. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. tools-0.8.0-beta.1/JMdict/000077500000000000000000000000001526415265400151135ustar00rootroot00000000000000tools-0.8.0-beta.1/JMdict/README.md000066400000000000000000000023031526415265400163700ustar00rootroot00000000000000 Jim Breen's JMdict database =========================== The JMdict_e project aims at providing at dictionary databases with Japanese as its pivot language. The meta language of these databases is english. The project home is at . Copyright holders are: James William BREEN and The Electronic Dictionary Research and Development Group Copyright information at: Conversion Process ---------------- Four manual steps are required to build a dictionary and these are given as an example for the jpn-deu dictionary (ToDo: automate): 1. `xsltproc -o draft.tei -novalid jmdict2tei.xsl JMdict.xml` 2. ToDo:Copy the header ! 3. Indent: `xmllint --format draft.tei > jpn-deu.tei` 4. Check validity: - unixoid: `xmllint --noout --valid jpn-deu.tei > /dev/null` - Windows: `xmllint --noout --valid jpn-deu.tei > nul` JMdict Internationalization --------------------------- Please note the JMdict Internationalization effort by Transifex : https://www.transifex.com/gnurou/jmdict-i18n/ And the scripts going with by GitHub : https://github.com/Gnurou/jmdict-i18n tools-0.8.0-beta.1/JMdict/jmdict2tei.xsl000066400000000000000000000144611526415265400177070ustar00rootroot00000000000000 Transformation file to convert the JMdict into TEI P5 Freedict file

The Japanese Multilingual Dictionary (jmdict) is a free xml database by Jim Breens et al. (http://www.edrdg.org/jmdict/j_jmdict.html)

This stylesheet aims to convert this multilingual resource into a bilingual Freedict file. JMdict and TEI P5 DTD are quite different, so the xml elements of JMdict have been turned into TEI elements. Following the pretty good JMdict DTD comments, here is how I tried to fit the TEI pattern (http://www.tei-c.org/release/doc/tei-p5-doc/fr/html/DI.html): ant => ref type="ant" dial => usg type="geo" field => usg type="dom" gloss => cit type="trans"/quote k_ele => form type="k_ele" keb => orth ke_inf => lbl type="ke_inf" ke_pri => usg type="pri" lsource => lang misc => note pos => note type="pos" pri => pri reb => orth r_ele => form type="r_ele re_inf => lbl typ="re_inf" re_nokanji => type="re_nokanji" re_pri => usg type="pri" re_restr => lbl type="re_restr" s_inf => note type="sense" stagk => note type="stagk" stagr => note type="stagr" xref => ref

Denis ARNAUD the author(s), 2016; license: GPL v3 or any later version (http://www.gnu.org/licenses/gpl.html).
trans ls_wasei
tools-0.8.0-beta.1/JMdict/jmdict_e2tei.xsl000066400000000000000000000136471526415265400202200ustar00rootroot00000000000000 Transformation file to convert the JMdict into TEI P5 Freedict file

The Japanese Multilingual Dictionary (jmdict) is a free xml database by Jim Breens et al. (http://www.edrdg.org/jmdict/j_jmdict.html)

This stylesheet aims to convert this multilingual resource into a bilingual Freedict file. JMdict and TEI P5 DTD are quite different, so the xml elements of JMdict have been turned into TEI elements. Following the pretty good JMdict DTD comments, here is how I tried to fit the TEI pattern (http://www.tei-c.org/release/doc/tei-p5-doc/fr/html/DI.html): ant => ref type="ant" dial => usg type="geo" field => usg type="dom" gloss => cit type="trans"/quote k_ele => form type="k_ele" keb => orth ke_inf => lbl type="ke_inf" ke_pri => usg type="pri" lsource => lang misc => note pos => note type="pos" pri => pri reb => orth r_ele => form type="r_ele re_inf => lbl typ="re_inf" re_nokanji => type="re_nokanji" re_pri => usg type="pri" re_restr => lbl type="re_restr" s_inf => note type="sense" stagk => note type="stagk" stagr => note type="stagr" xref => ref

Denis ARNAUD the author(s), 2016; license: GPL v3 or any later version (http://www.gnu.org/licenses/gpl.html).
trans ls_wasei
tools-0.8.0-beta.1/Makefile000066400000000000000000000131761526415265400154110ustar00rootroot00000000000000# This makefile contains all recipes to build and manage the FreeDict # tools, including the API. It also provides targets to build a release archive # with the latest tools included. FREEDICT_TOOLS ?= . ifeq ($(wildcard $(FREEDICT_TOOLS)/mk/config.mk),) FREEDICT_TOOLS := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) endif include $(FREEDICT_TOOLS)/mk/config.mk XMLLINT ?= xmllint JING ?= jing export TAG PREFIX ?= usr DESTDIR ?= INSTALLDIR ?= $(abspath $(DESTDIR)/$(PREFIX)/share/freedict) dirs = api JMdict lib mk xquery xsl/inc TARGET_INSTALL_DIRS = $(addprefix $(INSTALLDIR)/tools/, $(dirs)) test: #! run all automated tests (use -j to run component suites in parallel) $(MAKE) -C "$(FREEDICT_TOOLS)/testing" test api: #! generate the api with information about all dictionaries and their downloads at the configured api path api: $(call run_with_files,fd_api) @$(MAKE) -C $(FREEDICT_TOOLS) --no-print-directory api-validation # allow retrieval of API path from Makefile and from rule below get_api_path=$(call exc_pyscript,fd_file_mgr,-a) api-path: #! print the output directory to the generated API file (read from configuration) (trailing newline is removed) @$(call get_api_path) api-validation: #! validate the freedict-database.xml against its RNG schema (set USE_JING=1 to use jing instead of xmllint) @api_dir="$$( $(call get_api_path) )" || exit $$?; \ test -n "$$api_dir" || { echo "Empty API output path" >&2; exit 1; }; \ if [ "$(USE_JING)" = "1" ]; then \ $(JING) "$(FREEDICT_TOOLS)/freedict-database.rng" "$$api_dir/freedict-database.xml"; \ else \ $(XMLLINT) --noout --relaxng "$(FREEDICT_TOOLS)/freedict-database.rng" "$$api_dir/freedict-database.xml"; \ fi mount: #! mount or synchronize FreeDict releases / generated dictionaries $(call exc_pyscript,fd_file_mgr,-m) need-update: #! queries for unreleased dictionaries or for those with newer source changes @$(call run_with_files,fd_api,-n) umount: #! runs umount / clean up actions for unmounting remote volumes (if SSH is used) @$(call exc_pyscript,fd_file_mgr,-u) install-deps: #! probe current operating system to install build prerequisites for dictionary development echo -n "Do you want to use unison or sshfs? Enter one of them or nothing: "; \ read ACCESS_METHOD; \ if command -v apt-get; then \ sudo apt-get install unzip tar xsltproc libxml-libxml-perl python3 $$ACCESS_METHOD; \ elif command -v pacman; then \ if [ `uname -o` = 'GNU/Linux' ]; then \ sudo pacman -S unzip tar libxslt libxml-perl python $$ACCESS_METHOD; \ else \ echo "Sorry, but it seems you're not running pacman on GNU/Linux. There's currently no installation rule for this platform."; \ fi; \ else \ echo "Unknown platform. Feel free to report the corresponding packages to us."; \ fi # This helps to express \n as a special variable to Make; it **needs** two # newlines within the define define newline endef # This may not contain apostrophes define VENV_HELP A virtual environment is a local copy of all Python utilities, scripts and libraries for Python development. With a virtual environment, you do not need to install all the FreeDict scripts globally in your system, but you are of course free to do so. The mk_venv command will make sure that the virtual environment is created at the correct place; use "P=/some/path" to specify the path. Example: make mk_venv P=../fd-venv Python 3.12 or newer is required. PyICU needs ICU headers, pkg-config, a C++ compiler, and Python development headers. On Debian/Ubuntu install libicu-dev pkg-config build-essential python3-dev python3-venv. After installation, you will be asked whether the virtual environment should be added to the FreeDict configuration. This is generally a good idea, because this means that the FreeDict build system will take care of all the required steps. endef mk_venv-help: echo -e '$(subst $(newline),\n,${VENV_HELP})' mk_venv: #! initialise a new (Python) virtual environment; use mk_venv-help for detailled help @if [ "${P}" = '' ]; then \ echo Need to give a path with P=, e.g. "make mk_venv P=/some/dir"; \ exit 222; fi @"$(PYTHON)" "$(FREEDICT_TOOLS)/buildhelpers/create_venv.py" "${P}" @if [ -n "$(FREEDICTRC)" ]; then \ "$(PYTHON)" "$(FREEDICT_TOOLS)/buildhelpers/register_venv.py" \ "$(FREEDICTRC)" "${P}" --choice "$${REGISTER_VENV:-auto}"; \ else \ echo "No FreeDict configuration found; set FREEDICTRC to register this environment."; \ fi # NOTE: the directories below HAVE to be on one line INSTALL_DIRS := api api/generator api/file_manager api/generator/apigen mk xquery xsl/inc INSTALL_PATHS := $(wildcard api/*.py api/generator/*.py api/generator/apigen/*.py api/file_manager/*.py \ freedict-database.rng \ mk/*.mk xsl/inc/* \ xquery/* xsl/tei2c5.xsl) install: #! install the tools to $$DESTDIR/$PREFIX/share/freedict (default /usr/local/share/freedict) install: @echo Creating directories in $(INSTALLDIR)… @set -e; for d in $(INSTALL_DIRS); do \ install -d $(INSTALLDIR)/$$d; \ done @echo Copying files to $(INSTALLDIR)… @set -e; for f in $(INSTALL_PATHS); do \ if [ -f $$f ]; then \ install -m 644 $$f $(INSTALLDIR)/$$f; \ fi \ done release: #! export an existing tools tag as a release archive; TAG= is required "$(PYTHON)" "$(FREEDICT_TOOLS)/buildhelpers/release.py" "$(FREEDICT_TOOLS)" "$(BUILD_DIR)" release-path: #! print the output directory to which releases are deployed (read from configuration); trailing newline is removed @release_dir="$$( $(call exc_pyscript,fd_file_mgr,-r) )" || exit $$?; \ test -n "$$release_dir" || { echo "Empty release output path" >&2; exit 1; }; \ printf '%s' "$$release_dir" .PHONY: all api api-validation install mount release test umount tools-0.8.0-beta.1/README.md000066400000000000000000000106601526415265400152230ustar00rootroot00000000000000FreeDict Tools =============== The FreeDict tools are used to import, export (build) and manage FreeDict dictionaries. As a dictionary data provider, our goal is to use our TEI dialect to be able to import and export into a variety of output formats. This repository collects the tooling for this. Getting Started --------------- FreeDict databases are encoded in the TEI XML format (chapter 9), see . The conversion is based on XSL stylesheets (see directory `xsl/`). These can in principle transform to any format, but only the .dict format is supported at the moment. More information is in the wiki at . ### Dependencies FreeDict requires a few essential tools to generate phonemes and compile the XML sources. However, most of the tools are determined by the output format. 0. Basic tooling: perl, python, make, xsltproc, (libxml2-utils | jing), tar, gzip, espeak-ng 1. For dictd: dictzip, dictfmt 2. For stardict: pyglossary 3. For slob: slob, tei2slob #### Debian/Ubuntu Dependencies If you use Debian/Ubuntu, you should install the following packages: 0. Basic: `sudo apt install make xsltproc libicu-dev pkg-config python3 python3-dev python3-venv build-essential espeak-ng git` 1. For dictd: `sudo apt install dictzip dictfmt` 2. For stardict: install pyglossary, for instance, `pipx install pyglossary` 3. For slob: 1. Get the sources: 2. Use the official installation instructions OR 3. Use a virtualenv; we recommend that to bundle all our tooling 4. fetch the mentioned sources and use `pipx install .`, which is easiest. #### Windows On Windows, it is easiest to install [Msys2](https://www.msys2.org/) or [Cygwin](https://www.cygwin.com). Both offer an easy method to install the required tools. Note that we are not officially using Windows, so your mileage will vary. ### Setting Up The Build System You should clone this repository to a path with no spaces and add an environment variable `FREEDICT_TOOLS` to point to this directory. The toolchain requires Python 3.12 or newer, as required by PyGlossary. A lot of the internal scripts need additional Python libraries. To fully make use of them, you should set up a Python virtual environment for that. To help you getting started, `make mk_venv` is there to guide you through the process and `make mk_venv-help` will explain you why and how you should use `make mk_venv`. Hint: It is possible to set up an environment without a virtual environment. See the file requirements.txt for more details. Once done, you can get help on the available actions in any directory containing a `Makefile` by typing `make help`. ### Tests Run all automated tests with `make test`, or run the component suites in parallel with `make -j4 test`. Select a Python environment with `make -j4 test PYTHON=/path/to/venv/bin/python`; it must have the project's Python dependencies installed. The runners import packages from this checkout. Run one component with `make -C testing/mk test` (also available for `buildhelpers`, `fd_tool`, and `importers`). The `fd_tool` and `importers` runners include their existing package suites. Fixtures and the legacy stylesheet in `testing/xsl/` remain manual test assets. ### Documentation Most of the documentation can be found in the FreeDict HOWTO at https://github.com/freedict/fd-dictionaries/wiki/FreeDict-HOWTO In general, it is a good idea to have a look at our wiki at https://github.com/freedict/fd-dictionaries/wiki Furthermore, the whole build system is explained in chapter 8 of the HOWTO, mentioned above. Additional Output Formats ------------------------- For creating slob files, you need to install tei2slob: python3 -m venv env-slob # create self contained python env source env-slob/bin/activate # activate it pip install git+https://github.com/itkach/slob.git # install general slob tools pip install git+https://github.com/itkach/tei2slob.git # install tei2slob converter Now tei2slob will be in your path. For new shells, you will have to execute `source env-slob/bin/activate` again, or put env-slob/bin/tei2slob into your PATH. For creating StarDict files, you need to install [PyGlossary](https://github.com/ilius/pyglossary): pip install git+https://github.com/ilius/pyglossary.git Sebastian Humenda, Mar 2018 tools-0.8.0-beta.1/README.release000066400000000000000000000024041526415265400162400ustar00rootroot00000000000000# Release maintenance ## Tools releases Run `make release TAG=0.8.0` after the selected tag exists. `TAG` is mandatory and must identify a Git tag, not a branch or commit hash. The command exports that tag's committed tree into `build/freedict-tools-0.8.0.tar.xz`, with a `tools/` directory inside. Use `BUILD_DIR=/path/to/output` to change the output directory. Hierarchical tag names use hyphens in the archive filename. HEAD may have newer commits; a warning is printed and the tagged tree is still exported. Untracked files and uncommitted edits are excluded. Each invocation regenerates the archive, replacing an existing file only after export succeeds. ## Remote access All dictionaries, both from the fd-dictionaries repository and the generated dictionaries need to be present for release operations. Hence, `make api`, `make need-update`, and dictionary deployment acquire remote access and clean up within one process. `fd_tool` manages this in the background. Depending on the FreeDict configuration, it either uses SSHFS or Unison for making files available. `fd_file_mgr --run COMMAND [ARGS...]` exists to perform manual operations with all dictionaries available. On a failure, `fd_file_mgr -m` and `fd_file_mgr -u` perform mounting and unmounting, respectively. tools-0.8.0-beta.1/buildhelpers/000077500000000000000000000000001526415265400164235ustar00rootroot00000000000000tools-0.8.0-beta.1/buildhelpers/README.md000066400000000000000000000003641526415265400177050ustar00rootroot00000000000000Build Helpers ============= This directory contains scripts to help building and installing FreeDict dictionaries. They are complementing the (GNU) make build system. Please document anything regarding those scripts here or link to the wiki. tools-0.8.0-beta.1/buildhelpers/create_venv.py000066400000000000000000000037111526415265400213000ustar00rootroot00000000000000"""Create the FreeDict environment with the selected Python interpreter.""" import argparse import os from pathlib import Path import subprocess import sys def create_environment(destination, tools): destination = destination.expanduser().resolve() if destination.exists() and any(destination.iterdir()) and not (destination / 'pyvenv.cfg').is_file(): raise RuntimeError(f'Refusing to reuse a non-venv directory: {destination}') subprocess.run([sys.executable, '-m', 'venv', str(destination)], check=True) python = destination / ('Scripts/python.exe' if os.name == 'nt' else 'bin/python') installed = subprocess.run([str(python), '-c', 'import icu'], capture_output=True).returncode == 0 if not installed and not os.environ.get('ICU_VERSION'): try: subprocess.run(['pkg-config', '--exists', 'icu-i18n'], check=True) except (OSError, subprocess.CalledProcessError) as error: raise RuntimeError( 'PyICU needs ICU development files and pkg-config. On Debian/Ubuntu, ' 'install libicu-dev, pkg-config, build-essential, python3-dev and python3-venv. ' 'Custom ICU builds may supply ICU_VERSION and PYICU_CFLAGS/PYICU_LFLAGS.' ) from error # Local requirements are relative to the tools checkout, not the caller's cwd. subprocess.run([str(python), '-m', 'pip', 'install', '--upgrade', '-r', str(tools / 'requirements.txt')], cwd=tools, check=True) subprocess.run([str(python), '-m', 'pip', 'check'], check=True) return destination def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('destination', type=Path) args = parser.parse_args() try: create_environment(args.destination, Path(__file__).resolve().parents[1]) except (OSError, RuntimeError, subprocess.CalledProcessError) as error: parser.exit(1, f'{error}\n') if __name__ == '__main__': main() tools-0.8.0-beta.1/buildhelpers/deploy.sh000066400000000000000000000017301526415265400202540ustar00rootroot00000000000000#!/bin/sh # Invoked by Make through fd_file_mgr --run, after remote access is available. set -eu dictname=$1 version=$2 force=$3 shift 3 release_root=$(fd_file_mgr -r) if [ -z "$release_root" ] || [ ! -d "$release_root" ]; then echo "Invalid release output directory: $release_root" >&2 exit 1 fi destination="$release_root/$dictname/$version" # Refuse overwrites before copying any of the requested formats. for archive in "$@"; do if [ -e "$destination/${archive##*/}" ] && [ "$force" != y ]; then echo "Release already exists: ${archive##*/}; use FORCE=y to replace it." >&2 exit 2 fi test -f "$archive" test -f "$archive.sha512" done mkdir -p "$destination" staging=$(mktemp -d "$destination/.deploy.XXXXXX") trap 'rm -rf -- "$staging"' 0 for archive in "$@"; do echo "Deploying ${archive##*/}" cp -- "$archive" "$staging/" cp -- "$archive.sha512" "$staging/" done chmod a+r -- "$staging/"* mv -- "$staging/"* "$destination/" tools-0.8.0-beta.1/buildhelpers/dict_restart_helper.sh000077500000000000000000000032021526415265400230050ustar00rootroot00000000000000#!/bin/sh #vim:set expandtab sts=4 ts=4 sw=4: # This script updates the dictd database and restarts dictd. It'll also try to # figure out whether dictd is installed in the first place and what the correct # way of restart is (upstart / systemd /init). set -e isDictInstalled() { if test -f /usr/sbin/dictd || command -v dictd > /dev/null || [ -f /sbin/dictd ] then return 0 else echo "The dictd server hasn't been found on this system." if command -v apt-get > /dev/null then echo 'Type `apt-get install dictd` before re-executing this script.' elif command -v pacman > /dev/null then echo 'Type `pacman -Syu dictd` before re-executing this script.' elif command -v yum > /dev/null then echo 'Type `yum install dictd` before re-executing this script.' else echo "Please install the dictd server before proceeding." fi exit 20 fi } restart_dictd_server() { echo "Restarting dictd..." if command -v service > /dev/null then service dictd restart elif command -v systemctl > /dev/null then systemctl restart dictd elif test -f /etc/init.d/dictd then /etc/init.d/dictd restart stop /etc/init.d/dictd restart start else echo "Error, could not detect init system. DICT SERVER HAS NOT BEEN RESTARTED!" fi } update_dictd_database() { dictdconfig -w } ################################################################################ # abort if dictd is not installed isDictInstalled update_dictd_database restart_dictd_server exit 0; tools-0.8.0-beta.1/buildhelpers/register_venv.py000066400000000000000000000037051526415265400216640ustar00rootroot00000000000000"""Register a FreeDict virtual environment without damaging other settings.""" import argparse from pathlib import Path import re import sys def register(config_path, environment, choice='auto'): config_path = Path(config_path).expanduser() if choice == 'no' or (choice == 'auto' and not sys.stdin.isatty()): return False if choice == 'auto' and input('Add this virtual environment to FreeDict configuration? [y|n] ').lower() != 'y': return False original = config_path.read_text(encoding='utf-8') if config_path.exists() else '' value = str(Path(environment).expanduser().resolve()) lines = original.splitlines(keepends=True) default_start = next((i for i, line in enumerate(lines) if re.match(r'\s*\[DEFAULT\]\s*(?:[#;].*)?$', line)), None) if default_start is None: lines = ['[DEFAULT]\n', f'virtual_env = {value}\n'] + lines else: default_end = next((i for i in range(default_start + 1, len(lines)) if re.match(r'\s*\[[^]]+\]', lines[i])), len(lines)) replacement = f'virtual_env = {value}\n' existing = next((i for i in range(default_start + 1, default_end) if re.match(r'\s*virtual_env\s*=', lines[i], re.I)), None) if existing is None: lines.insert(default_start + 1, replacement) else: lines[existing] = replacement config_path.parent.mkdir(parents=True, exist_ok=True) with config_path.open('w', encoding='utf-8') as config_file: config_file.write(''.join(lines)) return True def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('config', type=Path) parser.add_argument('environment', type=Path) parser.add_argument('--choice', choices=['auto', 'yes', 'no'], default='auto') args = parser.parse_args() register(args.config, args.environment, args.choice) if __name__ == '__main__': main() tools-0.8.0-beta.1/buildhelpers/release.py000066400000000000000000000047331526415265400204240ustar00rootroot00000000000000"""Export an existing tools tag without working-tree or untracked files.""" import argparse import lzma import os import shutil import subprocess import sys import tempfile from pathlib import Path def create_release(tools, build_directory, tag): if not tag: raise ValueError('TAG is required; use make release TAG=') reference = f'refs/tags/{tag}' tagged_commit = subprocess.check_output( ['git', '-C', str(tools), 'rev-parse', '--verify', '--end-of-options', reference + '^{commit}'], text=True).strip() head = subprocess.check_output( ['git', '-C', str(tools), 'rev-parse', 'HEAD'], text=True).strip() if head != tagged_commit: print(f'Warning: HEAD differs from TAG={tag}; archiving the tagged tree.', file=sys.stderr) build_directory.mkdir(parents=True, exist_ok=True) # Hierarchical Git tag names must still produce a single archive filename. filename = f"freedict-tools-{tag.replace('/', '-')}.tar.xz" destination = build_directory / filename temporary_path = None try: with tempfile.NamedTemporaryFile(dir=build_directory, prefix='.release-', delete=False) as temporary: temporary_path = Path(temporary.name) command = ['git', '-C', str(tools), 'archive', '--format=tar', '--prefix=tools/', reference] with subprocess.Popen(command, stdout=subprocess.PIPE) as process: try: with lzma.LZMAFile(temporary, 'w') as compressed: shutil.copyfileobj(process.stdout, compressed) finally: process.stdout.close() status = process.wait() if status: raise subprocess.CalledProcessError(status, command) os.replace(temporary_path, destination) finally: if temporary_path is not None: temporary_path.unlink(missing_ok=True) return destination def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('tools', type=Path) parser.add_argument('build_directory', type=Path) args = parser.parse_args() try: destination = create_release(args.tools, args.build_directory, os.environ.get('TAG')) except (OSError, ValueError, subprocess.CalledProcessError) as error: parser.exit(1, f'{error}\n') print(destination) if __name__ == '__main__': main() tools-0.8.0-beta.1/dic2ipk.sh000077500000000000000000000052511526415265400156300ustar00rootroot00000000000000#!/bin/bash # this script packages .dic (or .dic.dz) files # for the zbedic program on the Zaurus platform # into .ipk (installable packages) # the iPKG file format is loosely based on Debian's # package format. iPKG is documented at: # # * http://www.zaurususergroup.com/modules.php?op=modload&name=phpWiki&file=index&pagename=IPKG%20Howto # * http://www.ossh.com/zaurus/mirrors/docs.zaurus.com/ipkg_howto.shtml # (same text like forst page) # * http://www.handhelds.org/ # (The forst two links refer to the wiki here as reference, but # that page is currently (Jan 2005) unavailable # ===== the filenames INFILE=$1 EXTENSION=${INFILE#*.} OUTFILE=`basename ${1/.$EXTENSION}` # ===== check the syntax if [[ "$1" == "" ]]; then echo "USAGE: $0 " exit 1 fi # ==== is there a file-conflict if [ -d ./home ]; then echo "There's already a ./home folder. Please remove that first!" exit 1 fi if [ -e ./control ]; then echo "There's already a control file. Remove it first!" exit 1 fi if [ -e ./control.tar.gz ]; then echo "There's already a control.tar.gz file. Remove it first!" exit 1 fi if [ -e ./data.tar.gz ]; then echo "There's already a data.tar.gz file. Remove it first!" exit 1 fi # ===== image type for the maps # ===== make it lowercase EXTENSION=`echo "$EXTENSION" | tr [A-Z] [a-z]` if [[ "$EXTENSION" == "jpeg" ]]; then EXTENSION=jpg fi # ===== no converter specified? #if [[ "`which convert`" == "" ]]; then # echo Cannot find the program convert! # exit 2 #fi if [[ "$EXTENSION" == "" ]]; then echo Cannot identify the image-type or cannot find the file! exit 2 fi if [ -d ./${OUTFILE} ]; then echo "There's already an image folder ${OUTFILE}." exit 2 fi # ===== renaming files # ===== adding overview # ===== leaving image-folder # ===== creating folders for ipkg mkdir ./home mkdir ./home/QtPalmtop mkdir ./home/QtPalmtop/share mkdir ./home/QtPalmtop/share/zbedic # ===== moving the image-files into the right folder cp ${INFILE} ./home/QtPalmtop/share/zbedic/ # ===== make a nice ipkg DATE=$(date +"%Y%m%d") FILE=./zbedic-${OUTFILE}_${DATE}_arm.ipk # ===== package-information echo -ne "Package: FreeDict-${OUTFILE} InstalledSize: $(du -sh ./home | cut -f1) Filename: ${FILE} Maintainer: $(whoami) Architecture: arm Version: ${DATE} Description: FreeDict ${OUTFILE} dictionary for zbedic " > ./control # ===== creating tar -czf data.tar.gz ./home tar -czf control.tar.gz ./control tar -czf ${FILE} ./data.tar.gz ./control.tar.gz # ===== removing temp-files rm ./data.tar.gz ./control.tar.gz ./control # ===== removing the NEW folders and NEW created images rm -rf ./home echo ${FILE} tools-0.8.0-beta.1/dict-configure.sh000077500000000000000000000031721526415265400172050ustar00rootroot00000000000000#!/bin/sh # Shell script to configure a dictionary into place. DICTD_CONF=/etc/dictd.conf DICT_SCRIPT=/etc/rc.d/init.d/dict GDICT_CONF=/var/lib/gdict-dicts.conf Dict_Add_Dictionary () { # Add a dictionary to the DICTD_CONF file DICT=$* cat >> $DICTD_CONF >> EOF database $DICT { data "/usr/lib/dict/$DICT.dict.dz" # $DICT index "/usr/lib/dict/$DICT.index" # $DICT access { # $DICT allow * # $DICT } # $DICT } # $DICT EOF Restart_Dict_Server } Dict_Remove_Dictionary () { # Remove a dictionary from the DICTD_CONF file DICT=$* grep -v $DICT $DICTD_CONF > /tmp/dictd.conf.tmp mv /tmp/dictd.conf.tmp > /tmp/dictd.conf.tmp } Restart_Dict_Server () { if [ -f $DICT_SCRIPT ] ; then $DICT_SCRIPT stop $DICT_SCRIPT start } Gdict_Add_Dictionary () { DICT=$1 LANG=$2 cat GDICT_CONF << EOF (define-gdict-dict "$LANG" "$DICT") ; installed by dict-$LANG EOF } Gdict_Remove_Dictionary () { LANG=$1 grep -v "dict-$DICT" $GDICT_CONF > /tmp/gdict-dicts.conf mv /tmp/gdict-dicts.conf $GDICT_CONF } # # Program starts here # case "$1" in '--install') DICT=$2 LANG=$4 Dict_Add_Dictionary $DICT GDict_Add_Dictionary $DICT $LANG exit 0; ;; '--remove') DICT=$2 Dict_Remove_Dictionary $DICT Gdict_Remove_Dictionary $DICT exit 0; ;; default) echo "Usage: $0 --install --lang , or" echo " $0 --remove " exit 1; ;; esac exit 1;tools-0.8.0-beta.1/exporters/000077500000000000000000000000001526415265400157745ustar00rootroot00000000000000tools-0.8.0-beta.1/exporters/tei2anki/000077500000000000000000000000001526415265400175025ustar00rootroot00000000000000tools-0.8.0-beta.1/exporters/tei2anki/tei2anki.py000077500000000000000000000031051526415265400215640ustar00rootroot00000000000000#!/usr/bin/env python3 import sys import random from xml.etree import ElementTree as etree from ankisync.apkg import Apkg NS = 'http://www.tei-c.org/ns/1.0' NS_MAP = {'': NS, 't': NS} def ns(name): return '{%s}%s' % (NS, name) TAG_ENTRY = ns('entry') TAG_HEADER = ns('teiHeader') def parse_entry(element): orths = element.findall('./t:form//t:orth', NS_MAP) cits = element.findall('./t:sense//t:cit/t:quote', NS_MAP) return orths[0].text, ', '.join(c.text for c in cits) assert len(sys.argv) == 2, 'Usage: tei2anki.py FROM-TO.tei' input_filename = sys.argv[1] output_filename = input_filename.replace('.tei', '.apkg') entries = [] with open(input_filename) as input_file: for _, element in etree.iterparse(input_file): if element.tag == TAG_HEADER: deck_name = element.find('./t:fileDesc/t:titleStmt/t:title', NS_MAP).text if element.tag == TAG_ENTRY: entries.append(parse_entry(element)) with Apkg(output_filename) as apkg: model_id = apkg.init( first_model=dict( name='default model', fields=['source', 'target'], templates={ 'Forward': ('{{source}}', '{{source}}
{{target}}'), } ), first_deck=deck_name, first_note_data=False, ) for source, target in random.sample(entries, 100): apkg.add_note({ 'modelName': 'default model', 'deckName': deck_name, 'fields': { 'source': source, 'target': target, } }) tools-0.8.0-beta.1/fd_tool/000077500000000000000000000000001526415265400153675ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/README.md000066400000000000000000000052141526415265400166500ustar00rootroot00000000000000FD Tool ==== The `fd_tool`and its accompanying scripts in this directory are able to set up everything required to - release dictionaries - access out-of-VCS auto-imported dictionaries - generate the FD API As a dictionary developer, you don't need to care about this. :) Installation --------- Create a virtual environment for FreeDict and execute in this directory pip install . Configuration ------------- The utilities require a configuration file with a few options set. Open or create a configuration file in `$HOME/.config/freedict/freedictrc` in your favourite editor and enter something like this: [DEFAULT] file_access_with = sshfs [release] user=SFACCOUNT,freedict [generated] user=USER - `file_access_with`: sets the file access strategy; possible values are unison or sshfs, default is unison - unison: synchronisation of all files to local disk -- quicker operations, more initial download - sshfs (UNIX only): direct access over a network connection, slower actions and problematic, since direct file manipulation - `[release]`: server on which to look for the released dictionaries, by default freedict.org. - `[generated]`: this configures account information for the file services containing all auto-generated dictionaries This minimal configuration should be enough for most of the use cases. For a more in-depth explanation, you should visit the [wiki page](https://github.com/freedict/fd-dictionaries/wiki/FreeDict-HOWTO-%E2%80%93-FreeDict-Build-System). There is a freedictrc.example in this directory, too. API Generation -------------- The API generation consists of two steps. In the first step, remote files are made available, in the second, the actual XML file is generated. Remote files are all released files and the auto-imported dictionaries. In order to make them available, either SSHFS or Unison can be used. This can be configured in the FreeDict configuration, see . The `file_manager` will take care of doing this work, transparently. The API generation requires the `FREEDICT_TOOLS` environment variable to be set. Information about this variable can be found [here](https://github.com/freedict/fd-dictionaries/wiki/FreeDict-HOWTO).\ The invocation of the API generator is automated in the make rule `api`, so in most cases, `make api` should be enough. File Management =============== Fsetup is designed to set up the environment for managing and releasing FreeDict dictionaries, as well as generating the API. This mainly involves copying (or remote-mounting) released dictionaries and out-of-VCS (auto-imported) dictionaries. tools-0.8.0-beta.1/fd_tool/fd_changelog.py000066400000000000000000000215571526415265400203530ustar00rootroot00000000000000#!/usr/bin/env python3 """Releasing a bunch of dictionaries can be tedious because of the adjustments to the header. This script automated the following: * update the date tag * update the copyright year within the availability information, because a new release also renews the copyright * open $EDITOR to ask the user for a changelog message * count headwords * update the edition For the concrete usage see the corresponding usage message.""" #pylint: disable=wrong-import-position import datetime import os import re import shutil import sys from fd_tool import config def get_editor(): """Detect an editor to use. Try to use $EDITOR or probe for a bunch of more common ones.""" editor = None if 'EDITOR' in os.environ: editor = os.environ['EDITOR'] if not editor: for name in ('vim', 'vi', 'nvim', 'emacs', 'nano', 'edit', 'notepad', 'gedit', 'pluma', 'kate'): # a few more popular ones if shutil.which(name): editor = name break if not editor: print(("Failed to detect an editor. Please set the EDITOR environment " "variable to a program in your PATH.")) sys.exit(1) else: return editor class TagNotFoundException(Exception): pass def find_tag(document, tag): """Find a tag in a document, returning start and end positions of the opening and closing tag. Raise TagNotFoundException if no such tag exists.""" match = re.search(r'<\s*%s\b.*?>' % tag, document) if not match: raise TagNotFoundException(tag) opening_start, opening_end = match.span() # find closing tag match = re.search(r'<\s*/\s*%s\s*>' % tag, document[opening_end:]) if not match: raise TagNotFoundException('no closing tag for `%s`' % tag) closing_start, closing_end = (c + opening_end for c in match.span()) # python's ranges are exclusive, so add + 1 return (opening_start, opening_end, closing_start, closing_end) def get_text(document, tag): """Get the text of a specified tag. Raise TagNotFoundException if no such tag exists.""" _, start, end, _ = find_tag(document, tag) return document[start:end] def replace_tag_content(document, tag, new_text): """Insert the given new content into the first occurrence of this tag in the given document.""" _, start, end, _ = find_tag(document, tag) return document[:start] + new_text + document[end:] def get_user_info(conf): """Obtain (GitHub) user name and full name from configuration. Exit if user name is not set. Use system name if full name (AKA real name) is not set.""" try: user_name = conf['DEFAULT']['user_name'] except KeyError: sys.stderr.write(("user_name not set in FreeDict configuration. Please " "set it and try again.")) sys.exit(28) try: real_name = conf['DEFAULT']['full_name'] except KeyError: # guess name, could be not correct if 'win32' in sys.platform or 'wind' in sys.platform: import getpass real_name = getpass.getuser() else: # on unixoids, use pwd import pwd real_name = pwd.getpwuid(os.getuid())[4] # on some systems, real name end with commas, strip those while real_name and not real_name[-1].isalpha(): real_name = real_name[:-1] return (user_name, real_name) def add_changelog_entry(document, edition, date, username, author): """Try to detect an text editor, open it and add the written content to a new change tag within the supplied revision_desc.""" editor = get_editor() fn = 'changelog.tmp' with open(fn, 'w', encoding='UTF-8') as f: f.write("""\n # Please enter your change notes as you would enter them in a tag in # the revisionDesc tag of a TEI header. Empty lines will be ignored and lines # starting with a hash `#` will be ignored. # Valid formatting include either plain text or lists like # `blah`. Please note that you need to take care of # escaping yourself. """) ret = os.system('%s %s' % (editor, fn)) if ret: print("Error while starting", editor) sys.exit(2) with open(fn, encoding='UTF-8') as f: data = '\n'.join(l.rstrip() for l in f if l.strip() and not l.lstrip().startswith('#')) os.remove(fn) if not data.strip(): print("No changes, aborting…") sys.exit(0) # insert full name if no reference to the user name found, otherwise use the # reference change = None if re.search('id\\s*=\\s*(?:\'|")#' + username, document): change = '\n'.format(edition, date, username.rplace('#', '')) else: change = '\n{}\n' \ .format(edition, date, author) change += '%s\n' % data latest_change, _, _, _ = find_tag(document, 'change') latest_change_tag = latest_change if latest_change > 0 and document[latest_change-1].isspace(): latest_change -= 1 while latest_change > 0 and document[latest_change].isspace() and \ document[latest_change] != '\n': latest_change -= 1 indent = document[latest_change+1:latest_change_tag] change = change.rstrip().replace('\n', '\n' + indent) return ''.join((document[:latest_change], '\n', indent, change, '\n', indent, document[latest_change_tag:])).lstrip() def update_date(document, date): """Find publicationStmt/date, update it.""" try: opening_start, _, _, closing_end = find_tag(document, 'date') except TagNotFoundException: sys.stderr.write(("Warning: tag not found. It's advised that " "this is added to the header.\n")) return document if opening_start < 0: return document # no date, no action # try to detect whether this date is within a change tag change = document[:opening_start].rfind(' 0: return document date = datetime.datetime.now().strftime('%b %d, %Y') return document[:opening_start] + date + document[closing_end:] def update_edition(document, version): """Update edition within the edition tag.""" return replace_tag_content(document, 'edition', version) def update_extent(document): """Count headwords within document and update the headword count of the extend tag.""" headwordcount = len(re.findall(r'<\s*entry.*?>', document)) return replace_tag_content(document, 'extent', '%s headwords' % headwordcount) def update_copyright(document): """Find a stanza containing "(c) 2014-2017 xyz" or "© 2020 foo" to update the year and therfore update copyright information.""" availability = get_text(document, 'availability') match = re.search(r'(©|\([cC]\))\s*([0-9]{4})(?:-)([0-9]{4})', availability) if not match: return document start, end = match.span() year = match.groups()[1] if match.groups()[2]: year = match.groups()[2] availability = availability[:start] + availability[start:end].replace(year, datetime.datetime.now().strftime('%Y')) + \ availability[end:] return replace_tag_content(document, 'availability', availability) def parse_args(): def usage(msg=None): if msg: print(msg) print("Usage: make E=") print(" or: %s " % \ os.path.basename(sys.argv[0])) print("\nThis script assists in changing a TEI header for release. It does the following:") print("- update the edition") print("- updates the release date") print("- adds a new changelog entry") print("- update the year in the availability / copyright section, if appropriate") print("\nExample: make E=1.5.2 lat-deu.tei") sys.exit(0) if len(sys.argv) == 2 and sys.argv[1] in ('-h', '--help'): usage() elif len(sys.argv) != 3: usage("The arguments edition and input file are mandatory.") else: return sys.argv[1:3] def main(): edition, input_file = parse_args() conf = config.discover_and_load() isodate = datetime.datetime.today().strftime('%Y-%m-%d') username, full_name = get_user_info(conf) with open(input_file, 'r', encoding='UTF-8') as f: document = f.read() document = add_changelog_entry(document, edition, isodate, username, full_name) document = update_date(document, isodate) document = update_copyright(document) document = update_extent(document) document = update_edition(document, edition) with open(input_file, 'w', encoding='UTF-8') as f: f.write(document) print("You might want to re-indent the latest to fit it to the rest of the document.") if __name__ == '__main__': main() tools-0.8.0-beta.1/fd_tool/fd_tool/000077500000000000000000000000001526415265400170155ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/fd_tool/__init__.py000066400000000000000000000000001526415265400211140ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/fd_tool/api/000077500000000000000000000000001526415265400175665ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/fd_tool/api/config.py000066400000000000000000000012511526415265400214040ustar00rootroot00000000000000"""Constants for the freedict-API generator.""" import re # domain where downloads are stored PROJECTHOME_HOST = 'download.freedict.org' # base on web server, used for the link generation RELEASE_HTTP_BASE = '/dictionaries' # base for the freedict tools releases, **ful URL** RELEASE_HTTP_TOOL_BASE = 'https://download.freedict.org/tools/' # pattern to identify dictionaries; matches three-digit ISO 6639 letter codes DICTIONARY_PATTERN = re.compile(r'(?:freedict-)?([a-z]{3}-[a-z]{3}).*') # Pattern to identify directory names of directories; matches English names of # languages, separated by " - " DICTIONARY_DIRECTORY_PATTERN = re.compile(r"[A-Z][a-z]+%20-%20[A-z][a-z]+") tools-0.8.0-beta.1/fd_tool/fd_tool/api/dictionary.py000066400000000000000000000215761526415265400223200ustar00rootroot00000000000000"""This module holds datastructures to represent a dictionary and links to their downloads and a few function to retrieve useful information about these objects.""" import datetime import enum import os import re import urllib.request import semver from . import config class Dictionary: """Dictionary class holding various properties of a dictionary. This class is intended to hold all properties of a Dictionary node in the resulting XML API file. A dictionary object consists of optional and mandatory information: mandatory: headwords, edition, date optional = maintainerName, maintainerEmail, status, sourceURL The date should be the date of the last release. Additionally, a dictionary keeps a list of downloads which may be empty. Each download has to be a Link() object. """ def __init__(self, name): self.__name = name # mandatory dictionary information mandatory = ["headwords", "edition", "date"] self.__mandatory = {f: None for f in mandatory} # optional dictionary info self.__optional = { f: None for f in ["maintainerName", "maintainerEmail", "status", "sourceURL"] } self.__downloads = [] def get_name(self): """Return name of dictionary. This is a three-letter-code followed by a hyphen and followed by a three-letter-code. Example: deu-fra""" return self.__name def add_download(self, link): """Add a link (of type Link) to the linst of downloadss.""" if not isinstance(link, Link): raise TypeError("Link must be of type Link()") self.__downloads.append(link) def get_downloads(self): """Return all download links.""" return self.__downloads def __getitem__(self, key): """Transparently select a key from either optional or mandatory keys.""" if key in self.__mandatory: return self.__mandatory[key] if key in self.__optional: return self.__optional[key] raise KeyError(key) def __contains__(self, key): try: self.__getitem__(key) except KeyError: return False else: return True def __setitem__(self, key, value): if key in self.__mandatory: self.__mandatory[key] = value elif key in self.__optional: self.__optional[key] = value else: raise KeyError(key) def get_mandatory_keys(self): """Return all mandatory keys.""" return self.__mandatory.keys() def is_complete(self): """Return true if all mandatory fields are set, else false.""" return not self._get_missing_keys() def _get_missing_keys(self): """Return list of keys which haven't been set yet but which are mandatory. Empty list means everything has been set.""" return [k for k in self.__mandatory if self.__mandatory[k] is None] def update(self, other): """This method works like the .update method on a dictionary, but it raises an exception whenever an unknown key is found in the supplied dictionary.""" if not hasattr(other, "__getitem__") or not hasattr(other, "keys"): raise TypeError("Object must provide methods keys() and __getitem__.") for key in other.keys(): self[key] = other[key] def get_attributes(self): """Return all attributes which make up the dictionary node in the FreeDict XML. If mandatory attributes are not set, this function WILL NOT raise an exception, consequently, is_complete() must be called beforehand. Unset values are None. Hint: the name is not contained, use get_name() instead.""" attributes = self.__mandatory.copy() attributes.update(self.__optional) return attributes # only match x.x, x.x.x, x-y-z, x-z DICTIONARY = "([a-z]{3}-[a-z]{3})" class DownloadFormat(enum.Enum): """The download format, consisting both of the platform and the archive format. Some formats might not have a archive format, though.""" DictTxz = re.compile(r"freedict-%s-(.*?).dictd.tar.xz" % DICTIONARY) Slob = re.compile(f"freedict-{DICTIONARY}-(.*?).slob") StardictTxz = re.compile(r"freedict-%s-(.*?).stardict.tar.xz" % DICTIONARY) Source = re.compile( r"freedict-%s-(.*?).src.(?:zip|tar.bz2|tar.gz|tar.xz)" % DICTIONARY ) # legacy formats DictTgz = re.compile(r"freedict-%s-(.*?).dictd.tar.gz" % DICTIONARY) DictBz2 = re.compile(r"freedict-%s-(.*?).dictd.tar.bz2" % DICTIONARY) Dic = re.compile(r"freedict-%s-(.*?).dic.tar.*" % DICTIONARY) @staticmethod def get_type(file_name): """This function allows to get the correct enum value from a given file_name. The file name is parsed and the corresponding enum value returned. If the format could not be extracted, None is returned.""" if file_name.endswith(".sha512"): return None format = DownloadFormat.Source for format in DownloadFormat: if format.value.search(file_name): return format return None def __str__(self): """Return a string representation of the enum value, as used in the type attribute of the release tag in the FreeDict XML API.""" formats = { DownloadFormat.Source: "src", DownloadFormat.DictTgz: "dict-tgz", DownloadFormat.DictBz2: "dict-bz2", DownloadFormat.DictTxz: "dictd", DownloadFormat.Slob: "slob", DownloadFormat.StardictTxz: 'stardict' } try: return formats[self] except KeyError: raise ValueError("Unsupported format: " + self.name) class Link: """Represent a (download) link. The link is made of of multiple parts. The hostname and base URI is taken from variables defined in the module config. The given path is assumed to exist on disk, so that the file can be determined. Additionally to the given link path, a link also saves the information about the file format (dict-bz2 or source) and also the version of the dictionary. It also mandates a hash for verification of the file.""" def __init__(self, path, format, version, sha): self.path = path self.format = format self.version = version self.size = -1 self.last_modification_date = "NONE" # YYYY-MM-dd self.hash = sha def __str__(self): """Get a download link.""" # split the path into chunks, url-quote them path = tuple(map(urllib.request.quote, self.path.split(os.sep))) if len(path) < 3: raise ValueError( "Required is a path with the structure LongName/version/filename" ) path_base = config.RELEASE_HTTP_BASE if not path_base.endswith("/"): path_base += "/" return "https://{}{}{}/{}/{}".format( config.PROJECTHOME_HOST, path_base, path[-3], path[-2], path[-1] ) def normalize_version(vers_string): """Normalize historical numeric versions without losing SemVer suffixes.""" match = re.fullmatch(r"([0-9]+(?:\.[0-9]+){0,2})([-+].+)?", vers_string) if not match: raise ValueError(f"Invalid version: {vers_string!r}") core, suffix = match.groups() parts = [str(int(part)) for part in core.split('.')] parts.extend(['0'] * (3 - len(parts))) suffix = suffix or '' # Historical -fd revisions are downstream releases, not prereleases. if re.fullmatch(r'-fd[0-9]+(?:\.[0-9]+)*', suffix): suffix = '+' + suffix[1:] return semver.Version.parse('.'.join(parts) + suffix) def version_key(version): """Order FreeDict revisions after upstream SemVer precedence.""" normalized = normalize_version(version) revision = (0,) if normalized.build and re.fullmatch(r'fd[0-9]+(?:\.[0-9]+)*', normalized.build): revision = tuple(int(part) for part in normalized.build[2:].split('.')) # Treat fd1 and fd1.0 as equivalent, just like a missing fd0 suffix. while len(revision) > 1 and revision[-1] == 0: revision = revision[:-1] return normalized, revision def mklink(full_path, format, version, sha): """Create a Link object with all the required information, i.e. file size. It queries the referenced `full_path` for its size and last modification date. It doesn't care whether it's actually on the file system or mounted with e.g. sshfs.""" chunks = full_path.split(os.sep) path = "{}/{}/{}".format(chunks[-3], chunks[-2], chunks[-1]) link = Link(path, format, version, sha) # get file size link.size = os.path.getsize(full_path) # get last modification date link.last_modification_date = datetime.datetime.fromtimestamp( os.path.getmtime(full_path) ).strftime("%Y-%m-%d") return link tools-0.8.0-beta.1/fd_tool/fd_tool/api/jsonhandlers.py000066400000000000000000000023431526415265400226340ustar00rootroot00000000000000"""JSON output writer.""" import json def write_freedict_database(path, dicts, tools): """Write a freedict database to ''path`` in JSON format.""" serialized = [] for dictionary in dicts: if not dictionary.is_complete(): raise ValueError("Not all mandatory keys set.") essence = {k: v for k, v in dictionary.get_attributes().items() if not v is None} essence['name'] = dictionary.get_name() # set maintainer if none present if 'maintainerName' not in dictionary or not dictionary['maintainerName']: essence['maintainerName'] = 'FreeDict - no maintainer assigned' essence['releases'] = [] for release in dictionary.get_downloads(): essence['releases'].append({'platform': str(release.format), 'size': str(release.size), 'date': release.last_modification_date, 'URL': str(release), 'version': str(release.version), 'checksum': release.hash, }) serialized.append(essence) serialized.append({'software': {'tools': tools}}) with open(path, 'w', encoding='utf-8') as fhandle: json.dump(serialized, fhandle, indent=2, sort_keys=True) tools-0.8.0-beta.1/fd_tool/fd_tool/api/metadata.py000066400000000000000000000206341526415265400217250ustar00rootroot00000000000000"""This file provides classes to parse all dictionaries to extract the required meta data for the freedict-database.xml. The meta data comes from the header of each dictionary and gives details on the quality or size of a dictionary.""" import datetime import html.parser import io import os import re from xml.etree import ElementTree as ET from . import dictionary from . import xmlhandlers from .xmlhandlers import istag class MetaDataParser(xmlhandlers.TeiHeadParser): """Parse a TEI XML dictionary for required and optional meta data using Python's iterparse facility. It guesses the path on it's own, unless a path is given as optional parameter. For each element where data should be extracted, there is a handle_ which is called if it exists. This is a common class from which concrete parserfs can be derived. They all share the facility to parse TEI XML, but they can differ in they way they retrieve the TEI XML. While the local file system is a natural choice, one could choose to retrieve the information over HTTP(s). After the header has been parsed, the .dictionary attribute holds a reference to a populated Dictionary object.""" # pattern to match mtaintainer in tag MAINTAINER_PATTERN = re.compile(r'^([^<]+)\s*$') # match number of headwords in pattern HEADWORD_PATTERN = re.compile(r'(\d+(?:\.|,|\s*)\d*).*') # ISO date pattern DATE_PATTERN = re.compile(r'\d{4}-\d{2}-\d{2}') def __init__(self, name, xml): # can be a file object or a string with XML data xml = self.get_file_object(xml) super().__init__(xml) self.dictionary = dictionary.Dictionary(name) self.dictionary['date'] = None def get_file_object(self, src): """Transparently create a file object. If this method gets a file object, it will return is unchanged, otherwise the given string is wrapped in a StringIO object.""" if hasattr(src, 'read') and hasattr(src, 'close'): return src # is already file object elif isinstance(src, bytes): return io.BytesIO(src) elif isinstance(src, str): return io.StringIO(src) else: raise ValueError("Either file object, str or byte array " + \ "expected, got %s." % type(src)) def parse(self): try: super().parse() except ET.ParseError as e: print(("Warning: while parsing {} an error occurred. Might be still " "ok though.{}").format(self.dictionary.get_name(), '; '.join(e.args))) # check whether parsing was successful if not self.dictionary.is_complete(): missing = [k for k in self.dictionary.get_mandatory_keys() if not self.dictionary[k]] raise ValueError("%s: the following information couldn't be read: "\ % self.dictionary.get_name() + ', '.join(missing)) def handle_tag(self, elem): """Delegate parsing of XML tags to specialised functions.""" if istag(elem, 'date') or istag(elem, 'change'): self.__extract_date(elem) tag = elem.tag.split(self._namespace)[-1] # strip etree namespace funcname = 'handle_%s' % tag if not hasattr(self, funcname): return result = getattr(self, funcname)(elem) if result: self.dictionary.update(result) def handle_sourceDesc(self, node): """Extract a source url, if any.""" ptr = node.findall('.//%sptr' % self._namespace) if ptr: return {'sourceURL': ptr[0].get('target')} # search for source URL within ' encountered.') def handle_extent(self, elem): """Extract extent (number of headwords).""" match = MetaDataParser.HEADWORD_PATTERN.search(elem.text) if not match: raise ValueError("Could not extract number of headwords from " + repr(elem.text)) headwords = ''.join(char for char in match.groups()[0] if char.isdigit()) return {'headwords': headwords} def handle_respStmt(self, respStmt): """Maintainer is in , this one can contain nesting for author and maintainer, hide complexity and return either maintainer, then author or None.""" # find name attribute name = respStmt.find(self._namespace + 'name') if name is None: return resp = respStmt.findall(self._namespace + 'resp') if resp is None or not any('maintainer' in t.text.lower() for t in resp): return maintainer = name.text if not maintainer: return if 'up for grab' in maintainer.lower(): # not a real maintainer return # try to extract email address: if '@' in maintainer: maintainer = html.parser.unescape(maintainer) match = self.MAINTAINER_PATTERN.search(maintainer) if match: return {'maintainerName': match.groups()[0].rstrip().lstrip(), 'maintainerEmail': match.groups()[1].rstrip().lstrip() } else: return {'maintainerName': maintainer.rstrip().lstrip()} def __extract_date(self, elem): """If date has not been set with the attrbiute in the header, guess it from change log.""" parse_date = lambda x: datetime.datetime.strptime(x, '%Y-%m-%d') def set_date(isodate): try: if self.dictionary['date'] is None: self.dictionary['date'] = isodate elif parse_date(isodate) > parse_date(self.dictionary['date']): self.dictionary['date'] = isodate except ValueError: pass # we cannot parse all date formats if istag(elem, 'date'): if elem.get('when'): # use when, is usually in desired format set_date(elem.get('when').strip()) else: # check for correct format and if present, take it if self.DATE_PATTERN.search(elem.text): set_date(elem.text.strip()) elif istag(elem, 'change') and elem.get('when'): set_date(elem.get('when').strip()) def __format_date(self, date): """Bring date into the following format: YYYY-MM-dd.""" if re.search(r"\d+-\d+-\d+", date): return date try: dateobj = datetime.datetime.strptime(date, "%d %B %Y") date = '%d-%d-%d' % (dateobj.year, dateobj.month, dateobj.day) except ValueError: pass def parse_dicts(self): raise TypeError("This class is not meant to be used directly.""") class LocalMetaDataParser(MetaDataParser): """Parse meta data from XML dictionaries from a local fs path.""" def __init__(self, name, xml): super().__init__(name, xml) def get_meta_from_xml(path): """Parse meta data for all dictionaries in the FreeDict Root. Returns a list of Dictionary() objects.""" dictionaries = [] dict_pattern = re.compile(r'^[a-z]{3}-[a-z]{3}$') for item in os.listdir(path): full_path = os.path.join(path, item) matched = dict_pattern.search(item) if not matched: # eng-hun and hun-eng end on .header; auto-generated continue # is not a dictionary # append dictname.tei: full_path = os.path.join(full_path, item) + '.tei' if not os.path.exists(full_path): full_path += '.header' if not os.path.exists(full_path): raise FileNotFoundError("For dictionary %s no dictionary file was found, assumed path: %s" \ % (item, os.path.abspath(full_path))) with open(full_path, 'rb') as f: dparser = LocalMetaDataParser(item, f) dparser.parse() dictionaries.append(dparser.dictionary) return dictionaries tools-0.8.0-beta.1/fd_tool/fd_tool/api/releases.py000066400000000000000000000162041526415265400217460ustar00rootroot00000000000000"""Collect all information about released dictionaries.""" import hashlib import json import os import re import shutil import subprocess import sys import urllib.request from datetime import datetime import semver from .config import RELEASE_HTTP_TOOL_BASE from .dictionary import DownloadFormat, version_key # relative to github.com/freedict/ TOOLS_REPO = 'tools' USER_AGENT = 'Friendly FreeDict Helper' class ReleaseError(Exception): """This error can occur, when information about a release is gathered. It wraps all sorts of ValueErrors and IoErrors.""" def git(cmd): """Execute a git command with the given list as arguments. Return stdout.""" proc = subprocess.Popen(['git'] + cmd, cwd=os.environ['FREEDICT_TOOLS'], stdout=subprocess.PIPE) stdout = proc.communicate()[0].strip() ret = proc.wait() if ret: raise ReleaseError("`git %s` exited with exit code %d" % \ (' '.join(cmd), ret)) return stdout.decode(sys.getdefaultencoding()) def latest_tools_tag(tags): """Select the newest SemVer tools tag, ignoring unrelated tag names.""" versions = [] for tag in tags: try: version = semver.Version.parse(tag) except ValueError: continue versions.append((tag, version)) if not versions: raise ReleaseError('No semantic tools release tags found.') return max(versions, key=lambda item: item[1])[0] def get_tools_release(): """Retrieve the latest tools tag, its commit date and local archive URL.""" if 'FREEDICT_TOOLS' not in os.environ or not shutil.which('git'): raise ReleaseError('FREEDICT_TOOLS must be set and Git must be installed.') version = latest_tools_tag(git(['tag']).splitlines()) date = git(['show', '-s', '--format=%cs', f'refs/tags/{version}^{{commit}}']) return (version, date, f'{RELEASE_HTTP_TOOL_BASE}/freedict-tools-{version}.tar.xz') def get_release_info_for_dict(path, version): """Retrieve information about the releases of a dictionary.""" files = {} name = None version = version_key(version) for file in os.listdir(path): format = DownloadFormat.get_type(file) if not format: continue # ignore unknown file naming, possibly outdated or unsupported formats parsed_name, file_version_str = format.value.search(file).groups() file_version = version_key(file_version_str) if file_version != version: raise ReleaseError('Version from file name "%s" did not match version of directory "%s"' \ % (file, version)) if not name: name = parsed_name elif parsed_name != name: raise ReleaseError('Found two different dictionary identifiers in %s: %s and %s' \ % (path, parsed_name, name)) full_path = os.path.join(path, file) try: with open(full_path + '.sha512', 'r') as f: sha = f.read().strip().split(' ')[0] except FileNotFoundError: raise FileNotFoundError('expected a sha512 checksum, found nothing', full_path + '.sha512', 'r') files[full_path] = (name, format, sha) if not files: raise ReleaseError("no downloads available for %s" % path) return files def get_all_downloads(root): """Get all paths to a downloadable file from a given root. This function walks the given path and returns all paths to files with the relative to the given root.""" # only match directories with two iso 639-3 codes, separated by "-" dirpattern = re.compile(r'[a-z]{3}-[a-z]{3}') release_directories = tuple(os.path.join(root, e) for e in os.listdir(root) if os.path.isdir(os.path.join(root, e)) and dirpattern.search(e) \ and not 'tools' in e.lower()) if not release_directories: raise ReleaseError("%s: no released dictionary found" % root) dictionaries_with_release = {} # collect dictionaries which have a release for dictdir in release_directories: # iterate over subdirectories which represent versions for version_dir in (os.path.join(dictdir, f) for f in os.listdir(dictdir)): version = os.path.basename(version_dir) try: files = get_release_info_for_dict(version_dir, version) except ReleaseError as e: if e.args[0].startswith('no downloads available'): continue # skip versions with no or unknown releases else: raise if not files: print('Warning: no files in "%s", skipping...' % version) continue name = next(iter(files.values()))[0] if not name in dictionaries_with_release: dictionaries_with_release[name] = {} # transform {path: (name, format, hash)} to (path, format, hash) dictionaries_with_release[name][version] = tuple((k, v[1], v[2]) for k,v in files.items()) return dictionaries_with_release def get_latest_version(release_information): """Iterate over object and return the latest version, as defined by semver.""" latest = None latest_strict = None # might contain '-' replaced through '.' for version in release_information: try: version_strict = version_key(version) except ValueError as e: raise ReleaseError(e.args) if not latest: latest = version latest_strict = version_strict else: if version_strict > latest_strict: latest = version latest_strict = version_strict if not latest: raise ReleaseError(f"No versions found for {release_information!r}") return latest def github_request(path): """Make a GitHub API request and return aJSON object.""" url = "https://api.github.com/{}".format(path) request_headers = {'User-Agent': USER_AGENT} request = urllib.request.Request(url, headers=request_headers) with urllib.request.urlopen(request) as f: return json.loads(f.read().decode('UTF-8')) def get_latest_tools_release(): tags = github_request(f"repos/freedict/{TOOLS_REPO}/tags") version = latest_tools_tag(tag['name'] for tag in tags) latest = next(tag for tag in tags if tag['name'] == version) commit_url = latest['commit']['url'] api_suffix = commit_url[commit_url.find('.com/') + 5:] commit_meta = github_request(api_suffix)['commit']['committer'] # validate format date = datetime.strptime(commit_meta['date'].split('T')[0], '%Y-%m-%d') date = date.strftime('%Y-%m-%d') # We don't use the API-provided download URL (latest['tarball']), as it # contains a funny number in the unpacked directory. github_uri = f"https://github.com/freedict/tools/archive/refs/tags/{latest['name']}.tar.gz" request = urllib.request.Request(github_uri, headers={'User-Agent': USER_AGENT}) with urllib.request.urlopen(request) as f: checksum = hashlib.sha512(f.read()).hexdigest() return {'version': latest['name'], 'date': date, 'URL': github_uri, 'checksum': checksum} tools-0.8.0-beta.1/fd_tool/fd_tool/api/xmlhandlers.py000066400000000000000000000075501526415265400224700ustar00rootroot00000000000000"""Everything concerned with XML processing and writing.""" from xml.etree import ElementTree as ET class TeiHeadParser: """This parser uses a SAX parser to parse the header information of a TEI file, wrapping it in an easy-to-use interface only emitting completely parsed tags and aborting when a tag is encountered. Whenever a tag is encountered, self.handle_tag(...) is called.""" def __init__(self, input_file_object): self.__input = input_file_object # make name space available for derived classes self._namespace = None def parse(self): # get an iterable from XML context = iter(ET.iterparse(self.__input, events=("start", "end"))) # get the root element _event, root = next(context) # extract namespace end = root.tag.find('}') if end > 0: self._namespace = root.tag[:end+1] for event, elem in context: if event == 'start': if elem.tag.endswith('body'): break # do not parse body else: continue # skip node, not fully populated self.handle_tag(elem) def handle_tag(self, node): pass def istag(elem, name): """Tag comparison ignoring xml namespaces.""" return elem.tag.endswith(name) def create_node(tag, attrs=None): """Create ET.Element node with specified tag and attributes.""" e = ET.Element(tag) if attrs: e.attrib = attrs.copy() return e def create_child(parent, tag, attrs): """Create child node and attach to parent.""" c = create_node(tag, attrs) parent.append(c) def dictionary2xml(dictionary): """Return the ElementNode (ElementTree) representation of this dictionary. Raise ValueError if a mandatory field is missing""" if not dictionary.is_complete(): raise ValueError("Not all mandatory keys set.") downloads = dictionary.get_downloads() attributes = {k: v for k, v in dictionary.get_attributes().items() if not v is None} attributes['name'] = dictionary.get_name() # set maintainer if none present if 'maintainerName' not in dictionary or not dictionary['maintainerName']: attributes['maintainerName'] = 'FreeDict - no maintainer assigned' dictionary = create_node('dictionary', attributes) for download in downloads: attrib = {'platform': str(download.format), 'size': str(download.size), 'date': download.last_modification_date, 'URL': str(download), 'version': str(download.version), 'checksum': download.hash } create_child(dictionary, 'release', attrib) return dictionary def indent(elem, level=0, more_sibs=False): i = "\n" if level: i += (level-1) * ' ' num_kids = len(elem) if num_kids: if not elem.text or not elem.text.strip(): elem.text = i + " " if level: elem.text += ' ' count = 0 for kid in elem: indent(kid, level+1, count < num_kids - 1) count += 1 if not elem.tail or not elem.tail.strip(): elem.tail = i if more_sibs: elem.tail += ' ' else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i if more_sibs: elem.tail += ' ' def write_freedict_database(path, dicts, tools): """Write a freedict database to ''path``.""" root = ET.Element('FreeDictDatabase') root.extend([dictionary2xml(n) for n in dicts]) sw_node = create_node('software') tools_node = create_node('tools', tools) sw_node.append(tools_node) root.append(sw_node) indent(root) tree = ET.ElementTree() #pylint: disable=protected-access tree._setroot(root) tree.write(path, encoding="utf-8", xml_declaration=True) tools-0.8.0-beta.1/fd_tool/fd_tool/config.py000066400000000000000000000070601526415265400206370ustar00rootroot00000000000000"""This file offers common configuration parsing facilities required for the Freedict build system.""" import configparser import os import re class ConfigurationError(Exception): def __init__(self, msg, path=None): super().__init__() self.path = path self.msg = msg def __repr__(self): if self.path: return 'error in configuration "%s": %s' % (self.path, self.msg) else: return self.msg def __str__(self): return repr(self) def load_configuration(conffile): """Load given `config` from given path. Default values are provided and missing mandatory options will raise a ConfigurationError.""" config = configparser.ConfigParser() config['DEFAULT'] = { 'file_access_via': 'sshfs', # unison or sshfs possible 'api_output_path': '.'} config['crafted'] = {} config['crafted']['local_path'] = '' config['generated'] = {} config['generated']['server'] = 'freedict.org' config['generated']['remote_path'] = '/var/www/download/generated' config['generated']['local_path'] = '' config['generated']['user'] = 'anonymous' config['generated']['skip'] = 'no' config['release'] = {} config['release']['server'] = 'freedict.org' config['release']['remote_path'] = '/var/www/download/dictionaries' config['release']['local_path'] = '' config['release']['user'] = 'anonymous' config['release']['skip'] = 'no' # overwrite defaults with user settings with open(conffile) as configfile: config.read_file(configfile) if config['DEFAULT']['file_access_via'] not in ['sshfs', 'unison']: raise ConfigurationError(('section=DEFAULT, file_access_via="%s": ' 'invalid value, possible values are sshfs and unison') \ % config['DEFAULT']['file_access_via'], conffile) api_path = config['DEFAULT']['api_output_path'] if api_path and os.path.exists(api_path) and os.path.isfile(api_path): raise ConfigurationError("expected directory, found file", path=api_path) for section in ('generated', 'crafted', 'release'): if not config[section]['local_path']: raise ConfigurationError("error, local_path not set for section [%s]" \ % section, conffile) path = get_path(config[section]) if not os.path.exists(path): raise ConfigurationError("path \"%s\" configured in section [%s] doesn't exist" \ % (path, section), conffile) return config def discover_and_load(): """This file attempts to discover and load a FreeDict configuration file at the usual places. If no configuration was found, a ConfigurationError is raised.""" paths = [os.path.join(os.path.expanduser("~"), '.config/freedict/freedictrc')] if os.environ.get('LOCALAPPDATA'): paths.append(os.path.join(os.environ['LOCALAPPDATA'], 'freedict/freedict.ini')) conffile = [path for path in paths if os.path.exists(path)] if not conffile: phrase = ('one of the following directories' if len(paths) > 1 else 'the following directory') raise ConfigurationError(("no configuration found. Please initialize " "one in " + phrase + ' ' + ', '.join(paths))) return load_configuration(conffile[0]) def get_path(section, key='local_path'): """Return a local_path from a section with $HOME, ~/ or %HOME% replaced.""" home = os.path.expanduser('~') path = section[key] for pattern in (r'\$HOME', '~', '%HOME%'): path = re.sub('^' + pattern, home, path) return path tools-0.8.0-beta.1/fd_tool/fd_tool/scripts/000077500000000000000000000000001526415265400205045ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/fd_tool/scripts/fd_api.py000066400000000000000000000133021526415265400222770ustar00rootroot00000000000000"""FreeDict API generator This script parses the meta data of all available dictionaries, queries information about available releases and writes all information to an XML file. For more information, please have a look at the wiki at . For usage of the script, try the -h option. """ import argparse import os import sys import subprocess import time from fd_tool.api import dictionary, jsonhandlers, metadata, releases, xmlhandlers from fd_tool import config from fd_tool.config import get_path def exec_or_fail(command): """If command is not None, execute command. Exit upon failure.""" if command: ret = subprocess.run(command, shell=True).returncode if ret: print("Failed to execute `%s`:" % command) sys.exit(ret if ret > 0 else 128 - ret) def read_dict_info(conf, generate_api=True): """Parse dictionary meta data from the dictionary source and extract information about all released dictionaries. Return a list of dictionaries (Dictionary objects). generate_api is used to emit a message which is only useful if the API is generated.""" dictionaries = [] for dict_source in ['crafted', 'generated']: dict_source = get_path(conf[dict_source]) print("Parsing meta data for all dictionaries from", dict_source) dictionaries.extend(metadata.get_meta_from_xml(dict_source)) release_path = get_path(conf['release']) print("Parsing release information from", release_path) release_files = releases.get_all_downloads(release_path) for dict in dictionaries: name = dict.get_name() if not name in release_files: if generate_api: print("Skipping %s, no releases found." % name) continue try: version = releases.get_latest_version(release_files[name]) except releases.ReleaseError as e: # add file name to error raise releases.ReleaseError(list(e.args) + [name]) for full_file, format, sha in release_files[name][version]: dict.add_download(dictionary.mklink(full_file, format, version, sha)) return dictionaries def find_outdated_releases(dictionaries): """This function finds dictionaries which have been updated, but not released yet.""" candidates = [] for dict in dictionaries: if dict.get_downloads() == []: candidates.append((dict.get_name(), None, None)) else: released = max( (l.version for l in dict.get_downloads()), key=dictionary.version_key, ) if dictionary.version_key(dict['edition']) > \ dictionary.version_key(released): candidates.append((dict.get_name(), dict['edition'], released)) return candidates def main_body(args): parser = argparse.ArgumentParser(description='FreeDict API generator') parser.add_argument("-n", "--need-update", dest="check_for_unreleased_dicts", action="store_true", default=False, help="check for unreleased dictionaries instead of generating the API file") parser.add_argument('-p', "--pre-exec-script", dest="prexec", metavar="PATH", help=('script/command to execute before this script, e.g. to set up a sshfs ' 'connection to a remote server, or to invoke unison.')) parser.add_argument('-o', "--post-exec-script", dest="postexc", metavar="PATH", help=("script/command to execute after this script is done, e.g. to " "umount mounted volumes.")) args = parser.parse_args(args[1:]) conf = config.discover_and_load() exec_or_fail(args.prexec) # mount / synchronize release files try: dictionaries = read_dict_info(conf, not args.check_for_unreleased_dicts) if args.check_for_unreleased_dicts: outdated = find_outdated_releases(dictionaries) if not outdated: print("Everything up-to-date.") else: print("\nName Source Version Release Version") print("------- --------------- --------------------------") for data in sorted(outdated, key=lambda x: x[0]): name, v1, v2 = [str(e if e else 'unknown') for e in data] print('{} {:<15} {:<15}'.format(name, v1, v2)) else: # remove dictionaries without download links dictionaries = sorted((d for d in dictionaries if d.get_downloads() != []), key=lambda entry: entry.get_name()) tools = releases.get_latest_tools_release() api_path = config.get_path(conf['DEFAULT'], key='api_output_path') xml_path = os.path.join(api_path, 'freedict-database.xml') json_path = os.path.join(api_path, 'freedict-database.json') os.makedirs(api_path, exist_ok=True) print("Writing XML API file to",xml_path) xmlhandlers.write_freedict_database(xml_path, dictionaries, tools) print("Writing JSON API file to",json_path) jsonhandlers.write_freedict_database(json_path, dictionaries, tools) finally: # Let SSHFS flush before cleanup, including when generation failed. time.sleep(2) exec_or_fail(args.postexc) def main(): """Wrapper for nicer error case handling.""" #pylint: disable=broad-except try: main_body(sys.argv) except Exception as e: if 'DEBUG' not in os.environ: print('Error:',str(e)) print(("\nNote: Rerun the script with the environment variable DEBUG=1 " "to obtain a traceback.")) sys.exit(9) else: raise e if __name__ == '__main__': main() tools-0.8.0-beta.1/fd_tool/fd_tool/scripts/fd_file_mgr.py000066400000000000000000000171061526415265400233200ustar00rootroot00000000000000"""This script makes remote files available for local processing. Remote files are e.g. the released files hosted on a server as downloads or the auto-generated dictionaries, kept outside the git repository. This script requires a configuration. See README.release for more details. Running this script with the `-h` option will give an overview about its usage.""" import argparse import os import subprocess import sys from .. import config class FileAccessError(OSError): """A remote-access command failed with a process exit status.""" def __init__(self, message, returncode=1): super().__init__(message) self.returncode = returncode if returncode > 0 else 128 - returncode def execute(command): """Run a remote-access command without shell interpolation.""" result = subprocess.run(command, capture_output=True, text=True, check=False) if result.returncode: text = (result.stdout + result.stderr).strip() if command[0] == 'fusermount' and 'not found in /etc/mtab' in text: return raise FileAccessError( f'Subcommand failed: {command!r}\n{text}', result.returncode) class UnisonFileAccess: """This class is one of two classes to allow access to remote files using unison. The drawback with unison is that before the usage by other scripts, all files have to be downloaded. On the other hand, this might speed up subsequent runs and allows offline work. On Windows, it might be desirable to use unison, because sshfs is not officially ported to Windows.""" def __init__(self): # save make_available arguments for make_unavailable self.args = tuple() def name(self): return "unison" def make_available(self, user, server, remote_path, path): """Synchronize files to have them available locally.""" self.args = (user, server, remote_path, path) # Use a child-specific UNISON directory instead of $HOME/.unison. result = subprocess.run([ 'unison', '-terse', '-auto', '-batch', '-log', '-times', '-contactquietly', '-ignore', 'Regex .*.swp', '-ignore', 'Regex .*.swo', '-ignore', 'Regex .*/build', '-ignore', 'Regex .*~', '-ignore', 'Regex .unison.*', f'ssh://{user}@{server}/{remote_path}/', path], env={**os.environ, 'UNISON': os.path.join(path, '.unison')}, check=False) if result.returncode: raise FileAccessError(f"Unison failed with exit code {result.returncode}", result.returncode) #pylint: disable=unused-argument def make_unavailable(self, path): """Synchronise in case files were created.""" if not self.args: return self.make_available(*self.args) class SshfsAccess: """This class mounts and umounts the remote files using sshfs. This will work on any system that fuse runs on, namely GNU/Linux, FreeBSD and Mac.""" def name(self): return 'sshfs' def make_available(self, user, server, remote_path, path): """Mount remote file system using sshfs.""" # is mounted? if os.path.ismount(path): # mounted, -m help says we need to return 201 return 201 # and no action if len(os.listdir(path)) > 0: raise FileAccessError(f'{path} has to be empty before mounting', 41) execute(['sshfs', f'{user}@{server}:{remote_path}', path]) def make_unavailable(self, path): execute(['fusermount', '-u', path]) def create_access_sessions(conf): """Create independent access objects for the configured remote sections.""" sessions = [] for section in ('release', 'generated'): options = conf[section] if options.getboolean('skip'): continue arguments = (options['user'], options['server'], options['remote_path'], config.get_path(options)) if conf['DEFAULT']['file_access_via'] == 'sshfs': access = SshfsAccess() else: access = UnisonFileAccess() # Standalone -u has no earlier process's in-memory state. access.args = arguments sessions.append((access, arguments)) return sessions def cleanup(sessions): """Clean up every session, retaining the first failure status.""" status = 0 for access, arguments in reversed(sessions): try: access.make_unavailable(arguments[-1]) except OSError as error: print(error, file=sys.stderr) status = status or getattr(error, 'returncode', 1) return status def acquire(sessions): """Acquire access, rolling back newly mounted sections on failure.""" owned = [] try: for access, arguments in sessions: if access.make_available(*arguments) != 201: owned.append((access, arguments)) except BaseException: # Unison synchronization owns no mount to roll back. cleanup([session for session in owned if isinstance(session[0], SshfsAccess)]) raise return owned def run_with_files(conf, command): """Run a command with remote access and preserve its failure status.""" owned = acquire(create_access_sessions(conf)) status = 0 try: try: status = subprocess.run(command, check=False).returncode if status < 0: status = 128 - status except OSError as error: print(error, file=sys.stderr) status = 1 finally: cleanup_status = cleanup(owned) return status or cleanup_status def setup(): """Parse a single remote-access operation.""" parser = argparse.ArgumentParser(description='FreeDict build setup utility') actions = parser.add_mutually_exclusive_group(required=True) actions.add_argument('-a', dest='print_api_path', action='store_true', help='print the configured API output directory') actions.add_argument('-r', dest='print_release_path', action='store_true', help='print the configured release directory') actions.add_argument('-m', dest='make_available', action='store_true', help='make files available; exit 201 if all mounts already exist') actions.add_argument('-u', dest='umount', action='store_true', help='unmount or synchronize configured remote sections') actions.add_argument('--run', nargs=argparse.REMAINDER, metavar='COMMAND', help='run a command with remote access and cleanup') args = parser.parse_args() if args.run == []: parser.error('--run requires a command') return args def main(): args = setup() try: conf = config.discover_and_load() if args.print_api_path: print(config.get_path(conf['DEFAULT'], key='api_output_path')) status = 0 elif args.print_release_path: print(config.get_path(conf['release'])) status = 0 elif args.run: status = run_with_files(conf, args.run) elif args.make_available: sessions = create_access_sessions(conf) owned = acquire(sessions) status = 201 if sessions and not owned else 0 else: status = cleanup(create_access_sessions(conf)) except config.ConfigurationError as error: print(error, file=sys.stderr) status = 42 except OSError as error: print(error, file=sys.stderr) status = getattr(error, 'returncode', 1) except KeyboardInterrupt: status = 130 sys.exit(status) if __name__ == '__main__': main() tools-0.8.0-beta.1/fd_tool/freedictrc.example000066400000000000000000000003631526415265400210600ustar00rootroot00000000000000[DEFAULT] file_access_via = sshfs api_output_path = ~/freedict/build/ [release] user = john,freedict local_path = ~/freedict/release [generated] user=john local_path = ~/freedict/generated [crafted] local_path = ~/freedict/fd-dictionaries tools-0.8.0-beta.1/fd_tool/pyproject.toml000066400000000000000000000005471526415265400203110ustar00rootroot00000000000000[project] name = "fd_tool" version = "0.1" requires-python = ">=3.12" dependencies = [ "semver>=3.0.4,<4", ] [project.scripts] fd_api = "fd_tool.scripts.fd_api:main" fd_file_mgr = "fd_tool.scripts.fd_file_mgr:main" [tool.setuptools.packages.find] include = ["fd_tool*"] [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" tools-0.8.0-beta.1/fd_tool/rm_duplicates.py000066400000000000000000000301711526415265400205760ustar00rootroot00000000000000#!/usr/bin/env python3 """ This script attempts to deduplicate entries in a dictionary or to detect whether duplicates are present. In the normal operation mode, the questionable entries are removed, the result is written to a file-dedup.py and then it is converted to the C5 format. From there, a diff with the original format is done. With the diff, the human in front of this very computer can then reason about the changes. There is also a mode where the script tries to find a duplicated translation and exits upon the first match. Dependencies: xsltproc, diff python >= 3.4. The script tries to preserve the original XML, but may do the following changes: - Manual sense enumeration (using the attribute `n`) may be stripped. Because of the removal of doubled senses, the enumeration might be broken and it's automatically inserted by the output formatters, anyway. - XML declarations may get lost, feel free to add support for it. Comments work fine. """ import argparse import io import itertools import os import shlex import shutil import sys import xml.etree.ElementTree as ET # TEI name space, Python's parser doesn't handle them nicely TEI_NS = '{http://www.tei-c.org/ns/1.0}' NS = {'t': TEI_NS.strip('{}')} # findall/iter with TEI namespace removed findall = lambda x,y: x.findall(TEI_NS + y) tei_iter = lambda x,y: x.iter(TEI_NS + y) class HelpfulParser(argparse.ArgumentParser): """Unlike the super class, this arg parse instance will print the error it encountered as well as the complete usage of the program. It will also redirect the usage to a output formatter.""" def __init__(self, name, description=None): super().__init__(prog=name, description=description) def error(self, message): """Print error message and usage information.""" sys.stderr.write('Error: ' + message + '\n') self.print_help() sys.exit(2) class CommentedTreeBuilder(ET.TreeBuilder): """A TreeBuilder subclass that retains XML comments from the source. It can be treated as a black box saving the contents before and after the root tag, so that it can be re-added when writing back a XML ElementTree to disk. This is necessary because of ElementTree's inability to handle declarations nicely.""" def comment(self, data): self.start(ET.Comment, {}) self.data(data) self.end(ET.Comment) # These helpers allow the identification of similar nodes (comparison of quote # or usg) def nodes_eq(node1, node2, tag=None): """Check whether both given nodes contain equal text. If tag is given, not the nodes themselves, but the given child nodes are compared.""" if not tag: tag = node1.tag node1 = node1.find('.//' + TEI_NS + tag) node2 = node2.find('.//' + TEI_NS + tag) if node1 is None and node2 is None: return True # means equality, differences are searched if node1 is None or node2 is None: return False return node1.text == node2.text usages_match = lambda n1, n2: nodes_eq(n1, n2, 'usg') def translations_of(sense): trans = sense.findall('.//t:quote', NS) if not trans: trans = sense.findall('.//t:def', NS) return trans def rm_doubled_senses(entry): """Some entries have multiple senses. A few of them are exactly the same, remove these. This function returns True if an element has been altered""" senses = list(findall(entry, 'sense')) if len(senses) == 1: return # obtain a mapping from XML node -> list of words within `…` senses = {sense: translations_of(sense) for sense in senses} changed = False # pair each sense with another and compare their content for s1, s2 in itertools.combinations(senses.items(), 2): # both sets match if not len(s1[1]) == len(s2[1]): continue if not set(t.text for t in s1[1]) == set(t.text for t in s2[1]): continue # don't match # two senses are *exacctly* identical? try: entry.remove(s2[0]) # remove sense from entry changed = True except ValueError: # already removed? pass return changed def node_is_empty(node): """Check that this node and all its children contain no text (apart from white space).""" if node.text.strip(): return False for child in node.getchildren(): if not node_is_empty(child): return False return True def rm_empty_nodes(entry): """This function removes nodes which have no text and no children and are hence without semantic. It also resets the fixed counters on sense, since they are generated by the output formatter anyway. This function returns True if an empty node has been removed.""" changed = False # sometimes parent nodes are empty after their empty children have been # removed, so do this three times (won't work with deeper nestings…) for _ in range(0, 2): changed_here = False nodes = [(None, entry)] for parent, node in nodes: if node_is_empty(node): if parent: parent.remove(node) changed_here = changed = True else: nodes.extend((node, c) for c in node.getchildren()) if not changed_here: break # nothing removed, no further iterations else: changed = True # try to strip enumeration of senses they aren't adjacent anymore; map # sense: numeration first or discard if no numbering sense_numbers = {sense: int(sense.attrib.get('n')) for sense in tei_iter(entry, 'sense') if sense.attrib.get('n')} if sense_numbers: # if not all values between min and max sense number, enumeration is # broken and can be stripped if not all(n in sense_numbers.values() for n in range(1, max(iter(sense_numbers.values())))): for node in sense_numbers: # strip manual enumeration, handled by output formatters and might # be wrong after node removal del node.attrib['n'] changed = True return changed def rm_doubled_quotes(entry): """Some entries have doubled quotes (translations) within different senses. Remove the doubled quotes. This function return True, if the entry has been modified.""" senses = list(findall(entry, 'sense')) # add quote elements senses = [(s, cit, q) for s in senses for cit in findall(s, 'cit') for q in findall(cit, 'quote')] if len(senses) <= 1: return changed = False # pair each sense with another and compare their content for trans1, trans2 in itertools.combinations(senses, 2): sense1, _cit1, quote1 = trans1 sense2, cit2, quote2 = trans2 # translation could have been removed by a previous pairing if quote1.text == quote2.text and usages_match(sense1, sense2): try: cit2.remove(quote2) except ValueError: continue # already removed changed = True return changed def exec(command): """Execute a command or fail straight away.""" ret = os.system(command) if ret: sys.stderr.write("Process exited with %i: %s" % (ret, command)) sys.exit(ret) #pylint: disable=too-few-public-methods class XmlParserWrapper: """This thin wrapper guards the parsing process. It manually finds the TEI element and copies everything before and afterwards *verbatim*. This is due to the inability of the ElementTree parser to handle multiple "root elements", for instance comments before or after the root node or '') if tei_end < 0: raise ValueError("Couldn't find `` in the input file, please extend the parser.") tei_end += len('') self.after_root = content[tei_end:] content = content[:tei_end] parser = ET.XMLParser(target = CommentedTreeBuilder()) try: parser.feed(content) except ET.ParseError as e: sys.stderr.write("Error while parsing input file\n") sys.stderr.write(str(e) + '\n') sys.exit(15) self.root = parser.close() def write(self, file_name): """Write the XML element tree to a file, with hopefully a very similar formatting as before.""" tree = ET.ElementTree(self.root) in_mem = io.BytesIO() tree.write(in_mem, encoding="UTF-8") in_mem.seek(0) with open(file_name, 'wb') as file: file.write(self.before_root.encode('UTF-8')) file.write(in_mem.read()) file.write(self.after_root.encode('UTF-8')) if not self.after_root.endswith('\n'): file.write(b'\n') def main(): parser = HelpfulParser("deduplicator", description=("Fnd and remove " "duplicated translations and empty TEI nodes")) parser.add_argument("-s", "--detect_changes", dest="detect_changes", help=("check whether duplicates or empty nodes can be detected " "and exit with exit code 42 if the first change would " "need to be made"), action="store_true", default=False) parser.add_argument('dictionary_path', help='input TEI file', nargs="+") args = parser.parse_args(sys.argv[1:]) # register TEI name space without prefix to dump the *same* XML file ET.register_namespace('', 'http://www.tei-c.org/ns/1.0') dictionary_path = args.dictionary_path[0] tree = XmlParserWrapper(dictionary_path) changed = False if args.detect_changes: # abort if first change detected for entry in tei_iter(tree.root, 'entry'): changed = changed or rm_doubled_senses(entry) # this one is dangerous #changed = changed or rm_doubled_quotes(entry) # the processing above might leave empty parent nodes, remove those changed = changed or rm_empty_nodes(entry) if args.detect_changes and changed: print(("E1: Found duplicated entries or empty XML nodes. Try " "`make rm_duplicates`.")) sys.exit(42) else: # always apply changes for entry in tei_iter(tree.root, 'entry'): changed1 = rm_doubled_senses(entry) changed2 = rm_doubled_quotes(entry) # the processing above might leave empty parent nodes, remove those changed3 = rm_empty_nodes(entry) if changed1 or changed2 or changed3: changed = True if args.detect_changes and changed: print(("E1: Found duplicated entries or empty XML nodes. Try " "`make rm_duplicates`.")) if changed: output_fn = os.path.join('build', 'tei', dictionary_path.replace('.tei', '-dedup.tei')) exec('mkdir -p build/tei') tree.write(output_fn) # get a human-readable diff of the changes c5 = lambda x: shlex.quote(x.replace('.tei', '.c5')) shutil.copy('freedict-P5.dtd', os.path.dirname(output_fn)) exec('xsltproc $FREEDICT_TOOLS/xsl/tei2c5.xsl %s > %s' % (output_fn, c5(output_fn))) # convert original dictionary to c5 exec('make --no-print-directory build-dictd') # execute diff without checking the return type if not shutil.which('less'): exec('diff -u build/dictd/%s %s' % (c5(dictionary_path), c5(output_fn))) else: os.system('diff -u build/dictd/%s %s | less' % (c5(dictionary_path), c5(output_fn))) if input("Do you want to overwrite %s with the new version (y|n): " % \ dictionary_path) == 'y': shutil.copy(output_fn, dictionary_path) if __name__ == '__main__': main() tools-0.8.0-beta.1/fd_tool/tests/000077500000000000000000000000001526415265400165315ustar00rootroot00000000000000tools-0.8.0-beta.1/fd_tool/tests/test_dictionary.py000066400000000000000000000013571526415265400223150ustar00rootroot00000000000000"""Tests for fd_tool.api.dictionary.""" #pylint: disable=too-many-public-methods,import-error,too-few-public-methods,missing-docstring,unused-variable,multiple-imports import unittest from fd_tool.api.dictionary import Dictionary class TestTictionary(unittest.TestCase): def test_unset_mandatory_fields_are_detected(self): # test for `date` d = Dictionary('lat-deu') d['headwords'] = 80 d['edition'] = '0.1.2' self.assertFalse(d.is_complete()) def test_is_complete_recognizes_all_mandatory_fields(self): # test for `date` d = Dictionary('lat-deu') d['headwords'] = 80 d['edition'] = '0.1.2' d['date'] = '1871-12-13' self.assertTrue(d.is_complete()) tools-0.8.0-beta.1/fd_tool/tests/test_versions.py000066400000000000000000000040701526415265400220130ustar00rootroot00000000000000"""Version compatibility and release selection regressions.""" import unittest from fd_tool.api.dictionary import Dictionary, Link, normalize_version, version_key from fd_tool.api.releases import ReleaseError, get_latest_version from fd_tool.scripts.fd_api import find_outdated_releases class VersionTests(unittest.TestCase): def test_normalization(self): for source, expected in { '1': '1.0.0', '0.5': '0.5.0', '1.00.00': '1.0.0', '2024.10.06+fd1': '2024.10.6+fd1', '1.8.1-fd0.2.1': '1.8.1+fd0.2.1', '1.2.3-alpha.1': '1.2.3-alpha.1', '1.2.3+foo-bar': '1.2.3+foo-bar', }.items(): with self.subTest(source=source): self.assertEqual(str(normalize_version(source)), expected) def test_ordering(self): versions = ['1.0-alpha.1', '1.0', '1.0+fd1', '1.0-fd2', '1.0+fd10', '1.1'] self.assertEqual(sorted(reversed(versions), key=version_key), versions) self.assertEqual(version_key('1.0-fd1.0'), version_key('1.0+fd1')) self.assertEqual(version_key('1.0+foo-bar'), version_key('1.0')) self.assertLess(version_key('1.8.1-fd0.2.1'), version_key('1.8.1-fd0.10')) def test_invalid_versions(self): for value in ['', '1..0', '1.2.3.4', '1.2.3-01', '1.2.3+']: with self.subTest(value=value), self.assertRaises(ValueError): normalize_version(value) def test_latest_version(self): for versions in [['1.2.3-alpha', '1.2.3'], ['1.0+fd1', '1.0+fd2']]: self.assertEqual(get_latest_version(versions), versions[-1]) self.assertEqual(get_latest_version(reversed(versions)), versions[-1]) with self.assertRaises(ReleaseError): get_latest_version([]) def test_outdated_revision(self): dictionary = Dictionary('eng-deu') dictionary['edition'] = '1.0+fd2' dictionary.add_download(Link('unused', None, '1.0-fd1', 'unused')) self.assertEqual(find_outdated_releases([dictionary]), [('eng-deu', '1.0+fd2', '1.0-fd1')]) tools-0.8.0-beta.1/freedict-database.rng000066400000000000000000000066461526415265400200140ustar00rootroot00000000000000 [a-z]{3}-[a-z]{3} \d+(\.\d+(\.\d+)?)?(-(beta|alpha).*|\+.*)? [0-9]+(\.[0-9]+(\.[0-9]+)?)?(-(0|[1-9][0-9]*|[0-9A-Za-z\-]*[A-Za-z\-][0-9A-Za-z\-]*)(\.(0|[1-9][0-9]*|[0-9A-Za-z\-]*[A-Za-z\-][0-9A-Za-z\-]*))*)?(\+[0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*)? [0-9]+(\.[0-9]+(\.[0-9]+)?)?-fd[0-9]+(\.[0-9]+)* tools-0.8.0-beta.1/importers/000077500000000000000000000000001526415265400157655ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/README.md000066400000000000000000000011651526415265400172470ustar00rootroot00000000000000This directory contains all importer scripts and programs to automatically import new dictionaries. If an importer is specific to a particular dictionary, a name with the appropriate language code should be used. For instance, an importer for Danish-German should be called dan-deu. Importer scripts which import dictionaries from a certain project should be named after the project. Each dictionary importer should have a README with basic instructions on how to run and configure the importer. Furthermore, importers should be documented on the [import centre](https://github.com/freedict/fd-dictionaries/wiki/Import-Centre). tools-0.8.0-beta.1/importers/dan-eng/000077500000000000000000000000001526415265400172765ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/dan-eng/dan-eng.py000066400000000000000000000001111526415265400211520ustar00rootroot00000000000000#!/usr/bin/env python3 SRC_URL = "http://wordnet.dk/DanNet-2.2_csv.zip" tools-0.8.0-beta.1/importers/ding2tei/000077500000000000000000000000001526415265400174725ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/.gitignore000066400000000000000000000001201526415265400214530ustar00rootroot00000000000000/dict/ding /dict/tei/*/* !/dict/tei/*/Makefile /build/ /ding2tei /util/results/ tools-0.8.0-beta.1/importers/ding2tei/COPYING000066400000000000000000001033331526415265400205300ustar00rootroot00000000000000 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . tools-0.8.0-beta.1/importers/ding2tei/GNUmakefile000066400000000000000000000110321526415265400215410ustar00rootroot00000000000000# # GNU Makefile # # Copyright 2021,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # SHELL = /bin/sh # Note: ghc probably cannot be substituted due to the use of GHC extensions. HC = ghc HAPPY = happy ALEX = alex INSTALL = install INSTALL_PROGRAM = $(INSTALL) -m 755 INSTALL_DATA = $(INSTALL) -m 644 INSTALL_DIR = $(INSTALL) -d -m 755 DOWNLOAD = curl # Notes: # * Consider to manually add `-jN'. # * Some of the below -Wx flags may have merged into -Wall in later releases # of ghc. HCFLAGS = -Wall -Wcompat \ -Wincomplete-uni-patterns -Wincomplete-record-updates \ -Wmissing-export-lists \ -Widentities -Wredundant-constraints -Wpartial-fields -Wcpp-undef \ -O2 # Notes: # * In production, omit `--info'. # * Consider the option `--array'. # * The option `--coerce' # - is claimed to generate # - "smaller faster parsers", # - at the cost of "some type safety". # - Thus, one should always make sure the result compiles w/o the flag. # - actually seems to increase run-time. HAPPYFLAGS = --ghc --info=$(@:.hs=.info) # Note: In production, omit `--info'. ALEXFLAGS = --ghc --info=$(@:.hs=.info) # Clear suffixes, no implicit rules needed. .SUFFIXES : srcdir = src builddir = build dictdir = dict dingdir = $(dictdir)/ding teidir = $(dictdir)/tei .DEFAULT_GOAL = ding2tei SRCS_ALEX = $(srcdir)/Language/Ding/AlexScanner.x SRCS_HAPPY = $(srcdir)/Language/Ding/Parser/Line.y SRCS_HS := $(filter-out $(srcdir)/Test.hs,$(shell find $(srcdir) -name '*.hs')) SRCS_SED = $(wildcard $(srcdir)/preprocess/de-en/*.sed) SRCS = $(SRCS_ALEX) $(SRCS_HAPPY) $(SRCS_HS) $(SRCS_SED) SRCS_HS_GEN = $(patsubst $(srcdir)/%.x,$(builddir)/%.hs,$(SRCS_ALEX)) \ $(patsubst $(srcdir)/%.y,$(builddir)/%.hs,$(SRCS_HAPPY)) # Notes: # * We could also use `ghc -M' to generate the dependencies in make format. # * Prefer $(builddir) over $(srcdir) for `-i' such that $(SRCS_HS_GEN) # are always found first in the former. ding2tei : $(SRCS_HS) $(SRCS_HS_GEN) $(HC) $(HCFLAGS) --make \ -i -i$(builddir):$(srcdir) -outputdir $(builddir) \ -XRecursiveDo \ -o $@ \ $(srcdir)/Main.hs .PHONY : haskell-source-files haskell-source-files : $(SRCS_HS_GEN) $(builddir)/%.hs : $(srcdir)/%.y $(INSTALL_DIR) $(@D) $(HAPPY) $(HAPPYFLAGS) $< -o $@ $(builddir)/%.hs : $(srcdir)/%.x $(INSTALL_DIR) $(@D) $(ALEX) $(ALEXFLAGS) $< -o $@ .PHONY : clean clean : clean-objcode clean-dicts .PHONY : clean-objcode clean-objcode : rm -f -r $(builddir)/ rm -f ding2tei .PHONY : clean-dicts clean-dicts : rm -f $(dingdir)/de-en.txt.pp rm -f $(teidir)/deu-eng/deu-eng.tei rm -f $(teidir)/eng-deu/eng-deu.tei .PHONY : clean-ding clean-ding : rm -f $(dingdir)/de-en.txt .PHONY : deu-eng deu-eng : $(teidir)/deu-eng/deu-eng.tei $(teidir)/deu-eng/deu-eng.tei : $(dingdir)/de-en.txt.pp ding2tei $(INSTALL_DIR) $(@D) ./ding2tei -- $< $@ .PHONY : eng-deu eng-deu : $(teidir)/eng-deu/eng-deu.tei $(teidir)/eng-deu/eng-deu.tei : $(dingdir)/de-en.txt.pp ding2tei $(INSTALL_DIR) $(@D) ./ding2tei --inverse -- $< $@ .PHONY : validate-ding validate-ding : $(dingdir)/de-en.txt.pp ding2tei ./ding2tei --validate -- $< .PHONY : preprocess preprocess : $(dingdir)/de-en.txt.pp $(dingdir)/de-en.txt.pp : $(dingdir)/de-en.txt \ $(srcdir)/preprocess/de-en/all.bash $(SRCS_SED) $(srcdir)/preprocess/de-en/all.bash < $< > $@ # This target must be specified explicitly and fails otherwise. .PHONY : download-ding-1.9 download-ding-1.9 : $(dingdir)/de-en.txt $(dingdir)/de-en.txt : ifneq (,$(filter download-ding-1.9,$(MAKECMDGOALS))) $(INSTALL_DIR) $(@D) $(DOWNLOAD) \ 'https://ftp.tu-chemnitz.de/pub/Local/urz/ding/de-en/de-en.txt.xz' > $@.xz printf '%s %s\n' \ 7373b16fccc5c167298b6cde8e4cdd78b3d48941711f10f39429e761742e3068 $@.xz \ | sha256sum -c xz -d $@.xz else $(warning Run `make download-ding-1.9` first.) $(error Refusing to implicitly download Ding source) endif tools-0.8.0-beta.1/importers/ding2tei/README000066400000000000000000000067601526415265400203630ustar00rootroot00000000000000ding2tei-haskell ================ A program to convert the Ding deu-eng [0] dictionary into the TEI [1] format, to be used within the FreeDict project [2]. This program was written as part of a Bachelor's thesis. See doc/thesis.pdf. Dependencies ------------ * main ding2tei program: * Haskell (Glasgow Haskell Compiler / GHC) * base * containers (Data.Map, Data.Set) * transformers (Control.Monad.Trans.{State,Writer}) * pretty (Text.PrettyPrint) * haskell-xml (Text.XML.Light) * safe (Safe.Exact) * Happy * Alex * preprocessing: * Bash * sed (with support for `-E`; e.g., GNU sed, OpenBSD's sed) * `make` (optional) * GNU make * standard UNIX utilities (provided by, e.g., GNU coreutils) * curl (`make download-ding-1.9`) * xz (`make download-ding-1.9`) On Debian-based distributions: # apt install ghc libghc-xml-dev libghc-safe-dev happy alex bash sed make \ coreutils curl xz-utils Locale ------ Use a UTF-8 locale, otherwise some things might produce unexpected results or even fail. In particular, do not use the C locale. Obtain the Ding dictionary -------------------------- $ make download-ding-1.9 Alternatively, it can be manually downloaded from: https://ftp.tu-chemnitz.de/pub/Local/urz/ding/de-en/ and stored (uncompressed) at: dict/ding/de-en.txt Build ding2tei -------------- $ make You may need to include `-dynamic` in HCFLAGS; e.g.: $ make HCFLAGS='-O2 -Wall -dynamic' Build TEI dictionaries ---------------------- $ make deu-eng $ make eng-deu Note: The main program (ding2tei) allocates a lot of memory, around 5.7 GiB, when applied to the full Ding dictionary. Debug / Run ding2tei manually ----------------------------- # TODO: make (alex, happy) $ make haskell-source-files $ ghci -i -ibuild:src -XRecursiveDo Test >> parseLine $ scan "some dictionary :: line\n" >> pretty $ parseLine $ scan (examples !! 0) >> (Just ding, log) = parse $ scan $ header ++ (concat examples) >> pretty ding >> tei = ding2tei $ enrichDirected $ enrichUndirected ding >> putStr $ prettyTEI $ tei >> :q $ ./ding2tei --help $ ./ding2tei doc/examples/test.ding - | pager See also: src/Main.hs GNUmakefile Usage with the FreeDict tools ----------------------------- To use the resulting TEI files with the FreeDict tools: $ make -C dict/tei/lg1-lg2 Notes: * Above, lg1-lg2 should be either of deu-eng and eng-deu. * Memory usage of the FreeDict tools is even higher than that of ding2tei. * Running time is quite long (~ 1 day). * See for more information. Licensing --------- ding2tei-haskell is distributed under the GNU Affero General Public License (AGPL), version 3 or later. See the license headers in the source files and the license itself for details (should be supplied with this program under the name COPYING). The Ding source is licensed under the GNU General Public License (GPL), version 2 or later. In the context of this program, version 3 of the license should be considered, since it allows combining with the AGPLv3. (Likely, later versions will also allow combining.) The combination of the Ding dictionary and this program form a combined work, the resulting TEI dictionary is an "object form" of this combined work, in terms of both the GPL and AGPL. Author ------ ding2tei-haskell is written by Einhard Leichtfuß. Feel free to contact me by e-mail to . References ---------- [0] https://www-user.tu-chemnitz.de/~fri/ding/ [1] https://tei-c.org/ [2] https://freedict.org/ tools-0.8.0-beta.1/importers/ding2tei/dict/000077500000000000000000000000001526415265400204155ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/dict/tei/000077500000000000000000000000001526415265400211765ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/dict/tei/deu-eng/000077500000000000000000000000001526415265400225225ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/dict/tei/deu-eng/Makefile000066400000000000000000000001411526415265400241560ustar00rootroot00000000000000FREEDICT_TOOLS ?= ../../../../.. DISTFILES = deu-eng.tei include $(FREEDICT_TOOLS)/mk/dicts.mk tools-0.8.0-beta.1/importers/ding2tei/dict/tei/eng-deu/000077500000000000000000000000001526415265400225225ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/dict/tei/eng-deu/Makefile000066400000000000000000000001411526415265400241560ustar00rootroot00000000000000FREEDICT_TOOLS ?= ../../../../.. DISTFILES = eng-deu.tei include $(FREEDICT_TOOLS)/mk/dicts.mk tools-0.8.0-beta.1/importers/ding2tei/doc/000077500000000000000000000000001526415265400202375ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/doc/META000066400000000000000000000107671526415265400207230ustar00rootroot00000000000000How stuff is documented ======================= License ------- Even though not explicitly specified, all documentation is provided under the same license as the code it applies to. This is currently the Affero GNU Public License, version 3 or later. See the license headers in the source files and the license itself (file COPYING) for details. Modularisation -------------- Documentation may be found in: * Code * General * A common license header is to be placed at the head of any non-trivial source file. * Haskell * Haskell code should be enriched with Haddock documentation, ideally at least each exported function and datatype (et al.) of a module. * Modules should be split into a hierarchichal structure. * Sed * Explicit documentation files * General * Documentation should be split into several usually small files, according to the discussed topic. * Files should be named in a hierarchical manner, using dots (<.>) as separators. E.g. "syntax.slashes". * Note: This convention might change later towards using directories as a means to reflect hierarchy. * doc/ * Contains any documentation on the how and why. It contrasts to in-code documentation by adressing the more abstract issues. * Its files should be well structured, as desribed later. * It should contain only few questions and TODO annotations. * doc/partial/ * Less well structured or rather incomplete documentation. * doc/examples/ * Small (Ding) examples. * doc/thesis.pdf * Bachelor's thesis explicating this program. * todo/ * Contains documentation on steps that remain to be taken and problems that remain to be solved. It does in particular allow for the discussion of options and stating of questions. * A file's structure requires less strictness to allow for the likely frequent additions, changes and restructuring. * Files in todo/ should end up in doc/ when all is done. * If instead, it was decided not to pursue something further, either should the reasons be documented, or else the corresponding file in todo/ moved to todo/old/. * It may be a good idea to split off parts of a todo file into a file under doc/. * todo/old/ * No-more-todo, not considered worthy of conversion to proper documentation, but nonetheless not to be binned. Syntax & Semantics ------------------ * Applying to all documentation: * Things should be usually specified in hierarchical lists, like in this file. * There are valid exceptions, e.g. detailed explanations in doc/. * Lists may use any special char as bullet point. In particular, these may be mixed. * The semantic of particular bullet point characters should be specified here. * Indentation: Like in this file. * Question, uncertainty. * <.> Fact. * <-> Common. * Annotates a point that has the prevalent meaning in the context. * E.g., in todo files, this indicates a thing to be done. * May also be used as generic bullet point. * '>' Quote. * Filename. * <*> Generic. * Prefer full phrases. * Use terminating periods (<.>). * 79 character limit. * Emphasis * Use '<' and '>', or paired <'> to highlight single characters. * use <`> and <'> in this order to highlight single words, e.g. identifiers. * Use paired <"> to highlight examples of data or code (excluding single elements, e.g. identifiers). * Applying to separate documentation primarily: * Headings should be underlined using `=' and `-' for primary and secondary headings, respectively. * Third level headings are a sign of a too large documentation file (like this). * Applying to separate documentation only: * A file should begin with a primary heading, roughly corresponding to the file name. * Applying to in-code documentation mostly: * Notes should be typeset as either "Note: ", or "Notes:" followed by an indented list. See above for the format of a list. * Applying to in-code documentation only: * Documentation must not be within the same comment section as the license header. (This excludes a small statement at the top of that header.) Final notes ----------- * This is not Markdown syntax. * This is quite incomplete. * The present documentation does not adhere very closely to the above rules. tools-0.8.0-beta.1/importers/ding2tei/doc/README000066400000000000000000000003151526415265400211160ustar00rootroot00000000000000README ====== This directory contains general documentation, usually not specific to single source files. For syntax, see META. See also: https://github.com/freedict/fd-dictionaries/wiki/discussion-TEI tools-0.8.0-beta.1/importers/ding2tei/doc/conversion-process000066400000000000000000000026351526415265400240310ustar00rootroot00000000000000Conversion process ================== The conversion happens in several steps. Preprocessing ------------- This is done with `sed' scripts, located in `src/preprocess'. Ding -> Ding AST ---------------- Convert the textual Ding source into a Haskell data structure, staying close to the syntax of the Ding source. This is subdivided into two steps, lexing and parsing. Some information from the source may be dropped here, if it is not intended to be used. Enrichment of the Ding AST -------------------------- Enrich the Ding AST with some information, in particular annotations, inferred from other parts of the AST. Ding AST -> TEI AST ------------------- Transform the Ding AST to a data structure that more closely resembles the TEI[-Lex0] format. The TEI AST shall be limited in expressiveness in comparison to the full potential of TEI (for dictionaries), only information that is extracted from the Ding needs to be representable. The conversion shall be done towards both a deu-eng and a eng-deu target. Note that the Ding AST is symmetrical in nature, so this should not be difficult. Since several headwords per entry seem to be disencouraged in the FreeDict project, groups on the respective keyword side have to be split here, thereby creating multiple entries with different keys but identical values. TEI AST -> TEI XML ---------------------------------------- Finally convert the TEI AST to TEI XML. tools-0.8.0-beta.1/importers/ding2tei/doc/debug.happy000066400000000000000000000001251526415265400223660ustar00rootroot00000000000000Happy debugging =============== $ happy -i HappyParser.y $ $EDITOR HappyParser.info tools-0.8.0-beta.1/importers/ding2tei/doc/ding.annotation.brace000066400000000000000000000056151526415265400243360ustar00rootroot00000000000000Classification of brace (<{}>) annotations ========================================== * Grammar . Mostly on the German side. . Refer to units ? Or a prefix of units in a group (see todo/parsing.scope-of-annotations) * Gender: {n} {f} {m} . implies singular (unless {pl}), noun * Multiplicity: {n,f,m,sing} {pl} {no pl} {no sing} . {sing} is rare . Does not imply noun. * {pl} . Applies to units (by exemplary observation) . Counter-ex.: "Abbieger {pl}; Abbiegenden {pl}; Abbiegende" - Transferral to preceding units would not help here. * Note: Plural and non-plural forms may be in the same group, in the case where a singular form represents a multitude of elements. . Does not imply noun. . Ex.: "exit ... {sing}; exeunt ... {pl}" . Ex.: "diese; dieser; dieses {pron} | diese {pl}" . Ex.: "Wir freuen uns über euer/Ihr {pl} zahlreiches Erscheinen." . Ex.: "that; those {pl}" * One could use a heuristic (such as capitalization for german words). * Likely flawed; cases rare anyways. * {no pl} . implies singular, noun * {no sing} . implies plural, noun * Verbs: {v} {vi} {vt} {vr} (in-, transitive, reflexive) * {adj} * {adv} * {pron} . Ex.: "diese; dieser; dieses {pron} | diese {pl}" . In this case, applies to group. - Further investigation required. * {num} . Mostly annotated to numbers. . Counterex: "jedermann; alle ohne Unterschied {pron} {num}" . Counterex: "beide {pron} {num}" * {Quantifikator} . Occurs only once. * ... * Separators . {prp; +Dat.; +Gen.; +Akk.} - always separeted by <;>. . Often {prp; +(Dat|Gen|Akk).}. . {wo?, wann?, wohin?, bis wann? +(Akk|Dat|Akk).} . {vt, vi} - <,>, <;>, . . Currently transformed in preprocessor to <,>. . {m,n,f,pl} - <,> . {adj} - separated from textual info by <,> once. . all others: only occuring alone. * Inflected forms . Exclusively on the English side. . imply verb . Ex.: "to be {was, were; been}" . Form: "{simple_past; past_participle}" . Both simple_past and past_participle contain a comma separated list. . each single (comma-separated) form can be annotated with <[]> and/or <()> annotations. * Differentiation . Keyword <;> does not suffice - ex.: "{prp; +Gen.}". - Identify grammar keywords and differentiate by these. - If the whole brace expression can be parsed as a grammar annotation, it very likely is one, otherwise assume conjugated forms. Specialties ----------- * Further annotation . Ex.: "{adj, usually not used before a noun}" - TODO: More investigation required. See also -------- * tools/results/braceexps.* . Full list of all brace expressions. * todo/enrich.grammar.inferral * todo/parsing.annotations.braces tools-0.8.0-beta.1/importers/ding2tei/doc/ding.annotation.parenthese000066400000000000000000000072761526415265400254250ustar00rootroot00000000000000Expressions within parentheses ============================== * in headword units * prefix location a) a collocate . Ex.: "(steuerliche) Abschreibung" . most frequent / all b) an optional prefix (not being a collocate) * Both versions (w/ and w/o prefix) share the same meaning ? Do such exist? ? Necessary to differentiate from collocates? ? Just assume a)? * suffix location a) a collocate . Ex.: "(von etw.)", "outflow (from / to)" . Ex.: "Abfangen {n} (von Sendungen, Nachrichten etc.)" - w/o "von", could be considered c) - Note keyword "von" . Ex.: "interception (of aircraft)" - Note keyword "of" . Ex.: "Lehne {f} [Süddt.] [Ös.] [Schw.] (eines Hügels) [geogr.]" - Note article in genitive * Seems to usually be indicated by a keyword like "from" * Other common keywords might also be of interest (e.g., "etw.") b) an optional suffix (not being a collocate) ? Existing? c) a description of / annotation on the whole unit () . Ex.: "Start {m} (Rakete, Raumschiff)" . Ex.: "Sinken {n} (Temperatur...)" . Ex.: "Abfalluran {n} (Kerntechnik)" . Similar to <[]>-usages (frequently the case). - TODO: Investigate on frequent initial words -- keywords - Use keywords to distinguish ? per language keywords? - include (ex.): "durch", "von", "vom", "für", "an" - include genitive articles ? include relative pronouns? - https://de.wikipedia.org/wiki/Relativpronomen * Many. - ambiguous ex.: "die", "der" (relative pronoun / nominative article) - Ex.: "(der DDR)" - usage as rel.pron. seems more frequent - Ex.: "(der wichtigste Bestandteil von etw.)" ? Change in preprocessing to "wichtigster ..."? * Work. ? Just rely on investigation? * Frequency, shortness of occuring initial words. * infix location * Infrequent. . Ex.: "loose (sharp) tongue" * Might be considered an example for tongue. . Ex.: "to get (down) to work" ? Consider a phrase otherwise? (TODO) ? Include as literal? * special: unit only contains (.*) plus other annotations . Ex.: "(Abnutzung durch Reibung) [techn.]" - Currently fixed in the preprocessor (removed <()>) ? Always just remove the parentheses? - TODO: Analyze frequency / further investigation. * prefix and suffix location (distinct annotations) . Ex.: "(obere) Abschlussleiste {f} (einer Täfelung)" ? two collocations? (TODO) * Likely confusing. * special: Two succeding <()>-exprs . Ex.: "Absetzen {n} (von etw.) (Vorgang)" ? If suffix, require different kind (a/b/c)? ? Otherwise: Error? - TODO: Investigate further. * in phrase units ? Include verbatim? * Slashes . Ex.: "(water/steam) separation system" ? Assume weak slashes to have maximal scope? ? Encode as two collocations? ? Or a single one, contatining the slash? * Semicola . Ex.: "(Wasserspeicher; Lagertank)" Problem: distinction of phrases and headwords happens after the parsing step. * When separating <()> during parsing, the spacing information is lost. * <()> must be identified in the parser, since it may contain <;> (i.a.). * Spacing must be reproduced, when an annotation is to be merged back with the text. ? Just assume single separating space (and none after <(> / before <)>)? * Likely correct in most cases. * Possibly an improvement on potentially awkward spacing in the Ding. ? Keep spacing information? See also: todo/parsing.literal.etw tools-0.8.0-beta.1/importers/ding2tei/doc/ding.grammar-naming000066400000000000000000000013641526415265400240030ustar00rootroot00000000000000Grammar ------- See `src/Language/Ding/HappyParser.y` for a grammar of the Ding source. The naming chosen in the grammer shall be used in all documentation, in particular *line*, *entry*, *group*, *unit*. In short: - The dictionary is composed of lines. - A line is composed of similar entries. - An entry is composed of a two groups, one for the German and one for the English part, which may be refered to as the left and the right group, respectively. - A group is composed of units which share a common translation. - It is usual for these units to be either a) synonyous or b) equal except for (annotated) gender or multiplicity. - A unit is a single word, expression or phrase that can be considered a key in the dictionary. tools-0.8.0-beta.1/importers/ding2tei/doc/ding.groups000066400000000000000000000017621526415265400224270ustar00rootroot00000000000000Groups ====== * Separated by <|>; contain units, separated by <;>. * Contained units related by sharing the same translation. * Usually synonyms. * It is assumed that they always are. * Debatable: differently gendered forms . Ex.: "Bäcker {m}; Bäckerin {f}" . Exception: "nicht können; kann nicht" . Exception: "wir waren; wir waren nicht" ? TODO: Catch (suffix "nicht" / "not")? - TODO: Investigate further. ? Is this special to inflected forms / and/or phrases? - Note also the mapped order on the RHS. . Same for "tun". (that's all) . For "sollen", "dürfen", "haben", "möchten" separated by <|>. * Do not confuse with other usages of "nicht". . Ex.: "übersieht; überliest; beachtet nicht" * Groups may be empty. . Obsolete documentation [0] (translated from German): "Several translations: similar words / word groups separated by semicolon" References ---------- [0] https://dict.tu-chemnitz.de/doc/syntax.html tools-0.8.0-beta.1/importers/ding2tei/doc/ding.slashes000066400000000000000000000106111526415265400225430ustar00rootroot00000000000000Syntax & Semantic of '/' ======================== Notes: * This is all by observation and human interpretation. * There are helpful tools though (in particular grep and sed). Source files: * src/Language/Ding/Token.hs * src/Language/Ding/AlexScanner.hs Definitions ----------- word: [[:alpha:]] | abbrev "." abbrev: "etw" | "so" | "sb" | "sth" | ... special: "(" | ")" | ";" | ... lFree: "(" | "{" | "[" | "<" | " " rFree: ")" | "}" | "]" | ">" | " " | interpunctiuation rFreeExceptDots: rFree - excluding triple dots ("...") - examples: - positive: ". " - negative: "..." interpunctuation: "." | "," | ":" | "!" | "?" | ";" | ... - interpunctuation, that does not require preceding space. Notes: * In AlexScanner, instead of [[:alpha:]], a much larger character set is used. * <`- TODO * Words in a more general sense, such as usable for '<>', should usually not contain a terminating '.'. * TODO: `word' may probably contain other chars, such as '-', '_'. * TODO: Abbreviations may contain several '.', e.g. "r.-k.". Alternative for single words (strong slashes) --------------------------------------------- No spacing. single_alt: word ("/" word)+ Alternative for strong-slashed expressions (double slashes) ----------------------------------------------------------- No spacing. double_alt: single_alt ("//" single_alt)+ Note: In terms of binding sthrength, double slashes are between strong and medium slashes. Alternative for groups of words (weak slashes) ---------------------------------------------- Has spacing. group_alt: expression (" "+ "/" " "+ expression)+ expression: ? Notes: * Identifying the matching expressions is hard. * A work for linguists, probably - or a potentially existing library. * One might try to guess at least in certain cases. * <`- TODO Enclosing an abbreviation (or several) (opening and closing slashes) -------------------------------------------------------------------- No spacing. Surrounded by free context. encl_abbrev: lFree < "/" wordList "."? "/" > rFreeExceptDots | lFree < "/" wordList "."? "/" "s"? > rFree wordList: word (";" " "* word)* Notes: * A terminating "s" signifies plural. * Currently, it is only recognized for single slash-enclosed words (i.e., no <;> separators). This is to allow for catching plural abbreviations at the lexer stage. Simply lexing "/s", potentially with a certain context, does not suffice, since there are many valid other occurences of "/s". * Infrequently, a "," is used instead of ";". * I consider this as to be fixed at the preprocessor stage. * <`- TODO * Note that "," is probably easier to parse. * In the current implementation (Alex + Happy), this is not the case, since there are distinguished tokens for opening and closing slashes in this context. * Note that in other contexts (<{}>), a "," means "or" while a ";" means "and". Enclosing an abbreviation containing slashes -------------------------------------------- Spacing. Surrounded by free context. encl_abbrev_sl: lFree < "/ " swords " /" > rFree swords: sword ("," " "? sword)* sword: word ("/" word)+ - syntax equal to single_alt, semantics different. Notes: * This is parsed at the lexer stage to avoid later ambiguity. * Wherever the encl_abbrev_sl rule matches, it is hence prefered. Enclosing a special char ------------------------ Spacing. Surrounded by spacing or separators (context). encl_special: lFree < "/" " "+ special " "+ "/" > rFree Notes: * This is parsed at the lexer stage to avoid later ambiguity. * Wherever the encl_abbrev_sl rule matches, it is hence prefered. Enclosing a smiley ------------------ Spacing. Surrounded by spacing or separators (context). encl_smiley: lFree < "/" " "+ smiley " "+ "/" > rFree smiley: ... (TODO) Notes: * In the original Ding source, smileys are not enclosed in slashes. * The enclosing is added in the preprocessor. * Very similar to "Enclosing a special char". * See also there. Test cases ---------- * "Abendrot Schönwetterbot, Morgenrot Schlechtwetter droht. (Bauernregel) :: Red sky at night shepherd's [Br.]/sailor's [Am.] delight, red sky in the morning shepherd's [Br.]/sailor's [Am.] warning. (weather saying)" Exceptions ---------- * "AC/DC" -- TODO * In 2 of 3 present occurences, this can be transformed to "/ AC/DC /". * Bad occurence: "AC/DC converters" tools-0.8.0-beta.1/importers/ding2tei/doc/ding.spec.source000066400000000000000000000002041526415265400233270ustar00rootroot00000000000000An outdated Ding syntax documentation: * http://dict.tu-chemnitz.de/doc/syntax.html Note: * Line continuations translate to <|>. tools-0.8.0-beta.1/importers/ding2tei/doc/enrich.grammar000066400000000000000000000022631526415265400230620ustar00rootroot00000000000000Grammar enrichment ================== The German side is generally richer annotated. Similarly, individual units in a group may be richer annotated. Many of such annotations may be transferred. Also, from some annotations, we may infer others--applying to the same group. Inferral: --------- See doc/ding.annotation.brace Transferral: ------------ Transfer annotations to units within the same entry, regardless of the side, according to the following rules. Note that they are specific to the language pair (German, English)--and the concrete dictionary. * Grammar annotations * {v*} - Drop transitivity information ("{vi}"/"{vt}"). - Drop reflexivity ("{vr}") (debatable). * {n,f,m} * Only transform implicit information, as found during inferral. * {sing}, {pl} - Do not transfer. . Counterexample: "Schere" ~ "scissors" (plurale tantum) * part of speech (excl {v*}) - Transfer. * All else: Drop. * Inflected forms - Do not transfer. - Inferral should provide `verb' though---this should be transferred. * Other (incl. usages) - Do not transfer. See also -------- * todo/parsing.scope-of-annotations * doc/ding.annotation.* tools-0.8.0-beta.1/importers/ding2tei/doc/examples/000077500000000000000000000000001526415265400220555ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/doc/examples/test.ding000066400000000000000000000007231526415265400237010ustar00rootroot00000000000000# Version :: 0 2020-09-12 # Copyright (c) :: Example Person, # 2020 # License :: AGPL Version 3 or later # URL :: https://example.org/ Eintrag {m} {+Gen.} ~eintragen /Eintr./ (Wörterbuch) :: entry ~enter /entr.;ent./ (dictionary) Graph {m} [math.] | Knoten {m} [math.] :: graph | node; vertex :: entry without translation essen {vt;vi} :: to eat sein :: to be {was, were; been} Barock {m,n} :: baroque Karotte {f}; Möhre {f}; Wurzel {f} [Norddt.] :: garden carrot tools-0.8.0-beta.1/importers/ding2tei/doc/examples/test_example.ding000066400000000000000000000005151526415265400254130ustar00rootroot00000000000000# Version :: 0 2020-09-12 # Copyright (c) :: Example Person, # 2020 # License :: AGPL Version 3 or later # URL :: https://example.org/ some word; foo | some word in some foo phrase; foo bar; foo bar baz | gna; this some word :: x; y | z; g | a Salat | Ein Satz der ein Beispiel zu Salat ist :: salad | A sentence exemplifying salad. tools-0.8.0-beta.1/importers/ding2tei/doc/examples/test_references.ding000066400000000000000000000002661526415265400261040ustar00rootroot00000000000000# Version :: 0 2022-04-15 # Copyright (c) :: Example Person, # 2022 # License :: AGPL Version 3 or later # URL :: https://example.org/ A; B ~C1 ~D1; C; D ~foo | E; F ~bar :: A2 | E2 tools-0.8.0-beta.1/importers/ding2tei/doc/haskell_intro000066400000000000000000000041041526415265400230170ustar00rootroot00000000000000A very small crash course into Haskell, to allow for a basic understanding of (hopefully) most of the code. Think of everything as a mathematical function or simple value (a function with zero arguments). The whole program is one complex function, composed of smaller ones. There are also `data' definitions though, these can be considered classes in the mathematical sense and are similar to C-structs. Further notes - Nesting & indentation - nesting is (usually) achieved via indentation, like in Python. - spaces are used for indentation - line continuations require nothing but further indentation - Functions - Functions take one argument. - No parantheses are (normally) required (e.g., 'sqrt 2'). - The class of functions from A to B is written as `A -> B'. - Frequently, there are functions of type `A -> (B -> C)', also written as `A -> B -> C' (`->' is right-associative). Such functions are usually to be understood as taking two arguments (of type A and B). - This is possible due to the isomorphism between `A -> (B -> C)'` and `A x B -> C'. - This can easily be generalized for an arbitrary number of arguments. - It is quite common that arguments to functions are functions themselves. Function composition - `f . g' is the function that maps `x' to `f(g(x))'. - Type annotations - Types may be annotated as follows: `value :: type'. - Syntactic sugar - `$' - Usually, one can think of everything on the current nesting level after (and before) `$' as enclosed in parantheses. - e.g.: (2 + (sqrt (2 + 3))) == (2 + (sqrt $ 2 + 2)) - multiple `$': (f $ g $ h) = (f (g (h))) - More precisely: `$' is a right associative operator with lowest precedence. - (`$' is in fact not syntactic sugar, but the identity function) - Documentation / Troubleshooting - Use Hoogle (sic!) [0] ! - Haskell Wiki [1] - Many more resources: [2] See also: - https://wiki.haskell.org/How_to_read_Haskell References: [0] https://hoogle.haskell.org/ [1] https://wiki.haskell.org/ [2] https://www.haskell.org/documentation/ tools-0.8.0-beta.1/importers/ding2tei/doc/partial/000077500000000000000000000000001526415265400216735ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/doc/partial/ding.paren-units000066400000000000000000000055731526415265400250150ustar00rootroot00000000000000Units containing only <()> and annots ===================================== Some units do not contain a main part (not enclosed by any kind of bracket). They are always starting with a <()> part. Meanings: a) suffix annotation to all former units in the group b) first <()> part contains the headword - usually (always?) in the context of botanics or zoology (latin names). * Usually (always?) last unit in group. * Any further annotations tend to apply to the whole group / list of preceding units. Resolving (for now): * Any non-initial unit of this kind is considered of type a) * Any initial unit of this kind is dropped. * See Language/Ding/HappyParser.y and Language/Ding/Partial/PartialSuffixUnit.hs Examples: Anfälligkeit {f}; Empfänglichkeit {f}; Empfindlichkeit {f}; (für etw.); Neigung (zu etw.) | Alterungsanfälligkeit {f}; Alterungsempfindlichkeit {f}; Alterungsneigung {f} | Verkokungsneigung {f} | Korrosionsanfälligkeit {f}; Korrosionsneigung {f} | Rissanfälligkeit {f} | Flockenempfindlichkeit {f}; Flockenneigung {f} (Metallurgie) | Stoßempfindlichkeit {f} | Schweißrissempfindlichkeit {f} :: susceptibility (to sth.) | susceptibility to aging | susceptiblity to coking | susceptibility to corrosion | susceptibility to cracking/fissuring | susceptiblity to flakes (metallurgy) | susceptibility to shocks | susceptibility to weld cracking Basispapier {n}; Basisinstrument {n}; Basiswert {n}; Bezugswert {n}; (eines Wertpapiers) [fin.] :: underlying asset; underlying (of a security) Duchgangshöhe {f}; (Fußgänger); Durchfahrtshöhe {f} (Brücke, Unterführung) [auto] :: headroom; headway (bridge, unterpass) Einspruch/Beschwerde einlegen; Einspruch erheben [Ös.]; berufen [Ös.]; rekurrieren [Schw.]; appellieren [Schw.]; (gegen) (bei) | Einspruch/Beschwerde einlegend; Einspruch erhebend; berufend; rekurrierend; appellierend | Einspruch/Beschwerde eingelegt; Einspruch erhoben; berufen; rekurriert; appellieren | gegen eine Entscheidung Einspruch erheben; eine Entscheidung beeinspruchen [Ös.] :: to appeal (against) (to) | appealing | appealed | to appeal against a decision Feigwarze {f}; Feuchtwarze {f}; Kondylom {n}; (Condyloma) [med.] | Feigwarzen {pl}; Feuchtwarzen {pl}; Kondylome {pl} | Feigwarzen der Harnröhre :: genital wart; venereal wart; condyloma | genital warts; venereal warts; condylomas | urethral condylomata Gänseblümchen {pl}; Marienblümchen {pl}; Tausendschönchen {pl}; Maßliebchen {pl}; (Bellis) (botanische Gattung) [bot.] :: daisies; bellis (botanical genus) Ginkgo-Gewächse {pl}; Ginko-Gewächse {pl}; (Ginkgoaceae) (botanische Familie) [bot.] (Amblypomacentrus breviceps) [zool.] :: saddle damsel (Amphiprion leucokranos) [zool.] :: white cap (anemone) clown (Amphiprion tricinctus) [zool.] :: three stripe (anemone) clown (Anthelia spp.) oder (Cespitularia spp.) [zool.] :: waving polyp -- see also the subsequent lines in the Ding. tools-0.8.0-beta.1/importers/ding2tei/doc/partial/linking.lines000066400000000000000000000017541526415265400243710ustar00rootroot00000000000000Links between units in groups, and groups in lines ================================================== The basic means for this in TEI is the tag. There are several types. Unless (likely difficult) means to identify the type of relation are used, stick to the general . This should most likely be used to link groups in a line, but also to represent ~tilde references. For units in a group, (synonym) might be more appropriate, though their actual relation is that they translate to a common set of words. In particular one might argue that "Bäckerin" and "Bäcker" are not synonyms. One might also argue otherwise in this particular case. Since, most likely these words are annotated with "{f}" and "{m}", respectively, one could use that data to make an exception. Such references, except for ~tilde references should have a @target. See: * https://github.com/freedict/fd-dictionaries/wiki/FreeDict-HOWTO-%E2%80%93-Writing-Text-Encoding-Initiative-XML-Files tools-0.8.0-beta.1/importers/ding2tei/doc/partial/tei.abbreviations000066400000000000000000000003011526415265400252200ustar00rootroot00000000000000Ex. from the TEI docs:
MTBF
abbreviation for mean time between failures
tools-0.8.0-beta.1/importers/ding2tei/doc/sed_intro000066400000000000000000000005601526415265400221510ustar00rootroot00000000000000No, no intro here. Just links. manpage: sed(1) - Should suffice to understand the given (short) scripts. good tutorial: https://www.grymoire.com/Unix/Sed.html - Read to write fancy scripts in the Turing complete sed-language yourself. Notes: - I use and assume GNU sed. - Other sed implementations may not work with the given scripts (but likely will). tools-0.8.0-beta.1/importers/ding2tei/doc/style000066400000000000000000000006451526415265400213270ustar00rootroot00000000000000Coding style ============ Basis: - https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md - https://haskell-haddock.readthedocs.io/en/latest/markup.html Deviation / exceptions ---------------------- Line length: max. 79 chars Indentation: - generally: 2 spaces - `where', `deriving': 1 space Blank lines: - There may be more than one in succession, if it improves structure or readability. tools-0.8.0-beta.1/importers/ding2tei/doc/tei.spec.sources000066400000000000000000000002621526415265400233560ustar00rootroot00000000000000https://www.tei-c.org/release/doc/tei-p5-doc/en/html/DI.html https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html https://hal.inria.fr/hal-01757108/document tools-0.8.0-beta.1/importers/ding2tei/doc/thesis.pdf000066400000000000000000030054611526415265400222420ustar00rootroot00000000000000%PDF-1.5 %ÐÔÅØ 196 0 obj << /Length 426 /Filter /FlateDecode >> stream xÚm’MoÜ †ïû+¸ 0`½%ÙÍG›Cî©í�¬YÅkG`¯´ýõÅf[%m%KóaÞg†jCwö—½®7o%C ©ÒŠ£ú€8TTš •(ªô ×…Ò8Ø!övòC[ÁO�[Ž·R�ßO~l8_ŽŒÅ�ú3⬤¬DÀP­UfÞ®Lç¶~_p> stream xÚ3PHW0Ppç2ÀAc(á endstream endobj 5 0 obj << /Type /ObjStm /N 100 /First 810 /Length 1304 /Filter /FlateDecode >> stream xÚ�WÛnÛF}çWÌcR ÷ÆåF€&¾ @¸–Q¤�óÀHk™ E +*¶ÿ¾g(^œF&“"4Ü�93sföBM1¥¤br¤ IÖ’P$â˜DI’À€Ñ$1àIüøÁ€I#iH:KÒA$¥ DR�"•ZR i� KZâ‰I'#¤SxÔddÁ±1#dœ$í(À$Pµmx/h}<ñ®GÛ˜�e�=PõÕ‡¯¹¿§¬\áÉŠÇ]>R·¾ƒ.ƒ/òMÎMG+›—9Ï�Z¶ŽOûn¥]°Höa¼Gk_ú0i”ŒÎÊ�/︪á']²¨à& “êm¶g÷ÍH{éît+—Å~7¶v¥Ûâ0†S°é­õäÙ£‡Îú…³G·€_<{ôpÿìÙ£‡3öGÏžÁT£lyWåX´ÉV~ÌXu^›u|_…/Ïò·™év•å—²º/üjÝì»1“¶_矋œw‡íÝ÷§ËG¾)ÆtEóó¼þÄú''Ñüúqëi~™­}4GóÔì‰ø;šÑüÊïª}àù.Ù ½÷«<{]=ÐÇÆ™®˜øê³Ô}Š€�§jÔ[/O½øû|”Ì$n²V'ˆ�Ê}Q|zVÕT…™%¸Æ>Õ%D\Ta±Í–žÔÁä2«AIIòðzöP_,°×zÍ@4?G’ÄÔœóGƒs-%š¯÷q÷"ù3 {áûónçØ~— _ÓGø:=§ùµ¨©�þ(�ø€ø?�2Ö¿HçhïZ endstream endobj 211 0 obj << /Length 381 /Filter /FlateDecode >> stream xÚmR;OÃ0Þó+nt$jüJ� µ "eHk7µê¦"qáïãØŽ“ïÎ÷=îl=x(H>ïÛâv#(¬jVC{I±àXEqM´ÞÑÚj3M¾óÞÙ}É:šrÅŽÖãÉm¹ãuèË�öévê_\VŒcEË£5ãÙúrÅT…Ì‚4s.PàeSÒ ©)ê¦0ªß¤Xw[.å?8mMêø*Yƒ.£³¦7ƒÎÅ»q‚™äA É¸Ýä'?û´íaÍxˆ"ÙíuÐ)8ÅK;˜yÚy>J±ªª4`¤F¼sÎQç¦DSœÇ©(ꃣlcXZ_¯Æ¹%‰Rsû£u‡˜Âʼq©–½}Ç#¨ù„9v™/¶âÚóÞŸ­q7ÙË¢BE"|9ùËŒ•�5Uadf)ÖmñYÐ@F€' –J�¿ExÐý¹xÿ  ÃeÐÃL)øŽ­g RaΚ;x+^ÿ~µ?ßƒÉ ×¡“²s‘ÝZk£ü 6~±À¯- endstream endobj 217 0 obj << /Length 19 /Filter /FlateDecode >> stream xÚ3PHW0Ppç2ÀAc(á endstream endobj 221 0 obj << /Length 892 /Filter /FlateDecode >> stream xÚuVÏ—›8 ¾Ï_ÁѼ7¡CÇöíÌììµ¹íöà€CÜ%&Ï6“Í¿’e(iÓ“-Y?>IJò¤Oòäí)�ç—ýӧײJŠ2«w5OöǤæY)Êd[ñŒ7»dß%³Ïç­l}úmÿ×§×¢Jš¬Ù[4Ï“ Xîò-YîO*Ý”yÍþÐ&å¬'¡Ó­×£‘öF²vxn™Ÿ­i{å¦k˜ƒ€S‹_ß)ÚÑ1Ã^pÍe®ÁǵtÅæâW/€ÏgÙ!gDɨ¾‘ö«‚9z- ‰Nge:ù]Ô€íuø Ð;MÄÏ/?14«=€üO7œ·y™5eyßáý ;Y4 Ftóýb•S�zÄŸçX?>u�Öw�ƒ äšG޲Çíˆ†æØæ˜„žÛÉZ\_Kô87|FB¸hê�µŠîihAà)V²yTJhMUÆp™ÙSÞ­‚ÀÝg3üˆd<Þq!¨e8à¤þ» ºÕ~ˆ²UØ\I:F‡A�ΓÉ/´¡í>0T¬:;[<"~ �/5ä?}0ÓÑr`'­]LÝxŽîÇÉÒ¢‹†k0ù¼VðÉÑ »‚.÷ÅçX<æXÀ«%ùïá#|!ÖðÃî¯åARäUVóm‚íÌbŒ�;“—ýÓÿuFö endstream endobj 227 0 obj << /Length 19 /Filter /FlateDecode >> stream xÚ3PHW0Ppç2ÀAc(á endstream endobj 267 0 obj << /Length 1156 /Filter /FlateDecode >> stream xÚíšMs›H†ïþœ¶Ðv>†9fm'•TRå]«¶¶*É�Xž”*„œø²¿}{˜áÑP6›u„.B �­‡î·ûí�8s‡8¯.ˆÝþ6½øõ%_D‚:Ó;GP88a@|‰ŸLç½{™gNÝ25›õäãô žŽôeÈB}q¼�ùL€9ƒN<É÷5žÀܲÈ'n“ͬTx)<ÛJô¹xžý~uIt.éqú„FŽGñÊ�´ßôñÚ”0æNïS¼,çîËIÄÝ"M¯Ô¬4GVú/²Èý”ê# ¥ëO¼€�SÙìùEȱ¹½Î{�JJ Ýö(Ù&ʶ‰^©l®ß�›¨êžÅÅ„º�O„âGþ˜ÿw³ƒ’Èm”Œù’ÂÏ*F)&À,/VU,æE\EXe“ÀíðOg°îÊâÂpÊG§Ã½Hƒ!Þš³š,p:¢8=²k`áÞNŒw|Ù�^4ÑA‰•Fs�B1òUÏ>aål�°Ö¦ÌúÚ•¹ˆ°ó㇠ڠûÔ‰VÖ¿Þ½5Ê:O³´y^IÒñ,â÷qr H…–ãuV¨™®I÷º�ÕC½„LÏ�zàæcE>!ŠCà3B |ûzzñ.¯c‡ endstream endobj 288 0 obj << /Length 548 /Filter /FlateDecode >> stream xÚå–ËŽÚ0†÷<…—ÎÂ_ŽoË‚‘º˜ªmÔÍ´‹2M ($�ÎÛ×&¡ˆ R¥©2ÝÄò‰/ÉwþóÛ -Cw£Ûxt3 9ê´Ð(~DœÊGFYjµ@ñ=àY–Eßâ÷7SÐGc¥f”9ëWÚ�¸�'÷ñç0rÄÚN–'R*a|L6%Õ”G„s|W&«URFD[�iDcÿ¾ç^s¿c~è�p`ë†ò¼¨Sê€P´'?“Õ&O·1Lá_�!?‘&@Gš†Ze½4=Wn®'ëY^o³bV@ÀöÂÕljÒ£ÂuÓ;�3!ð§ô+“*�UaM"¥ÄM ¸Z¦M`Q$¹O"Xý¶RÓ+¶³|qÖr=„½u8gD{Ç—ÈJœäÙ<«"añKËõñ„kQW›ºòÕaÌð8]'öxìœÛÞ0>ÖšGfºÈäYU&ëmž4b5k ½¶p™”¼šÔ¸ˆˆ×ÞÜw­æƒ=‚®‡§ûáéù%ÿNÕ¿¨í€Ùþñ¾Ä�:€î}é]$…צ<­‹Ð<çé|‘®ÒuèTA«œ+‡Õî*w<û6ûžgÅ¢L6Ë0ü¥ï²¥dç£öí$ý�T‘` endstream endobj 309 0 obj << /Length 2367 /Filter /FlateDecode >> stream xÚ…XÉrã8½û+t*Bâ ·cwmSs›(ß\>À"%±š‹›K9ô÷“(J¦£/�H$2/0Úœ6ÑæÛC$ÿ>>üû«�7: “DÇ›Çã&U¡5v“Äq˜§zóXlž‚Og÷:–ývoÒ8PÛçÇÿò.¦YªpW´ÙÇQiž·[£‚±ï`‹ Šé0V]Ëûà”<Ì�øm:Œ”åmÿ™×n÷65AÕnuÀ¡Ž÷±vý©¬/8ÑAQ¾n÷ÀS¶ÅÀËžm<—Ì2 ¥¬ù¿uãÔ»ÚKkO“;•ávŸ%u¦McGb ‡ \þ%²ßpÖõu±Û‚¥žÑ—hÚ T˜Ç1Ûà€ ~²05eßMRLPT?#c`Û&l^%³Pi€SLfƒ7:…–šn�hv”Ýk-'u-ú™æÃîÕ½Ô²­'bGÿÆŸ²ªöÄôª]3DØPrœÇr«À 4&yqŒ>hÀy±RÁÞ"X&÷ãúà�US¢I‰º®‚GSò(O«�ÿOXx¥Tpb‰M×Ë&×÷¤)`^[Ʋ�“Þªñ¼f˜ÀFü§,Ûÿ>¼sœÅ+·¥è¶*v 3�\(Z²©ª~V�xãϼBêñù­(âÚq>µ& ñò�`'Ú£²½WÌêŽ#¨º7`Ž—UW”ÔbÈQDí~ˆïíLÀ*÷vî|8ºQ"ÐŽÇcx­Esd«ÆeJ³è¬LêhvåÇÊ>~ù¾¦ ã|¾-È¿�ùç�À16Ñä�¨0Ó bÃÈf‚´PmÁY:ÆüÍÓ×mn!ýú“�òJ�‘~•죹!óÿw&A§•ƒEÊ`™Àˆø#02™�ÔW#ãå�èÀ‡±¯~SÍ’ÀDâ íœK;/JrÇT@r–WžËv"Ò‰gˆÆM^âD¥†7AK”L¢ûµjÆ™ÕÂ--3+¤š4‰Ð³ˆñ@D'TOüš{6êÊD­ üμ—ʘÍtð2ÉžQ¤gÁ‰,ÄÑ¥›ø@î-�ÒW§³ßЭY0ŒSqÙ‰ïÎ�+Éfí[¬x~Q/¼€í”ðSÁ–š*í )‚péïÚñêQèõ°�f�ƒ�o\�§v õ˜1^l¸fÅN7µo’†‹Ë uE;~fP7º7W¸‹ Mðø»*<þºßô´ÊFLº­¦H©ZñÌ mŸD¶�ygí>„щEdÞñxÁ®ý‹ˆ©€?ƒÔ"\MÙÐàÅSN„¡îM8ZÈJtöõ%„@„�·€Ë'•<¯d”= )zS(S¤E®µü–™kr@ %HÚ”˜2½`ÕACp*÷ŠÃ[G!…ÿŽÿ ]ƒc=4ÎÀê|G‹ Ö|�K!×…�i}6\Ϙڄqr›0wRC3fP’o_H¨)¼ìá*é\ &Ï%L©”Ê£Ð\34ê´·:¾M€)È'å°¢c ­›šÛ‡'“=ó ?£8Jô¦Š‚¡ô�MXQ¡�E)'dÿèa"‡‰nlÇí µ~¸@+¤�PXW”¹írßúj„®€¦mF± þè©ûK} …ºñU|D'!éØã¥âˆž7@û½¥D€“kÁ|˜£Ü›&³�‘±)±+dYGþw`ÆÍ‡Íu¸[}(².¾à Ʒ†¼Rמ9D[úÊ èË8 ¦Wyñ¬BlŽ}œER‹‰ïB¥B €‡ïÅ?è-‰¹¶ "tÑd#Ó“²ÏkfQcëâŒêàjj»ÌýCzd"eÜááú<�â;û`Xé`u‚AÅ=¬(¤W{ØÔ÷°ÂÕ—®¨¼¢þH‰0žÀ‹£ðd µ¥ÖÆ«†ˆ1ÉÝ˹ïN½k†�SÆwznªà•úvð0¶î;¦ B�V|w/þVçwù}‘‡Pæ!$¯OàÀ�@#ïbÿ1�¿}à :^n\Q®#¶,ýûÔñMâ·…ªÆo&«½^tßäéû&ï³|N‰ï<ùþ‹×²‰ã2�ä²�G×ÀÅ9½¤àßñêΣ¢:Á›°æ‰<]®ïb¸•Ä]öR&¿£.4íšÃ~í»}ÄÊè²yÄŸ•r¹2 ÀãŸc'¤çJs®àU•š~ EÙÌ$°ÃOMpܧΧCÂñU“,PyºKSµv¬§§ÚKü¨J¨<Ìâlù8ÉòëG8º<¿šÔkÖAÌ\ÕÆCÖÏÈ•çiø+ãÍàËãÃßÈm”ÿ«Ò(´ZmÍÃÓs´)` nˆÊàq6•$a’b©®7?þÇßv“tƒßqSNP�@©%SùÍÃ8Ž6)ðEô1׆*V€Sà2×€Yv¦×~ ÒrÌ«?ºã¸…Rü¶•€$á7JìE:(ë›Äö‘Âõ‡o�¾­¤“¤cž;…Ä,¤ÄI¸ÀÚ÷O�+'Ö’t~�>Y¨li[¬H4:Ä” Ü?êîeE$`\_qðd#éÓ=ËïÅiÃô €‡Q}?xÞ`(NCxx€{bH%jq“Kýþ·C endstream endobj 337 0 obj << /Length 3556 /Filter /FlateDecode >> stream xÚµËrÛFòî¯àm¡*Æ<ðrNNì8ÞJ9ÙX©=(:@ÀˆÄ<,k³ù÷í@@e;)_È™A£§§ß݃`³Û›×O¾=òì{nR?�t´9¿Þ¨ öU¨6q˜øI¤7çÅæÂÓg—çÿ|ö½�f€:Š|�X@C ßýðâçóW¿œm�1žò϶qœxoÞžÿr¦ï§—¿~wþæ§·ˆæI {ßÛx;"Üê £Í›ôYYŸÁåšÖñ¨ßg²ÖÔŽ 4v†0M}„#}®îÛ;9Fº‰ü46 ÃT²1~¤"†4 µ Îú6J7ÛÔSØ:1^Ù3 e7’×ÉJU¾GÊ]u7’+tWY»s#Ôuëd¹(weŸU¨�IShå8eÇYÕ52â¿[RŸ+r¬ü ²KueïÖŽfý4Mç' WNûqº8PH / &ì¸+Àyd¶±^–ç �®ëxJg>+ ä¬ð¨¸5M�ýƨ°`r–7='õ‹´¼�£…"F†„ëGú\Á+èð?cÀ|èúæÀK× Pܶ©õn÷¨‰‰·_"<¸Œ� Oñ@øø -ÛsÇMÁô¼ÎÍÛšQåY.Àk{O,¿aj ‚lKÜ!özä¨<ê&¼ jÅa…hÇ£¿Úµg!pûfM¾‰¯Õ\¼Ñã먹րO®™–ë,Gþ�’ƒERFe¼¬–ÿ¼e|w�·š–7‹ƒyаÖ7vŠ/߬œJŒA&?Df ðX=¾]Cø:žv+s·J’�ì˜×+XRߨth�Ót@ôOÂ)ÒMäÂÁ�B³ �jP½™ÇA¼”½°@¯…sýÖÕ²• ”èˆJüŒÉמz‰ ží˜F|uŸõü,+ ^ꚃ )H¼î†T×ååo�±9/^Ãþdý7n€–f’‘[M‰æ «\bŸ@IS5€¸ÍÝÔãl7ñ«šfÂ-°âR6ŒŒ6~œLÉPWkÖ¢"? ¦n $oQŒeÝHøøOõø¸/78@jaz¯±œg‘9FÉ-攡âuxÈJÆSŒ} K ¬ð à?Qá™éídJað}:'o"›ÍKy˜¨\›Z~°ÒŽ­hðáíj¯¹&IaÙ{ªòbUÐÀ¼ë¡í͹Ã# +\šV8ç›H²~šqùª,Jȸ0‘ –2 �œ¸–D�Œ“¼FɸÎŽ™Ô®¸ÁTàÉŸ‹Ó-K°ë1Œ™c ‡M§”¨ÉÒÛÅ Øä ŒÊÜGìßD¾M¢Ï Ûú?ßA/Œ?üX™¥ÄßÔ'[ܳvþly¨$sgžX¯›4qJà ä ÜÁšï¡*¤^oXÊïþT¥}¯Âæ[;/­ŽUjEñ°ÄŽ}H:�M!k¯°EwÅÊ%¢2Ôâ� �o­¾/õ…ÓÖ×j Ô®¹°Ð�mt,ʈ#�p[rÍ3Z?0S}ùÇõRBÞ•>P›%cMu}ÿ®ƒ%ʲ`öýYŠ-÷;ß%P'!Š¢ù¼žp�)Ó0Z‚êñŠ�·oHÆ5Ãö#¾ä¥Í©Û@Oùš,ñþãòžÁ(4ÃÿUÆ÷fÄmnE—K4¯ ^�˜ß•#lº£¥Óh`ïe»;ݘãSnbãõ3ìѾ±ÛÂÍlˆÁM×KÇü§zµÕË�àñ^:�‘‘G)ÒÊxÙˆ\üGÇkGÙŒsº“ î7ø?¼íKnJGÞÃÁÕEöT.×ûÞn¤é-Ó€ ¯î/e¼R»[™�~…ü‘¯#!¶‡Éâ"=þœ‹ô§|ßÖõY+WQÓ�Dìi(„|¾Ey98¹hhø?㿊Ýÿ{žM·åÁ æ½¼× ;üÞÂÉH3m¡ƒmnƒd‰¾¬6`È~`ɇÁë¡]ÓI0Ç»q³:^;S‚Œ£ ’Ë=ªKËó¦–·X]S3^é¥\z¥+%ljgú˜JÚ@Ù¾„>¯%îF$?�€].´½dlUtnõ¾O>DXu™Úרwðëõ³ÖAâëøÑ¨€Ÿ`Drf=Š7!¨V,y �üÔ ãÅ÷9a0ï¾Sn·Õ~¢ÌâÂdú°€š¢©ç®è« z”WYyèøa&KØÇ2�°÷‹Ê<³››�bùXÀþ©Þ€§FGOƒ `DèaS¼‚q§°¸(·Ê@Ý‘0Î'ê(œàúäÓƒdì!prS¾×˜¾1¸ï¾Mh%W†�¬nˆ¾8 u‡fCÍvœÑçU©|^… üyŽøó*Ù àãÑûÌ K\I<î Òqwl;Ù"S ‘½~û+ïñzº�„ÉÏÃUUâå5(ó�eîêÎamkï…lnæ Zû6œRÅM ¹¹«Üu¿B6ŽÍpÈxíx¯w ¼G½Åî,…Xk>SpaÍå @`°‡b¨Å'8‹›„‡,Ø÷ýM÷üÙ3ñ&~?l¡^‡da@yuÙÿ×/ܳµ=ÙŒëÑgqýŨ ‡CSÇ H[¹: ñÆsç>néKàÆ^.ö'�4²C©ËO�¦â¤ñÝóqЉDzg¯�§¥,g¨ÊàôÒ™ÓÃÇõ¨Ðnõ&Ê‚L Sn ºCœ}Vðí¿î]¹BlœB�1ÕœPœñ7i¡”ÂðÚ”Œá}$œc ¸ðël>´¼£këÐòW(pˆ|TÃ_8„ÀU{¹z�4ó¿ÿ5ejÚ endstream endobj 208 0 obj << /Type /ObjStm /N 100 /First 902 /Length 2648 /Filter /FlateDecode >> stream xÚÍ[]o·}ß_ÁǦ@¹$ï%/iAóQ%Z ˆýÐÔðƒ,¯åEÔ]CZ¡Î¿ï9³\ɶ"ÍÖš1Dáî,çΙ{ïéÌ—‚:Í.ÅàbŠ“KIp¹¹T ß‹“ʱ:­¸³Ë¢˜\Á=)%g1-x�å‚ß›«�׋k‰cu1$ Íø@‰¥¸�HÍÅ,¸"xv1L–èb �"ÉŦq‘„P*nž™ð?X)œŒy9ð' •Šø3HÁ_ãÛhp dht’nÕäD¤-ˆ¯¨“99;± �Êwnx–šÓÀç(Þ>jN%*ŸìTùÂ9B ·ãN5‘EÊUQrV—%g(-R˸!§Ê+æ²RϹºœ3ðâ/—†9x·\‡wŠ.7¾NIÐuÌ ¼¥+|r*Õá�9¹¹¢‰s2>ÂX¥P‡E]©J•DWZÃ]F[Aµ óŒvH¦Î4À|€kšHVœ•ÊŸÌYM€aÕY+”ÓFÚ¼Wùº|“*�’«™’«¸Z8¹ª«53PB—xe°§ãO FÄ»K¨àuõ5…e`4×2ŸÞÄ5£a†V µ‘?!â b‹Ô Ÿ$pi¦ÔZ«BV!¥ƒ�Àœo…ßð_áa@|€ndÿ �•ÈY Æ–@©­†…©¡Z¥AZü"`lAÒÁ§ÒH1`‹T–€¡16L°"VpàzL»¸ÀR^J%,ž>],¿w/ÈÍà~vËýòo®Á+³èk4·¹¾¸x¹øúkNvËï¶ÛËgïNÏVNö÷ütºÛ­.7.í¿þíýî‡g»ÓÝÊÅáÂbùÓåöìÙjç^`î÷'î kùü·w+Þ~¾Z@ìf·Úì®°„‡ÛËŸWWÛë˳ÕÕà †Kÿ\½^Ÿ~»}ï^\È-{¦*p¶—xÎé%D`úìð¾^ ·¯gÁ+–ódowäîéS·Ö>vyÚåi—§]žvyÚåi—§]žvyÚåi——»¼Üåå./wy¹ËË]^îòr——»¼Üå•.¯ty¥Ë+{yŸXbÐ×bùìúÕnøþ�õæ×ÅòÛíåëÕå ñørùãòïËï^P\xI�Á¬Ã2CQÍÄqDFÏÌ£_$bÖ7Ã:xæ–?lŸoøö§³·§ïÀ¿â*˜DÍ^�d¯ÌYBôÌrU�ä÷Q\áÆõvãã8Jô‰IdóÌÀ²%ŒiFš’ ÏD%kõ æ‡é}`ª×<ò¬ßÇqýê(SêäŒoÈ_�ÃøŠ5’Õ¼¶| š4½…RƘ ßîDʈ‰d­Dõ‘J>"3Î)ùf6®™ƒ·X7î!Šz+¼Å6¢�^+JoÂrM0Â�j«^˸Rtâ¢NóŠåGìÍX‰s šÖ´X!aÍÄF”]¾i:Í ôU¸ûÊúSª7TU ÏWªƒfBÚô¤‰,!k �†’æQ\?„¦w-I�ʲÅWÔà ÂÃA(Ͱ˜5�mˆBô0 OcšFpÌÀXiàû"Àƒœ ¿×qФy¢�Xõ•}.jCÝ@`9 ͪ)H“"(Í·˜tÙô429a$+@¨‹f¾%ö¥2¶�f§"š|A–áê»p¼ªu\+2 c‚QDfOìä¡âˆµƒfzç"±úW++V¶r�áɈ‰fÐ2–Q»5œ^±4®”Y"tB1˜Qݘ( D9Íô&J†gGªA¶Í¶"*j±Qž<¢5 úö0ácêHI6½SAÕ b0] ¾ kdý#%Ù,ËÙ½pe³/ah¸û4Ι¥@LÈò#ÊŽ[¶°ácÚGæp'ÌQZ¶;�ÚÚ`¥r_Mvƒc—}T†ÊY-(�¸Œ[g®ÄA=@Æ:K¹gv šém‘©p‰Î­qwþ¥�e2¥Ï?à(lŽ‚#ÈßLm0U)#0òô0†SÞÃIƒV4Œù“ò! ¶MœI7È9¹E•jco×äœ!£š4ƒj> ÌÔm»ƒf�“µp›ÞàÚ òàPŽb�Ì šÏC3uñ �ØÈÃ(Ûàn°ÀcËÄíÌ�—@ÅÆîòÊhHvsñxi1y�2ØIá) ¸²ÖF€Èô�(WT<†”{'ÄsO'±¢?ûœgÀ�’:SóÄ>ƒËˆŒzÏò¹r' ­6ã¾ûmfùAþˆÌ’Ý’p7ÍüÌÌRgsn3K öÈ̲õ °õ °õ °õ °õŒ²õŒ²õŒ²õŒ²µÇeˆ�J¼1ºTcîå´¡6:ÆÜE­.ƒ„åò­w+þúßõ¯ë'«ÍùÅúêít$ä®O�i1¸&§på‚ÁÜîÙ"ûñÍv»ÃÃV� ùŸ¨E¹+�[ÖNA° 0¢„h·Z?9¿^¿^]¬7««éLŤŒì=@’”|ÈñAHí6¬E4F°¤å> stream xÚ�ZKsÛ8¾çWèHUYàsö”�doÍÎÌî¸jkË“$Á*©á#Ž÷×o¿@‘2�øbáÑ@÷×_ƒŽV‡U´úðæïwo~ø9ÉVeXf*[Ý=¬ò8Lt²ÊÓ",2µºÛ¯îƒ8Táz“çEp÷ñýz£µÞÝþúÁ—~º»ýí×·ÿ^:øïúÓÝ?~øY¥““8ó–£¹4J¼‰dýÕF—Y˜gÙj£r¡YèíCoÛõF¥eÐ5' ¥, ºu g(�mÿŒt²s¦b!W¯¡õËZå�ízw0½kj¿�î< nYª�AÚ¶vÏÕ¾‘ßö‰xl]ïê·þ©í#wö­©»Š'¦žsÛZsâÊ ×êlõpƒû[mâ$,“~ã°LSÞÕãÑíPîˆ{€å°Ü Õž«[ÞW†Ž�b´|¨p+—C�aâ¬Oõ£é>Û ï(¨®@§aœ•^¸2õa0YÊÔ¢@å>£F¶zúæÂ‘ U”ù¹Þ®uTöë¢J…ºAÆíè¾hMSÁiµ\;ØÚÂeµ¦oÚ+�–u€K+MÕüx?šóùiióq¨“Âëq6--¬UF Óª`ÝI¢‚;X :ò µÝPõ,ä:në�—hk;_%eQ²÷ÃM×5t›`¡=˜Ûó¨,£X{¥öpÛª·ns|v�I¹ÊÂ2×…8§‚íê0‹eÓņó0W<ë"%¶Ê”éŠÏMÑaê<µ.áT‹0ËõÅåÕÎW¥ÁOÍ NÍuhùÜéÑÁ P©©7•«-Wön‡Þ’¶[Ð*‚Û‚²„à³ü˜š�ÖIpjºž{vÍéDkB™œÅ ƒ?qz/þšÝÎv—G dª=Ü“é Wz¾’½!WåNn'�(Ö<È 5OpÙì|©" è`W£Ï«0Žô¸Í­LpÜ;ËXÕ’C@nÕ¶hPŸîë�$ÛÙv®·àšŽœ*S93¬›Þl+YñƒmO¦Þ¼¯•ëŽÓ™7/£”\àâÝ F�„Mt¦è _;ØÐ/Ì%h¦=,¹)õ(‡Nµ0YêK(Á­„»ÝÒ\Øþè]|;ÈUä…Ü�˜áŽOKG„5�/⮟¹áÑU–bŠBǯãQdEdÄo¬T¦=Ê@ÙÕüÛ¹ÿYº8�ÐöŽ�J3Û…: Á¨ƫŊÙY§)Ú&,Ú#˜¿x¡¤`œûËã …L·Çpˆ-l¬Þ“ÒP3üóÐ"ÔɘÊílÝYK]·è¥qìÈ? ûhë�å¶ËY@J– LN„ç ðÌÄqÅz¬d°DŒdy@ÀK㮣ù~OâèŽ8El<Ê °à|®nh{HAæ–Û=©„3Ù:4î`˜ãó€Ú ܸÙE4¬¹šŽÊt};ìú}žV$Í¡ 'R9ô|>hí�¦_ÚB7x¢€^Ø™%bí­¨xqG®<´Âc|2‡^Qð俼ÿíð,¼Å]ÆŠA~D«Mo”Z KàP:£°”ñðr‰† p�ÍDê†ï’- Ú0nqÛÌ/P¡E�I!„Åù+@f F*›�2œ~†xPwÝBôÎØïÈ(¶nïÚu f…XÛ¥à�r@žì?ŽT,Btà‰jÉÞ�DÀ•U1·°SÆÇfžy‘ß$q‰•4°Üëí6 îUþ Í?‰Ù…A¦Ç 5ú"ÈÍž{Úf8+ieTXØœJ‘uäSjÇ »ì� 5#'|ý°$¯DVÇŠqƒàd–ÎízÄ�ÀÀ˰ˆÊ+èCÿbºàNöå(ý~zHª,—­,ÉCÈe^ÉÒ‘lŸ<ßÀi[ „å²uxì\î•Àø¥‹#O»ï$\;`ˆjJi4 øzžÚ1¼‘Ò2›ýjNçJXÐ5¢ "8 W‡„Ë&@ãMÏi”M+�®ô‰,"?øëÖ´ì3œ¤€ÔCãÇñ�ß�ŸÃž:. ƒß�!ž¥~jr5öW?į!‹Þy-¾¨0±„)„Š× µS™fÛõ(‰TÁ_ƒ£ €žÎ�ÄikFqd‹Ã¦)ÕÓœR2cW³|DW™M¢'[ÂõÆ-q½‚)mrI¹`’=‡.+ºCÄç@~Ôd)X̯Cƒ’tˆ©˜M/(à$v€ÈÑí÷¨;JuO!°ÑwÛÊždP'B—˜ýFZÙC¡á’T’°=c4””[þŒÒhÁ§tAyDî\ÂŒ"G|í4FøJ™XÚ'‰*¤…×ø(YR(¥&wIL&>6#Ý“èÜÞL¸e£+ã+b®àf(Õƒ`?˜'ucˆBd¢ŽÊfçÊ?f`ÉùWb¤Â'Ãñò—Ø�ñwm7Hâ(Í@ƒÜß0`Ö�”‘ôiâXµ_�í\_=ùüÇó5=µSâmH-è¡ë^eŸ¾O0Þ½È˯HÆ�Ïîg&¡¢0*‹W�|€YHaEޝoËùPÇN%<™™ícã„üvÜ2fRÈã¦$Ûܰ³qÀ®Ö�løw×T•áslÀìÝ—Ë[ ônWíÙHÓ2Ì®Ø<Ï)õ7rJäf*�(Jª<n¦¢MTÀBN…Ï ¡‡¨ Z†g%Ô:¦…Ðá3Ã|4mòÛ'nZ ƒªÐ“øöÍû�ðãåæ4Õ�oT¬otœˆóê<,ôUŸ²—ÒQ„i1çêFÏ(Ç�<*L¸˜¹ ¸�òœÖÚ ‡XR#V%ÚþT ½cq˜gñõAŸcê3¾:$—.¡>/ØÇ&Îà6TúÜB0ô#A�#$_.A*‘§VÐ𖳈fè¹þ;½´�ƒØ½ÒŸˆ¦Ç—³gL‡¹yžÁ¦|œÐQe0ìèH¡ak8#ŒRцҹóW€#H›�>wô «�ÃÒy%bóX�óJâgçµ�ü#x‹ãÀ艈*Α/³ÄÁ;Nñëª!* -“sÁ{¥è\0›ž›ø‰ªci‚˜!†òÍq•¦Bk&m8 Õ¸Uª>,8 Gš§ßw¾$åNìqVÄàˆ'ŠØà“ß“ëð2³–’ŒŸ!DÕ¾„›âò‡ß¹‘™=I¡SMƧ â·ý³= !�BÈÛž¿Wd Ø°epÒü�m³ÜžŽúæ6R²],áíbxÀÉ®Ÿ Ƈ8ÚzSÓ»@¼³Ý™TƼ |ñÞ¹­«\?æKò{±šÍRäfSJ´Ì˜¨ræ2ر7½ÁÓLÙª° ½E'›‰baèøQeü5kÚ7þУõÉUÊìf7š?)ÔŒ‹p]ØÂf×÷,|Kf0˜¼Ñ™ÂÙw¡÷woþzƒ”/ZÅþ“Æ�lzwzsÿ)Zí¡ô 5p…G’<­â XHŽ�ˆÕê�7ÿâÏ[À.SP2çX -³•Â7ïRÏÞÐÓh•ƒ\ócEœ‚’*,b=y°V¹àÀ˜ì¥J| ~í_ƒ0 ¨˜5â—5.äü ‹²5ÿŽšƒ¦’IZv,~’‚Œî¡ieÎû8ùÄ£8ç…�•�!˜4ŒoîtnZHçºöœ\â÷……�æY¨â(ˆ@ŠU[ÒË¢Òž‡vT­Æ½õ~§Ï¶´mM Qµ„°ð\Iý0Òp²%púäúë½ }¶Uµi-~�³ c›Ååìq÷ê’7% ŸXkHÕìEê;—Œ‚è'þ%/£ÜÐ#nœcl¢ÀƒO°\íš¡ÝIóeF?­Ýaÿâú®ø•%¬{<'š_‹M”ÿÃÊú{‹ðX;þX‰-À Bý½ÕÔüÝæ;«ÝÉs9~$ÅÍ 'Ü!pÂSêŸ.SêB“ òÀÏ(N(ôÉî=ôZã¤�æ2UÃxÛ9~jN ²ž¸„Ow¸@%uHo›^¤(`à·ßË5Ðâx pL¶û?ÈÊÍ•˜ðÝpɉ4¿¦¡JôÌ€‡úsÝà\�5Û«œ0Á„ö#W?;JÌÒtüÖ�£è[üJ‡–ÓÚ¥ëÊ Ëùm©×Þ–ØÆ”¥a�?�¡UÑ^îPÌ|‹”�£%¨5ôÍÉлw…úÊ$_œÌñ~óO<.{Š„Ã¦x‚ ®ž9HG“¹Ãq„^úaèv¦÷‹Ãåœ^ë1úõ“¨ ¦fîá〮BzÀè= IÇ'®ð7á%æþøÛáØg©¹‡%² 0¥°ðH†��i@í­Ì{6-ëP|{H€VŠ�'òayð‹$L"½ÈgûÖ wÆGÎA«¤Ä¯“�OÇ$5Ôþ¥Éñ¥Îïß(¹*:>-øWI|¸jzQgs‚î­œó‘«òÀ;²öìêÁÿ2³îÞßâŒã�E¹Û‰&µ�ÌÝÆQ¡Ò0z!´ÁΘêà¿_¶žéL\ßc^é€É+� !弈9X/Œ[÷vkèû^1B 2+KçoßÉè»ØÃ¡IhZwpõeê2‚Íž-NWÂpõÃ’4õ} 2ý�/ V8´ø3ˆÑéS}´Õ™›<¦!+ªä"-Ä ¼bJ¢@ŠÐá¾çϯ̰ H$¾Ü')~ÌH ù‰a‚œ—œ±ÚZƒŸõøÃ))cú1rtÒÈj`ŠŠƒ¯´yh›‹m ÙÑ穽\2ù…� …;pì]s&¤hÖ$è9g¼Ð \ËMf¿§PMö%B “f)Ò±@„üÔì²X"Æ„³YKlÅFs>{"ø„ |VÄÓr›Ü7Mú MG™î;ä¦ÛzÑCÙð-ŸóŠ$ó™Mq…2…7Uúçn¡‡F PŽü€ä%žbÒ„À¶^ˆ7mrú2�U÷ƒ½HЯWÃÛ3>p<\õIæ ¥ñ—NÃV(�/å;ù4C¹þ…Œåÿ.œ5Ÿ endstream endobj 414 0 obj << /Length 3562 /Filter /FlateDecode >> stream xÚ¥]sܶñ]¿â&/¦f$š H‚tÚÎ$‘í¨Ó&i¬N:£h:ÐuǘG^ø[Óö¿w¿À#)J–ÇGK`»Ø]ì..XmWÁêíÉ·W'/ß„ñ*ó³$LVWw+_ÅjeâÔO“puµY]{ÑéÍÕ__¾‰’ÑÀ0Iü0� ùîûo~ºzýóé¹ÖÚSþé¹1©wùÃÕϧaêýxñÏï®.üÑœB{Fø<Œ•¯#x€iÆúMÙíê~»;=�ÂÌëv94tà½Í›½­Î_WÛ²håã¦XwE]ÙæžÇÔ/Úèñ¢åÀ†,çøë5œ¬& ü4Ón\Ñ2ÎÛSåõEÙqÏvõ�[¼0XÄEQm$Ë� ¸¢T{g�#¯è�r›øiªWçJùY3�&ïlQ±Ð^Yt]™s»¾ãwÑÉÇö¾BÁvö#÷mµ‘]Ó¯»¾É}\Qä]V ?ئ+Ö¸þÒ6°––DË^ÂVåíÚ¯ñ¹“‘ÅþPæÍ×ÐËÔÁHøÈ]0e+oÛœ ¶,ïYGÖuÕ-òƒ=dPëÈû€ÃêfÃЃ-šöŒÛvy“só—ïÕÝŽ»{{OÐî,bø9£´UUwV6£õi�*ò³(š®ò¢Ç Æx]-ï�@b[i=É…W‘7ü�€wßæ¼ä4…% &ÛÈt{[ΈØÍæ× Lhÿ°_TüæýÂÍšŽÿ5ÐÑGœQT뺼Ê[‹J-1%roŠœedÏtM F'š6áÛ¼ÊÙ§DvÀÈ®ñò®#Žð{oAE½ÓoDÛwü¹´¤7ï[FÓÖ{¡Ëõq!Má4 {ƒOÉãè±j%²idp¸ñ#v`5¾x¬hdÓZ�Ÿ„Oý¥x?ÒÙ™ý#™Ô×½bâ/ßè1¾Pùa68À'ÑÅÚ�ÒlâNTìY~ššTé·|Ý1ä·¾•VY¼UÆÐ(¬v›Â¢GÑ1Kž FHǼh7þ�Ž7»Í-˜­#[%~ftŠ*j@Ý“h¥ýDÉt/hrê#•Ñ(`C1…ng‰–áMƒí‚}ËBƃŽfò¢•iÇv�šßN°G&®^_úÜú¦eÄ ±ùF8¬X)œ¬ÁLmÛæl06ƒ%ôªd¹µež-A4¬d8>â€ïboˉ� p@èÄ¥"–ámÝ7k!BVzD�Y4³p€ŽÄ:±¹‰ÓI‡g_nfG¡ñ&gžWÜug–vrf»䜉ÛÎ:¯£=�ÈCq•:ôã´Æ×§°ø0ÆÍZö¬à8ÓP=éZ? �»¼:…s/ÿˆlg™÷ºZŸÆÊ«ñ±áýÈ Ò¬ .`çr…ÆôI9®AéÌ“‰?Ö®Új8ƒÑ½°.€Jþ¼®÷UîØ#°¨=žÙM±‡í(åÃF\_YÚcDñ�Ùs•¾‚ãa²ç(=8ùRïm_lrð¼y»À‰�85±Åž�\:YÌ Ü1¸ZÔöB"7€Òña�ä¼r„šµ-:âFt(ù‡îB™ÌO¡9öÉ’¨a¯!{ŒëøŒmW§7è§MFZ@¤×=Ä4,~&/§G+–I,… [f˜„>D ²ŒSï§ßæi™¦!èö Ó!ü™rä™ÀÄ3ã……¶åמs§è)ØWª9Ü¡‹Ê—´˜–ã¦d3oÅù¼ë$^´ž*Ðor Õ6h\gÍ’RÞ串ýH#;j?G"Ê�F:)°D¶#H÷<$ÝÈ*rjÔnž3=CÀ�öô´ôl†gH{£AŠsqG‰çâb/¹³(ô§,&Î|•%_d1Ÿ‹âÇ ¤E�N†ãÆñ§Çü…3þ¹ªÁä?…³Úø:�b*Å'*„à˜*‰ÚÛ‘qä‡ðmO(~‘Ѐ)-ñË©ò¤o¥Â,åS­3”8^QÉB(þëïã†ü�‚¿ï sÙ„L—ˤGÃBI– úëb-}N“—²�"8*=æ,Øã�[¨°ªxLj¥¦oWÎRÞ»·È¸n(8€Í · –þ£¨û–’ÈH.|†%-DOæ·$“|„Ê^.±[ëâ®kÊχŠávŸÐ@>o†Š�¯¤æóæ4‹F%;óDëëi6Nn£ii“!³êx4ì=h«eÀºo;Ò©¯l9ŒÄmÃ7« L¸µ$PúVñ»s¤e�¦èu‘ÒÄBb’òô…눇5¹kS‘#мK)Ü}N^¨%RŽf’™„ÃÇ›1Ö *„w.ɳe+)&U0)»œdœ¤…OÉ#Ÿ\)ÂøŽ!¸@|Ó}¤Ô\gÜ’š% Òm¦q26|Âå[nìsë,dŒ|–D"èÐ7TJ¡öñ£+Õ=jÜ\À„¤Ÿ/EGUé#w\e„ƒ€ ~4B.š¨Ì]Hí×Ükßg\×µûš‡¾™hÏ&õÞdfÊÆk¹ _ÚÒ\ÛÕÍ¢Ecb·p§­ýÔ ·P¯^- ÓHÔ±(ðGâéP5øzéËõó1ü÷ îû�g i0Öší:uoû¦©{U.§Œ¼mc÷{ëÔz¸Öu…“ݱô-‰îÌÀH[>P\Á#„c1LÔ;ƒr ¹¿„UP…R~îÒ®á¼[LäŠÂX´®ºn{ðR¶Ë‡ò|µ)‡ëËÛ‘wÞÙˆx<K)ÎTä 'ˆãØæ�“”Üš‘W³ÓºiÝÿk)\ÚÁn)ÔÞ‹ˆÝmä™sXëÁ“ (Fµ=ºž¥l�+PtþÓóí5—v¡¯üðɼJc?ÒúKâ«ÏFñt|•‚aá,4ò™ Š· zVôÜâbbï?œ„VÎÿOìH�ðEÊWq<3Å ÅÌOÒÁ’ÞQ$g'‰#¶s¤—1½cr$»Dÿtc™áÎé¹Ï£¤ ¢ö–Úí„Zå¨�8(¯±hAÁ8äV[Ê­ZL�ÛxÞ,,*5~îæ ÏRïÕÂÚ0=Þãt#p¾PQ{»@Bã�ÒOðŽ0CòÂÉ^AÏj”ÚÜ/áàúÄ>š`ØÇÍ#¨ûÅYwQIâ'td°r“RÇÁL©œFnêújC.�oLÉ©a3oö¸Ÿî‰OŸ÷S`eÙêÈÅáôNyBÎð}mè§Jþ÷õ:ž Kü@ÿ(¡HbÐô¢”ÿÐmÛ-ˆ51°±ƒî@¸CÞíKp5Š÷ -­ ‚%ÿîU1~p¿éèž�ùE H™Z^Ä(´Úº-àè¾çq×*ºY „& X y$5½9û„T`=@Eö TûZ¹Ç¾ä×ZŽAhâ p‚Ó�'"k´ü|-e·Ÿ…ðB7QªÇtØâ?÷8R1â§�"yõ¢óÕt¤®ÿñÓ ø endstream endobj 435 0 obj << /Length 2873 /Filter /FlateDecode >> stream xÚÍ\Ko9¾ûWôz/ÒbTáûdØE’Ù fØ�dshKmYˆNKÇÿ~‹Å–Ôr,ushc|0›¢Ø_³>V«È–Y1-XñÓÙ?/Î^½W¦ðà�0ÅÅUa9(© «8#Š‹IñiÀAÂpd­\¼û0ü|ñó«÷B·îQœƒåH½uèqÆš'l¯ÅHzÖ˜b$,Þ)cçËõ¦*'Ñ4l°ºŠ×M].×ór3[N›†ëÙ:Ôø ž ù`z=v°‰ß•Cáw¡(Cë}sÇ*^ß�ÔUõv6nú¨òÛ¯¿ÄÊÿ˜fw׳q¸ý:6}½ Ýà˼Á»Žðc5^-ªul¹ßßN+¼›ÿD.F\�W ¯¼ÖQ@Y…·H‰’ª^‡qH5˜ãñ�«/ñc¹‰}Êes½\# ã¦óï„R¯g«æk¢ ¯×«(>õjhÂæñ¦wüPW7uµ®–á–M5‰�³e¼yy}0sï.ξž…Ye/Œ‡"YÆ€›b¼8ûô™üêç‚�ô®¸£Ž üó Œ*æÅdzÿ´T´TÖVTã TË8)ªnÈxï#Ù(§—ƒ%•*k*gTÆo‘!®Ì [Vã¯3„MF8!­/"JÐhž$íßÐ&•œ£@Ò ÞGNI±\R9�_œwKê8És$ME8.©· ˜DDÌFAGÁù0šQG3jÑÖC¹¤–5Õç»vG=-Í:µ`O®ÎúŽ2%B7ç‚É;OÄQ7¬âïCzËàÒ2ˆKEè&Î*0Lï™3†’Á5î¬cÕª‡v1X¡mdHnúH¬”ÄʸÅVÕ›!#@2‘ÃP*B7C86ýCuËCÌ©,[^¤"†&�1ô–X™+KªO©¾îÍ�à¤Ía(¡›!­ÁX³gmæ/<°‚–XS¹á^‡ï93A£´\;óÔ¦4éwbYµÊ1•ס“">­!òT@AÏuÛx±Nî”i³´+¡›;e@pÑÒ.EvƃTX.¨¼l±Qïyp‘3òã>ÞG~ë·TΩ¥¤zÝÍ�”à™Ëá'¡›‰a ²üL[lD®&GøÍ÷U‹ÑÍAßNN„¥d'©ÝË:†ÄÂÉï–ut É›”äYÆT¿¦zÝOÿ¢RësäMEèÖnÁq÷ÒWw¦As•Ã\*B7sÌ�Ôê V÷¼�Qc2ÇrbãT€Nf´ÇŒÕù²ªkg@»,‚RºrØ]迪kk�‹œt$¡›;¶;^Ä¢®�£s’Žd„ô0Pøé¿¨ë `È@E ,p¥¨®›zÕÍ�vÀ}NP˜ŒÐ¹ÀkÃ�IþØÿö±ʹèjú,ðZ9°"'�HFèÖ͵ì9xÕÄ}×TÎZjï>vêÁŸô LN@˜ŒÐÍŸÀ™x^þ&G˜‹.mÝ›?áÁúœ$#¡›?)ÀH÷Á@f˜$P ©²¸IDèæFHàV>M ”½A¤9grÒ“d„n†¸ËüË”Çñf™©ÝÜ1…ÈêEDJÊsð9Æ— ÐÉŽò ¬ûÓö>” lN蘌ÐM‰Ó y{¿šd‹ÉÖηLÛ›ŸÂ%.…ª §-µ‰*´i}XD/÷™¬7piDtî2<ÊFxFK®’@æ}þè1惓ϑÐX÷ň;0®‰wþ½Ú„7®[§s|w:‡ÍñªãyUÖtÂȃRÓÁ*ºú= 96Å! UŒ¸±=󹏯ûEp–«º®Ö7¹ZNèL8´‡SÛºš”HÄ$œÁÆV:ݸZýöë/?Ħr[nêxâ:¹‡Ñ„¦Ë Â}춉tJ»â}óøywä =hZ— „—ŒÅs\Ú—õñCà²9–½ZÍçQ%ÖÝç� ×iãrÒàd„y Jƒ·)a@‹&�yƒæ‚³}A¶óŽìèC¨›Á7²ÙÙì¼µ‰Òä4?Æ%³ !â~憺Å=»ª¿Žké+²ÆWÑ4ïèYwô¬»hÀFAo2wCǽÜñíÊ<ŽˆÝW„Po­>4lA«��a¯6¡ #N%PÉc>©ª_±úßàÐ3î9Ì�V»÷"~§H<8$O®+Fî”úa}EõÃ5ÿÁH�æa¶p-QMb‰ÅbÓyëïÝŠ†*+xN™Œp\Ñp}áÐÓf¯g2.u†ø‹ŽÞ þµÛ50Z:·-uÿ™Ò�ª-³ß³Œ¶Lƒ}ÇËëƒOe¼,ãezjÖaÕ#³&H]-­úáÃy 4I%Nv´Av4ˆ¿D÷mm{Ì3Ä.êºg´|:zé! «Š—ÉÁ�Çñ²yØÅ¡gÜ‚ÐÃÍŸ�w;Mî¡RZ�³“ŒÐ©RÌ‚öb¯R‚Xp¤.X~£rÓ_i$ËýŸ¯4ýŒ\zô.'KOF8ú �B ¢C»³SrIÓó  •÷Ñ#÷#I'r6r’Ž‹ÈÊ£0‡‘áöm·7»Ümöů¦:Jêp)ûÖJ”æT¾níÔLbFðcôG¶(( ¬ÅX–§*‹5 uNRžŒp‚I AzàÞhËUK[j*½µÅpYÙa2 …ÇBzŠÝÛ2¶¥‹ëúPÆ0¤è©°‚~ªøD÷=¶mÕ&%tC”7¤z¯¢y–îçÆ|.ËøzhŒA7jüŽÍ½œõF%è� ¯¯ælº$#ô�T3ÔÝÒ:±Ü½wóTþÔj¿ ‰q/� 1–e9ÉH2BkQÚÆÂu“ÈWÓ¦7ï2“e+¸=ˆ¾3ÕGžzÊ …&s6_’z(Žäà¬yh"Ê´ÔG<�úp:ëE­d„²£)ΖæõvŸ©�³6ûÙ˜Œö‘”a\n³$MDèa((±WöÀRƤÃ3Òáàêíö£'¼'#¸ÙšEp—­`Cñ&U¯[»sËÃ˾Qc8YKF* ª$RdQbØ&tâ+I÷$W­ÍŠ*!W@‰_V¦ð¨7T'^šúÎ'ú¶¿àÄ’'–b± m{[Žð˜ÑÚœ %¡Ûr„WÀ¸û.„{ûq1›Ö¬�Œ.üR&'èLFè!£S u+E‰;x–Çm2ÙD‚ÇüÂnjM\ÜS¹Œ$õö /'ãHFèôÂj`Îxͺµò‡ ’ùæ¦Ü×ìŽÑ«íÍ.]‹Láå¯Ý‡§h2§r·#æ{ñ¤ùâLís,žböRg#Àf½å–ŒÐC�qpF¨‡&+ä^©ù=¤ÓdNÌ’ ÐC¶°S©ý™jµ-ÓLUI¼æÄ±Éݦª ýÒêÙLõÔ ¡ÌT�#>�©J…ç$pÉ=ÔYZò ,U(ðY¯À%#t§BXúi×ÃÔŠïSŠ]xµN •¸Æ¡d¹¦T„î�NÁHÆ‘·�Nµ“‡ûÞò2MÇ�ò¦"ô�—9úÙÕ3îìvüþ£Ãñç“{Zæd^ÉÝö½§Ÿb=Ñþ.wXÖ‹eÉÝ�;O?§Êßßý㱞ë~â V­Ãr˜d„šãý ëI÷y9Ž7+SKè!g8†µþvy›ÿúÀ >àt`Æ FZ´áGGk t¯ÖÆÿ �nÑÊ‚k ôƒ�4k*£I¨b„–Á›¹ûX…—†´L*z g_º -è¿P<öNVK¢ÿ§¯Ò endstream endobj 353 0 obj << /Type /ObjStm /N 100 /First 890 /Length 2540 /Filter /FlateDecode >> stream xÚÅZÛnG}çWôcüàž¾Tß!X'^'vÃò»è�–F2™#�#ÄÞ¯ßs†C]l‰lK°Üs©î®©ë©jzo•QÞ;e%+o¬r™£(ñ‚1ª�pï‚J>�Ψœ8fe�à 1¸HVYkóÌâ��|•u†$ �OðÊ•ˆ‹¢,'ø€Ù>ã‰Ø¬ø FbÁÎÞ+g8=$嬄™Y9—±N(ʉq4ʼ÷lÇ‚WØ$ø (Ê•äp”·–O°�ã7ÆD¶ù„«û8ó±ð)6MäÀàŽ7E05%¦€8E%ÎóU‚h(ƒT”KV!¬¹—S’-ØHFI àk¸²WÁñ“!ÍÀÿ|‚¿ ä)¢%z¤ÀrÂEá+LJœ� õ�…ÁRÈì‹ * `�bA 9„IlU4Æ+KÑ9®cTá'áóqšäøÄ©˜£Ì’¡þ tn…4Q%—ù$©$ŽO²J!òIQ)�g�„ÁDƒ›„Jò«bg‡‡³æí§ËV5/–Ë®Ÿ5GWïúáþ‹å³æ§nuÚ®~7pO{ÜüÚüÖüŒxëñ¬yÓžôêwÉEú‰‹z Æj©yqx8ìмÔ5ÿzóÿ~xß÷—냦¡éþêùÉûö éú´mžM&.›4|͆¤-C³ËÚ!ÞÙ˜uty—¼>Ì—ç«ör:ÕIñ:#¦YI:1-ÑÉņ¢‘謁í|Ñô]w±¾ÍÖK|'b‘QoTóïÿüѶ,ãªÎˆ�Ë«‹‹ã‡‰Ó@Œ¤  "_q6:ƒõ*bo²FjÞCìÌŠž•µGVª"¶_RIšŠ.>Ô-0—:âhµ�:o«æçî¢[]ÎOZå7s^Ïû¾]-•ÛÜþýcÿËQ?ï[ÚÌšWݲ à•¢ß†îrrßxCDeíö ’·—{•ˆÁÊxC8"×o ñÛ€ Ù.= ®°] ›ºí¢ »�Œåí–ŒÀ 6Å|kózÕ�µ°n|àËWªyÛ~ìÕñ]‡y=?og�Ȳo—ýbX˜n±î®V'ízãÂÌç?uÕàHa×!ìf�!8Èëù K(—̆|pÅ56'Ø#KÄz›1�ãF$z›ÑŽãHeÃ8Æq׉ã:q\'�óÓ8/�óÒ8/�óÒHï·ë»ñùÈGÚÞ�|¤Í>ÇÓäPÀäNÂ0æP¢�¨ Š’ º AúËPóëY×õØ®Õù)é¡À+`zÑc„¢�7ºµDñZ‚¯Om§»Õù³Gsâ‚Õ‘;o9)F»à¾ž“!A�œ<› à c‹Ä ƒs° †xNÍ a\3J�ziŸ†./¸¾þ´ìçŸ !Ä’4ÁzÀ!OZ›ŠYB�ÉBK…KÃw |‚f‹p,T²0ì~¿ W Àä=�òr¸ôÀ¥�ûL×MçD¬d­lùpBéTóá§ -Åb}s‚¼Ì{`G)yw9(æ`þ®»ê§¬liª0(äÌ~<(n9¬áè´ûsyÑÍOŸh€S࿞5Ž›ºŒ(aÖå;šoÔÎÀ` ¥ÓPQ±Øõfô@�}ËpdœdQïûFPtD¶;w0òµjúzcN@“¾i!J) ÆeG©=¾�}"®B‚$žfG‰b(úïëîû�ì´=c÷Š­#§‘[&t0GaXrŽÅô Í¡ p.h±á[iî3|£)¨²ƒf¡Q'˜¬ Â_ )PøKÉõÎNP�ÜìüÍýs[†ÞK@äIZ²l8"Ú„{ {;j[~>kÇdwÓ(`3eàƒÝ˜;´v �… ˆPEð¥ŠRM˜é†b¨@ñÀ(,Æ€MÀÒ–½�™îÝ´¬H+ÃéåÈ OF+X�d¨§ s-"h°…g«0D’Âu8PÕNöbÈ0eÖçy3E0 Cn3CŸÅQ®9S³ö5BÔˆ °Ú¤=Ïò‘yÛa(sÞ[”Å —y‘GØ[NRF™wr2ZKß.¦¯È€<Ê-n`/<®®äæüjqÚ^,–ízʪÕC@CÃ_Ç<ãö®hW¾Gu<àBÑìÁ[Tò†ÇFìPíféºô n›ÎœÕ…Äá§&›£1ž¡3­³ï-÷ûÖ�cMiÌIÁÝuÀðh¿â¨sïé¢lQEÍéâgÄ›3À®$Hq@�!Ô{„ú\ä/!¿ç(ò~âl†nz1 çJR#CÙXEÌŸ)¤Rj‰‘—ü>ýí9½Ÿø[žˆ> ‡+ñôÃg¥w!ô ¸~,„öá íý×@h¢ª»Züu½›òü�’ä Ø4KÇêªØ¬P“êèí¾�¦oêl4±mêìúÑÄ®¦mv<“­)ÎïÒnÊè„Ð\¬¤uCv¨¢n.÷yï=´±xDw©£e)_÷ié”?•«¢eÕ/¶Ž–UªYDÕשׂ£õQ'©ü6vr�*"6ds-±r;µýà‚W endstream endobj 498 0 obj << /Length 2313 /Filter /FlateDecode >> stream xÚí[[“Û¶~ß_ÁI_¨ï1î—LÛ™6k;›‡$uÔ¾¸y W\-§ºØåõþûP¥ÕJ„¹n2“>IàΕç˦ËÞ\ü}|ñòµÐ™o„ÉÆ·g¸æ™ÕœÙx’½ËÍè×ñ/_+Ói(ŒáÂP“ï¾ÿÛÏãWoG—RÊœÃèÒZ—_ÿ8~;.ÿéêŸß�¯ú1À\°vìÍõÕøâãÇ*Ë8ÏA[‘Yမìf~ñîW–MðÝé]vO-çøó ŒÊfÙ/ÿØC�8G™ŒÀº,1>³à-ãÄd…F&YÉÀyéýóè’s�OG—Žå%’ëó>Ò<ÿkKe˜L=mgõöÍEöŽzÜvzÌ÷`Dv.‰`ÈÉø§¸ÇqÆ^b_*Ä þ)’$ÂAI½åŸóD¥2�J/óK‘TŸSùfû\æ°©Q½¨g¸äƒ¨O…èA=çøl§(ò§ØçW‚Z Õ�Y Ø•q‚YÆ�q!%0Å÷ã#¸&b—ToZÅh] hD�Î…ªè^^¾¶¦/5¸�oþøÉ‚M…Ë,^¾Ý»+âe/Ó=fL\! ìÖÌF ÁQqBÁ›Éó‡øº!úŠê ªOûFßñ�(ù�ÔnM�–To6Õ×|+í �H…8o>ÆIœ�=ô“RìŒË&PÉzQi9JL¢2¢•Vçb§÷¨EŸI}êà$¢{ÐOº‡¨rø…\7¨\D6%¸ÃÁ17ˆ5©=\‚Q`”ÛóŸu' ‚´Ýsú^ϰœRYRôC©.³ðò§ÈÁ+bgEå‚ÊiÐ&“ €÷·_vë‘åšý¨æ€˜žQ�ѤRƒ„• ÑC�µî䡵 ¹Óæà¬úЧ8ëÑ— у>¥ÁrÿLvZnÊD;•Ð&Cô°S‰)�V_ÉNQi®ÈhªNÐ3¥ú*~á’­U�@|âk»ýöÔùÝöÿöäþ0¹%"ôÐhaÀúç0X®@¹aÑw*ÄùDÃp Rk­R�¹Ôíô‚¾­û-s0”òjì1çÓ(Xål]¶Ê¸ˆÊH w¬m= V:›ÍËE˜lkQï;FÓ2Ñn˜hóöE`6´(BwGËÖqaFÆßz:à­¯û×È+œX5©š‘äÄ «ã˜x�c†ëæÃºyÂ'¢ê9Óñ‰"œ�)W¨ d¡á]D¨„?æ eÁèq«�ñy¤i*ñöuЋ­ŸÙAÙÐÁšP¯Ú—­Pý>0eYÿg{ôlÛßWÍ]|]v¨rûf3û½±�¸È`-AAg+xêŸWÿª‹v7 endstream endobj 545 0 obj << /Length 3108 /Filter /FlateDecode >> stream xÚ�YK�ãF¾÷¯0r’�¶F¥Ò3ȘlÈb� ˜ö03µ\¶µÑÑät7‚ýïû‘¬’%�z&»‡n±(Šõ ‹üH›ã&Øüt÷ÝÃÝ›£d“ûy&›‡Ã&U~¤£Mg~–„›‡ýæ½–¿Ý¥iæýôË6̼·ÿ|·ýøð�7?†ñìËH)?UPËߤ$qØy0I¼Áû<ŽC’ÝYá]˜â{}�&Üî” cï×KQWãV+ïe»ÓiìuyŽ'c‰¾h‡º«®]YLÕv¢Dõ}†‘×›áR�U{”áÃ? 1œºK½w2[å�EÕʰ醑(Yqƌ𠥼C×7²~oÚ²•y{cU:]£[Ç÷ÓöUI_ýË6‹¼{0£Ä3Ïe}Ù“ ¶F›á³Kd3EKFÀ¹„yê�1=6e˜7ò"ŠZ^ÃDê™r`¿H‡8‡j�—U{À—³uƒ7Bžð®ë¡y3F7›#Îó¹®Êj/Zû¢°sMë¨>:*{Šíž ªµöάº†ê±6¢³£'låy?ÒIu½ ÌsÑœk2Èý�Ë¥áÌ!TäçQ¯Ð~¨2™ôC nÝtáDL9‡>öEÓ˜4 rl±íä°a —r‹-žìëA\2ÕóèÈOƒé‚üyøÏŠßªÜO“ÜÉ`�+zB¾2N͹^Ób»ù¤§!ç¸�Óê&sÒàÜwræ¦'û«¬ œ?™Š,LœAM»7=ü3‚pK›½°Z§ n1ÅÆÝ©<Äå olL~A–\ºsf.DcšpmëAägYì¶õ ÖôíÚæ_Å“áîW%~�e“šöÒ|Y oŽwøò’óq$¨\Ï­—½ã³.¹S)œQçpÊÈ×*þ?œò2GއÉÒ%‰Á.™‘KòëU—T©Ÿ¥ÓA¼/»ºö?®ÅöÀ×ñäN.N�ÞÉ™hÀ'@'✇˜;ËØY‘®i(ÞÝÓ­%¹–•.‹Ñì¬!…:]:ѱë+C; “Ù¥£‘Û!²×ÌСŸ©éÎõÛ˜7þ«a4ýÊNuì§iz{:q•NœÈ¾k(U¬jÊ¢éÌÄùÃÛø©±þ‚Ü¥ìzŠ÷|À£ `ü£¿Hb_§Ñä¾—Þ#�/gó·¯zsüê[¶¤c˜áø¢›cüæ ¾Zsz­|�é¹Ó[5^ ‰/èÏí,óé$Ä}(F¡L…\× ]²o }õ zSWÅ#ï™>yFN/G> }×8­V^²&Q³¬ÉcΉþd*dëL6þÏQ©sà(§N4ôäôÒó=æÃ"œçívH4ÏI„›“½9_S³›¥°’E] ÑõNš0ÇíbþØrl~Ä!7Â!×_¿碧­ç� %<Ï5Ã"G¯P­ó¿ÁÆ´\¦c)>ê<˜%âL´ÜW{,Ä´9WÀ‚ˆˆžIi–‹™$ˆÝ'^Å ïŠ5ˆÐã¥'l£3¸œùýb'ƒ'Éœ¯`±ÖW²_É&œÞwmmßÐV0Ì‹¨¨¬ålt‚Ã<›B¶{ízSìáÄÆ_[ôÛÖ%8B)Ñ .{XÆ·µ#…O6³h¯†j‘"œ&WaþÉ÷“äu{_/òÆw¿ßQè 6j“ aM1Ö–à”ÍÝû�Áf�wX²¯ólóÄ’ þr?J¢M½yw÷ë\‚1*…ÿYC0/5mø Q©�8AaäG™-ÞnwYæ•øŸ{¿1m˜î™~bº`úÈ´ašà+*…Õ(�w/ ^š{0[ ¼AÐ Ú© 9› JœdPÉ£ež™zX±Ã�X þ“F‰Ì”z™¡Ð¹îZe¨¬¦ó5óÌûZÇCçNisæ¬7� $ƒ®™63¾Ð-ÿÇÍTÆ�˜jüïù¿¡Sн÷˜ÕÇw)Þ]zTäÞGüGô|#r¢ ºU�8où›æª@ynø ŒAyùAˆ*…”M(Tie©BXñÒ–µ!ÐMƒSGÙþIRIAôÄÅÐùdZûÍkØQk¸Ûv+¹/ÜXÂ=š è��²Æãy¥6FôõãY+Ò~;ꌲum´Ÿ8ˆ§²5ä�cÐȯ39)¤0 cª¦ª Æè<í(k’ƒR˃z:U.ÒÒ;›€ª‘€“@Jäó0%a¸õ@:_;Ç‘dòÊ7éIÛ`\›ážX©äÌÙY¤©'Z)��ˆ$×uÕæ0Šˆ)°úêȶ·ü¡t…Ì`ÕäÅÚÞ&˜«"!¥‘ð9üù2Çîa御<-ñ~ÂÚâp!ZXDÙ‹ž{cNõ OEo)ò0zZ$$ÁA¢Æ!ÁŸõÌr�›Âö¢$ž�¼¡ŒY¡‚}ý~‘ì"&±»ãyMÛ4ªæ{c1ÞQ\õȹÒpÖ5ÈfH�FÒ#3±ëd¶³ÒÌa?Ü£>µvµ2„—D%ã%|°_C®m0PŸ1Ù�–¢d¨+"q†¾³_Û—âJá´åŸôRˆg·8�9ç“s Øàæ ýî…ñhMGt!�¡a˜¨¥äθäN�]{‘a?É20ñîuãTò´¥TO³¾Ê)†©ÔŠçûéÍàÞ¹’ôõÂp¥®£gWÆ‹Ê/ B’¾�“Ѳe§©)˜Ërh{D1z'”‡ô?Óæ gm>�êzMCÁïÄ¿V®óm@Âðl\LZƒ@â _¨…×Ã:©sÐ ñ ó®Yë"¶�IÝQ§r.÷21áe\ÃŽR´Ä|žpòùMÊØõLßS0ÚEð†é|A æ¼—&œM˜óÞ•Œ¹«)¸*$`Å}a}® ÕAêk•¡�ûI®æÙà^.ïòµÌ'ñ“•�ô“¸b/Ö¨5�…‡Â6ùt5aè§Iô¥¦Xàçá¬/$>‹3šî„5ëÜ…íq¹Ô~Ó  ýMý¨K[�+@Óåéäë MÔTÃí½²ehjB]ê¢wD߸Kµì´«<÷5™€R¥®­vý—[í§Þ ¬ù+7°²í'yÆî^$ÒðèP2ž99þ¹ï¨· Žq�þEÅ·m' '‰~Dré)´»{‰'Ïi¥Ô\±m¤ëÜz(˜¹5]5ô°ßö†9„¶ÖÔ¸`¸[5ú¶Þ$Æp.¨%Ö�+ùŒ]ªçrN²Gc£�O%‹öÞÖCwO ›OèS›Ð3½L虄’�LÔÕHä ¯ëb4vF›¦Û�¦ •ÑQê­F–‰¾’ ‹”½/ÎøG‚À{7AMùABnCÚ<Ûú~¨dÒ¤¼â@‚§ô \£ Ìmÿ„^5WÌr Dõ<; yjéÑ{ö÷ 7„ V6³ŒÍ¨º8nq�ðØf� ï�ô¬¯}gÎJØ"ýŸKO®A S¡ó"h±Î*a Rró¥ÜÑ´sÚ† (öÇ »Þ`Ћ>ÓZ;§—FÍ¿M9^3roãÒ„ô(L‚OO?§ÐF;Û}ˆØ¶&pé™· i9…Íå�UQÔ£ÓV�¯(I½AÈ(Ð5˜„3%Ý@ÉÝÑpf!jªØb O ®eñ~`kã}Ç[./ÍÔ_cóEÞ/­ÕÇÝœò‚õH˜ëØö{±�’Pð*fª¸•S³N@á ã åÈaÄÚlGÒbX"1’ÈÑU˜_d‰$cíb�ÆÓ©³ßô–Só½"Š®œüBSQ¿ËNÃ9�T‰G6¯üXèÌhóêóµ%ÅEfßKç©@b)Ž.%N¿ÚHù‹4ø¯÷™ìÏÇ*Íù‡šÏt‰T’ø w±¥O$ý¡åcž¦òS45Jô†%É¢eéóF’ŸôÓžŸ)í*0�‡B®N�sÍ=c_üü!ù}2cä“S…�KSX‘©(áŸ/ñiñk°å‡D»Ìû å`Ñ’ºS±ÕܰÍ]Õ#®À…Mß]Ø¥¹†b|˜ãú^äw`.}ÜGf\ÎðD²TÛŠÈ e_=Êš\1‡¢;Ò›5Þ¬ë>Òb(<ÄpW†ñqdkâhBö y×Ò?±biØà¶ŠÕ¼|ÁïŒ�`o¨F4’ Nè+_ù«]¢™SýŽ6aÀ endstream endobj 495 0 obj << /Type /ObjStm /N 100 /First 869 /Length 1458 /Filter /FlateDecode >> stream xÚ­XÛŽ7}ï¯ðcòâvÝ|‘VH\2)‘ËC’Õ>l–!ZÍ a�ÈßçTÏr™e%“ÝÕ§Ëå:eû¸ÕJ*I�’*N½£‘D‹i¢fh-1 ´5q´-Iih{ÿÒF’a“Vxà*l¸Êɸ¢•d 瘟J¦¶Tñ­ÖžZa´#5˜6€k”ºè¤ á4àš¤ÁÀ5M£:Îr`EÑjkè „8‘bü6Ðé¾—D̈ª:M&íìÓkKŒ$K°˜¨óªƒáYà,Çâ¸}h.]߃<Ý:€œ ÛˆVæšÈ–Ä=?Ým¯Ï×ût�`­Òü|ýnŸ>Lÿù?¯×>‹¿Öf·Ù¯7û78!º>ÍÏÖo¶ow×ë7‹JYL¿®_Ü\=ؾK>–qul"}\b´«\ø³À?I2$χ$SñB§ÔÀŒË¥Ï9·XK–ªA°`#f/ ‚‰òˆ†\8[©1p’‹RÜ%[ †Q›f"‚«æª=6ËÔ%VË�‚œT©™-Èv…žhQÇÐÂA²+Ú^ƒœ¸v–dÛ )†9qõ¬µEÁ[W�ƒª0 ²í º´ '¸¼äZ‚¤¸†öë[ iQ£!CD3E9�¶hdÛe4.ªA0ÔEç Û y!œ B_ôd[!0”ƒœ(Æˆî· ‰¤O¹ãÎCcX‹RR ½£Û-.áØç8 .¸·ÉèŒFAJG G·[�:#z&¿ÊßQàÿS©–#=s$aŽ„ V5³~.n¾Q›˜Ú]mb*ߢMæû›Í/–.’ÿo9´‡™Ü‰dÁOóùÛ?÷Ëó/7›¿§ùÁv÷b½[F¤ËùÉüóüðÂÝ”K�ñ“¿œûEhU(ÿQ•«ÿÕ�:àJÀÝ_Ò{žæÇÛçÛFxòr»Ýc¸5Ž×=Wß%6gІ‚%è …k_ŠO\ZÑøZ$ãûEB‚³²I"Å}‘"kþlXÂUNFòbýòfs³¿Ùn2N‹LŸFƒEàÿÏ>Jþ²Hþÿ˜ÇØÃõÀõ¥ÿ²‹`ý:qó9 \n{+½åzbç8‰%Ÿbý2öýmÆÿ¾�ØrObïÞ|þ„m6ü endstream endobj 557 0 obj << /Length 1479 /Filter /FlateDecode >> stream xÚ�WKsÛ8 ¾çWø(ÏĪ(êAÍžv›¤›=4�®{êöÀX´­©DyD*©ÿýäÈ©û8 IÄã”,v‹dñîê¯õÕ›»4_TqU¤Åb½]ˆ¤ŒE.e®bU¤‹u½ø©å—õ?oî²bv0-Š8Uˆ GÞþýç‡õíÇåJJ‰x¹*KÝ¿_\¦*z¸ùôv}ÿðÅ\%¬äe3y«Ià*-�)Iìí‰,6�±›#Ùpfl²X KUÑáõÞ ,È«HO„íé»ov{¢Ì·ÃrF™�×¾é­#¶ïÑÒçeZÂåš™æ¤~)¢#ðŠ$ê·|aÏ*6}�Wxuž¦Ñ½'~ã&˜ÑmQ‰'AžM{$sh1Œ–ˆ~ë��ñÑá™"®òœžyoÉË[½ñ×D’-2‹C¿tGÜ`|GÛ6_Q±i�t,¨†�Õ°èú�© ›H²¯ì5³6}whZS“q"‹+ä™…ï{kÀ¤Ö8 œœ%ÕÜ@¹}?¶5Ñä% Ì·�1ÌܘÁëÆÒb0ÚõV?¶,ŠŒïG[OZ˜ã÷Ó…„²±;^ŽvL^]²Ù7ÈÍDi[ÑpÉ‘èÑ鸨dt_Ý‚+•Œ@q&˨ñtêy,jY€´u­öAp N€,bú&˜…‡êfƒi¨'M½e3è~Yyʰ~¥-&#åÐ<3 zC§7¸·o,jIE„®Ë %1Ä¡0"¥y�êÇ�ôvØ}n<ÇO— mÛdmû�Þ¬zªG~&Ðh9ž Åõ„ÅeLBäQI"ÅŽ¾�ë“Û³,ƒ¬ò攋žß8φĜ2ô,­¹Ú°¸£¼’ÁÇøuã£3ÞMY?Iç›�=Œ¬g$ˆzÌx˜/ÈÖ”Á�K)E–‹8‹³%<&Í£»e•Eã‚Ái²Ì£þ¤µ´Úõºu,2û1¼ý{жqûխݵð…»ḛ̂âã+xLR¨±Æ…g º ‰‡ŒIÏ;3tÁ£À›')®9piÓB´uÓ9Zd�/!€E¨`Üä@ÚéŽw10$ Œ™Äìy3ÔÉ…Ä83ôY¨/œ'çåy�X�`Ö$gÍ+ÈÜL€$#(”º5“€ Kƒ�pë™ð´�/Ç-ÍcUqU>pÜÁž§¥çŽÛŽÊ(éÔd" ¸žˆÅùóèκÜPì8îyZ:Ï� ôS°:èG×¼ˆXÅ‚iªÔ9àüah:=4¡mÀÒëag|("Aà¸äpÂ5Ž¥9o:³úŽN¤‰(0LÇ”ŽB¤•Ù”˜P šÜ €_ÍÁ" „¨ð8ç‚1§Ž§ý`:cë~ ¡?³Å· ×äW9_*Uœœ›Ú<™ö‚÷!ÂÕË©™cq (TôÉB^ûÑ"ú‹è%UŽn¢‡d§·Â˜:SZÈï[Ó`6ýNOa¤Â|IK M¿7=/b•”¿4Û_yÁt÷¯J60€¼¹FVæ(Ô2)óÉŒÙeÚçBÒ™�Ÿ–X9áK7µã�ÐJ�5€{ž•�@ÏCãq, ~R".óWnâBf¸Cí žuDH"‰ÕzäWbæ§´ )Õ=Ð�$à©0ýe–zÔÑ‘¯þvÍwšSãÕvgí6öRjU2Eõ¹••ùtê„IÐ(5Íq¬‚:—ˆ"À8 e¦ââ”BŒA[Ý´¿;¯e ‘šô| ™¡zµÌíü8­r(Ôv$°ANèýbj0¯®û»ƒøŒiӲƳ Êw$Gó© .–*‰e!~å╬òX&ù¹#ÎÊøGÞzhkÄs€‰³ÚANEõ)§\‚ð©yË£ˆÑ{èT´ h•ÊyÒã ‚P‡Óvx2 &_ïp|¢¿ <ÙÛ–7ð_E�¡ºÐ Gh�׈}?™~Oý9A‡ÃFI3yÔBÝçEôò\.„åøì×núÞ®¯þóΔ endstream endobj 566 0 obj << /Length 2237 /Filter /FlateDecode >> stream xÚ�XK“㸠¾Ï¯ðQ®j3|ŠÒ1›™ÝÚR©Jç”Í�mÑmÕÊ’#Éýø÷R–Üò”Ý’`ñø‚o^7|óÛ7Ÿ¿<û˯Úl$gy.Íæù°±‚i¥7¹É™(6ÏÕæ?Ùߎî<ú~»SÖdrûßç¿Ó"Íla.â›�.Y!4-ø×g»U"Ý­éðëm«dæû·Ú¿ÕµUzqÍçP$Ô(Y™Ë< 6‚Ü�à_ü¡ë=¬*tæÆÑŸÎcݾÒ÷ØÅgïÚ¡qcd{Ùîd‘ùq ÿßñŸ÷mdÜJK¤¸²qíëŽúá ¾K›Õ#ÑA³ð¼ ×4Ÿq{z¼vA>ý¯"åÝR§Æ»>ízôƒÇ“âÙ„`¥ÉélÓîl»ÓZgÏǰ¯R™;Ÿ›Ú‡�(ˆ­/½kècZKŸuKϳëÇzi\ÿD„—ËHR\3D9IöDâ‚!¶"»Šì/¤ª,4+µŽzGŸ<}Ü{H“‡Í¥*ð øbArÓtÁüà«Àd¯?*ðS\ÕˆNnëÆ#}Fþ"ûü�¤ªÞ�u׺þ“¾C8!Ëó�ß#¥�‹.xP£òW(2.žh·v$ˆ÷3…M‹å%jßû“�ºb*C£ �½£𕓚ȟÂ͆ØB0ï8Û0ú3‘«.aW£œÆUUH8 ¢E�¶ïNçÆÔAô'Ñê¸ Jù&j¾�X<Hÿ$_ï] �˜‘ €Éª!!;�Ü{L¦øñ^£Gð­kã2ׂ—‚²¸j$¢w{T3ñbì†Ø§ˆõo!›a΢²Ê�®n~m)+Î=%ÝÞ)ì¯á�nò=¤š—vªÒ‘£ùà}ð!„H9ÉÔÓ\Ì�cÔùäÇcLô­CÛxÁ&„hlK8‹Ò¹DL›BNI–󈱒 H7!MöO0x}ª)°+ÿWº­QÕ´|ƒd½K `)Iâ÷Ù2 ú÷€]¾‚l!˜�7Nëþà†'> stream xÚÍZKsÛF¾ëWð°Ê„1ƒÁc6‡-yíl¼µådcU²)Lj‘¨€€’}Ùß¾_O@€†(iUµñA˜WOOOO¿©`±Y‹¿_¼ººxù�ŒÚ×±ŒW7 $¾ˆÄ"‰R?�åâ*_|ðD°üxõ�—ß©x '~¨4ðX˜¿}ùãÕ›Ÿ–«0 =é/WI’zï}wµLCïòß<ÿÃR¦ÞÏ€Bx?¿}ó O_¾{M…Îå?—©ò~}ÿö=y8BO¨\õ‡¯d‚É�IÈ‹uWÔUÖ¦]®dœxí6+—Â+yt�&õ ŠŠhéšÚN懵Éy!«\g]ïöØœ5&A@‚öo]ò¢Ú0L·­[Ów³®ßØ4¦Ýc�xu�­«¹}=ìºzóÖ§Û.„òµR¸�ðuñ¥~Ùš `Q♪)ÖDô–QDt¦±Ç£Ûv ˆ;¬»Cco�©»¢Ûº­Ÿ²Ý¾4-Ý#‘´�ç_˜ÚÏÌ�ìS¿·,¹wä‡Öäx[%´wµ-ì9±W¸óö²nÛâº4öB«¹9„ëì@´Óû[z¨Cô|ÓrâÛð� "!iqÏm½sïÜöšÛ�ÒNåíê¶ã©�©L“•<¨+s?ÓßÕíV½j¨Óhê¦.K>¾%Ä@Z„ï3C­³ÎljÅoÜ~ÓìZ^ˇªªò¶ƒ4dMî%ÐÔWÞõ¡ãÉ& ƒ¯é©ÛÕý<îêS2°GáE;ð¦-Zß)u´à�’4+°*• F#}é‹%0ËÈûÉ”™½!10‰Æžj*h9j*ð‰ÔSÍ_›ß‚PUí„IᎰ”LT<~”öÆå· šñùñ˜áXu&GëØ“¤GáŸPŽAAa8X²ËjÀ!äÜO o�àÖÒW±è·ÂЩPò›¤‘×ݹN™U›C¶!Õ¥á%5ŠM�_ñSËxu4}kûªQêeÜ4ËHzŽ@ž)\ˌΎD ˜“ÒH· `ªÖ\Ó¼éîŒm�Ûûu�ý‚79ý S ±VŸðr!„i%..ûk[ƤOã'qÔóå/ Æœ“HŽ" å w�%ñÉÓM°hD H‚9$ÚúóÊá#€²˜ž�:uHR$8'q·vêÃ&2„òômÖà•¯ËÏ<âA‡LZa-tÇkB½1$¶Ë˜üÎa³åµ?Eçð”ÅýÜÁÁ¸Cï–Î,RŸÍ(¡4vJywäa¾´$1ß�¼ <ª5sAïS¨ÇÄ£S“]jÉ+„±÷¶ãI{a´ëÒdM¿!s‹íaMöÓ!ʸ™(ÆŒ0æEcì ¸e�¤�#Zš6’.L•¤¾™HªŠÏê=„T2Hê8ƒEÃΈñ9Å¢€œ#ãl1»t �°ûþ9cºŠ$T‹Hûýû¼a×Nf"dc:EÑ·o®.þ¸ "‚…A°®‰\D2ðaŽëÝŇ�Á"Ç"8ç‡:]ÜYÐþ4Z-ÊÅû‹MP„VkžŒ"Çž°Ïà’@ô±gªR  }„)|?D”)‚ |ŠãÐ/mß0ŸÁø#‚|ŽõQOÁ§°W×éIÊZõ€ˆ[ÈÖÚoc¿Ý„…ó¬£G�Óg±î©(Á:úi�üßXÇìªí·´_óÖQ„ÏbÝSQ<‚u�‚5ÿDÖ•³N!šª<ƒuOFñë ÀJ+?MÒÞ®t@Ú„o9úû­æ¡+ËÀð± ¼/w¤ãBòÔŒé$à—*"H:ØQ::¿ÉVs—½?bàÑÕ&q4(sAº+oLbò¢…§œ�6HÝÃZ¬HäC°i|Tg_r?A€*î�%ÿ„®s·ºs†c\ :Qd.hp�§×Û#l¶³f…ŠG¬Ç<½ÍÊ¡ÔoZÃV¹5tcKYÚ˜¼Ÿ¤”˨ØqŒÌ§µŽ0ˆ�ê~©|‰öe:)vtc¥–�©vˆ>üXg8[î@:+õiO(\gˆ™K¦#`OGõkGHæ5™»Æ–è³Pb�‹¡šJ[Xª«.+*gбì”Z�Ó.Ûï!MÖ iØe»‹l³J½ßÍgžv.›ºlÈz†N[ì¦5Óc7öE†¸t;jn«ºZ™Ý¾s¸[Ó£f‹¤½Û¬<8Dçî2{îÆtsB?"!J)–—´6†K¥ºg_ìáÊM5.×pß|ÚsÖ…¦sWbfŠ(öE¬§eН®8“žÔfäX5f° çIbüGâ'*ýGx/ŽWs8¢‰ŠŠ:b?8Â�Í–Òëëãr’@–~¬LþuQò u23yq¶˜’jçGµŸ­¡j•Lj¨ÖIaÆ‘ÚðDQÍœ�D¾¢Ê´a4œÕ\ £ ûvEpf“kôZª“ùótêÇÁÙÂÎD( ¦1|†s®º÷å„>;ejìýn]Òœ%Gë'˜‰aÈf¤›:_ØT‘<ǰÄWÁÀ/ §Bä>[÷3 cçc#î±"š;òü ¶Èä p=D·¶ E§nà/7M¶ßò*² ‡~—�à·vpÛ(13IrxbÀyÃ-‹NÎdÙG$ …}½5tõÖ�c0v"��ä¤pÎQùù!Ô _I†.¥m³õü ’Ðm½«­9·F×m�oÖ°: SÚQý/†BÆÂ=‚+(!,󊮥’^¢(ÿ84.³”ZñÂm] Qy&;¾œbuš±Ê*ñc5ˆÅ¼`ÉT? X2z¨p’U“»P­ÿ5ŠÃÌõúàn“¹õ‘^€2ôÁëÓ~¶’ËðœõI|­ïý1hZeÖ+�-²Ê'Y…q�½gÔlžŒâár—Ð ÎYýÙ•ÂäÃðJßÎ Å›þ§Â­Hñ|âY¯ñD �xŒ4‚QùºK�"Aȧâg1î©(.=¨ÃG_iéñ†ò¿Øˆ8°ùÌnˆ8†ÞÓ»1?,vÕ‰3|°Õ0æ"RÇj¦ó.Q0ºè·?Ê"às5îïẬ‡nqo•Hï‡ÁgkWP‰”óûÈ[h’§î–!ZòöeBEô+£ð 0г51@�JïxrßÔÛ¡ZÃOÔö‡î—¶´€þÎd%Ÿ‰ú ôLJxû_ Z` endstream endobj 602 0 obj << /Length 3259 /Filter /FlateDecode >> stream xÚíZÝ�ܶ¿¿b󦲌ø%QŠÀŽ�Ôš´öEáøA·«ÝU¬•®’Ö×ëCÿöÎpH}ìqï|ð5Aƒ>Ü-ERÃáp>~3T¼Ø-âÅ÷/./¾úN%‹Œe‰H—ÛEÊ™’j‘jÃL"—›Å»H0Á–«45ÑË×ß^¾þñ‡ço–FE_®¤TÑÛË7Ka¢Ÿ¾½üéÍ«åûË?}õ�Њ*NX* ¬g‰qŽs.bÇÁb%3ÎR£+‘Â;’f}·42j›,¡xÔï j\/aVÔ”5®ØS_³¥ß�eq3ïY7‡ëc_´ôÔ­Ë¢^_ⓌšÚ‘<”»ý„Úu[lý}ãÞ\ò¨pÓs7Ôæ›²/›:¯¨cS®íc{‹Û[¬¸b™‚MqÎ2­iSy‡“–î€Ë«¾\òkÙâ–­á Ff‚i.½Ÿ„Ìc�qâgXÆ�\Wô­eE=Ǻì Ä»+¥Ó÷t^VJ™6Ãa~I¤ú}ÞÓ:e÷e€*mšÀOÌmf»àj¾ žûüÛD¡‰f2è¨4óó~Žu &™I•Ÿ ,© y–Æ‹ m¦4x€�„Å£ÀjØ“Ñ֭ŧ›°ùÔOü&@ 9(íîr*gD€~nGÏç»2aRpwZÍüL)oѸŒŠæ‡ëÊ= sÔ´jçóñ®pcûMàÆ�ÎL :“*‹ŽzÍÈ X,èê¼ÝuåG\߈­²ÖØRQ[Tù°`<_ðÙr¥D½½­ëlnͱ£iÞ†€BY{šžxÞÚU^ïŽù® ©‡Ü’¡¡zØ8Œ\Y§æ¦íÚæH^®Ø0»¥ÐŽ.­{tò‚Íã„Ñ'"Þ5nÃ*ø'àºs7/§Ÿ]�äŠ6¯ÊYÙP7ºü�JÌ­Ó‡%ÁˆLG‰Û½Ûï›#¸Ø³§ce'24 pÝí½/>ÚÃÆÆ¡q!ó›²-h:ž8†£¨Êîlqª£ÅAö=8~ˆZJòèûrd(³.çÎöÏX~æÄO}�’,ãƒ�}é¦h0ð,•ƹ!`wLensmÐŒe¢“I?ÇBo¨ÇõBþÒ@àœ¸Ÿ8D%c\Їz6uè ×~_vtb2S̈l~dV©Ðñ×y]©néuŒì  ˆo©W»Í¦Ø aÇF 2 R×ùÚ5}”š»9·Lsò.$2•€ÌÌÜw=pRÊ©á] ~¢Ìdγ?„‚–d AkvËü�ösò€ßÖLǃ.|`C15‚¬m`‰WA F©1¼ØàûËÝíØýªÇÎsûIOö#O÷“ž°kÎq{6ô&jÐý°q¨8ûD‹Vç-Zh2SEÙv<“8ò&)ð£Op’3µ¼‡ö6Æ20¢ÂbHov€B7e½£¡iŽÕfnšÄ×ô8yÂÂon¨8/B Ž3!0�ª'°,ó4–%þšÈÏjâ9Ë÷YVÊ>}À¤€©‹2O`Qü7´¨ûüêƒà—¿3ÑçÁ+Æ”DÌv¶ãM0{ÖZ>�TÒOñ3â~?“–¤|îgþè )z‰�¹‹#­6 %g>E¤-,ÐC­këgš¾ ½´\#Ô?4»6¿ÞwôîM‰Àq¹âÑž&lÊ®/ëµ#ƒ¤Á•¹uÑ$ºã)ºÙ¹#ÐÉ ÒÄXŒfFÖ𦩪" ‘0®'Dp= ÁŽ9=¥sÄcv#]vcuÏ:]JP ßÃx¦sÀ}‰Á1é9Pÿ禳EåñâaW`PÑu;©z¨ÓäHÉh{l‘> &R åóèïŽ6ådz&‹ðq€j&–Á+—²‚êèÉS1DQò”Sãè«1¡ÚG2H™ NÅ<À늺+\aO;¯�ØÞä?¶>ƒ{ïf¯VôŠQ>ptIjj‹>dv�/P¸sYç� �¤€{z¸|õš‘~(@æöL*HlKh+C!L‚Îr¡£·Å´_bö³"©ž–€ì3îãßÔ| ºŸª€ …üa5™õÜÁ¢¦…�ï°{í‹Á¢ƒtRD(m^�~J­N>ü3J ÿwOOw•”=p•Äí,ï�™9®ßÓ=]ò¹Â}‚{º$µxgæÿ~´×ÚÒØë¦Ô^7I3$BzÝ•{ÅC“´žrš?ÇN80½è¹us;Gœ![qÙ>ôm�õÚ»‡Œnµi®ëɯ0¿XS À²Qôç� ‡Ê.I T¶bfÔ ïoƒEô|'×ã¾FÑSr$Õ�ã_¹*Æ~îyƒ—Û)ЖŸtå� €w¹:[ÐL¬½¬&“ž�©Y©“ÝÎ §„8˜oº”€M¿Y'—ò÷‰Ìußò¿„ÌÌCÈÌ<2S'ÎëÄñθ0sǃ{Â�„„®Ì 3´]Qݺ2�áÙ™:£2Á+|ßfý®m³-Lj?…OèGì/ù‘ÞÍAÿ@MD|øëM¼-—ax¦ªÈýš¶Îd_è‡%�붹ʯN®9mµnÄCÅ€~Ü=?ú_ø¸Ô‰­¦Qÿ±v>8�ûƒ?<½¿XœefŠõ¶¡Ï®Ïô ëÝ_ à�Åw¨¯†b�¡R§œÓð¿¯./þq�&/ø"Ñ̀ܗ ?±X.Þ½�±2 œßØ™øË˜W-Þ^üuJÁ0¡’ÇSˆ§_µþ9¥1·ûK1öFâ"Ès¤Ï®ìu'Q×ܺôÀVA”I_°ƒŠUØÂ1‹‘A ‘Ðtóv渋¯}©§Û _˜*‚§‰ÐUžöW‹Ð€“6x›SÛ/%¡£ÛÃf\³hÉ:èÑßóÚ¯²ñómz¤R·ŠnönöÕÑPà© Óô_:ªnâñâ-©¿éÒþ:Lùçí± cœ‰ú�“xæ endstream endobj 626 0 obj << /Length 2880 /Filter /FlateDecode >> stream xÚ½YKsܸ¾ëWÌ-œ*—ÀWR©”¼²w�J9›XµÎ–í4„$îrH-¶'¿>ý‡Q‘sÉaŠ@£Ñýømî6Ñæ‡‹—×ß½Vɦ‹T¥›ëÛMeaœÄ›,ÉÃYà¸Ó;'d+|Và›n_y‘{ÛˤöVvÒÙ²:[uÓÂ/ðÌp(ÆÀ7‹$á3 ÷¥éL8÷†í^ô4Ð6}UºÎ•L²üéÇëÝÀ]Ü‘Ý�€öA”Øfš€kLRüP}F.×Ì„ªåih²ŸydsÑfvUº0¡Îso.WÂ’lÒ°ÈtŽ,Y˜(ÇMaäÔÌÏea¤ÕfÆô1RjeÁ�‰rУZêñrEb¦ñdÇ£H¤å ´®‰%‰VÄè0ÏŒçù鱌,ÌLñX†~RÆË5I>—¯ì# £“žÑX• ne­xîÀ*Œ³Ì3þeUÕ™™$Ý=Þ Øi®ïfᢋ½`~²ehO~†w@‹ó.K²g˜ N÷Xiif*‡ Âöû-ö%ÖÐ?>Sf©ÙÌxþ¼¢˜8 “8õ§º}^3ÏÚËíʹB슄$L¢ôì~âøLBìþ´º„QÓ ß¬�#7æY{KÍ´Í_Ë€]Â5üvoWN²8êÿå$k1¥€dS|cKžaN<·±gïî�+žµS��ÓÄ~ÁœoÛ\Èäx™| ý [¶î1Ip§jÊqïü;Œtì,�&–UsÇC˜Bð;Ï£Ø_æQ“ç°ÊÜzhýV@Œl°°{7‰ÃÔ-ƒõY~Òz!>¤)S²T¡Êâ¹t–·c™³ÃN* A2иqf`¯1\ q’Ì8Ûe�revÚ Ì92©bŽöl9èIjzžÒFâò<ƒ²Z¢õn/§†Žÿ c¶ˆh� C7î! S…þƒí†Š�›f8)5š²B(Lë¡:žÜ¶c#�êÕqäCãms|Æ]Hxòš¯¼�aâëCð“0O¹Czì1ÀñLÌê’b@NVAÏP¾ ¯D‘Ì'�®¥ ‚”…ÜjÛ³¹¯U?ˆXËŸßÇŠ–`µˆŸ¢U†cö–¯FK•6[8ŸÂ×Òï°ÿA›O/Ö¬ëË=dàD#RÏ,õ~Ãm©(� räÁÒ ¶ªe<ü—,] )R¡‡ÒÎS¦öíÁ1ÅNÅç€%›1¨ó:w_íá¡F7ÖJÕ óšp²ÙòÊÉn:KXAç°ÁšB�Å{9 mߊŠh{@¸ëìá`q¹‚=£ŸÅ y…AeÕŽ™ý¤X,mµÀBÁYÀÁzÍÑú}ËäG«V &E€¶VN�yëv)‚Uf¨~‡.W¸Ý êÌøG×`BÂ�¨Ü§;ä››N_·'ää÷H5¹„4$� à¦ÊÞàñ‘•n”Љ£Ÿ±[Y‚ÊAªëó8ÝC¨%Œ¡¥¼‡/)ýà-Ãqãë/á<æÉ(÷¦égKÐCBÖA€Í,3ô`\7ÞÑ n»öÀ­iîÝé9Áä‹g!K8¹Æ–@ ò�ÝÂåE\ߟÝ×#¤²§ã]À‚“}zøQ&æ§®é}$¨‚åf'ŠòyR�°¨÷L›¿Žýà#ç2¬ÁàÕ´ð2­[��ºæ X@}‘ Ðÿžž—4(°ƲrýóQ÷}…afX~1Ä*_ܬ‡â·‰òH†p¿ªˆ¤ ’ÒÂoÁ¦ªÁrI@Kd~ �1XH‘pOÎþyËÏÈ!›­×´¿­ù6åà"Á²¦ú\•#™ ô]íü}ôL¡â¾|h�Efl‘Hw_0²BG„w¬üª·*E@]‘ÌMîÕ¦g|ìÆU}\;E Y äŒ ,Šh2Þœ®æ–YW�ë¿Á\.·ZãÐ$‘äú;7œ· �1ØË¾½kª3:K—æý3mk_va«$GQŽ&;wàVK0äsÕŽ2‹,ˆXNu— µ*= á£ýXƒNñƒs­Ò]Þ­hSP£,¶�D§ü‚\Ó«*vHK|\೬ÂjOx bájíƒQM˜¼ßçÖ龉aìüd+�!iÅ™/ýÁÜ +—7dNO°rÔY&Q¼LŠOpó€äñtÏɦК�*vt¨ð™3qš-€ žTNåIçúÒs™‚L:ÉÿHD#ºÃ¹Ìá¾>t;{Y›`Â0ΔÈ[À„<^Rµ˜Vct«H¢§”þX9ýÁ‚8¤V2û;£@D�ªà )Ë ÐOðEÆñ sæ þ‰àj9�DXÈcÖ¸=Ý£‰#ï«ç§�]b^w ;´�Ѿ€`Nôò,Ã$òD¼,šëJz™¤‘ÏÛ$ƒ}Ä÷¨îtF`² ÄR:"ç€é�²W׿_`lˆ6ñô§^œ¡N6ûÃŇOѦ„18N¨‹|ó…8›8MÔ^bëÍ»‹ð„i¶I dt ê(£@–¢æoGI´É€Â½_ÆP,îT˜Çò¿Ü5—§ BÕ@/"QŒï`M_[_ £ƒÙpSòiÄÖ‡Üü„/½>DXÅÔÕÀD|0BRÓ6»Åû‚å@:ä]2Â’„-÷ll‚´´âÄ/Uí¾j~“ÍÓŸrò4ZÑ›]šT^�Øít‚¸ÛqÃ6ä]/¸‡‡‹mìŒ7§ð }šPI^?»€0*@±pQ‰Z¼h=R¼Pÿ{)·0šÓY¹Ín� ³vð;rß_�ðYþŽM³n'þ–¿pI’4lÏ_859Iš1hNñA£#xnÓú4ÎÊ"ÿ´ˆ[ƒ $MBä©SM1÷B’·ãµ+€ªÙ²:Ëìd†­ý³> stream xÚ�ÙrÜ6ò]_ÁʧÊCÏGo'Úr\K»IJÖEB3XsH™‡%åë·/pÈñøx"Ðh4}7z;/ô~½ø×õÅË7qêA‘F©w}ïe*ˆuìeIäiä]×Þ�:Øl³,÷¯þ~w½ÉcÿÕ_›­Öð}÷ê-Îÿ¾º¼ÚÜ^ÿûå›(Y‹Ã4È¢Ž":J#ÎE(‡{[]¨ Ëcoe°G3Öë©·íè§¡?îíÀ£‡¾Ûl£Ü¯Ì0¼@P‹¦7¼úh›†Ge3t<º#|A°µi70í‡PǦfè¡$à3ΔoÛªk»Qþ0š¶²FŽ.Ûšî¦�€lëøú¯‘e¸œ·UqPÄp%¥‚"IøJÃ3^>�“Lù—¸?K— d‰_•ƒ¡Ëå©ÿ¸æ Ù2Ÿ&¹A#Ø­¡kÀúØ1¤6Ü“a]˰Ç}92ä.ÖÆ G¦sØwS#QvÙâø-Ý-<¹ÖyèW@½ë�þˆW“¸&ÑÀÊ®+‘.áËüþ¾ÜÀ)ŸÝMa¥ä…¾DÝ2h{[�2^² óG±ØâŒ‰¸AÛ�Çᤎg ¡# ä¡$Àpî–Äl¢‰¹}f«Cy�ÑÁ”-Ø!.bÿ]7 |ßá9�n‰"A³F¹Í–Í@·Hwºïz!ñi²Žše9˜žÌ¤;2Öòú£÷',>ô欗޵A'@׋ ¿ø[›¡ê­8SÍ02ø nÛÉDÚ®&µ�­1œ9€A;‹IÔˆÓ"dá“°p`ö3db&Ò¹UçÔ0ÁmO¦þF©¸=§Á¹¢»h*æjê€c¸ç1FV±®Èë=^ W¥\-×þ8&Ùyì;š¢Žœ)jÿ³íÚ1œ‰ƒÈIıD¸7¶-rc�+Ã#gÂ0$ €oÉŸ‡²-y®”ÝÁ°ôŸHë~¦ÄƒCie‰¼¿Ûõå�”” ,V¥`MÃÌ … urìAïŸÏÙÑB Јx¡ïÔó š <0 èuTŒá*WS…€=ã(:<óÄXŽD¨$6qHŽ ßÞ ÊZsräñ´‘Æ~DЦšeUu‡pW”f}îNw.NÄÚ¿G»ì%.Áœ-"Žf㈣u|œôüL^5 �l%‘:h²_ø®,’îâÈéFGÅÅÉô`aÆç^ú1tæ6lTzÖhÕM³ òJ)hoK‹Ò¾�ï$ӌİuÎ£Ž…B´�C£Ä¿þåòž •Å•eëÏsħԗ1©E©5Ogeä™\œwñà× ´±-%mÀ¸Ñù-ЋÃHÒNF¡YÌw�à‹¢3ƒY.-Dî´”ÿ� wš§‘hƒbe‡=›;$bG‰öw¦5=º0N€>Z�[çUT;~!óMÕ8õhžè!*÷ßlÀozc^SJŒ’ˆ@»¡=orœMwƒyLŽÉ;_0äqogǃikØÑØÌ g‚ioF0Ol¼ªbâL.”á~(¡�q›îmc[Œ6ÝÁÒ\Ò©@øÉ%=ÚØõÝ´Û¿Xf6€/„DF& Ä¡Ìy`ñVÕÏ©©Ï™bRcq (ˆOÈ MâꡨC ÛÊwxñOûÑ2èF%·…EöÎHÝ «bE0*[)Ðy2pGAÖ€aÝAhò1k¡xÎ&È QLsOÁö+b@û—\t@¶6�• rÉ�ú¨šgdšaA†Ó‡r'h¤UåªÀ8ÉM ›hÌ߸v£"R¤âˆ‹`“Ô¹KG H÷TÞ«Ð�5—o5¯wÇÇŽþ³5�ÂÇ=¯Šÿ“l…­3ÞÐì ÄÔÔQS<凪c_ –ZÁäËÖŠ®r¹§QÇ– 'Âê3ã3zeƒµc�KØE æ~j„rÇ8ss²ò—o¼@pj¤nC²�Í/¤;¡ëaícwûE×rd&“„;—fô¢7Ô®:£L㊾ÓVú’�tÚkž¶á” mç´ V�p‘²¯]'SŽ®ÝY<´HËRÊ)ßqìš�¹ó±òâ — GЖeJ¹—WBŽÁÿÞnå…é$ ÒP»-7é-Ž9?VÂAÔ-÷vèÚe•­=‡Ë€\Z�<‚º~C,_+¼q�ûÈ2 d†^6vë°¸Á:j0Tær ®’©–²½äfgØÓû¤4M��8±aîÊQ6»ãg¿¸Ý‰õþ>Ç~•o9ö+%ñ%Ân]T@Öâ‘ h8?»*|2{€ÁðÂIšQÔ±ŒøìÆ©¶çT+(ÕZzä�`ø}ד¦;’>Ž5BÈga" ê œXó„Ÿä¢¹+ÁñOÐöüØZÛ”Èÿ8ìewðV fŸŽ"}ΗÞ ýÎ;4ÜxjÑÛE`7 m8†åݪ§Å€ÅÙ-ã^E‹®B­» X#¾ðË«cè5¨á)V„S�½§a…Y9ORè^(­jaÅ͸(J¬Œ «¯èjc€ò%��Ú$²á—Ÿ¿é¡§i¸ÃV?`~¹¾øt�1"ô”ûñ£²"ÈóÄ«7·¡WÃph}�„yðTšiøñ®.þàŸHiæ%P°dIò(H ¦¨LQ¯Ú“$ô2À —,*Q.‚\I¤ä¿ºàFØ®"¿ À Á‹†ÐŲMjy˜Ö…KŸÀV±8NÅ:È’9({ T¿<׎H\ï¾kjR$æÙ=jÇPn�ýhì ð…0;vœ5ñÕ¿©98hì'Ú­=V?ó\C‘�:'ïÀ® §f�¿IDR�z[È&é¢'–$µ’:KXDÞ´“¨U�ø¡C€1b„„O‚4Â{%±ÿÞ4%.?óôgÎWP½ß$áíÊœN¿`^ÿÞèm2 endstream endobj 669 0 obj << /Length 3866 /Filter /FlateDecode >> stream xÚÍ]“Û¶ñÝ¿B�ÔŒ�! €ÓéƒÓ8‰›4isפÇ<‰wâ˜"’òù¦ÓÿÞýEʼEéL¬[,�°»Xì.ÖÑâv-¾~ñÅՋϾJÌ" ³4IW7‹8²alâ…5.ti²¸Z/Þ±^¾»úëg_étÜ3µ¡ÒС>ùæÕ߯^ÿ¸¼PJI¸¼°Ö—¿|µt*xõ/Æÿ°L\ðôŠã8øéÍëŸýêû/мúnétðËå›KœòE$ …¹Í"Ö0!®éfqág¿H,¬Hñ’P//â81Áå}½TqÐç�°5Aƒ­K•Eû¡,îx?“�G@+ �Zoêå…ŽÓ ß”C]±ê˦~ -e_ ÚL»¢©°[sï—€nú�§#ý¿,ë[F­K"˜·÷ÜÎë5W¯ß0ÀSÛ`]t«v%-Ö²ˆâãªÚ¯‚]³-pg¸—83cx/ÝŽ‡­Ê¼êK St"Ðl‘†™U u¼[¨0�eœ�a“µ]\Œ:�¨�sÌ/Ë>X5û¶˜xBË–nbÜ!Óäs·É«JÀ>o{×ů‘Ò5ïnL¹-† õå‡�oòî=5=µuÞç2ñ÷2Œv¿|h\2e•ôhû¼„™�U·¬™}êJ‹@ n¨'H†Û¸Eê¸)˜kJ�‹R¡ÕΖüºëÛ¥‰ƒ|›UÆ¡±²P-Pâ>ƒ²b/¬‰²8tÊ“û52Ñ̤*tVû>¯.¯–´u†V="O·„JgY“±É ŒHa… ™§‰r¡RÈÔ„Î'‘üySV(¢È!{Z3Ø\|,»ž[Û¦•.[ÏÙ¶fD¾ÛµM¾B n�ÝØ½‘o¸-ÚbzQÈYôÖÝíy$�Ë;î>ê\¬UÖÒ…wÖ&ÓzªI9Øq¦ƒ]î5…Ûפ_ ÿmõE[® n¼M²w¸’8 Þ0f“c_¯·ˆ�Ú`Ótx2kDÖ7øÔçïGYû`nªÍ×%™‘Šcn1-’#|¹-ꢅ“v?g#ò®c¾ƒ‘è {µ/AŠ e·Eþ‘¶”et@È.Z1Á¨,‚Ú•táójù¼Òàñ)e�Ä0Ò§oáðA�;Z¦‰Ð4Àzòž#Ãk¢ˆ„À—CwÒ[D‘¡E ÊëÛ}~[ðwÑ% éwˆ}s]dÄt21´ÍE°¯˜1^¡Ô©±™ñiÕl·¨äÈošV#w™™1§>ŸÜ•¯¯^üö"0ZÄ °èa–€™‡¿ùjûâí»h±†� ¡ÊÜ⎺n០•³‹jqùâG$¬ &Ìà~x„��f(¤pµØç�ÐàX°NŸ1h¦trÎ: 8 ‘:�ž³þï {#‚1}”bêT?¸¦ K �Wò¯½]Œ›?Šg\Ú™‹ûwÀ=¸ÁÓ( £LÎS<ÑŸˆ)9D̦ ðµl3�n}gÀqÊ"Ô\øí>" [e‚¹4‘KL¨�õäÀÌlPÂo ¶ážà’à†àšàœà–àû'¦\¼½pà‚YÈb<´ð›Óïz„iŸC$¡Î*¨èá$ذ¢µ¡1“‚�<Û? r†®uöÚù#vÀdàˆdæ M=™Â¹ªj²4L•¿��‚©E¡5©×¢?Îêõ¬þ†à‚àœàõÓ 5Öp|áN|þð„î„Óï1:„T|Ž O¥p¶ „•–增¡ËCðòÚˆøçälDa'Áí€wÁwÙ±t~øõG‚t‘yŽÑÒDË-�1Àûï1Å 2µâísn�“)œ-S Wu”²¤ôÿ\¨Wߎ0ÿÿBMáZ‹’s„z*…³…šº0Ñ1KÊü1BMÙ„ª&¡j¡ ¾ ¸!xMðý±?C†.\ æ0Õƒ¿kú}ŽK§ŸÜæŠnóä‘Ûüq±ॲçˆýT g‹Ý¸ÐZ1ÐéóïØÿ<yƒYµ3$`!ô;#ðx‰§�3Ö1ˆõ4Vk[ôdÚÖ¨”r9$œË²^a¤Í�*y07uuÏPNI�Á&ôlkÌ„Pï’r=ðᓎU‰ÁqŘq _"Öø´vÈ+ŠŠ9´‚©KNf‘\¦ ) ÇŸ†‘cö ƒòîå\ÂânSúœDý}(žÐ»ž“wû²“ï˜øÁ¿]³oWÔ/á<"!Z¿-z†)€é˜8ÄÄ�¡Ü&ö_å�Ì€Ù¢ÊÖeËÉáªè:¿†QÌþk”¤~>O0³¥GL†2éÊ5°uÍmN¬¤>��¨C'ðÀ>u1 k#i!ž ’×�ËÄœc-Ûë²oA '²„3¹b¥L˜Æzœ,vsYÊ0uñ$[|åw�›"_Sþ šc® F… „æ?8·WRŠ –YKÂEƒs�ï?‚žrz¾•õMÓn) ȈC�†vüWòifã,%$Û®äÔb4íQ§|ßo<’sj£�³Iiü€g«-úib^¼¦Ñ 1ü³®Ê÷r^µö/Úª‹0¿h;¨.öôY,LOik#'Ù"FQJ^ÛCŸ HeÒr“žpÒáíõg%KjƒgôxÄ  HìàÝ('ì@4!@‰ÑÄŒB O�ýi¹0ìO€Ëb¶0 T\"n/5‡T;\£lv‚j¹„íOõÓ@d™Y Ú2LÏkoªûmÓîÐÊ–Òø¸�ï—w²ÄUï³ßT]eSn°Êƒ#ºâ¤-@;Ê"Dz‘‡‰Íñ“¶q*ü[çýžS·Œî/©yN˜ßãSä8Âô¡l£#K0LeüT]q´„¢*¶’ïˆJ<¶±4²Â1Aí¬àq_åj_åí4},Iaí5ÃNOÉ3Rœh‰µ^*哼~ã„+å)Æ›:yœ Ãônšªâ¼q÷Œ„©Ö°¯ì ·Eƒ‹ÁÙ:Ãmy‰§Ý–3Ö!nË©¬x:]ª8BÉ9Y¨“)œë!k¸ñTªÏI˜â1SÃá*Æx.÷ß¼#¸8-…ªaf=˜½ß ™b¡'3›êÑ̦MŸ\u3ÁÛ‡©Ä:ý}«Ã�ïžqâ“,Œ•;çÈõxØö䑚Ä3Žüï_‡?^§òâôPEÇ*Ô±T˜|ß�;`ðžÇw0¶J™‡ž„ ådišBðä!áûûô^ÄY®÷B±ÍÑ/:ŒªøI ¦�óùºâ·}A�Y‚© $23ø§xÏ©„#@ïÚœ]¨nPEÊGZ8}fLþSOæB{ÏŸî†gÕ$Ó‡¸;N8îìIŠÇˆ@Ó’k>^"9Œ2ç€ßÝ-îÄfÁk^XíãÄf»ñ0]ØZ¼øK‚’p’ޏº!Ï[›I54%ˆ«¸zýFÂÒœÿ°Hi±q`¶î†ÊluE;¸'Ú<äèîöíàea¨˜IõO6-G� »t¡Š¡W›� K�ØTº-ŽÒqÇrõmù¡Ì+OC:Åø Òí/‡ †®òš<骔•ÑБ™:¿G!�•w©øazx«þ’·#½“ÚŽÀâ!†4 &�øŠ+° 6ª·ÂXê·Hª³5Z1¦$Õhù'~nЃ$/ÏRuÀËqíÕP€æ.†鯵!QQ·È Í—‡€9êÐ?õã’Û"¯eÜ'UZBNVÙí¯If«~1“P…ñlvCJ¢TjGY�+¾vU¹BCb ‚Ë©Rw(‚àªtZŸ†mIÿ”ï€V!Ý8O`}šÁ_@ׯëÛŠ’(ˆ“Æ ÝIXulãrñÄ»=MAZ3¤•ÆE"‡Z¢]ÛܶùVüüWBÀÛ˜Êë^Y{Ú×R‘ÇíÔGóDŸÔ¢”L¥•xaï ù¤Ó|0#ÑV¿`™RÇ´Eå/wy l¹`.IÜ1Þ +Ÿ>*æ¨òrÛMc"äx3“({ºÕdTS“oâô†pëò â¹}Ôyußùàh3ÈfÃÁPíëÖÄ2Kü¬æñä¼4nòUÿ’)ÝqµûlK_zþÀæp›WËH¬]ë ‰ÇçÛ`B�i×ýPs�$h µŽ‚ª` ^Qº =ô+ ²i&´9éÑ3Ú‘I�_9eÂ=47’¾B˜Ó1Š-<ÎÍNš©ÌÓi ¾zUÖ³5~`Ꜳ˜‚"à®�4™‹B'³†#qftí£Ï}бyÓ6[†øÊº7}ï¿ìw”·¬šú¶£z6Dóí®"×ÁÉ�;¡²jÚ!ýÓÔ\›ŠøIm&�˜TdâL³v ©ØH€ó#$JP³v¤e‘þš}À2õt”TÀ�†‘W•M Õ ÿNKf›]¯™|“J\˜ØÄ‹é; :_c™©C½ Õ¥Íif޶Fd ›$L⇒Ä֤з´©2Žî>)]µÎŸf;_âÀ»’®@ÎÓã&y¥–¸b饕¨Œ—Œüsîð¾ÝÈÕÀŽyÕ¹ŸRVÂè±Z̈ÿ˜=lùFÎǸõpšËïHøgÏ£E`qš†)UÐrŒC±Lj|Ë'4Æ×Òˆ¡œÔ¤jÚDãà愃š„Î÷zµmèh¤bd #›±‘Åö!�Vö\t˜¸y�~„œöß-zòØS%W ­(ŸÆ+œ}ÚY�ÿ7ÝQØ endstream endobj 553 0 obj << /Type /ObjStm /N 100 /First 878 /Length 2381 /Filter /FlateDecode >> stream xÚ½Zßs7~×_ÁÇ»‡P‚¤'Ó¹¶9·7s7Ó©óÐ^&®½M4u¤œ$OÝÿþ>¬Ö‰W‘,¦ÞfZ‡¿°$‚øPI¢ .%uœ¬3£,.‘ ¬»¿à4 ©(M%§Õ†“ËÑÚÉ•ZfI££À˜G³#¤˜�8 £ û‚Q)˜]Ñ#»X­’Õ)F¤ÿßþI`„”¦­Ž²`(G%ãë,Ž'§à;dIŽÉ8Îc¿Ç"*„ŠX£R­':ŽüLÑ ,l$˜F²‘d„¬§ ¢Öƒ‰5 §‚Xz*&Öj=˜8 Ä–Ñ“Kži v” ¥ˆÕQI.F›§ª‹)ØPvQ…P):øNµB Q€m ض)D&|E% &ΨàãD_k¨¨€oHÊIäŠ ¡‚M(±¡  ÎQ!2É=1&¬É*à?Ô8S=G¬Å`)beeSÈT1ŽCTMÀX”³íº8;‹Š¥ Zìl±±†mjÏH(3µ) âÒH6�´Ím¬ XKÁˆñ—ÉhðWl¥š i„Š‘ØÄÁÕ†°,vŒ™«Ëv¨&ÄœÙt“ÁTAñA Ø£Æì ©õW"Q¯¿E †¶¡"à§àÿ„aM„J��1Zú�€í¢ÙhÅ•lóAd%÷×_Ü …"×@¶‚¸J&[œ{�¶%È¡ŠC›+ä4{þ|ææß®nVë‹÷—W�³»÷£›ÿp¹Ývë¥ã]óŸwÛï.¶—ÛÎQß1›Ÿ¯–[÷ü¹›ŸcYBOwΦô24$™š ðåC#¢‘†kbØ5p±¢ð=tVâýl¡ûÌÄt?‚«?4 ÃH»©¿új6ÿa½ººè¶îöôâÜÍ_vw[÷z†!ì|þò�÷�möM7ƒ–Ûn¹Ý@ò}>›ÿØmV·ë«nÓ›•¾ë?Ýõâò›Õ�{e;Æò CQ„|©¯±ÚåS@�eGþõr¹ÂŒ¯z3f,í­Ü�Ïæ·¿lûö¿ËßfóoVëënݯ@¯çßÏÿ5ÿ Hèµñt…ÍÀ�aa»Þìí‘ÏvŠøT@öu6nþÝêåÊÍ_¸¿]-¶�ÿ¸^,ß<ë6Ï®»¿›|n^¸Wfp{ þôóa2ÕS2ÆÆp×–·77¯�ç±°‡Ú¶ãò€X‰©xÁÙ7'eOyLüDkõC}éáHßhõŸÕCÕOôPå‰z¨ñizh;ú¨‡L�9l{źɰ'ù 0ñ0>õpƒ«¥g÷5PÓÇÓÌÁ DxTG´´£•àa$›h9P’ØF+Õ'n›®ŠgÑ6Z®¾–¶y9�77¡R�´u¬á•z=Îñ=ÎôT=®=KæM©Ï8jx…æ‚ùØ{ É÷X ž+Tèï]­¶X®ójôÓ,<¶ ˜ß™}†¯•BG°ô j|ÌÄÿ¾ømqövõnõf}ùþíþ%Ëüf~L<cÍžH­¨GÑD Æ£•8Ÿáœ6³ÏQ‰9öÐÚFLÑ—Ð(¸Ä›;ÓD 'ÙÇ�Úˆ#ÔVSãpø¥‘–<µG_sã¡Ü\ù6â`9% ¤Ø�Qò!èÂÿ‡Fô˜ÝœŸ[|8¸*ç}H˜ïP D,ƒ»‹HJõ�ï‹@%=äOìûjà}[m¡ÚgØj¥¸o«wÖ»8w¥eÊ2”uJ[NªÞ¢.Íâ-5@–ÓbGè’”|Ђvw—ïÞßÀ’ÛO1æû°•´øq`…5zôfVh:VˆÁJ1›H°‰¸YV]&”Zô‹²w`“x¶tŒت‹88ªéØÒ„`qFeõ�-3á `ŸJ†pòI°Ý¾í6—·ëÛÍt,œÙÌ8 ­ÀI„ô„s£Œ¶¤GYÂäËn»ü–jõ®Ç´ƒ\Í·�m´8Ùx�ѲŸ©�” Ô8-#B>‰iI}®�<‘"ŸY�å�17‹#“ºìGS-#´!ÌCèÁÈzbêÓ©ÃêéP¦æ8Ú�0é8ŽC+Œ`ÊO‚.þ$\V–§A—%%�%ËIö%‡¡¤¡äa<å¤ưŒ”-I gż¥5 ²�<¥­.PiËÄ€íM5YfÔKõ#q:»˜ìþIq’Y LScÉi-ÒåTêëlóÇr{y7¡�ÅWh~BˆuˆõÑTÜ»ËåÙ¦»žð� Ù¢Ö�ÕÃ,=ÆÊ}6&NéîPA$ógXL½…zìÐõšnnù˜’)™‰`&õ .Ô&€!ÒgL•Ëg]!3óœÚÃç=â! ¬Pà’Úˆ-±Si#¶ÜS¬ÚH®� ¾©>²ã¤æZìáù_}�Po aŸ�ã÷…£H7uÀ%åÔ}"jñŽ?{»Ú•2”i(T‹ªÅj´ìÊÕäþûÝdÒdÁMb©–àÉTëÆjð5þ¥öjlÃa™àJ¦áâfÁ˜Ø3¨XÖáÑ\Û¶[œ½¹]\w7‹e7¡ûϬóº3àðR¶Óž½3•G#’_×ôæj{f¡Éteˆ<Ø[m„ÿË‘«=ØÓÉ6vÞ,¶gV™Ð´#†e�³É¸h¯Ù–+-öÔ t2[+�¸“‚»-jC))"Z€•M–y¤&ù¼»9ûßm·1õÞLˆÅ–tL� p¯Xå68ë;”¥yH{ŸÊm�©�vúü#¿19ú?òçÆ¿19ž…øøë“?ëÏí&Gþœæ'úsÃïfìg<»rðËô¾ð놤‹ ›©ü4{üÄ´ÔÎV1sÅIæòŸ‚�BöÀ¤ÉRûvؾcÿ‹'¯�Ýø«›ÕïS¢ªá}Ö�;‡Qá²EŒ Šò)‰ä ÁÙ¨åèÈÒø`aX°”›¥JŸŽµãÇŒþÿ¾êßL endstream endobj 693 0 obj << /Length 3827 /Filter /FlateDecode >> stream xÚÝ]“Û¶ñÝ¿Bo¥f|ñIÀ�>¸cÇI§MSû’¶ãø�–xwœPÔ…”|¾Éä¿ww’ ÄÓI'g¦íÃA >‹ý°—ήgéìͳ?_>ûêkefŽ9#Ììòj–q¦¤šeÚ2kÄìr9{Ÿ¦Øü"Ëlòîßß]έJ^þk~!¥Jþ>6ùñõÛ9ç<ùñÛ×ÿœ¸üËW_ AT©a™°°ãÇÿÓòt$z->•»äMc_2²üÖ0 Šœ¥’¥ÂyEy[¬Šz��ó ( a¥x²¹É7]­ð•We}�5‘,ËŦœód]çͽoº.j˜J"È“ *UèÈ—7ES´Özf»i¶‹Í¶ Ÿë+ÿ›û¹m±ÊkÄmS.|¬|�25ÙgN)øåÌilHé1²2yþÔòîf€ø„Ö²Å_å×Ç†ÕºÝø¦ë�†=ä•ÿFTpDª’[ØEá±)–¾¯Ç¾w¬�N.q¯Wë¦Ë—›°LŽóî= ²ö�·yûÚV9))°l´—ÅÚ¯•Óp®“ª¬‘ŒXõÌÁš§nh]w½¡!".~ÒŽpŽÿiŠ*'‚Uþ›˜JôûCX¦¨@6<°?¶èݶ§æóµ;ì\o«åÔ†Úru‹B!¥ôk¾¾™‹,Ìô ÛºÜ AX·KÚ 64YDü‚†ŸR�æõÒO l„Úm³^>kÃýhÀqN6?H `ìMQ/Š#52MF3 Øe™6ÙS<³Ak`N‡0Rᑗ˃ÐPWŸf}¸[ûGPþ4ëüã ÐSg“~àh Ð, ƒ_¶9î°¤zMõëIÓ¾cp.`Q•: ¿ÆC|YePZáÁrÛ#'ÃÏ�ý`Efš–ëíG41ÅÅb]�šP#ÊCØu>s›1 v¢Ûö‹‰€ex7…ÔW�†FÖ#Æ, ê�TÞ Ú) ¡zXI¦lOó¶\ËCÔf²Ã+à>™:°ÙÀô±6½®¯«²½™XTjf@æ¯É ³i¿&óä ÊfbËDßAá–{/±Fª|‚Ú! ªÁ|xÒà°` ¨F¼!÷€t¢O¯ðÍÒ�ú))ºøå`€Tü²-?Í5¬\¥öý`ìˆ6ÎBzÇ ÜËÒш>îÐÌ„%-¸¹éVììYïUPͤ‡÷5ú“mƒ`! BËnEX$ÞZù*YjøE»˜ÉÈæd±€ÁÕ†Ñu½Þ�¼›”›PEiI4R§> îÞð°;7ÁM�,9FÝ•››~¹,{3OH‚Z‘å[�oßU|ÎÉÈúy­'°÷ï8Ú«uU‘ ܵ�ÛOmÀ¢O·Ÿ'C8l?tL3˜Ï]Û†õ�Ø.ù,ej°~ƒFðKïá ] LqxFùæ¨KO>L`°DBicó aü •%•5•×T‚ˆ7ª‹?v)Ðøßüvo;ÐJÛ᪳ªÛWÃvp2.bЗÈ@)¨vÛ‹ܶþ’‚“£ #fefƒ[ùy{xæà d|à¬A{Î .Eù~ ñîƒCl«¼½Ácÿ^Ð(J²ËÆ‚ÜÛ… )ëß«Ð*ÇÐQ[ F»öµþ<­3°Î^–°Ýóíªhš~ÿK?jfâvéw G A›êoeÀ�gàMøH¿÷N~2e)wcÛsy3åñÚzXò‡~ɱ_ÖL Kn(šîœÐ…’x5Ô‚AØY·%ò¦k –EÓ”Lý•ÍÎ’n i‡)*žÑ„ x÷aLÖ,=ÔÆû¤åvA§VA² Ú¢»¯2pÊKåþ}•—Áô�@:Ü‘ªŽ“’ŸqGŠO?†»'ß‘1ÿñ;Ò3�èîHO¦Ä£Ï/ÒIµìœç—“Aœ÷ü"žáÍz~YÒ“KNå&ÔÏx~ù!ºŒòS›SŸ_Àä?å�²H ñ]*Îbè© Îd(¥êžxwb¦1­!˜×}€óë¡7,‡gT8hÖT–Tn¨ü†Ê‚ÊœÊ%•wT®©lBûëDj9ž`3žtVë(�Ó7ˆÈ»è=­‰ÞÙü{ÚõñŒÎ4K¥=‹Ñ§‚8“Ñ€¹ÍÂå­|„Ñvž`´±Ähȇ¤ÔD\“|Oõª¦ìzë]¶Jç±5=•­V¨/ÎV£™†0á¶ž âL¶K—DõeØ ¬ô7 ¤ôúû&zqöú»¢ú*jiö47ã¶×\�ž¼?𦠡ãq«`ýÛÏ+*×{oÈz÷j’óÚ0žº³8*ˆ39¯-œBŒ«¿�B{Ë�EœïÔꪷ= ÝÒ½ µïªµ„ 6â¹8ÈsÅÉíÒ}¦%Ïõkª{üTâ~*ˆ÷à|t?Oq&?À²!³Å|!Mæzâï#_ëýñU4æsÔÞNxâÁd�y{Œå6Ì¥OrÈ;d€³Nè‘�ãç¹ì!œ+þ0KÛË~w�xGå6…ÿ{�x£pVöÛÉ Î Ø¢îòöw÷ö/©þ±/;¯[PùéaxØÛÿW &Qi~–0œ âLaœ¥.z ý² "Yp‘ypi¹`6®¨^õ&ÁQž¢ Rã[–û~[©§�ßlÚ?�ý `Ó[”˜¶)I.Õ©i›¨Fýýÿ°3íÌá>xšF[sýÖ°üšÊ5• •+?¡=þ¸‘Z–Ys–Ì� â©2g ƒàDrÎèntxâzPêö©s‘ÔÁ‘˜o#º_Eõ&ª×�âß´g•lšý%á=Ÿ! 'ƒ8S@RÁ¸áA@ø�‡£–×Qt2-esÛÈD�µLQ ­%i-z^…rEå-••Çs £­cVŸu|2ˆó-œ`Æ…û$.a4’Ã~;‚†©ìŒ`ÌÓ_Ž˜ÿø‹ÃH ,=�Ç'e‡ðø«ÃíïwkÊŽ5!­eÿÉ ÎÃÂô—÷¯CâÖD >µô.»õ0éùJÙgqø÷Qì¢Ì#»·qB_½°6¤°ÁÇGÿxæ?ëó Ê‹6rüØ=f¼|wù< SPþÕova³vüNÐðÅRw‰sþéTkÊ?ù|[•‹rãŸBuœ¦íhmÝ¥ECåU?=J¥ ïªü¹ËiŒ'„'g¬Æ;ãÉq àsêvSäË~V€vWVÕÔËù�ý‡¹!Ëe±Œ³Bú<ˆ¤êsføZy³ŠÒ1ó¼¸í2uÚZ»ýØ‹áYQ2�|8»‘R» åbÒ&� ä†6z066Â>€¾›ç™Ý rq¶x@^ùž¼›%œÃ÷8‘Å!ËŸÒ�ÍéŸ Ö>Iœz|¾"TèòêáÿØA)Ê« )9ã0ØÏ®y}ÊLq(è`"Nz(ì¥àˆ©´>*NÁ¹nÖÛÛÒn$ø+�J»�ãÑ�£7™¬À—½å U'„ÃÊÇy|}‚\[l|…¨ž©!W6X„h(PÐgžª¤Êëë-¥¥Åy}0æ¦Ï™‰fú<”Õj]90‚¥Ú�Ó56>±£n½NlW§@:~Ìvå�YD{àC.°G/N<Ù”Ÿ ?¨3"0,Þ Äé3Šy$‚ø_%)yÙq®1�r�'R%Àí™!Õô¸ÍuC2OH:w†éÌîš®!ÏÄÞ~ÊXê3M À»¯×õýªe ïö8 •8xPçåøyïZ}Ro6ÓÕd^˜Ó°'n$³Ü�ò¤uE?ühªÈlgýÞ‘åÔ(«�ÙË-æ”ÇËMŸ¢/x‘Qúü Ö¹ì.ÉÐÈ8ÛØÃÃ0ÌõœÀ “mùX�t—ý•7xN(�+ùœÒ€É!}üØŸÊ.AV£3nBÖ%‰ëepv*dÌï È�cZõ‘ÿ31© ÂqÌN&qÕ@m1me&ŽÚÿ$Íß endstream endobj 725 0 obj << /Length 3657 /Filter /FlateDecode >> stream xÚÕ[[sÛÆ~÷¯À[  ÁbXÀ�>¨µã:“IÛXMšQü‘+ 0hYÓö¿÷ÜiJ"Í—öAÄb/gÏîžÛwŠƒEo_üéúÅ×ß$iPDE–dÁõ] b©T6Í£p·¦^=p]ëî\ÛÉ< ·þ'qW­«+[xS\¿­«^ºVBò~`íWÌÊÕŠK%ŠxPscà©H7iiäWÀå‡?-«.#Q²º$»ö/å'n˜­\ÙÇи.ëyÙ»Î�! Ôm�ÝÙEbÃ%wôìbÛ²l…v)$›õšöi´¸Ð‹K:}W~Ë ‰8E§˜€ë#-‚#ÜY 9F`vå:)Íp߀a~ó æ~yùÈXÎûÏ’8Ÿ 7ιXìÐÊ`Ø›†vçaÝl;ÚÄ$¼ö¤çpì�p†Dž÷K“C6lÚ¡²ÞY�Ø]èI;müœFÖh®Y;9q¬]³¤5m_òyÑFeá­`¹í<�šŸ²&¼~ƒò’¤á,·i×L3;��ÉÆ>÷‰”jÙÃ" ÏÙªìºêîa‡l Ò ääüœ•0ÖSˆB39 �ü‘`„S½äòdïQθV¨²Â{S;)Üñ“Ù’͆8£ð(t#‰ÒØ0�p”´í¹åmGPKŦlûj¶]‘lÁ;íi.è;+;'U÷#%æ ÏwW�Ó  ¶’sw[öåíÊÁzM¬8®£úM5ãhÞn'#‘ð£j>†ƒÃÞ¸O%�¯žp=±ŠR›i‘GÖ|Iô¢bM1î©vìóŽÛÇ ¿€P%#Þ ^Ý{ 2 )RôÕPžSÙQ¹¦rOåÊר< ÿv&Î@îéñ VMfË²ÈØ!Šù÷Øá§ˆ ^ô�M3iâCšøÐĵZ€2÷ú‰¹`žò+è‘Ò«Àq#œ�ŽÝQ,ìFZ�á)à&wú„Dd¶2®›mE‡u³­;®œ»nÖV·,fÙàÑ®wMÝ¡úfÞCó[§æòª¬Ûr!-ËR(.Ð’€ýmIê¡â¬ÔHˆìÔV¾êŽù‹Áð‹:`PId ë²›Á<ÛUUK 87.ܹuUÕ;�VZPwi ?Ȭ5íÜ÷CÏÖó Û©êè•–Ê�˜F ¶®\ƒ)®À‰ûiÇ9‘³k’­‡>6$ËS~û› yv!²NÐÀSa©khĬ©°‚§–APÀþ jßÔ‹UÕ-™Ê䨠‰ì4¢�º–*ZW¢¢àKÞõAF�ëÁ$º)éКKS·‡=X¨Ó|P¾™«>’“�s=xq�FyV€`»ÅÓá¼"÷KœÆ°@×V3(ªC«T²ˆÙUÙÂGÈ 9¨0^xà}"<Ö ‚åõ@„›Í¶m+Y `ì�Ðå@· ó±$¥È��5’ùDg\øšP±E«qqz(ØâkǬݵî÷íÈ µB 5ÉJ!¸ºZõ®­AIyoGf3;¸ÑxE˜]RE�� ×9[Øå(Î2À,Ù€¹÷ÛC'tp9éç�qíî™Å$Wjäü§v“»¬K/ÄP/âÃÑC’€Š=u„è Õ ý¥q°+mGAèâ×÷åo$Îø&f«»ž­)‰YAËfŸóªu3©Cܬ!ºª�2hü@!69Ñ„aŽa~‹Šr2ô¶þ€Àzsª³„m<Ë�íè{ß>ýZ6ÕÌñ;E¾ðtŸ6-C òR$ŽE´(Ç´bê�æ6ßM¦IH«v)µqtŠb¦cô¹&ܶHåå¡¥`ønÀ^5ü¬›ž ph¾†Ÿ€¼ÖX5·+е Ä� n`±…Ú^…áV‹Oéñh'ѺÑã1ºüRz"}¿r(8pÆnÉJ˜Ôs½,‘æG�5p€›æ$²H¾9´b^"Úèªë�÷-›ª¤­];UZ0Ó»!T ÍMã×6kÁ ÎvÆ^ ”×L”˜K0UÌÜk‡`@ a?c1¥l"}@›óÔØøÈ å�³&†Íà´ÞâîMš¦‘I†¨oŸ?=íšGY<„¨W)bë¦ÅFP�^ÃìÜq‡\f+³¾'êš…’$_V-¿¡§2p¼‹ö"¡ÞnððÑ';ê6[r7”FêŽ=Ž“à ÌóÀv–íÃW�€œ"ŽrÍwL¸w,$c)áêgBÉJídVl¤@hp£Xš—u_VÌ’G¤!µ$"|m3Œä-Ïuž ~€Û�ÒÆõù~î�²dð9¿`·Ìi³sÎû�ºÖ@I©])ä° ÄxÖ€7í$=PÏø7¹i� ˆpô†5ýÕó I]¤Q^è3’ýEq®ÎIHAâù„ä|HBòä½xþÎ@ç€=“âŒ;ƒ“)œ{g ólH~Î�Ažç^Ö·RŽ]º”Oº!HRX«öäÞP¿¦|~?¹-xø‚‚74²&*ýä¶àáax®Ò#/+n޼ŸxZwsÅgÝ÷!…Äœ§»Ï“8Bw¿œ�AMNÜ‹Ó/t–Eyê0Y[D.U:A³P e Í5…nr‰)—\¼‡£%�%°|Án^GçÍ39t^Þì�!\3IªvGdµ±‘±êœ4àÉ$žÎæà÷u 㕽Hª‰¦/¨ÜH¯�uÈsstjï5eΪImA¿Ý$ÇV˜Æ¨ÈäÙqi<=̆öNáå üVô[Óï‚~Ì£cJú»œù#˹•… iÂýi²(VÏÌ›é,‡°¥ßî¸4¤Í£4ÛKCÑÍ3—¢&>ÙÓ9–åð­ÄíDÑ:ÀгfU>~p…‘®Q£~âË.|ÁãÒ¬¥¢ÜÀ¤¢“\ÃpKàBÁsÆo€o<@™ba$#ï£vs²Áøl*6 ~€Ò1?~)PÎú-#wÜ�¥ÿtD.ML¸nüÆ­d͜ɥF€ñõ°uréDÙBa2yåÎ�N„:™ÃÐÉŒ ¡Ów`@ÁJ€Xlœ‰•Òñ«…«C0 ÙõV’\Ø#’šeÉBR„.(µA�Ž`œ[èˆÝ<â`ç¥[oú~官‡"|âvǸºÇ]FAÀTéx°ä¢.…ò¨ˆ“]Ri&1æ <…9^Ù&P ojË Áµ_�Œ`6ªZh/K�‡:ì�Ú8Rf\32«Az»CÇ ïTVäNž²¹t }öï¶DI*×í&pË}o;؆¦¥ôÀ�!ö_YÉÕ§’ üÂ7®Ö߸ڰ÷šÒcêÜ'-&öãÙO¼F¦üÜsÖ'©ï²;–%Õ$ÊœÚ%àK ˆÊ¡Ý$žíÎàCB»“÷âyX–(`ÛœËN¦p.,K’˜¾–ù‚eÙ`c¿›|ÅŸI¹ÏYú4 ËŽ¥òÔÇZ&9ÖIç#>ÙJ0¦Ë’sT(`ðsŽ*>OâUür>©?q/NGYYÓ…õ!&6ø³¡OQ:ÇfZ¾(J²‚/Ò, 3>ü�B<Z|§�é3“íª¯6ø]‹tÜñ3XÁW±bTÃYt,RÚš&”ŠŽ>áeú¾®÷ŒSâ°ûêd†!²-’s�ÙÉ$žAfI¨\E™NFd¶« ‹C˜ ,�~^d¹ž|n‘Óu ~lCå%•Ý!à¢äFì߇IOÀÞÑ8ëcñ]6x»ÕÄì,¾”õ1“üÿ�õ9ØqO;øß”…0"yÒv©,‹2këÅBmðŸà]8ìX@G°‡ªØ½¡MãÉ@öcŒT#rÂ7j« ÀiküwW/‡Kon>„�.xmÙqÇÊ·kðüuÛõ| ]Z7ã£c¹ã‚šrÛ/¾à²èÂã–£Wh¦OÐø ÝßÚAíävÚêñRÔÒùòõ”ñÎ[`D%F—l üM*^|"�Ä[Ïû%f¶H¶u Ó"�„,SC_jÀ+}4‘â~uò-[Jhœ>Dz@º¨„Z©+F'“½m¡›Å$¼ÑöÃAy˜ÈŬtï® endstream endobj 746 0 obj << /Length 3701 /Filter /FlateDecode >> stream xÚÅ]“ÛÆíÝ¿Bo¡fr4—\~%ifœ‰�º“¦Óø&IÇñõ'±¦H…¶¯�þ÷âk)’G9¾\gúp§], `,)Øì7Áæ»'ß\?yúB'›ÜÏ“0Ù\ßnRåëHoÒ8ó³$Ü\ï6¯½Ð×þö*M3ïÕ?~¸ÞfÚ{öËö*Š´÷·m˜y?=ÿq«”ò~zùüçí›ë¿<}ÆŠ:Hü4Ìà<"¦RÄyîssåð®ÂöFŒ}}°p’ʼ¢i[Û�¶°ê5õ®¬÷ ïìÉ´¦oZž–ö‡­òdë»-ì±0oû²0oLû%ŒÂÈ+{†ì žyV(Ô ÁSw‚³5ŠÜ·¥Oj†ýás¤¥¼›Aˆ•5œ×õÖìPZ�ðJ)?�c–ªG©Â,™R a�§UwŒÑÔø{Öˆz`hWî,\‰sÖbTem?ëîÑe€iåÄ[à«i�vÇÓÄ“£Šæˆ³›²&í"hd´²·=cjÙÚ–û�²&á¾m†Ê*ƒdkÚ�m‘í(ô^ ¤…[*Ó 2 +$ÂpÄË»¡k·- “ƒNnãbXw«�[u8Bÿ†.µé¢^P\ÇCV  ¶ö·¡lÑ^v èÆ8šž•ȦEÞ-èÓô%žˆSä}Ãð¯EðZP0�zê=’nR×wóí¬A†Fh³4BÏš®D3¡ñ‡¸G‡à´¬™ÈŸM÷–”TU_ÌÜîùõ“ßž(µIS?Tá&É´ŸeÙ¦8>yý&Øì` „ö£<Û¼'Ì#üE~”¥›jóêÉßç…ÌÒäcxp�BøúSöë …(¯PаYÁÊ#˜Ð¹ò#’ã�šXF³ûºMc_‡ÑÇ)æ¾Nôe¦JbdÊuÉ_»ßL§?Ê�fí眂O@à‡x\æ‡. «EÌF¾� €ÈÓI¾�°� )¨ÀÏ�„D|0úœÜ\ê-�-�¿§qIÿk‚ØÙ1›×W„/àé èz¯cÉà*­¼ï¶WYîÁ[�‘kÁx ñiIXéÐ{ƒoZâ]Fì} pœÿ9ýx¤‘pš�.©¤ÿ5ý·«Ïäªß&1D¥üQ¶õP�´­$óS ÍÙÅÿɶRPòŸ>r+éïß ¡%žï¨ äB‡†Ä=„¢3÷¨ï4›pŸ÷@ynB ¡ÃBZì¶ýÄÁ§ QC‡n+˜kž‘Fr¯ ñ@ã–Æ-�ïv!€ðœü¡&ßèiÜÒønÍC@N¢£‡¨PÇ~’' Ë~ÔeâÄ×¹~”Ë<”Ä#]&Î}xÑYèha+i:Õš˜vú�è“ø?�r0w°úˆœ# çÈ(SÆÌòA›ßÒŠ¡ÿ½+�†élç°Üzã�€1•ôÿD&õó!«È)‘Í¢ÍE<4¢M6¨æ²~…‘¯‚ô1Ù Pˆ‚Gd+¿¿ÿ²•?ÎÄÙ¨‰¥‡ÓjpV»I5˜D¯ÁÈ$ï¥"+J¼òxªìQj�1N<·Î%vÖT˜ßGPN•ua,Ëœ ÕŽ§�Õ MÎno×6'Ù¤¹<>gÈ@ê–?M- Nö9pL³iíbÙà $xCÕÔ{Û2¬?P&P¦ ©J!Ç.ú’+^€šƒª�®0Öý•U¡·Ö4Hç´ Õ‹;Õ¶-Õo²{Ä^§Ò$,Ma:ësE®ã ËâµTd§y|®ïCp]°GïúùË• g`A9oÀâ-Ѝ¥Î4^¥Î©tÂV vö× Òu)² Ý ¬|Ë5<â”-ƒ^¤ŽbMœL—�ÔÜ@¢;˜ªâÅsEðRØáJ~7T–”^ÈàÁ®©ªo¨µb¶¾¯©ºÖÞ³ªk°2w7¦j&RǻޗÈŽP 4{�¼á0†®§F�pÛ¨.…h²hm/'Ø £ûëÐOî„JokÙKE*àîÅRÖÌêZê[�öÞR‰�z¦cXgmÍ£R>ùÚ0×$ K¥{ä}c 3t‚È>ƒ¦&o…ÑÞÖ¶% ‡ ß" ¸5*åÑ‹-ù�ý.x��ÅùG‚—£*E½|T¤¤è±úøZàâþŽ:@º;ñ¸¼@ A¸ód¸¢/™ëé3i!¥ æ¯*¶¶bX+…ˆå ;ŽM+[ Pô-HÊ4¼À MQ4Ç£¨�»NÜb�Î�k:ÔÖî:.ò9ÌMÖij`4ºÎÝ6“$k£ µÐz~ê3 ¥SºM1Oœ¡ÔøI„u’¯[h9Ä] IhI³Î£&Gš€õË_¿÷2n¯–[{KªÃ•S[ÁýÑÀpUÚA$ÍÕš8â¡ÜÏ�è‰!œ‡Ò]Òx>Cì9w Ág QJ™ÍÎò¨¹%Pn7àÀ&¸òêv¾…¼‚hÝ�H_² 'ѽp ÖÄJ˜:G» ;{wŠíŸª,Ê-^Áþ†1&¦3z#ᓘ'@ÇŸ1)´ßÖ)¤Ãj/ÄÆ–*Œ[ :iå4�äŽÁÝA^ñ /‰&榲sj{x3NŽðª¯Ïô‚zך#ÆÐ¢y|¾0zqîÈ{öêšý½˾ÙNÔR5âîÒ4#3Áá‚2ë+Ò’¯DË^´¸aß\ö¯—äI w@q˜’"äl•¡ì éØÁémÇK¦ãbd¹p'5ÆÿŸÍX…œL 5ŠÒ¸Çð¼£|ƒA¼Fø(ÎHvÜï´GsÙ¹*Sï³·þ¢¼yÂÅ�Ë0^AÀ�B ¸I¸Ì ’„rµ’y(•øa §¥/߇Ч®Ë€3ûTYræ3eKÊO’±x\ŠMq¡¢ÊDz–8 ODAÚ¡1^pv¦%*à€ë™È›' èÈ�ÃÔ‘µãÌV‘ŸÅ#�ä¤@“¢] ¤|~‰ÜìVt¦$ež—ó"à´��#îéÓŠÙóŠk#,XÌa˜�‚e«¯Wx ± NnE¡?B¨6|H�‡6u�Z ÃF½Á˜¾B˜1YTM' ¦ŽÁäƒ*Åñ¨ ¯ž^`1ñU¼ÆbY»ÓI·¨£Ù•/'²„n›U iræsUÏ5š)a8Ã;Â@˜…(~ˆâNÑCÏôðöC D,`r懣SeHYöÐT;®3”÷ÎT'¤v‡²dCŒZ¦ù¿Ò*ûÞÊ|–bÝ›SÙs•¡¼ÊR äV^J,âÌCü`I H',Àªc†îfY4tG<¢HÅs9 U™¨JJaa¦œ·¨%;#‹áWdt¬d Öz‡_ñÝýÑ�jr0cá²g%ä€qG:ºrt��å ËÀO;¡ŸdÑ'…¬´£YØÑñÙ  Jóȧt|ŽEˆ@YW,a‚ ð#®ØŸM¶ë0RPþ-ìzÕ{û¡gójbĨÊÎ-Ü2ÄE=š0oįÁ"ÞgH¼¾ãuÞº:Z�•AûáUq(8ÙÄýËŠ¢æôÕÚ�¡ û~8ˆR_)åŵœ{¢+‘‰³×§¡Ÿej®öªNÒGSó§=žú»«QrQ4 ïgÇÀ‘�Ö° Ð9GZÙÈ…|ûxÇûfG‡�Ž$Ý?‡N¯Ê·ŽCþ8;Ó¿d®ÏïÓ2ëâ{C;¾œÍ¼Øbn1fa!Dýúnånâlªò�Ü�¨‘5>ŠÎŽÂðün„.¼†£5‚­ññÃE(ŬÜP|1Å[KMŸ0¼ø ä 9>(¯ß¬=Ê�¯5}M~ „²Y:*-2�^Øê¦çµþü˜`ªñÂéø‚:à •KIÇ—�)°÷·‚zb{�ß@L®“péMC'ªü*d“\7—†~).šaz » ›0M!¿±ø÷¦:t¦ôÖ Jé,6^0ǧ,‹ÈOb¥bhù‘2òäp,‚7—Üs2ÑXxÖXœ9�¹çÍí2�€nÅqvO�tÌ©R †6œI£�,Ÿç1“Ç臆eOFÙHÎåÇLFø”¤ð”lÑÚ”Žù6€€] )~kÅ—qF Üs'ÓY9‹ú�¸U){Ú#&;ˆÎ 5?ãïz,Ií¬‹€´u¹1ÖJÇËñB’çØUö=µvlwj1w½Lèõôeí��èøÓ¿°»6ýКê L82ï™Ð¼GËí|·�A)U¹y¢O³&Ïpö‚ÚòƒÞÒ�œú+†šš»8Ã^I˜Ø4/_€¹ii5ê4â*2oC¥é÷ã$„qlår§ SŠŽd›áåJ�Ž"÷à‘å剄`´}÷”Ö&¦Œ”W;jTm¨œ›JÈÙ-çj-&=òc²œ2 Ä €��-OÅzþùWî¨g¼wºQ2'Xz�ѤÜâSà6¹ †ÉØt¤>Y!¿*ÃÍ+é:§6 ˆîÔ ôTžîœþƒ…+ `îVázDñ™7ŸÛÒ :˜Þ'©±HsœvPŠ„#ºåß°µ4ÃöÜåçЋFy·ë—¾ «³°Ø ÛùDÊ�m®•Ä�Ÿ§z<œ{ÖñÔKc§L¦QG¶uq__hÛrHƒIo(;¿8Ø �ƇT’×[%KÝ»,à>@ð]"fÐ`wÛðû�-uDZ¹À=F:9®a ‚ô‰q ˆdv‚Ž]h¤%¾~€ÕæH® °ñ×s¼Â–;ÅåDÿ3A_i£§MjF¢B-á˜;Z0ï†2%q¡_ê'RØ…ãÈx(i-=Œ1‘Ôkz×s£º9¥&Þñdæø0§ßJœw(­�¦0Ç=}NO!½˜è � ¹É7G¸„oeY;>vC‹FuÑ£è üK?ˆø/Ÿi„ endstream endobj 758 0 obj << /Length 3858 /Filter /FlateDecode >> stream xÚ½ÛŽÛ6ö=_aôee £ˆ¤xQ¶[`Ú¤É,ºÙÝÌ ¤}PlÍXX[r%¹“A±ÿ¾çBÝ�ÇŽ�}°|HQ‡çFò\ÍîfÑìͳoož½ø^êY&FšÙÍíLD6Z̬v¡3rv³œ}„›ÿvó÷ßÇf8ÒØPÅ à¡1ß½½ü×Íë÷ó ¥T Ãù…µ.¸þåÝÍÜ©àògîÿç\ºàG%„~¼zýw_¾{…@ Àås¿\_]ã”Ï"Oè•BË0ŽôìBZèTLÂU1¿ˆ� šU†€ nËõºÄ)ïóâîùüBGQp�íŒÖ«t½æ¡Ëì×HÅ…‘rg�ÍEÐ0\Þò«l�m²‘øõ«l“6i‹ >«Uþ¦å.O’ n^_1°N‹»]z—=G>�¡8LâþE˜hÍü4«æPVy Ô+$áÁž:ó¯�.ü'ÄÊÆÁ2‡ÙM^i•g5¿ý5Ò�Œ È®²º© ™/šlÉCoËjÓlço…†ð¢,ê|™UÜZeHN P¸6qp]n²1]H1r�y+ç€r±ØUU^ 'G@Ï2õ¤@ åèÅmQÜJ%{âÆQ÷9*!DT6 ¤ 2þ¨Õ®Ç›Öܽ­Ê-«ü„Cå¶³Ù€††¨»8¸YåÍ=ÁðE°M«&_ì��´â®ž0h°>aæEZû®ûDPJ”,€B·'î�´{Ê$‚ÝÓo�¸«ùco8µ•¡TÝ©·O¥ ­íf¹œ CD¡¶ª1A3B §®Ñ¶ý†T!` Ì5êsK°òà5-øÜÂ)ÿ­è]Êû7vËÑûu^7 Á‡›ì-’LÇ—J’P7¶Go¼t }Έt¡v#/G‚|}óì÷gÀh&@JÄ$g:1¡�íl±yöá·h¶„—°B•¸Ù= ÝÀ/ aƒž­g×Ïþ=B¡ÈM8E4t”L*Ml$ZGÉ‚ià\;oî_ÏA:¸™_¸(x >P\!l‚Oð—°àȘà‚`П€]âoð£¾âÖŠ^54¬!xKðKx­“à øýœëžæ‚§€5"t`ÂY Ì€]N<Í‚ÿB^†Š0Üqâ†�® ‰�Dm°Ïé@Ð3¤g„ƒͪcYU(0ß㊰f 4�ÒcÑ*ý�ùEB›z’àü ‰àœà’àbo…�” t(a«ñèB4±[w}Ål}s„­9J'ϲµSQ°5aCÛœN¢PHÑÛš"÷41$CMr3Á[‚3‚Sz.=ÕñÚÒf‹[é~BéFhÂø·æ¿—£VÊÿÝÒ\…ÒÆš“d²`v7 ÏÆ1[¤:Ju„%ÎÛ&NEq„ê\Dûv§:ÑÒ&µÀó=›ã•£"Ø~’ÿ³rb\ƒ©à==¿£çô¼¤ç;z¾á¡',7ãB¥ÕY:;Å�ÁÑÁ¯­E"G:ûHz*鹤ço�Çp‰1µsgqy*Š\*àÒ€ÜDh¥c&ÿd�}Ý­C8zŠÁ1Tü€Á}ÒßЛÿÁ~ „Á~rû§¢8Bɺ6ƒð5ñ÷‚ϵ}Uǧ¨Z%ä'�Ãë©(ŽØ„bÚ$™àu+бçh^£0Nôy¼žˆâ¿L©"‹Ïx•½wÏ+v¢Æ\>’t‚˜C�‡+áTlãÇw%…¾‘mC_€8ÀÐý…8Œ+?x Nv^,ü·b½â kü-Æ‘JSr‹'òHº¨÷“ÇCž>ð|DŠ |üß“‚¡¢ &rOž³Aú"·|³]?0\e}©8 |L íÝ�…7” ß…“a¬2ŽHÆ�ÿ1=ñgÅÆ:­îÚ ꢅ<"Ü>&Šmhó|Œ•�ŽAldŸ¶kÊc,[,¿?š˜û6[¤;ÊoX3È�ˆkILVcÄ�Ï0ð^òK’üSV¦î#{kÚä�iC?ø¨KÞ™.×ZŽËªœe�œÓmº5¡á¡ì!‘Š)�‰ÔÁitœã�QEÆé Ÿí‘ŽÈÆÌFݧãú,†dLÐ4Á^²Oü‚y£Ä…;‘xÞ�¸¤ã|Ù]÷ÕåõMÈﮊº”>IZ±Oð²H}va ­\æU¶àÙÀZ)AK´­‰w9žX)Oî_¼aÿü�|æ„Ó£Ðå×í0�ñªË’ð×׬¤²Êž£FÁ®¦O¥±è¨Iƒ¡�ðYRLgà Ô¾éR;Øð©MÔÌ’£l«öö¨óå^M›Uímp:Ñ�j(ãã“[ž@ŸÇÝCƒ‡Ôg#|:`ßdǬ̓\ßxn†“pin�C;LÞ’xjÓ'÷ëCÉz"“x à8=�Á‰áì燠¦ctÆüy4�Ž 'žÆãá%õ-UèbyZZpxNÄþ©8![¡ÃX|‘_Ûu*†Ž(ŒŽüÃ¥Aó½÷¬›ÁúsB±w a-‚*À(eމ½ÓÿˆèKDä†wëå"‰Ð;„ç–žÙ>Jà•ðþ³€KêPIÙ-£Qúhˆhö#B&BÒ—ÓñÍ”78½­àž®ÎÙUæ“ÏÚUžÄpÄ®òÅTt ø49ì 7z¼ -3„*±àÏû8íOe0=,b특*N³~N½ûXgTsâRt¡D×!áT·k�. îú|;µï²"«ÀcôÍt‰gµŸ‘¼!çkÌØQ7ÕnÑì*ß$?ÌaâíQ׺©Ò%)RðI%V'NßLðÈíÊi8‚ê¿°_¹ïؤۚ¡ÿ�ôÀ�]‘7õ¯‘4SùvP‘êÏê¶p_VT-¨'Nî8ebú:‰4(aœ(忺ÜU <¦aÅ·m~C¾ ücq…Ïø²­Ïå$Z�Ô&4àŒü·Ú—€@Tƒ¹PZb½5€å�[îùcáiºÞeÜ$Öy™t±Ž £Áè¡áΖL «’ÓV„¼¯µÝÆ0ü*«ëá4fäÃ×<0íPa•u=é›Ö;®á±“ZÜòÍl}Ü5>˜êïh–Þ‹Mùý:ošµwW7eÕ•×zCıÅrXû¯•н/•Õ"_Ps“5'ñ^‡âÐLØŠ‹B›ØÏjjè·Ñçc%5-BÕ—ã–Ô\(äµDšQEmDÁĺˆasÝì+Šd5ËZÇhV¿³‰© _fEÃ¥ÞÊ"!Àõ·¢†À¾æÙLoûTb~9鿤�bbÁªÐö÷kh3èjmvÒqí·¤º�1Á¶âZ`^µd¯+>`™eѤyQs/ö7´Fۤє<ðFI‹~²,(¥!vñ,Œzºæ”÷ÚK‰”¼ž Eö´�˜qòm»oZ´¼ÕxçÄo'ììU!t³¡ tm”€Õ×´Ì‘}k,³áú¯PLÉ n;ЬBw˜E‚YÕ®Ýo¸È*"=¢¸)A©ìµg$ÑNFñtMu‰Òƒ øÁ¬°³‡àÁm蹦çKzæ­—‡î•,&áÀ©}ÕÕ{Ž,H—„F�U£;ÅÓ9V™È0¶bT4¸d’+znЂMŸB?‚Ù(ÆžÇì‰(3k•”ªOi|V’E¡í¥ðÜ´µ¡®ëÔ°��¿! gMtVµèdGȪPÇrª�RÓ2ÉÆe€³/+¤H#À[?«Žt2Ч÷ iâþ.NŸp�ňq¾ÔPüÀ×¾4ùÎiä(¦s™´ölŽ#p§8ÃM#¼ÇC»–~8nûøº½ÆŸµyáˆqüçDs¤Gõ( &á`Óýµ˜·?…ÅÔ)‰ÎIç¾ÀÙKÜcp1�RØFl�qÊ�ˆÃØ©áU ­q@·³àB¶Ëʳ7䈽 #!p‡(CØû’¹?ÌÙtÓO1ì@(btU©wbý}·¼Ëîj¥fù�ZJTì6øôjñUð�ÂHúŒj›”/ñÞdlÚ²UZÔk¾äˆ=Ò—Ìàn%6nw'¯ùMw1’¿¹Ï×s:˰ћG½á¢ÎVòÿøVàÂwza¾J,ň˜>¦ 7+ÎYO¹£9gŽ}³äÿž0‡Ÿwíp †èû©ä0œUJÉ‘Û6¡F%h“÷£×CÌu_cÚЧzt:Ü|z�ö®J7oªíÔ„ŠáBÑÒù-c^þî´2 Üéd¯ àËcìñÂAE1«‹ƒ¢,.²Í¶ñúÇ7|é !T 0é¿îµzËw!±YÀ¸jA¡> stream xÚÅYÛn7}×Wð±-P.9Î��4—:)ÐFœ‡¶†[u�R`ɨó÷=³’Ë^Gt¬´H‘»‡³Ã¹Ò"Ù'".29áìHՉǑ\ÅO¶it9൒Ëlsv¹Ú<;I6'…F‚¥JkqŠ5¢Õ•hï‚+]eH´)†9ÚW+æ¢.ÆÈŒ„ÅRL#)ÅÅÜ?©.*d)ôˆ%'€ƒ‹�¥¨£˜° È'‚0©ØFŠ&P0Èв“ª½*ŽzɵbPƒ£LÐ�ÙAS|{K1W Ô%‚  fî1¨q¤ø vcË«K¦¸Rp©0ÀL…”®K±wS±�:N˜) ÔžTÇŒ/+¬Æ,a¤XÀ9Ø,ϦsJ˜@¨Ë’ XʘÅ$› …ïYÕž@r�¾ �>°Ã#…_¹fÓ«ÙA–á ÔåÊS•+Œð d†+quªÃœ1ÑŒÌ5�2s¯#¥à Õ\Leóx°`�=%f|S½Q†¿c€ø%ó ´•„-©0fFN›Á�Âf0 ªl¡˜Åž@² T-}L1 x 8UË ¶'ÉR»�‰ `íí�º·?L\÷l:�-FÝáÕ»E?ÿõ|ú~Ô=Ÿ]žN.�R2w¯»_ºG“p<êÞLNî(qðæK*Õ ¬Å1ú€}§<3÷Ìíí¹îÐu¯fog®{é¾›_½›cñùlê£gÏß»§OGøÿxm:ŠñÈI y˜ÛJˆ�<¬ËR‘<—Ý©ƒøˆ´ˆŠ_õ„”ˆE|�ò%5<ù|S�—îHàáàÞ¸î÷?þtKÁ½o}A^N¯..Žïë DWæò¨k[À°«ÕgDiº¹&p®ðR² \ »6b V4ÛÀRà¹Øf9f„rj”làBµMrââCÜ&ò µ-ÞæF°V_o™Ùu/f³ËÃ㓉KË5ãÅbr9u´œþ|½xu¸/&.öFÝþlºèƒzÅ’ÐLzÜ>‹užõoèÓ4Œ¸·�ŠnÝq9±æªi=Ae—õ”¸Äë5€$Îë7(8q½¥�«Ÿ`GÝÁåìäp‚¬Ä6^î»îíäzáŽ7ý`|6aßÓÅdº˜£Áõ²,�糫˓ɼïyý£ß&§çãç³k×~OP²0²"µÆ—�ÌXIèKÈ7 a*ƒXþÖþ×øC?_ÙÉØƒýï¦Q±âcôˆ}0ÔÔÇ¿„ìk‰ƒÅèõ_³ÙŸ›xÚeQŒˆ5#jMкÀ�<ë¸Ð$§mšÔv TÏ`´„’�F=л"ø §ä+ÑC ôãQXÀ˜J„ˆÿŸ�`Š>iùïô ÄÞ ÍŠ0Øe”츭‡'/žvÙ<ƒ7FšÝw¢h©…ºQŒ…Ü>+}.{½½ùþî¹��Kì}Íó&¶@®Tot³Eªäâáø&¨Qš¡†<€ÅÁ*ìÉ·m é Ãæc1ÈmÛU�L`e¨aßE¢ÔYh@‚Õ$‚éÙ‚„K+—$Wo½dnüw‘(¦8Ž´ Q\B“H0y¡&ÃòQÚB”ðùœ¶Iùƒ{¢åëÖ YaÛº&�d2äeƒÖ´R£niˆãl°Ÿ &ƒVMŸ˜Ì}´o°&êc8ŽR¾ÍqìDü(Žc×=§¡°ú�«_z§ æžÏgÎZn×5âk´«ˆ€ð³;c¾2Ø NÎÁ!ÂO§çÓ³'ó�ÓÅøú1 kSBá·ózFs$†½@3ŽÄåKúüsþþüÉÙdŠ/\Œ§g?žNv×G“$»gÔdÓ.)ú´]Q€†‘n£[)ìÎ>VÅ¡eç`£ž)#UQÿ"*&Nè_²Ï1;ŸŸü=¾ZYéVw×õy¢åp| ¼:£•² ¼:µ!ŽA‰ÛK©è[Ã`»5anÛ%zr8!)·mϰvÍÖ&ô¬¤Ò ®^57‚÷Û&ª^¤m„ ¹qѹ6‚«5Õmj|:tßmkßìÐý5­j£;m4¤�&¶ãC·²ÜiHÌiHš—ðö_÷Õö¿‰]‘o£”CésÛs CÚÅvÌ›$µ A>µ–6MC¤ŠCXF!Ž55aSa4³ô?ðªÍø¼¹ {,2x«tO°~mHær'$³|MHÞàH9ïò~§¿î³¿âTMû¢< 3GøX·Þ¿“ý»ÝT³> ©n‚WíÌåF0eøØ\«ÏEZÁ¡¿j#;%7Ú"ÃppD#§bƒàLÃ…d 2ª·ïƒ`&…™·é¼¾Ê&«|�4"�UNp6·îÏN«7êô¿'ó endstream endobj 788 0 obj << /Length 3794 /Filter /FlateDecode >> stream xÚ­ÛŽÛ6ö=_aäId^E²Ý›E’6¶ÝMÍiÐØšX[Ûr%;É è¿ï¹P²${Æã8¦)^y.<<ŠÉû‰˜|÷èW�ž¾4Ù$¤!SÙäêfâdj´™8ëSŸ©ÉÕlò.Q©I/.�óÉ›_~¼ºð&yöŸ‹K­MòÓ…òÉÏ/^_H)“Ÿ_½x{ñÛÕO_*ÛƒhD–:åa=&Žy$âÚÿW�þx$¡*&râ\ª¤šÀ¬Td“éòÑ»ßÄd]?LDªƒŸ|¤�Kø…Ôdf²˜¼yôïdª¥>B·«ÔNÚ_ý~Òÿ|©æüĤÁÃ"H5‘*XM‹Ô‡ÀxêšO_faâÒà„Äñ º–$OâPÜ9®FXgòîÒe>)..C–¬¨Ü@i“šê·TIõŠÊšZ–ƒ•ˆrÒ%_”w/ ó�yZÄ��ÝË-éSìYì:Ä™üR(ì–™`¾ ¿œ$~yâ—'~yâ‹'~ùä»^KNå²Wæ±wÄA/v ™PÉ»»· ­è-â¤ë-Ò¶ð^Q�7{Cõj¼8ümÐx�ý"¤R˳Ø*ˆ3Ù/%0˜Yj¿÷E�ûޏïzÜwÉ*ûcš^K³Gzc4±\2ã彌7 á{Ò> |�0±^ìC–`jBšeg©à“AœÉT¡R *ŸX•᪳YËÕ¿@‹,U.Ü�ˆNµw{´‚H‘¥ö|ž/ö x‘š‡Ì7ÂÁek@0Þ§zÎØÄŽ¥'Rb|}ˆ¾ù10¢ù‘y•JoÒ·^£H+í“�åbÁµE¾)j¬†ä#Z!ù Ë wn*î©‹Ô6ÁyXÃ?‘iù«ÐfÊ�O®Ë¢‰ ËÍüB&åŠ?¯^¼ú:‚™´ª‹'ðm]²]•lãæÊY„C ‹:ÂÊëØ_4M; _¤(p@…KÔB6^B?V«á¸oæùkWä¦y‘ÏÕªžqW¹j`ÍvBÁ�°¹%7MóÕªŠPš¢þ€s»Ñeõ5 ¹­™(USšôEÎ�€7OŸ•ÓMY­òú–;–9‹ º`D.�iZëdZþ s$,64Eœœ/Øtæï¤DVøîˆÎ«euaeò¾Æ2_ÏžbÂ$ƒS­=N±" 2éËdÜ�TŒRŸ3¹ì�bv\J Æ.Èñ!®h›Ülkþˆ,‚ËÞ-0Í R0®ul¯‹f»Ø”@îÕ{lÉ’›ºZ¶ âÏKî´CŠÃ7K>Öˆˆ¾#",ô)Ÿnq\µ*Pô}eÂ+ªG�Ʀ8@¥€†¦%;˜þFúäí¼\ [7©¬If€MÅç©á8TÁÐtøà#�Ã˺à�bã´ª�&QòV3Àx˛ۈ"Ð`š/x|±(–ñüàá©D\©kY¾Ÿ·Ç¦…ð`ÔÌӈ΀¥¨ ´AYª¶k¬ªdZÔDÒ}â9�Ž‰á€„ †Vû> ³€¶®9+›éTÁŒ?ãQ„)Ú ËƒÁÓIÄ­Ö‹ØPÝ´³ úý±º(žƒ¼Ä95³ä@k<ÎÆÂžQù,Æ÷$ ¼2p܈:\øT[ƒRÈ_u±5üQáÖÀpY!r Ìß«)*E¸ vó›M½�n¶uüÕÛ{Ç>6€(FÈxDbQ�E> –Âx“\£ÊÚðVpPÙ2AžC½IG—¿é³µT€KÙ0ÂÏ ÔØ«2âù¼î�âýâdËØ_…¨oá_FeÔ_E¡µÑ“‚ᆆªî»và³ëJX7Øvéø}AU:õ;0S”Ïjµ‰<Ëiuøkàü’<�= ÷׆[Iœ‹5ÿ?6¬Š²ö‚ ü£ÈÏ>V4jÆ­$’}Å a*(-™´fA²Œªž5ímƒ« 8—°þÊðdâá*Z=›µÇjMµ,¸Æ»D ÝêS Jó$ž¥y9�³rA¬ù ¶ú¶MÙêæ~ìÚgèY8Þú87¬ëÔk¯M±Ä»ƒÈ£-8=R `>Cìã®-/ڒ熟³2*WKÔæÆf:‡óùÕÝvlfS XR'ÜçØô™O•ÉN‡0°÷F8Ø{¦Y V»‰¾Øß.@+ ôF÷b LYòíP_Àè³P<ÂÝ(¢)‹5Ø2j€a· •ó!†‡œ<-’ïÁY4É ö<£ús*ßRËOTMõç{n_fquð ŸÂR`œâÌ}{¸‡Ê<¨û=‰cT>½T2D´é<“ùO$³¹Wž¼ðí[*×THŸ|"Kó×uýB忨|Á�yØS^í[¢î_Ç©§Ð™2çPïTÇ�!ÒêNHÁxÊ8މgÆÝå6¼¼ 8ƒ`ˆКÙЩÓî#¸,æ9™·ðylÞNñ&Ÿó)䨌�î— ge¶¯Œ‡6­!•5PÆd16 ž4,.-® ¼nn¹±\�¾µ`N‘‰áÙÇŠÑ8´+PëFu þ}s».¾y\®n�ì.S©ËLϪ� <_ÅóëËx]8›‚¶Þ¦×uñ¡ÌÑxÁMIuצ,:r´§ü§ÚؽJe£]t¢•l­T¨D3¬A°×;7:ú.+Ù‰pŒØÜ•àCV8Ø‚û´)šÄt, 6[ùR†Öïs•ß±]ÊhÀ‚é”� XòÇ"+¿:Ú1x&…<#´càL>;´ó€ùÇC;gl¢ íœL‰ñÉß§­ÍR°xÎ !ž â¼¢A‹ÌµÑƒ‘~£ùñR¦êkÔv.ë)S0Õ½ï¬p8À�,o(7±>9ºåÇqJ8ðYgùËÐPÚÂÕuO�:;+ÏcL–z§Îbè© Îd(Ú«RÆdæÃcÂÞCD Ù ZU—‘£;±3À¸…óuó1‹t¢‹ëÇEŽ Vªùî–xÓ%]L–].'KÞ�Ðt®ÈØ4Ûù¥—$•P:°ÿ A“((™�9ÿÍð\+þªø¯nûŽ*YíRóy~G'7§‚8WnZ_2ŸëÈ žäÆÅ'çžQýº+Û^Aå‡Ã"%¼ègˆz©Á‡h*™zõ™5 òrgYO, �|ž‡Ö é ÎôUZîK%‹UOBL.©þŠÊ]^6$ ªTŸR¹éµÌîJŸªaœêØøORa9•˜¾Ô$–f”Læ(5(à~Þsrù ÷—1¬Ï»°n$pÖ÷Т4ÀÑ @ ôõ@ný¿‹J}ªœip_Í8èÓ¥ ÀT‰‰ë(ÑSML�+£RgFGðj^؆LÛ£Ê%¤bçîDz]\*°@P3(p¬šíõÿè¼N7Ü@¯<ÐïB)ÄÊMÏUÅa$lãL ÒY¸˜]¢¹íœ|6kù«È“kµÈÛ’?v;a±£=Å-,·MLíd:u™†êö¸HR Ä\ðqi"Û)µ�•^"ª/7Çóœ%„uDøxE9 B%ÏAøTÇv>õú¾S·$|1ã$Ô‘Ä“£Ä>õ zÔt4òá1Á'ŸŸ—~RY–Z•�C¼S!'^R�e_’zy‘:ùÔ8ܚʕݧäƒÄЂœ�¥N…pœ’®Q!÷( Ø}¢˜@Ía¾/’út'ËX!6œóád ˜=ÚJ¯zÁòMK$Œ¢ŸŠ¶¿UŸó*ádG/deð=“g|�Ü]ž^ªC½»¨÷¯å‡ç}Ñ ¼B'ùu¹“I9?l �Nã+³ ™�±nâ³]ì�f§?Öž†“ÇØwÍiHþà'a}Ø‹rõ;·Œ€àBôæè‚Î5°Šð7Å’ÛèÅ&;œÞSÆ7y:iòe|�]+hƒ¥cïÉYŒf”œmŠâPf†Õã|1€¦÷uFw˪ÏÛ§ÝSÇ;w …N½Òã-Ü®¶teÀ¹Œ¯e�îœjµ£ x@ôlëeSÚ‚�„�ã°*¦àóëW0~¯ã£íœ_X3Æ:¿�?mçôd°×Í®‹¢wë;V*!b@o¤ùP=™À†’_ðVü5|´hÛ×Ñèuá£^~ìÛÍý8/V털 |:~È?¤„xgE%3 G¬øá5ûÐÔ>Ô ì½Ó ØÕTÛzë-—]û.¯‹m@­||�þ�óø°�ËøôÆ12´ À�Üiøˆ©þzYÆ·åyÜ?+<€àïD†ÛÝK€»ã“.“™ cu�¢“`~dÎtÑ=VqnèfRq`Š�|K ZÈŽƒ[Ñ×…©‡ƒw©RоR&¤ ÑA÷½DÐ>+–jh’üÇ~¼IÖùû¶C¤•bÑÿlŽ endstream endobj 820 0 obj << /Length 3455 /Filter /FlateDecode >> stream xÚÍ[[�Û6~Ÿ_aô¥2�Qx/ÙíÓm’¦èN»É´Ý" Š­ •­‰$',úß÷ð�”%Ûc[Ñ,6–Hêð�<üx;üL&72y~öíÕÙãg,™˜ØH&'W×JTL:Q‰Žµd“«ùäuÄÈôíÕ�Ÿ Ù•”*æÂ€”ùû÷?_=}9=çœG,žž+¥£W¿_^M5�.þåÒš2ý R”Òè×OsÉ—ßÙ€€ÀÅ�S-¢ß_½xe‹<#¾¢[µ<§ ‹I&çLA"wU¸ZdÓs–˜hVVUVßBDGåjž¯n\ú÷iý‡­AV.¡±±ONÐç}¿Î”$ZMi”6ë*-ŠO.¥Ên+H,1Ã|=Ëj¯'”\7ÕzY|´¼vùÚïé;W)[î‡é¦Ôzf#‹l™>²í†ŠØo›$qíK —;Ëg·ô&ÍW.ø1o.„eYcfw³ì¶ÉK/uÁNT¼Û‰ �IÒvâM•.ŸW·N°gq.cIy�‹{�óôêìý… ™Ð ¥,6ÌLѱ!z2[ž½~K&søøÃ„ÄÜèÉG]Â�Ç\«I1yuöÏ-PK/bä! .?Ù£AÆ”ªST¼‚¦î*I�µ`cê‘< n‹`ÙðÞ5¯4&‚V "RÜW©ÁÚJÅ`-ÿ«n&ÝèK?¥(=üj N) `:ƒ°˜i?ViAÄi@u>øÒz%'0¾¡NO¬µœOÏ ‰R|6>¼¥ÚêBÕIÓQÇhk‹èWÓs�£Q÷6\c8ë)�¼†iÍDßøÄíüçW>§Õ²Âpíµ÷+x`ôH CO™1Ý;TÃØî•†Åšj¿blÍÞ}Ë“X%2Xþ?ŒéLg°c Óè^Ês|VøLñ¹ìdw·ÎØu! "/»‘ëžt€±É:ëJï@€8¢v pdMжp#Q[‚«¼ K,9ñá†gþëÌIp,–‰‡¡FÃA$±xPƒiü$»ÙÈNŠŒ.ýNˆ›NúNO'Lê{û çCKèΉ¡-®ÂpÞ©ÞÍ¡¦sŠhPt 8�©ac€0TÃh p åR×D}úqàϬÁL¬�m�º$ô!bŒkáÇ] #êúu¨-¶�Ÿä¨+PÒ¶~[YZaÔ,ÒÆ† z�–iå’óÕuY-Sçw² ³Ô¼ëËú©6Q¯,]­Ê&m²¹Óè4kç˲�:[Õ­è}BÙÊ:Ñšê“û^dÎÃV · Ùs¦]¶ž=˜üMϹàúÕ`_/Êu1wa[MœOðƒwÎò7„‹ E(VÄ~už7+–Y×aícm=\4¿öïÆåÎk¿M«&Ÿ­ kHÔVzí­Î:Ãz g‚½%oL°§ÉÝŠpî*ÂE¼‰¾mU“æ«ÚûKïh,|¬Eíò•×=‡#�ZŸk6kòàÝ´6µ[»Þèù7ýrq�RNy‘Ö`Âæ‘�eÍ×¾J‹´ë;µS÷¡p^Ùò_eߪE9…þûè«Z¥«º@pzuiÕVþêïkšÍŸlÍXP×®û9ÔÞÄLyë~—YL¬ò€|±XÄгÇ�ªœ”Y˜óÞ�„tªQêîÝRa£¥•Þï‚}üŒwEuœlÖ—‹=åƒÙÑ.¾�²�lOYB¡‘AÔ¢UPi�.hÕùê¦È\Òze‘dC›„F7 £r)sÛ›° ‹>c¹ôÙüÐÇ.A×7lÇ`¾Ñ}lÜZ�›èÎç‰vè„Ý»›‰0¥²bmcžXKX@±I3pÂ?kÇM Ç»‡Á*zSno)´S®¢ ¨„)[¹–ÿ¬Fq'©ñh«ìµ„9¾D³�NìàÕ¸õ¤\GßØí®Š¾š¢£A¯EÕñ`´Në³°RLD;ÁVŒÆDÊQ¶ªâ€­¨‚ñ p-5DnŒ�y� \ccK 7=oî »=žÄíX»sLJeÇç€î£N,íù1îþ�ñ$‚nì+éúJ¢“�£¿‘ûð�ø¼ÀçeøjE·úmßQ…3T"ñÀ¢PIØ,»Ýë¿;.´KLqÌ«�‹TÖ¶`ÂÇTï1²FÛ–n‚�ÂÔw š`xKÂF¡i¨ŠÃhR\‚J á·­¯�‰TýŠ·úýƒÿóN: CkÜãÐ7Ö0oO°�£ ø1¶ªâ[Xæ” núÖ0­q6ªq6º±w½Ôµ™û6ÿy¼ÍÂÀÑTñ1m¬âx›…�Í.eûÚ¼33|%Çf`Ü¡jw’í³Âg†ÏNè+7ô sŠ5�Ù±»Å#fªâ3j8ý ý�fTÅñ�¤HT,ÕÜf‡�A‹"íîM’íEûê ¬�öæL +¦ãà`­’cüy‹…£!|HÝ1¿µg7°¼��–©Åó°ÝíñÌàÔù2wGcæ�¥�è7þÌŸE®Ë( ÇTÈœÅpÄ€™á[t:à÷¢@îÍG'w]z�½Ó_{ÚOÃÁ²`-˺q!—B}s!á;wF��=Õ_»ðæ¤c½P7 ¼ yzä$›°ENB žðAÏS²Å®6$%û¥×–ÚëZdû<ûèHxÌ4¦'ǽqÏX¯½q†�‘jŒ7îǽq#êá½qƒmqœèõ‰ù(À` c]¿¸˜†Iç‹ úضyuW­Ã^w®qƒ è\ï6˜’·w {®q•ÖÉ@ðùá®��BeâQÅCŒ‰†½{ <]È´€*\ï\nÎëÆtÆ8¾@�þ©Ç=h0m±‡H$[2Éé÷HœÅ"¡Ÿs�tÐ_#10PÃhÀÆ™²ÀC1†DrÈÊÅ<ï¤è‘JºÄºEyîb}ʲój«=Ë_>ÑŒKï1œƒÁFÃFÂyK>4#©Ùíè>1‰n9û|†.ݨ…Ù/=šRÜ‚]ÎÓ.A1:€ŠÂœ›Æ 3Ó¾Á` £¡g&øÉ—9ƒ\¸Ø;{×�Y‹…Aõé3È) �ËÓÿa� ØJ�", Ö0INß�° I´‡$ ÖCí!‰ö�Äô^t²SG{j³{ÒäÌehz‰óCäÇA¶Ù˜ÿpã|›x e8ú6ÅÍýÈöoÏ‚Î-ÁY]ž¼×²¹fa×Ö2ÿæø|6pÆø­ßrß{²Ð:ÀÞÈÕ0²<‰¹TJ¶ !9°’} áî6Ú¾.{‹cÓ#êíãbš{ÈÙ_ölÇxLä˜?ã Ö0:p*6„ý/èYœšX*9Â!d5h•Œq� â¸ChD=B¿µÅAz–HÐý*ìÿ27ü,¦E,‰w·À do X]ôy[n\29g4ÖŒvÿ:Ùz.™�5#ŸÙÌ©¥SÙ/³Ò{G‘d%:Ì ËÓ±ÃüÚÉ.S”õ9ç–-ųʻ$]æ?òÕÜú@§Ñ…Wê,§Êæ±nNû®×ï�J5s´›di5ôÑ>wf³È>mÑzn²U|£\D·U†êVÖíìBá’-� yRªåIžºr÷°—’Ö„Èøâ=øäÀÙ€õ»ºÐ ÎF�9¥zÌ2HÍ}¶Ô½‚Ï×Ê·þpˆXÆ]?ÃÕÓq!ËÁÉ@¹cœE§›BËUñé~?÷Üš,0Y¸N¡d۳ʙƦÍÓ&u)§54¦vièe·bP—¥ír&¢KÐÑ"«-vÂþ?² î!hYàŸ<äîÜ—z‘SÜðØXk?+º®9ÊñæìçÜ“ÎüŸu!ßz–݃šå“=|+;DœûPìç)X/µ æØ’/*4�²;ëo¯ïhTÀ÷$1w1Ðä‚ËÔÂÍ#·3Ì<,³;ωËV3Ûü²vðQ¹MÃØ²ôZ-©ì Ýîýë—qçgÙ¥Ÿm8g[PXsèF�Q+ˆ×*"úÍÒùü˜ÙãyÚxv^³À!çc³ê·Í­S¬Ë­c°©±í‘ëÞªý!C¡š?WˆÜ»ÖÖ=ûäÞ>ÝnëÎPIkäU�Ï¡9s¯Á«ôe�lCíi§?œARßUyH*ñØi±éËø¾-étQï¹ endstream endobj 857 0 obj << /Length 3514 /Filter /FlateDecode >> stream xÚ­ZI“ÛÆ¾Ï¯à-`El£Ñ�-:)±äL*eWJãÊAÒ4I”I` €š™¸üßó¶ÆÂ�d—Ë¢ûõþ¶þÞk†›Ã&Ü|wó÷»›oÞÙd“«<‰’ÍÝ~“je�ݤq¦²$ÚÜU›A¤bµÝ¥i¼ùþûî¶™ Þl3ÜÝþðýûí§»}ó.ŠgsØ0Qi”Á <\cŸ›PÖôßoÞ¥ÑlÐÎäZ¥™Ý좈†Ç~ uº}µ•üB·ÍÇÐØ§í.ÊmðPt®ÙFi0·:p}Ý#=ÜÓCçú¾n ºò ÷ó¥8�ž™Z¶M_Wºu®bRû0ÀÀâĽ÷4¼ÚîL÷—�{ÜÃ' \Y\pzÇÄáèžyHY4M;à‰`Ó;­UǼy¸ÝY]ûÀõwƒ¤Îá¾ñH,\!QuÃ�woo_1…—BZ„£0çNyn<ÌPÔ ÏÊ :ø¼¥Õî‹¡>3¥èe/E70¥Ý3Ö`ÂyXéׄÜQW²[Jœ…·‹B•Eé�÷û È;yª› Áx‘g¸A’7'y �„�‘/ —øsp�ëê’+ ,º&Ú%«tE9Ô¥#ÉçÂpl8¸6Ulp¤ su�;¸X’'P(ÄÄ[üž]ÑÀ�zœ=µ žòt©j`3F Çb1$ ŠFê£r"µgæÀæcòæ�zn{]½ó«�@‘x*†Áu\®ZÖÀžG¢¨¯47‘£<< ’c`¢ör8¾öàí¾íˆSPܲbùÒ»±Êb(±Zën»ý;A ¼G1H×�ûkçÊY•‡ y�0Çõ]WœÏž¼Y^1�"¼ôYx&pya~=¼Þ|$H…Ò «÷~cÔt®ËöT¼â9JÔ)X}(–sö§¢&9o4D½Ó‘Ò™öž¾ª?×Õ•Ý¢ÍzqY0½…¸¬·xl!оcË@{W»& Ú�Ü­¸mö튠âTÅpuJ_ôÇ‘�àJ`ö#¯<Š +“Ë¿òF´i‘H–«8´K‰ŒÇ5: Þ¼¿­Hö­Ô{p'ÇåEÇ9_t@^-nn\\/=Óx-\ _ŸøZAp;k>�–ùm®£ÒÉË#Óÿížþuh»çƧ™²ñÜD’þ♎ëýÊ"Ö‚¦�ƒ~Ù¯š^¬’\Ï$J³5këă…0¬À¿c:¶zÆ]üõÛb@ÓŽâàÃåЫO²+›o•§&£ãÁ6�J´0V›•ÍS¬X5uc{ eU˜¦K‹zƒ¶‚»|˜nQ¾÷ö]{æ66(T�VS£.1…,˰e­œ23 GÓøF®l8ŠUdrßi©$´aâ+ðø¾w¥_ßDµJ£ÉÅÙ´ÍÞ ËÝ]ùºŽŸ^]Ë ßaázoñ›á}�Õ n�JèT4)^VxWÕ?ɇýù¢¥ŽÓ”ØÛ5eKp¬"KDzTÁ#Ou�:�æ:ø¡qÜt®G/›�¾bÜ⊱ÕM?¸qk²h‹2� !F%Žbd0x‘sÁlÅVduçv>=êfÑ®@Þ«Cçd�Š|;–ú¡»”Ã¥#8¥³à¿GD5ãˆ#ásè7uåP½s ‹&yTŸ·qŒØ‡.ºƒk/Ä^ºñ Qk]^NdŸyT—ED( ªûK‡ðDúvÌœ ¸9’ŽI,Øz“`-l„sÉDHìÄÁŸ%ÜÀ]Ü®m~ wQ„v„ð¡&MÀzq(ˆ‘¨:XG®Àn" Vˆî=Š"¶ ‚R-:Wô C”“ïêŽ& añÜ…c_Nrt\ø–‚¥ª&s*ºg®“›ÃMø1c`inF×Xpa?)o8[¢ÉvL"3†/*zÿñi< W�·»œ*®‘IM)��sB'Ë„/é–� S ´vkp …Q³Q•›Æ­YÎçˆ]çõ b×PòÚæ>"Âþµo&ŸçW‰gH +~Ú}Qʸ H%õ•¡+š~ï:†1:£â4¸±Š8³VN½Z�Æh‡Y Ë>èGrCYX[:‚�7àcn¾¼†´�Û1Ë÷�]»DS¸®²ÅEô™_‘lbÏQXÝKïw3·¤|fç Zô̽÷î‘[ÚŽ¿~ã3ŽÓ KÑ9ª;G*×É’C¨ÿ S(¢ICŠÓàCúYô…$,\$ÏT!vv2 ͸âòÙ�·p�Ö·Óe:WH賘Dv–Õk¿BÁ]öôßHX³E/rÐÿµP)\I”5‰AÐØ!PÂ;àw„HËqIìÍãÐyŒ”M9ª,¦ì*`¢°&Úlr·€…› Ú` î�Í#õ«#Êáâ>»×‘áQ:Ø2sË3!n�ÇghC-Iƒg „C£L¿@C³b†o$÷5,I@ª˜ÝGÁØ ÎA ul|Â/“½¦4�D”%À;Ô?Â<,ï�l>ŸåMi"™q‘×[Éwex–�­ÊUjMãþÙJÄë0ˆìµ'qÐ?ËŸ8Vž~îYå= †BäPámè 3ÆPº°*ñ$s¼ŽöÂ`½sâÕÐüØ¡É~Ä”dâ•£ì»+€Š.wDH”’·–g¢†’œ…¥5±ËŠj&F¥ù˜qûÐv€Ä�jMCc¼©F%` óg¯òTËÕ1ÄVú4îN繊ltå°ßÞ¢SLH0—{®s:3K‰A¡¿ð0óKy6¢’ß…/I@ÆÖ|úVÆ9yÛ¢— ”œI¬}÷Yš7"žÃÌ=Ž� &±©?vÕžÑ.^rÇD*Ló ò¼œ `G<â„n£—�Ÿ\¡®[›1�kÛ÷o»•w6LÁ©eKU™OÝ®m5JÀƒŽùOÞ`˜ïg¬W9RNœÃ÷?ÆüD¢Ãq 2ãÃyâ„ gv °Ú›<ò/Z0²î…Tð€ý¥‘¶RèÏÉU^…½Ÿcý-5ÊuðH‰ŸaÀ]`�—Ã’b• >ò�<¶y%ùŸÏ†í¾à[ çÛ�'óýÛ¦ìÜ 5ñسÐ._–ߤ©}§qìS^+æÎÜ:㯜ˆ\H*ùÌdnûdiÜÊ2áòyôÆÓ¸Ô;šD¬†ÜÅ> stream xÚ�WK�Û6¾ï¯ðQb­$êa!E·Ù´[I‘uÓI\‰k ‘Eƒ¤²ëK{çAÉr  z±Éáp^üæ¡h±[D‹ß®~Ù^]¿N²E–y’/¶‹8*Â8‹E¶×y²ØÖ‹OA’,¿lÿ¸~�æSμEZ‚âùõ÷ÍŸÛ›÷Ë•"HÂåª(ÖÁÝÇ·ÛåZ›˜þn™¬ƒÀÇqðáöæo&oÞ¾ÂE ‹Í›å: >ÞÝÞ¡Ê«È ºÓ‰îÕ |•@lÂæþÞ¨o�t�î,[|á[÷Ö¡X—sì+‘E�4 i¨®jµU5“›Žÿm+í^Ùe¼@BH{Éð9J"V\ˆi¨Ê"LD>„J=ÉñMY’×ê)¼ž1,Ët¸‚ãe,Ê›–ip;X¤ŠW•´Êz³Ü^�Ø�ƒ\&EpòÞµhºæÍýro¡P3D1ÏÀ@O–YÆ*õ?ãÇyÀËæÀ›g<Íò°ÈŠÁêkvQR ½»3®fI("1ã*ÙV¦aç—¶Ý5]…V­ãñMhƒî®É]Ø€»šWš|­ªÞøÏn~ævÊt†oKŠ ›®n*é´¡È–b¼é# «Þö²mý¦ÖÃ=þ4�sªcGâ4,ÅŽ8õäPtqœ“2 Œªô®k–LÀ—À9¬§t�v€‘Ðпv «S†MÓNw+g¸Þ"†DÜ)¯Ðö÷VUg©"aìU³í‘·:g«÷côÈøh#Uã¾Ö� }½H/³/ÉÂué=¯”�4S?ÈTŸ¨A0PxM¸„ýŸ½ô,,üJ%ä¤É¥"PV¥ hzªÔÑ�î}nãÚ*®ÃPÁ˜2Žì~å,ޱ„WTê`v€Ø¦iNÏÒ¼Jqîë3U�@[–C”×8\*"ÑKÏtéªe*>üs3äc� ý§Ÿg‚GašOû b|ÍÓ„;>¨€g'Ÿ�´Ž)Tк¶åÅXÙÊiƒÀ¸ÄÙйà zøNÂñØžF’/9Ì�ߥÚÎèþH-qŠNª¢\gæòs³¤êÅŠGÀk�^'?ô½Õ­¢JäW#ã4giï¡€9Ú|ŽDZ e?‰ô Ú–ŒÎ‚,{îYÀòhô ZfДmÙm ê­?|x¾î앬 &à3‹’30ÑÞ û´lO–:$ìö<6ŠÑ¨Žér~·ç#* Ò ›ájãoB%¢Úa†­Q/a™ûÒ œGCY¡h$,†HÀ�¯“ó5ÇÇ(�Kˆ°ìñLT`ÝIã5aüÛ2ƒ±®…Ó¦FŒò�èW–™0ªH‚‡c¼ž@ëpduÍAÙA NixGú+ö$·ÒœÅ2‡ÓL!¼Ð•±éϸC(õ �6v¨�CɦóS˱í©Ôàšü˜²¯¯zÄg^0|óÜà N¼«™‚Z êbÞƒ’â í*2®(ÓºY¨K¸(�x›”môÑã´æ£¡!áéQŒbø> stream xÚ�WK“Û6 ¾çWøÔÊ3±"RïÜÒlÒÇ$�NãN;³›WâÚjdÉ%é&ûï  l©N¦éŦ@�ÄãÃG0YíVÉêû' ÿ·}òìu–¯d…ÌWÛ‡U)â,ÍVE^Ä¢ZmÛÕmôr¯ŽN›õ&-ó(]¿ßþD‹²¸¬J�‹’Õ&«ãJd´àÇñ×=¬S9åºq EpB×…,xM.â*ÉiÍÏãZVÑÇ5l$#·WG Õ$UF“P­eI3“h|+Y`�95î´œ¿_o`Ùèö$fuÝtÃZD;úh»�Væ‘ÏZšØ¾úñé¿í²{Õ÷$¦í5º‹ ×yA6ãÐh3èUÀümÀ‘·AVUäŒB#ìÃh5/FÓ/ôÊç18³!n\¨ôÊAÆÀVY—dþlº cÝt”W0z|ˆgös‚^<Ò4wŸÒÈYtP`‰íFÕÓ Ç9·ïЭð¡mgI�RÈ Áà R�}4�놟ÊGB”l�*@ëU©¨âR 0Þ}4ë’�?;?T‡+PL³¸ªÂ’x¸Èâ4+$jlÒ<�‹DÀ@ƵHI5�Åb$óèÝmX$Þsø§ðÀà3îÌÕ³!ÊÊLö[n) )XN+üÇ uâ7ò�žòéÙyæ�·o¨âÁߢšçÿîÚ¶�çþDO=æD0, N;O€0 Ò§…Ýëk ž¯¢F[룃rëS~ô›L¹ {èÁ|aÑþ0Áˆ—Ù žwõ<‚þl ‚ë,›'›-ttÝàP��ô‘‰G0yü·ä²2#WšÂmJ`ø¡ÈSg'sæ,+n$z²´=�Ç á&™-*¬Þ–V”3¼Ã”évûPDðÉÎp­#)Wõt7¡ßM¸Ó^1LJš,=þ@§éG äŽXÃ-LS|�ž÷ùHê Û‹Ð^0«×’�ÿJ@x1QêDªo¨¢Ô3‹~Cçðäá¹J­p@D¸+w–§NÏ“¥çÉù�–žÏñœÓŸ³ñ½�=:}—¤ù#I–n@A·WÀÁAú�ˆÜßÀpWý×I[G7ÑÍ]WÑëu•�’¾éV Åô§nz�dgífô(mù“¯a a½2¼“o4.£KE¯=Ãi¬ÐprE],ëyÏPúgÁUOŽÚÎ�ØX¥uÝŠì=ŽB¥�hVÄ4å(·ÀÅçÜŠ4�…LÃ¥ Íh Êì³)�î®à¡Îb‘•ç{~-oôÂÒ)þʆÿa*¥,©é’B«:ªKŸþÎBÓèÓj"Q�˜P1ÕÓ+†o¤¬cYÎ"½Ù+ûA÷ýÆhl}®� #Îe=ëVp³$Îᚘ…|Kí^ ‰:Ò ×\þ"ê1gÉ„kDé]"‹9¡\ |�þ×ǽKð,o³�Õp³x t)Ô!×Tð¯ÈRX—X}è6Ð(X •3-È@fy\ÏÝï†E=ÿÁõî÷Ü þÞ}èht+Åûy7nËK·¤/îÆ»D”Ë5—¡ÂÑ„PkšgWb/¯úÜ®>ÔeYh³ËúÅÏÁ`ºäÐF¸eëÁƒ‹g Toü%÷€6 ÎæÍÎWùwr]o¯y˜  `¹ðð%Óã¢[Ê¢ð4¾Mý~œl¸Oà Ä­ìe·‡-t)�ðÀø²·Ø”å³ÞꫜmÇÿ–̼Ȩ9ÔŸÜÉ÷²À-3Üé€Ù¤n—ß`~ZÛÆt÷ÈÕ¾1F±ãAÓ$±TÈ1 £á”"“�ú-È•å§Bãìg6 ½ö3TMäȬœz5ìNj§í·|#Î"ïûwÀæ¢ûäWÌ—³A¡ýßÉpc;^ÍF‹|YZo å$©K T0Ýï °‹$Í^Éþ];„&Àžôô¬EFb}~_2¾ZNÐN㳃�웢çvÑç‹\Æi/3à~™„§H:Szµ}òr3�Û endstream endobj 782 0 obj << /Type /ObjStm /N 100 /First 884 /Length 1784 /Filter /FlateDecode >> stream xÚÅYÏo[7 ¾û¯Ðq»ÈERTP k×¥°ÅÒö ‡4õº …]8/Xûßïã³ÓÆŽ«�‹ìGÉߣ(Š?åZ%¤P«²�‹[Ȇ1>D[T1 %û¸ÉÏTò¤ƒ6|$4R<ñ~RL‚iÎ ¿´ BÀ¢|ÕVB¦âij¬ž¡eR[ ™SÅ cÉ À™´ÎRpb œ•8«*p®XÝ8W¬n œ!ÂÄÀ4[q 8›ùOàÜüõ ÎMñVÆ®S&{7ì™D°Ì�2cQhƒ2ÔaY¡ªâºpÛ1ì„„œ¨�”�!W#ôd†Vð:�¡UŸÃF>†ãêÐcIÙg*±‰‘AûÉg¦$P¦• ,Q„ùL ¥�Ï0ˆê3 CLßvaÍ ÀY’N¬€³ˆÏ€³@ýÆà¬Œ|ŠšÏ€s->În7Æàì{2XP1W8ƒsË>ÎMÀRrÂY7Ž�“Û΋ÝÚ 3NŠ˜ü kfß #¾º”Àuü‰›ÊÄÄ‚$¾Iáœ5�€éöóÄ–•@¸¨Z‚A °LƒŠ…ý˜0u=+~ªÎ؉˜k&¯É%¬„ ô¨ÙÏ´Âòa[x«¥ì3 ŠkµrPnNHPeçÓ‚Â&L¦�Ãi• ×û=Lÿøó/¨¡Æ à¬cÃZó«·o_L~øáN0L%2„ê[‰ †ß®% dîC1Ázïg�.ààý2_ƒ5ß’9LZ¼],OÞ��ÏBY½óìlfËy Õðç÷Ó“ál˜…[.ÎOfC8…|��Ãôùìý>nùù‡w3üõl‚ ͇Ù|¸£'^ŸLŸ].®–ç3ŸÒÕÔo³Wg�ïé ,M"�Þ—£µXíl ˆÍ¼‚?œÏàx:FgÉ£óê¹’wK’?™ž\½Æñ¯ó7“é£ÅòÕl9®˜_LŸN™þtêZI/\Æsl�0Bs*]”[½BkDìá¨÷“0}²x¾8êïžþ½X XmKþÞUuArJ±"¦e®±z€ç œ9K‹YËI(P’J±ºõ^KÏËžS¿B÷ »áî=ž-+ŽKÜò¢›X6ÔQ ܃, ¦Ôz�”!…ô 3ÂÙ1k·„È…rVÔ#wb)¦ÜÉWa¯O^aÄS£>l)Q³uaY-÷­#»N–ÝðjÏy17˜nîB&ˆ©=HØUíTJ‚(Úº°IBÍ�EZóò£K ..}ò’á`›ôa«EÄí.¨68¸öaa-åN¬‡š}vµÖo’§7RóFÒ¾‘f·RóFÒf¯ŽiWnßLÚé¼b ×¬Q¼~|GÒØòÜ#·¥íÜî•î½r»§€ær´V°æ<š‰y…ŒÈYÇžqfwÞº¼zy‰w/óˆZ4æ­ÜåÝÏ�zQÇzñsÉk ¼*.=ƒ¤º¼®\¹œ%Jé+JmÛÁwƒ‘ð‹p'¥¶Yë+G&é Ǧ�X–È{Áë3‘Ѝg¹Ì^VÔ^0Ô\¤Œ¬ZzSAäëÝ_†–¹w Z®�b0\[2u‚]['¸j”½Ö| Fužsë'”¯J}vÄè_µ×O œ*÷úI1B ïô“§¢^?)Zbíô¸5’x/˜9ú�L¸ ƒÒN;¢†Š®ÓMG²}~߬‰þ\C¼•h7Òöçoo(écr&Wè½RðêŽa#‹Ü3Ëj~5µzòAS2re‚?‰JLÍ/½P�­C0 Õ}ý5®«-ˆ  Š 4¿×‹î(pžf_^Ü÷ÖN+ô¨¹1"ø‰­´Ãû”R¶‹Ñî{»î\Ù£)waÙsV낪‘wô,Øë¼¶�׆»±·oà¾]±þÉiïªÂ7ŠõÍ»·WáÚn…­÷ ë°æWÇ«§4@€d:ŠÞ› Š\ÆS�#Š�}ž{;¤ç1£3Å© \-ù½|ÓH~÷Þüzyw@ú$ ßG�ä–÷)¡?…¢á!±ùŠò¶!)y‹»SŽó ¸úñÕÅüõÑå‡ùpö~;¨}A»² ^·+^Àî*iv�[¨ÜúÀˆoÞ…ýwá7<õk½®Þº×¶úE÷Ú¶ºÅ¾éuuíuõž÷Ù›f• ö£M/ñÿ ņLæÇPﲫ¿—3ìå|8z}1 ‹ÅÛËÃY{Vˆe5PiH`þ÷%Ä‚5Zvjwšû?ÿ^¼¹8º–WçÃÕr¶mòµãvù?ÖÀï³ endstream endobj 901 0 obj << /Length 3453 /Filter /FlateDecode >> stream xÚµÙrä¶ñ]_1yãTíP^ö“Ëö¦ìõÆ«”S%ë�KR3Œ8ä,ke—ÿ=}�Ç,µG¹ò !ŽF£»Ñ' o³ßx›ï.þ~sqù­6‰›„:ÜÜÜo”¹*P›(ˆÝ8Ô››|sëh³½»ùçå·&œAê@»‘öÁüãû«×7×?ow¾ï;¾»ÝEQì¼üñõ×?^¿ºÙƾsµ��sóò§WˆìÂÎößY´;Á ÏÈÿ^TÍVÇÎ#Óùs:7"KF×f— ´@«=7ÑÚ½`*ûC� ãd[å4Ûl� éÏêMZç¼dU^ÿg±\�NŸömçNàLK,«}›Ö]•öÂá}ÛÏœâÄôÕ››¹6Í`F)1¿Ù™À�u¼ôx?6Šß$NsÏ_Æ pPû6Ž�½.Î6üåóÈǶìû¢æN)ßïÓî�õ²úqDˆ¹-î›¶@'øÓNà³ó¢åö¡,Ú´Ípåíý‰‡«´Ý£†Sç˜ö J„œyÀ“sžFåXâŠñ(Ä)LÏ(ä�£Dš¡bÄV“Mè&‘S6Ú5j㻡’�ÔÊ™×€&Í€\A×7¹Aå” Ý܆}Wo�8¯%<øŠÂú›®µ‚}½¢ò�ºé)&B³HÛ D€â6¡÷h3æÌ×´¼eŽ~J°ÓÚJze ]ÙÁagdT;‘Bw‚šm˜1u%ª%åí°_=+Ô�&N' œp=÷rr@æ�Cä'‹qkwó†A@<@°Ì� ìž9¤8ÈeA�–™¨`²^QçÕ{Dæ}í¼¬A@pš¿Xão¤\swHQÓt¬'d1™A'MØX9 �ã´,åî˜=Ä¢°j/{ôÅ )ƒ)ò3¸J¢…–!èd©`d¾x»2ú?!óƒŽ\ûN›¢è¹ý8Ù�Æü«=Ò¡C»{bѧï¹Ï.9O1@û|^ÔÀÀ`W“«ÁUYÖ ö e � �†Fe�iãÎÂGV¦BW–vv; 9Ð:–û#^9ºY|,»Â†'h²';NÀhÐWu#"‰2”¾Å¬¥à~[¤E4h3õЀX¦èŠS 2--¹Ûس¤"Ä ~ŒzdN<~hÐ^ª\æ(Ù“@�NP�Îp mÙ?Àüp‚•;kœá˜m€€@Rù *tÃd,Ën“;Æ_IÆ‹=5:+˜E†�¡+r¡K.*;^’V]3qëžÙS{ ¡lÌ%]ÆJÏ*(ˆšÑ™Þ£Ÿ�¾û¿z�×v"0Ž·]‘±ùà¤v}W„Âb7ˆ�7H"©� `šµ ¸# ½JV>”Üc^ Ú�²%£}˜Àp'/{»~™û®gb»œL 7³Ô¼C .ûB8-�%¤;"²ñáÐåŸÙçL&:‰$¸…ϨGè¹J�<<¯ò’±p½õõ#-ˆ9‰z$PÜ’Îf�”GâÈCÍåwͬ٠hú¶¬Ê^²Š9Ù]AÉZ„NŽ9ä‡èºª4+z‹ ñý€’" AŸ$ÉR@ÏZ4!ˆ¨è9<Ïy<”Ö�êDÏ’ h—¤ðÐ:µåÜ}õÄ]Ðf8w-#Œ +˜§„zE¤PU„‹”ðUÓ˦=¸ïýÁ¶Óž[l>‰’ #œÚ@,G‚‡IJ $ß .‘—–CÑ’\iç>•`Ψ0ÁRJt4´ Ö]·OUÑKqëß=óhaƒÙ†?9 ì€Ô3ˆ–/°à G!m¬[A ëŠÓÆ |eõï»WÿF$ŠÜ™^UXz=—Ýs:gÜö€¾ 7횣P2t~»Å{ȸ¬¦†²?ðšÑœ–—[žq�X»ïîzÍ–ŒF‰¤ûbÐIì.³«Õt4f1è*mÑoK½¡“3zýÓ›—ÿ±ÀEn㘵™máÓqíP†’Ð2ëž�b±_qIIO%9'fiÛs}¸$šÜX8.èmÛ´·ÛâÝPÒ A>Kz5ÄBº?áŽu2U‘ï‹å&EɉU{¶çu½¯Êî À2û]�;a‘³’*Ø€>/ô=ŒÖ 5-¦Ðï@# YÒï‰F³µ ’(ñœ?¶;å…‹Ÿ?aЀC2QE âñ"§ BslϹ[ãÆ‡\2If÷Ÿ öúj…)”&T3®äj)2þ´üiøsàÏÀYPòç4‚0ØÙ/V˲n…æj�Ø_À' Á�\ê¿d_ŠÂĈÚý†?‹iþ\´:r½MÃs=OÛ,‰8:z�à�G𷳫ïóÓòM²vZjí´*ÿì@O3e�ä4;Wµvjjqj#iÏ=Vú�«&º¡  ä«ë‰œr§;ú?Ž®åq`t�™ê7Lu¤Úô ï°~ã‰}~ÉðJ»e�—]p`�’ü‰PQèš±8;¦msŽåé�®]ýB­ãcÊKe$ NñÑy5|¹„ãu3Ô˜hh›S퀠P@ùZ¢(X¬Ï#kU>ØÇ¥]Þ�_#­æ¹NPüÃFÆu©(Rˆ\€ØcDÜʪ´“ÉN^Ë* á.�¼Gn†‚tJYÏcî‡ß”?y�ùr]ò!8¬Ä[ÈŸ¼•³0näéÏ=Šåc)`T(—P2ÌÀïÏi𞹆�½¼ÝÕÜŧLS*Ò.�áœ7°™l8¾�á ƘÑà}õKžç[ïŽH¬›8g3t¹ ‡ÈÇo†:ðyBÊ&!5ÃZÍ€…g.å$UL¾ÌŽRyñ+›ªÙ?Ù|F¯s^ûÖŸÚ˜ý/€ì…>ÎÞúÉ�û1ÿÍÿN¡¢„jø�8_B¢¡ý³ûåü#Úà#6_¨‡´Ñ€Ìwul¯C�7s�P3`d•?9%ðVFž£¹J ?G%ô…Áø|* (�ƒïô6&‹ XÉ †ÒûžrÉÀH‚à? 4'l: Fòä!·û½ÚM˜óì­öî¤�\ˆb',‚Ƚ¸ùA¥í=¾b€CYzâk#zÁºTrUbÔ·]fõ¥¸b…ÏWü–„qɧè‚kúCÓs4’¾ãÉ¿• ÂŒ�îP€’¾µg‘ñ~ÚÙÓ…:/¡Wr±‘¸ØD 2È�@1üÍŽÃ7Ç8C©¨@¢{J¾Qþ}Ç’­‘hòârXò,g³’=Á&Q<äýe[\žVd®AIõxñkÏÝ —1ÁøT ˜á¡·Ñ=вÑí|§C›öŒÄÈ[$¶�…L‰m»ª³[ééfï ‘\�ùt‹¹†Ç$cl/=VÄY—ç�¨Ú5\1œÚH4=wjçÖÄw«)ÈÌÍüñ}Šó endstream endobj 928 0 obj << /Length 3307 /Filter /FlateDecode >> stream xÚ�Z]s«F}÷¯Ð#ª�0ÀÀÍ“ï&7É–sën®·j«?` [”(€âøßçôÇ �qjk_ óAOOÏéžÓ-«§U°úñêãíÕ·Ÿât•ûy¥«ÛÇ• ýØÄ+›d~–F«ÛÝêÎ3¾ñ×k3ïæ‡ÿþüùÇõÆã]þ^^¾¬3´~ýJ#÷·ÿúöS”LÆAêÛ(Ãr,+JhÎU  `õdƾ‰i±ÇÕÆMßD"̨Àz†QâÝ”VÍÖµ‰W4;yù²6¡Wt=�¼U €¬È·6Y·û_�÷[`⮤ÑåQÞÚGyn^±Nkȯ¥ùSÑ?¯#땵v;Œ¶O]q�vÕ_Š U�@w”yå¶"Ê�~Ö\¬‹Ìº–gï°Èi;´Ý« )·CÕê7Æ}Ú9í5 ýHì—Æ#|/1 [Žu)ö±fbŸ<õ³,uöùðaÁ„aP…g¾’úÁÙËŽõ’ ãÛl<†Ñ±gRbcÇuëö¥ì–}ÚdÓ¥�våxë åÀœƒ¤ÆðýÌC® iðö7z'q­Š¤ÀÜkW#ó΢ÞB;G8;w ˜Œ¢F`ë¿A¾�©ù€� wÕBÆcתq8¼DÛ®JÝÉúûW¹/Š?IöSÙŒ*sÕ§.%ˆ8"£P½[� �¥rYàc;ÐV­^·ÆÆtC°Ñ¬qDi2È&…ãtÒÜ*>íŸh¼tÕ0”���^å�Ø�,ð�# „˜1Ø´Ê\ª?*fM¤ ] ÍÓ©xâë×Àƒ˜azÕ¿o8Q8 Õ é­.(¾±$”f^5ÈQ<´úùü©§íT)N{H‰u)AJÇŠÝ®b¯¥=Hnk•;ì ]©pâÔÖQ¹­B“æÝS9H||Ã]Z9Ò FqàPÃoŠã öšùމ߮ó”IFµÄþÛ5û¶Ú–ËÜ—¼6>óÁNCOá^æä…îÌöph“í‘ Ò˜qö�‚No"ä ©Šzžs·I@LÿÓKø4#éU³™Á�šê-ÝIÔƒóu­@šòÀܽ“Ù飓£Æœaƒó±ûÆFI+‹.å¥jèªd¿B’`.ˆÙÌ Iq(»“w dAÁÞœgK‹È×$[Þ$JO[¿0ÛFµ€is«a0ú;ÓšPnk<Æ8ÒÅÆ^ðP5dOé««‡®àü!Ì�Òx+‹žCQ˜©»¡�Ï¡ry™®zÚ³…¤ÉQOÙ5Åøš8bä×é=¹`éB,sV‘=‚rõ)´wU‡Ûƒ"‰vj»g ¤Z=[v0ïõàÙöt{¡óL¾ÑxÛº‹ê÷ÖQ‘�sU¡*—¡¬ûÚ܈eDy(zDy05‡Œ”Û¶ë?‡ÍóóLç{4I ÆŽÍmޝ4©�¶:½wØ‘øŽôTý3Ï­Ÿ„#¸^›Œ¤,±2Ü-ùx‡ßÙ{‘ÊŽK*<ºu i+&„6ƒçÉE ]{A­87n±ŸŠãñu™VØôÌ­£ Üz“€�"¨P8"ç.4ÃØ}_Š÷V.,gÉ{J>ˆ[j�¤Lj^d0VRç©Ë;ä›Ü{n$5K&Î?ÍãIš¶D¶Ò)ç]΢¶m4’­×‚”í‚0$—HS�uÌüi�#w×™i x»Z’ú‰�ñÏ%�Cìk¤�×;"È#ônW§HŒeñœÌIÝ%MqsÑozJÚå‚KšH ³“†¾s€Àd7xÎü‹ÑŸ¦@и‡/|÷¼cT\¹öœÐâÈû©¯ÊIJìfÐ{KkJ¯…úñóüÂxÏ'‰ÑJbéV{ô$™œ¢X6ŠNXg¨¶§ºXLé�õã`TúÞÜS1f¬ïí5ÎqXvÊ×#¾aiAÀæy®×R™Äm¥­÷ÈL9ö6ôlë¢:ô:�YKÄ»µì¬‘ò2!YŠ �Í�DU¡t[�¤Ý™àþ}Ì žÕPliŽ9«Ø[Xï^ù 3Ôÿ*ó„’àË_J˜L÷Gm -û‚€E­‘ScKu¿&—; $Ko&4òŤ1rƒwÉ.±š4] VŽJ}E#’Þžº�‘”�ÁóæúæW¢!“ a“9Ò¿Ü»¹ëǸŒŸ†º¨Y@DîIàžg±·÷8GZ°¯Ö¡»IYO®!*e¦çxʱ#ɳz'ÒèÖä¤d÷ïྫྷ�}";x'‚ÆÏ’¹E?ÛçS¿ù\œºÍ§µ¥Áaa¿åØÑ´f¶°¤Û1®üüi)jiKçu2Æl¹Bn`Ë0¿mdWÙAØD 2{F#Û›g Fê¥-YJ¢\Z¦¼‹–0|zup¹ù;°D‰oãt –xaÓÖ�‚E°ó‹ïsY K'Í(аÒ{UÕ]jN{â£RO1™ŸD‡:UqÖ¥·it�~“œ�ë×4ƒ+ʃtÉ-ïŠÅÔ!zÒë]|ÿ…v{Yx´.èðn53KqÑõ¶œÕ§fïRªP;â%ªïÃxL—)¢š�Ž8W«á)²8Õ§æÀŸ«sñUPí|[ŸèǾ›yš�Ë™­'BÇáï¹p¨M‹]† ³&Ô* «~Ò@˜§#£ÒÆÒ^äxŒ9óòmÛ�õ ¶Ù�,âLZHÖ¾8×9ÏÄÓš™Š°“’’fi;atš»áL>\üæd£©Oh(FüÈmä|7´ß\DHúm*8û/Aeê¿ÒמÈrñ#{ULsÜ^ÚZO± ‘�*ùϩ륅æ]Ý«<„䱘@qîQË6pYû¹:çªÅã"úƃ�™•¦WšªiM…’$—z�9™Þ{®¼÷žå7bFIvóÿÃòÓËÚ$V¼=ÉXE4çlÊ¿fÖFVFòÀ¥¤XJI$`z‰; �—a¯9Þq­%à}U] .$ [*ævJOuœ–{/-?!&ˆA²žÕ O< Ÿyä˹^}½ú·üª�ÚUXY¹á#Ü#)DE¸Ò²óI\a¹q&~ä‡I@úYh–Ÿg? ¤Í�‘z7ä[�×>o®éGG½ùUǬ}$ì¥âr-Z*’ªÐøš}–pªÂp0 ß¡·¡k‘Äž•�¨:bÞ:Ì¿°œ€Ë%§Àò­hÔA²hjš ;5äœq_R";µ²¼|ôÅzÁœ‘Ÿ›1³@Û í†KFÐqøfAbœ"UEv‹'”æ£H'JRJª3i>ŸK>/抹X/¥Ä\nfê¢Û4gŽŠFEþp L#÷øW^ê|¡Û†ìO§Eß6íP»þ¤â_ endstream endobj 951 0 obj << /Length 3523 /Filter /FlateDecode >> stream xÚ­ËrÜ6ò[8U†øtNÞ�³ñ–�Ín´•ƒãDBn8¤L�–”Tþ}û9¦\I* °ÙènôŠv·»h÷�g»zöå7*Ý•a™©lwu³‹£<ŒÓx—§EXdjwUïÞ*Û¿¿úç—ß$ÙR¥*Ì•<ó÷o_~õê?ûƒÖ:Ðáþ�çEðúí÷o^½}õÝÕ¾ÐÁË}‘W¯ÿõ"{ þùå7¹Z`?(�‡y^ ‡EÍ›üÅùêë êiä)zkoÍ�œ­€(¥‚“Ù«"xäÉõþ‹“8˜œ­yù¾�ý4òÄðÃYÀbF˳vöÁÀa’ÄÁÛÞ t×�æº}D&ŸãJŒÇÆñƒ­§Ê:�‚ªCz¦þ 92ôâ8,Ó”ùèo<Ž‚ºù)ÒÚ(€Oó7ŽÊ êOwôyßYB9:þÀt5CŒ X?v}Ûß6Ö!í:¾íqõìGú�òx¦>5­ëÛÑÈÓ+–è©„ OæÍÔUcÓw¦mFøO“›LÛâY€¸’Ÿ¶B“ŠÇ^ž´ Z�:p>ðLÖt·«µúºþ$¡Àðy2£7N¦3y¼Gõí‡6rž&:J¢ÝVâ̘6fPÞ4Ê�²ƒƒ²üyƒ ­¹CQêõ ÀPN½|q7 ö&øÀ �µµã!vÊ:–ò±}S�¶¬=*bªÛ:À¤2R£4Yîžá sNrMÖ“U�íªGüþ,™%ãˆÕGf°et½÷ÙëãG„±ª¦A*ðÐ6ørÕYåepךJ†âizž9ï9M+ Óõ�È|Ž{•^±Öœ SËžXeÁÕQ=ou²Œ·y‚×öæ|½Oc:z2üÊøUª8ñà5³ŽC›ÛVY°„¶,pèY˜A°Ç¥¨¿‚ïÀ¢Ò¡-¢vÓãQpßûV†UßU°gg08àRNgH{'PrÂ8‹D@&±8k+N€ظfSU0G1×çãLC•3ù¬™ª,D;x„:‰#ôCŠxâyÕOmÍöaÎ1^áüLpoÐë�ô ¦µ‡`�ñW„íÄBiCôfƒßŒÝhÒé¿ëõ`É'6”ó†<Äû`Nw­ÝP™4 UVzxe†Ö>nhЬñœÈ½‹£÷Ïó9¸qÀj[οž)@V8#Tç ÞÀ¡s\~7ƒ•Øšîv‚€Ç¼K²÷ |>²C™…q’pœË„U6�L�·¨Ðµ»†}=.âÔMä‚[kj–5€’ÊÀÛÑËœôM%sR>x ñ�W(_ÂÁ·B� ÄJꎹ¾A§Øqæ²Bn®›9ÝYl¯@t1âõv'aIÜ-½LkÜ‘’C]ÒF:‰ó#¯¬}VÄ>Kû° _‹èKp•œy b‡$ƒ´[0‚§­†fv«”ñ.Ð�ß‚àʶ‰ë:ÔaŒzI.è9hÞÕɾ΂­l„é[Û¡;¤ì.)8mͪ©%‡\Š‹ý§`ªä ð-g™ðº²ÃhØ?—Á�5ã4Xyå�{yÖHyÑór-OŒg2$‡×|œí׬q ¦ó³´Ê(xͯü¡o¥®‡+%¼¨4bµ¨yÍðãc#`ðÚõí$^™! ‡Á¹@A·™e`É•½ù›Ù…›�زf§¨˜�ò˜ÏaÜ£ä‘üÆxzN½„Ñ›GÞàˆÂ3&¦ J õ4ˆnQÚq7ˆ.Z‡æÎ»¥Ñ?4§¦o3C‘7•J,$¿­»ã� KG´ñ’Šm žƒý05ìàKÔZ°øG~#¸bÏ>,-TŸw!�,.\Iâƒ#¨N8 |Ò'Ç®)Ñ’d¨ÅI…œýWêáR°‘™'ü”sò€®©©f`“ÓbãZÔU/òLüî¶ëgHÊЃ@TxÎ) Ú"Ÿ?Aw‚j;�ñòÉV®A΄³y|9çH8YD·,àR@ÀÈcÂÓðcêšñ Çctð„ƒ¦¼zôhH(�LÌ©ŸXW×h—Te F•F¾NÜp3¿XTGTM† þåˆ"™ -ú#Á`DÀP?ö˜—¡D�¹ ¥Ç‘îX‚ CcDýó–ä÷@÷o샘ÓE4�(vé’?Aï«À½@ä' ,Ô2™F»/µÈ  $±°§€s7Ú;áAãs6þ‚Uk&qÚ¸B¢,ÔáË®ä{¡ƒ<@H`–šiäEãw¬9-1^ÈnÓ/ŽrFÎ@�ÐÁÜðsì9‘ê¨z ò¤.”9\@ñ*¦–ÎIg£‘¸ë·C?Ý9_R×>³é¶nA Ò‡ *-»¤'¹`Ê+@²>L•ÂùÌãën¯Aº¤xàs¼è±mp�o¤¡±ÊÈ>£o,�$Jà&ì°n ï‚‹æ_ÏîÜ¥}±ªý_]=ûð,†a´‹wq‡i®v:Ͷ«NÏÞ½�v5¼„ƒŠÝ=�žà¯ “,Ùµ»žý{…BSãí£ˆ–ÍEH?ó°Ì£Ø7 °_¨Ÿ©·Ç>j€Š¡�ßËyßÒØa ± ~{ƒr¿ÃGü‹àîÞÁ „0`„àX½ÀRŠYä!�ƒ÷,ú<^l^ä¡JcŸå¾pH²_0àšÊHàÀ2 Î鷡ߎ~oé÷qcQH‘ï¿Úؘ�Î…Ù¨'úuOôJWJQL…e‰a, ÓRͺzPj.qTI: õœîû1Ì}㎠CþVÀa÷·]ó‹õHd 5l?NtÒ�%G"½,@ã(LÓ¹`}ñbÃ$É<àÁŒ“–'PÂÑdgŒ_m „rOÿY|¿þÅø~û‹ñ½û‹ñ½ÿø8LâÉsB©Ê³.€Óݯ§ÇçÓÈw~H)> –j%ÝKÊV'Q„Y1ëáË-ÇC„˜ê3]±t)6nKÜÊ. ³{hN¨O8�ô›Òn™Ñ*µNAŽ(å*QÉohMš¯%~"Ø!—ã!ê;ªS?eâ(œúºÚŸ¬¤èz+µºà1¯¾ò’™›*ìɤܘÀ'ví‘|ÒhòÏÔ”&›I‘d~JŽM@,†p‹ò,³È+Ž^4a°ÒyÊ݃~–åRàES8•j(]Ü•À„¯rj£pQ”Iù”BhN'3ðä¢7IÍèhnF§sÏ õ}“”ï5Ö�i:Y\ðé3YMwã¡)¢’}'iÕàE_nè1wÎß…ì<Ô<Òœ‚7×pØ–;ĈÒ|Só*É𓲾G^û¹›ÛnŒ–º—Ë æûš=u@%U2耈$Ù×0öYìDÚZìÔ†/n¼ûS ¹Ÿ6^ÈqÛÜòŒË’„\x.Í.šO££î?MnøIÒêà¹l·D)5?fáäŽQ‹»œÌÉ�@RÇaq5H]ù"x=.k'/n¹´Ã²ü¿þz®­6ê¢e&•& ñÑMÓ9Æá|SÛÓíΨæK½¶ðØøg5â Ý:¤h 8�œ68#7]‡ý¯‘îtÓœÒíTƒqX¸«tiéœæØ9M¸Ó?÷^pÎh´�ÇΪJòdÌɲ›ø»zÏ´Íg,yWáOöà6nõô|Y¯å6T{†Xb|¹Vûwnr èó!×þå*Ý\¤ÏËÅ�³XHJ·¥R*ÔQF÷Li¾ ”Ÿ62øzànù¯�ó\ø.6ÀÕœ¡y[Ðb $Ôùæ³µ?ÿ OœC66ù™Â=β0˱åÒ�KöA™ç’‡�(€Ôa—+Q¤Ñ¢¨M`OÈ@IÂðãjyi\Í^GØmšWæƒ{¤Åù½´ÐÃ'rõô3�>À’\=âÅD#rI-%©T¹è;EäÖKF¥/Q1ˆ?¬°ÕÉŸo‚ŸÝ⪈×QÙ.Ù÷_Ȥ€â¶¼¨Î�FºW;3ç7÷×âzþ÷„[ûÊ*ýJ1£ÇF˹ᮜ¥:\»p³Y°Ð‘ÿZοt endstream endobj 964 0 obj << /Length 3736 /Filter /FlateDecode >> stream xÚÍ[YsÜÆ~ׯØ7c«Dsp*©’K±­’“UJ•åp$!. Àê('ÿ=}Ì`±K�{€Iå�ƒ9{zº{¦¿éYF³ëY4{ýìû‹gß¾Òv–†©•vvq5‹E¨•žÅ& +gËÙo� U8?‹ã$xóÃ?|ûz~¦” ^¼ý+gþ>O ôë9¶ü~ñÓ·¯¤Ô‘ c™ÀtDKÆØçYäðß.ž}|& ÍÄ,ŽC)ä,VQ˜¤élQ>ûí÷h¶„¶ŸfQ¨Òdö™z–ð¼%ñl5;ö�m ‘P@A‡4?B�ÇG÷($Q¨¯£–gF(è$ ´L`B§"T´Ž#%±+Þû²•¨gó8Å4ÔV?ÌÔ±$z¦B—ûk®gÃâ¯Î$ãd¦Ã4�YÐ$£Pât:”±f+;FD㉘Ë! bgq˜Æ‘@*D˜ôf¸œŸ¥Q�QÚ¹üIX*„ ‘³é€œ4¡²Æ“{1?K ‚´¦´Ü"7û ¶� þì*wic³•Á[Ød"x³5V¦Ml¨Eì§=#Î!�U¼JÏÏ„�AµEatk $'iÿH •/t˜w‚ìÈgK-l2Ò^>ÿzDÞ‰IŸ¥’Œ@�Ì0½¦ôœÒœÒ»Ç´³IkïkÃÄÁwø�t¯&"šÈNRű$&ê"Óׯ¹†§QFlQè°m@è ˜’òÅÁžÂ¦*Œ´˜"Ä£IL¢M G΢õY´ ~Á÷”6”f”.(Íh¢BO: Ž&1Q t2Z–’y2�¾|*�Æ:„£y’@�%1Q ± Sã }"�²PM5$PM5$PÜRšSMw¸p­­N& ÷X…kãPZ#‰ÅO&Ü—ÿ áŠDMî±$& î.|IbÉ“¯ï%¥?Sún|"‰LˆHŠDDDð?%Õ½áBN…/\xI×­v¸æB=$÷õp�jÆ"�¤ÓcILÔ©NBcVTúd ãb:¾8 ôÍB™0¡ºkOŽ0~t`5)‰]ó‹†Ñ ­à�‹YaC¡Z}[w°a¤…½r“u>ç«æpÈ}½ƒB¸ª¢åoU»ÎUVæKŽÅj0™ÐÀ´Þ*.êÛ¼ (IàÅôÛí}$íçùf¶ö&[­\¶&6ꊋËü}¤tåúeüùÜdwŽÛæÁdM½®F9Nc@ñ½¿èêrŒaÂVùN­þ ôçÈì /ÖÆ#Ø2Z+§%ãàjÝ€F,$NKX�ZYD¶!úE¼n²òçw#s*DH}èaQWm׬]Ý8âÙí>yËÅŒ'ÿ476ÈV뜋õ•ãiKÈc¦`BÀ»CžÞä_^f]~]7_G˜Kì³Þt>ß œá{‚da£˜(Ù-š¥Š,›¥ŠÀ\Šònõ•+³Š¿ | ³.ó&늺⎴h¼%³ûJÖW7Ëö9T \®ç"è¸ c=@žöŽïPN´ø8È¹Í“Ìøóq] ×fk2Gð$QfŽâ‹ó ¦ø>2Q›“ A¼Lwjós.ÈÐ@W�ösÓp¬F]â|¨Î¾/m[ø^ç¬~…’Á"ïtÈ|¨/9ƒ¼oµÜe ’Ë›?AàÉM�âMú‰Òæ9¶HyµpƒŠÎñ#3ÇB¶jòlé&¾ÜK¿F§ÊeM»œ,;Ï� o°Ð¸6ZöÉš%­&%+•à•Ù내ݹîUÿ%;ÆÉ¹½¨®£Á³çŸ‡]»¼�^dtJØR7v¼ÂMƒw‚n8Y (Ì“û€Êã©ÇÖ½¨›&oïü)'àˆ#y*¥ƒ®æà<[d6–ƒ±{²èÆÆ»^-¹>ÿR´]ÈûKëÁþ‚™eÆîÆò².ïp#u›]+ÐäǶ%2 ÃtÊã~A=iiÑDºb±^eMÁGW³80G|e-Ø`}®˜zåºÝ çÀD#‰QmNʱ³Ô¾w"˜`ÑîòÔÖ%±†UóYWµ\.3Ò1w»ôšÆB]­\5n¢âO=°õ"[ñ %p7¤-õ–yV‘­)‘9â·u†Dc©v/›Ý—íÞÆpüÁ6@á)“ökwm�à húêÈß8c€¼ßqD¦Š]îZVÅ­s¹XÊøÓäרPGi�˜,IwÂnÈ >kqÐf[�#xâQZ; ´—¡Š�«˜5ª«a{wWãìì…וÔÛûó6Äp?àÈ·Ú‘H?ÿ‚ö þ²@LÅxü¬¡”Û‚¹tÛ{pi8ÿV+v ,/h[UÞ>.·&L€¦†;¾�p+²I(µ=žÂ:ÞºÅÄ2ªµ†¯PýKPªÑüR@”_Pþ†ò+J ªYïUCNуÜ|Àãß§bpý•ªÜ±‹ásÜ…¢^Yß�4áG‡V…Íô¯_ôÐT#Y…üõ¯V¥\³¢tMéÒß“¥Tè]·®kž·Çî#‰Ò)Š;–£ŠÃ3_ÃÅÉzßt¾eÙ„fðsÇŸ+þÜnui¶ÆÕ}O>W}Ä?+þ�~EðH/¡R£DñsGjYqáß#êR̵‡é[õ›¼ĬZJo\øSԭć.4ÍÚE7±Ã®¯÷±Ãv4†±sˆ€Eãu\šŒà¢ë¢?¢3Ò‘? RĶºi;®Å3-6èXãf:%¡ªêšOL΄†V ëªèµ�CTÎ!yˆ\WË{, ƒáæ†!XË]2ÿõ9p”ñ¥(Ö ¥¥¥×»¿œI"þ9…èN1Í$sÀ¯p�Ö5ýÅÓ:à§C¶ëæŽøT~p.¡ŠÄ”-Ìépßè¶ß© ôv~¬ ŽŽ]+ÀLÆêaìZKÑ_ëðU#E×E“·¾ÞuÝ„YÀoU.Æ‚ G€ý¯šºäz>¢=™ÚM8¼TJáê·l¬t!8ÂÙ7â]WKðªcÞ8_µ£±Ó4Œâû)/êsv÷ïzÖ†2í-{‘U5z÷£âÆ �9 S7ÈìuQQ4*xí•w cg53Œ¨5­'tå{eŽ”.F%QÀä<8êãmà=ts.88¡ö§øe ˜¸Â7-—Š2»Î}4IÁ$ª3iëƒQJ§„—\! Z­�0 ´AOÔ´ÈﺌB 4AÅß €¬/À�½E©Œ)à©S ÆA=ôöJe}aÀ¶X¦õa;°ÛOs÷óUîc˜„ÍšŒÆ ™°Féhò§,Z�7V«þRÎÝQ)sx«y³�˜vÐC›¼râ�ñ0žQT=†éYÚÂaPÑã0bïúf°.jʆ+õ3 Ûß#1¿÷£%i#¤SÐ’„{°JN>«÷ßXŸÎ‚?­�Ã^¨$ Þh'ýÐìhÓ ’ÄiìéPIõPéá¾q”¯(ÿ¢Ç¾µ¤|{ÌhFÑãÀHŸŒÆ~¤lþ§´Ý’�ƒž²#�€Qéé[rÿøöäéLôö¤ ŽFPÃd‘�àà3†Šð¹—ÎQ-S�  ¶©×�ãâ9×ÓS|LOñXU¯ýc™£Çh+ >®ÁŸ¾gí¦óoˆÜ·æ®.Ø’)@cúx+^úÞà¥"‘õÃE@/[äÕLTðm7¯Xàèå†Ä¡L.3ëÖá,xF—\ô1q€Ÿ8À(?È“gã"ò�¢Œ w²>†Ù«Hè¼oþ%+ïÈÓZÍñ2ø+ø¨ÊèÊ ñ s×䋜ãIVo"õ�'!p6«\{»F8¶ÈÇGd®“[DO#[ÊÛ~Žù £)Å•ë�7ŸFÝÕKÖâ/’@ßë¼)³Ê=®@Ý2_°sAŸíç\ ëÈ€ž¿ ÄŠLGÕ7.T3ˆˆI‡-¾rÁ ²El‚)^'‚‹W_Ö­#ã`3øs@ ,wìý:§ôÝs@I}PÈŒ~>¡Ý;‘æµäWŒÓ.6ÕM^¬“=>m†±TÍ að£ÅnH4‚{¦rl½U�ƒqoU8ÎRè¶n·p?0Ù]ØÙ§¢^·+÷„· €^£?ƒIãP§fïo€ÀŸÇý»ÇÖ¯Iöƒ9aEíû‰G]‡°p�>Ùu0~¿ë˜À„wGKb/žp¯2zÒïÜ�&1 Ï £a�âÿéÿÊR5x¨K(jÕ[Ê甯îÿwYúè—Aó�¬‰Ê-åsÊWǯ€�HãÓâa{Ö¯ ìl{èÿÕ=ºÍ5ì3!"e&lóýãØæ§3Ñï¨c%ñDôßÿ?¸æ endstream endobj 990 0 obj << /Length 4303 /Filter /FlateDecode >> stream xÚí<ÛŽÛÈ•ïþ ÁÈ…1,²®Éd'ëd½ÈL’qó`-±ÕŒ)²CRcw°¿çR¤(5Õ¢šÞEäAdÝxªêÔ©SçVŠÛE´øÃ‹ßÞ¼øåïcµp¡Ó±^ÜÜ.DdB¡ÄÂ(Z/n6‹wAl—nþû—¿—zÐ2VqhâàP›ßý׫?ß¼þq¹J’$HÂåʼùþÏ|ýýën–6 ^-­ nÞüéö"òCèÞ'ãXuàW±�„;¹¹Ë ï£DÖM‹™$Hëí~—•ËØ-WW·\ÓB{¹I†s:Œl7ð›ê|K­ŽF;@@?½uU6m½_·UÍ]ä�ï¢âü&+«6;tK…Ÿïò6kîÓµÏß×Ù:ÛäåÖãÓ-tèLb©?aC ˜OB-4wªG†eCaÅb5hÕ÷ÖVŸ–± ²2ÄïX*£+!B§·þ�F)¥ƒïÒ–Seö¹ÈK_¼F<Þ¥uºn³ºá²´ö•0Gß ð‘o²:Ûpžfº�Ÿ,åe×OÞôÑ"e_Úo ÆþpÒE�m÷EZÓ¢ã±Ó-L°á :)�Ûü”·wH„‘ï—RøÕÃýr…ƒe"øL�¸¾¹«öņÓe…8üÌ™�ü gÒ�…OÑšÃ{“!–]ý©Å±è(èoU^­5#«ªT¨œìšÞîËu›W°Ž€‘$ø�Ç5Ò �wÏ‹4èö‰¡R:ÂF D)ѬҒߢ¦N�¬/V#^ ÍÚ×YZäÿȸ1“ ç-—ð@°MEˆZçi›ÿ¼ì°l±§M÷5ÐÊmU{È=ö¡j—Òòp¦£«\&.‚ ºKûvÕµcDøMBSΔâK Òên¹A‰m]íïuÄ–^ß¼øû \»h!€aÄ¡‹a³j@q,ëÝ‹w¢Å*�FÃÄÙÅgjºƒ_&Ö,ŠÅÛ9³ÑZ†FÄOAàï£:ÂL!�‰@Êc *NB+ã9ãPÀ�£äz\œ2üôË�”{¤ ¥–gu-„~P!`Ëÿêíb˜ýÑ“Æ.€ÝX‘ð1©€õÀb(Zç˜ÆÄÉÁFœOþˆÇœÑ 8ÑL$ЭéH:‚Œ€ñ«áW˯ô¨nͯì´G@÷ êM»AoR…úÀeÞ.WNã&t ·¤sJo)]Ó³¢’=¥ï/t¶x·²±n–+ëðCkƒO”Î(]^�+ÂØö x²“Èôà‰£NhŒòžÚÀND§æPصfS,šL¤Äަz²ºq`w[ï#ùÖ# %dL ei¡-1dH—Ö9B/$RxŠiŸ¤¿ô»£ôñç~x0�R¤ ¾…F*ø2ÀÀ§ÍkŽ À•q~^ñ´OR‚ßúÝQ:~p¾|$ ƒúwA“MìeUãòpõW.vú¸îõñ󺀶Sµ×ÿ#„¿�dtíWfl™’Öe‚~ÿ“úÊéYÒs{=�ók}™_ ´'α×^ a6C–œ$×ZӾީæßÜå™{óŸ‚Øã0yÚcrI8�—b–prÄáäùãè·í•¸¸^Ó—6jìíuoʦÍÒ ° ”‚N€UQÔ©5Ëî›ýÚ—§üj2P¯ÒÖùð±à¶ªG}¶(zÅã`ITßÊ�­Lw+½'@¥ UÔ·~ :ÅÃ9À �ÉÀ,„ã Û”ÕŽ³ýÕ¬MHƒ$¬a #Nd½Vk@‰… JúpLxvÎê ä@ŠEÓŠ02vèiøö»3 HŒ:éçM :öXg�fz¢,…Ib¦a (QôXB“ >¨õæÈ¾ú¤%sFÞxtEIiqŒ¯SÝ;ñº·ô–ôßuJQÆ hšcÄš`îV÷úø÷l.QÇeh¢>Ð$MËu6A_’ZÌ –$µ ãHÍaI@\fI3ÆáYÒÕ¸¸¬/I ÊPsô¥«!Ìo¤²=þrG«ž�|¿\92ÂÀ³¤szn&˜ô…ùšÎg­�Éɯè|–ÃÎìzºÂlz’†>*._\݉Ãêîh3zrúžž-=;‹â'enk‚×ð¥ñ� ÷”n)ý@é›>|Á !ø@óˆž\/à‘‘˜Ã^‚›Å\/˜ÀZŸ;†žæ®ÄÂ3d½¨L˜a|b¬ÑÚg.J=œÉ›‘3VÃ)©)GltˆøìŽX„œPø¹20S•Åwø‘Cã8Óúm¸U[m3ô p%Ûå±<å‚uU×YñuUy÷<–2‘U«~èo³]Nah#£—.<ðärÅŒ„-é�¯Ÿz—~ÇŽÅl¯¼_¦ˆ¶vx“lU2H‹‚ª?{(&S‚„lñ‘,]å�`>qD€¥å nÿu—Þ߃û×1tÝšd ?ÇŽÃtiäý²B&ßÝù:o‹¥gA(FZÎZ(¤Â1JÖ¬N•o¿:Al?…ÛºÚdÉ€ì;;…>nGyJÝ¡�1–ÃØHØn¡L†W‡J{ÆþªÈ¾°G‰6‰Ñ‰^§¤<îýy(h}žhO8†óìL2Af „´ã’¡ïÖÙºÚvzììjúx`*ϾÜÃÖj z(¥’Á+ÿE7 ø�w< _Ë-ò¶s´®9¡ƒË×~yÂØ@iëV¤ÞÙXÐ/™˜tš‹qÔ½—Ps 5¾YÝ€Dƒ4›5¾÷uJÞ*m9|‹vé&ö��9àÑ·)7Þq ¼8 òX�,Ç& jËaøéú ­À)KwÐc�2¿9ø%{ ©Ô‡ˆ{TË•iÙy_áµK[ÆyµÑ�Ørd´$ŸœG*-Áëx±íx±o8ð×g)CÄ[ Ä 3Ïccà'^ܾ{%HÚÄŽÖ{Š–‡O¼Rtã¸,_ò~·ß­ø]vëŒÕ0:ì²í^•@´Œ:—>ÀÉ›¾È„õCòþÂõ¸Ö}7¤ÿBa‘•[òö€ÑЂ.q;9‡sÝü¶ew¡ê÷•¼4€9T…)µ'-j¼gZÅžN¡¨Îvi^ò&V�ƒÕ_|'oJníÉê‰V¡¤,~,ÞˆaA¯ww†›ÓÀ‚†‚‡ûæ~OŽ|ÑÏÀuW†�XÊ(õ÷iWD¬Â¹†nÄ3„š¢*·¼Ýa50lBÆÁ›Û¾qÓ5§Åð]òn…Dö÷}Z|3¶4=‘g5ŸÌAøð©½áº¼Í€¸iå¤ Þ™gƒ)èþMÅ'aÚŸü½@‡#�ë�¶@"æ$EV´X‡K„ïá�l…,оM;‚ÆR1RPt¸iáÙë`Q;8©‡“3•aDF½Ë69™ï°ÁáÌ8bqtÑã.CN×ù¢ùP�Áæ,¿‘C|xI'‘AåË;®wbûJBéz¶÷ª…C|”³»ƒq‚)'V*´Ñ×7Ê“ÎÍr}OqYߘ1¯q\�‹Ë¦œ¤³Dʪ÷ÕæªÞph†@lsL9Ööâ#ltGFGço ]¡Í+šÛàê€ñ!—;J³^PIÖkàÆ‡k~¢ô˜îCŸÔõ]ðc×ÒõKW¬ï/„�ƒD? ¾*§]^xåý`ø¬è¹›n0ˆZ3Çz5„ÙT–€n)Ü¨Ã›Š½1ûž¶ÍüD+}×_*él3LÍÀf“ÒsíkŸc¤CäÝhi d=輤ôöš•D.?ÇÙ‡´›åì›b;~þ8zš¼×€báH×å#ÕKŒè#ÚõÒáã“Xé0>¸ÉÞ’^ô„³H%}[/µrð$ 1j,{ófú ¸Nø=è%d €bÒp…„Ž Ú7ñ·r}·�j IÿU¯ ±\ƒf‚Ó{œfÙ»�dp‹‹�ºÝ‹5GòϱC8 0'|=Žœ‹óèü2ˆ tþüqx:¿—Åam¨gYü¯†0÷@x‹¸³ø_qç„Zü“�¯$¡“»+ù‰žoOe ú¯è’>µÞ=Ã[ç ˆKä ˆô3 Fø�¯œ­†WÎÞ}�{tþöׇ ›Òª0™åw@³œº\Þ�ÏCOùWbáܱ3˜�?n„q ?98‚…&ï§ £Íï�ÿ'6Œqž& c+�þ°AEC/'…‰¬â�výEÁ’ý’x�cÍÿ<€I²då¢(mhS\•–eÕ’"ŒuÞ¸%‡š+õ«“án´Q(qøŸJôÈ– =—�:8'ŽÇ LÀöF»”{Ã,‰88_[�•‹¦"«œD¥GßÓ¥*Ì¢_v†Ê�É^ì§ ?!oŽ“ý€üëµX!Kë­²ûrIâ°Šµa3„6ÝM`r�=þ±ËrBë^›~Dëü)\«É ÙVŒsJ?õГǡ€2ÔL¾‰üyiÀþÔÁï‘ùžÒ"¤ÎñÅR°C ”•Í�œ+ÐÃôYÄi Þe¼qlÇè&Ýáá˜𪅠…sŒBO–½ÈÁqúŠÜ 0m²�‘±$$A¼QF¼gçÁÙ-l븚N endstream endobj 885 0 obj << /Type /ObjStm /N 100 /First 885 /Length 2311 /Filter /FlateDecode >> stream xÚÅZM�7½ëWð¸{0E²Š50‚ÍÇ:Y`2>$;ðA–;¶�4�4XçßçUwkV’5jÚêì#�Ý]]|,«^±Ç»dœñÞfSŠÃÞx hƒñ9á)›ðý�؈ƒt ʆ\ô�Rò¢ÀŠ!"LÎ'C,ª2 ¯ `PÖ!¼ Ðv,èÃ^…¦ð!Â’)Oà8�ÀRœY;bXmæõ-Yz$cPX;:Œ#Dè$ (ÑëëÑa՜Б0‘èLd(,YŒ…Ð�LV¨&–ìÑÉ&9…Š7“W¨1˜ÔØÐ“J$t2ÞŠlÕÑIz2Q_�Уj“VFÞ*Q;Τ�E2_„ûÛýlu³mÞ]ƒåØ*>ËX0öÞ&DóÀlvm�í,–íãÛ-^^¬W6X²~<Ëøâ­5± ¡ùÌj®îÑ YfLÃ@AަR`$Û‚5rš,� . yKÓ&d [�r´È°‰³DDÙ_´ <åf÷¸Y¬Þ¿˜¯ï–Í®—ÆaÍ‹€à�¡Øú˜/ÁúÏâ7užÙæ÷ñÐPÁnV†ki€!ÉÖ�”x„­Âé²çÌ7ë�÷#š&²Eªô)Ù„¤ –ˆ¬,¹X'Wìl³¸ù°h6/î×ï—ÍvDT¢1 ìÌ‚‚}X±ÅÍûMópˆ¹QùóSnDRÆÊ+cA†ðŸ&ÝáÜ GAáT'Ì1[vR'Lm¢ª1Y%>•ÂÅ*á½,01­²Xe¾•ÂÎröcòŠ#*ÁZ5¸*1T>ì/‰ kÕBçˆ h1ñþ�¬æß‹�œ‹Ëû ­oÊþÔ%OÚ¢Ö/OppAr³ å”ÙhÝq³‘žÙH7­|ºënFZqumÿÜïïwSÑÔÖµ¡o¹ocߺ¾¥1™S± ;!ƒùx­Ük�cQXœOñ}~¿2»ŸàÀ&s˜ZBVʸ‹X“dÇÊù�‰F·¡¤Dž¨¼˜vDm�ð7þS9küä4NO«¯â¬Ò#—~¢z°Þµ=Går×< s¡ËŒéH¢u©1¢-L�Í ,fÄLÍ $uÉçd3è{žvS_�ç$!e%OÀ�Gô Z21V> stream xÚík�ã¶ñûý # -+âC¢ @/i.È—ö²Å¸Ü­Íõ 'KI¾ÝmÐÿÞy�²dk×öºßÒ¦ø‡ÃáÌpÍV³höý‹o._|õJ'³,Ì™Ì.¯gF„Z陉Ó0Mäìr9{¨P…scÒàçïþõÃëï/æJ©àåë¿qæï)”ÞüŠ-ï/üꕌu”„F¦0Á’öy9üw6÷ýæÒÀXŽ/oŠöb.\oªEWÔ–Tàk»š¿kÛ¬,7Ù|q!Óà†Q1j€ŠP"Œ�ñ¨¼ìêõÂR…±ê;ÝÝ Ï‘WÒ\X�]t¥+ÝBÁ.‹j55©€|œxxooŠÎ¶·ùÂNLë0=©Š ÂKTAwcy²EÝ4 iPWË9™͕0)�O˜.ö&1B+ág¹¬?ØjŠ I(bé{ýÉä·Hé*/' *9ìûôã0‘º_bË,„‹TJW°*X.,‹v DÐÚeÈ«"�ˆÇ«|É0ÚÍUk;Î×× âeiï?çªfSZ7Û:GÂ>p—ªÆÂ·”5“õó–û\u �€Ü]ûõˆƒ¿»|ñû ¤f43cB)ä,ÉÒPÁéY¬_¼{Í–Ðöã, U–Îî¨ç~pªR3+g¿¾øÇB$ÔÌDÀªñSxx´ �B}Äp8nñ�¦¡€–磠3*XÄÉdØ• û„ÜÒÌ< 1 u¢GêT=R!PËýšÕlX|ã$©Igp‚S˜%iJ¤�€Óf˜Sňs¾z•d3v@h:–)ëOÆ;×QÇÙ(óÌÞÍ…ÖÁgóL ×BzCiAiG©ÍCL*ƒOA„ÃÈß„ÒOÀŽ’ Ú-¤ÞÃh|Ç#RIðÇãLj‚·€…!¼ÂË^ lÈ·”¿¥|Néµîam‚ÿ>lvK©³xâTgòD*CiÜå*�ç‰gl]–$Ùv·57Œ²opB“ &̺öÝ„¸/:¨)…›7S´wvs|‡ïb³³ …ntô³ƒiã³à Ì”ǤÁŠÒ ¥%¥9¥ ¥—”Ö”~ŒªO”Í^gÿ¼Ç|pÕÁ| ^méYÌw*ˆ3™ÏÈ0�R§Ù`>£b¿m_™¾Æ“š&'²”‘âÏÃR2fšg’*·È¥¿Rj)½Ý—vú(†:Gú<†;Ä™ —À¯�B¯�g8’vÈsüŸçòœ ~¡›ÿJJsJ�iân‹M(„9C‘EJ$ÏÖd�X•=‰þМJ‰]]6šÜ#“È™Ü‰Ö¡Š¼MC–G¦�­¾Ä, W‘!ˆ™Ò¢]ÒqkÞ¸ZøŠ`µ)ó†Ëö¬Ó¶Ó¹u€òjÉM{›buC6'š{…k½jÀ’k±¦Ÿ£°µE Ú¢ÎÞ„uŽ ´œ,÷6¼˜kP@ߨµ]ã,WdkنВ´µœu)gõ£õUyKñ&ïF�Ðú&Ãì#ö[Ú%÷c»ÝÁåLo5ƒå^|D lùÀMë¼c¯�Þv ,&œZÍ%º;j^ïà½ú}c«…uÛu͵U]Í+{W•k¸Û1�u6K@ƨ”D p¬Ö8)n>3åT µ›ÛÉmí­Šóm±¾åõÁ–ߺ,ïݾŸÁiM̱|œe½l…�éšÍ¢«Ú_¼"ú4Î-¡cr¹0Ã;!Ånó&‡¡häã"³]´Ûæ°%2Ë‚Mëj§W tâYŽðšrk@/Õ»X¶^%켋¼ŸjˆÌ²æoUwŒPe‰[¢h° `X *~¼ˆã /7–KlD1` �¹k�»úò˜­†žŒÞÙfí˜Jy&ßë$„³²€ËYë~f`꿼BÈ°Ï 2‹¼u¹kØ,n³÷¾N dâ.R^®³6oÊ‚Žº4ùU&` ڮŞÐb?˜­–¾/{R †Ô͉‰;±V'=À.ˆß@ @“;¸-7Ñ6Á—�ƒ.€ÔÔ&ˆàKÄ¢î5㙓àLÅ–»=ÜÆ}�¬Íy¶,×ôr©ÈËɹEðå”(ª$J»þÀ>¾Ïè ƒÞÄ‘mís%»¿Z.Óî*¿ó˜Ù¢†î¿EîN ´™�7†¨ºA¶sù®¡ÍZ45/d® ŽÃ ?a�_Zr1ºR>¸Ånk�Pé·BªÊ8”IBBÕõN§…*è{óA¯Ãž¾X¦a”Š3¤X @.{¶‚tÄøÃ ÒHxédJtöÅ"…­8ËÙw2ˆóL�X‚*çRœf]€ñ“)¹µ.Ð#†^³˜Ì€$¸§<ûѾ¥ô†jrÊ7ûú}üåi/Ýgä{»uã1_P¾xìØ?wEù’ò“^:ç[|Êi š0%Û+¥i½…³ ´XDl}KéÍÈR:Ê:Ñ;ŠÕ÷‡�z”Ñ+Ç9ìx*ˆ3Ùåc6ég<†SÓ¿ZýõbžÒ# X´5åÊ/÷˜ÁdO³]òkûš#X4½à‹#¶+MŸ#™B–èçKæÃã��ÌÏGbËu'RâxÓ5MB…Œ—I¸ˆ�‹ç‡¨%©À°Û¬Q€ˆØ¾³AÁ«Q èkËuÛ œnêM¹ä¦í³ »¨WUñoR�¡#=ÒA=+¡5p®‡*Ã8í=ž9û­I{ðÛ€S\ù "È“Kš‹%+BPUtüuŽi�¾÷õ.HÂ>wý–EÛÁàMÑÞØÖé#±£èu]ÄRS;Vøšnc?¡Z]jIípå%¹Sôé,jòÀA¾¾u¡x騅„ev¦èÍ�ÓçÂÔÚ ÷/Ó …ñÔÜ­ó°ЦrP»�¨q 3Zr6ÃMôÏŠb³šnS –È!“®²ŽÅ…L]ð`ª‰þ\n7®ÉEû¥x|¹›,\¹…ã)p�´½ØÂÇ97“fÁ„uìqÃÜ—¾)»b¾•)X¿ÝFC•ìGrµ›ÞË™RHÚpuIžMð·ÍV}wKàÍò˜h?q!^¹s w&»ˆ•îi¥Àb^8ý\Ãö â§.ù`ôÍþdè�ì¼~pgc³I]ȱ¨‡ ÇRÎ]·ôÛaüÏ[�V…nÆ®è6–^g:÷úN¼£Ì�L4»¥áë$%‰I,?²7&e÷&vYÚÒ®òŽÙ!Ñ>ZS{kŇ®òê\�¢á좞sÜáb±i~B¢.õ°Û¼i‘õ§^¥x‹¤æ{ö_ð¦w 7<ÉrCOT’I Í¥u�a\Kä—x~»¼putSJ©!&¾’dÔþÀ¸°Ï®yS-m[4ùUié…H°LÁþx¶›¶só²P™X[%J�“'âàžÃ³o�bK®q›ÊÝ uëÞN1â³*®mËûã�7ÊØû|}[ºÛ>o}k/Ô›dT�ãh�F‡i¦ž­.1þ°ºx^]<™M2 ö”<+ØåTçd 2[µc�� A+©tðúâ›aŸœÈÅ^Ÿ>ä“]�Kǧ…&"”Yü§‰¹Á‰ŽÂGßïå¬)ý‰Ò·Ç‘ÇÍ%Ý\–ÒŠÒå æ(ÿ9>áãVYr®)_P¾êó¼©ñÔk@|„‰-ñï%±:Gf‚i=íJZf„Ì|>½|:•';g¥NÂH >A¯ëŽBzK#Ò¨ÁsÕ¾±Åýÿ& £xà'xün?(”`±ø®®Ù~:Ë@V¶²MîftöH4"à^ÎÍ t'GûJ ÎæœtÔºˆüãRê5X­Mà¿N�wÁX³®QÁÜŽÂçF°O=·‘Xìzàˆ6Zþ‰ßAö>h­S¯6cu密‹7ùÀ¤œPƒ¼ZE4–‰WÆ’ÞBQˆ®3Ͱ~ßR%Lz }é-èÒÜ›õǤWçLЂºTº9†ö¥ìø8Iã`M¢ÜŒYn&—Äz¥ðìÂê”·Q°Í¨%òš…ßU9z�TBc�Ù@k�‚_*®vÔŠ8ü‚ën@cD Qªñúú8Ëë.ÐjØz}؉7ÙYÙÕÍA�w•jrþÜ6ôæpÏ¥»›¢7óLÌá)2uäåîµ÷SÑßΠÊSµà¥ƒÝú&gõcÁ…Ù˜a¨�7|ެoä¯ûÓ”ÃñÚ²E2aurˆÛÀ[VR¤ÞÊ’J¯ôöœôz·�‘ Ÿ¸"Ø3(L¦é“ʤH’01º—®$3‹A}0,eƒ0F…`��âéFj†ëWÌæ2$mŽT ©á®q4è*M˜lÃߨI@J~€^þ%iÉ5‹  ¢c°Šþ¥†™Æ¢¯­Ô,p¦#‚ªpÈÁ‚ôƒC«gEÔ1mz> stream xÚí]oã¸ñ}…Q¨Ä:ФHéŠ+°=ìõ¶í]··)ú°·(›‰u+K>IÞ$W´¿½3œ‘,9JlÇ})ЇDÔˆ‡óMZÌngbö‡W¿¿zõÅ72ž¥aj¤™]ÝÌ"aÃ(Žf6NÂÄÈÙÕrö!PââãÕ¿øF›AOËÐJx|Ÿ¯¿}ýîêÍs¥T Â‹¹µIðö»w~óÝ›ï¯.¼¾Htpõö/ß#²W‚I¬z€uÞ¡�K @EÈ¿Ûm>¿»P2¨ê%Ìè>á›{è€ ‘8ZŒ˜Í£$ŒÓtŒE&ŒEjÀoˆ…€Í�Bšë‹9óòû¨ ]9ê\»¬©JjßT5}ÍËeþ9_n³b#�ÜÎã®ÝÏÛ¼v44£�EÞ¶O±®º�‹l;Ç5ùUDaÇ´Š6¯J`¯iðuU6Q�/Ò’$L)4€;&€0?o¤UÃ-W"Ô"î6²¬.汌ƒM1ÁQi@:d×F—s-dp·r5Ï]•ÜXç·+$ ¥WOLV =¹‹ª®]³ñ|¯€ŸžóG¶q׊žEE�>Ñkæ·›0Ží˜S7UÝ¡÷]óåHæÞ\½úùUM1‹fQ$ÃT¦3cm˜=[¬_}ø(fKø¼UšÌî|×5ü©P%vVÌÞ¿úë `©ID˜¦ò9 4^L`ÆFö4ÔÊxI,U˜hy1h�P§ó¢ãl÷œ`¯IB¥ÒçQ¦¡6úI¢NÅзø¯¾� _`h“™Ó$Rdã0Õ°6 #øâ…)IŒMpÎ0‘Œ²ýmšIg`¾¬ˆØ Ý)ͯN@4û0�À(€É±QP�>ðG¡Å©£T°ñÓ§O7^¥ˆÒàŸ õ<÷ƒ¹é9eÍ€S& eÚ[¢ÅÅ<Õ°lü,HUÐøv;¦ÌË¡…Æcöƒy‹Lï§~½O£µ"{š þ#è_GX 2Ës,†‰½·=ÇbFq„Åx9½ržÈ‹}‹!†$&¡0¬ŽooÀ€py§‚>"J‚eE°’Œ>½ljÿÚ€œt]¸{ݺÒÕYë–ôàÞ¡"ú¼]0/7Û¶Cé~Jßwý¯q‚‡ö4@Ç ¾Þ• T7Ôû]³XüëNY î‚«²"7ÇБ—ÛÛ:›òÕ*v?òÕ‘r\GÃ⊂Z«l³É‹Žò@²AyT‚H¬S˜ÀΙÈ¢tbª=›zÕnQÝ–ù/Ž&¨¶55GG|*0�Õ&Ñq ¬µÙ.Î-ÏÔo´i« Q»Ûm‘1�­»gö´[ï¥6¡I͘ùOí^hEOÍÛ#ÁIËÉ‘JÑü ûj•£€$iÐ=˪‹£VYK ^ø»6GW=þ:p]¸5'‘ð;ïÇÄß�‰‡t`ÐÖMO!0âÏê6§Eb©ÇlZgí±­"QÆmð”ÁOÛ¦%èÜzSä¨XnyI_�PøàãJxËy, >½Öæ ú8¹èD3Û1QX �9¬„ϼle3ó$ ã703hïåTîéO,3Åv‘¬…¨½áVÇg40qáFL¶&{kä5>ª7Áß1Yr=^ „rx-�ãán š�ìE~ó@wl\ämñС ýYdM;Z+í�uŠ –Ò>K�×iOå;ЙöJƒò€Ù�‚eè§‹ÀGh †ÜÒœßàj«ºÝ–`€¡+� Ô^#ØDkÍxC�-?‰ÏØÊð)”£e€=oÖô†Ï%?IòüPµ/IAÕ0…H$Œ”ÝE#1Ä`%Ú‡©\Sé|`׃�v‹£ypu £'Å�¤k®4˜ Ol‡Ã¾ ß[.|¹Í?{Y¥·Œâ¿iV.Gë]*†¯ Èb®9›.Ó^ë¸r·v5Ïïw¿áñœ!�¦ ÏêlÑvƒ·CŸôUd­§”Ý-_®IÀé%+ùY_çm�Õ¾�Xpå’ɆÒdk´ƒ �÷ OÚDYù¹>w–Tuj‚ˆÀ)·hiŽÎT :tvÄ€\�÷Ü_ÕØð¥ù\b d7#H“ñIîHìLVŽŒ&+�Hǽò’Z÷%‹ÇYúÞ\¸åáx»‘®#ö—:Ò i^Ì4`'ö„@ 4Œdr‡(&çŒ&ž2þ§´µËÖ„£ç ¥w¸v>±–�Ê$ž™=�‰u|_µŽ>ñ¦ÃrvÐ@©0 4-à:tXjè%‡o<(gP¶üœ7Þt6Ý$‡�uö©?Äß:*ë°’O¬gKòÜÙhÅ«·~^xŠ9*�ÖÁûñ± NF6ÆÚ”C5H„6Ј.Ê4î’äfs ¸qHIÎFt `ä o¨ó�O"©„>ä©Í Ñ�`àY}ÈŠ#VÕ¶XR¿�a€*:ἸcTêV:ê>T¼© ¨¦´XP� ‘FI2zt® ý³”蟵Ÿ6U#ÿ —>1(Ý`ø#È_¼Nà7’ª´«1bï  ·v}�,å]Nå>=¿i¦œøhºc _:Nýóåi¬6Êç¢g¤±G 8œÆžA§±'óâpáKCÚªM|Fáëd ç¾t K„„nªðu¨ÚAZ£ä®Ú2O ¦â˜úvíÛKßþ‡ÿï<¤ôíå£êLb‚¯0˜ÒÁ¿»:ÒX|£MSµ”÷=$¾öí•ogLÈx]Ïiˆ†}°ö  Òž§!‡Q¡!/§£ÆSyqz¡¢Ä0JYüÞo¯_Gñö³í³ƒHí\ìæÀ°[v�¸÷”ECë‘¶h„1FÊŠ¦¢>£sxÏè1ˆ¯¬âÇ!VÅJL13*÷¤ö©0÷˜‚Á‰•Ž8Õœ[+pFM^»å1@¤¡9«�©á‘è³Äû †#¤ûÅTtÂ}*#Ž0ÿB„Q’œcþOÅp¶ù*ÒþÿÜãÅç设xÚ]¡S;Û3Ja¢SÎV")CiìÿÊá XÞ09Ã"� >Ç~ؽp~ÖùWÿ¬�ݯè|,$¢¡N#Ú¶?9·á3wÈDÀGâ� Ÿ¬iÊ=¯xÑ¢ÉñþÁ—-¨ø ް;MA‡Ú('g^SÞµÜ.¨@ÂY› n²¼ –¿“‘Z.?t“l¶¾®âà-É:È`ÅGD˜@ÒD5üÆH(Ä(xªµVàû¯‹IïÎ傾N“@ƺ;JÒ]§;[à²PÎ%õî$ª�jÿÈ ·¡ƒ*ïN3n²ºqµ?PÁÛ²ûš3ÊEæO¦üµ =¡§•Èç©ò\Þ×( ´ðA„}�€W¹@¦úâ�šqU™jûÔ®|¡­»÷áQuG/TM.»1®ø½}ªžÁ'{`̳þ½S¾ Â߉=¼Øs�Âr½ Á\;´Q¿û¬Öï´·ÍÙŠÇ`¸×1¡ôÁÚã:³r˜2ÝÕXhÎ6|Pin¿Ô jÖ‹åeÓºlùˆj®+ÇÌÄÄ¡ÕuÖä‹§Ò!˜‰è±abûS{ÖawÂ%’GèÜü é¿W_èÇçµX¨R&ø³Qt…Vhˆ+|àè|ûÞ·ß Â½†ÃʽX-‰l0‡(-~wÂ�˜=IºÙß÷ëÃYä¾M!ìíÞÅÏq ‡03¢=:&Bh“WÐ)Å5ù �Øv¾]_Ù‘&ccÎQEÀ`ÍyªxŪør:z©?‘§Wvd,B“°œ¿.§î|¿/bçÈß�ÉŸp::Í.¹¤@‰J6xÒ]çº9j8€Åز©ŠmËÐQdâƒ!1NÉ_ýQ•?Χ£ÖtãVïsåÞ ûwôx‘†B‚ÇWi”СÅÔ"4û•HL¬ äJBd>ôëî˜�g·ihT´¥•!Ñ üQ’Ižênà Î*”êù÷ý¢º2>Uâch5mU»¦wƒ�;ÆëÉ$ŒÎ¹^+ñBÓóµùƒšvÅšör::M;‘Gø> stream xÚí[ë�ã¶ÿ~…Q¨8ëDñ©-�6¹ A�\ï¸I èlz-¬,m$ùö¶�ÿ½3Cêe{ýR‘¢@>,MRäp8Îü†äF³»Y4ûúÅŸo_¼z-Ô, «Ùíj¦Y(¸˜iiB£âÙíröcÀCÞ̵6Áw_ýí›ï¿¾™s΃/¾ÿÒeÞÜ(½}‡_~¾ýöÕëXŠH…:60œ£Å°Í‹È3Ðþ~uûâ— ²ÑŒÍ´cÏ4�B“$³ÅæÅ�?G³%|ûv…<1³Gj¹�?àÍèY>{÷â¯c ã@A„|>BÁõ�ö(˜(çô‘†éÉ„1!ƒ/˜ 9ÍãBIìŠw_¶1®³ þè+wGðŸo©gITî)o)_ì2ˆô(KLO=“°óX¢[&ßÝÌ4�ê ¢|Fù‚òw—ÍŸËPJÖ’~$òœÈ ¦|Fù¦Ë·_‹À ÓÁ0eêiIéæüMΰ9I/¤0Q ™ s‚ŒG³Ü‘¹`°ë[‘ÿëˆ|EK»¡¥} |Cù'ÊßR¾¤ü=¥–jŠó…™P>Å’mâë-ééþgXÒë™è”åRIìŠ7zΑ£óžS%<0­û{t�Ö¹É4¯K—+¬]º\C5"ØÀo¬ƒe¶zrÍÚ÷ZÚŸ".ЬÉÊÂÕ”+ß·m’7з±ÕȲ Këü°æöbÉC#yg_²ÍCnoË{[pÚR‡’˶íFŠvHÁ”‰C-ã ¦Œ qµ~�î~Z½®g¡Õ®‹ÅpÒO+ÍÃØ˜)öñbÓ ¤Ò ¤©ŸñÓ§Ý újÓNØ'I¤”6>‘ë‹%ÍlàU5¹8CæV{s›S�íÌ­&skæV€àç�Áo;º|6¦[JÝx)¥¥·”ö£¶½ÎqÁ<"ŸNÎ|wMyçÇ›�w_Ÿ®˜š˜ORÚKILTZ¥Bò ·ž(Ȳ3ýú{Rœõ¾9¿îªøû”Ò…ÿzñ¦öQ4WaÇc릕«)V(¨ã1Âq³~ºÿvýz&zu¼P—Ã!C#Ð~_6èÛ¥ ÖåMl‚GWxD?ï?,K÷[”�ËTvQVK—wÐ2+ʺ…Pµ*+̨àq�`¡±õCº°ŸC�RãŽfÜ‘pü¦À�yÈx§€ÏÁŠ8 a3ùFõºÜæžá4œm¹Oì<ƒR VÀÌæñ¥tývð�+˜HúàX´ÏžJHŸýÀ_4åæsQ˜Ä]£Ðq %e0~2ÑF�é@ø‚£/é~Ä*³¥«Z§Å2ÏŠ;,1Ç#VïÈ«²b™}Ì–Û4ÏŸ\ëÌ±é ¯]©Úæö÷µk€(�x å�F`;�­oé*«N0•«Áõ§©A “1–meï¶yZµàô§f‹ú4” àj)§˜Šˆ…ZðëMÅéþg˜Šë™hMÅÅ’8‰¥IÂ(™âM/¥0Í™J5á×Ô$²ÛƒÕ=!´‰4„3sÍ(U,ø)’QëÄOûY~vŒ&Ïõ³û'2¢?‘šÀúÓ0¡äIDÍÀã„ÖÊ3¨j¢  0'€h)ÿ‰Ò}@¹/K€‰8†èÇ8ÞÇqõ¡å¯(B­i4ãGèá¿S(=€ÿfï´Å\pÚ"5¸¹XMÚ°—’˜¸c!nJ‚¿ÿã-ûldµ:£™°¾g4ã á»±ôý•c;Ovh�öf2ò1„ÓÐ7ƒ|½gd](«Î“«Ùީ֦€LNpmWWJœ�e¦qNB ­@g§\ !ÁÍÕPãŒþ§¡Æ&z+q¡$.ŽJ¤b€ë�| Ì2¬¶Å‚pì¤ íãî�±)ß´�÷À#Ì?ê"é¦J‹:O!qcŠ2$X|ÓYü/rû È"-è ¯câyŠàŒpzíÅÈóÌ Áûà`®´ ÞgÍÚѦ�rqPØÇ±�^z NPÚ!ïÌmÂã1ô.ºHÏx‹Üïžs‚ô.×Ç X:ŒÝ•.npÅÌ%§îg!ˆ?v. I):3�F1Âs1žŠC@+;a‡`CDbH½¦@ ùMv‚Ñ—N”uV,0ÄK‘/äÓʺ>.ôE3Wà\[Ùº!i¹:úuQ¢;géCa?‚_ú¾I±ðä 5žŽûü]öqЬ£×‹t_bãØÊõ‹²¨�aËàýº�êª^ËŠbcVöCË^ TåÙ£@x[,-0Ug•Ó4×\T52êõ ºÛn¬WèÆ6ŒûÁç±¢S‡ÑPÝâÀ.²4on ÷ØY‚ŠÃ~­×¶>0‡¦nBÍ}ðÎ7œsð0µ­:�<†…ü6o²‡Üר}‰Þœ:R\kŒ·@Öi•64½X#n(îÐ�až0KY-±™§ðH€?’»ÁÌÆ¦E×'�¿iás5Ðo&Vú³òÆÁEÂE,pPl6÷Œ�VƒÎp,%b ¤êÿó%ùþF㸠Ìôݦ>"KÀù|(J®Ú•ÛdZt að¿•$VmJòÛ µ ÅAͼt±– J×S´¿ø•Á†Nή³õôHÎ0Ч_®œÀw#y¥-:Þ•>êêRi”¾öðÑ ;KÌü|1ÿð€"¶…G";‚—&Ywç’þæcL. A:m›E^ÖNÂÒÓþ8Tœ — 7䶪Êí`+§mlñá^ÀØ�YÚGh¬êÖÔvÑ?_‰C‰vÈŒ3z-C;Zû@ólŠOZhñPÜŸÒ�ƒ‡P ü岩[�²»†ÁÐ�»}áV >l²»ukl ˜-½íqom� E?q¯ÃTèð¶c$«|›‘°`<x"à™Õ®W<’Î�v䯅0ó!­³…Ë_)r�^­¡F_»/õÚq±Á=*á³tÅÔýäYÓäh¤ƒ‡DÃ-Ú5]X=µL`Ì:èIÓ÷Ì`q@�xÄÁA¶š‘ÛU3_‘Mµ.9 ¤àíY÷ªÑÝ=íê(ÄÖ¦?A„å:I°—ìÏá³U/Vn&"Œoë‡Ê.¬_7¦]äÉ`la®‹…í>™À ÌÑ iTxoÂ_´!§ˆÃ§¥…¾M£Û6,>ö‘ÞhÔG׌¢F§…øœI“-|�¼ÙÆw[ŠDF|Âø1 6·ª˜ëâ,ÿ%ÅŽ¡mF`�µ0.¶¡»8ìÂrüî7éeä(Ä­ž`6kiÓÛ6$:�áæG€9@/½N­|ŸfÜ×­ j1–ü¶;0ÛÖ,—~ŠÎ�Øüž†Ý›ÕŸ{«ã&š? Î:D§äˆ\<ä¨ZZç¸Å#�C²fܸޒ®´‡2}T.ºÓ”ÎÈî³æ¬^gúÃ�÷ÞcÅÎ�¸ìðí_íª:Ãù†A¡üÖV´èôµ©êQÝòa6óT ÔZRY(Юöõ¥¯Û‘JP·sÛó앲ã˜`B’fòãC‰ÆOŒ7k%‰OÐ=xŒ^,]Ó=ý×Òiq«Pã?™Ár$f`á“ödOã?-òmÝïj"0`ÂߘïèãµáÏ›‰gWþkß !Ÿbã=íªÀ Ô™Lª*|FSû˜~� |ßdj0ıÜC #’øUÿNÜ‘|‹öø9š H9„ɺ?«CÖ;ÅBw‰ ž/÷v‚‚öë Qv(…;Ñþiì¡Xâž@Þ²v¥�h¢{/ëþ�%·Ÿ^¶ã»�Ç·¨-ØY�…š6Îñg�Ÿšž:VT%©Ár»hM…[”Ùêô[ ++&\o°¼£¹þzãŒþ§¯7&0Ñ^o\(‡“ï(˜Í�ö?/“˜v/Ëð=±–W=¥ˆG71ŸÝÌÉúbšSš¶5 <ûš ßQj)]QÚPúšÒªýŠì¡«Ë¿»JXwz˜ÎMµ+ö÷²¿OæT¼X|uy—ߺÖ}uäZ7‰PR8ÁNTÌŸ¾ní o©�¹ÂÝðKã~:©9y9áí^z °ÿt§y!�ê´é³<Ó»Òö”Ï�¶ÞSúnpÖ—vÿߣ€±½ÕRÁ¿O"�A›¶a.$1qÃh°ìªw ¿í—û…ÅFê=ÕÉQ�’à:v|·wŠ]ûcÊ=a°sÔQ±0Š&½«¹˜ÄDuÄWìÂã~Ázì½±Ñ!ã�rþf<Ÿ7ž§uó/—êf|ŽnJH5ž¤›—’˜¨›Rxò¶Rü¿ëæU†ŠIÿAM÷XKû·TE÷¬Kû6ý³.÷ÒJRsŽª@ÈrÀ \^ÿÏrgô?à_ÏD§ñ—Jâ¹÷Kíï †™! endstream endobj 1093 0 obj << /Length 3736 /Filter /FlateDecode >> stream xÚÕÛrÛÆõÝ_Á—ŽÁvÀ®ûä¤Nâ6qÜX3}°=˜€DŒI€@Kj¦ÿÞs[¤(‰ ›Nò å^Ïž=÷]E“«I4ùöÉWOž£’‰ ]ªÒÉÅå$޲0NâI–ØÐ¦jrQLÞZM?^üýù7&ÍT‰ 3¥Íùú»—o/^ý4�i­NgYfƒ×?¼ýþÕ¯Þ\L­^N­ .^ÿø�=‰ÿ»‡ÇLé,Ì2• :5oò¦éËéÌ(ô‹¼÷µ²¥Näí4|}Þoòåò–'uÍJ®šVjë¼í«ùf™·U_•�@kø÷Ót¦là7Ë?OU”57«z c~f>Ÿ7îù+ô¤6X48û»Ê/T¶ÏðÌ“YlBg üÆ¡K>àßÁ>*uA·Œ¡šEAÝô\AD2DEÕÍ7]W<O2ß …›V¦•}^-;žÔÔÜIû<Ãc©`ÞÔÝfÙ<óC¤Í²dVgzÄ E¡‰VÍüyQÕWa·Ì;€Ê+vØgÓPgÊ/Èëâ9àF$Ð0”eÉ€à�ˆÍÛ²—ÖËeyõnÍd˜Wˆä<﫦ƓgFd']nZn°€pMÆs¦%q‡ùÂý«¼�з¯ê9Bç¡~¿ehYû©€‰0ëépÑÞ©pävÍ’Dò¥‚æRI‡Ò*r×´ÕUU{�UA×—+YrÙ6+žTÞ”«5È«Ìi>ueûeš¤AΓ8Ö�V²œ$ G6$7؅쇓 ê°%(&jl¬‚×õ¡“lUHgYà9?Ó ïBj¨å¨[Xéú¶©¯°î€†Hé¿å=ó[åãÁöÉ{Axc¥©—·<»¡[Ê0q£i ÁáÓ¦ç9WhšÍºã&Ð{|ž”Ï3,F��Iì°G”µ+‘$:€³š(¾ƒ @Ù�—mùËfKFèËÆ§Àée¨»­Óȯ{î¯:^I–ì’ìv3p¼æñ«².Û|y�A$dM×UŸp7 Eû¤`u¾‚ôÍ ddÎò¥l0/QS°Êú•eyÙs�„+ • –ojvóf+ÎØ�âLÂï�Å[ÂÑ!\�Érà`¸(*”]B �~vP�ØÂk§™Tðû˦ê¥+çbÂf…¥Øî–EúÌëŠÓ‰ª`e¾l€O€ BZÌf7ب�ìÖH‡ìµl<оñÀå÷Ó§¶üR‰Å:pºš®g‚°m=ØÌñ î�ç ¬Ö<ä‹ v–yW±Õp[g��ªÉ$›ÉºïH˜q;@Z;tP3“¨àzQ�÷¶4ؼ.Ù!Þx’a€[:]UÕ—ªWŒ±I³öfY�Ý8hËuKòÌË®kÚPŽdÂÀ:­ *± èP‡j »©$x;Õ1XÔ¶Þq²a¦3^ømÅŠŽ”5ÌñG£—ùŠ»ˆ2SÇí¼ãqF6 ŠÍœè ]ÞÊa�i óÁ› O¬x$nÈÍÖâ5Ó˜0,»C£ÂØHtøqJÈ^1 Zæí²b¡²ÞqâH†Nˆ§ða¡ò]¾^{ÚA“Å‘'£ÁCáÈûFzXiy%Û®7­·~ Y0ç{ A¢¼&�ÞŠíˆ{$Á`$чÅèãòVxÈ?älòÕ*o¹MÊ¿_å¤EŸ7ÝìM¾ig�‰¼7ê#±b¯æªU†�ëª_ÈŽ¯Fx–޹�‘!³œ�)d¼Ç("?e7o+± óvÁÜQA<â©Lj7Kž�»µm)ÑWCöR³kÙYï;†¨™›jÙârç{e?Þ•$Ñè×x$ˆ\êJ8EÍ-õ; Ê¢<îÜ`ù€JÎ?׋f)„báÇ΢¢ã(r9Ì ¾PàövÅ`*YÛ8ˆ=àºí*Jy¿D‘ó±1̪Ktû‰u°‚‘�VF«¼æÁ4–j¬Ís׸·ä‰k²p⧬ë@SY†�ýJ¦ç²w#Ð=2«.A·2§Þn"ÁÇIZ‘�Ò&ƒƒˆ4âzムàw�º7“Û­Èÿ] ñ”N"ä2®,€¡qX-Ú/]¶§õ±ÓW~{FŸ¶ÝšSîlRyÀRúS¦WªGQ¦"¾!Û´ ¾†«IÙJô�Šbe gŠ1v~…æCOa&öÖ@Ø~ScTü�¹EU0‰t5œt¹˜Ͱ+¦�;B´æå=á_IÚr•ƒ¿õ7 b·1ÛqðZ¨,~2ÄP-©¹�¦Þ¼à¹éñjQ%¬Š�Ñ‘* ÷%à€±¦÷w,t¤2«ëá>qè(×x÷Nk°.Þ_’Ù“(‚‡¦hÁW~2[%^j�ž‹W¯yúXåYѱ•¥¯ø+4LC`q¯·»XÈ Y›ñc\�3ëï»|>v¼ð¬>Mнå�¸$ICÅü*>mÓ2öƒe£°I ò¢1Ø»£Ç‘ !\X(·64�®åB²™¸ß5Òã¿ ã¿QÜ0hÔÑ7ðôò¦Â(¹ï^ì<輺xòË“ªÑ$†èMÁŽnb´ -h¾zòþc4)`˜jg'×4uÐÙl²œ¼{òÏ=pR£Ó0JÓ‡ ðúè„4Œãì&ÊÂL%€$J‡„à <•…‘>�ûOeÈ ÈÁ=öa� ©¹©S! H…@-ùk¯&ãæOòÀgE‚ÀŒå4¥f¨4T‰8þxïIC`Tù S7ÉB—E1ÃV zq^h©¬©,wÀMÞϲ, ¼”îÃÆap„`1„šT6Tn¨\SÙíC´àÈžÂ5>¸RÆ*†®6q'mò°>�&G*=GŸ‚I?GŸq„>ýv<Ñ=‘ûŽ} ‡+Wèb'Qêp�õ6mâ³691aú˜E6¡2zôPzÈ´»Pg±ŸsÕÒëÖ]PÚ„Ùö‘–Ÿâ4>UÔ³¾lWøºØ‰É‡kþò°±aâO_¼xzç$ÔÆùIž¹8dÚ ï$Kv¢3•€‡�“ÝPŸ¾l§v€ƒðÓð­Š¼ß £º[v­pMÅ‹ù·jÇ„ ÈžE‰wˆšÂÎá-Âðc µéæq *È;ï,鎗ÚcÜDØadÎÐRmÐ{Ž–âq-=ÑÒSIñ¸ÓÓ I–žáôN†p®ÓÓY^69äôÄ/ù߭@`Н³–dp1Ÿ©^R½¾ãµàó¯3Á‡X›û�„;kcep­ÅÒ_ps™åÆÝÂä3ÕËé]˜÷.ÿùˆip÷8f\¥ÞLgp{úþNHCÿ9BƒS ZŸ#d§B8[ÈRø§E’£2“‚¡î Ûp&âp†dÅš(þóðÛàôŒ¿ 8…á Ô¯¨|GeIåúŽ4ÀÂc¤!Ña $>CN…p¶4à%ÓÊc‡~DkFÒfâW�ƒ(ņ‹Àv!�Û¡ÿ‹ÄÁ�S5Џs*çTÞ½"Øãì�1alÕ9p*„³%ÀÀ¾Jž/Ì#0új��é}vAxe0þŒí9”9ÂÙ”ÑY˜$òU(9þö¥!Æ»ëG=ÂÙGU6Œœßéi×m4 ñOC°á2º½’±‡úÏT^QOKõœê+ª¿¥òGêy·¯uÚÁÍüè]¤óC”D…^&øöŽ}YQù*ÿuÈÊ<4‰‰dVˆØRÙSÉD¼Rb¹¦²•s*ÇØHw÷Ðhì¿x:ª!!ޱŒqÌs”âTg+ElÃn5$×ÙéJ±}»Eþ�Œ:ò|ΑRЃOEÄDG u$Žä†Ù9ŠR\Pø^°Ç¥¿kØ –þ(EÑE€–TÖT£žö˜s«ÿ­DàB•9G N…p¶D.ŒɱýÝÂåÒОsY?À¹tQÎ…©“7?w|p lX%çœôT¿ý¨ ⟎…Jûg‰èDCèBkã±!4d2„† a"ý%•7Ò³§v‰µâX@[B.!„<£Ý?ã=h%Y #펲&Œ¢s¾¯!eç¼4âñ—Æ3ðÔçDZœþ=@¥6t£‡lÊÂ\Ç!yZã,¤Èn³ª(á$òÖaˆR™à7ï:I‚ñ9§SE–SMìN*ÐÝ·{¥ã0�†gù |?ô•T=Þ|Öyß—­G‰³ÿ2>@¶ýf�›#J˜%›}ÎiN6ÀÌRÌ7˜ÉC‡VíeÀtó†³ @W972À½'6óÚçiXÎ,ì% Æ8½y¹Á,Œ4Öüñúw2’)wjÊ™�£ºª9ÁqvûbeXŒV ä:^÷T¶æd¨®’¯t‚‚w^·å¼,$ q2Cgúµ—ä°¨ú²[çs>S̹ûœ»¾=Œõ‡¡”S|Dá4·C=4€ùðÅÞ:Éñq>gÈ�’èQáÞŽs§‘\ãMÉˆŠ´¤Tød›Èט/Ad))Ž>È,Ê&˨Ø'å'Û† §$½dÈùnZú4•R6r%“Æ<¸f”–+ë|Er•ìRd |›¼†Yä[®é¤ŽÒ˜ñÿ€-:.øûž“m–¬_Ì·çúw ì¨KÌ[ÅOYC†‰‰ñÖ$ÄT²`È[N¹ÕŠå'ñ™È)¦G^¢V- %âžì‰;@ö«îÞŒiIÂÑ>[+„&gë i{ÆÿC‹dàˆÀ\’<ø„CÂÍ(mO;0ïéÁÌQÏ"J[ÁUá¤^³›š ZfŘrZªålWNamêzíè‹l&9¥X‘¯t6¸v>ã,úa�7ÉÒÝM¨'Ç> stream xÚ½YMo›7 ¾ûWè¸í K$EIEQ¬K7`Ц‡mAiênA;H]¬ý÷{HÛÜ8±Ú¸»Ø|åG$EQ|¨×½÷�BN))ö�C÷g ™}€Cn>"�ÈGJ ê#8ûH ¬>Ò‚¤2é ßÅðsM.¤Ð ›@¡÷l>25“0NêcV»�áCÄ'tHÍÆŠ ç $€KƒŸjÓ¬îᇚÌ1ó·ŠÏUHn—n¬&á‡VýWØè¦ 1tm°Á9�»–˜ Ã1‚G&!YLK6É5 pâ�z*Õ¼â†`­Æz VȤ¨÷’Aö¹˜|EØf[j‚zf5‚K¶¹X ‹û"=pI6‘æâá.R·0Ä*ˆ:«Ç¯ÀFeŸÕwµÀF#Ÿ­š/PÏÝc*Ð×Õb€!ßIl”°ÏÐD”aNb¿Í†VH¾Ñj9à¾h€!Ä i#ÚÌ’j[‘*Aò|ª°Ñ^Îl±Í&Â|9›/ßY�U›?™>Ÿ½[¼¿:›½[Õ^ûmöúüôÑâC8±eâ@FšäØúKØ;½‚«¼e…8Ÿ/ ôdELæ–ÓZÈaµ–Ïó¹“éñûWKþõ|þv2}´¸z=»róùåôçé/ÓÇ'¦'½4�ϰVË̆b¶BÒ!ˆZ"Š:*DG4àúÞ‡éÓÅ‹E@º|÷ó›Åb s³(é{ ÝA¨Fµ.v?Ý Öífp@2Ûâ¯-fÛ"³-þÚ¢¬-2Ûâ¼-2»‰¿¾š²„¯S–ä;Sëš Ðö­…¾êZ�tPîBÎ 8KYbOv B�ƶ(j&Zž}”A‡«Ö”¥”­í�vï4Ϫ5ëž)}KÚØ‰TŽÚ £ ä”4Fɲ´Gme_Hø€!�Å®WŠˆtÁÍG¶�Ôn Ç?ço—÷þ>½¼<¿øx@gXѬ£§E·“¼ÅFŵ›—¢/§6äÐÇkœº9É«~\½ÊÝLªÛèU÷^LUdm˜Û^Ýëf_QRUxP7*Q´23¦[=’¶QÝÆ-D£º3¹Ó n àº?ˆ&Ĥ© zB 9*£{IèÊðîºï à-W±ÛÐàÒšÿŸ‹ÛUÝ™ø†.n_M|*׉OéÎħù�¤ÆØ={ÃT¢½Ç‘Œ’ÕX®1Éî þ3ÏóH±\+RÊ_Ðøo�×�¿Ø‘¡=àUãÏŒn¾AI¢½XrAX”†\ÇÅÒÇ èº3 FA“õ�yHoÚýi´àúÓỹ’.~ƒî ÚÝ\õ[€Köëùô†NdœØ­��¹ÖXÒ Ï,èÎÚ 8cOšèÈöåŽå�å{u×Z† háx(Ó²ò5W¿Ý¥f¬œo¿È»á¥ÜWWð¾ãêÒï~ui›KÛÜXú/*Ÿ½ÌAûi¯øñ•ÅÔp;°W[Öïë>Ïz¿9\+l|"þ®åö�)´�s·9s­ ¾#Ó1šoûÇ¥  &„¥K”dÍ%GÍ·2Ýhp®1]ÿ¢v¼ïj°1KsD‹¿’“}èM[ëï5G=aPž´:¨ÛЭ�‚k‰öà ZKì;ßÞìD…Û:ŠÆ%5íäõ�h4@¥ ‡„ìlñ(:û=ð?ô¿0™ïº endstream endobj 1117 0 obj << /Length 3829 /Filter /FlateDecode >> stream xÚÝ[Ýoä¶¿¿bDnñC•®H.iz8¤‰Ñ¸Üƒ¼KÛÂi%GÒžm¤ùß;”VZëv½·) ôÁ+’"‡ÃáÌpæ':^Ü,âÅw/þrùâ«×Æ.2‘Ye—׋T £Í"MœpV-.׋w‘Z\,ÓÔEo¾ý×_ß~w±ÔZG¯Þ~Ã…/Ô~úß¼¿üá«×*4±©r0ÓÒØçEèŸß^¾øõ…„b¼�‹4JªEªcá²l±Ú¼x÷>^¬áÝ‹XèÌ-î©çþ€7—.ÊÅÏ/þ>¥K Œˆáõ <>~BÁÅÂ>þ^úó™,ïTIì{éx|*OÑp*ÛLƒÍsû'» &ÊfQåýJ°å]Í-ÝmQ}à¦úš›üÇ å"ß<ò) ôvH©@@¦·Æöqsu‘€z—3'ºÊD’¤}×_begR©ïÓùfSTy9ˆ8¼@ÝÌò&ð¡KUWËô’TÈ43—·,†[XŒŒÖEuÃõœ/ååÖ¿„:¸’Vx Bû%Öæa. ðñ;F^àì è‹ Îæ%úÝ$áy/oacLl¦ÜRË5¬‘ ÷·Å éÝrµÙ–¾åbÞÐè„6®xF®¬=òTÁZ�-ì¶É‰¯™¾yUÕ]ÞqG˜²èÂl]Ïàªnßò’ꊤƒËŠÃz,¯çû¼ý@ÊSÂ*”2SIpS˜Öçoój-�¾‹Þú‡. ©ùéó~ÙXÃe£ä��î/vÄpIiôˆûWT�~“¯<¬ºÅÆ›â#v½Ÿ°·ª‰™uxßÝæ]ÿ¢j»f»êÚÉ2öåÐ:T‰„T‚«¨ø$™i�E¥¿î¸ úe^OE‚M×M½á!a¬Û©[Ë/öˆ»¨)nn‘RÇï{Q&Yô4øa(n×_“¡Ì—‚4ç–|µã7‹òÕÊ·-j‹6`-ÛWªGöephƒa!gLP¢“²ƒíß6õøzJJ§b0ü/ª9Bàݭ컼D®d„ê€ÜÕÍÚ7¡xØ¿ ÒÏ›¼Zy›Õl‹Øm²­Aò† ;+Å—EË­UÞm›¼,C'T$2{©RaöÍžHª8ìæ­kO™»üè²þàƒ,L¶°-iGN× ™(8>¬ “É9Ù;aÌb9ê…RS÷’Úä[m² â³|×ø|ƒ]®È0q0xªÒïu ªäÕ°�ócê÷h¢¶œ.USÁypL´›�NÿF BÕ?ܕŪè` @ý_r#0¹òìʱ,@ÏÉ›Úɹ†±u˜§¨®=ôÓô¦ŠÎ]kü;Ä·ŠÎÇX…“÷oU�ºç£Ä¦½¡’çÂÓcj²ç”_ºÁHnÀFîÚ™ýÄÜÑ æ†Z‰ÄùDO÷\ÎÓYŒi6¨Ö»ïp–÷s³XP524åâ�;†‰zBÜÀÃÚŸNí´H“Áv7ùÿ¦¨ü\`Dëát‡@&( ¸á´�* "Z¦àÛ�¡��Ela�î¨PRNÇ÷„²LT-ÿÌÏÙÆOð/uçO}¸�¿VÌË5È)_u/Ùîv-ÀMÐzFåÜ ¡è òô’ö}F•¬iúQ/5¬s®é¡×MŒhŒ-Ö\fת£v{ÕúUàêJ!?m!oë‰A8…ÆTã^Ýc]Ò,3§Š†øvXB9Ͼ‚uªASФ™äš{:aFˆx¸}ä9¨Þxp-¬.‘Ð—× ïÚÇ ™ìò®Óº¡Ã7`ão°S˜á\%™ˆµ;nÈ Ø»±½–§�<ì�#ãˆÑMùn¹-¯†�ÏETÞ²ÓfQ4üW�OXA<«9RX7Øý¿çÂi±“8P‘L¯õwpĆ°Ò…Eƒê[놴_lv 1]ÂÂàD-XíËÀþMÑ›uš²rÂíRŽòSê�%"µÙ4t z¢Ãˆ®¾.KVÉöë£ém¢3pdÉémbˆþìôöã�§·g0ѧ·'Kâ(™èX¨Lžƒv�Lâ<¸+ÑZ`ýÿƒL° &uζœJâÌmQñÚäC"o�:‰~jGôÁñ[½ ôÊkè±CMØ¡‰î&³ì±:žÆƒ÷Û–1–jXgGá9dNcç ²€¯ÕV�¥,§’8SY `QqTôA¹'„ìŒ�Çç W—œ»çÉ.?€=O4p°”±=Oƒx† ;8n‘¤yBòøÚ,%Ñ ÅHÛœsÀÆpƦpø€=>þìç31ØÁ©’8?6™ P=FI ¤ñ÷ ÕÛrÍU_µ[D ±ÌrbçbÌ–ßP¨ ]CèKeJàw­uÄæ¶Xû0j"þuH#GyP5&NVî¸xõó%Sp<ÌHf`-¢–¤ã€�k•q -#Ü+Ž1H#¿*0ãòaA#:@Yôë¶èBÿmp!~Cò l�QÑ¢Z…þ5Év2Ò™l@ceøöiÈè’1c›2ƒ WC¦@9^ÑpsÀϰ•±ldd“zÖÜ2`а*CÀN·?¨Þb¾R·{#‹ª7×a^ع]æÛ´žq1‡:¿‚ÉR.ÙO¸q´ÍX6+„7ÃsÛ†”1=»®)®¶]h¾iòÍ&GUSPDE,X‚üþ{„Y„Xm·w¬-uÓµaP?‚§¼�a†3û´ª·CjûÔêù{�yÁsPl«öFþÛWÐÊø=À•¢Zç�ïGåavÿ�¯ºcóOçR”9Ì&æVü &^wwM= þ+´Àím^–\ãŒ:ŽŒRGë¢]m�YÛ¶Ae Šñ+ŒP&\øñBÃÒ›–� ”‹“yf[ts¹92î„!¼ OƆï/¶ÿZbÑ�mîJÏ� ¼¾’p¦ Ïœßa†Š“¹ô¡á¼fìVÇíhæØ˜sµ,º®'¼©›0ßÚwyQÆnCã]¿ÎÀÄÌ>ЪÃ@ŸY´ÝŠúÑ–!iîFÓ¨ý€µôCÂèÕ¶ä°q¿VCÜ�>8�Wn?�}l¸Úž„q„!$¸]5ÅÝuêAÚOàQ/™ ®�˜¿h³ƒ‡CæßC· /Ó.B âq Lm,ÓŸéZÚiO§09Ð'áaª„4@02 Rýb=Gq_FqŸÃà Êí}äÿ�#½Š¿C£1Ñ;¨iŠÙ\ŒÝSê$È„Ìóýq©hKùÓR9•Âa© ÁLX’¥Ky¸š�¿·ôëé´Ö)M778~MЭ W1º¡½¿��ÂG�ÂTå¢�J®ü>òî£Å�{HGþ¦Ç^ãùGŠ­¬Ý}@ÇW‰S0HÉ=û�  ûœ[¶%á‹D°úÉ—Û÷lý¯[OaʘbÇßl±TówÕ* 'û�ß®VÞ_�—ƒµ�üÏhŽ”¿º«;GA‡¨ Þ³(|½é&')�Ycx¦=»#l˜@ý@ew÷" Ã€$ø”Q ÀRsqðxÈÁUÿ±§`à—ÊS÷1ãj[ßM�iƒ·‡½KHƒ”KÁ”ÏÁUÝÏÀŸ1þxt}t²$ŽâŒ ž6;¢8•ÂyèšHTöÀŒÛ Àˆ@wò­º„Rz¢î¢õŽñrä¨Ü=;íWèýÏO&qæ®@σŒÏÃ�æášÝ™Ù-š¿â'ùbBЋ ÇՆʯ†Ý²á·?Øž½7‰©= —?™Ä™{ƒ_²>Ñûƒwí%¥h#¥�±´Wt[)ìO:ÚŸ”öÇž²?ö©ón ŸLâÌýI 2Óa‡Ì);;c0êv¿G�R4âsþoÂR!S8|”ÿŒ£ôó™Øíò‰’8QTZBÈ�No¤ê8žp±ì8xÑ;æöpë_\÷—?§ß¨A ñð‰c´KŒNgî‘H8øÆßªm¸äWÅõ#g7³’ÉÌ 'ãÒZaS3Øç†éô\9),ÐÍ’xÛnø„®Ð%ñ8‰.9)áúnx›Ç(]óU£]ôªôܘ—mÝ—pI,)t'È_´ØEÇ„”0Z­¨_ÐF¹ÖÃå\…�]�€6‚¹‹ô»Òå|b½æ"AÔ³¿ù– 7ß°�¯Æf|5¶Ÿ–€æ �íC®KôöÉ m5Ì€·kðòƒtP < |¸À«¢„ä È>ö¯ðÎ']{rÞ‹ Œ ë‰B÷{b¯¿1ÅØ8÷ãûŠ�¯®Xm˼éÉðóŠí{¾J?}Í7\{&ÃÑV>%+¤u|ö‘4Æ— º·Ý�¤ó•XäTÍ@c³Å´1QS¯0E*ž(ÙÔµM4RƒÓ±Ã7[2TÔ5^/Û† ªX#mĽܒÙA…o#>„!S‘g”ÆcÃm ÑòsUo6y—s…61¥&Qm ÔDGJ·±™uê‘ö«nÖ˜‹'©Al#†6>oš#­ƒ€@ÅéDÎü!É0ÈŠ·z…B¡÷Jå⦪›P†=lC¼•³1ÔÈ·ü»fK´ endstream endobj 1147 0 obj << /Length 4298 /Filter /FlateDecode >> stream xÚÅZY�ä6’~ï_‘ ŒrÑ%‹"©ÃX,Ð3Óm÷Àã�—1íV¥dUj[)•u¸«ìñ߸¨”²TW×û�EQÁ`0Ž/‚m®6Ñæ›W<õÕ»Ønò0Oâds~¹QQ*«6©ÍÂ,‰7ç»Í‡@›íÇó¿|õÎ$³‘±�Ã4Ö@‡ÆüéÛ7;û�í™Ö:Ðáö,M³àý_ÿöÝÛ¿¾ýþ|›éàÍ63Áùûÿú‰½Š„{þêçW šÑFm”ŠÃ<Î7©ŽÂ,Ï7åáÕ‡�Ñf/ÿ²‰B�g›Ï4ô?ê,ÝÔ›^ýý„Dª�‚ #xýþ>Z¡�„J¥O!a@j)Èñ.ë03ñKø°qFúù²8•ðŠxcm&™‡&1÷2õ\ S!HK~ÝÕfþøÑË4Û˜0Ï”f½´an`3bÆ©a�S'š„Œ!1j™¯Þ%°È0O#Å4`+2¯°ãö,³AC׊®Ã‚Üæ¨° ¾–ÎSÚø¾*9QÉ RÉ‘ ¶Ïéê¨ç†Úw¨Û ¾ÿí!òipI:¸&AKíµÏ©ÝRû]�0ò°D€l™àßÀ<Õ‰øpÆD¿/:×­R)�éK´æ™^¬4Ê„™âm�ë;Ñ ãÁÄDCþõÀÞ¤ )�y@�Ö¥¯òàj¶©ÅlSßLº”ȵ�:Ù§8‚�zHs’øÞ-Nóà¿ïÿRÅip “ÆAMב®=]¿¡kGׂ®º"ÛšŽåÚÒõ.Û:}hnÔ>æ:¾«˜ñ“3ŠC%/ÑÌçRx±jÂ]+qöÿ_7qÃSÚð”69!mMɽ°†¦3 MÅÝÙjebû �¾@CsÒPMª‰a-úãÔÖļ&æ51¯gzê¯-]Wô4ÿb=}’MrFF½@OŸMá¥zšä6̼5ÏÑSØÐ(<˜¯� (ËÃÄšà>¤�YýÜ÷�ã¾ðá·ú¹²8Å}Ñ£`?ImhÍ;ö­ëÜkÆû ÇÞO@)ü¶^víá¼ý丠j#ØÃ)/(;W lRgí€Ï ¯×µ[™#p§§Olªa…> À4�ý ÏÕ°oÇAè7[`·þ¡i‡b¨ÚFfG¦™�bene$DÖÓ½ou e§Ù_oÏLEß�‡ªÙ*t88Á°/†•9δI!­²›3D@VÜþëÕÏ'±pñ'9/8œâPÉ//ý»&šã#ÆD;ß“fÜ™ŠÌBñö;Ærü 7Š`ñ¼ÆÁg@³¦ëî ‚Ê²ÐäÉ‹õ\�*Î@ö*ÔZ´d µÜÒµ£+ ÌäH$6¸n¼¼‹è>n ~µ%>ÌÓ&wüB¼¡oH@ `ŠÎ€ûgJGjsyášÚ‡E΂±ÙÒyFa’¢ëLC“Š:ü ,³Ú¹ŽÝÄ)›ƒ‰“­§C›Ã^wS`ÐÆ€g£{ü¸²Ihô~»ü}Å�«œ<‹Œ™»bœ}ÞËÚz«[~>8Ží³†N»‹ëk?Âw û�Çv®t;\{´4�¸/ÝÀa]‡µ°Ú8Z‹MÙ|Iß¹+×ìÜʲt&j‚.@Lmäèaw~pŽ‰ÈŽýX–Ž9äGf>û˜݇êj/KÇÇRöË#ï-t†‚6ù0ò¥>ÂAoÑì¦É;ȱPFnþP|ÚÃ[5HìäÇÞ�‡‡ÐuH_{WZÈøª÷]Ž–})ƒ TA°¨a«o%ĶOq²:Uü"×ñL �»X«!f&ÿ>ÖÐAˆêWò³#ùܼ-ŒÍð+õD7�µtç¤H±½iGÄxØ$D�� FCü&ຢ®~u2 øÕö;NpG¦p?Æp~/Ú†>Jf%N,  ð£Fð<É ?Üc– E¸}bnî籺>¸fBC•. “—Yx„¹Aðª\/íàbByVå\æIà ˜„çöõ¿¨ù ÍVÒÒ·l�†£ÃzgñŒè–ûêùìkàçÞ-´.LÙL¦¬�¦b?Ëè–”vž!2$pØèó:™[&)® t›<³ðêÝ&¶Ñmž-ŒÚú¬�9�}™«ô¼bb�Y{ÍÒ;fiä3rŸf�cŠé¯#'ŽoÈYäÞYài@]ô{!$ëqìÆ’Uÿ¡ƒ¤Ò 3àÿ¼óN0qm!y„8+ ë§„LÆkkWì k…Ù�Ž×Pt¼M�þpô›ž¿p7�‚/œe¸ÔÙ,Œ?&´Ð *IÇ÷™êc&Žkv’1_w­T:ŸcWýšŸÝaš€œq •8^ÎÔ%¸ÎÐö}uQ»û«t‚N©2¸áªC�(2–æät#í!a„Ž»eÆù1¾ ŽðÜ$—¾¥,†¾ñ¦�'É»¦@ –“ˆ£O§9…µù’è}JàÞºJIO.«_ A ëPXÀ®¦å{ÙÅP¬x#Cš›-œ‘YËAbHí‘Ñ�&»È?ôÒ‰º�µR’–^ù羪�ÿ¢’ahVŸÒ€¼p‚nìàÉÿlÝ'~4.Þ½K Ð ¨Õ‰�wèjIH6´,zG�Yi/6ì.|£ªZ†º›ÒJé©Z“ߢy£åH��r ò@k7 ÞÓœ«,Ó­æÒÚ'~âJÌô’‘[Y‰>’u@7fbUïV�{*q¡'0ÁÎõeW³Èß{ß[‚’îø�øÊ¹5%H5åbs-°ëZ “d¡Eã} N0™Bn暌*ûû}Ki¼ÛK`öØü UD„†ß êEg*³Àr¾t‡ª_D!žQÜG!åM¬y{�&ÕJéŠcüJÄŽ¢0ñȬ*¹'b³pdÔ°œÖ6L2ý,÷l�×t´,ËŸ™îÏžtj IòÅT]I嘞DKjïgýµ/é:lé/«ù–ƒòçVQ„_á­æÛŽo#ß¾ |s|ëøÖó­äÛ~ñNh^NŸã|ÄKzÂË®6AàÉr*Je$�œŽ‹)Š`5ëã6;NÂXe/Úìç’xd³ÁŒtœ‡‘ÍŽ›ÍhC ¶÷Ô¾äEÊ–ƒ4ö3iŒ3i\mé@ú® ÓH@~C€‡è? Þ�&dtöL.2'qæD®]+ººY¿mèŠfù—¦‘]¦X–�A·�"x¸�^{Á{ôŽ›ä,0·©àä|ÌJ‰¨[pš—ø²0:ŽY€œ‹j{ð�â2Å>ñÖÊ{®ðáßÅåhüÏØËèc­�)§h»ÝkNñí¤ô÷™#¸6B|·dˆ•æG?ð®Ùq“q«Ô/`ÊÌ |@¤ŠÇc�/»é½—ùœ€Å{O˜¼‘E³#7 Ÿ|Þ·žuÜ·p-°þ0N;p­÷kª>`Áßl¸1.ަ¨‹+@v^‚^Wô�GèjÞÅű£l¯ìûÕíBÎnΠÐlR^B®Ænšh’1ÒŸœÚøðŒåÆRÚªDˆà«ãc¬ð(‹© ä¥® “¼÷ù6HÏ>O[Öñ ‚3êôÐ :–\É©¾8Hk– ~ŸqÀ´D¸_±©“EÞkSY¢�6µ[3Î<Œ�'ï¿5«tÀr5+‡%tzÌ]uïXd>+©¼ ô"JT㮊“Ws[À=*º]-28Ú…¢Z²–¶Ú”ôP¶|¾—¹Ù�$É'¤Ã±˜ufu˜¦'À'%--¾�r¬YŽ ;I'ÛNN„§c^² ì»À¬¼÷U쉬”͈•¨™ˆæŒ1X!‰vÊrš�,SµÓtN¶à™mÿþ¬ïf}t€Žß {ÆBÓ x;ÈÙŸÂóuÛã�wPÝî@^�8:zÝà@'#É¥Âýh}YL•M¢ëÓ†åX¸8°y÷àÓ7ÒÕŽdÍb½Ël/9&ZxD{r”låw–ÆËTÓÙîlýø±¤<±d,ñLßà-ÿ%áZŽŽ¹òÚ]€:gÆŠŠ"r}yröìsAæOi"oͧö{é7_*Üs%y±?²ùï:q”…qúà?ÁU’„Ij¦1\J7˜q¤ÈMhs ¥èHpQ¸³Ñ WªŠ` ã�þ†ÃÞ²Ç�SôÚqˆï!ª—ø¼ç8 ]$ lpȦàpån¸y¬ì/q Œ|î¡lô“Òæ÷áõ#q€PÁ‡_õõ¾øúãV1Z=a<‹ �Éç…úE1”[1“<»ž}dl¨õ4¹ÏÈO(ÇÑü6“Æâ¢®ÐP‹Ã¡èø™Þ8¤WÎ÷ÍRIfa¾3 Xi ÈöЪeã‘­9÷ç²K‘¦ /Ó?›þã?WH�+;-INùX‘3ñ‚étXwËÝñÀ}`%%wà^QÕŽö _šPóÎá>ŒDz{‰êpWÆ^†ðÿB,RÂLÃ�®AŸ†hŒ8êm3�Ûh>ðÆBÌsq½~ :¹+~@Ï:_ÊÞ>Iöï'ö¬9a;:9¨¹fþºC5@yÍ�ƒ­ÿ�Å2eY�\󰆽‡5Çãž7?œ¯êް…ÜÇËÜþ šs¦Óã×N½ƒÅnWñQW-ÅØk*£É=�¹Ï¦“84j:ô=zYª` ùK¼<¨£yHij'°–RN®¬ËžayªO[ÚzYÇQ‡Ó„t“üzŠÇ ¼E•¤rïô‡¡Ë[Ì£.û&þoàßsð¯`gœ‹žTwÅ Òµ²Ë7`Š_°¶ÊdžÜ_¶(ÐÁŸ*Þ²ô ÑšYõk"ãõ¥–JXr�Œòà¼LeÍßrï¿A!²ü/Žen endstream endobj 1173 0 obj << /Length 4073 /Filter /FlateDecode >> stream xÚÝk�ãDòûþŠ|8 �t1î‡Ý6÷i,­€ƒAw áMz³‰=سwÿýêÕŽ“ñ<2¹;â´ûQ]]]]¯.'³Õ,™}òâÃË￲٬ˆ‹Lg³Ë«™S±5væÒ<Î3=»\ξ‹Ll⋹syôúã~öÅ'scLôò‹�¸ðÕEo_ƒ-?\~þþ+�ŽÚ$‹�Îa:†•bŸ‰ þ?¾|ñó Åd¦fYçi:ƒQq’ÍÛßý�Ì–Ðôù,‰M‘Ïn¨ã~El3;Û̾yñ÷1€<Ö°ªS$cªdÅÌÅ…KQEÇ*w3g’8/ ^Éòb^ب‚guTî©\R¹¦ç‚j</O£ï“4¹˜+›G[¨Î°žå ‹vTn©\ѳ¦š+€BPšº+ ¨‹’š†ží$‰�öežÄ.5³¹Ê€FŠ—ôEÓ{ÞÓus¡óè_`]ëªãêð¿Øø²ÝÜòKÝôܯZúró7®üŒÿÊ-7íê KÕ`ಕyúu³[­¹Ü\qß’_ß\Ì¡§ï{ßJûu_5uŒ‹›)Öö*.€Uû/kº­$Œ´MÝUK˜ŸÁzî×]oª>àáerœÖE´ü__�¹«C×ݵТhL)x4•EwÜrÕl6LÇ-™âö,ÏbëÌì~2„Gù=Ë‹Ø(ý ~ϵ9‰I')â\œ$ù99ÂãqEœÛüYq£sÏ�²{Î}Jƒ3<÷¹¶ÿõÓ.z¹öÕÀ ÈÝo�é›Ýfɯp0j.mª·ÈË�½ÖEÄÅ/š­çŠë²í¹+ždÌM]¹•™Vm³»†s¢Ažù_`Í}‚(��·\"I�Í(@š^Ê~á»®l+À¥Ar(ºÛº©ôí¶Ùu¬“l1Ë`3MŽÔH5&Ÿ™8S2D¹ Õ•Ç(bF½b�eÇ”Í@c�Íu'¢>Û^oüftÔ—(µ& #ÒylróiI"§ªW,D–~òt)¢OdÍH,cÀt­/û “¾OŒ}'b¨ÉL³w"˜*‘ˆ- ÃmYÕÝ¡@Ü6$s—ÕÕí�X4¸·]�ÃåbÑ´K@¨šÿ~�|I£�‰©¶ëùVEº€_:þ' àÿ§]èÆÌ毥=€jw/c®�#Z¦,ˆ½=e¼LÝwé¯mœ:•´"Æé[¡ÄnA[àt„ ¯ò-R}³ö­`Tõ‡K!Mƒ+®y(郻H#£¸.„dÙ×Kÿn _›Æ™Sß½n!:áL`b¼!®Ç2h²zôRã©Þf[,ÈÑmyé]0ð ˜{iá¢Ïzné¼ßv\äéd`½ˆ·üR{FB¸ þÇÜtwýF±rn¼I÷,hhIè0Îb ØOèõ 8 éþ(P§ƒ¥¹TGÿ¸ =·vkÂE²e°°jâ™ŒØ Kß—Õ¦ã<�Øw=F$ YC«l#›;„Òz‚âmJ‚‰hlKÄKbûtß':»YW l\s £…E¹CqŽÅ~}AúË,z±tÝ6o@,}p"+‹¾½fC§æÆ5g ~`äjb»t‘Æ…2a»>-¯¯o'ö d%éµ@É$³—‚„,ãn›-`ÃbmŠ£M&z+�̬"ÚCä2¬Yµåv[ây´FÑ!ÄÚ›ŠÉ¡Àê!\VµŒgk²Á# ]}…ûÀå V]õï·�5Þ$ªYç0D‰ÖQ‘°´Á*ÿ®D�Ï/%7ö(ΨbÈ e½äú®ßm±á͆aCÛn,©+wÜuå*D³HÀýP‹ôk2rd< ‰¦“t÷T§àÚ'6¬ûËÛrñÖߣ|öºgXŽÀ1ÏÉÿ»º|³ñ\f��‹UÃeС|©Ã€²¬‹ûµò{·&Ô–]q¢Ž 9Á ëvÛ`@•õi¯ðè0KU7Ø;ýà•N[Jë'(/ œÊ 7Á„âÙ:G€Pv„PS�É=6öl¬‰UQþ 6Ëó‘vùTJsßÁÕÅ�á/Wº6�­v‡7}à¼íCÊI³BmÝÔóÞ·Ûª{Âãg"IŸâþXºÊ‘Ž@ðb£CŒ¯­¿Þ”i¥Fñ%ÅmeÌ(^r/> ß37ðb? sö'HQØ_t³Êï û+ŽûK7t&tX1òæ0òÆ4(§£-»BâU�CVØì(†±é$ÌÎqÑÅb<‹«áŽó Py_\ýÛúªi{p¯{ô™@äá} œ7¾nÉÒ!Ú5¾ÄÄz žƒiB‘‹):«›ì1OÒÄé>€N„H¡S,Ànâ^ùÎ×r ‹µ‚\žä–CÓ=P“j–èýð9ë… î~/Â…± ¶Ÿ‹=:pÃuªŽèŒÑ“�Tß×^Ž.CÀb]4êç{$êE.lFªÿÖ8õ­Dd`€1¹¿ÐT…+\v¨§`:þÓæBa÷�£–¾Äغ͆4aŠèÉ(âzãç�Ä»rn‘’>¸Òä¸j38ÛˆÚõU½ÌtðG¡ýköµÇÞ(4€Î�.¾w‚fŠoaÓp&÷ŽûÀ¬ÜÙFŸ–�8ò®¸ÚñüŒ§V÷Mµ­6ûD‚p 5\Æïi‡G£ïýöº—«¬ábïzû£;«£S0to1ê·HðvSõ’pˆ?T ø?î|“Åî±\“™#9/ì³ÙÆ?®ÈÎ@"(²“)ñ¨óm4üÛ³œï“AœgC0ª“\ýa¼o4†ñ†á·Àä 3FŽ Â[ª¹9/oG)õS¼Sý,GuD&œ1ÓÑ¿?x`79w– t2ˆ3™Ì�Á²ø [ªMþ sdêÞ]tEôãý#¨ЯÀ\ ssG«  ž—ôlèù–žžžõñôâ�OÁNßå1õKrJƒ:‡ÇNq&��–U©þ“„@p‹Ø©9P?›r`¡‘á¹£gGÏOèÙÒ³¤'¢mmM‡gCÏ»h›çsæS¤Ÿ.rÒgpæÉ ÎäÌDÅYþç !Y�>…?“gðgAüiˆ? !l„?¿ÊteÏ=ýÀ¥†Ðφž\ZüOå§Æ4Òü¬ ØÉ ÎãR]èXkóÿ ‚éaœã;h¼Ž.ž{ÂøÇ}‡3�Øïò‰”89¦ ×zœŸ¨ðöŸ\P(QZÎ —ƒûÇoÕTŸkÝ ·û×›]wÙ¼õSÙžvÊ™ýíûÜ´pr:”F%ÑÒoÁÓì9%'ÜæàEüz( ×ÐòÎ.:u‘�KLh;ÿ¸Â+YÅAø$u1²ýDø驪ðÉD.)eÕã4Õ2dÕ—«²ª�\ð}–¢\šcÈCE!Yß?®Ó1Úôxž¼¶pXSwFVøÉÎ wˆŽBLú×#<Ç,‚—¡ÆÁÖÿv1W ùU*q HIxü ¤—@xlñ©£Gþ߆žË§&}c$sü‰ó|’î3z�æZB�ù:n¾ÂÄ5-2ØŠ‚cŽ!æ+¥e«IÅ>ˆƒC=¥Î­êêWž)ƒv�L%æ&βÁ~íW¾^ú©”à Ü)½ÏKÓjÀ‰ãËé ’)‡¤ìCÞ!Hü£ÜR S[EÙW6)¢+¿­ê ¿.Á·ºÙabXælô…‡°Ààœ€˜à‡Õaï’«9 +ÆÉeƒ6®)bº�7N>LäàÓ@�uût2| ãŒl‹¥¬£‡eÓ‹d¼bM»õ‚Ã<Êý¥tgµ`ŽÆrúª'ÙNô%Q‚-!8.hÀp˜Õó«ä"O…û5$o0ö›K¶QÈ;rÑíTfJ™Pãñ¤?åX!ÇR²Øð-Qi(úw%roO_@äáó(üÔ¼áÂ=éY6Îwº–À„Êrë9[p4 Ê÷.è+ª—<Ã|ˆÒô®ý 3Ç=F+F…ÖƒÊ[epÐHÙ±Tdièf ²Á'iž`¯r r'?ü°"MÆbèagsMÚ‡¿˜ Í¡GŸšaÎ[µØm8ýJ‡ KÒ>n¯aäËìAyd…ä‘ ×‘¼¼Á£Ï`-_„ŠªؘŸml‚šúÞàƒî²¦­d²qû>¥«)]˜ÚÛRRÙR>9 Ñ\Ö´LÕá%Ô#$z‰úðH�¢oÏRt\Û”üÂK5£üÞs¹pJù›;LÅÖžkú†ûJpmÃù˜)e¼¿%`x–é�6U ¸%íq’4v8´¿n·À®kÁ¯ f¨e°BPå†äéf»-{¼*±NG¯.ðh!¤3ö:αK-›5ðß‘ [€¦Ï º"I-¯Üs™.|@Ž2¾;©%¥–ZIÅr´YJw�t\JGÞv(øw ‘ÑÒšÚgGÉÒÛ\> stream xÚÕ]�ÛÆñÝ¿B�àcö‹K2@ 8�S_'©}@œ EÞ‰µŽ¼�”/÷ï;»%Ñ’xD ÷Aäpµœ����Ï¥XÜ-Äâï/¾»yñÍ*Z¤aj•]ÜÜ.¤ˆCÉE%abÕâ&_|´]þ~ó�o~0vÐSE*Œ•<Ôçoo^ýróúÝòJkèpyÇIpýö—_¿}ýÓÍ2ÑÁ«eb‚›ëŸBd/„#á`ü+�öJÅШySd9cîŠ?;ÕŸ–*ŠŠ³ÊõÈËnµTI°ÆGd› ·—]ë{Vu—ue]µ¡›W´�&Ôç{ TA·Ðxò¡Y^I©¢àf™š ÉªvCoó»{ÔëJ†išð«?ÕHÈ# %A·Î:†‰n†³Æ7êj¾ßUÑd�ÿŸoß—ÕC¯Þß �·K4õ=?tk׿¬¶n¼ß„6›â%:Åðþ÷Ë«ßÇ+Œ‘àG¸’àŠ:üõ.+@×Êà5tÁõÁÄOm!#B‘Ê9[0¢9;è,† 6г©èEu"#Ù+ΚH«¢[P¼nHÔÆÛjE‚Úu½Ýäƒ^lÛí}Áí¤ˆ±‘U:6å%½—5OüªSlÿ¸¼;âºçeS¬º"}éÈ™ìU¶}“ëÚívÓõèQ�èqFXã ¨«Ko1תÏK›L§Søm½mV®m“UwÛì®`ÍÏæšÑè4mwÜGõ­ï ¼rï9»Fö»gì o¡A´agë@£V° ,Ÿ•nJŒXc@'C£ L7 ­uKõ®¸/îqNŽ«�3]žð¼@Ò«’„C‚‹vG2Z= °½À²E©c¡flË(…�1k[žÇp~[>Ÿ ·-'3â¼Y‹*=ǬMÆ0׬E‰ EÁ¬!g$ÓÛ}Ó–$‰7mh¼DðD׺Ó,%è1m#�îЊEÇV,Ž£à/'ìW’ –Ô’½�ƒÁÁ%Á5ÁÁÁ ]ŸÎŽT¦—Z©SÖãX¤1Á’63\3ºæƒ–æRô%Ü’:9I üýã–âr›Å2Œc=gLÅ0{Ät· îÔW±”òènÈézMØõÑbðàNÊ~L²ï%}Ep7Ø ã²oŸ+ûϸ3²¯.’}`×}T"BŸ&BÒ›)M"AÜü4Aö­ µHçÈþT ³eßF¡4.¦Ñ¦ abÌœ©NÅ0{ªø]‰á©š¹Û<§­�ѵsðÔmn¢x`çÎìRK»4¦!í ¥"L>Í´-JQgð�éÊó¾‡5Ñnë2èXÍ‘Ÿ‰f‹øùJ¦¼\ÑAÖpeÁ«Œ¬_ÙÙêy¸ð_Rϧ­u˜Bd2ƒÓS1Ìfµ¶ÀALÙiÛÊH�ŠÞzN“üS\T†’°3¸8Ãl.¸ÊÉk<™‰¬�câ�”�ÊŽ²U۾ݷÛ¢ŠR+ÂT÷ ïŠt&\cð�ÿ…¶[íÀßÔ»ì°f º �¤ Í‹·Šow|Ûîýç‹ "b‰ì³sVw*†Ù«+ã0ñ Ÿäÿby»#/óŽàÂGdÿµåžEJÍYÞ©f/¯H vEŸô”µ�ŽWò›ˆÄéàî;òÒkºæt½ÈÕ�Žì¿>kÿɱ¶H“<¿F&µ¡èùk4Ãó×H…x“&a’úĉ¸Ü˜˜Ä†Q:'FžŒaö\À¦]V>'KD%M/§(.”ÇMS¬H¦rüDðÁÃf#éøßŠyœè“~^lÏäYN©öù›ð÷ v`¢C%쌴0b0"š“¾ÅùÄð :úý5‘Ó 6Æ‚†�]8úŠrûR0Û_äÜTV|o·ÛÂUrðY…&T/v嬋,ç‚ruÅåoµ+çK J;4†+-üËE¾LÒ`q¡ËÊž’[®ëÇ£BÉhgX6A*cÜnx©³¾ÂaÕ®zcý± hì²æ®è¸Ñ—kZ×gtµ5?4Å}F x[ñI è^ä!Ÿ`Ò0^q[7…#áÑ—�`ŒºÚ<�Ñ^E><@ ö«J\³�N*ò'ûía C™Aj”=Ð!ð•QÕ—8³†¹„ HÒ=—ö@Û YðÁ”ñ¶çͯáØq…GúÈ”HK‚GД§QºÃ8‚¸aÓÞó+Û=Zm@sÎr:ÞS7nbÀtâ$ÈOhAÏ¡A¹ÆèØ jLlUù…ø› ú1�i(wGHÅp®93Ž[§-»²/ébt^¬ÊûlÃ}*$};¬ŽâÙ"+cÜÙ­{‰¨Ýë×´ŒÁ¯)öúHè^aMQ·t^ žïËj7n»]áÈkfU¬)X:àío+Q"ÈX©Ü¹éTÜ:ä$üËÇ¿ ý¡)>—õ¶ÝïU®á±ìÖ íÔdv_pêxÚ£´ª4vSx´5ÉAÄ—”êÀ7wÈ2¾µ0ÓMÑŒê¾cV¢&ÉùÕ #�(ÖªüØs`¤ß[mÛwfÀi9€¼–§õ%­/-:±‚âêÄ^à„Ù|€"_—‡—,òînÉÉØÃÙµèðß„²mW7Nçú%cQd»£zlJ�žÝþÁ¾½áÛd¬Ž%¯xìh§ÿF˜èìt?ÒÛú^FÈ„[þÍÓžqÈuì…wϲ¤h8W—p˰Ú6 à—¸ ð’Œøei¼ 4(XmQâ Ñ 1!¼ì¶ í x¦~™³„¦æ?òÚ£¥�­üó&k?Ñž á—&ð>öh"ð: nôäe¬P´ÙSŠà‚Å}Ž�–z�ð5òi z%uÁÙ‰sgåÎ8ÁÆÔrÖሠPœw‚gÐáœàɼ8<֊ξ~ËLåÅô´‡F¶'î°ÍèT²{G1îí:¶Õ|ïÏœâÃCÖ¶¢ÓKM½½[Sxoá}ì< ³×KX«Hçß¼¸`®Ý¹Mû/ùiŽ `ÐÍYÊ/ÌYŰYåNaúCßñYÛ(L¢hdÖäKƸȆy7 ðÌ*žòÚ㬠ÆÅ*^ùÜлñš.e+¢¸îUí*ߥ`€–�>ÂxwˆY¤¸¨-„LMáþÌÎ59ºŸùÈ2<;}ë ¾mÑó§ÀÄ;âŽ#¹ÿaNWæ�\®È¯€~ý„ØÊ§0 ’{â7Öþ8tŸžº­1ï‚ßü¸XÇÐypXÈ a™0:Wô?©U Kè9jñçÕâ :œZœÌ‹óް2åæžïÞLÆ0×½Q&ÆãÖ_Ñ1á�wó~pl/Àø«èï´t3æà„—k<å+}€ÚƒüG7W1}›pªfKŽÚaAGaNýİæxX).­Ä*#Á:Íùð 1$vÞÎ?�â‚�ÿ|:úM6‘Ó"¥l˜øÊê5ªÿD�²'û”sŠºåÆŒoÞ&$.wNä?8›vlÐ¥Lñã Ÿ7ÍÕ ÝoNNÈ%®ö÷‡¬Á”áÆ=¹_¾]�Ò:y@^ÌäÅãä%"»C Ù˜k*Ýw1%™Jo7a€]e Gc#š¨�³!!†×ñ¾³‘ùò Úø>­ü'7ÅhÒœÙ;ƒ×ùûÎ}Žz@.£Õ~ê[±‹‚@Æ·Û-eÄÒƒõCH€Ë»u½Ëªíø‹cì™q.Í¡Ìü½¹ÛúÚ¡ë¸.zÜæS­ æü'Oï–ŽK-ÂÇÍhÚ{çc žŸ®¯Œ |”>) ðP`¾\¡z[SJUp- ï< «úþaÛ¹â6ô؈p†�ü°ÎÜT©gÊ"ìp�xº`F’Tž_P�ÒÙa×oçŽkÌD÷icg�n™Êògs´[�ÀÈt,"ztÝà{ob¸¯–U^~.ómæ>–;¨(žò÷œ’±�:éNHkC›^[’N³1ìÍŒëp”RèúוõÃEb`½Á“€˜êJ…‰ÿîâÝv+}ŽA*9bÓÇŽŠ¼†Kx£Ú'{)bß[÷.yÿXåeÅÀ}®âKßGúoGÐaý³Ý§ƒ‚¶‹�‚¾åÇ¿ ŽÀæ7bÊ9úÚOˆsØcñ)›¦¦hCGÆ›ø’ŸXœR'x\eQvø;}pDV8κ,>cW�è�mÉßçGA‘µ%Éî³£q³¢ð ”¶… endstream endobj 1110 0 obj << /Type /ObjStm /N 100 /First 986 /Length 1881 /Filter /FlateDecode >> stream xÚ½Y[�[5~ϯð#¼8öÜlK¶E ±}Vû°]ª¨´›Jåßó�“”¦›ìqéQUiëãó�™ñÜÇÉ9YH!çT‚˜ÿ_C£�SË!sÁF¶À¬¾ÈAjõ#ÇfÅúŽ„–�JÆS’²Àª9PÊä/:)Í\ý‘ð‚ˆ}…?Ô‰�€cv�k 6Üœ�€H °TeßcÕâ8´ÎˆÁÃL|R%¹ŒÇ¢] ð(­ãðYå~ìÕê{PAÔEœx÷m $Ò|Õiõ=I� õªæzœR§"�w'‡àLÅO$5°t]�‹ú9 kr])p*® %¬šKE°±óUгêÀ*T¼ç{awtøF@z÷¢.ºÛÜ^®¶á ò}{–/Vo·áÝ‘_üó÷ÊÿsµÀ�ÖÛÕz{ïi£ø÷‹åÏ«ûÍ›»ÛÕý.•ô½W¿¿ºyºy®\dm >_%ÇÚ®ÁïæD :Þã¿^¯7 zµË·.VÏ·û»S~ Xÿv±¼|órÛŸxµþk±|º¹û}u×Ùçëåóå÷Ëo®œrºv‰oqVDC¬ÐŠqŽ=ÂÜŒtdÂ1Yîën‡Ë°|¶y± 0ýÏÿØl¶`·Š"_ºêæ‘„ZlH˜Z5z|#J¢!¿ ÆÄ§%¹óò¿Ú¬#ExÞ|Ò—XÉsnŽ^*8Õ¨žQ Eä‡Ï,�E†uˆjôdŒì B˜$Å\¦Œ¤ï â¡ëuý]è–$K�[›Äù18ïÀà[QAWP…9nCP’èÉHhxŒ® lÖd ii#Hâˆ$>&¬dO¹ƒÊe58~×hØKëYzL-GEß3  ªÝ1£�ˆJCf#’&5¼ƒ"J§tP]«(’Íž ‚=8Jž³ž•°£âv¾P׳£²X>ÀP\ÄäaqµâÍèþÁ;Î]‰úÿeON”=ùô²Çe_äàwûEÛ/$‡Š(‡Š(rXäYKcB„Ó�–ªw�Å¢ÏÆ-Ñg.ŒhÈÉÛ튔¨žhÄá¢èŦj€Í( iò±E �)f4”D ž;§´Âø7g™¦Ý‘0ò AÓ€²�12ÕÈe²})3JRJ2´a(6^ª[Š㊸bœ?O�ógÀ|2ÄO€ ½a=Y½N‚kôëì10fN½10RD{G]Óå>wŠ7åM‡ ~‘ÄCH%C‚¢ºÕ”‡ ˆ;æAå2ûEÁ� ª¢cÐS’–)�¹ÖxÍyXÖ”£ÕA�¢ß!Ølòhû[¸® BÏVÈS`¸XJöyn+ŽoÒß/ƒG7GÕò‘{ù™/(�JTKJôÉղ틤ÿ„³_Ìzç౯Ľ!ÆÄ�¬A±)ªgŸµ§æHåk"¦6TK nþÛ+iî)Åü zäöƒæœ&=�ûE*¦Yÿù Ó5ZdÿAU ~´4BþÓÜø(÷z?Êe(§Ø Ú�$ügÓ ô~Þ2äŸRi�¶{qª£´C1&£Qtõ‘¹Œ¢‹ÀQÞ«tÿ—=q– endstream endobj 1230 0 obj << /Length 3626 /Filter /FlateDecode >> stream xÚíË’Û6òî¯ÐaœJÁ‹˜}T%k'ëÔ$©�§*ÇZâŒX+‰cRòd*µÿ¾Ý �¢$)Šyì!SMh4Ð�~ {Ìg÷3>ûúÅ—·/>ûJ›YÂ#ÍìönfÓJÏlì˜3rv»˜½�ÓìêÚZÝþðÅwon¾¸r:º}ýýwWïn¿ùì+·Ækn˜•°û¡û¼àa¾ú÷Õí‹/€|&fÖ2)äÌ*Î\’ÌæëoßñÙ¾}3ãL%nöH=×ðO1åìl5{óâ߇¸P€A3Ÿ{0øñüƒãLŸ3^s Ë‹;0h瘀/ˆÐ‰`ŠÖ1r'Ž·÷to%²5îǘ0môóD�EÑÅ`»Â¿ò~Ö~ý!H u3ͳ r&q:ͤÕ^ŠÄ‘!]ˆŠ@òÙW&™Y–X.ƒà,AçW×‰Ž xÆÑ†à�ßœÓsC-ÙÁ4³·×Ž«ès�|OÿéxfèdaüË«k#.GsÀóþ—P.bÏcÁÏ7'X:(²Ñ5}úGEVE¯aE*ZÐó =·ôLXžb·p®ßöѨ¢[ØŽ$z$p˜ãd�ªw�ZÐÈ„Vç� €K‚ŸNpi½;hìTÂ1®Ý¥¤ž 4†ÇŸ¡4.'¢9ŸcwâXið¶M8ÐéµMà¨Ùœ?U_篤‹2मo—yõ)‚:z¤vß¼NñåÉXd?q¥7WâHðºøj «’øjË⋹:8z˜§Pstô šã4sC2ÒoF£˜fŒ³ þ]l”l›Ó2¦e ™Ó˜„«SÕ«cpm�ì×”î÷³ Øíúg†LƒžnÔ¦A¢i£ð¬i�ý¦AÒHG‹LÈ482 É¥¦ÁØΆš$ìcQLv V~I^å*ìÖ™èï5»�ò07�4»5­Ù ÌÛzöU˳ºk„JGß/©140ûذ€9Á)ÁÛDG;abfç��¿ØA›zà&â4�èùí8†È˜i=Õí—oÁ’ÄL1‘V2‘L0’ÃãÏ0“—±?¦#wb´ëc æÊxf¦›…÷nªÝû*û°$v»zª]¡Ìû;ë4¯½£2ÝT«t›¡án·™ãÛçÃZLƒN˜Ää–Ðo°û™<<þ &_NDÃä‘1ì )Çì�Ô Ø‡±(&Ú-˜�|zL¼hôN­�î –{m�QK~jâè'ó[st~‚¡±A—o ÎOôzJpIðÓÀšÈ8˜h �Ñ'h¸ õÔ-å9H˜<4L%=çô¼iyAzÞŸƒªv™î[îÓ*ÚG5´�à×}I._AÏ=ÏØ#¼‘X‘§zb×…Ô8«¸ºÜÈjÝØúE$¦”˜t\Æ¢˜x\X+.r§¤`‚7îÔË–ìz?dÛ’ï¢q§jÿ¤$ø,iŽ i–'Ò,/•f}"Íòû´18FÍeü#éõe£Ý½Àè1>':É\NÛÁ‘(&î PLê�ÈÐ#•ØLÓD5½2h­ØÇKÂ)oO?6FÏPœSîÍcÜ„7�·ÑÖÙ¡3¦Û‘Sâù)o‚9ïýžÑ é¤öp<†}DYGš~�§§T'íSÚy7�AnrJχ î2º1XÓíÁCë&áé|çè7ÇS­j-JiÉd¼�ù‹ÍÇ›|“UYÒ´–kÜ‹M–-¨×ìZ%’94¯„´õÎõ`äãÖ´I·ÙQ¨YÂ,"Ú­¶ó³iÝš�Ï®ěٴB 'é#>²²òA)x£ÅþjÚtx ›PFý·åSÇJ·p ‰Çýe6OwP¥] O»šØ´È)îM½ã®b�Ô¿VÙ:õŒ€½?¤kbðÝ�5«€šxÐ8p–5eºÈéãŠv™no{$òž»}|�yºÙ[Wùú�â|l/ˆR( ÛÛO}ÈOÂÏaûø^´Â8â&—u?/�ÝfѮဠ«ª|ØýÈe é®X­ ìýØLBÓu,®=¹÷“xQ¡Iaù©ÿÈUtIJFÞhpšoÂW/xõ «Ð­™Õ{Ï�†‰™²tƒu¿(�0˜%3ã1(¢�—OUÈpãëŸ\ÛƒiŠ£_0f¢¨C§ÿ ZÈ <q\Ÿê¿úÓ%̸&Cö)%û4'xI0ºàcüâ'ºóÓvÍ @×è›Ï¡câ|¦ú8ø×LACË‘©çÊ[éØûNytÞA¸,‹�À2¥CfæûÈ”‡²*vå<óð*ÝÜïÒ{zÓtÒ±õ묄3NçLDE=΋ök ,~Ø’ºÝUþcK"º-|¾Ëèè>ù¦rQÑIÑ›|SÓE'».pÞ€OyÇ Jë³$ã…6òpÀ…ÓOæ¤crßúàMSéßÎ9ìƒæÉ^ß •‘ÕÂ{˜ÂÿÎËÌ«|º›i­»{ýÑÂKú�(-‹u´ £So%‹ ¸Âœº>Ϋz�RB–»õº6ÖHýˆp滀ƥÙhY4tÖ{¾¤ïIo$A¨‡ÒÓŠÎ7¹kßå1ß.}h¥ÿT‡ãŠM@”ç–a¥¡Û"«æeÜ‚…oï¡c�t�;ßßÎJ¦™$CŠ''»é»‡8ì–Ìš²ƒlö=Üîb;R á.ÐN¾ ÂÁÂ×–€ã뉩UK�=ß‹,�›C¨~~Xåsïæà;l1À€a ýÉÀÂï‡]¾õ ¾>XS½ù:_¥ep+ ¯ëkúÞ“éöNƒ N|™£x#±"·‡¾ï¹`=àsxÃcnVŸÇ¢.ôXȆ=ë¬_åàÝ×ó¾9Ÿô¼÷>J;œ<§É­ªô¦{¤}oˆ€.«ªÀûøúTÏA?«¼¢I�ì½?ÎpÒÄFÿÊ@…¡$xM2(£ÌwÅÁ 8"Zê˜YëŽ=Ó®ò=Áœn,M&jíTËtr(<ó½—bxP6F4IŽ‚À€»ä€žW¯¹:|e°7J·HRyµ[7"“…˜� ¬ �Ïn(ž ì6,\SÔåñjˆŠÚ FðH­× 88ç; « ®&„ Ìä‘C_3k¯ròp\RðQ‹ûbWŸDZ�?oÔkÄsçDD}Ëgº3SZ1O©Ê„ÕÃI¾¼ÀêŒñÃáð"êpxôN f €Ÿ,Iô”Û´Ñ(¦Ý¦)e ö‰[å7§ÑC´ÁÙ%¯’[×)mýìäŒ;=��#QLdg,Y"C�Bü«²S^ÈN×Ò+>¸u-½R·ìõНu�z¥»²JÄ=Ú —¿š33Íá‰a"wÃí)qÈŒ¯d¤‚\q‰m°¶R6Å89£¾Úš–�éçt–aBÇö“¾¿WƒÛ+ ~•šU"­.¿S8cüpT9�ˆFžÇîÄè;)“VµËÕ´‰›\7½¤þ§ò¹©U貿&>ÈþÂks�/eVíV[Óø€«]´† ¾æÉÄGEk/ݪðåç‡Ušo(1Œ¯i¹Ê)Ái4&Á©‘.8ºÒá>>�Wœw—pÑÊoÁ*(Å…µ�™+®˜ãñy™@ÊA6._S—Qyb|]•8*'àuB¿¿¡dJÀ6u¯=|X<}Cå@»MþaW§Împ”̓‰BZW�•¾ä„7•êûR¬öYÔ•hxu„-”\ Eo¾ï6ô¥::`5x2W²,0ëx¿üß“E™Ý!× Ih¢R ?ªÞ„ÒÍBñ…&†ÝMËm>ß­R*·p<cì·‹C§/Á£JNx£t:_n±¬»úÊ„|‰ UºP8+±88+Ø%”CÖE ÿKÕ „j�ðÒ-áO_Îð´öÿk�­ÿ¨ÏDÕnŽëXú·:ñjõØõó»Ex %˜&,¡º”ÎRBÀÿ~ð,�s*+³šå‡CñúU#VMÓ]ë*êʽfüåd]$ZWĶŠöj~w›ÿ!¡é endstream endobj 1258 0 obj << /Length 4028 /Filter /FlateDecode >> stream xÚÝ[ë�ÛÆÿî¿B ˜Ü1ûàcé6ÜÄIÜ6�&WäC<‰º#LQg’²}EÿøÎk)JÇ“NG£pûAâ¾8;»3;;¿Ù¥š]ÏÔì›g¾|öÙ×&žea–˜dv¹œi•†:Ö³4v¡KÌìr1û5°îì÷Ë¿|öu” Z𨄩±@‡Ú|ùíË/_ýtva­ lxv‘¦.xýÝ�{õÝ«ï/Ïœ ^ž¹(¸|ýÃ÷Hì™öú¿06 Ó4ƒD …Vˆoš¦¨ÏŒ ºêi�C?&ÞcQ�iä %L0_×󢩋—¿/»Nu7Ò´kòº­ò®<ÓÁºæ²õRÈð£*Ûn·BúoÊ¢å‚ßT¬Ê°�ˆ°Ó¿[P©=“7E#7Ųh.pü³ …YÁS‡Yó8 à©GiЭñéà`”Æ…»<@š—PPr è±í°ÿXðóŽ•­ð ¥_•õ5—"»BNæ Wk¦œâë5§ÖµtæÙ¸C‰‚¨#——8Ê%¼uNÃS»™´å¢hX=X�X®«j�´Þ376 Šùê¶’zdíÅŽº¼º|öö™†¤šiPVÆ©™%Î…‰ÍfóÕ³_W³T¡ÍÜì=5]Á/ £$šU³ŸŸý}‡„%5;™„.¡$›�¶¦Jû%䌛%™£Ôñ|uváâ ¤ÿšþ¯yM¥zðª‰Ã,‹ý’ú7·Ø!ž…‰¯F’‘tD2’˜nG[ªÈ!l{Ò=»È@[é¿ ÿýßJª‘n"±ë©¼8»Ð™ ^ŒôÊo¡@vÄý q_Rº¦ôõSGbô€t¦‘4ü—ô_Óÿ5ýß�u�„ZíàqôÛÝ}Ðäé,4Ðå…v¡!á×@'²¸zaÕRj‹7oa}]DqBkH¸H±Î·Éù±(›bÞÉk놶 È`º-W%ëðG² ·ŒEH‘6AM¹ºå¢®Þy …Š*¯¯7ùµØ]ädèÎfÌÇä/¦¢Û9þÝqõÏv]�Þ8§±lwXVãª*VœáÂÔeK¤Ý°ò,ÊweË£„$÷4¹c¢Ùj µYXð«3¥Õ ÕmWÜ⢴°—x×9¨vÛ¥¯(À¥Õ°ã�ÞÞÞ’k¹Ñpo€ìv@f°£)¯6¼R‘ Í˺•6â¹CjS—�ÙAK†ý«} •R1´˜ò:oãÙ¹ý�]i\Ö´;„ •œ€çd> �¬>Ç. ÀÀ6ónÓHIÔ!¾érðòB—¼ ª¯÷hµ0®LIFô‚ÙÖç@<¯Æ†±«q"âÞ€ê‘b؈ó[v�ŠúœmϦåifW‹æÚÕÅ{.“m,¨ «ëyµ¡Í2ý~Ñ¢AЂYÉ·œ0Øòí\·�Aˆ;P”¼£D‰z0äž%ìø%šùÃD�WÅ¢DkA¥~Ùrn-äòÅ¢d: Väªõ„âÐêÞ~—ß]c»€ SXÒ*ïD—[î‡ü�ÄCOì�ø\œ •„*Þ³âÃÝ ýpéÜôÊ®ÃÙíJ‚L[tœà-t_³š)aô{Ø­ÅC=¸­¡‡éàeÕ® ÛËZ.ž ?7ùޝid›Ãgã« yÓúÚI¼üùR" †ç… ?×›ÆÇ6Øä¡X£ŒÅ/pbw¿Æ‰ßqPÉ}ÈÄ85À &a»ŠÏ¼‡3Þ\§hi±G�O0×~ âIäŒ#ØË4ŽÓftð › ¬èw>"³³ó��˜YY8&Šv|Q€Ejãs\´0Ü„­÷=%,éz¥^¬G@ƒgžõþÌ’0 œ› bi¬ß´Ü=,^\iØ!m°è©�4…‘ßQÝîŽJ/åbUxÿ™FÖ€ÌF?'0¨Û]!%6?‹$ Ï$[øpÍ=ÆÞ¨r;ï�ƒIÑ€—ïßn»²ª¤šMq-3 ™å¦¦—þY¼Ò÷Êïí˜L)ôP¹v�ì¼¼õë9  ‚Š^Æ,9Z9æ¡5• U¤n¼:6s_Åï΋æü‚`M &3Ü vFäÿª¬e�ÀB†_UÅ OYË-:ñâºwÎ`,AUáfìÌc‘8ó{cl=Cç˲)¦”`EX¶ëz]­¯Kp”Ù#Ÿî�öšð­F}ü¬iW '²°v88h¶Z°𺈵Ž}fs\½7•´›Eºo´�Pßc`�[×—hÒ¬ö±Ï=J¦œø(<°È u¼àR¯çt[…ÅÌvÛˆœ`*ÿÞÕ Yß…„R@Çç§c‚ù(|Ú�ÏÉø(<xzQÐŽ%0 6Ã=„¢±o˜ä˜##Žú–cÈäWU±ëÇ¿oÈ yâ½Mâ©oNüxöP¼¬af²X”Щøp°Ô†à©Ý�· 0Â@ª,³‡(ðûj„ 1�>†,¿05ñ‘G™)|Ä& •=}.ö£�#Ó‹ÑÑè)ÑlÏÓ‰z–B˜+ù5׳aö'‰tÃöËÏ�OD‘î–"ˆB§¡–@·Þ y"[H‹?}s?XêÐG¼í¥èËIÌ~½HÁiü\ ‰!¡HI¢™&»QôÈö ÖÂÂÑHì¸v«(t@pÂüŸJa²PѵX sšŒz89I@ß“@fƒ?ѱŅ—ÃU“" fH\Ícª€¯ p£.Íãd30€‘§ èd S”Ck9N�. óQdN�>A@ŽG=A@§R˜, çÂÔ Ðˆöçå6G‡ZõPOÎ:'Ké„( 6”æòú4ù[€Þ‰=$ÿ#Â0aœLØ«‘@gSöêG�8¾WOà£×ªÓ¦b~ÕÑk6¹iYçx­îÚ�âgÌ«"o(r¡}HR¼ÔrÁ…=ÖÿM™dÞì¦àWÉÏ#¢B½§”°ÿŠÑcBPðÀÁ– MÔ«k®Ç�¯‚å5 z'=B²-‘¼’NÚ¢'Á sdKJ94WÝI´å¨ÌÞ´î'�F„.¬ÇôÐa¹¼ó®+Íã-å\ñAž¸¿Ñ0Ìmw¢ÐÎ> ™^"‚Ë"�™õ1].“À#Fõû1(öÆ‚_!Á‰Ý#Htó…¸�ÏI‘AeÆ><’ÈǤ–€²FýñzUtcg*ÜJ­øp h¥eô‘™Ø‡†¸¯¦È[éØöèÊÀÖ¸wÎDرœ—]?wçƒõ0¤m7«XäÝX¼Ï·ã~'û™!| lµüÈùñùNáÅüÄë6ù¹TáõšÑh� Mæ¶ñº£PÆ‚áŽ�žbM¦É4óxœÄ#ÌãÓùðæñÔ¹8e,šjLrUãÔgœ¥ ÁTãT “UÃ%ÌÓQŸ ³™•hª� vtC1æÝN ñ"…ø0…c~Ñ#H÷‹&ðÑ«å‰sq:n4I&NlÔKî¢õ}X­ÀÇ»yi@L¨Rõ7䎼¸ò÷ø8KG•i°~ÃÙâíFÎÍ!ó¾¡{ð×ç æ®åP£fÒ‚2u0¿›Wt¤i„£…?¶Â ¥Bj{¡T.ÕC2#×v/ÇAï!¸\ –¸{Tà%kÆD€;œE‘u»çåÛ£�݃íqàOo—żóè k2Àí‹�ÂӿÍÛ74Uõ\.vÁ°ªü_t�¯ðñ¹x�P±—Ëßuð rº¿)ÇâÆK~æü@møPÈ«|Zµ.ùÚ!]bPÁ/8h¹f°=Ëþp‹Á6Ò”>ðrŠŒµ?§Æò=åÃ{ew³ÞHµèÍÈyÖb«B¨Oõœï!„¼ÂxGçÓÂÀÌM+x“,‡X#P3¼½I¿,?Œ©E*Ý_ÙõgÛ�8ÿ Û6›�1aœN�� ñãøt>¼q> stream xÚÍk�ã¶ñûý (P-³â›:4Òä.¹>Rô²E?\…jk½ÂÙÒF’oo�þøÎ )Y^ËY—4VKÑä�œ΃3b<[ÍâÙ·/þtûâ÷¯•™%,1ÂÌnïf–3%ÕÌjÇœ³Ûåì]$™b7sk]tûö«ïøëW7NE·oþþýÍûÛ?ÿþµÐ½þ*6Ì Ð}×Û¼ˆÃx³yûû\Xè#}«ÛWonæ"ÑQVÜ5ÕÓok¬0Q•ÝeUV,nx”…ª¦ômËæ>«|ÕAÿ<«aÆJŠè_8×Ì7[”ÛõÒ7ľÙ]YeþuKý«ô!ŒqŸùµYÙ[›Ž)«Úµ½YþФM6€™0­MÛ.- 5BwQ¶Èïž°×l.�c±œÍ9g‰Ö¾9Ž=—RFwÛbÑäe10m à/Êâã«‚=03§»¶Û:/V|:´B 숷Κ€ –V*úg±Î? ^†x*1êÌú�BI‡£¡e»³‹RL¨=,"Weƒ-ó 7í¢Y?…ŠìÇXª"ƒÚ%­DGoŠºÉÒå¾kãÙ‹Ù§¼nê–O©ûb�ÖõÀTÌÃí6Ãß™¯'¬8sª£ÂË=ÁôêöÅO/%ñŒÏ¬e8Ü8 ›ÓÍ›ïÞdz%üöçYÌdâf�Ôr’IggëÙ/þ±!æ 1að|ÿø‚‹™º¤¿Š-ÈS=A9\§§LB%œIZÇHL´hmÿâÖJ¦A”ž„˜ÀÖRÇ'5D7)�Kí_µšõ_ß•2P±ÄÁ(¨c&p8à ‹ï1Oìû°P@ÅÌ@ÉÙ˜{IÁn;™}3OT´¦'0x"£šÊõ€gïæÀðÑߨCIÏ‚@¤T^>8ó @ó2Io^ ŒJº½~Õ¸ëöå H.ýqÜ$@"iÕÁØ­LÓÊ<Š4¬ ˯é™Sͧ3ê¬Ó׬ ´˜s�Ty¤1ïé™®«PÞ|B˜ÅxœLbø± &2¼1,Î ˆqôäߎ§æ@ƒ;zæôÜ' 0ú;= �~Œu ДÇÖ›/{0¬Žæþ�Ç{ZP(› ˜F©Ãxlp^Maó‡’φ:ÍF`ß1E'„DðëuÒùþè¤ë'±Û #1ñ½qßÚ3‚d”©| oó�dr'Œg ‘N.1DÀÜÙh9Ai±È‚ôè-;²y6­ùë-+òQü/U¶DC*XTv©o'¿6é�(ÁTî ¸»ªÜ„µySœ†ûØ›M ²»r½ös©/0¢$˜ ŸÂ°ì›\ϰçû_À°×O¢cر˜8oD ÉŒ°“tÊXuŠ#ʘ#FÔö»Ô=¥ÚâP €îøò„LÁ}N騣ß ZâG.Õ‰ñ Îg*†TÞ3r‰­ÅÁ¹î|0ˆ`^ååÚƒƒaÄ$† b"Ãp±¸Î‰ÁÍïŒJO~ Ô•äшótÔ ñML`’³¬Kv§$ýIúÄ cAL¤HN-m8ìMÛ;%»™ky¸M8`þ·Þâ:O%“\HÐJŒ¡¿˜J:Ѱt9…J£AL£’N‹mð]ÕxgÌy¾³çÑõ1äÙ¨¡ò–ʾ¾Ç`§!.b‚s¦†Nð€ÇL05t"X¬ôÕ¦ÆýÏ›&±c¯‘˜mk öe«ÈoïéôÏÚh�gó6*?„÷t]eéòÉ¿lÐfÜ.ðyïkþC­éÌ—åA—½¾q2ÚVÍ=žV›²"³Ø¹�YŒ€:³^¶5Õ;³£ 6Cg•¿ÍÛªÎ?fß”Cg圉ÝQÆ·ß}íÛ€ ®°•Ο72†5˜M<œÎ >d\ Æ9›÷ÚeŸš¬¨Ã�>ü(L´Ú?é}Ç“à¸÷Þênð ÛÛå�Ùíß·uhQú÷.¼¸ÃCèÞžÌþ´Í›p¼Z¤Í¶pOçíw­“ö”ÖL)wýž:ßÿ‚=uý$º=5g­wp-™MÌ$52ÄD5Ž«‘ú²Þ/PK@Té®5†5øcRòIø b"þÁ å–_k 'ÆöT8ØGÙJ‹Ë1΢3“üÍÑ &b üM›«ÌSÉY¼;Î9â> 7Ú.ý™¼ ®™Š'yw£AL$xw¢=aSÓÉ#> y~.·<³DNrîFƒ˜HÔ«68wú׿6H#OQÿ4)8ÓzŠQì?ál÷ Lš«§°ã¦qXí$€�Ìd«¯n‡Ísà��ûWe‹# 'ºS]>óá‰ü�²Z¢Aë¢UUnj_¦|pEòºñå�ÿ¿Î‹¬ö?æ…¯öÀÝdÝxËrøè܉îè¢(›”uLo°Û¨¾÷ GX›ÕuHNÊÑðö•Áÿñ/˜},øe7ËÃÉÍ Îcüs:GÇYºL�¹Hü9¾p˜�±)‹º©ÒĚÓLÔ€ÿß—è:`¿:,µ–ÛÌ*„±®K_"ÏÌ÷$½J˜ž7ÈvÀü(í:ÒR€„·g�.˜@ôÃ!�azñö§yޱÇû<¸­Þs¾v Fö<7?©@ïÖY³>^Óúj2øj0½MŽiE­�6È…@æôéäYS�)¼[mgÜǰ­ÞÑF}Oõ²dÀ^œv¤>ÄDÆùmâp(h~5Œ…Ø?“4,ňø¡®ÀŸ^žÁK¢iFô­‡Dp�ÜGòǪ=ý‚ÏÃUX3–Åã]p{lLê„ÉxR"Ëh™ÏÆÛ€�ýå#`R%ÌM;à b"Æ´`êiÑÃTÜž˜;±—È ±$QáyGœWSù F&bí?2;ž“Ùô¶FMO>d€µÙ÷ú‚ @]Ð7"e�ðøüH5¯ºt�×Oç?"¶î¨‘IroÒ]$À ý ò»+ô‚±36ï¨\SY 9‡—)$¼8íÃ¬Ñ &r¸’0ó�Ü–ü.> ‡‹Éîz*Ô?»ž mkv*Ô’ uƒ*tpÇõiÅgÁ·úL¯ˆããk9ž_ÏñÈÓŽÇFƒ¸–ã�aNÁp’ÙöË,_˜UL%üó˜Æ½ìÍ3œñGWÑíŽÊ5•ò*ÌЩƒ=j®Þ£ú-t¡dVK]¸ßÏr¨°%½þl!Ø }]ÐÿüÙø„Itm,&.�Y;JËÍ$‡‘Z ó–‚T!‚W,³ £FË6†Ö&V†Ûs Ÿ„èÌ¢,ê|Ù†ÛR æ´ÁLlõå�xLö)ňŒù&T+Œ\c·Q£é–xJìUg†àE eÆCØÃèþAØêœS Í…ƒˆ#Gâ žø~^_’t¹‚ÿõ-ö@'¬sì¿!’÷N¸VA°Æœ!åΖè¿t_úÊðÕ½šõÀ0Š3åÌ.ö5ç t_ŒÆ“¦sßüéþ=Í>ï�ú¯®]É.pŽb�Ó÷ËœlN¶GTÁóihÃxü¹¨¬gp.xÂDŒQâ„icO¦�àgPö PÀGÞE"»KUæJ‡ëHt¸Šþ×ÙOÛý4 l…¡dÌ‹XP”Û¥tk üToaï›OY¨ÇT¬Ný«ßÁXÂÜŒ;>´ÄVë²Xeuã#ÃNÒ¥û�aœ–O$©ƒG 12z WªHKcIÓŽE™/EæëhyPÓŠ# (c}Ú6Ä,Ѽá‡ýûs¬ÖÑ×�$#€…oÿ�VM¾פHŸ{ïGJk¢ {?;‚æ;egš'’[˜½[T@§§ëœûTx¬ôó‰QõòÈ“(¼78sÂö¼BFƒ¼Úªx¼j¡£—/ý�üÅjh~¶/¶0@'À¿^àãp€Ç4”j?ߢÍ¡É_i3Å/É>BŸ¡ª·©¬è/lG¥po±6UèǘÛg]ö–A¥>–… Ùà]À0팥Çtýæïh‚e‹,4G~äõà‡!Íi×*éƒ|û6»co–Y1tï�Ö,Ö»ôJC"svE¶ñ/~où ãŒ>æå6L©ÇÚ¾‚ò†là‚”n<ï‚­, Ÿ%øøm%ýQ_œ±û¢}ñÀÚ”cjw²SCwE�½áz&´àÞ$áXž".¨f¡f.e„�'o•5Ûª f4»MC×iaÍΨI¹Ê·9¾ÂsA¯7žºð¨¬ª,|ŽR˰ß<§Üà KžS”¿P¡Å¥ê.ÑÁ’Öö‘Y31„Mà ßæ&`oÜ2ô=Ði�Q�Ù¸;÷ÿK•m²5úØGYú¼n˜†á+”ÁȪÕvÑ´‰=»oî»$�Uÿž´üê]ž˜Od”ûRú¸óà“0)wKŸ °qÀ‰¡{ͼIçM9;3ÌZŸÐ阃¢h”úÙgO:îÛ|ÌÅ(n˜kOd¾]§õª¼‘1¥Â�FùÓ¸ê7ÜxT£R+Ð2›‡|�U a••¤ô©~SR'”AòPn”¦ÄÂe€•bÆXÑ¡ƒ·ððð¼…Š Ú=¬ýˆ] endstream endobj 1320 0 obj << /Length 2535 /Filter /FlateDecode >> stream xÚ•YKsÛȾûWð°JÂb€Áë¨Äò®RëÝ­„©JÕz1±zXÒ¿O¿fÐp¬\ÄÁÓ!íÑ6fõè, vGÃKö�ÈãæVEe˜' *,Ó”¹ë+¢ª8ÔIúFQ³R/DÍàõq0Ÿ'a T ³:{^z¤ücìÈ‹•œ‰ZÃc‘�t¯¼À„tpÞ‚!ƒ~”冬G+ƒêUËGv÷<À½9) Ô8ܰf²$Tq¹TŒ©öH ”–¨&ú}>6~”|Âñ4Œ¼øüÀ¥üQu]?V#Ù:õ¶†™.wV†)( F°é8Ñó`Ðà­Àž(ÙnS8ÜiÔ+FIÀË}ìÌ<ãoÉ‚Jn}jXI�gâkO(²P•ê-žLF—[CV¬V °ž,5{×ýZ€ÅYX囼N…yéý³3¦‘tÎ.†¿³X“…£ žÐî8Ygf â 6ŽæÑ¨óÄ«hiž,ÓÄK>¼v}÷zê§a�ñ<,"¯NtJRSR–¡RÅ•^øúÅÙ0yǃÈ�ÕÈá=ŒFÂaEÁÒhT'Aå,˜èY¹[‰êï*ÿá%É]¶†I÷[ñ�ËÄ(c%Ÿ8ƒ~Ké¥N„8¥7‡'Jjkø]�¤EðˆˆŠS-WÄÿa( ýINL…ybêQÁÐRˆ±ë{56Çœï;rzIä+í99ÛÆ»šâFf íš±çèèu´†CNû�›æ0}Š’lÿ&$Ì ï; ­@¢‚#b8üŽßÇ?ÊÎØž€Ëˆ‡ï¸ZsÍ!^…�OP±Fi,¨'—wP–<¾è0s¨gD™0õÜ Çy—3Xê¾þZ}é’ž¹¼Ä%iéÌ˹mö�oæ¬9Sò¸]5�P7’›¸`tµFâ[;BG’g\0É.‡Ù ZGbßNµqÌ'Ÿ35We• ¯ÃRÑî?͘OÐ¥¼/ÀܥƉÃ$JçÆu}ž\c©.õ¡ÔU™KE0¸¶•7TV\6¹¦6žKÎÇ徺±\…´fä8´�­Áy,—qã­”˜N†™!€zõï¥ë晊ü…T½äП�Ç~z:òêxt»%_â}ö…$‰%[^Ó#Päú¯>‹»wÂLÓ]QwùÝŸÁ¡â`Í¿xâR®.%`pÂW\4m(H±mr…ÖÀÛØ±pK5 “£VñÔ\B4µÌ ‘ºÜ÷õ L£‘‹ð<7å*Ò‰F\¢hîu±0Öºd�…‰J/Ý=\üWÇ64k ´ð…ÎݬW|Ê0VjIôý·IæIÇžj$ø(wFÌ?;< >Øt4–Çœ®r�ö|î‹oÔßÔV"mÝûÉbºýú9,IàvßU4DŸÂV‰&*,–¸�ϼ�+ÁyeE•èu%èëÌeI¸¨ª¾Qͺâg­ìN°ìã÷ø4Ìó+�ßSS¦göÁkÚ¦z$t&â(#I]2Ó°RÕà2G¢éTØ‚ÅVš”–? á×£'ì�ºf¤î*“È2á1,Hä éáUzÔ¹¶«Ú×Á1q¬†Å¿§ÜïýîÝ|Å3° endstream endobj 1226 0 obj << /Type /ObjStm /N 100 /First 980 /Length 1666 /Filter /FlateDecode >> stream xÚµYIo[7¾ëWðØ^(r.…4K�h� Ρ­áƒã¨©Ñ@ lHÿ}¿¡$ÇŠ”j;Kóž>ÎÆÙHgÊRÈ”9H±o �ì[CæfÞ61¢¢nD TÕˆ˜2J�K5"É<AAÔ–M¶œ$¨š$Ò ÝD% EL¸¶!”À#e[Æ`›Õ¤±ý080ãC:¸³=Žlj²‰æb ›{2° eð+MÆOQµµÚÍÓ¢ kËJ3 2*�w€Ô:„›/†~­Œwxì© Õ@Ù™�½›’š¥¡DRú)xÝd¨€*¶VÎúA$ÑÐOáp.ƒ#€0MK ø3Ÿp.¦p.Ýt�BTÍTüª)dpnl\ ˆZ5iØ+¸ÏdÀ9Ô‡‡ 63eãR±›iø¾æÀ9™ÜJ Ô䜻ɭ‚í‚ DS3.`Ï<¶G�ö6pÑ2¸ÔÀuXY[à6´¯�Û›ýÚ‚Øj£ÔX�„r‚ŒV@©é×*¨A)lÛH­ƒaÚS±@¢Ž`”šV¡":lƒ›DG`b{D»é‚�2ìS„‹É…�²Úýµš €¥Y:p‚Œf‚Ç‚t2(Èè*œ £›.Œ°ÕdºÀŸ *ì`„ŠfÓ…S¥ƒ_Õ¿t„#üªÙÚœƒòH¸S¹ŽwÀ•l2𡵌w–XI&GG“é³p W2Rûe˜þþǟȦ3R3bv~óîÝÙäÑ£hÕX`Š-%ZQp¢¹ÄŠ v¢©Fr³Î56*^tj‘‘N>4¶66„ÇtªÑò…•¢Öêämèî GMÅ©ò1vT oԞȇ÷†(²•¹š¢Ôm†éÓÅ»ÅÕÉûó‹YX¯yq¾\ήæ�V�?}X>?Yž/g!�“éñb¾ GGazŒ&a­hàŽQv-­×V)7¿ Œ”ºæ~lLhÃCÞ,íŸ^ýû~fƾ�Mà„ùr6_^[ L¦/g׋›«‹ÙõªØ�w¿ÍÞ\ž?Y|§BSŠVI›d„Úä�_� v§¯ñ�ç󘞮z¦©õ‰ô˜LOn^/Çó¯—ó&Ó'‹«7³«!#ŸMžþ2}zjö¦3SëÙN¢ŠHL¨Ÿ  ¢R"0¥öxìÏI˜>_¼ZÄÄw×7¯¯±ör1�%Ò÷梻!ƒ´½ ™Á_ jly_¤o�ó ,)¶½¡{ÜÀ9Tæh ÐÅ·t+@Ý÷tË"— ¥U”L§iES¬©ºø*¶ÂÄžV” ÛëãŠ\¯{«Í³´ÔˆVî'‹vñ‚k¬E}`Xš3PbO.·±õ¹Þ\P4¹†ÁÕ¥&ŒØ”]|SŠ6Ž: (�±6WìbT‹œ]áH–Á>]1 Fn.w‘Õ’‡ì$[Íc«­|¾yl÷‹»-Blb߬±ñXø~]AÛnWÐòU]á®gµÞÊ>_t·Ñ«�¡ ÓÞ|؇®ˆÇ.äD !�4Bo&. ‹ˆ�Ù/7/ØÊIV'ç�Ú›Ñ�ÐC©zy}Øp–صxÑ(°Ò½ÞÆ!È£öf¬$Ä{�$4b/8£ã¯‘L£�Æ|èÜyGío6±n—–�5ã“Ò²UŽîT ¯.-�vKKK÷8ëÊŸã ¿&úCŽ è„ÑÃZ±ÿh�6‹bP Úð]úÞôç¿‹%ÄÍ¢ÊÝùóK5I¶±‡aŽd÷‚^‹¦Ôpr.C­\÷«qq Ò�oÿ¾øtýpš´­+l4AŠÚ½ÚaM®fo;yË_0�o�×S+íw[êlÿÀBãí¨ä\ªÝÓ–dWÁä¹Ëeþµ $ endstream endobj 1333 0 obj << /Length 2717 /Filter /FlateDecode >> stream xÚÝÛnÛFöÝ_!äe) š�3Ã[ÑH7›Eì&Z´@Z,‘¶ˆP¤Â¡j‹ý÷=·¡(EŽm¸‹}09<3sfÎý"‡³ËY8{uöÓòìÙÏ6™å*Ot2[^ÌÒHYcgiœ©,ѳe9û•¨ù"M³àüÝû×/þúöüÝrþûòoÏ~Öñd« •ê Ó.áš³PŽš-üüB§°Çð*·îæ: ®Ú9ÌÛ`XŽLp5×iÐõ¥ãÏ¢m»¡ª’×]ÕÃZ&pYµeÕ?…ŸvCÛyt² /6›b¨WEãçàÜÝŸŸæ xŽÛWÕMs#'ôï¨ÇKVH�µˆ"•DZ�R·—»¦èç cLpÑõEË"«rka­VF[^û�-Ëz¨»–NÊL§k; tÐÔnp8.ÄDô –dztQœ)«m_ÿ�G ¿pŠÀÌnÛ †G@Þ“�Ðñ6p݆©[Œ÷žÐHx€º«u½Bükü´Á¦À�žsCµô݆0Q‚«˜«X�ÿ^�BR�,Žø¬å¹jà1Þß[r/�sõ§ð†Ñ–qÉÄý] Á²*Zd¢ „5y�Ûí”ôÛ˜˜%Œ‹Éó8]«K?+ž�mËL�1´&K½7úyŒ6Eƈà å £ŒC�Ûÿ@>ž8Yµ|²×]“�%!ˆå˜*,œô -x¹«ª�`hêτܓÅÜÃ1›àÜìÐg‹¸ øùEjªq†8lj"À-DÁŒ'*M ½;|b�ᨧÕÊ[7Êu@aúÑ9Ñn€‡怿–�ëÂ� Kûkl€ #grô.ð*@b09h�ó7¬ò¹=À8ñ O}T9ÆÖ±H«ë�g8MVŒvLKœcü¾„8¸>EXS@¼-.+çcI<ãiíƒI®2k÷9ŒžÃ~ç×ÅfÛTî!Åñ±Æ{ĉ¢Ö•ãÖäÉ Ž *ëûþFö^Wp‰úÂã¯à VR~|ØI°ýÚL�U”[ooÕí¤Y­lù…«B®ºCÏlv ¶“h•$ñ!¯[H‰ï¢Af¢9àj1ΖS߈ž®ä¹Nô莛ŠÝj#óGóî†yP\?å…“ôAŽ&�89d·êk¹Ké³ Áƒæ½b¯ŠßÀÝ#õx T…9�ÑÁ ^Ùd‚œÒòüõÝÊó“Ä‚w¬!’Öñ—¸äÝPÔ�ãbHˆiù±0bßo0€Y¹¡vƒxƒTÜϺ5¸}Ž¡,õ“¿Ì:@û> TNC—�Èøœ¨6'L±÷üÚGêQ'!Æ==‘Ašii�õ_ ¦�;ª0Ã{Çä¸Dɼ}: 7¸=ìÿŒ Q_U/Qwñ4§$ZóØÍ9þÆÃl �¾,°§ÁX‘P�€[Y9R3Q 7˜TGÀ,W�Ð!ª4Ô£97ÕF¸ ® ƒl`ttèô 鞇øq�½�aë$T&=JœX"7›PÝ‚!]O¦ƒJºA³1ø\ò¾ZÉ1uB8é) (œÛmXßí‹­ÏM$Ù €¶RymêAj’˜nÀ³¬S<Õ5j›óë?1Õ'Ôrô'�&^ëk/çJë‘뿾}ÛâLØ?ð‡[­+ÈÐD¶6Ÿ%*OMF¹RhˆcA&’£µ>!ÜL¡ NV}wP"Ÿ/Ͼœ¡‡gÑ,‰ÁÅ3“e*IÓÙjsöñ÷pVÂ�©LžÍ®håþre;kfÎþ1Å�) µýƒ1„Óæ@’Ï ZOÃHš9l3y¤â(e¾Ç  Y*¨'ÔDóEš£È0ó�—EuÌ(†'H#2Yð¼ÀW=�Js¾ÈMpMÏ‚ž ý\ã7ô¬x)îÐ6øñn®¥ ÐÈ<†kÅp;×2­"ƒVa¬÷LB¾W ø�gŽmŠŒœ'Œ+!2iÀÙ#b¾ÈÓd‚ÜÁ^o¯‘¯!²_ ¿¾;ø*øÕòëò€‘G×¶¡Òé˜X�Ì/³$•÷ô|AÏ7ô|NÏwô|uRfÈb&@Îì#¨„!„)!L aü‹Æçôü• Ïiü–ž'ÈYsÐg„I†F>Ã;DÄçœøœŸYE)¨EIx}Jr•Úì1úôP ßÔ§0ÊACµŠ³ŒÅóoæòmƨéßeŒ‘è_OÜ)hÜÒØá´ÆU©µÄVm€o¸à?÷à¨RfŽb¸Û‡%F £9в@¾72;0Š�äø}’d“ª"Ê#H~(†»I6P%ÑŸâ¶ï£)÷tÕ�wÇñ£ÜC1Üéª îNþ?\õÒ;cx.ÿ W½$§ûŠžËÿAWe*ÌúŠán˃"=7ú1Îæ(“\€’%–ëM#1à]7`kKVn)/ä¸l€ –¿±èÿºH‰¢’ÓÜkÒ÷+¬·c É÷Ͷúá už0äÙ�'Ü(ÌTŽû±Ÿ*ǯ±¼kJþ;ø�5| ul{¹«Ýº’%üÛÓÀÔŒ—†RF'*ÆŸ’(ÛO|‹n׌?ˆ`%(ï²Â†D{ذŒÇû�¥A~¢f”PqîÜA–+!Çc™lMH•XJ•|8)rVÔìAHÁ„ùß4Öõ8Au¤ ½ô`e·ëW²Ò·½°Ÿ»´´“¨)íö»om»]ßw»¶¤2Í‚�ŽM׿8¬«¢$šº¾Ä³¨+‡\ãÀ7ÇðãÄÏir†? îÊú>M×ûn$®…tã‘Ä+7u[ù&=ÿˆ ®ï³¿;m-×лEí»MáÄávª#êÐ÷ä.ðn?EMɺ•#´´åôD ê”Ù533ÇæÕ{ûÒñƒS üí]«ºwÃÓS�¯ãvGÊí–?ðLÝ<åg±ddß}Q’¨„’ ~ôÒY A/å!ÈTQ%Š­2ñQ;$§ÑQe!§U‰wýP!ñèš½_Ží¤uû­Dü¿r‘  endstream endobj 1352 0 obj << /Length 3248 /Filter /FlateDecode >> stream xÚíZK“Û6¾Ï¯ÐžÂ©ò Á˜œœÄNœÊkUí!É�– ‰eŠóáñ¤öÇo¿@‘i¶sÛÃ@4º�î� ÛE¸øþâ›åÅ—/£d‘«<�ÒÅr³Ða¦t¢Yb•M£År½ø#ˆ£Ë¿–?~ù2N'#£$RYd€�ùö‡ç¿-_¼¾¼2ÆF]^e™ ^ýüÛO/~~ñËòÒšàù¥�ƒå«_Ab¡°à_,/Þ]h¨† \h•dÑ"‹¬ ÓÅjñÇ_áb ß~\„ÊävqC#÷ð—«8�Õâ÷‹Ï(àÔ<™B8ÕLš/2•g¡öšÉ#ÐŒ •Ís–úùåUž”Y°¡ÒQOMõžê;ªT¯¤ŸÔ™é ù$UÆZ¯Íÿòˆ¹J#í|„tPRé¨ì&õöòÊF q—wé#¸Ëˆ»û­Žƒø ñC–½�æY‹‹ÚzlŒïédÑ�åŽÖmÅ«c¨'TBx8ßѪc¸Cq€o”À¹‰×Å@g3¹x¬}¹ÝMF ·ÒrÇJè}"ÖŽ›ïÄŸaƒ‚&L½¡²š©•oO„P¼2OB䙼ÃáD�+¸Ð°?š4¥¼ b@íÏ0ÙFavLM¬|²".þ¦ÜÀ ÎV�$–è�u¤k¾šs¬1Ó—>p„v 3ÀuGôKZk;Y·ç¤Ò†DkHLÊ3E’Qá\JK%m$³š Ÿ“.pëgøMü>˜Ùù~²—ëGXA–ýë*‰�ÉÌ$°X¬?SbFëØíɨ@]leG{ȧͱ�ÝR£¡Ûí¿Ù’Tʽ°™`sÞ­=­¡ïcߨ¹µ÷îMAŒ<—–Ñ*Îìµ}Óô`ÄQlg°�:F^𾋔lŹ_>“åi®,�kSK¬¦êœôµŽ `\ÇŽ®Ü—„:y5tèÊž_Ÿcðs˜8œH1nݦ9}é=¤o@7C]ýÐRÖhŒ}†Ñ'AOl1j1’a Ë©ÛO#hàE|š›ŒÈÓù»ï˲&äjÉÑÝeÁÇ=P¤GåëbÕû-æÙ¢’e¹ãõ½Řï{D܃+\JóO9ùO&ñð³Då*Ôö³?KhEã¡ÿúÌ…o„1?�û,¨¬$/þq™÷ÿ¿u|Ö·ŽPY£ï߯zGõÆ“«zLùú{*9 ßžX+ÖfK=pžtª2,ŸržžJâc"i¬sºª|žP�9'†�•·T6T¾ŸdAÎèYgÿÜû•¡÷+}ïûÿô}¢1p{³÷§oâ;hà¦Äà̉[�ß—>�mÛf¸>›¢‰ Ü"²y°_r³漸› â�oB—êÂŒÃÔõ˜{¯¹OÞR8A/éûñý%–l3Œ+(w1¦ï\±‡"õj5Èë@ÑùD>¦>¸Ž'øŒu§r÷Uå¶FÐs�É ünB>6Üþ÷°Ý`„Ÿüzž±EœÙ¢;Z ö,%Ý2¡9ÚŸÒ?‘®Ýú<ö]ŠWÀMŸfo¾H»è€?ªî]Qws˜=_Œ7ö«™÷CPYŠW®\Ÿ99‹?®à¶|ÇÏÛŽ_ y5æöQÔ ¿§ó�¯ìGMÁÍÏýÜ.øâ;³µÑ6c|òïš|€†ûØ3îëšñ¾uëŸðãswYÚ} ²:X«#5s_Wãq™0÷�ÿï öÓ6x­SyzÀja~H¾‚ÖÇ»8*à„ÃL"Ç#D>fÎL‡Z¥Óqäst/Ö?Æ'–rWW— ¸‘ ód 0l¬ùCqÊùÚD…éá9od˜‡Î8ˆ­Š’„SŠWîÙÕ¹’¶|.Áüá,Je¢ÞXìÈkæœÜÚÀ-cLÿ‘pMí!®_ùœJñ¼Íý¬à}'Ÿ�Õ72BS¼ôSec 4cLá/�è§ßµøÑqÁŸZæpܤ·#"QtW�ãf‹$ñ?ûxÃÓØg%üo68Êùm¦HÍ ìX7üË�™†p7Ô½:÷_“ÿè×ü endstream endobj 1375 0 obj << /Length 3585 /Filter /FlateDecode >> stream xÚÍZ[�Û¸~ϯð[e Ö’"%R[´À¶;ÙM� ÐÍ}È…bÉ3êÚÒ¬dgfþ}Ï�²d{.ŽQ 6‡çò‘”šÝÌÔì§7»~óÝ;›Íò8Ï’lv½š9[cg.õ±Ï’Ùu9û™8‹ç ç|tõá×÷ÿù—«×óÏ×ÿøî]’ކZ•Å.ñ@˜FYƒ}Þ(™*¤0Ÿ Z„Q‹ÄA¥á±?V¿)c›z[·Í|auJ<$'&õÀ¯³aÎßTªª‡bs·®æ “úh4 RóÈÉÌ™…y³02ž0ûÝ;3îêc£uèùÃ<Õpe¼Šª‡»‹Uß§Æë¨î¹­/ê’k¶í ƵÊc• T«‡ ¸®W�Üu2½MãÔ r-šv{[u< ®O¦]q ´qźØn¡�›- L+XhçiÊt�O«ÒÈa&Â\q¸(¬+š’;Õ îÌ×¶+®¤9±bÕv›ªeÉ”‰ÞËØí-O•EËyšDE_½Å=õûa§f�ÑQ±ýË"ØU(”»ÇR Äy>’*ë AÚ&R ‹\»Øí·<>1Ó"‰]æ Q±Ísî÷¯¹7®)·Q½¹›ƒNGm/¼ZÈeIŠ�‹ÂrWõÛ®^Š®SÏbË9ä®ç즘'>zäBÛ¬%ôf®CÛhÌ} ²¢7]»»ëYÚÆ9ØÂDëj…“¦²«)1¼�­ô*�®y ¡q‰\ܶõ²’2i ôþ«õ‘Ôþg×okT”ª ­ ŠGÎ÷� –¶Å— �Äc_÷¨>�¾ì„�bÝ·œû–ž¦"FÖ~éÛuµ•¬›Zœš.‹&ó<™É\Ôó®TKboY°Ô±å“±Ÿ�ã`æå²íJ¤-Ú/õ¸¿­yù¡ˆÛ„ÞsŲX¯9Wpýºn*ijX!î Ö£„©›L]£§+Öܸ)j©®˜õîñÔ¶íM%~ ÷´Ó˜ƒ¶›ŠëŠÝC½® NÅ@­®z®`5Ã14!ÔÜݶ^îÖ…Pt u³\ïÊŠGˆaõhêÆG?Sǯ,1èÛUëâöþß<«M¢râ䱿¦jª„ø8÷6½°`GÒ›Ü*¤M±Ýu$+(ÐÎ@ cZäà‹h‚:§ýÈ×a† s]µ"!Žz± …ÌW¤YuÒ¹íz!pzo2^#©°1FTsDÛXôÊU÷6´ŠÑÔÒý®«–•èÛŒôƒMbme’Õ9nÅ´ó<øSµ&²!99òºÈõŸ«ÅÄ`È=.§àEí©bzS³xûl_“ýô�òÞ>°Çº*Ê^¦ï§4‘Ó'=Ѫ »9Hb¬*‡‘zÔÕÔ!Oq„�…#Ž0'ܹËÁá''pÄèÁšØÚüUèÁÅYž ‡x ‹O…­ZÆÇÎÄÈ&´âÙBÀÁâ DÙ’[ÈÓ@JžF«hŽTÀ5KV}& VÒIXfÊMœìBû4vö –n©÷ ŒÀn¨b*}ê‚ýC y|Ìð¤�é«-w"¶¾õÒ[F�'!óFšm|b‹P²>1÷S NãXìh¹ SH½ÞaoÁX›EU1¨³egŽŠîÒÁûqCÛîÖ%ç÷Q u)^b -8}VVý²«¿p8 m<ž´Ÿ­NfìÐ¥mZ4]®—ùV]»á¡àÿA,[.pàÁ¸³'†M#ª„¶Ðèèÿ©$–¾G¥ÚÀ;ø§Ý©lïG�4[ºß6“ÁÖü±«;iØk2–˜Ó‘#ÅÊ®¾¹d‚mLÄ•E;X�ì¬ÉÄa1éàXÀ[½åÖ=)à­–¦YÂÁ“k î$À*DM >Áñ |¤?Ôæ�OtVA°ç0Ò¹@³lÔ‘êB¡àddº¿©$ã�Ìv •|"[&µßJ(t:ÚI‹ŽÍÈŒ[ffòâ©vyó‰RÓÉZN´&iD‰BsjÂEÅ Þ‚ñèá�¬~8$%;àd¬gïBgóVÒª‚÷·rcªÏ¹lÒF :[½ÝK (YL9{TOT¹ \l –»ÍG…JïW\�‹Åþe+f¤#t[I¾_‘£eÑœ­0^Nذ¾Ë§¢0:GŽ¡YP� ç¸_µ;RæÌŽ´-³‚:3{>L†ì§ þ[v3´{è°Á@߯dŽQ“ÐkÊþä*îÄ]o¾[¹½Â>"qSð'#Ÿ Z ›µn{1…óœñA þ8Ÿ�vÆ£oM¬‹•³38Âhá91'o¦ Ø•�ÕFw¸ Òðbí6œ”ùnNj‹õƒÁpýÆW{£ Œ_ëv×ÓÅ“ ¾Ó‘ï$〺põ4\ߥ¤±Û®þZkÄIÀ“ÄI1Þt梃CããÓ6$a¡Bç¥ÜÞ�Ïéò� T+8Fy¼ Ô–B¯¸µo×;9Ÿ(Ç»¡|Øgl¿å{åFQHñ¥6oÙ³üÎE¦EŒƒç_G‘^¹‘ÛTn¢ ÊGa®»]‹ÖY ·«pe{ œÃ Qâ²IتQënÈü3A)ØeÄ$Cõ}WÜÝñšJii8-†qæ�ÞåI5ôqêÍD í©­ŽužÌ£~dð8 Ýbfܰ8È›:‘ÿ.š›Àk¹ë†h’Â�Ý¥‡wKCLKèf¹ _Á°Õ��ƒ=„a²Š�äPPOñ’׫­!ºÒ ラ’Ê•†‹îûï'WW×oþxƒç~5Ó3çâD'3Xj ’\nÞ|ú¬f%4�:Ä&÷³{ê¸�Ÿ‰2ÏÖ³�oþ9% Àð—ÇpNyŽ�WG¼ŠíkÆ[åb—¤'(Xïc -0asZÇy‚8|j:–l–ÅÎgÏS¶3û4Oç’˜ŠAZòënfãâ¯òçü \ž‡YðÖHÅ N—ÇY"ê­Ôh<“ì¯x÷ä²™cUš_™b#ÐÏ\¡G‚ÿ;ú¯IÂR™ dˆ\–�È%ilýpMu5_h¥ð- /¹ÐQá‘ Ç-'Kªûýt‡}aÊØìÓ·‘ÊC.±ÙåHÍ�qzŸ?¦�?=MKÛ×ã¿¥|GùÇCZØùóË6�ºP÷Ešw.‰K5OÅ:“˳ääSîÉ…Hñ©»h¡ç’¸p¡©Š³\N!æ<{@ó²ƒy�I$Çÿžþo�µØDßÏNGß?£ËÀõc�Í¢ýës#ýVàÕ³V ²c.°òóœ8ă­$Ü�?¯ÆÃ&éŹ$.Ô «!ølÿ—zñ„CK£‡£-³öY'è“E¹ŽZú/鿦ÿý?+AÂ;ù¬1¢+züÊÝOc¥.Â4@!QöÛ1ÍËã_�i¾�‰½Ÿ)‰C§«ÆŸîL?…Ébzœèb¾ø³ú~·a¬ñ0L0ݙѨÔÄ^ Y·ËuuÕÈÃæÁ ²lPëÕ®¡�Þò-öp±¦Óñõ6ÃÓ,ʊm¤kÁÉŠ ¸|�t.ƒ/a§×ta�TNϱ:•w.>r;|#µ¯^ƒµñÃk.QL�ÄÆèoWÌ—Ç¿B1¿�‰A1ϕċh[ç€]]~‰Ë?›Ä…._%qªýhûE—Ÿ§n°#²ˆh½àã’òkÊWô5jÝÒG5õÐÇ`¯Ü 'ÏãX}.Ž¥°ó2ÌäpE\6ŒÖ_þ¡°äÂùàß+&ÞÐ9쨶—)ß™$.S>�›X¥æ4àþÿP¾Éìåç•_X"0¡ûXøÇç‰~¡ü¿Ï[ª�Ùt6^ª-ÕÑR-•¢ä¯è¿¡š-å;ú|õ¡FChõ‰» Jhi’}s”xÅø—£ÄL 6q®$ž‚/# ñÇÚ!lyé,ƒh`öÈ’27KA9jãcèF;'ÞNïÈS5Ò"8aŽ[$1™ }ÂßG.ŒQáCŸE�5ðS¥’§�œŸ~ݰ¬ÂÉ|Á‹Ü¨º©›F.ßvÒ€bUÑ«Ÿá÷»<’Q|ûŸG_ç8¸|;Úã·¢üŸÚ�%þ¼šä-›N¨a[t7ü¡ÏðU*å7ÅÐÉ9raÂ(]òO¹”×’©*Ðíã4&ÕÓ[êác%³öU€£À´áo4œ©‘_÷S~`B~aá«�1ä1(½-Dån¹.áZ¤Î7í´p¤Û"þ-Ê>>é•FÞé¿Ï>{ endstream endobj 1393 0 obj << /Length 2771 /Filter /FlateDecode >> stream xÚÕ]�Û¸ñ}…Š;ˆyâ—Hm�ä°×KѤ×ÜyHR@±µ»Ây%G’w³ÀýøÎ )­l+^k•âÐS$M‡óEÎpâÙÕ,žýíìåÅÙ? =sÌ%"™]\Îxl×|f´e6³‹Õì}¤ÔüãÅßøI%½‘B f„84æÇŸ_ürqþv¾�RF’ÍÆØèÕë_þqþúüÍÅÜÊèÅܪèâÕ?ß °³8 Ð~÷ðX´àÂ@§ô‹¼)› V6j®Ó¦­…®u^‡®òÒ«¬Þ®›¼¸òͬ˜ãø*Ïjß‘‡oY¬ï}mSÂ0ß‘Ö{«ÔMÚâ�u¾Êöþ¿)‹tæ¡RdÙª…SâîaÇ Î™ÓÚïëÓ|�øyâe_š*]6ÙÊ7/«òÆ×`�ŠÆ(Xºëò•eº^û�â”m±lò²`´WÌ)µ»à»ë !h5@ "A;õŸm‘7a€§´–ž\8$L;¹`r]ÃZ¾ë²¬|wd¢ìl7'½Ù¬³gزÑÝy蛪ÄÖm‰ª0ºÅá.o®{èÉ–×мÆM.†vé©Ã9²u‰˜®<>ÐÓ“…±Hº‘ÀÞ%þóÛ÷µïX–~d˜‚­¤‰H KG@yÂüÎ7= `¦gjI˜C3-Šd8Ç£€D·*R%/ˆãˆ-Ñ®l—ÌÓõ�ÌJ° ±Òšzê]*f_2˜‘ˆ¥" €Q)b³òu?SEëòÊwÜ]#ÍPêºÁ€Ï½Uo‰N×í_~s­”´÷år[U°+y{AÒ HÏvv”øÁz~1¥�š^#°~YnQ•”JHް«Û=6p¯¸Bζ•ÔÛ.#û¶‹ÇÌÄ®µ]謁�uiÜŽ’šY©Úa^µ½%t³„9#-As tr&YÂÃN„f™R|¶è C+iutq šuˆ¤TL%'â¨wq¤�××åv½òÚC$âŸq.˜`„bÖ™ÙòæìýÇx¶‚?Á¨1éì쎆ÞÀO2iÍl=ûõì_{ € ‰°,¶ú??€�€„›S@(¸Ô¡€h!%¦à¡á‚Ëñ´Ø¿�—k¦¤8Ò�‘T_Ej,„)Ô ¿êjÖo¾ ×fcgpå°\úk³†ë0¤Z˜pmæ{]‚@àBõ-^{M2ƒ®U 8ÌÚžF/\Œ.”*³}�°W*NŒpB÷��)”)••WTfT¾£²¢2§²éý[í,?{Ç—‹þ:÷q¡¿Aä‘DN9Aä{�XÁ uI¨Ó‰eAå••«A¿bXq‘]‰�"Yc!L–¬²Ø„ûÅé[Õ.;+'lu4„©[Õ.T*¸|òIJ„'J�ú¢“_‡7� ÑŽÔÊ’Z¹±j¥b–ΝVãd“4CWuWœ ó'PÇq0‰ò/ɬ”½r=B¶, ˆ›"[c!L–-¸ZøÇÇ5FlÕ¦�š²Õ±¦o5f .Å´Uý45JL+(`ºy£â§öŸÆÒ�ÿ–þ3V§4K\'–¿‚(&$ã:º¡zNõ+ªWT–Ô³¥úæ”c$ùŠªŠo¡Rª‹„¡‘Q´ˆ «P?]Ú w»)Â6ÀdY3 ,à?’��î_IÀó‡?ÐêC¬ã¯[A®’'�üCÜ�) cøÞ­ W ñà²ÔÑŸç pÉÿ pþôÄôÔè3ã‰èàéô§†%‚°Ž‰jŒ‹~§ ý~c4´ë㺡-8îzŠrŒ…0Y;06ø¸fÄV•cÜN²c!LÞª,þ�ý8stçm½&‡¤¤²èÕ½ÓrŠ ÑS@qº>N“0!“oyÂHÇ O¦ˆÖX“EK ¦ÛX±és?pú¦ç€úú¦ç˜ÞÞÕÅq»+Ÿfwg»MˆžmTŽ˜œR¹&�õx¶Dá&D¬‚vJÄê�G¬&àÑ ðHZìS8~ôUƒÜÁ±ìÙGaþ…”ÉCà=´·á[táxiüs t®0ƬŠ,LõŸö…Ï·ÂË BòoG«´Éêö¿0Ó¿l™ð²»Ï¡Ð^Ù Veµ”-`��i×Ǩû:zÄÙ„W¯ÞãUxÕlŸ« �6!fëIex¸Âøìª�zy߆uû »žsÿ �tÙl�˜a\^· w–Ÿ·™Oñ¡´‹�#ùlOlQÊ|ó¢é*èOaO–¶™*Øòé{~d˜‰¤ óu¹­–™ï¼ªJrð ŠliÇQ¶’ÓLÈ=´l ÿˆû<@ÙzObO€ð L¤ó©`’ïŸï?dJŒ‡¼@Ùæ4âÐÏ�k†ôÚÀ´v™a‘÷}DOvä&T„›˜)q4ÂÉ“„%FušLúœËÆx± Ò‚màn7‡OÇý8³1|ƒö$2T}zÕÛ`L½ )˜ëü·¹Œ£l'Çö*+²*_†|Ê�WÜÎÖæl.³M³›Ç¹BO9öÙr˜ké³—.ÆàŸ»½dÜ�Ð@æmæïuÖ�»é’i= ›¬X…Ä:)-%AÄè6ä³°�~Hѽ�k¼ZrŒQ;4/w6ßæ¤QöjÝå ·I¢í€ïC¢*¥{¹�îŬž˜ü<š…Ä endstream endobj 1422 0 obj << /Length 1975 /Filter /FlateDecode >> stream xÚ¥XK“Û6¾Ï¯Ð-TÕðå[ÛYo­S[µI•íDb$Æ)“”g¦vüö Ä ÇIÕž4M _�\íWrõó�ô¿?no¾m’U,EšÆÉj{·Ê”0Ú¬Ò$26«mµúýt°§Ñõë�ΒȬ?mÿÉ»ŒÈòLá.¹Ú˜Biá7tmÙœ‡ºk'ee„6iì•“LÚ+¡Ö¥â$zç>J�¸rÄ�ô±ð;ö�m6 çÅOÆ©·ÇB)Å6ßà>­a_=ðh`³·83ÞˆÉÞ-�mPíè*V¬ÛÙvž€‹xÐÝsk¹iGœGcß­7ð[�¯ö Û4<ÜѪ?DîÍ_ÕÑùDË]+.þS¢H’à¿8™J&ÿMü÷º0‘mêª×ZE�Þ‹wO¼Ø�ÇÓy\v£ÊEš³åí:‡;–XE£FIoD½ÎÍX·{žn_½áÁïoÿŸ•iÜÀ“»®çÁ×u’†3Â%YjÛŠÞ®ïØ ®·»º™éÞ×àp>U8Ëëunà@îe]Ž~‰ÐqxcݯÉãpiº&ù“ïÙ:r|šÑ&ü­ÛÁõ£—Ü1HéhÝ$çAU÷»®äé0öôsïWÉù×êÓàÉ™Ée‹ík7|Ç¢}í×zç“b¨é[ ÷ø ô'N �2‘ ; „œ{„¹º %áz· ÞÔ† «¨±%Gòº:º¦ ö(’”ŽXÊ…1ðé«‚Û¦\Ƥð•d{÷·L€óýë,~RµRèB³‘�ReOÕõ•:�`�”�ö3|2�¤ÿŠÉdÇ mf�+¡³"lÂ,#�™]Hù"Kþlø‹]0¨ ‘è4(粄ìë��zC؉ �l?Öå¹±=:]ú<�¡6‡GÎ!ûÀšO(ŸŠ‚Ŷ,»¾¢€à*årA±£lœ"/æÑ?ä€é¯u`„ úÎ5öá—Ÿ= •¨ImÅ·b³aoc€S< ™ofÚòaŸúº&ž|=ºÚVÕéе¶ì¹Y<Ùʾ>�eœBža=@}µC½kнp+™¤`•½ã‹yÒ©[Ð:r¾Ð:yƒâQÇlcK)”ÉæÀÓÜÙº�ÊØ¤yÂe`–�оQ&:`cA¡}×òÅÉPcyaÐP;([žîÎ{¯í­�;²„�q‹©§£¶ýþ¦¡<¸§û£¤tp¯~´u»ƒ‡Ù²¶ êgQ .]C €^XŒ@fTy¿_o „²½…Ö“+Š4úíP7Ž×ǃ„¨\Ì]¢Ã³YpH0,ºw_΀º˜çEMhŸeìá[û™Ÿ¡Ë/vaCè¾0q®<�[´§{ú5v§}Ayýîy0à|™ŶW纴ܧwá ßþ‰°ŒøX½¥mHÃPÑ<€ÌD®Qý�3õk�ÂgýÉ5em~„Í„H4è}ÜÔÔígV¨'p½Þ(YYóý—7€C ø©sBÇ4…LWZ¤�Ÿ¨…ª6ÂWÜ\i}‹4À€ÖÙÿ�F?žë¦šÜÀžìˆF`ŸãàИÃ1ð5±�òñ�_�˜NEš˜`û囟¶K�0cúþc|ožzÐ̤΅šÚÔû¦Û-Œ�xJs±(?a_÷åFä[ô&†j=o¯?`ü ‰b)@vi—HŸÐ&#¥/œ%'ÏdÿŽóÝÀ²£»J|˜,ŽÞ»�Æ“uþq>º¶²¼öòIE|“¦ewi¸xm~,¬ö…FÌ¾È ñ»�œ¥QïPÏ�*–L§BÕá¼›†‹Zhû×zÑã ªBˆ¼Í’ÎÆÒ©§ãÂÞµðÜmøÛÙB€E<ËæH½pH„çŸkÏ´Šãȵ½�!auF­äèÖ×>ò„©.?ò]€ÁžXÓ „ç³ôbAå-ÌY°_º£{¾¸{<…÷èÔþ_mo¾Ü(Ê• ÿc©Tº”Ç›Ÿäª‚5ðôÄ|uOšGP�fž!¢4«÷7¿òŸbiEZd¿A Ý pUb„Næ¬&‘« ô¤bV£¨/rå[î{çI°�‹„L¦7лW?¼|ûjÁ\œ@»ŸÔæw}†òÀE¤)ž Fú`›ä©›þ'.Í endstream endobj 1325 0 obj << /Type /ObjStm /N 100 /First 982 /Length 2043 /Filter /FlateDecode >> stream xÚÍY[o[¹~ׯàcûB‘ù�A°èî¦Ù-ÐÁ:Û~p%Ö•ö êý÷ý†²²V¬Xt$´‚xõq8gîÓKÖ�B.ÙBfA9Pí…BD ÅØJ`Jƪø«ArGrqd®AÏr)ÌԲШ9�ß“ùIÿQrxÿAúøsËNIÈR°Õ×¥öñ¤ä©Úüì·Ü×ÀÄÄ91À5ùƒSå¾ùjëk%äVú[ík(u)ð.”ú[²ʹŸMdõ5ÅÉÅS¼ÖJ ÕNq ËÅ)ðÛÈ"àW“8~U|/TDµõàÒ¸à M ªïÐJò·/ ŧê;´„’ûi&ò3T`–Üw((í;,@Ú¾Æò#»^¡?¯îþÚ`Ê.3,QZßa9pêº2Ø5×þ«.]ãf ´ÿZsçb TK˜‡¥â²t.ðüèœ+üEݲÊf5ç\%°¹•Š3¬K�#¹v‡¨8c£+¨„ksÂKsãŒ3ÁßÌq-)ÝÒ0­°›»4Õ¥Ç6‘⺂²EÌ¥j5ˆ’ŸÖ(¼tæ.Öý¦SèŠΨ©ùZƒ‚Â-õ8£±»~ �2ø¼»#'÷~÷+ÍîçÐ1(�F\)ŽÄ9•æ;`5·9#Ž´vÉB-»²-«\–`¥K€h5î§Apëï›!Ør?{«ÔÙóç³ùëß~]„ù·«ÕzšÍÏ>¾�úó_—«_fóïÖ×ï×o’GþùüÇù_æß¿ÉxHç³ùO‹Ë)¼�Q¢ºÂ›Æ†°c1üí/k#ྠϟ‡ùY˜ÿ°~½óá7ßÞ`ór½Š9ÒÃ7ßÌðïk¤yO(4ÂÒ.D‚¦ KOÒ›Ú^a.—Ó"¦?ýójùöÙí¿®îËò"¼Aªj8î§0ÿùïÿ@bÒ˜ávÐb¬ÐëêãÕÕù#hëhå=¶ÆÐb ²£S‰ŒpCÃ"RÓ š¤DEÈŒ¡sãÈp„ûè0ÿ~}µ¾>ûõârÊfÏ«‹iZ\¯mÿ|;ýp6]L ·#fó—ëÕÔ­ôaHÐDǽôÄÛÒÝbÝsòæ¡xÊË[rl.Û0  4u½¾<[ÀM Å‹—aþzq;…ó]Ï{uña1ƒØ«i±šn¼ltfî`7ë�×—‹¾–7k[¼[^|·¾ Ý'¥I$„fe÷:8Û«‹k0ñbP7øîÖ78¿×;«×» QÒve£Ýó¯ ‰Ïþä¶µX=7K‚ï"Ë忟Åg>&>w…¡RbFBªŒ†òE $c8¦"‹´½Òüø~½žpÜ"ŠœP²ˆ²ŒB‹ÔÀ.I‹†üEÍ¢µºW’w‹÷ËÕò“^Úé¤A‹^À2ãôäM þú³´˜µì·Òo«éâ2=4RÒB¿)r #L¾œ·vÀ¹ƒÕ*dà k$ÃrE¥@¡£ ÇÄ<È9¥Øj圣ŒêÍJL2ø‚è�¢ CCsÐÈ(¸ÅB£ª+xÕFIÑû¡!0‘Ä*‡Œ3÷VNsLIOYvJÁn‘¸ŸýwëÂï¥à³ò�ê‰ÞùîÁ_Þ>xw«Û=Þ:bí=s–ã ‹ÐÃÂ"éè§­̈¿ì}$TyÌ&Hܨ&B—{ÓÕÍtµ¼™–«±ìÉK’ŸÒPí¢7­†1J˜ÒÐ>�¡-’¥a4¡ˆò¨$´£hŠ>´Ž¡1|¡’Ê0º"ëŒJ‚©µ7¢á©ÑhTƒ$à�öd�©" [£}”q´ò²Ú^4BKþï´»»Y áO‰¨„–lû x¨{sÜòâW'/“‡ÉËÊÑÉKÛ]lÛfØò– ãòÚî ˜5ÚÇT4X©¡Ñ2Ÿ^ šT+®�MŠï�Øžmš¯Ó5€%º5äUó 5ŒÑìù7lŒõ”’@#~·‡�>e¿9j‘Žß„Ib'lŠÑΙßém›b÷ ¿lz¬)¾›[0?(<ÆOhˆwÀw qò‰IÇÀ"pû$c`.•ê˜Ð—k;$3¦>‡ºw!µE%ƒ&¨?A1kjÔå½Ãá hÛ[¾B=Rí¶W…¾Z‘AðÿIc{¿}Å|¯Vö¶¯;%ä~m8ycÛöܘ´ãoLîs²k$ZŒ+ª5fè¦aˆV §Éd‡²\}�\=¥«ÝEo{I‹^Ø 3xƒ§£=9¢ÑÕ’Ñ(Úïn“ ¢#ú¸ÜR7×P£hÄðÞËнhdõ¶÷2t/ñËUFÑ>ðР)%!?�‹�U†ÕÍðÔÊ£¦äêwÏÕí£†üò²hùp‡»“Å€³§¥´Sg1¦‡ã¹Ô<2‹ù7�ÞÏò]ï_t%xKÈ–Ð-a[¢ž2ÿ¦(TÐ~ú‡]�·S�R0ió£­VÞmµŽìùPÙý“zñØ``bäeiˆE~>t[��½­Þ¬ôŽ%G/¾Ð‰_]kÁŸG'„÷× 8ÈåôìÃrzæÄéôÃê÷0jÿÊÆŠ*àcƒ_ê›*[ítº!Ÿ–‘=}p©¨C>õWîÓ‚µü˜vþ½üey´Vv…)„éÍÚ'aJÑÍ­æain®ÖoOï¾$þ5î gQ-½½æ2â¾tÊI ÍGDEE¶õ¹©_ߢ6”öhP£i>¡Vàž ½'Œ9äwÞ^ 6‚R *Ø®Z¼~ùgòƒÓÜù³ æ endstream endobj 1432 0 obj << /Length 3676 /Filter /FlateDecode >> stream xÚ}ZYsÛF~ׯàÛBU"`pÆO¶c'ÞJìÍZ[»UI bDb  ŽÈÚ_¿_‚ ”q¦çêééã놂Í~l¾¿ysóÍû(Ù~‘Féæþq™&á&Kr?O£Í}µùÅ‹ÓÛßîÿþÍû8]ÌŒ2´óûðœ·?¼þÇý»Þn�1^ìßn³,÷Þ~úøöÇ}þðé#mpè±Wgn£4ñ“£‘�hdÃí-ú©··ímèÙ¾lî@ÈsožúŽöùã6Ê<{¤3ZjŽw4A®A+{ªw£­tY+¿ƒÝ�,êľÁKÅqÈÒ&Ê©ìÇz75eÏ»etjÄ*êºÝëî5ïSöÄ!](¸¼ Äz#q�{ÃD÷¯}M— ÒØé/íN�ÝÔ÷–Å3 á{ÛC^Ûwí¾©‡ƒÐø¨ATÏpØÊî¦íšUù9`‰‰ôÂiDÞˆ¥ž<{»éb=[x�–b…XŽË²p3³ô¤Qâ'ð­êI«n÷ÍÊDÞuv·z‹ûâ¶£rØÔÇZσ¾ºiàK„Þçîh…LOÐØaÉœoœúqš«0R9‡Þáχ™™Ðñ2vU·Êqqq­º‡ëézz®8€3$Ÿ¥µø¡ÁöÜŠs¦.û2L¨VÅ,sä7P•áW5û"ìä½+ûŠú‰w`ÿ) #§±·‹�Û#€@Ù\ÎîÂɲìÊa� ÜÍÎØ1X°z[kŸ ¿Ýãh•DIhêÙ‰'ÖlÐ5?aÆÞk©ªš�©>Þ¹:rQn_\bàv^Ìg©„ét‘Œm+V[uàë"g¯³™cWäg¡ÎwÚtívìë?j±“Èû¡¾œ­3¥iÅQ $÷´@ˆ€ˆv$¸ƒÌž®Õ®8É §Q?AÕûúëŠêÅ¡ŸÇfi,8„£€ZÉ4ØŠÌ"*ȶå\­›ŸRèþÂ1Vzj 0”ÄøE–^Šké§ŠÌ]?²ZÅ¡à=Ž E.�3i‰Ÿ²±�Üå0a ÈÑ¢KÙWì@Ñæ ‚_8Ïá$MA´«DÚîÔ(#ªY }Uwˆˆ�R Õq³x"M~¸4™ÌÓ»ÅtÓ©áÝ ïƒðïŒJˆqê 3bUª!çáPŸd†Ø‘¢"(Ö cÚ eäÏ2µ#Çä*¨ôð�¥ /ò,tÛ öâfêá(ÔæAà�é‹€ "î¢ÿKôÝHA˜4+Èûjm˜ÙÔ*Ìg·o©{à¥)Ú�¥Z:‡Åó;�P¶{ëúäHFF”Ԩł‚t^RÒœ]wt‘±gí=Yaâ4S£ã#à}‰&*Jc‚Î@˜N0W[…üƒ@¢/^%�=ØSg %iðØ £žQ–øL‚PÝ�?Õäh¼§hÝ[é”ð7Õ|‚3º+öáâÝkì˜ñ¡cBšÅV$�XŸ$öžúzwKDýØ Ð ŒK Ê^—©Š=K!adâµéüD©%—̺J»ƒ¡Q'9ã@{Î:¨£þñnírûZN%9Bž¥€Ö#˜#yT¢}iÅ[‘nÐ8é0 ‰cËðïéQ¦ž�ÙªÃz< ,>k úz¹ÞÖÕˆ¦/ j§”+ˆ Êý»2…"º —W7ºÐc öV&XˆD˜z<®̨j`c]nÐ)XDyçÖ¨áC.�ðöv‹X\­C'13$%BËu±ZÍÒ³Z�ø ¬3kîUÚêå„üm‡4¯oµbëâ¬îh�R†‰¸œ½gCŽ\ú¥Î�1õlÈQÊÈa:JA:ÍÈD3¨û‰Lû¾~#Ž´Ý|^&Fõbý›3¡®ÿ¢<çb‘‹V ¡Ü×Ydµä¹‘?¸/<è�i„±SSîÝšjí±0JçZæg¨¬ºØŸÃœ®OK>jA¾‘A×èž“€ ‰n ÞýTîìÖ:8é¼!&\oN“§Ùæh‡ÕÚmBòw ¾yí‹7I?ç»übÌoŒÈ2WâÆúu‘ÎÖ "REQ»~,Ï G3�3Ξ: 0ÓL~…�Ÿ%ÙŸ?~lã� TC7õ;íI< ð'‚Ófjëš\ª/çJI(u[:½¤/|Q Ø¥©ICÜ4Ú`>]*,a¦¦«íÇ‹ó}¯»h²ìo_4‚×Q£"¦º½ú1)Ým”O'Ì3÷9òQKjÁü©›èv`EmÅ Pz%ˆréòÖµ”äpĹ +tÆQaOEª´±³Pùôa‚p¡Ûk ¢$©'®2Í]Þ /”ù™äP%?¼Òß+f+m]VÕé€9Ö»aE‰³Ü�“t�ôc\m Éè(—©\S¸(,›™e’"k çïß}x{¿þ¹-5³…¹r?†ÐÓXö¸ê㭔਽øâ«ÜüB„QLüñC ìBÿ4ð$î“FT äŽR=$ÚBwæ>YŸÌÃåm)¹2oô8ï|Š=—E#Il@t 9`÷¨+Ëc7IAƒÒ“Àx»õ"¸Â8¤`Gç•Ãe( Í9†Ts„7L&úz²Ì|C#þ�²Ú�.\MåŠ�§¯œÚ›=çÒ3_wö4Êà#…'W‹RŸ9ÿ3Í»û›ßo(¥ 6áüï;a°Ûo~ù-ØTÄí}Sä›'žzÄ”ÔO3Ò—fóùægù_ 4Û$~‘eªu¹Å»n3«‚h^Zl2L BþÚ†3#øP¸msþ†}¶T¤äð}ÅgšCo lúYþŸ”§eW\.³Ü¥¼Uë>Ô-Uï–bºþ;ÿbÒ¼â endstream endobj 1443 0 obj << /Length 2961 /Filter /FlateDecode >> stream xÚ�YK“Û6¾Ï¯à-T•ÅáäæäµÇñlÅñ®=U{HràP Š” Ðã©Ú¿ýE)tjk/#Ý�~|Ýû ~ºùûÃÍí»¼ ê¨.Ó2xx TåY¨¢Šª2 vÁ¯a¥Ñf«T~º{÷óÝ›‡û�¿l¶Y–…þ÷Íû�÷oî>ã$?¼~{·ùýá·ïÒbA9�ËH¥ÜËD…“`ë¿oSg2Þe�M×éq³M«8&wšÜ+˜ÔIø|0í&­Â~KBcyO?8œð'¬5��æ¥gã@ƒX7šMžN¦ß ‰þi��3CâæiÞ÷Öéf'7ºƒf±@?g±²"ŽŠ$ób½½ó°"|ZGE�úMú›p7:� vÛ¬Š£$.‚m’DuQð>Ó³zOÍèL;uÍÈs bt;wæ�MªBݽðü‘(kž˜|Å?Ú:³oœÞÍ_豆q§…ªø÷Øü±ñ$òÐ8YF!ª‹³²5šh»ˆ¥Í‹€9OQܵԵ7 °ª ˆ–á»M�‡ÓÊÄkU'ÔxÓñl?4�’K5Ť޲9mðò¬æe�wšHLVÿBØ1ò…+/ò[\Ä&ÒÑ+ö“ý¨O°”ðŒxC‡B~€L'þÕ�®_Ü.Á°“ç(}óØÍ.ÜÇD¥GÓg´ååfÔ» ·ïTº0÷$�jp m žWTž¿D]�¹pùõpˆ¿éˆ/‡j‚P3JèxòrÓI“†PÕ¸a.Q#¿ÅiÌþ¨²%ƒE©xŽ›ÿYqÙ"Jçï@%9+ÓGíÌÑ+ÃÛ­eÆ„MG~KÞ¤%�:/”ÃågÜ AÏš�§æåj˜Zgzý•ª·I©¢ª.HÙµúÿtMÁ5Nñ]eÐC*£d„lÅ ³X`8áÑwUœGeRû[n?ü@‰ùæîáæËMëq�©RQ’$A¡ b« =Þüú{ìàx”ÕUðL;�„ñ*‡Q|¾ùc‡‹û ‰F)è)e¢‡üôv-ÆQ�¦Ëǩݕ�à Xü„žÃ¢‡Å>†*Š¡ðé4j;Áu^κ¤äšÆET)u?åå›Ó‰sg>/Ífò|¼ÎfäÀ·âòÒ·ÞN2 ²" ú=ÈÅÓ2¹^Ca.7ADpã!sÔ7Ê*¼ç/dÀ˜�pÂaayÍóh-Åh¯ó}ž,¦´£9¹Ë£Í®™—f>Îy‘sp”`ÓYÅ®�ó «%fk@/ÊËÀy×+Ö[ždðêÙå34�_iJ(�Gèå<êKùQœV®ÀZž€!ž“m^^Újù— !è™Ó%T‚Å bÀÈI7%ï'º /¡¬ ¡er|¢#Úº’ÐNãÀ.³ùîi1Ñœ0½`tg�™©XL¯DF F'É84™¡_¹ä&ôšHX>’�%äÌ}v�M]Çh†§ BÙìoµK\Ä\¯B#±òOØ'»€a 8f˜Z�aêÐ{§{>øèl'pEãªØ�Äð™A³n �EJ/YÑì£u¸˜VQKú(�ü|ÝdUF+�µ’|\„»�Wq¡³Ò²“åSc…~3î§ElÄMX5¯¤ÐT%QY—>;šB‚ÿ1ß O£ª˜wÏâ[®¢ñê§q8z¶N"À íHP öòV=Í G”›…M«”„Ū4_Ó%ÎÄuª8`ùÒÜpE¢nºR“qôSìSi+ññØÈtRK™(e˜Ž‹�YÀÿ^Î4VˆTÚZ ͧ©oç²;#;cPKöŒÑKÀMçW}±úúó¯°f…læy¥^`,ÜbåÎÉ!7ÍY·�kÇWÝ_X÷yfE”‰{†̲Èèí—õ8rsãOÏ[Ú†\ V ÁïÔs‡µužâEió�–-e!�^n'©�6 1�Ú�™ãLÁ9…tQTsÈþq-|®c§£öSâÛ˜\ˆ`«Þ7'‡'ÞÔ§”Æ¥�¨c�Éí  �©¬Æ øI�Ž*.:°Ì–ؼ¤€T…¾ßÊ@�@ Í{æa™‰RIçþ¦îÜb4B†@þÊ#^ua}gíÈ�B0ûý°Ë�Slpã”G²Ä%%ŽF¼dá—;;j” X.Žî êbŽ3ªqðºÓßxDˆçDDÓáœKåÌ9{ðœŸÖ·jÖ‚ñ¹“œ)uæ'dæ _�Ú@‰¼Í@ ëÌ`¦®¡³Ù4#g$¼-:­Š»ëHà¾Ý9ñm Å­qü¶0¡,àqåy¯àE~ι@¿ç„Dùì鎢 ®ó °4à ”Np} þú£éåËM¤¨Kg½£MªØç°^H†ià3î°‘ä�§;j^Œ>�¯xìò�—ýTÎï‹Æ±qÒEhçÿ-á¿?ŠBšâŽaܲ‹zѹ”ÿU&eL—ÿEç2)˨TW½ËRPm*EÙ²J£ò&–©YqÙÜ*ë@Á¾8áæVR$PxEUâÿE9¶·R&PZ{«ív§o!ˆ@‰$},…¸þ¡þ ÞÆo endstream endobj 1455 0 obj << /Length 3663 /Filter /FlateDecode >> stream xÚ¥Ùrã6òÝ_¡·PUM$@nž’l®­d²›ñU™'ᛵ´e3WtuåÈ '™WüUäœeEÌ‘Þ�xÕð<øÖ1}ºl²wÅA�¨Z:sؼ¼÷dx‹¢Å;Y°#‡�Ž›àƃ%èÂ@âî¶EæÈ)*î¸ÐítÁcà<þRx°HÎ6EïdÈx�ovè;»’'x$|O§àáz†¡ðh7Ü‘opà�2�ߢǓ܉g\‚aßWëŠtv …MbvÅø[íÉõx�myÛÖ5�öÞ‡>ŽùU%ãXqJ6�ff¶’rþaxrÝä`�‚èÙ‰ 7¡ÁÑ¡xaË7íàø…Ï6&¦< æT•_ÖÔ{YÉIì@-ãÂ0}Ž W»ÁÑV&øÉÝ:YÃ\�üN ¬B'`Sç”…¸¨µ·ðÓtRíLù\{hËöúŒ �ó0±ÓÝ¢„h³ÚN"ø9 úPrt¡€ËKœjy[ÆñsÓ8pÖYH„7$En wÿáÆ“÷Ði†±B¤“±©HÝS;eÉqïQWÜ£H²”e³à˜r†PpRѶ©Ü„fb[?ìÂs\‹Â<ž¸˜HsA/!MC›ÇY Ø!f¬ÏáÖ*ÔÙkqk¿žuL°__ ßÀí/Oÿ,ùn¸¿Èõ§é~.’Cï*‰Ô±¢¿jGýÜŽÉ“‰W¸Áõ¯eó2f}6Ï“#3³©Å1L)(FÔÛ¿]Ï¿º¹úí -ÔBE ô?^$èÈÌb³¿úù—hQÂ;0üPçÙâžVîáŒÖ$‹zñöêG4Ýê_‹!š)L¾€[�)¬J£ 3QÞå <4h°…ÜâgFþ/ËeÜѼ~¥¸.%;zo27Ÿå*OñsH2zéh\ÐxãáY¤gûÙ<Ž[r¾ �ð¼ŒPäÇÌ×¢x7£,Ô:}ÂOâaÎ<òOGÏ;zG¢S&¬mð þzÅïðò‰8ƒòÃ\Òàò"­>†K¯Fña.Á·afÕ.•3ÎìéÉ|kèY2— âRƒCk³àž–xiᚆ�‚Æ = ‚ 4®èÙ¤a]n‰È-hyO ˆÁ Þ Œž qd¤Í}Ï=®Ò$õ ÕÕ™ Sc?J(¯Eñ¡d°>2'BÉ"‡&V’ͳ£çHÏÞÃ3Å œœƒçžQO�}Ʊ•M’àš×=yE÷TävEÏ�žäx⃰üvñ‹øom¨¢ø£øÿZàf%¦Dîìn¦…÷>fìG5ò'�IÓµˆg;7/àÄ>£³�âÁkQ<σÔ&ÀƒrVÉ6oÙña,çQ‡Ú ‚_Åù!‡š™…FÂ5vŽ +俈!íLk×ô¬èÉ DT*%eJ ‡×µ—ðÒd©ÈÇðñµ(žçcg FJtép"F¥ƒofÎö–Š�펞À-Åf©’,ø`ìl 9ië†8Kæ㑞 A¶¨­†ehOe¡ AR¥—”JÉPÑvitQÿ-mÎ��Á¸§1{w7ECO+$KòÐC9JWQh@ùð¶’%�¾+ý,ú'ÆJmÆI4¯÷áÔ—yI#wtþäò‚UÎGõüÎ¥À«¤ fIH7K`K[#ÇÈ:SLRÒ¥‹VÁM-Ÿ¥³†êLɬæ�ÄT¥¯<àÔ í\C²±ÀJPXÛWûJnÙô®å4>ŽAÏ}Ràh°ÄCÄ!«2.ó%©™ú5raF0q¦)6…˜�0¦* äsx t²ssüE¤Œ‹ÊGአðù‰,ÃwȾ€«:ä_ƒž©ÚK@E*�ƒ$Ç W,ŒÜÃÜŸkÝ¡K5ÜC�U¿îü•Å‚�‚�ϯ^tc)ÖµÛºæÜ}%íA=ð¾Â;p Gmƒ¢Bb{Wt|7~JÞ%ŠàÇþËth¼GÝc— ”{$Jª+ÒJKCGªÖ+¸38nL¾È*Ïrl²…µG} l²æRë-FÖöÎ÷-©Ôƒ§Ĉî¤G¥0Œýi›t=Jg’ù�Õ÷hH\Bí}7U0Þu,9©ŒWÿ„SÈêèëGXj¸¼I!9âBŒ›@ Ñ-qÏê‘×í‹©�­¤¡êø µÕ,µÕJ�|ù´t[ ¦û ±ˆ¦¯‹ž¤ÖËGìYáM�°oy"¬ÜŒÝ¹úßùf$Ö¸Z©j¦öÄársô¤v®R1&�Šÿ½ýß9»B»�ì ý’Ê‚ctŒzjhY†X¯kð®’_ìß!|@`СâÈHh,Z÷§Ëb¾…abNj¿S×O 3 ·Wš²žÊ2lAšÅáÄl*ù·†ÍBß¶+1ðøÏÙT#œGi£JLßøÆ ¨p]yM¤ÐGÄŒãÛb3x(¿ ‰Y”μ�eC0¶O\¸ E¡.¸Ë8ƒðMñŸ¼ý3µHôázî:¹3c£dn�Ô(ÅV Œ‰óZ‹œcsòßdÈyLnñ÷ª©X s_ÞÍc:Ë.�Ÿœš¡ó^jNF+/}Àü2/âœ.U¾Ö{–ÇZîYÚnÀ>¿pøo² )Aÿ”�DÞÉcÎ\£I ‰<à¶gJIJ7š#��ü_ ÑsjHË®XWÔkðJ…¯isø•|’¿8Ñ“O<¼é‡jg­£ì >p0u™c9d¿‘9.¡^o) 5Âêõ…rmž‡p#>å$qJû„Y2ü/¥“ÄqCŽ ý!&óŠúY�<=nœ#„˜ŒƒÚ= 9ÆÖÌ2ÚÛÇiÕžGþ¿aŠ©íñ3OqéE;ûnò¯ C£žÑÀ)‚ëÎ8 ¹Æºñ)²/ ª�sâƒmef–æÂ›ÒõU‡IO)w‡5œÒá;ˆh‰œ‚âš�ë¸C‚¯_¦¸¦*y*ZeA«ªÙ�!Éî‹poG'Eaæ«ÁˆoMΈ7�,+áV}†}Ò˜[æëé@xnîpç/€­÷1ßNŽ«ÿ>O~¦´Y =4dæ¥ý_Ëý9eLÝMŽ”ÿI«:ü…žnRåÇî$†<Ÿœ\Ê•ánà> stream xÚ•ËŽÛ6ð¾_¡£ ¬R¢$ª ¤@Ò¦=Mä�äÀ•iYˆ,¹¢”ÍöÐoï g$Ûo�vÅΛó²ŒêHF¿Þü²¹yöZçQ)Ê<É£Í.*”Ð©ŽŠÌ“'Ñf}еHÅj]&~ýaóáÝ«Õ:MÓøã*1ñÛw¬¾l~ö:É΄h™‹"1 ‚øK¤¹‘¬4Z§¥…ÑÑ:)€'%ª7È5E\»Î ¶½]­µTñqè�«5hrCû@ÍÖu¨{lvMW#€½ó+;‚ª¾mûÀVÙ±é;¸ñtã�;x’ó×ÔŒL¿‚æ³LójjGð5—Eü[�JîWI»o«`ÛºØÛú}‹ÖJ‹RƒGJ‰2ËÈ£ÁçÙX Zެtð`yÎY|×ÔµóLVd–4¸éqn^½¡Èk/©Èù@çþØtè{l·]ä nþö lfž¾mó5¸Û²œ{„úaÜOå¥�lV;0<*‚F[aྶô@ˆÙ“üôøÉ JÙ)m@t’ SæœxüUšÄßðŸCû èùnÇ9£ã=¸Tü˜ƒh§©)IØ&Ø©Ô? ?@IlýLrlHœ à\øúéλj¤˜œŠ\$Ä:A@»¸?uÀ"Ø °v ‘Àô L}G·pCD‡yûžèø®ß] ¶m[ áÔ5£ŸãjCÌuláACÒó …�ª˜K\V¸è=¸á¯Õ®™žÉ'·’"Wé¥1/9­µ�”qÖóÑ÷G'ð!|±4* &\×3ùા1ÖßQ±CH*;y·H ÃÞMCãǦb !–$9H’_˜t²þJ�æs@¤ÃÜI´Òø,Ze!ÄtÂçÇ ²PxÜ“ ¨50…jÇ\­íêÉÖÌÊIÈqÄ`ë¸.ß÷ÓP±ÈY 6%SÆoÆkyá÷ýÔ†d5\ßTÜÎñ „uØ$¡�”Ûe<öDW¡P5“R]ÃÅE³sò.Š’Û*î AŽ!ÆbæNF"= å"ôW;JO‰}²€SšPJ^k·/Añ-’+ni*>Ø¥ª ° �ꬩÐ\·mpNԄྦ8åà²îgD%1Drvƒ•’ájœf«y0f:´vš�ëƒA[î ƒ–š²CË4öhièF€ EHÞn9ò×ÓåvÙA�…_\OÜè†CÓ±HÏf £��’Ç%Q‹ä½eýœü®#ÚPè¸g–Át[_m.Ëȃ¸¤° * z> stream xÚ3PHW0Ppç2ÀAc(á endstream endobj 1487 0 obj << /Length 1021 /Filter /FlateDecode >> stream xÚ}V9sÛ:îý+X’3ÃS$'U2¶§Ê¼¨KR@$$"æ¡à°¢ÿö€h+#§!{a� &Á>H‚O7‰_?nnÞ=e�qUWi°ÙUy¬Ë4N›:ØtÁ÷ðC”§aåYø­Òpš‘<²ÛËQN(´&ú¹ùòî!+ƒ&nÖÙ]%Á ¼ÔÉš½lze¢Užçá1ÊêpÖO¸+Â3wëÔ`™t‡h…*om/Ãêl˜‡óί ×&Æ‚´ˆ›¢Vi7eÉ?‚×"MÃAY©Å0œp›…í솎%ÓìUäe,‹�Êö³ó|Á<ã¶Xþ’­×²3+¼¤„ÜyzD™`äZîf-oauzôÚÊô—ö¶Ó“Q�‡·˜ÐêZFÿ©Ïëñ9aLU(¦‰5È?1—ŠÃüv&�Õjëì¬ +`(¥"#ãNMQîyÓ©ÖªyúÄZ�‹7ë¥ò~Ÿ£œØÞÅK58žŽÙÞxš^h5í)Áä25e±õM( ¯P�"ÔRòîÛ¼³è›ZÆXÖ$¼ÿí¨¯P8(tÖTXhÔçB#EiâÊ…f’¼Ö˜@ ÞÔìü¡W*j/.ä[Ž±Ý©Ö²ÊA“„"©)é+y.õ«—Ó î€-';f×¶Ò˜�x/§N T|¦ê:²ö‰U|4˜?«º'½Œ{ B·3ÄD`3÷G’%V»áÄ‚�–/¦[5@‡ ¬¬ºà@Iféµ”¾§ëŸ˜tÑø–gµoyÖpx5†‡�'G„švZˆ¤µN{ÞâÁ¸ƒŸÚzÑ0�¯ãâi”|Õ‚'&3+ÿ:èn±x…ë×™øQ…~p²\69›ûÇ @#ÀâUÚªÖ BÓ´Y�Xx$€ùç ¡¿Ìý•Ez¯…UÖ�—N.& z¸åûë­¾É-ÔMÁ…§íg7b§Nðdq,y‘Ï›Óå/ÝcÐÜ\î…dÄ2Oð²'øˆ3sœÝk%ŠV«°YÄÁ¨³’õ™ NR¤ A> º'ÞývÒ`çÌ¥ÛQMÒNJȹ‚NÑuŠZNöò«š­fò£ø‘•¹yR·ü&{HefZ ÆÃ@EƒfzÇ3�’µÎ�„=¾��5½Ty²FÌäIâá�aWTHžÁ�´èž•™5YW~:.ŠŸ¿ ^J—ùüòq9ª‘cÜ~¿T” ‹×4>Û ²5Ì€†½‰™%D(…�Ú©Qyð#‡€àÔ4a±LKoýãÏW›OOºùŠpÆ‘ðAÍÀ·©czù-ØË vÿ� ¡Í¬~þE(¢¾9FñŸÂòdIçkÈ'/Ò¸,|Bez¡u¿¹ù+ø{v endstream endobj 1491 0 obj << /Length 19 /Filter /FlateDecode >> stream xÚ3PHW0Ppç2ÀAc(á endstream endobj 1510 0 obj << /Length 2607 /Filter /FlateDecode >> stream xÚ­YÛrÛ8}ÏWèm©* Ä•ýæ\œË:³®Ä3Ùª$´D[\K¤Š¤âøï§MR” ;Þxª\Ø@ ÏÁéÌ'×>yû‚wåË‹ñ©6©™uVL.®&V0­ô$1‚‰ÔM.“¯ÑËârUT×u¶YN•ˆî¦ß/> cħÒLR–&2Áþš¥NLfF1¡ºî_Å÷½“¯3Á9�΋ª­§3#mô2û&�jn |tQV.Èþ9¿Ìš¶ÈJz|·]çå"c8\| ÓÜ}WrÎlâàôÍ«zjD”?‹bÞ~‡QT}òÆc|°Ñ«¬ÉÉ\”߸2¾ñ¼-ª²9¢?òú’ZдÀ”-þíd4ŸáL&3á8“.…Š`©14…¶ø#km¢«ª^74ç}_if”ì§Ì ±LaÉ›©ˆZÿä"wDVÉ%ï–­Õh+™FØÖ«ÀW„eRê¾Í1µ°{ƒ0®’¾Á²m7Ít–h:Kuû:ýÞÞÞú’ù7Wuž¯Š¦m›‰ªúzÔkS5í¨;v@F-ÈýPé=©“BvžLhJEyµÊ “À=$THº @2G—Ó£wù‘¯¦ŸHŸâ®ßãçLJÁ,øl& KuÇ(fñ¿3ðúLs$®Û|"§µÌ|)nРǬŽN�o—øSmÛÀLÃ’1GîS aN<…ê1 à â€V"à ²ÊÿJ¢”Œžh-#˼Z�Zo²ë|BFÙex‘"åÌðáû߸á?Цhóy¶*‰ vŒ‡e´Í�á÷t÷�äLÛtHòÕ²2W›%ÌX ФU–7MNÁ5SzК÷ëÍ*aj3¤(tÖ*ª®¨Ì°ÐÑÅÔZÀ¦(¯Éü1›/‹2ïÚ4T~&¡êæu± ù ¹É•©†ô�‹9ٹ粜·ã gÇqˆI™ÓÂÇó¬­ÊuÖ²2oã«v7ù"nýúYû3È ßØMb�J©ÈûJ€š§¢-Ò„i.;¸E‡·ãýGq�ãÎMTt>uÊëo¢�Ùf�•AÜgŠJyö z®„-«\Z\Ô.=”U}GÏ>pø¦>*e TsŠLOhÉ’ÄŒ£Î*[O!\ÖÅâC×`³`ƒx�f²þY?°ij±rGPI¡"•ûP�×@ñ£Îµ©³]u³AZ)¹ä—ÆÙµWãÀR4—epk3�ì¸å‡çF ŵPÿ½ †¼!QûûÕ„ñ»xó†“C .Tu[l×!ÐR˜ ;:á$À÷'À^íXššÇ…—ï4ó÷…—ïq·yAalÎ  Æ^6ãÐð2eÒ†7�4´idò ‰TÜ€ø»}Ÿ'aŸ¿FB�|zòFN]ôeê4Ðü†„ oëj»Áª¥¯ƒé,~þ,æÙŠž?åMµ­çyPZ¥J˜IÔ.`5ˆñ™ß.?gœÑó  á)ÄÊ‹)¾ÈK¿³*ÊùpZh…t€:¬`Œn?p½;&Å®ó5mÕÍl3m’h‘µY(@Ã0Ò=ÆË„qÏÏÑ„±Zp‹[ ‹‹„ S­‹lIu ô9Àu`Föë¢]n/©Þ™Šjo0ð¢V÷x�^ZÙ‹whj9»Ÿ¹~gùOw%[¶ëàò¹õwOQÿGˆ,¤õ·ûD¶�{ÌÎ�ÓU]få=¼o²lNÕU™7�™*Ÿ‹5NF«bx½ªP€oÃDÄÄ@ä“©rèP¤’‰þDj5yMÄz»-¡H`S©-¢¿pÇ¡¶ûiÀŒãݫܜ[ƒÀ.ÄQGtH®�¡{D‡|A…¸*Q�ÔsÉŠ;ËŠdŽl™57ùjEªîˆÕÜWØfqJvà[6IžD ñpÌðÂ…yq–Sð,ñ·E Uô¦¾ÁŠìX•Õ²¤wgÙÚ.}xÞÖwŒ^@Üä'ÔúS>ß`40½]TôŠt *ïÀ1È%pôÝ ïK�Îã»äu©¢Óy=ÈV—W@lË{ ôÀAüýÛó³“?èÍ;�"dô6Z‘å æ·šeµ 1ÎÇB¥cá˜Û2?9ÀvÀGÈ/¥RÏEU„F7 ˜(Û ¼¢ü«D¶Íö®ð|Û.'[¯aj¿íJºOü«{‘­®«RœþL°ïO<'š!íîèÚ%†ÊJ8îÄK¢2HQ„J!7¬V–%òÙѯPíaô\fó`ä^Ý�-¦•?pWà\�7~-ýšŸJB*ã¥N + Ž€Ï7{’'$œ§‹•S€˜Â !k»Ì:ã:kçË®©§N ›´l‚°(–h5¾VI„ g)Y÷êc†Kº#ó(Ù‚ê^²5H¶ôN;Ÿ!jüðêN /jþÞ êô;5A·Í;Q#ƒèD�zÈ�¨õC\×ùf4n÷ØwþÕóñ¨ÉZª!Ã} »³zïÚÏhwïÞïÿ”5ù Š赿ËTα CÞâ¥rXÞ”¿Xì¦þºhæÛ¦�wtòÆ—t:µITYŽÁ)S <áPÇ{»Ý½@øö!áúùÜ ÒqÇøk_ã!7i< w§EãñÅ<ïy‡×»›}o¢­ A%“ƒHÕ]×ccðœSó&¾-nŠx1¸�Z<àHå•{æ5¡’9}¨gê‰ô0Jtô°�Ð#�ió<ÅôxÍú�Ò=?–›B²ôèå¿c¤íF›iÐO•#ž Úîæ0Œ=Ê[ëlÕ*´T¼Ww¿¸}”É?ðoŸÑ =ò<g»ßuŸÂŠóþõñ¾_[…W&¬eN†A„m?Ö|ëìs5ß<XðÓ65gr÷ßÖ0°Ò$ø¾"Œ©Õéc˜îe~ÿhúHø1@-ƒZÜý6Á€ü_ç6¼,©Ç^ù½]) d_+¤O h~(£ö½¹xñ7sõÅ endstream endobj 1425 0 obj << /Type /ObjStm /N 100 /First 980 /Length 2631 /Filter /FlateDecode >> stream xÚÕZ]oÛ8}÷¯àãÌbCñëò£Ûé43f�AÓv7èƒb+�·ŽeØÊ4ù÷s.e¥vãÄŠít[�)êJ<¼¼÷ð�”&'”Ð…#¡½ WÞ mqéŒ:*.(a ×X-œÅm§“ ù–¡5"?@ÕJ[®JBk—ø9\š„x�u¸Ò õ6曎ÿä×scQã�3À‘ ס¹HÙϧÄMØ(Œ¶lg�yâ€Ñ)nÖ9a7tàBtÂGÆ3縄zðŠ s•GÉs.UDN£Dü2´lU|7 k2BRÂZö’#-,)nžŒ°>÷•¼°!æ»AØhщˆ›1d³(l2M^—ØÎ+á”æþ{¸Wyî†Âi•ë,J”ëJìDçI`pPÀáܬšìEà†‡4Úx‹oß‚Ä|.)n½"ÅŽv€A:òûಆÁB)p»Á r:×E”2¾€ñ'Åc¢ŒG!G^¿ç:¼9FÆ �PòÜ�ˆÊ˜cÞð8â¦Ç p o ?ŠPô4�8ðh—ï&”8,áã}ød…OðœdDÐÙÍÉ!*S~ ‰@ܵ"„ܵ„˜�‰ÝoFEj€»ND“à ayèPJ"zg‚¿bà'HiSÈuÈ–Ý„¨K–Cœ0Љ¸ 8V¤_Ï¥˜,Úà‘PÊçÛø£r4‘FSÊ©l ÄŠØ]œ‡ Ž@'s cÕ&V0ܬá^”ØÉ*⹜l*’Š_ÄÒO#·ßŠâßÿù/ü"9Ï‚S]ÓëÉäýà§Ÿ5&ï¥A?ú«$9ô{›`$3ÇãÆÑKî·öZÂkkÆ¢xUOêùé¬V¶�üQ6M5Ÿ Ó^¾¾i~=mʦí+ÅI=mÄñ±(N˜ŒkíN@lFwÈëî.,.hyÁ鯗ï>A¬^B=AæY½qÂÜ »g�kÖµÏwñǼžV�8Ø_NDñ®ºiÄ]ÿßÝÎ*îŇj€ÞM›jÚ,˜áòóƒâmµ¨¯çÃjÑòd®ûg5—?×7âŒ+(‘ä$BæÉ˜Þ£½rŽ—0áÆÖþåtZã¥g-�3¬LàËBè ±+´6_ Ì/§×çM¾þ}<ý8(~®ç£jžqè÷ÅoÅ›âÕ;H½gèCtÚ*%\´— Ϊ<¾ÈI•…ÝË<:§¢øµ~W Ä <9®§ÒIû#»ð @ÀYƒ"‘äaæ–¯”&ºÍ8®Ï;(ú°`@“yZÂ߯LŽÁ¿ÌouÝ µJzu@¯(/5�äÙL²¼ît�Öùdžço2ìƒCq†~�ð¢ê3­–Þæ)]*Ÿ6âŽá õ�ËÉøüÅùmS-šùxúaS&»B.mw5¦$ (ø>­[‡líIêi 6ƒë¶Z#-&¬gà¹5jc�“Tw±Ê€óK©;j{˜ôÁsÎÞç9§ŸÄsnÏÙŽÞlGo¶£7ÛQ S‡ä9­µ$¨¨N©àc5ÉzЧ !úð‹;\Z%¹ÇÐJRAª„½ Lv^B4=žÕñp0 1V’ÒÁ)à7LîlCŽ€cÍéƒû2X²j59éêݤñ\Š`�ø$/Ÿ´’RËÄ ·p\9›ÝÞc¶eòµKµRïAb[3^êBźÐ÷3öðUÂò¥—1Ô¾äLëg 7(,zÛhdØù5ä*�®íO®í�ö”š'Z¢ûDKvo¢u›’ê º+˜ƒêH†å'd$¯|�6b,.M@ì˜-2ò€LbS>µÂ$a‘¥ ”â—[u¤Å¿¢Á"ƒïÀ�q2ò6I0æ€` |’Ï»G@cyéš×{:iÛ›{ôFî)Âmݺ•bÁqË®§µ‡5A÷´v!È”ú"q²€zc©âûÂf©ûÚ*Ì@¶/‹ù*övˆ�I:åûZC$gz[cz [�ýÑÔkì¾Fè«“À ‡9W<Èû+» ;ó~Ø °ÃþÛwrÚw@è”v8¨®6NÉ@¡]·8ü”ÐÙˆòv;ÅùƒRœGF¨A«eH˜†óÚhZ#)™¯ÌþKUKà­ˆ0Ô†eoå*¬�óƒY×¶Ú0²¦¶`}ˆ[Ë Í�°²ñ1q;ªýÅâvÚ”7÷æ€ð‰6¨Öd¥r±Ÿ1y�tèùfç¡<6ØFã(SH_G‰>¼|_£'¤:.NbÆ {–QíD5«îŒ=÷ovòçÝÚŰ¡‹´7›F·e®gb€ªS|Ž_YI²2t:™KËy… ›—õUu/£B"®?|ñLûù;pÒF7íÀ]–~LZÝë"Ÿd>¥‹¤ïpjáæÃ¸V$ר»e»šns.…îÖ�q'+ÒRVðܲ »‚é w�vM(×Õø®æîVW£Ã#¹öPré•�{(RLø+‹ä> €ä¤Òì¦eºæl-^犗yÎ-N‹½}Ãÿ¸lšÙâEQ|úôIræMÆ‹f!ëù‡bV/š¢KÆâU¹¨ŽÆÓ‹I;k/Žþ¬æçGåttTŽþÇuVGõüjñ÷ôãSùöNa¨#\OHìÄgë �Â*�bÞŒÿN;e\b$ˆ°6†OÇ¥BŠó§a·^}äÈa}UÌ�\Ey^_7»ƒtD28^¹{MøOò¾ÆA˦ž^•�œVpx3+Õ¨h®ùdD67Íþ1¢Ö„Fžxk·þ 5ÄÛp%(VYß®4#»Ö@ ê§#mªñÑ0Gqìbwhj4Æáð«?�6V±Kˆ§C•óqyyTÍÇCùaÜ\^ŸËq]Lª›ñ°œÌ;ŽÏ‘º(Þ½~ó{u£º_yÙ\Möއ•�æ/m”‘LßÜ5íôwÕí0Õññ„²|›·øø£�ê|:°Q\–‹�ÕdÒ† zQŒêa.ÈÙèbw¨–¼L|ŒÎG’˜Zyao¾iw€:ªÇ¢VÌôT€ò}ÂÊšìõIÌ ÖÉs¹#L—ü=ñ÷";Ì(Wå4�¼Uçãrš1Ÿ_/ �2oà¿Ô²šîù`Æð·_’?ë² ðE>›V;€¾,‡z-fm]ñºœOªÛ}bÖ󆢹…öÓ/TÀÔ­ñ›êàój–ÿÂÅ«Å;ÖP•üâ’�·ÐÃö鸗TÁóñ�¼¸ñ/§€-0i�‹Ñx1¼^,PyÖØ›÷ oo@�h¤Ägzm‡¾ƒXÕJW0žäOóî†À¨åyz°¿»µ‘Jñ‘ž’ž¨ÿ��5®å�9š ×bqo¤§1‡AÛÔõdŒn3ìÉ(5*º~>µÑ»¹¾¼w äo“ø»IÁ¦ëÁWAÌ yþú´÷Ⱥñ–ï07{å%™ØÏ˜|�‰zÚZÞIïûb�þm:›ßḑþ´úåÓ_àj·2 endstream endobj 1541 0 obj << /Length 3321 /Filter /FlateDecode >> stream xÚ­ZmoÛ8þÞ_‘/»«àjZ|ÉÅ"ͶII·Øövï®-ÅVlmmÉ+ÉMwq¸ß~3I‘*-š†ÉI9ópÞ¨ø`qœ>zúæÑô¹Ð޹D$o®xl×üÀhËl"ÞÌÞFZ¾óóô¹JwJiXœÀ0þ–§/žž¿øåô×ãWgÿÆ›Åí+ºvï=“öñ‰0À“4È[ž¼ßyøàí„Çq=?´2ª²ì�G?峿p¢ �6Uy86ú¸Ù¬a4G©vV£·®›äY¹ÎàY«¢w±H¨÷üИ¨:Ô0†ÿóãû‘væk9K8ïb4‹¸}­’CÑ(fuwï¶ZÆã† ¡º{Žè3Ä0•ô/\6ͦ>œpià^ßLwškÎÜK)FMY-¦¡W Á ï…ò.ÖñǼΛlޫУ²À‡@CJ2íÔÁ„sæ´¦»y<….žãlW[¡aÒð€fÆéN§&¬ÓÓtUæ°&)]ô¢˜…Ôg`+»‰~Z¯`í2‘Ñ15u¾Þ¬2ì‹è_çÄ\åW^›iõWhíÜ2)ô@�øúßYUç°tÏàL2®Bª5’É[Ô­n]îéV£fT¨Æ¿$Z¦³é"Cš]ÈV+¢½†D¢a5¼ÕPBáÖ7ôèDƲ1IPÿRʈ„ QÕ±U5 !ï(Û†•ýŸ¬(i¿�¦Å!lÚ¦È*b¤Åœ:iÓ,ó´FJGO·°­g‡ÂDËu–ÃÍ< ADð˜)Þ/æõÆë¾Èëåä4«Öð²‰rIô±DþÌ_¼Ú®À7€–º¡;®ËŠXó¼X„”jc&­Z˜åoh˜²jÒîÔ‡´»;†P¥`!1‹sì%ÑEǺH+âh¢¹=’É‘2D‰˜‹y"Aöò P(ï·0±ØG¡“C§‚Чÿ:ý˜Eºô˜ge±(¶¾Ë<`7xló`“ëv(/nÁ¤·+”ö GYMí< ,F',ü��µ‚Å–·ˆM:ĺótvÞEˆè�Wqº(2î1qºJëEy�é$:ó»õpb’hEœ“r½ÉW{¡uôOÄb�U?Ôtõt›Ï3Ööý»á¦sBóbëí^º/%¢ }„;„n=ä¸õP@ªmnpÞ¾×m Æ®C¥÷8´Þ  -Ža£¼˜gŸ�É�Ú,7ØüˆŒ&oP~6z‚ <­PЩèÿÖ%ÉØÙŠÙFßû·¬æù¼}ÞFJ+á‘ Ò1�¯Ä â£ûîD|ò‹"¾€ü먀=^7ÕvÖlÛè|¢pc\S›RÓãË •EÎÆß ÞÇc¶!fîï=0HX*ô =ý}€”Ì(ùpèb»Hâ‘ÿŸþ ŒVÜbÑA¾6†Eé!§âÖ&:oÕ\‡Gà3O{Dõ£§ZLBï‰çvZ Þ¥ÿ÷jˆ["ôϯ¾ôü6ðœïü¿>ñ¾§‘Á@?¡‹Êq�a¼»Ä¯ B Ša¸¾B¬¦[\‹�…e묩¯|Æ™U LE«`Ê c+Ý[(LÊØŒ‚OXdýWé" N'ÏŠ„ Kº„÷‚_É\ rv`&ïB1Çý œ±Vz‰*A$*Ÿ—¨¤ý¿¹¹ážÉY{ö×|Añ\÷>ûœ/⺎ˆÿS^רIŠÏ�N›Ô˾3¹ƒ˜¦/—Ô0{ÅQèø€3múÍýúÅé«óã—ð€M¢—ew ½‹MbíM†’ŒÓø8q²M(×Wy‘⻂ª�Ù��\oÙÀ°ÑI%ð Áʃ1›`:~pÙ¡õZê®×BÛÖ}³¡ëδ׷B8.ØŽÛ‡Z¯Ä1iìžã’#eíÓ¬Äz –b£cFíø&¬y­Øï(岚¿Ìš£öVjγOTîGíÊUZ·ƒù#iìt�=�:“.'lR0ÿ”úOÊõz[ätð�qB¥ÈR*2„-9:GßQ‡/U�\a×ôV@ZÆ9 %þ²D£û‘µ¢vNwÆëó›–/Ú"Åæ7…x¸ÍTâðŒm‚àÎ >¡Q6h³r[*± Ž|ú:Çd-Ê"/‰ñSžþMÏ`/üùƒÃUu“¥ê€®'J‰h•Ù¤¬ò¬hèb7Ù§†zm]ÌFH¢83óÉ–“n‡Ÿl)§:ü�Il!S ÎF¼–Õ�Šˆ‡—’Û/*ºbyûb¹ö§kHMou•ð½èð>Ïvõ~›P…¿?ò§’F‘gû@¯kŸ½yôÁb4½ endstream endobj 1572 0 obj << /Length 2962 /Filter /FlateDecode >> stream xÚ½šmoÛ8Çß÷SäÍ2PÓ|&U (Ú&Íe±½]´Á.ÛÅB±G¨#¶|iöÅ}ö›áP²äЩÛìЊRùÓ†tøÑüˆ�={sñlòNÛ£œåVÚ£‹«#'˜VúÈϼ•G³£ß³7ço~:ÿùìÃë_þñ¯Ñ?NÞIÓk¢¹eNzè0Xƒ6Ïx|D›�[»±tÐV‘õïJÿ1°?ú},8çÙ»‘WÙª¨?�ÆF‰ìC5IŸ]ã¥)WŒÆ#ÝŽ#7Ìû¼Æë‘Ùæê“b�hžÍÊö–gŸ”ÒáN¹Z—Í_›z¾ŸMY%^O(Ç´sm¿ {�Ù�›Å=å$ç&G«^;Ë‡ŠØl³Z¤úvLÊÎæ%Y¸~/žñîÑ×Ms»�EîÁ4$“A2«¦ å%͆Ò1v óž+&µ< Árc¨ÓéuySWÍ_lVNfËéd}_7ÅvÝÜ$¬53Z´#úÄ ÿwµ®šr6+¥²eM©àžO$—L®ðX8˜. cX®[ÌWA�ÎgÎw³zRÕs˜.Å 0‰†šiS-ëbuOÕ?! Ë‘‘Ùòóæ–ênW±Rdó�-nRÓa ãR÷Ø�Îf¿Ž¼F²*œ ¬Ì3ÁhüËÛ&ÚI.lŠÕ΂Ž~ ÃŒ0v^ÊäÌë|ÈÁdrww7¤y¶Yü6*ôùøÏÕªšÌ`>'©å’كȀûÈ�"?æÁ8«‹r�½ÚìãHÀGmĪXÃͨò<ää ®óKªø­ú¼]xe²"¶.(ù©¼YÖã7ÅšÆl²÷›ES-à}7Å¢5ùRM©(–ëåf5-éVU‡Ù•†� ÒÔZzƒ'ï`(‚Ñœ×/ÌjÓièÇò¦¨ ÖÊg¿�œËÊËÄœ[x˜“m+KÀ©_Œ¤Ëî©838Ù/¨x{G¢ TK£¬HR(%3y'>³eR2û(…–qß½—àLI¥&#¸„æB»D¿>gZô¾«!%ÊIÆ�ÚÁÄ¥1¹@ý(æåz ŒLqZ®‹ ›A¡LŠhd7Þ³r=½^”øýO¯Am‚PÒUÂ\:�}$Á(àsÁÙŽ!»ª¡ò'0‹>‡š@çà{ÊuS~‰&UMé]Y].*èjEåwÀr•R %9³[7Ãâî=P¨†_øë'AxTöó´‰9!_P?È ¥Jˆ§K‘·Jä†5a]¦aAÊIU/Šz6Y7+˜4dÞ›£èÅ„P ¹fønÝŒQ³+˜¬H{}™Ô Xæ Å’û}™_æÌ‹~‹§çЧuÙÛe½^®šjsó‚*ÊÙ:E#ŽQ«nϳ_ÌKÊœmªY „Êðæ”9Ele6% —u¨¿�ç!â¼ÏNëiççPØÉV�2çu„–¨ž—‰I”ø¥zý(QÅÝâHÐÜZ“ið‹œQþ5ºôÍ<”t&òT½�L!áɹ|*š–©|À&8PB»ÁaFþ›Àµª,øéÃTV3•w¢uZ¬å=Æ£°]»±Õº 1SÞ¸|O€Ë£è‚é@t%¸üàWz&¹ê‹.„{EW3ÁŸ!Ä}™NîËl8¨´á\ÑÊpZN#áÚƒ ¨.@ „¶k¡íZháî«PŠÐBî8\Û%ƒ?É<® dŸÓ“ˆV0 ¹ãÂz¸&¦‚Ãy�ø&0Ýa`J/V•í6§õ|Q­ñüPðlQào…sÔE!Zai.±ž„Uð—ØA‚KŒ$Rhmr{j‡°^>¼rÿ7“i‡"Ëš˜Lz tb‘QÒã³Wíµ½t)íÙN1óŠ’H*f�)éV ;ø“ê¶‹…¥çñÑ„,5M&€‡W0ÛÊ endstream endobj 1519 0 obj << /Type /ObjStm /N 100 /First 976 /Length 3062 /Filter /FlateDecode >> stream xÚÝ[Y“ÛÆ~ß_�¥ìrv0GÏå’í’uº*N©´Nå�U,, ‘Œ¸€–äÿö|=äpW>ˆÜuvSe‹ƒAóõ1}Lc��…,¢ñÙBeŠ( g4ƶˆ6*ÈÂXWhm ‡kí"~]aF+Ü‹Y�¤ee(ˆb¡,á-¸ÀŒ/bÄ«­–…Räùžá•x„ç…4G…r.ÑaíÀ$ˆ´´iÎ`}ç° ù4GÀˆé|¡£TÞ¹ˆuîyÆn�ô¸Ô!ð21à×E­NLÄcÑ�]K…—`ÅY�Te  ¯$ã–Òhü(^ê5$MÄ „±aCP ƒá®<é$P‘gàw^¡RòÈS”g¦�!ËBÆ`«Ðjp‘S �íÌzÛsÂب}g("AjÅ"º¤{õ‘çX«Rn'A-uR/*)Y¤¦$[+fa•2X^ÒáDÀªl”:AwÄöi kRm-…MR…„Àá-·x¯ÖÛ%@¥‰Ò,®µ#Æíp­ƒa6Q#“a±°Œ†ÊŒå ¦!#öbXãI¨Æ†O„$èxÓê¨Ò[ Ðð†�xEEb:gèäþý“òQñûŽ÷õ‹¢üÛßÿõ ‚9’ BÂæšÍjõêäË/ÿ3±‚­b±”Â`'Œ"6^ ’n$±Ñ‚­e±$áF¾Šóãˆ�¼ßÆË(¤ùf”PÐèUâ¢|Ø®Úîl]MëÂly^ CÝ5…Þ^>~7<=ª¡.Tš8)Ÿ´ÍPÜ¿_”OØmÂ9&º'ðˆZå ‘R» ™–»×=�eÂÌÒ0”Ï»vzVÅK,üèIQ~W¿Š=/ß½_׌h^Ÿi3ÔÍгûJo>)_Ô}»é¦u¿õiîÛz¶¬¾nß/%&l´Bc»R"ÄWX¯êðЫ°¥Ð4-^úr@V Û™<£ò å�glžÉĈ»™LLû7gb yfOœi(æ™=Mž1˜Í“�™ŒÇîg2›o™ŒÇd&¯nòêvûÔÏT�¤tR~Ýv³ºK’U¯Êgå7åC\À¯¼beL¡FøA�½º„BØ‚fáMÆÐ�mμ³üÓ²yS>¸?­P>˜˶)ÏÊ¿¼ø†ÿÿd1 ëþó²|ÝÕÐètm7/?¨qEì+Š1bã"tjlÊ�”pÊ<®E5}»‹ªS¯V Þz;W¾»XŽqˆR &©•�d‡ü!E,¡Õ9)4'&;™:x‹�GÚW?TMS-DÓ6óf³EÚµÿÄj}9[6óÓº?�Õ× [B|â|*À* c$C"ZwÃks>à´ì"ö2fNìÖ0kß6«¶šõØÃOóÅ´\ÁË÷(¦}¹.V妯»~2ß,gu9_Uý¼};�ƣõX¸ BGŽ!ððžÌ£¶w’%"+‚„�pH�öjBž@öžÞ.ß,?`gÙÌêwb½X5,‡UýųeÝUÝt±œV«ÉE;Û¬êIS]ÔýÚÕl9û©œŽÇëy«à ‡JHHd¶;ïCd¥ðÈô …‡ÓÊB6.<ÝCgC·™›®ž´¯'ÕäÙ–t²s÷ìÃcøŠ®ASHqʨ=c`TÓÝå‹à8¶ÊÂ%_–HæÆÞ¾U"¥Ói9tUÓÃ;€tòz Sëêmà*˜ÏkÐ…„.5v�D�¹ãáVbF�‡¼Â¬0æ2ÂPôðÎú Ì{È_õ_Tçíføü;ˆÈ&�“õ†+ø\„g:g•«e¿Ÿ"v‹‘Íòy»Z�võz…¢±{Ssoæo'b:º‚q£<`¦¤1wŒ …‚VMÈ© ñ~Yèð»jâ�ê˜Ø�oÀ¢L”Ø¥mFÊ0’H´Ã!ùûªn󺻨† ®å¼j~¬»Ïîù‡Ÿ¥áûÔ;ÁgjÆiì‡ËÃx¾=$ŨÏE ¸?Ô 9®K-•‘ ™1$eɤ?gp�º¡5‚BÙÕ0™Õ×”ŽÐHʉ�@\£¨Ùµû?`ÌAÌ� ¨…Mb”>64ß8ZB'ƒ* ²qç/$L8ÛÝWóˆEµ^¿çT|›‰oÓŠk’°‚é(>ˆ÷ØÑ{n%f+�Ü\€Šî2¯Ñ‘Ì!åÏ2a… ”"[*£Cˆ,È_Cf©=KˆaÇ|ÄÇÈIÑmDJFh§“OÔ×Öñ5Ÿî\Ôój]u}==æèN\ëB+ —Ÿ#P×|læÜñ¢Õ*z…?Ç©¥¡^ña”N6õÒbĆ;'bãÖsÍêóeÕ$Ìç›~¨»²žá?¡àÓŽõdˆ”š;mìÑÔ~ƒ)¯°áìõÃù{>`è–ÍüxëU|*emêD—ñÿxSË€äeË@ÁGqdzê×Z3Rû-5I°ûFRc p›mµ P¢M�4›3Ô‘ÔÒ ²j$µuVx²c©µC‚GRS„‡ £©½ÜI ß(�¥†c2£µc<׎c%ˆlÅX ü?·FUÌXÔ°XT3c©ÙbÝX«Ržã»ºÎ~Û-6N!¢ü˜~[ù„�&¼?®ùæõ/›o^Ý|3¹Ùås“Êæ�ÏÝ*»ä¶•Ï»ï_å÷ØÜ4s¹Wæ3�Ë-2Ÿ‰]n‘ùýS¹{òã.ã ùq—ñ¸ #ä÷¸¼VÈïqy­@ÇuØBÜPË 6¾Ô[ç«9˜MUŰ9�.ê‹f9üˆÈœÞþ}3TÇ&»°þÅ+ö°$ÀªŒý–a%ËŽ}Û"´z{É*%Èv¼qÊý†Ÿ#þéu·LÍ¡òhÁr“��Wã›jývA5�Ço›lé ‘HI„äÂi}T®kPÏ—g=U$ùcò\>�3ü=š�öºwšÊx>7p¢ÛOÕ†E¹lVU3C±ÞÕËáwêáG¤bp¹§oëåùj ¹Ÿ¾n»‹S%Õõl;§ â~U°©iˆ”î®q£‰?s1ˆ'HàáñP†F‘¶$î£�Q3õòtšŒè)·W˦îËçö+Wœ"ê"€•„c¤ Äý&uØ–¼ZÑIåJi|8UJûï?‰öûO¥Ad:=¦f†¯à¯É¸f®Ž6m8áø°p‡š0ï9,œÕ‚;^kÎ\¶§…¿hx=­aö«zºóºKƒÉÙº�õ®×¥%‘vÈŽgÌsñ‘>:aÈ%FÍ!}¼[Ø‚÷q“ß¿bgnƒ? ¯›ÿÊØ×¨v7ý½Çú^�÷¢ùsµé&ìŒvLÅ Œ´ÆúãµÅ ªp©-Žm‡Ä‹[ÁT΀H9Á¹ñ^U: Ð¼®¶ë÷«úõ°çBúHZ_ƒjøM„t2H6ýž©;«BWÖ~í25!nF�¾yø]æ5’A9¡�Vƒáï+p¸fžvõú’�àƒ3ñxmHl¿w¹;vî~îAÅg§³/ ðK7³ÉŸµí¼«Ö‹Ì…ãíâñ{‚+BËnƒ$Ú=Sÿ3.ÒIµWWþ0D¦? ùí&ÏÄÛ¿"ùíϯ+-È…qÄÜáá¿[GÌÎÒ�}32¿ G2h‘ŸD?–ªu>Ž$–1µ%Gó×mW[;ÿºu“Ô endstream endobj 1595 0 obj << /Length 1329 /Filter /FlateDecode >> stream xÚ½˜mOãFÇßó)ò*r¤f½ÏH:ÚãJEUÄE:�¸Jƒ¬F&JBS¾}gwÖfÎÀµo¼;“Ùµ=óóßãÐÁÍ€>Oò®Ž8Íõ`úmÀ¨!L±�Q–XÍÓëÁe¦ôèëô·üDê$RC¨†mBÈñéñÙé.Þ�ÿúÙÐxŠzÜ9Ï8.s>�›\*úµµxp9f”ÒìSùW¹�¹ÍŠër6 ˲ù]5ÇfUþy¿¹[­ ^£�éÝA„’õEžV›bU›ÑXRž]ŒËŠÅìÍŸogñ‡/”kœáy}˜?À©Bÿô¶ÀÉÉȘlÕDDïûjþ0_ܵVâÕµrÀ•$Ô4WGü}ñŒSNã½HÑʘf`ØÁ˜Á¨.º_-:vf†pÞl|ˆ&ÝMC^\p»Ù,×�^¡þ˜'Ç¢ y'ÁØú|` ÀBßÝê& ß&ó²º.þi"m¶¼]ë(7åfQ„Ù$‹ÆU8^`uK; ñÌ‹ëò:îw, ¢¬h'ÈYÎ�ä‚u¤IQ"\“¦/TÑ¿Ëu¹)`S!D€…‘ÑœñÜ×Bi:6ŠX@lÌ�½"ǬÇRòžK¢tS¯³wg°XAJ=]³ÕºX¡Ñ…YD—·Ð?¢ @W7èò,zû¢ �­•:AWJ±]¸znUü ²â9dáé°Dê�úFvU^?ä­ÁóëG‚CBpâ '‹¶-+rœÄ’ýä‡È²ŸNpÀùÙU\«äçÃxVä7Yå$³Ž2e;Dã}ëïÓJÝ^Z¹‚îÀÊûÁÊ%í +%J5¥<;ó�¨¨Q±,äÁ»�V?ë¢Õû­~òTh¹é/´”êDB+—l?­”p�Yú6�U„ÖØC)Ð]xt\›b nÒy  Œ„×èH+ü†‹¶É<’ 6FNa< ¾H)Ø“`ûÊ€q…¡‘Oðñ,H'Ø“`ƒ� § ëbSHxÂ…îTRIµgï=ƵîýåÀо]ïß%˜��ó@jU«E±^û;Ù9¤§¬nШ„nn½?6¢QYž4âE ‚T­A|§AP¶­¯U[h¬Ømœ×XAÃûÝÅ£Ç\$ ®�„¾m²4âÚD\Á: VÝ 8 x?Γš€÷ ×Ô…�ˆ!ž/¶.i 4Ý�έ—‘ömm{Y[ {*-罕–=¾Xºõì~uïÓ£T­®Jw¶±Þ?1 ó�ï¨|¯À¶ž_M¾TSÊÞ*°’8k:jÄS�uñ艵�9Ó",ô¡ÀÖáÛ�óZ`ëHX牅˜Z`±pL Ö÷F:!cDmUj�¬&o‘¶¬2Þ’U·+«Lô’UVã©öâ¹)ïªÙê¡ BK e¼)Äl¹,HOM J¶¨ÑCîTGêþ¥œÇø.6¬&�µM›x!my^TdÛÎ $Ö "ÕÎë€Ê·y€‡2G”IÌÕ0 1QNQM;[?.üžæ�ŠÄá“Þ1³#IúÇÔü¿®8#ÌÉ—Tœÿ·ð-¤lߊ×õÖ QŒq×ùuʼnsú­õ–ð¹¤v{'óªz3bhÓ·Jëuhº&²oí¿B˜_> stream xÚ�tT”íÖ6Ý -¨ÀÒ9twJw ÃÌCÌÀ0äÒ�H+]‚t#]Š‚€€ ¤„´ €"õ�¾¾çœ÷üÿZß·f­gž½÷µë¾¯ëá`54P† ¡8J((,PÕS· „…E……EH88La(wèß~s(Ò†€ËüB ¡0>5 ÔCÀ÷|Ü@QPB()#, –þˆ@ÊÔ@¾0@Op‡z“p¨"<�0g¦Ï߯n0(--Éÿ; ìEÂÀ 8@„r�z`:‚AîEü£·œ å)#$äçç'òðD �xø~0” Àê EúB!€_+ôAÐ?« ’pL]`ÞLN(? À8Üa`(Ü“â‡@‘Lw€‰¶.ÀÀ ÿ ¬û€ðçp@Aà¿ÊýÉþUÿ� ƒž x î p‚¹Cº‚(?‡ü‚ܽ˜|�/ærÄ~�h(@˜ ÿìç FÂØ‰Äí70Íÿ¶« õ‡‚Iæg`ÙH×ÆÈ®õÊ·ý6ÆåßqlXdó ç‘Ý>?)3xêrב§Ê¯(ÖÔ¹O”>°\¢wÛ› c:ÒŒ:σ.ìOnt’ÌMп-ÝUnb"¾#`ª´tédæ†ÛŽÝ{�£ÐËGŠÂ°˜æ‡ß Mÿ¦¡Ê�o¢g7Œ6ë$tH/*§’ÌmÃʧ9ŠófØPLD¼Ô‡þ7¦ONßQ¼½f¹÷ˆ�$x/I´ m½"’|6¸Xm*âÝÇx—Ñš� ÷„úÍ$'Ze+óÞÍ÷芲¥’iÖd'ÏkME›SÓ0”›O.—8½™!øuÌF°Vå•JÆž B8}Œü�9‚èPS6¬ä«_Áîí“jU=ˆáÜhN[+S4»o5¹Ç+@�º¸d‡fÈr_¸¨ÍPYÔÉDÑ¡ú‡3çlBµÙÅ-ŸZ�…rÙÐÊòtó>ÓúÈŒaž¿l ‡2�J©t›ð:¹€ªH“0£våÁþFˆÓÏ{b‘»Rsghßt ½ãâ¡?>µ±å„TÆOÝñ{â[ýid:æŠز{õbW ‹Ì㞥Û-b7¼dÚ™í!q �Z~RìðÍk „§ûÚ}îý/²tS~á«r—– ”Äôž¬ž" >Òû�¼_UJÃg=ãÒ¦›ÜOÿÙK]ÐÖ0ijäà£]B¥œ1IèŒØã <�gn`Ç&åÜâ‹æ ž1~C+Âù¬œéå¾Xf_Ó¦pilÝÜÐ8…jŸ Äš4á1åÏ“E²À×?¿ B—�Yb�|“Ä„kÏví| b�¬©ßÆ�ê³kÔraÛJ/ø½:Œ2¬Åõ|øí ¿Ãa§V³‡Ç½.òZŸ;Щ¬øk]¢r×è#ÅG¡g£×ÁY¡ï$õ?ò  NxJïW©ksß_HÕ³¹± ˜ê~¾kêTaÓ³Û{ûuàâ6ºp�I©:+RÛkõ üIu¨t¿l¨š¹çÌiãòæ™ïkx�é�³©Šóü}§ŽHÚR‹jÒ(ÊQ�EçÏM0ŸÃ­¹4¨ÂíÓ3ýö¨”÷?¨«Ÿ²|÷ªÎ™¾ž-æ{Ø%ü2.Tnõ{¹]ëßüÚYBëïe…¯ÈrêXÎå»-Ì]¬np_¡kXEB?.tmqíê#%˜^5:ñÂ�ÇüMsH‘ PØÚŽÉô„ð�Mm»×y&H»B�˜Æâ“úV¶ª°`•׎sË2—¯öíÄN}ÍéTTO\O¿ŒÓÍ*K*½þ…=Š¢pnêòAˆâ‹­cp_¥ƒøÑº/-[.ß.ë¦óZ2.“;%ƒ,‡ÛÖx;9{xâß=6âðçõž à)§JÌFë£C£^rtdØ%1¨�7:Èn*hïv5m– o8·²æ©šÀ¶æ³N#Î7ãÝ|d¢…™Lf‡‹ÅïmAøôý²ø{\i+qNUJ«9�}ç>UÇ_Y_Ö¹’ê«4ÚE”Ñ <‡�Xˆž‹£c_Þe⑽½ýÞê®*Ù¡�´¼îS¬– /©W ʺØÉü2ý*ܯKÙÇç¥ÚtHÍN²ãz÷Õ!du�vVC4Ÿf�¢û¡çI]ûÆMSô�Ï–ÿ&¹§µ�T[ï`q{�ØÝ^ýÖÞÜEßóñš8ì·ÏÞO¿kèh¥Þ©y"og%IÍ››<‹Œ0º°Z-¼‹D�Tž:c¯@ô¤™ûÞÁoñv6š{î$ãä®Ä;.‹FVm«tøãÝ€R’�*�] \ñDÑE�Ù~ÏS ûQdÒçQ �º(¡--ïÞi½WLÚ¦n&Î0Ë ¡õÜ~£~çÆÖúS:Áj·Ðí´Ú°˜³ÜìvçÍõ�*;gÖ»¶½8*tÌUQâ.áyÈÖèŒê%…‘t�û4C~•ñ8ó°–6@±,ቛâЉ�ƒ}ý3k¡”!3¶íöø±_v.OØ�iéBª›ßr ‘&¡ÓŒ–IŠÁщ|kùº¯¬*î½½ <Ý¢`ìr» Ío]L@=ªöù5„ ëÙLñÓLlZ’·\Ér̓ÃO3EH6ÝI šÝ¹5¬¤Æ4©~.7ì‹Õ ‘CM(ˆ°í*äSi•Ðo^•*³` šÄ’¿rRHDô�ê– Id -~îM¢1Ъ…*¯–Æà��³Sʸl�4K’–õI´Ü¸cµÞ7qߨ— Ù¼­ˆß|SÿǬù”öä| °å©ÿý¨T“ëGÖ+šÆ̦΢{Zýb«yï¹&¡:Æä• any|mUKŒ«K”T®A«í’ ˆ•N-}C/긪{ÎbS¡ûÛ+%è3¶ÄÏ8úDG„‹÷¾|˜Ü>ú†�{¼2Á¢‰°9  ñmx$¨�gÒÅ—2"MIç:nÖ¬ á‹mIsòIïz]ö"Äè¨Á‰yÐ[óHoÜq‚gÇØJdõ…Bm€$NïyÄ8c§Ù�Œ#¼"èþîÜÅ×v,©h%^9^Å–õMÖ“‡)‚{v†.É7õg'ª&�4o¼ ~ÙDZÑ84Öë%7�|J  Þé'9¶·|57¾ÞÙ³‹ôáR^öô�Òð½¾å`E¨à °øj©Ù%ùû½Çš2•¼÷ˆ¾ŠJž»AsMž~rô3×´ýGñ«ý/ö1Q®÷6'¹là¥ð:ëƒõ«iE³äôÊÐò”Ñ@Y $hµ’¯<8EÈžÒÛçxc^9ãjr2Ë€–ºªU]ÇnAÑ®£ëÐHðú>Ç»ª÷q²xµ5ý/pÉovo€ö[³�¢ È?Z�™It”Üsz?ì þ>�’‚õµòÂ,ñ)ÎÌÓ1ž!ƒ¶T=B=È‹1ÊöÍÔЫY²] ØI³�åy\›7¨žA˜íO¹j·ºeäŠ|¼ÚšêžŒ«¢#¾Y •7¹Xoõ9 �à’0¤¸v™ÏÏdýÉ&¡µÂûœe�HÙýñ'¸”úd!ØëF�8~AV¦mëÏLVú‡—OïšßÅåÖ-o%Š‹Î»úÆ»ÄOݙٖÞnK¯�ß̺-9Kc}¢juJ€½‘Ôô ý�AÿJ¥ ?k[ê¥m”ê]Þ.6šaØbI[ÑÇ=ì|¥i™l ÆÆT2ì¯,u9z­òéŠS^©ÅAªjøm–.ªkkc4ŠMw KÃb�_[‚Ã'z»eJÒ#1¶èƒÈšÃë._é.=ᢳ mYs™ÑPgÄO�kÏ¡é²�ÓüR »Y­§»ío5 ²ÓúŒJÕ-º&ÔÔ'ŽóÙM Ô€”ÆÂ‘‹ñÕ 2çwƒù"�¼Û5é¡ù9§ø–jÍ{smíÔ+|½ ƒuÝ�¥Éµ¥ÓW°�¤¸xÿŒ1n©¸@àê$bð§”!±`Þ­CÇl¹õ:D÷aâQƒÒýªAßí˜î}^ǹ)Vä‰rŠ|¤šžý2&=,aŒäEÍ­iMèV܆€/Œý+-ñ²+ˆN�%Úñ«zƒðQMΡ™b�-`ÕѪô]÷nÌwíˆR�ѬAêƯ|s4ái"^Ö2x®k O·Qz Ýõ:•²ÃRuÃO•sɼ÷8½.l^Éæ®øFX­¨[X*Ö]øÉ·.ÚAùDuvÞA ss²îBíC#©]†Çk—¸ Ó+¡0²1GâªRØyèÆ“ÑžIAC‡F á±I.‘oÑ›³ Xã¾ç~î‚vÐ÷Çá¡ûLg‹LC¬µVYY�9³l¯/#4–݌ǷΌoð×q>´Ò:¹Ã\Åz5ì£ñv¯rmûÛ�ÆP–±!Rí¤·*p”9“Ñ*Þ}‚Ûø K1ƒh­¼¥‘Ê®™ƒòš·ý ‚³gž)=­×اo…Ò^ d‹0Á쀪Gªý{ƒê ¾#Áã-àÐG‰m¯Ì©ÇwN‰é·š%ƒ-PUWåI’ǧóAfjñK�ÞN…ÀB¼«ŽZrâ¤@vk!m2nwób:RºøP1¶áô }|šƒX6_5HzfSËVWÕ÷³öV²[ôA„ Ï^<ÂŽá.…>¼@uÖ#ˆK—ë³.�WÖn÷ç¥c0UþÂ-q£Îy|¬› -®èÊu¡]v¥É�Å*uô¹=Tù6p¥ðCûã˜æ„‚X”è»ûkR,KðµÀ�b?˜Ñ�šbÕPâqW¨”Ëõ[1¨GþËçgEës�#C抂&F{G‡­,14X›éõà'rÎÑ;÷f>Õ˜3 <œœ²sùþauµìm(úáP~yC¢dIô!¶ÀFe7ù�&áî¹Ñ˜%I±.Ý+½/Y+Œ@^Þ05ÍñZ”–SœÃÞÏ1ø½ä=ú‘U”:ðz]ööκ7wM»¡Ê|Àa€âˆ¿÷°s�x�Ágë”bIPæâè83öcDù5'tmÛٻN½txCô&ƒ÷ñ•áNŽo:o™›‘ø)–Ú¹Äf’bµÿ¦è ú#GÛD�ú·Š˜ùu_áµë𻊺öòtÃ’f}›'§¤_&žÁ�C© ß2±[Nø–å(K-õJAÓžçéî¡4Å /òüøóº²;wTE%^MhÈÌ÷àŠ]ÊøÐ¨˜WÝ1ØÈ) |gí'uðìt6õEj.H^¥/Ê“;nîxOO”v—fZ)U%µã Ç£¥/T$îŽfM—˱Æ'ï·®­ŒÈ§Ë®D0˜„€óÆ ”×-—kÎ5 úŽÆ²ƒÍñÊ;ä©°Ü|&ªFéábòôìA.—!gKb_� ìåë¦6Þ3Úì\*"óÖƒ׿•Ïv¬ºÔ�ª 2%�ƒŠÕ GÙe.¯‡š°Šê$éÓ¬,)*¶ ¥E*3ðôfåGßä†|¥uMs¦l·ö&ñïÕ¸*Æ!R/žÞã ±,ˆXåN˜ñNï4ѼËáŽÝE5(é0ê%W@üŲüîK!•R7F"|Þwàˆ~ªOÖÍ:²&6m¥8œb–¢®—ìe_lãyøû =ü5Ù­™M�Ö5‰­Óà!�t‚ÛNŸvÛf·ÞšKvųìIsrß’[à{œ'ŸvPP/S@4ÁèÞ”î·ù¤ß’C¦ÏéþÔ–TÁô‘c¡žØù®mÍNR-îsÕ·ÿDQ3» endstream endobj 1637 0 obj << /Length1 1416 /Length2 5988 /Length3 0 /Length 6955 /Filter /FlateDecode >> stream xÚ�wT“ÛÒ6Ò¤¨©8ô$4é½Wé R’ ”$$‘‚ô¦ôÞ”*Ò;ˆ€R©*)RT�Þù‚zî½çþÿZß·²V²÷Ì3³gö<Ï»ÞpÞ¾g( `‹‚ÂUQHœX$ PÒÑу �° $DÁÉi„À9Ãÿ¶SpšÀ1X )ù% ‚ÃÛ”!8t€…`1Ið]I Iü Da$Ê7„-@G ‰B±œJ(´'aï€ÃŸó÷À ã€%$îòÿ (¸À1 Ð�àà.øag€! †€ã<ÿ‘‚[Ú‡CK�îî c/ËÃpGàp,ã·\´ Ð…¸Àÿ´&HÁ 0r@`; Qv8wÀœ08‹yˆ´…cøÓ†Ú=4ù¬ýÀøs9° ø_éþD_$B C`0” ‚ôD ívg8@OU[ç�ã@�¶@ˆ3…�‡¸AÎ(ð«t@UAÁwø§?, ƒ@ã°‚X„óE�À‹4økVAÚ*¡\\àH–â¢>eÃß»'ðÏp��(w¤÷ß;;ÒÖî¢ Û‡h 1áú®¡üƒ7QüÛfÇDAâw…ÅEpWÜæ¼8ÀÈ ÿå_˜ñ=øz£Qh€¾ ¸/ÂŽÿ¡ðÆBÜàæ!Ü×û?ÿÜQ€Á[ €ÂíHŠgÇ›áv¿÷øùc ž~`èâó¯•%ža¶(¤³ç¿á¿F 43×ÖQ1ãûÓò¿œŠŠ(€·€°@@HƒDÄwñ ßæ¹Aü©ã?b5�v(ÀE²‹zñõwÍnHÀýG!<€&ÓEá© pÿ›é@¢ þ üæû¯�ÿÍ/²ü¯LÿïŠT:;ÿòsÿü?~ˆ ÂÙóO݇8¼ tPx1 ÿj ÿ­]¸-â¡Ë{5p¼�öxJ €EA"¿í¬*Ân{�ƒ9ü¦Ío»ñ…àœHø=qñˆÁG�@ÿåë æ„Œ`ñÜüí‚`ñ’ÃýäÅŽÕ?ëPAÂP¶ê@0ˆ'~øø�(ÀŒ—©-Üã»@A$ ‡à{öØ¡0ƒ•ñv�\˜[Ä@4~^(Û_¦œ{ˆÁàËùE|)ï ÷€Ã(>�£`RAŽUAÍ ÌîKÒ$)fByVd¸N•aëù8ÃÌŒ ­bÕÏ`U+ÇV]E׃¬™�ÛÞ‹Õl5ž"{lª+ölИñó½K£ñÞû,ìãT ÏL“oIb: î±FR·‘ËÙÚwrRùüUÕþ)Þ�‹®Hõ®fp³nK[EQ†6=‹„É·/¸Fh�Ñ’èÃ_Ù_\ž.D=OÖMc×’n9¤ˆs/§žëî홢é`} éöxi“#G£"Õâ,r¹Üdêùµ“ìB·õ4Zo¨ÚuùuÛΗ³ƒgÍ×.ðy‡sæÔwð¨©�…xŠC³‘lÁ”DP“¿�°ðU7DJ™ñ5`í×îËùæ{Þ^"gÏ·[Z¹&\Ë#‘Ñ´Q^sÕS>iyÏŽ6ÀÀw5°ÔÊ(%/w—ù=Ÿr�yKínT¾o©W³‹è÷¹�4O¢P’¶¬k­AÑ ‚Má쥓 a»·Jcl Šts^íпïB5S¸D­{�®¦t)Ð5^$Å÷nH™ ·Ú‹u?ï¤$”ýÌþS¶)YÏ_SÄEÔj \7ÞÈK×ãÝÂ÷œ¾i‘V‚f>ñpiP'aQOžÊÁWàú$÷“«�éô{WãžF5+Ìí4fGòŒT2�~¿Ò\$@&(ñâkÆúް=3Óv†Ì56‹k¶sè9ÊúƦ"‹IÞìQ×ã¾Ëu[¦ìlß ë2ÓßÎA¶VQ÷U±z±^³·@ŽÇ­):™�E¼LV·W�Ûs­¬ÖÑpùòj^B/Ÿ¤ØDS„`½D?Ï“îÔtÅÃ'³XáÁ§O�rø­¢ qi›^}�dʾ`kEÒ…µë$´SÇ]Gà ¾¡ š‘KTßLk«„zѨ å㌗áD-²½vÕ«�,Ø,�TöÞ8¦ôDøùŽ)é×i)ÔÓÎâ‹^fSqèª�ìôLõÛ&ûS¶u·ëü¥lEžçåS}•ä_8r£»ÓzÊ;5.Åç5xã²YT9­×U'ÀÍ<ý‘Y÷NYˆkTl ­qÔ8 EÍ,ÿ0¶+¶f×X'½é¨uòd„éÁyo†ÓzÇ…Ã’:UbA #0gé¦D»ïÓÔaŠÑà=°÷‡€ëLtÈœð'cYªÞP£×ýÍv¤!_¾ç”z‡k¯s…µµQôšeJ,ôÌíÿ¨�•• ¸>±Xc”ó©õÃÀ=md^’"ôV:¼qƒ¸EÞ´ÂÊò†�Þóø{Ã5ß œPÜò„ÙóÀ&ö»þ[®¸ 9»#ß6Ú塞ŠqbCƒ³DÏ›´ÒØ!ÇD=«æùÀ&jζ+O�3›‚ç¼eG£�9%å/”\P³K ÎßgèÉ›¶_½èEd#h#.[¹+lÊÃõwl¯u­A¶æCVsò­µrdè+a)–ªÅÎFVøññ­î�Ý+DCì¥Z°Õek ŠÙ“w'F¨!™<^–ë ïúŽ<óü?ßA_'åH5`�øWùgŠê Ý–dȬgî‘6WòœÃL4+ˆÄ¸­1:ìá¸`[ÿÀébÝõ!K2¿'²}.³Áú“úÊÍs²ÜÁŠ÷�ºÖçJŸ;ŸÌÃݯ×2é¬ç óóÖvD¸‰ú çKܬÈfƒ4×Ð\ƒ›¯¦ùƉ½òÕ ý°6© xuy²X(Öæ×ÚrRŒ ë:sþ!ë7c¶&ýEÝ<º¢‹ØÃ�öõu_ÿEUŽtöt(ÝmîZ/'e}(NªºûÚªc^CG¦å¢.ãžHé©ÈaêÎlõÔ¹£oº�ýp¨~qe9wÁW©¾€ ý«ÆlAJhèÊ{y©ƒv% ø*—ªw$Åó“àØÃ¹†h AÄ÷”æ&ë�²àË4Ãvzd¦3в‹‚¦÷c£�€qe\墻WÞ ÖŽ}"¨˜Õ67¹_ ý&b–eÑzØïH/«2êTå_uÛ¬³M;¦¥îàYw¬qrÅ^ú@'ÔùÈH�¥9|æ™Þ7îê:?Á+OeD ‚…Ù|,Ùå–©‹ËÌ^�Óºe\‰L jcÆ`ùÚA ¡T÷�Æ¥µAU¯Ž‚ãO@-B"ç�vb®s9¬äžU�ÕÕ�Õ¼œG“ÐD§øòóJO”LJ:DzɹU†¯SˆxÖò oÊ5e™¬<Ö¬c¼uHÊÇÖÃì α ÷šê·K©ô§Mþh§Á;maÇ(C¨CK/<ÂÃÙüóEu¼kqY�7Ië�û·£oe­k¶S¨ó°`ô÷bjYõE÷r1@µ}�²¢N´ßöeôÝŸë�Ý¥= »Ã,™ø‘ÿ¹±5½ö=¹ØÚîÞ›ºJeˆ:{cˆ�±«²‰×hº÷Ö®,ýæýèxÇ´=SyM|%’ckÄg+ëv½jÄloDÃÓê„v¼”õ# [ý$M Žº¦¤vóîO ô.®+×÷s5-âüìÆ©‰$ø“^ŠU¹i >ÊñsP¾ZÁbÈO"~*HF¹=®0Ú9ëéÌýxAûRã îUцq í�o+ämŒ/]ä‡yé�cŒè$b&U óMõì&’ÆßDQU¨¯¢—®AÔIo±“=ðÊ;}K ¹¤âhBâ� ß÷U&šhŸ‹zšjùxùo/$oúLÔá.ç9*Ú®›È”y}žh3×ôk^¶¨j©=¶9uË9C#1�ÆWtLL‹Ó÷¿^7À­¤¦¬V”V yeŽýŒ Ê'¥�6Ã�k�;¦m^AÓ–#²›4Öé‡X­y2ï§n�ZéU®â®æÃD¿½Wš—�|Œê¥îöÐV~ߪ�Q÷è´S·€õƒ@;ò{†]—Dz�2wÒã~dNÕÄxÆ$b*ºxpèEöjûçæèÀ/G‚˜² ¢[Û*/ˆJNë¿í^[ , ðz�´ôSFBµ67Ì‘¯XL©MŒˆù*Ù H¿ ŸùÈ坯œ5<~(²ÄÚPÄí$ú¤5ÅsWÒ‹dÏr¯n*V� Ð85¿jÌêJrÊŸß9~¥u«Ì%rZ~Æ:Oá¯å�m÷›FÚhÉø9 àä.£ÊD¥ÑmÑh¿¾Í²ÍpJR³©x…Sq¯Ï»_3ˆm[t¥ØSýH‡âŠZгÍ{É7•Ô ®ùÇë~È®xÒ1ë#кüCŒºMav´ÛÆf±ÅQHIx“à~õSÿó3ãNÞ#1柶ë—çã'b¥{×–îEq ‰KýÛºVÝÛqÁ|ˆ¢DYžfñhVýÉ(àµq~gß&vż)Ó1Ø÷9Ń·8u¥µË½‡·R�ÊóK€W½äÞxÇ•T¢égåÌ-kƒ§>o½“a¡Î '¹aÜ…ô�”ÈRø~¼gi`ù|¿á ÍàúI )¤ªáP)ŽSU�v!à™½9“'LR‚›5XB¤;s€8=œnŸ*¥JúK¬~µxåëä§=$ÿõ{ÉÛ«}j2V/>­ñ8•§7"ÈÅ¡#±òX«›j炱!dTë zû!i÷#8–/¨ÒM5¸ÊÏÙd2˜¬8ÂÚ%Ôäæ}zàâs£*ù–‘…ö/Ïû¿QY …nDò+•¹n·s…œš]_×ÈMïM!Ƽ~0Y÷öñ»ó/Çp”�[Ü|Æö&ZîÛàhYy†Ý˜ÒÀ ÒÊã�¦${è�Ñm'Òç�= 9lÔÜŸ-u?ÒP‘SÓíMÅX”�é%V:O~ð”aÙ)²òU‰ `ôâ8{Üû>ês2Œ@?}­°IèPˆÁR¿³!Ñ|æÙÜØ¯¦â0ʵ"w#0�{}®ŒÙ&1sA^"òv ê�¼v<Ä(ÙÒGù�Ê«µü/&Þ7ûÆR!*CLKÁñ¨WFÐ/Ó­¢‹åõ­'¯…Zd_~ÓòpnÏŸ{g�+d-M_�ùà3dú‘3 ”Û/³¬+_Þ” ¸!d5‡©Î—ÌæfU—-�¯LÜ럮•*ßÿÔýñY�¯‹iƪÀÏZ�y…/¬ ê“õù´Û Og�m&g-¨†µQéÅ©¼}™ìü#rÆá�š ôÒä–x^Z=÷ÌV�•±ðõr×´šÑÝ�…m%ö—çn­‘ »Žg4Ñr)ÙGS} ¬#õË¢‚EXÉËnf)u¡²à×Urέ5U0:ÚÅ3‚{ùû;·ád¹“k8ð“O@&`w,T:$1~êÔé¸ä=Kº:”€Jȹôô}Ñ·|q5Nšpô@ó»õ®z�Ÿ’#‰GÈÓ·0CÿufÑÛÅqYM Äˆ/òÁ·“êü•ÉGîˆK]yôl«æ|KÌšmµV!c¯´ù<¶&`Zîpeý£×e©hkËøfŒþ z|y8wBÙ¾½"¦ô⮚ý“Æ”ÃwÌ’T‡Š2»—v¯3p¤óÖ‹Åîõ8`¨vo’³ÁK¤Vú®ù›v Ùúí«��TRæÈ òfäÁ‹uùÑˆŠ“b×+±ý å/J©ÇÑ_íót/¹{ZÎŽ?Ș ¹ºü8“Ëü”¯Uw´'å½»kÔ(ò˜:¤-ûíÓBÝç£Ôs¤-Nës¶so4Tdº Ãò-ã,1£¸6ß«M?4Ošf,»s5?”8õl­Ó‚¼"™b,öðÔ³ÑØ ÀiŽ(ÿFRÛÎüò}@kH�O³Ù½Ñ“×�Ü«^3Ck.Þn¯Ÿ´ëâx³û¦Á¨ ”S+û™â(­¥pN£3é™k"¬œ……u$ªE‡©ŒW¦¿W1]"RÐËæ. Á¾³«ääž:F(Oª³ q‘¤ #(µ6ü*¡ ;·eªlë¯&$“q¯+KKU;VtôÖÍ~ÖX:ÂÒ±>¯›=V¨±Q‹¯kØë=iúˆ¡ ™^¸;¦ôÄJI1g>r¥‚Nf3d“´E—áìZÊ-d9Ýšª gÎÔZIU³~“+Fƒ“öRZE§l]£»AcsÏÏðœMFkú\NåpY‹9=�«šo;<ó€CˆœÃâcÐc-ÜB°þÅÜøY‰k I-/¡Mðb_�²4ÞX¼«»ËÆ^a9¼ª’¿çìT•Gêóm÷KÄF!³âÂ…<CÊéƒ>×ùÞzµ¢µúIËÄ(ðÎKq¦ù¨¬D´Šd‹{ofÖ½ Œ–2>»½¤]Fcw5¼P³Ûfó]‚��ÇÆLÜj Q‡¹è�à„CѲ&euƵìÏ BX­ß›FzÍü+ ! ù’®Äô]=žZÓ5gªRÒæçÙ‚OüÚ}¶^ÖÏ’�Ò\ß1bZO ØÊ7: kÍݹ5Ç‹Î%œÎ^; 4ˆök¼ò=%]­uÓ[Ër*w~ ‡÷Ù׿�îLgïÄÉæùhRòœï¨? f&¥óåOv3–S–æñïKÚ°ÌK?Íû‘øj3®äË̪ڇnš7ñ$õiF+:{óž‘iâô"@VŸŠúÖ;Ù26bL]$„$±¸«×Ä�zo!ž¯�JC3²/Q,d3„ñÝ’’¹šN¬6ùè‘—8õ]C š+¤Š#Üiwñ½üYmAJ$DÇ?ìmÒMº;½UpŸã”hù—[©”WpÚ¡âC• äÞ0ŸÁ‘µ½[<³®–¨UqäIzÙ„¹2UùM�$‘W?X/wÊœÇSŸò%—ëI,…(øö3<{@9ïiEÅ/ãaõæ¥1É«§m³ÏÄôÈB'Äå‚傾.)“¼Š&ˆe±x²ã©œð¹õ²‹i�õ�8h$ä<ÉÇ�‡FÃfŽª´�ø@º°¯53�ÐìÂ= ò\Ëžò¯¿Óy $% &lKB÷žâ†˜(=(·wùúéyïÖm¨ZèKï0€Ý°zþ��F—ª'�ÆD“mͰGIêO*m�LÑw—\= †¥»oÍ{PÊìd¸…Ÿ¨ ÒùV˜7þð‚¥Žî” ð º˜ŒÏr—h§%-˜ÚG¾¸t†�VRµr�U�|U,6 ?›-4ädáÒiðŒÎ5WÊK ‡.4Dó‘+¸ßÐ洯 `)�Í ÏU[du6Å„J“ŠœèôZ3Y…¥úý•âVÎz,§ïIá8ü!+o>áÑÊ� ˜65qÐN�1Mö/¿ÂŒsfí#¦�»£ù¥j|÷Ûú²£*g#Z×dÈx¹úŒî¾÷{s'ex®«Õ9ñ­8Û�:¶ªÎ× šÇõorXžs;FŸC—xée|pQÌü°áxm'ȹ~£¢æ=VÚ¤É� ¤<œ°ÿŒ�—í©*càV²@Qûdõ!Í#/”h`OþÔËjÛ"j•Gñǽ\ít�?‘væ<Òn”ÕL Œ-LÚ(]!x|×n”–G_( ͧD£qUõ3Ã8#S=›–áMA=�8�¯4?Ÿ˜50æ”ôÙ‹k©ÑYÿUßGíx˜nö÷!$»IM›ù¶ˆ“µª›[OÆ�ˆÝ¿¾Àº†•´8<ÃL¬miÇsIššGt4§Æì‹ójµme£ÂC µ.§_•?{ðÃPWRüY.ý_öÄ«³dÆr3<‹£PΡã TT½ÊŠl„ØÕ…Žn?žr½8Š—/ºÍÜEßÙûæ}œR‹¸áŒ@†Í—-j” sñ·ºwßd±€tvQwÐCF«œ[K— r¸eóyŽÈ‡‹¾õ‰†94¯l4ùhŠ>|c£/wü1�ÍÏÉúúÝu«Ü'—÷EâE«­ g‚ÓéÌ–£ÂXÉDÕxmäÞ¨ê]�k÷?ë·_x²†n³›˜%D�´ˆv�©lKòc¿ku¬ÓZhSx6¸’×(¶Õq´ËÿÅÖ+¶zÛt}Žb æHåF]—Fã†Øÿ±†ÑŽÐè³ÏôÏ¡?â/©'¡�Ëç&0‡,Kg®ÉÙgªíÓ’�o©õòV9îôD�ÝV–,"ˆ¤!æä!¼LaXH×ñˆ?íéf·ÖN>’cykKË{$:Ú²¼ëÁý­IMYvO¼™—E�ØM”5 Û•Þ}Rm©­Úà=¨Óúžø‘¯^^.(0�*yºr¦ÄXÆHEœô¬Ëß¹—z£kè�£ß ·vT’r~ê„}È,Ù™gÀáZÎ „-ìÊWe]$f…w£¯Ì+§Ìá ðó�EWA'WhÛùò艫`Ydïkëô‡üЛùëÝÎ &»F™ÅWö8µ¡^L¤PC¯‘i”d̘ák¤_ÐM„»Ï=A�±ãÈJL�Òt®÷ˆÚ�ÃU¡n—u½½×9',¢²Rø²iQò,“EJp•ÈO\þ7®.®eˆ»tÙ!!r:ó‘ƒ*òVv’(™äÓC¬™å8°�7éxÐ,¾ïzwA±cxØ#þ»/r-ájT?ô{ËÖ�ïéR†J¨ãßCvœç•¬iŸ¬:²¼{µï€²˜|ÏÄ�tòyª“0×2xriàHÁúèÉL´Ã»1K­¤x ¨-¤+zË\-„—þý—£˜¦q6ØLA°éýoŠ-‡èpÆ�Ôk²¹ nTªáï"Pw.C<+С\²ïv§7ƒ›æBM™�WÌ‘²/¾ÞîÃMhßè(Ϊ’]§$Ü}Ìö¥†é³ÒKHÝ­ Ì÷sdã<ôc¾{‹SÔ¦+;Ž¥}�Zrm|Œ:äè�M‡Ñ´/<[FoBöJþ1Íÿái„· endstream endobj 1639 0 obj << /Length1 1397 /Length2 5930 /Length3 0 /Length 6893 /Filter /FlateDecode >> stream xÚ�tTSíÒ.‚ˆ`¡)EŠB¯ ºôÞ{“b!ºô*Ez�Þ¤ H•^¥K�.òÇrÎù¿sïZ÷®¬µ³gæ™ygÞyžÍ΢gÈ/o‡±E¨`Ð8~ˆXPÔÖVÀ`a0XˆŒ�݉C!þºÉØMîX$-ù¿ŠîïS‚áð8m Ðð@a"* “ƒ!0Xâ_@Œ»$ óDÚÚ€�À’±+b\}Ü‘Ž8ü1ÿz¸àÜDBBŒïw: ï‚pGÂah@†sD¸àO„ÃP€!ŽDà|þQ‚KÚ‡s•ôòò€¹`0î2Ü|€ç °wO„ðk`@æ‚ø3™;`äˆÄþñbìq^0w€w �p‹Ïð@Û!Üüအº ëŠ@ÿkýðï€@þ]îoö¯BHôïdŽqq…¡}�hÀ‰Bº*Z8oCÛýÂPX >æ C¢`¶xÀïÎa€Š¼>Ãøw<,ÜéŠÃ `‘¨_# þ*ƒ¿ee´�"ÆÅ�ÆaÉ~õ§„tGÀñ×î#øg³ÎhŒÚï¯a�DÛÙÿÂÎÃUÐ�tó@¨+ý…à]dÿñ9 p,.&,. Ü„7ÜQðWy#WÄï ä—?�¿Ÿ+ưÇ�ðGÚ#ðd~X˜'À¹{ üýþwàŸØ!á8Àá€D“ý§:Þ�°ÿcã—ïŽôî‚ñ܃à_¿¿Yáée‡A£|þÿ½_AU y# Þ?ÿ;¦ €ñüø…D~!(€@ `@ ÿâÿÏ2z0äß6ÀÿÉUGÛc<þw»ø{úWËžÀõWÜÀ?‹é`ð´E\ÿa¹% †ã�ÿo®ÿNù¿QüW•ÿËÿ»!êw˜ëwüÿÃ\�(Ÿ¿ ãåˆÁ8£ö¸_a²÷pwÇ÷ð›øóÿeÿ:á�€“M�càRaN/Â�ªå¼ø—?Hog™ ñ(²¾ŒëP¶™O2|œ=­Y®2ÕQ±vjÖQp;Êù4±ç·Ts»ÖGä€ÿ¶ÊªÃmÛ„ñóƒ £É~‡Œ¬ãä¯òMÓ˜%KÝ;ô˜b(ZHeí: ÙÉïs¾x7™ìÅq£LEL#¼Q§©¥º,[‹†QÂäë‚îµm—Ñ2ô;gî‚K|èb¬åƒt�LVMé¦c²$¯*й÷=]3”íL­1Áž!Ëߨ"p”ÊR]ŒJ"$U&3×ä–zndRùÙªR+Òjç³Бu)¤¼Þ¦³ü"1sÊ~à˜L¶AGþ¶ óK±#&(ýXÚ*žž;Êéíg'=«bÔôz"²g˜öpŠx®g u¥e°�+tßñiÙn`@¯¼aŒSÆ3¸¿€ibœ:¿�ŠÇ ¾røZ’.í�ÓQ´›Ñ.iìŠßÑ?ÕJßõ¹ÇìÅXv)žœŸÁCÝy…RÞ3·5Î#Î0v¾‘/ªWÆxÙÄ1†ñæbä÷r*æã‹ô’Êœãò\¥‘âÓe~U:щWGIö+™oHÜÆ^¿£–cÇäæg» w{‘Ê<(— 䎘KV¾t›�Ç=Æÿô]ä;?T"£3þxõ6Šs+˜ƒØL|¯�‰€’îû��„Õ/„ßäg¤¿ln¾÷\‘2AXì» Šµ'hz-áàØ–¸|ŒV¡Ç$§Ù@bÏ1Wr—(ß8Ý/Èsõ]ÌËÔÚÎRyh5¶”ÑØèr—ÁüÇAþêñX­Õ»”C`ï Úf×ÑäÞ„:dSã`鬪¼„GºÝ5×ÏSöðª%cƒjsºÕÑÚZ¶Œ@J�ë¿b\ú¹-ÞOÊ÷lúñ¶`U•à‡(ž‹€V%ÆêÒËSV•bÔm/ÿÜ¿dsE”ïá©™ ߠξºv¶S‚ÍO Á2{¥c~i—>òð: j&ý©³ü)*œ©ÅÖNÚ{@ùæÓvÒ�biXÒëS=ɬÚS[¹BçíâÞŒý@mL%+biʽ‹¤£N»¥!™ýMØ‹�âÓIñuldêÊÊú—ëì÷‹‚¾ç ½|4VÎ~~-K—‚µê«—‰× °Æ£Ÿ�-/ÛLW+7Î3ÔmÙï†u’ëQ’®�zôqn-õ2p0/[¾³ðÊõ:s}¨pÆ%ÿ}±&¬ÐÐ{_„ Öþ:改*êŽøÄHjžùvH-À¹+…1¹j>¸•E4tËCý bòkÕ딟q>î9‹{I¡éÑnÌN8}³,°*g3 ËàÙ&õ3NjŒÏ ¥âÿj–Pµ ¢ÒªÅðjÜ¢^;“Y×6 ½za‚|Âmç–s㓞¹m�–:ܦPj8e“ÿ"-¯þõèDªÀäI·éÍ+³'²§×d/³hZ¼Š � p’Óç E|jÀ-˜5¼ ^}%=Cs}òøÍFªó …ßA7–ß‚07ßÅÍ-ܽ]�ÊevÔ�'(Ë�йsÉn±M3ªiÿŒIé>ªl]+Áü¸UÁéСò$¼:«Ôÿ^Õ·�ÅìjG6Ú̶Ìx#µ~*Néw6*f¾’.K‡}‡§Í ø»�é%ëÈîX–),í�Tؾ'!&'Ù˜*Ÿ÷¢Ÿ­}è³—Æ>øˆÅϾ< ˜Ëë–±¿vg˜è�ËÔ ·� § 67:>Us`zµ«ÀÊ^´O½ÕÚб ÊÖ�¿‹�C/v{ïjœ õ«�I¤HqPZž$r‘j_ò�q6䊺pü*Z£pbmì´d»Š aâ­’”}µw­ªK˜ã|‰ÿ›ò[³]Á»�g…ž­Y¾õrš;M±ö õ†³@’ï3¼X•©>p™¦~n•%]óL�E6KŸbÀªûaÐÇÏçŒs*秪•C:?„ÖoG'I„¨'Œ*| b‚Šî‚OŸ~Y|‚r°rFLWùS†·:<½ûåKÀõàùš†5"nÿMÑÐñÍÍQž‚N-@ºÕ°{°‹ñ>÷½ ”ê¼Ùäq÷Ò‹ƒÝÚ\ÿVA¿[VE ã(ºgu¤´C¥”¬4lúžÊÃ#&oç:Ísåz7Û¿ø3ò²K�œS‚wé;?:׆“¾[ho{ ±>«º:A9jWÁhNwŸ34ù8´BúÇwsÊ\e Ý"iy~¶‹/8»gc[)t-iÊŽ›Ô/.…Vß÷ŠŸ¯1ÎiÉÛ+2�{.' �ë_v±8V´ 48D¨§Ð(L·¬ã'C}ýÎ5«•$�÷òKê£}B�½ÓÉ+qÓ³re-$½ ¹ô¬_“lB²iòf=Cß›&™9ªuD?ÕØ\`7‚»0b»î*fªôÑÕG×öpŽ›MÚ}}Æ™f½+C˜x�h0×âa2á ÚÍ–ñq‰y3žÅ1wißûÍ¥Üí˜â„læï—}ò"œ�ëšÎG�½Õ†Å„mb6&Œ½´ç[„$°Ï¦MWÜIwºä 535WÊ.X%a‰Ú%Í|Œw|'÷ ð¥c}^Ý„BÝ©ÉMúȼ!Ýõnƒ›\,ktš7xªgª˜že¼JÁ½ë±þB2y}g“UŠÌÃÐCv‰§ZsJÖtN‹ª×0'O¸Ÿ4}›ìMTS"&,ži{Œjfg×%›Ä|äÉû>ô @¥ëP†_–»Žµ«ôR½„IÊûKŒ#<%q^N×F©{Žz§SéÓb1ÙZË­ìæ„Ú½g­€äµâœÚ„W}W:¿´áßßæÇÞÈYmdÑci@ÅAÀ~*­¸uN³õ¢œÄ†/š„íÊÚDâÃó˸ýñÞ(®¹ú·�-Ê®�fD}ÊZÏy‘;ˆ´‘ `æð)ŒÂö äG{Ò…y¢å¼�ùäï{·,Íæ…M �ô¤MpëŽKˇ·ÑSš}73‰½(�²rjA8S��{»%äY®�Q x'BuOdURÌ[a¦ý[j.¡�×ó_X¢rÆIÅdàOxN•ÊÅÌ÷IíTç]Põ¼.JmI9x½ÕX|ƒõmûãAfÈ~ l|æø/_o¯Ø5ÆK˜½]��ûÚûJ’‡Y{§Ó”æEÕoãœÝ(IýYõÚ©´¡!HÍ+ßSô=Yï{’ojHäåà+±Û�qªWv³ þ� >@ýv›M_âÏQÛ*ÑVbºæ3Ó Âk9M¶ášïnf/9Wœ|ýŠ IEvzw<ß·½2w¯fòì�ù„û°®Ô^àAE ú«#üiïyYzOg!b#ùá/ÌÙRR_Ù®ý¡±$ b·�Ðaôþ8Cµ¬ví®À|‚¤+ýÓ°†šbo2Æhg‹¦ïÏç&ÙÙ ¨mT\5JõîBU�GÎÏmpNwÒÛ%Rò~¾[^zV*)µGÐÑ+«ûƺrã�Bw�«F×yUЕfùÒOëÃözô­‚â|;ºV_FéáÛm'áb¡ßš¾°_'S4¼û`gªM¯´Aºs*$6É!ô”Õ×Hâ¾Ós­Þº/®4V'ÓÏèòUµ>=ˆt±Hþfs)_ïÏï;³{-~Ún[JÊ/ùG®éïw¥€€ñ éá�¯ìÍ îÞ“M%¼³FÁçe_K¦ýä; Dè}ã¸sá©°âÀ-À‰]ò _¤�l†"ƒXÝ}ÛGœÕÜ =Îz~ùóàÑQ=ƒÒàxêQƒ¶þ˜ÓõÆÈóN:'�‡i'ÙrÙ©‰þúß~¾çuÉU¹-1¦4–ßûäÛ³%Òkq(â‚f–'ÓËæ†5gh¢â¥�Ø•…4Ä‹M@´VÝ;‹’¨ÏövPŸd¯R÷äPØ“;�ëœçú4›_#à—ÇyŒlœ…>ãÖ«§Õì÷�ÔŠX}S`¾Dè�iéµC�Þ½cã¾Ç'ñÙ‘Òq–×K4EV;ºÕwo\0±L2.$¨0‹¦=ßgi=Žk/j9¬,Œ‘Pô`o Ð z×UÇ¥¿ÊêËrb?°Püš¨Ô¢ÞD?ü½-Nݤ,Ÿê±(ÀŽ)’ÙÝܽ>öɽõI{p±)Y Tª>™7€Ôù*…O•ï²nûò=Ÿƒ!öÇcü*ƒ6zsšÅºµ4¹6ã¶Kª¯5Xfs´‰ZãV®]/¥�+Ý÷à|óÁ¥üô²¡y-£ÀšGw¡ö-O&‹Ø’¯Åö}:§3=aª5G>„rk3²J§;&…�éÙ1UnE[i"´ØžO�FôÓN–å<›Þǰ¹²ŒVÒ†ˆcN†SÙk…daŸ�FøÇç $SeCú©ëE4{ 9”¾x}eZ I%¤7Œ6Ÿ£˜#wô›È `oÞõN´ õLä‘NA+ºÉuÄr¬-* œr¢M‹BoíšÈXÒž‚a †œkQÍÑô[þVÞ?B< ìë¹q……X­«E§³ŠØÇq6¦r� öÕ—ùbHÝ´¦æ³Ò©¹‡I�-r¸ ¡ÁmÒêvñUH_Þ‹Y(}ü]ÌfÿÅB¯6[k…ÜÜÒµÕyž†H^äú°»¡òóþ«¼Ïø^R�Óú%ž–¤)™þTyÁ©xÞ/‡œY¹;šN*G´ œrëÀç™�S.Mmo\Ãv튵w»ŸËAͽˆ‡Ñ'·A«Á—ùúwÎôO¼È«˜®»ØyíAPù3à1{0s˜a|<ß ZP°"0=²"õñÎáVÊzµøÖg£¹ŽsÏŠBÞ»¦ÇËb|݉AõeŽ®zg„Xt _t³rðäsóó6éag¹v¬ºå½{òê�—Ÿ«ð§ªm.R3ÚÞ{:¿�:S5ï°Ôgíš5ÐÙJ©1ɬa �Š÷hV$Y«Ùá�¹{ÃÐ"Èí›ë½¡gô…ß‚£QJÏæR†�Eø ¼fØÀ©’gT“ëm7‡‚|¿µFóÑ©jõk]¾ìEòc8?SÓz\gðáy¹íN*÷\süª~&µúâû¢qàc±�•ÅsŠÞ(žyÕ2‘6ˆ{‚Ëõók›ýÙwî ~ U—Þ£à1©¼ÃÕ+^pâ=â]ö[“E˲+Éa‹U+?eH çÜœÿ %²æqêÊVÛ86ކ� ™;3(ª½kîÖe%9”Ë1Àžrb‡Õ<½I•WÞ5N[s§¾q ¹8?²—ý­Œ›í$½¦ƒ‰vÍÂ3_Eá�ÖuÕtqO¡Šf jFöeà½ÈtXÎw‰#;�n9á,K S\N|fÕ¸‘Ö!eà7vÉÍ%šá,ºÉÂÁQ3"‰}J~«x?›ãÈ-[1_Žˆ �ˆ•ý­Ý· \Õ(é'W/õ“µ(qð[QW_È‘zž¨Û‘a ºÛ”<ð=}]!U˜”„¦=d§€]lhå¿ë»ëjc—^³`ø~Ihù³3ì­ÞC ·/Ì?B&púKX†³êöd€R´y:Š‘!”³’Wor±®K~JºÝ¾ÅXUT®QT‚ùm}±;É¥~ ‚Ó#íºM¬a*÷úY{GúìlŽ3憇QÄÒÌH\ñ~ræj…²`Wmô«åýg"Nèå(ýf\ûÛI]•2 QJ=cù ¬fSëY¯úN£f¬�[¹ˆâcS宣Ù@ÑÃä´Ûj­ŸfW‹RÀ—kì[ÇÝùÆ—ì˜çãvûfXŸ‡ml»½=âÍÀþ�½‚.*£zÛu¬”D™¡[µKꛤ8TfÇœ.$=Œõ)STîý¹£ñ¹`rлb¸*S{˜ÅRº»úƒk�)u4CfaÚkuøAœéžTÕ¥ÑJ‚;¯fã�_„?NŽ7"Ñ8:0Ó¦âIﳞòÝ€#ÅQ½ Wæ.7H½ÚÌ’.z±Ã«n'?|aç6CÖ¨på[NNQVlw“ËZ(“ú½;`8»Ã ÷I¨ý7ÚD!.È&ÅOâ}Ú› ÊŸ™®Qº±u{Džæryjô磶‰�§cQªw·Ù†2-µ =i7>œLŸŽD‘Ù ¶‘‹Rêø¤$=5Zì“ȸwj¥;Nüþ^ŠSåÚT „‚7*2Óôf(§]‰NæâÔ;®ØRÔçHù3…îi%:k«ùÂFßË»¼­Z"Õ�ôˆ*ýGÆTnd±Ìåû7T3“è˜ϯÍ$›Èsæoî—þp¡L½êä¹|ÔÊý�¦†Jd«zçúÈõÁ˜Fú+ˆûcŒÈŽfÔ=ÊPÁ˜•bLƒ‡ŒÍd�!·µ!ñ?s8ÚËÿŒïJ”…Î+囃оW^1¿g@ŒxéÛ6zðM¸ñ[Çä4xÒÁvuëL(¼ß@M–VÈw /ɵòêP´Ñ¦ŸÌ"dôv Ýé>î©w±ûÐmË]$x‚毨.~Ö¾`(ò|ª­nÔ¯þÃx\±ù·»t´ït·Ê•Ÿ|FÆæ®YRÒóP)x? T|zÒÇ0 ºÓÙzk ñÚ~ò»N3ËÒ®qŸ9ýuе¯å6g®ж†ãÖ@懥Ñz÷ï©fÍ+ôÑ?]ËNZ|\À�CÕ™yʧP*¶E®ö\wLé=¹2°üÁ¹éC¯eMŸnxWé®9}¬Ü‘#:#U’g§t¥6ZN_635ô¥ž2�R�ážeUÌÉ“u`v2o)·¸:¬J±†îd/|OÛQ_?9wØ[{ ý‘’ç¤ÕZlCÞÄÁɳᒊy�rž×F  Ö½aÇ� á;HS(uÏ£Ô[t0Í~£²ò[{l H‚È×Äë[@pgú·+æD0b—/Aïî& Øïš.€Úi¨ã×p�N¾¨põ939z\VpÇçWsu)�·‚«yN¶·ÞrÊÜso4cfʤxiµI„Å”…«†µ„ï´\CpÖ¶-œäñåd¸‰>DH^¡�¢æNém½më»Î‘*öàXðæ³lú™_É”“½y̳¨H·ËØ&—Û:fKZæãF Jò6sö¶Ë#¶!)Ðó.ºlK™›%#ŽÕ È�J_œeÎ=ùJg’÷†²N¯ÔÒ&%y ¯*ÕKZñªu@io´ÅØßL´4‰—´ìq¨Üwm?{²¤¨¿Àù“½«Å(½s&ßÅžËðŽvÓ0·+Mž‰Ïœ@?û§¢æc7C ùä¶ ,ZÌò>Ív­K® HQEeÖõ_ùä"õM—²“½³ºæn¦@žUÐ©ç‘ w²ý|§si:˜-.ãª2<:S(Á¯³bã=ÿJ=„žo¸—mLìôTX»Yv2ùèè¢_9}´#ÒÜQmØî­õ¸e�R+F=R?­Kû,ó²cXg%õÓ±²Ät3z£ìa.ág˜Š‰ˆhpwaòcÒ–¢Ý7ÔÅ4¦)ÍŸsÞI/Ht¨…·ZW¾ö—ÈZ¢¦Ü-ßwºM`f�t?A­T¤ü(öyì9îi‚œá¤IØ&ÑÍŒŠ S—v™;ñ:¾à´ y‘—�?‹ýõì \+­\í”…z$ �¬�+HÂi$ô}·ö3é%?'q±ÍØï2óü{béé¹{»!ž¤Ü¥è½¤™Î®å§Ò \¡d½èþ–ý¨3þ¼ ÁëÖ¯YR01ûê@,[¾pøúw=1nê@úõèÃEìKFa†xéý˜û¾PÕt»9é†E :¯úõÆ’KA‘oõ{®n×fq‹ØqY‘,õ9š™ÊüTù?G^S endstream endobj 1641 0 obj << /Length1 1430 /Length2 8158 /Length3 0 /Length 9125 /Filter /FlateDecode >> stream xÚ�wTÜÖ6Ý¡t ’CJHww×  C‡4"% Ò¥0´‚4Ò%)!Ý¥RÒÍ�¾ï½÷{ïÿ­õÿkÖš9çÙÏÞgﳟ}ÖVF}Y{W[°’+ ÁäåÈkêùüü‚¼üüx¬¬ü7ŒÇj†{@\aâÿƒ ƒ÷˜qÏÓt…Ô<¡  ("ççðó‹ý‹è (€¼ öM^€š+ ì�Ç*ïêæ ‡8:!î�ù×ÀaÇ Š‰‰rÿqȺ€á;   B8�]îO´Aú®v0Â÷!8$�7q>>ooo^�‹¯+ÜQŠ“à A8ôÀ`¸Øð»`€ÈüWe¼x¬'ˆÇ_¸¾«Âî(Ä ó¸÷ð„Ùƒá€ûÃúªm70ì/²Æ_nÀßwòÿîoïß� °?Î ;;W7Ìs8@ `€¶’/ÂÁ ÁìAP×{�ÙÞþd(Éê@÷þ]ž‡â†ðàõ€@—È÷;Ìý-+Âìå]]\À0„Þïü p°ÝýµûòýÕÙg0Wo˜ÿßÌÞáwöžn|†0ˆ»'XUáoÊ=„÷ÌŒóóó‹Š Àî°��ßïð¾nà?Fàoø¾‚@7W7€Ã}à@ˆøþÏßä àžà@ÿÿiøçØCì[°#†÷Ÿè÷0Øá¯ý}óá€9ÿ½ö€þߟ¯,ïåeï ƒúþ‡þ§¿|²ªš²J\Uüo›œœ«ÀŸGˆÀ# Ìþ™èý"ðŸat@�¿Óø¾ª0W€Ø_ÙÞ_Ó¿2öú['àŸ±´\ïU püGäüÂüv÷_Àÿo©ÿqùßþ;ÊÿKäÿ��’'úÇÌñÇþ™A.¨ïß„{Ñz"î@Óõ~ `ÿM5ÿ5´š`{ˆ§Ë[U ûA�…9Bÿ}�%ˆØ^‚°súK-ᆿ§ ��u\= ¿ŸÏ}kþËv?ZvÏîŸ�{Iþ1�ï'çŸG*Âì\í�˜€°‡ƒ|ñî›|¿øïgÑìóGÄ>^˜+âÞp_^ ÀÁŽ÷»£ÂO|v®Ðûãïá?ˆÀv÷¼ïÄ¿�{éð¹Ý¿0(Øñø7úW‡ÃÿÈÌÎ~oDüÑÎ}ÚÿÚÿy À`°ÞÌ”«�D¸ó‡ðæó*YZož�á§ã¬Æo8yügà-ž—DØ)œ•™¡KðSÙ”þŽókŠ'2³ 7þ?j°£“u›®®­õÆ6šð¦G)zF Ê~ì¦Ã}Äc ³pã`ò ½õ³k®»ç"�|Òsï.eŸ�ÝȹÁÈ© ÝÍJuükäWž8×!ï'Xól³&©˜°Vt2�™ŸÏ KÃD"†ÐÚŒÁªd¸g½Rž\c‚"$ýCÉ]ÒW ùùÍž`v¢>ÚÎ øõ*°¼ö@«uyâá7¨7‰eØ]˜ˆÖ�íç´ƒƒBj'AE›ÌH޼ Åöy‹ñìºÀµaH¾ƒår ^…_�¤Uáé_½,EBªÊ�ß*úc,B}�/Ä x÷ŒÊ ›„ t×wby†¶kCúäÂ"ºÄNí·WOKKå¬È¿»]”{GËõ¿Z1 Ï{ѪœÓæ¡�®,‹öîlm²×–y×@΋ѥ.žØØàéåÚPÛ»kon¤ª+{ÑŒf·úwɨ€Ëi…¢Nêª`Š'uÁZ´Ï9P2,¼bÍÜœCg¶né¯3úuK#G«opžÏì·ŒÒùíëÐã—±5h¹Å{¡®z€„ðËtth"ã·µà·GKO9^ÆÜ:ÄÔ/zËÖÌ>ªÎ˜è/íô bÈ1c·ò“I ï¨ KØ35ЏÈ³�Wý²d.âëŸVxX|X$;‘Œ(}jÑfŠÊ²¤ møwtóZ$%ç«�rž.¬·”öm õ:¤’uêu6ã·1< Êjóì·�׊žs2¾tˆ0 űÛ~‹ƒ²&9ÉNÖ÷!>õ—©Ž bc8�xõCö‡Ë·£²DjÄ•¼˜3]äÕ†QÔH¶NQ¬‘j<æ£ÑÎѶŸ“S*“´ÉG±|%DJß½™”„_Ç{ÿÒ�f ¨¼ qÕ•ÞNÃdz ú$™Eä/ ÀI¿“lúî²_Sw1�¹Øït°˜¾Tþ=§¶¶ª*CºŸÚFúH4õ'¾õ`.¦yJëÑI!à$ÝÑSÄȹ Ê,1¡„HzC} \Ýø]ðê­¡< &ä-E� ¢üÃØxà©/ýÔm�=«Å’û~°Ecã¦�¶�£y†õ™jc~ÕþÇÊkòžM»Xþ%ºÒCMµ ÍSþ²Áx/‘%ª×Sç�4xŽ{ÿ[&Aê§g诳 ¾šªóΫSýèçlç¦TP÷EË›É)g·àÑÓùÎqŨ³Gv hó�¥Uˆ¨ê°°@¯¾_–Õó$S.›·QýœõÇž÷ÒàP«~c`u|m[éu¦6H�Îíé¤Y&ÐEå·è™”ž5!òømÓãw„Ý„¥cwbŸ‡‹—¤» Ô_SØqR}9[±8pÌA”³I—¬½é:¾‚aüônIÞlfɵײ�¯Ï(žÕ>�‘)2ðaØ~âΨaÿµb�ÖõgÐ:ЈïeŸÜS™êãË]Fþ¤vÓö¤uŽÁ›fÕk'­Ëš)ÿumÑ º†—ݤ 9&¤ö][“æÎ—.™:ãÉÈrªÂr—y[Vþ™7˜�/mÞþÄîÊK^Jæs8éÌ‚¶°ê( ä‰ÓÉrêËiðmJ")ö„I‘òÙ²KgYP‰ ÿ/møÌ�Ó&˜0%¬$&œX”7(áOüõ¦]“¶wPr¬[ ÙÊÞ>WpÕÄ·&�O3~¸tû(±…Ðw]sûN$¸4·Úªå „ÈfÀ‘ÑþÌãËBQúÅðú“ /=sú𱦿·Qån³›st—²»F¿‘—JϱpI È‹R¦5© 0Æ´‘\¼±Ü£À-#ÎŒyý¾95wÞ~Èâû}=ŠzŠ¢–&¥¸^td‹Nïv‹ÆX°Ï9Æ;*kóa£è‡”½GǺ¹•„:w'^a¹xàî$·ÛYš0øs§äËúdOŠ_ á/m¸ þ48g`ݳ©kJA•%�טµá¹uUÎY�Y)�þ1r½7ޤ2^“«×Ö-8RÂ9ˆR®+H±md$1�×<=NDHR¡Í«�½ án~ò¤tŠ>l§32Â1ç©ÅÓe&¥åKu¥sƒ<Û«7‰­F!¯ PÇŠö¬YÛ¯åq ŒõÛÈÉÔÉ/+7 !] eÕ` TlÕݨ¨þý` ÉÃêÙn¾‡ý« ‘_b;vyÁV¡øÔ#�l?jËW�pü˜¢|d˜—–Bk¬¦²¨‹ªä–-YvÚ‘vñE�RÃ�WÒ®=”TÇÝø©3T¨ýJV–jÀ+2ùùâWh>ÛVí¹éÆ·ö™aãÙÑ�0¶¶|þuÀ-5ù[>.dæ«'®m6M‡<Þ“Þ.?Y•¢ÉAT<_ÞCó\Ÿ†ÕPÖ³™Eà&;Âk.T ?-`ëýšË€()ÜÓÓP9=Rü°€ßÍ”ÎH´^*Á%êfQèíCMbºªŒgµ ¬X14¿�LNò(Çz¾!U¹ölåà{0½,´Žtlh3ÿÄ“÷È“kom†éòHJâ€û¹_Í+žkSåR®zÿ�ЇS}Ô$Æ@%Ÿ‘½‰í´%€ã­Kb\­�‘ïIíìñ,&Kf¿ ª´÷n^‡í„Yt‘‰é§ÓÝżp9±,ä°zSùryàei/Ã|Vüeô™VÔD¬zjî¸DAÛ�‰dhˆÒ%þôK­£˜w¨Ë+Eö·eW»¨Iå®—7ÇHö¼ËKYë& 'E¢{´½“¬UŽ'”W´‰0úžï´ÜÒßÅJ®›<¬TäªÓÒµ:ö0ì9 2¡…iLP°ùLGì›ØŽYœ‡X*»ÍZ9=á|ÖøB\ëuÑNŸÇøIïë:,‡0‚L+:ã…6!o’¨þ&Ë„€ñ>éï…ˆžm1Û»‚ &íw9¤CÆ��•H,øÞÙø"_êVãF÷¿¶ÐMé UzŒœ‡PüŠÛ¶ÒœÚ[hÚ„Fê³|ÔjT�¯ÄáÒKŸÚ1‡e\÷™žt“ƒ›«§ÅžM›Fé\ã +¡*æïݾ<Wk›$VyÉþ¡V ÕLWf˜XufÁZ°~—šÙf^Ì)ÚÅÖz�ë4 Ë"¨¦þnÊ>1êødÐù‹Ýþ|b)�f KAWÓÈ£ÀÇáH•Áû°•ûeô-^y­�¿ºRíÒÜ�Õ³ ÛÅØ� Š]�ÊKœ9P¡ajC·ÿu4‰×ê¾ÆÒ|ãf¾Pò1ð ËsR¸‹ìÝžG YGÏÑ!Ìl ýqzÓÓ’³�“× 2[ÿDß)|Fyy†XJ;^ãçfŸvöé7ù)aøË¶nŽ:oìYxÆ,N+‡'2Ø4$Ý>c�ÔCI ‚2jžl_òöw¥~ârîõó-ö cX±þ çW1•y, í5ÑŒƒ…öã¨ùä[T§ *¨€ñ õd¡ ^ê\•£÷ #6ι膮©Œ¯¾eЯˆ´ôò ¨«ÜÔ÷²d\†Ô,/Fþ‹íº¥×¡ K—{%ŠK óèP‡s¡`•ˆ\ò€ØÆ×5sÊôSdLI™厅gŽ®7ÏWT,˜ÆKͱÎ�©Ãé»vÂZçbH7)Qµ&¹›£Z>ô½˜OŽÇ%>äºÜD)óŠÕ'CÉÊÝõ!â z,b–"dlÑ—.¾œ�Zê¯þïΧÆÅ±]zrVtzr èçŸ>­s¿™f‰Ö|_‰±´¹7G¶ƒMúª©œ¸–öyñŸsaÄr÷Lcà¢Í뽟 lÆ�‚û�ëSº& ,X*Kï·ˆª…å͸Ïû&ygLý’™†‘—ÂSXïÀæC:p[µ¯×²Z˜<„°ÔØ4iLëE +ëˆ9G²¤Ú lŠžx‰8úªÑÝbu¹¨Åp×§öy†ÊÄz<©×ÛÐϺn‰‘4¥ùÏÇ9Û"?e]ÔòÅI`ëS³X5œˆ¯#0Ôª�e~�ù”~ SäàW�n$ŸÓuG{UÒûú™{ÃAö‰lÉwZØôºgª!L6éѤá¹'~ërÿZ"½;ê”×çj{T ì ¢÷£é á –ª¥j΄§@9~�ײàÐ7‚ûu7ø\Ü´„ÕEQ�oÀ1œ�sÓ‹ •Ôòe³†ñJ!Ï8ÃÀÏÝ][�ÇÅXd†€1Æ/©¦);?P.'PUq&L7ŠÇs¨ÕY·íŠ+ëwè¯2žÊÍ ªZÒëcÏÌGã��ˆÍu#5œ�¦<¡Aúð[_�0@SÇT¹drT‚^ #î‘%FÉ¥) El„ŒppÒÂÒ Þyf¢~VgX]¿‚ŠsTþƒ5r8y¨Ï|*Þ&o‡ÔìèTeeÞȳ´ŠYh—[j%³äÖìÛªCp§Ãغ’_†M]o�tþšªŠŒ¾ [ªäfsÒØ †ò„4$K)ô‘ÅšQ5R°ûT.ËèëÛ¼&þkœ‹,ÛŽ±Àç35ÔvDóvêÅ ŸC àRjÆÏ/ïzט”KR–o±;hzŒaO0˜Þ^ŸÖÖÕ›vÕÆYáO|cuêeTiÝ�ÕV¹ÃézÅ`}ñ)Vb;êÃðáóÄUµz¯<¢!–óÌx,3ØHâ9vy'éátÉp}ªº¦Ý/Uí¿d’Ë©²pß‚Êj‚yÈÒeŸÛÅD~‡º£ÖhrÆcÁQêÞ3ÏÙ|…™ú;ÏÙ@Ѽè*lÙU¡¹7Ï—«7j®óNÆu:vü_çc)V¾Ù:ìڶ™vú©ý Ý&«n/cÍíü’ ü‰§ï< ü0uá(ÅÏ!Ðν“K¸Ý7ˆñfÁr2ë’ö¼m‡È�»µ‘˹ W9ÌmÕŽèšã¨°k‡|§S2j½uÅ¢�*óÜ^îâQ�^ùÕå–‘¡bfÁo¸ë5݆BO8ê·fEµüE.Η5XË`µþ“àSª “ŸËÒÍ.djIç<ã‚ágt�µo*2ó !#a7ÏêõxfœÜx±÷ºð’°é¯u(4 Î@}¯¨D“)ò LO¦ä?–w»|¯µúT©ì)l­œ�}^;|wEŒà{9�»7¸z€·,ô¢X‹¶¾R� tÃâÚt@:Š9±Ð]w£ZÊìk^ØL[}mPV?•.Å*ôîýÙ„±® wß—-t� ]2}ñ, îXXïnÖž[¯}�,‹xHð“™ÀMƹÚBö7:­Žˆ™O¼÷¼ÃÑߢSO¢Øe ^2aY÷vìOþ¤f¾ŠæKëÞVà‹¡Ê‘z×ìü@Xã=RµÍ®60À‰¾�%ÑOa•Ôp¤#Á»É4Ž«å¦ÌL|x«k¤°;øù°ú|ÜFÛ‹jãy.ƒF€Q¶Ã@>5½]ó¶ÇjV„v�/ÛwìÊt�Gò®�0Ƽr8æ�Í×ÖAÅì‚ošvÌ=-Ažß&äPNIènFës<½’6°ìH*Vy;”Ÿñíð­Uû¨»ØõCæÃÝ£ ‚³¢¤¤QQ©Ξ£tXB6Zcq¹¬(Ów…H=I>Ä�fwïñ…ÇÆ»à«gbª&ÇI%™cè«w#7W\¤3ïLwÞ§>èãý±ÂØ6ÚÉôXmN_”¨mÖ”¾çÑ6æ¾ó!Û×Ùm5®ÒÍèÏ M8$³$OORµò6XD¼>èÓ˜>|Á–U XÍRœ«û9íµ–ÁЬ ta×Öæ[y£J¸µØŠÙI!%1ÕZºíª‡*CÇ£ mÒâ»2ÓJû”[ZwøØú&í üÕ’eœMNËÆSX!-B J uNñs¼Ó Ð8­ô1Çxè#`Þ�7ÜøÑfZõŠä£ò¨Ç•gø¦øqz˜àZ¿Ž‰ÓÁæ¯xŸ¦»··¦+Â6ñ”JAÖ>íqaè†Ù±ì&Iµ½QáÊ2ĆSDTñ-Ò÷æO¥®Åû�¬¯Ðú¥&߉=V夯µ`òŸ&ÇÙ4œõëùÕï¹®”é€>8Sq¢³T<À©˜ý„8ôÚ°(óÒ›³âÀ‘4æ ¹û„ø²½3sQCå¶qlóÈÆÝ¤< >|µ%ÇP@+®«¶úÅÐ I)-|‚ÎÆò‚N(xlaÌýkaÀÌT»€¥S8Õ¿J“Ä wúcdE¦¶_qQB“inÿ éÀÏÂÁ»�íÚx>Εœ@w³Iǣϲ7ò.¥pe]ɲö/ rA“umeƒ¼äfÿÉ6v™Pµ”O�rå‚ ×Í@ ­;È‚Pn‰Äw†4Åwâ·�ºÏÐöº?‘1p5(H΂³œ«9/0Ï-ñCVµ&"DB “:˜€ÕŠdî%…VÑÜ3\tY|� åtÙ‹]™–¡Ê‚Ø�}5sœ’ÌYÑéÃ:×Ð%:ž¡\�­Éµ$À†¤m”)/¯*­}¾§•Ã[¼9®ÚAKÊ/+©D°‚ÙüËë4ýÀ˜ó#z#©ŒÇ¥Õ¦•šî�÷�ö6ºïŒ_òk𠌪“vDxóv—wû¾”:.rñEB­Zk,Åý"‘ Ææ‰·þU¯¸`'±{“-ÔB‰©æOß”®²Œ �QpeÒÉáIJhOg>�íx‹.VÈç,ÄWYˆùaYôŠ÷ûs½„Ae(šðÑO›%Ó�a¢À�érL(’;[Î/ª®›•*�Mdpá—O×3B {öŠÅù2x+Œ2­‡Ñ`¹�žQ@¯;NLW+ãD5(J*Õ£N©tg*G˜C¬%‹CÓlq�8oÕ®Þ=)yí6F,æ¼�¢h£ÈŽÕV¦ŽÅ�»Æ·’/S%IÚÁ­<Óª�¬™¦H"?]$ù¢C›t~½7 ½$P�»ê>—šUçF÷•¨»;c5@ƒ%g'Ú•”öíc%n…çLö˜¡ýp°Õ ''Èæ¬=ÙÐȾî«Èì‡Q[Ã+ï0¢Û®ç÷oE´¶¯äË~"écúѯèOø’³½å˜¿W`íor™ÞÖ`þ$T c‡þð…4œ—'YØì.¹©‚®ŒEå¨p}Vry;m{ dÞT(o\,{0HÛ­»lp·Ñ0s³í%J–6|Èû‚ZÁ›ï`ÜëêýIÓÆ(dªScæH„È×ã$e*ûÅ»uã‰-�ät¬œ:€3÷X°6$=´@Cµ€ô6é!8Pœ¾=þ*…Ìô¾SÞÆŒ{Åþ–MÃþà48âóúüAß–yñAÐsú˜Á)ÖÓ K¤í·Èüø& ¶wyæ_$2ø9Û¨ ‘Ü›£»“‘ çvÖ°Ú™ÓvÅPZƒ Ú@îâ�ég,L³I‡Ì²ßv“Y»×ÊÒÆ ´éoßO4F|þvµÍlÓ5ìÐÒÅòeÜùe(ë%ªÞ¢úæ¬1aÇáæâ+õU¡ÃªMŽpŸ·nÁG®�™r iÔ´u#žc£üTÍÄ�D¯X/Ó`{È|Á‚�§×Cbî¸ÜÓ™D·´ô@nd]hwÖÑ;Çd¢âŸ I^Ï !èéí–aPªä<%ÉÔJx¦gmãÓðjIxsÿ3…÷-ãÖv� ¨:š:Î+7bœâePåáÈÉKP[Àê~ÎÅ‹‘ÞcS=a)ؤÏÎåš±˜Äl¡Ø»ÂvÎx3þÀy)S+=cíF— Œs¼œyõñ'IOi’��÷i‹�°ŸãZU¨eˆ·=¶Ä‚Y«}u©dtÑÜ;ßOfß½�1kM÷†w(š¸Òº�~ŽÊ")õmÜPײ Q6%ÂTw[;"hÔ—ý_4/ã."Eî�º]M[ÅW…m[ÄT°Ä5ÊØ•¯Ytð`s2¸³Qç‚ Õ}ùYÜRíãö·‘x]iH ††Oµ º|L•s0.­ƒ‚åTÂ+cTÎQ|Â_ÎT¹}ùÈ”#0Jœ^‹±@�v5àîÃp�ñWÓà0î¾–¶@l/¾Îf;Ø'Ÿu~4Ã<¾º° 6yºG¸Íñuž‚jã:ý\÷sMExlüsïIlË˵"]{1j¨&³åÑÇþçTÀ¨ !ß� v½§úÔÝêËUÞµºGä•ÞYÊædœQèQô~œiÕRo’>é÷/N½nýD*³/3¾Ò´çoÒÉÔCÏš«™šü-Ä®…ÑEj¸&w_V3ŸÞÎ`Ôˆ<RÖãDã`Ø@†Ò2â§ÞXÆ=žæä$ô®±¶|S §65Sš�_ø€C}(ˆ(`ÛFh ‡á%nG,%’NK›jƒ¤Ž?’…Ÿ`90Ê—=gß‹,’$;–å¼”ö–p0[: 5—Õ)Áé�ÎNƒ@XLÆÐ5á×Ñ<)5¼G]YÇœí-4ŽƒÔŽžy”uŸ°[‘!|㋦ÅO ÊÒNÎ�Eè�NÎ/Öºú´C™´ˆKÒ*ÿ Õ÷>‡ ’Ô<®ß]× 3“ âá+ÞJ›�Ž#35†´ÏÑ48Niï‹®Ÿš®¬�œûõFö™H0T5ƒzóm_G¡®—ØÎqÕéši ã1rÐ í^˜Â[·cknkFÈ�¼ÓDüRsŸŠ·c-»†¾Ê ¾ÿ‹èõ2³u#ëôå £—³Fµ…äfN6Shë슊ý:ŸÄ';^ßÀ´Ê‰ºÎÙÜ´Ô´÷ê%Ë{?x+hk/eOžUîrfÐYuõDH+<@wiÂtó�Z¼2õ^ü<å¤+qb°§fÏHx1Ÿ<ÊçüŨÜÝ7¹–^G|P¾ôi7]z~]@ý\~ô+¨YMŸ^v3ˆIÏ,€TE!h—È$©Ì“Ň� ºÁyŠ_½2lUA-ú9'¹£ßôYûÕe«Hjç¸à÷C²è¤mA¿ÓrÉ�4VD<²÷ Œ-jàµ*ùÃGÑú�w>âá|åZ'|6Æßr¤¼³#Töêb+’M‰ñ2Nª@`d¸ƒJÏ’G¤TPóVçŒ+çžÿÏ/ïbýS²bbg…c _GªG‰GRɄ׈{k;)8pó-–%QôÊÓ„¾TØóhI÷�«\?JÄ`ƽû$ûù”)Û�”tqoh¾*$7�Ùàçˆ8úžu‘°‡J+±Éß ¾{î%½6àFj´§Ô©�3ŒC-Àzb©"Fgn,Cb®‘:Ê'(yaó T—3ÊìÕ{ylGÌ�q&l¹¤|#Ó¸�7W˜«^3ËâéÝÄæ=¼e >”Sor{“\ÇÈpƺùußËY¢Qª;`—Õ`Dj íût¨6 =­)ù¯å~iÛßÞ5ü?{±Í×¥ŒÀ»C<÷„ÒÚ^³¤_ˆ�~/s�Ý›÷ýâbM„·œoç ¾À<~)MV¦$>9¤äöéIQ™ÛÂú>™ÌöbÑ;L7p¤îxÒœžÿð³Y®ÕÔ``•™n˜n‹âÿˆ”Àj endstream endobj 1643 0 obj << /Length1 1618 /Length2 7579 /Length3 0 /Length 8664 /Filter /FlateDecode >> stream xÚ�¸4Ü[6.5z�>DïC-zï½Ec0ŒÌèDï½w‚èÑ¢ AôÞRˆ’è%’ ß$7÷¾ï}ÿÿµ¾oÍZ3¿óìgï}ö>Ï>3kؘu øäì¶eÅä”(h˜‚‚Âü‚‚Bøll†P ò7ŽÏf qGBp‰ÿb(¸C@(4¦B¡‰Z8@Ý €¢@1 AA€�  øßD„»@ä µhñÔpŸMáêãupD¡óüýàs€ââb¼¿Ýr.w(h�PŽtF00@€¡”Ï¿BpJ9¢P®^^^ü $?ÂÝá/À ŠrèC�wOˆàWÉm� äOiüølCG(ò/ƒÂår‡Ð †À‘h¸Ä€Î0PÓè¸Bà‘5ÿ"ðþ4äþî�÷¯@PøogŒpqÁ} p€=è(kò£¼Q¼ÜîC"Ðþ O²E~oP–Ó€Ðþ© v‡º¢�üH(ìW�¿Â Û¬·S@¸¸@à($þ¯ý)BÝ!`tß}þ®3á÷û{e…ÛÙÿ*ÃÎÃUÀuó€¨)þá !üÿ`@DP\TT€¸ Þ`G�_ }\!¿�¿at ~®W€=º HÔ‚þÀ÷C‚à|ðE*C½!vºPØñ/Õü…ýš7ÑE ¡¿n´— àÿØÐCvFß"H´4› èúw^%8a÷kØ„DD ww�>ú¬Ñ+€=•vïßbðÃ(´ ]cÀáŽÿë` tA¿WÐ1^v¶0[ºÑ„…ÿþ:Õ¿a Zo¶ °3Bþ‡ ý»ÿ „ÜA` bÿ_î‚Âà‡E+€fþšò0qôÖ`‡_Jùu‘üC¸€\‘(Ä?:•‹ uE·èŸLî{Äéa‹„üö_�{¸»£óýV<ºË¯_aˆ7Œ¿¼€K†9½뼬—£óâû4޽ºÖ�d6%‚b_|ê稉“£2ã&ocW{o4Sw©2bzÁŸŽûðrÂûñ«¼à• ÕB†ÒÀ†ü1_Ñð·ÓWF;­Ã¤XfôéQ²±�Å ŽT“…«p±>á­çŸŸ]w#·ÌÅ÷.€²sæ :T¼\A÷f¬3ëjÄì1I™»E–‡¡šÑä5f,4áB¾3Žæ›Ï†EBöȇoò2…OŠ5úëDk#Èi(|Õ™ FS†h(“óÔ[‘ìò"ç •éI,4¥.ì+·mÄV~Ìv$ {4;h+ßÕy2ÖâшY�.è[9¡·ÞÌ5ü&@xïeJ´#o}&«<[�ÆùHÖQ�0¬°ÿ#»±ûÝO­YDyÅ…™&æÛ–8œ'¡ÂVŸ§î]ÚÄç$…,Ó¥a‡>–È‹êÂ]GíMÞ^I¥ÈiÙÈuÕnk3;­yŒÞçåÿZ2­6eJ…Ÿm¿|Ó9ÒyŒ`=d œ N2íÊÙ{½›Üª&r>GjÌ­$ŠjÐXDôXs%$ÎêÜÑíèV‘4—_šbI4&.2$]4ÔÜÂÈÒÆ3“— š%!"w>¬dxþ¶Ftì©tÈKéô‡A‚OÞMßRÔÛO$iظ«×÷ Ë*ÉÖýX@×J£°ÛÜѦ\›Cõ Ú²—tµ-o6|,¶°R(chM^ñäq¡}ü�„¯[gÍG…¦r�Qæ°è´ž™À ë’1†.óÁú¬Þ©ýþ.Žô-oÕæïçwŽÉmGT$†XÂJaÕ-‰"í )£�,Aš�g/qÝûÆì[ξ-.$l»Zm7k¹þ¨r“W�s,…‹ oÔj±‹ûÝ!ˆ2T$üú�Œ4Õ"´çÇp´oÁß„Éh¼¥*Þ³`�}CÚø]Åõø¼Ÿþy{½€ú�/øâviˆòÞºÂï? ˜êˆ¾ñ‘Cô4>ÙÛ²4q£S ÑjÃŽ2{°Z~ñ’´Ø,q~¬ØTWéXóZhÃZ¨ínm[%B5ÝHí=CC1¼ËÑÓéAãß� ¼<ÿn¢ÍÄ Ÿ£”vRv�Ý–8‹yöƒ=m# Ƥü“êq &)¦¾#ð9£r�í—²ÚÉžH¡Â¥% ¬ô]'n½§ý<"”Ç~ò^žÖÞScÀL†̽ÅrXk¨_óÙ²Ê%b“dZ¦Q¥3<“À¬v7îÅì‹[÷¾ê“ÞX£fM$³{ƾd yÈrÞ¯Bq�•“ÏÞ5zšçç¿ñõ«^Hø“rìvz÷éCï;5t8ÏfP)ª&r}µë’�Ìo�W¦nÚG(B��™ï<Û öSdúÓ˜$Óò¤Gß?â Ü(¯î~ÌRý­%=‡zZÿËS_!}©ôNžž¢#> Ѭ¬5oÁÕhq—3U¼­=lKNíR× ³ª1Ûk9‡¼ÌNmXÕ×™|!êý#‰1f8xß`ÄHW­ÑÞOc¢rINp8nV×Yt °ïù*qÒ¢¨íÇãKM6�"Ù½lÕЈT2©]Žõ’Ñw�žÉ󼃬M,ŽFåZ2g�{2k©®Ü abžD‹ÔÒït�È€ âTÙgÚ)"VÇÂéцŸÚ·Gh}ôÊ"CÛt¸ÂškÅf?ϰ…ã…©<ûž¢ï[B~zj¿ã9eEªèøþLj³Ø/;{]>}tw!à{ïàrRÈžCáÔge½ÞzèùìsYK0ãÃÔ8­˜G(Íç[QWœu¤©nªeŒ)ïa¼tJ±+ÔŸ�1ç²¹‰ÄpÝn[¼eÆÞ¿øÞ:±´=ûÑbµÈÚÊ÷éôÄ’ô!,=q³ÙÆöJ i}ÝŠ+‡ÙðÓë á)æZÍáòTãUp—K‘dâvú•‡†A4¾œÈI¶¨¼4é»bOø»là ÜÚìĆÉN–ðé‹JrKìq¾À¿¨éÁaÙÂÙ žXú(Ñ­ëJ0hÂ>ün£iöã¼_¡veÆ‘#ò[ÕÎq£mqMûUÈæ§ã·›C¡= Ê˳m™y^̃[T,5Ë‘D4ù§N”gŸu9¶þÎX£x’Àê¶î³žëÞ«$º‹6wÑ‹ÎW’¥�æÛ=ƒ›žKŒâÎ>¤ Tͪ)>®’´ŠÃ‹€T'š`ޔı~˜e͇\[_¶ȇR/æí†ŒqÑøÑR}ÝmÖÏ­m?»æ¸†»”î/m—ÚqÔôê¡ãkk!x#„!@7`û’¹ÜC·ôžšÀe4¼ÎüŠöu±&ÑÃÉÞ³åxðèió$‚b³&&WSµt®]ãýÙiKWÖW·žÅw`3Ÿô�ñŽÒÂÜ[øäÖZcq×6|²�8‚dÆØ×tgy“ Sç•(ƒŠágÄv2L)ï�s†š…†¿¾pÖ6i6ë=P^’Ú–hÌØqn|×�³ªÀùv~ÒJh‰�DSîêzß%¬#n‚xæïŠ˜}³_ù€FïS;emX‘O>¹jâ[O&²#ž'IÏ _§)5ƒæ^,ßNÑÜ[¨=g ÚC-…ß¾R…äD,ë*4íxjn±¨ˆ”íâX6‹ä¨“zãÒxü·ê97ی翬ƨTÔÀÄB4ìéL(|WÜ ­¤¨°øqT=�0Õ”qöÜëOoˆ8¢ñxߨ²ì;£Ùoæß­x‹qðñ·5A¥×–Zsƒï/Oå†Ö"kp£߬Ñ,½”ÛLk{Õ…‚u7L¨^Y`{#'´ŠÂu£¹›žB •‰eöeÝ^Îo#ï1^ª¹Äp+¡,ñSýG!¬‚ K7ÁMÕýÆ2Ð2²hßÓ­‡ƒþ=¥�ì~:ùæÄ÷7» }Î\£q+sP¡I>M>ZêmϹ%î‹ÕñÉ0Ja%Pà5êI{ò@VV9‚�û S?K™MRG¥õs½V(} í¦kïù@ã2Sćß44ñ6ýÌøs®/Ÿé‹ ‹0ÊÎ퀅ÅÎÕÕc1N«‹qéà‚¾ÔU*Ï֘ܢ[÷@•&z;l¾a³÷Ô_´-™>£-îF©ù¾î.á¿3{?zÀ"õþ3†PÅûJs!)®®uÊÜÕ_V²<�Üufí&àbð»ÏHgnÛ‹‡r×Ñí›J|íÞz4Ô™#Á=¾¢É`�9OÙ/žÂJq’äað£ìŒÄãšz+—âÐ_¯Á½lªÑ‡ùθ…ÃwÙütLŽá-üð|ònã¼agivÒ;͉U"õ½£“+EhŵEÙ±R*ÿýK¡>æ/+F‘ßýs12îc1Û³Ÿ6ŠÙuÓ ¸¸šñ—þ—ƒþ=Ó'¢ã¯Û�½�ÌÿRΘ°ù)•Ÿ�ÇÁU.ˆ·ž÷•´¿Sµ�©ÂpˆXî×y‚”£ŒºæÌ%z’@þå :ºá¶QÁâ ”~ÞZ{ &? ½„À‘–¦‡H7è)dsÁÅõäP=Ñ$[ß°žüÓúxWn&P¸|]�r§GžÑøì 뱸Rq;U’“4~¬¥  z;ßÏ «ÎšXDø¢TùÐa¶§ñA¾|ööfî¾\E5ÙZ—Û‹ÉãQb¦ÕÞ•éÍ81Œ‘Ï’¦�ÏuíïÍáÕœò. ŠžmtbÑ?uVn‘üá•§ÍG‚Îæ†ñÔg=�Þ*¬? éÂJw'ùŠÚ&µVP¿ŸìVÏN×7ä$‡Hß«}eÏL}‹‰{´«Š[`Ë ûu´þÃvNÙååØ_BðË.Ù~mv5—Ì‚%�L™ß¸¤C¾ŒÈNÀ¨ˆL~²Ì+¨n_æ?œs¦žOÆ’ò¹ÌÓö ¥áì–Vt ð— a¢´›J_GÁ„^�¼t–S³Œä¢Öº$l1(þüÓ,cÞL����8Ï^Ám•À0”Ìq–Å ^¿wÅÞ:ì/µ:1ð,ó¢›qšö žìçîrO˜¨6¨Eªè‰‡Ë>R*Ûh'Xܕٺ³\¯óí×MŽ2í\•¦£5¬¬GD˜ã½N–MdðSaÓGêE¾2ËŠAÒÚ—á·ºlá„ ñ~nÔ¶fœ�X–roÇv�;Wø_"Öc.1Þ‚N£U7ú½ÖÛ.-ŸtÑ%QîÙ=õSJ¡)í�õ ^¦YË&åg¥4^Ûr¤Eå�û:³:;³Z>Ø«£¼s ¶Yô½Ž¤CáŽI†ìÉèéáüóLW&˜^ÝÓT½ÏÙÑwl×*(\Oo5Ÿ>¥7LuëVž~xÇúf^Ž4¥¾G®7‡ó³ØE#Á�ÝWRj¾§;ØådÃ*66IÕ´—Wò…ƒ›êÚÍ4Èðü%E7ç|"€+S)äBÃU0:iÖVw�¾¶^|ésŸs£Î†í­_I9s§cž€ ;rÕ»íÌ~K¾š§fÞ=öHiõÈ5ýÖAGƒ>^¯„õ;ë i Ú�!‹y2»v²Â`.Ká*Ú ¢Ýyúy 6n­Uú~Úì�ÒI»’µ,¬aw×.šz …Óu¡2)-IO8É€J?Pá¸XWxœÑîÊu§–ëû&Ïš)‡´˜«až³í{nió]-­vüæÆ0B·AOö–º‘ …ÕOÂÚ-šæÈF/C]¿d*dgûdý¥nA,_~me‘QlfƒòW£K]–�‰ˆžêγnˆ¹Œ`5gú9.ÔŽŽ.G³IÒÁGü§™_RÌæù×CI›yÊ­ÏrS¸ªMÏŸ®™©2ØS›×;T‡ü^z…é[™MçÐñâ?eU®˜ËPU\>1¦•q=Áñ™Îl£Ð]aS–îé”�Ä>_>/RÑXÒul|¢ÝdñòŽÚˆõnT�î±!•ïÊŒ=ÞžÔlFZÜUð-›èoe%à‚:GçõÚV›}M‘ž6�¹¹{�"ÒÔ䤅zä#]Á½l«p»û‰aj€Nν¡ÆÑr9P–~uzëñÙÅRá0½f0æ^h‘n*» EŒyî¡â+©áðàíét<£d«ËN£ä÷÷é}ž]£ÇW_ž4Êô¨‡v¤(³ˆñ× >ÚÂÆ<ãy¯¡7&HÃ22[=-½ü¹³rê�P·\[¬bóºÕùÀ[„Ú !=.6^­lä©!-m­©í½b‹i4B†ä<_¨ôÙú4ò:ǰ0NAäJÅÝaÝû5‰Èkbdf»}bsO î“ô*U›K 2w ‹ê°µ¬˜^à”X‚$6Èœ‡Gl�›g?`Ôˆrˆ¼S9°ý¬¯r‹˜\6.ϰ& 0Ï:gaÔð·ÑÓøXüfãÄC1"/5š(à”=èúõCqþë…òŽ-[ZOy0O R� Á°HY;LüÌ´M÷ÑÜá OMyKB¦•¶”„m`¤3$rRp±(ýX­#ö(ØÙä»siqeæ¨iGè‹C†2ª)£ò‹Úïj"ìœÞ!‰„I"dß§£ý’1�â0M·£çQk8ÖÞÄÆÍ¶‹{è7`yçÒ–/Iswð IAÇbe©­'M¬f¶YÆù “•ül'›9[éµn¾˜² âÞäk']bñõ“Z–ÜW©ò1ùq˺‡ g’òVz‰:•©Âßz¸åï 7†zÀ;n³¶®ª íþ,´ÖÁ†ÜØÌá3e±ö®Ú„ð‰Sê ¼.ý¤Õ *�Yz54¼;Sß|‹‘dßqó¶eL™íqÞõNÇnµõ®�ÔôåxÆ Ï’}}_U½Åd^C�zÑM¥Žì36­dµ�•BTYó’'vhÄücÚ6Û�éþ-ceÊA‘Ÿ<ÎjŸ„LÄÙgT¶H¦._·œ £"[ª¶9UE”õû³”7}>;LZÀ/¶ œÕŒq,ÄL0#£läZBˆˆ9S®Þ¤Þg ÄQMyŒÁ[ã=ᆬCz”ªH)k�nlF.a�8–ßm3�ºŽá»2íhÀgbN–Ht{BýGkýňtÅæ{/íOù� X•D4륎Ȫîf˜W¿õT´’` ³ÆŠpôÔ(‹Õ§éon7â‚ öJƒœ’®,Ò7#öàEþ\gäÁ¼Âè^ðF žÎ·/{6d#¸å®)Y~/W+ÔD©24®n xÕç»PàT¿1˜c}®÷ƒqZAó¬ø4ù%•w–ÞÇî2†på—+¹Xì„OXÂ6•R�Gø·HÚÜ! ðüÁvÉô¶ÎÐâ¼€myÁŒaQÉ4¢uŠ_­Æó‰9FyzÏKxØé%Sy˜ûXS¼0´cI­*±åÙz¥a¹«óþÈ!êu²!júB�¤GQƒQ‡æU¤}.§ƒ¬—¥}™qöhŸÅnà“½8 ò·F+b9aϼ¡u�\Ï™:ú¡[žø¾ß?¾\ù>*¸ü�Âöþyî-‹\_ŸÉ”yÖ;`Í;çy‘L;}¹}Î�pY¿$i,“G=ÇQ›�¾'×mùÈ~øÙf´ö÷÷_ ýª’C`¿Œc)y[±J3»wbû1–leäÜQ:.Ÿ]Ñ�w]›»�1úÆ1?³d^pxŽøS2?z'üC°)žº¿³ÄjþyÚ=®ùl>¿V�Ķz�…ïB$ú}MÄÞo¶÷p™¢ôpϼ䦒×;¯ ®; rY«`¹¶Çç¾’m Yj>ó�•±^�îF»ºW8k´ÊbËöAØ{Ÿ §gÁúG¢QŸ_³1pm ¸ê]®,÷V±ÜjöÀÏR‚¤ˆ\ò¼^®G–›ŸpÐâR4´•Íú¸e¥÷‚öì¸ÞFVè4pH¢¡õÅñ¤Á Y ZÂÆO®áûX›¢(&lëjã‚Ji‡wb,4C*­E� ç¢à V|&1Ck´,4ýòÑ00jñM* q�žIûÓP�ë¯Óɸu|´óƒ_ž:�ÓªÍØ¯Vß/-M’'îïJ¥™ÝËn:¿|s¼Ë+'Q[UŽIÈ“¹‹É^#´!ù›´¹·^¶7¦Å“~Ž·ÈH2ÎÐ~dÙvY0Ö8Üzê^uâi÷AÛõz“Ó‘Wq%?—¢Ïº¢oÛÜç =ùZ– Ïβ‰ âŽ�dPõsúöŒ7Õrùjý6Τ —gp/ï\šÃÐ�N‘ž×ñe³|sÓ0òÛõ>ù7Yß . ȰhÌ¿í¤,ó„šÅ·Ên³üø6üäiþ[<�huÚ¬µ7ô#Y¦†FÔÓZ¿Oúë™ÚóÅ5S]·îé%Óf>/ÖøAÚ&W“µ}ZkC«ÕRÈb~gÿœI�”µ56p¼Ùy{ÿË¢:”ød[3,õ™]TG”†Ž4ƒìíèÈô-ëš¾nZI0¼�'£·¦é)FC`â’¨Üôா=Qówåø×êKøSD•n¡›”×X¹ßÕ„°PŽ!‰‚D ú�IU§åCD÷±ƒ¿Õ�m§'õïÊuX§L³BrVH> »Ȇº¿Û"þc}º¢eÀåz;R¤ó²è¹P¿ÿ2Û:OÇ`´‰ˆž\õ…a'œnbð }>=ߨ�Qk�Û -ާƒ7: �:(˜ÆvÒø¿m2…†Tæ¾l¡:ZLÈ D|"™Î×ÃKùx©ÇdÐIyÍð€´Î:ï~€ÑP›,Ö1´Á~ÝiÑ"×@àjÍã®â™²öá³oB6Ó£’àpPÑg÷úèº<ËBíâíL(eXy¾·ÿŽGÁ}ªW^cf±.$ê~{þÚ_d�’;dY|^ØamÔ™v2ö6õp¯u Ý۫ߨCÓgGrëÆoq~mX–3›1 EŠ`°oFG|=1ï‚ÓBÝŽ¤rjÔO“8¯ž*B¸ˆë!-s_bw U¡L4í8 èÛÇ$—Ÿ]”@bÉ€…SbËû¨X•ÄÖséa‹–µH¢Ë�w½˜7{Fžcª\ö”ëKóÓžYôl¹ä–¼§ œÕqoý(èG¤¿œ9zâ@t›ë§ôýƒ£á”gŠYaMãº×³U6>Æe™Æ0ª‘©uöö®U¥Ú¿|uA@Ù(’4.E©�Ë>™Ÿ4>×Õå®�bÖª·¥(}Öb}ê`�çR?:´ƒýˆs3l~nA�³[ç6†ÐL®?ÏNV¾µ¶ÓÆM› î…·R zÀÂãN¾)bfr D¦á“ûŽŽø!¾;1D–,Ec1‘ã·ÐD]Ìêí Éë ÕJŠY,`>÷îÅ~³¢÷›Þ¥/d–Í\JIêJ¶³hï­]ÇÞ�_ëæm½Ô€”Ta€æü 5�q6Ø(ÓO$]]?Où©,­¦äÏ£ÄN7­‹ùä±W>ʼ‹;nÈ©tQP0¢±)±0Ò�®-t[Zg›Y}e²¨iïm¢+²?Ç!>ørº0£¢fJÏo]P;Ä*�”}ÿ妈3ýâ[xµÑ&_á«AþÂù²å7Ê +_ìaRƒô÷a>’ð±µðrlç3‹~çÀÅoÝ/|$¬–ˆžN·0Ö '!ÇÜJ®HØ7{©åv—z¡€ ËW²ÒñP[`;ô«?½(Ñhb\.vÛú}5Ç�é>vq�ÁÙ‚0מ¯ 'n¬ç­­ä<¯bq±‹ìã Ã’ê€À’G‹Q¸9 ç<¾K&¢*,…Ù2÷­ôÉfƒ.'¡ëƒù–ñr�Éf^ÍZƒÉ«®±÷-‰z­7¨lÕ�æ×ENûMp�IØ¿‚7‚¥Znмº©ºGdØf}Ú¸¬ñ1þ_# Úé›ÁðRb¿iëH H‡Ë¦Bévàoˆ­Mq!0þ�œÑĈX g|{GlÆ¥Äê…GmÈ^¦”átó¼ÀO¼Åïtä½/ÿôüتdh¨¹|ŸÚ�a1Š«ï‰>T{:ÐȾŠ6,°üaÏÕÏ)æB� Í»3bÄ~¯;Å] ŸmÞ´9ª29ˆÚÏ™Ìõ9eÚQõöë°ˆ/öžÈjµ¼›ax1¯ù&WHb5ˆAmíß_gÔCWþ›³Ø˜›%¿þhÈÍö>´ºdryì#Ïøæý{'õx(­Š$SÖ¸�9Æé;)µU“'vþo¬âTANL€âSåíÓ˜æ§`UEBØûÍž8ec$ûÅ ª]ýVãzóD'Íì‘æø²Pÿõz…^D'}@ÏÙùƈ»úº‰¦”ÒnÀÒ“ Ùh'}}±Ê½Ï%—jÒ�¹Ùê+Á®¬”8û”!‚i¸OD–+žDŽƒùÍ÷ 4Ó¹#ôNW6ê_NãÈÃ]–ʸ&a1B«ÍÍ%©¾YžÖ±E¤à+®ÅöIf'Q%�CaèÀݼ$ ÖÆSçbÕŒþ󩱿ÞÝðF¼àã/åã4Uÿž$gB8mr�Ûo|Ò»ãÏ z›ó³á†eÆ@Zà½Ú°-¾à¶7îÊËD”T_<”°Žm}Tà�pNøøT0Ÿ7ð°M|E+¥v”Q¶ô±¢¿q»u1x¾]Yú!ò½ÜMzŸ¸—€KaGÎþ<úÞ•’µòOJZUÁ,TóoäX”â*>~EÜž˜··ÜÙU_–PoÀÊØ7y‹h¯î«/Ç�YO,ÒñßÇÏY!y¤–ì~´ B¤mxEÈSM_ZJm1 S†Ç&}u]?F<Ž7‹x.Z^à ÿ¶m:ǧÞ2_.ÿÉçƒ endstream endobj 1645 0 obj << /Length1 1377 /Length2 5985 /Length3 0 /Length 6929 /Filter /FlateDecode >> stream xÚ�uTÓû6Râi�PF÷èînièÜŒØ`Ý�" ¢„€H ˆHI§´„¢ !ÒÍÆó<ÿßó¾ç¼ïÙ9Û÷sß×]Ÿûº¾ãd52T�¡À5QH¬ HX¨f`j%  ‹89ÍXø_3€ÓŽÆ PHÙÿPCÃ!XœM‚Åá PH ®‡ PD (")+"%+, –ù…–ªC<0 ¨‹BÂ1N5”›áàˆÅ•ù×#�Ê ‘‘‘øTq…£PhÁ:Â]q¡ ) Š€c}þ‘‚GÞ‹u“òòòA\1 ÚA‘Wè…À:Mà8Úþxâ ÿ3À 4sD`þØMQöX/Ä\P8ƒ‹ð@Âàh ®8ÐTGhèGþëÿÿÞ P$òït£%B C P”«éƒ@:í.p ¡¦>ë�B�°_@ˆ …‹‡xB.�8ÀïÎ!@Mc 7àßñ0P4 ‹a.¿Fú•wËH˜ÊÕŽÄb¿úSG áPܵûýÙ¬3å…ôû{°G aö¿†€y¸ ™#îpõ¿œ ð› ”–‘”—ÂÝ�po¨£Ð¯ôf>nðßN‘_fÜ~n(7 =nxÂŽûøa žp íðûߎž""@Š>€; �€ÿdÇ™áöθå£Þ@°0Ž{"@á_Ÿ?ÙâèC!]|þÿ½_!U#Õ;êü&þ·OUå ô ÊHHED¤%€RR2À€¦1‚ þ¶!üŸX¤= (ó§[Ü5ý«cÏ¿àù+^à?sÝAáX òü‡ä6ÂÂPÜ—Èÿ7Õ‡üßþ+Ëÿ‹äÿÝ�¦‡‹Ëo7Ïoÿÿᆸ"\|þp¤õÀâ`€ÂÉùßPKøÑÀa×ÿöê`!8!¨ pd ‹ÿ±#0šo8Ì�…:þ¡Ì»ù/©¹ �p#ñëÝ‚‹þ/N_PgÜûƒãåo'ŸÖÕ@BQ°_:•�BÐhˆ@G'QܾýDp‚„Á½3(B¢°¸ nÆ = øµV11 . åõgY8àù¡h4Ng¿i€+þ¯óoQÃáÞp(`f• wzÞtT¥Âä%øí=ñç/-1IV]ÑX®©g~ŽúW³´ÆÜUïÃÊo¤M¿ˆ�ôgâÛ<ò¶iË ™OÓ~ŠÅÓèZTÝÌë;Þms€ß†¡†¥Òc)·ß"¿&s?¶œ<‹�j[©X.Äõ¨ø °[xèû5<_»Ýñ=§ ׿Ïî�² X¢PÇ$Ñ.EyéM!ürÑý±þ·ÚÏvÕª?÷Ýc©9\cª‰üV¼ ê7ïã'B�G°gc)fŽiñ5Ö©^€=¶‘Ïó�;#Žºø2â9dç‘ø™nÉ\ÉZît�ÈZòϧ/‹–Zëu‡øùÀàã#vއ‡H- ´–ݬø5è1C‘ÿ.˜!Íhn7l¥ÑBk±û Uh¾îGÊjy¯•�ŸH™>'ƒ` !XþÆÍ›�¶¶Ø5LAž±Ç±ßÝ€ÒÇ$�yTe3OXKVÜ^®„”K˜¿÷ÀSŒAt\;„˜+;JÀA6 €GzÇxÆÅ&’èëÖŸbÙÏzÖ}»OÌ:öX壸|èlU§ó^{Ÿ—ܽÝDàÎaÝòþˆ%ºG2[\R[˜øå…ç5íà,¾Dü¶$ô·ó¨ùpîÐ/vÍ’“ÖC­©Td6V®?­L”žû4f±j%`œyÉ”?ôf÷L^ï×½hãËi1ÖmÏ:ñƒ[ƒðÊõ²®ï•BsïŒ×ů�Y‡úŽ�Š€åÄ—BÜìVëîl¹�–º«ª©È¹§cŽfi¹FͿϢ¼›|ÜùйֿpY �Ð8µÛ¨6xíãyU§“xt«]"yójÃhF܂¥?çœõ8ïýXEhGL¡†îj3ï=¯(0Ë·­<‹Gf”•G’·¢í©oº>=}BxF°¸È—øõ)­\_ è4Q ]rOñÄ6�l?L¹Ž6½q˜e¶ËÖ8EUvÜ,¼”:ÈxîPXk`û�Óï–uKI†ÕS†‘¥±¯ÙÔ–9oz>ï¨?{1%ÀõÊ‘µ{&ìELüôã†û¥°šÀT§wJ¦²øœ(PÊb`b¢+M5Õû�$t¬�Ð@]Tr”ùt©�ѧ •ùF67bˆ5*ž’M}(Gíʾ³›ÕÎ�טi© ·ñÁpÝq °. RÑÚ]Œ£opút²ôci!2Ýä „¥²bû�ë6Wâ«WݶëQEH˰Л=Ђ¥ç\M7$ÙÎ/§­¨OUœ N�V[ý|JÅÑ=Ý7[‘»£N§è5crÒly›KóMºs±ÍS2+Ë{ÏöLCò½$û¯ö‡¦À£\Ž€YÉ3 S ™k—´Ù;½ðNbÞä…±ö0ž‹ëVÛD^Ê_;ZÄÁ�æ)Ý Íר#[÷ÂH“@3ë¼-¬ …[�Œ«F-#êï‰%‡÷¥«Ì·‡rx+ÝܬСSapœ¼(K ,7l'®S^�*Ž%iˆÞ˜�Ôɶ}m²ÔÓÊߛԡŸa/{-_s�ɰEa ÔŸë#8§±—·&O9ÉÒL!„çhG2pSÜt’±i÷rŸzútŽòéÈÁÒ�;Ü+9‚y’¹¯ š¡º½ÈFÊkÒÁ!ò.wQüKÌÓŠˆçé²íw=ÎÇ–^V-¿{ã[§ÉÆ<ÛÈF÷œ{ÔBLð»Âô°UP säBàg�mx(SZô{žEBEO£Û\¢.…̱;nt¢:t·ôÎóT¹g½´Âº£î×£StR—÷hGÀ§›¥»úNxV7}ð‰ÐÂ+ÒŒÚG]»y¶^5¦ËÁ›žØb¥s–YÍ9¢Ö¢Û (5:ÿÓ04Q¤’“D³£«è°´¡ÇH쥫gõ½ôŸ%ôó"ݯk ™¯hL]¯Æ¼:„J¥DúL1RO&eBî.´§>å¹7pAžç}çÜæc2–:†zþ”<¢ß#±mò{“\.¿Á#aMë’j#ó<ÉÖ‡'_ôeÆï)S2X¹+> bðî$¼%”›ºšŸnøI:§²ô61›bÖד½à²RS{ÁW†ÁÜÔ7¹ è­²MÎúa–g5û¬L¹?F”„6©X£ñ»ÝÙKîv ¶xh=ix8†ýüt ñ“P  Á…‡º[+󓢈±90ŽÆç%�ß™Ûø.Þ1OÖ®ûz„Íî]ø—ÜzŸfE@˜x W9|ÿ2§¼,RšÈzšNQöù‘¤åúÌÁ{ZöŠŠÌÝ@³Øöàa¢ÂêSÅR·éP�ÅÂØÛ”âÉ'šî±ó�åž|]ÙÖ~/9wæP~VdvRx;`it#Êg0Ùe�÷<9Iþk\}3žÎBÁ¬B¦1jh(ê…?¬Dã¤ýwü"_r™­Ãý�ågFÂD‰Á¥faWISËK¤’Îñe�û #Ku“¯Õç¤ò�ÇÞãWÏèqß`ý>y'¸õØ =Êf¥¾@µþ�Q¨í¢É^kßqj±%:©:×88/�Œ*‘�öâ“o¡âÙÀë¡píÖä¬Â02”øq#�eMályA F 4–©\e~ÒTmàL=ø�ÿ™Ãî稧šec<5¼:7¤õl”Íçß*;þp½Ä¨¼yËWúÑòQùÛd&vùæ¸?¼óÄn9™žÖq]J¿_z4ÛxDc?;ÅÎ_`ãL^ÏEÅŠ¤ç9ßµP´õÚn¹jÇV¾ÈÕ‘¯î›;íR:y΃rtrû?‡”A´|¬TÜ£_Ü%É•Ò3‹VúÂk7óÒßð�gI\”e y×YÆí§Æ+CÄ‚P��¿ôJޤž¥]´¤gé¶ æë2ãäHšÐËŽ†ÞâŒZ&ï¾#gåMuÙÀzDÌ÷€’¹úá𙘉Drc²ýèîZæ±é‹ÈÞ3À—úÓÕýÏfò[ž§ ªO‘Ó{èâ6~䲑<ÉÛùÌ/‡9Jás}»¼F´¶«E²ßT4#¿D£¿õð ߪ£É¹Þr®˜Y8uDb²²$Oî5ÖôԟͳÏäÜlcpq™NízÑx•^ójúÓ†÷ •ÚLg“‡Ù5©ÔÕ?Õt)½É(®}æÉÁÒ¸HÐI¿.ž^ú¬=f5Âhãkt BÔ‡%óÔ§ž†>™Hš€4eIÑTßíúñõ³Øå©XuÞC*³IÈ�J;ŸtY{”�9¿W¿Ü(yârÑõÈ6t¤Y(ø¤1Sœö�šù=;âäÜÓJõÖ]¹Éwœr=»œIe#Ìg ño\ÒÅÊÛôúÏ’-F4«Ì7F\ñ'‹\Ð�Î_ÔÐ驃àÏ;4DŒBx[)©8×…v—¿©ßx®0lMt­ö@±+Í#ï^h“ä�k‹ æn]Œ‚Õ �ŮҮ¯.DedO!›~ãÕeA{^Ã[VÚyU µÉ¡óiyIbì�úá(gsvË„a(u ms¨²á#|ôSâOÕO*[ûÙݶºT¤ë–Ò©V4XIjNù§/Å­2>s ŠÛØ)]™³O‹_#;t"a”Òèâå—úÂh˜ÚU盓Fðε¯Ü-P@ÆÖ~pCJA5ŒÞ0ÂÞ¢uÐz�ßRºŠ �=*s-6‹Iƒ2¸4ºÓªš­/‚MƒA!B~4To(T%'¼¥CêØÎò’“§ƒýe¤Å-Þvìè¿|S˜äNÎáq|Z¿OÔäâlà>¢qV¸p*¬ÜîpÄ#Ì×9ÍX´Öšÿü$6üüÀc)nfÞ/;u#Q�&S%ÙQ•¶þ%W…1�\�0ù‘)|Èp Jó$̧œ±VÆ»Pëiç—u“PÐÕÞšû¤þ>dÔ{…\·ŠXω$ókã4´Ð8\ŒLZuÛ@Ñ!%£[nlS¾¤µÛuo¡t³x}nÎL ê¹–ÐÓkª12pýŽdó»)ª‚€4R"K·k�÷J±Þ‘T\¢ŒŽ`wŸËY'G¾Ù‹ø HÍ0=Ö™ýç箄«ªŒfh&õ$Q¦LÊ�n±&'xY>Ñ“z,ˆ “·k_y@a¨ÝSºÈ˜TðÜ3lº\bý5z�Qé\ +x®¹£ÔyÆ$Ž×’:•+ëð“ä(I1†rS¡ê"ë‡ëB>KÁà@òfyD_� äK)Ø|õ)W½$§ÜeÈ)±é8Ù:9h²Á¯+ "›µ=LŒãƒi”.D‡öÖ&‹Q å¨9ø1&*9c�ÊÍ%Çmöí=núÈ!ùæã¡õVœj³ŒbbjWäºþÐ ×äø»úó–%¹(Ÿ‰þx[f†wV,‘Üפö{©Þyº^5>dØ@|^~Úè±]}¬Z>˜.§sΠºxPÕòöžå‡Ø|q;Žõù›/ت7²ËU›TMXÇ¡dô ÐЕ-÷�¼CÏ‚0ú«¶�5��µùei­¶=Äj1]“ù‚éŸnO¼0r¸éâH[Æš"ÄF´6‘|tE$Ú�‰4>þ|/æÉvŸç•Ê—€ã©–{†bÄKûSÂÚ|ê�H¾ïõƒ$É}Ù‰1N|#³¬<½cåñÁMìÚM§ž ¡»¾ •DTãUÚOR-Þï]¯àa»nõ� €Xù]¦sLF{?A(!3éàôµ(ãËS¸¢/˜ÕæñýŒEig3µ¢äàv�ÏA�M5y?‹Ñ *hÇjjÌ¢Ngïٓɧs•Žø,óíÔFŽVe�¶ò ¿Ö9Z?çîýÑÆÚ-Ý KQ"²+ºK*‰öþ·d‹t:©TiùnNiu`ˆòÔÇæXlA;!2SêÏ*Á�Ô iÐ×øùŽw¹&��^ƒ|$÷@úÖï*¯ŒéŒ ä�©÷Ð•ÒæühŠ—Ÿ„Me×µå"Æîå�,GU¶ Ù/ øOc6êyƒP)™Ky†üŸ¼l)êé©g®{T–=+©ÊÈ+‡à[—õÎm¨¨oi¾¯Ä`Y WT†Hèz¿·¤ÈÊÍ“]ÂæK+Op¢i?·Ø™ÚRö…v€Æ^[è™2ySÞ2¯®»6Ðo¼ô꜡ýðB³‘Õ�ú°¥—ÑïøŽþHà¤aBßl�TòªÝ{µ·}{<+ðˆžÌìØT‚þíµJÜ®ù!Üp¬ ‘†˜WW«~Fœ”XL¿UÏ™Û#iwÿ+­çÏI’’½}Û+µ)Î2�JlMœLUR€+•2*q<†Ñ#‚‚éÐ…SK…²†Ëo'Ä·ó§(�ÙVrfé¹Z=ž`J¬t0щíA%Ð<¦›ìBP³ÛÄj‹å³¯Y†ûö¥Û®TÞ‹N·ò÷¤—Há(&ÝËx¨D �­)–tU@Ð:ˆ�þ¼uþ�=Š:Åb»î²àµ þhŠ ’ÈjÒ}"ÿÂ—Š¼$ËmC,ÚßÖ~×ÑïôÐú!ÛžìÊWäL^Pw}ÈNÁó­ÛlÒßV¸ ‰ÝôJ! 6šÛZ»ú@¥i·®˜/óºrØÝf6”_uí«w§Ýb¦F– Óû2Nísà�=æŒòŠ ˆô;«“ŽÇG¯Ý”¦!¬Ò•ÿé×~r³[,ïö‚Ù9›Ä�p(Åô¶Êwjû–u�W1F>ùÉÅmæ(G ÆUxÉ™“õ†@¡²:+£¶ÆñrÜaß0clìUÎÛÞ/å_?«›�2¼÷ñßœçkXíÆrÿæûžÂµ�¯=›1 |"ÂRw4î«â)sHNZŒ¿ ýuù'ZSÎú›¬‰eùmO˜ÈËü�7F‘$Þþ½ùÇX×Wík ]=&æŸÌßÕ½óé“UÒNäIX«>¾i�¿¿CÖÜ5�ú^GÆÁ®7»¦ŠïŸPTS÷(KÝ2w#sq#×ýh J† »Ê0Ÿ‘¯ê*G'1…”ª§¸{ÔàÏ“†êœ[Ìt>Ùƒy¨Sл\¹µßÌc¶\7ÄýÉè1iÈq¸æ¨¶>]Àé � #¹ÇËí$y9›ˆmÁì3_^Xy´ïXI¹¯·÷ÇÜGñæàZŸ¸�‘ð &npóé’k×@ÃlAµÿç»FQ~ŠQÆÞbaï’{æ¬Ônå¯ì�î(Hš¹~t{0žn šçQå¿£[îÔðp|uçJknÅ Ù*¸ò¸ŒÔc÷%s ÝX!ë yâgY²;Â{NÖÛB·z¯ dLÙ¸ax×(hÀ #Fƒ¦šMEZ`•dÃÖ"ñÝKoË8 Á’fä‘Ã×R%ŠŽ©«»¼± iñ^Ã¥F,4|ÜE�$@ö};’š¼žÙ#ê®b^²exÜ­;Æ*ÝÌZ¶?7JŒT2ÓVxjñƒ /µ[ÜÌ hÔ7í¶]�cŬ âX_s�6ãÃ)�óúÇš�!<‘_Ö#F­3hú³~Lšúèß]-Ötc(T a ™[�[Ø8’,, %6ŒáöW`Ò×—°£Ó´ôkkiZU•á+v°p]¦Ñ9Ka€ÞT`äxƒlÏ ÌæÄüpeºÌåø½–Í—æÏôÖrÃuoÏ:ó-‹)Ù²¨J�k-÷÷ÙF’ü?¢³8ÃÏ634ØïµßùÐïßF`x¤|ëƒÿ •ºŒûS&Áˆ¦û9©|Ý¢”éÇãd·Zv%ü1?U?òBÏ{§®©ðcçL–R�ñÝÛŒîÒƒçok.1,‹CcZ’Û5ñ]ÈÍe…—7‘æ|*,\—Eèìÿ^önc endstream endobj 1647 0 obj << /Length1 2566 /Length2 30014 /Length3 0 /Length 31498 /Filter /FlateDecode >> stream xÚ´·eT\]Ö5Š»»S¸»»»»;…[ ×àÁ%¸»‡ànA‚»K @‚'û*O¿ÝI÷¸ï`@1—Î5÷:û …º‹„µ«%PÖÕŃ…ƒ•] ¬¢éêláÂÁÎ"éêd àdegçF¢¡‘-<ì]]¤-<€‚>;€š•8àdg@¢È]€ °Ó`é PzXhûº9ôÿuWwK w°èbkïd§H¹ºù‚ìmí<~×àbaù]éw¶$+@ÑÂÊÑÕÛÝÑ`áb PdUa¨ºzƒ�özW€%ÐÎÂÉàjÐêt´d4µršj:êZ ¬àÂZžnn® ÿã"¥¥­#Ç �–PÕ–u™r:ZÚ¿j]Àüm™ªÚ`ÿï>àÀßé*2ÚÚê2l¿gp¼€ wûßmÿ‡-˜à5pª ÈÕùŸz;7A66oooV[OwVW�-«›Ó?ü´íìÝÞ® Gøtþ#Œ§‹5XN;à¿ ü>€²½ÐÅø;IÖõ_Ng°”à$°Ýã?ÄÀBxü®éô¯p€;ø_mì,ÜÿÉUVWW8[Ø»x],\¬À�žîólào 5Ý¿Rž Ðï*ÿv�þÓæßÔ%]Á“;ùZxÿï‰Y¸xºûý¥Í�måêânïîáþ¯Š@€�½ð7{÷ßgfïò�MEBUAVFK›E¼x.,*®`u\X=|<þ‰þ]OBZYÀÏÎ àà°ƒ—TÆÅZÊÕÙÌÚé·|Òö`�<\A¾lÿ³ÕŽ.®Þ.þÿkµ±w±¶ù­ºµ§›Ž‹ýO ‚ôÿÅ‚MHl¶@;øô±²cûÝêŸMùmæømKèïæê°±prÚÛÁHþî^@€Èèÿ·ã¿ÀÚÞʼäàéŸê .6®�™ÁLþíú¿ã§ÿç!e?¡Ö®.N¾k  ›ª«xèÿÿyÆþ§—¬§““ª…3�þ¿ýß( g{'ßÿŽûŸ=àoªôÿÉöî²ö>@ku{+»©ú/»‚‡xé%\l�€àùǤóû9r/,øÒ±ÿ}gX8¸yÿÇÞE+G »;€÷_i@°ÿÃ,üo¶6uUm=5¦ÿY—‚d\¬\­í]lœ<¼ ȉ¼œ<<ð*[}þY«‹«8àæé°q!ý>H^›ÄoÓ¿/€Mòâ°IýAü6é?HÀ&óÄÇ`“ûƒ8lò€Má÷SúƒÀý”ÿ p?•?ÜAí?ˆŸ¬Âî ù�;hýAÜ6í?ÜOç÷ÓýƒÀýôþ ð|úÿA`ŸÅ''ØiamÁׯŸ °Õò¶úâû¬\�À‡ÿo ;xë¿ X4àŸx0µ–ï¯ð”6 '¸¾�ýŸ®ßÐëO.p}§?¿Ó]=A§ØþÁJÙýrƒ•²óu³þÍl³ÿ ‚Eqü ‚Gtú ‚ù9ÿ�`6Jñ€S]Àkÿ—<¾ëŸîàd×ÿrƒÙ»ýqƒÕq‚ì]ÿÒ�\ò�§+øÆ¶trÚü%7ÿè¿5åÏü—"àÿœ'ÏoôúKp¸»½Ï_ `"Êñ€gð°ÿ:FðÔÞ®%€YzþÁÔ¼þ‚à±½ÿ:bpö_Í8Áå}ÿhNõ‚þUû¿o õ߯ÈÞ쮎ÿûÛá¬åruêÙ[ƒÿnú+DÅÂdïcľ¾9Àvð׿3ù¯4Þ<eKJºúø³pƒ*N/x?88¸¸ÿ+×ê_¯ñ^à;îßø÷;ú­�Ö–]­„Â2Z#?É”ÌVÁÒ°žÖà‰ê+&ìeÏvHîQÅJCÚƒshK]•åM‚ÒB\ÊõiÂq�^¶;Rkgn¬5Ä÷-‚T‚ˆÑd$& tYuBsTVƒ«z)¾+TpÏçt&w’t&Ž¥ºûâ9§_1¯Ò)�«:7‹`½Ë9Úp@NX>«D=Ä«³=�¯8‰qƒkŒ æÅ‘xŠpn}†LÅÚfÍuË߬áâêHˆ�µè]Pt|BêïpsV¡kȸ߃†%QY)=>EÏŠOqFTæ(ÿd4qÚøXb'5_¬ëPj{²H6 k¦G¼¥•àïOO'|ÂßkIŠ4«c­Z3)°qƒü\PjHÌ@.‡«b3â]+Å‚¸—Îô JM¥ðQª\î¡$¾T8Ë€ŸÇã¾ÃÛDûõ[àXãÅ–I}²‘”ì+%ñŠ!ÇøP­qÓË=5®ŒVÃç° BáZYˆÅ±„ ÖéÁÞÊoˆü\ N/7Z€T§�¸ÜáãAâ¥~àg`ÜŽT•D$¬g¯¤sìþ:óÑNùYêCñ€o’pu@ú.-j¼z¸95£¸€Õ#> Q—om|åB¯Éo&¹ÓF%€¾x¨ÿcÞ3?Ys,=fIS4¯Röj,ì©“ïO‰.™¬b¯ÊâWN’­;L¦‹Á�àXtiþ†�{qa>2€çÛÁþwêÇŒæ”ÐLó†h$+—œÍËÙ¾³‹›ï«C²V´? º>>xÀÞÃÜš™NC­%™ …[)ƒ�»»èé±gÎ9*T)×�Žçú"�¾5Pûs‡3nâK#Ý®�Þ±ÄðEÿ�‚Äa!œ”�Ï\ – ŒñåC‡s`æ+J[ùsâeÊ�dq�šEåbEh‘´ÏìòS�¾¡öT$½ÛSÆþs-±Œq/¨�5´|Ï™m�V÷ë¶:•p÷h™R�­g„­[ʨ_dí#—¹ØÇJ¯Q·1dYC­««¥¬ç/Ù¥ðù(IÆÔ̔⭧Ħì(oùÃᾎȤ&}½ûÜÙÂqÊ¡Ije„ƒËù~�Œúû|Ô�`F4¢Tž®ÃØu4¥nWVºOÆïbP‰Íc7s2l›”¸8¼·eE·¶>,=yÉÆ1‹‡ÿÍ)ù-hK"L"›õª*·5ó^U*–ïvëˆ.享žiÜíþß1~4à`/¤´¦q/ï½�®÷„—Á+ésBõ:t6ø´-rµ„Ù-¨ê,áÿ’H·\3Ô#Zj&LNÊñ‡ö"¿‚G¦½Aª¢:…<κ�b!¯ü‚��”×}V¾y¦‘j;ôxŽØÞ}¦DoLâ†=?¾ønzå-š^ç—.T®³Õ.$T¥Ô ÇK/×ˈCfÒ„DÚ‘ëZ³:ìÁÂcWÁ°Ô”2Ý…¹ ”øÅ0û*ö:*¡\[RÊ™sãi0ã;À˜Ó ²çµåÄé GMeæ*u—·¤`®ge¯BìZ½µl¥í$%…ªUÜFÖ¢Z-½¯Š9&.zQµ®¨Ô¨õ4 ý@§xH‘ît]™ü�c½šë«\ƒ0A¸ç·ë1‹‰¤]γ.)Æ�Z"Ÿ�µd´ˆ>õ¼\/ýúá©:5N•Ðð�V‘8‹z;«t0c}ð3·˜�!,ó§žN]é0UVoA}ü7©±AôRqúe7 ÎSæÅ¿!¹BÙøò=IͼvvÌ7kyR5¯®TbÎý羊À¦Å0¶8™¥’hš‹sQ �Õ—/ìx ’ëfn*û&™"äÛ1B&”ÙÅp”ÎÅÄŽh°õÞ­�³„Å¡¤ü:vÝ'ù TAÝ–ý ™òúÚÄÉ{«J[áZOÔÊÌ4tŒúQA-áñpž{*Àbô|¸(ßÌÕAõÒøJ ®hÖpóƒ¬_f#1TÌ<õâ·gר èUªvÇ7ÌK‰£¯ÂG,õƒð?™§BÕo:a–PsœýšB—ÖU²$�E©x¤àúüÕ=„hR¾ñ‹“ºÓthÂ[­&UD» �b9C;i‹è^§ýîã&^КنáQ’Ʋ¡¨çW —<ƒuê*–˹­q"4ÚòµÏ°HïQ¹ JX¯\Þ•Kìæ漦-X¢8å˜0üy$AÛMJ—¦k:_µÆyÔ<5ÓÃ雉)/-A Â`úWfÙLtÉP"äñyƒÕPÔ€7vÈÂúm£üEæô^‘ž£–("™<`€ík‡¶O>Ô ¯0G²(µé�¶ÉJóHŒ˜¯ì ¾íuÙd”6£J£ÀW�„#(¡qé1�ùG `Y牡äÎÆè麯˜ÖÍçàÊ%ü{2Hžw§Ëƒ,¯Z¢ÆAŸ†‘ÃZaŽÞzÛÒEq)&�“CMÛš (öËí«ÒûeoÅ©€ÐzÚFáTΤ’¾š;\J{AÉ ru˜GŒ«•¤@ÃÓóZÌM=)ëÇ¥£J%Réº÷9»÷VNiÐôéA>,®~Ňkºh^g QÁÙĶ˜LÓÞ`•m´øº¿ö­åŠü^+×JtKmVẎ�stØÃ¦Ù²|LyĬ¤TŸ,„ƺÁ’ù)çd«Ùw…P¼t$Ä’wŽÎ¢ÀŽšhvŠ(n!Ý'?Tˆ{²þ!^KZçJƒ&jè�ˆhÈ“#s?¤ÈOTC.‡ÁÌ߉�è^2¾,¥½ûnepžG5úÅ­IRF˜BvÏz¨-¾Õîqz:r5¦‰Ð>Ÿ“; cek�ºàÁ…£!rhð{U3„E¹—ªNÀé» =FÉæ›6äŠ&�lüüx‚”Ý› ¢EÍX5åÐø··¨2­ãØ]š/×å‹�{2›t(—”hÂ{ÍʰõN��uØbë;vPƒÄ:èÜ®Jþ§G)öqžÝëyͯÍ3nš}�ÇG|°$:–†síé.ÀŠqÅnŒTq­õjÝFxC~NJxÍ9˜_˜Ò§ñr%¢Å¹½Œqêê0^›Æ¢‰í•¢]¿P×�ö�áðæ«-qâÞl¥\¯â6ÈŒ·ª!"œÔ„¨$Eöå¯Ò݉M¬ÓWÈY^n×cƒfTzkÎ@yœÑ’K ¡Ó‡Oí¬'1°"PXmƸóoY—pÃÝî}�Õ(ùìqC2§Ñ¹×Í~áS"NÈÈ—P̉¶l£iоR§™åfÜØ]'¯8÷ß™Œx*¼ùW3 ž£c‘ŠC,Ð3_ÐGS8Y.¬ÅˆðcÜÌæ $Úx|¡_´ŒâÙ—°A.W§~i¨í�óNMèˆU8ËšÞ2…¤õ‰–ñ¶oMƒÁþ»(ýfNE«~$aZ¨¡hsœÞ@�Fóc¦Ÿ '5Œ1„ÏÛ48öÑ;�Pf>Òæ+ó­†óôp[ ¡à"\õ‰n ôº™Äž™ß?ÄC¬a¼Ïîö.ãGtz_IÌç§F-ìÔ7Ô²:6›_†HNÑa X@–9®Ðö;¾·6ÀNúú•šEy� îììUöèF‡@:ì)beºë}A“âvË;Z�!qçôN-{$ÿo…�²—€±Ðá½dõ¯'—µÙn¢*½ UQ´],^©MG7�ÜÄDS¹¡ehNÖâün …C‰švãűhÂì6>Ÿ`¢¤ì=­ ãáìzĩݯù¬¿‘ñ¤ÖÞzׄ) ߱݇ñÖ9/Ý:WáÆßŠ-V §…Œw$™ õ�¹mÕ”æØ!òNI‡‰8nñ0Oûdr¥AÉæÍb2Å`7Q Ò÷Q?�_#¥”¿™'Áæ<�º²ü@Öw¦É@i¸¤é‘Õ{8¼¨èc…C–_M>NãæÛ!t¢Ìc~O‡ÒËœe×Jkî&L1u2þG„Ðf^¿T‡èxàK5c)�{6ŽR\sQ~é¦H¿À]4¤4*¯‡ÒÜSëéõ蘿[ÑúDD½¡~iºQ*ðúôrOˆæüÌyS°Ì$<~Zk ¾CÝP¾$6g*P¹JùjùÃhÎgE~[EŒÒB§;�ˆ÷ò!à>RÑ�PWf “ïgh?a{»VÊ‹#b„€ÿ˜Q!3 T¢èÁ®�L/Ç^"¤ãÄ´‡F7?Ä@·Áš¹¼ÐZÚ>åÝF¿Å-‡×³2 !éó¨°Šð\ø° kf ù×j‹í¸³T,`MYŸÌë}½ðúæÞ‹s›wšÔC„XZ? éQתbGM]F§Óò†Ð©àB-½¶�ÛPÃÃÍÛUXÑ� 5g ýè']³Ø«Ã+­=’|Pîk2šÕ¸YýÒ„;äÚèqèR¡MjâT6ÍD™Añ±N†lñš×eçwÈ_4X­èD‘Š«mÕ°…ÝÃ�÷º®£èOÎô«ŠÇMB™È<ºî¹FîÕ8çCõ­ynü‹�^9 ®Z3ø‹PÂF¿‚v´Mh!Bí§}ÕÓÓô¸Æ6„,vI­—\âÔ6ϼU Co¸e[cŒã)”èx²jÕ]¢Ñª±tONPsLªIÓ¡B2wVäã“¿û¬LȲå ÊœroÖÛ`Q2æ_É@iÇ”ˆÊtÓ­é§;�`:�á Ö ñQÒì wQˆ\qs» €´ûãAÆ�¾ðf§g»H=Ó±ë\=Ek±ï?h…± ªÚ޹ß|¸Â¡˜ìˆ®È͹fÃ~\È•¹B‰–ï&BŸjâÌă¸9yø>¨¤(ŒD°TùåLߨï²ßÈyÁÇWi̘~åÔ““ˆó \kÃeÿtA¼7oAò`­L}ËJX’ ·"J}°«ì‚6ÇŠûêQs—¸ýÝ÷�’ã  Nà�è)} )ƒÛýX¹¬› ¿�“?’?Æ%j¤?è6p8ƒHÞ„\Ø3}+—¬ÎÄÏb^T¡Ç;pÉUɵç�^ú…Ø€6ØNLœ!T#¨(öé-ç†ÉÓnÀòÇ0ö™H'Ì�î@tF¥þz¯A[âmws¦É“í]°ËD5R7§„ ïb}6Ö ­�ØÇ�ØFf²x掟åSË!à'ÝÆ‰ß9¨~¦«9øUj{Çô@<ˆ—$)´©è^‰ñ3³5d¿®7j5dúý{‡O•¬^0£Yuˆ(¬XµfˆaÉ¢´¨—ñë �†—wMÑ·–~‰–ðóÉ Ãtbí©ÿ’‹> ³Øé´ÇEñ/svs$p|¤=�´nEùüHÞ? ­mèÎLç<ü]Þ÷´’CÓ§¡y»d;@Hº`be^€Ë|)(d�³FÞ!6'\Š*,+°é{1*rÜÕMîd¨†ç4£è‚7!ô}eìñyŠ×Û²�ï&ÑJ·/Bü°…ô!à i¹ø­¨å€ þïuüÕ]¼±w†ô,̰­ù:éÙGÊ %¤.š0×vÉé£G¯¸3Ûq5K"éI€Æú!÷éxiß=»ýài 4ç–²®²¦Æ¶»y4‹VôÇÐ ÝÊxmˆ±U=÷·“`Þ&�>ùƒ)qq•žôh¥7÷³K%m~ÖÁß=—œ�J˜ãK+Š�£ñ;X©ì¬ª¶Ä w¨²a<]ŒŒ‚{*Òpevx[•ËN‘‰i"ÄWëåI‘¥B±Ö||ü3kô ¬¬PÑ7U&þy´�~7äלG%w´˜Œ†nÕ”ÆúÌI+yÎ_ƒü‡|‰75¨Ê1Y§Äk–Y:Ý��.5�U‹|Ö˜cáYJ›t_v3=£,¹Ç×ÊQ4ñR^¨lusyTüAƬzàÛŽ¾Gß�‹±(â1Òj%¢×àÆ(‡?c$ˆ þJr®ÃrkHeZqÄÿ½oøý†Îñ.lÆ�v`ÞÏBå*@ÔèQµÅØ Ôz{R³Ôà­¢5iÕò6 Ã[5`2ÚltPB[àë2XùG¹™† î8ë#¾´ÁQ_h­Á3¯‹·Óz…ïÃôcŽÔ\µíî@²ÇÛÏgôI _>lã×nÖ�«|�ÞSÜÏy_@¤ªNMš)�[è?½!¦Ó®Îk8]/©]=½Ò‡.9´&üÑñîÚcB¯¥Q]ñçSš“LÞ<é9&•¯//��Ã×Û±½7ƒœm"0‡Ÿs¹¥Ü޵ª)OíoðÞP̬mƒçãJª k¿=‹T®¨h˜ñ2Ö1£/êYÿ±Uóå²ïmw+î1 > [S_R¸Ž�슈ÖÈÄ;5I¥Ã”±’ëÅa/—ßJÉÍ ÏÛ%€�^LÐj•¢ Ôí°ûTnk.¯üªT†£ý†m#SF¥Rå 1RÒ¼ŒÓþq?ôdÐ' `ûÃú�Ò¯ÖyX– ÏÏf·ïD~,X*; V~¨°âõ?�X›wÚA:^T=Uw(ò%ýd*RŒ9¥µ3qCYu&µiCõ ÝÅ"Š»¾n9”L wé{˜iœ®¨îJÕ=Hc„�.—èý¶;hMG”(Â\x+�´àxM6¶’¶\Jr¤eÒ6åï’©r® èÙÊwT/¯LckS†Ü|ÐøNk‚Ì…à¡b—´UÁ3-Þ2ˆfŸ!Õî¢öF¬ÎÆåw,µœÞ‰Å0“›N¿ 3Jˆü™•ò:§ŒGl¯Pÿà50„™‚õ6C^þÍ2¥bubOŒá«]E§8�‡DâG¾ÎÕ·NÏP1˜þÑ9a_4ª¬ÂÈVÃ;=AÀ^]Žh)š½Çv}!e½wMYð•%"x‹\ù“Äô˜§ŠÐD†LÍ‚›^ŠuØDÅ }¦Xk×é�H�ãh‰a)c1š¿hú 0LíÕŠyyË÷kÂ.�»´þ�.ZÏðç]û�éb}P-9€XOb`Î�á6àóq ÂL¹ˆ:žY‹ìœ#ƒ=€Ô’UÑϽ™ÐɦqgØMŽ™SÞvŠ]¢{9üTHX<õQhÆ“ØÄÐ3¦| ëÛÆ„#¾(ëáÏjæ|†æ§ÃXÞ¼ƒ¹ŠaùÇÅzÖªrîúúýVïHý4‘¸ l5rJþˆ® ²Xú.õÛŠ�<š‹Nî㈜‡äY¥Ï�%u\îÅÞFŸ”|ö„,÷‹ë8»Aª#KÐs¶Îǰ´¨SþtÕT_U7V/Ö"Š„ë-äõ<˽�Œ�óž´c�ÑGß0\q€B˜K�Ù·hÝ÷¸¬|¸è}æ—¶º/ G€_Gzäi’OpB*l6÷·‘¯Í¨4í‹ rwžwÁk[ó5¾"Ù¯¸�|Fk‘ÿE&—á•ü!&·A‰ì“ýŽðB¿Ö�d‰>yþH„ï–ÕbDYhJçýñàòÞ¯z�] zæý¸„OZŽÅƒyè–±ô/�”…RŒAücÝ6!¡ãÑ�ݱûÈš ÕÉoÈÊÞÜL2Í�ƒÚõ� ÜWirqÁ< S9þ¥ˆÒíGá½çüÙÜp“AÁ–K¶·Q�lv>Õ½ì˜F)‰Øä`ú5úisyÏ숷"ÜÍ… O™h>‡×½ÓöúÀºè]ìKˆøJÕ/±ZÁ ü ”öbR”yú�{.•ª÷ÄîX=ŸJ `¿/[RxôìW àí+å×›üÕª„D®B´Œ2 šä"'hä0ù¹{õ!>ˆÑ2©¨`°ÿi5©Ê<Ü•ÑÁƒ‰ ÏâÎ/¦6“)æòžÍ“8“|¢ZÉ®@áÂÅ GIz£3Ðè �FàNH<ÿ%)Ïû¨ZA•¨TyÜËØgzÛ"¡Ò鈶MßÂ:žîm¢ÉÏ–ŠÄëÙ^ó½oL_C‰Žºx1'DÕEç¶xíí„Z|Oe¢¤šLáÐ3näÕxyL1BJ�É£«ƒøw¨hÅ„Y|x—5ÁRÍ1?aÊ=‰N¡b|öiÂi³íÏè ´mâo DŸ$T.2£S>ë¤q‰t‡Áî­4Iä-Ða¦¶Þ¿aÉâ –$PØø¤>Êþ°M>¢Ô½½­;­”1 ÒlÔU]Ì‹¼ÄCKœY0:&ðA`娙TòXý¦AŠŽá�Ç{�•Π)ïyµ¯,Äg�{'(U tÏ,/»Ø^÷¼6°vB.¡×‡öý{8qh˜rÕÂkhØ" ½™�£ÂQÓjä=xõW/ k&¡ÂÏÖ; ¶úÑο–Ô4 %¡¡ÈäIožBºÐ6%v:kT£«¢õÂ;V¤©ßoéxr$©/ß=ÉP"w~o$†-�X=:{Õyá,G,†Ä¡”§s R‹¦öD ³xnüÅ%æ¸-ɳ²ñ„©ECðsÕÞðHå±!A¨[}·ò@Ùn`“ò¼D)÷¾UἯ cà"ŒN ÀõôtdpdŽM¦î™ÏOɶοîvê$­UKP³vrI©Ë ë$7”\bÿ3c‹äÙOƵ˜J‡ si-QgýŽêk# J_à[ø™rYú�=Œ�ŽyñÑQÞÏÏÆœ‚V qweLØ[ï/ìœê³Ä6w1E�³³”ï-|Òƒà Nô³µô×ÖæÊg¦+Ý|=!;û]Ë«$ºûqí$ôm"0z† JËÛ–}©È~r üP»$Ê5ýÉ?Fÿ,yÀ§xF�ë×L·8ûv#{~Ú(v¶°SÅý>‹Bœ\K¥`1íÜÇi©AÆê|�[åÎê¤N>ƒlìA$ÄË´ 2ki¡¬ž²ÄÑŽ5$âÚ)^7 v}£á2² 'ëÒ ŸSkgƧvBð”X¥çS… éɰ ÂP4ÀVÖ›ª³ðZamÖâtá�lùžþ:½%¾Ï J´¬sýÂ2·)ˉ߶S?f‘.®ßg�|Œ’”:ýH¶O=Àø€²9ß_±È?B%Àns÷ÎJÓ[( â`Í]‰z¿x_Æ€�µí�+µ.¤€À}Ô<=õ>¥lKŸˆ×‘f+@º’É’Šî˜ý´”)®=ç[2çÂIÞ½œúõòO¯¥}8¥v2Ëb1ÔÏÝ´›Ä‰%/8{M\º9¯¸Ë,w X˜ÒV0@z£ 37à²Zð3NÙ¦Xbªi´ eÖÐK¦H`„”¡%õñœº± v¥…®s~¼ZPóZ�º¡"O`À­­ØîÖxI’‡¦òQûlM½ÐˆFäþøRuqÛ(J­¢^ Þø{{¢½e¹„4Œkn�ñYs–�Á¥ñTËÙÝKßl|ϵ Û«~Ouõ›ÎØ)’Fí'?\9 !ͬˆ~1Ëãm¸Y«‹¤ÆÏ‚¨Òú¦:õkvØfÖï?ð“úåºQÙïŒMÑù;}»¡`Ôr(L­j¦�b ûµýÒ㊑ LïÔ­áŽítƒú% )=µÌ)pìfLŠÏ�üDPžY#†!övǵ2À˜¶ßqÌ¥d[9+™[–/ý¾Ó´¹¢·�»êúXtÌX5Þž(í³%qùg×NM¶(qÑbž³‰ß`•²íõ¹ ¾ ’RøøM�é;[{xa‚+Z ˆÔŽ€³Àù™Ò=þš_ÃnoX„ë¥SÊöû�aÎA·�±…8"Ø‚çK‡îçHµ8å8±G oïÆ÷ß²l DXBbØL”äù‡�¾õ¬�;>@å”U+q8GçO/Ön¤2ÖJŽ,Çî|˜khJj­ÁQÒ9éHja]Ñ"é9íjzüL,“y AìÖOï·h ßDiÖ#O¤éª|WÁ@o)ø’Ä}à­àÛ:{¿  Ø5¡¥etLGT%CL$˜é£Õ�-û)#&Ó–Õwë¦@d[(´,¿^m½ÌL; —Å£"G¤âg­°¢u}±ôâ¦çRJ!ÌÅJv¬yÖxâ*+wÓXWlÛ¼[AêòRú6\ÐT€Ší�cb_B*™(m…êz¿A^Ë�6éDcàeXâ_47Þµ+8Æ\ê×oþ(ÏD»!/6‘�q�#9ÛÛn…Ûeâwƒ}z9+¦§ú”Ð7%¸‚"RÂ=ÚÙp@‰+kA¤oG˜·aê•d´.+ØoÇ$R1ô’<¡uÙ>¥üS‡u¸–ËÛÖŒ—Ðf¡¡{GÁ3cGË Wý=JR-/«òŒQ1ä´DœG?´áºQwÃu}á-qÃÒü¹,Bõðe¹„».$ž}뻓D�a�À½R…•NúŽØ›{†^ì 0UH�CÚ�0ã‹Jÿq¢ÅÀi“ÉsÑ0ÈÁC´Yª°´‰ìæTbM×wþ7SµŸZ½¤:°;Û~0%óE>~Â5g¿m“œUø9t/ôç Šú¬~ѬE@dˆ¤ÓÓ‰�1oúfb¸ŽIÓò£Hb02TKUo'ËìÝÇ­·KóÚá ©A9µö£–iWüÙ1yøl' ,_N0Ï|Ìû·)kñ½0øTࢰjüNF‰¹.€'“î$M®@‰õ›´î섞¹[}õÏ!i¥¿rµr,ǯ!¾qƺD�g‡ÇT]öàð˜·à;ÕÓ7°ˆ £¾©Ô¬dÖõŽ"X2…sH‡$Æ™Hé¥0 £«&°ßÓíc;¶ß�Éô€ûBR›9{ÜÏFr·›ÿ~™ÂÐ�çMmp²á¼è¨±'f‡®=ñ‡/×o\àmN0Š+ËüpÚ®CLá¹2r Ž®3$Ûp©˜ûûÒ4b+x߯¾K: ‰lÀ^Ï0#>Lþ´¡;/+œÏ»^âÇ=[,(\¤×z7«›"¹‚e4Š 4Ó0DƒÒ³?¯—«çïâZ›AzÇoðœOª­C¥ÆëMØUâ�ïkó¤¶Ýž¥qKYLîý)!©É"+†èó3D¸‰/� ?…´-‡%ÆžçpÕh 6ÃEï å=ZÒ¬3”oeù¼Œ³”� ûÚ¡~ª÷æF¡,i NºÍ- V‚üʈ5ÒÎÊŸÛæ¨~°pÍW‡Ñoj®{£^žPO[¾sÜÕð�BY¬�C-&ê8_ÌULG†cC¢Œ¦t•]œšjQg–ÝQĬ)S¡$–¦Tàœ7Ekú>g®"pž5Ë"vÔÏ‚|ãµb·È_<äÝNº²¯"?ƒÆQ�™xU1¬{vu?±Ö‰æ:„c9H˜ž°JT²rôªûÉ„]éö ÙYZœ5ÐwääÒ¾yá'…×#A·ðNUTŸú {ÆwÎÜé­òx»‡gú¡@`¨š’󣊡xpÌÊH:^¥~ÿKÊ”Ž¿‹ßD {M'×~tºõgïTmx~6ûdHjtwV2lÊirÖµŽÁÁ´¢Ìywë'eƒûPg¬w¬?5ôò꬜š­âaBû¼_åéo®¾ð—ïå&QnÉð\é�~ÌBí±3@»E8DÿŠ×Õ, a øÄÿ¬ÒgJIX]çè<ïu/øÅ©­á¢ý›¡ˆã°�{Ò·4ÅôáWÛ‘zÖÏ¿‹‹ä¦f_9Í•s“œTM•{»Ú"ã•cí+xŽþÖ¼-‰Î(�_pd:U‹™4Ïeætsrç’æ3ʬ•"V`RÇ~]’öI% há53ztÉÃÚJtSâéNfu®úyý«Â‹�>2Œ#Ýmþ=5µ~‰_�àÉ�ÅÏ´b3kÍDJ—+˜ÇÒJÆð ÌoˆáPé„×=ËêÊn8ùûbõAúh|™!½PIyAzíHk(®° ©‚o1]üÇ¿>jÂ(Ÿs¸°!íAôÈXš‹ùC7 f̭۫Ƕ 3”rq�¾6`Çì ÿÈL=ïZ�É«xÐf¾ù9žËÐÛô¥»ª½ð1×u�úçÄ�Í�é²  HÎ�üVü —ˆÈèЧ±^G5:³lGZ"·Ð3’k5Öh²˜»�óª6V3A/'yòrÉäÏqÌ”$¢@W�F�©¥á1}·¾ºÉ!Z.—£-�M�·/úPþAŽ0M,é¥}Ùaô*b.�ï·|âÎç$hû†Ê†‹ M›J3Ñ,BªÔ.¢ÌÉ�'�Ûˆ‹FXBo{¨wöƒØíf�U¯*ë•É«C6OKƒÊö­†_y�ú¦ôqM«ÄÂä˜ì ¾½Î»ã$|¿öÚ"ïx¬ÊÏô ÓÁ¬±"…Ô6îtMjÿ^!^úR ½HŒ‡»<äïäÉg±¸—¦aþ.ÕñÉ»‹\C%Õ^�Rb€¼‚×îN\ämei¶9Öþ¬â eCùéÔø0“:(';ô\ô–9Ž®k�]£0¼ÇÖ‰”çöhOìú%‚ïfÅs¸ß«¿›B$˜¶xàtØ!é‘#�§§=Å4Iu‡° ²Òýõ²?90†õý×dz[†© hÁ„Z¿{̳°ü.ÑmEÒ6ãûeu?š®I¹¨J·!Ü-¤kªFåÚÙ1½ï Ú�çmDÓ!n–fϘÒÚ1 µWcD“¥ Ýt¾wíé‹O�\OŸ#Ô7f;cþ0»‡�ÊÇ] />-yŸœ=TúéƒÙø ÂÌlý~›z-í)éºlWÁVüÛ�ÅÄûÏŸ¯ùo=’"3|S{úíʉQ—^sËB}XÏ�NG3³ äL�¾�rV•æ~�Å.™ÜEÎÅÙF“FÄVöñ(x`C°ÂYÿ¨ºv¢ä“nÂÁ*@P€°k³C»�?Tµ q¸xòê&&_¤ùÂþ²Ý�Fd¶]™0n@ö9ÏÑ.´ÔG.("ûœû‚ÉgãÎÑëbmª\�$�et_?%XHý™ÐÐ>F&+h²,Fêö4Hiî6®\àüÍgîÜÕ¬÷óNçUûU ÂŽÈíÊ!‘8òæœimï6¿§¦ðÎ+:(#—“¥õ°ûÛQ¶D5Ƕ�s®¥ºa¸ºz]Ü�’í _ËŸ Æé¤GÉš£zƒÔ!1?à*\É3ef¼4 ›»/ë—”]¾%—^E�†ôj*Qú›Zñ¯ý"�3xþ¨þ]ŸØ©Š˜�xBVo`”Þ„è~vÆJÿLýËvײþPÕÚÙ@š–ÜmöRøüƒ ¯DØ woäÙò�ݦã•*Š=+ŒàÍ)“–V5ƒv£ö˾ioq¿ãK®ÛCT,$>Qc÷Ûõ“€A%YEÚRƒ›b. x1Ÿ� (2ÙÏÞ°EÒ[È£}5rÝ PÍF)<ÜýÍŸH7Õ{ùº\$ÛŸˆH-V2ð6Ó¤Y¨Tß5åùƒxh×Yû2‰W�a½ûVµNo×ò…¬#[FÝû¥¢/í½�²©öia${¯FŸ2&CáÂ,ï°þ-ó:CUúA, +Šg¡AÂI7›[c©à+¿%œ0ò¼ÈF²û�>¯´ª"!yaJBÄ¡€…†Ú'�Ô[êycg‘CÚ Ûš¸õsØ»iõ7§PK(¨ï†ˆ0w©H7Ÿc‰‘E±–‰=O~ÌC¢`/bS_Ïz÷R÷aìec–åw<­PM’™WyY5£ñ$›¥F·£I)ûÉ:àç$Ĭ“t¼.Ù×l¶;*� úÉA#áÔû÷ÒÄJè!6–︭ Tûô ?ÆàZqœW¡"ù1K£·:ñÕ¥Õn½‹ü™z,ndžPíZ'BiŠªš´Úà°É¼Zµºà#NÎú¬€¶b¡ÛŃL°ßW¦Ò`(.• ’Üs•:Rôê;hï‹�ž[jmÁkx™· ¡§4ÓKú(ãÇ´ä äY™Emt»× {Íž’ÐpOdSŒþœÜßGBK#…$ÌÎÍ ï‘©OŒ1÷W9dJã&Y}|%á .@v¨ÎEÕ;±I rè=áÏg¹Øá;¨%Ìs8,ï1Ùj¼ºØâO@9ƒó÷eÄt+*›‘Këa,稡°ÚU´/Þy‰hʬ¡ÂeÌ™½– :3²o¤Wûoé"Å«2´ýª’ñ—«”k䣯{IÞì r,¥˜ä{¨6ZëfÖë>~›m9~):ý-dv7N÷”¦&áž“±zµ«?Ò©K#\x»$*ƒ ¼^+¾‚ ÎÅlh!Å]úÖí¸20E¢å}E¥7PÈRF™€ÆÒ‘,qqÔ0"òõ�Wt"áñÄxÊVWY;¤³hÉéÁš·‰'•Ši›©=Ïøž#�’�Ï=‚í9×ëM3ÁùÔÕŒó´½SVÞ–¸Üòžñ—pïËý ¬3¿3r�5VòY„n–ët†ƒhe¡®‘R§un7s/Zwå‹ ¶Gþý/(nŽ_ êP¤í†¼ƒ7Èà—$ý楴7J=ã^cðšÝ™”oïlM@¦1ÊÊéB¶{_4c7œ�ËlŒÄÓ¡ƒï¾k…þȪT,Ý ^ùæ[¡X3�˜õ¹ROi~d[H�7üöä{¯© ~€dKj…–탹•„Õl|±'ÝôÅÿ'ÍQo§‹†Õçm™*çUM;D)&Æ òMâ°’¾À&ÝÜC㹧̆M£¯Ð�âð7¹†úqh²˜eC™ã]ë:û¡ÄÇhÚ²n\ýªI#]NoFá `Ÿë�·èüÃN¾ä g_E5{l®M‘K¸y‡$O.áÐ%ú­ñš”BDª«Ð 2üØû\”EAóD5ô]ëð ™ê¨•a˜gžõ–5˜îMPØ2…ÕÊp+¾‹ °K—þPœ¤í+>¼íœûLBŸ?úrnM¸;w˜C¾‡øé^Y&.† ©´dVÚwpyÛ ‘W�ÞŠ¡‚Óq¬Ÿör{UmÂ0PO†Ä8T¼¼ ÷s®;a‰¦½Þ׿òðò¸ ï¢KjÈÁ‡ÞQRh|ž,ûE8Yóz[ýUøºp”¡RJÌ’ÁÀÊ,�È®L3ÉCý{ý./Š˜ˆö]/�IZ®V¸�cê®YîÝ‹¿¸yŸpf9Vö‡Æâ-Û®†”À­»Ÿ[Á’flñ<}ÔîòÍÓtR]¹\Lчò)œº^Ž¡¯Êc:†VÔ‹ó;xèüú¡t·Ùáí/Rð‰íòO°L¸ïGŽä–ζYÊ3W2²³BøG¶Qð*�œ¬k“ÞÚ)ûн‘+À,|¶­BÑðhžÑHCÐF 87K#»´ùê”n�öŒÝÃÆÙ,(òXž„¡øP‡«Œíz1ź@ø¡Ø±c@1ÿí ¼Ní>ca2�,ƒS‚þ¦S|SÑòd�‚š*ëB,´ïèþÕuYm¥�ºžÈÖ(ˆ�¢jÐb;FžnÁ«¬3†k¸¹¶ àTÚÞ�ÇèÜVûÔHnjâ'Q²ErF ƒàÖaTgVüyAéN:T_M@;G¢2°½T£@*++ÁÁøæ_a”ibÈœ:žÝùë+v„£4q/ö Gþ �ÍÙ‹FoæžÄŠîvÛs\„QÜÐò²€7â×9üµ»ý2ø²� ja;ílQµ³rïÞ°Ä8hɲ0,?ß ‰H-ÜE×à„”xÈÖÙÚfi� msNs�/¿Ûu¥*œ=†«@p •ózþ"U ½Ž-n¶ ðÕFvAïé m,,w-åô´•¥Ç¾Mû«Í¹pºœa)Ug¢˜éìSêÝåW4e=LèY$·‹%,-#r^øx©ÔþWÆñÌÝ-v[ŠP//ý|6%WpsÕM½šN£¡-·WƒÂî¸ FTÓŒUäÙÎêÏ‘ükréf:ÀPg‹shØ¡m�#}CÄ’¦¿LM#^X±yJ"¢nK¬»@D\-õk˲',�0gÀX†ŒÒ›2ÄHÆ ¥·ºÚ,õHôYÂd0©„3Ûsèv©º(¶{4oÖ+Y…ÀÊM¸à7 ‰çÌÏà ãP½}¾}rª4™ gt2Zýí}'ï²”a‰ÝõöÀÁŽV;’’õu1Ô)oF1&á֯κ¢Il×Dª«Ös|J=Weö‡�ãIrFö…¸�´H”(~á‹8µ–‰“!ŸJ-Mí'e��Zv ²Ï[ ÏužOÛ¯baS ³rü†#½”/HÝ„($o´9bß�oBìÚ†›Ù-Kyü:¯ bÑyRÏ©RTõ<0EO$…,™ûiv¾ø"·3Nɉ6¶©& ɇùš<µxv&Q2‘©¾¾%ö]‡�Y+ÐàË”©ðžîÁÜpJGš¦¼i±'c†>! O"`üq= æÙç…Œå€V/"aBÉñi$oÞÏÝ4]ÞÔ™§ýÈyf*ÍúAìÚþ}œxºÿårŽ.i+á;ˆ¬Fn(ʇ Ó«a%=gÒ OWþË÷¥•sTW�¹Å �æ9bˆh&)oU‹Ò0p Ú~9 ú#M�_×f<½ö—°Ëç皘$Ãr½ßŸŽò˜�ûy†FT2˜5ËX‹¥Êû¡öU©ÖYrYÏÕÈ'_ê+Š rÜñ©¤·LÌf‚8[Œ§|�´1U3ãèÜ´ž�À’4Ê[µ)Œ&–ãæ×'w’²×á“Õƒªo€èóòÔ—<ûÖÝQñé.V6ŠEIåžðÇ”ê4.ï+âüò¼·—--¾è™_ Ç&HÄÿþ¼ÙÔ‹w’ö@Årø¥…oÁ‚Jß ½“QüÎÜeÛËÈR§a7ùr wãs8½…Tži½U:Dõ»‘%õ±‰Œ]͢Ȱx�†Ý O‘W‡bRtQÖ ¼ ¢3 F™j¬ÊÏ-p‰ãQ©ì¡ÙuÞá´ªÒqÛÐxЮy€®Y€ oûJ'‚-ð~÷ÍWŸ]×/®�1FæFŠ¢7ü—/ä‘”äËgµFÁ±\{ì½üãà Xî>4_‘v¶ È~“¦jëc°yôÅæ…ZÃZ]€©j-lÔmÜ5#è¸�ÊGb¶ðq"9·æHFôÅ%ªusnÒ‹ƒñ>ëè: X(:Mœ‰%½IšÿþzŽÍ¥ÎešiñèÉËéÁÍðQù‚oZób»Ï\?‡y�O~ræ£eY¸k�TœI§$Ûü©,•¥õñøõ0.™÷#ÊO‰±Hˆ|*Í'ÅVú§­a‰Í8Ç{áŠÐà ¼øZ.sW6­dPŽÆ”›PâQÈ1Æ/xö÷Íq[TÃ+¥éÌ= ç9ý|1o`Ÿü Ü‘wÈùf>)HfÆÊõZcí ïYoô‡,‰j˜p¬ŽôVÓïôŠ>µŸpÆkµžõ˜‹šô>x³S1“Ÿ|ÎÎæPYäY´1¦¯²žm!’MœšÈ¡v˯û`Ëjù±B}Òù9{º/ÿIí ÙCSŠÄ™¯Þ1\õ“² ÎdEU¿šöáÕæK½?ÌÕxÂm.qŽ RÖèÃâ»{ãUK!Ò�·\ûÿ¯�sjÒ„–tÓ¶mÛ¶mLÛ¶m½ÍiÛ¶mÛ¶mk¿½8{±q~BEUD>™‘£C´:ÇθG­ þT·ëdæm`�ƒõxáJ 62üXl³U‡I\ ÆV^�Q]»YǪGsy©�ôxüjoVjá¡ÅN pB­b&¢Ã�Ú¤(¦R�ÓÞLeÛEܼ+)‡@4ö¤ "�0Cù2ɶ„W¯æ³î¶>Ágb‚’>x‘�É/hÑÍG:3¯Y÷ê6 ÿ±®þ$�þk˜È÷ !»ÒÊvÕ :U*ý_­¸à‰6zÃÎ+MªN)uö�Š« ·¨9¢�aí�-ŠnÃÓ¤ÍÌ’jœ'Õ�x¾deh çh•-|X–EÞÆEìGƒr¯r“mŒT=îC zÀ+•bÞÂÐ…z}´p|oIŠ8A!bàGy°.ÔœY‘÷­ Ëdu [(Aó2o…)ÖŸ°û‚Ï Ð-ÊÆ #cR»tÞN"GÄ䮃A$ì8I‚dÄ¥Ÿ¥ Y]‘¤!0â™'UÑhØ®Z"SeTý5‘ßg™üP F`œsàÎÖD’;­@ˆêž(šlyY3’�·+®>"ŠzÝÿíº™>*%.£Â«m¥ë sk—ªµd%¿ø.:-97g`sn�qíן�WŸÄ3|[ºK åƒÍ‡ûtÎ^‘R5D�Ý"Ì~�(«Nq:ø·ß:°O|t­ÐÙ5¯Äµ]´&9ºÉOl 6Vˆšj×B+ZX”·ñßK"f¾ì¡)lCs«}‚Œ±ùáÈh€ç’f`^à½iHNš�¹ÒÏÿ¹U¯|#ˆ[ŽFôÄÆÔSîÕ0¦â"ØUyEøÕ½IÔ\y@ÄðÛ€l¿É‘3ÐÒS ðkp•tAïWí$ý^ÜÒCÖ}:u�àæŠ]2?�é äðþ¹™ÞaŽ�.¾¢9è|Ùš9Ó÷b{#5Ñ…§_Èœx8�¼5k{"ò`YŸ3™¿$BêìšÐoˆ¸ˆë›4(l×gZ"%®YΆÂq¦SUÞE°fS� Šºö{_aUÀ×üž¼¢^\°ðv¦k¨�â|Á¢í˜ûq×Ò˜A>Ì)×\;knõаYpïžN#š5æR^B­—«Ä(Tm0š!‰#ÀN@­÷çÜËaÃÁv$šA˿ɯQ2OFº}^ëŸÎrÁqS�€Ò¾nãŸúb’åÞǪUð3øÞ®»· €ÄûÑ�åB»KzFŠªè«ûJk;ûyªôiá-ÍSÀÍ} �òqIä¼…Ó[ô½ú3>çÔ{‘7l¥1i¬è(“ÓŸÛëÅÒÇ´w¬Ù=v‹TÜï×ylWXS ±@½ÏˆÑµ 0LìÉïŸ�‡6Iä‹[¢Œ‡®`}ãpIŸ+dÓalÉC96s›¿Œç¶zJ¡½“†‹móè]ÙЊúìN¡¤üå�*ësjyŒUæ&É]5-y`ÍX¥¤áT”�Žº×õ7üÖ´rŸPv~�“;ãÀÝŠI pÈà}‡î¯€ ÿw‰ó"IìæÍËYéÁ.}¦rB&Pl“wF‘Ôy}‰kI­š(ÑUÉ�™Ó›:º1ÎÞÇe’\¨ËÇŽ;ÔZJÀb†LÊV5r¤dò­ÈOœoäí/9Ѷ|þ&Å<¥sR”gcæ¦Þž©¨ïÃ3ç1Vº4ï+º ¹ûª@O°‚Ô¼±­‹ÖÊ4v�× �÷×ìË|ƒ_4ºêê`i‘mÝfħƒ@N‹WÏØ;§ÁDÓÕ9X¨wÁk¨»Â»üQÄàÈwÖL�zæVÅŽ¥­ÀˆB|Öf¤õ8¸½Unn“Pd›â†2ËÑÙ󛉀˜à€ÓþCGÍ•¨)�bSt†Ü­Ö¶ ¦–,Q[?É“ú¨K¬Ü´7Ö’ƒbQn(ù¾ÄýùÄx¹êÖ�|®e.ÇŽ¾^”+Õü7.�[2/•ÍÃ^�d]SÕ³ïZëèŽÒe­{\Ñ„lî†âŽ;höXæ"ô�>wÂsðšüB ¯eA_¨ØÖ_>¬ è©.jPh25Äì!Û’J"…æèøÞ“¸8`´ìI3I³hT‘‰2ñ&öz² `šàñHD�~¨MäK ^úÅÄ¿ xZF^ÕpXsýÍ£LŸ:I¹v Þ]0’àb>Ÿ!9�H$åØV‹ÂkZ†H®W±<á…-QoЬ­g~ûB‡Ü}@†Š&t½._Áažåƒ‹è6\[-"«ùBÊ™ˆßµ‰&“ìûѦ¾,íÁöÍ›Vp¿/襻“÷S4Î> XSwÔ¤1?âìzÛî;.§W ×,ÙÕ+�‰.§g �m²Ñ>3¸¤‰Ô£Š]­ �6Q5å>®8~™õ)ç­“sêe–°âòÀñÙå@àñáfTš8éø¿KÌ|¾¥ˆ†Â»ë¶>(:É1�¡ý}ƺ5¶ä<ô«\�]H§ÉãÈHRB¯A5ä†*�+\"V•–(­JÆË®mI`ù�õs. ¤ÉÒds%80ñŠÈØE…ˆÄE¸³mÌ}a½ôêË…™ÅoF±b+j¢Áp� :/ˆ€Ü§¤Ç7’mhðÓÜWÑ$aJos²ïýy§ê"J?Å9¨˜伯þ(Äq+Ãv€ýíÈÝGµ®öªv ñA´`8`ƒÿ¹Ùcr®/ÂG‹Ïcƒ›=ë�ѳajxABõ‹�:ÂK˜¹+ªŽ;$þºL†�Ñ«Üt"cß²ÀØ ˜[ÇÕÆ:3dýäC§Oj’3jA èAžÈ¸Ë† êÚw†b /¾åÔµ¦Ã8mŒ �“wâÊéÊ{Ά!Ú~Ƴ¹”åŠü›ÉRyÊ©½\:`ʹmžJ±Ñiö±ZF‹¾J.Ç3 v¬I.:¿ýñ:w2ðˆ¶L¾"HœÚPÅz¶e'J $JUc©o|T9Üê¾{Ðå[ a/�´)áHBÁ’EÍFAiíõröñ¯þÞ–'P\È ¸7ε±Ö3 i¨XwAŸm,Š!XÎf„ÿ±Óc('k–öž´F[g]ÅÐÁ�=Á¹¹qFý¸k¶Æ¤úÄ]Ö1wΤpœ<¦øKe=±ö¾í¶°ƒ(Ýi�Ö�±ßÂêVA]à›'G7þhÁEs¶¡†1Ñš(3™­éOreXG 0Îó¾4Å“çHàoQž×xº Ñë¼1È‹[´�z@Ÿ¸Ëœ„:yÊ>NÐ~5Mòæn}ÂÜ�‹)æþâUVtS×k—FÌ�¢{²O”PúXÜâœ,GÇÊ1ã´jÿÒðÍK‡¯Ç’šë~4ØB;#~`ßɦ|“ãs�ÅHØÕ`×Þ…âTþ~ùºq¤¸àx5`¯îºJŽ¿�¶“¶#/ʼÿqÐ}”’Gu¶œù Ý#é*¨—À⯸§íA2sT¡m8àh?S÷×û^1’~¦D«ˆ%Kt“`ÉÕ[N‹ñl –#�”Â<ä ­)6£¨„àùÁ{Ø“¤òV˜ [�âÎ5Tå³2éË·s¨hÚÔègвéZKÈ�7ɯËÀœ…o×¥.I¼èŸóqäm¯+ažY‹àÙò»ð�Pmâi¶rà€ .\Þ×ÃU8bX¥÷hEÁnѶì„Û-gh­4¼³ ]áIù`&Aî§iE¨Þ ôf4Jº½l ‘’£Z:ë.Ònݽ~Ø Ša•ª~Ô÷øoðB z ,‚óXpx�0¬1BéO…k¢,\Wö¸à_ü�ÍÀ§÷l+Ó ïÓ*ƒâñ²–¥bJ•EP!”+Öæ`/ïÔ~!lÌñ$ÁnƨåœÕ¤^ô–„`©ò>ÆÉ‹ˆL ‘£@7?AdÊœ*�´—#]¨¼�麡3Ëíaù{—üó ä„2ÚA|oá\UOcúŸ*‘qa{x²Zë�ÁbV‘¤nZ#+‚ÁÃ|÷Žõ%ÛÞBÜ6L Ħû¢Íµ“^)Ò�YìI†Ö÷§†"ŸÝ:F�Š–Æ?ŽûÚ¿.¶¨“43­™hÀ†Ùû5[ˆk çÞlˆÂô…ª$ÚÜpQôhÎ×PÌ2oÍ�V¤€°ÒCÕVž€8Å &©Þvã£GX-r�|yÜŒ?8šPýÆŠ^m2m×y‘�²Á¶ ±y�‚�«‚ÐB�*È%kä¼�Êãj×dxšžÐt§ÿXjÆJ/öãÁ%®œK¤Zi|•ýÖÀY»B³>ð¤àVí½šÍ’ç½l¼ô—{&6’t†PçÌéuÅ»žïÚUFøÖÒC¼;L4ÝÖTȇqH;Æý9â2ú´ìið·ÛO¾/ãÿ0 þ“Ô:Fø+µ[PY€¬Ï.Ì¡?¡EÆ“¿žËBâa)Ì–àcCÊ,8fª  ˆkoÛ§º5x’nyNõÅ#ul6¡ó…9‚€°?™»=C0E#Î�nXAþùwK2Óok˜ƒ|ûˆwôt¾*6´ÌA>Š¯Ù³ß]?í'Çrb“«y«Êu�ê_{�ZKBiÔo‹w-¤å=�‹Çð ~I¤¥çY颺aÞDonHа¿º�w¾mSbzÂÈ£¶uþÂ1ädãÏ)B–�ï¸Õ�˜é»­—(™È¯Ox ÀŠkÙËfx –øøæ èôõƒÎ§už “�kLõ, ›3§õ¾û öÔ'¦ú‡+ð‘Ð!•*ކ'÷äWÆ5@¨Î ”¹ÐÍÁ“³±ÄHǯ€r[+Hs1­LKÃ(ôBÈÝ3hV™Uãy’LïnÙŽd §í€Þ�š05TÔ&Ñ«�¿úÐM×S�zÿ¹TÆ Ñ‘-ÿI瘞O5‹pÑ;5�Y—=2ëÿâ'ß­‡z¬Ó"ŸJ:kƒq Ï•ÙŽ: DúÄe6snøøaåú¦Pïß¾T Û `¶¹ƒk|f×÷¤\ÿqn)Ø]®tïöd=!âÄ­IÓ÷)SáßF\™ºoœÌ­¿U|‰7ÑMùȧ¥Xm•k¡ž€ã%µÀ4öÖK#•à æ�d9:¼BLj€;˜60â~Y?çÃC!8ò–Jÿ¼•}Æ…ÎQgÇ1ƒ+ïÊT‹-ü5É_}‡ |ÇÚûNÀš¯ª=^Íf¬A³é|ª'Ù”fóù¥Ìvë1ÒXÒêË“Çsœ-~—EÞ±†¬s û_ÌŒˆÉQ\Éöá9½¿-Ýkrr£v�´tT5š2V;5ôv„”ÉfAó)]>s†ú�µCª¹ªÐ6IÄ_›J gO¤U;{^šeûY]gŒ‚s˱?ÕrÙ·K|�ª‰7¨å|"ô¥ä Ñá¯u©U¿ó>5âò0ÇÃ;Ïsyÿ¾—¾ñ]˜û›¥ãÅ ƒ³Fóì“§¤ÓÚw¤Ü‡«d RUß³;F#ay“Øy[›Ó¬©ò2V»ÝUš5 ’0 tpÝ}¸ê.PÉcÕ>åé”ý{Ö¬· 6ÉckD[Màš†3÷*_/š¾ŒÔ? ‹u~s~óöã�P¡òÌ | D…ƒ �Ï5I8�7Š* ”ºÍ/êf(_ÂÞL¨RU'…¨¥41Ò(~G©-3J¶ÛñÊúŠÂŸ¹‡ÔšÃrQ­šðÊ2J-:kòH”•/®6µ†xÔþ\<êAxúüAõÿÍ,g9½ï¿RgfÓ׳|Óþ¢ôË"%)8“—Yÿ’ òÈpÕ~j™@ד²ÊP(†¿ïéPLÓîðTó3:‚ÂÓ´kᆠÑÚâIP¼-)iz�3·í©¥”“:Ü Þ-¾îËóJ- $ò"s"V½WD8/Wd]òÀl#Ñ",gP C a$¥¤áuÚ$É]…äE$Ê–Óñmúñ*nz¯Ž‹:Œ_~�À ¼­8�ŸŽPût.?zÏ-€œ_3s4ÏA»˜$%�в?Ê{TnC-…<�æMý™ª]a.´ÿEa)ä=Ñ!¦âº�ÉìÊI˜–øç+m±-¢ñ„…¾aC.èøÙk‚R�ŸÚˆ�[ŠÙ�Ú›aIDásxrÚ’ŒòÜY¬•@cJ÷ôÍsõ9‡ÛìÏîk‘`ƒØr D‚¹z~Sv~6=õÕ5"uQêšN�KîY;‘ÆŽ i_ú‰@�ÄA¼#ñ~z@›ÚjÈb†¿b˜o¨K^�Êlà”€…S¯ S”eŠ0ÒU-óù Ð@á‹pðõÄŸ“¥L=±Ù‘tÃ'zÿžŒgV[?¡º$ý>®‚ûû¥“â°’ÎÓÞØ{EýÑ©nâä�çtøªüŒ’j#ˆ1oƒÔé¶ö/U¿Ëpë´�¡2v¡2‰º£K†«SétÌ:oXxU‚˜*‡wm–%Õø±«SG �Md;@˜VD›ÓK`vš‡F~ë%ûÛÕbEœÎ<@´´­Œ¯b¨Öïtzä¦�ðk½³96k6BX £ÉÕM:rýa»)RºÒ߆i®mÄÕ>­€?�þÇã9YTÃDðdH¬¼~3º^×;ë¸>'T»'d¯€íª—zOç@ÎQü¯¦Štq�ll.Dïy”dGõh“ØÇ•(Ùv}‡Ü5oá`ù<® k{9ÆbI'�r°šLBŸ¨ßt•A^§xqf×z°å<(�Æ“™ÀVšM™6ù7—lÌ#Ð8›âiEø“iÞËâ}q#@bõïÞG@I(R37©)8¥ºpˆ÷ ‚QðO EÔ!·øÞ±Y>dÓ¸EŒ¿Yä“Ã8‚Ï÷©‡¤ïÆy9ØP#ÐÐC\?â+Ý�]gܧšNNìÓµT~æ€XLÔÅù¸“4B•õ¬UhS=° ZŸ'ä«�a1LÇbG�4vÊ£Î5åm îÞ�›ã‰$˜›Ì¬(‡•y@L‰¡5†ˆA„�#;,@µð1eGõ3¯6ÿ?X¶ꎙRh›ç/¿ìXJšSj¹Wš:ÀÝMÞ¢vøÕ•¥Çשׂùfa>%’-‘Öˆëc¾W«,¥²+RÐÒi7ÊöšçˆÏFZüyŽ8U^¶fL[§NX £ÆM±_^½NUâ|·Œ¸eyëkÛæµ®eïîˆzÂ]ã?ɉ˜u÷PpdÞü$ø.NKei¢Rú)ÚÆfëJ‰H¼¥7ÌK¹}+þø=eñÎgº!}B…,áæ�{Ÿ S 8ͤͫ•˜yØŠ\5ÙšÙ ªMÕ/|VŸb'W ¦2½,< Ý¢Û;ÏÊýŒ÷þRí-,ýþWWÿ‡XäqS09ÿ£ŒKôêF­ì ŠY.狆’Kû¯ÇHÚ(|/Y/Í”ÍS%ïã´{”˜,>¼’´=Ë*ëP?eç¶-°þÙÑÌ߉v7ó;]�_}L{‚¦d™.,“(/95%<Êží[,†Ÿs–ÂÏŒíåL�êa£Q2¸i{/l°Wèn34þêÒÆQ×]ŽÎvÈ—4ßr‘ ät-‚“xNR¦8ÎÁvF�•7.¥ŒÖ¶aÁ ùH>rB1Ùå÷‹pb¸½Œàóþ¹ýöŒ'ß೉utÓŸÍÏêHmwÖëŽß›ÿd5]ŒŽ2䨠üÅ36âþþ •”è1ëWÿœx_~b1V¨iR©?è¬ý_BÃêÁßݯ/uGz2‡>6å)Ó¤&ŠSIú²Ø¶Hi$«8óH€`Œ²{;^«DœvcµåT€|§A ]ÖƒöÚ“�0êûÞ^dc‡@óëƒ<°"FDÒ¦ †å$_Êkz/® Zü¼lö8÷w½O�‰ž¬Ëë‚®/Rë[a £°êòa»ƒ'•ÿ4SòÀï ¢<Ì âx‚·þ$Ë9A¢ŒIÖ=«ÃÅ%¤Ç]Æ:{¸„IÆbŒ¹ä'5HSÄÀ ª%\3)  /垢Òn‡Q4ò×׺uЧ+(·d&ÜÍ*±n–²¨“)ê,Úü¾¦Ž¼§¹¾áÚR39¼(RõÓ;y%i!| Y¤6(a%ƒW8veŠ�ê—Sû«¢õ†MÔfiÉvA€É˜ÂåËÀ2ä\pé'VP×OÁž²s+¡£«ÏF’åá7i†EˆVè0Ÿ$ I F+<¯0æ×LìÀý¥^W1BlÊðžÒZ'`�T³§Îr˜»ëÃfš)ÊLBHSø+¼¸#Õ#è3Î/Ìðþ]çH$¯�‰³L:µUÃs¾8¡¹(³F^›])ñæß@{ r„¸ËXÆiÞ¶ô­î&ÇŒ;†™ü ?¨Yü{¶8-ÁüGJÞ«¦7™îtɃèðÄJ¼ÉÎÐa›åecY[Q ]fÚgÉ·�ð‚EØÈJȆ‹Çª�6uÎÖk—hÁj…–@¥›;ŒpÄb#ƒ| A°P×ÑhWçÓì�wYVuphµš3Ä×KÔÁ@�Þ¹£pÇ¥QDzÅ«ïL½Ö´6o@­¦<B¤¥¼Ÿ§{ªrP ao @h¿ì$¯¯M£]ÔÎðvϬÅôZ H¥„#ëTz «Îý¾€žÙ·Ûp©· >�CÉá«¥‡|ˆ õ>z^b‘ÊTƒ×�î^ü4z¯’$¢OŠ{�]³‘aróãá¡BFë¾7>7,È#µyhÒ¹MÖÄðN Ä] ûü B8|"'bûònÁ‰ ¼¹Ä�h]ž4H.Æ�éN»:ZÂ<8µi÷ÉE�_ÀMÁp^W§•�໢Ar٨ἠ͒è;€xâ÷wV^¢Rò2u­X ©ë4�O`»“·‘Y!a4 Å»±b´-ç¦ý ‘Å»xGßë3”(I©TÑΦF±:‰=_ÿÐÚÝ#…:Ѝ”CºÞmªÝëF%úM½Ø¶ŠLƒ–É”,Z‰&Í9´£Ï^c5HÈÖ,¥*Lla;`™ºiä£ñ×.’“,Šü}ÀéÇTˆ‘ŠùìvåÍë–€ïD²ÓÐFub¾èU”ŸÑA%Ú«h±ðÒÎŒ½Žz!Tï©X͵Ø}x„¾ÏgMBA†±›ͽט3iœÜé—zU3Χ—Í�ù”çäüKGÎ%«Ú!�¹‡îÓ₱4£GJ¾F’ÖåÜ�ú¨°ÒÓŸ%±5Áäñ—,TZ©‹4.,òâœó¢û'�>@B±“8“²ÞœMïäMÚnå¥o$�MH\™±ì­5ëgX5Øä ¨©¼f-bÒ5"J`¬ÑG�Ü Žöá_Gâûs¢ ¦Ÿ1¤+ÎôÄ÷ééåž^8�µË[B;‚â™yµ;9/½#góÕid¢€ëè3nÁÓÖ ŽKåóÂc"Ë¥¹!ºPÏ·–8cÊâ~Ê0W€Ô ¤°OJÍÕ¯r‘š’ǘ†×mN/ãÏCøêè(î,ÿÊ¥6‹’ëû©ÞàTõn ¨)Fš/ç«YßåÓîߪ;˜™$hŒ¤Šù« j¾¨²m!}&:S6”ê“ëócƒt æäÂ!ZúE’^büí?Sʼnh‹Xµ®°D®&…ÒY å‘Y{ýÖ,™5¨™kýR�Å9 ± …Ös�ÇôV qâ3þ¥ñRMÖòù)13TÝ{ .ãà™à�éº@xúX`¾Æ0–7û­Eç^‹—–˜�´éÀã4t�žòa«�2c6y8›’!QÀ™Áa'óöPbÐ5*2!#X¾Ùß'å3]#,�‹€žâÞë‰s¡V"K){�Tó‡‹Ã‡JX£÷lƒÆù†X§žG–ÜxxB… Þò�–…ŸA/Lœà„ûâ„‘�l8>í£†æ¾‹!Ök~—ç°šÝíÆí†ó�šðç¤úE�Í^=²=›N5QH$Î/¹Û¥ã6~jðØÜ6øZÂäÂ,L¡#{Zõ®æ¬“š×s‚,•nß´0Š^W??îÃÞlîâj…ÿÛÈ ¢$Fÿ*–Ý�jæh~KqVˆôuö3;lšÓÖvO/ʼOþ²[ö*w¨% ¯÷iËsàŸáŸ%H÷˜e´A_=ñ†×»½þ"MvÏÓKÒàMw'þ¾?¤ªnΡ:ž¶búþ8‹ªvC:ºòø2·=cN²˜”@ê3õ‘‡§Rl[¿¸œ•JWaÔå{V®i)Ý“L­K£w…»õf»Œæzy×ZÚs^aŒ®o+Ë+­m†ôžovcŽýíâH²¡„ìÃXH¨D)Ô$vùö”÷‘\€�nÔ˜ßwQæâ˜O~!£J… ƒ?g7” ;mË$©÷4J†v ‡œ”ª–3ññ7 #ü?]¥¾Kð¸3��®±Þcÿ5µ�bý-¼•FÏÒâõ•râmTÌ¥ŠÏÊ4#›VÉɈ€WÑq@±¢îÃä—ðü1HID²ðã–”Y/—+ö\y- ° ÖOg{ftÞ›÷ô(uÅ€”€GøûE€£8ÎHpGÍ$Ç6íø›"€¢‰Iä�ú®]z+)Ò%/½ýY3^Ï…ui£Î6ôÕ�W �Cu|ܲçMÐçk x>—¤¡qÈÁÈß â%¦„ßšgb4Ääƒurî+‚÷j”ŽF¯Æ¥>TÓ(áÄÁå}"ÊvkB¼t¤”Î�D5Al^çª<Ÿ¨  í’Í$I³0EÙnŠŽ¹Ø³r¹¼"+½û['ÑeÉZ À6ÏŠ‰mº5ë"‰tÛÓ�¾„¼ÈíBÎÁp0®H…ý9þ¶®þ‹�à L ƒ¢N±üfDŒHªæŽ‡ÿ¯Àƒ+YÓ˜$¶¤céiîîÏ—é­üL Ö>¶ˆC¾ó¯¡Ú•(®€àµ ñ¤î‘Š3œ…¹¡}©ó�Þ„ÑK�׿;XnêêŸgy5iö@äÈ6à8 úe�Å/7ÑÝSö[{ï^Z…Ìón÷Ò“ ýw)ð^Ó›vE³³€vwØC}8˜âë.žM¯Ï��U8|öyBè²Âí¶¤éò÷rÕÝv{Fço( @Š>R�"ñP±XP#%ª‡Û’Ïi;ëÿt¦èy°^œˆâ{ÿ„ø"?,Qµ´3[x© ìÙìáù®ú�ZâåPúQöÐì…KmxüµîPò¥“y`Y 7½ýRýíP•ßjn*ýn,ýkl'˜ Ux„ekkY5}LÂ|êFî‹vê’Áúú”0’I/ʺƒÊq ñ{¼±ì ·ÔæÇÒ~›ä—˜3ïjJ…Ò&Ó0Ì×k)øgÆ?ǸÝÃÍ#¤ZJ(õ€AJ ’k âÃÒÑ<¶PŠ}Ÿ•vÉâYXýëpL-ÅZ$ßݧ}윒mÝž>h14¸çGoŠª%k ¨Ðîÿ¢?é>H‹‡@dô 9âŒÈ\r#ø6öåýì+üÒ1F |¢VÝX¹ŽÌø¸1ÍçÕ75€ftŒ�HÔ…XÚZ½ZÄXïÓ&½?ß+ %,Í„yíF™*'ÆÂN«`ÑsÀ+¶ÜØ@ˆ‘σÅ)>F#÷ÅŸ«‰f/bLÛ@Ï©§ÌH¸ß¸¢9ù Äãˆgv@ÅÅMŒ:DŽК�ÕÈx’X§œó°â_©þÚ=òP�.NfRr00ï;§Ò-|b†ìE¹ƒ¡P-^µè†Wê´+ÃZš—;zçW åá�†µ;7ž’¡ì\ÏØó»V$+’óB~rrÆ,E¥5›Ü E™§$jK/Õ“S˜Zfv­5”üv>x|ªìXéqR öa‘ž[ÄÛ¥%XãèYpR{ü±„dšfH_OUõ“öÛî2Té]þÈDŸf´ó(o¦îÄ [Ë!¦>\2y°L¥I�|’ )#k"ÍÈ�¢Ž+÷1 x¯àßýt?ázgV=¨³PØ6hPÎMØ*E*X½ÎË!Dô\Ͼ&¡¼»÷O1 £žP¹´qkë{í6öWÆ�‡þLÅ•«J(3°·Þû–cËÔ÷Sîê�z‰ê×È[þmÁ/Ý&¢~®zêjnVx-‘PKëÝæ‘ Û¥ù>'#Ã%V#!Pì‚>eÈÏÚuˆ7WAõ–¥™ÁÙ,”: Y‘EWŒÓ\ÑÚ�ùå8gqÅI3´çg”ºP8Ç¿_åÐV³­DéSÖŽQýxü¨÷¾ 2ZdæcÝe²÷RÇ‚õ$Œ`ðgR=›"È; f2·J­ÛîK£Æ¿ t(Ñ-j ]Ù‚È�„x£=°P½iâ1ª´ïe__ù\¸ÏšƒÔÁ= Œÿ˜‹¦r™Ì¾¥µÔ/å> Ü Å°ñÃb9œÄc©õhë�ÿj¼`E’WÙ�ŽtB1þBûZ˜”�½Û›+ 6¡Ø ›Gžl”l;3¡èT©V @l=7s5çJÓžR·1αæ&5A_û0^`ª˜x²¹®Š’‹­ˆœ"ÅØ·I^u]x:àprJLV­xåÊ%ÈtøˆÄ£ 2?,@¯)¯µW×½ùìwÏ£EB Åî×ÕtRw `u5]Ù-N«ZÒ wãÍH÷Mòók€“ŠrÉW/‰P uYÉáÆ™†_©ýæb%@í¼©…°�{”Ù¬5VÅ.NåõløÑiú¡²·“ù¾�'.ñåÄowȳ 3ÜÏäWmÌ¡#’¼jа¯õ~O<3­: ü@<<$ágrLûûÚž·ó²\2ææÈÑÚj`°?$oŠ�źV.bÛüà;åq�,ËŸÛˆnŠœd_N$¦gè$€ß•')=”zæÌš¨;Êôä jôÅúœ;“¨%Þ-Â߯YïÙ‰b«=/.KG½¡Рlë§ëù-'8, ÃÂûÛ,7Ð1ÑqŸ“çhà1¡í3,{3 à&¼Ž¯¬šx„xa½xlÈ°Ñ Æ®Èø¦‚ˆ2He/D2W¨ð”ÖÉÚ›KIìÊo«GK|ÊMƒïþûZ64¯s®î\id,œÚ·ð†rÕ”+5ÏðÉÀ¦>%ì+ŽÄ;­r%|f÷¼ñQêeëà^ä²WÏÜ56Z­ÙS…€ŸŽ]6,Òò F�öW%{ºqËéP«]#Ò[ýA¬=ø7håsðD7ô©�?uc}jÙ{iÚøW'txK.´nj0& ¥œö¹P1ÅEÀÀSƒ\ïüm~jb~èm¼%¢ï ±8àÕbqC¨N¶Ý—Ïe`ø(»„ŒŒ±Vº±—ç4§Z¥í>z4ds)!±¾¿brÒb�Ñ^HfÔÖ?ʨÅkG&c3Ì5qy‰smoÑ{™¢lJ¢4F²÷N‡õ¨¹X2� ˜_èJ¨•ßõ¡”{_¨€ä”ÅjÜ~]12âC2Ü^®hƒ,1Å×ãón`ꉋ5U�¯äŸ;)Ýz¥ø2ðøý$6@kPgO¹ÉUÇ&%çx¢ÐÌW£‘;Q~qd-{0[ úÚããHÕA‹³!a‘y¿£Ó´M÷á6îÍÞPÎqÛÂë¥ØÖ¸µ z§³:+ðóIÃâDx¢%wU=€b¼ø+yÙÏa–솔 ÍùS{c5T,ÜÁ_58 kÀ?•Œ°Q]šf¤î`H?¡ø�¥‡£™? noЃ[µ»7÷ó…(+Ô«ëù>ü¢ô~sÞÏ-ø,ú "F„Á¯Ÿb„ yDZõ›»€*¤²_°ªþ��}ù?�w¯x�»1Ñt‰´;`ù)ÎÿJidƒðŸa§ÆŒp¶ba=°²ßí!»ÃØiøÞ²Cnr‹*? Ïþó®Ô,m»Ìzd7™7NÐQ…½µ�€áØEw' U®¥¥RÞ0•Œ.ˆ9Ääf¾þæœÚ¢aMR0‹Cq\Ûá¸3Ó÷PszKȈ8”¾>ëÄY D¯ˆ•lMYëÕÉ—m•b!õÍçŒÇªá²[ºKF Û�󑋤AÞTí/ï3Ê»Úgl#š�2(T×S‰5 CdÉõžÏkâJT'_Öû€GU×Êfñ^Fj�¼×¶›îüŽLT¹IžX~%¦RË'Ø=‘tÚ-X0Ùß9DÕÔ|éœ\T¦RÈÖp¤rÎäÈtýF‘xZà7ýï¦DœË#'¶!X¤ŇºgOÛÍçž(ÒãPúZ;xÓ·èõõRˆß2<‰òœ-ûzMèÕ‘É/:@°ï6,[ã̃œ¬ÈXÿàš*Qï;Oñr ¬+5ùBL7} ˆ»† KsåZÀ 8b]²\*á§毫)¿ñNú“}”P£iŸìû[…L{wÄÒæë1êEáUÕYi#Ö]axøùâÕzcç÷Ä·Y¸;ì僦¨ÆÅ¨ø™´ÙÔP®¯<*,”ÄfðCèИ%H}> stream xÚ´ºeT^ú6Lw‹tRº»»¤;¤94º»»»Cº¥KB�F$¤CBº»ßãoþ3:³ž¯ïb×�×{o *2e5FQ3� P dïÂÈÊÄÂ�WPÙÛ³²1Š�lÍlL,,HTTâN@c+�½„± �Àíb P2u;:ØXXx‘¨Ò@{ Xi0ñ(]ŒÕ=€¬ã€2ÈÙ…ÑÄØ¬Ú[XÙiÁ.â O'+ K—ß1ØGúí-Æ�36µ¹;ÛXŒíÍrL LE�;Xh ÙL€–ƶæ�9@¨ ÐP“TUH«*i(«Ñ2�«¹:8€œþ�‹¸šº†4@BTQ]ÔdHk¨©ÿþª´ó·`(ªƒõ¿ó€ »+Hª‹ªë(K²2ÿ®À p:9[ýNû?ܨĄ́�]Í�@vÿ$ÐXº¸8ð13»»»3Y¸:»0�œ,˜lÿá§niå p9ÙÀß�€¶Àãjon§‹%ð_~� oe ´wþv’ýKin%Ø ,wù1p#\~Ç´ý—9Àü¯4–ÆÎÿøÊ++Ë쌭ì]€öÆö¦`CcWg€Ñ?2ð'ÐìÝ¿â®NN¿s(ü[åôŸ4ÿ¦.WöÁÖÛרý'flïêìõWoþ»lS�½³•³‹ó¿"æV¶Àßì�ÏÌÊþ™‚¨¢¬”¤š:£Æ¸_t‘nƨ( gLΡ¯C‡ø’"‘‚t±æ,}À÷¬Íçó$a µ„_í[³¾¾ræÓ"÷5Ÿ”)µà&7RÕóº´]ýù–›Ãtóåm¹k‘¸v³åܱQõ^�ô:ÛäÁ³Q”pAJ|ª_—ÜNµæ–ê?4`—k.lÐH:>µî«¿~˜Aüê exöByN…½Ž~v¨K¦ö9 1vå¿Úª�±³Þ�‡NÈ�}!œÐ”Ô±–±}k{?'›©l^VëM>ˆ´%ÓÃI;bÀH2Ì@ùt-âsllVÀ9A’íN=Æ5Öñ6â>K«¾Iu”À~‚ÝñõþG³bhïï)Ÿ9Év#(V5WbX£Elm»Æ�²G㻞äv–”‘Fùªµ$–��ÀÏã—Õîá³ôñ�îRšÏ´‘×ún„µ¤µyÀg}.ÀéT•SƒÅ•FG!®àÕî k'¹·|�›–'i¤z~ÒPï”ÌûËÅCÑ}_8…¡ÀÁ�y�¡úçÚŠAAQs~ªN%Þ™¹âŸ¼þÓÛ¨Æj:tÅWÇå™]å ZÎÇÞÃØ ìeÉâd†Dž„8± ¸b:—3œ4ªsž[ï‹°ÞÈKóš«÷ØÞn3iqé0ÃuùA+Øá|Ó”“¤æ¹vëU?Šl–6ß®U�H2.ÍÀ�¤´Øä�oÒäd Š È0÷�˜_�‡¬‘ghÛ¢ô´x�Šx‹µ° @ç%7Ã6{Ž[Á¿¾§Y 3l¦£ §Jf°W2Ê—Â} ×~/?¿"þž&ŒsŽ˜YXaUmžë¸Yr‡v3/ÙKQɽ‘'®ø9¿>½¹hõ÷= 骃î5O=kô[ý,Î'ïT˜áȾ'–bë‹Oî„–z ~Ï™fbߤ5âÎvÌ—PO°|ò2Vö‡ù·mof–Šjw˜•àï Ã†�š5MUÜÄÞw —ÕN½!ð6À4Îðæ �9Íô_•®B Z£Úp1]%—rsä«t´±q}Œà!Àݪټì¬å€©)i o�rÀGïLUĘÎF²ìë—¡Cžx]4æë Âú7_ù1®Þ7Ûrá¾í>ê¢eÚ" ŸÔ ~1ƒCmÜUËÎ0¤8, ×�ÒXh¸ùŽÚv…ÜÇ,mžx\I ;¨CrÜתªÒs§"ÊìÝ!ã¥cF5 Ë�úhÒÁgÁ—nJóól©ˆ>`Ì�{�Š{·YÉG| BjÏç2Ê�]mçeÙ#fÓt!íÓì­ðÓáQükQ‡ÃÌF{þºë9ÿ§�³S]Îå¸�_7k\ŸyçÏR²N5\ŒeÞdÌ�ášòwÕ—åôï�ï ^¨ÀÁ¾ƒHÃ$«/—¿è/tÛDš¾_cWñD¸Ž3Àÿ�P ÝÿåK�Û‰¤Ê`/·1F3O¥,ëy™‚Üg"ï­%mM:D#@Wœ'�àBæ�ʉ® ?"°w1ªç£i²œ.ÍÞIÌÛ'ˆÃ©ùÊ�sé…é§ÖåœØÄÂ,„%µæ˜D½Å-¾yT÷ýnŸ^o‡QÍÝ /,L¨Šh³û)Õ0«L“E.ú7ãw®„YmYnÌ* ·ô˜½sßÛê QdÎ�;î@<“¢+àƒ~]ò)r2ÆÉ9ê.{¢j0å:æu?SE'·²Mlt«x÷zÇÍ(·6ØDuýQuFãÓûÈôÇOlïC2J­QΗÕƒ€Ñí3ôПƒ&nÔ¢«Î2õr_< ²HI½yèSmÿ옱¬l� !pIé5b>å ßúãÐ@Ó4ÍÔ?êõÓܵ*;D#̾fµÜÆÐÎËœÍg†„ßÉÌ‹íØ¦³ò—‹^4UÃĈÅaÎv€d*VY¯~Ò|»æŸÚó¤ås¸E'&—ÿ–Šéi1D$N>ÂÞÊ~§8Tê�~Ž®iuTJú— Û2YdóK�þà‹çí©Â;(¿a]-‡"kùФ¡ÇH�•Œ75w†e-tÏb�ÃÊ�\ú‚ k˜£¿r‰â~^¨×Z6ªß¦Ç¸`Š”E=$òýÒî$¼}V ò �E¯ÞÌ,InBsf\ÚÆN3DªØ8Ö’Lø‘�¡{ö†¡�­ë9˜š2¾^Êœ†IKú;ul*F£ƒÔ ÈŠ‡ÉûpCKkæ™ Ï¹¸2@ÄC»L¾Áê뼜ÇpRpþP/l_l²¢Gó1É_×mšGF™Æ+Yˆ�ý!ï>ª`Q¿&×¢ð§8L©ÀÊi½H+òˆ%xœ|øå(a ¡^:q9 à(…³£?F!x0¾j|3ÜÔímðV¼UG/§Z³GNDG©‹øÅ’S�T¬?˜&ùËNimùž*î"‡½ƒ1«µKÂvÎÛžï#Ì„ÙÄ/W3ÝX8Ën²Ÿ¡Â”žüs�Aýü‰=fbÑš?ílŒñ>d<$V|PíãIy{,“7Yke~[Å ©xž¤WusÞõ^2^¬e{óÊW¦M ‹ÖëbÚâ]–´÷îܦÀðC쨛¤·KWÊK�7ÈÆjŒ%xïòó?­ÃŒh}#LçØ¿ÊAÂþ¤ø%Ó¬À6ëM³è¡ÜBRäƒÐÂô—:wÄJ)óŽÎŒ#¦Ï8ÉÎcgÏòÚ´ï~]ªì¶Ê¥§¡”Øt�?lyèÏ‹ÇF.2ž\"c¢ÜDÁ—é°s\ë˜CÔ•Z¹Â¿À«ÍÎmb‰Œ±yéÏʵ¤È`|[O=Û3ë__©¥öE=gкoù¨ÚË[wéÛoy…lL®ãs‡�šTrQŽ·(Å3g<<›µþz¶yqªQ$Lª˜"Ù·Ûåsd ð ²=*Æ(QÞÞÅì+õ!c8ÜÁÒ²Ða¦/)ƒpvû€;†X[©Q®^¢£"üÍSQ”«’¦ªNÚÐxà>÷ıŰ´cºç2k›Ø!ŽI§YCYšþÝUŒ¸À‡’Ÿ„vp}þãVªþa E® _ïB¨«ôìðßk}]àgo˜”g -/Ñ‘«Þ¼Ó/,zs'—¯y{ÃŽªa¦‰Ï‡z­²šMŽrº©sï˜T“À©Ç$+î×pY µi§»ôÃéëgrAfÊg‰ýÑBªøÏRÕ%¯l8P2““»”<‘S/½ÉPÝ…Ñq5ýC‘Á�0š�'ÚWopXzc`ôêÆèPÂ3²#ç4Óæn ¿%*_R¸Â|Q!#o䘄>°³X鎩å ÂÅLÏjm<¶‚cà¿-p$½èÔì��, ëÒÒ‹3¢â|›š~kEómø$L×”®©st�±•b-‚‹äCç‘ÊAtM&vθ†)ž·Pääéf›š‹Oé·T6JZc”J � ,  9Z2ÏÚþ½Vó©°ú¤„+pÃY~çU0ÃáÊl?u¶J’V„ÄÅï[×#6cŒêÍÐù×»[LÈá`øÌ°åª¾»* ËÃÕkšl( i( Gô¬Cbs-Î!uñÁ;OÝvÏúÓNë&-ÕEdÈcSßG|q\œ­Ûu7Ÿ�Û“vcš/¿{À?c/ŽNº`\_HÅÐyì^í¦%ÜÍk¥‘ÜT {¨Je}F€öÖ”ëcpÒ”ej�!ß…d9·Ïf¸ Å¦»ºr}ŒªÙQÏ€ ÒOˆ2}Äbòuõ�EMt++ja.Ùijœ›Rä$Ý745ɽۥ¡ö@“�°7îS4üôønkÇ �®Ûç$_”vÕÃþSEv,?»bºy†ö[—`´†y±1X[Ÿ«£õºö{µ÷šËò.P‰/¦­Â¡:�*mg‰–Œd3º³æ¼c¬&�?Ì¢ƒXy7ŽNøwoé,J X�®ÊÝ<’tq¢UDΧ\¬å¢Ïï±¼ ùà÷ ì,91& '"K½G á†óäF7 ë)J·åŽÌÑ j> ‰Ç§I¿‰Ð;WtâÀMšWÛåt¼|$ê¼L°„A=ösc°}–…êœó*Y¡1(FÇ»èp°.·²›wvb¿„,… Å^ÎfúÔÒíYÉ«}>\ÅŒfÒ×QlÜé¼± ò"_IPxЦIB·â·Ãÿ�~ì—E¸N 4 'Ž�œhÂÈíõÍQWÏ©^­è87xà9²øåÚçªoêl˜ï z ˆÈ&L¨2Üh}¢�ID\›Gøu¾_‚áØñcpB#›?$Ó’Ks¿Aî~[-é¼iÔÁ b4–¤+l椕áóWòVÐ@ñ '› Cza`Á;[;�†£~Œ‡aõOnAÓ‚ªv!vT18„^{q°¢Ù½®*"æŒ ý˜¼e—ìð>Ç$ÏÕ ¸!ÇtR-É“OSCïNýð-yn—JW÷ë=Ú@f¦;- `özä‘°}1[¼”âTDž:Òš_qéò]|måñ]�›€‹=öÒ™+$ʸ@•Œò®u­ºâ×#}¶ùšc­¾»¡zkŒç{Î�¤£í)ÉËG7&¨Ä–æÅÖú�ÝèëöÌÖêòß.AQ{™®MlŸŸ1�ŰhaˆÎ0±XìVC¼š :ˆŽ{™X³¸?œ._š%MËšÝ?ÁüŸ£'‚CÌ’Ä{F”—»‡Li±ê‚ž›Eûh:yíŽhFÂÒ8½q²©”¶.:Ñø²$—áXõÖÆ¢†9è½n«]ƒÄÓö¡OsBу7ÑO³v¹[©Üѱª~hb¢›w§K’ññøÊ< þyÍ „_xØéÎåPÞŽ÷¶„UÝÂ9Fio9êœ2l£F¯ EÌMv_º ¹öN´[™sÞˆÉu¢I&Ôþ¬fêBÅIæ}!s�&¯K³Ás§µÁ§ Ó«2>0ý.¡kê|Ï6Sÿ³<ó•}ÿmÙEÐTï³ÎÓìTÒ[¿¼ÇÞAå .¤ôÉL‚g—Þé°pÁ‰ DXŠ‚¨Fˆ "ÂEÔjÑRBÝÛÞü@’d¡ȃÅ!®a,&$ôX¡‰CÓ+‚5+óW\Í|Æ|û<=Ê�B÷q7­É·0ÿ,e³ÿv¼ÞS·�Én)€¸w¼Ö­K±Mi›Ÿ�DÉWJ w¢=™Ï1Í.ígŒR§Ãåõé’O�ô¤cS2Õ鞯r|òû2 ãšG¦(ƃ:ŒS~[¯+'ÁE2P¡t&î$c‚ˆ)ùê/·Ï—ïÌ}Õ¥yFhõFåEù9üãz\½ä1ež„´rÒfÈ®M©ëŽîö]$\…Éú»ÏuPeÓ£ßP�æ‡I¡‹jò\èØN?ž¦–C^œ(ã·R^ÑrúkD÷¾õAÚh>hæñë¹ß©$ònaÜx´x’=Þ ‘·PõhøEýåë­ÜŽ~X/“/•ôH“‡ÕÈYÓ‘–4ݶҳŒ,P—œ~³©­€g63KpàµÜŽXsÒiÌb'¯5ü%âá© 22³yO4Í8v�ê>º½+×6“&c·ÓkÜ*/§±#­S“#&;̉%æc~¸wÈ93ißtä<Ôþæ21e’æ$ËDwÈ†Š 7BNÚæs±ÑÄgËc�ÝÛ »{[O¸á@q‡ ~‚É�øŠ-æÓÚÃ�s¥³ÈêtÇ”hkÛbŒÏ_\WØ«[­F^CÔè�`ǽŠè«ò/ÀÖ¥‹w˜°—P}SïðMëW(^*!.þ3b–ê\Ï´¦JÑøT¶›N«�uG|Ÿ‹ÌÎà}. ¢yõu·ˆ4¬gâgÈR1`Œm]RS¢TØZ&³%>Ñwh�vÆWpiu!¢wÉß…fžÃ.AS•…‰Å=d®¬¿,³¿k—;-bNŽd@:0s-=$Ö]Bøv–BO™Bì¥Ö‰õ�Y§ó•ö¯úPV¸¡fNÆÄœ…£FH׺ï_>´/lÁ0ޏùˆøÄ*TLKÊaN\ÓŽ[,R,ÇJu½Ò0ùR±f§Ø£#Ãèåh›M±$ÙmÔÔs1´“2¸ÿ™p*îY•Ñ×môfÏ„Ž�ânOä€Íü麆]ËëmñT¸@K×Qé‰N †Ñw¤Û1O¨¸Cb‰rÝU¬ÆýU�=9i¸c~ºå³tÔˆ§› êØÅk»Cû“Õã´5éŠxK¶Ö ®°J_‡1UâP›Ùjz|áÓ ¼ïW1d n•.o)•Ó^«E^�»Í‰2ûéOŒ¸ííôMÅØ7~|áïÔÆ—ùÍNí}Ò9‘#…nè\ǯøw��'—`«�Ý�¿ß£cÌ�ë+Û,° ªçøüE™3Ö¤µþm¾E6rœ -Tåc¯JkY’éŠÓ|†•‘Ýê/¶ù‚Âæô˜)-·ŽŒ™¬ #°?Ù¡Iš×£™™.Õ(¦¼‘C“¼8j['&,P?ÑÎÍg;|Ø*‚ýr‘A¯áòÊ�!¶¦Ï‹K³Æk AÓHkg·>O·DY¾…Ú”Ú×E�Qçg~–Ó9\O ‘‹Ø1»Qeð«Š�¼ì]i1£Ç"¢3¬WMßdj®^ß‚‹¡¼— �™9Ð;÷f¨ÎiAŹAÁƒðKåÃì¯ËÏÜæAeÈíÔʺ;ä5RÎQ’Z#1º«7m[zXyÖŸR¯%¶žnüJ¶¾Þ½˜Ò™[™�ºkÑûšåÒÚno$뜅¤\Mª§?ªVi\髳ÓÁ‰³Qž5å6Ϋ#máD9±‘rôÄ–ƒïÄᣌϨŽE`æ 3½ŒcN€«äÙ¼´FÑý•rªzdÐ0%nQxQ:Å iÏ¥®_EX/&ÀájQC‚@3aû ˜—p¬ôÓlƒEt³œ¹¼{"Lâ¥ë¢ê(¬ÚÉ’¹2®MrˆhЬ²Ê™yØÕVýÒåÓÝip!<ÿüyÜû™Â†¤i÷ÍVÕ–X91n”‡»›ïíSø¤1‹TÝ&:lÌLÜ2Μ!EÜ×lûÏ6­S¯ 2ÁÔÔaêKv ‚Šü\gþÒ¹ñ^“òµYÁŸãƒcâ£<-ì»KÒO ïd(ˆš&ÒhÞwLøAàF†^>»à@ßøê8³d¢áíÖ¿‹C¹ ûö …2\÷2¨�:núP*£üÜaÄñsb¢;bÇMòËÛj¨Ëµ6úg»·W4qšâqû„C´^!V×ɱlTœ8x?œ¿S¯–å<þyx¢>Š· txŸ¡”A¿n{Ö$¾?,§¢g:¢P‘õ“¼FðéÒ#ï|ƒ¢ëé¼›tÊøù=“ ,Î3K~ßëW ´NŽyxßË«GV!µç¶m9Ž -¼Ö·1²œ½¡ËvìdäˆáÔbüä‹‘Ä.xwi�—ÀþÁžªr8d¹™Š1 F1¦¨JE½»ÂQÒÃÍ©æÔ–8BØOL1·þÌÙ7‘ì©äŠM¸ ´ h…£œ_íhF6/+àbÙª—¥A0;¯c#~¼ö˜n˜NU´rkMm›Lca‚zÜ_¨õ jxgº·¶q~ ÚP¼£Â�ŽËCäÛé1ÝF°äº ù±,Õ‘¡Yhã2ݬÀõ$æb‡Nz*™ÂpÀáK%„á,@W3Þ8ÿK[V:mòŠÿʆp‡Í!Ž(s6ü»“ £´£Òh݈ɓBÍz77ãÚEäM4„m¦‡Ï?xŽ2côN¨a?é`Ô»RZß÷¿$ÑE�âýÛ—&EŒ,ߟ‘&Î0¬û Ì&§Îvô…­1ÝɈ-)iÂlÈ7®']ÿÔ úÅÕB¸:±5t>f_;ã&•²áÿ^aa,0”™Ýó|ÆR •]"žyÖV@À÷ù js‰}7Ó]?Ûï\Æ_ý�¢p©mÌ-nfù³„ÐùüG3j�šBä-œ�Ó/¤;UF¥},FÏý­ÔëѶ&SÞmr†¯ãLÎm²í‚ßå�Ũ¯�f– Ǩa`¨FýÚUƒÉ�+³…�i­R' 3¾hô’ÓfÍ0¥¡n~cÈ©PßÄ?³L:»9£»T²=„µ+Ó’Ý>Ô<¼?³¯M¡Ó—IËåüld”‘*Y³‡\î„h;‹kÕ£ì#¯ß¾Å«Zʈ Âæ‹z¥Ú‚A¥Ù„òÊèÙùª‚‘pH{˜ 9Ÿ»½ôC6šÙ¤ËM“§½#jÉ<5 P!êöømäø;¾~â‰è›;r^˜3P í–ôW™üÙ'ϨU.t�»¹ÜÖ­Rˆ«�ÜߥÐÒË‘�‡pz9ç@¾9t{%i¯Ÿˆôî×ã‰"VDÿâ8‚ã‘QåZ³È„J�DÖ­ F�_^;‚Ęõ¥>]¦=#[žy˜°&÷™±ŠÇb2àŽ‰GUÏXJ3Âæ6>dg`yHQÂl! ®GÌÄ!h”ONÐójÎöv±Ü saлŒç‘|´aǧ!«E},ÊPˆ ïí—¡jGyÁá\�$ .HÓ’£w�Êi³%“‰TÑDnÈÞd.y§´°ÄÐÍÄü‹1vP$cBÁœ—õØo¸$óãÔJ7 Ç&g§ú%VÎ"-loê"­]-¢šÈùäEŠ3áàŸE¬¦œ¨¨×cº2; ûGx¨Úø\!¬%Tøª¢àAr¼ÉJ},s\ùúU'ðn ñýS"} ŽØõ!S6ðÊxAòh(ÏÚ÷^©þ÷±zKBBв,„: T8�æ®§,ÂÛg¤¤!kIŒÖ9È"óí²­é”‰L‰‹èif-æ#5�ÓK¾CtÌP�§cFÓøê¯lUùòßÎýk¥¿AÚóó}/éMÀˆ•5z6ÐjÎ;ö-­ªŸo誡Aš©˜I·)x× (Ú²£ïÝ£Ô�w±È¦ÒA‡ÏE!iú2ŸœsEå—^(k¬tB»3q•3ù-Ð1ß'[3NA\F/î‹ ¤º‘˜?‡ ž; El, çhÅM˜±™ì ¢œa:@zÛ¹oNV›Z��T• ˜(Ü~}ÕéYÿ6’­Ã“R�×Bur:æô{evòב‘à\íb ¾¦ôM×§h=âáHìKÍ—óϤeìgf¾ÒSû¢újt}bæ×ôϘê�ªS6ØZ?wèp˯ªM·lib¹Uò“Ôn�ÛCI’jGa‹ÒQ¿ò1R^™t÷öÕ-½Êkpi2¿R÷�.ìãYm”óiy]„·‚"ÑÌhã¸�—ëIí x¬6£‚q Àü¸q1åY0ôÉ'¬¤$ ] •<­6à‡,ÙÊndÿQ·ý5Ù)C^¯+‘)…¼m;ZMô<¥ÜÐgîÝwüoÈkäŸàCrw¾5Ø“¬l”ÃÓ.¹%÷˜q<}çD¢ Æ@rq÷k\'`1¡Ú�9²º`{¾×àŒŒ_`Z¢pSÌÒÿl†RºD'w¿¦«,ù�ú9 �žMç>³Š+9Ú&ânA~÷€ÊA¸HMÃürRY¼Q:!–E§%Öþàþ6EˆÂ7R÷Ó\Ë÷" GôÒ#ò^©êŸºW à�/_å D šÍÒµ³Þ9^¶"į̂G¥ëÒ?N³D}›#^¸W¦(qãR9¹™¡ÿˆí8ø | 8jÜB@ÿºÐ˜ªÎh %§CNÿýkwû‹e�÷¬ý$höþÉljgÿ‚Ñé[Ø$AŸ¼ô;�PªÞõÜH=wï{$Wxv¨Î=Ä‚}ŽÂø‚ÏËeRŽøç?5,ì0Ê‹u4:–Í} æTØq†Ž—øæÊå&A1*´yah=ˆLÈ�UwšLÄ�¶¯]ój‘9mw~sívVu^™iuï‘HäÈr¨tºë@òš &_p-T)�wÈÍëGVLNpL9Ú³~ì‰ï4³Dè*ÇÒ£”uÛ²¶YÀ™úQ9¤çá"6 'D›ÍÕW½ÂuJWd cHJ[¹¤ã‡²YwêÝÂ_’|V´mƳÃÝnEŽ…‹›B\øÎÐ]ßE)oéÎ(ƒÐÌ�3_»Gý½Hñ§Ù¯Ö%T™ÒQÍgukˆDCA¹0qÎt¯«Ì·}%ÚƒÙTtFüB©‡¡Ö¡3nÌ^º|Â~DCÒIÀ”š<|ì3`R•²ÖÇn=!k�åõ-º‰î÷ÙðD'éÞ‰Sò�¯Û? 5WϰüÂËk‚Ö~¶!oì>W(À©1ù;!oN'UyCî;Ò Þ‰, hGÌ|‹ú…± 釹sýËÒãÂ? o£M=úüj™aw“ôü°_}Í?¤Qrny?~‡~]àî¥ïì%èÊ6©%ž7I¦íø«k8ÁÒÁêl�$”Þõ‰ ¿ØÝÏŸúK±`t­Ímcw =õ› Zë.z>5ß.&þbF#„¯³ cWÖˆ;us·æ×ÔÔ-l髚“Y3UaV¥‰d ¶ì)¹_·¿b·Žm«f;+³# _ î–?H-äô¶cùÄÇ vðÑ @MšÊ²{AÄRï'¿zˆïa‹»6¹÷÷x´·V©¹šr÷5™ò&x*-A!ŸøUtiùã"¸v>ï}ªŒý­l ÿz¤ E‘öÞ饾ï§)›6Òsÿ�EèxØèl6v 9I‡ÐûHde‚$™–A?=�;² ôLçõB´ã@9=•±XEoYwß´¡Lñ^Ý‹p‚ŸÚÇã×Á¼%˜BéGr/Ýú/Íâ_ÉŒR “;@Xo_·˜B™kÑ?ȶi_ÞQyTƒž’p ì;‚b¾Ñâî•ðæÑµ9|þ�üÙ°lLWå°�W͉SÛÅ»ˆýßUó,VèU\|’* X³ž™ê¼>5“ã£ã˜ÉÏLܤšª�3†ïI?R‹4\ [=›[íKöž¥ÈOð*?⃚‡A$ûÞCIjø^ žøº`I—µ­òþQI‘J7J�Cÿ\™xš�Ýß dÀú*Øãó&Ijø-n‹ żê÷àVl˜p9Áù'ëñ{WÏöèOFÝ.dû_¿YãYÛ±ß £7s«»è††à‹Åö’™A'|Q»2;xÌP\T38…UFPUAÖ}ï³�´»ÕC­«Ò…PׯÌÓ‘¢ àõœèœ±1ô$ñ¤Rœxs¡åý–¨këCË¢ìÕsö›¦^­cÍD,Ëå[Æü®aŒÒ-5fÓ>�ǰ±›R¦þÙtíZW”s* ËØÜÑøK߆I òuÙÒè)WŒ4×ûV(BW=úx_ù≠èH~Eà½1í�Q¼õ?äN•Ч‹$„ƒmUçl„×+[24ãhëV ü¼å~°!á·´VoV[%–äÞêùæÐ7²"5åçRÉ|Þ§EžM7õéSA¾Òå¼¾G¹’:ÖBP¯¯öM g£äç›ÕØÓLVSq>n›û5S/½4’G¾ØoEê~yP”OÜMŸð|(¢[a/Ÿó#‚K9·j¯îTæh†Lt² ,¶9ÅÙ8ÛØž«žC¦ý·¼‰! X‚5ùë‘ò†ƒb¨†VEÛDQ U}3ï¤|WkZI—±3cð} ©MÅ\xæÎzwOT�t£�ÚK\ ³ô�óÀ'… ;{ƒ÷¥ôÉŸ33Ô.è°‰Þ›àÊF~®y£4-MÔ’Ü%�%oëÁÓ\…៕Z­TGÁX}ðÉdŠôìYœçÁ<œ˜«yFŠzêQñ… ±šõ~Ê¡èzôDnJØè”OÊ×jÍvÎØßOa`†Ð—ôÓØLä;ÑÁñ8XŠ··®ãýœ‡‚˜œÌnR «§ûü€íÁù‚ümÐ@7×L�ÛR%R“ç�ôP7“Åímݭż ¯Ædsb§º‰d—ôæÖ‡þ ¦ú´çn‡[ÚÅ·]1Ö*™'ÞgË“ðdÓÊR¯Õø'Ÿ¯EÌ�Ö�Ñ9ÉkŸÊš"'Ž4‹õÂÃñûÞ¼'.m�ƒa*d“Bó徺|hñ¿þÚC©J×73ÃN`8ƒô–±*?�BXÔþ…1ŒHÉ-/õ^Øœvi û|,ïÖ(£„æÿñH.Ý|  dÙâ5~Ñ 6$[Áê y"e•£ŽËb9½rt ÁØýŽ›jÑâ¸[­WWÌÎà§¼â/!;§H•Ýë^f©7g\æ´Œ*=úvfgÊ–=ºŒ”šXиo—Ü‹^« ƒQ"ø×¦@U¾ð)íû½Ð��ÙQ5&A +ÉdM¯:oFN5f�´†ôâ^VuXå››5dL½¼ŠƒiÞú}áµmË.¢‚Ö— � g,ÛvA�îJäÎÛb)}6$+ošßT¤Ç{@Õõ®lcdK™\Ü›‰n}íX¶…„`™ �c°UúP4ÒùÓ.�žÌuÔŽ‘2“¶Cžñ˜¾ÒMNt¥u ’l$ìø²M߈æ[[ëwžaÏð« Ï©`³ºù‘…;]ˆ ìÑË3¤×“|Vâ¯%™£�:éseÞ€y¨ãq•x挡Ÿ2ÔÊbXÂZ!0�ØBFßøÎ�ˆ]Í7øÑ‡ƒÚPIˆDÈ'²kM„‹Ï}+<%¥Ô·ª¼ Š©”·4w¨×o@mýOõr¨þ¸ÁU¬ÜÎ?kB�ÍN×1Cƒ¸·PÛŒ£ëß»i–( §b5=©¡ºg„¾ œ ¤{ÉG½ä‹]ÉöÙ•IK×8é/¯[RÖ<û‘ª¤ub~«ÖëÆAìê�X¼ud¥~ÄY'ùÝÔ6¼ ¯ÝüÐ#‘6}4BÁQÆ�"rþ.ž�‹5£ÏvÎa·póP“­ŽÿÆúò¶jvÑ\L©¦$e…O¿Í²ÆdrP-™i[å\tQ}¬Z— g‘ò¹­õvÀ^I'€åb‹ÔÚÕ }h«(ú¦�6#ýµa$‘Õ³2ïáü<º¨»»yÌ}eWнK#]z#‘ÈCg²AËM¯ŽM>›bå�Ëj/Y�øùŠ#£Ä`§që@=Vú"'Õ¡íB�²õ}^µS¹ÓW§¾�²™˜Ý<¾yÚ-šm¶´õ(�7c†�ÆdCd×§ U7‰ì—&»/PïÒ~17q†EÇÁ½Ö<•“À›ÃK÷~ ‚] ðîzˆÈ<¿¬h·ÞÖìuñ)²Ê€˜”«É¸›x\D¶�\ŸÔ"aÁCBðF2 ƒ#á 4Òï%‚ÿVmm(t_A2¨&ì!þË™2Ù÷ëÂ5y[g+ÿ ë€{Ùù“sS&Ü’R>̘Šé©ÿð%R]gqÇwø&b6—~ÿ[ ß;&µ>îÐsމþV»«¯'%×tTpˆÏºõkÑ„"z²vˆK ¹óŽøX±êaE�‘hÄÝ4�Q.WÞ$M(QæJ¿¢_–3~*²8W]æ�ñ‡M£3ô‰~+ÕZâ5¦ÉZ}ÀÎóAnˆ·ùû=ÂW ‡0Ü[..Á·Ë5§"ã¬N8-7¬5A£©þ~ëà ¡ë*°‘lƒm±ȋ“ÈZsF„žá§ŸJwB‘¿aõ! ߺ%·0Ž÷Vs”ê!¢H”)Ÿ¤=ª‹x›ðÀ²šY€;°ÝâÔV1^•j+�X•Ð y“ª¤¾¯k#–#$Ÿl^À6±ÄŒ -rE_툄²ÆhÝ\ï`Öë3)*Më¢R$¹ºM�¯®^€ûµê«Áû!ö3Î炘¾�Æ9h(v)—‘c¦mŒÞI¦ƒŠn’€_¯wMf=KKÊ-)¦3»wóüo¼ß±—ŸY;o˜ÜÆmªÑÑŠ†›moôð"lþèë†ÁÝ0àh÷XZÉ÷}÷@1oGgtÑ ¢äcçAˆ³ÇHõ(%!°›}XáµX#×°¶ÐÝ–[S`g(rêÕÎäZ’î¡÷y6Ô)aå­c£i~""ÄÚ�æ€ ›4/#Ånr“Ѐ§šJÚ(홽g€¹.g{oÕÑ65�ù„¥` ûêíÙÝNSøñв ô�øu7>¿©5 Î5ð«¼æYÂ,Ìâ�ÂÓ9äŒPB”cû{­2’ h•œ.^I�g™$.^ øNóÄ[ý˜7.º¹©<;‘Nš§É;¬øGv™]ÕúJzœ–C�þrœÚ³Úºßã–ªÛ€ Ñ�ô°ZZ¤¬]ÖŠ-S¿@ „çªiº¹¨¤Â.ÜUË@›mn©âÇÞ·ukç·ãÒÁ«ÎnœFǘÒfÙ¾IîQ•/©óņ»+DÙü^œt´µU Š{%—^:ü¬˜ºø «�ÿúƒdƒ*—šŸYÇ|QBö§.ìu®æÎq›._(¶É˜b>†„ôÖž&„½‚ðÚXúþÿñßpî �Œ¥Ì©D‘17Àª3É]qÏ~½-†�s•ÚüÅð!TF2¬g�'�5ï»Xɾ[‰ ÃnK¾Ä–J¼L™ æMc ‰ü2[ˆÖüu?Yküئü%ƒÛ+ZˆAâ{wDlš}º©¹q‡ã!9maÃÉTKm(õ:è…G—–†O¥I½¥Œ6=Ùë«Õ ·[žNIµÍ™ñPþ µ~§!V½›S}¡ü �½)¥ÛšnÆ-çô2êD·OçYôge1£È#GlaG92ãDÜëK'1-[Å,Íž‹™]Üõ" guôï™x�lÎïÚQæÔDÒɵ3ç¤\«�³Ÿdñ/d„2,7æòŒù3bÐH¹Æ2)ÏпA1ØÌOj㛌¬qí1Ðq3:Óôa¿“‰×îúd”�3ßòPÕIIóñ±|=Á‰¶oü&Pù Wtp�).jë>¶Ì³K §À2ëIú…�ÐÚÏ!~Z5èΩöŸœmO¦sPµç7—j¿j>“Ôs0Ày#�*56p½ØááBì�1~—˜Ë*â£Ö'`ô…1ö(“¹g&GuCÔ³¹&pÈ‘)Ê�ÑÿüôqÖEm�¹œ¾‹7GØÆ´z½²¡ùþ=g²Ùq}E äŽg‘Ô,DZL4C òÝFÙ™—C¥Š^°¦)óÇ–yä„W¤_¤ðtTåå1~Τf©“i£rÌõ¡-sfìr—ÜÍiÛçÑ£F‡õvž&SNoÅ+1ȵûE¾…�üeFþÄ‚ZC³„šÇù ±‡ cìõiÈ„f�#gÒ)µWt'¿ÝR9y”XŒ –¡×A>^íÎÀQ•�z.;˜; zï‚‘É$—@>›J%Ÿ‹q­rùÇ2GÍ£§ë"{¹¢T(!eÇzGݵ‚>ˆu�%îéÜ;ߟ›rK*º Žï_×E*'ø¾G“j_#]`<ŠGéö” ·ÍéÄ ¼Šk)Õ?NCíÝOçèrùPA<™¾N¸î@ǹ¬ª’³]«›º�T|F#üîƒÖ�ÂxŠPÚzárÒ¬µþF¾Hé»Í  ›´/)o™°Ï„™ˆ\¿Ê(¶&µõë½4@�™”:͸B÷ë¨æîÏúkɺK·ÚåIè½x@,G(†E¿N½Ì'×�ç\ü¹Ô™Õßí+Ó®§ù ð†²eúY_.uÚðÔÅøÉ`œª‰žì¿”WEì–\�hôÖËeó ½É[ly¥ÓØ„CŸv+R(šYK�B|ÌÇü H-n˜KúvûÉvô‘ôT†=F½_îVdé‹ÿ:Ñ'ŸH´J<ZqGø'-ºº¼…Ó9%eŠÑg¥)ç¥ÃsåK½)vú6ûŽ|g½÷N{õïO;o}lÙÚâ/Ïaì?M¤09¸Îá\Ñ�Lgg¨k\�¼•S¤£1cȨƒ@ Y«öıu`ŒØí‘qUåðÍšL.ÐV>X¨µtèš¾â÷Me“jÒ¸bhå$ñ|¡&Ý�À·ÚhÀê S«Üˆbn „ðþ¡Â¨}�ƺöEÎ?‘¡OšË=õ'Ú€ÆÎ·nîËÍì¦Û´¼ .ˆiI•«½O©B e�«yâv”ü:�,]�ܶa?ÔRPÓ}¨}Ffþ<&³_– ߀÷êÔR¸L1KxgUõ|Ne"F¨‹)•g¥¶à„¡-ùƸKéU6°‹,Ð_dP5‡*ƒ½¸:î1Å#cüÃ^b¶+'?-§[ Ôí„Vñ4(Óáyå\½ݳwá²< 1XæÉ2 žYá7ô9¤Ó„Ê„”E4%afòZca¾[¸8¯šbZRD•°9õðÄO-?yÉê¢V[Û}—ÙÑ…Xåeb-¼E©�.¡šæóN¡z5-¨ž 8†ï‹–ý®Áþؽ°©×´1 Mޤ oT�Í;ݽ…¿Xqø±ù¼Ù|±¦ý‰@˜N"Íx½ñh1`%¦½bQ–øŠ.Ìãs£>7½Fí+`ŒøVIïÌ &»j4!JQHÁÚÄ[<Šáx.jÿS’ÓNeÉcí÷ĦQ祼~µŽ>h¨ñSïg¶èW¦†ÖÆFŠönKˆNzô/¥êá/µU‚ÀýíÞ±²™ÀCŠü¬—J &dý$—À›µh9-¨˜ úábJöaî8ôg(¬øHfdºÎâŽ^Dî‚_I½î=SqX %0›þB%² ©FËñ*zo/F‰ã“På¼ UšœW’¶$V­šÛh”žÇ¹S{Ç�`V,»X½ˆº~ÖXÕ ¹C)Á/^ÛzU÷Ÿ½äïÇ™#y —öÜê�¬e#).ºŸ©�«ú=h§h´öºJouTÊ•MDQ„±©=(HΗ†¶Ú 8=ï­ø­PŸŠÕ̵™û‡·À %.ÖëI˜Q¬{[sàTg`m»CR^”æ1@Vø\qløˆ[gó¿-GÂpÆÙÓ²y#2 Ö0lJܹ¯!Ýz”$¹QDÛ%ê>‹!…?ók ë…ÏÚú~/u–R¾¹,l�!Å$8ÌÍè¸$Ú«$==õª5•a7n|E{˹&Hn¶ù­7YÓV±ü+Ê¡á$ió‹ÞÉç[ÿ&TºÈú‹¹S¿(¡�61n=I7ÆîžJÄ1…„¸(UÎ ‰È B¶ËÇ VH1ÊÑQWÜnö´GYäW¹]‚«HäεŠçûùØ™øÍ¡0 UzleUóÛ™Ð73Ö×�vI6ÊÃF�ÃZ§u´BõkÁÊ#Â#�™ÊXT¦î ÜÉ{‡B¿ +0 ìñ_Ö?õäñРƬ (õ|0¡–ÆÚ7áð=“-a¼¢U�…g¥-‚°ƒ <¨<uÞ~)r‰¯ /@º×¼÷¾�×ìÿ˜Iƒþ�(@RAB�&†�ÚÓ��hÈ*à¸0\1‘'ëÎzíWÚÇ¥ÒÓÙU�7‘O)¸�yØéãëã6j…—Bå´Â´!0‡aˆŸr„Ë.Î&e-R– ¿¡U˦ÑÄøMÝsk×~�ÙD 'Uª7’÷MI»„`D ¸CN~°¼ð™â…lÑ}N��€)D¯Ã„Å&°}y¿)?—µòcüê{:ÎþtˆãNë”ØXŒÈC“™üjeâÍÙü›kûñ `BY¤|é=Aÿ79l€/gеÄBY\¬‡b‹ F´™°L�}ƒÝ7ÝOäÊnŠ´dç»I½b‡xN“ (èM!nOÄ�¤Ä—ƒ¢-S¯Tÿ·LÜ_E¬1Š.MƳœ$|ŠÂ6Óâx—™E)3§áLí詎Bé¸i4§}¢às " ¸ûW¦G~á�=óŸéPXw¯ƒÒÃâ�ééŽO/"ÖùªÍSq(ˆª·ÚÜ&ëØ �,àÞ¡e\ñ@qý$p9<”Ìq¹®O§ñ¾ÑZãÕo¸´‰eÊňÄ!¤¾¼�¨UáØ3üΆ)�çp³DDY#îIûÈÅ_º²Þ¼Ël´°6 j½½ É,È`ë"¸�ÔGâçÃ/ܧCû2 ñFެ¯d;n"éÇ" W>wOi‘Ct´Xœq½9\—A3Í›ZGsÖ]`‡ž:],\‘ §òrÔïåŠÛåûS†Ç싹ôÆ8‚ä \:ñ÷ônñǹÛÊäY ¨¼ ~·Ü)ún¶³Ä¸´ðœ­64VÕÄaÚB‘é4„]eÛ®%±3ò i0¿¼íKŽbžÏZ/ZY÷›³fº?1¢Ä�Bb0WÜ„¬í²r"e²› ÖàÖ(јfƒj)éYuØÊd'ÈMŸ¬VAÒV ˆÜªÓ(žÍS1î{¡9žvõ-ä úª$bVöUïí˜Þ²õeâÂBºÊq6¼ž þ*Ó¦uh‡Ž9óïÇñxê¨æÅµ™ z.&²=/ ΕŒ ˜öZ�ë)14iJüÂ(îet Ðî O?¶Â�8{FøÌñvœ¦#™³$ÓÌ8n_ c£ƒXmæ�òZ~o°}ý¡X. KGMVBûÈK:Ô~µŽxc`ÿ† nIÝÛ *õꥮ#[~ÏÅɦ¾!ßI Oñ�>ºKêšÖýUR:;nãËïÈÊ�”“ðößdVEILŒüRâö‚½,#T—v | †ÛÊöÓçjÖGaiË÷ø0–=­Ÿ—´Ùß®û˜Oµ$½øäœ,–(þ2ò)Tf¡VbscÙkMÙé÷¬„ér˜µD—"Ô©%ÉÞK—f%LðÞï�¸Ù/‘{U+›ÌOÁ/*cÅ(lt%³±�%àîðå©R WX ´:Òm­Àý½‚†«­»ºÏ@ÂW6“{#·±§T-+4ÙÝê¤ÙóŽwžB1¼áK®·‡SíRó‹Ý1.Sçè× ˜¹ŒÆ/Ó Ê9€Ú�ÞP)"Rš5=rø%‘N´ÙÍzd½RšQœ~Y™(îsüšå^ýÒ`/¢õ‰­i�)©/ŸnãmЃIíƒÅâbùB*¹ôÙñGÌ%69¥Vâª;"Þâ¢y��Ÿº›Eе:�fY…CS€/@Ìqz$»‘�Mß㹌ÛÁÞä u«4™GÆ£l ¿”Í„ìÊÄ3‚É£W…̬ÐÊ lê`î#T„L¢D¡¿m?ɼ/¬GÆÁ½_º–îžUæ°ß½†·ÜH_Z¦)¦@ØB¤~زH•IÉbY¼Ÿ®¡°/jY�AŠ`!67ìu4nБnvȲ:q,mÎCÍU«]Seç–÷ É!ëXH{�Ô3JÄjßtæú`*D¦ºƒâ’½�Ëð ØïÂl9o”˜Çš,­˜CŨ¯ NïîWøVxË3íËa¤ž ÷Nœ½»¥¦é›5‚ÌPÈ HÕÕãïê1�EyáÞ†r¤šî¯÷X“~’  Ûq›¥Ö,lÛŒígîMàpkœÒˆ9¾$¼“dý,—¼à»�‰6!Écs4�çê#¢êÊm�9vñPÜ_y™íŸQSldúš#…º8éöNèôhŠ`TÈ”H#¾ýbܱ¿qû0Å`苉ÀOþ�+qpëH:Ãèùê.Àtãÿ B1½Îü·ÁÑYE«¹®6 °Œü‘‚c»Iµ å6ú=mŒSPŠyÁÞp¸('—¾Á‘dQ,€ÑÆè‚+�TÅä…Õª¶‹¤‘ƒ !ã•[IÅ!X¹À±¼“<‡àñðþª±‰ZI�‹·ÑŒ~í¨Q@b \Zú±Q±¿ ljc:„¼^ÕýuÙÐ&Ê#œ5¢àCïQ( ˜€µ‹-{fc)††&ˆ,g‘@»Î±µVô¿úb4€[¤Ù#©‚ç;¶÷à¡?½ ¼`«±^‹]lŸÂ÷¾ÃL“Œ;P&…Muz%ÔP‡±ž@�wŽŽýÊçÜÐ~`›C¢i«$dûtZ‰‚€Ò}oîÀ•¹ó¨ køûÐ$`kgj.£Åêz©¨“³K+\ý}4l䲊*ÈBN`¬çH L€OCß³@ÍpZ(RÖ5O©´@ƒuD¢�ÜÏíüå«U¼â‹;ÎÒ^2wÛŸ¶Q4õ÷’C´&W–>ÓŠ˜-¼ †»ÿ]÷¾5w‡:�PÓ�Cecl@›CGÞa×),RîYõ,ã~åõž=O<ÙpœÊ E=†eEÈ …bÿtìA%S¥Mç{µüÔÊ®lf0b»MXÖàï!;Ö‚'ÄJáƒÐ =âÝÍùÛ ‹Çl¡õç´×v„ä ¤³:&ʘDÙ­ÌD{†‘Q2áoH�Tív× èL« á3úh†ö^‹MJçÝŠíÓ)#:ý!ÜÀuØŽ$Ad¡Ó"ª@ng’T¶üîkô›D¶!©T±fTæ¾ìÆÀ³û“³ƒO²¶¢2mÝøÔÑ–�Â¯Æ ±žÍîÑ çkÅUÆ1­­8÷lzÌæ ‹ZÊæ\µó˜ð#lè'ËVPÆ*vfv ÿ·ë×$Š£úS¸]>æßi�¬Pô$‰ªñ‰>éÚªàTš%-wçšÓ{ñ^´}v´4Pò/@Í|?”Ïꆠ %€lòçä°|¢Šà;å<î»ÓE�¦ÎÁèà"ami6z3NÊN‰èO0çЂ2reUcDI¨ãtOÙèqß³ü±®õßx 7M$)6bw@Š´P©…£W*eÆFÓzÀ¨I—}g¼Ê¼Þ¾ÞZ3™x¡È'à°_Þ?Hþ¡[T€{ÚÁlK�Ò€Fü”Æœb Æ+âÜ{¨LñÄ}’h ›]0bÓÖä/EÝ ìi õuMñ;{1`Oêm²5¡m ýbÙZ¥J†‡N¶ÊB*U³¦îe8û%™¸Û`@–Ö�‚p'ÖÃqþ­{JE8kû1Ûz€&æüi…>Mn¡—mÛôIâ|Çà%Ê7QuGY¸ˆ]+âzî;Ûñ¸z1=&Y•ª•<”ÄÉy Ýëƒöò§ækIÿŸÈ2‚D2®+�›¬N pðA5mQ$Æô+¯>2.ò€»1ñ�CVÞð-d<ùSûßù«O÷Ú²¦³GZ­Ë’d AëÐÌmq¢dØOÙøž±Óƪ(Áî²Ô�¿ÁŸ @^À†n ¥~jÇ�#E q7µb ¤ßP ò£{ÆJ�_q¶­£úëä¸F2Ú¨°¶Yw'Ô�¤†;‰<‰»š:ùJtöDÈêÖØuø±×§ �Á„€÷ð,·}çÔ¿ÙÂ>9ޝ€ˆ/â“‹ù<e8ºî¹OcQÑ%5�•¶Á>hʾ†WL2òè}ù’ˆ¶�­ùVeÂJæëµŸ'†tŠþÕô*칇?¤|Ûâ¾t5•¨F&Áiê"îõ²EìyYŽyßU²/À=–7PsgÜËŒ.^û�ÏI#׉ÃôþPˆ—*<ölÑ•Ð7ÚGc·ÇR>FýWzò E�š~À~µô™µ_Z‘9ç…Vw³¼ï.Ì ÿ}1Eƒv:THПŠåÄG*¶6÷¼ìêðb¸¢ÐfPØt:­,­øªt±ã/øjâÖH-(Ü÷U�[Ø•”¿ƒëeZÞ% }3aãï¬ÎNÔִ䃢â:ñ Yú.Lyá8‚8·Š"]µ$®)>Ur^H©�ÍÉ™.Zp‚[5¯ÆLCCyȸ˖�7ˆºyq(9‰Ü<€†ÊëÆÔºÚÕIp¯ŽLøáè—í$eô*=ʧ£–3§R1ãj†ÎSæ} [!!Ì/ßïöL¹rjÙŽ SQy§CÏô3 F4¿ý¢•ÖTH‡47×ïCš¤(вë#Dm¸^O³M±½žr@[éžo8L–¸3×»°®áÍ6ò90}lžÅ…Ԩ쩺úŠuçêW㧦h€æHÌö:£¹¯c¢ÝÓXƒ~ؤä{ªÌÜžì7Øí~0Î�¡Ðx2ßr¢£(UÔý—­‚ÀåþXfdZ¤‰„âø«®GQ{Þ��ã¤�"½bÖ[Žqw=ÇŠ~ g»]a‡`wÂb _€£’yÅúSÅDp×ÚÅk•s`ŒÄ%µUÃcÁÏ”Ÿ­²Ùé2ç7¯·FÞ€9 =™å+ã¢Ã8Ó¿ý.Ì:ëgŸ‰EÉ}M�¡\þã@T`@íœçw,~èCÍðx:÷G\Û.å§Ð Ái*å?Y±õ-Ðhü`sdÕP…‘p´Ê9q?:£hs0ÀV@ÁÞU µ¼Â »²‰Hol~#ˆ×FmÈ;˜�Î"µk犚·÷~ÄÂï´$÷=·Q� u5›eH_ד:Ýt¦r%4º4™óñ¿0šÞ5´ca†N¯Á'ˆà é Åûxîü?϶ê¤?å? ã)ò™.ÒÝ‹ä9l�M5Šu{Ý¿åÿ‹õ%zTšK©†mv"¤-Å©¼�)Ðl7&²„´ÁTÖê)ð¥ðø.ž«x ÐÒ`ÔêP,ûE»E\œè˜áúw¬eý`5ºåRäŸ`tü» poTpù¥c2šê~‹\'S�›×ÊÿСinNøJt™&[ù‚?}Ò÷ÖS_×´íÍÝY•¦âÇ,9;w‹v=1»Äg oþEÿ%/J-Q³ªp…AÄg8¡àÌÌ@@[KxóPçi§ë›õÍD¾dc‹m•' L¢5¨D…#äûaR+QSjÖŸ† ¤…uûèˆô¼»€ÚïD½<<6ú¼˜˜Ä@áÓ# ¹�!�‘+½�!}ì%úÊÞj$¿@$j¨Ù!%{é¬k÷Ë�”õ˜ËÛo×r/J÷ÝÒ/s½äÑ Ø*ù­Tà_˜d2d(/Ì Ð–#^ŠP á[˜‚½ÁJegÁš¾Uøce³ H™{<Êk£�Q¡{åáQ&³;õ«{=²GÍœ»@6p¡WåP±åë^N‡¶S7ë>7üOÎ�”’è„ä2õ3,ab;gÃ;)¸ï[Œn´n\@±ÒÒ=™úã·�!Q¥íÂð‚ õh«g»1¹(õ-)ýh.«œo /ÍÑ’–¢ _®Ý½,½¶{©æ_ÙÎ_7RIp¬È㱂c|Þ4ëÖñ{¬¾Ò^¬õ ¶ž?H¬UH`‰Ëñçïœ!³Ez.=dü["OgcÄqüà›è0ïªHØ vÉ[ñÞwæiýwíï·K›ÊÄ XœyíŽ6âáýf–*Í€"Œ¿…\p †bKX?_eôTáâ}7DOwýÄ>@þaÂæžç¿2xl|LÙô¡u†l©bmnt¬àg(~ê)$%| ½®¿¤íe;ÐÄÖ`޲ÂY~öD#|«7&ÍžÂàD·,êÖ�šqtB-¿Ëö¢�ϧ´#8l·_™¿x}‰´ŸàѽU™òÛƒm›�ÐqÐÔ� îj‰Dä ”DïUHçº!ä¡÷1<“™8´þŸEÍF�ÍeÉaß§©×X Á[È�fVkˆøRŸ”1bZ>ÖK%��– oJ0[�.m²ƒéI§Gò°ë˸$eV ÒUòLÓ›w£ðä¡wa7fJ±л�ÃUih[ñaŒ¢! æNµ¸õl?ŒZ0¢nAšÞgŸˆË…ôBÿˆÇù8 ¼ �À1ŒB +žÒ|XŠÅ³J �Ââ�y®Ð -ý©²'sóOù_ÿ‹®7¾±H.«-¦ß®õ2STš[Õ–âÐê¬ÞC**ªqU °5¶« âO¬ó^„ÐÂÆü)Ö …7\Tg\¡¼Îcq0]χ—ÀÁҪɃ‹¸øã×Ä€™Ü¾GÛQÀm öLѨڊ"Rz|ßRôzWóiYÈ4«œºÜ-H`¹†|©Æ®žnRd5h>¨8DœržÝÞJ+á#BØ"_œ£_ë b³ÿÈÊz#=?EûwRK Þ¨°¿ckªJØ^}–±Ü™¥£#xó®Ìë~F�² Èu°Nâ½îì•#²ï:Ú}ܨ`±ß)±&¡™•2¡9Dz΄êû¼G¿}9 g%�½{­ŠÅ]P$ÏT¶ËýÌØ%.‹þÔ3¡×15qÊ© ÒTÙ0�8_|1;OdoŽùî_ ÂUt%–;¦5 N‰ø «:U3o|=º¸J–ÂÙ¼T<$C›¸ùRÍY:úm$¿µx=³ÀöÖ4¾YKe×nºwâ›+@™•µëjˆ£°Õ<”9iX™±òÌ iÇ]ÚcÿÀr1¦ªÜ6îî«­˜d¸«ÜŠÉhEç×´tÏ:'¹²5¥èŽ ’PÕú #•Í}è? RšJoÀ^Áú\2tþªæ ºsì ~—Œ2w©ã;hé#×ÙÔnÔ¦ˆ;ô“={A_ÎÀG82…BÈñûm÷j"QÇyÛðdŸÒoÐ^±jwŒç—OÕÕ’Cay%ÀlÔœpe¾Šï°¢JD› GÐÈð³øÏ½{¶–ÿõÙ˜ª…1tZ_^1³†º}Vgý‚Ž&Là)ƒn¡ƒŸº\†du0 [91™—³7öK ¢©Uܶöj&óä §ÂžWuQÝU¥]ò²¶TÇSpåþP=ôE°�¬7¿5ß§Cß–#†õáì:þ&@nQu,áóÐ÷'ÜøB²¤”>m.ûº´9!ÿ@e—ß ÑezRÔœé!t*ÑIÆbf ‰UëHaªo‰yî¿WyÔŠçD%á¤ÆúÈô½öõ@u©ód¤=ó^«ý*m…É6DTˆ áæÉCWÈEÔ6&Æ­Z4i„fýöj=Ê< *i’¿¬  ¦k†:…¡¥è‚Ãi®úC硚‡¤{Ãß,–hpRÔ¡Q)y¥FønÒ,”Löh[•SÛS̈5ht?P¥Q´_á3¨)¾ETTÞ-Ǭ+‰ Ì)¥b*féÿ�5=`o~««í'ëdè¼ü™‡È0 ú²1…Õ²goÒÄSïË5ᙲÛNu5'Kò†^îL×v d¬¶e¥�ãÀmþù¶ÚÈØ}D-¤¦b¸Fö–¾ß�'�ŒUTÐú=0=¿aZÃʬ¨Ö)­ôsîÈ¥‡·vAOMGÊy¾ZtKYS"a¸d×x¹æ@¿�rƒ•píE²FYD‰*¯ê_—¹Ï´å›ºÒÚu·3óHDœèQÄsc!ÖßÎ 8 [³é·"¼”tÐ;É?í`É0`v ú¹¥�.F¨��³õ8Pyc^ëÚ¾«V¼I]ßohþÐÿç8T c[k¿K÷ǺëRëåZ1“çˆL1STH ߆ ƒö„äŸqÐV; 6N)aQa×¹(“N8YB¿‚¯>Ï%«ñF¸yäž+ÒÙÙ=rÅ…À‡až\�ž±5¥Ù ?—+ƒéÿˆ¾ÒŠÜÃäo*BË^ÙaúpÌò©VŽ:GÿY#{ʯ>K†Ÿ«ÌFÒM´n3˜=éªê§ÚýDÉ’£hZâfí>ÎÖ3ºÿÎU5;£UÚeL”�Áf—^Öû�îE…8tÝ‹éöæÏ :SBô Æ¬NN4ZLÜÕeÔ ò10›&)vdçS:îõLjmì�]a¬ýRŸ”1bZ>ÖK%��– oJ0X| bÓüˆN2„ká(¡.eºeÇÎeùúAH¶û¥ð2ŠlרfžS™•(0Eñ8^ä��}¬}XÙ€˜øi`áH(ä·ÓP÷WI• Òð‡ÞÙ¾�kÈ0èÒMîæp½à'‹“†°Z¯þl.ÇÏòÂâ'Ú�[Ævšj«Ð“,x|!<áxÌÕù:ýÏŸl¼Dœx‹B~#æÉε•'cü¾ìô9-u¥úË÷Ê£ù‚Õ‘�Ÿ_¶ô¹RXˆêΓ¤bÆ~è >y})ÿ-Þ6@Êéè­Ò–ÿÑ·Ãe÷2Κ�5‰_q•©¤2 özPR÷ò*b y½ºEàºü±ûÅo G7&áóÖÚ—�q» PQœìnÂ1+}CßçzKÑ„�HVyå’Á« ²�Áy=½o¶q€ï®ûA4©œàf© î<…SMÁ³XÎaúKšŠ-Á»Ô7ƒò€>7Ìf0÷–øÎZÌOIVnß7î8ŽÆ˜‘ã}îeSºG›v» k6h�Ç3)´#H�[Ñ$ná7B ø˜GçîAÈ–`Èh–ÑAìž°²;§ð­,±…÷Dqí— "´ØLðÁÙ±Ó�z»ö²ZNRç~vµÏî¼ÔT°I]0C¸x{ðz: ²1gÓ9PKÒÁÖ„ýc Ý®± a\]‘¹°r‡Q÷I)CâJÞ+¦¬õ¢ÿMZý K“±´D¿Ð¥ – iB �éŠÙJ—®*µÚŽDƒ¥¤Ô–¢Q_ȺÅDmÆÎFƒýþ¹mP‹·V9†´ØÄD½þëlCíef@¹ý�×Ññ1ÓÂÏt}5û…ÙDÁªÚy{*:¬u‰•§5_yÐidyOlë}§F€B ¾MZ¶xÚ!ñ!4ÿ;>̳ŒpOº"@%ëá áb;âØ.Ò,U×¶£R=!ïÅ­Ž=Þ}:?/Öèµîï¶3׉µ­™ ÚUhm�N�n‡1‰­ÎW—ðUfå —ÉV‘ðqå+EÉ3©L\õ:z›ü�ªÎB滾Ý/^žVz�t&=Ëó°#ã¶  ³ÛsÂ%ĸô9&«LVÏMV¶^Í«Áª@šOPó(~‡äWüV^Døð€�&¨.%­kAv³¹PtJrꆳ·ÿÒiŽJˆ,�7ÿ�øóºéŸw¨^ ñ–œÅvìRÚ{Ek ­ìÞQOžÓ±‘‹³�j²´|èÎË�ënÅË#²ÜÁ‡‹îË:žd–«¨K5ð4„(±±n nl d�–w¢pDþàåÕ¾µTÔLS왬^ŽÊá#‰±S„%Ǣưö®™‰ÇËÎj»ì™ì8‘Ro¨ãžƒä­‘®þRAƒÆvç«– Šo7¾¦ðÑb6Ëðhz _.r5鱺¹SÎ�烾6Öþà+A @¦ßÐf}ÄDÖ4"Pj‚}'oRº>yÎ)ü¥Å³Œ†ØÕ©ƒà‹¬À±,pÿíEºÙ1eKû,Ø™9uÛMAì&lX†-Ä•ÜÈË„]¿±êç7UbZÑù¸ù–ne§ÉJ�íËWt®Á,Ú?h¦ Õÿœ¥‚x.ïã36ªÕ[p¼yÌ™jÆ©4ƒ'#ý sß²üÆÊQ —¬ð¡œ7*—0“øãzíåŦêüì»á6`Õ69÷ÖEãèr½�m­pñ9Û™&pÙšZ|èÌqªK¸M­\‡2¤(P Qí$µ‚ˆ—eÄ£‰•˜Ò.¥]çg5ÓÂÚ¿yî̵Úmà`1�¤‡Z¤ÕØvÜEÿDKóL8ÊCX^€B1%—i\½Ñqò»†oZÖ’õa uùçÆ´¤öw>Äâ¥ÿPSÕÑi�²ZcÍñr¸4â{Ý:>ø€Ñ¹z|ª‹CD,£WÒndÖm°š¹µ½¤Q³°ÀºͦQ1Ù,É œ�òÕL-�oZ-½Š1+ï4FQ[ã`·bîL/‰. ³4Å} ‚ékÜ]‚‡.0ÊcÜ]OË'Iïs­[mÇdÔËÃü*OÌá0¬ðê¡Vãïê7^f�]I‰+pX�q¹ ;ká\°U‚>Y§³à&þvµøa¸­ZóP®qzŽæ° Q¾WžÁÊq¸Þ»Å¬³6å Gw:²­ z*ûAƒÚE²!‰cT‰õff\…K(S?=dÞúÓ·A"`kV�-ªªŠ" îÝØoþ*Ç+H”?@r=Ø3ë_ºÀÃTÎÀ~Ñ#nLž˜/·ªé @Br¸ó„“O½Üœè“rˆÛÄùfaÈÓý½iÊul�÷ÕI°¼k-pøþ.™·õw/M’aP0«b¦ðzä’½Ñ=JZ a™p‚®w�ðÀMIsB(?°ÑuˆŒ�?P%½¸H^9̘ËrvØÿ�-úu¼G€…}`Y>}×®˜¢ÿßSW OŠtÍ¥=Ô¯ø1´«ÚýËâ(�àt*Æ£BŸÁôo†F~c‚ÃÿQÖ(¾;D&ðh„JÛ²ø«Ü;ÚWæÛ¶—¿äý˜>8ÞÇ3¸‰að>5 HöE·™©+XsM�»ñ ~6:ÿû…èßP_¼ò`•£ ¡v¶]¸ò Š’È¾üV�‹5“½ûˤǷݪªyB×ì¯YÝÌ´GTÔ]-«™‡éq½Í;Hë¾óWg�û·Ô3µƒhÓN]qŒ0¤X³Bkˆ�#mWÛ/ZP³Þ™Žúq”û¿‘þçŒá ƒ£ŠSI_è¡à¢ë?¾[®Ðã—ßÑZ:S˜_‹I*4'ùJC(‹i©ç�ÉÅMh´²?ÊM–®eÒÈm:ÒÚ…ˆÅ®àñVk±63‚[ ]²5]ɵ'†F€0G€‘¯$›ŸßÌï ’Œ8#íŸaï –Y„‹ÜÔ#�Wn µ‘Ý ( e„E§82GÄžç×á:Üõ¡¸¾¿à â:¯t·½xåã…èŠTˆ;Ú'€Ëåâñl²}öõ&@ƒäàJΤL[¬[_³…÷§ l=m9« ÞNŠ�äjžu9›ïž¸.kЇG³b¿@³šBLNœ×h×'c�&ÝWL?1g.†¾J76±*ø%öàjÂJ™¸íCÂl�9õݯ+�‹ÖüÒøÿý¶ýù6 Ö?å oÏ®öŒ ì¥e¯ Íýœ rú®ƒ:¦5k¤ï�'{ì©~ågP cÌ«¿=‚‚mW6.¬[qŒ3ë ÃföOlÐ ï¶ W¤£ ï4·»K‰‰‰9á’Z _¹Èš½­‡‰(g1Þ |‰0]*æ@ sA­�á B·¨‘p ¸ãךÒWÏø¬MÅ›Cßܦ&ø¢y»:E’Ò‡0IØrˆ¨ÝÂ×½ ÜâIÊvTvÓ‹éRp‡Tˆÿó—ܱԸ§:ÛJê¤V¬Ï?©ý\ }â~\“¢%š‹¶ë°hKQ ý€ß Vˆ¶möÒ_©deœ†$ሢ±QÙÔû¥IœB‚Yè<_j¶MôÁ,xߣ(0ìf\zûc>`K­GœZ�öÆ\›D ùß�d*ŸˆšSWä/éÛ6Ndtº'8±MÍ4œ éÑ‹ÙNBeÐÈv –VàEWPBþkk4çJukˆš‰‹e{Ì[Kvh¹×)üÕ$¯óü¡Ç1)º†”Ù`‡ñ5VÂä)4„ÎA#º�ZPÙ+Oþv'= ”ÈÂÞW%5Õ[wÍ®×NŒ£‚Ò†ŸÏ!06­»ý@‰Ó…òhàd:M°3I•ÁSv‘™fûÞ+U¨°äU¾¸=ø—Ì3 ´Ý#€Ì–µ\u˜Ö×Ñaá2ÄË\­Žußòr}Ä(‘¸ ¹!*ˆZ~EáÛhâçN‹G¾ò"7øÅÿ¡]hCÑšý®p„�D„°ag5#ʶ ÁÑ*’Ì÷ú½ÛlPß$…«�8ãØA©Øùû‘›:Ù™ïÌ’ž´å�¥CvZ;/‚þþ«>°À.Ÿ—0_Çä:1à*/€:0±"Žjíåàü¢PžÙ¥¾SËýà{-NÂ)ž›l½‹"AºšV^¨–:Q¡7Ùà�_�ßnj1yÝ9¹‡Ž�¾4lM Þ=2ì}ÙŠÆ÷œ=óÈÞ5ö$ÔNм=Y@°/žÅ¤w˜_ü–εPðÆ×û.¯%lêìeofnf¿;ô'Ùê·´å·hêK–˜7r {ãðq$ÇAF¡Bî³®Ll×çØ8ŠÐìIQGà �Æ\'yvàƒê¶»§s¸HÖ t/Ñï•­»è{/aXa‰·ˆ±Š¥uz"åÝŃñ- ôØ´§¼Ñ;mÝV«yÜLÔ¥íέz×MãÚïôãv ‹©Áæ7¨ =œŸü³Ð¹çìˆ:¡í6Ž@Yüp~­YZj×�£ýo!|Õr$hÛ´r7Û ^/ÞîæWtPrû¾®Ý1 g3Hßh�@Ö…¯x©Ë$…‹Por�§‚Óz…ç:0Eã1:´Æ;NnZ:ÓÚæþ!£6 .nÕPU"3 ¾æ–/ݘ`†»dˆ@=žÏãÞ‰ÒÐsl•Œ ðw}ßR—æÂãiæµ¼‘9~Ì~ ˆú—5ÉDÀè„ǃwØ!_?u$/¬…÷ëf:DÝýÙRÿè�1îZl‚žþ–dA¶d<2홄߯îùëÉŒe�䎡ÖìŸz‹›JöXÓåo;7¸’Éÿ}'QŸÍø:l N¸AoÊA<…äw>÷—gAŸÔ`Üò·¥˜!!Û^ó"fg%LZú�ê¥^ÏÆ½®§®4µ×ãI÷ó�Ðîý)S ‹‘·^&çzèC£ãu‹$ø£�0&Ü ³<¦'ݬU¿aÉÄÅ(=&þ†Æ þ®¾óWæÐ±¶á^>L^üc#.™IŽ‹¬®¡Œ¼'=*‘ã…Ø5ÚìØ“KûAMæC ‚‰ºôÎÆÊušö,�ÒaóИúƒ†(Œå†ÓU¯ñF“3k³iŽŸÅE Qà,›VIL‚�õ EŸ6}­@åÏ6ì‘lÚÝ»YŽÎ0ŒP}¹«‘8¦£‰dJÞ}ÙÈ åôý·Øm�ÚÁ÷’%LеGKÂÀš[”8Ž‹z݇rŠ¡êÕ4{›/ãxWÂe�4[Gì>Óù¡,…šú÷sü®ŸCv~ÍvU@¾ƒ7¤\>ãë[™¦Ä«!ÓQ±ò �XÌAÍaªVci �q˜H󞈯éæiÈ2m‘Ë�ùb_�¨ ALÔzõãM$Ù-ØúÁ ì¡™k‘­xˆ›n&y²>�ãu5?N«¯ÄeVH=r>¦—'¡ä¯{{cEªF>GÉïÝ�¢<+nì.S£¬' à·» æðMH¨×a ¡»éèƒ(¾]7æW×:B»7¬ÂWÑn$j~ß¡ã§Øss³¹€‘´¬Shj4X¿Á+Q�™…9G,Þ$RÃíãéiìš2¯½UçlÜîR’ÁZ+°�¬:g®0=7ÏAäÁã GÛ$‘baa>ݾtÌWæšqæ_ª�¸SíÍe 竳o…Ñ–|BS¾®ËN+#JÆÕLBm>RÖùüÉÌ®X¼óÉ{`d‘£Vº×Æÿ Á<·Jg \°"Š9êéaíýüÿsA�f’'Mån{¾éŸÉîßçT-Â"Ãc¼ÅL ™ÀêcV[ÏÙ7Î –ì„Æ£Ú=†½ÿ…,ø ¿S³9(YõŸí¡òµBñg÷@Ö”Ã&rKì+ÐÌq{ªî~>'†€äîU-Lñš˜÷¶yë€E¹ÈkÓM¦©ÏõÓš�IZ˃±`f|ÌüºØn!lB'=*UÀ(¹=tÜÃêh«Tú‘Á���Ì|›aâ£[‡\¶÷rªt|O]0ÛÒÀ®½„››ìÆSoûâ„‚#)¶�ü�2„8uñïû/ MW +T¨zÊ“8@^× ·�‹òà&\3u¾„ì9‡ò2Ý´8¤Å¢ˆ6j–}—Ù( IeR€ŽdƒJ ÈCáàX”·*í8„‚tÅ�= ý>Óç«=  ÿ‹¬ÒÎ; Ê÷xT�Ø··û^äßåäÛ�öͥߛcL<ÈÔÿ#kàᤠÓóÉ 6åµgK¬õÎå2t‘”OdÒ,½y^I M’i(œŸ¸žÙÂÿ½]0 ~Õ¤YAf‹ ‚»žPŒŽ ¤ð\_ºÛ=[2ó|)À×¥Í<ß´» GäC¶–\(ɵ‡;n0> »Â*<Þ÷˜+¾º|š ¡�šÕÀý‹p V—>Q¸‚Á7G¾oñ;c™ó¹Œßuל }�“°Ñål·oˆ�r [ˆÝ!Hó=WÎÕV"Ý!c^×îãfä~Üž³<óä²cœ|Þ­nOÖ�Ë?hë¢ÀC.ÿ©€®*þ¾\{Û;™­q!¼.:�Õö²Í²KÑ89o6§Ó®vWúa× ®æ`Œ¦ Þü„¿Eþ´9¡Oº6�5ÛD %V測Zž‡);zã$Fä}O¸{q¸8‡B�ŠqÙˆÌóqy­’úÖEçÌ€¶$‚8p¬ÛlÔ«¸¼Ô�/SÝ�rôš Š½Ì/êm•ܼ±²_¬œIé$m�Í�Ò¶éwLUJòt}Vc|!0j`äÀnEwµÓ‚JeX/0T×}ý;�¥­He�n™ƒsM¡„®kOnüš×[/`X䯚­•6L³•bÞŠƒÞÐ4Žð¨Cl–å )¨(-HH’N}‘ð`vAËØ�zsó5ØÆËh¦û{y´¬ØáÔwÖÎëèy 2\»]�öÕ&½îžˆf{êjÄ P\^â©ÔæÑ—›Eº/õÐýç� ªå¾\Àµ›*¦ÄœE£h±úDå×0/Tcc¨Gk™ö&X²ÛœÄ ¥iü�vCÞ¾^-¥§”ƒ¡í¾‡,Jet p§]üSõ[u½ã}ûZœHû<þô£tä¦o»2YÄÞXÛÒßÜüé7­ym›^õ…á%¤Ng8øDZNBvнë8A3˜pSU[AãµXö}ÒQºw€Q¦g’èAŸƒ‘Þ1èåº8e�ÿ?c1T3P›,ÍR$çR¦výE0AÚ9ý?äoxÄ›ýâzÚ(èOaί¡IsÜ8r¥#‰wð||©iÑ4¯'Ò8Ç­˜Œ-Ϩ àñe%¦(k(½ÄíÚÌÁݵÒÐtì>E›S-Wì·&1’DÚ»}~#”ë¼GF-^ª’\¹t,b¸Û2ûçªMÌ�Õd­ÅYJÉ�ŒàÛ¶€-è¬í_Y¯ä =ÀÅý³G„¸ œŸcÆ•ºöêû.c&D¤)RpqŸÆ¡1A“�³ !�)ß¾þ´'çÄÁã�R�V¦ûéóìaOSªªýud| Ff ¢¿ø0«’O¸ÛŽ!>$d ü-&ýñÿ�'ó²SˆNܲƒ‘ÉD(F‹‰¹7©YS‘Ñ›ÏÐÕ6í‡3dÏ›'qža°ƒ*ÈÿçÊæÆHp`æÊ"hz[Åð¡]Bä xE'®…+÷áP�j1ƒ¿•ÿ·#WøSÇÒ‚†š¬Éa B£'nÔR%Àx�hŽ_ÖZ…ÖžêKfàˆ¼#óÉG÷°/ðè¥-•e><ò*n>Íl>ïòŒýÐ�o ¸Sî¾è Ú<AašôVÖjœ¡v‚¥÷CÅêÉH£‹t:ô±\»V®kX.Ò¹\FòÕ-Ûºû‹ ¯‹¹šo¯³E[¦påúAŵŒ;¸&³î=‹Æã8µ·Õ.<šéîMš”PryT‹ÞM^V› D|›ÕT‚&žE^Y¨Ä˜�*"�UþfÓˆk81ûÇ\7^^+¿—³aTü /JÁ`.ñ<¾R³í]”liÇJõnå&5 )a\¿š²l7-#œ*V¥¯ðØËÏLŸV&‚°wWé.¢õðÀ ·Gºˆù+ç�°´«¾Â�iÏð:´^ãéÿÝf ý$ô"#é {=|¬SȌŷ^r9:í+lè¡<žúÂÅÜÀz¼'þ‹Ž)Ü$3~˜¨Æ@ƒ�—1ßåOa´,PïéHLô¯GʇcflŠPÍÊš(*ÔÑ]wõ•'À~ÍÍ*/óÀµr¨Ð…ñMæ8‘_P%Ä%=ŠÍ"ê‡� ñú¼´7¹�lwÎò%Ë Z©×ä&Ü;|�†Eõ#NZ¨÷g$3ú“EíŸÄT›êªÓ¿Î¶ zN4ôm‰¶Bü¹3ÕZº¥Õ�‚m:ZCÁãL!žÔëH0åPåÿåõ<%ôß5ëéº\Š]L¸ãÌbP³[•0ì­¾0ñ”Õ…b»&zu}­»\þƒ�ÖûŽEÒäêÕý´LÿEpß·Ô®-á(�º.ÊÿU^@ƒÅœyŽ™'‚iX•÷ .@TžN.˜CSŠöjß�™«gcȬTSîŦNJa¤²{Þg¬^B+ n³lÄØ1 ¨ (˜‹wA�­0Î`_e8,Œ‰afí*|?Ll.! #hÌÚ•‹`k>\;P¾zÐð;#=˜ÿ¥Wš`±Á¼ ç(J’n\[„öBö§NªáX…[¿d|ßt§Y»PÞѬ ÃJIK:*üö4•ö"¿Qµ]Êr }cFÁ|{Eˆe„ƒÄs—·À�pA±KVÃ1¦„Õ³¡V6Ê “¨·ž4ru ÏætÎó,¥šä¦oGº'lÿòÑÑW8Œ!MÖ¦¹ÍÑz/»OvwÈvÚÜœ¼ûcçwuÇ�i°ÄH´”0¹àTL¦«[.ò"Û…xóyy#áÌ)m r1F¤Ð‡vE¹0�ÒY2å§åõt’¢ù f-Ñ•™ÿÝ#·>ê5’çë]‹spÒiI`t89¡%'€mû}Y÷GîÚf€‰äÉ:ºýÞ³”V»ÓÃÆ¥š¢I ˜“Ó3~º¬ñXéöç!ì™F=“!eÚKÐÍͶŒÎ7=ãÓfòF#…(Ô_=„<âÕ¼Ÿ½4c¾!CËv3ü�ÓÞÊôಱ;äŸÑÁÅä¸r*$±÷fGÁ/ƒ)é6&Lztø²[œl} å¯}¬¹ŒÉòì…L�“ÈðG÷ÇÔ:¨ù*0m}ÕVÛ™+±'ò §¯Pùþ#!‰ _-õI¤UÚìg­²¼~¼L{ÀösᬱŒ@ˆcýjäõÍ»;7 êã8"°¨õ['^‡“%’TÌCXT�ÏÔ“{° Rœ‹ÉÒÂc!�W•šš>¡šõê¯d35‹¹õ-úè}\Cñ%ÔqyžDƒûŽò‡RHº# ªÞµœEÞ"äÇ íp�Åê >”Ãa¶?;�;]�À5¢[|ås†ûÃ{x»>ì6÷ÙÚ#X5Gj�â endstream endobj 1651 0 obj << /Length1 1661 /Length2 18853 /Length3 0 /Length 19921 /Filter /FlateDecode >> stream xÚ´ºeTݶ5Œî.�Cpwww‡ �Ó�»‡4¸»»;ÁÝÝ-H®Á>òœ{ß{Ï÷ï7ztW×\kí5kî¹÷¨Ñ]Td*ꌢæ`S äÂÈÊÄÂPPTÛ›€xÅÀvæ6&**q' ‰‹5$aâäp»X”Í\Þëœl,,¼Ti èô4˜z�.&ž@V­É?'*`gFSç÷0di Ò½—ˆƒ<�¬-­\þŽÁÎÈøw¤¿ÕbL93[°»³­5Àd�cRd(�ÝßAk-0Z™ØYÀ  @S]RM ­¦¬©¢NÇô>°º«ƒØé¿¸ˆ«khJ3$D•4$@-€´¦ºÆßO è�¿%@Iã=þ·Ï{âßrEI Q ]IVæ¿×`¸�œ­ÿ¶ýnÔïÌÿCí½Ô lÿO­•‹‹3³»»;“¥«³ ØÉ’ÉÁî~VÖÎw°“-àýè´þ#Œ+Èü]N+à¿ø;#k3 Èø·H ü¯ ý»”ïEï¸Ëÿ#ö.„Ëß1íþ•pÿ­�•‰ó?µ ** {k� d2{Ot1qquÿƒ½¿�æ4ÿ"ˆ»:9ýí¡øß!§ÿ׿¿©‹�߯ÌÀÎÛ×Äý?gÌäêìõ¿´ù÷Ë6ƒœ­�]œÿ5"`amüËÞùïœYƒþÁE•d¥$Õ5Þ�bT¿«brñpù'ûïx¢ |.+/€åݤ’ sq°½ý;kg„¿òIX¿ëävòdþwSÛ‚Àî ïÿ-¬Aæ57wu`ÖY;ºe%þ+õBøÌè`@3+æ¿�þñÉ_˜õ/ü.€¯·Ø`abç ôµ¶¾¼�MÜ€'W ¯÷ÿüû+7ÀÜÚÌåÝâïËáŸÑeA`ï¿àw&ÿú¯É§ýg‰Ò½¯Os0ÈÎ`´@`V»¼[�öÿŸö½¤\íì”Lì�´ÿ¦ç&™Ø[Ûyþ[Údhÿ¥ý?j­�¥¬=€æ*Ö.fVÿÒô_¸¬‹É»áEA–vÀ÷ùøÒü»†ìÞÍú¾áXÿݯŒ¬ý·Ø»ÍlA@gg'Ç?!à»ÿA÷]ö¿d̺²bÒj¢ôÿî•r$Af`sk�%€�“ `âädâ‰Àòn6NN€7뻋Í�ÿ8ÀÌ»¼—\]|`'„¿³ÈÊÆ`65qú‹þpò˜ÍÀvïœÿ `vÚ[ÿúï,Uþ.ͼÇò?´ÿkÏúç\ÝÅ l Ô¶6߯ÿWŠ¢‰‹“µ‡>Ë»qXßñ÷×3ü·TÿãùÿU-&öðfädå0²³pX¹Y8¬¬ì\¾ÿVkö¯íãÓ¾ëûßç×.ôš!¬,‚Íøƒm’›BKý$ó§Ë>Pñ2�VàéÈÅÁ¬¤MwâIäì’… [Ò© À 2|†~ßAE:TÁØv¯›­‰•S7æª"{&~Š~„(’¢cÙZLš_Ò—ʺÈéŽå²ót‹9fÓÛâÚHšc'â¼Ý�Ñl“oèWIäemë¹Ü çY›±œì0<–Ñ: —§;!]Þ±b¾šü]ù4gœŠ3&ëÐÛ�fÄÎqÒlEw-ÞǨًë Ó§0åEéfjÏ®cЏ�9U.ÿšm“¹6W¡Š\q�ÕÏg!ÝîÀ%‚IUªv׎\¦ÇGa¿^ÿ>†uX mó]aîÃMƒi•üŠIRŽÒo�Œ†»¦ØN‰§¥Ly$ÑØæë˶wËÄ>àä~Ú¬àÛwGDêê¾výSy�J)_¿>,Ê�ð{Þ¿ Ûùþ<äî1)[ØHÂÇ[Z%jnu”W̘‰é‘Æ€™éŠ*‚c•f§· éÉ*Äüü}1«E2VR“PŽ£?vjüýöÕ¸«kh^â¾Vß"Àiß«k°`Á^cPµp��îü�ŽMæÄÂb—ÓÝ©e†¢¯Dëf|@´©ˆ‘�æcy¾cá¾nY°¥Ü:6ÓÞ_6¨6cÐâ\&Í�<îŠø¤ÆKrØ«£Sxì•ôZCöЦz‰o˜Ž�uܸ cZD ^®C¹¨²1Uر†…l¸2“:…€ÌPÛÇNÇrC:ûp<Õ g›ÓŠl€…Be­\Öfk¾ÖÁV$ý«šÝè�±©X åÒ©âFÛ€ãˆh×HÎn¥¤hû‰£&¹á»G°]¯Û:ÉO‹À=yšônußëÏ’�–À´±qíu¨Ê=� ~·2ôð0tMB53Ýqj¸¶efr•�‘ÚÍ«ïb“äÒ~HB¸§õC¦R!SË%-�qž7MuíÃêãJ•(؉ÔJuŠ5“~„Vd«~¹» èI=q�¦„ÅF}ÁÙ®ý® ®5¶?‰¥MоÍNj']r¼aú†)=¶ÛB1½p_ÜãKh�ß›J^cÊKJíÖ3Ö%ã8³Zþ‡²´k¢ªAAu;@&+Y?àR¦Qƒn’Ô:—“.B¦éº›Ä±æ¦¬¯¼ã¥X¤ËŠ£zu%ädðkq˜‰#wÀ`îÕJéd„z¦*ñ�Ä=t©‰\Ãhc$¬‘žo…žbw˜‡ä—ÏY¿¹Ù*~'¼¡…ƒëÈ 5/V+-³ ¿˜Ž?Úï­>ì�ÈrÁ†¦,TMZÇåã”öïÓþu=çœe1ú=d…¯È�‘Í&²Üªœft@5;ˆ«“`Ú0ôs”-À—/•J ?¨ÅÐWWààä÷Ê5ŒHðº©g4Ð'dÆíýPDOîÐãîÈ»Òö½«‡¯µ¤‘Xnå Òô“C�9¸’u0œŸÌ šiˆ_�=’¤Y p† ƒO•–\S!ŠìJË‘Ò.D-v­Tϯqü“äVƒ¹\¤î¡b\ÛRáT¤Ð0kgÒˆÍ^„R‰›fG‘ZƾÅ*¹rJ Àj$È ®©¿ÄgÄþ6M ëa/üã«"jlhÕqKiñZ·?Z°�ï"£J½½Ú['¬Aäët~í:®§ñ4�æ�@’©0Yd8#v©8¢ÎØóä–€C×Af×)Vî»ÒN‚ß·ÔW¼Óª‰sÆ˨T¬K¢l›Ô2#ö(~j@ƒ„ÎK#|äsöFÏÖé¹Ù6:P´µ@j«"âHuÀ+2ƒ7i9°ÈaÃÐ*Ùå%ˆ2tª/]QÂE›@až`ù*n ¼ äƒV Ò}Ezñs§Ö]kÉHïôíO’™ÓˆÖ—Dz])-߇}ÃõjÆCC :–bm¡Óáîk»ŸÃ�°ªÏôNÔÑ6c¢¨Áàe•X°ÝY8øåþ©ªÉ"W§p™ßµ‹²ï#ÆL¹†¤��‚·¿…V^0Œ»D¯ÒªÀÛ•¨Ü¤6svÒä<‹ˆ¥ôKB)J€ O·†ß�¾` z•R÷±¾R<›H`rÖèV1Þž�(¹�Ðn�_âšØÝj/’lpdÂB˜ÏAù`ÆÐÑQè ”GNFÙPwвïªo ßd9ôGÿð 1û,~T aPçþβ]Ô)§ÛœâV–û¹š2cBüá k¥ î’Ú¡qÎe‡s|¯$p¿Ðê©­ )½M¼/ó¡ÈœÝȲucϾÍShÈÏ`’qk¶'mÌÛe2õ%@ÖŽíÎÉY’ã¢ràd˜Îíà¢ï®–å H|áwµÃ�UÖhNݽtH }-M'ÅÔÓQí¥Ë£bØv�.çlnžy‹6±Æ"@¯VÝ—Âí%DÚV}›0wñóŒÏÜÛÍèOÁŽ­²'$’:Yº�Ñ‹ ãÙŽOKi¹PæwŠ.îƒZªù­KB”"câ ©<v{¬zdŸôü¢˜à«…”ê[6]üdî…Šgî]½LG)wÕAOY‹Äí™;¯ù˜Çxl¼„‡¯}�è2Ç$Jt‚=ðCiå÷C>t—U ®ƒ¤ÿ²µ�*©ºÿïÅìíÚ·’�¤øß¦x¦W’+ûé|bI^Áy5 ½é‰…ötÙ� ¡ß^e6>IàÙo…UeÖp!s;ûD™ë‡âi¥û}w=„!ñóÅlâ\hÖ/GÏ�p±“3R:! âN7CQ³ÓQi Œ›‘(\^~(€‚³Ì?àuþ|)]zŽ`´9ž$Y JczVò!�F4JÏ"úÂÜ @ñÀ¾cƒ^�ÌŸŸ“zÄû’€sØ–¾ö�Ö_þ6dÀU"“®‘�[ …‰~LJÅJ/ZKÕP`_ ‰\‡DM̽1ÔJ™ƒŽ·¾§0�¿$âÔ6Ü"‰X„úÛBKÿÛ9~¨‹ÞÄš¤�™ñš†?èÇÚSÃ9•­£ÖwU²ó…9à<©4ìðšà ïÌ”qÆ©�:pÚö¸"ØQ�~k%4ÿþ,ÙÈÓÙ¨³�]Óæ\}”j �äó“¾j’ðcd©áœªBÄDþþ*cÚÎrikõJ7ï‡`‡è~ZN©¥@ùBáÃ?8¤wÔRÄ»èYL?_3 ã~-8®m>„4fA…<†dP9TOhÅ®ž=˜`gÚVÜŸ#ÎμvùÿT‘dÌâc_/n,Ð�øÎ,sG‚¨#ã\ȆՂìéÕ¼—„û˜ØAfQðú‚ÎJ4wanü˜‚ñ �ìãÈ€i F ÉûA•�•Zn.¼8´¹ÂÔa’J¢–~°;ƒÿ ÅGrŠËP€«Ÿ¡�õYŸeÇK÷ÞOÖé\Âý¬FOnçÂ<½?™ÐÙv1þ ‰NlÊù‹ë¤OA¥ò1ç="�üÀEçüxK­ÅgãU øió$øñ>þ:ÛÚ/…´úš¸Ð‰¸}ºô± ps íˆ,ú¥Ù¬(zª ;‡´ÝŸ° X±·˜4ü¢é¡Ýù8ë‹á®‘·§œ:æ2A ò…þp!cꥪðYØ�©ºÕòÊ K1}ý�J •äÎéîe7+‘y+}1 ø¼. ð-cÇM&o( •LÑ|?­á‹èg4Œ(t£çÖ··¥Íá¹ÄðÖgülÈà•Ýà¼T6é™BgûÖí…þÒQ§D¸#ºeQ£§Ñ^UAÙ“XnqD§=VCd»òX¦›�oÝÞ>£¤–‚°ynÅ–iP•õ캎]*«fscÄK5èøÊ?T]&F¦ž-€9Ó=éRS~<0 íåÇì'WÜ�È™{¿Âä=r(¤6qQ<ŸÕYøŽI©ñÎ`*¡ûò ÓÀdÜ!Å6î i­Ï{y¾ Ód¨Ý3Cïó6…sªå^ˆ%ú7âb¸m¶ÖgæTÃjn ¸ÃàväæÕ"W¯kÚãÉ“)‡ãeY�‘¤,½á¨èDÏ¥åA²ˆÞÓ[~ó„ÌqTAƒ™E÷þµöhé<û`_�ÚY:{øXnÁl §ô¥Ñ£ÊÉô9Øhü>L,[Ž÷û¤ 7½±{~ÖMî5Õ–kGÿ8µuÑA Á3Œrn»ò½gv¯N«®ŸŸf7*Mû§½òæÚ#Õ·+Œƒ�Rü™�y2Ôu?—f·0*S†³†ì Ýåœ×% nK&n±®X–z0¢ï�¯¦±.Yôçn¶–ײ7ìê5�·Ó›ò78kqLçTnÝô�.�à :P‘Ó™9¾…­>4ãÕ$�š1üÄr�M'oûÒtÈuHÁ� ñÍ9÷&ÝXgmѪ_@U€³* ‰„)ÍÆ\MRAt³í°Û çÒ×Ý{¬„ñâä5m9’2ÖÈ·y= ¹g¥æ)ñÉ"�ÖùµìFZúõY`œ©K_Kŀ܂¾Ma0 úD³8÷x¹=ßüƒG'A$ˆL`€¨û;ÏÙ¶�°OäBp’qª/ ÷5.ØõiúÔâ™±GEQªíæ’ׯ±]&ZÚ^Éç5}Xßæ·¥~_n‚Yxf›Y¯°¹ ÙŇÇ�†¶ÆKÛØ]ŸÕ?ª_|´]¦$='€ÚB¯|ß4|X™Lƒ†ˆ³üHÂiIîÝ– è€B ·±Nj�šß ÍÀöÔ�4cGŸ8ØXR”'f‚À¿‡¡áYÍ!—kÏ>±8bϬF{¤úÛ£’M£üÆ'»ìÍÅBÞ2<CMÌxà£oû„£Bop}Gˆd‡Š-ø(Ý"‡l>ÁŸáìªÍðÓ«õÂ%…°Äè°6Qý$š"�Wç½S`åƒ{@ṕã¸ÿMɆ˜ð>–èo¨…Õ Úâ×�? м_\¢E ²p |˜ÑÊÂ‘Ì ”(„ïêP½N±Ë(RXk‰#K} „ÇÉ)½SË•väŽfÁm›Iòóe¯ Lf‘«ò_"‘ QÛÂÎaƒÉ�xfF¡ n*ÖûG<Á´~\¼Óqñ̲‰–„äçó¤×ooÈ«iÖU™bš/Ï»±º¼üáÙÒiŒÜ€Q6ä–¤ÀÂxü¶øŒÑþz}¸çKÿ�kP0kÙBÂ]ðrŒ§eøæ•¬+³7.Â4#˰S�Zo5Êo²Hü©˜ÇPWŒº.sÈÉáŽÌ‡®“�;ñϾ¬bÜä–ÉoMà‡ÛÛÒ‹‘ú|ð­E…‘\Ÿw ³‘¤ò¾áŒ“ÞË+à÷éÃ]1Á1ïÀÅ òbÕzñ°TŠt‡-hÚèlܺŒÿÚƒÈßOUÿ¤¬£äéÑHaÕ{¸){©àëmæ:¶}‡Áæ)�)óÔšS«ä\k¨ºú Av¬u:oLäF³N�P †0™ÓRH·,�òU|°ETç ¹ú« =×ÜõíéîiÁ�z_É�Z‰˜=اÁ ëÏŸn’*:ÎL_à™¼lû¯ïso Nlã¹ôÂi:•bõë~ã D5º†vJ»ðUËRúØÒ†£v/wºö¸`1G}$íSàD CÔ¥NRqm�Ô©_Ào–阸Úí~ü5¡Ô¼íhKÙ+¢=ÌN½/•Ü£<À”ùçV*ík8ÏreÁ’D;(NI¼ôåüZÎW•¢�„Å1ðé ò]pAÚöªã‰h ñã‘Ò³3ÑV!Zkð7p+Q ¬oYÒbC £X”B°UèÏ£ªáIs ‚?IøÃgžž±b:†�…ieBeØ¡£ ÊôÜ&óŸÜ^É_‰É&dèyžÈŸ¤úX?Mm~­XLŠÔ¶BÐö9ÏIDKÎ1|Š9¡Ι�LÞé;H࢕õò_¿žãõ£¥Ê–<�áŸWy3Ïs®ý pœÖâs)Ñ™ ªZ¸^ÄŠ`—iU9}Ö;û‚ú§G+T(‚ÿ%¥ÌØ6èÞÍ£Ilç(Ÿ�:zðÕ½g'Á²Èøù&©’ºOÙ«“V‚9"�ÚšÀ-TgCkÔ²m\ö •T `Œí¹z»2÷ÇÛë31(®6üEnÿ`ÔI�Ê_ãý›ªŠ¿µÊ7B:´³i‚Z3kÂ*ÏW©Pxì§?^ˆzYÊÃÕ#wòɼA÷b!yrW˜×‹ ¿“äÂX 4gë’T³"�høÌI•ÚE7  IzöäŠJÀ¶aËsoÛ]–Öº÷ÒÅtÊVlQA5Ñ'ŒI‡!3Š«8•Ç8%žDÄ�ú™¯‚“Y­0��âƒó³ö;7s•Tœ‡‚KÉ<‚FOý¾ßóå¢[¢SÍ•‡(nøö¾=ÓÿXÐ…¯â 3 ’Ïã}œ:Yù˜½±ô�ÅP{Çøð4Þ$/©XlJŹì>‘zÁ¿´îŽþ³~p­±ÓïêU‘fç!Sþ¦�:IèëÁÒ* XÖn©l¹±¢O·û±0J\eº¿¡ïçòM>Êʪÿ2“µÝF-+ C.^§ªÎ‘›gXÀ¯†æÚ Š�wîs|"å}NÕ?7®è:…tMÆí�ñŽV¤ác{‹NÍpª!Å…ç$hêùrv&¹Ýj›$P¬çh|™�Ìäžù…Ç çä˜æ�nn–^SbÝÀ»Ë&Ñ¢–ÿÆz‚ØjrÌ~ríÐ�¶CÅE2>Œ®†™(Íxb�Å´†øãKMŒˆ MøÄÍöð<‘ykíf33J¬Îay{­ EäáÔ«îeŒž š‹0ì«ÒJVïcâEÊYÜ"P�rÔ’).¿'¿,KÝÖš’�¿C³]C¨x4¥/$LGO'ÙÞã˜Sk¦¾Ó­¤Ðço&kxÉcZ97.N P&¿*Ïù3úW¥Á9X¦Å’øÝæ¤Gí§�1A×Üžx,)¤]|*47Iƒãú i€ ÏX}„ Ãbk[ëstáM>„Tƒ| $ýxu8¤È#/½9ûÇyéKs9Gû†ÀF%ä. �O>\:é$-q>aö>(ŠÎ=ƒ¤¯_C™ÊÉ*„ð=(ç†E0×e{®KúK†:Q\öë±È¾oÄ袼`Ôp�°æO8–ª8”¾ŠWŽÎÚ(À:~ôN·†~yúUR²´-Æ©þ‹²ÒöÆ9CSEYáð–L¢n¾ “Gõ”ž–5/az¢ËO{u)}]lÁbø;„pø§dµQþC‰ú¼0¦_SFCV}r™ Ï�¬vUqsAû-k.tUmû•(˜g4­a:�ÐtØ´ ƒµï€¨ @‚•I¥q¾j½«®âÅ}(Î~'Å´³æ?›r g±ûˆ¿åž,ÐmulJ»;柋MP›RÄäqäÓè¹BÔq�0Ì­ãP6.úA³‘*Þ0ýl)¿�NÂÞ™gÉÚ¹É�dSâSá�ÞK`R/‘ºçá±ýêʇ4AþEšÝÜŸS>ḠIåR†Ž̽�Õ.m›%‘¡}+_+/�):}ÞÄ0ÅOÖ© +#Æ|ðoÿ€dó›#]EX 3I_\Wh†óÖüÌÌï6�©^µI3PµRËt›¼V÷�“tµ¨N,ºCZª¥Lâz¾œYuÛ�s _Äp—-ƒ&Êë³�DIC÷Juª¿ã¡„¯]ºF·æÓkO²ù 0ÉFwB‘ÅÈ™dâW^ÉP«0g<þÚ/oǤ_ßÕÓ胱z0=±•Ó‡d>GEZ˜ÐìŽÿ  v‰W² §)kZðùxe×»ž^dU§3%å®WªCüÃû$ÓùI!_ù´Ù-9¨„œ¯ÙqÔäÁr‰_¡ýH`èô$”̤ì}»�Hé‚_ÙgumCº�2ºïn•—Þ< Zrö’´�og‰„’në0éH¬®ü—AµZÈ‹Žò@ý»[»'ð*ÆFâB� äÜ¢‘Ö³+ŽØŸ,» T°øàIÛ=oC›:­®NA+lÔñk2®Åˆº•êÓR£Ë°(¶<�·ßv¤z¥›|ZtF2ñš¹qÖÝ} ˜‰¤(tÉš¿¶³6lGÉmPQä˜Aù1 ¼+Ïö¶˜êU Ê�tL]"ä ó:Æ|¿#Yf%UŸ~ª ÕêQ1bJí®í£NEvø{ߪÅQÆì%a•hÖî6¡˜ E_:qõ'^P¡¦$ñ"ÚÝ�BeGÃø Ë�Ÿã\*Øtüxz²©ú™¸Ucžè§û’J%­Q8�¹@ “á[´•�Ͼ¯È‹‡g8f ®Ù>™·r¯üâ^½–@M˜£¬%áŘ0ÃüTq€‘¸âÓR =©œ”=/×Úýâv�ø„}Üׯ–lHsXA¾0á&§B+òppÂdŠ»l{®‚¼OÔ!ÛÇcxfüf%éJ)z,³‚SzRŸ³!˜‹ÓæÕvÇ�VômÔ# ‰…+kë"l¢j11͸¾ŠÖ¼žewp»ÌËÝC"% ¾5¢È. .ÄíKdú¡Ì+¢û%2k5’˜¨Y®¼õÆkEy�r;tk—+Ê…ò(úÊ~ªæM£¨m}ºP›Yc¤Tƒ|Z”f�>Šï÷«/jÉ:kÝ}œìØZ)àéEøDgLš]Å�]uÂ}dýqâE쵞ëCÛ„™›u¢F)é%‰î* äԈ㪤ä:ŽJ²„£u©#0J!×;µs58guI®CÚwï·Ë¸Í; €ùRÔVvà²`Ÿ7’:zª ¡_[Ó¨vNu^R­Ú {¢Þ?ê—Û;½EÙš@#ŽÃ�éj Ia`Qí§¤N4I_j×ι2QÖñ'^ÎØ­ô�æctçŠÔö”oã]~“‘YÇ3¦ú©8 œ,�·Œ æ �¶¸®²™¢Ð&û>Ôví‚hÛù_û•TûOìØ]E»…|ðüJC>V{"Æ�1}Á,[ 6Õ'¢œ·Y.ó`å·ø:bu™½»§?÷¬ü¤…=vÕæ?õRÆ`£’\i6:›¿Û�©ø{æW8—à\ÑÒê›zï‘þìê»v© ¨? ðrúó�ίCI”פb?ï¯ó,ß’Ô�`ÈoÁöL½ÅC {�{ªtÓ0Öî�¯L‹2�×Õ¬%Mš´wÿ©*áù�]d“× ¥änHC5�G1Ãþ—aꤟ†W[ÇòŒ5N’ÈÔ(²]‡˜Íû¨î÷w¿ºØ`Vv£UÁ�9H²¦È%r¾ÄLûô&Êpõ6]öì–Ö�Yñ<ÄFÕq¤õG~ì¥T;.rZ bWpÇ-|£õžÀ†oQ«Ÿõ-KÖ2óºœ<}ïvi_¨ ¤è»¹—GGD\þÒ€Ð!„ˆ€Ça¾³ä b©±õy.¨H po_u$q¾›’¼ÆÁÌ“c�â?I8º¹½Mì­;m=í1Â.CÜ2Á9‡±Šù=H ,ҎϬTÎ=_V¿°A¯ù¢añѶí­õÄ8Yòó¤îð Ïʶ÷v‹…ÏçQ‘ wW¯Wº•ˆªåÞ­…Öé=‡g̹þ7gM†ô¨Þ pA†mvJëLž»×è¢ö–£þØ-Õx£{¯Eõî°ïOdkÍt�–5„#71)M$�kaÁákGt‘øO”]k•ûy=}ãw0 C[¢Gì~Ûbã¦<ÊÖì§Àª_àÂ<$ñG=øŽŒü>á7éþ¡Âåˆâ—à�LcUÞ »ùï0 %h¡\M‚=˜6Na·ÇŠPˆ Nd,§°Ç�Z_t¯£ˆWí� TaÓÍÇ, “ì–¾>hL˜ò`Ø ² �‚­1†¼(†û¸+¿‰8ã»3¤ˆdïx z žãâ,Îl a®¢Î/ [Gÿ¤øØ]šÿÐ’ŸQa`{Eþ¤½Ô>B¶Dò=aÍ© ,/.tâ‡Ë}ž!üdð•l.\ŒfpÝsÅħyS'C¥þõ^)ž»îͦ"cö'«˜›ž1�?¢<—å>m âÂlÛ5aM)±D£ ¨tXêA{g…1Ή›ërx–UdÁÃ×^¹Óڨ׋A�D¬†¶ áÜ[®³¥Óç݈°ž#¢}ŒÁÄrš›“T:² 5GÎý´¢AÆ,œ8n´Š(ïqúR yÌ7´\ºy óÞù–/oK{rˆLa™¯ {q¬i¦Ú(*ÜÒä1ïÓu‚ÊV§«r‡ û7?Iöª:½1Ô|ã æÊ>>#^OÙ ÈëkÙÂè=¢·ýˆðû6˜û_¥u5a’6¿r9²"(ú`Áô�(Íæãmà=XFCæ ò»¾Õ”U§ƒn¸D¯VÛð»î\�Ã/c®…Üê€ãó†"/‡œœ$wh4ƒæŽô+¡îÅû•y“ XE{(Îßòla¢8¿6U \mrÍz9± ©´zÆ1'ÏrY…ähæÂÕÒ{îÃZtÊú‰ÏÑ7P. 2cr\Mk(¤G÷”LÑ¿~VYšÿo uCÏt‡¦ ý '_ð˜òIJ�±ó„x©Xæi‹'ÍëRçæ…XÌòëw{Hᦫ»¾ÐÉÄ+5Œý|¯:¢\ßù!Ý ‘œù˲ÚRhq-v g:|“�åèÂõþ\˜%ºaF"M”göÂS "r‹DÅvLô®ë+V[Éo+6zœÁÖP´Œ½À.jˆê®rW'³ì§ê�m�T\¬…Bswà!ÝúÂüÓ%R°‘0w¬`Ý@*3Õ0r¹ .úš`ඪ»1G™³Ã°eçÃÃ(;Ý,ƒæRS¾š Ùù@å7BÁM_>>ª·€šþÁ/ÕnPú0cF> )ŸÂôÛ°9³õý‚‰;ô\'M$í�ò.4²X±lô"øŒÒ½¹?6J ‹2G݉A1tš"Á[U/ŽÄ�oXCòZ=P�®XÏ*é�Ó¼àu–fmjãÇ_={|üæG¯m\e>ÕcQ½Ánq9îŠñ­³¡§éP£�rŸž”Ý=w᪱ÚàBèÿB°‘ðò)Åÿ%ºtÔ�8?wb‚‹š8·ÅåM.�ÚÇf2ÒK©J·V[È�ªÕ[ãfvÜK)ø¦m²‚Ð[º�ÈâPâB@cD¥Æ2�¬`z®Çl’ïªs'Î o›3ƈ£·>>cÏx*gµÿFFG‹“¶ú»òKW…°í;.LÃÝ5Y]'{¯òJ¤±<çFsmþah…p�ÈG,Á<ùÑÈ™FE΢} ˜<,»›i«ì)�hKŠ~h{ÑUqùŠáÓ PùfÚ¾½ÂóvåKjg_©i[zˆLjg{ûáõ�“3˜>nº´•ÍÛ·¢¹ÎY8Ѷ9.Š|==[¨« ÖõQùMøç|Š ù>Û6.·Ÿ¯1ìŠôWrñ•/Žšyhšâç—·;·Û]4l<ê ¶Ú¯': I�¿Y‹2¶« Ýg[3}n.ÊØë´ð,K�- åV…•FÖNEL^Ô>dHc‹gÔUà¾cPxÖêv¸_£>Q…% ¾4 †*\>;ª�BáÔ¤S ~]1û Ó•êÇîÏV9mÂ&pÚª$Ÿ]ÎÀ½ÚÑRJ˜nÛÅn‘æÐq6ýið\©µ˜k2GÚf0íŸtÊ×àñŒbÁå= žW]†#¼lü �Y·ŠÞ�–xS)GÎÄÔ�KdNé¡ÖžƒÇ#‘œY1V÷pš’8ó[—ˆq…®�ÿ¨ò‡¸v´…ÅÐoÓïNø‹Þ×ïVt÷L†ÃøI‚1Åð¥l@øØÊ®«:n`±ä˜Û±n±bE7)ÂÆr‡+-±ÇãÚv$áÙ¢èÌÜô†5�ý“` DJ8iøÎ­É×<|2ÄŸJ)Ðá-[k€˜4X*­Ì¡·ÈÇNŽÖ·M…«hY‘Gᮄ<æ$ï±dP~i~©¯4iVô8N5‹>B°ž#䞊¦½»“Nqå\ÞB–S_3º >™º‡?{‘YÀ§‰Ë�ŽÞæùbã·‘ŸòëYÕèS&Fb™Öt%ÒÛh¤ô'üÑ2Э6 O±»Þ†ÛÓ]8B·óÅC¿l,í d7˜^ü‘ÒG%:U'¾¬—ô^Fÿ‰U‹çÖ»ÆgËÖŒ”Ñ_ç›÷-y¼¤$äÞ,G…\îŒðØÜ’ktF (A¾4Öo5é¥�±nFnoÕ´…"j™[2¨µZ”ä´Dät|drD#¸Üð6·¤aqÙø‘ûT+)aowbB%ÜmâºvðÞ£Ïüs\kÊô×ï˜AC\"õû³ ;ÉoJ­v?]¬~ãÀð˜“8.:;z¯ èóûvpÕÀJÒyîGVÚ×:ÂÀóØ%©Ñ:êq.…û¸q+‰)üŸ÷%Xocìàô!|˜¥7‹·óLí›Zù JšOîW(®%÷Ov$CR'Ò•ôAç´”tó,“œeØÈÖ BÜ3Ö;6’ÒÓboEß~ÒT‚zYtríe¨[(_aa/[úàƒäæ‚Ð$ùö2SZI3Š«¢[gÿcGŽÇ¨#ß��‘¦ýÕúVAäÚ ‰k5�ïhäQÍ„£„ÍÄ—œ-«ÛÑ®Ø�n°ì|ùço�Z‘é¼ç»Í«�®K¼oýã'oЮŠîÑé·Ÿ¯¾G×Èv_oSù@Åç"$Rȃ(¥â; ”0mÈlªT­º‰·šVEÏr‹¬Þ½UÅH?óŠŸ1›#v8„pz¢`ev3Îo1èvÇ BVGîòU´3˜‡„–Åêù’"*Ê¡7¹rç{…îÉ:�`mµ©MI¨ F�\èU�ͶިaßÇLj:ÅxÏ ·tgäÍ7)•øâÀBfº5»ÎS‡däÓïÿØk•Ô~iû¨¨�q8Í.C  ¿ïÑúÃe{`àpäƒÎ]7O¯1XÌ,ÍåÔýêÙnŸZ©7H&9TðªÃg¹oó¶7q€ê–°P°Øm[‚ÖP)èÇ’û� �±"²>} �µü#çžî{Ž�‡X<2œÀùJhŽŽR#šáÂÒhBÂ^K­í®‡S�}>Ú¥‰3§”Êj<˜rª·ÂÑIUáòf<‘Y>M™~Î'¹¬JùUí1Ö}åFRgnܵ`èeÓÃïª –¯+wÎue£ÛS éñbÞ�Uä¼—ßþ©o6¤ íO¶ïÇ=àW{þãDƒ/'|±­Â>?ÖmΫÒË *;Ò/O1}˜y4æ^–ë+&ýÔ}Aÿ¢MyéÝÞ†‚Ö®l (Á1”ä;czCÓðù±¯¬ ˜•Eû*‹–ùƒCÊ�kóñÈúCÅIyÞ,â0RbµæíåÔ ] á8¶ÁºêëSçy—#�bÐ{á§bǨáÐÏÌ…~?ÏÕha%½ïPµ¾"1µÃ?mîÇMý ·xU~¿Ø�¦Íc%èép~MÉp_×K Æ›�?3eKÆ“˜VÕ &IPb·*a]ä«\£¤¿½´—«ò,î—W‘_8â­ŒŽˆëŠ�¡«(lÓ¡šÏ, åË4B{x˜|©¤G<¬WÁÎZŽt¤ÉÖ0UJ:‹ÔãÒ³Òã&°Vo8JOWšŠÑ¡ôgú ´éÜ\áVø¿"ë‚вnwvaîeO°"i‰~%6„e´ÌïÖgîQ¾t)#¢’ÿæ³ä ƒÎï@Ï€y-Ájó¢rWÔ@Æ4“»ÖÎ -pLÆÇY‰¿ _*OqÿA) l`ȯ…o'÷‹Õ D;„õ1¿¬PÅ~~¦ð¯ü«Ûø\[,Oíí†V4£}·ês'TE´Ùµ”R/mGûLH(dtÎÇŸ8¡ÉDGYSø±}î|…^«¯Ly’…ójZÈù™ü%³CLd¢?.¶4†iùNæ•yÚ|1i „¿íÓCsMõäî &Õ^2“˜]K±aí MC•§j«²ìôgd¹å*©š4œi†kìD¨w�`J¯²‘(™Ýµ(˜0딃§xsÏ»Î^£8ëO›îé;­´)*§áõw‘”þ2TAøÄ ùÒ«†–cÝ£0ŸØ¯¦Añ>?œ% pèŽ)ѱ¦€äà›>Ü£¶’$¦‹5“og­—£“ÝN©*È\s£ãqy†ûÓfž˜g »ið7²tm’;ÿ�ŠôÆÔÒϤD/@¹ÕÛM§Ïݘ&FjjÏjç íá&sÆ\ùÏue\;¢UŒˆ2}iM1ìH–‰ù£·“îÎTHíÇ´¦ñ¬-¯®=·ºLMÓ£+ Yæ(œ€Ô÷‡¶‰ÂµðL¡}”d| wMBB]¥ü,`Íè³4‡–À™,Ý4ÚoϱCÝ—\|0ÚnlÞ:lDï/ÑÜi»IÒÌ¿¾%‹9Ï„7vzwÓ¦J³u øÆG µÛˆ­cKšó¼ÎÔ³?‡3ŸàN~Uy%)ND1í^£”ÅÅãÂíÆ?o\½Ô¼±m¶• iˆN¾Êÿ€ÙAó‰Ìò7ÔòÜe’aZØuT`,Ùê Žêg‡©½AN'³"8ƒy…æTe¤lÃ;Ö�Õ%hj=8³1eqA&õ‘N—?·Ìrpv°Ž|¼hÕíñ¿öBËÖzÕY1Þq%+¹ oïÇLÖ½:xb$yÅÄxñ.7Ì;t´÷[­?_³uò—e¨ÔŠ­¶u�Ì#J2ÇfÄE70!íÚkÊÃoîá_Ê6®cWõü¸V{ îÄ,¥‰ ÒÞ(r´U™Ÿ…Pvú¾lœ—,ï\zÔ˜Ø)ìþ›Þ•ÿåó……V:ÿgѾö u_ûD5vpˆ(\;_R%`l‰‰ŽÌêGÕË—Û× A²0+£�-ø¶ïÆ0\ÛÝŸ#!&âCRM4�?åƒ7е‘àlöù°ÈF|ˆž,Æ$Þ|l.¹Ø²N!IŒßÌkè%M;¼zÞd…|˜®0n½‡Z]S-g‰éVÒ½³�{òöó_zF|&‘ àÍöž¢Zª>žôòmªÉV þ¨Õ~°Ž]ÇnieàS•P_¦¾"A”LÝ=Œã/e^úYǬ³~7òVR¿ÏìÓÕgñ OÔætSѨµ|û—Ò*v¯¡§\-É’‘dÙ—Ì;?î<±�í—»êÉvX²’ÊCµïËž¦€Ås˜“`=SÑ7jÐWaF̧~>Ž‚Ïº3 $z‰dÌ~ªD¯ó_üÍ´¾Øº‡^’í}Œ™ŠêÒX‚+±ø¿~W~QGÿPPÏΦlVˆWqâ»Ã·%Å+I†—œJÊWE–h½wM!ž~‹K] ¶lÉÙ9Z%Åmõp{‚Óõz õŽ%ÄE©UñqÓÿL�›­T·PÝ5 ]®úFlÕ¸kWé©út½TçHö¹Yt“á%"A€%eåÈéðÕvÛ±‘tSL¡ÐIöËm>œã)êù¶Nk¢X|å6º)©ú‚Ì‹l)¦oîRyð­oˆžµ“º•Ib nƒu¿™™^±Å¥|;ÛNf7ú/'йJðä]†)Ksk$HÇ“Û~•o{7ñ׺ ûp“pâª%C& @õé3¬0¥÷d}Â#4ÌØP’¸�VB5̃„_Vž;¢w¦’ M8 q±¹ ›�ôó"A9o=?ŸºÙ;Ðkíò ÈºÄ‡'T\o�äÞ‡‘Ô.Yí�tӲ͵ÿÓñ€*üÀNB3¨+ÚTe yÕË¥hŸ€êbDß³ æÍfKè×�FÑ`vôX¸•~:òïîtwNnÒƒ¼[)JVÝÀµ,]2>LÌTEsn�æ:´%»…ˆ ä–uFßß/ëN§{ùnŒoJ>�³zÉ7»=÷4m2Ðèò"ç˜8^¶ n,oÒzD9;¨¹˜h›žJ±XA4«µtRéÓœ,:�v¨¨| y.ŸPÀp°*UÞ/¶ÎmSn;³xŽ\;GÑܱ0^Ö+ùOUÙo ÖVñsœÖºk&;¦õ yì:mÌ¿ùi )Í2§ íŠòÚì-Š~¯kü¦­|b�ýêÌV‘Ü•u”~Bɸ²5ÂX¨Žó‰±þ|ÚvE} žÀv¡›ô›é\ÀPpƬ,ý©ÇˆÛu§Þ •S¸6Ü’ø€W³öÝ´º©•½@R{Ê D¡ƒ¯Zã~ÊÏ¥_åqð™wÏ?Fà|*‰f pÆ­9±Yè‚ ·ý–Fßkýø)ÖGì Hnû£qI–#Íâi’¼|ßêtåmü–Ëð‚/Ý©Ìp”¸ˆ—U5#§¸9ã=wŽäÉ)®A—²ãÇ \X×[…ê'×Óts\ÿ!/¿ d(Ô¶¤¤×í¦>¿7ÊodÊ'Ñ´{*…ö5Öp�9Eæ±€ñ†`Àîå·Ž4u€½_ËPîÔуÁÄÅ15̘!œÚ÷De6¡‚E#‚¹`è ÜE¶ˆC37§PÖ> m[š"‘¹úz|òžc~3Ô-L~…PeiÞ†±Ò«%ö-|ò…«J¶ùq*ÒŸÕbk‚ FIn�Ø9fÔ)&�9ö£�o“PVµøJ� ÄU�]Å ¸cÑb,ÁÆsz|d€ïG’iÝù„“nnsQÇjþa˜áo×PÉëµ 6³–;9 =ùýu³¤F:Yc8šÜΠù"j Û£ÐzVU� è�´éœÄpvC{¼"˜œ)ö�Ä…Âúмzk�Ì�ióÕ¥ÞèÅÜ9}ýv™ï„œ¢P�Kí  ó1QfjzÕò/üÑiuؼZ±] œ1‡ÄóéQ¸,”²,˜'�X�:£‰öP„#7ÂE²–fdoPŒn6¡†»1S¿Z‚µØçiÍ.¨…6b&îKûÖƒÎ�†Ëzµ=òØy½Å¯÷"ˆKÙkXzX’³:Æ|6ÂÆcu/«ïPoÂË>´7(Q–m!�îÇybé“ý*ukb�ƒ]ÔŒŒ^«_{þÌÉvˆ‚ ôvW¬¢ºF›Uæu½ƒŽ, sP�'‹I÷Î,¼ |°mÎ ä¶ìên¤rü½Côðhf:SÔã@‹ŒV{öiÇ¢ù°Ññ¹ùÿxž zóîee=U½ý:ŠžÐΑ�þ+›ž¿�Ý{>êBJbÝJ¼åO^›Õ¯Å êcy…Ù? Šugð÷;!@–K),T5I5j®ƒG4 =G‡C™Æ.$8dYQ�„¿Õ ç*ÿ=d'ï-§KêEÚAØQ«Py'eŠ@™Ù ‰DsßGoú²ßœ¥28ëA ÂT¤zJ|+Y"ø/üU+·|Gº†X+�E^Ò”sÅ�ððd0g&ÔŒdÅ�=qûœ±»Áñ™°“Ä,R¨0é¸DU®äà>ä]+†1ZÌuÔƒ Y#�—#O1·-R™ó,,Â:ÆÖ™Àºº„âž,¦˜6†e¬}3Îh‡MïÁ¶× no3AHˆßâ†x^õH;êqr�”w.�lÕñ#bôºË©=ŸÅà³n†TĽ’Œ¿b�b×ÚŒh¦º[E¼ îÒ¯“Ä+�iWŠÑÆ«.Šm¸¼ëN„(~£L\iÁ�ß/îö$Ú 3!ÞÑ›'ßy�²EZΨd„ *-$¸ ³ïߞ͊qS¡.5XäoŸíµ¡E˜|=•"ìñ’ró CÔδ<&DÿxùÖ¹Ÿ„G�=)úò’åŸœÃØˆ?0…(W(sy{æý•zê�óñjùKrøz¹&æçSÜÜdÙû´ëÖñ£? Åè´-N ?cˆ�.ð›R>aÐBFÚßR/ Úd£Wõx¡!ùL}ø>Ï5újQóÙG—½²Ë ½I¡â†Ÿ`ìȆ—¿^et½Q¿%Z‚5»-V<_»™Ä³5ÌíÑ�•–#ãýŽï8ªÍ¬È8¸%–P¡Ö¡F _Ù–£Cú:tk°0š¢ÄëânIUEØ| +8XÛøÅÓ—>wm£çN-ÌâK º1Ó)«»ê£?¿û€æ|µ=w=̀ļͷš–ꙿµ½�ŸGh š¹x—EøÓ÷ÝÏ6B+½US|³<îÓš’5rª�p>‡–©²¢Ç…Kz1í¿ó®_®�î}Ï1O¾°\TËö䑿퉠3ØÁò3§w"°|�]À_)«­ä¢^].ºÿòk6!Z�utvñCê1”¼y:ÊÆ,ô·Wã\’l#rªY¬ô*›Uirv:m"�(‘ Ì~5s+–³Œ^fŽûOåª 9Ërk°Í%y@<<%s»’CdŠâVœö�÷ŽL¬¬Û1I Æ„;àâÌÑV1éÚ°G@žG‹]ËÇß.l8,øT÷âCªõ4ËŽNèe‰‰Rñ1~;È÷yêÊ‚ÆKz½W»›D·4UÒ“;Ü Ïdº'–]+8­!Ø!™›GX-‘ºo Ï¨†ã�N“Ñ`L¸b·/ú~{VkʪíG N,`•–œÆŒNæTNî_–kˆ)wø–Äþ‚[#èÜ%ê&ª¡ŒëëQ‹RBcÖ\÷¼Ø_u¿_2³PâÏFº� º#ÅF<åÃ+Jsß5£.´¶•e6ÐØŒßÛ:,xfÉwgŒWÌŸÿ¼ÃXto”à�Þê7Ê«¾ß‘ŸQžÇ·¾Ú(«OIb¦—Ê0fŠ Ýr·K¿ldý…Îìæø‚Ø�¨ ®Zl¡p;¾k5«3š»HÝN@àënœÊwÂÕüî][®sbÏÿ^Bz_]»VþÍMcÊáq…¡OáBz¯n!E‘en«ÅUÊ-­mø ö3œkbã-K­ÌîUàån™Þ‰o>@vçrÆüÖ³ïö' 60¯+Ø—Û<}Ù×Às!À\Éþ�šÑmÞ‡'ý|ÁÄ^cª¯PÖëwôMÁ?»Ù0�¶`‰´Ú3W*á²¹¢4ó”ëa�OÙïïCÄ“=| ø¡fç�EÏä—¾‚|J#)NÒï¹Ï_C.7ÎnʯÌâ—ÞŠö¡Lp8êR )A ¤eÖÃ6oë�?äL.Þ­w.w ~`"éÕ (+„Ýž¦a7•U�bÎŒ˜œÉ",‘–¡È„ú *˜Éº"µIél"ìÎdΟ�¾R”|¯I§ŽŽÙØ%­ž\„·«à¦×‰+/é¥Ãw3‡á%Dn\Ë2[ùCÃ×ó-IeWD¤Ø§ Ð;“¹^ÞÔ”"™Ý-Y}¥†°Ž¦4¢‹»à³D$ÖH¸;}•{ùÎ; ˜<"fI1§Hü�í9ÄX¨ë/xsŸ+|òâ¹ôØîLÐyà�Ш%Áu笳²&¸ˆä ¤³:&ʘ0=™�¯Žæ¥‘ [°Wí,Y›B:Å$ò1?3˜´’8$·Ìˆª°Í !V"Øø�Ê[·.¥•,�=éþC·�~Í–Däç`–Ÿ¢9¢Ó§ÇHfM óÚ°ÅF”/ˆ{ )ÿ»}V=æ õb¥3êà aÒi£ÎLË_Ýbù�ŒªìÖL}„hÚmÏ'g§4Úּޑg—5ca¿®?]ò-�˜Í;@Öj)—ècå ´ýZ ø$£jü”õø‚Z!ÐÔ†Ÿú™þᧆÎd·vEQmm(+·½üU´R,9K:TAY�Õ5dð‘kÝBO‚µàÜåúÀ”Ñ1¶¼¯�\ƒÉNp"ªÌˆ‚TzÆ·<®ä�|Z¸ëÉsÍ�9Få SWå|Øñ‹ý×áqØ›iÎB »tLìĤx]7»`LJ\ìYsùZŒ‡$X¶?hoП ðÆ –gÇ'äý4l±wJÐð¼>È�\cò¯5mëɸ,“�¢ TFp茅MŸßáMd‰6it;kÂ÷É—HnnØXD3œ 7Ïh4ëB–Ã6f¢”QµUZrpð.F[«íÅ|Ì`Úkˆ¾}<å’f ™]©)L¾Ñ<¼ÁŠüµ–�¬—FÄC;™ ²gÓƒS°Þ“¼Ú$1£ðUK‡J­+’$\ÊJý¨ z¡D"0m°±´`ZÖ^ë©¥¾tÿ!½?CâHZØ{Âs’סâsT�ýŠŸˆ¯@*‘¥E, $„úoªµûÞ¢¢ÂÚ¯WQLLÚ™Mºù•�G³é%‰ËÝÍŽ×ôÖ!R¬Ã¯éŸà‚òÄ_ñ0rôï�Ÿ²R×Ç€o¥Ÿçt%þbÂJÏqÇugcûoéí…¼“Ý”¼ωÊ,7‹¶�©zÿúÒ:£{8"'§TÁå‡%÷ ‡¦ca¸åf 2V¨äÊ9öøÝìQ.=Ê• ù«.Éõ·»•|б¢˜¹K¼ ±åÞ•Nåí…¿’ž�EÕù1Øû+‘öä hÿ¹"žÆÞNÕ¨Ú}ž½rõÇÈ‚·¿yõ _žšÇA(ÒD�‰ïTÀ#F©‚®¢¦À„Þåt% bb8®È1Ÿ•øˆHÁ2Á h—qGFAýõñÂ.<[¨Ämþ “ü¨ÊÖ½,vvÔþëG Ë#žùÒwÝ*KÝ"ø.È¢+á³Î½qžë8¹.«Üu¿ùE•^¸ãXÃ"²‰j‹±c7øŒA°þîšvxw Ë”¸¶Õó¸íùÔÑEš:8›‚¦´L˜_f›Tl€ÛÉáÝçħ}Ñ(µÄÌ …ž\XVÔ�·0àMâH §4ô&ÔGÍøïÜÁȪ’4Ã2±ï\Ù=øŽ`ì㬀:ŽÛzXÖØõO¢R|ŸØI4IŒ±Ê)M¦ëؽÜ+´˜€h&p²ˆG8òG‚$>�ÎçN2UNR›ÿÜéŒ�yãà5EÃÙZyK�jÐGôÍ ÿJZ·±بþ‚kßăJZxÜÄDN㸥ª®ï4~3(Íoµ‹„ mîxü„±½aÅ&G\0±7Ä 7DÈjå_Si±*…1–‹FœÞÃå|ðçî°Áy„$$à)áYØ™ˆèž ¿cŠA q Ú _D’øY¹7“ÞÏo@9œ=ôlP-–ó”µU@èpIz#bçò¦˜©”»ë$ª’tJ5„ ì;H‡méï$­lµUz}d´>¯JˬH-¯ÔXðÜ?GîÐçFuœ×u”³Á‡á”8v¸Ü÷nG–¨ô8zçäÖíÂeŠ�~åW™³„@ÍäE87o?mU8õ1O~*íÁï Í8R–ý n8uʪ…;M-4«k×&ŽÒbŒ�> stream xÚµvuT”íö6Ý�€J ÝÝÝ )� Ä0 0Ä 0CwФ€tH§´RÒHwK)!]Røžó{Ïy×ù÷[³fžÙ}Ý{_÷^�¶—œÌ¬ ƒ"¸ø¸yÅšº0G ”�—Kæ`¥Š:@@~n^^A&&0�A�°8@a xB܇»øyyÅp˜*`(ØåÞh°ôh‚@}O'0€øGІÁ\–@ø½ µ�@Ál÷! 0'Oˆ�-â!‡×C¦‡hyn€ds‡ÛC@¨@�[“ s¿WB¬0(Àl t°À¬úà=%]=€Šîsm=6îûÄz®NN0—aQÐÓ7Pá(Êié+À†œ=ý‡_}0ô¿ '@KÿÞþPçÞñ!\SI_NßX[‰�çá >€Øy(ûlÌ÷ÈC»µv�9þ)`µE œÄyxÜÝݹm\án˜‹ ·“Ã|ú¶8Àæb¸º€Àã µºo'ÂüW‚‡Á4 0~R†ýet¼oå}нñÀî�xÈéð—;ÿW[ üO¬†¶¶À�"ÀP tïˆ"\á‹?ºû/ØŠå/€`€‚«‹ËC Í›\þ¯Ì¿¡ËÃîOöÊÁÛèþω¡®p¯ÿè̓Â!pü¯Œ`€5Äü€þ03ô�NSNKUYIOŸKãžxP.MØ}w ÜÄï‡|rŠâQ^aŸ˜ €÷ž¤JP+˜£ã=j8ÎCû!÷}BÀ\An^aþ¿,ÌážÉ÷Ûò°ÌìÂÿ°Ý“dÃáaÞ?&ð}Cþû~  <ÊFòrr ÿ“A\•  ˜jà]\€ž8¼÷´àxóÝ3Ý ìñ‡7n( qprEø¬a.8³ð(>¨þH"|•¿%�êßÒ½§ÖÿI|¼÷®àÿï­‹|‚—?âLûáªÿa/ïß'ý×ü#ë!\`ö`#ˆÕýþÿM Ââñ’÷žz|÷úûÏ¿ÿ™þW¦¿oÍDËËÃ<¼¹„øD\¼">!a¡ˆ"¾ÿ úký¡ýýHþ-?ììáÌÍÀ@!vÉua%~Jyc¥èLbÜ{È¥_¨Å¡Í¥�5S>VÌ^¥Ëä6¤3çÃ4ž‰›ú%B _0…�9Ü~k|W>zj¥#»ôÓô£$P’|oÈm”®ù5 ´•žm[í}®q‘àDzS\ À`pGA¬¹í2šäŽø8‰þUiÓbº{Á_ý#�¯DO[(¿Žµ #î.ÅF;忨'-rÃÈÕ0œ:Úˆ^…ïÐ)xI–1‹]’°«ì ”èáÉ 8íþ׳Jb.Í”î}±/3+Í~i;™˜ùì’™V|9·:·MÏ ™v=�sUIt�žØ&ó°¾Ò|Û`ã&ÇÓ`´“Ú@0›O$»ž¯‡»à ù²xÓ3h=Ó¼Ìë��ÿ2áo‘Aìë6ˤ­3¯°§‚sçóœÒtEI¬0¤cO¢jlÿû§ TÞ}?ÆÞ¨ñ9‚K=šH»lž±Ì̢й®lõMgã ¼wz™Zêa)Ç{õ¨�ýŸ¢W@eX´ƒGuÔ6Ï™L(-o™æ?'¡¢¸öatÜåžnjôp:Å–°ÚÜœ¸_ÐøYš•¯ÙŒà×~Cmz•è£ÓÐsò„ ´‚�5˜‡ü7’ëÉ,ê äî{¨×ç¦>¡O¡Ïëû#Úˇ�‡ê<¾ªÁ�¸h3¢ˆ0/_8ôË71tµ_YQ½¡”Þ V`hÕâ;Mùõñ@er¼8Pצ—¦À&(ÂÚ_ šÉâÃ>YþL¹Ò’h ÔÖÈQÄ ¬Â–LæêÿšÅP&Ε0á?’Œ]oW|ßZ6mòý`padvÞ±f s«s[x›à:-™�þëÎãpw�<ô¶óÚÅóÇÒ�1�uÎeîBõ °}Ë âÜfÉö›hÆÅfÕ’ �¹½âýH%1�üMáª�åÄg2÷†ï8®r3ºÛ?7òªûeº¿6.KX§¼MgýàÀÔ#•ŸjMðÁoÌmþ�Ñ%™RxçÙ6û).-x>`ÐñTŒæ[ÀvG»ÊÆó‹Q¨ ¨öÃâèc£·)�ßgS ��ÈUÛW!séèj¡°ªª­'F+ŽØÔÍ1€'vÇj�æ,Ý E¾…]Îw!¶s¼ê< Ñ0bö Ö¦† DOr¢å„Êr.•O?>Yëô=r§²\þŠmòôµŠXÒV&C[hY * ¿|K—€àÝU—ÞLܬ×uØõ¢ºž÷…F Ã•õ²TÉ2\±@AŒNðXmFلؗ>Þ"ÔI2Ï;ØNжýR‰ïM6ÝÁ'Óû÷ZûÈjpÚ,Ìuça°#Ʀ:u8FDHYÑ|މ³ØÈ;M-ž•  X'5!™4–©Ÿ|ôóáY³¨ðœL µGÞ÷ƒ¤Ç_ÅîZ —ޱ¹;»Hæ ÈTqÜHx�]Ÿ°�yúR1 "³©lË…ç³EÛù •0=ßXTOÐÕt Ï® 1=ûCïURºŒ®´Zt¶ÌD£Q†d¿´Ñ?ðÙ&Øêª^Ñ4RžÎ¦Q‰dݯQ8íTl,2vÎŽÜ…ÑîÊj©¼¥Ðùéž§(‘ üö?YÍöæyÈ–˜v½ýSô�‹p¤rPÕûè”Ò7šWkìš<óÞ!öKª80Ÿ“‘ëådoÛχ›¿ÀáÂ� vÆ©‘2;~§h¿ ×üYºþ=Õ×ÂJ�‰„*ò³¼{g‰œ.â„xé®ù:«ê‡úÑ·ŸCù±etòX¬j±ÚÑh§–ÇJs?ÒÅ哼Br«4:Òß8²«XNý6m&F%‘±@=Ö“ë¾p�«V¿ä ¼�ÊádixÕ“·®”GÒÿ FÇTóã£EÙIÃO)�Ô""„§üÙéõœÏ‰+ŒÔ‹Á]ïÛ¨}Æc–ëøœW ë$V¸__ï‚'N»«ýØ«+GV{ ˜Ö’¹åŠL«ÇY>VxaDw|Ú¥Ÿ¾�²c3i\¦<5ˆûÞÕÀ˜žÐ3)Ûœù"üÄP嬹&òå“k2Ñ¥Q¦KDL†�êpï‹�Ô/U €-UÓ1S©…´Á� ëÏù[³T�ê9�d#.«yç³j/gDbá‡ï'ú‚_Uõ¼z]ùz&£qïæN5;{QÑi}žÌ·]x«MxC9Œä/2Úü©¸˜u¤žóÙ‡ú~ÅÇ=ÛC¸šM`�ƒÑÅU|œÚw3¾Åu&ÒáÉNÀ2XLsBVðRÖ>·¶T,ÿÀŽ™œ ‹œül³ÖÝžŒ²áIÌò¾¢Š±»¼=,1AÈÍÆNÞº–õõ3AGN$�ˆ¦¥è°é7¯é:Á —* ‘¾ _ ­ ! 1agvá{÷èê%}óÓÆ„hîm”ô0ó`É:št5¦@»C_S^ ´¤ÈÒ„ó@¸¤�ˆWVdõ0Y`�ñKLI«qròùÙv¼¹BœÝ&™òÅü%¡´µ§û5Ó‰ç}Ö™ø#‹µ3µ'{$g¬dÉn¬Gcj "êsé4=LTª»[¦ž"Dkri?·7fÒ· Þ�®’¶~rÔ=§*ˆ¤«vXºm©š\ïÂZÿ.I8šK²meÚP‰–’´W7¦j¤ßaÏØì¹oÐj_p#-Ú il&zÔ}–‰uW0RRî,©‡åä[SN} Ö )NÝ~>p=´{únÚB2½e{hÖ.ÊíˤÒÿÑ2ƒ:³Ñ&;TÔ&yXiåÈ>U²ãC燖²ÌØÕ[mõoh/„!²¶øë»˜ª–Q>7W7dZžÈ?ù¶ŽF†RN­E·mè1pÙ„Y^6²¬pèýyœ_šuÊw ö‰‹*xe:UÀŽ�OÁÔ …ÈŠÐ|¼|©ƒ;¿MÁLòŠ¿¡µj’È'§b.ør¢çº6Œ m`÷Rmá„ý*³¦ýÅq‡éNë¼{¬·è6Rv¯Õ¶¼^·EË‚ëâ£L¶(Ðæƒs¼Û�Ú¶+¢u˜üEÞø×S…Ò弟íÚŒiâ´Á+š¿Ñôˆ¸N0ìÊ,º¡hÊˇ%Ïôhßt²N¬ÅóÖ%-_ss«RZ庚Y§á,¥‘“'?ª(Lf|ÙÓêÀ˃Fü©ìÜš‰q}—Ù|Éè‰DŒ?R'9O5ñ¢ªs3J6nù�T×¾,o[@MXÕI¹42j¨FŠûöjÛßú:ŒeKð¾s¾¸xÚÎâ>œ¬q5oãÁ4B9²Ùù¦ ã/“¸7Åh-*]S ÒŠR*à…šâÇxu…6‡’q²¥æ±[‰?°ym­ŸéUZÎ)2ÃY”­.aN¨³c-�, ÏD_É]³”±=ÆÚá®Ö6=‡Nàt~ Ô-Ëy^rÛ�†OÉ©Éûm`õZ8<*HU“žÒ]tÀ„êFÝ~º´yšQ¢(¦§µi´ÐÛš~ËBô‚º[wžxÅ”ÔÌÇ8A…;†Ùɘ­šór� cÓ3Ì(pZ¿óeÒEz?uͦÁ Ãlo¡'ˆÞ'N×ÈÂh‚4‘äP8²Pqóèwj‹ãH=YDä‰!jOŒ'µ#¦ÐÀ¬0ÿÅA2~ûn¾§µéï>ާB}ÓÕCÄ7qfØé˜]äæûëÚÍv¹;ÀÓš�_�ßà]§†:o{WG®Ñ®ÚÃJé&H‹>¦ºJí¬6¬1Õ²SDИ6‚‘#Ê|êÓ3þBy†ïuR¾E»M¼Ø¢bê+þnIÛB.IZ¨Ãšª‰˜ åÈ Vw©«àÊ…ÿ vcsaMĘé•­ã]«$êzå��ò5:üZ83£ý©Æ8ÙÞØ›ÐhòOÕkwJZñõX=#mµÐ•Љ¤–~màæµ-î"üøóØ�BõŠƒ¶ÃOÔ ½-lÛ"ƒ\s£`Þ€ò½ÒºùÕ¯oÝœC!èÏ•Pœt•rŒ¢9•ß(0×çÿ~‰+Yâ‘hYÜÈ�£¨ª×¯Q-*ÛÔK÷TPH, X#ûåÃÍÏh¿¶�਒5Èzœ SSÿgó—»Öçµî·pWZGñ¤Ÿ=êèÔÁø?ÞÛ³,‰•ZüÞf�Ôé.Æ{å"Z.�%]�jœ‡Dh#�khR·˜É¾úY¢ÜÇÝ£[‚9Ì«´�›½#í�%êzJfó<Ì:e­Øsö‡$嘡ȑÑUþçòU•ûר-ZáïeÊNLÚªÁ�R³ÇVcÃŒ—Hó_ðÖžÚpÛ#ÂL”&û/=‚?ͪßÉ*ÕÄJòöÌ6ØÑƒ©õ éäŠ)>u4mRgp5[w'4�‹Õ®]PüØÕÆ Ïõk+aÌ 24<{÷"zÊø©à)í£#fŠD¦¤Ç.¨V6Lk~Ǭ #MÈΑ!Ó®›âJ™Ð•Ù¯Vò@¿QUߥzäa‹1Ã9c ©…êeB÷l&þ̵ÃGƒ{…�›Ë…7íã&ÒÆÀtaùSöZë®èñ)é(ïÀorœïR�f¼h¯Ü"õ«Vã)b³½l\¶íM]BöD…±ü9’• $ó28Of¾¯Ï9b�¦`k¨dª}˜¼8+  ˜Ó.Â$­ \ 0.¸Š.¤æü’ËèòxŽÒŸƒb³ðÑÇ#ÃÓ,¹@ä'i3GoXK×°ùÏZòßl �rÑŸ�}Õ§Eâ5ÆËóZdw  ë2¾¥ð©�—1ua*»E¢ÊpÒáÚ;‡b‘ª[îäºì áÿ�V¦"Ê·õ¼ž«vy2“Þ�ç3ø‡F•KŠ‰î»‹HrÕX*k& PëÑ`v÷Ð÷\0½L•ïÌ#¹ª¯¢x �°à+…^­ðâœu–ªMï ˰à y7…oŸ=¨�·Yúü5ip-ÒSwª�o› !Å�‹ª—ñÂU’x®>y^×Í•ú£šÉ¨Ð‚;Åk¦…­¢…ñˆÈÌ¥G…Ä×·ï¯;/­R–�6I„UZüìæÏÓLF3á~äøÎaüÂ;Ö,‰³Ž´•IEõi?«ðv?Œø 8èÕëýoñ‡6ò¨<[á)b®¦ÑAT³×Ì€çÖ«/Lg?]~/ZLÆ-�›Í‘ÓùðV£À Ç?gÐký—Lî:,¤[ëKcjÅŠÉ ôŧ*+ød&‡HN ³R¨�È>}æTÝ‹.ª³¿Ú¸eí£./Bƒ¾ª¼9,µ>þÉí àcdkêGÝ‹?”±k¾P’c+s¨Ýˆ’Jåy&†­!•%Œ±«18b¨qøþL MwD˧•úˆ«dÝ–MŒø2Dü‹Õ°ÿ"ÿK¨ÎwZ|+šüÆ™vß$P ‰#ƒMýEô‡™Û›í ¨íFàÌV�¿�èªí‚Û¬f¸/²)&¨Â-ƒ„ŽqÁ03Ï•µávþUx¬~¥›Z((�JÚïÑÝÛl’^êA\¿ÔZs’¤žº¢“ÔŽöïD:CÍD“ù´QêwTbYG(�=Á)­²æò–î™øiío£û$¾{›åð>µŒž±Žú¢’61] ùXŒ�Ö‚Ö&ò�& µ³É‚ø¨«ãk½“Y…z7"J½{#`�£á{DËæ†B9¾Ä¸÷c\æžû•6IÞ`¤¬ûÈ2u{ìïâ¸T–÷O¿'l±†R¹W.¤[ú":ªq½¯†h®nD'÷Äù'¨hc*T[aœmÏ>� ­æÅ ÖÛj"y— ¤Ï"ÈÈ3@{Nýw#Ÿò»�I4òØV&V¼JžÌBþT-ôþ¹”¿!)° ëIS|ÆÀ—Ú—˜×G>+ÎT»~:¦~Õy8R”¡¬àSŠ�Ê< *˜zªr˜ªüIGk;ôȱTdQìzŠm4äyÆ þò3Щ¿—0fRÖÔæ·bÑÕfiWÜ’‚½¡rHL;_Df8NhŸFio{2ô³:ØÎ¨á¥9ÕÓlδV½nÅo(óm‹€·)*>€Õ§Í« 8¹qaÍí…ëÊ×#ô?=SÍ´Ä[ÞǦñŒ&åÞ*V9Xw¥7ÙÞÒoÂñ˜‹ð°³Þ逽#â3Æ8×h·'ä�ûIS,Ì.•ݵ炆†Õ|üÙO]àI©¤åLKŠ6°ö½)$-Fï²ÎXÒ�ì6_k¢4‹ÿó•0YÂ?{‘5òoE ˜ˆŠÅ÷iÄ|§lK”’zu—ÞéÊ>Ëg ^œfÊ/gDmÖŽ õÃ÷¥ÓàU â�*Rµ¾òVj5(¥ùø¯ ª55C§y– Å¿2ØŸžŽvsPŒÇ!�r§ùÎd”¸ÃXN‚Ê�ŒµøXÚŒi$wóZÅpó•áÓî[©K}+—€rKŒF>u³Õ|SƒW.v‡—"SP“Üf=£ÂWLñéúo"KªÞšµ@BÌ<§>rE?¹rÔGµmzï�û›PU~;÷ý]àzÆ VvShŠOQ!_ ăþî’ÆÌºŸ¤n%ߊx-¦ÿ½Q¹ 9raçM›ÔzîpKŠaTdßQøgˆ@{)óÑMH¨\8äU´Upw,K=Fž{ö³V9íÁÄΦ·ïTo‰ò¯êµz‘¨ü ú ,%0“Å$íªø‰NÚ’fÚ°Nˆ �d-‚P ÚµdÍÊZY[¶Á~óT¡_¼ðåq¸ÒF~gïÚ‘^Tˆ1¾§ê‡G[Yî»S´Û‰ bä6ÚV™qÕ´k«¨�}ôi­Ì³b”+Ò;ß�[ùVÆ ì=‰ô0OÚ$S_gL$þ4´ü„Q !�¡¦WÚw³ob/Ÿ!­‘`�Í?<σ‹*{ÊñÁ]ìôÜˬgÍ©ñù“ ñùsïkú\LþŒ£g»Ýn+Pa_ìÍ3JCåÔdŠ1нwã±v#QI°Z‚Ïjô¥SÛ.¨Ú†x-§ƒÒÇÑÎ3k_Ô%½E–Å¿Ÿj ” Üþä–<Ö¥çóσÝÝô}kø–(kÖa¿‹7ÉjÈ?󊳤8+…e¶ª7éšuŸ¡Òg¹š¹M°ãê�=f:6ÞhÀ.c*Y™&9n¨×í@лR�uÑ”JîKغeŽeÅ«;¼¥|7ñÊcóÇ«ï/¦Fí_Sy] ¿¸”^<9|qû\�Â>Íï->ñŽ¸Ô ·pj¿Õê¥ úð1qVn„xì‹i)Ý… ÑZg¢LTlô:ƒpO¥š_óO°OZô¥o]wzÙØÃÞ6¶ÒN\›&sû˜¢Xé§Ú{vnxš1|{Æ0j@©=‹ýåy~5µuǼh×¾fGÚ°Q9¢²ówÙ¸ˆÑ´Ü ™À²»p`\¤ÛÙ)­ž‰r|Á^ß󾁵÷™©vÊ*C@'‰%^2¡«©ð"�ÓóÙÀ=‘¹g’w{æâ5éòu33WùŸ€x¼¯eúb§4œ«Ãa§b�*;^?ÊCBð ¯UÞGÈT—¶qßÞ vùE**i\cZ^½@óÙO›3ƒÞö"ÈÐbª³�ž¿;e^/] ñÄÞ]AÓŸÁã‹§L4õâm3æÁUëÕÚXåÓDîµãù^#V½Fi_|™_§–iÅ#² 2!æÃ~¼æioëÌÔ·×ù²Ýy’=Ò/EOTx±ÃªxY£(ŸmTö;S'"9%F÷ÑkÏ<šÏ'jÌ÷B“78LHþ.úC:–ëGÈàÿ� É� endstream endobj 1655 0 obj << /Length1 2065 /Length2 23058 /Length3 0 /Length 24268 /Filter /FlateDecode >> stream xÚ´»eTœk²Š»[pww÷ànÁ 4�»w ‡@‚»»»»÷ ‚Ë%{Ÿ™Ùgî¹?ïêÕò”>_½UÕ²VS“«j0‹›�M@ïÁö.Ìì,lE%u°Ð^èàÌÎÆ¬²pµ:8XØØ¸�¨©%�@@+°½Ð$àu±¨˜º¼ù¿Y°±ñ#Qd@ö §7¥ÀÄ rjz:€ØtÀ¿€*ØÙ…Ùèü¦Ù[XÙƒèß\$ÁžNV–.bp23ÿ‰ôÇ[‚ 4µ»;ÛX€öfy%€2ØýMh ÛL@–@[sØ  úÐÒ�V×Ȩ«h©jг¼Öpup;ýI M-&€”¸²¦4¤Í�ÑÒÐüó¨ ²ãoÁPÖ|ÓÿÉóføÇ]IZS\SWUš�õÏ5Øn 'g«?iÿ‹Í3À¨½¹š;�íþJ ³tqq`euwwg±puva;Y°8ØþÅOÓÒÊàv²¼=;�lAÆÕÞì­œ.– ¿ü9€¢•)ÈÞôÇé=øo¥Ý[)ßœÞä.ÿ&öV—?1mÿ68ƒ@ÿ+�%Ðù/_EUUE€ÐÊÞd´7}3tº¸:Œÿ’½ÝAf´$]�œþäPú—ÊéßiþE]üve¶Þ¾@÷ÿ>1 ½«³×?jó¿/ÛlïlåìâüwDÀÜÊô‡½óŸ3³²ÿK¦$®,÷^ZC“Yñ­ñ왕ÀoÕ±gqñpùËúO²ú³ÎÌì\<ÿ¥{kSS{�³3€ëo7Ð[Aþ‹õÛ)üá `Õ“••ÿ Ãø·Ð_¶Òö¦`3+{ 7èäôDb{ë nn€7û[³›�<þj+‹=ØåÍààêâ 0;!ý9\n«øÑ߈À*ùoÄË`•ùz³Tøâ°*þñ±XUÿƒÞ,µþ�øßbÿƒø¬&ÿAüVÓ#v¶·0fÿ€oùAÿ€Vó@N«Å? €Õòß�ë�‚¥§ƒ%Èþo2«À7&¶ÿ€oTìþÙߨü×ý� øð�ŠÃ?à[n§À·DÎÿ€o¥rù|«‡ë?à ·ÿ@Ž·DžÁÿݪÖä_sÏöŸùŸ÷�¿°†‹Ø¤ceööÞù% ‹“•‡>ÛÛв¿Éßnÿzeø¿PÿgßüÃ[BìáÍÌÅÏ`æàk+î7×·Ò°ùþ/_Ó¿Wù_ ã­™ÿ…ÿìQä2EZ^› [§6„ûIçO•ÀR󳜔á‰|�O€YNŸj#—Êݦ‰6dЀe ý>Úÿ@Œkû²Þœ\>ym¦&¶ôSò#B“ÍÑfÑ ÊPZ (é  ?’Ïùª[È5“Ñ’ÐB Ðý)ÉßÖyÃ1ñŠy™BaPÒò#ÖýÛ{#Ž“-–Ça;ÑÒT;¤Ëë=N\4°G|™aÖøk(Þ¨<œCw'ö.dô7¶Ïçzׄ_ë{’”5¤IÂg1Wß'hr¬¡‹b•¬®kBÓYjÃ9OÒçy ‚צ—F¸‹(„óbsÙ’×qí ‘%^m¥Òñ)'nµŒFjµœƒÒ÷¾éa£8¿b}¤ëé'-ÇžK¹ùé�r7Ûñ Ò¡RòÀ÷ÔçòdÊ�®îf’Þ£ÅèÒ/­@r÷ô!eƒRg�ìË¡�¼×&Mì|æzÖƒeç¡I†úáñõ”ìàöŸüueZtü®ÌC€P¥a +Þô7\ÔMl3ß \™�iõ‰=¯�×8 "ÀùW&ÌÍw%* [ø‚�Û%ÔJžÉ&JDÜ$¯¶�‚*Þ$'¦cÅHÇÆ¿ô8oiÃØšNÐ�“wž½ŸJ« Ó�à爵^~0Ü$*¤› Â`®Î�™ÊØv_²eq}C16{�ôUËhxÛ0¹Ðä–ôø[ê_w¹h�SêB9qóÃÃNU oÑýÙf½(!GÐ~i*\ ûÃêŒaQjWe Úwwèâ×{JBÚìФY]Ï`…|û�Äõw ²žl”!>zÿ*/¬6Tm8»˜>\ֺ߆cYÍ�^ª0ÂÆvÂŒ6QúÆæË) ÓÏ@€•k^ZQR hé±—1K+µ‘ ”¸ŠâXÝùáñ�8ŠÓ‚®9ËÕý}00Y aI¯î†çúÄD2i¸åò1y$gÍoW/ˆílÊõêÉñ€dcñË òœûìȆÜVTi׬�;ïà4¥'¬u ‹G¤°�4˜¡±äÃh}Qûãf¾·yZÿž·ì‹}½nV¡RâÑwÖÆò‹D`!?šoHìœ| !þ¦ØSp–£,/`à Fü�§K°EGÌÛœ4š¨Ý5®8!`ÜÄR­Ó׳G«½ïŒsD(U»ñuØ–Ú8xa… .Q<ù°•­ä»Ê‘õ°ñ�\¯ª(º|‹º1±ã¶DtåÌ ¤üÁªúæL 9—¾ç¹$fäQ8E[À·�¯¹bæK6mÒ·„é™ë’fãVóp³ÃxeÚó‹á;(s­µwˆ§W5gvÚ,©4ØœÏcépQ“‹û~žÙɪØï3…ÑR:Ï2jUc«)x÷� ¾WXÖí5�0[!�yY!ÓÓ�-bSto_>¢XÎ׌* AnHC¤�½û•£®µ—\zƒš½ÞõýðŬ¦¬³¥Ê4u%š;q·aפ¼”Üòc~2Œ#Þ©ý r ãsJ@%'ÑÂ7ä¤G8IITV½Ó֊‰i†h GÅ)k÷T½ïAy;>aÞæ^ßïiÞ1ƪN¦¶Þø>fè=VdcÏ…íaŠ*D"cÎÖÑ%fRž(PÌðÂüý >ÿ¤¡Å^ñ(öžW«\Fií(ÍÄÝ_¢$nëü ©ôœ/ȳ¥sN­ä„˜«Þå]ÄßQ�YEß?Q­“:舋ýù]íÇDÇà«�VxÉ"BCx4oÃ'ò* 5Z¹ ¨-œ¨ñiq²»¸ÓrMÒjGB#˜¤ËF¢a–jªÛYáíÞK¨fëªþtˆ )–ºÓ)�Z ÅmÅ€Íü,&CÕÕ¨ö÷Û<¶¤Óè—ÝçB¢Rž0ãÎ`\ÛQ‹LV¦™Ë¬ÉæÜtÉOŒtÏuî�(¤–F®é9¢D L´ƒž•ëä.tÎÞû�uÑ3õ¼"Œ Ö�ƒ�Ý)çNõ�b ᇱxéßœ™æ% Yç Ñì¸ÝÆ”C/^œ)Q"«u}‚” d*I 6„v‚¬Ce •>M³Ôéi ¿ Ókš#Ä\GñïV7¾uµêO¶4Ëë:ÖHÙˆYOg F²Ð6º•-%7 MÓû€û²8¨ÓOØ÷,7FLpÜÇÇJSÕ¿vñ9D-~#ô Iï„Xõ�%ô­>´IÂ÷ ×ÛðŠFaå­F )ñ�Áý]¨¢a£bz¦íÉÊÏõ´NëJóh½ŠŸ92ÌÊ‹ª­†䌄ûq þÜáxÏŸ¬ £ø•z)ÿkÁ’˜Ñ@wXøÂ:¸zþ#'@˜þà‹%¨ŠfªW¹%o´Ót±G5Yù‘b6➬ ÏÇj•I…îÌ‚ÕÒu~à×g›šš5�kLêô¬™­ÜâÕžuŸ}š^ZˆÖ¡ïࢲˆÎdUœèÂE”ÅЈ@“D™ÉeYíÞƒRmý‰$bFÈÿ~3u½ˆÕr˜9×$ŸëØúdŽƒ˜F‹WŒ¼úƒª±’&„ïŒê,yÀ¶<;õž"2Lê[·ÛÚïsˆ~ô•k¬˜¹KY7e¿_©X5D«à §"š¨ù4¤Ó‘Ýc¹ÂPÕ—½ì­¢^ÖËX.“��}«²°ã yäãc’T[Ū±=tFêµ+vúå‘mÐtá¸3Õ–+�ò /XlØÍètºGÈ%¿Æ.XاŸÑwq¹^·ta{¿ä´Ø’“ø“¹ü‚@ÂÚ¶6/³�vøË^èšCD ñ¨s Û<=QŠ3¶£éHhíɬ<{¿êaçç°gMç@#¢\¼qŒF¡¿oP½,oùÌ+Â?Sz~ý¸Ä4äZ]ru0Í3#O~k’î¬ Þ] $}—¶ #½�ŽÁÃ�ÊXb8ö †"pTUyõôR¹Œ‘ý]‘ö%ӳɈѺ¹ü§¯ðq4ø3å6l¥ˆüøpÂú8 D�ˆ¿c¼ä‡QÏ>Ícâ)hÔ–ç‹ E² ºõô b^2¶ÂU Ѳ.p¸€Bþ1P÷ÄãÐòrÕÉš3>urõv]/m“#F·‰ÀöʊŧŸ0Ót—säsX)ÚùoÑöà†,X½&Ù¶.¢ÎÆÚ¢öÞ?þàôxíAâ¿ïÄ\qm§¦˜g7i!ß î�gdЯÅ;‚i$ hKv™=5†ÂÄXèõ­z°üHõbË�«{·Ž`¦©Ç…ØmHL¼n–£«MG¸ºà¬Íƒš"<¾|ñůºßý(÷Ä}n› Û/ðŒÆŽ`�tg͙غ*Œì Ï^ŽM[X¢ó2gD?—u6�N{Tù�먢÷AâòÒlÂ߯úÉ+ƒ×aë4‘‚«·4Šy,MË´>ìy0<†ÙC8 E5z�0é¤þã­ "˜)5»ÓÇtæ·mÒÂyÒÕ}=ÜÐKÌx²p¥hÝN¾éþqOÆtE.ç²§(D;l£ì´:L’)H37xöGiÿ†Pù�¥…Úò9–¡-~ [c¥QÎÊgMÞVÄ‹ëDPUrý¨ô.%Éô–üÖŽ WÛ«±V›$êd@»õ¹0ÏúÂÉæ9dÛòÙ�cå¼ÿì�h«îo‘)úÞUЋ/^R²àÜõ‡Ë{�P-«u¹²lƒË"œCLk'=ùdéB²>”zÕu¢Qÿ|yÄ-8|U´GþtåTßñˆ ~ÕÓgÛŸ€)³xG)Fz¼ã #%d£|Š;)ó�öÕÂïL‘¢ZÚQ¹ p⽊‡±ôûfý P毘ÕãÔLá|ˆk#%ÄÒ«¥‚îOèî\(ͪSG¤ ááýà‡`AÒ«’щ-nÊÌ%òu2£ ™ONŸ=Âb˜2ûÖ'©ìžZv¥?ÎáÏ=l–¿[Žò*“Be},õ÷é¢d.^Ì] ¿ø5Î�nØJ&Þ¥ í{íqªÿn�;+/,�’¨0êçY’›ÿ·Õ#Ã…ß/‚â|°¹t˜Ù楾¡ðuˆÀlÏK‰Iõ}ü2ÔŠ÷RòÞÁ·Í{7å¢Ô9öœé�•¶nÍÅY�Ì6¶¾º3 xªs†ñ·`OuiÍ$]'“ÎNb0µy·Hrp9®Ê9m‘ßâðøòŠ”µ|Pí�è,�¦\¹hà�lã‰$¦—UÎ2¿úÂ)U½ñ`|SöÎ'aŠmø‹n•u?ý Y¨_·”||TEÇçPžúÀÓnVð ÇJVÌEÿÌXêÅó"[j}ãÝs#-Ó¨µf6 ö²zLš#íÆCzçÝдß�æo´ß÷w³?pk¬á"[Úf»�iZc\﫜ëMn™“ }�\Ÿ¿«æG—x½nZÓê®H¿ÀΙ%³c^$¨—HRÓϽHͰçû0²�V�©Öðˤ ×A�yžü´Wºì‰VSY8ŸsÜRjV§cº·Ó•V—I^%ýou{Í\ènÅiò¢ÚÌô ; U †Í?x1»HòÄ-x0´±Lé!Žbø¥ë_V )©ƒfTCyêW©ÿƒ£r鑃¢„Ë#e]yÕƒtˆ%×ÊMc#?!ÞbýRñk<»ˆƒ®r}ot¶tºŽÙùAÓÀke ò0°D”%Œ¹]§`áeÔ‹fAÊg\° †üÁƒ$ ^igùLÄXºM©ôSÜfIÜÖ”¦ƒcÑìýÖÅòµ·ªhÆÜ PbCèÆ¤ëþ„$Æ­‡cìZ?Zw645¡FÁUPNsîFüž³ÄAæ·°œEzÇVÈp¦4$z˜Åp“{Ñb¹AÇý³ßæN�ÛÎ7LgÕC÷×{¿ *–§ƒŠ"Í_‚Koüô±b[7ÔŽÇßy±Úàã?41¶”®¡&¶j¨ÍæÖ“†‚x¾V]ǽÉzmig3µ{Žk±Þa)8™w@{W¶y^‰À×â–ßà”UÌR®áo5��ÍJæ¾_@.]t§,3Km�Mr/<´î‹°o—áíøúèc•ؘ¹4îÛxš¿÷ŠÎÞCSËòµÙSÝèÂ(æšmNÛ�@—*cJQH-æo²·�g#ºw€=H±o.û¾Œqf¯Å>³âbº4?¢?>§{bK‰Ð¢­i0} ˆ¶¾9�SÂöq •Ÿ#Øü¸lUÛdÑæ"í°úô�±®ö³t�O !é•ZÐQS1ßËû&õ«}4û§Ñ œÆ ¸#6Š\ã¬`†ë\‘”»îwŸI:õLª�¤Î”JCГ•>á§Üßø ûÿö{§aÈÿÛM¤`F§UyÄÂe¦iP5H™jP#ãÚuhË™«G=2Š0Ù˃'ÎWß�ÎBO��Y|ÝvùQ�éEg¦lu’–­Ò¹[f-Ýiæë;¹}’Ÿp_9�]kpAÑ�ž <ú¨›d‚W”QBw³³GïWUm“äÈ‘±‚ Eî‚ÅßpË mŒ¢ôp zú~@Á°™Ÿ"oÂ>y¬¶y3- ¤ÿt[w[Ëñ#+ƒOHÓ«|Wíoô]Ì™šÂkÙlpnôë€äŠlû’oŸùÌáˆtÊÂîHé�$õ¦Cx¤»ŒPð/#Æq ¹EØóÄâ/žÞ=•ßOÃvIfÏ„Oã{kïòsx¤¼c‚C’áç˜Ìi®+ÖÓË™Âð&ÒkØòH[g^”z�Š¥«7‡§FâX5û6ÝdõÈd!¾± LÁ ÞZ$5&Ñxê“UXŸJ‚¾á²x¡ <Ã]Ö|ŸàËzïåË‹˜†Ép@=K€»J�{ÍAÇP� b³�?¤æ#'ŸÐ@Ä#>üš9½] ÑW7ü–”ñ i´·y::•¹ÁŒZ®õšÝ’¤‘X‹�¨ÀÜ^0è´àûcAœ‹§�t^ß¡ Âs,Íz³˜ë匊ޒw�sâbä¶³&QÜsdNx¥4f½if_1©WbfÜsK‘Åf{Ž¡¯žË)˜ÝL@K”3½Ü>*‰W¯l ô݇ø‘)÷òïCY9=-¬!–6…áãí›|µ–óm[¸| ;®ª>\käü0OøH�éà<¿ïñÜ&I`JªhΔi_ÇœxÁé{IÖCÜ1×Jh_Ös�R´Þ‘{�±¦†Ö"�5S\-"îré¯×]£«þ!]}Ávr¶ÃÛ*ºÆŒ?+žŒäоeb@…˜?"K¼·¨£ãÈ¢n  ûu¶�as©©ñ´ÄÔ[YÙ“²\0‹œ»™¡’2mJwý­UØ»°ñÙë“â 6÷‰+éý ÔÀÍÆíÂ�‹aÏj�ÄÔNysÍ÷™K]K)£nôZù­åI@øéÉßåÌìŠÙ~Nì"½,Ÿ€Ò¡�ä}�™ö05ŠÑ¹Ú5hº´Wy�_Ç-@ ÍSñ¼j¾/Øü»¨Ç&Ó+å&E2ýtñ7¢Ï²u'¨jz箉ë{¬}¡+m…3¥QÈc‚äÏïñÄûž÷HCÅc.©[ª[û]šê´ÓÂ'G–â‘^�ä•»si Ùˆ¬Q·Ï)l[£"ð_KM–±²^ÛÕ4«Ë´¯2 :Gj)äÂðÛµöpoŸr”ô™zxR‹l'Œ5ãG×�É9ã6QÑåƒwvSZ…–éA Ú VY²jaLm�KKb¯À墤H÷‘FïêO¿¥aÍ—ít™fÉJ›-IAäa®ªœ™“x®Ä-ÆÄe 9Tç߯S¾ö3®òvûdÐà�gT�ÇDDt`©¤ø•߈¸ê?}3ÔÖ+?,–Ó‡§Ç T$˜ü¼á¸SÀ?ÕBþ½"qˆKœäª }„8ß`9È«F’5[¶À"¸#ccº$ê ÓQ\™# Q\ii­.ø†º£Þ�NÌR9�1 .IÝŒ0ŒìkF᜛0Ö»°*ùl¹J2_ AßsY¡’>u4ðÎâ|¡?†“Üü2 Æå\‡’p&òÌ+bz:ÚSZ$ ûÈ|žÂ� vž+nY¨áÃyœÉ#ÁÐ>œ·¨<§(ä8zÏ„+Þ�I Ý|![><Þ³ø‰ê _ÔÞü*³*¯ o-9Ä”ÐT�åUÔ€‹wÝ5Œ&mIÎg4§"�‹}ÜŠŸÓQ‰3;/}»"C<è…`* ÑÀè†ú;â‘�„÷Âö–ÙmÎøœ«Šò èð{ͼ[f¦Šy�'o–¹[ä–¼ÖQŸ\—†A¥¿`“.þvôs±p^ŽQG^JÿÃ`v»‰Í<'”íQË!+¤'Û§HE—V­Ñ€q¦? M-ÕÈ^溆ð¡á´²E`=F(ƒWì…%+’™™;v)#ñþ‹׌å8§ytªÝ£E·fk� ¶-s-ï"–{fä„ÚÚÖó’öÃö�5!´øZa3#ºaÖðT1QÒ)BpªoÁ8¢õÝõ«ÕÁâù¼Æâ9ÿ\»'�Î×Íês”Î#ßÖ#1ó>X°•wQ¦Rçó§‚åOZ¡Ÿãîø=}ëÔ,‹¯^nš:­ƒpüŸ¥zÐUÎ3|ààY ¿ÜŠ-µNé•.Û¨fkƒ)I ÛÀÉ;_lÉ ˜wÙ Ä`IeްÎ@˾=;z˜ÄŒôFS"¬t$%+ÄJÐ-y£ 4Ý?[Ì3>cjBªOÛàèlí1@¯q}dÂ|ûŒC§­Äy'Ký(.šv?S¾“‚Lj²½jh[€©9ß¹ú-Á)Ëbi±‰} :/ÝA:žÂ­bZF5‚_‘&“ 3S<O­„´N1þËØàØê2Á¾DmÙØª~s4ÎÒ–€ 5ï=T‹¦Ë«_ÐQÿ„·›â-¹ Ei´Õ�õ8ý¥èžK†ENÆõ:€ýòÝÃMU!úû0O·núßÂ+Žº\ _ôû”ì[a©S„QW,‡Ñ¢ÕÜYÃÒãX™ "™!3@ j×ßý¼Öø¾D ¹ý+ÞÆLëc»%#Ã>é©Ü­ûˆïS© BqžDxñо’Ÿ;Éqe¤ÍS^2àÆ­#ú!cßïó4�‹».ô† &+KUlµðjȸ…1;X®nü.ÛÚÐ͉¨K?É©¨ *ÖC)8w³†Òp—LÄ8@&d%…¸ÄK\FXK¾ÌÍ_wM±]ÞDKŸz¥n–Œ—¿™4eÓÈIÒÜsé3zåG/`†§7:…Ú´¶‹ir¨§.ï8ÍìÄê …ôp"ŽœÊBD¯ìy£Qs1Ü­©·€éMZd!ï·HJÇ ¢5R!¿Ö¢QT�ñßþ÷” 'ózš\÷è[V-SÑÃÛQ%[Ù+©òãO5µÏ€182xý±®Ýa$Ý(ôlŒÒЏÏ+`Dí¸éÄ}]²÷.� ×#ÙÛß�©­“püÄ®úMñµMζ±OBÉ ý&f”(7<Ô7ž-¹ÓäT°9Øü±â;?‹©ö›÷q3yv~Ý'¶L�= o�þ ©!¬‡p 8 ïQПùœÛäVXÞ}Z¾ÓÌÏ3æÉ'_È�Ö-?F$_1{X(`† J�“CU&hè”Bvûûk�<"ª¨9Žœy#FšÀ"?€å’/Ýîƒ+C+R5 ÃpÜØŒ9—`�´S«Ðež«€xeñÜÌHÖ¦ð]”‚Zš‘/lÂhi�•±ûß>KT�’`êF¥­1õÚŒÃÙ*Ž~žÇø&Ïø+ú³¤cN<¹w\ùIŽ{hŸð¯U\ùÔ®1¾ª2¹µ´ã4”V °É̉4âåë|®êB¯è¢`žÙB¢¯³×‘ijÏ6tIÁ·Ëg7Á“Ó�ëm½yä8c‰¨ÆÆ«¦Ó ÷IÌåùNÑÙ"I}µ·RÂéœä�s.ˆŠF/î ;.uè=å»áý?¢L�ПŠÓ% JÞÏKd–&ÿÖbd7Ô6†®R‚ƒVU„ùŒ-X µþËê:9'%c1nÞ{r3ñ¸?ÃáÚÒª8^x¹'ƒ_§õ™&ƒé¨ÛÛ”¤ÿºà³çÚuø^JÌܱ[$†ÿ4‰-ÔmÎ.{qíŽ ±qÆëÂW¯n’Rö õ|Ú.ô+l!Ìo„B‚Ël].7–¶&çï&®¬ùqPæáìaì¾ÞýUD¾/,·•ùІ?ìä^í\žOBS£ï€7Ò0cfûÕŸºO‚‘Š=±†ôç�O¸¡²�îEC÷n“?NŽ›pã%g-¢ó|SQR© Õ…Ê%dnÆ�@ôÐâSìeâwÓ5“朖ï¼Ó/î¹n–ÖAFz]¾>³Ëß³L†øÛò¬ZsaMçãy¬\ý-'GB°S HQWP•NK'Î[“g�J(9‰¦L"ïÐí¸ˆ×ç÷~î¦ó•Nz |ÿ’J>n/®±Búb’B¦)í©I]Èž}•ב=©›ÎK� Æ9ˆö=uŠ`È2[ ìU6™ß¶Dˆ‘©¤Ú>‘_ÐS[1E*ºRÐcH>b8cÄâ6vØ’­ßƒ:ŠÍJ”"? †É¶Èn¾n5ÛëŽ0{ @Ÿˆf¨©À¿ß ­RôÚ¾x\Ìtéµ^IZ»I[‰H›‡©Ë˜E&ÓðªF¼ù�ÔËŽJª!óÔ°�‹$é¢5'êJø*¶Ò «ú�bV11¢.šéúè.¨Þïgèéç«@Âí�󈌅¸w[ž Ï‰Éc%²Ñ¼#çç†د|´rZ˜¦^ízVûJáj !pGNÐ_BŽÚv€ ý "bSxe+bÛžñËu€Åàî¡Ld‡[�Róé›:]Kô ±×±x¹Æ©2Ï+2}G¥"“Öe‚L­åìå€]î =Ðèi!÷lNÎ>§8 ÁñÁòoc&IØ'·UºÔÈMÚ=¡9#oþ4 ·U…‡àF*´RQu+ ^¾HoÃ6!IëóJˆ‰ö7n``rô=V™2ä�¾ qq/m É7½¥4 &„厅TÍË­QsqJŠ6Zhæ ä…fœ»øýòjÎÕ[ïõŸ¢ÆqUäNÆP#î7q5ýï1f¦B¿÷ÁLgÌn·!Žl#ˆ5eM"`‡3\¦›oè Ò•'³wÜC0 ¥V&áøÜË™è8@~"åuä‰ jCüZÝ MóFë~|ñÚ(s†[³ $5Â¥�¤™'ÉkÝ+®ƒŽr™ß»A'M±Ÿ w{RéÙu i˜òŸQ5l‰¥\@žŸý@:¾zNx*¯M¿'¥œP’×n z– Jk~És+Ñô~λî3d«r› % ±ïÙê*/\ºÁeažf¯Kög³òùK�Œ|dæÞôTYR¤•Wʤ‘<>Á¡3kÂS¶½õKè82<Ü3!;›ö‡ç»˜öüÚ™ñ}ôþ"ÓZüóèÙgµœÑ,fN¶òg'ñË�yÌŒüñ¾¥ì¿éëÇ6�y—ú#ÊÛ㨬r¨NNÌÐË´·ž�ÄÞ¾> øs¸K.͘ sÚµ}jûåûÄT�Éj&˜#NC(�ƃ¬ï£o=|VM:«ÌŒ0–�SMN3VÉØäÅTôD¦M~n� è‰\J¾Ï’V¥4š·Îñƒ­� o»]ZÙãûü”©Ééçß7rVņÖóæŽAÒJt>¼ïVªfÊÒtÂ˲)¦¢Ébim¯‹rð[Ÿr|‰ßøñ­ùŽ”Ós«ÈÂóŒºÉÅ@úK¯MMwV�Êä�Ôbæ[킺ÏÅ©�`šö…ËœÏÞ¡A3ĿƞZ†: ¤y[–kDàh|Ó«dÑ–ÞØÊáA¼S™9A5ЄÃY '§-·PºåÅÊhBì\nxwêB%ºGjSAÔ3Vv1¼Õ¦ÊNÍ|‡Ÿ»dþµ%ªÂŒìElç�½Ù‹T�n‡ú*FÒŠ­Ô~F7¸‡ƒÁX¾Ý–»Â~ÑYÎ@F²í;äŠccåÙ®ŠãGj•PŽ¿[�òõP–+¤a Üi ó Ĩ{¦1•ÕZƒæš`F6NEB®–E/Ì£k^É„üéäh£ëžlži½ðáK%²!UËðå·Sy'&l¡›Ú/ü Û)(Äóü1zŒlÖ bº“9.ô²ñ•Y™SsY÷;�ÚsXBÒ6&>õ‹‚ÒÛ�¨�(SWðÆŠ*¸; âÃ䊳|θŽBw2l•¼Ì2¢±Vû¨YU˜ˆïØLè<Ó†ûª?ºžÌ4ÄlÏH Ò6bÖF~¾[PO‰c:-±ú,¢2ò|6¥7Eâã��ÀâêÛÐ| f½­„IŬX �tǽ£=›Ž®vò�ûQ§æ,}§ßÒ"c�«ø Xùõ¾Óh… j3˜Ì<Ý•*,‰$Ôê×ÓIO ÿ_ÊNXé°¦%„ØÊù匶,¡Ü ÐLàÞa{<’ÊŽ2Ñ pä'¥�’oN˧–øf¢»‹]GF°7:Smƒü=§[ý_9 Úºw‚O‡ôfBú Ä£c>6Eó¯)å^³Ñá„?D<~Ü—ËŠ,qMƒuÿµ]Åe0îe÷ M.þ¨Padá5Py‰eKì¿Í{–Cþìߔߑü[¤’åuýÑn½´ÒC ²Ô»Ê[)’ˆò¯œð%Œ“ccõ§Ó»,ˆlµ‡ ¯�YÔÂ,8ècôcÄD2¢v~ì¾Óc`�ý‹0ˆòPE€¶Ú ÿ! 5¨.»»ê¢b�¢y(„gËõ¾«[×oï™ å®ä áô¨q 6ÍѶŠÙ>gÃg‚"öë$°ì¼bþ�ê·à³ß.ˆ=¡±a^Ë�n^€¢á¸:J£ÖìSB?û¤ÕÍ’ò¼ïç§H�uòa‰òk›0éU!œ­¢ç‰EVžûè\‚ƒ]í}d:ÚЊ_Ÿ ¤ñ`G¦ëž'óÇùŸkÃ%ûÝñ:cÙNvµÇ: â`¼Ø@v³ë¡P÷— H˜/<üÒXŸó–Õ‚ÛõÑœ�è˜ ™‹•]iÕ"|Ô.@ð› Î8X^NA&«£|h@6ÕnöTe“û‚ﮄ‡ygØ›q H E!:»i Œ§½†>.l&\UcÄ>ʹ 4ÁàýV{”µ­P“×w·ö�Ã^ž¬½“n»§Êéý1V0•9çMzz„¬„ÀbMOŽÓÊßÖË΀u0ÉR[�oâÅÕjöÆaÂËc5Ÿ¹†}Ö]ó�Jª�·-_/bÀßr¯F¯ÇŒ¼…Ã>I"ÎÉ ·ž²›[Î’¼ð—ÁÃû ɳ¸XYÄrmÔ¨#ràVÌÆq,q$û³ÿ}Ȫ$w Fæ¦ûÏ9rlZt 4ÔrؾBœã—"ÄQŒ<½xU�t# +�L•7¼¥•]mšDÕÐjµþwùû*Û&‰l¦s’ý1l®Ý°¸ƒßÍݵ5áÑ  Z2Åê­æéR*ƒ©ÎX%Í«Ï(l±�uÄ;"ïpVH驇¥˜mX>J¹ÖËvÝG˜>i["TF*\t‘…g�{\MšjÖË×d *=µMÝTÙwØSË"Xå]ƒBZ68IµÉõ¹2ExUܶ[F×C¦%k’d…2v‰ÎÓÚÚ.^UÛQRûž\¤¾÷øiàyÿÛÀ7_�:\d#ÒCó6 (=&¸Šõâ}pÖ7�¡“på)R� æ¹3}â¶]ûš„<‚š!j‹©qo•YñM˜@·Š”U~Ú+Ø8Fß<¼(•5oÜ,Å®F‚p#Lª(V+[�Èñ³ô2Ež�qö ÐÇÙ°ÂY¦Ÿ4ºi³j7¢µò×I@õä•Ýgüø¦2å® VàƒÅZÇ7c©ñdÆ�ûØÞÿã7'Ìç§w;2È ’œáŸ¯~jöëNr>:»-¦)¤á cÝN°h”­ê Çñ”Å¥ÎœÚ ®MCRõv  &ªpT˜ ¨oÁë(|êVi,ÂþÚÊ¡��ëL^tÚÝ$™Òô¯÷�rM¼ß㥿ÄM;/�ÿp¬�Í…Õ}=E¡ýÀÿ­Ì;è…Xÿ®Ï+Õ-)H,þÐ�¨«éÃKóƒA(õöËòãÁ@‚ÈEr0Ò‹†ï»2o5„ ²æàáþâ;J æ’Ü�wðgZ®ä"Uü¯L¢/¦lAuOš9%þ½p•;X_¢¡-ïïQ3¥yIvƒýHsͶ–´º& ãZ!¶Æœm¤bS-lÓmO?IvNç²2]åK õnžxˆÅ>|YÊm`›7Cã&nÉXj’ÏàxŒªzñÀ¨å I‘m �Îv­" >.j×j|Èã—èy˜¦ÃIGÛ�M—UWsÌ>#F=Žúö¶âóRh7Þ�)&ÿö䨙v ‹VŽt¤(U“ù.ÖkR1·øP(ÚÏI¯"Ò0:\£)ÿXÜ‚|ÊÍMY#ª?µÁ�9®û€¡çi‰ôõáq|éì£J<šƒùõÔ4âP-Ò­Ë�—Ôñ¯Nr‚máÝ*3é<ì,¯ûíÇ6Òè8kôâW\¡Þºb¦|³?JŒ“iŽZ—¾zøÍ¡›Öù^EÉ–”ØŽ^–«ÚB ¥TuÔ2PDpãšh¹±³Au3Ð�µ/ƒíJ™3iz†ºæ¶”Yd{Ñú~Ëgxù«wiÝÂYa²�…½Ìt ™}u[¶eòÈñú¯ò2pŸÄñ >$ëÀ%)@My«ó`Ü }c�ÍÎàj|Ùç·±pðH±�{•Sè¹:óaNÖ³8€ƒP`{äêí;û‰pvø.Â6o§�•°ÐËßÚ{t®�ßÐþ–ðÕèÄ�¯}e’‘ô¾ÚmV5]Ø*b“{a÷H{ÝÏý¨@®¢é¹ÿ1ÒÆ¦%$—l"HN]ŒÍØÁ)x�±ï{nÎÍ8tk×$–|ž–Q³·Swr`:œL2JÊ)�{0ê=YÒõž˜È�S®± #pë¼_'±™ñAÏWôCÇiôMñÖ€¡Þ޶yů Ó/O ç(?Å/¢Ï~)©²Ù}f¤nÑÚ9ŽßxÀ B«Œ«Fîá9‹ô€9]·�¬µê‡|l4‚v�ÌÓÛè2ÛŸ©£†’9Æ7Û{%Ši_ïx™•@x¢ëФy#¦»„WŽÔãOŒ„³Y\1F¸žÑšÑ„:Cˆ Ú½·Ä|”)ì`l“„ywži9ʹºš8ª6šùÜbÍ÷+¾qÜîÏiŒïe탃¬ƒ”ú7Ò>ѱá�ÖyùÄA¼Ð<"Û§£ÈŒ>\‘.1%#õ:¾!7Í• à¦8M0*‹IÉ^m‡ç ±F^|tÛú%@¬ÅýA‡¾ËZ£h?0KÒSÒvž~Rîk<ÛL@üH€°»âGÈ¥ù°ŒÆðjüÈo®^¸ŠÐŸˆŸ.ªÀ6‹R´Ã82òþ]›A|Žîà`ä“oTpÐ~Œ¡Cq"Ÿ†c‰›L\Ü®Q õ'GU„â;›/µ¯ð�xÑZx]¯Y™V©›ôŸáïÛŠû°~s»=ذ·ýÇ5]ðïP¸ ôwâDjË&é)‹�ì'ŽTüºç§‘¾ó–€Ã±�ãÏoäžî:þšDñ#¹9»†…AŠ |õE÷G÷1>цŸDëý}ø*È:3UjË~’ݰ éÐ\ÕÇÑUd&—5±©¨xþaMÖ@�ä3%ðVß6w¹®ª†1U!­7—GàÛÈõ9º ËŽ–ñ‚VÆi9On”©UxløÝ)AßbâÃA²»"`Mî¹ÂõiýUa»P ftaQvqŒÐwFÎHdÄ@úS°ž=zÄðé{ØRF^R–_š/*„ô DAý"gä•H¯¹Ôw—Gõ¸ùw8ŒŸ ˆL ve­°2 2¹´SM:â·"¡$׊ì~¦à ªô#Û `2&o½:þvJµ¬t7¢ EÆÄÓ�a6”ÙÍÇŽOÖ•à£JÃ7=Ù]Û"Ì7VPT#ÒÉ+IÖl¢&K¡zþÙÿèÂÐ"MÈ¢JZ±³Oxîô¯|32{«äœî{¹ï+1²7ž£˜z9ÿlûÎ.Þ–° %-õ»™ØlD�m<‡–x� _äÌK$h¥(•Âë#åO+îãÏî8ÁŠd<Ë&¥!‚½T”¥ ÏXÛ ‘UŽÃÇa3fëZ�%Û~ýˆ\ÛZ¤¢·=–»|ôüú��×éJH›éÆrõÑç –�+ãX¢k[øâB½§ÕÜpý# MΗ_Ž| �#Ê|¥­45úêÂ�ñ°DwKºð—ÁÙŠBÞ&ûñ|¥2H¢ýíëUbžN¶¢#rÜDòF§¡ª�Ü"WØ+öOZ³• 2ðÑßí›b†ï©œýÔ‹‘ÏSßëýwܤ²$.éŠ5«ý‹þ…ƒÐËŸ3$,*÷dQuЬëÇÒáç6Ï'x”¦ (v»Å^T…v©»U™{·.¼JøG‰ÊyXIPŒÔ ËöË|¹�ºÎäIωÛú”o_N÷€Ùãº"ûhÐä\ÝËG†ñÓ½ÍQ¦Q¸öÆ3™‘ô?ê ØÔa¢²Ùéƒt'Э»ÝÕðòbaNuœ{0$WLV›sªæèj&¢;qlñÆÐËqèÖÄgòfR�×BQη“q ÆÉ»ðE”uÏm r眅þ��8&ÜV¸ÌÉC^Å8±ÍóÞh¥Þh¡é5»Q=¶»<£alk$J~?XËp¢×î8 ûËÙDïTy„Æ}ZϺ ( ûòKÿŸ6Îù+Çá“67¹Íµ›µÙ5y²ÝdÛn37›³Ù¶m»Ím›­M›¾?½¿¼çóOÜsî¹ÏsÃ]Vxk‚¾s™ †'“Å·× YÌ>–Õn¢ë¬¡ã¼nó…%*Q½ûÈ—Òêik8[' c#‘¤w­�pÂy¡xu²†ñ-ÅRˆ¹ß9¹=ö3,¡@œ‹¨AÎß#Ù”ù +Ú€¦Ö>Ó’@"ZNŸÉ¶ �Å×Ú¬¦Nnÿ„¾™×¶â¬“ÿiÊŽ:Àº U�¶ßD$ç8¤�ôHbc°yq_ÕgŶ¼!)æd ˆÌ�Ç|Xš�î¸JØÖÚýYr‹cñÌkàú\n”<¬¡ŠÔÚc2®_¬….Í;±³TiKž ¸Sfaüߪýè˜ ²gSJ*Š5)*ûw0ÿƒ4Ïv«] MC~§àç] né¢T®öl_¬ìqÁ9Þ„Ñoux.ù4°œ^VÉ© 1el:æ~‘�M÷@·Œð4ô«Ô‡ƒ(ÒC†J:íù8»‹¿û$uø»ØÇf™ºéE ª´qY‡m «ÿŸ<>:¶Ê¹ÞÓº¢^à�=¯ò›ù€*yVsç?è#að’}1MJü¹q˜n�Õ!Õ)Ùt×)æQK™Å+‹˜m{ôxm™4¨­ÏÉ‚•O;៦ZmúXü¥nqÓŒšð§ú2_C&pW€ç}Pè®4Ú{Qx(!ÅwO%–Ç.<°ò… å´µ4z[a6“*pîìüaç´Ð>’ÑÉxƒõ'FÕG´£\`úœ?,${êy’;ý1߬­ÀU²o.&÷‰Ãä]>rˆ‡ËÆ7"kTÎ\»®ä�ŒÙaM›Þ6¤†B|ð™Q)µ)ãG®�•—7s¿¬!-¦ªÑ,ÓúåÕÙ<]äÍ"�²T/a|nüõm^꯻™Æ×î@¥¿V3þQ’ªÆ?Jitô®q’�ŠÒ¿zÍ-îŽÄ²ÿÂŽ ¥3²€+ëzšnÒÅ! Ûäåã°xï,v&ß7¨m•M̰.Šï‹r¦™ÅnÈPËVtfZ „V¡9½% ˜Í5¯«Q%§¦'¹ú÷ÙŽ¿§ ·¥ƒÛ I1ýzV‰F>.ê ° áÛAç_X�ÄЊËÉ™�+ çm”žRÑ×èU·¡p9÷•˜S4ýü¤0QÊë’ßÏ÷˜+�:ŠôŠX{E»æÖ蟘95ê2&„óåÍv“â 0R “Á2¦‹«Š·¶~�O­È-q�e¶SrÛ2؃è2¯:ä‚l0nˆ”¼ðåÇ#0.q—¼à…ÅuYÍÛwA‘§É� i½*çøôÛ@ý²HDh \ø«YwŒ­Ð3. ÐôŽÎ<%u0ÿáþH»4×1O›<å#0›N»h u«èÆÐƒÀûâÜó}û~v@¬óªO"·ÿ“‰³ÐrS£dßf@•Õ',uý'ÆÐª§ø²hr9½o¬Òs6g–‰†O^®üy9߯Å�ìÓÒŒõ/„ùD9y¬šÒ¾ÈùÐÛ¬*­t4á¡J�ì´1PÅjqávã)ƒíLÖÁ'pFHYÿ7Ívãw<9ºà<¶ÏÏk(V³x9Èçü£ѯm›¢^븲Pr�Òœ-ý^›-s׉Ù36…ý2¢œCq5ks³…Ïï[h2Ô;A´äÌ«6ÕÝŒ}Ø”�û³yëÕ}+;ÿt&÷´g1ž³!ìçòŠ9 (Æ.îM= Z#_c5óßX2ÿеÀšØ€Â©õ”<�ô)9ú‚ÁˆT]'2`°×Fo¸!SŸJùüÀg ±| Rs;Ú¡p¥‡Œ/‘ Õ<)²™gefeDß“ |«ç¨LïÚ#TлɥØ5K­åû¦c=l¹ štƒz/m.DhtÄ�Zp´ýÆ›ø%PµÕPâB� ïTc@Q~òc˰4X’ÚCa94˜2û³ÎÍV˜õû#ƒRÅÏ3à ^Þ�ÃïæÒlÂ]ÔE½T�ÜÕ;·Vó™6¹ÕCÑèš‚Ä�#*Û±[ÈËÏ—”wôáû•x> 3“�&½-#_ _E£‡[cm¦ß«ý¦µ™«èÝÃû]Hø“v^ô«¢]I!‚ ŽBaL¸¨e,~f°ãqéDÀeEz¦R¡…Ida1ò Ÿ* ,B­Àð—¯C.A~. sZªU7ßð‹{²PÑ�à§ãöa€ÂlJßø¯ºë¶óù–ùn¤ô•‡çwœGmW™V µ""ì;”“EZæžhø§l³�¢È ©¾Û'RŸÉŽYI=Ìoš]“½ö�<4¿˜0Ë«Zqë³5¯�{Öüu_¤12p¡äâ8�ýŸº|ù%©ØYÕ½HJÉžËÏqÅØÛý$þ6­Ð"T…œ1Ù#ÁúVú«¹Ðnç>ƒ•©ívwÌD7fiuS³ESéB~ ç}㫽s×T³—b,˜wÌxÄ?DðÎåŒRˆTWÍ`ý±H“Hˆ˜Æ"¸3å\X�Þ·]Ú˜%ÐÞô|¦špÝ«8´Yëd¤0Ð9±4¿\kø­‚�À‰g˜VsÃ_7ÚÄ'®‘‡«AÜìØƒ<%­VÒ/×uÉ>ëâÅ~Ç_ˆwQzõ*Ä Ò}žV—²�盉¦ým�MÎe ‹ˆ§·�\,z9ˆ“Eqækõ)Š4�ìD��Ø�î­9B¸‰vä^E­÷ÞÄ,pè?-=Eß0pJz+�o€ˆëÉ.´âlc`âéˆ�¹­Öœµ�‡ùÅþÂt}Ŭõ·¸Î…ï«#@‘;–~Ws�ÿïÛ„¯ž`¬FWQ÷Ëuq•Aè×ø­æ÷;sÀ{_É Œø”�ÆÍŽM­”zí§è8³}÷•ôæ!$m½õœ8SèϦä +›ø6 ЊÕw0»çñ•ÎRb¯p]ƒu©E¶¶ªt¿»9kDÕß2Ë&&£˜˜jˆ©èæg`ä–ñƒÏÿ]>Âæf¥dÆØµ¡EyœX©íc³*ù÷(,÷•ŠÌ�܉ô"Á’÷k!-,4þøãr‹ ²xª?Ôë»4–Ó'ˆa«w„ˤ�¶ö ,ûćÂFLä<Åïþ·Â>ã‰�£êÒ«"G´Gç|& ÂÒ–x+/Xc™œJwšÃ¡¡û5±)ðÛè)"Öl®õ±.§°(p’ÊŠÄ믅mä-\ú.ý¯ceÌ‚P®XÅe®q»“dkäSTF8õj'C]CÑMÅœªµ’–Ñ�gfŒ&QL×):§H“âÜ÷^ O©â”Ç€sTp³¾vÖÑù †Ö^•ŠÓ£½©!›œõ ¶¦Ù —"—>zÙ ÙšùïNoáE^POÛ†¾ S¤NßQø¦7~=Å¿VžÃ,½µžò¡0aãmgEñk�¼«¼ŠR¥Ï+„µ©Y�DoRo¿fŒ…€15‡²°QÀ3”#³n%fÓ‰mÉŠØ­z“»ñ*@ÔSBŸ¿YÃ’2Ûiºç&�‘��iDÝŸ‚#”"¯éòÒ½fäµ»üæJ „è�8VÁ€éXõÄ{›‡�q`&Fù"ÿöÚGx²e%¥ÓVka†èî�š<²i^:hÂÿhœžjþ8-#¸ïs•t@³Õ5q(в(@fY+ÿý)ß ÿ�CÕZsb;é7zëëv7Ò‘�ï9xe?‹�póûDH®3ˆ8:¨>çУ‹e ²}Z$÷²,5eÝD�ŒX`.~Bùâ‚ÛèÔuºžP°ÅgËd)0�œ:’S³1ŠÖS7Ùi 7 Ñ�À;±Ì·Ð‡›Æ õ,Pû£4:ÖiÑÙ m“c]¸®ìŒr8ÈäWƒ_Hp`W‡ª_Œ%(vñ G(qÔB}/¦š¯Ü;ÿÿ½kâ99ôDˆ°8T• ²�É@rÆ»ˆ­Ìõ:® SJd=ÚúŽî´ß7Î-ŸÈjžëO2.¯ _ÿ³Éi{@Êwá‡P%uŒtu5e¡‚_Ü%#o0“™iŒq‘�îUåa!‘�ö„F ôu ©ÊÄ”:GÕ¨þCR¹‚Y­ƒÝÉSô™ ËÔüK]1:Û(˜w CáÑKs‘å#mµæf¿ô8SåÒŒ²:ãJm+Á\§²¦Æ³¯þmzFÀ¥�u†‚BŒvÿ¢•ê­)ÿ¸éÀ>“d…Ur¡2mÓµd+/ý §“ðD¯/ol’ÁªS‚ÇbÊËd]©ìñ$3I �£EwÃÃႊœªë¹“èðÞÙps0B Á›R‘Ç2ÁWXM¥ó'Å$>ªí™z¾o6œô‡ûWéŸùÁz›À~R ƒ‚ß`ézø…·X™´Q/¥·-Ž/uÿ>žùvZ•ÍÇ×q¾®W}îU”‚ÍC¯UiÃÇÚP­ì1:*¸ßÄϾÔ\›‹4ò ø‘�m“†ó£ñs¸ÙÙ=׫%0½ã„¹-nƒ.JjAÊ÷û82 ÃÙºÝÅÒ“ÒO+$¿&ê¨w½^ò&B)Ôàç(‹O Œtï¯4¥ß øŸâj ‘BÙo�1>€±Ò 3(¾.S¶š‚Ý-û¼Z<ä3°ûRÃĈµ\í¢#twº€ØÙ¬x ÎÏb›$¸–bÃÉ@°D¹Æ&GÊæÙrES¿K{µARR’ê¦ïlˆ™ä—5sߥ±ýLêûF¾Tºo°í³™Æ•ßÀȲb1®= ©ä2Y4Ɇ˜ö(Ük‰óŠd>Ö¦©¬³]Ð} ÷"4rÌŸ¹ze@àÌʉa�¬´¾qý�,<× ÐrÜÆä1ý}[ýÞ†„!ö'Fc]ïGÉØa±n| Z@¢œæô¿uWI°ãIѺő²C¦óËñ†vZèEÿUSÙpÔË´,v~®�"òŠSX‹oñ�(�F|ç�+rä\y;÷Øì…™ž¶F¸]Â$þÃ4…|‰ *UºoŠY,ë¦üO<ðgγn0·€Ì&6ôqôœn—û§º’$o¾L¸)× ‚føŸe;I�âÝh¸œTd‘µû\ ¨)æœñ~ÜEëŠÃ?C@*Äêï`+Caë{@þÀþO¼ÍW5Ï;V�Ð¥ÀIk4%Â¥÷S�êBš!˜×=ÛÇÀBóÕ±”Pœï¯{ÕoÓ‡ÖdÈ×®©Éo¨K{î›о¢gÕZZ{ ö•¾ŸÇêë«Þˆá0 ¬uúE�êé��×K¶}sƒŒ`5'¡´Î¦ÔæÎ‰Òˆ6† ”újÜ•× _ðî¼(¸ÞA�h­ñKëf×|x}“QeY3ccz¾û“²HÚ÷Ç3Ó>îÙG²œ[!ŽfâÄ2v„úǽ!iÉVt14­¬:YA~·~~ OåÎe³]õß ©î\U|½�/ê@¤ÛµL ¡Íú|ÖTˆÏé­Ž.n-0.ŒìP÷Þ �\–š{@ ‰x”ã³°â;ß IZœCî?ïú6cËZÎ�rJýýG`^ÁöíØŒ SOÖ5�§¢®ÐŸSÏ]G�%(’Å9ùÍþ«m‘Dµ,v�u@›»ÆõÄX-")×ÑršB*–¤$|³Ô�«Éëvg¶1õ_ÿ±ITѽ-ôï«\ªgHîî�z�Ÿ¹‰‚3$}ã‡ÃêÃ55"u¹>žê†urûï 1èP0ËÁ"ÀyØÔ0ÛIu‚b²øC¥y)vçÕûš³o޲Ã7+a‰Yéá´}^Ý”Î`6DµbÍõ9ì.ôT=l¦³­­/7Wí<ï)»õéb7€,<°ó(ÖŸhV ¡ÑÈrvÏ%Ü2f9ÔR¯U÷� �fµ äVÉbð�…^°»IFV‚)h{¾¡]GQ—�Þk“ŽM6HË"üW„Þ‘?â'ûûS9¿6ʼnNAæ÷ûªS–1s6ïw.mׯÜÙ²?ÅŽç¿7Û _Ül\¢« \ÒJ"HbÍÄl‰(q¸€�F8Ÿåõ¼ª˜D’\†+�¾Lg®3s_!£vNýŠ=ô€Çzô;¨˜áE ‚›NQSšá£ÃuS2ìÒZ½`�„)&û¢³�娡«Wnu±¬9E©v¥§¸âgý³^0?ÐH¡°W “óìq TËÈ€ß%xÁèRXÍ»€¡MÛÃwEDU‘Ò�ÏÑ„^ô/9Îå çïå,ÄñûV×gFí÷|ˆž/ŠÜÅA�€;E§�ЯŸªfûíPþœM”Äx"U(Vɬn]?.9™Ów�EN ûWÉåõè…,3ŸIùS)¹ðº /hÎ�R¨„QÆšWh™Ún%-2tƒíº MBþõ7õ3l;fB¹6ÅUôuîñ½|péذa°øáà:Ç��H@àM§ÆSQ^üoá[ع"sëF"#Õ'x1>‡Â‡Bœ% 4ÕŸ‡$¿^qLlKŽøWø|£pò+â6c•HŸ·µ™gzp<ù;ê€ø&§ý­4ŸJî÷U„Ó‚ÝiòzÍCÁY©Õ­83HrÒ%;14ìÅDq�KîGÊ~øW𕆑(þƵ#Q¶Å®õcú ÄѬ”¯œí]óJÉüc£`oKî¿^+Uí��ÀÔ¤DüFþ‚—ÖLŠÆ¨”Î5çÒ†)ºº�è�Òmê Q¶m@ÝC˜•Õ•Î�$2Ñ2ÄãЇt¥‡ÿ5Ȭ(ÙàË«Wî»L,¢%¡)J˜- A†ØÌµÄãëÿjPn\VŠ6sf¯Øë6c}A�²a|ŒN=è�”‡H*+LXzï ¯ÌÇ‚ßRèÓN°¦r½nâþƒix endstream endobj 1657 0 obj << /Length1 3062 /Length2 35243 /Length3 0 /Length 36937 /Filter /FlateDecode >> stream xÚ´¸eTÕÛú6LHw7,º»‘îîîZ4,b! �Ò¡tK RRÒÒ) Ý )-Ýñ.÷>gë>ÿçë;Š×�×sþ怖R]‹UÂd ”¹€Y9Ù8„Ê*š g NVM ­§“…;€‹�ƒƒ™–VÊh¶¹H[€�B~°@Í ñ…Xpp"Óä€.@wˆÒ`éP‚-´}\�œ‹¿€:ÈÌjiáQ]lí]€Œ)�«�»½­øW nVÖ_‘~yK²-¬A^Žö k€"› @äÚ@.K �…“ dÐêt´d4µršj:êZŒl�ÀZž®® ÷ÿp‘ÒÒÖ‘cHK¨jË€º,9-í_ÿj] ümYªÚý¯<Ã_î*2ÚÚê2œì¿jp^Ý=ì¥ýntf€ßÔ ®6î ç¿ìÀ`W!vv///6[O0ÈÝ–ÍÕé/~Úvö/�»#òÓèü«1ž.Ö�v‚í€ø5€²½ÐÅøËIô·ÒÒJˆDþ‡¤à_1�þ6x�ÿJcgáñ—¯²ºº2ÀÙÂÞ t±p±‚‚-Àžó¿d�¿@kú¿ Ržîî¿r¨üWåþOšÿR—A*3vòõ·ðú߉Y¸xz¼þ£7ÿ.Û äâaïöø;"`cïüÅÞã×Ìì]þ’©H¨*ÈÊhi³*CÏ…UéŽ Øü—õ¯xÒÊB>§ €²¤2.ÖR ggkä_í“¶‡ô r÷aÿ¿‹íèòrñý(lì]¬m~õÞÚÓ•]ÇÅÞͨ ýsˆù·Ìp€n ·•û¯„íË/1ç/1¤þ¾® W€�…“ÐßÞù�ìëañ »{ý}ÿTü!sò¬í­À�U‡ä¿¢+¸Ø€‚‹!Lþ«úÏ0üuT!çÔäâä°Ú ³«‚À�•`øÿç¤ýO.YO''U g ÃÿééÿZ8Û;ùüÛôLô€¿Ø2¨‚Ü�-œþGgï!kï ´V·[ÙýÝÚ¿å ` ÈþK¸Ø:!cùK¤óëH9AvrÿØÿº¾¬œ<|ÿ£ƒ¬¥•£ ÐÃÀó·Òˆÿa éþ/¾v5y mæÿ»6ÙɸX�¬í]l\¼| ww dÈ.pñò|9!‹m ôþkYìl. 0Äàê ö؀ܑ ”�À.ñKô7â°KþFüv©ßHÀ.ý Bˆýƒø9첿'€]î7â°ËÿFÜv…߈À®øA¸(ýF.Ê¿„‹Êoá¢úA¸¨ýƒ \Ô#�ßÂEó7‚pÑú� \´#�ßÂE÷7‚pÑû� \ôÿA‚�솿ÄÒâÄÅ1µ°¶º!WÑ?bî_RgWÈ‘úuþ+åä‚ä´ð°²‡,‘“5ðwHˆµåo)ÏÒrt€`'  ø·œûù߇ð¤WVÿ ^H0+�dIÿ+ááù%qvþÍš“RÒ¼8 )Óáâ†dZXy‚Ë ‹ÈüWVNÞ_NÎÖvÈ q!{ÿ/d@6ôÂÖÆþw`î_ðÕïLœÜ�6N¿ ~¹ƒ<Ýÿq±ýc¿ rÂ]¬-�<þ0ƒ”ý›døv>®v@—?, 2û? ¤F‡? dÐŽ@H_�þ€�2œCNéß‘¹x ½qùŸB¹@î‰?| F ß!AÿRC wý­†$pµ€|Jÿµ¿òü%ý÷F@.'vÈòÙƒ~ϘÒ%W'Ï?úà ‘¸ýÞXH·Üku‚�Ò!GŒÖ2œ “�p”•'4wmÜvÌKpx¦&„8/Óç5—˜X=¥Žâx72#=ãOø”ñD(_Ž&šG±ðkÜ>œ5ÔGÏ×%&O¬0ñb\+ý4þu(®‰±«vŸCµAyíSŒîBôÃÔÛ‹E…§¼ì‡d?Þ»pÉÄøq(" ¼µÖ³ªmÍ[7º­ïsÝeù$óžO• âòd«º%n÷=Ä>Û?ÅðDéÌæÅå”lš8† ‘dŒßWw|¢yæV†(/­#ÔÄ É1°ìࢠÙL„ŒÁªô/›8u¸�fà£|ºøà)³5;uÀñEóæ:ó ÿ*«Õ´A M}ÿ)õ‹Cç™×‡B½W„|[g”%+{Ȱ•ß~&qÖºHqqQ¨Ídk4ài¡ì×�}ÎIr]’·å�QÎ_À>6�uÄúÉ�˜]dž>s!�×3Ýíá"Qø,’#šÝÛer \XÃ3Z¡pQuç g M¯Ȩ ³ø) r·W`œ�’iLZÎ6Î5»z¢~›=SG_úHÛ#{ë`ÎðÓ™µD´¡{¢ÊJœK�Ù•:Yeâöuãú¶ˆ|®c?¢uÅÚèC€HVz! ·Ç³§�”µ4N÷Q¢|Ñ7«>kÌóù· Ñï[I0‡³4ùÅÇ×Ppʦ*—¦°:åÜý�g3—¼UïìØÂ�HVœöt,ÝÃÚ2“2N#Y:ÒW�·%&‚¡�gOt…è‰g6¿£ÌZ¸äá'² 5¦ùßgš~=Ü4˜ú”¯†"¡ ÿòýmŒ€e'opU ñ½ ÃúÄ s¶Ít“ÓÖF £J{_¡AJªäþT"c°rÌÑ*™Kõw¹W%–{”,PâyXaU¼q cm®¥²…McÔ8Ì…,闤͌jóÊtFïõ*·qý ›†:røNâßÃ)|MWTIM(‡ä¾TÍxœ„Î3œ–ßc³…%!|èÖñ¢+Aîjªº\oصÓ&Öž :*þcë‘I€3TSaËVó$'ëU„½Ahì�k‘ô\ZÜ Ú| ®ØtÞA$Êg~)mâÊQ®…^U*Ø¢$ ·ÊíýŠöÅgƒ“„S¾Ÿ0³º;æ¾¥yÏ*Gk‹¡ílK+†ÜVjtÏ1(…>r>e¼ÿš°ø¾!ƒý,ˆMˆ�°}‚x1SÞ»“š¡�#lÎ19 ç;Ì3ìñ“®‡ÆÊ~¼1ŒûÀ´çOa’oºü§zwE­•rrú“»0<þ–ñïΔCöZ*ªKºbÕMbfè£Çz‹ÍˆYµ|…ÉwKÙÆ9~<)ùÕ«—õš}ÅIë¯ù`6ó ~ ?#½pýº6= •A~ˆˆ§¦«:™^«�ZÎzÌ•.H ‰¼Å™‘E§äÍy(˜Æ‚¶Ýq÷‰ELKæ©8¶ªÃO¥…ˆÝeMÁ!îe_¿t…w—mþöadö÷zEX€�°³�ãñ8¡e’M5ï…Ò[{‘‹Àý�Û|aVËèô»B‹hÉ¿ÛÔ_Ë,¿(l�t¬½s+r]ˆ/�u*˜¾CvZ÷|‹Ê6Pl¤VÓ;�ÿHaºüþž¯†ñ”Íi4ñ½s@J�¤ØT€¾³ÄW¥:‹ô–O¡î£ö‡ Ÿ°…°ñü×õmñðvï`iÂÙçзž¯RÞ•ƒéé Ô¢Þ¡æR–j*h&î¬IÁT5¶º p¿¸Îw#çŠÂ6ê¬/KêÕå©÷šjåçÚÆ-jnú¢”X3,…zº$ØÑç,¹tê9½!­ä|Éð��¬¼Ýê'ªu�«†ýÎãÙSþ¿íÚvíÜó<6£;ßÇ<¢?²ì Ü6UÚXžÕöh*­ž¹Y;Å"÷±=ý5»0Îc¤óS1«—{ösL™- ž‰yVˆt(º5þköÃÚ u�Á{«áè×C_¾fn&Õ—ße”‡m‡6+Ò¬ ½\Rñ¡É_9â 5_ÀáyI�}û¤÷3ƒ¨áÖ¦‹ú’¤ÔÌ]S¡ï4a3È»>æ³å˲==—ÔDœ¢H)R‹D<±_-Ï—w¾|´ò¢P|¥=øØS̽¥&ñ•îZc¹Âï0þ¨ÊgÄ�xî†BJ.õ­úüës,œ¹/*Ú®¤ýÅŠ}ûaN�„¾~rmâc„[ãO í”ðÉ-ï;ëg^j5ïýaœ6Awæ}õU5âäɃ5 é“�_œ]/üÖ‚Žw}_Y f¤2§–¶|7ò„�É‹¬Ûš.+†› &ì7÷[Ð.ãßJõÒp<ÌŠÜÀV¨ž`¬ñ?v-wËÈFäê¾ïN;p$Ö3@W½N[l!–R,ûzSÂO}½}­~²˜íXQT¸­ÌùÊø{,…Ÿ×,qÎ:¼õÅœ�&Œh ±2SÔ`Ù&ó¦­;´oÌ)½L–�òÑz¤×eŸ1"<¸­XOìòˆÓš§è˜†&ª&YØJÙVÒ LˆQlÕTŽ­ÃUÓD0�îÊ ]ýìP8åØ,­$6ÊWާ¦U¶»‰ü¨�U�4*„G^ÚòiúÕÆîùeWWÈì�嘩¤Žæ#Ý _?®ôlÒØÜÞœýÈWe.xBä‰díîÿ¸x[ú6ŽÐ¿ cHS"wi£ êКʮŽÄÕü�¾Àxƒ„£©ã ˆ²u;�‚—ÿJ¹YcHÓHù½è.Ç¥QÌ>M÷”È?]~(tIãâ�z“ÂèÌñýwè¶xZ\¿ÒÑ ¿uš¨½A® jR˾s~ÔJdñhŽ?ë¡�“•êÅÈ̲¯ÑÚlIÞ”;Ö…e!}˜Ä‰Ý¼¶I)ŒÝç¤idÒ3RabÖú<³×q#ò{¥@E(WKq«(›JÌ¥fÞ¦`¦C;¡Gø³Z¢’±— ó„4ìíûg~²7¯¥s¸øú}X¥õ•ôä?±Ê¥.¨t)¦í±S5Ý?ËÑ|h]d_Ñ‘ïàÁIK¬V;¡ôˆÕqž×føoŠd3Ðjà¯Âð¸ÊÛÅ„Ã5Òñ|ë÷«?±�ͶZ!¦‹b4àx¦ÝÚûòÜßkžlçF1Á6EÜ©e½ž&ÐÙk/­È€×ZУìFa^±|gùLßÔx‚)éÑßR»òâS)’ÿŽÒÛî�xk.¥Í7 ©XùýB¼i Wä>¼‹�¸Ævöo+Ç,è�ø¥¯Hæï»r7æøKʪ“ö/¦Y®>,F “ 9­ í´^ñ®Í š¯ˆsêøˆL%ð&vŒô!NïRÄ,Ù›øÛÎQmK8¬H›ØtÁhLI�ƒŸÞç\¡ ‚Q-ë§aA)&OÚS"~šþ¶ÁP{×𥖳þ°tÊЧq–`L²¹|S\âöµ»3="ÖÉ«n%ÏX²ˆö÷ŽÒw�ÍW£cê(¼Ž“„¨Õï«áLm0_èÇU½ùÌ,ÕË»q©éoíså%èP ÐÅf¹p~~l|¼åÃ|{‘å~pWÚ%0IWêM–·bÓ­¬%Þ7rÿ<ç|O«£û,|¾Œ%Ž4zYC/úø!DÏÈšî;&YÂé+ΰ‘ð;­ÄEôôÃ÷±{¨Ë;îhÅžŒæPfš¥Cš¨8k‹ªd)%^Ã�euŠYë!¡k¨ ;R ßëȤu[5ãʰrmYö2È›z©ú$õú�!!2ïò[îû ¸ƒ˜“úK} ñúÏ=8•–u©¯ƒ$¾z¿�¿™×ŒMpþ\‡0 ¹|‘M‹©8SÐMzÍ]äHՓס³ vaØ•w€KKA5Ž™k¿žÁî'¡­ž´è噘WÛBh’�ÕBÖ—¯ö NÁü¡}K£äYMhduß%r¯{ß~*ó¢aèýœ‡2zwá ¬Ç:i?ì.2~{ÚžåÇ€Cö.¨S:z#iX«5ºT†Ož�l Yþ´ÆÆWj Ç!Ø£^”¢†‡-ï.˜�a_§ŸvW¬J BíÉÚ€Ç Ã cå¢Okœ}óLñ¬Ä´4PO7K”ûËߎ�3ï¹îô®Ò^S)?VœN$b iVào~-…]±(¸•-õ%ݧÔ_s÷Y`VX9:BQô¡ÁÁñW2XÆÞÓãºI¤XI¤±¤–“ð~Fñí›PÇþÞ¶ž,e”ž6V¦Í¦8½µ¤y!o^12ð³4´Àäð³ŽaõˆËhãáÕ�^øcøkn·u‚“ë œ�Ck¾V{„7¬–ýl·™3aï õmí_­L6®>’ÉJ©"ïMuSÇ£½40À)"�p.³x¿i»Â¯ëo >BºHn ¦²e°hÛß@tS‹Ðà„å$yü­oŽanž·òeN×g”Q3)ß ƒ—$_ŽÊôëSÏ_y‰ü8#©ˆe ß}ñ]§Õ õfï{Ùõ0Ú“æ¡Jۼ̨9ô štõÒâbtð«Âì¤8QN4c­Ì?/ª�3ä¡þ,”£ÎiÍ7>Ùš+rõrŠ—(76,rµËï¢ÝÈù«Y@¨±ð�iÅ�IHH^ ¹³Ú?à|ßù�ð8ÏÇ™£<ù2‰× QÖG9¿Ø!Izé$ñêŒ.);)*Hk·OL¹.‚‡ó9/y-á;Å]NmËû�Û™òàh¶ñ)!õm¨PQ,w)‚ëS&pŸgKþØfßÑrá$çª49nå¬ÓKc¶<ßÍ tMo•dcU‰YÄ›äx§rè´ise6!~©S»µm¸ÓÝrýÓ¹"Ýna·ž¨•F§²�`Äå·Të[p¥k*l““tXö|þ(ynðŠ[¾—ßK‰)¡ÝÚö¯ip‡‘òŒ¢£)Õ ÅÆy›X¨û_ŒwòôqŠ© Ò¬¡°<7VrK ±ò¨Bj)Õçw|…`µhInû¥„8šc5¹'Ž»0@ ÏY|Â>ú�0Tø*Cȼ֣“pèòK·ÈùØ.¦ù­Üâ~º•Vâd %š'÷]àeTœ·ÿUv‚¢g¸<ïé·w\Žú) Ñ'Sõ0¦ |®±B��ÍU—#ç{€So’¢Q!ö<ÁùYðZ§’oˆ°ùÈw*O\$g|kØx5 X5Vs+póOÅU'­Ž‰�«Ø>eT"€IãϳJæ,Vg¤yÜ|óA»�=µQ€x‰o t":ø›B'ü·ÊŽ%ž~Ùêöh5‘p3•Qâõ=ütv» Š6ÎÔ¯>…gy®žëVÓeÏ:T×dOg\ˆÐì¾/înùF[ÄǵòÚûÚU,ЉbPïÕ¬Vñ˜c½.�uuË›"5µ�Æ®pûB㇆SåÛY0Œ9µ­ˆ½æÕ:U]ª3z÷nïµöiH QÙÙ +xë“E?¤ ^Á×^»¶äƒG—v_lŠ(^ 5éá(ÌÝІ Ò7p,pU/³ ÐÍb{Ø¡£ŽÐ„ÈÀêApqiºÓ¿ÑsyÑ{9_[™=Ò—¢�Íg&ÔoNïÞ`2) ò–úøiší�[kx£ÉG0¿ª€ŒIÞÊ?^ÊkN¾ ä÷†Çö„>¢¦u3i8x¾+^½l!îçà‰Ê6Æ‘§ âk1Müùr^× ³¶C&`§¿Z[kB³Òw“gf±†x²6ó­Øñ…õŠ—+ç÷ö(Xù°H$Â(é1¨Ô•î„�§-Mt¸E˜–±NlèM«Dé¯Ö›¢ØY[B9 ›8«Ê¨méûÅö½®æ˜Îœè®{ÄÈ[MYñàõ/üæèÓ =ä�˜âæ¥× �(CÌ…”¶d”KhŸ=/kóð›7MUáÉÒ1rÐ;Û–€ûã-ëj%ûÕ Fo�嵤}Üq;ݳŒH—Jf™Â7CãdUºv ÄàK•¯©Ù `c< TY–ö²‹›¶*ý@–&ãÂè”�Âg«/•Ør˜#eû3]õ9“ÃS=h§ »+ÃXMû�mǦn�héX›µJªäÌ–—å2lP”·^[½Eþf-�¦urú—›f1ižèNYµßô¹8’…1ŒÑ£¿ì9À!×ñ€$†©-ý󒚆Aâ€?À¡Ï ŸWíA°A½ïržqÃ_‹}jêâ¥yÃÑ;Ñz.`R¨þÕã.8)ì"XJžð0keRÅvuª¯òrÒ¾-(ÝøEÔÜ;‘S6SiæôÒ=ù‡tÑŒÉÀ$¾•¯4[g,¦UP]æW¥…‡»­’@°[ÞiÁa º·ðk]Iµ”_æ­e ÷¨ z‡}QMA�ÂR¾%†Ù%ϯ¼ìP”Sh¬Ç³ÊÒ°é°�÷s[eÊ„äL; \ý�26wÂ^ÖŒ:dN�¿²6QF-»ö‰[UÏá#Ƹ$|%€éîá¤çõ©HDÂ÷áÁ®ZÁ#"[!qûºyÐ$Qã.sùÚlCewQ¦ô‘Gó�à™3Ož¸ºæ*µw(€_–k&5ÝàöÔÅ®»=‚‘b½ÄrÕsÀý‹Kè@ì#.ÏØa�ˆÄˆÆáÁèjîçoQ¾s&ŒòªÃûé+xñÛÚOé—‚ÆÉ½^»¾ÖÆoÝÎeóÜhâé)6ãêšhJcl-jY¶–_ùÆ«ó¬:À˜ÎÖLF·½µÄ÷ç@âÓ) žvºåTî™Û«†2©ª"—ÚS‡3uÎúð6Ž£\§×íÇ>ÿG ùåYÏê~¯| w|¤|Ø=¤™ph޼ñØàÞ}Ÿºtt·éc¹Ø£'"R1-äÒ"Yé°ˆX±iphÊ&aÈI>®Æ�b1; /e�¡œ•wš&:„#còüÖÜtùbtËô^¶ôþ¡*3ÊDnfåéÚnòãò�8æe„±yð{jk�ôcÊ¢ìê)Àüé‚úCÂûש(+Ö1a 6{1Å…ÇÅ©�úö¤r5Ù›š·º� ¾íÂí„ èZœ$Ç¢Ÿ£JÔŠŽrÛ›/;Q'ö\z`¢WøLV{ûN‡ø‚¡`l›¬]ãÛŒŸÐ}I¶µu£^q` ŠŽÓ¢]ç9&½ïjxsFq�zu<µ?˜:´�ÞµГ!Ú¡â×úÒ¬)¡ù¹±àØ"‚ÐC‡ $»iߥ&‡G‰ ‚·†x¦™’¢<<¤*¾sÍxÖÌÍ¿>Mµî„¢DÇ÷ E80!pi™=ÌÄŽA)�SÒâ3:›>¡³•l<º¬˜bñÁ-à¾hÆ7ÈÕŸ83êS½znõAäq‘J¸éC}ñÀäc~9l¢QÜ»%Uô‰)Òá‡ñOÆ«íÆÁ»ŒG‡g)Ǩ“çË×Ë*þ²ä#´ÞÁir{PÎ3+¬rU™ð~8 �¤\û1£gšõnŽFΊý2”�dï뛄ìOw?â³íÜκ(˜|óíº´î/P-FçÓ –\Ù?Nˆô ÓðRà‡fÍsbÀ4/£·ÔE¦¹«Z$ê§çt‡†ÐlÚßR [k·á!²^¶˜a ׺ÿÀæƒR,ú)À,,b¢IY'óšMÄšä>ŸÉz ¹ÿ4‹æÝvO¬A9Ã!à *q+/ȦqdmošÿÒŒ G¨žühÞ^mXª£À }-žãŠ‹Ðþl›¾,µDÕ¯åÊàœ¾1U##:G-ÎÖ­"{Ë’¡%;ܸ:¹'/døY_o«évÖÞôœ«ýeyî¶FÑ'É•.îÐgfϤ^ºKê.u0Çóᢊf�¾N¥ä¹B|ÅiÇIV}÷“E«û~@Odotã…XÀõÙFï‘WkÓ4ž6Eݳ³"šs|ºßûüÃí+0á0µäƒqFšÐÖÙr.±L>ܼ°Àh)üŒó·ŽÀ'ÔÎtf\ªDmƒ§¹þ(F­ýõà@é3˜L%�W¹VØÌ3+çÜdõØ‘ n‡‰ô±Ëvª÷Ê: Äù¶œj&šE'b™ÐBêÖ€Ö®à˃&Z�苨P+` å"¼ŽfÑIš« €ÜGÉiÃ^Øiœ¨76Aw >½¡2œ¥=d bQ'»8òò…CÄçz@ªë6«‡då¸Ú,=õZGš¢ø6—N8j~xܨצâGÌô/}¡¾Ù¡ì0â;s'À<1m,zP5ÎO˜~yÐõ¸Ÿ8ùþöæªÑv×{ĬՂ2ˆg€òò§«ÊÇ+¨¤^^ݽ–:‚,{²‡öà+I¥‡¯ô}‹ËšcR°Ïú‡-Cþ\¾Ìмqòpuì³C—ÕLjÕ$ûûï˲xÆáÕ ±…›JØ?æÌ²NCQÕÌý‘¶M â‹§Zï¶^†Ë‰eÇÀÉ(ŒO¹öÅh <¨ô§O𬭠x‰Jjr}Ëä'_·Íî4X{¸XõQàŠ*FÜÖ¾SÒ$�_¹�bÏãº(SâEcþ‚¢›ž8Þtb)†N±Ž1õ¥3¸®Õ×À±ÉšùSë2? PvG+ÐËq _ÓW쬖T*ý§°Jy©[.Ìç�ën0ù7 ´ô‹Îʳ1…÷¤;Røë;ªé <§Ñ76ýüIyp›_&ö»?±&Â5ï’9›B‘|˜—9€}FÔ˜.æ0•�×4™rU˜;º¨#€Žl�§Š½¥5­¿&ºÍ�IÅðCƒó¦Î¤Å‘M.x‹ \T¦Mm¨wr™û�8ª¸ê‹Z¿8ZEÑ{ó¶àämá–¡šq¨3ÏO•Cž3!É�uéà7uåJM¦nçq™2ež¾]N}p/`9i'K¢)˜¾Oä‚¥¯’ù¥Hˆé%963,:•ÚSGôÉã«R}m|¢§¡˜Üv†"å4Ú•ý¸°tÇ5�¤Xn}Æàüz‚“Ûz ›‘=t¤³2`¿Ç£µQ¤ÀÒ ŸäÕ#‰½�·l‘}�†ÁÒ’LJ0Î#HéŠU˜ˆ3ŒÔ¸ù¥=c¸"JŒ’=:àA%òáÅàê,«ŠÔÇÕ3yÜ,q× ô%ÄȤnÎS ·.݃³Ép¼f•€g2çƒÍo>~Iþøa‰{§cW8�&°r ³/ak2ù8 i×&ŒÀº`@ï<’Â<éB(n+>ŽôÝ•DKàâhQ† ‹û·‚;M>ÚÑ)̈§ïÁÙb8ÖjÑýKb¢Ú «"©®Sœ±óé†÷$¦r�Þ£m{—‚e-¹V4Ú÷vµ3ËŸƒR0ÁÉâG$LÆêÏlZl•ž�ƒ™¥Å škò ¬‹9k•Ž�²¦� J¸rÕs®Rt†>c;5Ø€)x³€dòB’1Ø(.ûèÄD£8©Tœ�&�l÷ Zï‚;>{|$ø¼DÁSoê!ÿÓ/lHn:�A ìÒv§ë¡²,©Á÷½?$DSµ8ÅÇ©ü}=r�ó„[‡’º¡?sDå÷ÅE~2 §Î7KÂUqÜ-Ðïô/)�˜Qˆýl{žŠØÔ¨öJ9>Æ©ñv…GGeÖ‡õ'¸Rî½_ÿš¦¾Tg˜èáH¯j=EÆc<,:þpÚvdns“ãW$…ˆÑŸžú1ƒÌÉ?Ó2’p‘·Å°AâEàjr(?ª‰ìÃ.!÷Ûk—ŽÛp�ÊàU•*‰ß°HÀ�4vÏ»óÇÐFm—\sºkß¶ÚWRß ï?|h×í¼üçÊ.mIÎ|ëà9Н6eëéÀjiŸ#.l›ùŠÇyi‚wë%ÿã É3µRÿ/$ M»mïk„A°e£'ŠÞñORËR�bŠI0>q!C a_Æ¨ÞØÃ>�åÄ{ª“VµÂränoÀ‘­§}¿ì>õ&~Õú!cKœ¢oò±ðG€Œ5y“Þ¦×kØ«rìkbòÁ]Z« åzçšqâP ÛlÖ|o“°kõ×O�"'½npT ù†«ÌD1 ³%ºË[ïÇ:t�€ŠI 3î{Éã+»ˆ8.‹¹�›d†›Ç�¼¯§yš:ÛɯÐrWÛ¢bžbïr¡&`áºÉoÅÑQ�*¹iîþJrfºä,l\t~ˆóQo g¯…Œd/Â̺ ©n¤m6Û£ÕKKX¢Ått£z]‰Òv–éšø€Kn•'" À.ïËZÑM…uŽTò,· I{ùA® RcZÚ¢S߯ µP³‘ˆˆý•ˆþ놂—,v„cSCû!NiJ*0W ù#Z¼Å’ƒéZu–´PZ\Å0 ÎìÊ=PúÖ6b㟌~üÈuàYè9ÒãADÑ[ç2zí³yF‹ O˜­ó2Ïr�XƒûŽcd0.H’Ã;Ì|Ê»Oˆ�²+“ù¥�üÐM: “$3|žäM4Íž³ ¾¾XZ‹§B&bpê¯ñ šÛ”°/µàÞIꮕÕî5Uêü@'tºûO™ôgòéäUxP�ò¼¥{(¦jéúŠÃ>úVk‘ãôí±\ÝHå †|—Oø±ÎÒâòÑ?†îe_Õ8ÀŽÁ†ªÖÃDÊ ä&£YßšP±r#a÷ ÙƒGïT™º^iÖÙ¥sÀd`³%KŒ0ò‘‚B œ&ß*£R½ª×9ö»&d%›#F X1h4ïiÊ ðÖƒWꙈzß”ê‹JÐ3h^Ø �šØpºùCm¦GN‹ç3ì˜f]‚葹WÖ^á\Cg”m]˜÷c&®™+¦yOD™«y•ý©t(�ýf䢖I§Ù©é²‡Íï–¾Â> ðª«^¤”4Ìäõ]1ܳ\]˜£•­÷ʳ¨*ÖNêmˆ2[øE>U}h£†›N•-TÍÈÙ`Ï0 ŠPÅÖRÀ‘Û¼¸Åà)ÍØ/JõBž@hù¾¯îí„vü¼Á,Ùéß]$VÞãȼ K¤iס€š£˜Qz ÂTpÖÇV\¢XBKã^�i®×‹è¤²¬KwƒBÿ†\ùp %ýI¡•ç|·8?háp'/˜ÞÄ›ß,Ü»ÌÊ`÷“ELÇðeúê¶ƹ rõLVX k_Í£+êÂà hIÄ5hÙO ‡¡?F’)\v›‹ýpòô9|\ƒä¥E<†%ÎGyÆŸú³¬W½£ºúó«Ûú3.x8GqŠ}Z»…’¤d ‡?êÉ¿*¿ý”ö]Ž CmË ñ¤Èl¯ò-ç^Ãxí>¶àS¸´yÙ;¥áGÓÚën»zE®%“‡ï~³u¡2/8Æ#Àˆ6NX]«YCX½¸æ} P׎Å@… Ž¢[¹cw:cTwޘܭÚüÈ×[i*,COzh¼=·éÛKo�xþ-ÎQútêìÞ!U/XLN&áÅ2/AUçQ3ç6>�ò¦¿ý ó7æX²´µfrÈbgéNöð"TYW©Ÿ ªaÉéŽP3ßrª‡.¼m©¹Nùê̈ô>°¶çˆ-½' ëb�ƒ�ìë»ê‰Á +CSÉè:Qš]Ù+(…Øõ°¦ó›3 ù�Ápì.÷DíÓÊ¡ëËdt]Š5Ñ®]n3ùÃkòö` àÖçù”› áäîo«à×®NxTņ0»WBËF×ð1k—§HñÔžgÔîÙ2o0Çúj•Þå‹Ó¦hX›^ f3p�¦u{#Î- ½Ãp‹ v›%Õ7§‹ ži<¬ÉKnðŒ;4Ef §²ÊúÆ|r�=ïy6 Ö&츛 äò4�5»OlÕkYÃ$JD™[óCX¡©Ã˜™F/²»Œ £[7fñ\¤¢åžô“M6K‰è|ÂÌÉ}GF9ÅO "¤�!9_fYe ãÒµ à S"ÔãÊ9|ly }ðja¡TôœÙOlF…ò…Å{ÿS�ó…Ë�êì#I)z Œ5ã…;X›pŽ»ÉÒצGáCÂj¶Ã_ìŠîìzóä¹ß¼M1…‘ðŽ�¸xc»Þ÷ª"\R´ß§z1å§Æ»ÎʆNæÀÅ/ë.�;Ë ´‚å¥?î“þ¿�£Ml[ÏüxÎ$Ýᔽ? ç¡þ2ò…¿ÿm@´ Ü#zU ]GçÚ#{ý”7E1ê9°„DšÏˆ‹Œ›‘T4û™zJè*äe¿ÝrãÜOÔhÁ\>¹†¬uz9éÃfe8Ä®‡&(MJ¶IÙãÞôµÕÓk)/n}ÑRët ÚðpkTä@H.9h¦Yhñô�é®3Æ‘D92[æOÈ.f ÓzC_ÿdO²®M¼¹£´bn¼uŒ%¤bwGüâ"½?NH!:€¥>ZЏ¥Ã�NK8§Bд­VÍ(µÂ<{Ë>gûS�ÅxÜ�nðŸl“W5NíYÓø„d¶û†}AÓ}þ$Âg#8/¥y6„–”xÍü� a�¡ºRž�ȸñRÒ ¯ÎÕ8([”ã»u Ö¿ƒ/çvˆÅQ–'L+;V<5…מ1Â"ô,Ó©J4ìÔ{á$7Ñ4=Rq˜Çª¡•^KE}Ñæˆš@X jõÀ“qæÓÒ€—y¶Á�²ø#œµü)ËÄ¥V¢üÌÌ—ýÔpÿµçuî+µjY2Š•ð—°¢G+ÂXqÏNhÛ­šøÍCÁ9,#ñœµ§ Ï'd6jÎSÏPø÷Ä� 5)\•ÞÑ b�ë›îxBBŒ'ƒªC{Ô3þ†¡r§`°¼/µF0Åýp/Ÿë7ã ËV0ËmJ¶ÏhTû¨' ú!Š>âÕ=_ͧ€ëö"�r'û-ÝXU ˜Ü‘Ž�Í_oiRüŽ÷®Ì ®É, Xœo<¤d†³h/’ø‰qÔà é-{6ףةŸî‚‰Îk<»ð‡d¨;é#Þøµ\~Ž_F/„–TM;E²[…jníåÌ\WñžmóÂÓ+Õ\én+¨a:ß$�ezsÊ£ü”C.U¸3‘¼J&¼‚º"Å¥ xöFiÕHŸò;Ø1ŒHå¼(æí<’âë:|ŸG·ç\ ªG¿‘–áz•½š™²DTŸ¥}òè4—uÚ÷ß gÀ�Ü¿CYUÙÑ‘LÌ)àÎcõ�”âÉŠ­Ík�eèêCèké½ËÆ“ék\ÏÀ 'ç§êS²ÍpdnŠyYFe�›ÄCB8Lœ¥Ÿ¸E=:M †yÖ)² X 2¾±å yaE4{§¦Ç�†Fxưa=Î qžÂæ2Ì.åµþ½Ò†£‹½ê>ôzï Î=dú6r€ųܖ–H‰ÓB’5,�­½‘P²Ý¨³U´mãGŸ !ª‡§ÓhU¹hŠ$ ®ˆ{×K0ØǸc€5¤´Ëœ�eU]dªpYrÓ/¿¥Æ··=«“Hu€Ÿ¬H-ÕÜQM _"(«;bökž6 öô{ˆŸmi°Bc.¢Ž D{ñÞO“»{dˆõ›0q^wU.Δٛ�=,ñ]Õ¢h$‹¸ãU´}˜�‹éä2Žà…£ž�saÔö;Å�8¯ˆzœ“¸¾sHÈs¾¤_·ÆŽö³«íÑE^çZEÀ3ï vÝN!?¯† ¯ò$Ɉ-ÌXåŠÐìô’¬ ~¶ˆB;Á€—د`v¶.y‡~rz—5ŰÈüIâ«ûIaˆ�Êê_L²ÏÉÓºZ…Ÿ8®»Ò ´c?±èO:s÷>“Üüa<‚Ãz]$F¨·$d1ã½5­*ÛTËyfoùs˜Ü’|²ÄÄfm �é;(³#dÌîæ¥¸Ú(°$»<‚ê8IÄ”þU>µq/Äã¯ÄúôC��T”�5©BrB‹w[zOÛé•ù.Ër‘±­.5¬<7nÃ'sß�F13ª,?µ˜±N]”[�RcŸ3ãiUÚDµöeІµ£�ÌÂt¨Y GU»G£å§ó:¾Ñ¯!iòºS˜°î;Þãß…2Y~±ñ‘Ðï ICô_£{ÇØ`Ã}Æ?'ê¿¡-€,ѵá=ãŠñ‚uÂ_ïÆžHöDަ�9‹F‰”ÉÏ0vMÝ74ܼ@zÉH»�WI§]öêÄ=¼Ñ˜d­Éc¢©Ö‘†–?—à~vÙv2P�={Ÿƒu”u°*Õ—Ë.(}�5ÜìQð>Æ>_­ßMõÇÈþ€sÆÎòÎRB¶¿çØ÷ar¾ÿC…áµî§Ç7Ÿˆ¶å^Jí}]%¥ˆ�Y„=�/¾Aõ°ö#ô}̪^¹Édª|Û¾ùœû1•™g(AVÜKŸÿænq|Æ®ÚQl«f›,ͶÁ>yÆ?¾-ïiYܫǓdçB§>¦^s~ÿÓ˜Õg>ù¶¦4‚+ÁüÙs(²’F=½l¼ÊHÒQ³=.ybô­Ér÷!¥ïá¹çC颱ÛÀû¡5Ù…˜ˆÂýÕ9]‘áöÔÜÐ÷5Ás?b¥W«N®%ɇH¨…áü„Éz�]%ºPj,ñ Œ&’„}´úQÍà’y›ôL›ªßé»ÃÚf¦©âÌÇŸ[­Ì5%/ÛZ²Ñ ‘j>ò(^ëE‚„õ�QpU¹èÄ4ÂÛâÒ¤¶p%‚¦µ<×$*Íê3ªüöeÔ]¡ž¾­¨Œÿô´Å4èOYV,šÿ@^)Lá. £¡ ¹6.=m±¢¯)Ì¢%Ç4·•ß`£2¨p[ìh‘_Ԣτj”î¸p‰ìßX‰‹üÙÖa^ÿ!TUáwÒ€Ýö«…^®Z~çøC“®©¢ |T�£�ofr¹ÐÂDNûu]‰FÒü•™†ŒO߈Xü©9fͰcåjåI<Ú“¢¿0ya{$LÀY”ÆuzÚ#E©ÿˆQW·PL]tqæt+Éb•´NB�/>¸š˜í�.…VŠô L� 2KüÉÖh־ؤ>äÊ£3Åxõ|eÞ§ØÌÙà|©Oó]s/Âd›·„”u£òõ5ãj§æç-{œ�·gçí@t¶aÛÁK‹xZ=ècd (»-ÎI³|•)¼*ÌG!÷‘•�Ýï™7§:6Œª„ÔùdeýèS�E[µÒ¸ïqÓ0æ?±­(Ž+Ú‚}tá%Åx“�\8`¬A£ÐÑÍ•šmßf9bgÙÔÖ†1’‚C)ëŽÝ�lÈö%SÁEÉ箥\É^31Rúo‹—çâÛk'½K}_:–ióü,<&‰|Ÿh?E×ÚìÏoÊ�,¨˜K6©—ŸZfÓG?¨³ýžeNÄð°9¿æ[ÛEFÐ ðþ-”*ʰ¾}y×´eá7÷2ÞCÖ)”œDKôo‚.ÒÅ6¾¯§øuR4U¨zô?ó0¿VÀßÙYªÆf®{}¼·ÉÛrdvÖ!ù±d¸Ñ ²Êåâ¶6ZÐîõAT‚jºÐò8kye(&Ô†ÂìSÉáå-ki-aëÌ��ȇÆÚžx9 Jê¼}ùÛX<ŽBƒÞ [üÌ|~MÑϘaÅNB#ç¯åœ;þ�=¢©ž_ç}&bæšt�ÖS�$6âr¹Ÿú�.óôDvìÝ/å(GÀx¹Ep}Æ×A¯}q§ áºÜšêøâjKe‹zWB8p¨ZVo ¥|çá…ß·ÛXçxf ²´ãëo·æVP(�¡÷-’ͱ‡"&^ãºG­( DDüÈ,ý €¨]|¶äõâŽØ´<ôÔÚ¡Z lèkQ$Ù 3–ZHÌ哞;­¨#¥þ¼#½¶¿((Y�q@´µÜÕJÖZël}~ ™��£Ý9ýÜ’�$|ÖMµ2>‘K�³s¼Ö!ôºRF[<.ã­ã½yUw“•¸Žè}tÓytèÖ 3áÁ¹„2Ì;ô¡®ô‘õÅýœ25¦¢w}S›PŠvÙŒ&Ÿé gÓq&ì�äñTŸJ�ì ­Wú—k¨­™Â¥ùØ¡¡Õ-l5«‘"‡bU8•Ï|Å1ŸÍw~æ4-Õ+]*9†¼Güª’Ù¹9¢kÝ�¯©ˆ÷è\ú&´'>Í"•ûu"èœTÉ{ÄMQÌÄåtîÄêƒD:ÇC¢ßjïÇ%0!û ͱœ7,ÓÎZªåw,m²ôNú´~”Ó*T€vÕSÁݨ4u·àmvmõ�B�d5ú*Ði-À`Ö+‹'lÌ&D•š h@†~>½pú!.¦æh7àv5z¸¥ôY6k›Mß»– Áº ŒÒ‚ïið�q²Dpã1I &î�b~ª·œïPÖ Œ1[ݶ]÷ަ}V)§œ¾¼îÝlT»6õZ§ØžAÆL=J ’'8®n‹ŽÈF0±ÒŶ â¹¾#Ьìkôú™ìÀäl[fJÿЃ¿Ò‚€úáB—�‹ y™G”™ˆ3\J³!ã%?É1ô"1p&­–qj,‚L~<ÿÕÖÏ„�´3xŠ@1Bc^¿ú[¢Ã‚~ç=i¦’0û‚uæ»æÝ¾'Oc弟Îl|7H¥þêÖÇ„À!œrí ´kŸ6B©ãJÔÌßÈë˜M  ²k´¨ú¦Ý´¦÷�”Vþ3»šÁµÑÛr4„ØpRš�Ú²ÌLÒZœÐ­š ªd‡{¤sÓ|ɺ�+µà ›õÔeåu¾ë˜UÃÛ˽uЉ;ž=l½ÅÞØQ¯¦¼²-£¼FºVR'îâ'$}? ~�ãÀ�uðZ6ècéùªèV¯¶4QæƒpdÍóTÜV5QoeÍof´ûÊ1¸UCCv4¡_ô�¸84¸¦.dȲ)%:{4Åw°ºNq\öv0=ħmâ÷ŒšÑÊ;—¿®¾QrÁ}ïÊ aÉ‘f3o¾ß½|Ó]¿Ì'±‰È\`‡~³ý¾µ©?öá©v)øæ"‹?¦Þè2±ÊÝíM�tè[P4OPoh¹_ø¢Ü$mçesI*öaT™ŸòçÆ| ‹ò¬œ©/1–@ÖávÏ·tÀ*~÷Ù;Æ1}e†¡±þEÖ}>ö™LÒ­8gD~'ª”B�ñª|n´ä¢ç¯ÊB‡s+3}ß#‰&à9ª”¹8Øœa¾n� òÃ-qÁ7o±6:> ïÂbP™GTõR ˆsJz‡Uq‹]^’I&Œ’^¾bŒtð“ËÁµcIU�Rba«Øhx˜º?=¶O"`Éx”§Ø".ÓÛ" u7�zÐs"ýf”ê²boÕm×}¨¦ïÚ"š-:$„„‹43¯ÒâÞ¦b´2öãúcÇèz£�äáö?m®8¸kî �n†%ºÔ³‡%zmµ<{¹¯–#7èÇ|ÛðMYÿ°ð£z‡š¢y7£®Š.0Ç÷«ôéGJ‡>†õ.ùn“Ú�/’856I áLWVм|�6Ýäb+—wÇ—EîV‹«6b¨úuEè1½:üûPz²*ÕÌ\Å’oošž °t:é¢*s2üÑœ|aŽ·šý ;òªÄÞMI(^ã'Åq•FQ¾ÿè}“ªFf\3јB¼ø,üC^”x°–iY(ŸDkÚ“˜;¨b¸ü G«yµåpÍ+�9yKõªMD¼&0ö“ÛÈè6w7Ä O×í×P7“Ÿ�)ö§À ^ ÊnÚ™áØ(ˆçôó´ úæ}›÷¬V­[!³FL°L8�Ö»Ò¶4Ç,\t"5:!×(D¢ L¿Û}&úÁ\HWÔKŒ��Â1Jð4ÿYn“nˆ1dÉn¢KK×µ(ý{ ìQͪ�wÌm„“Pb’4M2fQ®ã›q\×ââqeZ*ßi]CѸÐd@ñpW‡ªád‡�yZo½¾DHZ�h=AoCäö|}ƒ!ÓOôsôÝg&îÁ$\þôæ·­Xr†×”å'"Ô©G0Ô½OŽœSÅb f•ý‹``Vøg\]Và´n”ª—îrz/œ;“tïül}ú±M›Iwt¡²<_×sð€¾Ü§›hk†.i¥áQÞ÷ëâ,1—¼ép‡9óY'À%¬E.£©¦;ÆVŸûü)g ill-Ù7hƒÙA®jkð6JYë%"8·>wü\Ë’â®ëòD+áž‹j�‰¾6g“­¤YÜ3¢æ©>I‹`¨!™FP鵿SRŸº ­/ñî$\°0{µ ÒnØ‚Rغ®2ù»%‡Á÷]7yYè—ëá}àÑØ}vÿcá~û„ú/~¬òí =^˜ÿ�­{ÚP²Ú¶mÛ¶mÛ¶}Ú¶mÛ¶mÛ¶íž›ÉÜ·ù‡JUv²WjvQpí}vÅ›LÅ36MR’VYýѧõኒPmòGT:WöMš²£¢“€ì›ü é_±ÛuäÌÀNê,ë0ÎäÉÈ0Æ™¾ÕY[õðd…s²Í©Š×1T|R2VP¸Ôê©Ò�_Ê}2^qŸƒzCks]ó|cÑk?ìÑå³/šC=Ï•ßZMó™#² «A&±*àÏòÝMÔÏÒÂ(®‹1õ9ݽ] TùNüëäls`œtÆî*óW¶3Ù ›ç˜MÜŸÈgìUõŠÐ¡©&?[ž'2$h“f‰Ã´D1¼\ßµ ú^CFUªíþÀçF(@¨wý˨clä½IâŠ1N¹mL¥4oúÍâ±36Ê‘Í'Iހ⽓_›¨›�oÜZõxîšVLD|ïÀæmHUš" 2l|.|æçhQŠó š èßﲕӠè›RVl‰pô¿lÈ#ÙX¨)áFcGL…¤ä;²®Qk6ÎqIÿJ¿¯ð& Œ3òNÁ £äV§€",b¶/ÏÁpÝ@Ü8€òÞá�5Eå¼$We!*Ùå¹]|B¡Ïƒ°Ò­·äéÙ8—6€ þ|”ìÔ¢Þ= )+¯.1Ì-ßÇiƒ2UøÆ¥¢¹ü£Sõ.ŸvJò¯´¥ƒ‘ùä®K ‰è>„~¯7‘cí”ù ¼ÂéT#°³«ïÐËÆáƒzûd·8§˜ÖÙmØM�‘xß³ÄâÀežmÁâГ´©C]9äý/$£Â‡ÍÜ? ££ˆè©ë™2#QZ �a•clIB�‡ÄÒÛ�<?ÀïƒD£,ó&¨¨§G¦˜x@SfžBgi »!Ú{Òé§)ä ÇÜ2-^þJ«²÷ØÈêæo¤]—_y©<ƒ| ¦³76Ä:ZTmè:€ùØCÇ€b¼¡½¦ùÓ9r©q_µw;¦>t»\¨Ž›æô»Òcåk#ò8× ÷ þJ‰ñ;9©A»ñ·Ã‚]ú¥d ²Ôqú²¡þ±C  Ø™‹4Ëý‡Ä7'oŽxhØæʤY˜å‡º°p{ö[ârYËWD†2ÊÚª�Æ}júÉpfsh9iM8,/ð(öE@úb±ÀÔ2d*^Š[5 ¢-8´g0J•]—`GûŸ³öÀÉm5UbÑÕømérÈÏ0˜n#XïfdîÂ}GÚlÖE0º…6]Ö“d„ÔFèF�\ÌýÙ‹:rFÿ;»ÓTñŸÅ Icnôœ~÷HŒ v7Xm¶:€˜:.>ü_:É<¾-y|Í“Å׌T7¥]™¿>eî.¶Cu^{¹Å P'Ýþ*ò¬Ë·\‰íŒž4ßåº!ý7ãéb´,ÚY¨Ðš�–èo!·^–Ð<¤LÚËÜïISÑQÀƒ7aâLR䙨ìÛ ¨0%ûŠô':ަDc2¬ÂñVÁP\z„[8x#@Õ îCe”UÀ#?°pm A lÈÄIpslþ“õ„(ÁRnœ¸Ñê×]šfÍÆ%eŽGlÌ0cª7Å7‹’&g‘ý�rÎ�ÄÝ[ùpëûw‘ž«Új!Afw †!î�ýÉýb�›µÄJ¾ñgЧÖlˆo=jDÀyÚ˜„Û&ßáÄNíÉ`«Jœ/to±¥Ôü¹6h©ì3òé6ós®ò÷F ½¨M=E�Pð�¿¥ÊrD ¦éú u¦—ìsf ‚ƒ¾ÈàË7¡€€ç•Ï!˜Š+>%§ç&ÜÙbk7µÝ›Ä� àîžM‘‹Õ‚®ï¿FìšqA9ÆéG¥"—&f”[墶*×D)(vÝë›ÊhÏdøÍUŒ ‘ƒ^ÖïmšjFÁ&&�ja$ÐêZ6½w`JXTŽ(øâu9i¸o€áiN’ã°@ðÝ àRã%X¼ž;i)ꬒa*J3²§Í»Í)ÆÙ¥DvâZ¬ãd‰*àUþù�U*ºÐrd�€ÝÇ6%u)€°µå½T³†|¤+ŒS©snsÎl€A,IÛšË×h£ºÎqµë±D€~�T‡ÕkTa(Gî¨Ú%h¥ú‚´ò”y›%(g¯ë`»£Â€=PP›¶uÑ;» `@d.¢zí ð׬³üɶ>þ2[p’ônè—w!D-±Í§&[÷¢qG:éö· ±amÁìø³Bj?™›@3µW®AñK@ûP�Q‹@Á“†³(µÌF«œrÊ¥Io­2CÅ—Fþd]BÆ^&»Aò€³÷8ËÉd9§Çe<ÜLtý�ä?ޝ²L~Ò-íûîÐ�m¦1¯ae®—‹UÉÕ¨‹¹ÆÝ²d³ º”ìD)V+¹˜C§ -íåoÆŠ»«¸\¼DÁ�ÖD] çßa®ipˆ÷5þ‰UŠ8¿œO ÑÖ)Ñ~7)Ï�´õª‡|%>Q'òÖKº´ùøî`O¸ Ætl%ÚœÕÃæ& ðôŒlQìo‡ål*f;ˆYí#WÞÿ°Kj¯î±Á`ÝçY|V]bÆ«N`|›N’£¶Ü,g³³™°5HÑÌ\ïø�ïññƒwimib¡< L,W2­Ó¦sýu¢Þφ`{ÛM³å‰E;}¶�+²¯ñ0õ°ÐsgR}ô´ z›@ ‹ $S‹û2ÅÚP~Ûífe¬è oq=ÆCª ­tÅ>’dN œP�§Ì)ÌÃâ¾a¦K·ê=ß *&IÛÒ‘T¾;Ä7J‘Â�¦QHÒ�¢TBßb’g¨âÙk㦜ŒíFÍÉ7oÇT_`zQÜ,š5®[±­hÒÃJæU°Æ¯-šdÙÏب‹ w³�èKtUü!ˆ¥¨,>Ó„ .ÜtdB?ËúíVjóÿí5gÈÿ1l2||Ë ôß¹³A�¡¯éÍŠ9²L.6¬&¯ìeWE<6JßBŒ�HÜ7ôMRólTw†‹Žj“£Ƙ¿4Md ™¬F�´¨ ùŠ”„„çS¥¥‰'Nw vB�Ýn0œ×º)SòX!gÖ@Sƒ*$ÜØÀ?�wâ ï¢Jxgs�`œÅš*tÜè6›Ö-ø–â1øV"#Â�¸Æºw5›¶Òš² `Y~Û`�éÛ[©ˆ°B !¨©úýÞÖ’ÌÑ@zíÇE¤s�µ{E{FE™_åR%¤ u]SÊÝ`ö'[þˆn4ðbØ/цÇM“òû¾ŸzcWÓ‰Ó"¡۸˼‘îI°SEç3a¯€l 6jZú4]W°ª(óOàY²8êg0&ñ3ʸ4ûAþT3–ÇPíö¥ùÎìQ´ÎðøÓˆÿ–êßEøÎ�03±fùW ý.µuVuè«sz2N4Ú=2yÅøPÌöJsBÎ¥MhYŸ ŽBlÒŒ­®=sö Íàš+lh7?ª{O$Í|ìÐÝÙVæ|H„bUR4½lVsç@ÌÕàVh;*¥„Ĉ~ô½º-ôHˇpU)…'Wg òäLF¦K;ö (”>æEþ�šÏ÷r¦æÔ !nJ%ÅTùÛÕXa¾ßGȘfÞƒŽ~ä_8¢Â+}Œg ˆR™ÿhªÀÜ�Ö¿• \rGà^ƒ�Œ‰.Á*Žõ:P1ðwO€T,›»Î|¯LîØÈðØÏ!ïÒêÔ˜AhêúZðù¡³íâ…%%HÛ³|ýÞ¦|TþU¨å~%Ä›~q|Éqº|2„Ý.m UÅ캓rÎK¼Â2‘íc׉êÖ¤ˆÏåãCk�ò›�V#©NSßɲ +žsVµÿj«‹ �ÎÎ}ëÌILRþó¾Ÿ1 Õ…"Õœ[3Å»{fªz2–‰”  ‰0Z*c°JÍ ]ZN]•^^ë¿ #15}Fœ2‡š�è=B9¼QU÷a< Ã¿@LâÕó5K\´7·{yX,‹#‘Í / å®Nên¹æqƒè•TB�Q{]üw–€$-ó4ÂP £�º_u©}ôKbbDåc“àå¥'süUZùD´ìY‚‚ÎÆmHw"�éÜOTKL!­¤7+ᯯ¥"—nÖh³ ‰W¦Uxoä_Pv­…ö4}™ ä6!­þF=­AëÔïñò/…Ö~§ªÖcp¤á¬GFÅk6Ömþ’W8¸¥nTæi¶ðwxè½ÿáe&KWéë¹çIESº=‘«ÐkWÉ… rù1¨Ñ¤Î¯Waëîæä—‹†ÙÈdjªw›Ýç·/¯®y\Yµ†€KIIÉ{"‚ :‰xµzyk–låøRpewEòÚï”6ÑfßÊâ6 –Öà(á‚¢…E[›åóÁI]k·¿Ï>r#à|CâT Ym¹„&¾D=k$@lã©3�Ž:JÎGuµø[ ¶¬ÿëæÞX”žRè·j¶|,\ª±]e«Ûaoé¨L‚Ÿá:[~‘J)mþ 'k@4Lá­ÏíÕ Ö.ÔÎ “ ƳØRˆ�(ã®ÃZƒq›ì"8ÅÅOUVYüÙá,» ä?½ ™W„G³x Ý]6�M�/9n0²‚@:ϧ�?+\#^ýàÁÔ³öÃq1½kB²§ p#ËŒ+á­"¹ƒÁì>cìªå§$�#©½’¶Y0s´ƒÑ „Ù#Ân~86Ú9_ŸŒgÓ8L¨Dõà ìÅt�B�ÈÈ,_ÒöXĶñú¯®Çû iZ•z'QX¢úñV,jH×yÂd$¯€tu& >RÎz8—»ñ”úΫ¡]:skÚ_â€AŽ�à5Z¸¤ç‚x40øç#¤‹�YòòNE›MÈõj™ ðGýüUÖ¥»fâÑ�8—�’Ëü|äq[~æÚnã‚l^Dó´%ÕékÔ”‡‹/ k™‘×®â.“ÅÁªÄØ�ôùSX>þ5¬� ! ÊÝYB» Gò­�ú±–BSÈùí¾e.hŠ»¹!…¾ rØöåÏ"nÀ•äøú‚m¬Ur÷³°zP ¥ÑJÚ²Ò[$¹3�þ`õÜDš}÷˜"çÓR„|.¤òEò­á¿Œ ô&1�díb°$i@žþ&·TbNaŒAêP.Ö,‹ïΚ O‡:Ð[¿•TÁŠVÊî@’5¿�‡È¡ðÌ"�¥º‹ï/³âp~4°:#°z•¯'² mü_¬)}uäpº¾/n»ÙÐ�àúÞnQ"¬ì$ÄÃ�¯ÅÂãP¾©=:hgCÈÓ%•’ Ë< Å*ƒ[ ŇbsüÑ„Ó a½'9An'à¢`h{°çr_~;Ã+Ý,'` F"È‹¼¶/<�'ùt’ú"Þ³>3Öâ¿LÃÔvØPpMKÞ°/Í×Gt¶äà`âÓøÝt‘ÅrƒYnÈ.Q+Öû4]õí ±Ãþ5A¾[*Š&¸·qh¨jÆâùiÏÁù#Èý'ÛP_Lݽӟ”T'�ð-È©º �2›¨¼cÇõ,žáo<:1»LØx#E¶ÁX»ó,±÷åÂó÷:G/ÿPbÐbs~6Â_–û•%$Ȃ׳SªÃµ®ú‡o 6i©³säáñòéÿ|n2>ûÃWJ”ÀFU™—?ù½û7àûeZ^dq‘FCp‚ä¿aÞ A–{híxIn•ýÄ­VÏB`áêáá¬ÃéY!DáŸ÷ õË%+&Ù»rZ‰f›Tj™Å É)Þ7åƒ>Ïêoä$Zbæ!@äs>(½×Ï”Ï"f‰ÎXÐŽWu~‘´–|&Q_8GXÙ Å•5Õ‡W¼Ã{* &ÞHØ¥ôÀ )ÁÄ·¸o½eƒÓDT,£z ý¬Æ�hã@ ¯拘+ŽÉ~ýÁÂFO¥†M¾žftÓu1Î4 ­ÈséLô …h¿2C<#Wfç(çØ&�ΫH†V«Qï•�:¾-e~u"Je©ém¸ÓÆÄ}™ÎT Âh=šÐ•ÆÚ¯Èø6"Ð[mÂî »Õ÷"0SrM¹“A3§kEUr¶¢!œè‚¸j,ª¶"ý>6¤m£ƒ­©½`ãW&¸òB=ºýÜûÔêU’ô4ã\¶íÔ=ˆchßìùfô˜ÁwµÃt"ÄS$ܬCºæ•kÝœ=ÆaH<|(¸´öÒ=PtÅRÞTR7»× î±Ì= -ÕðœÏ»w}×i)P$N†®CWb÷_yVè�½p[ÿÐ[1,GK EÞÙÞ¯‘é à$CºöY“GÌOoEIÄÎðÑÁTÄ™$i˜x$­IñÛ–™÷ÛGf- ÞNÜí=BÞ¿¬M²Lt ú&™<€™äEØw”v„.½t”Tà y™%þáØ7êq¦�÷d`¯š£ª*ðïs• (É^;ïXX66rñãš6d0\Þ&Û¼Ò(gG„c°wŽ­µ Á}]�ÞoU@ólt*–nœ£K�°ôK¢Þ�ŒŽÚG-Ùv2$Eed€�×Zïã|Ân|@ë·ãÞu„i_³øÛLCL7jS×ü!½‰ù»j½*à sE¿& „õc07°ªéF­sȯ×>×Ñ\VþJ¶xEÐÙäb:;(ôwK*#IŒãª2…´Ì¸¡‘È`žTÀ{0mþC§yÙþìkãTäÁ•ç:Âø~^וà¶Úõ¨VTsãm±Wðý�ƒ·M|:ktÑè3raµ 7v[‡Y¨°bd<ÐrRóÎôŽn’�¡ìØ‹0B�«j ‹h¸ÓßCAU Û6MÊÙ#5à“#Te›e?'–W$nDØ\·6E/†½Muûµô/�_yA·N}³kÏ Ó7Þ ð‘¸ ƒh�Ê_fakºx †ͪšômYXøACUE¸ô3A8PÄI”/³æ©"‘ž¶òÚú“ùX-íÔ} iYÞØçͪEµ ìƒâjët’·üm8¿úÁd,²Ñ%ýµ¯nÇ MMŸp`d°+ÉŸñ¿¡žb~°²gÜ—3� Õ‡ :œÐž¥ëŸSD; ˜ƒ_lÛ²K�"¤ËÞ!�|ŸH¬ÂA^�ËÍ©¸0a]ø·áë¨9á?_[‹ ¦uLðߢPÛIþ8žã0ÙcJcV”‚éBëXàqhÞð4ï(‰‡ Qx¤Ù:rø�;â.2e….OêÝ ¤â|R(G³ú½}”‹èsáó.;6Pw\q½Ãmÿ+Q”H…EÆHj¢9²Ž :?Å<+ñ ³xÖÏ|mS+\õëÐÒƒg«Ý.kŒZox8·ãì4Örs=á÷µ`²ZHÇgõL¿b¯ikPªI{u³ÐV$B7²c_¤6t n‡@#’ÚG I”¸-àÍN¬Ë ö¥õÆk&ê7ãîCŒ.öùµ�{�ò„´JÊmí`Hø@ ‹=¿¿{’â zšÍ¿¨ò [°Ž«ÙÀ'ä©zÔ;´A<{ÍqÑ?励ÓÛ €ôdZ¾‚z>òÖPkH‚ÿ#LI)¾Uóþu`qž8»�,Wr …nì~Ö·¹ÆK;QùËNuŒ "ÙÐ=´àýA÷Jª~ÒÝæ$ [HߦÜ]{dø! 2¦Îô„ê¶aó£Ò4ä)å9™‹%èûlÈèþ[£„x,(‡8í•ÅC�Ù\×S„úÀŠ.J&™|쥺!aƒÐÔ,í‘ ¶>íÚ¿iõ©!ï] ‰¹¸bL²W–a†1É­V6»·pÍ®!Nnñ5"X™-%¾@`Ë´�‹@´@Èë•häºÊ•ìªKÕ’Z½JЬ²†´²ÀCB;ÃKþè�íÂ> Ðî>¶ÀÀëiÀ%Eò­1ÍšOáÛ¼ñÌ,k潩2n\)ü×m¶"î0æ€VÂʸM|G÷ïž ›!ƒ‚õ†N˜QLD¼û,ˬ)áôNIEÌŒ'‡€™{ú0HΔHë\ “æŒaÊûŠ6Tü€¸‹À /?�ÄíZ4Ÿˆ ’ð“žYöƒ“u›‹moÀßÈé9/ñnNx? ž©®W'6trÀäÖžŠ„$6XSR�ÀÑB+Âv?ŠlÎäªRIà9‰Q †x«f�sÖ¨‰V«Óš¶/Õ©zż«}MôöÔ±ö8ÏYµÏ½}Ô8ᵌå§ö+C…¦Q_s}H®Çq 4{«6(µ1ÿ8œÈçPѦɵ˜œS×ä†XXްÂà>J¹ò´Ü>°zû·¥/YºJÛ3©×âDK3Â&ÕRa÷ù*& Þ¨y¶/v˜x´|Çñ˜cì#¡Mó/˜Ixû8È´ýS­Ü ?'×ZâcÉ U%Áô*iŒ$­Ðò©çe‡ÐžÒÍ�(‚6®æËÛ‘íÃñ {¯Å‡�x�¾ö„ûíñm¹¤œÒÉõ~µ�ÕÊxø¶aЧñ£?µŽ ‘nª6FÑ)F¦C†Þ¸ÜåKänŠY5EQåþïs;5½'#¦c«ë¹ï 6DÓ)ã¿>�­TÀ\«Õë‡Ï®M¯ÐãG`¬¨/lg{¹ç¯qíN�\ymÿœhÐÕj¯üB!>i*ž˜Žú«+G£,Àêܪ_Nñúyɶ}ÒƒÓë —ÝØÕS(ý»ÝPý²ê¶DRïg~®8Ÿ¦ø:+¤d+:=HñÉ*`qÊV®µ–ªP9ög ‡vÊýÄó’½g]îWùå1�ñ•ÏþKåñ{¶;AK(Äêê0Y×Árþ6xÔ™Ž)°¥R*U&Ì=ˆ‚ÿ»g–�¤lÎ3äSr2¤~z¶ƒ[ðî_ e6¼PÓ2VÍ]–=sØÿÓ÷,žÒù]¢Ä³/·ÃÅâ…¤x' 62èá›F[ܱú‡àxÕo3(£]ùÝóÒô`}«éjIOÈG}tð�÷zF7AÀn{Ndãá:”‘?àÛ³[… Ù»õÂ2„ƒÜ¯.>Z¢ ý'ýø’mÞ3ìc¥ÏEÅãêöò,ãèžwô¤“F´“¨¼Ò Û;󕲕ú'à°Z½üD:Ô¹PƒÐzâ ª˜9Þ)Òÿ”»D�ò¥Z§Ì³HNN^ m'%\C8#�2z0½‰.”96H¦>á22:šSïý‰  ¹ÃûƧ + LÔ!yÒÕÿ‚°ÏìGVœ Ýd†`4‹ã¶gÂ)Ê� a)˜‡"wàé#V�¥„ÐÇ�R÷äòÕßéë«ÄJsZUóÛÑ ›Ç^†C™­Ñ‡ñÆEÄbýÖyã™\̺g3 T�Ǫõ¡ò„\ù6Á;"[U›Ö÷´t*°*¹”§ÄÝ Nl%e–¢³WÌÁY´Ä êÝA—„ú¬õý4)�ˆƒ>ÈOJjI²:Ý >1¯Õ!´ëžJ ˆ½²¹àž3¹Â]O–¬aÓŽ÷ `y‘§$L&ÇÍvm»„Vò˜#ˆ:Q´ž˜CË:'÷hNÀ6�‘eܶ�¶jaú"«V†‰ v€”o)ÙT^€ ZöÐV�PÀßCÕwX5NÊ[óI0ù-s‹Ng(àGî§ò¼j8˜Ô8Õƒ·Ý„�¯fâ'Íɸ^Rº¸Á;jº·ÀÊ æ©Æ:ÐdŸ0Õ†«@CZ‰¡Ö¶T-i´AïÈgäY™�d-d�ÆDr´©¹³– �m)ûøåÏÛIoÖÈ®^®‘ÀÑ/Y6MÄ™ðôŸ®®bÛài}”ù(ñPê}­ÐþËÝE?ðµ¢y¯ð/}ãPÕEСb‚<–\æXs^qÇ&Ìè:�h»¥•'öý–1[xÆoßâà­rÛYV´¦:æV7v‰øÆd-^ Êä¨ƒç †!�™uE“ËÿŸÁÜ!‚)�>a›-ðUZ ¦Èù‘º¡DhòtãE¢==š"g2,@bi7‚v¬âУ�Ê\Þê;As×ÏÊ⃑AÐWìcør ¥ÿ¸¢%Tm�^…IVcX5p>M7Hß§g‘ªº¼àZ„)ê»"‹kƒÝb÷®,§®—u™nD«8‚«È*bŒy�燢äz™ÒxÔ‹Î Wžz�§ïX-? Ëî9ËötD½×¼Üèô(逻ùß~ïû( Äáš—q!"6“ÛÝ^ÓÜuë²mG/á�nm ŽñÚv¢ª5Ç£J™ôßcoå—<\þ¦ã“]йÖå&.%8D9‘ŒIáTʉ¾}fB\éÛ†w‘¿¶Õs´7ÁqJè'±ëñbþðy§¬)„bæ$áÔYH‹�§Óï’œ£êëŒpf…IxJ ìÁþý?ýÈï ˆ’Î~Àxüæù¢f'KÇojS)—2ôy¢‚ÍÕ¿Ù¥fÃ6Þ�Ôˆ_òÔäÔkú} $�}C[``‡1’ðzÝV–jâ¾Q>•µ¥�ª˜ÑƒŸ™NC&óß" ªVê;ùg\¶öŽúýÉjrdd–ô8$1*ãt^¤¨Ý͂ħºtK»xìâüY´ÜÇgž°@ÜÞ?^Y.jåÜè,–·l޿ݤÁàÙ¤÷cjÑŽÁ·°œW€=€œÞs‚E9 ¾1CÙQÛu�È™k±Êj!¬õ¤ÌC\'êP–4ÀÇÏ�Ñ.¶`–”;—˱wÔ„äHþU¸*Ó©þLtUN¤Pnл ‘ŸJ#ß©ÒÅkŒÖË4 ¥#6Ë¿£’ÀOFl«rYëíÑš~`ÎéfÐ@ŸÏö‰ÚûÈQ RU×o"�ŽA䄨aY¡Ì‚‰Òøl4€8¡Î5Ü]é;� ãúƒA'ž ¹á¢¾ºõ C¢ú;D¾æì©ÔDvV¸„<„BµXm<ú„Hˆ¾O¯Zm7ÃÜ60†3N/™§ñ'›�ëÊn~çÅ|b·ñ˜ÿtáQwµˆ… G·4¥öÒìmG¾—Áhm˜i êîyÇËØû ÄE…’µ/0ÌB5øË­NûÙÔµJ`.\çÀÖM~žà ý¹[ŽÜï&ap)i[S! ™¥l‰Ðácž*w}âÿ—^ê¹™4GZG´,°¶žwÇ\»ÕO)9®_PÐo nè°Y§øƒò‘$‡¹—B¼˜cM:�"^¸Êóò%ׂh8CO¶ÎlH«“§©«ÛÆë’%òþƒƒO£Ex�ê<“e�ìad)Ë�é5m wIb}C¤Å+ŽãÐÜ{öõkÆŠpœÔ¸r†õ$OLç&moŸã+Ü~û¡õ¡[E‡Y”s·âû4ÆÊ¨„•®Ÿ\¹¥ð»G¨S-n7i':n�+7e-³Mõ—V1òløÉoù¸8n¹Üq.�Øô}b­õ½dHlJ´âUíGxÇm-£ˆßü#èŽ Z "I{.(bÎg@çNV€ÚRìLÈ+.ããXúÕ?&Ý�Q©gtR¤Ðî`"Ôí\?Š©,É['Û gîEÅ¡�£•s7]=‰û�Û¤úÐ¥’cgÀ©éNpUÛ¬ñA·ï1´ Épôä]DÿLA«vF~•3º›öBu̯ …n+ óž•}Ä[6Ir4¨“ÆY~�”•UH쉛ŽÞOöûrÜqÙ"Hmë¢'€†éù>óD:Û|¦ûè%ή‘Ûä4ÅóöeÀ'ˆ8hñdU0Aã­ —. ìsp—y©!U´±É_ôWk.¶êO F·©µÏZ¹âÓΙxj NÍ×Ì}Ö|ê41h‘i«Çì ~�pLtÇèV?‘p°O ·Þ=ZRŠþ¯zÝ´õê©‹:ïzíÜ!pnÜ4Câ]âÙHJ^°}§©™Ò<˜íÆ18†Î{µÍlùéÀ‡[)¨Ç6¢vEkç¥Øº'[�N�’±ò0ò*ÁBòªlº°�u¯LìµKëF—�E£» àÆ„ `{s,‚�•Dù!#íφ�ºÄ)±¦�ZA÷À�®szÅý>ˆÅ3ò¼úîùyUÌv?˜üý/àxT†Þ¦Ìm¬5 Õ=Ü{Ùù¿â¦Š��¸¨åÂ@5 tk�q�ˆe'ä>1&SvgXS5R©HÇ7˜Í­'/èéÊnp—÷R>[WªFëûÐ…Z‰à�<,QLôu0ãÀ–Û‡–KlɃ”Ü>àîXé°gboú1˜>ðI& ˆ™ÚúUlUzPö�g(ôRp¸Ä7%ø¸òžæÆã.Ûå£Ãj5VUç|WSÆ;1ðvv©:_‡§u®ME{ØìR7Ö:IZª}P‹ ‰¯ðû@‹…yœüE`oYœÖ£Њvì@Ÿ¨vZsà ý£Ômõõ¢-å�…;ºH?2n,k¸.C­?°5Î4`l}öªì‚´>+³”oûÃg%x†e¯ÙÐ4ŧ¶„JMåg±3O·É�ðÿ ½ÆFz“ï¼2ðhFHj¿BnŸ?QÍáâ ŒhÈ÷“TÅ™â­a\Ѹgñ‹/°Cë\‡éïfÊëh ¶®Ø'o¥§Ø_/à·úÁ7ŽvÐá”›Ød<[6@’_P�1X&HÈþÝ—ÜNȱQÀðÇŒµŒn'¢ýBgòTG±A�hŒ*™Ë<Í(Ù€uè?ç¶õ8Fôö:’We|' £œiU¢_Û Ù3=Yƒ‘FMø�»W)ûýª6ëòêhC–ŽØ6O:K‘›·àV�ü¥¸Ò�dY9 ,ÊÚTH!¯~w!®µ~gܲÒÊWÅnd²¤ý¡ËpwOÿ÷ÂîJIO®k•4Išnp˜>�°(Нµöü÷>çªÓwþñTBõäï÷YÞ걇 rŸŸ¡§!&º[ç¤|è;ZÒr¢‘ú ;$œqñÎ(àï âÙÿìÞw¬ð’ÜI`®ßi6fŒ•yá`)†dr‘¼¬w©J•©(Ïea+íykPÄ:®Åj3GYs²�kÒv#Žñ6=!á¢ôëù¯ OÄóa‘Ä1 ?5(”½×Gv:Vß['¬Ôøo¾YI×çöAE `õ(þ—ÎX’…0e`Yþ9ÇBgÕ`•Äß±‰j,M~ÞC#~XL×qùTÅ™ÅÎk¿=ªú€Ž$S¨âá´H‘Bå²!n :2+_Tî>’´µQèȶòa–ÌåII‚.l€Éô¬,\øf sXŒ9”�,~@‘¢7ËV‹Í2 ûnÚÑÞˆ*U‰Ôu›†q;~ËÖI( fì˜ÏÜmuyìe)„=Gï�‡©ØfT0Æ…~×(ÝJdC´°§å!ÞC[ÏÕ†G¥§g›¬KÐ�‘½Ç: ]œÄ¡P¾. Vf]éFVýZÇýûåž�‰›³ÿU'©xrƒŠ-î@zÝ;„ÛNWf}½NQýŠ1(‚š9”²�n?±m¡R#!*� Ø‚P¼LV?{íŒeoæZ»ïï[«M¡Øí€Õ¢ŒðB'_¢™ã†Ð˜&QBõr¯¦hÖÄA·¡ö|Å`\Ó9!üÇÄYul˜r[¡0Ñ‹›7{¾§ƒ¹©(ìŸ]ԪزD½¬ DQ°þ«Ú1{¤Æ`|m[zû.2¹¥;´\ŽÈIÀMý!…óØ8ƒ²ÄŒd�gS³¯ŒÁ Æ­uRv÷düO�o±_ÑT_béÚÀƒaòöjqˆŽá[š>ß4ªF;ŒjŽ*‰ë¯9žI>ÄxÞ�<‘ë/�Ìæ^  ÇHå:¤rmvºYZä£wû$\Dx%?@‘8¥ëâ4ÿvj€«†/„ø|R0ôyªÇl(z Î!˵/fNÃ4ÔT€ãZ�¾}H ¬�q—Lñ\F­%ŠoQxOXL sûu艹þ+C©™BÈC=Ôdo ¢÷�ÔÆ0½üòJ¾È`âFæÞÎê/Ôá|潓ã·ãQƒ¡š ú³UG%„\?ŒDÀŠœDÒÁ5™žb)ÍP4,›ÊëXHÓŸÄùxÊaòÏ�Ô£ÞBæG4À:sÅ»­²Lþƒ^ȹsàÃÛm4¦�«Ï³·–}“³ü(oK<Òd=9)�‚‡öÍ›‰ýZyq´t=iF8½kWvćV3¯’sOêã&:¹tI0Q&�†é H}LaØAJ‚�cš “Ÿ·$ºÿÔ|Oë:?j Ø Â9­Ú�„¦¼Çpvé]+ÏáÏöâ¿ßÂpƒ×Šæô(ã‘ÜÉv÷=ö$‘¹=(’ŒÑYua¨ÿâN®©6ìT×Z °™#i$5²‘ #”]Xœ�u†6!P‡añ”°?%n¢(§ÒêO•ÓäXº(ùm¾µeéVCs´½Î»÷ß�¿ëG ëÉ7ú Â&‘YÚ0Ô©IÐ+2Bo¬í†`·„lºáQ÷�è>ˆ¹´ü]¢�Mšïd=”lÄxâ%”ÜO‹kñ<±Ìq¤ ¡Î;¸{î;ð‹‚ÖÝ ÷ב|jµ©ók˜³‚Úàí­›�6pEBÈ�XwÕzQÿÖŒ‚H!Vž¦ÁÆfŠ„¯ Œá±7¿� ¬=ifã"ñÎ5F cVS£{"Lá§W:{|îö:Z¾^äU7ûÍ Â0é ×'�ÂÃ#õ_Ò‚!Â\N0ZÕè+…øNK:iyÓnBèdTDÚ´3¾Ü_»9¿ ½×ëÄ öHiþó1Àw‰¼lžæVèÅŒ·^&#"Îϲ$9¥779M›ãðD‰r•Læuj¡hŒðWÉþž»·É C9X` iB/‰xVJ²úøz¬Ÿ)Lþg -BµFœæïÛ�J‹M®;NS ˤe±Õ³Wö|$=‡1.ï”Ó›cXUËS5©xÚÒO¾8Ò–‘k O U“ÕŠv�}x7ã òxYDîR\b½ 6gñâU?ñreÃÈe=¢<èÌ(Åñ¹Š„š‰¬?Èp\¶”-¼�bpl�û²GÕùv)ž1ÊØ|ÚÑdj2Üáo)¦N›º1n ë7;R¢ q¬~y.nÑíì.ÖçƒÑóϜw‰*ÃÞé;Ë�j_ ÉÛàиÇé,ÿ ™&Uw¶zL-4ºû´)ôO @�ÏYUÀ~ŒD)$K­Þ¥>Žf .çE½ï+d¨Ù×ÑÜRS»Ö/â²ëŸF‰ 0FäÐøw6@Ž9àÎ9·ÒŸqÙüµSE[êv&°T’ A°Ød~�ßF5@¬aa_ü¡d®í·ó@†=J¨Zžáã¥.°6—�ë[šÛª>”m®‚Ñ™)„j³º€÷3R]ÐUüºHmß*ëc=|… b|Í ìbäÜz,õ*’nh§,ûX†·��x¦›3\ô+Ø­%ðÚ=«���Ÿ(‚ÔÚâ䃻BZ|dÃN®Œ‡HÇʸ>ôðaàb4—ÑŒ]ïÂd{bä³áæo^ùOŠ…ôêñËñkß™³¢dUìg• õV]x®q€ˆ:šÜ-y‰A60õ°”&ñ2Ó?m‹—v9¢�^º¤ª9ÇÖGØUµó�lvjðSäáQÔxN»ñžb{}»ÉVôØºå ”r7Ôí—‚ô×w%üö\&æ~È]ó0oÇ€ð"�_o—£�v±�}Fܼ¾š)qêã‹j|•¡’Øp…ļ[§�çT,TnŽ1·¼ò7¼•#ûñ·žò·wfê-Â#Çrixbד 0P~%'iÈÜ¿¥žZâܸ ñǪшƒ%Sø (»×ƒ¤iKÿæá`ÿ³­—Yó…ÀíJAÔ ÀviÑL‡�·§P:ª§ÚÏ_íÔâ÷˜û\+#K×8«Œk.¼Dû`u‹Ø‹ÜͶ‚_ž·NóvC¶`��ïðé䯶fæ™Xg•û-|Î&¸–»g¤| k.Ÿrð Õ†ʳrä’cêFW–ÂñóŽûœ;"ä:D‘!]ßø{ƒDËeš››“Õå² oo deL!W¹§Š ³p YÓq¿þ>ÿN¸-™¬ƒR‰ÉÒœÀôýL-T‡ÐèÐ÷>ÂÞ†¹aµˆ%�»ajö©Ì¤#Úè�0êµk+å­Ÿr–NÔÿ®¿P©-UxÍêʉ®ƒ~À! h�uLÑ·7m¹uÏ5¢«»ÆIõY¬^ É0—�À$›=ŸËþæO†dy4Ëÿý†²6ˆã„7‹”/Q�ØVÜé‰›É öNßL}ÊàåÝîE _6ôÕòôBKjCÑ1)ï¦T& ø C £‡l-ô ùáÒm?±ÔÅñiGQìv¸B°õ"”àâ$‘eQ2ðŒÅNi@�`„Ф@u¹ÅÍRWˆ”eÉÁ<ÕY VÔ€ÁPÛèç‰ÙÃîüÐx_‘¯,þT±Ýhsµ{ ŽF.¹5!h9“¨©ÁQflD ÙŒ;L \¯û^ôÒz —$äW|ªß«ˆêfF]µ¶ëýȪžJÞutãÒâ¤�¬^·þ)Û§j‡ìMè/«›Ùûá—·ÈL+GsÞ÷=+ÿ|Nàt|"°®w³…1üS^ €Lia…åû>M‘Yëí%Ôbµ­OŽ}&ˆ�qóv´Ã�jW®vì¾P]s.õÁüÏ ÆrêcùR<ªàí™ç—LP¥Aâk†Z”dOÖ<7[ zëç¯|8 fk3‹½ óœ´�ÖÇSCy_æ;~çÔŽúÆ@*Ø«8‹xõƒÌkø'½k¨UžJr?�PGÄŠN2 &ÀìIÌž@ÛSψ*ñ¤z»w‹þº¢VË)£6… §¯¦ï¡ïn�#—»æoißXexÇOììpAÇ�¤ ›}Ræb€Ô©¬±gü{ªàŒ6á7Û¾�å6ã´I¦:ÙÇÆü46vbè¸Knæ¡mÉùµö á^Žæþè¤fõcA%À¡ð²$F>o1�aÐtyY2Ï›‡ï1š¼Z˶s^݉Åõ8(ø# ÷°d ·¶âç¨[»`wêz}sƒÊÐ[ ÏÝbÕ%ÙF?ž�æüÔQšž@DEð.–ê$ ¨Þòx}Xûù1,F«0ØÓÚXΧÙS‘Õ=�ùóîˆC_"C&Æü%Öø vˆ ‚¯59‹áe½(:\|MÈà£AxinåÊòA7ÐgYŠ0[JlNh"FP¶9]¿þiµèÏmÙ©=yX:Ï<þñ=ê+&ØZ±'”É.ó¸rØTQéØzg‡�Çþhˆï™ÇD†'‹ýÃIa`8žòç×cä?D¿Ÿ¬Ø:Z/ }±š•äl‰u‡ÙÕØ�3‡Pz¤Lo< ªsÔ.:€ðr¾êâììœ?Èy�;­š •¬×ÇÎø7»¼‰‹É¯åèôÓÃúÞ8ì_T®éóá]Ž|-üš¶1Ï 0“ÖGkÀrj\–MÖ�Ì~!¥¤†!>•æúÔë¢C¯P\µþ5Dj5oýuÀ¤/í �á³ì½;,šR•Í"5Òcó“/ÐHE©vã´âèå"�µ7lF˜ ?½ŸÃ¼m—÷,ÝÛ¨@韗 [÷?ð ò^ü1™ŠŠ\´g½™ûÔ,f&ô®yÜØ+²ôž>æIO±±¸£ j Êø›™8)n¬ŒXÆ@¶ÀŠËsSª¹pœ!7„‚dR„kò]0j-qÒyKzM©€ò4J*nXØS‰~ÃRþ΂«OŽ}€ ÊpÄ¥Zéí67ÊTQ’˜ÂEÂîÂ%N’ÜÖH�?UEÔðàpêêò!škÎ_Å Á�5XAm¶CíRœá¯~OÁ"¸h/¹ˆ˜<¬Â@˜É$•¼hÆÛ¨¬Ì-:Èb(í%Üï¶=ÁCC»¤“^Ù.) �v–.zU•ÆKýÜìÝV¨{ªëÜœy^ÅJÏ" åIŒÍ§v`4D~†éÅF¸í¿Ñ–™ ‹ñ·µlˆ):"0z'D’ºä�G`Äø®«æ-ŽˆMÑ�н€}õ‰�c@#ü}�"CÌ”�Â!m²zæÙƒã'8°H©2<~"&W€ø«»iª¼¶/çüÇö]b�,¢o'cÜëâò!m"Ù–¿º`%ášY�Þ7£°ã‚Ÿ—gYoµ]´>Ù>ží«¬L_²eÎî—ŽdÈ£ðúã%èϵ"Ÿ/<¯Ç8м.ÀÙšÖ·\+„ô·¨MÐ'3žç|È’Ç3T%:~à8rÉvK¯ˆ‰ÈdsF–éÜCoÛ³Ùzgþ2‹¨†áKèD¶gg_é(?^Y{£ÒÏw£0Š7Nç+„œ��`Ð%år‹\{KsaÙ(ÿÉå,îHe@=ì|�)¬÷o‚8ÅK1H�.ÉÉþ  Ë76ïªØDBK¥Á´ýO_a¤-ì; Uý…À9j[³œysÀ`§GDbfL`݆âi(¿ÍFaì°.d€ˆ¬l¼¢ , dãÇŽ¡ š°ä:DOu6ŸF0rTûÆ]\_úsõRmWîI•�>ÖÈ­~à̜㵤4†ãvqGÝÞôí¨h�®¼(×Þ\µz•rNhÇ«7u¥1ø´âJC¦ÔXÞÑfîÀCó|fùnF ùÛ’JTyv—º ¿at�QËoLÜ•.ì¹b¸,�aWU9²Ù5-¬vƒLš1)K÷Û´¼CŸí£÷ÇÊÒ[GðØÂv«±.–%ƒæ4c =gA�z°E8âþ äK7´Œm¯¹/ÁU4zíw‘ú$¢ØF™è¦á€�mU>‘Ã�O±Wf˜~_‡N³ zšIÅ'^f±ù$t?N“ K4³]¨—Ôr0\¶ï4EW9÷Úâ…Ÿù;¾ÇAEõ²ÑÍ`ÆuÇòM øb̨QÙ$ÒŒ}ƒ5f€6A[ôø÷õ’ƒ#L‡,CÀ¤§;ÚÝ5Af/_úZGNЫqëö0%›Ð¹júÍÎ&Äת_£”& 4–z<Dgæ`-Ý϶²¯ø¹ˆ¯ŒX±µ„Û?Ž¢§â[Xh�\´4{·ú†­-NÔ–\ËJ³pnÔ­ÓçUz…**Áˆ5¶á»–Ë�¾·ÏF¤¸w¦aâ™RÀWO‹iÊÿûë©6ðçiÜø6µYÆ< ®¢*H^¤øŠn| „sïÁgu ›‰æ—w5œï— þG]§,³·Ñ楼^»¡îï= &,GL"Ú÷�8]p$Ú\>²…%E–Ð×öQÄØül—ì…Û¹þNMÒ·R`ã‰2�‡XÖþˆC¢öÕûoA@Á,ÂÂ.ƒý Õl…  úÇK03£h¯(¡ÐíJé Q¡aæTáõ|c®Äb%5;Å}š|®yÑÄ‘õÀçÞsß�þ5Ÿú6‡U†w§­ÿÊzY`‘û?�:ò© ’—ßZÛÇzËér¨ìˆK¨$µÖÏÑò•„¤¤*�3¯Þj�?;/¬,?÷„¥Žúüùìë¬xÉ^”gÉ��ÞÂwÂÃH,N/è8µ¿™ÏìÄxåø]TŸ•ÇÉgÖ*ÝfU‘I¯èdãɼ&f]®(ºº´Óyins¸K”I†#MVAÀMõ¸f>ˆ “ü‹ûqÞÑ#‘«ñ «�Av’$uÍ}WÙé¿ï+�‰ô¸N?îyH¨}×� Ÿ’Þé:Üjm\h¶`Œ­Í4eìàz:qàNÝ7�o\7f)`¶¶ÔÈ\)ø ±�|¶ox ·‡Å+WÐIÿ´F'­š›Ç4›nŠVNUˆÁ³Âÿ‹kÁ“_þ×½ôš�ÑN�)8zRwâ~œbŸõàxÛ�ª³v€sbË*Ç•°d÷ÊÕ½Å/Bi·=Í2›ÐŽœ�±<ÝPUWÞ Q#¹È®h�0îÎ(†½ƒ„n^ ©ZçkQõ2Må‚kxqƒC°t¬¼Övo°·ñ]ñ~PP.O6x6â¼_‹¸ó)È80ý%ÄŠ°¤á)ú44ÕrÅTà ™½B¶ëFÑÿHW0>„ÛJ!¨°Ož‚ºáÛ�þ[i+íbàüâtñ¥Zÿq4À K?‹¼ã½ î_ªÊëh§�iãnHhêþ7KÞÏž?Æ”ž¸‚)=t4máTU ¥ur'I�­" 5éìyÀq.ûIèÝÅOÀ¸AAjðji¢ ŒÕÛu5˜9ß¿˜¦ŒÕãN þ�ô£R¤4R¦åIéYßËàFpüƒ+ HFÑßš€0Õ4\‡w2Ïloˆ9ó4i�AdÍél,ö1z=vì¢Öâ¡ÝËþEÄ,øÅ�`2EOs«3>':‡ý78rÜ´gæåÖ–lµ¬âÙEQà?=ÛÛ· 2�O(…ù�Øn£ôC{6ëÁ•™?ë²®³¨ hŸzÝ™Wf×KU…N;ê«¡s,§Ížuçó@È�”é;Aå‹*{¾ðÏY; ò®¸ÍòJâlgô Lp=­Ëk†Â �؉ ó ò³7´úÏ…FOèٌ܈ Á4C½¯=Vö3óYóX7í›Í}å¶Žt4~™U_`þÑ^q_Ö¤½¬ùò'JlÝM*¶õ[ÓÒd†ˆÞqmS_$æ·Î„MÕG� 3(P¹q38†„\Ê 9ÕÂ׿"F¢¬rápÀuô¨ó#Ã+5m£eÒ¥þ6ŠÊ݈ ƒ‹lœF'Åù±€µÐM6)µî!¯Ir�G´=1’{’Q†[ 3xj˶e¶h"u¥{4ÃþHñÇa•˜Ìâ'JÔt8¼ŠÌör—ð«Wä÷)�¯¿ÁzôŠQó —Ÿ/ì›� Bí¦|ç茡°å’{ÞÏó1±<<k�0ê†ÆøÈœ#ÛãÝœ4ò^öù9‰CÁJ¥Èòv�|ްwC6�ªù“Öwþ=OŠÆêP‚ vãÜ€ƒcÞ7±Ç1-ã¤ÖŸ5Õ¡+Ã"£\Cp'oUWûþ.ÅÉöºµ}3ðœüô®Ó1µL¿ßÚª.xÝÚ…­ùðÎLƒcKÌ‘ú”ÆôÉ�tph ñðßß®M³W ÔÖ‘Wå˜#ýOÕÔ0’-—ö²­éÕƒmÐOÇE|P;þŒ)eJ(YÐŸÎØdsì8ðúâT†ãÔþªÀ]¤`Þa�j#ü�L`,EÙ˜íΆàwÉ6y]ÇÜúöàG¾„ÿ\Õ÷¢«îi NÑí)`dàæQD“ùþ‚éÀ¦. 9o>à endstream endobj 1659 0 obj << /Length1 2123 /Length2 22739 /Length3 0 /Length 24053 /Filter /FlateDecode >> stream xÚ´ºeTœËº5Š‚KpkÜÝÝÝÝ�Æ�ÆÝ!¸»‡ÜÝÝ‚'hðà.—¬}ö^ëìóý½ƒÍ|tÖ¬§êíѣɉ•Té…ÍL€ö zf&€œ¼Šƒ�±=3 ½ ÐÂÕÖØÀÂÀÄÄGN.ê 4Y9Ø‹ƒ€<N�%@ÑôžûÁÄÄ G�Ú�ß�fO€<d¬æédPÿ”\@ô&Æ.ïn ½…•=�ú=EÔÁÑÓÙÊÂô§+=ýŸJ²E2Ʀ6î.6Vc{3€ ƒ<@ÁÁýÝh r°˜-�mÍæ5 @]U\E ©¢¨®¤JÍð^XÕÕÑÑÁù¸ˆªª©KÒÄ„ÔÄ@ :€¤ºªÚŸ¿j@ûwþtµwÿŸ>ï�ÒåÅÕ„Õ´•Ä™ÿ¬À p:»Xýiû_Ü(Þ™þ¦öžjîì`÷W•%äÈÃÈèîîÎ`áêbpp¶`p´ý‹Ÿš¥• ÀÝÁÙðþê ´þ%Œ«½Ù»œ Kà¿ üÙ€œ•)ÐÞø'IÂá_N»w)ß“Þí ÿ{ô§¦í¿Â.@àÿjciìòW®œ’’ÀÎØÊ´7¶7}ƒ\]FÙÞ�f”ÿ"ˆº:;ÿé!ÿo—óÚü›ºˆÃûÊôl½}�Ýÿ{ÇŒí]]¼þ¡Íÿ^¶©ƒ½‹• Èå_�s+[àö.öÌÊþ/›¼°‚´„¸ª½ÜûàÙÓË;¼«cÏòýý§ž°˜€‹‰ÀÌÍ`zRq{3Q;»wÖ.pä³z× äàìÉøÛÆÞÁÝÞûÿá0·²73ÿ£½™«#£º½•“+PZìÂßMpÛ,€ èz˜Z2þiø×¼ü13ÿ1¿ áëíèà07¶uúZ™ß_à¼]ŒÝ€�³+Ð×ûŸŽÿ�à˜9fV¦ ÷Q?.pU—¶7wpÿËüÎäß®ÿª¿Ž*õû95s°·õ˜Íá@ï#AõÿÏIû¯^®¶¶ Æv@ªÿ£éÛYÙzþïÐÿ ÑþaK¥ààlglû_>+ + ™’ÈÔò_ÒþË. 2~Ÿa{ [àû¶üeRÿs¤lßg÷ýþ±ús}è™9ÙÿË÷>–¦6ö@Û_.à»ÿÅø]ý?|Œ’RšÒrJ´ÿwlþŠ·7u0³²·°°sŒ���=á˜Þg�…�àÍü>Øf@�¿†ÀÈ`ïzO8º‚|æÎp6”ƒÀ(üÇô/Ä`ùqÅþƒ8™Œ#£Ô×»OéoÄ`Tûâæ0ÿ�Þkšü�¸Œ¦ÿAìï>SÛwÉþmafz/löÈ `þÿÎÁÜÁÕùþ÷Ζÿ�lïk³ôt´þ³à»Íêð�œÍ?à;Û¿!ó{÷ä2¿wwø»ú;wû¿Ù°½kçt¶røß?6'Wð_'áïJï<ÿA›ù�”ËßËzï rwø‡û�¤ë?à;I·¿!Ë;+ÏÀwQ¼þ&õëtþW±ÿ=`J.Ù¿n¦¿'îž>aU�³ƒ PÓÊìýÉû�yc�³•‡.ÓûÑg~·¿ÿüû?ýÿÕ€üï[ëÙ""Þôlï,éYÞ§†™õýeffáôý_¹¦ÿzüuí¼�ã?·0ôšÂ-/:˜ò†X§5…•û‰ÎT@“s3œ|ÅÐ’I€ZΜéÀÃËß& ¶dQ9ÈIñèû¥Ú—h‘‡`ؾn´&WM_›) íûÉûá!‰ �çi0¨eÉ/Tt‘PÊä}Ñ.eûžÕ–ÐFP?åîè~ˆa™zC½L%Ñ«h[+€v/žgnþäl‹æ±„‚Û‰·4Ó z{ømÜ'¼L3gô% s\æƒco7ú¯¯–h‚9�³ȯèÚ‘}´Â´¦]£è+ÆbjyП0‡q ·X8=põ ³Þ#æ!Is„'—ñ2Bå~r#|Õ¦I`ÁI¶—?&)_e\ŒRmm€pÃýü…~,£8:^H>Š™TÕa² ¤&0hî þ(ÝϾ K•ψ�F§D�tF+ùS´*�lXÁÉ$CX•Ö55ä nâvÊÈ£%p MlEáûd%’ÇE8¸Mc–¨1€áûÂÕç8êf‚ÊY °Dõ¡‰Z(DŽiú°‹q?IS¦ågÒIi¯%ÂxµZ“ k/ �¾á±˜ËûʉP˜ò#Ù-}z;¨³‚B7Ú|ç#�¬µ é\–fÄËqÍãÈN¤w4bKÑsάzöÕ@÷WVÊ­ôÌ¿²ËŽZ�…âdcG¼³¬Eqùص<AäÜ¥>*n­·f׎E�…Æ /mí`òzŒÛß± }ñ‚0i—ºg©”GÍÔ‰É&ÑÇ\J;ççtvQãPÑ¥=±O+4¢?9]VlÏZÇÐ5¥Éíp—+¸ÃD³wÛO^¼ÌÞ3µèÖU¡¼ � oÚ‘ɇ»'F|ôˆC«žá*åæõ¤�dhà§X"ÃêmAâò2A¨¯gjwJZGñJÚ�™-‚.ÄߘP!ßHjû«�ØÂêÀ·D°¡/#/ŠõOWi£3¨dç�?¹âµ™b'ç-wû737Dî0«Ts¥Ï££t‹O&p“&ïåmŽãÉC-ŠæÎ¾kN›5“¼Éx VÀ�ƒ“–”Ù•$�_œ 5¡6á´ûòuÑkM£‘ŽßäÿÈ ôAy¢ ó“Xhè3ÿ™9ø¸:s�˜BêeÈ¡†j2 sŒôüc5ÿÐäÅ¥oKÝ’Ã<…¬È…›Ëeb ˜“q 5æÍg†kTë÷½®P¯Üy˜$¸BâÌÁÿLà+§HCúš‡˜ëæjh&ä[gyé†Ìñ¸R–îóÂ=&Ô¥  a¾yC½B‰e›Á€zQ±¶�3OÈX=%HjNp ÎQœ¶<rWà»ä%ì¾…Â-=‰æd SµÂŠÐn²y(l ¯c2¢Œášµ¬Ú£z¬l¹æTòðECOÚ;­´—ZÓEVuZ®þªc:ä[g?:4y´þv„ýMu˜r…—PkèUã„5¦�¸?ìÏþa³õmìV²�¨MãúÜ—óAðÁœ\EíŽÐ{¨š¡òX}ÎÓ]|ÈËTNõ¹8ø”œ9ùôü!Ü9 +dª¤õ\YžÊ`9\[w”1yT¸'–ˆ¨�¡#ÑqÖM0€1Mëà4.Œüæú^Çþ|5s@ë2ù;‡fô[—e ˶S”˜-ìt,†”ÿkÁñHø¹d¥¤ä ‡tbŒ�J«�jo[ä¸PëZí]Ÿ*BÞ@÷(­žƒ?á>ý²âÝ©Bôégwv*þÆ}-ß/ÒÖ2¯§ƒ¨ëŽö€•ßb�||�éé=ЄpH„]¨xC³lI".ˆ/XSÊÍÕxdQ›Z/3¯4ä™�ê¢ÊsªE~‡ª¯$ÍêcxÁ fL·öV!玬RQ8ÒgJÔS“;ÈEÝ'sß ˜/2½GÑŽ|¿Æ²+âe»Í"«]®×¸µm¯ðÚîN®4y‘w‡]€OZGÒ‚ÇJïs4 ».ö‡"¦xŒä ;(:8§£Ú¿¥05ªWúȪ‹ñt™ð>’eB&‡veUaü˜[c)ôÑ�ATJÇÙP¼@ CÈP3ö¼"dùp:ƒƒÂødF?1ó4(¡i!-ŽÈ³‚+©ÂäÚ°j4K F-¢-®†'=ÐÀ44bÒ·Ýhq‚ %ˆ®œ_ds´Rï¡lú653£ u:7Z_f|#nS싹ïçfX¾°]}þªl¥’ÉVj/ Ðn’�BšÞój¢ÁçóSš¼lEnâˆå!e•�+¤ó¶&xýÀ­Î0O XQß�çØà•iÊýäÖéîð´+ƒ¯´Ð+Òç ¯¼)ÛŒ·ÊßøƒRgDšašVƒð!|ôAL~O/4H×?Ÿg»®;Âeð8ÅÅ3„}J•Z£Ì¬ÉþõÛB¯IøÍÑù²üæEá@ÉaèIQ{.Ƭï§*7·V[#ß�4mù8Âö 8?ž§2//*0"û�q¬Ÿ/µ3êÊ­D›‡òh{Qqp©Aá"Ð¥ëåÖ „§º–©ù _p³†{§Ýüë9—yD%¼°? ×(_á¢÷ñkñã–¾*å6Jè–ͱm¢ñÖT4Ú'Êá"‰úuî:•ZÌñ©jÅ…ñ#åJå»Ëç71<»0wéÙ&è«4aþ;³3ø˜ A âìÛô·¹ƒÈž}o?qL�{ ¹ˆòКŸ;j¦aæ|HÒlXš±+‡Ñ'¥L°¡žcî�F¶€bÆ>éjŸc{&>åùXd$²ÍA<[Ã4tiPÍ £¦TC4¸ÄP*؆‚Q]q¬#;QJÞñÏ·²ì0Eƒ{{Œ7i)SÜ0Ñæuþüª1ßÍyK*ž0;SBRÜcx°Ã³ÙÝËåÕb´Å|šyøM9l›ä·ê k5/%oÇ£“72RZP³ÐXÔÊ!ˆÍܘ8�òAúmºL¼†¾„îkDÆ$âºL–h+Q´ E­›£JÊj¾Y â`鼋í=ùª»Â Ïî�Û¦”_¥E§îg( vü„Ú¸uB~¶ÓMW›Ãs°�ÅËþ«žÐ’o¤#F}Ók•�û"Ÿg8š4 §Õœ©(Ÿúd~ÃޮÕfÒ×Þ¾öNÖáHLÞ�aüм®y Ð9sv߈xº\lUDÛ=âÉZ¥Ò= &“•ñ@Tˆfð�%FÒ+ ü¨ÂD…bƒC[ú“)‘âãOnèz¿ˆÓGòKy߯JýÌò¶7�á´ÍãU멜™Õ¡Áê(Äð®¦sûyÚdŸì ~» uÙY|Ë©.èïÜLž�o‚ëc˜¼©#Îçüˆ’&À¢VÓqí·zÕBúZ” µgǪEÞ©b‰òúAóÀ˜RÄ~8…]ÇúÖÛ.¢K`h^M¯ãƒ!®âvŠ<©(ä­þ™-pÚñ8KÇ„/å•ÝûÖÙéÌþ4©N¹7Hl._Eâep4cªš«�Ý“¨èr,Ðå:ˆ`èÇL¤�T¼M#²5¬9ú9Òû±@Æyü…tnËßÍ|Í£’½’œ!ÃËÅ UÊÀ޽M|j­ªv?å¾ÜŒ÷jÙ§¸¤}!©À E¸¥8»šOŒÞcÂÏ`g/Oµ•ÄÃDãJ�ÕüʇIÉé®e¦”N.¿Íæ5߯wñ¿�S^�ç°\ ‘-¡!ZÞnÊžyÞ@Ñ–övÀðAé1ƒ+úìÕ'ï X&ó%}!©Þœ#“²…'™°€ž7ƒÐ Ú(®¦û•x3\6Sšš� ¶ð�0—#9Ì(ô;ª–9v>áht[3²r`q[ç"¸Þ\W“ê¸ÕÆ7�Öã gKLÙZ�Sº‹>æ|Ê=좤¹‘nftDÇUoöã«CG<ÖEgœ�]ʼnì­êÜ 4óx³¿:/qØ’’îÚô‡bÕÎ�Ö÷°ëS'­æ[[”I­¬¢»‘~Û‹zy3\J‘ƒ— b�¤³ÛFKnÌÚb/ LyVšš¡s|#Piü°š!g¨EÈ¢‰·3 4ÙVÿY¥�¬c&»Y«·áS ¢…¬ûÀ̽çdC•[f;§<ž£¾ñUóê¤3sã×W°`UK.*ÛN÷¾sŸäÝÈI ùÈ,­©DWŸâ^z¿ŽÍ^­OÓ½³éF"¡"‰)"/oJsü�ñ˜ ha’þ þbõ³•ÓÖl“ ±Ò©Ç‰®œ›CQb;Ž  |,OÞ˜Å&Ô¥ÛVï=g-ôrS{æwqI ÓèhJ#+ÄPòß:ºl�>�“'–”vo×ÂêAàÁ�˜{ÙêñI&®ÐûYÇ/=÷¡5vׯUÎQ¨ÕM�ÇãD¾pú¥HÞ2j¿€w$¨‚ï~Øê`2Q'S>„dÕ ÝŒƒ'`c,ú´#��qÕ;¬{“Á$)s4pÏAµ›0yÏU.Ü]÷{ßõãÿë=ÇÐHˆ™­wî>¸j1w; Çó(¦ û´èÔŸ#úðC$àø�UsòS¥�‰”jı³ªÏVY�—ß)›Ë…B‡4g‡~ÚdíZøyg³*[üv¥ºŠ0¾$Ò»û]>hŸ4p &Õ¾'R¤·¼‰† ¾,¾<öˆð­.ÑWÏwí'ÿDõ€„O—‹vk‡*PA¡ ƒ°Sx`èÝÿÐALRiî”%[J_HóeE»©”uü2¯`r �ÆÜešä‚”Tzbƒ�ÓŽ¤�““Îà’«™ŸeD¶�„<ÚåÑÛ;«VÄ ’W–¦ÂBï¿Ùž@‰´Óʯ:sѱ‡æZaª‘ÒÁËhC2’6ËfaÃvÔ…bRÇC.¥$¥Åv�Û~|Ÿ~=}öé•`$©ˆj7 žú-ÏÓ¶Š=ú»¡P–ŽÝ~?gøÕ(åpBÀi ì6P‹ˆÑ¹b'Z³øw/OŽìCôk‹3RÒëò˜VQ©Jy}S?o ˆïq"ÏðI,8„ÔÔhÊâæ6éIà]»Ñ<ŽZ¶ºŠÌ«z‚™—­À�x_àð'„^ªKy{X{ì}m›ÌŽßíÊaN-‹bpTTÚ«f„ËB¯Ò1ʳØ7 ØáΓƒ¥ùÑ"ÖÜ£jwq"™ÕÖØkY";äúyº6é]ÔŸ¹3–ñcŸ¦,¡U‚|ó™%!:‰ÑڣݛÅÛg÷Ñ·“åÏáñ`åzïv�ã¥â^‹þڀö‹L5 %fþØ6ß±§BKd®Za²ÔÄós¨ã–‚ã›jK/·¹Oœ¨½ë’¬Lv tëÜ¥jOzkÂ6» ;½i ¾‚¦ i·Ždk¼I´¶ŒS8¿Ô=zOÒ€ÂUhé7¢n)>�ö�\º;4“ídãóõË^¹ýæ†i­u²PØm›øTÓŒgW¨°]‹áüwù~WA 8-}uºµ\9WC‹®“ë ý~}‰„ÒðâìÒáypÂWϵ£ûËŽWþu—‚Õ”æ?( ݹ9" Ã*䔸|¾Ìh‚7^(ƒW^ƒ‘‹¢VkÉ�Eäù({¼ÂÒ"j å$ò6eÈ©~ÁVH �¹«¥@´bMØ(§˜/ÂÞýL‰éí;E1zÖÖ9ø|&Ð¥I·KÝRfªëÎÖ VgbO9•ë^uòêÅþU²•½Ûfæ2ìUuD<Þ‚DòöØ÷'aÂÃ7â²ÿ\ášÈ(ŠO~Û „w ƧÎ\m�6¤ H ÿô§â¶Æ‰ÆÞT»ý\•Œ¼~N�d`†APB7¶ubìõèŽ~jK{ß–·ëØ%B¥'×2ñO�íPœMô"ëºM ¶º·Eúá]Òþø³Kd)Ä™gF_¹N<ûQs§ôÙÓ±Á5 Ñšåä�Tª*/�rØ'è[Á{Dk„ÍGõXbÚ¿ºƒª´_8ìÝ iWJ]HŸBìªç¨} %eîñÔCjÔŠOSËmÐ+TÖò¨(Ûz�ÄëQª¢Q_[¾ø¯„ùQhk�ÛXµäP¼íua»Y4kX¼}sguR¶À•`Hè‘$\òé ‹—±.n¤üXöôew”¬g%V"Ñ“Ï99Hbòºb¶p3ßœ _¹š®´0sK¾]�Üöä[BHïN(Ñmy™5ÁÑ×H™€ —\"Dwm—ÞÕ%o”(‚%¦¤¨zÛÏ^J¥ƒfÝ$w-áàŒc�#]•È|'Þ¨Ñù0£™ã<ÑÕN�[{·­�Âür½º¡JiJÕRúk‹wµçµ»`‡¶ý ~t|ÓÅX¯ÙúÃR\@«å�W…6u�ÜÝnÈwÁç Nf²Ùg•Cb„ÏVäꎄ†ñ*”+„uºcý�_SDH.A¦å®Èú6!ù½þnå×9igáo*5·çBì4áþáº{¨¼|ƒý![o÷f`IJ¦-="jßÜÒÅä™8È^ëQ>˜/Óh½wÛV ðU~±÷�®ã*ƒEÝ­)ñ©T|†AóÞª`Õ.‡e».âDþŽöK¼�±û„[öÖB%9­æO]]i î"û2CIRöUð«�ƒUkØgÑœAêVÕ§ º(d‹ˆI;N¬Ä€>/|Tzÿ²=¶’˜ÝZç» ¯pZâÙÕ7]ÚÆF°úRý=Áã­æVòv³¤¯ßZ®y¿`íïŒ\¤¸ßî‚Ýï7 ÈÐQ) õ $ûD²§@çCèû8Îô ®¤Aêq2ìÕc|ÉfÊmßz¶¨z|éfr½nëA÷~ÍãÉ›Os,ñ°]¨ßÿ ³eÊzrãìĤzHBÅ%Im”<ºõ•†» ýY*¡!×Ý•SìÆ ³­Éݯ¢Iðe_ª“6úñÀ¾§èÅ7¡§L�A'=8�–âÓ ‘7¥ÛZÌ]A§{Æ“í¥åÔæhä4�®¶ˆ�¹�=AnÔ\ô)K½ìÒlI|¡gFµˆvh“]d•HÔõ¤Aâža¡iæ­½5�ZøKø�d›Q¢“¡îŒœve°vOrÁÑÍFúv¿–ãé ͧ–meôÇOª«"4®ÞæiЦä:²>Ò/˜KOÄî—ç‹ÏXùF=)[AG5¿ffp;™‘}i¨Zâ¾ó~kÿ93wë,nüµe¶=z$)rZÞåTÌG¤ój�I‹›”ÇÎó�€‘Ü3ºp¾ÞC@+±b`ÿ1 [Ì eWü÷F,tØRC?è…ÿSžüDÂ'Š�Ú° ž·úk»ñúôºw.9K.ÙÆÓ-×g?)Â;¹xõÍn?‰¦Pœ|éþ‘Û2QßàrõCÌ3�±j]ñç»Ä¹h–jtL}É׋Ŋ„dXN¡(4„)|ó©ôx‚HÝbµeNñЕr éýù¦ãŽÕ)†Oñû`ÒR™9Ì<öêˆîž³-â�}#¶¿·+Wè…<Ë/o7�lâ“¡05Åu¶™öeó˜{m%‰�1dƒÕ'ð¼6ìjÂ@’²Ö˜'îš0²ïj¸<¡âþ0”]Ô%›Ê/rUgçÊf~θˆEÂÅw3ocuú”Á«ŽÝ UgÁNå€bxÓMIíƒý¡Ý·ëGeÈ�o¨Ž•³ª¥qÒ†�"¨ ×£FWD3eåÇÑL¶³Yë.û\eâ¸ØxòØE§äÊÃUzÏõõÅÖ@cÑŸ•`H¤�tŽI€é/ºª‹zÅ9�oýºÁ¬ìÝèkþ‚�ä0Á×^ýZ~QjÒîh¿þ¹†œ 6¦ò£ÉÁŒƒnº_ô‡¯›jÞ–EDýR8�pRиŸ‹6ºûo·O<šx±ú%êõ?ájMÐH�Ä1šƒßÔñm�òx>Çv˜v/} áƨÐkuõ:á‰ÓLAjGï�qWñ‘š>¢yñHRAÁÌWMrQ „Ã}ÆÓÊhC ¦Ž†#··ƒÂHŒ*êÌÃ7môƒû–@6n»Ð¾Òk SŸòq�¹·‚D<·›GåŠãk„—¨z·XdÄŒÀ7Åo½5ƒ8¯õ»ÁËb¼^°WS9†�ÍW´7mÐ�bq£ßÃe%î $ªä…�òöµjŸ)¦ZÖ*;ÇèguA‹ÓÎ}¦Ÿ]Pت·rÇÎ"6ǯ9û´ãçqüƒ¿z¾�k®ÚùèlZÈar·S'Y'�±2rdŸ[Û³mÂ*´×¯Ü5~'²}ÑìEòËÙHnØáÔŽîMOŠHIΠ܇Ń¢ÅŒù2ŒŽërõE÷-.?ô¬ˆ­be͇=å ŠCo¾¡ø�ØfIUNañZúLO@Il‚b®ðçµsÔlиCX¹ˆ{úþòã¾T·±l0Û²4`è4È®ª(9 E�7Z‘ZmÁ&ެ5gᢉ ‹ÁñKi®sïϰ*·Þ´?_Ѭ>vQø–ôFÕÍ7U?=á ßO.¶WäV�6ÑOeKÕtÑ ”4Õzâåd8Yоå.÷Y]] 2£Û­³˜� ePGI×’™®­›f/ESߥ~F½„—£Î&²@ƒm[PKsä¥|œf¢4 ¸H“gÎPŸ² ®÷ [UÁܾñ‚ý)+°!ç%ºö!«œnõ0„ìøþT·TCâ%9pSÏÁc—êþè0ØR uwê+£¹ ÏÈððQ±ûml[ü‹@0ÞspjkDÑ¿?Ãîµùù¶¥øÝ³³:­2&/6a+·µžÔáh�¤7Gó2v{ð›~�#…9æ; ÷µž×ãG®>ÑúÀœnÊ�~:gç|ô/t»Ñø€}<¿@tcTƒ!�Xâ’¼‡]eÅw¼Í3ZõEͧ³©£¾½.RÊÁÖ�4®RúÊfus°â›LAŠ­è¾^R¢~Õ·èþ“!¶ÄTZKC�œÝ_©³gŒ¤ÍS‹þK�0f½E$d²Dô~r­’á9p�üÍG½ô!È;5ÆÞÓØOPš9è´›�ªsÏ7òvÁ-M~Gr©~wDzÉsM¸w¢+®+‰‘øŒò7­-¡d ±)E[`Ë‚¸#…œR:&Â�X<•¤©'A¾v ªzEwao쀿 z!§èb¾Ë�X˜Õeúˆx—!¡$«ÿƒšVÎAm<Ö4ï©t*y Y¨ÿ+võS¬Ç¹~ûž‚úØwjPž»[ø©³˜ØcöÉRhùœão8Ð/GV… nÉÞ7èsxøgºQ_‡g—pë%oy ¦’Ô„[TË÷c©¹|'!Nã0×CmG«u±Â6‹±­WˆÖ�"ÉÊ4ÅÊ`!™.>ÜÕëã‡í|T�·è_K>FiÃVHbë|+òlÇRƒJ<û8åìúÒÊ™ñ2B| Ãù‹=/–}îtž¤�ÒQT鬿»éÒ PA•´MÖȶùá0Y)ÂgUÔ÷,ޏäA³D‰.ì±þg 5­T±†t(B�VóoŸ<±œÎ8²Ìö­›ïÎxUsõ¡µphŠoò-z…)ÓxÚÃ`|G4_�æŽÂ-PƒÔ $g¹2LðŸJœ)Ã=&¾J-«ÄØ”è�¹!æ’בùÊu9}µ3oû蔨§e—ÅÖ; mõK�¡•=?Ç+Ø %ªG¡®6eÓ°!üÙïºBÑžì¦(Ôôö�-)XèÁþüaIú:CŠrëìL­!ðÜHàrx£ÊÔä£xí0'g?;Bp3•tÔñçß”{�Ò¦CÉÅÞhÕ|gâiY)»ê§Ûu­kÅ p~ìhõää‚g{ÕÈü¸û…kq^à‚7arà3Ÿ‹�{8 ›>¦áS¼5\Ü_„"¿¼Æž4Û »áC‰q.Ñx—8äï5ÌÜÌW{CÙ¡^g°Èì6¬‡GnÍéËü´†F…9’O�ö xiΫKQ­u(>x“šà>Çväý-$V[æµClþý«vB}�ãÄ�²×ûCû„­²Ìv÷bø=ªoá‡Ævèù&Ÿ��AäE7—×ý”XõæW³^ØÆß�;ˆ÷b~°Ž3Éh¼óÛÊâ œ£u[âSP(Í¢Iðƒˆ¿Š1ž‚�ú­ÒP©ãá’r�ßhðJ•ÑrýH'ò3´ÿ>í|>Õøhb`C §š�ª S_œçL„á EͧoWQÃ>"`aY’]¼º[ÓÔ½(@{cL¬-\þZó\xqö,{÷¶ÆÔ«Žÿ‡è–�»*Á¢Sæh¹ßky©ß΋ùi¯iåç´´¸ 2]>žC3Ò¸/qDÓÔP«m÷ª«"'oÒi5í÷¯¯ñ[ÆêÃw›) zÅ÷°ÜçÃOÞ1 KR ©ñ@¿¡Ä›ÞB¹á-Ñrø\­ìµ»&ýiàES£Óì†Ö³Iáà|ÆjÞ�H‹ñý ¯Gþ9�c„œOTbµ7'” –Kíq­q(ru'Ç¥-:û£à•-X¬(áUæ@ñ ±ûç¾S"øÈm÷ºn�â—(;R©’¤=J½ t2þ»¦XɯJªŽzuNmפä¥cØ:Æs<~L˜ë¦&WjS]±³|ª’� Ã= Y_ƒîx?ÁòGòÑ~'j¥æ�ËZM �ÀA'â�ÇÓªpüÏÙvéž»)Ây©.tGðxÇ;f/jéà;Tʼnî-Íâátp±ùÎÀäz{0š™ b«ÀÏëIìµOª�•?lw©†;€Bxê/2ìâ-Žì™+,rp™Ø;4ôðké#¾1ÛiåÛ†âç�±[ÓZáo­1-” uƒÅÁ{›^N\eøÄæÐ9q›G�íÍÆe‚Λf5ñHür¾æ>æ5äÓ]ÁV€µÑvr¤[`xn|ï²’xã+ �Ø>Dr3oŸ Ã}ß%xU{Õ tù,ÎBkñ¾gð)÷™BT-¯Û4PŽ�N•uœ>n8»Û¹¬áÞ‰ ¦¹–®"Q©Ç¢yjb!§ƒºîtñƇT.Ýš·&6]¯TëÜ0ü$1ïˆyÂÒcÆÆH ©�<Òíâþ‡Úž¡��ú²ûBý(ú:rœ—‚—>ª×MB:¥òÅŽñò¯ØQòñRL²]·x­ÕG|lTChv Í3Û¤\7DI#³M}Fì0.ädaŸ3«EF=ñùÉÜR/ûC[ú ƒÎZFºÓ™+$ry?å!‰C¢/uíHÛ¢¹¹¦Î8¾UÎÌ,†$ºEû«¦P‡£À=#õî aR4žH®oɘ[‰Ô"aÜ«N„­ ƒÁ¨ä­b¢=`þXŽÃcµÁçÊ=·ðÀ�–FÉécS†päØx8ð€„þzTY Ä]Úƒðö%D )ã)Ècª$¿¢j ²ê3ª ˜&ÙÇ�¥Qœ´¼äÊnX¯‰Ád8HÇå‘ÉËÃq6q?ÅÞ1©b..iŽwdJ …ü(,:"=Ý·Ôö³õFPû¸=QUšÀ'–;Tß›}�¯:7‰—Br‹©®dȹXôuÓ—Ó‡T†�ªØþ*:îùÇV$Àh‰Å]Ø.…±Ãœ m3~Öcñì¸]‹å¢¯Ž�·ák�I1ã3å9ñ…ôkåmòi¡NQé>QàçjOó“T0¹�Ë7??´(¥û¥Ræòü$zµÜ—ü…ëÎHm'v!Jˆßô«‡å ¹Ãm Ûˆ…`˜Úsx=?Ž©«XÓåUÚ¹Èf(âÙKïJ«-ª%w”Ê›“ÝÓ™û¼8Z©²ºBåÄ�Êzß§ñ# –ýµë”ßïÛÂݙŠÚx9®k럄t1¾ˆZɧ‰=qXOQ�ãð<ú&_5‘‘µzŽ3B’t´,¬ÜÖ¿7ma¿ˆ�ÚʆªNæÒš>ˆ+ɧ  ×ã77x¡%‡,óý> ·\éögPœš÷ż^'‡Q¹EÎfléwkt¶ø-8Þt˜ ’J7§œ`†˜ôþ¬e'xo’‘˜´éì™ñÅ ÍCŸ6ñZíH�³xû©(½e—}Oá�·ì+É6ÍY×K®î�ú’‚ X"¾ _ÏM½´”½Nì�u;�š0sàæ$#6T55Ï= ʧèãŠDÅ×N ám¿ã´ÏÁM:ÕeE¤§üR¤*gNˆöB›/à󇉟�cë�2|æ§o�XåŠo;Ëo…ë…s�HÉßaÐxt¡Ÿ+ý—‘h2j{*™ýæib:7ÙTÐǵÒóÞhÆ~_ ›)]møÁ «œsù‹vÍl‡‘)}*±¯`Q{wÔtUè"pšÛH)àZȉ=›.�¶ÃÂrޏ2_ŸJH¬Ú"„î¿AÇy;ù}Þ8t-îKô}žTÑ}ÊÖ†¦·ðׯ(Ç‚øáVtó|-ÜjAhÁ··»_Ó5¯;ƒf´3@«Sá8jЇú�õŸØüvž 83Ê’úqE?ÏZTÙrW0îM”@D×—ÙÕÒ8Öù ØÌ(L§©"íƒ4`@•¼ìøÆíQkçdнD0X1ËØvJ±ô”=pZÌåW{O�wOå£ü$ýò„ê#„¬�¸¬ßÚ ûzàÀEvRS}u‰K5�_4hÙiuNì£Rþ©S�'P^GBcîjM"e{Êpë(ý{u°0MÆ­(ù“×l¬(†-ÝÙ@¨ çªzºPcC‘º¢k˜f^s·óŠuƲ�ÛÌÇPÕ…‚þËjIÀ|´Éæwu ✕¸%á+Î ´ý}é.!ŸÐ¹Y<²öRB› žý ´Â²Ö*íä-Ïïä­Cgyúx PÏÞuC¢¢¹Ïãƒ÷,�_Cé·‘_“È�òBU>b3oA¸w(ï9v¢ðÍ÷2½-rñ&WXÇ\GBå’£Í@íifåé­tM ꎣë@�øøåTowÂ� ¼ôy~æÊú­ÏÛžQ–ŽoiŠwTam]¸Q„öt\Å5%­°wëIõ%‹ÍÒl¿Ú˜ë�§,<»tCb e¹b;Ô{dN}tš£l¬mù¸�FÝÙû¡RÌÊ.`Zœý‹¶¾IÓÚ³8ÿïòœÛf»�ák¤Äù+:+×Ǽ‡}¦zÄÕ_–Ä:_�í‰óÜ£™†a.…3Ü<‡û`,óM EQZýÈJDb1ÜUž+_°N¼q<ºNGª‘…2`¾Aú�Ÿ²ÍÄ­#îã\åøð§ˆ0­3{RôÀº èû–üè�*×E â!Ÿl÷õµ¬˜ãö…6l£mòà^�²ˆ¡��ª)ÒP{¦K×Û1„’Ì"WFÁ 5:zÈëhIÜFü»Ž^Bór½õêÖ±N ·è5WÚy—¯Ð×µfH0Ëœ DÈY�$J*'_C…yxåÐIm;†?Ç%M¸> $DR{Ÿm¥þ¾¿µ�†™Et<ÔʼnˆUzó �akëEU“¨­‘!ÅçgB°ÅÈ:¿ŸñšãÊcEî/ý�Á¾¸�i÷ñ+Åÿ’²H—.£¾ÆÂÅÀ(\M3¡™ êŽ6E”9ì}N|ó›B„2Ïœ\#½.Ya N½enÎF#ŸöætŒ ”ì¨2šöª?…�ß–0ôͧº Ù,ëuZ›^�ó«‹à_�¦f^¸>®ý„}ýV–J‰ËkWÿëû·ÐÏxœš°„ôw/ëý;dæ÷Îæí��%Did%´�ŽŠ¯3Pü[Hf�~ذ­¶:èQ1E/2 +n�!'ן9Ûšìiây<%–2 E/>›Èï|ÝqÉ,+²±öqÍ2û1ÝùÝ�¤ÂÅC:Ü¥¡Î“¥j ¬3»—iY¶Z4œñ8_¦î^ÃQhmaP6‘Í8% ,4Àfu�XIåfx-°»4‹²ü¢ûîËiÄx,LrâQaù�³tymÜ~«ªµ0AOµê³îA_£ƒjo¾ÿPÅ}¨Îú`í¬E— Cí kAûQÏ�ˆË0o´ÇòE*ö,v«'ÉÌrrMzÌc�hŒ=Ü4:Þ’ûãâ¢~ö�;·;žÐ|ć{ZY�¯,ûŒ×•“)~뎎O „üã¨oA£ y¼ Yåe±bzwbÜ0d„×⌠¦=¤~w¿øÊ/F¾À-o¾©Cºfd·ñƒK†øÌÏ�XÃlóZ¿�.Š•nÂ?–ˆ2+Ý Ö‰»„1|脬œE€ z{¢�h/o>U½˜<Ô*m¿4ÌÅö›øU®+•û¦iyûQº":GÌX|ÉåjäœÇÙ›ƒFF1"ïYƒê­à1ÅKT Nd"é¾ãr>�®‘T¡òNRE¼À–r=-ýÊn†a¬²À‹Ûv éHm{É 5®sÉT¿r\ÿ¨=…íKv- ‰g[Íö|ç#ü)\hjå6’ÊhC rLêÊHfußåìÑÿÛoxïŠ{/“xåú ðTLJ^_½ç4bWÿ�mv·+µ ”" ÅŒÓG°A”)=UÉøyR ùÝI·QV,î쫜ׄQžû™ &¯ÚìMží­³+"T¨vÚ¶§2-¢ °Ä�ä‹âWÄç oÈhÄ®É6Zþ‘…¶çÕaõ®&¹ œB%¶C)ð`J½%ɵ‡¢&yä7 Ñ@Œ Ì¿çêÂJo³Y±ýÖ™µÊ` Ä+.æ‡r×IBžÌš½Âš‡=b»;°9‡ó9P—è·sÊN¶Óõ=µÀrR¨tÉÉ“ãoÉ�¶òRÄj…Ó¡ú"V/ yšoBÅ=!n0<õ°Ô_|•‘¬”i³ûDÅѧÔÛr�§[:55{üëcöÇõUVƒÝö(˜‹æeF’–EzÅûrÏ‹ÅCy¿ût�v±ìI÷/vü«7ô¢W‹Íd§ (Nݹˆ§Öä?C§» )k-‹0$‰Q7ê|kǩȲ�’™‚½dÌk·@oþ°×X wòL¸"ëˆ×|~�wï9ü;‚P§ HZw'o‡_ŠÑT £#‰´Ç€™�¯ªFVñüË+ò{ìÈñ,}á�3Qõ +©+d�lXª54üݯéa 8e^ÌÆó/,¦Þ#ý6SÌiËcŸþ>oùA-[U5OÇ:9 ÖD®£'•Gh[.f ê°c º¶±yš�î:Erp‡xÁÖSå*¶¬êûn;ÂÖ=I¦UDè¥íøå{ØÚùgN2“W v§«'üö«x[Cö¡�òðí@Úè""ÖÂúZ¹Ük½µõ‘dú'ñ*‡mÖÌ~ÀZ‚ÔÏ*n°¡#¿Ð�[vºq«7È—óýÓFzWé’�sÄ#‡<ñŽ_|„\>�@UkŸ5 Œ%öC¦Ùæ^wNâ«}^xáÇÙØ)ý‰7¦]Üd„¢V™Õ åª%F¿†)œ¯:DSP¯Ê‹+Ì2Ѹ;²yžr˜e/9¾5—ƒADÀiug—€Å\ã£æˆå:ÇþÚÔ](Fù±�àáSl»©‹�Œej7³¥¹<™%X9Z2® «C¨0L+Oj`ü]õO³Õòsñ¸½|ì„ ÄÉM ® ñ”¢‚ÓMkp�¬[ x­D@a+ÑÆ3,|Ûß ZiÛVåP×i õöÇ5HäªSÆF°™Ÿí¾³bçõk¼Ûz^~ÄÜÑ“¿³ÄFÁo8Ì{ÇúdSûû‘øÅD¦™¤ r«RI�½ÁõŠa ðOzˆ±šß4Wæ¦Ib‹¢q[°„;�àd;Qäütz”0Õ׉ù:‹™1 ‹‰ÁÁr6D›è D~‹¸üô޹nÓ7êLû, uJ8ü%!,»´‡I?Œ°@Ç4ä­Rkç!ÉJŽ#sÃyitìù˜ÞÇôëT_A)žû è£=‰J¯NÜÊnŽ“…­»q°wެáœYÂl-–,bP3Q‰û\¢ªµµse‘9$* Òž®JÑá2‡äz£ƒ™iÕk„¿¾¶aNÕ¡BÊw½߆»åŠÏ÷.&?njú ¾^mÿêÇTfatüªœÖ{¼l3nñyD5‹ ¸û „k›.Îsã¶.ö€@Š{)Ô£Á„BZŽ@Ø`žþ½’ª»î"Q±ZnÄä‡{`Ð�Ü­ü%s®Õl­n sl¢»>E‚BcX˜°*ìâZ –5~kÔäì�ܤ ö¯ g“‘6ä'i}3OoÒŽ7þ ︃.f:z Z·½Ý´~ŸEáIég…�Ì€^ë+x·C’éRUçhSOn¼úrI‘:ÏÊ�ˆúñïÙç_Y^G•¯_cëÏuôë˜S®¶‘(ÏH¼¿wŸ–µ¹æ§`È]<š%áàÌzQ™õÁT§É@@ ×5ÚHÅ QmÐsøYþ¦T×áM?e‚AØ“E¾M<ž�dsK\„šá’ÞIŒ õx‹ú‚™¸P™F3,Ì�à>è‚­bïäÎ�ƒ~*¿+9,1�ÑRdž<ÕÜ!÷#l°kù„¶”@ÕDædå*D³¶ûmv§Ü�ÛÇçn‚ÎÔþ´<ޝSêÉôRPRé·+…w¸sàØ™¼Ž|÷[Í€fcHØ-˜ScvÞÐòÜcç²l‰S¤™Q!ócñ†¤‡m¤ï”RòøMÈÕéÝ$ŽÿÙ¢-ü0ÉÙÓ&²§\R–"ƒ�±OƒÁ—ßã-kÁͳ«·ƒ‡¿Ÿv$ �b”}å�øa1Ž>¥R¿:ÅLW¯ä£�冀À‚` ·*‹ù�]U}j�ÉUÓ*tX¿-üç ÐR …ÈBh¶%U�ÉM9‹ � {Ë :ð>� ñ=gêÇ”‘[uUšòqôʸµq½"ÄåöѲ’""'h³r† ™8‰|ç/žPA…ådvÔf6´3‰kƒÖ˸$O92±-°Å‡:äI¥^ý 1Ú¿õˆ¶o ”©áǪà@lé�‚O=gsñ¶} n_½Eƒ£aØ¥�¡ÎÏyEÓ›/®£šú¹ýƉE8O)i¯µ·Ïf°%çïF“ʘæ5¹ê…ËErʼñí±’´’I[E6oqyP¹Ž¬a¦ØcÒ²½§!0:Š`g„| %ê§»?¡d©³¸b,dœžQYɈõ©Ô›R4ïñUÈ„+l"êhõ&ya(Îà†á$íúß˜Ì s&A*¬>òç]êßÊ"w<oZ'<åªÖ.ƒ=�«¯KªŠÛ™{)‰Í�a˜%™�ËçžYk�èR_ÒGž ú´¯ÀúcÛ¤GjÕ�àõyªÔ|ÖY�šêi½ƒû°Ã&SS û|<è{À^©P¸øûº%ÊñœSZAl~Ñ»&•cH* ¼ºæyèÊ¡úÉÞê›Ü3²§–òô9œ zW;HÅèÍÁβ¹ÕjlØrr9®ç#=�çsÓ“ ­ 6GŽæ³¶Š� æµ®ñ„uóP˜ ù±ÿEžx¹ä…ùp”3�–MHe•8û‹,&¢“ÑNÕt„q6“¢ž3¼½…zY˜O³™?ó D1IFÏ cvLÄùÞo/„].—…MH€�›˜šÙy_Ž=(‰bÃBþå+ÉŽø&t¥–H8dãýó†¥ö…ЀZLØ€.™ˆïÝ1’]ŸÅÕŸÃs½±èCài,Ø>äË·ÿú$É3ffœr}¤_1>bä Üh‚¿E±š}2VÞ…¼ÿ«��¢L×'6}kr¾Tïÿ_ÛæÔU £Ðlc²mž05ÙMÖÉÖÉ5Ù¶mÛ˜lÛ¶­Éî>}o÷_ìµöÞåJn*.Æ»u[?ÒÚæ \=Æ—5v$Øš¿ü0a™¬fR]çN}íôø¥&.£kBßÑê- Zbï°uðaÂûM+ýóvÿ�$vÏ0éd¢C¹^n¶8UAëÓìt�üB&ÆÇ>;„j\ì"œ]Q'>aõÈúò”09]hC%d£ÿfÚ78}Õ©ìY–Ž É/|p½&Ó�–;»gK5„(ï¹ñÅ(÷>~—®îš[⊆Ûöþ´daÇàù CwN2ô*ah§rzÉ…ò¦–b\.èí6ú€Z}» jY[®3Œ?xw’ï'¨Ì„Yµ° õ-mè?³‘eªm×DöjöÔð Ú>t�0¤ûw‡ ‚¯„Ñ[¶�Ûû‡ô•�†¥·ƒàÏEF ]ˆWA¿\è&ãR?ÁŒÆˆ¾�¤Ý;¡\žôJו#åé¡X¨”%sß4«ô[3ÑÓ›Ns ø)ùF�5¶�µy†y?ñ}–6I ¦ÂuŶqÓQ˜mšÌ™„£Kñ¸Nšˆ†Ê<Ü4ƒ~‰˜°Ì!¡�qüê &^=î[{ôFÛ¼^ äyÀ¸. T0“)Ìî”n9¨LÔÑ®Ý9û±Å Æ…oÜÚfQÊ+"¥Ýc�ÉÖ‰Tð˜ù¦Ub�P±y©‘ã°ÂguÜÍçþ:¿ì×dzƒôä§Ï„Éçf2?6³Gªd¸¨5*-�zËæ�RýŸìŸ3lU# ¡ÕÍ—Q¯Ô�#GêR4™ÎS¥ ÙÉ0��ˆ‹è‘ª ö…¡S Þƒ;˜^´i-�™°L^0}ÂL$¬d”Çøà ­T²}yézX\¦�_¹9—.eØ~a.K�ºßÛXË’oŠ¢ŠR²»4ò÷¿Ûº^Ú«Sóå—kàèï³x¸ÊeVs •Þ—ÂïgfS^ô“Xó•qmïu5;R¥ý^f%ÃC®ÓôdÄÑåâi–$®b°qÊÔU2%?ßÉT×¼z™Ž…#æþå%þ$2Õ�[ôìÍ „88?ÝóÄ(æÄ|w<¿�áÚ“â7g{–äŽÎ9ÔH§¼âçSbŠûÇÆ„sñê5NW~*‚cÛ™'>6&«Ž·ò£´¡£Â™­âR’è¬M˜8˜ K~ž¥?íž³Nyº†àËE >T“EmöÅIOðƒ\èU9çg ŒÓÃŽ¢ 9À±V3õ¡£m1äŠà¼•¹ŽÛ”B•.¤9L[ß%ð*Ǹߪæãÿ¤§<ä Á P^U'÷J¯„þUÍן¦®>Ž*Õð;÷¡×¯öŠR-ï|4„ Rºý Qã£r¾©³ä/wvoª2*Œ#œÙü6†EsEáWã�ñõ-á´´�§ %î\Ež‹¤‚­«\U"³!AB)šQ¿NW秪xXÍ~§#(çΆ·%ºç=_|¿Ü)EÜ1JnA{†‚ A>d³ÌFù=ž”Å27‚º<¤ôŠe‚ £ÓÝcš/QnKÿgÅNÌ‘ 1å+F#[e!y�šA¢âràÀ¶Ô§¶½ú.ÕÐPCΣx²\*3�þ»qª÷ Æá£¯‡–Q^ÅÁ¦v´«&âÌ:A“\Tn_ÐdA¬óo¸Õ, ¦ýÀ2ÙÔýd�@L‡�ç€nK|œÙP¤ ;qñxã 4±$:�z1ÊœîíEI|¦*ÿna­ê /UqÿÉ”ôCÞ‡š9ÌÜÜž^H �ðâ÷Ko~•Ò{Ãc_PlŸåÏÎþSugaчúlÔ'’2Ë"È;Èó› 3žˆÛŒ"\-qwoË9‹7Õ’ŽE)–(¥(ü&¼4�Õûe8µl¢•åÝIJ§ÿz­_É5¯'±¡dÿá€J×4jñ+ÚÏwbà"³`-iõ7ü"¬ÌŸ/ÎÒIãã�•˜ø¨g Äli ’é@Õåc~—V¾¬%“w fþä±›Nz‚­=`[Ð2SB�O>÷ÄY»îõù±‡2ñ.¯Ðƒ.F�·ONkæÈ#2.H�!FmÖ[–ƒ<30bï~?·_‹çŸùyŸªïs'Pe‹Mƒ›èÜZƒLÝ~8"×T‰!iD2+:¥ëGG}O¡Ln¦³E`•’Rù~=�ö‘×8Û´Q–`»Å«` ¢t2G£Mà ¬ÅÁ5|òC´[|¡[ö!X'î¿QN´ M™’Œ�†²cË5“xNò¡Pk™ö>A®SG=ýܨäº(ŠÌl”«m‰š‚zØ&LS™‡±4i“$™~sB”o{Qö˜!�¥GŸ<þ¤ãÐe‰A�Tï}î’t¦VéýDHÍYƒ[.ì¹êÔÇì1Ý¿þº"ü ã$d•zëm'Sdz)—\ÒG¸œzÌb¨ù­µ¥õoäól¿ ÖU6Ösųi«ùp.ß·$äSyæ>^àvø•ˆèµÙv¨‰¡Â¢ó|ÈÝ,¥è¡S�r›ãyþRæKæí3s-Ÿ¼ÂåOXÉKG¸�ñ¶*U=§]„¬eƒV¼Jd ®†Ýk´Ê‡›&¹·G§”é“à5#lA}Ñí�5|fMç0u@�nêr¯ ”¨ÿÕ>r7Áò„W€ƒiW~)‹/‹dQJaéÕR7ZO 1N“e„L>r¶Fär¾EÁè/—n!°|ªé>¡ÿU ĉ‘æ›M^/%nì\bÔãFPhRÅ£ùY¿±¼¤±òÎôx©ÁjŸÜUf1 ÿq-qgt»ž„¬Jç0Ò3vbŽ~B�Æ`AJæQó†ò1uÊŸ’¹Êmè�Y¶y¼ãçKeƒÿ9Áls¹Ïk´ÖÐ}L-Ü!~/9„bŸ€ßœÑ¡µÑ«“×òNfv°ÌD|Ó÷¶ë;ª8å8n%}†éi�Tr\/,(Zõ Õ'Õûu ª_ÒûÙZÅ3(ÙÖ÷^á¥?•1"áš¾ß K-÷ ÿHŽÞr]¹oAݰ¸�ÏÂ’hãü‰Ö߆IæýÕÏG×z£eKÒd«#T??ÿ+ýí –‰C÷c IPg &zBÕí"U’Ë�ÚR~0ªŽÿßùÌÉ5¿Ç÷7’k_5Sº’ S7û`ºbF!Qê\nÏoО¦Z‡97v>—R8LWB•6óÌüfä#gJÌ^òx£º¥&ÓT;òÿ…8J*-¼=—ïÚµv¬�Þ;g7vÅ8k«ËBŽ å›ìAˆ8¾ßÇcŸÎ`ÿ®wn ´®Ÿ4Ξ2ÉÅGå&ˆ´X3Œ»ÛQ˜þä-úOñŽ4ÕtÏÍ|×Úvݶº'Šð=܇`ïžYüSÙ4dÆ7ëJVcÙ4àÖ÷.[oL÷'6í-‚@ì|�.R éè wÓëç-Ÿ$ˆ˜`G‚$»™t6²0e!æ� %Éò‘ ØCˆU˜6§ûo1]0:i¼ÝáœA¶¥F†%®kOqç?r}IPqº‡ùÒa×Ãé˜~ôÊ×sÐ0Ûs/^±(‘èµ”Þi ðŽ »²‹¾[ØÞT £UÓb“ݨD X˜E n"t$WÊ8cËDÀÎ’\ ³”ûs™ÀQA®Ó‡Èhb Å1z÷¦¢=èðv <@]!s½hØ?¿Û¿·½§ —ws„#-ú²˜îàaŽCyS ¥áÍ7ßÛrߤPŠXTÆüû1dGCBmàˆw£½+ÿ•øç~¶\#O½­Áyþ þsX#Ïcå#;}ýÑdk³¬!Yî/Sí?ª_8ã¡X"tÇ‘÷šNSóù÷€w�²síþÜ.õÖN"Ë ˜»‘3ð3ÐáÒ`œ¸?/€ÂÇJh¡ÜÁµÍ *ˆpãZ<Ó©O˧˜÷{FÍ`¬ÍèèµÃˆüHUr¸ïq¥�·†ü•§XÊ7!Ü_¤Lý÷1Cž± ò3�Ï?ÄX*˜ç3ƒ‹³ûTºjZ|ö·œð×»i-ôN@)äR:ÿ'\ìWœ2rÐhTÚkÿ‘˜Þ÷6P<<¨žÉÿŸíˆ ‡^ÔHf}½AÔ¯L&Ÿ¤vG±ß+QI´TN¼'°'zût`ŽMe÷ÁòòS x¾ÁÚù]XJ|÷ ó³ö„Z$XNs‹”}sE.ù7Š¥ ióž;u;»¿øWrÍÁΰ�Ö €´©4⺠Ô\×É:æ†á V“Ö( ¾+¹î©»6Ç<øâ;ûn¤‚�Æm5oÍ «›ÓWڥИPV³‚CœqzoáZÿ&J&•ówžÈ‡i[)ï|«ã¶ó,âD°ÞàŸ;Bß1Œ‡¸Å6'¿í!z›ÚÝÕ ‰w=ÍaOxòêm‰õé«ZžÂ‚7®Š@Œ‹Û)½ÆµfYããÚžæw'=9n*OQèí"ÕpCkDo÷ÖëÍJT�¿D·ÒSjÈgO™�â�ˆ&˜ò2ÒlUɸtqJÉZïu8 ㎑ÿ^¡"^G{shK5þi·ì}Rù$¡öÕßVe«Úyð)ìùGp- 眓\fÎ8:Táj7Ùª¡»ÞZ›¼k�™mi] êÙ~ˆ öHá §Œw;›ÁÕ‚Noùʺ뒖þÔ¨#síL²Í8°"�u�ƒô»¤,1) 0°ö%hj”´"êПMœ”ÎmköGCð¨ìÉdmìò%uÛ¾Ó:ñdÝÇ­VnËÔ+}8oº@¹éF¿CÕg¬G´ÚôÒ��°i¼d`¹$ ®ÍD[]ðeÄnpp4'5{oPµm¾AÂ@hj ÈÈ,£ÑŠ{¡©Ô€€v«_Wsìx\urík@Ü” × ˜*ÄÓzyåñÛí*i–ú "kzÃÀ„ίQݲdu·Â£5Ü=ÎøÝ™áYn8‘š^¥—,mð�:� [/–‰lfÚN@‹cqšìd Ù”RšuÐξl믎~•ÆHìÔ‰‹ûFÿâ:øŠïÈj³`ÎÞL�GÆ`«“®·lgrK,˜.k¼2Á—ºrÁ÷É�R™ét cÜ™SÏXD+òñÝ‹ÖÑÅ•ö™qöz}[vQuáÈ‘Mc¥X*À§“˜4CÊ|¯ªÿÅ �EÂñUcØÌ¬Û3Fø]³0®æÓXíÜ-ççÿmû§˜0ûæK¤í¬XÙÁº¿ã8�Üëù÷Ùš!6ë©é993ç�Ï͵UÛjUçÚ"êb]áR-§kêý—¯4H¯ŽßÍN? #\úU?’¶û ΄ö9=éx#lâ—I,Ħl¡Y¢õÎÊÇ2•; 5cLipvŒ¤ ¯8u>ðVޱƶaáó†HrÈ&^"§øL*ôîàšEµoŸ¦¶Øâ®]M�~Am­@q-òq§mæÍ­Ü”|)‹î�JD,<ûò¥µýßC}h õjd®_׽Ъ©.{¾Ø†:rä•OžÞc,'¦“øÙ§ánõ¦R·ŽŸñc=;°T­-CsÊÁ&ÞÐòšÑù܃˜¼¢ìö§xØM×½V„A3u‰«Õºèa=íÏMÖ�€@2³rRFóQs ë¶æ_hòÑš7U¥W¶PTútGO‡£¦+“)\I|éfr¡¯;¹‰ÈÝbìQvÃs_Rk^·Ã›­ï5—*Ö´..*‰5Îà�†j,[¹W>îÝþH VÑ!Ý^I¹þ;ªiu™ÒØ/ š¦úsñ¦ÊµµÔ=¬å¨Ä›ÍÓ'ÌÑ*h:ÞʘÆ€Ws°U³jÖ(šîðÅõ ­¸C)‰dÔUkZBßSözr]0ølŸ$œ"VV1<¾H�ãkãéµ�sèS‡PÄé3€ýMnòׅȧ©€¡šÎ%Æé:9¸ÜÂü�J-5y$§¨½�ðÕ3¹%›ÉjY0¿¥Ž™¾¸•6£™@™¹º*÷ ��[¾¡b«�û³HåÔH‰£ÚÆŽúeûMÓ<<í¯ýëhßÇÕ»f–#>~ŸÑ {Þ%²~ʼsŽ×8| O~'Õ&¾7¼¯¾+®¡¥{C%ý«MßÔsÍK"JfÝ«äò|¯p’sŠA�¢‰Xªe R¶~¢ÁšM—!yª@O�(Qo‰:Ô—4� 5fI=�4P¸¬@ÒŠo¯±v¸I‡ÞÄêç~v®p,_æ»|,ÛnÎ(¢nz–âX™zDHÀ{…kÄ^ý�«¬ÅþpÄf"Ó`Æ}-ò�Ú =6³þ{¢}4½õ5-™)^†»H¬%Œ‡ó²Hã—J–Ù¶ìër¹ýq0ÎÖ7oP©ü¬‡¹[EZ“½.Âýr¡6Cè %j§èÂ+†�QêM“tÛ¯4DÍ%ò¦û˜ãûó±ö+1WýõCYfŸǨ�DúR4¡�¬Î ·»&µcÞÁ"™k Ÿ¶r1�ÎTeD•P8°®g‡vtNÌ/(3øƒÛ›«×‰m‘2…l¯°ÊþÎìAîn!O•‚Ô¢y¨÷~ÂŽ’ã«Úë0¯á¹‘ó /åÐ.xJeô|üdm�qØ0o½qÐcýjÁVí¡ÈÌþúçLì#$¨ÿо53=¿d¡Lx7 3ø ÙG·2ŒkÐ5=ÙI>Çt� tAñBŒu É�’cäbQË €Ï±LÂÜr��ä^­t/-B0‰XMX¿P†u6\ ÄØË)ú3elý‹åD4ñk‰Ý[éãÇ÷çÔ¢³Ïà=þ—$ìÛñ2”Ìy@X¤è M†¯Hñ*¼¦\‹Ç°ªǺ c^6Õ™°7�È-‰~– ##³�§Ë– à†sœ…¾•JA~:$‡Ù�½§"¡2ªJH%¾˜Àà„›Õ/ò+zÔϬ¦ýw9a¯fgЊ҇¢j„Ûê¹–a�jº—+ ÍúRùÜç².Ú|-JÝI'íä‘c¡&勺‚æ"Yðl€S´à˜ÐÌÃ̸Àçdr‚¨RL}êTùz¾Á²èZ¶# ÿHÉž.ø éà?Žÿ»ëTW-8%m°Q…ÿ­©ek6vÔh&�ÎGsÒRÇv— ãä&ÈYˆ_o¼v:âøÏ›ä´þ$ÈŽ€—&ô ÏIWõØŠêù¥Ï Zëi�5oƒLÚ}Â:LúGOêçˆùm1ÑGãè{Ù Ôë�Ô³%6Lìï·È¥×Ù™ò¹`£Ûya¹¯ArßgkP£2V‡:üœë'¼%Y‡è ÙècJÀ~zS¿—ë;5éºÂÉf¢C–akêb-«·Ï Ø5búØ]À’FÇ ÛòOΘ®ö.4ËË(ž|õ‡RÖãõ‰ÊG<@)ªý3ʃŸ�ºÙ7'á×Ð@ƒ4Uÿé•ö3àPªo\À��ÃÔ–³þ<=²ßå5—Uš%„C?-è«£Bç㢨ÄK% #k‹*áqê7N'{È ˆwk(m¹ÝdüÐôèG�júæÂxƒæ@ý^™Cf áaª¦žr °ë]þÛmÃ&h…ixDMÿŽ]jáÛ w¾E΢‡èÃCŸF]´®á“ê·«·\”¥]¶þű[0V²?U�.†¼Iê}»ƒPÄ«ü,ëûŸÝ£Š¬wšª$´VýmÁF *2`k�#¹šCÁ ‹¥Q˜çŽˆ0}ì]ä²®ð~0™ gøÛ¥M§ꉤ�Ä P>+c�‹�ö0ù�¡îÒØ#c%D&´âFGñŽ—ž¾&ì5€qêf½BÞÇ.â]’ƒ½Fò^[¨©«¬]é2=׺Oqmw¢Â¨bêÉHÎ…§?ÛƒÌBùàÇ̓uD³Ç9å>ÊÇ?D0õ¤NYgǔ㾚d(—À…­W¬�ZMÞr�á�{*,bo5'÷dÊRè Em'`ÜêC](sÇŸFˆäÚ7)5“kO¢É^ð‚‘uxñ�=u÷Jp¾,>ãQ[ÖdRÑT3oüc03Åx"¥ô°)• û;øEˆèÚI�–Om ,7G@*þmóÆLU9›!ÙG× Õ‹DPqn•?¼èR¥7ܙÛÒöÏqáæø~Z¦õ5VN~p†7ã!ø>‹eù!—±4ÇRеP,)pœLfóŽ Ð­ÏŒ÷o0H¢¢Fô�©Æ+ñ£ì/¤�›çqU<bÇý>ÑѰ+þåiW6rŒô`\¹§W t6-wê!qÄøÎ; ˵Âî©úñÀmÐǪå§^ÒììB&ÿ@Gõ¸‡™i_>$ÇêZ'i ¹;©Û† }& ï|¾BϾ;÷kÿè5Á” :l�tÙ~f»‘rˆš5Žìgž‘TõÜÏx[:ç>ÇX²ßšOõEu„®RÖÀæ¸ \*u§ˆeX¢òÔ "¥÷¢/j^u°ƒ½×“ø � c5ÖOcSË=ÝÍà�£bÞD=B8ÂÆÆ%P¶– �º™à”ÙÏo÷ÐLS°ür‘Ûˆî‚WGûú²Kˆ~K@¾HÖR´£Ÿ£ZU£ì´ǨQü8 5ù©W:$L±=²÷¿Ñ·©Ñ rf0íÓæ¿} !}¾Ó¡×o2ûŸZ{ ?ì¹I䫺%}&êÉFãR��ÑíxV-vp´MæE¶«¿p âúkLB?ýujûFw†ùê=6#N3G'¦Í»H…�Ù¡“”]³à eeR>'|ï›ÃHÿö8íjº!ôQð'¹/ÉÒ…0–ÓVvMlšxUæ£ü† ² endstream endobj 1661 0 obj << /Length1 1905 /Length2 22897 /Length3 0 /Length 24112 /Filter /FlateDecode >> stream xÚ´»uPœë²=Lpw×!¸»»»÷`ƒ3ƒ»&¸$ÁÝÝ]B�àNpw îò#{ßsÏ>ç~ÿ~EÁ°ZV¯·Ÿîgª¦j¨ÈUÕ™ÄÌÁ¦@i0È…‰�™• ¨¤¶7±ñ0©-]íLœì̬¬œˆTTN@k0HÒÄÈàq±¨˜¹¼å¾E°²ò!Rd€  Ó›Ó`ê Pº˜hx:Ù´&U°³ “©‰ó›²´éÞR$ÀžNÖ–V.88˜˜þ0ýÉgÈ›˜Ù‚Ý�m­& s€<³3@ìþf´ЂAS •‰�lÐê4Õ¥ÔÔ2j*šªêtÌoÄê®`§ÿÑ"¡®¡)Ã�SÖ�µ2šêþjAoú-Êoþ?uÞÿ¤+IiˆièªJ±±üyÀ èälý§ìi£~Sø·´·T '°ý_´V..ü,,îîîÌ–®Î.Ì`'Kf»¿ôiXY;ÜÁN¶€·W' ð¯Æ¸‚ÌßÚébü›àÏ©­Í€ gàŸ$iðßNû·V¾%½Ù]þWØ[#\þpÚýpÿ£Œ•‰ó_¹ŠªªŠ{k� d2{ t1qquÿe{ûšÓü-�purúSCé_.§ÿ-ó/éâà·'3°óö5qÿï3¹:{ý£7ÿùØf`�³µ³‹óߌ@€…µð�zç?gf ú˦$¦,'-¥®Á¤ø6x &%ð[w@Ì..Eÿá“Täð²rØø¸¬oC*2—ÛÛ¿©vFüÓ>Ië·>¹€�z!u¢�_2{ó=P$?°9 �:¬(Ëoè—*Ô¡ ±{YmI¬¿2ÿ ºeâ§äG„*%6œ¥Å¬ù)Mi> ´ó=Ý�|V®nçTZk|+)@søP‚¯½ë>š}ìã"ù½AiërŒ{Á [¶“¦Ç<:aÑüDÇ;—×{ìØ(“±úiãÜÜayX‡ï]è†ZXß4‹ÖƨgTÄ·…FÚk»kDF® -œ”TÒ&+ ËóÞÏžÃR+á×($qŠŒ_l`r°ßÌ$à·‰­MhnŽÊÙ¿g¾"’b+Oœk³¢ê!+“¿�©9 n©6hÝgnû.÷„ìpsgƒˆ¼ˆø<¬z«nU®SI)Aud—Ú‚hý<7t‚i$€«•éK˜ V1�ïòÐ [X�'Zª{èR\]�Á›:³ˆßàMøIû™Ó¾ÖÄ¢R¨‡¹Ø¯UË«qV”f1èæÖG!#¨+¯Ìïâ-y%´°h8SçÑÕ³¶ño&.Pû’^†¬@¿~G[•4ì­xÁ™jGz挳—á×5©Ç˜Ö±žúEZsïmð“h´§¬^ƒ§½FøÅ8‚¤‹ª ªQ�fÜ2’¿Ë@}éÑ_XþæòC¬7÷§ì>$H{þyüã#ôãø�“ò†(Muì¼)È ‘�Z“$ýqÚþ|Õé‘™§zp,;¹ÀÁ“Û±™sà0r]9ü«kÛ y6 eG*¥)_,Ü÷Q5²,¡Ÿ>N„–×öÖ2hSé·Œ×KU{ý�¾4#3VYÔÚÒ>دþ¾D•§Ê¬l}èÙµîãgVMW�Çæ Ö)lÒ{€œCÊÙ «s¬¹]Cü'ö«qÜBYÛ4”:©K¡[2Tõ`'ç.‹l¾o(Ø6DÉ2ʯEÚL̨u �,ŸŞS–¡> |eF7N3—Ž V:ùlËÓÃ(3'~Ì—¯™~´õp/мmÝ�Í™kÝñ¥tØŽ²oP�&Å¥è#ñ2gú¶Q;V°Ïnê̹JW%*ÕVN£®Ì/´—fƒ/êpú†Ð�zëœÊ·V‰�:…J5tI9{77¸ºW°} ’TY-5?j¥�qbã»b‰àALØ-4û>òál ÕÒLӟܪ[¿Tœ‹'PMãÒOP9Ï™+¨íçù26´Fûå&¸y3d®Ÿ�쵡D™ŸUâÑgY-p*�hIÉé·.);‰z+'–ݬÐsÜS¿dБª6^\½pn‚Ä+'åé,Z ¦çVyµUŽÀ/aW#ÓXBÐ2XóîpÉ·õê+4çø$îJŠ+ˆÚ¡ƒ&/Ù¤mS/J?>–HÕ ¬3 N Ųhü€-§)5³Ø½�7æÿ±Ù�Òë{Ðw'ÚlìÕ.ܬÁŽú¡NÉdMž,_Û©÷ùq‹{¾g’ÝJØ®¨š¨|<€uhÊ ý�øÖú*·pJÈÅ–f­içTç.¿0j_ræl¥iÒÿû­f|œÆrlð˜sñ¬sÃ�‚¡ ³Üµ�Uò]VL½uþ¶"}A5§Ù¶YK†2Gyn¦¡ã*Z‘èS¤_Ÿ–²÷Cfƒ¶×mÇoá—éÖ××9Mº�#…føvÐÓŵ6d±|’Xß}.\Oë€ç[†»‘G@HoùY|Dm p;b7m£?®ú‚íþ4•R»s赑âqöyæ¶½¯ÝHDÅú%)üt:‡‹ËÉ{â°va0L$߬ХÄÜ‹*f¨ñ!­C�RßI\à8\¥6; Œúåû¥»M'/ÙwœpäƒNМ-ÆUz½øK·ƒ�G´›Îÿ{GVËTCDüŠ0ޏi�÷¤Í¹æIjoä òkð‘‚w%ý!9Æ™÷�ÄB¿zC£”üª÷«µ1N�7ŽYq¨•EÁ’žÆ©—þTÀ˜ñ~q htÙ„W&’î\'fÔøÂÙU´Oª#Œåe8;gSŸ>’ Ò–µÊyÈiðˆÑŸ{Ób†Ó÷±¹Å}¾±yúÓQÌ1Ý'NZx2„+êõÞÙaÉ‚xvÒ“¸>?šå©Qr³Ù`ÎU .SãäCêYïÄÚ½ªõÎ}¿�JRKÞ?e@õÉÀ6kF>¢"_ÙÀZKýp3ælù–lDÕ¥'Cö$­-ú`Öª>êXa4‰•öãà:8Ã%ia£‚Ù€T’~ÇÖ¦æU{lÅ–hmö 3Æ 3ú¤MY¢Ö)³\t6-ÅÂÎÈS™ÌªZÂý`qþ2N �É}Ï$ “#„Ï�˯Ľšžµú ~’Ž,(˜þòó/óŸH IÄ£ |dXÝüó0¥.7šIn&Q_Ê@\£ %ü8Íáë9Dvô\?Zû4½Àqy£YõœW“”AëÂØƒ£+ ÕÇßÉ%†K}¢)²ëyh¹ž‘v$Ø1þ«>ã59}�YaÇèp|kÎÃNtÓZ~*YUY^ˆ›€Ì¶£ç 8]ƸD¶Ò‘ãúÂ0cYS;Ó Ì�‘fu›'ŸËwºSa ¿æ7¿ î¦}‚¨cr¶:N w¼Y‰6üzðûÕ‰‚ר€,ž�Æï)E›çåÚs%©a„�‡wklUX/ŽB´öU5/#še™^æ)´ok_:3oVÕ¢ô‹8|O6ÅÍðöVP£AúÕf ¯Õ­=…8xáEs6Þ 'cA�¼w(Õòáèã8„ÿ&ï}7¿š‘´ï�‹tØ[¶JýižEò:Þ*>R?kÆô¶ÏùƒäïÖ"­jæÏ©&0�«ùhÇ926îÙ_i/µ96k²ÂEfõ_d?Ì »u¿¤,„Ía®vy5ÇloÛ4Ag÷¸,¤ÅŽ¥Ý{Y"›™øí"¼T-‹úÌ»Þß6‡Âbã–  D+øÝ£e¯åÂo÷z�ÒfôøZ^¶9iŒ“ëC8pòÂBO´µñýÆ»O®¿syp"n–ÃŒ–³–|ë ´ (×àQONík=áÛ!Ó…�vD£=Ž|�CZÂÀ4Øì1ëdOŸAög»m! 8û@šó„ Öºf¹Là¿"¤¥:æ¬áú ¦ ÔÒÅ¿?yOAn!Tmý…ŽYy_l_) '~ðƒ1o}F±÷à=ºšò©ô¹ ³á’�oÇ8„l¿¶mòW)?ðýúù‘µyÏã¹Çd{”î*¢Á»Ô�§  èl®1=ãÉ»9öÏ}ú;‹6¡Îñ™šwÄæÞÙ\ÆëfñÙTØKiØÒbÕqsôŸ§¼ÕTx@¶H)ÒL9Ÿ»h—ªîÕZû!‰Ö¥éCb^”dWè%�_'¸Ž¤�5ú~…¾Ë(Æü¸FïX¥—‹Æ77{í__8 �Õ.vÔ†MZQjòYøò)�Mv8`E‹¸6„wrJ^��’K‹Âcsa/ƒÇLúIß‹`+Lª>®ºtº­8×âkß—Œ+o<ú�Ì0±=x¤—íԦΕÕÁóy®W¦|&¹†²ê0Bâ†�–løçLnÀ>¦G†qtþAõt*´*vôzýïU‚.››>!4´3f‰ÎWð¶*MƒÑ/±Ð‹Ó‰Ã6�R0ý°æÂ¨3 #Ù[’¡¬O‰Uê0†Òb:uÁ•k(¢¿ÑV”ù"GbÂ5b{ ·b¤ÁD{¢Âî<ÿ.ëÎåŠÿÕUu'ˆU%º vÔ ˆöîé?‡‰f­nûÆâZ~ɆpWéµ*§1Q³Àô%x”G‚乊­ kAº:cœ•=Íÿ†Í3káû¼m^K7àc�êõ†guô!ü¶ÌzŸöÃü¬jÎ éš/ )Äd‚Ä[ùV—è#ºÿg›€wàf�“h†c~ [N5‘óXçhz“I£Pÿ|ÁjCÖ-ÇbåÔêT@J9è‚5»nÇhÑÈd2GŠt… KßŕΈøš¨âå÷Áä3.�WPÂ…ÃXÓ„ÄqõhcÃÜ�œa%"wàMi«Û“¿4#üÏ@ «Ù´ÅXDB(§þ;Á+A…)†O[L‘]8ÐwÌg(S—¯JV‡�…¦ í'Å>3ž‘_çˆꄜâÙ•|F(<Üeü§R÷qgbð 7]gÉ®§ƒy2ŒnÙóíúÅ¢]XVMãƒÞ™�#)F¤ªöHŠõ|Pk#ûÞãæ‰ÎѲ³Šôëó÷Mhì€þFƒ‰?šœI«‹rÍK~÷%A$�–&¹Ê¹ãsÄ^µ?ë“ræqÌ2¡®•ë@Ýí¯Nt³âg::gƒV&¬ÒÐΕ®£Û¯�Öœ ÜQiºE’èýðr“M3qú˜ƒ?n.�”­Óªl¸bù�¾÷R!§ærUW¸Ð¤°\0ó³àw)Bž— ÐÓDAë“P9ïbSN‰#à®æó0G3‰zdÖF<‡5À–XLR§[Æ«r8ÒôÃF¦{æWÄß~õÉ,�¼©€ÝÉnó4À†}LX‡úÐð±âåóÊV8M­bN©Vu�C`Ûh¹Ò¥½9BÄÚA™clŠ�ýZø×¤[’�ѯâ3Ú¼_nºEH>ÊÈ6¬}¿ûzŸ³‡æ±RδV²×’»ÞÝæ°O0%`ÉΫ„Mæ{ To•I³Õµîž²,"dš¤iw9…oŸ¥�³Vç ½H £·ïI[®¨ÙMº+1¸Ds&((lÛ„HÏOo!šQ gùvR m1|Ê‹H«’Ôðæ+±cE~Æ×Zèy µ‡SèÆò‹w #Ò�Šš–DMïx(|Ô½ù8áhy…e¿ÓLªÒöU€ W~ Œ-ÇÌ*ñÙöº]cÁï}ô> Šz"ÊvXD…»¥?X¶¾¼wžGÏM9ÇY�éb“øGÜ/;îƒá!½d„Èèì›DÆKDÔåv‚›�>£Þ›€t¸íÙmŶMÔèpE…ƒ+×öÒ¸}®–iƒc|ÉXM†þTSz¨…�’�lä†3 nûlÐWmKÃÛ|·áSV)|Y÷d*üŽÇ)Ã*(›‘ýÙ޳ÃVÉùÄèí]§6º-uØë|b5 »òýÒ“:½ÔKÔÚw΄¿YV@tÑ·�sÚ�Ä �«Í™¯¿ýîK�+yÎܱ™ôÈáʤ=•¸¹ewZüX¶(6z›&^Ý�*Y펗[WtY áq6–XÛ+‚‘} Ì�°­riü‹VeSÖüY°�‹Ì©¡ ªc8ÔåYfö¥~!!ʽKùı¢Yƒpƒ �¦—�²Bc�s¨†’ÏñlI²Þ`PPtÞ×w†ŠàKz\“Mœ¡Ì`�ŠÐa“,i¿Ziò9l ýç­k‰ cnc|4ÉÉ€ÌÞôsQÕø©ÆaóµVXŽFw轨 N⸠É÷ü¤ß*é«Zí žÂ°¿Ï^Ä?ð–@92eñ.pÛP{•ÈØ ²æâ[�Œ§OÜ}=Û1X³+w1é¦ÒtŸÎéF¦äˆãÂÅj#hG‹#Ïu’‹j>K�’ùœ°NÖ${�¼£ˆpvl$¨ü4�fã±—'f¼p€§4{Ç%‚‚•G l—‘#!Û”o[Ñô{¤ØF†˜Ø ÂÏ4z‚ðFc¬ú½ÜqùD}}ë±È»£ò•ɯ…ý÷ñèªÐfÝ0…#Lq�³häóžÖ auÐŽªËj« =àkÛü ^hQ~‚Ƽé~vœriï-Ä £Î6�ât³’½w~Ûªúž´�†¢BIøõ�/Ë_[a’‚< d0ö8ÆÞU~¶˜’ýâݛГˆ«y†Õ±—îg-iMU®ê”ªW¡ {ÁàŽµþ™³#e¼Ó¢÷¹c¡–R]u ™ Æ‹b Ûzè}VGÆÈALÝzÆ;5Xe³ ˜ (yRç<æn–§Їæ!“aüubáœÒWx…îÀOdMºMnn-vƾ½_u�•bIÛÎý¸ùï{»îí`½L¸Îy¿ÍG NºJ,ê†ßfHöc'êsf›HÌ=p„¤eå0T‰ô-8‹Æbž16Ÿ¬Ùí;ìºAN‹(¥ä–ít¼'ØjëM@öó`'‰½ßò6çT ûµšè|V"³*7j}𿬠zˆì;v£KÈxª.ä¯|›y˜Ö[�›Ÿê™ÞwîðÕªÝFK±œ-0ÀjÓ9ã×^wáø~ê)”œ£ -“´<ÝõÒR€É -©¶-Ïy¡�ß„;³Ì�Kùr­[e³¢1úÓ?ƒ*ÔB\Ý�{6n»œ&Žs„}ÝiÖÿÓ‡¡A�¼ÕW{>Õš„eº+n‚[ûõðw°çj…/Õ쓳W¬e¹§eë�í‰U“[’)¬H ü/êÇ ~d—á9úûÐq�…™ ŠÓ¸Ê:M6eeÞË«‰¡i‚šÍtáZÎCú>š¾õ+Aº¦¯Õ(Ð¥Æ�Š ‹©»K¡šÍ¬w³œq]U´Z?:¼êÕj{[äðZÍæ ôiDãµÃZyG ráSuýW%Å›g™³ï1�±©…ÑÕ*önÂnøEÍóx “_ Åe…ÈB!ª�ùá9Èêóå *MPa¾ƒH\&'®NÌu¥Ìïù`hÊ£å³ïCsæPÕ�œÐâ&º½uQÕXü‰ÓNÕšS¶“*{eñ¹ò‹CX�V™uÆFȈ" !œ»˜bvÝqBÌšL˜ Ö)çò‹N½žãÌÁóÚp¸·ôÜý+\2ñ�Ÿ‰Dn_1ß)“C¼?¾£þXj—£‚«Q>~û„év}àÔp*¸ù= U®­ 3>F%Ï6wB¦n‡ÙŽ1L˜+ >ê°«†ÇL‰~ßZQ½óhãÓa˜ý¬Ýtç�m‡&~ÙÓ¾]ÿÐFPíJ”˜ÕMBrä¼eÛ—OUÁÜ=)šO±,Rp{4Q´º˜@(Â_[@¿rsøõt&£æL6i ™%pæK‰gE!3Aú«±P�›¼©dW6G$ªÛÌ5zSLÇ+v"ë*ÿÒÕPJ–“À‘h€{ËP7_ËÏTÿÃJµv’Bc¢©—y¥KcÑ•r:"d:g¡ñ§½#šm÷5¿Ž‡¼JÙ>·Úÿ -,MúÐ¥vÙÀ!6lß¶ù„Wˆ¹­Ê‘Žf¡­ EÛ³o¾Ò÷¸³õªc>æ Syä_3ýâ¨ð�ùƒ�zwŽ�¸‡ÿ×®„Qʪ÷Í—pC•º£ ÎsoYÑÎfq�Ô˜ Ø›!˜˜I íTŒê–wgͤ¦”¹^«åòªòœài�åýy»XÑKK}Ùoø{ñ «¥…¹içž³Xè\½¥k2¡{¼•$¯þ_ß„¨”"‚¶Žk„ëiMŽ^ð¶v TFø÷ò#¼…²hš»& �¹s1ÉY57At˜ârÊjlÄ�?ó ýµè¢«?§XŠ  |$ZÚ‡Ý!¢—†_*%–Z*p_{BsçDnQ�8 ¡ÒHÓýFÇcÓly%Àb¨c+<$o ­rzÙëÚXžm¥1W·ÄopÁïö£hc”–ÁþM%h¯ÎäΔtýlòÜ ʹ¬*×7‘Ëg~$GíRîgúI°à�2Lо8?;ÛKöî6õøK\Ñø¤BÍI*R¼ü×Ïâù`à‘›twfÍ÷K´ÉÑSó;,8>c$2´ÓC¿M7±hšë¡ùç8‚PŽ\µàÅkcBŒ1x9,:°¼@¯ ÞÉû ÿ`]c‘ø8¤§>‘ý@Îò ¿(¸^pœÄúÚP‹[Ëp3Ÿ\Ó0üÆx–É4™[KW‘Œï׸ÆÝ¾ ‘8¬óãèud�–”K©[çÞžh�hßˬ[Ý>£_óLtéz¼¯k¦,BÉïÿhåì©„ï4@ø2&–h³ã¾CŸQ–¦ˆÅZѲòÅ5”ÖÍœÂÞKgDõ�icYÏã 3qO’ÄV}Õ©!±®­øí$~áN@>gA ×�Oé6„ϼP•ðJ6ŽB¿|¥Ë†ZŒÔV™µ½*®Zc êè‰5Þ2È�°\J¢ëÃ6øf ­ìü’×ó¶›\ÓUn™ÇBR�Éæ¿±*‚*/ç–%׿2«‰ÚOVÊû¼±Ã[#''íßjH³�ä^~'6Ü®ÅÛ¨ a¨Á‡`üx\ÄI>'k7Cp CjøðÕ\±ñ~xzÊ+ä³zœ±ýCŸYÄCØÅ3†2µ± ”Ûütûáñ�YRã8'W U/îl ˆ·J;ðõ­ëÝ˽UîS) 8“ô0Úu¡„ŸÇf¥v9àô¡¥_‘þRO$×C!YÚ³?Ô—eo{ZòÊÛ÷qôé¾+T.ÛÞÑI¥’¨²E FP4ýa†?ÔËGvL8ÃÀé›êFI ñ°p��m¿:QŸô—ëÕK)È£Ê÷/Y§—’}ä~m,ì6 7w!7Q ²å9$“P×Y,3ŸŒû�w�3 t×Û5̘®óƒJ³¾Bû¬¯ŽÐ'Ôª¸ï*i §Í3ÁøÔ›àŠ#?TFoF½,`ëÎI ²<ÿÀF�§ÖSž+hAmBehèðþ¼BÅ”ÚwΘÄ*ÇÑ¡‚G¾ïëÜ^úä—Cé�ƒ|¼>c„Þálk&ÑÅ‹‡FÛ¢Üh˜>ós´Ï ©æ[]�Þ&_}Õjšã¢zAö�4Š�—ÐFâq~ ã±c#&AÔ”/#í~ÿ‚¥Õ¬ã]朸Wúîë·lcl…FÙ;DZõðX,âùL"ãêŽusÞ1efLþŸYÉtûZâ/¶¶œd{¤ò®¶XaX©á‘@¿¤ú¨2Ê›<›ä9{Ë3÷g{÷}ˆIXxÄ1¯ ÓC%DfÁ­“œcÝS‰‡�ù @ ¢ož§ðÙÏza¿VwaSx”Ù@­¡t Ö4^¶AåX^�M¨mÚ|>Q*é%@Ì“àæ"¶¾­è"Éõ?ŠüQcJÅ4ƒtXO)y§ ‚PóÐ�XP{7pÀ[^Ê^Ͻº——üLRÊsÃ]âè³�Nšâïò$ý …á ½O˜eÌçŸÅø÷��ÆÙ¾öÃÕ\RZ¸q NN Äà�IäêUÙaÖ®’�U¾™1w"‹ÄHY9<™±u|C×wÌâ·ìH¼8c[§Ï·…— ¿ßÛg—{*C]ÞN{2ßF㎗ñ8 &z ˜ÎŸ•¡TDˆ5¤–—òAò�@„N¢Ûê´éx­vßy÷ ¸¹í}‰~]2êG·“Ç Ï9vþ½Œ³kº½gQùÑfâdÁNÈ-¦¡d-V›åKg å2d4>{¹rß¹³ªÜ YNµkH›�isbH rcT=ºy–[¢FÒYŽtD²™:›Æ ° ãÌ’,8ã]†ª—`Äð¯¾+Ì3í¢tëþf<Óã”/«Ì)còèÂ÷ê·q.ÖÇòŠÊtÂhÑo°è„õOË-EæZ$4Ké.ì ï‡Ü=¯ßé4nyÏèØy ({BOqÓl>¸l{HºÊ`,¤Zm&¯»¬¯i­{RèE �Œ†þfÖŸÖ�é£�K£”@†{yGŽOå³] ¹_ÍÍ£dÀ3žK§^Aâ§[)Y2aÁŠúZßpì 4¥ø=pEûÄßi÷\+d“•ö�ÿz×ïĽåeÐ×§ ¾ò üMÈ6µk‡µº86¯X"ÇŸ*m|×�jv¯ TmØ�d¢–{�°ç‘MN¿�·åY®Ú*¨k"~'Ho¦=+™2ÃìBl»xð¶lt­ór®ÁÖfMjM­¾_xéóZ-‰HÃŽ`à˜°…}]c’$àÊþžékÙà%fI-�Ãéå(�*WÒm.k*î—\Õ ¤|�ÓrïÇÁY A%Çýˆ¢E}7göMb"¶½j�^¥ì%«¹MvÙߨ�Z–2'È,òž±U²"||'.4ý§ì 0~éõîé�jiw3Ò£TñdJìÝ Ö7c£{iwÕ…O#£ >þƒíç7ÆûÔŒ“ˆù–ZP²Ø �öç¿1@¾ÝÓXc•ËË Ž"N¼‰²azåœï7ë_#ZA�ˆK´2â˜ñ�ïô«5ø¨«.O¿‰×² -ŽvzX“{s�Àw’q2v�bŒ¿šç÷ÖQa\ñÕÖFÉ}]ñv"ðX1'^C†ÖE÷z­ôw°=kŸûgwúTþKª£Œ~Äx›Ö‹¤ø7ó.NÉ×�§ pY±O–¸ÖëSŽ—”ݲQŽ�¬ždˆáå#ºAkO­/„w\¶c§gÆzŽ™kÌN©e$�IÅ…1âÆøXß÷Û`e<¢!ëÀÕê>Ýn˜ã\…BRIñ¨çÛëT/’1äå3>'ýÉ«/âì]ˆãmDð×îusr•?]éã7[} Åm | ˜9‡ï1æó¦j�©´[Ã*ÒÀ3¯fš6Zˠ܈©ß�â�$Á}¨Wg~Ñ‹E멆2Œtã+ŒL|:sk†!ˆ Fþ®{w…ƒF¸çLNÄ7 ¿ZHhè¸ØbtEßiŽÅÖ‡/õy¸z„†;kïú[3½zçK³Hüw¢ ñ"×ì§|H’æ(Nî:EU7h˜Gï`Ú¿À@±ŠÅ–°z0);Œ—L%=«Ý±¤½ ¾ršæwß:”ôûd(•§Ï9 ëSÛ­ß)[Qo߀Hq û�ãš_Ø]ÄÍ2ö ¶ç¨œ@SeË{Ñ Ëpcó.9ÎæÎßN�}ÜꞢe¸"f>޶/r¼9¦�pIý^šX„Ÿ„®ïè£ØNs½Œç¸R‚-˜»qjÀ+Δ ã!àís®GqH6ݧøù‡V‘‡>˜TÚm^J¨/èvóú�ž½³Ý œBéw%½¤¢Ål#ÁØ÷]NÚ/¸OCÒßúù^@ݴ׬�z¾z7ÏXmO¼âù5죻`@ëñ»C6QÍçã%·@R²¿4´ u›FL¶8×Üö#ìùöXøŠ1YÛ±ÒÚ~#±y¥Xy´ÂxµŸi•LGòÿ®AL:J›v �… ÿ^‘fp¿HF êL¿FÎþ60ä¶|[º‹~õkÛ}Cç+¿Z`mìU¿¿ƒ3 «gs\_úª8‡Q#y:e?$`¼EËr²™šÍé;Ç+ëÜÚ¯€–ç Ÿ¾°›$PßÝô{.çeD '’ì�TSJ ƒÎ¿?öxÌǤñDÖ:õ)ä§\%ê–l [èô¸=P »¡wVЩùíp¡(™gö/�/!lÕ‘“nù<âB¶5Ÿ>¾½v�,‰/Ìá’É| DødS¶dA¤U|‡ìƒ±ÂW¾ÆöýŽÊÖç„tÅÅ»q|of8ßÿ¬KNÀ†-�Mâ ¿�ÝŠØà…g mYѯdŒ83l1߯Ø‚ñØ¢¢®vbÄeN ½ÜñއЇ-‡²)3žÞ'”AZéµ)lnNs‹¸²Op¾ ”L’ï �o$Ck:Йn›Óe{Vñ罦u÷Xá7lÞ•Ñ ^)ºßpQRK¦„TæÒŸývœCìH ¼"pÔ¥ENp«¦›©‰ �+ußÙæ~¨Ã’ê¸Í ”ÐÉ4 ¸j%¨ÃÊõšcgEX–\Œk²� A=—¡ ²Ûrp•¶¨½‹Ýk%>ñø¶�‘iþÞFmŒ˜)’fW0¡Ý2õªqì_ÉÖ¾üðKVÇ´W”Ð]ôã™v(Vé“áÀQ,}ç×·s— )DŠ@°õ\”\¬3ÿ—d;ŒMã5i­’ü½âÊ•ÎŽÂæßì1E;»7:óÑšWµÅh"çâ*îP`Ô‚ä© ˆ˜R×WóßÏ!•ÙÎa~ù¬áçž�ì~~óºmŽBµ$j¢|G²ýkI,¢/ÉWs yhs[¾¬t ]ÝíG²Â­^C§;¨²ø‹ët¢m‰¥~l›Þx“^@ŽÖ§\>+mÜ›Bé©ñ§ÒÚô!Jìžšì‡-öõÉûóíl,slCÉî…ŽR> ˜~Å‘[ëÐ&ðøC‘q¨Ž3z6µ³0›ÄO_0s|¼—^´3ûšÀ2œo±\ž¹¯W*žø¹Eþ¸AzK÷Sâpº²ÂDó}]ÿ#ÜGüˆ¬«Å!Ô õõÃûU.ˆ/„ø�lA¡E˜#ݧi�^ Ûš‚!è kl½ô¦]¶�¶ç;Ú¾ùNÁÙÎÅø<ìÚ¾òKc »n4ÞØ÷FB ãîæÛDk낎»!-¶J*ãŸ`d ¦CF/ÅÑxÚ‹�R¿lÛÐÛWØÜ�…+SMÎ`úŸ6² Ì.ÅŒ§>—Ö5gqùûkæHh¡eÕ4…jçŸPH^)Ó4v4~ïMÇV2Ьy±¢ú¶š9ÔŠ7ÉÔó1‡0Ñ¢×ZÃì¶¿Ïø@Ʈ̞dâˆnBŠ×·âˆj¿Õ¢Ìa:R£ekCÞ _R>Ó˜d›ùigàÝþÒØÚeQUVI”ÔÚ·<ª¯é&WÇ‘¿93ñµVKª‡îWP0œò0¼•x(Ä·WVä$7§ÅT[Ã-yŠA؇GY•úQHBxެ“ùŒü��šiy©v8AºïãýD‰¼DR—¢ÆÃß`ÄÊ�!SÄŸe¢îZ¿?ú�âñ› fücšLá3�‡¨ÍÕ¼y•ku‹j2º3òª�Ÿ\²Ê>°Ãœ�ÇHévV¨ Ød«ú`Ĭ§£¼  b˜tÊØ×¾íZùÆéÇ¢òŸuƒLɯ“îW.Ò׿ù,…Zöšöóá}S�iKµXñóé‹50»¨â²?lfLˆÍEÁ×�v8"2L5ÿ\Ò~gUã~n€�͹‡¬—oåÈR¿(^p¶ƒr…�”"ºäcL¹ C´€ï~T:ü(w­“Êy§›dqC¢þ+@|4K��C°ÙÓºšeéÓ—äåêKO¤T¤O3Ý[ÔUxîÏêôÜIl½—êº"Ã6ÑGu~v1°FŸO”‹HνâÞE˜[ òŒ®ä«ã(_‘:nïc|£MÓ¼”º2gÂ<¤­ªýºj�ÿy+ÛŽÕQÞ@ÊŽ‚LùýÕúó³iÉûø×W'¸R¡è4;Û¤î!çR�QUD½t÷­@�6‹‡ëˆF¥òzè,•˜e.~XʤOНń ÝxÑÕÏ0ëÍY¡®6KƒÈm´VÝ]¹¦Cÿž¹•.Æ‘I¡@ºZ‹3Å�è± 0ÑJ«cþxʘ,x>1ápÊ­<­îƦYO·Åi‚oíÀ—ÍnjéÄH¡‚ Y¶Eÿ.¶4J{É?¤5_rB¾ØåC[4ìƒÎû¼÷�v»« ¤²%àÍC‚¸*=é8ê¬[š-Bct/;.˜ƒ9Sr—Ž­2>Ü-…Ì*Ãßê•ÂB´“ˆCÉmTäüh¡Ù1/‚XÖV‰ÞçòÜ·ý£¬Ü?óuª¶1CK"¢q‹û¢ïéðF�^.©·,›Ž¯×6åj£•ÏL ŒRPâ ØÒ�qtto`«J“õçõceèÌeØÇþ²ûÌ$fR¥0$¯»½§Ÿ÷5%æCšÃK”H¤ð~½Œð½3Ï—Õp<ÿªÚµUxG�X~}Çý›^®_jäfµ¡$Knr®ƒð&—Ç/�å‹›& ä-æŽh �€»÷Ã:?7IÉCûnæ_Ä_"A«o0nÈÂùVò¼Ì$Áðé÷,Ëø[Á­¾ÑÖ‡²ò©4t›xz>!\fùÆÜ ˆ,Ù�Èã>³»er›1þÍÙIñdâp½bñ]Œª¹kÁóÂ?MqÙ÷;“Z¥ ·)šÊnf[>Ó�±âÈŸǾ‚èä$$¯üU’ ²ÐÜ[d I§ìd;”ÀÄP?*�žW¥¿M±F×b—Ø< ÷ÿŽ2OXâÙÑ ÕИ(/4‚ òA:Ìù-Òlz_å8Šr€Ò>_Æç4vÝ®ÊÔ™˜cã–SgQJ—ÕïèÑÖç×è|ʺÙŠå» ÌÁ§"†¬ÆC:#n;3^máÝc)ú<ÉÙx:â>iäg6=X*Æ„Sê!köœ0„FbÏØaO§j›ÝeHÔ¤0}º¤'ß›Ô>tÝiƒ‰ÓûºwÈù7œÎß­¨‘!,Ïw“’ˆ�ŒÙógˆKÒ�£ÛÁh}(Ó»Ö.T¹Üj×.=·ãs¬¦¦cP�øÄç'üˆc¥JXeS¨fu_%ᆰ–«|MeVUSj6´áÎ9¸Ä j »s7@Э :ÉDHñT 1=Zx¡Õ¶Ö"랎+’ÞÙžœÚèà J!;›©Ñ„ [¯É(6W"͘ë#*ƒtÝŽ7KoZpòÓò¼þbËÉ©žöØÉíükw "�$P»wŬÅRØ�C,'+-Þ†0–Çë<�=nš{çWA” p°no}é¬ë|@ê=[àJÝÉŒ«PÅræq^©«$ïË,¬?_Cl _¼T3Àž²bž(ç;œÒ^¤¦`eê�ýºNý®á+š£Àí䉰ž[„ÂBC=Žîk·~MVæä'©ßXŸ§#S¿F3ä9,ëë`Â_c8fot¾0ŸÛ eBèJ�äaÒ±9„² h¶¹µè&‹‡6Â!6�O8ôGFYr9®J1#• ›¯ìÒÒ„]ÉþŠ0üuàƒû Éšõýµ6=ÑRNÌ[^þÎç2:UªÄÙÕû»] 4ÕTa¾Á UËò,¤®ž°¹u4zA7 5ÒE‚¿†) §„úB¬‘ç¤R Ö‰u3¹�ÇÞOä"rtô©ndýW®»‚‘(j_ Ð,QÛâ—Ïüß¼’žÈhô¿BL žR”0z~AÝyH,âÌC)Ï:RÔç´uÂiZ̧º*¼/aµ“¸ÁGošq"´aHÈÁÞŠ¢†&…3Lm!^.PLÕnh2úvß$µ6�ÓE±½Æ¯LWN”Ù&E,Ð*ä�½iu²UÜ�"ü¤ÌW– ›mÔÙ¶p™t!¸ÁÏ|Î#�”¯ '‰Çý=MMEÍ9ëáX²ºY¼œéÐ}Üzkxª~¸±~y²¼ÆË¿y‡ïX€þûüó@ ¡“ÚÔ@Y>¸â1Ï Fx5H’.íºÛå�hnê´s-}ÇIÚ;ö 溾}Ÿhc›Œ´À¯°`Ô«•ìî—\ â;«(!õ úìmÆ~ wˆØD,¡DE-§ÇŽ»°@/ñ ™×ƒn)©c“�øœ@AþîªP^xOþË<i_4…Ö¥ \àO›'z�B^;²v,Œ$2¨,’Tž EûŒ`Œ¬H4Å€çÌ)8!òWÕf1w…Ä’Æð¢ÖÛÕÇôcR"N3L©êQÄð�?è´Ì:�m¯s!(ëÃNÖÔñ1‚»aâbÒÙØbÝ(MxDØÙÐΑ¡T×õ0¼y�8Ò‹ô(RnÓ:î ¹!p èûýI7¡á¤†Ô>Õ †ŠÀ¶€+xæ®æù ®’ÙþðÉ>�vgò¸2ÁînhYONW-ÂMÇ(q˜Ø b’¥Ýne þEQ’oÒ뻡�eHTm¿k¨\ò‘äuu�‹þ~×â©#ž×xL_´HuÕKÀz”�3�Åä¸e—2å–´÷8[²¦G88¨¿·3{6ùc”“Õ�’WXÿBIO¥Û@�”úûO”—'ÇÜ;רtå+¶èLjì5ŒØ¼MF6c—ÐCf”¼s]Û9ŽŠ¹ "áNš î›ÌŽeày ´¤ÏJ¥?I>U„àE)ç�¨Þa‘h£] j ¯º%A["å}k¶‡VÖó†}UÂ2]>™LgÆñ�b1„Ï;Z{ÿò cûe²ÚñZ‚ºQ£E3¶{›å¸µ¬š<Ó~…�Ds+Í`}ý~=µîK’<#bé§°Õß÷ ÿ 4ÍÓïr÷Áˆ­r®Ð™A—ñF¯Ö¡³ëÐx~§[ñUޝr¤Ó‰�îcÈ�=ÞˆhÑ£D06\?<Ä{¿,–¨6kK÷= �äÌŸÿQñ“ÕUB öJ^&ë“+{6¼¤kOŠL×—XÌ1þÚQ|RûÏò/ÚF<õä5•оÏö�ßb÷‚膖éÒƒUܲh°#Ö¶*S¥b¶*Fõ )ŽÜ¾û‹ú–, o¦è_BÓ ký”ÈJì½âg£±á“^Ð�¿âþ�Êãí!•¤�2ñ~âžð Ç@D•Ï•†Å9B¯cXq-ŠÅ&Jº¤"²/› :÷q¥ôAëçE�æÑ\oÇ�IÆ2’ƒ>ŽL‘n5"ʰMq—l³ Û ]iî��\V{9³’ÉH@ƒ·šH¥�‰¶Úâß�Xu––z"ãkzd£ ºÐ.ëF÷ïSá¨o{R$iP¤ƒá‘^.©ú+…Šu0£ì{ØsCRš÷÷ùŸŠ–OŠ·AƒyÔnÂrb¯û $T¸:²œ8<éy‚¸Œu –ßC¿%cÇÊúNŸ#ï7F«Ð1Ërsˆ‘y;Ù>ÁL¯–0¥ö¥HæH�_çíÆk>aB(]øv#§j^wo…�q{&i Q x†¿¢æÿ"¬OÑÐÁng`ž…/ÐðQˆÄgì¤]ZÌäÖ�J>œD}À�!VŸ«Pµ8Ù1¾« ¬ú^^$2¹k’ÆöLn÷dÆ0þ°$:u?x1p¡%æc¬Ø—‡‰3u$/œ ¯§#ùÝQ|éVÌ^­î4½ñJë5£+[ûþã»Ï²„j`­€›gJ2h€R¸*öŠ¥-"ÞáÈq®ÖÍ>_“Ãæ{â+!†c¸gH I­–QPê6VõXÜ0ÒVýWNçƒm(¶¬½~£ư µ:æJ4kþ}óÒçj%ƒ4¾É�#£¨é Õ¥Q~Jù-¢‰ÑÕÓÊqGçüFâð$ôæ–†LƒqQÛUý2:õÿúvÎ÷vìÝȤ±âšºMWqù¡ß©3Nô^ë!9˜NØPý8¬ólÂ~œ¤c¥,ÝUTDí’á›$sæ‹ã^@¹%Vž*9óoÐe”Ž?õqsµ‡~"Φ%ܶvLØï_ÂàîÑ‘i.ßfé3 Mg¯1wä'ÙÚ78¸k/Íb[«[\¤ÆË�Õ¦h>Ü™´,…K'%1Y¹F!±,©6(ìP*²=ùQO6‹˜õȇ¬Xwû°—tC£Ãh¯i¥Ü­­9Üv=.&qò´~¡‰0ô¼¯/…ù[-ÓQ©V›ÜÜ9›×áöð¦�¨: RS›Â™­)ŒEÞ[â /“®X³~ÝÉö­/+Y7zr$²˜ƒ?¨†\i7T¶šÉï è::³JÎÉðµdoÍâ$Ö;ÍEJÿôÔS‡çȉo�ŒLÍÉn©âŽ—Ü•ƒÑ£Î E Ì­ülÈìó¡�F¬+�ñgfeây\8íƒ T&9¢.Þ…=#ð`&�[Ëk†ï"L ?¥aHJ“%ÌÊ›< Ü®«9³ÒèÛ`³\䇔âR½~bÅHag�BÅÄÃ$áhØø÷)´XV‚^¤LùWàƒÃæ}™4ìäàÎkíšó„øYÉÝŠOgç»2s·'„ÈM°e†/’y>Z¯;秪(çà;T\�DSRšÏˆ¼ 7Q/Ãl"ÚRÕ �HsUá³(²‹§÷ÃÓÍS¬xU¨nÑGnv_d}{=ð©4Þ7oþ¢>Z†óxXæS+°R,ÕíõḭÛðj~É !åZ?åyÔý^«H›¹ï�Ó<þŒ¢Ì'‹�‰r Æ£æ£b›’®ØZ˜�¥1/» ÁkIŠZ°u7wêñ+¦…Æ×Ö‚h€5æéeU9PØD‰FK§K,ØOöc�½<3�åÅq¥–Ú|Ü*øJÚè1뤢¥¬„óf2~<”Þõð¢MÛK»OÙ-ëm£ž‡¡K½’2¬„Þ$BäI©äß_ì^Ëü2t"˜ �~˜^Ó53Älão€n—2IE‡kõqjß›W»lDÔE ÑÄp�ªŠ²:íÀ¹çá¡÷�‡0×RÁò´Z$vÏß5[|™ù§ŒˆÆÄ?—»‘86ö³æS,À&"™Ýe\ ƒxE�Eóù›Jëœ1ZcÏo$,ð×Ðe¾¬�ùñÝA¾4ŒpHcôsü[]Õê>:›}™t'¨ôO°ÖÂ#Cœ•Bàù-"ŠÅ½!j�díXéÎè©â“Þ¦>çr/±$\�mk‹)‹)æðz îÐkP‰@û[}”ª2= ÃÒoÅv¹;IÞC¨[Ô-ÈaÌ>Ù0$蕊_C×!#!zy“Ó™›{ÍA²*^ê¹í)yy’ebÄßÔ‰‡^<Ú ·g¨¤èûÚ:½pçT§T6I$QwIùÊ঎ÌÓУG2z¹ï†³~ùÌCÊ h�fWñžLõšÜ RjêjV8úåÉ1"É…�Ûð¦P¯µ4ý³yÊ@MAkñ‰;nKzúV`'-øÃ^Ã0Ð á£V‹�Öšµ9Dù„ °Ý“G/]á�ȳ”@‘Æòê:m£"ÁÂ�ìÿµqŽ]•0€ͶmÛž\§É¶kÒdk²9Ùu²mÛ¶­©N¶ïºë®ûíýûù°ŸÍ¤]xàÇ${`œd•D[ ©Et&åç{T|OXŽ“Û&n¿óݬ¡pÞ ×vߎfÀ^µûàWØ+ÿ—ðJÎ-7¥Ì’ilZH{‹[H4ný³5¿ã›â0}9r[~6Ôº¼oþÁýª®jP ôJÀO .XФ/ïí¬I§`*´v¼û{¨ú“ÕEšža‰çÏV˜Hæ0&‹Þ7ÍIîT!RÝ&©�?'fEØOÇ<rÔ,‰š˜Bnº§‰Š`¿ç'ðaÀÝ/ã÷ž_PÝ;‡Áh­ l+}†ïî°„^CíEæ@­*JP¸?¶ãÔ¦îVwåˆö^exå®ÿ¦T�#¼¤ó‹œ~ÑVõ3¯ 'V±}Ôo3ª=´'F…áT`rÑÇ‹©ƒ©0 =%¯žn5~îþ•ê¢ÁáBYóO�HÄ +{– xnü÷(,Î!¡–ØÌ-·»…fîY2{–]�áé$U3W¿Ý‹ùÔZßQ´­U}¦,J첿÷ý¶³cÔdw8z×âü¡ùåëLƒ? @³Tņ ÄNýü†/œdãþÑ㾯­['Ô&k˜„`»ï–ˆÄ2Ú¨§}W=´TÞ•ç—fYþ¸Ã°ÛR)!Ю´Q`Û_^w!óëþ L½�¾£õ¸çŠ�‡—|ÞÇkíc0A �Öi†òO(rÊßÞìÔ‡Àôê²–Äe½Ø(&¾¯o鮆!)½ÙÍ’ ulšg‹¹GW-B«Í Kânzºç9rÐï'9k%Ø\-Þôõï.<¨• i‚¶œT®‰QxKz9�»DÑö˜FˆìÍ¡�ãú-+Ï�¢Ÿa.9±Õ‚¯ÍÁ¦Oܳ⎅±_¥Ãç]¾d�íˆ^eä7Bfí ¢ÎJåƒ[‡í;+Ó9è¦ ßüo€g*TÐá¹ Ù6bYî›8=8iK¿Ã|° ‚ ;Þô^X‘L äÖPWŽ7…íÀ-K øâ2Kç<Ȉh�2àF¨€cÿuû"jãÌU‰„Zßã#{ ~üWû´¯N¬™›eœð�æöéF¥/e¿‰±}óK=FF½±±Œž:â Ç–¦ôÌ t,ù…<‰´Úy®_¸Û&Øgø`•îµ’çhg¸,Š|‘wøFãx–$»§™uÁÎq¨˜˜Fz§±'ÔÊ!f˜ÅüzÐCÕZ5†Àþ÷A+r,Í®ª¡ÃêÚNºúüG{¢—Î\våöõ‡Ps™×Ûu`mʳ††Ò äš lý Ù3$ý�¦kIüIžf¶(Í÷Ҁ˓7 Ï<à^�yõ˳¾¸iþ÷ìÛö™“ÖCkÒ7F³D7ÜmΕ¸–?´9q˜øþ€=ÚögÐ.ŠK'XÞËTËæ�ÀáOŸ9‘i�ßpñ¨?PÎq5ûm¦‹½b~ÑLjž5a”2ì$hܯ¸¶÷œ==÷| §ËIñJ棂QY#Bwk“�'4³Ïdøôf¾Ÿ!™†€ku®ñWÖ ¹?Ò‡*¬f£‰óqrY ¥�èت!¤n�ñùP~§CóǶíǘþ ñn!l¿‚â‡Rr— W½Ì¦ k¡cá¡ä½Qž/)+|¾Ö¢™šAþtžËe�¤“IÙMÀñ޼åÙqÆÛ\üÕð|àX�›}?Eów�q¢–i¬±?¦ÆAÔyÓú*hvd©üýÔf•’öVï)Îé Û²iZ^ƒ‘M„6‹Yòj Ëœ¡1¨|qðý¶2KìÈ&wjIë*’hÑ[€Ñ-mÙn¬T�bŸÕUM«üʺÓ*×~Œœ©9Á8ön´y•N³¾_ âSÌò|Óõ·�ûÊt÷‡°Èn©.Ï]B‡ÆR#äI½P»;ÌÒüsóâfò|ëù:†¸T.,Š^öÏÍ¿rãË_¿q SOÉŽ%{h¦´öV›Ãï©8•©½&ºdYEÊ“ŒeEž'î®b\íêsS'‹L\ ag9*«‘å©f¦Çc qBjpsΡØaÄy¶LnàTÙ€Á}g3û;VEd“[žIªªÏÿçìiÙÒ¬íWª¬ã¹YkÂ&�¦»Å=wiq5¿�tö“x¥o=XýÊÝL9"¤­çØño ß�´zÅ“ 3Ä~+u¥q6»»Mq¾ñÜ®‘¥³QÝ %U"ë;O›¹–xüºìC-ée šî²Ašóa@²½TÇ…„�¼;�·€Yz±­%ªÛ9åA] ElÉfÕåƒõœ*=8uW�åW‰¡ìmݵ÷­;ŽbÓï¥ù° >øZH2ɯš“ìºiaÛõà�E/ì%ÁxR2Êb)0ç+/tœÏ‚)e�Dˆ`Ñé+uVAÌÔÃ9ñx¸äêÃö¦> ƒL§¬ÄR‚^9‡XMoOqúu¡€”~SZ÷Õè¢ß¸N nºGQ¯óæ ¨Óþ‹îÍ”™a)“ÐÂt„pWÚs úÌô£ÑLˆÇãSŒ€D¤ê–ÕÜÏ(ºýÌyÁ3vÇ$­­UrÚt©|Þ×ÛmÊ/êé�º„ÑòcÔa{äM˜þ6´]fa×>P[TsŽ©�­G&Pé ¡ˆ®Y�­S+òg~ë]÷â?ÐŒþžwê…ÓçJ:îÈi÷‘¹”òc0/òÁõ@'âÁ—;sAGÐêYRž¢AÃ55ºyEMS]�þ11c(EØz÷ëá)r±Yp§æº®I‚ºsp‹,­eï8ÕíI׺ç QÜU'Ìl†lf÷£Ý+ª¿Q8<³ôÊS#)rèõ7m+ðb=>jÝq1T­ ìKÑ›�¦˜ƒo9#ÉýT‡}\jÉ Ueøœ÷㉂¬É‹¯ìW®ŸòZßêÄúHVà;£ ~GŸ;²Y3M;îßCßóu‰Ñ¿Ê|[¢–‚‰BÁ‰ >‡ß£<@µ±@;&T«§K¥ßUK®D!Ã…UF7œ¬´J¹X]�ö;Ÿ|©ix{¼X‰—ˆ×ÑE}¤÷½WôJm¬%¦ry¥ pÚË…" ¦^)e5k Ò=mmF’åäuåc·„Êppê�.«42)PéáÖl7æh°"av÷(nl©è o‹|%;#‘§KU =¸Ûû_pРeÕW­™Flá†óî�ÈŸ§uìÄËB´ÛÒžÖíÑ(ä‹ê¹§ÂáÅx/Ž%ñ¹Ñ@ˆ…Pö¨•¡–Áijþ¤­ÍIxš™òç�,4«¢ª ªÇwžës6¨ñA&ÝC‚�½&Ëûé›é} °Öe5ît2¦c5j$8 UÖáöv¬€U=ž™Û;ÁŒMȱ Yبî<ñagoâmS¹¾ÐdÑý'\:múº¹{V¡¢`pH ¤$ÛÁÀ&8ÿSÜÜ¿d0%U±ˆYò‰þ(¥ê À¯­mpºZ”cÞ¼�´HmKôÕìŸigýVW{öÑÓ]ÝcšÀ(’¯ØÛÄö�QR¬�±ÛrIºËRHâ„ñrC‡R´7Ï`óU];�>IÑAGf$â‘ÎS—uŸ§«‰jêŠÁÑ \'ÿÝí_fÇ‘}¿N??¹ÚjYÇl~×ÈwbëÄZ>A‚¤D­Þí@*o}d›M�e!–SÂØóٵჯ²l�rq3YÏúƒmÒôURÓL•›WˆéÞxÄ÷#5ÖØ¿ ©f;„&¦Y†Íky#W.ñZ'ñ—G/) Ù¢û0JŸ£@©J#™ìmÁ.—U$î.L¯uñüÊ¥mJ(èÀ€å¹£&ÌÊ}{%vµMd¦'£]‚�ßNÉújºMö—aâePUkL³­ïdg£â6ò7ê¿€âïÙÈ3¼[GVmË]ž¡ÇZC‹/B¬$œŒ©êÜ�‘0ÔÒ:pg Y5Îu>!Ä DN ªÙÿ ‘C0¿J�Š–W ¼d�œeòmî¦úóS^h" SÝù×¶×Tû_¥ã²q""‚¡sH^N —ŽæÌÐGYíßãã+=À[$Ïšk}üh±ï_4 ¿ =ŠBæK‡Ù�K麂=äÒ@$k=üâå¯À¦h¡ÞÝíëV>KËKÕXŽ‚v™6gŽy9q‹Ÿ÷||Üᓸ`òx@ì��3ÊEç[pÒÀPe6úö‚)Æì;†�–­`nnpÍ+jó²átâKÄy"oåOïË^ñ/.-ÄŽ›ÌlT¤½T«âS7¿Þìj\O7ÓŠK5GÌ´š3ìÓ7¥ÞŃ™Ù*­¥uÀs•»CND%B&ý•Pá±Ô”ìxŽÉ”ãôÌÏG¿ö²ã )Ú[`±<ÃoëÉÝ0Òe UÚ³Ž+¬3®Û€ë‘Ç”¾MË i_Ó9ŒM¶¢¥Pû«ËÀ3ƒ&³zoœ7îK1èã?=®±p–„À,{Óá‘òˆôsຆ]qš)w“Œñ=n ’ˆO(;µt² P<ž©²ÝD¤†`KDD߇)'ñc éAf)n–r €>«bݯŠöÃÍúÔdæÚo‹½;ŽXÊ#[�ü}0º=~>äàЉÚDeÃî�ŒQuÔXb” 2¨[¾4þjF>h¨‘D÷�%Bg·ísD¶zˆöÜÔgÂÔ§ßN‡ýkY‰9½Îörp¢J¨¹$1{NñSam´\o÷¢7€î»¶´ç ~Ë*ç”+Xß…µ§þ—½ÝžS¬© Ðæ±¢ðõ�[NïîíRìÞ�éøÁ<á*Ì`¡7]Æ+ÂèåÇÂó¢—ö.“i KˆGuÃ)œŽnñò¸ç#)³%ÒIè!/LHuËÛô(˜Wm’a.ö«ÀÕ?6ê›B5•²À"àý9}i0ðp@QªK»Õ o½rÊ÷ÖôQ2ÈÚE]œ&>9=ç?EÆYÇîÐ/ ü4�Æ!ÇÚTkë¸ÃÀþç…ÔôÌT#¨_îŽmB-i#o=Ì’zÊ=¶ÎÐÇqÚZ?�ŽÌ‚¾�ÖÄ›±$V•$þä•ÕÇlþtM7}:Ö©|ÂuQ¼T9ŽÑ¦‹ŽýD˜)„Æ•ìÅÁ 3£T®�±˜ W™6x¡ZåEQ´®¯Ê#6"Ùî{©`×ûxj›ŠÆ ÿ™BNZÆ<¯îF‡IÙ� öº¦à?õ]Ñ=Èë:ÿŠ6½è'Ò› üÄðä=Ïoì"ì—±Ñ,¶sº’˜�·T”SòÉuCiùCáó`¶�ùƒ¶fEÑ "3/|*”H~œi‡´{2*SG2™~n?u�³¥Íå·¦{ÕŽý)ñøU?&œÓÙÀQ‹�ç£êúóÄ¿,;Y#‘„ÓÔÇ–dMtÄÌè®�P•Á~¥´<¡z;³¤‚vóBýƒ^À©ÍÅ”�¶Ñ8ßJï°ÞÕÆô(þƒŠdFÀñ³bª{ÀjZUuSß-9´7JÓS#„®©ñ¸ Á¡Ïä€ê2rkù¦ùÕŠœfÊ>ï*Þ!é_z Ý“þ1MR.VÓŸŒ„zF¯7L¶I ±TæÙ� ÁX6 üÙa2z ºQÀ¤ÙlGd(qÜÙ¯�ŒËÓR1¹Ïá 5KKQ*Qã§ÐîÐÎB5Gî1½Ç÷U)šRÅw¬€><®ùù&ä›Ë€Z»˜p·0Š•IÔçwÿºÖɸ–¹–2«› ”ûÞÁPT²ˆ7–XHc˜DååN·êoö1|†<ñŸÜÄóãê ¡™Ó´s乃ÛóŒ,¸™¹$FFêéµú\•—*Þõ:kt!ú‰™“ŽÎDúƒÛ3âM¤;(3K°×™!’²ÞHÿiçÀšáÚ_¶(þM�¸…S×ÝwßcøÄ˜¿¤š¶Ý0\ îu%¦9Ó±,c¶�Ø ¸ØÍ¦âÝ>U�ýž·Laœwö Ùá“`¼´r/Ÿ©™ ‡8Ö2¢‰·“¤]Ê÷‡óô†ER|‰�;|ÖÕ°Òò¿-¿Åy4x$%îö'Û§h.á ³V>{âJp´Ÿ+“XR³B“Özkhê´ü*œ"4»Éº ½¹öÂk¤…˜Š(“syAG¼²ºïÔצ©ù¸ýnà2ÊÝfZ'²½ê䟥’�ÓKä ú²-ïR‚7…šÈš¦èƒZr•Q&g¨¨Üѯ6ðœ·Jµqbr¾=,·�à"ó1ÃSÑŸ�éLÇS`Þc % ÚÏ&ù›30¹µKæ#:wý³peä‹8Êl‡�äd�ƒÁìIÌý¿;9ÿÐÒ¦­ƒwÿQI›>ÕùbDí g}mU¾‘·Á{Õ&¬PiÔÞ&n]ÿÆàœ“U›)Bø>j€Çã×ð‹¹ºáujl²A[aíÀï:ö3 çX ǹ8•„þB^„[véÖæœ#ü»ÿ›ÉÊÍ”kÆ ºŠüÿ¡1·°pªÛ'%j±†Ôx~V•º{—cåsEÑ¿RaX:ÓE2-žîAõKÀ¾ƒ4ǹ ‰@8SÎ]ò¡¤p>94÷ š4õì:¶ï0â~\ †ÔXu�ßì"~„[Ur:¦‘:�ŇÄüò)\ I`è‘Ï€<ƒáôenØ 5ÓÂßÒs£]ƒÿ.ŽàaV¨ÿÞÌgÅ´4ØK.bÈ©…ïæætýØm3çg­¨!‡V�(°RKæ…²ºÄƒ–9–å™ö?žïµ—à¾pÛñ38Ù(£9Ó{è°ás¹,Ê®o¦>y,Ê!WóÎÑNý]*öÿqw«3s%$á(f ;“qëÃÚ·°1kržEVy$~n¨ý)YÂöðóoÉÔ°¹¨~\MëYc(î热. «EAIÉ7ýÓUDà:êÎøRD]Õ ±¦YÌÝKÌJ\°FÏóRÈPHÅÝ0oãK;ßRÁ¥cÕ*%êô¸ÃܦÏÒ¥{Au`âÖ@À5ôºõR)Àh½¹6\¸…l\ìþ(KÅ hö·ÆáÁˆ„ Îe—ÌžäjͼpTN-W�v™§»?e07CâúN_Át�Š FhÎŽï[ß!¿»®XxS=£‚’bÊ¥0~Œf‹ŒÆ«VÖG ¾{2z~nxþ8O�ÙîñìÉsùv endstream endobj 1663 0 obj << /Length1 1790 /Length2 20129 /Length3 0 /Length 21283 /Filter /FlateDecode >> stream xÚ´¹eX\ͺ-Š'¸kCpwwww·Æ¡qwww× ÁÝ‚Cw.Á]/ùÖÞgí½Îù{Ÿ~ºg×xµF�ªÙBN¢¤J/l2J€ì]虘xrò* ;c{vz …«­±€…�‰‰ žœ\Ô hìb²3vò8],Ц.¡LLÜðäI =ÐéÃh0ñÈ]ŒÕ<€Ì*ãJ gzcç3ÐÞÂÊHý" rðt²²°tù›ƒ•žþo¦¿Ñ" cS�»³�ÀØÞ à ÏP¹€V*�=Àhilk™Ô€ZuUqU€¤Š¢º’*5ÃGbUW�Óõ"ªª¦.IVP5è’êªj_Õ€öý[ÐÔ>ìë|8þ —WVÓVgfü;3À èälõ·ìôFñÑàß­}„š;�ìþ) ²tqqàadtwwg°puva9Y08ØþÓŸš¥•3Àädø¸:m�ÿãjoöA§‹%ð_ þ. @ÎÊhï ü$ú—ÑîƒÊ� Üåÿ4öA„Ëßœ¶ÿr8�ÿ«Œ¥±ó?±rJJr;c+{ ½±½é‡£‹±‹«3Àèìã 4£üWƒ@€¨«“Óßòÿmrú?eþ»uÐÇÌôl½}�ÝÿsÅŒí]�½þ7ÿ{Ú¦ {g+gçeÌ­l�»wþ»fVöÿ`ò Òâªjôr³§—}°cÏàâáò�÷ß|Âbr<.&37€éC¤âöf¢ ;»�®�áÿÒ'fõÁ“ ÈÉ“ñÿÒµ�=ÈÝÞûÿÆÍ­ìÍÌÿ2oæêÀ¨noåè ”û/ïþߘÐÀ:€¦–ŒËý£–¿0ó_øƒ_o�ÀÜØÖèkeü¸À{;».N®@_ïÿiøß#xfN€™•©Ë‡Ð?6 ü?Ù¥íÍAîÁ�ü·é¿$@õÏF¥þØ¥f {[O€ÐžQäò!ªÿöÙÔ’pµµU0¶Rý'¥ÿéglgeëù¿<ÿÃCø·W*�“�±íجœ%¬<€fJV.¦–ÿ"ö_¸´‹ñ‡ö…í-l�‹ò¤þw;Ù~èöãì±ú{tè9YÿÃô¡HS{ ³3€…ëðƒ…ÿè÷ƒú¿Ýe´$•ÅÄhÿ/Éüã&no 2³²·°°sŒ�œŒ=á™>tÀÂÎðfþ�´Ðã¡ìA.!W_€9È þïb~1þ3í¿ð¿V£¹Õ‡VþÀò€\�þ pí?&ñ6n#èŒ?j3:Ý€öÿFØ>+��™Œ.–NÀÿÃô�¸ƒþ�“ Àètúð¿™Qú{0ü£y¦Sõ_'æ?cU'� PÓÊìãnñ?\ä�]œ¬Ëü�<þû�þÿ*@þï½ö?¢ED@ÞôìzV&V3'' €™™…Ã÷Åšþëðúg³|¬é�ÿž Ðh ¿¼2å ±No «ð/žª„"çf8­ÆÐ’Iü´œ5Õ…�#Vð›(XØ�MQ’“âÑ÷K ´ÿªE‚iû¶ÑžòmòÆLYhÇØOÞI\x,_ƒA=([~) ²‡”úH&¿H»Œm&»#±ƒ >v,ÊÝõý1–å×;êU©^eÇZ!”{és+†“-šÇ ^7þÒT7¸Ëû#F|Œq¿ð2ͬQQÖ˜ ´Cßwô]ð˜RÁ—hªÝlžtqªGÇ�õ#ÝHçn0B2‚J Ie²<–{ր钮ŒeÃhÌpzå÷)�`²º’‹eÖÕ 11Ë”•r^ÆCY̳¥ž%/?â—tf§‰qHæU¿íÚµ¦)¥ /ˆÔ>OíÆäo¶’�SHŠŒ�Ž.î·Ý§(bøÅÀÚXóÁ¦:KðÍNøí'=EÐR› a—loŸÞ¦P?ñªdq876ÈK�æ`ó™aˆm—Gôᇠx©bØÍvF!¸ÛeU`F»„t“e ͤU†Í8i™ ²Ów€|1ë#vÐt®×°õ“ÿkzT î© êìÆÀGœ¥‚ƒ9ß´I,Üêg/´weJ>ÿ¶]½àåÖ·Ðdþá5YÂ_Û¤*=ˆþå„Ö8qýUJÜz*rÍçÁ÷¶ DÎÁtIcL5rv�éºhï!×  Ü3~´K‡ƒU}*s./1Gn%·G¾©»»Ú˜R:™\’vHªˆS9æ¨à< ¿ž¡£¿z5ˆm˲:Ó×uèÀ3 ¥ÏÁz;â~©ÏPJq!&¸¸'®°ÙeBMpwÔ_­EWùø‰jŠ?×èzÂÀ/ðKD•ßã)¹<ó��QŸòá÷úáwgÇ\ÈôpnÍcâÒÎkìÃôÞ�©§Ãßy¿]É”×—Ý(z¢æ~¨4cç<·œæ»Žº‡¨.ù䊟âôH»¹£Å·§ðMÉ¥q½( /Úȹ>Õ^AŒ¼2mH{B5 ìœþh"ºcÄø²ñdGžçíR Ÿ}ÃI�,€°¨R&ZÉáÞUÂ)2s™½ƒ7Ïa£¹!—[­EØw!ÔqU|ûÎiV¡þxþ ¥‰¤ŠzµYðõùÍÕOœGïwž£&¾H)³¡Àf(ËeLO(úÆxcÁ¢a‰FáWÜxæßmT´œ“Fzh�­ˆJ™¡æ?7^Ý»N>I”ÉñÀÑøê:¹¬ª Mt¬‰K&â?}¦ŠÄ±#›>Œ-ôx+Aúbãý“'—>½žJ9On nâGüÈU�ÇÉÊÚøIë·«õ1Žz5�Q:]·ò´É7¨ÚçuIø‰Dù{Öqvuáe$ŠàÙA{‡JŒ¼>h¿«È#Qî ÀÊ•;ÔyA÷Mæ&d1õâ •Â2£V±^�H­HŽtå¥'”%h½}9ÛƒÁwŠ(qÓóοÁë]œÅ­/%ã!£�zî Íîšz=®éT‰ÔˆåLá{³ñÝÊ�;Ø›Ï>Îãß €A¨•[°ùÙè›k›÷ÂzyVž}î­ßN2Øv“C^¯“º�}2’ÓIþiT>4XZ9Ñr®nòÝð€›ßQ+ ×:iοwçQ�g²E¿¾ZbÊ�VAš*F RùÂÛtѵì 02(…ÍãFÃq³â�”9\s÷8©Ñ?AüÄ_šûd È¿mÊëù·l³àÎi(~.¬Žïï-AÌH�ª-(qÁ�qƒÓL<½µÖ©q\OaY |ŒêcÄÏk5 Væ~…÷c|�ß¡~• t¨iEé‘ ±Æò°‘Hšó Ì‰Ìì�K{O†>}¨¤€z“;wǨ¼ 'S’�ÃÈì%¨Üèª7v‚�å5äêKÖså$ÚWG£ì4�Ö—*ÀIáÓwº—2Å2l1{Ãl=j4½8C^R Ì”e�~PXûTª U"‘¨jÞ¯9ÅRðe±{œCié(�•UxGùêó‡+cr$ïFZo«w¸ï‘›!^¡·­zßKêá),*–, 'Ÿ°Ý:oNºDvŒõAòà ÖÄ::]ï:r¿]Îð3&Ã_6ÿ®‚Y"Ì‘òj*ÃÜ:Ot‡b8—.¦Ç‹ |NFçŸYÓ ŠóCÄ-‡(K¸Í@‚ "ï ÃXèÏgµ5È7Ú1zv¢… 3÷;Žë3Ð`X'5ÿA»ÇõÞ-Q!­U�c8�ùœ, ƒ0�4ˆsÇyÕB>[2äèïU…4¼ÑnìÐ%9uÞYõ‡ƒ´�Ì•hñ�?#¡JË¡¥Ê)Â|à]uêR}-dJ‰ÅTòc(R¶^ð¤CwÂtþ®ï˜B˜�u¿¢¿0V�?¹ƒÏûƺނs_íkÑ;ÕæûÂ{Ùþ‹¶y*YP)âvñóÐõ)\dñUK�HBÔ;iØbÊüá øV^rˆ2öØï‹æ Ø%2I™qõÄ£ãÓãû´åCØÙ�•·xepaØJä#]ÌC—“�¾´ÖS™rØÁ®©9±…°üeIÞ©­`>–³ï&âÒAO3³rC*‡nvÖ‰xAóˆ¾.ÙD[+†„H ã@{I-âYƒî¶[ªDŠ•ï{¼FŽö”æO^…3NøŠü?3¬E×1+yÕD»~t2n6†ßv]#¾ÐáHbjø�¶¿ûsº§ÚgH²ß*—vó /S¢G�°uÞi‘%·Úÿ‘-ÊêhÔm@n/©÷þ*KèÛwp¶‹£M76äš�òQ‘Û %åï�MœºÏÆ0Êõ‰z^ªóaæùF!%«ÙôsÖZ'*9¦8$ïÄä—t ‚k%Qvܲ�:MDÎr•Ý2¤së]1vU7gf&IÙö˜!||~9�žÅ~¤Q¨EQ€Î8¹÷»‹­fI›#4Ññ}6öœ‚€o[œ«·Væì¥zQÔ²»Bá B:ê„M|i2æØR#êF�aw-W‚èhã©ûsÓª\75¬ª#é÷®Ù!Z«@ @Z™cÜ7ŠÙ^�’N­´Oï"�Ô¢ÁW}3à =°ÛÔd²¸#�YÀ‚†’ Ä åUø™P^®çßk¼b³é§1Ld™Û¢Ïwð_æçJ4ax»é¨}É›zX£öt»WÉ¥†™:ÜYQÛÜÔOÃôx±$ãµ|Dˆ¼]Döb€-³ Pn Ã5Ôs|ƒHjþ�Ñ«1ë%É;¶ ß\:°QêHî+€xVrGœ06*ŠÒo a$eÇÑÕJ»ƒ‡°Ý²3«’nôôˆþý½‹’vß»1îôn70.¯yX4mZA�x…á€�òœeþ&N?Í9íÝ�D} óÄøc±Ír—ˆ@NÉ*xÖ†Fxß•·�ï£mI.r–Ži¥\ŠrcvoÇD!}p„s¾”—/1Õ/nüzv0!ˆMš”k²½+͹Wôü×W÷±ðáä[¦ð€‘¿‹½7rNaOÆØÐýOôžÃu„o#¯ НNöå‚® �ÚžÝN­óF…†켩QL¸ú ¯ûæ_½‰¥®Ð˜€è_¤ŠÎî5,’2*‹U�¿úΊ¢–ä ìWÔúÌ] ÁëAè¾úJ\3 g_ÕON)'­u¨!Z‹5Bè—SíJeSšà‰+Qw?/ó:Ó±eÙgÍà-­€ƒ�ý! `ªƒ¦ï¼E–ToS»3;ÄÕDÿñYíÉÉgtí«Èä^IE¬bº‡Xc·ó]éë}Jù7Þt¶8 Y®%αÓ¤Ö.˜X‡wPOõŠôŸx¤ÔMÛ$cÙò{Šüøã·û —o±·Xžc<—Àú<ʸ%—‡]S“ÙZþâ Sò‰¤\E43º^Sé÷?dxF·*'õ…LáÁ_ |[.—Òýg ÉœD¸Ÿ�,hØò$S¶ÛÊ!‚ìk)¼¸%‘�oâ¶Ît"©¨¬Òá’TRŠu[²Ý`(3Lvq±W`|Ù)TЇ¨ï•iXzºô"iÀäß°Ös*¾µ›Î£ûŒK‹v›œd26y×|‰ï@¦t¹ã€êžO«’ÐïrÄcì7«uéX¿þ<ÚõèC®ªæu²ý±@¿iÁ™úðºá¥ ð¢J6¾Üý>õháÅ�ºë\;âðg~š¥º+Ô—ÚRA×ÀÙc±@~ ¥ß>B~K&?ÈU�Ãa^}$ÄïY¬•‹± —ÿ‘`*�¢s¹ªM…SöZ¹ÓPâî\t^"P)âíëûQc=èð°ä)�8©²c¡¾ÄCUùÒì”7ãÅ›@5Ül7û¶6Dîú‹Xñ»mzMÛ‹>,É 2°§[½Ç¶Ö禺Î�˜ò¨ ±‘ˆصk1> S�ÑAV0Xnö-tx�¯QtØ1DÕãt “Ÿ_¦™L,yþ*\V„r¥¥bÏ%žô«ò GÂ�Lž»oÝ.²·Ïß©Æí«ç±˜wʪ^ƒÓÔžzähÇ™+ªmEhäN¡Èñv™kísé˜YaZ2Ö“�RÇÒbh¾ÊÜeº©“¯ÛW'/ƒ;×K¨4~ñW¬„ŒM®ÒxÊ…¥{ODñ[gÖq�ûÅ��}*rXŠ4¶b>Í€æ�•¤¨{¨@ \ôûcëÕþÀ¾Z .Žm…„V;©[*ÚÂ|ÎJp(mÈ·±JAÖ)-i¡[BötVœã4재èâ<Þ“¶Œ ý#ÑÐÏþyºò¸Y¯¨ôj3¢ÛVT½²ßÎô[bÅ̉|9 åk]Éð. ÂåÀÊVvÓ9K§)¡˜Á7BÕáÖr¯ßeŒª9AWÍ MZ3v¼>I'óœç¼ãU:„�—™�µÈqY�·ØƒàžTð’Ñ\mÂWšŠ¯®\ïœ>墀#ÅËiî[^kˉ`>ü(nJ¹ÈîG‚Ü]á\ñ¯šB{î�rQö",°µýó]‰N½oð9g– •½Wiç‚&�ã0ï>ÕYF4EƉb)¦Þ5@¥ê ±p°3.;²EG@´ó=+uä÷¸á\Ù7zê�! yyàßnè;-ìàóÛ¥Fþݸûi¼2ñ­ä¼Ó­±ßÔ‘I+<ÝÊì‹’t·ß8KÝ ì45ϯ�PšëàE³QÚT‚ ú”=m¬}�V±–WòœÑ¹ØÐ;+F¸Hb½ ÚAiåŸc_xµñül?ObÉj�?)dö­U“é*³`cû±êL�Ë Û$jPô†rmq­Ç=’1ÛǾÈíéW½6FÏ‹FN;ÞÆeƃìqÜ;-ãIj¸<ùº•G+6¶µm@Hœî8á�[³©E#¦?³Ë�{Ùw'w ø†j.�Ëô€q d¶8ýžgæ\îQßzê_‘ ´•M¬ˆîËuŸ:�Çñ; þÊzÚ–žNÂÍÐÛ‰Ú(w;ž†-ë`ðæ:gg™wú1‡Êç+n{~ðFÛò^e‹Ü˜;‰'«5Mœx‰•h ÝžcAô²�ñˆ„³ì€õûøÎ;gT ÛŒˆN›Hk£Qßå[ʽ-ÚNK„©q'›<º- } ÝeKvQ » ü2øSCF<„ÀÍY¯ºmA%ù+··ÄsG³nOõè¤ÓÒÕî!Öœ«¼ÁÛ³Ô4´ÕTÍØ¾Ð„u-•¸.Ý´D†Ä'Áö;v4ÖÖ‹~ﲯ:1}Ï~9³�.VUYÌr6öèYþñm*!ü*VRÒªz÷a#piëb‘¤Ï0|çËaZ ˆÍ(úógK„º˜ÖHÙÅÄ.±_@ÄM©²]¸fqÝ«NŸV�Ó’œ�m,h§’Ö†¬I¦çøÎ¶ÌõcÄXj_¾£MF¼«ãÈTNÂÀÉÜü¤k·^ L:$í•þ„¨çS;କ€Ö$Å“I¬êUw·†Xâ�ȼÝ…RfšÙ²Êȵ;ç…i‰ïÀ‹¢`VNü½k•lÄ+�²sAç²óŠ~ÿ¿ÊV hÓ5gù6¡‰fN(RâöˆÙ¼Uë÷oÄW»4 ™ªúBËzþ ^Ÿ¼× VÌÒ >@¤QKÔñ¤}«?rÈðsÖ`ôâ{艬wÄo ²«šk2³:ÒêçHu1n£óbó´À%¨@Ï;é`H3W1ij—áïÕT Œ+럌œoA¦¢29kÄ�\'T[ÀûÐRœt<^åcØáHE$ö?}fðsRÈWzű”mXÄž%Þ%£ ŠÍf¬(Ø„‰yŒ?®ò±ý=´¦NW xjFFðŽOÏ¿Gá”Ø ½3>)«²°—v{‹õ¥”ûNù;i8=w/ÛFú�L»€AüÊóɧO=û{¶©°Ÿiª å¿r·ä4ÐXöÒdÎ$ìdý©_ÌÐbôýÔ5>×ϱNW›ÍÈÃgFüÞè\ GC¥ó¨)ošøƒ7=ÍàK’7_U௻Ÿ?ÂÐ7’Áž™ÔYñ.üÂq„iþµq³8zv-×\"÷êó2ä‚ 5üœ»ò?ùºœR°ÒmîŠzæ}l‘—ôÂVêË1èS¼ÎQuŠçÓ—e¾t´cOy"Á²�¹½Ù×5MÆÔzˆ��oE¼¸Jñ±éÜûåpÛU+‹&Ó›t»¨-&@�·Ï™ÿR÷l*xF"�úò½[Ý1 ÂçJÞÁ"ü½šbñ”ĆÃi_ä}0VI²Á2õçÀ7N¥]-C¹(Xu“†Åp“]�e&³ej¬‚v¯„F.H±9Â|Á§ŸêwÏóEžñÎ-„m›±;w=Ü‹[{E?{Wža5.hÇ’(ˆÙE²9�Wu˜r«�} šZ1¼ê­’%…-††Ȧí{ŽºÓïå6§ÄmbOçcH²LS*mg çZ[¶´à>ù×ù_ÐK½�ƤRÀ¬ün9 ƒlYÊŽz�RøÆ`â+í¡[H–Ï캯mKöÃ8éCÛsFZ-kR-)4ˆä”6$_íY»Õºí þ‚²ô=_TâÌSŽ­um€Í|ÙÁ Ñ`itL8ñHiu|µ£ ÛMîYšŠ)á§Pu6Éç�wÎlÚÓöqÓ¥P½è’ÍÂÚïOÄ(ÕŒ3Äq­Ð+¿·¯jM)ÕšÃoˆÑ¨~£pæØ¨D@9}ƒ^8÷Fšs\MÁA=u”Ay*öWiÝÙ û35¾36{ñu^ý75÷/ËR•JÉëPyJÍ[¸«z·\{'Ê â ä´0É~ïq¯Ý³åQz:mÔGºò jâ©ÓÇ©Ôà¯óœ}õçjÛ¬­‘ËÔp`9L—{5ÂD~xȃóÄWÎUÁß&A™i„ TÄ™çÉŸ ¸‘ÓjCB/Ð%Æâ°'ЊBºôú .Üììv®±£YûÖ<}nMù#‘Éšp8 9�ûˆÉeÜå%é?°ƒÂïL:=V#®*LÆxÖ„uà J9ÝòÌ»â‘?Ä”‰z ?ùíE|çß&ÕÏ  ò¯èÁ ž@LDÞ¦�Yø:\¼[¨G;q‘¹¶d3'ñ�×[눪Öÿsƒf |.5LÓqáþ¢¬µâ÷Z'ñ¥ ×?.éOò#NÈXÁÁT=¿ëÜç¹'& i5Ÿ_¹Õ<5„�‹6÷6Hö™Ðt¶x:ËtùTœæ;û“(5â`ã)³Þ ~Ã1õ;.=mx‹•F›Öîe ü)Ôë”ñË&Û@;@X°8wß'Vz`[³`—;HõèR½Ó›cÜõO|ní½5�ô1géyã1‡å*Æ6Š&Yk¼8¿ššTŽ…:«dþ=ìEÊf{©ž �Ñ`ãØO³ ã‹C;Ó*E‘t8(åG|{£›¥¯Tš®`žì|(–*ó=2±…¹õHg|¶sAOfÞ .Äq=x¿IŠìOዚ–Äcê-–˺¸„+èa1%ë†vb)ØzÇÄxÎ]{™>‰¹ÌÑÓí¹NÁšÝ½äÚ‘%õå�_çu†(Âë6d°¨ÆWô›AŽ•qpÓ—ãÁ§†vŸpn«óÅ4¯Y4‡ê†a�&âZòÜbk Ð6ÞRä™�Ü.9�î¤9„‹H 6ÃÅš•› LP˽\ƒx «¼6¸ýé<]¯’øv :¨q”ð§øúƒ6¯ô§S]·ß‚ÑbzKöã³`†J_]›æå™Óº´·Î°é_ÁGóBC#æo¹ù(iZ òh·¾Å„néf´ ¢gþ‹þrýV‘ì~‘‚ž9P�êI‹w.§=K<öˆ"áŠOü]½Æm¦îOÈÅšˆ�f+ö§™›7Qoúîi.gåK“ð°:w8óHÛ„N¾}!�ÿÇÅ1­¾ÎL²æÃÁÝ›}y“¨3ÏCŠ{}З°öE°Rå{{³› "²>ƒ: ‡Äý¿¼ËÜ›“"b¹þìÇ? ¼‡Ö–[Dñ.’¯W"w¹¢î›^�,zK¾&Í0wÂXä5TmD Q c–¹ýÖL8b´¯Ä'FÊþAº™�q‘ÇéÓ¿h|œlRˆWÑ8ÍýÃnCP.GcÿÇ]ijšÖš¬�Ù¶�RëèÓ¼]ÏétiîÑÑE¹§ZÎ×Ü›3¨JC}Í¥7 þŒ˜Þä®U<7âÕç ÍqJ,Í.:ä†)êzó)|±À¨[®dê7Âzñƒµ¨æ* c:¬U›ü‘¯]p_])ß]ZFGWÏ¡ñM‰ò¶Y±Ÿ›B1ñ$)O:û‰~Ë m B‹$aG Ÿeã, ÉŽpe†Ž)ê°@â=Ž|Ãç;—}×ü<@é@‹þ…ý�*jÓD3žib|2ÈvÑ9EXq;€é>ï*Åé£mÌøS cB=Xïû¶\(À�n›Ù°[,­zXµÿõyšyÛŠØ%÷¤>JW7aÑÏÆ1“:.£ M¯¢®ànò#rÈO”/r)«­è�0+—·Ò‘^cÙÔÆ$�g*´Ämù"…þd¿镘ÓÒÛI ‰$|êž�Ë5 ×=p~mïSƒù ãõtþ}ÙöK©l³û xÓ Ky‡5<üë kù2ó"uú8 ³a.;,¼“¹óÓ£ÇÉ`ñHÈvµ>èG¿Íã{º¤ Q,¹`[1åùÑXçác«uG>È™ýõEÃ熭O1>–¹¾a@ó©RL§¾Ž¦n«x,O*-näËðÆÄë�­ŒŸ Áò~“UûÂ�ÈgšVWƧ‰ù%>ýÌœM6ä%Ö_w¤(<áWJµ9Ï} 9Ë7äJ¤‚ð=Ï`¾N`�ƒà�ÒëX•M†ušæ(ÅÞ TâAhùhs!iv?ð‚÷úU0¡j-·¸¢…P_ŸO ÅaŠóJˆ†sîìäÛÔh EÀ ¸ú²‚’No�áèdº?1؈É-J1�µÅ�0éQOqß¡vÖH·BXìfåNæO”$s‰|.[”Ù/üjÕ–Å*[½�ëÊN$ý&f‹K@Îã{G†~mý$·f;í|{cºqo¢{k¡QUãŒôÍdæµÌSÍnó“{êåzïËE<¥ºÄ˜ DOæ�•ö­�;ˆó&«Ì–¢ªtKû‹ÇK²Ò{wX[¡ºn:^Ÿ�µõ›%Öη‰ŠF,—=9Jwz¨ý^¯!–çÍIá–z͸ï¹ %¸Ä¾;äâbÌ[+‹4hÀß ½2±ÓJ´<Û!¤{_+6Ó U¥ÂÓSÉSy_WËg»‡äpÆÖ›Þ\¼-U i†ÃéüÌcÔ­Y^&~䯀És¶Ç�,¸Øò’a�0û��h<ÕÞ‚†›M^€‡zOŸèOEõKU¿hêBåÏ¥,Ì1OþW)ÃQÊir˜ã7ËoCÑADŽ÷Ò(Bt�èc1õŽúæÙé]-N§ß¬L°û˜ìd6(ZDIÝE…:ü•ð0’…ó±6"¼ 70sexÞøc¿ËúJuÜË).Ïa• @sxŒCˆrm3…‡G¤G ïÅør”åQnÑ3NoÍJ¡!c£?@íß”ïõðl¥;C#`Ý`¡…ÃZF2íòUWyç°N9÷–¯ ñhoaj˜¾+¬ç¥þNçæ—ûWf8§³Þ޲“Ñ%Ñí8Seÿ{V¾àJèÒú”T2:ŸÃ8˜zG¸»‡­Ô!¼Â0)ÒÖÚÔ²�iTK‚÷p•=­¤ñSÓ.Oɲj°QsÂö‘ð¤£ÃIÂÀI#Ð`ç–ön9þLÿÅË5¹0@’ÅË�[�ÛŽ¯vªe’§ºë;uÛHÙ§šþÏ'9('Ðèúé‘‚Òâ~ 8éUÝ Ð¦}½kj[O³ReßÁ;ØÖœª3 ÷O7fûÔ£;2‹° tðÛ™£µ¢©†„<³ûÎgE•·á¥ˆÂÙk¢Wøñ‹³×¹³ï÷¸`ŒW—Ïñ²:Mn¹¬¯æ¨«$oºÁÛ3ë¬{z*ÀÃì­PG2)̲+2BBl¹jŽ÷êå^«Âʃ ’Ù,"ò ƒôÈŽ5+‹G{u8ÈÍìÀ„“æ(U>e7ƒüe´·áд×ÁÖŠÄÔt$7úüϰƒÃÑýgÏ—á6\‡ÁëŽ+ÿ�o»áÓÛ±Í(!¬”õ×Fè”Ysx7 |ùƒ4q¥ñ‰ôÖK*›Î¯×�¯åuÃg¯ìÕy!ͼ%4“á˜uekË--�áúà'¼5C0­xîKEwHÒIV2<šø-ëÍÒðëb8¡²c”°oeºóØô�ZYÇ\•Ë¢V]EñltUj%ó¦ìa€˜ÖvûiOJ¨ËгGRæñ„¸wÈÂgbŸ—\¨�ˆÔ»Ž�ÙTÙ~'¡Õ¥“Ó–ï½°÷é³mv%. |m@D·•€x6©_Ê+‡§fîç§ ËÎ;Äùðy7}ËÑ%4XF 5Ü÷¥0þM¦ß ­¹(³Ä¨’´•Ùõäe�ßñÜs¸!MfÕ“9”Nc’v&°,® ÓÌ¿SGøqnýÒ\ä�2X*æÉ­‘#ú.c©LŽüýùb¼ì»ì·¶¹a ”û÷XåÅéaØ�Ì·ýð4)rs6‰=xÛ|Þ®Â�­7 ýÕ9�]‹² 'ýh¦I˜¤<6²;ßTØÝj~%ËÊz—­4Cç½E ÿëï0f²;âÛùàßA©Ã=¶ˆýÍŠÊNûS‹Š7 Uà¡ÜXùó:ÇWQuþL/ y§qkxÒXâä®#�W'Ù�ø7�%Ý3ž¶#Äßi–CÄ+BÖ´?¡u¾ž1#·�´Š��£/} ça˜ŒKæ«'Š¿´3�û¡˜4BÔ/ã;ãú{GEë”IÀ¤M¡åå¤!Aеâ7´ ½³‘°3ÑÖÈp¹€A!�Œy °¹qJ ëÀT7‘ ú`•ÖPÿ®�¬Œ-QÜ^�§ñv¸@U}'þˆW2ó>ëS¶Lïúú´„W„RæÀPxWÓ™­?À°Â�‘þéD<…÷Ø�¹lÅuýzM˜0—¹“¼û-±æMét“b<£ºÉOà¡¡å}Zœm”WÍ£ý þÆ�t7ZY>W˜ÑwÒ`<8ÜVüØwk•½­/DhEMÝ·¤…Ö:•QêŽA%^ʹ”£í³§WëNªæ¡•e›¤­}ÿDººøO…ƒº´bȸL£ÊÛ (¹ßZ`ëä¦ñ¤PiSV‘zxÝrkÌ0R¤Äº›kd¬=éë¬à7ƒ'†^Óçй20Þš [�sã¦ÌÀã51ÊÍÔKÃÅi'¤%wW‰ðP*d“uºAŽ£¥(›ÈY»Ï?Ïà`°¼'Ó7N$;&ÎÜKºíoš‘Ýß›m¥DiX"ö¹(éÉci3»ÁÆú»NNÑÎá¬iw)’Ž…ˆhx0ð#Mn�R8‚J±D:(ˆ6A ˆÜx´Åêï*79„YòG$î´ ábÌñWQ>ž`õe£ÏùÁ#›ŒãA–;s`zƒÖã×1ÖÁ˜”’oÒN})3Âo-z¯{æõÍGk¸ùJd®ê×;Â"‹\ÏîZŒ™è)3kªüPÞT�? ¶d ±Ø”¯�ÓJô!SÞ¹×+5q¦‰ö_µôõ¥WŒè*ínpÍØ;·U½‹ÆÙÂã7ú~Ù“Þª4!„ݧÆê‡/ …(|$\…+›¦fç’“ž`Å}>„ªûëô�|/bÀ×.E�;»º#Ï œÏ�â¹æˆU2�á¹Ã‡Ê¾æ�ÜuÌ9W›7y ç.¯”pÂw-êèÄK†ÀoL»Lk%„@ðéÉ\}Ü”ºsi�àw\ÑϪN”^ŽGyƒÅýÕ<+‹Ð9H4& ÆÆ�ëø\´}ê #b¢~t9ÓqÙMwUà‹ÔQ,µ|MDhÚM 9Y ËšVÆo¹Ï4’sÁöãRã5y'7ŠW2–…˜ÂgÝN$­Â•Wê°ÉÆR(‘Ù´Íøã4þ‰ä8nŠ^Èp›�з{೚Tƒ¾­vmY~žÐø]ƒÑ_¿Æa>Ñ­¯hlPJíá@9Q¸ºn™ÞÅ�ª©a:±tG€ˆ�j˜(¢#%Är“¶v›Ög¹¨-½ŸR”צª×Ô Ra©Ã’.‹ ÛJøºzÊ¡‡©KqR×wŒuó‰ŒÙTe˜õî8LŽoL^î›~ÐÄUôn}ŠTÕWºáU«È$¸)€4S!§8•p¯|A긛¥ (í!q v‚@iÿ¾Ê´…¦@×<#º8ýªikb�ߟhî,Ñ^‹4�¾Áü'CÆe³´fÓgîìïçxnTïHÕ(ÔA\N1¦P® ÝãÑ.ÇÅzòwÒä$zƒ›¼½+(î®�,Åù¼¤-í(ä.¿%k€­,`ÉEÅÒ‰« ›H½x&¶‡Ð¢Ìã{­§­_¦"Á®xdŽ#'b¥úÀëg>wŠ»¸²Çe¶{}X¢¯¹ð‘‚D}ZÐè0¸4<ûçBöçQ?úÜHu99Ç{Þæ˜k­Ùæ×í!= ï§‹Ôž–/É´³µ+¾‘¤}•Gƒ®ÒzåwÃ÷�Ç4DÞ cÚöF°ykh¯7W‘™mK�+þ3û6Ï?UÖ¹ä sú,îX GÄ{OJñ|H•×m�Ñt¯yu1RÈFª&ø.µOŠI¸G"z%üe·†Ù`ûk2\ c–qãÛlÝOå¾è±è6‰>‘¹RÇÑb(ƒC(JLʯÏe©à:–Ø¥N.±åÙö�üI_* O?³›Ÿ�Q (!tó~Íhe†çŸ÷FŸ‰k޹{௳¥ »»ßÕ[ Úby?öaõÞEëµKÙ‡�ÂRÛ㌉E÷ã §Tßt^b�7-´/¦Ú&gb£2ˆ›!hÛ0×Bqþó1°¨xáN •·¨š9iв)Õªc£¶sQLçŠg(Üœœ¯°G„.fã&%Â¥¿}á…ï 1ù{[–-1,3Ùv4É/ÄαÅ<›(“`È8î×úbµ})'^{+v•è,•¤ÞÓúé'tpñ«´ZG7†¯ �o>D;+RÖZn)ø Ü]my�ÚÍ™Ý5¿iœj ®óŸDºPÒ=2‘8²àJ7$=l#c9¸‹QnzsÉÖD/Ë÷~_±) Ä})Ò„3û%Q™òNÖ1ôMÐwî†ÎŠÑ…K9«òìÜŒ·³ªÝP“Û‹ù+S¡ôв&  ÅíÛ½–‘½�+ÃïÉÎm¯ƒ˜~¿¹í'2îëZüŒì屯ž‹ àõ¢Å Võt^³ù�dzMµ ÑcÞö¾D1G¾ý~Ë0n6˜“°rvßè"Wž¹Ò‘±YþȰIÝ�ŒT©êŠõµ&¹ÑS²Z쫹 Ë´­ÎLö~¯Ù[ˆ¬³éœ(£�€/–­~}ÈÜÒ”%¡GÀòÿø i9ºWÑ3šw¹ã.À™³­sçŒÊE'³Jý`C…* ¬Æ6ƆW_¦i²Ú B¶ò×Õ§+G �Çs.û‘ø„LÓèê ±¬¢€Grª“æí%N- ²Ñ…¸`íZÂ`Ô¯ž¢<Š2Û¹ÀØ0¶Ð»ˆ~4íQ¡R$`׳~ºGåàåÅ||[^™DT—J;E\£‡4ÏR‘×®†vrFŠ ZÃU ‰�ÎF‹BczÚý±uWÛBi„Õ<Õ›yVxÒ‰“ª ï°ÏK8P³°ì`5þ\Q;žÖ©<Ÿ“bÅ�‘±ûÆb.©Ìi~+âïšH ›ðÄA(Ç 1%X`· og’ïÁøèRû�ÏsLGéÎ’,tJ]zå6n#2÷6L£ê\S>Q9�Èš�ØŠ«¿2QÒ=sHRTŒÙò(e¼qØ&k)ȽõZh³†‘@õ÷’xbÞduOÖí$ðòc©Vx¯ãT´É�S›™Žf_b ¤HÁïÊD9�þb@dy {ÚÙ6é–£M«g»Ù†­*ùJåÀÀyé˜Þñ~Ðæµ¨ù¡Ë‡¤z| àð°Ð±°ª-º,bJ‘ÁœÉ–ÒwÄr–Ûç…£„Oô™Þk{Üå&Hû±ü쟗ò]]£\«töÌM†aS˜t¬ƒ~ö˜Ó)�h>ƒKÛAÜ[ßKûò#GÉÃþ­Ž ;�TšºßvÞo¯mªí›Îò§uß+/¯š•—�ðá2ÐeûDx0'JÜ ù]Óšu�C\TÃ3ÊEÅ=·&”HÝÝÚ[em‚ wk»›Ü‚^ÿ_W²Yßa!ØkÞ¤˜’‚ãKôÅU +ú5¥b/ç‚ç`4‹U™Õz {pÕNÌžž–<˜¿„xC©:2÷Y]ÄDgt�úh-Á€TFüÊC,¶Ø`­t73ã T*÷±ˆÂªöX¼@xNsqˆq#wø¼áwc#=.®Å×›*ìYÏÇȃ<ãH6G1?ù�¦¾\¨ÒcƒLÔ¥’}}ÉèCF ã¬'_4^%$¬&E-ѯªŠô=aÊávÑçÚ/õÄO ér¿Ì§·Y=ûCËq+£Aù¯o?v÷#³Lš$ùKó©iY_(‰ŠVRóöšFçœû'õjô®å$rmGF»T[ÔÚq¤Šã&“¸£j+‡ ¹“ߎJ(-›õé½Å’k:9žÿ‚´~ý1xU[ñ�¡œÓ“í«RØQ* �ö§ëÙµ„Ð<>æÉƒòÁ;´âò+_³Šb§6RÖ†ÃÌCø¶´”ýø¦N*wÆÚ^ïå1^ƾý=„ï”%Û$à»?,$ψ[ˆŽçmzÌm4Ž‘JÙuÈ7KèàÝ ÊÖ DÆ­êú)ÿÝi}¤]d‰ ˆG\·ÒåÑîfe±7GÈ;ÉôÆ$Ê$ÄÊ9~|©Ó/¾wëj”°)ïÂPòÎuqLÉuv¿—$�6{¬¤&}ôAêÌRé"$Üëz­IH™uãEÿ_›fùքðQ¤;Æ@b ©QÒÝ!Ž�é £¤¥¤”TÒ"Ý �Ô襛ÑÍÈ÷ùô~úý çþr®ë>iê¡}æzõ¹¸W²ˆòdçY[¡t@’!?Ð8Ñð‡²~H¿¤Bµº 6\k/¿zPÝ.”ºHpåòÆ9�3Šõœk­?¿»ñ6™�κ ™²µ˜VÂô‡ÛCb äâ•Ù %† yû5�(f_«| 1óAQ%G»(æÑ?`à ‘Vç©ød9ÕPšÌÄ9�áצƂ¶Vïf¿è•त¼ ÃÅW¬7‰!#ìyùO¨g…SX�,p¸¿HC¤\X"!¤ëwÌœ&Äíâ/­*–ÖÐæÅ¾×ÅÕ´Ç9ÃÒ(왳¾[°êˆ½e†>Ôfçû²åç{Âù+PóÃ8½ºþlq˜aë«–?yçO?×ï‘?.ç¦kwŠÑˆ(¢¶½§úÂJûäų&i†$^1Æ)ƒ€žF¬jq�òËór ñµ”Ü@Exú²8e"Ùñ¦á‚é§¾]Ðc^‘G° Aéçêõû— Î<Õ¤d¥hVâÝÌ̘í¹[_`±˜!á\ì³SèÓÕ©(þyf-íLp3GááÆ• † x¹õÛŸ˜^Ö†X4\¥s 0§ÞÃy­­o°7ÿOþHEÁÆ3 ›J_¶Æ53]hÚ.˜[#êêè7F8ò{ †*çæF¤Ÿ¥JZÓNŸ‘#¡ÓLu�­k_ot†(Ï_êsRÏ?76xã±5$k…)ï"ÏM¥1¨ñ¿¹j8 0´ ¼l³Åö°Ž{ès½pŒRzÞK°,BšÊã”�ŒÏe¬Î»è˜RM›öÃ�–�뜣µZÒ T^Î/Ä lÚéüÂÿ%‰¸okòš5Uôæ‚L¨WÔ~Ãl©f@Œø÷LŒg�Útñ«³±‰xH5u—CæøäÅùnÞ¸ûqÜGò†hÊJ 4>¸àèøÏߺË:á5PI‘nby±�€ÀKUF²]mlÒŸb‰þïéã|‡h®ó­”¢ãçÔü Ì×sšRlMû&¿2ÎwšX2?>4h*6J~�29üZþþïxÊKzÔ¯…Z±/q˜÷?€ãÆÊ�@6gÔ S¨…|Êĸä_ùØóF-N´ ÆþæâüÒx©yÿËûnTj×ĆÍ1¶¶¡ëfÂêÿ_LëºH°Ëä@&†|vuvÔ¥4&žCý¯fAèü=eöÀ\ª¨ä …Ôëp¯§dÐó2[í¶üŒ”ʉ@]Écç6`L �’ÔN®mïÈ+Ïž;ù¨‰éœÕTɘH�\ÃØ?óÄ’±S<ŒO¿Ó¼ÂƉ‘RË;¬úÄÅôKÄ=Ü«�ì–*zÎMª. %¾=)©Èi|L'êò+Î.-^Ë«»yö>ò·Ë=}aé ¿g××Ý µ5¸&TVÕÝ ¿Qf3Šé½[˜ÝÛÏ"¹JÙT?Žj)ÝÅ;0™m‘¥¦ÖV“Æ^:EÎÛÔ´{³X(Ï ;üf㾿žj 1ËzŽxìÚƒãÈÒ?_ qeʑփ>Â…}…ÿ¬ñ¬î;^ÿ…‰“uÀå°�.–*NT~Kî�™'/óO…å—Ê8é‰ßpzËŒÝçšü6hA7tqA¹”��‰ÂL…Ÿ &5EKÚjßáÜÉ“Btqc3 óhm–Âw¢:GWS|k›*¸QáènïÐÇrHlÅÆû“R�&iYfìÝ™S?Èd*ËŠ±ÉM>)/ŠEsþãÚwè.ÇixK«Šgd—¼Ý¾xÇ®qîwïà+ymyù>ä´$æsMTlg’CpöÅÜÙU”k_;þ* dãj%ùƒÓõìÒcƳÿüƒ(xòzVÏr®p8²dœ^´F÷ìAR¥QØ`2•BjñÑ!½ì+þ‡p©} £˜VGäQÙÕí,:å^Z’—ˆŽ?éíÔʘjž_b/â+¯ùý’�îzYÝœCq?y�ñzÑÇ+ìÙ ´³<[£êŸˆÛ…2Bá/Þ‘s¤0Ô;µ0 Ó 3¦ 4~vW`ï¹ö¶]Z¸?*Þ+Ñ[—´å©n<Äôã/nøû¤ÚÕÒâ…“Po¯uÈU'á;ÆÝÚýmjƒÈ+BTcÒJ�²Ðú¤Ï2}f™`]I‹x÷—¹Æ2×ïI7„FY/?¹ÅÇ¥a=E÷GáEæE(%„^ÊÝú˜E%§tÛ[•ƒBþ&Êiš¤cTË®Øv¾¶ .Wî-³²èô™óÙV퇿-ø…ÙhÞi É’1"ªÿ�Û ZV© ¨E¶Û§ö†Ã?�(rÕ²@ÍQé%œý²ölΩÀùó^[š·6Gë”ÑžLàºeòRÍŸýT*:D"·3Í‘¯1÷‹ ÏÄ­«¥‘L™ä‡ªJÓÕQ�é&oÌ`Ìàï¬QÚ²öíÔneDb÷@@fÒMMMÓ²B²…þŠC�VœõÐp373Oà)êÁIJ î?ÕÌŽ¹4 ÞÈÂu-¢WŠ–™Úf×™^·èP³-"8ÈC=¾g0Â~Y‡m&ˆÝâód'˯ê‡ÓËæ_NJ¥¼(2ÞT~~µÅµCAæJ±öÀþŠÒï+¿|¦ˆ%Ëç%{›ÕÖ’FÒuÞÚ»;+XoËeŸÆY|þ�éîîö1ÔøÕ-%�¢Î»ÓÊ5–­Ê0xƒC¹vÔÔ�^ÿû·ýª†òfSk3zØ-Äk&�¹òÒKk¿—ï,Û³pj¬žRcÚ5F^¾©n¥siéü¸‡ÑâhŸ‚d2~x®Ž—Õ `A3×z€K©ã¨n�ÔŒ<¸8·Þ×ôß� ‰%½ÎLœHÖš›CÓ|½†8ð¤Þò—÷lrP…¿2«’+F£Ã¿"‚vðAvœô<£N·×ÛÒß,~ÛߟÉs‚·>ÿµ±£[(�Ÿ¹^YQ‚>oðëÂd=*Ÿ£!§,^N "§‘f¯´ Á „Þ¸J5â, q4î¤aõj>áJ”ÖàçÔ] ¾«…�e=`+�ô,Á—+2Þzb�èwtAx¤Å:òB ïIf¼I%ÌF¯Ÿ{'T½/öÿj JgÅÙÍ1 ÀO¯v… /Zùè–¦»ç÷Û¸zT;ã§Ÿß�w{]ò|fÏV5n­©Ì¾ëõ£Òr}ù=‰$ñP¸©s>2Æñ{Ok3«ÜviQeóJJ#~õ¸¨IRÜvPp-SýªÅ|©úìdIüñ!n`…Gnᘒ‡CÑÁ‹ †î�ëÅûx�T�¹f˜ÖY·ìU,”ý’®m*ªøOþ±þôÿ2�­?³‡aÌfSr•Ü*á?3Sx{Åuöþxžr[íöÍó`ÃÆ`4üd Cõ?®f¹ÐJkÂí�¼×K¦Ê²ÿF )büB€WrÄ6DæüOóL1ì‘§ÚÍ4¤ÃÃ~Fp #·Æ!= °Ð|@f> ØÑ»YjA42³c'\Cƒ¼Ç³‹Ébµn/ Íê´õ‚Ïô“¾G¿Ê–=ý+!`Kp”ˆÆŸ !ÚKÒÃãÙÐaQ�héúµZœÒ?+ü(ñ�¼ÌA¢�#µÝó;§ â[­+E�çN¢%|\û0È€²jç IzmDè${­. \Më”-(A>·4DÆšƒ†¿¤$¯Š¹@ºxå¹™Þá¦â0þð†ÜÇ©þ®f…PoŸåà9nû[äù ê‡ -=tVPüÕÓšàQA6Ålœdô°¿äÏd¾/Å™qu퇺-|í÷„Õ�ÊZŒI«ÆlÃcý¿L6Km 2ÂA�ð¦’×iú L%îù[ÃcèSpÞ¾ÿ_…ìÞ®ˆN-0éÖÑku_�’‹¨gÆ®%dæCMöçÀ¸u®®ë‡ Ei>Pðß)1÷µ´t£ç¢U�«—̼á?ícµ­+Е;€CJÝäJ@�'¸…ò3G•W7%ªßD»�Ž ýDЧ+�"Y³¸= ªœ•#û[zˆB핹ֻÞןW�/`;Þ°­�ìcÿ<‹ïB¹_èbNïj˜ Ëó3«»K4nŒúbea5a"ð˳öÔ£�g âcâ¹Ä'Ug#¦ü5‰>\`¿ $—&Âk Ã¥fcK|wb%¾Ið {õðê÷úUð¯¯�� =ª°ªU»xÏ.%Þ»á+“VñàkÉ&æèVÅY_ g%ÉÒ¸9ãÑ«â©âBÅ*3½Ýñ¯ >NZª�Ј‘ºùÖmâ¶Yg¸8Ÿ E]‹núpÕÏ Øoªwfq‰‡Ž– *aCA5†lbM»4yDë{Ô©È�×O4#çeh(B3»ýðž•ÚþR�^¦åúôö‡�¤¥(_æib^}O]5M;Íz1[ÿ´Ï¡°‰¼ÁNÇò'Èä £t…&8öp¦eØå#¿ë'¯¶£Ç=‘õ0›bð[ÐÒ÷Þ¹LÊR_ÛÝ¢&x8ÙI¼QKllÙúWÀ PuÎß³ÙèáÿÍ‚¦%¦ Ê™2‚{\—1×- Óˆÿi”ê4r~…;¬_6]à—r=nŽ/;‘y˜TîDÃ*�IÒ SxGýö‡N“qµ‚kŸŸâ¿èÀ7Ñ <L:´DÈp¯‘¼˜–ÌHÝ�H@NgQ3ï¿áJI7Û¯¿kKÈË­œúžòeÝíòç�ûNûÚ²/—ytÔN|lôH’ëGcš˜z½É›U¶g¹8òÂÖ„ò<-AOf€"'*ó[oÒ?ÅF6Ï)±VÔþÀ&§ˆçhL÷w:0%Vp…�> ÿ—?­¹‰“Làùø³õÄ[Aò÷õdð$#ò]ñ$9¿2Íc(@‰Þ¢^{†‰XÞÿÃwH(È\ƒÚ§.­3K=³s@‡¢o¦O^ô‰ïŸºFÕc;©ºôjÁ$c*ú®ù>oñž¦K§DCyq·qceé h¶÷gÒï:h] @#|"ß(ê6I§0�ïüŠ«Þà¿Møž™ÁVÝMw#ASÜÿ=˜j‰hôƆ\ „^ÜI�î:ÁÓÿ ݬ endstream endobj 1665 0 obj << /Length1 1790 /Length2 21416 /Length3 0 /Length 22479 /Filter /FlateDecode >> stream xÚ´zeT\˺m ¸;Áww îÜ¡�ÆÝÝ=¸ww‡àÜ]ƒ;‡à<²÷=÷È=ßèÑRóÓš5«z­MN¬¨L/dlk·µq¢gf`âÈÊ)ÙZm8è•@¦ÎV@ 9¹ˆèdnk# tñ8�Ì FNï¡ïLLÜpä � ÈáÝh 0tÈ�œ€*îv fð¯�¢­£½!ÐñÝ ²15·Q¿‡ˆØÚ¹;˜›š9ýÉÁJOÿ'ÓŸha€4ÐÈÒÖÕÑÒ´1H3È1äm]ßAs•­ Àd´2ØšT@Ue1%e€„’‚ª¢25Ã{beg;;[‡ÿéEDYEU‚ *$¯"©Ñ$T•Uþ¼ª€lÞû7¥È«¼ÛÿÔywü.'¦"¤¢©(ÆÌøgf€ ÈÁÑüOÙÿè�â½3À?[{5q°µþ«€ÊÌÉÉŽ‡‘ÑÕÕ•ÁÔÙщÁÖÁ”ÁÎê¯þTÌÌ®¶–€÷w�è/bœmŒßét2ý�àÏ¢dÍ�@6Ž ?Aâ¶­ß©|zÇ�þ·±w"œþä´úÛàý[3 ã_±²ŠŠ²k ¹�Èhcôîètrvü…½?AÆ”7ˆ8;8ü©!÷“Ãÿ–ùGë¶ï3Ó±òôºþçŠmœ=þ…›Ÿ¶‘­�£¹£“ãßAs+Пîÿ¬™¹Í_˜œ�¼”¸˜² ½ì»ðlèålßÙ±aprsúËûO>!QY€™› Àô.R1c[kë÷®áþÐ'jþΓ“­ƒ;ãÿѵ¥�­«�çÿÅMÌmŒMþ0oìlǨjcnï ’ýïw)È ÀÙ@nFfŒÊý¥–?0óø�oO;[;€ ÐÊämnzƒótº€NÎ oÏ5üûŽ™`lnäô.ô÷Í÷Wv)[÷ßð{'ÿ0ý�¨þÚ¨Ôï»ÔØÖÆÊ` 2�c”·uzÕÿŸ}öµÄ�­¬ä�Ö ªÿ¤ô?ý€ÖæVîÿæùê ?½RÉÛ:X­þÃfî(nî2V4w22û›Ø¿q)'à»ö…lL­@ï‹ò¤úg;Y½ëöýì1ÿst蹸þÃô®H#K�£#€•ù/è�…ÿè÷�ú?Ý%UÅ…Åhÿ�dþr³1²56·1°°s€@w8¦w°°³<™ß%m rûK(F[§÷€�³“7ÀÄÖîÏb¾1þ5í?ðß+€ÑÄü]+ÿ °¼¶Îÿ8Œ6ï“ø_€�Àhû/ã÷ÚŒŽ �Í?¶wÄÜíŸcf£“™è_b˜ÞWÛæä0z€þþ�Å?Ã_šgú'Uÿsbþ5Vvr°µ©›¿[ü‹‹ÐÉÁÜM›é]°ÌïøûãŸtÿ­ù?÷Ú¿D ÛºyÒ³3³èY¸¹Ìlœffvï‹5úûðúk³¼¯é?ÆNä2‚[^°5â ²Hn )õËŸ*ƒ$çf8­ÀÐ�ŽƒXN›jÇû$š³Mú\àÿÝ/�¢ÀVV’G×'ÉߦHƒ<Óêu½%±ròÆø‹àÐGÎILh4[�A5 ]nɯ¬“„úH:;O³˜m&½5®• :z,ÂÝÞõÅ2ñ†zõ�D§¬u-Òµp޹ÃÁ Ím ·oiªÌéí#&Ø+´L3k�‚5* e×Ó…~P¡g†ö9óqù]3¼—VˆÖ¨s}(ª’ ‰�5ˆóq‹…Ó Ww)�õ1IŠ#4±„—" Ã…ðUD3p�&Ž{(ÑFt•qá«rK¸ ¶Óæú‰´Âph>ù0VBe»áˆš@¯¹#Vª�}†*3–�N‘éŒVbS¤â:‚·»ÙSâ7PÒ.õúìkòÞeÔÈ^"³WŒÜiÓD¿Þ–Î�–š—gÈgh%ß ÎÕÚ®fQÇÄ2ŸAËï hÌ™iƯ~ZJK%EéÔ¿Í�TD‚WaÊ !�}Y±œã/åiª1�ü*B"ô”©["]w E/Zæ,[>NjhG^!¯{…Z¦ÝÞ¹G/ ¨¯1�iñÒëå##æ­šbÞeæØ%‰Ùݺ÷aAXGXúœµ~f�øê-(/j¶4ž^ÒÌ|¨�o^@tè¸pz#eX.jg*âg¹ïr†”º§ &1Ü#ÎÅå^k>vl˜yTÕ~¡‘ÊÃTïQ¿ÏDýý® §g�ÊÝãD êÌ[08-âC›ŽÇ_e�iÊpyÅ5]Êߥd¼ñ„sÛ3™³‡å^ïDÆv�ˆv[S]ÞÅd.Ž€B¢gëY¹¯ -›©©`ëŒ1¢áªøx…a€\'Y©•ý›íLtĽ0˜"jàEžZXÙ_¡Ê¯§ØÕbòP—YóöçHù 1 ½š|>…¸( V³Ä4ç¬#V¾à“CûEêëûVÉ£²ñ{–VJ±’ñäðEþØO~·ÿú£–Å™H\W ·<`ðHc·�†°É'¶—&ÕÎyî2¹:(ø]|4{-/ M¯kÛN˜ »\”ÿµ>#‡¦Nó+CÛÇ"äUw-Þ—1S·¤¥ñg“0ßë~£Oj†gÛè§!öÄDŽØSð›³HÍ¢F¿ …‡‹9ùx;%,žÌ5.“:ÆOÊí éá Ãe„¬¢Èž1oô4�s=¸sýæ£TwÓh.´Á”£;\8Ê5±!ØyQô6eš(´e¯ÕÁ²x’5�4ü^�0P´¤½!æb»æþ‚–6 @,X“2n’5M§ó˜§Ì²N ‡ñ0çͦÏí5¿“Ƭ9}as}ëún´Rú|zî$%¯­~Óê~^’w¼�|>çþÞ*Û¥(œž¢Oz’3 Ý4ÖPèÑ=Qú1‰„Ìob¢‘.dÇĘi÷µ/CBÔÈÏjŸR)ì²i.è5þb è&GlwYaÜš“EÜO¦ð _G­I�½€7¾ê„1¶~WL‚{ó°J¤�$t>ª¯65ùø3R_û£I}dózY³Ô=øëˆÆÂNŠÏD„@§�±~ÏŠ£ÎEV—¸ÛdùtÑìSW úÜ$eïƒݽ Ñïm‘2_¬[¶ÑhùS5öŒK¨È3O=jª]~iùßh‘«@Ô-XSØŽ¦¥á/ˆ]”žÌß»hCœÕÅ;~÷EùãfO¦Ü<(Lš?/Ù©iÙ«ðk¸CP ²“´!>ù“Œ"|ïžk’6MÍJÞâË)+DZ‰µr½€\J^%ÇúpPTñÓe3¦†7‘JâeGu•�;É6;N®•.0qˆ^}A…ÊZ‡Ž>Ú‚¬^{¬5ÿ£—QÅ6ñNÛU�ÎNºßE” Õ‹`f=cBL?ܱ±36øcÎ/Î×c£Jã –)äÔFˆŸXàOcº!ˆs==¢`&¥d˜­SŒÁÚ¹{¨ûè§ÔjDß‚t¬¾~ÊdS ztFÃb;ü8Å�CÁ{®G°^»Ÿ,·±ó®JÅL+uON™Ð3‡†öÀLš“ [,,MõB2Þ[›ãV&Û¡¬<ÀQu‡[ô&Ȳo©¤ÂP‚=o¥úÌ$މOANO o‡X¸2°G®—>3üÖ†“’˜à“8 K½ÂJëÇ!$6+Ü ^ê•}Ù�um2¤(¨¨�Ws2!CâÑŒFdnh+™³[j]t�A·ÞÀ߯Mâ‰E„‘èÿLZOb«G$fPÐ üÉöExéê¦DgqÕÌS—öùaŠ…½Tïg“ÌÒi×0*6?ut1þ•Kõk�õ“‹a#γVíÛ+œ«£UaNq±"iGúËÔ°„2l”þL´¸$<âr¶¸»+ Enð~®·±¤#3E‡·*Ñ~jDn°Œ¥™.C‹í ¼°¾çˆ-l­×CÀ™ºVoÇ»ÿF™“l1¸—ÎXv ¾áûp੤ðè·áà)è*QSr&C$ŠÃ¯ƒ +>F�aÀ¬Ö–ºF¢bÒþ+Fí½P~ãAŠáÀzNµŠëWž% u":–UCÌàñ4fZXw^|¢5NQÖcÆÍ¤¹R"¹IBßÙ_\Ð`NÚG�3·mjýd¯ý}óè‡-LV-—ˆ�öX™slœ9 ·jË×´P„ný².Ë@ô¶õ‰U¡øªÔ8)�xjèí2÷"h쾯¤‹#*"À4ñù×—¹yɛܯ]názRc¶wTÞdüŸH!Ž]ÌÕÔÃ>º´sÀФ!OVœl›ø Z�!>;œkDŠ Ë#�(¦u‘“ö™ß¬Ÿ–øíb×dõë^wÕ)| §ÝdWßjh'·¹ÄÓ¡9­ëQÑ�…ÚÓ‡Ü:}ÚâÉlµÐ‰Ï�©$7tÓýþD!ê1¢{�ÍÉÎ,Íç;‰·Êñ›,ÆU$K„Î9Òû�¢¥—_æëOMÎ 8ãŒRž"�T·è#Â+O0_ṯúÂ.?ùÙV]pj1­¸Ùh¦s3™{"ù'EyŠ ŽÛ.�gÜW�¤ ZzXû‚èÊP×¹H1I+Z-¨Tñ�§/Ô”F…ï zòáÖUÑø¸™ º†¿vÁ58}›Šúâ�×í‹$_(¼ì<„«óz’v·‘ÂÚiÞÄ„aarÚœ¿†Ö¯ŽÇ3¸ƒ[ÓF²vìÑ¿ª2|;>ðXBb:']–ë$ ò QßlUz1#a“§øM5–ð{ J¾«—æÇYÈû|Fä-MÚ¿Çf\éöõ.5äñé WÙ×µÍ cÐk„¯¡QÖ•§k…âî`·Ç#Nh1S)¹"–{‹~v[0o<²¦»°,p÷2†Õ¹ì•§›Šï~‡ž«%} írnÖRè©Cûœ'›,Y‘�kG‹R³‹„%èÄúœFl=X=�¯/Á»�Tø“ΰühv’¸üÖÒw¨JTlIû‰qû£>æDÅOe„Å’U²Ë¹< ÃE¢j¢U’ õ�ۨ梖à‚4ÎY;ÔƒÙÝW*È�›ìe”ì6”½,+/éÑØ÷Ë»;&TarÝp"]½mcÛ3ýÙÌÑû7&ûƒzþI|¹aÈz‘6!�ó83ª,À:f¸ªÄÍJ+ä°×7æ%ü§ùÊ êí #3eë,*—£owý”ödct‘t_ÿï ú©˜¼s ¯˜ý~+€awY ËH§89‡CÒ-íg¤‚‚õ拘_:i^$x‚#è™­n•QÁ¯Í @°�¼Æˆj¨Uh×É!Lwz… FÞúYœþu¸¥ûL“|&½Fb Ï�¼ÎÕcÒ_»—™^ðzfä)åjs°”‘#†(VUcµ#ÓéyFJÜ^üýZÈãI” l·¯ê}ô]' iIJ…ê‹¶óžñÞ\ä6!ô)pˆ[¬·ê„ ŒK½óC4GZÑaÉU:^ÔHáÍI$gÈâ]÷zÑQÚ˜Ì#r *FW¢>LÓÇpàIy(q›qz£†:Û.Än�#/|B$ÿ¥wåz;-z:øz^"TG)f·¶‡²“iõc5¾B? ôÛ¯8Zm$3T*^æâõ­ôÍU��¢Ïþ9³·°sÉÜq–Õá«û7´¨JVz [Få8‡ô/ãv¼1þgÖÐ0ÙÉà;ËÂPp¦ÕJRg÷d‚R}“8n÷Ï÷x,Ú4;â$à ڵ1\,»×�U&^Â{®Ø½Ùgpò¬™&©_ŽhèL i�†”¹Üül3e®Ž‚¶‡`¿ÔI—�_R×µñ0�ÁoJá5"Í-Ì8¦6bÕ;L)Rp=;ÓÚ³~î–/Àå—øå~=,HZ" ‹†Õœ;µ"Rß4•€ËI–µ.7!ÈaŽ9ñÔ‹¢Cð‹ðS­³ÞÚÉ..ˆ*…££³åwoœ1¡ 9ú@¡@âK.CÈßÝ«-N‰Ô<‡`ÿ^r'·œjÉãì‹€ö ^ LË[‚4Á54ÖÂf„-ÇXãR¿Øõ½Šs?Þ6y2£§à…‘Z³@øËð»qmq’îýM¤ŸNá>Ž¿ÍcÉr\1Êœv�½[Òë\[Ü©\ª½8À–\?±{8Ù^Š�Ý?㮘Ó#Â¥}6d:+úDXŽYÉž6ÈÖÜ [\ØOßcXpCÈÆÐÒD8"|¡Ù0•°gÚÂ#ŸáGV>–дcº:èCeÇÂ.¶‰ |A-ûX(l½çÉ®DQ nVo~Éîm®· +)Y– ®²HF�ùh|èUrXNö*†±¯:|çžîàUÕ4,”‹Ö/�7ÝÅ@‘¨ðeú³kxT˜âï±,ù¥_¢Ü“ú¬%}E»*ù4º×¥r•ûpÃ&Û¡E,CÉžZ©h¦",wþ+uòÇ®üü/Ȫ~éÑý£:÷ßWØœ!µ¯Çý^,.rÊ„¼:KÓž-÷©¯×yÇ%¤ªòÔŸ�òHsbf5Õì貪&¶ýZ©�f¼AØŠà<Y7‡â}µNKÈ‹ç{À�Ìk½ “#züN^•†V™þ(B5tϱ?Bƒ£5B ü$Sê'�1d38“²ˆwgÙzȇ\»gŠtw†Èß9§}=ßr³.�‰åëiô‡mÃ^¾_0@ë5JÆá™!û“«¢ÑŠç°&&!fL©+U\2bv¦AÂ#@ŒGï‚!s³íÞî⢳ð­!~lÎ’E˜–0Ê-Öø–[ó‹¶pw¾°ú³-Pó#´ßØ ‚IÁ^hãË.y¬Þ3©oe/”fã•Qøª’ÕÓì ¸fJ‰Ë¯OMzK“¤7¹Ö5_Ž˜}Ær*Gƒ…«@¥ˆ¹JƦh:UÂGô}ô~öì.&.ô®æ2ilwSR”Ðo†Äà©Â|¶P¶>àªr ˜I~r8y”à5¸5vP#àuß.ã¬ä+LF(Ü#Œî‡L²êÖƒšGCd¸éh_îî7Έ]¯ø GY¢BTš�Ôãæhúø~ÌH�¥/�"Æwc§¹¡Ü§+M_x‰H³_aSÙÉas|¿‘Vtw“|Ó{}.´]/am°Ú*}¾hë’úñé'šÑ•R­m¼@ŠÕ¹ÿ–èœLS QªÉÒ/ÊG”zÁŒ6î|Ì'·C© êy1ø©ë ¿Æ0âÀåáì ùÒˆæØ¬>ÂÑÖu×vĺÃÖï]]Õ›*…ÉB� tkR´ÒDÓr�o Z…ˆs76L1ÏýÁTï%M2OÅ­“Ë«¢l­÷-˜‚E”ÑŠaX¬t; ÇãÜ·ÓVæc¿:Dq+?êK�©¯å#X¢’dmÁ$#`tÅØ'ȵÏó燩jý$Ї0Èz°1A¾?sæÖ$ý=`$?}>I‘vQ�Cæÿ³Å#‡J‡þµÏ¹>)…”§ï]$(7�ijƒà¼å‹°?£ß‡"ƒŸ{ÏŽÝNe—Ée<ÂKǹ�Ć«wF¬ϾØ)Ú«;s^Ýí­V¹qÛß}Y{6Û_%OдQˆ’wr9òu˜‘¢x}Åv3Û»/;›~ßÂï(ÌFz ü–:ãö: ¼—…}™©lV«ÜY‰�ë>ø‹¥n͇7}€•lù€ ½ÐSr,0[·ÁêDüÜ“é³ Û­t›ô=‘ýŽ�‚ìËi‡[Ï«òêjlíFˆþ"�-ü·×µŒH礋ݢ+S åöX/)…S¼¼ -eYӼ앭‰ñIÉ+6U:–M˜ük1Ñ+hmDâ©=þUA?ÑAOæ W9é]¹üÑ9±M'a:<¬SÚ*ºsi©Ëç¡î€â_yý¦h BÑí¢ŒÒßuEÁèÃ0å+¥X7ŠêµSþ RhàÐpCÄýD+¼»‰aÙ9ù)uéÛýþák-ªÀ7tnW8@Ñ 9m¥¤$ÈÐ"ÆB×^÷ûõÍfÜ®*µÌèbÃ5EDó57®' öV ·ÇÂ̰éĉR{ç­@Çâ\˜ÞxÝSþðrãÏnSd8@EAÚõú\‹ø Éåùy³_*ñÌa†¾^™†Lœ³Y?Eþ‹~áÇ2‰Ê¶�4¥’‘Ô›Â2§¡ï–×”ÉwY7ÏôÌW¾LU(êdÛ«Aç+«E—>É¿.„2‰_Ê#2µ¿ÐZHåÅQL&%VUz™4g·Évÿ¼ ‡'�+[ܦ4¬_U‚£\¶$ô] GÅ{´¤GÁ ––ˆn"`įcF\Ç+œ 9g>Ëpß½TÜ0’ 8"J¦Ž!'Eû¬`ip‹*§ &ØûèCÎ̺z¬3],Úµ ïåèÇešówˆñ‡¡ËÜ�ÅònÿÚX¨lnUͳ7h„+ÞžýöKbË]®irr[ål.GÅô°\Ε~)´yZ¢™y~Ð}qŒƒl+–è`ר‰w�ôº>wÌo�ÚWËó¸f�ÜœHbR*pË>H‚¿JA‚ oÁXèÍfµÒË6Y3úÚv.nÉ„ŸšÝ°„cÕ|ÀÔª–ŒÍ`9)ìÛ|UÓ]�ÓÚ5-pÐý*À4 �XWyT{ëÞ,é™7êfðiNï£j …Í<ÜkˆøØoH†gIð“_/ÇY�\p ›3ùm¦S’ÜzßnôᦚûÑH�ÒÊãì^?_ÉíGÐà‘WöÈQq®9YSe¿�jÐN&øTÇÑ…ŒZÍ·muwi94Òúõ£2ʶ�ºõmdG,9cíBº®ÿô)iMúáΟõ)(:‹zèžo y¬ç"q}ìg¶HÙ÷Á©#6_silÂnÎïS»*2S-v L8Ñăą•([¶{ƒÅê%ÈøOT1ÐôàE<}vÌ#g†×>*'.ËËÅ×4 xuŒ¼ÊŠˆ¥Jbåž[¥àm€Šrs—“ÁÒùµz"},HN‘§“öTÊÊꘘ-„_á±'O¹9‰Ò¸¿pÀ ®÷iâ§ð#­ +8 66ŽÁ±Å°è ˆ)cùo|AMeøb¬|ªïI÷‘kð´J|�>Õ’¾A*i¥ô*á€Bš—¸GkÓ‰Ä:ë¼5hž@g8ä2×8_ð1;œ¾%ÝŸxkà?Aå‡`‡Q'ÞIqhB b®ú�qw#÷oí¤8áÈE^-6D W^šu:T'⓪\.R ?{VZuºC;†çÙøüþˆÐÀ÷‰„iÝ‘�—u¼¶Á—øïä®ïDáãlÐ7œ¹ × ôþ†®ÈìE=˜qž#ŸG7•A ©•_1Ô·¿üÐÎú‰?½ŽÈ²Xg~eÊ!X9y<ä‚=ÕAn‹ +„¨ÇÅ=©XÖ‹ð:V:TêçλxX�Aiq?»‚øM¼³×+¡ÑuÚì¾ðϳvz=�`àqÒŠu4w7. XÈ¥TÒ?Ï×›’x�RÂé¤áãq»ú³¤ÄV«µác| ¹‘Š7’~ÑëÑ“§(:³zÔ;&¿ŸÏˆó!¬j&Ø›Í&áoN“p†§b‰av †–Ù–̸ëb™)2€1SÿÈe[RèÊ$[½+G›r /›Âw�~H÷$]a×”!—R� �ï÷[êÅ�3�YT85&)¾fzPSŒF9½ôÙñ04­…Ÿ±ö«'ÍÇ» „'œm‹—ßžü¬ãLu�ŸÄQo0v­í”l¶Sýé”ù-ì«Tq4¤À¬o;RDÙŒòkÌ©f�#\ù“ؘÎtÌ`ÐõÁÛáÕjR1§ÞŸ²‹/71+‘æÍû¹‡2�ÑfXò´|n옜ßEêr +õºÿû¥ÿH‹n [ÐÒç"ÅTøñyT„ËS"�‡áÍ{³)é›E66_ÔµÚƒzGèäZ{OõÞ¨Âå/&é'(çj[¨ä$uçàÇŸÛ¤àDì¦>KEæ)}¿¾¿J £õ8ÄB™Ã�Ŷ‰xXl�ËëOD­gÌúEÇE£Ñß~¼ä{æ9³â‡òNºö¸&®¢¬ˆlí‚ ±À¼å4ü))‚¦º{Œ4ÿq°Q�è(|¾QoH|¤|G6þJøP$A©�O”_;·é˜•¸8$µòmeá>wØu)Îÿ3‘ØmFÉ̶[~2è�Ÿî¶�0èråQŸ�!o׳*Ô¥ÿ¨ïjn¦½AyÛRAw¡s ÷cp=ôYFÍX•Ý’ô0#+ûZ»ŒÍG& ¬µ¢º¸îÄ ±lÎ ,9ýfI<¶ÎÛ…Hì5ÙÛä‹+¯9½ûžÏ™æv8% Ê>t�˜IKºàŠ`¯~1”Òmá÷N°–Ù¾y@l;"´p>†”7Q6ù£yö»Ò–>hu™"èÁ}À�òŒQßä7ÊÚ3|°!°\N0 Oí+c=kþiiEèΑ]e Mý  ¾u¦4²­ÐÎ#ܦ_7å�� ÛÔëÌYWh‡®§»É®€ˆ¡—éª*Òq‰ÕàPêÔ0PÝ0…¤è‹™õHáD%Çoè´ÃÅÑ<öò˜%æÅsrÚì�¼Ó�^»¸ Ô8¬œ’aE¢æŒ¡EÄ_ŸÆÂ…–{ÂXHr‡ ŽÑA€¡jïþØ{é³N~’0Ã~“=•é:+D„6�×Åf].ÍÂÕ}y˜0Ü¥ ù¯–îO‚¤TE,ìèá�Š”‚2ågé\x©×Ùü0¸ƒ hBKb°‹&£uŒUÜ®¯>ºæÍäÄ‹è)òHØ>ŽG|Z°…ñ°/¨l•�´ß�1ð°ày,kóõ‘|_¡ þËo·åV®r¾O-®%ãßiVM}‹+zž}"L%Ìã}Бæ gù=gÿá-Â[f¯�Í+-Å æÛÊG7°ÓFbáØµþâÍ4]qBð3P<]Àt áI÷Ò3Wá¢` ëWs<Ã�‰Øá¡cJ!²Çf4uŒÎçÑél½ÿÃXœLØUWm” ZŸµytsâ¶8¬`}@Ízvj)žÁ¶º¥Hà‹Vûš óaxE9Fî*EÈ8f+"ÇÞj2{¡ïOUš6Æä\FÔ¡$‡”@‡�~õ)æUàxø~:iL÷²dœÏ‰8Î*ŸÉ½BÖ8‘3=íÝT�’ÀæÃ æq7Öñ`ÏÜÛÉ;�$ê=Å&[�´ž²Šñ˜ãaSØ]]�;�)h´;€�Ö¹3€P^ —üîÎ7‹¼Õlv·Áæi"úb·ÈªD"÷¤|÷ §=ŒC_ŠK ËE _Ðܼr+É"<²Mƒjßfè°ÜŸ—ÆÞÃÁõuÍã´Ű-y4ÅNJ\ÄÇzß‚&“~ùµœb…!`ލ"ÍrñÒÀrO'¸Þ—]QâdÜû¯.‘ƒŒ™Ô¼WŽ'}%÷£ÃÀ½€¦ë ßâ› çô [‹á Ä*Ÿeß§suÜ`µUî, óO%¡E2 g)PHÝ—YâêK^å º$éÅüÍoà¥ñÛ_C÷Dë¶|Íœ„)¨»ƒDî뤻±¾ïæIN›—vO߸œÕTô©Ÿ>àrãù})>%ÌßÈuÁ[ \²1︈DW›pIÒN0Ð[»ßÕ{/~z®J ו˜ÿùV!÷ÖÉ¡ÝÒêîeWŠ.{%—G__Ъ�£^WÁ^þÛ‹¼!J.¤ g[Ê ËZCyG 1ýón>C¾ÂPeò’’½@�˜$[§‰ã¯‘�éÒ9„`B9u¢H©ùi²ozžEƒý™Ýö÷û¼$£9­CO/›JÛßP“îöc‹h¾$Ÿ8…»E—A¶4È“•mÀíÆà»chŸTDH¸´ŒÙßÿ^g˜M¬îÒæe¨ú·}²¡Òƒ¶èÿÙÁ¾PB”«xŒ šý‚6߿ݺY„/×pÿ£òú)0t­Ë»4ìTÆt®¨OfK<[IhÂsûh+k6Éjç¶\(*‚ð–>ÙBfìP๪,ZhFùÓ1~1lÛQ/æ%";¬Z¤±­–ö‡5¿ÃêMÎ7èXIe‡:jâ² K¶Å>Kt'£+œ¬1>“4Y<à¼Åª¨¦vƒ÷ºÚ wfk(µùI‹ýñá¼ÔK¿¼[’ëû'jf¥‰ÌPº9keù²GºvqJ&+ rï)öêGæÁª'Ç»�^FÕfü½Í!ž´†çâ•ûèMÕºqJÔSNï!€Þy]éÉÛ�Þýöh:ÍW‘súÓ/ËÌTˆcÅøéè§]K‘x�sõÛ‰u¥êáV¸Ø‚?Â�%T·¶x§Ú¨qÑãÝ<ÕŽÜäºFk‚«éíDé‹xCh©œôåwç�Á|3škíYFų7zJû‚æûj@=U™rtXvDÛ%v3áZ|PPø&üœP’àæÙ¿ iMh£jo¯éÚ q9šf:u6C­38ì›]¹N§õÍI‚C&ÃåÊ¡~Û3ðËÞ6åòG�Ndݧ?pšß2z'0r˜+KÁü'áÑÂ˜ÂÆÞ'1Y¯ù”öþ·¾ µi“µ ¥oëáý­be„ ™÷Ђ¥i§îO­ñyî jÁbBÈÝÖ(ßðìô µp1§oáNf Ú>ÂA6V Gä‡Ä󇡴f¹B1®«„‡° JZÕè4”ßaÁ°\Š?¨­/ÿ˜äáj§ ‹‹Á1-3sýeºlŸÃïWºm‚'Fî•´Ú’¸æCª)R"×Ö+‹Åk‘Y –¢EõÛkÜ\Ú±ó Úàg©Ë>™y6×çOă;F0Îó0Z5ó¶Ù¦IÄXXÆ#{›_?÷Ð ´1äF˜ô§À)2‡j¡çÒSö6û“T� ¥~ø®®S ±«ÄÌ7íßË7î:­ DÏu'NíÙ$¦VÒ瓆ì—IO9çÁ÷ žõѰ“©¦´Ö:ŒÕ:Áüü¥nD8ã$B4éöë®gÁßóƒêù5Œáµ-š2ˆeáhžgcÀæÓ ÁŒ™ÿgØÕÕ#À¦žÅ2™àøë¹_EQJ ¯‰$›u9½¤«gþBýÊà.6¬\¾RÂ9²»f«ï6$OW‹%&íÏ ^Ã�±©óïWµ}ÎÄgAèjáµÖ 8¥BÛíB»˜£§bâ‘õ D²zÞ6 k»ÔhS¬TÙœ]Eyv kTL»WžÃ9_èTSÆ-‚5¾ÿFH„ƒ[‹?üX¦ºÚC˜lÝÀH’÷¶:„BéªÔOÅÉl³gÄ!O<˜çÉZf›Κ¥ hÁûïéi :pRŠŒèy²(Ü‚¬É6W(&\²?ß‚¡2­‡Žfy:Š?þvÒ“ÅO  ˜^<TçnhÌvïôõI™Ó™Æ}l›¨…z?¤Ö¤% ‚q²ÝñLª”C®cAoÏBýX¼¥Â{ÛÇX`=°þ\ 'Lo¹âÕ> ôÉ�gên÷½ÄÝwôøºtÙ�Y b˜‹Œ�´é† Dc`ÍÚ혅�5G›ç~¸3g¯÷Ñ'`‹)´ÒÛƒ²Á¸keE±)Ñhöà~‘Æ 2 «ÝJ é®¥L5Y’òHÞ°Ü®YÑ$ %Ô'{M½oÜOnò†Z;NNEÂý ÷À‘ëw�öO[±6Ÿ’Ã|Û”Oyaæ…%8Qp.*X¦¢_Äèâ+÷•_¢4§<[‘Ü«I¢;TúÞ¼ÿ•ÏÏ�|”ZÝ‚cLyÜuƒ¸Â—ÄåjT–7(6ßÒW™“d¤újNQQ;é6"áqÎÓá5ÖN< ©Fè–õôx–$•´çvñ¼Ð›sè¸ ;º0,€”;¯n·õ¡i‡d×åÃ~�‘óç"óW±èë7:ë0ÆèÚú.÷@hTˆÎžº4\íµ�\ºêj@£ç‰^L�ç˜ ”ÆÆá3z*T¤¨™t—z¬V²%¿Å™bfÁwjóõÖ¾èïtwŠÅêQúžšxѾš§ÌxæÀ·Ù-í<ß>�¹áHSãDsl«ò²³ðä“îû¬CrAÔtèÐ…cÛ��ÖP¶ò§ië1z? y—”r°Ñcd3î…É2†·nD§Ïn;­’Ÿœoò:jwªñÈx=fˆ'~ÚKÙ)4ÎbÊáɘÅf2¹’N@ÃÊü—ëŠìAÜq³ò¾ºp@´PU3ªýñ¥‡Bi¹|ÜklCPÞ�ùÈì[i•j&“È"š¿7`À§6�5Ú ]1P?y©ÂiyzNð¹q>Œ‘ÄWïµr>`˜å6SõdwKçCò)µÑo‘ãÄ^©™H¬‘ è¼ïà@8ø»âŸ´hBnz»;=t)ÁøÖÇ^ôö¸Ä1}IÅõ¶âb¦W0™µZ?ëƒ1*ÂžÍ ?Ôm"ò`‰OÕ±Ú}‚Ê?OŸ¨Íýö ˆ‹ ¡KáÄWð"³÷Ëy‰Ïß©<5Ÿ±¶òĘKédœ‰­ŒH»‡%Ô°%³¿¡­½mÁ$�2ÍW_[µîw£&Ý\�v� YTŒ+€ÁéK6Ÿ×Ò#ƒ•Sf˜[†"þ\ÄÇóë 3Þã”Z/"ù„M ïVÔ¾íê€ò.̓M¦⧂ßۣДªéžÁYe+¥õì.ãråÈ ó±fä÷t³|áé¡=uBFPßCLV¯ÂÑ�œþÏÃi…¦è϶ôþß–Mïä¼Ã„ržG§Çò³ð¬Äµ†Ÿ¯éùsÜS’×H¸tñ±NЧ÷“ ¥G�Fà\ð6&0y:§'ˆ0âÚC‘›œÀ‰øézÀ>37Ô‹µ�`xʸí>}b" ëÜøªR=ç¶|Ä=5—d&n B¤üL]Á“€ÓdäçÐÅw�öP6´éÁ-ëãHO`"<£cs.½m1äÈ*t\±»Ú^$ ÕÛì»à1àÁÂF'¶xðò 5kåŸUýŠu$·0ÚGK€ÅÂ[ÙJaQ¨�£~µ•ˆŒ‡ÕôÖТæBˆ�´.É´ua3DpÉäY*eBŠû_î|»ýM®Ê%?)%avÝþÚ4ÕŒÆûjæ¨Ivô&#Œ™¥éæ ãD¬-UÁ‡«?,ŽÅÐP,´k±ˆ/ÀžÂ‡ð–åš8u"{yÉ1ôCd9Â3Ac°°N�|w×gX[:µ—¹»M£3 ­§q&—�”Þt ¿„@8Ö´Év;hk2³jåI,ï:¸D¦I†rEÝÂs‰�Ê –= ÓD“zS$:íöÙ/ÒôóF�B«™ž@Ÿ­fûË+Ê9YN%òÃëòÈ$3õX{ŸÀ7ëϼ"XlÍQívùð³ ~‡rÁ±� Ö‡R„~ô=p§¶‹È®p4‹j %½ÞÕW÷h 3 ä¹aw_ǶoÕÆY|ÃÓ¡`GDZo6 Äwq àçÎWðL:ñ¯žê©Ï#‰;ø&„[7Z,Qr²ÇØ›´UB%"Š&èG©ôU8l»Î}U�Vߦ“cAim‡"ƒ£U¶_ò9Õ_¢&ò$£=Ñ! GzpRyêD1|r1¤“‘—j~JOJ›:¹«æü/'mZÛª|Ó<5V”5`†Øs9„ÐfsziZeœjÂÖQWò agÿb¡îgK¸´8•;«¦JEñ�?¯Sæ“rª`¬b…‚˜ÚS?ûhB;‹ûZ u | ýû¿\§âeëïGeó!¶ÿîcéb†=rîzC…7Mý.Ê™l°QDd°OUågN<#u¡ ÔÙð@cþÞ1—Êu"b"´œòQºZqäÎ@ÎgÕ8|BÙWýs q@�3bah ÝÝd�´}§a ÛšWF« YÞ•û7í3Ø·Ú‘¯ùÝB)pô«Í¥†Ø��²F1ü ®Ö›G€Ø§Ìâ%EñH·pªPõbzÒõUÚ8)0Xd 9átK¯lž'Þ º³ÖÄ[�³?ÿïæV+º È(–=…È“/<ÁÐ ¡jñžuY—åå�Ç ±Ì÷@Q½ï»bçëÑà¾Âqtô3x/^Ã{u,ãIvësô%nV9¤?êèsu™'Eý×€åN.y»‚.-`ãçµA÷¥”þÇyDâãQòLÏ$pÙ(tÈ,XŠ_ÞîE]w¥%,à^àêJ)I‰g.Zò%Õò®~�Ù·…ûk}7Np gÕ±{<­ô m5uäÅ ÆZÖT#‘ËãÁKCm”}CÚ”�ƒžúHóÖ�{é3ÅÞB,~+B[ì0ÿ}Üg!ÿµ·{+Ũµ~w4:s�sÜÊURí‚›¥í…Ñ”‹ƒ™º@“¿ÄÖŠ“Ê+e5ß >Áê–“k—k S¨œæ—¼«’‡ˆÐÅG«×MÇ�žOK;Îg”8ãÒA€/Ú»ßl¿F{"ºÄ6µÀ;ا³KJï›ÙY·v Ùl‡ågÖ†fmC櫼ý 1¤MBÂñÕÐlŽ­KÒÚh³.¥÷ÂYI¢(ô9§ˆÈ­e¯8‚mÏJðXܯÖÊo$PoÊ×B¥Þpp{‹!Œ—O ÿd‰Ú'7^Ö^*àÿ¼µUˆ{Ie9�áÁÇëabˆ@N§Õg1ƒËt.û!£«Òì~‰ø¾%éC>"QRª/¶Ü7­‰”êàU½ö}çfüZqulåävSò±¾ØÕïÞ¶ý§q–ùô%—¦»Éô–=‹-Ñ—¢nfÀ]8®ÂËz—g©2sÂÿw.uü¡ÁPê:ÆÅe�ûV £¥`×>Ú ±q˜+_�ñ6Z¥a¥ØG…jЪó)q&áŠW¤}{ Îþü³¾N™£oæhm¹•47ôS·°Ä1B’ÿÒ(Œ=�ú|Ëø-öR«§œI¬¥2õµýáWªV5�’4ÍA Ç“E�g1[ã³UV,äÁ�Yöf˜þDà“|¸þšá¡,§0ëÌ�;í%dWrîžËøs¼…²§Ò«%w –Þ�eÉŠñ7Â’¨YúëáÎþu[¼Äß?~#Ž´ºJÆ4§ÃK¾‡Þ+êv6ˆ³­OèQΪ qÎÇÀ*5ïŒìø†"AMêu±©QŠ8‰z*üÔ\ ur°�ÙÿI ;5“®KÁ!&øÜÐù‹‚ä65ïJì:¥IñÙ˜ÐÝ}fÜú×›ÀNŸó ¸æýmE# ¼_^š��QwAi“ã‡>^¹ì �Íp fW“Ú½„mcVieóä¯~¤8Fràݱ´XÎz•çÅDíâ–§>mQ(Ån·9£æX{±…äÆŒâÔ T‚4®^^º×ú�‚1kv÷v– ׃յvæwf=ˆVa1«ì�PœaÖwÿ¶Lnªì®–FPë �ÌÊw¼ÅòRŠ©‰©…áÃÆFˆYÆSÛÔïhõ–é‰ ƒ1O•ûÈ»ªA}dN/&{ô¬Ÿ.ú‘ÕÊøQ2 N¦ùغ.|?²Q®§dØÏÅ#êÞ¶…` Q$xµRáº\’YØe�~õþãÿäÜ[Ä.8+?µ”Ò½$"ô­ ŒÊEsaF§mýIŠÈ–æב”çè«á ðUÃðqO}RYÕÍ–ˆA}Œv9E �7oÔűÇ’—¤®ìã(¨®°ˆƒ³ÄŒúÁ�ì’©^Îh¡ÎïŸaǬXiÊyÃK@ú‹rÎlJ>h@ëþàóìÉd…}‡N%D€vz £åÕ�,@€sR“vÂvîá©y ÍÈTDI=Ó(ЮèAèùý&«3mÖ¹ýø:Åübx‰ 0c,‘,§™~ ‰éÎóeL1€AÖ¬º'ÿéljQZ8ƒÄ/ñ}' i%d_“&éx_8Ó6• ]n¶™>QlÚIØx·¾× ÷Öàž šgSΡ ¹@Ú<Ò7lCÿ×4C<$\¤;æF� ârøà"ħ&³ ¸�NáX[¦˜#FÛÍ™ÊQh€•V9?a\¶#ã” ®¶mL»%šÆ-»á±)À½ñº&` ŒmQô+s¤0ŠßcÛÔg ÙðoìçþÒ#Ë:å’|I‚<Å™¹Ø�j’5î£d}ðØå)hÀ[í.?èhíXµ£ÁÄ÷3^þ(�ê˪S·óÕ¹8n�Šv² Þ|.øj57¨‚®ÛF)æÛ0²LfsAÝØçÏ ²-û� p)¥J3z‰‚�Ð'&X½%–ýb¢žÈ¢ºÀˆôaQ²/“›˜�ÝVë..”™ìÛ§é*êQ¨‡=úå¢>Ýòl"�×�+uÿ«’ÆŠòo}¢P );CŒ—-l !A.‘ûëoŸvoüSV™Ž¹Û¿…ŠA5Ïty_Ÿä9ˆÍ!•tdèS¤{’馟 x³nJ!VžA¹Ã§ÛUu¡?ä!ê“û¸’^uzÏH´C@zÍå7mÖdRÉ‘R·1ÿ8pÛ}Ìa`%Û ¶„ê”à� ¸`‘ðS½§‘º#±Gê�m_[(Ò6½¶ÁÐú/‹©àË;IoHñ§‘»*÷k“ìO¯t¹'Ý¢¡ý„1Š�£Æ4�òŸûmÞ8Î}ÆX2Ãâ ~;}Àv7|ÛuÑ"µoÔ �¹¹~Î%3ÝWñH;¨×"�A©§¬Cª%i]°y;Í ×$ZÝO«ò!xÃ1@rÚˆû»kü „D –šcùìá:!ån(@Ý?ëçÔµ`¶¬�.Ô—Œü²»Gž‰Ò^�­óyëÒ‹¬~2%\zÑÊ•)ÑH‚ÔV¿{�1ZµU„á�íÐu2‘ûs°Õ5±Þ˜å;MziáÝÌ_ƒ-›êòù®‘Ú•Žž44Q- �ÙÞ‰o¬Ç,þý;J ‹?zLáè)7YáÊ�ý«¨qò£pFa¤[S/âø;ê{fN¢O©í³Øo‹M��†‡,§Ñ�Ïë%%&Fm%v*à¡QÂ>8—¢@€k‡¦C`D(=RÆ”Ä+„’6>PöÿÚ8§‡:€f/cÙ6–u³±l[[\¸Ù¾iYË®U˵t³mÝl®nø^¿‡ßqÎ9hLj×$.:ò¢a¨4›Üäõ�°¨èŒ‘�ðà;dúåaRÀŸB}’Èb^%Ø ËÛ"™8H�¥À Zú’Æ?˜Åã;P«WV6SŸŒS28 ˆ‘Ì.Q+FšÁò–iŽ Z£€F“‰�ü?=†ï”"U¯Àšø ‚Ÿ€¸]@ûO¯-柗ü³b;Ä÷šäÐt„¶îhºr£Hþ†i„ÿÖ’¨h%ÞOê¦ i<Þ¾±ùìâ1Äh4j•ë!&n€xfí+4Åy©‹t?lkÉöï2Ì…ñ(‰Øj;cZô¥-—7©@þ—¦aÇZigöEPÔ#æ[à4I&×``´1U2ÖSži¿½�jL®!ï ü†…š®ÿ{›nEÚë{l%7ä¯U¦-ÜÚ¤¾@­™`.”^rÞ© ÌO£ §'Fý†Ÿ‘SJkËÛvèßpúçdÜ:é�nC’pþ%«¾Ì#ݮҕ¬½-¸Y²æ28Ã$¥)Ñg4Dn§¹±‘E}šý–LÖCß ÓënUÒ¬ŸøX7Zœù¿Úöúàð>>p>‡™×�(7m¬™ƒk�Z,ÿfO›h–ÈÔ4²D;_!3?–i¡ŒZàDÆ/4è #9š~0S}¼t†·¥„ŸÅÕðÑ`/6\èh ¶P‹ZælÉ4æ2å&P1½Ø'½Ø×H �Ôl�tLÊ>_,f­Tõ¦„Vv×�¡*²ä|�D©=³iT½¿. CªR¸×MDyÙ{¤$‘IÇ%*ƒHÛ¿ÎeOXp•ùÁª('Œ †ï©F}ïÆÎwù–¥é A·»@³aäÂÀ|›Jcä§ÁOî)–…È•�Ü?äXX„ÇáK»ö+íèJf ÓgÃFY€–'ïW.ÐÖO•KaÿfTrz–áýºŠ·I÷³]å‰]©Òš„Úèú¹¤5 ™¬Ãí½%0íåVø62ßÐй¡çU'iÆ…ºÅ�·Jr5I£8”½‚úNW¯„IbkSƒ„KwïœxLruÞÂ-8[˜;ïù1%¤öQ4evR�±fäðÃ.ÈñͪW:k>îg›ÒKf®zßbÄgY;ß|í¯ƒP�>¶ÃË>aÕ.ÉÔ,WíËÇŠÏ»£êœ1è�â¤ypÖ,ùÆÅ7{„?LïF·|�„ðÏ ‰ÐTgÈ�0™Îy7¬ëC¦6;¤Wð#GÕë¨-m€ÝK\lÖ8wÁ5Úó¨a`xb’ϧqÄ–%é:�~—¾åÁ·OWwï[ð˜¸Þ¢p¡85†B´»8E¡Ó»~ ï©hxsðIƒPïÊ=îûà)º–mÏÍý_zd`QÍ­Æ·X-Lµôq•ÏÝ5ÍNšõ–š.ïí¿=qI™ø±®† *oé>Gé:³Æ‡­bûÒÆ³ù$ÚüÐÙÓ†~únDªâç$hm ÁC”‡5ÿ(­|87ßÇ£»cW?Dü�”H µ©ÜM[:O4xö-÷Ém%Jfn  àÇÆŽ|ðû¥QB ñÎìaåêГŠl.ZŽ„ð|Ç�¯ ú“²Utê>§)žýe¯¡Š´nc¤}ÌY”ë:ž{+1Ê[L˜Mw+÷ÉcáеЦ‘”yRÄìf[æ³ú˜|JXt@‰EDÚ3,’…Ą̈òç kf“h¡“;Ëþ>Ô³I_L·Ðˆ£ >}Q±³ñî%¯ºØ§*Ô4¾“=n½ù5º¯²>—êsÓŽQSÍç+¹Æ&hs¶<ÑÊ�ºÜð¤G)_f'À~(Xò7eþ‡œÄ/@$Qî{~K×ÄâÄ×"誀O®ÌNKå|1”¸^ ÈþxÚþf“ÅŠ¢ªë-{©ÊÙŸ‡«¥#÷ö Ϙ-Çþ” 2aIºH€�î�šKýÐ1é7s‘¡!ñ'*€;¹–éA `ZÈìØ7A!Ó5.:roR)«O¥Ç•å°Žä—úÒçK�ĸn�;‚{ÊÓ3äÛpWªÅR: ö×R_¡gC‘]m…æ«tŸáþpaïßT ÷wÀ¾´šŠ‚êC©ðq´®ùœöý›h IjfWšÏt—�UÓô“�!ö£üË‹fºe»™auŠžÑܾ¦&$�'OþXJ†kŽ5JMÄH­Çê»Ot±·“_”¦Lßë˜ <ž^8úâ Á¼€Î(¢ÅŽN¹Õ‚›sOÿ±Ñ@"A}ú¯\3ŸT,o¢ ùlZ•{š|ÈóêÐ'[’q©7¸lëÞSö¡ˆ\ªI='cX`½ô@’4èúî?Å^ˆ2~™±M÷ß"MJß¶�ÂÚÈý¸# 4²{ËM�±2>Ë%Ä¥…5ë`Y•¦�„ ¬yCa$¯×¶ 5Ý�Ò¼‘]½ÅUœé¾Rôô|‘q}Ýó5"%Ð0<ÁKz%â[Y™¯~üŸ\=´¯òÄ ÍOT4)ÏÌy\Ť_"ÈÉ0$`Ctç5Ï_æµ ›ë¶{Gþ&䂈“ĶLâ�ónQÿ#QƒÐù4:©ñ:è ezN±^1Ô¥>´E4hâï Ò'fr©êÇlµE¡îÃAj}‘~{òd©öTx1(�•“özŸåvol¸MUÆmm•Isw¾Á[>‰¥"Aã³Ç{Û$?Ù-âG¹š­šÝàÓš@®ë—öH- u¯õ0«¯½Œj¯îa³/^!üµ±d׆Ոâ’K‚["ìh°À¶I>-ß¶Ç¥” Gvý¨ŒZUè[Â[q¥‹¥ k½XŽS1z ¡��»åƒèl­\Ñì†ap™ŽÍm ¯V5Öò3¬­”=…š„»2eª›D±ÝSŒuñP ©»YÚ&Zž ’ŒÙÒPïžÅâš9ÀPÐ1`Ç<\ýÆYÇ×¹î6{õ¿ç’ÇKc�Ò$I ÷�Þ¼àÅïÑa‹øãCÍqãùÑ× ÅTn]éxÎâZŽæ+_è“^h²E\ŽÉ@K¤aêjôÜacMí·Œ*÷{=Æ”(8R¬†/(Ù´ ­Ù6¢Åʶ…úç>Ë'¥"ÂkE€D–z×—Pš²\ûdÓÃ@ú9ÒÉ z8H{uîUß—²6j¤Ë Bs&Í+³N¬ƒFZ9épaÏþéÎxì-<œ˜F×.X‘µÞñ;߸í`XÆÈ¤Þ^û®:üþ¾YCEŸXé lq|ê3<óRìð"‹)œM…ÞG^½Wo:P_š¸q#›l»1£ŸW-J…œìŽG©½(¡3¡~(Zr¿aÆöï^ *c9 ¯ÁñôjjÕZeƒ`ÊD*p ü4þzHù$‘÷sZ^ 'C’VõË„(q®I;“DpýÜŒ_øÂh}ÐŒ#¬_³AÆ­®—¼§rhO#Óñ¯ŸˆÀR ¥îjn‹þê�ÞÜ ¢Ée�hRdêø’¸áh(sî6WEez~1س% C.™¿f³Ç!½@*±�À$/± "Nð,'?tÚ@ÕÙŽî[A}s‘b†×q—(RUhŽÎpöXºÀ‡OJî.àg£^1ü²+P­0/þæù£¹é®¬=~Í0¦H–G&g�Õ^N±æ2%õi@¶°Î‰(Q•3ú®nµP^ß‘š{g.­Ûù£guîò§ÿoô)Å›ž‡¶eªŒòï)¨µ<’r6Ä«K}�h¢¸Cy;=jkIôÁÊNoá£<'=àùïâAvùfW>t>C2"3Õ›a4Îô ÒoåÏkÂ0uÄìLØMH'‡]4yš”v 9•-úõ¦–N›©à¨NÌ̾KTA'b‘À ·z'?ÙÎ×sé[¬e[ È%lÌýhòŽÁÄù-<äö²ùvéZýZFê›^)ßø™$¹#ðŒ·fHF`Pqˆ·ŒË×b]¢ìrë¢^E³änÙ’à�CS‚^^\¥«é¨P:�@D“º‘!îdáúV<Yé¯p¸Òyl: O…ÐŒ\D~­WOÁñß1lPÌñ+¦‡½äÃ$�¦.ÎŽ£tÆk0ŒÎ_>œ£œ={0I�wÎÑ}ÎÒW§ÌçDéÜV¾U\,U",Ê0˜–Þå,íñ3׉h…Y¿o m›®F€‡y‹Þ^áVAâ^À‘€@“îá°£ÃeZ¯ÿ< 8ûsL»ª¦nd14¶ƒÑÉcÕŠ ×ÜZ±fž¡Ü –¼`Ó¶_EKî^í!G€HP>…U@;u� £ŽõøN`øSg=a±¶��ð42x�0G ÕE£³)Ô5çá}áMØ` À"›²—0~$Š}B( øÊÛ?>Ê>#J’8ÁÒEAõ�òCþ@K¬Ìyd Od爩Рå¶@{×f1(¥i¸y®~ÓT�>ûjßÒÐM-ˆaMÿ†Ðù ö64€þµòi“~­WörLñT­ ]Ç(j'?-ÜõL�CŸn1‡¤ AÕ/¤ z“Ôªˆ™,G?êŠx?©n2¨Ïƒ¥B»¯C\*¦�1ù2f$F ¼Gp‚îñ­T\Rvã†ÌœZ·;hÖ‚‡”Šó‰Ú|Äc¼=¤DKëÉÖJÂ,|+IptBìèÿçgHjÅÏÇ=ò.Á.P> ßm[W¿yRù�£ ÄRÔ¤�äzæÌû­G“4à®ÙÅý{°>Ý¿z"ÓbW&Nu9TŽX& xä´u‰vÎ7t¼\Ác�ZéÉl6Y§ûÔùU)ØKäNP`É)»pöä2N¨¦(õÆ|w�Ï .¾n±u-¤l„,o6îLBSH{¦Êtv¾«LE@§‡Ý‡ .�M+ṳ̀ó¸ðH•“mª+=�~Åpbõ%7•‹SU:é è FÌe kˆ·,À†k²Ém+áÔ”ªÊ Vo_ã5Ö%{q¿Ë\cÒ¾S˜—·ËuP4Z¸b$©å3.>[¹ ¢`—¿àïîF^'Ž_!ÿn–ªU™ãA 0He%,ÆÑgäVb;ã[L (ˆûÎ+G3�X·DkW $¸¢âgyBŠ�Ariˆý¨6îéò²+äÅ´_¯™"odÈÉøògÊ 6-ƒ6–�Ë€æ)«�Ž® T{Œû𬜠`x˜Wu�=@x6þ¤€É7s©A¾t †‹Lf%ßqîP¡{*LžcÝÊÒ1d9×6Š™ë\tÐ�wˆáB:TÎn§KÞÒ<0fxóÌod¼á„ùH ŠÚM‹#FÕ+ªy‚¬ûɢ춫u}f:<\Içd?ß“´`q­Èm…å;éR'iÙ„H˜³TËf×CË5гK³ÏÌêÜJ  }tþ‘Š;¼‡K\^ÇäÍüëÖJnþ¡¤A.G‘áÍ¢†×q])ÈTë=zR©œ>2leŠÓ"_v3ÂaýÄ©Õ1â¢*^¦è¨`OPF€lÕ27Ó'¥Ý歀Ķ D`sw–éþ>~%¦ïVŸídØm}øW››ù[Õw„\R@„ïv¥Å&º¦Êw¦0¤!|H\ùÅ„_Q3;YÒp›4…{—ùz}ÓÚÓö÷„bC]é�VH%³àï¬ð¸$4•R¼ì²…£ÑÍ�©i.±· ²EÄ ™E6R³±iÛuâg¯ ëí>ç3T­ �Yê’?ßÅfhßÀ)ÌLéçA$s%H¯ Ã�§*&�襞[ƒ3iÊEÀ8{î[µ^jwŠ^¤–oÛ!y2/ÊJ�ûqU݈„ÃÊ’ ‚ìÅ=Ãê«Å&¥ÈÍ…®€æÑÚÒìÇ¡ ÎËxÕzø3l~…�;9«ƒlèzõ4•>27~TLw5‚�C-S%FùÒ?e®]¹‚|áƒM¦ÎŸì-Le!î�Õí±&Ò‡â¿seÜð-=äÍd¬uàÖÃÝ )À r¼#ÞúBŠÔ‡»ŒGÿX`16x·žïFkA îpu¬po#É«ªd9¡;¾è#í/ùÏDíÍNã¬P.ß— ˜_ö6’ð4óäÊ_º¥q÷1’�óôo½¥9ÝN]v€Ú°°•k‘*Q�i‹–™Ø\Wê4pHÄð}ÖK„ÆSvìv¼Z„IO °ÒAU²Þ"�ݸ_{öëžëÕÈÖ­âé5A¹ϺzÎDŒ6ÕoÈÅ#W š(+—t´nš•UÀ}þÇ´p¸©4\F HpŠ¢ñœøÈ{${®ßÊðýÏ9¬�£¼X€×äG–mÃ犨ÕÖL¿ÁÏâÁÛ÷ÿâ rÛEìU¿%¯-†Dž‰Ëü‰×àvnWP‹ä‰n–úi Ó®!ÁŒ=w’ß¡#è´¢zdéi¹ò¿•úBSAœ/ô35pK#ºÁ[þ‰hëuð¯ÃrËKŠЊvÖ@\ì?be äûVOŠ8/´ª Éî�kÉü3Ÿ¾aúÝj°~ �‘HÛr¸Ú¸FWjé¢ÓèúXrÎì endstream endobj 1667 0 obj << /Length1 1791 /Length2 20995 /Length3 0 /Length 22169 /Filter /FlateDecode >> stream xÚ´·eX\ͺ-Š{pׯÝ�ÁÝݽq§qw w nÁÝÝ�Á]‚w¹ä[{Ÿµ÷:çï}úéž]ãÕ5ªæœ”¤JªŒÂf&@ {#+ @N^ÅÁÎØž›Qhájkì `cbaá@ ¤uƒ¬ìÅŒA@>7È h úýð`aáE Hí�ÎF3€‰'@2Vót²hŒÿ(9¸€MŒ]>Ì@{ +{ íGˆ¨ƒ£§³•…%èovFÆ¿™þF‹0dŒMmÜ]l¬Æöf&y&€‚ƒûh q°˜-�mÍæ5 @]U\E ©¢¨®¤JËô‘XÕÕÑÑÁù¿zUUS—dˆ +¨‰€ IuUµ¿¿j@û�þ- jö¿u>ÿ†Ë‹« «i+‰³2ÿ�€àtv±ú[ö?z£úè ðïÖ>BÍ�ìþ) ±�ù˜™ÝÝÝ™,\]@LÎL޶ÿô§fiåpwp¶|\��¶Àˆqµ7û d üW‚¿‹�³2Ú»ÿI8üËh÷AåGÐú?�}ú›Óö_î ð•±4vù'VNII`gleÚÛ›~8‚ŒA®.£°�/ÐŒú_ ¢®ÎÎkÈÿ·Éùÿ”ùïÖE>f¦gëíkìþŸ+flïêâõ?¸ùßÓ6u°w±r¹ü+#`ne üÛ½Ëß5³²ÿ“V�–WUc”ûž=£¼Ã;öL Ð?Þó ‹ÉñxX¸¬¼–‘ŠÛ›‰:ØÙ}tí‚ð—>1«ž@ΞÌÿ—®mìÜí½ÿoÜÜÊÞÌü/óf®ŽÌêöVN®@i±ÿòþ€þ�YAÐ ô0µdþ[îµü…YÿÂ4øz;:8Ì�m]€¾VæÀ� ‚·‹±rvúzÿOÃÿ!°r̬LABÿØ,ÿd—¶7wðþ þèä¿Mÿ%š6*íÇ.5s°·õ˜Í˜@‚ ùÿgŸýG- W[[c; ÍRúŸ~ÆvV¶žÿËó?<4�{¥Qpp¶3¶ý›•‹„•ÐLÉ djù/bÿ…KƒŒ?´/loa üX” õ¿ÛÉöC·g�Õߣ ÀÈÊÂö¶IšÚØ]\ìÿ˜€4üGÃÜÿmÀ¬ª%¥¥¬Iÿiæ7q{S3+{ 'ÀØÙÙØ�åClœœoÖM›=þQ €™ÉÞôptùÌœþ®æGó?óþ ÿ a0›[}ˆåÿl€ƒ«ó¿n³ýÇ$þÀÁ `vøã�ÚÌ.@7 ý¿ŽÄÊãßcV3ÈÒø?bX>w‡çä0{�ÿüof”þž ÿˆžåßTýבùÏXäì`Ô´2û¸]üyc�³•‡.ˇbY?ð�ÏÿÓÿ_(ÿ½ÙþG´ˆˆƒ‡7#;€‘�— ÀÊÉõñÃÊÆáû¿bMÿuzý³[>Öô¿Ç�è4EXþå`ú9Ä:µ)¬ÌO¼`¦š’—é´[PK&j9c¦ƒW,w‡ ø¥0°% “ªÐANŠOß/9оX‹2Ëöm£5©rúÆLYhרOÞ�Y\xü»“zP¦üR@yí‘Ì÷|펟™mñmÄõñcQÞŽîǶ©w´«2½ò¶µ|.Ô~§+— ˜uü¼=±OøÁI£ ûºXµ®À>;?DcØ$òÂà¡÷—ŒÓÆExœ­e¡bÁcU� �òÏÌ—އz§†º¶Dz¦eçEgð§éÊ–roy€a(¬®Èoà¿’“Ù•q3á ÝrR*ç>Q«þ> êd§’2î¥Õž zÄÊá$oÓøcs-ÁZ;-¶\©¸[ýi} ?ÉùHørJjÓ©ûÇòN=m“®_Ææ¯×Ÿ > …„*jíœkA81›ØrÙ?%o]EzbdY8ð”þªÕ ~ëŽÌbE�Ì·‚Ë„7˜oj-"¼îûªÐèIñÎúô4Øyôü?D9P¾4 â1ÓQÅü1Tð‹0»…ä61ØýEþ¼!hr½ÐìR§ÐŒÓQ³]j•5ßåŠ�¬ð`î�AxóPjλNòMTQæFpÝ ƒ@Íç¹>Ê4¯ŽuÑ“ã«ÃSǪQ�á¥Áæ_ÐQ|AEË\¥ 1MªWrÊWs/Rò×rÐò î{â[Ó=ìw¢¬ –7k϶M6\þËÖ¨_"ã›–�¦ïaì0ìJ*6dDìei¡n+­ÂjÈ�ðÉ ì²Ã`ßÂI÷’¶ÏH²ñ¦}ï.ès?¶¡V¥Ojä]™éxûÙ«ÛQ„ÆHÎØ‚Kj�«+É¡žÉ�²ÃÌl¹šKelYew“ †Øi=û^§U–Xµí"'¿qc{ÿ<ø¤e4I½èoú¹a—]X硬ø‡Ù0&{�}­þ,X æ¨Þ°QyKý#H”Að×XB$�‰ðüs%! À¡Dû›xÅoêþ®ÙÆTåϾKÜÅ�ïªUµh¦}¢µ°lå= mô�bâŠÜ)ÕaYXk×™aˆ› ÜZºÓE0)<º5ïMº¾ŒttI£»×]ý×\Bry°F«Þâ2‰ÞPéèwàô©òãßÛ�å·ˆÙ¹‚…X”WkÒ0µeˆ»åëRÁ‚2G&ù ºôq…9þÚ¨2•Óž¾�·¢B×z…H\s(ù|‡£�*ƼÁà�f…`vÆ¿~OȰøxnEô›ðûCvt,˜¸f¡7tŸx~÷8‹éQ6epÑ£õš)Èå�©^¨“{|)<‘s.g`_�ŒLnd “žpB¦ÊœˆÛn¥9È&Ç’ÄòÇ̉ÚR $,¸ýù9P¬½'‰sÁ±M›Þ(³àÒÃcÿÈïi/!v`n‚1ÞˆuYkOýp3%äqWlWä Æe)Ô¯±‰ˆ%·Ó\eÖQª÷_:–Ž“4 §ãYºŽ- MÌnä#`ö‡ß›â“j� ƒ=ÕŠ;6ÛPY²-]ò©KäðJ0Y–÷;j£¤ô•ërª°3oƒwJÐÓ²‰Íd ë�ä‹Ãì‚sˆQ`#—Méæns=Àú.ÁØ%žÅ?œ±ý³²²[ßDç‰6�(ê�Œï3›€ƒ\Ü·“ ×Û¢Á5AÅê²`a[ØŸŸƒÊÎ|ˆAû º‚ìãœ!ÒÆ"ÓýÈ&× ƒ½æ•ƒÜy%1Ú¯^åÉ/„™[e%�zDJ7�Á‡Mˆ&ôþ—?T ßò ­Ò‡9ÍÐíçÁþ̹ü4-7©0´QöÔU=>úã¢û,‰Õ¼#.�¢‹xG�÷ §�ÛŠÎ�¸1�å „Ë›%pc«D+™jF“&ãû4>÷FSÇßÀTsÚXæ›SýH6î³n(ãÁŠU,ú�ªGæt6»ËB�ÈÇMÓ�ãÇ!ò4³¾=ÆÔ'£ð”uYä¨r—ŒGzÍT@-ÞõÊ4›õÏk‡Ÿ'&ÓrôŽžÖä]xâÔ£ø˜¡" ÜŽˆ ¨qEkÓ…†�GH;ú•ˆ”ÅHHo·^‰wÈ<tp%‚›N Ha ×>—‹»¯¢u 4¯)îåÇ«$%L%C9GË^y+–‹§ÕÜ×MJ%/r„ŽŽ`Â�˼ë¢OLLƒC+A`d±ï‹M^ŽŸ\š–[<9’¡BxëÊvöÉñ¡W;dwèAov?aYª×!>ySeÞÄK÷v‘ØÁE¶Äg€7Ë kÛq‚ì}gª¤nèÎ/gNÞó¡¤äûÚÓ9Waüó6›K£JweöÄ-F".? £Ó�‹&ý¦ñ•¢æpFpƒHŒÖøVf’½ª2ôkS¡X4ºh®À#£¢þ§=Èût4àÚX�€Î Ó:…gg÷[s+ªû‰ðˆÙ˜êÙ¯$×Ï^Ö–;ŽÎ�°j ùïÝò¢l¢"±èwæ=›¦Ã-Ð<•]Q»BßÚν.ë㡈‚¢�wÂc™-²øÀè¡%KR…TWZý W-�iÕ)Âm§ÄiÒÅZ',î«Ù›ø`š¦U– Å25Æî3»¯NâbâëÄÑ*T °Ž™ê#Íø›�íF0/æ2…,ì,µwóÈT4I,ÊI  ÙϿƾ"Ü@ž·1¨DŒÄÐS~£ÚM‹�‚¬÷/l2TX+|¤æƒܬÆ,>2G(¥Ð�á:2¢²×M޾c{VlÛ’EĨ³yŠ ˜ xÇò ®Ûïå/ïW?J.3YNpY¥l]{‚„�ÐÖ”ç$µŠA-ê�¦(ãT�Ðqõ/ú¤zP�[ Ÿ×:àÉô§‰Ç²ÔÊnÑÅ™E¬•ÿ´»Œ`Íßù,|YQ¼Å�W*Œ—bášÓ$bRôÓöQY)nüî ÷±2%kü€Éu<#í©üC¤Ó‚�\ån²³÷˜ö„g ª¾øÀO[œ½JWn´ààEˆ¹6,ŽŸ¬&×„íÆ™O4¤à2Ž›´ß¥Ú]éQE3 3Èî®zhý©n÷îp§~�Ça{ï‹èž¼hA�ÿ&G¥ÿxC¨Ú€üžqÈÀ;022œÄÑ77°"xÝiºE!Šˆ{m´›±£X�OrÝá›`QM°¹áüÄõóÓ׸iÌ ÓxþoSÚE¦ ]º>Û³_À$‡‹›Æ¹f¿9»Ñ8AÅÍW7–Ó�ªì>àŽ´‡Ùîœ,…P=“‡7^G£¥s¼òD©3ª¯[ pm¹Öœ`6Ïä�shqIîaBR¢Éi‡žÏ4\z|¼Bs™SZ'bú ]šâj˜œï`œ†9‘¢"‡-rUcsሦ/áÈÏÃcoªßŒ”Ô‹{‡Ã&óùqªKâô��1àíî; H0…-õ=æ1ÄÛT8h >=æþ–}j粈C9ãêé´¯Ÿ ¢þ¸QP¯f©ÒjÐ3kaÒ°úœUÝ=ïöšrÝO͇ìŒÅ^ŒŠ3ˆ5»J¬àuß’±0�.XLjþYÝø3}Èä‘m¹b•³«Dû6¬2´1"/•nj&ªí3ʹkvP‘ËŒ;c¬�É;W�ôD°mª–c÷|"Ì…äûtWxcÕƒx9Ó,‚•G÷UâÇI¸áÏ€ššß©ãÏ�.2Z�›4H«Û|…e4σžd­ †Z§õø‚Þw¿]tsðí̧/=#} r€”u>ÿìèõ²Öê³SuŸC]2AdcYÔz Õ5'åKXس-Eå¡$‚þE3ªSÐhšïÒ™dv^üá.«°õGZ4!þo†ýÀC&ëB“ŠÚ�þt}§gó!´¨´ldò´¿ŠÚ‚Ç­ÂÁüúan#5Õå×5àˆ‰g% ” œF²Òîqï~è÷ÞÚÑÌS¶ ±m•ëïŸOP[ /!ή¶m-®ºmWfìg—ˆm[2êz†§�9Ѫ¥p®&{ŒM?Ÿw®ëkÑ5*`5j\¡/J®w€‘ñÑ�FY?÷_´C˜jTeSãþCB�¡lI7~¥29®ÊFAéÆ U4¬æ@k[×\ÑgÙµå<šÚë=¹zmMý �¯ ttíô„(9¬hÞa”×x¿õt_¦]ËêÕ“¿3ô�f‹[B膗칲¯ZM[3Mëoƒ Ǿ¯ûcïñc±œ/¨I„ðùC®)ÝJh& +³ðÁ²·¢ åÿbì3hô fdä’i,³º7Mnì%É ²›mXÈsã×@Qû!Nz\ç×Ñ©©Ùã_³?8®¯Š´ì¶OÅš×ø�öDMЦ±0 ÷HlæÒ|¶¢õ—Jb1¯·ÄsW«nWÅÈ´ó*¾" É:”)•›[˜mxƒÉŽ�:¿8¥ØdafWm+†&‚rÝ£ ÓC<¿M¢z �ωï†Cúæ&‚v¤È " j|¿f½Ò¼yÃOäm¶7ì¯DŠ�ÊlÓ­”Ä~¿z¨ÜR‘J³e \û-á]¡l�|G°?¡|ÄLº%R{TÆZÊSŒý"uÄkw–U«‰ãjˆ!ù…ë%ù�‘i��—(bêAAÀƲÏsLCU«óCCO¶Aüí­�˜>�r hCŸ°e›�¿j¾¶¥²>Èæ`Ñ{VÇT„¡&(Ã6Ò1V£”Í»ù)÷TŠy~=#r¾µ²ã¢ÁŸðãû¹¬m§Ê‰PîtÑÏY“zgãHƒ°ûvWáÚÔ¯ÈB#¹áz¤:O$©ð]韊~�£ûÞè´µ¼eÂXÖŒ±ºa^+åFÅwËf[Š6Q…xk*�¤õ›í¢ç/TÞE�tšÏp“¶e`SF–zÔJÈçïî>Icwèp2Šp“f ÌO±ñ‚BÝ|TMKSw^ë¹w§õj„/]ÌŒ”‹5£Yä˜ÔÀf>Ébô…º”Þ×\^'¼nÖ¤6B¼ ýGŠLޤtd<\ˆ‡ ûF =†ÖA(ùÇ[}hßeöiÞtÀ[ᤊ*'’7¤)ˆ† nšI"´4R3�1ÝU·Üš¹Âãõ¡ y܈!€4™ên¦ {ƒwé_za#+нXøYxOf,gY‡¯!òŸ�§•ØIÎW��©†loò4BÕg©!vîàp._¯°´Û?·ƒ&â6Ÿ)üš�™&˜¤.ó Y¡ãéÔ³=¨…#Y£“5uÃ,°6Ç3| ¡7¿¬Žîcýùønhr§Û6uí…ÉñŒXõ¾F^ÜocM”AhÜjk‰©¿”û—@}=)^â*Í?WÏ_™3|QÌs±ûUng}ÆØgKSÙ>ÆÁÙÿìétT¬}¶¦ïuÂ~Î>mz–à&„Ò¥r¸ÇiãÁ"\bÜ,Éf½hÈ•2Tf—ÝÔ[øÃ‹ð¹žÝwcÂfš·àš% E‡X®^íðz.(±®¥•h£Ú?B¸üÛÚ)[bp€Õ?Ï"ŽWà[g`•¿Þ³=ヶ¥„KÇ !¸��DvbËÄ%¿ü&)«4}q×L…yìÈœ•/•�™|ÜÙŽ…WÔ Nx¹s$ñÕònÈ}‰hW¥«µñ›šU|b tŸYÚ}_b®ìJ_¼èÞ;Îjv6î+“y}Ÿ®Í[ƒjgµo.èF½QE !n G×#0'æÄ»%›ñ²Qx~^¨êûŒFæB(®M¼™¶èà<³´Ä…A˜¡ã‰„ bÞ&}Ë1O÷K‘+xñ;"�Š×]_uY[2ûéÏÅ¿Þ-‡I2}T–¿(€?7÷ì–~ÏVK¯¾e‚1*�§6[ª”¬~ö뺺ÄÍ©¾†Ì™íàmÏCvãÓc©¤4bÐ9í¼ßN¥óÞäåÐ~›^{ù=ûfÁåÏ+¶|'ðV!1æ—¼`4Çß@'ÈÞ KW €T‡X^8XŸ0êÙçÑ:�Ì7‰!ºí•¸!}/ÇL[ÙÞZt ~•%” –•ÒÝï‘"Ÿ[î¿ÅØ~†¯|pøÒBW»ø›3�Jœ¼¼; í90ˆvÙŠÀÍê€<µñåm>çW­ŸCú¸A¿Î�}“rW¶â—öµrÔW#" ˆó0Ç*+Êê «Utl¿-ùÄ7%C„QV·€üßFaM(§ÎÏÜ~áÕ\S)`ñR¶ýÙúázj5ÃåŸ+»Çµ\Å"‘:½=?×,¦Pð<Ÿ9\OÃxŒ� íØ{\©í»¿Xdà·/AO"G’|]Ì9H‹ŸoòˆÑKŒÕB„‡Ú¹´›�Ї¥ô[5–»£a»&/{CkÉϯõ£âcî6²�܈}õTilç©ÖÚ†ÌyYýÐö7·Rì¤["¸‹½Úõè Öœ$0*"!„ÛQÙ2�¶È±õ!9âfܯ¶ H¹¢ÃäøýËŽß?â‘pR 9ïû@ojŸf´‡‹ Æj6çAÝâ ¥ ô)š‹ÐÎÙÀÉqæ„áâ ÒoÖT‹ß;¤ÀËz¼øC—Þ £–ÙùjÔÅþôWI®“m÷t4šò*<ÜÃyÓ�¦¬ýVPl¨wPý 8>óݶÉ]³/“÷A: *¤'T‚�Dî†Í Äqç>q‚Š‚1>š.ÿÂö '&ÝG¶´vºi1”÷A…>[�,+r!Åì�Ô‡Û‘þUé4ZØ¿‚È¢+mWª�Tim¦ªZ+ÓYÖâ„–»ÑÉãã-a_6E¼u4 !¾(‰ä6¹<ÊpgRñÀ°&ÚýN�éÜÛs#Ê<Ÿ¼ly³,àýeÝÉlïÉÏzr;’Ü¥]g‚“7²Ž›ÆI�-ü3QgßDp*ðÑòróP´/p·'Yþ�×»Ýg\Rƒ-+ùìFëº-çpÜܾGò+á¹OPlšXÍ^ke¼½ùJCLJ¶ïÍ©ÎH’w_Ôq ÆÈtÙ�;rR媥¹@B¤ç­óUt“ £¼RIoÌÃ`Ÿ´q�WÈÛ½²ãâ|KëT÷ùnÐŽ�é þÚ’0™êWÍÌ~º˜6ê„È#ÕºÓhÉ ·Ê[(ãöÊ["å‰à÷Px\Ö%;iÅYà”0$øwžq ±i îö*/­…“'Ѿè÷¯çn½«‘îµ ºL÷$ûà[е£'Ê=ÆÂ%=¸ð¹.*ß]%g°®Ð)uó™ ¤;yé—Qª½½ï ƒ”°‹Q*™þì6_‰l*1 4Ë 7¸òæ{ïI;�š*ÓâPŸ˜Ã',ú,Ûbš5[t[·¹—åý´÷ˆ#¤ç‰Õ ëænõºGƧ«›èeûí”Z¸^ÖÄ •†mº~B°[Kà¾;rÅ×.4¸—p0šU@'b­Wâ3çÝNXY²µîéCÌ„Æ,ù¦ƒaü*ÍêÞbä·øz‚ÌOõrdC±±”»¼‚QhPû-ÝØÀ‘i¼)¦\jô�wYýM¸4Q”r[®_(IÈÅâ6*-Ý-§ËR”A¤Ò‹Àæ^œJÙ�×BÆv+¥ì‹F'œ &ð–a]�4È9Ä¡ÈËh÷y�Ö nÏ¦Ý w^¤d®.vI 'Ó„N,¯ÄÒÐÖ&!]ƒ’È—æÖ£ŸØuKÚ q#úòÙ5‚Œ ÔÛ¦îoú�é¨ç)Å{†½NH?­«bpm×i %HXÇdIç:ŒE#è|*æ]¹Ð©U£šG°èÈ›ÃA´ÂzǰÈUéu V’¿”p,‰—–³˜¤p#AÝŒh<Ä“LŸ ¯D¬AüúÈÜ^¦2$Q1‹Zª –òÒ¨PüZj ~7N€ÅŠè3‰ÏÄ“`}­ ‚¼$ÿ­pšd#†^Õ†ò c 6¦x‰"ßèUü€O�—ãmý�å¼> |Qž�h «åˆ²&—ÔbÔA·Þ’ô3}_µe@g±�ж¼`9ˇ!­Ç3§Œ®_¬)žZÑ;ÔÊÐà †4T\Üv›ìž€#\xµ$4s/–'‰àeQ®!vü"V‘ ‰ãkQºÍùÅ0‚^[‡áH+úÀôYo3v¹%˜�sö©Ïíù‡RV¯¸ú«T¯l»yü½~4&EmÏ)³‰YZîE¿ú£B0A\Y±!DHóè^µ<’~¹¤ó¾Mzˆ ùY„(ÛfDZ]ˆaç§EÓ�]0λþwݰ:ØÿãùŸÅ&Êõ˜N½×Íüh¹ïLó6t%e²[d¤�fù ?Q\‚åÁ´(4(I(Ø­¨†Œþ·³«d�Áó©P´aÈîoíAÏ�Ý&Å{÷m’ýä@Ô”³¸)gFF™Ó¦¬I84\Ã\0­ÄÊu§ î˜)¥ÞcÊ]C”À¤ì܈¯!y,¯�w \•¨áyJ2ºM>uƒ©üæÉwɞâ¥]Ö¢©z:Vx>>ŸçìÓåÔû<£Ÿ8O.–Âæá„¶â1œUH'h–4¶c7N�m§¯”¤Š`àûœàø¤#ܽ‹>îhRTâ\þ~^xHm�Í� û0ýB$j) Y¬Ïy9î[×Óe0޾BJàz‰-%�¯m­˜çì«X¶Ü•¥P�„êËør‰,Œžô€ÝZÅ4žÑÌ~é Jb½*xÞ'¼IÜ×ÚǓиÍÕŠ}·VP}!ßý¡;s”h›†~¢ã³FJ#|ujû¶”¾ŒªòX•IO…1IkÝAϧêÛÅô¹€Ñ®ÍÃïxën#„㜠à’C3;wv+:m-pšü©­'UgÔh¾ÇO¦I– áµgÉ6‡3ŽwÒJ  ýÛ8á½¹•®›ä»Øí˜K5Â!êÀs¡a×çBáo,O–§Ü ú8[í� ô¾#£9n_{;ÂQ�‡„ 1£h¨Å™|šÑ{¡Ò?ËCsI°RlÞWtîn}q4�´û¬ù•\ìê'zÓïR¹áÔ&&–ÝÖ%>èÏ”î.±ê_1´hÑbeß“Êx(4PØÒGˆ¿Ž�-¿×;¬JîÏ5,`u衞'ÜéÝ�E<™˜åǹ«%K“ŽŽ-·1šz†)÷Y×B•¼×¬¼—ï²²–Ùc8Pp¸ñfþ\²ë‹kÊ—Õn!‡[\]Ìì²L†Ÿ×ܘÞúü�½6¹qp”yQ#·S!Î=wŒ% Ѧ·Õ«S�‡±€(è|JØâƒ¸P£f†J›3¡D²ÙéÌWz½?öp÷£ìòlqü�%^‡S¸ïwô¨� öâ̹̿÷oþÜZ™>ª‘Ã{t’w>h’êg2néæ1»bÔƒò±OË›Vv–âÜœ(B­ %<êA,ÕÊl+`”$: |Ë9â0>®êdÆÞ;YD` IŒ9¿ BÞé:Òö“ñÏÐtŽæ‡VÚEú Õ¹ï7Ñù³$˳-T·Ÿ§½£\\ÉDZ¬¦ûø}ƒ¦-ɦ3”ÂI`0�ñôèM䪂–^Ö‘|‚×û€H’Øõá‹âÕw\{¤G.£Îv©ï�ƒÝ?),v››Ïɽ35¾É‹Jé~ëWW³#ñïãÐG!�ÈE ’K„ÇŽDðŠ]óÚNµe˺^¦�_l¶¨a4»êÝå9°u–°z¤¥ðx¤–»eƒ¶êóÓדê1ïpjÊø,ø jÆÇbwŸÊžÆbí/$½9ÐTù ›:Ž/íÎ äPÀÎ E»„}~RÓM'ÚvH%t@ß�wó )…B�ê}-ÜÌûMßýd@‚êXÁü—Ú‘Dš�éÌ;|vK×+CÔuªÙ®~VËEuÿmÕ#:…`XñigÇ®ßJ-WîD0cî; ö‹ƒ ZÉ:È— =äîT”íE˜…É'S›…EY‘žv|tD~È11ü}zÔË)ý=±†¥àâªõÁDØaC"—Á�Ï=ýBšÂc ¶ýä;~o¦ü4ù—"-09¹m^Ñ»µî×;o@_@dÎaߤ†y¬«Ý`ë4ax{zÍ­så¤qÊÁë³]BÁ%¡_ÞÛ!1R¥=¸ÛCÿ—ÓO!†Î]ñR0ÞM|)îX�µ¬)½�»žŒ†÷^#­m{ñ[}Ñè"£¯é«)p·òžìÕvÄsîhƨÞ$ ŽäI¸Š;üFVƒ2ã!FM¹0Ëy«Ý*8–2lR V݆�\âñd*ñ–æá÷}Ù.¸ð#Ú¡ßW–‰UÞ×…ý‡¤AÉqÄV{Ûì=�·ŒCxfß«?Ï]„ùÄx´–md §(Äa ¿¹�b Q)X5êã9MbK‡l~*‹]’™ÇENgu^{W *]¬vñ‰óä‘‚NÙ åK'£&>8ÿ‚bÌCt#ÅîŠL.QÈ8øtoÞšô•£T4.m~Le£6^´ Sª¸à&=ý :�Ï—«žr}²d[j] æN ôgX‰–N¶·Å¯’ÕÃæ–zè…6¿¦÷E_{%h%QH³‘(¢+ŠuÁ}4$ð‘¯é'x"HçßløÀé.�J=s­’È+‚“âœF§ª—7¼4Œ¾sB—³¤ÅHgæI”o?Ó†jÜû֊ıIŸoK{Â\Ø_l•HPrå8GT·1îè´}…ñâjTJÈÂ޾#e0;yP(Ռۯ֯†Ë~åM˜É–I ݯÍ,+a£ciR¢‹·®×,åÎJ´ñ¹û® :¯íè}43÷?…û˜Ìþ_¶l·ˆ|£j'”cËg„¸ZIonxu¿¡S?ÏT¼7sŸ+&Fß6ÔZ�b…hDô±ý¬ãºµÀÏ`ÂŽ¸ŒŽ­º’bb„�ÁãÁŒ\¡ë×z d?QåOì¬FQš¨Ä‚G×’‰õdùCuÊŠêÐJceIÂãñÍO­Ø^Ð ~§–U ,ÓWàPýPb=61wÛ©cgÿqå¿­ýö9fq#Èi÷JVùŠ §z…å�¤…¡úæØ0²rJÌêÃãòõWÉfaŸ¦N.±‡¢,ˆ{y–X½³ÒØ”ƒ`+*§ÓB±D•ÍWO�ˆ›n!´]8ÒSxe“{7%‹ìqzü× ¥öU¢éUJqnÀxn.qÑ9¸`ÀüVÂRmÂŽ>9LYœïÃ^Å¥Gw<9âÛ®–ÜÇ(¤°"p-¤jAKÆÔ³Gu¨A]Dö¶"A0U�›¿¡Ïo��ˆRˆÆÿÀ€Õ;%çýâº?>�Ñ&­¿–vþxNÚC“Öš»NÕEGìÎÕN�ªã¢}Ò—aÑÒuZSBþÇÓØ@ ¤ìŒ~ðtŸØâ*Ò©I~žýØ\ؾOYx·©¼˜^âk¯¦§Í“ÁŠš(ý­\Àí5‹µrp‡É—øäw®ïàê«y ã¥Hjl¯Ñæü_5–º†*%é£*H›+ DÉÅîc¯eõŠAáˆìï¦öK3(õ9ÒþA[ÜUžÎÌ#,‘õÝà£�%ƒã¦¶ºß:šLgøê¹TåväîÔ ²ô•ÆTQ‘_£Ï :è ØMsY“Øì™˜Ê,)Æ×¢´¢#5½eÑ1$†¶EǤ"ÙhuBd‘ÌîŸZWXs¡AYqê©y±$yX…„I°9h~S¾•¬"c-“eú<§Áñ+ó6©!Í0�´ôÖJ[�|öÍ; —Hþk7Ž*C"¿éæœÔëf]ìu3žs~¦#¾¿Z`v[@Ó/=‰ž²5þj2±|놳Bñp0Éè¤Ú>ƒÁêRµŠœ#¢nž �m]s3ÏøÝ¿uräÐ�&1ÆîSØu {b?£¬»Êžñ¬©¼æïÒöªÞ³œ8Þ�-J¥ïK�N¨ú«˜c§ŸÙ©¿ÝΓ'’WŠRœG¶"¦PEµýLÁ\¶#2ù$›ž‡*¢„ä�sD×^ti`ñëj•ZF6™:´‹"‹éÓ­&äM%$[ÏÐ`FJ� ö·öïS‚+”ÑÝ´‡ÒfÕ]@éç•*f¹ìÏ´¿Qˆpžyø�'#éõwÝ=áL ðã×`ýÒ  âõã,býùé±¶ù�›=Ðöb'*…¢ÄðŠó¢¿ÆRB_Ó¢#+ÎÇ:Ð!5b„üчØÕ‹åã뢜…�()ß°Ÿ=lÌëÅ„ÀˆW+0‘©|ïÃwqEì‘r%b¿q>6(¢½Û@·EeŒþD÷>þdÙŽìï¤ì [ó{N÷2ÚÒ³òdàiï¯g¦öá¶ZÁ^ÍŒµ–Ñé�%Âo “´2Ë&Y{Wsë•å 2FnŸ’–‰¤‘_/­ õ³ŸIVª¿¿Ùæù*ëRI;I9»ûÎîP�A� x6@�¢ûV|ãT$<Îr›EQ!¯kÚëºJªDÜg‚ ­°ä(¯qíd>ìIuÊ ë¾�#̲E¹uȸLáfõ/œBŸG:kÊ-üñA¯BýQc>¬_?\'aI-¬ªÃ¥G+i¢…ôh€¯SÀg½`ä4�à&)lÍ—dŠqöpç¶ñ«hY²BÖ`ñ§†.åTŸ>÷ç@6>¿0â»Q'êS¯Cmã&U�³Õݘãb}¨Ýb˜„δÄíhôNÁÞ³!D`VOVÇßéz¡gG`õàˆ6@tƒúçàuQ¿žfIŒ'¿Ý,½ ôA0*Zá áö˜Ú¡i;J—{‡’ÙÊñÛq`2ËI&9b‘ÄøÃ4I‰Ö¡yêbfM ƈ¬£mã˜HR¬ïŽ ™Ø¢ s�/1W%¬×” ¼\rŸÂÈ¥úPbñ¸I…L&oç,,­’Dž¾é§*%�µú^¦«e«…Ò•’úIÕÕ´5 ªË½Î_™gܱºÀ-×w¯nÞFEæ#õá0Eª½ùÉt®OÌðñ8ñG¹Œ”XúA’Ý2|Nèû~½'k,k¤’ºßÍ8?Êâ�ûvó �Ï ]ýp]`YªÉOÇïåü›Þitë.ªGe(;­>`Öéþ»<¶9‰Žc<[ù†%ÐVÐé0 ÒUð bB¢&ÃUÚ3� >ù7gû8—¤öךº5ÛÏë£3–ãûuúæÇƒÑâQ—\ÁŸy u×&U›ýø Ië ûH}0ç©©ŸÚru„ŠR¾ Ò^ù4n?�fí»‰ÜÐA2Nráä ÀG° ~kWT{]a¾R$ ³ÜØ»Éæ²Ä/.è!8œzLE­fΡ˜ñOÿDDéjᵃú1ëè!óäòM÷Û§Æ1quæ HoÒ€HwØî–L¡zTÚRFÒr*ûò˜·::ž2ÜóU6[Qò›t %€„3‹¾­rÔäM5žÒ°iÍ`Otr%ò@ª‡ò»——™I2}œÕ(ñÅäU¨Kc¡}Pˆ¾3ÒúÃèÞ›Üà…#ްPk.¨@oÆü) ¦­G×úêäáÓ2lXCoªÚft*—GµåËó‘ý€‹Ïé:sÏ/1a!a͉ÀÄð–9“¬ÆètÀ à'3y\ ­CÃ^Èe´KèFaÁ´†d­<íEIïj÷ï§Mîe>\Y6—4B }×´íeý¶�äÊŸ$Åj¥0šÜÄõjq$�üp9½—ÎÓË;ò"â½”a^kƒN½÷(¥l6aBÃv�î0+²1¯#æX˜“[´Ç%<—~’.èÁ¬WNúðŽÎžB`J0¸•?t ‰Œ_û|Uká7\ãm;:¬d)P„Ð)`±(Væ\ÓûOšL¥%+ñèà�leðcûª8GpC+â)uåÇô}§ymü~{´(Ÿ"¿ÖïAM”Ç¿þú³VtüMdئɅÌšV@<3Š4�{ Ä(ŸóìÏ.�'2Þã¨Ð§�Ñ¡ûiŒ[àƒÁ[CFá"×¼ðŽ˜úÁí1wÁÛI'?)@Z€¸&ߊº,Ä™-™´è ^Íóq,9=Ðë vs\Îß¹ÀË—8[ö=ŸÔR¿Å©Êþ<\‰Ö:8{¾ð®˜ÿ ‹§ËÙ4lD�”Z“ÎË'Îc\ÖexåÕ�ªôݯΪõ<ð†²®Ç^Ú©v* *yû‡ß`Oш‡šF÷�§•P&ö·$uxP ª¯{Ý"˜b—g®pˆ½9C#JÌN?õÛ`¹“ì–ž)�ò-ÿÖ(ëÉ® jÆ_Ws½ËxþË‚=ç¸r~V¿Oë+tšsç¦6EºõsŸšÜD;øÐiWêWJF^@Š­­Øï÷¾C¾7ÅlRáG¢Ãïª}(DA_˜îä›}7›büAÛ·ä’C»ÓÌ�ÅÔ=Ö*1õøÕ1'ÚìÁœå«£,$�È)3{ØžOsYs²Ž€z uyu n•’UÙµÕ2ô=ÿ!"øÖû¥¯°ô¨2F«ÆŠ¦#ˆ­R:)6öpªÝ‹-j :�®ð¿Ò^É:Ù3— ÇÁs/·ïtŒÄ-éÍNe“†âaScd½(�—îá‘÷Rã³é�)E#ÒP(ôŠOú¦ ]BGª¥p{g”§îƒÊkÁÂ<6�Ûø|Í) »}~„ù¡0¢ÃGh^VÝílDªx\„îTóšDbgàr­Òƒ¯7†ÇZ—qPüöß�u§€�ù}ÑœhTÍé4b£8ÊçØàzŸfhe¤!5H7Iû/±"»/ê¯ßõÐ H¹Mf0uP¥_¢¾¡ðš¨ÚÎa‡± ÅF1µûár˜\ ´jªn9-ß?js˜‹ŒþBecÝòôrDJn3ó»�«…ü¥É)Øh¹ë¡zͺEW¾‹—w80h›¤#3¨ÊrX BH´|ú»�xB.¡6~Œrêr¬Ø«wÔªÍ^+Ä仇TgÖÎFȇ�i±˜ +áu§êwóÅú6"‘tìô´AÀ½Wd68r*�Ô(}] ا…•÷]Õ„œ]a–ðï6i×À~-ˆ~ß¡»1…YÛËÏTÒÔ6&œH%0%¹Ô„J›ÎÉ­‡5¡~ÄÛë‡2ÊŒ6ÊmË9 `ÿꇊ3sö Ø#MyÃ9k˜�e™áHŸò|Dúó`ÌÎñ¢�„õ¾T�î’œ‰‘)ÖuF·~ð㑞a!]ç �cOòä™(f$)ýÏ\h-¸$)“ôOöLö›ÈKøwQ‹?ÙxŽÆN(õXÕß Xmw]Y|,aH~ƒÍ‰*•|¹rªÎÀJãų/I-ÍG‘ Ôäv«ð"³ka1UwôWA™�8–”Ò|¦~ÐÏØJ‰GPj:TGƒu¿Ó8Xž/k‚x­q.Â! vÖIZOFžƞQÏLá”5€ûf˜#›L/÷ÕóÝìÒ*¢DCfЈ•ÌYw3q‰ß쯡Oqo¯¸2bjø>7Ÿ—Fƒ‹ÿøV†˜ªòŒ­ Œ2Q™à�6¡Á* ¬z'½sW+OK‰MšQ‡–»oåÓ�2–‰N¾ôáoºúôà{ýÀ6ø·Ìõ!,»_ì•k´øNæ¬mÊ:¦n(äüꮉóä`Q�%e�”r0–«EÎ쯗é ��e¥ Eì]Y‡c"…ÊH%?¨?­fn ùÊÄT®Zc˜’À_ìw Å^ÁT4{Â/«æ9Ìš°ÇKÜØæÔï• ‡DðdÁi/+hpfÂæâúÑ¥-€U›mpZ›MèŸ)Ädrèú©÷˜ßå¾°¯UžÁ­)éì�5ÏhËî÷’½Ä\ø�úUh¿ú€XÂ>þ°HKÑ@^êTúýÛ“˜´Ô¥ª¢}¯+FÓ݈Z¶!_õ·âˆ`léW°™ oÔ&¿&‹Ðˆ`d>i}'úOA°}”WŠŒï‘�tžß³5 «zËÝÏ·Ln¤(›¨ !àãý… > 6dU †žA‚O¾Oʦ-opù#€£’ $BÅ~áj<õ"<ÑçêæU{*«‹¯èxlÜõù¤3>t­sX°[ûÆ Y&| Hrƒí×`ÓÓÀAÎØ¸ 0+òEê)Q I©ª¹¯CÍsÀõL£2,ï¢TᤘӤ¤qwº§y];l‡s ç—®|À¢Á-&¢yYð•÷üí­ÝŠ£Q‰ætƃµÓ‡†MBœòt �êé�Àdu{ÜÌãÕ Ã.¼‹(½UílÈÞ«BI¶Ô(ík˜3Ôª®2Hª¼ÿ¬l¤[î)õk{á°Ãé ‰Fv_*ò䆌�àЇø%×+#ƒÇ1f;JK"ò–·Û6 ëVñNwÛ_È–ìbÊlê{v—J’OµtIl§Þ.ò ¼ë†;7"Ÿœ7öà{¿Ò“2oX,F€ä‘3³ûuí±C�ò¼z%%Ÿ›&Ør�=§ÒôSmeËN|+�BEÍ ¸×(ÏF©™<þmä-áb(ä&WDtBþrÏ`²™í{\;ŒBœ)ž…Î’�ˆ*tÍäBÃK5ߥxk÷›š•‰K^A½ôæm®¹‹Amk2ÍÙ5‚ⱊ™¯÷¿n£¿˜ÙÈ„ûËq‡Ä øÕ—·äœ·î¶4ŸÆí$‡Ÿ©²Â’LÙé!¸I8üp$EöÏìÜE¨Ùm{ƒ<燑ÇÒ71«›~þq»S@˜ckjÖð”»÷JÃîŠ÷ͽU%¼dƒXéK¥ $/‹&†eGê˜`·‹\xb•uDèHEÙ7j¿Çq…:ß¾ËzÆ# «>ƒº¦óð]Þ¿ä›æÌC€6®Ù=šþ~‰Ö)Ä–™¾Sx4‚Z縤FwHŠ­Çµ *´Ri=žý.¶@㌴§íÎ}Ùi�Lo¥f{åÒ_ÿ.i’,Il´ïà½Rø—œz\¥Õ/¡´Œ�ñ@¹4ëX] êÈý=Gö°Z^zGRcxÔˆÞ0–I3ÓuToËTB¢tõ% wÇx@_:ˆ’®¡ ;”pÐQLe)z-©ž±<8–Žî¤ôv”Uó+³ƒETgÒwzö_+h¡°–“«õ!¾Ú.ö’*l˜ë5A¨ÀÑ —µðgv£W"Ãnµ¾æþVB™žM‘]PÞÖgoŒž r¶ÕU.næ Qw´¿MÍw¨xëw"òÌ眬Ì»n‹ÓP‰¦,6Ñ]B‹F«uâÀÌÏn'áµçƒ¥SÏYùçÙìŠkê‹§¨¢ÚDЬ©â9D�ô¦^Œ¿�:ÉrÉG»d*àÄàÞ_P« 4u§1¥àæÿº ú]ÛXñ %ò>ž•Ç”�añ6Žqž:=\ŒúæJ2Ò�’•LgóîMn K„Éô~^‡gl¨—KC¤Õ­¨^Ä’ù^33úmR"S¦+\–ÁU%Pú×cqÄ[Ü®åEMƒƒ�ŽÚä*\–"ŽÊö°±29-1zÝðsŒ°z§x™a•$èŸ[y•°¾ÄÆ£u<|ngS‹¢Œt>¾øÈ- &ñ �ÒŽÁvø*""²uEï&]mÖ¾^è3žÎϽÄÓRô½u‹H²l‘/ßF(ÕûêlõmSF¶¶ÁÚØß’ë&x,Yß*�8: (6cKùßÛIwîøP6‰®——;ÝèµñÐ&Õù°% GkªQºsbù<ê‹ùpæ‡�¸Z2ÆïÀ[Ò]Q(==‡…ÝÖ2£‡*¦gdR2ª>púÂÌëÏŒd¿)n’ãÛ �èaù.’�…$ŒaÛ N+7³�Œr‡Rgºvšó y¨ogxb¯ÙƸa d�ÌK0Ôß³ëXì’²zíФ‹dË‘›'ÍqÔ"-°1HK\¦šî1uòT>JKv¦åýî(ÔYfãŽÉŸW­Z¦ÂäM+g™·.Œ©û¬÷—q´ä}ê‡3_”*šHŸ°Ó�3øçƒ†p˜I7z©–öÊé—`� ÀD¬Ïe »Vók¼ùŒ‰ÚI:j$/læý¬ôßî‘æ�Ö§GyäÇ´¾¨} �͇ÇäT?·]IЧÛö¡ÉàD7hÌÔSl䇱“÷Â]gÄÂÈCŠªŽ@Î.ÄYÈšv qTJ^’‰àmªrõ’jãÏûÍ7P¦sî¦t_bðq\†T"Š;ljàÙ�;<ÍÈ×­8ÀïD�Àÿ2ðcd <À� €íå�pH¥…Ô˜'S^žþ älo ˜ÃÐ1í=Wƒ[i߀•Dõ)ƒ=üêþâ¨9û6]ä‡-yâñÔ/ûŒ|¦y×Ê«QMÜfÆ–m”?Ĥ‰Ã\PÞ»×°‡—η1»Ä³´"öCÎ jò╌Þ#ƸòÒ< +ž üŸ‡¢b5Á/ée‹íq�jÄœß'°òN„)æ�}³ŸL[·ý½Úà=ôW7£3ê²=õú¿åeóÌqÓ´¨e-®)¦8ò\˜ºzOG ù-*¨Xô>ñ"kpÄ— ÷ ˜ÃAv¾^×ÜFÈzºƒÐYí5Õ‡L¬©¹ÊIT­�iywÌ ’›«¨�gäåÈ18à€`Û˜šóõ8Ï ]4âÛš¹Ç8*Z¤‹"ŒöŽà+h눚7]I‹—N]x57Òµ|ïâ:ºÎÇVõÑê]¦–��¾·s«·Û4³^}ôHï|„Í‚åQù$…Tð"“?Q¯,§£šçb#ÜíM4¥ä¢ôŨ[½à¢‰Ïå�ƒG p»l´Í„å®z A|é>ÆÆ@;àÖ·8R_ï‰år,·Þ×éªè[ÛSZ冼ø�qÉë[ë"ŒZÛA_€¤Èñj@¢=}±ô®-.ôØ‹ô裡Åÿ�Xªp®�7ºòwžØB7òU@÷þÍ ÙPZ°j¸êfL©ñ‘?VI¯4ògI:íŽâ‰Zij®ðëg�/¥=ž‹Ï+[( Œ}ðDŸ�Y¹©(N„ ÓÈQ‡¸þÏŠ¥Â� B"’8Dþ}7^Ê8u—^MðL�•ÏnrÈ’�RÖ£JÜ÷W�9~›Ôº&⸖ ø�ž³‹ù¥Þ¿=%EmnÃL¦l¿ ž‡èÉ@ïsË™1ÂYÏLwL•ùÉ’þ£CÆÀ7jŸ(A„\¶/ßXøLïƒE<ùnZÆîM¼¾�oåÇP¢*TWÓ(©|0:Ò¡WQÍŸ½Cƒ‚iƒøYúKå,$ÇU‰r(¤P‘íls;\Êɢʢ�»-!ÖÔõ³£�tRl@+?Îå§â9A[·æã±Á¡‡ä­àkŠËÝE7ɇy$£ÿ7ï¼Õ@9 Ž×Ú:l6ôYQW¥û©ó1¢D­#¸|G_Ü¡òä ý”4h6y°eíÑYJ–²Œz±?ÍQí.[atÐKÕü„[¸ƒB[Ð öO1PZ®ÉÓŒ$| Æê5AöOdK'g2”~ÞÄxAÀfmŽ|W¹ZÓ¸÷K1WŒ5­Ð¨ÙÔÞÍž ;eª‘9ã€÷$Þ‡<Ѹ¤ÁD©˜g”¸2'ýA²y„¡A¤±ži_¹`t”æŽ49%B�3Ue‹Òxæv–‰Ì™#¢ÞÈJ¯½’ð3³>ò»ŠG–´»:‰åyò±qŸºq’bEká#+tP&Žqlø%ÛwNý:ä×ö¶•秤íwîpÐNàD-.H|”%Åž¯ üˆ}…* ‹f´U–UD+z<Ê„/]:_ßÞ£¢Ïžu“Ý6†*¡¶ÄÈÜr×ÝÓI1«#ü![[5<‹8lí!ªñ¤9›É³¯¯Èü,ÈrOƒïîéBÁÌ ÑÈ›!Á:¹]®[âwK»Â Sùô ºØúä8¥yë¨V¿—»ÙyÓÆ³ûÚÕÔ¥Gœwt0DìÊæiÓ¨“ØdîØ?xXús«°[Ðô)€ÿÇÔ›íñù–ÿÁc¶À³Ô6“\ÈêŠÛ;jL¾§0é¡ãîj‹T`«Ã•‘“)U…Û‘;¹‘°?ǃìšÇ©\2틽í‚uë«S÷Xd�¸+Ã{è‚_rÇ8ùŠú_„˜ýZüy·xÌ@ôö?¢„ZRÇ»ƒ9Þè\æ�Ű˨ê¦1)¬ó¬æÜGo”»¢š øD®ÏIÒ7Ñʺ)í>ÿ²F¶o/.;Y.ÙägºA·uùnZd²½ Ôörðé¨uÎJg™}©ÐçŒ5|þ5eÚð1î%Ø“gmå[+è¢ÁF @ûG)¤u&¦Dt;SÏ p¿vÐÑ-ÛÉb­„DC›Ã‰ÉÕð ,€1†•Ýe&VªéL~?Nu9³ˆBÙÊú ®¯ ’}\}Üà=̲)ÄFz!8‘_&›{#]›aß|°4!ÅôeA-Ò´�mÓ½¯qq¤[d4Ùðpá,B}¿U[¦ 6 ¤OÆ£<6ˆ ÃIîÁU¥ü6§Â‘¤ziéÅz·3Cõýh§³<‰=Çå£ÝóK}… Ë I…û¯ÁN²É["—º·�µ€åúÐì¹7†áý�…ª>�|µÊeâ—°Û› ôež3ÁwH(쪪©=xpSɜԤ»“ožM‚û“@#ó}«^¨†ÕŠ1¬æ1é;t¶àÐk'¾ ÒŠÕ=.÷h½wnkäG=lܜŋ%§ /°�Ëöz¡G+Ç R¶”ÖüÖvw;£ÃyÝœp™*ªôXfØÖ76¡çIlv®yPù1oL)ùÆ8\¤Ú‰†ëíóÂfIŽÎUÈÄb‡½"þ·h"Õ™š;0‚þ˜¾Àµ+j²ZIÝ‹¢ø*Šb€:åÅCÛdеDè!+;/—µ„@"'OWÚ‚[#[d±¢:€"xíf5ó¤-îáMðU£GïÌ"Ú[ݸÏzËK&IˆëŒ'cx”Â8”š¨Ô8uQ©s°ª@W¨:l¹‡áÀD-Ÿ»8Sšå¶L>ï~\›)fv® ­/,qÂ@§ÿ�šW v•Q_®Š²Yëqž…1ÕòçÂ�Þ®œ­œÊ•ê¹¥äö?Ð(®·!&òx à™*˜c8vÉîÆfä\íC ž£ÛÇ3UÈE2÷ ƒÕÝÙ¥*Ž8ÈXI̹+܈óPWøÌ\FØXb†‡â†"Ì»<Á…>7‘À”væ¡%3ð6uIDñÇÌn~åÓÄ,þÃõÙŒü ԨŋEò á+uâ€+«ÝoSl†UâµÌIêMžò­BòâŠ2/\> stream xÚ´¹eT\Û¶5JÜ] ww î$xáîîÁÝ=X€àÜÝ=wwø*{ß{²÷¹ïïk4(úÐ>ûs®Õ€‚TQ…^ØØÆ(nr¤gf`âÈÊ)ÛX€¸è•�¦NVö&&6x Q{ �£¹ è£�#�ÀéhP0r§‚#˜˜¸á)@Ðì4º䀎ªn¶@f•Á_@ÑÆÁ‘ÞÐÀì‚LÍA@jpЍ�­›½¹©™ãï¬ôô¿+ýÎaHYÚ¸8Xš @Æi9€¼� Øh ² �fV&€*ð@MELY ¡¬ ¦¨BÍ.¬âdkkcÿ?\DUTÕ$è…åUÅ@u:€„šŠê@˜¿)@^ìÿÝø;]NLUXUSQŒ™ñ÷Ìg ½ƒùï¶ÿÅ�Ì ð‡8ÕÄÞÆú¯*3GG[FFS'G{S[«¿ø©š™;\lì-àO{ ð/aœ@Æ`9Í€ø½)Ys# Èø;IÜæo§5XJpØîøb`!×´ú;àþ«�™�Ã_¹²ŠŠ²ks�#d2:8:9ôÿ²�¿�Æþ&ˆ:ÙÛÿî!÷¿.ûÿ´ù_ê"6à•éXyx¸ü÷Ž€œÜÿ¡Í¿—mdr0wptø»"`bnüÍÞá÷ž™ƒþ²É ËK‰‹©¨ÒË‚D/gVÄàèêøWôïzÂey\Lfn6xHÅ@Æ¢6ÖÖ`Öð¿åûhÖÉÑÆÞ�ñÿ̵%ÈÆäñí&æ c“ßÊ;Ù2ª�Ì휀Rÿ'l‚ÿc3:˜@;ÐÕÈŒñw»¿¦å·™ù·,ƒ—‡­�-ÀÄÀÊèenÀ{88ŽöN@/�:þ�à™9ÆæFŽàAø¿ªK�LlÜ›ÁLþ×õ?#@õ×A¥ŸRc�•ÀhÏ(oãªÿÎÙõw²²’7°Rý·¤ÿg`mnåö¯ÈÿŠÐþæJ%ocom`õ_>sqsW ±¢¹£‘ÙßÂþm—r4Ͼ0ÈÔ Þ”¿Lj¿�“xnÁw�ùï« @Ïü[ÖùÀ#id :8X9þrÁ2üa°ö¿é•> RW¥ý?3óW˜ÈÈÆØd `açØÛ¸Á3��…�àÁ žic ë_“`dÙ8‚S¶NŽ^{øß»ÉÁ`þmúqEÿ .ãÇ?ˆÀ(öÄÉ`ÿƒ˜Œ €Qòb0JýAFÙ?ÜOî÷“ÿƒÀýþƒ¸Àýÿ på?ÜAåb0ªþAàõ©ýAà~¸ß§ÿ n°Ïàû ÿ ðú íÁã t´š8þ±³þÇþ÷ ÿÇ&oôÄ.fdc…ÿµ°±ý¶X[ÿiÈÌ^¡ñ? ¸%ðO°lÀu`fÿ`mlà`ö�$°.& ˜…‰ùŸ"¬¿¡óŸªÌ¬àž&V~§Û8Ùÿ£ 8ÅôLûO;6°¶fn¶f@Ð?"À6ó@0o‹@°Æ–ÿ€`]¬þÁt­ÿ@f0¹?•ÙÁ© ðÉù‡,€Í2àd›¹Á‹±ýã³5?XþµlÌÿcý÷î±�YÛíÍmþ±Ì`%ìþ@60;'ðsÃÐê_%™Ù¸þxþ]–ùwÝ¿\ÿegËúÑ™Á:üY8xa@kóûï ó?¤gq0wý³0C«�3¸ÿŸ¶¿ÈÑÌø�)‹äèbó�p §@ðÒœÿÁÌ\þ1màl×@py·@ðv¸ÿ!®ä´ÿ»Õ¿ï=ÅßÏý¿iL.Âÿy!ú «8ÚÛX5Ì�Á/ƒÿ‘3ŸAWm&ðóˆlýïoŸÿÕ€âÏ£ôÙ""6®ôlàsFÏÂÍÞ*ðu!v¯åýýnò׳|cÿ/þýb]�Fð‹s6F¼�ÉõÁ¥Þbù_¡)¸ŽÊ±>IÇB-¦M´à~ÌùI,ðkôM§,°‘•äùì�è*úDˆeõ²Ö”P1~e¬$´eà-çM€,&<œ­Î æŸ.·àûµ�Œz_:;O³˜m*½9¶™ 6| ÊÝÚqÅ2öŠv‘D¦óµy%Ú¥p†¹ÓÞ Ýu¿�`a¢í�ãë=fL¤ÁáEšiý¼`ìaiÛ®ŒÝr]3tÁ̇I,” Ͱ´Â´FíƒKU³¡1±ûñÞn²pºâžG`½CÊF–âI(áe„ÊÂt&~Õ è§‰eÁHÉ’•.3ÎE¨4}‡tÆqÜØÅ8”Vì ɧÄŽ¯h5\Ré6´¼“êf_‡£Êüˆ…N§H‰|B+±!Z~¤5Ѝ6<;¤ÙêÈœFþ9 ÝP1†áfƒ�´¼î—x–ùì�a!7“ˆæs�:3]H¼ÔЬ½6*ñK“‘œDŽääpA°“NõõQ#ÿͲ6Å·š²(=)�Í¢#Œ×_Õ‚ìÕ‰ ù¡0ÍP#�0"í¢€zóOªË,’óQûÝœwf+$TD²õœsÕ۪֚ƭ|J³%åî#œú 0^IÌúUlZ/‚1%YÆ$ö6§VBŸªÍï4ñ˜ òûz,A~c Æïp%‘G¯u¸È3ëG]QÏpHÿQþ‰Ie˜rO’ÑM!݈ße2*þ•Ÿÿ¶sTGŸ½ûU´‘)Œ ÒºôÈ-5ƒãÛšÏC³Ã'2ö1©b™Úæ¬Úzes­„ìhè�Ù6®mâuÙŸíÊ4 ½‘M¶ùŠfƒÊžøÈâH)CÁ�“iþ¼‰Èþ˜àØÝØÖŒ§C�¨+ÔpFædm›ÒÚù{¹Ç¼ÝDƒÏˆ. 8¬ýˆƒÈE™^2±qðÎB€â/îyب9z ˜0É ðñSµÂ»Š·Sƒù]mŤ�&xù<(Ä7›‘ì QØa¸z÷Ë•ä;�Ä3ê±ÈW]Ô ì $jˆ°gh{?ùinÎæëèôD©(}î.‚×›ä&挓ß�¥(ho)ðÊú;™¢?Øà¡x¯Hñæ>ó ·w*Þ¶”�üª{+q×â‰]ŸÂ‡v)\¡[TýÐí8ÁaªÞa¤Ÿp¢:×]„P=7‰²‰Ϥ‡J¡*‡"Màþ×�Û»¥6ÏF_nR™/gëîÞKA;è -âpaÛNªFÙ¿Øé=0½4÷c) @S@ņ6-ܾ~üXV(…ÔW8IpyŠ!œK™‚èúÅM:èÔj‹žÌ=‘¥žxó¹‘o,TJ1\ ç¹lÿ}Hå1bZ³bÀºöÑ›£‘XÃ9hlÓC ü¡i² ÜW 2`zžAw,e´aË6§*çµgº»ªÎ‚w‹±_Îo¡)d»³2žVô—wf‡y/M{„u@$b§ÈRbò>Ý[ WÒ†›äç¹H´�Sá±iŽ4‹Úv§¹UÂ*_L¹ÙEÒÅ[¶Ã ™mE6’ÌèÖ+I†Ìd‡àx Š€U•«I=Ò8<혀¸ý#TüĈü™m,#È {ZŒ3=»…D†Ig±£úwÏs6L˜ÕÄFóˆ¹üImZ›™®û3‰ìFh�o…Б~Ñ^ ˆ´pâÁê~c„óK(¨¼Ó¸/‘j[H*­¹¹bfÓ4ž?RÐ?€%‚08·u³’Éé³�ØÅ:ŽgÂ0Hïó²£½ûá¹ÑpÅœ—éCXYöx›éóLì…ÀXèïG¸äuc‚OÿÁ‘ð¨è"Ñòìbe]…²-8 nË?*Ü}ãÒö}ÙÅ÷á œ¸Phž}×¶+�tq™Ì\jèÀš;»}Ö²¸!޾ P”¼Šþ¡ùøž- BNÔêÈøÉJnŽV’k°h[¹ÉtœÌ²T%¿£JÓóF-ë\¶)í¨ÞÍ<„æô»zxÉ#r|ªJóžÅÕ{}j/îuZÛˆS}E§,G‚ G/Ç0í¯¡†ƬÉ~ˆJÌ[Z1EGÓ¨çöy$UËþŸ½È3+µ NJcÁ3?—�aÏ€Co:Œ%{s÷¢<!Îõ<˜�ó�M)W6›˜H}\~[¿‚©lKpãs‰ôúÓ�ò¶•c �58^×¼78œ2ŠH€Èn^c ‹i}øöQÓíTï ]•0Ù0Ë—ŸiˆG±ý3Ðc 9”ßàHlž›¯ñ�næÞú¥�ÎAtÖ¥“‡jšpãÐÞ£ÍS~K}Þ�NŽ•›ñ 0b-�EßRV¦°01Þ@¦¥ÓÖ�XC¿ýд߉¾ƒÚˆLÉ »Ë›ªÍP‰‹*µ W°“M§%÷u¦´¥_â5Íè¤Ád.œÒŒÄ)ø˜‰·f$8R÷k`ýèMâ~:Hbxs:;”ئˆ£ôÛh®bfâPxPéA®q��•ú¤Ê ¨…2›·¹íˆ É)#"– 7£B„¼`f  «ëåcÜ"“QW¸\}úÇ6µ©x4ÞÄqãæIŸi¹ª‚R‡Ç—­ó©`;[ÅÇsy?À7†7”slÃ*ûÂÐ(�â÷:¥»§ OÏãk,Ÿ`ôó×}Ы_pöªX€sÉNÆ -t- w#ç*9cPMȤDžëƒ<þãw£Rü²äáRGB¥{¥²¬aÇÓ•Áfy<Õôg9—·ŸÉñgH*eêã ‘Éï).KûöK˜ö1#�RCÎ;b† ‹únÅ~é°!5¼3{¨œ$³HÈp�tvàËñy7Ò?ɜǘ¹Š›«@*˜Žâ^%Pp{²O[l¾â-«U{�²™Íà u$Ë–_£-ju¡$íQô¨ýñ�^𘯛(­‘y5ë[V"p´[q`�hNT¯¯øG�)cvˆ±óëJ¹ªkáh'†»Dõ)䮸"©Ûã„w¥ažý`bÉ)§Å¹f6™ŒUBËDOS‹¼žð%$د”0òàŽq öå’ò¯Q³Ÿ“Áw²C>å‹–ËOœí{b"xÑO9º}Ýݨ¶.G“åè:.ŠSÏñ$s<¦L° Øë08�V_¼1ùÎgR ESœNã”Ღƒ]?8£ØÆŠ§àá•‹Ñï>|<—€¿ œb”>PØÚÛtƒ,´�I;í^ð«;¤äMr›#ÄéOÈt4AËÅyÎ�’úäÇ%â¦'Γ@CJ´î£ä–{a«,hª�#V²�Öá€×çôKÅMqšeOÒôyç !ú¾w8ì‡4°-ÑKÍ|¾J`FtŸå"’¤• ^\C"Xyù¡¡qΑ:.»‰õÒä6åÈÁÕŠ^ˆºIt~_pÆ¡^4À?øm±Ð'ôÑæ1‰X‚$ÚÞ0\kòÙǽˆNȽ­¯“«K«î$ Œˆ ޲ÝõºÇœ™ïÛVŠ0è�{y]ó"zتd‘ªÔ®Ïǯà©cF°tV”^îpÐή^©gø·DÞD›ÞTcMfƒ�ûiH y'ÉU4jÔW¯™bttøXùœ�ôeˆ+$¬L/±Pc`8†‘iŠÊ‘L ›«ÊOF“ôHØà£8öpÜýk)}æØaòBÕ34êP,êTÇ5$úâ’Rã¨U€Ä²)ßÚ`»rO8´B§[j\b_/MÉ@CÉ Gùy5ªÞ–]$lPëMx†­42]Osµ§7LU´ ÉË|^‹‹Oiï˜5Ò³ ‹2PܾaB3]»Ä-]Ìð§îÅZç|#8ÌÂm¯úê¹…îº*AÏ•Éú…ëäFÑ\h}œfýì&ûÚW™(EñÝK°øÈ-4 ¢Éæ®{”©DŽzei_ÏT˜~‹öJöº?³ê† —.AqšØ÷(sq¼éú['[íÒ3X½zšéîJQý:?ßï”9ÌÚ°�;úAº]›63‡s¤Až~ZÅóÓMú‰ü†xK�l;uØ|õ ã,¿�›<ë—ÅVf(1sXB<1Ó%ý´ ë(ùÔžŒ2Vm{ W¯�-èkŸ(ÝŠÀé€ñAÌÚ1UÓ)'ÎÛ`ÈLk¸±Òn‹ÐÍûíö%s:bYÏЉVZô{‹[Úýs•QŽHwÊWOwî”Áú‘â¼ùr«,å~]ìsz{›Åù&¢4ux¼ÌÑ*XÅ@šzÔïúBɇ«Â¯‰ÛPbQg#d—Þ‰?|è„jÕïý#Êû¾�p® Œ*Ó$¼Ó ñC½Pï°ÜI“¶¦N :R×% V·¿¡êk“xi_H¼fN'åts„ÑÒÓe® nöRòjŽE T1AQ³1ÿ"ÇnPCRÆþªÒèK�Ç"îÿE`|#gok_Fv­é)]DÄ#³xÖ°Q(±+Ì!ϬëNxšªÊÙœ»¶Ù¶d£�®lŠÌþ>œ[©¯i¨š·#ËdvOB*/8¦ -ü+ÅSjˆòRöh¥ÕêBü”ÛŠÔŠ·«6J�jÈ.÷�[áQþ–¾ó‡y¦îÖ€¤1˜†©¯ËÃ<û�'+?´× RÕù‚•ùà„= ÑÚ0kÇŸ�­Tù:yo„»B¥‡g¥FA¥& OäpÕ7§ÔÃFfa©W6nZ�íµOù¹Â47’Ì9û[ï´ã? Q]»JrDZÓÁüì)ßR–ftðsÑKmò/PQîùϼˆ¶|=yw̉öfÎíÕW¿î ¨›$ƒv"|‡ø½àνæñWžuÈ÷KVªö±ZŒÄù¢9mr«ši\µ[‰®zU.wÝ‘%âѦv;ƒïø½Ùܾ­TµعÉg·qU+øô¯—Õv¨Ça*nvFbò~»*×XŽ©(,*™Póå„û©7×Õ9…³¡ËÖäºÔ¿’íEvQ.gØA–z¹.36S£ó.´"Ÿù¬ö�¾¦tP¶Æ¥ùRÂ3èÆz@A8ç„Ó!e>ä,Z>°µ'çá2÷Y„·Èšã�ocfÏ•Í=© ¡è•°Œ'z=š°žF6ÅÍÍÀ·ÅGö¬Få÷"NÙ€K›JÆðUA–�ýH'ÎÇX=J ¦5ìffÂ8E’8«eÊN¼¶êjU‚bZ�s†ƒÐ>x³ÖŸ%¥±wȦ+á‹ÖP°ÙîÖÕpüXK$H—Õз]‰Oy°{}Þïtׂ¾P†“�é!^]|ì^:­�mN¥`ˆg½H;?WÒ'XlXù©QeBû—„Ìè <¡Ç7I¦Ÿçû¤˜ú?vÙºÄC´ëI¢�…¯Ã»P}{ì^È¡]îDO¿ü* iι&àY—˜]�*Ô&Žæ™ÑvÃYÕp­4eœÏˆÞs3¦~ŒÝéÐU¯y8aâQ_iÇð×vDêć²d›]½uͽ�ÌS}X<§¨ÑL׬Øý¦dDt¸›Î‰U‘€*r:“l1ò“yŒú8ùí�4ÆEx=Á‹&IMß'²ø‰ï±r7zÓhðÚyNÙW! X¤ü‚b�.Ê2Hk%ß:Œ,¿J/�èº#sE~$„*’F¾¼”„][½@¨neÛ?=àq-ñRë%gö:Ôâôøi} Aå<žÁgu ÚÑm⿇*×ìðRÆþ¹mG�~´èôb0(€ãúÃûèÑ*/´iP¢=óã+Š^ÜìшkT@™0>|Cz,G%Ô�FV·ž×` u ƒ�øWÔô] 7'‰³`MÛ¥A�wFûÖPõûÓo¡¶ J¡åÎx5HÖðñ… SâiñEà¡Â,üùØ©¡áKõ›Yøž¾Ÿš íÞ÷o·p]Õ*ŽÙ’¯†Mîä ÐÉ6?ÜR°#ZJžáZf{Š·å=jâBµ½¢èfS‡A]ÅêèåœçDü°ÈšXÉ å B9gsö´”•Y«8d²lDü©‰í‚V•„9¬u5B�¯Ï�\³S5‹¢3šq׌9rÿ5>Kßh"]LMI%«>óuª¨‡.t—žESßWKSÆwû!ÁÇÈßÚT>½ÑÌc‰3âãÇ®´�Æ ¡ Sæ©Z6¥1; 3œºHÍèc7n£8“ãC99êoþƒp²ðkÔ.5µ¢Kº-¦‹˜éši÷<Êqº$ypëb隇¶ë3ïÕˆÔyi©& ™ÐÏþÚå´+ÜÃÁ{]m2\ûŠª7*É©ƒ–ðÐâ"¹ÛìÒ¿s/ÀÖÓªœì7ê¿Ó”]ä¡lƒèõÂ.o+=X®°¶7MÕ±/ïF›ÒXÌAiÀneX^Nô™ Y[Li¿-Uós-D÷ÒS&6éF?a¡—_Lt¿åq¦|u?>|·þ­Iý;T¿¸F�Ë– ˜Ô׫»�^ä�‰yÌD,Qõ#âžµ[§œÏžÙA”'!M‹š~H!Y;³löý(}¹§L쯷m[…§è¶,cZHJ;ë ?tAH�}�°ÖÊü¨�M·?b�‰M(â}¸Ór³?΃ ¡&]qåºeÄ|ûÝô<øa D蜯góžKŠØFt"vƒ4]™Çü©!N·¬J8¿½0$×çdp”ÂûéOVk Gœã˜/uÐÀ2}*;G5ͪwăÇÖk _ -xqÐä{ ²_­ÃÑ`QWKt±ù”ø)š(å¹¾”S8ì>œµ58…éHˆÇNB¿ÿ>àýõÏ#’Ç—ÿ ôÃ÷s;1Ÿÿ†²¸ŒÒ�­-1ÞùÀ”È"¼ŽQùlªqNJ%I#cá èýâÂþ¦æÔphm_è,…ô†Avì˦Ã0ÇZª3 ‰kù÷ÓµGÅÒ4Ÿäy6²[«í7�hWvY&'|ÆÔt€´šk¨êÖÓoSíØY(þ;áÌñPbi �ÍþpËAžÏ×·#³+î­\1bÜ""Ü}¸ç‹äu&žºC„Þ»8¹¿ØR(†…Q,k¿‡ž†:è!þ°èZ¾z_ÿ²KÔPŽŸÂ[� ›IÈöô`4f'²j¢¥ÌtýÙD°Ò®êð@7t�ºçÂ!%Íþÿkr¢£Î-I¿? c@çVª®š3¹YâQ™fu·ŒA¨UaŠOæ½GüÌ#� ¦µñþ†=Uí+¹TÔºËþ8JîFFCŠšj.­)AÍFÊ�ÞD±q¡ÄU8NT^?¾ÃežökLNÐI-ú×¥ÿ—�áÖxÅÅPP¤ [³‡ëc`¾"³GQËÑtTUþ�]b 0œ¹·\œËìÕ([蘢„„ €íÅn² 4É’Â3væåGçb �¢åªÌˆÔ>‰§î]ÜŸW{àøÌ+šë:`“–,Â…uý@÷®Y‹y bˆ„N£^OAÕ]<Ú‹—/}ã,/‹æaz˜ ¶ëÎ#¬Äƒº²2‹ yœžK&v¢ÄÉúiýŸ— pìæGƒÍÑ#ëLòÛp8­c5®ýéu|Çøf¼ý:Fêž‚R8Sï/I0ÊÃŒÖð+ůþ c´4lýì™È3^ý*Ü™Uj ÇZ†žý²kˆ³'ßä1½pZÝßZ‡«j¢Û•wù&è—¬¿ÝÒɽœ>¡…Z‘mGJ]Jx¤”l{Ù,½Û¨¢¹í—kH£+ðÆ›6úVÆós�_‹Œé»)G\~þ¾–²&‘›ñ-¥¥ñ­ïT‚Í+ÊkŠ$ã&=¿è’' Ýr1{e‚#ïŒ4²�å-½x}•ä×=‹ Tå.2 W®Æf"Vî Z•¸ ãJ²…tô'. oÿW²4±Û²&7¨Ýžw5vYêVë.«ë„²Z¾G—%ÃæìeÕLkp× �ßµ»ƒŒÑúÏ…6}™n3€_•SÅÛ2ê(Ç% OòJZ¼5¹ôûlgµ‘^}=^1h-`+¤”7¾LþŒ¢›  ßYÿÔð~w]ùÝ´Sp=}Bº‘n®tP‰ ägÉ¥Ö·‚+¢n^cÓ j øh„[&N¥Ç¼Å�‘‹Ÿ{Ñ‘&ý–4B „ޏT�Ö@†U;ãÈþ÷•kˆû¡R„…»Ÿ#dx7@Æö�½ƒ$£LðôJW22f™Cå8Pp¸º±Æ>2«ó+Š=ÕUƒTæ˜QÍ]’q„û?G-šE“ç×Eú¶Ïë“MéÓ;-ʪ-K<ãR¬£Ð?ßœûf¦�ßîÌ á8O¹Jñ,sŠË^ ¼×�áÊûUª)£ñf¶%Qd6oK2µç�o­˜r¹\”“œ¨EåÕÚE„^L:å&Ú'>»i¯˜xFÚ9‡ÃöI’0Hõ±ÃQ±©[þô±N=ó(d»ý5,LàÆü�è^–g¨ªŽ¢¦mH�åíë+—­_†Kp#C½oÔ뽇sHüx’\Qý\/:A)M ÖïK�»Ñ&èó-ŽænW«D„¾MüÎÇ7CäÓÖá!Á)(ŒzÜnÉÅ­EF=,a¦ƒ.ß™êùvF_ Gý§\‘y\GP²N_Q3yÃ>´1®Rûhy|›£0g4 3)¸fï$¾CïÁ”É –‰{Ctn<‘e¼�¦ü2�Åâʼnÿp`ikÔzº?;ÿô#æWQÉÈ·NØ«^H‘_äûù¨B•á�SÊïõ¥ÏôÄû¹W$’c–çÓ’èK,#¶ÒÊ#VW¯ u ’éÙ�Wé&á!ÕÊÖêÔNt‹+ä\üK¸¼¥Ï��ØX—ÌF�ðí¡é#1³à0XëC[u®³�¾,­E}r2Ѐ °^ a ÒÚߨ¦ ¸·ŸÎȇdÂìÇ^y_HëΛ^Ͳ¶=Cþúu¥=ëUmþÌŽ¥ o¨y[šX¸ÝËn¯5†²6›¿ã=$ðn9þ!¹m§F`±¸€Î“µ‹ƒ~ëˆô)xàˆ Ý)êD�æ×ä÷8–…:/¿’d¶Û«Ø¾t†�$Éwj1\z­ùάôÚôœ2‘o^0á-¶‘%ûº’¸M�Få*oKÞÈ꽘ºÌm9~GùQñ .´wÅ7Â�¢ ]€€×¦Ò}wžHØ‘ÿ¨}²ÃµA›Èá—nQ¶p¡ŸÒ$CÅÀžD:Mü¶Í‘Uî0ai`Êä¥I:^…ÉCƒáâ,ôé'l4Î|páguw×þ®Ô#b聯ýÆ×-Ù¼3mÂŽ{ñGp¼Aê E—!ÜG ­pXl¤CáÏõÓ»f–Æ|joônRöç'3øš.è@mž8ú6¥[W­—&'.„ZÇ­ gãTÖýQwôk7UÜe8#!�K4çóØûý¹.ÖL8í{J¶É1³Oi÷¤UŠA­kÂm÷²ôgõ–•z�Ÿ^‰,ÄÍè}ñ+�Ów¯Òç”-3ŸˆŒ=rØõ7ŒbÛös(0—Ó1Å… ë±’¶òî+·Ðvk¿™Šz¼©Òþ˜ž•8á»îš”}Ùd¸&„Þ|ʺbËË£ùØ÷YGïÁá:í'méZÂÀü|‚jbÅ}Q§ö–Tâ®x’MºÁàp­åNïùr¤C I䩹|c;™¦1]oÝ/õ;Ü6ûtoi‚9·°ó%´;‚ËÎD i$ZSÕâGð-Þ7/(#ù–|‹Û#—ß(o]ÿã•­� ·‹|ïT!Ç>Å(þÕ› bõ:çkrs1šPCFMw÷ DCCœ-?Ù7RÖ®ã¡~å™N¼Ñ|L|?‘ c?²”(�”µ†ÍRÉäŽû›(kÑ8Ó ÐYhX´O±«WÞCýJéÞUËÔ,¸ç'ž‚íÜ>TGÔsõVÇ&µ�ÔrU QÓ©~ª\PåEObðwX[tjSÑ©­Þ—»*qÝ;ÚóqìujÎÃÛêË._7v^¯Öfî<ŒŒ½:-êº7U0î�¦�ÔUÖSQÞÇS«>‹nWè±èôÊ�‡sFFÃrÅfˆ;jö6?ÄXùYirŽQò¸ÉÀ8²Ä7UÚ/Døe Î�6ÝÇꙿý²ÆÔ"™+òƒt‰aGB Çê÷B“ bÌ’·ØöY&À&£È±”ˆN#(‡çø ì%Ù‚Ò9–2±ƒãu™€ûÀ²w†…J¯“}^»ÔAPè*¿Ö [è3vÙ$>ÏÕÒ¶ mÐc,MaX"}(7ühƒž$ÄH̬ÝÜ%\“µM’¥�yýñã ÝÉÒj¬U~uYÒW>4%RYú›”OŒ‹kF;N²�Àw\ó“‹ðþ'¯7¸ä3òáP­üšBß³z \Rôž’†qG: êìp†3,bœË~ØO é«ð2п_^Ôá°Lô… €Hîv)BºX*EÿåÓGôîJšùv!–µGZÿ'–²üÏ—–k9Î{(>ôÂ+.VôâÝp±êäGÈÃãWLÂô)z7¥¶8Å„ã&¯óTÕLÕ šRoÉšo͵jbÃyŽšt‰¼³¥ÃƒIƒ•ÎÚvvžFZ€ñ‚ˉLœH[ <šŽ�$:?€Æm]Òx(rJœ¨LÆ1+ͦáÉ€†í‚V Œãnì!°ò½f¸ÒÏÑ[;¹„ýR©õæ™öÜDâäq]„m§†¶‡|�€L:ܪy$)@“ª[^†�§¹Îû´Ð«kˆ¤3R ‘]Rÿ*‡˜€… ð�ÄG¯Ëù#NÜý‹8‡[#l#™«§TçL<†È|…i×ji©kã°Ñ®²…ˆcjU•ô¨•…„ŠCrùí#M&�L»Ãü„åö'O~¸CÌ67 æ¹>ã»g>ndYk?õ‡üÛÄò˜ æR? Öš�ËuhÔo„aÄ<š32L·¯äÙ$Óò@$·uIȃϮ!@ÃêKa¾§Ö¬wÚ!MÎ� *ÿУР7�̉£ Åk°QÏÍê ,«ouS;£z…ºó?·žo™D>»Ó.rÉKâý®÷5ßé 7ÁN {}Qs¾!=þ:õäº-zQ£XPß:¼·ˆ¼4Öû‹0EU3%Òte8P1!…M5ß§\у¯بŠ}�ÅVzð¶ˆg|sĈ( EIæSòó…™Þ •½R×z÷/!ô;ÿ£iÈâ¯6!OJ¾o¬¿Ï¸Üì!l\¨.ÊaCQR�‡Xâ+‘Ò…ëPŸ®×J=$Íçáùú+âáû ;ÙykÍmvû ø×x ßç@›c£\íoíQÜ©9›_ïÞ†¡öNY‹XR&r¶“¯#½‰Uot„qR~—~¹Æé«æ—jÚ?VÔåѬ• ‚=ÿi=Ü�á1Æ §—'^1íäŠ'ß):á0(DiÕ”p˜l‡Þ!ÁânË-Èm‡�–g,ß2G0ýî½”Y¬ŽEv?E±S Åìx„Tô"�› 9UL×ݱh¼>‘[ÞP„‰l–øBnx_j×îÇ—š·/ƒ|4j�Zb©È+®É[ÏoÅaðR>¿ÙTCT6nZ”¸Aü�¥T�Ž«ãÿ€Ðöa$û2Ö‘lcIm1¢X³VðͧÖòA&fxÉÜ€j¨wµË\£9K\ƒŠµ„`²úHB f>‘‹Cƒ¬à!ÁRþavr{eíÞî:­2dÅ~ð÷oH¯PO$]E#i)âq·`¾,ÅI¸È}BUÍë±§fgè&z*Ýo: {ÑIÚ_Ó(´ÐU´˜œ}mO¿9ä´þ ËKŸý1U6Ǿäó‚Óðiß{ƒ:§³Ú¦�‘½)ÃÙùQà/¸sû(¬ê~CN®µi//5•u=ð&]F±Sj�/I®ì¥wl1•x̘-b]Wq¢b›ÂK%Îã½×‘æ c¹�±ƒx ÷’Y#è]ä;ÜtIåB£úZ‰‡;«7cô³>c»Q˜w(Èjð¹1RéÛ;Xø‡j¬Þ§U\ Þ;ùX),N t¯v¦ ü^ÐÕ{vïæu×[‡#Q=éÄzÂo«§VfîÙÌ—ÌGØzåìyå©×‚½_;døÌ>±ãç§dL³í k[Ùæ­V˂Φ}Æû¡‚=†·JT0ÑLNR‹^"JÃmA4L% 1)æ•0ìç’¡÷fü9>34Ê_2åרßÀ�›HÿJÔsÆé0[ U^|K¡6{{ômÖ±Y8�¤&ày@‹%±AAýe6Ñ]GÆ-§Y²ŠÍ@éá++SR=vô«tõ„Òˆ0?ªk…xánC³¼‚h¤�¿)_ªòÒAüáoœ±O#˜Ìë³5üÇÖ’��ÚÏwE©E²�gO%S½ÁHüdÉ”«žQ¯rV+GøóHÇv•�uΩ 3~b�–¤8©ê[æ}Ïeíú»y×+Øéç|ê‹¡úÎ|>Ñ.Žö?Îü‡e*Ú&M5ôHécßk?Þ×=ŽÖ^sÜ®Øh £^ BÄÕ&P-8à·^O ~íú÷–²_Ïðú;¢OðaÜçæô·$³7ïbCìeà C’Ì›º›‚Ñgtd_¦„¯hIÖdYf/@Ñ­o 5ö®¦Û:¸ Ô :ü–î¬Cetpð©¥i")Y$YÜÔ8”C\…mK?D�½z«9¡´jbx”M¶àÓ|îj)J'zÙÏ�f÷*‘ýýùuÓñœþ ÆR>?JmˆšÑúËCr6Ì—=Òxg96ã .¨ ¶Eb§â¶¹…*¯1ЯLÎùSvŠ÷^ˆ4åðîˆîÞ=¶îù�‹t'ˆ¾ \ma,ïñ4–Û £k;ƒ„ë-Òeìnß^2”ÇÕ=YRÖÏBÄ £ä¦b�³úz œŽÒÖŠþçr'$ðÛçLáï›)°ªÛT6¢²»JŒ4ÓÇÓì|äºñ¾×¥7ìL4‡ºŠãõ± }/Ƽ÷0›ôD×Ú(—”i/áÛˆÕðãœHßÁ¬JrÆEäœcÌ/‹›Ó¯(æ»;ä<7@‰nPL Û=Ä!߉Óh¾×ó�x|H‡¢V¢éhú5cÏõ½+<Í-ùç¦j2±—=YÈŠ+‰Ì­®„ˆ/Ä/5œü÷ìeŸçøË #ÜÖà铺öQ�j‰{m­ñSŒl JLˆ½0[’¡U¬^’"úr&æÍÝ’Â3ú„H(rgŠäf‘´U-z'Û¡Ô8A�ˆ�ä¹Ö¦“i¬•S çªíƾй¼¥¡Ërnõ]VªUZà:š–߇ݧå<ÅPMGD#wP�IF¬�›øÇD˜ÁÉÎ=ƒP’¡Þë,Î#¥¥µÆÄ"�¶ÕÞn¾Ár\Ñ<¹%ë„ [‡înP¦—Qïð•â§Nja’Õ"d?޲¬û,¨7ärT‹Ã¨üIÀ8¿±Y½Oïkj‹*‚x&ÉíCˆ°AEj×T ÔÔ%†l ΕÞÔéa…ص.R؄᫷.�ÆC²aÙ‚ ä§iš[Òýæ¶Þ§�ïPªat¿¨»�JŒ´Ý¡´wdí‡Mg•r[Ó un/­.Í^ŒLq =t¯'x[ù¿âÍìöú3û:à «tYzÇù:b�(Á¯õWUnmKCT�3ЉýÚD!ÝF5 ºz´æ) î;îÊW.‡”×´BgåS%¿ï=)½6?ßuÏõß C'/4�¹:%šzf^=½�ë2W4œuä‡hg´Ë �kÙ®˜Œ \þ¦Q¶ªÙ{�ã‰Ü�{^ií�c¢ˆJ”™¤Ü6¡òº è‰_¿–²_Úð4ÊmAx[ÙS�‹¥³ÈR8å„{„‡>ÆËCX Œœòé}ö‚öþ±õ=éÆ#Ü•º÷�n-À¿”Ö&Áj”Yc;w�¶•�³úÁf‰ÜG(´%ÝVìÚ4j2¯ˆÈ©ÏÀ€ÿ –.²y¯Ah¹[–®°ÇÚ…8$—¡ò<ȧäAÊîá� èèÇcùUÁóbD£Dö±ØNýèéº\ËÎZcˆº¿Õ /†·e¹ŽQ›……YÌjµ£P;+ó“=#eìÞŠ¾ÞãöþŒÃ£¬µŒ‡ 0`®ŽrÕ»áUèJëñ›»úàH^D¶+[áŽâÂed?úNTÞíT) Ç�¦Æ=Çs&ÚÅ!®£c~¤u£=Û=ùÓ´ �§"*ºå±ÒA\=¨Ýñ Š¼m‡*…v¥Ü-˜ !á¢}ç±ÒIú¦ê2"7Ö�ÚŠ¶`ÿÈœ§‚€‚-«‡?ß?à|[¼s[*Ø·¸8mk»tãÊ�„!ÝÖQåcÀ½Œ®¥±Äó7'©*tÁ¯ð•íÏSá&OZrb �¬°ýùÜ~b¨] G_öÞ—O|eб‚,Z¹uÂW‰%‘,UœôØ^Ÿ°‡Ñí$Ô”7Zn¸â�Ê•À‚öUIþ�`Jê\V¸¥Ö¢ÕðK ´ù&zÚ—íg¸V(9ÂYø‹ ¹®Õ×( “±ë:5¤ÎF2wotmßÐxTn,-ápXu†,—ÉKcØ ?±õ½„"5Ã6²ä`âEÃD¤ëÀÐYm©£ø„XO2�ÇÎÚ-¯ÝÕe½ ùÄlqÚ`Ü1`ýÂ÷+¯‚sÔ‘œ¦~µ?Ë)~•#˜&·¾gcÅ~~uZæ™­ƒ"ú*��ûxNNó9a'e¢HºØ›jÚ “vùB#8_º7JIÄ>ÒîÕk"f¾>@yh$oþ³¤±ø.Gæ¯̱‚ÑÜNaXE*gzKÉ]zç±ú²_§}›ž'<{CoA…ÜwÓ,yl—‘?ƒ I2æõíô¥ê3~M*¤-ºo_쨼A¸—üb$x„„ñÉbvË® MD|âžãqò› äõ‹­ÿz§‹µï'hû§g'é•﵉ÞánŸíá™Ö$éMо‰Ù‡ô×xdŽ·n®4ä�| �ïÈz_ÅçÖ„]Žy¡xžOýP§ ‚“øÅW+á43$½f{Ý.tÅk]ÎÓß`Meç'³ûò‹Áš¸ÁXµ˜,“/Æþé }ƒ§?$ŸÄË×6DOÕÐ4ÌÝÛø÷¼r#Z¹™5eb” MaÊU±ƒ’Ýièò1·�Xê%çøÞúøš1 ¢1Amœ9±ãVNÞ{Ï%ïÊ�/¿´Â$ Â+ ]5Ǫ5œµ«X¤9dC¨ZPÖ’ÄE�ª««ùÃ'5:YXç‡=ß´‚žm7HuODrÑdH§à²É鹕£Ü!Tü‰i,á�ÒaBý_èC4[f6^RwE5¤ßQmˆÔõ1SX‚øLdTz¬ÔÜz�Ùj\a“ÌYRyøw¨\³nvú)’")ºÉƒ w$ ÛJâǹ°;Z³ú Ü]€ ŒÌ£ e íÎÉn>ôP匫XúÐt;µ(-“–×u|-pñ Òq²©¤aÍ^y�vš¶gßtj휟ÔÄ´ó|öð¬ÇfÀ¦Ò…Zº 3ìË-žó¦× ‚G º­OÎ`o‘\]ƒ§ µ€îb ßµ{êdòž¤Äç¨2éý“à'°¦ Ÿæ¹IpµÕS �åó¦2F,*�ž/€ñ]TR}Ì5(¾S5ž[¹áóÏ›³†à[þU¡ó�²xܧ’²²ict™ôçX›™Uå¯ûÊžÅlÉ~ ä¶/ÝJßì¿ü”x²ÎpÌÚ†] M¯¼´·òàØ:f˜ƒvîÆK'äG‹ŒF€R{qNýüôT.é`ì%íñ=�wÀÕp-nñ4à¬ï·Ôo‡{L2ihUžÀ…&ù)XZ™(û¾·¿Ê½¿ã•£sÜR ‹))—’BA>…ªÁVñ½@~P—Y>Q®Á¶"‘²žØ6Y“HiAØq|hÔñyü¬ÓqbËàÍþÐSû– ”¹ÇýÈÌä˜-úyaH© 2±OϨüO ÐiÆÂE©i‚coçŸMÑ µuיּÀ�heÝ?Ké‘Téä3Þú›[Rú;ÏAˆ"§ ‡ýÚÜ ¼…Ò·ie±^ý§DÉCÜSœÄ\†…}w—î~®WÜ0 å·ÆŒ8p9ûlH6ڊ•ìÊ~Öš¶ãx–v�?ôëÐ:Lj÷‹W›M-ž4�Üñ¯ö¯çÚ.‚ä ¾'özÊ\i¾¦®ó$B h_yÄ/÷x:¯ÑfA¸—ƒ~Õf ‰};¾Q +Û, Ü^1„ ñ�”8J8õZ‘³\ˆŒLâDvñnç°T¤¥ØYŒ§E/WîSÂÞÙíNir}HœÇK‚VV}Buå–ji£4ë«ú�¢Ž�—ÙXbéà9\Ûå³Ñ’ù`d¹lÒ%¹B,|è²Í÷qdÚÆ²F›ÞÕËmdËlmkíÄ ú¥ûÞ¶šx$”Íâ×XßàœJ©P‰mÑ�Ó0ÖAËfø:Ý Ë�XÄÖ¤ÞåÛ- OB8§9 ”ƒ¸T6ÑDí2Ê0 c‡âàxž²vA EÔUCCÁ{:µv×!OQÑ…ù·@�%ýhoìÏÊ5ÛD‘@$·dŸjëéãÃ%¦÷ú�B´“]¡/±Ô)„] ,·Ù­Ózm»%2U»ê7“RMÜ-Ëž˜ü&:½/lôZâQÓŽw 7x^Êí@-à5å¸h§ í¾g8¾¤ÁjÁd—ÚÛž�� 4¿­§»%R~”À‰cLv³‡7å½lUªÇU&]31gˆywˆ cm¸ôš�­a¡Nº\«þ…¬™S»dæ3>‚•|Ç%t2‰âhMÔ:‚·b@·}ç¾i3ÃëÈT*¢yÆAŽL÷ß�Rïò<Û2a§º@@C½» iÏüÈ—  oŸ6:&Z¹'G›Hp'¹i‘ê†'[§<1úB +&D&Ò[²ê}·V§Î«e–äÌ:lm‡6ÉïºÔKèl€›4øä¬‚õQ4\‘«í–ƒÀ(„OÅšÝr¼�gÉ:§ÒøY¾À¿6>Û`ø¼»óW [ÿ­Ï]ÄÆ&OW'"i6S$•ßZ…kž£P œ¾å½µšÞ5¯¬•²…‹PÂQÏÅÈ`�¾'r¦–ì âÌ‹Nô4ULg^Vâa8Û�~áã¥eÍÏ»*.E}ÐQ/5Á;Q„oc«3[*p|tpÔD™ãÌ›:�ªAÅŽSM]OÝ‘½Œ9!n††íÅ |Ö㕲ïÊ–£ µC©¦¬à§œW¾Íæ:œ[uߦÆkË’tû.A$|�ÔŠ¯¢Ó2…˜»ºqŽÓ2A4Û?ΆÐE4–¡=VÁš¢R­ì=[~lßšvWÎ6Ò¬WÊÑÿDfÈê8¤DÏ©êhC-g\£ÉÈ~êï4à’’¯gEÔbZ/6?˜Ô5�­žó|…ó³í–p X»ýEµÎØ j\sÊ|÷Þk›øÅ�Æ—H—³`9öÝyyCÚ[©g/ŠË¡ijè~46úé¼Zåu¼à˜›o“ṎNåA(ßûþç$ À\Û±mÛ¶mÛ¶mÛ¶mÛ¶mÛö7ž÷¿E’JU¶½îŹu»�Ð';ÂÐd‚RѯgÒë1¼‹,ÝD1\¬²åz´�ò/. I�ï0Á+¬Å7Í^EU�U2 ÿðÜ0>“Íe·¨›ÜáŽ!éÉ�P¯•‰RþCd³AÆÂiVie S?È7.Ç/: �y™õq?àM$‡j xBÜ­ ¢t‹^êÛè’gèJAeãÏoÛ{õi�ëúiö�”ÖšYþóÃðË1ð-_“ølN·›C!Šú©Bã鵞Xx·æâ=PtÜù8#ò¡;EÄ#0û¬ v<Å�oç“î"}Ô�øä—uãð4 DzTî Kó¯€z°›®DÄ‹Ðx8¦�¯ÿfj¼M()ººL~ÞÊ¢9n»0»”þtY@ºÃ¥Ý]0¬›öŸsÓ±]BlêÝñ!åmQlf{fÜ?QSl–#ä �ÜDϤDz"F:û6´µ KšÒ”Â@¯;Aü‚uJr’˜¶Æ4ìoÕ×YÒBvÅo´ë ê´ß¾Ï2±ÖõC¼„ œ‰bs¿ÅßÑP®í¬SoÅ ÎNU¡o‡ /õçÓ‚8jÍì%¡aàq¤Ðn‹�Dž¾Ÿ ÙÎU/´ï/Åå¯�ÆÃ$½C7øÝy…$ô’¹g0–qÿ�c9 C•jôˆD€³äÁM�áuF$ÒùvbˆcvàÁ{á±Û¢¢½5ë× ­‹žÍÁOZÅþOøȼ½š ˜¢KqSgþ3ø8ƒýµÞ+/QDkÌP3~ÙxQ•$ÖI¦–2B�h¤üÁÙníïe5^¤‚Y’Ù“Æ)XÐMÜ_€mí…ønL‡î/r G±÷cÎ<ì�ögOE7I,¦Õžp` ‡,•ñG¨Ú6m ÉÔ J‹§Vâ|Ò+7Î9Gí¡eìb]Ko÷N ÚG«€‡PØGGáÛ®7z%¶¾¸[Îg•~ƒ�€Žõ{NÌU/¨¨& fÝàñ>e¹;cl&‰}ôÞ£yãŽBÔÂQùAàÉ^?¨œ³¦Ð4×pm±=ºAOÊïüF©�GïÊiD�¤�Ê®¿·aPÎÃ�©v«ŒrõUž»]•Ä0Ü4k*5¥ÈÏJM2Y  �²®½Pò׳r �ó-ÑÛbãí{G&—"–5¯µ¶l×Ë@)ÔüG¨g7£$ÏD­*µ˜ì‘®ŽÈÝ ð—ck=?kòCã‘M&ؘàÖ¾ @À¾ foöV›ivÂßœ¤‡y� ðçK¼ì‡É#…�¡OT´%¡ZSYÍã"±DnÄ#k,º½ ¨ì�DÚ¢»9»½X>¸šË£¼)u£Ð}Vžëä��qóÚ60ô€òÂmH­?Wªb&uP¹aµz-núó4Â�<#ŒªQ¶f§�ß5²Ú€Ð.¾Çwî»�Ó£y*@îtUH& îà5,Ù•,ro>8Æ0ÕÕÜ©ˆIÞÊþ´¬�Èsb‚Ï<º‚ndL™næï¨žÄ¨3úæ�9g 2byÔ¢+ÝëÇzû,j¿k‘ªß>ŸÃÓþ�Küø¯™˜R ø ¨%óµ—ñÁõÑ6õQŠ0š§þHóðÛ¨¨K¯\a6©+dOH*ê÷«°!Ä¿ˆÚ¢½ï}�‰®ü¯WW¬k9ŸqÖ,õ3QØéê9ŒEÓá~õ±±_{™”¸ã%pVc|œÔcž½­_�CÀûÂÓ=¦�ˆè¿Ñãªþ $ .Èd8h¬f™¿ûOú+b;§¥À,˜y¸öåøQò ñš6ñ·îª5è"ÒqTâCäñÔ«°G` ëŸÿÅPú*j±Iô‹5¸¥¿?M‹zŸ¦�ò,iî •Ê“…KžžÝÎA `‹O ¾Üu-’8ÇžÙöK·»KxDN Ô ´«Á4ÂPb^C´·UQ‡i,‚yJÐ.¶é0_{´œQ.S¤®hùšË¶Žôj½˜ƒØ>è“[@å_äYè�éðoú‘ºüy&Mìd²“Aot:à�c­,MxK·’­*rðj[<ÿ}{úuGkŒykIÖbèÖW÷ä ŒîèÞºpù­ä‰·x&upÐ’RRÁçM­r ¿Æ@ÖÖç$ÐO±,W¯.ÀÝ]kB7v¯à‚ˆ÷ú s¼ åŽÃ ¤dš—&Κ^ëg7Òæq,—¹âõ2cÍ¿˜|Êo©ÞÁXo1Éjpwùëуu²B*¶ 7½8a¾�Kf¦zôw]صÐç�àg©:ápñ t×¹gzöN‡…ã }Ìix+„(Z{[:Pn\¸©Ò´TbiñÊ?†ý%Ñç-‘á-jU5�gž.1Ü;HÜÖ²�xÖ�ÎZÍp¦Q+Þ'ðéÒÔŒ¨rÓ×”¨$'YbB×ÕmÎUÇî4A5p '=ëáoƒéÙÈìÒåÊ—©‹óÈÀ"ì<×™˜Ž#´XÂÏ”Z”l8÷À’F,²@ö«Ý±vÿÙOê f.ž×7MMyR›]œÕÎÅžvòê ß9è‘”¾¦ˆÄ9dú8´(×. “ÈÏê²x›ùò…a‡ƒúÅt‡ce`²Ç•Ç{(²þˆ¨|…án,¥œYÜ{ωOS˜@/‰H~¸Šæ G´ WÏ™t²1aÜå+O·Î·pŒäû¢ÕÕá‡i›ß?Šmkƒùù¸cëɨ�Ì/j>Xú!ÛcV›,cög·›Š¢®Ï=>ø:SšG¦ý>/ÂÂ×*užƒªé:€I„àO¼jÀÁMoM4‘¾È@äƒV‰ìÛ‚¾^òêªeé¤la˜Üš¿§¤úF½ÔVÉs¡x¡k†‹?£îe†˜�8÷§ôá ;Æ­Q´89û�šÚ¤î»Är«9L©0 ¥~S³ŽÑôbÙtïT›^U_ ²w!*@ßá]À�N�íˆ�šx0&¬{&ËËÑó•²X™G" Õ"y2vöh�¯ÞRKÖ×@Ýáè[Ho®Ÿº÷-öf¯h€¸®Ào¤�’âäoâ%¡b�˜ÏÖÂÞ@꽞%y/óNc¾-KiN؃6™†jœ­¸š.fDîlQÕü¯H,k¿æ˜mB•‡W–)—¼ë‹8 YK-8hr4ð=X,úÉ5jÎ a©‡çÆa•—Þß„¡«UAiaïÔ€~±J¤™Aå¦À%î9²Ú-'|mðêžÆÃ—úl•Y» 4AÃêÊNõõášó�ã#ËÔy3`YÝ~Æj&˜Äœ3߈ß.(Sü°þ•VAÂ,ŠI= E+EÈü¼Ÿ¤x*ôZÄ ÕSðÓ̾;› )*¿�^\Õ— –j|nüy}‡i*9&O�h†TÈׄHHobú¡¼NoÆŸü‚†ð’ßé³a|å‡_ñI…IMÖÏ@.Ò«~Å XŸR�“Üó�n¹zyœ3 #Û5´Eš´|£äk”`1*N½Âoù‹Ã©â»Ýu‡i�F”¿yõ`íé�øêÑü¸©´â Óq/ýŒ»ùUz$°e}}s2S=�ðpmfª\Úq¶’°ÌêAxWݦø¬¾ïF�‰ÜÓžf¦ˆ€´gù‚ýç€Rú{µY$7ñ¬äNf4œxS5'& ³Àü•»*äNŽÐñ¼†€2Ù9l­c]G¢Ç ﲑqcÂHÔªL¥ƒ›Nb‹:Hžwˆ©kC­­5§±>"ÞÝ’¸Ô"‰«2‘S^#sÁ¾vÞ½6ÈT{SñX²¡‰*NÉð €?àçʱjàCÞÎ\Ëù2Ä“2,<^[ÜC•ɲv"8!Jåq¶àÅsân³’:ÔOÍn¶BhÅKãÀO|=«¿€^’ßoÌ/Ñ›±Î—œ nh¡á\ªSs«Mz~P:Ç‹cå…of¦+ŽéW ª‰DÿÙ=¬b–¥“‘¼uËF=š(‹è¯}ªŠ‹S·|çøŒá@Uk¦ÍáxÊ|;'Ä%ýÀùÂûÔLgçÜš­Õt‘h”¥ Ú걋3±KõÆåV a/}çÅeßþW¨²ÄóÞˆ½ø»TIÉv¤ƒ EËÓéÅÔƒÛ ü…ŸÉ­L½“Ë�È~i®K(ÁÇ4�5Õw椹`ù(ªD*IµUæƒópeê‚ßæ^_�_ ¯Ü_F#y[þâ€ÅLúpÇÀ]Ä[±'�Ul;^Š'*1qkj=6¿�ø�mâÐÕtóÓrð]Í@µlW1©øÈ8�ÞóÆ^Ía(©)KŠÑ77â*Ší£Tí.sþ‡þDçU³„�ã$4€øù¬nzè/|Éü³°×&�×ÊwÞ³åzi:};5rŽ“±fÜmÖ&—¥öÙ²³¯4àâøZ*Îl+FöfÄõY-Ýl~ÉÈ~ÖVw“« ‹“&xšs ¨)œVÐN‘£b¾;E#Xöælud Ê“±ç·Ì£ZkÆz #´•mT�k„mà NsñœeC€Ÿ£ô�í\TE6›­uéòë�ߪQavâ°€CUú¾o"3Î37×bP¾')L%ÂK.Neg'öLYÕ#Ç+þòÂú�±,ÆKÈ}EÖ×u÷þî7½ÑT ôÕÓÕH‰« "wšý|ÙÒˆ'Ž«"¢-0Žtve�]ÜiPfQ«ŽÉdf‡@ g„ðÿ¦<ëh327ôš‡\Í„j Qù¾×g¯^˜dɱ'ô½ËÅšwtÃÉ2¤Û�¤d±!ýv5Û †;2ñ=ÔÁ¤‡# ;’æH÷x6‡ÏÒ¯�G»Ø¹£ë/÷, '­¼ŠéFòŠÑ�³ÕMj{׎�í'ª{ùe!UÖÍ»Âïpz¹ÿ5AãyK¸AZŸN÷kJèX‘x)¼ùb‰}Ÿ\†Ÿ;””+R+¹Û ƒÓØŽ“É Ë/šÎ æs¬Š"‹Ì«±w×ùÕËÖPŠÇ‰u¾Ê´D.ªžß±ãæ-OÓÃ2uF°û65u|\q^hú"̳$¿óªIQ·½4…eOÅ2ï"œðÉÏ™ÒÇìÏö1zIAø[•ã "N7zC§%Â.‚Æq†3"U¢#(_0†OÙÅ´•÷V�×. ”/i”q¦ôîXP ÁLê!Ó‘$†kFf|מƒ°@5Ö·gDÔ;éí+ËSÉî°ñ.D-¾0™w„m9dí~í±­õH5¦rºýõW†d¨©—qGHÅ,vÚ>¯½–k“[t8C$ˆ³“µp¿Cò%&c51‹š§=U;R𕍙½£r8&B5êzû•'–Ï™ñÚ{HÁ#D\RjvÇ8œKƨŒ¤;é°”µIÈXsmо Oa1°…'¡m83±ÕM‹‹™x4ÒòƒDwóš%«? ±?>sif«"]î�°äSŠäkVïÔÇ™¡Ì�Eás‡ìÏÙ—e äTŸÿìIÞšd.ë?ã6Öât0fÙÉÐ…uáA,)fÉ£›*Ì‹8¸Ån��àT "ÒäyP¢ï/#É–“‚É¥‰¼Ì"”Êã¥Ñ»­Nê­HŸ²¡a‡–r{Æ_zí(y<âPmýÓ_ °l&ÙUÙ*âùAý�0ˆ÷Õ_$‹Ä7¯s´UT˸Cá±<4,Ÿª»óz•2°p¼oÖ”Ž�ÑG¤q„�¾¾ë¢œ¡T n2kžñÔ>Þ\Û¸|ÿuA;æ�u Ë¥óÔÐF¶|W®ž¦ÒmŸ·Š[¶¼¥Ûr�ÁOM†‘ÅÞA vÒ †”„S»‰F„?üä¦ãÒ¸V±ßÏ÷AHHgÙ1U¤ÐXC°|…)Z"I4iâv‘ÖÒÒYHÃmLkW»VÔÌ B ]U,9ø1%gt “~Ò©¨ÁoÎ�bPB`ÓU*Kà tñÕŽÁÏ©ÞBN (ˆÂ™8ýä=ã‘4hÔ`ݦ†ËëŠ�³ʤ$ uNšr‹¾æÖu£$WÆa®H»"êäÅüiä%Â>2Êbëâ 0Yà~qQ_¿&òî†ÒœŸáÚN2-…2ˆ®¯�O•Áp¡å}›(cMÖí~ÅÎëDÀÒ §mò "ÖK z»uÊsÀ:i¾QUŽ¡këåKP«ñå(À>@vº–úšðÙñ•ÝÞÅaÄ? ÕíÙõ ˜�¶J^pýëÌì®bÚ)DwŽið*÷È4ÄI%½È×ö„Hmh”ÖË ´v°_õ´ZÇB\¡.Æ›bçÁ†s¤[±%중§¸æŽ½[–yã2&ë i3I²ÍÆ"¥PU‡€ö—q79À¬IŸºŠë‹ªI¡8Ž4å&ÎÏnÎû~ƒý/¢þ’_#·³…glr¨ápúõë˱DaÂ#€Fwfz‘x*Üu°sk‡0ók‡ç<#oÜÎp»3�Q¨¦t/ëç†h4Q1Åš“ìE&"þAþÃ0\ t”e�­>Zw–0Rô7®Õ÷«ý~Û{í0Lj™¹2ûvÅ’uÅܹ É œ’”{š3éÊQ¡/* V Ý»æ W0ܹhKåŠmì÷ŠÊ/’„õ.70&‹ÀѲ™ª!Z•¦Ák…D!õ¬sbófäÕ�ÎxNöüÀ8#pTÓ�Û”TÂs—ƒEýf»tx Ý@RÌ&¤k–úryäTéZÐô-k 9û) ›¡Â]«mViXzÝ€üÀ¬X8°~2‚žžñ&ß4Œ)º³cY/–*²»_¢™;ëÚ‚j ׿mÉ>6€ðÃ6@ó½iðƒJâç[޹á/èžÕq:‘ܧ›ÃN €(e³ë*pð¹ê�¢ p²OÍY�›[QTp8¹¶Z$j%À?ñÓ�Ù×�ß®©Ò?Ó 2´'ŒZ†„š‹ P9¸FÌL¡/î0ÍíuÄñv¾Ÿ00Þs©+Ž{©à¥“Eé.óÙ€ úY¦œF�¹uÌ_FCåU}èþŽuѨX¨É0M9ÎV$W «±Üõ\f™ 6ûm:™* ØÅt‘P$;Ø kOhâ캌g߸ZØò‹ËõŸñ?) ¾ú¤Ysš7"áž�Ë ×vqé {¦_S×´ã¢5J1Lå'µ ý+Òï:éwR¢Ú»ÎƒH,£ÖöÔ?üŠ{ðØ®NÞý¥¬Ä°nÆû¨Ð®Güˆ}PîZõ¥•¯ÇÕÔ°zb*ÒV6¡GXƒ`xB“·Ú‡zÇ î„ô�ÃX`õ«U‰3$^´ ï�qd0+»„I�ð–¥â�Êg�¼:¯yAÒO’a£mz©þ,2‘Ëê‹�„æ25 šÜ„Ídܯú}å[XÃ…›Ov[ô;œŽ.•.ñ!ššYÊ_ëJFÈ,¡lwýjÉÐÉúÔ–Ò_ÈìgY%Nâ; b¶âX=œmª#z�¡[ýX8ÞûŸ©à�CÔLf vëíq‰V{dÚuʸý,>ì&¢XF÷gHCg¹:¦° ÕAl}A«8„îia¡J™Û½ÀCãO²],©=iרÂPй7™¢Ú¾µGÞÜFè<ê¹$š.Å–Õom²Õ�YõßÜUY„ñE�ªC¹ô½Ií]%°Bo(R²–XòC4ö]K’ÄÝ98aÀdCe‡³÷çhm ë�s¹o3q;¡¯n !ëEÖ?Ĥkµ€Ü,�w-ŒŸA[ETïbðcm¦xú`¬H´¬‘Ù3¿êTs™83ÔA9ðŽ€ÖgÖ˜V ÝÌÜ|CIÌð.—9ò¦U_i�óŽŠDåoµç\4%^_ÔdÛüÓqéÏÙb`‹‚]|ì|:»šFšYÈtœô—á!KèqŽœÚ‹\!‘Ù-s’zÈaLJ6föN¨–À-†×UÌ1%á·©aРP1ÊåÚ-†ËtŒp}êd 55Žã®¢õ£¦œ’¯:çT÷i� µžÍ Žáë˜0·ÿ:1¢áì ²÷2v5Oi%{´œÜ5Bë´wÑž�³2Ÿ—Æ�ÐàHH~zÔ-€®ÙI2¡ÔÌMÃÜ’Ïö”A6óq—™3±1n·ÐIäã }o¿áÜÕlå'.ÉÐEىùޤ7–E_ÝH_-à¹ñ{DIGרt[¤  ’ÛLå7?E9À±šùÙíc„¨y˜¸~Èò© Ï8wlåeŠUo б*LËz(ŸþØéT«�ëz`Ùóö.p�"A#wRS-ܵeNT0Ì@—¸pÇJ3§¾4ÓW˽ Ö�nk…ã©UÛõ çfL§|›O¶OÏVH_Qi6r™l��N$ZíÌ‚$å xsÚRî�üI&šó·n¢rÄ|½‚÷í9ýÿ�W“’j­ÌuZ(�c(Å áy 00‚à« |²ì8ðL½Åå˜=öJsq°±`QÛ&ùaƤi¥~ø7M¯"x?KGûëWJߦIfK,›sÙ"'(NÞ}JqyÜ ’TÔ”ò]޳é}âóë0Å+Ñ¥þÈDÁÑÌ/ÐaSõU6i\íl® –ºz?ÜvÀ÷cQ”Ñɵ3Øúþ¢!„mK™N|Ð ¨&Á�h ÌËQ ûf]‡Œ$¸ÕäägÆö ô¡C�{â_Dqñkžz{�ЇVþ¯Öd�ÆÅN›õþˆ�âµ>‡4;/WÖˆ“§l0_¢šD¨A­Yïðêj¨!†� Œú,4IŒ½bq�±…Ýx‹tEl‚ÿÕn-¨_O<ÈžÀŸ`ºêBxñó*¡mT±¢.BÙ¹ò¥Ïá@£ÒšJŽFpåªsAÜ@ádÕRp@V²î«�½r\C\Eou-mŸ]3�ûÞh ^«ÙÖ3—öW.ÆŸ’uõ¬ŠÛZÎû¾Šk<ŠÝ ‚T¦ŠÌÀÄE£hOu½Zð€Ãz€�_Ò’–½Þä‘HŒJ+ïþ̒Ͱ +¼€�-ûòæÑu>Å”,™×@ T¹[Ñ;ã€Øy³Ð�Tø€çÕMûìêKy0¢– Ç‘ È‘7]ÊÎÒ·åšnl: �«ž½˜q¥R¡ ÜÏ;^ïZ2€p l³ð³½Ÿl*ö¤Ñ´+ôÑ¡ØMï¢jÈóUóf±‘�a«ôÖÔÑl;®gy·YÿÆk½tpxá¢Ú)�ÛŠÇØ-G•2qf¼©4‰¨ ªùÐqµìèqe_ù§ˆ5$œY�é,ªç+Ý 9�Û€´�Òärâ,¡cD–ºÉÇCí�¶u�ü^SÐ:‰_IÀ ì›àF¦£aHÓÓDá¿°XXö[`ý—Vó“»xصmTI<Oq¼ÿÏÔ?΃�ªTs´we³¿Öß_* â-…5'•û¸$–})VBó¼~ªÐ hȱø*ºúfñÿ7›è»1Â¥1ûnÝ2pLŸ}h¨² åXØxŽ…ÿ¿Öì*8µL¤s¤�r á&¥‰ˆ¿ñQŠ'®/×êö=®£ÏýwЪäó&}½pŠt<j=Ë@ïÞh3 ;­™N=êÝwe�¦\Æ×¼f'ê˜Ãw¤Œ¸"Îà ˜¼?­®„]R[7Æo8ù‹¡+ã0L¬È‘Ÿ ä§p- x$„µ: œÅ¨…ê6�þÔ¤‹É/eù‰7ذ)•IÆÆý:vpgþ%ðöÛ¸¸[`öh|Œ·¸ £ÃZ”Îò+g¼Ž,u€ìšrtò(ý½ü°ŽßqÍžÓ…†±J¬©gÀo^Íïç40x,„œùÝEÇÉ0êJO5ža[Yžñþ`ä£ä–F·ÉÄPGR¨¹vû[üR'5Ͳò„Í4}6n±Ø©ñeÕ/°‹Ï¶F±žc¸£g½^Ð%&[ŒÁ4Ç-h&Q;ÏaÏä°D÷E C†[ô­‰Å«£šŽUfPEeU´ŽŠ)Œºš^’Ì:#°拵ÎÕÒ’ëóÕf5 �©ë�”ñÊvjûÁz,rm¼ªÑþ€Yxêb4�çu¨ÙÆl‚øU'-ÞÐj³�$†lx̨!|ú0{"@7�×1?`+Ó:ó³ìAe™.°§ ¬26ý5k\ÙE&{¤­�¿´Nn#´ÑÏ ‹|‡ŽÕôl $maq÷|ü‡)z¥‡ýP zSK;£˜›U�µld[eÿ‚ôPƒ¢Q­Nú¬Ra f&Pxf¥Xèk†fNèºß?×ûÉš$›ì¼ìTr*DÓû�ÿpE9fŽ#ÜëÆWtÝò”D‘ÓÁÞ‚ÂRÓ,³°öCµ¬ï' ["mAΰ¹mý93Z–”ÓÒœ÷ß«ç~-ÐM[Ì‹ÎFc›ÍÅägB‚){úBH´¤õÒºˆž–ÒôÔB\ÆÐ`îçþÊgŠ›Æ—_ÝÞD\ÏèûÀ¥°9Íô¥_ð-—†+Æíåí�2íüߢ‚%8r”xc~pÁÉý+£ÈÚKhÞckΤx'‚Ý/æ�OxL+)5–¨�_K'2}´|Þ\„HÓwíc£ãYÒ‚¿õp˜˜Øþáí7ÛÀax‚Åj$ÚÞî&ƒút‡ywäY6¿èVš‡Fßìbuö·£"²S©œ½ú_05Òzê†%¼2ñH€Ê‰¿á.kŒe°câŽÎž™Íûô•_¥@o¦n÷#ÎT�µuipfÇiˆ– ?$çQÌ(ªôiÖ›æV��¢ µ{¢£¨Üí¿ ú>U@ð³LÉSZwÒ_¯™.]×[È-rmÀp¨aË:JƒøØîC�õÊñ)4Fñ®kò²¹Ôµ=KV ÂÇÞl´1y�µÌ/Ú0µÐ|@pnÍ „&ë/æ^³ë MY¢e±¾Š^-¡GDƒòÚô°Ü„-M%¡ì†úLðPº”½ 2ƒ:Çþ±í¬ˆmì�ýØ‹)…Ù#ÀX’Âæ~ü ‚ øú’Šš»òçCžgLhý”2cb´4`6sÔˆ­qDGÕࢉg6$l·ÁBóëò7E”Æ*åcgÖºXŽ¥º&épŽù¬ü4 *ÞÎ_²òR¦K-¤Ü%ƒ«ä‡ìÆVW(y”ƒT9»Ðm��>·2pzÎel ‰_Yñ»‹g�¬M^ö„5 ˜Àýug&±c;¬ãiíc*ØYe§ Ú‚È7VwU`^Ç ™ú¢ªÐX¼¦‹ºø+dGn™D'æ5¡[SÆm´€îXBho»îÂlí}«üÜîú…€®¿``àáý-C ÿÜ@’CާÁ™õý~»J�;t•‰—œirë1gæÉ�s[T` 'üË&{pTRø3cD*~¼‰ª[¯KÒ’±åØÆfrâ¥ØHl à“cZ’?'‚¯Ñ€B(ªåÙé­áa½|½Ø?âêzÏó[“go�µÔÑ Y݆Óa8-©U9”<½Ä)£évdu• O˜)>(á—,ß´ƒäÏ$³Wº.¯—õÁÇG-ºöÿgùò³e³–¹±š£&^ÅÑuY›[XD0+ñΊ¬—Aúìº%xt;2ƒ•=³ßÈâÙJå*áØ‚Fˆ–&¨M%L¥»û˜A®ƒÔÂÍ6‘Üù÷â?C˜EúH¹{üdàìîü•Kôo”ëÃbÛÅ\úïvQ€3¹†}S“�!�š î[@ËIøºƒûBR2ƒ@’3¹²(§†¬:Åå&ôÏ-ö¹ë¯Í¶1øæMú»>£�ð"†s…ËÆ§ß|^Îð S¦eࡳÖs§˜ù(?K-¾s¨ì°û­ˆÙ­J óò`'g×…o°;9¾FˆG³‡«õ\˜BýWZ0Õ[�R~G—¾Åï íP¥‰Läìkw¥ýø«R˜JÔx8ò‚ÇοÌRºÒ´¡ ž UãÊën-ì½PGçÅœ1i%Â’i0mšÃ›Á*!㛼±…EÉ è&C¬51xgÞvã½í·gE›͘³)ÎêÀ1bã¯K$/.q ØÈÝáì'‚´0ì»·žÀòàëòÖÝæ!)²a*8u"¨õ[H¸i×�›™4O-ÚÐçGÀ¼_sw^Ae¸R8–ŸãÃotdö½ðŸI7Û‘ÜfÛGÓóÇÀdÍܼ ôöïÚ<¸ëqËð»�ƒS9_¨â‰wÉ›«__iŠ�Œo*h»š{ÍXX8㻭ÆX {dlÇ`Øt:ŸõmÒÐRŸ†å·‡õ³%{­‹1™ñ+) KŽQ+‘­òÀ§%X;`lõŸ\ Œå«TËÁµ÷çß y™›@MTOÅhÉ^ÁÆÆÐœ c&º€iŸ_ü‚a9þH¼`,¯Œ¨2[8/éNhÉC?Í?2‚£¼ò¾È@óŠ[Ý;9Ö÷jnX"B¡ˆ~�O¯æµ‚Mã¾ñÔ½€UsÄ›�”ç3ônãe‹ô;Ç™Œ—kð«¿Ž�u¼"+„ÍðlîiR‹užwE¤�~ ¬«Ë�Û£DÞ«¯&¼æ¾Qèõ¤¬ïY4§Z�™rôóh#Lá0kÜ*‹*îÈ÷LÅ+uʹ{cúü?"£Õå&ݶ’JIÛ ¹ }ŠºÔýš‚:NÔ$¡ Ð+÷€›¿³:žì&zSÀ¯dUèdjüäzLEÊ�Ï-e8𗹨gZqùÕðBƒ¸Cª@s6½~ ùµR †mBUÖ¯WqÙ2h‰¬~pÍ1 Ã8Ž *¥‘Ó’ðØö…{…Ø/£[Tj›acâ"7f>”CZ|ŽÒõ{^½�Ì©m_?Ö¥ò;Q|îÁ¥Ä¡³²Å’£=éžÿ,0æ †Yn,²Þó‘MòìÑÜ7ñ~²tmœ@ÛVޱ+>yxÑÀopXM]DïCCîP.O!sNB@<ûÆçÙÓ •um´Øeý€¶ò€Q×tü5¦¥X¶�(´ÀŠqŒz[˜{bΆ#A¦ìX8%10ÚÜ”_N§ ¦œ;xïTPµb�À‰)Yu½&•ØÁ>[µÝ±Ý7ílö!ëýæ�¯Úžï&ËœYl|!—h}ÏŠÒÀ3† å�«ÝMáë´¹À$»É5»cÖÎ7A8Ê1ÞÛ^ü’cD1<'‡'À0ØÍ5úFúmñÍѸhgûôo06½£ãˆÉ°ŒË¢oÆX’Ò¨-ôSˆ—Ç™"'׉p€-Pù¶ k>Œ½M*ét¢�c¶ÐzfŒkŠ5< A.r¯ùÎ]tM >Äæäq“�ãöv?ºo»ô£*‚ã™�±ó¹_òA€ê{îü±}OËñ�“G{%–n×›a³6°õå°>úÈrL�å$ânyœÉ.7Û®?³Šfæó�sU4ÙPéZƒjRnµ‹ŒDEº›½ fÏ4õ£ݫ±ð[QCü·úáu¿Z€Ì¨”FÓãÃ�rö«Á‡×Á!ùV¹¥ñ*­*pÛoÙ‰«Àš‹MÞì6þSØvGοßÉAüéÇÛ»Ç÷�çur“µKUÝ%‚ÃÒÆt<ï ^ÿ ÷>U{¶ÕnÉ™¢Ñ¢“ÕÞMš<×Ã\Û¤(†ø×ù{Æ?Ípg3P`Ø„%¬*ö®%&á�KHiC'/ÚŸ°"K€ÐÉŸÊ)mü±¯%øáø£Á„Åóg)gR5WÑËÿ#úûËlËæv‘‘R–0‹]ò ”K2T`¨6*{ðª½ûN°‘Zg"ë¯gr¡rÍF¾-ñ*EÉ=ÊB‚‰ v¡·gÒ`XLÎ\ËOý bÏ·­ûð»WöŠñö1¡ž¹3ŸÊ»vôoÁR°ñÚ‰}_F«F\ígûh"¸Z8”†ÕÒ:x'¢Œâã¯ÇoŠ)Š1oÅ¿óF­ý"~ –#vça–؇�°3zåO¡&å:ÓòÁ‘A’R9i¥§„Q µÙTääŸù_ ¬çCñ¿Ét6ôqV® µ¦Q¿4Æ]�×ij—(Á¦ïr‘|øËz’¸¯¢ÍÆ·B‹´¹{¦Ï±’¼61žÒüÙk<¤Ö@Óaš\¶ïÂ*ö@é»íkæNà¾#(§EÄjÐô¥¸kS·8Ã„åæ %UƒãÔ‹þ :ÏÁ†Ðqp ZÖ¬ƒú\§;�1T!Jñ@mÊÈ7|¼X–’_¾v¸ÐæÉïö,÷¤ÜROÃ�WæSÇ&R6ñb6YÏ<ÌêÁ0µå­“öÛWånvÆ£P48(¼…TúµZ(ƒ5Ðÿ‡�¶?+q'3p1’fîþ¹Æ•ÑÊ*‰UG^Gð$ër*!ÂúÀ�ª"p äy¤ÀØ…:R­£Ó/kŠD8S»a¿Þ�êfÂf‘ev4&�^<ÎË0ÖÞ2‡—AlaÉýQÛâK%¶cÿ¦§÷E¾�Ú¦;ggHÁÔ:ìgD5¿ì•‘V^à>þ¦ûÒUÜß„­õ ãæå%AÁË3Ç�-e8ÍÂél=±4ŠÛ°zœÏ*Ø=ñÑTÂ)…ô=ÈV¡ïã¿â�Z0ø £�dMŠÝů¡H .Ì:T.µ´üzU:Îë…ÐyQ:n¥@UL àÌsFã ûNñÿµøþ–¬³ÞV]5!§y?€÷¤íp¸.ÑÜYh* MÕýÕx%kt;ƒq2;šE B´ÏcþHA {×}„ðÕuGHd™ÓI:A1«­‘y)„’@Y§HSbndd‚DRø(/W.#úiNò¾öžå}þõô•$Žg‹: Í×ýív�øOùw‡µªu3¤ÝõËöÛï¼­¬ c0õ¸ûômÊÄš:º‰5þq–šcâA”‡Z`Ä›òœ|ãm0ë'ÖïJÏ2âr¹6ã"å$J@›Š Qž�1…/‘—›àÊ0²A@R3úaòËCÔc ýŠT>€ø«ÝŽ—·qÝ#!Œz'˜AuNɳnp¿Œ ˜„úƒàB¥ß-°SJ½cE×£VtÜâlA7ƒÜ KJ ÙgøïN�•ä­¸ ÿ.þùP‰„é2Ùèß·#ž1ž즹ƒ,!„éE«>s—Èk¦ŒP¾ÕÖÝëy×.J¡´·>fáÓñWeÏ—¦3ÒŠH\!<@ ¿¥oD.0ÇÇ ÑTU º™Η«(,áw‡Ç�àKà�rmÄþ´ç7L¥*7nHOP,*Š˜¾­-†nY$iOÊé½—Ì:ÈÅÕ�«×A€.O¦� ¦ßŸYWºsÆ‚ƒ~NöVû�:Üù|ʨÂ1a:³„ >0$G®ß�Gï?£‡²‘YÈöк>ü,5Yš_ ®ÃÐ Ç‹Ü8"½qf4»5¬aî‰iJ¿¬A�¬îl¨Ä»‹y©ò“˜c9iêE}•pºÝQÏÅ,­úó•”Nœ)'ߌÿ1j,s!K÷¨ÞXÓ.wF»¶x7,Ï_¼ Oâ{qÁ[×Ë£3ˆA04FàUE<€~è•uHˆ<ÿ²…„îð� åß~½š¥�:”YKðjg(¦¡Ô-@[¤Ö}–úÏxýKÌç“%EÅLÙèŒ/s’ ! U‹‚B?áÀ`å­ á?ËgÃ>O#Í Ñ˜¨Ô�9‚Y“ÔòÅÇø®ËT(zÛÖ«ö5 Œëvæ;˜Ëúo‰çœXØÎcÿ7'÷â9½|)«ã‚$ðeJ�©rØ,M_ϨÖÇ¢±ÈÏû¸Ñ ~Ôº‰f@¤¦ÙêG÷ “»§ñÔþ$È‹×ëKÔÈßÐm{]¥Î>§pÐ-#ÃÍq;qWNè¸7¹ÖÖÄ1½Ï7Â…ºâEÊ´=EÖÐ\ÏPüWR ñ‚鋇^ÛÛV‡Eœš¼K}|JypT�¶ŒÑ)‹A¥k¿ÀÉKƒC8ÃàÐ|¨-‘l¨Å™¬ 1©jòQ´WLy1߆6’ 'ü\;Sbf1lVlXЃF‹Ýd‚0¶%âb#ªÈÖˆd™"ÜìôùÀT�5";Ù¸Ÿ+‘òwA> 4NQõaB¨'¢çC8}”ë $ …É8Å8N<©2ěΒ»°Eøž/;2ç)ÄÃ{¹1 ÖÏî`«nˆ8Ë]ŒA6?á8WEâ™é³ÂòÝ�[lªòlÁ>$ ÙŲCm4K—Ý`jňq…–°¶´]¼«íd¹œGÈù÷M¥ �#Û«G+‘A)£]´zÅC–3¼(™Í 2CÆv9 ãAø !æòþ¥uEf&ØÜ²Ê—¼�’ê€ÙÄ”":¼dˆCá.ë<`ƒÊ\“ÈéL$÷U+í/ × éAcJC‚‘^<+Ì)÷œpp ë}š KJÁ8­#>K²¤t¨Án¹(�ó„´(u;íÖ;=_Ew)e)5oÔàÅ>… ñ<Éåi›j§ÈðdÚLy ßllª´0>”ÅœåùOi3ä¶Ýoóv�®Áœ‘oºqD´»ÍIR3—‚·Ãðë_=w 6pW<¦å£TæNn¢$nµÞ"ƒ�‘¸F0Š�Úºè?ŠŠ3 Qø?1?írö}uŸ ÛÖt¬’›\*d9b ÷l6Ð}Åœ”G �¿mÖOüû§9[ì9H¡it+ÊPæOz\ø\Jb#®ª‹(Ë2ÞPÕt«¸Ðd¹îØzåCRè3jæ›s»/Ø Œy3T;³Š®;]H9Žàšè#ú�ÞYzf÷ä‡Fª<„dVþ² (½4,nAÉJ?éË×6P?«!ʨJƒ l‘ïÒLO;dðá럯`òó ª6Í6«÷ê Ðó$R:œôÊömÒ—íÆ*<·‚ýgÁ†½Æ®ñb‡QǶrý¸YÈcuQÓå\³MdÚ;õ„,»�ÙõáU\=O“´šš´}B–Y‡ku øQ““6w¿¶‰~è5¶vX3ÿçe)SU¢ šžQî7Šœuúá34l ÈŒ²ÞÝF˜8ßÙ+MuÌo®‡ò•}ÎÏO’Ãwµ€ÒCOdš7°ÅÜ¥ æÞ ŠýéKß�ýQ¯Ç9cRˆ9?�˜îm—cGG6ÕX´(ðä!|Û$DüÚ ¤â¯qô’0Ï“Œ3Ëf àx?:{¬ÔB‹+òqÓ•I.ËMÛ€ˆÉö½©�66œYW=N‘¼Ñ˸[ÌHY-\+§£Â²ÎÄ¥ílµs¥Ñ(!ªúàš"=´–5É#öÑûaË0ë…Äu�íJéõ±X|ä ßåV!÷-ãŒwÿüÑ%6�y*ï}.#£{uš"$Ö¼­©×\X˜�Áóò¤�ˆ+CÒÚ[üA³ƒmWì�¡¢Â䬇•óh£¢¾yús¹:J�Gb±4©KàºjݯÔxPÅ]ÕÐ�6/ Ž ëû†úíüï|棽EàðŸ&ÉĤìIKî è²+T‚£øJÃÄO7Š§è‚¢{(>��O¡˜î$•v*nçÄŸ/ˆw@½¿=мk–Ö­[VÕE`G¡ószW„kvae2·"$Št4×R²‡Š Ê¡~Ì"ÈÁÊ—ï”cÿCõr|h?ª+D˜ÎV¢–¡'«�Õ�¨YŒU ªå¡¢Ô±Ô âŠU÷Î�ô`9SÇAžÜCÛ"ÆSp(îW‡0ð[„Ù0§™Ƈ\FÔâ÷4Ùä8ÈG¤A:õbäù(7¶]”wÀ`Í�=õÍØ÷�!™VLÆIç¦áb�ZŒ (D¢½Ä-:•SÏ\¶è&£-èWÝX(¬èK}ÑlÞIpÇÁ¾è7{Û8`°& bó/s=ÕÊΠB\ª¦ 7P\Ö~_+ÿ“ú·)™ƒÝ®ÝýbWß2ß-ã ð|£æg&ö7�é‚ÏÄñêºh¯�çk!‚ÖVíd|MfšúŽhÜ'p?Dbb„ K¢Ûó>Q7A=ž¸…Ï Ô�k1;eQ¼¿oo&j×Ê÷DÝg gõoõÝ:Öü4|Ôån@yãx¬*ö~¸œ"“N_¬96ñµ&µ¤Ï:mT1Íþ�*ûxØAMókv Át×D‹ôSüÙ¤ñ*A \KçÙ¸Þ«ØÐX­sœ1Úç_¶ $ œU JÿM$Q„ÈùŠ(Z°ê¶Û «¡ªÓ�SUo‡­¿Ùª»Qñ3Þ¯'˜8Ö¿s|=Í‹ž²dK·<‘÷K¹mà¸×m”^ôŠ6Àø>ê_±ÞçÁ0ëî¨5’6‰ùo£ú†yjœç Ò�Ä1,<îG­ Ü hð—óð”¸.bÂ. 7›v¶Ä¾9·Úâ{+±êI]ñîjx{¶‘„RNçÜàÈñ%¯¶Ip@oEí ~÷¨5kK„Ùôžþx0IÍ~\MìÎ'º?7² ÝPù*΄�xõqÆVNPÐñ«¼sŠû2ÃyÍ4’O’Xg�ã^B`Bº•¤¦Hºc endstream endobj 1671 0 obj << /Length1 2885 /Length2 25221 /Length3 0 /Length 26859 /Filter /FlateDecode >> stream xÚ´zeXÕÛö5ÝH#!°‘�fÓÝ�Ò!›†MwJ Hwwƒt‡€tƒ„ Ý�JónϹ÷ê9ÿÏïã£8Ƭ±æšk­ß¨È•TELÁÆ I°�3# � ¯ ¶5²c2Ê8ÙXšX™€@v**1G�‘³%ØNÜÈÄ àr¶¼5q†„:X�@*€Èä1šŒ= g#5{ €Æè/ vrf46r‚˜Avæ–v ZHˆØÞÃÑÒÜÂùW6FÆ_™~E‹2d�L¬ÁnNÖ–#;S€,“@ì!-4`;€1ÈÂÈÆ 6¨�´êª*ª)•·êJª´L�Ī.öö`ÇÿhSUS—bˆ‹(ªI@ )uUµ_ÿª�ì úÍŠjû¯:Ç_á j"jÚJ,Ì¿Ö`¸‚�,•ý—6jˆ2Àoi�P3G°í_4ÎÎö¼ÌÌnnnLæ.NÎL`Gs&{›¿ô©YX:ÜÀŽÖÈOG� è¯Æ¸Ø™BÚélú;Á¯MÈ[š€ìœ@¿‚$Ám!­„Axçÿ ƒ4ÂùWN›¿ÝN Ð?ÊX9ý+¯¤$°5²´sÙÙ™@��œ]œ†q�¿ Ó7 Ä\ÕPø¯Éñeþ+] Y™®�—�‘Û¿wÌÈÎÅÉó�ÞüsÙ&`;'K'g§¿3‚f–6 _ê�~홥Ý_œ‚ˆ¢Œ¤„ª£qKHŸœÁŽÌÿg®­íÀnv^ÿ—7³´35ûÕyS{fu;K�Œø¼!ÊoÎä @�»‰ó¯rMË/šå iƒ�—=Ø`fdãò±4A~ x9¹‚ÎŽ. ¯? ÿD(,\SKgÈ C Ê_ÙeìÌÀž¿iˆ’ÿšþ34TZÈ)5ÛÙxLAf(ÌŠ`gÈ@Ðüÿ9gÿª%ébc£hd ¢ùwKÿígdkiãñOϹh‚~‰¥Q;ÚÙüËfé$ié2U²t6±ø»³ó×±3·YØ™€lœ¬[Ô+ÈüBî Ë_WØ/;ç¿l�Ñ4±¶99Ø�™@�vüK8d~É0+ÊiHÉ*ÒÿŸÙùËMÂÎljig`åà9:y !ÁÊÁðb�̶)Èý¯‰03Ù��!!{g€Øå×®rr˜E~Q#N³èoÄ`û�¸Ìâ¿€Y∠`–ü�XÌR¿+€Yú7b0ËüF�zò¿¤žÂo©§øAê½ýâ†ÔSú� T~#HÕ߈À¬öAV«þ?ÄÊ I£nj rAn‡ßNš¿D†ÖÿÄfôGˆÑèÿ$à�°ÆÿC,¬ ÆFŽ…ÆŽF&�‹ØÌùšã?ôßgçÙXþ¦­AÎÿðçaûÿ¯H«Lþ‡8 bLÀ6�1ü/ÃÎþ‹±µý½ ¤¦@HIÐoÈñ Úš9YüÁA" 3ûÙ³?ÖÑafù[Û/èúG^6H3›ß¿ÂÁ.4  1ÿB„ÿ.Çi—…‡½Èîgù„Œ—Õ²yÖ@Hglþ€¹¶¿! DÜ™Y =ÿ® ñÛý±ˆvûßfH¬½ä5ûdž±³ü‡ýçvAîf{ÈžƒÿØÈÂ~Cvˆp0ä±2¶ùç̰sÿ¶ü3í¯;çoÓ¿xHÿè1 ¤e¿G—²0'�­å?'†âdéþ[2D�“Í?öžRíw‘_Óáìþà ‰pù}n~mµËÿ97,,�Õ¸þ!bÜþ˜'HR÷? ¤�@HJÏß !™ãm�)VPŠ�ጱìK–RLlIòaÔ}úéK¼ûÌöè×ÜŒ ‚÷é¡ Ÿ©¸"ª}Ìyj-[éÉqBˆ«¡Véi˶K2$&rO_1ùâ_*§¤Ä\¨Äw—ñ^D�Lb46 öܸ‰ºV 4³}�•›ŽŠŸEŒƒà>W–$´\©¥#e=XhÑ`•ëé�3@b©-uKýñz!‹:Cn¨�®¦+y¦Há•X[MèWýª!*õu&5˜G󲋋]zJž² åy‘Þu¬“³îÖEåØN)”ľ»�Q“Š´µ=S¨Åà[ûm�. w^B—޳>–Ê~eõ® Æiï=+aÒÚplzÌ÷¶vÄðä<:�÷X¯Fá•|nýg/Ž3ƳÛ`Ë ßÉ2kwÉôC“˜¯;ïILŒ”½�ÒÂ<[g6gUq.êqšwÇï^é@©I¾xÆœ#N̽£1èrX_ERt."™RÂ=xü _�9“Gк¬é@rï5•ÇjøF­ð³$º'S„Ÿ" ˬ:îl�¾¦T¬õUxrøR¸™Îo_¦‹²W×iûPl6L3xvêÌç;ƒg´(µ}®Çüp¹²Â²Y’m‚P_Ax/ž®eÕ­@ÈçœoÖ…„yšÈ¦Cð²·ø4|ôùó8Ÿ~^|þòÁ5 ?âŽ8VÿVîsÔÖ4/E¢ñ†£t’Z9ò¡Ë¹0&Á˜Lÿ5W­£¾ ±!aÞý&ó褂ºð·¶©ð2ìzô7”Q‹#ñÕ‡Ë×PÐ×…vËœ@(M %‚ñÔÔþÐ*Iqˆ•GäJé}Á)Vá«lÁ�ÒjïÙKad#]�GÉKfM„×Ôõ^ õ¦Þ•H²ÊÇÅ 3Qûê@�î‘÷G{ÄÚ¦;Z ë!œ·XfÎÐF…Ø•ÛPŠ„�½y^óiÌE‹\;9;gí_µOTB,oa/:(QÛ÷Åð\¡‘=Ao—„qÈÉfM?=%Ù¤°† 2èiˆEB–¶«×tа~ÊRèZ`T6Ÿ/è{ë.aôíÊ5%¾ÐsD::wÿ¡f<0�š«¶¨Ãæ†TàGiVöc=?vy†QÔµ/EÚÍãmÝJgg–|ÙÌÛsÂrÊÀ‘'3�œc¥:ÚcÇÕg\œÃÜò‘– —‚îÅ&�×P�ò¬R).Ÿ M�[Íà¬êùS4§ñ,¡\;(”¹ZÜ ÞOÈäš:$`FttHóD55I-½}ÄÇ¢žÃŸ"›’«ÝA·4abÓcƒ±&=ª‚ÏÎU��·X¾ºïÀ˜Õ«'©‹Ó{òa1ëñ¬®?®3V ŸíaxsôS@\x‹_E‹s.ÓËÀÂà·[\©žJ¶i¶>9RUá`j¨\¤ ”gRƒšD—Ãé v*¹þ¶þ¨é9¢ ,ÝÍ æÓxŽ^kÍȨ*O~ ýúåmî.¶[ñꯇVSpßyB†2;‘D&BÛ°D‚�nûÎRÏ|K6î‹ ¦S›ÃŠnˆªU"ÔÕ<§ÖÝ`«,ÿÖƒDöF?g$Ýá†-‹æI¨üøìqGž57AÓ,tì³è©Ê¤ÖQ;#WSɤ T­Ü´E*Oö-ÙÛ–�?6h*§‘…Έ�\6,$A³“Ÿûi}+hòqf¨oê$yD¨�ÁÙ÷ï–/n¯ø®;OÏo?GÙx}Ç=Í ­Ž¥_Íþ7X§››ÿsÊuÉË>ÀnêtÆiڤ̸ÂÀZÙCÿÎ8ijÐOÀM.ÝòkÝŽ‚lVBìŒm3©½�0•¿{�~�Årö&³l˜­CôÐ 5•MJD=üƒâ\ƒ÷æFÝk�Ï) þôö݈i?g¨YJüPø0vÏKù�vSg÷�KI_ÍÜc=Á²¯ü/¯ÚÈ—´p?L¿À'q‡b•)+Þ`O˜ˋ´ÕYµÇúézü½ø×к lr<_ª¢GQ:8¼ø�œNÛ®Ï2 f dãf*�xý#öSi­Wºaú¬òŠ#‚Ñd ex}#Š’ºšPCªˆ®I�ÃæY};›¨˜æ™§!3,ÎûÆuŒ~[4ÆŸmIŽEÔÐTL^MDœÆã#Œ3ÜEÚûÒÏ ~ÅŠå2ß2]€÷Ö?÷{%ØÄPÕê|íKc6å_Eç‚ÛüäãR;9 é5_“Ñ�Àµ¢ìÑ8]=ª¶I‘ãÂïÚ9|®�^SA$P–w–ÙtŸá§†Êñº‰³ù¸ÆÏ^M½è„£�7�ùøyn…Iº�ÄŽ6A¶�¯¬—š–X¯}O»Aþ©—­ýñ2_¹xkÈS×hצ›–LÝcÀþJð 2ߟC]“ù€¯7ˆ«;�:¥›P89ýþ²†gœƒÌ{¾®în>OQ¢@p÷÷Ü…ÁŒŸ�éü➌ �¯Åøœ“YÊéJ�-çJ�çZÉûâø¼â¯éõœò|¿ô37�a@ÕHí‘éXyH½{xüê£ .i¹j�-]íæRÇ÷ºíÑü°ö<44Yq.—ÌÿxU"À¤€ÛVä½òÚ^©¾Œ¼B´†—�ÛLöAõZÓîÛ¡2�ÿ”}1¡P #y[è±{¤VFs€NÛÚÇw›z#ï';a·znS&Ñgß(r)y‡xþ˜‰¸V›w­5! ÁeÇ)¤s~]>úÛ÷Õü—x‡'i÷LmÝ™tÆ„•ÉÇ�z)nâP¬�(óÝšõÖ$Л©,— àÏÈ—#\"2ƒîî�U�Y¬²÷¢’^\\†íšÅÌe¯&-Ü|Ø=#ÌX Ñ2½¿B©¼¥û�÷*X8º`AGûæÓ>Nœ 4vÐÞžoæž`D¥ñÒKô¨ååáëeË�¤ªš„³×䬒Z>®�V{wÞVQO õÔÁ/σ=(“P¾çµÍDUçÿpH AzGé«çÂúõù€ç�ß;«ªnÖIºÏ'.b0°y×Ð.�Ù úÓ�ûöhp{ëYïM/f›ÉYVkùJ —:¾Ò^8�šhYK^&^›™ªtJÑsNOUWEþ½)¸¢§bƒ“'³‘9ãCtéî-ú›Í¨âÖMèjÍ�¥ø w­±¤4þZ”ªJ~¼5Ç” *”`ò¼ÃÑéÚ„lrÁæÒûSç]{ ϶õäY1¾ÎæAœÑÏÖ9É:'{BÀ©Ï¨ó¾ ¦ �ÄÖ†òx¿ÁYÙ‘fsKYåpÛ—‚çÚl�±&A¡½lëÛ&£QˆûÐÓ‰Pµœl{lJk— µ�¯SGË"aߨ­(âVÿÑ �Ðk®+TÙñþñ…Xâõs�šEaƺ³P¢Ÿ£J&ÛÇ×ÂtÀAŠï ½ ) ý‹L„†i_Æ圃ïmgíûv59¾99…OúÚ¡9ÍÉS³À WNozôþx�h¥ú €Ñ`ÛØ–RÈ•Îûa@Õ„”Çd¯ôÔ¤ÅG´–!„ÝZBдF»ï�5µ1�XßN¯&Û<�ŸÑRY‡Ô!¢OnÀ¤ X»7y(Ì*•¶¿A:#Ü~ˆæöé)*뵦߄%T±è”AKÅŸv“ü˜6ËöPœG°]{g�ø.ޱ<aK6„!PUº«Cß÷b¼mÿ �žð=Þb@%¤ysÝ>uS‡üÜö32›2o†ÍÎ}òÕ¹#I—Ø®qÑ\Ûèø|½yøÞÂ-Dj±§YÀwdâ&·WdöX1Å¥ƒ aœÌúk?ºùWUy�m—_JNêëésÞÝ1¾…JUBæúdh6ªd|ž=‡ó–©Éok4·˜ða=Änu$IC¸Yè¢z(¢ÑEäG¡ê‘øÆNsê‹*Ã^E£TWñ4š�Ö¥èÔ¤©?×})MÜžmz¹Þ5ƒÿæMÙ~tû °RÐVÛKÅSF;ºÁæ¤0æ=ϯDc{¼á -#*"ÉøÊ¢ÖÍçl©áóÙ§ðy´¡Ôæ�/Öûm°`Þ)xeVéì³xK¤ã[Ü™Ôô¢ðrl°•OxSMmc¿w2·Y—V`·z™4vœçâ-˜î¯å5#2ñ¡ì[%�/]­ûRGŸí:3e•Óª[ ’ŠlR ¡ nfUŸ!­ì]{ªûÀ?°l9·R 8€öí,žúQT¼&%tr½’ÚŒà˸álJ)v8ëɇ»Qãw¢Ù›Nojnr·)˜Æ·×x“’Óßy§?¾ËîÁË÷jx�0²¶‘Ž:ª/ËB@Ô^Ú |µK¶�óéÈsnk­*ŒPÜÂ"ÞÙs½,a% ŽÕ{cÁæ0bäIÙVZ·GþWÿêÍ„žOLÅ¡e+Po�&V¿ 2MrÑE©7Büˆð€®¨ßM9%ä±â2,PŽ¼ÙžúàWŒ€ðßg\>g‡=ÚÇå ¦‘/J¤öA3 k9.Ã@="ÝÞ€¦!‹H’Íà¶šó² =¶=Žé¥kP ‡ÂÅ–çå Puꬎ2‡Æ9ÇRÓ^p�ul,ϧD(è)†m½œõŠ¢™í'ˆ)y[�WLÖϦрø‡ÿ¹ 9& L¾ÊmŘȘ¼zäƒmM�y ùñ@jÙ°×Çx³Ì`ªm sM-'•žIëÁÊ}øÚ™!Ô¦ä�åݲÄî,4.¶v»`k\õÖÅ´?Ró#gÝœ K/+G®MøÂ�õÉòèy¡"]ÇC8§«ÇØpô¢qÁá¾æÊ3ç𑕘UÇ´õnÙo5]± Ts 4í‰ö´kí…~�d&/8•Æjý U®SÓŸ±±;dI1š‡�Q“Œ­ßâŒÎìÚ´xbâdm $×´ÑÙäÛåvǬëè]¾f×TÉ’ _Tç1#i©#P¾ì×>!VÕÇÀZ6ùi{)uèé²ÂK�"éGtâ„-Þ‹*rÅ6Ï–QÀâVü©úU� /«† 9V9¹UtþéZ™Î87€¦™UáýOþü#Ýzu}O€¼P;9ç¡ÛB ܨÛÎ%È‘óÕaÏÏ·£.èº%Ÿ²±¤Â8ö¢nìsMüõMÚ¨ãk0y·÷ŒÇ¾Ç\@û}A=;�j ÕÀ¸ù<ý#·ê)6¼Ç »¨éeÌ’Õ¨»Ê²V$Ò;|­Ðü*ñE¡¦œ©¢³šUè4ù\·­@Ðêr¾oå„~1ÿ°÷Šˆ�¸2¶§_ÌI³ðG��3ôäˆÁ=⬴½ý¹ùë–¹9ô/×·óÉo¢ã†6Åõµ^p¥tzwÇßõhß¿H~HÀ°ê»4Å$õÊF� ;�Ô)Ö¤8c¬à×véÂùveï”F}åm�$UØ ú:Žá3ÏŽrõƒ½Õ{ßuƬLfóN»r•Ì{xq¬êb?á¹x`ÖN�k†j ¯+!e«—²›Ì‹Ðìá닚N¶êÁyFfuaGxSIVʲ:\¥û dR‹*9ÌÎÛ›êê…²dØS})Øä»ˆub©@ßyA»SÏN9Š.vú9F»ÞãíöZª0¤KïV2ØÙª18¨‡Î§ÏÌ�}•(_væ¹ê‚5—„c½aÐ7BEƒ©ÍcœfŸôOu·�hà#2¡»|í²ïŒ¬_‹”ìcÁV²lž°6\ºUó*ð̺S7[K §eã½\Ö�éœTf«qf™‰cK‹6~'ÔMHw9A§Mn‘LQ�9‚àØK¨jJ{OvÑlã#�ÚõZ»z»¡Kà…Ü—lAÍØƒtÖ™¯.~˜Ft2ßIô’\e€~—çi#¡‡ó¾^3Ê:öPë5Ž“B52�œàY*>¾Ö 1«w‰bh¨ÚóK×Ãa—­6n7…¬‰ÏØã”(?Ï�i¶0Q”¹Z#ò$Ó.†v«-” h_©¼¦(¾6ÃÍ��‘ÓZ{i�öõ>Vì^®|ÀUÂÚòû0p¼„N³CEÞZÉôƒ!ç9ž¤ÖXËûûœ9yŽ–r“9¹×‰ ¯ù¢ÞhÅ¿$©�~F9wÕ?쮎LÉc:àáQ­Ôz¡ð³ÊhYüó +&ƒŒù2ÅaãU¢y-:áÚ´B–Sg‰uÓ +¼Õy á’Ï(Rwåý®Nð ùÈÈ×ÍèƒõÄ"ÛØø‰ûF4Ĭ­/6ÝáÒÝ&âµË)¸6ŠÉ.ò+• ä8�è�ÙÊNß(<š÷²¢w?¥Â}ðFµ s–)?ˆgìg×ý>Ÿf«ùù­äD„£Þ—ìÎïœoe_&žruÊ=�öª[~ä$õcóïÙJI�žäZäirœKÖÑR%OßGà‰U¦S�A„éÚÊ<ØSÁá‹oMY+7«`߇«ÕþçCÍ.ÌǤHÍ@% ÂŽ 2+~æÍ&°½¦XKh;ZCL„!ÆÆL Æñ‡Ü¸á½hÙ.GEú»ð½ClhŸY€ñ×…H¥±¡éº´*¾��Oèòh)ŸÓY:m+s„¥ûA/??ù0Çú•ºƒ?8ÿí)*eؼ�jsñNhÙNƒæâî]é¡ �ò› ?UN‹/[Ú"‡®ã9ÛÀ°¡ŒWûɆ:.F4k¨fæ5À+ ÑrúèÖ²à‡•ÓvQ•æ\u5­Z9v&Aã+„aú~PÝšûSÂw)j‹{ü­pA+¬DL5�à Š{>•ø-KDÁ"ƒ¡eœ{åçÄ€7=pwBÍĹ {Ì·« ™Žõ¾Ü™9Áyq²wPÌ% ¶&ûÏ*˜wöÊÛ{ñÝ8hþZ÷цÁ–)]É»Þ[Í]§§l}oç‘[¬¬æÎNNàŠ�Ö¿¨ßQÒ•Ši(`Eæ›™Ì|3€¥äq.¼zè7U°@Óø6·çÍIå[çIYÓÌjõúî9c]^q�Qé…©Z~ªŽƒu¬°uV�®:U¾Åï¡Øô{¯®y—�#w/væËüN°ÒÈý¾RÃ…Ýi:DG©ŒµoZȨÕU|ÆÌ/ æÈTÅ]¢·^±³úâ´ŒðsHÇ) ![ Øõ¢Â£ã$¿k‡ä‹|—/:Û‹ÆÊ̯ηÌ<ýâ/~m‰FÅŒ•Ù»‡½\P;sÊ~¬õ*ì@fÜM�«QRæ+DŒ=Ω,%hTÙÿi/åÕ/6­°™!Ї¤0á~ÅøM÷Öš ó²Å’W/ø5pQQü°Bsæ�³½aóãm�åy²‡þ»bÿðйJ£1S´n½¶›Ì²ÐÁ�@Å¢Q¶¾˜iRÝKš6ÿÖ9º Ä :å[ Âeþ,¾¤ŒN;î}é¨:‚‡q opÁAï%0±�Ü–óúÇ6z²ÁÚa0©6>tÈö‚ùK]õ/±iªÑÄKj&D¨3üÚºõ!•�©:cõ—Q×ö›5>Ù(ûŠ�ðœP-ó´ï¨N‚¼_âÎ6lZ„R;#ØÄuŽ4P[ìQww‹ªå½¤‹Ý#ëLQ×,qA”¬Þ’Tï:Ã*‘vX Ð#Íó;×G³O3LÔy¨^¥èïü��Ì[¶½\þ@ϳp¼aJNb¾QàþzÑå¢o)Ì?�×Jd¶¥O—x¤×ßK<´Ü¶o�îŽýõÑZía�¬/z¨œå›2çé÷V> ´0;mÅCŸÂ>‘4½¶Œr/G¸&üÂh¹øõªF¸„_wÁµú½öýÐ,A3Ôqs Jª4?¿|p~1* 93¢*rŠCIên(I¥¤%ó^N9LÅOO«JbD+Z'F5Wì¨Ó/ôîòÆŠX&r(^ %í¸+U<’î–ˆ2Óy€ø�d"ßJ™KˆIÔ¤O»Áµ¡ ,¢ckI4Nìûþ)­E-´E>‰(t)ÌçóÃåo}UÚÅí�G5÷C ”»÷¥ò…F¶�EAè7¬�Ù½äObK?T0r„–ޝ[ù]¦M§Id1: C•Oa•¨šÅÂ÷Ÿ4®É 6uy�‰úë[ºé931|:6¯ÙóÈø‡÷5mϦŠÇC‚p\YÎŒàóFåL¦^Õ•Ïñ¡S’n;sÛê` u½”]¥ÜÄV6 r ×”�cqqRØÔ¯{Â6·¨÷¦ë4n"Ú…�è^îØN³ÕŒó„VnJRAàP&¥—€ÌwÓÍe¼Ë�™ÄѨ(”™¿6õ�wQ…ѶJowƒ]/öñÊ‚�’㛃uz‹ùᤚ}aú Ul�ódU&¬c™KÄnA •8Ü ¢OÄd˜S?,@\ÌjæÊŠH¬ppW�ßÂ]K› Uün‚XÅFÜŽ¦/]F|ÅêíÐ$�A.8v‡=3|†ó6‹p5ú]GÈFäʆ«¢Ç¡ÃàÀÜw“ׂs5`‡©êÜ’7ŸÚ¼¹�†&£(ºƒ}ZnêÇ¥1¼¢c{ÅÄ?³UgFˆOŽýœÚz²·0ývïJ@ž;óìºä‹†(Àæå½ dÑŽà M‘­ël‰uéÁB‚º²à±jfàg…Cz)ù½ü]aóˆ�Ùl�¶ÛÀŒ»ËýÇ0ܲ�Ÿ…?ÃXRÜ Í”ÑOW²9Å�Ô=­1Å�ûïlS=\¥50µ÷Ш¸=ŸqÀtô1IDå ë ìÂnÕ£cï'zÂgA*|œßôªYÀ¯?žu7Û³PÜ“«®ÌµÌªëì˜Gðg6yþÔû±Ë_«/ˆ'ñÑÏ^€Â­ÇÚÊ$§ÛxS[Œ¬pT·¨PM§›ª›"ê©މþ9 -æW&ÁÀ}@Ñ£T^øD…‹È•©Ð9¬€ã=înz€#úþú=×eRÆ·•Ñ,ñP‚'Öß×m"2˜o)(?î½ÿ(¥X…)5J–ëZ›@h³/3ÿ5(ä ."I¢Rß?¨øˆ¼;º~x±*ª…0�åˆF¯¼ÒŠEžûMÆwifå¦ÚÞ¥’aŒÙ oüãð9Ø®îêÁû‚]ùBJ;ZµúÑHÒÅá+#’ð�¡á “Ž ®ö2N9âéÙ‹†³/Áœ¯òå>�ú>]GaΗ7w~'☘ݤù䢥?×VL–gø¦ÏÍÈ—Ú&èÆ=¥$(pMËk]ž-ùù¨^ e2øŽ%Rétqå/U½Q ýSÇ(÷ös¦œbƒt7É.ËÕú–»!£d²bòÈ Îæ‰ËEº~4|­“›óP�w˜¶Û4e¯UÄ ¢}Où�ö…¸\‰dý4Ýn ¢:TzK.˜´ö14 ª§�$^9æ&¼~pZWJRˆ±1èkçd }N!¼Oø°… U(„£UAwç½ÔE>jv¨y­ñ¸ ¿j!±êH;ñQ†�LºKn‘‹lã² µºÔÛö.îøè²Xè!�K¦d·%ÿˆIEjÙj *žJ\eSõ±4­‘xüÅ/ظrÍŒ�Å��C+ÿ›z�›Ö|q,î9�à²uDÑOÏsÜÜâMÀz@½u-¶·ÑÂÛݬU<–žÎð–ï-J#�üÌŽ±z#°«å®¼&ðß­æFN £hïN¦e;sîŠ$|v„ñ¹�Ñ‚û磆(ÒìÃ.¬ãÊÙˆÓå¹…on˜ÄJÌ“ZöJm¡(&{Š|FäXqÑ™´LbQëø;O§ÓêÈL°†_ÑWÝ6Îgñ]‘v1îg4Å›�i‹:bšEÚÈÒG�oî V‰/£]«Ù«êgöÌ[HÓa·¢bM׸'^4z!úvÆ(D¦.©ÛMK0†èšLñ£{Ô鈛¡ g·†ù¬­ãsCX+3Ù¹è™�í¨ÏŒmdc‰�Ð^b%´jsÙàÖÑš5›C’!© ½ÞŠèÐûѹŒ¢ôŽ*¢Zã7WR_Ъ‚²sä2ö˜5è‹4Ê­ š>Féä)e5—Ì~«¢ ñŸfšµ®ìH5I_]qžº·k‚ßæ¤m Ʊ&Ê@’vëðв›á-]ˆg%}‹í@*6Ä ¬Äƒ HÕÎ\ØvtÙ-�Ê ×/�¶ùb©Ñ?놸ž Ó±u©è%çOmå�Ò¹Ÿ Õ ¬:8¯cy‘=Wu$ö–]S(ΛPCuëƒoœºj”�¶\_ÛyQØi–]Z~€l#¾�©D†Ñµ¦&~YqÓǼØæîMJ½«J�æv�³mï’¾–OÈ®,ÎxÇ[XkÆÍ’Ç˸X¬àÊo(¾R¿†} ýqâ[ú¡3–b­¡_¼Š®GŠˆ,Šf÷Ç;º®€©%3�€ÑÏ”²!ñv”A=VÅGo0j:ãlÚQ»Ód Þî ©å¿b§ñ¦P^¨�wBii¢Y—{"X`#í›9ã-½M~’”ª~®%a³“3¸|!ò<9üÉG{ !Ñ>¾íKª)c ö�ç�-DùŸ­)&wë#9‰ã]¹†ÝÄöIß,¤ f}óŸ87¯ýzèŸå×V�:Oà«ðli»eÝëg�‰³¨òê@æ@ú픟5ceY,žûÚÈRcH�÷ÎÉô`ÐŒŠ#Fz¿¿J×Vj¶mÌë¸÷Ù4ÖXï»Ô6ï<¾™»‡aIwò?—Rz´ ÇEOXZ‡»K}+&kaûÞÓÉRYÔ¢æ…ÄýÒŃ„IÊÎnÓ  CšÎÏzÜ(Ž C½˜8µåîõ-ÔR·ñ”éÆM‚�@ïfY:d¨iF^ÒÑßö·—×F%ᜊµo(Aâ¼2¼\X½s*ëëEªnp˜>DRr°<ŠåöèÌZYq‘ïγù†ŒU>ó9:Ñ)"1@ÝÏóuÛqƒ`ØûŽÂ¾,iÐ\‘Œ¼Û{ogã'”3To6’,Fºàá�Tž³ªë�zeòÔëw,nó-ÏÞ.¢¯òÚýw †ããWîx·Îd‡¥B—^¡Ï4ž/ð‚ü7Ã> µÛ:ÀbYÂØ´A¸ZeVIX7½>­w`/ºs¯¤­S—Ð ­d÷)Þ\!¾âß¶hº0>­çض›*{ ºn‹Â¢?š`Û ¯\D¢€L\$í%Z%HPŠ&Ö:´wçFw[¢‰7}Íë—à)ºz˜Dï>³�º*D X£dÐêo§C0ž>x+Ûa¬ÏúX¶�{�S4v÷$nÿ¢¯+%¼óÝÖµ„o2V©¥¤5£�€¥…æüµ|Hb²’6/þì…v|úÕy5HvÇaË�šó3¹59ÝA0%5@ôVÕ¼:Ãì¨| �ÌCŽ·˯œÂˆîÛ˜Êû®VŠ—ËÏÕ?�ÈÊpŠä–Žo¾ÝÓé¸Ð¹{à=Jù1°Y»|-z(Ö "¿Eå*_2Í£ã³WÌBñ}-YHòan2õûí#ÛËâóOBH\ MËÛ׿jíx/úð_¼VæKtBY*-ÌXþ�Û²P³<áTš]/¢¢õþ!N‚©¶§ù%WÖX)ÏihH»LîÛ¥…óŠ<¾'ù¨nFo<Ì5,[W㺼µŒ�­®Ñ8‰qº_^þõ¸Û;f”®�G,¸…³ÌqºŸË%Ÿ{r%srxqÏí ºxŒ—: ÅAR�h ?L@¨ë¡;o ÓD÷ßçKi5gƒ£Ó×·\¬¡ ™V�úk¿_ÊgŸwã KÀSÍÍÑoŽ€ÇøžÏŽ«'>ÙóE.aëF`y`Áü|¼½ïÀN6z‰åüÈ x¾ùÕ2]s‡uN³ Šúq]Öâö5´¼)üþ ™úéЭ¢Þ ×± ]‡ó Ë�yëʳiÇýxE)ƒq&‰.À<úÁ1öŒÕ¼xÃ>‰\DÚwÕ{ýe¯Cf»e1ÐÅ>9Õ—€t¾ëGê¸PP¦¿«…Q¸jèÑÁ÷\TÈ £]5õº°¾ÒQÄqd¬æÝš¼*ò˜U±’[£Ë^s%Ö‘H—�~îÛÚÍ=¼ÌË 5Å~öŒ2”޲ü/]ÞýQ>v‘9(ÛVËŠAzn£µo#í�—kÞâ20Ëö“†Tç27iã©¡ñz G°¨‹èÚv«XDˆ¡çfBLFË+È ™ÑÀIâ¶Ò?•+„­w›zÀÂ,kÃH‚Ë÷Þ„¤/úÑ‹ zm &�ìØ82q²ZøWc­ù-åÅ„�±�KIKl�’%›qåV>K©Z*_½Nû]®ö¿¿¨6mM' å›U]=Æÿ¾d˜S ÷ç„’@(%P&¸'ó¬ÍwŒì�hé‡[þ%ß LÕu‰¹¨H”HÙð•E<×x[-]Gü1N0þ²MmÇžÐr^ñl* BmB†&áZ�—4÷e+ßå¹…Z)èîÖp ãÎVu[½ßÄŒc[÷Ô'wü�íÅ }Ä›{ëkæÉW1ï‡Â/kîé¡M ‘ÍØ…ìäôƒÄ3&¨N°Íʾ&Ëá6¥;¥÷íï'0~‹Ü œg›qL_Ç 4ŽykÌÜC­q[ExT-RW×@JûVÿí¶™º]uÑK¸í«ù§·™M]EÁµÍù‚ÝŸ ðô.á  ˜Ý̉�,1΢0?¯ è ô΂ S÷ÕAÔ×Û½9‘ž‚›�=ÈX¢V7:Ñœœ£kyñ·ðɲ¨\pZ:º\®4öéò7(;* ”ÅíI{°¬‚x®ÁD €tá{ô ò@�ɰ`"-WÌëEDóæc˜±ÓżÍ&› çÂò¯-uRaîÕ–í/˜&�ÏDSD–Ó.C%ÌÆa§äø ±^o| ,leQâ°¦baCþdn *P6Ú„Šp\cî�?¾"â~O:•k>‚Ëä«2~„ :ÉȽ"X}Ÿ¾ ÿkÈó±ò«º¹ªHX4ÐYœÞÕö„ýçSþÃ:ýqå\l!ߌPÚqg ®Uo©5vŠÅâ:óTÞº†øšâ¢ñ÷SùA«q¶+ÙsDuB­öÍ×.)ŠqÛß}�¸ÒX[-F5œöÁ“ Õë/# ©~yþ�ü¼G¡'7%+øqó‹¿Q:eÿ"≃8Þœá¸Æ‡ãŒ¼…Eª­Üéµ�G�ÁéÊÛ«z~ÒYîÆ×�$"N™|í._HIlö¸RêàHÅ‘DѲ»Tc‡„óü¤´½˜fÒZ�’ëdÓ|~ä6ÈN¶{énÒí²‰›ê&5ØÛzºô3tõQR ø�3‚éõùÁÖôÙz¥Ørä³ïl[ÙÞ ÿ+¦ïùœÌÓõÈ›£ÎÝö\¼^ïï7c>WiG„zè}çz?Oxq;²8A•KNßrú�ûqÌÊ*ÛâT«íúíV è�ôU¾Ê¹H l’ä lƒ[‡«Sû+-Å×/§oo›Fø >ð.>Øœ·öÐÊÎV˜'›~Ïo‘7–‹G.°^°Y 1û›|^Àï2“*˜½Jo~q6ª”i‰Žl:¶ÆŠž}¢ñyQUå+x†çZ³#┋0zC@´ÚãÞ™HkSŽÔ×TåÛx¯ø%¶ºd%×ì{£ñÝi#|I8ð¥[ÿžæ$¡Êò¥ï K¯¥Ð¾xFH‰WOl3Òe¢É'Èùƒ l‘Ë›éIí, +*–�Î,¶2]4ÏÐE Oú_)Tóq¼ê#ILpÆf]°v|5áš.ïËæ�‰·³�­^ý¬à¾Ú¨ F ü|ü¡ro&^œE€ç¶…0ˆÃTD—�ƳÚV®rôõêAû'où—Š~Gÿõóг,tL扇Yá¬@‚(RÛ=¨i$\÷ äa WD–€ãGkðBæÄC­áÔµl™ºÊé¯ÌÑ«0k%9öÕ8~H•ð”•Ü7}³î…mÃNp¶¥<Óx»Ïe+Q9„pScl[ŸYSMoÌ»�êVãÇ’¤¦-> 'ÕH£lá4ýZœ«Q›Ÿ9—�¡Ç_' ÏÞÖVxá¬ñ4v'‹ÐLü�àh­—fu—¾¼Ë|‹(X$�¥#Kðíª�FƘ¹& /hÃêúÇ�ˆÙ»·S5I? SŠ‘N3„O”À§iºˆXÙíÞô“âǽ;ÚWTÕst�B«àærxVMÞP ‹öŠ« ' £QõI9]NqÝÔ¶µÔÏ0©Éúgny[ˆ963~$Z‚[)®Ê¢�à–ýCd|¬ú–oÃ}jq³~Q„—tV!šž!º A¤ÍKo�ƒ,³+ ôÊ«d›ƒã¨úùG'Ú€¶êçhÝYtFKÙ©%\°B±>\ñ`E¥ZLz¾ ñµ�É"Ž–Û�˜ÛÕ{ƒŠž¦kMr-™a_?±Õ;ìË4YOŽ èÖ%‘‚"±}$üIùÕ)ƒÓ¢¢öüMBh9¼vãÉmXëO•’ÀŸðz"º‹ùœ|ÞÃnLW9Ë-–¦m �YþR¼–ŽlA<ß&™Šc8BE{N¼Ë•ÎÌ;[£_ÚõžxÎÊHD—A~é`(Ê…ògq=S´€ðÞêøÑ5: Hpk*ŒÐ °˜qrµYÊÒ¡æü¤ÐPïIÑû½Ü6*�^r5¹ >Vÿù§üÀ\V— –;¢{D ë°œã:ÉÜEÎ&Y[è«`ÍĽ pSí“@yh@Xé’»¶=k£à 6ËWŒeg‰¾C…oò] ØÔüm=íÇí±†Ua�ᾨ¼bêêODBoî)J8{*•ƒõü�ûTÛ0^W݈§~ÅFïzUÆ¢ŠRSÈ5ŽáðÜk%ìæ»Ðš”Š žá¾VK/ß�Ô‹º“<Ø)ß3™¯îhAÎi)‹¤7íƒ9¡ç£ÇäÉÈ�hé2ŒuWÂÝb_E½[æÇÖí¶ö@z­Yÿda�á_¹Ù±¤f«ü~K®\>²cr]æjºøIïUšã—þ²—ˆ›�Ã�$Û}ð‰.uÅvE=9NVæ�´ü’a"Dƒ_7&ͨ};Òº¹ˆLí+Š@as¸Íœ0e„NÝ66>!=jû$XÓ5V�§mYÃ6ÎðÄ,»Þð'M�º×±EG²¦é¯·É¾AwÍÕèÍóó%'ˢ߅µ6nI`d¢WxóÚÛÙÖ˜sDâ½OÒñý!IW*í¸2Ú¶Ê+ëQy?h³i�¹‰©¿ ´Øˆ—_9– jE³ê’è”ñX-KºOŒ&o¾|›*D·¸rý`Šÿ¾ˆç]L&ؽdË‹¤)HLÇw±#•“EŠ®{U6^¥–DTPÿ¶÷XÓÛšs²ßN”Ò’ý;T÷Ç ‚O¬j—„Å~’ ~©¶¨ä{)Ž�²#œ#gZEF[¶Ï¦jZ?lOœ+ïfDCbå;põOú?¤dàÇêãÈN<÷èn:QÞ{ï›V´\¾¼ioHXb&2_/Jú,\&;t3'ç�f¨“bu-d¬_ÙIûðùǾÉpH$—óøqó¥qö8HY¬in¹kP¨~Žÿ‰4ëÔº0Lg�¼]³´jPÑjÉÖV¿ðfH6ë=��,6; qöÄ%À¢ò>ÌáÆâÕ6M· -vKhiWóóÄð¥¡[x¼T»OçO å*Øœéù…uvÆ?ÊV*M¼P�˜°CŒaÚª«6SÝBÞÕ�–Û>‚öÌT×;óoæ¶ž6ƽÚÛ¼°�dO×g}ý™-ß'RŸ¶3OhÒ,¾Ü1Õy:Ÿ[ývFäüÐ?yÙmm€SŽs½½¾ ÷L.êS«Q©ÃQÁéw¾¾7}1BC� '6/B눛ªú(°ç "JžDkCç§ÐÜ|YÛ’6ëcæ?Ö‹S¶œÛBÚ¦„ö�h¾ˆŽ ŸæðÉ £âNcýq_8PÝÉÛ�ÕÞn@åÖº޾·v¼ÓGbh{mÚf¨ùöp.¦¨<Óeg]ûÜÑ¡Ë8OÊÂ9Ö·Ä  Ë>à«w3†dͶÂ1EË„¯,}·Uê±Ðᔂ)REd¡D#»rœ—©í¿©lĤU%P’(˜4Ö }‘Û/—�‡ë0‘!“¡>{ÅëÍIãÃ6ô§J8–\®ö†tŽb®i>þc\€iYIù©—1»Ï²íŽ|md^£i£o�DëÅãÝÒ"£i}$Áù>âðÃ4-è³·öÑÉTwÖÿ ó& Ù€™ªüót„¬é@‡°laÕ…}) L ÈO�ï—ÉKiRÁå¡x¥Õq´„ÿ�ƒ Im9P •éæyÐq|ôur€a:S¥^©“ÑÅp¢ÖwÍIÁG%nA§KÚÓ~ ZåH¶¡”ØïÊ�ÝG.ë{¤±ºŸí(©ö 뻇ÑJ|^Ú©ZÅËW‚po!kJóR9t7ŽBOf¬à¼8ÆÅ>§‘«J4F¾3-I2¿¦#jG„ÙûXRi²c xÄ^á´‰xºT¾›Že'Vz´n¸CrkË&¥#Ð~´]Úˬ ¼æA# Â:€EY‘¶²ºCtƒUDSßòU,“ÁŽAæ#óÖQàBÊ% |h1õT5æ(¢•è•»«¨f‘Æ‚°gñR]Ä8êvWJ7kºqÂ€Í BdDýG)S‹©9è+ý´M®Özð‚èipg™¡o7UÌÜd¡ƒæÄ)gt¸,oì¬Zªü÷Pýé—® žSS{aCþßøn©T`ñäÊb+í¦â¡UÿÑ®\³Ð•ÝÌ ð!LÕæ£¼&ó±(ɘe�óÑC�²XhÒ��Ø_?Ñ�«¤Ë‚N—ÑÐXC ¤bI†ŒèB�Ð!×9.ºÈ|ÆßÉ}DùU9ýp0XÊrÅXÁ/И<;õxŒ†éÒYPºÀêV—†`4 7Å—YÅÕsûc\·'Š&Åßô€.3ä†sºëÊÏ}¥X,ÒÆ/Ã*ØŽì“_Ò¯P«C=íc×¶ ïúšµÍÞÔ0)H3V_vg¡kÜßÉ£~ZßµÀåñóùZ[¡™ öƒ*÷'5Ëk%?�‘櫆�¥ÂvSx:Q€(ÿ,F˜B‚ ÉÒ?%E7t‹¦GñΨ]YzI3\Ä 8bäÓ3Ë›&v#OÍ™wÓ_-;ôh”tßçé× · ¥l»Èø”1®¸uâç@U+`‘F§Ê6åÔеdÈ€¼"3{.ÃR„“*ÌóTþ¢EcNjI1‰¾ñ",Qlמ¯s�¤ïÓZµJš9à9™Vùí´¼X7Q?•C°2€§U>Í'³(ê„�ÐS1USóÅùo£¢b65CðMå¶öR ¤io»sóÌ"2Ì¢¶šYÞDB¸Õ. Lù<q ñæwÅ_ÌÿŽN…—.¶ á/øÉ\[—öH1¦´’N´óÔšY†úÙ÷ÔlνàH´è ø.�œ’RTƒ ¡Ë šnܸ-§°’Õ,¬®5™פƒú=É·Ø2‰w¢õÙÖ8©”¡ùèýTèØ¹ùœÎõN"â±AÕAÄåk7 S EcˆúvO1JÁk±t š4SJN+–)m¿Y{ås6 ÌO’§¹ã:´ñ{p%󣛨‰�ÎyöòÎK&ÑR¡°¬*” Nú[ZpT On¡4zÚÙdÜʯƫŽdÁ]‡ì¸ØJ|×PNXÉ&iOY€0òçja dÇ墋öÁ!æˆîŠÛÆûë²G×r³¦«Ov¸R¹ÇX},Hª‰*òäi A¹4>r^Álû®” ;øŠúŽ2Œ÷Mw™IÂËÙ·N€VŸgÈeâDû"¹žB—ˆ|Xêæ¥VÍ ªÂ=½dO ?”r/ MVðg~sò´ß4#=¦‘üObÄ«DaJȯaÞLƒþ\µV,ÏÞ˜æ�fÓín¿:ã6Ýã:¹œÿ�èë·pyz‘3çk­�õs*]e¶®¾÷”9¾ÃÆb÷ïï¾”­.ß´ÎJ•nÛÛ%õh¤±Ó:¹>X¼sŽ´h=ªn9Ÿ KûP¦,c$ô Œ-„‰8x ®µn#æ±U�äècíeÜÁI…<òåç) ÿ€©~ƒºýY˜ß\d´ËÓ…øön ŸhÝsšºàý�î̃–üºø –&G"Ķ(bZcF6²h{@9U1®ˆ„ ªtwØî[ª9z{´È*OâyǪrˆ@tS…ñ¼¯½ã…�~‹;T6™™¸XjÛôÝ*tÀäy÷ª${EöaG|ƤT»(v¯�“��ÛÀë¾sœi­–aS§.cG�¿àû€A¨s‰ƒ2¹�l{î5†Tv}S@¦M+…ë³kîã÷¦îðwˆ¤ZzbSáÁSùíe³âOýçêEé6�Ú¬îµÓ’¯¶®äÈ�‘BÈð¤Ïac¤ ÐeøI“1 µÏ<.*7hÇÜÊ\ŸkÄŠK~%ñû(O+'+¡×_¿Ñ$ò¿Ã(ÛË{_ÉÔP}nIx>Ÿ4ÅŒQ Ú¬Éê›é×)«û§Ï肳ÌVr¬¼”ÇßÌôì˺‰Æ@ä…{kÝ”Ãϯ³»å”0ôܾÀÿ¼H"õÖú¥¦émïmyuÃÒíÂçÂõÒÈÏÅöý£sm¨ä–ôB½cÇÓÏ<ƒ•øºTÙ1µ¨®°©ãºwˆtpc�àl«Ú.C«Ãï=Õþ4žœ?'=¾9®l�Cßk™k~>ëË;Ù^"dâ×…NE.gŠÈˬٿ‹ÇaŸrP O=PÁlzÚK:“&’aT’ÀF%|¬¹Jç Ieò’°ÀŸª››!(\ðTNçåIÄp`“X8ätâ0¶ ¾õ eíõ³GÌà×>]ï`=hØM‰duÈpšCË �’Ji€ö²/ãÇ·ÏcWÌ©QÒÌŒJ¢×èÈ-Ä0QEy•Hª°dÅ/¸Í±Gèï­ý›F^(ku<—½â÷ö„òN¯³j÷°ºáÿTΡ?‚H‡ùßx(�Ûàzr°¦ö¢‹9Ù_!Q5âÆõD†šHɨ‰M)Â=(‡ú«F�Âg»Ìê„VнŸpÁêˆia�M[ˆVÂlÑ#qj-ó�Ö³†È š™ ¥¾ç-Î\ÝîÇã<•ñ‚ak‘ÏØkÅþìYgrô¾ºv‘H ~5 ßÖ¾|Û²C ·lD/˜‘R‘îózîæ¯¿¦b[�¡AïÑÊw{µhwÇ4òÐ…ã ëáZ¶ F”m®Àˆîúpî Ø)++µt^s›L4½Ÿ*ƒ}‘uͱ™ääÚSU"Í›ž½ãJuÈ:ñ$�kg›‹ñ³ó±ï$—MÖ‚JŽ3Z·ærvxb~m”Ì4¤èãÉ$’I|eYp…Xp„á%Dn\Ë2[ùCÃ×ó-IeWD ›È(¿Êd…™¸_•gùápÊA†?ê,šhZLM8¯R¦T{/w§¤¦ ú¸ô-�CJHãô™=ß_ß“Éâ¥&œöh¹õÉ�Þ1–¸Kç’õX?Ô¥“¤¬Ï6Ãv­ëíJAºß/šQ¸¢Ó¶*àØ¸­‘Ó¼)ó‡E¦Þ­$û²ûÀÆ2Øû�u,×Üã\Ò«bˆ?{©©ÔÞ3Ím�= qÞ<ùÒ_¤_´ãׯ�1>pYNµÃT;ú‘$ñwèöeqPaœ zgL¨p¨Üu¿ùE•Zcr@¥ò5®£ÆóTòFeX‡þŠ~ÎÕþ]ðâ±$v–‹<�ð[iLs‚úÒÈC#Rñ G²!Ü8`WÅYÅÞ˜ïu'¼âö´"ýñ]ã&õŒ"Û»›u­Œó2B­5ų©�E¹žÈâ_F ÁÑÄdiŽZ0.Ϲµñùrñké^a3R !ÁE÷5/øŸŠÌ mPá5œâVÄz…ØK³ûÉ&…›ÅaX ¡/9‹‘JY?ØwCXT3ªÎî:�ÿ³üÚ-ô¸çÁ4%ý Q†ö”špÄ >j«[@ÝÂ-? «w boRÌBIp‘� ²Ü³%›ËT…ˆŽ?t6.@Œ_„ãçxYÀp¾WV$tãa[Ps²ïÑJ÷lÙÖ6�-¢ŒQT=þóVgŠ$—6¬ë&—5#‰,óÈpo+EÀÐáz0¥ðE'ÝSÌX�‡éôÚX€ÆçÆØ[`Ó븤NÏr�á4cAãòQ�Wi²0„*=aÇ‹Aƾ:c£H„Ú�—Àùðð^wêY™>Â6¤ÙäJãå´K*éSû½RìW&æ¢�¹]¢vÿVѪ_XŠÚå P¨ 2¦æ0. ¨‹‘êÂÑø–»ÒT§åDH§ÖDxO¬¼z3D7Gù<ª’¢í ¢¢KZhC‚�Ìöx.Ä�fLè>ŒâºRÓ&öÀ° `– ¥ŠQpQqà ¶Û9»ÁôÑI0^mD.}‹X µFO@éœ(A‹,)Òñ!{;¡�WÐß.ûXJß�‚âpÒ:�7;Úwq“7R½ö7Áì¨nmpX�±˜cý¡ÌÁ=ùí³fv‚öA¤ÚgPvÊSU`œ#‘{̳0¦ÊÓì»v�¼Á<4ýos”�Å ÁJŽPÔp:Å�9H\"b„SgÑÜ7o,2×ióeqœ5÷ð}—@¼ç÷5@ìžES³~þ JpÂÍáWìˆ^  nIêŒL�ÄM8zÊ”’®¶Ñ<õhÊ‚6½îÌ œdÞ׿ô-X¡8�èÿŸ¾“9 Á>ˆºƒrÐ @(kÚ�¢mÃÀØ«ñŒ;ü>7f�wÇ}�¦'º“àéà7³l;Š.×-�¦5òcwÇB¡ˆ�•¥r¾†íÖ×ôÇ sòs¥¨}’àÒ¯N­'õ|Àxûq= —%Ý "{wd_uBH,û, ­›�;ˆ"¤�mËCs °ZÖs2x—úš IBˆ#OsB �ë¾íºïŒ3:Ç)¨ØÇÅ%CöC¶¸3¥8c¦b4°K0Œ"�-®ŒÖî3»÷P¬jˆÜ>” î #R[)*')ã(_;¼Þë5€Ø aîgóúGp¹çÙ ç5_z©µs»‡™ð§Ró÷Þ\åyx Çu¬<—üÀŠng—ÙÖÔÖyIE³�"(~‚‚x°›ÿŸït° fªZH±ÃÜ¥=V=rí ËTCXƒ£'uñHî©¿›”XçÝ|)yØ ¯–£óQy3WKäV#M:\2¦ì ’ÿؾDŽô(ãjÑ]›;××7ݸáwMd0ymxöÃ=؆‘©†›ŠÁ‚´ŒÁB ,η h†RuìÛB”’¡ÀfŽnÊ_©teÅ™©¯vþt<Ó¹. °:BuÒýr�òΈ—ט´EçR3I"^kŽ·Xìíè;‡´¨µÜúe­ç¸$ܶu=Í…4û,² Šel4@È=p}?>蜼/Œ™xºÕT–pLj•zC�'C ±5š¸sÔT¨d‰Žéø3WüäŽB(+·½üU´R,9K:TAYŒIoíäKÆÅ¢%1Õ‘ üŠP ðDñyƪ½“-¼™‹ Däg7«‚Ñ„Hq¨”O/AMdGù~�J8²¨aìz "~¥óѱ¸I`ðû„z¸w ªÔüÃíž˜uƒU¬cT\ºo�¸é§ARzÚû>¨šR˜–2ƒhÚ¾ÅÏ X�W‡¸þÏŠ¥Â� B"’8Dþ}7]Â&�fýr ßÀgœ ×z²N„‘\¸àæÏælá´Ä¶á¿ž“~;Àøˆ©±ä 1Ç?[N%58ÅàÐg/*ì\±¾tΕ"Àh–¹æAg:‡´{§Ô©Ô�>áCðÿ„ãg �oü.„æ<ƒ¿cú›„žÝ_b ~EC¡WÇÏãbV~Ô{ùKcÖz‘’¬#«�}ÛáùÕê)r3 פò»cÉ #YˆÛ'±¯Bý”p.%IäWÆ#�V¡ý.›Ba¤¨* „zÜÅóóÈÆ Z�ï§ê«Zé⥚B2—Ä©lðòÝb™Òl¤‹æý²�©_¶ p‚ç5 · diKs¿ð5n$Ýæcìy˜yí“6é߃Úë‹JÉ�ϰ•vÂ�ÊKœª�QÄ Ì ­¡HgßÕœø¹Ìa"0˰»že±�ÉH¶NÎ�Ãh¥Õ8¢_4¡MÿHß[�èRCR2Ϲ&Ý„ ØOô}Ðn­qæÛîVÃʸʩÕܳ_úÒŒ™ò�²\hÏú™ÉxôªJQ£yGÄ‘hâ:f$ˇa†|Ö]Mï—àýÇx§Å€|4»ÝEÁñ¤_<Ad¢AÀ(¥ó…É<Ý= t¹öÝ‚˜1¹€lžA¥Šï[Ž_{&° &Üðêr�v§áØë\NÙåP�U¤Ì¿Ü…?Vf�ö3Ûs9VtpVêF‘M> ÂïýÖžFø~„Qgú¡2º†½è²ƒwÒw®Õ /P¹~¾%ž~Io3”€”sõÆêé‰Û™ MXË;3™Ž“Yy+tB™@\fаp¾OP $Zî5s3ŽZ1׎£ja»s­é±Ö[;½a‡ŽÓªNmõ³…µ :™šè¿ž.4bþë:¹NˆèmÉ”h¾�óà‹H„(Ëõ‰«”ïl½ƒ7�Ê6‰ãLaÇF°Kµ4f .`ºå~0 N:jëzÒj‹a9J*8¬Å…‡5†Ís^@>¢.c:j^ar J‹‚9N ¥{ñ޹ÌëÂέêýf¬sƒQ…D¤{s¤i â$žµ¶Å =F¸O®/Igý{käÏß®™ð È[Àst(gIÁ4êúœ;òÚj�„õ?Œöòg³WTA—PÎ1ÅTÒA"X‚o·®Ñ^IÏà<Å*Î�;êмÊcÕ× #¨1mÙLϳ¢¹‰J(A,ZñíæßÑ;Ò5°šO Õ\í™âÿ… ¬·¥DÀa|sn�8ŒJjY¥¿?ˆé![³ôÚωÁI‘q‚;W›Ô[¯Ç=}JUK"TŒØ”)áó˜ÍσWûü…�Prø¼HÏÌIUÿ”רµ<³Ÿ^Z„™GƒN ˱ÞÎ §UOòÆõ\:®‰ø¯Ú<`O9ÎŒ÷!L,#FŒS®°Âqr4‰î,¿òÛ­ ‘��ÁŒn|^æ¨×÷ÈXRwðÊ®NN‹“®r€³la ¥®'¢VGž·f¸æƒC×àŠ[–b°k¢®béwR‹ã …�@ ‚U·†S¥ŠZ"EFçh7æ§2sqÀñ§ž¿6neÿ´Û® .Í?¬�Mñˆ…æ %O*yv¿gž†:&H3çÎÊ¥q€r.û�?áñÑÑ>X%âTp¥„Ø*è#Á"ÚÛ Cšê6qñ*f™Ïìi˜cåøø0‘£oÙ®äªb"—£æuêZãÓr½´0…¿o¢”]z«W-¯׌Y�Òq ëN@@Bí‹t7±�N)”™÷y�á“XB/ë ŽÎ;ñ³v–[îË`:ohQÎ�}•‡¨t[ ¡-k›6¥e¡N†V¹ZU¸PZ©È½µßI¸?á3³àŸÑ Jzó~jÑZÝãÏR4Ÿå'ÂDÀ ožÂ§¯{,AtÜÿ¶G�Nî>âÒÏÕó®×}Œ‚�ò3µ.L€úÅÌÙUQb®Q„•¯?#â±X;´Üƒq0ù 7&®yÎ9+ Ƚ'Q£\,E Y)xÀ©›7[þ¥•ɺÔ)ø¦Ž»“8ÁbÖr²�:ã˜ÌüÓ&Ó•=A– h&ºëu7g1Øíó3èï¯Y{3Z Ç0i¾îÕPÒÍ4𑣿CR^¡vú˜$Š€!6sQƒíƒÏq>:zƒ§:¨E’¯n…X\ç–'ÈP¶#ÆBµq¬B²ç1’5£c@�¥£çÁ+8¿º¼1ðåÎ;9@@°ÃÍZ¤ã#ý�ÁH< &4ºn‰ì*'ŸÔÞ÷ BöQÖJ:ó+LU«Óô2â8(3žî;°q:ä¸I xŠvIØÑCpû™ˆJ•O^�DŸ(·úê,“‹Ÿ˜8rÅŠ>ö}ð×VÜ@ty5ƒ×‹xG;W�=ôŒ»_^x;õÖ J+Ì2…VM wD6R{£‘‰FTêÞ;Ä*Ùm‚ŒÕ»e:ñÞÙ(¤ßôÿ ¹©–a u=ÿ³ŒfÁùS‘ùeŒ—›+ÔÀ°RbÇ×åÔÅ -µ:±�zy^+àǧkIj�u Uó3dãr†Û°÷·M*½dí÷WKa+gðÀ‡/Uf-¢Mô‡´±Õ»ŸÈÇÖRS½‚zÛCÑ‘ÒÏc ýûÉÏU/S–þ$ŒÝ{q8ÐGi…I[ޔ䦣í1§�ß‚o¢éöA.ÂÜ®—Ï·C'ÁáŽU;B—ûMZRnþ9Ÿd"ºZ �”ßì$š¬€èÎ æ9‡CÍ=ë1…" v­Æ×kï;_OM5·§a{«£¥í Àsú0Â4ø­@Ü¢^€ÂéîÂù6h-ÜLº»ù™$ê¼îޤH’5¥�»Êú^&{Sÿ/ì=£{E8jÔRÜoŸ=;fÐýt5FÚ÷UJÍ®'´GùªÛÚ bQmÆ7¾µè„8§üóµ):«LævsÐcNð«’ˬ%8ºJSçÔüv£·Š"°è©�w¾ŠÝ@o8¸Çæ‰Àþœh[^E†ù›Þ}¬èöÏhãiŽk�UP{AÎ2æ>ê¶(eùì¶ùˆÊk8<`˜ö�T©““2¯ê¨2U“OdÎU!öÁ1\\§.EtWL<Æ�ò"­íf$Ë�˯zo®UÑG,ÇéŒ;…aËGB˜ë³§8ë²—¿ôi8+Ryæÿ![Pî( ಓÚüeý–„Ë,–:ÚÆ^‡šÃë?>`¤SN) ð®Åblƒï°-j@Ì'Ër“žêÀ@¢Tü’­‹áVA�ÃóôC)€ãüvÔ†¿îp$‘¼TxÚOÓV8Œ³„;5 ù êÐ!÷SºLŸs$kþð$Ë›’Gz›õB”¼k”VT¹-¹» ôØKiI:PébÓµ ÞEfý2û§œ*^�8Ö”ue2b|÷Ë¡÷,ŸEç©ÅwgTw¬l˜Ô‹§šÐ-©Q3i•Ò"ETĆ1#ÝT|˜¨ Ô>wl6†—“ÛËF /žÁçÁõÿãæ“\/ë£óý(Ï´ý³ï’ ãŠP’-¿�:¬Ó¢$Ÿir—5½|Ž2¢ØJHX‰�|KžÕ�C­ÉÒÊJ•ùv}'hT$‹Í§‚ÓnlŸN"™°—†r/ž©�`k0ó—葽Ë_…Û]мÒ1¶Ï7�ÇÅ&Ò†}ïM§�Ãrê"æB~ζä§Qzj(¿õ˜_dñ†˜c�uËÕ8Ô­‡]Áwóí�6‡Î/)"%B¯+¡kï_É+�=¯\9Ü÷ògZépìÏg}ÆÃJrŽ'Qc`„¾Äµ�³ "�ÑO{;N‹öý}N�Müg›*«ˆ‚özŸÏîËîÙ4�§º`SUž*sqÐ¸Š‘à¯Ë ãŒl-$vvg�‡žÙ”,SD`� ñrUj¢©Ù£RÜ[@*êC›!¶žU–šçL 4³dâhTa{¡Ün·Æ�sÃ÷‘³xíKøU|Oܤ xߊ€žããÇ,¾„7à�Ò³jŒë×á�qå%`ÃÎŒåFT|›I,öÔ]+NW¡?%m~ílò÷Nú ‹Æ ÅÁÍ­Æ®”GAQfÍÔðPg¹]{zW„5cÞËêñIÚYs‰)&Œf©%Ó®ºp@l9¦·¿07Ç›êœÈxi¥gæb„P ¥ºTÚà *nRä‰x%ò”IÛÕPôÓ¨_ëÜ=a§èk>¶ ¿a³ûE‰+8µ7ïÅãRÝÆ2[�11Yö]¤lpô�]ieu!�k½°C­\õl–Øx�ðþ8¶�;76¸›¥9NI‹í´=ªÜ÷ö)^¦�aÀá¼Û]Š»1¯PlÏœ�Œ�ˆ©Î¾ä2ïJ[]¸|T—Ûš¯=|¶ A[mfzô¨‚ (Æ"ÌŠŸ uõ‹�_ `"qŠ @�úu m|Õaðq¦A€wŽp/¼]½ ±k÷ˡǛ‡ÄÖÝd[=Œùæ_ŒnowGVT¢?Jk +O¸üŸ¿ÐO´ydËJªÖ8$Û)“¥4öé¾!lµÞˆ$ú?{’ ~™Ô\þp}›åÄ,ðõ(ó…ÀÕTòil0ž’pë·£ ‡E®Gð…ûõ ÷Ï-éÎ+â˜ÏµZàM¹-.ð \¨1 ¦·üÀLÈ $W VÅJqbúöà^Û‰ ÇăçºpW-³²]o�}=‹ç¥ÕÀ´¤Ñm"–÷-8�Э¥a# ©Ö.ø»³hç˜:*öÐêÐçfPÿÈ&�Èf•+%‡4Ma?ný©íKqöKPî0B²<õÍÚìqµ|ìÑð†îiàÛ endstream endobj 1673 0 obj << /Length1 1844 /Length2 12705 /Length3 0 /Length 13884 /Filter /FlateDecode >> stream xÚµ¹uT›Ûº=Lq×â‚SÜÝÝ¡¸ $A‚»)Z¤Hqw·"ÅÝŠ»w ´øG÷¾çž}Îýýû�ŒÈ|t¾s=kåÍ-¥º&‹„%Ä( CY8XÙÊ*30'‹ÔÌdàdegçF¥¥•ršAA°´(àƒÚÔ, /©ÎNvvTZ€ t~qZÌ=*@¨™–§#�À`öP‡¸@YÌÍ\^Ü@°5 |û’"qôtYÛ@ÿÔàbaùSéO¶$+@ÑÌÂâîb˜�-Ь*¬Uˆû‹`€€æ@3{+Ä  ÔhkÊhhä4Ô´Õ5ß²¾Ötut„8ÿ)M-m9f€´„ª– ¨Ã �ÓÖÔúóª¿ð·f¨j½øÿôy ü“®"£%¡¥¯.ÃÁöç7 ³ èOÛÿâF÷ ðoj/©V·¿l PGA66wwwVkW(+ÄÙšÕÑþ/~Z6 €;ÄÙðòî ´þ%Œ+ØòEN¨ ðï  ²‚]€’d!;^¤|Iz±Cÿ—Ø‹Ð?5íÿ¸�ÿÑÆÆÌå¯\euue€ƒ ‚ÍÀ/�P3¨« Àô/ÛËhIÿ7A @ÊÕÙùO•¹œÿ·Í¿¨KB^®ÌÈÞÛ×Ìý¿WÌ ìêâõmþó²- `� ÔåïŠ@€Èø‡½ËŸ5�ÿ²©H¨*ÈÊhj±(¿ ˜Eò¢˜êý+úO= ieA?;/€C€Àþ2¤2`K)ˆƒÃ kÔ?òIƒ^t‚Bœ=ÙþÏ\Û�!î`ïÿk·�-­þ(oéêȦ 9¹¤ÿ'úÅ„úo›5 `�@ ¶?íþš–?fŽ?æ|½!Ž+3{ /È øò†êíbæ@�]�¾Þÿtü'BåàX‚, /ƒþ²YPÿª®¶‚þ6¿0ù—ëF€á¯�úöe—ZBÀöžK *›*ú2 ÿÿì³ÿê%ëjo¯jædøoIÿ;ÎÌdïùŸ‘ÿ¢ üC–Aâì`fÿ_>�‹,Èh©‚ZØü­ìßö¿{I€­í�nVv.^ο=Ú¶•ýËü¾œA ?GØ‹Ÿ�ç¿|/£iaº¸¸¹ÿr_äø/â/kð‡6€MMWM^_‚éÿÌÎ_a2` ˆ%l àäá˜9;›y¢²¿ 'À›ãe¶-�M €� �¾¤]¡¾+ˆ3êŸUå°Éü1ý…øxlÊÿ‹ølfÿF/‘ÿ‹8ØÙl–ÿ€6à? '€Íê!''€Íø"/ØÒÜÞåaÜ6›@èß�ã¥øð%Øùð…+ôð…¬ë_ð?eTÿsœüµSØÿ­ëÿœ³aM¨3Ĩ ²|ùŽùGˆŠÔäaÈþ2æ/ö—Ç¿>ÿGÚïÐdKJB<¼Y¸¹,œü.þŠœ<¾ÿ‘kñ÷‘÷×{€á?ç ôZ .ÎA,„Bl“CKüdò¾—"Ð °—ˆê)~‚_LûÞFJ$�½EËløB—Q–4öK êцàÛ?­}M¬˜¸²|'¾mæ§âGŠ)#1’¥ÃªôEe! ôÕÛŬ\ý"î©/-ŸZÈÚ#‡Rm·ÑœãÏ8—Ÿ©ŒJ[VrÜ f8š^;Ûãz,`“´“.|o}¾}eÖ-±È8mšJ0¢ˆèØÕ�·WþÞW,ãn™ØE@0>f””¿«Þ *.óÍ«°ì‚k„6Ɇþr\‚(—õ‹°Øöõ[£}ý‘_Å1Ül:Fð�§À~{uc;és†"ào¢£¡*ÜÉØÚL­ù>šx®Ðáدê�Ý~Ž6r[iIHÜf-Ú�W|ôÃMl!RˆâccC^èc|îE:Œ¥0`POÖìȧ¶‘±™ËjŸ„S�pΗ‡š×=ót?õôìÁøy@ é–Oo·J܆®‹-ž¹”àë·’çœÅÙ|VQª^Ã=tv FöEZ%Ò±ca¾tÊŽ°¿ ‘ì�&»í´½ž¨® ø‘}æ¦�Fûf�Q+=îjO»{·åéöçÃ.©%ÝPgÎçvue2–(#4rsë>¿„Òw»Ê¨ñKC�ÐÄCd’²‰ñDàHa�fÌh¼¶a ‰ð â7”3CÙeü[Y¨ö ©îÃw(Ï´—û'֢玻T÷þz ®-¸™AÅñ²ÈӮ⾭†»Y:]ã1n§»™î",,Žî/÷›sN¥@C8ƒn²ƒ þû»¢¸Òn«¾/ ¢eqG$W¿ŒUhNþuVö'\® Ì¥ä}á©,Ÿ´Ì(M�†íø"Ó™Fœ¶mxŠËŶLɦjøÐ‚ò­bw=ÎÙj€‘ã:¨¬heõ�™³deÐk“¢DÝdjo�4oM1^äÄ»G¢/ê9ãà˜¨Gõ—OGû•7r6É í}�}0 gW ÐJ$]0QÖâ¹ôÌÕõ±~j[>Ǭ¸WBfò@Ü>�¨º³à�¹m¯Â•H¸Ù0EÞi‡¿øRÊþ¨°üc=ó´b4ÐN8äIé(èñZj:sK¥hÊ"ö±[¾bsÕÜWcRçæÚ×qÏaîBeÄ}Ø:!�auÞÖµi…æÑ{ ¼Ÿ1ë\£Î-d¶ÈY%%l¦£lsä·üŸˆ‰>ÎàS©ùÑÚªf³„Aªcœ ¿¯#kcÅ=]¸’û‰‹™à�ëâvÖ¾;ÊšÓ:ƒ†ËnÇð©l»wInœ`ssñ³=¾:bÔ_<•ýÉeþ£[Þ¿=}ц�ܪy6X%Öõ<=y†€ø& a{Ðk°È�@Ÿ„+ ?C7ÜÁß»âK{È/±¼˜òw­æk¿Ó·Ùº-“¨RŒèÉô~\£¥3×'ïKKËžo]æNÜ~63¨Åùå Ðz¤´?§D“Y‹ÛNóIM„¬E‰\…$SÀ¤¢…o&�é/Øðf4ò0Ǹý K�•«…èzó¤`:NÁÎ�$ý�Ÿ°wŸÖ¦wãψ”½“ÓU2ˆp1nÇxýtª cb§1E8¦rêîP�ÌPà­¸X͌ŪT” 6³¸ˆSŒžÄJŠ›ÂPcFmcÔñ€ù ÍlÒ‡“` ;ž—rû¥M/ŒƒÃEÄÿyk™gÇñ`Êí«sXãŠh”ôKÀó<‹à¨YŽIÙ�evœO·Ôߣj!b·7dõžýÖs(ÕoÇf*}ªú L*_Í‹À(â샀–P®Ýì…Éåe\’òþ×òõ&‹ŠÒð:RÔ:æ² ³‡Õ�»u”.ÙhÖsÛ€rÒ@[ö“˜H6k¿²ªºÞÓ¨>É0�Ûy£‡(�÷åò[8%v¤½Sô÷ÒܲÊr¿×Uãå2/¢s©}f~æÚ¿Ö«»ùìØÄh¬L6»`&ô�ÊÅ_°©Ô±jާÜ"›ù¬ñ5ÓžBåà½þʯíÈ[A|!˜ C]e ܚ윕�¥öÄ‚‡ÉX2ßÉîÛ‰P Í+BÑv2»!Et÷’dܺ��‚«¶»£¡ûõ ¼>¤eB�=âºóöý…ˆNy™×é™Éö&:lý °d@Ɖ¨±©Ý7(ËX2·Ä|…¾£hÉý©ªf±ÏkcïÑ8û9Óë$aèãïVð)ydæ�(™§R$6ÝpYEÈ_ûãºáœ™pçõçïõ´ÅŸÙëå ÿž«ž…u…•k¥…�Èš«[úóåÙ*à|õ3I6ÆåK±Ì}=�-¬�¸;œ\3!rÍ¢ÛnOb§™è7¨âDˆüa»x‡!Jsù8¡K,<\Ê›ße@Ýœ¦FûM÷‰©.–Þ†ø˜¦KüfÏ©îù{|«|‚”氥х7ëÊÁsVÈia�ÕœÇ.™™ÛSgzbž‡r W�O 5@Ýjkó×@¨]ÕM­Høo+( ç˜d+ÂÄχ÷¼U#hÝ@²_Ãjøô¸³È´×ö¾'°±Z“çú }¡'¿˜™U?vG�_ò<;à¦Jðå™ÒÄhÀ±Ó¯äö\zI¶�:CzîÔjYs­ÉueFXôË3«ÑÝ÷¤O<7¾^† Ñ'ü|«$téJµŒÔß\óŒá×*�í3‡ïrîQßÒåú¾Ã½cJwì–’Á×nÉ<$=ÄïëV]üIˆ�G ÷Í™6…ÐQÆ‘/ WâÌ‹ØXNnèyUŸÏ -©&<5³áòZ„Np ÉÖxÙl„¨»÷–¬–¾ÿ‡ò±lœŸ­ðr\˜ kïK«3sß�¡ú ìía�ÃâÐèÆKºþ»<ˆÕ$ugxÈÁ”o×óõ´í&Îs~¸LgÑ3+úÐÛ±[ißà"±s”ª¨rS ßv&sWt‘Ñ¡,Jj' %jiþ±aE?ZIK ÿÁóªàPá•ò<BY÷(NØé™Ÿ�c’¯5É‚¾‹šøœGa+.²�´Kšy­µ©m²Åè““Aœi6&%òN:O³D ¯~‹ül)Ì>Å‘é Œj—å[â†ÊMñ*÷'°œoñ2�]Æd (’2�dz`4:¨^›Æ:(Œr_º9ZªšÈfÊ_W0|@²}"àK–np5^DzSI$_TR^V+Í©L²a¬kwc­™úE%ç7=´OE¾£@ôZ F�(Oþ1_ÌÓIܰVÂßü®üWÊ‘ièb†í¼O¡bîI¿gü^�p/z˜d}ÿnBò´Â»¡*—·Œ§¥#‡ÀDî÷5RØ‘’ã×ÁÂÙ]RCœÙ{K»G¿Ów1=wùZâ~¤]Ý�±QÛãkW½�Á‘ÑžÎ'¹âØB%œC²2:kA¸r¿,¤´¥ ?3Ô#ñÖ”ÞWä®AÆô?ñ´®²ØZŸ‰ÍOX.ÜWšeýê¬YCŠÎžëüûQOú�Qg¤ö�éROð}” lž¢šz Âþr¯]‚Ä—„0;’œLÇœEyãê`¹înêëu5æzé]ì¼N·½¦äë ìk,qslj0θƒ4¡YÄbÝ`·_�å™�ï’ocy¸ÉóŠ4î£ÃdPv ¤&d=Ø÷!Àµ†á=ýúø¶¬�Úß,‹‰®˜äðÈe ÝÑ Ù–-;9»+P—K²àii¶ëX‡F¸ªaü–-€vf0ë¤w¦ºÈ5L�'ä4N ‰5ÓôùŒ¿ö>þòe' þÙ²Q„ö¦=Õ½àjÀ)øjâ Ñ´eÔÑývÒnìà'Δ \‹$Wk%F¹N›21h  ]©šÏå¨n±ò}‘“ÎñÃon­{�ÜØäÝ¡LSµg‹¨Œ†Û£,†Ž 쌢7òLÄÃÞÌ�,³¨ó‰ò=¨�Ç&Æï‡üà¼æb63çÃÁ-ÐÈjÛÎÉ^Nùnüêi�µmÅ× ¶pTû8WJÈtCå¶~BGÔU‡ô~àÃÓF¸CkO°#ï€%¶4cÁm®"ã$N‚G.ÿFÁìë¼r²ˆ‚ÂZ_=íqd¾>Æ´¶«Rã«äûZNy_G)„Áµˆï—,ÏØ©^ßjÃûÓú6¿Q¼+’zm†ØBÐ @Þ v/­]'‰°ö i>Ò$â7”zoÄ ?5†±ÍmÓ”ÆCyBÐŽ…äÃÎÈh*ìëâ·v$‰ì.µk#ÔÄ~ÈHe?û¼;ì0}×o•Øìÿy–±-˜|-ÖäÍjI,&´ VȚςäS!‚´¯Òò;{{–üÐ�xî)!±ß[I ƒ ×úÔqœ0Zç\ÙgŸ»dêée�G^[ͱIóÛŠ£${Þßm>}•ëCßÿFt©@U ìÅ—"7ÿb.»¤D(j–.S§‚XƒÛ-x„ø–F‘µìi`tšì<»y¨ˆ*:lƒ4o3qW?òÙÎxAÊ�¤½çè"ÝtÙuüYÄ4mMâ;©þí–6Y)³’èô¥_d &ôš¾¦å«êqªgWGA ¼SÓŒSO{3ä]¦~öÎg¦ö²—_À�ÉVvÆoKÀô«‘Ôä{n ×)\`ÝOñ ?Ooʈ2Hî~6l¯uµÁ|QÑ7æ‡q�EN£ÈöÓ©WÅÁâòÝW^½Ë”§¡D±Et�œ¿C 1iÇŠâ�§Åæ‹ëìý!(w×ô¼xÓ¼‘cøÝ0úW•‰n6â[ÍfŠõà M ~?Å ­\=Z‹ÞOKãr0�.l˜'¸ D¢g+§vqS`#%Ânµ'óì’ýˆò3Ànܾ•1ÍÛnfS”J;¿¨Ÿy¯Rã[ËNURñf7tˆÙô�3εC,9�RQ.‚ È€V=BŽNV&œþ‘Êê'�pwð傜Oˆ¦êã–w«Xes†‹Ö*¨þ¤Ò‹y¾¢åWzŒUá¥ß–î~,÷.PuñKô»‹­Y\Kg÷¯ã±50vÍ‘¨aW€'iûÚăw$9}-Ï“5ä 7X�Bj¦à;åV$GîÙpâÈVc¼p­ŠNßÿãÖů�%¹œÜ!œi)Šô»Ú)�²b–µ±:RºDìéÍ(Xî‘TÄcâùd‰è×�Ö\ijÏTü!Ü”g› ¦K“vQPÚíBéÍ3Šü�‚›¹cš\h™ß[G¾²Îôòrëbyu¼º9+ò "}LÀô“�Z‘Þ˜£´nëå–•yy UR×ïsœ÷“ݯ_ôcÃóðuÈ”¤Û4}ÿ@“ãaTq•Z\|>f_ G_a‡¯C_HÊ2áÌý¬`‚Á-‚‡èœz¼i)ƒîÛÃ:›K…˜™eÝéÊ’ãt£Å�ôÑû{‹"Cî-äRÍ0ûèt©¼¶C Õ›$&/hY ¥öÎ\ªkþ¯Öíý‘Ù}ËÎë é.$Ä–†™2Èìó䲺™·"îëN#Ö kt4IL¼ñž$¿¸î�KðKbhü2Le1ÏgI�…Á_^"§šyãô6 Ž¢|NfÚD‡Z68^tq”‹t|?mY�1SùMÂWtYªCx/žBÀ­™_Ã=Q‚¯B–\È_oŽ)o�j?(…865Wßèwrëß[ÚÈk±ˆ¦wˆPŠ ½QàLÎ ¾©û¨˜'Ž1‰Re$Êåœþ˜w2Ü)÷N®ÄŽåV5A¿}ÿÅ)J þqÄ`V|óÓ^ìw”ï:§\®ƒÝåš5Å_lÌ1Ü¥8ø½�B×¹]1©•Å%–”±ÛÊ÷ììqO·ËCzµÇLÈ�¹Ê„÷_IࣆøtˆW¢ê©-@Tò+YU¯!D-ˆ|±è� ߉ÓÖ裆£�á•W‘ŽØKŽÎPJ‚0Ðáñì�Žò¼x½„Ð%êPzíŽÞ>è+$‹ˆ°ü°üŽó`T Ñ&Ü%u g—¬ZñŽ3Å*/?]! ¥¿›w´/H<¼|¬æ/ÐðY„ã¬OäÏ/›wcfDÇß m²´nÇúˆ½ÿÎå‰à·Í1Lu«j¦ä´7ëà›â„‹yµÔ‰4ÇYâÓ·¬E�Nü©À÷Xý(ÛV5Lyô*¶Ó•;: Š÷ºc®†…±|íŠøa§Û&”Í>Ö?2žHÌÞæâVJJ¡F*ɺî¤Xd‘g„ùcÿì<&ÙLåj«*íÖÕ¦……pŽyÖÛêjhøßY6é’m~¤<‡„”×7¢]¾Ð�8í_«ÈbÌ®ÁŒûZ '…ÖÍ#Úÿ�}µ Á¤`).8²ËèNhXQb=YžÀÒK:âix÷)áC‘lj™@2AË�”›”>—ÎÐȯc®Ž¨ãÄž‰¸ŸœÅWDÙÛ>3î ìq-Ü-ÍÎÈ¥»CÙ¥�a†wAxÓÅIm£¦M8õ‰ºªéfR2U‡7se¸¦éI¹ øK¡¹ cêNš®é4ž¯ŽŠ€*á0ü–qÅîì²×wJéWìmác~¼¸d‹-ŽÅIÚlÆj*g‹ú» î.çi›«Ø  Ž¥\ð󖀿×ÌŽ¢ $/Õ‰J´~gQ4¬¥{îý ùÜ-FA‰BœÔƧ•Z|´zçXž "C4, ž¾¿¯²D@ºW€])ˆ£rjºsj£ÿú„B _~¥äOÓ0©ÈÅÏxÇÖòR|ß~�Ýá #.¶à=á7ž™òøï ñ,g‰}\1Ä»Ê÷sm�_dÐ\¬6ÖŽƒñϬa¡Zojq‹50êø‹Ô]rÐ7?hm6’~ Ç�¤“Ið ô’hLy‡D!äÄÜÚ:PQûFì´4SÁ|AÆÆ^p±9+Ë·²ÜÉB�°îkؽ‡ô ÜË;–ën}™þ9ÔÂ=cŠJ3ŽÝO/«©•2-éúóps$SÞ}Ï+ŒC‹ #I¼ì’ºžBMÇÎImºÿV>²æ�aÿÔ›Ò¼G|{y±Cà\¦‡}¿ Sk ·'::]#Ö5J›Ù´Q‚­qAVA¶@SsSýtý³ÐIÔz¯3ĺŸpûÍ�†"û2ÈKÂø,ô1ýiXO(�öWlÕ½Ò,JæL®ÂÉüÏF·kjç'6ÆþÊ׫¦‹ÒzÍÓO>¤éÚ2¤¬~»�pæ%{÷ܶWMÕç0RúƒExMQ®Èƒ(Ý•1º!_ç¥i®Ç ŒA[Ÿ×· ä8ĸ#þH.¥Ë]é“ÎHÉløä@ͳ9ÜY/â~þ6G-ÿBo¬ú_t�Ίœ7Q’°‚åŽË¤èVšoÎý,³kvû‰e¨ÞrYùP™Î7„\'¯Ð]ýØC‚Ÿ—‹Øn–YíÔ\Åívx¨iI†fÈ }wÎÇ–7¥w- Óôx•Z6ÒC*-<“‘Oèägà:.|)¯m#’Qc[!!  ^¯k…•‘Ò°ÊY#ûPš6�+¿–û¹¯®Ëg{NÆRÀßlZvgé´«ŠZˆ€°‚¤2òç²iû ÔøüÆo¤˜L™º´ú¾ö¨ðµüÖœ^¢ÆØG3£ò�ä 70^)̸½Ÿž7ÏΙò­ŠFÕTç’É‚{!ÌY²£Ý²>îfDˆÊü=’pZ0ü=¯læ6-iѸ$ÌM›Ñ*ÔL+Á<ÔªþíÔJ0ü¯âùºº�uÂÜoû8¨ÍW–ñàÖ Ï_}N@iš ÍIÚÆÚ«ó‰Âõ·a8¬çxïyò[äcs1ŒÞÌØÌ¨«¯µD¥Þi…lïA]“a£…î÷CLÐ…•Ü{áW9pº‹ëÞ:×ÈDFÞÑUzªðX U?O÷d� Ï”€¯—Ö§¨úìø¨õ6L´ ÷­Ø¸j?|¶'ÝDF’ÒúPÔŸ´Ô|Ę*»9Böo¾mµ+^-/ßxµåæIÜ!–¶LŠúû ÿ )c´Ü´"Œ§SFiÎ[ƒõ €'ID!‘}èÅeeø ™ûŠÀn‹¸7#BÁÚóÈB–¶[ZÕÜpîý 3$ñ�ÜR0 ÆGW6´b‹qÑ¡·µÐHƒèåLHxÝ|©óA´åÂ×IÚ•õ´iéÛ-¦“73•íë0O¼> žX¬¨n›=ãCr]Ã…ó¥Í$5ŸÑG–q÷jœýüáH/«õYÏdû ǔ϶½xu†jQV ¦îÉJ)lƒzÈ_*¥_S ²;ie -$u÷]H°7œ@ààà§ŒA Ë2H{íÊo£nd‹·^>sNþo‚€G†e÷y«ÑLÚ}�ô6wƒ¼Oz á::OË|b‚èz¯`P 5Ű[z[a~4OZ£h´¯ž±3Æ”b>›¾~P.ìù™æÚð‘€$sʳV("UYnǃÃA¿‚«Í8÷×ÏâèîS‰Y¡r+M ´ò^��¤íiOF\úµÛ¦• Tã˜y¥Ýn�¾Z¹AüAcí�ô4óÚôó‡WkË`U%žpµÛ`Û£üŒÑÇ0ÚÃ:Š|ʯSéí¸ä “µ>×Ú@Ó´þdªÝË€ÜûÊÉ«¯óZ~!t%§DûÖ«i£†ë’Sé+G1IwÕ¾©Þ½­¼ã·4PkÚ/çfÝx. ó¿Š�>åXo]=˜#�Ô=™m UKÕ^[XÎs‘O;íª©Ý󸄖¹…ËUFÌ¡ßó7Ø\ß“MÜ®ÉYxX‹¿•Ó.T2ÏÌÓyèD™ú©D¼`8ùMU„x—™û°‰¼<'Ø9�}CPŠ'Ç2lÜ0ñ QÒGL�m 4å` [ºÀu9,¶Ÿ\Èoä fæ�f´šüäT¨ßVØ™wÛ–†‹í»ŸòØ»³ì 6ÌZJ”FA%TG¤æj³šµÄðó«)ªñö6ÅÍ‚àµ$©d£Ú¦éTëDtèÐìM¬FsH6´·Wÿ±W‚±ŒÓNwþ®Õ?Ff„m±”µ$†ŸäU‹²*ÔÕgüÖ}’ÑÈ{K¸ñdÓžvcñ‰:­ï�|l¾ì'æíÖ×,Îþóv·ù(ì�œ»é"ÆŽÀ³ ¤aiÀzbÅûÈœzŽÔ˜…im0-|–|<Ö”fßü}³0%Œ|«Õ î�~^[Á€ÜbVØŸ"›zsX%n1¤Ö¸4�î~.€ïK]æHׯ:ÝðmÅbâŠ]³ÐK‹xø‘’˃?+¯R3ÿ â¥,]Æ.ë"‚[rÀ3«m*`†ÚöRõÒê ô¤9õµ³Ë¿¥ý–\gs¸KrOó=ôܯ½á¼:;ȃ‘{ˆ»Ï)}Wáæ qq«BœbZ[Ôhº'�kŠúfÉW²Ñ#»~+lÒ ÙøëŠ²öˆY ù¥ÓÛ‘i©æ)vÂ*L·ècÁ �Þ!3ÛÎuÍïaº0膲S�ìY¡pk°=k.äkEYüCI’V­Ê0à×x°­Ã{ÀK÷(îU²&‘졨/5”à%ï)šñüGƒ$"ò_F2ßߟ抟[„¼?p+÷ÛKŸµ®ùžV+êwã"ƒ‡5ž2©2f»ˆN¼GóÖ\¬¨R\c™±¹ƒó&qO'Š|`Œ;:dävÿ(]ýUœÉ%EHq^t¡j\˜|ßñ ãr?y¾‘÷û¦ÑúÔnpu©þ½°«ÿøM×yÞ¬R˵((Œ„Z<:Ã!4é9ªã;ø@çjÃ�D¸ȆŸ$~_F�)äáƒ.÷æõ�Æ�ïG£Bк–Ӄˋö§� IÉAãI¦Ø¡\IÝ­UE¼ý˜'3òEö*å«KBuu­üzLŒ‡‹�³žGž¤ÐàHìô‹_ª;øûŽ&È+û-´É(¿:= št2Íj|8”lp8¢l&FFâ1cUx;õ·P§0º<«AUÎ\þ% ÆÃƒã!›j)þŸ‰%ÞT}„ cÿr$­ú~Ó…§É¼ß¿;× ^:ÒGQ{ðŽ¿š'DüS–y¢ ¬ï÷ÿó_B°Áƒ!¢i쯾ñ¹¥<ÖÛ½�/ëKÙ"’jõzW}öM’Øý,¸3(òþ{~¨¥´:މm¾&Ï8?’:ä§n¢Š†€´„‚.ÙQ‹3âPïû°GÚ¯|sA”ë–­Û1Êæ©U„:µªd�¶¤Â?ËPp§7<£Éâ-æâ8è.®#…ÅHY ‚ž�ëï¬h4.%ºÒ󗿯?«³F™O&pb �{Û ËÖ “Þ/tåy~\­Ä˜Ð¤ì/1>~ÝZ·ÍÅׂW›M—F1Y–@Ç5&dÞpP7âHOî°°kã4ôƒ³ÏåiÃzùÉ‚QtöÙš&�á5“×VMCöÃV:?Êzè\Â5ÓçðhöjôοÅlÿF¾¶±K`×J‹óäf“ð@ÈTVháÇ!é0º:�ë–bBˆEŽ�’d_øÝë7Í=HºÛ®pÕ¥¡ãå­ÞE.†Ÿ±Šrr^µQOŸ´ñO¯‹›�WB* {ï4PPBsCDt0WG�jžUty¥jF®ß%÷(y,Š\ÉÂ6!„© ª©ÈVFûJ¹:÷Íg¹V « ëµ½4[Ê'�O§—õ¼H´xìøñEhÔº?¯D‹õÆGeüÇøaøƒ m•Ï×lOt =·áêõfÐ`Y1ÕŠ¸ÃÏlFÚ< -¸U.îSå?ÿØÌÑY=Çõc+®ZÛlFåŃÇVÅq=«Wîí笙�j¥HíûP9R(r;•x‡Mnz¥I¹Ž7Ù¡X½/ü ‚õnc c! áHØñª°|¨ nÏVQ¿*Ià)Ãõ{Cøþ�L¶Vº¯q�=%å5"(¬d�;¤’ÄõBÛ%^ Ô™VÓ>*æYë{Š¿ËIRõ0îUV��/«–ZÆ4³8;½”ž)wƒØÍ‚=\#r¾¾}uýºG)æëåPޱ�nlóävü²²1dE™é^s”|³Êƒ¾8o¦Ýß0ûMà ÅÛ+ˆÚýêbÌmý̘Ž@ב¼u}¨ ù⇒o?FŠm¦5*ºPuTòÙ;?Œ-;lpQR¡„ÑYK Q-F¼�’ ÿ¤Z2¾`¹£M¶Ì{u7Æ—±æQ5›|�Ü]䑸´Li†P.Má*§Þ‰‚ùÁ«úíîÀ;êÔØ^Qt1Àgt™×°á©Hµb037Ù‹Mªú¤yò­Õ¤nRúŽÆ€EÄŸLºŒë i‹}?šÀú9DûcaNéáû3{?:Ü/1ܶIJÜýé(7µ�zp¾Ôº° ôIkRþø¼×û9?¦÷èklb¡&÷j™:ƒÙ4ò=RJåãÐ�¯¿÷^3ʼñ‰t1ÃÉæcõL»Í82¿¸ç·Ñ¾ÖþL"gqÕèýžJ¶43Ø_ào‘g9Ú} õªÕw ý}J;�šÿÀzY]‡Nük�÷à¸Ò ’ÖRˆ¹­dÚÙwPõ¨B䆘KXò+"n “P£«ò•Þa6´�^"ra%@bæÂ•’†ÚqÈ"JÛÙ7' u¿÷$ê®JÛ°éÀnÆl¯‡žÕ–Ø÷ÑÕÔ=—Öê$q”Äu|ôÒŸ{ÙåúµAØ çSt¼ÙXRtDša@ØE/ÙhŒF:¹a>‰ð�$Vpð[t8“á;9‘ù™¤öÔtAŽ%j÷Ë”|ý�èé Ò ý_$ ?²÷µuºæ§K³ª¼¥è¥j˜õ£¾¼_[ïªtÆ<­€mÄ£�ÚIŽF889÷Ž�˜ã¨PÐý�HML»E8d¡WÍÛ�P’êM` *–ŸÏÊñhNؾ[Ñ Ö/΋Ó<g²›‹aÔ¤#sX…SGXÔ²[–^®ó-²nÙ@ rK‰*<º¼Ãâõó«ÎÂÂ¥®¬ ܺv¨ø3ÚÃ)®à5tQ§$›Q;ûl¤.¹Àd‰ýè¼ó<³Ð¤VUœÆXÀ¸Z$$ƒ…ü›Ìå§r!ýw ºsÌî sÛBúÝ…w%Çÿ�¿‚¶~[þ¤Ó4ºï^�0.�Ö"†„WÊ•œ{°é¤· Èh?ÊÇó H#µZ5¢ü2ŽÂ_õH¿/Ö½;Nn¥uéžÓ±Xûå‹5Ž�tZ¢‰AddðŠIñ÷†ÔʦkÚµáºõ 9 6ü&;‹­`ÂÓ»Ÿøµo„xnˆÝRdYl/æ :Ø]¯Z:ñ¼Ÿ²³f’ =ìg«U„‡øŠ°ö[n·ŽàÎýQ.œ‚ßNÀK¦´Ö~Ú` ’Y�� Ïž†ñü(}ÞÓ4faü²{íÒZ _[„žù)7 P*.5Mk—ðEþÜ+=œ®�ŽŸï}sà,„3Ê}¬sànNö˜p*Ïi}^ç�öІh«ž77*ÏG`ÅòÁ¾n ÓÕm(ç‘Ô­2Ÿ»æ÷WÕÜ™ðÚ3oª·-•†6µG¥ª9apr÷ ËÓ§Bv›™Æž^Eœ Ë1­xÇÌ”zÝ,CèÇÌSÇ^Áoo¦± Þ•˜sܶ³™({UÈRˆ]ž]b<õ'²²~¹…(ð3ùÇZ?÷,+u '+Å¥.2áávÇ�¾ªã •ElJºÆÜæ�ÅGrƒJÚgrRàQ†Á{ú)ä‰Âó4Â04­øÀ­C(láñ<.qØ€ï—É(G‡”Í&ó‰£�u‡m7w¤l«ÎiÙ›½mŠT�+u5Äá„ ˆ24ã!ó ˆÃO¯þõÎ B™��?U%Kš+SXÉ38ô ¹Õ66áÍ+¦î!8mfê_ï´Ѷª _ eí�1wYºA-Ï;jåd¥®£„Z#”ó–4fU˜•¢œ‚¬…S5–º%ªù>=Œ¾æXÿ.ßÑì³”Iœ(Oã+^+È·^æ/±¸¦IGðA…ÜÕ‹vF=¬&S<Ö=&æqTj†1€/ƒàlÁÚ;MN ßk"¨´gèì³Ð½ãhÁ V�ÚÓ UN#éUĸNX£éz³Ëds) ä[FFö|€»ÔˆØâ=Î`ÞôÙÝ€ï‰OÏ*UùE>Ââ�"Y¼,Ñ´xqríü8b°Yâ¢91l�|еæ4ò[½ú?Ò™Uq¡©Y Ývåµôq»6¡ç4‹ðM9®Â¿[IJ€çøÜ’«{²Š`À÷ baX­ÈÁ˜Ïtê£õn|gï ²¦Pö�ᵘŒuíín”6ÃÆjšÎFcGæÙo”YûèðÙw%-Š9~Cn]j8Æ,ïfÌ—ý˜Ìä)<ºTÌëj> IÒÑX×y8ŽX™3@UÙ8õ¢ "~à!Þ‰n%ïUæi^K쾟;A©¹ñÚ/•ˆNÊ\4ÒÛòÛ¯oÂÈá<Æ[$rtjIbL£y’¾qÑ_±¾eù.ü*Ò)Ãb±ŒóðÓ•Ä8 8$™r÷=K½YZ>Wú%X"U[Z;–‹\{(ÇLõÄlòÃ$L¢Òê°”ÓþƒÍ³ÆËÞõç�A­ýš™ž0U?¾¦jx«Æ×9Š rÖ�g•68ÿµc≦ndüwøBf£Ú�aÏ_| ´÷´‹»T6ʨÈRY�¿ª ÔªàÊÇ2Š‚)Ų�×{$¿á{W®Kø¡AiiöîÎ<⼡¨Sº–B4Z¸I€ý©g*~ÀŠÁq6ç’JÉ…î…�$c˜Ô$.‘¶`„­ù:÷‹÷‘Û…‰C¾&ECŽ D.uþ+F&œpºËî¤ó…Ðy“úМ�WÎ{Á—œÊ…§§{õwá-VæhÕ±ÀìÈ_6ˆXôÇZN†�±ä¥ß #ºßÈGÌVlÇtŒ|xdy£nq¤ÄÄòA‹ø;ÂJS9Üë}yZö'ù«œ@OèG—Háq6̓¦‘Wq,A?Žìº¦,ò~¥vWÅé@ÜØ�¦ß,Õì¨=«º—][ØÕÕcéFfÝ8xÌóß}x�Q¦¦†\5Z LšÌ¹|/K)Ø©U"5÷öŠ­¼q3ÞôE@žäÑ¿F<® ”bŽ“ç*�äØ+ Ew–è‘Ô‰ƒe9ñ4@8xlе�õp©{ ƒVíhõǧ—t£™Ÿ0~Y«¸[lÛ7fôS¾Xíõ¤eIÔe)7Œ¨ ¼´²„™ËÄc,¹“F~>£³ùñX¡}ߟúâ�äïH¹.{“Þè tÀw±çJ7¼—ª’Ó…j>'VZœ’§?eáKãLç#XTJ’õì!¦³OK�¸â#œ^Æ3Š�‰ xߦ3Ï6*£UAmürÊ^M^åCŒœÃiuÎJx‚ÏVåæH³«‹[þ×�Õd­ø‹Î5W1ݘØdÙ <¹;Ä9½¯{–ZV÷Ž[̲ {¢3èÙýË_K¦5ߥ™ä-×™|4‹–1Â+)½l‡JN'ÔI‘-w”š©µkÕÍœuô rYÓ>­v„ˆXܸô1\ O`'öhÐ 9ÆÎ�à¶OÉwN©X”x³z>en)EU³âN<0^tüd)?s�BÚ˜Á;'QÛ6Fæ¤\¸ú}Q§ d†_�xôo¶ýÊv™ ¥G\Då©W“8ž³;¿“odüaY)¦É¼=wt‰í½Á’¹£ƒ²�ç�@\m}¨�Äú«ÒFäùιVŽ"F~¼2†µsĉ(l>('mž£$RŒ’SæW§zß+í¨á.6�i£ã2oÙoØ 3³…³]8akí”:¯iÝf§ Zž~pÓ›~®åÂÏ ;Ñ@§á,ø’¡š]Õ? ÍJßõÒØV$j#ysïÑzI]ˆH³‰SdÓ7�z¬÷É��yžæ\“”D˜m�šÊd$]4Uh˜~; ƒJùãÖ'öš¡¢ûÖ?¬/>>o“›“>ó÷MbÕZ\­á“Ñ*í'uq;TåÊéam¿º ×o’‘ŸÁМ×ÛL»Ià×þ|Ñžá̺ÛQÊW¨·˜s¬òÝ#©�L•6šažŸ2󹦻>³`?h}7Ê2UêìHzàŠJ0%~50©•Ï*™Uœ¬ÁÉâ¿^ÿê=ævkR«ç«|U/à”ÇÙF¿[�CG·�œj¥-î|y[¸=!\’c‘Q3^CÀU4.Ú %N#«U„H`¹¯äxF8’‹]ëy~Š€1«©-$VÎ\~ŧÅ&à!ëK´ù‘kt'K«5¢?õ €SOÿù¦Ž§O¦(Êç3BGõ9_úبÆT•¾[­µ­Œ Õ‡¿–aßj…BN*]&•+$ KïQwölªqî)n¢“³}5™ íL“é…ÿñBhÔVŠn¹›"q�ª‚îÇ£EìÈ{%E„ž]¼�ªP=ü¸«A£ ˜ò‹^xjÚܱǮµ›iL½9ƒ‡G=!cÎúáJîbð»^—m-ñº:DͲô+TÇ+U’HÓMþ<+5¿çkO÷Ÿ„«û:#Ê…—_;Ñ¿4þÄàk0ŠÛšõìò§®ÛÅtd�;oÕ®ùQü)9¶  ±ÖÅ’©œE3QMî‡F˜S^âÑ` ¾Å×wwᣙ²äy>'2ÈTñ¨>ÛéŸK‰Ûª¢nGLsk›¦c¤õ2bù•ʇ؉o]ÑcQ0-Ùo¼ÆŠÅæFs|] µ‚AÓçâáIô1cÖ‹ºÝ}UT–÷b :C�¾ÍÏఙܯ)dÀà7ùöÚ;;{¿ï²´~—ŹwÌŠ¶>§Ä/š2Ø#+€,|çB¾¬üÞ¿qœ�åSR(«ŽC¬wÆþî�QX˜ýoßLÙ×¥Ñ�6ê~’AMóu§KÞ”eÍ›Hœ¼>™¯÷ŸçÚÌGŽ2´Õi~VYžCÚE�gÍ9ä4ÞÎJS÷ú× (û wþ}Ý›a� ¦¨G¦£5IAg£)$.e¤×ÝA>þ²À1Fó Í¢üÎC5›ÉgeÜ-âEêµÝël³ ž¯!…—^öÜDVòŸ¹áh 7á�ðˆƒjÁ¯ Þ=Žª«Dç•2· "ïK§ö7)o´�&V‰ÎÛ®óßKˆ00ZY�nÿ ƒÙÚÒ½a›“u´Jî,u…¹óAÐi�E0Û¬´2ýaš²z¼)J5Ä,XÇ4àÌñ©úKt•§&åÑÛ’p1΂ŒÏ¢n†œÇd¡N·þ”ÞdzœSš¨öyœá•ÿ} endstream endobj 1675 0 obj << /Length1 1683 /Length2 6433 /Length3 0 /Length 7537 /Filter /FlateDecode >> stream xÚµWuX“mߦDiD¸AI%Fw�’ ±á6ºK@R:¥AZ‘EDZi�V@DI�oèû|ïó<ßßß±cñëó>¯ówÇ8Ùõ�ø•`(¸ ‰å IÚ:†(wR‚_ qC@a!!QrNN4‚E �ª,\�À:zP,®  I‘sêp$� Â_@Ž…ûzÀAä·¡�Â`ù \ŽtB Ἰ”‡/á䌽è!ÂÏÑé¢ZYЂ@]QÞWAÂ-@å�s"p€;CÜ”#` 7LŒÀ†F€º¡ž‰¾¯®±‘§‡ ý,*FÆ&êwU%]c07½¨›_|Ñ8üNw]c\üb.ñ¢\l¬dl¡ ^<¼àh âbì¿°qá�ÿ…†+uD£Üxœ±XiAAooo'O V…vðpû�ÏØ�¼QhW÷�†»Á㉄áèÄ:Ãÿ4¸8@…#1ð‹"5ÔŸ ;ŽJ\Î�ý_`8"°=Ýþ¤8ücœ!˜ßµÚúúÚ€;�Ä‘$—ˆ…`=1€ýoî ‡qÿT<Ñè‹:…Ðÿ;æ/èÊ(Ü“Y»ùB¼ÿ}b¤'ÆïoÜüó±¡($�Ábþt„Ž7øzÌÅ™!�¿}:Jºšj`#c~mœð�ü:(;H¬öwöE?%Umi@RHI‰B8‘‚‘0”»;5†ü‚>UŽ', í+øoY»"QÞHÿÿãvD a޼Ã<=M�ˆ{žpMÕÿ$ã\äÿõ9Á±€¿À} Î‚Ã~kå ºpãHô÷@yŽ7 <áÇ}‘ûc ^p‹ö„úÿ=ðO‹$ÀP,Næ¸U!ÿÝ]鈤þ¸qHþ ýG<¿×”·£0ÒÍ€ÁÉuQXœxþ¶ì_³Ô<ÝÜt!îpž1úï4ˆ;ÂÍ÷‰ÿÊ0ƒ_@åÑE¡Ý!nÿŠ!0j8L�…:ÿáõ�ÿÏ(%¤“à‰ ‰ˆ ÿ‰˜\¬”N»¸ûqq}áâBÿŽád uEÂ1@DôwŽ#ã_¸q'p�4ÕÔÒSQ»ýoáüÎ#¡(鋉4âK.„Sƒ°˜àÂÉ÷ù-@P‰ÂâJOl àˆB“_é2Áß¾?&HDÿÍ13ÅAìoóŸPõ/Öõ·…þ‹ý?÷ØoÛ‹F¹ÂÍ0Üþ·�ð± „óã^ý²ùÇÎÿîÀߪ••Q>þübÂ’¿°”0“á ‹þ£úçJù-bÉÙû Àá>p(ùÔ8 *á’Ñt¿"\<\IÌ)%ðµš^Þ\ë!ÑTöpëuFÕ‚%¸BIhsHW J[CÚ&(-YfÎAçv6ÿ"µfèÌ@ñ3$H'èúU°R¾©€IXŽÎdHe;ï†V~‘E¹èhNËÃVÀ¤SEªµã(^xðœú{:‡ueËl!±wéÐsZ´Û5ŸI*æ¶ë“ÃmøØó#ÚÄ8H·Òߘ}Ñ}ú~-�®šÕG-ëòK¨ Aýí�uJõU-·7Ö¥ÀbX|@Ô{ Í!0ÙäÜÚA�qq¸X¼‘öÛÍ)E¸ZJÕ¾�ßµ jÌù¥x.KVù _}$ád+×àp¹¹÷¶y‘@èÆµÏ“Ÿ½Aʼn†yDzFWª‚ëÀl¶EÙ¹ 뙣+ãèì•ï]Ÿ`…Å`ó-y0a€r†`Û€çPùÔã· �‚µª{ÒÜ•IÂßHÆÓ ·3?T?²ìóu¤Tâ› Z hó7ø>ëx{Dôˆ¾�òã˰n¥øs9ó/)MÜé½ÓŠ|N½×|)$2jXWn颛Bs¦š³ãT5î~‘Ðùéäº2­D¹dmÆÖ?°jöÜã6ÍZ·bŽý;ƒnž8æ³&‰—üЛ6‚6ã�7·?¹,=ßÚÎèq{v5#°#·3¥ižÍZx^Êýã4G*˜rú ×¶ŽÛ­½�=¢áêÔpNoû!°²ätÿ[^tÃ/‹åÐÊ´­Dûz¿˜™öæá#j©wƒñl‹¢‘eVEíÎEÝ¥a~VŸQtÆ‚ÁìkqÛl�£,[­´_çeró5Ê߯´&ß×H_7}LøX�´«‚…í=1+CØn#ÿ.û§ü¯Élš”vÓ*QÉâ¾$Á4à»Sß— 3wŸ¢gêß`Ž.‘™¯ìå:_‘d%T8|0gàåÃÙ\Mn�˜î‘euo�ü²U\¸ì„_[¼ýu ܬð`Ô�”s_ q”wvðzÔ5¤ŒÇüXîZW–ê­Ó“Â…Ì:8eHÒõ¤Q£°ï‹lc4vÑê´íÝÇúÛw¦¥îø£OC¿&-WUØYÝ’[‘›úpÈÐ.””¡“'D¯™jL¤õSD‹Å)’*j=_ìMš¼n»¾¶ešÓcâV�4žy¨aƒ×ZŒ'âéÌ&N§Ò}9|\Íâ…PQ'ÿ€ÌG3ªéÒÎ ½Mè�ÂùÁ£ Ôtqû{G:%–ÈÝ¡bú�îqÂNŒ�SÐVUðœU4Uƒ(ûªBÏmoqÿUHÝ­°`I�ŠÎE¦ëhËô±­ÄÄÛBƒWmñoâl\m p¯ux€Yå·|±¶ dcšÏ$Q¹JEÖú– 5ÈÒ—Ë(žc9R‹[@ŠÞùµ¬÷šCO,,Gêþ›hî½òÕ…L¬Ún#»#/?ÅñÓÊUcf¹¦:ßBíIoÝÄ”dªg*)?m%Cº>Ô&si,†f9¶ÞòúP­«¢¾~˜nJZ`÷Þ2ªÆ[™ŸG«É´~Ë€ÆZZã—×#ËÖÊ`r—÷’ècðöÜhêPØ�§û¯ôŽB+-7–o6â+T¡Z#2ùÞîß Š"›9+µQæ)MÍP=WlØ’i4ïžÖ7 Þ«Ê¿õ¥0£7¼¾iz||j 7!jûÄ”Àu€;®˜ÃÌÆ“JÒ %?1Tãü¼cª.+øÞšj [Žq‡ÉÉYglô%)x3paF–¦¹+BqÚØ$°¤I ZIgÇÖãú¬×Ú �«/Ÿél~#Ì9¬þº/ûù*×’»ÐñF.Ó-öµlkÊ%¯H�ûwØyP#–)ç.DÎo†Ý:Ïr„ÑWSÎÖ)ß™—”V44½’ £æ¶ÔÛ�0y›ƒ?(ÈüyÚÖw[Y9ßÑUHÑ,[º–pª%¿2b²->ìWv�E\ôà÷BWš¦ÉÝj�¼uÛ[ÇÕ„¶"/g.Å.ë8yOá ½�ñV\F “^_+ß‚5ΑGâ«M;1Ïù�ýÓz[íe'§ÊÚ y¦‡„]F÷P£_†´o{øºÜlg0t¹z‰Åbàêဪ_ÁÓ*¹]/,µyW¹-çË™–ó*�lÓõz¥‚þù·p,#›�­úéÇ–æ¡ô} ýЙ]Ù+H4ã£îk€núT•ôd†"6çpÀäÛVU §Ö±vä+èŸã°MM¼ç—ULº6RŒg…¦Ïs­à‘åÊxÙÖë4?|ï¨Úö±êrm´ÔÖÎfì�ßFs)„¸äRoâŽûö;ËiÁàÜSº—ÔþÖißJ|hùz TY¦Ÿ¡NÎS!5S0%bÐÉ«q`ù6­)×ÀhTR¾nÒmzñwYŒÄdÒ'ì÷Î,åÍëO|Ìäš«Ë1œQ�÷‚õ|/*EÀ!WAmÂÛe×éÅ^­¢Ã~ ñ?¤ ÙôB˜õ4�{µŠ“*ãYðqæôéØû²u ÀºZלwÌ_ h ,OyÏ–&™*Ãi¬~’6öW*àG…¬´K—¦—ޏ:‹Ù9%C_›äÚ I±;êˆ ÔTçŸQƒ$të+çêE;^ëŸÔ=}Ô¥Q§ îX Y’i`Ÿ6 ­à•lÈŠˆM$Gh—Òd—}Xë›Ûò1k�K-£ûˆÇ�zIù²‘½I�㕵}Ø&¾ŒXVxí!ôª£$*x!×hí’z¿Ž”;òÝ[”³§mÆ.¿—(Ûà±D…„A«Ú%þÒÔõ¢àºìçå§Qã4ר.¥/™�6�³Ê‘Šsž¿‡[˜Ù—çE=$sò¥ÛúR ×­– ‚�É0q“pL7‚¿G¹ÜXŠÖÝ١ί;§ƒÏƒ­*ñ}Ê¿ Kv|®¦är�põñÅåUŽëz}É;§s"©MóÙµyÖ¹oÝ�mž+çt+—ƈÂ$BŸÝ\ú´\Çlª¶™ð5kéJ¤¤LR|ÌM%uh¿Jް ½`Á »•tiHì#‡‡È½ã€õën=J™ƒÉÆd²wËRYÚ”-^G¼zBwèq\³!2H»s7'‹ˆöFäÅ9´µIݱºšŒ/—ð³5ºZ7¢ÏóQ1êíÏÅtµ#¥6Éëïɘ”sØßÞÏt ‚yÕlÑ‘>ɾ#ƒ¶?q ¬_Â^^�´KDݵ=®&®ZÚˆ�ïu’Ý¿<{ãIªCÑ‹ow�‚NŸ$]®­¯ä•eíe»J}¬Ü&Jòòsùѳê¯èÏnÌQöƒìc®Pò½;&ù·� ©Ö?¬/frFhµ”Úõ_2Y½GJjjØBÌàƒ.q/¦Ú ¸¡Üó©×ؤ¸Òb—õÕ7X3ãÞqPêÊûü˜êš&,°Z…ܸòi—R¦’ Í«iXó³�Òq¦ ÿî/û ?½È§Ì]!®`®ï¢“Ïo7YÏAYU”Ã~Ôi»›î÷ŸIÊóVŸ;+ÕùƒF©Â{v˜¯IIÓd±¶›y×Íçq\²`2yGñq~`ôx7ÙZfñMÀ‡Ó’€~LãÉ”v›h_ÉCã¶@xS›~6!�äª+Ö_Φ¥k'±çÕ"ï'g¿ÙTA<:fꦩ… •‹àñ„\G(app‰|Ê)…GM½ê{?=œ5®e55±gd—X°ßª°›‘éÚçƒ@… âõÂû e�2“ Jqª�ÓíëF ©]xb0…ô,)†S«ãûpèe£üµË[¢3ŽëãTGe,9‰¦›Œ5±f%'G¯G!%š]Œó±×Íü”@ÓÙ7:ƒä梿÷˜l ¶.ÃÒµoŠúëC(»Ç#$†�Ç^�m³¶ah¢­8úìÊcå誆ÏqrÉ?Û%Ý¢Ï!Ú-!í®ß$ot©Viáêi‚\O/Y�AÚ{ èÍÝ™â•ôü�‡‡r_�ºS»›ÒÝNO;{ŽÏ“QàĨŸÁ/;U‰Ý¶²·Ð‡Ðdý€þT«tr›6¼E�Œ3‹ÛÛi3QtÏGÔ±G™ïÞ¨|1-Öò½NÃi$R’gíì_“Óq PœPm0Ô¶-fí!øÙ¦h`ä$$Ó¯ÐÁjŠ×z5¥åÒá Ò *^I²½ˆS¨‹“�‚Ó¬Gš)•QZŒWAžN"݈Šóެâêx¸€ÕLø’¦‰K ¡§L©´U‡¬5h�žkrO7.â¨�£Š’gVØŠIá ɼ/ÖtªÜ½ÉÉ8Œ‰Œq5Â:T]æ^¢È“=õ-µù¼+Nÿ4¦™-þzAæ%eGEáþ�ÅfÒúÝöù¹ÏhбËÜI¹o»P £5\ÞŸÏV¢¸wJª|_�˜î“Æê<ò ÃÓz’!m5!†qÏæoõ;Åo„rHìú¾â¾>aè¶ÍÂË‚ˆ>‚¾¼â)r+‹�¢õj»¬Çáq}œnÖƒŽ×È'“õtNeä‚Ú|‘ÜŒÈÊNX%³•,–Ö¹‡˜_.½xPüÛs¼/ND˱c KÊ�3,󆞔´#ÔùPòkµ«ÓÎj½kU1D<#Gîõü�¦S©0Ü»ÑêõD²Î3eßî{=ßÖ33ž�{N¤ÁûftíYŠm2ÆæØ[¥Û©¿lå×ëmoZÆËk®¼’¬zÉUoe(ùõ˜¹Œp&NävºÌ ` úòÈf-ÕNC>¼ÜØà©á©‚ëW¶=–ç€m²æñØ€u¥Gâ'÷�º—K‹Ù>wo:͜Ҕøø�Mh<·÷û:,éÒË‹;Ê«*8½#dŸ…<“ QK9\¼‚Uò‚ �Taà\9A…%IE^ƃiÛ¸¾)'~¾¥±Äg>V‰ËŸši Ê…˜>zôr�Ä¿6ôÃA<«¢K©ËèUÊ. Œè]>L_þöü5}Çì!~ȶ{/ ~µË˜Q(EyJB‹^†l5Lã¯âŠ�+iS„kÏÔ ]�øW>Èÿs“uýº¬Ä×ÖgGB÷Æeæ³°}\QYV~÷›fÙ­™7'ó7«¨)½C¼tRÏ`QÃn¤»vÒ†áü¥ï{ÄÝ7J]¦O[É[!±žöÛW»zÌê›jŒFï8…†¾^»¡]È5_ÁaÉ›+§¬Dÿ$˜žÓ#à|~ÎzÜ›ÍE $ç°üŒR†ró ×sn¯¾uþ O7#ž@EíîGGú¿áþ@­!·§îL/$Û/•uó] ÛcBˆBí¼;M傸àq£šY@ÞýúIïã�rB‹pÔ�Ûlf‚�F³�}†„f&ø;âÚm·þ_‡‚ÌsU’ûÑôFN÷D½ÉuEx÷ôt´JîÕ�GÀÜh¤Œyßpß6󆸓ÍÂ#Þ~¸ì¤Ð3qœ�•ñæ{·Ò:–ÑÂ6["wù)Çz%JÖËÕÞ aZ½w&=iíbv}âÅŒ§ž„LÊVÝíÑ곤EˆIï�Úœ‚ý׸*Õóä¨ï?VÿºÞÏÞç#rY¼zÞ¨¥9:÷Ã|*bKÚû¼5ÞEsL©Q©›�Æô=˜Æ‹\ª R±`ËW’ëpeþYœ,Æ^ç!(ø\Ö�#6<î×ciU»‚Ë ûa·(GæÕ³I®ÔW–â‘Ò‹ªÕ–›Ð´¢þRÁõ«�;˧Šó·öÍÆG¶vÅŠ-¨]…ïQìF¬úˆšvô$¾f¦Žœ0­7‚§9í,ï°¶){¥2派ɂdvJ›§VeÆò´ò­Wq,¤Àû™ÌÖ+”1Üø�hÞzž`U)A—)h2t”ŸJ<ʱĠæû(6©!bø4TOÝ“¿V*ä€�ìc7ó#l¢¾¥ô’ÏÎ{)ôœ+W÷ë‚ØKÔ±Qª³öÙ„ÛˆÚ}c©‡“u¯É×D‘ËwžÝqõ›–^@…°ºI<¹Ë¨zC5cÑçdþÅ•6©ÌÅã#+ÉW�ßúÍûП‹ç¶÷ ¤­D¨dŸ�—> �òåìpJ$u»jðo�E¦ðЖÓO*²¾E/qÜòD�6Jâ ‚ýfÑ‚a&ŸËiðIcÎ,³^RĘcºò‡ª²;>7ê°c®´ŒÃ‹ï,HX%ÞW,7Ã@cTæÓ›{6¿rj2#õlýW0âïõ’�éŽö›lÆ“NØçî­Úîö㙽Ëûü½•Kÿi@LØx“{Ùl•r°GN¬²'ñëýö¹“Æ/sF’~Q?Þ:Þ¾Á�6ne‚Prú­ge¼©YÁr©yÕå ¡KfÂÛ¬Ÿ´ø%lW¤Z¸ûš>Þ_ãË´M*è½·ÉGö½ÀÑO÷²Íþ€z­¤Õ-sí/'–éÃÁ¦\𽛥§£æ2ìÒ æ#oMÖF׬‡Y�[¾ ü½Ôì~yÍæ 9á?äéïœáâ*½ŸÝœ¼)²Fÿ�²âå¤QâÔñ¸n2ý�w4qÙÃìm7ƒ¬nS2 ~•r•KÚoŸÍŽ ·½¼¡ð¡só0­<-òÃ@(ÿ+Q¸Ø ‘DÞ¹§ém�J¯î�{[ŠPH8 ˜Z–ž1ßgš¨'ÂJWÐÏÝä`ص4XûIÙS˜ ul"Z>ðx´Ù¤Á©FaKã§3Ö× %O=î+†õ/Y Ţމ\rc~Š›�$’t¡=¯b –x2ZfGâöCüy¹zèav èµ�ž±üS£ª˜i»<»Ò‚u¨¦cÌÄ“=®Ž�ûlS3³ô«„Q÷uÚ­B*D¦"_¶i5—ÁÎáS¢ ˜·Ñ®W„u�§œOHy+ºF.ﯹ©ƯFßwFµ Sh“||È)“!¯Ô¾D¨ñÑYhŽ)ìr:¤è†ƒ·^Àúm­á¯§µ�)ny†î]¼z¦Ÿ¥e%;aE f �©p�™ò^DÝü¾3ÏUHåø5 ›´¥Õé a0íP“¸ˆF~ûëóþ|¼YªëAãøx ŒßÞÑ{Ñ, _}¯UÅÒ�§Õ=éž±ýzAä†ÏÓhüNw¥h¦#o[ŸRN2–¹ûºÊb‡®^é% ‚Š8\ºº#kÓͧÎb?ãmÜ}“œþ<+™×(çåcô^´}âSG�K×z¹~„ܰ§æy±`%e}–Ö–VXüá‘—Óê›oåÈs‘õB_Q! y�k}LpœAÛ¡¢M‘wv›iÐrË*ë_ÕÍ\øA²#ñÞ·|ô?2‹&¶Þh}øyå±OƇwY•Ñä@ÆLjUCZÑxJ¬Î§JÜ?Ÿ 3îsG±¾Ô-LB´jÁIÅ»üP—ïg�¼Bs”ç‹ð xI×>tKÇM#‹¬¼â¾9’a¡)5N&øìq˹îœmmàXB­Âx^ŽÕ.É]Ý~w»†ìϼ7œÿôí { endstream endobj 1677 0 obj << /Length1 2008 /Length2 14712 /Length3 0 /Length 15951 /Filter /FlateDecode >> stream xÚµ¹uT›ÛöŠ»»“âîîîPÜ¥‚Cp·âîînÅŠkq(Å‹wZ´¸Ë£çüî½çÞ÷þ}##ù2—Íù­½öÎHBýNUƒYÜl ’;¸2³³° ””ÕÁö@>fyW �µ€ƒ…�� ‰šZÒtµ;H]A^W+À{3×·Lg?5@är~sšL½Ê W ¦—#ˆ@ü ¨‚]\™M�.on�ƒ¥µˆþ-Eìèålmiåú§'3óŸJ²%X @3[°‡‹­5è`P`Qf¨€=ÞŒÖ:°Àd´³€-š ]€–†´º@Vý½–ª=Ë[a 7GG°óÿi‘ÔÐÔ’eH‰«hJ@ÚLY- Í?¯š ‡7ý–LÍ7ÿž·À?éÊÒšâšzªÒì¬îÀp9»Xÿ¡ým4oÊÿ‘ö–já ¶ÿ‹@gåêê(ÀÊêááÁbéæâÊv¶dq´ûKŸ¦•µ Àìl x»:ƒì@5ÆÍÁü­�®V ¿ üY€’µÈÁô'Iü·Óþ­•oIov× {k„럚v‡\@ ÿ¢±ºü•«¤ªª°Z;¸‚€fo�®@W7À‡¿loO�9íßAI7gç?Êÿr9ÿ›æ_Ò%Àowfhçãôøß:¸¹xÿ£7ÿ}Ûf`kW—¿+‚Öv ?ê]þ¬™µÃ_6eqyi Mf¥·Ás`V¿uÇ�ÅÕÓõ¯è?õÄ¥”|l<v~.ÛÛ�J;˜K‚ííßT» ýiŸ”õ[Ÿ\ÁÎ^¬ÿ;Ö¶`Ÿÿ—ÙÂÚÁÜâOßÍÝYµ¬�Ü@òRÿüfBú�Íä `€œ O3+Ö?dÍÊ3ûó[ü|ÁŽ  � ÈÏÚôvAòqºƒ®În ?Ÿ:þ!±óÌ­Í\߯üm« ýU]ÞÁ àÿÛü¦ä_®ÿº¿¶)ýÛ5;ØyÌAH¬*`×·q ûÿg—ý—Œ›�� ÐD÷?ýß0 ½µ�×þO„è�T:°³=Ðî|Ö.2Öž sUkW3«¿ûú·ýo*qK;€™�‹…�“‡ão�ÖŸ-e÷6»oç�õŸãëÍÿ§¹ÿå{K3[�‹ €“ç/è­ÿ£ûmþ¨°Jêë(kË3þïàü%í`6·v°ppó€ÎÎ@/$¶·iààæø°¿�µ9Èó¯q°²8€]ßRŽn®~ °3ÒŸ%åá}+ÿÇô7â°JýñrXåÿ�øÞ�Æ€Uó?譊οÿþ½Õ4ýâ°šý±³±XÍÿÙ¬ @«Å?à›ËÀ7 Vÿ€ÜVëÀ7Z»À7^ûÿ@ö7^‡À7^ð?à¯ã¿!Ï9[ƒÿ!”ý�Ûùð�Ûåð-Ãõð­nÿ�od^Áÿ^oÕ?gÞ_ší?ða Wg°-HÇÚüíƒð!Ê@WgkO¶·ÝÈþf{üë�ÑPÿç ùG¶„ØÓ‡™‹�ÀÌÁÏ`çâåøÓ.¿ÿÊ5ûû\þë$x›Ôá?‡"ò™!--€ÍClÒ[Â*ý¥‹§«`©ùYŽ«ñDta–²¦»ˆ ¤ ¶)@¢%Û³iJÀJrFþ©Êt©Cpí^ÖÛSj¦®ÌÕÄv€þÊþÄhÒâcùÚ,ZAÙÊ?«¾PÐ(äé•s}ÏîHì h�JòwõÜÇrL¾b^¤QVu¬Âz”α·â8ÛayþÀ ê&þ1Ý éúz�ì_b˜ýP†7¦çØ×ƒý³ÚØ K4÷a�Ð…_ÐQ97Æ4Mmå1 ¯ŸÑ‹Xhí:W5OZ6ì*Èä#daŒü6B nñHixVÉ„ðЮÕwêNþËÕ«'QSâ\¬;;¤‹T„8Nn6Ö’ do¢¨¡µïL+,1×Kæ1MØÖ-Çj‘;I®ôË™Ðd›óXt{å©60•8l­½»OŒ;&ï”F¼q÷–^^:Ñ]ÊÝÇ º_Bì¾Á9}…ðU üNaÚ^BZ„â%ômXª&}qfÑ+_7§• ™U½p7e��*p;G�ZP‘PÖIZÁBèo'±ͼÉöZ;S”#EqEpêJ`Øq™À7'W¡Y2€âä ;84× Ï Rå´¿þÐO¨§Ó´%¨ãÝlaÞGÆö؉õÞsN(PñÓü”zvW•¯]ï*¤lŠÿÌÉ .;…ÛEµ^5�­ÙÓûIo‚æÊ¢$Ý÷ëØ»^ÉÚèá÷©GTBM»RYÙÈœ—ê�ù¶ZQØ¢pø ê™#ã�d^ÕŒOu-|KÇ寵 5š4y|p «1ý¤1mônþN�çÁ‡[ã:0å•ê"ñT(óØñé'ôö„mm¬ãQHóMY¸‚Ê*“󧃽3毲糃Â…ïÔo(ÈÊijfÒ¾ô<òñ.­[-­Jat ¿ ÙúGÁ@‚ɶu.ñ}5_¦äÌ÷‘¬&˜ŒwuWÚ¨’†À5ÙAÝ]/H)ÉÙ´ÁŒÖ`Ã(Øp·îg^‹m( ¢ÄÕp6í¾üèž¿¨ø*qî¿Ñ’±ß4@;Ô m™�“É=í„ZØ•‡\ç‡<8aÐ@Øþ^&eµ¯.sVëT'²6YÍæ ·)^¦â¯àf…’ÍmõãÏ?‡¸õ~ã©P"Ýèå¢ã«Ýbé´R²#JaÖîNßÉn}n¯îðYMÀ¡�YÜYFDÊñRÎu¸ÝŠƒ“É9ƒn×ðùp/ÂM‘™5.kßí˜U¾\E(´Ýïäy|\ ÝãäÉyfÍÂÜøÕ6"°·vê÷ÖJë.s!ƒåOdz¤¯±.—°8wqñsñÈ–&ô6ÁÕ„|OÛy‰G*m ÕýïÞ�›Pã\¨ I'-çâ¡Ûô®Ë•§•ˆsu¸Ÿ[qÝ>½#Ãn,|’ È(ß¾R#=ÊïhxYå qÙrÔ-ÏŒ/V¨‰ñ\æ¡ Âññ÷øÍœ9±ÄføNCyë©äføËû•1;ß'iÃ/˜¶Ã>Úï¦Ekw€³vŸ¼$¢X©€iu€1ÌÔ›ÅkÄßèîgÜjkL1ŒkcQ&É”è8t¢G4ÏHË6ç.îS«Ç‰J éÛïRJVëøqóË©ªpæ0 uu‘Áò�4Ùi½�ÆË }ï3+�Jê“…Hý{®Å° Gélxq“�ÂÊûúNOá›+Å>�OíayÝIæ'¼J7T‹õÝ6ËòF|ô4‘ÅüáGîe` ˜m޾îÞeê—âæ¾Z�¬a#u<†rõds{ðGØ¥HçÆõž^3ʼß×P¿vðœ�>ßLbíž]ì¹Ni�= Ã5È’!èAIǤ`8:^¥VÒ[X®w-P~R¸Y7¬@Oȸõ�^R=²œ“äW‰^»ôÌꀰ0�b”‡—V©µæÔ­ÎCö•Ž#ÏH‡N i@K.(d5¥hKï)™1�úõÀíí8޶½C¹@’!â̓í“ñ¥ågr„j·k)¨6<-vé�=®‹gŽÁ£d�¬Ž«ÆkJ­)çÏgÙ„†÷†Rüõº‘C.Û¯�‹"´,s"Ë�¤hYc[O+þ¾Póª Ü2_¤�àBsê>øøàI ¥¦ø'M¼T5”ë{ËáÓԴ™µÌ²B£à °Ö™Ã{|€¼ÍžÁ÷Ú鳦À×»:ÇsÄ!Wš&Äé%휭°i˜iäLDØ^¢z¤y R–Ä6ä3Œ§ÞCNøÇWIù°—5®KgâçNŽEv¹\Úyr}.•úÌšì&k×eÃsÕÿtò-"ŸÂQ6(Î9Ž‚þþ½ *¹²ï>ÑIÕïŒ0…åÍÀuÌ›ŸF'ÀMK„ß/Íþx~È~6¡·&pæÚƒŽ¦® (.u’ûŠ*:A…ëùÏf%tQÖ'ë´é+~Ãh³Ápn&Wª´8ö[<ß©Ålð¶H‡ÓM¡W Ö7‹ñBZ¬A¶Øc�"Œ¤"Á‚ùaŸxÃGWËM×®8˸7:É‹çäÍÀlP9 ­3ò5 ÏqìÌN9ª~ËÄgÑ@zap8�Å:d9·âÊl«¨µßå'×ãõq†ä¦ šûžÊ�P9IöfXO@¯Õ¯G ÍÐ䣙 ŽŠ,™]Tñà"vÿ9†Øî .uì1ÝùŒüWF”o§}ÞÒ‘ÔŽjC²xߥP˜®hhÌíy²<X®„®Ök‚e…?hqõ«o—°ù9–Ò](ŸN,üÆ$Hx8h¶qày‡û\õ¡ÂÕÙø)÷—ÔÃcÆÌ¿`ñxp®†p3ÄžŒhýlævðLÔ”å¥7øÖ‘ƒBÓ»ËôAÌ]û”“؇ÔFý/ÇþƒÔ™i–IlraÁÑ¥¦OÏF�W„f¢B¥jº°» ¥2‰[7+ô›*$‚ŸÊ}r{ñFQ|¨À‡ЇƒŸòý,U#›æ�pÙ@¡×,ýÙ=I�W¼yÉò¾Óm·JÄ,V6ÂçtlK© ±A»mg>˜�,¬H¿„­¼ïQž”ˆd¤]õøº{ÆQa÷1c5¹ulGñCÎ…–‘�»åôáƒæó¥ð%èLp¤¤�ýw˜ÅC/‘q�ò_ Çy�H± ëm� ,¦SÍÃF­%j@Œ‰¯…òšÉéA4øLáã‚y0—>+=ïõ7ø,9ÎHBǘús ˜×ìç1T`~apÆùȬæÂLi9ðÖ½�<Ë8Ø—�FÇwjÞNÅéhQGê-ñP½neÎf —×§'±¢ÊRI/p¡º“§a�?:UÝݨ{9–}*lŽ�‰v ¶ÐõCç$µíÐ2 �¸–§¤qè ¼‡Š�£K££Ü˜®"½£èL’u$X©'S±ÚÇÄ@h…}·;pù{îNy˜-x<¯ šÈF³,Ð À Y{rñ˪ƻ6¦ªŠ ½à>äJ¬½íy:M{—ÊàëÈ5ÖÎRµ‹ø<Œ]ÚA þ@ÀuÉH+ò„‰¤Ï•ž ñøÓI¥N@SÚ¥Pnl‚À¤:š¡ïVŒ®üŽÞœUrØ­ãõ²s¥[ŠI§ùÇÇÁ ÝÈñ‰�Á�÷‹ó‰eøÇ®Ð.¨#Ï7ô1²t}]ªÕЋ¢Ê�çê¼Ýìé"¢! _šNÊÜ|z>UŠ<´ñA—ÇSü@[&aî®=äéÑúi‘À×…õ"†o'î »§ÆŒüT¥Z€¹8½8*XPsÚ]£Êçõ¬? !ä'ï,Ô¨šOŸ�‘mA=¡‘—LMŠâ«-Ôÿý”–ÎÕ'¨µ ­Î¯Êä®/2»‘0›ýuUBÜÆ Žˆ¥Œ# N£P£©Ê_½*ÑrP˜;Âõ´KmŽø0 b3[µ ¦Â­èš ož˜£F6µýJo+Ô(þ¬QðÊú^ïÖdf/ù¦s2Ù’ï:åXùÙO_$Bç[çF@k¬*÷ƒÌ-a3ô¤" 3—Y“Õa$O<•Âñ@Q‚’¦=˜å{z·°w¾õ„UÒy7ŽcXÉÒ(§®öõyêS]¶ÚÊþÚ/¶Z“‹g"šd4œ‡µ`7õtñ¿êº>2ad¸/{<$E‹ -¬BÄæ4l”_r#Uat,äµ´qäF1¾@“tÛ{ncÌÂZúdÉò{OUõ� Ï4Ø®b ©câä5̶3h÷þÊçxÛ*ÈLÂÕ�Êï1‡^$$wÑ´¿áÈêH`SRÆhk÷äÓ}ëž´¯@²âõ¨m›¬¯8Ó`tA4½Š SÐo×) Sp×þÚì9aÞ™£ÕqÉ‘7Ï[!»pËÂtêv²ö2¸Õ ­!Åq®¥§¤á‘¢˜Ðû»=2ž'_òz¦7€Ç ½ ¿ÜâKïyF²“ü§§/ ‘@Xl¤m=ÊŸG½Ï×t–�îÂùÑìHYxðŒ †“i')È"‹S墘MU2y‚8ùhÒÐØ?¾ìÈ;c¹»¥x$N3C-1¸ÅEž²£¯‡l€Ñ´›ˆœH�îTQ—¡– [&¤ hØh£}¥í쯇? dX-.O®¼žOŠk“%ýðvU Põ}ª8^J%îüü±èZ¤î%ªi>ý|�¡ÍÌ–Ét½–Æ­µ‹ÄbŽ%æñ@qÐQñ´NmÛ‡íüW廈P gâC=ïqÄBºÞµÒв&Å ËÃ�¸f{Žûs¥ ç4%¯v¼xí¢i…HN“ËIJq§í(Ñû’dŠyŠÒ¯�a©æS½½ubhÔ»’gY¦ÎM: ˆšî…]ü@ Eä’ÏÜãáˆ�â¼G»²eñDy±�‚Å»×…~T9xŠD’9}ÖcIáãtéCù+8æ:È_öŒF.jgáÞs7xÇBôez€í¬8ü¼ÖÍq ®*°eÏýÚo„Å¥°k†�<…™•Ü)<̓vua'E6ÇÐë-�qëæSz%‹v�_Z&N™ÈµÑ-Ï2@Bеt¸DeÚÞw»„’õñ÷µ ?ŒJ~Ib˰……�¦®×|^�ýȬE�üœ³ã£¹¶ç·ð…®qsÛÌ`Ë}U’©¬(|¹hôŽ„,ñlëí—ƒ#—êh^?ˆWv¼Š“%³}ã`�€yÀ=[8’Ìo¹ µ¡¹¤äaÐ�+m[_©ïGÎFÆ\ßo“D¡T™âCŸ<òëoFÈ=âgo²p¹`¬‘ÜÓHUyš2Ô]æÆeb'@£À�òÊE]¤>ƒ¯¹XÚà1uBÞ)€oæãÄph4ðA_nœ‰òÆë‹‹²Ìt}\uæ?Pé­N^îûÐÐ py/2³>¦Éa„_ýªÌb‘�mB Æu_Fç 0iÁ¸L Ç~áR`ÇãÕ°]A{$XFYLc1�859o '"4‘ÈÞNÆEr¼Ÿ;= åõ#Òj‰Ð«%^i�Þ9÷쪘¬B¥Ý߉óó·ü–e¿V1V5X#¨ “¦žOy–ßýjÈt›Øék'“Œ….ÈňÃdußû�5ÞqD5˘לl[·î÷>æv :²].ôt;§÷7ðòs둼~¿•ž$b_Пß;ŸH»”h2ïåa §h§»Øœ‰iäµË6õzJÍ~ Ù "ï²n«°|ù¢}ºgŠa�qûøpË.H^Ù»fW=„>Ê…•€cD€¸y—C“±ô„Ê6GÃ~“2ž6•܆/ÃÍ}°-[0†t=5�JöÒy‡5­m¢8"V{áð"åÏôa±=Öh?˜T­É1ÌJ08"q§mˆS©PÕ1Q‹nC;Vñ¥$ý—¥.Æ4Žâp«=L6¾‹ÝÒvl97£M©Rý\ŸÆ“F°îÙCWȾŒdZj¤�v(­çHþ 4t1pØ(ïð†"��pÄX­üÁÚ«·¶ˆ[–ƒ¬åÎ͘p:óa7²EYa’›ægn¦4§eœáÊ*Pd #HoO=h¡å�û s¥ŸmÜ÷`÷W�¯‹÷~MØÔV…j̾e‰C–]öR¤ç¹â!ʇš’`²e?6’ôŸ`k-‰Þ¸³ÕET›Ì ÞX¦,i2÷¶ÄšîÒÞgßHÕÊjï% Jƒ´]�“§]$zcØVw"T²"˜6='"{Yund?g¯82rÍÒÛå´ÕŒ/ôõ:÷š„M”q%Öòá$ŠDš{Ôåk�›òå\Û½õü”Žè¿=Ú±xvÍÏ×ã}‚d¾ŠÝD!lYµDš-¨^Átà ÌÎ'»gè> +¡  û­dîÔJÃ3›¬c­}¤µw�ƒ¯÷iÝŒ~0¬:½ã³vZ‡÷øX¹›hp ­µ× ×°ä�iKlèýÙ+øy¹sRÜ]hDŠö�j¶`Óø€á³ÙÍrMÅh*§5£‹Š„Þô•ߴц(Y$̲€�—!@`MÊv¼k\Œ+Ꮏ:Ó ß¾žOšJ›…™ZÈ£{¢xVë‰S‹€7ÎdT ÍœøÚZžy ðÍ¡î3è"¸lî Ö“žA¯œ¾2dUšâ|:BÒ7bØÁÜ)L î›éÆ´¿ä{¢BT¼ª…•‚>÷ª¤ììæaôŒ7Ì]t_äåþ²ì(jßf5šûÓ¸ñâÑË7B{�ÿÂ9xá6Ž#SzrŽÞ7åÁ7Ûr¹³.ÿXÜÆ1t‚B®€]lpÊY¼úé»3ÕYAÍêÄ@õ7jª#<ô¬'Ó¶‡�às¼àwŒ»ÂØ#ÒNП�örR{ �w›IC¿Œî“1(®¯–:¼!Ô©o:c ßmž ¹o~=5 ‘ýÚò{l±Ey@Wî±ó*ièŽÈ´\ð†µ)MD:ÈÂ�LtêÂúZc¾„”„I6vöŽþ4öÜNЧ}V.¬�.ZUJ™QGëÙºX8ϳÓä¶ÁÏo±–¯Åñ1Å_,Rˆé��±ÉµzeÐmýYeݦ®åSAñlåvYõÄ;%‡(,ÿ7¥»ð,BŒ r,Ûâ˜a¶0q�zrjÌM ”*´È¥W �’k[¯–ÚTak:0�f„ÏÊEI~ß Óû¾ÁðF½’iE“ž ÃÙ¡oã'ÔPH®¢Ö¥’â𯾔Îr×òôÂPÇZ_ÆŽ¯à%B3�ê¦S=bÜä6çÈ(Lo­Mâé xN²M˜¸ Z&ôŒÔæ' –o“SÙ0‘t„A¬ K߆—:ºþ¸u °æ‘9©·Õb­Í³öî‘ êmæ—˜\\¢Ê›Ìÿõ46|ñâùl�3¡…=ž€|ꊬ€8Þœˆ÷Låüåˆýj/fäCÇ­ÈzìýX¨È*ÅD':ÖO×ï—»5£N›vQ×üsß½—çá[«(ÉUº )ô]%šŠ÷㴪ˋž pvç}YlÙ<¦cÖ‚E»Lé×hùmw«EÁÒØŸRÕ#ú*}Òµ=�PÓ÷=:�XG/èb# å�ÎÑb¡c®sZÝ~Û1Kš�ï3Xí (Í] ŽÕ n ^tÐd—-•MF Y1!éÿ¿°ðõ¸÷Á–çø¨y…›¼»q±­éŠSAÉ`6é?÷gÑV3Š9 h•d%.öÂù³Üò$9íŠV7Oî²JDFáÊ{›¨ÎšˆÈý~Å(üè©@µHón]kˆ^²×ÚAwîk r®_"kº”¿3ƒè‰'ëJ!¿ÕÈà÷u{È÷ä�'Å!JYõ!¼ÀK–a KEç,ýHÂ÷î[L-Ôò½‰ª­g†4 5q%2¢Â>â+ã»ñˆ•\½Ì: štö†LÌq6T�ø3�Å�QVíåÞyè22ž¡YÐð±>(ņ~V@Á#Jˆ1�Ú•0^|§æliD60ì‰ã…­ì¼ÜaØ5ú½^&#VßC+Îz<Ìg&ŸG$§O"h¦ÖR„=!™A:–ÁÑõóºƒÎX±¨c¢ŸÐÖ>ÚåÖ 8„Ó?ík�=ªÂ|ŸsjF¶Üõˆ�Æðâ,h¸pò âÈX©z9BýÑ÷³<ñ…díÆk}ÙšŒÍCˆÎ–¸å<ºá}ðô°nÄò'”¼ڥ¼‹�ÝÕkôf %’,Cï†B²:GVÜêðpîðd}Ó§N©ˆ#ì—¯b[b9Êù§Vè ïNù¹i4“ö÷Ï)BñðÊ—žÃ £Ó]“zy¥ÖNW 5gSWã¾KR Џ;éLo/SX¡_’û#Z~ûÁ³¡¹,‹�Z ô˜CT¹ïÛv¦›ÿœ‘�7ä@�ìƒo¹²×‚¦Ð�øÁÊɱz3b6û@�%jÂ�¤='㤂lº–�¯Qå«6Ûq÷…iïÐÂó@•f©ofv„nœàzWqý�tÒ`„©Ã2`´§ý5™lòTËvÏ‹üa™^^E}°Ó;î\H^{„y4";Ò.ä± GÙx÷¦iÓ?ê(âJý˜<º0«ƒÅP7¤Ÿ fŒÚqʨ„ߤï9€_:5¶=<`¼v𠀬ƒï>êµÑ àœLZ9ÑT*ÜYÓŸ®Ádk-ö#ö˜¥T|‘LùÍÿ3k�d\6|“ªÃ}/÷§Ÿ¨£hÒWŽ¿3“+Å£–K\Cr ö»¡8†ƒ´Ì‹d­SÚÌ †µ¥,HQ‘Ú@ß铟¹R¼CÖ5ð[öG¯³©�[�§Ç37 u× ŸÀu�Ü2\gLöŽEñ,t Þ“—{ÎÅP(+Ë´Žúø…ë¸5J9>2dOhéŸEä�Ýð¶ÍFrmÒibKì¬üJSóÞËA‘Ǧ&Þ“Û0PD¿C~Üý á©eø±ßÄö«‘ñP$…éåÌç6ùg�!ÞmˆUsOGè¤álâ¿6K<ƒÉl>âÜ7’óoëI¢:8¢6‰©…mP‚Y[uªzËÄzIàqy=èæ¥|¯D¢OXÄÅ`•Þ± #þÒ‡qâŸÿˆTFÛòš8�M»!r1¾Ÿ)×ÞÒ4õ{‰äB"óÒ«)nqþ§`è¢CÒçÎMØáðìV÷2»2¢SusaÂÃ&ÿ-*@m}êñ×íM™´'(c+ðº›ñêÑ.ˆ®¨ÏÖ 7Á^鹿š›û«`�5¦¥þ!Õ˜¹‚Z£lPŠ–´7$ümëƒ#ÊÔxxfìx ¼³ŠÏ…j;fp®ï„MW'ZªH®ü%è MÈØÒAÝ òò¾ã7³=ó$zÕ9Ø÷}lg¨Ã«JÈ;=Ï(n5G�³"ÀhУP­Š¾$¯èo…”÷†7ø�§kˆdTˆ~SïGQÍt‘s'±ÄŒæ:—ëiðäÓç3Ë>´¸[ð>P¦l@¦*Ž!žb ´ Â„!žä \ùq½í»Y?Öví 0ývJOUŽP<È’ó<¡ÝÃ}™þ>ÝOƒjèÖ�‘ìWþmìH¼êþ³Ý­³Yùð :û®úñÛz©8ÊÏ< ÍÌ•Nùôž„ôßÝÄn§, „¯ÁÆ €"ˆ2ì[á¤×Þp&†›q‹¸DkÒN+¿(®‹–üÇ "|dìñ|HÈÛ¬ ÷)©$c] �$Ÿúw•Šh'‹)7ÓZ¤´jMF%8\©CmœÁE?žÒ{o'Ü?ˆã».æÎ÷6 ã¦Ä/J¿m—öŒ¸ÿ7ŠàF �&¾aÇH«¼ÞÓÇ ž eḃaºÀqÌ’6d�6ÆÓïûkÈ}­8‚3å#í�0Y†ëª²�}7'ÀNñÚÖ{Âg£'$?(Ë�°K8£ Ó KÞë ÎT�°a²h³òÎcÞ%c–w‹T”sm�wªTòVRòB"�ò¬¨"äQ¥pª˜«³¥SÍ'FuJ?Y¥}Ämr97VMÃ"€-‡P˰ß)‘½NEg“x¾=‡ÙCÔÄûêqÖ|ñÆlQªhÞÉOx¹mêB8&ÇCȲS¶<„P-™ í\ckb½'Ÿô‡“4hH�â,ž˜-´¹�TVÀwDW6¨œ‰ìŠ;v�««é¢çì›^îƒÖ×·ÿDl�à¦àÙëõôŽ–B˜[Ô:†øŸ›Ó÷¹ÐT*”!ñé‘Ç}Íx�nÇEO¦‡Ë ²ÓÒe%ëÝšìgñ'ïÂûs‰³#†õº¦ýê2TjMÝ:Åg«Ô‹·ËÄÎACdͨ Bów.âw¤jÝ¢öLò£c¼™-«fƒ…~µX´äáo–%Oϧ/ëX3ª¼H×-ŽZÔ‰ÎQ¶e&zŠS@ •û#¹‡§ÐP9+P;[á Åde¿ãµ¹q8îÙϪž(¢/wÓMäh[lο`ˆ™œa•2M‡>�2†|/`e¯èx��°æºÀ­WÖ• oùÕõÿ¾³I1úã«™Éäã�Ê�Tü%ó¹:ïlⳈUmS 2E¿ªŽ¢™¼\³=D!ñ@ùQžý9-Ä'QB|}æ—‘ >ëܵc�ñEú“|VÂRår>“¬;‡›�ëwÄ_(§ Ha^�õCéUÉøžüݑա\²–ÈOÁŒ_ʇ1ê:ïô~i}'Æû$}©únÏüñ–��<âÉ»K“Û·åøòÚ[`ä—BHW‹#pǨùY;‰¨Ž§Œ[+ª—t+ŇLŠ‹À-.ÞS”¦�&ÖÁ�ä¾-€ãùi“Y`B—Ê€¯·?2ABײ4« @ünäW0-ÓÞfæµ ‚0|¶à箢ç¥KecsÎF6ÂJ�h’Áû¸RdúdñŽÈÙ›"Ã�Í#‰¦" ÑVJ~Ñ,ÇX໳x¼¯±CsQ7·k�v㫹{~&¼ÆGn¡VÂç«#Ñ3¾”"b#1,åû…YV-*u”6\V½÷Òì‘…Ó-ÐíGž‰ôéß"”�äÜ)S!ï%�'<;¶>S`g)ªÖ'ÏÇà‡ØoÍål©ªlƒ–¥™}Ì{‰XÐÇåjAU[„ø”ï鶘ÈõètIE„aŸ§Oß8úµ’GvŸƒýp[qsC’™Þ­†÷ù®áºt-×wBÞu$½ôêy�ëS“ÞbT"ù÷½M çã�±§Ón€–¦hLbvIéY}Sm#ö%TÁ�Üö#ƒ—)d:8*×G1 E¢«¥Ñë½ÚÂíÊx{1t?oô÷ßPP¤¡ChWgþ±Ëå›ÙH$5\€$;)­—€±-ª1ÙþXÈJb^žÔÖh~Š2D¿ 2aEQ.XèMÖg|�ñây› ß²íǸÎbä¢{ó¨GD�ù„2†uèé¾KO6‰‡¡ÞsDÑ?vs´ºˆ­†‘ݶ/!QúŒC˜_“ƿөYØ&"“#ëS칚üú-[6Y�©®>g5~ër9$‡d �bzÌûÝmemyóñ?O‚8FåK;‚¦b¢w½‹‹AIT›úÓÌ>ƒ¯*7ßý˜"Ñs«öؼܮ\Ë¿Ce2�V$•0úø¢�#Ð+€>˜%¥äW9,9 sö˜øËBˆ=Ñ —ˆyʯž±>0ɦŸW[¥zÒ=gQy+È0áGìšû­d¹r!PV7‹Y¸f=ûs™€˜ì!`íP­%5y3Qàĸ_g÷16?è#C™©Fh7>ÿ�íü[¥ô·œÑX5©x“èËGÉ<‘óe~v3ÄÓ$Ÿ{„yäƒíRÓâà•óÚh©õ5ߤÞðcun®�è~Êð{EWfú†5é 9~'w •…ˆP´«µdœÞ—" ’;«a� †rIÝ•c;D›}í]¨ˆ¾pÅ_#Š^÷9\¸Vž:LGÏk�é¤;IÈ$8áVÎ}é™]) ¾ Oùõó¹Q`=gîQ�³‰Ôœo[‡ï¶� †µËwC“»ÓðeÏî$M5œ®ãs©÷šÓÊ–Ì�¿9Y³¬AH$ .ŸÄ–/~…´Gï¾ý¡Ìêp6­è¿�w!?ÑÅD3¡ôª œ6ÂHÜÕ¯ß=ô¨�]$ÁC5fp+Çâ±Ä×Ï8é}¢=ò¢½2vú8*i‰¢#ëüúà”N_â;# ¹•$«’Ão»U–T®‚é‡X‹ë×*ðqÈç%l]v•Mø#„h*CŽœì݆ïÅÍsã‹q2£l;V§K[ÓÁs¿jéÇÒÂ[þ¢Uq›!°±ÅÞîYºÐ†æºmëÓDöŒ_T Fé;�!wÁÖYD›†›­ n0q ¿LÒÕ °˜CÏEæÄÇb•÷mh?›_ ^þ$¨}£æNg¤bû�™ZÇ”cr2ÏgOÂàèIò'%£€*Êt~æ½)rBY­ ;°‡YhgUÀú}ž†–.ŽCAlÁ°z×&Q~Iåí/¾ÒÝL Y½/·Ór.F4 â ‘,Ÿ‚»ÑÓ¹ŠŸðÏóÇ–×ì|,*ßîÛTÂ/î}Ü|Õ˜‚°Wá (¬W¿C¶Ë^ä]}�ôa¾Ttb™,$Òk�N4›š.Œ¯³¾ÁZ�Vòr,épFYÁ®|ÝQªƒXˆ¾-Y¾§®¸ƒeƒ–ºdyú™\¤Eø˜öÁ‹s|ï¨û™Åªé¸>›þPé/ÅÆ%q”*]ŒdQü!z`õ�ðÓë„�^qà¸XÈ”lÇ×2H8öhÄ>#úÛ�)Ã)¦¾ÎLY úvÈŠ9+â6"ç ³/rvSl÷¹Bi†2ˆÙ¨ºØƒèz��ç¥ífÑ!¦“Xûeµ¨rÒÑe“’ê ˆÈàb•kËÝOw˜Ö¡Œ¨RÆ S@»ê댊i›ÈM4 „tú¼ñý„8ÓØ�HHŽ\°1Öd1Wêå5Ód�ºü­íIê^Œ«¡ûâå–‰[z  ±Œ­Ça-ëÚ$5ºówh’e*ú©Ž™Ü;R8Ó»–¸³uƒ~X£D•Öìs½2H–ê'ÖÁãò–�ÂÍ‹¯%Ós“f‘ÄgE�ù¢‹ÔΜÉ#mÀä̘¬›–£b®]Ø÷ÑÜØ –ñîîæ2Žôzç¯I¹êP Å*˜J<÷ûE&ŸÐ©ŸÊ:ÃÐÓB-M*䉬CIÁNë‘}¨u>”~=…R¬éóX×DõÌZJ<7:©šåio©˜¤™�õNÞãŒÚßT¡Öý4hÂ(ù´™øÍ±d‡.5Ñ’fº]£ÀÈ]³a3yqGÊìêNŒ!`Û} @k™�}g*Guù °¹ lr±¹¾­„—�ΊTgΛ‡gš5Ž+"šìwiú–)7ý�‹"˜ä‘§*Àe ʹÑÚê“ÛåùQ#²ÑÚ†ŸûÜ®2I•z#M‰¹ÇªXÅcQ Dó§=ÏOÖ²ÓÖO KR‹#i"=HŽÞᡬ0ôS¼¸ÎüˆI‘eê˜6=0ÔW5»ß?mƒ­×àüï9û°ežXØ™�SSŸcnÇöG„h92 �ãáKøØÚ(w°±Eu h‡"WD(óH‰½ÒÙ¥É1@È98.¦LfT†.öéó¿¯Éq°XÀ¡ýäŽbxAØŸô‰�øýên_hô�“`Õ£ø/ á(8e¸p�¿CôÈ4Þ½n> ®ß¡ó¾`ƒ3Œú—ýü­€É¼ë½ÁNøtgûè€oxØzê åÚQ‚B'0ÀhÅé{>\dg<ò>³êv„ìùþ„¡¶—4G‰™À%”h ŠeèÛI.îòq–oOHâ|i'Tè.ìô;'eãÖ쀫}wŠçQ®ñu)¼g¬ {„­Wq‹�ýmý¸\>‘¯W††îd",Ü6k–ñÎIâÖt nªØñ›£òL|DHÙ,ùýð`7ôÏi«Ö„-tºRŠ u]:¹A q 8ñsbP¡ŽªŸbHÔ+@¤æ“Ã}oTÁ“¶dó¡zŸ‰þo°0ð¥Ü�'!ÃáÓ�„jtŸ“%¼ÜQã×òëåÃÌêÏ"žÝ‹ ÷®µükIåáËïqãäàD2Ó]´NÊ|\m¾ÁnØØžý®2ntá)Å Å®Ž,#ì¸.ß߬MoÎäP%&ï›q6ëX'JÂêþüQ,„ZìÛô‡(ËÙOµ+5ÍD/Ù.° ^0|ðc�ïWÏŒû‹X`PËWŒŽ³ ؘ›i½íQ„[Íž[ø‹}|Xµ¡p+2k‹éõ�Iá š¡6`×òµÏ¸7!/0Ì,£+B ;ΜHw6ó»å>…î×jѪ6Hì!+¦°<µš“·Ú9N͸;ýë¯J!�ˆRü ßÜHè¨iÏÃ5^™¨Mº@�Úà˜Êm5±NÂv¢e޹_åTÍ’ôa8$©wÀ˜U¥js!÷r~ʯæ!aW3�†ÖŒÒ|)v©›p3ôn�#¤n&. /Qê„I ?d?ÙØÄ)äš�âQ¤�y9CÉX F­4V±>l3E¢­x_£?þšÓ?:–I‘=ÝnWé‚nH­_:s§-á®°5“*ˆê'þM `!g–uëÙTQ­è ý{–½$y+zj¶ÕÈR¯ús ‹ó€Þ´&]ïoÝÙf®²«–ŠÍCê9ÎÁ¢ÃšZYßfØ‹Xs× [—¨\Š]PKóÛË ×ês$PV…×f•»^º—~Á%,zqOátFe…ÑOUa}B#*йBŠŠ=‚†Ë ‚ÓÈÿñ;÷2)¯œ¶±ÓÊ´Ã�í{Ó»„ °Êí·¨xÔ"*]/�ÚÍ@¦GÛ¥ûÓØÞW"ºŽ¹›#"qã�-c¸°ÇK‹n†¤ëëæ|átÎ Â0¦ˆÌ´øûß1óf:rêœ"2(5̶çJ¨Æ×A8XÀÆœÛ1S"´FP³F¿vÖÈh¦n;Ñ…õø�k�­¢ä…ØFžÛ®õyÖÞ»d!¤ß# Û „¼ß^ÿªöT—�£ûyÃ'ÈIX„U�Ù­Ër×7"_,§³[%ôh™+BðMΡLÙi:×x ÛX¡Øy€YSû9è÷ïx)ûšMˆ?ÖQ…GŒÙx†>ÎôŸ�)=Ô¶Ú‹:û^1;8Må¾fov‰N±Oƒ)µë,…ØšÏt¬uuSªƒ¥3ãV Z…hiÊàûë¦8j M¾ÚÜ&Ljñ1òÞYª*›�É ªÉ³mšpÔ¼{O7"‘ÓÈR‰é>?0\ªd¤™ª_ÞÎy¯À‡|*Mþñ]C`Ë ›$f0üVôèeþ&4�n¦[ª¥àÄfÃ3+B ¾ÿc�Œ½ý:§}«¾ AÜ4‘¬©€/ÁË=gB¶º5þÅÅÛÓ< áÓy2Ó1êËŠÌ/q}mÄÖù¼CÌÏ…Y¢%‡Mó~îÁ‰‘ï7Ž·ÚmÑö�d²Ú3{ŸWš|ï[ê°ö<ŠŠÎnÖí&ë�ØÆEƒÇ`ÕZU’TwŽ4g‹aüAN9e*Øó¯Jˆ˜iChñ7¨Îe"½f“N=9¸sßÏa7´+>–r/�¯ë¼·ü"‘ýT6 endstream endobj 1679 0 obj << /Length1 2104 /Length2 28983 /Length3 0 /Length 30143 /Filter /FlateDecode >> stream xÚ´ºeTœÝ’6Œw÷4Ü‚»»;‡ÆmÜ]‚÷ÜÝ�Á]ƒKp‡àð‘ç̙̜5ïÏoõj¹Ê®ÚµkWß-TdÊjŒ"fö&@I{;0#+ /@^AÕdl§fklfeaTZ¸Ø;ؘXXØ©¨Äœ€Æ`+{;qc0�À¶(™‚ß¼Y°°ð R¤€v@§7¥ÀÄ «{8Y4Æÿe{g0£‰±ó›hgae¤}s³wðp²²°ÿ‰ñ‘‘ñO¤?Þ¢LYcS{7g+€±�@–I�  hïö&´ÐØÛL€–ƶæ{s€:P ¡&¡ª�RUÒPV£ez ¬æâà`ïô_¹ˆ©©kH1ÄEÕ%@M€”†šúŸGu Ý[þ Eõ7ýž7Ã?î ê"ê:ʬÌÖ`¸�œ­þÐþGnÔo™þ¦öæjîdú‡@c ;ð23»¹¹1Y¸8ƒ™ì�,˜lÿÉOÝÒÊàfïdx{vÚÿ)Œ‹�Ù[9Á–Àø³5y+S �3ð�“¤ý¿” ·R¾9½ÉÁÿ�Ø[!ÀbÚþËà þ/Kcç|å••å c+;0ÐÎØÎôÍl vqý#{»Í>ü+A @ÌÅÉé‡Â¿UNÿMóïÔEíßV¦gëåcìöŸ;flçâìù?jó¿—mjoçlå vþWD ÀÜÊø'{ç?{fe÷�LADQFRBM�Qþ­ñììߪcÇvÿcý'žˆ¸^ösc[g �•9ðí ÑËÙØ;¹}¼þ§â#DV.€™•)ø­éßâ?ÑeìÌí<ÿ¿eòoÕµÍ?‡–öíÄšÙÛÙzÌ€æˆÌŠöà·æ ùÿçÌý—¤‹­­¢1Hóö?­�AV¶ÿ‡ýØiÿäM£hï2¶ý�•³¤•;ÐLÙ ljù¯"ÿK.6~;"v¶@#;'ç¿›í[W¿M&«?ƒ ÀÈÊþŸº·†5µ±:;ØYþQß óÉ¿íÆŸÔÌ¢ÒÊ2Òôÿ�^úÇXÂÎÔÞÌÊÎÀÆÁ 0vr2ö@dyk6€ë[ß›Ýÿé 3“�=øÍààö˜Û;!þÙeN³ÈÑ¿çç_Ä`û‹¸Ìâ€Yâ¿ €Yò/b0KýElfé¿è#€Yæ/zc—û‹ÞØåÿ¢7v…¿è�]ñ/zcWúoÄýÆ®ü½ñ©þEo|j;€Yý/zc×ø‹ÞØ5ÿ¢7v­¿è�]û/zc×ùoÄñÆ`nõvèþ[ð–€¹½‹Ó Øßìííþ¼õ³ÐÉÊÞì¯Ï[bÎVîñ[ Á–NÀÿõm‘`7ûðÿnå?ÃôŸÙÀò·þë]æ¬v²·jY™½½Ãþc°“•û'–·ƒÍú&»ýû•þÿ" ú;“þ‡·¨¨½»#;€‘�ç­ãØßVÅÊÊÆåó¿|Mÿ5ðÿ*o�þoügÚ€@w )âÒ¼½)_°uJch‰¯Ä·ÉÒwT�Jê3Qô0í™JtœÙÍ 2ùÔYœ¤å…�’¶Hœ.WSȱ*;µì³Å½9)dõ­sšy�—£¿¸$g�Ï~W$¤•¼–Ó§gs¡jµŽ Úp<�ºÝÐÌÌLE„¢U9ð UíáN�ë)ÔVä¬!*y;}¦4,¦êä8Ç:ÁA…KNõ1 1“Ò3×mw qß.…°]íPîõà.�*0îÑþJqÑãyRÛº>CµÓ+�€ÄŠ¥$mdê`?-ç¿’šº·ÁJøÁ°éd½[L‘Z9KT6ǃÈ~EÈ�Ô.õWZŽvÿI§ÿxm%ö.CÿÆu^[ùÉ@SH|ÎÔq…q…ºð]ÙCÿ˜öe�eפêç4ÃHµ‚Ùz4ÕmÇØ^0×€y„Ô#`;ü®þå¼ö:NËT2Ìõ°$*‘5Œ÷(º•ª_¨¿BžËâÀ]È!u-ìëç"~ö˜äCØ»H*èû)iŽÈÐÙyìråäö”¶û¤ •gƒã…p†;ÖpT%ÑU¡ž“%�~û¾�‰~vW$£Æcë}éýý¯ê– f›wM{GͶ–9YËüÓ÷ô´úßË'gJÊ×8’}§s«t·80ûxõ+ ¬L‘¹—Ý MÜ`áa�?_ó`…¹îý,ëÃVI[Õz§Z‘müµ‚à+¾5ñû$¬?\¥µŠRµ“ÔÒ¾§›Öþt£ó«ã«¥.MÌ4Ÿõòwdˆ-¤µÁ§é´[ŧËgÌh¹ÍÁª¨a¬:Sªç%Hô‹æ\þí£}Ü!üËìï7§Iɘ{jIZÑ=!_LÏq› ÏL¦†¿q:3íÞ¸³¨·=c5^vNl¦%‚Èyì`—c‡ñJeÝoTâb×»þ‘*{Œ"a-ƒy28îô¿>gñøje§x' N#Ó*<Í!·+)—æ“zi`UŠCó Ìn+¬-(\²Ï!'ÛW`a˜^QK\É’B�§‚H�zxŸ¸ „­ÓÚùˆf<ªµÚ‚¦\j–ãz¥"«~Ö2Ÿ^ÜC°È3Ÿ±¼Ì�bæF�) ·ŽOé†ËÆ\*ÊùõLÌ ’aP²våh6˜p8ÓúxRkÁ:% ]jIÙ!9Í5W In…e  )BYQO7 *i¿³¬q»ÐÃÎeßCÖÍ·tÅõ³õDW`‡wþÔ\Vñ¬¤ gÈ$ëzXk�ûéV5þÌ‘^W²H9®…aB–Hvä qØ¶ë‘ÆI¥øå…oÆ38_‹|ìð.š•QGéTlö5¢˜Vú@1ÙnÏß|Wø©^öÆ¥z¾¬×4H¢sÏKxÜÃ[nŠë.áh,_ör¸‰Ø?1g�Ùã"RÊ¥úîìLpΓUÝ裣clcÒQÍ×FÌW¶¢T¨Bþ¯7Á`¡Ž×^”¨@íg‰A^64i×/øž‚9|ƒ•’>l)Õü9~®RqÚ`yâÔ@ê©…}ª.�xA(;,¦óïsHåá‡x‘‹r“E_ƒøFÄÖjÕ‚D€¹ÅA®AÀSBcXQkÑ5´Ò½· PQn òK“ƒ�­ã×Çn%»Tm"}A£Ä †˜¡“ (&lBý]{õ3O­2dбÞ\N�ez¸!½�Ÿ¢›è3�q. çãøŽ�Œ»á:e9�þ»yö]Žá,9šwûs-‡1‘—„ô§Ïö(©Ì?f$ß og’tb1gý¶dD¤Lx§“†í�!ÄrþýÚÙ„¸ïÞò¸k e°Ö’Õ'{ÇùÔ’`ù ^Já Á/7Çîö„O6¸m ï2?ðÉTù€)å½µ(ŒÁ& R³W›ï°ýä«ârêŽæõ{‹"X^¦ûÝ>D¸®Ÿ ª(®ÁföêãƒÖC¡î Šv¼èWáÄ-fAA“ $ï�{ǵ^†¤\ÖWÚwÁµ©ŽÄMx.JÅæNr3†D¾†Í;ü§ O7šdìå�Ùì1³úÄ1³ÞQË3I)»h�]EÚ+ó€r|J}(Ý6­3ϽŒ‚ý|%Hi'–o”4?¼ô¬_¯»‘I |fÑç.Òì2-(wyß¿÷þ•(åÎ $ˆ}]Þäá=›¢¥¯ï#Â%¤ùÛ…l·8î{Ê¢‘’–ûúPš¡v‹$c¤¡±ÂAl€Rvú³æ-éºÌëWp1~HßB ~Ù²¤¸Cšµª°µ4h.r¡Y÷ß3,S€¢½¤±Pu–!w¬=**t(^åDq²uÜ�àÁdŸdÊùñ÷¤°MgµP#®ÇXKøY™ò-¤X¤ðWÍ�9 wÒ½E+ V�±foÄlöìâaü ê«…\ì�zmf«s± §ŽUð{cËV<!‹Ü4/GŠºðè,Þ=¼èÊU? §á XÛºN r –åª{¨ü¶lu wd2Æb1ÍKõ+·…œ¶o ãEJŸ~9óq] ÍO®mÃõQ§I°p93«Wu·þ†�HË•5ÿ˜”&µ¹å à€(Õ7èû;wþPÙJ®(k“û’@z§½â]¨Vu/ Ž«2åó‰¢Sé‡Ñ»=þ*K.¤l¬j/î.<[Ö‰Ú„ÇR€´~2ë*×ùMš¿sߦ¢®vbÀeJ »ÚõЇŽG–Å>úm;/ Ɉ3ö‘Ã1äreLPuLòµ�à´óFØ qÝ™�ƒ¼ò…Ô%Ñ.è|åà�v‹5wA)rú �‡Å¬òNYsmÆÄz½®föú7úµ6Þ€ºž’ÖZžO“UùÝÜ ïÌ€ô�¢ð•^>2ç Zïþнª1+D$²\¥é“�½`k¨ƒ“Žç§ÒÒwR „Ì}ã ‘|ž&›†Ð`-ž§ƒ ³) ÷Ÿ5÷²P¿ GûžÔêüÈ7¬] �¯•Þ÷3­ñ‰ã�‰÷yÛ&^Ú´‹#?��{/öë=S²{>ŸŠŠB`mwç½°ÀZt’sÎÆ�c�™�PßoÒ a¬lÆØ¾“_f ‹šIúô=û¨ùF̦¹˜ÛðÍ#yݸҷŒöýž.¤Ì÷BàãF6¦šý bÞ“�œÝBÞC”�û#Tè¤Ycz²×¯ƒÕ6‰ «þ°Ufŵ%|Üb9]TãúûJ0Ï‚Bovg•È™µ<ÐHz}íž�·Â'³×6ç©ÑÞy+ÕùÞA¡ï{õˆÏN¸Ã¤¢c*§Ä±l\&‘ Ìø|UÝa<þí} xgʶ‚å¿ñŽmG f7¯à}_Ú>qV£cg+ !¾<¼ VR4¹–Aȃâz‹Â“aW�ÕOÆÓLû �—˜àÌ»W™’ƒ&Ês!XÖP 8}·ë%Ï8ÕdÂW‡¦Çœ0HðõT×:…7ÆNhßàu%u!û#9¬J–Úaƒ`‚¬Ñ ä³ìyTM+./el:@u$Â#Gˆéet‚9Ý)kõv«*—¬°á(xo2A½ô%0²* À8Môì=´»WË6–ä°6ËXÞøù6IHG|×~!zj 5±°^½H™xÛ·ˆƒ¤ ÛËVÆ2¾åJ¬7DÊÎéžg�{Hg’öµ*.Jæ m¤m¤8ž„Ú—8ßÉÞ�ýMVF–9"b8ËÔ1Ëv^ìµéðýx€=!™ÞÒðÎÊOmê(�Go<’¬lWœ¢¯¦{“ΕdˆˆÒas-ÙSAÜšI±…)‰¯Brî($4Aƒ� >Éû˜‡ žW‰õ8\S£k†06bY˜7¨—ZœˆÔR¡‘Ôˆ+­JT'ÔÂQ‡òÓ\)¡Ö j’õ ÁffÁ:sÔÏU¥ÿc@/�FÜàoQõ·u�ø­Ü®Ã¬K…Ë†ëø¾û ñ =ª¢ûà:Ó¬bÄF‡/0ïBóuçµSV{ r,°ºyª×*«@ˆ‘‡W{Dž”̓AÈ–²rT»á®øÛ½ÏI­Êë|¨;žU\ KMS�Ã*êñØhj9«ª‚)ˆ¼ù.ùß0HòÜ|Û‰ùzœÏ¶®QÎçùs”•ä JôgŸayëû¢ÞÃ�—= L�<’I70æ ”}Î^[9óÔtRw³Y¨)ÅxîRlpÒ¸½LÓëÃ\ÚÉ�ð.|­•[°óyà_þm˜K*U³>Ú̆Ä4?wô�¿Ô�S!P©^e{ø¾¥²òÔ³œ`^Ðÿã“`œd6ður†s¨ãÝM‹Þ¯v–S#p§&¬Ž‚ X~½÷¸´qyk1ÎÕ‘2Äê�’4™û`Î 4t¼ñ€~ö¾ñoˆ8|è;¨P?£MÎÙ—DD"²í…ÙM%ë.âUÛºå¨0»‚tæcüÔÁlÒÍ&­ÖÆÍ%†r1C‹Ð“k*…ýý̪…@&[‰aô9s*!Ì$e2ÊOÅ]qFÃ}‚l²Ù$JŸêZX„ ²Ì8`¤\ÙGé­¼7cqHm§«ó'Tò=ˆõ*ôm—ÂLP…4 µ×3¿4Í™úÇ׺²Á:ªÊÒ:µ›JK0 ÎùBzOtRÀôãç‰Þvkà âWŒù–ø2É'¤UÕ w°Ü·1‡ �r‘E* øïø©8?ãEÎî¶÷ßJµ†Q„¶“–'3Åذv.¢R«×ÃÖÃ…²Ño´L† 55ŠÏ»�˜{WóbñÛÇ«è¦3Í¡ ?~ÐN÷…†@i9T—6š?»4HuÍY~H].„!mÉ�GFÛÊMóL_²/�”Íò‹°;¶Iµ©X®E+Ž%~‹®F†ƒDÎ|Ñ_rXÒñ0ر«Bdcº/±ÀüC…^2=,É-mÁ{ˆÃa éȲ^¡µæYœÞöü�\�~ZIþÈÅg¤…Çz…•VÆ{kvêNm�F\Lò�éÙ}®³§aç�]í­jÜ�)äÜ·�2ℨ¿ª5•½²j� ɃGq]CèwP,&žŒ?"igUí¸õœ=ú�çºÌGÛYü–ãì�â,Ž5JNw•ë"Ç¡�:9RYáƒwˆwãp¥A eƒ)8KXxª¤n®ží–zŸ3õ�Æaq{…~úZ9Y‘Z8Ôy¢Jz…ÁW£)£Š˜ühÔB×AtíJ?Jä4!·±�„¨ÒÜ®_0_©/÷°lm˜ð5—ûCÙ3ôt0N'œó—ïäF(Y­†JÀ°ôÔÂD–¬m˜°psýz÷êêÕYÙ;‚ÊX*üƹ;j�âÆÚ¾)2Š$ŒÔnl–•3f— ªßeQDÞžˆá�?””á/f§‡æäˆÆÐW=´Ïí¿º�rG­[Ðr }Ržô6Å-ëN:cMý¶È*Å¡iM�5§�êÀ…غcŠ/Õ˹(_QÊ ƒò!žDoªwè¢É‘ÄÊk§�âæ1…`wä¿5ݦHVRx#  }¡äqͲXëøQJ·ËF«_»m®Ñ̬çgÇ·[´f&¬ÿíê¶;XËÿÖœL¬ÜïÃih�àGì—FíÐx·ýl¶„ßÞÝM±¾=eÖÄVû(°ò!1Ink 3Ì{£¢^¾“fdYYT¼ð’V¼ù•d˜ÑÊ©cöÐ"©2ñžù¹_ÏÂ-õ#¯•¾n]6´Õ%…]îÎ�µB‡§ËMOsåÍ–Ñ)’á»{‘^ºTÏ‹Ñ�UÉ®Brž£Nx<½hKRÿ®�#lJÖÃ`U�¼»L›íl|ø«±ÁN½žÇ"¥HZQ»»b*°u¿>#>&ÜHæâúKö»z ’_á… ^ƒ~_Ξèõð­ªãh‡Uÿ_\k܃“°cæ%”TÕþ‡±x„,ßD¼|Qq¾Ïz¿NMÇ—î…­—ü„HÖ5~Î`×¢%àT‡\oµíÁÒ› �¯œ•Dqìb[¦6i´ÍÒ\¦²­×C‡Ip ç}ŸlUÌàWÉ~BAN;r i"a–®¯wòŠßþÛ §2Œ†bqõutB_£vJ~ÌÞîØÆAH bNÃ�`,ne¹dÎL‰Ö!½,-Ø€í©£Þ~�H\jI²O@.ʾóL†n·�…Ê ûV2  FÒ‘IšEÓDHiÿ£<ï“ ¾Ûw]6ÌùØS|4)`\>µ°6ÛRz½^† Ć+€º£ZRSbÀ³\Ó sp4vè?ôirÅ\·ÈD€]ð¬ÅV ü¨�EÞm0"¦åg´R¿1šVXaRçéü‘>[Æ‹M&ø2b@ˆqýEgг‚` §óØGí�€÷•)¢élÏ SBoºÍ#ÿ|_ - h²ü©~æe@#p÷E8y?¢TŘÜ|º.&ÃúÂc_L¿?U&™?„ �£"9 @6úé2þÊoE?nKâ:©¾sMŸ6´ lö„î"æ�Yw�ÌÔÒý0F£üY™°¢�Ð3K«òbseü¨tßûf­}O0Ê[; væaV¥eßA�Oë)²ëUŒ@Ã4EÕv9=ÜLäUãø6;°mˆ‰¾ã#f ê4dÉE‚Ëç4¾0å§RV� ïfù…Q·¤â‹=g„åIöôd�OuÅ£Ñä´¹$3§§À$¨{”C$nßi‘ÙXýZ|é;/`¥žZ~ZLlÔŠ‹Ä �ïÞ¡ÞÆ­‘ÞÞ÷�6v‘/5Ý¥NE´ÇLêѯVÑo«A@0Ÿ½x™°¤&ùáåC¯7âªåM§piK~9¯{¨Ÿ@C%R6Ib¥Q}·Zþy3»�sIQ5§¢Z·ª8ŸâD@šBõÔÅNxýYrIçe†–Ô¾ØR’@‚P�æŽ<ØÄ¨ù#ÓêÄö¶ßBpjué¼à4=ü´æS:�Î-ùp·RûÏt QDHý~ÍnŒ‚‘_][ÔH²Êu5I½Õß¡ŒG_ýÙ,��®n9¡ ­ÊP%ïu[¿ë–ôÁf颉8I¡ fk(âÓTÛLÈú^rS´bÜ?Íiæ i±-Y¼Í†)˜­³ÖœÄÁô øT|¯ìíû•¶¸¹/G(ÿ9ÑÊD_Œg²PGn'‚^ïátŠîÈP€áêOÔøFa4ÛN½*ìó>±‘SI¿.Xm*Zã9æe}Ö#ô]€Z¹s‘±fcÈyf¥0®cáK¾ôléSˆ�®j�õ±L…ø›¤4Wz£Sþ+Š<”øb›ö¶“D)<ÌIuPÍ·w—^süDn yYãÛ·D=™èœ]’§BåRR®¥Šã¾®Ü·)5he+¨?ˆ?ºMêãHiiádï]Û1; »¢úåªn�T;{ùÉŽ‘ÑÖ(\³“i@N°š‡1t�OïÙ>(Ïe…»[bcº7æñˆ–ÜçN³1|æïZ_=kâ¶°8Ñ\oÓŠÛÑ��2ެ$vׯÑrýTÅ&Ÿp¨¦$kçûTsE͘ºÐ²@�<ÿÕuº ¯¶å!«ƒ÷^ˆGdTƒ“Mùö=¿Ê]«w‡¶ð™»ÖU'ÝVæWÁéJ¨û²ßïÁÍ ³«‹] "&[)…Ùn˜žç,ýŠæ#×+�öWP«?‰ÐÂC/zÅ×G�9Öe&¢Ÿ]ÓçvÎ-yø­S·¨b¬ )‰›ú.ý KYpÝÊ NKj8²ÿ†V 7çwÖÛž†ôÛ-ÜÝލ„–[­z̰ R"Làê¦3µËºàR‚Òz"�o‘”rÞy•¤ï¹în³=Ù+vЪ¢[f0—·Óœ,¶}pÃËz¾ÌäÏBÕ!f:÷ æmACõbïÍßþbÀ]Ñy5£•y$Ý\{0–ì:â\Z�ö ü^îk@vO€£[)kzK’ÍFØçê%:‰7v¡¿—M�c2 4[[ì£|�òaÂp© Í‹�vÏ­ÿ$d±Q™�QÄ¿§§Y�ñÔU´4¤ÆØ0³•˜Ÿ5…œ?MÍ=B#3…™’(¤Oò¿InxåS´BN�LL[f¡!e/ò�nAÃìÃgèµ>±U!��túˆ«oŒ™�¡݉ê-íNVk!Ø%ÚÔ#t±hxnüÑC¸…Šç‘T�µ¢Û Ò‹5jð•ª5¼æù¤¹ñqãõej…Èh{–ßû¼±Óõ >ȹÿç!ÓèHgA�wGÆÇ}OpÎNß{Å–ÖQ³`ó‰x@G§»u>}T�ëÎ1�sÊ¡,iC•Ö$mz8Íü~(Ó� Jë~âá—£¸–×�¯Ñ¸èðMïÈvú®ÎfïX‚F³«ÙbìKðê&ïM#/qЦ¾€|é°_«à–kªb×�3ZøÏ¸SîÂL°öœíWá]ÕåÂA¿BÌÂDôÝtN›ÌA†zœëâÉX×¼½î�¸jÄÈ æø>}}&aâ¨W‰MÙ A·µv×}ø6rê±?_·U¯40gäEÊ�1гr!¢)ÿ÷ô�OQÆáO{|åPFܦ½Y }Å:ê@�]øÅ°Ë®e7ùô² Î�ða÷ ø �m—oùFÑN¬–¹U )Þf±e‹k8€q"~wZÝ• HÍÄ”UÌtƒ¦Á¡é^VÀl·@¥çyvx,Í­W øU7î‰ –=ÊlZAö-vS%åQdªåœ<”Ù4]úª—nÎ+Ú˜Q³¬" ŒàŸ†¹µ¾ÞÛî~'Õb$\�Ñþò4ÛÌu]ËÁ²/"ÙҴÞ»fá9ý\~H¶å.׋6)ýôWá"Ñ–©‚Õ°væ¸kU©p½lð'ò0Ò-Ä#¿ÔØsQ2Ißó8Y§õ]¬·uëLŒ¡Å¼K¾´�‘4¿WÖ|÷�_ƒÅ®Úý•€SÀV;œV°¹©Ü7í‹:!Ÿß{#ÍìQ¦³¦Æjê_ØÞ%Ê»#<~f¦d£«C¿°6º .OWy‘³�‚=G¤6%ñ•ø€žƒçðåW´b±$-Ò¨·)—±ËqÞ“Éár�áõ«ÕÞÂÙœÚÂÏl‡§VÞFÍ©òm*¢òÌ£�Lj´tK®Lhb!®]ÜÙàä—5ý‡,¢Ö�¦ú*åCLZu#då³yÅs�cøc£ß:-¡Y°v5Á¨¹Ñ[¤€¼Œ@ DNRû{4Q‚µ“Z0—jQ½š\ïMç¡+{è·hÀÐ8о4^�|–Hº£šeqÇ�†Œƒôîà*¿Ä©ÚË”—óøsd÷öÚ"Ÿt!-DÃ^+Ú“æ‘TVÖâ¨'C«à£m-†  ¥,B�úÞ?áÒeu¥ù<k ²®¿—×(DÛÅê�AŸ†ëöàsQ½ª¤€P¹|ÿUøË7ï-G4dEJ"Î<6#³�4üly¾Ž˜¾òMÃÔ«c#|Í‘d!‚lV6·˜MìçÒúä3ÎmÜ)#?Š•Û«óâ-Q“`ßFºÎÈ[=šîÄ* …‘�Îç+×µ,Å…^¿ŠÖ0çøSsAúÁ£ïÙÅÇjˆeÊãÒÂ(-o1šn›(YP„.$ÎíAàf VÁÙ:oHE½Gêð‹ªmZÞí*9SÛÃ�+eÈÅ><˲ÙÞé>W‰°¯'Ü"_�´ó7èW¡„x°~({§uúåÎo°`YߤÖ| ˜ýrª'ÇHPH2g‹ÜÓ:ýë3ÃI¹ñ|ŸÉÎòb‚à–Ÿ"¬ÿ|H°6uW�ÞO¦)ÎÞù‰À]#âþ°Ûô £ ü–ÛðläÀ3 Ð~1lI4…Ç�5ŠAÝ–¶òssþé@¬j¶4"‰ªkÜØj‚"·{gÕ-Õé2uÚ.×Í¢ÉÈö|qÞ® T0¼ª)ñÄç³\Øq†‡(_ú¸5Õv*�‹açAüÓ{ó]YÁò3±xDǬÍM„ÝÎ':áÔ=2W ’ŽÛ‰³§™—´Í嶈—·¨óó’~ùÌžhÅrV@ß�u7 ö1°» Ó™¼��ÿkܯ©nŠ¡mnkAèOú¡§ÃnˆZ=Óéàar› T;NP�È&‡­ž:èTrÏú¦ˆuµ»EcKõIÀÌY0éHÒÙÌE„Ô©TT¸R;ʸ½U>ÁX™¥Ì¤ðÜ3’¤PU˜4¹Rl1²þ™UL�|™0µf-a1zÁ+¤íÿø�7&6O'jÐÑíÃÏ_”ØÛDÍXç¶ŠygwÃ)qb£ˆ)Éð¨3üºr.ˬF”~°TxhBYÇÇ&—{ø¶]“— n‰ÒPnÖC¯çÕaCÒ¡ç?¸ÓPÍÏJ@*2'\Š£·®ü XÇÎÆQÕÀzŸz¦Ѧ¥ÞŒÀ�ïÍ’nó/Ë•“ç•>Qð©WŸ½]V+‘¾jñT=ÌëDð§œõ “ÞgDO�ñ ¦#ÎvoSWá¹=«Ñq&±~¿ŠTû”#Ùÿ�Õï«E�@L7G@¥ŸÞ£=IÆ„ffÈ­h`t¯½ÙúyLQ9Î Êzm9Ò`{}K*Ö*çT»WG½æ‘ɆÒ!¢†²Px×:$6çÒ| Ì�êo ̽´ãtñ¯JÀ–ÈŒ>vMjß È¨þá¼0¤’O>Né’þóšYw0ÚŽ™9ïíW iwÊ©á{±ÑëBÃÈ‘ùè…d²‹4‰yÂtÁ÷áÂx«ª�Æ ZnÉú‚_XÜëÐò“rrȆN?ËÖnST~سTLLϘý¢ø+­ƒG€NFp þ…©Ô˜éîQLd !òÞߦ@4¶aìUºS�†Ð¦4Ï7³A8ÂçKš$Òwößõ¹{y7¶ifŸû{÷� :dúïhc®U³¾{í1?ý Qeë M Ñ–ÓùíàÀÌì«äõ0/IÄAÎ4o·ømÕ@:^â¾*mhEÇ$Svc/—ãCˆÂ˜S †l§în÷ø­ï¥¤pUôò]nñJ Lº@ÙùŒ¥—Ú“yÖ (oPÈYãpC.„"ùåX_ÒNßä.ve�¢ºÊöD?V–½Û³Õj,õûÄw_‡3ôÝú[3¿© °ê�ÈÙ¸F6"z``yµ½ÚÜA™ópÃ�Uý”Ô0/Ye#wZ2îÈ Fɨdg¤;.L—L† „¬yÄ¢®oØ«Z½q•ò&�: Ë8µ™_Eù¾B%Lº(J© ,Òc ì¹´\Ý ›ÂÚLÖ:Ðlã.Ã(Å Ið€N2k´ð\ ‘¡d96H|&퇭˜V!Dãù–O¢‹~@‚ÐÚà ¯¬]¤éªI°©^a×9·DyWØpý |P%AЉñ?Å­p Ñ^ ·Z£.BÌ\£o?¡S¿Âèê�–‡¤”¡º§««‹;9£Ôýés¨ëBå/‹µ±P#èÌä4— .æ,ÄØ~$§cqE´�pó:»çdë§QÙõ~õ\›"zå5WÎF1½8vßeVõ}gû5}^h'À8¿~¥�Ø…Œ±ø]ƒ{<•…2¬øu䊪é]³Õa˜ˆ L¡Ê/ª)^&b)B.ÞÌLîž�‹^wòma'EÚ5q9^)CÆø²ˆ¨o b"¥['yœ †¡|Ù1²¾w…’æe'ÔùÚb�2¤”o>TÝF œ¾þüB!+h’ÍúÁHíÄ$"4Yz`"¬<»¾LµðHͲŒØÏ"£!ÁȤÛnyª„?ÝhcÐ%Nvôýy¨éFì¥òËöˆ>‹/{0$Á®„‚°¹ST™}EfY&ܵ+·}»Ö櫸û¸åf¥7ʤž§,R¢SîÙ8vh Ÿ«pý�ÑeÞøŠ�¥zB3$zDï¨ÛX·–ÂŒ› ·àK>/•Y¾ÊPoÃþ%â�é^Nd*ø{†*Äû�ЖÅŽ/Î.*•žOÆf"J�&ô¨�úÌ´Â'Ú¹nsR©¯h,àbFvpÊ;…Žì¥÷}wYä b>¸õ_´"”xN·Å[ŸLPÒ(|Hª‚�O?XŒ¨·÷žÜmåPjyRF"ïcl 3©æµ\§E ?{A› ?ªßÆÞÏÈŠRîå•7“RSå= ^Älc©Er?a*�ù™¤¸d§&éÿfçA_z¬'×#ªº�üui†Ð}¥àOàtdûF7³$“¥$ö ;jZ2ÌåнgG&D¨¤q–AÆÔ{ý`r$@ #úãš—Ü÷)û$§£¿lÙ°Î;pͺ”§€þÒ<ç‰ù2v„’ƒ Óg½Ê:›4"鱆qdoFÅ ,źNVfþõìoy5¿¹Ô÷º·+,Ä"ß`˜~$ˆ){x5þ¾G‡|§/Ð1!j[�\­¶q›;Oº ŽK„e F‚²äšE%:TŸ+=¿÷�ÙY$Æ}»â<³µLþXû³ü£Y;Êx tòÅL§}œ*ä ©Eâ�Ü™¹hA•ÄGNhàÒV*?¤Ú„À\k z8˜|c`¼tÖ‘B‰3—ä¡ß—ã M�ÅíùÔÌßÉkêeZµÏÕt.2ÒÑo=ìÇCAj61û¡Ó4.1mGcŒ¹6jîÝàJ›µ÷Sèj$Âssí.®‰VIJ/)aP¯<™GÍ=P¢¦±jóýN©e$£*b£8ùüö½Ó«jqþ‚) ÂÏ´£/d:=KË8ìCÐŒ§à…1¡mû)ø ¯|qJ•Eð‰Ï’!6Äç²2;0u0óåâ9œ«ÙqÊ3í’eIÒvÚ þ¸/ôgfÖ¥š”»ñŠ�@4mµõxqÂýj¢¢ މª–Í2nF&ÍݳG"�¦Ð[ý”ììÔ¡¢ùÝÀc ©’¥9º-�áU, ¶Õ#YØÊzú/‰ÚK«²´ôyèOMJD>ÈlƒÇõ”¸iä5g*ò qˆ"š_àB.:(ëES#wWs.¿¨Z&vɲ?M[(gàjìóW°LD¥_±QÙ�Ef7ÉÉ!54‚«á먶 Áw/>ØMõr�ÊF~ºJí+€•xfìa DúÌ´-gºß„>,c:{’­àê»Nð¨Ö¯Š/…Åêék‡HC3ÜXý7Ÿ�_ø›U[£üÊy äÍÅhC)!å{¾k­§'³È}„±-+Æ4ÖæÖ:DÅVÉÂE#¦†W¾e¡EÛm n£Ê°;‚xÿUPÜR``ô“ñý«fûH—d¾¢'pÚýlcÀ5ÔÕk)¥X¬ ‡ë5‘²vD,Õ:vê–ßQgwÝ€*%!Ç)x„yÖäëYÖç§Õ•ױЯüÒW„²`JÃr—Eã™cÝøË­Âa?ÑC»—φ—. ÆÌ×õÓÒ2ßb Ž�Sªž¢ÍôÞ@ ¨7cÍ,ŸÍi§†š¥ˆÍZ§!;ªW~HŠ$?yô ö‹7êõ”çc—Þå�®•5ºL¬#} [®ÀAFS$âW¬¬iʽÙ`Už¬`ámQmåªì×ÊÄx!zËbƒUŸ®A`؆Šë÷ŽlaÝ×mÞ|h¹4Ê6”R7˜Tµ (Ì5^£nËõÉß®ƒ`EõÝjøpŽFÙ†:ôèõbkuÍ\Z®”¯ïK[ªèˤ¡æ¦‡3•,¸ÆNŒv(hLz@$'":.ØOyæɇÍ"Þûž¬'ÚïÒ¾M“Ïa‹Ñ6/שA‘‹1%ðÈ&€JP2²5JZ0>2JŒû“>5ã˜0xݦüæ-â"w'€Z}Çܦ•v‰NJ�:G"ø¾è@|ˆ²•ÖGåçYÔÐi¶‹òðÍ O}€Ì±t5­øæª„ÑVû²Å6Kð�‚ùf¦(ÕŽÖ�æK$ZUJ…ZÒàëmÐGt³a8„¯Â[Ÿ,×Ó]N>¹OÝ%Ä&6d¿ÕJÿöÇuþzOHÍÁ‹h`_ZÖªQ¢™i°L×|zYÜE2Å)2àE‰_cðC‡»ŒÒõ¿îàgP1hè„ ò#-þå)Œ=±J}©7þc@šýiŒ÷ªD ìïNÈóÏĜ͙خ˜ùÈå•U|^L —hÍ›Hˆ˜�>³€}M/Ù-”¶j¹>ÑèŸ(ü —ØÔ‰høÁ¶w‚öV$mu­·+[ÀqÆÊ4‹4J´ã£W“”¨Ü~ŒÅK¾$ºÊ×ß*:–_&ö·¼¯äRè¦Pž©³]™‚¦nt+™Û+3h0 Ô*YNÚÜæŸ._p¦GTêKÁ6òžD\Žfz�½›_uÃ"è_>mN¯~ܽÓSåîgl„8RÊ^ aã�W>È?Á?Ò»‘±´|!…,á�þ5¹=ØyÿÇOyxÆÉ-©“QIXAƒw˜êœc»Âu;Ó¶8ÛýÏBT :WÖ|¯ìê¯^ä¶h„‹Vs¨ Ÿ cC‡†¹=„õ'Uxù'Ÿ¬Tæ_Öý ~»]@ž òñF0) ˜\æ|(±}hD’' ðØ âÊ4žéº�x½í G g˜ct$ÔǨգ(+¬p®¦¨@J&ˆÞ�¦&¹9P¡JlA<§Ó$AFr#¸E FÍ©Z©D4Á¨ò†©íïõfxt00iNÎ}ðM-‰SvRèüΑ ×¹œ­ªëXžiCh±ú»“ôCÂCâG÷œ�w*%Ãb*¯�ŸNž‰£>Þ+cûÊ+ðýac[QZ�õ‘Vuyº×7Pñb;Oïÿkã–DQ#€ŽmÛ¶mÛ¶mÛ¶mß±mÛ¶m{²J%‹÷Ý«®>’óŸKÀÐ])ðyCþr½¨‹™…¨æ[N"4cº¹Ô¦O·ž�žÿñ 0{Z7mÜEZÂ�^:(ü�º>4¢wÂ9àC…Ė✠QCSø®¿ÿ|1·ÑjIzò¤¼U­g*õæ�É,Ö€,£àæJ%Ü¡4LÅz1å™ ŽÕÔ0Út¹µ²tÅ“ø»ö%�›;¼N\áÿ„2Ÿn[Gª‘*ƒO*óóûÎ�˳22_µñÕl‚À�Ȧ¦P·-VOGñ­ YaCXO ŠœE"³êò°W:L"¿¨|ãšcfØÙ¼ç]KäK®5{êà�ø�ǃ rÖ�Œ-?p¡ ï,‘­@Oj¡PŸCÞõ²´@ �øg“xÞßò§þ›ôÐõÏ~ìE) L%j,yÞ‰cû-³j¤[.ÉX©ÅÏ·6 È©ífB’sýv`*rįSÓñ“Ú‡Ü0ŽÆâc)ã܇³ïtK Øj ý6SûÀ`(¬j,bãÙÒ/Ð߈�o5Õ£_"0–E’MÄ·{!FÉ�÷_Ò_ì(¶?›tñUöÅþF’bø:Ÿ.Éì^µÍ©P…`Å„‰Áá¤ò°XJ°±ÖkjÆk¸ØÊnÕ X¦¸z)çòÅH”Ý4"¾ ­RFÆQ=º‚EÐÏÃFŽ–Ý¤•õÀ(þ=vä"ßÍq_G«„ }IÅïáhÍ|….×�%ÞùÅAÞRZ(*UR�ÊkBá ÊCàëç�êas¬�AˆÓ(™@rD¨Îlõ ›‚ØÁç ×ÙÙø¦É�‚XdŠNZÕ gÈ¿T} �6úX6@Ñ£7Z¡CºôDμ?& ÝâÖõ¼BlÕ,/ºßßÛñ¹pg&}‚A&5ç¯<;~Lxf¶p~~”ÁB;L(¾ä.}¹!kŠ.áö[5ð[�)Z·^6ŒG:èà æË'‡þÍxÓÝŠk\öD㌯˜ ÕڨȚ+”qf=¹ª�«‹l_˦õƒ„Š—#¯Ó†N/<<+ T‹Bhe{ ö¥”ø C7òh �"n±äSÈAd®š…°·~ÒiÔ¬ÏïM-™ œÕÁd5 •FI/�Fãða®ŒHþœE‡…!²�€ÁÆ0 /âÒ¶¤;'‰Õe„\É%Œ:žÉcÓ$Gwó'Óý–“†�f«°––>†7 ñ–!Œ‰Ð¿Ž‹GÔ¸‰üY½¯]«—‚çÎ’• S5Kõhà�ä–yråûÄö?¯»qÐÏî•8¢yæ,µQï £˜î‘Ö;†/ÁPzÛ¾x5ôu‘ª0å$9KÝ–�NרôþUŲök¯ªø˜e0(v•4âr,’ŒÅ†£,zºÓ*V6@çÉ’Êþ5ÆS*ÀE{µû¡L6[nVÁìì„ì€ùZ‡»ñS€ µá☷ÉÉ'Žg+L·ÌtÖrÆf}úP3±‹)K]Æ[YpéFT¿‹„¡& e_Ù0ø)pDJË.‚æ�"ÄW0ˆûPîVR$Vn¶C-¥“Po1üàË * 5_ƒOuß‘N¿¢J;˜¤];1á�n+®d9›.ë>¢ÂÝPÆû%"ëßùè/YÕñ9z’€tIb^ŸX]ÖNô>¶ O/§ ¥Mg‡‚ÄÝJvgoÝ•u´6äÔG¤¥Ot!b¹õ‹´Ý‹Dá×1dD%�pl˜8/W2j 47tÀìØ•ƪÌx Âvº*Z_Rpî*Ï_�ßž@t>‹ång-¬&$Î ›¼¥å#D 9凡X:s€l Ö Üç¹%y‘1Ñ׉T€Ü4W˜W ïó�œG%³÷T\VÙ€CW¢X«‰û™f|[B³Ï¬#žÔ"ÄóZWК„Y¦ëé¾POú —LþkàN¶¥[¯G m®6Êqu�¹Öwæç0„±é]:ë¤ÇVMeZW�™aÆ›Â~.Ô⃰–´|z¨·„åòòv‡z‡ÄRŸ*ÿö­\ùÙO¢Ñ:~¤´?ÅB)"0”bmï�c �À½²FAqþ ¥#ùˆÚ],eW/¯‚f°ØR+M U4QŸœˆd©ÚKÀH¯œÕ¾ir�ãßò>˜\Ú¸)^€.öV[’Ž˜f­2LHIùv(ý£‚fóðDãÄÞ$�\š#CƸ3Ùæô`Í”ì‰BÅGæ–>S%‡ÚT­\zEÑÒ Ý†`›¤Ÿ7�àg˜©Ul7{æNщVL¨÷Õ•´UæGs±yÙ’®³®ô´ËŠ:Q!¥É«çðCBÿÀ/¨¢ ^�&Nh)ö᩺¿.:f³dpF¼{ºßÎ-nÖ¶�ãÆéHãrštÖéïˆYu?JBü˜çÓ,ðáh#Ž¢v×Å>ò(ü€£†ôÛGhlójñÔ´Œ‘'°ÕÙtös^H‰ÄJgxY·)=p߸„9×ÛI»c ;ÎÇvd%£v˜SwàÔ^¹¯HV¦ýüŸ´WÞ©É4‚°œ¦,6¬{j_‘èaü=w¥–“û¾4€gæu¡ÿR±FÊ«¡"ÿ–�µ¶XÒ�»GOo^dÃÆ©tðQÅd…ËÈËÓæó™s8ç,!ððÚ%žö=¸w Ê|M“r1³šI�í|ûJ:'s8LÐm\¦B#çWh7DÆ�D{r]›ó|Ìe¿¹ý™é<ùÆX”¥oGvÖû,$xx t2—Ü4àOúÊ¿gY7+’O¦üêÞ£G"B@¨l°Ã%�AÏÇûþ6¹ 4Ÿ­ŒínO˨í�Pf5yâ¬Dví';^jˆðwtÙØlàe3åWRêØ;ÛäZáðÒ!MH‚J§;›8Þ$Œá[ÿy‹Ê°b ÿûF˜Ç³×ƒóŽ0ô|¼-±„Õ-&w m»ßSï·ÁBÿ4D‹wBú³7‚ü’«º|}ÃíNüЮð|�6¨1æl±ai¡ß¾}Œ»gQ¹'ø— îM xtÅsÐ$7xXƒÉ/dÎ!ßÃq¢ë©ø‹Ÿñû�÷)‰M¹‚*-ÒA@&iÔ妬ú£`ÇýÜlÃP\©ÀBöÌwç)iUÁ �]H:ø´(¤Zdd˜J¨à�äÕ¦ÿWg¶Öÿ¡‚keDWö&!mõB»î v¡ ãJõ`CÙ\òãzÆ¥±Øv'ý°0/¿%wV›ælž-…^Ưf`a“4ŶL|€“Øý´„SO¬ŸmÝì¢ö#Ó1äð�üî#5|鿬J“‡w»ÓaoÍG@GÑhDbä˜Ëy2t¸A’&ÕÇë Rè£Ä<85A;σÿU…öš?¡WCSE&òp¨ûòz§­·:¿ý‡'µ`80pàõDÀ÷>Ï̇钛ßd}2Λ4dGʈÆj|ªÔýØ("¢¾Kl+›¤Px»;"ëº?®'FO„žqè¯aÓG›æ'MçÆ‚º�L¦èq¬©ÙãË3i9Ü}¸rq –¢Õx]°wZÞF°¶;Ûw¾ž´,Ïym#[û WWïCqÐ+‘ð\uм�sŸUè2}Ó¹¾&ÛzaB^DÎ 8@Ú-)©xÝ ±mã^ó³tãT´Î¿lwÌÍ&Fóã„›|�’i�ïË ‰mÉܤòjô,tNzÒY'Ó?~‡ñZß±{Æþ-3ŽpR»²ø‰êAR+«{p¯ç ä ˆöt$þÙdÉ J JµÁBloY;1æ`))bïpz\ý�¥… ³ëföÁ"À6ÞûEéPïÓÉ%9Nõ«]¾r´ q´ßòíÑY”›äþK’ü4„cï0_ºpoQ™RB8®ew›¶³%ä”Ú"á´Žü°$*ÇÄ�ibþQJ@DÓSä5•/u"³qÛ¿i^È_Ö¤ëg²)AL½Ýóµ™6¼PÅ¢üæS²á(¿¼Çäa éù æqIŸPóç#Ë!-³4S-�RV¤lC™™t †¿œ&ÊaÛ­¥ÉšîrgÖ…xÎSi.ÂLÓ¬XU}óAJ�¹ÉÅá—ÁJйã´D~r§×sN¿|4ÕˬN‰R̸î]®!ƒ®‘»2Pé⟒<#ô7�lötûˆÐj…)˜|k’. ¥–»±‰ŒEv½Ryx§«iÄýf½pŒéIáU¾�ò.¡íœå¹ç¿Š9ÎYа�¾‹óͳB³o¯–,oª£&Ù(Ÿì“ÒùVãL¨y„Þ³d(ÔŒPæ1Éâ¦góë¾ý4¹nÚ'¸Î|[  à­s2 \ *ÖH+pÁbãÀÏ• Å{f„8Šu4åÅYg†ŽfÑ¥ÎÅ·¥iþ–8âõ9WGJßœÒî ´³'zR¿–YÑËEn7½¡6¶ãµ6™ëp(ëû4¸<2+²Ó¥>%-,0†Ìhn ‰q_ݪŸØøü|à«Me,O$êÑàY›•ɾf¤cöꔯþ]Ôã•(cê õ6ìZ�œÍy<°á8º4‰Õœ…±Ð„³'J1zF÷2dx<è6X¨@Í*Ìý�uö}BI¨bØÐ­¡ƒ( ”&@î°cd4Ž·}yWFÎózé¹ÁIƒ¹+ ·©d§C±:Ô°-?œ`�ˆ(Þ…bk1F­ô½Å¢ÁO#¾úQ\ñ‰¼!ëFÎ#ÁYH�ÓÅ"ŸÌÉ>ChƒÀ£‰¢ï�°½¤V×¿Ž¾à»Ô—d·qéä@¾ür£ìÜ �`J[î§–?îÀ7wmÒÙ“Ã09ž71ÂÄÜgtÒæö^„øNDºM[(Ö[€cW¨o6ý Ì{EeQ±ôjEAîÌ7²�6ÑUâÏàç]—ú–œ^î�"×5å&Ïó� ]‘1¹dóOcÞœ}±6BøåUÖÜÝNܺøòì.:;žÛ¨Oภ*5,{%¸Š¡SŽuð4÷Õd¬ìM¬ï²Ü©H Ã×?�QO4VEœWÿ@B\x¨+ÇN\�ö˜\*ö`'þqKßòÏû‡îùÏ:ˆP�"/Á†�©pZ¤Eàí!™dš"L29îçòÊÛ�‰^T¨þdQxs@â˜Q%Í©ã2vxíåc¦AGUàaÙ–[\äŸ|+]Ðlsm®ãÑRUíçnÄkíÃ[nÿ»ýò|ÂR•�þˆž[5¬ú(§)ÃfTÝílE´UîSX ã++á|H>~¶¶UC7y¬ÝÔ¨�»AÓ>iðGmˆ’%I,À.î ` ÷fƒ Dƒ�É8éʸ©Ù‹¾QBkNeµ7¼:({�ZÀ~`´‘7D(™»�“¾J±�½¯5|ƒkìócY� >ãl¦x¶ï à U–hÒ˜5ü”Ί¢èZf†{_U/¸v\FË›ÖÊzÐa×)˜ŠÁTe„ë6j©<Åû?Ifvv‹SY ¯ Á~sÎîôÞDVfŠvø¤ãQW“j °Ïv�â" ÀH:¿oâ\ù…š“ð8¦AìßËJ7iT,;Ô'ä±iêtú¡YoI®¨€€H¸mÙ@·ÊyçK>�ì ¤Ïœ7ýà[d·äqÿd¢ú²ôí Dïb0ÖÒÁV”¥ Œ�DÐ�ìå|ÔÖç<à…7TîÏ}Dzt Âøý¤8‹éd !¤‘�lvÂ&5±Â2ÁÌ—ð ßZaÇàyèx|åC»xøýMÆSôOa‚wì‹$Ó€2Hž˜ª.y÷¶(`x�Kç(Cc gT^¦FÕcÚØ?Œ¬|4d Î8HàŒ%çF— R¤z¯ééùïˆÉÏÌà4ú÷YÁåþ:62»�PKm:Iñp¿†§bð'Z/|dS8Žù8t\õ7%Ÿ/dDY|yȘ‹à%õ \šã©kmý)Õ²7у…H_fù• �‘"õù�t²Õ.“¾HºO«¯ p‡ÔZ¶ÁÕNßBç5�0°·*ÁfÊ©'qcš_`—ÌþÙt“ûDë!ù –}øíÐÏþ”Ɔ†˜ ý ìüs‹�¸¾ö„Ý]Yn�÷',­¤šë׳'+i¸ˆ]T­‘·�íRz½ÃnÁcÔ©kQ±˜zA«½Ìëïa1lM‡nˆ%´ÓNLy>À] †¡ÿx> 9óf±"Ý#ùÅà™è\©]s¥tì]DG T­íð>x6=•~¨`{F��9Ò6�Ÿ~EþüB&Úgìc3'ÊDÑ凯æ¥2Ûˆ ”µÎ÷JRT¼ÕÜÑg�™PP/¥2ÅØ; É8,aE&Ý¥Iä»8(QÔ"kåÎÖé<÷K[2ùK®‹Üqê³êv¡úO_¹HZŠfš�.'*= ê/”d{+ûØh=êŠîöÈÿŒIS¹#°‹ 2ùwD'ÞÏ*ʆ+VƸÒê&„yÛÄ ”À ¡÷är“SÑ(Ä�àYu?CR«ùâÓ}ˆPár‡—°ÔѺžÞ ©Ïd ¦i�ø¨HH|=XäÕК_‚ìŸy[Ÿ©<|W²¥=@Ú>È÷+*"÷+%Vг&Np¥«RÆ›õh¢ðèhõbIin'mr³äÿÞÿÅ9ÂåBÊ`‰‰J»hrt#œã?¡¹¦—\ü„tÇÏhÌîhÛž2<§Ì4bÛ¤š|3Á3Ñ´6n¡& 2 FiÈö„+*\eÙ¥ü¼@ùîyõÎîXcï­\ÔÜŽQbül�!Ò¼ð¦À‹@Žâæ)uÇ៣½¼,ÁîèJÝߥïêX@…ÓéüìÄÏ„„dç·ÎƒJ(JÓ9¢µЊĕKÍu¨ðR#Ä¥“k•­®˵›h ö ürµx6�Ï>4 pøãÊP"5ýzòXÃ=•_m(ûœ»È©ã_ißTÏØ ‰l›—‰a:r͈V�$Ӭ޸;I&Éxs®_ªÞ èßÖõ”)ìBЉ>άeÆw¿Î2ÝpüÅfC>DÖ`bÁ³åðÏhq½’ëü.e„0(QB®ÅÂŒô�e#¦q˜$T”º3ˆÝœãK®¥ÉÀ`Pl± »E‘ptOc%–L­Í¸¢³FPpÕå`Éœ†¤åpÞ9]™ÿÁ ±‹ø¤“CbkdMÊ’ ¦>Oq3Ô»-‡á…¡}ܵê_÷”tEÞ|®–Ò0öcs­ÑÅ‹:Ô†¡a"�ýëÕ±Î*X¸¸�æ,v·k¸1è*ˆ—ÍÃF3ää^×½R’ƒëC±çŒÎ?§DÌ’š½º*Óã…aCýáË!Zmÿ¤šõ�¬_ðª X Ý ¹«j)/3O«ÖNÒ ¼AÕÓøDÀ©nοüüœ;„Öp«<«‹n!2i½­„–«�Tems{-�¡5&0ø}f›‹çVÄ«ñp�.Ì�c/üQxýyO ŽÀžIŽIê Ÿã²è)î̬˜6¬�GÐ~\ûz6,±°çn{ŒšEdFÀÑÇ¢Â~íß Œ É»¼X£¸5½æyK»ï¬UœšòË …OFݯXü@é-$j1ºJOöë?aw&Oxå�Y§˜wiÙÅ|Mï„›ºšNIJ£Äù¬^{5Y³Ï¾"l·„¤íîæ¿­å2ƒmÏí!Ún”ù7w]•Éñ‘EœòØÂß”„Pwèp¬�Ä™uq‘f!Û[ôx�¦rfãÜ74–»ÎˆÈèåˆd[Љåuô+{0M–ahê[‹8©�j:4[‘Ô)�œ‚� µ¿rÖ4åËBçŠjñwcÆ ÖLu³·…¶¢O7šm×–§JRûÁ6P°i]ˆù]¤i2*�ne¼µØš½¿€$½÷Ëÿú§•Âs’™”kÁœÀEic‚3Î]Ø`Ùà”[®ßÝû´[1‹5£ØÓ~û#qú �5"+1y�£FðÆ]pÀ+8¹^/¸Ö_žŠ½s±�4œ5ÅÑs™Æ0ŸRa®ð8´TDÓ¬x·W¤x1 2Ö’v:Àí2é–lŽçÏòg4ØìBi59­_~©k¾Ýþctì'´3³ØºççÛ×䣌Å'Ösóc/×OmÛC¾g5/?ѤD: éèuž¾…¡òÀ:Øš¡[û\©É�ì�£AÏ0º§_éµW]«â[šd€Ž0Õ–¥=KØ÷ÿužÏ�éÛEræáOd,ÅXY`ªé#ì.÷) ,ÛøYoÍ$-~ý¶-Ö¦µ‘cçWž-ùšHÜöŠ8Q޲‚áp9 ^M}ÝäBÛºŒ-±ªÈÕÚ;h¹™ðdõ��\m¿…Í1_æIG•Óvd†‹ÙŒH+@o9-o°?Ydƒ™í›…:Œ(·ÅaTçHù·¾¸R!¥¤AAQ3I žžþkz#“Œ‚û!Õ¹$Ó$QEùæx#½jã~í g ïþ”b¤ýoôÞÌOèg—+„¡˜±Kd6i6ýÌÒ‡Žî•S+„çÛHè�M³…©ÍÚµü÷Ó´d:�𚎈ãÕa¨ &çíSÜÞíªö+KëjéD� ßL‰¸9¾·&°¼G½™YVßÑ©i¼ý–”4õ©b[Gq%� ÜóËá1b°Ð;Ÿÿ€R| r…òèƒC;{+äp y2®)�ÍÚ€!(<\tºw2¿ìã®0˜ ›¦Cè½ÑØ$.š©—2f mê u<’¤keÓŸÑ%i+}Ãð8¸Hòçä"~W»ÿ¹œg¼Rÿ&<0ûÑNÊ ð¶£wéɧƊҊ„„®½ÊÇß!͸SæÌ,bTdÚÍlrˆGS>hÄÍX�02›vtª^‚%R¯–Hï[~$h( )¿¼®1c:ž´ tN&±¸BëÎÖf'¥¿±úR³ö™CÄI!ÿ™~aIéÙļp9·£¾Ø¿ìp­~³ì~ ²¶ ÜS˜O‘‰�MrÈ3âokùû6¹ìÍ›�µät-;H|‚ 9\‰H:ò<ÞÂB¿ŒÔÇxúRníô¿*…›µ#Ð]S2z2¿=9+×{|}™lé´™£ÁÉZîob~4ºà-}BŠÙ<®5Ô¸†›�yûHx)²=bÇf„££è qº¤È–^<2Nk�wü¶÷@ QÏG�âóŸÞíÛŒâá–• �¶§™´W7 ­,– IK±>RåꮞÆ< æÂ ÷æ‚ü¶GÛžÈÿ´ ûN¢¾�ÐǶFfè ó!ë�&4íýó9OˆL\UàϾ!Nˆ vàfXÎè‘d§íqÓÝcx¼ ,zæ7¯µÌ½ÖD‰�~Ñ<,Úµ15©KÞ´µËã/ß/5¸²­('¢Ž‡ÓB§NG论3™„`øî/o»g �ÎÙ¬CTzÌÖg¡ž Ì[=„æ“Ȭ° !úÔCб¨¯Ï{“~ #eâh„na9µŒâÊç�€¯JÁ*×�~{ëaÿÅkQ¶i@5£¡håâ¼³­U‹§Y8&óßë~PMÄÇ´ÒÉ«û* ›Øq·‘uçŸ AД¨Éfå˜/Øúôò§»B²À¿³\BßO/&} â ;Ó|¿U3Æìf8g³'\”Øn×,*ÿº‘,Þûu8Œ�¶öÅ~)­°§¡VoÖÑ|HÙþ‚#oeÇôô/ˆMs¾@Þ †‰ˆ'Ê>ÝÐ8¦+wáÝä«òˆŠÊÞ¬ˆ={ž­f—T¸†©ÑûÕù]y̆T&ÒéÕkHý=,JMðà©»€/¤ˆö¼Å²d1“ƒ#Xwé2xœ�RbÙÇ‚òÓ5}F?ެÞ�4vïa(ºõFñö+ %—~†§Uã-oWJ™FŠÿ5%•¶[íé éŒ�Ê\Qº6+F Ëi 'ß^ûg_Äĩͅ�$ö0]8¹�·Ò½áj ¢…¾<—&שxï$HÂÒ�_²©r¥?˜¬ñí„Hde†É¬ ÖE5ø.@sUúat{U_Ô¦æ»G“Ëþ®ÃðÜ K0-&TÖµN@øÅÚégMò¯’M‹/ŠO‚Yü¡É}=~v~“Äœx˜bÈ{¥^†�1`c«bLó±|vöú§ôïçÙæ÷}$i/4ZK¦ °¨ da¨u4Þ ýÜ*é–¥›”G$‚¥à‚®ågUkàÜ t>’|éÀ—Ò@Gþ¸¿Ø¡œ õÕ�Eçø‚$ˆÓðÉòÅé�c'îÌŸ´(BÚ®¸Fž×ÿ”-@õßùæämÛ“çß•µøõfé +¬Cx¨_8Éó¿FöÏÖ]Ī&Ì#yþù �c鎈R"ð­Ÿ ™ ,š[+òëá9èÒ3,dØL©§‚: jì%çË[ Ð?cÞÔU›•&�—é3´+lЬšûáê�‘ŸÕ&|±C=Ôâù5ÊÕ’}Gü¯[ø´/`Õh®�Á\N¸àR¦­xtþR1‘…ò¯ØÛ¦¿†õûgë­¹u°×måÄìvûíà Ø.¨»NO±�±|6N�v­`¹ÓÚatž®¹o1 䪪²¬µñ:}vY4€-+Q=i•\P8é;¡mV'ð%+‹¸žvŠ<#\©BôäôÝh“¥p‘qܵgóæÝãOðÙ¤––wìYôñ·ø2}”FN›6�˜Fý´Ãø¶þ�’Isé5Íøo·‚8¹¼›–ÀڀݱÈ G/˜+ÐRãx“›ß^¿©äY© ¯IÜTqûÐJŽq¬¹ã•Ž‹/“uðuBÉ.Ùcž | ï¶ô—t�Ä«úíÎù3{(PNtBwåFÑŒzssGd îÌ3ñø�HððÊŠ®ÉW?°T9V–Ñ‚ò÷ž‚©²c ‰º X´Wì8©6†5éµõب€ÎjäÐD–+ Œª�+«¾^§¸~Å"™e¦å䈔¹ ÏÐ�TKÊK8ÍnWâÀ´Ô&^±[)LðùÁ9”³@/Ë´ØÚs×ÃÜùÒ馭s\jDZt†JAÄUµ§W¥¢¨þß×ZÛ S¾yÕ~GÆXg0òÎÑŸ5,²™ºÐÖU ¼™�‡„¤#‚F~��i�•ñ)^ë’ˆ&ºë‡9 ˜à7X̾Kº.ÎÊ,¬R‚ž�_µuV ËðùsZN’Å[Ñ*Ò~Œ‚pÛ VÎQeÙÇwÞ2 Íî_Mù…Åêq?>—3í:†Žâj’€ªaws3ž‰ï„ˆÃ@ûn¢¬ç�<ÁdëõÐf\‘z¼±µ¾`׿E¬”<�P—à:ƒ•}ã]) ýRßö'F™ïqvFaz]™nF˜i�Ö|#»ªÊ ~]>à™C"ÐñW¼C°’æÊ“§U—šðñ:atºªõù±D�Åçú€PøáBá\Ø^n¼~²¬ílË™Ö�¥ËJè°1kc¶XÐäŸ<ªæz éñ,ÐZÊP”fƒ”PžÂ>•ÆxÖÄ�z­9^±Tb¤>ÙÊ¢€b²úaVkwÙZõEÈ„t‰ó—“lKßö%t€³lø{Œ³MS/ ò΢¯ÏUЍ¿¢ùB¨\‘_­·×ë&‡òiÐþ/o¬•AkDÉrTHœ�¡È4ž6ƒ¯Ê‹y€cÉ\i°¹7fÇP7Ùw†é±8Ð"ß¹n™˜<‹Zög¼3J¬A%éL®­Ò¼lœfÍ4xWÖ‹�Î|pú8ÔIçÐxõŸã”²›ÒÊ ?±S8P‡K—Û½ øÓ#;ÔmŠZ2³P„¸ŒªÆ‘šN½çÑÍß30=� ipKr©Ð·¬'o·ëåá£ËZ©ÓLJÝ)Í%„ã˶µQiµÄi9Çõn*ðÒÓºŽëèäkÙÛ¹�]Ìk&:7w‡°³ü•ÏûLU¶Ý£BÔÝ�±üW« ’³bëësú‰Å&–ƒé=ù¶¡aa' ÊÛžŸÏp›àä±¥r¬ÙuÃ]^g£ÃB–�™8 & p¢X£ãÌdšmí û›É} áu+ ªø²ÅUås3g­Iöv¶ì"Ýú)2EÉñË.€ÙÅšoOQ¶)³é'ASÏtÎÙ&¡âÜ‚òÓ%+ðïÏ×8â�bè]p.³†hÕwÆ@ÇP;ÞÝüñT` 59y0¡ò•^Ä Î}–“ ­ïãÃxwèYy©å�åp\‰ÃAœoÚˆ—!S®�#7Èc@ápÓ3ªrçS¯i:û´ÿ‚/jì;?3Þ«�Ð�þÌFãØï‚›b èƒóW9·àkÂ05¡kì ¢“‰oeÂàÃG@Þ寄7ì¿Î#ÑCm{ËÚÙ¥$|HÈ8×û8èÍjÊÄ�Œw¦®(ª½(„nØgÇÙÕØh5õ¹øl;d…BQú,"úôiâ_{‚f*òysй„C¯~=%Û勸—F$�û½šÇªøWÙd|«"i›uŸ€CåpeLµ,Á"ÛZ ó�NÖE¥�"…©$ž~…eÜqž]qãB»ÒËôåkg@e­C7w)úG½\Þ‘¬ŽÔ"÷&bA®�yò“x»*Õñ¿{M9"igO§µÞŽ0óu{üŸ~¤.Æ@ÉKu¹¾NS÷þc­Mú"�A‰¡´ó÷¡g‹üjdàÓH­ð…ïÖn9àçê”Â�ðF�Ë B�><ªE¥eUj<'P½ËÆfÖêe)¿‘±Ùö12î`Gí¹kRጩӰú`ü0jˆÅsÎàò>¨ólJ×ï1Ͻ|`IÖǘ)F´WØ_yÉ~¿!Èø½f_ÇbÍÍ>>R­Â€/ÀÿC´QÒáÚÀã¤JmêW÷5‰y[�=N£‡ùYÖ�@êOð“K÷^šû>­ÑåŸüŒ:惱¢«3ãþœÆ•…ýøTB*щ¿Š$íõTj(ª0ªÔÑæÝó‘TtÜ…ë¹n×+Ãþ‘lÿǨû¯óÊ ¤†—Žùö‘ @l%0ÎhÀùÐôdï8n¬ ½�üxÂPÙ|¹ ˆ}0j­ÎMs¦¦æƒÎLËÍësÅ]#)i 9e €pw”ØXYlÁïײTò`¯AâüÀ›Úïþ —bz pÏ?†ò s«àO;J~P2“äùöëòkѸú_`Þ=$®5âÒyXÕÛ|\\—÷Æœƒ¥“Óç®ü[¸åÈ„…så Ö3×â°”ŠÙ0M/Ü 3åJ£õV&Èßa¶ïÜòF B³‡�m‰\}b)pøZœË¤aéaï³áE¯sãU�ˆj`°)=ÄÂ=õ!»¼BPƒ¡±¿Ô­¡Áˆ²ÈSè4!ŽŠs•V Ã&²,8°ÓpÎôbIHóí¯ŽüO øçª%¥ø;RIÞ}Sï ±©MŸ²ëcù¨_•„“a]:ú', ²Q.Ê�F¬¡Ó„~+ž©¥ìöˆÝè]˱ú»0³….ÒÅ̹²üÜH•úÃ$ôø/s§ k]§�ök¾*ħjA-Š}NêµÕç'•ŽT¶¥)¨³tõ‚ÎB¬Û×îÀògà«òfšº«˜jn�{ÏcU¯KüŒ9RøLä¤Î—|�õqoÝÛà„#bæÜµÃ ¾hÝP×L_ë(ë MøëÛ¸,¨rùP¼öq›,ìž§ƒ‰O[ÐèÿLÈ9ÐØv®>KÌÞ]ŒÓV".ì;†Ù‡c½™6¦ü„.0¹cL­m`ú´o-`ÇÏ9_W¡†fZKbŠ?§h<�ÿªibvÀ‡µÂÚÊÝûýe&!E-o…è¥èôGþtOã’æ_ÓÀÒÎõ�>üJ.ÌÙ:q¤ê+Ü?-—IV-ÃôÒR´õøÜ0ïäuÎv§¼Þ÷çC@‹Ãc�!ýņ,¨yöê…<§}B& –ƒ�AwdÂ÷åÒÕ¸´ü†×J$!I9%F ñb(5Ž5Ó)峆Hë{àJÔ%÷·gfúN€¾7\`‡XLÖK:Ë�k»n“ØÂÃ/.ˆ>ª$ÒìÏ ��YœL?Ó G“ÜžÞ—¯÷„3HqHrAË3NâF¨"÷˜Æñ˜¬Õ‰78úND5ÇÔ½öÏð�ÞëP¹ ¤ªÆªaF-¤/è¤ÛkšÃÖ Œòs¶óÌ¡ñþâQ‘{ ^¾iÎÖ 8f…À(‰FüÉÕ¶rrº«VüZHëÐʈ‹àu™v£6úO?o5ëÉÊqh9ƒ,TvŽÃÓÅtÄVÕ»�ùÑ &!ܬv[ð:dêŪcjpÒ©¢›#ž©?u:Ø„¡ zñŒÉ(-œSh�<÷Üðjnp!øV2åM SБÜÏX­Ì† qµÖw8º|seˆF°ª~GTõÛ&h°w¢Ÿˆ‰þ"¿WD~âêÇ5÷â�T¸LaehjK •‘Ý{à nêÌÚ&‚˜— MH}~¼Žâõü‡€p•'Žò8³!d#•¼Y~÷:xôbQ„S\{{È–�J:(ÇlñV„?è§z——ÝÝ´Tv:‰%r²q³F,"ñ-„¼âÛ]Œ¨C’½ 9!ŲOdy¬=ÂGjK¹á˜zž‡K«¦?"Ì1Û7ŸS[´D2ïD°x¹óyB˜~3?ºµ´ ÇÞÎUû/F,èÍÖ>À2€$á²W‡„lÖãf M[»™³Æõ>\HœÙt7Ene?¹pASÉX×c"éÿÛÈöÁ´å[_7';«£ñ‡¾ÝÂya˜þTYü4…ƒž³ñ>ÖÀ¾"c!¢/Š{Ì WÉPW›R.‚JB ç#ÚË—ÄŒ�LjH ùf„M\N~«Weªï}L%šyœIß¼ðhËRÛYßÊÁíéB�†½™5ߤ[îr?\ÇkÉä¼®s¤�ä ½ZI×dÛÌô6&$ó”L’¥@q�«"Ö”ÉT?ŸM|ÜÛ%<êˆYCô‚ùrßP9ß~…˜’Åz•ÁÙî;¥Þ¥ÜæTOfÏ«Á*j‹×èål‡jävZ Å£ã•j«]€UhTÝE^º+ÏÊL$ô°9ýôØ7é Í|²¦{û¯Œ”yÄÅ7& ç½(eôùÄm#öP+�ÍLK}iyGW-Gõ¾Gj`M…7ÝéoÖžÚa×VÛTáĉRÐ_”(çÔ BO`pL�új°´øñÅŽÌreÍóÕ”Eo’êÛ㚥UÏÛÎјșgeiI}0QxÚDpÆ��+w6mn[LbU¨S¸æžžwÝK-öbšéä)+•Ñ)&3 |�Zsà´¿H¿ÞßõtÀz+YN| 0Ör5…éTÓW;wÃVß=G¾èØ�TÔ]YÕ¿ß_Zì³ 7×~N ïêG=+˜±ˆ�©qJ÷h ­¦†³É²Eü íd\ýÂedŠO·žî“g¤â5]½ƒ9Ù#8ËÚ:lÙÞ”ÍJ .!Rþ3›šbÔƒÁv£ª §+Ë~=ºÜnYX¸=‚[‘á‰ÁpIùˆ‘az?Sù–犖NaÀ_ºL)8ô¥r錨q‘)�ÆZíÝ¿dr&¹!ør9Áó>­mpP¢Ò­]•†ö]•⤫¼ =%œÄÕ9²jI™K@~uà"±š,Ã1ÞŠ–Ì}ìc–ï}gºû½Ôl"GÙQŸ š»vætÞp©»Yùv fPÚÐÔ#«qö @ *PÚöj™ÜóEí³DižÃ ƒÌ=˜O;#M&?¡ Ù4y÷ �ö ѱ}‡c£Qݪ'ƒ�™µ±‡Ò�ÄOH;ÛGAbÊT“+¦]ÂW©Án¯Ù•ßû®À‡;þV¿ý¹ÕùÄa ƒ;ùº¢MD£S•V"Â> stream xÚµT{o¾Ÿùœ9çù]¿Ï÷ùþ¦u„€å#ÁEp.ŽQ,.ÛÉ„òù•(Ð*D¸œä:±"¡L%GÀe;;91˜L?"Šcþ=—G%TRP!‚ C<L1HÐ~ iRˆP«„\`�è8I±DI»!&C1è@§øáJ-�Ê)] KWI—íËÁˆ8W“É(@0 fóÙ WÓFØãÁDD.¸a ˆD @`dxT„À�M¨”Jœx�ÅO Œ œü}„Ο£BÝ¿b4~Ùt&¤ýº>t .� ô.ˆàrt{\� Õµ€m*� |„F§J \¡oì)JéÉá¨Õj¶LERlœ�±•r=>a"J5N$úM@9Ô£Â$4�T"ì/ ;ŠŠ!FB]Ò\¼ß© ©¤“h;õ/0šJWSÞH?k“ˆ�úÜЈˆP @PŒ‚‚‰é@ ¡T$HÐÛèJìúBà§"]þño›Ð}qzgqòô D=ðÄLE¦}ÂÍçÛ㉒Ù_)*‡:ô¤îÌPLoãû„Í› ²Biía,>N³ƒ±) ¥�ÖÕóñõ<WÀ¥�N0‰®PШI†Ž>”æ‰Â -çK OÆp5–þE·Å$RÝ9HTJN†¦¨à<ÿ÷I´‰ñÑ&ƒp0@�8‘£k®×ŽÎÌÕ™iR2Ò•¸H9 3P)¤_ŒtI…€"T0#ýSÇç+×HP1EËž†¾ú”œ‹j $¥Ä‰ý4÷ÛçQ=>˜L‹ëÊvrá9÷{¢t'§¥M_O¨î‚Óùy|´jÅÉ$Iàê¤wAš›ðéÑ�_axTŒã—ô¤�ÀĸÅdÀÙ�‚@´ 'Z$Înn �K«_5zÃ):(UT�âCwÒ\WÀÑüÒÒ¢ŒÏ¡Dè¦U/=§�ØÞ_cúµ€"ðd�JèKü“/�jb�hÝpi;ýûðÿYæGÉ’íë‹kÒY΀åÁ£÷Âåò€»»[Æg™âþûD¯XšÂkÝ05PÌh¹…‹½–%ýt$§43`ǵ²!Löó}ãgůÜRxí”…™ÿ¶8{gö±¬¢©;ñÐ ÏøÌ ÙØîæ²qòîÏßõ•ä›9�L~¦ÅÈŸúâùì¨%Eü欲36Ï‚‹Kìqm,:±ö„ˆªïôó8u¶7×ùÊ;Ó—6qe'îm¢Þu“{t,!­ie~Ú¢ùÚiê]ïØ¼ÕÈyŸ–i7JrÆ×)Ï�û—eHYAò“¼Æ×fçW¹u”þüËÕsÆ#f—¯‰Œ¼`~àF–ðºÚ`óϤˆá�VlÝ4Ú -¼(!ÎÄ&uë=ᣵ0÷GoŸ =í[UeÀ/yíñfZá|ǸIÎ_-®J6ÍX“3^`¾T{¯]9y±YЄU¼¬wäóÚ�£K×împjêéév¹¥¾º€LµÑܲZeÓÈ4<}s™×¥FGbv^ßÖæ¼EM;a„yß«-†'ãTž¯2Yw;Dͦøü³¥FË눢²SÖV™Wžf^T,.«Ûmj1d‡…·Âª£0Æ8âœìÖëÜÑ“lŸùV3[—>¨›�t'¶ÂÁ%~•¤+ww«�œýµùŸëE]øÜõÁ rx[Ý÷Š)¬¯Þ­:“¾ÙÃÐ%Ñ@2Ù(¨à^ÙÎ2vqQRëWvS½€*َ掟8ËÚ3´°úeÓ+Á,ê·ëÑù=/ðÆ{MC šz÷¼Íá´Tú„ÈGnLYÙ9݈,n™èÑhg 2dž(ÒŽ1MI+g4yÏ,J‹‰·ßžàkØšÂá¢ðU»Î�8§­³ýû ›-Ÿ²}«é…6“uÊJo¡ÿœàa¾––MC4#š#Kbæ\¹[×~ùÏÖ=óÔ[Ó&y¬ûîxç;+ó¾éÝ°Ê fMŒ¸År Ÿ3dE´¨ ºuÛ`gÀʶ  [Š`ŠU÷W¡I‡þcµâۈ «U¯Ç·¤<|jºÑåÕ™ÒfËK‡pÖ³GöžÖ¼¬W%m½ÿÓª7­«‹³�ÙÞ¬¿¯.ÓÞ²ÍHüÛò½"m7zä¢ÖF�y«[{¬K6p^\nµ7{ú·lË;CY…ÿ¨.ØÈz´}ŠÏ†_àbío¡wµÅ3ÇeI�5wiêñ,Š4Æekk£ÆÅ,7ò²°»ÿT=©­¯»”�¼�TãýM÷j�×´GCŽí^ïÖ±hc´×_ƒ¿²¼–~{*±+œ1–×ôL욇Ï��âÉïˆßïê“ù/Sî¼Ébž²F».îE)ë~Ó—®§v »–.YïÐnv°£]вôæýþw© Ò¥üäFŽjß\ãži÷ç ¯lÏÃo]ó6é«ïæÓÚÂâ]jÇÛ®ì©í±s u};uÈÊÒ �š_<ºê ·[”_!¤ŒÕ$W]ƒ.£o�¿w9°Oq²xÑÔjãçI»žî‘f½jwüÓ;ü¡¬òè+^Eü^CÏÙªE'¿ç›\á\/u|vB]î¤S W_mißçÕúGºw2‹gj¤;¾î?ó9°únZð‘-S+Ïæ®©T­¾ív„k<}I[þ¶‡?›ViÊÓ_j’öüX™š0Ì~T+t ÏewöánβCgb³5��®(tQOαÃð¯/9” ø‹¼á×Ë׳BòýÏ/{È!SÆb]Ùö‹NÎlȹ[ÜĚä&ÛŸuÕæñÄÁuÓÂ{jf]ªh=”àÒ=S½Ò<Û¤!g‹Ô¤z<úä| ¨oÛç}:üÛô»wü¯œÊ:»Àq$#Ú‚7sÓÐ1#ó f6šÎÖ9Ô™²åǬÈËã*½ÖdNÈr̳çV¸÷V7IÙ,‹Ì<×°ÞÞ~f1c‚UЕ²{Ðx½>uºA÷º¸ÚM@’ä‘�¿ç-ÄýÞ}íÚ’Ú*^ç`DyÑsþó‡�+Þî�õ._ó³á”�o‹ÙöÞßÕ¦fN,78Tqëé“wZyÈ¢Ž-U½3Ymûï&Kßëë\P6éWk¬¦¬àJóÕĆÅh›áó¦›?žükÜ´Ù�Y›„„8èeºÍ£ã›/çïl8âîoæ¼PûÜס¹ÝýpÝ ãߘT›œ<7rT³v8¬:Þ�:<#\a¤!6¾ÖŒ™Éô©½þƒªsB½uW¨±�`À)_ yjÒ¢=ßÇ+ˆ_Áè¼s'7Ã}݈Mùãö¯R|=ÇqeŸ #+ÁÂRÛEe·#fÍ7›Uþ8;o‡U¯ì¿T Wg endstream endobj 1683 0 obj << /Length1 2116 /Length2 25522 /Length3 0 /Length 26708 /Filter /FlateDecode >> stream xÚ´ºeT\Û¶5Š»»S@€àîîÜÝ ww‚;Á]‚»»»»[p·ÀGö¹çì}Ï»_«VµªísÌ1Çj«U‘“((Ó ™ØÅíl�é˜è¹2²²v¶v2ÎLŒtÂvÖ&fzFFV8rrG ¡³…�­¨¡3�ÀÈIÏÄHÏÌÈÈG�Ú?Ä&#€,ÐÙPÅÃÈøløP°sr¦32túPmÍ,l�T."vöŽfæÎ€�,tt"ýñ¦H[Ù¹9YY mMÒô²ô9;·¡à³�-Àhnhm °3¨5ªÊbJÊ %yUe*ú�ÀÊ.öövŽÿÃEDYEU‚ *$§"ªÑ$T•Uþ|ªm�€Žf´9•ýŸ<†ÜeÅT„T4Ęþ¬Àp::YüIû_Ü(>˜þ¦öájêhgóWÀgsgg{n777z3'gz;G3z{ë¿ø©˜[8Üì­WG 5ð¯Â¸ØšÎæÀø³ c ­ð�“¸Ý¿”6¥üpú�;ÿ‡ØG!œÿÄ´þ—9À ü_iÌ �þò•QP�ØZØ:m m�? � �]œÉ>Þ@ÊD\ÿä�ý·Êñ?iþM]Øîce:Ö^>†nÿ½c†¶.Nžÿ¨Íÿ^¶±�­“…“³Ó¿"¦ÖÀ?ì�þì™…í_2Y!9)q1e:™�–³¥“µû¨Ž-½³»ó_Öâ ‰Êp88YÌLìÆ�ö³5±³±ù`í÷§|¢ur¶sô`øï†¶²µs³õúÿˆM-lMLÿÔÝÄÅžAÕÖÂÁ(%ú?Æ"¸¿ef@g#躛3üIöW¯ü3ýÁÇËÞÎ`jhíô±0~\༜ ]�gG �×?ÿÁ1qL,Œ�?Úüã¨Àý]ÊÖÔÀõ/ñ“«þ§>ÿu@©>N§‰�­µÀh Ç gçüÑŸÿÿ9eÿ•KÜÅÚZÎÐøù¿*úßf†6Öÿeø_6êÀ?d?ÿÞNâî@ gcó¿Šø/±”³áGß ÙšY?¶ä/‘꟣dýѳsÇâÏÀÐ1±³ü—î£�­l�NNNæ¿TÀ�"üß�Êÿa `ù"Fóß ó—•˜­±�‰…­€™�`èèhèÇøÑÌll/¦�v6ºÿÕ&z[;瀽‹³ÀÔÎîÏV²³„ÿˆþBŒÉþF,©¿€Aö?ˆóC§üÄõ¡3üqŒþF\ãÿ ¶�±�õGQþ-abüHjòÈ`þ²ÿA.†Öÿ0`0˜þ~01ûÛþCiöçFñ11þ6a0˜ÿ²,þ?(ýžýƒ�õŸ}ù[ÿ±›¿!Ó‡Á?Ø3}´ûüÈoÿø‘ùD˜>2ÿ#òÇä`pþü¨¢Ëßuû°ýk*;Û9ÿaõA×õðƒ�Ûß�ùƒ�û?à;�ÀvžÁÿÝj Æì_3„ñïÞûŸûÏ_XÙÙÑÎ ¨naâlþOYCgG wmÆ�Àô!ÿxýû›îÿJ@þ÷ìú‡·°°�»++€Žåc8XXÿì&—Ïÿr5þ×�à¯ÙóqFþ�ÿŒaè4†[^°3æ ²Ln)ñË›*…$ç¢?-Çâ×�ŽƒXN›jÃÇÍÞ! äû7}M§È·“‘äÖõMô·-Ô ´~Ûhþ^1yk¢(¸kè+ë‹�$&4š¥F¯�.»ôµ´ƒ”êX:+W³ˆu&½%®… :z"ÂÕÖùÍ<ñŽz�DªSÚ²–éV0ÇÔˆáh�澄‚׎¿4Õêüþ„eØ#´L=k�‚5* eß݉¢E“œ«¢™¶§ù�_Ò­­Xµg¦'’|¼uÝù¸"6c`ää¡KÒ~Óq%6W–ôzŽxoTô¨Øfg'9"ñý-Ê+éX™ú`ɿ۾ȿûØn ö¤¬+`¦€†×^«"qûU¬°Í,æ ¹‰RÅ<²ùD38£ X-jÎKµ\¯¾_¥þÉ ¿=¨Ó*½ ´êS¡U˜.¤“Ú�ø�¶�ï+mJÒÕCš(4[¶nºNG@1IÍ#c+³ûí9½]lE³‰à<¬â9ò3¸HG<™"çj/Y>Ø¢3W8\�ƒg7HÄó0ä˜7T†�Èü“ßñlÇôæUìMË Úõ¨mæ×óÈrâ”"±øûî­œI&?¼§2sb-mâdáH€î†¬Ç©<;]qû±'žÕ�xŸ°tSpqˆ´× ™d§×¬E1Ý‚Bë…qƒ2©¬À£Vv‡|qÙ•Ì•/XbÉqÏ"^ËðËs²�öø¹?-•Ë$BAr?¡¡R‡ÅÕØöþœç4i�o\LùþUúxž„ÈÝï ï‹ÂMWa"]¤ÃÛb­üâL,â·QÙa®†ï½3±É†[Õîw{êŒGl}%|k¦Ó_É`”œ@jЋŒULƒ[Ol4‚s“! ƒÊÉd T"'©\$^�ÚV릑JêàÕ™ì¢Úe"lQéuŒZ¢¯©¸¿Þ“µ…ìßOý�j{ºÌ�c­èÓxJ†ÇMЍB™V®&Ò`L EÞŸ,2áp,yQ�¼ÖÂŒÀç¯{:”-$ÞIÔMqÝ–PQ5¸zè%nñkã´Ò”‚»ä»}Ø|bo8ªÒý%� H¼ËÓ™*nD–¦Î÷ÜÐã„'–Ñ%Ñ„Œ PJ.T ˆ#8>ÝßÞ¯½µsf3ú6ÍZ¿>]à3©?q@l‹á÷sÉ¥Žôf4[¥**Ð‹àˆ¦óźxãÓ¨ó ™Øç`¦*ª$u Ïitµ¸)áPÒm«�v Í ?CåV=I³…—Iña91]â×±ä¤m×§FdÝá’=�Í–œi|Ïv�¸è£p©´µ8¬ä0éâøÒ?}9MOëÁÁ�'ÜFJ²îÒH𛹋ÙÕ‘¹DjΤ+ׯ •n<ÞlåíùåéN~íÞ‡5½\¬Qχëɤ‚®–¿³]àãj��’BdÿU$3*ˆ1ÕÃCWÏN“—»~�a”ÃjÁ6s��GýèJ2§b¢Œ&ëÌr^'ã(·�’1€·Çæ¥8×F¨;x¸ÆV¤©.mX»HöÓž¤Þ¼¼Ïºûª­ü-yf_ÏÚS©wÅn5Öµû '"ÇBmE‚vt“èò¼¥’O†-”°îDv7ê‡.ZûìàçÏùËôŬ‡<ô#ü«bßïèK‹ß”þÚ¥l¥¹b’A< ©ýdž¸MôH”ö4�,Pٽři3Ø[ìØùÄméåQ:§u³é\²Ú©s&`Ùˆ&æP’�k·ž)d¥ nÜæF Ž­cZ©=3‚8sv«šÆÛ%D§�•ÙÖR¯1âAš«-2�üX>ž�IÙ|+Zò‚Z÷å‘¿kð6j)o‹É‹çõgàŒ¬$’âýbFÜþØ2[L9Çð šØæ¼MÕ¾EÛ…ô¸”�ð“zÉë�¦“¡¢í_0MFæÚ¾Äœ†ŒžVÁùu˜èží(þ©©¸,%í¨ó=+¨ÑÕ¦[1Ù)Ì‚ ¥™Q�í7 Jßµyt ’Ö¸¾–-�±ø›¢Ý’È€(êÒh ºŒÔI‰¤ÙoÿlA··}ë°¢n«©YÁ4yþoZ) †ø+–O7Ïî¤'Õ˜üTJAÕï C¡±Ø~ª4kéul4à¹àa`!“Z)±µ,’C• È8áë*ç &…„ñò^ØË?°<ªdɹÁ·Y¥¾¿räÛFv¥03%Zi檵ŹÝ3†»?®Ù«^]_1ú</ 6ô™†›Ö•ì‹(ÉWÅO¬Ìhy!:°ºx§ï8³¿÷õqÌbØ_r•Ò=U¨lé§ š0›|fC˜JÂ&óÓo4õÙìµH,Ëç§øNÈúuz}Ú©é|lI€“^ŒÓ�¯uE§Oƒ¶—$éø”‚pq݈_iðG¥ÅhÉÚgx^®ç†+è+ä�X• ’ðèî�`z«©,ô$ˆîsÕÂæjíßBQyü̼wø¯Ô eºXžð‘“DI‘8ç°?aç¶Y¹ûÔ V¿À äÎfµg

;N†éí 9m 2];èÂòÙ;šy‚(@áTü þ9ÒkêK¿˜T¼Ð–qKã°B”ÿüZoÄ—ÃF6³s$ „ªµMEi§í)§Tfz—„ ¥s÷:ôN®=¾Ÿ‘§Ð1BmÎæP5ª¿³è�'�ç¾XÕ3Ph2‚³oE'*W}•=H­’a+x„üîO¼ö³WXÜäTÄ’yn7çšþÃUÀââWT9ĥǞªç qÎ$9r?®ök–\Ö�kÈ+éÐê��rÅ€˜D30‚/Žˆt‹iìŠxšZ1Ìæðà ïÓº¯¦K’†ÈyäóqÁ'öØÏw‹x‚ðkÓzœ.J¼›ïÈÜæn]ö$vãyÈêdŽÕ®²?h3ÚbCt9bQò{Nà�œ„bÜw+.3šÆ +ÍçÍÇsi"yfß—AîRÈñŽBˆìý¿ i ã †z%�ü€Ò¾2¡/¿2„Z¹eöõ+_º†Ú{¼ÑRM@«'8zŽr Í"Ã/v—n‹‰ìîâÛEY¤rã£ÔÿT¶kVˆÒ÷-•»>Dþ•QýÈ‘ÓÞÞ G£ÕÖ±9g;WÆs›Àç%¤?Ñ%ÁÉ,<ÜØlìO.æbëÁmÞ/"Ú3|™T–q/góüE¬a�žÉp±•*¦Ä,¦ò›;‹<£[¼b½}¸jÈE‚)Ô¢x'àP¤)OE �‘±#Õ϶¾ª£6 ýˆûEŽÅlC¶m´Ik�d¾XVq«Y¨£O@k<Ž"”¤ê È&?NukÏ[ŸÊçåoâ°ê¬Ð52Ä% ³(rÀæÄ³•¡š8S×£&Cª¦l‚r’HÎfVnÄAÒO²Knø£ ]Ð!i‘ùöèäÞ�ÆGŒ<�ú–ÖVŒ!›ápÿ=vûŠV?Bs¥ÉÚ"̉2$™Ìë =ZVí[|>èî$K;‹ô¯ÃÞôj0S#‹ZÅÏaÛÃùÊ ™·á/7•Íìõ¢Z%诛€ì<Â’È—z±:U‰ï Ý2¡ö³´¾'Éš³ÙŒ “Q5LŸ 8ÖSv@-�ZÀûøcî±)Ò‚ŸÙxÔŽú®�}ˆY¶†«÷»ZùÑMCmÛ¤™|£‡³àXÞ‡�44m…yr;ðáêix|;møððt,7FŒºò龨?…[I³G»¦_Š“xO(E’ŒPP%jhõœj#=ž¦¡ƒ¡ÏVJÒEÕm±{*©•<òFòöú¿ð$oïËAdð›ÇntånE×çR-zÑ¡ó±/w†˜ ­ñŽàêÝŸñ˜³ž³,gÒbéÈàU;·âh\Ã"¿?‹Ò Ïùâ—ð D~¹í Î]:ØÉ#à"@•Ë¢nÖi“;r ³IT¼v“K¸�¥ ÔWK/§ ˜fø–ÔCÍÓxšzöy¦®¨!¸¹Æ}ÐïQ�Êâ”› ºf8nW?j%�ë©�_]g�¥vÞ£¬®zvˆ(¨­×·xêžg/³�&TI£ÛXæÃÀ2Ÿ5ü%*ÀX\ÔÉ^˜f1Þû›ŒQ汑]­-”Ú˵>s»¤r?ÿWïö”ÿ|t s�ªúL—îþjÅÊ!§¾ hÄ  ‘ ö×ô™ˆÎ}žˆiìêí‰ýýö©Ëèº"%ŽØý‘L~ÄM¨.&S±RKÖhŒ®áV(¤‘†o³F¡jy% ŸÚ`ǵÊ1Ÿ^‰é¶ñc î=SÌ«µ`÷™„x¼ ýaWÊÎ8‹~ÐØaßÅ@=5½.^ @2Ý”Å+[lGt›[ÂpèâQ‰Ø½ñ@wd#(”ó¢uıÖöœÌ6,Úõ%.Ý«¡qnýUôK:ƉuÒá¨#ü­¡ÄöRwÌ ÷qeëÖÔì½£˜ayÓtkÔPBÄo¬³Û/S�™n.µ-Z"˜äó—êÒ�ä×—ƒ8ñyíÉxìZr ý¸0wuÄ€}xsŒè£@Æ^ç…ßVÝR„Ä9"¿’ÔË�О‡ÃýÔÎ`·¨‹ÕÞ5¨n.û]éi󲆟ýˆåw»²ýWvNßa¢ûሻ¥‘cÀç칡ñJi|ÐûmÐ�+þhZ(¿¾œEëõ\ÎÍzÏx&sˆ(Tõ¡² ¤-jН>†�/»…Âö’®§læ»Ù*¶‹®µ�,8&dzt|*Ì�zp(6@ךt|6šFýx†@²]Âã½)> <`+½×\x¹Ô8 =Õ“L ì£ÿîRé_éÏUÀKIiŠî4�šÃö� uZñFÊIÛúö†í°Üh…'³ff.÷Ü¥mÛ |d?Åè)78~½ô°QèRÂooìi¶’¦ÍlšHHtk»CwIåo¤[”Õ‡ÇË•iù@³®G•ÁXNMRé¯È ºgzlW,ŽÝPôäþÏ«f*¸‚[3­#:aÆLV蜗h¿†îœ“Úu|,±8¬g¹‹Ñ�íÍJp9)ÈeL¿çò�Ø]ì“ÀzäÄ–by=çXïÌ yÏø¿ØW‘º0z›C‚,¦Ç”+DÕµ­j¼« ‘f;Qž®Ò7}<¦}²Â0Æ Fû¤TŠaQÕ»zheó%½~ÌpøEé­˜X\ç6®àŽO·üë+Í4°¤MÐh*Õ’%âN£±áDò©Ïk—� É°~N&sêï£{• TÇ7£™„ÌWÐÉtÞY|2´5ß÷D ¿Fס~]°¢§³©”� `í¨k]Ÿøµ\œ™@¯z%S®‰6á`g]N1ƒ žQõëªÎ`ѲJá(ÁíšyCå^3Ï़ú¸R­òâZsä⬔XïYÀŒ…¶žn” Ã¢:ó´v†kT�'ß“Lpo¯‰Iû8�ÁYQ1V’âö³Int‚�8ÊãŠPáëôB¹A‹cÌžæèËg‹Fõê®ý’Ô×Ê7|/"΋ª¶ô®U” vMÕÎXJÅvÐPgﳩmDÚ¤×4=ípq±�ŸŽ$a1"ìµòÑžsŠ`ÓZ¸š¬á�I|bE-GZ5/¾ú»ÚE„Õ¸cÞøç�\: C¹Á5ZPKâ¯ßо›á»ñS6n€ãÝw4³ž°€1)õèPö:Ô«¾ç¹<‹v}µìÑ�…æ�]ôË|€zNSàeÚtQϘ‘Õò>6ƒbÀeÕΠÊ|þ¿æ¸Jnê³Pù cõÖDDóiÆñŠ«'%�(i\£ðyÏ—‹c »Ž\ÍI;_êe³ä7^•JÄ“N‡“í¦ïr¤øÔ‡ß£(ƒ`.Õ7n•ì:ÎýÚ)zC-Õè5_m”Nƒ´÷BÊ÷ãp@½gv ”Ì´³ÅŠ—Òú#Ýp°.{Êê K½Oð)£˜u-ŸŒä0 RŠÆ¨�Ð* iåSœË®<å"×’³LJ£À#ÿX r‚": ŸþœgÆnï‹�QàYª"¼6ùÒðlí¥[§íŠb ;†—ê�öë½þrᑚ˜²ïlrD‡#ó`u0¦þx ¶^¬§;ßõ©FÂ9Y[˜6Ž6«ƒÐÝ·´A�{@ ÙNõ|dÛ•ÿÛ'>D“”¢°Y+ÛÛoWip÷sfE´çî½ÿ²Að$]põ„Z¼ay’+ÏÔFí™bºÂóyZ�—Ež.› .´ Ÿ‚ž o.éØD‰†jV wÊ@× ¾HxßÔÞ®(©hÕ˜3ûD0¨ß´ƒ¡ÝWéñÜ¿ûx¬ª†Fd ŠZÔòåÓ^js9W¾!lPKš¤€di¹×u…‰Xí»Ãq±éâ‘HkË:³œúu™!xƒ|PWœ_$¦jÐÐÞ^ÌsY‡;ƨÊèKød¿hÑL4•a » “ŠãŒR ª¡ÿ´„!™ô/åYÀßnÊ»êÙxm ç8×>K=ì™�Y·Â_'qÎ¥°ÇPd3T+� ÓÀ ñ<_¹Ì1´v-ªTh¼=I4¿PK™Íýj…ûZ„±�t‘°žÅÜßÊûóåÇ"Ý­nBxS¶} Rvo›^ôÓMâïÀçƒä›œ”t}\qqèÄ­z*í@ÝΫUö0ÌYAHë·ç\OT±ánÃÜ(-fY¦–Ì„NH–sR®š>dø }�’œ…#ÐØÏòζmÏjN²kŠìeH�à¯Kw”‰ÍßVõA=ÑtM(š:fÒù,!a†ÙÑt7¿ØxØó枤=«\îV±è_4¤7cvìg¸¿qpSšJ*jW`L•]‘ÔØ}]O‡'ùÌñÖúªŒè–Œé?åOýn'ñ–%|+ILbå¹Â½e÷•Èš£ê Ž(¡hò¶û£¼$ç·¯Ž}Þ<ÒŸ rÀÞZ±YA yI5~$p{¿¼ðýšA4�äÖñ^HbÉÆe[Î@Æ6ä—ۀŸH'×Å©Õ\nq>˜Ù]j0q¬;ÌS ®Úáo~,‰—n›é÷#Ìy£F‚ÒÒ�ÞŸ±dºß�Ê3OBúm¯jxGÒ=Û¤4ÑFµÔÍjÊ4Iq îrµH$HVU•ýÓD@rŸƒ™ûe_²'ÌÐ$¦±•ýÏÞ4Û·« X5$¹°âEÊ5Ó¨,ÚÒ{ÝvEX\µÚ�)Hr�ºH°i˜· �ûàä*$Á[ ú© €Û”ÌáIÀ¯÷Y–ð65¥»Fø� +¾¤ª%ù‹bû‡<Å  r,ÑË6ÒQÌóËS?ݽ°_œH2BT Ô’ÃEnäþ (íOÍ �ñõˆ±=qØ¥…YOr�G¸w·(Y¿ËM}™ÙÍÈÔ1ÊMiê�,}øáMº3ýeƒfÌ2µF¡5Zbºë¶ÉÂ0áÙ­ÓJnáa O�'‡OÿâH^¬Bõ‡~µþº¢‰Àq©oS e*Z§7¾b×({×Öõ³/õŽN�\˜øãxK>þ¹Ðð£oFŒUû !´êë;eý0Ô“ç.D‰s½C ÒÞ„˜'q¬)jÊoôB-r¯n�‹�ƒ-I¥ÃÕÁŒ¼/ÅkHÃÖÏáßhÍg袚5ó~ö×°!~M-–n]I,ͼ6®fDÇå¤ÑÂ$Ì,àêÑ]ÚMa€9Í•´,Ôpb¼ÌÃRŒs�X†ØÇ‘ ýäŸ&ˆù âPfĨËïy^¥uÁD`®Oöï›2Ví±´¢n ‹Ž$…°¸k·õ4;Ó1KZ®Û¤%ºVâȼ!â´'—ÃôKõX-NF±¼]‹B¿]©õ:%¡if‹OW~c¬4hÏãÒΚLЛS¶qcEM1Gm´¼—{—~i@—Ÿ¬°æMÐSërxþQpv=€Á–¶ÙGƒSu£)ŸÞò>sÈ’T¾qhÎðs!^}5v3 ìç…þôâ#;¿.\г¦ú�’ómh ýD’W:%xîke˜&Œžù/ ê°Srqjé?wàmÄx@Ê ‡ÓRVÂ¥/=‘W¹Ú�‡v |âW즢®Aðᜃ'‹{é|‘þãGµÅ ƒ«�è%6,nÜås ˆpÛXÍЈS;`)PVî�²s %m”0—x)V•Ïóœ ¢ßi¬’ÝAw®ËiH#ofü–œ8ü…ºæT(åá¾Èù„ZŽÚ<«|Y!C�ïÆ£²×êCϧ×(b"Ê`¸A°?)0ú¾yP@Åß.=]ÍÀ¥8‚»¶u“J7!‚÷9\,ÅÿH“Õ|¡ô[@{0ó&å€fo»ú <ìßÃG“ ±Š-Ö�¢áSvU¼r¥ÜåÊJèâ›·{j¡rÊöSlÚØ¦dEULI×úH žd¶Ò¡¦7£H¢Ömm -Ð:ËÓ‹³rÞ¿bß.¨_nRQ?zþKðµÆ‘MTýËÁ&¤¹W÷b™ä»¶ÌH€î˜M¿{Íl¦a¬¼«¡³Èrd²Š˜úë´Ò{˜C4r¿oU@¡“Cd°4ÞRË5ñ¯sµèX³N¤á��Ð�O"� 3ªk:b=±Ë÷¶:-¬uð·!Úç:Áð¶{�í\AL]lË Í;jOåši‚½^Ÿ¸ºìÖ}Qq7~çxöìc¶×.Ô¤@©^¬&×Ûq±–ÇÍüpQF-G�ÿJ›Ê†–º5üì у-x+b²M§Úw¡Î5ôõÚ=‘n²5K~wó<§¼}ÙÐӃܰq1¸�K™ÃˆCEW°ýü`·�;^w¡8Þ“µ²q|Ü ±†j>"_=8P�Nk¿€é|l™õMä¶]í“p|é¸+Ÿ¤û«0ÔŸGÞ�Ÿ<#oÖ  ·‚[ì&MXŸqãB/¢}ìl:^)ˆG7�Ñéb$¡,àΠ³Q'ì•á´„˜šä×4ÂCRVUÃx©¨ ´3ïµ¼‘H›ðaõÕ�Ë\¨'úcÔv$b}©x5ÖN”ž’¾²Ò1®Jøòþy…ùSV Û~q‹i×ã\ÃA¸‰º^Äãѽ�+×o$ +# ‡WJbƒVµŒŸ|câ©,Œz©®)`X�dSè6’+@ðñƉnó>VÚ;YmÀ4ÝùC4÷æ»!•©8ÅåÏ,_;Ë7£ehbvfŠ hŽ�ng-°P%F.²ƒeoÖ÷ú‡êwìPé¢1#X®›–ˆ‚²~ ?qü¹4bv,3ášÀü¦Ìˆ´f³°ž}sº"¬*-`}À2½½3›­‹{$õ°é¤åý‘`¬� ‰>¢=ü‘®™�â·Õb“Ž£XÙ�aƒ×è%6h2Ú&ä\ìâ,YêÑÁK`wÝûˆÌ]þ ªMõ�L€úàå–“œwh¸þ`�� × (ÚÕW™‹Bݧï³(-G2Œ‡TýS$PգǟEñ†»Ð‚ólfòÞµ~œîl”biú‚™ÁÅFÚ(;Ε÷~!Å…¬ LÔL° éË4 "»c�qÌ%“Ž ¼æw‚;ß`Ž/8¥Ùi½_›8Ò÷d{üd´ícË~Âw°, “¯§o…�ÿÕÂZc—‡!‡\šx·OìóÏ«㨟¡wÊ›Ä0Ô˜Õ}?]ÉÀ@´!@Fõ½ëR¨Cµ; … y£îm  9${i®=ŽÑ1J‘d!X]'ý˜FˆQ u"Á^D¿~›o‚üøÊ¡ŸêQ£¬M�°üÓ@-ÿf wÁ÷r¢‡àdˆ�+»ì”ç`b‡áeú·€0Nÿö‰âÌÜ–æö¶rBJ²=9GËY¡‹WgY ÿs'xQ,éÒ eê&±X࿘‰E82ô#OWq¢|ÿY?M Å:‡âÀK Ãgƒï ´8²£I;ÊsFSqÙ‚3eár>c^KÈô1èÐ<Œ/ÐHEº‚¨ßÐoùÒNÓNµ·àú½cÒèæÜ_Å®ïúÞ àÎU™¬~­›sù… Å­tLÖØ4žƅΉ�€“IÏeˆ€± E®Û?*Ñ(*[.d… æCµÙË<�ð’–EéZÛˆÕ^Šê¹&¤žÇ|ÎÞTo¿JVoATñ(m=¨”ßðP=Ûgõ':‰vY.áæÐ�\ È�<²tç™ßJÐNÛêA&/áøÁõ©àõ̉·Š‘I]0=l…âÑs7rÌ�Ê!Êý¶É‹Šö:l–³�0,>>˜(ÀÍ>·fG8[T+�ùkæ<áóú™×šï^¾Â éOå9úÓùWÄhøÞø^‹M¢f³˜V-3 a§ásKcÚ6Yáèz‘é¯IÌóEÕ^$°.4£ôzT�ÄD7½5†å”=È’Ð>€NE\™(á¢1_ê¶ÃiÅJåt�–¤d­–Ù:2wŸ¾ñt¤{Øx Þ´à>)×ïM�…è»ÜRXÑ03êX™eB¦RµìÒ(håz®á‚uޏÙmü°ç(K§H®Ñ·wxc–‰ôD.Ƕ²2(LŸÎêng»<úŸI/6b6?ú �L`8X�¸+ Ó2�ÌÙ¸§< ïl»\ÄÊ k±UXN7íb×° &è,ûJ´ ­ŽÃÍu«h¥b±ÞÛkFÞùÏŤ›Tc†€›î„Òñ Õ«EÃén; JH®÷š?AAÉ¡*8¦š�”éÑsÕ¤˜óö²¸Äòñ¼±QqŠz‚ŠÂÙŒ÷Õ¼(ÔA²(§@û¾h¨›=´RrëDÜÛG²›ü—¡Dõu‚�ñóôsHhP;WE¡`�9¥C&Ž/ô‡õiê°ÌÛbV¡\%2CFë¬Û9©-»S–ÁNgðm÷B¿‹Ã~á'©t�#ót n™~ô‹OÞ6B6Žh ÞAÊË‚bSÁ�ysºœæ¾�¬Ôz¼ÇµàgOÛ=˜ŒLe¥>ð:¬ ¢M%[mŪ›>˳©O� ŸÝà?Š1-O¾t8#r�Qš¹2ÚEërBîŽËEŒ¯Ì‘Ï�(E+ ß«-ó×`l?C\âúS15Œæ-ž¸i·Ð{Æ[ÚÖ€Lá(½9_N¹¬)ƒWã{æJÊý|å‰+~h-ÿ‰°šn¾­†îpô–r=K“¤Qxl$ý2¼�;˜•½˜V4r³ <>\qñMÁDezI7tò-ÒjÝ�Ø_ÞhIþû¹Š AÒ’“4çWóðÊò~aŽW’¦ñ]c�iÍ!Õ¾1ñg‡zKº|K’E*&ÿTR±X׳x£˜{U„†ÆûÖ•Ü%â’�É-Ÿñ “¥â`^ S}1»o°K»“nT ß2[¤BÌ‘fyøzð TËàlFpd�â292…„œýõ‹ÁÑWâ#©’991à†a9&®Ë—â•oC³@¹QhºðË–}®ÖÅy#ÊO–ÂiMÈì­yØá»1&ï�±HŸ8‹þšÛµyx›Q"Ê¥,w¨°:Ø‘þF‰¢ ÃJÓ.2êþ£Xѳ©;”㔡´�°p‚æ<<¡ot7«#°Ý1†ãS*ü75“µ)f|“r¦~±à,P¢vPÛS¶¨Å ­ÇÁ~¥B ½uÃZ9‰QUa,£Rêró&å™eŒœ¤ð™Uú²�3Õ[ã¹Rt_Nç^>3¶‰^yŠBžÿ„ß÷ui´8þɬÌ3´8ÎŒ½¹Ò¦Í‹´ùÌýâ�ÜŸ <Ì¡.»uòþù6Á鋸þLÈ`ÍêýºnÕK«+V�øHPAw#höª/Í•ŒWœ�OSC × ìº|ß6ìQG2 bh·¯•ßÇêʵ0ªŸy5q52zê×?I|aC_x?©žœ:‡·ò ð•þ>´¾ô”…–†Blñ#ÀD{À]”¬,}6AŽz­.[v“uTêÇ�I Ë'ªaS¼¬V8Õx ‚éà*ƒ�=�,b [JŽÚÿ±óæls~L͸d—ŠD9¯°B-›fkx ä!'WŒúÜo®!‰“Çžµ?‡.é;¿P�”ñ¯Õ £*JNª m•„ëü?L[ÀÚÔ¬ñ�i×ÿ¿“§Òúï‘ZÍà!B}åWPä.êb-®a¶ws^ù•즼Né~…Cè&!³§:løF¦’{,–ÌSÉ1Èy±¤³ª¢j50ønþ2%ÜŒçtÈ�ë,ø�ê{_ˆQWñV^§�… Ø^Í9U>'T—lýZö�e3?·Ñ“¸ü[Î\t¥„YòÀÆ2öÓm,‰�Žøõ{C’/:‘ä`J©[ÈgzâJÊɱN åÅàí©}¨˜ù[’ØœÿŽ&nˆb~ÓH�G)Ãñ¥2ȉ &EŽ5’gE«2‡¿_ê§r?åÓÀ¡À7B7åsà`}6'äƒAÀ˜ódç@'O¬�\Â"üŠ{‹zkù{ËCHvF9¤ÆÚ&Ñ< ¹ÊgÚ!eVÀ t«žŸ³§­Â ‘äëu²~×#Y îz7½ò3“làA°Q®•îe«h,$<�ÏP/I ÙXÃæx]Ù"/ÅPr ~C±¸„/‰\¯"äíCЧ9Àyp:Ï¥ý6D‘Å9ÒRnä&.±•L\>:Ë�B!‰A"&âXª!v5ô˃t³ÃL×R#à0>±éx­€�ùV†-O°Tûˆ<€0)” 9í³ïS¡-�×Ð:šôÆ…¸(OÓhî.�b?üîíó‡D*$P•ÐtD ]â1Ю­j"ž’‘z{þôï'ΚÊOIxÜ µ:ÄnËš fÜúŒSÆf”@Ý⣾”fAÈ0ÑùmŠ]ýýä"ØÛ0~Ï(‡�mOÍé�oQP|{Tï/å¥N+ºÆÞÃNÉ07þNÖ)²ßU—!÷ª´Œ”Ó;6G´d¹rÜ…JvQ® µÙXPÖæìÓ£ˆ@ª¹žÏÇØË»ˆî‚œßH†ASå¼6\¯Ç-UbSh~Št^®ÍÑôÙ¸”Mw¯š”ÉËÐû¢É,dH•„R�Úd¸ðÈC+`\.ˆ¯{ÙaN’pO£ù¨‚¦Ð¿›¡¥•kŸiá4ÁKWF  ±øž3„¥f\㊜X_x]Ì 5zÝ>üE ]”h„¸dìúÆEòŒûö6ÅኈO2Þé�¢| ršØÕ— óÕ5‰CZZ²<_éÇa{Ü:µVà•Ÿ² RÇ %Ã0‹uèøÑjè§iYÙ\²ñi[ æT‚‰�rÀÚ.ݰ«· 7bÝÔojÔ%`ÞöøÍÊc�N;�çR’_¹P?u Ðj�Ô’ù›º9‚•xHq6a¿6Ë<æ•3é`#c†0wû £ÅT2BÜšwÂ-tk�R�¦àcìÕár\«>ôvÍÓHGâåª÷l4›ÿÀ’/éç² X¶¥ú�T*µžéààϼ-Éö’ëÑ_ÎsW©5ŸXØìífdkÅÆ¥ÉõˆšSP�-"«ð¡ãè¶sÖçùPZùcØ‚9ì`¾X+-$  E-½GÂyo�½H(U ª�ý¨EY*˜hŒõÚ}“Ý£H1úT¢Žèc{'Š ßü8�¡ÎPÈVw³a0ߣ=DÀ¢Ž.ƒ¤h|—¨zw*tdôb£Ç@cƒœ�›„ˆ«&§µ Ÿ®£ô¼ Ç/Cs¦ÏqÊ]µÞ}­‡;?´D±jwÃ/’LÒ�@è"ŽMN^÷ÊÙkâáa,[/¢°¬�ÆipÓjÞ1®©Á«�‰3�3¿Ý]õÐó‚j÷Ù¼eƒ%¼�,´3$R<³œp]ðQ¿%H1%h`x!—:qêÅ–�Ú•‚Î#´¦£Õ‹ü¤)É’UZîïiÓ™W¯]ë Ý¿âîCdQ̬…Ä‘4«÷¸ÿÁ �Dý®uøó ¢Šœëæ /„5Å÷Õ–Ç€GwÔÛõ}½¸_˜s–Úfþqš³¥BdÂvse“¬/n¡??­ûñVºá^ñh³*ßö;ÎqŸ°�}мu`W>S�¹×Kä/1ûâÛ¦þû/ þ`ÏÆ 1} Oš(BUç²Dx/Vv…O 32òcI„WssÏÙv8ùÒ¾^— ã JsyoŒSN:üM®;¢óãoÎZ0Y�€n(2Œä�Øs©BšwW“Ã:›ñ ä¢¼s4õ[°8„o¸¬Ñ|ÃQ°:î µI¹ô˜DTþÍZ¯–shÎTW�'È«hŸûKÔ¤júMIòy} ËÞ-D:Ðìx•šoWœÄ"W²˜®ÂæÛ;~]"±÷»UÜ-™_ÙæüDt\üõ;Œ2Ê~AÇ,ñ§vþi»;H$Tâ."«¹Þ=�&\€«ÿÖF|E=Ѱîã–òõj“J_'{Q7w/Û’ ‹åWýÃ{^žøö£õn“S÷MÞF`PY\-ù;‘XÄê(¾á�↔:›*ßED;–@ôœ˜‡x,^ˆ˜�Õq®X)>�`û�QF©³0”®èo*#ûïAÈŽ“{ƒwA³àö?–î{®ÛÀÝõŽ¥x’/w…Ñsª Tj[t�©‹v’š}¬£ñ|³dj&ÂÂÒª%”ç[ºš~œ7ïJ)|ágæ´ ÒÝw'¨}²A0¯½¹l,x` Y‘¤�鞌‰åˉ Ì€]×ÙÂ~í²¿Øº9J Æ/¢†u‹V™8ímŠx@¶|™@Ï#B&Ýß�>Â#ÂúÉ¢r-R؛٠ä¯zÇÉs}·ÛPñ”™œl#¯û�ˆ<ŽFXäF8àÂ+b8ê‚vf�òiÍÍŸõK”ÑÞ­\hr÷CÄC Ó`�‰Ã¯³ÍÕO_±¹ÍÒÀ*“NÞh‹éÅHF󀇅tP(�è…AØIß¡_ª‘«f‹)7ªGcKPʲ1›ÐYo»O'l]}Ò‡žªºÉ1ííí`_f“Ô�£m!"õ4HgVHTª ô>¼ É;íÀ(dÈÒ k䄸’¦;›~C!™³p¡ØE8ß” §ß,Î2tòÝW ¢Š¯&Ü2²ݘã1J¨êí<%˜°¤‡pË ³Ç¢îлî,%V“O½t $4 ¸Ãg��žmaie=¹/»š$Êà¿� £XòTóüâ™9÷£n¥â:²$ÂÞ–š±xJ>6Å¢ŠíJ2ìä÷' ûŽ™òèûœš ì ñA`G÷^g«�óPæfêƒÔ*ÍèWg–Û­NöQÕDM`LTÃf³{‰_èw¾‡ë©5¾•9 <½çŽ„xÓÖÃO²°ü<|x\øì a¾[™ÚãvÊPÆšëÒó%[Æ1C;íIÏA/öQnG†Y„-—1.v0—†lF]”|nÖ)mÂMÇN#Ù5žòt;.Y$×' 5ÉëE·Ð/÷áW*¨£Pü4.ϲ\jרØò) ˆé¶ÂE-,Õü¤!f®ÎöŒFö4ñ ! ´$ 1xà£~sC|vn¼Ð9zݽƒ¬PîlvÄ=ñ nÐŒêJæŒ2²Ä¥q…cRdX¿ÝsÑMéˆÀĶ·;YÆ9fhÏ!ïã×È F3¦VhÈ÷ˆÀª¹"m+¡­/LÀø˜>ßÈ®P\³öïxf0go\SÕÍ&Z¼Ä2^+x—¸O–fîJêìɲcÁ‡#ÍØ|¿¶Òkx̃o™ÄNÅ ¾eàKAL,ü¬=‰ãÂyx*ƒå#©3™:yHûEüÑ–&|+ –%"l¡èô^W‰ßT ¾ëúNG¬›dU†ü�Ìøùü¥[›QÆY¼OóR­Öü+iE´­+ÁSS Àýl•Ž{\ß?N4»¿±KÒÐQ$�†ùˆj©ÄN˜/+d"V&NÔ¶vËê÷Eâ´çi))eŒMPòPX–[iG�Ù‹JÀ!lðBC’ÔC}€_¤kœªƒ7$”YTÀjîëÉk]ÛXfØÒTWÐÐFÞç³r:}ÙÞ#õ–IV„(9,Aè¼ Ï&7è2,íné{Ò Ú=!Tþczw³\÷Ĉ&î©sþÖÝ¿…žIðt.}ß/¯µç“c\Ô¤+ØX³*Š3­Ë²æ+,Š·Š•»( ÖnÖ&WÐ0r—·enß.o:ÎV³Ü¡­„*[›:FLKÚç…Z5Þõ}è›3”\òkøûO˜õî‘öâcT6O öÒtm–.j?× ^8 �’­n[ý: %ScO* _GÔz]M bJx!s$&6±Ùƒ1g¿ZXoIQ˱rž©—ezcV&%IϽ˜µK·™ziçã|[RFBOÇ&ÙÁÏ?�_™ƒ«wÖL¼i §–—Ë—¦sW@xë—ýLˆBïV8z•�ñÝUGõÛ¾õ•uLòïº{$ÔÁÿŒûX®ùZì¾·tƒšdë7v±�ÿ ÿ-p×è_Ù1ã°QhJ53´sk†–gW“b6þYoézŒ(ªT®ËÌÏa¼94aZÿ®É©jëÔ[ ñ)¥#FH »HtRÂå�Ô�)Æ,‡» �†îíš çÉì騣p[/옻Tm@xê®ùX8wéþF£àš9ÈkêèýŃš|®’ò««d#Ý;ÿòïþ9yÓ‰O ‰5$fË׈2§1÷G]¯Ág�$×åOÛ$)oµbäzŸjº‰qo·…Å¢fÐxŸŒ´*÷qrê+¡1wîõõÖ+°wù›|&dµÛ�¥C@Í'"ðõÕvOY€ÁÊ«q-`Yóƒî ï´Q&ilò].3ŸNï ¥0.ˆ8ãÐk6d ?Q¤º—b­¿eª¸×ÄWÍJAáÓŒåÏ«Ñ?Ö¨é‚lãu¹ÍºØ¥Œ…ù=ÃsµPNÏ9¿Òº´Žl—5ã·Âƒ ›šPo¹Á}iý@ç:gpÁÚFöjh·nÚ-èÍÃD¸�'¨‘:\´÷R®»}шվFóÒQÏàoû»%ã=°šÖ…$¢ï>Ÿ4$êu,�L,¤Ñ0iWA*Ñrf…š1 *ôzí’?¦·–MEðÑ‘k’ø vž)�¸ˆ#"(§��GÝZHgžò¢t´€Ôt²– ggwuªÎÛßɬ &™Ôþ~ÖÄcÙbÁ~³Ý—Òg8hÙ_˜ß¸.©G“>U6ÈjÃ^!tºD®Ð­¢Â=¯t§Áêár…}¶ìœ'í÷båe•:�ñsÞÈelûzÞ`z˳†ËC23Íâæ�ÿ²¶?}õ†òÇ�t-v E)ë€L”¢Pe})—'ÏÇ>–<$‰ly‘ÿk÷½¿—EºÀ,Ú øub„÷¨÷¨‹y0,�ÚS6¿C;ØÚn9Ôòô,ôz§ÒŽ—‹»çQI$ëÒʯgø£>ö–½‘–Ýû…sÓ©_‹Ï�7¼ÄÌgt¢_ŸÖ‡T2oX¿®¥º ×,ƒ4¯EÒ.ì3”Jcë"æ¢M‡ vrtcIwÐ#�;™Ø¹Hr–Úž™ûä„ e é^žŠ�ÌÚO ‹îrKºZ¾çΪòˆZåèÏŒcPŸÉ.PNRµÁg‘D[¤¬ÜÅt£æ Z`Ó”$4uÑ[/QY“}ýŽ„s1³h2‚Õô ã__C0ÃiE ÌM@«Jp*Ú•ãÏþýod½ª`)ãY ™eßÀ*¾ÚÝD C·oÙÂù®Š†&UX¤ýöwÉtâ)“}Ìñ˜²ÿׯ9µ×ÁpÝ:6;ilÛ¶³b®Ø¶Wl§±Ýضm5fc7ÖþNÞ}ôü„y6Æ5î{v/ËÄÇ´æ %:þÀwY¯`ö[C¦çúeJkŠÀ—(KÌüþJ”ÙÞ›mBø<—]klkbxsŠ™LV”Å'г}ý˜¬ —IìJ2Òwޱïñ×FS;š IF0M?ôîQäÜk†¨èC_¥Q™RÀØâÈIbSç3Oê‡Ô PÑ{ù…ÕxPް ‘Ký#y;þÎ v]Úº×ȃú1Í\¦#Rq\å€û&Ö6+ …„j˜“úsºë ÑV³’ÞÙ_ŶUÁ[|Z6ë18'n¤;†Õñ¯Áž ׯÑN%_ùÊÊÊâfÃÜDhWª! Ž|ŒrШ‚æ½Ë�]ÁS�AÉ–R�ǰ¶W¼�€£õ Pf‹AÕ0>™Tݘm€VÇŒ 1Wcø‘kWHöþÓóX}b\X.ôúòw#*o+Ñ]s ¥yÌ¢hQ´†9ÏJ�LcÔ #�›—|¥—d›–tæzতR–h�yËP}Ì1•B›¢~𕀇~Ë3Ì�}͈#ya¼/®%nç„~dôö¸Ú&Á4: §ã þÛ ψ,˜¯ì hvX•6R¹B æ@æJ„VÉaÁx!…ìš(§SiÊç lŸÝHu&3“-Þs¡I�wÍ8›mG‰âtAŸdät�B}OâÞ…†Õo×'¶•·òÔØf©“+JîßÎzÇ�H•‚M¯0Ih¡¥¬:Ý©V¦=yUŸ;�±)ùÍó•Í(Õÿ_`w1ûÐJÉéD•ÍÌ�„ƒÃõ)k5¢‰þð ºèÝf_=ŠïN£÷¼Ð”{#3� Lå?Ø�™Å¼GóVŸ“#6‡KºË„…+%™Ò-k„¹e½æ?áUáŸ}°aŠüÇPó®Ù®F†º\ð¼äõØgæèÑۋ옺Á½Š¶l(8áÈ+›øxqž=PÍË ïÖ‰¶ y¾ÆÜ2¾Y±: ÷z„³û÷=¢ŒÚ¬)Î(uwRMÁÿáôÌ=¢ÿxS=ãã;Ƀ_@*о {ò[èîÞbèšW·°â˜g¾ªCMOC¥\k¯¡IAN³§L‘ýþ¨íÁ©y^ 3çs¥üÕ½>˺p—LbžBUŽŒcžòÊ> m`d8ÚÃ{±_]ý¡«{úÊŠÄ„‘–ì9SΘ°o·Fg‡„ðdÓóÐªŠ·hÙÎæ�:ÍŽÜÅ$p33 j–ì8Ÿ{à’Âï¾í^•ieÀñØœoñwaqë¦Pq‹;¯¬ÇæŸ4rö`„�°ü#¬?ÕWÉöø‘ql¥ôÏ€Ç-�âh –êö8ø¹Ïi@�8 wYGösi*å‚Á*õÜœ=£¤Ô§+`4‡0ü;Y˹²µ�?lÀXh%W˜ð‡Å„uÔx«bµyOj(OáÉÓåïø2NÈÐ:A]½…êµ ÚY+iO~ÿÂ¥³‰@о¯ÀìˆÕc*Ô°Ù&¢*âE tüã4*0ß1‡˜dÍ7†\þ®_lE–ª�îßt­=܇�UÝ­©bùªtžTòAcW®íû•c–6zo_<e˪ŸÜÛÕÅ×¢S·fï8Û”ÓÓÇ£R¢QÒê­Ë÷õ”�øˆ|Ÿ›‡†vt÷x9û.Êñ;gÏâ7µ@@q I{ÖøM>+šq k™;å$Ä=mÁòœö2«;­,«é°Ë}Í?š‘tયHå¬((ëÇŠAö¯ �  ƒ'Õ 'š\QW´->ê¢Á`‡œö4&öòSlCVÄv^Ž©À>ÎE‡ÎUÿf0µbËb‡ô•PõHÁ…#®ž‡hª:9Š ò±Y–¥aÈ‹¬tžŠL1ƒ?`˳ù ¾\\Ég8`ùvV¤š{h˜^+»»ÝX?Çב×À½zé•ÚÝh5nŽ!©õ„‰ÿS7/Lj[uR^]¯I n0A3ëÍÄt1ª#”ý¯A„wG®H´ÿ‹àí{k´À|Cß®¤B ¹¼ç²äY°>éÁ<ä7xj;î¸?‘Ú¶­×D³u¥éìþ¸AQ¡~‰ëMæ ƒ…ˆŒ±¥PtWÜ®€2º#-Ös®R%¿?Ë…œº¼ŽIq]͔߳]�È´ +ŠÉ�É´§ˆê²ë+*wg®ÛßSb»Àí‚?@kSšŠ?c‹…£uô(|a�×¹®8Äîù]‹ºÆ¸�'5n¥S.dg×s»^½ëTpxdSV$�wû<¨[lþm}~kJ<´ŽÍ ÍE ˆ¡ð}TíÉTíª~mV!D§$µ�ªåu&H{Æ \M!Š~Mòf¾®™ªbÜ`Ûáýî:¬4?ƤE h‘~&ñmi"Uï÷h4å`жöÌpx\¬#¶ƒÇž|Š$2™B|eOJœ�’ÍËEX7§d"B Qúg}$m5À=DY[–NÔ¶aÝŽ/ÿóš‡�Í;¥x¿-áæ‰¤ÆSïß¿}©÷ÚiÝÄÒ3I¡Âãs·(ÁiX™Ž”�¼» át#’ äŠ3½ ˜úFip1ª’¨!�‚pjtd¸*ᆕ«FQ]fÚRWÖð¡ðþheu;Ðûµùçw1çðH²k³ió-èª38évÞ1Úó³µ#tøvà ØX‚ä.DVCµºã⢦–Ô{î›~r¼×͉ض–×v,Á÷rÑè•_ŽçR²”Á2hv 2nºYŒ…ÀÉ“î“ýÝàbßÐþÓ®¤ÐFÎÇI^ävýC/:¦Ãý“¿ÕFuÕ \®L^�“‘EP¨ £ñš'©ÒŸu2Îá Vã9£j*_ð[Ë!6‘Óù|ÃÛ,=!lw�/=÷œ HEïûo¼.ìn»‘ ª'Ÿ³Ä½h8 1¼wªÀRÄêékBê&| «zQÌ[¬8À„¾­{9¯„Å/6ÃäÞ\œ¶…R$Dßš—ëÅ·ÏŸaXò“é6R´ø ¢Åž{.>KÍð²1þk%q>³HýÌЊ™QQ¹�þý�UhcCFrÆú°ã?Dur×{íwa7Ê@hÙÎR§W½ôZÄßF)T�â(è!9G]vŒjŽûZØ®¼D–âSÊ™ä\et3† ~SÙï+ |UÙÿP‡‹‘ƒt!ö,®>CüÔÛ24ØÊ|z�=kÂUÇÇy Ñ�³†.l<Ôš¬2X ò¤•Ôþ­õS"›Çš Zµ¾}EiEÌš×(ñ¹pSàR„ו‡�ç×¼Õþóã£zê°ÆBYùfãÅ;?®–3_éY*…ÛL>dBX™b¢Y5ÆxbFð两G)ä8𴌦L,ûW‹u Ë°•Îÿ¼•lBýˆRÉýî%À¹óŒae“Í?¢Ž'â*áx= ´A’ɪ³ÁÝÊ;¤4È׳Íè¥�æÍüC°Æ£Ÿ–P¾…}ê]ÄÖö‹×Âw4jŠÆ6þ 5Í‚ü7F¯äÏY•ë¯xmèspTMã_Šw@X_ì)¹�°æ¡$Ñø‰ÂöyÛ_y ÉòËx ÐÄ\Š��(Ĩå’c7š·Ýâ°£%•ÅÖô«H÷œ°òcNΉÒ¼Ry_šîý_6x_ýTé*ü]㳑¯…ŒRí¥ÈÿÄù£¯lL{øˆ$œ+ŒŸò›8áÄ©/!”D~_ßâé¹[›d=¢t?c1qc©¢öï,ªÅäåÃÅUÐIá.«<`®|ç3 œ¹JEî?6´ “m-ØÈ¼5 ¿m:.ûr-%Úf¼d¾âYW¤=^¿ŸY\ ^:²ìPûÙ¹óëŽQ «ÚX‚4AhÄT¦ñ;ub9ïŽú(™ÂsèÕCÄ£ÑkIÍWIåM‡â„m-ióÌ8ÃαÐÒŸÙx'Š(¸O‰ñ’40zX£m#{[««‹Ã‡sæQgKYHâ25ÞEñ_aØŽ•c'-TszøÂ`S"4³|{O Ãuð‘¬/„UؾÖõajÒ³øƒÑ¿×[‡óGîÇî¨ô±žìÛ¦•3žiÉIÖºn¬‹°¶¢vg­âÕù±ŠÞýAê”dd´#�}R-÷ŽÕžcóñQŒ¦¦ ¬ëXï'—œ`ìWö,Lºá Ù'±Û챈ʰòSï›a›ÏŒ2+B°óÿäý,¦ùüö´Œ2ªgæ§—›Ö yÃægbL€Ö5€7³m…ðU�nR¸1¿Ã4àǤéˆëXÉ ¯~KÑs�Ã��“"ò76ìá^¾¨Ž`À2Ôqg„7{Z¨¾0Õc™]Êù9+53 ª„hO/½’†oÝ:é­À'})¼¸7˶¢NÜeï5©+ñ�q¦› Ö&E«Duùû»¥GöUùH°uüâáO–|«N"9ÒnAMv[±öòP=¢U‹¶#êýQö6¹xtäzÆ™³ÙÀ7ŧv‘ܱëI-ux&[•È£ÿÎÅ cÔ&T�ÍH¯¯ôV'Üå] íBoª÷ …kŒí¹Ï�ø›óâ'm,¬¢Aj‡7¢FüW›* bŽþØe2+¹ü–lËlñ´þ”n°¿Ïë[½MžÅ¬ã®{¨¾%s§ÐT•èßCÆœ�1�ú�>°´Øï èV œ�z wmçK›ý½i'X=@å§Õü:ª-Z« ž4«‡wü{:¼ƒeßUŠö|L²¹¹¢PÌ ÙjöS -†yÀè‹÷-ï:„oË ”· ¼šêÂAh=6×àpRù¢¦îX;üOBÆKðù$•„¥^źª?µ•ZsÝÅÓÑÑ•x,�³8~0ŸA¦T|OÐH¾}µiK¥‹_ä¹ò5Þè¢dz%ÆÆøÓÜ Iüt)–Š·åo3e½…œÚÞ RÕ+ovGüT+‰„”ô:]~£A.w‰œœ§Ó�!TâêmE¯t/'qéÿèbèå|'€qCÌ6+,Œž;8"œ\?['æ¿Ë$õ(°<Ÿ>ûÑI„à83ѱÝñp&B“c d%IÉ;…�¥†sl¦‘Ì�hÓpfUCrg¢ù|Au^“êà_;#X •JŸl…—i¹¢¡ø](z%A+ÐãU(gxR˜ó9t’°,R’I—ý>?J£&"tµÔÞéÔˆ” ç±ttÔ—é//m±ûéÍ#ׄUáðæK·;Ø� N¡i»Þ{Κce¼AbjJíÂÔ!]2 º|kC\«7®þ,å«\›)ÖmmØ‘!ÙHPdƱ}ý|>e˜o‹™Í3âdÄœÌ§Ø ï=@{¦³†˜ƒÜË*(üˆí{gV ›\¹¿ßgkšÔ-8Ujб™a˜¹PHŒ‚ófSÄá+õïM"ùÁ0÷r¸yZ-^mlVÀ::á<Ø K*¨;ÞáÌirÒ„®"eGéíµ¹ Åe»‘öæÝþí퇛*hmÎ]‘m’rÖ×Z&¹míðL 7§µd$YÔ�ZŠr›‡2§æùE' ù´ (èlƒZÄ1ž­´/5�sÐÂ&‚ÙÝ¢ÀÐE°‘ÙKŦ)zn¨*wâÌÁ­‡qÚß´”Ç¡öøè%!‚à UN̤³,ðÄE­ð6¦C¾h8nJ$åÑÓ Tg/"éûkª25–N&.@/]SP›xb‚kœ×Š!ž )¸Kèx¶‰{Íü¶ y%“R˨×Õ:ÒX/zmîÕõØxÌšëúeÈÛ6%Þ‘º,Àˆ�ý¸ftGÛì¸;­EúJ„‹¦uKu™Ýý„c³ë‹¯Çµô6¿âýßW'tœ¿H &ܾԇæV(� ›àÈ(Ú¿-†ó´$u%ø?I�ê¼s É#ßKë7"2M½ìƒ`)"ê®rÅ=–=ž|•ú‡µÒþôfrpTîk7ú�º"ç÷½ñ¶iàÕâ}À/œ§Í'äU™r³¾HvM]SŒ -.ý8¼ð{n€�Úä±|RMø™Y¢a6!ϯ« “²�¿†\º9ä¬fÇŸsÜɆa$¡£ò‹Ý3rÅúo ‹¡ {*Nqyké³diaiušuå[ •ÐqÒ4�HÚ-–˜±¢ÿêù ‚Bšµkª@�zIz¨ÿý%8jyƒÓk'¼ýõM¶J~“Aé}rfØ*Ï(+é¯ZÉŠ”FØœê鱦Ü,7)Dsêø#ƒ–÷ç ëî Mâup—?QP¾²üDæ:‘©…N5Šq4UF5â5¯ó…Êü¹&¨{ÙQP?ßý/3Ÿ´m~ “ ¹ÑO G¦"ÿ†#p½|°£ç_n8iüžû¬ê:Ð\ÿOžŽž‚úëBz$•V.9)ïmÛÚIìÛÑØ;Wÿv Xéh2zµ*X\‡¹�j!:¸çDû`ù0O»aÁä "tÛêÓÑÃ�>Ö*C:‰ªåýh[Å÷T$ þKj!‰çµP¡�}¢à­ê1©xÀR¶×§"n7Ú}Zûת‰}PDF^öìl¸j8n~ç,›ç˜Ý‡læã‰W"ÁC޶¹L0[à^�“�@Ì$—¾:ù:m¯ñ'%ýRŽ6“ó�7‚Üý0ik-)P»A¯Ýøð,Z÷ý18 +ù©>¦1Ñ6Zæó §r`Yý@êezzïhW×Ïø±<æxKÈs'˵‹(­|× 1›6—¾¤HÛnqe/ Ã[ötÒø^¯ñ=ƒ¿ÃñÑB¾qQð½Ù]JUéR…N T Mp»Ç9#Šæ`ï{“ž.¥Q/fö²"S1á8|¸KFk¡—�LS'´¢+ÌËŒ¿§O×ÄËå[Æ ¡"/çcê¡Ï»ikKÒÒpt†æ¾êß¡!Û›-Œv¦–5«—ëˆX!(7“Î{?¸ÐÚhß®4ù_>FƒÓtEÐZDŸÌ}éÜ%è⺱ýpFJ-.»»\€­X *K? BšÓý�|Š$9ž -- Ö®€jH3$\…fh‰«I$7¦"Äx�M`‘p—Ϻ'Em¡ ô¦X!hO6=¿aíïûÜ‘OÄÑ¡%Œ¾&énéµ0O™“:|ðebs³7qR†ˆX;VEË;%ØòîpBleÀ¯Øzæ„ßÊÏ�Šãèù&Vé—ñ¾W[?=À¬­p—–f¼€Rnæ(ò0ÀdQpÉwt͇4ÇXk×#Jy! AxÜâ•þCÐ-s_ÈB’Gõ��$6€1O+½ê›…ƒ‘næDõX¶µÚJŽTƒjÎýXΙyÿÁ5êú ·0 ”G¬Ç9-WüˆÐ}©ÇYc}©‘E2Bg|íû°pÆeÏ ³¡þsI%�WcµTðÏëÊ.,©ù‡BÖJWV@±=u!`^ÛêXs Îâ,`üÙßQ}«‰xô39¤õYgaÑ-·Éñ.ÎrÍñh?FÊ«‡tBe©ÞÙ±¿r1 †àýnH"6 `Ñ_àM‡W4='Ž8WÖ-=*ϘŠRcü¬Õ-J Iù…B§JJ Vy˜G“ƒ�#á(·¯úÆO²æm€�ƒµõ�ޏ›iÞÓâQU.â7˜²žXÔƒ²:eœ»¢uÏuY·t÷@Ceˆ+({ºQw‡JœR_?rT ä†À, ’Ê}Ì‚Âô®K-' ¬aÝk+ ÖŸdµ^¬$Ub¿wÿÞ£ÿµ nm|‹Ô˜}×’ÓÅWÿj-mä´ƒõmù™–Q£ì÷” Š.Z¨š§�ÍÔ[sÆÈ$Z¶ÙDÔí1É‹LTæe5 J •H¬Rô¾f(vaú0ü³T•A|#Èͬj’y&/l¹Fìñ¦÷B‘ú šÎ_ÞÄ &ÐîX†¹QrjTŽæ(m�.\Öùx…ñÒ– žƒXvÑ üàô;2Ñ �2 !ÑÖÕ¬T*€6÷¦Z=Ô°© î·?˜åíæªpiõ¼Ø8§CôZ  ðMè?6Œ:„¸¶‘iÕ›˜AC�ËpÝDaSªæŸ+“m‹wpæb¨fx§´òëfG4Ã'æ½uã€Í<ëu1Ø/Å5ú2!×øIK>• ª•wÙš5*šASî ¢—ãÉAm¶CÎ,9É97¶ Dz€ÁQ#¥ ®É×m–ˆaE]VKDc Å,GòFqÀ©iÃ(’ }1‚¨æ-¦Ç¼mùÿ¿¡§F£Kû–OkÏ�}àÚ+F0­PJÉe™QÀ¹å¯ä8Sò­Ö…QXö5ùÆo�ø˜ý j­Ò]A“äÆbé7Nìyô¢¹"Qk;\A“º¢dAc*u4 çÈpù3\ðʽ—EI;«&ù\Òoj€M½¶ÖQû몵á[eÞ±jIƒØ½vòÅHJ»D›GÛ€OGÛfôáhL•«)èªüx‰¥Ñ4�Ë1ÇÑèÞzÁ&à65þ#Ÿ_9?ÚäZµnô\èPéÇ®0A�XD5Ì´ñ}j5á¢kî�J ê‡)Õâü²ÂäøU¸–z‰E?B”ÊýÒ%œ #rôºLÌ[‚ šÏXÒ e�‰M¨ã0®ÿ…,!;:¬è 3ùEg´€ò¤¯•~G× î‚ÈØê¨ˆ% xM$™ Ñùô/¡–åk}<ý �ï^b>L@¶Áîp^Ïö£[íO_Ù“^¸HìLã‚Ô½WE«šåL«m—*ïáqp±ºcù%ÞK꺯ñ‰r*0ù2å³îP»ÇŠ$°þ�rb@nЬI1žþ€ÍOаn/·¤=ä¾}Û¹ZRsî„øÁ]ð£Tó¿$¯«—Ñ8”j{‹û'±$ڃІú(¨_]W#µ6ÝÛÔ–ê©*£ |/'›®CKë¹=îêàh{ësgƒRK+ÍüŠ�»Ç£ØaQdˆ> O�Ÿ?œ —éà²öiNÈÚ¦’XÁù=±¿0 eërx"ÚŠl°3™TÍ—F¾áZ¼o6£cÕLwCÇ30fVÉ¥#¨VTî(”l´Þ 'j8õØ·áA‘Èy¤ê�¦y~C„CêZTòú¼’+ônƒ¦òþjr×~»=º )Ç#^4z?þM¥Xì†pø™XI“V¤t?iß8ZzN×ëŸùåÀ§U�9Z!k‡K ±ô•%:σV"|Ìþ�Œ†êmd�ú\ ΑyAκØ#ÅŒP†Ó´$¬�)WyíðæePsÁJ4‹cñlpÐæ•oÉK6mnmhž¤ËÎøkÿ1jò@ j¶=3¿Ú2´ª¾œÿAE¬ü_=öX-’2De… !9–J?ÿ„ЄJ+@x{�Èè«ý2˜ 5Ö¦•%Ògè¾™¢qÎ~=æŒïöp¼Ò×Ú� ¬»;÷š÷7Ê œ�[%y 1pÈãõ€q”ÂtV³ýÇD= �rã‹ïò†p ªÜ€ËkãQRI#™.­ñ ¡WP¢Î"ò’.(È‹M3!•Yvv)ÈÊ€r•D�\˜j¤WF1Œ;ßÿ0˰ߔšNoá[ nì#~ßæª¥\¨Á©ûáICÏ62ì¾9ˆÌ ó<§âI³üt@z}ß¿ñc"("Ø5xb‰nÿ4cÞ öc‚Èu9ýáas¤×P€Üš¨úm¡"nR ”Cƒþˆ.ÀÖ2Rf|ÓaTméOÀ:ÙèÞŽÄÐW4ǘ{áU%ÿÆ2:äŽhÝH´ý§S@ÐG°ûÊ¢¶y;¹×+VËYW²g©EÏÁpß|(%®ØªJ¤yûYs[‘p²‡„¶b0'!rÀ«‰OÈë�tW™î H‹³U&Nç̤“yf«¾1 .ÎÚ/8‹³[Ñ6pì[ g5Ž£‡ë€‡Wç¥{:ûI㛂 ùÔ`uõ¼z+멽H^w“v/ÖklÕ�–ÞâÐ㦿pÄÚœÍ(°!&²'ÛësMyæ]]·ÿ­o6ë$]+ى̖„íDÓ%kø íÃúËÚ=k°Óɽáñ#&ƒÏÄMÞ'OÁHŒd–¡`))[â÷›ü3ù‡ä9j ø8gÕ×Sw[úšÏ‡`‘¶“§>Ð Þîiµ�/\ÌÞzôáQØ™j®óz2)”óŽ*€lçô[¢T¸¶éy¹$«‚-ï§K«ìÈÕc*aóf"í8tÀLçb�ôFà)ƒvÆlHXË £m2R»ûžoÜ¿N`Ê�DÚ[ÄÊfHêÚáìJõ¹ÒÕa –Òë¡�òÁÞE$ÏŠ¹ÕLÝv†ù0ì¸CѳÐ%±ècK9GThŽÐfÙ¾*’4?bûÓ+r/+Ç‚ %Õ�ÅI@Ž@¼à#[}8Q¾qÉ÷MÖí6ï�™;fÃ…àÜXŠÎ¯¡]åNg´ÈMmÊ 7åçwœÊµü`TÔRµ9Oá6Æß.•Æ"â½·eå’¿ÐÀ¼ +'G¬)ÂÖëOð1 šš£"ȶE¥‹'e9çx±bh³¸´·Ÿü–¬í°q/ÔC¯"¶�¤ßˆ¥²¦@”åsËg¼@[‘z7–›ßèôü R/ðKùf÷�ÿÚùµäd~;ç,µÐ"ã(©¡ºñ ŒÓ7Ú_´8†DÆxòÿÈùŠMWÛDºøñ�úXüw#ó(>ÃZJðqÈ,G޼GB$Ñ€žßå³çWÝBI2JËzYŽãjå´ÞE�Î^Q(w)—À5ö0ÚåÑ…JåÿÀÛ`é.TÜñ9so)«iI.Î9õÝáøÜå_|³^ðt¢Îæ®»#ìŒå!m15F;§‰#£Þ™²Ã&öcŽñ¯£Ž5œ<µK·]*iõzËÊ[{¹>�A&í£ë!æOÊÛÉÒ5SN~³Ïέ~ j!ÃÁÏ;(Ù�ƒœ>”zy¶Oæ¥õz—g!]{ü$ε,³â̈F Љ¾IèØôò™=ýÈûAÇ(S•H¯�¦‰jr¿âw%5 ÇÓ�ç``ßò�q�ËFµ’�¤³¤Ï+¬ ²‰lÄhšRÖ;•ùx«þ pW'1eú£Ÿ–†ô[ß&4‰5 à)[r…ÄzDºÿR m2î’ÁŠ>_ßDŒy…Ž¥ìG.E«=È’ŸŒæ$—9»˜ç¢–ÌJÍ x²Ò™µ©%ì½À“zúAµZ`Dìt§HR‰ÁO™¯b”âPÿª†[à0íãÐ|÷ñ7–‡ÖØedäÛT˜Æ!”nÏ­1~Åܽ“qîï…aî4p—èêîAs p¿9¯ VvÄÀ{=qÕ tE*µ]ó`Êñïùøº_Êÿ¾·®·[cš93¤¼’K©ìE¿]ia­ö„›~’—ª `àY´ºŽ�,::%&i0«[¯õg[µD‚J­â‘‘ýf¿‡„å7~aÚ'+^OåFÀNËn;3WQ¢dÞŽT³Ñt†‘CðŘó¡LÂ6cYí0Q8Àã/doçy:ðu¢<¡iš u$þ;µÔxd¥kÌ,ž{ÉJ;ÜKCÍþ1ÎÁî‘RZïOœß,Îc6%ü¢Þ]Iƒõ.âLµ”.|~÷™‰ì¬Ç§F’m» k}µWOÏĶ¡-öí:‹+»iºy0O'‚U^pC¼.ŒYËíín! ¥ØÚ¨LÏìŠaü±�Únòõp «ü7¶Ûˆ{è �fÛ}Íü-qb7Þ)¿fIÇWÀs«H| ±jñå@Ïì��Ý÷ÝOÌû¡5´'!�!e‡ñ G�Z•],ê†*ëÞ+puÇt˜ Íë+ãÈI溚|’Ñ£ü^v�âëßG{ÒÝ„({¡f.@êEB|jUæ‡l�›£½A9:!ž,�ªG4PÚ÷/J¥•ðÃ"¼$´a2•/Hr&9,sÄ­|mÜ"Þw=ΡŒŸÌˆ #—¬Æ|ü=+kMÒàËVõA¼%j^n`9œž-Ý9(dÄ95•'!áÚ¹NÀÁ++é«ÍÝ7j+L?ˆÆ:¿q9úT‰Sl¨Ž>·ÉèÝÒ XÇÉ“÷¥ŒY ÀLO�U›w�l4Ò}+˜x¦Ú¾-ÖfJ oÒ¯TN´œ« éŠè•qüú|&(bÝ´k'‰™ágîëìãØ <ÂñðbIˆsŸ˜¤ÃõÂô!xZþ>_ÁR�éžœuÍ`’²j›®K†juý?ïŠ^6 endstream endobj 1685 0 obj << /Length1 3079 /Length2 31298 /Length3 0 /Length 33011 /Filter /FlateDecode >> stream xÚ´·eX•]»5L—t7‹.éîîîa‹n]Ò�´ˆ4H· %ÒÝ�”t‡ð-}ö¾õ~öû÷;<Ç™cŽyÎkNh)ÕµX$,œÌ@²NŽ`VvA€²ŠŠ“£;‹&ÈÊÝè àdegçF¡¥•rÁ6NŽÒ@0HÀ¶¨™ƒ!©�vvZ€Èä qZ̼* 0PÛÛÄ`þêNn`3 Ä r´²q1BR¤œœ½]m¬¬Á¿jp±°üªô+[’ 4·sòt³³-Ь*¬U'OˆÑÀàä0Yí-N–m�>@GKFS §©¦£®ÅÈ )¬åîììäú?\¤´´uä^¤%Tµe Ý—9-í_ÿjƒ!ü­^Tµ!þ_} �¿ÒUd´%´ Ôe8Ø~­Àð¹ºÙüjû_Üè ̨AR-]�~70XƒÁ΂llžžž¬Vîn`V'W+Vgûßü´­mÜžN®vÈOW�=è·0îŽ9ÁÖ ÿøµ)es�£èW’¬Óœ)!I;øb!À¿jÚÿ'àý«�5Ðíw®²ºº2Àhã9Í!�` ØÝ `úÛù ² ÿA@ÊÝÕõW•ÿu¹þÓæ©K:AVöÊÞ×èùß;ttwóùK›/ÛÜÉÑÍÆ ìöŸŠ €¥�=è{·_{fãøÛ¦"¡ª +£¥Í¢ <þ‚�uxþu`!½¼þ‚2ÞAH'Ÿ?K�Tò¹þ‡Ø¿ïõ_O¤ß·?ûŸKãÞŽ¿±ØÕɤgcy7ÿ¢„|/#vÈÕͱCþüïÿŒÿÕ€öÏ«ã¯lII'/_nˆ‚,\Qù¸8~r^ÿ¥šÿç÷ûÕ¹ÜþÿzB@ /�9ʬ“¹P¨í»Ïá¥2ãeð´¬?*ðEõá2Æ[I¥s7©@b…AMo>Ð:)Ë ¤9éÓ†âÙ?­6§TŽ]ZhˆoTHÐe$¾åè²êP™SÖNŸ¯˜“oPÌ=ùáKâr€Î·)�ÖŽ»8ÎÑg¬ó4ªWe_–óà=?Ns4âºÚc{Íc·‘Ì�·AƒŸïp߯»$˜¦LóÃñ¿)"8wv`2¿Ë×Ö?øê›ÞtV>H>µfÈ�’É%ü±Z<[ó˜ä£YY‰QLv´[~´�½]ú¸©ò|• ,Û o…VJÝ¢Fƒ&™é­9º¡Tàk¨ýÏ!bHG¯l)^–v¾±=°ãz5.ñ�˘¡Z³#Õ$�;c°K#§#+ÜÖïk9/·ÔsaqNµ!i˜o’Ã(W*–…:btîMÍÀ;†õÇiÕì�ûOr²M¥@b¿`R·í,gàç O%H¼ˆtf-hØkÄܪèÀàþ\¶ÁÍëH%ì J™è«TŠ×}G‚‹åÒZ•@v¶ ¤Um&K’ �9}üs‰�7ÍG¹+,ž÷ ˜®“ßÔ2kQ $ Ї¾[1(Jõî)Ü.õ€ÔSO–vïɾûdµ&Î><[=é†TPMù8yÒ�l´p”äõ‹ôèîéº9<ÖTê«>…Ùe«xP" B×�o«sÅ&x½ ÒÅ+4¼²@³�’\k¹åÀq{�[¢›Ý-�ƒ×ðÑuI_g°Ü~%29S´t|qcWtOècXÄѪìOîþÂõ«Qœ²ÁiRƒØRãÚ/—zÁhtš¦œ¬H‚e=’ë’ Û‚cýb¹“Qen´Ò|w£§I3¥[ jPÌP+KCþSü9°¥Âã‚ñ³:ÞµvˆÞoP¾ �€~*ŒÐ½Öíb¹`³ò�¶R´ÚEžÁ¯{9"�ÕXÁIJ�IÎçüˆ¨Mš^Äìcè¥3ÇøJx[#]¢o�×ð“œxxèÆ Zwq‚c”a#=1)f®ó”Ìm´ögRäÅËg˜åæ‘^�zùscóS$ÿ$�n�%¡úœƇ‡¢ô«Ï¨í.~bÚRFj+>cyB¯¹Šæ'¢(é§õ'?iÅø™—Qå¿å„™¸Xê�ËG¹ðäܳ¬Å©WþYį¡YŸjÛ‘4F×Cü>ðb3ô­÷g„³Å|DVagX“—Ȧµ¡Ö”<ûT…PØò�Šm9©X_Aé(ìÏ8o|¡HÛ¹ˆ’Wrv¼IÍ�$“K;WõÑÍaŒZÏVS„Ë>Œºl82XÛ§�¨OpTåÒº]’´—ã`ûÓ�Û ÷)V{©G�û@³@pñQ>\¯*v²D|«4­m ¯aV<åÂOÊ•˜‰ Ísþ|x#›H–×JëDE¹ö}g Á^çT/ý[;,fº(õ´JoëÚôƒíE˜Ÿ;O‡až¤&‰6Ю²sVäBö‘JÄ9ç¡ü?(Å�ɹ¬?ÈÓÓåLGùÐaà†ŒÅŠ @û‰?“0]'«’5,­#é#‡|J0æ(òÉ$ÇHƒQ¦ß«¹)¡Ù\z†é¢î!_÷�²(¾ÙŽå{>>pˆjI¼9Ð*ò8Äe«\›Y–ïÀge‘¹9±k_É0·«Ö¸g¬,1eÊže~'W夠Õ} {ƒíÞ,çЕs<¸ï![ƒ zLM3©ix ‡e6µ¯�Ó\•bÔ߬KÚú¹Eûë‰RËìò|Êñ…Nçg‰¿®™¨å@u¯èçÃìLÐáI“�agLÛM zŸå»‹DjÚ„Ö&�¾qgÄßíúMÐu«`åˆ_ÆË+B_ïÝü–¸wuñ!ÙÊ釖ú¸÷i½Ï¼…rim kgaª’rYOhÇAFÇíØ£ /LivL+’6¾¾¦ÂÏjªùùú4ùÏìÜÁƒÝ÷^žÕ;½W³)U4a°<¥åýŒíÖÇPêŽ:šÙ׋4ºkìøãçm&ŒwáÜÛœùã«gz¾â¯Î ð¬$4Õ„¬»ÔxÄ¥#ð†…”´»*<ÀËwpÕüh³D>Öyú­Û•:¬†é!é̼0¸½¾ôËq7y­ª«u÷¦„ëT$¡’brqod×?¿úB?-²O‘…Lõm[¸Á‹•Ûô�í¨w„ ùÄ›•äï¯DÙØ“Q™±D›µ\ÐD™sz…ùIëÞp\ªžÌƒ\a�_æ—ˆñ³hÌØ¥(õ¾ù×õûýU¨€'Bô—·Šô¦dC´»´z…&ÁýÁ…#öœÞä¢^j´m  Jÿw¾¹lIF“y'x‚zï?ñLÏ1ÊH`ˆîÿ.BrtwfÔP¢2P‘Šgbh›#Nt„Þ–§ÛK²'iáκÀ:zP$IIDø Š-±›Ödá%¢]¼ôhH±?£âñÛý%ú""}ÜG‰Ú³rK­)Œ²Ô¬ªï(ôUþ.ø7.—Ÿ}_SÉ–e‡ œá,ð,eƒ»öU£\ó²4³ ¹¬Ïä¿XûFñSb⋚b÷‹ÈáÙÙ±¯mt;œ–ƒ¨‘Z4U¢º?`°£ç•Iæ¦ýzšŠvˆÄ\sæ'ã½ÂÓú(‰¡QÚÙ [È…šU¸#ÀÞ¢#ÐÕØTN¢ø·…mÐ@9;4Tîß‘"}û±€¿ˆ+Ñ|9Rìʦ½©êVÙ-Nämì0ªØajÅç~lG.¿ Œ:Äï]n·Ý(kÑÅ ¹yÚ²TŒt°Ì}Ú m¬¾C©Dj0…!ì»bX)3<©¼ ¼d¼s@•8î<`<�¾Kâ:˜æ‘„ ÃÛ€ŠZõÍL>ìáàUöc#L†j ÙQ]ÌØá¹| ï¨ Bÿï}šÓéÖ·Üáiÿ¹cå–ñyñjWJ¢Ih�ö÷âç[Ïñ¢F£"T^d¸B52ò¾alÞH´n9Xò‰—¸‡5aò_?„¥ÜÓo¨¬EºWNáÛ§ŸÁúô4B¥jqË­ÅrEýøñ.0ÓëªÙ5 a"ÆìaV×i½ÁÙÈämøPÿ·¸ñ5h\CDºxYx¶»çÎKKfYÄÇéõ FÓâ¿qQÆ1‡û¹6‰¨¢�GÑÎÏc†iœü¢¦µ“E왬�’ÍüêY!Î÷­zÅt¦¶\°Á˜äò~=¼s¿Ò 5–{ÔC3éâ­Û+‚5þJJÏý‰ØøÝË›‰{•> œh v?ö”oJº"ï8ÙBá]7tІg4#ï¼”?E#a%�Þ—ž*"í—Ø[ÿx§º¶Â™6ðIUåñüÅ»j#Ê�Æ}¦ÓfB1Z”c-…U¡¼…£úaãî�Èj~]>(�5ÜUÓoû½UŸRß»Ò6éëݳ¢” ö²ðÎ\n;1+F˜6r¢†~þ»ÚþO²,L'&Òôдº+]_ÏOÍLJɻèRÒÆÚN.W±ÊŸ h[Kœ`0õ [;Äø˜—bÒìªÌê*>¶ÓLJÕí<5v·Ÿ0žÑÃydªfPׯ\e— ø'mŽ g |Vsq I_<'‰- åc\Ó|ÌÙœG�ƒEŸ½ðêiß-’A )æ•Ë:wŒ7¢ÕÞeç ±Á•ìÝ]„ ñ;KW›¥sêeßHA™ç~`«ãŒŒý¦õUX¹ÏÇÕ¼yµ�£TpHæ‡áÄ€kZlAÏIÀ“Ò‹„…Mub>$Œ±ÿÀ—§¬âi^°‹{ÓUH]¢î"«Æ®÷ð†qõO×àš!pg|ñ’]Ê[õ*ËŰWǨV^ Ÿ M&;arW«Ø|BÆäS³ïË™pT5ç~P37£uNUPC†®ÿ¬¾%’‘wÑé8kÈ%RàÆ´H›F¼�º.jˆÐçÚ2–QïÁ*χqO�¤Óêæ:ñ5ƒ”â@ÞW*¢ü >ÙˆöäZ°ÿ¸aE‹©Ö8ˆ Ëê,£2�O–ö¸Ñ6]xíÓA¯ßè[8l+¦ç‰7þ³õ™ŒŸÑÃyQéá{=Â_Ý3;æb|5…¸RÏòú˜ŸŠÞJ½-r�I …·‚5b:¹& œ:xE$Jè_â¾RQð\ÙØ!íT ’?¿˜©xß7'“AÉeê�mO@G Ñ“è & Ò—hÙkôÍ7 ‘l¿ Ž}�Tu:w)®bÞÃ&bn©î�êzÓ‡ðjà@8s2¼ä}Y%8E{¤ç9ƒæ @«tlë«4«o2&-Ç8½Üm»¥£Ã¡»«Ž‰A<¡ò&Ïôç‰Ä‡+äžè�‚üøþŠ�l!–5t¨.žuu%(�Í4g¢•æµáÏp×{Þ^= Ñ|”)éò¸T²Im…ª8vo2Æ~F5¨”!G^Tg$ž?$®‰a1•Saµy豎ö¬æpõKZkSŽŠè ,ÆÞýˆó=š3›‹F»�4V=mô‹µŽçó‡©óH™×.M~˹Šôþ#µº­®Ùåßwæ–…gÜÀœƒ0·*è„ùû«ˆ¡c©zßgô]™Í¹¯Þ P+b¿~y Íž.1T$­ – w•vnn)UüQ¢§Ò~�îçÑú“ñ›ÞIÔÉŒ^™Öä{”ƒ·©™Šm—O~4¯rGWÔÁÙ:tžÒë²fü§ïèOXMt®/ùÅ<ÓRKmVõÛ‹z;ø2-<;ˆ-DZ­pUq: õH¢³Ò�M=¬ºã,$ˆ%¤Ç­}iréÅU×Ð0*ºPãŽV‰¨ËžëñØ+Çv:‰U{ë„Ê " 8tš öom|%V„|×·º<¶>b¹©ïy>ßTѰ>îV•ÂßY×'òI·ÄR±ˆÿxû%/ÙC�šr+MCš� o= îŠv ßNMßg›ÈSÃýÄÍq�mu/@+E¿1oû³‡"FDè®Fêú°wcÝ |xI{á»=+}&̩֤3 @(‹I•UtxSLDɯƒ‰uÔ$T÷ß�oõ̺-(Ïyœ¥¹¨)´t:¾,U½‚*êŽ @�ò~ŇuyÛ“A±%Üñõx“ªÃd´T|*)MåšMD§tž¢Ãlx0•vœaùôú’r³÷zØÕO“çåµ8ÒRÏw„�Õ/-úp¯I)f ^РM<y®é¦ÆwÀ¬šp 6­h:ÓÓ.ÉØY½†k ’ïnšó,¢Ñ”�û‘—ŒKБ³M¨‰Lu43J(‘05ˆA��Þ:ÔŸv÷¥º};ý©¬ÏHÿý2Hc°%\"Û;«§­œÙ *Ænp¤²’™§¦þÙ'?YMÜ`çªÂÃÛÂ0s«ü¦m‘'=¡Â–øÝ�¹{Á•”mÀI"ïüü»ÏÂ�_Z‹§0$¤ ûqgkrŸö}rTBÛçèÉ#À9v$ðŸGÔå:Œœl§”BUˆsœ�klJ}W}Î9¨sÜz~âjtnquME;ð1ë×ðtKíñ(ÞF B�Qó¾ùì\‰åï8…öª`žw fJy r’‰*cÂgb& Á.ƒçCÈã¹Àé$Öº²IåÞËÊÓ�¡Fô(•sKh*’ö)C:ƒx1NwUïZüfjp.f¨¶ãò£U˜©n/nhL[(=ëœæE)¥3nì"kd´ç¸fS“8R>uö× v"áÊ(Ô7f~’wv…"1ø©“ÈW·MÚž/Déä¬éa|JzfØH!ÌÎ2©+6žòIÈÑ`(ÒÚã?ƒ�ÁʉŠç} ˜Gšè1`1ߺm'[%Œò~ªéhqèºÇþ ¹‰K‡u„=Ô·w¸3 /ÿƒœV›´0zì] ÍgrÊy zòc�îaUÑŽ|QM§(Í)#*Æœ ‡D€LͲDqÅC“¦i’=Ò4f¬N3¦ýùÛÏáyZÖ˜§iL.Œ¼©¯w9ü¼ÛžÄ‹±Ÿ˜;@¥?¯ý4N"Ÿiw62rçtÍ«_I™ÔI·ÏzJ�žu:NÆž‡¦]@û#Ãç ¯1ÆÄÒ^€ q.í¯ „›_o&ù^m¤)p9FÒ±êö¹»ÌŸ@ï¢n[(•8ŠuH~òJx+�÷2ïÁi¡h [#(<ækÛTP³•àÿñ+è�mKáN †€©ÈèSL!›µ3žD;w…Q'g„YsVoýGìÖ–YËÌ7ØÞš—K kûé*Ç’�ÕWwª~µ <ʦõî¡çןW Voº=D2[^[uD¢Ô}{ðFnk·O5UÐà3� êâ¬�÷DŠù*EòÞ¿Yl­ÑÃ5©lžÜH"œÕßÙÆ×­£ò˜É޼~g«|K²„Œ ÚËÓ‡Óÿæ1ôËëgKÓBiáË”V‚Ò>éÇÁ~~€œ¯¶2Žaÿ[„3ºÉÓZñž£ëón²ð„D²�@ÿiOšz�ë±p|ÓI�zJåš-ݶj�*W¨)~å WÜû»(þ4¬+kÓXÛx.žcz‡ìlø=Úâ¤{ªÚ^p°-Âw¾À8�T]KÆÑ�L¿÷‹bѵ_èš̤î‹‘Å`¿Ù»ñc’7~wÜ|2]î'k¸ë˜­•bº_²mT2;Œ¸ £½ÄÏÈòsÕÄ&°R–µ À”ë�CÔyñÆv¾=±pHWÔ¶^ûys~fz? G�ZüdyHKÇfþDs˜µä¢‚©/Œ{ê»k1ÿ=€,—NÁð€+[tu†�0ö²2²³LéOv\²šÂ˜\Å´«`›§V·¶! a ±Ùø]‹lÓÀ,A³»0o5:NYÒ Š¾Ú!Has¹AewÓ¦¾>é¿‚6.…&¤!é§ÖÆã¡¼zy@'•‘Y©-’kÞHí6”¦´OÎKþDÍ­BœI ¦N¨zÍ!Du/ t$û÷û©ÖÕ³çPÙERìq± x½­ÇZYÆX6H‘Û* T6\æ¤"¿îpÛyœÉFTºÂõh÷Ô?ˆ›’�}•³kùñ¥Ý�ü!�Šyˆ‡øu?è'¥[k b¢Én!¶â‚Ï„ß}íOñDwI»ö¹%^j´sÞŒ±€}‹ä¨ù ,þ™•æŸî-Úñ ‘ßè[„sßèÙîÏ_h<]ÿ(Á}Gæ«8´¯ Š}úô wqwI¯»Ò_×Ì8ªuhìl»jRh7mn§]¼8ÒÛñØ;šy_B�.Käg¡»“i_²“)›u¡8´„"O A>ÿÈÅ›"ÌÆŠ#»„‚ê]!�=(Û#Ç{ €ù²×(²…S•b'ñPÛ!ÊFͺ>°¿\/¡Š“êt"9‰©x¡gpww©‡¹‰¼�aRºã¯ö( Xo¼¾›x�8|×ÔtÁ­AŒKÉ›G@›fêþ^«‰g°Õ–|†$8.#Ë�Lý~ç‚ê`U|×@GcÂDäy:ƒûK�N»dºþz_YÁl¨[‘P2‹P†³§O>ÃfùÕ‡×÷ƒX-á]¡]-3ãÙ•ù ³ÄcOZ-òå¢jSÒá+1ÿ$bíªŽ »aóªüU•7÷ìEcR­oÎÕ!aË›"É×m¹žBèuùÉ-.¶Ö`ål£€v˜:ްÑ/›cüƒÜ°>óYV>8¿—f8à‰xí^ 5zÀbÀËRkv]}ë¿÷ˆ.¥±I(®tÿÙ¥H…¸S¢÷uO½T‹]ð…°Õkte"Ö¢R’/aúYØ[Åè5As»±Ò«U§ˆ7’äƒ$ÔÂð�’ï/ö–tüTc¹DrIa“¦”.<µ•%ê_ª0ëMn·B‰Áø¢N>ÂaItU-¥÷‡òäLó~fÌ|€±Œî]ÕÑ ²rãˆqáÃ3=°Í0ùÿìÞï§›?­-!E¥Ž2ù—•ª¬­ëbRsõ¯¾€+2•!Õ 3Þã“çCÛиMoÒ¼ðÆî|Jbœ‹F%hï}`*CÉ·WZgÊé­— Oûf{Ên@h@Qƒ[@XE°HûPó5�Íò.瘔is …)°¨ŽrÿõµÔb…©€ÿcƒö”Yð¶Q»_Ÿ)YêDü²Ý©�ƒ‰Ûä,ÿ6–Î0tÄÙSë[‰›3LO†ò ‹Øçw’noIª2+3‡Rš?Bo_“‘‹�3T5R¾¬hvgp5]¿_GDZ¹)ÿ®”Jˆ=èl¨vþç‡àÝñÈU{I€_¦ÉGÈ»7n3nä¥n*Uàkb32½PKÒáGå[¯Ò¨|Øáª2ñŽÆûãÖoù >¹Ù<>cZ�ü½MQÆù�Þ‹tĆ‚¯ç€î=bã^FLÑùl+ñiJ+ £æX¦è5|Tr÷$ÚÃOÌ5“ é%²µ“kv¤ �…aAcj�Ô›ÔÑ F:"ë‘HR7P�¦ {¾sù*ͼ‡ÒП¤Q{Ño÷ƒ[{yB¯¥ K°¶‡º3ä\Ú]ç:ñ•¯Ó&)nìç™"htyîqQO›Y©Æ�]æì¸—šm*Bpt�üdqdhiºNè ˜.4h—Þ}emÉ,­ïcÐ ÒÛV|åÁÁ;m*]O‡Búw÷¾ õpAÜ|¹M)’ýÍóçïÞâÿ½ {Ñ Üç:¸pîÁ¢I©¨ÌLÇè;·kUJ/ÃH£™·Š[úºßu‹rú‘˜‹ìý#™®¼î¡8�3XJŒ®ü®uv„kî-@ð§ÔB�#�úØ>kmeÓfb3«dh>çœ&¥y]ÙRøÀ6-ýKìf¬Q$F'E.l(÷YÒèoD+fUÚã“å=ïKýž.Ê Áøf¹ä8–¶¡k‡½:­‘ÙãOtÁ»øÔo.éPïÞÕ«Y”f<$Oi‡èOúlÍà¥Ô»ÎÆÈ>j!qå%vˆ~ÔaÌ1†ó«^A ÎÜu:Ì'PØn*«Bx<æNÍÀXH™d±“>ÿêöa�f‚àÈ›¥0Ƈ]Áì±ëÖýËW^nf”])3øhÏô ƒw>[b_ø¥™¬=ÃÃw‡P9Dñžàû„i+ƒšÆïêÞ³}!qH”�*–hþй¦ îúÔ8¼0;£À9£ í!ý"ÝbWîc§/þuStð…” š>òdr]W‚É×\ãsK´V†¡—ó &±Ín²Ѻœ^i („ÈyÍ›ªy6ÙÔëæŽ¶ dm@²à=+ùSnÎʯÒ(¸^;fìàù>úó˜ÞÛÃpbü¯Ô+ñ¼�Êf¶}�ɾ£CÔ9 ý%?aæà�)'/Ø{†cúë»ÝÙí&Ðw¤Ì�nµ-,‘WÂÂ�D·2äëÍDç.,‰ä kvÌŽ;>uxÈo¼çõóaýbÄÒîNB†˜øÞ±xÝA? ™ô:~„Ì�3¶ºMMññ.g*˜ eÔT�HjzôY’¨ØØyXÇ‹ÑÐäÅÓŒ)ɧLzY}®¨P_ÐîÐ3Ƙ•¾¡Ý·M–cYâ‡ÄeU+†¼!ߊ&ë»a)Ò¤ók®¢lº®g�I®ü^6 WYádj¢swW¯(sÕˆnñßæ38Ätø|@Oê| VJ‹s^›6£¾¬ä ¡wÕ¦ÙŒÌú¤1Â|�²ÈÖ<ÕÛxSUþBlIƒ.h�ÆQßR,>4í™›ùéiá‹‚¼%’Á±¹bº�0±)“ ÒGý÷îÁ 2¶¾*ú:‚^Ì}ž8ë/JÔξ{ƒ´í|7õ;XƒÆJæØvP£MR‘K¨èßPïØÄÕ’¤à §êèß ÊrÙOP<ò€Ú¦õƒéMSU^®�Ê) êÓ­Â5ìa´�cÆêÛ#ò~91úÙTÒꨊçœð¤Hú°½{¤óy¤ e©œùÁo''$@&Bxj…3ḣÊÓ³RÝ$â†ì¨Y ©Fâ�Zêª5pKÕ‰ ·%nHÚòç-­¢çØô¥óôÜ=|o^“òºÉMyõIL‰ÙÐCîÓ‚é²>cMvœ¢ R÷ Sªš�«a ìz)ö²é†ýM{ç†çþ&W ùJ(‘쟬ИŸÅ·bë‹�¾í“�*vtäÔÌ Š¼³šDH¬q]¤¥o¢M~IïÝ]ƒT-[}#t*³5uª°¯ÖT“'Ø�ÞÒT@§>!#HÚ W"-´ûΜåN×Õ”Oàÿòâl,õâ0YŒ&à7fraGÕ…®ÛYÈJš‡Ã¥ ­*Z¿š1?úµÏsÜYõ¨�—âšZëp°UòÃëc±rÑxëÌA.G·TšÅ÷Û) Oñ�°Þ¾@Ò•ói $oó�oYCN>7¶7=?n³I•Ù«£“…Ö[1áEžÆ¬éÈz ¢|ý™JÞw”ãÝKžŸ[ŒÏÛB§„�pl#J] )¼‹Á¡©:Ï PÀæWfƒ?½É×�þDW�Š}Kø%I-JéþÇ=ŒÝµÆ<µÂu9kg Ü9s}1ÚÈ…¢q'®`þK|'‡ŠX„-¨Ód¯ï¹‡$�®Ù±àSÒÞˆ›ŒuÓÂæ›ÈlÔø–\çp!“‰Ù‘Šd•úp•FOèÈ^IæÈÔ#¦äi»TK$Ûœé>ÀGŒnOc¢*~ ÝÊXc¯¼ºa'q‰dÑ-‰’¯¨/Þ5ÀžZy@èQu;Ö4”˜åv’嘇°5ú À‚-ÒèVƒFì0® ìqÖµ”ø^­ ­¸È± iÅ5�!ð*Ž×J»)�K7ÑåÒåÞIiùÿ<¨áø”+�•$@Q19 TÏyùRV؉ÜLƒ-|kÁ9ÛF®|3«A|p¶^·üñ’àú'A1\�å[§°u¶‚±f�A;“Á›x¿|¨©7…›ÑÁ�¢iL¬FD2¢vºgZH{E¸¯Ù%=óÍ'!º"ïxè{aË­†¾H¶ž5æOM�Áad¾.žèò(ÞpÍϬI+#ôt mª��.aÉNÝ6´ÄH_ä4¦Ð%è›ct{6쀄J·ËKC×îd’›)aLÕ&<�±óÔºŒ8å—%Á&Ã凸4bwJng7ã:ä†u]PÆ+Tðy—U*´ŒƒÍyƒ‚x¤Ñyü Ù?ýÚc3À„ü™vË4¤Ù^²”ߪ ð…2âZüç9°,DÒÞ⡞å£ÍÁrŸ Ð¼ÁoV:Gþ�lÊ˃«Q¦Í·_æÈàhÛŽö2´01Œ } %ð9RgË�W±þ–¸j�]æfñÑ©2kÞpskd£pì^š:ýbŒÁv® ¦Ì°ˆŸJësÑáðC—O›Äž,Чs1{I�uÆXaeõx@=ïfômééÈ_­øá£|í&ln>¶§Æ¾±XOï$](éŠøójçWrœöaÍ|þ:ÞCF‚óǺ;› #Ë@!¯ìÚï¹¾ž¾Tí¯‹?ÏŸYÊÅxW:<Æ3÷žÈ�…r6"}ýF” ]œCG׳þÇ{¦Î#=¬Ÿí¶?â}oÅ9ÖsÔêŸrœxE?ß>Õ’ç¼í‹I�#iÖ·MùÞ0ìXc¾ëÆÒEýQ)¨�òõMQ«ša•ƒC£´·4²ór}3�{d‘ÄiD«È®¢Ù@ùÿã%Òd€ã["¡RÏ uHbŒ“ ósY;Ø/³ÚH΢‘ =ù«š¿{Š…”OÆþ™õ£9óØý’øäÝàyÿ¹®„Ÿ©ro¾õÔþ2¢¡W*B¦pÅ…pçÓ¢*,ª©ƒ„˜Þƒ ‡’-ùÜÍ*ˆV³{ðlq ªñÍiÏãÑÖ\ÇÓÍæqd³‹­"Ë}]ÆàÎ÷V'> ¢�ÄæpÑIh ·¡X}ŽÙ£ìqÙDà{�Åsß¿Mø$óC{[�ãÏ/™Ï!ˆ/Ý)£{®ÑÐôb[º„}対�ÍV‰Ò”CQ'ï&™ÏÞc¸SdØ;6é%õ&¸È�©p3•¬¡y&3 [Të$…ÜÚáÏbKžwÙY„ØJ…‡ùê‘¡ ëY'ÏBó€~'’l€L"|ŠÇû…o¥•%Øbj7¦è½qýŠu[?XõZ2?¡R–"ÝU�Ê«ÕbLà&‡ò˜ˆÔit‹õö¶RcVXžæÀµ ÔP@e!™^¯ÚiܳÎa ? !c,s݆dU¹,Àб¤o`èÛw°¤ÈưÆ{pãM=Ò­Ò]—JQŒá~ÌG`ÔÐE�[m\½�Õ:¥ÛÙÞÓ¥=ô�Þ(ç¹çÁ»jÇ Sðš¬$Gž±}/·œ‚° Æ´¢Mhó­„ÇYGèÁ¾»aàa&Õ,à.ÒâxS!½7=ò<£”0†h½ãùõW»Á“”- öÆ—Ï»Ç?ìs‹Ž=^ ŒÜßm.ikX�C=¿Å÷ÂÓ5—Ë}wšÛa®±ëèßd™¿Dá� m• ­;C,¹4Ö^Šº/ä2ÌZ Bls¢�B]JÚÖ& ø‘p‚)¹èeoÆý�¾¡¨Ð�"g¦`Ÿ²íÏèÝ&(ª¾º�sœ¡çž–û¸æö(»_ê,!=á` M;–Œ2 þU©ó¦RÚÙBvû ÕVXâ£Á±î…&—âÊ¥)Ž�—`È1Ü‹X9@3WÜpü„9@­nV“ðtÔ僌Öç‘ÁÒ¯*tâûÞ!(õâ“^¦Î¬ G¥š1þo#hkXöÏçÎ�p««”_‹Ž¤®¦ÙT³˜îD»&«_yð¢lYÔh‡ÎÛá‹Æ|~²yå{”±ÍQúiKŽÔôÃól¾OY9GeCœîš ‚ÝëQ®/&9À8Ï϶¸È;æLI?TÆ%Rĸ‚èÌQ¦ÓOb?0d‰ Y܉]Ø$ÅŠãh¥XiZ^M <Âî †"ðsÍ Ñ�å¼�V½À|Z@ZèÔêŸßê’ýžÞg †…ÆLÊ+s¬‚´Æ™.sH'OfV;£�û†hMã°?;P}j-GÔȱv÷JÃ'S:èîÕ§`߯ËëX¢¯2Þ+ß½dÅ—à+ñž8ÄòxŽ©¹ð•�6MÎà“qâ˜È=U;ÌÁŸç )¢`ñ±ZÐᆻ�`7’žðéa•U4›N¶Œ•ƒ¬8[úç *ßû&­¨ÝF×ÇL‰‘±±Åæü´eîtÁÈúñùA–�ΈÎ醠�F�×H’Hð±ƒìøFï0Ì[�m �Ë;*@rÆÌzÕ%?O&„oû}qÖàz†öÀ¬‚»ám¹L‚¶qO­¼ä+¬#zKÖê7¼ƒE²]oNº$Ì™JkU‘‡ô�ÚÖºw^ìž 8eVË /·Ûê%Å7ÖÇL¢QÍeïäïÔøsu[¼ þÄÆÒe*%ûÉ‚¿YæÊ‚¿œj«UR/Y,Ýéc,¦cz�î&#gvt\_;%”Rãp]�ñ«*ñqøÔõÑNC8òdg®,êG6?„,nn6]  Õ²ЧU°HSØtÈ�šV Ï�)CÒ¥N:œØ_m¬´ã¡Ê¯¸§ùÑ•ZáȾ~�–ð‘s€i”«íëæGÜo¯¯[¹ü´v\Z(Æê¾‘ÍóEš°v¼0MÔ Laô‰)zÁ‹Þå7ãt™oqúš®Íú΃¯¨M¥Sè[FmÞÜNUôKûµÊx�;ã«ä�*NoÎú­­Ý'“÷…Sô˜¨FvyB“¡[l˜„ïÊ3iÊ(±èGS–ÚU’k–íy7f„°õ€Ì‰Ï£¹Ë6É®†©«²³ �änñLæ—¢bLCθÞ_¶[l ˜#E¶«�vƒù›Ûfå㆓Èß©bÀèʽK‘M�¡ô þÒæké…ø³³çu]{“èÇ.…9kç/UNÑDá÷mˆa¶ä]Œ›#”Û £è¹¶öNÉu|ܰ¥*:ψÑ8ÁæÅ#xé¶®q1Û¦Aë„:P¥£›=4NCDÓÚú¢ézÏ”ŸuIQ!xU‘Ff„ ú“­¹R¸HYgˆ%up$‚¦Në{ížñõolFS§ü—:‚s3êjWu÷7Ýëe„ÔÔîi2`SÂ: ˆN’UYxŸî='í¹�šÏ'¦SRH,F²`6‚*ŠßP×R¬óuò¢Ÿà<¼á*öYL°#Wë5ÿœþE‰¢Ë¡OòÌC¶W�Áç°N^»5/tø÷R¾Mg½Q`{�¬º4âÚ.Åqt+F:‘')V´;V~ïâª}ÀÜþ}L œ"âò¶^ää<ð f× Q§iK‡è‰ÄËzB±´Ý€¨­¹ÿ VoÕ’ íGU•QãE¶¬—üº¬ÓIYZm»iñÉÊöã" Ý'\ZH/�éc”º/÷ÝÉú� j0�"ÔÆ¨µŒ<Æwª·®ð^"~91SR˜JVÔ¡ï’מô×~5FöK }ùNÜï ˜Ú¸úABðð`¥²~``À<(KŸ_YY⋸( N*Ib\dA9ÁÛÞÝT59ÃfZì`(ŸìJˆ ½6›ÒÌÑ* sœE=°Þ�í=tΊŠå¼Ôl]=íÂÐØÒ:E…*º\‰-ßzÏL;·|Ðö­A'€—-˧<.Ò¥`\6kÓ—j‘"¡MËÂT•ñ– fzr™¨‘2t\úèmàú$ õqc®ˆ7•gËyâ5<˜ŠÀ„Æfñ^9é‘{Ê>ö¬{€Y^¨yŽB[RõƒœC�DJ¨¯ø.mŠöõ6y�5†ð6ÜhÁØ µTÊi³µéëôgE«÷ÒÙï6„sËʉcÙ&9I,*8zeÂr É?óB;nZòÄÎõÿdû”FŽ^�oÝëÃuíƒÿÃ&Í®žÙú'êÊ¥Ò'¶L²Š­CäŠR6 ½u!MðeD)ëhšo=lþ×Íhšc̺¹þzËŒ–Áܲ?w?’Xžz[…FByg¶Q�­ÛÃ$cï¡ÓdÖtÆ+~’AM…�’'w¾"7‘Õ`o3Ô/•MÚËxÂýé¥#Ýnxêi{�¨Üj÷|“Óg½/\!üïmîlG-å‚a§©×ÅÞ ê2à6VÙ¤Klx`³Š�cgQT>+,ª½ƒ·Ýä¯Úkø°œ4&ÄhÊ©Æ}³i>¦VBó*�ÔJî~¡wìÑß+‡Ëtþs$tü&Šo€1Vþ gÒñ‰³�/kW¿¶¼FD1¶¢xS{8yPË)ÃÚa8̧f(Á^jxØå�,X˸UXãØ§Ó°�Y³°uŸ PÜ”¢âbdµU#ˆ¬Ù)‘OäÊ—©YiUãë®B»ËªnZ„¿pä@Òä¬WþÀ¦æáHÊ•Zмú–<�÷s5¢üŽ•¥!+[$úÙsó(ºäC8ºiØ÷l:Éóuo*èýÜ®�¢³)4Ë­+1�b€ÀIô#IQw6:êC€ì°Ï=}[¡JÈì@Ž]ùÖÖfðꌸÆLchæ½,ètèP9í��’‰Çhyq‡!8M�?ê"×£2<¡ÌÃmɱŽA Aß]Ðó½=�ï1Fþ%qYúµÝQºT»Èòé§�àDæ«ò¸çò4׎ÂNX_“©/òpM}AÆ[>Id}u5+ë~_µ„”âÅïoÓˆÙä�Vé¡Ê»&�C°Å|Íü_{Úû{¥Œ¨È€º?&Zb¤~ån&@úp59ÄÛ|Gc°÷Ù¼ÌÊæ’Óþ¨lç�FÄÏý1M³ˆ«cÃ稼S¬Wá~BeXgâ�5OÆ×€d-êáOo´«F&™ƒÚ†Þó’4¥N\+bÃlêzÝÀJž“¼@GÊÒÐÍï·üŽÇþ¶Q!Ý[?»4³EwðÝÈb1+ÕL ÷2«Tx5X‹Äý£âaÝõÛEo; É;èÚ˜pºõ†�¬º˜m§Ù´ìonE:=?RYWOŠ,X�*KU8vfq¦ S´�ï¡òÕ0Ÿ}‚oy÷§)]N%vô\'0ØâÙ¶;r/ YWÁòÝÐóåÁ"îox©LÅ ‚}ôÎEâë_ëûV)‡D[åÝ% ¶�m±]4T³7¡wÝ>¥ØÔ^Gç6Ï+˜¾O0£Ì�žÍkã•ÕAµd­‹÷íêR(n‰Ë•„Jå¢}ÎÕ^!þ¼«ê“ˆßðˆS�g0öãTÙ76ÑGΞ]DÉ?ÍÆBi(=è^LS\)Ö&­&~[CŸJË“'dÛVC²¼Aß&Ñ–â¡kh=¡©©Ñý©þù´ƒÌœ*ÇéD×òé‚ÇÞºƒ:m¼^li#,OWêÃyÌ-fò£ì«–"_K$4›™!ÿ�¡õ/Œ«D9ܸºë‹Mu·�Þ$L›o1PÍAOWŪñ?ä>­èi´ÏÈ ½OÂ3‘�÷ǼJ-GŽtaÛ çdä•Që,öÕž”p\Nñ`)e¯þHЫ“ßRø(È�=·téŸÍÂ#$oæ•645aãÌu* %°#J‡æÑ¢”ËìúiJëôz\E ›Í»lÄr<6>c€)�0i*½·sºÁ—È•$m�êêy!æöEÐߤ‡r¬îéJ8›j·@FŒÖ诸�£¨”ð%B¼r8Ómø4=å„}�{ùCã½+ýȽÂóN��æCN’6“d‰['Xo� ?ƒž³q^[ü |QQWë–M¯è }ÑÞCÕš^†Ñ ®–è÷‰ÒßRà žs§Ø2öGå&Éb*$YâÑæ³_œÅÆHú…ë��+èíŨ£ùÀÂö82’|§ô!ÙÉ<`—ä»¶ÒWÂ�Fù ˜E2ïäõGpÆ&/غ1Ζ«>Ü:M.{ÂI½ñàŸÀ.¤h§EHâe -b ,Íb=ª,«Œ‘H[1úºèµJÔ�. »º›&™Eçc¼[/¤ZõQ�ñ¬D�á ÈCFØ&¾µ8·˜Ë“$ä~ã.CâP@æÕ¡PÜ>´ºb¦hÁk}häý89zN ‡r´ÐÊö'ñYDRÂÜf$"OÃÔ=évÃrÛ°÷J™ES¢°€-8–w´.�SΖÉuÂ(ÜëR×åÌ• çûzf+‘.Éy;ÉXf ÙŽ • ¼ �@Ê'r¢ƒ6UɺÂf<ò2tPì¹úÆ÷Ø“­ÎxL%òû;'ø Ã|G`pôK[AôºUgfçºOR‹¯[¬RÈ“1/b)‡çwHéÕhÕn,õ‹"`þ¿Ñ>.Á‰ÙxY+ŽÉ!< FÛnf` ¢¨¶|Òj¶�Ûa�ªïÅUí/|õ%÷t Ñ <ök¢à7u¨¿Lî/¸Ru„(k§£d° ½{Þ!b ,`Žòëß&÷fT»Å‚섪 1G¾°É–…ˆ¼Dc¬ŠÂÔ×è™y'@måïËŸøK}áR­ÿöû5Ë"f~toÊ]³hœ^} IýNú Mðë¼xVöaòÒü‹lL¬Ôz‘{ŒÑ‚y"¿[°—(í%vCÏàÖ•�Qê$büòÚ:S%ˆ+Ùv�&•¹ ~¦²_�à[RwWlÞdÏM½kŒõr=¦‘¦ûGüÚÀ‚seï> Á_IÅi^˜*ë1�²D¿ÓCŸì4š�¨½.òÈqQç™Rúœ|A1+à•hw‰]qNȧõÈ0],Ëm•Ã[¸}¢µW‘ò‹¨Šë”§¹å<ÒgiMøºª¹à:[@ ¾�–\,4Ä'—ºlÖÛ;ì>.Àè±Ò&XÓZ% ÔVÞ^Þ“¿Ó#7PXÄ×G8ƒ ñ*\,Ø£¼Ž\^¯F.Ù…kWbÈ99wã‘LÛ×|i†vWÙ©Ê ,"¾÷Z…kÄŒÀ„ò<Å·”+ÎQ�qä±ÕwùɆéÝibHJ¦€38®}…üb¥DªÉÎ3EÅ@g3Îx?bºÐ˜¤@Ø/Oåß§'b+¨Q_ªxwz'´£h,—.4V¶-A¾Â�vköåÊÀYRV…†¯�hÀ>G0•ˆßšŠNAý—@®` ŒPÚì‡_ bì>Ϧa8øöœ0uëM¿‡¢ÝÆ·j½˜µj<}´ñjÛ* Ë4à�‡@Fü©ït‰âfÞXýŽë&7ŸŠÿþ!Àk–Æy‚ÚYð�Tö®iw'¿,?€è4´”›yŽdÈE{I®1ˆ]¸Ð·*çýL>ÿBÙà\Nê’’¯'Á­H+QÐåégzÙË_7;¯yÔ˜¥’½A@‚QwTu‰»n£  :(%ÜL¦‘vWFÉd©utÜ_ÜøÛ±Pt�¢ÿ¢-;Ahþ‘jr–aÂ_%º„?l\#Ë!ms†™¯˜cX¶aÿ Ñu'ïÂaNü1zGVäéÏý’8`}£X›§¯ÅAŽ:žÁhÉÍ=ùª ïGùém€O\é~kQu¼Z/\gc©*öÀyc;˜ÈuîÕ<­Ûp 8™—»Z uaxÈp®-xý¥Ì;4VS  Þd'¨@ROg/¢ÿµaˆóø@ÚzûaX†c˜Aå÷-O\þSj¬AHMäÛÔ-Þ…ñ?—Ó[ Â_ÌN‚”Ö;¿ïôëÅÎi#­·#–W ƒ¥3«2dµ^¬a��ÍÝj-Vê­ª}‡c�¡¬ÞÂgíJ>�Gyé)�-Ó°<ôì ´ñ/=l]"AnÕƒ¸dAã¤c–£w°^J´` :^J‹Y’UÞziŠýŽÏ™ô'$ÁYªFÀf_iö©$Í“¹{jtÏÃþþËF�Ž­à÷½¤ŽÏ…'²^+‰9!Ù‚x¨€/Ä‚ì±}wÍü^~Dì¦ Ü�:g[m†fkœ„˜óÖ4ž— ÿ(Ëóå\͇újÿ¶ÓWB¤úwN·}oRH�mÄÀzcå�ðRÕ%‘ݱÌˤ`BüL(@%Ù¶�ãFÅmaÞGšÖ9Q0õ`·Pú·<ýöÿl¦'­]‡ç �+�IÔ6»ü!x.v€dxAwšÅÆ&0­‰ZQ_ÐÎ_¸DT}÷Ù·ùê�Ô,ÙU’QÙì˜Êv˜{„TœÚ Ÿå6zêrO‡ñ•Ìôn*}‡¼‘M› )‘~�¶ÃKPmi 9q•¶É©ž.Ûxÿ»ƒ†4�)ÐQ–ÉýѼ¼ƒKÜ!ñ l½�bBÃy1š}�úYɬ:“)iÓÍâô,ÿc„ÇqÔªÄóHЛޤë;À3“‡ï8ŒB@ŽW³)§þÅ�² RQñþëVìïdqÎo–LL ÞÕ»m+oq·á¤‚ê²V�į¶äÈež—3´\ÑÎEŠ‘ÏE%[®ô­eŒÖ^Lj·fzl×M bÏÊ7 ãd°T†¶¡å7Šû<þi\z>Ä÷˜}õPªµMGâ �k³·§(”�àG ÀëŠkñ‚FzÏã°_æd¿Y„È•Écî~ú ÞÐ)\ºTÝ­w¸øs v8£ùÔÒÿ¥X¢+†ÓèìÝîiâ€ëìNèîfŽ3ê— 9О샯à™`s(¶4΢‚oǘt‚y)'ÿ¥n]®_s^ÿzþ}Àx‘Ð9®Î¬?P Wžg:4|:ó Ǹ!=ßw@¤å(râ =÷nåðõK. «ÎLxÓA/ƒ é0²°ú^a€öj˜Tsâ,üÉxº?QllÓýäR—‡y(FÅD¾kñ{ 8ŸüP¡\ý�¼â¯É8ŠF¥Ä–¬ÇÒ„T;kv–*ÅFç§Ä9H“ˆ°läƒ_É€5ÈÈ›�OÁ*÷àjjªŒZ,Ÿ ÷_mœU#<ÇkîYQú^õ 4ßôFX‘CÔ>â8·ç5‡mM´{€^/`w�‘=h¾æBHqF­¿ Á÷«ó>ìv_V'@ÎwJÔlugÍͤk %Cø?`ÖuE2üïúiô_¤käÿ-Ke‡'8Úa•!ñÇ0ú)©bÑY?A[ÂFcm*ö¹u¢Ëõ¨>G{£Rz¶�ÍPS–CÔKi�w.…F¦×žü8“n$3høÊ“jk“Þr”“íÆÿîœÛ…‘Ýü¿¨É11V[ì~ê 9€[CJÕ�¤â—ÃϪeƒ¯¹£ ëŸvWåN¤g7¦;�¤•MA~Œæ5¯ŒÈÑÛS—d†ƒ²‰À½ ¸ºAöóùd·èœü«i�àüê8µAÃxÏTt ðfkè“tý/탂Íö±"‡.j5ñ#y±=@ª¡ÝaE½ž¾Èñw¨!™Ð§Ñ>ÂÿR> H Á/ä~1Txžþ6<1‘>"ÓÚ® `4°ý?éÈ_¶ˆ#¹ùDºËÝb7æüœàNzê,~J‚O€Tþ@'™ìœš¯[¾—™½8~ˆÖ·„{°¢œ¸ªUX¥åþL¾££Á)Ä€úg‹´kc"E<8ðÑW"“Û?X2ªmž™r&ȃÜ|™Oôo�5S0Zì¹ °Ð¼ôk”“æçŸkµt& ‚YVÛ‹â‘ó¦i6ŒceQ/2ú‘Wþ}Äi:]|�:ØeÄ�°~�7l³€ Æu‰æte&mØD6–nC ä´½Ù±ÜË^qaÈ[ÿ"yL—®¤ d"8ØA…�X°•N²;—ëÍ~ÅNo‚g‘ÒÙ:=Èв“Š�Òð Ìjò»d+/SÀÈ—š nG°£M¿qÜFéOJLÈMl3=àYGñ¿êÛÅ–*rŽŒ�¯Z¢ S€áôà¸ÄПN™B {³w0[:ªSQZPy’غ Kß´Cm-O4¶5S³¡ u†>{P‘ ‡K¡CtnçAñk†{¡{I|çʈ‹¨qxSbo�þ;7|Ë„—Âõ…øT¬}T£hÊâ�!³AÑÛi@ÿÆ 3JøÍµ/ëÚÙç5ä�J[( ЩéEq¯* «ŽG†çý g|Ϋ,€Ô—ÖÕ³&Ü3…UìcÆ{c–´¾=百ÞO€åÏ£�Ñ 4z3½^`úKk·»ó]¸ Axì'ï NA¸*<�/äÚC•x<µz=ç•&ÂxD /?ôI]â·kÂ8±Å¬’@õ¬¦èÜW mëÈ3i-Jâו#.’_´ìš%ŽhF¿{î¿�2;Tœ­XÛqçBú.{ ÝÿZÈ!S„Ö9Â/ˆ²v妞›%ç$8 ç"í¥‡Väú‘„ÙÃ$ÒÛ²7?kZæHhüjîÙ¯•ì�*îþJ‘£ ð\¤·œÌ,ØD üJ'5˜©z‚q×E1ù¿ƒ$0¸ž‰–±£äYxL‚xJ^k7¡‚ l�mÈoÁ——yý•¤™<ìâ%é2ö/í@_oÇü]ß…„¢M¼¼ã¦½\fGˆ§X´ª9 IâGG5á÷FÇ“CƒIx¸š[1²Ÿô¥Ò°—S cH`ŸnG¨Ìgïl�GëøçuY›X˜&�ŸŽí1¶ßd:TƒaÔ*Üð¥ùFêÇÈi–¹\YºÓå—Ù½GåÓ³sn;XQ ��Áq�e@ÕßsЛS>ªD?¡JìK™5þ/s¥øjCÝV÷'_§w!�§ö3ô){±°R Yå8ìÊ»9ö!¯šqÎu« (oû{�šäUË™>úB©‡q¬kmØolª1›åÔ420qþ² ¨¼ÚVÉ GYm½Uyàò$Ð’Zör}Ø2ne£#T£Åºkk<‘£ÐFÞpìÅÛeqËð¯�S·ŸõD ÆùŒr«Ÿ„óÇ«!g¢è5z~çç[;›¦ýtò¢kxf´<]%Ú©ÿ`Ö9ÞŽdY±Jß©úHYéžg>…È•Î&Ómñú–&fM˜C|„åŽ=çèÚ(ÒÑJ †<÷>sRSf5œ:áÒ;Ä'“{woyXì߃†<7‚®1!lB,Z°Ë ;ˆLÇ_Kÿá¬Jó6¾öyç2œ§p\Ö,PÓšOýF…(˜ÏÛ}gW(‰Bh†b¥S4Ù^D«­:>8Ki“ë€ßƒÛO—øÕ&ëb0ÞPýÀqQr:5ÑZ[ø(ú;¢ã£•GjÛ®=�—³—"¬Ùþ]³t=sóšÙÅÂábÈ–@Yc_ºˆV/xé—š‰Ga½KÍkQrmÆL¡Ùº ;²6`�iåªWb¾Hõúˆ§ç;/tÙ¢o5ùaå)Ó‘ñÓlöžWj>è3É¿'}›3 J>0f²- N¾…b¯#Kœß#\ÉËK˜ßyÉïÂ`8¨¼*@¥ÃñLëšTˆ8Þ»‚Àzù±œñ�‘$º2¶'.â/¨û£õ‹žgòB¹/q= Lyçå‘&ùcY=€-kÏ—wÒÓèo^9/¶à4>›ÍÚ lT${Ñ‹zO‹Å”a¤×‚Auq~ZÖáÃ�¤È‚³È{ Õ _žø3¤±µVZ¿ï6÷~Iød{âQsÙÀ Næ»@�O%ÊŽÕ š>cXQá¹O ïuœmƒ¹ ÀBÔíˤžô÷ `ãï„r0+Xí¸Um˜® •±8­kšT#OãŠúR]O‰xFˆíowÕé[{ú£5—íDO)¦È<3`áNÍ^�(â8$µœb7]g×}¹,»Cö.ÉΩ -3ŸõÈmÒ4–÷s›}SäëxÁ©\þõÖ2S‚†oΖŽbŒÜŽäUšœ=Øöóy_«49{S$U×¹µº%„b²úêº*š¦­ºÑöÔ`�ø U�–_†ßjøÒ ¶+Ø1Ô"€wµëËØ�¢¬ÿÓeÉkÿ¯SQ—ZÇ¥%Â뢌j»š;ófeƒL½=ê g&.wWl9Â87F3êÅí µ¸è& ÷…–•`§•dA1«»¦¾Ýƒ[«o». £Nútù=úÆ8'/ƒc´6ŰñÍ›æ? ÎUî‰ó/@žðEá`_a´wOž»óó–ÿ�›*ŒÌýLúáhî«}j–}?ºº�hý{l¡I00æezî¿ërW=p°-¢ô˜'nŠŠ[ñwQ×–z;Vzæ·¡y5q¬ñÔ ½^¤F͈|f’ÔQ†9N Å3ÁG„�Eøñ)¹H3¨¹q¯�û¥ªyw8Áw;šÒ´+Ä1ÆÒDem¿35´ÏÓÇzPßÈLªý2ªqc0öˆøµ85™D–. T»z•mÊ}Œ#R1X —Ìžz Ó ¦$€ckY\ÍJªŠÀÐÀ^r�~Ø~¤„¥–¦¦-n‚R0SÙˆ˜Õ©)$(¹6‚„íÍç¶’o¨nHb€mƒÚa±^§ÒÁÎáMg¼¸À?W[Ë0q;˜‰HzÎ ¯'.«5¾"ðZ�kU ªt×= ðíËÆK¨öLÜkZ6T…aÎ}kómÓëWRËBÇ$rå(>ÀAã–3<�H ‚ò¿êÒtáý»Ò+¬Díj¦?éü«q mÀ�{h#�ßm�%FŒDú­Ü/IA{Ý_ðøûä°¬6�p³îÀEIÜÖ ·²0s9sŒEo~¨bLL4}kìG-¨>Î"¹1·óUŽØ§Eû#¢g’4e8½ý–ú›žÎuç˜kÿIÞó¤;}‡]½Ñ_²a&TŸ´Ú” ÍíѺ´µü¦¶Â¼pÞ]ª/÷QGȲ>éÑ^ÃÚýj•Ãôe$Í’=~eO€/ƒ�ô’sà é¡|¢0«„ݾÚɉ+]ãwyb¢ ¾(æ6‹ ççÚt.Âv1E„ñü@˜{oñµÿ qÉ=wç l]¡°kr fßøË:ÿ’¦>G¡ :d3¿ÀçpGE<$ÒA²ÛÂPª˜ÓЧîû�¢ÅñTžs¹q޵3½3D?îÖƒ:¡àg“ëKI+ò œòçnå ]—“è‚eàL¤P$Þè‹¿áÊû^f†�qÖX`&†Õ¶ð9°Ÿ”µu�éÉ�?(çs ±ÐæSpÏa½#%°¡­ä•Í@:Žs]3‹:ÃjÏ)l‡€Ê‘:‚å.XÌ&¿ú´ˆ&�KÑÌ@mt&R:GÕêshx¸|N€øöÙ¨ÔêžG(èþ~—ÄßùO»\ø?e¦ñ•.´ l‘¶eÒ ¢¤%K€Áq4Ò0Œß¼;ó.»½lZKcð!@®©?Ï”ñÙ¤ÑY…–ÆØM_øÀ‚$ ÒˆUÓ/%ÍœB�‡!.w]%Ñ]úN"µ ËOÈ,K¸HÐ~Þ ˜?dÊáé'E½™0‘¯Eäj™•ú[z锥» ×-€Âÿ iæ›pJ%rzþÞâÝX‰¯Jê ¨œ¸!'*€ŠÞ�£¦·+‘ÜŸ©™é‰k¦D9Ó¦ÄÚ¼f‰©•¢Ú»©×ëx¶®7¥õ9êïuÔ²ê?¿�]Ы))'Ø“Ö {C¶°fáækÃݨ(Q;âÊì×ÔXÁð"¼:šûƒ¤AV%'€«¹TÌ�–€2.«rá% v äàœ,cÏîì5[� Œj©Á�wõ2OÚ‘—l«¸Ò٬ɹëåT¦ÆŸ�ˈh[“!0›ú¢hØ;F/À½»»�·±+±íÓº1|ë-ùÿX1òB¸óÛ $ÐÒ-¡±±¿m„ü2–ë‚Üã –bàýlFÞ'ú˜Òn¡Ö/?¦ É!ËM>M§@7]"o˜‰M™0¹àTL¦«[‡Ð‚NJN�RmEöAåÒEè ì•é›nGËáÓ�ˆ¿_çÝŠk¥hàM¿¥¤1÷Nå/„÷g2™¼© ÄÈÔ`#ý¿#νceW*ÛópòÀ—xˆ <äà‹ÈëO™Z Î9¸ [MpÝÞèßÎê5*2è‡B¢Ñœ“ªìlã‘:Z@jE\J༂}ê¸@QW±û® ê�ùf�È�5"|,ÔfÊ9½lÝ Ç… U<|÷,)ÛüLIÒ½±”G·(Ë\Pªîslà°Ž<Óí)w¼Út¿­àã†?“ƒœk9ί¶ý©ÁÊ/´‰’º‘}[]ˆk‰cbî™Æ˜SfGU]Žé¦`Heqrx”sYÎÜgù-Ô„®f4;Áu㻑ĦH[ ŽpGnM…C¨òl¼ pƶ«œL.ÂI\J’æøŸ®ëµíï í£ËNÔo‹Œ¦( Í'�2¿·•J-1MéýF •}KR‹o ±Úpq'ÇÎ<…<˜çèÌ‘µ1‹ŒÁËŸ9­¥·Ïyip®ÿ’kÕv³mÕo\{?OâL�ú¾æîÇ™�–(7Ê@íºS·5¸ˆzɄƎ=¢‰‚Ö+ÀG¬ “žßŽ&–Ÿ§¬(¦ÿ(Åz"%ñwñÐ)%õúµ[ #×.x+p]ÿd)IûáÞúaF¿éƒ6Ù×H†üÂ5©°Í¡P�•Êñ»©ö§%+£�ݲ¾S_/–N¾SÜ}@‡ë1 »ÞŠÿˆL��ŸÇÙóui#Ãå0Æu2¿Ç<‹r§—E7qñ ÌŸ•o#ÿ#�ZÔ”çÙ¤?µi2IgžVŒº.¤9�«©Y�/ð þµ1 (?©iÇC;Ëö3JYÖÞÛ#¶ÖRæ}1AAl¢u”ÐŒ•#ƒÇøî{QÇýoc ª¿‰2Uf8r ²Z¾i‘kt°³8¬FÖ8„!†» ìßGH³›¾vÓÂñÁ`4 þ¯š>=/¼�7<Õ}«q9ƒ£ŠSI_è¡à¦$È!~’@ ø}Fr�Ę�M-ÝzNP+Ð` ˜mBy‚ËYbJZ�/™Gè“Iùûì')%ïX¥}«ùLi¦t¾ŸG�H"W˜�CŸØ“Q —Ž,xÆL€î·;�yþ7Ñi&G§¸û+U•º kEÚL�É:ý� ½(¶…âåÓŒzï|¶ØœW1Ç>µ]ÞMd°|PA½¹{«€îÁø¾º„õ “*Vy±ÌdÇÃé›L™µ¹œˆ»ø6øì¥£*‘ÍÓAá?€9_ÍØ<”sÝö%Lb?Ñ3Q*DÈÔ° àžäT¼HÚõ[�pùû¿�¯ü<2‰çk€ã¸šϰ×r3¤®´×ú÷¶f.+’ÐŽ‰ðæ+‹l—ª+;^¤1§›±Z“ÿãx/ õŽËrbrKÉ©¥x³¼�µËD±½Y-CK»6iuhê ƒÝ×áØ?®/ÞÏõ¯Í”Vû èzH.´ Œ°µà÷8šü*º4†:€^¿ì¢I·:j ¹çœíf€Âôâ-F㺼Dæ:Ý'8ì,rº- ÷ÆræËtò¨¬âab ©WUÖ”¸Qfûnr:” Ô�Õ â©þøTÍb8j 2>n‡cv¡š1bgá°ÁE/m‹ nÒf¦ñöü¹È®òÔƒrQ»æs£Þò1 mÖ‰40�ÍÎ|$T4›ÐB¦|BÆßñ¼Xm®’º]b¦—á±ó=É|^ã&d,'‘nrDÅ'}·¹À>&Ê´hNÒaæÊF¡ ×(¿ž15ëçB.4Ê¢cyÀ8S•Ê4à jdÈs²ÂÙ6 ƒ§6G�ònˆ§ñ~øD0�âoQÅõ+?ÅÊ[FåT[™ð½—‹äl3À¶›€hÕÓç;ŸZ‚«Ì‚ï¤BÈŠ3æÂNŽl„/ͳïRkðnøÒ@÷°ÿƒãH7l#Põ"·‘˜¼ÿê”g€íô}ÂQ¸öƒtaÝTÈ"¡ÜôàƒwK&ùçhåØá„{ àÜzK°=D`õ¸8ß¡©¦FýF åJý4ŒÐŠÔàðg¹ÿ=Qyº–ÔÄ+c³@<ø—É2ûP(Ž3– ¥'vw 5¦¡“ú!£Ü%ÞäÍ“àÆÀCÄ|ëa9›Â‘K±zú­J M 熣¨¾cà…›Ðû ?³ä:úüÝãBÊ% |h1¡ßu9šQNó�Úå­hõæMRŠï¤I[§‹¦Î�«€¿7oçË¿†ãr+|Uäyoóšêjd-ê·Ö¶ÑÜΙý€Il'2…r¼/–,P–ãÙ$wK ×C#èÖ}’®%–تhÕp"ojó«ŸåIŠûýoÒ¼ùGâ.§�,�W†Ž*«a£ÁÐìg&“K5â踟G‚ØóJ]ÈÎÜííÚˆ±ûx»ò#¦$á§hÅÓ ì\×}|[ëöi/¸£Z¾5¡˜­°U\OmæPÚö#÷Û�X9è„íL¥–ïâ猜y–zEµty rטP,°7ÉËÿèoÓV)ûUD8�EÐHj=ˆ¼›÷œ/X ½¿}T¸íŸ‚éëQ±}o(OcÊo�x1±hA²PÍ…W×-׿ƒ¿.CDÂ6£þNþÕ÷ –�_ãÇJ73¤…ÆgÎ -Zü7| ¨àSÔ‡ð­#o�:X:«µ›0‘©:ñ$çqبZ.ÓeJ Se!1ê¾Ñ û94o¬`zMO›xŠ2û.Ë?Ž˜ÇD‰}p�öx?Ù™i›†j øË5ô=)ãWDï5³èÇÙÑ�kC$`„�SÇIï�:Sþ¢uI»v¿ñ)ÎÃöÇòÉ^NÅ•’=…�ZàÑîâWß.z‡ÐZQcßË»°§]%9ÂŽ6ZœÕn¡É–Ѓ 廿�nüÞ¬ã$ßžw1½í’tu¿4)—m™Q¡+Üi Ê ¢ÜO—wñC‹›ž²'Šï ÔOHYÿéOŸ·G¼cóû]§Ís95)ñwKôq5NýoH‰¯DXEÇLµi,Íœ¡¨u P »@ÇÛŽW(Ð:ylo—ÁÅØ QÔïܩؘGñ]Ш-¸p’èŽöÙ%v”§g�_LþýßiÅÐÈ¿ÄÔU¤j£– Ó'„PA¨%7D›i•yè_;sª^S`) £ÚsË<㎥áCëb’V±ÍÄu!&`É7óöñɇBå÷;û�$0£|…WÞÝœ´••ž»äÆÔƨæ¿&ûŒO&<­ã…%û¼âkfD™uð_lÜíç(2MÃÔ]ÇXy!md¯pn7¦3½b¬%”Ô÷._·àÛtQ#l"Lœ¶AwØ%׿á‰ùlxbÂXùP^群6ý¯Žß EaüÞlÍnþes£9ƒ ýc¢Æ‹Üad›¥éÇy�–LÆÃ½~Ÿ°ŒÔ{¼lK-r f¢rT'P¸ë‚†",8ÒÄŽbëÙ{&�ªÿEÎFr(z¼ €n�XXÁÔꋾµI²Ñð$V§ :‘f!vŒ¡D:»™±]n´®ïtÁ·EŽñj‘t“àOŽo�˜~JIéÌ•ß[ }mËu3¡-¸=Á¤ëâ¶ý’�÷å˜;µ�qw‘¡}cò¼@!´ª$s É´Ù´lÜ+;:X 3ùJxPÙݪ‡ãÞøB³©¹ %PËù¿afÁƒhóŸ�êfÎ]¯dð8¾ì&0ÖÄ�HÓÍ0IÈîÞtøíŒ³R~ðìò­Xÿ¦;[æp4±’z3c¨0g™.›¨xa�(ñA7a-l=Cœ`ç¤ê -=eE�L‹dãlù¤Ãy›kÙ†¢‘>’Œ ˆxª… FviÚÒÈ�ɹRâ@×o f¹Û^P]Ú" ‡.+{I´làrqV}Q}‰S¥¤q¬C Çõ:‘Þ?$Xà#]Ýœ��žz¸¡¬ÊV.i; RcB%4½sö²Ø …XjqÃâ‰Ç ŠXk�jŸq�G OÏT�X­û¾CÒ‘ zÎÕ,3z–…µß ?G”`ž�B÷÷ ÜBäy*Y�1°t a•q(¤Vb–ƒxùÇп ÔqRï�ÜÞ¾ô¼nØlÍÄäë)^ÇçcŒ],÷"â¢sš”/lJâÌ€‰î¤ðg§^Ùt4¾h˜h§s¥Òt�@!G�ËÕ×Ô ¼²]a»åçœSÀ ˜l¾Ð3Vr¢¥ Û fÙÖãºë[«}³µ MqW!äºöæÀÁ¯¨=ξ*ÉË©”UßGWyÇ #�34‚7ELœ¬äŠÊ ‡«<ñœxj\°û^¦ áýshN©$‰ÃB㲋FÓåøÍJò7pP*Ýßsa/Ó‰–Õ‚ÐÚ+ˆC¡@ÇCòSûíp7ªˆýðmÒ °Ë3Ŧ§ò’òKpæî×üÒ�Z{#\UÄvâJO²Ž�çZh,ýH±ì$`ŒÿKÇć÷Õï5¢~ ÍZÏè;¨+N'ÖARL`´ ÔŒ`.{ÛUh¿Äë÷�ØÇÌ,È£.> Zt@³/jb�ÃÂÄ3y³ŒNzÇi€pô�Uzôâ!ðÆÚJ¿¶-J¥Ëæ.%"ÈäÕÿ £U× Í™ãƒ‘ ®F¸OÚ9[‰AžÎ@¦ yP­Xíä&Å?Ów3­_Êô²Zi}�(•N‰“´ï#]+¤½§Gi2¤…Ú”á$ÚLt,³Af˜J…yJeØUÒS*Tô‘êüÐ9ÄU,Ôl°°‘ÃæŠo�{Ðø7/ºÝ1Þ*•Ã6ŸFøÁ¸÷ß*^)ƒ*^Õ"[@¥~âµ=GÄvúIŒ}O^*†9ª\ k9Ë»vkeûõ‘ût�žáÁ¬a˜­�yšÞó+•y¦�´yÉ„“KÁ®ûXTžî†i0œGª�gSáûét”¶­E6Ãú˴έ›Ê'™êöÅÇi’‹)-•ã@ 2› D6 �³Op´ˆ¾°ÉhwGí ƒ¦Ý¨½–[Œ„ñ0P¤Tq „ØŒU¥õ®hÐÏÐG%Ä­±šWФZqôœ€Ý~¸ksbzG§)…H<¦ê‘Á<_:ùDÿÐàÊ HÂÿÜ6™ôn㡉�io¼ô]©Cu`f]ȬbóÏn•"±^éKŒÍ³yß~ž.Ì—UOÛWEÆ)�êtÙsðÄXéI@¾O^†ô014ûhØ*Ýê¦òÕö6’ë²2[ŒQ ”Z1¡[Õè h˜)´iNÇÕ“žž�FˆHÖ–'•˜ë@-Ý÷5qwîƒ×ÜÁwaË60@Z/]·³ZwB~!KY�ýýújŪj&fs<°*7HˆEw¤nÀ�Í`< ÿîžÉÙêó¸]`(ϸ·}�§/yç<¿x8 f1K­óÝþ"¸Ç‡ ·i?ãÞŽf9�kvúNª¦÷™ ÄJ-ÌüYÕŠ;’ Á)á�YT�À�\7¾Ú¨J†â[–ùéÁ.Ÿ5œXõ¦|‘}ÓÒ¶¤Ìú-¨¢é'Ãâû¾PMä/¼îË•ó…‚á^ӈ㣟š�Ew2úyRBt,EJ KæG„@BdÍÚÁR­ 3=˜ú³—:}ÙSR¿¾ #ßþnÃJÒÊŽ€©æàd:ÅâÅ�?§|D2J/2�K¸×hþ¯²M8§–’ÄhVZC˜Æìv4�}€ÚÜýøëü ·wvÏ£Zü@BÑwûICÏ€]ÙÅТ3X¥ñº6®GSû®¯>^;1� 1ÙG5Wø‚mØe$ÁÍì âáY²£² &-kN$ù7§q[�@Ø�†í|Z¸ëÉsÍ�òš^ö皬2{8mΠ”l{Qy–oÌ2DZÐß#Tj‘Ð�ììdæYbt„Që®/¡ã"´5´×Ù±·«à{Ä×ÄÈ"ñn¬²é9�à–�ˆlqF›D£2šè5-­v%» (À#ágjŒÉªKrô„ë�C11éî[©<Üöª(œ:)¼1ctŠÜ#‹¼{EÀ}¶–HKð±ÁßÙéð?_ ƒâR^ñ@˜ìe꿚Éñ ôƒ o Ì'©…%»úJ´ã�ÈÑH¿S�¨ËÝhu.÷(½9Û]ËË‚óZè£M þÚ?d^ÆKÆÓíÎÆ½ Ã×…ï5Á7áiR*”Æpí OQ³Ÿ-l¿pÉ�K"ï‹^åÃì?äGÖ q2)ÑÅÀ(_€7|ÒMÕƒ'f×€á†ÎÒ¦1?- ¤‹³ñ*‡-Ô´Ìö|Íâ ƒßjgþ\9Ÿfzn™hèõƒWÕcÖ""²³{½,Œ�£.£9rïCÓü‰SaV‚u‡Ð¹ƒ¹¡:‡\ɇ³K�0f§Ÿ��Û[öÕ„z~~…ðÑ�Ã"7r‚L‰,´bLF|†/Ñ6ÜÈ»™>÷aMíTÆHUF/”à„ø±‡þEøÏè2‚ëËրބâH+ôë÷éÿIàE+ÿï0d½Ö?�K:¥�¹ˆeEß,ïâ#†a9ó³ [“J Ï;Êû$)w•A½}æþI¥�Xky[Ýå ë<¨‚Â>¾&üǘ(•‚ ´Øºk¤õ´8–S›û N˜®;r0›˜Ÿ«ùò4+ÉÝÌÅ’¢¡ô¦Ã¡§ó§t̽ЫéÀ±Ò>Ô*‰­/±ËJ3NbâË‚K'¥ÜÀ´¿Ž/šŠ^û-³ÈzŽP=:¾c?xgÕ:ÄáIP|¢%gA3_Ŧ4Ÿ�Îù”:bF±ñi�Í|ƒù“y™¸$W¤¨rWÖa¼Y­cBŒ- áˆ/Úâ3”QC,ð?°VÅ™>Å'$p›[ÓlJÆæXŠ"zO}ÁÌÉjÞµj�æøOYŠæø>4ÄÉé$¢Ê�§)9¥“*ÇÆ ½¶·Örj5¤diàË™¼ëÅ..~j#ž <á'­{ê¿0z ¸òðþL ýÀ–ÚÊ�ÑU 0 ªr‚{CÊ�øïê(ga?‘¿ä]ŸËq`Aáöc'ôáÂnˆF�Æ·6GèóêÿÒ„ŒŽ,’‰wCWEF©·­JV„Ê;Æ(/B�½†>`êæg ÒM‹»U³P¿”MÏ»v›ÉÔsàñ½ó�¨G¬š~EdþÆæ˜0>½»w2vás§,çìWAÂ,gý�„h¤²ÃÖ—ŽqšÇä«V€iÓ¸±KÈè§[°«'d|€ a°®:ø$¦#e@øãzHés�¼+Ól±Bî¦ÐŒÔÓ0ÈÆµ„“îÚ>À-ô¾¾9#šÛGAã™âiv­/ÂóBÚãE~b{ÁH¿>ANÓ3c‚²ÅRy¶wqkãgûq2š¿d@+isýš"דE•½™6¯ð©%oJš`løË•¿û(‰•êI¦u†i4ÚTâE·¼‚:ÈD ­-î3:kgDÉоðLCòã6»ÎMïU%jL@}T¿€ûØœAèÖ=óï ÙAs6ÉšƒÀµ’d˜&/AH•f¦Ìމ*®,¡ç�]uÓU¸–çm6°lï§ �˜¤¶àVz':çü%ʆRŽ )RåÙľí‰}ê´b<ÿ{æ¬ÉöêÉ '|Ú•AÌZÈz ¯ß¥�ƒÓÂ+ã«c1ðsRÈþ@GjÖç… îöCù(ÝÔĨÜQ4yTÈ¥’éí9M¼;"ŽÄÊAÌä;üÇ9ù•@æN¶z²Â†“îñpÅn}ÁاœÍz¬.õnc<Ö"Y®î%¬çÍ‹NC©£1a= rsÀæI*;�G?Û¬'s…©¸Œª‘T>nRïZç6€ˆ¿)tþÄ^ÖüøÔ ˆ±fšïkÌÔÒØxß÷i»Æ%mã—¡ G]îIÖo<âm&’Ý"ªüu�Ï5_Ÿï;g÷X¡u½•¼¹ñanaà„†yôŸ´{”³’/Î㘻¯S�ÓkÜ2CK’»¨˺o!ÜÄ%¼‰RÊ…Ã×ö[2úD^=ã«-*;bC2ÓN¯GJ‡fæ<Ý£Uÿ-wízÉ·áÿ…¿h7*ëEîýϯ44:°èß@u+ùJ˜�ª¯lp®�ì)=èxXÎÆï–‹2»Âá{uV¾€ŽaµÏt¡Ä¾�gQb†¯þ4ŸÑÑÊ‘t†i.Ž÷Ã.·Úzèæ¸ýN�B´„ï o,?'Dó&`_OÕ]äælzÉÓ9éí¡|ê×BKû"¶�nJè8r#4DP�6µ±¨öì`X>Œ=í#pSò¾»m›_ʦíäÁÍAÖMMe{ï:ýA©ä'w/áj×Cqº@Ê÷ ÑàÑ´ª€•+ºtÂnÏŸ+Oá ì#�ñ›gØ6Ì<+¥ð½a{Ž€½=éW’yô®…æVÔ9FÒ’oÞÞ)~[!æI®úo‹Ò¿;ÉžÂÂ{ǽô¬„Ì8�Kª™ä¹¿©ÀÙ•Ïkš‰À�­¨p¢µÕ_ÃK’¡ø¥7šŠ•Ö2ÔT/ÂMELyEÅÚð‹_™Í|d¾ÿúA7©?ÖŠz:kËár¸/žêGYô^¼ÈÑ—V…ÈÃHhf�Áqƒi%ägï¾ Z&- é‰.“3VßC–`Y¯hጂÚc¥W~OÙU�›tQ»gvÇÃÓäájRÜ,àîý4ÆÃÖÄÊq ]Ð'Öºb®SHšgSi½ÕE�|¶¶‘vú%¹›¦Þ�/IJ>îžôy/I­ÓjØ)_=P&ˆY%¨{¯hÿÛAi5¿‹Œ§cGàÄø$nòE±ÉÖD£{K«*sáè[s¯À’ކÉV4"ˆzÔSYA HJ0F›‰ Ú%a©Žw¸2ªÃù[ë›÷IxPÀzº³2íA|Ÿ¦·dÜtÏ»Bü¨a é9Š~‹Ý]‘ö}ýÆ7û«¦\BƒZ¦à‹<%›§uçáz¥‡nʈ�vèX…·W©�£v%X0-°`FÖ<hš},ÂaE´ŽdæÌâ)Ú_ß!åg Ð ´ ¿Ï…=P<Î}U]ŒßzmH^Ê�ã<‘QÀ]æÂ-õ†'9/wKxWæE4ÖnƒI´tšDÁôò?‹'~¿£û©–jç²Åmèngá=\r…TãOä %Û” Ùn[Í DÇh†ó}¦­†aþs`Î0ÌR³mh²—x þ÷ÁýQtõìxÑ.Qì¼¹†&èAqršnÛ#ÔLUáí 1(N,cUÅ´¢©ÁÓ2Æê9ê�YXÒžg±tú´H– iÁ©hêêÔÔñé&˜vÊœllEÿA´ÐåÅ�)´Äa(j`‰¶¿™âAm°oÉco"V̘3Å÷6^�äB«¦«l‰5\Øk™¡ÎйLrqÉ�Ú\U¹³±vY[Zô«ò…Q´ßzPØð… ž·“Ñy91‚;Úw7é$ôO»AÑF5\Rª* endstream endobj 1687 0 obj << /Length1 3076 /Length2 31105 /Length3 0 /Length 32841 /Filter /FlateDecode >> stream xÚ´¹uXÕ]ÓJ—Š€”„l@Rº»»»6 Ø›îî”Pº»»Aé�îii iÎÖ÷ý}Ÿsþ=——â=kfî™{Íú­u)©’*½°È(²‡Ð330ñääåAö .z …³­±€…�‰‰ �‚BÔ h ±Ù‹C€<Nˆ%@Ñ�„z01q£Q$�ö@'è¢ÀÄ „«¹;™ÔÆ¿� ¡71C—�öVö@hˆ(ÈÁÝÉÊÂò++=ý¯L¿¢E2Ʀ6 W°�ÀØÞ à ÏP¹B�Vj�=Àhilk™Ô€ZuUqU€¤Š¢º’* 4±ª³ƒÈ鿵ˆªª©KÒÄ„ÔÄ@ :€¤ºªÚ¯?Õ€öÐú-è jÐõ_•?ʧú±Õþ (»úe×øƒ ìš”]낲kÿƒ¸¡žÆ”Áljeejådêl÷��™…ã¿ +[3à?v6–_fÐÉ lóGÜ_I rBÙMþ h„ ô”€m�Á–ågûevúËíÜÄÉØú�7‡üefÿ¯ù?§òŸ¬Ìÿ1Û!ÿãÏÍú�ý_PLÿAìÐMA¶ÐYÿ§1¶_;»?Ò03A÷ÉìÈ Ä dkûwÍLÐ*þhÃñ 9:Ûþ‰�Vf[ã¿„e‚êaþ§¨‡¹• ð¯u¨ÅâÈòK ô€Û›™Ø‚ÿpA³Xüzeÿ.ÚÉ٠ÊYº;Xíÿò€Ú¬þ‚О¬ÿ‚ÐѰù BEúÓ T Û_€?ëPIÿjŒêð‡ŠÊdïlgòë“kñWÌP‘@ÚcƒVý�€Ð+îOéÐÌ û¿Da†¶ëðgÊä` ½oÿgëÙ˜ÿkýß�g…6åtúýøÇ•ã·Í ôg{Ù :;Ø:ÿÕ3Ôâø' T[GgôÊ5ù£ ó/�[ÿwhåÿmþßR˜™¡IþÚ/fhô_MC ý×!a†æùÎmbéü£ ;Tˆ+è¯hç?ê²Cesþ©Ë ¥ýý|›‚œþºß.Aè&¸þu¡\nAh1îA(“ÇŸV ™<€Nÿ)ìo ¥_¤ß·?ÓŸkã¿/ÇßXâ²jZ™A_͹ÈC´›.ôêf†Ú¡¿þïoúÿC@ñçÕñW´ˆÈÍ“ž zåгBá„î6ôð²yÿO¨éÞp¿_ Ðëíÿð¯tš¢-Î�Lyƒ¬SCJ|Äó&J)¸Ëq´dâS'Ú ñŲ¿‘óý›ýÒ(óArR<ú>Iþö…ZA8¶�k-‰ãfÊB›Æ>ò>„èâÂ#Y êiò ~¥�d4û2Y¹ÚElSi­ñ­oê#ßE¹Û»n¢YÆž0$“é•¶®ä ºÌ07a;Ùb¹-`t.LtÀBžn°c£Œ? /ÒNå†àŽÈ 9|êÂн%’-M’#�fÇ‹"ˆÄC§._jÌB*�jÒ°´ ý$Ï…û çÜݪŸ­þ\Óg,\hÍ®š(ãÞ~Œ¿—�õŽqv\b ÄÂÖ*V¾ªu¯ˆÖ;Ù»Ó9¦úu»P8 ð9áY ÂÏ™ææ Ëè aJ±>œ¸ôÝlÿˆºÜ IÁJä»vu\"Î!œÿ²6ž`™ ΦI6�–b ÷d©˜ÀÖ8BªN<#_)äÆ[á½úúF­èôI1̓[½Yd²†$‚§—EˆÜ®.q5u23+ޚІõ®eú =kÒÇHÁ4!Êlñ�Q7.l‘––ûS•Š/óé¼ZÚ«gI7 ‰•wU•et‰öhuåÁÑ&p>š¸_Øöx\yˆÈ]Ž õ©�Øéݺžcmø¸èîEÑäµ8ïÄB')x’®é( *Òt³-q�TÖYó @“<ä¢iѾØ}ð”?ŸN;ñE겋ÏÉZ&u0À%ãU¢k­H~¬�½Ûh‡ *÷J¨p%"è¼·<`=s]:‹ÝÌÝ#hÈÑâEé©JfÒ8¢p×1Ú“7 cïcËd¼¿cRý®Úš›¤OÇÖÀÚl››Ç�0Í�ÁìBÑ¢÷�Ùε‰0<µcÉþ…æÝÓ„áf±OÑ}q8zÄÌ´v=ÆZQ=»‘?Æp×üÍÛTÐ2¿n;]Žýt¾5ÂQ÷åÄ�»Ä3dÿL'ô Ÿ‘kÎ'n·LSºdÉÊq'T¡—处£‘mÆÊÑ)?^JçÜmà3 œä:êÉÈ¥Y®M"Pk{�øwò8 ãuaŒÅ7N£Ì{‘ò¾¾’àjóŒUÜ¡5™ÛLåšgqi$bÉð ’»v&0¸Ç<€”Ü´—OkÔ^0a«t{É6gWãhÛ ¾s„Mï“2÷ïo¥b¤{ÜàY¹ÌéÂtUÕü©Þ#}‘4ÚLm…õŸ~@+XÆ/”îÉ;~¿Áaç8óZ…#vú‚LÀúÊ ¹ŒŸ½¢•ü½;CÀ5¼o’¸^%é6CÝq½¥¹®¥}_>!®ÅÏ"gT�*ÒàDäK¶»óլà )Ä�13d»ž-É-¾E$€ofÏ�Â=I”ƒ§^™ Yö4½Þ¨†ØY¾Or…kż•Ñl˜s¯dGã§§gäx«öWM¥Œ¨Aƒ#MIU jñs ­-/à…Ó1pCõÇsZù|¶h^¾�¬ÛB-�Ìߊül»Å1Ê´J,op{yk-Éúˆ-p‹:#åó3ŒÒ\sÅ@R,×߉oº—áºiMx�PŽ"Dä>ŒÑ7Ñ7½; ìÆñªŒ@ã:—�ÖUMš7.}…w»¿èq¤´¾Fkuö›i@0 ^ q*Ðëñ†JÄfƒóå,º\¿VóüQW4Š! cPž’ék‘1e:J¬I2œ('>«r7ÑîåïôdÖ‰«UŒd$+WŸž/ZÒšõ¥ÖÇÄsžÁ¼0wÍùaaB‘K“öyG±‚QyŠ4|¡Jë–Íü‘½T‹JÐÀͯ—]¿léOåÍy@ª‚ݹ?4tñ®¹R`ºa_>nÂøÜrhë>¦bÆŠö“÷éåù Ž^?']SñÂÆJ/®OŸA‘@1{”R‰×uÕn…óú.~KšU(M!û @õ_ !jYÙ›‚óØ18n@mÚ>†UÿÝ¡Ðæ3n2*_"|{©ùÛ�ò”�âÖ¹5ÿ‹Šé]ÏGÚSŒŸvo%cÄDZ.壩o½ÞñžbŠ<êd¢lI)J$½\€³¥&BóÝc©¡LkI Ã�=òëiÓ]âx½�  R%[Ö gŒöìªhµã–°›ÁÖæ'ºØÑþEêò]ÏiÉŒ°›ëàäöüâ÷Þ3)_{Å—´+4?µo.ÌÑYùfp®¡©0‚û½yêà,¥v=�àLMAGf›�oÝe/ÂŽ{—‘»‹©-üUº_ûìä†l¹¡åp§�ƒÓ¯¨àÝðºòÞ³JHÈbW¸feX`€p\K°ºÍEO¾Œ–o™x=ú푺k¦=2é¦Þ¾®›c/WžÍ— "HŽŠÞ¿m¾^«ÊÎ@=x\gNa,ÂFö<-$¥5A ÊÓ¨‰PþL3�бŸqiʼǩA¿>Õ’ûÜL<�*?–U+['Ž8ò#õè›éºçkäÙ¾wMØ@-³áÄ/º¹�‡S:Û—0Élë6—¥ÛSEymî³5ÄÎëˆÁSŠ[qÔ5£©µ¯øÝçN™Iˆ’}ꥥNëm™òJ•Ø(! úeÖœ—™�ܱkýßEGX“4aj¤´-}ãÈòË~>â¡|Ó«,þó8Îç콫UÍüÎ_G¹ôVóßõº ¾ß-àÙË</-M¨Ó+U”3ï^!—¿[I{µÃ€ð²GJÓòÕ­HÿÀfæìº¾.Bj�S²ümì—ÖSoºM~…ƒÓ ÚЀ/7¥$¶AÉìOiu T*ÝÍÜO™ÚUÌY7ÀJ=‹íE—Aõ‹›ãÆâÆyžþ’yÂÉN¡l x•¸os$!å��Á[yoðäKXâ�*ÐvÚ3÷ú¼©tmúÛuŸsØuÂB)‘V�6ÐósCÔÂfÚŽÁ¢Ât“�UBv”N%JðS°áV!ÿX�Övœ8Äçe®ßÏoAp²R袄÷, '5:ìõ# g«~‰ï䛸•‡4­Ñ2žqI]ES¬&gþD% =£3>-¥Üûð^šïŠ;½�9úl¨3bÌó+^@´:}ä[ŽjçS‘ÈD+ê<‚ö‹²6nŠgÓ�†ù�ŒÖqùƒ®z »zû.ÛD�Êf›ËªÒ^Šjöá’ºx×múµ‘Q,œ.:‰Z]â¥^Àû0³lZ~Û*fè]( ‡!ýÀhû,aúg­ùpo Nsø×J0Ƹ�VÂ<$[†UUó2:v¸õ8ñ ž9’³#yˆô¶›þ½ } /5üU™¸¹L¶­`œäŽLÓ§¢N!ó�}áB”ɲã0ÆÈWUu.:ôŸl^œ‘˜ó %è\êTæú‡ãŽÍùr#HMÑTsõu¦¦Nj3pß]]½(Ùè•Z�—§2¯pç�`iÛýœ{�"Y>I¡t€mM1f¾Kæ¸Õoàn '-MšçP…äçq-{ÛýÑyó}LµÌ%‡ ézع~Y8?'6~<íÏïø½lj~•‹ü©�ìÂm¡®x³Y m‹Yg‡Ïá!Ÿ×Å·Ýú)Ê’ HÛeÎ YN{»ž;§õövsš’%þÕa¦Ôú[ú²GA�M‹êq�àxø½� | Òë)‰ÄÔwá´È}]zAN½^_¢ˆíM3},$Ú÷¾ŠŠxQç ‘L£ÉQ¸�5ïr-ø˜N5­´"”›ÖZj—À=�ײ>�³^kßOU(&Ù ·úR¸í”‹¬»ï«Òüt¾ž:Ä1Á£Î’)/ßÎ\Jœn£ Iãޠ#S™¥·‰!:QŽƒ—T²uô¼j$(® ¨¢Äl•/LjåâŸ9t[Zݽ,ÑJ^ÉýˆÏ¥ P©/Ñ"‘zµa/¶ÍƼÀ3ãSW¼e«Í›ûî“x­›×UÏ®þMää–ˆúH"_‡ø€èýÁ±#§Òäm£‡O{RŒÊ).Bã¢[õâ ðÆûÎEÏT‘xÏD {Áª’»é Wê]WYññ­öß—rü\×fQ¸Mè˜bŸò“Š?~X Ôëx´žt£ÞÒ¯Þμl‘‡ 3ñ�|l²Ž_3¿ø˜Xãcxaôzà†9t-MY>%‘K]Ðön… ŸnÂNK÷cÙ3*l€Jë°ßBŸ*Þ�?�C}y¡ Ýæ¹vÀ¶=gWÑ[EfØ£¸ª’¾‘(Î ÖÔsÌCiuÉÏúÔï7 *ùm™™·d˜ Ó�Vá57 ðñä Jàa·CÉrd 6)&{‡•ÈE3G¿¹KÒì(D™Z?Ó,[³ÝNkR[YL˜l*b×™(‹¨ŸÈÈIÄîèå)ÄÑøp«‘²•7q£\ªßòrc—"b®Cû°Pލ>ÂÔ­Ê*…T‡[Ðg§Ÿ{˜õm}T��Ùœ4ÿæþvÌÿn“nT)%¨ØT-?5Ìåë™*F3=о�gmZâ’â÷Žž/ÑS>5 ‹»o/Ûµ`öÒÌzG[1u}^×? /ê9õ¿ÌÕ*äºÊã«m¤ ¦£!I�*“Ÿ©|oj’¿¸G“~VÁÔ— Xx÷–+kµHCžÉ†˜ú¼ÖÕæÃß’¯i@Ï“òu'±äÿä~ž+žM«¦�Hš£-êPÓ\ŸˆðI5)„[ÑÊÙýè�ŠåDy«§çXW¹Q¼O5z‹*MÃ�dgÛ¡PC7Â+ uË@i½–ŸŸšÐgòç\\uõ% 3ˆÖN2CïKªPd¢ÄGúL)¾lä!ðu�k]½àúÒDšxÒØÉöq4Ž%zIJÆP|„JÕ>�Ó©j†Ã¹¨K ~cÈ8€{µ�¥Îf% ÄR<ñ5IqÎüO”ÿM¨r®@8•ã˦ý$8çK…¤fÓÃq!‰Æv½©Y&b †L0çô†êâêê#q%—ɨ·/õ¢�PÈ[L"Rß“4ç´}ËçYz— âÌã«y¹vbÜxµËêÓ»Œ2ì|,¤ög÷ćDÎâ‚圊ƒ±Å‘0åž�>í þMHýƒŠ„G‚'Å¢¹'Ñ).Y{ žb;Ûwþ%%7àÍ‹í³…®ïa®‘›|9g½â~IØ,Þ¸±WÄm&‚öqOf!Sqña€bCu^«ï¯ÕÍ�Ø;ÖÄ“¤u8 {ôuVýð±ºÃ[Ò¯™rfMÚIûúï= ŸbuNvn|Òœ‰]XJ ÷*H ¦ˆ?àeðÅÖŽ,1cYU€ )c%]†»Ýd/‚¤Yë��¸�o¶:Špñç‘…ÚêðßÞp|Ó&2Ù.,_}…—rE~‰t³02BØÌÈ&t=U9øêõÓáÉiCÿ…¸ë ¸ºæý,¤kïW*ÛáZSWr­Þ«Ï…ö^³ᶸ Äk Åܵ«ß’ Àú¨fm\çÒ¹ô—øé ÷/Ö2‰LñæÀ|ò=´Û8 ¸[”"ÞÚc6Ž·`òõ35ôÍ�üœÔîÕÅ¢¶ž»Î›±ÑMæ³müÜÚM‹F[·De™å¢·…üy8™~Ò…¶]ÊÞÑk?g‘õÓòÖ¸«bF¡üu`O®ç|*K±°S ÈçNþXuIšlМpG“mc ˜Èœã)ý‰)¹…¼ Án–ަe†Ÿ¥‰½ŸôY_Pµ�¡ÓÓ„ J Á áY„m{B¦”j 4 YÇzî—wTõÌz ò´÷�¡žjVÉý*ð­”®u§s(MùMÂ‹Ñ &ºÍHôUí¤÷ß°“}nDí<9Íõ Ú5]¿iÅzfj#’,è¶[„ß‹•ÞÚñl;Þ!+u¡ ò9ÅeûêUk=Ü•¿Ëzæ²úÂwQ][VsíÜ™<=l«&ý‚qOÐHˆOÛKBO"8¨dY�ôìSMêÀHàúIèGu·5Þi(\Bö¶F–‘ œ ëýyæ:éÄ/-\Œ^Zï-áéˆ ÝÌx‘Ÿ¡¨üÝ|ƒ¦FÖ×gì2±ñëb§·b*ªVïO¹é·y}`ÖgŽº„ÄN¿I.j&‰×3ã1çÞ\°Ëêþ¸=’…9Ñm_˜Å‡¨¥tú_\4{†fšÏîy¿ÕM {Ï¿0cä•f]]íü¹ë‹>ßΠæbÆO¿ºž¤á¬}½¡²�=Ä÷]S¢ÀœÉô’’zÓɉÛKsgšÌäócÏ*nùû€#ëoî<>zeöž`f´‰ƒQm�žB<Ö2/cv½†*D¯‘i_¿j`·N_ˆ¢ÄECPyÍÇÎ�Rè�â¶ ,2 bËXúnœ©|-VÔ5\‡¼N±¢ÍžQI«ÔQ;5]ˆBЀ(o˜EÇXKA“篺Ç$fødN8:ìâAåÌ6óâ ãk—¼tùà“NË”·�,§[‹8f§åjó/cîM[ÁåmrSîŽv‘^Ó=C  ʶ ~eUж‡—H¶cÃèü£íš¼w\D1Ïk[<ËüH‚¨Í‰ ‹>ïô•×0V«ýüö! ¦÷�·ð„e=õstXk9^qZt%ÄÙGžéñF‰ÅÓ³>SÓ[ж®À³0b j¶�Æ®AÌÖØ‹0_�-vg*žlýþÃnF\< ¤2*šT…J¶ŸEü:دÌÓp{H$“|ÈÊav_qèPK‹/dlêó‰Ø1Z»«˜–Ÿ´{äñ¦WÓÖÒ4O=÷â Z…ôj•½?Pÿ¡Åðiê� Çp“åJ{b2Sþá–W÷èUOÙ� ÀUÓ�º¥veªÞyÙT¸çPÿ×dWéA1?uôEpœ ¾—"-ª¾W\ä)G¹eÌ]ÂþV<ÿÚó¥7@~§vï“Qµ¨µ>CâçÅàw•–Ò„–\¬÷§ÙfçÇ;œˆb?ÄÃo]]çê0Vw˃ÍB*¥µü"Šy"X_­ýD)úɧ%¬Ê¼ÔÅuCžÄÇ- ^ŒÞ“1¾©ÄÖ½k{̧iË8éuÿšéSùÜÐ kÈÉ…6“óL¼âVãœ'ÅÄ1þЀòá]dÇ’õfb DÑVX,Dؽ~ÒDº&ï'êZÚõu¹Ză/RÂLç¥5B¶ÂTm�±ÊnIûG~,›ö?IlòZŽ[Š(0\žŒ¢RLlZã‡Ó a¢…÷Qç?áðWèrSd±~6G[N9Á·æa‚ñ;ríÝù˜œåz>Ø×VÀwœŸÎ¯‹é՟ЯP ¢È_ RsT| )�(Ýkd¶ÑÃ8”¤ƒšëã�42r–oòb¼Y|_Êaú²•á¿Ô÷uùŒ`+/·Å¨�c²[0×£*H�‚�™2¡»%K¢D±Øá}P:³™¬Ø®7M̳~¾ch [6QŸG r@�ï†ÅJD‘äœz{{ó‚ïÈðÖ´´CŽù²ž$fO“ªätEÖç²k-3¿P^L÷p€G¨ë‹’V¥9q[¡¿s¡ÆJ:5¨À�Ò©zªÊL§ªANaaåã#ëÏl5«ã \ïâ#Í\ýË•XkæÀ.ܤ§a7\ ÒÈ5%} Ìy‚ñ$�œ—Ú·Øáêe·=Ghy§gþo:Þð�J^F© s¦SŠÔ1¿JTâíÊ>«Ô�`~+¥ÿ\Pç'ì‚Â�R«£ÊtÏ�Þ�í_Â(œÉ¯äÆÏÊð\ðûDßÀ±eí¤r`"9Û…ýOÛw�È#of¿«>Ø¥¢0WyÒDì>�LE­Ö¯Kè·WS´Õ'³ÁØnÛ¯nÈ×H0(~Ðæ’Å £³A'ê?�OL†ÁNN›��õÿšpêKs¸|ãF4@Eª!ŠÚgøa·ï,FJSÓJ2LLrÌ'RLìLÎï~àV3¾} _ “j—\Õ {jú¢µÚ$ð ܸnµì7˜9ý'˜Ÿå¥äCB ½ïIȼ‘šx¾À?Ql ·æXmo2 Gµ;v‘Ú«9ÝãzØæÒÜ. ¬ùN %é” Ü!^ ^£¿îz›�HN ß@Ìëê-Eˆô(Êþë•_Mˆ½k³Sr*úåÐk½»Õ¹O˜¯’70laíx°‡¯¹@# Ü�äþœÉÇ*� ª„vƒ*ŸNË~¨ÍÙ|l9Cq[ô!W„EEùŽ—Ô‹õ”Ì ßÃè ¿.õ.ÑÞÛ…_eY5Rå:㢫@ôE‹‰zt×nÌó½ôv¡Ä°Ô™ïçc$Ÿ´É¶z"9©ËOÈb?‘Hñ=_z ôþ ã‚Ò»€@£iŽûγàYº°F®PÐØ—µµ>¹Q må¯ú_Ÿ¯æ»ðTý°"¥¬¿]×u«B¥m17yKÍ%uµ�'1'_â5�é…`“Pjü±&X3¹mMÉ÷vAžÑþtBÖg÷ LúK;å•€'m+É),C¢qvtn¦ŠJéºÙáo®¶?2;Ä^º5Íožíœ60óÑ‚Tx&H<\VÕÞ6IÚd#Ž3t2Èkhe¢úÿð=çQ;-¬“¾‰ºÉnEvøîi¼ÔFÁpóf;Ü´¹üÙFxAÊò¬˜Ëª˜Íw‰£„ÙXàÚ\&p°:yNŒzÛè’¦!›¬œƒæšò¥  KìùØk÷D¬x'Z¡¦öäwºÛ»L5µq‚M�± Ì6sÔÃ3Æa~*O7l-Ý.kr?¢¥…n :¼,âû'\¿®ûU¶Ý,M6Ó$£v Ë6ø7 âdjIÕ!Ñ.¿ß¼è­#ˆ¡AüyðcÔMšÊš ÔçáGª&�ûè„‚D«²Çx\ˆIýÓ]ÞŒbœ{bµiFÈË4Iô–Ò×ë¾lCڈߵUÍ<f^íŒ"Ô^º‹A~žši�ÙƒWD‚qD›Ÿ1*ر8çg´ÝšÖÉzZ¬!n9H$TSKâ#:Ç�¶ûYm‹4ü&äág¼¹²ŽL%r'ïÉÖŸ�Å~ÒWá]@ÒSyùÁ2·YŽÉ;fÂËÝá¡¶Y,²ZúC‡ùkATªÕ·o0*ÈV ‘Þœoâ·n»X¢Ïª X²® ÝûSAàß5xŸ—¶yoTò¢>3ÇUèçüà\ÞÝÿJÂùªÄª-ã1äídkwªÉ�âÌ dÙw–Fô û'§+zÅ]. ®—3¡�”�å5ä’îH5mÀG¶Épêt‘¶Ëd¥=–çÜœvq­VÍÑå°þEþfÂrtf#.×c‹’9—·ƒ Œƒ+_¼ò ¤ C} î9IÜîøª Bl[ZdˆçÉk\ã}÷\éR�¡Çg—Ì/4õD#é&Yæ°ÞøÜø…¼c6�Ý+'¤ü<ô œ¼RÇ-1 —f|Ñþ"4øÞâÃ}Aýø¤{*®+£»11×@u±?ÜWÀ§o:äê§åäŒ&Çavü,®ï«|* ý×°ÊâŸîòO¶[twþŠc&¼„¢¹ /¾Ð¾7QÇIñ ý?®úÙs?yuŽõ‡œJ…fÌ#_#h ɨßÓí°ÁïùV òòcǼ‰ÔsÃá;ùöñ¢ IÆÿàÎÛ­ÜÖ%”ì֙혥߉¯)^› ȬF•œ…¾þzOYí>è=çxƨ£åúÓð™ñlw–§Z£åûŽ•ÝÖfz¶Nl|ª!IÚˆßê´ dˆSz0îí’€¼ØPc=Qy vÍ-Ÿök­ôÏ +No’óðfôozôÖ­NÒ¤‡‹„¦ÝÞ¾²áÒ}cýŠ×6õÓ¾jw¶[¯6öu®¬`‡r´ek°U.©¶ØªÜáGóšE" N`üköÞæ¾¬òZknÐFyšÃŸÁB"ÜœDº” Ÿxmr Û\˜ºýí#cò/Q VÞÎ�¬b—,ñÀ¨sá«8p—CP"^ËÕêæä±]ì°olú<ˆyq.‹ë3¢ðÇËÈ¿ë¡É‘e¯Å̆£(D.س˜ƒí‡ »=«z¦J›_žYÚè¡0À·Ê(x DổÜýl  ƒƒôùçÂè5àà=;dÌŠ ‚óC:?©¦vd7@3ªä "O@{0�¥ñÙc#d£+á¬!‚뜺ÔWè!ðϽS,Ÿ=!·ÿÛS]ÕEZ§tÚ›l ¬³œ;ç•"2=Á'‡tŒ’âQªwšÆv¨«¹9À Át_ ÁN+ÃŒsg#eûéråµy8AqÈj�$!3¹$€G†J�GW໳áh@™à�a"ïŠåÝð½ü>òÓC¾ErMD;#ß"a ¯ÝI&'/yǬ3Éäד‹Fÿg?•²ãç9½m1iá�: %3¢Š¯mÐcËhZ‰e*7�e° 3'.�×ôˆ­â´w+¥÷I~µÔ.õ+Ýkìñ_àw)k¾gOMg÷ê,gK°£ÈÃiÚ/Á™°4Ìo%¥Fuæ œkTù÷´Xˆ ùµÚ�Ô¢f}ÝPê˜÷[�ËÑÉŒ(:âÿØîBá2rðTô"’Ö³_:b�«M.C)ÄÑë)Q•”åuq®,‰?[+°?iгô çÁ:©çˆÇ/¾ú�qî*õQެáÙÑp+…¦°V•�Éd}ª#Ìì3.н‚�dáŒIÄbÔÇŠè°6mx!£¡´„ïéT‚ª.‹‡[�^æ� �^éÇ‹ ;F^9Û)ˆ*;�›YAfÈÖ ùÂ]?[ ¯—¿}«ß¦oü ™§?80>�äjÏÞ£-× ¢;ûYˆÅN"p;õ]µ ©×˜­úã1N™¶q`Ë\6'µy�SvüM ?ÿ N˜¸I«èaÄi%wÕÆøéN‹Ê 먡RY§gq–féŒí$ùßYæ+-–Ø\F÷¤X:rÛTÄÖå¿«T‡Ò¹ ü½¢’u´y32Ú•^Ý¡ôƒm¦výÑ­™`ö’Ñ›âà©ìÉnEŒ‰ùD)o²Û$ål®Ö¢`Ø7ßT—†pXðÀ)T� Ç~ë»å/¹ŽðîKŒkðö‰ów­qcÐãH¼_Ú¹ ˆ.e Èu»r ¹‡l¦,>lÀ‹Ù‹ŸŠ0¾_& }n…×f�°—.®ä¹Q¶-aìñi)s™‡aV_zuíÖø; ì‚›^FbãË¥xÛ¥’1j›B7_iìòääÔ– ò•¯O Ÿ/�eLV{Ѩ`zþU¼@°¶¡OG£ã7ÃÊ+Z±Û©¬Ÿ­ L÷Äi$w¼O¥vh€n.‚u©�.1y”óCÛSÇ^ðX•o¡l³YiòK‰®¶ËuÓ.½¡‘kMõWD–@ØŽQ³|;ã¹ÝÑ<&ï<÷¯ù²fJ@g~Ä §L>Àœ]Û~ÌþÕ¤µ™.5ÒÖX¼“}õúš•”x|¾‚³ûÅÖñ@ž ­ó ªBfjðÂÜbœÝ‹UзWþó»îN‚«¼ÇVƒe‚ò¨jó­¡ÇD¼?ëLžα‰¡êU“Epß_æä©Å5WjÖߌ½å6R�K·»ž¢0p»´è˜ŒFÔú…VV½¶À\-䪵 ç«Óê•DrÇXòs‡–k;´^Jì\7öN?Ñ�6Ùdª‹Pîú¼÷ØË´ýò&ºwMu7}ÈïBÞ†¡Øä:9 0yu«^”òý¥&+yuöŒÌƆbÎ!EŠ sŽ% Û\þ y¡‰L85�$¦“õyè^™‡Á÷idSU^nÉqÁ&ü½<Cëå5”öºÅé/Å4§.îªÏq Ú=`áê´kä` ¼Þîc7Oé¼}]¬ÿÈU%ut2Ó½•¦[3�µ§S±˜¡”†q”`|»À?[Nû6Cl§9Ä·ó9ßSº^QC+ÁYcñ¤ õ Œ@*–[,‘`reÍzŠ€;>ªmËÃúMX¿3–»M�rëýŒ±ùúfö»yêÌO‚"쉟ð‹°J¬Æ¤§©[Ÿ|� 1³ÎQÌ‹~a“þÜk�Èþ%>+>ÜZr™ã±á|ùöÝÚl»«D�F¸«ûõæÐb>‘¾—(;6Æ$jÌrý�M Šò(š¶´nlP—Œ`*³wVÏr¯J{®ÞÒQ\%Ñöé½=Ââ±:i’°ˆJ²ƒ¬bøqÕSmÿý æ‘Áêc¯çÏÁJÖÚt’$ML’?º÷Üï„N4¿È¯ßï¶ÀÐmqº˜ Ñ« PàJžŸ\ˆî�Ï�[šs…ióé¡&³¿×!Ëx‡{âšï¦ä#¼ˆîá—îÔ`t…^WäFâÅ/Šp‰XÖkå{4<Ôˆ”g¥â˜>=&¸Jä°5kî=kt톻ltQZœaK²u ­hbö·d]’ÉHk’ôdâ8[¨FG)Íl«Ø˜·sU�&[-L·?LК%Ùf?¨ýþY²#Cç­Õ�å�ˆC�oZš;Ü®Bu[›”·{^n(ÙêE„rÀe`“:1‚4f)ä2|ÐLãr?É|Ö… ù×YA;õ‘cl€;Gðz§d;ÐAЮÙr(ïôЄéYâ¤NùÌKþH0ÒÖJþÄÕh˜¸Ö6¤¬µõÉgÚ¦Bè¬'u�„ƒ#7ÒCqpw$×°�ì~}4 H?7d+^%­�Žr�XUî)À:"š(QÅÊ"rŽ›�fBÜÞt XšË|ú¸}óB§dÏdñµG¶º>³‹“˜îµ.ØüÙç¯ðºñ«Aƒ�-Æ^áåwô5í ±¾k ídB›¯eN¬ÌªÊ5�Þ/ìwœHY[…ª¨A¢d¼u(eØ /w3™àù¼É'2¨‰{]¿Î££ñÍYÎ;"NJ�Z{÷,ßIH‰ÝÌv ë_úŠUov«aÊ,�Sb’qQãÌM,vEXFz”à·®�f½w‡�ß0Í1�£óëU‚i‹»ñk2Ñ-‚ŒîGij0ñìL)LBì—X¯ñ³.%]7Áœª²{ßY“_,âSÖ#3‡×6NTÄ!­”9£ˆÂ«üÄжŒØ=SF¶¾¹Ý‘E篽S0Cn Èæ¸j›©pÚ÷7dIbý8Ö(í ½|òÚ£&å~ÆÈ}Ý/Oi¶¼ðÕ(Òèøµƒ­CØV%àMµ×WåGÜ¢GMCÌ÷Å#ióq-|£J„–8™žLŸàózæeã¿Ã&ZƑ֗©Ä;È Æ30¤Z}«§=ŠôJ¡±0Ì8áqÓp€ÑÇ;�ÃM0ÝËËb•ÖÞ½©®ŠªMãÞ mMá|þ¢‚­‹2ÄQ½ÙÏï½)²-:‡¬nÛ©ÞlG¼kùÃÛïmAƒhËy’RìM FE¡7¼j•xö0¼Æ¡Dþ®³KËýjLsÝ»§J „^ÌÓ‡-=¸Þá†dZ’M±3º0ÁðzU¯ã÷ÆaÞ •/Z—÷ÉíF8ˆ‘,.ð.ÖƒÙ‚}JèèÆQêÖoÔ·\F²¿tˆÏf�«m]Ÿ¸ín+_v¬É‘¦<Ǥ4ʧ7l¸òÑa¼»W²óþ¬Æ(ô߯$sI sœ¤`öÁnæÄžŒ ÚîÝ~6  ‚E+Ñlý’ØðsYŒl7 eHÃ�3/R,“Êø41û¨baã/Ži�N ù"Â;çs¢0j؃{{ú`¾¸Ç°èiEê:«üÿø_‰V¤ÊÎ#DŠO¸åßĵíäzEÊíÊ¥àòÃX'˜…U^¸ÅߪO3;k¹\IoÕ-Ü´üd+W–á Oâ`ã#â‰m½lÿœQÈè\ÞÿÈÀ<蜄Õ^Щ\—›-M”l‚ñsW²–Î\éä~3™—i ”öMçÂX‡uzQ7ÃËÇo†Á­BíªÍÓ‰t/’õO¶{}ˆÁ“!Þ«¹£‘ «»¶Júì?#ŸzYnD¢þ"Z1P¿ª�¸z–É´´×«‡HÌÌÇ&o‘¾’�>jM1.lÛÐÖÃhsÜöuØ?šq_#�¶³j‹$bú9 !ÀdÌ”Rï¦Róºžþ®ð7ß+𒫝T¼úÍIÒÌú“:Ó¯7h'xI÷á±d‡=#ƒÒQg•³?HâÍÂÛ9wlÇ]µ„±Ç/¶LÙýQ_;„DI‡’Ñê�:Û‹ÿ쬶_…+ “Ùb LDz¾oPµ{3 ( Ù:öóº„Ì3“èt@cíFÔÚä¶Rÿ@$¬pf!E “@ø¹Jþ,ÑÅ0·®Óä¹FŠ€rsÀ'Î`^2üuT¿¹ Û}R�HÉ·6^òð5þbRåwÓþm±ÅF9㟉x`>»‰àÔn9#ÓÊ u²†<@šå¾w”蕺 ­w˜‹½wß5¦&™,‘¾Õ$Kš¸! âÆwù‘éu6d›–ª.ïȾä|Žg±¥‚ˆúXìèÂ�˜Þ©ÑRû@ÙCð8÷mMøÍ–½E–fΛÜ�\šGj~ß=p˜£ïÂsÇ;îÊM±¯BŸ<ðó¬x6ròô!=¡AOâ>ôÎR¾¶3‘T'<©@kRžíyž± ³Xy~ËÐ�×ÙšdÔÇ0 á‚öõ0Âø­:$÷ƒ�Ëa�l•žŠsó[]߆$�…ïLã{ú*âÞ„Ü?ä�ô)Gï¯aÓ”:8Ûšä¹}<±Ï�—ÑW.¤*§›/¸¾U_hRLéGâ° ·YÌ,|{+ÀïÚ)‹�yX2žˆ·oŽà—Æ…%,Fµ¯„)’kDÇÑ”s_öå;‡€•õ#ñf\±ŠŒZbRçFQÞP¾oÙÆ|ôOèšÉUDó)¯„£!Èj\Ì^xO©ŽØ08‚,%SWH)LIAÍ/07�—EåëÄ8Y„•[›D“óúî=±ézÒ%ä·Oö6æùe‘¯&ѸŸ6î  æçS;ó�M^N./v ¯:œúëpbšiÍ¿Š–ìWæ~CЪjªÅ’曉¢-`4&Œ†p¾óÎi®ÙMÑÑK¬‹“é €SmäXœ5X€fwäEÈ6ùŠýÂ×ËÀZßßh‡ù¿3m�m¡êÕjtÕK»-»ð¬(\±�´Õô•£KÄL¼õîõ…4 2É™¶5²ƒ ó¢Œ�p¶˜Ô)Ööz–ŽSáŒA´v›4+!š�9ên_[¦ÚE©Ÿú|xg±Ây†kIQ•;òª×¢Ù¡×“jJ¾šK[Äc£{º° ™/ãÞÊìÇÒQÉVŸ½¨íË“ Zéð¶ ѧÄ�´™…øÕdŸ36ñ£1‰ëÙ°XâÝ-ÊVÄ/È&£äoM êÁ`mûaqƒãÝLc¯¨¾Æñ‹$LÄ.ùŒþJå,1õ˜7ŠÅgk˜]ߦàáÞ�g¤»¹û®µ˜euýˆþ–Âå1aÃÐý|¼7(‘–ŠØ±•x@5Pýa§0¼q}¨‘Cë!ê›`÷­±‹=¦ÏåL~t£;ÀBb›o&⚢zytåÞh_Ýh”¥¶ÓLžJ%ÿö¼c¿}È 8t¦2en0%¤�¸¼á¸�f5&òœwój¯«!ôX0æÖ¾€nI­Anïcl„¿}µ¤*T{ûj-M]ä;'QFñ˜Yú—N†-�NõVñ‚‚tÄ&YîI9¹Fo¼±˜ÃzêLô º÷¹(ÂaXî=«Vã>-ëÖ²N¨~§s©üè£0��ªºaí"ð¾EhüI5«æÔÈMì,òèÕ‘5²Ì9çõ“‰p+daÜæ›Œ°Aôn¡!!ßþû%¢9<+U-]Ö$݇9pÂÚ)ˆÎì4a8™ð‡‚äÒÊÈÁ²ì£·tQO4ÕŒó²š ÏGÕÅ Ó%-Ç;ȤQrì±¹`^�\ D½ 1J$@±¹F¡°ÒŸ]¶9V7ÓIr´*ºU+DÜÈ­4cW°lLj°é§+Tqî{ wš,ÑñÑiÖÏÓ‘�§ï0>£yc¦M}å#Põ™«Íº™"óP“<…K Bª8v½ùX�š"ËÉvÅ3®V†¸†kŠd¶AJÕ‰äî•BÔ>[CÌ—¯Õ€Cý޾ú‰w,)Þ[N8€EI;Þö.–Â,+§›Eã|Å0‡jHëf…ù1 ¦õü›�Lw�nº"’«I"ѧ{ †žâÃßøhxAúÝèm}uKÀ”¿Ffˆ“š(|ë?’ `ƒ<Üž}�|¾³UŽè0Zøj"±ø{:Ac&úë§ê¶�û‰Q„C:÷zÙq¦oÖ«ÏšŸ¹,´¾ ¾´çÄÃGJæ µ…¨¤ÏGUô›µðEضΜ0®@Æ2,y6¹:®Óp¿ÒÃ;оõó«¦Tú+¸Žãˆæµž’¤^ô�Š1½y=´‹jqÔFk+ puêŸö`7*Ä;òRïÇ;x†ƒ¬¿¼rÖpz¾å6 Ü÷H –�s(g çF†&Ž–Ý- ýï«“ƒ—Áý KFð Ô‰ ·EY¼ÞdœlUn HîÌ¡ú£^UùHŒ¼E pUþPA¬tÊ]ê€�ná3–EÖ�Ë€¿�o…®þº¦E*‚�åRÚôš±ˆþ�‰ŠsŽ»gU¢/vn‡FÑG½F¹1‹ÈK|µ1Jóº{{ì~m†'9-²|0…Ñ„‚Övû˜«•—¯Šð mÓh�æBŒ´¥�Ymsnz§9Á,­©#º¢7áB°OO#–ø}å´‹DâW_Yù…ÿ`FV÷³¸`4©ô¦ˆ]ŽX3Å�:™ÇÍq"T@aö÷гW3p¾«¢osˆk>Ô^…nâÆ5fÁ~yß㈆Îò)Ê÷=ŸPÞjßÈá]îµ*¿é \ÓjËmD®@�!óª,‚yæÂ‘“Êì­Ô¢S óÏ äv©w!�_ñ­÷5Þèq3฼š!¾ñ[¿“D@Ó$­€ýØeü•Á[ß¤ÆØá ˜\~~¼Ê+숽€{ ¹™àˆΰ©",‹:Â7íQ1kêas~ó gê’'Ä6iFG�2ÐíhŽõ¾ë~¡ã‡¥üzº"qDT¤Z¨]jñøXð˜Š3ÜU§±áXMr(s¯`*Grr¦Å·¶¼ÀDßàGqæEñøVó@Ë|ð`Ðn&$ÙqiõÎd!:Ï¿)Jõ�h%Ýw :¾W®z×7ë¼CWðBvz”È|"Ö[õ�š¶ŸŒŒ“ÏW6{e§-ƒ›g…/-eSãoÒ7Ì‹_ÕPõÖl:�5e쉈¿ûYõüІã¬/ÉÔM¯Í+ž7bù$ωù½âþ™1’ �Š’`üU#…G œK””Sg¥,³ý†ŒüÌ÷°ú”ʱ¦Ê(,ãjjÛL;5›[ÿO&>ÙÁê qA9a£ +ú¥–vŧFø5àÝI×öÿ�_µûw÷f±V˜(ùzܳ°¶†&BX þ_�m^Ý|òíú34¿'xÓnþÁuª">Õz”�kŸ.€"™öyÛ’Q7¬�n¨¸±�9¦îù½IÆ'sè…¬×,ðÉfè»'WÔ““ Cì<-ë]aøý³SvFºð‚_ZœE ù]—§�.°û+¢'.µ?´ã£cÎëÁ }Ù©R*µ……t­ÿ5�û¼üw�Ð~±Ú%fxî>ã �ÉÏ‹¾Tש8+ž¨§2?'fC4w ±a#hY±/ÊSœ$ç2Ëž4ÛYãÌ5¿°ÈÁC‡#̶9mýöÛ¿R¢§’UÙ®Zá~‘ « ñ¿¶¢G{³ Õ.Ôm†´5ï]Ü,Ȧô<(.í’DyXP>Ò@éÑo'Ää½u8¡J°LB, 3މѧüø>¼ñ±êWv1qP+��(¥ð®h±ù¼àÀåòÒB¸–ì¹î.`þØèg*ØûjÕ‰µç#hÁ£É‘ÇÚj‹^@�øÓ1ZªÃv`>4¹˜–X = ~Rã~K§ad¶Ã ¢¬Ê) [­àÏð4{¤'0T8¾J6çÝ©9]&·Y<Û]ø1 Æàžzÿ� Þž&†&Ê*æ,?�)¯Âþ—W, ýgãÏ>W2·æ4CƒŠœRUë6¿Uçf�8¼{3õEp_µðÐwÖNvÓuòx›SWÝñ+Ð;s0&´ûõƱ}†ÿHêÒ¡ÏU�.×.x¨Y73lVA8ùÐY×Wê¼æiòya £›6–ÜÊæI1¾ ®¤ävüe:r‰òh×fð />¦RŽ=lÆ =ÐM³ÅY8üZ ¥QlÞWª””$Ø&»i2`85›é£îµDy:IñŽ U‡ßOž/º–ñ?oT´Ca€Z»Åi¿­¾x¯)Šct¶E}CC É/ÿæ� ÝqCN<ôú¢cÆ·#®NÖ§â¡7§Ú̬•T™„A�¹B¨Z·Ü:ôíòÃNL*ŽÃâ-“vý³Ó«/@£§ë¬@4ÓÁ(Ém·/KKSÛ)²öuKÂ*#R~—HÄ}23·•æ›¶p�Ò ½zfJµîü{‚uÓV$ú¥‰*»ù}ÉB{J/’™‹Îüªt#�I}ݾ [89óà{fÞ�G¼Î˜˜•zù//�¥?{Ö­tI8#é÷w�X¶ÒT»R+e^ëÔˆb9,¬>Eç7q*ÜyÕd÷´‰­ô½>°Þ‰y�rœK¸j>¶ÿ�[šQjÊ_°½°35ruVE+Qr1ÔÍDÎÙbô׆¬/0Û>Uš[L$äü—lç,ÿ2PíáB�œL×›PÝ­M1ÐÍ€ ±uÐWÑ6Ï¢DL�T"U›Ú2r»ÖíîoÑ cP¾-ùÊ’ž'þl�M„YÙ<ɘƒÎÑjz£.Äž£AÑs›We­½ÖàÞŠÀ ŽËq¬ÛÔ•q…%¿ýSŒ´5Ïò7&@Ÿ‹U…x:BzRáýÜ1Úo-m Ø¢ž�¬§¶ò½$Éÿµgá—'Û¨Rø—œz\¥Õ/¡´Œ�ñ@¹4ëX^<>J�øi�"‚Ý·‘ûÓÐÀ‹ŒvW:¥ú»?ë¨æ·Y­#åÏÀb芕Œ¿#B2Q—àÂ/ Æ%KÇanéÃFu¸õoõÝ:Öü4ÞúA5µ‚Áð(jV»©ŽH¦æ{Œ—;œŸ0Â·ÒØ_«æXFƱý/wI£C\úÝF |g+8t98U¿VØ< °ÚÎp×I…^ÓÙA®pûÜ»o(­TÉÈí›\¥ëm‰ÎÅ€©f¯]JyÕ“[LcãŒë™­ Ñ):΄…*óp (Çç(ë‚.©¸'J{OÔƒÕˆ1¯3صpÎî!‰å”j„ا®ì]ÍÃi`C¤—WTèÎîür~ ×»9).}L‡fëO+sanŠvIØÑCpÅ ïW&ã’+ð §Ñ±#v˜ÂY²ßYrŠ“l0ÀÓ†UÙ‡Óªýb¥<Š9{œÓ-ËAÇÿ9’4WÝ3¹´—’™^GýÕºûÏ�ÚÃpAs:šã2Œ¼¸�o‡p_� Bš&ìʰGðׂ}«â�5�øÁÁûü€îФ§«kë-¹nësº ‰T8’o³4�+‹è‡V21 ¨ÞªˆÚø~ÉP©¶9!v†LJ‡�û(£F±ý+%÷ÙólóhþcfVÀjE_ÅL!ÉÉÓWC©ÔýÞê¢õèüÅHæU×qnÅ÷4ëMN…üØÙ5´Ö]«˜e!Ïr(¹4 ž *çq•dœ€mªôéQu±ä›fðô 8 U¯ºÁ·ïÜ2–‡Ý®Ø–yÅrª¶µ“¶ÞãbïPWläŒàp�ÕjQB²á¯Qv´ðÕ÷mwò¿¥~Üß]�Ý—þ'Q<”¹:L�:eèÈ á„+§‰ö U¨ÒôzC€µ�*UC0#NôÌçF9µ|Q™çu¿¹_å ¥XPU’¬?æÃ`ùúN.<.’ò³‘€ó-8zô9�-+çç£~[(bÌþÔ1—±Ç•;ØôÚíìw9쨆¢BŽwRü«þ\ˆefª±3¤®SÔ¡�v‰ 7¤EøÿÿІ[�|ÎÓ®êÙÎ|K¿Òé`þ R6`ô£ æKaÖ°ÉVÓëc†ˆ¡!énÇ\bß䫞ý ÷›ë]h´[ßsj'eKÂí C/V¸«¾4T‹¡-ò§PÈ*î£5µ½äL„¡ØÊèøq.ì&œ¼rºÕáÏÁIÈ£¨³ÿ‰Qgl1�µ¡¹ÝHž¡d£Ûø»åùü°Ð €Ú¦�ÉEÒì`ãhE!àhß�iƒÑò÷äCQoMº¹É H ¡gO �Ò¾³ÜnÁ l›—2į†Gå礎6†æCHÉ�‘< X!øãø<#céŽYÕ^;�×cÉ ¿áõiù6yAÊ9ªmÞ!#Iç )ã4a iw{[ê{>Ù«z´ÞÁsÒ쑃B  ã€š(GšðHkÉÅ×� –ÐxÄ=k ˆûãÇ;\U:@䟤cµÙU¨dûlZxÜ8¸µsš¼Á”}-{¥ÍŠ‘ÀbŠ¥“oi‚2¡¯)H”{°(šÔkÀ¸¡þ²dç|/z†‚M-ißž³i”¹µÁª7B†÷� Ô¡BËÅú§ 5ý›I�È«*²=$.ñ˜�ÁÀ bpæ ‚�Y%Ç Å0Í�9éc!ÐÔ¾Ž>±ŽÑ!;â.0�ó05¿"Aý3T“HYê'«%:°i¥ßĪçÁ©R@_#Yãrß(»}¸cv¼wÙÜ£L;ÒÎP´ ]ImË–¤c¨YÛì™�Ø¢ÝÐpô¦«šøÏòP^š¤=Åùa¸yC“<0å}.ØÌ¹”FfG•öø�ULXæGÀJ >½P-lVk%Wp «�G“Ä M}Bg"Mu|ìõPþBŠ�ü+˜K™¦Ê~{¥ÌE`�Çè>ž Ü’ï ÄÙ(òå Î@ºß•O uÖ{I�—lËglÜqóp8~Mj=a«�DlðÕL~zìU"FèÈi“Å% .©SKAC<Ž6áÍ„B£4mÔ¿?½Þ°ó)*ŠÑÛþ‚3|û~�eÈAŽò*ñc:^å”3ÖÁ½@Æ�)¥ßÍ—óŒç¼-)ý[ҙ߱¡‘Z¨ÿªm ©Sç Æx94E´Ÿ¨ÓñŽ[“Z`éœW‘—„U¸ ¿¯§„ÞSç­ö¯éËœÒ}ˆø~^|ÂZVbÚ—†c˜K,•åul 6uóË�ûÂB\&¦x¸èøHØìäXÖJjêpü¡È›ÁE*gƒ �=*Š7]¬Ì=”'þ&pQ“N6o|{,«ÒÆY!¸òÆ­Ø“›ç6m2&t›ž#ä®Kžœ˜²Íå.S“kø'CõPSiFd�ÙãcqãÁÔ&ž÷Wá,a¹î-ÑÔ šÔèHR©Q»NÍ©˜çˆÂ€3WjYÂÔ$³29ÕÛÉÆc¦7Ùõ{*L«à¾Va¤^XQƒAí‘Ç¿#νceV|^a,8?·ä.„<»ºl3À€ýì�|›ÒcNÙöò÷øGÓ�SV@ôèr”51Ýi´¡M—7Ú§wÉ�y>ˆ÷^$X´¯§6lO«'­Ã©–9v&)£ÃI ‹E)€^0n•cðîmž`U›Ô´Wp;ô䙆#ÇC·FÐê]uLò…Ÿž{\²Ýì£á-W�Ú»;µÙñL߸hAáoy“/ïÑY�éS(Ó?G­õ‡æ»ÉWãvA'ìÅÍMñ)LåÌçÛú •e¶Ú`¸¨£ß /»þKæ‡V#«�ÞÁÕUCû“ºY(ª¬2­©‘Øú�¢|ìo‚Þé™4Ý·<±|�¾à7&ÑÀ+¡ÇZ†YUÄVl"©i‹-_lÌ;½^Ua  ð‹“ï.€%ï°+ÌvèãùæÖblÁW>P1Oøv®Z²RZt €»‹< žê¦¤²B/u n«®\-²R¡Ôÿ´Oæ©r‰ËÕ&L*äÈðš& üçÀ@ÑuKÀ�‚·^»ê³J §W‹¡ÝÒ¸nHeñã+#Sã´p¥€ OíÄ©˜#Êÿ‡åg¹eqŠúõñÂ.<[¨Ämþ “ü¨ÊÖ½-=Ô»ež€7_™y²S[& Ù¯`V¤öfåß!:ê—%•�9+›Áq±®yõ‚Ø9ý?C™Âìu^!Îy?>yAÌëÑÚ ý”4h6y°eíÑYJ–²Œz±>œV¥üDÂ\ çá))ÚÀ�:x#ZÙ¯Pâv…)Ã{ü_×0c½'K±^Bâ›ZÌL§À¤Ô&|yëë×zçƒÉ>ád•-tûií6é6þ-ïguº75”&ç§Ñˆã\§�ç œMvqU@î©òÚ‘ºƒ°{«/ÇLDND?³‹d‘Ëk#Œ¢G›  Pðjd÷U×GUu8…„žÛl¹ÚBSy3¡16kßÞ?yÁKð$ëî\y¤ɽÒ÷%¶ìÖ-­ P5 =ò„†c|þï„®I´B¯A&¢?¹Ö“`x÷ù ²J•°ýÍQG.Ǽ~1èp ¼¢hZk”½kœîñ¬V™€{¥òŠ×hã*VÓrÖ~”it³¿]‰KH'y³ Ù}�¨�ÁˆÃã¿Õ¨ax•k÷”)BO;ÇoÙ‘íTp§õÕ&úã|€AtQôšŠ»Ý+¤“):&Z¦S²ß÷óF“�ÞGG.£œéSß©htf$l[P³PË/ä#t�©M‚ýè`'Bpþç¿áÜÕº'dSgµtÀ~#»( 딹Ío™¬YÛÉsq4’i¥„;ã8 ©Õ“F,ùÃÒ(¼÷韓þ'&8Ë%‚÷\§ñºc'°£›%`eÖμz¾PuÃD/gÔÅQi ’Þ’®*` �0—J@‡.nÀ#7‰~•r#8`\‘1'~ü€ W7þõyÝ–gšË›kÖ_†�-8�>>˜¼½Õe³À%)្xõ2©9>î9*Õ�&šÝ!óŒ¥*b¿ k�kñ瓳:ÑaÀ>��’ô`^eC5˜ØÖ¢.+T*»ÌKŠëµíï ìö}|)$ÑBLDK�oÜÐV&¹ÿR°ÃLÿ*˜M©s¡i À0æ¹™O ¹¢¼û�[Âáù ­b¹1K^â¤]U¬Lúrj름(DBupbfæ û¿Kè /Io íÈ$r„ÉŸ[(ÿ‡r×%/¯¦s–‡"WEuòd>;Ž5vz#ñ2¬†�ŸýÓ´#°ÄåÚí½í¼¼;¬X�6~…�š“²lÝ Ç… U<|÷,)ÛüMr­Ÿw¹H]ÒlH½N oî^ÿ³ÏFS“§Þ·Ú³*™û/Çöÿzåu »�Ûó¨�iœ¨NpK¼…ÖÚYl0$OI? ùEƒ\�Zœg§]­ãªïXø-Iß7Ò‰gòm� ;ˆ¶k›ÌòZÞWqÏÁ“*×bm@ŸÚñ(aBRO²%#×b±MEÈi:h£¸^i“ÕÆ´dÑ =ã–cò‡kÿ#JøËZn ª…c¬ëÅCÒý…bw'»Á™Øn$«É€JÒýÄqÝÍã‡ã¢=-TWj¦ ÁS2Xh÷ßÒ“=_  »E«_vGÕ“B=rÁ;tta\¾Ç-‚§Á`,´YàÛIP'8aÔKvè1ô»ÛÌ�ÞVˤ —³Ü4ƒVI‡fÕ„e@Yú8ál(ž‹´¾$Þþåι¨Ì׌ ¨0ç¾"�‰ˆ?K: i A”q–ÖUø3’΃KHH!†^œoU‹½â<öC³ ¹©Ú®CqÅyÍ›¡A ŠÝÛ –…®�˜(Ü•.îØ"‚)î£øØ0 „Hã¿ vÁ�·†™ZßKÚôú/A$œYŠ%-ëÖCVâËŠØîb/M JÔ¬hg4dØ€ WP<Õ{Àÿ¸$KEv0ðZȦ}´œËGL$ίyç3–¬Þçh/«ƒ^b°àÄTÈÅw5zXÑÌ…‹Ç´ÔØ%~Ñ)sŸ«Ÿ¾øR6Š=¼¢˜Å÷Ÿ&®`þx®hƒès7Lº+pd³/?æÌ}Wûå�>—Íg³«êq‹÷;‘07BëétƒûµRݶ@İÇk*øcM$7ç'eôèÚ¹ÞËêÃi×vD{À$µ¾)rÛ)„b9ëy(äþ·Â½¹s, ò”uCôÑ|­1\ªiôÛ1MÂnÕ¶RÝ. TM1)RkA!ú{Ȥµ º×Aýóo@KÍhÖV0;áðA£ïzN"ÐsNÙò_â…Ž7|9šªé<®Èw�«!ȯÏ]K«íÁ‚|rŸ�=VÖ2øŠNóüiŒBt-.É‹ñäíLß�Úw™ÿ*НCÒ©lÆÀ÷åþåEÿ¡,•Ž»ö|I¥kÔð¥ÙVö›K.Ë[r \ê[xí?wîd»ã�Η߃Ä?ÝÅŠ¸cÌD“Ô¡/-�Àé’þH´KÂ'ü¥= ’±•„ƒr|_¢ ëÌ~‡Zd”ªÿºý•Gß²�~{ÊÜŠ2¼þ¿Û d.\ÆžZ%¦`Z˜úÞfDY|‡]j˜ªz¿ø‚Âæ¨vÅ1Ñ‚ „r.òüÿ�d\ .·”Q 0ì…E¢zš¨¢an ‘ƒJ¬*€ÕhLW#Ƙ{Û€ ¡Ä0jÇ@L³g× Š·ÛDdËTƒ×õ# †DAmo¥õÃO4ï³@�Ç�Ù3âw:jÑcb޹;Í<¶š·ŸS5VßÕÖÚé¨<<¤òââ@� *ǽï�¹ÔWF˜¼�N7M®iµ‡›½Ãä1£_uªŸ.²¨qõˆÖ§Ê>)i›�(Ç»í G¼‰œ³’„¯3€Å;@‚(W­O°¢ +»Ǧ o?õ‹˜ æ>0åTHÖLب:NQJ€£º±²*T²K4…â=×¥‹Q–%tîa->iRŽŠ¦6+ý1dÎ%ù¡Ÿ`ù>{ãŠûµ“/ÿ»LÊŽavÕË6ÁøR92€Ý¬ÊʧŽ_ûí¬¿ ŠT7/+À¾9ÉâCt,Å:w>·é*#†¶xžç'›ò üüp7‰däµ0÷·|>òL�}‹œ–€òÒüx… Tmå,òõ¾Th�Ž‹·rïsäNh>ùS÷�tiìJLNQXˆ'�ö,C Iñôú¾|”í°ªŽ'Äð<Bgc—›féd�žu¾lÂjçCvd­ó =wDÈâÃ>¢²Nl}¯‹‹àñ`º¢ã˜Ç*¾D dk�T»çY–ß‚èaã©8µgÕ5Ê€ÐßFh¾NJ›îº8�•���Í_ ¨v=Í–BHDOÊMÞ¨ý©¸‚ùmËï”ÊÏüPhùÞ³ÔŸLâb”¿9yº9 %32žG�%voýÛÌhø‹b.ërº- ÷ÆræÌ ‘ÍTp-ò•’ë}4Á°<6¨ñKµ™�ÇDX“µ-F?ìÌÆÀœyX³BØÁGûŒÒÚö_¡ÎÍV’Ë"Z?†óòÆ«‹z[,x]'¤‘h.næ Qw´¿`ê¡f£Ò”{+ލ(ƒ0–Ú$¾ωÈ~˜‡­×®tÜ"¼â•ÊþŒ¶MìÆæø¦,Xƒ�¤›yöu\¬ž—¸Ä'ɱw~ à™*˜c8vÉîÆfä\íC ‘%N?ÄÅÒ&¦e’õ¶ÞÁÍ3“¹ãŽÐë~J¸¹Á}ÎùÇ„I”<}IÇÑÏýǘ¢Ðèd­Ö›¥B¯;�ƒ£G ¥Ù{€¢QVCåÞ¨g$ ÀìÍš.zØ`‰Þg¡É õ™as­q£ê8°0âèD½B§‡$©+·<½ý“sçE\Lðè�_î*oˆŸ)ݯ=³žW­�Ü L lN:jX~/DD¹Ý¨jØ_9È’¢3Xºå/í;—ò]�Vx/ •â ®�¼~m+B› ¥‰r‘x¡Fòš�Û¸(Œf¨ú5b¦Ð‚çìÆ‚’Nċ̸Ͼ„Ô€ûâo �{aŒ„cóÞ±óY5úÑ£0#yvB ½º|[„9À(gøm¨õëŒÿbN.­õçíæ•¦Å -¤™]�ÈV[f6;©c•�™MÏW?¹0Kù‚ áw1\Ðq|kñ˜ä-‹‰À"r½>>¢%Š¡’Š­e¶LüúÀ ovŽ5\ß«_w²ÄVH™.~ÓŒN ¯±ÈNƒø˜¢–vŽª5};â§ ÿ\`ü6~¶,<<òn–æœ8JÐKµÚð× Ã`3·i1‡Ú—…ÕWÅMÓF¦ýQ¸9MO-Ä—~´iZ>ˆE6Á�\æêK™ÌË‘Kò*óÃèrõd‘½Ûé®[uy¾‡�ßíz"o=ò9¦Ö: û{H£I–±¹ßKì ‹Š^X¢EûP¨âÌÿ¼µ7Œ„o™¿/¤«õ;Ñ¢‡¸Qæ}392AòC £ó‘¯!”,Ô_ü$ruõz0¹°A– #P…¦‚fAoÏëç-Ý?%” Mw›1šTºÐ½®;SÇÛ²“ŸƒŠö7´'t4 :ÈZ¦cË@ï²Fxe)ΚØ%þ…ˆôÄ]ß›ÿ¹ì²¼Ê¨6­®Ý€dMˆ×EE§Îª’ƒ¸_¶a¾ˆïj&€[Å|îãõÊ;ñgÎì÷€«Mw$Ácá�ôrpý ØtðÄ®ª�²;=äc#cØ[eØIMŒ´óõFy¸º \¨1 µ¨W`úpÌò©VŽ:ÚÖ]¡/_²�½¬È­²€ž Žøá?dŠF€{ÕÓ}Æ,íÏü[3_Æâßgl;‰I¾ êü•~a…þ’¯�zÉ„ÌáˆuIÍnŽ”qþ¨Ïj‚¹s¶ âµ�dJd쨷L9šÅ÷tXuëÂÖ Èr^Yä^‚(Gö©ýá »¹Aä…—Ö–uè{4%ú n´#Ü’"ø®ší†ÙžúÄÆüxIj°0”³ì̵Z*×ý�»ÿRØË7‘gb=–Øj´�¹æ–¬P,ñ»Ž…‡¾:ÿ`UPCVYÙËzŠGöeò“{&ŽÆhõDê^o�Ò�ôp™Ì’¬ÛЀÓ#Go&“áyZØ}~,ZÉPv-͘£=)lD~n£0d”ÒMð)Ø_*®Ë©jD7’廯ÄÊ´°Áô͘ W’ꤶ÷î£sœriõ±X ZXæû%è½ýó‰:%C©T‚{¿}Mõ5èpш›�5tEòtëÐIR¦ÓœÿÛ£DýŸûµåÿòF‚}-¶1hãÞ½Áë| ƒ¦²ï´ý>ähs¦S«ÑÜß(¦¥‚“Ûæ�yÓ˜æ½ç&bv‘pÜy qéYØ¢“‚®e™eH\=à79 ”“‹3œê JŸd$h=ðÙC/~\Wé;„Èy)@ýsO‰öX4B r fœt$<[þ˜õ˜QjýrU£ äh]S»JfRâTR'C …:�\êpž`{bM|ã|ïdxz’�=þÆAúèË÷ôItkãÑmi`›»F…ЦŽ1A'aŠ›z¹M|šÍ�8 Š{­Çº=cÅ¥ ("¯GÔlõ£€×oÆŽ…•£…”K�ÓlöP³�rÑmhš2úìøb5§ø mŸÑ-t±ŽsçúgfÕ¥øûg Ô:×¾M‚¾{g“.ö…GçÝ[i†_Æ<{ºtð›æU�ƒlD‚â?z5ŽŸ’*ø7o\<=Ò¯į¶Ê¦v¨çØÇ䃆צÔÕK ÛרgÀ~ÿYЉ6ß`‡ͲËÜÜû5™P-^ÍAý‡O:³ÕJ£òk†—�ø)¨õO;•G#-eE“RêÖ´¢¦š&0mær”ËM£ ƒ>÷ûe�PÉ|Ÿ’ìš•à…b¾s�âÙn>äHD ;…a”U±ª.þš�P­†â:[¼¡"õCyºiü²n œ,2Z—;¤á¼£0ê'Ùk׆‰½:HâS\¦Ü“·gw]ƒ¦3üû‡£ÈãÉüd¹‹9j`>÷ûµëóÊ[TŽËR— ÔÿWþi“©eųV~-äQW÷Q…sY9éñ=�½ a�;‡O™„jF?k¥`6Ž’‡0%òa­y0Fí-üŒ�=˨j×{N†Ï—|ca²*@üR�¹ßëÙq%\˜Ô(ánºÛ®#ßýÍ]%?ÆnNJc¯Nîž0ODwŸFªãô¼ÝE�þÚæÎ eÈ(§ch ÙàO#‹pÉ!¼yÏäGc)7|MOke#ìÆê‚! Ư§ž�¸×}¨{aëÛÄ!#{zîÝýÿõÈJ•ó3áÎÀ‡5=‰‰ÏtC¢òÀuŒûã+èq“õ®ÑÞ8Xééå:O‰ ¨ýÙßOö,)œŠ•nuQ‡ ˜��WfFMÝËÛÚLMTóvÔ²ðáD½r²‰”ÆcØ ÅÖK¶…n&ÝßV$}Óñldö 7v(Y×hnë‘;œ¦/hrר]µã&¯8ZÓÊÈ©0<™ *T{ÿ—µê_«yƒˆØ²¶lÇDbAÇ«ž‘N[¦öÉ3�Œ/GS­]t„qoýç(3ˆÂP™»Z·è£˜ZqBd›ˆ�O÷_8Ið°áþÖ#ZµVŠfD¯“ZâíŠÇß>º3, F(ç'Ã�Ò^ôêf8; ¦ööјf®:*aY;d‹u%é!çð2y‰Œ˜CÎgúÂOuê�G‰¬ë#q m7òÐwPÖôí?(”§½Òrl-y&U%ýú ×¢—…uÔ£=²õ†*¦„ˆ‘ŸÊô]JÇd:�ß0�è»†Ç Å7rJ¯K¬ FØÊÊ_ ÍNß§‰Þ§V1œkMJ½ß5+W6„Ÿƒìôq|· Ÿ@ãñ>�þà;©ñ¼ç.|T»¶ PùuR©á#Ußx1Ä�d­2w�jKôaÈü0ÔgÙ •¶']˜’ƒÿàÆÄ•üÝ4]NåËW>YV¾î‹'©®‡¶›¬Ôû½[ü1è¾^)úO˲ #I±{î -hp•ƒñ®ž[åye�Ÿ™¼ Õ#絿óËm`Î( qKCÝžjXº�@ÞJˆÇƒ~Ig³/ѾíüÃÖt…â¦<ÀÜ®)ŽEƒ|Æ…ê=¶SçU+3\uJ9Éøx• ) jùm•$ ƒÙÈ„¬B 4²ÜhË—?£ ”e=Ë »°$ÎϾ”•~›¤_W%ö�«¾adQèÏùcÇ‚Âzåš¾ñÒ£’›°vØ;!lõ ˜ø£B¶ �|ŸJo”<wÝ2ÙyhŸú›ž¼§`Ïî·1¢ÜB„êéØn�4æ3ºâõrÊsäåXâ ¯þí7@çN²]ƃþBë‰òä¬o¿lº¾#¢ öb©KMh½Pµ›Ñº1ô…5¥ÏB 9è†Ù!Õk$Ô¿$[âÖ€ïâ`<S \beÚ®ún¨¬ƒÁün²#Ç=SZ¼5#©ØþîËÞÏÔ"Ú±VV""Õ¥t•ë†Iþ�ˆÐq'ß‹¢�Ïöƒÿ¸±K‘?™ °ÎO •…¬ëýp¦ÍQÔ&,Ï9óðÇ–ozHÖ�kÓŽÿVc¯¨jZŠ<Ý¡û›S”~ùB€ìÑp˜J³òuJw˜æŽFÐK⃖—o:ÿ�–=vš•|Š´l××mX>éº¦Ž€Î£e¬,— &Ã�n<ÄpgÿÊàÆ_ÅÇJ/¼dÛ8og¶Ä&ÐìCw§ÜPz ¸á1‹šNÔ®0Ê»ŸpšªÊ£¸¢>N‚Âô5_¦ûAðõŒW/E�¥(è.Q —c´^à ӫϤ&úå"†6çoØ[W¢è�|$ ÅbjâŠdQ ˆy>—nEh�ùáåG§ù,ýQ\«±xE8âð™m‹ë úá;3Ù�Ë.)EçÊ€�}ûdAÆŒ]OñpÐF�Òëú¼vV&e]¤è•yšA,ǧX ‡›³.ö®Î¾wüÚè"4’?mbWúîèŒú æPÄNÎM”êœÿm«³Ùdžãawþ:«Lá#BôfÖÕï`^Õ� ƒ¼E4³IÇ!<#?ú¨½¢~—€/Jï8¯h Ê¥Ž F˜œ8·>랬°pøg|Ú:,lÇehxYR[²œWšêd56Ž˜ò'üùt$&/ónÃKJ5ôÂ*�ò¡·Æx®Zp¦e�’Ô*È3›Ò¢‰6¾û¶ñ~�én-N2ç<@",!¿jfly?Ã<Ë•ìžO¾B¸Æ#¦`!©ô ‰ÏP×qû£%Y2Âge(„EF`®¯Š*„rQUaܲe$Na¬ôtã)¹¾a ™á8úßE°žûj�äxœpLÜ@ÐØ‘¯—<{UHâe—~%©`2$”‡ˆõ‘°\Å¥•wbÏèÜCËïÇiÁˆ7ë©Òù?ô oFŒpÏYüÛ»€—ò]°� jåÕè$=Qs‹ä¶òi;YœD÷8îþª‡ ̳tµ@`õ^(ÁdiøŸÆe¥Ö‡µ\ Ç%tm—�C"?‚U¸èÑÃX#å-¢E•ØŠ”É`Ú´»ËDZoyzo†v�|ްwC ÆÇ‡3åv «sx Œd€F�6×úoJݽ’'Âq,òàjùîŠWn•ç¹›D…õ»@H%¨›Cùgº½«é1ÊRpƒ6íÉÂ^Iûò¹êeÒí+¨‰�*¦áÃé}ò ~ëøÀ9FE¸'?{뿼íA ¸-¬j©…ÖË–ç2IN}b`ÆiÆÔt»§k°µ‡LÁ“ý 1F…Ûˆ…qQçµKÌI úÌÆE§ï¤œ<²a�ö4Ùˆ7rY<çˆg¤+uƒž²d@á\ Ý±%ñ´r€€[Þ Ïá‡ÉÆÈ:…ƒp:“Õ¸l£hôH°:ÿl¡ÌÈ®’„¥Ãâ�†ü9ú ®¯ ’}\�Ûâ¯uFñX1zèC¨üôt–ÈÂÆµý^8#b‰‡d¿Óúß¼CU. E¤›ê÷©ü±ÈE–ÓO§q[�@äÀ÷Êë”:ðZmïŽ 5›(Á�Xùóå;«.äPû°Ý�EÞ037§U$[mH�.3vN­ÛŠÕAÿíÂìDð&›„ü¡üF/™¡Xóè‚2¾óBÚ%ƒé•¸ £‰„"¿0Æí¡¸€âù[¸ÆoÅ3ÐWÞèJ$пZ\:ΰ(¼D wnl(×Ëz5Œ$s'�ç­�P¤k¯¶­"ĉld�!ÆÔ›æS$ûâ]¤‚Þw`�ºi1ðT@¾Fy3!lÕ[w‹4á¶Ôâê­=3£'^[ƒÆµT±IíµËP•ßÁF|8ö¿ÞÑã ïô;€|‡ÙÐ�"±Šüú(.£ØlR¡hö )ŒÆzZ’‹¦Í”Êç=Šª¬§W¿ fѸ×)6Ä* EÝ<••_¸ö‹¿úãäg¾©œ?“ÇIÂVLè†É¥òVU°¯@Xæª?šn…‹¿gƒ³ö6‰ë3Ù�(R¼Âç+vyÜܹ[�#ÒŽù”yÌî×ù<%ŸÏMs¨ßWuÝ”£âWá¡1þsvËüÞˆ­¬mÜTÝþ L‹”QÖ3E0iÂÐ�÷ÉYc-u=Q¿�¿OjØgÆÉŽš‹¹ïT„-)|ývGGao“ÄÉv÷¶�BšÈï\AndŸn¼ÆRÕ�Ÿr§+ä‡ W�žÝÐOŸë»HÆiU|и‚5/µWR+C$¶zölÖû¬æ¾Æ‡ÝPÓb ®ÚظC݃Ôimž.ü¹6eÜ8ÜNv¿ãùX¾R0õq É Œ"‡,í8—L£�‰O?G[¢Ž7Õ¸ƒ œ‡êÁŠ˜ñÑÓª¹÷«ŽwÆûâðAƒ,> ˜óÊp>d¹D#$^™ÐW5ne;N.)î¯o)�!zµ´V�Þ# Ž¹ºæSÒ®Q¸îj&óX¼¥Ÿs¥å/t“·¼m nºœM-Ï“rhî ûRû¿¤‡Ýðü]ÕE�dhÆZdoÐï´ÚWuõʲCP“BÿGXÈ2’ ºjp-ÁßX|ÚÃø½4ug³¶Ä+[€aîkGÃŽ··–{ ²ÁÂhâ»�¸ñ"Á Üï Þ�Rª›´yú7ŠÎà5› ®‡3å6ÎmW6ß�DDS\1µ@&P&ô±êýb ÏêËÏ�ÑN9V¦@^¸Š¿õÄÃl—Â0„öB)y^“ià›hËð¬dˆrV^æõºîMøpÆ*4”¨P¢,?Y¢û›°W»n™|^�Ÿ?m<±¬l7hR™¼®8[ëÖ !&EÁ|g[™lNV‡ë®­‡VǪó+_k#€{ŠÞ7D*×µÔÈo=!Z‚Qr™­¯uÆK26C5Î endstream endobj 1689 0 obj << /Length1 2259 /Length2 15826 /Length3 0 /Length 17180 /Filter /FlateDecode >> stream xÚ´ºeTœË¶5œàîÒ¸»kðÁݽѦqw w nÁÁÝ5Hpww‚ûKö¹÷ì}Îwÿ~ƒÝs鬵VU==*2%U&Q3; ”Ø™‰�™• '/o¶cce’q6Y™Ø™YY9¨¨Ä�ÆÎVv` cg ?€ÇÙ hêüæé`geåC |‚�ŽoJ3€‰@èl¬æadÐÿ”윜™LŒ�ÞÔ@°…H÷æ"ngïáheaéü'ÓŸH¼Å˜²Æ¦6vnN6Vc°@–Yž `çö&´ÐÚ�&@Kc�9ÀΠԨ«Jª¨>ª(ª+©Ò1¿Vu±··sü.âªjê¢ j’ #ࣺªÚŸ¿j@ð F€‚Ú›þOž7Ã?îò’j¢jÚJ’l,Ö`¸�¬þ¤ý/nÔoÌS{s5w´³ý+€ÖÒÙÙžŸ…ÅÍÍ�ÙÂÅÉ™ÙÎÑ‚Ùô?5K+'€›�£ àíÕþU°Ù[9�-�ÿ ð§'9+S Ø øÇIÊî_JÛ·R¾9½É�ÿMì­Îb‚þepÿ#�¥±Ó_¾rJJr[c+°3l 6}3t6vvqý%{ûšÑü‹  îâèø'‡üÿªÿ�æ©‹Ù½­Läåcìöß3»8yþ£6ÿ¹lS;°“•“³Ó¿"æV àöNzfþK&/ª #%©ªÆ$÷6x`&y»·ê€™�Ý�ÿ²þOTBîmyxìììÖ·!•›‰ÛÙÚ¾±vBøS> «·:9Û9z°ü÷XÛ€íÜÀ^ÿ±¹ØÌüOÝÍ\ìYÔÁV.@‰ÿ1~!ü-³:X@ÐÝÔ’åO²¿få�˜í�ø­>^övösc�ÐÇÊøö‚àådì 8;º}¼þ©øO„ÀÆ0³2u~ó·­‚ðWt°¹€ï_â7&ÿ«úŸ ýk›Ò½íQ3;0È`4G`Q°s~ÚÿvÙå’r�Œm�´ÿUÑÿ63¶µyü‡áYhÿP¥U°s´5ý—ÎÊIÊÊh¦dåljùWÿ%þW&Q°`bãdfåàfÿ—FýÏŽ½�îÛñcõçôzÓsóü—îm*MmÀ@''7ß_*à[-þ‹ö[þ�°ˆ~Rú$®Áðßsó—•$ØÔÎÌ l`çâ;:{ °¾ ;À‹ímªÍ€îM €…lçüæ°wqö˜Û9"üé(77€Eì�è_ˆÀ"ñ7â°Hþñ¼YÊýñ²XTþF<Í#¾7dü7â|CN¦VV¦Vަ.¶Ëß"˜¼uÝ dìdùo);Ç›ØÑØôí|2wþ‡˜ëÄÿªaû—Øèüö|ÿ–ÿ—ÃÛšLÿ�¸ÞÖkjzkÑ¿±²XÌþßÿ®Èäàb ú‡Á[&‹¿ ÞeñçÒz;·þ6y«Àß+ä|[‰¥‡½%ðŸIßdVÿ€o´þNÁýÆôgRþ­g{“üÛí�•Ý?àû¿Ó½µÍþ­jvÿXÛ¡ðc{ËþwtηîýWOØÞbü£o‹Ë?à[IÝþÑ©7rîÿ€oä<þßÈyþÿsØ•þœ÷f¬Oÿÿ\„aUgG; ¦•ÙÛCÀ?Lä�ßì®Ëúv±½Éß~þ÷�þ$ úûý‡·˜˜�»çÛ1q¼-’—ƒóOǹ}þÃÕô_WÒ_‡àÛ.ý_üç>�î@S„…Y;S�`ë”úÐ_Éü‰R*>æãra-Ù8è…ô‰VB<‰œMrà‡‚€Fÿ ê;9i~}ߤp‘U06èeµ)±büÊLYdËØWÞ—ERt$[ƒY=0C~Þ¿´�œî@6;O»˜s2£9®™ >r(Î×ÚqÅ>öŠþ;™\¯´y9Æ­pš­Ë„á>�FÐF8?Ñáüz�iÜ-º@?e”Š3" kßÕ�¦Ã�’§¦u¬Ÿñ^‹ßÛ ós¹m7TÐÐæÊÐÛÁ?‘_#ѾE«›56Óý1ùÿAV¶1W±6³­7M¦¨Ôó'u§$Ø!]vóYò44fåÜÓÿ ˆºE|ô¹4sÏ=#ʲ;*��9Î1üPþÖ"ñõ�ÅCÚ³äUt«±M§ÏUb¯÷rÎóá×êuʘ|4ªžðÂôtŨ„8��G i5q?ÚÇ/2†Ò»3<>”ÝMTÑz-ŠÆK4ЧM�V¿ãF¬h°¨Æíؽj¯Êb•†”WÜpêv"Åûµàx¨T�z>8V�®ùbÏܹÐXY9Ü=ÿðñOWx? ñ“à IùV2›?Ýi§%I(}jI.‰N¾ÃÞÐ/³²/•°“‚ñY¬µc�:’¿6TuøÌ&s*‹‘\Éó—rOg.Ö¯ŸÁÒæ!J„W߇<×]9¨¼tý™B¿ô{b£  �|&œ éµn”îù=£™AàŒ6¡ª„FÄ{R6qÎø”¦Þ–@¶|ÔÚ‚«[-VAâl=„+©Íþñ•î…’e@{ÚÎ9z_n¾ Ú½À�¯äbî’9">˜¤Ø`„N¯ÁvøiÄ^'=<'DÑ9HºZlrö‰æÕÛd=>y+úðf}í 5Q9]p8_f¨“²-]¡»cÄ飋5&ßtêY¿?UtUtRöy̳tQ ¶)ÆË8ìyë�Ž­g±�±:Wä¹^mÌ‹ß�§„Kz î‹Ïuo=nöÜÛé•t`}!)J©]‘‰Ø—ÅÄ®TLL)±IT=§‰Ëʯµj›É|E †«ÔèbgB€4‚J­VÜP@CNò’ù%µEšöé%?µ%¸ !¿$wCœÔ_�ü9A*ƒ?¾Ãò¢¼š…³†Â¤¦ÍR  À)­Œ@¥D3O$?¿Ù}&+ gôQñ¬¨gÈ,ëLäúÊ©h¬àß?¿”W–*‡ÅZçÖå†0µè²—:`¤xDMýáëwòŽk“÷†RÁ§ò£?Ï.ƒ4�0è"ÖMµÖ[fT ¨+¬i30,õ}°…Þ�á¶òÛÓ�>#ÇÓ¶«Äв:òëâ<"Ph¥ìødÝávˆÁàÞáåa,Úá³ÖÂQF˜ë4ÛÀ ` �éZ¦(ü[5(Ëæl}é¶�=ÅäAç**Œyž%Õ_½Þ¹å¬V*Í@.ü~òxc=E �?…¥Ù9ìGB^r•q„�!ÞoªP—huß`£q¼Àè�‘)d%+fX¶—øéjóÓÚ±>)<}{ñYêUÉ–š³Ò„ô� $Of�+Ô?”Ï#�'í%¤ÜW">�‹<Ãi˜zð2d­¶YqéÇ)ω‰±áÏ]å‚\y‰+ù¦s©Téà½ËêJg‘&¯õ•a»*²â¶9ÌÂvÑS,újL{¹~КP:r Ìõ7¯›‘õ�5ÚZ/úH›ì*aðºÁŠh <‚˜Ð£Üºd¯ Øà›Ñ·ù&¯]Ù³aF2-ÿú†µþ�€ÿÁ¸I¦åUHÙ£9yº—á�é?Á»”!ö—-esÏ�/ï‹ýHÏéK,ªé«Êxó¿i«�Ïme<�|Æ`�½¥w¥‹f�#º­"ÆÌÃ!À™—ÍÜþXøÎÝ4o„B›)I÷Ì.N#àW©É‰ókqp [$ÑV8g¬ÜqÁ’›l<ö4à)µbZJ„3FÏ;®@FÆšãw9ý¨% )ü-;G¥\\DÁÅ€à}Ûnýo-Vu7”W лª‰íÚ!V/3¯ŒÑÓ½X©mÕht6b½è® ¦®]#«; ‡•`½’j‡,�㪮fš®~=)fÉ�`G™éÙE~vÅÙrÀû”Oi=9Üü…ÃTg¨Î[êFù§æjIuiDsö~ Ï U[¨1^¾IÓàÕø»ohlµˆeØÎÝÀ0“/剗1Nz¸k¼¿Dð7""]•ßaÌGŠìû>&ú�/O'ìÖ¬’Ó9Å+±™O(-Ë­ºÔl1!nƒl’žž�^&Ô=)3_‚¸¼ô†7¦x‘PŽ3—º‡MÝ» R ¸Úü‹˜¾=?‚Zy—°ÚnöiÎOaU]²\”ÓdNÎiåSô[mA³ž«Èý¿ÖZïÆ>Ñ?0Ûn Y 6“¸*kYg®6p˜b©0![ÑŸ$â=Õå–ܾ_Ä¢ï¯ú žÌ¥‘k~yoèp¦Ø´×š=ªÏdÀyyUyÆði´¿íñZ3¬õBêGªÈL&6Cõõ΂†ÔÍv1žêÿe)�&±ËÈÀGúž¹/›¨Kï5„Æ>ųu.àÞÉ8­¶›T*IwTí�rÑè$1lÓ¾ùÿ1=?Œ¡M~�=BhŒò¹ñòP ìt±»=$>×rrH£ ~Í€!`þì¾—4ÏÔÎä–¡|ôºe-r(·%óRS%3­ Û̬[�¢=mȇ2~‘«Ú¿®àÂï°>Ìž«Oèæ;æZYº|Ç`LÙ¦õï'I°^;ºMÏZ¿Þ�Ùćʽš(ÿ�¤‚ØÅìöm;SÞ°[&Mq©fDö°nËT.­ÆˆÌ&ì¯C/*q˜­î¼W¹ Ûç<Üù–°‚Où×àÖyf8ÈÞÃÓ„ùBnój¬ÁÜ"µš®¸®ï:ãBRIŒ«"+}nâˆ8�Œy[y¼ví#b%a`� LÓ¹¼IQŽ™tý$`ÉRWjÚ"JÖs¼9³­é¬ñ&Qúú26³‡å(³�Ãì0 ÓUôk_¼<‡ÉìÍñ”¬ …ià9ÌŒBÝnÃ�¸riMΟåóÎkÍ™$‘n!ÅÍ+çüf_ 9­]QZv¸«ñ&¥‰1ý}T¿Æ]>ð]JÿomË1DÞåò:Êö c*âñ/ �³×· úp)ï"h‹SøëigÒ´ÃÜT²djüi|!-䔟YžSE”þ¦6Úz£°²+–eë?FwÃeÜÊ«.~G+…Ò{Zqî˜ì5ü•ëò‹$†wËøžQŒ¢KL/�¶Çè™ôÒÏã7ÆÅWz}�ÇëÇD“v!‘LŸ6Øo'©¢º¤áÈhk|Ö¾Usx¦Õc`^ä®å4CA5l ÒõË}ÂJÓ`Gç2ċϳ×�ë*äº)“އ� ¡Æv/KAK¾! "�³H�âDO9Œ”RJ–ŒtŠ[c$—žEÚߥØ~K³PÊ9WÒkb|º|B,YWZ þDc±ÉÝN¿ô9? «BhW°.eøÔ £ð+÷Zþ%“¦ÍìäVó“1CÈaY° ¸Kb•æÛo[HÇgÂ@@ÞuMØKÛmU„@0Â8ûkÇÂþ2xá!ûÒc)ZÂÐ:^¡ ¯ÔÀd'_I„V‰(�⤼JTA…Š=^ëçK —œ#ª¨—}(ÕÄ˵òù�itÛêÄrjr&\'kî³Áá,ÄŽ¯CRGn'ê  —ÂiÃÁ¶w“–×¥e—Û‘ÄkÐþãë´â< \*ÎÙ·{ìÚÉ6RX\¯¼©Þ+r3¿±€“ÇHK´¡F@‚_Ö¯©)Ò†§,XF%™ƒ;ô ÍÞ‡T¼žÌˆ‡¤‹]ÉG÷„¸¬y¬Ma¶á‘õuxäý²Bù6¡õ5uâ3hKJÉÖõ]}¾/-ì �ßJ *}ø)ü‰ujàê8°w N}×^C¥×ݱÀ6í›ðhàHNÈ�…¡áìš[¡àrò;—zˆ˜iòK„~/‡O)L#· ]„#k‚+üoY‹êNW?X(Áè?ÓTö” T;•oíψ’ ã6¹»>Âi{>†zÅ’Zç�x=V�àlÍOÓøB'Ÿ¿zxQF0v T«ô—Ê 2?±*¥è²N]uR>(Öë$Áªüàšžðçiuîk^—1ç�€¼5 «°nZ2'€†òFÇOýIˆS Gq3á=-eÍö}ü‚ý®’¿ß+}®2ór^ƒ0?Òe±Ž�r™ö;rPXÝT:Šãïrýp©Ð!¦$ë6•:m]~ØÁcY±þÑÔ\¢[!RÌNþy˜Rçuó$WãÈx�²ïÀlƒ¶û2z˜âôl2 Í8‘aÅc…̹쟀‡Æ^´øg ¢�rdš°WB”¤ŽGŒj¨eŒ2Iˋ®í©)MAh÷ mü.y7öÌ’ ·éXx†8œ¨¦æfüÏWÉ&ÌÏÚçºÉ¿‰7«]“Uš&îQuež£úÔʬ¿ �Ši¨µ^Ì¥ˆ;8GÌÑ2ßèŸÓÖˆ�7ù™"æ«„ šZ½6b  Dú�f©°qzE§k ±š›n±R íÖCûˆ4s–g{zïÝU%—…< á nQ lì– j…-Ãd¶\!d'·×™Te�åkºò&ç˶QO†/·—Dïö•XÞEçʉë‹4¥ì",¢ïp elíÊ÷ìy÷ÔBÃ{¶q‹ÇJxÇåŠLN é‹r7¥”Åä¤ÝÌe²^›hád-Ÿe•Ïçj™0.g»gZXгÁpW°¾úÜ ±²rAµ%¥/’²N<�dÄ©¾ý3šüdïÇoá‘ÅPaä馆T䢖/ ÷`\¿_.ø�†SIàôaM{[Ô,ß¹7® ©;†{â´ÙKF#Þu{…%@“ÿî_W(B?ú¹d´!ÇÍì*˰ˆ "¤³2-K@å|>ëÀù‘/Jñ³eŒiÃ"5XHúdutú…¥“/-!û ÔÕòèáÛdz ®sÜIÿF„ˆ`3´bé‰×L5å}‚4½GeKÖ›:é\Ñµà‰ÆÅzÖdµˆ®Þ%{Ä©°"ÿ2»4mB8\{õÀ›ëϼáò }em >Ý-bc`�i F[K,ªKÝ�i)>¹m¯ ƒ>â8ïñá«}¦æ@ úÉ_­X#Ê]<ݱ¨Ï$šp·ÛG›—N®Æ¦8N6‹—K³3 ašûÉ‘ñ{.)ŸEG9i{ºŠÀ�(eçd¸ÖÓ3¹ÕïCe±rê]¢ÛaÉ�Djíé[æ¥ [éªÉªAæ$>¨§\TÚßy¿Sop û•z“tÇ1Îø<œ~¿7ü¹ßÙdLê‘ÔC2Î3쌇"}c=nyÚ¼‘åƒêXœ PÆöþE˜H.×YváÂΓCüê}|ÙG°aðU1’‡�J,—»}5,™–_—�+Ʀ‘%tìKAî L1¨·èæ¡ –ì IJ$/ìØ,½‰YºØwc*½„ã…Æedz'Gø„ÃÏe½™—¿Û-U}…мŽš«nqƒ£[ªÓv5^¿9PèVºê¡a8!"Eéüè=›H RJ ¸E—pM/WG§ÚS’¦Dåªgb`÷ªQ»^øÐ1‚¥´E“¾Œ£öJÆwù†ÉE¯íüÖ>”».�\ÁG•}-½z˜#örK3�L®½Oä°Ä(„©’D棗Ef5)CÇDަ¼�ìsV­¡Ë°Q¿~�Ž…ÊKóÈßþ8H Ï" ,ÄF‘®k¿�’.¡~l)ÓÆTž Æ{um˜ûèæÂ‹_†•‚Ô‘‰–kÛR>/˜³ÊZ¬\{ çQù@ I§…!PÁÂԽ٘œ¡Ôü¾2«Í`Šã"ž*ÎÈ¿~'Ô¿Ρ0Ã]¼Îéð«S»÷òþË ³ \gÅf$Vî:q~hhR£âK0° "cfŠ^ÉòS•{§f- V%U½Q¬‘–¢�ùJ¬Ð}õ-"±nŸj•¸�GÙ!ÑÓÑÅÜ7½/«I¸ [§‹ÓÖ*n¦õÆ�~ýµU ÊS;'‡aÒaM !™\µ¤Œ¬£T%±÷u]¦BÍ4”Mn÷,U#ˆÏ�[Tb—úÖƒr×)‰ªÊ*jûeݳcØf~sø–)Ú“*a±W¥œÄzõ=<–n‘Ž9 x=ÓÚycŒ²&�dzÜ@ÌÆQÝÑÖÖ,Å `šn”Ê®3<ªÃHبN˜¾ÛO1¬ëºÅê¿}eé–äFx©¦ñØmCaú:»¿_ÜÓÒª‚PÞÑv+{‚Èå’ûõµ н[Ñh§Gk>ÿí<ªP…X©Nç\‰­qÆBü~±eÃoëIçn߆rq[W,âËQdÿ4ÁW#ˆœï æ3õ—¿�La­>ìVÐ8Û|� ‡ˆv%§:U± wóšGÐׂ”ú–Ÿ#_jú‘‹;« l­Ü�ØËiEvȱUhtš¥�·*Ä~ì³ð¥ß 7:Ò‰Í^ã1Óã;Úˆìfÿ7‰ºÓX}¿2Qm˜ó•« g'ÃO�­kÅjH¡ô-«se”7~SêlÓïÈË@›£]dì‡Ì‚Qâ¯ó œ1ü!-�ßbqRÛ‚öô˜ì$hÉ¡¥s9¸¥o“©}k¸¸º¬¨àÑtdzcÕ,^[÷�Ÿ¡‹û®½cÓé0ói³Ã}I•g†‹¨‹–“‡0ÆŸÄ>�‘JBsŸAr/HTé’A�òL�ÍÖ³í µ[)MQõ�%2NwA¯Þ'‹ê¾·Û5¬æõvÀ’/·¬õüt]ëX÷ØKä/R ~�äÕ¯”�K�M&îVªecÇw1¢?áÆ@BÔ¾„9äa˜íUºV„—hÏDÔåÇ܆èå5 á¶ÿ&£4¾¦è³à¿““ÏpK“€èÁÆå�.ç<(yYQZù5ÉŽS•V´Ù9++ïãÀ‡´/êu~e®7tîzØF,Z�!ïqØ!oµNX@ùdÏ˱:ÂâÅ ’ebÇ9%Â-ýp�Nqc¬êw¿ x!œ¥˜ß#ûXd³TGËv’Ý·uG&ÄZ´ ¸ i× “4½øFõñÞϾ ›„U‰>TN¨úʋɥjT™íÀ¿[Å›Ç~­æ»B„”i“Ã^mgùB”‰BÕu§y¯¬reiõݘ•EP€îæg8ôé÷¯ÇPiÎ0ž¡ƒ°Vî.ãBÂ’EH¶R2ˆ²è㹤5sõ Nç�ÇOQ 6ÃÅ�kg­ø’WÕñxž!#¹X:î­&Žr ¥9ŽíceÞ”$'*ÇP´÷@ Þ�Ò{a†„ó2Âè$mà©üx–¦oÖ�{µÑY¬À)“6VùÑ"+ík±mç`lÒ(Û‡¸Iö<·\øà³}iRÝ�Åz%®xIòÊÏëÂPýÀ_òÆ�äÝ0W¯Ÿá£ƒÙyÁyQ¢‹+ói¥ >ÂëäDV”¾šàx 6ñ„¿Ë¡þ){í¥³ª”ÉÛè(Eü0×/ï Öð,Lhe"šÒÿý†-êôHs’ꑠ΂9T²Žò8òvÞ• èÍç£.8+ГèR9¤"=wââÌœ¶¹™/{»öïøq6ºüAYä�Õ ÉcJ1ëÃÜþÔ)ô³%£KÈF<òU4ðÂëí¶ÁŸkök²òÕ‰dÎQŠûx$hHû•}0v™Ð8âr:\b¾Õ»¯a�œu¡o>Œn]çªéã ¬ùSæ×%ì�_7™»ª’¤Óv&tv$’t«esóÎLÁÕ�Úê¶øZƒ¢™HÓ£«ß™~•r\8)ä"JÙtGCâŬ·Å}Heà6ßöœ§ÚÏŸ~a «¢Åï‹%ŽÃ7ób6�¯wO>Ïn}Bµ=|ŸÅ|¦\»nû�m¹‰C�-—1pÍŽí‚ÑLæ¹%ÕWMEmÌ–ȇ bVùd›!B!‘‘Wãì›H*Ü\ñOÜ�¬ ìÂÑnA;=–[ÿ:L¼mxÎG}—ÓF^<�{¸ŒKØ�¥1†|áØ`ÆÐ:,Gµ¢#Øž}çÆ/ÌrDKسCÕ¢¥É¦Í�´Ý–[Ð#áÓaÆ;wÞKó¤å+þïI“âö¨=%~>™‡ù]ö™âi˜œnb‡:�ᥠ2dë%l»¼p�(® ÖUý ÌgÈ$I:½Ó©£Ýe*Éâ8C9X³úiD^ Ýj.�+H‡mP¦ú™´™Ñ¥÷¨Ù±]"³ë#ã±æÅΫg‡“2 hÃï8'Íx1x˜Ñ…4 ~ý¼®úÝ»‡>�?î�Ò„ÞMG ·lø‹ôô£ -Ì$ä ÷>Bù®.œÄ~¸‰&º…<È—:#YC1­5^(\ÙÊwGšèZ(úGlôéÑ<^m�]ŒÆ«®,Û·2L“å‡Äq¥ròE1²Òuï¹8‘•Ç-`Ot7õÆ{WüóO�V;9¿½OÒÁ ß½;´ïüø쯮ÑvŸÜÅHÄ÷z@è!însrdÊb@úËÊ¿kU{¨(W¯fÝ nCž/K`§ŠÛ�–fÅ¿¦1gº<‚WüÚþŠX­€ƒŽ˜¯ëcàz•?Åú§*DŒ«J÷0–‘N`£â,ÿïNÜeÔ9hø‡a™r@È&ý³Éë;¶eyíÂ(õ Éf>²½Vªh½­W™`Ø Ãj‰}Ø™OB›a„cà îÜ—n¹Ø^Š=ŒlŒ~{Å…ù¨§#KœË&¹ƒ ݶ@Yd^Šu<ÃZ~›<[âY äŸðâ�’£`Nû–lÕBvNš|Eç8`ê0®M€Žlµ‘lQ®�Š•ÍsJùÚh­wxˆçâç{tê�gyc×+ªŸµÎç[ðLfQÖå‰;Aꆾ8·,B•r½�ė親š "V<ýD_9ËŽ½ hÙ"5¾<„º}®)!#m;3b,gÝ~ÉëD?xT¬ùu»Š›´¬PHyòô�`ÊbÀnlºgíT¨i3ˆèÀ#æì•êŒúé³Gߌ7HÏ>, /|¤½ µ>Ê„œ¾<Ü*½ì¡ôý´£ùð€�éóÌÓè‹V|XäkuFdCz—jÝP¬›=>¨ªlœ²D V¿ÖÀM™*ü´ae ¬ µŽžã/ÌbCããÿrx~~€*y0_9 9÷^ Q†¸ ¹Û Ë¡µf™Ö]„ÂÖÓM­ç:bH¹‘Õ‰{]ÓÐRáôƒõ7úž/ Ô­¤÷©<žÊLnù6Ÿg~UªP ?lÍûKND"ià8 .z ¸¾d¥kBçîÆÊÍ£¤—Jõ¥0¤AØH'ÒŸ>ü†Z‰½\-Èj}v_dõ\’Š-bûFcТ iXpBv[ËÒg²6”:z‘¾n‡‘ [øØý«—k'éçº\„Ìgådé4¨æ£¤óÅÔ“”O÷eˆ�⑆éßmíŠÂz#}†Ü( °áI_|7ûÌàžVÅBɃFäÅ¡›¯Ž·Öôµxûj±ãK‹ù—Z?%�Å5¢ÅõZ‹ËÑóQ;ù†4öÞï¢Xx{„´_¼¤ÒVp‘¯:mÅ×ôJ5ljzoh ûø9É0$�3ó­2y,-ò2¢ §ý ¦©Ñ»ØÈkº‚»¯"¡¡ß[¢®Ùwñ¸ÕѰF¸w‰$¸ôy$Û*й0¼=ê^ùT’ü»åFKîžmjCN¾V)�]nfâ>ïV¶_’›Åhb¨ýàêž‘öYZ¦Y.uòÈL€àTá® qÛæ3-ŸÛ �,­5ùåáeò<ðž4=±³ˆ�–ƒ+ i®•�.½¶+_êN/¢õ™Z¶ˆ7é~Ѓ;ŸSv8YSÅ“–á=9£”àRZììo½aqõ Qô÷mÍŽxü‰Ü¦(«¸0l—B»/ã1ý×-\¨5Ž›ÆÆ» èŸ,!4¹CeõäŽOMûcË„Žl‚Þ{ö‹KWŸTnž$²²ÔÕYëL�Ý›o§E ¨kG‹ógNý(9¶EJýV"S»U%“¶€oæâÍE© J* —vŽÚž™-k�«¥Ÿ„Lì‰ñíŽ?ÞYô>%ÛRä2N�ê$;î§‘NŸ{j±y a¾ŸühÌ×¾öíË˜Š¨vm,S…W´uK¬ âžs6妟ßq�r§'R‡)%ÚÜ‚´˜ß�Ç„k0ÓMéN°`bšJ»ôýΠ@¿Ù‡¨:‘œªMòæb„¡%Zší�sI^‹á…;CdÞãÎ1:úè2ü ( zw´€6A0ž¤“‹ªý�ˆgÓØOúsó¢TÍ(ÿkÒ¾¯~*,sfÎ׳IM1µÍ‡ß_­ÒèstSAE6ËÄ”“9f”ô”¹=�wÔ²?•é§‚ª”†¶Ð|Ôð’QnK³ˆý¨¼„”xöu^„«ÚÅR¿ø ãJ|L¹ºîp‚?Ÿ–�å@ÌÄ®B:�ÌòTHÙý౓( ~~ôžKd¢;žJˆÚ$j¾Œ�Urk¨ûª'6\³¨Zô…�_ƒè:O\ý¹B:à fyà81*PÀúfvfü.»¾ÅÉYËžø„bÕz¿¶0mmtj>°žÏ—&¾éòrŠ�îë,”Y ªþ/h²yE'åáf&·+À7h1” ûJ2…JÏèz»(ÜÅŠ¦|{òˆºT±¹†zŒdúÌÞÆ•¨yh �E¿ïÉkl”ßâ<G·DÔ‹�z¨†€ëûëß*QH5:dú!) xÍû“Q`%á!z·oy•GQ˜ ð¹MZ²Þí€z66/Ša^²{ϤLLªâ…¸ÓØgE¯��͵‘õj‚íQ?ˆ@»GVéÎ�§ñ…lšáÚÝ8\_t²q•žê$»ÙȲ‡} ¼#Yïm÷%#@²JÐüÚ—õÜk“u=˜¥�ÜIð‘‡Õ<¦=6?,±ä‘“@nе¾*ç9…aÓ6 á ˃ûùZ�ã´dáí_4ø'xly²¨¢E ˆ“zJf»ÄJ†~ðôK£»[Òi«“i%q‡¢¢ Kg?µÌ�™D]bî5>ÿ†½ZªÐH8ùÌòm–²fÂ<ʲN,7i‰ygʾì[02nPƒzn¸êÑO**'”Ú-úN�ýî[Qݾ•ß6 ¯¶N& ¼?4Rmø·é¡ƒŸt +Œ¼Ò³ê¥ûF$t ¥ßmªb0®ÊJÊ.*ö¾¾ãBåþ¸&'Z¿ªilI¤Þ9Å©û޲är½P }µrKÀÔ†—^‰~à÷°ó‰5ø`™±ìué_-Š*mÄd]kcƒ vÒ\ ¾aÍáV9ê¦ÒÈ_¬M6 TB�q&}¨}×ðÜ�$V‘ÿÖ¯Hú€ÅÉ¡±ð¢7¼€Ë‹c¯�Й!áÎ «|ÓP†ø½äzÑälh>{Öð¶ãRØð†aMÂ�ÝÂ�DçüàcÚÒw´½¨_BìJ7úEœ�8vVDÙsÊú®w™?� GY®Éz£æV~÷Äï­p~Y‡Ï·¼ ¬l=*~�E^§¼:®ò0Ž¥ôÿ´m�£qtú/LRÿ%¹{þ\šör-aÁås –¨î5­;ÞSܺ…áœ~‘%²˜2÷Nw¿Ñ+·Úqú+�ðmô­a·E'gÚmiá"ÆV°€á*4å¹�ãp£œqò¢ÒÏ&AEȯÇÞÍhöïÅutú¶3Ù‹Qm2Ô Q¿Ì¦§Ù©¼6AŸ¿TAøBkq�|6¯~ý á¢dc§2€Kl#o"g�¶‡I³OXqÃŽ¬’zþeQ_¥Ávsúº^�¿¤[]¨(#­¾7B –Úè ›ÏÀë,nÈs)´.ãº| !´4~MÎ%õðV˜‡^n60³+ –¯¶ RÙ¥ÕO‡EÏ´„þ¦ÓÃT uÐå€Ýó>Ú�p#qÉBú¥ëÔsþYK5O[ø–±w ÎV<î ó’lbÞ!ß›óŽò\®·™§íS»î]–žÆdZa á‰Ð÷‚™ýIg…eW~›6Ñ⊠šÑk»ÉîZç�Þʾš+ž2]ÉMó.Ü �Q÷á²åãv?õÜdwo]+0œ…Æ KGë0…uô•ðï7¦©ƒÙÍD2µããQp…ÓÒÓÈB[M°LG K]¶-Î�>3ÿþdb99ÅIÑ#G¶G{QmRì¬zDxµ{Åz&DFÖî;!9¬!_“쉓L™Ï]=Õk.÷!GøÆ;(´“@šÜ1ñÒ-Lk ¨-]déG—QÇæ_¸gc_ÖpŠN=(Åb-9‡ò-.@Þwìž1�œ§ ŒÌ™™`ŒµŽø.o ŒªÅú1O��dšVÃBŽÍÖY×Yð`Gž X)öÁÃeòóHy‹Iyñðµj³”MXºùpzFap!—Ü+g>¤â`™-ë?3H!¦!Ÿ|…É@F,d.TZaBîh6£ÉtieavÜŸ®¸ÍÇ?8ì§ðOHý­¯ÑÜ¡Âðc˜>Õš¦eÄò¾ò3³K·Â@,(ýræj1žrˆÑM³yÁì¦2c®WV§q–ójw–¿š>‹æ˜�:�/´tzF¼6Utj¸  ¼ÿû¾xfMëFDâÿø–Õ£cÖñã=ÇH5µ‹&ó‘S³GW4‰ÌÚo8 läu‚·Ñ *u ŸG¯¸Ô ͨAÛ–ÕÄ K¨"�·\yÇ&8‡²ýz“”PêL�G�§ž€”Eu@SÍ#=ô(é�©klsE£Õ69ø“nR>ÐaÆX ˆ$» ›—ZVI N“Ö>-'·Ó>âð˜²Fb)2¾»PUßD£Þ§Û0ÖyðÙ‹ÍÍ|5ï=Nœ�†àP©?ldÂIœœ‰}µ[sn ¾ËOßÌ‹þùf5¥kr„`ʹ®•œSàÃtñ2ûªV|„ö7—ÅY"×ëÑécqÂ8�ÊÕ”àWÞeÔ0tF”¨¸8Ô„Q¼[>tH4„—•/–ûÑ› Ó´élk4±¦¾â.e{ì³Êa72õüf)�5®bŠJ#x6­?¬š‚ó�×#¼í­±®Üßá»ÂZlpØ.ª 6Š÷Z÷ùä ŒöÉÊÊûúm–›޵‹ê ­´Íï÷CàC9ÙAžËÊg«üïÿ1Ô‡:{à"lª¼WÂüEöâЕìæ *D+!«CVÑ %t[žlXÚ5éÊ\µV�+?$A¦qCí?õ÷¾vžÞ4k¦P„p<ˆmtšf‰EI­ìÝ£àíèïó¤j€sPy—þ$ŸYóa $+ö¹ËTÄùè˜êÆ�1Ît.¹xº~¯f`¢¨sà'¨Ê#~Â/¾í <,ÒÞ|8•ÿúuq9u©y9äÈiÐN'Œê3õ¤Gu+Ó¯†Þ“Ž9ÃçÛ+VZN%Û�ÈžA�£^E§Åöœ]ÁÁ ¢Œ¹ê}5Þà³0-ÐÌk_8Éa6Ì ÿYù¸ÆIÑ%–¯q¬bGÄ©í�ÇÄϤÈüç$êfzMŽâ½‚½âjÞÍ 4lêFœ "øâ�—�7!¦$~œk`ƒ=ûÕHèÇÅÒ’¤ÕÊS0Щ£FհРÆ(„à©ØÇÚkwÙøp4’_ös³´£ŸÓ>‡…8öLožS¼ŸçœrÙ°J F0™62fûîrÎ8èSü�ª•(ÓÿýթȑՋ‹ ƒc4fRR¸ó©(-úž†ô³&ÞC—åö¦ƒVV´TeFwâ/3ŸªxŽcüwÃä]‹¬�é‡Ì#C±!+œt®kÉ�ŠY:Qì S�þàEŸU+ZÖ±Cf¤i¤í»ãÔì xàίB}?ŒºpËçóû]\€éúSC—áœí]ŸÒƒ=E”iltpˆa™ò�gä…ü羟QÛã¨lšÙéÓ�¢É…Ö×M€uRK¤üæ£Â2Qtwèe;‚z0-=éœLãÿq\ÿz £eåï~ÔoûMå=ц²©¯µíh2‘ž#3À{#C Ð×xô¹hÅNŸkÇì~]Åä†FR�_ñµF‹« ÿ@§b¯à�{0çÕÅr\ú >Žø¶#�V4¾–Ðí óG+^$Ëÿ’–íÐcVÏÁ9Œ�[`WuñæýÙþ)¸IŠ»¼Ÿ`[ö÷�€o2Ì…Ýd #ÔƒðA²²i޻ѲÔ)Š®÷x÷lS}êu÷¬¡åò™<²_ AP–õÒÖB°&R¢A±1=GÜOËT \W×âŸJª”Ç‘Ý駃´ÈF°Ï&³´~üFW×¼_¬�a°½�Ù"2ê¸ oOiPÁíRã${н.&™*9ÑJTŠ)CdfþØÃ¢*6zœo¾÷Oc� ã,žnŸ®1Þ8篽Ýñ,–A‚‡ªû:ÂÛàÕ™‹q xßXÝÂØ*]Î"f ´ž×�m2ĂħDÎR üêR™ÿüöœ|ª{´+Óék–�ï„\'“ÅJóÞÅj—,´)&÷§�Ù}bŸ‰®X䃧‡‰JªbʇÜ-Í‘9¼˜}^ºLÀöðge† ¡Ì•Ñh|BøŸß+½›‚{uˆÓ ùL¥DÂûä늨锾@Â_ÖÞV¯N6 ©©_õ$(¯Ý•HèO§UÌFò•åÉþ°Ð$q!b·�N¸5â<œ’ýëGäüŒèc)2%i,C¶“ð\¾RG¤½[÷�´ÒËW©1�ç\Îw›Ü@M\RÇÒ­HÍÂß;Ù:ÔÛ£aêfǪ%þI#Êí~pÛý½Ï�ñ«#ã~è1ê a3”¶d=‘ûJéÛ»;šcør½ gÎØ$a•ŸW¶WfŒSîV­ð�Í(yG�o�î¿?9>àˆÞõsS•޾Ç)0‹¸noU 딘�98)’‚!¸CM2&ÊÝØJÝ 2ûv; |tá£Ï¿Oã�¯7%+ÍÍädKÓ´BºÕ¤<¸±I8P}qË•)åì!ÍTX}[ÿ¦ÚI »|¹< ùê" Çc±¶S3·g”ͬûàõœŽ¶Gz^ôìMçý(/€n¸WÐ÷Hq)¥¿ð¬óz¸ !'%R\,鮟|�pÔ<øªÔSnm27&x ‹ØL%ÞÔóeÓ½—0QOçähj"@uX3º ‡ÁVs•ÑzÒ‡¨³Få5kæ|ò¨A1y‰ª€~™ëwáÞsˆQ§úÛ›ë«Â­!ªðuÿ÷´ã�iïýÍþjü™®…Ë~X*Ÿ‹~T ÑÜóR‰ýP3È"q«vêô3(NEåÐeþn€+LûÃ,‰ò�oÞv)®•ÎU%|q›µN„Z‰úªšp­j™P®ÂÏ—(�¤›Hoƒ\˜ÔÏ0®:ã�äv³a¤nðöc<…³r@ZÈûÃé+‹±£tæ @Y¼Éphk£A‡ á¢D�©Ùãwª4XŸ°…‹ÙÒÌϱqK'"Ql(¶°‹;Û�?Ù3Ô"ôÉ3KNB Bm ÙÅ–<¥ö‚âQ°äêîò®Ò¯•v' ©Í„‰QæA�Úúï«¿9»§¿t㼯 ­ðO YŸZ”£DKS5:¤L¢Þ,^q%£çÑÖCŸHê“cÈÉ ©š [XcèUŠ0õ0ù;:p¹š»²ìRbïø’áˆÅ1.b›Iž4u×a¤³ØÓfÄ%n'· 4ÃÎtóYëxÍ›’ÖçÔ—Je `e£HBaηoÉ€ó1\]’—‡£S¦!q‘÷6¼¾G3€¯#œIÍ´3}ƒƒéLN¡ëŸÃ]±z�ÏÎj³»j“ðÒS8‚‚Ö·wø›G'z¿�€èn¬«œøv¨kJG(ù;Œð¿ZãW àLiž Ýý ß®{.§;bæ�8 ÄgþZ ‡£"‡õœÀYÆ¥XÀ¡%é"{Ý.ñä‘>+¸¿õÅàŽÙ°SüÕšUT¾V¹môº ÈCµ¡“³¦“S„3”~Wq¼Q?VGáK²vQd±“iÄBåT]¶o(¶-xþøÓ™ žîØ ó©«”+’¦†å÷ŒPï@Îòê@œ×XÛ8ÜÄI/HÍgx$bĶk íÄxL|ËY üBé›|[š,SCs7Ö”htÒ(bÝPH•^#ÁUÈkÏgóÊÚÛúˤU`ãP8¼°ê’Q�Îì§ürÛl~œñâ @0ò»0^¦ÝÒœR`õ³‡¤úS£/–@ÆsMظãvµƒ ”Ñ“W}«Ø¼ÞÎ䙳¹>Çê�}R-³Å# w©¯GÕ%{b«]“>x˜¡—µ?Š„€ÏÇ^p†ñsȰeD4³ø;7º9*åÜy9ºW;mé¡©÷ŸCJ·KfûŸ=Tat±jëÃ~Yiç °cOéÑ,›Ô·‰1š�ÿn\dÅÄ"mK£ðŸÞ&ÛÌùyDÿ0'S¯õhü,ž©Êe7ezôxöш/§d&AŠñžè¹ z›_ïÈ ™º¸šãL‚Ö¿‹,tï4çÄݬò”Q–d>€rõÐû^6`³ú0$i}ªøw!•‰‘KÄôÖFUÑ©VÚŒì;! V…‰Sg‘à�˜Ü‹ßJ$ïï6IîáÂýܬ�“Iæõû°��=K‚®ý¨³fI˜�G�1d*þ¿7ä`läÝäâ>É¡W×ì¯ÜªRðÜÓ]´aáãEh�ŽàÖÐIoÊ™$?Î<`žÜc”H÷æRDLGȃ.:*P=÷¬Ú=� Žæ‹›?y‹YwMEá2ud—ÖòV˜¹}v؉6§ü ÷KýSvYäuZ¿ò¦çÕN¢Ø]?Õ2ÊÙÌvYŽ0‰j¼[ŸâÒï0œMAó•þAÀ¢c ³7T°°Î‰›©ƒ¿íÃ/V_²à\Þ‚l&'~Ôk/Îâû ÿå¬LŠ d&B¶´“ ‰OZ`u˜¼šë<¼Ü¨§&ÉwÌ^9¨¢t¸ÉV¸‰]¿–LÕˆ7‹¼Ø °_–býçß�…·WÒM-S¥}XÍÕIMц˜„:ñY±úUjU¡•%W:[:¶®´ý)%´Ç5”@!Eìkæ®­â>Ù˜jXIX¥oãæÔ�w ñãeCûVF·{Vå^ÐºŠº+³Fq|9ÅEØ]|®½_Ò:Ù¸ôÆ×tä݉M7âÃƤóñ¬‡3”†L‘Ô­-Oµ™u•÷a—õ÷v{_Q ¯,ZÜ‘#€íœU8Ä �£½«ÔP˨•?ûËl}}¡¹íe#-D',j|a EøR¹©jþFP.H,vW²œwø÷凎e Å1ÏîŒc8x?¯[6]B{¯|éz #ÌÖßl"»ôÅŠ\üša=uÒ ³Iug4÷kRhGæçÂŒNÎ÷w?E4‡X#Ø9?Ð5&eò¤þÉA¹U®Jr £!\·v,å"bÈý@œ“¿á&shäæ½E7Q€�ë_ ™Ww«tB È,„;Qý�Í¡^RMÐØE"�‹§TøÎÜy0 $�ÂRüéõG¥†þêA–5�7› { °»tÂh©iØóÊÎÓÞr{Ô¥+ô›À W軚”Fh²§:üù¬l™Ó™óÔÕÙŸ?é¿P²Æ+X!öŸäÒ8HrÝæÝóVlŽùp%_ÀX‹~»º4ƒs†×€U*Ú Èj& eÕ‚ÞA[°“ì|ªAaÈr�ªJÆÌP†4_ÚÜ„TÚÛµõØiâQ3÷ØêR*bíšÎ⺧Q뚌ý¨*tÌè°Sþ:‘aVy"ýʾ0KÓ0„[Ê<ÉŒÿòžùqŽþ$ìºõIBìWøïv!-ÅÙ¡€Ò*(ÍMR=`ï#¡Õ”% ·Ìúöß&=ƒÀÛL&¤dH«€Æn(®¯¼lH�ÚBfÅk„†ÉrKs¢>%¯'¢ÎÊ|þ×z&>N²aöqŽo冔°‡†„ý!N.Ž;(u;BsO¶Çˆ¢×²¡¢ü'Æ7Ë]Ù>1ÇÙŒTÛÛ‹‘±ÂHquz]­-¨j“ñUçAvPE ©Š×U±±_üí÷ëcu^÷]xÔÍ0 endstream endobj 1691 0 obj << /Length1 1313 /Length2 1250 /Length3 0 /Length 2094 /Filter /FlateDecode >> stream xÚ�T TSg®R+E9®¨ÿZáe# )a ;bŠˆ-�ä%y’¼—å…�Æ  Ð bq° ÊqWD±‚ *‹ÒЍH)‹ŠŠŠ" ®(„˜—€ vΙ99'ùÿ{¿ûýwùn¬¿ säñ„‹c„#¢±Ap˜g0�h4&D£1(ÖÖ|”�"ïìëˆR…âû#„—� Òæ  Ž�µЙ€î̦»°i4À Ñ\ßq%xÃq¨C ÇÅÚ —k•¨XB°Áû#°Øº««‹ƒ1pdˆÀ† "#_ÀR† P„ÐŽ¡°u“„œM¥j4–© \)v·s”�¢B”qˆJ!° - ¢X¾U�8Âp¡�• RT€`*2D� % _aþA`™ÁFÀA#0Ú@‡èïéF£ D(f †\&‡1-Љ�•"`7"â cB–ªp2ŽƒQ)CŒ©Ã€ËY`²ÂÑúT%*'T� •j¤hÈ6û`B/\&C0BE1äç�*Ùw-ut¸±®Átïn"Š eÕrj8†*Ôˆ¿÷(†4Q>ØÄX4&Ýu1 €Ä $TÃ|­1:é3Yƒ^'Çå@D–�èQBþPt*8„R�èu;ÆÞ(t:¢Ä b£|`'͈häNÎ_‰ÆƒÕ4R~t@3|ÞŸÖ� â˜Tûn15<(Òg¥ß¢Ñ’ß;==ñx sd±€£ƒÔ)Ó‰ \Ƀ~,O(ŒŽæñQ¬?&Â�ËHºdŸÞ¥7ªÛѱc¹BpR¹°ý ô(‹& ¿èÿ·Ü�!ÿMå–ÿ)ôO3⪥R£ßvð?,C¥Ú„�ZŠ(?¬DF6¢jÙ§^&w€ƒ‰¥ïÛ‡ª¸h<" E �dD&F;Bªl¬&À…†5a°œ¬TÂZ �Ôƒ˜ŽN7ÊP! 'È Wz •ÃHœ™€ŠÈä„VEŠ“ôPư ÔJ%¹$Æ’O¿»7Aâ¥å:.X’¼¶8¹¬ÿÎ<�ã£:†“Yõë´Ó•í>sâ/Oòr{û†¹7ý&ç|SGúÛûÓž2 ŸŽ�˜E‹ýöÞºÜtö¬–eD1ÖÕO[:ðT¤ftVVFF31¡xÖËR^�¦Ç£Ñn¶ƒ¢ûQs^§¯ÛßK‹úŽJ^N´9õ š<¾.#}¢ÅâÅÌÉã“Ë9yåEžÇ9�MþVª×uϳæs;ßæ^¼Ê`=¨¾uØaÚ–;¯«ËLØ“×å¾ýI•óÜÀèzÐhÝ^åc1˜i›ÔS–œh£ª [êûBQRùä×uó@c¢âaL˾!‹¤ý½«ÌކX†,�åÎT4ÆÚ8Ýœx;býÚ¬Ã7fÔž¨‹rš\pÇ7:;îÆ–õÓ½ðd(ö†ýtLîÎ#;%‡¶–p‡¿hu¼¸È4Jg™†‡¸n>µs™-kÓÚê/÷‹æoûÙõÕVî“Ö;*ѽ¡Ä¹&Îè÷©A/Y·}WoB©ŠõkÙpB»©êMyAÛÙK-¿]β¦�Ëÿ�R4oqþÆ„ŠÄÀÇCí�Ìò´0Èü éŽæV·ûö—¯^Û9¯ hÖ‚”.½û�¯rrzãêºx� +Ò!}ANÊ׊¼=G§2RÂOÛöæüûÛ¡§_éà°&Û~‰ïõœ×­¿–.:ø2Äâ„0«39WÜ fòx�šo ë˘ÒóÄ¡…%3$V%ž?„0üû®í¡œ*‡Êlregó+�68/š Jmí‹r7ߘ˜]gn??";õíE+s÷ÙiÓ’D}úŽæÌÌ?—¿èÂîÆ›q®|ŽT5;êó/~Fú6«RßÚDs"w}eÈÞ—Š÷þ Po}ÑØÝy»@çÑübáÒ‚oÜݨ¼Z‘lSn¶9)$ÖY1/†z\ËìÄ;WdæëÛd ÄM|Khη?9nÙ˜þtK:V(ïn¹¼¹}¯“¬ãp”ð… ‚ãðbJþ;åìŽ0c¾š9 ‹<6…½:Ó%¨ôÌ�=pÐ¾æ„ ìþŠ?LÝZëv÷Úê˜ ¶ÁÿÞ¹.üœÞ¯úŸa›6³S\ÿ^Q&Å endstream endobj 1585 0 obj << /Type /ObjStm /N 100 /First 1002 /Length 5792 /Filter /FlateDecode >> stream xÚíô±Z}$�§Î‘ÔnmmQZ©ÂØBÇXIJˆ6Rí … p/m¡”-lÔ…òe!- •ÒFSo àbá•Û€_D��‚+¤4Kº3ˆ¡CËuPòû‚1e4ëb¡ §Bº²,”¶ÔJÖ*¬“0¸ 8”"öçJthl¡¤5ÕéB[é°ÎÚÁ�ÎÉB{hahí‘CèA; pBP…“ØWÐ} ÜëˆL•®,L©(G}êÂH) • …? )øAÁà ›+-””Ç’‡’¶P PŠT cE: ݪƒ^�å:Ô†ŒXÒ…• EôY¥©š°E\Ú �i‰\F�¿ƒfΗø÷¤%Y Kªžë4ê•ð@0>RÉ1 Ø # Ñ! Rz |I+%Œ¢€8U:$VßÀö‰C«5¡�‰e¢Yß„`èʇXq†ŠU EõX*’^É£¡®ÁX¨°<Ú‡¤¶ÞGì×b³H< KAF¤9 š‹Ð,8bÜ¢Q’3èWÆ’úEyFE¼9ƒ)‘TTytµã+R ê½,væ•Â!ÀbTiHãÞA‘¤á|€b ¾Á@”,5"€8•Tõ  É�Q@¡™ ä èªä"4G$ó\e Y‹g)áÚœ"°8¬VÝŸ‚Ñm<~¼!žÀy%xüa!Nß½é Ψر ÓÁM¿ÿqãÿXЬCì8¿*²‰�ú\ ¹Œ�èWD÷ëH÷jȺì(¿"2ØD]>G.Äö°?]wÏ*pwjòº;™T£LtûôËäÙѤ;© îrCì “âñãBì€Ù*P$á퀛�ÊÓ ²- ;0?�9¥“•±t4ˆ×£áÙQ5)>ÀÀOv ñ¦ú2)^Þ|½®�¢‹j(LªÁdŒÓµß‡Õxx3:«Æ<…QÝAuÞën ¿�0@ 9˜(d'Ä�0^w�>Ì-„¿9 ¡Ó<Û#Y4Ûsl7êšꚺëV!Ð�Ó£²®‘u�¬kT]£ê–ÿ ïDކ؎Ϋ±$?Š]±'¶á\ñ#Jál‚:·peжíx�Ӫ阃 ~u‚EÖ�n>M O±ßü.6?¦ÄæÙ¤7ˆ#q|¸‡×_N&×ã¿ Q :õ~ï]£<;ÃÑ…øKôçÕ—ÎõåõÿNz“~õ÷½ZJ5ùí°êw¿þ¶}Ù�ü×°Þ;ÿ{ ¸íÿ7wdHËÆ_êŽÅ©?”Çüë\~œ·�t£ |fëïÂÐþæþáo×ÝѸÕŒb ÆzwFL„ ÅéÂßñàä #fPç¾#û3l¥£ó2<€>48 "ãu'ÔLý0L€×+ˆÙ�v$ÄßF¥ïèòûxÉÑYw0¨Fýj<&~zƒ‹š!ÈB=dΠt¦ùäô8�ÇÒýx온€~_X:eë*ÖCJàìwáçÍe5îÞŒnÆ-.@n@)Öu #rL™«… £lô J\cÔº0�qÉ;ëvG_°qÙ½¾îõ¿&&ÀŒaõeÂ=¤ë@^+AÝñF'ž~ ŒŒ° Â–�½º6S�%aVFß�‰š˜!9Uñþj0!À4 +k«;*4,ý,è iqd¼êhÈ|k-˜`:Z= àã⤩ûÛA·7ø “ù¼ƒÅ ü‚°�zWsñ¯¢šÖXÑ´k,YBüµ²ð°Ø ò¶Ù4¶gl˜z¬ÑWÄã²R¯ˆí@BέŒ­€¹*%¢r\™n k/Ü\Z[‚+I·"¶ ¬õ!×´SËØ©i[PâúâóõèâSñ¡!P<©þì�U‡Ï¶>bWÀ®TbÓ¸Á‡ Qq'­-¤‹ø«!pÃleLò_X_©‚kòzܶ°Eĸ×؉ “!ãà|gH w©oï}' Åø[¨tGµˆ_Ì–V�²t›®Õ›­Ð)�ÛkëñÚš ¹½wÌ;Á[Qq+•1�91 9b‚´QAr¶IÚˆA¬*‰5̈äÑ|  !IÈ–ù–¦ ¨„)ö ŽÚ²¤3Àç~À}]ˆ€!(P`€pQ¸ˆdI„‚Èâ&’y�G! ` <”³qd<∟bõ˜‰Ì�!ÍÃZúšDÄP5¦cÁC :ò™äj�ÔM·]åÊ 8ÁÚ´-ü¼îsý”âO)üG]åðèÿvJÐÏ8N@Æ�ÉÂ1ÎD«0ÊQÙú@)ÖDº€ã`­ aÚ`¬Ó C‰O½Ãà 90D h1Ä ¬N4Ü; ×ÛHH[B„+‹ -Jå(-†MÊЂ¥®t€2-¦~醡7ø˜©·x@Ë%J#Õ@ü¶©ã”äqÙaÄÔÞà°R58I*\o0‘àY*L R™5`$ ‹ ÙæƒÆ»f~ÊBãrÂçÀŽ„ã*…öo‡ßºÿ Â;Ãò'í?¹y3fð8µ{‹Ë(ë<¡ËR0Ã…›�õ.¯(¢D˜w#¯U=®Õ%Xh¨!”‚Åø†ošðÊ/À˜‘Ò•©ÈЗ´È²ˆH³8—(ü0†æUl¤…™ÆUk‚Y�ÁåUVËmRKªW¹‹¸lY·Î{-�O ç*Ò^D @wwÈý0 #Y€pS™q¸Å„òLjŽIˆ¬ŒIxV ÓeÂ21­ãžðäWa v¼v§É}RÛTÆq�ŦþÓˆA“eKAgiã†A¦’Ê$PÆÉÅd¢ræ5Œ“×çBázEBà-"1bêÙ"“FצO}ý ÷ °/C²£(/C†§`,[Hñ.ø¯‘(wÚ Âh£2‰0Õ$K)BnÎø–Sõ “tœp˜@‚ '{ªAë*•ïïÑÜÃÚæZˆRÙãé'ØfˆÞ‘­ðþ�BQ»H|i²ÂÔA‘RÈsòè>�ž-Ø6–Í=¤r�ä»(C%�KP–QNU8&r†j»³�¢ÓÔ1îÓ«©2«1ÇÉÕk]‰vÇBbÕev‘Ê„ƒ¦� Œ�ó§Ì—>ŽŽªÙ^Ôš­—Öw‚ÐÚà;gEq²P5L[Š´û‡ïlââD—872t´í–�i#.Ù.f¨9cœ‹õ²Þã’wm_†æv†Ü2ª-m¤Q™ŸÞæ<¤]M×–óѽÑ~(Ò‹?`Xw0EE[rk O´x\òáÌ &šâcÖo?Rû4¾#˜d˜F`L‚1b?y Ë’Â_ކi’Ö&)p-'Ü²Õ µkpmJ¤qC-L‹EÏXB\NM¹ÞY£R}Ö æ[ÔW~ÊØm‚¥FIÙ=yzt³³˜˜¦S4†­Ïhzi²­åÒÔéÛw>™ûü5%�-£©Ä í|l6|^›•“ZŒ)e©VIv›1XÍ:R¬�ì)3Àe†‰ŠÛr×ÅΜRçfQ‘€ëùŠÜ¯nו™‹3‡SýgmçÓòÀËNV$K/´GÉÌϼlgù¬�sŽÚ怜/I2“gs“ÏÛgR�§E寛Kh报j´µè}–À€¿õb ç¹Íáüû¬¥ÝÚó,Î}(òÃòã:äoîlîìù‡‹¤oÊZúe¼ù�í¸¸˜x#×!þäÙîÑá3 þèÝB»�Å#2{ÈëÁìmK=°r7᣿,¤_¯CÿÖ냭—Oˆþ¶£Aø?±"ñXÇLJ ß-!-×}ýòÍÉ«w¿ì¯ºY>ÚöÏQp8ÿXþ¾�”Zçf§8ÁÛÌH"K #ÆL3²–î?ýµaD-cÄ##¿á䉟1füÁ¬ÆH—0²–7¿ÛÛzv¸Y3–ð�ßkëòøý"Ìô´ËL«”9t» J-æÃ®åØ;'[››Û3–Ń.b'$v,~åIŸ³SN³S®è)Ñ-ág-G¿»ûüô¤æhO‡ÕÅM¿;Z`g‘¿8†Ÿ�’e6ïZå§í,s˜E;,™tíZ^ÿôÕñîæ›L7ËùÀŒø0’>Í5å/q!wŒv-¿¶{²·ÿ:óûå¬(ÌCð»i:šbÅ.ae-Ïß9>:>xÒ°â¿ÁJ‰ZÁOÞiüš™T6gE/ ,v‘÷O¥$å+n-ç~úì×' +v9'Ö9t|�ßV£×ܽ•"Ë%Ò­å÷»Ç;[O_Õ¬¸o°"-ºJàð5«”;±‚º[ÈÉZ^tº{úk3ƒ}˼‚FNÎÆüŽÉ½9ñKœÞ­åô¿žnž¾}ÓÆÈåœX—8¡�>„Nü2ëZËç_¾xûìùËl&^!a)š&bMŸº¼;'Y„´Kxñk9ý«“W»ï6³©x)/�q¦mx0^–, ýZ^ÿvïù«í�ÖW–&.*Ô®â1Î+ý¬ø%+¿–Ûo¿?9x»×:ËR­„XûŠ¿Ÿ×g¬¸e¶–ßoí¾>ÞÛ­Y9êw“o&/�N¤äŸ{EüGq•D̯åþ[OÞ¼:>†º“Ë£¯WŸ†ýo¦•ÿâåpX/ëßÙÙ~ñ†û“å Jk07ª³•±›Î÷ÝT¾¯¤¿C¬ kùÿéö³WÇ'‰�oÛ˜FPøÖRfù‹�^Û©…±ÂÕÖÚùqXËû·^�=}‘Y%Rjüˆ/~0¹”¹óO¯'ÝÔzr1ËeXËõ7_¼~±ý¶UÈÒY,&}ÐWpï¡�|[¦‘µ|þxÿýÓ“Ý_޶íxÁj–*øEjƒ/ÎÖ�Æ™µ×�SÞíôéñï~:8ž÷ÐsïóçjT ð+®¤Ü 'Õù§~¿ú> stream xÚ­ZYoÜ8~ï_ÁÇ1‚¬y`0€ÛW;>cDZ“Å<ô$½‰Ç=°;ƒ�¿U"Õ"EJ^{úÅ-•Ȫ¯¾º(Á` ã ¬eBZæ¹c€I¡˜r’I©(Ç”VÌxÍ”òÌiÏ$—Lp!p¡fBX�΄Rj"¼gB{ÉŒULL¡2áP³¸ËÀ 2!%^  é8nÇ �– G]à >²LZÀ;��½mG[J£ ©P³FÊy¦ n�4>¶\1pxã êÀå=´œiŽš5:¢…·Ì 0-½›��‹˜s(r…+@­ˆJ_(�W± MW .ÑgâÞâ0�’Ó•Aþ„Ÿà•Å+/¼` nu(ѸT Q‹ë…k,*°XA±ÁGè 8MÊq±Ç°ÀÅÞ™‰ÀxŽÊ 3ä®Ðè›4„æ0®ãf´$p1 Çé3€ÌSØ >à \lé‘ÀÅŽ@£«ÆB º‡š¹e¸D?Ì$ÍJÜ€«¬´Ž¡wV)Ã�Õ'ôÍ-Æu`Rͬ1xƒë,™ÆuF·¬d y 4:å8Œ>9Ì+Œþ¢rá¤Á°c°(Ý™ð”d˜˜Ž¢Ì(Ì\gzŽë(芳€à:g8Ãe^Šb¦LÆ+ôÓb",&€WžèÇðà]Iæ›HPvyÊbÑ�ʼn¼„&g]¢ZÐ,°DPD)�¸‡F•'F¥˜üúëdûÃß.ØöÁòa5Ù¾úùǪ¹%¡˜lOçO z¶wŽNwNÞìž^ >iVï-ž¾<Þý¹Z>"t g—øàîñiµû}þˆ™>Ù>™Çä}ûæîëêû®Å¤§µ¿ýöó7‡³«ËC4õ©n_÷íËļ =�}ùrûÓ‹ÓéÙ^cßÕÌ›¾yÌŒÎ>ݬÍsýrógnÎ?½99½\þ˜?þvº¼ÿZÃáú8„Ip`§K€`’6‹÷¾,¿Þ=|#læåØ./O®÷߯±É!lÀ‹¹4FÒ$ؤÛ¶OGÓÃË�›„Vd/äÐtš>~#Ðn¦;;»½�­æ÷w_j‹ü6B‘"”b#?ÏfïnoZ„»ó?ŸååâÛÏûùc bQ2Ó 6qÿüz¶ó!!qÞ3¥�2¸™ÎnŽN.’Ò†gŠêP>cO¦ì©Í¤àõÕõéÞžƒ'Çó/®Þ¼w·‡ï÷Öð` ]Q:E6m¿v#àf×Óýóœgþpr3Ì]ÝÎn߯+w4®îà`#àÞßîÜ~üÐõäap–�–l^r35qvüñðÝYÒQ[²•Ï4” �Ùºó›óÙ§�¤¡ £+†lwJnÝÇ£wç»]Ú ƒ+JBðü¼–žøfšñîç›Ó�G]Þ £+k ö:¹꦳‹ë£Y îê~þ°�fŽ�bt>…¸™Žwpp°{¼�O—Ë“Õð!ÔégNSiaˆÍ4•ÛÝÃóë›nœ¹ò¨®ËVl¦l§ç·WûÇÝXÇsEê)9|HÙÌù}çøâx÷cGÝ`]xþÌ/'63ɦ{ίo Ü|õýêï,ïÇO¡®ìÊÈ cù’!ìË1^Ÿ|Þ¿™½9½šžVßM}yvJ_Múr(xiÿbþmñ4ÙÞ]þDkXåóÇ^5ß{ÅÇw_ŸØ¿E¸e’Cø ºðׄ_ïÃ,úýUF¤‰Ê\CSÜ…_ä*ðÏtxÉ��Lû`ÂÛ=ƒðŠÁÀ!ŒàסOk¤$k˜ÑÁX<±6fÙìuF¬Ê-å6ÒæÂK$sÑ#Œ¾Îˆ³A©ç!À^Æ{ˆ÷F…_ç_d²ìâ¡Sã¤ßzð"ê·§½=lo'>m‡ÑíŸ-þÛ�ê)Ó�2‘+kw]Ö×vóõnkÇvƒO‘8UÑÕžðI—êéò’š¶ãÔø±ÝƦH,Tt™Ž`£ºT¦«†ËtüQ×v›Z¨MÇ/ ðmûäÀÐ Ù�ŒÙøV÷Œ@G<¨Ñ|âw19[›­;Áf qkSõmváÒ½pi•šÔ5Zt õÝ"ÔB¢»�è^Hxæ®ÊIÕY‰CVâoeßH9eG�dqÔµÊP]€”Ó%3çU­bUG¼ì/3âe�xÙ/¡¾;Ú®/;âå(ñ"«Œ–¡™…A�‡Ava£a"5)ka]D/ ¢æ®è¨æ¾n;Xyžµï·ÁA‘¯èá]Døè0Èû䜶Þ“:¯Ýþøâ]yƬçWÇ _ÇÃçáh'fØZéÊ~;WÕ��c¾’óݸíMÛ ®ÍrŽ«”ŸF$šȸn8÷f³M'Gmv“¸7ˆ3dµA7…{C8s0V-iÁ?—Ž‹¶­×ýë¦toH›´{ÔFa7¡{:Û™�çÚtî†so6gþÕt£ØŒ¤m6•ó±jÒÎÓª½× n¨‡¤Qo*iÐMãñaœuž�â|󼚡gn•ÞV))µ)Ü áÞ Îw¦Q©�ãn÷†q¦F¥Q©¢YÞ·Ù|­�×nºö†kʶÌV)Á½ƒ@ïtÕÍÛÞ¸­Í×n¼ö¦k~ªOÊg£JÛxo2öG7‹û£8;·WÚi2Rmug¬:A“s̰{i;Ïi)íR�þõ´¨YŠC°ÒJ×É8P{!�{Ó3e}à¬}6ÿ±À·Ê_ö–_Þ^­æ�«-Ö¾©þ2ûÏr¹zX®ÿ[6]H9ŠÃìÊÄ´:¼ôgbIbQˆ‰ãׯ퓻w«ž|ñï}äÉSMªTa¶˜–%zCb(ÄÅ%n é-�ò$}ô9¦|ýˆÄPüî”J‘fˆ_pR1Òÿ(£’øÿ0™X‘¸`_"¼øuür«·| >�²‚Q‰DWš¶$.ñ#Ñ6Tp&ö$.“’§ý@W…[ùòø y¶ºÀ©�gWFE!3Îð•"q‘> yö¼(…ð¼àÃø S¾~Ì$Ú«"Ñ•%q…D{(ˆVH4‡ ¦©¶t±ZsZ­Ôˆf«·aÄ-u… Z’¼«U#/Á"Z!JŸ54ò"˜Ú�ÜŒÔ!Ë7Œ¹au¥y×ÈKó¾‘îq^8Ĺð…v�|¤W¾aÄ ��ºq.ËÆ ĹEýq^I Ε+ݳ�Ü»yS cnçº,= Î+cÁçÅjCœë21 q®Kç ‘§CDœp[½ #N %ª>ŽÆoaÚ“4²z´Zü áíOMѶ­7ˆÈeFê˜R§]Z d£C§jU#2©¨I“6×uÒv>4ê¡<Ɦ8#¬­¶‹\ÿëbFù endstream endobj 1711 0 obj << /Type /ObjStm /N 100 /First 1048 /Length 4785 /Filter /FlateDecode >> stream xÚ�\Mo[;’ÝçWÜåh»ùýa4½`0‹Ùz¡ØŠ-Œl§e�üû©SdI<â<àáúY§Š¬*òR±ÙšÅ,6[·Ø˜ñàï*ƒ¾‰K1i±&+&ï{«"r)áIþlíœYœ æ‹<ÙŹâðÎ-.zH8¿¸œõ]X\­ÂEÔé»´øžòâSÔþÊâKÖvu Ö �7Kð.ËÞ.!F}ç–�3d½_B­Í QOQøD}—–˜*Xû¼Ä*JÊSY’m½Ô%ùâå)˜%%dŒ`—Tt nÉ&ƒoð‹h¡íÂ’£Ó§¸dˆÉSZrÍèYlXlU´,%X}ªKIí¢YJ #Ú¥šME�ê2F‹~©¡B«–š ´“Ôê A„?l@‡p�ñI{”.LTÁV†€¤1œ’D+ë왤kÛÌ�¤•Mx‘“üm‹::‰ÎTè';oµ�Ⱥ¨VMò?×('p5b´,{¡)£ÁÞ«—átŸ¬>J+12†Ã‚‰èœƒKÚ@F AÝχl´�Œ*æa†zQz–Ç"Pô¡ÈhEF‹1é[�ÑÀ2º‰UíPd´ä´‡"£¥ s²Èß©‘/2Z*:pAk´­Î�ñ:qdÂÉhÕªz°Ž:©j3ŒSœªÊh%xm ÿ+ ¶ÏUz,šdØ¥Š�TX½N#ÌÜš�vÓ~‘G‘•IíðVV“q]Ê ”Å&‹@e=™C[‡Î˜«ˆþ®Çc–Gï´A‘G]ßEf•k.+ œŒá¿üõ¯_þò_Û×ÝÇò?ÿö§Ýë}Ü,UŒm–ÿ^Ú‹´‘¹%ùó&ã�7go Þ”ó7Uߨöæñeûý´;þû½ÝH˜ÐÎÿñå/ÿ¹ÝŸÎÇ=o÷�/ûÛ…r¿1'}¤zÕqq±úõ[è^ÍÅ[èpÙ=Š-/^y¨Ÿ®=×á¬é-]ïƒôò»çýiwoþ¾=ì~ÀÂùâíãáý_o¢Xñ¾m�?7Kp—íŸö�§ûÇLJí×÷ÏÓfñ5QøIz=¼oŸÐ"ß %oÊ�Ì~5|{¾Û}Ü=íÄt²š.{~xyÝÝ};îeähGøãçÛiûà¥ì·ãn%ž÷§<ˆIbºÝäôþ~³ygy¨!°­ù‘¾e�ß­^û·=œpåéóât#T’¹Ù⟟»�Óþ]'A̼ٿöÿ+ Þ܆Åh�w§ÝÝ”‹vÏ/�»'À"¸sƒŒ´ñ[‘éôý'¦öå°/‡ýׇ¯?OBï(Ö–Ñ&‡»íñ°ƒx$⯻çí÷íñc÷ˆþëØàÇë´ÜåTyQ‹¼ìwÇ»×÷§ÏÃN¸WnPïúO„o2צÂïóñôy”©„�®Èa÷þ°ý~ØËßw¿ç~�C£�ÓòõJþøpzù.ʇËyþº}<¾¿|¾‚–¿BÞvOxooѽVúJôYÀÏÇÝwLø4Œù�A“¿\ÕÇÝãÓ»N»K%¥ñƒŒ�5øø.æÙ�vÐøRøãðþ+üRô´}Þ}|Hû|xÞ½=펛u§úGåÛâ·èÊRº“Õ{‡å/gž@¿pp#ôü¹Úöo; P—kVlߢ[påØ?|}û_›y|ÿþó°û¦Ñ&Þ`{¦1—½EµÇ¨%5ú8xϘžuDÿ,`¾=ö/Å„osÁa+ó�¥÷ØFýWí-ÖgÊ�rSÆæßŸ�Ûï¢]¬~y|Dè¶#rØŽp:�Û·7!+Óï!MCbõilyzÙ}l?�ŸÈ7ƒÖ5ƒ=L yNßþðÏè»+˜† ‰„Õë“+ïǧ·²·íAîi÷ ùDîݽEåþ+ÕX*·ùž)<ŠD¯ZxÌÞBÆuªRŽ‚J…CÒa2‰@fc)$b“}ÅqÔu”› ÂF™ qU¥zοÜ{I �ýƒd�eª+H6ÅÌ F°¬”�E!½üg}� Ù‘FŠ9ŠŰð¹×c»[d©?³¥®]¯„vç°N32–αþþðq’Hz’°!3äN´ð¿òÄ%"}Ke<–«cH@q9ì®4dJ— dj…D‡K=wºFœÐB¶Í–BؾåJ!Ñ.ý*ª® ˜pÜ šŽb3vhÐ1W‹Êx aQ9N‹Êñ °£P&üº®£Ü AgÐ3UÕ!ÀyªªC€ …BˆP‰úÖ!BeC!3û9Aè:Ê­ÔÇYh€£Êi€ãª"Bj1/ G=è-âš[!˜6Dn… _”@Í8”DBýWŒFÄË@âÙj"…BóÊüôWÑ¥ÉÍØ¡ΫR¢ƒŠµjæª óZ,… O¡ ˆ âYœØÝ&ØuåVdµJ ¨RH° ¥‚b¼Kœ£K�ÚI Ÿ“„¾£àI=Rt\%=\ôÔYA�•‹F1J%Z­v Åœbk4ó†®ÐŒê•HgPT¯ð™¬§›&QOë§ÉŽbjÖÌûlg¶+4¡ñ(¸FS½R)ͤ^©™bðŠµ”f‚W¬£4“WŒ÷ ³Úvd6¡Y7Dp…f‚WlàêÂ+¿Ï~¯°¬W·(Æû„Ym¢ !ì6Ç9Í4 ¼€²z%Su³z…Ò¬^)\N½RixÊ0«ãá)'ÅÊœfCP^ A^qކ„\ãêÂ+ÎÓ‰YŒbt«5O�Y]XY›y Ae5¯]Së– �|E½’¨yŠz%q¨Y§©fÍ+Y³Œ!¨¬† ¢^)ÔòU½Â'fU¯TJ¥ªW*M(U7Іš®Â¬Þçšcª«!¨Â+>puá_¨ÇjVŒFè ¯x½+Ìh�§;ìi‰×õ½›SÔÍydÓU-™7ÔÞdªì,áü@¬‚ ÎJÆ·Ïׯ»£ ÷ºÓ¶Sv½|=—aÜ~ãF?Ežeî3[Ù‚�lŽ ÁVô,ן!HfHÂÂ饖ƒÔœ˜ÊØpæ‚sÌ)f)æs ŠyŠEÅÅ’bqJ’°üÿÐÌÚ5³¹m&8ÛXþÆJ…G�•R%ýù†�™ÙÏÍ ½¼Ŧìbë—˜T XO!HY.¥§ž‘A@ EpZ0$ŠR+ÜpÒ`2POm CpP`*CpN` Cpdc-CpbcÝœXØŒRSbzЙQ?+≒¥!Ä›µ!£_tž[ çŽuF+]ûËÝ»)+= Î�ÑpbéFó:Ó4' êâË�tæR‚ùgKLu„¦¬T$G¢½.öL¢ Ó$“I tš3‰€NóaN‘!zî?[]n$©)1¯+%e6 VJ* ÁJIÄø-¾eb¦¡H–t- äYÈoZRSb-‘ëZ@!)Öµ€BJ ×Ö*IN?Iäb êt&ÆÁci%J¨_é€P¿:†ÀË•LÅjHÄjfˆ›U"MËAjJ,7bdZiÔ+Æ2¦Æ1Äñ @CâFoÕNˆå�XY[cµ©O¦UmêW†@}’§�ú$O õ­cHâgÄêêëJQ% 2º l@œ¹“úAÃep£[¼¦�ÂXɆÀJ.Îy]•S*5ãåµ|-.±ab—“l+®2V"yÞkæ+~æ°¦å 5%¦ì‹l@X’”‚À>1Æð™!0Ié‚À~Vt4-©b°d –Ä'ž0.¯5D ž!ú&0f ‘!0SHsbe3JM‰9µqÈl@Ø8†ÀƤ8fŠÄL탼!^íSýl�5-©)1-*)<|Û²T’º½Ö •Ô$^i%5‰×t_³a¾Ge;c6lXTj…™~Ërl@|ÊÊž!ø’EÊ#¯›�J¼Ö$•lZ½Ö$µ˜9±«’J¥¦Ä´V¨…+ !ê׆Œ¾ÔiHˆêþ@¦|Ð k³Â£)9HÍxÝì²^Án†¬A°�!Ap‹":†$ ž!H˜kZR+Ä º�lÀ „¹¶ðÌøb"s .„È\‰»ýï6¯²¥æ¼p/��X ·$æˆ&‰À$àÇÀü7?%åüfšs )G¯g…À|âB­¤*©öƒVRµ† ~Ö8%uUH…µB*ئ ™3¶iB挦ekŒa�~î%�à»T`P“šr³CØð+á0„>$ad+ƒTrBbû% 9# šÄ"³±Ý—3n<Â@/­$è�º¢dæå>$a^䉢µA$°«¹Øiq+BžrK×å¢J͸µ“Ï@’j;ø ¤öˆ-dª=B96ˆ-�[.˜¦è¦å µB a„œFÄ– HòŽ-f}Ø"1+i. ù>¶\PâœWÞŒRs^šH s‹æ‚ÂÜ¢¹ 0·à†Z(Ì-¸µªa,[픘f¢ËkÄà–ÊÜ‚»iÑ0U4û1Ƹ³ ó>®¬EÆÁM®hüœWÙŒRs^¸` ›!¸_ ›U¸s s2®‡EC)ã^œaNÆå°hꔘ÷›Qj…Üb™[´ô`šàÂY´Ì-¸€-s î‹EË%®‹Eæ¼êf”šóÂM³h™[pÏ,ZæÜ2‹–¹W®¢¥Æ€[,[{¸ Ý<$†°¥æÄôR3—΢cnÁ•³è˜[pá,:æÜ¾ŠŽMxÜ‹nãfZ¡¯8æÜ2‹ŽywÌ¢c^Á ³è¨•àÏæ;Bež»+¼ÖîœEÏœ‚gÑ3§à¾YôÌ)¸m=s îšEϦ;.^EŸ¦¼’ÙŒR+Äàϼ‚;fÑ3¯à†YôÌ+HF™Y é$3#!Éçy˜Oi3MI™^Ò Û7uCvȱWø‘¸¥—ñdc{¹Íò^h¥jš ÄáÖ@ +~ìe<9;нŒg.è99扽¦&ç<±×Ô¬¾Ì]jJo8¨R±)½Üö¬<íe<«ðJÓ¦Di‡¬L+mÃê´¾/¨Ó—¯?”©ØŒžº!’óÑÔgmå�^Î$¥Fj—a ù@•Ú]KŠµÔ®ÂX3+‡¯ì*5%×nÑXRÑ¥v‰Æ’O_©]‚±¤,Kú-B È ½ÌJ ³ÔV¹�&í¦ë 6¥§ÇÒ︼’ëCz5©À vï˜Ðó½Ã ÖᬈLÃ犴vt�Z,³$Í¥Ë,És)4$Ñ¥ÐfÉt©1K1S b6Nçæpt�Ö¾½§v�aÉhj–‚¦Ô� jŠ’˜»ñ^ b6M'çð^Ŧôjï—ЫMQr”¡zF²3Ïí§„Ž(^ ë µK™íÒð57¯D”Ü¢¢%G¹¯rr‘ûB%9$÷…ʘõ…ʸõ…:e—‡\®bSz®M<’¶²k±”¤­Üc9DÈ=6�S„Üî»ZrŒ�Û…W;=GhºbSz¾q  ¹rê›[lp$ÛåÔ¡J!½•M¶wÀTnz­¬i;ÊM¶àÈÎ;·Ÿþ:²ÃÎzÅ:²ÅÎz]F Ï ½%On6¤—äíl;—‡#I[¡§ìÉ6[ ½ OöÙ¹E?GòdnU£#»Ø\º¡×b››Þbe#¶Ÿoµ_ov-j:ò%¨øeµ_¡LÙ …JY+TJ‹Ž¥*ŽlðJ+TÉÿ¥*ŽäÿÚz$ÛÂÚzœ^B(C¡RÖ>º•ÿÈ÷ÂÒãÉä¥G"r³ôHDÎÌK�Däzé«xº-ÃOŦôz ‡_¥íýÙÚ–Ü%[ÛÒÙÚ–¶-tdk[Jkê½ÐÕ”ÁÎé]}Q±)½–<¹XÛvÙ“Ô\cW”ø¡ÿ{6dçWû?gCvHµÿk6eV‡Õ!%ÔµÛãµe!OöjîŠ&5E‰Ï[Jðlɶ”à+•RzÓ;äu¸C^×RBm)Á³PPÚïÎÈ�@ú³3¶bKûÙ[±EX`+¶Ü·ß^NCg!ôæçíµ¥µ@NâjKk�-ËÚ~©7Æ@ßþq/ëÇ3ßþÙ$�òýúél�W¯O üŸ�þiÔø! endstream endobj 1870 0 obj << /Author(Einhard Leichtfu\337)/Title(Translating the Ding dictionary to FreeDict TEI)/Subject(Bachelor's Thesis)/Creator(LaTeX with hyperref)/Producer(pdfTeX-1.40.19)/Keywords() /CreationDate (D:20201014083818+02'00') /ModDate (D:20201014083818+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) kpathsea version 6.3.1/dev) >> endobj 1812 0 obj << /Type /ObjStm /N 58 /First 571 /Length 2191 /Filter /FlateDecode >> stream xÚ­YÛn$·}×WðÑ@+^ªÈb°dı�8y2öA»;^¢ËB3râ¿O{jÄ[· /U¼Ô9‡EžîGÎk¹`\ÌÒ¼—HAÑD�ÒH&HƒL' žá¬Ì÷üÇc’w€ WÜâe0Êžÿ$¥Å󳓹¼¤·¹Ä¢ñž$§OÆC*½d|Œ%–�'”Áš`ƒäN@"çÞ°’#�J‹)¤HÒBr*s£GB�°¥EbB! +ÙÀÈVr0A´6sð�'=fƒ¡à4I²qb.ã’ÁTr,ô ²Á\Ð3™hQXòŸè¢ð@Ï"'™�ÁÄ�eeÑJ6DÃb”¼)Èn°ØQ噘±Ä²Ien´&9,Ñ–Þr†›BQ—7%AÙÁ&aQ7¢I1Ê*1š” –(;ž=Ë™rQ—«„¬Å«·o¯n¾¹{ØÍ_ÝO�/öÏoÂxãvÆ…(uõwóÕ—»Ï{‰gë€Ý±BPGxLä�¬"~'šÔ‘À¦Ì‘÷W7_§iöËè÷W·· Ð¥x™ÔÀAŽäN܉lu$q8ÄÌu$ïD°à%ëeÔ\”¯ëy–ITaz²áU„gQÃÆ‰Ô¸<çÎ\ß3\~÷:h«“}³«“Ñ×V'sõTV'ç;«ã¬«%d¤�`Ž w—As\ÁÊzPo[�Ú³ Žà%Ôlnà´Î¹ZÅ‚&„Jst’û2l‹ä¼m°$ …Z”@jª(ˆNžê³ÀèÀÕ+�pKiŒàâîuØ”CjU@„ ؤ¡ø.­C"Thä |3Q¸CSxp9¢ïÚáëà·ÓÇ›×pq<ê+f12p3YQq¦at.áõªLÍðuø "÷àÏŽØWÍÙèz”‹Ù…a‘bx0„‹éÅõÂi°laÇb©}Ýà ©?ÂÅù饳Æq(³Å‡ Ktq:îšÁëÐ+ÄYìûö¸$öD‹SÂPÝÅ-!õkG±³¼Š]Ճױ‹/¤xãp?lo™7®¼ÓØ>XöÁ ¦µŠ¸ºËØ5ÄÜ)UÞ­îG')Ë‹R ò*ÒËÅÚ±Üd+� ÍèUÌ¡ÈÔëŠNŽú¨BwMÈ \9€}´ša…ò�¹ ¼ iF¯_ÞY{a¡OCT€“ùPÕCY†¦=^o&=e°k$–÷ÙaÆÈ¤Q&…ŽB ü´‡i]ÎvÛÃ{ryþyíñ ß§=œ'�¬”ã´-jþ\×0IY„œl‹_ �f0 „ Óž“G Ãù.p°Áí sœ·Å-œ���“¤Ë vÒË,ˆÓ.™5Ù:8³ˆ~Ú%³bÜ ôpõó¶Âr9º4Ç#ÿ²±¿<žîþóiÿ£îQº<%5=Rd6€žsÓ.8ÿzøÄS\�Ú·ïs¢t~¬åj#j#iƒ´1X_µ¸lÀ_Nû‡70fq Þ)f´¡œʲò\ðñÀ™ì~ú÷á_‡ßÿtØ?_?<}z¹ß')½SôN¥ôŠÆ«”~¸µ›LÇÓóËÇÓËóž!ð¦j“½K^©y¥æ•šWm½¢ß»R.÷ÇÓýáx:<~æÐuý½î’S¹å”[PɃâ 0ùdY%�—¯:Þ\ã„gPVAYeTó ¸Ànä”aÈI4æeÊ ”¨Ú ¸ n礼ä<­½vP߉—”J ”()T±Qa¡_ÿ|í°ÜRUÄ㬀P)¡RB¥„*5**¤�Œ¼~h37ãˆÊ(*£¨Œ¢ U„�Œ¡\×uäËÁ�1*£¨Œ¢2ŠªsTTÉnd„òE¤‰ÄǤŒ’2JÊ(©ÎIQ¥¸•1öQ^3ÇŒÊ()£¤ŒHu&EE[•ƒå}µ�LnRB¤„H ‘ÊL ж m_ª1ÌJ•”PVBY e•9+ª¼U8úŒ)N+'+¥¬”²RR×Lêšd·*' ûHiR9¤ŽKê¸tþDÄ Ðjc«rxý.c†‰_’Z/©õ’UFj¥ä• 3V¿@�%Cj¿¤öK.jCA¨ƒ’ËÛ?ÙàD<5[ýݨü{n¨Šj”´åü;óô;Ø%‹‚Vc%¯ ÕI­‘‚ûM­ÚbͤvJj§½"©!Òbˆ¯±«¬—tôxœ$µaÕ@�”ÔHI�”¶'õ¹€Ô TµPR %µPÂßø\°y·“ú/¡²Q%õPR%üßîöù UÿÕ?�~ïvú‰ÛéWíòK÷¯žÐ_ÝCõ_ŠÊH=”Æ—£zÇVW~·?òàò³:O×è?~ù²77º;ÝÝ?}¾ºùŽàQ^DJŽ«›o_x{—Ð2ïürU~”/ÿË”¿=}Úßüó¸×á%øõ݇ýýñíÛ›o^Ž?Xn|ó|{K¥ñîöö=C¸ùöËþñ�¥¾�[¬C�ýJ¶šš endstream endobj 1871 0 obj << /Type /XRef /Index [0 1872] /Size 1872 /W [1 3 1] /Root 1869 0 R /Info 1870 0 R /ID [ ] /Length 4303 /Filter /FlateDecode >> stream xÚ%ÚYˆ%ß]Àñ{nwuOOÏôìû¾OÏÌ�™;û¾ïû¾ïƒú_RàB\@•*ˆBp ˆ¨+Aÿøƒ ÅBâƒF„¼‰&©Ähp‰ýùååË9¿[]U·~ßS÷œßé^¯×ûQ¿76Ü›`s¿×Ëz©×ÿDo¦Õ<˜‰}x,– /öPì‘={¨›ÁX¿—ÞÎ{ ;³Äv‰Ý×�€Ùb—ÅîéN±›bwuçÂÔL¬�ëÞÑ�óÅ⺷uÀB±—b·tÁb±·b7u—ÀÒ~¯?�‰ÝÐ]ËÅæˆ]×]+ÅæŠ]Ó]«Åˆ]Õ]kÅ–‰]Ñ]ëÅÖ‰]ÖÝÅöŠ]ÒÝ›ÅΉ]ÔÝ[Å΋]ÐÝÛÅžˆ�×�†3±rTìœîNØ%6%vVw»Ån‰�ÑÝ3·12uUì´îöÍÄòžØ)Ýýp@,‰�Ô=‡Äâù�Ð= Gĉ×= ÇÄvŠÓ�Nˆ‹Câ¤3Wéâ»Ñ�š¹ÓÑG‘Ë8}|™™o™ âûÒ�qAlL,n-â%±q±º‘€+b‘·øZ‘¼™¬fE|ß}º‘øbñ}ã‘„4·Äúb{uC¸;b#bñ8CÖ{báËnÝý�Ør±HE ’Gb«ÄvéÆ{"¶U,Òøž‰…;tŸÃ ±Wb¡ÀKx¯á]êõæºÙïc NÀ|ˆç²Ò¨�1ý~f°ÏŽÁ>3ì?­ÓýÔÿ�èÆ· ÌÒ5œ›,õ&¾ŸŽ�¡ÛÌJ½ÙÛ"ft7qÝ8ÕÌI½¹ß�O�éf>µÍB0V›Å`„6KÁ¸l–ƒÑØÄ=ƒÍj0òšµ`¼5ëÁ(k6‚±Õx›5FT³Œ£f;xt�gÚxØ�,4ÒÓÈ[#¡�L7h¸Ñ�°aX3/õ¦žÄ÷ RsÀ·Œ»ânCê†í Ûã£áxcD5ÌnŒÁ†Ï�QÛ°¸1Îî6Þ �×Hs(õ âBñŠŒ'ä=Ôð´ñæjØÙx×5œl¼&6Þ§Ís¯Òxg¿€—ºÞÙÍ+­È Íš«©·ä‹q¡û.4Ââ9b�µ"ƒ1Bú™˜ùÛ¬Ý ¯a–XÒzë¸×N!a±wðÞñãЃÞÙo·@ñ,õÖí‹OÃÓ88~:Bà¥/žQK|0 ñ«1üV¼�ç^Œ”öyê½ùËžÖ~7­Ì!‹À�ÃÛ8ËRX[a9¬€•° VÃX Û`l‡iX`#l‚°ŽÀ!X�zGöÆ·Ü Ø {`/ aì‡pÐÝ‚h탡ß{ØwÈQ8Çá\€“p NÃ8 çà<܃éwéãÖ.Â%¸Wá\‡p nøë6Ö»«—ÞRoà½î„OÀC?ÇñHî§ÞÃ#q¡GðžÀSx!ð wCÛ�ë ¼…wÀ«Ö©ZJµD;£ Ý-‘Úq`SÜPkúÑÒ§¥OÊÇt!~>ÉÐ΃˜j,€˜`0§�ã˜Ó2§�ƒIÓ’¦%MKš–4-iZÒ´|iYÒ²¤eIË’– ­aÐò¯%WË«vÚ½¬N½_þn|A�©Ý™z[Ý]@Ÿ–>-}ZúÐ"$ñ>µô!M¢Oj[¾´|iùÒò¥¥JK•–*-UZª´Ti©ÒRª%HK�ö2°¤eIË’–%-KÚ›@•–*-UÚ»@¸ö>p£•øVâÛ礎/ø$õ>ùsÑâAKïœÔR •ýö½ƒ§RïŸíiõa¤Ôûõ�QƒqN´fÃB˜H½OOÇÁ“0ÃØ‹RïwÇ!1�ŒWPÌL†ïÄV@LWAL×@L×;8Ù1Ü1 ÜføÉi0Ã›Þ æuÓqÏfsÓG`{ê}áiÜÐg6»¾Õ�—Â>Øà ‚Ã^ãà5Ä1±Ài8gàœ„Sp ®ÀÑÔû“Ÿˆëž… p.Áe'�'~nÀM¸à6Ü�‡pîÁ}xcºi|3?Oý ®öÃSx¡Ê ðÎi#µ` ¼ï‹×¾j<öx8‘(Ò”NZ&X ö:õþj[ÄÜ}™AÌ,QŽ¯Ê `NÌ�¹@šr¾ëIiå㸸떋À £¤TI©rHT¹0õþåN\7¦OIŸ’>%}Jú”ëÀº¢ä_É¡’C%‡J•*-JÆ– %‘ÊX*©Œ‘ÊXì�½@•’*%UJª”—a_ê}ç·ãþõÊ£@š’/%UJª”T)‰Tr¨$HyÎUJª”æèÆofL÷K ”WRïvÇ…®áJ•*9T2§¼#)ñHî[ÅDfî¥4ûûñ· +yUò¥äKùHS’¦$MIšò%ļ†P�%%KÊ÷N߃}�QÈ`,¥g_‰C&`6LÂv˜•ÒÆ±øtÌ…)˜óa,„E°–ÀRXËa¬„U°ÖÀZXëal„M°¶ÀVØ;à:̼#‡Óq;a `7ì�X(Áòpj?XNKÁ©Ã`8u,û¦ŽƒÅÞÔI°Ä›: gà,œƒóp.Â%¸ WàÜ„[pÁ�”Ný0nüÜ…{F<€‡ðžÂ3x �Sº9û^ÀKxoá�Uê˜Ö›”îÿuL†œ9òX‡®#ðÞ”þø¬CòY «9r2ädÈe?—éœ9r äÒ˜Kc.ƒ¹üæã)½[ç£EΈœ9#ru†á{�{áF¾Âm÷ºy«eâe.06¤hN‹œ9-rZäì̹‘s#Ÿ‚äÉ¥;_•ÒÏükÜ_ršåÉ ’$'H® 1\í’±8 GÁÔ¯xçSkÝa|7úäQS O•úäÜÈ÷¥ô©ÍqÉ('Dý€HyT ˆ”ŸrfÏ~Y R.µ¹LçgRú­#qråäÊÉ•“+'WN®œ\ùU`Xn,ä7€k9×r®åäÊÉ•“+'WN®œ\9óÇ@¤.Òý4¥Ïmˆ;àUΫœW9õò7À°< £TçàÎû¥“ÐÎ×ê¼_:ÉëHØ�¹º‰”¾÷…ø JuDê(Õ±©“ßn2¥?ý(abǺŽH�÷KǦŽM›:ï—ŽC�÷K'G�÷KGÌŽ˜�ÄwììˆÔm ^´èÓñ¥ãPGŸŽW�äu›RúÚ·ã6ÈÕq¨ó’é8Ôq¨ãPÇ¡ÎK¦c]ç%Ó±¤cIÇ’Ž%�YËp-Ľp£“”îhJÿóq!ªtTé¨ÒEY‰W�wNG•Ž-:Zt´èhÑÑ¢£EG‹Ž-:Zt´èhÑÑ¢£EG‹Ž ºG V‘¼û)}ëÏ↸ÑyûtíÂZt´èhÑÑ¢£EG‹ŽÝ{§êA‚¾q4ó tø"–ÁŒÃ,X £)ý×Ê8dfÃ$Ì�¹0ó`>,€…°ÃX Ë`9¬€•° ÖÂ:X` l„M°ŽÁšÔwµ¶Áv˜†°vÁvÃØ CØûá„CpŽÀQ8'á<†ã©¿üSq§!*‹gᜇ p.Áe¸Wá\‡pnÁm¸wá܇ð¢DOè)<ƒFëHÅ“Ôßþçqk/༆7ðÞ#jÇÕŒ¨û0£Àˆš5#jFÔ¨)PS ¦@=7õöëqÙ¯=ûz^êŸþ|ÄÈP“¡&CM†š 5j2Ôd¨ÉP“¡&CM½z Т¦EM‹Ú—®Q3¢fDÍ’š5jÔ<¨e«Þ™ú·Vǽ�¡&CM†š 5j2Ôd¨ÉP“¡&CM†š 5j2Ôü«�-jZÔ²_Ë~-ûµç\ŸNýW;âºd¨ÉP“¡&CM†š 5j2Ôd¨ÉP“¡&CM†š 5j2Ôd¨ÉP“¡öލ9Y?FÔŒ¨Ã Ô/�u”ÖvC¤›µŸT5Álà·vI~›úŸøLļ(#�Á¬Ôÿ(V&È“0¦`.¬…Ù©ÿK'P7XÀ Â"X K`),ƒå`Ò1X «À ``Uùa£–2Ð`ëRÿ7ÿ(N¿âÓM°¶ÀVØÛav€ã î~žÆ`ì…ý`±7P¨Œ .¾ÔÿÝ2.i628¦$ƒc`¢48'ÁŒbpÎÀYˆ�†óû –´úÁ¥ÔÿýÅ™cCá*ØF\›ƒ›`Ë`pl î‚í�Á}°)0x¶�A±ð.V³ƒWÀƒ�)ÝÀän`ÍTXæ‘ä§©ÿ•ÍqC1ÝM#i*ž³`fƒìR[Œ¥þW?‡�¡ˆZ©§QÈy!ç…œr^ÈyÁ’bAê7WâÏ(PH|!çEä\B 9/$¹�ä"b(føç�ñ·r^Èy!Ý…tÒ]Hw!Ý…tÒ]Hw!Ý…tÒ]Hw!ÓEÜóL¦ÿíoâÌ2]Èt!Ó# é.b^,¿ÅÉÔï>Ëy!Ó…ügf>øÇø@â é..¦þ¶GÌRµ�éB’‹Ø!Š-!ù-¤¶ˆ�©-b¿Gj‹Øå‰m�ØÇ‘Z…Ƭ�|\™9ý§ãôQ+�­(汱Ĉâ)¼ðt7§‘Í?ˆ‘lÔ¶‘² [Ê�™ dÖÆ:@fÚ˜�GyGòÚ(ÊÊŒjc¦Ð˜)4f �™Bc¦Ö—)ýeíd™üz\MRTC³6ªQùÌ=3õÎL•3kc$çꘙše¦b˜)fŠ…Yëý( 8ê„™a¦:˜) fj‚™r`¦˜ÙÜÍZ{CµÿaTvN¥‘ ãÖM“ý‚¢Ýplø•{‡QB�Í�Å`§ahª;œ•F†¯â/ü†vµ†JÅCû$è¹Ùö.�Xœm�(äEåilµÜá°):´>Ànˆ[,¦ÞÀöAì\Øg„C³á#`/ux ŽÃ 8 §à4œ�³iäзâ{œK#÷¦£u>�|üo£u!�üÆþh]L#_º­Kiäï¾­ËiäßwEëJýÉ/Gëjý§MѺ–²íŸˆÖõ”Ýz­)ûÒFëf;õÓѺ•Æ~ï›Ñº�Æþû×¢u'�ßÞ­»iü>­{iüÿ~1Z÷Ó¬_=­iÖw>­‡ibó£h=JçÎDëq𸕉h=Iÿy.ZOÓìþ�?}–fl*ZÏÓìoÿ8û/ÒäÇOEëešüò7¢õ*M6Ÿ‰‚® ~ˆÍXÉû yb÷ë)<ƒçƒ36©cGVº?HÞ‡Øxµôý`¥^õÒä7£T\)W¶’+ª•…leC«Rh¬ìyUvÓ*ÊW\«xZñ´b]EÖŠzc+þU´­HXq·bbEàŠŽm«°¬Å«ÕàÅ]YQUþO¡R�®(_ù�ÊÿƒT›ÁÓ¨<�ÊÓ¨<�ŠÊ•+*WT®¨\Q¹¢rEåŠÅ‹+W,®X\±¸bqÅâŠÅ‹+W,®X\±¸bqÅâê,øw‰Ê¾xu.Â%°QZ]ÿÙP]ƒëpüWIåß ªÛ ŠXÙ²ªî�½ÏÊ?¼TþÓ¤2o¯ì}V_I|%ñ•ÄW_I|%ñ•ÄW_I|%ñÕLâÇÏ$þ{/{Z ú0£�ÁŒÃ,˜€Ù0 s`.LÁ<˜ `!,‚Ű–Â2X+`%¬‚Õ°ÖÂ:X`#l‚Ͱ¶Â6ØÓ°vÂ.ÀnØ{aû`?€ƒpÃ8š&¿ûÕ™Çô×½ÿå8NÈ endstream endobj startxref 784733 %%EOF tools-0.8.0-beta.1/importers/ding2tei/src/000077500000000000000000000000001526415265400202615ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/App/000077500000000000000000000000001526415265400210015ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/App/Ding2TEI.hs000066400000000000000000000276651526415265400226620ustar00rootroot00000000000000{- - App/Ding2TEI.hs - translate the Ding to TEI (AST) - - Copyright 2020-2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Translate the `Ding' to `TEI'. -} module App.Ding2TEI (ding2tei) where import Control.Monad (liftM) import Control.Monad.Trans.State (State, state, evalState) import Data.Foldable (toList) import Data.List.NonEmpty (NonEmpty((:|))) -- When laziness is not required, Data.Map.Strict is to be preferred over -- the default Data.Map.Lazy. -- - See: import qualified Data.Map.Strict as Map import Data.Map.Strict (Map) import Data.NatLang.Dictionary (Dictionary(Dictionary), Body(Body)) import Data.NatLang.Usage (Usage( Usage )) import qualified Data.NatLang.Usage as Usage import Language.Ding.Syntax (Ding) import qualified Language.Ding.Syntax as Ding import Language.TEI.Syntax (TEI) import qualified Language.TEI.Syntax as TEI import qualified Language.TEI.Syntax.Reference as TRef -- | Map from headwords to the last number given to that headword (if any). type IdMap = Map String Int type IdState = State IdMap -- | Modify value and also give out the new value. -- Similar to `updateLookupWithKey' from `Data.Map.Strict'. modifyLookup :: Ord k => (Maybe a -> a) -> k -> Map k a -> (a, Map k a) -- Note that (,) is an instance of Functor, where the first argument remains -- constant upon `fmap'. (This is why the following works; v' is passed -- through.) See also the documentation of `alterF'. modifyLookup f = Map.alterF $ \ v -> let v' = f v in (v', Just v') -- Notes: -- * Computation is wrapped in the IdState monad. -- * This is to allow for the distribution of unique identifiers, which -- should be of the form `HW.n'. where `HW' is the headword and `n' is -- a number unique for that headword--naturally chosen as the entry's -- rank in the left-to-right order of headwords of the same name. -- * The IdState monad in particular is a MonadFix, which does allow to -- not only distribute identifiers using a state, but also to access -- identifiers of "later" to be constructed entries. -- * In short, MonadFix allows for bidirectional flow of information, -- albeit the state is only transferred left-to-right. -- * We use this to provide entries that stem from the same line with -- references to one another--also to later ones. -- * Alternatively, one could have separated this in two steps -- (labeling, translating), requiring an intermediate datatype (or -- some Maybe values) and a whole new set of (trivial) AST traversing -- functions. -- * See also: doc/thesis.pdf -- * There may be several orthographically identical headwords in a line. -- * Concatenating reference lists all around (often the shorter to the longer -- list) is not very efficient. To keep the order of the references, -- something like this is required though. -- * Alternative: Use a queue or a difference list. -- * Note that the lists are usually quite small. -- | Convert a Ding AST to TEI AST. -- Errors when the result contains no entries. (The FreeDict XML schema -- requires at least one entry.) -- Note that the existance of a line in the Ding does not imply the -- existance of an entry in the corresponding TEI. -- - The Ding is permitted to contain empty lines - " :: " . ding2tei :: Ding -> TEI ding2tei (Dictionary header srcLang tgtLang body) = let (Body dingLines) = body teiEntries = evalState (convLines dingLines) Map.empty in if null teiEntries then error "No real entry found." else Dictionary header srcLang tgtLang (Body teiEntries) -- | Translate a list of lines, annotating the resulting TEI entries with -- unique identifiers. convLines :: [Ding.Line] -> IdState [TEI.Entry] convLines = liftM concat . mapM convLine convLine :: Ding.Line -> IdState [TEI.Entry] convLine (Ding.Line entries) = liftM snd $ convEntries entries [] -- | Translate a list of entries. -- Takes as argument--next to the list of entries to translate--the list -- of TEI entries' identifiers that result from earlier (more left) Ding -- entries in the same line. -- Wrapped om the IdState monad, returns both the resulting list of TEI -- entries and the identifiers of these. convEntries :: [Ding.Entry] -> [TRef.Ident] -> IdState ([TRef.Ident], [TEI.Entry]) -- Notes: -- * We want to provide `convEntry' with references (identifiers) from both -- left and right of it. -- * Typically, monadic computations would only allow to pass such -- information from left to right. -- * Monads being instances of MonadFix, however, effectively are stripped -- of this restriction. -- * MonadFix has mfix, which can--analogously to fix for -- cyclic let-expressions--be used to have "information flow -- backwards"; particularly there may also be apparent cyclic -- statements. -- * We obtain references from the left, which we pass both to -- convEntry and the recursive convEntries call. -- * convEntry additionally obtains the references from the right, -- as produced by the recursive convEntries call. -- * The recursive convEntries call additionally gets the reference -- resulting from the convEntry call--as it also stems from left of -- the recursively to be processed entries. -- * Note that the order of reference concatenation somewhat matters; -- we'd like to keep them in order. -- * We could have only passed around TEI entries, these contain the -- identifiers. convEntries [] _ = return ([], []) convEntries (de:des) refs = do rec (refs1, tes1) <- convEntry de (refs ++ refs2) (refs2, tes2) <- convEntries des (refs ++ refs1) return (refs1 ++ refs2, tes1 ++ tes2) -- Naming convention: -- * gRefs: references to other group's units within the same line -- * uRefs: references to other units in the same group -- | Translate a single Ding entry to a list of TEI entries. (Ding entries -- with several keywords (units in the source group) are split up into -- equally many TEI entries, linking to one another as synonyms.) -- -- Takes as additional argument the identifiers to all TEI entries that -- result from the same line, albeit different Ding entries. These are -- used to create "related"-references. convEntry :: Ding.Entry -> [TRef.Ident] -> IdState ([TRef.Ident], [TEI.Entry]) convEntry (Ding.Entry (Ding.Group keyUnits) valGroup) gRefs = convUnits keyUnits [] where -- Note: -- * Functions are local (in a where block) here, to not need to pass around -- the translations and `gRefs', which are only needed in the -- leaf-function, convUnit. translations = groupToTranslations valGroup -- | Create a list of TEI entries from a list of Ding units belonging to the -- same group (all sharing a common translation group). -- -- Resulting TEi entries are linked to one another as synonyms. convUnits :: [Ding.Unit] -> [TRef.Ident] -> IdState ([TRef.Ident], [TEI.Entry]) -- Note: Analogous to convEntries. convUnits [] _ = return ([], []) convUnits (u:us) uRefs = do rec (uRef', e ) <- convUnit u (uRefs ++ uRefs') (uRefs', es) <- convUnits us (uRefs ++ uRef' : []) return (uRef' : uRefs', e : es) -- | Create a single TEI entry from a Ding unit and the corresponding -- `translations', annotating it with references to synonymous and related -- entries (the local argument referring to synonymous entries, stemming -- from the same Ding entry/group). convUnit :: Ding.Unit -> [TRef.Ident] -> IdState (TRef.Ident, TEI.Entry) convUnit u uRefs = do let headword = Ding.unitHeadword u n <- nextId headword let ident = TRef.Ident headword n return (ident, makeTEIEntry u ident uRefs gRefs translations) -- | To a string (headword), get the next id (counter) and update the state -- accodingly. nextId :: String -> IdState Int -- Note: -- * Non-existing entries in the map are considered of value 0. -- * The first provided number is 1. -- * Dictionary people seem to like 1-based counting. nextId str = state $ \ cmap -> modifyLookup (maybe 1 (+1)) str cmap -- | Transform a `Group' to a list of corresponding TEI translation elements. groupToTranslations :: Ding.Group -> [TEI.Translation] groupToTranslations (Ding.Group us) = map unitToTranslation us where unitToTranslation :: Ding.Unit -> TEI.Translation unitToTranslation u = TEI.Translation { TEI.translationOrth = Ding.unitHeadword u , TEI.translationGrammar = Ding.unitGrammar u -- Note: -- * Parenthesis-enclosed prefixes are translated to -- `usg[@type="colloc"]'. , TEI.translationUsages = Ding.unitUsages u ++ map prefixAnnotToUsage (Ding.unitPrefixes u) , TEI.translationAbbrevs = Ding.unitAbbrevs u , TEI.translationInflected = Ding.unitInflected u , TEI.translationNotes = Ding.unitSuffixes u } -- | Create a TEI entry. makeTEIEntry :: Ding.Unit -> TRef.Ident -> [TRef.Ident] -> [TRef.Ident] -> [TEI.Translation] -> TEI.Entry makeTEIEntry u ident uRefs gRefs translations = TEI.Entry { TEI.entryIdent = ident , TEI.entryForm = TEI.Form { TEI.formOrth = Ding.unitHeadword u , TEI.formAbbrevs = Ding.unitAbbrevs u , TEI.formInflected = Ding.unitInflected u } , TEI.entryGrammar = Ding.unitGrammar u , TEI.entrySenses = [ TEI.Sense { TEI.senseGrammar = [] , TEI.senseUsages = Ding.unitUsages u ++ map prefixAnnotToUsage (Ding.unitPrefixes u) , TEI.senseTranslations = translations , TEI.senseExamples = Ding.unitExamples u , TEI.senseReferences = toList (makeRefGroup TRef.Synonymy $ map makeLinkedReference uRefs ) ++ toList (makeRefGroup TRef.Related $ map makeLinkedReference gRefs ++ map makeTildeReference (Ding.unitReferences u) ) , TEI.senseNotes = Ding.unitSuffixes u } ] } -- | Create a reference group. makeRefGroup :: TRef.RefType -> [TRef.Reference] -> Maybe TRef.ReferenceGroup makeRefGroup _ [] = Nothing makeRefGroup refType (ref:refs) = Just $ TRef.ReferenceGroup refType (ref :| refs) -- | Create a reference with `\@target'. makeLinkedReference :: TRef.Ident -> TRef.Reference makeLinkedReference ident@(TRef.Ident hw _) = TRef.Reference (Just ident) hw -- | Create a reference without `\@target', as is required for \~tilde -- references. (In fact, one could infer such a target, whenever there is -- exactly one TEI entry with the headword referred to.) makeTildeReference :: String -> TRef.Reference makeTildeReference = TRef.Reference Nothing -- | In TEI, optional prefixes can be encoded as collocates. -- -- Note: -- * Depending on the content (e.g., "etw."), might be more -- appropriate, but such content analysis is not done. prefixAnnotToUsage :: String -> Usage prefixAnnotToUsage pref = Usage Usage.Colloc pref -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Config.hs000066400000000000000000000132571526415265400220320ustar00rootroot00000000000000{- - Config.hs - configuration of some output variables - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {- - See also - * Language/{Ding,TEI}/{Read,Show}/ - * Language/Ding/AlexScanner.x - on configuration and classification of usage and grammar annotatios. -} module Config ( Person(..) , editor , maintainer , contributors , publicationDate , status , modVersion , programName , programURL , programDownloadURL , projectName , projectURL , dingDownloadURL , gpl3url , gpl2url , agpl3url , makeVersion , Change(..) , changes ) where data Person = Person { personId :: String , personName :: String } -- Involved people: person_shumenda :: Person person_shumenda = Person "shumenda" "Sebastian Humenda" person_eleichtfuss :: Person person_eleichtfuss = Person "eleichtfuss" "Einhard Leichtfuß" editor :: Person editor = person_eleichtfuss maintainer :: Person maintainer = person_eleichtfuss -- | Contributors to this program, with the corresponding copyright -- periods contributors :: [(Person, String)] contributors = [ (person_eleichtfuss, "2020-2022") , (person_shumenda, "2021") ] -- | Date of last output-affecting change of this program. -- Must be given as YYYY-MM-DD. publicationDate :: String publicationDate = "2022-04-18" status :: String status = "stable" -- | Modification version. Should be incremented for any output-altering -- change of this program. To be reset, when a later version of the Ding -- is targeted. -- May also be set to -devel to indicate frequent changes without version -- change. modVersion :: String modVersion = "1" programName :: String programName = "ding2tei-haskell" programURL :: String programURL = "https://github.com/freedict/tools/tree/master/importers/ding2tei" projectName :: String projectName = "FreeDict" projectURL :: String projectURL = "https://freedict.org/" programDownloadURL :: String programDownloadURL = programURL dingDownloadURL :: String dingDownloadURL = "https://ftp.tu-chemnitz.de/pub/Local/urz/ding/" gpl3url :: String gpl3url = "https://www.gnu.org/licenses/gpl-3.0.html" gpl2url :: String gpl2url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html" agpl3url :: String agpl3url = "https://www.gnu.org/licenses/agpl-3.0.html" -- | Combine the Ding version and a modification version. makeVersion :: String -> String -> String makeVersion dingVer modVer = dingVer ++ "-fd" ++ modVer -- Notes: -- * chUsersShort and chUsersFull must be non-empty lists. -- * The NonEmpty type is not used to ease manual modification. data Change = Change { chDingVersion :: String , chModVersion :: String , chPersons :: [Person] , chDate :: String -- must be in YYYY-MM-DD format , chItems :: [String] -- translated to 's } changes :: [Change] changes = [ Change "1.8.1" "0.1" [person_eleichtfuss] "2020-09-11" [ "Initial import from Ding (version 1.8.1)." , "Fixed many syntax errors and inconsistencies in the Ding dictionary." , "Most explicit Ding annotations are transferred to TEI." , unwords [ "Several entries per Ding line are given references to one another" , "(@type=\"see\")." ] , unwords [ "Entries with more than one keyword on the source language side" , "are split up into multiple entries." , "These are linked using references of @type=\"syn\"." ] ] , Change "1.8.1" "0.2" [person_eleichtfuss] "2020-10-14" [ unwords [ "Identify examples to some entries; add the former to the latter" , "at 'entry/sense/cit[@type=\"example\"]' and remove the" , "examples from the list of regular entries." ] , unwords [ "Add annotations that are only implicitly present in the Ding" , "dictionary, such as: {f}, but no {pl} -> {noun}." ] , unwords [ "Transfer some annotations within Ding entries (e.g., when" , "\"Apfel\" is a masculine noun, we may infer that its translation," , "\"apple\", is also a noun." ] , "Fixed some TEI syntax, as per comments from Sebastian Humenda." , "Recognize more types of annotations (notes)." ] , Change "1.8.1" "0.2.1" [person_eleichtfuss] "2020-10-28" [ "Mark units with annotated inflected forms as verbs." ] , Change "1.9" "1" [person_eleichtfuss] "2022-04-18" [ "Update to Ding version 1.9." , unwords [ "Unify xr elements by @type." , "(Previously, each xr element contained exactly one ref element.)" ] , unwords [ "Place @xml:lang (more) correctly:" , "at top-level text element (source language)" , "and at cit@type=\"trans\" (target language)." , "(Previously," , "the target language was given at the top-level text element, and" , "the respective language at each quote element.)" ] ] ] -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/000077500000000000000000000000001526415265400211325ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/000077500000000000000000000000001526415265400224565ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/Dictionary.hs000066400000000000000000000026571526415265400251310ustar00rootroot00000000000000{- - Data.NatLang.Dictionary.hs - general dictionary - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - General dictionary AST. -} module Data.NatLang.Dictionary ( Dictionary(..) , Body(..) ) where import Data.NatLang.Language (Language) -- | A polymorphic dictionary type, parametrised over the header type and the -- type of elements (entries/lines) contained therin. data Dictionary header element = Dictionary { dictHeader :: header , dictSrcLang :: Language , dictTgtLang :: Language , dictBody :: Body element } deriving Show -- | The body of a dictionary, composed of a list of elements (entries/lines). newtype Body element = Body [element] deriving Show -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/Example.hs000066400000000000000000000024431526415265400244100ustar00rootroot00000000000000{- - Data/NatLang/Example.hs - examples - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Examples, as they are found in TEI, while also being added to the Ding AST - during preprocessing. -} module Data.NatLang.Example ( Example(..) ) where -- | An example in the source language with translation. -- Usually, there is one translation given, however any number is possible -- (including none). data Example = Example String -- ^ example in the source language [String] -- ^ set of translations deriving (Show, Eq, Ord) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/Grammar.hs000066400000000000000000000063111526415265400244010ustar00rootroot00000000000000{- - Data/NatLang/Grammar.hs - Grammar (linguistics) information - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Grammar information (linguistics), as present in the Ding dictionary, - albeit also representable in TEI. -} module Data.NatLang.Grammar ( GrammarInfo(..) , GramLexCategory(..) , PartOfSpeech(..) , VerbType(..) , PronounType(..) , Gender(..) , Number(..) , Case(..) , Collocate(..) ) where import Data.NatLang.Usage (Usage) -- | A grammar single annotation, where "{f,n}" counts as two of them. data GrammarInfo = GramLexCategory GramLexCategory | Collocate Collocate [Usage] deriving (Show, Eq, Ord) -- | Grammatical or lexical category (resp. values thereof). -- See https://en.wikipedia.org/wiki/Grammatical_category for a distinction. -- Might contain information not considered related to grammatical or lexical -- categories. I am not a linguist. data GramLexCategory = PartOfSpeech PartOfSpeech | Gender Gender | Number Number | Case Case -- ^ rare in the Ding deriving (Show, Eq, Ord) data PartOfSpeech = Noun | Verb [VerbType] | Adjective | Adverb | Preposition | Conjunction | Article | Pronoun [PronounType] | Numeral | Interjection | Particle deriving (Show, Eq, Ord) data VerbType = Transitive | Intransitive | Reflexive deriving (Show, Eq, Ord) -- | Some pronoun types. -- There are many more, but the Ding does not annotate them. data PronounType = Personal | Interrogative | Relative deriving (Show, Eq, Ord) data Gender = Feminine | Masculine | Neuter deriving (Show, Eq, Ord) -- | Grammatical number -- The argument to both constructors specifies whether the annotated word -- may only occur in the respective number, that is, whether it is a -- singulare/plurale tantum. data Number = Singular Bool | Plural Bool deriving (Show, Eq, Ord) -- | Grammatical case. -- Only those listed that appear in annotations in the Ding. data Case = Nominative | Genitive | Accusative | Dative deriving (Show, Eq, Ord) -- | Grammar collocate, such as "{+Dat.}" or "{+conj}". data Collocate = CollocCase [String] -- ^ interrogative pronouns; often none Case -- ^ case of collocating word | CollocPOS PartOfSpeech -- ^ POS of collocating word; rare | CollocNumber Number -- ^ number of collocating word; rare deriving (Show, Eq, Ord) -- vi: ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/InflectedForms.hs000066400000000000000000000032411526415265400257160ustar00rootroot00000000000000{- - Data/NatLang/InflectedForms.hs - information on inflected forms - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Data types for inflected forms, as they appear in the Ding dictionary and - may be (partially) represented in TEI. -} module Data.NatLang.InflectedForms ( InflectedForms(..) , InflectedForm(..) ) where import Data.List.NonEmpty (NonEmpty) import Data.NatLang.Usage (Usage) -- | Two inflected forms of a word. This is meant to be used for the English -- language's simple past and past participle of a verb. data InflectedForms = InflectedForms (NonEmpty InflectedForm) -- ^ simple past (NonEmpty InflectedForm) -- ^ past participle deriving (Show, Eq, Ord) -- | A single inflected form, annotated with usages. -- Note that these usages cannot be specified in TEI, or at least it is -- unknown how. data InflectedForm = InflectedForm String [Usage] deriving (Show, Eq, Ord) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/Language.hs000066400000000000000000000031001526415265400245270ustar00rootroot00000000000000{- - Data/NatLang/Language.hs - specific languages - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Natural language data types. - Only English and German for now, the main languages of the Ding dictionary. -} module Data.NatLang.Language ( Language(..) , showCode ) where -- | There are more languages. They are not of particular importance for the -- German-English Ding dictionary though. data Language = German | English deriving (Eq, Ord) -- | Show the full language name, in English. instance Show Language where show German = "German" show English = "English" -- | Show short language code, as to be used in @xml:lang. -- This is the ISO 639-1 code, unless no such one is available, where the -- ISO 639-3 code is shown. showCode :: Language -> String showCode German = "de" showCode English = "en" -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Data/NatLang/Usage.hs000066400000000000000000000052221526415265400240570ustar00rootroot00000000000000{- - Data/NatLang/Usage.hs - usage information - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Usage information, as present in both the Ding dictionary and TEI. -} module Data.NatLang.Usage ( Usage(..) , UsageType(..) ) where -- Notes: -- * In the Ding, usages are represented within <[]>. -- * In TEI, usages are represented in tags. -- * See the TEI doc on . -- * https://www.tei-c.org/release/doc/tei-p5-doc/en/html/DI.html#DITPUS -- * See also the TEI Lex-0 documentation on . -- * https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html#index.xml-body.1_div.7_div.2 -- * See also the Wikipedia on Varieties and Registers (contains a list). -- * https://en.wikipedia.org/wiki/Variety_(linguistics) -- * https://en.wikipedia.org/wiki/Register_(sociolinguistics) -- | Usage information, bearing a particular type. data Usage = Usage UsageType String deriving (Show, Eq, Ord) -- Maps directly to TEI recommended \@type values for . -- | Usage types. -- These map directly to the TEI Guidelines' recommended \@type value for -- . Some unused types are omitted. -- See: data UsageType = Regional | Time | Domain | Register | Style | Preference | Acceptability -- likely unused; consider to remove | Language -- @type="lang" - do not confound with @xml:lang ! | Colloc | Hint deriving (Eq, Ord) -- | Show the corresponding TEI recommended values for usage types. -- See . instance Show UsageType where show Regional = "geo" show Time = "time" show Domain = "dom" show Register = "reg" show Style = "style" show Preference = "plev" show Acceptability = "acc" show Language = "lang" show Colloc = "colloc" show Hint = "hint" -- vi: ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/000077500000000000000000000000001526415265400220045ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/000077500000000000000000000000001526415265400226655ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/AlexScanner.x000066400000000000000000000351241526415265400252660ustar00rootroot00000000000000-- Language/Ding/AlexScanner.x - lexer -- -- Copyright 2020,2022 Einhard Leichtfuß -- -- This file is part of ding2tei-haskell. -- -- ding2tei-haskell is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as published -- by the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- ding2tei-haskell 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 Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with ding2tei-haskell. If not, see . -- Notes: -- * This file is supposed to be processed by Alex, "the lexical analyser -- generator for Haskell". It contains both Alex code and regular Haskell -- code. The result of Alex invocation is a regular Haskell source file. -- * Alex User Guide: https://www.haskell.org/alex/#Documentation { -- Haskell module header and import statements. module Language.Ding.AlexScanner (scan, AlexPosn) where import Data.NatLang.Grammar import Language.Ding.Token } -- In contrast to the "basic" wrapper, "posn" allows for keeping track of -- positions. %wrapper "posn" ------------------------------------------------------------------------------- -- Definition of named character sets and regexes ------------------------------------------------------------------------------- -- Notes: -- * $x is a (named) character set -- * @y is a (named) regular expression -- * $x # $y is the set difference of $x and $y ($x - $y). -- * See also: Alex User Guide, chapter 4. $anyLeftBracket = [ \{ \( \[ \< ] $anyRightBracket = [ \} \) \] \> ] $anyBracket = [ $anyLeftBracket $anyRightBracket ] -- Any character that may (!) have special semantics (incl. <:>), excluding -- $slashSpecialChar. -- Note that <:> is only included to avoid matching <::> as part of @word. -- Some characters, in particular all single colons have to be merged with -- their surrounding (e.g., text atoms) later. $specialChar = [ $anyBracket : \| \; \, \/ \~ \+ ] -- Characters that are special in that they may occur enclosed in slashes. $slashSpecialChar = [ $specialChar \% \@ ] $textChar = $printable # [$specialChar $white] -- Anything printable, not containing a special char, nor whitespace. @word = $textChar+ -- To allow infix whitespace, use the below (in place of @word): -- @text = [$textChar # $white] ($textChar* [$textChar # $white])? -- A left context that marks a slash as "left-free". This is used -- particularly to identify "opening" and "closing" slashes, where the -- former is "left-free", but not "right-free", as for example in -- /abbrev./ -- Notes: -- * This must not contain '.' ! (consider /abbrev./) -- * Most interpunctuation is usually followed by a space. -- * $white includes '\n' (which is desired). $slashLeftFree = [ $white $anyLeftBracket ] -- A right context that marks a slash as "right-free" (see just above). -- This should in theory contain all interpunctuation (that does not require -- preceding whitespace). -- Note: -- * Expand the interpunctuation character set as needed. $slashRightFree = [ $white $anyRightBracket \; \, : \. \? ! ] -- A non-empty sequence of slash-separated words (@slashWordList), which forms -- a special case within slashes. -- Notes: -- * The final optional dot is redundant, as of now. -- * This should not be used as generic word macro, as possibly desired for -- "<>". (General mord macros should not allow a terminating '.'.) -- * $textChar should possibly be replaced by something more sensible. @slashWord = [$textChar # \/]+ (\.|\?)? @slashWordList = @slashWord ("/" @slashWord)+ -- There is only one known smiley, as of now. -- Smileys are treated as abbreviations. @smiley = ":-)" -- Abbreviations that cannot be easily parsed by normal means. @specialAbbrev = @smiley | "/.ed" $word_end = ~$textChar ------------------------------------------------------------------------------- -- Mapping from regexes to Haskell functions (actions) ------------------------------------------------------------------------------- -- Notes: -- * The functions are expected to take a matched string and produce a -- corresponding token. -- * Because the "posn" wrapper is used (instead of "basic"), most such -- functions have to be wrapped in `regularToken'. -- * Alex takes longest matching sequences (maximal munch). -- * If several rules match the same longest sequence, the first one of them -- applies. -- * The lexer should always succeed. Hence there is no special error -- mechanism needed. -- * This might change if the allowed whitespace characters are reduced. -- * Also, if triple+ '/' should be caught at the lexer level. -- * At the parser level, they'd be caught as successive '//', '/'. tokens :- -- A header line. To be parsed as is by Language.Ding.Parser.Header. ^ \# .* $ { regularToken HeaderLine } --------------------------------------------------------------------------- -- Separators (excl. slashes and single angle brackets) \n { regularToken $ const NL } :: { regularToken $ const LangSep } \| { regularToken $ const Vert } \; { regularToken $ const Semi } \, { regularToken $ const Comma } \~ { regularToken $ const Tilde } \+ { regularToken $ const Plus } \<\> { regularToken $ const Wordswitch } \{ { regularToken $ const OBrace } \} { regularToken $ const CBrace } \[ { regularToken $ const OBracket } \] { regularToken $ const CBracket } \( { regularToken $ const OParen } \) { regularToken $ const CParen } -- This is only caught explicitly, since it may not be caught as part of -- @word (which could be changed, by complicating the regex--<::> would -- still need to be excluded). : { regularToken Text } --------------------------------------------------------------------------- -- Slashes -- See doc/syntax.slashes -- Divide slashes into categories. -- Slashes have many roles (in particular one similar to brackets), but -- unfortunately there are no different opening and closing '/'-characters. -- Hence, infer such information from the context. -- * (The description there is not strictly equivalent, but should be in all -- practical cases.) $slashLeftFree ^ "/" / $slashRightFree { regularToken $ const WeakSlash } $slashLeftFree ^ "/" { regularToken $ const OSlash } "/" / "..." { regularToken $ const StrongSlash } "/" / $slashRightFree { regularToken $ const CSlash } "/" { regularToken $ const StrongSlash } -- Treat single special characters between free slashes differently. -- This would typically be done in the parser, however it is difficult to -- identify such expressions using a CFG. -- Consider "+ / % / ~". Since "word+ / word+ / word+" is generally -- permitted, this could not easily unambiguously parsed. (Note that the -- "correct" parsing in this case is unclear. $slashLeftFree ^ "/ " $specialChar " /" / $slashRightFree { regularToken $ SlashSpecial . pure . (!!2) } $slashLeftFree ^ "/ " @specialAbbrev " /" / $slashRightFree { regularToken $ Abbrev . dropLast 2 . drop 2 } -- Treat stuff like "/ AC/DC /" also as a special case. This is because, -- in general, strong slashes may occur in between weak slashes. For this -- reason, this rule may actually incorrectly catch such cases. However, -- the ambiguity needs to be taken care of somehow and this is the best -- way known to me. -- The dropLast part would be more efficient if the "monad" or -- "monadUserState" wrapper was used (one gets the length of the input). $slashLeftFree ^ "/ " @slashWordList " /" / $slashRightFree { regularToken $ Abbrev . dropLast 2 . drop 2 } -- An awkward special case that cannot (easily) be handled otherwise: $white ^ \"\/\.ed\" / $white { regularToken $ Abbrev . dropLast 1 . drop 1 } -- " -- Plural abbreviations. -- Note: No more than one word between the slashes is permitted. -- Otherwise, lexing + parsing would become more difficult. $slashLeftFree ^ "/" @slashWord "/s" / $slashRightFree { regularToken $ AbbrevPlural . dropLast 2 . drop 1 } -- Double slashes are used (onserved once) to bind two adjacent alternative -- expressions (bound by a strong slash). -- Semantic: "a/b//c/d" -> (a or b) or (c or d) "//" { regularToken $ const DoubleSlash } --------------------------------------------------------------------------- -- Angle brackets -- Angle brackets are special in that they also may signify less- resp. -- greater-than. Fortunately, they are, when brackets, always close to the -- enclosed object. Treat similar to left and right slashes. -- Important: This rule must be above the generic \< and \> rule(s). $slashLeftFree ^ [\< \>] / $slashRightFree { regularToken Text } \< { regularToken $ const OAngle } \> { regularToken $ const CAngle } --------------------------------------------------------------------------- -- Keywords -- Note: -- * Multi-word keywords need to be given the right context $word_end. -- * This ensures that the word ends there. -- * Ex.: Let "a b" be a multi-word keyword, and "a bc " at the start of -- the character stream. This should be matched as two text tokens, "a" -- and "bc", not as keyword "a b" and text "c". "to" { regularToken $ const KW_to } -- Grammar keywords "f" { gramKW $ Gender Feminine } "m" { gramKW $ Gender Masculine } "n" { gramKW $ Gender Neuter } "sing" { gramKW $ Number $ Singular False } "pl" { gramKW $ Number $ Plural False } "no pl" / $word_end { gramKW $ Number $ Singular True } "no sing" / $word_end { gramKW $ Number $ Plural True } -- "v" { gramKW $ PartOfSpeech $ Verb [] } "vt" { gramKW $ PartOfSpeech $ Verb [Transitive] } "vi" { gramKW $ PartOfSpeech $ Verb [Intransitive] } "vr" { gramKW $ PartOfSpeech $ Verb [Reflexive] } "adj" { gramKW $ PartOfSpeech Adjective } "adv" { gramKW $ PartOfSpeech Adverb } "prp" { gramKW $ PartOfSpeech Preposition } "conj" { gramKW $ PartOfSpeech Conjunction } "art" { gramKW $ PartOfSpeech Article } "pron" { gramKW $ PartOfSpeech $ Pronoun [] } "ppron" { gramKW $ PartOfSpeech $ Pronoun [Personal] } "pron interrog" / $word_end { gramKW $ PartOfSpeech $ Pronoun [Interrogative] } "pron relativ" / $word_end { gramKW $ PartOfSpeech $ Pronoun [Relative] } "num" { gramKW $ PartOfSpeech Numeral } "interj" { gramKW $ PartOfSpeech Interjection } "Partikel" { gramKW $ PartOfSpeech Particle } "particle" { gramKW $ PartOfSpeech Particle } -- "Gen." { gramKW $ Case Genitive } "Akk." { gramKW $ Case Accusative } "Dat." { gramKW $ Case Dative } "Nom." { gramKW $ Case Nominative } -- Interrogative pronouns (not grammar keywords in the strict sense) "wo?" { regularToken IntPronKW } "wohin?" { regularToken IntPronKW } "wann?" { regularToken IntPronKW } "bis wann?" / $word_end { regularToken IntPronKW } -- Regular word / text token -- Note: -- * This must come after all the specific keywords, or else this rule -- would be prefered over them (the single word keywords, to be precise). @word { regularToken Text } -- Whitespace -- Note: -- * Newlines do not count as whitespace, they serve as line separators, -- where a line is a well defined Ding entity. [$white # \n]+ { const Whitespace } { ------------------------------------------------------------------------------- -- Auxiliary Haskell code. ------------------------------------------------------------------------------- -- | A simple token, as identified by Alex. data SimpleToken = RegularToken Position Atom | Whitespace String -- | An action helper for regular tokens, to take care of the AlexPosn. regularToken :: (String -> Atom) -> AlexPosn -> String -> SimpleToken regularToken f p s = RegularToken (toPosition p) (f s) gramKW :: GramLexCategory -> AlexPosn -> String -> SimpleToken gramKW gram p _ = RegularToken (toPosition p) (GramKW gram) toPosition :: AlexPosn -> Position toPosition (AlexPn _abs line col) = Position line col -- | Remove the whitespace from the token stream towards the respective -- following regular token, as annotation. mergeWS :: [SimpleToken] -> [Token] -- Notes -- * There can never be two whitespace tokens in succession. -- * One could use `foldr' here, but this is not very straightforward - the -- folding function (in some cases) has to inspect the first element of its -- list argument, which therefore is inspected twice (in such cases). mergeWS ( RegularToken pos atom : toks) = Token "" pos atom : mergeWS toks mergeWS (Whitespace ws : RegularToken pos atom : toks) = Token ws pos atom : mergeWS toks mergeWS (Whitespace _ : Whitespace _ : _) = error "Language.Ding.AlexScanner: two successive whitespace tokens" -- Ignore terminating whitespace. mergeWS (Whitespace _ : []) = [] mergeWS [] = [] -- | Drop the given number of last elements. dropLast :: Int -> [a] -> [a] dropLast n xs = take (length xs - n) xs -- | Convert a string into a stream of tokens. scan :: String -> [Token] scan = mergeWS . alexScanTokens } -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich.hs000066400000000000000000000036001526415265400244300ustar00rootroot00000000000000{- - Language/Ding/Enrich.hs - enrich the Ding AST - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Enrich the Ding AST with various information. - This partially starts a translation towards TEI. -} module Language.Ding.Enrich ( enrichUndirected , enrichDirected ) where import Language.Ding.Enrich.Example (inferExamples) import Language.Ding.Enrich.Grammar (enrichGrammar) import Language.Ding.Syntax (Ding) import Data.NatLang.Dictionary (Dictionary(..), Body(..)) -- | Enrich the Ding AST in a way that does not depend on the order of -- languages. -- That is, `enrichUndirected . inverse = inverse . enrichUndirected'. enrichUndirected :: Ding -> Ding enrichUndirected (Dictionary header srcLang tgtLang (Body ls)) = Dictionary header srcLang tgtLang $ Body $ map enrichGrammar ls -- | Enrich the Ding AST considering it a directed dictionary, with a source -- and target language. -- This function affects elements in the source and target language -- differently. enrichDirected :: Ding -> Ding enrichDirected (Dictionary header srcLang tgtLang (Body ls)) = Dictionary header srcLang tgtLang $ Body $ map inferExamples ls -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/000077500000000000000000000000001526415265400240755ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Example.hs000066400000000000000000000126731526415265400260350ustar00rootroot00000000000000{- - Language/Ding/Enrich/Example.hs - example identification and linking - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Identify examples in a line, remove them from it and annotate to the units - they belong to. - - Examples are identified on the unit-level. That is, a group may contain - both examples and non-examples. If it contains only non-examples, the - whole entry (!) is taken off the line. - As a side effect, an entry that did not contain any unit on the source side - from the beginning, is also removed. - - Examples are only recognized when occuring right of the unit they exemplify. - - Note that the enrichment done by `inferExamples' only happens on the source - (left) side of the dictionary, therefore the dictionary becomes directional. - This is because example identification may have different consequences - on both sides, in particular entries may be lost. - - If both directed outputs (deu-eng, eng-deu) are desired, this module's - enrichment should happen separately (and therefore twice). - - Examples are built from a unit in a group on the left side and the set - of corresponding translations, which are in the surrounding entry. - - Note that this enrichment should not be done on the TEI AST -- as might seem - more natural -- because - a) this causes unnecessary calculations on later identified examples, - in particular, - b) there would be IDs generated for examples, potentially causing - unnecesarily high number suffixes in other (retained) entries' IDs - (likely rare and not really important). -} module Language.Ding.Enrich.Example (inferExamples) where import Control.Monad (when, liftM) import Control.Monad.Trans.State (State, state, modify, get, evalState) import Language.Ding.Enrich.Example.Augment (augmentEntriesWith) import Language.Ding.Enrich.Example.Identify (isPotentialExample) import Language.Ding.Syntax (Line(..), Entry(..), Group(..), Unit(..)) -- Notes: -- * Only non-examples need to be used to search for examples. -- * Examples are right of their exemplified units, so go from left to right. -- * A unit is a known non-example iff it is not an example to all preceding -- (non-example) units. -- * Therefore, stepwise (left to right) consider units for being examples. -- * Units in the same group may be considered in any order, they should -- not be examples of one another. -- * In any step test all previously identified non-examples for the new -- unit exemplifying them. -- * Two things need to happen. -- * a) remove units (and possibly entries) when examples. -- * b) add examples to the units they exemplify. -- * This is achieved by accumulating all identified non-examples in a -- state monad. -- * The state's preceding non-example list is used for any new potential -- example. -- * Any newly identified non-example is pushed to the state. -- * The entries in the state are reversed, since the state is used as a -- stack. -- * This is not a problem, their order does not matter when -- identifying examples. -- * The list needs to be reversed in the end though. -- Note: State [Group] (or even State [Unit]) would suffice, at the expense of -- readability / complexity of the code. Might be more efficient though. -- | A stack state to accumulate the entries. type EntryStackState = State [Entry] -- | Push an element to a state's stack. push :: s -> State [s] () push x = modify (x:) -- | In a line, link any examples to the units (on the source side of the -- dictionary) they are examples to and remove any found examples from -- the line. inferExamples :: Line -> Line -- The entries are accumulated in reverse in the state monad, hence the need -- for a reversal. inferExamples (Line entries) = Line $ reverse $ evalState (handleEntries entries >> get) [] -- | Perform the enrichment on a list of entries. -- The result is pushed to the state's stack. handleEntries :: [Entry] -> EntryStackState () handleEntries = mapM_ handleEntry handleEntry :: Entry -> EntryStackState () handleEntry (Entry g gTrans) = do g'@(Group us') <- handleGroup g gTrans when (not $ null us') $ push $ Entry g' gTrans handleGroup :: Group -> Group -> EntryStackState Group handleGroup (Group us) (Group uTrans) = liftM Group $ handleUnits us uTrans handleUnits :: [Unit] -> [Unit] -> EntryStackState [Unit] handleUnits [] _ = return [] handleUnits (u:us) uTrans = do mu' <- handleUnit u uTrans us' <- handleUnits us uTrans return $ maybe id (:) mu' us' handleUnit :: Unit -> [Unit] -> EntryStackState (Maybe Unit) handleUnit u uTrans = if isPotentialExample (unitHeadword u) then state $ augmentEntriesWith u uTrans else return $ Just u -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Example/000077500000000000000000000000001526415265400254705ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Example/Augment.hs000066400000000000000000000100731526415265400274250ustar00rootroot00000000000000{- - Language/Ding/Enrich/Example/Augment.hs - augment unit with examples - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Inspect a single potential example unit considering a list of known non- - examples. - If the former is identified as an example for any of the latter, augment the - latter with the former and mark the former as example, i.e. to be forgotten. -} module Language.Ding.Enrich.Example.Augment (augmentEntriesWith) where import Control.Monad (liftM) import Control.Monad.Trans.Writer (Writer, writer, runWriter) import Data.NatLang.Example (Example(..)) import Language.Ding.Enrich.Example.Identify (isExampleOf) import Language.Ding.Syntax (Entry(..), Group(..), Unit(..)) -- | Add the potential example `pex', together with its translations, to -- any unit on the left side of any entry in `es'. -- If any change happened, forget about the potential example (first element -- of result pair is `Nothing'), otherwise `Just' keep it. augmentEntriesWith :: Unit -> [Unit] -> [Entry] -> (Maybe Unit, [Entry]) augmentEntriesWith pex pexTrans es = case runWriter (updateEntries pex pexTrans es) of (es', Changed True) -> (Nothing, es') (_, Changed False) -> (Just pex, es) newtype Changed = Changed Bool -- | The (Bool, ||) semigroup. instance Semigroup Changed where (Changed b1) <> (Changed b2) = Changed $ b1 || b2 -- | The (Bool, ||, False) monoid. instance Monoid Changed where mempty = Changed False -- | A writer monad used to remember whether any change was done. -- Uses the natural Bool monoid with (||). type ChangeWriter = Writer Changed -- | Return a value in the `ChangeWriter' monad and indicate a change. returnChanged :: a -> ChangeWriter a returnChanged a = writer (a, Changed True) -- | Return a value in the `ChangeWriter' monad and indicate that nothing -- changed. -- Equivalent to `return'. returnUnchanged :: a -> ChangeWriter a returnUnchanged a = writer (a, Changed False) -- | Augment entries with the provided example, wherever it matches. -- If any change happens, this is recorded in the `ChangeWriter' result. updateEntries :: Unit -> [Unit] -> [Entry] -> ChangeWriter [Entry] updateEntries pex pexTrans = mapM $ updateEntry pex pexTrans updateEntry :: Unit -> [Unit] -> Entry -> ChangeWriter Entry updateEntry pex pexTrans (Entry g h) = do g' <- updateGroup pex pexTrans g return $ Entry g' h updateGroup :: Unit -> [Unit] -> Group -> ChangeWriter Group updateGroup pex pexTrans (Group us) = liftM Group $ updateUnits pex pexTrans us updateUnits :: Unit -> [Unit] -> [Unit] -> ChangeWriter [Unit] updateUnits pex pexTrans = mapM $ updateUnit pex pexTrans -- Note that examples are appended, using (++), to keep the order of the -- examples. This inefficient for large lists. The lists are expected to be -- very small though, often ending up with only a single element, if any. -- - Runtime with example-identification actually seems to have (slightly) -- dropped (likely due to smaller number of entries generated). -- - Nevertheless, the (++) is hence ok. updateUnit :: Unit -> [Unit] -> Unit -> ChangeWriter Unit updateUnit pex pexTrans key = do if (unitHeadword pex) `isExampleOf` (unitHeadword key) then returnChanged $ key { unitExamples = unitExamples key ++ ex : [] } else returnUnchanged key where ex = Example (unitPlain pex) (map unitPlain pexTrans) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Example/Identify.hs000066400000000000000000000055051526415265400276040ustar00rootroot00000000000000{- - Language/Ding/Enrich/Example/Identify.hs - example identification - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Identify examples. Both on their own (`isPotentialExample') and - in relation to other unit strings (`isExampleOf'). -} module Language.Ding.Enrich.Example.Identify ( isPotentialExample , isExampleOf ) where import Data.Char (isPunctuation) import Data.List (isInfixOf) -- | Decide whether a unit string should be considered when searching for -- examples to a non-example. isPotentialExample :: String -> Bool isPotentialExample = (||) <$> isPhrase <*> containsSpecial -- | Identify non-trivial composed espressions. isPhrase :: String -> Bool isPhrase = (>=3) . length . words -- | Identify unit strings that contain interpunctuation (including quote -- signs) containsSpecial :: String -> Bool -- TODO?: This also catches '/' and '-'. -- * The latter is likely worse (ex.: "A-Dur") containsSpecial = any isPunctuation -- | Decide whether a potential example should be considered example of a -- supplied unit string. -- Any potential example should priorly afore have been identified as such -- by means of `isPotentialExample'. isExampleOf :: String -> String -> Bool -- TODO: -- * Better example identification, suggestions: -- * consider umlauts, e.g. "Ball" ~ "zwei große Bälle" -- * consider change in capitalisation, e.g. "Ball" ~ "ein großer Fußball" -- * [consider whitespace, e.g. "lang" ~/~ "... langweilig ..."] -- * Require the example to be longer than the exemplified unit. -- * Define a minimum number of words and/or characters in difference. -- * Prevent phrases where for example only the gender changes to match. -- * In particular important, if umlauts receive special treatment. -- * Require a maximum size (number of chars/words) for the non-example. isExampleOf = flip isInfixOf -- Simple way to perform more flexible matching (not very efficient): --isExampleOf _ "" = False --isExampleOf pex hw = prefixMatch hw ex || hasExample (tail pex) hw --prefixMatch :: String -> String -> Bool --prefixMatch = ??? -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Grammar.hs000066400000000000000000000073711526415265400260270ustar00rootroot00000000000000{- - Language/Ding/Enrich/Grammar.hs - Enrich grammar annotation - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Enrich a line's grammar annotations and infer such from the presence of - inflected forms. - - This includes inferral from and transferral of grammar annotations, see - `Language.Ding.Enrich.Grammar.Infer' and - `Language.Ding.Enrich.Grammar.Transfer', respectively, - and inferral of grammar information (POS: verb) from the presence of - inflected forms, see `Language.Ding.Enrich.Grammar.InflectedForms`. - - Note: This module works on lines. It could equally well work on entries, - as `Language.Ding.Enrich.Grammar.Transfer' does. This is purely done to - be in line with other enrichment modules. -} module Language.Ding.Enrich.Grammar (enrichGrammar) where import Data.NatLang.Grammar (GrammarInfo) import Language.Ding.Syntax import Language.Ding.Enrich.Grammar.InflectedForms (enrichFromInflectedForms) import Language.Ding.Enrich.Grammar.Infer ( expand , joinVerbAnnots , joinPronounAnnots ) import Language.Ding.Enrich.Grammar.Transfer (transfer) -- Notes: -- * The order of enrichment steps is deliberately chosen. -- * First, identify verbs from the presence of inflected forms; the -- inflected forms constituting the input of this step do not change -- during the whole grammar enrichment process. -- * Do inferral (expand) next and hence before the remainder, to allow -- e.g. `POS Noun' as derived from `SingulareTantum' to be transfered. -- * Do join*Annots last, to account for any new duplicates. -- * All functions operate on GramLexCategory, the rest of GrammarInfo -- (Collocate) is of no importance. -- * It might be better to separate GramLexCategory and Collocate into -- two distinct lists in the ASTs (TODO?). -- * enrichFromInflectedForms only needs to apply to the english side. -- * It is, however, applied to both sides -- for reasons of simplicity. -- * The side's languages are unknown here. -- ? TODO?: Remove duplicates from the initial list of annotations on a unit? -- ? TODO?: Testing: Quickcheck. -- | Enrich a line's grammar annotations. enrichGrammar :: Line -> Line enrichGrammar (Line es) = Line $ map enrichEntry es enrichEntry :: Entry -> Entry enrichEntry = modEntryGrammar (joinVerbAnnots . joinPronounAnnots) . transfer . modEntryUnit ( modUnitGrammar expand . enrichFromInflectedForms ) -- | Modify the units in an entry. modEntryUnit :: (Unit -> Unit) -> Entry -> Entry modEntryUnit f (Entry g h) = Entry (modGroupUnit f g) (modGroupUnit f h) modGroupUnit :: (Unit -> Unit) -> Group -> Group modGroupUnit f (Group us) = Group $ map f us -- | Modify the grammar annotations of all units in an entry. modEntryGrammar :: ([GrammarInfo] -> [GrammarInfo]) -> Entry -> Entry modEntryGrammar f e = modEntryUnit (modUnitGrammar f) e modUnitGrammar :: ([GrammarInfo] -> [GrammarInfo]) -> Unit -> Unit modUnitGrammar f u = u { unitGrammar = f $ unitGrammar u } -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Grammar/000077500000000000000000000000001526415265400254635ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Grammar/Infer.hs000066400000000000000000000123031526415265400270610ustar00rootroot00000000000000{- - Language/Ding/Enrich/Grammar/Infer.hs - Enrich grammar annotation within - a unit. - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - From a set of grammar annotations on a unit, infer others to apply to the - same unit. - - Note that this works on grammar elements which are common to the Ding and - TEI, however this module is deliberately placed under `Language.Ding', - because the enrichment depends on inference rules which are particular to - the Ding. E.g. `{f}' implies that the corresponding unit is a noun, in the - Ding. There may however, in general, very well be other parts of speach - bearing a gender. -} module Language.Ding.Enrich.Grammar.Infer ( expand , joinVerbAnnots , joinPronounAnnots ) where import Data.List (union) import Data.NatLang.Grammar -- | Partition a list according to a function that yields `Maybe' values. -- Values that are `Nothing' under the function are put in the second -- partition, for the others, their `Just' value under that function is put -- into the first partition. -- Such a function also exists in the `utility-ht' package. partitionMaybe :: (a -> Maybe b) -> [a] -> ([b], [a]) partitionMaybe _ [] = ([], []) partitionMaybe f (x:xs) = case f x of Just y -> (y:ys', xs') Nothing -> (ys', x:xs') where (ys', xs') = partitionMaybe f xs getVTypes :: GrammarInfo -> Maybe [VerbType] getVTypes (GramLexCategory (PartOfSpeech (Verb vTypes))) = Just vTypes getVTypes _ = Nothing getPTypes :: GrammarInfo -> Maybe [PronounType] getPTypes (GramLexCategory (PartOfSpeech (Pronoun pTypes))) = Just pTypes getPTypes _ = Nothing -- (TODO): Consider to do a `nub' somewhen. -- | Merge several verb annotations in a list, if any, to a single one. The -- resulting annotation replaces the first of the old annotations joinVerbAnnots :: [GrammarInfo] -> [GrammarInfo] -- Note: The location of any first verb annotation is kept. joinVerbAnnots (GramLexCategory (PartOfSpeech (Verb vTypes)) : as) = (GramLexCategory $ PartOfSpeech $ Verb vTypes') : as' where (vTypess', as') = partitionMaybe getVTypes as vTypes' = foldr union [] (vTypes : vTypess') joinVerbAnnots (a:as) = a : joinVerbAnnots as joinVerbAnnots [] = [] -- | Merge several pronoun annotations in a list, if any, to a single one. The -- resulting annotation replaces the first of the old annotations joinPronounAnnots :: [GrammarInfo] -> [GrammarInfo] -- Note: The location of any first pronoun annotation is kept. joinPronounAnnots (GramLexCategory (PartOfSpeech (Pronoun pTypes)) : as) = (GramLexCategory $ PartOfSpeech $ Pronoun pTypes') : as' where (pTypess', as') = partitionMaybe getPTypes as pTypes' = foldr union [] (pTypes : pTypess') joinPronounAnnots (a:as) = a : joinPronounAnnots as joinPronounAnnots [] = [] isPlural :: GrammarInfo -> Bool isPlural (GramLexCategory (Number (Plural _))) = True isPlural _ = False -- | From a list of (all) grammar annotations on some entity, infer others, -- which are not explicitly specified in the Ding source. -- -- For most annotations, this does not infer anything. -- -- This function should not be applied after any grammar annotation is -- removed (e.g., when relocating an annotation to a higher level). -- -- If the argument does not contain duplicates (recommended), neither does -- the result. expand :: [GrammarInfo] -> [GrammarInfo] expand as = let as' = concatMap infer as -- Notes: -- * union first removes duplicates in as', then deletes any element from -- it that also is in as (see implementation of union). -- This is exactly what we want. -- * For longer lists, this would be quite inefficient, but in particular -- as' is expected to have few unique elements. in as `union` as' where infer :: GrammarInfo -> [GrammarInfo] infer (GramLexCategory gram) = map GramLexCategory $ inferGLC gram infer _ = [] -- Infer from single annotations. -- Note that {noun} implies {sing} iff {pl} is not annotated. inferGLC :: GramLexCategory -> [GramLexCategory] inferGLC (Gender _) | any isPlural as = [PartOfSpeech Noun] | otherwise = [PartOfSpeech Noun, Number $ Singular False] inferGLC (Number (Singular True)) = [PartOfSpeech Noun] inferGLC (Number (Plural True)) = [PartOfSpeech Noun] inferGLC _ = [] -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Grammar/InflectedForms.hs000066400000000000000000000042621526415265400307270ustar00rootroot00000000000000{- - Language/Ding/Enrich/Grammar/FromInflectedForms.hs - Recognize that inflec- - ted forms are only - annotated to verbs. - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - From a set of grammar annotations on a unit, infer others to apply to the - same unit. - - Note that this works on grammar elements which are common to the Ding and - TEI, however this module is deliberately placed under `Language.Ding', - because the enrichment depends on inference rules which are particular to - the Ding. E.g. `{f}' implies that the corresponding unit is a noun, in the - Ding. There may however, in general, very well be other parts of speach - bearing a gender. -} module Language.Ding.Enrich.Grammar.InflectedForms ( enrichFromInflectedForms ) where import Data.NatLang.Grammar ( GrammarInfo(GramLexCategory) , GramLexCategory(PartOfSpeech) , PartOfSpeech(Verb) ) import Language.Ding.Syntax (Unit(unitInflected, unitGrammar)) -- | Annotate any unit that is annotated with inflected forms as a verb. -- Such new verb annotations are appended to the existing grammar -- annotations. enrichFromInflectedForms :: Unit -> Unit enrichFromInflectedForms u = case unitInflected u of (Just _) -> u { unitGrammar = unitGrammar u ++ verbAnnot : [] } Nothing -> u where verbAnnot = GramLexCategory $ PartOfSpeech $ Verb [] -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Enrich/Grammar/Transfer.hs000066400000000000000000000110131526415265400275770ustar00rootroot00000000000000{- - Language/Ding/Enrich/Grammar/Transfer.hs - Transfer grammar annotation - within an entry. - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Transfer grammar annotation between units in an entry. - Units of the same and of the respective other language are treated the same. - As of now, only part of speech annotation is considered transferable, - further excluding verb types (transitivity, reflexivity). -} module Language.Ding.Enrich.Grammar.Transfer (transfer) where import Data.Maybe (mapMaybe) import Data.List (union) import Language.Ding.Syntax (Entry(..), Group(..), Unit, unitGrammar) import Data.NatLang.Grammar -- Note -- * The things in here could also be done in an attribute grammar (~Happy). -- | Transfer grammar annotations within an entry. transfer :: Entry -> Entry transfer (Entry g h) = Entry g' h' where -- Notice how the below only works because of lazyness (and Haskell's -- automated fixed point calculation). -- (The below two function evaluations depend on results of one another.) (as1, g') = handleGroup as2 g (as2, h') = handleGroup as1 h handleGroup :: [GrammarInfo] -> Group -> ([GrammarInfo], Group) handleGroup as (Group us) = fmap Group $ handleUnits as us handleUnits :: [GrammarInfo] -> [Unit] -> ([GrammarInfo], [Unit]) handleUnits _ [] = ([], []) -- Note: -- * (++) may cause many duplicates here. Since the lists are short, it -- is however ok (possibly better) to remove the duplicates once in the end -- (at the leaves/units -> repeatedly). handleUnits as (u:us) = (as1 ++ as2, u':us') where -- Again, this works because of Haskell's lazyness. (as1, u') = handleUnit (as ++ as2) u (as2, us') = handleUnits (as ++ as1) us handleUnit :: [GrammarInfo] -> Unit -> ([GrammarInfo], Unit) handleUnit as u = (transferableGrammar uas, u { unitGrammar = uas `union` as }) where uas = unitGrammar u -- | From grammar information, extract any that is considered transferable to -- units in the same entry (i.e., the same group and the translation group). -- -- Duplicates may arise. These are not removed, because the result of this -- application is to be merged with `union' anyways (union removes duplicates -- off its second argument). transferableGrammar :: [GrammarInfo] -> [GrammarInfo] transferableGrammar = mapMaybe reduceGram -- Note: Collocations such as {+ Gen} are dropped. In many cases, co-occuring -- units share such collocations (without explicit annotation on each), -- but these cases are hard to identify. reduceGram :: GrammarInfo -> Maybe GrammarInfo reduceGram (GramLexCategory gram) = fmap GramLexCategory $ reduceGLC gram reduceGram _ = Nothing -- | Extract grammar information that shall be transfered to other units -- in the same entry (i.e., the same group and the translation group). -- -- Note: Handling in-language synonyms and translations the same way is not -- natural, but works for a German-English dictionary with the present -- grammar annotations. The grammatical case might form an exception, -- but it is rarely annotated anyways (possibly even no occurence). reduceGLC :: GramLexCategory -> Maybe GramLexCategory reduceGLC (PartOfSpeech pos) = fmap PartOfSpeech $ reducePOS pos reduceGLC _ = Nothing -- | Retain all information except verb types (reflexivity & transitivity) -- -- Notes: -- * Proposition-annotations ({prp}) are often made seemingly incorrect. -- * It is assumed preposition means adposition. -- * See https://en.wikipedia.org/wiki/Preposition_and_postposition -- * Otherwise, a preposition might be translated to a postposition. reducePOS :: PartOfSpeech -> Maybe PartOfSpeech reducePOS (Verb _) = Just $ Verb [] reducePOS pos = Just pos -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Inverse.hs000066400000000000000000000027141526415265400246400ustar00rootroot00000000000000{- - Language/Ding/Inverse.hs - Invert the language order - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Invert a Ding dictionary's direction, by mirroring all contained entries. -} module Language.Ding.Inverse (inverse) where import Data.NatLang.Dictionary import Language.Ding.Syntax -- | Give the inverse of a dictionary (invert the order of languages). -- This function is bijective and its own inverse. inverse :: Ding -> Ding inverse (Dictionary header srcLang tgtLang (Body ls)) = Dictionary header tgtLang srcLang (Body $ map lineInverse ls) lineInverse :: Line -> Line lineInverse (Line entries) = Line $ map entryInverse entries entryInverse :: Entry -> Entry entryInverse (Entry g h) = Entry h g -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Parser.hs000066400000000000000000000114721526415265400244620ustar00rootroot00000000000000{- - Language/Ding/Parser.hs - parser - - Copyright 2020-2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Parse the Ding dictionary from a list of tokens as identified by - `Language.Ding.AlexScanner'. The header is parsed manually, the body by - a `Happy' generated module. -} module Language.Ding.Parser (parse) where import Prelude hiding (log) import Control.Monad (guard) import Control.Monad.Writer (runWriter, Writer, mapWriterT) import Data.Functor.Identity (Identity(Identity)) import Data.Maybe (catMaybes) import Data.NatLang.Dictionary (Dictionary(Dictionary), Body(Body)) import Data.NatLang.Language (Language(German, English)) import Language.Ding.Parser.Header (parseHeader) import Language.Ding.Parser.Line (parseLine, FailWriter) import Language.Ding.Syntax (Ding, Line) import Language.Ding.Token (Token(..), Atom(..)) -- Note: -- * The parse log is completely separated from the returned value. -- * Consequence: Writing both in parallel (to stderr and, e.g., a file) is -- difficult. -- * This should not affect performance too much, however. The parse log is -- usually short and we cannot begin writing the data before most of the -- parsing is done, anyways. -- | Construct a Ding AST from a list of tokens, plus a parse log composed of -- parse errors and notes. -- Iff one of the errors prevents constructing a valid Ding AST, `Nothing' is -- returned as such. parse :: [Token] -> (Maybe Ding, [Either String String]) parse ts = ( do header <- either (const Nothing) Just eHeader guard $ not $ null bodyLines return $ Dictionary header German English (Body bodyLines) , concat [ either (pure . Left) (const []) eHeader , bodyLog -- Note: Appending a single value is not optimal. Prepending instead -- would yield an unusual order. , if null bodyLines -- The FreeDict XML schema requires at least one entry and no such can -- be generated from nothing. then pure $ Left "Input contains no valid dictionary entries." else [] ] ) where (headerLines, bodyToks) = separateHeaderLines ts eHeader = parseHeader headerLines (bodyLines, bodyLog) = runWriter $ parseBody bodyToks -- | Parse a list of `Line's. parseBody :: [Token] -> ParseWriter [Line] parseBody = fmap catMaybes . mapM (mergeErrorToLog . parseLine) . tokLines -- | A writer logging both informative messages (`Left') and error messages -- (`Right'). type ParseWriter = Writer [Either String String] -- | Convert a `FailWriter' to a `ParseWriter'. -- If an error occurred in the `FailWriter', the `ParseWriter' returns -- `Nothing' as value. mergeErrorToLog :: FailWriter a -> ParseWriter (Maybe a) mergeErrorToLog = mapWriterT aux where aux :: Either String (a, [String]) -> Identity (Maybe a, [Either String String]) aux (Left e) = Identity (Nothing, pure $ Left e) aux (Right (x, log)) = Identity (Just x, map Right log) -- | Separate the initial lines belonging to the header from the body lines. -- Header lines are converted to strings. separateHeaderLines :: [Token] -> ([String], [Token]) separateHeaderLines (Token _ _ (HeaderLine hl) : Token _ _ NL : tls) = let (hls, tls') = separateHeaderLines tls in (hl : hls, tls') separateHeaderLines tls = ([], tls) -- | Break a list of tokens into a list of lines, the latter being also a list -- of tokens. The separating newline tokens are retained. The list of -- tokens is expected to be newline-terminated. -- Similar to `Data.OldList.lines', but on tokens, with separator -- `Language.Ding.Token.NL'. tokLines :: [Token] -> [[Token]] tokLines [] = [] tokLines ts = let (l, ts') = breakLine ts in l : tokLines ts' -- | Separate a single line, including newline token from the stream. -- Requires a newline token to be present. breakLine :: [Token] -> ([Token], [Token]) breakLine (nl@(Token _ _ NL) : ts) = ([nl], ts) breakLine (t : ts) = let (l, ts') = breakLine ts in (t : l, ts') breakLine [] = -- TODO: Encapsulate error in the logging monad. error "Input is not newline-terminated." -- vi: ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Parser/000077500000000000000000000000001526415265400241215ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Parser/Header.hs000066400000000000000000000047121526415265400256510ustar00rootroot00000000000000{- - Language/Ding/Parser/Header.hs - parse the Ding header - - Copyright 2020,2021 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Parse the header of the Ding dictionary. -} module Language.Ding.Parser.Header (parseHeader) where import Data.List (stripPrefix) import Language.Ding.Syntax (Header(..)) -- | Parse the Ding header from a list of lines. -- The expected syntax is very strict; it does for example not fit the -- header of the es-de Ding dictionary. parseHeader :: [String] -> Either String Header parseHeader (versionL : copyrightL : yearsL : licenseL : urlL : []) = maybe (Left "Failed parsing header.") Right $ do versionInfo <- stripPrefix "# Version :: " versionL (version, date) <- case words versionInfo of [a, b] -> Just (a, b) _ -> Nothing copyrightHolder <- stripPrefix "# Copyright (c) :: " copyrightL >>= stripSuffixChar ',' years <- stripPrefix "# " yearsL license <- stripPrefix "# License :: " licenseL url <- stripPrefix "# URL :: " urlL return $ Header { headerVersion = version , headerVersionDate = date , headerCopyrightHolder = copyrightHolder , headerCopyrightPeriod = years , headerLicense = license , headerURL = url } parseHeader _ = Left "Unexpected number of header lines." -- | Attempt to strip off a particular terminating char. -- Return `Just prefix', where `prefix' is the remaing prefix in case of -- success and `Nothing' otherwise. stripSuffixChar :: Char -> String -> Maybe String stripSuffixChar _ [] = Nothing stripSuffixChar k [c] = if k == c then Just [] else Nothing stripSuffixChar k (c:cs) = fmap (c:) $ stripSuffixChar k cs -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Parser/Line.y000066400000000000000000000602001526415265400252000ustar00rootroot00000000000000{- - Language/Ding/Parser/Line.y - parser for a single Ding line - - Copyright 2020-2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} -- Notes: -- * This file is supposed to be processed by Happy. It contains both Happy -- specific syntax and regular Haskell code. The former is in some ways -- similar to the latter. The result of processing with Happy is a regular -- Haskell source file. -- * The Happy syntax should be very similar to the syntax of Yacc/Bison. -- * There is an important relation between the lexer (produced with the help -- of Alex) and the parser. -- * Happy Documentation: https://www.haskell.org/happy/ { -- Haskell module header and import statements. {-# LANGUAGE FlexibleInstances #-} {-| - Parse single Ding lines from a list of tokens. Only accepts newline - terminated lines. -} module Language.Ding.Parser.Line (parseLine, FailWriter) where import Prelude hiding (fail) import Control.Monad.Fail (MonadFail(fail)) import Control.Monad.Writer (Writer, tell, writer, WriterT(WriterT), mapWriterT) import Data.List.NonEmpty (NonEmpty(..), (<|)) import qualified Data.List.NonEmpty as NEList import Safe.Exact (zipWithExactMay) import Data.NatLang.Grammar ( GrammarInfo(..) , GramLexCategory(..) , Case(..) , Collocate(..) ) import Data.NatLang.Usage (Usage) import Data.NatLang.InflectedForms (InflectedForms(..), InflectedForm(..)) import Language.Ding.Partial.Unit (PartialUnit) import qualified Language.Ding.Partial.Unit as PU import Language.Ding.Partial.PseudoUnit (PartialPseudoUnit) import qualified Language.Ding.Partial.PseudoUnit as PSU import Language.Ding.Read.Usage (readUsage) import Language.Ding.Syntax import Language.Ding.Token (Token(..), Atom(..), Position(..), tokenToString, tokenToLine) } %name parseLine -- name of the resulting function %tokentype { Token } %monad { FailWriter } %error { parseError } -- name of the error function - must be defined later ------------------------------------------------------------------------------- -- Link Happy tokens (left) to Haskell patterns (right). -- Notes: -- * If `$$' is specified on the right, the Happy token will evaluate to the -- token's part matched by `$$'. Otherwise, the Happy token evaluates to -- the whole token. -- * It is common for simple tokens to use as name the string representing the -- token, however not at all necessary. %token '\n' { Token _ _ NL } '::' { Token _ _ LangSep } '|' { Token _ _ Vert } ';' { Token _ _ Semi } ',' { Token _ _ Comma } '~' { Token _ _ Tilde } '+' { Token _ _ Plus } '<>' { Token _ _ Wordswitch } '/' { Token _ _ StrongSlash } '' { Token _ _ WeakSlash } '//' { Token _ _ DoubleSlash } '{' { Token _ _ OBrace } '}' { Token _ _ CBrace } '[' { Token _ _ OBracket } ']' { Token _ _ CBracket } '(' { Token _ _ OParen } ')' { Token _ _ CParen } '<' { Token _ _ OAngle } '>' { Token _ _ CAngle } '' { Token _ _ CSlash } 'to' { Token _ _ KW_to } tok_slashSpecial { Token _ _ (SlashSpecial _) } tok_abbrev { Token _ _ (Abbrev _) } tok_abbrevPlural { Token _ _ (AbbrevPlural _) } -- Note: -- * The grammar annotations are separated because gramCase needs to be -- separately available (and Happy tokens may not overlap). tok_gramPOS { Token _ _ (GramKW (PartOfSpeech _)) } tok_gramGender { Token _ _ (GramKW (Gender _)) } tok_gramNumber { Token _ _ (GramKW (Number _)) } tok_gramCase { Token _ _ (GramKW (Case _)) } tok_interrogPron { Token _ _ (IntPronKW _) } tok_text { Token _ _ (Text _) } -- Just ensure that 'to' has lowest precedence. -- * Giving it right associativity causes 'to to' to cause a shift. %right 'to' %right ',' '~' '+' '<>' '/' '' '//' tok_gramPOS tok_gramGender tok_gramNumber tok_gramCase tok_interrogPron tok_text '(' %% ------------------------------------------------------------------------------- -- Grammar specification ------------------------------------------------------------------------------- -- See doc/ding-grammar-naming for a brief syntax overview and naming -- conventions. -- Notes: -- * Only a single line is parsed. -- * Left recursion is recommended by the Happy developers, due to space -- requirements. -- * This causes lists to be reversed, which requires re-reversal (or -- special alternative list structures), which makes the grammar often -- less readable. -- * Since all lists are expected to be small, space should not be an issue. -- * Hence, ignore this. -- - https://www.haskell.org/happy/doc/html/sec-sequences.html -- - String-concatenation that uses left-recursion has the same problem. -- - (<>), when applied to tokens does essentially perform string -- concatentation. -- - mconcat can be used instead. -- * The parsing happens in the Writer monad to allow for logging. -- * There does however not happen any logging as of now. -- * The syntax would be the same without a monad; only the type of the -- parseLine function would be simpler. -- Note: -- * The newline token serves as EOL token, such that there is never an error -- on end of tokens. -- * (One could also have given this parser a non-newline terminated stream -- of tokens.) -- * End-of-tokens errors do not report the position of the error, which -- usually is not a problem, since it is just the end of input. -- * However, since we only parse single lines, where each contained -- token is annotated with a line number, this would be a problem. line :: { Line } line : groups '::' groups '\n' {% makeLine (tokenToLine $2) $1 $3 } groups :: { [Group] } groups : group '|' groups { $1 : $3 } | group { $1 : [] } -- Note: -- * In some cases, there is exactly one unit in a group, which does not obey -- to the rules of a proper unit - the headword is enclosed in <()>. -- * It does however (in practice) obey the rules of a PartialPseudoUnit. -- * Use these, to ignore the unit. (TODO: improve) -- * See also: todo/parsing.paren-units group :: { Group } group : units { Group $ reverse $1 } | {- epsilon -} { Group [] } | pseudoUnit { Group [] } -- Notes: -- * Produces the list of units in reverse order. -- * This is to ease the application of `addToUnit'. -- * Only accepts a non-empty list of units. (because of the <;> seps) units :: { [Unit] } units : units ';' unit { $3 : $1 } | units ';' pseudoUnit { map (PSU.addToUnit $3) $1 } | unit { $1 : [] } ------------------------------------------------------------------------------- -- Unit unit :: { Unit } unit : parenExps partialUnit { PU.toUnit $1 $2 } -- TODO: Do not ignore <>. pseudoUnit :: { PartialPseudoUnit } pseudoUnit : pseudoUnit gramAnnot { $1 `PSU.plusGramAnnot` $2 } | pseudoUnit usageAnnot { $1 `PSU.plusUsageAnnot` $2 } | pseudoUnit angleExp { $1 } | parenExp parenExps { PSU.fromSuffixes ($1 : $2) } -- Notes: -- * Any infix annotations are silently dropped (see plusToken). Prefix -- annotations are considered invalid and not accepted by the grammar. -- * Parenthesis expressions may occur as prefixes though, they are -- recognized in the `unit' rule. -- * Initial abbreviations are equated to regular text, iff they are "single", -- that is contain no <,> or <;> separated list of abbeviations. -- * If prefixed by 'to', ignore the 'to' and mark as verb. -- * This only happens if 'to' is immediately followed by something -- recognized as regular text (unitText). -- * In particular things like 'to (have a) lisp' or -- 'to (give one's) consent (to)' are not specially treated. -- (They are quite infrequent though.) -- * Also, allowing () would complicate the parsing. -- * PU.fromVerbToken annotates the unit as a verb. This may be superfluous -- if there is an explicit annotation (rare), but such a duplicate would -- be resolved during enrichment. -- * angleExp ("<...>") is ignored. (TODO?) -- * Semantics unclear. partialUnit :: { PartialUnit } partialUnit : partialUnit gramAnnot { $1 `PU.plusGramAnnot` $2 } | partialUnit usageAnnot { $1 `PU.plusUsageAnnot` $2 } | partialUnit abbrevAnnot { $1 `PU.plusAbbrevAnnot` $2 } | partialUnit inflAnnot { $1 `PU.plusInflAnnot` $2 } | partialUnit parenExp { $1 `PU.plusSuffix` $2 } | partialUnit angleExp { $1 {- ignore $2 -} } | partialUnit reference { $1 `PU.plusRef` $2 } | partialUnit unitText { $1 `PU.plusToken` $2 } | partialUnit 'to' { $1 `PU.plusToken` $2 } | partialUnit unitInterpct { $1 `PU.plusToken` $2 } | unitText { PU.fromToken $1 } -- 'to' has lowest precedence (and is right associative), so the -- later rules will be preferred. | 'to' { PU.fromToken $1 } | 'to' unitInterpct { PU.fromToken ($1 <> $2) } | 'to' unitText { PU.fromVerbToken $2 } -- Some units start with an abbreviation (usually without further -- unitText). In such, treat the abbreviation as plain text. | singleAbbrevAnnot { PU.fromToken $1 } -- Notes: -- * As of now, keywords (except for 'to') have no special meaning in -- top-level text. Hence, treat them as simple text. -- * Cannot use gtok_anyKW, since it includes 'to'. unitText :: { Token } unitText : tok_text { $1 } | gtok_gram { $1 } | tok_interrogPron { $1 } -- | Interpunctuation in units. -- -- Note: "<>" is ignored. unitInterpct :: { Token } unitInterpct : ',' { $1 } | '+' { $1 } | '//' { $1 } | '/' { $1 } | '' { $1 } | '<>' { mempty } ------------------------------------------------------------------------------- -- Grammar annotation gramAnnot :: { NonEmpty GrammarInfo } gramAnnot : '{' gramAnnot1s '}' { $2 } -- Note: <;> and <,> are used with different meanings in this context -- (usually AND and OR, respectively), but to keep things simple, they -- are considered equivalent as of now. gramAnnot1s :: { NonEmpty GrammarInfo } gramAnnot1s : gramAnnot1 ';' gramAnnot1s { $1 <> $3 } | gramAnnot1 { $1 } gramAnnot1 :: { NonEmpty GrammarInfo } gramAnnot1 : gramAnnot2s { $1 } | collocAnnot1 usageAnnots { Collocate $1 $2 :| [] } -- The two rules for CollocCase are necessary to avoid a shift/reduce conflict. -- The first rule only allows a non-empty list of interrogation pronouns. collocAnnot1 :: { Collocate } collocAnnot1 : interrogProns '+' tok_gramCase { CollocCase $1 (tokenToCase $3) } | '+' tok_gramCase { CollocCase [] (tokenToCase $2) } | '+' tok_gramPOS { CollocPOS (tokenToPOS $2) } | '+' tok_gramNumber { CollocNumber (tokenToNumber $2) } -- TODO: Consider to add '/' as alternative separator. gramAnnot2s :: { NonEmpty GrammarInfo } gramAnnot2s : gramAnnot2 ',' gramAnnot2s { $1 <| $3 } | gramAnnot2 { $1 :| [] } gramAnnot2 :: { GrammarInfo } gramAnnot2 : gramLexCat { GramLexCategory $1 } gramLexCat :: { GramLexCategory } gramLexCat : gtok_gram { tokenToGramLexCat $1 } interrogProns :: { [String] } interrogProns : tok_interrogPron ',' interrogProns { tokenToString $1 : $3 } | tok_interrogPron { tokenToString $1 : [] } ------------------------------------------------------------------------------- -- Inflected forms -- Notes: -- * Inflected forms are distinguished from grammar annotations by the -- absence of grammar keywords. -- * NonEmpty lists are used here. (:|) constructs a NonEmpty list from a -- single head element and a regular list. (<|) joins a single element with -- a NonEmpty list, just like (:) for normal lists. -- * Considering the implementation of NonEmpty, using (<|) is not very -- efficient (decons (:|), cons (:), cons (:|) - instead of just -- cons (:)). inflAnnot :: { InflectedForms } inflAnnot : '{' inflAnnot1s ';' inflAnnot1s '}' { InflectedForms $2 $4 } inflAnnot1s :: { NonEmpty InflectedForm } inflAnnot1s : inflAnnot1 ',' inflAnnot1s { $1 <| $3 } | inflAnnot1 { $1 :| [] } inflAnnot1 :: { InflectedForm } inflAnnot1 : inflAnnot2 usageAnnots { InflectedForm (tokenToString $1) $2 } -- Notes: -- * Most inflected forms consist of a single word. Not all -- (e.g., "creeped out"). -- * Cannot use gtok_anyKW, as it includes gtok_gramKW. inflAnnot2 :: { Token } inflAnnot2 : tok_text inflAnnot2 { $1 <> $2 } | tok_text { $1 } | tok_interrogPron { $1 } | 'to' { $1 } ------------------------------------------------------------------------------- -- Abbreviation annotations -- Note: This rule exists purely to provide a prefix for unit. singleAbbrevAnnot :: { Token } singleAbbrevAnnot : '' { $2 } | tok_abbrev { $1 } | tok_abbrevPlural { $1 } | tok_slashSpecial { $1 } abbrevAnnot :: { NonEmpty String } abbrevAnnot : '' { $2 } | tok_abbrev { tokenToString $1 :| [] } | tok_abbrevPlural { (tokenToString $1 ++ "s") :| [] } | tok_slashSpecial { tokenToString $1 :| [] } -- Note: <;> is more frequent. abbrevAnnot1s :: { NonEmpty String } abbrevAnnot1s : abbrevAnnot1 ';' abbrevAnnot1s { tokenToString $1 <| $3 } | abbrevAnnot1 ',' abbrevAnnot1s { tokenToString $1 <| $3 } | abbrevAnnot1 { tokenToString $1 :| [] } -- Consider content a literal (in particular do not drop any inner annotation). abbrevAnnot1 :: { Token } abbrevAnnot1 : abbrevAnnot2 abbrevAnnot1 { $1 <> $2 } | abbrevAnnot2 { $1 } -- Note: -- * <()>, <[]> are rare here. -- . Ex.: "/Hg(CNO)2/" -- . Ex.: "section 15, subsection 3 /s.15[3]/" -- * Nesting likely does not occur at all, but is considered valid. abbrevAnnot2 :: { Token } abbrevAnnot2 : tok_text { $1 } | gtok_anyKW { $1 } | '+' { $1 } | '/' { $1 } | '(' abbrevAnnot2 ')' { $1 <> $2 <> $3 } | '[' abbrevAnnot2 ']' { $1 <> $2 <> $3 } ------------------------------------------------------------------------------- -- Expressions enclosed in parentheses -- Note: -- * The below rules give (String, Token) for a parenthesis expression. -- The string is the content, the token joins the content with the -- parentheses (and retains any spacing). -- * The token is required to allow for infix parenthesis expressions to be -- merged back with its context. parenExps :: { [(String, Token)] } parenExps : parenExp parenExps { $1 : $2 } | {- epsilon -} { [] } parenExp :: { (String, Token) } parenExp : '(' parenExp1 ')' { (tokenToString $2, $1 <> $2 <> $3) } parenExp1 :: { Token } parenExp1 : parenExp2 parenExp1 { $1 <> $2 } parenExp1 : parenExp2 { $1 } -- Notes: -- * Several inner annotations are ignored (on purpose), such as references or -- <{}>-annotations. -- * Nonetheless, for example <{}>-annotations should not be simplified -- (allowed to contain more or less anything) - the content should still -- be a valid annotation. I.e., use the grammar rules for those -- annotations. -- * Nested <()>-annotations are included literally. -- * They are rare though. (Hence the nested (<>) application is ok.) -- * One might consider to include abbreviations literally. (TODO?) -- * This would require an abbrevAnnot'-rule, producing a token instead of -- a list of Strings. -- * Alternatively, one might reconstruct an equivalent representation, -- based on that list. parenExp2 :: { Token } parenExp2 : tok_text { $1 } | gtok_anyKW { $1 } | reference { mempty } | gramAnnot { mempty } | inflAnnot { mempty } | usageAnnot { mempty } | abbrevAnnot { mempty } | '(' parenExp1 ')' { $1 <> $2 <> $3 } | ';' { $1 } | ',' { $1 } | '+' { $1 } | '<>' { mempty } | '/' { $1 } | '' { $1 } | '//' { $1 } ------------------------------------------------------------------------------- -- Expressions enclosed in angle brackets -- Note: They are dropped as of now, since their semantics are ambiguous. angleExp :: { NonEmpty String } angleExp : '<' angleExp1s '>' { $2 } -- Note: -- * Separation by <;>, <,> is rare (two/one occurrences). angleExp1s :: { NonEmpty String } angleExp1s : angleExp1 ';' angleExp1s { tokenToString $1 <| $3 } | angleExp1 ',' angleExp1s { tokenToString $1 <| $3 } | angleExp1 { tokenToString $1 :| [] } angleExp1 :: { Token } angleExp1 : angleExp2 angleExp1 { $1 <> $2 } | angleExp2 { $1 } -- Notes: -- * There are nested angle-expressions. It is unclear how to handle them. -- Drop for now. (TODO?) -- * They are rare (two occurences). -- * Only one occurence of nested <()>. Dropped for now. (TODO?) -- * Only 4 occurrences of nested abbreviations. Dropped for now. (TODO?) angleExp2 :: { Token } angleExp2 : tok_text { $1 } | gtok_anyKW { $1 } | angleExp { mempty } | '(' angleExp1 ')' { mempty } | abbrevAnnot { mempty } ------------------------------------------------------------------------------- -- References ("~ref") -- Note: -- * Due to the simple current word-matching in the lexer, this might catch -- unexpected references, such as "~word?". (TODO) reference :: { String } reference : '~' reference1 { tokenToString $2 } reference1 :: { Token } reference1 : tok_text { $1 } | gtok_anyKW { $1 } ------------------------------------------------------------------------------- -- Usage annotations -- Zero or more <[]>-enclosed usage annotations. -- Unified to a single list (e.g., "[a,b] [c]" -> [a,b,c]). usageAnnots :: { [Usage] } usageAnnots : usageAnnot usageAnnots { NEList.toList $1 ++ $2 } | {- epsilon -} { [] } -- A single usage annotation (e.g., "[a,b]"). usageAnnot :: { NonEmpty Usage } usageAnnot : '[' usageAnnot1s ']' { $2 } -- Note: <,> and are treated as synonyms. They possibly shouldn't. usageAnnot1s :: { NonEmpty Usage } usageAnnot1s : usageAnnot1 ',' usageAnnot1s { $1 <| $3 } | usageAnnot1 '/' usageAnnot1s { $1 <| $3 } | usageAnnot1 { $1 :| [] } usageAnnot1 :: { Usage } usageAnnot1 : usageAnnot2s { readUsage $ tokenToString $1 } usageAnnot2s :: { Token } usageAnnot2s : usageAnnot2 usageAnnot2s { $1 <> $2 } | usageAnnot2 { $1 } usageAnnot2 :: { Token } usageAnnot2 : tok_text { $1 } | gtok_anyKW { $1 } | ';' { $1 } | '+' { $1 } ------------------------------------------------------------------------------- -- Grouped simple tokens gtok_anyKW :: { Token } gtok_anyKW : gtok_gram { $1 } | tok_interrogPron { $1 } | 'to' { $1 } gtok_gram :: { Token } gtok_gram : tok_gramPOS { $1 } | tok_gramGender { $1 } | tok_gramNumber { $1 } | tok_gramCase { $1 } { ------------------------------------------------------------------------------- -- Auxiliary Haskell code -- Logging: -- * The FailWriter below allows for logging of parse notes and errors -- (`fail'). -- - Errors indicate a failure and, so, no value is returned. -- * `fail' should always be preferred over `error', unless the respective -- condition indicates a programming error. -- * The filename should not and cannot be given here; it is prepended at a -- higher level. -- | A writer that allows logging informative messages, but also to fail with -- an error message. -- The informative log is retained in case of a failure. type FailWriter = WriterT [String] (Either String) instance MonadFail (Either String) where fail = Left -- Note: The token list can only be empty if the token list given to -- `parseLine' was not terminated by a newline token. Which should not -- be possible (an error would occur on a higher level). -- - The first error is thus deliberately handled by `error' and not `fail'. parseError :: [Token] -> FailWriter a parseError [] = error "Parse error at end of line (missing newline?)." parseError ((Token _ (Position line col) _):_) = fail $ "Parse error at line " ++ show line ++ ", column " ++ show col ++ "." -- | Create a line from the left and right side's groups. Fail, if the groups -- are not equal in number of entries. makeLine :: Int -> [Group] -> [Group] -> FailWriter Line makeLine line gs hs = case zipWithExactMay Entry gs hs of Just es -> return $ Line es Nothing -> fail $ "Line " ++ show line ++ ": " ++ "Number of groups does not match on the two sides." tokenToGramLexCat :: Token -> GramLexCategory tokenToGramLexCat (Token _ _ (GramKW gram)) = gram tokenToGramLexCat _ = error "Not a grammar keyword." tokenToGramAnnot :: Token -> GrammarInfo tokenToGramAnnot (Token _ _ (GramKW gram)) = GramLexCategory gram tokenToGramAnnot _ = error "Not a grammar annotation." tokenToCase :: Token -> Case tokenToCase (Token _ _ (GramKW (Case cas))) = cas tokenToCase _ = error "Not a case keyword." tokenToPOS (Token _ _ (GramKW (PartOfSpeech pos))) = pos tokenToPOS _ = error "Not a part of speech keyword." tokenToNumber (Token _ _ (GramKW (Number number))) = number tokenToNumber _ = error "Not a grammatical number keyword." } -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Partial/000077500000000000000000000000001526415265400242615ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Partial/PseudoUnit.hs000066400000000000000000000057541526415265400267270ustar00rootroot00000000000000{- - Language/Ding/Partial/PseudoUnit.hs - partial pseudo units - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Handling of syntax elements that syntactically look like units however - only contain annotations, which are to be applied to preceding units. -} module Language.Ding.Partial.PseudoUnit ( PartialPseudoUnit , fromSuffixes , addToUnit , plusGramAnnot , plusUsageAnnot ) where import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NEList import Data.NatLang.Grammar (GrammarInfo) import Data.NatLang.Usage (Usage) import Language.Ding.Syntax (Unit(..)) import Language.Ding.Token (Token, tokenToString) -- | Partial pseudo unit that may be expanded with annotations and finally -- adjuncted to a unit. data PartialPseudoUnit = PartialPseudoUnit { plainToks :: [Token] , suffixes :: [String] , gramAnnots :: [NonEmpty GrammarInfo] , usageAnnots :: [NonEmpty Usage] } empty :: PartialPseudoUnit empty = PartialPseudoUnit [] [] [] [] -- | Create a `PartialPseudoUnit' from a list of parenthesis expressions. fromSuffixes :: [(String, Token)] -> PartialPseudoUnit fromSuffixes sufs = empty { suffixes = map fst sufs , plainToks = map snd sufs } plusGramAnnot :: PartialPseudoUnit -> NonEmpty GrammarInfo -> PartialPseudoUnit plusGramAnnot psu as = psu { gramAnnots = as : gramAnnots psu } plusUsageAnnot :: PartialPseudoUnit -> NonEmpty Usage -> PartialPseudoUnit plusUsageAnnot psu as = psu { usageAnnots = as : usageAnnots psu } -- | Add all annotations contained in a partial pseudo unit to a regular unit. addToUnit :: PartialPseudoUnit -> Unit -> Unit -- Note: -- * Due to the use of (++), this is not very efficient (for larger lists). -- * This could be improved by applying to a PartialUnit instead, which has -- stored its elements in inverse order. -- * This would however likely render the HappyParser.y code less -- readable. addToUnit psu u = u { unitPlain = unitPlain u ++ tokenToString (mconcat $ reverse $ plainToks psu) , unitSuffixes = unitSuffixes u ++ suffixes psu , unitGrammar = unitGrammar u ++ concat (reverse $ map NEList.toList $ gramAnnots psu) , unitUsages = unitUsages u ++ concat (reverse $ map NEList.toList $ usageAnnots psu) } -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Partial/Unit.hs000066400000000000000000000136641526415265400255460ustar00rootroot00000000000000{- - Language/Ding/Partial/Unit.hs - partial units - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Intermediate representation and handling of partially parsed units. -} module Language.Ding.Partial.Unit ( PartialUnit , fromToken , fromVerbToken , toUnit , plusToken , plusGramAnnot , plusUsageAnnot , plusAbbrevAnnot , plusInflAnnot , plusSuffix , plusRef ) where import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NEList (toList) import Data.NatLang.Grammar ( GrammarInfo(GramLexCategory) , GramLexCategory(PartOfSpeech) , PartOfSpeech(Verb) ) import Data.NatLang.InflectedForms (InflectedForms) import Data.NatLang.Usage (Usage) import Language.Ding.Syntax (Unit(..)) import Language.Ding.Token (Token, tokenToString) -- Notes -- * A PartialUnit contains information on a prefix of a unit. -- * It can be "modified" by appending annotations and regular unit text. -- * See below on "Modification". -- * "Modification": Inefficiency -- * A PartialUnit is immutable, hence any operation that might look like -- an update actually creates a new PartialUnit. -- * Cost is proportional to the number of fields in PartialUnit. -- * The problem could potentially be avoided by changing PartialUnit to -- essentially be a list of a sum type of all potential elements. This -- list would then later be processed by means equivalent to `plus*'. -- * All `plus*' functions are meant to be used in infix-form. -- | Partial unit that may be expanded with annotations and regular tokens, -- and finally converted into a `Language.Ding.Syntax.Unit'. -- All fields' contents are stored in reverse order. data PartialUnit = PartialUnit { headwordToks :: [Token] -- ^ tokens to later form the headword , plainToks :: [Token] -- ^ tokens to form a potential example , gramAnnots :: [NonEmpty GrammarInfo] , usageAnnots :: [NonEmpty Usage] , abbrevAnnots :: [NonEmpty String] , mInfl :: Maybe InflectedForms , suffixes :: [String] , references :: [String] } empty :: PartialUnit empty = PartialUnit [] [] [] [] [] Nothing [] [] -- | Convert a token to a partial unit without any annotation. fromToken :: Token -> PartialUnit fromToken = (empty `plusToken`) -- | Like fromToken, but mark as verb. Meant to be used for units prefixed by -- "to". fromVerbToken :: Token -> PartialUnit fromVerbToken t = fromToken t `plusGramAnnot` pure (GramLexCategory $ PartOfSpeech $ Verb []) -- | Add a token. -- All previous annotations except parenthesis expression are thrown away. -- (Due to the presence of the processed token, they are infix -- annotations.) -- Preceding parenthesis expressions are treated equal to preceding text -- tokens, and therefore effectively retained in verbatim. plusToken :: PartialUnit -> Token -> PartialUnit -- Use plainToks also for the headwordToks, because they contain literal -- ()-annots. plusToken pu t = empty { headwordToks = toks' , plainToks = toks' } where toks' = t : plainToks pu plusGramAnnot :: PartialUnit -> NonEmpty GrammarInfo -> PartialUnit plusGramAnnot pu as = pu { gramAnnots = as : gramAnnots pu } plusUsageAnnot :: PartialUnit -> NonEmpty Usage -> PartialUnit plusUsageAnnot pu as = pu { usageAnnots = as : usageAnnots pu } -- Note: -- * One might consider keeping one of the abbreviations in the example -- version (i.e., as Token) to allow for abbreviations to be retained -- verbatim when infixes of an example unit. -- * Further analysis required (TODO). plusAbbrevAnnot :: PartialUnit -> NonEmpty String -> PartialUnit plusAbbrevAnnot pu as = pu { abbrevAnnots = as : abbrevAnnots pu } -- | Add an inflection annotation. -- If there are added several ones in succession, the last one is prefered. plusInflAnnot :: PartialUnit -> InflectedForms -> PartialUnit plusInflAnnot pu infl = pu { mInfl = Just infl } -- | Takes both the string representing the suffix, without potential -- enclosing parentheses, and a token that includes potential parentheses. plusSuffix :: PartialUnit -> (String, Token) -> PartialUnit plusSuffix pu (s, t) = pu { suffixes = s : suffixes pu , plainToks = t : plainToks pu } plusRef :: PartialUnit -> String -> PartialUnit plusRef pu ref = pu { references = ref : references pu } -- | From a list of prefixes and a partial unit, construct a unit. -- Takes a list of (`String', `Token') prefixes that stem from parenthesis -- expressions, where the type has the same significance as in `plusSuffix'. toUnit :: [(String, Token)] -> PartialUnit -> Unit toUnit prefs pu = Unit { unitHeadword = tokenToString $ mconcat $ reverse $ headwordToks pu , unitPlain = tokenToString $ mconcat $ prefToks ++ (reverse $ plainToks pu) , unitGrammar = concat $ reverse $ map NEList.toList $ gramAnnots pu , unitUsages = concat $ reverse $ map NEList.toList $ usageAnnots pu , unitPrefixes = prefStrings , unitSuffixes = reverse $ suffixes pu , unitAbbrevs = concat $ reverse $ map NEList.toList $ abbrevAnnots pu , unitInflected = mInfl pu , unitReferences = reverse $ references pu , unitExamples = [] -- populated during enrichment } where (prefStrings, prefToks) = unzip prefs -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Pretty.hs000066400000000000000000000130611526415265400245110ustar00rootroot00000000000000{- - Language/Ding/Pretty.hs - pretty printing of the Ding AST - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-# LANGUAGE FlexibleInstances #-} {-| - Pretty printing of the Ding AST. - - Note that the pretty printing does not generally reproduce the originally - parsed Ding syntax; the result may even not be accepted by the parser. - - The former is because - a) during parsing, some information is dropped, - b) enrichment may have changed the order of annotations. - Also, potentially identified examples are not displayed. - - The latter is only the case when grammar inferral (enrichment) was - performed. In this case, grammar information such as "{noun}" may be - inferred, which is not originally present in the Ding dictionary, albeit - useful information during debugging. -} module Language.Ding.Pretty (pretty) where import Prelude hiding ((<>)) import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NEList import Text.PrettyPrint import Data.NatLang.Dictionary (Dictionary(..), Body(..)) import Data.NatLang.Grammar import Data.NatLang.InflectedForms import Data.NatLang.Usage import Language.Ding.Show.Grammar (showGLC, showCase, showNumber, showPOS) import Language.Ding.Syntax hiding (Dictionary) ------------------------- -- Some helper functions -- | Modify a `Doc' iff it is non-empty. applyNE :: (Doc -> Doc) -> Doc -> Doc applyNE f x = if isEmpty x then empty else f x -- | Like `punctuate', but remove nonempty `Doc's first. punctuateNE :: Doc -> [Doc] -> [Doc] punctuateNE p = punctuate p . filter (not . isEmpty) slashes :: Doc -> Doc slashes x = char '/' <> x <> char '/' class Pretty a where pretty :: a -> Doc prettyList :: [a] -> Doc prettyList = error "Language.Ding.Pretty: This element does not occur in lists." prettyNEList :: NonEmpty a -> Doc prettyNEList = prettyList . NEList.toList ------------------------ -- The Pretty instances instance Pretty Ding where pretty (Dictionary header _ _ body) = pretty header $+$ pretty body instance Pretty (Body Line) where pretty (Body lines) = prettyList lines -- See also: Language.Ding.HeaderParser instance Pretty Header where pretty (Header version date copyrightHolder copyrightPeriod license url) = foldr ($+$) empty $ [ text "# Version" <+> text "::" <+> text version <+> text date , text "# Copyright (c)" <+> text "::" <+> text copyrightHolder <> char ',' , text "#" <+> text copyrightPeriod , text "# License" <+> text "::" <+> text license , text "# URL" <+> text "::" <+> text url ] instance Pretty Line where pretty (Line entries) = prettyList left <+> text "::" <+> prettyList right where unzipEntries :: [Entry] -> ([Group], [Group]) unzipEntries = unzip . map (\ (Entry l r ) -> (l, r)) (left, right) = unzipEntries entries prettyList = foldr ($+$) empty . map pretty instance Pretty Entry where pretty (Entry g h) = pretty g <+> text "::" <+> pretty h instance Pretty Group where pretty (Group us) = prettyList us prettyList = hcat . punctuate (text " | ") . map pretty instance Pretty Unit where pretty u = hsep $ [ hsep $ map (parens . text) $ unitPrefixes u , text $ unitHeadword u , prettyList $ unitGrammar u , prettyList $ unitUsages u , applyNE slashes $ hsep $ punctuate semi $ map text $ unitAbbrevs u , maybe empty pretty $ unitInflected u , hsep $ map (parens . text) $ unitSuffixes u , hsep $ map (text . ('~':)) $ unitReferences u ] prettyList = hsep . punctuate semi . map pretty instance Pretty GrammarInfo where pretty (GramLexCategory gram) = pretty gram pretty (Collocate colloc usgs) = pretty colloc <+> prettyList usgs prettyList = applyNE braces . hsep . punctuate semi . map pretty instance Pretty GramLexCategory where pretty = hcat . punctuate (char '/') . map text . showGLC instance Pretty Collocate where pretty (CollocCase iProns cas) = pref <+> char '+' <> pretty cas where pref = hsep $ punctuate comma $ map text iProns pretty (CollocPOS pos) = char '+' <> pretty pos pretty (CollocNumber number) = char '+' <> pretty number instance Pretty Case where pretty = text . showCase instance Pretty Number where pretty = text . showNumber instance Pretty PartOfSpeech where -- Note: showPOS is expected to always give exactly one string here. pretty = hcat . punctuate (char '/') . map text . showPOS instance Pretty Usage where pretty (Usage _ str) = text str prettyList = applyNE brackets . hsep . punctuate comma . map pretty instance Pretty InflectedForms where pretty (InflectedForms infl1 infl2) = braces $ prettyNEList infl1 <> semi <+> prettyNEList infl2 instance Pretty InflectedForm where pretty (InflectedForm form usgs) = text form <+> prettyList usgs prettyList = hsep . punctuate comma . map pretty -- vi: ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Read/000077500000000000000000000000001526415265400235405ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Read/Usage.hs000066400000000000000000000224471526415265400251510ustar00rootroot00000000000000{- - Language/Ding/Read/Usage.hs - read usage (<[]>) annotations from strings - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Classify usage annoations into common TEI categories. - - Only a subset of all usage annotations are explicitly classified, all - others are assigned the default `hint' category. -} module Language.Ding.Read.Usage ( readUsage ) where import Data.NatLang.Usage -- Notes: -- * The lists below have been created with the help of -- util/results/bracketexps. -- * The meaning of the annotations (which type of annotation they are) has -- been determined by searching examples in the Ding and infering from there -- on (if not obvious). In some cases, Wikipedia or the Wiktionary were of -- help. -- * See also Data/NatLang/Usage.hs and the notes there. -- TODO: ? differentiate languages (English vs. German annotations) -- Note: Words tend to be listed in decreasing order of frequency in the Ding. -- TODO: -- - "übtr." -- - "eBr.", "eam." -- - "mainly Am." -- - "bes. Süddt." -- - "Am., auch Br." -- - "also Br." -- - "alt" -- - "pej." -- - "obs." -- - "Sprw." ~ "prov." -- - "tm" (Trademark) -- - "archaic", "dated" -- - "also fig" -- - "auch übtr." -- - "humor." -- - "Reitsport" ~ "riding" -- - generally: German vs. English form -- - "log" -- - "especially Am." -- - "academic" ~ "sci"? | register? -- - "literary" -- - ... -- | Convert a usage string to a `Usage', thereby classifying it. readUsage :: String -> Usage -- Regions where German is spoken (in a particular way). -- * Sometimes expressed as the corresponding dialect. readUsage s@"Ös." = Usage Regional s readUsage s@"Schw." = Usage Regional s readUsage s@"Dt." = Usage Regional s readUsage s@"Bayr." = Usage Regional s readUsage s@"Norddt." = Usage Regional s readUsage s@"Süddt." = Usage Regional s readUsage s@"Mitteldt." = Usage Regional s readUsage s@"BW" = Usage Regional s -- Baden-Württemberg ? readUsage s@"Westdt." = Usage Regional s readUsage s@"Ostdt." = Usage Regional s readUsage s@"Mittelwestdt." = Usage Regional s readUsage s@"Nordostdt." = Usage Regional s readUsage s@"Südtirol" = Usage Regional s readUsage s@"Nordwestdt." = Usage Regional s readUsage s@"Mittelostdt." = Usage Regional s readUsage s@"Südwestdt." = Usage Regional s readUsage s@"Lie." = Usage Regional s readUsage s@"Westös." = Usage Regional s readUsage s@"Lux." = Usage Regional s readUsage s@"Berlin" = Usage Regional s readUsage s@"Tirol" = Usage Regional s readUsage s@"Wien" = Usage Regional s readUsage s@"Ostös." = Usage Regional s readUsage s@"Oberdt." = Usage Regional s readUsage s@"Westfalen" = Usage Regional s readUsage s@"Sächs." = Usage Regional s readUsage s@"Pfalz" = Usage Regional s readUsage s@"Ostmitteldt." = Usage Regional s readUsage s@"Hessen" = Usage Regional s readUsage s@"Vbg." = Usage Regional s -- Vorarlbergisch readUsage s@"Südostös." = Usage Regional s readUsage s@"Schwäb." = Usage Regional s readUsage s@"Rheinl." = Usage Regional s readUsage s@"DDR" = Usage Regional s -- Regions where English is spoken (in a particular way). -- * Sometimes expressed as the corresponding dialect. readUsage s@"Br." = Usage Regional s readUsage s@"Am." = Usage Regional s readUsage s@"Austr." = Usage Regional s readUsage s@"Sc." = Usage Regional s readUsage s@"NZ" = Usage Regional s readUsage s@"Ir." = Usage Regional s readUsage s@"Can." = Usage Regional s readUsage s@"In." = Usage Regional s readUsage s@"South Africa" = Usage Regional s readUsage s@"Welch" = Usage Regional s readUsage s@"SE Asia" = Usage Regional s readUsage s@"Northern English" = Usage Regional s readUsage s@"Northern Irish" = Usage Regional s -- Languages being neither a dialect of German nor of English. readUsage s@"French" = Usage Language s readUsage s@"Ital." = Usage Language s readUsage s@"Lat." = Usage Language s -- Times readUsage s@"archaic" = Usage Time s readUsage s@"altertümelnd" = Usage Time s -- ~archaic readUsage s@"altertümlich" = Usage Time s -- ~archaic readUsage s@"dated" = Usage Time s -- Registers (TODO: more) -- * See https://en.wikipedia.org/wiki/Register_(sociolinguistics) -- for why some of these are considered registers. -- * TODO: Consider to map to ISO 12620. readUsage s@"techn." = Usage Register s -- not a domain? readUsage s@"ugs." = Usage Register s -- ~slang readUsage s@"coll." = Usage Register s -- ~slang readUsage s@"geh." = Usage Register s -- ? ~formal readUsage s@"slang" = Usage Register s readUsage s@"formal" = Usage Register s readUsage s@"humor." = Usage Register s -- ? readUsage s@"vulg." = Usage Register s readUsage s@"iron." = Usage Register s readUsage s@"fachspr." = Usage Register s -- ~ "sci." ? readUsage s@"euphem." = Usage Register s -- ? readUsage s@"dialect" = Usage Register s readUsage s@"literary" = Usage Register s -- ~ "poet." -- Styles (TODO: more) readUsage s@"fig." = Usage Style s -- Preferences (none; TODO) -- * TEI Guidelines: "preference level (‘chiefly’, ‘usually’, etc.)" -- * TEI Lex-0: -> frequency: ex.: rare, occas. --readUsage s@... = Usage Preference s -- Acceptabilities (none) -- * No further description in the TEI Guidelines. --readUsage s@... = Usage Acceptability s -- @type="textType", as in TEI Lex-0. Currently considered a hint. readUsage s@"jur." = Usage Hint s -- not a domain? readUsage s@"adm." = Usage Hint s -- not a domain? readUsage s@"poet." = Usage Hint s -- not a register?; ~ "literary" -- Domains: readUsage s@"ornith." = Usage Domain s -- the most frequent (!) readUsage s@"med." = Usage Domain s readUsage s@"chem." = Usage Domain s readUsage s@"geogr." = Usage Domain s readUsage s@"bot." = Usage Domain s readUsage s@"zool." = Usage Domain s readUsage s@"comp." = Usage Domain s readUsage s@"fin." = Usage Domain s readUsage s@"electr." = Usage Domain s readUsage s@"cook." = Usage Domain s readUsage s@"econ." = Usage Domain s readUsage s@"min." = Usage Domain s readUsage s@"constr." = Usage Domain s readUsage s@"auto" = Usage Domain s readUsage s@"mil." = Usage Domain s readUsage s@"pol." = Usage Domain s readUsage s@"anat." = Usage Domain s readUsage s@"mach." = Usage Domain s readUsage s@"sport" = Usage Domain s readUsage s@"soc." = Usage Domain s readUsage s@"mus." = Usage Domain s readUsage s@"textil." = Usage Domain s readUsage s@"geol." = Usage Domain s readUsage s@"math." = Usage Domain s readUsage s@"agr." = Usage Domain s readUsage s@"hist." = Usage Domain s readUsage s@"phys." = Usage Domain s readUsage s@"relig." = Usage Domain s readUsage s@"biol." = Usage Domain s readUsage s@"naut." = Usage Domain s readUsage s@"aviat." = Usage Domain s readUsage s@"ling." = Usage Domain s readUsage s@"envir." = Usage Domain s readUsage s@"telco." = Usage Domain s readUsage s@"lit." = Usage Domain s -- "literature", not "literally" readUsage s@"psych." = Usage Domain s readUsage s@"biochem." = Usage Domain s readUsage s@"art" = Usage Domain s readUsage s@"school" = Usage Domain s readUsage s@"meteo." = Usage Domain s readUsage s@"transp." = Usage Domain s readUsage s@"arch." = Usage Domain s -- "architecture" readUsage s@"astron." = Usage Domain s readUsage s@"print" = Usage Domain s readUsage s@"pharm." = Usage Domain s readUsage s@"stud." = Usage Domain s readUsage s@"phil." = Usage Domain s readUsage s@"statist." = Usage Domain s readUsage s@"photo." = Usage Domain s readUsage s@"astrol." = Usage Domain s readUsage s@"phot." = Usage Domain s readUsage s@"theat." = Usage Domain s readUsage s@"mech." = Usage Domain s readUsage s@"laser." = Usage Domain s readUsage s@"insur." = Usage Domain s -- does not really fit the common syntax: readUsage s@"Beleuchtungstechnik" = Usage Domain s readUsage s@"vetmed." = Usage Domain s readUsage s@"TV" = Usage Domain s readUsage s@"riding" = Usage Domain s readUsage s@"Reitsport" = Usage Domain s readUsage s@"Radsport" = Usage Domain s readUsage s@"cycling" = Usage Domain s readUsage s@"archeol." = Usage Domain s -- different from "arch." -- Default catchall readUsage s = Usage Hint s -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Show/000077500000000000000000000000001526415265400236055ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Show/Grammar.hs000066400000000000000000000057141526415265400255360ustar00rootroot00000000000000{- - Language/Ding/Show/Grammar.hs - convert grammar annotations to strings - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert grammar annotations to strings, as they might occur in the Ding - dictionary. Note that they generally have a different representation in - TEI. - - The functions herin are both used by the pretty printer, but also by the - parser, to convert grammar keywords identified in the lexer back to their - string representation, when they do not have special meaning due to their - context--of which the lexer is unaware. -} module Language.Ding.Show.Grammar ( showGLC , showPOS , showNumber , showCase ) where import Data.NatLang.Grammar showGLC :: GramLexCategory -> [String] showGLC (PartOfSpeech pos) = showPOS pos showGLC (Gender gen) = pure $ showGender gen showGLC (Number num) = pure $ showNumber num showGLC (Case cas) = pure $ showCase cas showPOS :: PartOfSpeech -> [String] showPOS Noun = pure "noun" showPOS (Verb []) = pure "v" showPOS (Verb vTypes) = map showTypedVerb vTypes showPOS Adjective = pure "adj" showPOS Adverb = pure "adv" showPOS Preposition = pure "prp" showPOS Conjunction = pure "conj" showPOS Article = pure "art" showPOS (Pronoun []) = pure "pron" showPOS (Pronoun pTypes) = map showTypedPronoun pTypes showPOS Numeral = pure "num" showPOS Interjection = pure "interj" showPOS Particle = pure "particle" showTypedVerb :: VerbType -> String showTypedVerb Transitive = "vt" showTypedVerb Intransitive = "vi" showTypedVerb Reflexive = "vr" showTypedPronoun :: PronounType -> String showTypedPronoun Personal = "ppron" showTypedPronoun Interrogative = "pron interrog" showTypedPronoun Relative = "pron relativ" showGender :: Gender -> String showGender Feminine = "f" showGender Masculine = "m" showGender Neuter = "n" showNumber :: Number -> String showNumber (Singular False) = "sing" showNumber (Singular True) = "no pl" showNumber (Plural False) = "pl" showNumber (Plural True) = "no sing" showCase :: Case -> String showCase Nominative = "Nom." showCase Genitive = "Gen." showCase Accusative = "Akk." showCase Dative = "Dat." -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Syntax.hs000066400000000000000000000060741526415265400245160ustar00rootroot00000000000000{- - Language/Ding/Syntax.hs - general AST structures - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - General Ding AST types. - - This does not include elements of the AST that are common to both Ding and - TEI, which may instead by found in `Data.NatLang'. -} module Language.Ding.Syntax ( Ding , Header(..) , Line(..) , Entry(..) , Group(..) , Unit(..) ) where import Data.NatLang.Dictionary (Dictionary) import Data.NatLang.Example (Example) import Data.NatLang.Grammar (GrammarInfo) import Data.NatLang.InflectedForms (InflectedForms) import Data.NatLang.Usage (Usage) -- | A whole dictionary (set of German-English translation pairs), together -- with a header. type Ding = Dictionary Header Line -- | The header of the Ding. data Header = Header { headerVersion :: String , headerVersionDate :: String , headerCopyrightHolder :: String , headerCopyrightPeriod :: String , headerLicense :: String , headerURL :: String } deriving Show -- | A set of related entries. newtype Line = Line [Entry] deriving Show -- | A pair of corresponding `Group's. -- Upon parsing from the Ding, the order of languages is the same as there. -- The order may be flipped later though. data Entry = Entry Group Group deriving (Show, Eq, Ord) -- | A set of `Unit's matching the same translation. -- It may be empty, in which case a later created corresponding TEI entry may -- have zero translations (if the `Group' is on the target language's side). -- If an empty `Group' is on the source language's side, it is not at all -- represented in the resulting TEI. newtype Group = Group [Unit] deriving (Show, Eq, Ord) -- TODO: ? Represent units being abbreviations differently? -- - e.g.: add UnitType argument -- @type="abbrev" -- | A single (key-)word or phrase, in one language, with annotations. data Unit = Unit { unitHeadword :: String , unitPlain :: String -- ^ includes literal <()>-annotations , unitGrammar :: [GrammarInfo] , unitUsages :: [Usage] , unitPrefixes :: [String] , unitSuffixes :: [String] , unitAbbrevs :: [String] , unitInflected :: Maybe InflectedForms , unitReferences :: [String] -- ~tilde references , unitExamples :: [Example] -- initially none, added during enrichment } deriving (Show, Eq, Ord) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/Ding/Token.hs000066400000000000000000000133731526415265400243100ustar00rootroot00000000000000{- - Language/Ding/Token.hs - token structures as produced by the lexer - - Copyright 2020-2021 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Token types, as produced by the Alex generated lexer and consumed by the - happy generated parser (and the header parser). -} module Language.Ding.Token ( Token(..) , Position(..) , Atom(..) , tokenToString , tokenToPosition , tokenToLine , tokenToColumn ) where import Data.NatLang.Grammar (GramLexCategory) import Language.Ding.Show.Grammar (showGLC) -- | Token, as produced by the lexer. Annotated with any directly preceding -- whitespace and the position in the input. data Token = Token String -- ^ Preceding whitespace. Position Atom | EmptyToken -- ^ Neutral element in the monoid. -- Note: -- * This instance's show function is not injective. Information on position -- and preceding whitespace is dropped. instance Show Token where show (Token _ _ atom) = show atom show EmptyToken = "EmptyToken" -- Note: One cannot simply use AlexPosn here, since this would introduce a -- dependency cycle (in the current setup). -- | Position of a token in the input, line and column. data Position = Position { positionToLine :: Int , positionToColumn :: Int } deriving Show -- TODO: Consider to add an explicit constructor for each possible separator. -- | The essential part of a `Token'. data Atom = NL | LangSep -- ^ "::" | Vert | Semi | Comma | Tilde | Plus | Wordswitch -- ^ "<>" | StrongSlash -- ^ see `doc/ding.slashes' | WeakSlash -- ^ see `doc/ding.slashes' | DoubleSlash | OBrace | CBrace | OBracket | CBracket | OParen | CParen | OAngle | CAngle | OSlash -- ^ see `doc/ding.slashes' | CSlash -- ^ see `doc/ding.slashes' | SlashSpecial String | Abbrev String | AbbrevPlural String | GramKW GramLexCategory | IntPronKW String | Text String | KW_to | HeaderLine String deriving Show -- | Convert a token back to the string it represents excluding potential -- delimiters and dropping the annotated preceding whitespace. Uses -- `atomToString'. tokenToString :: Token -> String tokenToString (Token _ _ atom) = atomToString atom tokenToString EmptyToken = "" -- | Convert an atom back to the string that it represents, excluding any -- delimiters (). -- This function is not injective, in particular the distinction of different -- kinds of slashes is lost. atomToString :: Atom -> String atomToString NL = "\n" atomToString LangSep = "::" atomToString Vert = "|" atomToString Semi = ";" atomToString Comma = "," atomToString Tilde = "~" atomToString Plus = "+" atomToString Wordswitch = "<>" atomToString StrongSlash = "/" atomToString WeakSlash = "/" atomToString DoubleSlash = "//" atomToString OBrace = "{" atomToString CBrace = "}" atomToString OBracket = "[" atomToString CBracket = "]" atomToString OParen = "(" atomToString CParen = ")" atomToString OAngle = "<" atomToString CAngle = ">" atomToString OSlash = "/" atomToString CSlash = "/" atomToString (SlashSpecial s) = s -- pretty: "/ " ++ s ++ " /" atomToString (Abbrev s) = s -- pretty: "/ " ++ s ++ " /" atomToString (AbbrevPlural s) = s -- pretty: "/" ++ s ++ "/s" -- showGLC always gives a list of length one in this context. atomToString (GramKW gram) = head $ showGLC gram atomToString (IntPronKW pron) = pron atomToString (Text t) = t atomToString KW_to = "to" atomToString (HeaderLine l) = l tokenToPosition :: Token -> Position tokenToPosition EmptyToken = error "Tried to get position of empty token." tokenToPosition (Token _ pos _) = pos tokenToLine :: Token -> Int tokenToLine = positionToLine . tokenToPosition tokenToColumn :: Token -> Int tokenToColumn = positionToColumn . tokenToPosition -- All tokens have a string representation, which, together with the preceding -- whitespace, identifies their value. Two tokens may hence be combined in a -- natural way, into a canonical `Text' token. instance Semigroup Token where -- Join two tokens by concatenating their string representations, with the -- correct whitespace in between. (Token ws1 pos1 atom1) <> (Token ws2 _ atom2) = Token ws1 pos1 (Text $ atomToString atom1 ++ ws2 ++ atomToString atom2) -- EmptyToken is supposed to be a neutral element. Note that this means that -- `EmptyToken <> tok' retains the whitespace from `tok'. See also -- todo/parsing.elimination. EmptyToken <> tok = tok tok <> EmptyToken = tok instance Monoid Token where -- The unit in the token monoid is the empty 'Text' with no preceding white- -- space. mempty = EmptyToken -- vi: ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/000077500000000000000000000000001526415265400224255ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/Show/000077500000000000000000000000001526415265400233455ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/Show/Grammar.hs000066400000000000000000000076431526415265400253010ustar00rootroot00000000000000{- - Language/TEI/Show/Grammar.hs - show-like functions for grammar elements - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Print grammar annotations according to TEI syntax. -} module Language.TEI.Show.Grammar ( showPrimaryPOS , showVerbType , showPronounType , showGender , showPrimaryNumber , showCase , shownSingulareTantum , shownPluraleTantum ) where import Data.NatLang.Grammar -- Notes: -- * The string representations are chosen according to -- Freedict/fd-dictionaries/shared/FreeDict_ontology.xml (short). -- * If not found, annotated as UNCERTAIN. -- * The existing dictionaries may serve as reference also. -- * swh-eng is the only dictionary to contain elements. -- * lat-deu is the only dictionary to contain elements. -- * Some could not be found anywhere and have been guessed/invented. -- * See also . -- * This module encompasses show* functions, which are similar to show, as -- defined in `Show' instances. -- * They are not defined in `Show' instances, because -- a) The datatypes are shared between the Ding and TEI ASTs and it is -- inconvenient to write two complete sets of Show instances by hand. -- b) Some of the functions are not injective, they hide important -- information, which is generally undesired for `show'. -- * These problems do not exist for Usage. (UsageType has no -- representation in Ding; all other information is encoded as plain -- string) showPrimaryPOS :: PartOfSpeech -> String showPrimaryPOS Noun = "n" showPrimaryPOS (Verb _) = "v" showPrimaryPOS Adjective = "adj" showPrimaryPOS Adverb = "adv" showPrimaryPOS Preposition = "prep" showPrimaryPOS Conjunction = "conj" showPrimaryPOS Article = "art" showPrimaryPOS (Pronoun _) = "pron" showPrimaryPOS Numeral = "num" showPrimaryPOS Interjection = "int" showPrimaryPOS Particle = "ptcl" -- UNCERTAIN (common gloss) showVerbType :: VerbType -> String showVerbType Transitive = "trans" showVerbType Intransitive = "intr" showVerbType Reflexive = "refl" -- UNCERTAIN (~swh-eng) showPronounType :: PronounType -> String showPronounType Personal = "pers" -- UNCERTAIN (~swh-eng) showPronounType Interrogative = "inter" -- UNCERTAIN (~swh-eng) showPronounType Relative = "rel" -- UNCERTAIN showGender :: Gender -> String showGender Feminine = "fem" showGender Masculine = "masc" showGender Neuter = "neut" showPrimaryNumber :: Number -> String showPrimaryNumber (Singular _) = "sg" -- UNCERTAIN (~ several) showPrimaryNumber (Plural _) = "pl" -- UNCERTAIN (~ several) showCase :: Case -> String showCase Nominative = "nom" -- UNCERTAIN showCase Genitive = "gen" -- UNCERTAIN (~lat-deu) showCase Accusative = "acc" -- UNCERTAIN (~lat-deu: akk) showCase Dative = "dat" -- UNCERTAIN (~lat-deu) shownSingulareTantum :: String shownSingulareTantum = "sg only" -- UNCERTAIN shownPluraleTantum :: String shownPluraleTantum = "pl only" -- UNCERTAIN -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/Syntax.hs000066400000000000000000000066651526415265400242640ustar00rootroot00000000000000{- - Language/TEI/Syntax.hs - general AST structures - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - The TEI AST. - - The types are quite closely related to TEI's XML elements (see - `Language.TEI.ToXML' on how they translate. - - This does only support a small subset of TEI (for dictionaries), as is - needed to represent the information that stems from the Ding dictionary. - - AST elements that are common to both Ding and TEI are to be found in - `Data.NatLang'. - - The TEI header is not explicitly represented, instead the Ding header type - is used. -} module Language.TEI.Syntax ( TEI , Entry(..) , Form(..) , Sense(..) , Translation(..) ) where import Data.NatLang.Dictionary (Dictionary) import Data.NatLang.Grammar (GrammarInfo) import Data.NatLang.Usage (Usage) import Data.NatLang.InflectedForms (InflectedForms) import qualified Language.Ding.Syntax as Ding (Header) import Language.TEI.Syntax.Reference (Ident, ReferenceGroup) import Data.NatLang.Example (Example) -- | A TEI dictionary, with a Ding header. type TEI = Dictionary Ding.Header Entry -- | A TEI entry, with a unique identifier, a form (containing the headword, -- i.a.), grammar annotation and a list of senses (containing translations, -- i.a.). -- Note that annotated grammar information should pertain to all senses. data Entry = Entry { entryIdent :: Ident , entryForm :: Form , entryGrammar :: [GrammarInfo] , entrySenses :: [Sense] } deriving Show -- | A form, containing a single headword and potentially some related forms. -- Pronunciation information, that also belongs to a `

' is added by a -- separate tool, after TEI XML generation. data Form = Form { formOrth :: String -- ^ headword , formAbbrevs :: [String] , formInflected :: Maybe InflectedForms } deriving (Show, Eq, Ord) -- | A sense, containing translations and annotations. data Sense = Sense { senseGrammar :: [GrammarInfo] , senseUsages :: [Usage] , senseTranslations :: [Translation] , senseExamples :: [Example] , senseReferences :: [ReferenceGroup] -- ^ References, grouped by type. -- No two reference groups with the same type should occur. , senseNotes :: [String] -- ^ from suffixing Ding-<()>-annotations } deriving (Show, Eq, Ord) -- | A translation to a headword, together with annotations. Corresponds -- to `'. data Translation = Translation { translationOrth :: String , translationGrammar :: [GrammarInfo] , translationUsages :: [Usage] , translationAbbrevs :: [String] , translationInflected :: Maybe InflectedForms , translationNotes :: [String] } deriving (Show, Eq, Ord) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/Syntax/000077500000000000000000000000001526415265400237135ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/Syntax/Reference.hs000066400000000000000000000043161526415265400261510ustar00rootroot00000000000000{- - Language/TEI/Syntax/Reference.hs - references - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - TEI references, corresponding to the `xr' and `ref' XML tags. -} module Language.TEI.Syntax.Reference ( Ident(..) , ReferenceGroup(..) , Reference(..) , RefType(..) ) where import Data.List.NonEmpty (NonEmpty) -- | An identifier representing `HW.n' where `HW' is a headword and `n' -- a distinguishing number. data Ident = Ident String Int deriving (Show, Eq, Ord) -- | A list of references, sharing a type; corresponds to `xr' in TEI XML. data ReferenceGroup = ReferenceGroup RefType (NonEmpty Reference) deriving (Show, Eq, Ord) -- | A reference; corresponds to `ref' in TEI XML. data Reference = Reference (Maybe Ident) -- ^ target identifier String -- ^ target string representation deriving (Show, Eq, Ord) -- | Reference types, as describe in the FreeDict HowTo: -- data RefType = Synonymy | Etymology -- ^ not present in the Ding | Comparison -- ^ not present in the Ding | Illustration -- ^ not present in the Ding | Related deriving (Eq, Ord) -- | Show reference types as recommended by FreeDict. instance Show RefType where show Synonymy = "syn" show Etymology = "etym" show Comparison = "cf" show Illustration = "illus" show Related = "see" -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML.hs000066400000000000000000000055641526415265400237360ustar00rootroot00000000000000{- - Language/TEI/ToXML.hs - convert TEI to XML (AST) - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert the TEI AST to textual TEI XML. -} module Language.TEI.ToXML (prettyTEI) where import Text.XML.Light import Data.NatLang.Dictionary (Dictionary(..), Body(..)) import Language.TEI.Syntax (TEI) import Language.TEI.ToXML.Aux import Language.TEI.ToXML.Body import Language.TEI.ToXML.Header -- Notes: -- * haskell-xml does not catch invalid input ! -- * `Language.TEI.ToXML.ValidateChar.validateString' should be applied -- to the Ding input before attempting to convert to XML here. -- * Currently done in Main. -- | Pretty-print the TEI AST, as XML. prettyTEI :: TEI -> String -- Do not use `ppcTopElement' here, it adds a boring default header. prettyTEI tei = xmlDeclDoctype ++ (ppcElement prettyConfigPP $ teiToElement tei) ++ "\n" -- | String form of the XML declaration and doctype (haskell-xml does not -- support such properly). xmlDeclDoctype :: String -- TODO: Put the referenced files into place (e.g., by symlinking). xmlDeclDoctype = unlines [ "" , "" , "" , "" , "" , "" ] -- | Translate a TEI AST to the corresponding XML AST. teiToElement :: TEI -> Element teiToElement tei = unode "TEI" ( [ uattr "xmlns" "http://www.tei-c.org/ns/1.0", uattr "version" "5.0" ] , [ convHeader (dictHeader tei) srcLang tgtLang nHeadwords , convBody (dictBody tei) srcLang tgtLang ] ) where srcLang = dictSrcLang tei tgtLang = dictTgtLang tei -- Note: It seems more reasonable to calculate the number of headwords, which -- is to become part of the TEI header, in the ding2tei translation -- function. However, as of now, the TEI AST is unable to store that -- number. nHeadwords = length entries where (Body entries) = dictBody tei -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/000077500000000000000000000000001526415265400233705ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/Aux.hs000066400000000000000000000041151526415265400244620ustar00rootroot00000000000000{- - Language/TEI/ToXML/Aux.hs - auxiliary functions for XML generation - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Auxiliary XML generation functions. - - The used `xml' library is very simple; this module tries to compensate - for this. -} module Language.TEI.ToXML.Aux ( uattr , xmlLangAttr , xmlIdAttr , text , mergeContent ) where import Text.XML.Light -- | Attribute with unqualified name, analogous to `unode'. uattr :: String -> String -> Attr uattr k v = Attr (unqual k) v -- | `@xml:lang' attribute xmlLangAttr :: String -> Attr xmlLangAttr lang = Attr (QName "lang" Nothing (Just "xml")) lang -- | `@xml:id' attribute xmlIdAttr :: String -> Attr xmlIdAttr val = Attr (QName "id" Nothing (Just "xml")) val -- | Text content. Upon pretty printing, special XML characters are escaped. text :: String -> Content text s = Text $ CData CDataText s Nothing -- | Combine adjacent text and elements into the correspondonding string, -- wrapped as a single `Content'. -- This is an ugly workaround to the awkward "pretty" formatting of -- `Text.XML.Light', where a list of `Content' (length >= 2) is always -- converted to a corresponding list of idented lines. mergeContent :: [Content] -> Content mergeContent cs = Text $ CData CDataRaw rawString Nothing where rawString = concatMap (ppcContent defaultConfigPP) cs -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/Body.hs000066400000000000000000000166621526415265400246340ustar00rootroot00000000000000{- - Language/TEI/ToXML/Body.hs - convert TEI body to XML (AST) - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert the TEI body to XML. -} module Language.TEI.ToXML.Body (convBody) where import Data.Foldable (toList) import Data.List.NonEmpty (NonEmpty((:|))) import Data.Maybe (mapMaybe) import Text.XML.Light import Data.NatLang.Dictionary (Body(Body)) import Data.NatLang.Example (Example(..)) import Data.NatLang.InflectedForms (InflectedForms(..), InflectedForm(..)) import Data.NatLang.Language import Data.NatLang.Usage (Usage(..)) import Language.TEI.Syntax import Language.TEI.Syntax.Reference import Language.TEI.ToXML.Aux import Language.TEI.ToXML.Grammar import Language.TEI.ToXML.Ident -- Notes: -- * The auxiliary functions are set up in the `where' block of the main -- function so that they all have shared access to `srcLang' and `tgtLang'. -- * Otherwise, these variables would need to be passed around a lot, even -- to functions that do not use them directly but only pass them further -- down. -- * Some functions could be taken off the where block, but they are not, -- for consistency. -- * The functions `node _' and `unode _' are heavily overloaded. They may -- operate on e.g.: -- ([Attr], String), (Attr, Element), ([Attr], [Element]), Attr. -- * If a pair is provided, the left element is always the attribute (list) -- and the right element the content. -- * The @xml:lang attribute is placed -- - on the top-level element (source language), and -- - on cit@type="trans" elements (target language). -- - This includes translations of examples. -- * Reasoning: All but translations are in the source language, this is -- the minimal approach. -- * Note that there are some fixed abbreviations (e.g., for grammatical -- gender, or register), which violate this (usually English; TODO?). -- * lg1-lg2.tei suggests otherwise. -- * TEI Lex-0 suggests instead to add the attribute to and -- elements. -- | Convert the TEI Body to the corresponding TEI XML. convBody :: Body Entry -> Language -> Language -> Element convBody body srcLang tgtLang = convBody' body where ------------------------- -- Some useful constants xmlLangSrc = xmlLangAttr $ showCode srcLang xmlLangTgt = xmlLangAttr $ showCode tgtLang --------------------------- -- The converter functions convBody' :: Body Entry -> Element convBody' (Body entries) = unode "text" $ (,) xmlLangSrc $ unode "body" $ map convEntry $ entries convEntry :: Entry -> Element convEntry e = unode "entry" ( [xmlIdAttr $ identToXMLId $ entryIdent e] , (convForm $ entryForm e) : maybe id (:) (convGrammar $ entryGrammar e) (mapMaybe convSense $ entrySenses e) ) -- @type=lemma is a TEI Lex-0 recommendation. convForm :: Form -> Element convForm form = unode "form" $ unode "orth" (formOrth form) : map (convAbbrev "form") (formAbbrevs form) ++ maybe [] convInflectedForms (formInflected form) -- Encoded as suggested by Sebastian Humenda (on , -- 2020-08-29). -- To be nested inside the main element. -- Note: The tagName is "form" inside and "cit" inside . convAbbrev :: String -> String -> Element convAbbrev tagName = unode tagName . (,) (uattr "type" "abbrev") . unode "orth" -- tns[@value="past"]: no source - guessed / newly defined. -- tns[@value="pstp"] was found as an example in the TEI P5 doc (9.5.3.1). -- - TEI Lex-0 sug.: pap convInflectedForms :: InflectedForms -> [Element] convInflectedForms (InflectedForms (sp :| sps) (pp :| pps)) = map (convInflectedForm "past" (Just "indicative")) (sp : sps) ++ map (convInflectedForm "pstp" Nothing) (pp : pps) -- Syntax: -- a) E-Mail from Sebastian Humenda (on , -- 2020-05-03) -- * Nest inside the main form. -- b) TEI Lex-0 (3.3): suggests value as content, e.g. pres. -- c) TEI P5 -- * 9.3.1: grammar tags -- * doc: tns, mood example: -- d) FreeDict TEI (@shumenda): Do not use @value, instead content. convInflectedForm :: String -> Maybe String -> InflectedForm -> Element convInflectedForm tense mMood (InflectedForm orth usages) = unode "form" ( [uattr "type" "infl"] , unode "gramGrp" ( (unode "tns" $ tense) : maybe [] (pure . unode "mood") mMood ) : unode "orth" orth : map convUsage usages ) -- When there is no content, there needs not be no sense element. Hence -- `Maybe Element'. convSense :: Sense -> Maybe Element convSense sense = let content = maybe id (:) (convGrammar $ senseGrammar sense) $ (map convUsage $ senseUsages sense) ++ (map convTranslation $ senseTranslations sense) ++ (map convExample $ senseExamples sense) ++ (map convRefGroup $ senseReferences sense) ++ (map (unode "note") $ senseNotes sense) in if null content then Nothing else Just $ unode "sense" content -- Note: inflected forms are dropped for now - unsure how to encode. (TODO) convTranslation :: Translation -> Element convTranslation trans = unode "cit" ( [uattr "type" "trans", xmlLangTgt] , unode "quote" (translationOrth trans) : (maybe id (:) (convGrammar $ translationGrammar trans) $ (map convUsage $ translationUsages trans) ++ (map (convAbbrev "cit") $ translationAbbrevs trans) ++ (map (unode "note") $ translationNotes trans) ) ) convUsage :: Usage -> Element convUsage (Usage uType uStr) = unode "usg" ( uattr "type" (show uType) , uStr ) convExample :: Example -> Element convExample (Example srcEx tgtExs) = unode "cit" ( [uattr "type" "example"] , unode "quote" srcEx : map convExTrans tgtExs ) where convExTrans :: String -> Element convExTrans = unode "cit" . (,) [uattr "type" "trans", xmlLangTgt] . unode "quote" convRefGroup :: ReferenceGroup -> Element convRefGroup (ReferenceGroup refType refs) = unode "xr" ( [uattr "type" (show refType)] , map convReference $ toList refs ) where -- Notes: -- * Some references do not contain a link to another entry. -- * Such links need to be annotated with '#'. convReference :: Reference -> Element convReference (Reference mRef tgt) = unode "ref" ( maybe [] (pure . uattr "target" . ('#':) . identToXMLId) mRef , tgt ) -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/Grammar.hs000066400000000000000000000071661526415265400253240ustar00rootroot00000000000000{- - Language/TEI/ToXML/Grammar.hs - convert grammar information to TEI XML (AST) - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert grammar annotations to TEI XML. -} module Language.TEI.ToXML.Grammar (convGrammar) where import Text.XML.Light import Data.NatLang.Grammar import Data.NatLang.Usage (Usage) import Language.TEI.Show.Grammar -- | Convert a list of grammar informations to a gramGrp element. -- If the list is empty, evaluates to `Nothing'. convGrammar :: [GrammarInfo] -> Maybe Element convGrammar [] = Nothing convGrammar gs = Just $ unode "gramGrp" $ concatMap convGrammarInfo gs -- Notes: -- * For collocates, follows the suggestion from TEI Lex-0 (however stick with -- ) [0]. -- * For POS collocates, a potential subtype is simply appended. -- * For Case collocates, the potential interrogative pronouns are prepended, -- in the same form they appear in the Ding. convGrammarInfo :: GrammarInfo -> [Element] convGrammarInfo (GramLexCategory gram) = convGramLexCat gram convGrammarInfo (Collocate colloc usgs) = pure $ convCollocate colloc usgs -- Note: It seems impossible to represent the present usage annotations -- (TODO). convCollocate :: Collocate -> [Usage] -> Element convCollocate (CollocCase iProns cas) _usgs = unode "colloc" $ "[" ++ prefix ++ "+ " ++ showCase cas ++ "]" where prefix = case iProns of [] -> "" (p:ps) -> p ++ concatMap (", " ++) ps convCollocate (CollocPOS pos) _usgs = unode "colloc" $ "[+ " ++ showPrimaryPOS pos ++ subType ++ "]" where subType = case pos of (Verb vTypes) -> concatMap ((' ':) . showVerbType) vTypes (Pronoun pTypes) -> concatMap ((' ':) . showPronounType) pTypes _ -> "" -- Note: Ignore potential singulare/plurale tantum attribute. -- - Does not occur in Ding version 1.9. convCollocate (CollocNumber number) _usgs = unode "colloc" $ "[+ " ++ showPrimaryNumber number ++ "]" convGramLexCat :: GramLexCategory -> [Element] convGramLexCat (PartOfSpeech pos) = convPOS pos convGramLexCat (Gender gen) = [unode "gen" (showGender gen)] convGramLexCat (Number num) = unode "number" (showPrimaryNumber num) : convNumberSubc num convGramLexCat (Case cas) = [unode "case" (showCase cas)] convPOS :: PartOfSpeech -> [Element] convPOS pos = unode "pos" (showPrimaryPOS pos) : case pos of (Verb vTypes) -> map (unode "subc" . showVerbType) vTypes (Pronoun pTypes) -> map (unode "subc" . showPronounType) pTypes _ -> [] convNumberSubc :: Number -> [Element] convNumberSubc (Singular True) = [unode "subc" shownSingulareTantum] convNumberSubc (Plural True) = [unode "subc" shownPluraleTantum] convNumberSubc _ = [] -- References: -- * [0] https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html#collocates -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/Header.hs000066400000000000000000000232111526415265400251130ustar00rootroot00000000000000{- - Language/TEI/ToXML/Header.hs - convert header to XML - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert the Ding header to TEI XML -} module Language.TEI.ToXML.Header (convHeader) where import Data.List (intercalate) import Text.XML.Light import qualified Config as Cfg import Data.NatLang.Language import Language.Ding.Syntax (Header(..)) import Language.TEI.ToXML.Aux -- Notes: -- * Whenever plain text co-occurs (on the same level) with other Content -- inside an element (e.g. "textzmore text"), one should -- use `mergeContent' on that list to avoid a pretty-printing like -- -- text -- z -- more text -- -- and instead cause everything to pe put in a single line. -- * For information on how the header should look like, see the FreeDict -- Wiki [0]. -- * See also: note on `unode' and `note' in ToXML/Body.hs. -- | Create a `ref' element with equal target and value. plainRefNode :: String -> Element plainRefNode tgt = unode "ref" (uattr "target" tgt, tgt) -- | Convert the Ding (!) header straight to TEI XML. -- A notable share of information is not extracted from the Ding header, -- but rather hardcoded, or configured in the `Config' module. This is -- because the Ding header requires a lot more information than the Ding -- header provides; further much of that information does only depend on this -- program. convHeader :: Header -> Language -> Language -> Int -> Element convHeader header srcLang tgtLang nHeadwords = teiHeader where ---------------------------------------------- -- Information extracted from the Ding header -- Note: -- * The headerLicense field is not used. Instead, the licensing -- information is hardcoded below, since the interaction with AGPL is -- non-trivial. dingVersion = headerVersion header dingDate = headerVersionDate header dingAuthor = headerCopyrightHolder header dingCopyrightPeriod = headerCopyrightPeriod header dingURL = headerURL header --------------------------------------- -- (Partly) non-structural information -- Contains information customary to this particular dictionary.. version = Cfg.makeVersion dingVersion Cfg.modVersion title = show srcLang ++ " - " ++ show tgtLang ++ " Ding/" ++ Cfg.projectName ++ " dictionary" availability :: Element availability = unode "availability" $ (,) [uattr "status" "free"] [ -- Copyright holders (Ding author & this program's contributors) unode "p" $ (++) "Copyright (C) " $ intercalate ", " $ map (\ (p, y) -> p ++ " " ++ y) $ (dingAuthor, dingCopyrightPeriod) : map (\ (p, y) -> (Cfg.personName p, y)) Cfg.contributors , -- License notice unode "p" $ mergeContent [ text $ unwords [ "This dictionary is free software: you can redistribute it" , "and/or modify it under the terms of both the " ] , Elem $ unode "ref" ( uattr "target" Cfg.gpl3url , "GNU General Public License, version 3 (GPLv3)" ) , text " and the " , Elem $ unode "ref" ( uattr "target" Cfg.agpl3url , "GNU Affero General Public License, version 3 (AGPLv3)" ) , text $ unwords [ ", where each of these licenses applies to different parts of" , "this (combined) work." ] ] , unode "p" $ unwords [ "This dictionary 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" , "and the" , "GNU Affero General Public License" , "for more details." ] , unode "p" $ mergeContent [ text $ unwords [ "You should have received a copy of both the" , "GNU General Public License" , "and the" , "GNU Affero General Public License" , "along with this dictionary. If not, see " ] , Elem $ plainRefNode "https://www.gnu.org/licenses/" , text "." ] , unode "p" $ mergeContent [ text $ unwords [ "The \"source form\", as defined in both the GPLv3 and AGPLv3," , "of this dictionary is composed of the original" , "Ding dictionary (licensed " ] , Elem $ unode "ref" (uattr "target" Cfg.gpl2url, "GPLv2") , text $ "+) and the " ++ Cfg.programName ++ " program (licensed AGPLv3+)." ] ] -- TODO: Add more notes (e.g., to provide an ontology -- for grammar keywords -- et al.). notesStmt :: Element notesStmt = unode "notesStmt" $ [ unode "note" (uattr "type" "status", Cfg.status) ] sourceDesc :: Element sourceDesc = unode "sourceDesc" [ unode "p" $ mergeContent [ text "Home: " , Elem $ unode "ptr" $ uattr "target" dingURL ] , unode "p" $ mergeContent [ text "This dictionary was generated from the " , Elem $ unode "ref" (uattr "target" dingURL, "Ding") , text $ " dictionary, version " ++ dingVersion ++ " (" ++ dingDate ++ ") using the " , Elem $ unode "ref" (uattr "target" Cfg.programURL, Cfg.programName) , text " program." ] , unode "p" $ mergeContent [ text "The Ding dictionary can be obtained from " , Elem $ plainRefNode Cfg.dingDownloadURL , text "." ] , unode "p" $ mergeContent [ text $ "The " ++ Cfg.programName ++ " program can be obtained from " , Elem $ plainRefNode Cfg.programDownloadURL , text "." ] ] projectDesc :: Element projectDesc = unode "projectDesc" $ unode "p" $ mergeContent [ text $ unwords [ "This dictionary comes to you through nice people making it" , "available for free and for good." , "It is part of the", Cfg.projectName, "project, " ] , Elem $ plainRefNode Cfg.projectURL , text $ unwords [ "." , "This project aims to make many translating dictionaries available" , "for free." , "Your contributions are welcome!" ] ] --------------------------------- -- Purely structural information -- Code that only reflects some (TEI/FreeDict) rules & converntions. teiHeader :: Element teiHeader = unode "teiHeader" $ (,) [xmlLangAttr "en"] $ fileDesc : encodingDesc : maybe [] pure revisionDesc fileDesc :: Element fileDesc = unode "fileDesc" [ titleStmt , editionStmt , unode "extent" $ show nHeadwords ++ " headwords" , publicationStmt , notesStmt , sourceDesc ] -- TODO: Use @xml:id and @ref for , as in eng-pol. titleStmt :: Element titleStmt = unode "titleStmt" [ unode "title" title , unode "author" dingAuthor , unode "editor" $ Cfg.personName Cfg.editor , unode "respStmt" [ unode "resp" "Maintainer" , unode "name" $ Cfg.personName Cfg.maintainer ] ] editionStmt :: Element editionStmt = unode "editionStmt" $ unode "edition" $ version publicationStmt :: Element publicationStmt = unode "publicationStmt" [ unode "publisher" Cfg.projectName , availability , unode "date" (uattr "when" Cfg.publicationDate, Cfg.publicationDate) , unode "pubPlace" $ unode "ref" Cfg.projectURL ] encodingDesc :: Element encodingDesc = unode "encodingDesc" projectDesc -- For reference, see eng-pol.tei and swh-eng.tei. revisionDesc :: Maybe Element revisionDesc | null Cfg.changes = Nothing | otherwise = Just $ unode "revisionDesc" $ map convChange Cfg.changes where convChange :: Cfg.Change -> Element convChange ch = unode "change" ( [ uattr "n" chVersion , uattr "when" $ date , uattr "who" $ unwords $ map (('#':) . Cfg.personId) $ Cfg.chPersons ch ] , unode "list" ( [uattr "type" "bulleted"] , ( unode "head" $ mergeContent $ [ text $ "Version " ++ chVersion ++ ", " , Elem $ unode "date" date , text ". Changes by " ] ++ nameList ++ [ text "." ] ) : map (unode "item") (Cfg.chItems ch) ) ) where chVersion = Cfg.makeVersion (Cfg.chDingVersion ch) (Cfg.chModVersion ch) date = Cfg.chDate ch nameList :: [Content] nameList = intercalate [text " and "] $ map (pure . Elem . unode "name" . Cfg.personName) $ Cfg.chPersons ch -- References -- * [0] https://github.com/freedict/fd-dictionaries/wiki/FreeDict-HOWTO-%E2%80%93-Writing-Text-Encoding-Initiative-XML-Files -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/Ident.hs000066400000000000000000000071241526415265400247730ustar00rootroot00000000000000{- - Language/TEI/ToXML/Ident.hs - encode xml:id's - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Convert identifiers to valid `@xml:id' values. -} module Language.TEI.ToXML.Ident ( identToXMLId ) where import Data.Char (ord) import Language.TEI.Syntax.Reference (Ident(Ident)) -- The syntax of XML id's is described in by the W3C's XML specification: -- * https://www.w3.org/TR/xmlschema-2/#ID | #NCName -- / https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#ID | #NCName -- * https://www.w3.org/TR/xml-names/#NT-NCName -- / https://www.w3.org/TR/2009/REC-xml-names-20091208/#NT-NCName -- > NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */ -- * https://www.w3.org/TR/xml/#NT-Name -- / https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name -- > Name ::= NameStartChar (NameChar)* -- * https://www.w3.org/TR/xml/#NT-NameStartChar | #NT-NameChar -- / http://www.w3.org/TR/2008/REC-xml-20081126/ -- * defines NameStartChar and NameChar -- * Deduce: NCNameStartChar and NCNameChar (- ':') -- | Translate an `Ident' to a legal @xml:id (NCName). -- The identifier's number is appended dot-separated to avoid ambiguity. identToXMLId :: Ident -> String identToXMLId (Ident s n) = encodeNCName s ++ '.' : show n -- Use '_' as escape char, since it is legal everywhere. encodeNCName :: String -> String encodeNCName "" = "_empty_" encodeNCName (c:cs) = encodeNCNameStartChar c ++ concatMap encodeNCNameChar cs encodeNCNameStartChar :: Char -> String encodeNCNameStartChar ' ' = "__" encodeNCNameStartChar c | isNCNameStartChar c && c /= '_' = pure c | otherwise = escapeChar c encodeNCNameChar :: Char -> String encodeNCNameChar ' ' = "__" encodeNCNameChar c | isNCNameChar c && c /= '_' = pure c | otherwise = escapeChar c escapeChar :: Char -> String escapeChar c = '_' : show (ord c) ++ "_" -- Treat `€' special to work around a libxml2 bug. -- - -- - Otherwise, `make validation' would fail. -- - TODO: Revert once bug fixed. isNCNameStartChar :: Char -> Bool isNCNameStartChar '€' = False isNCNameStartChar c = 'A' <= c && c <= 'Z' || c == '_' || 'a'<= c && c <= 'z' || '\xC0' <= c && c <= '\xD6' || '\xD8' <= c && c <= '\xF6' || '\xF8' <= c && c <= '\x2FF' || '\x370' <= c && c <= '\x37D' || '\x37F' <= c && c <= '\x1FFF' || '\x200C' <= c && c <= '\x200D' || '\x2070' <= c && c <= '\x218F' || '\x2C00' <= c && c <= '\x2FEF' || '\x3001' <= c && c <= '\xD7FF' || '\xF900' <= c && c <= '\xFDCF' || '\xFDF0' <= c && c <= '\xFFFD' || '\x10000' <= c && c <= '\xEFFFF' isNCNameChar :: Char -> Bool isNCNameChar c = isNCNameStartChar c || c == '-' || c == '.' || '0' <= c && c <= '9' || c == '\xB7' || '\x0300' <= c && c <= '\x036F' || '\x203F' <= c && c <= '\x2040' -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Language/TEI/ToXML/ValidateChar.hs000066400000000000000000000032061526415265400262540ustar00rootroot00000000000000{- - Language/TEI/ToXML/ValidateChar.hs - validate character data - - Copyright 2020 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - XML string validation as per the W3C XML specification - (). -} module Language.TEI.ToXML.ValidateChar ( validateString , validateChar ) where -- | Validate that a string is valid in XML, as defined at -- . -- Throws an error otherwise. validateString :: String -> String validateString = map validateChar -- | Validate that a character is valid in XML, as defined at -- . -- Throws an error otherwise. validateChar :: Char -> Char validateChar c = if c `elem` "\x9\xA\xD" || '\x20' <= c && c <= '\xD7FF' || '\xE000' <= c && c <= '\xFFFD' || '\x10000' <= c && c <= '\x10FFFF' then c else error $ "Invalid character in input: " ++ show c -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Main.hs000066400000000000000000000152461526415265400215110ustar00rootroot00000000000000{- - Main.hs - main program - - Copyright 2020-2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} module Main (main) where import Prelude hiding (log) import Control.Monad (when) import Data.Either (isRight) import Data.Maybe (fromMaybe, isNothing) import System.Environment (getArgs, getProgName) import System.Exit (exitSuccess, exitFailure) import System.IO (Handle, hPutStr, hPutStrLn, stdout, stderr) import App.Ding2TEI (ding2tei) import Language.Ding.AlexScanner (scan) import Language.Ding.Enrich (enrichUndirected, enrichDirected) import Language.Ding.Inverse (inverse) import Language.Ding.Parser (parse) import Language.TEI.ToXML (prettyTEI) import Language.TEI.ToXML.ValidateChar (validateString) -- Notes: -- * The input file should be newline terminated, even though in most cases -- it will not matter. -- * One might consider adding a final newline, if there is none. -- * Alex needs terminating whitespace, since the end of input is not -- treated as '\n' in right context (unlike the beginning of input). -- (The whitespace in right context is needed to differentiate different -- kinds of slashes.) -- * The input is checked for only containing valid XML characters -- (validateString). -- * This is not concerned with potentially to be escaped characters, such -- as '<', '"'. These are considered valid here. -- * There are only some very unusual characters that are not accepted in -- XML. -- * This is done here instead at the XML generation state to spot the -- error early. -- * The result would most likely be the same; the separators present in -- the Ding are all valid in XML. main :: IO () main = do (opts, mInFile, mOutFile) <- getArgs >>= parseArgs when (optPrintHelp opts) $ help stdout >> exitSuccess input <- readMFile mInFile -- TODO: validateString should not `error'. let (mDing, log) = parse $ scan $ validateString input (if optSkipErrors opts then printLog else printLogAbortOnError) (fromMaybe "" mInFile) log when (isNothing mDing) exitFailure -- If non-critical errors are to be skipped, they do not influence the return -- code. when (optParseOnly opts) exitSuccess ding <- maybe (undefined "Unable to parse input.") return mDing let ding' = enrichUndirected ding let ding'' = enrichDirected $ if optInverse opts then inverse ding else ding' let tei = ding2tei ding'' let outStr = prettyTEI tei writeMFile mOutFile outStr readMFile :: Maybe String -> IO String readMFile Nothing = getContents readMFile (Just fileName) = readFile fileName writeMFile :: Maybe String -> String -> IO () writeMFile Nothing = putStr writeMFile (Just fileName) = writeFile fileName -- | Write log up to and including first error message to stderr. -- Exit with nonzero return code in case of any error message. printLogAbortOnError :: String -> [Either String String] -> IO () printLogAbortOnError inFile log = do let (good, afterGood) = span isRight log printLog inFile good case afterGood of (e:_) -> printLog inFile (pure e) >> exitFailure [] -> return () -- | Write log to stderr. printLog :: String -> [Either String String] -> IO () printLog inFile log = hPutStr stderr $ unlines $ map (either (errorPrefix ++) (infoPrefix ++)) log where errorPrefix = "Error: " ++ commonPrefix infoPrefix = "Info: " ++ commonPrefix commonPrefix = inFile ++ ": " data Opts = Opts { optInverse :: Bool , optParseOnly :: Bool , optSkipErrors :: Bool , optPrintHelp :: Bool } defaultOpts :: Opts defaultOpts = Opts { optInverse = False , optParseOnly = False , optSkipErrors = False , optPrintHelp = False } parseArgs :: [String] -> IO (Opts, Maybe String, Maybe String) parseArgs = either (\e -> hPutStrLn stderr e >> help stderr >> exitFailure) return . parseArgs' parseArgs' :: [String] -> Either String (Opts, Maybe String, Maybe String) parseArgs' allArgs = do (opts, fileNames) <- aux defaultOpts allArgs case fileNames of [] -> return (opts, Nothing, Nothing) [inFile] -> return (opts, maybeFilename inFile, Nothing) [inFile, outFile] -> if optParseOnly opts then fail "Too many non-option arguments." else return (opts, maybeFilename inFile, maybeFilename outFile) _ -> Left "Too many non-option arguments." where aux :: Opts -> [String] -> Either String (Opts, [String]) aux opts [] = return (opts, []) aux opts ("--" : args) = return (opts, args) aux opts ("-i" : args) = aux (opts { optInverse = True }) args aux opts ("--inverse" : args) = aux (opts { optInverse = True }) args aux opts ("--parse-only" : args) = aux (opts { optParseOnly = True }) args aux opts ("--skip-errors" : args) = aux (opts { optSkipErrors = True }) args aux opts ("--validate" : args) = aux (opts { optParseOnly = True, optSkipErrors = True }) args aux opts ("-h" : args) = aux (opts { optPrintHelp = True }) args aux opts ("--help" : args) = aux (opts { optPrintHelp = True }) args aux _ (o@('-':_:_) : _ ) = Left $ "Invalid option `" ++ o ++ "'." aux opts (str : args) = (fmap . fmap) (str :) $ aux opts args maybeFilename :: String -> Maybe String maybeFilename "-" = Nothing maybeFilename str = Just str help :: Handle -> IO () help h = do progName <- getProgName hPutStr h $ unlines [ "Usage: " ++ progName ++ " [OPTION]... [INFILE [OUTFILE]]" , "" , "When INFILE or OUTFILE is missing or `-', use standard input or output," , "respectively." , "" , " -i, --inverse Invert dictionary direction." , " --parse-only Only parse the input, do not produce output." , " --skip-errors Continue on errors where possible." , " --validate Equivalent to `--parse-only --skip-errors'." , " -h, --help Print this help message and exit." ] -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/Test.hs000066400000000000000000000051341526415265400215370ustar00rootroot00000000000000{- - Test.hs - manual testing - - Copyright 2020,2022 Einhard Leichtfuß - - This file is part of ding2tei-haskell. - - ding2tei-haskell is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ding2tei-haskell 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with ding2tei-haskell. If not, see . -} {-| - Manual testing. No function exported. To be used in `ghci' exclusively. - - Re-exports many data structures and functions. -} module Test () where import Control.Monad.Trans.Writer (runWriterT) import App.Ding2TEI import Data.NatLang.Dictionary import Data.NatLang.Grammar import Language.Ding.AlexScanner (scan) import Language.Ding.Parser (parse) import Language.Ding.Parser.Header (parseHeader) import qualified Language.Ding.Parser.Line as LP (parseLine) import Language.Ding.Pretty import Language.Ding.Syntax import Language.Ding.Token import Language.Ding.Enrich import Language.TEI.Syntax import Language.TEI.ToXML parseLine :: [Token] -> Line parseLine ts = case runWriterT $ LP.parseLine ts of Right (l, log) -> l Left e -> error e header :: String header = unlines [ "# Version :: 0.1 1970-01-01" , "# Copyright (c) :: Jane Doe," , "# 1970" , "# License :: GPL Version 2 or later; GNU General Public License" , "# URL :: https://example.org/" ] -- | Some example lines; all except the first from -- . examples :: [String] examples = [ unwords [ "Bäckerin {f}; Bäcker {m} | Bäckerei {f}; Backstube {f}" , ":: baker | bakery\n" ] , unwords [ "Wetter {n}; Witterung {f} | Witterungen {pl} | bei jeder Witterung;" , "bei jedem Wetter :: weather | weathers | in all weathers\n" ] -- Outdated syntax: --unlines -- [ "Wetter {n}; Witterung {f} :: weather" -- , " Witterungen {pl} :: weathers" -- , " bei jeder Witterung; bei jedem Wetter :: in all weathers" -- ] , "Whist {n} (Kartenspiel) :: whist\n" , unwords [ "(Schaden; Mangel) beheben; (Missstand) abstellen; abhelfen;" , "in Ordnung bringen :: to remedy \n" ] ] -- vi: ft=haskell ts=2 sw=2 et tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/000077500000000000000000000000001526415265400224465ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/000077500000000000000000000000001526415265400234365ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/README000066400000000000000000000040171526415265400243200ustar00rootroot00000000000000README ====== This directory contains preprocessor scripts, written in sed. They should be applied before running the main program. About ----- The scripts are used to fix some irregularities before handling processing to the main translating program. Generally, only irregularities that are assumed as mistakes are fixed. Targeted at the German-English Ding dictionary, version 1.9. Called with `sed -E' (see Shebang); i.e., extended regular expressions are used. Updates ------- When updating to a new Ding version, `update_help.bash' should be used. See there for more information. Conventions ----------- * Use the g (global) specifier, for anything that seems likely to possibly occur elsewhere, even if it does not. There might always be added another occurrence in a later version and `g' does not cost much. * Be as generic as possible and as specific as necessary. * Do not overgeneralize (e.g., "(n)" -> "{n}"). There may be legitimate uses of apparent misspellings / bad syntax. * Ex.: "to proffer sb. sth. /sth. to sb." -> "... sb. sth. / sth. to sb." * Bad: "sb. /sth." -> "sb./sth." (when generalized). * Use groups (<()>) and back-references (<\$i>). * Use <`> as separator to avoid the necessity to escape (/). * Use "\<" and "\>" where applicable. * On changes of this script, diff the result with the former result to check for erronous replacing. This is usually doable in time. * When changing to another Ding version, review the diff (!) and check for new irregularities (optional). * Ideally, when grouping (using parentheses), group in an understandable, rather than an efficient way. * Ex.: "s`\<(to take)/ (to carry out) (a measure)`\1 / \2 \3`g" * Groups 2 and 3 could be merged. Helpful tools ------------- * Regexes (grep/$EDITOR/less) to find common mistakes * e.g.: '\([^{]{0,10}\b(adj|adv|prp|n|m|f|...)\b' to find misusage of parantheses (instead of braces). * util/extract_braceexps.sed * Analyze the output to find any irregular brace expression. tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/abbreviations.sed000077500000000000000000000034611526415265400267720ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/abbreviations.sed - //-abbreviations # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * Syntax breaking slashes are fixed in slashes.sed. ## "." -> /./ s`"(/\.ed)"`/ \1 /` ## [abbr .] -> /./ # Found by searching for "Abk" and "abbr". # - Note: All fixed in version 1.9; kept nonetheless. s`\[(Abk|abbr)\.: ([A-Za-z.-]+)\]`/\2/`g s`\((Abk|abbr)\.: ([A-Za-z.-]+)\)`/\2/`g s`, (Abk|abbr)\.: ([A-Za-z.]+)\)`) /\2/`g ## (.) -> /./ # - Note: This alters semantics (TODO?). # See also `slashes.sed'. s`\<(secondary hyperparathyroidism) /(SHPT)/ \((2-HPT)\)`\1 /\2/ /\3/` s`\<(tertiary hyperparathyroidism) /(THPT)/ \((3-HPT)\)`\1 /\2/ /\3/` ## Misc # <,> -> <.> s`\<(signed) /(sgd),/`\1 /\2./`g # Remove {}; guessing a little here. s`/in \{prp\} \./`/in prp./`g # Qustionably placed: 'A; B /a; b/' -> 'A /a/; B /b/' s`^(der Ältere)\; (Senior) /(d\. Ä\.); (Sen\.)/`\1 /\3/\; \2 /\4/` # [.] -> /[.]/ s`(^|:: *)(\[sic\])`\1/\2/`g # This one is repeated, so possibly not a typo. s`(supervised injection site) /SIS/Ms`\1s /SIS/s` s`/SIS/M\>`/SIS/`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/additions.sed000077500000000000000000000016211526415265400261140ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/additions.sed - add information # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ## Missing entries s`^(Betracht .*) :: *\|`\1 :: consideration |` # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/all.bash000077500000000000000000000027041526415265400250530ustar00rootroot00000000000000#!/usr/bin/env bash # # preprocessed/de-en/all.bash - run all preprocessing scripts, in correct # order # # Copyright 2020,2022 Einhard Leichtfuß, 2021 the FreeDict project # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # The Ding source is highly irregular. The preprocessing steps help to keep # the parser clean by transforming irregularities to a more regular markup. # # See also: # * src/preprocess/de-en/README # * src/preprocess/de-en/update_help.bash dir="$(dirname "$(realpath "$0")")" cd "$dir" source ./order.conf.bash || exit 1 sedfiles_ordered_escaped=( "${sedfiles_ordered[@]@Q}" ) sedfiles_ordered_piped="${sedfiles_ordered_escaped[*]/#/| ./}" sedfiles_ordered_piped="${sedfiles_ordered_piped#| }" eval "$sedfiles_ordered_piped" # vi: ts=2 sw=2 noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/alter.sed000077500000000000000000000027641526415265400252560ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/alter.sed - syntax alterations # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # {relativ} is not an indpendent annotation. # Assimilate, with {pron interrog} in mind. # Note: It can be assumed that both below parts never occcur in (separate) # groups when belonging to one another (since then their relation would # not be obvious). s`\{(pron)\} *\{(relativ)\}`\{\1 \2\}`g # New in version 1.9 (rare); change to old syntax (see also above). s`\{(relativ)\.(pron)\}`{\2 \1}`g # Adapt grammar information in {+ X} to match the usual syntax for X. s`\{\+ *(Zahl|number)}`{+num}`g s`\{\+ *verb}`{+v}`g s`\{\+ *(Einzahl|singular)\}`{+sing}`g # Not actually alteration of syntax, but of content to fit syntax. s`\<(R/S ratio) >(1)\>`\1 > \2`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/drop.sed000077500000000000000000000023631526415265400251060ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # de-en/drop.sed - drop some information that cannot be properly parsed yet # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # s`\{(adj), usually not used before a noun\}`{\1}` s`\{(prp)\; \+ Fall des jeweiligen Bezugsworts\}`{\1}` s`\{(\+Gen\.)/(bei|von etw\.)\}`{\1}`g s`\{(prp\; \+Dat\.) / von jdm\./etw\.\}`{\1}` s` *\{Quantifikator\}``g # TEI does not specify an element for degree of comparison. s` *\{\+ *(Superlativ|superlative)\}``g # This should probably become [prp +] s` *\{prp *\+\}``g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/grammar.sed000077500000000000000000000043371526415265400255730ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/grammar.sed - fix errors in grammar annotations # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ### Semantic errors # Wrong pos annotation s`\<(makrohumiphag) \{m\} (\[zool\.\])`\1 \{adj\} \2` # - (de); translates to "macrohumiphagous" (en), which is an adjective # - source: https://doi.org/10.1016/0378-1127(95)03580-4 ### Syntactic errors ## () -> {} # Note: There are likely more of this kind. s`\<(Felge|Glanzleinwand) \(f\)`\1 {f}`g s`\<(Futterkattun) \(m\)`\1 {m}`g s`\<(Normalnull) \(n\)`\1 {n}`g s`\(adv\)`{adv}`g # See also: alter.sed s`\{pron\} \(relativ\)`{pron} {relativ}`g s`\(\+ *(Gen|Akk|Dat)\.?\)`\{+\1.\}`g s`\{prep\}`{prp}`g ## [] -> {} (and nomalization) s`\[kein Plural\]`\{no pl\}`g # Note: {no sing} never occurs, it is infered from {no pl} and {sing}. s`\[only plural\]`{no sing}`g s`\[no singular\]`{no sing}`g ## Superfluous <.>. s`\{(adv)\.\}`{\1}`g ## (.) {.} -> (. {.}) s`\((sich)\) \{(Dat\.)\} (die Sonnenenergie nutzbar machen)\>`(\1 {\2}) \3`g ## {.} . -> . {.} s`:: (\{adv\}) (idiosyncratically)$`:: \2 \1` s`:: (\{adj\}) (conflicting)\;`:: \2 \1\;` ## <+> outside {.} s`\{prp\} \+ (which/what)\; \1 \+ \{prp\}`{prp +} \1; \1 {+ prp}`g ## Consistent spacing and "dotting". # Note: This could also be delegated to the parser. Doing it here simplifies # matching keywords at the lexer stage, since '+' and '.' can be # considered part of the (unique) keyword. s`\{\+ *(Gen|Akk|Dat)\.?\}`\{+\1.\}`g s`\{\+ *(conj)\}`{+conj}`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/inflected_forms.sed000077500000000000000000000045131526415265400273040ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/inflected_forms.sed # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ### Annotated inflected forms (on the English side) ## Incorrect syntax and semantics. # See . s`\{(strove), (striven) / (strived)\; (strived)\}`\{\1, \3\; \2, \4, \1 [coll.]\}` # See . s`\{(stank)/(stunk), (stunk)\}`{\1, \2; \3}`g ## -> <,> (normalize inner separator) s`\{(chided)/(chid)\; (chided)/(chidden)/(chid\})`\{\1, \2\; \3, \4, \5\}`g s`\{(got)\; (got)/(gotten \[Am\.\])\}`\{\1\; \2, \3\}`g s`\{(outshined)/(outshone)\; (outshined)/(outshone)\}`\{\1, \2\; \3, \4\}`g s`\{(leaped)/(leapt)\; (leaped)/(leapt)\}`{\1, \2\; \3, \4}`g s`\{(smelled) / (smelt \[Br\.\])\; (smelled) / (smelt \[Br\.\])\}`{\1, \2\; \3, \4}`g s`\{(learned) / (learnt \[Br\.\])\; (learned) / (learnt \[Br\.\])\}`{\1, \2\; \3, \4}`g s`\{(staved)/(stove)\; (staved)/(stove)\}`{\1, \2\; \3, \4}`g s`\{(swung) / (swang \[obs\.\]); (swung)\}`{\1, \2\; \3}`g s`\{(struck)\; (struck) / (stricken \[Am\.\])\}`{\1\; \2, \3}`g s`\{(girded)/(girt); (girded)/(girt)\}`{\1, \2\; \3, \4}`g ## Alternative form in parantheses instead of separated by comma s`\{(swung) \((swang \[obs\.\])\)\; (swung)\}`\{\1, \2\; \3\}`g # Do not allow multiple conjugation annotations. # In this particular case it is also unclear (from the syntax only), which # forms the [archaic]-annotation applies to. s`\{(work)\; (worked)\} \{(wrought)\; (wrought) (\[archaic\])\}`\{\1, \3 \5; \2, \4 \5\}` ## Double }}. s`(chid)\}\}`\1\}` # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/misc.sed000077500000000000000000000175001526415265400250740ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/misc.sed - fix some irregularities in the Ding source # # Copyright 2020-2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ## Abbreviations missing terminal <.> # Exclude "so" ~ "so.", since it may very well not be an abbreviation. s`\<(etw|jm?d[mns]?|sth|sb)\>($|[^.])`\1.\2`g ## Misplaced {}-annotations s`(\(Kfz:) \{n\} (/AND/\))`\1 \2` ## <...> s`< (\[mus\.\]) >`\1`g # The only "<>"-annotation syntactically clearly on a unit level. # Since semantically wrong, fix as follows. # See https://en.wiktionary.org/wiki/delt // 2020-09-06 20:39:00 CEST s`\<(to deal) \{(dealt)\; (dealt)\} <(delt)>`\1 {\2; \3, \4 [archaic]}`g # There is one single occurence of an `s' after "<>". I see no reason for it. # Also, the first english form should be in plural, too. s`\<(Atomforscher \{pl\}\; Atomforscherinnen \{pl\}) :: (.*) \| (atomic scientist) <(nuclear scientist)>s$`\1 :: \2 \| \3s <\4s>` # Superfluous space. s`\<(Türeinfassung \{f\} \[constr\.\]) <(Futterrahmen) >`\1 <\2>` ## Syntax-breaking typos (excl. slashes) # Missing "<" s` (Bucuresti)>` <\1>`g # "->" -> "~" s`\((superlative of) -> (level)\)`(\1 ~\2)`g ## [.] -> / # Note: Information on predominance is lost. # TODO: reconsider s`\<(table) \[(tabular)\] (spar)`\1/\2 \3`g s`\<(progressive) \[(prograde)\]`\1/\2`g s`\<(spheroidal) (jointing) \[(parting)\]`\1 \2/\3`g s`\<(axial) \[(optic)\] (angle)`\1/\2 \3`g s`\<(tight) \[(close)\] (sand)`\1/\2 \3`g # TODO: This is now really ugly. s`\<(post) \[(nach|after)\]`\1/\2`g s`\<(scrivere) \[(schreiben|writing)\]`\1/\2`g ## [.] -> (.) # Optional words. Information is lost. # TODO: Consider to encode differently, e.g. [[]]. s`\<(eine Schar) \[(Personen)\]`\1 (\2)`g s`\<(a clutch of) \[(persons)\]`\1 (\2)`g # Unsure; possibly better translated to a slashed alternative. s`\<(Brazilian) \[(optical)\] (pebble)\>`\1 (\2) \3`g s`\<(to guzzle sth\.) \[(drink)\]`\1 (\2)`g s`\<(to stitch) \[(book)\]`\1 (\2)`g # Description. Should become a . s`\<(Sauerkohl \{m\}) \[(in einigen Regionen alternativer Begriff zu Sauerkraut)\]`\1 (\2)`g s`\<(listicle) \[(list \+ article)\]`\1 (\2)`g s`\<(eine Portion) \[(Mengenangabe)\]`\1 (\2)`g ## Empty () s`\<(pathologische Abteilung \[med\.\]) \(\)`\1` ## Superfluous <;> # - Note: Fixed in version 1.9; keep nonetheless. s`\; *$`` ## Smileys # Note: There is exactly one smiley. Make it fit the expected syntax. # (TODO/CONSIDER: alter expected syntax.) s`/(:-\))/`/ \1 /`g # This is not a smiley. Possibly an alteration of syntax though. s`\(@\)`/ @ /`g ## Mixed # Superfluous semicolon; enrichment. s`\<(note)\;\; (/N\.B\.\; NB/)`\1; nota bene [archaic] \2` ## Missing <;> s`(Beide Schriftstücke sind online verfügbar\.) (Diese Schriftstücke sind beide online verfügbar\.)`\1; \2` ## Misc syntax errors s`:: <> \|`:: |`g ## Further seemingly incorrect entries (TODO): # - Note: most from version 1.8.1. #ein gutes Blatt haben {n} -- {} applies to part #Freier, der den Autostrich abfährt {m} -- {} applies to whole / first part #solange sie die Stelle innehat {n} -- {} applies to ? #Bouquet garni {n} cook -- [cook.] ? #Bemühen, das Gleiche zu erreichen {m} -- {} applies to ? #einen Unterhaltspfleger bestellen {m} -- {} applies to part # - alternative: disallow {} when refering to part of sentence (remove) #eine Sache, die Probleme bereitet / Rätsel aufgibt {n} -- ? # - article ("eine") uncommon # - {n} refers to "Rätsel" ? #den Strom abschalten/ausschalten {pl} -- ? #äbtlich {m} -- ? #auktorial {n} #eine Auskunft / Auskünfte einholen {n} #bizarr {m} #deckungsgleich sein {f} #diese {pl} # - first pl annotation on a non noun #englandfreundlich {f} #derjenige, der die Sache herausgibt {m} -- whole #entomogamen {pl} #etw. jodoformieren {n} #leistungsgerecht {m} #gut/schlecht schlafen {f} # - use the somehow ? # - {f} misplaced #neapolitanisch {n} #spiegelbildgleich {m} # ... (TODO: search from here) #obszön; verrucht, schlüpfrig; aufreizend {adj} :: raunchy # - comma -> semicolon ? #to write <> off sb./sth. #auf das Angebot/die Zusage/den Vorschlag von jdm. eingehen #etw./jdn. einführen; einweisen {vt} (in etw.) # - does the prefix apply to both? #guaranteed free from / of sth # - should be a strong '/' #jdn deputieren, etw. zu tun # - parentheses ? # - generalize in parser ? #(+ Gen/von etw.) #(in Fragen + Gen) #as at + date #lest + subjunctive #(+ {adj}) #(+ comparative adjective) #as a matter of fact + do; actually + do #(+ singluar) #{+ conj} #(+ Substantiv im Plural) # ... (/+ /) #<"> # - literally, not a single quote #eines Baukörpers/einer Maschine #to take out/take down #andere/r/s # - et al. #frühere(r/s) # - et al. #to chide {chided, chid; chided, chidden, chid} sb. # - infix grammar annotations (for a simple verb; i.e. not in a phrase) #"Are you a good singer/player?', 'I do moderately well.' # - <"> or <'> # ? general: allow both? # . <"> seems more frequent. #(von Pilcher / Werktitel) ... :: ... (by Pilcher / work title) # - frequent (with differing authors) #Delegation {+Gen./bei} #:) #/A/cs/ #/Hg(CNO)2/ (Sprengstoff); # - parsing question #/sw, s/w/ .* /B&W, b&w, B/W/ #Ver­brau­cher­zen­t­ra­le {f} [tm] :: consumer advice centre [Br.] # - a bunch of \u00AD contained (soft hyphens) # - Could be used to infer hyphenation. # - [] #eine Abschrift beglaubigen {vt} [adm.] :: to certify; to attest; to exemplify [Am.] a copy # ? prefixes in ()? # ? During enrichment: Decuduce from {vt} or "to", that something is a collocate #(formal) #to get (oneself; sth.) to safety #scanning | scanne$ #/s. and s.c./ #leise; ruhig; still {adj} | leiser; ruhiger; stiller | am leisesten; am ruhigsten; am stillsten #name-dropping > > #das Grundgesetz -- article #Stahlpreisanstieg {m}; erhöhunh {f} :: increase in steel price; in the price of steel # Hard to identify collocations (the part after the parens) # pressure (on sb.) to adapt/adjust # to mumble (away) to oneself # Infer participle information # kollokieren; nebeneinanderstehen {vi} [ling.] | kollokierend; nebeneinanderstehend | kollokiert; nebeneinandergestanden :: to collocate | collocating | collocated # <-> - annotations (<-> likely always surrounded by whitespace) # PS (lat. Postskriptum - post [nach] + scrivere [schreiben]) :: ps (Lat. postscript - post [after] + scrivere [writing]) # Racist. TODO: Consider to annotate somehow. #'Zehn kleine Negerlein'; 'Und dann gab's keines mehr' (von Christie / Werktitel) [lit.] :: 'Ten Little Niggers'; 'And Then There Were None' (by Christie / work title) # Found when searching for units that contain a /./-expression: # Gesellschaft (des) bürgerlichen Rechts /GbR/; /GdbR/, BGB-Gesellschaft # emergency medical treatment room; emergency room [Am.] /e.r./; /ER/ # - questionable # Saint ...; /St/ [Br.]; /St./ [Am.] # - questionable # cash with order /CWO/; /c.w.o./; cash in advance /CIA/ # ante meridiem /a.m./; /am/ # later; later on; /L8R/ [comp.] # TODO: - '([A-Za-z]+ ){2}\{(m|f|n)\} *(\;|\|)' # - find badly located {}-annotations # - slashes (e.g. "er/sie hat/hatte bekommen") # - /+ *(Gen|Dat|Akk)/ # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/order.conf.bash000066400000000000000000000003101526415265400263260ustar00rootroot00000000000000typeset -ra sedfiles_ordered=( typos.sed grammar.sed inflected_forms.sed usage.sed usage_debatable.sed slashes.sed abbreviations.sed misc.sed quotes.sed additions.sed alter.sed drop.sed ) tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/quotes.sed000077500000000000000000000033741526415265400254650ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/quotes.sed - regularize quotes # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ## Quotes # Notes: # * There is no clear distinction between single <'> and double <"> quotes. # Sometimes they are even used together (e.g. <"abc'>). # * TODO: It might be necessary to identify them. # * When revising this file for version 1.9, I got the impression that <'> # is the standard on the English side, while <„> and <“> are standard on # the German side. # * Sometimes (almost always?) '„“' is used on the german side # (e.g., „So für den Hausgebrauch“). # - Apparently new convention in version 1.9. # * Try to infer the "correct" quote variant from the surrounding. # * <"> may also be used as abbreviation for the unit inch. # * <'> may also be used in other contexts (e.g., , ). # * Usage as apostroph is quite frequent. s`"(Are you a good singer/player\?)'`'\1'` s`'(Pay per click)"`'\1'`g s`"(The Loyal Subject)'`'\1'`g s`"(The Hunchback of Notre-Dame), (1831)`"\1", \2`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/slashes.sed000077500000000000000000000217651526415265400256130ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/slashes.sed - fix wrong spacing around slahes # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * See doc/syntax.slashes. # * TODO: Consider to generalize a few and in particular also catch wrongly # placed weak/strong slashes. # * TODO: Order this somehow. s`\((bei etw\.)/ (gegenüber etw\.)\)`(\1 / \2)`g s`\((in sth\.)/ (from sth\.)\)`(\1 / \2)`g s`\((von etw\.)/ (zu etw\.)\)`(\1 / \2)`g s`\((of sth\.)/(for sth\.)\)`(\1 / \2)`g s`\((eines) (Arguments)/ (Vorgehens) (usw\.)\)`(\1 \2/\3 \4)`g s`\((of a) (place)/ (situation)\)`(\1 \2/\3)`g s`(Kein) / (Keine) (\[Ös\.\] Ausschank)`\1/\2 \3`g s`\<(visual tree assessment) /(VTA) /`\1 /\2/` s`\<(this order/custom\.)/ (You have)\>`\1 / \2` s`/MFM$`&/` s`\<(to understand) /(recognise/grasp the)`\1/\2` s`\<(Kreuzschritt \{m\} vor)/ (zurück)\>`\1/\2` s`\<(on) (sb\.)/ (sth\.)`\1 \2/\3`g s`\<(centre \[Br\.\])/ (center \[Am\.\])`\1/\2`g s`\<(center \[Am\.\]) /(centre \[Br\.\])`\1/\2`g s`\<(easing) /(reduction) (in)\>`\1/\2 \3`g s`\<(Geräte \{pl\}) /(Ausrüstung \{f\})`\1/\2`g # TODO: generalize? s`\<(to) (approach)/ (consider)\>`\1 \2/\3`g s`\<(governor) (/Gov\./s)\>`\1s \2`g s`\<(mit jdm\.)/ (mit etw\.)`\1 / \2`g s`\<(with sb\.)/ (in sth\.)`\1 / \2`g s`(\(Plectranthus coleoides/forsteri)/ (glabratus\))`\1/\2` s`\<(timber \[Br\.\])/ (lumber \[Am\.\])`\1/\2`g s`\<(zurückbekommen)/ (zurückerhalten)\>`\1/\2`g s`\<(of sth\.)/ (in )`\1 / \2`g s`\<(fibre \[Br\.\])/ (fiber \[Am\.\])`\1/\2`g s`\<(skivvy \[Br\.\])/ (slave)`\1/\2`g s`\<(armoured \[Br\.\])/ (armored \[Am\.\])`\1/\2`g s`\<(to take)/ (to carry out) (a measure)\>`\1 / \2 \3`g s`\<(action for possession \[Br\.\])/ (action of eviction \[Am\.\])`\1 / \2`g s`\<(text-book example of how)/ (an object lesson in how)\>`\1 / \2`g s`\<(photovoltaics) /(PV)\; (solar)\>`\1 /\2/\; \3` s`\<(jdn\.)/ (etw\.)`\1/\2`g s`\<(Mehrzweckeinsatzstock \{m\}) /(MES) /`\1 /\2/`g s`\((of) /(showing sth\.)\)`(\1 / \2)`g s`\<(and don't get into mischief) /(and keep out of mischief)\>`\1 / \2`g s`\<(limitation) /(lapse) (of time)\>`\1/\2 \3`g s`\<(Abschluss \{m\}) / (Abschließen \{n\})`\1/\2`g s`\<(wind power unit) / (WPU)/`\1 /\2/`g s`\<(in) (Bestzustand) /(1a-Zustand)\>`\1 \2/\3`g s`\<(to hold the floor)/ (to address the meeting)\>`\1 / \2`g s`\<(balsam)/ (myrobalan)\>`\1/\2`g s`\<(Zeitungen) /(Zeitschriften)\>`\1/\2`g s`\<(are at a critical juncture)/ (have reached a critical juncture)\>`\1 / \2` s`\((of sb\.)/ (of), (from) (sth\.)\)`(\1 / \2/\3 \4)`g s`\<(set up) /(discontinue)\>`\1 / \2`g s`\<(als etw\.)/(zugunsten von jdm\.)`\1 / \2`g s`\<(as sb\.)/ (in favour of sb\.)`\1 / \2`g s`\<(gun) /(missile)\>`\1/\2`g s`\<(into sth\.)/ (into doing sth\.)`\1 / \2`g s`\<(to proffer) (sb\. sth\.) /(sth\. to sb\.)`\1 \2 / \3`g s`\<(of) (sb\.)/ (sth\.)`\1 \2/\3`g s`\<(für jdn\.)/ (als) jd\.`\1 / \2 jdn.`g s`\<(interpreted)/ (understood)\>`\1/\2`g s`\<(in favour) (of)/ (against) (sth\.)`\1 \2/\3 \4`g s`\<(on/upon/against) (sb\.)/ (sth\.)`\1 \2/\3`g s`\<(etwas zu bedeuten haben)/ (etwas bedeuten)\>`\1 / \2`g s`\<(sth\.)/ (doing sth\.)`\1 / \2`g s`\<(einen Ort entlang) /(durch einen Ort)\>`\1 / \2`g s`\<(about sth\.)/ (for doing sth\.)`\1 / \2`g s`\<(shop \[Br\.\]) /(store \[Am\.\])`\1/\2`g s`\<(von etw\.)/ (gegen etw\.)`\1 / \2`g s`\<(in die) (Normalform)/(kanonische Form)/? (gebracht|bringend?)\>`\1 \2 / \3 \4`g s`\<(zerwuzelt \[Ös\.\])/ (einen Schranz in den Bauch gelacht)\>`\1 / \2`g s`\<(look after)/ (take care of)\>`\1 / \2`g s`\<(zu) (bedienen)/ (handhaben) (sein)\>`\1 \2/\3 \4`g s`\<(home economics)/ (family and consumer sciences)\>`\1 / \2`g s`\<(to sth\.)/ (to do sth\.)`\1 / \2`g s`\<(renovieren)/ (erneuern)`\1/\2`g s`\<(take on) /(lay off)\>`\1 / \2`g s`(sb\.)/ (in)`\1 / \2`g # Note that there is a meaning in the different spacing, which is dropped here. s`\<(tangled up)/(entangled)/ (snarled up)/(ensnared)`\1 / \2 / \3 / \4`g s`\<(zum Erfolg)/ (zu seinem Glück)\>`\1 / \2`g s`\<(to enable) (sb\.)/ (sth\.)`\1 \2/\3`g s`\<(to transmogrify) (sb\.)/(sth\.)/ (into sth\.)`\1 \2/\3 / \4`g s`\<(wenn/wiewohl es schon lange her ist\.) /(wenn es auch schon lange her ist\.)`\1 / \2`g s`\<(threw) /(set) (back)\>`\1/\2 \3`g s`\<(attached)/ (screwed on)\.`\1 / \2.`g s`\((Kfz:) /([A-Z]+)\)`(\1 /\2/)`g s`\<(Rutherfordium)/ (Kurtschatovium)\>`\1/\2`g # Note: Cake is distinct from biscuit, thus the -repetition is deemed ok. # - The -repetition, however, is deemed too much. s`\<(the biscuit \[Br\.\])/ ?(the cake \[Am\.\])`\1 / \2`g s`\<(really) (takes) (the biscuit \[Br\.\]) / \2 (the cake \[Am\.\])`\1 \2 \3 / \4`g s`\((by Pilcher)/ (work title)\)`(\1 / \2)`g s`\<(Mikro…)(/µ/)`\1 \2` s`/I/O/`/ I/O /`g s`/a/s/l\?/`/ a/s/l? /`g s`\<(diameter for fixing the disc \[Br\.\])/ (disk \[Am\.\] to the brackets)\>`\1/\2` s`\<(to make a run on the shops \[Br\.\]) /(stores \[Am\.\] \[fig\.\])`\1/\2` s`\<(receivables) / (Rec\.)/`\1 /\2/` s`\<(mit jdm\./etw\.)/ (zwischen jdm\./etw\.)`\1 / \2`g s`\<(necessary) (adaptations) /(adjustments)\>`\1 \2/\3`g s`\<(an etw\.)/ (bei etw\.)`\1 / \2`g s`\<(by sth\.)/ (by saying/doing sth\.)`\1 / \2`g s`\<(bei einer) (Versteigerung)/ (Ausschreibung)\>`\1 \2/\3`g s`\<(in an auction) /(in a call for tender)`\1 / \2`g s`\<((in|of) the) (estate \[Br\.\])/ (inheritance \[Am\.\])`\1 \3/\4`g s`\<(about sb\./sth\.) /(for sb\./sth\.)`\1 / \2`g s`\<(to) (issue)/(establish)/ (open) (a credit)\>`\1 \2/\3/\4 \5`g s`(knit) / (knitted) / (knit-wool) (pullover) / (jumper \[Br\.\])/ (jersey \[Br\.\])/(sweater \[Am\.\])`\1/\2/\3 \4/\5/\6/\7` s`\<(zu etw\.)/ (in Bezug auf eine Sache)\>`\1 / \2`g s`\<(one) (could) / (may) /(might) (be)\>`\1 \2/\3/\4 \5`g s`\<(mit jdm\.) /(bei etw\.)`\1 / \2`g s`\<(zwischen jdm\.) /(unter jdm\.)`\1 / \2`g s`^(jdn\.) /(etw\.)`\1/\2` s`\<(This can) (achieve) /(accomplish) (a lot)\>`\1 \2/\3 \4`g s`\<(I/he/she/it) (smelled) / (smelt \[Br\.\])`\1 \2/\3`g s`\<(he/she has/had) (smelled) / (smelt \[Br\.\])`\1 \2/\3`g s`\<(descend) (on) /(upon) (sth\.)`\1 \2/\3 \4`g s`\<(jdm\.) (einen Fußtritt) /(Tritte) (versetzen)\>`\1 \2 / \3 \4`g s`\<(erbost) /(erzürnt) / (verärgert) / (wütend)\>`\1/\2/\3/\4`g s`\<(keinen Bissen) (hinunterbringen) / (hinunterbekommen \[geh\.\])/ (runterbringen \[ugs\.\]) / (runterkriegen \[Dt\.\] \[ugs\.\])`\1 \2/\3/\4/\5`g s`\<(Die Nachmittagssonne brannte) (heiß) / (unbarmherzig)\>`\1 \2/\3`g s`\<(The wind was blowing) (fiercely) / (harshly)\>`\1 \2/\3`g s`\<(The afternoon sun was burning) (fiercely) /(harshly)\>`\1 \2/\3`g s`\<(stehe ich völlig im Wald \[Dt\.\])/ (stehe ich völlig an \[Ös\.\])`\1 / \2`g s`\<(defer \(an event\)) \((to) /(until) / (till)\)`\1 (\2/\3/\4)`g s`\<(denigrate) (sb\.)/ (sth\.)`\1 \2/\3`g s`\<(den Platz) /(die Lage) (wechseln)\>`\1 / \2 \3`g s`\<(Januar) /(Jänner)\>`\1/\2`g s`\<(to look forward to sth\.)/ (to expect sth\.)`\1 / \2`g ## Abbreviations # - See also `abbreviations.sed'. s`\<(serious adverse reaction) / (SAR)\>/`\1 /\2/` # TODO: Unrelated to slashes: [rare] (and [Dt.]?) seems to not apply to the # whole unit. # Note: This was possibly intended to be "\1 /\2/ / /\3/". # The parser would currently create a very unexpected result from that, # though. s`\<(Doktor der Naturwissenschaften) /(Dr\. rer\. nat\.)/ / (Dr phil\. nat\.)/ (\[Dt\.\] \[rare\])`\1 /\2/ /\3/ \4`g s`\<(Inter-American Development Bank) /(IADB)/ (IDB)/`\1 /\2/ /\3/` s`\<(drei feste Maschen zusammenhäkeln / zusammen abmaschen / zusammenarbeiten) /(3 Fm zsm\.)/ / (3 Fm abm\.)/`\1 /\2/ /\3/` s`\<(extended single crochet) /(esc) /`\1 /\2/`g ## Missing space after abbreviation, before (.). s`\<(Folio \{n\} /fo/ /2°/)\((Buchformat)\)`\1 (\2)` s`\<(folio /fo/ /2°/)\((book size)\)`\1 (\2)` # See also `abbreviations.sed'. s`\<(secondary hyperparathyroidism) /(SHPT)/\((2-HPT)\)`\1 /\2/ (\3)` s`\<(logical inferences per second) /(LIPS)/\((expert system)\)`\1 /\2/ (\3)` ## Special abbreviations s`\<(schließende runde Klammer) /(\))/`\1 / \2 /` s`\<(right parenthesis \[Am\.\]) /(\))/`\1 / \2 /` s`\<(öffnende eckige Klammer) /(\[)/`\1 / \2 /` s`\<(schließende eckige Klammer) /(\])/`\1 / \2 /` s`\<(öffnende geschweifte Klammer) /(\{)/`\1 / \2 /` s`\<(schließende geschweifte Klammer) /(\})/`\1 / \2 /` s`\<(öffnende spitze Klammer) /(<)/`\1 / \2 /` s`\<(schließende spitze Klammer) /(>)/`\1 / \2 /` # Note: The following is broken in other ways (TODO). s`\((\+Gen\.)/ (über etw\.)\)`(\1 / \2)`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/typos.sed000077500000000000000000000041261526415265400253170ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/typos.sed - fix some typos in the en-de Ding source # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ### Characters # Quote characters from the Windows-1252 charset (convert to the Unicode # version). See . # The unicode values are 0x91 and 0x92 while the UTF-8 encodings are 0xC291 and # 0xC292, respectively. s`\xC2\x91`‘`g s`\xC2\x92`’`g ### Simple typos ## Initial character to upper case # Search regexes: # * '\b[a-zäöüß]+ \{(f|m|n|pl|no pl)\>.*::' (many false positives) # Note that '\<' and '\>' do not generally suffice due to e.g. "...händler". s` (instandhaltungseinschränkungen \{pl\})` \u\1`g s` (tönung \{f\})` \u\1`g s` (kleine) (auseinandersetzung \{f\})` \1 \u\2`g s` (standringe \{pl\}) ` \u\1`g s` (gleichrichten \{n\})` \u\1`g s` (checksummen \{pl\})` \u\1`g ## Diacritics # In v1.8.1, the Å„ was written as HTML code (ń), in version 1.9 it was # changed to plain n. The english Wikipedia uses the diacritic [0]. s`Poznan`PoznaÅ„` ## Misc s`\`Erhöhung`g s`/(Jun\.\; jun\.)\; (Jnr)\; (Jr),/`/\1\; \2.\; \3./`g # Dative, not accusative. s`\<(zwischen) jdn\./etw\. und jdn\./etw\.`\1 jdm./etw. und jdm./etw.`g s`\| <> sth\. (verspielend)\;`| \1\;` ## References # [0] https://en.wikipedia.org/w/index.php?title=Pozna%C5%84&oldid=1066570232 # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/update_help.bash000077500000000000000000000233601526415265400265760ustar00rootroot00000000000000#!/usr/bin/env bash # # preprocessed/de-en/update_help.bash - help updating to new Ding version # # Copyright 2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # When updating ding2tei for a new Ding version, the sed scripts should also # be revised. # * Some replacements may become obsolete. # * Some replacements may need changing. # * Note: It may be worthwile to keep some generic replacements even if they # do not apply to anything anymore. # * The course for adapting to a new Ding version is to simply run the main # ding2tei program on the preprocessed Ding dictionary and act upon any # errors. # * Also, ideally, non-critical syntax errors/inconsistencies (those that # do not break the parser), should be adressed (see util/). # # This script can also be helpful whenever amending the sed files to check # that they actually applied. # # Precondition: # * The sed scripts contain only single line commands. # # How to use this script: # * See help() / run `$0 help`. # 1. Run `init'. # 2. `apply' all old scripts to the old source. # * This creates, for each command line of each script a new file, which # are ordered in sequence. # 3. Copy all scripts to a folder `new/'. # 4. for each sedfile (in order specified by $order_conf_file_relative) # 1. `apply' this script to the new source (use script index). # * Again, this yields for each sed command in the current script a # new file. # 2. Open the current sed script in `new/` in an editor (still identical # to the old sed script). # 3. Run your favourite `diff' program (I suggest `vimdiff') for each # subsequent pair of newly created files, both for the old and new # Ding source file. # * A small bash for loop is handy (TODO: include in this script). # - "a=(SEDFILE_INDEX_PADDED.*) # for (( i=0; i < ${#a[@]} - 1; i++ )) # do # vimdiff "${a[i]}" "${a[i+1]}" # done # " # 1. Compare the `diff's manually, with the current sed command in # mind. # 2. Adapt the current sed script in `new/`. # * Note: The scripts are identical as of now, so there is a direct # correspondence between the diffed old and new files. # 4. `apply' this script again (if anything changed). # 5. Verify that all changes applied correctly. # * Ideally manually. A cmp(1) may be deemed sufficient, though. # * A `diff' of the old and new script files is helpful. # 6. (optional) Check the diffs again (if anything changed). # * Note: The scripts are distinct now, so there is not necessarily # a direct correspondence between the old and new files anymore. # * This can be repeated. One can also change the order (in particular, # change things in an "earlier" sed file later. # * One should be aware, however, that the changes may build upon # another; therefore, one would ideally check whether all the later # changes still apply as expected. # 5. (optional) `apply` the whole new script list again (in one run), check # everything. # 6. Replace the old scripts by the new scripts. # # See also: # * src/preprocess/de-en/README # * src/preprocess/de-en/all.bash typeset -r script_path="$(realpath "$0")" typeset -r script_dir="${script_path%/*}" typeset -r base_dir="$script_dir" order_conf_file_relative='order.conf.bash' typeset -r auxdir_relative='aux' typeset -r auxdir_absolute="${base_dir}/${auxdir_relative}" typeset -rA sedscriptdir_relative=( [old]='.' [new]='new' ) typeset -rA sedscriptdir_absolute=( [old]="${base_dir}/${sedscriptdir_relative[old]}" [new]="${base_dir}/${sedscriptdir_relative[new]}" ) # Get ${sedfiles_ordered[@]}. source "${base_dir}/${order_conf_file_relative}" function help() { cat << EOF Syntax: \$0 init OLD_DING_SRCFILE NEW_DING_SRCFILE \$0 apply old|new I_START I_END \`init' must be run before the first \`apply'. When running \`apply', I_START must not be larger than the last I_END. The first \`apply' must be run with 0 as I_START. \`apply' drops any possibly existing output (of previous runs of \`apply') with I larger than I_START before starting. The old sed scriptfiles must be located in \`${sedscriptdir_relative[old]}/', the new sed scriptfiles in \`${sedscriptdir_relative[new]}/'. The new sedfiles should initially just be a copy of the old ones and can then be adapted. Only sedfiles specified in \`${order_conf_file_relative}' are used, and all these are expected to exist. Results of this script will be found in \`${auxdir_relative}/'. All relative paths above relative to: \`${base_dir}' EOF } # Implementation notes: # * sed file indices and sed file line numbers, when part of a string (e.g., # in filenames) are always padded to be 3 and 5 characters long. # - This is expected to be sufficient. # - The 3 and 5 are hard-coded in many places. # - The intention behind padding is to have the numerical and alphabetical # sort order of filenames coincide. # - An error is issued if the number of files or lines is too big. set -o noclobber set -o errexit set -o nounset shopt -s extglob function main() { [[ $# -ge 1 ]] || { help; exit 1; } local -r cmd="$1" shift 1 case "$cmd" in init) init "$@" ;; apply) apply "$@" ;; help) help ;; *) help exit 1 esac } function init() { [[ $# -eq 2 ]] || { help; exit 1; } local -rA ding_srcfile=( [old]="$1" [new]="$2" ) for oldnew in old new do mkdir -p -- "${auxdir_absolute}/sed/${oldnew}" mkdir -p -- "${auxdir_absolute}/data/${oldnew}" cp "${ding_srcfile[$oldnew]}" "${auxdir_absolute}/${oldnew}.ding.txt" ln -sf -- "../../${oldnew}.ding.txt" \ "${auxdir_absolute}/data/${oldnew}/000.00000.txt" done } function apply() { [[ $# -eq 3 ]] || { help; exit 1; } local -r oldnew="$1" local -r i_start="$2" local -r i_end="$3" verify_string_old_or_new "$oldnew" verify_is_sedfile_index "$i_start" verify_is_sedfile_index "$i_end" verify_less_or_equal "$i_start" "$i_end" # Delete all data that is to be rewritten or "later" s.t. the state remains # consistent. clean "$oldnew" "$i_start" inifinity # i_* sed file index local -i i_cur i_next local si_cur si_next for (( i_cur = i_start; i_cur <= i_end; i_cur++ )) do local sedfile="${sedfiles_ordered[i_cur]}" printf -v si_cur '%03i' "$i_cur" printf -v si_next '%03i' "$(( i_cur + 1 ))" sed -E -- '/^\s*$/ d; /^#/ d' \ "${sedscriptdir_absolute[$oldnew]}/${sedfile}" \ > "${auxdir_absolute}/sed/${oldnew}/${si_cur}.${sedfile}" # j_*: sed file line index local lines mapfile -t lines < "${auxdir_absolute}/sed/${oldnew}/${si_cur}.${sedfile}" local -i j_cur=0 j_next local sj_cur sj_next for line in "${lines[@]}" do j_next=j_cur+1 printf -v sj_cur '%05i' "$j_cur" printf -v sj_next '%05i' "$j_next" sed -E -- "$line" \ < "${auxdir_absolute}/data/${oldnew}/${si_cur}.${sj_cur}.txt" \ > "${auxdir_absolute}/data/${oldnew}/${si_cur}.${sj_next}.txt" j_cur=j_next done ln -s -- "${si_cur}.${sj_next}.txt" \ "${auxdir_absolute}/data/${oldnew}/${si_next}.00000.txt" done } function clean() { [[ $# -eq 3 ]] || { help; exit 1; } local -r oldnew="$1" local -r i_start="$2" local i_end="$3" verify_string_old_or_new "$oldnew" verify_type_int "$i_start" if [[ "$i_end" == inifinity ]] then # No, this is not exactly efficient (TODO). i_end=999 else verify_type_int "$i_end" fi local -r i_end verify_less_or_equal "$i_start" "$i_end" local -i i_cur for (( i_cur = i_start; i_cur <= i_end; i_cur++ )) do local si_cur si_next printf -v si_cur '%03i' "$i_cur" printf -v si_next '%03i' "$((i_cur + 1))" if [[ -v sedfiles_ordered[i_cur] ]] then local sedfile="${sedfiles_ordered[i_cur]}" rm -f "${auxdir_absolute}/sed/${oldnew}/${si_cur}.${sedfile}" fi rm -f "${auxdir_absolute}/data/${oldnew}/${si_cur}".!(00000).txt rm -f "${auxdir_absolute}/data/${oldnew}/${si_next}.00000.txt" done } function verify_type_int() { if [[ "$1" =~ ^[0-9]+$ ]] then local -i i="$1" if [[ "$i" == "$1" ]] then return 0 fi fi printf 'Error: Not an int: %s\n' "$1" >&2 exit 1 } function verify_is_sedfile_index() { verify_type_int "$1" if ! [[ "$1" -ge 0 && "$1" -lt "${#sedfiles_ordered[@]}" ]] then printf 'Error: sedfile index out of range: %s not in [%s,%s)\n' \ "$1" '0' "${#sedfiles_ordered[@]}" >&2 exit 1 fi } function verify_less_or_equal() { if ! [[ "$1" -le "$2" ]] then printf 'Error: %s greater than %s.\n' "$1" "$2" >&2 exit 1 fi } function verify_sedfile_count() { # 999 is already bad because there would be created a final symlink with # 999+1 = 1000. if [[ "$1" -ge 999 ]] then printf 'Error: Number of sed files too large: %s\n' "$1" >&2 exit 1 fi } function verify_line_count() { local -r file="$1" local -r lc="$2" if [[ "$lc" -ge 100000 ]] then printf 'Error: Number of lines too large: %s: %s\n' "$file" "$lc" >&2 exit 1 fi } function verify_string_old_or_new() { if [[ "$1" != @(old|new) ]] then printf 'Error: Invalid argument: %s\n' "$1" >&2 printf "Must be \`old' or \`new'\\n" fi } main "$@" tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/usage.sed000077500000000000000000000071611526415265400252470ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/usage.sed - fix errors in usage annotations # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ### () -> [] # TODO: Consider to catch this in the parser. s`\((rarely used|rare)\)`[rare]`g ### Consistent spaces and dotting. # Note: There's probably more of these (TODO). # - alternatively, let the parser take care of it. # Missing <.>. # - Note: First expression has no matches in version 1.9; keeping # nonetheless. Similarly, the second espression could be shortened. s`\[(Ös|Br|Am|Norddt|Mittelwestdt|Mitteldt|Dt|Bayr)\]`[\1.]`g s`\[(ugs|cook|naut|photo|econ|coll|humor|adm|fig|stud|fin|ornith|meteo|geh|zool|textil|techn|pol|envir|bot|telco|statist|soc|sci|poet|mil|med|ling|hist|aviat|chem|zool|adm|biochem)\]`[\1.]`g # Superfluous < > before <.>. # - Note: Only matched in version 1.9. s`\[(soc|Am) \.\]`[\1.]`g # Superfluous <.> (if necessary, decided by count that the dotless variant is # correct). s`\[(sport|print|auto|slang|dated)\.\]`[\1]`g # <,> -> <.> s`\[(Br),\]`[\1.]`g ### Normalization # Differently abbreviated annotations. # Usually, the predominant version (by count) of two is taken. ## All except languages # Note: In version 1.9, all fixed except [stone], [milit.]; keeping all # regardless. s`\[rel.\]`\[relig.]`g s`\[environ\.\]`[envir.]`g s`\[TM\]`[tm]`g s`\[(technical|tech\.)\]`[techn.]`g s`\[stone\]`[min.]`g s`\[Statistik\]`[statist\.]`g s`\[sl\.\]`[slang]`g s`\[milit\.\]`[mil.]`g s`\[hum\.\]`[humor.]`g s`\[gramm\.\]`[ling.]`g s`\[finan\.\]`[fin.]`g s`\[bio\.\]`[biol.]`g s`\[const\.\]`[constr.]`g s`\[Kunst\]`[art]`g # [astr.] Could also mean [astrol.] but does not for all occurences. # - Note: Fixed in version 1.9; keeping regardless. s`\[(astr\.|aston\.|atron\.)\]`[astron.]`g # Note that the 'or' is converted in usage_debatable.sed. s`\[(formal) or humorous\]`[\1 or humor.]`g ## Languages # Note: In version 1.9, all fixed except [Sächs.], [Irl.]; keeping all # regardless. s`\[Scot.\]`[Sc.]`g s`\[(NZ)\.\]`[\1]`g s`\[New Zealand\]`[NZ]`g s`\[Liecht\.\]`\[Lie.]`g s`\[Sächsisch\]`[Sächs.]`g s`\[(irisch|Irl\.)\]`[Ir\.]`g # Debatable. The replacement value occurs more frequently. # - Note: Fixed in version 1.9; keeping regardless. s`\[ZA\]`[South Africa]`g # Debatable (Is there a semantic difference?). # The replaced values occurs once, the replacing value 11 times. s`\[Northern England\]`[Northern English]`g # The replacing value does not occur. It just should be an englisch # expression / abbreviation, in my opionion. Analogous to [Northern English]. s`\[Nordirl\.\]`[Northern Irish]`g # All of the below versions of [Lat.] appear exactly once. Use [Lat.] as it # seems to match the general convention for dialects / languages the best. # - Note: In version 1.9; only [lat.] remaining. s`\[(lateinisch|lat\.|Latin)\]`[Lat.]`g # Replacing value does not occur. Adapt to common naming scheme. s`\[arabisch\]`[Arab.]`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/de-en/usage_debatable.sed000077500000000000000000000033061526415265400272270ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # preprocess/de-en/usage_debatable.sed - fix debatable errors in usage # annotations # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # ### Normalize separator (<,>) # Notes: # * In all but very few cases, the separator is a comma or a slash. # * Slash has a distinct meaning, the others (<;>, ) not. s`\[(relig\.) und (Schw\.)\]`[\1, \2]`g ## -> # Notes: # * Cannot be generalized (as of now (2020-09-03), since [.] may contain free # text. # * Otherwise, it could be delegated to the parser. s`\[(formal) or (humor\.)\]`[\1/\2]`g ## Separation of extra info # [] should conly contain well defined values, as opposed to (). # Unfortunately, a little information gets lost this way. # Too rare to consider in the parser. s`\[(French) for (a female singer, especially in a nightclub)\]`[\1] (\2)` s`\[(übtr\.) für (eine große, schlanke Person)\]`[\1] (\2)`g s`\[(obs\.) für (Küster, Kirchendiener)\]`[\1] (\2)`g # vi: noet tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/es-de/000077500000000000000000000000001526415265400234435ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/src/preprocess/es-de/syntax.sed000077500000000000000000000045251526415265400254770ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # es-de/syntax.sed - modify the es-de dictionary to fit the Ding syntax # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * This script is not a true solution. # * This concerns the header, "/..." suffixes and the "|" -> ";" # transformation. # * Instead, the parser should be adapted to separately allow for the # slightly different syntax of the es-de dictionary. # * The main program has some hard coded values pertaining to the German # English Ding dictionary, therefore even with this modifications, the # resulting TEI will have pretty wrong metadata. # Grammar. s`\{prn\}`\{pron\}`g s` \{Demonstrativpronomen\}`` s`:: ::`::` s`\{s\}`\{sing\}`g s`\{prep\}`\{prp\}`g s`\{([fnm])$`\{\1\}` s`\;$`` s`\{mf\}`\{m,f\}`g s`\{adv\.\}`{adv}`g # Remove a superfluous <(>. s`\<(Besetzung) \((\{f\}) (\(Film\))`\1 \2 \3` s`^(retroceder \{v\} :: zurückziehen)\|$`\1` /^monstruoso \{adj\} :: \{adj\}$/ d # Adapt header \`^# Spanish :: German word list$` d s`^(# Version :: 0\.0i) Mon Mar 5 18:36:47 2012$`\1 2012-05-03` s`^(# Copyright \(c\) :: .*) (2003-2012)$`\1,\n# \2` \`^# License ::` { N; N s/\n# License :: ([^\n]+)/; \1/g } \`^# [0-9]+ entries$` d # Debatable. s` /([[:alpha:]]*)$` (\1)` # Cheating... s`\|`\;`g # Remaining problems: # * <|> is always (and seemingly only) used to distinguish # different genders. Sometimes, the respective other side has only one word # for both genders, i.e. the number of groups on both sides to not match. # . Ex.: "llorón {m}|llorona {f} :: Heulsuse {f} [coloq.]" # . Ex.: "logopeda {m,f} :: Logopäde {m} | Logopädin {f}" # * The header. # vi: noet tools-0.8.0-beta.1/importers/ding2tei/testsuite/000077500000000000000000000000001526415265400215235ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/testsuite/test-ding.sed000077500000000000000000000022061526415265400241210ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # test-ding.sed - validate the Ding input to a certain degree # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Note: This may give incorrect guesses when stumbling upon "/ | /". # - which is not present in Ding v1.8.1. h # Check for different count of <|> around <::>. s/[^:|]//g s/::/_/ s/://g /_/ { /^(\|*)_\1/ ! { g s/^.*$/Unbalanced <\|> separators:\n&\n/ p } } #g -- add before next test # vi: noet tools-0.8.0-beta.1/importers/ding2tei/todo/000077500000000000000000000000001526415265400204375ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/todo/README000066400000000000000000000005211526415265400213150ustar00rootroot00000000000000README ====== Todo files, grouping several related tasks within. The idea is for some of them to wander into doc/, once the respective things are done. Some TODO are also to be found in the FreeDict Wiki [0]. Syntax ------ See: doc/META References ---------- [0] https://github.com/freedict/fd-dictionaries/wiki/discussion-TEI tools-0.8.0-beta.1/importers/ding2tei/todo/combine.wikdict000066400000000000000000000004341526415265400234340ustar00rootroot00000000000000Piotr BaÅ„ski suggested [1] to combine certain parts of the WikDict data with that of the Ding. Q: Should inflected forms from the Ding be retained? - Likely yes. - Presumably, not all words are in the Wiktionary (with inflected forms) References: [1] FreeDict ML (2020-05-09) tools-0.8.0-beta.1/importers/ding2tei/todo/ding.devel-version000066400000000000000000000006411526415265400240650ustar00rootroot00000000000000Not only support version 1.8.1, but also "devel" - split preprocess/*.sed files# Note that "devel" is ever-changing, there is no (known) way of accessing old "devel" versions. Some words have disappeared in the devel version of the Ding - ex.: "Aggregationsreagenz" (and surrounding) - The web version of the Ding seems to be based on a third version of the Ding - has "Aggregationsreagens" (final "s", not "z") tools-0.8.0-beta.1/importers/ding2tei/todo/ding.groups.empty000066400000000000000000000007101526415265400237540ustar00rootroot00000000000000Empty groups ============ Such do exist. Probably not intentionally. Differentiate three cases (of the corresponding other language's group) a) empty -> Drop. b) a phrase -> keep as example without translation c) a headword ? Drop? ? Referencing from other words on the same side of the same line? . No ID available to reference to. . The same may be the case for <~>-references. ? Keep without any translation? tools-0.8.0-beta.1/importers/ding2tei/todo/doc.haddock000066400000000000000000000004701526415265400225240ustar00rootroot00000000000000Haddock markup TODO =================== See: https://haskell-haddock.readthedocs.io/en/latest/markup.html Haddock syntax is used for comments, albeit untested. * module description * top-level / exported functions (partially done) - arguments * top-level / exported datatypes (partially done) - arguments tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.from-prefixes000066400000000000000000000036601526415265400244240ustar00rootroot00000000000000Ex.: "von etw. absehen {vi}" Ex.: "etw. unterlassen {vt} [adm.]" Ex.: "etw. zu unterlassen haben [jur.]" - potentially not a headword, but a phrase, see todo/parsing.phrase-identification Ex.: "sein Revier markieren {vt} [zool.]" Ex.: "ich bin" - also: link to "sein" as inflected form. (see todo/enrich.inflected-forms) Ex.: "ich bin nicht" - This one should be considered a phrase, no dropping required. Ex.: "you are; you're" - Second form does not permit dropping anything Ex.: "jdm. nicht gehorchen" - "nicht" is not to be dropped. Ex.: "in Geschwindigkeit oder Leistung" * Drop some prefixes. ? Which? * Only when possible for all elements of group and translation group. * Infer information from prefixes. TODO: Identify important first words (count, shortness) - the same for second, third words - the same for the first n words (n <= ?) Counterex.: "von Adel sein" * "von" alone would likely not be considered a proper prefix to be made into a collocation annotation. Similarly: suffixes . potential counterexample: "on {prp; +Dat.} jdm./etw. (Ursprung)" . potential counterexample: "to hit on sb." (do not drop the "on" ?) . potential counterexample: "to hit {hit; hit} off" ~ "sich gut verstehen" . potential problem: "gegenüber jdm./einer Sache {prp} (in Bezug auf)" . special case: "to stave {staved, stove; staved, stove} off <> sth." . special case: "to hit {hit; hit} off" . Ex.: "losziehen {vi} gegen" . Ex.: "to hit out at sb." Potential counterexamles: . "in einigen Regionen alternativer Begriff zu Sauerkraut" . "to bump off <> sb." * Ignoring "<>", should "off" be part of the headword? . "at dusk" Possible problem: creation of duplicates inside a single group -------------------------------------------------------------- * Note: This may in theory also happen before stripping any prefix/suffix. * Consider: "to eat; eat" (invented example) ? Consider this an error? ? Merge. tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.grammar.inferral000066400000000000000000000010471526415265400250620ustar00rootroot00000000000000Grammar annotation inferral =========================== See doc/ding.annotation.brace on the current state. TODO: ----- * From the presence of inflected forms, infer `verb'. Ideas: ------ * Infer annotations from auxiliary words like . "jdm.", "jdn.", ... - See also todo/parsing.collocation-literals * Grammatical gender of words in plural . Often only {pl} annotated. ? Infer from possibly accompanying singular form ? See also -------- * doc/ding.annotation.brace * doc/enrich.grammar * todo/enrich.grammar.transferral tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.grammar.transferral000066400000000000000000000016011526415265400255770ustar00rootroot00000000000000Grammar annotation transferral ============================== See doc/enrich.grammar on the current state. Transferral between groups in a line: ------------------------------------- * {n,f,m,pl,no pl}: no - ex.: "ökologische/biologische Landwirtschaft {f}; ökologisch wirtschaftende Betriebe [agr.]" * {pron} . Ex.: "diese; dieser; dieses {pron} | diese {pl}" * Seems difficult. * ... Consideratations: ----------------- * Move some annotations to the level of an Entry or a Group. ? Only transfer annotations to the other side that match the whole group? ? Only transfer annotations where the other group is composed of only one unit ? - Alternatively: some restrictions - only alphabetic chars ? - only single word (depending on the annotation ?) ? See also -------- * doc/enrich.grammar * todo/parsing.scope-of-annotations * doc/ding.annotation.* tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.hyph-syllab000066400000000000000000000001061526415265400240620ustar00rootroot00000000000000Hyphenation and syllabification See also: todo/enrich/pronounciation tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.inflected-forms000066400000000000000000000006451526415265400247170ustar00rootroot00000000000000See also todo/enrich.from-prefixes Ex.: "sein {vi} | seiend | gewesen | ich bin | ..." - "ich bin": identify prefix - participles: difficult (unless maybe for regular verbs) - TODO: investigate further Ex.: "to be {...} | ... | you are; you're" - problem: "you're" - solution: retain original, but additionally extract inflected forms. - i.e.: "be | you are; you're" -> "be" (infl: "are") | "you are; you're" tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.link-plural-form000066400000000000000000000052561526415265400250340ustar00rootroot00000000000000Linking singular and plural forms ================================= * Differently gendered forms (m, f) of the same word seem to be always in the same group, often the only two. * Corresponding plural forms are usually, when available, in the second group, provided that the singular forms are in the first group. * Often, there are only these two groups. Problem: several (synonymous) units in a group. - Ex.: "Abbieger {m}; Abbiegende {m,f}; Abbiegender [auto] | Abbieger {pl}; Abbiegenden {pl}; Abbiegende" - In this case, the plural forms follow in the same order. - Unsure whether to rely on that. - Further investigation required. - Note that in the above example, there could also be added "Abbiegerin {f}" between the first and second unit of the first group. - Further, "Abbiegerinnen {f,pl}" (likely with only {pl} annotated) could be annotated, but it does not need to be (since the male plural is considered by some to be usable as a genderless one). Techniques to verify/identify semantic link ------------------------------------------- * German * f ~ m - Usually, ${x}in ~ ${x} . Does not apply to many foreign, imported words. * Note: Not all relations need to be caught. - prefix match [of a certain (relative) length] (heuristic) - potential conversion of vocals to umlauts . Ex.: "Graf" ~ "Gräfin", "Arzt" ~ "Ärztin" - edit distance * sing/n/m/f ~ pl - potential conversion of vocals to umlauts . Ex.: "Garten" ~ "Gärten" - suffixes (different ones) . Ex.: "Birne" ~ "Birnen" . Ex.: "Brot" ~ "Brote" - combination of the above two . Ex.: "Wort" ~ "Wörter" (or "Worte") * n ~ f/m ? Does this exist? * English * Note: annotations are mostly to be infered from the german side. * sing ~ pl - suffix "s" * Both sides - If X translates to Y, and Xs to Ys, and Xs is the plural of X, Ys is likely to be a plural of Y. - This is not certain though. There may be a different translation for a plural form, it may actually be a singular form. - In that case, there is a semantic relation between Y and Ys, where Ys means several of Y, but not a grammatical relation. - Hence, this must only serve as a hint, further verification is required, e.g. Y being a prefix of Ys or a certain maximal edit distance between Y and Ys. Specialties ----------- * {sing} and {pl} do not need to refer to nouns. . Ex.: "diese; dieser; dieses {pron} | diese {pl}" . Ex.: "Wir freuen uns über euer/Ihr {pl} zahlreiches Erscheinen." . Ex.: "that; those {pl}" See also -------- * doc/ding.annotation.brace tools-0.8.0-beta.1/importers/ding2tei/todo/enrich.usage.transferral000066400000000000000000000001531526415265400252560ustar00rootroot00000000000000Usage transferral ================= May some kinds of usages be transferred? (Most cannot; e.g., [Br.].) tools-0.8.0-beta.1/importers/ding2tei/todo/es-de000066400000000000000000000002641526415265400213610ustar00rootroot00000000000000There is also a spanish-enlish dictionary in the Ding format. (Much less entries) https://savannah.nongnu.org/projects/ding-es-de Review grammar inferral and transferral rules. tools-0.8.0-beta.1/importers/ding2tei/todo/misc.consider000066400000000000000000000035511526415265400231260ustar00rootroot00000000000000Write a proper TEI library for Haskell. Identification of the grammatical gender of words annotated as plural - Note: The annotation is mostly on the german side, so I focus on that. - If, separated by <|> (or also <;>?), there is a noun (with annotated gender) that is a prefix of the plural word in question, transfer the gender. - also allow for conversion to umlauts (e.g. "Blatt" ~ "Blätter"). - does not catch certain loanwords (e.g. "Forum" ~ "Foren" (or "Fora" - not contained in the Ding)) - Use some regexes to figure out classes of words with such special plural form. (Just match for significant common prefixes allowing umlauts and possibly other small diversions - possibly only where no maximal matching prefix is found) -- use sed (or else HappyParser.y) - see also: https://de.wikipedia.org/wiki/Plural#Spezielle_Pluralformen_von_Fremdw%C3%B6rtern Identification of german nouns by Capitalisation - useful mostly for {pl} annotation, which may also be given for other POS - use regexes ? -- difficult due to sentences and loan-doublewords. Add stuff that I stumble upon - different sedfile - examples - "Fora" as plural of "Forum" Separate sedfiles - categories - typos (in regular words) - incorrect formatting - incorrect annotations - ... - problem: categories overlap at times Reversing routine(s) - AST -> Ding - TEI -> AST ? - rather obligatory when writing a proper TEI library - and probably not much extra work Identify flected forms - remove pronouns, exclamation marks Generalize `mergeWs' (in `AlexScanner') somehow. - Note: The usage of `foldr' does not really make it better. - `Either' is probably to be used to do generalization upon. - alternative: a `foldr' with a lookahead of 1. Consider exportable intermediate language (XML?) that allows several keys per entry. tools-0.8.0-beta.1/importers/ding2tei/todo/old/000077500000000000000000000000001526415265400212155ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/todo/old/alex.wrapper-choice000066400000000000000000000002111526415265400247720ustar00rootroot00000000000000Lexer (Alex) - choice of wrapper - posn: allows for better error messages - monad, monadUserState - might simplify whitespace handling tools-0.8.0-beta.1/importers/ding2tei/todo/old/any-ast.grammar-representation000066400000000000000000000013631526415265400272040ustar00rootroot00000000000000The (seemingly) simplest way is to just annotate grammar in both the Ding and TEI AST by means of lists of single grammar annotations. It may however be considered advantageous to at some point store a set of grammar information in a tree, annotated to any single element that may be annotated with grammar information. The potential benefit of this approach lies therin, that no contradictory grammar information can be stored. * Note however, that in both the Ding and TEI, grammar is annotated in lists. * Note also, that the seemingly contradictory annotation {m,f} is possible, if a headword can have both genders. * One might argue though that such annotations should be treated special anyways. (to be found out how to represent in TEI) tools-0.8.0-beta.1/importers/ding2tei/todo/old/choice.versioning000066400000000000000000000011151526415265400245520ustar00rootroot00000000000000Versioning - current freedict-deu-eng versions are ahead of the Ding version - option: -fd (like Debian) - Is it guaranteed, that a named version does nerver change ? - One site says version 1.8, 2014-08-18, but provides version 1.8.1, 2016-09-06. - https://ftp.tu-chemnitz.de/pub/Local/urz/ding/de-en/ - Consider to use the provided date as (part of) version. - The download providing only the dictionary data does not have the version in its name. - Consider to suggest downloading the full Ding source (incl. a frontend program). tools-0.8.0-beta.1/importers/ding2tei/todo/old/parsing.literal.tilde000066400000000000000000000002721526415265400253370ustar00rootroot00000000000000<~> signifies a succeeding reference to another entry. Parsing this requires either a) splitting by word at the lexer stage, or b) identifying "~" as lexeme at the lexer stage. tools-0.8.0-beta.1/importers/ding2tei/todo/old/parsing.tool-choice000066400000000000000000000002241526415265400250050ustar00rootroot00000000000000Parser - choice of library / tool - Options - Happy (parser generator, like yacc, LALR-parsing) - (Mega-)Parsec (Parser combinator, LL-parsing) tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.annotations.angle-brackets000066400000000000000000000034271526415265400272500ustar00rootroot00000000000000Annotations in angle brackets ============================= According to the outdated Ding spec [0], they indicate wrong, old forms of the same word/expression. In practice: a) alternative (valid) form / synonym * Ex.: "Supplemental Restraint System /SRS/ " * Ex.: "Acethylen {n} [chem.] " * In fact, "Acethylen" seems to be a misspelling of the other. * Ex.: "Ausrichtung {f} (nach) " b) corresponding singular form * Ex.: "Lurche {pl} (Amphibia) (zoologische Klasse) [zool.] " * quite frequent c) wrong form * Ex.: "occurrence " * Ex.: "I love you. /ILU/ " * seemingly rare * difficult to distinguish from a) in particular. Ideas ----- * When the main word is annotated with {pl}, do some pl~sing correspondence testing (see todo/enrich.link-plural-form). * Careful, not to match obsolete an obsolete form (small edit distance!). Issue 1): plural "s" -------------------- only Ex.: "s" - fixed in preprocessor (see there) Special cases ------------- * "Geschütze {pl} [mil.] " * Synonym? Singular? (not grammatically!) Both? * <>-annotation applies to group / first unit. * "Binsen {pl}; Simsen {pl} (Juncus) (botanische Gattung) [bot.] " * "Chrysanthemen {pl}; Margeriten {pl} (Chrysanthemum) (botanische Gattung) [bot.] " * "digitization; digitizing; digitisation; digitising [Br.] " - not actually a special case. Rather, shows that <.> in fact applies to groups (TODO). * "hoar ", "to clepe {clept; clept} [obs.] " * Besides the semicolon: None of the above categories matches. [0] http://dict.tu-chemnitz.de/doc/syntax.html tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.annotations.braces000066400000000000000000000013741526415265400256240ustar00rootroot00000000000000Differentiation (grammar vs. inflected forms) ? Use the fact that inflected forms appear only on the English side. ? Issue a warning on partial grammar keyword matches. . e.g. "{prp; +Genn}" ? Use the fact that conjugated forms only appear for verbs. . Information usually not trivial to obtain - verb annotation is usually only on the german side. Allow for unknown content, e.g. {Quantifikator}; log that though. - Potentially require a command line flag. Special cases: . "{adj, usually not used before a noun}" . "{prp; + Fall des jeweiligen Bezugsworts}" . "{+Gen./bei}", "{prp; +Dat. / von jdm./etw.}" . "{idiom}" . "{Quantifikator}" ? Equivalent to {num}? . "{prp; +Gen.; +Dat. [ugs.]}" -- <[]> ? Cannot be represented in TEI? tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.annotations.brackets000066400000000000000000000017311526415265400261600ustar00rootroot00000000000000Bracket (<[]>) annotations ========================== General ------- ? Differentiate German and English side in Parsing - match language-specific keywords (e.g. "[ugs.]") - Complete the categorization of usage annotations, with the help of * util/results/bracketexps.* - Amend the parser to log all unknown usages and log these. Scope ----- . Some annotations apply to units. . ex.: "[Am.]", "[Ös.]" . Others usually (?) to groups, potentially to prefixes of them. . ex.: "[cook.]" . Some refer to part of a unit only, usually a word. . Usually indicates the annotations being an optional alternative form, which currently is to be converted to a slash-alternative in the preprocessing. . Potential Counterex. "reddish [log.] sucker" (No idea what [log.] means here.) Special examples ---------------- * "[only plural]" See also -------- * util/results/bracketexps.* * src/Data/NatLang/Usage.hs * src/Language/Ding/Read/Usage.hs tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.annotations.inline000066400000000000000000000015041526415265400256360ustar00rootroot00000000000000Handling of annotations on phrases / composed expressions (in particular gender annotations) - a) allow only to apply to whole expression (and ditch any inner annotation) - b) allow only inner annotations ("word {annot} word") - How to represent in the TEI data? (TODO: inform on whether it is possible to label parts of entries -- I highly doubt so.) - c) allow both - problems: - How to distinguish inner annotations at the end from annotations applying to the whole? - Many annotations are incorrectly placed (in particular, annotations applying to a true inner part are placed at the end). - solutions: - Manually check annotations inside expressions and after expressions composed of more than one word. What about [Br.] et al.? - ex.: "to tuck in / tuck up [Br.] <> a child (in bed)" tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.annotations.parentheses000066400000000000000000000014511526415265400267020ustar00rootroot00000000000000Annotations between <()>. ? In longer expressions / phrases, just keep them as part of the string. - longer expressions are unlikely to be found by exact search. Differentiate things like (of ...) from regular notes. * The former should be considered suffixing collocates. Use subtype on * Seen in eng-pol: (inside cit[@type=trans]) * related: Should be used in translations in place of ? ? At least for collocates? ? Use in the TEI output? ? In some contexts only? - No. Problem: scope of annotation (sometimes whole group, sometimes just the unit) - scope of whole group usually only, when after that whole group ? preferably after any other annotation? ? Consider some of them as instead of ? tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.collocation-literals000066400000000000000000000040021526415265400261430ustar00rootroot00000000000000Collocation literals ==================== Many units contain certain keywords such as "etw.", "sth.". The should be considered collocations and encoded in TEI as elements (not ). They may occur anywhere in units, however mostly as prefixes and suffixes. When occurring as infixes, the representation in TEI is questionable. Notes: * Only occuring as suffixes. * "to", "in" also are modifiers, but need to be matched separately. Syntax analysis: * utils/results/words.* * utils/results/wordspairs.* * utils/results/keywordprefs.* * utils/results/keywordsufs.* * utils/results/keywordswithprefs.* Classification: --------------- Notes: * While the below is expressed in Alex syntax, the identification of such collocations can not effectively happen in Alex, because * some potential collocations (e.g., "for sth.") may also occur as individual unit (only "sth." would be the collocation), * the collocations's constituents can be combined in many ways, including with slashes, whose scopes can not be generally determined. * This classification is incomplete. * The most frequent prefixes and suffixes that are considered collocations of the regarded type (>= 100 occs) should be included though. @en_kw = (sth|sb|so)\.|oneself @en_lmod = of|for|on|with|at|by|from|off|as|into|over|about|through|under|against|without|around|after|before|than|past @kw_special_in = "in" -- Note: "jmd." occurs both in nominative and accusative case. @de_kw_nom = (etw|jm?d)\. @de_kw_gen = (etw|jm?ds)\. @de_kw_acc = (etw|jm?dn|jmd)\. @de_kw_dat = (etw|jm?dm)\. -- TODO: "ohne" - really? -- Note: "vor +acc" usually (always?) requires another object (in acc.). @de_lmod_nom = als|wie @de_lmod_gen = wegen @de_lmod_acc = an|auf|für|über|vor|um|durch|unter|ohne|gegen @de_lmod_dat = mit|an|auf|von|zu|aus|nach|bei|über|vor|unter|"bis zu"|gleich @de_kw_special_sich = sich (\ + selbst)? @de_kw_special_zwischen = zwischen @de_exp_dat_zwischen = zwischen \ + @kw_de_dat \ + und \ + @kw_de_dat tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.conflicting-annotations000066400000000000000000000006251526415265400266610ustar00rootroot00000000000000Conflicting annotations ======================= Ex.: "einwandfrei {adj} {adv}" Does TEI allow such? . In a way: superEntry/form with several superEntry/entry and different superEntry/entry/gramGrp ? divide into two entries? - treat like "einwandfrei {adj} | einwandfrei {adv}" ? Which Step? ? Ding -> AST ? AST -> TEI ? See also: https://hal.inria.fr/hal-01757108/document : 2.1 (end) tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.elimination000066400000000000000000000017751526415265400243460ustar00rootroot00000000000000Elimination of certain parts of the input ========================================= Ex.: "Der Apfel {m} ist grün" -> "Der Apfel ist grün" . not yet decided whether such a case in particular should be handled like this. If it is to be done, it remains the question which spacing to keep. ? Remove the spacing preceding the removed element. . Matches the idea of a removed element becoming a neutral element, since spacing is stored as an attribute of the succeding token. . Works fine with commata. . ex.: "Der Apfel {m}, der ..." . This makes sense for removed postfix annotations. . Prefix annotations may be problematic, iff the annotation is not at the very beginning of a unit, i.e. inline. . ex. "..., (grüne) Äpfel" ? I cannot think of a case where this causes a single space being swapped for an empty string. ? Remove the spacing succeding the removed element. . Conversely to the former. ? Just assume a single space. . Usually breaks with commata. tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.empty-units000066400000000000000000000000471526415265400243230ustar00rootroot00000000000000They exist. One containing only "<>". tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.literal.Kfz000066400000000000000000000000641526415265400242110ustar00rootroot00000000000000Ex.: "Niger {m} /NE/ (Kfz: /RN/) [geogr.] :: Niger" tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.literal.to000066400000000000000000000006071526415265400241040ustar00rootroot00000000000000The `to' prefix should be removed and the annotated unit considered a verb. This is done, however some corner cases are not caught. Also, the implementation is no very elegant. Room for improvement. See src/Language/Ding/AlexScanner.hs Likely, PartialUnit should be amended. There was a debate on the FreeDict ML around the necessity of words like such. - assumed first half of 2020 tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.misc000066400000000000000000000046661526415265400227730ustar00rootroot00000000000000# > Abbrucharbeiter {m} | Abbrucharbeiter {pl} :: wrecker [Am.] | wreckers - [Am.] annotation applies to both sigular and plural - singular and plural separated by <|> (often <;> I believe). - recognise german plurals using some grammar checker // external source plus {pl} # Consider [alt] -> specifies alternate spelling (e.g., using <ß>) . usual case: units common_unit alt_unit units ? maybe do nontheless some comparison (least edit distance?) # {,;} - english side to leap {leaped, leapt; leaped, leapt} (to a place) | leaping | leaped; leapt | leaps | leaped; lept | to leap to safety Vergnügungsfahrt {f}; Spritztour {f} | eine Spritztour machen :: joyride | to joyride {joyrode; joyridden} -- apparently only on the english side (with this semantic) -- <;> separates simple past, pefect -- <,> separates alternatives for the same time edge case(s): - see preprocess/*.sed - embedded "[...]" and "(...)" - e.g.: "{bet, betted [Br.] (rarely used); bet, betted [Br.](rarely used)}" # (edge) cases: - {prp; wo? +Dat.; wohin? +Akk.} - {prp; wohin?, bis wann? +Akk.} - {prp; wann? +Dat.} - {pron interrog} - {Quantifikator} - {prp; wohin? +Akk.} - {+Gen./bei} - {prp +Dat.} - many like this (usually there is a semicolon in between) - {ppron pl} - {adj.} - {relativ} - always right after {pron} - Convert to {pron relativ} (similar to {pron interrog} ? - {vi/vt} - preprocessor; done - {vt;vi} - should be: {vt,vi} - preprocessor; done - {idiom} - {sing} - {num} - (+Gen/ über etw.) - ({f} [Ös.]) - ({n} [Ös.]) - "deadlocked {adj, usually not used before a noun}" - "ausgenommen {prp; + Fall des jeweiligen Bezugsworts}" - {prep.} - occurs once - should be without dot ? # (...) "(+ {adj})" "(Kfz: {n} /RI/)" "(f Buddhist structure)" - f =~ famous ? - common sematics - a) explanation - "versenkt eingelassen (mit glatter Oberfläche)" - "eingerollt {adj} (Blatt)" - b) context (similar to <[]>-annotations) - "Arbeitslampe {f} (Beleuchtungstechnik)" - c) possible continuation / interjection - "(beidseitig) eingespannt" - mixture - "to own (up) to (having done) sth. (old-fashioned)" - TODO: Does the location w.r.t <{}>-annotations matter ? # "Tiffany (Seidengaze f) [textil.]" - f -> {f} ? - applying to which ? Both ? "Sakko {n} ({m} [Schw.]);" "...(n)" -- plural or so "Adress rechnung {f} [comp.]" "die Meinigen / die meinigen {pl}" et al. (same line) - Plural related to both - Semantics of ? tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.misc.from-ding-spec000066400000000000000000000007471526415265400256000ustar00rootroot00000000000000https://dict.tu-chemnitz.de/doc/syntax.html - ... - "Zusatzangaben" - ... - "~" - sometimes a space is succeeding - sometimes annotated ("[...]") - seems to relate to the "~" annotated word - "Alternative Schreibweisen" - "-!-" not occuring - devel: occuring twice, in one line (between "<>") - "--" occuring in one line, twice (in "<...>" context) - in the devel version: occuring in another line (also between "<>") - "-+-" not occuring tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.phrase-construction000066400000000000000000000065001526415265400260370ustar00rootroot00000000000000Phrase construction =================== Currently, in building a phrase (i.e., expression), I use the Token monoid. It would be nice to be able to keep potentially dropped parts. - "a {b} c d {e}" -> Token _ "a b c d", Token _ OBrace, ... ? Really? Suggestion: Use a type like the following (1): data Expression = SimpleExp Token | ComposedExp Token SpecialExp Expression | ComposedExpR Token SpecialExp | ComposedExpL SpecialExp Expression data SpecialExp = HiddenExp Token | MultiExp (Multi Expression) | SwitchExp Token Token data Multi a = Single a | Multi a [a] (Multi a) | MultiR a [a] | MultiL [a] (Multi a) data Exp a b = Single a | Exp a b (Exp a b) | ExpR a b | ExpL b (Exp a b) data Expression' = Exp Token SpecialExp data Multi' a = Exp a [a] Problem: The list-like structure makes the monoid operation inefficient. - Note that most Expression's will be SimpleExp's. - Even otherwise: Its still only linear-time list concatenation. Porentially better (2): data Exp a b = Single a | Exp (Exp a b) b (Exp a b) | ExpR (Exp a b) b | ExpL b (Exp a b) Drawback: There are several trees that represent the same data. Another option (3): data Expression = [ExpUnit] -- or NonEmpty ExpUnit data ExpElement = SimpleExp Token | HiddenExp Expression | MultiExp (Multi Expression) | SwitchExp Token Token - simple - most Expression's will be [SimpleExp $ Token _] Yet Another Option (4): data Expression = SimpleExp Token | HiddenExp Expression | MultiExp [Expression] | SwitchExp Token Token | ComposedExp Expression Expression - simple and compact - still amiguous (SimpleExp "abc def" ~ ComposedExp (SE "abc") (SE "def")) Next Option -- drops HiddenExp (5): newtype Expression = Expression [Token] switchExp e f = Expression [a <> b, b <> a] simpleExp e = Expression [e] instance Semigroup Expression where Expression toks1 <> Expression toks2 = Expression $ [ tok1 <> tok2 | tok1 <- toks1, tok2 <- toks2 ] - instead of hidden exp, there could be an annotation of the whole expression including the hidden parts. - Duplicates data (There will be some sharing though). - Loss of information. - Probably OK for the source side of the resulting TEI dictionary. - The target side would be blown up (in case of many multi-exps). Questions: - Prohibit totally hidden expressions on the type level? - In which context would such composed expressions be allowed? - Is agressive splitting desirable at all? - Non-trivial expressions are not expected to be found by exact match anyways, in the resulting dictionary. - Units like "etw./jdn. meiden" should probably be treated differently (extract prefix into annotation). - Units like "meiden/vermeiden" should not occur at all. Considerations: - Simply use option (3) or similar and do not join SimpleExp's. - Does complicate things everywhere but on the unit level. - Only do this at the unit level. - potentially also in between <()>. tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.phrase-identification000066400000000000000000000066621526415265400263070ustar00rootroot00000000000000It would be nice to identify phrases or other non-trivial expression, such that they may be considered examples for associated keywords, and not keywords themselves. NOTE: This has been implemented, although there remains room for improvement. See Language/Ding/Enrich/Example* ? Test for subsequence match (should be delimited by whitespace or similar). * Potential counterexamples: . "etw. unterlassen {vt} [adm.] | etw. zu unterlassen haben [jur.]" . "Adel" ~ "niederer Adel" . "tongue" ~ "little tongue" ~ "Zünglein" ? require a certain maximum number of words in the key unit? * Note that capitalization may change. ? Require a certain minimum number of words in the examined unit. * positive signs ? a comma ? a period (at the end?) ? Consider quotes (<">, <'>) ? Which side should match? ? Any? ? Both? ? The side that currently is the "key"-side? ? The side that currently is the "value"-side? Obstacles * plural form / form of different gender (m/f) * Simple heuristics should do. * Inflected verbs * Note: Ideally, a lot of inflected forms are to be imprted from the Wiktionary in the future. (There is ongoing work from Karl Bartel.) * This would however be accessible in TEI, so t is either to be parsed separately or merged post translation. * Note: Sometimes inflected forms are listed individually. (TODO) * Some regular forms could likely be caught with a heuristic. * Unsure, if worth the effort. ? Ignore? * special Ex.: "ausreizen" ~ "... reizt ... aus ..." * Plural forms * Take care not to match "Menschen" as an example for "Mensch". Some examples: > Angeklagte {m,f}; Angeklagter [jur.] | Angeklagten {pl}; Angeklagte | Hauptangeklagter; Erstangeklagter | Zweitangeklagter | "Angeklagter!" | anonymer Angeklagter oder anonymes Opfer (in einer Anklageschrift) | anonyme Angeklagte oder anonymes Opfer (in einer Anklageschrift) :: accused; defendant | the accused (persons/parties); defendants | primary accused | second defendant; second accused | "Prisoner at the bar!" | (the person of) John Doe (in a bill of indictment) [Am.] | (the person of) Jane Doe (in a bill of indictment) [Am.] * "anonyme Angeklagte oder anonymes Opfer" vs "Jane Doe" * the first is likely to be considered an example, the latter not. * "accused" ~ "the accused" * Is that an example? ? Be conservative in such cases? > Abenddämmerung {f}; Niedergang {m}; Ausklang {m} | Lebensabend {m} :: sere and yellow leaf [fig.] | the sere and yellow leaf (of life/age) [fig.] * latter is to be considered an example, even though only slightly longer > echte Aale {pl}; Flussaale {pl}; Süßwasseraale {pl} (Anguilla) (zoologische Gattung) | Aal grün; grüner Aal [cook.] | Aal blau; blauer Aal [cook.] | Aal in Aspik; Aal in Gelee [cook.] :: freshwater eels; anguilla (zoological genus) | Boiled Eel served with Parsely Sauce | Eel au bleu; Eel steamed and served with Butter | Jellied Eel > Abstand {m}; Zwischenraum {m} (zwischen) | Abstände {pl}; Zwischenräume {pl} | in 25 Meter Abstand | im Abstand von 5 Metern | lichter Abstand | den gebührenden Abstand halten | Abstand halten! | Ich folgte ihm mit einigem Abstand.; Ich folgte ihm in einiger Entfernung. :: distance (between) | distances | at a distance of 25 metres | 5 metres apart | clear distance | to keep the proper distance | Keep a distance! | I followed him at a distance. * two synonymous phrases, only on has an infix tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.removal_of_auxiliary_words000066400000000000000000000001331526415265400274570ustar00rootroot00000000000000E.g.: "jdn./etw. in etw. verwandeln {vt}" -> "verwandeln" (possibly with some annotation) tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.scope-of-annotations000066400000000000000000000025751526415265400261030ustar00rootroot00000000000000Scope of annotations ==================== - ex.: "obligatorisch; verpflichtend {adj}; Pflicht...; Zwangs... :: compulsory" - Probably, "{adj}" is supposed to apply to both of the first two adjectives. ? assume that a generic part of speech annotation (e.g. "{adj}") applies to all preceding units in that group. - seems to fit quite well - TODO: more rigorous searching (e.g. try to find counterexamples with (capitalised) nouns or expressions composed of several words; also search for conflicting annotations) - conflicting annotations should also be detected in the main program - Module Language.Ding.Enrich - Is there a point in per-group annotations ? - Any annotation following a group / prefix-set annotation is also a group / prefix-set annotation. This applies for both <[]> and <{}> annotations, which may interact in this regard. - Note that conversely, an annotation preceding a unit-level annotation must also be a unit-level annotation. There should be some rules to solve corresponding conflicts. ? <()>-annotations relevant here? - probable counterexample: "überrannt; überlastet {adj} (WWW-Server) [comp.]" - Repeated annotations indicate that these do not form part of a prefix set. - Ex.: "accusation; plaint [Br.] [jur.]; libel [Sc.] [jur.]" See also: * doc/ding.annotation.* * todo/enrich.annotation.transferral tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.slashes000066400000000000000000000025351526415265400234730ustar00rootroot00000000000000Parsing of single slashes ========================= Issue 1): Recognizing the scope of weak slashes ----------------------------------------------- Examples. * "(mit jdm. / mit etw.)" * "| Auslandsdeutsche / Auslandsfranzosen ::" * "Kein / Keine [Ös.] Ausschank" * Converted to strong slash in preprocessing * There are many more similar occurences. * "| über dem / überm [ugs.] Durchschnitt |" Issue 2): partial words ----------------------- Examples: * "An-/Durchbohren" * "Jugendstil-/Kunst" (before preprocessing: "Jugendstil- [Kunst]") Issue 3) Comma separated abbrevs -------------------------------- Examples: * "Gesellschaft mit beschränkter Haftung /GmbH/, /GesmbH/" * "bürgerlichen Rechts /GbR/; /GdbR/, BGB-Gesellschaft" * not really an example (not strongly related) Consider to make all abbreviations their own entry. Remainder (single slashes) -------------------------- Not to be confused with slash-enclosed annotations. examples - "auf/in etw. surfen" - "eine Droge, die schnell süchtig macht / von der man schnell abhängig wird" subcategory pronouns - "er/sie surft" Resolving the problems: ? keep a state for the current preceding spaces (Bool possibly suffices) ? match different entities depending on the availability of preceding or succeding space / separator. See also -------- * doc/ding.slashes tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.spacing000066400000000000000000000001311526415265400234430ustar00rootroot00000000000000Consider not to store the amount of spacing, but rather whether there was any (boolean). tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.special000066400000000000000000000003271526415265400234460ustar00rootroot00000000000000If "/ /" should be allowed for all special characters, the class of special characters needs to be expanded. In the current dictionary (v. 1.8.1), there is only "%" besides the common special characters. tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.whitespace000066400000000000000000000002511526415265400241560ustar00rootroot00000000000000Currently, all whitespace except for \n is considered equivalent. Consider to change this to only allow ' ' as regular whitespace. - Use $printable for the remainder. tools-0.8.0-beta.1/importers/ding2tei/todo/parsing.wordswitch000066400000000000000000000012051526415265400242170ustar00rootroot00000000000000syntax: '<>' semantic: surrounding words interchangeable possible solutions - ignore - Alex: separate by WS (i.e., identify words) - consider chars [-_'] - potential special case: "(n)" suffix on one of the words problem: sometimes, its not a single word, but instead for example a composed noun - ex. "a child" problem: combination with "/" . ex. "to tuck in / tuck up [Br.] <> a child (in bed)" - "/" needs good heuristics attention: annotations - ex. "to tuck in / tuck up [Br.] <> a child (in bed)" Note: <> is apparently only on the english side. - If a de->en dictionary is sufficient for now, it can be probably ignored. tools-0.8.0-beta.1/importers/ding2tei/todo/preprocess.find-irregularities000066400000000000000000000004351526415265400265200ustar00rootroot00000000000000Ding irregularities & misspellings ================================== How to find? - Regexes for assumed possible errors - Errors upon parsing See - todo/parsing.misc - src/preprocess/*.sed Examples - () instead of {}: - '\([^{]{0,10}\b(adj|adv|prp|n|m|f|...)\b' (`less' regex) tools-0.8.0-beta.1/importers/ding2tei/todo/preprocess.fix-misspellings000066400000000000000000000001011526415265400260330ustar00rootroot00000000000000Use a spellchecker, e.g. /usr/share/dict/{words,ogerman,ngerman} tools-0.8.0-beta.1/importers/ding2tei/todo/preprocess.quotes000066400000000000000000000004251526415265400240670ustar00rootroot00000000000000Quotes <"> Special cases: * '<">' * '1/4"' <'> Examples: * "'Zur Aktivierung klicken'" * "'Die Qual der Wahl. Ich kann mich nicht entscheiden, welches ich nehmen soll.'" Problem: * Most <'> are apostrophs. Solution: ? Analogous to '/' (left <'>, strong <'>, ...)? tools-0.8.0-beta.1/importers/ding2tei/todo/preprocess.tabs000066400000000000000000000002151526415265400234750ustar00rootroot00000000000000Are tabs permitted ? - there is exactly one in the devel version of de-en.txt (none in version 1.8.1) Adjust AlexScanner.x accordingly. tools-0.8.0-beta.1/importers/ding2tei/todo/reduce-memory-consumption000066400000000000000000000022041526415265400255110ustar00rootroot00000000000000Currently (2020-10-14), 4.5 GiB are taken up by parsing the Ding source (which is 20 MiB in size). The main issue is that the program cannot start writing to disk before essentially the whole dictionary is processed, because the (prefixing) TEI header wants to know the number of TEI entries. -- Obsolete: This huge memory usage probably is due to something in the Happy-generated code. The usage can likely be drastically be reduced by having Happy only parse single lines. This requires parsing the header separately, though (which should not be difficult). Testing with restricted memory: $ ulimit -S -d #N_KB * result: restricting to below 2.6 GiB crashes the program. Testing repeated inspection: > putStrLn $ show $ length ls > threadDelay $ 20 * 1000 * 1000 > putStrLn $ show $ length $ show ls * second counting finishes fast * no memory reduction after first counting done noticeable. Results of improvement (scan & parse by line) * scan&parse time: 20s -> 13s * scan time: 4s -> 10s (likely I did something wrong in measuring) * memory usage: 2.6 GiB -> 2.7 MiB * Note: lazyness and garbage collection have a huge impact here tools-0.8.0-beta.1/importers/ding2tei/todo/setup-mechanism000066400000000000000000000005071526415265400234660ustar00rootroot00000000000000Installation / Compilation / Setup mechanism - options: - Cabal - recommended by (seemingly all) Haskell people - probably does not (easily) allow for non-Haskell parts - restrict to only the Haskell part - Makefile - Shell script - Combine the execution of sed scripts and the compiled Haskell program tools-0.8.0-beta.1/importers/ding2tei/todo/tei.alternative-spellings000066400000000000000000000005241526415265400254570ustar00rootroot00000000000000? Use a separate or ? - Ask at Freedict first. For different US/UK spellings (or similar): - ex. from TEI doc colour US color - https://www.tei-c.org/release/doc/tei-p5-doc/en/html/DI.html : 9.3.5.2 tools-0.8.0-beta.1/importers/ding2tei/todo/tei.homograph-grouping000066400000000000000000000006521526415265400247610ustar00rootroot00000000000000Options (that are valid FreeDict TEI): * superEntry/entry * superEntry/entry/sense * entry/sense * entry/sense/sense All known information collected in the FreeDict Wiki (11 - Grouping of homographs): See also: * Language/TEI/Syntax/Body.hs * https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html#nested-entries-vs-multiple-senses tools-0.8.0-beta.1/importers/ding2tei/todo/tei.lines000066400000000000000000000017361526415265400222630ustar00rootroot00000000000000How to represent lines in the TEI output ======================================== - Create two dictionaries, one for each direction (de->en, en->de). NOTE: Mostly done. Let one direction be fixed. ? Group Ding groups in a ? - No. They do not function as "a single unit". ? For each line, separate by the source language's keywords. . "a; b :: c; d" -> "a :: c; d", "b :: c, d" - similar for <|> ? Group units of a group in a ? . They do funtion as "a single unit", so ok. - Group homographs using . ? Group new (more numerous) lines by homographs on the source side. ? Group in a with children. ? Group in s instead. - Do not use here. - see https://www.tei-c.org/release/doc/tei-p5-doc/en/html/DI.html - 9.1, 9.2.1 ? Are all translation units in the same group considered synonymous? - Otherwise: Use separate entries. ? Use sortKey's? See also: todo/linking.lines tools-0.8.0-beta.1/importers/ding2tei/todo/tei.usage-tag000066400000000000000000000006641526415265400230250ustar00rootroot00000000000000 ===== . Created (mostly?) from []-annotations. - Differentiate, as described in the TEI Lex-0 doc: * https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html#index.xml-body.1_div.7_div.2 ? Usage of the @norm attribute? . Standardization of values, e.g. "ugs." ~ "colloquial". - See example: * https://dariah-eric.github.io/lexicalresources/pages/TEILex0/TEILex0.html#index.xml-body.1_div.7_div.1 tools-0.8.0-beta.1/importers/ding2tei/todo/teiaddphonetics.bugs000066400000000000000000000006771526415265400245020ustar00rootroot00000000000000teiaddphonetics: * Unit: "Angeklagter!" * '[[:letter:]] *[!?:,]"' * in words: a letter, whitespace, [!?:,], <"> * [*.\\;-] are ok * Whitespace before <"> also ok. $ fdtools-git/teiaddphonetics --infile deu-eng.tei --outfile build/tei/deu-eng-phonetics.tei --espeak-count 1 last written word: ''Sie sagt sie ist rechtzeitig da'-'Nie im Leben ' / 'Denkste!' / 'Keine Chance!'' See also: preprocess/de-en/adjust_for_teiaddphonetics.sed tools-0.8.0-beta.1/importers/ding2tei/todo/testing.idempotence000066400000000000000000000007011526415265400243300ustar00rootroot00000000000000Assuming a Pretty instance for Syntax.Dict, it should hold that (parse . scan . pretty) is the identity on Syntax.Dict. A slightly weaker condition is that (pretty . parse . scan) is idempotent on valid textual dictionaries (those that parse.scan does not emit an error for). For testing, one shall either use the idempotence condition or (parse . scan . pretty . parse . scan) x = (parse . scan) x for valid textual dictionaries x. tools-0.8.0-beta.1/importers/ding2tei/todo/testing.quickcheck000066400000000000000000000000741526415265400241510ustar00rootroot00000000000000Quickcheck ? Enrichment for instance could well be tested. tools-0.8.0-beta.1/importers/ding2tei/util/000077500000000000000000000000001526415265400204475ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/ding2tei/util/extract.bash000077500000000000000000000040071526415265400227640ustar00rootroot00000000000000#!/usr/bin/env bash # # extract.bash - a small script to extract different expressions # # Copyright 2020,2022 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # dingfile=../dict/ding/de-en.txt.pp types=( {brace,bracket,paren,dot,switch}exps nonalpha words wordpairs parenprefs{1,2} keyword{prefs,sufs} keywordswithprefs ) dir="$(dirname "$(realpath "$0")")" outdir="${dir}/results" # Do not overwrite existing files (using '>'). set -o noclobber function main() { cd "$dir" mkdir -p "$outdir" if [ $# -ge 1 ] then extract "$1" else for type in "${types[@]}" do printf 'Extracting %s...\n' "$type" extract "$type" done fi } function extract() { local type="$1" local shfile="extract_${type}.sh" local sedfile="extract_${type}.sed" local script if [ -e "$shfile" ] then script="$shfile" else if ! [ -e "$sedfile" ] then printf 'Error: %s does not exist.\n' "$sedfile" 1>&2 exit 1 fi script="$sedfile" fi exps_sorted="$(./"$script" < "$dingfile" | sort)" # Sort by name. uniq <<< "$exps_sorted" > "${outdir}/${type}.by_name" # Sort by number of occurences. uniq -c <<< "$exps_sorted" | sort -nr > "${outdir}/${type}.by_count" # Sort by length. awk '{ print length, $0 }' < "${outdir}/${type}.by_name" | sort -n \ | cut -d ' ' -f 2- > "${outdir}/${type}.by_length" } main "$@" # vi: ts=2 sw=2 noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_braceexps.sed000077500000000000000000000023221526415265400246540ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_braceexps.sed - a small script to extract brace expressions # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Only innermost brace expressions ("{...}") are to be matched. # (Actually, there are no nested brace expressions in the Ding source.) # Several brace expressions in the same line are to be split into several # lines. /\{.*\}/ { # Reduce to (roughly) "{[^{}]*}*" s/[^{]*[^}]*(\{[^}]*\})([^{]*[^}]*$)?/\1/g # Separate by newlines. s/\}\{/\}\n\{/g # Print p } # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_bracketexps.sed000077500000000000000000000023301526415265400252120ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_bracketexps.sed - a small script to extract bracket expressions # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Only innermost brace expressions ("{...}") are to be matched. # (Actually, there are no nested brace expressions in the Ding source.) # Several brace expressions in the same line are to be split into several # lines. /\[.*\]/ { # Reduce to (roughly) "{[^\[\]]*}*" s/[^[]*[^]]*(\[[^]]*\])([^[]*[^]]*$)?/\1/g # Separate by newlines. s/\]\[/\]\n\[/g # Print p } # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_dotexps.sed000077500000000000000000000016061526415265400243720ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_dotexps.sed - a small script to extract dot-terminated words # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # s/[^.]*(^| )([^ ]*\.)/\2\n/g s/^((.*)\.).*/\1/p tools-0.8.0-beta.1/importers/ding2tei/util/extract_keywordprefs.sed000077500000000000000000000021441526415265400254260ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_keywordprefs.sed - extract words prefixing certain keywords # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Find all prefixing words (use Å‚ as separator) :loop s`^(.*Å‚)? *([^ Å‚]+) +((etw|sth|sb|jm?d[nms]?|so)\.|oneself)`\1\2Å‚` t loop s`Å‚ *$`` t print s`^(.*Å‚)? *([^ Å‚]+)`\1` t loop # Print all found words from hold space. :print s` +$`` /^$/ d s`Å‚`\n`g p # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_keywordsufs.sed000077500000000000000000000021431526415265400252660ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_keywordsufs.sed - extract words suffixing certain keywords # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Find all prefixing words (use Å‚ as separator) :loop s`^(.*Å‚)? *((etw|sth|sb|jm?d[nms]?|so)\.|oneself) +([^ Å‚]+)`\1\4Å‚` t loop s`Å‚ *$`` t print s`^(.*Å‚)? *([^ Å‚]+)`\1` t loop # Print all found words from hold space. :print s` +$`` /^$/ d s`Å‚`\n`g p # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_keywordswithprefs.sed000077500000000000000000000022451526415265400265070ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_keywordswithprefs.sed - extract certain keywords together with # prefixing words # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Find all prefixing words (use Å‚ as separator) :loop s`^(.*Å‚)? *([^ Å‚]+) +((etw|sth|sb|jm?d[nms]?|so)\.|oneself)([^Å‚]|$)`\1\2 \3Å‚` t loop s`Å‚ *$`` t print s`^(.*Å‚)? *([^ Å‚]+)`\1` t loop # Print all found words from hold space. :print s` +$`` /^$/ d s`Å‚`\n`g p # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_nonalpha.sed000077500000000000000000000023341526415265400245030ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # extract_nonalpha.sed - a small script to extract non-alphabetic characters # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Only innermost brace expressions ("{...}") are to be matched. # (Actually, there are no nested brace expressions in the Ding source.) # Several brace expressions in the same line are to be split into several # lines. # Remove alphabetic characters. s/[[:alpha:]]//g # Remove whitespace. s/\s//g # Remove empty lines. /^$/ d # Add trailing newlines. s/./&\n/g s/\n$// # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_parenexps.sed000077500000000000000000000022141526415265400247050ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_parenexps.sed - a small script to extract paren-expressions # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Only innermost paren-expressions ("(...)") are to be matched. # Several paren-expressions in the same line are to be split into several # lines. /\(.*\)/ { # Reduce to (roughly) "\([^()]*\)*" s/[^(]*[^)]*(\([^)]*\))([^(]*[^)]*$)?/\1/g # Separate by newlines. s/\)\(/\)\n\(/g # Print p } # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_parenprefs1.sed000077500000000000000000000017771526415265400251430ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # extract_parenprefs.sed - a small script to extract prefixes inside parens # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * This script should receive lines with parenthese-expressions. # * Prefixes consisting of a single word extracted. s`^\( *([^ )]+).*$`\1` # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_parenprefs1.sh000077500000000000000000000000761526415265400247710ustar00rootroot00000000000000#!/bin/sh ./extract_parenexps.sed | ./extract_parenprefs1.sed tools-0.8.0-beta.1/importers/ding2tei/util/extract_parenprefs2.sed000077500000000000000000000021131526415265400251250ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # extract_parenprefs.sed - a small script to extract prefixes inside parens # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * This script should receive lines with parenthese-expressions. # * Prefixes consisting of a two words extracted. # Drop lines containing single words inside parens /^\( *[^ ]* *\)/ d s`^\( *([^ )]+ [^ )]+).*$`\1` # vi: noet tools-0.8.0-beta.1/importers/ding2tei/util/extract_parenprefs2.sh000077500000000000000000000000761526415265400247720ustar00rootroot00000000000000#!/bin/sh ./extract_parenexps.sed | ./extract_parenprefs2.sed tools-0.8.0-beta.1/importers/ding2tei/util/extract_switchexps.sed000077500000000000000000000020441526415265400251020ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_switchexps.sed - a small script to extract "<>"-expressions. # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Note: Only the succeeding word is taken with, to prevent the list of results # from becoming too long. # (TODO:) Do the inverse, separately. s/.*(<> *[^ ;|:]+)/\1\n/g s/(<> *[^ ;|:]+).*/\1/p tools-0.8.0-beta.1/importers/ding2tei/util/extract_wordpairs.sed000077500000000000000000000021341526415265400247130ustar00rootroot00000000000000#!/usr/bin/env -S sed -nEf # # extract_word.sed - a small script to extract words # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # # Notes: # * This script is very slow. # * The generated data is not overly useful, since <::> <|> et al. are # considered words. /^#/ d h s/ *([^ ]+) +([^ ]+)/\1 \2\n/g s/(^|\n) *[^ ]*$// /^$/ d p x s/^ *[^ ]+// s/ *([^ ]+) +([^ ]+)/\1 \2\n/g s/(^|\n) *[^ ]*$// /^$/ d p tools-0.8.0-beta.1/importers/ding2tei/util/extract_words.sed000077500000000000000000000015241526415265400240410ustar00rootroot00000000000000#!/usr/bin/env -S sed -Ef # # extract_word.sed - a small script to extract words # # Copyright 2020 Einhard Leichtfuß # # This file is part of ding2tei-haskell. # # ding2tei-haskell is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ding2tei-haskell 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with ding2tei-haskell. If not, see . # /^#/ d s/ +/\n/g tools-0.8.0-beta.1/importers/epo-eng/000077500000000000000000000000001526415265400173175ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/epo-eng/README.md000066400000000000000000000023771526415265400206070ustar00rootroot00000000000000This importer is for a single dictionary format only, as used by the epo-eng dictionary from . It is (c) 2015 Paul Denisowski, under the terms of the Creative Commons Attribution 3.0 Unported License. Usage ----- The usage of this script is extremely simple: $ python3 epo-eng-import.py - `UPSTREAM_DICT`: path to the text dictionary, as distributed by the upstream project - `TEI_SKELETON`: header information; should be taken from the last release and extended with the changes with the newer version. - `OUT_DIR`: output directory, must not exist. Python3 is the name of the Python interpreter. It might be that your systems calls a Python version > 3.x just `python`, then you need to alter the command. Sources ------- The markup of the original Esperanto-English dictionary is hard to parse. The current parser is far from perfect, but it does a fairly good job. I've contacted upstream regarding a patch (Jul 2017), but haven't got a response. Therefore, the changes are recorded in [epo-eng.patch](epo-eng.patch) and can be applied to the epo-eng dictionary released in 2015. The file README.dict is copied as README to the output directory. tools-0.8.0-beta.1/importers/epo-eng/epo-eng-import.py000077500000000000000000000303761526415265400225470ustar00rootroot00000000000000#!/usr/bin/env python3 """This file imports the epo-eng dictionary from . Please see the README for more information.""" import enum import os import sys import urllib.request import xml.sax.saxutils as saxutils # allow tokenizer import from fd_import.tokenizer import ChunkType, tokenize import fd_import class WordType(enum.Enum): Full = '' # normal words Prefix = 'pref' # word prefixes Suffix = 'suff' # :) Part = 'part' # "-x-", so an infix class Definition: #pylint: disable=too-few-public-methods """Only relevant for headwords with no direct translations, they define the headword.""" def __init__(self, definition): self.definition = definition def as_xml(self): return '\n%s\n' % saxutils.escape(self.definition) class Word: #pylint: disable=too-few-public-methods """This is either a head word or a translation.""" def __init__(self, word, usage_info=None): self.word = word # gramGrp is a list of ready-to-use xml strings, basically *one* node self.gramGrp, self.usage_info = self.__get_gram_info(usage_info) self.word_type = type def __repr__(self): return ('%s (%s)' % (self.word, self.usage_info) if self.usage_info else self.word) def __get_gram_info(self, usage_info): """Figure out, whether text is a collocating word or a usage hint. Return tuple ready-to-use XML. """ # special cases: catch collocations collocations = ['for', 'of', 'up', 'to', 'in', 'on', 'by', 'upon', 'ke', 'de', "do"] # esperanto if not usage_info: return (None, None) elif usage_info in collocations: return (['%s' % saxutils.escape(usage_info)], None) else: return (None, '%s' % saxutils.escape(usage_info)) def as_xml(self): xml = ['\n', saxutils.escape(self.word), ''] if self.usage_info: xml.append('\n' + self.usage_info) # already escaped if self.gramGrp: xml.append('\n\n%s\n' % '\n'.join(self.gramGrp)) return ''.join(xml + ['\n']) #pylint: disable=redefined-variable-type class HeadWord(Word): #pylint: disable=too-few-public-methods def __init__(self, word, usg=None): if word.startswith('-') and word.endswith('-'): self.type = WordType.Part elif word.startswith('-'): self.type = WordType.Suffix elif word.endswith('-'): self.type = WordType.Prefix else: self.type = WordType.Full self.word = word.lstrip('-').rstrip('-') super().__init__(self.word, usg) def as_xml(self): extent = '' if not self.type == WordType.Full: extent = ' extent="%s"' % self.type.value orth = '%s' % (extent, saxutils.escape(self.word)) if self.gramGrp: orth += '\n\n%s' % '\n'.join(self.gramGrp) if self.usage_info: orth += '\n' + self.usage_info return '
\n%s\n
' % orth def structure_translations(unordered_list): """Take a list of chunks (see docs of parse_meanings) and return a list of list of words. The outer lists holds different meanings (homonyms) and has in most cases only one entry. The inner list contains objects of type Word.""" translations = [[]] # initialize list with one sense while unordered_list: chunk = unordered_list.pop(0) # test for type of chunk if chunk[0] == ChunkType.Paren: # is this an additional info for a word: if unordered_list and unordered_list[0][0] == ChunkType.Word: translations[-1].append(Word(unordered_list.pop(0)[1], chunk[1])) else: # no next chunk or no word # this is either a parenthesized expression with no word before # or after, then it's a definition; otherwise it's an unhandled # case and a bug if (len(translations) == 1 and not translations[0]) and \ (not unordered_list or unordered_list[0][0] == ChunkType.Comma): # definition translations[-1].append(Definition(chunk[1])) else: print(',',repr(translations)) raise ValueError(("Couldn't parse translations; tokens " "parsed: %s\nCurrent token: %s\nTokens left: %s") % \ (translations,chunk,unordered_list)) elif chunk[0] == ChunkType.Word: # word with usage info / colloc if unordered_list and unordered_list[0][0] == ChunkType.Paren: # in some cases definitions are written as "to (be in) a # position", this is poor markup. ignore those parenthesis and # add it as a whole word: if len(unordered_list) >= 2 and unordered_list[1][0] == ChunkType.Word: translations[-1].append(Word(chunk[1] +" " + \ unordered_list.pop(0)[1] + " " + \ unordered_list.pop(0)[1])) else: translations[-1].append(Word(chunk[1], unordered_list.pop(0)[1])) else: translations[-1].append(Word(chunk[1])) elif chunk[0] == ChunkType.Comma: # new word starts, ignore pass elif chunk[0] == ChunkType.Semicolon: # homonym, new sense translations.append([]) # add brackets and braces verbatim elif chunk[0] in (ChunkType.Bracket, ChunkType.Brace): chars = ('[]' if chunk[0] == ChunkType.Bracket else '{}') # readd translation in bracket/brace, verbatim if translations[-1]: # at least one word found translations[-1][-1].word += ' ' + chars[0] + chunk[1] + chars[1] else: # new word translations[-1].append(Word(chars[0] + chunk[1] + chars[1])) else: raise NotImplementedError("Unhandled case: " + repr(chunk)) return translations def guess_grammar_details(translations): """This function inspects the English translations to infer grammatical information. Definitions starting with "to " are verbs in the infinitive form, etc. The translations might get altered, for instance, to strip the "to " from the actual definition.""" gram = '' firstword = translations[0][0] if isinstance(firstword, Definition): return (None, translations) # don't fiddle around with def's if firstword.word.startswith('to '): gram = 'v' for deflist in translations: for word in deflist: if word.word.startswith('to '): word.word = word.word[3:] # remove wrongly parsed colloc's collocs = ['%s' % c for c in ['to', 'a', 'an']] for deflist in translations: for word in deflist: if word.gramGrp: # it need to have a colloc, otherwise no checks for colloc in collocs: if colloc in word.gramGrp: idx = collocs.index(colloc) del word.gramGrp[idx] return (gram, translations) def translations_to_xml(translations): """Translate nested definition / translation (word) structure into a TEI:sense structure.""" xml = [] for definition_list in translations: if not definition_list: raise ValueError("Found empty translation list; all translations: " \ + repr(translations)) xml.append('') xml.extend(x.as_xml() for x in definition_list) xml.append('') return xml def write_output(input_file, base_dir, tei_skeleton, body_xml): """This writes the imported dictionary into the specified directory.""" print("Writing TEI dictionary…") with open(tei_skeleton, 'r', encoding='utf-8') as f: header = f.read() body_start = header.find('') + 6 tei_file = os.path.join(base_dir, 'epo-eng.tei') if not os.path.exists(base_dir): os.mkdir(base_dir) with open(tei_file, 'w', encoding='utf-8') as f: f.write(header[:body_start] + '\n') f.write(body_xml) f.write(header[body_start+1:].lstrip().rstrip() + '\n') fd_import.output.reindent_xml(tei_file) if not os.path.exists(os.path.join(base_dir, 'COPYING')): # retrieve copyright information print("Downloading CC unported 3.0 license") with open(os.path.join(base_dir, 'COPYING'), 'wb') as f: req = req = urllib.request.Request( 'https://creativecommons.org/licenses/by/3.0/legalcode.txt', data=None, headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0' }) with urllib.request.urlopen(req) as u: f.write(u.read()) # write Makefile fd_import.output.mk_makefile(base_dir, ['epo-eng.tei', 'epo-eng.patch']) def main(input_file, tei_skeleton, output_directory): print("Parsing dictionary…") with open(input_file, 'r', encoding='utf-8-sig') as f: # gnerator with word pairs; ignore indented lines (only file header, # ATM) words = (wp for wp in f.read().split('\n') if wp.strip() and not wp.startswith(" ")) word_list = [] for lnum, word_pair in enumerate(words): if word_pair.lstrip().startswith("#"): continue try: head, trans = word_pair.split(' : ') translations = tokenize(trans) translations = structure_translations(translations) head = tokenize(head) if len(head) == 2: # headword with definition head = HeadWord(head[0][1], head[1][1]) else: head = HeadWord(head[0][1]) word_list.append((head, translations)) except ValueError as v: raise ValueError(f"line {lnum+1}: {''.join(v.args)}") # enrich words with grammatical info, strip "to" and other words *and* # convert to XML xml = [] for head, trans in word_list: # translations might get altered, e.g. "to" is stripped gram, trans = guess_grammar_details(trans) xml += ['', head.as_xml()] if gram: xml.append('\n%s\n' % gram) xml += translations_to_xml(trans) + [''] write_output(input_file, output_directory, tei_skeleton, '\n'.join(xml)) print("Done. Now it's time to copy DTD, CSS and RNG and validate the dictionary.") def check_args(): """command line parameter validation""" if len(sys.argv) != 4: print("Error: invalid command line parameters.") import textwrap print("Usage: %s \n "\ % sys.argv[0], end="") print('\n '.join(textwrap.wrap(("TEI SKELETON has to be a FreeDict TEI file, with an empty " "body tag. The opening and closing body tags have to be on " "separate lines.\n" "The output directory may exist and files will be overwritten, " "as necessary."), 78))) sys.exit(1) if not os.environ['FREEDICT_TOOLS']: print("The environment variable FREEDICT_TOOLS is not set.") print("This is mandatory, so that the necessary scripts can be located.") print("Have a look at the FreeDict wiki for more information:") print("https://github.com/freedict/fd-dictionaries/wiki") sys.exit(4) for file in sys.argv[1:3]: if not os.path.exists(file): print('Sorry, but the file "%s" does not exist.' % file) sys.exit(2) dictdir = os.path.basename(os.path.abspath(sys.argv[3])) if not len(dictdir) == 7 or '-' not in dictdir: print("The output directory has to be named with the usual FreeDict naming scheme. Otherwise, the Make rules will fail.") sys.exit(5) if __name__ == '__main__': check_args() main(sys.argv[1], sys.argv[2], sys.argv[3]) tools-0.8.0-beta.1/importers/epo-eng/epo-eng.patch000066400000000000000000000106551526415265400217010ustar00rootroot00000000000000--- espdic.orig 2026-05-23 19:08:29.762970112 +0300 +++ espdic.txt 2026-05-24 14:12:05.914321884 +0300 @@ -1460,7 +1460,7 @@ agordi�emo : manageability, tractability agordi�i : to be tuned (up) agordilaro : control panel -agordilo : configurator, tuner (device), tuning fork, setup program, (software), wizard (software), assistant (installation) +agordilo : configurator, tuner (device), tuning fork, setup program (software), wizard (software), assistant (installation) agordindikoj al la fenestroadministrilo : window manager hints agordinformoj : configuration information agordisto : tuner (person) @@ -7706,7 +7706,7 @@ batraka : batrachian batrako : batrachian batrakoj : anura -batsono : (sound of) striking (of a clock) +batsono : striking (sound of a clock) batuo : battue, hunt, shoot Batuo : Batu baŭdo : baud @@ -11742,7 +11742,7 @@ ĉu ... aŭ : whether ... or ĉu bone aŭ malbone : for better or for worse ĉu ... ĉu : whether ... or, whether ... whether -ĉu : either, if, is it, whether, (asks a question) +ĉu : either, if, is it, whether Ĉukĉa Duoninsulo : Chukot(ski) Peninsula Ĉukĉa Maro : Chukchee Sea ĉukĉo : Chukchi man @@ -26241,7 +26241,7 @@ inviti�i : to be invited invitilo : invitation, prompt inviti : to invite -invito : bidding, invitation, (command), prompt +invito : bidding, invitation, prompt involucia : involuntary involucie : involuntarily involucio : involution @@ -32611,7 +32611,7 @@ kutimita : accustomed to, used to kutimi : to accustom, be accustomed to, be in the habit of kutimo : custom, habit, way, practice, routine -kutimulo : (a) regular (guest, customer, etc.) +kutimulo : regular (guest, customer, etc.) kutro : cutter kuvajta : Kuwaiti kuvajtano : Kuwaiti @@ -37993,7 +37993,7 @@ memriproĉo : compunction, remorse, self-reproach memsaniga : self-healing memsaniga teknologio : self-healing technology -mem : self, (puts emphasis on the noun or pronoun it follows) +mem : self (puts emphasis on the noun or pronoun it follows) memserva : self-service memserva vendejo : supermarket memsignado : autonymy @@ -38672,7 +38672,7 @@ minidisko : MD, MiniDisc minikamerao : minicamera minimuma : minimal, minimum -minimume : at (the) least +minimume : at least, at the least minimumejo : point of minimum minimumiganto : point of minimum minimumigi : to minimize @@ -38729,7 +38729,7 @@ mi opinias same : I’m of the same opinion miopsito : monk parakeet, quaker parrot miosotono : water chickweed -mio : (the) self, one’s self +mio : self, the self, one’s self miozoto : forget-me-not, myosotis mi pensu : Let me think mi petas : please, you’re welcome @@ -42480,7 +42480,7 @@ oke : eighthly ok : eight okej : agreed, okay -okera voko : (the) eightfold path (of Buddhism) +okera voko : eightfold path (of Buddhism) Okinavo : Okinawa oklahomano : Oklahoman oklahoma : Oklahoman @@ -44942,7 +44942,7 @@ pezo : significance, weight Pfalzo : Palatinate pfenigo : pfennig -PGKD : (plej granda komuna divizoro) GCD (greatest common denominator) +PGKD (plej granda komuna divizoro) : GCD (greatest common denominator) p� : pa�o piamatro : pia mater pianisto : pianist @@ -46385,7 +46385,7 @@ porkocervo : babirusa, deer-hog porkograso : lard porko : hog, pig, swine -porkomerca : (for) commercial (use, purposes) +porkomerca : commercial (use, purposes) por komuna bono : for the common good porkostalo : sty porkstalo : sty @@ -47283,7 +47283,7 @@ pridiskuti : to discuss pridisputi : to argue, dispute, query, question pridubebla : doubtful -pridubi : to (cast) doubt (upon) +pridubi : to doubt, to cast doubt (upon) prienketi : to investigate prierara : error, about errors prierara raportilo : error report tool @@ -51072,7 +51072,7 @@ ronda ekkrampo : opening parenthesis, “(� ronda finkrampo : closing parenthesis, “)� ronda hoketo : breve -rondaj krampoj : round parentheses, () +rondaj krampoj : round parentheses "()" ronda kanao : hiragana ronda krampo : parenthesis, round bracket ronda : round @@ -63732,7 +63732,7 @@ kontraŭrevoluciulo : counter-revolutionary kiel ofte okazis : as often happened estreco : leadership -netu�eblulo ; untouchable (person) +netu�eblulo : untouchable (person) en proksimeco al : in the vicinity of, near to laŭ la supozo ke : supposing that nanaspektigi : to dwarf (something), make something appear very small tools-0.8.0-beta.1/importers/epo-eng/header.tei000066400000000000000000000062121526415265400212530ustar00rootroot00000000000000 Esperanto-English FreeDict dictionary created by Paul Denisowski Maintainer Sebastian Humenda <shumenda at gmx dot de> 2024.10.06+fd1 63895 headwords FreeDict

Available under the terms of the the Creative Commons Attribution 3.0 Unported License.

24th of May 2026 http://freedict.org/
big enough to be useful

This dictionary has been parsed from a plain text file. Although the parser attempts to be clever, it might well be that certain text fragments are categorized as grammatical information, or vice versa. Please report these issues to the maintainer or to the FreeDict project.

The original dictionary has been changed at a few places. These changes are mostly to make the dictionary better parseable.

The dictionary was downloaded from http://www.denisowski.org/Esperanto/ESPDIC/espdic_readme.htm

This dictionary comes to you through nice people making it available for free and for good. It is part of the FreeDict project, http://www.freedict.org. This project aims to make many translating dictionaries available for free. Your contributions are welcome!

Import new version dated 2024-10-06. Thanks to Teemu Hukkanen for updating the patch and for adjusting importer to new file. The importer script omitted characters at the beginning of words, if a headword started with "to". The newly imported versions has fixed this bug. Initial conversion of the dictionary. At the moment, the dictionary needs a bit of patching to be transformed correctly. When there's enough interest, that might hchange.
tools-0.8.0-beta.1/importers/fd_import/000077500000000000000000000000001526415265400177505ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/fd_import/README000066400000000000000000000002341526415265400206270ustar00rootroot00000000000000This is a common module for tokenizing text-only dictionaries. It is written in Python and documented in the source code. Please start reading __init__.py. tools-0.8.0-beta.1/importers/fd_import/__init__.py000066400000000000000000000004021526415265400220550ustar00rootroot00000000000000"""This is a dummy file, so that this directory can be used as a module. The actual magic should *always* happen in tokenizer.py. Tests.py is a stand-alone test suite and does, really, tests.""" from . import output, tokenizer from . import output, output tools-0.8.0-beta.1/importers/fd_import/output.py000066400000000000000000000070531526415265400216670ustar00rootroot00000000000000"""This module contains functions to write all accompanying files for the dictionary, e.g. license or README.""" import os import re import shutil import sys import textwrap import xml.dom.minidom class OutputError(Exception): pass def copy_readme(input_file, output_directory): """When a README is found in the same directory as `input_file`, the file is copied to OUTPUT_DIRECTORY. The input file has to be called "README.xxx-yyy" or "README.xxx-yyy.EXT", where ext is anarbitrari file extension and xxx-yyy a ISO 6639-3 three-letter language code.""" full_input = os.path.abspath(input_file) input_file = os.path.basename(input_file) input_dir = os.path.dirname(full_input) iso_code = re.search('^([a-z]{3}-[a-z]{3})', input_file) if not iso_code: raise OutputError(('%s does not follow the "xxx-yyy.EXT" ' 'naming convention.') % input_file) iso_code = iso_code.groups()[0] readme = None for match in (re.search('^README.([a-z]{3}-[a-z]{3}).*', f) for f in os.listdir(input_dir)): if not match: continue if match.groups()[0] == iso_code: readme = match.string break if readme: shutil.copy(os.path.join(input_dir, readme), os.path.join(output_directory, 'README.md')) else: raise OutputError("No README found.") def mk_makefile(output_path, additional_files=None): readme = [f for f in os.listdir(output_path) if f.lower().startswith('readme')] if readme: if not additional_files: additional_files = [] additional_files.append(readme[0]) additional_files = ('' if not additional_files else ' '.join(additional_files)) with open(os.path.join(output_path, 'Makefile'), 'w', encoding='utf-8') as f: f.write("""# The line below is really just a fallback and only works if you have got a copy # of the tools directory at this location. It's better to set the environment # variable in your shell. FREEDICT_TOOLS ?= ../../tools DISTFILES = COPYING %s \ freedict-P5.xml freedict-P5.rng freedict-P5.dtd freedict-dictionary.css\ INSTALL Makefile NEWS # do not generate phonemes supported_phonetics = include $(FREEDICT_TOOLS)/mk/dicts.mk """ % additional_files) def reindent_xml(file_name): """Reindent an XML file with Python's minidom package. Please note that this will likely use a large amount of main memory.""" try: tree = xml.dom.minidom.parse(file_name) with open(file_name, 'w', encoding='utf-8') as f: reindented = tree.toprettyxml(indent=" ") # avoid multiple empty lines, inserted by minidom f.write('\n'.join(l for l in reindented.split('\n') if l.strip())) except MemoryError: print("Unable to reindent file using Python's minidom module.") if shutil.which('xmllint'): print("Using xmllint for reindentation.") ret = os.system('xmllint --format {0} > {0}.tmp'.format(file_name)) if ret: print("Aborting.") sys.exit(21) with open(file_name + '.tmp', encoding='utf-8') as infile: with open(file_name, 'w', encoding='utf-8') as out: out.write(infile.read()) os.remove(file_name + '.tmp') else: print('\n'.join(textwrap.wrap(("Please install xmllint as a fallback (this " "script will automatically use it) or use some other magic to " "increase the available main memory."), 78))) sys.exit(9) tools-0.8.0-beta.1/importers/fd_import/tests.py000066400000000000000000000121251526415265400214650ustar00rootroot00000000000000#pylint: disable=too-many-public-methods,import-error,too-few-public-methods,missing-docstring,unused-variable,multiple-imports import unittest import tokenizer as tk from tokenizer import ChunkType class tests(unittest.TestCase): def test_commas_are_detected(self): chunks = tk.tokenize('foo, bar') self.assertEqual(len(chunks), 3) self.assertEqual(chunks[0][0], ChunkType.Word) self.assertEqual(chunks[1][0], ChunkType.Comma) self.assertEqual(chunks[2][0], ChunkType.Word) def test_semicolons_are_detected(self): chunks = tk.tokenize('foo; bar') self.assertEqual(len(chunks), 3) self.assertEqual(chunks[0][0], ChunkType.Word) self.assertEqual(chunks[1][0], ChunkType.Semicolon) self.assertEqual(chunks[2][0], ChunkType.Word) def test_vert_bar_detected(self): chunks = tk.tokenize('foo | bar') self.assertEqual(len(chunks), 3) self.assertEqual(chunks[0][0], ChunkType.Word) self.assertEqual(chunks[1][0], ChunkType.VerticalBar) self.assertEqual(chunks[2][0], ChunkType.Word) def test_parenthesized_expressions_parsed_corretly(self): tks = tk.tokenize('test (the) behaviour') self.assertEqual(len(tks), 3) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Paren) self.assertEqual(tks[1][1], 'the') self.assertEqual(tks[2][0], ChunkType.Word) # now paren at beginning tks = tk.tokenize('(the) behaviour') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Paren) self.assertEqual(tks[0][1], 'the') self.assertEqual(tks[1][0], ChunkType.Word) # now at the end tks = tk.tokenize('fond (of)') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Paren) self.assertEqual(tks[1][1], 'of') def test_braces_recognized(self): tks = tk.tokenize('test {blah} behaviour') self.assertEqual(len(tks), 3) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Brace) self.assertEqual(tks[1][1], 'blah') self.assertEqual(tks[2][0], ChunkType.Word) # now paren at beginning tks = tk.tokenize('{schnurp} xyz') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Brace) self.assertEqual(tks[1][0], ChunkType.Word) self.assertEqual(tks[0][1], 'schnurp') # now at the end tks = tk.tokenize('Fleisch {n}') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Brace) self.assertEqual(tks[1][1], 'n') def test_brackets_recognized(self): tks = tk.tokenize('test [Br.] behaviour') self.assertEqual(len(tks), 3) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Bracket) self.assertEqual(tks[1][1], 'Br.') self.assertEqual(tks[2][0], ChunkType.Word) # now paren at beginning tks = tk.tokenize('[zool.] xyz') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Bracket) self.assertEqual(tks[1][0], ChunkType.Word) self.assertEqual(tks[0][1], 'zool.') # now at the end tks = tk.tokenize('Fleisch [bot.]') self.assertEqual(len(tks), 2) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[1][0], ChunkType.Bracket) self.assertEqual(tks[1][1], 'bot.') def test_enclosing_chars_have_precedence_over_delimiters(self): tks = tk.tokenize('(a,b;c|d/e) {a,b;c|d/e} [a,b;c|d/e]') self.assertEqual(len(tks), 3) for chunk in tks: self.assertEqual(chunk[1], 'a,b;c|d/e') # test slash tks = tk.tokenize('x /a,b;c|d/ y', parse_slash=True) self.assertEqual(len(tks), 3) self.assertEqual(tks[1][1], 'a,b;c|d') def test_paren_or_slashes_in_words_ignored(self): tks = tk.tokenize('house(s), Häuser/innen', parse_slash=True) self.assertEqual(len(tks), 3) self.assertEqual(tks[0][0], ChunkType.Word) self.assertEqual(tks[2][0], ChunkType.Word) def test_slash_within_paren_works(self): tks = tk.tokenize('(my/example)') self.assertEqual(len(tks), 1) self.assertEqual(tks[0][0], ChunkType.Paren) tks = tk.tokenize('(my/example)', parse_slash=True) self.assertEqual(len(tks), 1, "expected one element, got: " + repr(tks)) self.assertEqual(tks[0][0], ChunkType.Paren) def test_only_expressions_with_no_spaces_withing_slash_slash_parsed(self): print("===") tks = tk.tokenize('/AB/', parse_slash=True) print("---") self.assertEqual(len(tks), 1) self.assertEqual(tks[0][0], ChunkType.Slash) tks = tk.tokenize('A / B/', parse_slash=True) self.assertEqual(len(tks), 1) self.assertEqual(tks[0][0], ChunkType.Word) if __name__ == '__main__': unittest.main() tools-0.8.0-beta.1/importers/fd_import/tokenizer.py000066400000000000000000000136441526415265400223440ustar00rootroot00000000000000"""Tokenizer for text-only dictionary formats. To use this library, add your dictionary importer as a subdirectory to importers/. Assuming you have an immporter in importers/foo, you would add the following snippet to your foo.py to use this module: from os.path import abspath, dirname import sys sys.path.append(dirname(dirname(abspath(sys.argv[0])))) import tokenizer For the usage, please see the functions and classes defined in this module.""" import enum import inspect class ChunkType(enum.Enum): """The tokenizer parses individual chunks and emits tuples with type information and chunk content. The first entry is the chunk type, as defined by this enum.""" Word = 0 Paren = 1 # parenthesized expressions () Bracket = 2 # brackets [] Brace = 3 # "embraced" expressions: {} Semicolon = 4 # delimiter, e.g. homonyms Comma = 5 # word/definition boundary VerticalBar = 6 # has to be surrounded by spaces, is a delimiter as e.g. comma Slash = 7 # optional; example usage include abbreviations "/ETC/" def __repr__(self): return '<%s.%s>' % (self.__class__.__name__, self.name) def space_before_slash(string, i): """The tokenizer can recognize chunks enclosed by slashes. To avoid to many false positives, only expressions with no space are supported, ATM. This functions checks whether a space is found before the next slash.""" for ch in string[i+1:]: # skip first character, is the very slash if ch.isspace(): return True elif ch == '/': return False return True # end of string reached, is like a space FRAMING = {'(': ChunkType.Paren, '[': ChunkType.Bracket, '{': ChunkType.Brace} CLOSING = {')':'(', '}':'{', ']':'['} def tokenize(source, parse_slash=False): #pylint: disable=redefined-variable-type,too-many-branches """Tokenize a line (of translations) into chunks, where each chunk is a tuple of (ChunkType, content). This only works with either the headword or the translation part, so instead of: abc - a, b; c It either parses "abc" or "a, b; c". Chunk types with no value (as for instance Comma) return a tuple with None as second element. Parenthesis have precedence over commas and ;. So a, b (c,;d) will be tokenized as [(Word, 'a'), (Comma, None), (Word, 'b'), (Paren, 'c,;d')] The prefix ChunkType has been omitted for readibility reasons. This precedence rule also means that nested structures are *not* recognized, the outer wins. This won't work: ([(blah)]) will result in [(Paren, '[(blah'), (Word, '])')] """ chunks = [] tmp_storage = [] # for unfinished chunks def save_parsed_chunk(ctype): """Save tmp_storage in chunks with the given type. This function is a short-hand.""" nonlocal chunks, tmp_storage if not all(c.isspace() for c in tmp_storage): chunks.append((ctype, ''.join(tmp_storage).strip())) tmp_storage = [] state = ChunkType.Word # current state of parser (ChunkType) prevchar = '' is_new_word = lambda: prevchar == '' or prevchar.isspace() for idx, ch in enumerate(source): if state in FRAMING.values() or (parse_slash and state == ChunkType.Slash): if ch in CLOSING and state == FRAMING[CLOSING[ch]]: save_parsed_chunk(FRAMING[CLOSING[ch]]) state = ChunkType.Word elif ch == '/' and state == ChunkType.Slash and parse_slash: save_parsed_chunk(ChunkType.Slash) state = ChunkType.Word else: # within the brace/bracket/parethesis tmp_storage.append(ch) else: # ChunkType.Word # separate a enclosed expression if preceded by whitespace / # beginning of string; handle slash separately if is_new_word() and (ch in FRAMING or (parse_slash and \ ch == '/' and not space_before_slash(source, idx))): # above tests that / is followed by characters only, no spaces # and hence no straying slashes are detected if ch == '/' and parse_slash: state = ChunkType.Slash else: state = FRAMING[ch] if tmp_storage: # add word before, if any save_parsed_chunk(ChunkType.Word) # only recognize /foo/ if parse_slash and if space in front elif ch == ',': # comma outside of parens, new word if tmp_storage: # not empty save_parsed_chunk(ChunkType.Word) chunks.append((ChunkType.Comma, None)) elif ch == ';': if tmp_storage: # not empty save_parsed_chunk(ChunkType.Word) chunks.append((ChunkType.Semicolon, None)) elif ch == '|' and (prevchar == '' or prevchar.isspace()): # space around? if tmp_storage: # not empty save_parsed_chunk(ChunkType.Word) chunks.append((ChunkType.VerticalBar, None)) else: tmp_storage.append(ch) prevchar = ch if tmp_storage: save_parsed_chunk(ChunkType.Word) return chunks def split_list(mylist, delim): """Split a list into chunks with the given delimiter. If a delimiter is a function, it will get the list item as function and has to return true if a split should occur. Returned is an iterator, yielding a chunk at a time. Examples: >>> list(split_list([1,2,3,2,4,5,2,2,10], 2)) [[1],[3],[4,5],[],10]] >>> list(split_list([])) [] >>> list(split_list([1,2,3,4], 20)) [[1,2,3,4]]""" if not mylist: return [] gathered = [] is_splitpoint = (delim if inspect.isfunction(delim) else lambda e: e == delim) for elem in mylist: if is_splitpoint(elem): yield gathered gathered = [] else: gathered.append(elem) yield gathered tools-0.8.0-beta.1/importers/hin-eng/000077500000000000000000000000001526415265400173125ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/hin-eng/README.md000066400000000000000000000050101526415265400205650ustar00rootroot00000000000000This importer is for the hin-eng dictionary only. The dictionary was created by the Computation for Indian Language Technology (CFILT) at the Indian Institute of Technology, Bombay. The dictionary is called The Hindi Universal Word (UW) and is released under GNU FDL. # Dependencies: - uv - requests library # Usage: ```bash uv venv .venv --python 3.14 && source .venv/bin/activate && uv pip install requests python hin-eng.py ``` # Functionality: The script will automatically download the dictionary from [https://www.cfilt.iitb.ac.in/~hdict/webinterface_user/download.php?get=UW_Hindi_Dict_20131003.zip](https://www.cfilt.iitb.ac.in/~hdict/webinterface_user/download.php?get=UW_Hindi_Dict_20131003.zip) and create a .tei file. # Formatting problems in original file that get fixed by the parser - a few linebreak even though there should be none - attributes/pos-tags sometimes have a "." which should be "," - one time V-tag is spelled small. - one time certain tags are spelled small (ADj instead of ADJ): i am assuming they are the same - missing 67ish pos-tags: tei file gets filled with empty pos tag - sometimes H,0,0> instead of - Original line format changes sometimes ``` [HINDIWORD] {} "ENGLISHWORD(SEMANTIC_RULES)" (TAGS) ;SAMPLE [HINDIWORD] {} "ENGLISHWORD" (SEMANTIC_RULES) ; [HINDIWORD] {} "ENGLISHWORD" (TAGS) ; [HINDIWORD] {} "ENGLISHWORD(SEMANTIC_RULES)" (OTHER_SEMANTIC_RULES) ;' [HINDIWORD] {}"ENGLISHWORD(TAGS)H,0,0>;SAMPLE ``` which made parsing complex and will probably be difficult to understand/debug. # Questions 1. Some hindi words occur multiple times with the same surface string and have multiple senses / different translations, but some semantic rules/restrictions (e.g. obj>school) are different. For now I just added all the translations and added a with the semantics/contexts. A possible next step would be to group the same translations together and have multiple -tags? How should this be handled? 2. The dictionary is hin-eng. Can I also write a script that switches it to eng-hin? 3. There are 40 empty Hindi word entries, that only have an english translation I am skipping them. is that fine? 4. some entries have "***" in the string. I am not changing that but it adds noise. # Include unused information - a lot of semantics/context restrictions are still unused. if a word is only used in certain contexts (currently as ) and needs further parsing - a lot of custom pos-tags /custom tags: INTJ ADV-PHRASE INDC are also available. tools-0.8.0-beta.1/importers/hin-eng/header.tei000066400000000000000000000054311526415265400212500ustar00rootroot00000000000000 English-Hindi FreeDict dictionary created by Florian Babl Maintainer Florian Babl< 2024.10.06+fd1 headwords FreeDict

Available under the terms of the GNU Free Documentation License .

8th of August 2026 http://freedict.org/
big enough to be useful

This dictionary has been parsed from a plain text file. Please report these issues to the maintainer or to the FreeDict project.

The dictionary was downloaded from https://www.cfilt.iitb.ac.in/~hdict/webinterface_user/download.php?get=UW_Hindi_Dict_20131003.zip

This dictionary comes to you through nice people making it available for free and for good. It is part of the FreeDict project, http://www.freedict.org. This project aims to make many translating dictionaries available for free. Your contributions are welcome!

Import new version dated 2024-10-06. Thanks to Teemu Hukkanen for updating the patch and for adjusting importer to new file. The importer script omitted characters at the beginning of words, if a headword started with "to". The newly imported versions has fixed this bug. Initial conversion of the dictionary. At the moment, the dictionary needs a bit of patching to be transformed correctly. When there's enough interest, that might hchange.
tools-0.8.0-beta.1/importers/hin-eng/hin-eng.py000066400000000000000000000222171526415265400212150ustar00rootroot00000000000000""" This script converts the https://www.cfilt.iitb.ac.in/~hdict/webinterface_user/download.php?get=UW_Hindi_Dict_20131003.zip to TEI5 required format. """ import dataclasses import argparse import os import zipfile from collections import defaultdict from pathlib import Path import xml.etree.ElementTree as ET import requests HINDIDICT = True URL = "https://www.cfilt.iitb.ac.in/~hdict/webinterface_user/download.php?get=UW_Hindi_Dict_20131003.zip" ZIPFILE = "UW_Hindi_Dict_20131003.zip" DICTFOLDER = "UW_Hindi_Dict_20131003" TEI_FILE = "header.tei" POS_TAG_MAPPING = { "CONJ": "conj", "N": "n", "ADJ": "adj", "V": "v", "ADV": "adv", "PREP": "prep", "PRON": "pron", } GENDER_MAPPING = { "M": "m", "F": "f", } OUTPUT_FILE = "hin-eng.tei" class Stats: attributes: set[str] = set() semantics: set[str] = set() def add(self, entry: Entry) -> None: self.attributes.update(entry.attributes) self.semantics.update(entry.semantics) @dataclasses.dataclass class Translation: lang: str meaning: str @dataclasses.dataclass class Entry: head: str lang: str translation: Translation semantics: str attributes: list[str] sample: str pos_tag: str = dataclasses.field(default="", init=False) gender: str = dataclasses.field(default="", init=False) def __post_init__(self) -> None: self.parse_attributes() def __str__(self) -> str: return ( f"Head: {self.head}\n" f"Translation: {self.translation}\n" f"Attributes: {self.attributes}\n" f"Semantics: {self.semantics}\n" ) def __eq__(self, other: object) -> bool: if not isinstance(other, Entry): return NotImplemented return (self.pos_tag, self.head, self.gender) == ( other.pos_tag, other.head, other.gender, ) def __hash__(self) -> int: return hash((self.pos_tag + "_" + self.head + "_" + self.gender)) def get_id(self) -> str: res = "" if self.pos_tag: res += self.pos_tag + "_" res += self.head if self.gender: res += self.gender + "_" return res.replace(" ", "_") def parse_attributes(self) -> None: if self.attributes[0].upper() in POS_TAG_MAPPING: self.pos_tag = POS_TAG_MAPPING[self.attributes[0].upper()] if len(self.attributes) <= 1 or self.pos_tag == "v": return for i, attr in enumerate(self.attributes[1:]): if attr in GENDER_MAPPING: self.gender = GENDER_MAPPING[attr] break def download_zipfile() -> None: headers = { "User-Agent": "curl/8.0.1", } r = requests.get( URL, headers=headers, timeout=30, allow_redirects=False, ) with open(ZIPFILE, "wb") as f: f.write(r.content) unzip() def unzip() -> None: zip_ref = zipfile.ZipFile(ZIPFILE, "r") zip_ref.extractall(DICTFOLDER) zip_ref.close() def save_tei_file() -> None: pass def create_xml(entries: defaultdict[Entry, list[Entry]]) -> None: print("Creating xml/tei file...") ns = {"tei": "http://www.tei-c.org/ns/1.0"} tree = ET.parse(TEI_FILE) root = tree.getroot() body = root.find(".//tei:body", ns) if body is None: return # todo take care of cases, (is verb gender different?), Plural sing, 1-3 person # key entry is also in other! for i, (key_entry, other) in enumerate(entries.items()): xml_id = key_entry.get_id() entry_elem = ET.SubElement( body, "entry", attrib={"xml:id": xml_id, "xml:lang": "en"} ) form_elem = ET.SubElement(entry_elem, "form", attrib={"xml:lang": "hin"}) orth_elem = ET.SubElement(form_elem, "orth") orth_elem.text = key_entry.head # create gramgroup gramGrp_elem = ET.SubElement( entry_elem, "gramGrp", ) pos_elem = ET.SubElement(gramGrp_elem, "pos") pos_elem.text = key_entry.pos_tag # todo handle etc if key_entry.gender: gender_elem = ET.SubElement(gramGrp_elem, "gender") gender_elem.text = key_entry.gender # todo handle multiple senses for translation in translations sense_elem = ET.SubElement(entry_elem, "sense") for entry in other: cit_type_elem = ET.SubElement(sense_elem, "cit", attrib={"type": "trans"}) quote_elem = ET.SubElement(cit_type_elem, "quote") quote_elem.text = entry.translation.meaning if entry.semantics: usage_elem = ET.SubElement(sense_elem, "usg", attrib={"type": "hint"}) usage_elem.text = entry.semantics # TODO maybe change? if entry.sample: cit_example_elem = ET.SubElement( sense_elem, "cit", attrib={"type": "example"} ) sample_elem = ET.SubElement(cit_example_elem, "quote") sample_elem.text = entry.sample ET.indent(tree, space=" ", level=0) tree.write( OUTPUT_FILE, encoding="utf-8", xml_declaration=True, ) print(f"Wrote {OUTPUT_FILE}") def _get_translation(line: str) -> tuple[str, int]: translation = line.split('"', maxsplit=2)[1] if ( "<" in translation or ">" in translation or "(" in translation or ")" in translation ): # semantic rules present translation = translation.split("(", maxsplit=1)[0] translation = translation.strip('"') if translation == "": return translation, 0 return translation, line.find(translation) + len(translation) def _get_semantic_restriction(line: str, index: int) -> tuple[str, int]: if "(" in line[index:]: sr = line[index:].split("(", maxsplit=1)[1] else: # rare format: [HINDI]{}"ENGLISH"TAGS); sr = line[index:].split(")", maxsplit=1)[0].strip('"') sr = sr.split(")", maxsplit=1)[0] i = line.find(sr) + len(sr) if ">" not in sr and "<" not in sr and "icl>" not in sr: # actually a POSTAG!!! sr = "" i = 0 return sr.strip("("), i def _get_attributes(line: str, index: int) -> tuple[str, int]: if "(" in line[index:]: attributes = line[index:].split("(", maxsplit=1)[1] else: _tmp = line[index:].split("H,0,0>;")[0].strip("<") if '"' in _tmp: # special weird case '{}"ENGLISH"ATTRIBUTES); attributes = _tmp.split('"', maxsplit=1)[1].strip(")") return attributes, line.find(attributes) + len(attributes) else: # there were only semantics no attribute return "", 0 attributes = attributes.split(")", maxsplit=1)[0] i = line.find(attributes) + len(attributes) if attributes == "": i = 0 return attributes, i def parse_line(line: str, stats: Stats) -> Entry | None: """ Parse each line into an entry by splitting. """ head, line = line.split("]", maxsplit=1) head = head.strip("[") if head == "": return None translation, index = _get_translation(line) semantics, index = _get_semantic_restriction(line, index) attributes, index = _get_attributes(line, index) sample = line.rsplit(">;", maxsplit=1)[1] entry = Entry( head=head, lang="hin", translation=Translation(lang="en", meaning=translation), semantics=semantics, attributes=attributes.replace(".", ",").split(","), sample=sample, ) stats.add(entry) # TODO remove return entry def iterate_files() -> list[Entry]: entries = [] stats = Stats() print("Reading files...") for file in os.listdir(DICTFOLDER): with open(DICTFOLDER + "/" + file, "r") as f: if not file.endswith(".txt"): continue old_line = "" for line in f: line = ( line.strip() .replace("�", '"') .replace("\ufeff", "") .replace("\u200b", "") ) if "H,0,0>;" not in line: old_line += line continue if old_line: old_line += line line = old_line entry = parse_line(line, stats) if entry is None: continue entries.append(entry) old_line = "" return entries def convert2dict(entries: list[Entry]) -> defaultdict[Entry, list[Entry]]: from collections import defaultdict dictionary: defaultdict[Entry, list[Entry]] = defaultdict(list) for entry in entries: dictionary[entry].append(entry) return dictionary def run() -> None: if not os.path.exists(DICTFOLDER) or len(os.listdir(DICTFOLDER)) == 0: download_zipfile() entries = iterate_files() dictionary = convert2dict(entries) create_xml(dictionary) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--path", type=Path, default="UW_Hindi_Dict_20131003") args = parser.parse_args() run() tools-0.8.0-beta.1/importers/pyproject.toml000066400000000000000000000005131526415265400207000ustar00rootroot00000000000000[project] name = "fd_import" version = "0.1" description = "FreeDict parser and dictionary import helpers" classifiers = [ "License :: GPL-3.0-or-later", ] requires-python = ">=3.12" [tool.setuptools.packages.find] include = ["fd_import*"] [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" tools-0.8.0-beta.1/importers/setup.cfg000066400000000000000000000003061526415265400176050ustar00rootroot00000000000000[metadata] name = "fd_import version = 0.1.0 description = FreeDict tooling for the build system [options] zip_safe = False include_package_data = True packages = fd_import #package_dir=fd_import tools-0.8.0-beta.1/importers/setup.py000066400000000000000000000000461526415265400174770ustar00rootroot00000000000000from setuptools import setup setup() tools-0.8.0-beta.1/importers/tei-p4/000077500000000000000000000000001526415265400170675ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/tei-p4/README000066400000000000000000000003601526415265400177460ustar00rootroot00000000000000This directory contains importer scripts which are not used anymore. These convert into the old TEI p4 format. If you feel they could be useful again, please update the output bits in those scripts and give them a directory above this one. tools-0.8.0-beta.1/importers/tei-p4/dict2tei.py000077500000000000000000000200611526415265400211520ustar00rootroot00000000000000#!/usr/bin/python # Written by Petergozz, Jan 2004 # # micha137: renamed from dict2xml.py # ## todo GPL 2+ ## ##### THIS IS ALPHA LEVEL NOT FOR PRODUCTION USE ########### ####### Requires Python2.3 or later ########################### ## TODO will need TEI header > proper tei stuff too !! ## d2X_write_tei_header() (not here) ## TODO add detect for .dz files and uncompress ## (if tools on board if not .. explore the gzip modules :) ## dz is a modded version of gzip so _might_ be doable ? import sys import time import os import string import re #cool new way to do getopts :) #import optparse from optparse import OptionParser, OptionGroup # # Globals # VERSION = "-0.1.1" chatty = None app = os.path.basename(sys.argv[0]) start_time = time.asctime() # # regex defs (pre-compiles) these are used in d2x_format_xml # rex_hdwd = re.compile('^\w.*$') #Headword starts with anything not a white space rex_descpt = re.compile('^\s\s+.*$') #Description starts with more than one white space ## TODO add matches for parts of speech pronunciation etc. here hmm more command line options ... ## TODO add matches for file names here (to autogen out names) ## TODO add matches for 00-data etc for dictd headers (possibly) def d2x_getInput(): d2x_usage = '%prog -f dictfile [options]\n\n Defaults are provided for _everything_ except the dictfmt FILE to read from ' cl_parser = OptionParser(d2x_usage, version="%prog"+VERSION ) cl_parser.add_option("-f", "--file", type="string", action="store", dest="readfile", help="read dictfmt file from FILENAME" ) cl_parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Tell me whats going on. ") cl_parser.add_option("-o", "--out", type="string", action="store", dest="writefile", default="dicttei.xml", help="write TEI/XML format file to FILENAME" ) groupDocT = OptionGroup( cl_parser, "Advanced Options for changing the DOCTYPE", "Use these to set a doctype string that works for your system") groupDocT.add_option("-s", "--dtdsys", type="string", action="store", dest="DTDsys",default='http://www.tei-c.org/Guidelines/DTD/tei2.dtd' , help="set System DTD to PATH. NB: If your not using an XML/SGML catalog system you should set this to: /your/path/to/tei2.dtd" ) groupDocT.add_option("-p", "--dtdpub", type="string",action="store", dest="DTDpub",default='-//TEI P4//DTD Main Document Type//EN', help="set public DTD to \"Formal Public Identifier\" NB: You _will_ need to quote it" ) groupDocT.add_option("-t", "--dtdtype", type="string", action="store", dest="DTDtype", default="TEI.2", help="set non default DOCTYPE [TEI.2] " ) cl_parser.add_option_group( groupDocT ) groupXML = OptionGroup( cl_parser, "Advanced options for altering the default XML header.", "Use these if you need to change the defaults. There are no single switch options for these." ) groupXML.add_option("--xmlver" , type="string", action="store", dest="XMLver", default='1.0', help="Set XML version attribute. [\"1.0\" ]" ) groupXML.add_option("--xmllang", type="string", action="store", dest="XMLlang", default='en', help="set the XML code language attribute. [en]") groupXML.add_option("--xmlstand", type="string", action="store", dest="XMLstand", default='no', help="set the XML \"standalone\" attribute. [no]") groupXML.add_option("--xmlenc", type="string", action="store", dest="XMLenc", default='utf-8', help="set the XML character ISO code attribute. [utf-8] \n ") cl_parser.add_option_group( groupXML ) ## TODO a really quiet option and a logging option and a dotfile prefs section and group the options so they don't scare the crap out of innocent bystanders. (cl_options, cl_args) = cl_parser.parse_args() #pull the exports out of the "getopt" dictFileIN = cl_options.readfile teiFileOut = cl_options.writefile dtdType = cl_options.DTDtype dtdSys = cl_options.DTDsys dtdPub = cl_options.DTDpub chat = cl_options.verbose xml_v = cl_options.XMLver xml_lang = cl_options.XMLlang xml_stand = cl_options.XMLstand xml_enc = cl_options.XMLenc # catch-me's here if len(cl_args) << 1: ## this still broken i will fix later cl_parser.error("We need at least one thing to do.\n\n Have you supplied a file name for reading ?\n <::For help type::> "+ app +" -h") elif dictFileIN == None : print app +" ::> No input file <::\n" cl_parser.print_help() sys.exit(0) else: print app +" Reading from:::> "+ dictFileIN + " <::\n" print app +" Writing to: ::> "+ teiFileOut +" <::\n" #Test for verbosity # (damm and blast this is clunky) print app+" REMINDER ::> This is Alpha level software ! <::" print app+ VERSION +" !!!!!!!!!!!! not for production use !!!!!!!!!!!!!!!!" if chat == True : print "command line options :", cl_options chatty = "Y" print "Chat mode is on" +chatty else : chatty = "N" print app +" Chat mode off" # #Now get to work #call the workhorses up # d2x_write_prolog( app, teiFileOut, dtdType, dtdPub, dtdSys, xml_v, xml_lang, xml_stand, xml_enc, chatty ) d2x_format_xml( dictFileIN, teiFileOut, chatty ) return() def d2x_write_prolog( this_app, fout, doc_t, doc_type_pub, doc_type_sys, xml_v, xml_lang, xml_stand, xml_enc, chatty ): if chatty == "Y": print "entered write prolog function" xmlfile = file(fout, "w+") if chatty == "Y": print "Writing to ::> ", xmlfile # prolog is just a concat of all the following: doc_type = '\n \n]>\n ' xml_head = '' # #So putting it all together we get # prolog = xml_head+'\n'+doc_type+'\n\n' if chatty == "Y" : print(prolog) xmlfile.write( prolog ) xmlfile.close() # this seems safer and dumps the buffer (we need a lot of ram for big files) def d2x_format_xml(fin, fout, chatty ) : """d2x_format_xml() takes a dictd format file and wraps it in TEI print dictionary xml tags. Command line options exist for most sgml, XML attributes and file in and out names. Defaults are supplied for all but the file in name. """ dictfmt = file( fin, 'r+',1 ) #open file in read and write mode line buffed only xmlfile = file( fout, 'a' ) # reopen the output file for appending # read all of dictfmt file to a list (as it only has new lines to differentiate with) dictlist = dictfmt.read() ##TODO break into 100 line (+/- 8K) blocks use seek to increment through the whole file? # now split the buffer by "2 or more new lines" dictarray = dictlist.split('\n\n') # TODO make a spinner or % readout(after you improve cache and speed) for record in dictarray: recSub1 = re.sub('^\n', "" , record)#tidy any leading newlines recSub2 = re.sub('\t', ' ', recSub1) # replace tabs with 4 spaces recSub3 = recSub2+'\n'+'
' # tag the true end sub_string = recSub3.split('\n') # #note do not strip leading space from defs (yet) # # it should now be the case that headwords start on "col one" and defs etc don't xmlfile.write('\n') for field in sub_string: if chatty == "Y": print "found field" match_H = rex_hdwd.match( field ) match_D = rex_descpt.match( field ) match_End = re.search('', field) if match_H : if chatty == "Y": print 'Headword Match found: ', match_H.group() xmlfile.write('\n
' ) xmlfile.write(match_H.group()) xmlfile.write('
') elif match_D : if chatty == "Y": print 'Description Match found: ', match_D.group() xmlfile.write( '\n') xmlfile.write( match_D.group() ) xmlfile.write ('') elif match_End : if chatty == "Y": print 'end entry' xmlfile.write ('\n') else: if chatty == "Y": print 'No match' # #detect mode of operation and gather an environment etc #we actually start from here if called to execute # if __name__ == "__main__": d2x_getInput() # NTS this is not C print app+ ": End Run" tools-0.8.0-beta.1/importers/tei-p4/hd2tei.pl000077500000000000000000000031561526415265400206130ustar00rootroot00000000000000#!/usr/bin/perl # # 2002 Michael Bunk # only sgml tei! $hdfile = shift @ARGV; if ($hdfile eq "") { print stderr "Usage: hd2dict \n"; print stderr " To convert headword definition dict files to TEI format. Output\n"; print stderr " is on stdout.\n"; die; } die "Can't find file \"$hdfile\"" unless -f $hdfile; open(HDHANDLE, "<".$hdfile); while () { push(@zeilen,$_); } print " \]>\n"; print "<\?xml version='1\.0' encoding='ISO-8859-1'>\n"; print "\n\n\n".$hdfile."\n"; print " converted withhd2tei\.pl\n"; print " \n

freedict\.de\n"; # Statement aus Quelldatei uebernehmen (Zeilen vor dem ersten %h) for(@zeilen) { if (/^%h/) {last;}# Schleife abbrechen print $_; } print "

\n

".$hdfile."

\n"; print "\n"; $openentry = 0; for(@zeilen) { chop; if(/^%h/) { if ($openentry == 1) { print "\n"; $openentry = 0; } print "
".substr($_,3)."
\n "; next; }; if(/^%d/) { $openentry = 1; next; } if ($openentry == 1) { print $_;} else { print stderr "Unsinn: ".$_."\n";} } print "
\n"; close(HDHANDLE); tools-0.8.0-beta.1/importers/tei-p4/tab2tei.pl000077500000000000000000000113371526415265400207660ustar00rootroot00000000000000#!/usr/bin/perl # 4/2002 Michael Bunk # This code generates sgml tei by formatting a tab delimited text file. # It is specific for khasi language, but may be a starting point for you. # features: # + Khasi-Artikel u/ka, Deutsche Artikel der/die/das # + Pluralangaben im Dt. ("--" == gleich Sg./Pl., wird übernommen) # (Kodierung in TEI ok?) # + Zusatzangabe Wortart -> half-hardcoded # wishlist: # - recognize/encode things: # - uebersetzungalternativen # - Kommentare in runden Klammern () # - what about unicode? im falle khasi-deutsch hinterher möglich # Parameter: # alle Worte der Eingangsdatei sind von dieser Wortart # ("v" = Verben, "n" - Substantive, "" gemischte Wortliste $PART_OF_SPEECH = "n"; # Übersetzungsrichtung der Wortliste ("deu" oder "kha") $FIRST_LANG = "kha"; ########################################################## sub erkenne_artikel_deu { # Deutsche Artikel erkennen # Parameter: $1 - Referenz auf String ", " # $2 - Referenz auf TEI-Ausgabestring, ist "", wenn kein # Artikel erkannt wurde my $wortref = shift; my $artikelerkanntref = shift; if(${$wortref} =~ /, *(der|die|das) */) { if (${$wortref} =~ /der */) { ${$artikelerkanntref}=" m\n";} elsif (${$wortref} =~ /die */) { ${$artikelerkanntref}=" f\n";} elsif (${$wortref} =~ /das */) { ${$artikelerkanntref}=" n\n";} ${$wortref} =~ s/, *(der|die|das) *//; } else {${$artikelerkanntref}="";} } sub erkenne_artikel_kha { # Khasi-Artikel erkennen # Parameter: $1 - Referenz auf String ", " # $2 - Referenz auf TEI-Ausgabestring, ist "", wenn kein # Artikel erkannt wurde my $wortref = shift; my $artikelerkanntref = shift; if(${$wortref} =~ /, *(u|ka) */) { if (${$wortref} =~ /u */) { ${$artikelerkanntref}=" m\n";} elsif (${$wortref} =~ /ka */) { ${$artikelerkanntref}=" f\n";} ${$wortref} =~ s/, *(u|ka) *//; } else {${$artikelerkanntref}="";} } # Main $tabfile = shift @ARGV; if ($tabfile eq "") { print stderr "Usage: tab2tei \n"; print stderr " To convert tab delimited wordlists to TEI format. Output\n"; print stderr " is on stdout.\n"; die; } die "Can't find file \"$tabfile\"" unless -f $tabfile; open(TABHANDLE, "<".$tabfile); while () { push(@zeilen,$_); } print " \]>\n"; print "<\?xml version='1\.0' encoding='ISO-8859-1'>\n"; print "\n\n\n".$hdfile."\n"; print " converted withtab2tei\.pl\n"; print " \n

freedict\.de\n"; # Statement aus Quelldatei uebernehmen (Zeilen vor der ersten mit TAB) for(@zeilen) { if (/[\t]/) {last;}# Schleife abbrechen print $_; } print "

\n

".$tabfile."

\n"; print "\n"; for(@zeilen) { chomp;# \n entf. s/\r\Z//;# evtl. CR entfernen (DOS-Datei) if(/\t/) { @felder = split(/\t/,$_,2); # deu/kha-spezifisch! # "/" decodieren @sgplur = split(/\//,$felder[0]); if($sgplur[1] ne "") { $felder[0] = $sgplur[0]; } if ($FIRST_LANG eq "deu") { erkenne_artikel_deu(\$felder[0],\$artikelerkannt); erkenne_artikel_kha(\$felder[1],\$artikeltrerkannt); } else { erkenne_artikel_deu(\$felder[1],\$artikeltrerkannt); erkenne_artikel_kha(\$felder[0],\$artikelerkannt); } # remove leading/trailing whitespace $felder[0] =~ s/\A\s*//; $felder[0] =~ s/\Z\s*//; $felder[1] =~ s/\A\s*//; $felder[1] =~ s/\Z\s*//; $sgplur[1] =~ s/\A\s*//; $sgplur[1] =~ s/\Z\s*//; print "\n
".$felder[0]."\n"; print "
\n"; print " \n"; if ($PART_OF_SPEECH ne "") { print " $PART_OF_SPEECH\n"; } print $artikelerkannt; print " \n"; # give german plural form if($sgplur[1] ne "") { print "
\n"; print " ",$sgplur[1],"\n"; print "
\n"; } print " \n"; print " ",$felder[1],"\n"; print $artikeltrerkannt; print " \n
\n"; next; }; print stderr "Zeile ohne TAB: ".$_."\n"; } print "
\n"; close(TABHANDLE); tools-0.8.0-beta.1/importers/tei-p4/xdf2tei.pl000077500000000000000000000116451526415265400210030ustar00rootroot00000000000000#!/usr/bin/perl -w # $Id$ # (c) Oct 2004 - July 2005 Michael Bunk # This is GPL software. # use strict; if(-t) { # we are connected to a terminal - print help print STDERR "Call me as: $0 outputfile.tei\n"; print STDERR <<'ENDOFDOCS'; This script converts an xdf file from stdin into a TEI file on stdout. You will need to prepend a TEI header and append some closing TEI tags to generate a complete TEI file. xdf was documented here: http://fdicts.com/xdf.php Now that they moved to http://dicts.info, it seems the xdf format was abandoned, since I didn't find documentation for it anymore. Short Summary ------------- # comment line word1 [tabulator] word2 [tabulator] note1 [tabulator] note2 [tabulator] translator The first note column contains information about word class. Standard are: m - masculine noun f - feminine noun n - neuter noun pl - plural noun n: - noun v: - verb adj: - adjective adv: - adverb prep: - preposition conj: - conjunction interj: - interjection Or information about the sphere (domain) where it is commony used if it is not a common word. Standard are: [abbr.] - abbreviation [fin.] - finance [myt.] - mythology [agr.] - agricultural [geo.] - geographical [phra.] - phrase [astr.] - astronomy [geol.] - geology [phy.] - physics [aut.] - automobile industry [hist.] - history [polit.] - politics [bio.] - biology [it.] - information technologies [rel.] - religion [bot.] - botany [law.] - law term [sex.] - sexual term [chem.] - chemistry [mat.] - mathematics [slang.] - slang term [chil.] - children speech [med.] - medicine [sport.] - sport term [col.] - colloquial [mil.] - military [tech.] - technology [el.] - electrotechnics [mus.] - musical term [vulg.] - vulgar term Or special notes which are specified in each xdf file they are used in. Special notes are in () braces. Example: # Comment. Special note (dv) used for derived verb work some word (dv) note for this translation John Smith Mapping into TEI ---------------- We split each line at the tabulator into 5 variables. $note1 is further analyzed: $word1 -> $word2 -> $note1 = note1a + note1b => + $note2 -> $translator ->
dog
note1a note1b word2 note2
ENDOFDOCS exit 0; } sub htmlencode { my $s = shift; $s =~ s/&/&/g; $s =~ s/\"/"/g; $s =~ s//>/g; return $s; } sub mywarn { my $headword = shift; print STDERR "$headword [$.]:\t", @_, "\n"; } my $entries = 0; while(<>) { # remove DOS line ending s/\r\n//; # remove Unicode Byte Order Mark if(/\xef\xbb\xbf/) { print STDERR "removing Byte Order Mark\n"; s/\xef\xbb\xbf//; } if(/^\s*#(.*)/) { # it would be best to put xdf comments into the header # but for this we should extract them with some grep command # and put them into the header manually print "\n"; next; } my($word1, $word2, $note1, $note2, $translator) = split /\t/; if(!defined($word1)) { mywarn '', "Empty headword (word1). Skipping."; next; } if(!defined($word2)) { mywarn '', "Empty translation (word2). Skipping."; next; } my($pos, $number); undef $pos; my $domain = ""; undef $number; my $genus = ""; if($note1) { my @notes1 = split /\s/, $note1; foreach(@notes1) { if(/^(\w+):$/) { mywarn $word1, "Part-of-Speech already set: $1 (had: $pos; note='$_')" if $pos; $pos = $1; next; } if(/^(pl)\.?$/) { mywarn $word1, "Number already set: $1 (had: $number; note='$_')" if $number; $number = $1; next; } if(/^(m|f|n)$/) { mywarn $word1, "Genus already set: $1 (had: $genus; note='$_')" if $genus; $genus = $1; next; } if(/^\[([^\.]+)\.\]$/) { mywarn $word1, "Domain already set: $1 (had: $domain; note='$_')" if $domain; $domain = $1; next; } mywarn $word1, "Unmatched part of note1: '$_'"; } } my $pos1 = ""; my $number1 = ""; my $gen1= ""; $pos1 = "$pos" if $pos; $number1 = "$number" if $number; $gen1 = "$genus" if $genus; print " \n"; print "
\n"; print " ". htmlencode($word1) ."\n"; print "
\n"; print " $pos1$gen1$number1\n" if $pos || $number || $genus; print " \n"; print " $domain\n" if $domain; print " ". htmlencode($word2) ."\n"; print " \n"; my $r=''; $r = " resp=\"". htmlencode($translator) ."\"" if $translator; print " ". (defined($note2)?htmlencode($note2):'') ."
\n" if $translator || $note2; print " \n"; $entries++; } print STDERR "Wrote $entries entries.\n"; tools-0.8.0-beta.1/importers/wikdict/000077500000000000000000000000001526415265400174235ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/wikdict/README.md000066400000000000000000000010311526415265400206750ustar00rootroot00000000000000# WikDict TEI importer Import TEI files generated by [WikDict] into FreeDict. These dictionaries contain data originally created at Wiktionary. [WikDict]: http://www.wikdict.com ## Usage Go to the root directory where all the generated dictionaries reside (configured under the section `[generated]` in your freedictrc) and execute $FREEDICT_TOOLS/importers/wikdict/import_wikdict.py This creates new directories (or replaces existing ones) for the imported dictionaries. Then use make as for all other FreeDict dictionaries. tools-0.8.0-beta.1/importers/wikdict/import_wikdict.py000077500000000000000000000243071526415265400230360ustar00rootroot00000000000000#!/usr/bin/env python3 #vim: set expandtab sts=4 ts=4 sw=4 autoindent ft=python: """This script downloads all (already approved) dictionary from the WikDict project to be included in FreeDict's repository. This script requires a FreeDict API file to figure out which dictionaries are from WikDict and which not. It searches first for a local file referenced by the FreeDict configuration. This is the preferred way. Then it downloads a version from freedict.org. """ import argparse import configparser import enum import html.parser import json import multiprocessing import os import re import sys import urllib.request, urllib.parse import shutil import tempfile import xml.etree.ElementTree as ET from datetime import date SOURCE_URL = 'https://download.wikdict.com/dictionaries/tei/no-infl/' # minimal number of words to consider a dictionary for inclusion MIN_WORD_COUNT = 10000 DOWNLOAD_PREFIX = 'http://{0.netloc}{0.path}'.format(urllib.parse.urlsplit(SOURCE_URL)) def get_fd_api(): """Read local FreeDict API file or load from given path from configuration or download it from freedict.org as fallback. It is advised to generate a fresh API copy locally. This function will try to load a virtual environment, if configured.""" js = None #pylint: disable=bare-except api_file = lambda c: os.path.join(os.path.expanduser( c['DEFAULT']['api_output_path']), 'freedict-database.json') try: import fd_tool.config as config cnf = config.discover_and_load() with open(api_file(cnf), encoding="UTF-8") as api_handle: js = json.load(api_handle) except (ImportError, FileNotFoundError, KeyError, configparser.Error): # try to activate virtual env, if configured but not sourced yet paths = [os.path.join(os.path.expanduser("~"), '.config/freedict/freedictrc')] if os.environ.get('LOCALAPPDATA'): paths.append(os.path.join(os.environ['LOCALAPPDATA'], 'freedict/freedict.ini')) conffile = [path for path in paths if os.path.exists(path)] if conffile: cnf = configparser.ConfigParser() cnf.read_file(open(conffile[0], encoding="UTF-8")) if 'DEFAULT' in cnf and 'api_output_path' in cnf['DEFAULT']: with open(api_file(cnf), encoding="UTF-8") as fhandle: js = json.load(fhandle) except KeyboardInterrupt: pass if not js: from urllib.request import urlopen with urlopen('https://freedict.org/freedict-database.json') as u: js = json.loads(u.read().decode('utf-8')) # strip all non-dictionary nodes (e.g. 'software' return [node for node in js if 'name' in node] class LinkExtractor(html.parser.HTMLParser): """Extract all URL's from a HTML file. Use extract_links for a more easy-to-use function.""" def __init__(self): self.links = [] super().__init__() def handle_starttag(self, tag, attrs): if tag == 'a': attrs = dict(attrs) if 'href' in attrs: self.links.append(attrs['href']) def extract_links(from_string): """Return a list with all links contained in the HTML page passed as input parameter.""" parser = LinkExtractor() parser.feed(from_string) return parser.links def download(link): """Download given link and decode the bytes.""" try: with urllib.request.urlopen(link) as u: return u.read().decode('UTF-8') except urllib.error.HTTPError as h: if int(h.code) == 404: reason = '%s; url: %s' % (str(h), link) raise urllib.error.URLError(reason) else: raise h from None def assert_correct_working_directory(): """Check that this script is executed from the correct directory.""" num_files = sum(1 for fn in os.listdir('.') if re.search('^[a-z]{3}-[a-z]{3}$', fn)) if num_files < 2: # less than two dictionaries, probably not a dictionary root print("Error: must be run from a FreeDict source root, i.e. " "where all generated dictionaries are stored.") sys.exit(9) def make_changelog(path, previous_path=None): """Prepend an import entry while preserving the old history verbatim.""" source = os.path.join(previous_path if previous_path is not None else path, 'ChangeLog') try: with open(source, 'rb') as file: history = file.read() except FileNotFoundError: history = b'' entry = (f'{date.today()}\n\n' f' * automatic import of {os.path.basename(path)} dictionary from WikDict\n\n') with open(os.path.join(path, 'ChangeLog'), 'wb') as file: file.write(entry.encode('utf-8') + history) def update_dict_files(path, shared_file_path): dir_template = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'template' ) shutil.rmtree(path, ignore_errors=True) os.makedirs(path, exist_ok=True) def copy(files): for file in files: try: shutil.copy2(file, path) except shutil.SameFileError: pass copy(os.path.join(shared_file_path, f) for f in ('freedict-dictionary.css', 'freedict-P5.dtd', 'INSTALL', 'freedict-P5.rng', 'freedict-P5.xml')) copy(os.path.join(dir_template, f) for f in os.listdir(dir_template)) def dict_exists_from_other_source(api_dump, dictname): """FreeDict dictionaries come from different sources. At the time of writing, these are the VCS-tracked, partly hand-written dictionaries and the auto-imported dictionaries. WikDict are auto-imported and hence in the bucked of non-VCS tracked, generated dictionaries. Before importing a WikDict dictionary, we have to check whether a dictionary with the same name exists somewhere else.""" dictionary = [d for d in api_dump if d['name'] == dictname] return dictionary and ('sourceURL' not in dictionary[0] or \ 'wikdict' not in dictionary[0]['sourceURL']) def enough_headwords(tei): """This function parses the TEI header and returns true if the given dictionary contains more than the minimal required number of headwords.""" tei = ET.fromstring(tei) node = tei.find('*//{http://www.tei-c.org/ns/1.0}extent') match = re.search(r'([\d\s,.]+)\s+.*word', node.text) if not match: return False count = int(re.sub(r'\D', '', match.group(1))) return count >= MIN_WORD_COUNT def parse_links(): with urllib.request.urlopen(SOURCE_URL) as src: try: data = src.read().decode('utf-8') except UnicodeEncodeError: raise ValueError("Could not encode page with encoding UTF-8; please adjust manually") return (l for l in extract_links(data) if l.endswith('.tei')) class DictionaryStrategy(enum.Enum): TooSmall = 0 ManuallyEdited = 1 Imported = 2 Rubbish = 3 def import_dictionary(api, link, shared_dir, force_import: bool): """Import a dictionary from WikDict and prepare dictionary directory for a release.""" if not urllib.parse.urlsplit(link)[1]: # no host in URL link = urllib.parse.urljoin(DOWNLOAD_PREFIX, link) base_name = os.path.splitext(link.split('/')[-1])[0] # name without .tei if not re.fullmatch(r'[a-z]{3}-[a-z]{3}', base_name): return (DictionaryStrategy.Rubbish, None) if not force_import and dict_exists_from_other_source(api, base_name): return (base_name, DictionaryStrategy.ManuallyEdited) tei = download(link) if not enough_headwords(tei): return (base_name, DictionaryStrategy.TooSmall) print('Importing', base_name) parent = os.path.dirname(os.path.abspath(base_name)) or '.' with tempfile.TemporaryDirectory(prefix=f'.{base_name}.', dir=parent) as temporary: staged = os.path.join(temporary, base_name) update_dict_files(staged, shared_dir) with open(os.path.join(staged, base_name + '.tei'), 'w', encoding='utf-8') as file: file.write(tei) make_changelog(staged, base_name) old = f'{base_name}.old' shutil.rmtree(old, ignore_errors=True) if os.path.exists(base_name): os.replace(base_name, old) try: os.replace(staged, base_name) except OSError: if os.path.exists(old): os.replace(old, base_name) raise shutil.rmtree(old, ignore_errors=True) return (base_name, DictionaryStrategy.Imported) def main(): parser = argparse.ArgumentParser(allow_abbrev=False) parser.add_argument("-f", "--force-import", dest="force_import", help=("switch modes to import the given WikDict dictionary, " "independent of whether something is listed in the API")) parser.add_argument('shared_fd_dir', type=str, help="path to the shared FD files") args = parser.parse_args() assert_correct_working_directory() if not os.path.exists(args.shared_fd_dir): print("Error, path does not exist", args.shared_fd_dir) sys.exit(2) # collect statistics too_small, manual = [], [] api = get_fd_api() wikdict_file_listing = parse_links() if args.force_import is not None: requested = f'{args.force_import}.tei' wikdict_file_listing = [d for d in wikdict_file_listing if d.rsplit('/', 1)[-1] == requested] if not wikdict_file_listing: parser.error(f'No WikDict dictionary named {args.force_import!r}') force_import = args.force_import is not None with multiprocessing.Pool(5) as p: res = p.starmap(import_dictionary, # ↓ pair with api, see import_dictionary ((api, l, args.shared_fd_dir, force_import) for l in sorted(wikdict_file_listing))) for dictname, action in res: if action is DictionaryStrategy.TooSmall: too_small.append(dictname) elif action == DictionaryStrategy.ManuallyEdited: manual.append(dictname) print("The following dictionaries were skipped because:") if manual: print("… a non-WikDict version exists:",', '.join(manual)) if too_small: print("… they were too small:", ', '.join(too_small)) if __name__ == '__main__': main() tools-0.8.0-beta.1/importers/wikdict/template/000077500000000000000000000000001526415265400212365ustar00rootroot00000000000000tools-0.8.0-beta.1/importers/wikdict/template/COPYING000066400000000000000000000536731526415265400223070ustar00rootroot00000000000000License ======= CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. \ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions -------------- : a\. "**Adaptation**" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. : b\. "**Collection**" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. : c\. "**Creative Commons Compatible License**" means a license that is listed at that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. : d\. "**Distribute**" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. : e\. "**License Elements**" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. : f\. "**Licensor**" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. : g\. "**Original Author**" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. : h\. "**Work**" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. : i\. "**You**" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. : j\. "**Publicly Perform**" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. : k\. "**Reproduce**" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights ---------------------- Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant ---------------- Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: : a\. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; : b\. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; : c\. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, : d\. to Distribute and Publicly Perform Adaptations. : e\. For the avoidance of doubt: : i\. **Non-waivable Compulsory License Schemes.** In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; : ii\. **Waivable Compulsory License Schemes.** In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, : iii\. **Voluntary License Schemes.** The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions --------------- The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: : a\. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. : b\. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. : c\. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. : d\. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer --------------------------------------------- UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. --------------------------- EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination -------------- : a\. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. : b\. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous ---------------- : a\. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. : b\. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. : c\. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. : d\. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. : e\. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. : f\. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. \ Creative Commons Notice Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License. Creative Commons may be contacted at [their website](http://www.creativecommons.org). tools-0.8.0-beta.1/importers/wikdict/template/Makefile000066400000000000000000000006411526415265400226770ustar00rootroot00000000000000# The line below is really just a fallback and only works if you have got a copy of the tools directory at this location. It's better to set the environment variable in your shell. FREEDICT_TOOLS ?= ../../tools DISTFILES = COPYING ChangeLog INSTALL Makefile README $(wildcard *.tei) \ freedict-P5.dtd freedict-P5.rng freedict-P5.xml freedict-dictionary.css supported_phonetics= include $(FREEDICT_TOOLS)/mk/dicts.mk tools-0.8.0-beta.1/importers/wikdict/template/README000066400000000000000000000000001526415265400221040ustar00rootroot00000000000000tools-0.8.0-beta.1/irc/000077500000000000000000000000001526415265400145165ustar00rootroot00000000000000tools-0.8.0-beta.1/irc/README000066400000000000000000000002611526415265400153750ustar00rootroot00000000000000This is the module for the Sopel IRC bot, found on freenode/#freedict. It is not the most feature-rich and nicest bot, but it's a nice starting point. It *should* be extended. tools-0.8.0-beta.1/irc/dict_lookup.py000066400000000000000000000112461526415265400174100ustar00rootroot00000000000000"""This is a quickly hacked module for the Sopel IRC bot. It executes the dict command line client to query available dictionaries. Using a proper dict library would be far better and has not been done due to time constraints. (C) 2017 Sebastian Humenda, licensed under the terms of the GPL, version 3, or any later version, published by the FSF.""" import os import random import re import subprocess import sys from sopel import module dict_pattern = re.compile(r"^[a-z]{3}-[a-z]{3}$") dict_file_pattern = re.compile(r'^freedict-([a-z]{3}-[a-z]{3}).index$') def answer(bot, trigger, msg): if trigger.is_privmsg: bot.say(msg) else: bot.reply(msg) def error(bot, msg): """Print an error message""" bot.reply(msg) def lookup(bot, language, word): if language: if not dict_pattern.search(language): error(bot, "Invalid dictionary specifier.") return if len(word) > 20: error(bot, "Sorry, this word is too long.") return proc = None if language: proc = subprocess.Popen(['dict', '-d', 'fd-' + language, word.encode(sys.getdefaultencoding())], stdout=subprocess.PIPE, stderr=subprocess.PIPE) else: proc = subprocess.Popen(['dict', word.encode(sys.getdefaultencoding())], stdout=subprocess.PIPE, stderr=subprocess.PIPE) output = proc.communicate() if proc.wait(): # try to get alternate suggestions stderr = output[1].decode(sys.getdefaultencoding()) if 'perhaps you mean' in stderr: suggestions = '; '.join(stderr.split('\n')[1:]) suggestions = suggestions[suggestions.find(':')+2:] bot.say("Sorry, entry not found, try: " + suggestions) else: bot.say("Sorry, but unfortunately this entry is not available.") return else: # strip first two lines text = output[0].decode(sys.getdefaultencoding()).lstrip() text = (l for l in text.split('\n')[3:] if l) text = [line for line in text if not line.lstrip().startswith("From ")] if len(text) > 5: # ToDo: use paste service text = text[:6] text[-1] += ' … a few more lines omitted.' if not language: text[-1] = text[-1][:-1] + ', try restricting the search by ' +\ 'specifying a dictionary.' for line in text: bot.say(line) ################################################################################ # actual triggers @module.rate(server=0.4) @module.commands('dict') def dict_lookup(bot, trigger): def report_invalid_input(): answer(bot, trigger, ("Usage: .dict [DICTIONARY] word…; try .help dict " "for an explanation.")) if not trigger.group(2): report_invalid_input() return data = trigger.group(2).split(' ') word = language = None if len(data) == 0: report_invalid_input() return elif len(data) == 1: word = data[0] else: language = data[0] word = ' '.join(data[1:]) lookup(bot, language, word) @module.rate(server=0.2) @module.commands('list') def list_dicts(bot, trigger): files = ', '.join(sorted(map(lambda d: d.groups()[0], filter(bool, map(dict_file_pattern.search, os.listdir('/usr/share/dictd')))))) answer(bot, trigger, "Available databases: " + files) @module.commands('help') def help_user(bot, trigger): args = trigger.group(2) if args: if args == '.list' or args == 'list': answer(bot, trigger, "Type .list and I will present you with a list of all FreeDict dictionaries.") elif args == '.dict' or args == 'dict': answer(bot, trigger, ("Type .dict to " "look up something in the desired dictionary (see .list).")) answer(bot, trigger, "Alternatively, you can try .dict , " + \ "but I'll only output the first matches, if too many dictionaries contain this word.") answer(bot, trigger, "For instance, why not try: " + \ random.choice(['.dict lat-deu sapientia', '.dict deu-eng Hase', '.dict fra-eng ordinateur', '.dict eng-spa house'])) else: answer(bot, trigger, "I am afraid this is something that " + \ "I am not entitled to know.") else: # general help answer(bot, trigger, ("I'm serving your dictionary queries. Try " "the command .list to get a list of dictionaries and the command " ".dict to look up a word. Use .help to get information on the usage.")) tools-0.8.0-beta.1/irc/sopel.cfg000066400000000000000000000005621526415265400163240ustar00rootroot00000000000000[core] nick = fd-dict name = Helpful FreeDict Dictionary Bot host = irc.oftc.net use_ssl = true port = 6697 owner = FreeDict.org channels = #freedict enable=dict_lookup,spellcheck,wikipedia logdir=/var/lib/sopel/log db_filename=/var/lib/sopel/default.db pid_dir=/var/lib/sopel/ homedir = /var/lib/sopel [db] userdb_type = sqlite userdb_file = /var/lib/sopel/default.db tools-0.8.0-beta.1/lib/000077500000000000000000000000001526415265400145075ustar00rootroot00000000000000tools-0.8.0-beta.1/lib/Dict.pm000066400000000000000000000167361526415265400157450ustar00rootroot00000000000000# V1.5 5/2004 # * generate warnings on empty headwords that appear after # punctuation removal # V1.4 4/2004 # * trim leading spaces after punctuation removal from headwords # * made warnings of non-acsii characters in non utf8 index work # V1.3 2/2004 # * use LC_ALL instead of LANG environment variable # for setting locale for 'sort' # * don't use -df switches to 'sort' when generating # 00-database-utf8 headword # * do headword mangling in the same way (hopefully) like dictd # does in its tolower_alnumspace_utf8() function # V1.2 5/2003 # * gave optional argument 'locale' to open_dict() # V1.1 improved by Michael Bunk, # * This API is undocumented & cruel! But at least I added # some comments here. # # V1.0 Copyright (C) 2000 Horst Eyermann # # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # package Dict; use strict; use Text::Wrap;# for fill() or wrap() use Encode 'decode_utf8'; use utf8; our ($headwords, $prev_word, $start_article, $head, $fill2, $end_article, @hwords, $text, $all_text, $utf8mode); # there is CPAN module MIME::Base64 for this! but anyway, # without it we are independent our $b64_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; sub b64_encode { my $val = shift @_; my $result = ""; my $tempo = ($val & 0xC0000000) >> 30; if ( $tempo != 0) { $result = substr $b64_list, $tempo, 1; } $tempo = ($val & 0x3f000000) >> 24; if ( $result ne "" || $tempo != 0) { $result .= substr $b64_list, $tempo, 1; } $tempo = ($val & 0x00fc0000) >> 18; if ( $result ne "" || $tempo != 0) { $result .= substr $b64_list, $tempo, 1; } $tempo = ($val & 0x0003f000) >> 12; if ( $result ne "" || $tempo != 0) { $result .= substr $b64_list, $tempo, 1; } $tempo = ($val & 0x00000fc0) >> 6; if ( $result ne "" || $tempo != 0) { $result .= substr $b64_list, $tempo, 1; } $tempo = ($val & 0x0000003f); $result .= substr $b64_list, $tempo, 1; return $result; } sub open_dict{ my ($this, $name, $locale, $d, $sortcmd); $this = shift @_; $name = shift @_; $locale = shift @_; $utf8mode = shift @_; # set locale # otherwise collating sequence (sorting oder) might be # wrong (space after letters and things like that) printf STDERR "Dict.pm: Using LC_ALL: $locale\n"; $ENV{'LC_ALL'}=$locale; # open file where definitions will go open DATA, ">$name.dict"; # open a pipe and output the index in a sorted way # dictfmt uses only -df (and no options in utf8 / 8bit mode) # in bash we enter: sort -t $'\t' -k 1,1bdf # the sort options: # -t: give field separator, the TAB # -k: only use first field for sorting # b: ignore trailing blanks (might not be needed or even harmful) # df: as usual (dictionary order, ignore case) # don't give -df option when we generate 00-database-utf8 index $d = ($utf8mode) ? "" : "df"; $sortcmd = "|sort -t \"\t\" -k 1,1b".$d." >$name.index"; warn "using sort command: '$sortcmd'\n"; open INDEX, $sortcmd; if ($utf8mode) { binmode(INDEX, ":utf8"); } warn "\nopened: $name.dict and \n $name.index\n"; $headwords = 0; $prev_word = ""; $start_article = 0; $head = 0; $fill2 = ""; } sub write_newline { # directly write into data file # newlines in the INDEX don't make sense anyway print DATA "\n"; } sub set_headword { # Here a marker is set for the next entries being headwords # But how does it work for the first entry? You cannot call set_headword # before having one?? # For the first time set_headword is called, NOTHING is written to index! # At second call, first entry's headword is written. # this also means that for the very last entry to appear in the index, # after outputting the last entry we once again have to call set_headword! # couldn't this be done in a better way? yes, new api! $head = 1; $end_article = tell DATA; # Output status if (($headwords % 100) == 0) { printf STDERR "%8d Headwords.\r", $headwords } # that hwords is an array means multiple headwords # can reference the same definition! good. if(@hwords != 0) { foreach (@hwords) { # warn about non-ascii chars if not in utf8 mode if(!$utf8mode && /\P{IsASCII}/) { warn "Non ASCII char in headword: \"$_\"\n"; # btw, dictfmt quits here! } # make perl believe it is utf8 # see 'man perluniintro' if($utf8mode) { $_ = decode_utf8($_); } # generate two headwords for "00-database-*": # first with, second without "-" characters if(/^00-database-/) { print INDEX "$_\t" . b64_encode($start_article); print INDEX "\t" . b64_encode($end_article-$start_article) . "\n"; } # do headword mangling in the same way (hopefully) like dictd # does in its str.c:tolower_alnumspace_utf8() function: # if not in allchars mode (we can't be since we don't support it), # - any whitespace characters are translated to simple space # - only alphanumeric characters are considered # AlexeyCheusov> Minus should also be removed unless you use "allchars" mode. # AlexeyCheusov> In last case, ALL characters from the query should be matched. s/\s/ /g; s/[^\s\p{IsAlnum}]//g; # thereafter characters are translated to lower case (required # even in allchars mode!) $_ = lc $_; # sanity checks if(/^\s+(.+)/) { warn "\nWarning: Trimmed leading space(s) from headword '$_'\n"; $_ = $1; warn "Now it is '$_'\n"; } if(/^\s*$/) { warn "\nSkipping empty or whitespace-only headword!\n"; warn "\t\@hwords: ", @hwords, "\n"; } else { print INDEX "$_\t" . b64_encode($start_article); print INDEX "\t" . b64_encode($end_article-$start_article) . "\n"; } } } $start_article = $end_article; @hwords = (); } sub end_headword { $head = 0; } sub add_text{ $text = shift @_; # FIXME api <-> layout not independent! # connect multiple headwords with comma in dict file if (($head) && (defined $hwords[0])) { $all_text .= ", ". $text} # usual output else { $all_text .= $text}; } sub write_text{ $Text::Wrap::columns = 70; print DATA fill("", $fill2, $all_text); $all_text = ""; return if ((!defined $text) || ($text eq "")); if ($head == 1) { push @hwords, $text;# FIXME $text is an ugly global var! $headwords += 1; } # FIXME $text is an ugly global var! $text = ""; } sub add_headword{ $text = shift @_; return if ((!defined $text) || ($text eq "")); if ($head == 1) { push @hwords, $text;# FIXME $text is an ugly global var! $headwords += 1; } $text = ""; } sub write_direct{ $text = shift @_; print DATA $text; } 1; tools-0.8.0-beta.1/lib/TEIHandlerxml_xml.pm000066400000000000000000000265161526415265400203770ustar00rootroot00000000000000# SAX handler module for tei2dictxml_xml converter # V1.3 10/2006 Michael Bunk # * removed trailing white space # * added error handler, so XML:ESISParser doesn't die() on warnings # V1.2 5/2004 Michael Bunk # * added option to generate 00-database-allchars header # * if reverse index is generated, 00-database-short will indicate it now # V1.1 4/2004 Michael Bunk # * when headwords contain entities, characters() # is called multiple times for the same element: # now only one call to add_headword() # will be done # V1.0 6/2003 Michael Bunk # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # # thinking about event & calling order of the Dict subs (there is no other doc?): # 1. set_file_name() -> open_dict() # 2. -> set_headword() # 3. characters() -> $current_headword .= $data; # 4. end_tag -> add_headword($current_headword) # 5. -> end_headword() # 6. several start_tags -> ( write_direct() | add_text() ) # 7. several end_tags -> write_text() # 8. -> write_newline() # 9. continue with 2. for all other entrys # 10. closing the filehandles not needed # for encoding tei header we need some extra: # V1.1.: # 1. same # 2. -> set_headword(); write_text("00-database-info"); end_headword(); # 3. header start_tags -> add_text(" Info: "); # 4. tag content (if any) -> add_text($data); and occasionally save to some $var # 5. header end_tags -> add_text("\n"); # 6. -> write_text(); # set_headword(); write_text("00-database-short"); end_headword(); # write_direct($database-short); # set_headword(); write_text("00-database-url"); end_headword(); # write_direct($database-url); # 7. go on with entrys like in V1.0 (go on at 2. there) package lib::TEIHandlerxml_xml; use strict; use warnings; use lib::Dict; use utf8; # for filtering: use FileHandle; use IPC::Open2; # for sablotron: use XML::Sablotron; use XML::Sablotron::DOM; our ($header, $preLastStartTag, $lastStartTag, $database_short, $database_url, @higherElements, $file_name, $skip_header, $state, $quoted, $filtercmd, $sit, $sab, $reverse_index, $sab_templ, $current_headword); # i copied _escape() from XML::Handler::CanonXMLWriter # for escaping special chars in HTML/XML/SGML my %char_entities = ( "\x09" => ' ', "\x0a" => ' ', "\x0d" => ' ', '&' => '&', '<' => '<', '>' => '>', '"' => '"', ); sub _escape { my $string = shift; $string =~ s/([\x09\x0a\x0d&<>\"])/$char_entities{$1}/ge; return $string; } sub new { my ($type) = shift; $header = 0; $state=""; return bless {}, $type; } sub dumpTag { my $element = shift; #dump attributes my $attr=""; if(!defined $element) { die "Please make sure the input file is valid!"; } my %attrhash = %{$element->{Attributes}}; foreach(keys %attrhash) { $attr .= ' '.$_.'="'._escape($attrhash{$_}).'"'; } return "<".$element->{Name}.$attr.">"; } sub apply_filter_cmd { my ($filtercommand, $quoted) = @_; if($filtercmd ne "") { print STDERR "."; #print "calling open2 with '$filtercmd'..."; #TODO: catch errors from executed filtercmd # according to 'man perlipc' my $pid = open2(*Reader, *Writer, $filtercmd ); #print "handing over...";flush STDOUT; print Writer "$quoted\n"; close(Writer); #print "reading...";flush STDOUT; $quoted = ; while(!eof(Reader)) { $quoted .= ; }; #print "\n";flush STDOUT; waitpid $pid, 0; } elsif ($sab) { # print STDERR "+"; $sab->addArg($sit, 'input', $quoted); # print STDERR "\ncalling addArgTree..."; $sab->addArgTree($sit, 'template', $sab_templ); # print STDERR "\ncalling process..."; $sab->process($sit, 'arg:/template', 'arg:/input', 'arg:/output'); # print STDERR "\ncalling getResultArg..."; $quoted = $sab->getResultArg('arg:/output'); # print STDERR "\ngot: $quoted\n\n\n\n"; } return $quoted; } sub set_options { my ($self, $filename, $askip_header, $aGenerate00DatabaseUtf8, $aLocale, $aFilterCmd, $aStyleSheet, $aReverseindex, $aAllchars) = @_; $file_name = $filename; $file_name =~ s/^(\w*\/)+//g; $file_name =~ s/(\S*)\.\w*/$1/; $skip_header=$askip_header; $filtercmd=$aFilterCmd; $reverse_index=$aReverseindex; if ($aStyleSheet) { print STDERR "initializing Sablotron...\n"; $sab = new XML::Sablotron; $sit = new XML::Sablotron::Situation; $sab_templ = XML::Sablotron::DOM::parseStylesheet($sit, $aStyleSheet); } Dict->open_dict($file_name,$aLocale,$aGenerate00DatabaseUtf8); if($aGenerate00DatabaseUtf8) { print STDERR "Generating 00-database-utf8\n"; Dict::set_headword(); Dict::add_text("00-database-utf8"); Dict::write_text(); Dict::end_headword(); # might not be needed at all, but we give a hint Dict::write_direct("\n "); Dict::write_direct("This dictionary is UTF-8 encoded. If you use dictd, ". "make sure to start it with the appropriate --locale option."); Dict::write_newline(); } if($aAllchars) { print STDERR "Generating 00-database-allchars\n"; Dict::set_headword(); Dict::add_text("00-database-allchars"); Dict::write_text(); Dict::end_headword(); Dict::write_newline(); } } sub start_element { my ($self, $element) = @_; my $part = $element->{Name}; $preLastStartTag = $lastStartTag; $lastStartTag = $part; # for multiple orths at beginning of
if (!$reverse_index && ($Dict::head) && ($part ne "orth")) { Dict::end_headword() }; # see what tag we have (& remember XML is case sensitive!) # most frequent tags on top if (($part eq "entry") || ($part eq "teiHeader")) { $quoted = ""; $state = "quoting"; } elsif ($part eq "orth" && !$reverse_index) { if ($preLastStartTag eq "form") {Dict::set_headword()} $state = "orth";$current_headword=''; } elsif ($part eq "tr" && $reverse_index) { if (!$Dict::head) {Dict::set_headword()} $state = "tr";$current_headword=''; } if ($part eq "revisionDesc") { # add myself as # # now # tei2dict_xml.pl # converted TEI database into .dict format # my $now_string = gmtime(); my $s .= "\n $now_string\n"; $s .= " tei2dictxml_xml.pl\n"; $s .= " converted TEI database into .dict format\n"; $quoted .= dumpTag($element) . $s; # printf STDERR "new revisionDesc: $quoted"; } elsif (($state eq "quoting") || ($state eq "orth") || ($state eq "tr")) { $quoted .= dumpTag($element); } elsif (($part eq "text") || ($part eq "body") || ($part eq "TEI.2")) { # skip these tags without warnings } else { print STDERR "warning: skipping start tag: $part\n" } } sub characters { my ($self, $element) = @_; my $data = $element->{Data}; # FIXME: maybe with other parser than ESISParser? # my guess: sometimes our loved ESISParser calls this handler # while it shouldn't: to notify us of a line break and white # space. there are handlers end_record() and white_space() for # this. anyway: since we don't have
-element where newlines
    # are important inside, we just replace all \n by ' '
    # then all multiple white space by single ' '
    # then remove all ' ' at beginning or end
    # and skip everything if we get empty $data

    # do some whitespace stripping:
    return if ($data =~ /\A\s*\Z/);

    $data =~ s/\n/ /;
    $data =~ s/\s+/ /;

    if ($data eq "") {
       # can happen because of newlines
       return;
       }

    if (($state eq "quoting") ||
        ($state eq "orth") ||
	($state eq "tr")) {
	$quoted .= _escape($data);
	}

    if    (($preLastStartTag eq "titleStmt") &&
           ($lastStartTag    eq "title")) { $database_short = $data }
    elsif ($lastStartTag     eq "pubPlace") { $database_url=$data }

    if ($reverse_index && ($lastStartTag eq "tr")) {
	$current_headword .= $data;
	}

    elsif (!$reverse_index && ($lastStartTag eq "orth")) {
       if (($preLastStartTag eq "form") ||
           ($preLastStartTag eq "orth")) {
	      #warn "headwords add_text: '$data'\n";
	      $current_headword .= $data;
	     }
       else {
         print STDERR "multiple -s only at beginning of  supported. Skipping the others!\n" }
       }
}


sub end_element {
    my ($self, $element) = @_;
    my $part  = $element->{Name};

    pop @higherElements;



    if (($state eq "quoting") || ($state eq "orth") || ($state eq "tr")) {
	$quoted .= "\n";
	}

    if ($part eq "orth") {
	Dict::add_headword($current_headword);
	# Dict::end_headword() has to be called later, because we don't know now
	# if there is another orth coming (multiple headwords for one entry)
	if($state eq "orth") {$state = "quoting"};
	}

    if ($part eq "tr") {
	Dict::add_headword($current_headword);
	# Dict::end_headword() has to be called later, because we don't know now
	# if there is another tr coming
	if($state eq "tr") {$state = "quoting"};
	}

    elsif ($part eq "entry") {
        if ($reverse_index && $Dict::head) { Dict::end_headword() };

	$quoted = apply_filter_cmd($filtercmd,$quoted);

	Dict::write_direct($quoted);
	Dict::write_newline();
	$state = "";
	}

    elsif (($part eq "teiHeader")) {
	return if $skip_header;

	$state = "";

	Dict::write_text();
	Dict::write_newline();

	# 00-database-short
	Dict::set_headword(); Dict::add_text("00-database-short");
	Dict::write_text(); Dict::end_headword();
	Dict::write_direct("\n  ");
	Dict::write_direct($database_short);
	if($reverse_index)
	{
	  Dict::write_direct(' [reverse index]');
	}
	Dict::write_newline();

	## 00-database-info
	Dict::set_headword();
	$Dict::text="00-database-info";
	Dict::write_text();
	Dict::end_headword();

	$quoted = apply_filter_cmd($filtercmd,$quoted);

	Dict::add_text($quoted);# will do wrapping
	Dict::write_text();
	Dict::write_newline();

	# FIXME who defined 00-database-url and where is it used? it seems not in kdict
	Dict::set_headword(); Dict::add_text("00-database-url");
	Dict::write_text(); Dict::end_headword();
	Dict::write_direct(" ");
	Dict::write_direct($database_url);
	Dict::write_newline();

	} # ^header

    elsif ($part eq "body") {
	Dict::set_headword();# to have the last headword appear in INDEX
	};

}

sub error
{
  my ($self, $args) = @_;
  if ($args->{'Message'} =~ /^.+:.+:\d+:W:/)
  {
    # print warnings
    print STDERR "Warning from XML::ESISParser: " . $args->{'Message'} . "\n";
    return
  }
  use Data::Dumper;
  print STDERR Dumper \@_;
  print STDERR "Error from XML::ESISParser: " . $args->{'Message'} . "\n";
  exit 3;
}

1;
tools-0.8.0-beta.1/mark_dubious_translations.pl000066400000000000000000000055741526415265400215760ustar00rootroot00000000000000#!/usr/bin/perl

use strict;
use utf8;
use LWP::Simple;
use Getopt::Std;

our($opt_l, $opt_s, $opt_m,$opt_h);
getopts('l:s:m:h');


sub HELP_MESSAGE
{
  print < [-s ] [-m ] [-h] [in_file [out_file]]

This script scans .tei dictionary for translations values marked with 
tags, and tries to query http://en.wiktionary.org online dictionary for articles
titled as value found between . If article is found and has a
section  inside, then this translation is considered to be ok.
Otherwise translation is considered to be dubious and marked with a  sign
at the beginning to the line.

Then you can use `diff -u10` and deal with dubious translation only.

This script can be useful if you start maintaining buggy dictionary and want to
eliminate typos and misspelling.


Options:

-h	help & exit
-l	language name as used in en.wiktionary.org section names. I.e. "Russian"
-s	sleep time between fetches in seconds, in order not to DDoS wiktionary.
	Default is 3
-m	a symbol for marking dubious translations. Default is '☹'

Usage examples:

  $0 -l Russian eng-rus.tei eng-rus.tei.marked
  
  $0 -l Russian eng-rus.tei.marked

Author:
  Nikolay Shaplov , 2014

License:
  GNU General Public License ver. 2.0 and any later version.

EOT
  exit
}

HELP_MESSAGE if $opt_h or (!$opt_l);

my $target_lang = $opt_l;
my $sleep = $opt_s || 3;
my $error_mark = $opt_m || '☹'; # do not use symblos that might be insde your dictionary!!!

my $in;
if ($ARGV[0])
{
  open $in, "<:utf8" , $ARGV[0] or die "cannot open ".$ARGV[0]." $!";
} else
{
  binmode(STDIN, ":utf8");
  $in = *STDIN;
}
my $out;
if ($ARGV[1])
{
  open $out, "<:utf8" , $ARGV[1] or die "cannot open ".$ARGV[1]." $!";
} else
{
  binmode(STDOUT, ":utf8");
  $out = *STDOUT;
}

binmode(STDERR, ":utf8");

my $buf = "";

my $text = "";
while (my $s = <$in>)
{
  $text.= $s;
}

my $res = "";
while ($text=~s{^(.*?)()(.*?)()}{}s)
{
  my $ok = 1;
  my $header = $1;
  my $open = $2;
  my $def = $3;
  my $close = $4;
  
  print STDERR $def;
  
  my $content = get("http://en.wiktionary.org/wiki/$def");
  
  if ( !($content =~/

$target_lang/s )) { $ok = 0; $open =~ s/ 1) { my $s = shift @l; if ($s =~ s/$error_mark//g) { $s=$error_mark.$s; } print $out $s, "\n"; } $buf = shift @l; }tools-0.8.0-beta.1/mk/000077500000000000000000000000001526415265400143505ustar00rootroot00000000000000tools-0.8.0-beta.1/mk/README.md000066400000000000000000000050111526415265400156240ustar00rootroot00000000000000# Build System Explanation ----------- This directory contains make include files: - `config.mk`: This file contains common variables, used within all other make files. It also defines the help system, invoked with `make help`. - `dicts.mk`: This file is included by every dictionary Makefile and defines all the targets to work with a dictionary, e.g. building a release tar ball, validating its contents or exporting to other formats. - `dictroot.mk`: Only the top-level makefile of a directory with multiple dictionaries should include this file (e.g. the root of the dictionary git repository). It defines rules to build all dictionaries at once and to install and uninstall them. More information about these files can be found in chapter 8 of the Freedict HOWTO. Platforms --------- To add a new platform or delete an existing one, the following parts have to be touched: - The variable `known_platforms` lists all defined formats. `available_platforms` excludes those named in `UNSUPPORTED_PLATFORMS`. The build, release, deploy, and install targets use all supported formats; uninstall removes all known binary formats, including disabled ones. - Each platform needs to provide a build-PLATFORM and a release-PLATFORM rule, where PLATFORM is replaced by the name present in `available_platforms`.\ Ideally, the release-PLATFORM target depends on the distribution archive, so that the build system can infer whether a release has been build. It's best to use `$(BUILD_DIR)/PLATFORM/freedict-lg1-lg2-VERSION-PLATFORM.extension``. lg1-lg2 is the identifier for the dictionary and the VERSION is available in the variable with the same name.\ Note: an exception is the dictd format, which builds to without the -PLATFORM suffix for historical reasons. ## Installing dictionaries `make install` installs dictd, StarDict, and SLOB outputs; use `make install-stardict` (or `install-dictd` / `install-slob`) for one format. `make uninstall` removes all three formats; matching `uninstall-PLATFORM` targets are available. The default prefix is `/usr/local`. Use `make install DESTDIR=/tmp/package PREFIX=/usr` to stage a package. `DICTD_INSTDIR`, `STARDICT_INSTDIR`, and `SLOB_INSTDIR` override destinations beneath `DESTDIR`; their defaults are `$(PREFIX)/share/dictd`, `$(PREFIX)/share/stardict/dic`, and `$(PREFIX)/share/slob`. SLOB is installed as `xxx-yyy.slob` so upgrades replace the previous version. Only `install-restart` restarts dictd, and never when `DESTDIR` is set. tools-0.8.0-beta.1/mk/config.mk000066400000000000000000000126501526415265400161520ustar00rootroot00000000000000# This file defines common configuration variables shared across all Makefiles. # Furthermore, it defines a help target which makes the buildsystem # self-documenting. SHELL=bash # set all as default target, so that help is not executed by default .DEFAULT_GOAL := all # `xsltproc' comes with libxml/libxslt, see xmlsoft.org XSLTPROCESSOR ?= xsltproc XSLTPROCESSORARGS += --novalid --xinclude DICTFMTFLAGS ?= --utf8 # set default value FREEDICT_TOOLS ?= . # where built files should get installed PREFIX?=/usr/local DESTDIR ?= # name of the nsgmls command NSGMLS ?= onsgmls # the file xml.soc file comes with sp/opensp/openjade # and is required by nsgmls XMLSOC ?= /usr/share/xml/declaration/xml.soc # xml.soc normally points to this file XMLDECLARATION ?= /usr/share/xml/declaration/xml.dcl #XMLDECLARATION ?= /usr/share/xml/declaration/xml1n.dcl # you can also set this in ~/.bashrc SGML_CATALOG_FILES ?= /etc/sgml/catalog DICTFMT = $(shell command -v dictfmt 2> /dev/null) ifeq ($(DICTFMT),) $(warnrning The command dictfmt was not found, you will not be able to convert into the dictd format.) endif charlint_in_path := $(shell which charlint.pl 2>/dev/null) ifneq ($(charlint_in_path), ) CHARLINT := $(charlint_in_path) else # if this doesn't exist it will be downloaded CHARLINT := $(FREEDICT_TOOLS)/charlint.pl endif CHARLINT_DATA := $(dir $(CHARLINT))charlint-unicodedata MBRDICO_PATH = / BUILDHELPERS_DIR=$(FREEDICT_TOOLS)/buildhelpers/ # Directory containing all build files, usually a tree like build/ # within the current working directory. BUILD_DIR=build RELEASE_DIR=$(BUILD_DIR)/release # script to restart the dictd daemon, if installed DICTD_RESTART_SCRIPT = $(BUILDHELPERS_DIR)dict_restart_helper.sh ################################################################################ # FreeDict configuration # Use FREEDICTRC to discover a configuration. If the variable is empty, no # configuration was found. FREEDICTRC = $(wildcard $(HOME)/.config/freedict/freedictrc $(LOCALAPPDATA)/freedict/freedict.ini) ################################################################################ # Python special handling # First, the interpreter is queried for the correct version (and name). Then the # setup for a virtual environment is done. For the "end-user", all that matters # should be the exc_pyscript function, e.g.: # # foo: # $(exc_pyscript) fd_api --what-ever # find interpreter with matching name, python3 or python? PYTHON := $(shell command -v python3 2> /dev/null) ifeq ($(PYTHON),) PYTHON := $(shell command -v python 2> /dev/null) ifeq ("$(PYTHON)","") $(error No Python executable found, please make sure that a recent Python is in the search path) endif endif # query version PYTHON_VERSION_FULL := $(wordlist 2,4,$(subst ., ,$(shell $(PYTHON) --version 2>&1))) PYTHON_VERSION_MAJOR := $(word 1,${PYTHON_VERSION_FULL}) ifneq ($(PYTHON_VERSION_MAJOR),3) $(error Python 3 is required, current python major is $(PYTHON_VERSION_MAJOR)) endif # exc_pyscript is meant to either call a system-wide installed version or one # from a virtual env. The latter needs to be specified in the FD configuration, # documented in the wiki. # This is a fallback for system-wide script usage: exc_pyscript = $(1) $(2) $(3) $(4) $(5) $(6) $(7) $(8) $(9) # find a (python) virtual env # ToDo: look at detection algorithm FREEDICTRC = $(HOME)/.config/freedict/freedictrc ifneq ($(wildcard $(FREEDICTRC)),) VIRTUAL_ENV=$(shell grep -E 'virtual_env.*=.*' < $(FREEDICTRC) | cut -d = -f 2\ |tr -d ' ') # if virtual env found ifneq ($(VIRTUAL_ENV),) ifneq ($(wildcard $(VIRTUAL_ENV)),) # call python from the virtual environment exc_pyscript = source $(VIRTUAL_ENV)/bin/activate; \ $(1) $(2) $(3) $(4) $(5) $(6) $(7) $(8) $(9) endif endif endif ################################################################################ # Remote file handling # These two functions are meant to be used within a rule (combined as *one* # shell line) to remember state. If remote volumes were mounted before, don't # umount them, otherwise, do. Example: # # foo: # $(call mount_or_reuse); mycommand; $(call umount_or_keep) mount_or_reuse=$(call exc_pyscript,fd_file_mgr,-m); \ if [ $$? -eq 201 ]; then \ STAY_MOUNTED=1; \ else \ STAY_MOUNTED=0; \ fi umount_or_keep = \ if [ $$STAY_MOUNTED -eq 0 ]; then \ $(call exc_pyscript,fd_file_mgr,-u); \ fi # Keep acquisition, command execution and ownership-aware cleanup in one process. run_with_files = $(call exc_pyscript,fd_file_mgr,--run $(1) $(2)) ################################################################################ # Define the help system, use #! after the colon of a rule to add a # documentation string help: @echo "Usage: make " @echo "The following commands are defined:" @echo @IFS=$$'\n'; \ help_lines=`grep -F -h "#!" $(MAKEFILE_LIST) | grep -F -v 'grep -F' | grep -F -v help_line | grep -v 'Define the' | sed -e 's/\\$$//' | sort`; \ for help_line in $${help_lines[@]}; do \ help_command=`echo $$help_line | sed -e 's/^\(.*\): .*/\1/' -e 's/^ *//' -e 's/ *$$//' -e 's/:$$//'`; \ help_info=`echo $$help_line | sed -e 's/.*#!\(.*\)$$/\1/' -e 's/^ *//' -e 's/ *$$//'`; \ printf "%-19s %s\n" $$help_command $$help_info; \ done;\ if [ -n `echo $$HELP_SUFFIX|wc -w` ]; then \ echo;\ printf "%s\n" $$HELP_SUFFIX; \ fi # NOTE: If you want to add a HELP_SUFFIX, you have to export the variable as # environment variable. # Note II: wc -w is necessary, because HELP_SUFFIX might be a multi-line string tools-0.8.0-beta.1/mk/dictroot.mk000066400000000000000000000031151526415265400165300ustar00rootroot00000000000000# This makefile snippet contains all commands which can be performed in a # directory containing many dictionary (a dictionary root). # The subdirectories have to be called "lg1-lg2" (so the usual dictionary naming # conventions). FREEDICT_TOOLS ?= . include $(FREEDICT_TOOLS)/mk/config.mk # this shows that this makefile include may only be used for a directory # containing many dictionaries DICTS=$(shell find . -maxdepth 1 -name '???-???' -printf "%P\n"|sort|xargs echo) # A target per dictionary, i.e. validate-DICTNAME. VALIDATION_TARGETS=$(foreach DICT,$(DICTS),validate-$(DICT)) # Calls default target for each dictionary module. # Note: This is a conflict if you wanted to call # the 'all' target of each dictionary module. all: #! build all dictionaries (default) all: build_all build_all: $(DICTS) $(DICTS): @$(MAKE) -C $@ install: #! install the built files, without attempting to restart any applications using them install: build_all echo Installing $(DICTS) @set -e; for dict in $(DICTS); do \ $(MAKE) -C $$dict install; \ done install-restart: #! install built dictionaries and attempt to restart applications using them install-restart: install-core @$(DICTD_RESTART_SCRIPT) || echo "Please make sure to run this command as root" # ToDo uninstall: $(BUILD) clean:: for DICT in $(DICTS); do \ $(MAKE) -C $$DICT clean; \ done validation: #! validate all dictionaries in this directory validation: $(VALIDATION_TARGETS) $(VALIDATION_TARGETS): @$(MAKE) -C $(patsubst validate-%,%,$@) validation .PHONY: install uninstall api all clean build_all $(DICTS) $(VALIDATION_TARGETS) tools-0.8.0-beta.1/mk/dicts.mk000066400000000000000000000372271526415265400160220ustar00rootroot00000000000000# This file contains all targets defined for a dictionary. It is sourced by its # Makefile. # It defines targets to convert (build) the TEI # files to the supported output formats. It also features some release targets # used for making a release in FreeDict. "install" and "uninstall" targets are # provided, too. include $(FREEDICT_TOOLS)/mk/config.mk export HELP_SUFFIX define HELP_SUFFIX = NOTE: For the targets `release` and `build`, there are targets called `release-PLATFORM` and `build-PLATFORM` available, if you just want to build one platform. endef ####################### #### Common variable definitions ####################### ifeq ($(origin UNSUPPORTED_PLATFORMS), undefined) UNSUPPORTED_PLATFORMS = evolutionary endif known_platforms := src dictd slob stardict available_platforms := $(filter-out $(UNSUPPORTED_PLATFORMS),$(known_platforms)) dictname ?= $(shell basename "$(shell pwd)") xsldir ?= $(FREEDICT_TOOLS)/xsl TEIADDPHONETICS := $(FREEDICT_TOOLS)/teiaddphonetics XMLLINT := /usr/bin/xmllint XSLTPROCESSORARGS += $(strip --stringparam dictname $(dictname) \ --path $(dir $(abspath $(dictname).tei))) version1 := $(shell sed -e '100q;//!d;s/.*\(.*\)<\/edition>.*/\1/;q'\ $(wildcard $(dictname).tei)) version := $(subst $(space),,$(version1)) # these files are included in each of the platform releases which are *not* a # source release. DISTFILES_BINARY = $(foreach f, README README.md README.txt README.rst \ COPYING COPYING.txt COPYING.md COPYING.rst LICENSE \ LICENSE.txt LICENSE.md LICENSE.rst \ INSTALL INSTALL.md INSTALL.rst INSTALL.txt, \ $(wildcard $(f))) # only consider these files if they do exist PREFIX ?= /usr/local DESTDIR ?= ################ # Common Function Definitions ################ # This function assists the release-% rules. It generates the release path for # each platform; Arg1: platform gen_release_file = freedict-$(dictname)-$(version).$(strip \ $(if $(findstring slob,$(1)),slob,\ $(if $(findstring stardict,$(1)),stardict.tar.xz,\ $(1).tar.xz))) gen_release_path = $(RELEASE_DIR)/$(call gen_release_file,$(1)) gen_release_hashpath = $(call gen_release_path,$(1)).sha512 # dictionary source file -- normally just $(dictname).tei, but can be # overwritten e.g. by the phonetics generator dict_tei_source = $(dictname).tei ####################### #### Phonetics import #### #### This needs to come before all others, so that the relevant functions are #### defined correctly. ####################### source_lang = $(firstword $(subst -, ,$(dictname))) # dictionary authors may set `supported_phonetics_lang = 2` and skip the check; # this should only be used in circumstances where the build system fails to work # with the generated phonetics ifeq ($(supported_phonetics_lang),) phoneme_generation_supported=$(shell $(TEIADDPHONETICS) --supports-lang $(source_lang) 2> /dev/null;echo $$?) ifneq ($(phoneme_generation_supported),0) $(warning Unable to run teiaddphonetics, phoneme generation disabled for $(dictname). Check installed dependencies.) endif ifeq ($(phoneme_generation_supported),0) # supported language dict_tei_source = build/tei/$(dictname)-phonetics.tei $(BUILD_DIR)/tei: mkdir -p $@ # Create a copy containing IPA phonetic information $(call dict_tei_source): $(dictname).tei mkdir -p $(dir $@) $(TEIADDPHONETICS) -o $@ $< endif endif ################ # General targets (default target, maintenance targets) ################ all: #! convert the TEI XML source into all supported output formats (see list-platforms) all: build build: #! same as all, build all available output formats build: $(foreach platform,$(available_platforms),build-$(platform) ) $(RELEASE_DIR): mkdir -p $@ changelog-help: @$(call exc_pyscript,fd_changelog,-h) changelog: #! launch a script to assist in updating a TEI header for next release, try changelog-help for usage help changelog: $(dictname).tei @$(call exc_pyscript,fd_changelog,${E},$<) # This is a "double colon rule", allowing you to extend this rule in your own # makefile. # For example: # # clean:: # -rm -f delete_this_file.too clean:: #! clean build files rm -rf build rm -f valid.stamp define deploy_command = $(call run_with_files,sh,"$(FREEDICT_TOOLS)/buildhelpers/deploy.sh" \ "$(dictname)" "$(version)" "$(FORCE)" \ $(foreach platform,$(1),"$(call gen_release_path,$(platform))")) endef release-path-%: #! print the release path from the build directory for the given platform @echo $(call gen_release_path,$(@:release-path-%=%)) release-path-hash-%: #! print the path to the file containing the hash of the release @echo $(call gen_release_hashpath,$(@:release-path-hash-%=%)) deploy: #! deploy all platforms of a release to the remote file hosting service deploy: $(foreach r, $(available_platforms), release-$(r)) $(call deploy_command,$(available_platforms)) $(addprefix deploy-,$(known_platforms)): deploy-%: release-% $(call deploy_command,$*) find-homographs: #! find all homographs and list them, one per line find-homographs: $(dictname).tei @export HOMS="`cat $< | grep orth | sed -e s:'[ ]*':'':g -e s:'<\/orth>':'':g | sort -f | uniq -i -d`"; \ if [ -n "$$HOMS" ]; then \ echo "Found `echo "$$HOMS"|wc -l` homographs"; \ echo "$$HOMS" | tr '\n' ',' | sed 's/,/, /g' | fold -s; fi list-platforms: #! list all available platforms, AKA output formats @echo -n $(available_platforms) %.sha512: % cd $(dir $^); \ sha512sum $(notdir $^) > $(notdir $@) print-unsupported: #! print unsupported platforms @echo -n $(UNSUPPORTED_PLATFORMS) pos-statistics: #! print statistics about the number of the different part-of-speech tags used pos-statistics: $(dictname).tei @grep -o ".*" $< | perl -p -e 's/(.*)<\/pos>/$$1/;' | sort | uniq -c |sort -b -g # Query platform support status # This yields an exit status of # 0 for dict supported on this platform # 1 for dict unsupported on this platform # 2 FOR unknown platform query-%: #! query platform support; 0=supported, 1=unsupported, 2=unknown @echo "Unknown platform: $*"; exit 2 $(addprefix query-,$(known_platforms)): query-%: @if [ -n "$(filter $*,$(UNSUPPORTED_PLATFORMS))" ]; then \ echo "Platform $* does not support this dictionary module."; exit 1; fi @echo "Platform $* supports this dictionary module." release: #! build releases for all available platforms release: $(foreach platform,$(available_platforms),release-$(platform)) version: #! output current (source) version number @echo $(version) ################################################################################ #### Quality Assurance Helpers ################################################################################ # Each helper HAS TO output an error code and each of the error codes need to # have an explanation in $FREEDICT_TOOLS/mk/qa. describe: #! `make describe E=` explains CODE, as printed by `make qa` @if [ -f "$$FREEDICT_TOOLS/mk/qa/${E}.md" ]; then \ cat "$$FREEDICT_TOOLS/mk/qa/${E}.md"; \ else \ echo "No such error code."; \ fi has_venv = $(if $(wildcard $(VIRTUAL_ENV)),,has-venv) has-venv: @echo "No python virtual environment found (possibly causing the errors above)."; \ echo "Read $$FREEDICT_TOOLS/README or execute "; \ echo 'make -C $$FREEDICT_TOOLS mk_venv-help' # This is a makefile-internal rule. It detects problems (duplicated entries or # empty nodes) within TEI files and prints a warning, if appropriate. By default # it does not fail when an issue is encountered to allow the continuation of # parent targets as `qa`. However, if used from a script, the a non-zero exit # code can be enforced on error by supplying EXIT=y report-duplicates: report-duplicates: $(dictname).tei @$(call exc_pyscript,rm_duplicates,-s,$<) || \ (if [ "${EXIT}" = "y" ]; then exit 1; fi) qa: #! execute quality assurance helpers, use make explain E='NUM' if an error occurs qa: report-duplicates validation | $(call has_venv) rm_duplicates: #! remove duplicated entries and empty XML nodes and present a diff of the changes rm_duplicates: $(dictname).tei @$(call exc_pyscript,rm_duplicates,$<) validation: #! validate dictionary with FreeDict's TEI XML subset validation: $(dictname).tei @$(XMLLINT) --noout --xinclude --relaxng freedict-P5.rng $< ###################################################################### #### Dict(d) format as used by the Dictd server and other programs ###################################################################### BUILD_DICTD=$(BUILD_DIR)/dictd $(BUILD_DICTD)/$(dictname).c5: $(call dict_tei_source) \ $(xsldir)/tei2c5.xsl $(xsldir)/inc/teientry2txt.xsl \ $(xsldir)/inc/teiheader2txt.xsl \ $(xsldir)/inc/indent.xsl @mkdir -p $(dir $@) $(XSLTPROCESSOR) $(XSLTPROCESSORARGS) $(xsldir)/tei2c5.xsl $< >$@ build-dictd: $(BUILD_DICTD)/$(dictname).dict.dz $(BUILD_DICTD)/$(dictname).index $(BUILD_DICTD)/%.dict $(BUILD_DICTD)/%.index: $(BUILD_DICTD)/%.c5 query-dictd cd $(BUILD_DICTD) && \ dictfmt --without-time -t --headword-separator %%% $(DICTFMTFLAGS) $* < $(notdir $<) $(BUILD_DICTD)/%.dict.dz: $(BUILD_DICTD)/%.dict dictzip -k $< # prevent make from removing our precious file .PRECIOUS: $(BUILD_DICTD)/$(dictname).dict # build release archive $(call gen_release_path,dictd): $(BUILD_DICTD)/$(dictname).dict.dz $(BUILD_DICTD)/$(dictname).index tar --dereference --transform='s/build.dictd.//' -C .. -cJf $@ \ $(addprefix $(notdir $(realpath .))/, $^) \ $(addprefix $(notdir $(realpath .))/, $(DISTFILES_BINARY)) release-dictd: $(RELEASE_DIR) $(call gen_release_path,dictd) \ $(call gen_release_hashpath,dictd) ################################################################################ #### Source 'platform' ################################################################################ # put all sources of a dictionary module into a tarball for release # ("distribution"). this only includes the .tei file if it doesn't have to be # generated from other sources $(call gen_release_path,src): $(RELEASE_DIR) $(DISTFILES) tar --dereference -C .. -cJf $@ \ $(addprefix $(notdir $(realpath .))/, $(DISTFILES)) # empty rule to fit into build system (build-) build-src: $(dictname).tei release-src: $(call gen_release_path,src) $(call gen_release_hashpath,src) ################################## #### targets for StarDict platform ################################## PYGLOSSARY ?= pyglossary BUILD_STARDICT=$(BUILD_DIR)/stardict BUILD_STARDICT_FILES=$(foreach EXT,ifo idx.gz dict,$(BUILD_STARDICT)/$(dictname).$(EXT)) # Force the shared producer when a required output is missing. stardict_required_files := $(BUILD_STARDICT_FILES) $(if $(shell \ grep -E '^synwordcount=[1-9][0-9]*$$' $(BUILD_STARDICT)/$(dictname).ifo 2>/dev/null),\ $(BUILD_STARDICT)/$(dictname).syn) check-stardict: $(BUILD_STARDICT)/build.stamp: $(call dict_tei_source) \ $(if $(filter-out $(wildcard $(stardict_required_files)),$(stardict_required_files)),check-stardict) | query-stardict @mkdir -p "$(BUILD_STARDICT)/tmp" rm -f "$(BUILD_STARDICT)/tmp/"* $(call exc_pyscript,$(PYGLOSSARY),--ui=cmd --read-format=FreeDict --write-format=Stardict \ --write-options='dictzip=false;dictzip_syn=false' "$<" "$(BUILD_STARDICT)/tmp/$(dictname).ifo") \ > "$(BUILD_STARDICT)/tmp/pyglossary-stardict.out" 2>&1 for ext in ifo idx dict; do \ test -f "$(BUILD_STARDICT)/tmp/$(dictname).$$ext" || exit 1; done if grep -Eq '^synwordcount=[1-9][0-9]*$$' "$(BUILD_STARDICT)/tmp/$(dictname).ifo"; then \ test -f "$(BUILD_STARDICT)/tmp/$(dictname).syn"; fi gzip -n -9 -f "$(BUILD_STARDICT)/tmp/$(dictname).idx" rm -f "$@" $(addprefix $(BUILD_STARDICT)/$(dictname).,syn syn.dz dict.dz) mv "$(BUILD_STARDICT)/tmp/"* "$(BUILD_STARDICT)/" touch "$@" $(BUILD_STARDICT_FILES): $(BUILD_STARDICT)/build.stamp @test -f "$@" build-stardict: $(BUILD_STARDICT)/build.stamp # all files for distribution, evaluated lazily stardict_distribution_files = $(BUILD_STARDICT_FILES) $(wildcard $(BUILD_STARDICT)/$(dictname).syn) $(call gen_release_path,stardict): $(BUILD_STARDICT_FILES) | $(RELEASE_DIR) tar --dereference --transform='s|^|$(dictname)/|' -cJf "$@" \ -C "$(abspath $(BUILD_STARDICT))" $(notdir $(stardict_distribution_files)) \ $(if $(strip $(DISTFILES_BINARY)),-C "$(CURDIR)" $(DISTFILES_BINARY)) release-stardict: $(RELEASE_DIR) $(call gen_release_path,stardict) \ $(call gen_release_hashpath,stardict) clean:: rm -f $(BUILD_STARDICT)/$(dictname).idx.gz \ $(BUILD_STARDICT)/$(dictname).dict $(BUILD_STARDICT)/$(dictname).ifo \ $(BUILD_STARDICT)/freedict-$(dictname)-$(version)-stardict.tar.bz2 \ pyglossary-stardict.out authorresp.out title.out sourceurl.out ####################### #### Slob format for the Aard Android dictionary client ####################### build-slob: $(BUILD_DIR)/slob/$(dictname)-$(version).slob $(BUILD_DIR)/slob/$(dictname)-$(version).slob: $(call dict_tei_source) @mkdir -p $(dir $@) rm -f $@ $(call exc_pyscript,tei2slob,-w,$(BUILD_DIR)/slob,-o,$@,$<) $(call gen_release_path,slob): $(BUILD_DIR)/slob/$(dictname)-$(version).slob $(RELEASE_DIR) cp $< $@ # make the hash depend on the release file $(call gen_release_hashpath,slob): $(call gen_release_path,slob) release-slob: $(call gen_release_path,slob) $(call gen_release_hashpath,slob) ###################################### #### install targets ###################################### DICTD_INSTDIR ?= $(PREFIX)/share/dictd install-dictd-base: $(BUILD_DICTD)/$(dictname).dict.dz $(BUILD_DICTD)/$(dictname).index install -d "$(DESTDIR)$(DICTD_INSTDIR)" install -m 644 $^ "$(DESTDIR)$(DICTD_INSTDIR)" install-dictd: install-dictd-base @echo -n 'Sucessfully installed the dictionary. Use `sudo dictdconfig -w` and ' @if command -v systemctl 2>&1 > /dev/null; then \ echo -n '`systemctl restart dictd`'; \ elif command -v service 2>&1 > /dev/null; then \ echo -n '`service dictd restart`'; \ else \ echo -n 'restart your dictd server'; \ fi @echo ' to make use of the new dictionary.' STARDICT_INSTDIR ?= $(PREFIX)/share/stardict/dic install-stardict: $(BUILD_STARDICT_FILES) install -d "$(DESTDIR)$(STARDICT_INSTDIR)" install -m 644 $(stardict_distribution_files) "$(DESTDIR)$(STARDICT_INSTDIR)" @if [ ! -f "$(BUILD_STARDICT)/$(dictname).syn" ]; then \ rm -f "$(DESTDIR)$(STARDICT_INSTDIR)/$(dictname).syn"; fi SLOB_INSTDIR ?= $(PREFIX)/share/slob install-slob: $(BUILD_DIR)/slob/$(dictname)-$(version).slob install -d "$(DESTDIR)$(SLOB_INSTDIR)" install -m 644 "$<" "$(DESTDIR)$(SLOB_INSTDIR)/$(dictname).slob" install: #! install the dictionary install: $(foreach P,$(filter-out src,$(available_platforms)),install-$(P)) install-restart: #! install all formats and restart dictd unless staging with DESTDIR install-restart: install @if [ -z "$(DESTDIR)" ]; then sh "$(DICTD_RESTART_SCRIPT)"; fi uninstall-dictd: rm -f "$(DESTDIR)$(DICTD_INSTDIR)/$(dictname).dict.dz" \ "$(DESTDIR)$(DICTD_INSTDIR)/$(dictname).index" uninstall-stardict: rm -f $(foreach EXT,ifo idx.gz dict syn dict.dz syn.dz,"$(DESTDIR)$(STARDICT_INSTDIR)/$(dictname).$(EXT)") uninstall-slob: rm -f "$(DESTDIR)$(SLOB_INSTDIR)/$(dictname).slob" uninstall: #! remove all installed binary formats without restarting host services uninstall: $(foreach P,$(filter-out src,$(known_platforms)),uninstall-$(P)) ####################### #### Makefile-technical ####################### # should be default, but is not for make-historic reasons .DELETE_ON_ERROR: .PHONY: $(sort all build $(addprefix build-,$(known_platforms)) check-stardict clean \ deploy $(addprefix deploy-,$(known_platforms)) dist find-homographs install \ install-dictd-base install-restart $(addprefix install-,$(filter-out src,$(known_platforms))) \ pos-statistics print-unsupported $(addprefix query-,$(known_platforms)) \ release $(addprefix release-,$(known_platforms)) \ test test-reverse tests uninstall $(addprefix uninstall-,$(filter-out src,$(known_platforms))) \ validation version) tools-0.8.0-beta.1/mk/qa/000077500000000000000000000000001526415265400147515ustar00rootroot00000000000000tools-0.8.0-beta.1/mk/qa/1.md000066400000000000000000000002571526415265400154370ustar00rootroot00000000000000The rm_duplicates script detected either empty XML nodes or completely doubled translations. You can use `make rm_duplicates` to remove them and to see a diff of the changes. tools-0.8.0-beta.1/requirements.txt000066400000000000000000000003341526415265400172250ustar00rootroot00000000000000./fd_tool ./importers semver>=3.0.4,<4 pyicu>= 2.10 ankisync==0.1.6.3 -e git+https://github.com/itkach/slob#egg=slob -e git+https://github.com/itkach/tei2slob#egg=tei2slob pyglossary>=5.4.2 # for pyglossary: lxml>=6.0.2 tools-0.8.0-beta.1/teiaddphonetics000077500000000000000000000303441526415265400170420ustar00rootroot00000000000000#!/usr/bin/env python3 # (c) 2020 Sebastian Humenda; Licence: GPL-3+ # pylint: disable=global-statement """Restrictions: - Escaping within elements could be "lost" since the parser considers ' and other characters not to be worth escaping. - Name spacing is ignored. This script depends on eSpeakNG and /usr/share/isocodes. On Debian-based systems, install the packages isocodes and espeak-ng.""" import argparse import json import os import re import shutil import subprocess import sys import xml.sax as sax ISO_639_TABLE = "/usr/share/iso-codes/json/iso_639-3.json" # We rely on espeak-ng to output a single line of output for a given input line. # However, there seem to be characters that trigger additional newlines. So a # long word list, with a phrase per line, must have a one-to-one mapping on its # output. Therefore we replace those characters causing unexpected newlines. CHARACTER_REPLACEMENTS = { '"', "(", ")", "{", "}", ",", "...", ".", ":", ";", "!", "?", "-", "…", "'", "[", "´", "&", "°", "$", "]", "®", "-", "Ì©", "£", "%", "\\", "§", "­", "/", "+", "‘", "̃", "²", "³", "\n", "\r", chr(0x60C), # from ara-eng "−", "–", "—", "↑", "→", "â†�", "ï¼ ", ".", "〜", "×", "+", "&", "~", "↓", "ã€�", } ESPEAKNG_LANG_CORRECTIONS = { "swh": "sw", # eSpeak 1.49 uses "sw" that stands for "swa", while FD uses "swh" } DEBUG = None # pylint: disable=too-few-public-methods class Orth: """A representation of a element.""" def __init__(self, attrs): self.attrs = attrs self.text = [] class Entry: """A (mostly) serialised entry. An entry may contain strings or Orth nodes. It also mimics an output stream using the write method.""" def __init__(self, attrs): attrs = "".join(f' {k}="{v}"' for k, v in attrs.items()) self.xml = [f""] def write(self, item): """ToDo: text or orth.""" self.xml.append(item) def contains_pronunciation(self): return any( token for token in self.xml if isinstance(token, str) and "= EspeakNg.RESTART_AFTER: self.reset() headword = "".join(orth.text) headword = self.escape(headword) self.non_alpha.update( c for c in headword if not (c.isalpha() or c.isdigit() or c.isspace()) ) self.proc.stdin.write(headword.encode(sys.getdefaultencoding()) + b"\n") self.proc.stdin.flush() buf = self.proc.stdout.readline() word = buf.decode(sys.getdefaultencoding()).strip() if DEBUG: open(DEBUG, "a").write(f"{headword} :: {word}\n") self.headwords_transcribed += 1 return word def escape(self, word): """Escape any punctuation, see ipa().""" for ch in CHARACTER_REPLACEMENTS: word = word.replace(ch, " ") return word.replace(" ", " ") def close(self): remainder = self.proc.communicate()[0] if remainder: import textwrap non_alpha = "".join(self.non_alpha) print( "\n".join( textwrap.wrap( "Error: {} lines found that were not " "recognised by this script during IPA transcription of " "eSpeak-NG. This is a bug due to special characters that lead " " to unexpected newlines in the eSpeak-NG output. Expected is " "a line per headword. Use --debug to save the transcriptions to a " "separate file." ) ).format(len(remainder.split(b"\n"))) + f"\nPotentially problematic characters: {non_alpha}" ) sys.exit(9) ret = self.proc.wait() if ret != 0: raise OSError(f"Espeak-ng gave non-zero exit code {ret}.") def reset(self): """Reset eSpeak-NG to avoid filling the OS stdin buffer.""" self.close() self._start() class TeiConsumer(sax.handler.ContentHandler): """A streaming SAX parser that calls a registered handler function to process elements.""" def __init__(self, file_handle, ipa_generator): # This is either None or a list. If it is a list, all text data will be # appended. self.current_orth = None self.outstream = file_handle self.outstream_backup = None super().__init__() self.ipa_generator = ipa_generator def endDocument(self): self.outstream.write("\n") self.outstream.close() self.ipa_generator.close() def startElement(self, name, attrs): """Signals the start of an element in non-namespace mode.""" if not attrs: attrs = {} if name == "entry": self.outstream_backup = self.outstream self.outstream = Entry(attrs) elif name == "orth": self.current_orth = Orth(attrs) else: attrs = attrs.items() self.outstream.write(f"<{name}") if attrs: for k, v in attrs: self.outstream.write(f' {k}="{v}"') self.outstream.write(">") def endElement(self, name): """Signals the end of an element in non-namespace mode.""" if name == "orth": # add the Orth to the Entry self.outstream.write(self.current_orth) self.current_orth = None elif name == "entry": entry = self.outstream self.outstream = self.outstream_backup for item in entry.xml: if isinstance(item, Orth): attrs = "".join(f' {k}="{v}"' for k, v in item.attrs.items()) text = sax.saxutils.escape("".join(item.text)) self.outstream.write(f"{text}") # It could be that one orth has transcriptions, another # doesn't, these cases are ignored in this version if not entry.contains_pronunciation(): # transcriptions are rarely empty transcribed = sax.saxutils.escape(self.ipa_generator.ipa(item)) if transcribed: self.outstream.write(f"\n{transcribed}") else: self.outstream.write(item) self.outstream.write(f"") else: self.outstream.write(f"") def characters(self, content): """Receive notification of character data.""" if self.current_orth: self.current_orth.text.append(content) else: self.outstream.write(sax.saxutils.escape(content)) def ignorableWhitespace(self, whitespace): """Receive notification of ignorable whitespace in element content.""" self.outstream.write(whitespace) def espeakng_voice(iso_639_3_code): """Return the Espeak-NG voice from the given ISO 639-3 code. StopIteration is raised if language is unknown.""" # Read all available languages first if not os.path.exists(ISO_639_TABLE): print("Error: failed to load {ISO_639_TABLE}.") print("This file can be found in the isocodes package on Debian-based systems.") sys.exit(3) proc = subprocess.run(["espeak-ng", "--voices"], capture_output=True) espeakng_voices = set() for voice in proc.stdout.decode(sys.getdefaultencoding()).split("\n"): voice = re.search(r"^\s*[0-9]*\s*([a-z]+)(-[0-9]*[a-z]*)?\s.*$", voice) if voice: espeakng_voices.add(voice.group(1)) all_iso_639 = json.load(open(ISO_639_TABLE))["639-3"] # Let StopIteration propagate lang = next(l for l in all_iso_639 if l["alpha_3"] == iso_639_3_code) # get the ISO-639-1 code (alpha_2) and afterwards, try to detect whether # there's a correction that maps from a code used by FD to one used by # eSpeakNG lang = lang.get("alpha_2", iso_639_3_code) lang = ESPEAKNG_LANG_CORRECTIONS.get(lang, lang) if lang not in espeakng_voices: print(f'Error, espeak did not recognise language "{lang}".') sys.exit(6) return lang def xml_preamble(tei_file): """Extract everything until = 0: lines.append(line[:idx]) break else: lines.append(line) tei_file.seek(0) return "".join(lines) if found else "" def handle_cmdline(): global DEBUG parser = argparse.ArgumentParser( description="Enrich a TEI file with pronunciation info." ) parser.add_argument( "tei_dict", metavar="TEI_DICT", nargs="?", help="input file name" ) parser.add_argument( "-o", dest="outpath", metavar="OUTPUT_PATH", nargs=1, help="write processed TEI to given output file. default is \ xxx-yyy-phoneme.tei", ) parser.add_argument( "--supports-lang", dest="supports_lang", metavar="LANG", nargs=1, help="test wheter given language (ISO 639-3) is supported by eSpeak", ) parser.add_argument( "--debug", dest="debug", metavar="DEBUGFILE", nargs=1, help="write phoneme transcription to specified file. The\ file will have a headword per line, separated by colons from \ the transcription. This helps to find the problematic \ headword if transcriptions start to mismatch.", ) args = parser.parse_args() teipath = None # Handle --supports-lang that aborts after the check, return results # otherwise if args.supports_lang: try: espeakng_voice(args.supports_lang[0]) except StopIteration: # raised to propagate missing language sys.exit(4) else: sys.exit(0) elif not args.tei_dict: print("Error, need to provide input TEI file") sys.exit(9) teipath = args.tei_dict if args.outpath: outpath = args.outpath[0] else: outpath = f"{os.path.splitext(teipath)[0]}-phonetics.tei" if args.debug: DEBUG = args.debug[0] return (teipath, outpath) def main(): teipath, outpath = handle_cmdline() # Guess eSpeak-NG voice to use lang = os.path.splitext(os.path.basename(teipath))[0].split("-")[0] ipa_gen = EspeakNg(espeakng_voice(lang)) # Extract preamble (not parsed by SAX parser), write and call SAX parser # afterwards with open(teipath) as teifile: outfile = open(outpath, "w") # closed by TeiConsumer outfile.write(xml_preamble(teifile)) parser = sax.make_parser() teihandler = TeiConsumer(outfile, ipa_gen) parser.setContentHandler(teihandler) parser.parse(teifile) if __name__ == "__main__": main() tools-0.8.0-beta.1/teidiff000077500000000000000000000360371526415265400153120ustar00rootroot00000000000000#!/usr/bin/perl # $Revision$ use warnings; use strict; use Getopt::Long; use Pod::Usage; use XML::DOM; use Text::Diff; my ($verbose, $help); my $count = 1; my $base; my $output; GetOptions ( "verbose" => \$verbose, "help|?" => \$help, "count" => \$count, "base=s" => \$base, "output=s" => \$output) or exit 1; pod2usage(-exitval => 1, -verbose => 2) if $help; if (scalar @ARGV != 2) { print STDERR "I need exactly 2 filenames to operate. For help use --help.\n"; exit 1 } if (defined $output) { $output = uc $output; unless ($output =~ /^FILES|UNMODIFIED|ADDED|DELETED|MODIFIED_(LA1|LA2|MULTIMATCH)$/) { print STDERR "Invalid category: $output\n"; exit 1 } } my $parser = new XML::DOM::Parser; print STDERR "Parsing $ARGV[0]... " if $verbose; my $doc1 = $parser->parsefile ($ARGV[0]); my @entries1 = $doc1->getElementsByTagName ("entry"); my $entries1 = scalar @entries1; print STDERR $entries1, " entries\nParsing $ARGV[1]... " if $verbose; my $doc2 = $parser->parsefile ($ARGV[1]); undef $parser; my @entries2 = $doc2->getElementsByTagName ("entry"); my $entries2 = scalar @entries2; print STDERR $entries2, " entries\n" if $verbose; sub pretty_print { my ($node, $indent) = @_; my $type = $node->getNodeType; return $node->getNodeValue if $type == TEXT_NODE; if ($type == ELEMENT_NODE) { $indent = 0 unless defined $indent; my $contents = undef; for my $c ($node->getChildNodes) { my $cpp = pretty_print ($c, $indent+2); if (defined $contents) { $contents .= $cpp; next } $contents = $cpp } my $attrs = ''; for my $a ($node->getAttributes->getValues) { $attrs .= ' ' . $a->getNodeName . '=' . $a->getNodeValue } return ' ' x $indent . '<' . $node->getNodeName . $attrs . '/>' unless defined $contents; return ' ' x $indent . '<' . $node->getNodeName . $attrs . '>' . ($node->getFirstChild->getNodeType == ELEMENT_NODE ? "\n" : '') . $contents . ($node->getLastChild->getNodeType == ELEMENT_NODE ? ' ' x $indent : '') . 'getNodeName . ">\n" } die "Unhandled node type: ", $node->getNodeType } my (@unmodified, @added, @deleted, @modified_form, @modified_senses, @modified_multimatch, %entry2form, %entry2senses, %entry2complete, %complete2entry1, %form2entry1, %senses2entry1, %complete2entry2, %form2entry2, %senses2entry2); # adds an entry to an arrayref sub put { my ($hashref, $index, $entry) = @_; if (exists $hashref->{$index}) { push @{ $hashref->{$index} }, $entry } else { $hashref->{$index} = [ $entry ] } } # deletes an entry from an arrayref # the entry may occur only once sub remove { my ($hashref, $index, $entry) = @_; die join ' ', caller unless defined $hashref && defined $index; return unless exists $hashref->{$index}; my @entries = @{ $hashref->{$index} }; my $count = scalar @entries; if ($count == 1) { return unless $entries[$#entries] eq $entry; delete $hashref->{$index}; return } for (my $i=0; $i <= $count ; $i++) { next unless exists $entries[$i]; next unless $entries[$i] == $entry; delete $entries[$i]; return } warn "No entry removed"; } # Removes the entries in $entry2arrayref from the $x2entryhashrefs given. # Each $x2entryhashref argument must be followed by an $entry2xhashref. sub removeall { my $entryarrayref = shift; while(my $x2entryhashref = shift) { my $entry2x = shift; die unless defined $entry2x; for my $entry (@$entryarrayref) { remove $x2entryhashref, $entry2x->{$entry}, $entry } } } sub find_unmodified_or_modified { my $found = 0; for (keys %complete2entry1) { next if 1 < scalar @{ $complete2entry1{$_} }; next unless exists $complete2entry2{$_}; next if 1 != scalar @{ $complete2entry2{$_} }; my $entry1 = $complete2entry1{$_}->[0]; my $entry2 = $complete2entry2{$_}->[0]; push @unmodified, $entry1; delete $complete2entry1{$_}; delete $complete2entry2{$_}; remove \%form2entry1, $entry2form{$entry1}, $entry1; remove \%form2entry2, $entry2form{$entry1}, $entry2; remove \%senses2entry1, $entry2senses{$entry1}, $entry1; remove \%senses2entry2, $entry2senses{$entry1}, $entry2; $found++ } for (keys %form2entry1) { next if 1 < scalar @{ $form2entry1{$_} }; next unless exists $form2entry2{$_}; next if 1 != scalar @{ $form2entry2{$_} }; my $entry1 = $form2entry1{$_}->[0]; my $entry2 = $form2entry2{$_}->[0]; push @modified_senses, [ $entry1, $entry2 ] ; remove \%complete2entry1, $entry2complete{$entry1}, $entry1; remove \%complete2entry2, $entry2complete{$entry2}, $entry2; delete $form2entry1{$_}; delete $form2entry2{$_}; remove \%senses2entry1, $entry2senses{$entry1}, $entry1; remove \%senses2entry2, $entry2senses{$entry2}, $entry2; $found++ } for (keys %senses2entry1) { next if 1 < scalar @{ $senses2entry1{$_} }; next unless exists $senses2entry2{$_}; next if 1 != scalar @{ $senses2entry2{$_} }; my $entry1 = $senses2entry1{$_}->[0]; my $entry2 = $senses2entry2{$_}->[0]; push @modified_form, [ $entry1, $entry2 ] ; remove \%complete2entry1, $entry2complete{$entry1}, $entry1; remove \%complete2entry2, $entry2complete{$entry2}, $entry2; remove \%form2entry1, $entry2form{$entry1}, $entry1; remove \%form2entry2, $entry2form{$entry2}, $entry2; delete $senses2entry1{$_}; delete $senses2entry2{$_}; $found++ } print STDERR "$found entries matched\n" if $verbose; return $found } sub find_added_deleted { print STDERR "Finding added and deleted entries... " if $verbose; # an entry was deleted/added when no match # for it exists in the other file # since single matches should be sorted out by now, # only multimatches remain to be skipped for (keys %complete2entry1) { # the next line should never apply next if exists $complete2entry2{$_}; my $skip = 0; for my $entry1 (@{ $complete2entry1{$_} }) { next unless exists $form2entry2{ $entry2form{$entry1} } || exists $senses2entry2{ $entry2senses{$entry1} }; $skip = 1; last } next if $skip; push @deleted, @{ $complete2entry1{$_} }; removeall $complete2entry1{$_}, \%form2entry1, \%entry2form, \%senses2entry1, \%entry2senses; delete $complete2entry1{$_} } for (keys %complete2entry2) { next if exists $complete2entry1{$_}; my $skip = 0; for my $entry2 (@{ $complete2entry2{$_} }) { next unless exists $form2entry1{ $entry2form{$entry2} } || exists $senses2entry1{ $entry2senses{$entry2} }; $skip = 1; last } next if $skip; push @added, @{ $complete2entry2{$_} }; removeall $complete2entry2{$_}, \%form2entry2, \%entry2form, \%senses2entry2, \%entry2senses; delete $complete2entry2{$_} } print STDERR "\n" if $verbose; } # Actually there is nothing more to find. We just put together the remains # of the lists. sub find_modified_multimatch { print STDERR "Collecting the multimatches... " if $verbose; my (@from1, @from2); for (values %complete2entry1) { push @from1, @$_ } for (values %complete2entry2) { push @from2, @$_ } push @modified_multimatch, [ @from1 ], [ @from2 ]; print STDERR "\n" if $verbose; } sub cache_toStrings { my ($entries, $complete2entry, $form2entry, $senses2entry) = @_; for (@$entries) { # a complete comparison key is easy (if canonicalised XML is used) my $scomplete = $_->toString (); put $complete2entry, $scomplete, $_; $entry2complete{$_} = $scomplete; # comparison key for form: concat and child nodes # comparison key for senses: concatenate all other child nodes my @children = $_->getChildNodes (); my $ssenses = my $sforms = ''; for my $child (@children) { if ($child->getTagName () =~ /^form|gramGrp$/) { $sforms .= $child->toString (); next } $ssenses .= $child->toString () } put $form2entry, $sforms, $_; $entry2form{$_} = $sforms; put $senses2entry, $ssenses, $_; $entry2senses{$_} = $ssenses } } print STDERR "Caching results of toString()..." if $verbose; cache_toStrings \@entries1, \%complete2entry1, \%form2entry1, \%senses2entry1; undef @entries1; cache_toStrings \@entries2, \%complete2entry2, \%form2entry2, \%senses2entry2; undef @entries2; print STDERR "\n" if $verbose; my $i = 1; do { print STDERR "Comparison iteration ", $i, "... " if $verbose; $i++ } while find_unmodified_or_modified; find_added_deleted; find_modified_multimatch; print STDERR "Finished comparison.\n" if $verbose; undef %complete2entry1; undef %form2entry1; undef %senses2entry1; undef %complete2entry2; undef %form2entry2; undef %senses2entry2; if ($count) { my $unmodified = scalar @unmodified; my $added = scalar @added; my $deleted = scalar @deleted; my $modified_form = scalar @modified_form; my $modified_senses = scalar @modified_senses; my $mm1 = scalar @{ $modified_multimatch[0] }; my $mm2 = scalar @{ $modified_multimatch[1] }; print "Unmodified:\t\t$unmodified\n"; print "Added:\t\t\t$added\n"; print "Deleted:\t\t$deleted\n"; print "Modified :\t$modified_form\n"; print "Modified s:\t$modified_senses\n"; print "Modified multimatch:\t$mm1 + $mm2\n"; my $sum1 = $unmodified + $deleted + $modified_form + $modified_senses + $mm1; my $sum2 = $unmodified + $added + $modified_form + $modified_senses + $mm2; print STDERR "file1: unmod + del + mod_form + mod_sense + mm1 = ", $sum1, ($sum1 == $entries1 ? ' OK' : ' MISMATCH') . " \n" if $verbose; print STDERR "file2: unmod + add + mod_form + mod_sense + mm2 = ", $sum2, ($sum2 == $entries2 ? ' OK' : ' MISMATCH') . " \n" if $verbose; } sub print_category_fh { my ($fh, $category) = @_; print STDERR "Outputting category $category... " if defined $verbose and $verbose>1; if ($category eq 'UNMODIFIED') { print $fh pretty_print $_ for (@unmodified) } elsif ($category eq 'ADDED') { print $fh pretty_print $_ for (@added) } elsif ($category eq 'DELETED') { print $fh pretty_print $_ for (@deleted) } elsif ($category eq 'MODIFIED_LA1') { for (@modified_form) { my $pretty1 = pretty_print $_->[0]; my $pretty2 = pretty_print $_->[1]; my %options = (); my $diff = diff \$pretty1, \$pretty2, \%options; print $fh $diff } } elsif ($category eq 'MODIFIED_LA2') { for (@modified_senses) { my $pretty1 = pretty_print $_->[0]; my $pretty2 = pretty_print $_->[1]; my %options = (); my $diff = diff \$pretty1, \$pretty2, \%options; print $fh $diff } } elsif ($category eq 'MODIFIED_MULTIMATCH') { # output entry sets print $fh "\n"; print STDERR "file1... " if $verbose; print $fh pretty_print $_ for (@{ $modified_multimatch[0] }); print $fh "\n\n"; print STDERR "file2... " if $verbose; print $fh pretty_print $_ for (@{ $modified_multimatch[1] }); print $fh "\n" } else { warn "Invalid category: $category" } print STDERR "done.\n" if defined $verbose and $verbose>1 } sub print_category_file { my ($filename, $category) = @_; my $fh; unless (open $fh, '>:utf8', $filename) { print STDERR "Could not open $filename for writing: $!\n"; return } print STDERR "Writing $filename... " if $verbose; print_category_fh $fh, $category; close $fh; print STDERR "OK\n" if $verbose } exit unless defined $output; $base = $ARGV[0] . '-' . $ARGV[1] unless defined $base; if ($output eq 'FILES') { print_category_file $base . '-unmodified.teipart', 'UNMODIFIED'; undef @unmodified; print_category_file $base . '-added.teipart', 'ADDED'; undef @added; print_category_file $base . '-deleted.teipart', 'DELETED'; undef @deleted; print_category_file $base . '-modified_la1.udiff', 'MODIFIED_LA1'; undef @modified_form; print_category_file $base . '-modified_la2.udiff', 'MODIFIED_LA2'; undef @modified_senses; print_category_file $base . '-modified_multimatch.xml', 'MODIFIED_MULTIMATCH'; exit } # print only category in $output to STDOUT open my $fh, '>:utf8',' -' or die; print_category_fh $fh, $output; close $fh; # __DATA__, keep a file1 and a file2 and the outfiles # XXX testcases, call with a commandline switch __END__ =head1 NAME teidiff - Compare the entries in two TEI XML dictionary files =head1 SYNOPSIS teidiff [options] file1 file2 Options: --base Basename for output files --[no]count Print number of added/modified/deleted entries to STDOUT --help This manual page --output Entry category to print to STDOUT --verbose Tell what I'm doing =head1 OPTIONS =over 8 =item B<--base BASENAME> Basename of output files. Default: F =item B<--[no]count> Print number of added/modified/deleted entries to STDOUT. Default: on. =item B<--help> Print this manual page and exit. =item B<--verbose> Print information about the current work performed to STDERR. =item B<--output CATEGORY> Can be set to the string "FILES" or a category of entries to output to STDOUT. By default nothing is output. If "FILES" is used, the filenames will follow the scheme F The following categories are allowed: =over 4 =item UNMODIFIED Unmodified entries. They appear exactly the same in both versions of the dictionary. =item ADDED Entries not present in file1, but in file2. They were added in F. =item DELETED Entries present in file1, but not in file2. They were deleted in F. =item MODIFIED_LA1 Entries where the contents of the element were modified, but the contents of the elements are unmodified. =item MODIFIED_LA2 Entries where the contents of the element(s) were modified, but the contents of the elements are unmodified. =item MODIFIED_MULTIMATCH Entries where the contents of the or elements were modified (but not both at the same time), but a corresponding entry was not found, because multiple matches exist ("multimatch"). This category is output as two sets - the entries from file1 and the entries from file2. One could build finer sets, consisting of only the entries between which the multimatch relationship exists. But this information is not useful enough for implementation currently. =back =back =head1 DESCRIPTION This program parses the given input files and compares the entries in them, putting them in B. One or all categories can be output. =head1 NOTES Normally ignorable blank space should not account for differences. C can be used as a filter to drop ignorable blank spaces: xmllint --noblanks infile.xml >outfile.xml C also comes with a C<--c14n> option, but using it is unadvisable, because it adds default attributes, bloating the file submerging relevant differences in a sea of explicitness. =head1 TODO Integrating the functionality of this command line tool into FreeDict-Editor would facilitate comfortable browsing of the differences. =head1 AUTHOR AND LICENCE Author: Michael Bunk, 2006 This is free software, licensed under GPL. =cut tools-0.8.0-beta.1/teimerge/000077500000000000000000000000001526415265400155425ustar00rootroot00000000000000tools-0.8.0-beta.1/teimerge/TEIMergeMainHandler.pm000066400000000000000000000074731526415265400216170ustar00rootroot00000000000000# module for teimerge # Teile entnommen aus CanonXMLWriter.pm # Copyright (C) 2002 Michael Bunk # # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # package TEIMergeMainHandler; # ESISParser zu verwenden ist tödlich, denn der fügt alle # #IMPLIED-Attribute hinzu!! #use XML::ESISParser; # der hier ist aber eher für XML als SGML! use XML::Parser::PerlSAX; # Ausgabe ist in UTF-8, da das vom parser geliefert wird!!! use TEIMergeOtherHandler; %char_entities = ( "\x09" => ' ', "\x0a" => ' ', "\x0d" => ' ', '&' => '&', '<' => '<', '>' => '>', '"' => '"', ); sub set_otherfilenames { my $self = shift; $filenamesref = shift; } sub new { my ($type) = @_; return bless {}, $type; } sub start_document { print " ]>\n"; } sub characters { my ($self, $element) = @_; $data = $element->{Data}; #print($self->_escape($data)); print($data); } sub ignorable_whitespace { my ($self, $element) = @_; $data = $element->{Data}; print($data); } sub processing_instruction { my $self = shift; my $pi = shift; if (exists $pi->{Data}) { print('{Target} . ' ' . $pi->{Data} . '?>'); } else { print('{Target} . '?>'); } } sub comment { my $self = shift; my $comment = shift; print(''); } sub start_element { my ($self, $element) = @_; $part = $element->{Name}; print('<' . $part); my $key; my $attrs = $element->{Attributes}; foreach $key (sort keys %$attrs) { print(" $key=\"" . $self->_escape($attrs->{$key}) . '"'); } print('>'); } sub end_element { my ($self, $element) = @_; my $part = $element->{Name}; if ( $part eq "BODY") { # nun sind alle entrys von mainfile ausgegeben worden, es folgen die otherfiles warn "Mainfile done.\n"; my $my_handler = TEIMergeOtherHandler->new; my @additional_args; # push (@additional_args, IsSGML => 1); # my $parser = XML::ESISParser->new; my $parser = XML::Parser::PerlSAX->new; foreach my $otherfile (@{$filenamesref}) { do { warn "Can't find file \"$otherfile\"\n"; next;} unless -f $otherfile; warn "Mache mich an $otherfile...\n"; $parser->parse(Source => { SystemId => $otherfile }, Handler => $my_handler, @additional_args); } }; print ""; } sub record_end { # print "\n"; } sub external_entity_ref { my ($self, $name) = @_; warn "external_entity_reference\n"; } sub notation_decl { my ($self, $name, $sysid, $pubid, $genid) = @_; warn "notation_decl\n"; } sub subdoc_entity_decl { my ($self, $name) = @_; warn "subdoc_entity_decl\n"; } sub external_sgml_entity_decl { my ($self, $name, $sysid, $pubid, $genid) = @_; warn caller, "external_sgml_entity_decl\n"; } sub _escape { my $self = shift; my $string = shift; $string =~ s/([\x09\x0a\x0d&<>"])/$char_entities{$1}/ge; return $string; } 1; tools-0.8.0-beta.1/teimerge/TEIMergeOtherHandler.pm000066400000000000000000000037671526415265400220160ustar00rootroot00000000000000# module for teimerge # # Copyright (C) 2002 Michael Bunk # # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # package TEIMergeOtherHandler; sub new { my ($type) = @_; return bless {}, $type; } sub characters { my ($self, $element) = @_; # wenn inside -> print, sonst nicht if (!$insideentry) {return;}; $data = $element->{Data}; chomp $data; $data =~ s/\s+$//; print $data; } sub start_element { my ($self, $element) = @_; $part = $element->{Name}; $insideentry = 1 if ( ($part eq "ENTRY") || ($part eq "entry")); if ($insideentry) { print('<' . $part); my $key; my $attrs = $element->{Attributes}; foreach $key (sort keys %$attrs) { print(" $key=\"" . $self->_escape($attrs->{$key}) . '"'); } print('>'); } } sub end_element { my ($self, $element) = @_; $part = $element->{Name}; print "\n" if ($insideentry); $insideentry = 0 if (($part eq "ENTRY") || ($part eq "entry")); } %char_entities = ( "\x09" => ' ', "\x0a" => ' ', "\x0d" => ' ', '&' => '&', '<' => '<', '>' => '>', '"' => '"', ); sub _escape { my $self = shift; my $string = shift; $string =~ s/([\x09\x0a\x0d&<>"])/$char_entities{$1}/ge; return $string; } 1; # muß stehenbleiben, damit perl nicht meckert tools-0.8.0-beta.1/teimerge/teimerge.pl000077500000000000000000000026251526415265400177100ustar00rootroot00000000000000#!/usr/bin/perl -w # V1.0 3/2002 Michael Bunk # * sgml output only, not xml yet # * no sorting of any kind # Vorgehen: # zwei parser+handler werden benoetigt: mainfile/otherfiles # 1. mainfile ausgeben (header + alle entries, aber nicht footer) # 2. otherfilesparser auf file1 ansetzen # 3. header des otherfile ueberlesen # 4. entries ausgeben # 5. otherfile schließen # 6. schritt 2 fuer file[2..N]... # 7. footer ausgeben () #use XML::ESISParser; use XML::Parser::PerlSAX; use TEIMergeMainHandler; my $mainfile = shift @ARGV; if ($mainfile eq "") { warn "Usage: teimerge []\n"; warn " To merge TEI encoded dict files. Output is on stdout.\n"; warn " The header of the mainfile is taken, others discarded.\n"; die; } die "Can't find file \"$mainfile\"" unless -f $mainfile; #push (@additional_args, IsSGML => 1); # an dieser stelle sollten die IMPLIED-Attribute auzuschalten sein # ? ist das möglich mit nsgmls? #$XML::ESISParser::NSGMLS_FLAGS_sgml = $XML::ESISParser::NSGMLS_FLAGS_sgml." -D/usr/share/sgml -cCATALOG.tei-3 "; my $mergemainhandler = TEIMergeMainHandler->new; $mergemainhandler->set_otherfilenames(\@ARGV); #XML::Parser::PerlSAX #XML::ESISParser XML::Parser::PerlSAX->new->parse(Source => { SystemId => $mainfile }, Handler => $mergemainhandler, @additional_args); # EOF tools-0.8.0-beta.1/teisort.pl000077500000000000000000000140621526415265400157750ustar00rootroot00000000000000#!/usr/bin/perl -w # V1.1 6/2002 by Guido Ostkamp, # * more dictd-like sorting with by_dict_sort() # # V1.0 4/2002 by Michael Bunk, # * does some sorting of a tei-file, but without parser (worked out on xml, # but might be fine with sgml - i didn't try it) # * problem: xml-parser would not tell position, would it? # * so let's do without parser ;-) # * using some undefined collation order # * i wrote this to be able to merge double entrys # * sort with an in-memory index of # - keyword (first orth) # - byte-start-offset of entry in tei file (end is found by # outputting until ) # * we could try DB_File (see manpage), but let's try simple hash first # key: -characters # value: struct -offset # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # use strict; sub by_dict_sort { my $x = $a; my $y = $b; $x =~ s/[^\d\w\s]//gi; # remove all non-alphanumeric and non-whitespace $x =~ s/(.*)/\L$1/gi; # turn lowercase $y =~ s/[^\d\w\s]//gi; # remove all non-alphanumeric and non-whitespace $y =~ s/(.*)/\L$1/gi; # turn lowercase $x cmp $y } my $file = shift; unless(defined $file) { print STDERR "\nteisort - sort tei file without using any xml parser (not safe)\n"; print STDERR "\n The inputfile is expected in XML or SGML TEI format, see http://www.tei-c.org/\n"; print STDERR " Output is on stdout.\n\n"; print STDERR " Usage: teisort \n"; print STDERR " : name of tei inputfile\n\n"; die } die "Can't find file \"$file\"" unless -r $file; open HANDLE, "<".$file; print STDERR "Generating index in memory...\n"; my ($headend, $footstart, $offset, $entry, %orths, $orth, $counter, $tell_now, $tell_lastline); # when we find "", # but save everything inside a $entry (we could keep the whole text # in the hash!!! [this is just a notice for future reference # for myself]). then we look for the "$1" and use # $1 as key my $todo = ""; my $offsetOnLine = 0; my $searchmode = 0; # 0 = find end of header by finding "" # 2 = find end of entry by looking for "" # 3 = nothing more to find, we are inside the footer, break; # input is taken from $todo ! readfile: while () { $tell_lastline = $tell_now; $tell_now = tell; $todo .= $_; while ($todo ne "") { # find end of header if (($searchmode == 0) && ($todo =~ //i)) { $searchmode = 3; my $eoffset = index("<\/body>", $todo); $footstart = $tell_lastline + $eoffset; print STDERR "footoffset: $footstart\n"; #$offsetOnLine -= $eoffset; $todo = "";#substr($todo,0,$eoffset); last readfile #exit that loop } # find end of entry if (($searchmode == 2) && ($todo =~ /<\/entry>/i)) { $searchmode = 1; my $eoffset = index "", $todo; $entry .= substr($todo, 0, 8+$eoffset) . "\n"; $offsetOnLine -= $eoffset; $todo = substr $todo, 0, $eoffset; # find orth # /s modifies to treat $entry as single line if ($entry =~ /(.*)<\/orth>/s) { $orth = $1; #print STDERR "orth: '$orth'\n"; } else { #print STDERR "."; warn "no orth found in entry!!! there is something wrong! Entry is <$entry>" } # we may not overwrite any pair in the hash that we already have # but since the entry-elements are read from the tei file again, # the " *" is never seen in the output :) while(defined $orths{$orth}) { $orth .= " " } # save in hash $orths{$orth}=$offset; next } # else $entry .= $todo; $todo = ""; $offsetOnLine = 0 } } print STDERR " $counter entries\n"; ############################################################### print STDERR "Outputting sorted entries...\n"; # output header my $header; die unless sysseek HANDLE, 0, 0; sysread HANDLE, $header, $headend; print $header; $counter = 0; # this one simple sort call does the keywork! foreach $orth (sort by_dict_sort keys %orths) { $counter++; if ($counter % 100 == 0) { print STDERR " $counter entries\n" } $offset = $orths{$orth}; #print STDERR "offset: $offset\n"; sysseek HANDLE, $offset, 0; # output until my $stopword = ""; my $stopwordpos = 0; my $stopwordlength = length $stopword; my $c; do { sysread HANDLE, $c,1;# maybe sysread with more than one byte would be faster... print $c; if ($c eq substr($stopword, $stopwordpos, 1)) { $stopwordpos++ } else { $stopwordpos = 0 } } until $stopwordpos == $stopwordlength; } # foreach # output footer my $footer; die unless sysseek HANDLE, $footstart, 0; my @stats = stat HANDLE;# fetch tei filesize die unless @stats; sysread(HANDLE, $footer, $stats[7]-$footstart); print $footer; print STDERR " $counter entries\n"; close HANDLE tools-0.8.0-beta.1/testing/000077500000000000000000000000001526415265400154165ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/Makefile000066400000000000000000000002031526415265400170510ustar00rootroot00000000000000TEST_DIRS := buildhelpers fd_tool importers mk test: $(TEST_DIRS) $(TEST_DIRS): $(MAKE) -C "$@" test .PHONY: test $(TEST_DIRS) tools-0.8.0-beta.1/testing/buildhelpers/000077500000000000000000000000001526415265400201005ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/buildhelpers/Makefile000066400000000000000000000001211526415265400215320ustar00rootroot00000000000000include ../config.mk test: "$(PYTHON)" -m unittest discover -s . .PHONY: test tools-0.8.0-beta.1/testing/buildhelpers/test_register_venv.py000066400000000000000000000034071526415265400243770ustar00rootroot00000000000000"""Configuration registration regression tests.""" import importlib.util from pathlib import Path import tempfile import unittest from unittest.mock import patch spec = importlib.util.spec_from_file_location('register_venv', Path(__file__).parents[2] / 'buildhelpers/register_venv.py') register_venv = importlib.util.module_from_spec(spec) spec.loader.exec_module(register_venv) class RegisterTests(unittest.TestCase): def test_preserves_existing_settings_and_is_idempotent(self): with tempfile.TemporaryDirectory() as tmp: config = Path(tmp) / 'freedictrc' config.write_text('# keep this comment\n[DEFAULT]\napi_output_path = /tmp/api\n[release]\nuser = test\n') self.assertTrue(register_venv.register(config, Path(tmp) / 'venv', 'yes')) self.assertTrue(register_venv.register(config, Path(tmp) / 'venv', 'yes')) result = config.read_text() self.assertIn('# keep this comment\n', result) self.assertIn('api_output_path = /tmp/api\n', result) self.assertIn(f'virtual_env = {(Path(tmp) / "venv").resolve()}\n', result) self.assertIn('[release]\nuser = test\n', result) def test_noninteractive_auto_skips(self): with tempfile.TemporaryDirectory() as tmp, patch.object(register_venv.sys.stdin, 'isatty', return_value=False): config = Path(tmp) / 'freedictrc' self.assertFalse(register_venv.register(config, Path(tmp) / 'venv')) self.assertFalse(config.exists()) def test_no_never_writes(self): with tempfile.TemporaryDirectory() as tmp: config = Path(tmp) / 'freedictrc' self.assertFalse(register_venv.register(config, Path(tmp) / 'venv', 'no')) self.assertFalse(config.exists()) tools-0.8.0-beta.1/testing/buildhelpers/test_venv.py000066400000000000000000000050531526415265400224720ustar00rootroot00000000000000"""Bootstrap tests keep dependency installation isolated from the host.""" import importlib.util import os from pathlib import Path import subprocess import sys import tempfile import unittest from unittest.mock import patch REPO = Path(__file__).resolve().parents[2] spec = importlib.util.spec_from_file_location('create_venv', REPO / 'buildhelpers/create_venv.py') bootstrap = importlib.util.module_from_spec(spec) spec.loader.exec_module(bootstrap) class BootstrapTests(unittest.TestCase): def test_uses_selected_python_and_checkout_directory(self): with tempfile.TemporaryDirectory() as tmp, \ patch.object(bootstrap.sys, 'version_info', (3, 11)), \ patch.object(bootstrap.subprocess, 'run') as run: run.return_value.returncode = 0 destination = Path(tmp) / 'env with spaces' bootstrap.create_environment(destination, REPO) self.assertEqual(run.call_args_list[0].args[0], [sys.executable, '-m', 'venv', str(destination)]) install = run.call_args_list[2] self.assertEqual(install.kwargs['cwd'], REPO) self.assertEqual(install.args[0][:4], [str(destination / 'bin/python'), '-m', 'pip', 'install']) def test_missing_icu_has_actionable_error(self): with tempfile.TemporaryDirectory() as tmp, patch.dict(os.environ, {}, clear=True), \ patch.object(bootstrap.subprocess, 'run') as run: run.side_effect = [subprocess.CompletedProcess([], 0), subprocess.CompletedProcess([], 1), FileNotFoundError()] with self.assertRaisesRegex(RuntimeError, 'libicu-dev'): bootstrap.create_environment(Path(tmp) / 'env', REPO) def test_install_failure_does_not_run_check(self): with tempfile.TemporaryDirectory() as tmp, patch.object(bootstrap.subprocess, 'run') as run: run.side_effect = [subprocess.CompletedProcess([], 0), subprocess.CompletedProcess([], 0), subprocess.CalledProcessError(7, 'pip')] with self.assertRaises(subprocess.CalledProcessError): bootstrap.create_environment(Path(tmp) / 'env', REPO) self.assertEqual(run.call_count, 3) def test_refuses_unrelated_directory(self): with tempfile.TemporaryDirectory() as tmp: (Path(tmp) / 'important').write_text('keep') with self.assertRaisesRegex(RuntimeError, 'non-venv'): bootstrap.create_environment(Path(tmp), REPO) tools-0.8.0-beta.1/testing/config.mk000066400000000000000000000003731526415265400172170ustar00rootroot00000000000000# Locate the checkout independently of the directory invoking Make. TOOLS_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/..) PYTHON ?= python3 export PYTHONPATH := $(TOOLS_ROOT)/fd_tool:$(TOOLS_ROOT)/importers$(if $(PYTHONPATH),:$(PYTHONPATH)) tools-0.8.0-beta.1/testing/fd_tool/000077500000000000000000000000001526415265400170445ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/fd_tool/Makefile000066400000000000000000000002241526415265400205020ustar00rootroot00000000000000include ../config.mk test: "$(PYTHON)" -m unittest discover -s . "$(PYTHON)" -m unittest discover -s "$(TOOLS_ROOT)/fd_tool/tests" .PHONY: test tools-0.8.0-beta.1/testing/fd_tool/test_api.py000066400000000000000000000025631526415265400212340ustar00rootroot00000000000000"""Python API lifecycle checks without contacting remote services.""" import tempfile import unittest from pathlib import Path from unittest.mock import patch from fd_tool.scripts import fd_api class ApiPythonTests(unittest.TestCase): def test_shell_exit_code_is_not_wait_status(self): with self.assertRaises(SystemExit) as error: fd_api.exec_or_fail('exit 7') self.assertEqual(error.exception.code, 7) def test_output_directory_and_failure_cleanup(self): with tempfile.TemporaryDirectory() as tmp: destination = Path(tmp) / 'new' / 'api' conf = {'DEFAULT': {'api_output_path': str(destination)}} with patch.object(fd_api.config, 'discover_and_load', return_value=conf), \ patch.object(fd_api, 'read_dict_info', return_value=[]), \ patch.object(fd_api.releases, 'get_latest_tools_release', return_value={}), \ patch.object(fd_api.xmlhandlers, 'write_freedict_database', side_effect=ValueError), \ patch.object(fd_api, 'exec_or_fail') as execute, \ patch.object(fd_api.time, 'sleep'): with self.assertRaises(ValueError): fd_api.main_body(['fd_api', '-o', 'cleanup']) self.assertTrue(destination.is_dir()) execute.assert_called_with('cleanup') tools-0.8.0-beta.1/testing/fd_tool/test_file_mgr.py000066400000000000000000000214311526415265400222420ustar00rootroot00000000000000"""Regression tests for Unison remote-environment cleanup.""" import configparser import os import subprocess import tempfile import unittest from pathlib import Path from unittest.mock import patch from fd_tool.scripts import fd_file_mgr from fd_tool.scripts.fd_file_mgr import UnisonFileAccess class SafetyTests(unittest.TestCase): def test_unison_restores_environment_on_failure(self): for environment in [{}, {'UNISON': ''}, {'UNISON': 'original'}]: with self.subTest(environment=environment), \ patch.dict(os.environ, environment, clear=True), \ patch('fd_tool.scripts.fd_file_mgr.subprocess.run', return_value=subprocess.CompletedProcess([], 1)): with self.assertRaises(OSError): UnisonFileAccess().make_available('user', 'host', 'remote', '/tmp/local') self.assertEqual(dict(os.environ), environment) def test_unison_passes_paths_and_environment_to_child(self): with patch.dict(os.environ, {'UNISON': 'original'}, clear=True), \ patch('fd_tool.scripts.fd_file_mgr.subprocess.run', return_value=subprocess.CompletedProcess([], 0)) as run: UnisonFileAccess().make_available('user', 'host', 'remote path', '/tmp/local path') self.assertEqual(run.call_args.args[0][-2:], ['ssh://user@host/remote path/', '/tmp/local path']) self.assertEqual(run.call_args.kwargs['env']['UNISON'], '/tmp/local path/.unison') self.assertEqual(os.environ['UNISON'], 'original') def test_unison_startup_failure_preserves_environment(self): with patch.dict(os.environ, {'UNISON': 'original'}, clear=True), \ patch('fd_tool.scripts.fd_file_mgr.subprocess.run', side_effect=FileNotFoundError('unison')): with self.assertRaises(FileNotFoundError): UnisonFileAccess().make_available('user', 'host', 'remote', '/tmp/local') self.assertEqual(os.environ['UNISON'], 'original') class RemoteSessionTests(unittest.TestCase): def setUp(self): self.tmp = tempfile.TemporaryDirectory() self.addCleanup(self.tmp.cleanup) self.conf = configparser.ConfigParser() self.conf['DEFAULT'] = {'file_access_via': 'sshfs'} for section in ['release', 'generated']: path = Path(self.tmp.name, section) path.mkdir() self.conf[section] = {'user': 'user', 'server': 'host', 'remote_path': 'remote path', 'local_path': str(path), 'skip': 'no'} def run_command(self, acquisitions, child=0, cleanup=None): with patch.object(fd_file_mgr.SshfsAccess, 'make_available', side_effect=acquisitions), \ patch.object(fd_file_mgr.SshfsAccess, 'make_unavailable', side_effect=cleanup) as release, \ patch.object(fd_file_mgr.subprocess, 'run', return_value=subprocess.CompletedProcess([], child)) as run: status = fd_file_mgr.run_with_files(self.conf, ['command', 'arg with spaces']) self.assertEqual(run.call_args.args[0], ['command', 'arg with spaces']) return status, release.call_args_list def test_mixed_mounts_preserve_existing_mount(self): for acquisitions, owned in [([None, 201], 'release'), ([201, None], 'generated')]: with self.subTest(acquisitions=acquisitions): status, calls = self.run_command(acquisitions) self.assertEqual(status, 0) self.assertEqual([call.args[0] for call in calls], [self.conf[owned]['local_path']]) def test_all_existing_mounts_are_preserved(self): status, calls = self.run_command([201, 201]) self.assertEqual((status, calls), (0, [])) def test_child_failure_still_cleans_up_in_reverse_order(self): status, calls = self.run_command([None, None], child=7) self.assertEqual(status, 7) self.assertEqual([call.args[0] for call in calls], [self.conf[name]['local_path'] for name in ['generated', 'release']]) def test_cleanup_failure_does_not_mask_child_failure(self): for child, expected in [(0, 9), (7, 7)]: with self.subTest(child=child): status, calls = self.run_command( [None, None], child=child, cleanup=[fd_file_mgr.FileAccessError('cleanup failed', 9), None]) self.assertEqual(status, expected) self.assertEqual(len(calls), 2) def test_setup_failure_rolls_back_only_new_mounts(self): for first, expected in [(None, 1), (201, 0)]: with self.subTest(first=first), \ patch.object(fd_file_mgr.SshfsAccess, 'make_available', side_effect=[first, fd_file_mgr.FileAccessError('mount failed', 8)]), \ patch.object(fd_file_mgr.SshfsAccess, 'make_unavailable') as release, \ patch.object(fd_file_mgr.subprocess, 'run') as run: with self.assertRaises(fd_file_mgr.FileAccessError) as error: fd_file_mgr.run_with_files(self.conf, ['command']) self.assertEqual(error.exception.returncode, 8) self.assertEqual(release.call_count, expected) run.assert_not_called() def test_command_startup_failure_cleans_up(self): with patch.object(fd_file_mgr.SshfsAccess, 'make_available', return_value=None), \ patch.object(fd_file_mgr.SshfsAccess, 'make_unavailable') as release, \ patch.object(fd_file_mgr.subprocess, 'run', side_effect=FileNotFoundError): self.assertEqual(fd_file_mgr.run_with_files(self.conf, ['missing']), 1) self.assertEqual(release.call_count, 2) def test_interrupt_cleans_up(self): with patch.object(fd_file_mgr.SshfsAccess, 'make_available', return_value=None), \ patch.object(fd_file_mgr.SshfsAccess, 'make_unavailable') as release, \ patch.object(fd_file_mgr.subprocess, 'run', side_effect=KeyboardInterrupt): with self.assertRaises(KeyboardInterrupt): fd_file_mgr.run_with_files(self.conf, ['command']) self.assertEqual(release.call_count, 2) def test_unison_upload_uses_each_sections_arguments(self): self.conf['DEFAULT']['file_access_via'] = 'unison' with patch.object(fd_file_mgr.subprocess, 'run', return_value=subprocess.CompletedProcess([], 0)) as run: self.assertEqual(fd_file_mgr.run_with_files(self.conf, ['command']), 0) self.assertEqual([call.args[0][-1] for call in run.call_args_list], [self.conf['release']['local_path'], self.conf['generated']['local_path'], 'command', self.conf['generated']['local_path'], self.conf['release']['local_path']]) def test_standalone_unison_cleanup_reconstructs_arguments(self): self.conf['DEFAULT']['file_access_via'] = 'unison' with patch.object(fd_file_mgr.subprocess, 'run', return_value=subprocess.CompletedProcess([], 0)) as run: self.assertEqual(fd_file_mgr.cleanup(fd_file_mgr.create_access_sessions(self.conf)), 0) self.assertEqual([call.args[0][-1] for call in run.call_args_list], [self.conf[name]['local_path'] for name in ['generated', 'release']]) def test_standalone_mount_status_tracks_all_sections(self): for acquisitions, expected in [([None, 201], 0), ([201, None], 0), ([201, 201], 201)]: with self.subTest(acquisitions=acquisitions), \ patch.object(fd_file_mgr.config, 'discover_and_load', return_value=self.conf), \ patch.object(fd_file_mgr.SshfsAccess, 'make_available', side_effect=acquisitions), \ patch.object(fd_file_mgr.sys, 'argv', ['fd_file_mgr', '-m']): with self.assertRaises(SystemExit) as error: fd_file_mgr.main() self.assertEqual(error.exception.code, expected) def test_sshfs_passes_paths_without_shell_expansion(self): with patch.object(fd_file_mgr.os.path, 'ismount', return_value=False), \ patch.object(fd_file_mgr.os, 'listdir', return_value=[]), \ patch.object(fd_file_mgr.subprocess, 'run', return_value=subprocess.CompletedProcess([], 0, '', '')) as run: fd_file_mgr.SshfsAccess().make_available('user', 'host', 'remote path', '/tmp/local path') self.assertEqual(run.call_args.args[0], ['sshfs', 'user@host:remote path', '/tmp/local path']) tools-0.8.0-beta.1/testing/fd_tool/test_schema.py000066400000000000000000000046141526415265400217220ustar00rootroot00000000000000"""Keep schema and runtime version compatibility aligned.""" from pathlib import Path import shutil import subprocess import tempfile import unittest from fd_tool.api.dictionary import normalize_version try: from lxml import etree except ImportError: etree = None REPO = Path(__file__).resolve().parents[2] def api_xml(version): return f''' ''' @unittest.skipIf(etree is None, 'lxml is required for schema tests') class SchemaTests(unittest.TestCase): def test_runtime_parity(self): schema = etree.RelaxNG(etree.parse(str(REPO / 'freedict-database.rng'))) cases = ['1', '0.1', '1.00.00', '1.9-fd1', '1.8.1-fd0.2.1', '1.0-fd01.02', '2024.10.06+fd1', '1.2.3-alpha.1', '1.0+foo-bar', '1.0-alpha+build.1', '', '1..0', '1.2.3.4', '1.0-01', '1.0+', '1.0+foo..bar', ' 1.0'] for version in cases: with self.subTest(version=version): try: normalize_version(version) expected = True except ValueError: expected = False self.assertEqual(schema.validate(etree.fromstring(api_xml(version))), expected) def test_installed_validators(self): with tempfile.TemporaryDirectory() as tmp: xml = Path(tmp) / 'api.xml' for tool, flags in [('xmllint', ['--noout', '--relaxng']), ('jing', [])]: if not shutil.which(tool): continue for version, valid in [('1.8.1-fd0.2.1', True), ('1.0-01', False)]: with self.subTest(tool=tool, version=version): xml.write_text(api_xml(version)) result = subprocess.run( [tool, *flags, str(REPO / 'freedict-database.rng'), str(xml)], capture_output=True, text=True) self.assertEqual(result.returncode == 0, valid, result.stderr) tools-0.8.0-beta.1/testing/fd_tool/test_tools_versions.py000066400000000000000000000046321526415265400235520ustar00rootroot00000000000000"""Tools release tags use semantic precedence and the selected tag's date.""" import io import os import unittest from unittest.mock import patch from fd_tool.api import releases class ToolsVersionTests(unittest.TestCase): def test_semantic_tools_tag_order(self): for tags, expected in [ (['0.9.0', '0.10.0', 'unrelated'], '0.10.0'), (['0.8.0-rc.2', '0.8.0', '0.8.0-rc.10'], '0.8.0'), (['0.8.0-rc.2', '0.8.0-rc.10'], '0.8.0-rc.10'), (['0.8.0', '0.9.0-alpha.1'], '0.9.0-alpha.1'), ]: with self.subTest(tags=tags): self.assertEqual(releases.latest_tools_tag(tags), expected) self.assertEqual(releases.latest_tools_tag(reversed(tags)), expected) def test_no_semantic_tags_has_clear_error(self): with self.assertRaises(releases.ReleaseError): releases.latest_tools_tag(['unrelated', 'vague-version']) def test_api_selects_semantic_tag_and_matching_commit(self): tags = [{'name': tag, 'commit': {'url': 'https://api.github.com/commits/' + tag}} for tag in ['0.9.0', '0.10.0', 'unrelated']] metadata = {'commit': {'committer': {'date': '2026-01-02T12:00:00Z'}}} with patch.object(releases, 'github_request', side_effect=[tags, metadata]) as request, \ patch.object(releases.urllib.request, 'urlopen', return_value=io.BytesIO(b'archive')): result = releases.get_latest_tools_release() self.assertEqual(result['version'], '0.10.0') self.assertEqual(result['date'], '2026-01-02') self.assertEqual(request.call_args.args, ('commits/0.10.0',)) self.assertTrue(result['URL'].endswith('/0.10.0.tar.gz')) def test_local_metadata_uses_tag_commit_not_head(self): with patch.dict(os.environ, {'FREEDICT_TOOLS': '/unused'}), \ patch.object(releases.shutil, 'which', return_value='/usr/bin/git'), \ patch.object(releases, 'git', side_effect=['0.9.0\n0.10.0\nunrelated', '2026-01-02']) as git: version, date, url = releases.get_tools_release() self.assertEqual((version, date), ('0.10.0', '2026-01-02')) self.assertEqual(git.call_args.args[0], ['show', '-s', '--format=%cs', 'refs/tags/0.10.0^{commit}']) self.assertTrue(url.endswith('/freedict-tools-0.10.0.tar.xz')) tools-0.8.0-beta.1/testing/importers/000077500000000000000000000000001526415265400174425ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/importers/Makefile000066400000000000000000000002461526415265400211040ustar00rootroot00000000000000include ../config.mk test: "$(PYTHON)" -m unittest discover -s . "$(PYTHON)" -m unittest discover -s "$(TOOLS_ROOT)/importers/fd_import" -p tests.py .PHONY: test tools-0.8.0-beta.1/testing/importers/test_wikdict.py000066400000000000000000000137311526415265400225160ustar00rootroot00000000000000"""Regression tests for safe WikDict importer replacement.""" import importlib.util import os import tempfile import unittest from pathlib import Path from unittest.mock import patch spec = importlib.util.spec_from_file_location('wikdict', Path(__file__).parents[2] / 'importers/wikdict/import_wikdict.py') wikdict = importlib.util.module_from_spec(spec) spec.loader.exec_module(wikdict) class SafetyTests(unittest.TestCase): def test_headword_count_accepts_common_separators(self): for count in ['10000', '10,000', '10.000', '10 000']: tei = f'{count} headwords' with self.subTest(count=count): self.assertTrue(wikdict.enough_headwords(tei)) def test_failed_copy_does_not_delete_existing_dictionary(self): with tempfile.TemporaryDirectory() as tmp: old = Path(tmp) / 'eng-deu'; old.mkdir(); (old / 'keep').write_text('old') with patch.object(wikdict, 'download', return_value=''), \ patch.object(wikdict, 'enough_headwords', return_value=True): previous = os.getcwd() try: os.chdir(tmp) with self.assertRaises(FileNotFoundError): wikdict.import_dictionary([], 'https://example.org/eng-deu.tei', 'missing', True) finally: os.chdir(previous) self.assertEqual((old / 'keep').read_text(), 'old') def test_failed_publication_restores_existing_dictionary(self): with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) old = root / 'eng-deu' old.mkdir() (old / 'keep').write_text('old') (old / 'ChangeLog').write_bytes(b'previous {history}\r\n') shared = root / 'shared' shared.mkdir() for name in ['freedict-dictionary.css', 'freedict-P5.dtd', 'INSTALL', 'freedict-P5.rng', 'freedict-P5.xml']: (shared / name).write_text('fixture') replace = os.replace def fail_publication(source, destination): if Path(source).parent.name.startswith('.eng-deu.'): raise PermissionError('publication denied') replace(source, destination) previous = os.getcwd() try: os.chdir(root) with patch.object(wikdict, 'download', return_value=''), \ patch.object(wikdict, 'enough_headwords', return_value=True), \ patch.object(wikdict.os, 'replace', side_effect=fail_publication), \ self.assertRaises(PermissionError): wikdict.import_dictionary([], 'https://example.org/eng-deu.tei', str(shared), True) finally: os.chdir(previous) self.assertEqual((old / 'keep').read_text(), 'old') self.assertEqual((old / 'ChangeLog').read_bytes(), b'previous {history}\r\n') self.assertFalse((root / 'eng-deu.old').exists()) self.assertEqual(list(root.glob('.eng-deu.*')), []) def test_force_import_matches_exact_name(self): links = ['eng-deu.tei', 'eng-deu-extra.tei', 'deu-eng.tei'] self.assertEqual([link for link in links if link.rsplit('/', 1)[-1] == 'eng-deu.tei'], ['eng-deu.tei']) def test_successful_replacement_preserves_history_verbatim(self): with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) old = root / 'eng-deu' old.mkdir() history = b'Previous {dict} and {unknown} history\r\n\nLast line without newline' (old / 'ChangeLog').write_bytes(history) shared = root / 'shared' shared.mkdir() for name in ['freedict-dictionary.css', 'freedict-P5.dtd', 'INSTALL', 'freedict-P5.rng', 'freedict-P5.xml']: (shared / name).write_text('fixture') previous = os.getcwd() try: os.chdir(root) with patch.object(wikdict, 'download', return_value=''), \ patch.object(wikdict, 'enough_headwords', return_value=True): wikdict.import_dictionary([], 'https://example.org/eng-deu.tei', str(shared), True) finally: os.chdir(previous) result = (old / 'ChangeLog').read_bytes() self.assertTrue(result.endswith(history)) self.assertIn(b'automatic import of eng-deu dictionary', result) self.assertNotIn(b'.eng-deu.', result) self.assertEqual(list(root.glob('.eng-deu.*')), []) def test_missing_history_creates_new_entry(self): with tempfile.TemporaryDirectory() as tmp: dictionary = Path(tmp) / 'eng-deu' dictionary.mkdir() wikdict.make_changelog(str(dictionary)) first = (dictionary / 'ChangeLog').read_bytes() self.assertIn(b'automatic import of eng-deu dictionary', first) wikdict.make_changelog(str(dictionary)) self.assertTrue((dictionary / 'ChangeLog').read_bytes().endswith(first)) def test_history_read_failure_preserves_original_dictionary(self): with tempfile.TemporaryDirectory() as tmp: old = Path(tmp) / 'eng-deu' old.mkdir() (old / 'ChangeLog').write_bytes(b'original history') staged = Path(tmp) / 'staged' staged.mkdir() with patch('builtins.open', side_effect=PermissionError('history unreadable')), \ self.assertRaises(PermissionError): wikdict.make_changelog(str(staged), str(old)) self.assertEqual((old / 'ChangeLog').read_bytes(), b'original history') self.assertEqual(list(staged.iterdir()), []) tools-0.8.0-beta.1/testing/mk/000077500000000000000000000000001526415265400160255ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/mk/Makefile000066400000000000000000000001211526415265400174570ustar00rootroot00000000000000include ../config.mk test: "$(PYTHON)" -m unittest discover -s . .PHONY: test tools-0.8.0-beta.1/testing/mk/data/000077500000000000000000000000001526415265400167365ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/mk/data/eng-deu.tei000066400000000000000000000014241526415265400207660ustar00rootroot00000000000000 English-German test 1.0.0 3 headwords

Test

Regression fixture

appleApfel
househome
Haus
über
über & darüber
tools-0.8.0-beta.1/testing/mk/test_api_workflow.py000066400000000000000000000071511526415265400221450ustar00rootroot00000000000000"""Make API workflow checks without mounting or contacting remote services.""" import os from pathlib import Path import subprocess import sys import tempfile import unittest REPO = Path(__file__).resolve().parents[2] class ApiMakeTests(unittest.TestCase): def setUp(self): self.tmp = tempfile.TemporaryDirectory() self.addCleanup(self.tmp.cleanup) self.root = Path(self.tmp.name) self.env = dict(os.environ, PATH=f'{self.root}{os.pathsep}{os.environ["PATH"]}', REVIEW_LOG=str(self.root / 'calls'), API_DIR=str(self.root / 'api dir')) script = f'''#!{sys.executable} import os, subprocess, sys from pathlib import Path name = Path(sys.argv[0]).name def log(message): with open(os.environ['REVIEW_LOG'], 'a') as f: f.write(message + '\\n') if name == 'fd_file_mgr' and sys.argv[1] == '--run': log('fd_file_mgr -m') status = int(os.environ.get('MOUNT_STATUS', '0')) if status not in (0, 201): sys.exit(status) child = subprocess.run(sys.argv[2:], check=False).returncode cleanup = 0 if status != 201: log('fd_file_mgr -u') cleanup = int(os.environ.get('CLEANUP_STATUS', '0')) sys.exit(child or cleanup) log(name + ' ' + ' '.join(sys.argv[1:])) if name == 'fd_file_mgr': if sys.argv[1] in ('-a', '-r'): print(os.environ['API_DIR']) sys.exit(int(os.environ.get('PATH_STATUS', '0'))) if sys.argv[1] == '-m': sys.exit(int(os.environ.get('MOUNT_STATUS', '0'))) sys.exit(0) sys.exit(int(os.environ.get('API_STATUS', '0')) if name == 'fd_api' else 0) ''' for name in ['fd_api', 'fd_file_mgr', 'validator']: path = self.root / name path.write_text(script) path.chmod(0o755) def make(self, target, **env): return subprocess.run( ['make', '--no-print-directory', target, f'FREEDICT_TOOLS={REPO}', f'FREEDICTRC={self.root}/absent', f'XMLLINT={self.root}/validator', f'JING={self.root}/validator'], cwd=REPO, env=dict(self.env, **env), capture_output=True, text=True) def calls(self): return (self.root / 'calls').read_text() def test_generation_failure_cleans_up_and_skips_validation(self): self.assertNotEqual(self.make('api', API_STATUS='7').returncode, 0) self.assertIn('fd_file_mgr -u', self.calls()) self.assertNotIn('validator', self.calls()) def test_mount_failure_stops_generation(self): self.assertNotEqual(self.make('api', MOUNT_STATUS='8').returncode, 0) self.assertNotIn('fd_api', self.calls()) def test_existing_mount_is_preserved(self): self.assertEqual(self.make('api', MOUNT_STATUS='201').returncode, 0) self.assertNotIn('fd_file_mgr -u', self.calls()) self.assertIn(f'{self.root}/api dir/freedict-database.xml', self.calls()) def test_path_failure_stops_validation(self): self.assertNotEqual(self.make('api-validation', PATH_STATUS='9').returncode, 0) self.assertNotIn('validator', self.calls()) def test_both_validator_selections(self): for value in ['0', '1']: with self.subTest(value=value): (self.root / 'calls').write_text('') self.assertEqual(self.make('api-validation', USE_JING=value).returncode, 0) self.assertEqual('--relaxng' in self.calls(), value == '0') def test_release_path_failure_and_empty_path_propagate(self): for env in [{'PATH_STATUS': '9'}, {'API_DIR': ''}]: with self.subTest(env=env): self.assertNotEqual(self.make('release-path', **env).returncode, 0) tools-0.8.0-beta.1/testing/mk/test_deploy.py000066400000000000000000000171141526415265400207360ustar00rootroot00000000000000"""Deployment failures must not be reported as successful releases.""" import os import sys import unittest import test_stardict class DeployTests(unittest.TestCase): def setUp(self): self.fixture = test_stardict.StarDictTests() self.fixture.setUp() self.addCleanup(self.fixture.doCleanups) self.fixture.successful('release-stardict') self.root = self.fixture.root self.remote = self.root / 'remote with spaces' self.remote.mkdir() self.bin = self.root / 'bin' self.bin.mkdir() self.env = {'PATH': str(self.bin) + os.pathsep + os.environ['PATH'], 'REMOTE_ROOT': str(self.remote), 'REVIEW_LOG': str(self.root / 'remote-calls')} helper = self.bin / 'fd_file_mgr' helper.write_text(f'''#!{sys.executable} import os, subprocess, sys from pathlib import Path def log(message): with Path(os.environ['REVIEW_LOG']).open('a') as out: out.write(message + '\\n') if sys.argv[1] == '-r': log('path') print(os.environ['REMOTE_ROOT']) sys.exit(int(os.environ.get('PATH_STATUS', '0'))) assert sys.argv[1] == '--run' log('mount') mount = int(os.environ.get('MOUNT_STATUS', '0')) if mount not in (0, 201): sys.exit(mount) status = subprocess.run(sys.argv[2:], check=False).returncode cleanup = 0 if mount != 201: log('cleanup') cleanup = int(os.environ.get('CLEANUP_STATUS', '0')) sys.exit(status or cleanup) ''') helper.chmod(0o755) copy = self.bin / 'cp' copy.write_text(f'''#!{sys.executable} import os, sys from pathlib import Path with Path(os.environ['REVIEW_LOG']).open('a') as out: out.write('copy ' + sys.argv[2] + '\\n') kind = 'checksum' if sys.argv[2].endswith('.sha512') else 'archive' if os.environ.get('FAIL_COPY') == kind: sys.exit(9) os.execv('/bin/cp', ['/bin/cp', *sys.argv[1:]]) ''') copy.chmod(0o755) def deploy(self, *arguments, **env): return self.fixture.make('deploy-stardict', *arguments, **dict(self.env, **env)) def calls(self): return (self.root / 'remote-calls').read_text() def test_mount_failure_prevents_destination_access(self): result = self.deploy(MOUNT_STATUS='8') self.assertNotEqual(result.returncode, 0) self.assertEqual(self.calls(), 'mount\n') self.assertEqual(list(self.remote.iterdir()), []) def test_success_copies_archive_and_checksum_and_cleans_up(self): result = self.deploy() self.assertEqual(result.returncode, 0, result.stdout + result.stderr) files = list((self.remote / 'eng-deu/1.0.0').iterdir()) self.assertEqual(len(files), 2) self.assertTrue(any(path.name.endswith('.sha512') for path in files)) self.assertTrue(self.calls().endswith('cleanup\n')) def test_existing_mount_is_preserved(self): self.assertEqual(self.deploy(MOUNT_STATUS='201').returncode, 0) self.assertNotIn('cleanup', self.calls()) def test_copy_failures_publish_no_partial_release(self): for kind in ['archive', 'checksum']: with self.subTest(kind=kind): result = self.deploy(FAIL_COPY=kind) self.assertNotEqual(result.returncode, 0) self.assertEqual(list((self.remote / 'eng-deu/1.0.0').iterdir()), []) self.assertTrue(self.calls().endswith('cleanup\n')) def test_destination_path_failure_and_empty_path_stop_copying(self): for env in [{'PATH_STATUS': '9'}, {'REMOTE_ROOT': ''}]: with self.subTest(env=env): (self.root / 'remote-calls').write_text('') self.assertNotEqual(self.deploy(**env).returncode, 0) self.assertNotIn('copy', self.calls()) self.assertTrue(self.calls().endswith('cleanup\n')) def test_cleanup_failure_is_reported(self): self.assertNotEqual(self.deploy(CLEANUP_STATUS='7').returncode, 0) def test_force_replacement_preserves_previous_files_on_copy_failure(self): self.assertEqual(self.deploy().returncode, 0) destination = self.remote / 'eng-deu/1.0.0' before = {path.name: path.read_bytes() for path in destination.iterdir()} self.assertNotEqual(self.deploy('FORCE=y', FAIL_COPY='checksum').returncode, 0) self.assertEqual({path.name: path.read_bytes() for path in destination.iterdir()}, before) self.assertNotEqual(self.deploy().returncode, 0) def test_deployed_files_are_publicly_readable(self): archive = next((self.fixture.dictionary / 'build/release').glob('*.tar.xz')) archive.chmod(0o600) archive.with_name(archive.name + '.sha512').chmod(0o600) self.assertEqual(self.deploy().returncode, 0) for path in (self.remote / 'eng-deu/1.0.0').iterdir(): self.assertEqual(path.stat().st_mode & 0o444, 0o444) def use_real_manager(self, strategy): generated = self.root / 'generated' generated.mkdir() conf = self.root / 'freedictrc' conf.write_text(f'''[DEFAULT] file_access_via = {strategy} [release] local_path = {self.remote} [generated] local_path = {generated} [crafted] local_path = {self.fixture.dictionary} ''') self.env['TEST_FREEDICTRC'] = str(conf) helper = self.bin / 'fd_file_mgr' helper.write_text(f'''#!{sys.executable} import os, sys from pathlib import Path sys.path.insert(0, {str(test_stardict.REPO / 'fd_tool')!r}) from fd_tool.scripts import fd_file_mgr fd_file_mgr.config.discover_and_load = lambda: fd_file_mgr.config.load_configuration(os.environ['TEST_FREEDICTRC']) fd_file_mgr.os.path.ismount = lambda path: Path(path, '.mounted').exists() fd_file_mgr.main() ''') backend = f'''#!{sys.executable} import os, sys from pathlib import Path name = Path(sys.argv[0]).name path = Path(sys.argv[-1]) with Path(os.environ['REVIEW_LOG']).open('a') as out: out.write(name + ' ' + str(path) + '\\n') if name == 'sshfs': if path.name == 'generated' and os.environ.get('FAIL_GENERATED'): sys.exit(8) (path / '.mounted').touch() elif name == 'fusermount': (path / '.mounted').unlink() ''' for name in ['sshfs', 'fusermount', 'unison']: executable = self.bin / name executable.write_text(backend) executable.chmod(0o755) return generated def test_actual_manager_rolls_back_partial_sshfs_setup(self): self.use_real_manager('sshfs') result = self.deploy(FAIL_GENERATED='1') self.assertNotEqual(result.returncode, 0) self.assertIn('fusermount ' + str(self.remote), self.calls()) self.assertNotIn('copy ', self.calls()) self.assertEqual(list(self.remote.iterdir()), []) def test_actual_manager_preserves_borrowed_sshfs_mount(self): generated = self.use_real_manager('sshfs') (self.remote / '.mounted').touch() result = self.deploy() self.assertEqual(result.returncode, 0, result.stdout + result.stderr) self.assertTrue((self.remote / '.mounted').exists()) self.assertFalse((generated / '.mounted').exists()) self.assertNotIn('fusermount ' + str(self.remote), self.calls()) def test_actual_unison_manager_uploads_both_sections(self): generated = self.use_real_manager('unison') result = self.deploy() self.assertEqual(result.returncode, 0, result.stdout + result.stderr) calls = [line for line in self.calls().splitlines() if line.startswith('unison ')] self.assertEqual(calls, ['unison ' + str(path) for path in [self.remote, generated, generated, self.remote]]) self.assertEqual(len(list((self.remote / 'eng-deu/1.0.0').iterdir())), 2) tools-0.8.0-beta.1/testing/mk/test_stardict.py000066400000000000000000000267371526415265400212720ustar00rootroot00000000000000"""Exercise StarDict Make rules with a controlled converter.""" import os from pathlib import Path import shutil import subprocess import sys import tempfile import tarfile import unittest REPO = Path(__file__).resolve().parents[2] class StarDictTests(unittest.TestCase): def setUp(self): self.tmp = tempfile.TemporaryDirectory() self.addCleanup(self.tmp.cleanup) self.root = Path(self.tmp.name) self.dictionary = self.root / 'eng-deu' self.dictionary.mkdir() shutil.copy2(REPO / 'testing/mk/data/eng-deu.tei', self.dictionary) (self.dictionary / 'Makefile').write_text( f'FREEDICT_TOOLS := {REPO}\nsupported_phonetics_lang := 2\n' 'include $(FREEDICT_TOOLS)/mk/dicts.mk\n') self.converter = self.root / 'converter' self.converter.write_text(f'''#!{sys.executable} import os, sys, time from pathlib import Path with open(os.environ['CONVERSION_LOG'], 'a') as log: log.write('conversion\\n') time.sleep(0.05) output = Path(sys.argv[-1]) output.write_text("StarDict's dict ifo file\\nversion=3.0.0\\nwordcount=1\\nsynwordcount=1\\n") output.with_suffix('.idx').write_bytes(b'house\\0' + bytes(8)) output.with_suffix('.dict').write_bytes(b'Haus') output.with_suffix('.syn').write_bytes(b'home\\0' + bytes(4)) missing = os.environ.get('OMIT_OUTPUT') if missing: output.with_suffix('.' + missing).unlink() sys.exit(int(os.environ.get('CONVERSION_STATUS', '0'))) ''') self.converter.chmod(0o755) self.output = self.dictionary / 'build/stardict' def make(self, *args, **env): return subprocess.run( ['make', '--no-print-directory', f'PYGLOSSARY={self.converter}', f'FREEDICTRC={self.root}/absent', *args], cwd=self.dictionary, env=dict(os.environ, CONVERSION_LOG=str(self.root / 'calls'), **env), capture_output=True, text=True) def successful(self, *args): result = self.make(*args) self.assertEqual(result.returncode, 0, result.stdout + result.stderr) def test_parallel_and_repeated_build(self): self.successful('-j4', 'build-stardict', 'build/stardict/eng-deu.ifo', 'build/stardict/eng-deu.idx.gz', 'build/stardict/eng-deu.dict') self.successful('build-stardict') self.assertEqual((self.root / 'calls').read_text().splitlines(), ['conversion']) def test_missing_optional_output_rebuilds(self): self.successful('build-stardict') (self.output / 'eng-deu.syn').unlink() self.successful('-j4', 'build-stardict') self.assertTrue((self.output / 'eng-deu.syn').exists()) self.assertEqual(len((self.root / 'calls').read_text().splitlines()), 2) def test_failure_never_publishes_partial_files(self): result = self.make('build-stardict', CONVERSION_STATUS='7') self.assertNotEqual(result.returncode, 0) self.assertFalse((self.output / 'build.stamp').exists()) self.assertFalse(list(self.output.glob('eng-deu.*'))) def test_missing_required_output_rebuilds(self): self.successful('build-stardict') for suffix in ['ifo', 'idx.gz', 'dict']: with self.subTest(suffix=suffix): path = self.output / f'eng-deu.{suffix}' path.unlink() self.successful('-j4', 'build-stardict') self.assertTrue(path.is_file()) self.assertEqual(len((self.root / 'calls').read_text().splitlines()), 4) def test_changed_source_rebuilds(self): self.successful('build-stardict') with (self.dictionary / 'eng-deu.tei').open('a') as source: source.write('\n') source = self.dictionary / 'eng-deu.tei' marker = self.output / 'build.stamp' os.utime(source, ns=(source.stat().st_atime_ns, marker.stat().st_mtime_ns + 1)) self.successful('-j4', 'build-stardict') self.assertEqual(len((self.root / 'calls').read_text().splitlines()), 2) def test_incomplete_conversion_is_not_published(self): for suffix in ['ifo', 'idx', 'dict', 'syn']: with self.subTest(suffix=suffix): result = self.make('build-stardict', OMIT_OUTPUT=suffix) self.assertNotEqual(result.returncode, 0) self.assertFalse((self.output / 'build.stamp').exists()) self.assertFalse((self.output / 'eng-deu.ifo').exists()) self.successful('build-stardict') def test_failed_rebuild_preserves_previous_outputs(self): self.successful('build-stardict') before = {path.name: path.read_bytes() for path in self.output.iterdir() if path.is_file()} with (self.dictionary / 'eng-deu.tei').open('a') as source: source.write('\n') source = self.dictionary / 'eng-deu.tei' marker = self.output / 'build.stamp' os.utime(source, ns=(source.stat().st_atime_ns, marker.stat().st_mtime_ns + 1)) result = self.make('build-stardict', CONVERSION_STATUS='7') self.assertNotEqual(result.returncode, 0) self.assertTrue((self.output / 'tmp/eng-deu.ifo').is_file()) after = {path.name: path.read_bytes() for path in self.output.iterdir() if path.is_file()} self.assertEqual(before, after) self.successful('build-stardict') self.assertEqual(len((self.root / 'calls').read_text().splitlines()), 3) def test_configured_environment(self): venv = self.root / 'venv' (venv / 'bin').mkdir(parents=True) shutil.copy2(self.converter, venv / 'bin/pyglossary') (venv / 'bin/activate').write_text(f'export PATH="{venv}/bin:$PATH"\n') config = self.root / 'freedictrc' config.write_text(f'[DEFAULT]\nvirtual_env = {venv}\n') self.successful('build-stardict', 'PYGLOSSARY=pyglossary', f'FREEDICTRC={config}') def test_archive_and_install_include_synonyms(self): self.successful('-j4', 'release-stardict') archive = next((self.dictionary / 'build/release').glob('*.tar.xz')) with tarfile.open(archive) as tar: self.assertIn('eng-deu/eng-deu.syn', tar.getnames()) timestamp = archive.stat().st_mtime_ns self.successful('release-stardict') self.assertEqual(archive.stat().st_mtime_ns, timestamp) stage = self.root / 'stage' self.successful('install-stardict', f'DESTDIR={stage}') self.assertTrue((stage / 'usr/local/share/stardict/dic/eng-deu.syn').exists()) def test_stale_synonyms_are_removed(self): stage = self.root / 'stage' self.successful('install-stardict', f'DESTDIR={stage}') script = self.converter.read_text().replace('synwordcount=1', 'synwordcount=0') script = '\n'.join(line for line in script.splitlines() if "with_suffix('.syn')" not in line) + '\n' self.converter.write_text(script) with (self.dictionary / 'eng-deu.tei').open('a') as source: source.write('\n') self.successful('install-stardict', f'DESTDIR={stage}') self.assertFalse((self.output / 'eng-deu.syn').exists()) self.assertFalse((stage / 'usr/local/share/stardict/dic/eng-deu.syn').exists()) def test_install_and_uninstall_all_formats(self): for relative in ['build/dictd/eng-deu.c5', 'build/dictd/eng-deu.dict', 'build/dictd/eng-deu.dict.dz', 'build/dictd/eng-deu.index', 'build/slob/eng-deu-1.0.0.slob']: path = self.dictionary / relative path.parent.mkdir(parents=True, exist_ok=True) path.write_bytes(b'prebuilt fixture') stage = self.root / 'stage with spaces' restart = self.root / 'restart' restart.write_text(f'#!/bin/sh\ntouch "{self.root}/restarted"\n') restart.chmod(0o755) overrides = [f'DESTDIR={stage}', 'PREFIX=/opt/freedict', f'DICTD_RESTART_SCRIPT={restart}', '--old-file=build/dictd/eng-deu.dict.dz', '--old-file=build/dictd/eng-deu.index'] self.successful('install-restart', *overrides) expected = ['dictd/eng-deu.dict.dz', 'dictd/eng-deu.index', 'stardict/dic/eng-deu.ifo', 'stardict/dic/eng-deu.idx.gz', 'stardict/dic/eng-deu.dict', 'stardict/dic/eng-deu.syn', 'slob/eng-deu.slob'] for name in expected: self.assertTrue((stage / 'opt/freedict/share' / name).is_file(), name) self.successful('uninstall', *overrides) self.assertFalse(any(path.is_file() for path in stage.rglob('*'))) self.assertFalse((self.root / 'restarted').exists()) def test_unsupported_stardict_is_rejected_before_conversion(self): for target in ['build-stardict', 'release-stardict', 'install-stardict', 'deploy-stardict']: with self.subTest(target=target): result = self.make('-j4', target, 'UNSUPPORTED_PLATFORMS=stardict') self.assertNotEqual(result.returncode, 0) self.assertIn('does not support', result.stdout) self.assertFalse((self.root / 'calls').exists()) self.successful('build-stardict') result = self.make('release-stardict', 'UNSUPPORTED_PLATFORMS=stardict') self.assertNotEqual(result.returncode, 0) self.assertEqual(len((self.root / 'calls').read_text().splitlines()), 1) def test_aggregate_operations_skip_unsupported_formats(self): for target in ['build', 'release', 'deploy', 'install']: with self.subTest(target=target): result = self.make('-n', target, 'UNSUPPORTED_PLATFORMS=dictd slob stardict', 'DISTFILES=eng-deu.tei') self.assertEqual(result.returncode, 0, result.stdout + result.stderr) self.assertNotIn('--write-format=Stardict', result.stdout) self.assertNotIn('install-stardict', result.stdout) result = self.make('list-platforms', 'UNSUPPORTED_PLATFORMS=stardict') self.assertEqual(result.stdout.strip(), 'src dictd slob') result = self.make('query-star') self.assertNotEqual(result.returncode, 0) self.assertIn('Unknown platform', result.stdout) def test_archive_layout_with_custom_build_directory(self): (self.dictionary / 'README').write_text('fixture documentation') for build in ['output', str(self.root / 'absolute-output')]: with self.subTest(build=build): self.successful('-j4', 'release-stardict', f'BUILD_DIR={build}') directory = self.dictionary / build archive = next((directory / 'release').glob('*.tar.xz')) with tarfile.open(archive) as tar: self.assertEqual(set(tar.getnames()), {'eng-deu/eng-deu.' + suffix for suffix in ['ifo', 'idx.gz', 'dict', 'syn']} | {'eng-deu/README'}) self.assertEqual(tar.extractfile('eng-deu/README').read(), b'fixture documentation') self.successful('install-stardict', f'BUILD_DIR={build}', f'DESTDIR={self.root}/stage') self.assertTrue((self.root / 'stage/usr/local/share/stardict/dic/eng-deu.syn').exists()) def test_uninstall_removes_formats_even_when_marked_unsupported(self): stage = self.root / 'stage' self.successful('install-stardict', f'DESTDIR={stage}') self.successful('uninstall', 'UNSUPPORTED_PLATFORMS=stardict', f'DESTDIR={stage}') self.assertFalse(any(path.is_file() for path in stage.rglob('*'))) tools-0.8.0-beta.1/testing/mk/test_tools_release.py000066400000000000000000000114131526415265400222760ustar00rootroot00000000000000"""Tools archives must match the selected tag, not the working tree.""" import os import shutil import subprocess import sys import tarfile import tempfile import unittest from pathlib import Path REPO = Path(__file__).resolve().parents[2] class ToolsReleaseTests(unittest.TestCase): def setUp(self): self.tmp = tempfile.TemporaryDirectory() self.addCleanup(self.tmp.cleanup) self.root = Path(self.tmp.name) self.checkout = self.root / 'checkout' self.checkout.mkdir() for name in ['Makefile', 'mk/config.mk', 'buildhelpers/release.py']: destination = self.checkout / name destination.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(REPO / name, destination) (self.checkout / 'README').write_text('tagged content\n') (self.checkout / '.gitignore').write_text('*.cache\n') self.git('init', '-q') self.git('add', '.') self.git('-c', 'user.name=Test', '-c', 'user.email=test@example.org', 'commit', '-qm', 'Fixture') self.git('tag', '0.8.0') self.output = self.root / 'output with spaces' def git(self, *arguments): return subprocess.check_output(['git', '-C', str(self.checkout), *arguments], text=True) def make(self, *arguments, **env): return subprocess.run( ['make', '--no-print-directory', 'release', f'FREEDICT_TOOLS={self.checkout}', f'PYTHON={sys.executable}', f'BUILD_DIR={self.output}', *arguments], cwd=self.checkout, env={**os.environ, 'TAG': '', **env}, capture_output=True, text=True, check=False) def archive(self): return self.output / 'freedict-tools-0.8.0.tar.xz' def test_only_tagged_files_are_archived(self): (self.checkout / 'README').write_text('later commit\n') self.git('add', 'README') self.git('-c', 'user.name=Test', '-c', 'user.email=test@example.org', 'commit', '-qm', 'Newer commit') (self.checkout / 'README').write_text('uncommitted change\n') (self.checkout / 'untracked').write_text('do not include') (self.checkout / 'ignored.cache').write_text('do not include') result = self.make('TAG=0.8.0') self.assertEqual(result.returncode, 0, result.stdout + result.stderr) self.assertIn('Warning:', result.stderr) with tarfile.open(self.archive(), 'r:xz') as archive: self.assertEqual(archive.extractfile('tools/README').read(), b'tagged content\n') names = archive.getnames() self.assertIn('tools/.gitignore', names) self.assertNotIn('tools/untracked', names) self.assertNotIn('tools/ignored.cache', names) self.assertNotIn('tools/.git', names) def test_missing_tag_branch_and_commit_are_rejected(self): for arguments in [[], ['TAG=missing'], ['TAG=' + self.git('branch', '--show-current').strip()], ['TAG=' + self.git('rev-parse', 'HEAD').strip()]]: with self.subTest(arguments=arguments): self.assertNotEqual(self.make(*arguments).returncode, 0) self.assertFalse(self.output.exists()) def test_annotated_tag_and_matching_head(self): self.git('-c', 'user.name=Test', '-c', 'user.email=test@example.org', 'tag', '-a', '0.8.1', '-m', 'Annotated fixture tag') result = self.make('TAG=0.8.1') self.assertEqual(result.returncode, 0, result.stdout + result.stderr) self.assertNotIn('Warning:', result.stderr) with tarfile.open(self.output / 'freedict-tools-0.8.1.tar.xz', 'r:xz') as archive: self.assertEqual(archive.extractfile('tools/README').read(), b'tagged content\n') def test_existing_artifact_is_regenerated(self): self.output.mkdir() self.archive().write_bytes(b'stale archive') self.assertEqual(self.make('TAG=0.8.0').returncode, 0) with tarfile.open(self.archive(), 'r:xz') as archive: self.assertIn('tools/README', archive.getnames()) def test_export_failure_preserves_existing_artifact(self): self.output.mkdir() self.archive().write_bytes(b'previous archive') bin_dir = self.root / 'bin' bin_dir.mkdir() git = bin_dir / 'git' git.write_text(f'''#!{sys.executable} import os, sys if 'archive' in sys.argv: sys.stdout.buffer.write(b'partial archive') sys.exit(7) os.execv({shutil.which('git')!r}, ['git', *sys.argv[1:]]) ''') git.chmod(0o755) result = self.make('TAG=0.8.0', PATH=str(bin_dir) + os.pathsep + os.environ['PATH']) self.assertNotEqual(result.returncode, 0) self.assertEqual(self.archive().read_bytes(), b'previous archive') self.assertEqual(list(self.output.iterdir()), [self.archive()]) tools-0.8.0-beta.1/testing/xsl/000077500000000000000000000000001526415265400162245ustar00rootroot00000000000000tools-0.8.0-beta.1/testing/xsl/find-lonely-braces.xsl000066400000000000000000000241021526415265400224300ustar00rootroot00000000000000 <!DOCTYPE TEI.2 PUBLIC "-//TEI P4//DTD Main DTD Driver File//EN" "http://www.tei-c.org/P4X/DTD/tei2.dtd" [ <!ENTITY % TEI.XML "INCLUDE" > <!ENTITY % TEI.dictionaries "INCLUDE" > <!ENTITY % TEI.linking "INCLUDE" > <!ATTLIST xptr url CDATA #IMPLIED > <!ATTLIST xref url CDATA #IMPLIED > ]> Processed check-lonely-nodeset returned . false check-lonely-nodeset with nodes called. true true true true true false check-lonely-node-for-bracetype with node='' and open-braces= char-open='' called. false true true true tools-0.8.0-beta.1/testing/xsl/lonely-braces-testcases.tei000066400000000000000000000107441526415265400234700ustar00rootroot00000000000000 ]> Lonely Braces Testcases Michael Bunk <kleinerwurm@gmx.net> 0.1 only a handful of headwords FreeDict

Copyright (C) 2005 Michael Bunk <kleinerwurm@gmx.net>

GNU GENERAL PUBLIC LICENSE

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.

You should have received a copy of the GNU 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.

2005 http://freedict.org/
free dictionaries testing

Home:

This dictionary comes to you through nice people making it available for free and for good. It is part of the FreeDict project, http://www.freedict.org / http://freedict.de. This project aims to make available many translating dictionaries for free. Your contributions are welcome!

2005-06-23 FreeDict Maintainer Michael Bunk Wrote these testcases.
(
This entry should be found.
a { without counterpart
This entry should be found as well.
a valid headword
But a broken translation. <
a valid headword
But an as well broken translation. >
valid headword without any braces
This entry should not be found.
valid headword (with allowed corresponding braces)
This entry should not be found. But since braces should be avoided, we could emit a warning...
This is a pathologic example (BTW, phrases as headwords are something disputable). The problem (with this element {content)} ist, that different brace types nest incorrectly.
This entry should be found, but cannot.
Did I mention it would be nice (to be able to automatically determine) test success or failure?
This entry should be found.
Many elements
The bug can be found only in the last "tr" element {
tools-0.8.0-beta.1/testing/xsl/ungrouped-homographs.tei000066400000000000000000000050461526415265400231110ustar00rootroot00000000000000 ]> Test FreeDict Dictionary Author Michael Bunk <micha@luetzschena.de> Maintainer Michael Bunk <micha@luetzschena.de> 0.1 1 testcase FreeDict

GNU GENERAL PUBLIC LICENSE

2005 http://freedict.org/
free dictionaries used only for testing purposes

Home:

This dictionary comes to you through nice people making it available for free and for good. It is part of the FreeDict project, http://www.freedict.org / http://freedict.de. This project aims to make available many translating dictionaries for free. Your contributions are welcome!

2005-03-02 Michael Bunk Created this file to test group-homographs.xsl, an XSLT stylesheet to group homographs using the hom element.
homograph1 homograph2
n m The first and second homograph. They are nouns. homograph1 should become grouped with its homograph1 from the next entry. homograph2 should go into its own entry.
homograph1
adj This homograph1 is an adjective.
tools-0.8.0-beta.1/xmltei2xmldict.pl000077500000000000000000000124461526415265400172610ustar00rootroot00000000000000#!/usr/bin/perl #xmltei2xmldict.pl requires: # #- nsgmls from SP 1.3.4 from http://www.jclark.com/jade/ # or OpenSP from http://openjade.sourceforge.net/ #- ESISParser.pm from libxml-perl-0.07, available via # (su) # perl -MCPAN -e shell # install K/KM/KMACLEOD/libxml-perl-0.07.tar.gz #- TEI P4 DTDs, available from http://www.tei-c.org/Guidelines2/index.html #- make SGML_CATALOG_FILES point to the right location(s), e.g. # export SGML_CATALOG_FILES="/usr/share/doc/packages/sp/\ #html-xml/xml.soc:/var/lib/sgml/CATALOG.tei_4xml:/var/lib/sgml/\ #CATALOG.iso_ent" #- Sablotron library and Perl module: # # $Id$ # V1.5 10/2006 Michael Bunk # * removed -l option completely # * cosmetic changes / rewrite # * new option -n to set NSGMLS option of XML:ESISParser # # V1.4 5/2004 Michael Bunk # * added option to generate 00-database-allchars header # # V1.3 4/2004 Michael Bunk kleinerwurm-at-gmx.net # * finally used FindBin # * use warnings; instead of #!perl -w to avoid warnings # in foreign code (Sablotron module) # # V1.1 2/2004 Michael Bunk kleinerwurm-at-gmx.net # * put .pm files into lib/ # # V1.0 6/2003 Michael Bunk kleinerwurm-at-gmx.net # * based on tei2dict_xml.pl # # 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, visit # use warnings; use strict; use FindBin; use lib "$FindBin::Bin"; use XML::ESISParser; use Getopt::Std; use XML::Sablotron; use XML::Sablotron::DOM; use lib::TEIHandlerxml_xml; our ($opt_f, $opt_h, $opt_s, $opt_c, $opt_u, $opt_i, $opt_r, $opt_t, $opt_a, $sab, $sit, $opt_n, $opt_d); getopts 'surai:f:t:n:d:'; unless (defined $opt_f) { print STDERR < elements The TEI input file is expected as XML in TEI P4 format, see http://www.tei-c.org/ Outputs .index and .dict file. The index is sorted with sort(1). This help is printed, because there was no TEI file given. Usage: $0 -f [-sura] [-i |-t ] [-n ] [-d ] -s skip TEI header: do not treat it to generate 00-database-info & co special entrys (good to convert adapted SGML TEI files) -u generate headword 00-database-utf8 in index file to mark the database being in UTF-8 encoding. When this is given, 'sort' is called without -d option, ie. all characters are used in comparisons. -r generate reverse index (use instead of ) -a generate headword 00-database-allchars (but no change in index mangling!) This converter cannot generate the 00-database-alphabet entry, so -a is required for non-latin scripts. You should prefer to use dictfmt(1) then. -i \t execute filtercmd for each entry (eg. 'sabcmd style.xsl') -t \t use an XSLT stylesheet for filtering the entries with the Sablotron library. Excludes -i. -n \tSets the NSGMLS option of XML::ESISParser. By default 'nsgmls' is used. To use OpenSP, set this option to 'onsgmls'. -d \tSets the Declaration option of XML::ESISParser. XML::ESISParser expects the SGML declaration by default in /usr/lib/sgml/declaration/xml.decl. In Debian /usr/share/xml/declaration/xml1n.dcl works best with nsgmls from the SP XML parser. \t name of TEI input file END exit 1 } our $file = $opt_f; unless (-f $file) { print STDERR "Can't find file \"$file\""; exit 2 } if ($opt_i && $opt_t) { print STDERR "Only one of -i and -t may be given"; exit 2 } our $my_handler = lib::TEIHandlerxml_xml->new(); $my_handler->set_options( $file, # hand over name for .dict and .index output files $opt_s ? 1 : 0, # skip TEI header $opt_u ? 1 : 0, # generate 00-database-utf8 "C", # locale $opt_i ? $opt_i : "", # filter command $opt_t, # stylesheet for Sablotron $opt_r ? 1 : 0, # generate reverse index $opt_a ? 1 : 0); # generate 00-database-allchars unless (defined $ENV{SGML_CATALOG_FILES}) { $ENV{SGML_CATALOG_FILES} = "/var/lib/sgml/CATALOG.tei_4xml:/var/lib/sgml/CATALOG.iso_ent"; print STDERR <new->parse(Source => { SystemId => $file }, Handler => $my_handler, %additional_args); print STDERR "Created $Dict::headwords headwords (including multiple -s / from the -s).\n"; tools-0.8.0-beta.1/xquery/000077500000000000000000000000001526415265400152765ustar00rootroot00000000000000tools-0.8.0-beta.1/xquery/simple_dump.xquery000066400000000000000000000043201526415265400210720ustar00rootroot00000000000000(: simple_dump.xquery - perform a simple dump of the contents of a FreeDict dictionary Originally by Piotr Bański (bansp at o2.pl), 01-nov-2010. License: GNU GPL ver. 3.0 or any later version. $Id$ This script expects an external parameter $lg_pair but you may safely set that to '' and manipulate the contents of $my_lg_pair pair instead. Initially, it was only supposed to match the headword(s) with their equivalents, but I got slightly carried away. Still, this is supposed to be a simple dump, so it skips a lot of potential details. :) declare default element namespace "http://www.tei-c.org/ns/1.0"; declare namespace functx = "http:///www.functx.com"; declare option saxon:output "method=text"; (:the following variable is system-internal :) declare variable $my_svn_id as xs:string := "$Id$"; (: set this to the pair of languages that you want to process :) declare variable $my_lg_pair as xs:string := "srp-eng"; (: reset this to true() for an even simpler dump :) declare variable $skip_gram as xs:boolean := false(); declare variable $lg_pair as xs:string external; declare function functx:get_lg_pair() as xs:string { let $lgs := if ($lg_pair) then $lg_pair else $my_lg_pair return $lgs }; declare function functx:get_filename() as xs:string { let $lgs := functx:get_lg_pair() return concat('../../',$lgs,'/',$lgs,'.tei') }; declare function functx:header() as xs:string { let $ret := concat('Dump of ',functx:get_lg_pair(),'.tei on ',substring-before(string(xs:date(current-dateTime())),'+'),' at ',substring-before(string(xs:time(current-dateTime())),'.'),' ') return $ret }; declare function functx:process() as xs:string+ { for $entry in doc(functx:get_filename())/TEI/text/body/entry let $hdwd := $entry/form/orth let $gram := for $any in $entry/gramGrp/* return normalize-space($any) let $gloss := $entry//cit[@type='trans']/quote | $entry//sense/def order by lower-case($hdwd[1]) return concat(string-join($hdwd,', '),if (count($gram) and not($skip_gram)) then concat(' [',string-join($gram,'|'),'] ') else ' -- ',normalize-space(string-join($gloss,', '))) }; let $ret := functx:process() return concat(functx:header(),string-join($ret,' ')) tools-0.8.0-beta.1/xsl/000077500000000000000000000000001526415265400145475ustar00rootroot00000000000000tools-0.8.0-beta.1/xsl/freedict_P4toP5.xsl000066400000000000000000000170351526415265400202050ustar00rootroot00000000000000 Converter for FreeDict.org databases: from P4 to P5

The input dictionaries vary in some details, so expect to tweak this script. In some cases the tweaks may be worth porting back to the project, in some cases you will probably judge them as specific to the dictionary at hand. In general, this is going to be a one-time script: it should do most of the conversion work for you, and you will be left with the remaining details, hopefully only within the header. Please make sure to indicate in the revisionDesc that conversion has taken place! And then check if the FreeDict build system converts your TEI source to c5 properly.

Piotr Bański the author(s), 2010; license: GPL v3 or any later version (http://www.gnu.org/licenses/gpl.html). $Id$ Convert trans to as many (sense/)cit as there are tr elements inside it. If the original dictionary has no sense elements under entry, create them around each old trans. Convert gen elements *inside* trans. Be careful: this is a very specific case and you may have to tweak this template for your database (probably by removing the gramGrp layer) Convert pos elements *inside* trans. Be careful: this is a very specific case and you may have to tweak this template for your database (possibly by removing the gramGrp layer; mind also the template for trans/gen - if more such elements occur in a trans, it might be better to group them in a more nifty way) YOUR_NAME_HERE: Conversion of TEI P4 source into P5 via tools/xsl/freedict_P4toP5.xsl; manual clean-up. http://freedict.org/

This dictionary comes to you through nice people making it available for free and for good. It is part of the FreeDict project, http://freedict.org/. This project aims to make translating dictionaries available for free. Your contributions are welcome!

for the freedict database Maintainer [up for grabs] $Id:$

Copyright (C) 1999-2010 by various authors listed below.

Available under the terms of the GNU General Public License ver. 2.0 and any later version.

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.

You should have received a copy of the GNU 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.

eat the default or unnecessary attributes tools-0.8.0-beta.1/xsl/getauthor.xsl000066400000000000000000000014761526415265400173110ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/getedition.xsl000066400000000000000000000017401526415265400174340ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/getmaintainer.xsl000066400000000000000000000006061526415265400201300ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/getsourceurl.xsl000066400000000000000000000013101526415265400200150ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/getstatus.xsl000066400000000000000000000012271526415265400173240ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/gettitle.xsl000066400000000000000000000011301526415265400171130ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/group-homographs-sorted.xsl000066400000000000000000000211121526415265400220730ustar00rootroot00000000000000 Processing entry Skipping already handled homograph ' '. Transforming using <hom>: ' ' has ? homographs. Warning: Can't handle multiple <orth> elements: '' - Results undefined. They should be separated into their own entries. tools-0.8.0-beta.1/xsl/group-homographs.xsl000066400000000000000000000117761526415265400206140ustar00rootroot00000000000000 Skipping already handled homograph ''. Transforming using <hom>: ' ' has homographs. Can't handle multiple <orth> elements (yet?): '' - They should be separated into their own entries. tools-0.8.0-beta.1/xsl/inc/000077500000000000000000000000001526415265400153205ustar00rootroot00000000000000tools-0.8.0-beta.1/xsl/inc/indent.xsl000066400000000000000000000114301526415265400173300ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/inc/teientry2txt.xsl000066400000000000000000000433161526415265400205440ustar00rootroot00000000000000 $Id: teientry2txt.xsl 1166 2011-09-10 20:02:34Z bansp $ ( , , ) , ( ) < , > [sg=pl] 0 - , ( ) [ ] See also: Synonyms: Synonym: Antonyms: Antonym: Inflection of: Derived from: (imp: ) (pl: ) (past: ) ( ) , Entry edited by: ( ) tools-0.8.0-beta.1/xsl/inc/teiheader2txt.xsl000066400000000000000000000254231526415265400206320ustar00rootroot00000000000000 $Id: teiheader2txt.xsl 1095 2011-01-06 14:57:17Z bansp$ : Edition: Size: I understand this is needed for cases where we merely redistribute stuff. For upstream publishers, I guess. Shouldn't this always be the FreeDict URL? Id #, currently we only use the SVN Id. Availability: Series: Notes: * Database Status: Source(s): The Project: Changelog: : tools-0.8.0-beta.1/xsl/re-indent.xsl000066400000000000000000000016211526415265400171640ustar00rootroot00000000000000 Source XML reformatter

This is just an indentity transform with an added instruction to reformat the source and add the XML declaration. Small and silly, but useful.

Distributor: FreeDict.org (http://freedict.org/)

public domain $Id:$
tools-0.8.0-beta.1/xsl/sort.xsl000066400000000000000000000022601526415265400162660ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/tei-wrapper.xml000066400000000000000000000010701526415265400175260ustar00rootroot00000000000000 ]> &e; tools-0.8.0-beta.1/xsl/tei2c5-reverse.xsl000066400000000000000000000033121526415265400200420ustar00rootroot00000000000000 _____ 00-database-short [reverse index] _____ %%% tools-0.8.0-beta.1/xsl/tei2c5.xsl000066400000000000000000000116611526415265400163770ustar00rootroot00000000000000 _____ 00-database-info _____ 00-database-short Use either the ref of type='home' or possibly make a mistake and use the first ref under sourceDesc. _____ 00-database-url _____ Warning! Empty headword for entry # %%% : Processed of entries (%). There is nothing special about the '=' characters, it's just a piece of quasi-aesthetic pseudomagic. ===================================================================== ===================================================================== An important note: tables within paragraphs will not render nice at all. | tools-0.8.0-beta.1/xsl/tei2dic.xsl000066400000000000000000000334301526415265400166250ustar00rootroot00000000000000 \en id= char-precedence= { -,!/.()?}{a}{AäÄ}{b}{B}{c}{C} {d}{D}{e}{E}{f}{F}{g}{G}{h}{H}{i}{I}{j}{J}{k}{K} {l}{L}{m}{M}{n}{N}{o}{OöÖ}{p}{P}{q}{Q}{r}{R}{s}{Sß} {t}{T}{u}{UüÜ}{v}{V}{w}{W}{x}{X}{y}{Y}{z}{Z} Warning: No preset char-precedence for language. Using modified Wikipedia char-precedence. {a}{AäâàáåãæÀ�ÂÃÄÅÆ}{b}{B}{c}{CçÇ}{d}{Dð�}{e}{EèéêëÈÉÊ} {f}{F}{g}{G}{hH}{i}{Iíîìï�Î}{j}{J}{k}{K}{l}{L£}{m}{Mµ} {n}{NñÑ}{o}{OôøòõóöÓÔÕÖ}{p}{P}{q}{Q}{r}{R}{s}{Sß}{t}{T} {u}{UüùúûÙÚÜ}{v}{V}{w}{W}{x}{X}{y}{Yýÿ}{z}{Z}0123456789 -,;:!?/.`~'()}@$*\&%=×ØÞ­´¸§°·²½±¡³ºª»«þ¼¿ description= maintainer= copyright=Publisher: Year: Place: comment00=Dictionary Source URL: comment01=XSLT processor used for TEI->bedic conversion: comment02=Stylesheet used for TEI->bedic conversion: V comment =Note: comment =ChangLog: : \0 Warning: Skipping entry without or with empty orth element(s). Warning: Skipping entry with only form child(ren). form contents: '' Warning: Ignoring additional orth elements in entry ''. \0 Stylesheet assertion failed: Template 'format-homograph' called without input {s} {/s} {ps} {/ps} {pr}{/pr} {ss} -- -- See also: , {/ss} {ct} .{/ct} , () , ( ) {ex}" {hw/} " ( ) {/ex} {sa} {/sa} tools-0.8.0-beta.1/xsl/tei2dictxml.xsl000066400000000000000000000017371526415265400175370ustar00rootroot00000000000000 _____ tools-0.8.0-beta.1/xsl/tei2ding.xsl000066400000000000000000000063161526415265400170120ustar00rootroot00000000000000 $Id$ Warning: Skipping entry without <orth> children. Warning: Skipping entry without <tr> or <def> children: { } ; :: [ .] ; Warning: Word contains languages separator (' :: '): Warning: Word contained semicolon: Result: tools-0.8.0-beta.1/xsl/tei2haali.xsl000066400000000000000000000117771526415265400171560ustar00rootroot00000000000000 NEWLINE :: 40 0 [] ( )

40 2 *
; ( )
tools-0.8.0-beta.1/xsl/tei2htm.xsl000066400000000000000000000045511526415265400166600ustar00rootroot00000000000000

[] .
;
See also:
. , ()
"" = "" ,
tools-0.8.0-beta.1/xsl/tei2txt.xsl000066400000000000000000000006621526415265400167060ustar00rootroot00000000000000 tools-0.8.0-beta.1/xsl/tei2vok.xsl000066400000000000000000000204271526415265400166670ustar00rootroot00000000000000 $Id$ ;/‐ĞğİıŞşćÄ�đřăČąĆÄ�ŭŵŷŌÅ�ēĈĉÄ�ěĜÄ�ĥĵľňŘÅ�ťůșț ,+-GgIiSsccdraCaCDuwyOoeCcdeGghjlnRstust Ë™ [words] [phrases] [notes] Warning: Skipping entry without <orth> children. Warning: Skipping entry without <tr> or <def> children: ; { } / Warning! Ignoring translation alternatives exceeding 16 for entry: ; Warning: Truncating to 127 characters: Result: tools-0.8.0-beta.1/xsl/tei2webster.xsl000066400000000000000000000025531526415265400175430ustar00rootroot00000000000000 [] ( ) ; ( )

It presupposes that your working copy of Freedict starts at (SVN/)freedict/trunk/ (you really don't need the other directories besides the trunk/) and that there is a copy of Sebastian Rahtz's TEI Stylesheets located in (SVN/)TEI/Stylesheets/ (this is only relevant for the xsl:import statement; but without that statement this script won't do its job).