pax_global_header00006660000000000000000000000064124245407640014522gustar00rootroot0000000000000052 comment=9f0b33a5369806ba9c2f62238f64d6455a67af9e irony-mode-0.1.2/000077500000000000000000000000001242454076400136045ustar00rootroot00000000000000irony-mode-0.1.2/.dir-locals.el000066400000000000000000000002721242454076400162360ustar00rootroot00000000000000((nil (indent-tabs-mode . nil)) (c++-mode (c-basic-offset . 2) (c-file-style . "gnu") (eval . (c-set-offset 'innamespace 0)))) ;; Local Variables: ;; no-byte-compile: t ;; End irony-mode-0.1.2/.gitignore000066400000000000000000000000331242454076400155700ustar00rootroot00000000000000/local-data/ /build/ /bin/ irony-mode-0.1.2/.travis.yml000066400000000000000000000013151242454076400157150ustar00rootroot00000000000000language: cpp env: matrix: - EMACS=emacs24 - EMACS=emacs-snapshot compiler: - gcc - clang install: - if [ "$EMACS" = "emacs24" ]; then sudo add-apt-repository -y ppa:cassou/emacs && sudo apt-get update -qq && sudo apt-get install -qq emacs24 emacs24-el; fi - if [ "$EMACS" = "emacs-snapshot" ]; then sudo add-apt-repository -y ppa:ubuntu-elisp/ppa && sudo apt-get update -qq && sudo apt-get install -qq emacs-snapshot; fi - sudo apt-get install libclang-dev -qq before_script: - mkdir build - cd build script: - cmake -DEMACS_EXECUTABLE=$(which $EMACS) ../server - make -k - ctest --output-on-failure after_script: - cd - irony-mode-0.1.2/CONTRIBUTING.md000066400000000000000000000046731242454076400160470ustar00rootroot00000000000000# How to contribute ## C++ coding style Please, before writing a new file take a look at how the existing files are written. The license bit, the Doxygen header, the Emacs C++ modeline for headers `-*-C++-*-`, ... For formatting it is highly suggested to use [Clang-Format](http://clang.llvm.org/docs/ClangFormat.html), a configuration file is provided, the hidden file *.clang-format* at the root of the project. Apart from some differences written in the *.clang-format* configuration file and in the example that follows it's safe to follow the [LLVM Coding Standards](http://llvm.org/docs/CodingStandards.html). ```cpp /** * The order of declarations in the body of a class favor the public interface * first, e.g: public member functions first, then protected, then private, ... * * Member variables at the bottom of the class. */ class CamelCaseClassName { // types can be declared on the top of a class no matter of the // visibility if they are required by the rest of the class public: typedef void (*blah)(int); private: enum Name { BOB, MICHELLE }; /** * Declare public stuff first, then protected/private at the end of the file. * * Start with ctor/dtor/operator= then member functions */ public: /** * The couple constructors/init-list looks like this. */ CamelCaseClassName(bool camelCaseExceptFirstLetter) : camelCaseExceptFirstLetter_(camelCaseExceptFirstLetter) , endWithUnderscore_(3.0f) , ref_() , ptr_() { } /** * No one-line body, whether they are short or empty. */ ~CamelCaseClassName() { } /** * Methods use this kind of camelCase. * * For the comments, if possible follow how it's done in `clang-c/Index.h`, * with the exception that `\brief` doesn't need to be everywhere, autobrief * is fine. * * Exhaustive Doxygen document is not mandatory but it looks good, and * hopefully one day irony-mode will be able to show these kind of * documentations while working on the code, it would be nice to have the * sources compliant with this. * * \param bar * pfiou. */ void fooBar(int bar); private: Name barFoo(); private: /** * Member variables at the bottom. */ bool camelCaseExceptFirstLetter_; float endWithUnderscore_; // references have a space before and after '&' std::string &ref_; // strangely pointers do not follow the same rules and require space // only before std::string *ptr_; }; ``` irony-mode-0.1.2/COPYING000066400000000000000000001045131242454076400146430ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 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 General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is 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. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 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. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. 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 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. Use with the GNU Affero General Public License. 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 Affero 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 special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 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 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 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 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". 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 GPL, see . The GNU 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. But first, please read . irony-mode-0.1.2/README.md000066400000000000000000000161111242454076400150630ustar00rootroot00000000000000# Irony-Mode ## A C/C++ minor mode powered by [libclang][libclang-ref] `irony-mode` is an Emacs minor-mode that aims at improving the editing experience for the C, C++ and Objective-C languages. It works by using a combination of an Emacs package and a C++ program (`irony-server`) that uses [libclang][libclang-ref]. **Features:** * Code completion: * With Emacs' built-in `completion-at-point-functions` * With [company-mode][company-ref]'s backend: [company-irony][company-irony-ref] * With [auto-complete][ac-ref]' source: [ac-irony][ac-irony-ref] ## Dependencies ### Elisp dependencies These dependencies will be installed automatically when using the [standard installation](#installation) procedure described below. | Package | Comment | | --------------------- | ---------------------------------------------------------------------------------------- | | [cl-lib][cl-lib-ref] | Built-in since Emacs 24.3 | | [YASnippet][yas-ref] | Optional. Used only when available to provide snippets expansion of completion arguments | ### Irony-Server prerequisites `irony-server` provides the [libclang][libclang-ref] interface to `irony-mode`. It uses a simple protocol based on S-expression. This server, written in C++ and requires the following packages to be installed on your system: * [CMake][cmake-ref] >= 2.8.3 * [libclang][libclang-ref] ## Installation The recommended way to install `irony-mode` and its dependencies is to use a package manager. * Using [MELPA](http://melpa.milkbox.net/) M-x package-install RET irony-mode RET * Using [el-get](https://github.com/dimitri/el-get) M-x el-get-install RET irony-mode RET ## Configuration ~~~el (add-hook 'c++-mode-hook 'irony-mode) (add-hook 'c-mode-hook 'irony-mode) (add-hook 'objc-mode-hook 'irony-mode) ;; replace the `completion-at-point' and `complete-symbol' bindings in ;; irony-mode's buffers by irony-mode's function (defun my-irony-mode-hook () (define-key irony-mode-map [remap completion-at-point] 'irony-completion-at-point-async) (define-key irony-mode-map [remap complete-symbol] 'irony-completion-at-point-async)) (add-hook 'irony-mode-hook 'my-irony-mode-hook) ~~~ ## Windows considerations `irony-mode` should work fine on Windows but there are some things to take care of first. * `libclang.dll` is expected to be available in the `PATH` or in Emacs' `exec-path`. * **Emacs >= 24.4 is required.** A bug in previous versions makes irony unuseable (Emacs bug #18420). * `w32-pipe-read-delay` default value of `50` should be changed. This should not cause any issue on today's version of Windows. The default value of `50` may be lowered in mainline Emacs in future versions, until then please add the following to your `irony-mode` configuration: (setq w32-pipe-read-delay 0) ## Usage On the first run, `irony-mode` will ask you to build and install `irony-server`. To do so, type `M-x irony-install-server RET`. To tune `irony-mode`, use `customize`: M-x customize-group RET irony RET In order to provide context sensitive and accurate information, `irony-mode` needs to know about the compiler flags used to parse the current buffer. The best way to achieve this is to use a [Compilation Database](#compilation-database). ## Compilation Database In order to work correctly, `irony-mode` needs to know the compile flags. `irony-cdb` aims to provide *as automatic as possible* compile flags discovery, with minimal user input. Type `M-x irony-cdb-menu RET` to display the build configuration menu. ![Compilation DB demo](screenshots/cdb.gif) The menu should be self explanatory, it will let you chose amongst a list of *compilation databases*. It works great with the following ones: - [.clang_complete][clang_complete-doc-ref] - A file at the root of your project containing the compilation flags, one per line. This is compatible with the with plugin [Rip-Rip/clang_complete][clang_complete-vim-ref]. If you want to generate the `.clang_complete` automatically, take a look there: [cc_args.py documentation][cc_args-py-doc-ref]. ## FAQ __It's slow, why?__ A bug in old version of Clang (at least '3.1-8') caused the completion to fail on the standard library types. To eliminate this bug an optimisation has been disabled in the parsing of a translation unit. This result in a slower parsing. This only affect old versions of Clang (< 3.2), it is suggested to update your libclang installation if you want to take advantage of the optimizations. __libclang.so: cannot open shared object file...__ Compiling `irony-server` succeed but you have the following message when you try to run the `irony-server` executable: 'irony-server: error while loading shared libraries: libclang.so: cannot open shared object file: No such file or directory When `libclang` is installed in a non-standard location (one that is missing from the path list of the dynamic loader, see *ld.so.conf*) you can tell CMake to use the [rpath][rpath-ref] when installing the target `irony-server`. To enable rpath in CMake use the following command: cmake -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON [ac-irony-ref]: https://github.com/Sarcasm/ac-irony "AC Irony" [ac-ref]: https://github.com/auto-complete/auto-complete "Auto Complete" [bear-ref]: https://github.com/rizsotto/Bear "Bear" [cc_args-py-doc-ref]: https://github.com/Rip-Rip/clang_complete/blob/c8673142759b87316265eb0edd1f620196ec1fba/doc/clang_complete.txt#L270 "cc_args.py documentation" [cl-lib-ref]: http://elpa.gnu.org/packages/cl-lib.html "cl-lib" [clang-compile-db-ref]: http://clang.llvm.org/docs/JSONCompilationDatabase.html "Clang: JSONCompilationDatabase" [clang_complete-doc-ref]: https://github.com/Rip-Rip/clang_complete/blob/c8673142759b87316265eb0edd1f620196ec1fba/doc/clang_complete.txt#L55 ".clang_complete" [clang_complete-vim-ref]: https://github.com/Rip-Rip/clang_complete "clang_complete Vim plugin" [cmake-ref]: http://www.cmake.org "CMake" [company-irony-ref]: https://github.com/Sarcasm/company-irony "Company Irony" [company-ref]: https://github.com/company-mode/company-mode "Company-Mode" [libclang-ref]: http://clang.llvm.org/doxygen/group__CINDEX.html "libclang: C Interface to Clang" [ninja-ref]: http://martine.github.io/ninja/ "Ninja" [rpath-ref]: http://en.wikipedia.org/wiki/Rpath "rpath Wikipedia article" [yas-ref]: https://github.com/capitaomorte/yasnippet "YASnippet" irony-mode-0.1.2/irony-cdb.el000066400000000000000000000203001242454076400160070ustar00rootroot00000000000000;;; irony-cdb.el --- `irony-mode` compilation database ;; Copyright (C) 2012-2014 Guillaume Papin ;; Author: Guillaume Papin ;; Keywords: c, convenience, tools ;; 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 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;;; Code: (require 'irony) (require 'cl-lib) ;; ;; Internal variables ;; ;; TODO: doc ;; Modeled after company-mode backends. (defvar irony-cdb--compilation-databases '(irony-cdb-customize irony-cdb-clang-complete)) ;; ;; CDB ;; ;; TODO: add support accross sessions by restoring/saving ok values in ;; ~/.emacs.d/irony/cdb.el add a per-compilation db a load-cache/save-cache / ;; serialization methods ;; see ido-{save,wash,load}-history ;; ;; Note: entries that look for a specific file, such as .clang_complete, ;; compile_commands.json, ...should preferrably use `locate-dominating-file' as ;; it may be configured by the user to do the right thing, see ;; `locate-dominating-stop-dir-regexp' for example. ;;;###autoload (defun irony-cdb-load-compile-options () (catch 'found (mapc #'(lambda (compilation-database) (irony--awhen (funcall compilation-database 'autoload) (irony-update-command-line-options (car it) (cdr it)) (throw 'found t))) irony-cdb--compilation-databases))) ;;;###autoload (defun irony-cdb-menu () "Open the compilation database menu." (interactive) (let* ((items (irony-cdb--menu-entries)) (items-str (mapcar 'irony-cdb-menu-make-item-str items)) (keys (irony-cdb-menu-list-keys items)) k cmd) (save-excursion (save-window-excursion (delete-other-windows) (let ((buffer (get-buffer-create "*Irony/Compilation DB Menu*"))) (with-current-buffer buffer (erase-buffer) (mapc (lambda (str) (insert (concat str "\n"))) items-str) (insert "\n[q] to quit")) (let ((pop-up-windows t)) (display-buffer buffer t)) (fit-window-to-buffer (get-buffer-window buffer)) (let ((chars (sort (cons ?q (mapcar 'car keys)) '<))) (setq k (irony--read-char-choice "Select Compilation DB" chars)))))) (message "") ;; clear `read-char-choice' prompt (unless (eq ?q k) (setq cmd (cdr (assoc k keys)))) (when cmd (apply 'funcall cmd)))) (defun irony-cdb--menu-entries () "Generate the menu items for the current buffer." (mapcar #'(lambda (compilation-database) (funcall compilation-database 'menu-entry)) irony-cdb--compilation-databases)) (defun irony-cdb-menu-make-item-str (item) (let ((keys (plist-get item :keys)) (desc (plist-get item :desc)) (disabled (plist-get item :disabled)) (info (plist-get item :info))) ;; more than 3 keys will mess up the alignment, see the format string below (when (> (length keys) 3) (error "Irony-CDB: too many keys for one menu item")) (when (> (length desc) 70) (error "Irony-CDB: description too long for a menu item")) (mapc (lambda (key) (if (member (car key) '(?q ?Q)) (error "Irony-CDB: reserved key detected in menu item"))) keys) (let ((item-str (format "%-7s %s" (format "[%s]" (mapconcat 'identity (mapcar (lambda (k) (char-to-string (car k))) keys) "/")) desc))) (when disabled (setq item-str (propertize item-str 'face 'shadow))) (when info (setq item-str (propertize item-str 'help-echo info))) item-str))) (defun irony-cdb-menu-list-keys (items) "Return an assoc list of key . action for the active menu items." (cl-loop for item in items unless (plist-get item :disabled) append (plist-get item :keys) into keys finally return keys)) ;; ;; Utility functions ;; (defun irony-cdb--truncate-path (path occupied-len) "Shorten and truncate if necessary PATH to fit in the window. Assumes a fixed size window of ~80 colums. Keep some space to show the keys. Removes OCCUPIED-LEN from the " (let ((p (irony--shorten-path path)) ;;limit to 70 columns (leaving some space for the keys) (max-col 70)) (if (< (+ (length p) occupied-len) max-col) p (concat "..." (substring p (- (- max-col 3))))))) ;; ;; Preferences ;; (defun irony-cdb-customize (command &rest args) ;; Modeled after company-mode backends. (cl-case command ;; (autoload (cons '("-std=c++11") nil)) (menu-entry (list :desc "Preferences" :keys '((?p customize-group "irony")))))) ;; ;; .clang_complete ;; (defvar irony-cdb--clang-complete-cached-directories nil "List of already loaded .clang_complete files.") (defun irony-cdb-clang-complete (command &rest args) (cl-case command (menu-entry (irony-cdb--clang-complete-entry)) (autoload (irony-cdb--try-load-clang-complete)))) (defun irony-cdb--clang-complete-entry () (let ((cc-file (when buffer-file-name (irony--awhen (locate-dominating-file buffer-file-name ".clang_complete") (concat (file-name-as-directory it) ".clang_complete"))))) (if cc-file (list :desc (format "Load %s" (irony-cdb--truncate-path cc-file (length "Load "))) :keys `((?l irony-cdb--clang-complete-load-file ,cc-file))) (list :desc "Load .clang_complete" ;; ugly, but show the key even if disabled :keys '((?l nil)) :disabled t :info "Create a .clang_complete file in any subdirectory,\ with one flag per line.")))) (defun irony-cdb--try-load-clang-complete () (irony--awhen (cl-loop for dir in irony-cdb--clang-complete-cached-directories with found = nil ;; keep the closest directory if (and (string-prefix-p dir (or buffer-file-name "")) (file-exists-p dir) (> (length dir) (length found))) do (setq found dir) finally return found) (irony-cdb--clang-complete-load-file-1 (concat it ".clang_complete")))) (defun irony-cdb--clang-complete-load-file-1 (cc-file) "Load the flags from CC-FILE, one flag per line." (let ((invocation-dir (expand-file-name (file-name-directory cc-file))) compile-flags) (with-temp-buffer (insert-file-contents cc-file) (setq compile-flags ;; remove whitespaces at the end of each line, if any (mapcar #'(lambda (line) (if (string-match "[ \t]+$" line) (replace-match "" t t line) line)) (split-string (buffer-string) "\n" t)))) ;; keep track of the directory where the .clang_complete has been found to ;; load it automatically in other files/sessions. (add-to-list 'irony-cdb--clang-complete-cached-directories invocation-dir) (cons compile-flags invocation-dir))) (defun irony-cdb--clang-complete-load-file (cc-file) (let ((flags-dir (irony-cdb--clang-complete-load-file-1 cc-file))) (irony-update-command-line-options (car flags-dir) (cdr flags-dir)))) (provide 'irony-cdb) ;; Local Variables: ;; byte-compile-warnings: (not cl-functions) ;; End: ;;; irony-cdb.el ends here irony-mode-0.1.2/irony-completion.el000066400000000000000000000346341242454076400174470ustar00rootroot00000000000000;;; irony-completion.el --- irony-mode completion interface ;; Copyright (C) 2012-2014 Guillaume Papin ;; Author: Guillaume Papin ;; Keywords: c, convenience, tools ;; 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 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Handle the search of completion points, the triggering of the ;; completion when needed and the "parsing" of completion results. ;;; Code: (require 'irony) (require 'irony-snippet) (require 'cl-lib) ;; ;; Customizable variables ;; (defgroup irony-completion nil "Irony's completion interface." :group 'irony) (defcustom irony-completion-trigger-commands '(self-insert-command newline-and-indent c-context-line-break c-scope-operator ;; electric commands c-electric-backspace c-electric-brace c-electric-colon c-electric-lt-gt c-electric-paren c-electric-pound c-electric-semi&comma c-electric-slash c-electric-star) "List of commands to watch for asynchronous completion triggering." :type '(repeat function) :group 'irony-completion) ;;;###autoload (defcustom irony-completion-hook nil ;; TODO: proper documentation "Function called when new completion data are available." :type 'hook :group 'irony-completion) ;; ;; Public variables ;; (defvar-local irony-completion-mode nil "Non-nil when irony-mode completion is enabled. This is usually true when irony-mode is enabled but can be disable if irony-server isn't available.") ;; ;; Internal variables ;; (defvar-local irony-completion--context nil) (defvar-local irony-completion--context-tick 0) (defvar-local irony-completion--request-callbacks nil) (defvar-local irony-completion--request-tick 0) (defvar-local irony-completion--candidates nil) (defvar-local irony-completion--candidates-tick 0) ;; ;; Utility functions ;; (defun irony-completion-symbol-bounds () (let ((pt (point)) (syntax (syntax-ppss))) ;; no prefix for strings or comments ;; TODO: Use fontlock faces instead? at least ;; #warning In the middle of a warning| ;; will be handled properly but things like links when ;; `goto-address-prog-mode' is enabled will mess up things: ;; #error see bug report XY: http://example.com/XY (unless (or (nth 3 syntax) ;skip strings (nth 4 syntax)) ;skip comments (save-excursion (skip-chars-backward "_a-zA-Z0-9") (let ((ch (char-after))) (unless (and ch (>= ch ?0) (<= ch ?9)) ;skip numbers (when (eq (char-before) ?~) (backward-char)) (setq pt (point)) (skip-chars-forward "_a-zA-Z0-9~") (cons pt (point)))))))) (defun irony-completion-beginning-of-symbol () (car (irony-completion-symbol-bounds))) (defun irony-completion-end-of-symbol () (cdr (irony-completion-symbol-bounds))) (defsubst irony-completion--skip-whitespace-backwards () ;;(skip-syntax-backward "-") doesn't seem to care about newlines (skip-chars-backward " \t\n\r")) (defun irony-completion--context-pos () (irony--awhen (irony-completion-beginning-of-symbol) (save-excursion (goto-char it) (irony-completion--skip-whitespace-backwards) (point)))) ;; ;; Functions ;; (defun irony-completion--enter () (add-hook 'post-command-hook 'irony-completion-post-command nil t) (add-hook 'completion-at-point-functions 'irony-completion-at-point nil t) (add-hook 'irony-clang-options-updated-hook 'irony-completion--clang-options-updated nil t) (setq irony-completion-mode t)) (defun irony-completion--exit () (setq irony-completion-mode nil) (remove-hook 'post-command-hook 'irony-completion-post-command t) (remove-hook 'completion-at-point-functions 'irony-completion-at-point t) (remove-hook 'irony-clang-options-updated-hook 'irony-completion--clang-options-updated t) (setq irony-completion--context nil irony-completion--candidates nil irony-completion--context-tick 0 irony-completion--request-tick 0 irony-completion--request-callbacks nil irony-completion--candidates-tick 0)) (defun irony-completion-post-command () (when (and (memq this-command irony-completion-trigger-commands) (irony-completion--update-context) (irony-completion-at-trigger-point-p)) (irony-completion--send-request))) (defun irony-completion--clang-options-updated () (let ((had-candidates (or (irony-completion-candidates-available-p) (irony-completion--still-completing-p)))) ;; change the context so that candidates are no longer available (setq irony-completion--context nil) (when had-candidates (irony-completion--update-context) (when irony-completion--context (irony-completion--send-request))))) (defun irony-completion--update-context () "Update the completion context variables based on the current position. Return t if the context has been updated, nil otherwise." (let ((ctx (irony-completion--context-pos))) (if (eq ctx irony-completion--context) nil (setq irony-completion--context ctx irony-completion--candidates nil irony-completion--context-tick (1+ irony-completion--context-tick)) (unless irony-completion--context ;; when there is no context, assume that the candidates are available ;; even though they are nil irony-completion--request-tick irony-completion--context-tick irony-completion--request-callbacks nil irony-completion--candidates nil irony-completion--candidates-tick irony-completion--context-tick) t))) (defun irony-completion--post-complete-yas-snippet (str placeholders) (let ((ph-count 0) (from 0) to snippet) (while (setq to (car placeholders) snippet (concat snippet (substring str from to) (format "${%d:%s}" (cl-incf ph-count) (substring str (car placeholders) (cadr placeholders)))) from (cadr placeholders) placeholders (cddr placeholders))) ;; handle the remaining non-snippet string, if any. (concat snippet (substring str from) "$0"))) ;; ;; Interface with irony-server ;; (defun irony-completion--send-request () (let (line column) (save-excursion (goto-char (irony-completion-beginning-of-symbol)) ;; `position-bytes' to handle multibytes and 'multicolumns' (i.e ;; tabulations) characters properly (irony-without-narrowing (setq line (line-number-at-pos) column (1+ (- (position-bytes (point)) (position-bytes (point-at-bol))))))) (setq irony-completion--request-callbacks nil irony-completion--request-tick irony-completion--context-tick) (irony--send-file-request "complete" (list 'irony-completion--request-handler irony-completion--context-tick) (number-to-string line) (number-to-string column)))) (defun irony-completion--request-handler (candidates tick) (when (eq tick irony-completion--context-tick) (setq irony-completion--candidates-tick tick irony-completion--candidates candidates) (run-hooks 'irony-completion-hook) (mapc 'funcall irony-completion--request-callbacks))) (defun irony-completion--still-completing-p () (unless (irony-completion-candidates-available-p) (eq irony-completion--request-tick irony-completion--context-tick))) ;; ;; Irony Completion Interface ;; (defun irony-completion-typed-text (candidate) (nth 0 candidate)) (defun irony-completion-priority (candidate) (nth 1 candidate)) (defun irony-completion-type (candidate) (nth 2 candidate)) (defun irony-completion-brief (candidate) (nth 3 candidate)) (defun irony-completion-annotation (candidate) (substring (nth 4 candidate) (nth 5 candidate))) (defun irony-completion-post-comp-str (candidate) (car (nth 6 candidate))) (defun irony-completion-post-comp-placeholders (candidate) (cdr (nth 6 candidate))) (defun irony-completion-candidates-available-p () (and (eq (irony-completion--context-pos) irony-completion--context) (eq irony-completion--candidates-tick irony-completion--context-tick))) (defun irony-completion-candidates () "Return the list of candidates at point, if available. Use the function `irony-completion-candidates-available-p' to know if the candidate list is available. A candidate is composed of the following elements: 0. The typed text. Multiple candidates can share the same string because of overloaded functions, default arguments, etc. 1. The priority. 2. The [result-]type of the candidate, if any. 3. If non-nil, contains the Doxygen brief documentation of the candidate. 4. The signature of the candidate excluding the result-type which is available separately. Example: \"foo(int a, int b) const\" 5. The annotation start, a 0-based index in the prototype string. 6. Post-completion data. The text to insert followed by 0 or more indices. These indices work by pairs and describe ranges of placeholder text. Example: (\"(int a, int b)\" 1 6 8 13)" (and (irony-completion-candidates-available-p) irony-completion--candidates)) (defun irony-completion-candidates-async (callback) "Call CALLBACK when asynchronous completion is available. Note that: - If the candidates are already available, CALLBACK is called immediately. - In some circumstances, CALLBACK may not be called. i.e: irony-server crashes, ..." (irony-completion--update-context) (if (irony-completion-candidates-available-p) (funcall callback) (when irony-completion--context (unless (irony-completion--still-completing-p) (irony-completion--send-request)) (setq irony-completion--request-callbacks (cons callback irony-completion--request-callbacks))))) (defun irony-completion-post-complete (candidate) (let ((str (irony-completion-post-comp-str candidate)) (placeholders (irony-completion-post-comp-placeholders candidate))) (if (and placeholders (irony-snippet-available-p)) (irony-snippet-expand (irony-completion--post-complete-yas-snippet str placeholders)) (insert (substring str 0 (car placeholders)))))) (defun irony-completion-at-trigger-point-p () (when (eq (point) (irony-completion-beginning-of-symbol)) (save-excursion (cond ;; use `re-search-backward' so that the cursor is moved just before the ;; member access, if any ((re-search-backward (format "%s\\=" (regexp-opt '("." ;object member access "->" ;pointer member access "::"))) ;scope operator (point-at-bol) t) (unless ;; ignore most common uses of '.' where it's not a member access (and (eq (char-after) ?.) (or ;; include statements: #include (looking-back "^#\\s-*include\\s-+[<\"][^>\"]*" (point-at-bol)) ;; floating point numbers (not thorough, see: ;; http://en.cppreference.com/w/cpp/language/floating_literal) (looking-back "[^_a-zA-Z0-9][[:digit:]]+" (point-at-bol)))) ;; except the above exceptions we use a "whitelist" for the places ;; where it looks like a member access (irony-completion--skip-whitespace-backwards) (or ;; after brackets consider it's a member access so things like ;; 'getFoo().|' match (memq (char-before) (list ?\) ?\] ?} ?>)) ;; identifiers but ignoring some keywords ;; ;; handle only a subset of template parameter packs, where the ;; ellipsis is preceded by a keyword, in situation like: ;; template class X {...}; ;; template ;; Keywords: 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 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Provide some functions that helps with the preprocessor specific stuff, such ;; as header search paths and preprocessor directives. ;;; Code: (require 'irony) (require 'cl-lib) (defcustom irony-pp-compiler-executable (or (executable-find "clang") (executable-find "gcc")) "Path of a GCC/Clang compatible compiler executable." :group 'irony :type '(file :must-match t)) (defcustom irony-pp-compiler-args '("-v" "-E" "/dev/null") "The lang option will be automatically added (-x c++ / -x c)." :group 'irony :type '(choice (repeat string))) (defcustom irony-pp-header-allowed-extensions '("h" "hh" "hpp" "hxx" "h++" "H" "HH") "Allowed extensions for user include directories completion." :group 'irony :type '(choice (repeat string))) ;; Internal variables ;; (defvar irony-pp-include-re "^#\\s-*include\\s-+[<\"]\\(\\(?:[^>\"]*\\)\\)\\=" "Regexp used to search backward if we are inside an include statement.") (defvar irony-pp-comp-subdir nil "*internal variable* Contains the last subdirectory (or nil when there is no subdirectory) after a call to `irony-pp-completion-point'.") (defvar irony-pp-system-searth-paths-cache (make-hash-table :test 'eq) "*internal variable* Memoize compiler search paths.") ;; What's parsed: ;; #include "..." search starts here: ;; includes... ;; #include <...> search starts here: ;; /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/x86_64-unknown-linux-gnu ;; /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/backward ;; /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/include ;; /usr/local/include ;; /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/include-fixed ;; /usr/include ;; End of search list. (defun irony-pp-system-search-paths-1 () "*Internal function* Really retrieve compiler search paths. Please use `irony-pp-system-search-paths'." (when irony-pp-compiler-executable ;; `irony--libclang-lang-compile-options' should be called out of `with-temp-buffer' (let ((lang-options (irony--libclang-lang-compile-options))) (with-temp-buffer (apply 'call-process irony-pp-compiler-executable nil t nil (append lang-options irony-pp-compiler-args)) (goto-char (point-min)) (let (directories (start "#include \"...\" search starts here:") (second-start "#include <...> search starts here:") (stop "End of search list.")) (when (search-forward start nil t) (forward-line 1) (while (not (looking-at-p second-start)) ;; skip whitespace at the begining of the line (skip-chars-forward "[:blank:]" (point-at-eol)) (push (buffer-substring (point) (point-at-eol)) directories) (forward-line 1)) (forward-line 1) (while (not (or (looking-at-p stop) (eolp))) ;; skip whitespace at the begining of the line (skip-chars-forward "[:blank:]" (point-at-eol)) (push (buffer-substring (point) (point-at-eol)) directories) (forward-line 1))) directories))))) (defun irony-pp-system-search-paths () "Retrieve compiler search paths for header files. Memoize the search in a hash table." (or (gethash major-mode irony-pp-system-searth-paths-cache) (puthash major-mode (irony-pp-system-search-paths-1) ;value is returned irony-pp-system-searth-paths-cache))) (defun irony-pp-inside-include-stmt-p () "Return t if the cursor is inside an include statement, such as: #include <[POINT] -> t #include -> t #include [POINT] -> nil int i[POINT] -> nil" (looking-back irony-pp-include-re (point-at-bol))) (defun irony-pp-completion-point () "Return the completion prefix for point, if the current context of point is an #include C/C++ directive. Return the position of the prefix or null if not in a context where an #include directive can be completed. Example: #include ;; Keywords: c, convenience ;; 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 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Snippet support functions, support all version of YASnippet and ;; maybe further frameworks later. ;; ;; It is possible to check snippet support by calling ;; `irony-snippet-available-p'. ;; ;; Note: Some YASnippet versions require to have ;; `yas/minor-mode' or `yas-minor-mode' enabled to work. ;;; Code: ;; Private variables ;; (defvar irony-snippet-expand-function nil "Function to expand a snippet at a given point (by default to the current position). e.g: (defun my-expand-snippet (snippet-str &optional pos) (do-stuff (or pos (point))) Will be set to nil if no snippet expansion function is found.") ;; "Public" functions ;; (defun irony-snippet-available-p () "Return t if snippets are supported." (if (irony-snippet-get-expand-function) t)) (defun irony-snippet-expand (snippet-str &optional pos) "Expand SNIPPET-STR starting at POS. If `irony-snippet-available-p' return t then" (let ((expand-func (irony-snippet-get-expand-function))) (funcall expand-func snippet-str pos))) ;; Private functions ;; (defun irony-snippet-get-expand-function () (unless irony-snippet-expand-function (irony-snippet-init-yas)) irony-snippet-expand-function) (defun irony-snippet-init-yas () ;; find the snippet expand function (when (require 'yasnippet nil t) (let ((yas-version (or (and (boundp 'yas--version) yas--version) (and (boundp 'yas/version) yas/version)))) ;for old versions (when (stringp yas-version) (setq yas-version (replace-regexp-in-string "(\\|)" "" yas-version)) (setq irony-snippet-expand-function ;; (string= ... "0.6.0c"), the 'c' suffix is not supported by ;; `version-to-list' in emacs versions < 24, treat this one ;; specifically. (cond ((or (string= yas-version "0.6.0c") (version<= yas-version "0.6.0b")) 'irony-snippet-expand-yas-1) ;; `version<' thinks "0.8beta" < "0.8", we want to consider ;; anything starting with "0.8" as "0.8" and more. ((and (version< yas-version "0.8") (not (string-prefix-p "0.8" yas-version))) 'irony-snippet-expand-yas-2) (t 'irony-snippet-expand-yas-3))))))) (defun irony-snippet-yas-disabled-p () "If the current yasnippet version offers a minor-mode, check if this mode is disable by returning t, otherwise returns nil and it's partially safe to assume that yasnippet expansion can be used." ;; XXX: work only when yasnippet is enabled, otherwise some ;; variables used for the snippet expansion are not set and it ;; causes some errors. (if (boundp 'yas-minor-mode) (not yas-minor-mode) (if (boundp 'yas/minor-mode) (not yas/minor-mode)))) (defun irony-snippet-expand-yas-1 (snippet-str &optional pos) "Expand snippets for YASnippet version <= 0.6.0c." (declare-function yas/expand-snippet "ext:yasnippet" t nil) (unless (irony-snippet-yas-disabled-p) (yas/expand-snippet (or pos (point)) (or pos (point)) snippet-str))) (defun irony-snippet-expand-yas-2 (snippet-str &optional pos) "Expand snippets for YASnippet version < 0.8. See also `irony-snippet-expand-yas-1'." (declare-function yas/expand-snippet "ext:yasnippet" t nil) (unless (irony-snippet-yas-disabled-p) (when pos (goto-char pos)) (yas/expand-snippet snippet-str))) (defun irony-snippet-expand-yas-3 (snippet-str &optional pos) "Expand snippets for YASnippet version >= 0.8. See also `irony-snippet-expand-yas-2'." (declare-function yas-expand-snippet "ext:yasnippet" t nil) (unless (irony-snippet-yas-disabled-p) (when pos (goto-char pos)) (yas-expand-snippet snippet-str))) (provide 'irony-snippet) ;;; irony-snippet.el ends here irony-mode-0.1.2/irony.el000066400000000000000000000631741242454076400153010ustar00rootroot00000000000000;;; irony.el --- C/C++ minor mode powered by libclang ;; Copyright (C) 2011-2014 Guillaume Papin ;; Author: Guillaume Papin ;; Version: 0.1.2 ;; URL: https://github.com/Sarcasm/irony-mode ;; Compatibility: GNU Emacs 23.x, GNU Emacs 24.x ;; Keywords: c, convenience, tools ;; Package-Requires: ((cl-lib "0.5")) ;; 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 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ;; This file provides `irony-mode', a minor mode for C, C++ and Objective-C. ;; ;; Usage: ;; (add-hook 'c++-mode-hook 'irony-mode) ;; (add-hook 'c-mode-hook 'irony-mode) ;; (add-hook 'objc-mode-hook 'irony-mode) ;; ;; ;; replace the `completion-at-point' and `complete-symbol' bindings in ;; ;; irony-mode's buffers by irony-mode's asynchronous function ;; (defun my-irony-mode-hook () ;; (define-key irony-mode-map [remap completion-at-point] ;; 'irony-completion-at-point-async) ;; (define-key irony-mode-map [remap complete-symbol] ;; 'irony-completion-at-point-async)) ;; (add-hook 'irony-mode-hook 'my-irony-mode-hook) ;; ;; ;; Only needed on Windows ;; (when (eq system-type 'windows-nt) ;; (setq w32-pipe-read-delay 0)) ;; ;; See also: ;; - https://github.com/Sarcasm/company-irony ;; - https://github.com/Sarcasm/ac-irony ;;; Code: (autoload 'irony-cdb-load-compile-options "irony-cdb") (autoload 'irony-completion--enter "irony-completion") (autoload 'irony-completion--exit "irony-completion") (require 'cl-lib) (autoload 'find-library-name "find-func") (autoload 'lm-version "lisp-mnt") ;; ;; Compatibility ;; (eval-and-compile ;; As seen in flycheck/magit ;; ;; Added in Emacs 24.3 (mirrors/emacs@b335efc3). (unless (fboundp 'setq-local) (defmacro setq-local (var val) "Set variable VAR to value VAL in current buffer." (list 'set (list 'make-local-variable (list 'quote var)) val))) ;; Added in Emacs 24.3 (mirrors/emacs@b335efc3). (unless (fboundp 'defvar-local) (defmacro defvar-local (var val &optional docstring) "Define VAR as a buffer-local variable with default value VAL. Like `defvar' but additionally marks the variable as being automatically buffer-local wherever it is set." (declare (debug defvar) (doc-string 3)) (list 'progn (list 'defvar var val docstring) (list 'make-variable-buffer-local (list 'quote var))))) ) ;; eval-and-compile ;; ;; Customizable variables ;; (defgroup irony nil "C/C++ minor mode powered by libclang." :group 'c) (defcustom irony-lighter " Irony" "Text to display in the mode line when irony mode is on." :type 'string :group 'irony) (defcustom irony-user-dir (locate-user-emacs-file "irony/") "Directory containing the Irony generated files. The slash is expected at the end." :type 'directory :risky t :group 'irony) (defcustom irony-supported-major-modes '(c++-mode c-mode objc-mode) "List of modes known to be compatible with Irony." :type '(repeat symbol) :group 'irony) ;;;###autoload (defcustom irony-additional-clang-options nil "Additionnal command line options to pass down to libclang. Please, do NOT use this variable to add header search paths, only additional warnings or compiler options. These compiler options will be prepended to the command line, in order to not override the value coming from a compilation database." :type '(repeat string) :options '("-Wdocumentation") :group 'irony) ;;;###autoload (defcustom irony-clang-options-updated-hook nil "Normal hook run when the command line options have been updated. This hook is run when the variables `irony-header-search-directories', `irony-clang-working-directory', etc, have been updated." ;; TODO: no etc... :type 'hook ;; TODO: :options '(ff-find-other-file/ff-search-directories) :group 'irony) (defcustom irony-clang-lang-options-alist '((c++-mode . "c++") (c-mode . "c") (objc-mode . "objective-c")) "Association list of major-mode/lang-option to pass to clang." :type '(alist :key-type symbol :value-type string) :group 'irony) (defcustom irony-cmake-executable "cmake" "The name or path of the CMake executable." :type 'string :group 'irony) (defcustom irony-server-source-dir (expand-file-name "server" (file-name-directory (find-library-name "irony"))) "Points to the irony-server source directory. This should point to the directory that contains the top-most CMakeLists.txt used to build the server." :type 'directory :group 'irony) (defcustom irony-server-build-dir (concat irony-user-dir "build/") "Build directory for irony-server." :type 'directory :group 'irony) (defcustom irony-server-install-prefix irony-user-dir "Installation prefix used to install irony-server. The irony-server executable is expected to be in `irony-server-install-prefix'/bin/." :type 'directory :group 'irony) (defcustom irony-check-compile-functions '(irony--process-initial-check-compile) "Special hook run when check-compile results are available. Takes as an argument the number of fatal errors (usually 0 or 1), the number of errors and the number of warnings. Example function: (defun my-irony-check-compile-function (nfatals nerrors nwarnings) (message \"%d error(s) and %d warning(s)\" (+ nfatals nerrors)\ nwarnings)) (add-hook 'irony-check-compile-functions\ 'my-irony-check-compile-function)" :type 'hook :options '(irony--process-initial-check-compile) :group 'irony) (defcustom irony-source-file-extensions '("c" "cc" "C" "CC" "cpp" "cxx" "c++" "m" "mm") "Known file extensions used for source code in C/C++/Obj-C. Header files extensions should NOT take part of this list." :type '(choice (repeat string)) :group 'irony) ;; ;; Public/API variables ;; ;; Non-customizable variables provided by Irony that can be useful to other ;; packages. ;; ;; Note that they shouldn't be modified directly by external packages, just ;; read. ;; (defvar irony-header-search-directories nil "Header search directories list for the current buffer. Contains the absolute paths to the directories.") (defvar-local irony-clang-working-directory nil "The working directory to pass to libclang, if any.") ;; ;; Internal variables ;; ;; The prefix `irony--' is used when something can completely change (or ;; disappear) from one release to the other. ;; ;; -- https://lists.gnu.org/archive/html/emacs-devel/2013-06/msg01129.html (defvar-local irony--clang-options nil "Compile options for the current file. The compile options used by the compiler to build the current buffer file.") (defconst irony--eot "\n;;EOT\n" "String sent by the server to signal the end of a response.") (defconst irony-server-eot "\nEOT\n" "The string to send to the server to finish a transmission.") (defvar irony--server-install-command-history nil) (defvar-local irony--initial-compile-check-status nil "Non-nil when an initial compile check as already been requested. Possible values are: - nil - 'requested, when the compile check for the current buffer has been requested. - 'done, when the compile check has been received and processed") ;; ;; Mode ;; (defvar irony-mode-map (make-sparse-keymap) "Keymap used in `irony-mode' buffers.") ;;;###autoload (define-minor-mode irony-mode "Minor mode for C, C++ and Objective-C, powered by libclang." nil irony-lighter irony-mode-map :group 'irony (if irony-mode (irony-mode-enter) (irony-mode-exit))) (defun irony-mode-enter () ;; warn the user about modes such as php-mode who inherits c-mode (when (not (memq major-mode irony-supported-major-modes)) (display-warning 'irony "Major mode is unknown to Irony,\ see `irony-supported-major-modes'.")) ;; warn the user about Windows-specific issues (when (eq system-type 'windows-nt) (cond ((version< emacs-version "24.4") (display-warning 'irony "Emacs >= 24.4 expected on Windows.")) ((and (boundp 'w32-pipe-read-delay) (> w32-pipe-read-delay 0)) (display-warning 'irony "Performance will be bad because a\ pipe delay is set for this platform (see variable\ `w32-pipe-read-delay').")))) (unless irony--clang-options (irony-cdb-load-compile-options)) (irony-completion--enter)) (defun irony-mode-exit () (irony-completion--exit)) ;; ;; Utility functions & macros ;; (defmacro irony--aif (test if-expr &rest else-body) (declare (indent 2)) `(let ((it ,test)) (if it ,if-expr (progn ,@else-body)))) (defmacro irony--awhen (test &rest body) (declare (indent 1)) `(let ((it ,test)) (when it (progn ,@body)))) (defmacro irony-without-narrowing (&rest body) "Remove the effect of narrowing for the current buffer. Note: If `save-excursion' is needed for BODY, it should be used before calling this macro." (declare (indent 0) (debug t)) `(save-restriction (widen) (progn ,@body))) (defun irony-version (&optional show-version) "Return the version number of the file irony.el. If called interactively display the version in the echo area." (interactive (list t)) ;; Shamelessly stolen from `company-mode'. (with-temp-buffer (insert-file-contents (find-library-name "irony")) (let ((v (lm-version))) (when show-version (message "irony version: %s" v)) v))) (defun irony-buffer-size-in-bytes () "Return the buffer size, in bytes." (1- (position-bytes (point-max)))) (defun irony--read-char-choice (prompt chars) "Wrapper around `read-char-choice', available since Emacs 24." (setq prompt (concat prompt " [" chars "]: ")) (if (fboundp 'read-char-choice) (read-char-choice prompt chars) (setq prompt (propertize prompt 'face 'minibuffer-prompt)) (let ((cursor-in-echo-area t) k) (while (not (member k chars)) (setq k (read-char-exclusive prompt))) k))) (defun irony--shorten-path (path) "Make PATH as short as possible. The given path can be considered understandable by human but not necessary a valid path string to use in code. Its only purpose is to be displayed to the user." (let ((relative (file-relative-name path)) (abbreviated (abbreviate-file-name path))) (if (< (string-width relative) (string-width abbreviated)) relative abbreviated))) (defun irony-split-command-line-1 (quoted-str) "Remove the escaped quotes and backlash from a QUOTED-STR. Return a list of the final characters in the reverse order, only to be consumed by `irony-split-command-line'." (let ((len (length quoted-str)) (i 0) ch next-ch result) (while (< i len) (setq ch (aref quoted-str i)) (when (eq ch ?\\) (let ((next-ch (and (< (1+ i) len) (aref quoted-str (1+ i))))) (when (member next-ch '(?\\ ?\")) (setq ch next-ch) (cl-incf i)))) (push ch result) (cl-incf i)) result)) (defun irony-split-command-line (cmd-line) "Split CMD-LINE into a list of arguments. Takes care of double quotes as well as backslash. Sadly I had to write this because `split-string-and-unquote' breaks with escaped quotes in compile_commands.json, such as in: /usr/bin/c++ -DLLVM_VERSION_INFO=\\\\\\\"3.2svn\\\\\\\" " ;; everytime I write a function like this one, it makes me feel bad (let* ((len (length cmd-line)) (spaces (string-to-list " \f\t\n\r\v")) (first-not-spaces-re (concat "[^" spaces "]")) (i 0) ch args cur-arg) (while (< i len) (setq ch (aref cmd-line i)) (cond ((member ch spaces) ;spaces (when cur-arg (setq args (cons (apply 'string (nreverse cur-arg)) args) cur-arg nil)) ;; move to the next char (setq i (or (string-match-p first-not-spaces-re cmd-line i) len))) ((eq ch ?\") ;quoted string (let ((endq (string-match-p "[^\\]\"" cmd-line i))) (unless endq (error "Irony: ill formed command line")) (let ((quoted-str (substring cmd-line (1+ i) (1+ endq)))) (setq cur-arg (append (irony-split-command-line-1 quoted-str) cur-arg) i (+ endq 2))))) (t ;a valid char ;; if it's an escape of: a backslash, a quote or a space push ;; only the following char. (when (eq ch ?\\) (let ((next-ch (and (< (1+ i) len) (aref cmd-line (1+ i))))) (when (or (member next-ch '(?\\ ?\")) (member next-ch spaces)) (setq ch next-ch) (cl-incf i)))) (push ch cur-arg) (cl-incf i)))) (when cur-arg (setq args (cons (apply 'string (nreverse cur-arg)) args))) (nreverse args))) ;; ;; Compile options handling ;; (defun irony-update-command-line-options (cmd-line-options &optional working-directory) "Setup the command line options to pass down to libclang." (setq irony--clang-options cmd-line-options irony-clang-working-directory working-directory) (run-hooks 'irony-clang-options-updated-hook)) (defun irony--libclang-lang-compile-options () (irony--awhen (cdr-safe (assq major-mode irony-clang-lang-options-alist)) (list "-x" it))) (defun irony--libclang-compile-options () "The compile options to send to libclang." ;; TODO: if current buffer has no associated file (will be sent as '-') but is ;; in an existing directory, we will want to add -I (directory-file-name ;; buffer-file-name) to find the relative headers (append (irony--libclang-lang-compile-options) (irony--awhen irony-clang-working-directory (unless (irony--extract-working-directory-option irony--clang-options) (list "-working-directory" it))) irony-additional-clang-options irony--clang-options)) (defun irony--extract-working-directory-option (flags) "Look in FLAGS for the '-working-directory' option, if any." (catch 'found (while flags (let ((flag (car flags))) (cond ((string= "-working-directory" flag) (throw 'found (cadr flags))) ((string-prefix-p "-working-directory=" flag) (throw 'found (substring flag (length "-working-directory=")))) (t (setq flags (cdr flags)))))))) ;; ;; Irony-Server setup ;; (defun irony--install-server-read-command (command) (read-shell-command "Install command: " command (if (equal (car irony--server-install-command-history) command) '(irony--server-install-command-history . 1) 'irony--server-install-command-history))) (defun irony-install-server (command) "Install or reinstall the Irony server. The installation requires CMake and the libclang developpement package." (interactive (list (let ((command (format (concat "%s %s %s && %s --build . " "--use-stderr --config Release --target install") (shell-quote-argument irony-cmake-executable) (shell-quote-argument (concat "-DCMAKE_INSTALL_PREFIX=" (expand-file-name irony-server-install-prefix))) (shell-quote-argument irony-server-source-dir) (shell-quote-argument irony-cmake-executable)))) (irony--install-server-read-command command)))) ;; we need to kill the process to be able to install a new one, at least on ;; Windows (make-directory irony-server-build-dir t) (let ((default-directory irony-server-build-dir)) (irony--server-kill-process) (with-current-buffer (compilation-start command nil #'(lambda (maj-mode) "*irony-server build*")) (setq-local compilation-finish-functions '(irony--server-install-finish-function))))) (defun irony--server-install-finish-function (buffer msg) (if (string= "finished\n" msg) (message "irony-server installed successfully!") (message "Failed to build irony-server, you are on your own buddy!"))) (defun irony--locate-server-executable () "Check if an irony-server exists for the current buffer." (let ((exe (expand-file-name "bin/irony-server" irony-server-install-prefix))) (condition-case err (let ((irony-server-version (car (process-lines exe "--version")))) (if (and (string-match "^irony-server version " irony-server-version) (version= (irony-version) (substring irony-server-version (length "irony-server version ")))) ;; irony-server is working and up-to-date! exe (message "irony-server version mismatch: %s" (substitute-command-keys "type `\\[irony-install-server]' to reinstall")) nil)) (error (if (file-executable-p exe) ;; failed to execute due to a runtime problem, i.e: libclang.so isn't ;; in the ld paths (message "error: irony-server is broken, good luck buddy! %s" (error-message-string err)) ;; irony-server doesn't exists, first time irony-mode is used? inform ;; the user about how to build the executable (message "%s" (substitute-command-keys "Type `\\[irony-install-server]' to install irony-server"))) ;; return nil on error nil)))) ;; ;; irony-server process management. ;; (defvar irony--server-executable nil) (defvar irony--server-process nil) (defvar irony--server-buffer " *Irony*" "The name of the buffer for the irony process to run in. When using a leading space, the buffer is hidden from the buffer list (and undo information is not kept).") (defun irony--start-server-process () (when (setq irony--server-executable (or irony--server-executable (irony--locate-server-executable))) (let ((process-connection-type nil) (process-adaptive-read-buffering nil) process) (setq process (start-process "Irony" irony--server-buffer irony--server-executable "-i" "--log-file" (expand-file-name (format-time-string "irony.%Y-%m-%d_%Hh-%Mm-%Ss.log") temporary-file-directory))) (buffer-disable-undo irony--server-buffer) (set-process-query-on-exit-flag process nil) (set-process-sentinel process 'irony--server-process-sentinel) (set-process-filter process 'irony--server-process-filter) process))) (defun irony--server-kill-process () (when (and irony--server-process (process-live-p irony--server-process)) (kill-process irony--server-process) (setq irony--server-process nil))) (defun irony--get-server-process-create () (if (and irony--server-process (process-live-p irony--server-process)) irony--server-process (setq irony--server-process (irony--start-server-process)))) (defun irony--server-process-sentinel (process event) (unless (process-live-p process) (setq irony--server-process nil) (message "irony process stopped!"))) (defun irony--process-server-response (process response) (let ((sexp (read response)) (callback (irony--server-process-pop-callback process))) (apply (car callback) sexp (cdr callback)))) (defun irony--server-process-filter (process output) "Handle output that come from an irony-server process." (let ((pbuf (process-buffer process)) responses) ;; append output to process buffer (when (buffer-live-p pbuf) (with-current-buffer pbuf (save-excursion (goto-char (process-mark process)) (insert output) (set-marker (process-mark process) (point)) ;; check if the message is complete based on `irony--eot' (goto-char (point-min)) (while (search-forward irony--eot nil t) (let ((response (buffer-substring-no-properties (point-min) (point)))) (delete-region (point-min) (point)) (setq responses (cons response responses)) (goto-char (process-mark process))))))) ;; Handle all responses. (mapc #'(lambda (r) (irony--process-server-response process r)) (nreverse responses)))) (defun irony--server-process-push-callback (p cb) (let ((callbacks (process-get p 'irony-callback-stack))) (if callbacks (nconc callbacks (list cb)) (process-put p 'irony-callback-stack (list cb))))) (defun irony--server-process-pop-callback (p) (let ((callbacks (process-get p 'irony-callback-stack))) (process-put p 'irony-callback-stack (cdr callbacks)) (car callbacks))) (defun irony--server-process-callback-count (p) (length (process-get p 'irony-callback-stack))) ;; ;; Server commands ;; (defun irony--get-buffer-path-for-server () "Get the path of the current buffer to send to irony-server. If no such file exists on the filesystem the special file '-' is returned instead." (if (and buffer-file-name (file-exists-p buffer-file-name)) buffer-file-name "-")) (defun irony--send-file-request (request callback &rest args) "Send a request that acts on the current buffer to irony-server. This concerns mainly irony-server commands that do some work on a translation unit for libclang, the unsaved buffer data are taken care of." (let ((process (irony--get-server-process-create)) (argv (append (list request "--num-unsaved=1" (irony--get-buffer-path-for-server)) args)) (compile-options (irony--libclang-compile-options))) (when (and process (process-live-p process)) (irony--server-process-push-callback process callback) ;; skip narrowing to compute buffer size and content (irony-without-narrowing (process-send-string process (format "%s\n%s\n%s\n%d\n" (combine-and-quote-strings argv) (combine-and-quote-strings compile-options) buffer-file-name (irony-buffer-size-in-bytes))) (process-send-region process (point-min) (point-max)) ;; always make sure to finis with a newline (required by irony-server to ;; always make sure to finish with a newline (required by irony-server ;; to play nice with line buffering even when the file doesn't end with ;; a newline) (process-send-string process "\n"))))) (defun irony-request-check-compile () (irony--send-file-request "check-compile" (list 'irony-check-compile-handler))) (defun irony-check-compile-handler (errors) (run-hook-with-args 'irony-check-compile-functions (or (plist-get errors :fatals) 0) (or (plist-get errors :errors) 0) (or (plist-get errors :warnings) 0))) (defun irony--initial-check-compile () "Check that the current buffer compiles, hinting the user if not. Ideally this is done only once, when the buffer is first opened (or irony-mode first started), just to inform the user if he forgot to provide the flags for the current buffer." (unless (or irony--initial-compile-check-status (zerop (buffer-size))) (setq irony--initial-compile-check-status 'requested) (irony-request-check-compile))) (defun irony--process-initial-check-compile (nfatals nerrors nwarnings) "Display a one-time hint to the user to configure the compile options. See `irony-check-compile-functions'." (when (and (eq irony--initial-compile-check-status 'requested) (not (zerop (+ nfatals nerrors)))) (setq irony--initial-compile-check-status 'done) (let ((help-msg (substitute-command-keys "Type `\\[irony-cdb-menu]' to configure project")) stats-strings) (unless (zerop nwarnings) (push (concat (number-to-string nwarnings) " warning" (unless (eq nwarnings 1) ;plural "s")) stats-strings)) (setq nerrors (+ nfatals nerrors)) (unless (zerop nerrors) (push (concat (number-to-string nerrors) " error" (unless (eq nerrors 1) ;plural "s")) stats-strings)) (message "[%s] %s" (mapconcat 'identity stats-strings " | ") help-msg)))) ;; ;; TODO ;; (defun irony-current-directory () default-directory) (defun irony-user-search-paths () nil) (provide 'irony) (require 'irony-cdb) ;; Local Variables: ;; byte-compile-warnings: (not cl-functions) ;; End: ;;; irony.el ends here irony-mode-0.1.2/screenshots/000077500000000000000000000000001242454076400161445ustar00rootroot00000000000000irony-mode-0.1.2/screenshots/cdb.gif000066400000000000000000010422241242454076400173700ustar00rootroot00000000000000GIF89aP÷!"&"$*!7& !!!"""$$$%%%&&&''' &- (/(((***+++++,+,--*,,,,---,-/,./...///&-3+2:1*.7)1000111222333444666777888:::<<<>>>*9IUUU0CV.G`1Kf6Ql7XxUP1J)9g;o"MtC@@@BBBDDDFFFHHHIIIJJJKKKLLLMMMNNNPPPRRRTTTVVVXXXZZZ]]]```bbbdddfffhhhjjjkkklllnnnppprrrssstttvvvxxxzzz|||~~~ªÿUª:^;b‰=h’UÿUªUÿUUª@mšBs£Cv¨Dv¨DwªUUÿ*Ô**ÔÔª¢eˆI“NšQ›vªU©W³\·fªUUÿÍwÂbÊeÎhÐhÒiÿUÿUUªªªÿªUªªUÿÚè‡õŽùü’þ’ÿ“ÿªÿÿÿUªÿUÿªªªªUªÿªÿU˕ݡí¬î­å§ÿªÿªUÿÿÿÿU€€€‚‚‚„„„†††ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””–––———˜˜˜™™™šššœœœžžž   ¡¡¡¢¢¢¤¤¤¦¦¦¨¨¨ªªª¬¬¬­­­®®®°°°²²²´´´µµµ¶¶¶¸¸¸ººº¼¼¼¾¾¾ªªÿªÿªªÿÿÿªªÿªÿÿÿªÀÀÀÂÂÂÃÃÃÄÄÄÆÆÆÈÈÈÉÉÉÊÊÊÌÌÌÎÎÎÐÐÐÒÒÒÓÓÓÔÔÔÖÖÖØØØÚÚÚÜÜÜÞÞÞßßßàààâââäääåååæææèèèéééêêêëëëíííðððòòòóóóôôôõõõÿÿÿº9!ÿ NETSCAPE2.0!ùþ,PÿH° Áƒ*\Ȱ¡Ã‡#JœHÑ`€‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—&+ÊœI3âjêÜÉ!ÌŸ@ƒ J´¨Ñ£HKödxÑÒ§-‚µgEAªFLʵ«×¯`Ê=ªuàA4Õz6­N©T—¶Ýy5ëÄ!‹~ìË·¯ß¿€»,+à"»k¡¶Kxæbž $ ˆW¯NÁ˜3kÞÌÙ(á!ƒÜ6‚HPúÄÇ€!‡‚(mêC‡úÄ5Z€ƒE‚ú tZ@Aˆ†Ÿþ\¹@>‹¢ïnʧtq„?ÃvJtZæÂ‰ ÿŒ°(pDzo³v-àGt¬oçÞ½tV÷ï”Ü4Ái¿,ÔÙ€h e9pc‡(âG‹ð!(„}¼¶i¬å…€ ‰ 1D"¤ ]¿E„"‚äÔA ¡H‰)ÂÈbN?d7Õ@‡lˆ—„!0ˆ…Rq'ЉGFgc‹·ˆ1þ@¡…Ž÷„v}âˆ%¶·Èl Á•æ(AüÀ‡e±ãŒ€Æ)çœt"UV‡°§V"‘•çe†²Èx= ˆäå¸H<àÇ"×áÉÞo‡¤%Õi€ @©¥Fµ£@‡$’À~b·¨˜Ši\žIVÿ*À¥MçÖŸ š©@u 䣎†J«¦fåEˆCDÓVu6ëì³Ð†¤•C´Öo%ºW­F€§}$zU~ÆN8ȶ¾é'tR¦È{›ªË®¨Ó9…mBÚ’j$µ1÷œ±äùAP¾Ü†Ê+|Æ‘klbU6° À]çP´Wl±œZÈ®ú¦›íªúmp‰þšcŽqiÌñoˆ¸v©{‚ä8È"°ì²Á³Žª–½©ô+«FªÜï"-ç|ZÀƒ¬ë@½þyòT {+^ŒÅw•À]¬õÖ\ÿUÕ‡èv|ï”®:r¸y% ]Œ‚¶‰‹Ìa‹î÷û5Çmpžæÿ(hš§]Û³A "2D‘n öoró]+ÖnWX6 Û¥¶ál|n˜¾–—æsCüpåh œ]§®úêCUõ"»‰ª||dzv¢Mª†k¾Â· Õ‰GMõ!hÞÀ;ÂY Þ%v‚B.Bb¢àï*âÑÍì‚ <WÈÂÔ¥ð…lÈ#¢0ýà)ÒëÿÔ5‘å})l0´H ÿ‡HDhñˆe‰€—¨D$:Q…EŒ¢ôÄ*ZñŠXÌ¢·ÈÀ)n‹` £ÇHÆ2&Ä‹_4ã@б~`à…·CâH:ÄŽjT#ÀF72Ä_0Hߘǽ ñbZ‰;¢H‡´À)Ü#Bšð„:Êq ”ìI# C‹sÜ#g(ÈÌAÀ€4ˆ䱄²d’ $¤ByXR Ó G>òfÈ㨀@–Ábò£Ã4æ1ÒÉO†2™ÆD¦š Êôò—Á<ã!-–ÈE6d“ ±e$/II.œZùÅD0{t ´àF)pÊT®R Gç,iÿ}FD YÃ."eP â¸Å0_1†d u¨@ÔÉNw.´¡EÛùNô  Õæ6)• £ù@:V!ãìÈ…`R”ª”¥ð9ê`P` þDÈ6 W$C P<äá Ä»XÇ;†aÄ —Ú 9btÌc«Û¸E4Ð (äªôÈê%»úÕ‚8ƒÇH‡;* U©Ru Rð=Úašž4¥+méKc:S¼5®s>J ä y†0bpdažõ\e¢SžúTD¸GU`Ñæt§=ý©ØºUø³³©ˆ7raŽyÿ$ìñg]§:Z…Pa yÇb h ³Yr"Ùã*¤¹.që“‘’´*èÀ1œaŒc¹È.°€¼A=ÈP‹zTÌBP€8 cH#PF€À aH  ÷híAö¸pT@Ó`…BúûßD’Έ‡Ð]Ø¿úîq…„ Éîv»ûÝDxÂæF² i4dì ª Ž%\³üE>*¹ñ–÷¼Çpp cÄÇæ/‘[ëO$YÞX‡ , a’õ½o~÷ë[à à̸€we¼Œv°ÃC@™ÏœæÀ˜ÿÌfF³AÞ<Ñ0Y¤Ö}V7 ¢|LXaGˆ½yW,ãʲLÈz`TÈ"EPÀ@.À"äó€ ø!ƒa Ø V…@fQŒ„lºÓjÞ*„­<éJ_:ÓF© ‚Î>ÿ9Ð&fõ@¼ C ùÅ4 WèÆ¦ä‡<̱ ˆZ g0®Ø1ƒ<ûŽLÆrA®í Y„ ót-–)mi`š!¿%¶QÌb[S0 ĀÃ[Þô¶·F‡-xÏ»Þö»×ÝîwC1ÏzÆ.¡5ÍiTƒ.È¢‘uÈãˆfÈ¢Ma[”ƒŨ*øqs˜ãñÿ°@ø¡Ú]|º –1Dzò–«ºµÎPòÈK~ò” ¯8:OípˆVɶGŽ@Õ*¤߸€@h°³"›žüˆBðQm…L¼âÏ->Dð„w¼ûëÇ8¶ âO´‡ÊbˆøQX}îÜä(ï-BÒ-„CÁ3Œ\`ºð‡Ô¥nÃdñ}ÿ{àg„×I+PhŸý,\ $ó¡À=´ éXPW"à} 2$íˆ ÌÑW ðÃ)?œjá—?¬2½AtÏ{cÜÜ­8ˆíq_Yô±uçmØäd¸ÈÅéR oÈR Ê,æÿê)V¸C =é`úLc Áh¶Ô_úÓ/¹ ©_ýüG_Ùz[T ‘±|ÁwXWõ`¾À Šç}ñ€Ñ}²tJ ( Xy–7'Z¡X¼'ÉÀ]Þå !‚Áû0èpzðWÀ¼p €éÐ^S0Ðåàq ÉPö¦ Öôà{k7'|¡„®Õ„¿‡|A„Fˆ„vV°Pƒ¡‚Q‚$†‚ÕgNàïÀ q áP epquä§Þð&Á‚.ƒ§çß0HÐR-ø‚1x…1ƒb(|hˆÔÿå ê0eÒÀeŠHZx„úv 0V0S ¸°° Ý@a]ð`öÀ¨¨Š¬èŠD‡søŠ«ØŠ‡r8ÄŠ£XЧX]xyZ‘ îÀËÇí  5ƈŒ!æÀ Ï öWë`µ /à äð ÄÐ^c€ôàºðn êPçðL/ ß Ìà„Û ôPê@}QèòH—tù¸&f}ÆŽîøLð¦Wî ɸŒÍøŒà )çp 1ág`‡¨4†÷0 AÖˆ“v9&yÔ%úH}·Ý(-‰’Pÿ† å0ÇÀx3ÉO…ï¨S Ló´Ú@òÀ 1 ° ôpæ@’N •RI•©LÆõ”Q9•‘•ÆD]H©”LéÃHE…”–jùÒ€tkù–`t–Ä—t —Jp#X—zyErI'{ù—jÔ ò c€Y˜GÔ— h˜Š¹˜ŒÙ˜<˜^㘒9™”Y™™~Ñæd™ãÄ™Z4Hž)˜Ùšé„yê€ç`„ñJ“9Já†@ õÿG~°J­”Ä`L‰VKÚ†¸¤KALѤÃéeÆYLÒ$œ¹äe_IJZ1š|Qš¡Yî0"p/šZO±y»ÿ@-`ñ „äwO ±ðÁÙOïi%PÅQ‰ó©œö¹ùià9Ô)UVjebp%WO°P@eð ``0QÏP†u s…¡_6¡ŠX+Î*ÒŠuZÇuYÊŒ§­M‹¦Ð9Žgµ¿+Á;¦SWu=»r0A§6°\k¯g[PA|õ¨Ö¥c Ì0€ Ëÿ0®W¾âû°‰æ;¾Qô`Á¸ 4 ²ôÇ~Ôô»Z{P¸´+ÛpಠÑz¯'…³W{·w‰ œà~G€QÚQ¹P¥äg~èÇQ€3kÀ{Øi:(¼(Æ››áǬµÑ+  P=Ðm ÓëUA…Lˆ½Ñ ì`Àÿ·é€40›•† ÄJÌÄäûÄI¼ÄM À  €Ó@ +e  ¾Àˆ…è‡`,Ʊª¹|Ó `öà„7˜ƒ;Øo>„Sz‰\èÄу?„ ‘µ¥³}k;&@ðÿ€ž!‰‡zø|dð@ à0u¬ƒ±W‰ ±‰ø‰¶‹ ÁÉž8SŠ·(‹a:|Ɖ£\„ܼvÐ;°îz§sP§:¼Ãh ñ8õ8Åqï ,ÀRZôÐÄ\°«×À AÉ|dÌìÇ ÍÊ<ÍqÆ@ð` ¤Zà€ çÀ“Œw“ù+Îä,«ø“J ³ ô° Å`Èñá8ŽQŽç˜ŽAÙŽCIÍ ÏèH‡ AÈä*³ÉSk¥"I•AÑ0öÐ ¬)ö,ŽÂ§@™EiL¥Ä•W¹]Lm•^ù> oFéʱ;9ð¦r §A§1ÿl¶ºL½Þ¹EàÐQ ±ÓZA °ÓBýB7CE>}¢<½F €2øtÔR]E¯SýDIÝÓK¯ÐÕ^ý qGêè ¡W}Ö†TÕ8ÖlÝÖn5j½Öo=×t]×)´Ãv×z½×—1½ÖÉ×±™€M I× Ë×ådš‹é ép„ÕšÖ꘰¹ m›É–J¹ÉJ Ñ›Åä¥l×» QÙ qÙÿ'4 çÔ AÚpMÀ$LPqØ9LŠ]‚í˜P PéP¦ƒÍLò´ãYžçÉÐꙬí)Ú]*ÿ©ÅmžBXåà Pî°ÕñÜePÿ¥P³Ø¶í×PA Zu¤ª  ê *¢Š ÚÞ:¢‡ß¢óM0†ê¸)º¢-ŠZ/£N£^VbEVßÌKªÍ£/Ëhí¤KJ¤vÕ[õ}¡>¤ á¤-¥SzÁVŠ¥H»¥¼­ÁáP*¥¯W¥.À%¶ ÿÁer·¦!]0î‘Íû¦q:§¸,xª§AÛ<¯]+/=F.'ÀJÞGÞ= rÐ ½é§þ¨Ã:¨…j‰‰º¨œÚå™z›j©†…©Åª©bŽæaï¸0³Ž{ª©ºªä•dglç°š¹³Š`ýíÆ¸ª«>º´ï_ÈÿjaZ–aiN¬ÆŠèúwçÚÒÎ ­µ{JÕúIËÆîÜÜ1é QéÑ:­-þâ¶ (M ^gb6„Ù¦v°®íú®ñ:¯õЇ]kб<Ð=`:Pò*Nn6À( Ão:ËÄŽåˆ úº ±þ °K°1±± Áí7+±K±a.€ñÐuŽë±ý[T"Ëîk¼ (Kj Á²$øà—³t^³ækéíú¾³ÇÖÒKA;´EËlšNân⟼ QðO´ÔÍ @ë0­ µáFpüàn ±µGþµ¿.¶d+ À*¿4lsðµ[›ÿpåÀm@¾þ¦9p¾îã=À Àë2p÷š¶,·¶ê¶p+·tû•wëVzË·~ûôy+¸Ro¸T/³¸a¹¹“KqiwÆ‹¹¹|ιGï¹øÞ^«Kº eº=7Z9Woߺñº³›SÓzJ·«îü©»í á'zÿÊÍÊ [»¨­Úã@ èàºÈ{u~x‚Gx±¼°ü¼1ÜvúrÐòµÍë'P; uúvðµ(Сå>Îú¡o6MÕ»{× Ì ½Üë½±¾è[¾á˾™¾!ü2 Ü0¿õ»ë×~0º¿Vп1—ö¹'Àœ ÿ {ñÀhÎlŒ¬L/l¼â ­ÁßäÁÑý"¬zqþÆ”þ±þTjulþ- G`ð«!@–z.ÀÆÎ ƒ 2¨Ó£M† Ø™s ¡ 6ì´±BŽä°ÓC€È(d¢hÑ`œ9uîäÙÓçO A…%ZÔ§M¤I“jc% ½` ­bØŒ]0ìdÜ’yI¤RUÊÕ+X±§–5û5,[†"VÍÀ^Ó¤àÖɸ Í—ûfšA½|ý.¼Uá¶0_%S:MØ#ö#åuL†t”L™Q C9/%+Q –± I›Fÿ ÷ =†Ú€-Ü5Îx©Ò À›³¤Pȼ°@ œÂΟC+,ðî \¥·ËöþÜ !¼Ük²P·MíÈõÀ²nJE¶Ù±Ã¥Á5sììPº‘ΚF@$6Bª%zÐÁ–\: 9vÈaŒ2êB 3Ôpà ±óp¡¤ù&f6[k¡3ÞQ€~¤€zÒâbÔ"K)e¤ÑF¶r4hÆ=Üà™wðIç”—sæ9æƒÄ0‡›g‚9L€%›|Ò mÔ¡§uÆá22&S*Dz¶)f·¤^ð†œgˆm tèqG— ² uê9çŒØ¢ÓN›8ôö[pÃ=êTrË5÷\tÓ]œ.°cW]¥ˆ^zëµ÷^|óÕwß…Äõ÷_€‰âw`‚ Vè]¸¶×ˆ‚d€G ƒ#–xbŠ+F7`Œ3ÆØbŽ;V²Ý„A.÷’K~E ¨P'tÀðøe˜c–ù\k¶ÙÛ™sÖygž{öùgsozh6úh¤“Všg¢›vú楣–zjÿª«f È}zk®ý-¸±ª;ì¨ÑY‡ È>סšNíúm¸3üz3µ=œÀœ[ùm≺˺;o›V…g+$@ y–ˆ—ÆÓVª´Ù‚bzòYhÆoA)Zι'@ ò%{ØÉE¥F/ýt…ÎPŸs:-—m­ã¶ýöŸæîûCZ¸|÷Š{ÿ¡]ÈiÁˆx„ã‡8Ä!Vj žˆüñé•R" 1,Wh™W&ð¾¬_ža {@†B† ŠH§¥ÎO}ƒÊpg ŽxabÜó×?€}c \b˜ˆÇH‡;ž°(,¤ Ϩ€9\&€_<£j`ùf“>0‚€ÿ3*h@¤dÐ $—À‘…á­kÚ‡1 $/ÃQÀ bVØÂZó Û6n tDcg’=ºa ºe2’Í”yxƒzÚÅ:Þ1 Håƒ|s"¥X¢P)Gj‹inyˆK [”0½%–I4N©^Y¨ =ƒ,ƒ}§z†0ÂqàÅ Óø…M‰—uh; È–zжÙÁmÛȶæÀˆXh›„Û¾¸! 4á&Ї`C8†*Pxá ê¢ZJyÊ$–²¤¥Tn‰J]Ær–µüÐı„T!ã @’±‹!a+ Ç—ÿÙÌg2¦‡á¨€¦±ÊŒLc@Â(•G3 `Ò €”$cH#PF!miJ`®³ï|Þ1“™ð e°‚â¡FYäã‚py£ãÐ9GÈ9Ž-w¼\;Øá-`gì “ÌðŽ|à"I ©ÕB>Ò$‰€f@‡;ˆAÌŒBõ© r´a’‘$r@‡6d­[œ$êÖôPäÑDÃXˆš!€g@JLàÊ9Þ„…8ƒ©pÙ‚U±*•­²¥«W-—+ ùÏŒ€/SpGF^± Ĭµ­ —\©Îb$¥üHª’‘D†<Ô ²GF*€ ð£9Â<ÀÊÿ–-fZ2ƒåM£W¸‡åahb§¡cb¢B"ŠŠ*d F˜ð¶übyÒ“ °)”Ŷŭ0; p€I  k„vØÈ$²h²¨Óš¾ŠÀ `&ÚãwÞAptÃ÷ íڑƬvW!Ò`\.b^ôJE½a/?Ü«ø–‹ë¢e×õ@$èc‚OˆF:Ô!g À¦kÉ”N›\7»Û=çƒEc[”ƒÅÈ"øqs˜ãñÈbç‹a s8)ûío ЯTQ(>rËP~¼P°9-\R›‘`Àµ,µøÆ 2‹ø–ÿÉX?®#€,ÌÕ&Å’¤$m åVÒ ÊdF¨ûe¨åk¯Se2Ž!ÌC|±Œq!«7*Ë›ãû™€¶ A†F5‡î\¢€‘bÚ šVˆJƒ4Q<2Ä̲7$ÊXp;É@èaƒD™¸-™ M°¼Sær„I®—Áüíé‹)NÊ™ b¬h¥-h1wRºâ–6’Z)ïf·¹ü{°½ôå/LaïÅ48Òÿ®Ìe2Ø…D4¢™Íi̸šÖ¼¦Ý ¯ [þy…p8Ê#Žqeå0Ç9ÐñÌ©c¶(`VÈÇPg.¼`V°”r‹p”À{y’ ]ì²JŒ  çu¹‹A€¡ ``ÄHʃ"4!ŒÀ9µClÔ4@A•.¸½®}…hD%jwŠVÔ¢ÅèG;ê ‘â#‰Ge»ÜËuoÄ0ÉI/”•¬”w-éØK`“$m4©‰MHùTœæT§;ÑvO}úS»yCÑêãXÕ£"µ¼IUêR™Ú”ìÐøP)dT¥RÊüŒ› lƒ÷0‡¥’2UfHE:ÿÒaPRìÞHH2ÈŒAx¦a¤¶\Ò€*WÙ•äÁ%»ìí¯ggÀ[šÂÊâ}|É‹ûã÷™–Ù¢}ôoˆüI^DV/† ÀaÎ[ýcfþ²¤_ÿ²?ÐÚ¯Ì÷;“)”Q–y þK@ŽÁ?¥Ø? Œ@ œ@ày@ Ìé Ü@ì@ü@ AA,A6ø€Öœƒ×ÔÀx– Hp͘(È-öc@žãÜã>þcà}h¨Ìq h¸IvˆnÈÌ؇$è€H‡‡L†MV¦Œ× 5†€ÅG#ŽuˆV,H‚˜s¸Çe`#ð‚ñíÀZ¾å\.ÁËÝÀnxÑ †r¨¢ÝFIì-A+`…"xd‡eŽåYÖÌä!Á^˜äJ¾dinäGŽäddG†ä¡e-2¸îDfeæÇf~f{væxøG,…A8ÓøƒA…(æ@ Ô©S+.Þ6Ø@<Ý.~ˆÿç­ºƒ–Ó„6MjÉèzÃÍðM5ŽB6A#`¡i€9îÀWˆð°+è'¨‡Svèá@Á˜žéšvHCþÀœ6ÐA,ð³D„?Kàÿô…:Y†£<tði(†QVjz`ê$]‡z°‡u(‡$Uå¤Êzð†d¨ç,p8‡h8†h]…>q`¸×øRAQôTCfëzpë{ÁcÖÀ,å@Y”PÒIì€$¸‡UA% œ{ø(Ø@³Fkµæ@.h‡{à…4êÌIà¡ÎõÀÎfj X)‡-èÀ¿ŽEFlÕÊÁAQðÀA(hlÎ@…Í…Æb‡­ƒÿ4þÀ.NÙâ<ÎHÎ9xÔ74Íl ÔV‘^n-‡10AèþÁchEç¾î8 È”A€Tìþî*ô^ðþÂé.Áò¦A(`‚8Üo÷žBíÆEDpÞ|ïïnnü.ÂóÁþNÁZp¯…3ˆÒu‡t€Òý^p!ŒïÒ|A‘€¿nýžp ¿p ßAÏpÿ@u¹@qq/ñq¹Oq_qoñNJqŸq¯q„qÏqßq¿Àïq r!rÜùq"?r$Or%;_r'r(rþir)¯r+¿ò7r,ßr.ïò×r/s1ó/sÿ2?s4Os®1s5os7s¯¡r8Ÿs:¯ó¢Aq;Ïs=ßs6ßs?ÿó3ïs@tB¿rA/tDOô$?tEotGßqFtIŸôtJ¿tLÿr9ÏtNïtßtOuQÿ:KuS?õÛ)uT_uVoUouXõ€yuY¯u[W?P¿u]ßu\Çs^ÿu`7 Zvb×õa/vdõcOvfGõeovhõgvjÇôi¯vlôkÏvnGômïvpÿóowr·óq/wtósOwvGóuowxówwzÇòy¯w|ò{Ïw~Wò}ïw€òx‚çñ/x„Ïò\Ox†¯òƒoxÿˆWñ‡xŠñ‰¯xŒ·À‹ÏxŽO¿ïx÷ºy’§®‘/y”ߤ“Oy–Oõ…oy˜ñ•yšwš™¯yœ3_Ïyžß¿›ïy óz¢ÿ¶Ÿ/z¤—›—Oz¦wù¡oz¨wzš‰zª/ò¥¯z¬š£Ïz¬ßz®§z¯ÿz¨{±gz²/{¤?{´'zµ_{ o{·çy¸{œŸ{º§y»¿{˜Ï{½gy¾ï{”ÿ{À'yÁ|/|ÃçxÄO|Œ_|ƧxÇ|ˆ|Égxʯ|„¿|Ì'xÍß|€ï|ÏçwÐ}|}Ò§wÓ?}xO}ÕgwÖo}t}Ø'wÙŸ}p¯}ÛçvÿÜÏ}lß}Þ§vßÿ}h~ágvâ/~d?~ä'vå_~`o~ççuè~c¿zê7{ë¿þ´Ï~íg{îïþ·ÿ~ð—{ñÿº/óÇ{ôOÿ½_ö÷{÷ÿÀù'|ú¯ÿÿüW|ýßÿÆ,hP`€„ 2lèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’,iò$J‡W²Léò%̘2gÒ¬ió&Μ:°ìYp'РB‡-jô(R›>— Hêô)Ô¨R§R­‘©O«Z·ríêõ+Ø…X{†-kö,Ú´j;Žm¹ö-ܸrç>m»’.Þ¼z÷òi÷`ßÀ‚¦ûÿ×`áÄŠ3–zøgãÈ’'S†ù˜`åÌš7s¦xy`çТGKþŒ4êÔªñšnºú5ìØ_[Ë®mûvRÚ¸wóîMS·ïà‡Nü8òä*M+oîü¸ñçÒ§ËŽNý:vÑÖ³sï^š¹÷ðâooþüÜòè׳7«¾=üøVß˯o)ýûú÷ëÌÏÿ?€– ÆäŸ *˜‚ :øàC B8!„Rxa‚b¸!€+5ñ!ˆ!Š8"‰%šx"Š)ª¸"‹-ºø"Œ1Ê8#5Úx#Ž9ê¸#=úØcA 9$‘Ey$’I*¹$“M:ù$”QJ9%•UZy%–Yj¹%—]zÿù%˜\~&™ešy&šiª¹&›mºù&œVŽ'ì‰uê‰f+²ôRÄ}þÙd ª QæTÀYè¡KZAÆ•MÀ’$+Qì¹å£L&zé–sy/,¹¤HÊà,°hQ‚ e´¢¨­¾Ê©xNygž´rJD/c9/%ül“^d1ä ZÌ¢‹+-,)C-fÉ+¸¼âÄO¬§±B6Ñ /´ˆ!‘Hq¥b )‚.DèZ$gè2‹¥KšK¤ª©í»‘6d¯ÉÊHA¯ %ˆQÅH”°Ê B6üpÄ—¦ B ·ÚÚ¯žf¨Â ‘P´R¤ÈMA‹ BŠÿ Š5¼°Ä’-´2˱‘ !P¡Ë BÒÀKÏmžœrX¬R d€ÜåÂHÖÀ ÑÏ€‹&D¡Ë RvÁE‘?ͱ”ž)ÆA–  ÌA^áŠAº ‹»A!ÆÄªÐÐ%Ô}wÞWª€‰${TbA‰!{PBIž@ì1É${¨¤˜XžkŽC.¹BHRIäTn¹å’nÈâ’`v™Gà’D-DjáE‘³7ÉJCVqFMŠ`Æ´<$¾v@D¨B²ÐK nâ>d[YD/Yw@†Ÿw ù„+U¸R‹A2ÑŠ.¬¤²à‚,J E,ZØ"‹ûœÿ!E!ì´.V¨B ¬Z Zä¢GR+ÊP‹,”áçêÀøÊw¾#‰¡ fëÅ¡¸À>{½Ð^¶‹pÅ_[^óX%±IS˜^õ„´ W Xè€Z .lafx• °@†øˆBLa•þ†‰=ìÁ’Aæ,—¸=†°—h8!à*H øG9LDމ™ãâ…+Ô©‘Š*4Ó*² ƒ^D­ªx!‘îȤŸY/H¯È+lQ†(é VˆA/*6Y¼Àd¨YæH.6ñqHµ€ +Ö#ä¢wBÊB.¦‚DÌ µHB¦0‹Þ1¡Dÿbx¤- ­WE´Ð… Aau$RvqÀàiPhA¶@Cð T°… Æ;S¢R•ž,Ò t­´ G`¦3¡)M!qòšxÓcÕ‹I¾ÑI,’ ÕU"I20B,h`‚Ju KC&èO€NÐJ£ ‰ÂnPã‚$ LL.H]ÝU ‚;N¡…ëÀCkµ:0V±djÖVH!… qc©K™D…‘ ©½ C#[±K$Y 8¼…b  ^ðâ†C•°Ø4Ó!ͱbOØERç¹­!™vB*-0‰·^òyèe’Î =›õ¢wPY d¡ÿÕY†!HNÀ%‘”@Ã"ТU(ð°ªUpõHJHÞ&{ºÚ¯Ã Ò¦*$"èœr#–I›ôÎ %AIý‚ºŒô‚ºv-3¨Ð‚,´â &­hIkÚ~梽8ì“þf:‘FÑCª\DkõQÚb”t—ëÀ$,a¤‹Rn¢dÜmd·Wìg5µ,‘jÝ%iÁx¼ä…õº`Á#=á ‚´ŽG &„€¹¨_²^6U7[¸ð$¶$/ŒUH·8 @•ªTÙ¢sÔ^Je¤à¿Q¨k¤+‚*¬Â±DZþ:€ã% ¯…-Ô%_‰¶˜~÷Ûß#ÿQaBZ[6ÜwàÃB¢/0;$õ&W²ÿ2ÒRƒäÂ#Õ€†](˜Þ›Ô&”­ Vr‘­à7LP"c­ímµØ‰V”·¸U£'÷d ‰¸BÚ¨”k¬%(ôBfîE½:…¥ iÍMÚ‚UƒiF5Ò\«ç‘…¡l~Ì]þÔê&8Ï8¼/¸Å6ƒÄO!ëkx¤ˆd:é ;Ò VÚ1„µG°ÅÔÒ¸‘AÉG¨Esç%ÃM@…t“¨éÈBÕ¬&‚«‡´h!ua§C¢õZÅŒ¤Éª¹2`há!LTx-:2”A ~´ô¦pç'dûÿÎTúÛ%8(ζB²"ï”[‹n,’ ÷0ÛÊ•qÝ•3„-JEu ;K"E}Wqi»ºâ—Þûå‘<$ä¡U¸E‹p…>Zò°]hÅ D t ) ­p0š.$3dG`®ŽoO`C¢.”0\0à…»˜Ð‹Dï«¢ŒÂ-©èX´5I -e…3ȹ™`…\ ¢$†G$N¢%bG%^¢&>G&n¢'"G'~¢(G(Ž¢)âF)ž¢*ÆÆJ!ùSþ,@ ÿý H° Áƒ*\Ȱ¡Ã‡#Jœ(Q€Å‹3jÜȱ£Ç =RI²¤É“(Sª\ɲ¥Ë—0cÊ<ø!sêÜÉ3äÌŸ@ƒ J´¨Ñ£HGZgϧP/&cÒ«X³jÝʵ«×„C!¸´©¿ªhwNM+à«Û·pãÊëõ¢ Ùêõ¸6-Ý¿€ LØ €!ƒÆú㳨±YêƒÑúÄÇÅCˆø A@EC,öYtyãC½„³fΞüt(Hß̇õ€qÚ¯…“+_μ9L½þØÍgäE~‚ ù ">«û|ÿF=dÌk :TÛ5jDœYwÿ^€ÝЂQE (Ñ!‰‚;Î çÜ&¨ ‚Aâ@AeY§_{º-"žù= À!‰$ð€dª-Á¨Yô@ (úaQyâGdÓYhQ†$žU$öñÀ~ˆ¸Ó‚@)ä\!0ÈExVd*^DbjôXh8b…C0Vf-rÈŠ‹8 H0>i‘”§!ú™Öe—­åDäœtÖiçJA ò@’Õ-‰F9θˆ†TZ)àš‡2šGå‰I&kb8h\âhátÓ§Óœvêé§ñ—Ú@L—_?”Æ$Fó'ㆈTÿyåa©ÙQ£cÂØj}vòCT% èÚQu‘6Àê²Ì6ë܈7oÖ ÙŸwÂ*ë¡×&¢)G¸>z™¶ÜZ´"fðwÊ:kï½øÂ éA"Mî%°EùlðÁGA0Dý¢õÀ¯¬ ,1ÂWlñQiEÆ®Ä_ìñÇ ¯ÄñÈl…lòÉ(§ìG*·ìòË˱ óÌ4ÇEð@Ý Aè¬ÃÝL7_íOÏ?)sÍL» Å4ôäÓ–@¾¤s;¹Hp-çÜ“ÎÁÀ i!Ï)}VOÔBÒ8O=tÑr ô6Ð Y5ÐÓQßÿü3ò¼#L -ÃÏáü´ ×^ƒ-áˆ+îã_OýwàƒŸµQÓœ«¬DbH=52lPD:­œõË"LaOþˆM¶ÙJÄt‘Ûp;eÑjßÍÞ}úÍÒ,CAâÜRø+4?õê­¿þ8óÎ ½ë°ûSüñÉk®Qçà£L…èqs0+Þ[ôŒ0±mvq[%€äÔ0@Ä=Xdÿþ Ÿýð'+ c;ÃÙÝn&ÀûQ@ ÞÈ…9摌 àdS³À.ÖñŽaX hu³ÈønöŽ-ÄÐ(\ê4§;¬ïq+¼ÙÍ^èž0…K Ÿ/6© À ïÈ.ÿ¾°# í“E>Ú¿Ûùƒ HXÀ ȱÂql!gÆ¥HEœé,hÔb§¸Bo¬CÆ0.ø³›C!°€2~BöÐz̸À ÆÄ„,£ìðÆ"#öñ¤÷Œ8_äqHÌá'y°;žÅ.ÀB<¦¾_Lc퓇9v¶E¯X†@ÎB°ƒ“qK¥80²Ð²ô‡7d!Bzh.ŒàGr„yÔ1n–ÄÀ6W P&d F˜ðBzҙД&5­9(“™ ”$%Çy¯ò,³èæEjñ DlQ(>`™¾›=!éP‡<žaÿ7|ˆà ïpæ=ó¹ÏY‚±S¨>ŸÑoˆÁü€E0¨?~œÃæ8G<>ØBïÝQáÐEDðŒ,æMÁPå@Øy¢T•ëlg[@*R’fQœäÌ)¨0¾& ÜX§70@0ÙùƒîAúXH{hA?Å¡¦1†`ì¢-M}jT êðƒË*c‘B]ò’§òМW9àM~˜ ”r»ÈÅV`¡'€/˜±Ò¡ í"{Õ\-üÚºÚ¯8Õ©bí¤€ X!þКV1 DèÀ-ÂQ‚æÒ¨ ð†3¼GZìc:¤ê…oÌ m1-jU[Ö³ÿ|Ñ)xÇ&ÛÔ®‚ê@£4èx–ÜîvjÇHF ƒjÖó”}ì´¶yàbXF7b.¼`V°lËYÏú£»ß ïx5[Þ €²º×Íîv»Øú Iôô‡/7ðŒwà#¯ âü8~@CFõÇ î1†ç D æàÆ3‚QV\à縄%LalCô¨‡:Æá”*¬Ãµxp„'\Voà¢ó8†;5gb ĹPG=ÎqB:q ö¥–  zȃ1HȶA{˜c m™@ ì%7ùÉQžrY‰ld$?Wmö ³˜OFß1›ùÌ+3š×ÌæO©¹ÿÍp޳½Þ,ç:Ûy. hÀBç;ûùÏCa€Ú€6Ø¡|Þ  F9Ç-:%ÞÔÈ‘Ë Žp‰tBMèƒÑyQô£ñu=éú$¥Îžð¤6‘í!OyIõ¦=’>ŸºN3dß­O¢>]‹²±¡?P8‘‹Ðð œæ?Øp‚³ôÀÐnÁä0‡Ì¡ Ͷõ®‡„CnÛ$…<¢SÌ)Gꑱˆ·"è:¬áÙm€N`ƒ6zjr°Ãt`‡|¹nßöF®p’€àš³$D¾Éf¦ÛG¶æp€eÛ!šû4¾ëp€Ø ÿ.øN-ÂR€‹ü!,ÿ-ˆÂBÓ‘–4"11»iígg[µý!hkûä"9a‘Áâ +oˆaýqW˜ ÀèN4ˆ )nqŒ[äÓÙyÏCNtNm¶³îíºC¾>àpF7Ó|±«]‰=ì3§Ã»=€Ø ÞþÈ 0®õs]ìt’rk x„H™ 82â| ‘!ùÈI†ˆàGø‚pÚߨö‡Çí hÛÀ}÷¹¨ OúÒ7ì{¦O½ê 3úÕ»¾ô?½ìGûÙÛ>õȽîwÏûÜþ÷ãÌóžOÒûâëøÈg ðÄiˆ`=ïþð½×`‡Ï„ú q}Å—}BQî0"p/~`f«Fˆ€ ¨²&»@-`ñàÈ:Ø#¤c:¨sµ&;ÐÓ‡!€½G€A±Z@Z'· · è ´=50(~¬75/TòÀþ Ý”h@C¼u>÷§lÌv˜v°mñlÑæ'h7ã9€Æ‚¼ç‚?áUGãă"· áP 0 裃åçUf€fˆ†?nHôVHPVàñ€„ëöCA4D³ænð&oQ8…Aoöjÿ‘…Ñs0;`oö=`¸{b83ÀÓ   ÄtÛ  1 ÅÀ;¨`žŠ¢jApHÓÐ Wp‰qŸ„˜¤IùeyWq††qÔ'·ºshXØaý6oƒvJz“‰Ç·‰1±üp‘î@Ša`¯ ªX~بÀ°Xrþ`ü[óó‡põtíäcN$XsvÐlÅxŒNrŽh‚ÌhΘ`þÐÒhÔ˜{Ö@V°Ý8ƒßˆJâ‡ñV`ÜhrNum!„Ùc„¡’zT³FuÃès ЈŒñ|ÁoZx3; ÿ‡Mä é{ ù Ú°0 £H‘àx‘qviçBI”F©oçL»0&@ð@„1•þ0Y•uYo(qrwˆY9ðlÈhwõfz—ùqw‡““hð–·Ó“? ”` ôÆ`‡· Ž ¡x‡Ãx{Ù—™“w8eÕ~ö3 јTÆ_þ`D4sm€yÍæ6@m'ˆŒ›mžg}spx§Åø… ™—°©Sx›´9I³Y›¸Ù9·™›¼I3»é2œÂ9œÄYœÆyœÈ™œÊ¹œÌÙœÎùœÐÒ9ÔYÖyØ™ÚYœ¤ÐÞÙÛžâÿ9žäYžæyžè™žê¹žìÙžîùžßùï9ŸôYŸöyŸø ½P ùÙŸþùŸÔI ˆŸÊ¹ŸÃ™íÀ1pœ  ú úžU° õ êIU¡Ù9 êpîð ,œê¡ Úà§Áó0Éy ± Ø9¡Jœ¯°ø€Pœ2j¡ÂIdõð¶ œê¢0¢EŠœ:šœJœD   ÊŸÙiî ¡Xš¥:`p<ª¥XZH O ³ £cZ¦gz¢ ¢,šœ&ÐUà0z\ê¥ÃÙ î4Fœwú¥!pÂÐMðd€¦dj¦Áÿ)¦‹z¦Ç¹¤MúœQZ§ÄÙ Øi¥`º©Ö º° êðUÀV§Ñœž ª¢©ªjžYð¥È)ÆÐ ä  0œd`ö ÄÐÁI«¶Š«ÁÙé@TœÞÐ ÓÓ ÉYÚPß  ÉjœÞ`ÁY Ìœ2à ñ0à@ÁùÀÀñ` / œ­ºªß®ãÊœ3@² ¯ôj¢þ H$ÍÉI0š­ÛÚ­°¬Íú¬Ë«ÃyDω°ÁYüð§À¬ÃÉ Ã`œóZ¯Ãy±J:)0¥@ «­À­Åz¬×Ú•:œF@¡Ýp )Kœë¬ÐÚ3ÿ  ñྡྷIî é±P®çš®ëÚï*®äŠœ7›³;Ë®Ÿêª ­Ôj­œjžÑ TÐ/@Ê©Á¹ °€ªZ˵KûœY»µ]{ž ›œâP.Ì Á9Rp•ç©o·s;œ˜:°ãð"À {œÜ` - þ³Ã °%+°¹  -Ð:3œÊ  3ðÎ@ ìZ¶k¹“;•›œ®úà " œ¥{º© ~¸ ¯Êœþª¬$k²€+¸„{°_Jüà êàÈP³ÉÙ¶ ±½°Ãé§:œ«‹ºÂÙ¼©©C¡0 ÿ!²Žk»Áù·*+¥Âé ÆÿÀTpŒû½;¸» Ñеå@ ©©Ãy¹™»¹Á º”›œê˾îœik¶p¸‰K¾W[žÑ` ÃÉJ ¹Ðëð¦ÇYÀÕ ÁêÙ¶³Š±XðÅY ϬŒÁÂù·Þ0¶ É€œdƒÁÉ åK»œ¸ ¬#œ0àOœQ@ìjÀÃùÂ1¼œ/P^ Y œ?ÄC ~ó€tÛ¯tÊ«¬"Lº+œIÀÜ@3ð²Sœƒ þàì D ÄB,œE\ÆÒûÝÙ )€½µ+°Û›²+œ5ÐŽÁé +<°Q\Â"[ÛfPï{¥2Ì5Ü7ìÂ0ÿ½ÈÙÇÈ9<œ¼‹Â Â|Úp8¿0œÑ¶àñàâð uµÁ™Éü°Éìêɧl=Éʪ̿¬ÜÚàÊ ËÔIÁÇ)$«¸!ÐU0 ê°ó ÁÚËþðËqܸoŒœmãÁ yœ½û½põ ëêGƒÞ,GÛÉÄiÍØ¬ÍÍ™ ÛpÎé ~VÐ6XÀĹ:²-,ÏO¬œm¥]œ_àÁÃ+«>Z» ê\œè¼±jL ¡Ð£@ÏÚ±rì½ð‰ÍÉŠËNl²u|Á¹ñ0ÈÃéüàÍß¼®äœÍGkœ½Ñ-ËÃ)ÑÐÜÒ|Éã Cÿ+œ!0«p ϰ Ü œ4Á5žºlœÉS¬¬8aº·`ÌPÔÐüìÐÌ<ÏÆI6]Éyì†ÁéHÄYèà d5`œ?mœ^ ÖÌy ÞМj¯(: ï@ÌùXÑ«ÕÀÕ ÇÈÙ¶!PùÜû¼ÅÅ ËÀÖkMœmÆkÜÆ`×x½Ì’Ì£Û¼»´V‹œÔÜŽœÜ¨„œ1Àc}œgÝÈ~ÌÙ‚Ì¿AMÙüpÕ–,ÓáYÖ î fà¸àӫͪ»Mž"Ð\ -`¤»ÌGÝP±3àI`³éÀÔâ`ÜÈ]±|­™œ‡»P ÀÈIØaÿ­‹I3p‰ÚËÀ 4FàìºÛâMÞæm±1`ñP¸Ð œœ4Pß÷ßn­Ùà°¼Æi¬P/€ â œÞà}Ñz]œ¿ÜÜÅÐ 2Üp ÉYáÂm¤NMdpœü-œÿmßø]¯+àúMœJ½Ö;"ûà^ÝÄ8œÝP¯DPÓÜÌ•¼¾DоTŒg‹ÞêÍÞîÝñ]ÞçâýÂFŽäªMœÙ½Ýy ÛÒ)ÛÁù ñ DàW Û@žXP`õà¶¾€ô° ñ|èà ÒP ÐýæqÏfTö°©}ݤ=­Þ UnÖàÿpÑp » :æ”%P®¿pbèð ïMœŽŽWÀéÇ)Ñø µÀÈ ¼Âéé .ê­›¯Á ?«pœJ5÷ð 9Ú°‰¾è+èÆé\ÑæÊ`?Ê ¼»N¾ÝX[@œ¦î­ŸîªŽ´Ÿê£nÐCð±!;µ·Îèʺ~èÃÉíp¼œF  â0 Ð0äó<˳À¬Âù ïàú“n•œ™î›ž¼n³ïîïòžÀ»Mµ…~è^¾ð*cМožÇ¤ _ñÿŸÞiñOñßñöñÌ òÛ LÐG°IŸòó‰ñà©ò×Iò&ò.ÿ?óê)òÊióÐY :¿óµpë é@²4_ôåÉò"kôÒ ôBOô^Þ›Ù÷#:E2T_õVõXŸõZ¿õ\ßõ9Ñ“`öb?öd_ö,:ãõjßõi¿önÿöp÷AmQaöv÷xŸ÷böÁ ÷YßhWÏ6~Oõ`ôð a36a6KàÄ€8DÅä—ç÷}ø‘øgÕš/œ_õtz_ú¦úxÏ÷ƒõ©¶ú®¯´À ‡ï˜ˆ`þ@@;±Ð6“Ÿ«†˜€/à­o¨^€üø:QûÌOõ£ÿ¨ýØŸýÈ1ÿ5¢Ø÷á ´p >ûëÄÿ ``‹ÏPá?þåÏëßþ÷þñOþîðôÏþî $XÐàÁgÂ7L›8cz!W/0 >Œ8Ð ºyÁ n» ]´ ¾F¯›1‘*l 3ðU²”Á“çÅ@ »Ö½f 3ZÇÒ¹{"@'OŸ2—…žÔò¼ Ì5M 4´ÈK"µ Ò´‰sfÉ“)ÍRÉWp³  ȺU@ׂÓ~©ÜÛ—«W©6ÚÌi“C€9kä@fc@@ŽÅsØœ(gŽuÚ4Р‡9=H« ÐÚõkرeϦÿ]Ûömܹuïž× 7ašÜ‹)ÀY<',¬0ƪà1UjÀ#rE\ãÈ•¯9½úõ£Ú—w§n»oƒ ØÕ” n…Év ä‚dÁ r­4¾?Ÿà­âf §üqN¦i†™ â¤bK€›šE P‚ƒŒ‘& ”l ã’o /”jq–¸â*™Là‰2¬ð"ž¯ü‘%Ÿ¦ÐCK­™Ø‹P@§9P*º3Ðq‡˜ódR¯&üQF bÇ™…žÀÅ)gLÌ9vࡇÇìбìଇlС6òÇüMÛa8eâíO@tPB_Co ÿeh™âœ¦ 1šà™YP‡‰¶8ç$ r=M9õôQßBíôЃ~™f©À9p wze^õ¿·‰N€YŠ‘©~ ™zðGYÂ)B‚.à§ˆŽ˜ç(R JvÙ¼\lE©fkš^®¸§FyÌñÏ·×òÑ-]%ôu®ºšŸiDà@b|S•UoiW\}W ßÇ•‰ 5: LÚèá;ü)M€¦cü¡cŽ9V³ÁŽ` ;2`­P”SVyeÜP-ŸŒØ¥Qý"â À鯄{X`‚v;ªæ‚¤á‡Ÿ\ Zh‰&Èh¤•ÕÿƒjùF¢VÁ }z"štÔ‘GbÀÑZ®À‘|${¡—cžÙÁu²¥zŠ1ŠÎ1Çœsâ1Ê8§•»;ïÁ¢a”¸mQJ9i+Š"ð™BG°>–ݺá%h~®(‹[¥²k.'ªÒô«…<ãÕòÌ ìhøa;l(`9ê°#â…ý±cŽÜúXøˆ‹_ˆeæ›w~PTKðç'`:j•‚²#fƘeÆ!ÃSì}_|òÑ;|ªªÅ[Å£X)¸G fcF£ù°¢t° ›û•?„E,©Dƒ}¹p A\`3þ0ÁBœQ¾ƒ<0‚*ÑÂÿÑ<È#¨$+]8Lh V¸C¾‰>˜%r…smÉK‘RzXat\Èûâ7š~â_˜v„qO sÄl`;ÙrðGðêÐÔæc=@AQ°šƒÎQX™\9Ë[fáAG©ÈY˱3ž¥rqÜô€øQ†ƒQIÑSŒV.dÊ,dp£PiJçEÉ›æt§çTeæ*! bˆ2¨×û‹'ˆ` öønœ¹ñå0Yæ=ÑžÀ4WÔ¤.HÜ1áRAµªY-Or´ÀñðçBнêâî"ÙËnöAªp-\@ý5ƒ9¼!€ €„Ñ*q´o ÜK[ÓyI·Y<ýnx׸}HQ SÖ…^?C*ô^ •Åo¦h׆ÿ­rD°F‹`D#ïˆÿ@’+¸ D*U} ع§ô„zAJQŽ’”~;e'GÏ^¤B« Ìb!‹Žp-Uo®%â”=ÈÀp—öF+Aˆ`£ÃQ*âà…AÌ iÌ@ ¹ˆ£~‘˜9šÐ(«8N”ÁÛ  IA2• £ù@:Ê÷uê-$ìc/;ö*`޳ýâX;ÙÍ.“xç]Zˆ¶ÓœçìJ%~OßÅÃìÚü‘ü‘}샟š¹>å¤!I%A jLÈ+ Y¨¥â‡Â#"îHô¾Ñ’“Rä80ßÈßfQÂË{DÊm\>óžÿÈ‘’´$šDK\Š‘—蚥õléEÅA,°äè_€4ŽÐtÔç>ù±‰3@©6ÒwèCZ?‘A_¢–  ÝQ½‰¤²þxÇ<¿Jö~ÿwÏ»ZˆÔ¤*u©}Û?ýK/Å[WX‘Z)[Á§\Ù•^ù•`ò¼Î¹–gj1 <”}‘ mØã‡r9—¼¨=ù¼vá•w!’(›—z¹—v2‹œ ƒÁAÑÁ‚‘ Й½£Ãt À¾‚˜›à†o0†fy–h™ ?ƒ0¿,ˆúËB³¨?0-\7¼Ã?2T2©€š¤š‚¸™ÿœÙ™ž4ô”€8|š£Iæ9ˆ:„Ã;ü­®³Iøš°‘}+›@ìšÊƒ9Å:ˆ"๱8Ft 8½9)~ðÀœ<,ˆJÄ›K4‹Ó‘ŠÅiX£Ëq9ÍéœÏ“ÁÏ Ê‹QT¾S1>ÖAQ™P|ˆ>‚8º¿è/ì#D±9ÄWàd€ê!‚Lü›À1 +t@O´ÄÄ©¿ODœ.ÃXƒðƒ(Cp<²yk#íáï1‹ ®tD¯?4pèŸÿ©³ûɤ‚G2¿V<`9 I„¡ú&Р⇠:ˆuÌ Å!’ŠÒ©#X9R!r¡ˆ¡ÿ¿H,€\ˆÃ¡è#…ü!y(.À"É#2ˆoУ“†‚h:ûÁЛ؟a˜fÁ‚<ˆh\ĂȀ‚vP Ÿ”  <ˆõ)ˆ¢t·p\JGƒx£8š#t$T9Èì §q*§Vù$J²$LÒ$NÒ® ¥¥˜+¥SJ%©Ø& x%”%Z²%\Ò%^š©‚ø¥¸”Š|Š'bÊ*ƒ8ÁgŠ&¢¬¦kʦ`K·¼½³T ¬$'stR'vÒKEÒ'yJ¦~²'¿  ÊäK~ª'™ ‚û¹€¨ `$ˆ¦»¤LÚ¤Nr´·Ã³[Ê¥]ˆb@Fb$µ  ÁË`’|H;ÿàÍf»§‚˜ß,ˆB$‚0Nà\¦|ÎsÊ‚©‘*©©TGª„.Æò ¹2@¥ ªª¢:*øN¦r*¨šÄ‰k‰«Ú̃ت®úªx+²2+´R+:³J Ï¸R‰Îò ž€Í:Àä+¿RœÀ,8øD,õ”‰í<Ç‚,É ¾Ÿ±,»-ш½PÏÊÐÌ2‹,|´BcIÔd4ñ4ªÖ”¦"¸|;«´Z+ÚÔ©äØ†¦zª¨ÚO±ªÏ‚Èw`‡šáOGP!㊠Õ˜²©ôR!CèŒÒ·1µóº¯Vi5èR.*ÝR.m1)•Ò.Ý.+m,E®ð¯ò Sÿ5]Ó ûÒ(eSéÓG*ÓCÙ/ýê¯ÿ °ƒS>íÓsSèôSATB-ÔçÔû3TE]TFmÔ‚@Ô½sÔù2?I­TKE.J}THÍ»JU³RË®IÛR_H‡{`‡\xÌ…³ú†¯ˆ5Y+3™P´£ÉµßòT6s³]=£³>3‹]å3¼º³¼4A#4§H†{‡]`0;D*¸ gÐ)~ á‡|X\ðhø cµ‡£yc耤µ/¨´hÕ)BÛV"´fˆg`R‡,®L%ˆMåTIݵO½Ô¼€Ø€"H‡9$¢Ûœoˆ ˆ Zs[³=áâ×^ûµÿ`6™x¶c“™ic6bK5hC6eãX™¸¶lÛ¶@†mXPý³{Ȥw]FŠ^Ð'I @wX.ÙiȾ´‡,X€˜(ÄIr­4™šµLŸZf凗õ/¹…ux @öð­{•“|…·y9{Ã7‚(ƒC<±=ß8µ}®vd†;¸Š€º…ã¬á:ˆ3 ‰Óª–¨8º!%´ ¡Àº«·¦ܼà€q©xQq]¹±$Ú³=œ¹*5œ£ó‹‘ì¹A Û9¡“ ¢s>|0©BC‡V†^ Ú‚€ÈÛÉSA|Ô=Æ=ˆÍc~ü¼ö½ ¿ÓÛŽó[=©0ƒwÈ\È@©(lUÙ;|ÐÜ ’÷ÕÈ(ó=%aÖK>⣒‚èЂ¾å³`•x>_œ ~°X*؇3$ˆ‡ xW‚€]‚]sàY8$ÞÐÝ x†VBÚßC6ˆÛ%Fáw•~X!æ] ˜½¹‡áè<çÄ^O@‚è?J±L‘‰Où­->¯·%ˆ N‚ ãäÉÿŒ@•ØG œß T– ÜÀ)üÀ‚àB©°À‚x¸³¸{È0KA¦\V„À ͤ{Á—€á—0 ¼ÈÁGæA!ä‡Ùs~ŸÄ50ƒb(ˆV¾xx|xþa‚°‡±ÂqX!à]aáa æOå«À~`–Zpwà‚¨m€`Ðt(‚DY”ë•âN;Ã>TC›ÁáŸÙCÂÑÃhæÃ¨‘æ¢Ùf:gªùbHD¯›b,ç­QIJ¼¸©rDH”'7&¥k¼DfÔÄgìD‚¨çÄ1‹Y8Ƀ s¸eTäãä‡UĽÎqÅÑÅÿÖ¡E]”h\¬Åæ+^ü`0‚vWîd#@‡*èÎQv)pYP¬±åU¨aðpr]‡àÕCi’¾Š&àq½Æ*ÒaöŠ_Àt8‚GŒD(uf3ì;r”‡íé€N.ÎÎè"ç²±Gy„I™Üjú‘Fw^L}œÀaéG‹d ƒHœ,HƒÐOJH߈nÈ ¹nÕJ!#îBŠôGzP†æ‹ŠE’$¢ä9•ð!Ã6I©HIçˇqK’V…™“Ž]â o0V—®áå³X€}h‚ð,‡œöáÆåÊ¾Š ¸‡è«=¢&ˆ*0j¤>`¡ë±?§Þ4ÿé$¨”#?<¬^Ûán®ÆÔÊöK¯\Ͱô$IêJ4^è…˜SB¥~DLX‚ËÞŒMºl+‚N™U˜ ˆx`\â$(¸q-ÞÀ"R™Ø€g0åt@å >Òd(`÷6пJPÂ2¬øÄH©€ò ¬É’‰ÿ<šÏ ÑãÛF ­3 Í‹-Qcí€e¸‡yð…¨¥ìX G o˜u=šn•Ðm·xzˆ ¦å×åV ÏtQ€WX‡{‡fëÐïñߨŽ"ò"Gµ/:5Àag.- vdö_7òd'SôÓà:SòjØf¯vF]v$³vböbÏ ;Í/<0ÓvrWTlörOwuçÒsowÞ^wxwswzGwy²~¼w}—®zïwy“T[=¯P…ÓQ-ÕS]”j¼23³Ye®ÿ€'ˆ3h³7Ë3,Û3V‹Ÿ3`­ÿ³@3ÑcMÖeí9 ÕÒ>tð¸‡Ë õimUguy­õåbÏù%Û×Q#_}X%ØEy…Û¼s†5 ™½5Zõ-‰-[жŽ5¶hÛØ/Œú­zÙÆ6më/@Y•eÙž«…_  XrØ•[Ú©Ua«ÅZ­mj×ù°5Ü{Ë·}KÛ¼¹ñµ¯¸ˆ¹U¸²|‡ëº²\¾u‰ÜV‰ÏCÜ«ó8ñ{Äí-Å=e(Èm9t!dÜcüÀ¾9¼ÐÜÐå\¦ñ9½8}Ä>ˆÒõÄÓÉ€i0VÈì' ÿpzPøá½åã}×ä½y©¸{ãŸRô <æ`\ïÕbñ­Êç—.­–¼þp¼í‹<óëµp_ÍSùýÛ³¬ß ¹_Óðÿöñ_~¡ehvð†-(Þv¹dEîç½F’¶Ð ¦à /ñÀÎYÁ„ Ø…`‚’2V&¬haŸ•ŠFø½ HeßÓh PëÞ‚ÄŠ‰3SQÚ­‚0 Æ»@…ž)üDTìIÐРB‡-jô(Ò¤J—2mêÔ'ԂΆ%ÓLÀ³YÔ1‰*`ª×°_©Š-[–J>±àXœâ®ç«e×¶}[ðV°„ÛTœU,j ~2&Ëÿu[C¯’”®ˆ‚‚ø!xdžT²C6ëÓ‚ ,ñ¦´52C >,fÊ3·Ë³~"&¸˜6_~Å¢-8ƒß4´+ûkZÈß4¦õºrÏ8rÊ™;º‚ß“ŠNø… E¶H{îî¡«RPļq!”ɱ27`á¹–;w‘}:íïÿ?€ ”WÒðÃO. 9ÓJBD¼C8ݘpÏz"¨ ƒ/˜`ArHЂ=yÈÞ†žõÔ[Xà€Aú ÀѤ£Ž<Ï̵¢-¾H^z%vTEðCA»UmŠ1&€¶”CO1@?ç˜cÎ9ñHùU†5ÿùd”&ö4Ë4=#×LQieÅvm?.™$^¡(ÀuW”…]^Õò œADEaýèCH:T à“QBu$ÀG!MË D¾Ó¦îÁ`Dy85ÁO\0?ëõ4 «­ºújRb~µJBÈ3F,ÌŒQ¦WÎÐ*«T¿+ëQ AV¼EÁ=ZD 4s!+€² õXKúØ`æU4d”‹¶¹`ŽKðc‚O¾Bu®Kà  7=ùÂÌjüÐ +îð$Vøìî¸sÊÉ[Z@¤|êÍl ËÓŸ¼FU ÄÙJ±¹XìÓ7ºX”O™A#AÿÕ^§ÍƒÛƒÓ÷@›ªÁº3Ï=û'«» 5ÃN`°#KXA«´¼e)0ùL Wà¬#ÃÚø"ûÌ @èD+€ÕXkmí‘1Õ4Â,`„=i÷ÄË1`Î’SÌP@åxAÐ1É”P@ ª(l[{÷ý·‰"¬2QÀÖ]¼°öp‘ï¾ xƒTPñ‚Ä€SÝvã§måöôtÔSŒ6`0MqQÝN L°Þ.ã˜@<Œ¤ 0Öòî;ðÂo¼OT4{A ‰-£ 5¨ãJÊ$ùÄ2A L0M.¿ç 3÷à¤[:LPÐEªPùRÏ}ò³Ÿþü')Ѐ2Ÿ5hY®P€*t¡M:Öž‡6-v¸¨ zÂ;4  ý(;*7ŠšÈé¸;rAµZ6!;$õÌÌ¡@¨È±ð@ç¢y,Á+Ä@`Ä¢Ò‚‰z…ç¸G:xèiÐ#a^SJ3¨çàbTŒŠT¥ÎäßÓ l°;d´"íè(AªÿÖhŠô¥À‚‚ 6P„ttÉ­ç¤7fê“]£FˆÇßf²¯&Ó+â{Q¡2Ô FåOÁìÁ1%dA R… e-›2¸c "8¤ âXÈJVðï¼/1퀬µ\+lA•0•8Gr-Ž‘wsš¥Âf ¬ÀÍfF3}Md†wäûYà8(P€d¼F\@ÂV@Ž #Ѓ.4ÜŽ (`böÉ4†1$lÙ+ Ö4( %p€ ÆF,  ƒhÎužE¨G]ê¨,@K¸B…’(‰Pd&²È‡tÅâá0jKÄfYHbÙ•5iS*ÑR+9%UV%T8ß-1¥V…U:T¦ˆ0‰12u¥YV%VŠÅV®%œ¥2}e0É‹7u8Q8‘“[æåK¥eX°%[ê%`¦` ¦_®å`&b&&<&cÆŠb>&dF¦‰½ASc^&WŠECIæ,mÿ&g~æ+YTñ!Að¥W`&j¶å%ÊáY.õ€-µ”`ÆT®%DMÝí‹ìTOEÅO  T5•4VÕUÕQ%UAÜ&NeUr$szEX• º-öej¢f[!æ2¼jf)áUm_ù`åa…Åa%VÓd–Tq–g–WŒVdqÌyþ'U„}––ägzzEÖE…iFÅvr'TÐ=Ø–T0XoýVA”Ap Wu9ׂ%×Óu €u=†.…r¨…zÆ2€wyxÊxÅCyÍz¥(µ°—{Á—|åYOØ~Éá§9X€e_X‚5è‡ò(„y…„Qÿ˜W\˜ Ö†½Þ‡­Í{Å×|!LB¨˜¬À˜’vÌÇ´Ø‹•X–f˜€Ê ÙE¡•Q"¥èeZ–i—y…YB™ÝYœµœÖT¼žÉYžÚœÙhY,C;°ƒ7lAŠ8¡#¢)£)*¤yœ¤Qš¥yE¦mZ§ÆÚÀš¨‘š©¡šª±ÚW¸¨ujúD­ÝZy JDLÄ@ø°ñÜ“òWÌLZ¥…aô8•³A›´•…µíš«Þ#*C°*¯1JT ¨”Û¹-Y¬1Vf'©)cæ›`¿½A\VlEWÄ5œÂ\ÄŸ2œ¬Li ¶#ÇeÜ\¼ÿëãéEnìÆõuË·h*­ÆA¬œe`ˆ8¿zÅÌ @CöÄÍU‡ÎEjX ›ÚÐ*Èé†È¡˜o‡pGÐI‡¾PÇsˆÅÒiìrà\X(+º5+OÚN+µúåÚQžÛ5ȃDÈ„¬GÝÝß‘àÑßaHÞí¬Ü¬(I᱈ãÅÈŒÔÈíué­JÛý§Ž^žè…Éæ]I–lIÎXÕ*XO”Þé­ªê @¯ñCëU\ÃÂ^>>¬R,Aèž8 í!Ê -²^Lí±êê…iu–¬™2ô%eB´lµn ö™Z4v®èŠÅ´Ÿú™…ãš_XD®¼ÜKü%˲4˳Üÿæ²áÉ=-ÿ]«ÿK  ª »ô7š‹ .`òÃúDjéúKY\ –îÚº­i1Ìîy`÷q ˜^LÆHŒð ^EÄ`ߦìßÎÊö 2®aBþÜJ®(¡ÑàT>!N¡Xtïb/Tˆï÷zFå\Nælޱ¨áÙ˜!؈Í\¸ïÖÌëç¶-¦ÁaÜx®Žüáâäáàöp †ÅÁžb‘8O" VI|NT8béœAô¯Á€îë€âJâí$O`"ó,0"B{\*6ϯà-f”.Ú/úâ’Ñ´2™´®ôþe}5ã3&nAL£ÿ7bã9"dTÿ18ñêV„›ã©Š…1‘¥=jпţÍÅÇy±­Ýè>¢Ðmd@AæÐa¯B‘ êÕC @DÚ‘Sd}-iV €äîŽÑ©d­‘H6 Ñ‘ÄC¾$?²DjÛNöäO¥ 8Ÿ“!YšÞðVŠgÓÀå/I¥+i2(Ç&Oo(‹ '/PXÐXSa•²+‹Ò(gò+{Æ)·c*—Å\rS]Þe9Ͳ/ËJ,kå/31»e03e1'³2/³Ró034Gó/;³õIó*y¦5{FD¹g6—6ÿ5È+ç²É’lê% ”;|² 1ƒ<¼ÿƒ0TÀDò¦OUXÌTh•r.q†Et„>dèDUOЦW<?äÃ:à‚"½‘:xI¹GM €ðC¨„ÙŠ„C7Í7 @8‹³+Ãg7+L9øÂÔ€;ܲHÃ2P@ˆCL8ðzÖ Vp&>ûDNVe•sE(ãô´WtEçAóCH¬sÊÜjybÃ=S¾Á ”Á=”Œ˜ƒ7@°WÉLTûŽ'ËG‡ô3ƒúpõŠƒM\ÓÒíUÄy¡hx­h‹’Í‹ª—ŒêN)3Þ×öé«©‚)rE— vT¸À{„-DƒW¼¢ ÿ€-D “Ê¦í¬¶íN{ŒD]w† ^i§Œ¨šöe©ØÂ.A ÃØ,RE$-<÷L$0X¶HÃ4Ì€äB<Œµ÷„E˜ƒ8+¼Cî((ƒF¯Z3иšœö ©ÐvÏÒiD£ Ú¢Z£.Ú\@ªçÒ†­V*Ûh§M-­rª¬}jª­šŸ¶™|{ê»L¶f?tc1ìÀ84¬fhT8¬ìq3­«k‡°JAX"+F¸­lE<ÄŠÀ9|²m/§Ó•AÏñàÄo,@÷H·Wx¤LC”ÜO\Y–eêÙM7u¿q«À}+T€…¼ÿ9/}w¼Ö¼n’Û/n„`ˆn¾" Ê=†ÊQÆ¿jkcPyX@9ðÁ:ÜmO`À6H1„ÄÂÊêhEGƒÛÜÆŠlB|lXKÁb¸®ñC<¥Ì=Ä çNØÃÐÀµÎq}Àoc:ƒ°ø4üy GEhƒƒ¤Cè¶þŸŽïÒÊèÝçÉlÜÕ,AŒˆT˜(ªŸº¨ãÝß}HK·º˜9ã1-â%í⩈­GZ~qBL^ÛY­bžÕV Özž«{I×zE:ÓÃ8ÐÊ4J8èBˆÀ3d[š¬ ÚµÚzq±)¸Oøž‰uAŒ-„ €¸×¹S­ÁÆÿ¶¸À,¨C Lƒ/´€½ÏZ1€Ž:ð‰›¸4t 8Az½ß;¥—É/Ð :°Kí%ºRàO­xãPÓ$q,Ñú±t.ým®´t.“{û“ã« &¢î¾KëŠEê@ÅLX5ÔCíV W஼¶8[÷^ñŽû–OŒÄ † S1`ÆnOh¸iyƒ÷|ø$Í>ÜÃ=äÃWÏqo[ô¿¤»xÁs(ÂA`d_aç¸Ã#Ä Ñl/Åù8®ìtbÕÐ/×xMü¦¡ÙÔ/¯ß¯¯'DÛ¼ÍþF…' 2Nà 0ïgƒÀ@xÁ=4)öãÈC[À2tÿƒ"BpèŒÎG¢êhKT¢fž0A¼}(BÅ!>>!öã&ÆÎY·{RÇîÜ»5jMÀÿæÃ¿@Á>´ÀL ÁVc}B@zYûNäw¤Á½T¯zzÙ?üåWc¯´½XXü*¥dÕdñ¶ZñŒƒykB,6=yÌb€Á†3îQøð!hóìu3òð…7rψ%ƒXe½ZINàwò$4…SPò£G’$bõâÍRh²¥Ê‡ìœAd‰ò%Ä+Aa*4ÁïÈCo»LkÉO°h¸#sÿ_=mSš‘1^”¦O!ò|Xeš€_« KúBÚ·hÌ‚Uèo^½{ùöõûp`Áƒ ¶{qbÅ‹7v¼\Æ‘?&«rfÍ›9wöüthÑ¢ —6}ujãY·fM²äÑFjO‰kÝ»y÷öý»·jáÉß yr°3¯ü zôWbPQåÛ¹w÷þ½±qñãÉ}zõëÙ·w±||ùß×·~ýêç÷÷w±[êÚ@…,ÁdLŽ9|ûÂøpÁÊh9çžtÎð­‰'*llsˆ²K¦zà‘E¡ƒ@ y–@Œ”0 Šÿièɇ¤3ÔÁ看»0à *ñÄÄ€Ôð!"Q,°ÁÆt°Ã†Ì"œR¼ ?¬ì—'D˜ÂÙ®<nF,jrZ0"/ BˆEyrCl žàgÆÏ”ÈB *Ã)D8âIJܲK…Ê<3MAµäR¶CÑT“À&{2Êʨ¼t¸Ãb°Qb(t†–cÒqç‰u €¨Œg*0G;µž)@!PE%Õ®U[ýåÕXCÕâlUWX5{FÄÀFqŒ¹@!/È¡  :6Ùe²y(`›[¢A'š ƒ‹žnŒÙ¦mÂPèØ@xäñ†…,Øew†±à!Yy}7ÞÿyëEÌp²“¤ä4—´Tl1 Æ” S!uÙu·ÛoÃUŒ =ZG‹Êˆ@a†Ózhš_ì¹d…Fì6昣²¡ šsPè;Øèaæ(èA9zh@¡¡‹>Z¡®™g™i¶Y€w˜:i¢åàl°l°Ûˆzf¨íÂmÔãF š¸çÓxœÀ‚Œa¢cT xˆ¸Bqc•›îëûïÀû%¼îÃý\ðÌ`gÝÃÀ‡‚’aJ.X`rZ™sÍ97pÛm©@ið>lša&@nÄ, ]…f‘†”à@!c¤ ÁeT|îÆwïýwÿ8ÅYb(ÄŽB¢ +¼ˆgMYòéu±‰ë¼=wnWoýuÄ:~H~Ì@Çb"‡“r¦¯þú²z‚iòuç·ûÃd¶Á<@B¾&‡ð <Ûr  g;ØAØ ÎA‚lšvð¤ à`ÕèЃØ!`ˆB4À'ìB&m9\ LŽ"…,ãSÀˆš!€gØDLPÈÎñ$@ÄB\ E)*†ŠOÜÌ/¦±c½n î€É+–1-0Šñ!zÈ6ö&€Yã0%à‡ t‘|î’E8Š €‡\€EPÈæÑ¯+*d}TŒÿ+T½ÃÌ!ÓèÅî±&y˜ãtŠñ^Å*>6êމ9ŸB 9 p S‹á¢!IIRR•]\H$'YÉÃä,'ÀCØ`ª@m–×PÈœ0_ë1‘Yµ: >S.uù9ÐѬ`Ï>Ø;tM”‚5w‰CžÓ¶/v‘ãÀÎÕ/¶& …CÀÀ4ˆ˜$/¹É†Jô¢-€BCÿäÕLÖ'¢ÍhÄô@6È0Ù*ÁÂ"ˆ`v06ecÙcË«kØ`{ÚÕ6À [øAb²†¶°I “Ÿø0p‘ ]úü3¼C,à‡@zð˜ ëžN} {ã[ß=VÌ¿’ï}3'(ÑÉ“qqŽyc¢b07žŒÜ6üáQU=ꡎqt:|v!×6Šaètk„#î:èá]èÓ¹PG=Î!$~“då-ùb-³$i&5I›Ò»H„"ÁÊ;òO“ä'' ÊŒAxã}%yŠNJ$tû9tëC ºMÓì™­!ÉAÎä°3 [ÄÿD£Ù•6÷¦é•¯fŸÚïNm¾mF§°†9°U!zçûÙÎ Ù/}Ç9ÆòRk.óxË_^Aw<æ•yËM4´± n8_zÓ¿Gó==p<ÿdÐ;F:Ñ¡Žu°ÓªÕß÷ÜI=:sß{ßÿø®Ùý9ƒ_|ã??ÃW~•ß|ç?¿;Ë—~¦\è³Æú×ï :ÖA1í?húá?•~ï‹t܃¹05o:”û!,&3)ÒšVÔ¢&F'y­]Zà}ÄÉæjäFC=F^€äá„¡ÃüÐOý Dü*p‡\MÍN d`Š xêû#LàïÐÌäQÿè¯MÞä0âdNö¯(úÏ‹bPE!î$O4 O P–B@n16°?X¥PöÓ>ìbSè¡S>eWHÅTPEUXXrE§¢{HâW\EXü…V|Å ½P38`ʧ(¨EY&ÊY ¥ÔÐZx+[RÇ[À%ëH‚\Ì%§J¸F^èÅ^ðE_€ =^þp`£`1ZF ! Fb¼Oªcdb”ª "Þa ®)އ$Ì "í"fʆj”Æhæí|hæÀ® KÖÀ4à…´†ibñg‚†ñ”PÃ.ØÆmjy çnòfor'yÿ Ç.œQq’±q¦ñqªñ1ÌàòÔëÉJgs îsB'ž.'sÆ1ÌÖh|\1bgvÑ.¤jy|gß„‡xŒ ÇxÇzH°¬¨‡²g{c“øÐÓâ# bá "~.`Æ¡râ炽â!ý‡EÈ‚"h‚*(퀈栂€fJƒNRT²FÈ܆Q'QŒ‡ˆK€È†¨ˆŽH’h‰šH‹bå#‹¬ˆ1š23,À° œêÉÎhŒÊh9°r+¦Þh¸èȸCª I€‚"Ìr‘I gÉ•jÉ’0 !)qÌ2–ÿœ¬: Ð| ¶á$Š/‹B*©Ò*E–nir©œ”‰™ì ízF˜ ¢ê@ 2I2c±2c'wÒ.Ö©ÞéŸ bžêéžòé&ú‰$v &ª¡Z“¿`“$d³ \³3fAÀ @ £4Š£$7mÉÏr#û6×ss»Vs{ïÓoýv£ýpïýCIVV!ìFd„FlÄ/u„Gd¶(&PìLdI~Cdwç1+3ˆ7C74G7÷„ÐArG01%QÄ«Eä¶(XP=9à OüP…PÅå0fð¥·ÖŠÂxc}sy“— 9ÅSúE §pOªðV°°ke ƒEWfe !¢ ý73LÑXe ›åYâ!Z¦ã[´E¥êpcÒ­bõ°9ûð&óe_è€ýƒÿ Æ`âÒ!‘$ñ©¾ç½2Æ9ñ!@FdŠå„*eV††f¿Ã@/j_‘l°¦‡¥­ÄÞW4‹±mÞ&n¢qBoø&#ÇG‹‚¥˜Š'qîp1:òE9Çs@GtH'3ÉúT‡uÜvd‡vöý±y‹‡§8û‘yú•$ày¾"öG<ùA{Ø<ñ²Õ˜|`ZÕ‡}Üg1RûG#eõ!$٬臒a†dˆ†.(ƒPÒ†¨“Q(܊؈‡Ñ¨|(•R(‰”H Ò•§)Ò–«(*§²*¿h%ì w´¸uTê+C©E}r,çñ½ÿÜR!Ðr ©–™ƒ‘¼3.[é•*é .)“#!¥ê“Ü™£ÔcJé”RI1VI.·y/Û™.‡Jl™83íÈ "Ú—$Rùˆ•ó¤Ü žP“žì Ÿôé¡ qÓ¡tó4os r³7?-Ç83j£:꣢†)ÇÌŸKŽ:cj:m §Š$²ó§C¨ˆ*.Ã3©øa©šjÑ3‘=Ú.6ñªvu«C?aÚ§ÙS~Ì ©ƒx{xžù³±ô>øY•“ùA5TB9˳@kµö´´¬úB³ú´8#K-Eg«¶n+·ÂZEÅŒEaÂE‹ F“kF«F§ &DöºàzGÿŸ¢GaâGQx¼Êë¼ÒK!Ô½Ò:§ãk¾êk¬œ”dl‡›4¿HÄèLañ…°M&4ú\‹"NYl]"Æf¬Æ–¨OéôÇN«™Rµ#Z5Q…R«ìʲl˺¬QÁ¬˜×§I"SÑl;uÓ>Uí ÏôŒÏV[NÐL–$žÕfÍ× ÒƒV- ÓB¸9 9Ÿ"ˆUX£"ÕV­Õ8WÉtMÖz­Ö »ZÓûUãkÀ-Jĵ٬ܼ-¾OÙ}9ûnÑuÝB[!ÚUÞèÍ^ N¹‹¢ÀñGQs_ ¼1ŽV` ÖXVa'®â.Îá–[6®ã>®»)ÖbÿKn\hVHvçèæckŽNMÜZ‹¢çP¶ëÈN¼ŠÎeaébvé6¢é>ü0|vêªîê¸ø&Â.ei‚ìv"Ò––ëT61 ïð¤-k?èiÂÉ}•ù»q+7l÷v7ÊösËÕ–r·|QùV3à–ô¾Ìü-—Ì}ÓÌÃo§£:×öÔqÙ¼ÍñœÏû¼5ô<Ëý\Ð}4]óÑ3 ½ñ”Ï;ѹ/{ÕœÑÏÍÑo¯t#ý ¹ôV1ZÛäþì"ÿ&$ôÒwƒä! i÷!°%¾!]]w¤GŒzž5ƒ©¹¶Ò7W÷°ô˜—=z}Q°z{ÿcðÔM$ÌW6¶oP! €É˜Ì²Ë.¤}OúäOEžC¬2v}³{]õâ× ç÷yÅ~"UXµó÷ å] é½ Ïð€«… ¸—ã'*‚éPc„\!ò°²Èò½6éF?xÝi…áÑ.Ñ„u8²FõY˜EQ]1R±/Ã=¢î¡ ↟"dX1†8k–WQˆïJÚhÞl®ÜÜshm’XñXÑð‰¯x¯ÑŠ£¸è«&ˆ¾2¼¸`5ŒÉ‘ŒÏ1ê-µUåÝX‹"Ž÷8x†ÇŽ“^ÿqÿø¥3¹ ¢ïÒãR!@~2rä£äÿ£Â>‹"=&}Ö§} ¾”g(J@™&Ah$oèïÃm”Íi牯(z臂蕉Ò(gù–Ù‹*šƒ–ã0{Ùrˆù!ÈÈŒ~ù¬×è˜Ã’­3Øí«šÕRšuj)«ù0®B›é²›írÛ>äà¾|S!ê¾(JþìÓabÑ•Êû0Žº˜ìYðù!ŒWúwñÓf4ÿÙ4QZžz5 š¡¹? z¡k3¡ÉŸ6=c¢Ÿ¬¢…£‹S£Cj·'6ûAZõÃG¥£S¦hʤ­“§Â‚­rôŠY€0aBë6¸BO¡D&ø!Aè%žü¢Á7e¢HJø]@¸- ÿÂWɶà‡aäÄZßN*¤’O¦DœɘÓy3'Âü® Ìâ¨;6Ú°5jSm ¶9‘piÓ„T­bé/¬Ø±dËš=‹6­ÚµlÛº}ûvd ~, –ÐÙ*…ä‰ÅlÌ´„À–#£P/P†çÝ»X@áÑuÆâ¦\,„V’R¸§E€XÐjæœ4á-¼ S®l)—Ÿ „ÉXŒæ8ì„.Ì™€Ÿ ‘ŠEöþ=R ¿åÌŒìÛa®Ái`åNDä(øD À-}·~"×òs§ÐÅ<%ú®Ü^@zVަ–™ƒ©S;=PøGÑ@B ä×CBùm¥Ð€üÉÿWƒ>a„®%“6¬Ð=¶—P3ì$;² ´E:Ð0OEVâ‰)®¸X‹(ªXB"¬2QÀs¡Là¬#ÃÚø"ûÌ @è”&ÀA©Ðj ¹&K:M#ÌFØc›H¼\:°M1C”ãBÇ$SB1`cBdš‰fdI¤ 0 í2Ž DÀ“fu(à32AAÆ NB_†¹[ïÔ-á”0Á ¤ÀVä3:uúi¨ AqOå©© Š*™6`0 1@=ņ MÐÆ;ä°Cõ ƒ î—ëVÄ» X> m´ÒB(Ó Ò|ÿ 3B–Ðï(À?R@=4r±Nyp(S¹ç¦‹»#¹‹ºêV¶Á3ïà“Î+Þ.çÌsŒMb˜ÃÍ3Á0ðÀ£¤=õ¨3J*U¹›HÖÒ³M1zVë 9ÏÛèÐãŽ.› `A.êÔsÎq"d2Ê*Û‘BìšÄÔÏ, *À ÷Œ1 ÑÌcO7F$ôBÈ#g\Å:öÔ"ÓÌ-Çä[ç<’×ÌŒ1"í¬ØËå|1ôÀcŒC:°Æv+@=È1G ìs¬‘ABtÛwàƒîì´Ž?¹´5NNyå–_>98ÑE¦9æ‘‹ç¢ÿNz馟Žzê5FÎzë®·¥z첓Þ9盟nD ȳÿ|ðŸúëÆo<ñÊ_ûbÍWþJôÒ¿"†T¨:`,Ï}÷Þ_<òâ/9øæŸ~úê¯Ï¾åä¿ÿƒíÏOýößÿòñïßzþþÿÀ ü+ ˆÀ*p l ÁJp‚¬ /ˆÁ &P*'ÈA~p„$,¡ ?hL¨Bháñ,1 ¦p…Ñj¡ Åbôņbi…,zQ„±øˆm)*0–Jë Tp ×¢Dµ‰e‰¢ÈDÂ¥ °H +¢À¿(¢EŒi¹ÿ"[˜xBÖÍ…dÜaÑCªZÄ¡Ÿ¨"ôb Iœ/J D?– ŠJl¡²PÇö¢¶`‹ ja±0¸x…Æò„U8±Ž9¼cÕrH±4¡¼ …dðI$ÁŽŸl‹Ä€è‚Žë$[«{À„IU€PµL‚{¨„$€à’úÃ…˜BXl¹‡Ib95„sÊS a¥{`&€º¢%B°éX˜êT´¨’h©!`SIT‚WõÇT«Z‰®ÆÔ¤s Q]ŠÕ³A,]i É–#à" µ°£¼P–»B3‡7í+ªÀC%ÐB™fž@‹'„… |ôxÁ±° 5pæ[gÊMdFô¦½a¶ÐÂ"ôb£þ Ãi€Ã'¸¢ ®¨…fÊ„Vè‚EТd ,ÀB ˜å«?¢ -ØB¼õǤаâ }}b taUТ‰þhh‘ÿ‹V!¥a‰ílƒØ[¾Š¡ -,A/ØŠ2Ô" e¸Å*K{Z±l!¥Œ,B:ÙÊŠt¤M„ %jÿŽu^uiR@‰Ixp³2­OkêAK졤V%$, LÄZpXÕLT‚,!qZ¦Š‰ [Bœ°öp CxÕ¤*f±?ú[VøwÂ)^ê$$œBJ\vÈiYEdЋ‡¶PSˆ"“÷úÄØó7´‚.rA +¬å VˆA/f–)Èâ. ;Å‚däó“™åd7+e^PÙ…µ€Bhýæ°!!Àar1…„ÌN¨EB0ô™ µ BÀ0ÚÞÿb6,[ÐÅ:pYÌT ]h!fáψê0 »8‚?;Ó@¡!Ø‚+¸[èCOa}–tXV  '´°½8‚ x*ØÂcX¨žù<Yêw,iÞïH[8C—e•ÁTeLRLA)Ö¡ nCè°¤*¨*·›ÚídXÜ&pˆcØn–4­f)1‰E¬–©Rƒ)„é ­- KXûöG¿Å²F³VûÚhiwTp !7Êki‚FWðĕ DPâÆiiÇIß” جcbP'ì¢ eƒ?œp ±Ä@¼àÈr„?æó ïë^³HòÞ"9ÏOØÅ9ý1MâÐÿ xµa h…™Š 1ðÇ_ÃòiŸ‹ü [hg/BÐ(´²°s”]¸…0„Å š~¢^}–§›}êU·µ?”Ù¡0(-üQ…/øã°bIz.uQë±äüèΦc´¹{–•>ضé„ýo“5†c-÷BŒî=´pÞíö4|c²’5ªÓújXJ*äôdMëÇÕ„ëXÈ WkýA ‰Û½çh +:íwbö¹€¬#óY)òja šõ+sÏò„3  ‘t,-˜"䢸aÉB÷ÕòæÌYä}~Ÿ€‹Zs¡ cñB×ûz S»0ç°è?,lÑH†Z€‡ÿEѧC!€ ÛÕQðwð\"P«v¢¦C« a|ÔI@¯ ¶KgÁþ€ZT0 ˜u®àRÀGbp¶gþ`dJGæ×xbC’Çp“°R’àBQÖyUz§n*Tzï–z{ÐTM¥TfUdq…'Fp)`pÚÆm’€c¶·…]˜VºçV½gqÂGFÒ½  qØ `ÔBQPMJd‡ÅW-´Mçf,p —tg°H…Ø þ‚¯`lŠVv–r×~lÖ}8æ§C/ˆcñE8äGôäBO ¾µwuÌuvx–qþ0¯Õÿw¶`:DFd eGP «Ôˆ}]ôL'8Н( åZ& D 1'8]Ðe¸ƒU;&ôÆ@Hy˜UR˜0SÍÅC䦄f6F /†z)ÀV¶’bø6ö¦…1VR,ÆmW%´'†øHU p)–»7c2föc{dÐÇs±$  U¨Ø¬Nud‘ ©E-TdÀCP@+ KgxEp¤Eµ XþЭð" º°lQÐ ‰7Q”¸O’ØJé‘.dYÀGÀ dx! “©õ |Eº !ÀL f0À ´Ä½pI©øÿ½hþp U×B¬ ap„›õ€aA HdgP‡À†KÙ”O©f&è9W-ð°àO¬ . "ðçg”Ëv‹g64i“Õø ªWS?H “‡b–€R¬äBäøy‹yT –Ta1T,eT9å`–ö(¤y_µ\S²GTþ%†U¥š3¦˜6u†Ý¨‘kÕVlè[á•RS€6$x5S0° ¹ (IœÆ‰’¶Z´va1¸ ®`ŒÇ¹Rb1T/ ·` g`jaá²^k&Žg·Omèwˆ€½0V :T²0 ½0 ² Xx° µ0÷.õYZ0N¨C¨ ¹  gC]  ¨´‘¶”‡þ½@ 3—^UYcôŸ: ”)YP ¹0U'K/Õ”7WŸ÷™Ÿãyj³@ çWžç‰˜BX ‚L*` IB·—oTå8"”.UCÒÖ£f°rr€˜h2¾äLç O¥Ð"m ò„i@_ Wº£Ò¤YúDì–B¬÷ADª…ò8-ð˜B¢‰É²”x#Í÷B½ÎàÏ4"pèÂMÇ D¬Oç™o>ç¾c&‹@TÐC8¸Ïêɧ@&ü-Ð2ƒO™÷Þ(€«„1Î@C ĸã@n8âŠ#d=öÚKN߀ xBXÇÏRDÒð• AÎ-ïPN7Í[€@êçûñH´AhÀw!P \ )²6„€ ÙVð„h¤CòÀ.˜AlÐe'2˜”RDH»ˆž kd‹rУ;"BaÌaŽsÄÃRù+ˆÿjxCK1dÓp‘…rn`þP 7Eä±î5+ðÇ’…ºQl@Œ¡Ç8h%&± KÄŒb~´e†vS^ÌZøÂ$‚Ç»SóÚWxpo4Ñá9xèà ц8LÈÒÇ„Ž±£ÕäGI’¸GRµ“ÇbÁŒ1œ1!ÎÀäÙD©¶Y0zü¡…}ÅB¥¬àEÜít}sžû¢ 2$+ô’9Ì øÃ %B\0L‡Ä‚΄foÀ wˆ !QÀGÈzùKÔáòе£‡¸XK„Tp ¼8F4 òÌ6 OT‡@¸)`&¯ [šü¦ÿ)á —çHúºÓ‚™Ël¦ù®'Ðí½‹”ì Üà*IÑ\² Í`GÀÀŽw‚’”ý)H0+äc”± É.  _€þ˜B€XŽp¥-½§·¾‰icF°GôÒYÌtHi 3(@ÊáY%£ˆxR¤*•© Á*f€(ÀÃZÚÆ@´ÊU¯iš ðFÇ2¼ÀÄ:Õ‰£æ1˜!©IQ*`hc˜1¢×“R†0üÑ‚„u¬[íêW@VÉZË ÞPÇɤá.¢Ö5˜/+À;¶8m©ôá7“᳌Ãq¦œ U©ÿ ĪKmjiÅ:Öþ ¶-ˆO*TøU”’%ÈÞ¡øC QfE¤û’)ð…/Æ#.Î1cHQ æàÆ3‚aSpl·»R܆:èQu8ŽÕ6ŠÁÛøzƒÏ †”Æ€zøClU.ÔQsœªá¯œ <ãþHÇ+ÊDZ8ÂÞ×4å1 „ј‡=ºq¼à¾ùõ&bÝëf÷Æ <Œ1±ƒ´»váË8ªP »èÁžð¥€œá6á¢è51Šõ»¡õ¶×¡Œ\‡=jabi|#ÌP-Cp x´C H.ÜÁðX`À>°üß ÄÿÇá²—ÁŒ`‚È—¾Æ=nübÃg f§!àø3Hˆ™>úЈ64¡ó¬ç«%ÚÐvH¤;b„@ðΣ7ÍéNϤҗÎ4£}*O«fÒ AµD^ÁêV¿bTPG<ÐASÛúÖ¸¦ ¬i­Rc­À¶°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØÎ6±IÁíns[Ûà·¸ÇMîr›ûÜèN·º×Íîv»ÛÛÞv·¼çMïl÷¢õÎ7ºï­ï~ûûß׆w·ŸÍ€üàÖæ7Âɽ ˆ©ãè¦Bî £Év2ì\ÛþP°Ã0) û×ÿ¶«°zècدˆ : €ì†ûãáÁÖ8Ç=^s‡CØ:ï8²þmgœâHOº±®ôl£ 4ÀÂ=ÈÐô¦ëÂG60ÎA(ȃê 9ÉMŽl´  þPùµ§†3¼<Ø­ðGh# ûéQŸ:°·Þõ¯ßêR§zøîuÁ›è¤ ¸?ªÎøƒ¡åÝ8¾ ],Cï¨;¬ ìVDãè0°‡PÞò˜Ÿx±A/úÞô¨üå3olÖ¾ôÓŽ†1 nC06Ìay£Àîýïƒß.¤ã†ÂöF/¦‘ŽiÈÙEÐF=¾¡ŒÉÛ­¯ÿ3€-xÍDö €ÁŽxãÁ–}ê;Pþxœ?ýȆ‚8¾uc‡`‚÷ ÜÐaÏÅlÖ¥vàlâlÒG}Ö§lYðvÀÆamº×ÿ€lÜ0 Æ–lxlÜ6C@ð¤ÀþÀþÀsàÐ; ×eÀVp9àr€€k0ƒþ„w„éæ ÆÀTàÞ ò@ðD  ³ lË Ð«â&Q8…øWl\è^x}”†Txlex†Ó¶îÐzÆ&åà!À Àlc &@çp…@‡vˆ‡ÂÆtà ãð"À ²€lÜÿ` - Nˆl Ø Ø¹  - HlÊ  3ðÎ@ `(…k˜‰›Ø‰Çfã0^ÐÅVÏÅ \@ò@€þ€ ú zË–€~ãwˆ‰¸ˆ˜ll4à®@È€†É‡¢'‹R@‹¶(lî Å Ôx‹ÆF ƒÐ)ðC0-ƒ>Øþ ƒkà9à‚‹×|a>„€ƒ<H¸å&‹HlÎð„»lg ±— °d'èR l¸l é9Ê6‘9mİ %À{ňï@lµð É÷‘!l†è Zˆ‰ÉplÉøÀ ÞWl•x‰¸ Oÿ Á6OlQ@ñg‘Àv“9©l´@НˆlIrÛ ‹…‹ó€yˆ€i÷‹ Œ* lÀ$¸”Ü@3y˶‘¹”JДO©ldÙf‰–ñxxCСàm.xr°ô˜AØ`—uàòx]Fx]'píh„ü˜˜ÙFÈ7xOˆÀæñàâ𠲸ÀÖîÐñ™Á¦ |ñ ¦™œIyž l é¢l¤Im¼ ÌwlâÐz’hzU0 ê°ó ÉG›þ{’ÀxlÄá{7“ÄV“Áø½põ ðçþ)"ð{§ÉœÎ Ƕíp}Iyl²ÿÂw‹ gÄTÉ|Êi•–ŒÈvŒÀ¦C]l_p’ÈöšÌ7žå©lú lüÙÕø)PðV—w™—!×5ÉzÙ=x]ª˜zmɈݱ lÿ· ·ð «À™Åà åÀ Ù¡ËV¢'š¢ÌÆ¢(m¼jÇ{·l]’:y ¼ˆ7Ú|øœ3ٞƖŒGl2‰lÕB‚ð lE€®Ð1à5PlÑ ¢Ä¥SjlH¡þ@žÅ6‚à v0 ï@ËfR:ÙMÚ¿€•ÃiŒõPŸpŸÉ6£5J¦fÚ§4l€ZšÃF q9—݆ xÿéŽ=(9@þ@‰|„|—6°©ˆy¡žmÝЈDPO¨¥À î fà<'êK@{¦zl® «²Ê¡ùª±:«ÍÖ ã@-Ð&À{ìp0Ð è:IÐ3?*Çš¬ ˆ’EZ§Æöˆ+÷€œÃ Ë@¥êŒX!0ç xËÀ 4Fàº*låz®éºlálÝ@ŠÁ åP’ v!×"ØhlVÀ EðÈ û®10®îy‰Æ&-ÀúÐ,lÅÐ 2Üp ȬÂJ¬{ׯÿ*lùZˆÁ:¬Å:x&†·mḂåxŽvÿÙ¨90¡(0¡”ʃ78Ø;Àrð©FmFp Ó ¥ sñ :tàõ‘cÀ3@yµZlTkµX«µÊÖµzøµÍÖú£sè ýµ Ìwèà ÒP Ѫ¶ôÀ¶¸õ`ëPû¤[ª}Þ újlEç ÇŒ«@`þ 9…¿ eèðs´:l‹[û¸Év¯Àv¦sò€¸(rlé«`lJ÷ð 4¥†‹¸tz•Ȇšu0  ¢ ÎHlf{]? º¢lž›™`ú»ºCŽ)¸‚6› îè=@„8سñX¡–Ê8x´Ú»½ù&cÀlÞÿ[nÇ` Ü[¾ë†x曾êËxá»lí«mPÀp›³¾önè{¿ú»¿Ýû½îë¿ÑV <Àµpë é ‡üÛÀЖ¿Á<ÁLÁ\Áê ¦¼ÁÜÁüÁ Â"<Â$\Â&|Â(œÂ*¼Â,ÜÂ.üÂ0Ã2<Ã4\Ã6|Ã8œÃ:¼Ã<ÜÃ>üÃ@ÄB<ÄD\ÄF|ÄHœÄJ¼ÄLÜÄNüÄPÅR<ÅT\ÅV|ÅXœÅZ¼Å\ÜÅ^üÅ`Æb<Æd\Æf|ÆhœÆj¼ÆlÜÆnüÆpÇr<Çt\Çv|ÇxœÇz¼Ç|ÜÇ~üǀȂ<È„\Ȇ|ȈœÈŠÿ¼ÈŒÜÈŽüÈÉ’<É”\É–|ɘœÉš¼ÉœÜÉžüɠʢ<ʤ\ʦ|ʨœÊª¼Ê¬ÜÊ®üʰ˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀÌÂ<ÌÄ\ÌÆ|ÌÈœÌʼÌÌÜÌÎüÌÐÍÒ<ÍÔ\ÍÖ|ÍØœÍÚ¼ÍÜÜÍÞüÍàÎâ<Îä\Îæ|ÎèœÎê¼ÎìÜÎîüÎðÏò<Ïô\Ïö|ÏøœÏú¼ÏüÜÏþüÏÐ=Ð]Ð}ÐÐ ½Ð ÝÐýÐÑ=Ñ]Ñ}ÑѽÑÝÑýÑ Ò"=Ò$]Ò&}Ò(Ò*½Ò,ÝÒ.ýÒ0Ó2=Ó4ÿ]Ó6}Ó8Ó:½Ó<ÝÓ>ýÓ@ÔB=ÔD]ÔF}ÔHÔJ½ÔLÝÔNýÔPÕR=ÕT]ÕV}ÕXÕZ½Õ\ÝÕ^ýÕ`Öb=Öd]Öf}ÖhÖj½ÖlÝÖnýÖp×r=×t]×v}×x×z½×|Ý×~ý׀؂=Ø„]؆}؈؊½ØŒÝØŽýØÙ’=Ù”]Ù–}Ù˜Ùš½ÙœÝÙžýÙ Ú¢=Ú¤]Ú¦}Ú¨Úª½Ú¬ÝÚ®ýÚ°Û²=Û´]Û¶}Û¸Ûº½Û¼ÝÛ¾ýÛÀÜÂ=ÜÄÇ+ ³  ®Ð»ÅÉ"  bP/°ÍÍÉUp!PÝžü YÀ ¶CPUªÝ˜\½àV.Ð ] Þ˜ ¼ð|Ñʡޖ³Pp«@»ò]ÉDÀ FPUp îß”ÜT0 ¹p:DÒ!ùþ,N@»ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜÈQc€ CŠI²¤É“(Sª\ɲeÉŽ0cÊœI³¦Í›8sê”è²§ÏŸ@ƒ YñV°H“4ª´©Ó§P-úóWq¨Õ«X³®,z4ªNZçü¥;s³É¯6'˜£·±zðd „á†@-ò–($6ÕP¦ÑËWðŒ:çŒ(+–¬@·på.;v ä¸5§VÕʹ³g \ÑæüõDÄ{]D«žH‹[…»Èµ0Ï‹ºvñ*Y¸`¿•dCx`SDy¡´iÔcϮݼôéÔ¤Ó¶=S3ÅÏàËÿ1†`mĺ pFëX:wOÖA!XæYs`þzV@ {÷ð!t_~ì×ßzí½wÖAêÇ_EÏ£8Ãh#Ž1ä9õÄ Qh!†YÎ<ê °Í-Ñ Í ½ =Ý“¢AÛ„!Ð+É´2ðÈã Y°Ë:ï cÁ@ÿ)(ÀA¹àdñBÈÃ].ÓÜV—þ$áÀ©¨£< ´b‹/2DEq­£…D å–]4Í/Õy§@\.dCs´‘ƒ:ø³†?:ÈáäÐF_'¤™ þ´Ñ€ ôà¨?›"4Þ¨¤r7ÂHЄ?ê9Xÿ°‚1¬tŒ*ÔW¨£¯ÆºBBºòê+“ÁÊJ쮽þ:Ñ윉8ãPP@2»Ä ¬@N+!V{m¶15Ð6áT À4µ&4Í0 ÁªB9îØ£³HCJp 1Ò„`2| «²ùîÛ¯B ˆ³ÄWd‚?H”a…ñx)K> 6Dæ_fÚ«fºë¶«Ð›‰àèøCŒ³ G+ÀÄ_œñ@ì8s´:Òl1Æ Ù`‡;ðТŒfºƒ?•öà ‰R%ÀT(dº©“î°´Ô•êõ× =4± -Óê0‰ÑŒÏÌ"€:L´Å9ï A3h74wÝwçÿÍÐÞvWôË4 LØîîôÊ2!žx¹)nƒ+¾Å$T‚?d ÌÕ‹æ½²„S„]àO1“~ úè ¹Â'Ä ÍP×4½\A]ò˜C®Çezž¦Š“ÏRùB( dû4"p€^Cƒn; ¸ë=áL_=×±aG¥€4môpÂÓœ†O>LÝW¨}1À€Óˆ öýø£Qþ€˜]«àÞAptcb…ÀÚ‘'& Ò˜J.²Àú牠?&8 Z¤ßÈЄ$¯þ÷X`”ȇœÈYk»HD]Ðj_°‘ÛÙ­fŒQà{Ëhk܉|ö‰Ÿ1Wi©l!Ø¿poùsµy›¹é}þ° ñ@ÏÒÙ~} kyËÙœþhØ©¡øø¯Öî@‹ ¢‰mÑP…­«p ϰ $Jk)Ú*Jm¯)kâp ­ÖÙþy º™‡:š|òÙÀ™”(k½x%iœ¯Æ.¸¤­Vèà þP²6£²f¥Xºá°v´æ‡Dw ׳ð4ptù˜ ¥Z€ëIk»õðžŸú9¦®€ç 1:k¼à§+ª ¨øjÿ© ¯v‚> ¤ ¤Þ§›ÆÀ ©¥\ kÚ‡P ¦®V&új Zk¢kÅà åÀ ¯vª'šm^êjÐàR`îs2Z£±§«Ð&-ÀúÐ,€{ìpåx¶“0é0¤âP¬ÇꩯV§±fˆ+÷¥®ÆIYªˆI3p€· Ì@!`^à~º ®âJ®µÖ ã@-Ð&ðjÝÀް6žb×"Î(˜¬P/€ â°­DÇ–tª¤µæ«À*¬­V Ý 1À VIkòJ¯öªwåP– x­–¯}8¯õz¯ û±ˆ§x¤Ðx8種v‚ɺ¬ÍÊ‚Lÿs抮êÊ—ËP¯õê›Hºˆî:® •fØC ¯®&²¯f´¯&êK@ŠÙjNûª×«­ö ñ Dt¶¦µ»ZmX0H`›¾ð`Ë€|g€Þ Åà¬iKk;‹ëPö°倔H}Öç É ¯_ ç ÇP€«`aþ <)y¿°ö€×jb›¸õ°¸+k>:HCÚjÍ(küš¦b¹ ³¦‚qßðqUJ¸†»°}KkeÛ`ÊÐ!Ê Œš{HCêrò€ÌÈz›Û»kr½[k2Gs6÷²úsmû¶qk³ð?÷¹“› ‡¤…Þp·y»·`¹˜ÿûj¿ðà˸¿kã[¾àõPµcÀ•¸ä›šX{¿ 'ckú+mÇ` øÀöænÌ&À|ÀŒ{û‹kýÛlPÀpñ° \ÁÙFÀ¤`Á¼ÁXÛÀ·æÁ½V "<µ` Y°ò¦ÈÁ, mÜÂ0Œk‡4Ã4\Ã6|Ã8œÃ:¼Ã<ÜÃ>üÃ@ÄB<ÄD\ÄF|ÄHœÄJ¼ÄLÜÄNüÄPÅR<ÅT\ÅV|ÅXœÅZ¼Å\ÜÅ^üÅ`Æb<Æd\Æf|ÆhœÆj¼ÆlÜÆnüÆpÇr<Çt\Çv|ÇxœÇz¼Ç|ÜÇ~üǀȂ<È„\Ȇ|ȈœÈŠÿ¼ÈŒÜÈŽüÈÉ’<É”\É–|ɘœÉš¼ÉœÜÉžüɠʢ<ʤ\ʦ|ʨœÊª¼Ê¬ÜÊ®üʰ˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀÌÂ<ÌÄ\ÌÆ|ÌÈœÌʼÌÌÜÌÎüÌÐÍÒ<ÍÔ\ÍÖ|ÍØœÍÚ¼ÍÜÜÍÞüÍàÎâ<Îä\Îæ|ÎèœÎê¼ÎìÜÎîüÎðÏò<Ïô\Ïö|ÏøœÏú¼ÏüÜÏþüÏÐ=Ð]Ð}ÐÐ ½Ð ÝÐýÐÑ=Ñ]Ñ}ÑѽÑÝÑýÑ Ò"=Ò$]Ò&}Ò(Ò*½Ò,ÝÒ.ýÒ0Ó2=Ó4ÿ]Ó6}Ó8Ó:½Ó<ÝÓ>ýÓ@ÔB=ÔD]ÔF}ÔHÔJ½ÔLÝÔNýÔPÕR=ÕT]ÕV}ÕXÕZ½Õ\ÝÕ^ýÕ`Öb=Öd]Öf}ÖhÖj½ÖlÝÖnýÖp×r=×t]×v}×x×z½×|Ý×~ý׀؂=Ø„]؆}؈؊½ØŒÝØŽýØÙ’=Ù”]Ù–}Ù˜Ùš½ÙœÝÙžýÙ Ú¢=Ú¤]Ú¦}Ú¨Úª½Ú¬ÝÚ®ýÚ°Û²=Û´]Û¶}Û¸Ûº½Û¼ÝÛ¾ýÛÀÜÂ=ÜÄ]ÜÆ}ÜÈ}ÖOÐ ÌÍÜ[ÜÊ&0ÝJ€ /ÝÉìj%ð T€ÝÙ8ÝjVÐ !àÝÇìj3 uGÞÆìje°® ÞÅÜjO` ÄùÞð=ÌÀ´Pµö}ßÂ̪à›>!ù$þ,^@«ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£ÇˆI²¤É“(Sª\i¤Ë—0cÊœI³¦Í›8s*dɳ§ÏŸ"u ñV0¢H“*]*ð•3ŒF™:Jµ*U©X B™F/ßÌ&O²r¤uÎ_º3 '˜£'†?µÈ[¢˜¿»4níZðŒ:çŒ($k­@ ÄêÁ“µðÙˆ3^xEÜ=w´˜ñWF Ý( :,v !؆QØYLíõB«°c§›UI1^ië6øë‰ˆ)öº0¤Å­·på*Y¸`Ây3ÚÆM°Œ¿)"޼PØûwp»Èµÿ0Ï wßÀ… ?¾¼Â*÷¶\!F³9o* ›¡è†¤]äE.T`H²%˜ FÎÐrL:î<±Õ=£PƒF(††õ¹)Î0ÚˆcÌyAN=ñC@#–x¢@VìwÔ@ÛÜ :Ñl Ð ÒÐÓ17"´MM%#ÐÊÀ#7,dÁ.ë¼3Œq¨!“NBéÐ3Â,d8Y‡œþ$áÐ td’nêÈ£ HÐ:ZH¦Ècž¹LCÐ4¿ ´gŸª8¼d†4ÓÌ E.ñ€¦"‹.6õг€SVy¥@TãV8*Ͱ@sD¥˜‹®ºš^ /,Üð×jP¼YŒ°Â¨6Æ X{í˜]ÚÈër ¢F5ÙÂ9Þ"p'|‹ K$"»ä‚ ÎX×@ˆð €£=ó]ýqÁ,i #,¡@RˆÁ„…/´`E‡püJü Û¢‘uÈÃB°¡@ÿr¸9‚,!EðÇ‹Ös:#rle ²E9èQ ,0æ0Ç9â%d° "»¨Z|E ¡Á:|$¼ãø# IœÂšüÆ#f!Z?® ,h®ŒgˆÒRÔ4@¢qZB€¨äQ€ªÖvØÃ6ÅÈ€G”pÅsdq‹XòAÆ)Vq *å ôÀL ‚r C$HËÙdÄ´HŸÆ fŒ!– Á¥E„9± å(à-¸.ЀQ2`…? €w4ˆèH'Ó)$dH.6˜Ã À€?LpbÄœè,£7¢“4ÝåžG@ŽXáÿ §8–M„Ĭôp¤R‹yêRêQ”<éÙ§ˆó ßÐ…ÔR)f:SÐlJ4‡1 ש“eßyÎ@¡çB^j`,cát)L_SËž’„A¹H3Ø‘0°c2Á êDÜùLÀ ù˜€D´xÍà€?f € #šA¬êUGɹ'’ó ÓÆŒ`&„¥Á@:6… åøÓ1’Q‚Ä YRªêz×¼*äá(Á&à;hi£>à £ dxˆŽ·Æu®n2«Bœ U© ÚØ¦½„ V±ŒÏ8L@xÿüɱ…Wbë»]̶¶·=î¡… ÄIH¥´ÊU¯‚U4½šÌ^ûúWR!c±‹ ›@HX¼ÞVz›Hw ;ǼÙB:0@ƒy¨I è… O} Ô¾¼C,ð‡ÂÔ $S¸§?ŒSC\œcÇ@£ÌÁg¬à00‚ë¨zÔCã-œ$zl£¹EÈ ¼AŽgc`c@=ü¡ ßY ê¨Ç9 ãEÁ¦xÅ-NÈì° ¤h‘\Èç1 „ј‡=º!Œ¸Ä'ÖpÀÎjßÓ80=àaŒœdÇkdâQ8¢YÌ÷sbÈÌ,Œÿ˜ÑŒ48 š7øÁšH)ôâϘTN…*˜ÜÞÃø‹;~Á‚rÇâèÀÍ•àí0Ìc æ>Æ=c`o”«<ܯX‡?ÐsïÂfêxÅ·]€ {Äç~º?¢>õª_ÝÜúîÄR‚?¢2`Æ]€QûCÞÎB=: ûc5¸‹>Øá‹x{„wÙ…·ïq—x(cˆÁu¼]wÐÝî‚üÝÝ÷ÈÝÛ"˜Å_Êñyüå }¸§†3¬\ô¡¯dðuÌ¢Ü!hì[W¸ç>º¹MЂ*øƒèõ&½éÁÝ dQ0‚¹‡Q`ádð60ÎA(È#úåf¾ó¡/}ê[ûã&Eÿ'R0ˆR„ÂìX†7ˆÐ„uÐÂíi²üÜyß‚iCö%È»X …wØÂÛ¼· ¿Ðm×÷%@Û  ‰·xÐx@ö‡ØH€ð—òçm½ÐUðQ`ž—q¨GpÑ  Ë ïPì`Ä æv‚)¸‚î&ƒ*èr—§gn&Ò ä  0àmd`ö ÄÐÞÖƒ?„Ðé@Eàæ ½0 é0 2`nE  õð Ê@‚äæ "صÀ Þ&3à@ÞöÀÀñ` /ðm6Hƒfh¨†è6ä éöˆ·sa _ê`À†Þ6†Þ&…Th…覃àÿ¶15h ó€}¿À àÆ Ã@nÑ ‰”h‰˜Hn¤0Càp/Wàm®nG$ømÒð ß–wQàm nÚÐ àv×­€ ¨{‹²n¹øm7犗'þЋçÆïs²ÈàmFrÝp ^X‚ ò@ðD  ¯÷mË 1øáˆ‡ìæà(Žçˆç&åà!À Ààmc ´uåHöˆàöy‰8/ ÜÀ‡åÆ ÆÐRàÛ(n†(†dع  -ðˆ×Ê  3ðÎ@ r¨Žðx‘YWçæ ñ ¾ éF èv¸ 8˜n„˜ˆaÿˆˆà ‰ inòØ4à®ðÈp…è¶î ‚úÇ \@ònîƒâ¦”L©_N •å6 #Ð ±wþ°7'ò—GŒ³øFB‰ÿ÷mÇøm¼Ø- ËŒŒçxjiŒºhúu–—>4n\Ð,À Éðo±“ÆÀT‘Ü8png t— °ºÇ‰’o“ypAYnâ XðâV Ï„¤išßF;‰Ž™ å6”HàmÌ‘á6‘:‰ âàßæOàmQ@rØ™ßÆ›¾‰n/P^ Y€n0p8xsó€ù8ˆ¿‡“‡X‘Þ›ãÔˆ;˜þÿÀ 40Ùø’ÛÐvâ©Û ^à詞þÀžî Ÿä à•üæ{é{1psFp ­–WŒwòùP . —}9xõðþ@ƒ©x¨—*nqév: s÷ž.É ïð *n\Ð P ¯§OwµÙ΀›‘ùnÚpJwåèmN. ßw~×5ê7 9 —6Š‹I*‡GêmCz£Oo¡Inâ†PÓ ë0•W¥Þv¥­¹ºY‘ãö. }2úmeº†½põ˜àK'+è qˆ£áöo§yŠn¹° èÆ Àè—VðX€Lئ;ÿ™“fZnAyE]àm_À𿯠âÀ„´(„Qyn˜ª©lÙZ)Š% Ÿû–E –déFê s·—ºGE ëÀ„Nú h5ÀÆ"àÂÈà‹ú êª°Ú‰xhéh¢˜8 ±ÐéÏ„ k:£ô Õúm”¸ ·ð «Šå®ò¦® ¹ƒ¢y ÞÖ¦Ùþ.y _ ¯Mh©àšŒ:nCy¶Ù­`/Þö ÚE€¶§x50nì*n k{év Þ€n ‹ŒóÙ³ðƒ‰nPÕ Û« žâZ“Ú•ê©á|“X‰Þæ èJn¼ÿð²â*³@³å6Š¥Èo/ .ثȡ;Y ±š¡Þ¶©!‚砻؋7Ç¢ŽpçP¬7š««|Þ€´hç+`Ñn\0­ÕšQ0”xØ…Þ pëmÐàR`î€u1®ð·'-ÀúÐ5'šìOݰ‰Ò£3_Z¸0p¸I¦Žjn ¹PpkS‰§‰I3pØ· Ì@!`^ ‡zëmž º¢;›±1`ñð“Ð " nü©±<'à@•ãf¬P/€ 9'}wœk²:In~ ¸‚ëmÅÐ 2Üp æÖ ã@²gÒW5ÿ°£àw»¹ËÛ۽߾ñ0¾á&~äG çwvÎÐ ½ºµ`´ï™´`¬KªXà€X€X3P þ„âp 3PC¢µà&À ¿ÞcSÐd­ß†»ßv¶@­ÖZ‹ÝÀ‡DPû¶{»ºð ñ W”Šy»®,pÿ{Oú+nâà *¶ Lxèà ÒP _ÊÃôàɸõ`ëPÌ›°á–…õà ÉP¾ãVàpÑp ¹ 1æl·†¿°ö€Rçm|ëÅõÆen2 ð°u *•Àk›1é—<×â¹ ä¦\qßÐtÞ†ÅZÌÅOln7|±ÿ ÊÀ"Ê€”ãF¯VyTW„˜IÇß&É÷DÉU'—,Šâ7vewv3à & ÞKÁ%ÐúË¿³Z‹Þù(yOKxþ0ÅC›ÒPòp ¼¿7JËF»Ê±*µÀ:¾SùÁh;Â:W"ÓÐ)*<Í¡'c nÖýÓ@ÔB=ÔD]ÔF}ÔHÔJ½ÔLÝÔNýÔPÕR=ÕT]ÕV}ÕXÕZ½Õ\ÝÕ^ýÕ`Öb=Öd]Öf}ÖhÖj½ÖlÝÖnýÖp×r=×t]×v}×x×z½×|Ý×~ý׀؂=Ø„]؆}؈؊½ØŒÝØŽýØÙ’=Ù”]Ù–}Ù˜Ùš½ÙœÝÙžýÙ Ú¢=Ú¤]Ú¦}Ú¨Úª½Ú¬ÝÚ®ýÚ°Û²=Û´]Û¶}Û¸Ûº½Û¼ÝÛ¾ýÛÀÜÂ=ÜÄ]ÜÆ}ÜÈÜʽÜÌÝÜÎýÜÐÝÒ=ÝÔ]ÝÖ}ÝØÝÚ½ÝÜÝÝÞÿýÝàÞâ=Þä]Þæ}ÞèÞê½ÞìÝÞîýÞðßò=ßô]ßö}ßøßú½ßüÝßþýßà>à^à~àžà ¾à Þàþàá>á^á~ážá¾áÞáþá â">â$^â&~â(žâ*¾â,Þâ.þâ0ã2>ã4^ã6~ã8žã:¾ã<Þã>þã@äB>äD^äF~äHžäJ¾äLÞäNþäPåR>åT^åV~åXžåZ¾å\Þå^þå`æb>æd^æf~æhžæj¾ælÞænþæpçr>çt^çv~çxžçz¾ç|Þç~þç€è‚>è„^è†~èˆvžèоèŒÞèkÝLÀ ¸ð NÐŽžÛG HT  zté·ÍcŸDÀ ùê¶=²ð.@Y€ê·ªÀ ¼È°>ÛD@ LD lrë³Îø ¾ì²Ý­pR  ygì±ýbp ¶pG€á!ùþ,^@ÿ;H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜh”Ç9ŠI²¤É“(Sª\ɲ¥Ë—0A‚„I³¦Í›8sFìUL§ÏŸ@+Êü±V4Œ<ƒ*]Êtd•mõô­¤R¥©Æ]èü©{Õ°ºzøS"0̼) ù[CãÓ¨_­ó‡ŠB¬Z¹ tÌ^<\ ñnÈ×/à„; I‘â)WþZ DæÏJB£“-CHµ¡w?;mµ´iˆSÀœ‘zÚô°*4°Ü#ÃP—7°Ä’5‹V¡‰UüµÍ˜z5ÁVþ²ÐˆbDáëØ³;GŠ<Ú ŸËÆ>½úuÄR ÿ*ʱ+tá:¼HGÏ2BÌ 5_$M‘þBû­aFÓµLÝ»*ì¸'P+G%´_ÿIt U”k ‰cL7ä(ƒ@d˜c<Ä´ „Z(Pìõ47½L“Î42(T„6õ|£Œ‰yc†@µ0# ÎÄ38Dô0ìÄcÌ -˜ >éP4Æ,…8_à¦[þHáРd#Ž:v€¢Š,2ô Aì„¡`”!̃Ý/ÜÄÍ0AÙA›oƉ)C !“+Úl“D¿ÈcY†vˆãQ.H“L êi$’ÈW‰ôÐØ“?™D:îè“N:±ìØc§ }ꨥ¾€Î ÿMªŠJj~úÉC…zD(3 AËÀ¢P4ºòª`±/é „ ‰SŽ !0Œ@cHaçüÚ³ÐJKPR'Žó‚ÜÈ¢7Æ´ …?šôe9 ”‹6-ˆ0Å )£Í /8CL’È9o½÷6´‚;°"dÂ8Sxa¥?¸èÓ`C\÷n¼bŠK®¹ ) þ¸¢Ž?È´ÈÐÁ7Ö%+\!AîXʨ,Ë.'4Êü©M¶HceÕ^›í¢0t3LùîÛï¿•nv¸òÒk/¾á7ðÕ÷FPñ8áÅ:&w€®-Ù9ÐÐtM.¬Ó[QV¤¶JGÈ1ïÿTË3îÝ÷@T‹)l¹$“ÈHÄL»]&.â´A0M …“\BžàHrQ¡zzqŽz$IN  :v(Jõ¯ / ¡ ÿ)¥^ˆãB YB;Z´ºÜT†…Xˆe(C…äþè‚@¾0¸"Q *‹†^¶#"1ŒcDL ¨÷@uàgОe<BâÈˈ‡²r¸C"ÉR)\kxÃú½OHB,¤BÎÖwèÉ÷ÓO©Ò¦UÜâ«xd&I‘hp2%Dˆ8n1¢¾µÀa¸Ü-F¸-Rv  ]ì@ i¦ƒ€ìŽƒá@¦Á ü¢–):\Ñø£ñ$B„IÌ"†c8 ÁÒZ¦Éœ±t`ï gò¡>^ú2LULHÞBP-v€‹e|&%Ý$_hò ¼P§@ðÔÎw„O~ªž6bÿ¨S¦²«ÄÑÁË™dA 7f¤ ‡$ˆCQƒÃåèåC#I•(“ Ðp‡ÌàŽÃè“ BiIDÐ.è£,ˆ;Ž4:ÍÀIèÀ ÒÁJqÌ´¦ßÒT8 ‚®@ẔÎf®&,$!38v–Á „À^HJ U©*¤ã A Z`‚tji¢n: pÈÌ V`E^€ q KU8i©–º¦)F7dn/!`+Y¥SŽ;9ë·Â:Ö²v},xÄCŠòûùÏ’sCè,(0¡GˆÇÜÍh—왎´¤“Kh†TZ"µÈ´¦kÇ,¬CéHؤG]’G“úÔ €ªWÍêV»úհ޵¬gMëZÛúָε®wÍë^ûú×À¶°‡Mìbûظ€²—Íìf;ûÙÐŽ¶´£ìj[ûÚØÎ¶¶·Íín{ûÛàÖõ´ÇMîr—;ÜèNw®o u»ûÝðŽ·¼»ÍîX›ûÞø¾÷¼÷Íj(l8ÚnÂøMl_¤ÃìÈ…b¹ë~C™£ªµ %ÈšÓÄ€°ýM€³ú #;‡dM‹sø#gÿX5ˆQxÈbÖ%?yÊU½ò–¿|ÖWÇ=ÜA Uo kÙÅ îg¨š ô€3žìZ˜`-ùX.†.h\·ç°ÇZÞ%``,ªþ;”Îôž[}š=ϜрtU+€G|]oXçûîx6Áù­„,ˆÁã{|«¡ ƒ !­ˆu&Àø ؈觸f½€ °PãÁîûßY]LAGx¬a¹)Ø£ ªÞ9Z`„xxaô¥?}êWßú×Ǻ ÷ØÂd U#c+¨:ßð°=镟@4xÁø<= @‚;`¡êÊO# º=²°€LÃ^»ÿÄ.€ä/¿ùåŸÀõ³Ot¿í¸Å:ž`$„îí¶{Þ÷wa;ƒÇ*O°PÀykkÿ€î0p¹–€xmTx±à rªæä°bÀ@ªFh (V€óª¶ · è  k/ ôРƀ‚¯¶ ÷'¯ >§ ð ÞÀªf»°ï0 °j¸€°>„BHk0¬PkE <§8ekJà˜‡ƒª¶ƒ)¸‚-ø‚³¬¶Z kÏ Pò`{¹0 ¬6 ¿kmø†q¨js(kâÀ ­fø ªfè@tÂÐ ÇÇjÐ «ÿötG jà ¬& ·ÀjÛ§jepá7yã7v«Öˆ®f‰«–9‰¸ˆµVæ äÀ ï@ ª¦ Ä`ƒ­Æºˆoþ6`+` U¸jÇ  ²Ö#Nð‹+ kȨŒ(°ã@ » j\€ °äx Ôh¬Vw) ¼$kÓ0 €þ€‹­†:ȃ0 Ò@   jÆ !`Êp‡ªÖŒÀX÷˜û(kfðù€ PkÀ~D' ùÀ€µÖ…_˜ƒb(Û`Žè8Œ²††ª&þ`ˆþ@ fHyi"O‡e`^¬ÆÎðj °’-ÿù’1k°VÐjb!zlç 9Hª&Šª‰ ç@}«FŠ«–‰ð ÇЉaŠK鈭F•Dw”I™të"«¸0 Å`þ`–Ü Ðïho»X—ãæÃÀjbÐ ð ³ êÀǘ—½æ „™m")kà0ŒSà®ö ËðŒé˜«FŽiŒõX ±Vþ ª– ðÈjò¸‘²EðªvþPªv󠄇©j¥yšµf.€ŠFk` ˜9ò`×È…^˜‚IÛ€™³ ™gx75 "À¶Xk¿0 CwS40 ½pþ Ô)Ö‰Úk+ÿÀ©j9ª^˜90@ e ”Uç•,éñðøð ¨©j`™uôàþ fùužH~¡(ŸSy‰ªÆžîÙvÖõµàVÚ ÁxéPOç™° ¡©jv¢Ô–kÒ°ê Þ¨jDðÝðtTW¢þp¢):•&Z‰7ª„5ªŸ9Ê£3Úk‰9` jîXðÑê kC*EZ™68šôøjWè° JœaH` å)IˆEç`æpñ„J·£_¦kik³@‡³–!¥èQp…S œ#H¥\:´–˜+àW jY@™²V ß0‚-™2ÿ9kˆª¨þ€Œk €?ÉjAytDÉžF€UtúˆYâ³ #¨Ÿªjö&PÂà  šºŒh ¨Z§0ЩŸ*rÙp\Bu®æAð « èpWšz[*¢ÎÚlþw¬«‡c Ì0rkÎ ­¼¶­Û¤Ñ ªö@þ  ”øâJ‚†SZœ›Ù™Ÿ¹¥ dÀ‡Uªj.`f~&ðjÞújýú¯µ Ü@kþZ§Ç î`–´ø€šøª¯}º‘! xЄú®¯V Þ€yzˆzЇ‡²Ó*$k²°ö ºˆù…xˆìÉ‘Àÿª])ª‘XÞ€u·Z•sGt5°þЪ&åP«£˜ª5» 7Û„•¡j](¬J‡ÆŠ¬GÀ™QXƒtù¬Ï­­Ö ì`À7§­Üºk{m 0V°pH6  ¾ à~è°®à@·v;ŽñÚ¥ê( `ö`¯¼•ôx/Ðå`{Çð(X „i++¹¶÷j"° 3€Q )Ú ƒ‡… ê§ÞP“°dð@ à°j‹ëuŽ{±ûêjmû¶q«jÀ  €Ó ‹±v áPè—¥ãp-ð𹨫º•ټϻ ÑKÓ’÷ ÿ9¸ ÚЪêà D`]8Ÿ:«j\°Ö‡}ÚÇ}ð þ€á@ àÚ›LY}êG¿é»¾þª³L@]@”«–º«F¬W›¬¨[…-@Íêµ_lk«jgð ÀY2kÌŒ›‹l\2Míëjà€ ç0Ç0‚b`Üð Áà·. Ã{ªôPê0¾ ƒ2¸ Å`½°öÞ@Ï@ ô8Üåº@u þu3§t›ëÄôÅTÛjð ïprø9“²»jÉ ‘­+qÞéck4 ó`Ý0rª†ÄJÌÄAk)¼ zÆ@ð` )éjðdëZsñð—d¸¼j…|]‡Ìr‰LkY0øÀsªÖËÐ:¾0t5»ëо씪æ ×xvkuZwÀÛ ³Þù ô(©´¡xuìÉ ªráã@½4ÁV{¬ƒß ÌÁ,¢‚—ÌÑH²´Ì|lÄ •Ê<ÍÔ\ÍÖüjÇì¬×¬ÌÎlkÝ\lFP ðà‰Û|ÎèœÎî–ÍȬÎüöÍÍü̹ö ô\ϯÐ{T ñ€OêÎþüÏmlì¢!ùþ,1 >ý=éEà!L(T‚ë…¿ü•xE%"ÄVZ…ð÷°ÃŒ\F8^,ãbÇ'¶\˜ìÀ‚–”‹¹¨ aÒ_@!ùþ,HÿH° Áƒ*\Ȱ¡Ã‡#B|åL¢E„fø•HŒ_”ˆ/.ŒÂŽ¡sÞT@7ïãÄŠ"’4)mÚ -¹â}ôB®^<`:£u,»'BR€VlA ÊàÉóÆB …]ëÞ ³ `ºvùС[•ÐŒ´/° Ñ)€ ’+ȵω +’:» ÍW…³¤QP „ƒ@cÒBXPökàÌ…f1 #'€-ÁWË„+øŠÛ7c e…+¢`à~E™ç¸$dir‰©üñI´têä=:÷2?dðª*´`«½b\‰ð;gÎܹx\0ds²(4Å tPŽ“L Ä€Å@3à#\Y° Ä–æpóL0ù °g0q =îèâÔ]¹¨SÏ9g”‹;ìôÓ8æ¨ãŽ<öhQ@!ùþ,ˆ^xÿóH° Áƒ*\Ȱ¡Ãƒ¤"JŒø°¢Å‹3Bœ(Q#AjÖ< ´R¤É…; ŒÇÏ]I­ÁLÒ!I“ýDæt¸S`JŠyøÔ‡Nà¾{ k6¼©³)O‚?IåW’ Skñ⻯ªR¦y¬õóW,A~÷ªŽô'¯¨@~ýöñãG-&[· áÊ¥k4fI½sëF z0dͬóÕÍSÓ\Ù’WÕZUk–`Ï‘’^8s_Á˃… ¹_ÄKR3·NíLHÃfÆü‘ÂÍÔl?Ülôõ@Ð?ó˜veÌ}ûä©&ëÛß>}úö!®ì· µ£’y_OÛwž~™§ÌÓšø@Ä¢«i­Ü@ßÕ ÏÎãÙrÂúšG[nà`ÂÖ„Þ@û¬'>‹QGmáÇÙ}9f|ôÁVoÿå!>ï@& Ž1¥€aµO‚þ¤˜¢@æuOrÞC–uîô³}2f—™55.›@—ñhcždä‘Hú\’L6©Q‘NF)eBQ!ù'þ,Iÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹®Ð2K—«þ\x‘•Ë“Œ(Sª\ɲ¥Ë—0)ŠP%¦Æ‹%T©ÑÂJ®1ƒ J´¨Ñ£«œ Ñ¡©@§þŒ JµªÕ«H_eae«LŒ§MCœ!ƒµ¬Ù³hÓ¬Ñ‹Ì ­º€ ÆÕ µxóêÝ» ¯»º”ñ×t™2,:ð]̸±c‚Qf5í° á­²0Uü¸³çÏV‰ð2R¢Ê­»FdE1Áš3è×°c·¤2+×"cõÚÝ WÙÀƒ N¼¸ñãÈ“+_μ¹óçУ;@½ºõëØ³kßν;véàc{gO¾¼yêáÓ>Ͼ={õð»ŸO{üû|ëëß¿?ÞýÎç߀ghày&xÕ Ž§àƒS5(¡}VHÔ„^gá†Aeèa†èÒ‡Šh¢J$bx⊥8!‹0R䢄1ÖQ@!ù<þ,ˆ^pÿ;H° Áƒ*\Ȱ¡Ã‡#JœH±¢ÄZÑ, ìUL£G‡^ÈÝ{§«ƒ+­"óg%!F‡É–!¤R¥¡wo:ÔIË=10œ1‰.\‡éèµDø²aL<)F]8µÃ8`]iÛ–$Ì/y-ɘ³'X /]HKVâ(0vþŒ½ø´`—¤Êpæo8"’¤s§/]ºX÷öý›P0aÈ_ 3#pX´Ž >º¯KVmelIƒ¶Ã)&ˆœ›…6ŒnÃBT¦mÆ gÄèÊ<È‘`.m-DL™1°êïàéâ$ØÄŸ/ëd_.ˆ¿šµÆPg®Ci‚µž¡ÿõ&NÙ@þžŒBO7ÂÞq‰{"¢`UùômR(?)M%B>\|ÖÁ/C•VÅ4ê¬34hù³Œ?€uà„?èdˆŽûѸä–kî¹è¦«îºì!ù þ,^P¿ÿý (P€Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI`€“(Sª\ɲ¥Ë—0W–œYr¤Í›8sêÜɳ§ÏŸ@ƒNô§Ð_Ì£H“*=I³)Q¡P£^¼LªÕ«X³.|åŒ#U­ Ÿ"4º´¬Ù¥Ni‚]«Ê4zùx6yÂ6$­sþÒ‰8Á=ƒ0üÑ0¨EÞ‡ÄbðènÂ3êü3âðnÞ½)«OÖCËzjæìùáqþÜÑ`Æ_ƒ‰£4ä*±Ø1†s#Fa§q·DßÅ?K¼¸Ë´3ë*W’EL\åÐþz"bн.iqû+ ðàÂJ.ÿ˜ðÄßâŽÌ#,ãoŠˆ#/N¯~Ýà.r-ŒÄó"ŸºuìÜ—ß~UáÏÈ kæx#@èÌ#C´EdÛFÀa”áC gYÆ…hr5uä -ǤãÎë@±Þ3˜âŠɨ"]8QñœCà £8Æ\`äÔ0ÔãAdE„U´Í-Ѡͽ =Ý%CÛ„aÐ+É´2ðÈã Y°Ë:ï cÁA6ÒxfškJôŒ0NÜy§…?IH¤„y…9f™LYå•éˆÐ:ZX´§Èß¹LƒÐ4¿0ti¦›vê8¼$d†4ÓÌ E.ñÈÿF¤‘HŽÙг€nÂ)§A&ôä<_ p§šl΀N;ù ƒÎ*f¢‰lCÊ2ë,´˜†A¿+€‡ãŠh.q$ä‘3ñ8Áë Æ°‚Ð1ªÄØî»5ÞkÁ 9Iú8ãPP@2»Ä ¬@N+Jrs4l“É¡hdíðÔ ÇbCz“%:4àEœ­ƒdj ±`Æ´ÙrjÄ<áâBÀ 'åŽþÐÂôbÿ %ÕSV0¥JØÉ…/yXžC¢Aƒä‚Qq9Ì øÃ §B$JÑSzã< TIŽà°Â"Ð >PÈP‡2ª  ‘ZèaËR>¤5§<d*‚4Sˆš’‹Z3ŒôÈ0ÖÑ8ZÛz\hý°7Cf×@´GB X8ûÚØÎ6¶ÉåaeãÙÚ¾¶´%2î¡<Âîv»ûÝ@á¶·AÌVxC§ÜÑžvE^Áï~¿bATPG<ÐñE{üà×HSæýÍp:üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈGNò’›üä(ÿO¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nõª[ýêXϺַÎõ®{ýë`»ØÇNö²›ýìhO»Ú×Îö¶»ýíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýàOøÂþðˆO¼âÏøÆ;þñ¼ä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½èGOúÒ›þô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸Ï½îwÏûÞûþ÷À¾ð‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö·Ïýî{ÿûà¿ÿøÇOþò›ÿüèO¿ú×Ïþö»ÿýð¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€X€x€˜€ ¸€ Ø€ø€8Xx˜¸Øø ‚"8‚$X‚&x‚(˜‚*¸‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ:¸ƒ<؃>øƒ@„B8„DX„Fx„H˜„J¸„LØ„Nø„P…R8…TX…Vx…X˜…Z¸…\Ø…^ø…`†b8†dX†fx†h˜†j¸†l؆nø†p‡r8‡tX‡vx‡x˜‡z¸‡|؇~ø‡€ˆ‚èrMPˆ†xˆˆ˜ˆŠ¸ˆŒØˆŽÿøˆ‰’8‰”؈þP‰˜˜‰š¸‰œØ‰žø‰ Š¢8ФXЦ¨‰Šª¸Š¬ØŠ®øŠ°‹²8‹´X‹¶x‹¸˜‹º¸‹¼Ø‹¾ø‹ÀŒÂ8ŒÄXŒÆxŒÈHŒ…˜ŒÌØŠ*  ÐŒÒ8½øŒÑHؘ½èÚØÞøà8‹ËŽÂh˜ äh‹–0 騋戎íÈŒ%  HÐŒ_@á8õ8‹V@¿Ø°‹¬ñHŒýH‹÷˜ŽãèŠGÀ ,Š[à°(^ ° % eÐ ø¨ŠÉ‘ÆøŽ)‹ë8’¶(’í8 ½à½Ð’½ÂèY ŠOà’-¹±ÿ¸Z0 ºà -Ð.ಠ®À«ø«Ž2©ŠMÐ ¼@ b ¬ˆFð‹V °(º@&ùŠDpº0 9‹TÉŠR  ­ˆ” Ù°X¯ Š¬p°hbi% U0HP«0ª¨—|é—]‰%9˜†ùŠ%`2Ð E`&Áx´`ªŽiJ€ /•ª 5ðKŠFP5ÐV % Š4À +ð’I™©ˆ«P3@¬`Œx ‹5À °y˜0¸`&º°™¹Ø\Њ«Ùšá¸­(_Š%  ¡™ŠWà "Š. \™ŠG €© 4ÿÐ"Pá9žå Œ{€ ì ˜`{@ ” ﹓0 {“@ {P ’°ž{ŠëiŸ®ˆŸ† Ÿ“`Ñø©Ÿð(ý¹… ¡ù¹Ÿ²˜B€ ªÈ¡úŠ*€ ’🆠 * •@ 'Ú#Z¢•Тʞ稊  (úŠB þÙŸÃØº™4é Dy©Hºf c)UàŠ%ð ùŠUpBêŠFàªÈ½PßÈ OªŠe€“P½`œd ½0žCZ®P ZŠLÐ ºÀ E ŠR ¸€° °± ¶ ~Úg ©q©›ºÿ`ª@ Ùb@ ¹Ð FÚ­Pµep UÙsZ§w ‹bPÒÙ õ˜©›Ú©Ÿš¦kªŠ[ O °ÀœÀ¥^Úœlùв0©h¦ÆÙ«à ªˆXÐNÐ °À[0fÀ‘2€dPÎ ­Ò𫾨¡“P£©Ÿñ¹{  `–®˜P °­æZ * ”0 רŠZ ú‰ âJ®ëꢔP®’€ ì* ®1*‹ðY ¬x°²8¢çj¡’à*{p †à¢ì ®–ð° ­Üš® {®°˜“P®æH Ãxh©ŠJP FV0 ©(»P•I€š±ÿ¸šÁºŠVÐ Wꊯ¬` e¬g ‘©¸˜R9‹ÜHŒ8»Šµ“eÚ ‚ÙF =›¹0!~éµ!0³™LP D`p¦°¸ÔÙW ©¨]ŠP0 ½ÙŠQ° Fú´Š3-[@¬&À H@¶àcð¤`+¶dÛ³«¸ºà©Ø½p‡›¸‹Û¸ªxµ=«•Øê‘½°´à蜫茙Šd ‹² F 4`Ù!°bУj»¸«»Äˆ’ï °ó* ÛÿŠŽ“P 0¢;£@@¼èª†0½Í»ž*P¢ÄÛ¡Å{¼Ð¼ì½Ïÿ¸ž9êŠ »Šå ‹#J ÑhŽŠŽË+ –°¼˜ ¾À¾ª¼É+¿ÍëŠÝ«—`²Â8¦«’@½Ðš]€•¥‹TÐ ®8¹ð©¯X½@\.Ð u[™aà 9Û©Ù¼Š‹)˜O° !ÜS”«h^°Š%@ R+½@´`j·0 ‹g@¦GÐ ·Y² µ¯¸aŠN ·¬¨ÄZ[ÑiOÃ3\ï¨Zjµ½NÜPÜR¬Š+ÌŠH*¹Â䈺ª˜ºÂ_ À­øÛ¾Úžid@-­ð&€ÇzÌÇ~l»¹Ð’OÀ‹À Ÿûÿ»±Å+¾éj²Ì›ŠÐëÈËžì8£×»ð©½è*¾Ý ËÈ4Êž!:Œ/j ø øy 4š§<£Š¿Ÿ°Ø½@ŸÃµ¤K´°XÛª0–Yš·­¨càŠeð±¼`œ]`ª©¸dP¹ŠJúÆ|”¸ ¤\Í©èdªŠ·p©ÞÉ i‘¶Ð‹É¦U€´­¸p©Qð·Pº U° f¼Š«€¨€ÇÜI@¯ ¶€•RpÌb€¨¶0 yΰίH9 ·ÄšÐvÌÐU ά,̊לƻڊ#œŠ½ZÁÄÚriÛÂMU`. ÓVÿPŽ«È«hËÇûÈÛ¼ Ÿ” ±h½%ºÉ:}ŽÝ Ÿß{®Ú¡îéŠ ÊŠQ‹é›õ‹ ÏK¢ëÊókÕö›Š²ÜÓµ ²þ ÀÀ¸Îªh¦BêѹP¨Yàή¸Ê|”‹+‹QPÑ«p¬ Ü Y ¹!0ÄßH×Öl©ø·`¹pÙ¤¿ÉšG¬h½›g —¯8T›Šc§„|¶@Á®èÖÝI5},›Šdð¤^PÓÜ)·ÐOÙ³HتÍÚDàÚ«X»«Ø¼ŠMħ;Ò] 2ÀV@ . ŠnYÍ/` Ó¬îü89| Û×ݼ¢êÿ*ŠÓª8®åJ ©è£‘ŒÊÅûŠD­É©¬¯æ­ô)±¡œ< ®{ Ô±x¾ÝŠ KÕ˜@±ëù°Ä{¢BÀÊ\-à$ ÞÍÔŠÞ´üŠ"K²ó+ŒOðˇ]¹"¸à—4Ð [G€  íŠíÌŠ,@ þ¼ŠEpÁJ¼`%P·°™FÀ¤—¹ŠQÀ³ßxâªhYÀGÀ dp¥!  £ûo¹Š4  J,ÀR ¼À•LÐ ŠíŠ5ɵQp ¼Ü¬ G‹öœ@ õhgŠQ€¸`®. "ð†ÝäOå¦ÛŠ Y-P7”É p.çt^™HΊd0“ÿÍã"ýŠ"à·€ dÀ¦¨]Ñà I•bà f¬"é›þ‹ ;Êö)Þª¡ñª¡<ÞÁk OM¯çXÔøzŸ§>¡z¡øi¯è ‹ü¼ÿ¾$:Ÿ-ªÊº­\]¢,Ú¾£LÊ©á:zß>ŒY°æ:> ¹  ŸŠ”` ¯å°èÄ=˪`Æ\ ¶Ú gб`“Û¬²°»Ýè퉊 ½@”V`æU *9 ²p©Xz ¹P c°Ü^, e  üŠ­ Õީغ箷ݽ°Ü1  ™Z©•/·™|OðÿŠYP ¹0D ò"ß$ÿðûÞï49 ´`ØîïÃý‹H@¨%°0à›¸¨–°ÈD¿°$J‹¯<Œ×˜îŠYðÛ´°ñ°È·PǺ8ŒÝVõ†ùˆžô½èõñ¨ÆºXiú \oöè+æXÊpïŠMàú=Œøm޹>eðöÂøÅu?ø«Ø³PÍ„ŸøLÙ´ŠŸŒÛ÷¯ŠwïëyŸ‹ÉΞB}ëšµ@Αÿù¼œ­0º ÷ߨŸú¨_†§Øú®ÿú°û²?û´_û¶û¸Ÿûœ(N ×û¾¯¤üÂü WüÆüÈŸüÊÑ 0;áüÐÿûÔ¯Ã?üËŸýÚ¿ýÜÿßý,ñn 0yàáoþþã/8ðoðV;%Ôl÷×/üÞßÿþ$XÐàA„ .dØÐáCˆL¤XÑâD7y4jl@1cÇ‹!äq#’b’8lTü8±5yVš¤YÓä/`6uRì fgÈ(ì~NÄY±É“¡I•ê¼lgQRQ¥FXÕêU¬YµnåÚÕëW°“fTSV ƒ¥IÖD©FgÌ™i“®¸'Cî]‘A‡Òµ‹×ïݦ:ù ˜:5ìaĉ/fܘñØtèVMÜ  ž¿ w܉ÌÕO•‰f‘W/Ä™ˆ-"ÕF€`ºL_€Ë=×~úZÆ©uÛ}×ZlSU5V’K6ùä!“LXee€µ:kñÏLjë¢aQ›¨³4’ͦ.´Á‹sî™À*åi"[0ÐÔ§€‰œt"ÿŒûªt)"‚ŸsÌ1çœxª‹æ•y-²À–rè±”" ”æ7¾Þ¦ ê‰®Ö/Œ‰^If" ì)âz( H~øÉ¥îiøeàsKàG=Œq*úé/ ¾"U‘‚t$`Mf:Š00ÊÃ;’:˜•DW0q]H`÷²ršIIÿ‹@˜äÈFi‘€;¦`p¬CІ/z“<Š$cSãpEÖ(rŒd” 1p“Òd…pà ™>ð7‘)Ì þ(‡&R¾Í"΀áDd¸¥–/o{›ˆÜñ&Ф ïc\µ®È©,jCQ- G|p¨C>Ñ„™íxG<6ËêYAÏlæ2¼ÈmÔ3Ú€4.Y Ijå+f)E á¸8pqŽyƒ7á«HŽvèb6ä[.ÔQsœ"SÀŽ;TI‘\¸ƒƒ:èá],`"“¼È6ÔAz¨ƒ| ¢E< JQÞm‹9Ç9j2FÅ•QÇ å(ÿði|#ÌÐ)QùJ^Òñsy$g9͉•¿¤Së¼ÈÒ1DvÁ/G¸;ÛùN{ÒDr˧HÜ OŠðœ%hA%ÒO„&Ô&/`E¾âéVxC¡ u¨B'¢„{Ñ¢¡¨EjP†4%iICyÊ¥÷8‡LjÑnÈÃ|/5ÉGEzSœŠN$þàiOyJS U¨C%ªE|zT¤&U©KejSúT¨FUªS¥jU­zU¬fU«[õÇN¹úU°†U¬c%kYÍzV´¦U­kek[ÝzT¯¾U®s¥k]ízW¼æU¯{åk\ùúWÀV°ƒ%la ;X¿V±‹elcûXjÈÚ5±‘¥le-{YÌf¶°“Õlg=ûYІV´MåìhM{ZÔ¦Vµz-íj]ûZØÆV¶Qmílm{[ÜæÖ³µÕmo}û[àö5$Á%nq{ܵò¹ËensÛSå>WºÓ¥®m£[]ìfW»• !ùþ,ÿH° Áƒ*\Ȱ¡Ã‡!ùþ, ÿÿý H° Áƒ*\Ȱ!CR#B @±¢Å‹3jÜȱ£Ç CŠé €“%S<)@¥Ë’%ŽœI³¦Í›8=ºdyðV°•-"1GÏ™I”þxû‚”áТŸM3bΫX³j½‰p¿¯üÔMÚ” O  @cU–gÒ¥e®58·$ʪ·êÝËwk×[K«ðlÁ¸+ÍQa—°BÅ!;䉗Tߢ3ƒìJËñ¶[ÑÐEÛ 0Æ4zÚˆý$Ë2(cïØå’ ð:|îÐØz¬·\ææ%#ío[˜“¯’Õ¾{·?Û¸u ´°kÝ»a:£u,»'•5‹ÿ/žskÛÂUP0•@nÂ$4¹÷³7ÒcÎ,¬׊·tT ÕÛ@Þ¬#ƒÒ “”qÈ)Ç€A81Ò„`2¿hèy †¨UW÷Äc"1è©rÒ,Åøc?2œ´L}(ñ¤>NÆ8ý·ØaMy#ËITгàq$”þèÏüqÒóåÌ0c}(â–\ÎÔ•/-„ÉzH&çOüPÔ.4¶ÄÓ‹2T<=Jx”obœd?ƒ1˜d2cÙ9DðsŽ9æœOvþ8ÓJ–xu)餙WŸf–À IÓ&kþܘ£?;ÖédA)ò$ 'åÃ胧 d'ü˜ÀAάB–”ì_vdƒ-iã^ ô´yž?Éä·Ÿ+¦¢jŸ?Þ¨s 4 ÀË1`ŽƒI jë©Ç$SB1`Á[¯¿F*켓vÖWÇþÙÒ Ò| 3«]ëOÇÀÓŽ.TëßµÞàRÎ<Ç\ Ð Þó 1ä2Y ä¢N=çœñ®¯KïÉ ¾¤òÊ,¯ìVÉò¢,óx-×lóÍ@:fòÌ<ó…óÏ@ã¼sÏDgURÑH'­4H!ùIþ, ÿÿý H° Áƒ*\Ȱ!C#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(SªÄHª¥Ë– 4à°&B™4mê´¹²§ÏŸ@ƒ J´¨Ñ£_¾Tè&Oƒƒ æqÃGSª›>õ‡#W%Ëe‘|H'Þ ––äÚ¶FÑ­ã‡Á-[¸F·…!ùÊ^‹J]6õêu«?­PHÅš°ÁT`³:؇š<‘*.µæ/`þRv32 »Ÿ%6yòäÛ©[SŒ}±]’«MÆ–±L½n¬Aš&yEÜ=w´ êåëW¶ÄÀ-›ª™®†AÃΧ.t¬æáåÌ ±ÿ¿pÅ=¡ïh^†ó‘¯3¶q>FÛuÿÚ'竆)Á}´^HUܳÅ2&Àr#õE_RÐ5eA—¶™tSmeCS]aE‘@ƒy…U…“ $Àw5 †n¨±• Ø`Cg¦GVz¸8Ãh#Ž1Dä -Ǥãkó;¹Hr¡‘»¬óÎ0D$…7ô´c†3 ÓN>è ³ D(<Þ°0QŽYÎ%@äB>0XT…9âÃÊ;Ä@”ä’MBÃ4ôhCÌ]TZ‰å›:¢©&›n Ðé•YB4d‘GqOªF¼ÿjj•¨ÚÉj€À >~1øJ2½ ÍoÆÜ%'Áú ¨ ¤¹f› JÊ Í@¨¡ˆöùg `ŠI¦™yAN=ñC˜D¿-Q|ª"­4ÓNC-õ‚áT À4¬@ÿÄM­"ÍEU¬#Á4ÅXpt?µßÂHÐÄ=wYµÖlÿ‘Ùh« ‘åYowÒO 0ÎÝ*è˜>7ššï*4ÑFClDÂ+À4ÃLÐuÀ½MÞ{÷-çi¯QÛpÎ3Qü+Àߎ·Þ|}šD\ ±À äÜ]R#ÏœÈ !’ÃKrS‡ Ì"²2†¦)þ`€vºâ±h‡œéáàÍòÁa&"]!ÌWÆ“ÿB~¤ ZÎqil@ Glø. AüsÆÝZJTDŒøqs˜ãñÈR4^ñÄíMÉå G⦤P,O‹@ïxQåtrX±€=Špz¬ "Òà?r‘*LC¿8:Ž0Ó¢b´üøé.زю~4¤9méISºÒªz¤©’èDZ€<á óêUÃÓ¬6A"àhèCùw;›ÞXP•*)—»œ¢T¥ÿJè[)ÒfXO§<õ©]=©K‰YÑQ¾¯ø„#âàŠP!Ùo9y׈ W"¸‡ª E2qãH1D¾¡‹{ÅXÃ1oD^¡ÈaL£ŠP–‡3"å]XÄû28#$Nr2!CóSЩNªTÐÿ2Ú±uª™Ýêˆø¢xÁ3(kk\ëz±8…Ȩ#Â}Ì@!@‡‘· Ð`I€„|t²¯ÓV6§ïáiPßÏ/íÿ’E·©½lUA:"ÚðoD:ýétƒƒÜúÛÎ-[r¢LŸk Œâ¼!’Å™g¿Ý­>óà1€D”YÑTê¬tŽ…eþC8 \œcǨص%‚cÀ£º˜@¥sš uÔãgˆÈ¸äޏG$î`ÇÝÆ€z¸C €Öï¥zÔCÞ{DÊ~ö´#<¿8Ç92à^ÿšñhW»Œõh0ƒSm»Ý?¾ûðlw;ÜÁ=‘ ÜcòS ýê]>ÒÃÕë`»E×aZËäx1tg,zl£2ßFáï]›þï·}D‚¡|¸Ã †ˆäí]kçýnb0ÿ7ž EÖ¡¼,ŒÃúÉ¡5cM%{»ã›îvwŠp(Ð_õökÁ¬ÄMø·+¸vøu ¨1;ñ€:±épœ]`GpBAéVÒÐVEá"$¨MxÄ 'q‚‚%ƒ“‚pEƒ˜ƒ:¸ƒþð¬ hƒ"Á Þ >¨JD¡÷@jGq„%è„(HFP ð '…¡„L(ƒÎ†ÏÐblÊ®·úkòÄiL’2–É£×í‰MQØ=äkoÂ'欩—ñÁ®]¿¬‹”áy,&ª 2®éÓ¨Sû¤J×îIÇþô%竆)}&¾ûà2USaÊFØ{ fƒœ3+‘´sŽª£KŸNÝ¡oôÚ™ØÃ_/äêÅÿFÁŸ€m·¢¡‹¶Áæ i„e87Æ4zÚˆeµ‚n^°˜l  <òxš?à £8Æ\ ƼÃN.$  dÁ.ë¼3ŒþpÀ æÅ4:íäƒ:«pç -ǤãN_üù÷zê±'Ð{ñÍ7Á=Fh~ú Tã‡]Xàà‰Gž@ÞäbÎ<É´ggmØá‡% ÀÅ8ÅÕ$¦Ï•¹Vuh¦©¦iHÜsÅ!`Á–6y‰Ä+ÓŠyÛ„SÓ°Ó4ÃLÐæ|]rÇ04qÏ%*à,ÒP €ØÎ8Ì.ãŒ+Œ³§?”ZŠ©yÆH‚ÊüÿâOç<…‡Á”˜˜æ9J’õùg æjè£ÜÁÏ.Ú(³‘‹j¥—r wæyª7ëÈ`4ÃÔD§@­¾k—Fì3Á_þ°ã }cÂdæskæ«ï¾7S fçRõÊ20m£ L³ü[?2À” ¤ÜýeÃ6-©M’Ö$K8E(ð8‚ 0…;þ(€°„1Ž@w<ÐüaÞódB.èೌ %î6—3åÒ+@Æ6Œp1þ,ܰ×)…=Üù3ñÒG,é@-{ÜÀPÊô”H§0ÍÇÀÏ ¹ 0Í/m×{¯süÖm÷ÝEó ¼WÿàѤ£Ž<ÏL¯$#@üPÓ.wÅxyþ@.&ÑÁÚR=ÅàŠ 0!¡OS›W<jÎ9ˆDðsŽ9月b3#MÏŠý|jÄC#Yôá$îÏä_œÄ>’ D¼[m­ªw.à‚¥6Á0Ýúë±Ï^bëÄýW½öÎ=Þì·ïþAþò-€üdj÷h!Y,ÐޏâJsXäàµ0ØD>—ó˜\`3h*0±ÉLæó¨¬ Üøa‚DñŽ ñ(Ú‘(8£EB#š?¶<ái³>j`ž¤ñÀS¬U¢ úúÿÿºf*È£Dô³Ÿ6ØAÖ è8 qЧ¾õ½ïŠX¬[›¬°\;xÇbÂ}Ì@!@4øÔBŹM 0‚=²‚hCP- ‡17… åðLÀ® hÃ6IƨJå ôñ4Ï1’Q‚Ä@NþðE(ð‚g<£D3ÀëtÂÉÇZ,ü_²à(G: @døËé¢Gçýå‘€ôBˆÌˆF5ÚÄê—4d“0Žñ0“¬ä%éó ]HQ ¬8ƒÐÆTEµdñšØD“Ȱãi–¨ ë°G-"spãÁXãyÚèøl£ÀàÝdÞóh0c)çQ=ê¡ÿ0 ` è ‡;t±ó€ç˜Ç1.`“íÐÅPTC¹PG=ÎáÍ`¨î0Fa’ w°ãT&Dá@¶¡O~®l…mÜ‘;áIŸ*„ã/ô´gVXºÏ~R4 -¨ÊyÎtþåP¨ƒ¾ÎqúÃݨ7(3dÓ˜¦˜ª™–lzõ«§áJˆ‹ˆç™ 8º`‘¸™Õ”hHoÈZiPA®q]É*Y àã‹ á*ZÀJØÂ ¥81 e%xPh Q+[+R¯ÇÊS.cˆbýÁXÇÄbM¼« UøF0"Xöµ°ÕÔtÿ€A ¯È­n_=±N1®k,úº„ØÑ.$³™mmo›&^‰¦µ<‰­t§ÛèZ÷ºØÍ®v·Ë]|Q÷»àMHwÇKÞòš÷¼èM¯z»^ð®÷½ð¯|çK_ó¶×½õͯ~÷ËßþÎ÷¾ßõ¯€Là˜4¦îÌà;ø¿ –îƒ'Lá [˜«–ð…7Ìá{øL~í‡GLâ8İ5±ŠWÌbõ¢XÄ-ޱŒgÜÚ–Æ8αŽÙkc°îøÇ@þq ä"¹ÅCöñ‘—Ìä'ùÉi²”§<^([ÙTβ–]|åoùË`Þn—ß§‡ ¤Ìâ ³š×Œá1³Ïÿz@@Aà,g„°ùÎxö®›ï¦ µÏͳ ]š=ó &t–¢]G2úÑ6ô¡ÐgxQÚÄ5%¤7=hIë Ñq†éU¢qúÔwöt¾@@ÿ¥Õ˜ÖjMPMë0«zM‹ÖJí8ïZÖ6©µ°µ|k5!ÀÕ19¶ŸÏú”a;[ÊÅN“¯y5mfÇäÙØ>r´Ñä¤Ûɶ¸¼í¯ŽûÜ9.·ºY‹îvcwÝð>ˆ»çmÝxÛ{ ôÎ÷yï-4Äßq€h¶èûàUæ÷OFM†#„΀ó ŽðŠgWá?©ô¿c èA Ÿ¸À >q< Ìÿç8œû¬‡’¯\ÞÈËÍlg‹ÛºïI¢ç… Ù—³|ðx\怆3Ò0r9ÃÙ×µÉanò’ËûæX¯fÎe“J+Úë>6Áƒà€¸ÁÙ&A ¹Ò•- @Ù09¶·Oîƒ_{pÖYÏû½¶NFdÔÎXÈàv¤\6)øÑOŽ˜¤½×‡xÌ=^æ:WVï˜×3ßïk^wžÔÊ5Lîm‰'ÞÌÇ.9šÏþö¤#>¯þ8Ç›ùÚ[só*Éõ®ÿâk¸Ž)í5A³ÛsiÆw½ø-7:ÕeO€¡‹¼Û¹ŽùcmO}×â>%l/5Ü}ÿ”2×Dé#Gyÿé?û–·}àA7üÀ'~r’û^ Õ¿G®Ÿ’Þ?¥ÚÜ7Ÿ¥aÖ³“š+™%¨ô‡ÐGme‡V•åDmÃð {çÃÕ%8€Ø>/Çq"q˜pá"(_ ø#x‚ëU‚n‚,¸o*x71e-Xƒl^‡tuvu6؃_^GAȃ>X„S^9y;H„FØ„Úö]C(QhNX…O8]IÈhf…\HnÓõyku²…]X†8F]½ÇsvWj¡g†n(cÓw±}Àæhox‡&†…R§†Ï4\xø‡$†…Ò÷w hmÁˆˆÈa&V——ˆŽÿXa/¨8‰ó‰(A‰˜H€’~¨‘‰™Ø^3è¡xSXäžØi–8YØs !pK¸W]©ˆg«8'„xá·~êguO‡~¢ˆ~¾Ø‹%Gy'}é—fµ˜j·h;÷w®¸³ˆt@Gw~u×|Ê&q€æ|Ê7©wf§XsÍxƒÏX^§‹1„wr1ƒç…J'Œ÷\ç¸fé(W~§ƒÈÅ;]0 ökCxvAàgæ÷rw÷xYűèØ!†¯¦qdžiÆ'À7uƒ|0wrGÞ×v4'kÌH‘`f‘¡{¼–†fzH÷tÿu.WŽ¢Htq¦tÃ÷t2¸’ÒXvæ’/ “‘}É–‹é\!)’7À×” f~'}/'„ˆÇnH¹eJéiø÷”û'?ø~ÿ€¾Ea™”c¹З(hˆhÙ–/oÙI…q)–sé–˜¡€™Å€oµ—nÅkŠyY€˜Y6˜žÖ—~É”i‘&™’v™¦„¡·–阙šéÙ'Ž¥èœH•åè~–Éœ©é ¸‘Qš¬IÙ¨·I i½ù¢9š>G”RHœQTI”SØg)ƒ»ØkVrÓ˜ËéÍ)ÕYשÈY~±Ó‹'ÿ±Û)Á)œ7JÈp6ˆ7’ÆÉœ<)žìɓǟÖiŸAŸÁŸÑ Ñžs¦ŸÕQžAz >aq(– á ‡ŸÙ‹æ7ŒT‡›Äùr\)¡Ês¾X~‡'r‘·“¨~“yîyfÏÙÉ8'Gy*×¢$Ax¬ùrщœ÷xr7v¾ø¢)G!— Ú ša­ø¡ ýy¡ÒømL·‹*pkØ“<uiHžOJ—-‡å Èi°“Vº‡ãè€LêœIº‡‡i÷øtQ7¥!pdqN·¥¹I¥É‰tþÐ-çzlZŽ:Zº bªäiŸóØŽÏÿyrgš±ö¨åÇlkðˆ¦GtgwÙ'©ùXŸ!©<‡¡zÚ©g*\]q§RègБr×}±vt’Apiô¨våx¤ÓdmŠ™–Q¤ ¦« ¡ªôhŸŸú Ñ©’‚:9•S·„´i— yv7¤2˜¬”uŠ¢zÚÄz¬yŠ©G׬§J˜…9m­j6Ñjªgf É;«]jŸwº‘••VÈÕˆa`(‰¯‡á¥µÚÖš)Eö˜«z°Œ‰9‹ëZˆæÑ‘¼#{Ý™¯·:J7ë˜z]¯¯Ç+{\‡®ìúx †“TÇvõø€W¦þÖz¬ÿ ©•©—~qw‡Ø¯Áª¦HGc¨–ÝÊscˆ©Zz´{z°Ç|ÎÇŽÁ±9)qÜÁz¹bµ±}ê´D7”xY´UË®Ü!²ɮߨgÍGtCÛTë—)«­O;µæj;¤[Ù“Œ§tŸZpº'j@›˜ FÒ˜¬¦·¶ÍV¨Všµé”l¨´R*¤pzš£‘ÇqásSÈ™'yRIJ¹ºSw›™+•äçDKº†Ø¢Íú§6¤û¡´éqpêA½Xg*x-Ê¥(·´W‰xç°{©.›¢Œéxº/´;¹Ék¸×†¸÷¥®™¼ù—‘F†§J«}Øhn»½œÛ±Qÿ‹²ò”¯¨hÛ›˜n›˜­6ˆ˜—èÓ€ùç–Y¾ÆUí‹§çúœ€{¿É³X½ínsF±h¹–oiÂUÏɹík²ðK´ÿG™¨«¯è[BoÙ—Æ•Áïû™¨úV÷ËÀæ ¿úÂf¬=ƈy ¹—\—Âx9ô ÁL'[™ xÃû÷µ¿Å½9 ÃüDZÌk—I¾.¿Äõ¼>;d(Ì+ÙÄ5VlNÅUmR\Åfòb¡8ŠðgÅ\lEFªžI—]<Æe„Ï)¹ÿKÆj|{hÆêIƒkÇÖG]‡Ê„r|Ç!ÑÆ±ÆpŒÇ~œÔõ¯þ°døÇÜÆSZmÿkȆ‡QH‡59†Œ|ÈÒ%½Aë½Ô4Éx,ˆNª–¨Éw¼ˆ†ÉÄ ,ÇWÔ¨œÊª¼Ê¬ÜÊ®üʰ˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀ̵ìÂ\ÌÆ|̤ÌÊœÌÇüËṈ̃œ)Ð\ÍÖ|ÍØœÍÚ¼ÍÜÜÍÞüͪ¼ÌË Î±üÌÝ ‹Ǭƒ@Îî¼ËéÐüïÌ˽P õ¼Ê÷œÏØü aÐÊûœÊÍÏ0Ð°Ì ¸ Ëâ¬Ì­ÊæÌÍè¬ÎÆÌÎЬ˜€ –0 { Ñ ­Ë­CÏ-Aª¬=üPÜp«LUÎ"ÍÊ*ËÚ# ¨œõÿpË5Àü ìà +ðÍU€"ÐøœÊ/ýÍ-Ò+-Ë20DË ÍÌÝÕ¹LÑÍlÑBB ÑTËÝÐGÝÚãEÀ ÷`üÖ¶¬=÷@Ó6ÍRÀRð¶ðÍÏ ®lÐî¬Ö¸¬ ËOM T=Õ³LÑ@°€€Ê‡€|€‚¨ €€-ÙÀ‹°Ù ‚àØÍØŽ}Ù¨œ~p‡à ƒ€C`Õ®l{`“`*€Ê²Ê{° ’ðÛ{ÀÕX­Û†€Ê¾M -ѲMÛ¶=Ù†@ ²ÍÛ Á­Ñ·=ÝÁ ݘýËWõÿà®Ê_Êd`ö ÄÐ¨ì ½0 é0 2€ÊE  õð Ê0Ô®<ßõ}ߨüÀÀñ` /ÐI #úé bÍJ€ÊÅ0 ¨ÜéÀ9ª\ÞçÞòMßö=ÔìíÞðÊ3  ñà¾À¨,¾2àÐÔîžà>áøÊÝýÝá­=òñÖ5ÝÞ`¨\ ÌÐ\€äp²ÈÐ7¨Ü*¨láè­Þ<ÞÞïß ßÞßÿàÞ(*ÞÔ¨Ü÷#½ õÐ Ç0ÔNáämÞQžáûÍáTþáâ#^â'žâ+NàŽà Þm>ãPãà­ÊcÿPNýÔ…ý·ŒØŠÍØ‹Àší¨\ÙC0|€Ù@0ƒÎ¨l‡ |€Îˆ 锾–^‚”ž‹ˆ@ê‚°íüʆ`ÓœÛÀë»ÝÛ“²­• í\ÝÛB@ Òë»þì-” ݳmì¿Þ³=ÍBpݾ÷Ð%0^ ÞóŒèR`Dp³°Þãð"À ²€ÊÜ` - ÷@è«\ï÷žï¨¬ Ú0/à ÄÊa­= Þe°ã¨lÐcîëÞîÀïøÎáïïóÞË /@å@ ¨œ ÚÐ"ÐGïB­Êà.îä¾àR 0×<ÿîãäBÞ,À Éð÷@KÞ4€wݯîìîîð.ïônïÿï?ðß"Oò&ÊPÀAªì ÆÀTàï=ãEñKßïŸô¿ñÿñ!?ò%?'Ÿò©¼òã^î© û å©ìÑʃÝèñèíœØ‹Ý‡#‘Þ­>@@ͪÑ“­êŠpê„oøˆ¿Ø‰­Ú¦½@°ùØ·ÛÖ.íºÍÛBPÜ¿> @`Ñ“0 –°ޝÊÙîë¼mјýë¸oÜ”@ÜËf Â?üIÝÊÅ ­<Þ¬\ ϰÞz-õÈOü€¨Ì úžÊÒOý`ýÿüð¨ôðö©Œð¨üü_ïÊÌôÓ_ýþü¹€ü"T€Êf è€ âðA v°ânàÁ^ÅKv°ƒ~F޵ÊRO 73k1ëÀ¥[‡b³:¨{RƒŸ¼xùj‰pءֳ‹°æjHƒÌÂà÷D`zq‰{Âòà•{MâìàLáÀ„-5´ÉTgÌ™ Eä£"ÐL9¡D,(5ê@†Rò#âÛ°¤äΕ«Öî]¼y[úãÛ×ï_z*ÔÈ"@!êb‘ @-Z4ÈA@‹R²ˆ@DŒ;,nü¸CgÊ©tÒD廆öÜÿ3»ƒlÚ³…êP»Ã$ *0 ²g’ »'M¢Äû¶mß@0mî=[º$ìË‘«Ø#‰Òäj_!_ž…Ýiµ¤áã`•iêÖÍ“v1£KŽOø¹ì©TýøëÀ¿œàÑ‘çÊ"%*Ã"¨þë>ùèë ÀþžÂH#ŽL:B -âè…^Ω'4¨¥³JÏ!ˆŒ€B-(ü¿Ž¸é`˜X:H “®("—u`Ãùêë`Ç6ܯÃLpÁPT‘ŤØg,ýZ ²Â÷âkRJ |ò¾(E$ÑÄ,S\±E‚^t(Æf”Ê@:¥¢‹.Á/À íkPÿD1 1Ås ²RèÌÌ4‹lJSPD4Ò]Ô B"…Ã>s¬0»p«N U}ÛmÕI„N×pK¡!@è͹Vgî²Uµ Il“êŒz’U¶ »Òjɦjáž0XºÅI(9²iÄ®RkÛœŠŸ¤ªÂε"i„þ›¶Ú®íÜn=d“£­ºêà+‡Š@Ç•Î5ËBgŒèÉb(œ†~ሠ2 “¢è pvéà]k±½w^~¸½jÜrÕòàóab ›Úê@ ýq—ÚŽAÙ^;È×+°:9`tÉD«!©¾H¯?çti¦2ÔÐAQdÿ?ÍQÓ:ðc®1mŒëAázÔCá#3N±†,…Aác> K!QªaK:¼;PaÝxó-ÖY“£D.¹lo^ó~ŽÔïrS hí€8TDr©`0bsÎÅTKŠ{º(a†. !/šaŸ$:˜!sî€cV€â [¢ÝvÜZ†B0"u’ÀÇ嵜(‚•{¬hWuÖ]‡] ÝoÇ™Çn£¯ZÂ"‰f8‡ŒŒG^h@ôµŒèÀ‹{(f™bPçሃL‡b~,î‹{Ô`u­{]ì°W½ÞuàwÁž÷À'>ò D H7dÑ"ÔÃB1 ÿôœ„ÀëE){ÛëÞÿ8¾òFRßèJ7b£%³xE\’FЦå0PO+Ô €°>X­SY‹[hqǤ†2­‘ŒÛHsµÒ@ ~XÌ (e˜¶ñ0±Q ! Ùô V²Î@pÓCÈ&q¹‰Œ!šã½‡Å¢ sø¦+ ᨇ;P&.´ã¼ÈÐá iÀ",‚6êádã.|d$Oô‹uØ5È/Þá‘@„öèâuÔÃëè™!©HP’’\“ìf°Œx¸ž[…:úŒÄ“ ¼H*WÙ³ÿñÑíë@ ÚA¡"€ãÑ8þ~ÿ¤?þù¯á¡+¹HŽt@––Ì&5ÉÉ^þ2˜Ù‚8bmˆcÐð1YYÈC~3–Žœ¥}l‰K]òÒ—º\gÃ>)’'Ù™{ìã] Ö9¤>È q˜GŒª…‡€É(FG $R%iIG“¦tPǰ…`XªÒ@½¦3¥©@dÊ4nd¡i±ËMkª—XÀÅ!0Èñ:`ÑŸît£~Ij^ü°µÌ|¦©S=q +ªÒ +;B<¦p—­v «_ÍjXÇšU´ʬ^Íá d@Òµ’5­-©ç¢q„À†I›k^–ÊÔ¾d‡HÄ!ü@ÀÒTËá[bw˜—ÿ,¬Cé`S-,{Ù3t ²“½OV7KYdžV Ÿí¬cI+ZA!µùë¡VûZØÆV¶³¥­TxZ[Üæ¶µ< @o}û[àW¸Ã%nq{\ä&W¹Ëensû\èFWºÓ¥nu­{]ìw·Ûånw½û]ð†×/Ù%oyÍ{^ô¦W½ëeo{Ý›\ñÆW¾ó¥/}ß{_üæW¿ûåoý[ÝúXÀ&0_þ{`'XÁ f°~ ü`GXÀ ¦p…-|a [XÂæp‡[›a‡XÄ#&1u=|bŸ¸Ä+fq‹]œáÇXÆ~qm|c³wÆ;æq|süc YÈðíq‘üá!'ÿYÉK¶ñ‘üdÀ0YÊS¦ò…¡|å'WYË[沃±üåwYÌc&svÁ|æ—YÍkf3‘Ñüf·YÎs–3œí|g<ÓWhížìg:š¼y&t¡ ½Q?ÿ5Ñõõóžù,hH[÷Г¦t¡h>j@à¡£=ÍçO8Ò£Žn¥Mâ(°cÃ{ ÕN‚=À/¬.NwI}kçžZ×Nõª[}ê=á/´v5wqë]'ûÁ0Æ;Ø‘ ðeaàË+’á £ù@Ð*þª*(ã ~·¸yHì¿îAÂjÃéâÔF à‹ºk³‡ðe÷ºýáw«Ûÿ|yÀ½÷°.€ÕÃþµ±MjeG\ÀÇp†V0ŽVH›Úþ°v_zýWÔÂÞƒøò‘—œ‡@Ø©Ò]ì¾Ô&ÿFø¨°`×{@@Îý¡îÀÚßÔÍ— ìaHA¾ykü…å.÷ ;œ±Ñ‡C\â[¯ðᾄa¯öµùòq*¡者 ú¢v¶»=ÂG7TÒë„=·Û8_úýï…ûÖHgµ¬—ZœL/u¿ÀzÖ#Íuȃ×ü{àAvŽ›Ýhౌ+D›/ž½è!ìó¾ÀÚàõBÞ× ëûãïª7øÀ.ïØ? êöuÿ<¤#ÿ{îzÝ {;_¢A†=ÓÄÑPh_BíGûcWxF<‚ñHŸúÖÇ~ô¡ŸèO'þ/Þ÷>꥿iYÛýçœö‡Þqn¿¯Ûèð´ó÷ÌMÛ¿þÐ7úÌûþN µÞó=à+À¿J†Š»8Wà ^8À€tHG›|`ïû¾ýû¾`…s€¿ØÀÄ@ïÃÀ 4”=S·E3¿‚›¹ ¨ Ös½z¦£»~Û0öhAöÀ˜c?ýA`…3ð @A3@%|c€‡vÐ… à‹ðrxb¸6?Ëw`‡VÈ´ ,Aé+zA#¿N« ñ3?ÿˆ7{{AÐ;Ø7yó·Û{7¾pC!Ⱦ¼´Zû?0¿q˜@ D@Â@[BE?ðK¼K ¿FDÃK Â3”D44ÃBŒ¯I”=aëÃF{¾Hü¿ü³?Rä‹ À‡+ÈÄ DD:[DW$A1|DÄÄR\ª0ÜDBïJ´˜9¼F4Ã`Cþs:Oì‹*øÃE@cÅ:{ÅEüDG´Äý›E\ k¼ÄB™Å>óA7BŒ>ò{¾Z8„C胪ÎC‚Á,”Åúú*yð¾ÈBä.+@‡yØÉÖ*·³,”m¸…h@‡h@8˜¶²ó‡*0q Vxbð‡É;¾hà / ‡zˆ` iSOötÏzèc O Ø…ux‡a0¹½Sxo Ëî"†2 õ‹ðOÀà‚±û+c°…Ë$³Ìܰ@É;hJ0€;È9 ƒ<˜ÒLÉ9Ø9Hͧ9~pKxÍØœM±é >à Ý ‚àƒà‹N˜ä ³yIãô‡CHRÏð„DàšDÍ >˜ ÿAXªš”¯ÉC‚2°/ˆ‡ª»º¿òÉ¥B9’³Pô ‡ P€…Á¼Ž«‚u€i( ¸ØOs€Là$X€ ‡Œ{O?TVà‹i† @‚{ Oc†°e`<˜i P¨ÓÖ Ñ¿Õœ$O¿0‚}˜ÂÂtظ£\³Ý0è˾°å‹”M¾Ìø+)°‡¿0RÙäÒDH€8RÓ!ˆ€Žô ª”ÒEèƒåܔ٬Ök•Í×x€ª‰€t]RØ\ÓjSC ƒx¸W|=ÏE›~ iè¤ð‹Åk-<}¸k»¥Ú†ÀLÕbÔk«mð‡`ȸÿt(‚É‹‡wÀ‡Wʾx…e¶……†-Êã‹dØÉ à‡"à‹#˜¾…p(ŽåTT¥ÄYýЛŒ‚í‹qYš…|è"-6 V V¿ä‹°Q¾°ƒ<8àKý«$ØŽ•Öãü7l¥ÒÇPN&­Òà›¬åRãt€# %¢Œ@[¼C€Ç`S˜3 hº­[Ó[´7P:õ®-Ò ½„ݸŽ{OÁ}XBüoC‡#˜<)pYP‡ à‹'ˆ†tPyxÛ³Ž[Yõ‡]`s0s8‡x09 °…r D­Ç¾°×x¸{¸×'€]˜Ýx·=ë[`ÿ `HG,vÈ‚­553ÚCÚb=VHÖ¨Í;h- À‡ð‹DñØœÖÅÐÚiå @[?ðV°MWq…r%[î Û>˜Ò)…€wxÛyÛBz¸_ü=Ï¿ÐÎ.èÎïì.ތ髾ë›Y¿€ÏÌ3>2èNÃõÄõÅÝO(o  €{Ђ싅ÿ$\ͽ¶ð·€“õ àøûG03p]¾˜Û@W [ €a¦áïã],@‡„lÄd˜‰,Zä}0å勨Q98Í9Ø3¾ŒÞ‡4Bi@>?“š èlÝ^³Ö·YÛp˜ÒÉpÒp€Å-ÍÚÿ,ö‡Î!‚!XÓ3=„¨yÍE5œÇè»Øc>žÂ0Ü…q0"€îì "ìañÛÙat4ô@œ¶æ³|À”ÏÃMÜÅõþô‡)¸à€}˜tè`î8˜aX#°ò<†d(ˆ,à‹)˜è€r(ä=#ÂE[HZí ½4Þý]PÅK«LYì !b+bÒMm&†^¿*‡ ü,ºâ²ÅÖ7N?ˆøMÛE6éäƒíEß4ÆÞæD„AXÒàdãê C`J˜CÂHÂKëÊb¿DD–6u ‡zP‡]äO£·GƒHö‡ÿ*¼Â,´dÆdøÛdð†]ð10nx†`0eˆT^Pz؆b†Î_:‡"ô‡1@zp](Ã=Ä_ÞÄ)hÍ¿èéDÛ†ƒNè½`ye~¾4bÈ…e6Þ2sf[æO Ài ‚ïI¾H¾p€zÞ-¬Æ3,ŦëÄ;ÅTÔ¿kkOÜizŒG²üGƒ„ȱt4b€T³fk¯k¾X_@dñ£iX€âmf¨°[?HÄã3´÷´YÈ~È äƒ·yIy¶G„Gbëd\Æq @²®¿ÅöG|”k‰„Dè3‚€%P4ðûl½–mKü ÐU´&Æÿˆv0JC1ìÆ0YŒk¼êâõ‹ ¬Càcä®Ì&EÒ¦G¾k¸Nk@4mœüGyìÆs4D uˆtƒäFæ¶^È€äîLo‘îáIjToµFn ;킞뤮os”Gú–î~ðiDíäæF¶žnPKívLðiî]tpùÂoàÅc‡pë†ëÿ~pÏFoï‚ÌoÎNqlñÈê6ÈlÈ?p‡ðÄÎî©öp±\l!r"/r#?r$?r ×3b&_r(?±$Ÿr*¯r+¿ò&rÑ–í›dphD‡uà (´ž±ÿ2÷HGcIHÔIOcs,óÅvs8osÐÅêB[ƒ<Ø¿úÝlîö[°â(ÍMç „(íp‡ÍEPÃòÚn|Ç÷‡ Py€‡–¸ó#ã<žàz˜)ø ¸L1Îë‹Qš´\˶”o€JXó:ß3³œs+O5HœuZw4\Ïr<Ãs=ߨPE„@XÓ5Fw W0%,Ê„!ð°x5cL9±1è ¹‹¸Ls#ãt¶x2¸‡((²Rß­ÅlÌÇŒ0À4ŸÌõ7·uwGr¾àzç‡[Ú”ìÏ”fÑDVMI¨õÀÑ<¸ƒÔ4VμzÉNTÎ`÷ƒÿáŒIØ _ïõÞæŒçØÃZìÍ>CÎÚìDætNèÜøðMFGºáD„@PNÚäÍy&ÎuùçÎBÙ‚nØ­{[NÛ|Þ9¾P#}vÏp£0â 0¾é\ù’o ‡vha¾Øv¿Ð-Ð]Ïö¤BuP[-”öú–P 5¹lÛ¶nóž ¾†hà‹ýz«'ÐÎ ûÍúå fs6hã‹ ÀP µÀ³ç6tð6ˆû¿pz¨oaFõÿP¥{¼ßz‰îú»÷‡Ð í‹Õôi¾ˆi m †€¸÷´¹/Ð=³û:OO­§?Øûg“€=ûû ÝPüÿnÛ³Ó÷4Åz*ïýL«wzïrÂw9¿¤QÅÑ© M9`ÞÝMÍØДƒRCAEȽ¾ðÍN$cEXߨÓ@0+×"]ÓìÅMÊð7ŽÒt=¸×0Ó!(S“G€tˆ@þüõádˆ"þ-2d)âh"‰‚9L¤p H2ðu iÒäžI@üQHáO) íhÈÐ4mîq„RM{ °'èɤJA"¹weA, [ðÃ’ ’+ȵ¸-\ÓX œ6lBÓ`Ký™E{O­?cÒBXPö dv!að£1ð ½·àĪÿ•kÙ³i½‚KÖß1gVŒëêo–4 ”pÀ«÷äàMŸFõg‚ß"ÎÁ*œu«å¯aÇ&v W.]» ð[’›0 MÞú`|°qã†ao›Ö¸lÇÆ#O®l³fÎÉó&ïŽ<ùh¨Xº“/Oþ»€“üø­m¯ÔøZ;yl TàÏFž9óäià¿ äaÇ@wäу „´F;´—À"‡$Á"‰<R}$²ˆ øóÃ"} $È"&"ˆ*D¡ „t‘‡þ$ðaˆ<àÇ"P¸ÄxalDÀB‰$ðÀ"("Šd´¤8ÆxR éxáþ@ñÅZG-ÿå¥?; U˜¸4¦?`„q?-Fø²®Ã®8ãþPn9æšs>Pû }ãÞgorÊ .ô¬C†q‡  ­q´w{î»oÇŽyàæÿ­/þõÞ 0À·Wž©Êc  äÀ~æþ@bË@TDpwàE‚0DIDð€)"XÒˆJäDHHE/[DÌ^”#ã¸hI?¸á 3<e Ä ±ˆŸÍLHSRˆüѤ'…‡9T /r‘žYtO˜`£Šs”:9€B@€¶&!ÇKe:“—6`&È%E ôx#éDë$"ààC{hÁ>±€HÐ'Ø= Z!ñSªd') ðÃIB;&:¿øÑ HöØGü1‘Û’Tó ‡8v¹ËVs9Ì`'H6ê{~ÂWÿNsÀ´`  €N6/}ˆ#×"™EX5€Ï¡X0cxOèѤ.ÿ8.D­ê|¾\—¬JITš!9¬,¸`™¿üñë_üóßÿæH°ô$'a “ÃpÁ3?ûÉCóp‡ôÌa ;ˆ`0:ì dgz~ EøÁ&Ò!  PD~Ž‚€@T¤Iô‡ ®†&±Ù †À%@ˆÂAL¶Ã"¢ ò‘B‡È4#ºÌ3ÂE2ÒÒ—Æt)P€‡_r¬ó‚[„O.‘€@{H!ÈÆ ÐD? ÊQ@P€ˆM)€ZÓ:ÿu¤)VX®’¼ã ðáÀ>fà ´òeY„±#Ø£tˆÀ4KX¸#%(@ ¤2àƒðAå\@†{D“Á«^ù HÄ*¶°„¥¢$CW d 3(@Êá;QÖ²úc§[á*WYg ÷0h Z–´ƒ5­ûØÈLdð“6ÈÒz4=ÁmsJ ¾mR}åRí8\ÑÛ×ÆÖ É©-8ÁgœÜƵ;¬8Ã8]é§s¢s),"'èÎ¥çuàüó°|NÌràO~6Ì?–¤I~Fä!A0rö>¸ô}ˆúPS>ÿ\èCƒ@D†KCSÁ¥ƒÐ ?24³ADfyÀ‡™õDDÌÈòAbÇI‘ˆAãµd!ÝèÆ,Ö±,âw«‚$h¦¬–1(3¡„–B”Pªö [[ë z¸ã !©Â:ìQ‹ˆÁÜxF0üêç!Î/=¶Q `¿ô m— uÔãnI.ÜÁŽ®`–õÐÆ8µ uУê0eïœçâZЄåëú‚cÀ£º˜À@Æ€6ëÂ7Œô¤‹³éN:9SXs›×‡šäxcþ5žýÊÝâ–zÐé±À¢ýèö…£`þF4˜á­]{zÿÆAvžÓl`XsÉ0Ϊ[ýjãÈšÖ è®[NwÛ×À†orÆ1qr»×ý¢o}Or߀X4I~›Zp„ì  gcÀ!.pNÙM~‚\~/Ω9àD‡ð{(.òVš‡` ÏbH¼Tñµ Üàî8„5~b´†àëÍ_®q‘ë|ä8¯yȇÙð›;|œ’¼¯Ð~7šûü Ó ÂÐ _ò0}êV¿:y.€»b=êºÉÃÞTŒ³1ágθד‚òúJ|â&'yØÑ^è°ó@…ÈÇÍ>wß¼ízÿ8V’•Pyí ?:|Ú>qžÇœñF¨?d%ì½8ÿüäÓYeÆŸÝT——<å5ßô¦=ˆxËÿùÉ“ÞTØ@Ú ?ÎÇ ô]¿ýÔ«ðÜþëKüa‡np—ÿýäd˜Ëý—üÅW¡#/;êĹÄËgxÞ-ÎÖ„^“DY+/vÙ+½øÄw~Ü9EuÄ`0Ü+â/1øcýíCìɯÿñÜþîÏÿðiêÍQÉ^é½]âùþÝÝÔ) îE šžïõÜñIð^þ̱ÜΡS:àÎ! Êß1_ñé_¢÷¥Ù™af_Ú_Ò ñ ù­` Š^ð!Ý >ŸÌ• Ïa ^Nÿ .a×Uà×F¡N!V¡^!f¡n!v¡~!†¡Ž!–¡ž!¦¡®á:¡¾!Æ!:±!Ö¡Þ!æ¡î!ö¡²¡¢ b-È‚ïý!"&¢"."#6¢#>â¢$N¢Àœ?l€<(SÀA"'v¢'~"(†¢(Š!%–¢)‚ÿÌ2â&Ž¢+¾",Æ¢,.â)Ö¢-Râz,˜R}Í¢/þ"0£0fá-£1¾aÿü‹IÁ>ÀZH°ƒ3„œ? #5V£5^#$£6n£ÿ¤¢*úC ðà ˜Ä4Ü…Ú¥6¦£:®#;¢!7¾#<&E*šÿ„åT€ò¡c;æ£>î#?Æ£?ú£%ú ƒÂ?$B&¤0þ#Cnã<†Ä/èÂI¼â£B^$Ff$'6$Gú#ȃ^™„¾”Éi¤Iž$JîaG®$7®‚/œ„ÖÉZdJÖ¤MÞd²¤N£ 8ã›íIJN%Q%î$R6dN£Q6¥S¦dRFå->%UV¥QJ%Vš¢Un%W¢dV~¥$v¥XŽ%B‚¥YÊ!Y¦¥ZªãY¶¥®%\Æe0º%]>¡\Þ%^"b]îeXæ¥_þåò¥`¢%`¦ažá`&æ[&c6¦*&dÚ¥cN&eed^æÀT¦fj&fvÿf{l&h:¦gŽfR„¦i&i¦&Hœ&kú¥jªfkƦ\¾&mºÝò`Úà9²àææï!!n6ŸoÊnâæ áþµ áI£ø¡ÙRŠ`•eßø¡ ÒdFÖ&væ¦r §tjÞLöÑý¦ aê  ¦ p–§Þ¦o¾`s ]ëU¤qš t Wf'~få2h¢Ã:T…Îýf)¦àZü ú'€‚‚ZÅIìç6âI@¨djd~V(CúŽI<9 Ë@@C.T U0¨ h¶¬G>¬.Ø¢ß×5Á­_0ÆZ„¨IØh†nè6b¢&‚NèuZ¨¾#††Ä2¸ÿJHx(ˆ&èˆ"ßÐFH¸ÐQg¨òÅ=èÕŒ¶ŽN“‚Ä‘¾£1°bH”)bä®é@x9ÔC<Côl€2Àƒ :¬HLÀ=ÁI(©{HÁšµƒ* Ä—úƒ›Â©œzÅ-D:Dà ġu3-…, Ä0øÕ§Æiôlè–ê©ú ©*\X€Ÿª &… Ã<”ŽžÞ©2ñ…0ôBýÑ(w¡§†©?tjšLªIª¡"ª§¾©¬Š*©š*ªæêªú¯þi ^/‚Ä.¦éE²éš.b\FflÿFgÀkvÌ+nÔ…9j<ÌÊdôÎg„o¨(HXêZ„Gi<«ˆúƒ»ÆFcÐ[(q(E«®FÍ-,cÌÆc8GÄÞ«n´‡b‡¼‚ÄÃt)ªÁÂÞ(´lµî«¸Ž£Å.KÃf,ÄÞÆ\àkH0£O„Κ4~&Q²k~*K¼phÑ‚„´\J¦ „3 ÃIé@\KR0Ã-µG©lÂ&K ,‹«Š'’Äò± ‡ÎÖ2Ë«|­?HJÒúCµxléí@ð C˜l³¦˜f­´Jmµ:mÔœm×:Ë'EK¥(mH„ã8&®8’c¾*EQ ­b¦ ø0üèï\îîTÿÎådÎæðŽ3X¯ü+HdOÙú1<ÆZÏItjåž–Þrô”Žðñ éüÍòÀîó,N÷pnõ|.܆„ævÝ:T³òÙÞb­I˜nµŠnòènêœ,âÈîôt®õtŽqÔ#=òƒ=öbÐJ.<2áÔAÓ.AÃ6¥Òúv#™€y8Ã*”Ç7uG1y¬@å8uÇí¯ ¯4 À²™Û4AJ¹¨WyðV-ÑBçRú–›ú“½¼ïÕKrp“Ð-=G4<—ä¹Çÿ’Ç Û¯1‘‡üv‡«/w×¹Q°X°y dyàp×ÉæMšo^W_רȖûÿ'—cAÖxG “z‘‡s•ÇTÁ8±×ÑR]%Ãp{Wb—“o €oW^ WÇð5×bMGGÖ8‹k ±yq0Üà /C §C cñ]²qDqw4±ql±—ð·1/×GD–Ç$“Ç{åÛ¤G ¸Áp»¹C­±Û¬ò»S´9Zr 2¼Iš¼%GTyxh|ý›á[ûÄY-|›%Û"‹ ™š¾Œ±›tr/ À¸½Ï)Û²yô›· À'‡2/À:äñ x9<1ü±À™œu‡7ç²+Ãr*Ïow³02ÿ²³™2£¡ÿ²q|ä ‡<—‡¾ar&§ä&ï3?ãÏÓõóV@'‡@t?ÿó>´y¸dy0tÖm>çóI4EoòëUôÔÑží´F³FïóE3aG+Aþôä¯yèïáD£äG¿4L4’üÍßÎt¾Ô´MÇ4FãôG·ôDó´P5QµQK P‡æQ/5S7µSÃtRƒ&S#9Ѓ3<5V+á~fµ"îEõf254°BEÓ‹qÈÀ2È=tƒ}ôiðɦ(Ek¨.qu×™µqðèíµf2µ9@Eã59øB`À´5FC©”R)E©]ß^G™î5_SæQ:àÿƒ; ƒ1$²1¼;äBÝ0q¡êT9ˆ9°Â;ƒqĪœ €¢2ª£Î/„ypÀg‡öhwñ[«i¦Òƒ¦¾O¯ª°Í’¼êkkklp­šª/¯537¹Z@rHª°pi#ªÀöê@w·ÂÞ:S7øŒ«¯vnƒ¶h÷òl7ê£vÇ.Rve;&S£`Oxµ²8þÓ À™LÃî܃ÀÂÎOwÀ9a`ÈÅÄ 4 Z°rˆšþ d¡^æ9Ôÿ~QÁ«â^wëTL‹ƒ$íŽÈ©¼x—‹Uè—1àí•àyÌѾ?^._À4ä)o’,”s-ÈýKªôŠÂWþ$£AM±@_úCrï¦W=}¼ºzÐGá®—}fasÙ÷½ Ÿ?‹æoÈ{·÷Á½Þ C|áùÉW¾Vf€‹V´mùy«ÅZ·Âûè_ûÙ×þö¹ß}ï«.áÿøÉ_~óŸýéWÿúÙß~÷¿þñ—ÿüé_ûßÿù×ÿþùßÿÿÿÿüAPÀPÐ#P'+Ð/3P7;Ð?CPG ÐÝOSPW [cPgkÐosPw{ЃP‡‹ÐoðP — ›Ð Ÿ £P § «P “Ð ³P · »Ð ¿ à ±P ËÐ Ï ÓP × c ÛãPçëÐSð ïP÷ûÐÿ°ó‘ ÑQ ‘Ññ'‘+ÑQ/Q7‘;1ÐCQG‘­0KSQWÑ A‘_cOQkÑo!ù'þ,pÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£GŒX­øH²¤É“(S"ÄÀoÝ-•™½cÓ¡ij2ôöEçG$æè9#x+˜OŽEò¥dÙ‚ ”iô”U8…¦Bgü²j¥uÒ—™‚WÄÝsÇUcرeòDXì+Ã(V§ €ÆÊ`“'r3vS®C¦•d#5¯Áª L˜×â:«ÜÛrAߌ’)[V¸ö`Û†~óš£b¸´ÁÐ ¤R8¡…]ëÞ ³0ЭcéÜá`·nŒÍÌ%¡öíÜ» n-×ÀøJt‘†pô‰3vAàëØ³%ŠÿãõPŠ7zíÜ"ïÐ[.só’m øYá tíò¡C·J`ðáÅ)dznýÇqmsK4èD3ŸÇ ƒ;è#èÌcÔ@/HCO7Æl¸M½’Œq¾áõl´%„vÜ¡ˆp è¬ÓÚŠá 4`zÜ—ß~ý)¤A¬1dŒ4!X Ì/µÅㄌě”TŽtŒ3UŽÓJ”SV9Ðr 5G7e´Š43$³‹@K6ùdDìc…CHÜsÅ!`ášží­#ƒÒ CÐD€—@[vùeB}þ(¤\®àe‚áT À4u „iEÐ4ÃLЧˆ$ `"˜Y ÿP§“Pºøfœs ä –bFªé¤%EЬw P) ‚ „ÚBG”¤BðS„@GÌS›¢9ƒ­@ à3¥aŒsíAd.dæ@^ˆ#9Z´êîí´TÑ ü$·0Å4„¯¾œÉ"ôL´l·ß†«¿!,Âl£Š@³ô+*©Dm(@ üÈ P2¬–x¢®ÛÊ+-µÖºøn¼$ä0¸â$¬@ó¢,ç=j$?M­ÖÚADðsŽ9æœO‹Î[›Ò&t,Pð,M®Î ë=EAm‚!úôÐE Q·{$MVÎ Í+ ¡}ÐÚü´-€7—ÁO€-ÿÛ´Ç@­ÐÛýýtÔ·úêÅ™,?\ °KÈ®ŽÌ›Òcmt‹ãµ±aëÊ´Ó#la™—Má9ÿųAÏ&Ä’ 9S$A¶»ìíÃ1óv;Aå*dµ@Ãà’ 0Ë…ñÎnÑ7º8„3Cз'°TÈ3íèžpïMÏíî0'¨¸åŒÚ¸Æ²Ûd”‹å¹ä|CÊ3_Ûï/C|ºýü ]AÄ7î¹®gÜš€ò1¾äÉ(Ab,ߤ~IF¦ÆáŠýMÍ!ÀÜñ&$ÏPІ/ Á Vð!T¸‡.ƒV!¤OVX® ΰ†œQÇ¡ÿ¤Q«ˆ@‡Ñ`—:H©{äp‡Û G$2‚¨¯TÀ4„±#ØcC¼8†0úýB-¤ BÀBz0‰R$ÈÌX(A5ˉ:ä¡@ŽØfMA+ü(˜kr¡Žzœã oÄÝCp x´CH$𨆠àç 8pqŽy£;T"¤!)‘,ŒcBiAÈÎãR&Ä”¨ä .ÊáIPJ$î`ǤéHH.d•ôh¥@xùÈH&®ŠŒÈ6ÔAz¨#f¢Ç6Š<¼Àäx1ÌX ˆòkäd-%)búRf;ú¦+)ÌàR— ¹@<ΑJÓ$èŸD¤¡T4ptÁž hDˆ “ø#G¸‡@*%܉Éû'C'ºP#Ô@2€‡ *Q‹°Â iBº!¶©£"MéT¨ Žx ãs%9hEºqslÔ$!ùþ,¤ûùH°Ÿ@‚þ ¨paÃFì!ùþ,„'eû ØÏŸÁƒ*\ˆà@†#&t(P¢E‰/jdøp£Ç†?Šì(Ò#É’O¢´¨reÄ–.9†Œ‰q&Í… ÞT˜s'OŠ7ø”@èP†EM˜TéRƒM.*u(Õ!ùþ,„0CtH° Aƒýúù[è/¡Â…6”‘¡Å‹3jÜè/@†=‚ 92¢É“'!ùþ,t cý H° ¿v0Èp Â„ >D1b“‹M*F ÀQãÆŽþú‰ÙO#ÇIŽ4 R¥H–(’ôx’àJš S¾ÄSgIž6w~<ÙRhC¢5Ceˆ´èOoB-(uª¿€!ùþ,l Ký (P€Aö[ȰŸ¿ƒ6\øð`Â)Œ8°!Aƒ2$X1dGAŠD¹Ñ¤À‘®tÓ¥?˜)ež¤™Ó&Ζ!ùþ,b Fý HP€Áƒú)\Øo ƒ D‡nˆ úC8¡Æ JüxPdF’!;žÔXReíR ÉR¦?šmât˜2 !ùþ,P Yû ØÏŸÁƒý XÈPÁ #JñF¯3 Œ˜ðÞ•!°,4H#dž!šŒÈ¡Ê•[¦ÜáW\Ò¬iž»3: ò4(“äNžEý½D:Ò_@!ùþ,G Qû ØÏŸ? 8Р"èÖåCÈP C„E& 0HРG7r´èÑaÆ’ K<é1eIùP’|ÉrdA•ŽÜ“yó%+o' >, ‘Ÿ W²`d`¿ >¤èñá¼c%/&©2¥@+?ú !ùþ,¼ h•ý H° Áƒ*\Ȱa¿‡ #JœH±"‡-jÜÈ‘"Æ~CŠ)ð#É“('~̘²¥Ë+M¾œI2fLrê@³çB›@wêôIÔ P ó’mØY´iÉ£7ý ê´)Ô¨ôrVuzu¥@~xn-ÚU¦<­c‰–Å(ðÚ´=×f¼ð.M¹©ÚÝKP/_¾~ÿ¦ !ùþ,ýHÿ›H° Áƒ*\Ȱ¡Ã‡#„‚®ŒÄ‹§õz A^éú¥xå¾~ñf ,y2åÂ(Êìõs7… |åÂBç°Ì½(i9×l •1U¨Û'ðhÒ¥ Ÿ¤ëÖ¥Ê*‚SÖÕKFPK?  Õý:x–Á(ÒÀD«6á¯sN >)÷ê^,‚Rúua赊A+ý¸v2Ù“„ûVO™º|ãü ”F p‚WúaaèkÝAWüâ”rE?+£KŸNØ¥_¸¤ì  $6­‰+¦Éô;¼p™·ƒÇÎ!äw· ñ„³úI~&®É«sPš#WÙ¸†Í¤§ì`•~d ~ÿðÖ½éŽ5)ׯ}{ÏŸÌSÉðWs‚P à£%®1/S„‘N:þ( QŒdMxÑÏO¸W>Å d ;¢-Æ=fæ^?V@!NKÇHÑ„ˆ$š83_}Tχý ”ˆQ!O9Ï!$Å>¹ ôaBÞØÒ㑈Õ&¤„H6‰Œ1:)¥CP2™?Xf©å–\úCP—`†‰e•0Šif˜¤©æ™b’Y%›pb©æœiÆ™¥›oÚy&| 'žPê)fŸ„ h™‚vIh¡lúa¢]vcL0inFš¯$£¦3´êh{r‰Ä=” `)¦š¦éL<ž~ê–$LSê©dºé0­:úª–ì2륵¦*€3­üéê®rÊšf4d¤™‹°Î¬‚ì´]aO©¼#é@+-µàfY 0i¾à 9Ïãm¸a!ùþ,2û:Àý H° ÁƒìÇP¡Ã‡2œ±¢Åƒ3^ÜX1£GŽ zü²äÀ‘#M–D‰R¥Ê”.c’Œér&M“6o†Ì9ؾ*:!òxîK“&A ²l)ðèѤJ—Rè)Ô‚Rû¬úôêI–¹VõêéV±\¯òÀ¶­Û·j|K.Yƒuó ¸‹W/]¾sýÚ,°.¸aÚĻЖð@Ãã(H¶«±c†Y±âÎòeºàÀ°E¢¯ÛËþ!ùþ,û˜ÿý H° Áƒ*\ȰáÁJœH±¢Å‹6Ù¸1£Ç‚BŠI²¤É“(Sª,ùѤ?Ž0cÊœI³¦Ì•8sêÜÒ#J›@ƒ ݸ²„*$<“òüBE¤Ï‘F‘³½~b`jKs¥—,#©¬ÒÅJ¤Œ3µtÁ‚òlÚµ*Wh™¥ËU‹‘2j™ùd•SŒ%¿†Ü褗»~õrQYÌ,ý À|7«kÊ#´LŒ„’ä ‘0ŒÀxåVÈУK§¡JLKF¶h5 ¬H¼Vô¼X³æ¥Ùc% +Žg¾ÈL>³Ì=Égµƒ¥ŸË(YU1I+JÉ^Æÿ/e•3!JŠ0ó„Ö“‘,zÕØýT{Ï&¯úiáØ¯i¾ÈàLèôÓ2ÑÀ$F?»Ü³/M¤„Û %Å ßHVÔ²K%ˆ”ᆢôJ¬ØRF "}a……3àÕ‹ ôeÔÁ„ÔD:ÏÀÔ_ÆÔ#L«ØGèè“.ýä…/÷Dˆ­˜äD.é‰Ä‚ Uä‚bHWf¹¥I5ôBÆ .´ÒEHV€Ñ¦t/!~äOPîFE?fè¸c?ü䓹øÉ§Ÿdp´.19ÑrAÎF¬ÈãäIZ”Ggœ„Ë{$mмPØAetðÄb±×HY¬ZcK•îÿ¶`zö×M1VXE¹Þš+t®ÈóDL]ô3,GêÙD1ÞLjÒ^˜T†&½ÀË$Y‹íIQÌ"Ò*XtpF/ä’eH!ÈÂVŒ€A»ÛýdQëŽÈ‘îT“-ëÀôD?`lŽ0ΖT$™`B-P˜5´P„*ª<ñÄ‹TÄ¢v@/F”PÅ-‡T §!EÑJ•¯útðnPØÓMTÌbÅž8sôc²¼ã„L¿¼3d±ÐÝ“gJEв å’ ƒ e¼… @-5Õ"q‘‹n"ÕœËD4C/_º K#ñFRÒ,7á…9üàãÍ¿8×(<¯ÌdE:|Ò‰JK¿MTÑ“,a+u ·L¡xcx—¶Ú"ž8póÖ3Güþ¼G+^Å¡»ØOüi®:L¶„ñ9v¥ÇúS&e®:½¯Ó$ûî·Ä’í·÷“;Mro¼E1|ÝÇ7ïüó ýAËã ýõØg/Põ{jïý÷rr¿#øä—O‘øý!ùþ,mOý lÒÄ_¿~*THPàÁ…ý5É•aD†QZ¼8°`ÅB|QäE’&9ì—RåÁ–_zT©æÉ~Ðü˜s§Æž>¥y0 !ù þ,oDý l"°ŸÀƒ,˜°¡¿| :Dh%âD… %N\ØP#Æ‹þ$rr$É~&A¢$‰p%Ë‚^”2¦Lƒ6Yö !ùþ,pqý 诟A‚ 4xP!Á&Ò|dèðaÄ& ûU˜Ï¿|5n´Ò­˜•BôÕd!JŠ!*|)Ò_Ë!m6¹‰“áÎ]üɳbF¢A'ý™4£€§š2„ú4¨SªPhݪ!Ö§\¹ !ùþ,tö"²ý H° Aý*\¸°_B†:|±"Á‰-VĘQ£DŽ#rtòãÈ’ GNDip%È‚Mbztùr`L™U’Ìx³‰F I ìùS§Á|dråË—3hÍV D±b¥[1ª>ÚSš¯žN®ÔÚñkÏ&^{Êz×’¢K®gã:÷ªeAŒpãö´µ.¬H‚zãÚ ã3dàÀ%ëM¬ølI˜L¹òd”‘-kP2 !ùþ,iàY-ÿý H° Áƒ*\¸°Ç#Jœè¯ŸCŠ3jDhñâÆ #vô²¤I‚#Iž\ù1¥J–0'º|³fÙ6s2œiQ§Ïƒ*éR!ùþ,¶Ûwý è¯Áƒö3˜°aÁ….„‘àDŠ ¼ˆq`92ôø1¤H‚K 9‘dÊ•,G¦|“âÌ”5!Þ,™³ßN,]΄ÉQèK¢-þôøãR8/*Ý Õ$ß*¢ÄñèP‡Yo‚Íx´"Óˆ!ùþ,½Ù]ýùë'° Aƒý4``Â…Hø¢D‡^ĨaC; Ü’¢Çƒ!#~D˜‘$K…. ¦Œ)“"Í…7GŽ\ÉR¥O‡?%~4é¤PŒ;UÆäYô(Ĉ !ùþ,¿Ö LûùH° ¿~ D˜Pá@† BŒx!ÅŠ NŒ¸QcF+^ìh0@È&)¢Lé¥J— ®„ypàJ›&YÒœ™’%Nš }!ùþ, n¡ý   Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ#Ã=ŠI²¤É“(Sª\©P€KYÊœI³¦Í›8E¾ ™³§ÏŸ@ƒ •¸3æÐ£H“*]Ú±¨?¦P£JŠÔ)Õ«X³j%iu«×¯`Ãì*¶¬Ù³IÉ¢]˶­LµnãÊ›.Ý»xó"| ó©Þ¿€é‚4¸°a³ƒý^Ì8k@!ùþ,ðÿý H° Áƒ*\ÈPa€‡#JœH±¢Å‹3jÜȱcdž CŠÙУɓ(Sª\™1¡€—B:ÐC“äÀ—qÚ<Ȳ§ÏŸ@UÔäæK¢ õøØi4gÌ‚>ôØ JµªUª£"0ª•áÌ­LýéT¤(É«hÓªÝ(ð¨§b(5 óéLš4ˆšw`T¾Eñé{·¯¿Áxõ8ˆ;ÁÓº8×Jž,9®V¸º¶…¼¹¬Î¨ 8Ø(=×F‹Uý@çQ=¶9SÞÍ;hܹ9Ì­§Ü¥þ(ˆtàLž…¿ŒÚV9ØÍØabïͽ;ʽz® ËÔ¼¹îf=µc*_ì/*æÈÇãò}ûÄRÁk[~dïx‘?'PoÑ“mëád@e ´AÑ9 Ü}é5wXþ=¶`nþ(âˆÝGÀ~îafœmÔ9¨ É7ÔkáQ7ZfÀÉÅ!‹Šåf‰@¨Ú[Ú i^\GBWÔgx9ðT„Ñ•’þ6{8Òô˜–>jä—½¹•ï…Õ”™ å˜lJæ{YÁ¹ÓŠp¡y𠵩gZv"Ä’š‰'B{ZU@!ùYþ,Pÿý H° ?*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç ŠI²¤É“(Sª\ɲ¥Ë—0c–I³¦Í›8sêÜɳgB™@ƒ J´¨Ñ£{"ÐãcáÒ¦虪0ˆ…Sõ<ðùP*Õ„^¯ò|š0ëÖ…V¹r4k3ÔªoÕ @J·®Ý»xóœ¨'þƒøE;!Ó¿>|ˆÅ¡³`õ xx!SÅk ¨œ3EÁ ¥N^øXîFÑ6=+T-W¯ë×°cÇ–¨xtÂÚ´õ8 ­»jᲉ#D;ðoÃÁOK½\#艊w¯nú#kR¥GÖ®V¶÷ïà÷ÿ¤¬™3DóÈIßœ|xÖ©g³rðü¶üÛë/So¨¾û÷[…åŸýæØ}ô½×ÛyšÕgØTÚ=Ð×To8GX5`Ñ÷›gn••†[I¨a\Ru(@ŠÕ‰çâ‹0~nÓÙÖÕ‚ÛñÆ8Иƒî`Y\Šù€€bB¸>Ψi%¤‡ I¸Ûgy¤I.¥¢CÙ!ÆTI*Ù”gZ"ù‘TA8pädŠ=¥pæ=‡ÙSqV¤’UjµPˆ-Æ(è „zìA·ä~RU„èuKiG–‘º·QeV'fBúP椕 ¡]G)Žöùvà©P…ÚQ”Œ!ÿ”é©ÜU–V£ f§p4ÚGªO…+ì°)AÔë¿6«”ûJ‘Ÿ„ýÙœ’ Jç,F³ªiØ—Ð2Ûœ .hªCËÊ:­”¿ÙzUv„^¶\škІ™[›‰Õ²å&XÝ\Ä,0±ÑÛ˜ÁŸ­7e¾Íët;Ô­E×Öç°¹®¨ç~-¬ìzãræ¥a~ëÑ»ÍÕÇZ¦dåꀄ§ÆWؤ ÑÜÚÀ8ç c©ñNW¦“;rŒ(û\cdžúØáÐuº%d¦²æãnÑiœti$Sõ¹1sÚÜaR]ý%oc[J‹ÊÔÓ¾F¶•U»15*f×r¦­}?ó¬bœdGÿ¤óß€ËæÍ¬VD&sy'*‘ƒìr–tì.­™ÖíR­×l˜9µ#΄œSȧÆY‘U‰ùÞh*ô¸sNó½%‹Å¢Úó] êhõÌlê .üðv9t÷À7Dï|Ë3ä1WÏÿûQóÒW¢LKüöÜeü…<ꔘõã[oþùè§P÷ì·Ï’úðÇ/ÿüôwäþýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ ¢ÿ‡ø¢úñˆHL¢HŠ&:±‰|à¢%ZñŠXÌ¢;B †BƒXŽ’A¼o‹4AÇ:ø4Þ"ò{#/² -4DŽ Á#üô‘ZÈB"]\ȸ¾¤l$ #9”2ž‘")À&,1‰=(`Ž iãv(üà=¦!……4á ÕëdCNP>!T ÇELÊ|¬ ÞÌqI†ð‘•ÒS%C€‘ ȃ ¤BÀŸÄ™ˆdHQ¹‹DB%1™M¶~ÂD(‰ð‚2Ü# ê çE@y –³äG$€wÀBzËP…Cøhÿ>ufÄ„ˆ2ÂÌþ92‹„@> BHˆ‡FÔ|X„F9—C`èBjQ@ ‡8Dé"Ô$¯{í+B,°‹u¼cÀ ÐÑŽ| «(i€`D!V@Ç<üе¶õ­xÕ+_ý*WºÚ!0Æ;Ø‘ pUð‡7¹ØÆÿ>6²Èìf2Ö²ž”ÂèÅ;e×0 äÉ@Ì!r°âÄ-€a@£³lu+\K[×» °£la›Xl¶²E&B&p#($Ó ‡6ˆáWÝrVžÕnhKÚ¹vµªe­kÍ‹ÞÙ*–±Ž…,f5{_ôÖ¬ áÂ8’éE–QU¨?±ˆ! a|Eƒð>ü@ ?𨂀A(‚aDÄB;üá#@‰ðp"!ªŠòA‹Ä\~RH¢>@5ÝiOðÓ NÂ5¥%@pTH"©B‚¦šT##¹Ë{È&%’jS\•̆p€€Ð áÿWX@°€Öo"„ HXÀ ÈÑ „l#PÀ4Xi conðB è{øÕÒ”ñ‹„¨s²ùqÂG<ë™Ï…>t¢ý hAZÇp†V0Ž> `Ò €”ÀK{Ò—÷}sœç,Y~ !€gq›Ü*¬CÓ(†î!‚é @縧<½gWÿ9Ѓu£éIWúÕ±žu­r~ä2!܆šàh…t:ÏÕÖö¨ãZêl£ZÕ¬v5¬eMk[ß1×p–3b„}L`!ìpA+ü¿ gx¡‰HÀ*!T”©ÙÑEôÁP„Œ7ñ‰+ôÿÇ’”‡¡BÖ8#“ìŸ*©Je2P'„Hfµ–dH“PSœƒaÕ¹&€ ”ð©!€,…„!XÏ:*Œb4Ä›yÅ2ü¬ÏW{½üB’¡è„ ]í`».À"{þN¦€~ m€Øðöµ“¶ì³ðºðá„„aÂE8ŠÐ˼/„]_(a@Œ2{Æ|±µ!€`ô9E e<ÞWT>!ƒ+âÏžvÃϽîwGˆä)Ï[{(„–p_Æ}ù û±>î‡GHâ°øÆ àñºŸüëàONß7ó ‰?V°èo ` )(ÿÿNñ #bEåWq#šE¢¸Ã©ùýáŠA£ø_Äîï` !<%6GtKÖdB`JÇs×”Xup75 c†<…s@€ ÒÑd( ( “àZ`Sc6` a-‚*h‚  ¯ðui…O é òðJÃ&zPüW»x;؃ñƒ@üpæ`çåuiü@Y iîv_3Xƒ7„>HZ¡‡\ÒU{ʃe å@ÊfyS¨.¨yüF€U@\ GlÊ5 ð ‘…G@KRà³  ƒ4hƒ8‡:ȃYX„G˜„K˜X †dÿX^ûPy†8„ÃG…x…•(D˜ƒ\|Q`(8†eˆÕ'|”† a„ P ç?ˆpV~ …~fR÷ç2å×Rr"w"U'çq)–bàr d†0Xs{psJ—€ ØsM'Pt@ B0CwJwtI×d€t‘Wöb@îøŽ[ר·"Àã&pZpI±p]ž˜\Ç'wp„ü` íðIOXY—x ‘û(ýHx^(„È…Íçx—.`g… ùo 1â´†q Ä d€¹Plth‡€‡ÎVÞ@ øÿ¨üè Yù’¤ˆ5àvü ^‚‘!‘;i‘p‡‘[˜\ù|‰C™#‰k%éu è@a‚@‚ Aжx~Æ(|0ûŒb@Fbà 51FŒ2¶– ðQCàC`F0‹?°rfDdE&8J·ÛdMÆ€Ù”p aee]v€`¶f¨s P)°d=W Ž q0°š¬ ñfV°p Qï@›¨µîèÀ“SYh°F`@(ÓœÃéWÇ %P10pŠ…êÕkDàdpNg˜›»Ù›À)œÄég¿wøÿ6®€S0Ðåà 1ÒÉ• ›²I››Çw÷@\¼p €é“ux‡yÈÔ%Sp&Àº)¼é›rhœÈù¨ÆœÎ9p癞ë©ÒÐ’ ¡ „Öôp‰  ÛéÇéZØ É0žåI è©žì‰î9L‰ò9› ñ ºÀ¬p 7–þ#?0 EqPŒå˜³èù§Q~áR| RE:rå(…ƒb-å—Ž$M¨˜ÒxSUU@™;‡Nge:T?µ™8'SõUC7‚¸ŽNÆT{pn1då<šÆfµ€b`Üð ÁÀ :ø]zÿµ Å XŽ ©¤˜ êPçð§.éìÐg Äõ  SÛ ôPêy…z¨‰º_“ ž Çí  8è@î  z*¹À©Öfª¨Ú‘|ª« ¦N—<×±Fp”2JI+KÛ´¦ñ´Q[²AµL»à]µR‹>&àš€ú ×°>êAAp‰p|ð$€B1´Y% KÆMT ñ€`p\¯Ð·~+ï„·zû/w›·{kµQ¸ƒ›>Š{¸VôDOtAˆ;¹”[¹–{¹A»=°¹œÛ¹žû¹ Û¹D4º¤Û?¡{º¨ë¹¥»º¬Ë>©ûº§Ûº²;»»¶«º´›»º,·Û»°»À¼.â»·+¼Æ{¼¯A¼¶‹¼ÌÛ¼H¡¼°ë¼Ò;½2½¯K½Ø›½)a½©«½Þû½ÿÁ½¨ ¾äë½â»å›¾Ó{¾¡«¾îÛ¼ì ºï;¿Æ¿ö{¿ÅK¿ú»¿{A¹üû¿ƒ2S‚R¹\ÀDq³ý‹L \,ê³iê<Á2!±ÐÔI?ÛÀ1±)Óˆ³.¡>X¶>ÕÁIeœÂ!œ³ŒÁ8 ·p+s@+MLfÂ襇±è³ÇÁÁŒ*Ä'‘Z«ÕZÑ“þP[ ¶ Ü¿ÌGÊðûÄQìáÃ@åı`:<,?åtüSBpn\ܦg1m*Kæ`ÌÅÖÒ¦{Àµ±¼X ÄB¼Ç"‘j«ÖjG<•á†ôL4P îà cÿ`qȉ¼È3Ü‹þÐÁ‡´6G?•ôwW=‡]5?å&<ìSeì€KÆà\Ü1yŠ)P6 ဤBÉ–¬ ç7|¼ËQ•ÈÄ6ÈìÁ¡Ý€°w`ÌÈ, É8¬Á"ÁÅ/ìÊ>5AÐS]%ÁÆ+rÇpšTAÀÁ$ ?LÓà}VÌË» Šþ ŠÀìÈ%ÌMTËpæ÷œÏð̈yà Œ<üL(Ç>•¦ÙÎÒáÍ-Ç»áÆdœ1 AË4Áλ¼‘þðËþÀ’sñ’¡õÌH°Wð ñ O þ`Ò(­ÒÓÉ9<Å#ÿ±=v 7Î Ý1Ú¼T=ÅÊt¼ÁÁÊI÷ÍÇâùÇ®pùéü™ £…üÂ+À 罸Õ]<3Ã|Å]L€A@pÇ0tHMø¨ÜÍB°`iÚsÐÖüo-;ªËMÄ :«µ:Á¬Î ­°­° ‘-™ìÅi½c|Æ= סÆdÜÆoüÖ™-1Íç, +؃ ,ͳB°ñ׳3»Î«ÛÜs)V&Î4ñ2Qd«Úº}Üý“Ù@À»øÛÜÎýÜÐ}½È=Ý;„ÛÔ]E œ¹|³R”qSÿìÚxQÖeÐ4Þ’,æ]Á,œ³áÝ×==ò=Ò œ³uÔÄÕLßá~/|­;•ß½Â)!GϨߢÝB»Þ áG*Qãà[ à þÞ+Ñò½9à&!±»ÄÒîÄ+±ü]âo»Þà"A´5 â$AÄPð Y}¬”ã®AKü`K¸ôà-äÙ=äqJaL,¹  &žÞÎ'uààþmߪÀãß}É^:ÞE^Þ,îâÏXHîíÞ2,»@-`ñà[žáç­âÍPN´4Oõ O~ËÀd>ÖbÃ3­Å/P)Q ·ÿ°çFå%!ߎž‘u ßrÐ1åt0òmß]ìeA~ÆPQEQ%…Qø7F(æ—òGê5'•R+Õê/%æ!˜TNÓZ¼> /š tØé&a_ ¾ ÅRŒ˜Gì_§å 'ó¼\Íõ\ÄàÓ%Ö%ùZÒí:åàÕWAX†…Xq^±e`9ìç ÜyÛyì!a)a ¶ èìÍè)‘ñ}îpy tspéò=; œçQn“-¢>cb"†$fb(¦b¬Þb/–—EJc F)7;æƒÙP@fF+α*ÿçLKHPVàñ€ §Ào$ãŒÈŠÌÈ~×fjs1íòlÕÆ†lÊÆlÛmzîÔÆgG\o„挖hi’Fi±oâ6dË$ïe0ïe`?_‡Ø&èüîï0T>6 ð!ß–>åy`ZîR`qñ$'qågqWür} !'cEZr ¤)÷+×rs+®t7{³W—uX'Åg>O8 ½p÷€éìóÞßÁÌÉÜÄ@» ³—ôt¿ôï¬ þ`zþ€zªÇz®çëbgôYîËGþ@wE0ñóp»ÇÒ3œÎðnô^ÙOmÿOÚ·&1 ùÐ oÝv¯€÷u0;pðsaypþ0å ?ø’Hâ/d7k¹¥‚"ø#è/Ð","Àß!Dþ@ôç`Q AmäøCc *X’ ”{ö ,ˆÒ!A -dΔPÒ¥?üô¯åK“A%Þ f’eA*ð–]©yò(KÛÂ|•Œ TªV«Ló÷k•?tGrJq1KÝ‚O¢¥S'ï™D¬þªú+‚Ã]E‰ð;gÎܹxX°UŽ^1 Ÿ½I0L¼x÷ìA~ò8òäxO  º·‚P“%Øeùé²1hÔ©U¯fÝÚõkرeϦÿ]»¶yê´‘gŽÃ (Š8‘Ãéà¬ÿa!F¢v©2yrbèíçÿäæÍäé¥\¸rª58³ ¿®x&ž`žP 1¨¤Bi.¢!ƒ \´šF¯À‹Ÿ#ü)ÀZü¡à-&Œ¸Â¸Ðªø‘¥dŠÂ€sÈ4Ì1ÃÇ*¦qE& T’É“l tŒÂ df)Í4 lóòK0ÃsL2Ët*·Ý:àŽ<ä˜Ã7‚Š;ÎÊ.%’fÂQ$ˆ>¦{("ëâc飢ÿõY$ˆ"p¢!ŠèOM@D†b’xî?æ£Oû,éRUu.Úeˆ€Ç‹–X9£N¡,jÁÿ\Z•s Xì% À—cüÁ Aü*¬œJôgŠ{Là`Ÿý)Ãi„YÀ{Šà˜dJ( ,Pšb†:(‡V–lÖJbÊ*_£¤<é]è ª˜[¶4ÍL„Vxa†akâaˆ#–xbŠ+¶øbŒ3ÖxcŽ;öøcCyd’K6ùd”SVye–[v¹åb–yfšk¶ùfœsÖygž{öùg ƒzh¢‹6úh¤“Vzi¦›vúi¨™~8jÿª«¶új¬³Özk®»öúk°ž:l²ž„’¢'©¤l¶w.A$Úþ‚ §ßŽ;êVd饈™ÁÈ¢mÀ}¶‚Œ™óÞ»p½ùö¹ Xšûh¼€-JÐC(¡Ä!„Þ“·"sJöˆùì´×üh½{éÅ™™`—Wœè@†2Z¡Ûg/þ–™ŠUtaEfΨEX ˆ¹øã“×y-fÑeÉ™e¨ÅŒ™ŸXÅéÞg Wt™e ¢Í¨bæx±\fW”çùûðÇ¡fC ¨e —ZÄxak1¸Îu´˜Œ@³ô­Of ü™Ä 4)¨g+šf”@ çÃÿÔ¦I˜.hŸ ]Є` KÂ’8Úˆ¦¶Õͽ 2³#ä ßÓŠƀ„¬b=;-L03($á \ Œƒ`á1s"¥˜3¨B 5xÁfÖ‚VÌÂw1£/VÀ´"Qf^˜XP„&ÈL D¨Ùm†Z(°PhÅÌLÀ‹ôŒn„# z!™± ttZ`á…°ëZ“ElxÜñ±fšüÙ…Ö&ÞŒ‚>»‚+ÙÈ‚‘8±LBf*èÀçDHœm•: L3˜,¬¥$*±9_As*8á$hiLˆÐ—¹,%zÿ3 ìa“Ø-c&crótk/“©Mnz–†ØƒæJh3pVBœ*ÀD+a_ÒÓžøLšH3.Œ!fDà ~ø6t@z´+8H3ZD¡f+ð‚@gFQ‹Þ¬ gAÍD`†'Ðâ 3cA/¹4‡f/ ­ÙÜZº;š©¦1Ó‚ff^La·˜iÍž°Ò™È/ö芴@ ´ÈE+Ž ³'¸¢ ®¨þj  +¨‚=¥Ù ·³3H!f!`Å’ºÔ¦>5fM`…-l±…œyU­3#ƒÞX*³šÖ,¯2S*S*3)ÈX€…ÎêWµAY0ƒ,$Úÿ-Ä‚´ˆ,ÎH³QölH°Ð'´\€+ÖR0‰KìA ˆ™ xÙPb¬D4mÙ Á–BJt{ Yþ2š†¨Dè(a‰Ðl)¼-Œ©’{~ÜTÉ8Ë) Z:·Ð .,cé[œ“º¦£§m-! ”W%çeíѬ ‹\Р2›‚,^à2ümfÐ °@†“Þ¬Œ“œÙüÜ+ÔbYP`‚ÌPš½" m-C dö+ÌoˆÄ£áÒ<3Vtáf.¥‰g¶„Y0Tä£oNM@…Þ,Ä4;,J ‹\„` ç›Z‚-p–¨¹˜BB0Ä(ìÿâ©!ÕÎa½Šx³8bäåå‚o.˜«Í–Ð ØÌ9Ž)‹g¶bôùÈœeB-ˆ0ôâV^s̤°‹&!ë.ŒÙ8M20B,h`V<ö•{°D=§ù¹ÜFsœé¥Ìp9ˤW–hï.!éLcÂ…3[n è)K`vSî4§ÙÞå.Sºªf5,g»3WÇŒµô¤k]Ík_cbšF+B Jà„]:ªà/>;Ö%ˆ¡ ŠËúX3'9‘2¨B.,3pÛÛ8«A/ÈpßVHÙ `ígvõ-ÍÚ3{/îF_·Â×­G˜B¾s±o™±B¬ÿÞ[ä̼@¸4A8«÷½c¦„U@¡ ´x.d@3%Ù 6ÙÂ3',œa…Xø¸˜±‚¯ Ëx‚3Z\@J›™j󞌜™§¤™ÀŒË¹Œà:b‚^°¹¼Å°4$þ;\ØDN£¥ë@Ÿ!ƒ:dŸ$øšUSn6X²º‹G™IÌ!»¶Ó¥4ÇôR›iÍ!ÓÄ-m’'ìGÙ¢MÕ¦ÎÉ&ÿД&qHLHÆÃÁyª§vâ'}ZN-$š1À…\p+XŸƒ[°…38?W0ƒœ¬™" ¥s@=„(ƒæÁiLÏõ”F™á‚\Å ‚YÈ…3й˜ß“™TêˤOç‹È\¨…1€²œ Ú±X…\È…ÿÁŘŸ¼5PË©Z@¤3°¨ek…2¨‚‚ê,v› …0Óœ‚Oé‹“™ Ñ•­¼Ê´™l;¥ü“…Yè…Y…¹jÐ%0!…Ð UQø¬YhËQ%½Uƒ\XP¨šZÀ½šqÆŸAYP‚ãÓK²QŠ!¶q¼Y";ÿ3¥GÒO£áB3 š1°E¥iS¥éÉŸ\Ó¦ùËÔS¢É‚÷.ý™"¨«WˆSÏÈóÓ®AÓÖRSFuš*ÃH-š(ÐJUš&˜ÍT )D]ÌôT H$U¬qT*lATmUWuÕÀ…Vø³WÍ™Z8?Q­U]ÝU^íU_ýU]}aVb-Vc=VdMVe]VfmVg=ÐhiVj­Vk½VlÍVmÝVníVoýVp WqWr-Ws=WtMWu×hWw}WxWyWz­W{××XW}ÝW~íWýW€ XX‚-Øj½W„MX…]ØvÍWØ‘u¸…se†ÿw`ƒ•ÖWp†põ†/ØV¢0 tX~À€iýØj…X‰½V“­Öb¹X—õÖ•Õ•‹-‚|¸Ø˜}Y• k¥X‹=X†ýY eX‡Ý‘ØÖ_—¸q¸w Ó˜‚ž5W¥eZ§5~(” ~ˆjÍØíXmmÿ0Ù’Õٓ凢ÅV±å’(ˆZ”hÙ~}[n=Zo¥Ûiµ[pÙ¶ÕV½-×pÅ[¿EZ—è[œÅÖ›•V¨µÖ }\ȥסU[m]{¸¨‚{Ø‚ Áu‰Æ5WÍå\Ï30o€ @‡yàÚiõZpåXq-[’•ÖÅå¢\¸ ùWÿÂÅVËÅ\ný]ÓÞp½Ýl5ÞÄ%^kUÞÄíVä}ÚÝm•È­^ëܵu )ðzh3à\0—^˜ÖÐ-Wòå3†i˜-È…xàZ/ ‡zˆ`¸ cÑX €†bX€ÁØ…ux‡a jõ†\0‡yH† ˆÛÞ­ ”°ÖE[— ]Óˆi m  žÖÜE‰u—(ƒgž žth‡|@tX…¸¥n¸‡hXàjuZ8†tpÿàc¨Ø\”àabVavák _”¨sr`…w †¸½…h@‡€"^á_ñÍÜ&~â(F `&` Æ`ÿ ~à6ù­ßûåb—‡aÐq0† p Æa!f‡F "Ùšu‰1àÖ^îõ^,Na-Fâ Pxo`8Vcæ’<Îáîa?⨠b+^àÀ‡@ ȘV&vb(–b>æä?€3Î`´-ä2–^ǵ^]Zì5 $¸‡+X€h—Ø€z(1Þ+0ßéW Pfõ•†/€h8‚ø.@‚Xrh… q† Ð_(”0i P†_¨VoX°ižÓ¸Y v n h‚{Ø`ií`0V0cP—¸Yâ݆s¢qèŽ'Œÿ8g°€o¦h‹Æh—`^j5fdÎÜu€i@Œ{¨‡ P€iphðh^â‘.i 8é€>çt^gÈç}îçzÞàlÞæn6˜F p (€dØ<†h‰Öè‹Îh” YÓ0gtVg”øå`æŽÞÝY P%à¢>f.¹Ygpj‹†jŽNé•ni–ÀZXi Ö*˜i“Féc¨è¨F žæg´µêœÆeŸÝeÃVØ^v `(†i…E‰à‡±m•ó×Èžl”X_ @r€k6WX† á†oèb¸~é#˜v–” z˜gcI†Ÿæ’{€œÀÜeðçÿVh1hx†Yu`‚ƒöç„ÎhZ`ì–g—P|ˆhƒqè–nêîjÓ° È  —pl—¨m€`ðæt@æm0h˜æ~éfï%ïò€óFmÕfíÜF‰Ý®mŒíï~l£vè)pr—X_ÈÁ½fµ` ·¸~@x dØ‹¾ø‹À(àÏ5~âo¡íÿã¶m³j»@‰¼°V€&‚w pè¸ÿE „ÞÝ2·VgjÜöÌ­xÀmYâAG‰ßE’™hOr"_âñ  Þ¥gDŸ^GïHwá° èòsð ¨ ümó3w‰)o‹ã!7 pƒ¬Ör€>7ôƒä-ç ¿ Áøñ ß]Â0 Ä äV?k®u—¸õCßóÁ°‡"8zÀ_~à‡\€tg™ô ôA'u6×Y.ïõ/w—$G‰OwÉu ”hðV9ƒ1oÐf>×zfÓˆßix‘ †i˜1lõ×*'ÿ1s<÷gà²F‰ÑrcàmÜ¥\”1ˆfƒyŸx.‚vàg§Vg@âwñ·n˜Wp@yÓÐþر•wÓØŠm§ô•·y.áyMÿù#8x.ÉørÞà•íwx” ú8Ž…&p”hùŸyŸj]Gz.÷“Oyi ’ïú’ßð«wy™ÇnßÅp`”é4\UÞtn÷ðìVú€ÖY¯§ìsu|xíqøe+X¸”w˜.¡¹€è]s?WÈ×É—'w‰ø½–lÙ¨÷Ú 0‡…GuavV‡w–F–‡e´€xÅw mè ÿŽ7 wovH0`‡…7yÓe-—m¸gyµ€dàëqpq~èG ãw TQ•TaÆwü¢—t o`‰¯~—Øþž·{J7ýu!æÛ€Ügz ö|má–Åo|.wg_Àãåoþž~®KV¢@ ,‘ܳ²€Ã•3ð±(`ÊŒÊù(ÁÝ‹oél•ÈdÎ,¬çJà¶0_%èÄÝ;&"EV™&àJtG¨déR 6VZÐ+IÐ B…§°Û)2Ö¬Z·ríêõ+ذ\ý‘-kölGøµ9Å=wgŠ g5Ë8|îhY¤jõ/`‘xõò5#ÿÍb¼(Ęãö,´™Î¹E€…\êê› Ø®róŽ]øÂ¹gÄj ئŽ^=uã,VYg¯–iiߢ1s xmÛgÞ)`ÁO Ì×±gÌåŽ]+˜2Ð ,à¤ÈÇàµÓ5A vîÞ-:‡¸.OŸ@m=½zóçÑÛ¥­>èÐÌ›;çÞÝ;9l²ÑÕØc‘Ñ·8¸œ3ZiagQxÝ}7PùX¤gž]—\äÉ'ÐèÄ¥ËtÕg‘k2wJn'¡t3±&Ð9çX×ÓOø áx¼ oNaÈßTU&’I*¹$Vh9Y–@Äs_€-NDÖ ” :+jÿù%˜aŠ9&™cJIe™iª¹æ•Y®)R›o²‰%‚]ÈyÄ=rZ§ž`J3_Ÿcré¥ULz¨¡O>)æ ¬((¤‘J:)¥•–Ùè£bj©u›ŠŽo²â §žr*÷TtꚈºúêWŠ:É*­µÚz+®¹êú%¨kvsÏ9Jì:i7òL7¬–°*»¬¬h!û,´ÑJ;-µÕZ{-¶5»mZÙzû-¸áŠ;.¹åþÅíYk­s YZ˜&3ïù-I¡³?˜+R½dª{Ë—ý­ï©Àazó…˜ ß›ï_ Ûê0¾ú,ÄZ¢kpP ÔýÌ@Äðs²Åùÿéâܳ¤Mý ^äl¸¾à}Î"Ë£Gób½×Å{¶w×»ß!qxÅ;^òóÄ( @„$|aöÐxÅíuï{%$Ÿ•ˆC¸~òãÚY¾¦¨Ì¹k'¨GB7º•éÉû°ÂNޱ’–D§6˜F1,p`q(@2va‰EÎÒ”ñ‹À0ä Ti”F®ã‘‘œ¤#ÿ!)IJr X9æ³pT@ÓPЏ! 4áN™…4( %pÀ:z€1€)c¨b$ÁLÎ1ƒŒCšV‡%1©IÔò–¹6[£MnzsRΈ‡0³‚,rºä¥/É2d‡qa+e9Iz®R Â$¦1âIPŠÒ" äÒÖ! HcAƒƺµƒsjH)O™Êz²Ò•³¬ä%3¹IZd¡¡%`BŠÊi’ôu}¥b‰SrÚ—÷ìå/ :ÌŽ ™Êd&/ç¯ÉŠ”éÜ@`1AFrZ?ffà#žÃlª  #:é$8€9ÿw¬”fk»? z„yÅ W½ Ö×µ¬8«XÉjVˆäË€I50‹»š€ˆ[†SdŽ"dÊ™õ£K3ðŒY@:ɨÏÚ¶ùÐ⮀I«ÊØ*âS´¤½kâ!ÛÙjUNΰè@ò*½¶&±‹Õž8B-&°~=«n¿:›Æ>¶$p•+]£:Õ¥ÉB T ÇEg„3– „¹¬E¤j»âµ«» k_‹Eµª´O{k\2׺š6·æU._û×"W½amo‹ÊXÇ~7²“­ì¹–j9¥>É©¨H, &XEt b[ ¸ŠH‹x÷uðxÝ}Ø3pÿ€a!ú(€5Ýš2"ðãæ0Ç9âF«Dã"ép>Œ£õeÇ:zB4Ò¡yìÏ=2z0?À'€]Éå G$-áG7Lp¹·µD{vTb áIJ‰ìå¾Ù-x3œih[@ Ç62uXc{áôP²¤q²\ÄÇ"¶3’•Ìd*·øÅ1£„)<oÐÍüp]µËɵ!ÉYt'l‘ߘÀqŽDŒÅ1—Å]ãXìbË0¤æ°©sŒjÁÐíAó‹œéDºÉOŽr‚Œ9¶xìÁPÀ|b•(àÁV•Ó7tQ^½†5ÿÄíG,b…önW$"àG3²€‰¼[½ï^}Ýko÷Уba a—€«2Fð\`çåí²(€<Æ fŒAÚ¯Úñå#Ÿ6Üüc«½ñ-}$âÏóbè!ò‘×öMHry;l ¹ YqéòÙôûß%Y·U¢-oTWT‡@¢AäBÓÁ;wºPs…úFçã­/ÊáÝíTÛâãn«E>œÉÝöåö®ñ#ïŒç{ß`Vº¿™.Ü*•ÓcS™-6g[ä#!é8^`b€Ã-¥[î}L§(-y‰¼±(Ñ hÃXHÞᦧ$!¤ÿlÈC²dø£È[ÞØÇ v„³S<)KiŠÊ2²/HÙ"Í`GÀÀŽž?|"óÃ3F¿¹øÆ—ô¢7lÏf_Æ?þ„  ˜[dù;q¾EN.Í¿÷3ºIN“xê#E)LqJA*/»ï\•Lyq µ¤Ãè"‰üäMÿ}€D$ qD¦_OÄÓ[ñ2`¼ã¥˜EÀŸE„_T\þiÞþ…ˆyžï…ÀèeW÷žS`„F”ë ô ÀÛÁ]ƒÉ]·@Ø@ ‡EÐ@4̃=tƒø]¤ ÌìÈ‹ŒGâ%È‚€,mØn`†fdˆu¼E\x|Gçõc8dHÿ É@ˆŒ—ÑÏ”Aqr´†rH|˜‡õ-‚0È€ !ð @yèÒÙY;L×@¤áN°aôµÈ@ ¡Òˆh_ÿÉáú‡ô ‘ E€†hØ  †j°FŠàà@ÔÆmôG˜ˆUa‡À xaÿÑ b¡Šäà"òà~hÈ_@¢Æ %Rݼ‘âbHva6¢Šˆ;ˆE¸!n Yœ -Ìžœ €É LK¯ «Øb®ü"0jÉŸä Ÿ ã.B 1ã¤Ðâ¢Ĩ „©˜K3:#6bQ¨dc…©J®Tã­€£ž\#7ê 4Îʯ‹3’c9 ;rc±øM;ÚÿÊ;ªÉ+Ü#>¾Ý\Ì9:K­ô#@¤@$A¤A$B&¤B.$C6¤C>$DF¤D ä²T¤E^$FÀDn$Gv¤G~$H†¤Hd…$d¼°C³d¤J®$K‚ÅH¾$LƤLÎ$M‚¤åœÈ($U¤dKö¤OfdM¥P%QeP*ÛC’Oþ$S6%¢%TF¥TN%Uö£–Åæ¬C>˜EÅ …IYlƒøÀ”줬8¥Z®%’T¥[¾%\ÆeM2ÕREI–…Q-…*1RYàÓ/uËÊ( [¦aj…\&¦b.&c*ä‚1YÜ%YHe•ÅÌ•…*Åb%J¦ÿåa~æZ6¦hŽ&i–&Z eYH¦?X€“A™øs‘EŽ5‹Rz&hÞæOš¦nî&oºåMš…j–ÛùC^‘XÑ&Z&n.gKö¦s>'tÆ$jFæV–…®^GPßX†Y¼‚YÔ¦r2§xbdt–§yž'Hªæ¾âÅngGx'g.åxÖ§² '~æ§~&$žl åtË@”E/΢“اÂÊ~&¨‚.(·ŒŠG(„ ƒN(…*h:*ÁƒF¨†&I…v¨‡~脊ÄPÎ#‰–(²€(Ц¨Š*¤‰rÊŠúÿ”ÅÃ`ÀYœ$T(Z\êhYðèG'Gú¨Q i@ÆŒîÿË‘ZÊ‹fY@ Z &B D³Ã1Ð"Žž‘*ÊÈøc³ Í“li@ ©Ì ‹@€©Aæ$@þ 4š©?ŒéLJéwr`–ú#›žE`D¹àé_¤S˜,)6i¾Ø)”ä•> •Z)œbi0pËáp©¬x)Z4*4®@ €¤Š¤@£–MQ&êÜÍ©^ª?þ…žŠK©îŸ‚‰Ÿ¶ÀY8éw&çAzª¡VéY„%Y°Q‘…-ê¶|ŽlVQõŒeY–?LP Ð*œ…¯úƒ‘…‘®¦Ï‘Å™®~²CYdï”yùƒ­úCVV§³~ò”Å™A±R²’EWÊÿO¶–EµšÅ·~Ј« µŽ°šÐ+>”Y¬ ‘…?ÅiYèTÓþl+íPmÖ~ÒKQmÈ ™Ýÿƒ)ͬNØþT> Ä4 Ã0DðØçŠM”ã8¥Ô8 OÔÀíš „í&Ìþ©ÌªÇ æÍÞl4hZt Yðl€^&€lšd­Î „xq`í—Óf¦?l&YLmYHUãjƒ?”•?œÕs‘Å\•Es™¨2o÷:ƒY¤Y¬•·âVÔ9qŽCÛ¾‹?”¯?œ¯xEhª?Pf¦ˆÍôŠM¿ø-ý§Ô¥oíŠY ãÊ&øŠ/r5p‡=/ÿžo»x¯æðÉþ€mãâ$Cê>ݶW~Z±×GI| À|e*Ð<—|E—ð¦hÌÎl»$'ÒF¯¬Fÿ£ràή_€ÚY‘ùC§Q@G0ô"1fˆZ¡Ñ›Ór§?ÐDYpïjNXãÒ›¬9šŒe®¢y­?©?CYDÚû‚Y´šƒDGYÄ&³ÂCþJiÓZòÜ€ 0kÛkvD¤q×qñ2ñˈ³ò™ŸI1Y?ä‚lNƒ?…?Gq±‘k£ù±!‹±æÞšŠYDK '/Ù „)wW®éX%²š™Ñî@ôñ£á°Eàr­õ0ŠÆ,Ò jg¯ñªæz*o•&o“ÝÆAƒ?ÔÜÛòj2 „Óe1)nqw&CYxÜYD›YÈÛº…À~eÖª±’?è[YèÜûÆÿµºCZ`‡evÕýî1Žsñþ¯i¨ÇÁé@ gG€3";Å<á(oLlsY´ÜËU16óÚe.4-ª>³OЦ „Ö „3s\ö[ ·²@ˆðÌ1`Õ‰[{u´Zð»íÄ?«›Kɪžü s³Í1û'2[ñ,2L€PO@øƒv~^èA 4+_Ô~ŸØ3ù%¢/ts3YØžYØ]8k±&DG$…Ì6…úz-RûƒR“ù½ïîù‚ß"´Qï>ó%Txõæ& DP„Î^'¢5Hìsß:H²š…vjsU—ö1D£ô¼µQ¸YÈŸXûì\Ó­?¤õY,”Üÿ_æAžä RÿžNƒ0,€ØI×õfÅÎàZsöäuµT^l¿¬óîÒÞÆ|B´N“)ñþg1,˜ý¾ç)Š!#öÆS証¶—E’E]œEsÉÅèáXf!þúÈt×Çû~!ix«[¿gZ¸íjòáu« ‡xb‚ˆ+’Hx?µÓrw[ã(zgšYÔˆ£2+&k²P˜µ(b72,{‡w§áï¾·&îàw§âÊý=lC10ß':¸$ÂÈ ’÷…ÙÔ&Z·‡p¡ˆënŠÚâ¶ Jœö¬1óŠ11SιجOûC2ò­ˆâ¬ˆ¶‰@æ¸Ç4Ë“¨øÿ§Žç"ŽkKô(q€òxñ*ù‘qÏÚ·YüÉÿx³]i‹ŸŸÐæ©,XJ=žÊ‹Âd'ä‘+ ¦$䚳虛E›¿o¤ƒ:dœÏ ñnŒ1§Š9Çjž;‰©ó¤A € Àƒ°Tʘ»h™ä›ûù”Ëå–sËä…~d2Ÿc¡Æ£›ëù¤Cy P:Ä:ŒY>âã>®É¢+i£ïæF冯º¬‡E«×º­Kä¬çº®7É­¯hŒ6‹¾%˜=¸¯Tî:²'»²/{®ŸcÌ* ¬nä4œŒú4@BÃáN%³o;·w»·«¥³ãö“DûDNC-œÒ/ÐC!C£9PÿAU~;¼Ç»¼Ïû’„;«nkÉv«u3GNC•È?,¶?Ük¸¦lG:è:€Îj¢ëº|¾¼Ó뿒źžë½&½W†'½<ȇ<·Ûûûší.˜¹K¤¿'t,ÜCÅÿíj .Üv :PÎÎë·¾ëåÇáû¸Å3Êóûð¶KŒ3ùÞ_éÊçùIpŒKÏJæÃèL+7‹tË8ã(ûyé>×Y…@û´@¼¾õ_?öshGôöÎ>8¬õíóô§y¦ÿçïŸEð›lCIñK¶ø´ñ®#öácDüd§Þz¨ @öD 4xaB… 6tøbD‰)V´xcCþtô¸dHøµ ×¹yÇ.„œÂNdLŽ7 ˜ióæÌœ =âœF‹fHg«DZÈ¥®Þ¹35 £BS€Q¤J=Í)5ÿéRÛÂØ|•¬æoôÜ-z4kÇ1èÈêZp³§€ŒséÖµ{o^½{ùöõ«.N™/Ä;G $¸.2“¡78d\›’qB *™gOÈ'c¦Ì¹r\¦‚GülšrÏ¿«Y·vývlÙKo†¬ØvnÑœ™îÄ\š´LÑAÿ}¥ä±7ý~ô“ÐB =”Jâ”4OD}ÒH/TÔMI-½ÓLczñÎ:ûÔPEM”RM-UÓTU]ÕBNwòtÔXe•ÉHa×\uýޤunÉ™w`nÖbA½%PkëÖ]}öY’L"6®—D‚cµm≸°íiYp¡—\U¥e35kCýVÛv{b·£p=j¶ÜzíuôÜšD`†žp€q¦'ÿu›vòAU:âÀas‘àÓ}ûý·#®:úª#+Й'ÙŽ6a…å÷Þ’Mî3_Ž’Q†"äØ#?…·£cœ±`…qZùtå–_®¸+0öYo³×Ö“•^úÍ”À‡‰Ž(ŽùhPi~Ú‰ŽÂǹ§£`j‹…N¦§¢ß­Z€‘Ófší¶¹LÙ~dè(˜;’Ù9šãž[€*àqnoºa{èŽÌöˆfµéu›ñÆLy|¾žún´ƒ¢ž°ÖšëÔ"ŸæhÈè(²‰îØ#ÌÁMÚñÖ]×1e”a¹†Ÿ©u|Xè)™›svåÓÙ)¨f^ŽƒtL7uÿuGšÙ×¥Ÿ^ÆØKp¦ß_ìoçrq‡áxÚÑe‚O¯Ïæ¼!çbLßFzêQ§sÒÁßYqêýÿ¿D…9 pZa·ÆäÏ]±*`ãÅ:>‚ŠËØ. &°Ôà[Õ“ V°XlשNÅAž…)Tá YØB¾†1<Ù‚hXCùÈÐO6Ôá̓Ã>ñˆAœù$D#‘6DÔ™ØD»(q‰N”â'E:Q‹Y\ˆç¤E/~Q \”ɈE1Æ©Œitâá¤F7‘PêÀéXG;ÞyÔãùØG?þä YHC‘‰Täÿ"ÙHG>’‘”ä$)YIK^ò*P©INb”¡å(IYJSž•©Tå! Ìq˜¥XéÊUF2³èE ê˜Ë]r P¨d°€Ê`B2 ^P¥/yYGbÞštlA/Œ0G)Ðb!+dq†jÒ± J¸c8¹‡=Ôq²”¥!.¹‡I|R† %ÎÉÈV¾²@ˆ'&hÙÇXö³Ž÷\$dY Iì“BPç$ „:šÓ‘,Ð,ìƒ_ÖÑ¢Íìã`‚:VA%‘`\ð¢Ž%=©]p ˜’£#zQÓšjtɤd°éÇŒ²Ô¥Ñ„æ4¿ÿyÍ=n 2èjñÒ-4¡ K˜BæøÔ¨NU‘*0„̹vvÀœ˜ g=)©JôS–°„! ! JþÓp$A'±J`✠5DXÙ©U®šó«Š|‚+tQŒ^”Ž?õ㨠NZ,áDPª…) ”Ž•½ìÁPÌR2¶ŽXP… Hk‚Cêt’<ý£bëØY¡Þ’¨ÖìéÏÐ…ÌÊBtìB:P‚)È¢N©o+ÜEÆS­{pèA€ ·Ò‘ {'-àκâsô4¨CcYO¹Âr)˜c+ë¹ÜêNâº`eh] 8w•h(,Õ‰Oú¬’¨%æ«Pÿu:—¾²´ïyÓÛìÆWËÅctói J¤@¡õœD%æˆ\K(—‘bÀB®pXœv€µ{4.FJÇYLÀlU|Ç(¸¢”#.ñLUqGUHaŽWÃU‘…2Ä¢ Í”IÏðevàŹ°EJÐ'À¢®¨B-¾0Çlaµð xìc ór¹äE,bÑØ$/¹És ñ_üÚUƶF¥#-È@G.Pɯ`…¬Ð"„á dèÂdÿèA+î¤CÚÜçΑ ˜Øë„C\¸»sLgXÏ©ƒv ‹þ$¨ëJGJXB¼t´4¦ñ V¼V¢®ü|/^÷` I$ÿTé´¯«ñkN®^‚úì®Кk[v`ÕœÖ4­[Gw •úÄ«>å‹lE3z‘%ÈŨРW±{$B/r;Çô¤´ø‚ úØb;º»ŽDà…iG9îrÓØÆ8yÜŠ„à }î€*¼P#èâÈQ(‚bàŠ>;a%(²D_Ð0˜á+ƒmîo€ ¼ª­£ÂîðĆ{Žò¦·›O g9ãñ G ,`°‚€ÇùáœÁ¬™s%ì\‘)P®¯Éêè:ÒuÔž£$l9a÷Jš¾Ò&+XÌ\±ÚQé`º b©‚ƒ*Tï¥'£MGÒñ»x¥{%a‰O¦}¼ÿÇÎúÖ \‰§öŽÏn%±ÿ›`PÒS?¤rQôb'ÿðšó˜„\Ôq½8à \Päv¯˜Žð¦£ zR:ÞŽXà…-HÏñçxÇo,ÀÐs'¾c8r¯0'Ÿ¡^è³,jÀ‚^ÖÏ·àñê[?G‘ã±öŠ¿#ç=ÏòSú¾¨³Ðc+v^åTäN˜1µoG3ÔT †¤´]¨Ó1ë±thvÕ~þ«_Õ¥65ªë˜~LTו%hØÌk³û¾TÍ.AR î Mîš þØï½ðÎŽôîþôŠ«Ð˾ƑÀ Î:` ÄPŽñð¨xA¦:Ð æè ÿfK4oŽT°j V€”Bp; X!nÝNßøMQÏÏz!ͶàÈŽ  dAn¡ n¯º€ªb\ð`A mOoßR/äP°ˆÐ‘PùìÈaÐùL)xᛦÆòè Š€`¡D  @î”ÊÒߚîðü@½(áÑ:@(a×È Ò]©ëôOÖÄJ¼Ê.îví»Jˆ- Ÿîèìæ®é(¡ýðè  Âð!IntAxèèÜrÐ{÷ˆxè(p¡;à/ïŽXð b¡”jñéH´î¨ 𬴠õ¬ßÎí¥ÿ,N™J@ À£® ÷˜°œpš¢±Žœ ‘@ú舭qß’ÐÜdñŽ‚q Q‰Ö-Î`ö: ¶è( ¨JËÀ ”ñ”Âj¬êï’-Ó Œíd©è ëÔŠ­ÜŠ [-•k-–n ŒҖKiI¯ô‰S­#AñJ€ "%ì í0ï0½ZM¯Ìé®Ì‘”€*n©x¡ùB x®ŽxÒ'ûÈ ü1÷ÎÀZÀòèÈ 8°BÀœ`ÞÒÌ)¡ÒÒlŽº` Li(C«Æìh v¬d¡w0õ΀ªb”ÉlÑõ`!·± GJ ÄàB@|Réhÿv×ò_À-q±'ï+ßñ”f  pÁ¾§èŒŽfnU)Ô髞 ºìªÀô0°ÊìK*&+Lžè Ò0s^i"÷j¿jÖþ«Ÿí®81Ѭç(ä À^S¨Ë4±k%=ÑüÄê J JðÉ Ô±)iÁ!.² Ž S:ù¨ Z‘ŽX p¡À`]÷èH lªpaŽÆÓ¦ÌsŽLÀŠ‘”®“+—o\ ¾`,}°†ŒÊ€ Žl ^Aøñ-—0.;€´@rá+/éH hî?t9§s¢“ŽØÓ= ÓùºÍB@>ŒCIÿÖ* ’‘VsDW4‘Î` ú¨ƒrª€ãLÉEYt‘hG È@fAßv”T`ŸŠëB3‘TTH—ÔX 2ñÈXaéVnŸ”I©J³Ô‘,… *a4d5ãˆLdŽÊMÓÔB:„ÚÔMßNãt„H¨TÞÈNït5äTO÷45 àMýPùÔ]è´NñQÕ.äòÀQm€P÷Ô ò :¢QÕ]&µR#U[ •TCµ"fÅÔ Ü@ µOqÀTUÕXLDÅ&5ÔÀM5µ#€UóÀU?V%W+¨õTqÀÀˆU75V)?À¹³çÏ C‹Mº´éÓ¨S«^Íú4€!ùþ,¾Ñ ^û ØÏŸÁƒD˜°àB†.T(Ñ`Šø‹XÑŸÆ=†<øQdF’%– ÀRâJ–)ªliP&Ê’6-¼ ³çGŸ@5¥©3èL£7‹¦$ê“äÞ#S!ùþ,¾Ñ ^ÀŸÁƒD˜°àB†.T(Ñ`?Šûù‹XÑŸÆ=†<øQdF’%–ìÇRâJ–)ªliP&Ê’6-¼ ³çGŸ@5¥©3èL£7‹¦$ê“äÞ#S!ùQþ,Pÿý (”Áƒ;(\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(S>$Ȳ¥?„UÊœI³¦Í›8sêÜɳ§Ï.ƒ¾„™ðfºvübôfæ§Ó†LŸJÍ®ÌÔ«X³fêrˆÃ?9‰$]ÚTkM+î –åxäÙ¼zߪ˜íÐöm܉h+V½˜·aß¹€ fȵåÁ!C†;2ê`”:æhNØŒYäš­|93Þ´÷ZŒ¬ôãÓ¨}fyøâÊâ¹óÅB"söäk¡Pœ±nä”Áèý;øp…b•*L’†Â"úŒH¼®ž;W’uy»7M†ÂÛ¹wKÿî5-]÷çÚà*+¦ð0vñŒ½P(ÃY¼yàˆht\‹}ûøé×{ðÉQ鸣O:éÄ’Ývç ø^|óA4?J8žn¼9qO…P|(aZÛlµ).˨óŽf]˜aCRØ‚ 2è`Dàø‚=Ìx×þá¸`ƒ7&x䎰ÉFÛxåEXß}ù¥få•­FPkŠ-Í D”C‹DcHaçÌÒ[9.„À 0k¶ùæBÉ1äM+ Å¢DQÜÓE 3x!:IÌPŽ, •yfš’ó‚Ü Ú7Æ´ Å=ìu Œ63¼à 1 å¢M "L1Ã~eõꨥžª)§ž‚ÿ*iÞj¨¤›vúiD! %v (šjvPŽ õ¢ŒB¹Æ*‘—`йP4òP1 €õúk°ÍîZhÃÎ/hcŒd©ú÷­C¤Aæ˜C: ©¤¢’j*–øæ»’–4„k‰µ˜QŽEµ<Ó›¤X¼³°B ÓÉØwä(tN“ŒCÞÀ»ËÆ %,,¡nL?H(Ä {0ðó„BQУ.â!`®9çÈM<à=O@Q MS Çé*$9å–ËݪOðƒzÀ°ç?èôŽŽ<ó½ÐË9õ$¬E98|ñóíîûïÇÛ­ÖÜþ9ï;ðÍž¼^ùåDàCCð”Ðõ½cÿÐâwðø´ÅZ¤ýžèC_w¸g(?µ%ßi‘aŸã 7¤Ö)xÆ#œ¯d¸¡ `¤ðšÞ‘Ü# 7»ÅåÄq …tÁa˜ë`>¸“¹j!ÆðÅ/d±Žz° ; AÙ©êdí[YbÀD¤èÀNFÿ¦Á …üB] "vxèC‹Tán„!5’yÄð‚¼\¶±ŠbÀi‡=¬ˆ FÁDcG©"›Ø'êÅmÈÂ<BD#"Ñm¼Û÷æ¿çq€’Фcƒã‚A7†Ñ›HNr!!ˆ‡ R…wÀc ¹ÔŸfÐúG‘Œtäå’G©„(SË` B`„Mb! !˜Á9ÈÀY¼‚"ÀXÆÕ¡®[ær— ‰å,k9‘$à[Qœº”IËMBDOh¢F.²‘\ÄA),„šÌŒˆ!£/3¢Q"ØÔ&7“)Ëj.ęЄ8ÖAÿ.mPwÂŒ1ïù̆à“!ëDd4éfL]òr!Ý`a '*•Aú ‚\†l€Á›ˆœÞF16è#z,ã8â(éIÂ…v܃ é]E°ë1y éHM‰žzx#²zÁ/Öatü²«P‡u€a¾…”ƒ)8Îc¨+©KmªP‰jTŠüâî(Vò¶ZÔ£B¤ëÀÇ;”ÑÄœŠT‹0¸:BÖ®&R£îàè´ÞÙ´®µ‰u5k¾V‰ôè&=ŽT©jU†6~ƒk±f€W½.ôªJÍkSâŽnRô³N±(QB"Ž18¤´Ñdwr [lù°&hgKÛÚÿÚ–#¢… iMÛÔZd ÷ȧM ÀºÄ”Ñ‚8:wÛæ:÷¹ÍÍmL@â[†Tw"ߘÇZr’…uÈ#Û…®xÇK^ñ6ð¼èM¯z×ËÞöº÷½ð¯|çKßö à¾øÍ¯~÷Ëßþú÷¿°€LàþÖ÷ÀN°‚Ìà;øÁŽ0| Lá [øÂ¦°„7ÌáóÞ",Áoˆï»šëàD<·˜ÅÎ/AdÌ•ôÀ¾.ög,Ûx½;ÈÜã·ÄÄñÝFFœá&;ùÉþmƒìÀ wøÊê?¶¼e h)Ç/>2ˆyL(°Ì`ˆšð„" ¤ÿ*vs˜y,ç ¤YÇ0n`z0‡9°F^ è/ËÙm˜ƒvPh¡Ø@íôzfI¹%wfózÍÌ%3yÀl°ƒ¨íÐ(›úÔ÷m•­ŒåVnܘ€¬'`è:çY HV3˜ÍŒæ:ãÌp^±¡‡ýéô¶ `€ ­k_îÎvα æ`d é}t‡)Mß[ߺ½œ&ˆ§é êàÜ@µº¬ê*WØÕð^Í,¶ÑãìÈ…â Z#AO ³@b0 zhƒc¶À.ÖñŽaXÀ3@G;òÑ»UÄ ä¨G<€AXó†›lo@ðÿ‡7X ð³øä)_¹@Îp‡Ï|á x³I¬êè׈VtÒ}‚9¸»è z¢{àb6ì` mXCzÜ€5ø¹7ž³@ØÀ0³!÷ÕAÖÐ9ø¹þÈ€”éІ6`Ûd—â ô¶ç@YzÖ¢¹›éJ:ÝÕ.¶»] zqÜçÞc§C]ê‰ûÙé<‡\Ü·ˆ†¯6 ”ˆO¼âÙ-¸qhp^4Ïù®_DÛï÷ :ÞÓ{6(ì<¦Þ_×»öýÐïëø¨óþëagzð={ü¶›ÕñŽ~KæÝ’c8Ã+G+ø' ~.ÿ7„!&ÜcÌÆF, Œ_ „×á°rl_Í–s° 2 iP@JÀ-÷k2Öÿ€‘~ë×~ ¨~ìç~HbuÕF6pÐm Ñ6ÐcCv_6&blÀ `_·uCWt{c P(gÈ'bÇwkpph§c”&b=°  øhÀ=Às°ƒþ0dÍVt(Ðc˜8Üöb#ØcðƒA¸g‚(øv:pƒ9¨„¿Æ¹æÛ DTá6Ûp§2¬ c ø€«·­'Ex„I|(„÷Ut6p ƒaˆƒ:è_Dh„Hÿ8uQ(ˆP‚'8ƒ3(v±ˆ\˜j«önÒ÷‰1 ø¤ þ øàãÀoÃàk9fü ± vüP=vóð~ì€i=ö Ë@gèû7²E L~e˜ŒË8¸XÁ‹þ0ÕØ‹xÖlp·KG†É'9°Pr`¿v…‡{5¨j X§upgO(ƒì˜u;À'P${†_0„–mtlà=ÀmpÁ„x¦o·þ€‰ˆ'r&‚ÊçY¹Ž|‡úÈÍHŒczª ³P nø‹âv´ ’Óx_¼¸zŠ&wLglÿ…: ©_˜˜…Ê—_ù¸†“:É“>—_?y‰ÊÇ”ûõ“¹×‰Š 8 ÞÐXÉy²H‹þ@>üÖ ¶–cEÀç»bbqæ`ç:÷†ñÑê Ï@’,qŒ3g å@Å se¸s2f|é——–kÙ–€˜lé–,c¹÷ƒP—hkyIˆ|˜ŽAéÈ7‘7vT&d-(gƒÁ”ÁÞ8Gˆg=ȉït†“‰m Ù{§c°-H™m7äX‘#‡‘—¾þ锦‹ºÊG¿ùõhs ‡øÅÎ`´G;ÀÀ–Îm ŒóuøÀ«ÄFÀA‘ Ávg+Ê`ë–ÁœÁLÁ|ÀïuÁêUߦì^ä›Â*¼Â,ÜÂ.üÂ0Ã2<Ã4\Ã6åT>åØcÓýÒ¹æà0 *-ð ä`Y0°ý)í®Ò­äLnÜP>çÄÜÔU~çxÎÙUíÒSp â 4俀F  å óÿ ÚÍ`Û°h¾–5 æ)íÞðÍ ´ÐÛHç-ÝÕ,Açž>Åžç¢>êS½ç- ^^Iæê]^¾’n°4n‘¾Ò» `€ék©é,ÍéñéŸꤞìʮӦîØÎþìkIìa잎ìË~íØ~ÐÍíÜ~ÕÒ.ÔNçÖžíä^îçÜ_YÞíêÓ’­ÎÌaæïòîÏèNÏö~ïøžïíî·ï¾aóþïÿͦï_ðù~å"Üï ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2ÿ?ó4oâá~óÿ]ó:ï`8ßóþ½ó@oÇ>?ô|ôFO• _A¦Åy¶ôµæÄPõ¦vôœôömJœfN¿Rßõ^aTÇü®×ÿôäÆ[¯ÀäFb(gEÖö+VdcÿsW^Þ–èeaùgj×Ë_{_aÞð†æ@Œ_„oøö^¼Épò° ƒ;÷Ñ-‘«ÁkMŽõÅzÂeØ%'÷Ÿ/˜rO÷üîp)ð7cl–v_a«a˜_}¿_¯ø‚O`ÐÀ û•ûLÌø]Œ Û°5 Û7ÙÑM£ üb©Ï¸ vg¡¯c¡oüÆŸÖeÆ’ÕÿlÉðLû÷ÿ5û¦øfT°_âßû¾¯Å€R f€:à ¾q7Ws€Ùoÿæ‡qÇqèÚåC‡n•?v­{7Ì‚?ˆ%r0öŽ]. ·ÝІ.Ú‰!ýy!W/0 ´à‡A€•,]Â| !Í ÊàÉóƦB†ýÍHÐàТú³‚n^0‰;~„øB½nÆ  ȹ³gM°5›>+Õㆰ`‰Túr-n÷>¾ lWž>ÓÖô–Ëܼdhl óòU²—ÇÐás‡ÎXâÅ'\ØÐBMg´Ž¥s÷¤æ´_{ÁŠ$]ÚôiÔ©U¯fÝÚõkرeϦÿÚ¿©ì[ Ü8 ’í‚hLZ Ê~Etω? +üqA²`¹V*£°m¹r›¤9‹>.»¿má*(˜Æê4uëØoÊ|³eýš*iÎ’FAŠ;.¹å ÚN¤í‹è¨"Jo½ö šf˜ ¸g+þüP4°,K=öXáð¥Ë:g†Æ±&kÊð?Fôf,f· à0°Ð¡"-ÁòŽ@ÌœKh…šØqfDksòI(£”rJ*«lÍ ~B€Š–ügÅ)Üñç~Š@èˆy˜Ã±´W–‰¨Ä—È4S4›ŒH|žó'Œq4R¢YŠ‘¨¾Aajs¾ÿûlZ)QýFóG–pŠP >9_BóMväN$£Rå¥@ý) Jf+H%e’E»jÚæSeN·Zy‰–b:lõ¥T'eÒY^¢‚ž C¬¦ ÃJV€Jéœ3WÝËJj«µöZl³í¶ÜüÙm/Áx } ‚ŸsÌ1çœxòÇ[ }"štÔ‘çL#àÜt×m·4H…¨ x4 ¢Ã •hÞzïµo¦‡ M " l)‡žbâW]vÝ=0¤9mÐ`cý)‚Ÿ”üÙe«Š/ÎxÕ‹ÝñXiLGY«eŒ/ãÐ1^ºM‚›íñGe‘Þ]ŽÛ} ^i§Õvjÿª«¶úêÖ,È' ˆÌ@"pbÈ 11àÇÒœY " îÑBb&"(Ú‘Èl´SÃSO> F8ÓÚ~;î¹!Ÿ%:ÀñäŸYÊmU1‹•àb˘Æêb²’ÝZi_zÊD6‡‘µLbwyÈE>2§“ìd3£ÙËfzs™©YÙµ6‡®y-gÐÓþÐtž­Œå6ïšÍ}^,…—H<ÌZx­åX |ñh´*!ÛG¢€V»UûU×jð iT  5€0ÌnÛ€䨯,„LjSsºÝï†s ö omsÛÛÿBÞ@8Èáèª+ÜkÅB ÄAbpC]ïö·ÍÑð‡G\]‡¸ÄÑê[´šÝê&¸ÁîV ƒeÀÔ¶6¶ÕÕŠbŒ£?ë6‡Z¡®*ˆšâ‡ë¸Ó*òtÓÜþv7¼ßês´®ºÔ­6‡•žï¡ÿ›Ì;·x[9®qsP}ãïøÖ3îqœ Û@'ù” ~ð„_ìkMyM,úv¸Ç]îs§{ÝÁ mÑ ØÓ¨‰‰ sxÈP—1îÐéæ Ü9 ÔØ r…Öút¦×`òjÕ|ZOxs^È]Æ‚åžø¸faÈ Z?_øÃ›Cõ¬Oëì[¯V3Þñê2ÿCä§LzÓ³µí}•öZùîwÀ«U DP×fÀøè"ðƒ‡}\ßøÇ÷^òŠ'÷¨Yxµb~û®§~ècßVÛ“ô¢—ýêo¯®ôã^ØØç½ïY|ø»_¯ëM‹Ýýÿ @»Ã»½Ð;´’"ˆsP´ X€À¶…c«Å›xu¹…¨1¡{+ЂË÷Ìë@Në@t@|4ñ;=¹ú+ `‚G;ÁŒÀw{ÁÄ6„Al-a³@ 4 ¼·ïc¶,¾¶B@4` u‘ІÐh=LÁž#7 ÌÀ ,AîK«l:ÔK:äÀ´ÊBl«ÿÌÁü1´Á6ìÁäA—3‡ÜëB!üœÃ;T«áDB,D$À´0@´Ê… ¼i`«_(Cë#7úƒ¼ë2¸ª¼µ’2À¹ÌÃÄKô<xÄð;Cu‰ÄºŠ† #Gt+U £´zED«JÔ>ï[:”ã¿°PDuaDsx…ÖË‚çS(( uiÅ0T—Zô½¡Å-L+NôD´BEjìD<üDQ$Eº’Efd+YŒÅUœEgÜ=K¼E¨S—q>] CŒGyœÇ|BÄ]D´š‚ch )4$0m(h°7ua€³Iü¹sK7.Ÿ*y#n ÿu™$¼àFΓƀÈ‚$B\<È„Œ«]h†rØ XuùH‚4È“LÉ•T—˜TI–ü8±#»‡TG¦c»w¬ ½ÓG~ôG1€f0‡mX€b4÷€b@+— Éi ¹†¬€ŒÆf¼ÈŒô†D+„THsÀHäH¨È—|«šœI€4K©LË›tKs,·ªÜÉ„K#ì?zÌK½4D{T9|D+(€ÂHRü†*€ÂÅ*1¤ÀîÛ†#ˆ1*Ø4¬”«]v,  ' KˆD+ÃDLU3EœcÌ·*ƒS*¸½Ñü±.SÍkMu‘MÖ¼=Ÿ@®„PÈ”ÌMCÿŸÌ»¿T—À€Á$E3˜€ (XJÁ“Ä×LÌ…D«Þ\€É ÍéÜÌÎüÌÖBMsˆÎôLÐ|·Ã„ÍÔ\MÚ$OÒ¬Mô¼=ÛLÏÜ€ÝDÊÈ´Îß4Å÷|¿àÜ‹½ìOÿô¿¾Êá„0-ÐÍ D^4P]ÐÈ Äÿ|Pµ¨%>­P 5,Ð ÝP­+P ÑošÐhëP=Ñ»¼G]QuGÑQPÕ)­Q½Q©¼ËÑ”2+õQ R!Ý+RzÑMÒþ$QŽR'}R(Ò3€•R(5R+ÍÒ—òQ,õ(*åO% SzdR--SúÒþ3Sÿ5U) R)4 ‹&]S9Ó©7µÇ8m©.¥©;u;1Ñ Å*°TBMªŸ$¾BMTEUÔC¶E}THÔGmThTI5T$ýÓ>%ÀmѹÊPO­PP UR•¬@¬T í¬ÕÔMÕR«Q}UUY­UÁ:UâéTÊZÕ?mÕÇʽÃV`,ZµÕÍÖkT]5Ö¹BVÂrVÄÂÕ¨YV¸‚ÖýËÔ^ Ôásp>è“>2Žâ)®â> à¶Â×oú\NÛ<¶Z¾ü£½e,?ök+M,Å"Tã+Ö½ì‹<[hs€‚u+ÐÃÃÿí µ5Fa>ÇE=#þcýŒáÙ Ù.=6W€À§´b~ Ävœ îV¡åÃ3l´M£‚×ÒÃ!l+5[V\fepõC-–-.æ…hÀð†7lÀ|4bîe,/IÔå/dC¤Ã&,€]ûG*´BÀB8|æ_6‡`®ã-.Ø)v» Ám†ÂŒæqÖ¶úÀ,Bbžfu±fs°…0‡(@1Û¦ÅxàmîfM>h–Ü:tCÿteufgi;qX€€–¿îÍÙd5Þz*¨k¼aà=  à#Ó†’Ì:&FG[d«pT•†3%€À:èSÌÙvôI¾4ã±-‡ ܘV+pEHôhµÂFN®?¹’E`FÙ[ÊcLÆ@öF™^éš.æÑñéµàÂŨÆ¥dÇr,j·*äl´Fr„Es`jEvj€h‚6hJV++`wU—±žêkœØÜCcàüÎrœhÙ˜aµ‚‚"¨mÜä¿îan'‘Ð pnˆ¥Eiuiè¢B:ÓÉcKƒälsðl+þÊ´²KQn.6è]@ꨄI”´É–m¯\i¸Bmª¹ÿ«d+¸Ä°£LÊ¥d…pʲÉÑîìíåiÙòjµªÙ•¥ÌEàFJ¥,»Œí·Š`Š´È°ÜÊ®4ÕÖm¹äíè6‡‚vls€…ІÖ5Jë¾is oömˆVíý, E‰(½c›UÙ—+oX!ÆéúÆíŒ-(~šl¶¥Cs>[Ahˆ" ³ê¼N·2Ì]“Ns¨ð Ïp!ƒBù„F<ôÎüäêÑim´ eôpó4‡'ÏWLï WïÜð¸U«OÎålNòƒÎòqÇðÿE«Øb'RÎ×ó›nµræ,ÆNi\«ËÌLíOöœMý\Ì 9?oºVoÿ±OèP—(å*à=åœòî óG®4§OßÔloÏ╘þ6ÿf+ƒÍWs aYn…8õÑMóø5Wö'gVõ³ú VIoP«‚eW½tNwt/âsí* ü°tÈzô~ŠôNO+ñàtNuÞ²,Tï¬UgÑYÕOïï€r”Qßô¶ªõÀ2õ×tWß¿ž&õa'Ö7Êc?vÉ¢ïÉÚ+Ç驯¡‰eÇ®ÈF'‘¦S-å+ÌÒvoß)ÿvqw’ú³F±…éö5½ös*¨<õ"r×)#©Ëz÷2ÝÓx/©˜({wR|Ïw" ©—Ò}Wˆ’-A¼©ïQv7'GáYÿˆx‰ŸxНx‹'Dg3‹ßxŽïxÿx§ÇŒ¿§/y“?y”OyŠyÒPy—y˜y™Ÿy¸« š¿yœÏyßyž}‡çy z¡z¢Ÿ;Ÿ§¨¢Oz¥_z¦ŸùsO woz©Ÿzª¯úˆ?wt¿¬ˆ°z®ïz¯ÿúyœöÓˆz°/{³?{´'•h”±Gú´{¸û¦Çú¬g{ˆ{¼Ï{½Ïy¬G ²ß{À|Á÷ø§÷{·|ÄO|ÅÓ¾oûðX|È|ÉïÏ£¨h?øi¯ûªÁ|áš|ÏÇ{ owÍg Ðn¶–ÓO}›ÿ|×O{‚}i²kð‡ °jèéÿÚPkЈ Ú·†[# Ú Þ÷}'y}å7ûÖ sÖ~ÚÚ@Ä(HÚσ´ }¸}j–€þa@U9þ—+á í ~j8ƒ ò'ÑÒgyû¿üŸçO 9ˆ<Ö¬å!ãï „ "àð!Ĉs $FŒšÄ&XÃ(Q"ÅdgFûh¢@*&5šD1P 59'gÒ|Èð&Μ:wòìéó'РB‡-jô(Ò¤J—Я_x*è˜P†5c0™øû3Ï„ƒ/;ÎP&¦CQN³FÆ! ‡R¨Y;£‘#5Ìhœ¤˜Ç!K.‹¥hÿMJk*έËò£Kc\Z[ æá‡XµdR"ÓТG“.mú4êÔª•‚öçô)T©:«R»:p990#(0X‚r ÐÐQ@ƒ NlñÂKºÖ6,&Z“~Q±– ðôÁs8¡‹øaʇРJ?Ù¡4k57¯ùvîŸm®îïÿ?€ 8 µöl±åD›mÔ€_øCWþ(Ýw—YCÃÄ™TÕtuø× w5'@2ÖÄõE†Q#x“YCØCÊd†žb(@‰!B–•Cméçç €•ƒûET “M:ù$”QšæÐBÆ6•D9D›„þÿiÍ0TúCZþ4ƒ…ÖøÃÑ4rÅ$_ÌUQn "u 4$HÖCEÖd €`3BTdb‹ Pç[x¶¤ñÍGä_†©dkRjº)§z* ]¾ÕTZ.éåÇi‰Õ¥E8¡5´¦5m¦:G'cp °ã &ÎiãŠ}þ¥á„NGƒ¡5V*ÀpNèH\°>Jôe–Qj$«˜fú)¸áŠ;.¹8eé©]š*&ªy|U†—Ýv©]î­¶jXMLÜ6 FëYu`^—‹Þ1܆Е…@„5`…t‘aÅŠUXà Ò Lð£ $ÓÄ»…±¥ÞòÿW.Ë-»ü2§ÊÆ.ª gX1ñ‚Éî _U˜f¾÷YãAMQDó’CSÐÅpž×ÙЗaõ*@cöAÔa±%fI/ýص.žq€Xg½µ¼*ü6Ûm»Ô·¨2dS¨]ŠI3Ís;äÁÎ*ûý7à þÑÛ…~8⧘йۭ®Ü9 pÃX#Åà™k¾9ç#þ9è¡¿Œ÷©Ž›Ê¸ç `Ò»þ:ì'‰>;íµwš÷Q+ß;ï½÷n;ðÁ  î¨ù~<òÉ+¿<óÍ;ÿ<ôŸwjÑ[=öÙk¿=÷Ý+>|RH˜C3A¡³?uK0 ±¾Ëâ“_Ú6aÿøJùDyóÅOï#t~únâ¿ ÐT ìàwðƒô˜†x V¥LHØ”6á LÉàÛ@¥ ~Pƒ ©ßýò7”ýý¤ƒ ± úr@œpЃK¡ä^—¸•Åme $ Êp(ìÄT¨à‚Ã&-‘)¤CMO #–P!(DJñt‚¿ž|‹…E¡ÛÇ“¢.‹<‰¢êt8½¼éNŠþ` ŒhÄ»XÇ;†aƒøp:Œq/£ñrÅW$CK`<È ÐÑŽ| «ÈI ¦Am!V@Ç<ĈgÐâép‡íˆG="D Þ G;ÿÌàHN²’—ôŒñväB£,å)Ÿ0|”à .È "¦mÜ"èˆÆYÈC&² æ9XñŽNúC•yÜãMhIIK$—»ìeNÙHl@ð‡7XPÇ;~3|ô# ‰K]òÒ—!¥)QNIŽó–Û 7îÍy®œ8q%,eiMlj“›„4$"²E @£ è&=Y¹®„x#æ˜G2¢éuä“¡|aý‘ÉMC” ™)'ÅèR›ú ÁiC[ùÊXÎ’ ¶,'?Ñ韢r˜%pÈ1a€©z®‘{#?âè/Ðã ÆF, Œ_$GD°ÿ€£Š´Ÿ?éȘú á†0$Є{(ä€Îˆ‡´,°|5¬c=îq…„ 99†3ö8·þ°Ý,7àåUHÞ+ G0 ú#­km«?ª° L£¸‡ V±’5'M„¬`'›N¸ÊÕ³ xu¶‡-cYÏÊÇÈ®@·•uÂemkB„lã3èÀ8H[XÚæ$±‹mljWÛÚׯִþ@m\qmø¢Å5lmkFÒuÈÀÒÆ[5ºÎƒð‘Á«^ïÁS…x¯6õ«e+[ø"V±ŒuìAnË\Ý.°¬2ëÎz‹ªÊÄ»àx,ÿð£àGr„y$÷&¯XF~ãºNø×K¬hLÀ Æîã©3ZåÁ!+–#¨äSIø€®Â0T™?^‡CÈ¡…uñgªpÈ,rV3¼8µÚðG0Z!€tÈFf1—•Ìd 9YZQžò˜—‡ÈU²G–#!7 àȨ3YRg‡HYB¨òÝ–´d Úd”¥EÎmès#ɪ‚6æ5§¸!eŽ+7¾¡Ï!£øÍ‚œ7dá*tõ {&óŒÀ>vùWÇ<^†³äk‡ÛT»VW•¢i  Ó­¡;lRg[Oy©—zÈ•³¬…¯±ÿª V—ˆ·ÚU"ðãæ0Ç9âáÐD#ä ÑH‡:äñŒ÷–Æ1…6ŽmR~PÀ!»è+ÕÜ%r›ÝêöG4^A=„ [U€•N% Ø£G G"óÜ¥úñy¼S; üb@Ç~îtƒ“nŽž³?þð8oüÖ½µ€-ÊA×úCåwhÙó;äáŽö‡Äi®%êY¿=/÷Ê~®„ƒ¦ m*ùÉàÇ{Þqå2à!ϧœå#Eˆ7Äà#ðß6Ïõ±âß}÷[»ö’èîï`8Z×|G¶šâs³S]™0÷õAf¾T‰;„âÇ8· ×F«†8«rÿ¤#øa‚›÷Ђü h$ñG.f,~×TPhÇUW̱¯š¿@69B2o%K¨Ón|}B}g*ã"ÃÀE.€Ñ÷ǽµãþð<èEOz«“ü’(×½Iü&?™ÑÕŽtéOŸz¹À²Ôý·"ôEûCÊÄø½´ýš;ý˳ÅL%« ë(‡þrŒžF‘Þ0LCèa_Áš,ÈCøÄø=DÜÄ굞?”?Ð^ûÔÍf Cß¡Êöî„úl^ä8êÌŸ?L[û}Ÿ3˜\D_ò©M·}XêT¸ %C @ @ØAìš„ÿ:ž?ðÂ1ø¤ÃŒÀ;\  DšÍhµ@­!„_• — áÖøCbYÁp€B>ŒÝA$ĹñÝŸ¸Ã;xƳ՜óaY(áô]õiá2ß¾¡˜ÈanÑ¡I4áFá:MÁ @”ƒü !¡U ?4R#¾_üÝ ê™ó @!šázI®¡òŸÿ jTùT€9, ?¤â¾I©C}ICm9!¦ÃºŒ ¶áAp¡?xáâÒ=„ C[—Ä º b"Þƒ²!ª”"•0bs9â£É DÜaF„6(ßLxr}B0ÿ?Ôƒ6LBX@.¨C=œÃ´Bˆ9pÃ3¾€7Ã3C®©–=ÔBÍä‚;°ƒ[ÙŒ£½€4|C40u©=Ôƒ:à 2Ž>ò£?:Ú¼’;ü£–H$ED<´ƒ.„ÅRDœÃ9øbäp®y‰@¤Áâ vÓ>ö#KÆÞC¸$eÅäLÖ¤|)B*$CÄ =¸ƒ.|”QšdR':%MÚä9Â"z SÒ[#]ØQž$&Jþ#QúÊùCP$n‘?Á=@AW"%Oz‰7àB9ÌÃ1\ÀALåBjÉ6x$HŠdx=dbfäF>#ó Fj$3„`c~ÿdHŽ’²¥W"DJfå?.åD6¥LŽeJ„NJ;8MÀc`.ÎN–¸ÜešQTžï™emêÎoòž4œo>ÑHáò·} éìa¦gé5'^ÕÂ-ÎpNgT:Nê(¥â0çòI‘ZUåÛvÊ͹ô¦Æç÷,çG§ßÐæ«Ao–nN'tš§mjgßg}ºÑqª§ÜC>Î~–gü'»T§sÚgx>¨‚že}6¨uŽ"„êDzz'zRè¡1èy*€®çî$èn§„"¨tN¨¹œDhäNvÆã ..D7È\ÁMúÅ}æÎÚèwžÆöGÿőЯIäè­Ù è”F©”N)•V©•^)–f©–n)—v©—~)˜†©˜Ž)™–©™ž)š¦©š®)›V©E›Æ©œÎ)Ö©Þ)žæ©žî霾iQð) ª˜ú)¡ª¡¦† &ª¢fé¡6ª£>êO´Æ¢N*¥B)¤^*¦fêÊT*§&j¦~*¨ê¦v*©îi¨ž*ªϨ–*«Úiª¾*¬~Ϊ¶*­Æi¬Þ*®®Í¬Ö*¯¦i®þ*°ŠË®ö*±’i°+²Jɰ+³~i²>+´Ȳ6+µji´^+¶V»T+·vi¶~+¸:t+¹2j¸ž+ºòhº¶¨÷(ɺ¾kè$ÿ©í\€¸×iЫ{µëTÁ+¿Ê¨¾Ò„‰äJç Ša(JD€ ¦ì¿JO¿>,¹È|&lÔxZòDAŠxDìg´ÈmËI¬ TNŽ|„ÂBetÄØʳìG‹8‡@\€õ@,͆ ƒF„|Å[,O‹X„ÀÆ^t¬Â„ߤ‡ÉZKDPLÈÄà´ˆhˆÌFOÍVm§ŒŠÄÒ—ÜgXƒgxÅKLx\GYœ…Óª[ØÉdÈ]ØÅtà…^ÄIÂK`„G³`†‘hÂ6†Ûºd˾TÊfl…v 2H­YHÇ1̇ø‰5œ…1,GϼÑ ®<;Zÿ-çB‰•¤ËLl­C`˜äoø†‡¼Äpü…q`DrXƒ %­s¨Gt‹ut wxGŒˆ}”dz íäÔ®Ò¢,¤HÊïÚÇèâ‡n®@Ô@Ì^FdAã–DãŽÁXä½ÄÄp¥XäŸìGç–¯“XÉSDEèÇ}$Éxx…(‹`HapˆÆJ„£L ‰‹s¤ÈB„ÇvЧ1¬Þê/œìC¼‡‰³pKGÍLPD(ƒ½È¬Ì*ÀÐE4näëD¿äÁ\€@Ä]ˆ ä®»š¯ ÈçJ…Ö²ïò^›ÉÙZCY˜ˆ­HÁ›4Œœh‹C0Ê­äÿIaŒ/û   Ä 0Ëæ­ðqþ†dDŠ|<ð}ØpáfˆÌÃÆ4îçëLÁd5YH5hn ¿°ûÖ–Ê lÚÐüÆŠ²P‡­€ ›Ä®LM\‹°X±8oa$‹F0K?K´ pµø­dî¶dqMPðÆø05TÁË’1[Ãt‡øæ*ɜűÄñ¿2jܬÄÒJ¼K CÄöÚ Ý¾m­à¿Ì„¿€ À ¯5 Œ° ÃÁ®H0 _¿'V‹Œ8±àÁ„ l CðU2‚SfèPÎ A•+;~R‡}3„@¡Cˆ8–¬DXF–<™’eRtTVD¨P¥³ˆIYʤiÿ'U‚ÞÔɰ íA^Ç`H'Rå­`, ¼¨R+-è­Õ* îܺ+Õ²”ÊògС‘ܳ²@ ÊøX4Õ•à_–NܽcÂR°»yØ h£Gƒ6 D7€¢‡ÊÒ2˜¦êvlÙ³i×¶}wnÝ»y÷öýxm•²“ »?åÊøÛ¦Ž^=uã`AGÏ®²s¹c× vq!üÁk§k‚쥳‡‡÷7Åö3C3>§Ežwb¬‚< -ë°Ón³_BK s¸y&œø»¨' rQ§žsæÀÀìØŒ ¥Vúï¼#› ÄŒp3op)gžc. èÿoÈy†´ž‹nº•ªXÇžZh”æ›h˜±K«ˆ4Ò®¥'* ²C U‚O¾•ºûŽ>ûJŒ’ªsÎIŠg@ìì³Ôlh£Bm¥5Û`#­‚»Ï<õÜ“Ï=Û %ãx[ PBoÑ@c#ô8ö@|ÒH%”ÒJ-½ÓL5Ý4SiZáÔ>E•ÔRMîOA =Õ6‚ølÔ8Pe•ÖZm½WZ•¸§±JíøØ`…X;Y=Ùd•ÝÍÕeQ}•¶\¥–Új­½–ªnäq Û»œýÜpó €ÜrÍ=ÝtÕ]—ÝvÝeWÜxå—Þzí½ß|õÝ—ß~ýýàÿ€˜à‚ >á„^˜á†~âˆ%ž˜âŠ-¾ãŒ5Þ˜ãŽ=þäE™ä’M>å”U^™å–]~æ˜ež™æšm¾çœuÞ™çž}þè …šè¢>餕^šé¦~ºãn¥žšêªi}묵ޚ뮽þì°Å›ì²ÍN×ê´Õ^›íGÏ~î¸åž›îºí¾»ín­±F€ ¬¡¦Ú½óÞÔoÀW"cok˜õîÆòÈ%Ÿ¼ÜI`ÒÄ÷.Fê(’Ù;¤/\RÏA¯TpL5OW1¬±DÒW’ÁŠa—•òÜuß÷Þ%·<ŒË#•#ÐÉè6‡½‰!Æðÿ•Fÿ;Òä­Y¾yIY·ô<´—ÖuØ7“¥âçÔ÷òÍ?ýôÕµ¼Ÿ~‚ÇüQ WIkŒ)ÞšË>À?Aÿ›&e°†R¼(Ü…Ö8Þi"jXã Ï£Fñ˜AƒÍ$p(€ë(@c(@ex 5ŽQ‚. û€NÀ?læz§Ù›lð·µt/$ˆH ÖàœVg8î­„}û-XÀÛ©‡Öȃ%¥>+^‹Y¤ûÚç>ámF~Õ«Ÿ5†9äàÌbñB'ÐÉAŠÐô°7jeo®!È@7B% ±xÔ(À]ò¸×ánÒ^ÿ\Z#yÔЀð@9À‘,„\cœ@'HѤ¤%1éɽ¯@¢>à6:á€Xd#ÿXŒ@R–OåK9)-þ˜Á&»¸ØE/‚q~©5 ’äµñp£5ÀG´Sˆ£VäÇ·•h3t3xž5Ló9 R¥›,q]&XÃÎHxà 57I0AЏ@ñÎI•Õµ1—ÖøAð™}òSȰFï¨JΤ{+§<­Q¿‘³ Ö8§øTRЃjÔ—ÃéHIоbz~w ãìȸ* Љ4yžC@Dâ-†ÖøJ² @JJЉn£N ÿi y框S85÷!ÍU WX5Š IªHO‡R]]Uc8M>tƒ¯SÉRW·ÙO¨êT«ZÅ’¾®quß©•Ò¯¥ÎÜf4½ê7šv3™Z)†5¢Ap²pœRHKØ7…õ¨I%"5ª =Óìí3¤˜ÏæÀžþôæJ0ÂW„³yø,h°XRò‘ Á* òk¼¥¦«l/ªXÆÂ±“¨íìgC )¹¹Éð¾ø(í® ÊÌ+A*¹ÆmÎT%øÛÐ]ðIÆaޝÃ߇qKîîmß…l;­1"ݽ,ßšÇ<0eÈCõD·Éÿ6/ ÅKÉ}¥¨_Ãi•y`€i++Øï |o|y‹^ó2ÄÌÀB' œßýRJ¹!ñˆ×e¹”Bju­ß0XÅë"ÛÞðïó%H(ˆüms¨šËí4^š89qŘB)6¸¶ƒÞ‘ûHÎÂýX% xò›ž ÐH‘ÎqVîà åéÒÏy©œùÜg‘j¥ ô  ]hCщVô¢ÝhG?Ò‘–ô¤)]iK_ºÒþÀô¦9ÝiOÔ¡5¢iÖSw Y§†ÚªYí›@#M*A«i]kQÿúÔ¹Öõ®yÝk_ÿØÁö°‰=lC`BÅVö²™Ýlg?[Ù%P ­ë/P¡ÚÙÞµ´©­íl_ÛÛá÷¸É]l\÷ú¼`©·@†_ËÀ °€…Jpê*(a×÷÷ö k!‚”è÷²÷€ !<ûØÉö¶0aðr;›ßážE/(^q(xÛ YÈ5V¡ V»gÐ…,šë'¬âáÏÎx®C@WèbS`¶Tñì“§ç9×9³ÏÍë*¼âÔ¬¸‚¯0‹(˜ b¨B¶Ð„*,a KgºÓ¡.uh«ÀBà÷ aj!X†0„$˜]ðƒï|Ø{ &Žv_c]ëÿüîz¶K`ô¢&0A´}Z˜ ×PH¸ìÔ + Â-êmjðbn¶ßj/Ì‚ ,(BÉ—Ý…Â;ûñ‘—üèIÿðžïZ _0u t±„S_Á"0µ dA„SA (ÁdÑ 'ð]÷¼÷=ð«ýo°ï¦>öÀ“ßKL¢@ÀÄÜpJHâà oxÃÉý=Lb{Hö÷ þI(xÃÞIlÐ÷>øÅÿk\sW&$±‡J¢ù¤ÏÔŽ¾/ü’mÿúïÿë/ú¬û¼Îޝù´­ tø:à \!\áLt! Ì@ÿ¢ ØXÁêrPð×¶à L zaNz¡JÏ×TÐärt \ÁÔ^ ^ÀÔš€lÁ¶€Ýbh!`Aô:ðC°Z¡ j! ÊàŒÀqPÃP ŸíôtMd®Š Om„ÐÔ° :À Z¸€ ‰ ΀ º@D0÷°« ¾Îïì(ÁR@מ/ú¦Où Pë PëØN*ߨNýØ®ÂÏá*qíÔ*qû $¡øíÿ~á´Î°áøÍ$!ý¤oúøM.Ñ2±ßöíö`A@yñ+q,‘ 1Ü® æNM jÁÿBÀ fÁÔ¤`¼0 r¡ñzíñŒP×b }-l! ªÀ f€Oíîq ¼ÑÔX¡ vM T¯”€LMr¡:À¬°D@rСQ©Ñx ¨À\` ¬nÛQ"'ò×ÊðÔ\ïLm ¨±×dAŒ hÀX¥àîmž OR R2ÛRùpÑ1vÐÔPñÓïÔÌn5Ñý­àT ÿZñÔÎß*A’áÄO îwÍì|rÿ(!ýŽ-ù¤ox²š2'‘­*¯€À+ƒ2Ùt2M &ðÛ.ÛÊ€ O­°­ˆ "¯ r¯ÿÀ‘y Zל 6p×ì2T ˜`*¯ÒmÛñ/sír×΀.«ÀÝ3€0GpçRï²ò± TÏ TÒÔ“"W“5;À"M- t¡ñ¾@/wíò± ÐP RmOלÀ7M-râP³ìÎÎÔQsí&±+ß/þ.Ð'½(¡r(ûOú)O  ±ù´þs׎mûz‘ÿLÍ'qò'*= ®,¡ò9n¢òÇ­.N{!Lm ³TÁ€“×´` x bðמ NM ÔÔJp54׌€?u-pÁ ;@ †ÎÔªÀna ÿˆ/ PN3´þ3¤ AÅ@ :ÀjpBÍ 5oT"_³"ÓÔΰ×j@»`茳ô–ÏÔš¯qîLí)r‘³,ßïI‰ùNùD1I'.°)IQÚO×Tà²N$a+«R±’IsmJÁ’&×t,ß´ýžÔ-Éíî~ÐÔÔø¼@õ†ß: 2Ó×¶À x­ ´Øœ LÍjÁ; dA?'ÒPsÍ.i4E#/j t6óÔº`OOMÍO;À ¬ jOnáÔ&µRq”VIOG£ d€¬€\ÀÞ^aÝ:àl¡`€ •PÅðëÂnìròÿ2qîdJÎL;` ®ß®óJ… @‘“ïýޱ; $Aàø­ûx-> nÿÊ´àh±MOíZ5±]ÿ„±=ÛJËÍA‰ïtÁ D p¡i Jô8Ø0S×ô.?÷ÎT¯ Z@ ZAöL- ZÁHÅÐaO­fA ^À : ; z!eWà "o p!eM 4îÔv` ¶YA \ Dà l”c=¶VvôtT¼àp ôÔf9ÒÔ\! nôßnà„€K .Z'¡(O-î<½¯ëO[³Óó*þäï½6ü|M>»’íPíÿÂ6^¹Sí°ðlðlîû¾Vo. $”cg!T¡CO rᜠØF“øî®â\öÔ¸ D/Dk!Jö"e¡WÓr1õ r¡Æ ÞB f¡ ² Q;@XAuÍ CMí fˆ¶¢€q7 uá’àã² ý‘t‘–yÑNG‹ dA J`j¶y¯÷íÊ–ÙÜ{O- JuØB‚Ó×XàÐØÆ R)R|Éw Õ·{ãwÜž·ØŠ€ dáÐW~ã—{·W{»· ô×ÛJs Ø€Ø×èØúwÙ{k ˜‚+Ø‚‰M/Xƒ7˜ƒ;؃?X×FM„ÿG˜„KØ„O…SX…W˜…[Ø…7Í7ôL†g˜†»ÅÖnOjX‡w˜‡C‡8†s¥/zD†xVŒ˜ˆA‰iˆ›¸6®@îÁhÁ@% Ø*šà òæŠ5E‹1¥‹“â‹§&Œ­f‰gʼnÓ6ªà¶àd@ ª˜SÊX†é¸[ìXmðXjÎXVÔ8ÅÅháÒÁ¶ØvaÞa,€ ¼€ê!€`СòÐa*¬æI:⢢a†„ºÁB™*¤ >ÚÁ Ä%`B6@àA¼¡1.9“7y*8ÀÞrAÂÄXáˆa‡ÿ>9”_¢ùì’%™’-“5™“›”W˜…™˜d”Kù”ï–qY—§D‘Ù‘yY›§BAh†AÄÁf„Sb`èAˆÁ.¾y˜‹Y”IÙ”Õy‘Ù[üˆ-`¬@ã¡“BŒABÀ”!,€ `V€>… ô‰·!*@¦A.`†a ƒ•Y¢0®`B€(Z‚@b¤@ 8@%ìøãS~D¦¡,àD -^Zj@‚k£;ú£‹“‰ƒú)@š¤M¥7#§wº§—¬¢/:£ÀŽã-Àa( ’a@…„Aš`š «ÿB«Kú¤Sš¢-£Z¡qxøá ™ÅTâø¡­Ž`’â–ª©b¤U§9§øA"˜Z%€¬T­ B¡î(²Ó ‚+  ¤ ´A‚áSÒ¡­àŒ7¸e%û´Yˆ µ bµ„²`>;)F»´[± ‚±w[–oZÀ!¥§À8Å0› –a-|[µ¡¤#†»¸ ±»±%°oØ·Ú8œ¤Q‹ÎÁÌáâÁ‘Ÿ ÒAäáœ{©W"´‹€*Yv³ "N‹%B[,ÀÊŽÚ¹¯;³ò£?z‚ –X ¡¬À¾ñ[¿ÿù;ÑD ¢ *ܦd3ÜÁ!œÞ;¾çۑͺªA{–Ó Cp)S\À \JœÂŸ[Å_¾å›¾Íû¼mítA¥øÁX‚îA @(²B  $;”Cû²'|³7ó“"(ÐB%\Àb™ ¸|%¸¸Y['(¤¿ùbvJªüÊ ËUέIä\‚;ÅiDØ<–£|Ê“"ÐUâÌ "Í ba‡ª{S.»WV™’~»Ð½;´R–‡©ÀÊ/ Â@Ž%C%C(ˆÂ*jâ&ƒ1Ý¿oœ ¦AÀì¡À 0#1`,Êâ,ŠÂ$P‚Öÿ{E³c!&„'îœ ²`JÀ›gBÖµ|1˜]Ú3â)8BÁµ‚$’)\}0bÛW¢ØÍ"­×A.@|a%2#)è34.ä‚.ìÂ)6‚ÈiÙÜkú5Hý†³`ðaŠW]JüB2dCTB´\¶D«¡ãIþ-”„¶¡ðý.°Ä6¤Fn$G¢CD%(¾KÄÂíÜIzD áâæs¢$âµÄ;*žG¼›DðãÐÕœ*N~§¨ÄáužK`äq$­qábŸ ¢LÈÄLXbêUBIŠäHVþK‚~JÞJ”œà8oˆ’í)ºíÇÞ‰ÕÆLHàA ÒÞî!eíÛÞíXm¨@ârüîÿ.ò>‰÷^i!ù+þ,0ÿý H° Áƒ{CH°ƒÃ #”‚®^4%jÜȱ£Ç !v¤h¤É‚àÊxTH0];~1²Ü8ÓáÌ“8sêÜɳ§ÏŸ@ ’JtèÇdËR©²ÑŠ;‘'¥É ´ªUŒP±z”òaÖ )=.mHfÆ‚7Ï&\èÏáXjÆèôªÝ»xóêhÔ$RN¿~D—…êÞÃçΕH¸ëC»aqv(ÛVpZÁkbF¸xq]Ä{È(§èÓ¨Q÷Åê5"ÒÖþº¤£Wì¬ gñæ#â/I:wúÒ¥‹UYäãÊâ¹óÅBà²tøÜ¥SÆúqÛ+àê¹s%¹ræþ¸ ÿ#wNá„a§w¾'qþx^[N’XEùÐ Púá‘h6ØÐ†i©Å)§]«a¸A¯ØBgå¢M "L1Ã@vÖ2Ѽ@D9´`•Ng)R÷tQ ^8wÑ¢rÑ Ü$óÂ=4x ª¨¤úƒ¨¢Œú7Î "pÿ3•?~*(gyóª?² 4†&qÎ,á}ê¨f*£Í /8CŒ@µ:¨Y=*WR¬6 ¦&6¼6¶P޲r§ —DîåNU¶²”·Ìåªh#¹]³˜Ò-w5.ŲDþ9æ6»Ùÿ$S¸‡I=b‡:ÛùÎxγßÌgД™#lF mûLèBÿäó0ƒ¡ý²8úÑŽ´¤'MéJ[úҘδ¦7ÍéN{úÓ µ¨GMêR›úÔ¨Nµª'Í般úհ޵¬gMëZÛúÖ¸Îu¬[Í]ûú×À¶°‡Mìb›×þ€²—-c;ûÙÐŽ¶´§MmT#›ÙÊöGµ·Íín{ûÛà^õµPp›ûÜèN·º¡=îr¯ûÝðŽ·¼çíéq3[Ûôη¾÷ÍopÛ{Ùøî·ÀNð‚ߺÝ1¸ÂÎð†wáq¸Ä'Nq…C\ ϸÆ7þnd„㠹ȧíqƒŒüä(ÿOy®Kîn•»üå0'5Ë ‚íšÛüæ8ϹÎwÎóžûüç@ºÐ‡NôÏüèHosÑ—Îô¦;ýéPzÔ“NõªCYêXǹ5¬!€ XƒY¯ùÖÃNöœ{ìÌ&ÃÖ­A…§[ýíp? `œ¯}ëÅ(ûÍ£Œ­çAì\?»Ïùî÷ èw?|ØÅ` +è\ðÌ–†Áv·Çýò˜¿ Â0wšã\yð;ô^ólÄ@;³Çù›Þ¨W½Ï/t¿çáöeg¼ãÍþu›‡¾íNϼð‡Ïô£œ§{²s®€Þ/[Ö0Fè­Á|`úy˜€²ýþõ  Öƒÿ²CœÃ£ ”-jXã ¬ÿzè­šóó§ýŒ??ø¡€ï»ßÇPÛÇuQðu '€}`w\Çl(°u`_§} èw ¨lVà~Ôp¨~ÖwRxhWÿ€]'Ö@ãWyËVÖèsÄ7ƒ4èÆw|È7w:×|²}Ö0 X2À /z'~'/(Ð{ °uýws[×Ìv~÷'ø¡G  uÖ@…ËÆxcÀ}9 ·—Œ hzÔ  î2È€·—N lNð‚Æ` e‡á§„Ç€‡[zG8v˜wàFèåg†yÿ€†Ö †^§…_×…fÈ‚o‡€t5؉žx7ˆƒ9È|ΧlÐG °l¦w„îWHh `…ɰ‚40KxsÍ×€Ëf‹7ñ÷…Ðwëgs¹ˆmŒWÔX~ð†à~]xwn(Lð‚p¡7Œ6—xGx‰ÖðÊVypÙ(È` 4 lQhˆ†W…ΓH…¸‚ÀGÖˆÖ <÷‰þø‰¡˜ƒ°ƒ¥(Ð7 ÌFá·‚ÞÓÀ~ázéè… ÀlY€~ohze(…ÖP‘îøŒÊh SpJxwywU lWxÖP^hs¯w-™x0I{ÿxˆî¸{`’‰·Ç‘ö¸l5yw0)ƒÿ˜”3xƒÉ'Ùƒ?Èl«¨l­øŠ'ø¹u²gsÅ` ^ lëÇ‹ø‹© ûˆs]ù•ê'Œ'’8!H UðzT¸u@/˜|™Ó¸º¸l ð¯ lz™}é—`–ø†Hí¨l_` W°lq9—S8‰ey– „wh˜{Ù—ÙJYš™·y79w{~W¦•Ëæ‡¬Yˆg Xé˜sÕøƒÃvVØxÓ—…ð…–hs»9 ½É–Öà–$‚Æ€»Y—\×K¸î—e[‰m¶‡{—˜¡÷•Öÿù‚Ù‰v5IˆTi à™`ÑwåçœÐ™™[7œ•¨lU‚Xp‡ã‰Úɉ¦ p—šžç‘k—w ›-ˆ}®h•^w›>ƒ8ÑPx0q¨‘[h:G¡…×–Éø–€}î'ʶ‡å‡Ów‹ºv‚Óp¿é}*ºv݈ÿ—~ø‚ìÙ”×{#z…_xv›+ –+Ú=' L*|¤Ws  O:¥TZ¥ÁפX wUz“g R`¥`¦bJšYZ¦IW¥È¢cº¦l¦fú¦ŒÖ¦r:§t:¥p݆§§vQ§~ú§€¨D‡r|z‚z¨ˆš¨‚J¨…ÿZŠŠm· OŠæ@ÎtÛcú —ú¨=ç àˆmè°ü€OǨ MW (uQÀ6×Oð¤ÐÀ <÷ªØ–©›Ú©‰Š«;ª6×¥zª'—ªA±ª­u¾*¦æp9·¬Ê¦«bÊ© ­8¬5'¬¦êt¨j¬=¬5ÇÆðì `™Þ@í`ÊæäPñ  3€í(´ ˆó ©Ë&®äj®Ñz Ñ€Ѱ9°åz®p èè` 8W¯÷š¯ÑJ Üp«l° ëðÃ`:'麮Pæ äÀ ï@ íú®ñ:¯@­PbÿÙ±²9‡³ +²`` l¿ð ]ȳ:Ë~%Ë® ­¯0‹‹¯è ¯à®ð*¯Êæ ¹`ó «lÚÊlF+²?×­ÞºàŠmÇà °ãРʆ÷p X l\€ °äà¶Êf­Ê©Ì–¶kÛ¶Ñ Ó`«8'¸l˷ʆÎ:¡°ÊlÛpå4Šk Ò  ¿sp+·t{²ë ÓP p" w›·{«lœzÚà –¨¹œë¹9g»û¹Pð@W ]«»¸+¡;·u»´š:³³Ø·“»l­«·|«[2`Ò€^;¬ËF¼¼ësΆq’ÿ¦§W¶ßÊt¬Šm €Ÿã lT”s¯° Ëæ·¸ê¨¾ÊƾѪ Ê6 JŒø+ú»l{«Ï­|K ywüp”G09÷¾ÌVÚ Áà¶ép”Ë¿°Ë ß ±ÊÆÀ Á7'ÂÊöÀ˶çðH |Â$,Á”»¼M;¿Œm,Þ ÊFô°l_ëÂ# tç&¾¯F¾å»tçËl&À2€Ÿð lÑP˜ØöÑê Ï`Ã6g¿ÐÄO|²Q¬¼°Û¼6ÆPÌl¼sÖÊ´³Xç`æpñ ¶67ÅØ¦Að úŠG VŒÅZ »ü€ ðÀ†Éqÿ<Çu|sp,Çt,¶Ð·ùÈŒ,²xœ«4lÆÖÈY¼Å:,ÊfüÀ°Aœ—Š Éì½ÅŠÄfk¾Éz¿ëÛ¾ ÃÊF÷àý аlPÐ]ì¯oÀìÆ8—¾³¬Æ‘{s¿¬Ée,À&Ðs¶|²ÉÇàǸ¬ËÀ˰ÛËÃ0 ýÍÓ¼sälss5éwÎØVÍ é×6¾ Ì˶ͻÜË:ÌÃ@ò°l"À°lì,tÑfľæÊ¯¬ÄÈ0 =]˜ j˶®ð¶÷` À•Éûà}!€øL¯ø€È*ÌÁÑã0Ñd̼9у‹Ò»Ì67!=ÃÏÿܰÉPÉ{spkÑmÍ{ÜÇG ÑíѰ{©?«ÏÇpÓ9½Ó6·Ô8­Óʶé€40I lPÝÔíÓ•)¼ˆf,Ó"-D-ÏÞ Õ+ Ý[ïðÕZÍÔR½lÚ :'l]l­«z[¶u‡!p ðк }Ê6éê¹)æÀ Ï -¹àìÀ·Û ôPê@Ë…}؉­›œs¡ØŠýÒ=wÙ™MÚ5m¹\ç›8ÇØôàØ@Í~Ì–‘=ÙøL­P÷Û²MÛ6gÜõ0ÛyIYͺëÐÊÍÜ‹ÝØ¹ùÞ@Ï@ flÙ˜ÿÍ·-Ù”}µ¸Póp ͸lU_µÀ±±½ÜÈͼzsdû×á©øßúMvõmß±ßàtýíß1àžà ®lnàAß1áNl>ážáã[áÿmsþáôÖ×ÒfÐ^â&~â(žâ*¾â,Þâ.þâ0ã2>ã4^ã6~ã8žã:¾ã<Þã>þã@äB>äD^äF~äHžäJ¾äLÞä'¾àP>àNãQ^åû=å0àù¤8iåL‡å'N ‘xᤄ÷‚±uþpvqæyjždðbpºwær‚šÊ§ 'z ñz±—æÖ°æ_Ç‚ÿžzp^è8~Öð Ç@ vÞxxîpz'L)æ Áƒ}Ò·uLà×çw ÜG ƒ~£áäÇö'¯Õ~ï§æDš‚fâêèëþÖ°ýG‚[€¦^èH à.ƒ›¾uƒ4-Éîþ…ή€ø}ÓêÀ€ ‚w'颎}¥îž~í‘ç—ŽÙ”5Gœ>>„BH„³íJøæM(éO‹ 1…ñ›ÚIëxGœûþ…!†dÈꘆÃΆ Ëš€ Q)X~(‡Ç@ïh^ñ€Xí?„"s† Ÿˆ‹ØSCX„h.îõéñ ‘m géç.w¢x|œÿ·îÑîÕŽŠtò­èP(‹!‘¼¸ìŒ>Aï‹…>þ Œ‘‹qŒ!j =ÕŒ ðŒÖP<¿v ïâHŽûˆ¦W{h 5°õú==o LCöÙˆò8? ËToõ»N鱊±ó§xÁòçò/鮃,?ø vNy,¯âw‰ Y›X‚n&4õ @9zL”|ˆ¯’¢#Y’'¹v•¯’Q”k§ÁçÒО{X¨¿u7éøþû/™ Ø+>‰’ŸO÷þ øäzÞ‡øäÆù4oî™®|·|䦎½wø°Y÷KèUé‘‹‡îüÍÿO7^©ëbyÿ‘‹Ùõ!i –sÏœpùu˜Iðv ‡š|9š,Ÿ‹ 5p˜‰ÙðØD¬åÉQ0‡2¬  ÀŸ?)Ö¨UÉaÍZƒ‡_¬]yè¯b‡Ô¬UH¸°aG”(O¢ ÐÒåK˜1eΤYÓæMœ/SîäÙÓçO A…%ZÔèQ¤I••+:'Å´èo‚µi«Z<ãoªZ¯þ˜X6Œš€ ­\µf–îUj|Î]hןk¨å±amJDc(c,Ûdì‚°eòÜ•— V‘50ÔL¬5gӎκù¤I¯%[ÄÿèÏŠ5cW¢| {5[®+} ˜ÓøqäÉ/eÞÜùsèÑ¥Gºó­Û“,n/¶¶×|óTpk15Zµ ­yÀ>õº¿(Ѱ6œ"RNÙ³‹%Ú. >ÖÃ[¬±) O$ÊúòÇk¢¾rÏ=µÎ‰š/ðÂí~óÇ<ÕÜâp¾’ºzÈ@Ð.z¨a,2ÍŸð°"¯DâxªQ9sÔ§ézôñG ƒ²?¯:ƒ«=ãjª¸ð`!¸”$òHì¨L2»&k|/¨·¶ì¨Æ*­SÒÈë´S̨¬ìéÆÛtSÇ!ã”sN:댊Â%;Ã3Ì(‘ôç+Z”âË š°HÿD§|ÏK/¯,³Ð>ïD“P*²ÑI+•RL%ßôôÓœìuTRK-ÊÒ<ÝÓL<“PUL ÅÓH"·ÜsIC!EõÒ;a¥UÏGoåôQ5×¼Td“…ÉTf›uÖÙ3Ÿ•¶ÙhëTöZd§Õv[n¡«¶[p}ÄrÓpË=êPtÓUw]vÛu÷]xã•w^zëµ7^£¾5w_æ å÷_¢îx`‚ 6ø`„66a†vØámÂxÝ”ÐY‡ ܳãCo fby_qd÷<ÖøâŒIVÞ5#.Ødv‘0‡ž‘åÝ8å•×]ø]XIçžq²Èyª(ØI¸è¡ëu9çZàØ=§qžª‰ÿ'¾Bœ{Ü¡E3øÑJbøq0]‘s¦z¨“VÕ¢UZz`˜×…†{Óviµwv÷–už° ‰“ÆûàÁ×~÷m•›~z*»®âž-.A ®ýñF€ ЙgltË6\€Æ?Oú¡¶¿DüÞ¸Õ5‡Šºo¨ðtyh£¡6z(Xov7ÀGè -Øew†± ¡mn‰h6hÈwà…ŸÊZŽIǪ½ §žx€¡@€Ði'tÐY¥!Œy‡\$x>úé«F·ûïÃ_€òÏOÝ¥_I¦¡ ”Go°`y¿ ÞðÒµ(¸§ ÏÀ6hÁ{$o€Í3`ñŽ'ÁuIÁôh‡ÿb=ìi¯#¡묠¹MÅ‚ÈSž^ ztÃ)L—8x1!3Hc3ÐB.âá fo{( QŒ€yœ× 1xÂyа!$&ß S¥¯cÍHòvèâ zÐ7  `@ð 9œ˜ `Ð xXíj?:€—)ðcDàÇ9üaŽsÄcxüå±ýd:ÿ£˜SyB4Ò¡y0ðu\À‚•+€*ÀãyKfWá¬Ü,w6§°E9èRù!HNÞAptÃ÷H"‘{¼f!_«ëŠÆ+Õä'G9¸hÓçy¥Èß"ðcˆ»hîT"«P÷äP¹ \D e)¿‚È€Õ|ä<ÃSAo¡Õ; üb|è8§Ù|é(_Õ³Ë+ó™ ˜.þ*±Öhvu¨Ù6TÓa¸È沯'”èElØÅ¾õ„Ýk)çZ«eW‡y°{¸! ~Цb9°AÜ6qJâµ{@Z :Æ?Lp(þ¶û݇rÆüB{há®±€ÆT ÐÈJ¶!ÿœ5¦½Ùõo œ²–UW4ÈÐ\dµ!.ð‡åí®Èc ±`ÆP­çY_|BÒFo'„o}ûƒß?z:•–¿œÔ‡~¤[{eæ®ëºX¨{~ˆò}÷›ˆýÆ4î*r¥ºŸùHQ­j é÷ÎwÐeÓ©P܃ ø¤%.­ `êêzȿ݆ᱧ ¹hœ¡ØÝ.gS]ßàwCñ¬6Ý=¯¶ HœmÛ½˜Ü(|[ OöM¶ké`º c#%(@ è òœJžò–žÁ9° è:÷ðÆås˜®èü»fpz÷$Cõã`½ºxq ±§cS˜ÿA:P/|sò•¿|ºšÁŽ$€²¸ú5Oüæ¯ëVX®@?Ћžô)À;®ïžî¿d4ß³¦!ŒÁž ò}HLÒSùáçC?z¡—­æ`~ä‡Ïù©`…3Ø/¥3´ ?§KµU;ÿÛ £0Ä¿†À@ н©@@÷Á¾kˆ1;1›Š€ 8± š±vQ€WX é@ Èu¨‡s@Ì[£'ŒÂ)l=÷à†g†Ò›4w`‡b c€‡vÐ… ÐBÿwÉ…1,Ã3LÃ5T—ðrxbX£1@zp]H"%‚B)¤Ât9ƒwPà)ˆ¾@ÄB*$9t™‚ r*sðB0D ’²‡ZpMìÄRz¨u`¸\{!z؆bvÉ‚q8¤­™¿†ˆ(.ÄÄü«™"¸‡ºÂAtqø81[£mERd80[NT—*xºlÄ^€ZüB µ=ìÃ?\—:¼ÃZê ¾à]k 'ÔE‘tÚ+®cÞ¥§‰_‹ †ðu(>dDNäQ›'\}dMRdIždJ˜œAdMŽäJîdOîä¡q•%ÞdR¦—O>eTNäR^å¡LeW~eÁdeYžeZ®e[–Hm¹e]Þe^îåMÞƒ )‡‘š)˜›éöf•Ic&eJfFH~æv)‚|Pb®™¥;SÛH`Ž—bàØC9›/¦2z™„¡"rFæµYç)êæ„q禔çôbJjf— ’Aç ¡gxvÈo†—p˜ “—ÕIçfg‡¬g_®††föÛÈÿƒn—‡–١û—€~—ž(’¢6:#îñ:2¸C©ôQŸÈ3$Dò.t!‚{0 #ˆé/b¤0zg©ùh÷è£? $vÑ Ú:”¾Ÿ*0,Ò".pmc[Ði¨qAZé¡62£7R©£ j¡t£!R î ò1Ÿ”Æ2£Î¢-jˆ¥nê§nˆ®Æi÷¨ê Ú ³¦´&êµFjµ>ê¶®é"'j!ž¤ é­n3‹¹æ©Pl4j•.ìu)¤CJ$¹F!B“»†K¤ŒÆåi‘—ŽVhÜÚ)›š2wa¦aâ2yT—qØ‚~ò®ªZ²á’¢¥jª§’>ÿx’§Ëcmg")“B)•Rêq €H†]¿Ív¨2&d&ª)™Kú¨u©mÞŽ§yú¦Ùã%á>©”ú$p8îä^î™kî©xîty'îþíïÆ²’o• oâþ$íV§˜b¥Üvª¢)žªfÇ>mêöîf*¦Úïvyímžj©aïwñ*°Ú€,«³J«µj«·Š«#”Òç Iü"Wÿ0g=U8‚‹G S—3è7`‡)¨° 3í/[“ ¸Í²¬õj¯÷ú+p`¥)pævð©€0ñrGñw!.Ü¢Qu©¯tÉqGCqg/÷øRj!'òô6òïB0ñ*9Õ¬ÿ»r×ò"èñ,ßòì²0òzò*c0O!&wkv;[+¿­ÂZðoðsÛŠ—û°$1C1c1ƒ±Ÿ¤pñ"§53C3Õf—³©`pti|'x@„¶A¯tdkFã3?sMײeTÀ¨Sê¥$Ї-5œY66%ë]»5uñ§ü3'Ã4VŸWÇ2fœup¨õ[Ïõƒj^7¶ é3e§ó0‹u¨c5noFS¯BHuXu]»taO—<Ÿ 2C÷9¿2N‡Dtñt]ŸŠjO÷¾»6ÀÛ¶Áó6 ·q‹t€ çžðžps0ƒŽ0; Ð¬‡¨,ÿ”˜0¡˜†1†]x S9h`9—Û ƒˆµ{ˆú ÞJ ‡÷ˆ_FP5`5‡Xx+p”øxŽç€ŽH;_7é¬Køv!öòC £»0<*ÇØ>ÿvg¹örAo½s»yk—£çógvY÷öfgµ¡¯;q_;l:(„ߺuY÷ {«?sF\zg:—› p¿c€}<‚ü¶ÐI·,d˜¿ŸÁx›÷ äÀŽÁ ½fr…ˆ§¡ð‚o˜$xûóüã>ïóøzô †Ÿ˜¾êãPüÕó•ïö#xùu‹ò…š}”?”hA6¤ ´@ÿvúYK—$=Þ¦>ëK½ÅÇzÕWêÖýJo> þÑ'þÕ3þTzVûýi,?Äý ìÀ†ÐV<¶€Â×}Ó§½µW—¶?@ïû¥ÿsAñßAñ[ô lˆ!,Bÿ—b~:ñ·M½zêÆùó7=wº4l˜Ë»V7V q ^;]6¢£âO€€“(9ú»pïÜF1æ¸= mc•uöj5<˜paÃÒ¾EcŒ¥Ê†S¼E<ÓÐ#H‘þªLó÷k•tGüÃunÞ± =*dX1çΆr©«wî JΰÆð0âĺzø,‹r[”¯’í­+ÿ“¦ÍÂu—6E 5äT\ÍzD@ׯaÿ’]Xm-”kÛ¾U—±;¸‹”<2V­“+kp¸&´¿ F)”¨Q”w%.¨ËÎÙÞ"ùêÏ»ú#dÝ‚ ›FY²n_ÏqA‹fëV5ÊãÕð°ÒF6Ú´ÉEú¸ëÛ°É )þüú÷W\É¿¿^ÿ 8 Jq±´’ü¦ "å߃{m” 8]xàxj¸!‡nX¡‡!Š8"‰qO‰)ª¸"‰ºø_]Jø" Í8aJ î· ‹:r!†"Ua²x$’‚˜$“M’ÈŠ7NJ¢UZy%–YZy_‘]Úÿ(¤~>.8£„ úøcƒ_ÆÈc„)%•”™1覚g☣.)§ŒSúÉâž,¾2(¡¯ˆñ'¢Ý¼¤¢:J§—5*¥•Zz)¦™jº)§zú)¨¡Š:*©˜Fz*ª©ªº*«­ºú*¬±æ7i©µÚz+®¹êz«¬½úú+°Á ;,±Aêµ+²É*»,³¦û,´ÑJ;-µ¬ÎØ,¶Ùj»m¦Õzû-¸áŠ,Ÿþp{.ºéâ:.»íºû.¼²¤.½õÚÛm¼ùê»/¿ÏÞû/Àèö;0ÁÜeÀ +¼ìÁ ;ü°Ã K<±­[|1ÆíR¼1Çžfü1È!Û1É%›|2Ê)«ÿ\+¸+»ü2Ì1Ë}4ÒI+=³ÑK;ý4ÔQßÛ´ÔU[}5ÖE›5×]{í5Õ_‹=6Ù@‡]6Úi«òÙk»ý6Üÿ¶7ÝuÛ­ìÜwë½7ßoÝ7à ~iÞƒ~xÚ"+¾8ã;þ8ä‘K>9å•[~9æ™k¾9ç{þ9è¡‹>:饛~:ê©«¾:ë­»þ:ì±Ë>;íµÛ~;î¹ë¾;ï½ûþ;ðÁ ?<ñÅ<òÉ+¿<óÍwŽxÕÎK_$ôRO½‹ÕG=÷òr¤=ÔÝ‹_çFà?=¾ø×š¿4úÝÓº~Òísÿ>üGËÿ=ýõ}ÿõêëO4ÿ¦W®ÿÙ/€ÎRC@ŠOûc`÷(4FP‚f£ ö,xA NOƒŒ›ò>(µ…p„&$[ O¨Â®¥p….´Z _(Ãó%o†6¤!òn¨ÃøÕp‡>œ`(ÄÅpˆF”Y¨Ä•%q‰N4YŸ(ÅEqŠVT³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(Ç9Ò±Žv¼#ó¨Ç=ò±~ü# )È‹]±cƒô\!{vHÎ%’Š‹œÍÕȉ=’>š$%+9ÿa2ašÜda:¹°OB.¢œ)gÊSÖ+•ªt+ÿæÊÆ 0–r›åâ"iË[â2r»De/ƒ)Ìa³˜Æ<&2ÍØ°ä &I&4"ƒŠÔB !`f~¤  VÉ f¨È2ÃY‘œA²hÂFž°ŠhFÓ ¹(A ŒÀ‹%`?]àªZЊYd¡!áü§?^P ,¬€ ·(AEhÀ‹°3™X`E8qñ„ül!¼ E,`ÁÐH‰À O ÅDý±LŽt gX& z1ƒŠ° 5h(2Íà…„€ ³`A~: ]Ô@œ‘ú‚b R‘þ3œ!°Eªà„ Uš½˜&L‹‚[䂺pTñÓ"èâš#õ’Àà'Ü‚¤EÝj/b ÿ .0a&¨ÈxШ“©JxA È ý0s>-Ò΀P,|“¨àdærAT-8¥"Y(,]‡ù]ˆ`™U€EN;Ð }µKgèhA«‘¯ŠÓ µX¦ j…ŽÈ ‘%&cC°‚#ð3³dÈÂ_½´ÌZ„t™E¸Â FªP$´@ ­AE¢Ðмv˜Ÿí.ZQæjµO˜- ©05àÄç êY…ZäB /¨ˆ dQ„æ6·³©Ê­?Xp‹)pĽ ÃjÙûZûžŠ¿Uø‚~Ìþ ¸À>0‚ƒ÷K&8{ f_ƒ_ô`GxG1š°Ò*lá ci¤$Ùá=~8Hß1‰K|§£ˆ*^qùZìâˆÅ2þÑÄáã8ÇwZ 7èc¤¹ÇC&r‘‰xd$'9gG!ùþ,@ ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜÈQa€ CŠI²¤É“(Sª\ɲ¥K’cÊœI³¦Í›8sêÜ)ð¥ÏŸ@ƒ ªÒæ­`9‘˜£çŒ§SžJ™:õöâQ‚èÖùÀðjC¯Á>‘¨Ù³hÓÍXìÂ&OFaw+²xmÚK"Ü‚-¶vEú•°À¿çæí¨¶±ãÇÙºµ¨Ø¢9*‹3w¼Ì·ªÅÀ\ŠU8:fe§<ÚlãO#ä×°c¿”lÐ ºy†lPOž7f k—ºU 9{Ç.—ÇÐùó‡ÎØB)Þèµ3#P9s窘ÿGŽÕ;báÇ—?ß}yóç¶ÝІ.Ú»{ÿV(Ÿ¾}^SO<ÀPyæ¡'€»¬óÎ0àÇ›oÀ%ÝtÕµ÷|8CË1é¸BX BÞäbÎ<ÉÜ_½’Œ@¶á˜`Å0 =Ú“›A:òè#·ýè!ˆ".Øàƒ „vÜ GœqÈ àÝ{â3àS‚@.äD©pÂt®É¦æšl@›h¹Í"  (ÁÁ@§)tŒ3¬0N+Xa¶þ\±@X@ǧŸ€V±ŽÓc?"8 ©¤” °gŸ ´M8(0Í]ÈI§ü**©\ ±À ä4ÿúh¤“Š €1Ò„`2¿djw.„Ž Šr ¨@ÎÄãÄ‚+$Ô꫱¢¸Ž H3Œ§0 #A£F7ÂHЄ??®¸ärk¤²Ìޚ뮽 @¨¡ˆâIA›2š%»} ÀM­"MD<è°ÃÁ­ÙÐk¡°Fþì € lDœP›gÜØ›‰%K8E(PPž)€Ï²„1N  SLA&£¬rxÚ  éQEÍ7 sÌÍŸ*¾¾,ÀÇ!3´ Ñ¥MÐ+ËÐl3ÎE\àO1@H‹ÜаòÊÈ^ Ô(Ê"ô`ãŒu‹£&ø#ƒ@Ë”;PÝw ÿ·º9c¶@Vc-€Ö¹|Pžb ÝáàŠ#9ZlC=ØàOm0À@ €Âæ0Ѐ? Ð iìúëAq\XØR=’ÚËßUË EóJA¼‡÷{Óð rè¼òÌQ¼ïnk wí·çžÐ6Ùn+ÀѤ£Ž<Ï„—üò4O„?ç˜cÎ9ñDˆ=îM*¶@ÓÿŽì± />ù(ƒ@Œàçpïm€#ˆ·RH»Ð(&0KüÀúÚ÷¾ø @x‹»þìÖ;ýu(ƒ ²GŽ@>„6àÁ4çÄ6ÝBC°!‡ÿ‡XŒ´e0q9¸#(´ƒ!#›@î§Å$Šæƒ^úœw¾èañE$ˆ™ˆZOð‡D hd}ÍÀ?L12„Š_ìP•’Æ5  i[›< 2$p ËDà`  þ¨1$øÈH d’DÖ G:ÄŠqâO4):c“.r ‰ÀÐs4´¡p(:YN¬5 !¢.w¶ cÀœ@â–›)Ì (‡2K.$‹‡+€§BYa¸‚@ É©i>Ž\ÔbóÀM?MŒg€1‘©LþtoFðÇ t¸ñ›ÑÓT2JPÿ€$JÇLæ2…E,rFóœzdH<çYO7&Äê –4âÅ ·` ‰Àh ðmDwi=() @¤¹Í) rŒ}öóŸÖĦGƒãÌm4K¨€Üñ&D­T ¢9ΙtµçB—Б—P"[¦CÕemCô¨‡:È6tÐúXAráv ° !8<Ú¡‹ PS!SÈŽ?Î ´®µ­oŒ>·HOµ²Õ­èô^W¿Vw†Q æàÆ3‚qÏ.òÕ¹PG=ÎAW ¬b%(AìúWœ6±Še,ŠpQŽyãy7Èñ bÀíªYÝ*AeZÿ¤V߈3HúÜê–0°Õª)Q YÉRv qýjeYÖcq¯š<È9Îav4E¨@ÔÜĆKØr»¬É@ë¢J^×iæ¼èM¯z×»iœ•,å/ÆØKßúÚ÷¾ø]ˆj ªú÷¿ðxåKàØä÷ÀN°‚yÒ ydK3ŽðkHAá S¸ΰ†7Ìá{øÃ ±ˆGLâ›øÄ(N±ŠWÌâ»øÅ0ޱŒgLã󿮦°…qÌãûøÇ@²‡Lä"ùÈH+œä&;ùÉP޲”§Lå*yɶ²–·Ìå.{ùË`ó‡±L 1›ùÌhN³š×Ìf “¹ÿÍp޳œçLç:³øÍvγž÷Ìç>oÏ~´ MèB·ІN´¢Íè=#ºÑŽ´¤'­åGSúҘδ¦oléM{úÓ uޱ,êR›úÔ˜î4ªWÍêVçYծ޵¬gæÛúָε®wÍë^ûú×À¶°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØÎ¶¶·Íín{ûÛà·¸ÇMîr›ûÜèN·º×Íîv»ûÝðŽ·¼çMïzÛûÞøÎ·¾÷Íï~ûû߸ÀNð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈGNò’›üä(ÿO¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nõª[ýêXϺַÎõ®{ýë`»ØÇNö²›ýìhO»Ú×Îö¶»ýíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýàOøÂþðˆO¼âÏøÆ;þñ¼ä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½èGOúÒ›þô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸Ï½îwÏûÞûþ÷À¾ð‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö·Ïýî{ÿûà¿ÿøÇOþò›ÿüèO¿ú×Ïþö»ÿýð¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€X€x€˜€ ¸€ Ø€ø€8Xx˜¸Øø ‚"8‚$X‚&x‚(˜‚*¸‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ:¸ƒ<؃>øƒ@„B8„DX„Fx„H˜„J¸„LØ„Nø„P…R8…TX…Vx…X˜…Z¸…\Ø…^ø…`†b8†dX†fx†h˜†j¸†l؆nø†p‡r8‡tX‡vx‡x˜‡z¸‡|؇~ø‡€ˆ‚8ˆ„Xˆ†xˆˆ˜ˆŠ¸ˆŒØˆŽŽøˆ‰’8‰”X‰–x‰˜˜‰š¸‰œØ‰žø‰ Š¢8ФXЦxЍ˜Šª¸Š¬Xv²Ð °h ­˜n.Ð 2`&I³xnJ@ ¶‹çfº ´`ŒæV1I»0.È8næÀ WðŒÐ˜a,p N`â4°DpgÜnc°J®`ºX|!ùþ,@ÿ(0€Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²äB‚Mª\ɲ¥Ë—0cÊœI³¦Í(ÞÜɳ§ÏŸ@ƒ *3gA¢H“*]Ê´©Ó§ €JµªÕ«X³jE(u«×¯`Ê«±+Ù³hÓª]›Ô,Û·pãÊ»Ñ-Ý»xóêMkw¯ß¿€#í+¸°áÈKN̸±ãÇ'BžL¹²áÅ–3kÞ|3çÏ C?%Eºté¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñã¬M+Gμ¹óçУKŸN½ºõëØ•›ÆÎÛŸ¿,¼?ÿÏ]xøïªÁx÷—¥¼û÷ðãËï];©×ë½£þdÙzÖâW[ÿÝFžnùhœþ˜›€ªå`†0ìÍgá…f¨¡ë-çZù1]úƒžj*‰þc"n*r˜s :„«y×Þ†<öèã×%èÏi¯ `þ ÓŠwUt@C,ë±€Z‚Dt0†?y ¶ä¯ãˆä€Þ™‘âzÔ,›—`ŠÉ — "CBa¬§ S~÷„w4tP”þ´Rl*"é Fx'åŸÞ šš™þXc£xHîGf‚¨ÕéÝàå—fj:ªÆh ƒiꩨ¦›õÁfä‰azÿ'ÌyP!5²’·ˆßÍ  Þ‰€Ÿ?(¨ƒ¶¸^Ûƒ¼zEÃø#ƒÌäI…w3t@‚wy€¨ ¡ùišÞ%ãÏÞ‚+î¹àúKž±îGƒ€jjÕ^ëO¶ç™è³„ŠÚ·X¾«ê 7¼!«1ªöj„Á¦¶§+y¾P°?#» ¿þ(EĨM¬ÚÈß!qf±þ‰ÙšÉÏúó‚?Â$jE0t0ÂyÌæ'j,Â1þ¸Ü²yú#ÐÞ M´˜þ)Q2½•Æl#j9ï<ðy,çŽ=´×—möÙÕA|_‘GúSŒjY`‰…x¦H͘Xz'u³ª‰ÿ¡t"œ™'—®yç,j †' þX!B´†ol0¤ù5Y8¬©Eá]©”¯×dŒ”¶huj'ˆ„Þnp3‰öë°Ç>œDºs¬o[hÆwz7à3Âfâ¨ÙÐÊ~®ÜA4d·6|ñ$N3ãX\šÅ‘oîÝÏ$ CÅ÷Tü|9kÀzG ÓÞƒÿ³xN¯¢#Þ`jÖcO,×Ë“ ¢¹èƒ¾ì  g“-?c@ ’r‡šÀyÇ»ë]x~'¹«¹†EÅ(ÆwŽå2Pè;çÑàÀ^ƒA FÏŠ£™‘.dï;]øÕz4E®àyÇoþ ^ùüACÖÅ cû”Âöƒš-ø#f¸Ù [h¸. 5q£Æ̵ÃðŠX`}´3¬õq«©Aµ¼£1 úƒ‚†*l ÀŒaÁya‚Œ6þGz‹óB°WÀ±XäA†?¸”ƒ%èr3"5DÀÁ*2xVZÏÒ:°'/¦"üøÇ󬇎 Þ#™ÅRš²lö!Ítjà¶Sºò•°ŒevR”Aƒû’¥.wÉË^î&•k{ãHæËbó˜ÈL¦2—ÉÌfÚ& !ùþ,) Kýù[¡e–.W-ü‰P%¦Æ‹%«œ !°â«,¬l•‰á¯F/2/\´êâ ¯»”ñe–À«°ø#ÂËH‰*·Pv 2+×"!ùþ,@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Â3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë— -ÊœI³¦Í›8s„ɳ§ÏŸ@ƒ Jô§Î£ýù0A)Ò‚NŸJ=Øt)A2JýQ±Y´«×¯`Ê›2ªÃ¬J‹M=%YVƒN«>lû6¢Ù‰hïêãÏÊB¹eX¦•+ÙÈ+^Ìx#Z‡rÐ’Y[0‡RbĬŒ«7¡e˜5'-1/éœ|ý* µpÍÆ°cËžM›¤é† îÊðg,R&>øV:A`ÞÊø“#Ðw”„™' @!PŠÒ3œ³2£¡0º@ê|3+ÿ7¦ yÖc5Œ/¢ôƒ€ÃóxP¨…R 6ˆ¿?_ ¥Ôœ¡Þtþ¨e]^)§zL¡µÝ@Jm5|JÉQmf¨á†`™ÖYA¹‰¶›?Ã`!G0SaTYE¶”N5 Ty)ÕAÜVU1Yñ5Z9à[|E£Þg¢‘CZNä„RÆøSä“QZ©Tdy hŸZ81œÏé’þ(¹cêIèä—]BÄáxæ©gI~8Pˆ)uÀ@–…)€Rê9&Óœ?4Lá眤IºÔ ÙÝèu¤?ø“G~Ï]àdU>¢Õ¤L(uÁ¾qÿzÐmêùó…@­úój¬ ©@4:5æ@©áxªRT¥©?œF8P®»2kçžÔVk­†}.ä©@» CË=ŠgÓT·œRÜýèÏeáÏd€¦T‘5®ûiS£ú3Å.fÅ.ZUt…iE¨{Ðgý œWÁ [ ±} Äo^ È«eœ)ŒVÁ]ëñÇ F«¶º‘HP¡ê%J.°)Ä£ß `é{Ù±«Œ´½3_øæ7ÅU|vc{÷ @„¨9$곞&£R¯ttJ/-ÀÍé99  ô…?W ´ÐUÙŒsdUJ´ÒL7òÛpÇíSË åU·&ÿ™•o†®ÿ\«€ å: aäØ×p ’'B‚γ¨>[g ¹½TN-•‚S¶¬”»þÀ¬¹Rœ  0˜êeá›ZþñvÅs’SncU„!+Pþ0ƒE•£ûSzÇr/üð"MÚtV¬w[…ˆØT¹xûÓŸBQDS×Ôœ»TUYÙ°Põo=žïì½åeù ÛuÓ`8rìÓEVÒ±‡ü@ Ô¾Tù:÷”â=–Õ¥~uñÈ@áQ¦!ÈÛ'HÁ ʤÌ È,h ÆRà GH‚hð„(ÌS ã­ð…0¼I gHCÚÄð†8Ì¡ajÈÆ@ "ÿ;@Ä"ñˆHL¢—ÈÄ&:ñ‰PŒ¢§HÅ*ZñŠXÌ¢·ÈÅ.zñ‹` £ǘD! ‘ŒhL£×ÈÆ6ºñpŒ£çHǘ1ˆulb/бF) £Ñ ¢7Ì0ÇZ2^G˜Žvø#ˆŒ¤$'II:ÞqˆRLÆ2Âhw$‘ UX£4dñÄNq…íçù±ËÎï€Ý¼Ä`ëWÍO¬Â|‰ÔŠ6"ò<Œ=GÁÖ¸Öõ§k¡ecp#×Í~¶ÃÄb8£¬ "¹m#N#ÝøE™•mDlçz×TÍq²0"rmE\÷ªNðU¶Ú‰šlÂ[ Tf¶±°N\gÐ…`* O¯“àC±Ëp8cKì%Š\°Žÿ]39îñ1Óø Û èºD‰ËµâÓÖsÒ…‹g|Û䩾—ó™3‘è49ÍÅ Ž,,†yÒqL¼âÆ&c Ž2³ŸþÀø 4NÕuPWÃ(bâAs""]éFìw N÷º§ñàMt ZÐ;B»-íÂQŒ³g@‡7¤Q ^Çû7ÖQ{¬cÀ}×&à]^æ$fþï߹ʙø ÈK^ÓýÅ:ìŽW4qð…)µ­xÅ3èD|B_hªzÖ»~‰/è}ë;à„zD} ìxðW?|"ÂÞðD,8Îct¾ô‘'bâßxªúâôX5 ¤ÝŽ{ð"õÌÿ=Ý¡J»»ÿý]Ä;üçOÿúÛÿþN”?þ÷ÏÿþûÈú÷8€X€y!ùþ,) =ý=éEà!L(T‚ë…¿K¼¢âï!D+­BXì0#—‘Ëxhñ‰-$;° %"H\T… é/ !ùþ,.@ÛÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹hÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—1ÊœI³¦Í›8sê\³§ÏŸ@ƒ JèN·‚ˆÄ=g·…YªðTªXzûbÝ:hK¶¬Ù³hb,v gv›<Á U÷¥f=huïE¼ ·lVlÚÈ+^ S&[·pý4Gånäz%ì«y"à…‚ ;“±éÓ¨S§uܶ cïØå’0PŠ7zíÌôB®^<`Ì@×.:t«ZA7OéÀ×±g Üv+ºhB—M[À1tþü¡ÿ3–pxñãÉl£ÅÍvv­{7ÌÂBÛ¸uW1'Ž«wÄìÖÛoÁ Ðг€ñÍWŸB Òg_æ€!Ð/ÏÀ |Öv[nÓMe`2ÂgrúœV¹˜3O2Ù 4A>‘j8æ¨ãŽ'±fÐ1ÎX°Â8­„„?W,qÄ+S¤@Ÿ”A@ IätáT À4v%”åS „Ne U©Þ93t0N˜ÆH‚Êü¢Ð‘I.)@ëH0M1ø#‚NB)¥@V] / çœu*ô(v På”Þ¬#ƒÒ ÿ3ÐŒuZéC<æªë®©ùHø8!PãL1U-3š])°Â @ìtª4 ²A;l±iY^SÒ‚ìþ!Ðó(tlAUh#@0E¦c.A¯(k 7ß'¹ó¢›¿ç¦+Ð缃ľål,¶eV겨T¯V²D=³†p¿ãÊëÇ ‡\”¯™à U@ѼbÐѤ£Ž<Ï@|³˜Œòž+Ѝ©éœrÏf¢¹š“H„?ç˜cÎ9ñ؇PËìN#À/É¡s„0ËL3¢þ  -ÝôÓQ#d¶ÓPK=A;V—Í4ÛiS©@«ÙõÌ5 ÿàáOw´ °6ÚR;$òâŒ7®ÉÏ»íÂQà  4AÑÎÍÎ  ­´Ü&ÐèÓvk´Bžßý³øc‚CëT…ÕX  µå˜kιœ3Mæ±ÏÎPñ³Ì8d„|AµMóätëñžùæ[,Ï@"øÃÁ@ÏOäøù觯‘cÈLàþ&ä®é pp…ø3ƒ!@Çï„ã²gŸ–êç³)Dô#ˆ·2ƒ6 o9F2JP€ˆ !GŸþö„»¬¡ÿ àïúB¡ŠygƒüàA4ÈA, Á<’AÚðS÷ËßþÿÀ‹¶` @« ùç? P+êx•4nU€w ±‡5”¡6€Áõyñ‹¼rLxÆ(¬íÐÅ2…Ûøã ƒ9¸ñŒ` °zî`Ç”¶¡zÔCÜ2#Õ¢×%Di\£ê’‹<îƒ Ê…:êq8*¤ôx# ¯fBÈ‘ŽvDÔUŠà(Dr’•„$) G"Ѓ‡„ZÇø,°ÊT “šÀ ¼AŽghxÔcçXÇßyå˜Ç1.`»uØ£ð©¥%ÂŽ«$ŒØÌ&Ž:ÃÍnzó›àŒˆ6ÇIÎÄ„óœèL§:—RÎvºs,댧<çIÏ.¾óžø| )öÉÿÏ}vàŸ ¨@JЂô M¨BÊІ:ô¡¨D'JÑŠZô¢ͨF7ÊÑŽz” ýìçGGJÒ’šô¤(M©JWÊÒ–ºô¥)?aJÓšÚô¦8Í©NwÊÓ•ÊÔŸ= ªP‡JÔ¢õ¨H5èOI‘Ô¦:õ©PªT§Ð¥RõªXͪV·ÊÕ‰Zµ«` «XÇJV¡~µ¬hM«Z×ÊVŠžµ­p«\ç*Ö·Òõ®xÍ«^ƒj×½úõ¯€ ¬Gû*ØÂö°ˆéOËØÆ:ö¯„}¬d'KY°F¶²˜Í¬f‘:ÆÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­lgKÛÚÿÚö¶¸Í­nwËÛÞúö·À ®p‡KÜâ÷¸ÈM®r—ËÜæ:÷¹Ð®t§KÝêZ÷ºØÍ®v·ËÝîz÷»à ¯xÇKÞòš÷¼èM¯z×ËÞöº÷½ð¯|çKßúÚ÷¾øÍ¯~÷Ëßþú÷¿°€LàøÀN°‚Ìà;øÁް„'Lá [øÂΰ†7Ìá{øÃ ±ˆGLâ›øÄ(N±ŠWÌâ»øÅ0ޱŒgLãÛøÆ8αŽwÌãûøÇ@²‡Lä"ùÈHN²’—Ìä&;ùÉP޲”§Lå*[ùÊXβ–·Ìå.{ùË`³˜ÇLæ2›ùÌhN³š×Ìæ6»ùÿÍp޳œçLç:ÛùÎxγž÷Ìç>ûùÏ€´ MèBúЈN´¢ÍèF;úÑŽ´¤'MéJ[úҘδ¦7ÍéN{úÓ µ¨GMêR›úÔ¨NµªWÍêV»úհ޵¬gMëZÛúָε®wÍë^ûú×À¶°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØÎ¶¶·Íín{ûÛà·¸ÇMîr›ûÜèN·º×Íîv»ûÝðŽ·¼çMïzÛûÞøÎ·¾÷Íï~ûû߸ÀNð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈGNò’›üä(¶O¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nõª[ýêXϺַÎõ®{ýë`t˜À \¼Â »‚ $„€ ºXÚÌ…1ø£Dà æŽà)Èâ. CøŽà¨‚¼ÀáLZ0!DÈ…_à0| ¯¨å Ü…V¼@RÐE 6?àˆá¶8Ãd!ùþ,=@ÿ(0€Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²äB‚Mª\ɲ¥Ë—0cÊœI³¦Í(ÞÜɳ§ÏŸ@ƒ *3gA¢H“*]Ê´©Ó§ €JµªÕ«X³jE(u«×¯`Ê«±+Ù³hÓª]›Ô,Û·pãÊ»Ñ-Ý»xóêMkw¯ß¿€#í+¸°áÈKN̸±ãÇ'BžL¹²áÅ–3kÞ|3çÏ C?%Eºté¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñã¬M+Gμ¹óçУKŸN½ºõëØ•›ÆÎÛŸ¿,¼?ÿϽ¼ùóèÓ«_Ý»vR¯½Ë?FýÉ2ù¬Å‡ÿNÛ>þÛäí†|rP'‡?f°§à‚ 6è`pòù³œkyDÆtUxwÌ1ü©¦_€±eèφÖ"núCŒ2%Bw`‚Æ(ãŒ4*¡{¤Á6ˆ9øƒL+ÞUÑ ±ÈÇj7ÑÁþäO¼fŒ?vjPxgƇòQ³lSVyåSVˆ „!Ÿ2H ùÝÞÑÐA EúÓJ ¯íè¨)9gwº)ŸŸtz¨•>éjzÇfYÞˆ‘F¢ÖãA֨馜vJÛòÁ—'Þ 3FTˆ@M©äÉWáw3ˆÿ‡‚w"Äç ªÁ*xÊ‚­¸¦và«ÞEÑÁ0þˆq 3nRáÝ à]*óþP³š´MV+è«ÑNë-¢þ˜Šê±É.;¤ujEª²Ê_åžJ…§øæ«ïŒ þçšžªÑ[+jpºâæ x7‚®Ë †¬Xœ¨ÀªEü¶ßí‡ë}W¶F±°þ¼P®þXÑ Œ°ß¯Ê€šˆ0À@Œ?³g1 ã0ËLsÂþ,ìOÃ=Ï|¥À¹¦¼2j/¦VðÁä¼ïÔTWm^¿êH*ΩeÑ$jÂøÓæ‡ÚBÚ¤wJÀæ]°¨‰áO"péf”®­­Úá ÃDÉ"ÿkw„Y ¶åB¶Ö£¶gèŒÄà IvŒË'd\£Ö÷Á6š×Nvv›”[-úè¤;êi£–ºÓvBý8¼ÆÆá¨ÙÐÅsr‰k4?»6{íà]îÞXDšÅûSƒw.g( ÐSárkq‹¼ØÎG/=мj›}ô.¯Ž¥wÇÛ}=ŒÀÙ Ôâ—îþûðãá„­Ý8†¥þT»w®´Î}xe‚Bäbã;ºòG–±úê5"2àw„§7ÏG9àBò:ÐYɧQ°?ú'¶Yy„ÿËVLè¶/KÈÈ ù¶àd˜ÁdÕ¡ÿÚ¿úð‡@{­Žæƒ?ýÍ YÞAX H/<Å Ìø¬q¶FˆO°"~(H¼ÈÇTÄyt¥(Jb«aœL`¥3òçufŒ¢ôçEþ…5(8 yj€Äˆ€ déÞ“#é,ψ‚L¤"ÉHãRTÏAø®FZò’˜Ìdl½¡Q“  ¥(GIÊRšò”¥ !ù8þ,) Ný…°2+—þüU™EÄD3Jàz’ ®4zÉèÐ!K--vM)Ñä–¢ÌÂå…Õ”ÁõÂ.œÐŠSÊ­\«–Äô!ùþ,L@nÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢@-3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—(-ÊœI³¦Í›8qÂÜɳ§ÏŸ@ƒ J#Å^ÅrÖD꯸2JÖŠµªU…!MÓèN¿/EÊK¶¬Ù²¨] a‡Tª¼½Šð­]ƒLBuhwnÄ©2ûv {Њ»ÁVCÆšµ‘Ì׳#KžLÙ¬À~˜1‡i[W0á‚‚Ìû”¯ç¿T+†þ\аè¨(ƒ­L»¶íÛ¸9’j›¹g„]ÒÑK:°C4]ËÔ½8CY#n¯€ÿ«çΕ@#Ûêu;–Ô©/tô˜a?¾¼?.èÈ“¯©?2æØ#1-˜ Ò$S‚?/ÃN<ƼàVÚÔó2Ä5ø`„MWÝui¡„M—Ürÿ8`I¤ãŽ>é¤ sÎAWœ‰ÊÄÍ0 iqŽ3ä¸CéâÎ=[i$[nL6éä“@íÆeS.ÔS7ÊCE/ÑÁ2ÑtY-Žó‚ÜÈÒ”7­4‹6¯Å=]”0ƒkÃ÷´;G¼ 1q4gwÞ× Ü$óÂ=Ü!… Dœ3‹ÑÀÐÍ0!4¥Œ63¼à 1nqcL Rôé)¨¢’ê7f¢ÿ©fŸ†:ª@ÆiÉ%þHJ©¥MuàÚ\_†IʸF£k—¹“ZB>ªã棑V=å¶Üvë­n» )¤(t%qÉ:ùP!å æ ,oå’Œ@dóÖ9UÔA1÷T?H4匟¸ –E=…â pA\tóï,¨ó„oÕòÌ`µx#Ž2ˆÁÀÏoEAOÃþÐ@pSÌÓÈ$w`²¼ôv`¯?0—|r‰ê¬Æˆ¹¶n»ïÆË3Ê=žc­Ìpsm’-ùíÔTWM¹ô[®¹X&{é@!ÐñÈkFSµ0â=O@Q iÃ?¿ 4M-¯=ÁOÿãçAÁ ÉM·ÝxÄ7 Ké@ÑAÓ¨³Î<ÒpÌÏ2ñðêü #::òhxÝþè wß.ƒ>:ézsviú襗ø5®”[ŽyÐ‡ÍØþ=˜q»Gäã0)ãÍÓÙÎfõôÔW/¹»õÃW×%Î8´»þÀk6Új7eŒ/¿¸šÀˆ ¦2¯´"¬ð சñ·g.×pQõ`ÁÆr –wÀ&røl¿Ö{q·}Í5ÊU^xî%}Éw\§rÑ·×xr×}‘§g.–|â6nè·‚,˜hêgSp â 4z¥Å ¦ÕhÍ`Û°øwƒ9hZþ€ÄTÐ0 UÚ dWXæshcÆrrWi,gmkf!cWxqA‡elæpGqæmiçƒ×r€gem×`j(†,WaPUwu(^>_'(r'_Ђ€ˆøõ‚PàPIЦU’–oæÿ`°4AXZŒ¸Žø U`ˆ 0j´GYþ`p-ö`^ØpKfbÀ&s,m·l@Gâõk xwPˆŠ !n–YÖ€j‡m#¨‹r÷`qeVm¦8‚n&e¥ˆ‚ØŒÎ]/h`Ò¨] è]¬1hÖXl)ÈŒÏØÞÈ[¬AZÓ8Ž¿…`ÖH•vŽ;gE§ßøŽðÈt2±VâHŽöø‰o•ú¸üØþ¸ê9ùggV™ ùUÿØù‘TUY‘‰\jå ¹‘ùU)‘ ’"9’~v‘&y’(Y$¹’,Ù’.ù’0“29“4Y“96ÿ™“:¹“<Ù“>ù“@”9BY”+¹ a “è°ü€Qµ”M9U· :ù ÎÀ’Sù”Lé”F9’HéYiVH`ôp•l•\Y“8¹V À épã/ìðtY”_)“-•Qµ—i UMðyâpî@ `üPOE üde•,˜Rå—]i—uUyÉaYVÐÀ ùh™Qu—/¹–ju ëð€Ié’¤Ù¯ ”› “¢ Uµ)‘Up[p2 ‰¹Pè09V’©—|y™ÿ›0›úØ™deTšÉùTÌIU<ÐOÕ=উV€rÿ)U° ëðÃ`Oµ · è ðTåyžé UÎ@ Çà"‚éäPñ  3€í¢³ OÅÆðì `Ÿø©Ÿc5 z  º  ú d•—¯ OµÊòà , Ÿæ‰žê9VëQUÏМ´À ÷Ÿ&JŸ)ÊžîI£e%Þ@í`OÅŸþ  ¶Yp›V0œT U8úžñ)/ ôРư¤c%¼ Uf Ó0Z ñ™BúŸ*’IÈTfó‰¢mÕ¤:š¤ó`¥Ou›TUæ äÀ ï@ 5ʦ0¦DÚœí餢#Z¢ÚšZ¨"ÿJ¢}ZŸJ Š £2ª£k ©cÓ@Ú@ Kš©)z è€î€Æ¤ýI¦ë©¨:§ÉI¡“Z©ØÙ'pÜéD™VRÀ"0UÆ !`Êð ë Óš¬ÃZ¬öN °ÀH°+@­UÌy ÎP­ãЭOå ÒJ­ÖJVß®+0®eÅ¡¯: ÷¦JÀOå¬Äj¬ce ÌúTÇ  Íy3ÐãÀ¬ø ­Í‰¬ÊÚ¯T…÷p XðTت­ÜZ¤y¤F*й »¬¬6 à°rJžû`Z* _ Ð@SY±ÛJ®VyÚà Îÿw°úºV›¬ UЩ±;UU°0 Å`÷ð«8K±Ù³ÇʳÌ*¯@¯öš¨Oµ¨ µT{¯Âš¯fÅœÛ °k°]‹°cÅ Â MpKº´P…Ó U0{±Íéª+U×9U< ;зÝimÐ9ðT(°=À; 6Àm¸cõg…ü0mµàî ÀEðTG0ë °Y[ ¹›+kŸÃ™Ëà­™ifø0­〺i› ðºO%»ïj· áPÓöT¤Ë¹ž;VbÐ ð ³ êÀÍI®´ ºÃkºÅ»  ; ¢KV~SV¯°º°š±tÿʱrj½O…½Pü O• %U+02)‹ù!a*UÝ{µÜð ©*¼šK¼mz½ÙûT?¾RUÚ ÁЭéPÓ{ºöë½äºOå»À{Vð:Á¿¼£Û¿Ôûµ­»žÐ+½ìÀTeéûTË@• \¼O·Æ Á¼ ´xûÁcÅ6Ð=pà Ð ÀmЀsÄ ÐlÀÐ(𸻊VMÀ0ºSÀ @üp¥uñ žlÅXlZœ¢Î@®PõÑê /jlÂê+UöIÆUnüTq¼»Wûª` å0êéÅY¼ÅcEï@àÐ &ÿpeÖÅW<È\ÃT ¯0UfŒÆj|·}¹±k·EÀeº íkø€²Qµ¥ ¾Y¿—œÆkü ü€ ð€¨‚ Æ„¬³’<À[ÀÓ ¿€ èpµÆÐÊ™\·{,Ÿ~ Èzl¦|¼ÌG+Ã|Ëc¶v;Í):UŸÊT‰Ío·OeÌk|Áß;ÃgeÃ<°7|ÃO•ÃA¼PerÀôlLlkµÞôTJ@ÅÀ&0UüÏ=UÎ@«@÷ Ó ÐUPÐQu»°«»åŠÐeÑ»±;»d dðTö"U.ðˆ@ÐhUò0±À cÐËÈìÌ' Ðÿ-ÉSµ½Q¥Ð - U"ÀUëÓ@-•ãk·èûÆì[Vß  )UaªÓ ýÐfúÐÃ0 Ó†ÒùHÎ\²?ÔcE9¾ ÌG€ÕPÕ<-ÕZýT% ¤Ò©üªPµÖ3]Ðh¥Ñši·d]V苨U:×cåÂOeÖ=- -ÒpÝÕRe×eeÃ=¼ÎÝ™ÄöŒ­¸“MV{V³L€oT,Ç  ÓXûÙ%Ú£-U°3 !€R- ø€¨ëË®ãà ö‰Ñd5µUÉ€ÛºMV¼p '¯:3PP^௠-ÚeÕ ì`À²ÐªÉìÙÑ=Úiÿ=Uk ÀW ­ýÚ±=Ûðå mìMÔw½ÝÓ `ö0ÊPÅ'Zp1”¨ UazÞ°-ÛW{•`ÙÍݧ-ÝPÅ g`Á¹\²ëÝÞdÖ¿,Á¬à¨mÞ®=àhÍ»ÊÍÜÎ]VÅ}ÜɽÜÍýÜÎà½ýÛLÊ»¦½ád¥  Ùô°¤1ÎâΞÞOUâ€ÜP5áRåÛ¶]ÃöLÙ;\Ä?Ä“½Ã@œ@<”øÌ–¯°p©â êPçðà¤ÍÇ\îå`®Ú-æÀ Ï ³ÊîÀäÇí  °Ûj• oçs^çwNV/à äð Äðªcîÿ  ɶå]þåeuï ,ÀR Ý2M­cîèanVSУîæh®ælUCkµ@êâtêÍ©ôPêàÑä¥ô° Å f•ã`ªˆùßOU¿¡¾æR}œEp,ÊèdUãÓÍŒµÛÀê®îÑxœêÞËžáÆ®é¿>ê›.‡N‰žlcèƒ^èOÕíß.Ÿ™^æd¥çpnéX{íê>UQú ÑÀ ¡šîO ÎíR-î„×p,íPÅît,U6üTì ¸‚K¸•­ðl÷œ’?ñ ÑÄ 9yø@áÊÙño“ò)Æx*€%¯FP ð 9Yßà|ÿ?ó4_Vvpó8Ÿó:¿ó8ñ"_g#gò‰d6AôJÁT ñ€`PóNÿôP¿V!ô—W’Ÿg;Ç|@ô·…õó`öbOV/cXõgpFï‡i/^Ÿcc÷r?÷f_öU¿gtgÉ|k÷ßu†\o÷{øo?Xtøˆ?övç–p)—[÷fø&g÷kó;øo÷zÿ‘…/X‰ÿù /ñ›š«Ùš aôJ†d|·\›opˆ{d“¿úuOôSÕùú¼ßûžã‰d÷™Ÿîp1 Ê *ð*à0 Åd À¨‡Úw­Ö÷ʵ—/kØßmÿ (à Ðr ;pO…¸kÐkÐþpCüT @Pr3¦û~åûøŸÿÅÕ«¿ ^æ NüYXáï˜3‚ãZùó·-Œ¯’17ŽBd» Î’FA `ç "C”)G®Ù1ÒŸ€5rP`ÐÀ_55Ûè€È† lr0*2Ç‘/EBÀéS¨Q¥N¥ZÕêU¬YµRUÙÕëW°aÅŽ%[ÖìY´iÕ®eÛÖí[¸qÃbá§@@-wî0t6,¥|N †'Ò!D‰YAœâN¤¬pEìžÉT,Ì–aö`*ÀÀœ™r´é9ÔŸŽ möׯÆIطΦÿ]Ûöm®ruïæÝÛ÷oàÁ…o¯ƒ¿ Sø-໥ ~2 VgøaĉþÀˆD_¶ÊÑ+f!©RÊaYZö·†'Óv2@´!G¤P†¨2˜sâÄbC7 4°ÀáTpAtðA¹6¸Ç †”XޝUþ Œ!ÂІ †rÉœX²Â•\0ÇŒ”Ø‹%•Ö0¡ÏP`h4¢LÓ¡vØ!5°rH"§‚ðH$“TrI&Ïš%&(èâBœÉ0¥dZaWâå0HgÄud¸@_šb†:(Njʴ漯 8€8%UÂI'rÌHPCŽÿÂ*rQFlòQH#•tÒ·xe{ÆC•B8žvt™€¡¼!çbFÄåœy޹€¡1СÇ]˜Sª¤±Ö°cW;Zb¨Ï”èáÐ<=ÐÖÚ«Qf›ÕŠRh£•vZjÙ§‹jÝ[ÖYn»…ªZpÃw\H¯ÝWtÓUw]v×ýÊ[xã•w^zëµ÷^ÉÕÍ\iÙ˜cÆ ñx`‚ 6øàõea†vøaˆ#–¸^…ý™øbŒ3ÖxcŽV¸cCyd’K®¸d”SVye–á=¹e˜c–yfšz¹fœsÖyg‡oæùg ƒšQŸ‡6úh¤“Žªh¥›vúé™™†zjÿª«æXj«³Öz낱æúk°ÃnÖk±Ë6ûlÚ*V{m¶Ûvûm¸ã–{nºë¶ûn;Ó{o¾ûöûoÀ|p 7üpÄoÆw\%Å#—|rÊ+çû °"Ì5ß\ïÇCîÏKÜk˜ÀjLwÝoe¬ÑàóØg}tÜsºúuà‹yýï(’A=½QWuÁs°ù ¨±†ˆá÷vøaBƒ¨vÚe^wð߀0xoÑo9ò8žŒêù¾žbZ×[ùÕåÜù< P‹öõv>™3¨/ýkŸø xÀ$ ý(_ïÐÓ70)2°†1Ôg &àÌÃÿ r<ÖÍ@e°†} ¾(øÖ`ŸB#é~¬S3hà7üÉáyL!5D¨Azp‡La†ðzøC÷ Qy'žípDˆ”AzÖ8F BA ¢.ƒôDNÀA@„Æ@5^S8¦Q RàÈ;ÀEÐ~  5†9äàÌxžú÷Äçéy`^P7¾¡®¹Àñ¦¸Îp‘B ÕwC¿¡nÉ :Cù©¯ž–´FXé9™  ¥&„©¬ÔUÁVLjßœG *ôÔó1¦,S·º™@‡óÜ)‡Á7„^až¨+‚h¦hFfŽT®sKX¿Us‚+Íæ>­Ñͪž3¥}+†5¼‘™¨S'hçNcÏÿÎhÖ —7Sm €›5è#5Ôg—ª&ñê›ÂA»hY°  ¦Ô¨ÂõiV´vq•ÊÌAmøþ¤tåmoB>ó¡äoµ<^TzV¦Ó“ íÏ8‹Úq­kä1/ÉaLò£‘Ýa™TåyçÄB íyYTp¬4h€¬ =2Xa&I­©1PÝ×ò"í}/ å»éå¡ yª¨@†rη žkpÏ×·µ o—ÈeÊ×MÔZc¦*µF…h1Ãê$Ï(Ú—º´ª~†¥7©2÷«&hûµZƒIÕŸ#Ý9áÎàx­üCG -iJCÄÔ—FuŸM¸b£oMx‚à¢ÀÉAc1›k¨õÆkN?ÚÊÈîL±k]=f+:ÚqvªU­ìÃu@ öÞ¦-€jûùփ˵ä~-9sPásáܪÇÌnk‡ÞŠv·žÓ-¸yGޤ@8C¹q ®Üÿz³:æml@ð‡7X € £ù@:Vñ7ãìÈ… r tàÃè0†ßˆpóÀ(€ÈQxƒLwÁÞ™LƒÚ Âù&oУf€HÆ7ÞqTÁâ +ÞA ˆ€cÚ‡1*›ûÞØÅ:Þ1Œ” À´8F:ÜÑk…3ÜáËzg¶q‹h #ø›Ëa.sÀ]èD€Ñ9îq¥3ÝéP€Ô©nuˆ´½ÙƆ×½ö¼}èE×øß“¾ô¦?ýò‚×|Ë_ó™ àíqŸ;Dr¾óžC$í ¸É-íj¦¬~í}¯<ÒEw¹ÓÝo ÿ9Éop­3^ŽÿzØ·oÿø»rÜÀ5pŽx$L9wà’VtêÜ8¶ ë’ € HXÀ È‘}j _Öç†0$Є{ø\oH¸Çþ àú[Ê~Ö!i({³ŒÐˆkÓx3i P†_` gˆÁ ˆ¾ À!µm‡ P€i¶¾¿ò;¿¿¡?ûÿÓ…Hºÿ @ À¼ˆŒèŒU[À|Àô¼¿üÛ¿ô?@B”A4?ôëÀ Aˆh¿÷‹¿èˆ œVë œ>ýcÁ%ô@A¿Ù¾çS@ác@„@Ãáð‘ÿ€ÕhƒzB5è]Ò&¥L=­RpÃRƨS¥Ò9ћǵSLeA!ÕPËO¦xÔ5•T8í 9¤H@ÈÈEÊ€Eâ›õ›bàh…VÁØu ‡zP‡CŒ•Y©•ÎÈw`‡ªäOQÒÀ¹€{8‡Îsà†g@õ?{¨ʬÖk=ĆoˆfÈRW :wx.?ý”Pñ N-¼Ui•«£VkÅÖÎWz¾\P‡Ôz8•S½ÑVZAɾaØ{Õ ývuWxœ)XׂETîTË„u•zmØCœŽu˜×ƛ؊½Ø¾9ÙYIY‚-×N=Ø‘}×ÕÓ|Ý×~…åV¦(‰½iÕ¥EI•-WZåJ[ÅLuX¦€Ø›¥X‹í §ý›`eQ7l8D¬}C6àª+ƒÍx{[¿¹¸3¹Ûþ9‚{°Û)kV½U´ºíÛ'û[À5Vð†ÁíŒvIÜtÑC·=Üx\Ç}ÈœW¨\Ë}…m{ÛnHW%ˆÜÛ¡–€!ùRþ,H° Áƒ*\Ȱ¡Ã‡!ùþ,¾Ñ ^û ØÏŸÁƒD˜°àB†.T(Ñ`Šø‹XÑŸÆ=†<øQdF’%– ÀRâJ–)ªliP&Ê’6-¼ ³çGŸ@5¥©3èL£7‹¦$ê“äÞ#S!ùQþ,LÃÑÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢@R3bôDZ£Ç CŠI²¤É“(Sª\ɲ¥K‹0cÊœI³¦M›5ºÜɳ§ÏŸ@ƒò¤x+ØÍ™Ezûrôà+gM£JU˜3£Ð«X³jÝÊ•ãÂ&O¦VL*`©XOÏJÂNlÕ]ãÊKw«Ú£dÍžM{÷([·oë L¸°€ ­ ›g” 3ZÇÒ¹ ËÁØ;v¹$Üv+ºhÌÀWB ‹|0JñF¯1¦ÑÓF¬±·\ææ% ­šµkỦ#Çê1^ÈÕ‹ŒZ¨ [ À®uï†YPøB½nÆ[ÿÇ®}sçϼÇgß.ðqäÉ’/o.]»|èЭXùræîI–@Óü²)„xBˆ„”BJaF(¡P‡ÄYÆãDu+pŒ3¬0N+›…SÓ°"7e´Š4 !áÏ „€ÅŠÂHЄ?¶­#ƒÒ ãŒ5ÞXÅ:LSŒþˆ H,°9$ ðÔÚøR€@ÆH‚ʘÐ4ÃL cc]~f‰'¦È¥—`Š)€3rød”SV)À_}âˆnâ@ì@E! ŽBH'Nè裖$ÐG aØž)€Ï†„1Îfª4K1ȉ#9Z( ©™à -ÿc›,QAª¬T…6Cb:EôÊ2hqó1]àO°1OB%¼*P2F)ˬ³ ŠJªµa{iBÃħ@šrê)€˜J„ £¤tâI£‘Æ+¯£“zTicê)€«°Ïfa •Œ@ØSÄô8'4å2P4¯T„? ïb›áf0ìÃA\PÓðË~è!ÀѤ£Ž<Ï å2ð° þœcŽ9çÄÃžÇ O\±Q8ë̳Ïl°•½sÏì9£ïÊ-¿³@ãî+­¿ùR´.Fï¼d—M×@9déœûeº©@ç&½ô+ 4 .¹³ÐªEÿk³á)E«TȃëÈ%Ÿ,@Êø£…Ä Z“3 äøcBCÑöK­™o^Òƒ®ùAδ-PãG>¹@P´CP¹pÚžê}Ý®Øf÷î»]õú£6¾·” ˆ"ºpé9áÎ;L,$£ pp…@Ú¨Ø=¶©ó£4r4}õדl2ÊGpàÏ „€ÎëiU`ÎàÇ$SB1Ü8¦0 aOcõ»_þ–Ç4úcAÔÇ>÷½N4þøÛ´7åÏ ÚÐۡض±ýîƒ | Ú² uУê° ‚cÀ£º˜éFsœ£!S`?Î î|#̰ .ÿÊ1c\`!9¤Ç“8ô @ æàÆ3‚?CM ÕÉ…:êq&¤;ôØF14h-rÑ‹¤+`·ØEáî‰Qœâ w°£J-|a ÝxBhQ`ã]IH”ô…!Ò˜Ú!‰bÀ‚‘jy‹ IÉJ ’QB1ÉI¡<”ÐI©HÒ’¨¬d)Ò y,m•‹¤‚:â0À²)§L¥.wÉË^úò—À ¦0‡IÌbó˜ÈL¦2—ÉÌf:ó™ÐŒ¦4§IÍjZóšØÌ¦6·ÉÍnzó›à §8ÇIÎršóœèL§:×ÉÎvºóðŒ§<çIÏzÚóžøÌ§>÷ÉÿÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡¨D'JÑŠZô¢ͨF7ÊÑŽzô£ ©HGJÒ’šô¤(M©JWÊÒ–ºô¥0©LgJÓšÚô¦8Í©NwÊÓžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕªZõªXͪV·ÊÕ®zõ«` «XÇJÖ²šõ¬hM«Z×ÊÖ¶ºõ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`KØÂö°ˆM¬bËØÆ:ö±¬d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­lgKÛÚÿÚö¶¸Í­nwËÛÞúö·Àõg†KÜ·›Å%îq¹™Üá.¹Ê}.s+Ýmö#ºÕÍf?üAÝìbs»Üõ®vÅkÝŽ€—¼ÔÖ ê`ç‡:ætŽ<*-?$Íi"qsxCXLƲ€ L ¼°ºÏ³@Ž{€R öÈÂZ0 dÁré,o‹EÌA…Š ÝæÄkHΓ $¸ã‘?¿…Õ' ™ª_=ëðyS’Þ—·ÇDâÒ˜Æ ´‹xL=!ÐÙ@’A‹gXPaHn85d5­yúƒÍg8Å9ŽÀ1 mˆÃGˆáÕSžØ?ú!ØuÖ£c î@‡ÙÂО=0|lfS›ˆä\eÆë¦qtƒDÞ ž_ÈñÍãÐÔç>ùiÛÿöÛ!„÷`Òå0GaÉ_ù ë6þƒ þ °€Æ¿ë„öðe B™7Ïp áGÒs4b#DA$r$I²$÷à$à0Pɰ axi'â¢vñk²èÐva)$('†Ç 9Ò÷@< ˜Ï'"pxG}á Xp ±‚l‚"0·'"ø&j"'t"(‚ã°gvP"%TÒò'7Ì„x€ä ü§<ö°4Àýbôàø N|3;oÓ)Ÿ²+½ò+Á07î@…5wüp-Ï‚5E臀È'wÉò‡ÝˆñWs9ÿ×/²BÙGƒü9?wñЉª'aø„¸ˆÙ"£‚1ŠÍˆÎ. q“£ì0.²W…iDCªè-ö7Of#¹€1_( 'y hŒÅ`(êàEö&PÂà šø"Ó*f(Uð/æ£8)³z¶$H [ÒˆAü`4P#ˆaŽèˆ4 qˆ)ˆ/ìø4îøvEÀCã|ü .0 ê{Óà -0@¡èóx4Û‘‹uC„ëxŽô5Št-€"ðïàs,ã20ÇÁ騋òô‹ñ…'y 0øp÷O‡yY 0À_÷oÿè6æ2‡M´8*± V°‡!üPü :;¡”LÙðH•a”H)%À8Qƒà G§ƒq a•£37 é”–‘:1 c (p­#9• d ¹00n©ˆw’·ƒ’7ùІP°- “Õó ÷{A ÷@=Ö3A¢<ÛèDàà#Xâ Qïp=q@$£!Ab?dˆ(H•Ä£š dš¨‰=ÚÃ=Á ^D‰Ð7÷°9Ó w{gƈ=Ô{°¹š Éšøàš¶ÉG áß0HÀûÐ@ïSš§I¼€€Ôu3Yè‹02(‰˜ Ñ)îð—$Çat˜3¨Iä^”G0$CŸé“«‡ çPD” ë`µ@0fÔFQGw¤ lô› 1•IcB(d;e¡q$ÚCÒðCADãP28ÇÐWtA‡œqŸ‘¡g4á U£ ºB q÷ÀyERDEz  */à äð Ä@ *¡¡o àÐO €¹9¥XÚN𥠥\:Uð ãø¥dj[Z¦á¥hº¦lô!ù"þ,NPÏÿý H° Áƒ*\Ȱ¡Ã‡#JœH±bE-ZbÄh±£Ç CŠI²¤É“(Sª\ɲåIŽaºœI³¦Í›8sêÜɳçÌ>ƒ J´¨Ñ£H“$Å´©ÀcFUJµªÕ«X³jÅÙÔé@™OÁnK¶¬Ù³h‹2¸öëÔ°oÓÊK·®Ý»Û¶ [(Þ¿€ ìS/©˜}Å^̸±ãÇ #– ¹²å˘íJö,ÔÌ C‹Mº´éÓ¨S«^ͺµë×°cËž½S€íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_Î7íç5›KŸN½ºõëØ³kï ½{ËíàËÿO¾¼xïèSš_Ͼ½û÷áÓ[Ås#¡í†÷CâÙ_€aþ‚ÿtþÀ—Ý€Ø-°¸)¸Ÿ¿!xÛ‚@h¡n³8 tÃ}û DŸ?.èχ…¨@ˆ' „a¹-4âA*T£Gö·Ð0 €Ð€=¾'!pCúV$uôé–$rG6פ7|ˆÛŠ^ÈÛ“ñÄÏ–ü¨vCú³â ˆ¢?ý}ÙŸÀ_›>ªæ˜eŽx[AޙЌñÈRŽþùH£ !–º!Š›¢Ê-‰›£Æ1zœ¤¶Qiå• ®g—[žgAcÚÆbIºxŸ”¶£˜x, ª¡ùÝÿ§g~n.Ø!‰ò'Њ¸Š(¥m@Έ‡Ž. ¦mÆêا9æ+hj(&A®¸ ¡Ö:Zë~ ض-ÝöF…•.(e¶ûýªºKæÊ° ÖZá·áòFï«×â» ·×Öëî‡ìª«¤”ŽûnÀð>8å°¿)îŠÝfûk»™ÚÛ/¿¶2{-¤ëšû追ݫP§§¡ºk«ðšj¨©qʪê}¡B «wÎ*è€mÞp+·+ÖG"¸=÷zg}oΈaËP¦š ,­@ý=­çÏ'†(ÏKr[+¼9×»[ÑRbý+¥2çvƒ«=Ãkí„àn-nÛ ‹*ðÕêj­°™”y¥¿ÿÚ¦£Oiéo}_ tÖN9l:¿ª€Ûe'6Û{möâo*—§Ê!Ê2«ŒªÍ©^{²±¡ï†çªU›¢Ï@º™*´âšòê.|&BL;ý¹îú@zB,"ð}»éª »<ቻ™8¼Â!*¡»·)lźiÏ<÷Ó=è;ßÓùå¹ ®¸Ül®þù ó»|ù뇬~ÜŠ?Oè@œ"Yi¸%¦Å Zð£YK§€Ð®’êH'&wéhF@: ’E¢ùˆb,«™ñ¦ÞHÆ2²ô¤  ~nyrе*T§w‰+qÜ÷Þ·¨% \ÛÛX•ÿt#Cr%ðc·)â»Â—¿RO|ë Üݧ¿´Pc0ÌÔüÖeÁï ñ‰¾ÉáÃØÅMq 5FóQÌXt*Y-ðS«êÐòˆ+ ªFAëUÕ¢å´Ù™©t}¤– æ§]MËC‰Ý!ôãQMzÔs“å67$– ’QÜaoŠ„Éë1è]’ N(¿67m17üÓapä7½&‚±\“$¥„:©ÅV†1I£dßoh9¡Jö&mf`ÉÐÔ&V‘IhñSÓ£V§6SŽuRW”|“Ȉ ëwÇk zU*2ÓD›£}T%¢ÒI \äëXe¨É.b³¦/X°ÃýÊaÁÁ',5–ÿ)a’[Ìšç;jÉ‚ToßûB¿KTÆKaêÓgœ\MÌž¯ŠŸ&%OÇt{ }FǸɎS˜©ùŒö³tYRiÇ›–ÇDš§©AkX¾J¤†¬E¢5!˜'S)±î!¼*§LÓ5T‚°«@èªR )fDÞ.ª=dâ娺¯È)` ûeXI ÅJu¬2Ój¹òÅ"YT_ü{+ḇU~vSFœª4]úËö²¢~•ÏLò8’BŰ!¼”bkµ2¶9‚u í û¿ª ¶¦Í¬f§3 n69‘ íG>KÚÒ"‡¯¦…¬hWK‘Ôºöµ°Õkg‘ØÿÚö¶¸5mS€Þúö·À ®p‡KÜâ÷¸ÈM®r—ËÜæ:÷¹Ð®t§KÝêZ÷º½Ý-N°ËÝîz÷»à ¯xÇKÞò‚+“ÕÏ’Þ–ðÉCëMˆyçKßúÚ÷¾øÍ¯~ ’3‚äE‰Œï-’^E©"7jïAÞ;GÊw¿ް„'Lá ×÷# €ô´‰0ø²Ip‡Âà¦-ÄÂ(N±ŠWÌb{¥:¥Ñ9c0õ w¾ë*;Í•XBÍ{UK‹°'¨{ýËjîÂiÀrÌT\ÉFê±?ZLå*[ùÊX†î‹IÖ¥D+,Üf¶¬(hHRf3ñWµw¢óÿ‰:íZ踅γiÌgëÓ©B}&6S]QÊY´ MèoÙ¿'ÔÐMë£<(Oô‹•íh*:jUQýÌ< áíQÓ®;Õ³`Ó‚„ÙTŽ$]¡WÍêV»ú»Ft’w .œÍø‹nÔ%Í&Ù;VVfUj3¨U)¨©¦i¥á ²‰Ræ,ëß o^Míj[ûÚÃí/çø¨Ó¦±H’ªc©Åë©©“Ž1v8‰î+œÜ#³5*X§¹.¶÷Íï~ :ÖÛ6Oc<<–©Ç 43Cë¨0KuIê&ê"WÍ;:œã§‹ôéhúäÏõ Œ^Ó)ûûä(ÿOù„O2ë×[¯iÞ˜††góùø×÷ÕR¸±ëêÝW6ÓºÞùêvñ  UÎô¦;}¼˜)±R¬ï§[ýêX×òe˜•Ç1$ë`»Øƒ«Ý›Œýìh·zÙ™Û¶»ýípOíÚ‡÷ºÛýîx'ÏÜ¡m„Á=èX?0€›À^7·Æ…^á ò$¾ð‚'|Þ‡ãwé<þ7H0=_ÃKÞ@'Ù°CÀŠtÜcY@ €£À’°ží—ª¼{ZpxÜÐþó·iªsqÜô€øQÛƒQè ãÉ£ûÜÜ~ò¼a}ndÏœËû¬HÎóq#}M™Dô ¹Åÿ:ž`$„Aõ1ÈëG²~¾ˆúìÙþmäŸ*Üc „oo è0ÉÇË7{µ}¹Ñ}·Êa}½aT }h Ø<жÑ= ßÇ#G#€©Ç:° ëðÃ`± · è  %x‚)8Î@ ÇîðþàäPñ à3€í耫à#` ïÀ¹ .rƒ9¸ƒ6#Ex„I¸ Ò„O…¾!{¯ ¶±Êòà ,`3ˆ‚Ðë¸QÏ Û@ Üp0Ȇ&膶Á‚.¸‡¾!Þ@í`¶áƒ@(„ó7ÿ@V€Š·€-ø‚`/ ôÐ Æ0‰¼!¼f Ó0Z ñ|Š„`ËGÐP ®Ò†)h€h‰¶‰óà‰¶A»Qæ äÀ ï@ |Hƒo(«ÈˆvX‰‚h†h¨†aøw0†ex†i¸†@‹É¸Yˆ„Jø‡x¨‡—¸}X‹½Ó@Ú@ “ȶq è€î€ƈ?ÈŠHÖØ‹ø[hmp' XæÖT¹v'RÀ"Piþ` Ò  ¿°‚áPþ0 ¬ I‘iƒñàþ`+à\€ °äÐ !}«r Î`’ãà’â #ÿ¹'YG/ÙzÄ#“4Ù ÓèŠd(³  JÀ¶ñ‘ù ½a ÙwÇ  vx3Ðã0•Ni‘˜‘ À‘¾÷p X`)¹’-Ùˆ¸÷ˆŽ(¸ `)–0 Ã0dÉ‹¹aû`¢( _ Ðp©(kÉ’BYÎpÚà UÒ•PYtYa9•¶á€pù–ºQë ÓP p" ’©–*©˜_i™vy”I¹”CYEéšJÉ”¦9‘Oùx•Y¹•M‰›^ÙÜ Ð÷0‰§yè·‘˜mi‡üX”›™€ì< ;hmÐ9`(°=ÿÀ; 6ÀmPž¼ÑväklWiXÀR îà püPqó°‚Vi”Åàø©ŸþÀŸ68 ƒò ËГN…$éa0Sˆ íÓ-ÁlÁ´ž?lÃA ÌD,ÌE ë Žé ¶Äª\ʶ¡ =ýômß!®äǾµP®©Ÿ®åàìàéá' íÔþïe—ÍÛ<Ýl|›Ï€‰h-Ø“Ž ç0ÇÐà@Öl]äGÞçÛémì¹ÁáâÌžï Ü¿ð(?ÝÍ]PZkðé œò2ÿ¯]+ßòÔÁÛ8Ÿó:¿Û¬>ó>/X5ÿYl0óÞó?ôÝ‘vJÿ[Hßô±ôPïôRÿuP¯ôSõ7RõVõR¿Ã&§õgÇõ]Ÿ~`vbïôÓVöcwöMŸöjvlônÿöY÷Gÿ"t÷vïó^Ÿ÷`·÷|ïÏ~_÷€/õƒu…oø‡¯v‰ßô‹Ïøù’?ù”Ÿ Ê—Ÿù$ñøžO_üm Öà` Ô@Ê` 0©¿ú'ñù°O^t¢ûj#þìQ ¢ŸC%ú¤oú ‘Öü@ Ö@^¶çÆûÀÑú{aýö?±ÿßýç5´ïr¿OGnø±ûýÄ@ §_iÂ_úñ¿ÆŸ`þŒcÎïpÐÖ’Éc-š?„ .T(@ÀB‡N¤Xq¢C…4näØÑãG!EŽ$YÒäI”)U®dÙÒåË‘eΤYÓæBýú…€¦kÔ aÍXAkLü}@šgBkÖ R›á¯Œ59 F©HÌ„(J¡fíLT‚dF£b©r¤&Œ:µêÒ¦OçúsȬ˜¿ºAïN„›ª5­Q­i +U0Â2e­«°èѨJ‘.Nx¢©„4ŒE¥fã¦?˜©U¯fÝÚõkر5ž¦ÿ]Û6Ü:wö” T(B¢Q‡a‘“ã3© ¨+7 A4ˆª€"sk 0ú»PWrڨŦØÑ\Òçqîïxò¹Ä” @¢ÀÜæ{#n/Œ‚ˆ@‡rp¢,ÆøÊo¹<òÈB ƒ,ޏ@„(K¹Žá 0+œÈ#‡ŠöËH6K4ñDS\í6[¬)7Ýv³È·¡Š¢F=„ {¨¬ °ãN Äh˜b¯‰€²Æ<†|n´ÔÊΟd¬A¡<‰Ð‹ ÄÃè.™ó¤ÚÑš Z (¬±0k´r?þ J†ý”Yì!ìÔä’;˜ ¬ü±G¾’³@&¤ºà‚ÿ‚¦,K ú”i;„T”tRJ+µT53Õ§yòiÆ j´f…¨Àê¡‚fÀNµ¦ «‚ܺ»¶Ëâ«<› ÕŸ‚"¤³MkšÈѨXµÆUSå@Õšœ°&Ѝª°¦2]]…8¸ˆ¡âVk2 sP:«uO.7ðsÔ¡0¡+ÜŒª %+íQ‰"½ô^|óÕWÅMûÍ47OÚ•¯¢HMHGx\µÕ ûmÖb¬ñÂ!±”à]­1WÎ)ÙÌÑKX¬qâ0c]E˜Ç’£¦ 뼖¯Âø*hŠoç41†¥ª ô8×à@µù¿s0Zƒˆ>¸Ê0‹®Ý÷i¨£–:%ÿ«¾ €€iJ°®2F7! ácºX†eŽêŒ(tÔa„êÎL¤Àu¼ %’p®¢ž$ûXÂÞú9#±`ë0ð¬­[Î —†¬°¢,2¬˜R\AamŸ ªñÇ¿’|²ò(#ßòƒ 2ˆ¼îð©[wýõ§­–ý4Þlr÷¯à†AÒ³º*¸¹dàò-í(¢© ¡).Ôuå L«ñç((«½]õ‡w©| ¬¤g¾Ù¬ÒMj&þÀ]k°X˜ïš*+ó¯:ß],üAa3#F¬¦Y‡ý°D³#`Óå1ñÇc ñÀ¨Ç¦‹&HR ˆh·F0mHJ ÿF<ø+ jðyuƒÔËDÁ P…+daK øBÒæV†5¤Cöëe9¼I }øC v„‡C$¢ ŽGD$Òf‡I´HøD2QŠS¤"—XÅAQ‹[„ (>0†QŒc$cÍxF4¦QkdcÝøF8ÆQŽs¤cíxG<ÂÑ‹ÌcýøG@Rƒ$d! yHDŽq¤ã-‚!H$˜ƒΘ#:ÖÁ ˆÏ‘aÜä!;éKbRŸLäIÊL–RޤLcòIIR2"§¼d*U©ÈEÊNÅ8F›ð3Fp„+ìØQ²é—œ|ä!—¹dÚòϼe©ÿéhVެDcÄ ÈbŠïšȦ6ØK]¦‘—p&ÍA…c&óŒÜLd9ÍyÏ2ÚŸi¤'>ßiF}‘mpHz0GtZm—½d“Ð1f:dÊ€‡<¼ÁÌíÈ:бŠ1rÀï`G.$àc î@‡1ÄH„{XÀ!Fˆ©¼@ŽzĈˆ> ÑýÄ`ôÐ1"F)xƒí0ƒCDJR“   æ9Xñb8ÃІ8Œq‡üô¨ä”§,°‹u¼c2uˆ3hqŒt¸˜­èEÇ(ÖýlãÑ@G460Æ›æt§dLêR›*€§–ô¤S­êU³*€ÿ­võ«a}èXõyÖ´®•°JeªSGªX©RÕªX mcIkSœê”§Ð+_ýê¡Õ¨¥¨E1úRK¾2"tµ­g¡zRÖcJWÚRÊšeŬZÙŠÆžàEhBýµPfîgÒ €”Àˆ´³ŒÇp†V0ŽVìð$ã8¶à[¸T\@ÂV@Žôb³¬ð=*7„!&Üc¬lBÂ=®°€¨Oä5/z¥º L£¸‡ ;  »Ø+õi i„ÀÊøEDœ'˜uØnw¿[FRn#PÀ4Œ)FúÚ¿c,ðŒÒòž7½U€°„)lap`ÿXÞ¥eË b“˜ÇF°‚,äGxÂ&²–<ßúÞ7¿2¦±â_ Ø!-ö.xÉèJír·Í@nð˜g\ãq½št²4¡<â§‘:ØA¡jƒ6´ÁW(XCذØ€ m€ô9­«Cu2”Ïû‘E8Š 6‰wŒ ÀGІq¨—½c<4òÄš±éËèé~ðIðNXÆ€÷Œb°‰Ô¦FµTµ!€`¤7ðǧàŽ÷9"à¼p„y˜Xwœö4¨ÍcU¬9Øfœõ-ìR;¤ØU8v²°lÈ:ÚMf“=©mml›{ܶºSÍnd+»ÿw7¼÷SnÖ†›ÅÁÎõ®{íNúŒpŽHĽ§tŸ:Õ w÷Ì&ËóÞÉ· mЃœ¼m`Ú ÌA; h €tì„—nvÁHJ Ø¢ô˜px‡IƆ;¤ ðPu>ñ!‚'¼£VxB4Ò¡y<£ÖÒäoDŠÀÕîÂ׉Æ+Ø”t©2½ ÓÀ/@ŠŽ#@ A‚>ÈÓõåÚ’ü8‡9ÌqŽx°ÕùHЇ^t2Æ8 yE2ÆXõ«g}Œe?»®•®v¶»]p—;ÝíNï¼Gdï}ÿ{àÅHùý }éRÍüÛ°ö¶»žêVǺÖY»x4^_ÿ{3 Oô犑âù}ÑUÏôÛ3Þñdüx´ë-ÏÑûðÁ/#lÀƒœüäI9}ÖÈ ã·¥yž)ŸoZ|.0Ça…v”±ßoz§1†`0™÷Шcáj‡~p3çsˆà‡Û2†±sˆsÛù[·ÖÛ¼¸‡X«yûˆ@Ä~00r#ös?1R<å£ýë?ø?}C7bû·ä< ´ÀÌÀŒô@3j@~Ë8Œ= „=̓»ô?ÜÜÓ½LÀ±Á2¾ýpÂÜ8$°¤ËSºÅ,K pLµÜÔ$£ÿ…4ÃHK´E;CDk6ð‹¼ÈžÛ'ç<$pè‚çœN6‰Nêܧ#¸‡ë|NælÎíüÎ;²NðtNñOUbo0O6²ölO÷|OølOóëÎÚPOû|£ò¼Ï[ÊO9zÿüÏWø&ýÜnÈI%ÐR¢O]PmP}PP P ­P ½P ÍP ÝPíPýP QQ-Q=QMQ]QmQ}QQQ­Q½QÍQÝQíQýQ R!R"-R#=R$MR%]R&mR'}R(R)R*­R+½R,ÍR-ÝR.íR/ýR0 S1S2-S3=S4MSÿ5]S6mS7}S8S9S:­S;½S<ÍS=ÝS>íS?ýS@ TATB-TC=TDMTE]TFmTG}THTITJ­TK½TLÍTMÝTNíTOýTP UQUR-US=UTMUU]UVmUW}UXUYUZ­U[½U\ÍU]ÝU^íU_ýU` VaVb-Vc=VdMVe]VfmVg}VhViVj­Vk½VlÍVmÝVníVoýVp WqWr-Ws=WtMWu]Wå"w}WwµVxWzý!y­W|ÍWعW}íWÕ~ýWX~©V‚=X„%‘€MX†mX—XX‡X‰% /ˆX‹½ØÙ0XŒÝXŒ­XŽýX„õXÙY’=Y|5Y”]ÙwUY–}Y(rÖ€!ùþ,¿Ö ?øH° ¿ D˜PáA†BTÈp⊠b´(q#ÁAN ‘¤ÉŒI~¹2aÅ•-Q6LÉQcÁ€!ùþ,LAÑÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢@-3b$ű#G‹ CŠI²¤É“(S"ԨѣG•0cÊœI³¦Í†,3ºìx³§ÏŸ@ƒþÄèn±pI™ Õ‰ÐG¡P£JJõ Q£Hµp\ÚôiÕ¯`Ê-yõhR®NI]˶­Û‚yQE+i¨R¢By}Ë·¯ß¡9µîTû·°áÃ' Þ‰¸±ãÇ& ¹²eÈ’_Þ̹pfÆC‹ûÙåèÓ¨¥–~™ºµk›«y¾žM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ª*_2œQ‹.°@x1) FÀð·tPé ^Œ¡«¤VÔ²K%PÊ‚ Uä¥4‹Ë“6ÛÁ ¼!)5´P„*ª„© e¼ ,üºê¹è¦«¤ì¶Ën¤îº o¼ïBJo½Þ+À¼ôò¯¿òÚ{/À팯£ú¼¯Àý2ü/¤!ùþ,ùLrµ(”Áƒ DˆPá@†Ëð'×=-Í„êDÈ Ä{f´XÄHJ#Gü¦Ey1ãÆŽ¤$º²÷e¤ÁP¥D…BYF[1›cò+Óê]®–A%–ÑrnRˆJµôÂ÷”aT.òª6tH"×® ¿%!ùþ,A ?ýu(£–Z´š•ÅŸ?fžÐzâð‹•½fø³¦ƒ“[žœ)á‹™gz©TÙjàÀZO\v˜Ñ+†¿€!ùþ,L`µ(”Áƒ Dˆp ³ikVDRfBu"”PaAŒ9’Ò¢ËÝ=ˆ3nì¨åáÅP¥D…béò£D‡(µH¤™sçH5uîÔrÞ½{ðÖ ½éq)æN6õ!ù þ,A ?ýù“Õ« -.zÉ0a¢„?%´:HìàÏŠ®\´¬P,Ãá®&ýu`ueb·œ@¡±‚È™3!ÆàÊåʊÀ!ùþ, Lgµ(”Áƒ DˆPá@†$e&T'B %¬x1á9gäÜ‘£e£EŒ¤´œSç…‹¹c%I…*%*”G˜Z˜q‹ Qå0ʼñdè¨Pˆj :´á9¥L‘¦ÔˆTbÓˆT!!ù þ,L8½ÿµ(”Áƒý)\Ȱ¡Ã‡$ˆaÄ‹/d¥o`ŃCŠô7PÌ0¤Ì„êD(áÈ—'¢TÉÒ%Ì› µ¬r¯cÁ”+[’ÂI”¤@Ž(C•ÊfÑ—}jùèô©È¨(?Z…‰õ§Ö­#»N¥ 6ìQ©T‡– 9ÐÕ½¬ײx \‹r1j9wÏÝ«» ó L¸°áÈ+^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËQO¾¼ùóèÓ«_Ͼ½û÷ ŸôZØkKå&LøS‚ëEåøSÂ+TX`V´‚Ì‹^V†^ö„-.THY,Ð"Åÿq¡J!ùþ,Lsµ(”Áƒ DˆPá@†$e&T'B %¬x1!0v÷ìMó¢e£EŒ¤´ürÕe »d%I…*%*TÆÊÂÅ„¨E¹wðîÛÉÐ >_[´, Ñ`˜}f´ˆqÇ´©–aíΛV•§F«_½:lJ* !ù‚þ,A Oýu` ×+'üÉ…$]+üq#/þ¦Èzá‚Lþb¨âÅ H"´˜„ ’K‰¿0_:È|UÅ_—V/DHÑUÃß 1·l92 !ù6þ,MPÂÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹µh܈±£Ç CŠI²¤É“(Sª\ɲ¥¿]ÊœI³¦Í›8sêÜÉó¡w³ˆ…ÓÒ³¨Ñ£H“*]Ê´éK B‰:JµªÕ«X³Òüt¨Ö¯`ÊKv©^cTÑ’Z¶­Û·pãÊUSãÜ»xóêÝ[´.[¾€ L¢ßˆ+^<÷0ãÇ#KVêx²å˘3›¬¬¹³çÏ rMº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æÿ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±È&«ì²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí‹M„+î¸ä–kî¹è¦«îºì¶ëî»ðÆ+ï¼ôÖkï½øæ«ï¾üöëï¿ÿÛÁÀlðÁ'¬ð 7ìðÃG,ñÄWlñÅg¬ñÆwìñÇ ‡,²ÇáŽlòÉ« (·ìòË0Ç,óÌ4× sÉ6çl²!˜¨ óÏ@—  3A…ËB ´Ñ@7í´Á8#|/, ¼ Ëà,°hQÁU(qpØﱇÁBB %gO¼&B\̳Ï ÜN›Ý± ½ôÿ]‹!0,…*{‘EÁT¬¢ +‡`Å,¹˜!CÖgÔ¢ ,PÌ+¸¼âDÁO¬â²á‡@…+ºÌ2Ń_úÓ°7õدÌÊ 1K&” FlÑDKL|ðÃ<Æ*"„Ù{2°–Xbˆ!’PüvÜMïA &mçÜüófK¯±¹”P‚¼,Áp\<|-& EgÄ?p³aBfX Œƒ`á;B.`:]¬€`4àÅO6¿úÌ ³` ŠÐŠÁïbœ`ìFH³ÙL _X tá¾]Á"˜ dA‚A (ÁdÑ '.‡;ìáÿ3–¶êíãYÛØKL¢@À„ù€ 6JH"nv»ÛݲÅ=Lb{ð™ ÆI‚eo»Ý: -bâ‰]üb¶IÂ|*À„$öP C01Іð%â/‚ÑgyÜcÿhÈ9B±ŠWœž!ŒÈÄŒaqÃÅöWäÂG°Z,xA‹XÀB„ cÅò F‹(¨P“ƒ.¶/Œa`\¸eˆ@5‚± 5@™*A—  ®Ø zñ‚5¶°ÅDIJSN°“Ÿ eZQ†Zd¡ ·0‚/IÂrÊÌ„“Åê:PflɰÐ'´\˜&Âpÿ2tar»ä§?Š1x‘fä%,‘ƒ9ŠRLâ ŸGÈçOqÁ$;¼`ÄF'Ñ3‚aÔ¢g$*a¶>.Ìnϳ"ïf6KH‚eQ”¢Ù„ QKpôlyßl ‚žþT¢ÝCFšÐ™Á 0Ý,ª¦„ZÁq³ ˜t̆E°™‹9;@ƒ^4 µ`˜j±‹,|­;| Èp8‚ñ "ûjÁXÑ…ƒi!…P-&ƒ\¡.Ðf¶ÚÕUõªë€ x*ØÂcXÞ]ÍÉY—¡S†½8,\³š0YÈÀ±  XáJ)¼ l3Ød\ [Ùÿb,GÜiJ1A‰ƒ=[©RYF°í™´£lìÙÛT°G˜lnh«„$|f·0ªàm•<ØöŒ›GJ°ŒgHŒâ$ˆÛê·gÝý.&€`ÞäúL¸<n ©Ôð],·È-tá €¶âh»ìʼn ‹!.Œ ­@ú~Ø‚]L¡M¸EÆT!1X TÁ ^г`S{ëÈ\°Pö`gp°Ö2Ð`6ðFa°UH¡lâÎúØdŸí@tñÖ/àa/lÖ)†Æ:¡†{rérÑ7Ûº{[hC öÛˆ–·o¬¤q§‡\ì.wQÄ2t „21ÿ‹nÄòÁx¦E êq`ÆîqÛ†ÝDâníÅî—ï6‰ì*•c3è…^P2àoîÀrñÃ(ˆÎaZÐ¥Á°p†‚Ea¸ð+ÖÙ0XLr!6‚eaÂ&ËtÁŒÐ‹H7âì€p·?WÜb C´tÁ =°I‡@ ·ƒ:`‹¸Ö?Ž6É:ˆ0L «A2»€;#àÂÀ4SâÀ˜ˆPˆšo`×E®GñFæ¶µ1ÝÌ="»;°f(N‚•¬îI…°Fƒ©à΂$ÆÛ݆‚×Ükï» Nïõ*¼¤èþ¨Èž ‹v  °`g/~èÀv  }uØ z°2haEÿÀXfâP†Áã¯X^d‘¹“¼`5vö°ÕZ0Á`4X Á@^°vr<…^°Bh(læ5—¶Ô7ä(ÔB,°-\¶WT­/°E`@“³8gÔ³ö‚{ ŽšO·ê¶[À;`T‰ŸYÞBHÁH/ŠÄ6*£H$Øf6.",ÐpË#ÀßvS„¬îU| õXÔJÜ£õU÷Ç´p†¬à³8Ü táD:ï]¶bƒ™Àµ€‚ Gƒ¸À ­,úVŽ…´ ªPEàºÐŠˆ@ \%XZ`%˜…ä •ÍÄB/¬¿‚'

‰ä=èxlæ=‡Ô%Ø€ŒDtãE x‚ s}ƒ ­P•9ªkœ4 ´m scCÄ7}Ó7Ö'ùµ -D0\ dÝt9Xðu/ ·` g X3$Z'C„8w¹P cð5!³PhEX¬0†fàƒð@<(N[õIÀ8Yða]H~h1A1H JP+ ~øc~V1‹˜ˆ ÿ°e÷@j3®Ô2(‰:ƒ‰Žø‰ˆSd ¯`‰ HB81«˜Š“c®‹²X3Mà³x‹þ&ÓŠ¸Ø‹¾ø‹Mó-Í0ÄXŒÆxŒÈ˜ŒÊ¸ŒÌØŒÎøŒÐh/þ ÔXÖxØ˜Ú¸ÜØÞøàŽâ8ŽäXŽæxŽè˜Žê¸Žì¸Ž¤ðŽðøŽ0ôXöxø˜ú¸üØþø9¹íx™ÛØ 0 ‰ éi9‘y‘™‘ÕñXù‘ ’"9’$ÙÉŽ8*iÕ˜’+y’ÙèyÐ)“4ÉŽ2ÿ©6IŽ n Ž8 “?Ù’B‰‘ àj“‰”ÞÈ‘ðX’P•R9•T)ãhjà“jÀ’0Ù8•\)^ –™•8pf‰;¹”3iŽiY9“m9Ž=9”ߨ>‰a‰—n —䈕2©7ÉY9˜Jù6a©N)Uù˜™’Iâx©Ly˜di›ÙŽoYŸy˜êšqÙŽuŽx™”™ªIŽ˜©YÙšÚx”²)š i™µ‰I “Ù›¾ù›’)Ž©Y7”*)˜˜ªY˜b‰™Hi˜Øhœ¬9˜IÕ©X©’nÀ• àœÈ™˜*©Éÿžâ)Y©’ƒ˜>y“6˜q™>¹˜Øxžs)êéÐiàžCyŸ7IŸƒ ŸÛ¹u™•*>)–¬I2ÉŸ JžCÙnðœÔ˜šçÉ’79œÜ˜˜gI)¹œŠÙœŠœÉyžªŠ” P¡¬y¡ÛèŸê+ šõ™» œ8š£:ú‘âx”¬išjð• zš§i™-º Û›Dj—×yr‰_É’H › :–¬é—X:¤\iÆ™žIš”UÚ *¥[¹¡_ —aºDÊ¥j¥ªé¥kiŸy`¦òi=™¤nà ª¡^š—]š’}I¥—©¤x™¥gZ¡šŸ×ÿ˜’{Y¤>yU›e:¥Ûh…ªš‡:¤‰*—p*˜º¦-¢Ûx£;zª¨šªö8ŽÝ©Ü)à£Y˜Ê9ž‚ÙªŒZ¡°*«ÖIª4z§jù£©œ ÉœæY§h‰¬×8§2y|i« šojÙÌšΚ „©¬ÊϪ¦`º•Õšyº¢;Ù§Jª µ©¡¶Z¬mÉ—Aj–‰ŸÞX`Y«ÄŠ«t*®ª¤; ¯ÞجÏZ«t:˜)Ù¡ŒÙ˜ªº° ‹£åت?i˜Iž+z°dé’ä ¬ :±á9£Oê«ÛØž®*ž\šÇŠ°àª¦pš«’Ô(²ñ°õ™“§ÿ¹­*k³Úú Ú 'Š7K–èÚšìÊ¢­Y²/Y´FûÕ©œKž/)³?{ËœJ«“Òê²Jj¬$ ²º©° ¶b[• ¦˜Û)²+šš³?jp›«h ·2é±ÜÚ«*Ë^¹ Ê ·që¡wÛµy[°,«µIy¨ù¡4 ¦-»³Úx°Ö¨³vI¸‰›®@«’+Êœ J°êzìÚ·~K“WÛKµw;¯Ú º[¡Š‹þú®–û¢Y»¹¯K5úµN9¶º»»#)œ-j í žv«¤>Ê©“kº‚)¼nÛ—‹¶RJ˜[©¸Åû•vù¡~ ¸nÊR*“RJ“’Û²…ÿ*­æ½±‹§Û[§8ཱི{¼Ñ™¥\ù½ÚkœÝ;¾š›Õ˜§Vº§tڦĻì:½˜¹´ž;¤w»çÙ¡<”°Y¿Û8©†Z¾rÙ¸?éÀ­9m˦ʻ¼Á)œK¡0±;£.¹—l¿ÔÂî™3zôY.ž„Ù $*¡Zy¿&ŠÃây¨äy–ß›œ+l4œ«ÑÚÃt*ÁÝÈ9|ħÉÃáy–K¢äª•3 Ĭ™®J[´6œ™W˹ÝȵÑ:˜[¼œC¬·Þ™¡¬H,¢궃{ÌÁr<Ç«j›v|ǰJ7‹Ç|ÜÇŠ*›WëÇLëñZª`KLj<Ç‚C¼Èɤ”ÊȬ” ɺPÉ(JÄyȉ¼É¼kÉž¬ŽÆÙÆŸ<Ê ž(LÊâÇœ¼Êa«ʰ˲<ËŒÜ!ù þ,xÿo(”Áƒ DˆPá@†„HJ¢Š¤fà+!ÐE>p+#p•´‹x'œ”X°Wä= 0 †+°‰18q÷Ž PÏ{˜R ´VLƒ*¹Ç"ªÎnòÂ,¤è¯«×®!ùþ,€ÿi(”Áƒ DˆPá@†„HJ¢Š-ìZ÷n˜…‹“‚²_ !^àWDà‘y)áwΜ¹sñ,`ÄÀÏ„BŒŽ%+Q –˜ -äRWïܤ%•’*DX³bµ!ù þ,ˆÿg(”Áƒ DˆPá@†„HJ¢Š7(ƒ'Ï‹‹Ì’FA ! ®ˆ‚‡!-Ø*G¯˜…” º0ggÃ)3 t(çÅgÄ1èè¹ÓµÀhB‰-F…JÑŸÕ«V-!ùþ,ÿHI H° A‚¡†@€ð£©Q òã©P† %!F L˜@@„P‡˜ˆ²c‚‹' ø!pH†´<ȳçÁ€!ùþ,ÿ0ÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜèP€Ç9ŠI²¤É“(Sª\ɲ¥Ë—A‚„I³¦Í›8sêÜɳ'F™} J´¨Ñ£H“ŽR©Ó§P£JJu"SU³jÝʵ«×“W¿ŠK¶¬Ù©aϪ]˶­Û’ißÊK·îÛ¸vóêÝË×)Þ¾€ ¼ò/áÈ+fhx±ãÇû6ŽL¹²e³“/kÞÌjæÎ"?ƒMZáÕÓ¨S«^ͺµë×°_#ŒM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼8íÙ°oóÄ=g •ƒD·ŽÞÛÂ×-}»w×Ý¿oÿ§nhxñèÓã&]¸?ËäÑëöÄ_ì&O|Cc¿ÌåÝö 0e'Ü€¼ù÷‚ê·œL 6¸€í¤ mJø]ìGápþãKLQŸ†™CÅjÚ¶Â=2¨p/ƈbj5Þ¨Úyä¨ãm-öæãÅqèa€ÁqÀ  à9õÄ qq¥V 3σÞ :ÑlàÑ ÒÌg ˜Lƒ>î cŒG]~ù’X°Ë:ï ƒ¥j¸ÌY -ÜÜS¦Gó;¹H @æˆC+ï㑞|ú)S 3Œ6âsGOF9¥Gž‚**^²¹˜dšÿyšj²)§¨aÚ'–JJ©¥NB)%•Iá =í˜áÑÊÀ#7, Ã4ôhCŒ­¸ À¬³Ð’*ì©9CË1鸓ŸÆ"«l°¦»í³Ñö:i¥¹î¹ëGArÙ*Hïv+@ª¡Ž R¶ýFËî°‰K®¹Å›¬·í.Û,¼F:/°§¥û° ðJ2sí è´“:謂¨¢Œ:*ï¯õfú§ùþVÀ9ÏDaÁ@pÄ+ÓŠGãláÑ-‚íj8(0 L3ÌHÜc+Sè¬(ù#M(ó‹jÔSÄGÛœ3Cã@}Œ3¬0ÎÐU¬#Á4ÅXpxÿ ¶ØüšÝé8Ì.ù ´Ð¨n8â· ÓNC}•ÔT[øÙ¨ùöØuß÷Þ=ÿôÐT}Å!`áÑ,ÒP € Æ04¡ùGes.ì²Óž¸éŒ‡y®ú=«·>üâ¨?{í¡ã­7ßWy¸G5 pžôÂÿëøá›~í¥CŸðñÉ/ß¼ëéŸþzìÓ?j·õ¤_¥:ëðwüñüÁCŸŒ’·ÅmnöÝõN£½±qO¿ñ‡ rñ¦e¸À> yÅ2OˆF:Ô!gp"xÂ;0BXÎèEà±vÑB™¼pk1Døqs˜ãñ˜S, &Xs ³£ªGMC¿P:Ž0ÿÎrž3—jgÁà$è£Hæ2›‰*‚¦î –DÛ5eÉ”lnLìt'júiNtZ  ÷̧ö™Pe2Ó™ˆÆ+€b[”ƒy;E=ÂÍd$-}iLKºP”uQ)PzÒK¹¦¼ ©>àiðƒ¹ðGÿù§î'§HmhA!š'Úô¨;%*CÃTU&bE)Vc R|.µ©OªYW*“XU§3³¥ä©Èz¶U¤$eÊT=JI„ ñðî¡:ÆÂƒ™Æ‚¹ˆÊž(¼£X¨šoV$"à‡1À´æ ÷|§Ç@†Kèò¯K%­i‚Z™ÿ€#tªâb+€Ç¢ ·\Ò¢ÒTû¿«|Ñ#œå`jQ#[™Àv¤GØ­c![J¦¸ÀëbJ ¶¦Ôֺ؀t{ Ù@ªŒ”¯ôÈx} ’ë*ë¹JsZZ¶½áýp­ ÜïŽâeìtvÞTW½&¯L _¦^åÀf%ƒGrAQØ#PhHZ+D"6ø*ó•I}Aä‹"PàÏx†?8° è(¯¾1$€“¸²œ†0`{ts:ZûìG ðŽ+0%(@ àw ¸C„8F.Üäæ {ºº8’• ?'C¹SëÁ´á °ØÅ0†,8Â<æ2ß×ÿ®§Ñ1}ì/3Eúˆ–“¼d+ög~qŒ z+,€FÀfP€”à Ás¤ùÓz<ÈÎ Yt£mæ º¼Î(0¡ èN£yЊf´£!ýá«ì™ËC.2 3­jNÿ‹Íd®ó“e¢éU›úÓ–IÕHmä@§Ù#½æt«™2ìC'šÇÒ!ËdCÚ#3À‡Á¤|À*/[ÒzÞrŸ=BäDG:Ïç ¸Oã`¨NÆ0}Ä`n<#å½À=ÎKuУê "Ç&z¦4m£è>g9æo€ \‘ë°G-.• uÔãg@Â8‡àðh‡.&àç·Z âÿϸ6pàâó8†Àèmo|£êå1Ø6ðË®5´:xžYÎvì1O(ÇxɱLó{—w Çr‡ÊÇ€z¸CÔüˆÑA‚¦oDƒ":H¨nu¬{¤é6—¨‘u•£²d¿:5—ÍÒ¤«â/Ïw³ÿ ç2?;ÇeÒ÷¬¿=ؼnûÙëít~éñe Ô­®òxƒÏ †,ÿ‘\¸ƒ¨ûxÈGy `ë6µ;Hê–w­Ý#¨Iì'SbÀE H‡¹…“ûÝ£ª ¬ðƒc{ôžH®9>ò%$|™(ùÐ~P#Ô@2€‡PôV|R8ÝÿþGïƒ?|ÞXûÚ@ø¥Ÿšõ³_<Íçº÷ßOÿ!ç7TPG<ÐáÐú'þª€°ñ X€¯ û×þ×€("€ !ùþ,P ÿý H° Aƒ\Èà¶0 ”80¢BñªXl5­áÂ(ì.zôø ˜À‡'Šqà¶2…ýi$M+îÉ8 q%ÖåN™?idü pFëX:wOp0öŽ]. f k—ºU-ìZ÷n˜–}â2æ’·{Ñ6œZõª¿*æÄ‘cõŽ˜?3Ë:¬Sç¥Îâ9`a…¿cÎk5äJcÒBXP6SiZ‚êqynF‡q¬B–L¹Ê: ÓŠY¸'bʸ)ÄĵÀçB ³ažý)ÀçDi˜q•C¼Ào´¿#ó<_Lé–3‡­Ò*&œxÂãwµ öF9]ô\…ùEÆ^ÄÙ%šà'#axÉEáwΜ¹sñXTJÈÓ„C=½’Œ?óÕ'À}wM#À/`¡s„÷pCÄÛ€ã™3`I4Üb€'툄?& %‹Ñ‚ )؉àU!!……áÏ8ô( Ã>Ü%"PÉD¶Â8® 4>,tL2%hY$îLQJØèO’’5©ã„úxŒ4 ¹Cb«Â1ð´£Ëhåâ;oZ‹:õœsF–@‰ŽA`Š9gwFè…XxÓ¤”J´@:WPªé¦œJÔÒ ¬(À騤6ôY©!ùþ,`Øÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜh1€Ç CŠI²¤É“"9ª\ɲ¥Ë—0cÊœ)¥Í›8szŒ(@Ä[Áhì)!Т‰ºD·ŽƒGaöTJ*Ò«™:]¨³«×®3¨Ô*Ã&O šM(–áZoF%ØVæÚ¸[l-ˆcÝ„SÉú¼ˆ÷ev3õ>­:Xà×ÇK\qOFÒ²WfHÙ2ÖÍ ç ì<Ó,hŒŠY’Vxzc뙇ïh5²íÛqn˜6qþ.ôB®^<`öþmL¸+èæSºíV4tÑ6\øB½nþ‚úÿ›ª{ðÔÍv­{7Ì‚¿*æÄ‘cõŽØðâÇ“—â^;3m  <òxÂB1LC6Äu^yXàþgr à -ǤãNZþðç€⇡?hà{ñÍW_†ç –Þzí ¦˜RÐI‡—ˉÓ\Aº ”â„÷]¨Ÿ†z˜–"þWd~ªx |òÑgßx1Ô¤>mFO¯$%‘3 ÓN>è ³Êxó;¹HÀb•/ˆžzì¹7Þ>ÅHÔm€>&d=Eð6$³‹@\ ±À 䴢ܡ‰.:PmN Là cM3ÌHÜ#^Oj^–þ#M(ÿóË{ëH0M1Ü#‚?>©@¥^±@X4‹4(  q#ŒM˜Š¥©AÔ±É.˨£J:ž3ñ8!€+øì°ÅòÊí¯þ`«,³UÔzk®»ú)«°ÊÚ'Ÿ0bšYRàPªhcÕ4‹?Ù2«®¯Þú®þkî=»-ÃÆ"û.­¶âªë´›Kl—_ fÆ gxX`ã ¹ã´"@¼Ó ²RøÆ:ëžNQU[ @ç4,Î+=Mጽ²ÌxG ¤4–þ5Õ6ª[ c•ÀgɈ'ј1}?Ö pÄ<ïi#@02§S(ANÌÖTû#K8E(ÿ° þx¶Œƒ>MõÞ}—íOÝß“ÙÝ— Æ8â~ T…Ûpû#÷vg[ëÏÚ¦V¿€´;ž!å>ƒù´@Î8NÐÝV)59ß•·ý¶¤›sííyÙ´˜zã^ÖÊ)€¸„1ÎÌÚ„Ç{¡fu.èøóD4é¨#Ï3Pƒ,úDYÝ“—`&³jcEð£ß.ÓOøš ¸©ç0‡9Î TaøÅ*€Ž#¨}¢ñ ¦EÌå ®R( ô€S Õ,Bêi}í{_†œ!3¥p0)0Ì øZ8ÂFp‚4ÿøÁ\øä€ \`³ÇÒ!„GåÀùÒ1ñ™‡…!Ä•Or(CØÉŒ <@¸ø Ÿ`Ñ…ï )hA ±ˆƒ cðÂ0¼fQOXQLðµžT3S#Ûø/$*î¿<èï9’$9Ã4 ŽXøÄ K£À=´à·X@j±&©f?oqÄË›@¼6ÂI2oeÃ?L@®±‚šä¤?%Í[í*JU*©ÎPšƒ¡ªU± U–º4«iõªSÙȲ£&u©é@Þq¢\j:ÿª LIjRŸµ SÐ*W½ Õ¶Þµž‘ëU×:ËB3²yMãùjX¥h«þàÅ1€t4¤¡?ðÁÃÿ&ãe+‡+ *ALTEõ«R™š¡Á¶1 á¨rà1„à àÀÅ9æq á4×ÜxF0^*]ê:gê G=Ôñ<›–ìdªäŽw¶QŒ±$bÄ;œ¡ äBþ8ÇDÛÍëfw»šBܱ_Œôp‡. î|#ÌpsKk`+˜ÁþÕ.45×8Áv5,'xÁü¤2Áwßzè—6ñ²G-^ñ’·tÝ­®Oœk_X "þï†Ñáñ|˜À@1€+|bïõ·ñõÇ‘ üoãÄ žQŒ¥\øƒ’jë1àÑ]L€·µàxæ[ß¿›K1žñ;}²\Ž. ¨¥ 8ºà=Wä5J!,üqçÝʵ«×¯6šK¶¬Ù³hÓª5ëÏìB°pfK·®Ý»vãêÝË·/F±k ¬ö­ßÃñ*^̸qcÄ#KÞ ˜°åËcÛºe:¹³ãÏ C‹vÙ¹´éÓ+Ÿ}FÀÈúZ@x6f²† ؽ[ o ðÇsCÀðãÅ(Î{97ð(GþÛù@ç“c'þ[€¿î½¿ïÿM¾¼yǨӫ÷«Úl…)Û¼éŠ=Öö`û·sûî¾·pÜ\G`»E‡Ç»9§€?Ñy· Ñ%'€‚ ´Ü þWœ?Vø›xà‘xÞ‰(¦HÕz,¶èU{dq3f5£À( Àc­RD!Ž96â¨#æ€CHN|SgþLóKxñæÏrö¦%wâ(â•ÃAø–1'a….Xæ˜j‚ø\—ZzÇŸŠtÖi'J.æ©'O0ŽUÎ4øŽYøÕJ1ãHCA²ÑV–1lNQ<9;ÎPÙßš7 '—»( t` ›Š*qÑ¥™á†¥Bÿ'•q’ÈÛ¸æJçž¼öÊQŸcMSŽDDÓ¨ZZq,YÞ€ÌXÆ`©nÞQ[-…Ã)°å‡ J܃ËmØ*™b~×ê·`×i¬’ZkœVê*ï¼£ùjï½[–4Dİ,YÀÈP€?Ðð¯9ɰ€,À hégkx%:·­œÆ‘Ê]¸¢*«oæ ØLf»$‰±‰ô¶ì2^øÆl¯¾eåY¿8:–8¼BŽ9YÌ€³Îæ4;Í`OÜ­Ê jÆÇM÷`˜äšyœp±z™µ™ï®|ëË`‡m•Ìdï©ïLj Å ÒÄ@3æl³€ÐnÃ]FhÿS4³Lë6Àh´`Ö $²¬Š©#*X*¶F׸åäbââkf$öç ËTöè-ê Á$q4YUÜȨ9fL° Pà=Vë ¼þM/€dÄPbjøq—Éa犓 ¹?²©.òÆ“ëævÇ+þæE¡g¯}J¤wŸÍ·…/¸÷Pmoþù‘¯>WàµÏøâÇ_ÖBî×oÿýøç¯ÿþ#®ïÿÿ Nø?ùÉ~üK È@þðŒ H‘ Zð‚i 7ÈÁIðƒ ¡½øç šð„™XWÈÂü‰ð…0Œ¡iZHÃÚð†8Ì¡wÈÃúЃ2”àÿ‡HÄ"ñˆHL¢ñIJðÁè!ÌAL-ñŠœb‰è/ðŠ¿AÇ:ø÷1gÜM±ÈÆj5‚ ,Æ1Üׄ'ä/ ìØ 4XÑÆ>.pFì"ÿêØÑŒQDc"wCÈâÑ |cã8G >Rƒæ $7™¿LÒ‹4dÛ·Fû•²†—$"Ú°›6ô`…’„#ÿä+ c‹À”yxƒ˜:Ú‘t cöã€1ÞÁŽ\H`7Ç@>ÜcÜO Þ G;̰e2Ó™¨‚9ÄAV¼ƒág9ÏÙÍe6󙨯-¢Žhl`7»ìå/í'ÿOzÚs7^ G=â ¤“œæD§,°‹u¼cÀ'/} ÌúEsšÕlç7á)gÐâép‡ÝÐÔ~ÞÈ…9摌{Æ3 »yE2vcK\ò¼‰Á4è¡ bä<:å©OizËŸz¤"]hCÑÝ`S›Ü&1‰Lxó¼9jHŸ0|”`7.È ø·ÊœÀ•°Œ¥)‰ÈßÌBQ Px“JûÃXÁ8ZFMÞ ÷¸ÂB€hâU¯|­Â:$0bXà"P,c YÜ5¯{ÝÍ6ÂQLƒx+â:×úm¶³ŸÝ °€#±‹mìcE cÿH#PÆ”B W¹â~5,fùºgÄà ]AýVÛÚ×¢t2°€4†¡Y˜ @¦¿)¥(à aH  ÷øiwºûÝðfרÇMnmo›ÛÝV°„¥ksYÄf5½y7ʰ›UH#<ÐÁüJ´¡ 9Ø ÖÐ6ì@6`Cì>µ®u–•ÏeŽ"hë7uuŸð\„a}Å0ŠÑ—øÄáÔ†‚Á×t¡ 2¦±lìâÝÀ8žªØÍ,X,{Ûrh‰ü›W,#Æ3®q.À"ìæóØ‘?üÛàöØÄ(..uùçd”Êb7T Guc:SÞhÿ§0?d°›eˆ—7r¦³ì|Þî8cÌ»¡²•€åݬ¸}uýò; h€Šc7äЀmЃPºm`ÚР`f@ØÀô¶ð1ÜVÞXÀå ‡cå‹¿<ï¦ ðHñý¢ñŠîØ:œ¹®Â4ð d¢ãÂ&¶±ðk\¯ùºm~u¬gmZëbWOˆF:Ô!g„sØÅÀ±‰ÀsŒåñˆ¨´eÝTûÏs¾u®‹KÜûe{ÛÝF©vc~6Ô—môg_›7@çfµÙ, ÜC ÚŠ4¾­lqü0Aý²Þåæ4ÌY­ªý¼vˆÝÌh–Çn¢A†ÝäBà(¥øQZ”€5à øÝ(>âqÿ ÚÕÞ¥wgèLñÑ!wÞ ¹†U®i—¿ÒÔ9GÁé!¼úúíüqDÆf? ü7S˜A:P/𦫵_2;WèÚ~€µÂ8p…Ý ³ÆŸºÙ¥l<_¯Æ)×ûÝ÷žŸ·êÿ>f € cìÔ?‚e“Q‚Ä °Ü×=ï}¿¤;ŸøÙïhçÝÇñ—ÿü(¥Ñ% »Å s„éx¥TïÐ|¼¡ |Ôô°x ¹TJœ×ÇÀ~îÉ·|Lø|Ö‡‘×NàïÀÝA8÷£r»qi™†i¦z¼aƒÖ>¯DÅÀB(„NàÛ ôPê01è@î  ©"¹àìÐ Çí  @ÀµSMîÀZÈ…^èÂæÅæR7 l¸ nxþp†]ø…F!SMø„Q8…p{˜ !æÀ Ï Р†p؆Çÿæ êPçÀN…R¨a8v˜†Áyaˆˆ¨ˆKóÞ€ å0Çp»ñÞ@Ï@ mv„I¸„¿¡XöP ­( ß Ì@/À‹¾˜H´¨„›·‘8‰•Èc…gðUx…»Ñ‰‚Ýq瘃9Çzv` æi­g`mÀ s?˜ŽêCœÔŽÝ! "‡Dë8p/{¡)¤c%Ö‚;áŽþ¨÷`‚ûcYyYèH{ÂD}á@Ô’2!‘ái‘]¡Á‘¥èþØŽÝ ÖuE é+ý#è³’Ÿs’.ù’é@,9“/“6y“îÿC“:9/7Ù“.™“;”wâ“D9@)”H™"E¹”?èAIù”'”Ria)éPy•ä1•ZùFüˆ•^ [–ö•dÉby–oT–jyhÙ–1´–p9n9—!—v96t™—t—|y>zù—rÑ—‚:€Y˜<1˜ˆ)6†¹˜q‘<Ꮉ‘Y%n´’1™§¡"Œ¹™^™T™ˆá™øè™_Ašž¡”œ™š š*D™úX">h+û(Ö` þ0Ö@ i‘±µùš䛼9"±Ù›/»Y¸©›ZBµi ~ÕšÙ%p¢™ª™š®áÑY›Å`³Y-Èÿ™’ÉP›y01µy›¹¹œÔbžèI™±žáYŠnÔë ›>8žÂ)Ö`¬IÍ©2`à â9œ j™V‰šÙ¹™Û¹rèIà¹)Ö™TÂ9P›Ä@ Î)žëÙœú›ð¡Ö¢Ô ŸAŸ.jà‰žyP£'Ú5(º4®éŸÚ‘&Ú¡JJ1¬I¤*é º˜ ¡¹Y%2` Æ`¡Öà‚`¥yð…´i J 3àe` r°'êÄ` ê¨&R@ Öp%š›Ê 4€»±¦}çiþàŸk:¦Æð e §Öp 5 ë¹ÿùpZê©£µ©6›Õ©èéâarJ LÑ¥žf ,&øÙ¢bj¨ˆ*Íy§yúAºœê¥žÊFÚ (’¤:MšPªªß1¥Ö0 X 9pÌग़ž]šrॠQÚµù üX› P%€ž†Êž¦ú¥SœÚþ9èi 9à5šþ Šª®¹©W"§r­v4šE(Nà¥Æ ®Êa¯øºÿJ¦6Jª–ÊbàÍêhÊ®yà®Ö ®êâ*«Òé @°‡š¦¹Š¼j˜KJŠÁ*¥¹y½ñ¡y°rZ]ªÝÚfÿJS४!ÁI9û²3P§ÖÐiþ` (€Pj úèŸ@ y©hzW2r:0ÝI¯þÀ^z`¡oš’øé¬`¥_ðZ›\ëµ€ Ö@ òÁ¹°âÁ£n$µ @µÖP¸9´Ög´fŠ q¶ië· ª";²€Y²L:¡‘²¾1¥€æT@¦¦Á‰›p§Û¶®I¢ÖÀ Õ’lªuÚ¢c«®zZ› [ˆÖ@µOk SpÑÚÒ¼ãW€ŸÖ0h`k›¿©¢·š»øieÁI1ë)·»A·!»ø¹zºá¤½!¼ÝYJC‡‹¸zY²¿ªŽ+ÿK.+1[´¶‰¹<[›ÂŠÅ` ^P©þð³þpB›!Ê`´Ѿïë¦ÚºN›©S€ªÔP*º­µù—êDà¥9ÐÀ9€µúê»цú ±ÀyàÀì÷›¨W¯þ@¦:_` W0LÀÚº·ö‹¿þ­ExÁ ìÀ¼Ù«½t¡Œ›5Šže¾ÅJˬ:k¾ì ‡a¥P‚Z[¬ÃТÝúŸV ®Ã±L\›ÃðÄý뺌ªÆ€MlÀ¶Ù:»ršeëkûšžìj Y`¡ïkÆ^šÆª*¼êÆrÇ#,V@¥W€¦^ Æ+ŒÅV\ÖÀ XÿP„tŒÆjl7ŒÃn¹Ã/ÚßéáKµšÂè ÄÖà©ÑŸñk¯¥û¥60Ê¥¬³þÉŰ[Z*§b,‹¦(`¥EŒºë¨: ÅašËÑéÆþ€†Ú¦Œê¥}ì p Q*ËÞ:´¯š›«¬!º\©ºlÌÉ’ ˜EäÅ’ä’ß|·1D` Ö åüΜ„Îò|?”©Ò ÏøÜGó¼Ï`‘ÏþüÏiÅÏý$„B}У Ð4Ð -DûJÑ=ÑFñŒ ½A Ѧ?d@âƒ@I=ÒëC@ýàÑ( ÜñÄQÙØÁÖ“1¼qÙÚ‘Öœ½Ù\£?y]Úy‚Õfñ'1?}(‰²(? )’B)½Ûx?Ùa{–m! *Mƒ%xp*mÍÔ½Í*³2Ù2Ül}צÝܨÚf!,Äb,õA4f‘,Ó,ÏbÑRÛûÿƒ-ÿ±Û¿!ß"5Æ­ÜMCÞkM=²ÙM³?Îß§ÝhÁ/þRÝf0R0“0 Ó0þÀÚ›Á@ÓÙ¼m5ÅÁ1—Þ³‚àÓA2ÑÑÞ ýÞ¤-ßÎ+d3CS<ã3@c;9SFƒ4Kl­’<q5l25XS5!s5[Ã!.ɉYã6®+}q6i³6mco7c!#tc7¶óã{Ó78i‘„c8 €8XƒâŒÃ8á"&¨B9ŽCåm¢9n&Öã97æb¾«õX-¦ƒ:ªS¸ó:±3;µ£æ®3»Ó;¿s¹!<q5Å£5Ðã%UÞ<é’}NÒóÈQQÿŽ=c¾èŒ–›1™|-Ó)4 ¥Ñèš¾élùèÄyMé$NÏ,Âé¦~êUa~ýê¢Cüqœ…K+‰¢ýßDJž¨Þ뾪þé9ZB]ì&T•Åiœû© ¹~ëõIºîFðëÔ^í'qÎ^œ*iìÜNéá ‰£)›CŠé)£¹ŠîÒníìÞîØŽìzî•)œ ºëIžòž õnï.*Ÿ]ÓìÂÉŸå®Bµ¢2ȉë÷>﹚¦’íþð+ñ™æ>ìý~îúžðNñ¿¡?š^3ëúnëïš–¹œFêžš¢ìOï úîþñ0í.ÿßðíOî™F%oïà®ìZdE"¿óÞpÙnŸFÏñFÿ Vd-ÙôÔÉð“ÉA‚ÔbgóX?91òFOKùÎò)_™xt” ïž³)€dðú8ö$Bôß¹<ñsïJïñUyö Qï>!æ>SS£ÔAY_øéÃräšâö‘‘IÁø!ˆïîJ¯õó÷íø¿Qp„oøXï‰_WåL(œMÛ$%EPàRULÇäÇEE£/‘?Oõ´1ûqQÔd ÑúTù´À ÷`OÁPQþOuúâ„Pç„ú¥ú{è þ@ÐP ‚üLÿ…ܯü`` ¿ð óýPúPùáüÇPÓRR+ÕR¼ÁùJ•üí¦?žÿù}ÅŽù#Xð˜3 +Ƶ"ˆäÞ•!°ä‚dÁ r FaWÐã­`&\Hp[¸ ¦±òØÒßH… ¢£âÒ&Ç–ÛÎÍè0Ž¥?cÒBXPö« ¤H>Œ8±Ê: ÓŠY¸'Â_Å‹ ¾rvA›¯ƒ-j³àX¢FýÕ€G䊺 b…¦] Q¢É0H_%KÊ1)R¬[!õ¶N†iÃ’¶à‡á/Ú¢%OFÀòeÌ™5oæÜÙógСE&]ÚôiÔ©U¯ÆlÖõkØ”ÿ¬Ÿ¤aÆ!VŒrÒWËú²£ 2©mÜt#ݦJ€¿YÅ\#'¨Û#ÍØþpzܦ‘–ô üŠ<2ïuï–U´ù Æ0ÝxÁ·rûf¬`xøå]ã'ožà–sÞA‚ þüÑÏôr c«d ÚÎ&ùüñF‚¨ § Æ0¸O¼þ²óˆ5CqDK4ñDÖR•§:æZ`7dNë“*#¸Ž zÑMzÔÿ”Tøîx³£ÚgËÄMb<ˆ÷+ Ø£G ÿÇ— "ÊåÂ]8bøáû]ùQþˆT‹Ïá„PÐ’ÖÓФ(6)ÉMpô4¹çGßøÈÒ¥ôD³¼`/0—þº¤`ÿGH᯼n¤½?ò(|+Þ‘ äÂjÁªÉ¬Ñš´)œµ1‹i†0{˜3µ!7ôÓ ¾€P4+„4’1”IŠžù‹<œ`ÂÉ@;©ÉÓ‚^À/Ã-Ã$©™©0؇wˆ@ÒƒCflF¢s˜ |mˆÙ!A¼C‚èÎáÂ8‡sÈøap³oˆf0²ÿ  zp|ÄœžýAÔîñžöG³p3z؆bPÁ{äÆ¼Æ–ˆGì)ˆüÉFÍñ;´‰‚ ,ÔB.ä:‡¼ÿxX‡0©1FÐÓ‚ah‡s‡iPÆ6tF“<É›¨‚ÙSÉ"XpI)+WðB”’@”ÌI´.—T‚{ð™Œ#¨xP¯vj*'*«c@‡ç*ÉœJª+‹ª(éyXôb¢¸Z!*P‡x@0P*¥\J¸ú¢±:‡{p‡WˆJ®ªJ¹œK z§8¼ÌK½ÜK¾ìK¿üKÀÌˈœ¯Ô§ÂD'Á¬,*/f*Ib¨r*¨3°0ʬL˼LÌÌLÌ$õÂÊüò,Ï´/ ¢Ðd«1z*ÒT¨\ʰÎ4¤ÀzÍÔTLŽbMø’*f3/ÈŒL‚šL-éMßüMÿà NáNâÔ¼\*Ô*¤RMѤMçtÌÓ”ªØÜ(ÔDÎå$­>*M;úLù,ÐT¨Ü'Éì‡â,OóávbM.³lþ rbŠ%åJŽa<&¡UÞg~æ§ …VT~Ðdn¢þ:h„Þ MhÜJb%îgˆŽhÿ´dÎ×è¾èâ,h%bhŽîèaíèÝJÔ ’h’.és’ÍòB!‹Æh–NOÎXTÝÎåiš®i›Ö/“Îi–”nQ L j¡Lï¼On¥Í›Nj¥^ê‘Þi§~j5êN÷\«»j«¾ê¿LùôÏ£®*¦þj°Vj¨k²¾ÎQ-P£Þj ÝÒ·rM7Mk¸¦h¯kº®k»¾k¼Îk½nj¯üΩVk¸&U¶–+·n-®nMýÜkÅ^lÆnlÇ~ì.B̧šéõT˜fUÂŽOÊlí®»>¤F‡uhŒ¿mÒ–Œ— ë¿éÔÓv ÈFhЩÖþ $0zp†-zmÿº–lÍŽÕ%RVHÌ‚çô£¸ª£)Éοn‰)ÑëÙ¾é ‘Œé–ŒÐ­+‡¶¤0ƒ,D bà‡(À Õîèëþ‹êŽí«ª¿Q¼ªÚ¦ h`…Joú#Ž›6¨[X‡'°$àÊô å6KçF¤ëè¶iú€ׯ*¸‡-¸ƒî¶`¨€oÅÓí¥^põî"ö>ð.zïÉ0*˜ïÓf< â6@Š6è¬*¨ Àãn‰>³3“ȳ3ž:[³g«´A+´.£DS4Fs4HK±“J´K›ŒD[´F+‘AòIà#\?Øe€yð†–¡3?»³ßX(ø‹ÿ2ø‘m n¸‡ã³ó‹±6Ï '‹2BÛ² _ŒG úæ0û‹8×3ùy³8›³ß^ 3†i˜-È…xo ?4õÓm1#30·³- ô9÷sCçó=§Œ*˜²*»27s¤˜t!§ß³,ßò.ÿò߸òRÔr.÷òS×ôßxò"·Â4_ó9¯ñ?à ²"ËõaJ|pt˜»;7´U§u=‡í!‡r#ÿ ?hñ'()à«h‰3‰„û‰q÷Àh›¶{Ë ™Xn‹“ ‡SwÅ|îwÏ i§º–U%à€…›‹Èø cï¤8çÐ žð‰~' M£™rÏ x“ÿÀÀ·‰uj§x—ùô“H …ÓÖ+8 ²€}°E—†/€h8‚H8‰®ð °Hø´Øô†¯«OWðPŸŒ§ 7ªó÷…—¸×ÉxmCŠYÈ÷}·÷ôÃò¢§}ç÷žWx úðè g¸ß07tS7˜ÿw¤ ‰¿úÜAÂi— ö¦ ÐH{·6hƒ@ Xƒ`ƒ`ƒ6¨{}žhÂ~ˆ•ZpwP€Â<š<ß(üÃk¸Ä£ŒÅ«o)Ô*œÅÆzûn<ÉW•YOúR”…p(+ÍHKŒ€xQ fê´,?dðXô w0JËfN~Üw•i~­€îˆm¢­ï½|6íÚ¸[uÿ€V-[ 3ßÛµ2Y³É¥s̼Y@gíBo DGeãò×ÔÿÞø}pA; ˆâÙ Ú°UI *˜ nmph(ü˜pÒ|^x’3Å DÁ=Z( @,Ð E;æ„@aŒ“•‡ ¢¨">, àâ`Ñ!P.Õ ä‚9f aƒ ϱ03†pÍ™E$Gó‰L1("‰& $?pÿÄ¥—’y&Ð|%|%@2c¢ô.£•6jWŽXbO&3͈P™[x> ÐÛF`'qÆ¡§@rfIfŸ)¤X:òè§iážÌž`ˆŠe&mC™§¹÷aˆsj)©i> ºÑ¦øÙÀ=øw ¶ Ôn úú«?™ 4K:LPÐL“L Ä€£‚)ˬ³Ð£ì3ƒ! £¥3àª@É8cÁ ã¸ãžâ’‹æ¹é®+/Ç ™NuSÌP@åx!вÍ>;X3ì$;²DëÜ´[+åVH@¸Wd»m·ßTÀ;oıǺðnÓ³€ö¨ÿy!^O¤m¤š¶Üz«å+ÎP9 7\íF¬œÑ Ä® ò ÃwÜÏל±–Rê˯¿ƒÕ{o¾ûöûoÓÖŠå.§  ´XÚ°"@ ôx6öÀ¦¾'ÐÓ7 t5ønÜ1G`˺k QäDº  ÐC<„°‰—$¬ ¼²Î=ãpmA.êÔsÎÐNVG¹å˜³»‘æpóL0àšæ;Gu{ <íè2ÁçE悺ê!°î:ìb½à 9ÏSÝèÐãŽ.zYWùå™ouÆ; °À$o޼çšã6…7Ãgúè¥oTÅ:öÔò}øãë¤=õ¨ó¢õ¼ =Û nYŒÿƒ;´ 3œ«qO:Ît&€"Ü Çëœò0Ž& FJÛ@ŸúØg•ò‰%8J3Ô“'ÿy¯}Á^ñ³»ÞýN $žñ8§AÜÌ.uÒ; õx’÷}#ÌðŒ «×ž·mPtÈ}ç'ð‰o#-TJ Â7Ø  mÈ@rµ‘&¶ @â²hÆq±‹^ü"Ã(Æ1’±Œ!,ÌÆ à#dj|#ã(Ç9ÒQŒZ¼c°ê¨Ç=ò±~‹j ÀC ¬à7 pÈE2²‘~´$#)ÉIR2’XÄ£â©ÉMrÒ‘TPG<ІN’²”¦<¥1™ETjR•®|%,ÿc)ËYÒ²–¶¼%.s©Ë]ò’•Žä%0ƒ)Ìa³˜Æ<&2“ ,_6R™Î|&4£)ÍiR³š Q+Ò¹,äñ”käRiÍq’³œæ<':£y‹u<ÁHC7Mi€°a8€8Ó©Ï}ò³Ÿþü§G6€nnÑ´8F:Üñ„lãìÈ…^(p Câ0ƲeÀCÞx×4~±§5„s#$íAä ‘ô@r°§@깆6¬á!'ˆ@@‡+" >ý)Pƒ*T[J"IQâÁ"t)+^ãP”À1  »–4( %„I ì`ƒHÊ‘5¨TÁÈþ¦ÿƒ˜ZÄl€¢Þ*è’C½+^óªW¡b ðG-ÜᎿúÃøf<â"ìÄ#>ñ8Xá‘)¸Ã#²G{G’†d =‰æ€ä  y«GtðY4Ñ#m°AI ÛÙÒ¶¶¶½-ns«ÛÝò¶·¾Åí^ƒ+ÜáÎR%ð‡K`⣀d*2ðÈU O<ÖàƒG øã:ÑÙì:«4ÀðÈ€N›ƒÔ®–s8ÁMÛßÒ·¾ö½/~oKÜýò·¿¾z<2¡,wˆu‚bÇáy¤G…G¬PY< ¼]oC«”V½ìýHv°ƒÕÿ’$¿&>1ŠOì߳ؿ –±EàÂ$æB—º:R/Ô-]‡ .  _LVkþ‰6€± yÖóžñÇ0,ô ­ ¯?PëÕz".=Á@F’â1“¹Ìúm1šÓœ×Æ=.r^øH‡Bb»Ö½®#AüdqqŽyã9añ@òÕ}3’áôH”»Ü–ºÔžÞòjâÄ0‹ÙÌ–¾´‰Õ¬éMûô$¾¢´¢9Ž.p$Ôa¦4¨E‚jSO¹§#ÈÖúäx Ó¶¾µo9­ë]£Ó®¯žòGP2êRÓº#§NõG*©ìe3›’¬®£-íÚòºÚÖž¦XlSdÿØ¡.ö³·ío»Õã æ×YŸdÚîŽöµã-ïcnåÝö¾7¾ó}æyó»ß¹ô´?ô-ðüÒþ>8Âe¹¼áøo.ñ‰kñ܇8Æ3ŽqŠs¼ãYÔ8ÈC.p“¼äó9ÊSŽk“³¼å*9ÌËÜò™“<æ6¿ù}i®sŠã¼ç>ÿ9Ѓ.ô} wèF?:Ò“®twïwéN:Ô£.õÙ6}êV¿:Ö³òªk½ë^ÿ:Ø1Íõ°“½ìf?»mÇŽöµ³½íR·¶Å½ÅsÇ©ÀwÝ·ØMU³ÛâÛFõ¬m÷'›;†¿{àéþwÄ;ðñüÕ¸Ý.y¡ÃÝñÿŸ;¨óÞxÂ'Þò|_8¸¿m÷ÍË]܃—{«/ E~ï¥'½©UÏúÖoÙ‚ÿÈäsïóÊ“$î™÷üéioxkXð5>Ïù‹^ï¢×¼â9xeXCÆ–þåçNzêk ûŸ_Päu/þ˜ãHñÓ_Œb÷ó‹þ£ âçáòÄ7>ò•ßåX#˜5X¸žó¡ôÿ¥ß0h„±qßõÞë5_7qŸ÷…›‚„ßøe Ê•_˜ß¯ÈAа_è·-N1$ŸÜÝßñ± ö}ÿåA„ Ôžš`ïÿ%Ä`4ž¹ž!± _èíÿ èi nÝ]@?ôCžß‚(@þ}„ Xƒ1„ 50?|æÁxý!ß øCXƒxDFAIƒ5Œ ?Œ–?HAž "_2 ”Ä ÊAÿ}DRÃ~aŽa ~3¬ß âHÌ Ÿ?paõuY#zD 5C xDn!ñy!%vŸGœ@z€GЀ15ÀVâ4!,nÜFaN¡‚X! úCZÃ0`äÀ0Cÿ…`ýùýbýi@þ5ñi–H_€ÄП&âŸ5CRw=búQÃbÿ!£?ã0"1(â@â1&"7æ 5øÿ‡9A’¢´c1æAdXC4x"ñõâ/Öã=z„ Km¢GPŸ8A`°Ä"E6\ùÑ"-v`‚à"Hd¡7Ê`"`£5(À4ÒcÒÀ¸£HX¡$~ÄJÖß ä¡5DãüÑ¡H$ ñId3ž$‡…¤5T@.ò¡€5XOΣ¦ò=×GP`°$%=ú™ 5p—G~cH@%ôß\@ŽVŠ lã+V$ZêÛEf¤ùá.nDÃFP Dr ñýŸ54‰¨aJñ@dA6N^¾ ]ZúqD6Á<*R>Zƒ^ ]ÊAb΀XC_Xÿƒ æ^Šÿ¦5ð”8 @€¦p 2¥^Ä%J¨æ0%ñä€&¶"ãìœo^J¡²ŸŠ \òâFÌ @ˆddN¦@¸¤qF1X×hDL À €¦5èõ1àI(',Xƒ°fnößre #5„àˆçV(§„à „j6çñ G_RC$àCÈæI¨¦+´F«´N+³g±z²fëÌ Ë`¤·~+¸†«¸Ž«¸zèµ~‘¶¦kÉqk?Ô„»¾+¼Æÿ«¼Î+½ÖkM,ë¹’‘ºî+DZ«½þ+Àl¼âk¾Ú¿,Âù«À.,ÃÊ+Á,!¬Äö›ÂÊë3ù™0¸«/,@ÀvlÃÞ«¹ÆàÉâÁ ÀÉ®lÊ6ŽÉ„¼¬Ü¸ìɶìsʬ͚lËÆìÍrÑÄm¼Ul¼VÀlƒ7èÂÆÖÈlÓ6ìÃî‰É*@Ü@Ë@˜,ÖB&ÍâñøìˆÐ¬Ë.€Ð,Îví×¢¬”lÊÆ,Ùšmo ­Ü’j¦të¼r0¼6ƒ,(€|AM¬Bœ_ˆƒ9ð­ß®àš8PG8Á7ÐëÆ”[zíV¨íF ÿ¬æúlÍŠ­Û „ÎrnÏb®ÊÖlèžnÜÎ-ëªѾk9, ø8ÀëÓÖD+Ã8dUp¬Ç¾«ÄÀ6€CDå*ÏW5Ï®è@h®@d­ÕÖìØâAÕ¢®éŠ­‘ ,ö†n̶íõJo¦´®ø¢Ùë¾ë4TßA4ø.½j°¯»z CM/ã”íÉŽHóâìÌÖlÉŽHÌv/è~¯@ˆmï,Ê*RêboøŽ/ kݶ«½JÄüº+0È€" d°9$,€HծÎlƒøìæú¯Ìªí³­õö¾°÷Þ€þ2°si÷°p•¯¼æ‚?¸ë/üÿnMˆ¼9˜C̱9Èï4lÔ2Ž«¬ ¯¬õŽÈÉŽ­èJ¯ϰèz¯ñèl¨ú0ë×ă8@ |pM0Hƒ»âm3˜Ã6,€Ïq¿+6”4Ìþ D’)ï ÷ï@Ð,ÿBòÿï ëoÊBòãà~ï&¿­óªî`¤±(ßÕ›ƒ@$Á»kômïɬ @A×D+/À+CÀ7n Dòâ†óï7/øbñ$g­õþ,(qêž®ç~r3ûÚ(W³?•rÈfó¼V1Ä­5ó5O°63«p7 8§ó>a39“37Ÿÿó«³<—·R«=ß3>K+´@K«µîs(û3BK“A/4C7´C?4ºDO4EW´Ewó~•ÑÈИ=€U¡Ã:ԇȬ o˜ôm´H“4mô°ªôHGƹºt¦A>ìQGtIoÄJË4*e´°ƒ½ D,œFAÃÙ˜dœDQoMïÑSoDSëÑTëU DUÏ4JI †)µS5}øô)u¦u݇™‘ÑVIT/R\_´Õ5±Î5)¹u‘àõñ@Hšà„Zï‰Zs„ Ã<¨ÉFuÔG… :´C> :`ËIp@C=ÿTD) :à:ƒXÁ=Ä…Œ¶x9ÔC<Ãy  K'öboD L=h1tõ@HAö´¤`¶CA”T9ˆ9°Â;ƒ@P”Ea”@ÀöÊĵìÂ:¼Ã0H‡A!”B @c{Ô»œ„sWÆ-D:Dà j«6kã†nÓoÃMf·p·q#÷DUÔEe”|7U³ttOwu«÷n÷ö{GT|÷q÷p8}Ÿ÷jŸÇ6„÷x—·Ìvmß¶FqwˆôMÄv?6Cýöf?¸x“÷`Cg»Ãg7·b?7K7u“G‘6|µÁ`G¬DõPŸÄFÏBVmUW±µXÿƒS!‘q¼õVŒÃÄ-€¶p,À áõFsƒ0H@Ün €Ä\Á„€µ9ŽøHÀ4°Å=ˆÀDMUU]ÕIû†Oƒ4„€(ƒH%ÕR­À‹ý8W5ÈFoC8T€LÃRo”K9•Æ—‡ù˜yp¯š«9›KUYÕNï÷œ×ùçyÄܘ‹9À@ú™§¹¬y©Sú“Gù”CÕ úRc¹–s9ViÕŸã†Mo„Ûz˜yº¸:¡zƒœŠ˜ÈùFйã9ãð€ˆØˆ1‘Á xV=1´AI¹Úë8T«ÉeeG9J¬H‹HБ7Șˆ°Ã|rÿÄ+,CYóø˜8—@,C—S Gû¼HhƒÃQ¤nFºC¦Ç»@\?à¦Á¡,ÍLÔ(yùvʦ„âoEß_>X÷æJàs>k(…k¼Þ£9¾Œ£„Ñ?väÄßKÔ`ûÉ»¶L—þžäÇ~ „®üÇ´ ˆØ§“¶¼£„¥D¬ˆ…Ò›;ðÆ4ŒA0À¹¢ÐÉ–tÉô ¨Ĩ´|¾Ãü¾«þ ~,4·Á‹þ@¼Ê¥lGtÈVT?ä«IÑ„)ÜÓ¢@@,hV¬¡|N†' Ê4¿V @wD¸X­¸cx+XCü8 ÄÀÏDC™!2”HQ€EŒ9z<’qcÇ&\(`[¯’ (Á…@c)º0gfÿfÃ"ùfZÅz³âE¤J0ÍÊ™(U²t ól\É=+ 8ø`µêA}†\'ã‚6_'ïîÍðX²b`è¬#ÃÍ?;Î,0éÒ¦YiÛÆ­¹ræÎ¡§^ ´§¬ÃN;îâÍ9¯¼¸’[®9ú“@¡~âÉÂúnË >²Ì@8âŒh=Ï@H`dÚJ=ÎL”ð4ÿ:”ϱÿ´~;ð»$Ï<UŒ‹.ðj  ˆl ¯¿:R€ œ‰±(¥œrJȬt¬~´Ô’¢mÔ¡§uÄzÜÑe†rq‡Vâ áxÚÑeÖ»àžsÃnž ¿*Ö±§ø¾ S¬¤ù&fº“i o̚ꪫÚê¬=ÆšäW¼þú1´&¹›<•í+¥^ÛbÙ~î¸åž›îºí¾ï¼õÞ›ï¾ý¾ù㿜ð ?ñÄ_\q·òÈ%ŸœòÊ-ÜñË5ßœóÎ=ÿô¿3ôÒM?õÔ1\õÖ]öØeÜãÙm¿÷ÜuG|ôÝ}ÿøà…oŒõá?ùäSÏÊŸÿ&œú襟žúê­¿ûìµßžûî½ÿüðÅŸüòÍ?ýôÕ_ŸýöÓ÷þøåŸŸþúí¿ÿüõߟÿþýÿ€à X@ TàØ@>ðà)XA ^ƒÔà9ØA~pƒ*P@XBž…)Tá YØB¾†1”á iXÃ6φ9Ô¡ ìˆAÔa T!Rð T"xD &щQ”" —Á#ð‚Ü4(/ÀZ(Á«  –Q†{ØC…`JPb&Ü&„ Âþð…BÀ§ˆA5ÂP½d-´‚ JAôBÿ&è/È"®`‚ IIvñ µÐ, 0A&°¯pŸ°Š .’‚! ‚+t1‹)œ‘*,eiYKVƒUxÅYq… aQ0A ÄP…l¡ UXÂŒyÌd.³™+T!„ Æ=B‚B°„% aIœpŽu´å÷@ Lı–Ó¬¦±ÙB'ä¢%0/–°Á.pÁƒG … &h„*Ô V€gü PŽƒ00 ^€…[Hð¹@‚*u±‚ Ò€Õ¡>ù9A/Ì‚ ,(BNxObT£ãTéJ+ˆË Šá ,.ê)Á+¸B””&x1t SE+œÿ`H  •¨Fea·¹ H°‡q|j,1‰í‚)!‰:êq{üæU÷0‰Iìá‡e5ÄY'aÎqxì€$Š «’Õ¬hÕ à(‰vª’ØC% 1U¬¢œ”¨#ÊzÖV°„5lcõzU®z5›†hêTYˆVLOà\É#h1¼ E,`‘R ²"šœg)8[®À c tÛ"`q‚,èE v[Ræ‚„‚+$ø‚^¼@‚M`…-l±Ôª–µ%­i%ØŠ2Ô" e¸…‚;\–ž—¥.µ ,^Ù"+ @ήÒûr†¦„@” V€ý1M’MÈﳄB Î„XàÚë„ÆÀÕ€2%ó„ü!†0Ó1CS…„Š€ dá,S4£°1O¨5WÓ†p6g“6}Ž4k7'è5Kh7sÓ78ó6ƒ“8‹Ó89ûÒ}–“9›Ó9Ÿ:£S:§“:«Ó:¯Ó|!ùþ,c@¹I (°ƒÁƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²äB‚Mª\ɲ¥Ë—0cÊœI³¦Í(ÞÜɳ§ÏŸ@ƒ *3gA¢H“*]Ê´©Ó§ ’‚JµªÕ«X³jE(u«×¯`Ê«±+Ù³hÓª]›Ô,Û·pãÊ»Ñ-Ý»xóêMkw¯ß¿€#í+¸°áÈKN̸±ãÇ'BžL¹²áÅ–3kÞ|3çÏ C? !ùþ,rè«ÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹µhܨ£Ç CŠI²¤É“(Sª\ù#G–0cÊœI³¦Í›8kºÜ˜³§ÏŸ@ƒ Jt Fw³ˆ…ëX´©Ó§P£Jýy4éR-S³jÝʵ«W‚U•2ýJ¶¬Ù³hIjä5F­±iãÊKíN¸uóêÝË×ç]¬} LXä߈+^œñ.ãÇ#Ó=,¹²åËS)cÞ̹3NÍžC‹­Ö1éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jÞTÔA¦ÒÕ«èÿ « uPÃþÈÒÄ@<±ÊªÛª\@‘Ä\{Ð µ`±Bª%ø³* ¼¬ ìª´+-Q(kиvC/3HÛ ½Ôp­·ÚžCºÙ‚-QTáÄ äš+C/2Ä‹m»q9‘KñDD/1¨Â»˜`îþD,»Õg\йîªY˜á-Åwµj€%äD-™PKæ† ëj\òV˜à2þ„µH´ F+"˜E+gûïÍ_É@P/0ÔZE-¹ˆñ‚@¸ K53ÍØ0D²×d—möÙ öÚl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|÷³í÷߀.øà„nøÝ®øâŒ7îøãG.ùä”Sžxå˜g®ùæœwîùç ³-€ú騧®úꬷNøè¥ àúì´×nûí¸+ûî²çîûïÀ/|ê£ïéÃ'¯üòÌ7ÏwñÐ÷îüôÔWo}îÑýöÜwï}æÙ“þýøä—o>ßÇGïÏùì·ï¾ùé ûûô×o?ó—߯ÿþü·žÿ  +÷¿ð€\@!ùzþ,Pÿý H° Áƒ(\Ȱ¡Ã‡#Jlˆ°¢Å‹3jܘp¢Ç CJäH²¤É“(Sª\ɲ¥Ë—0cnI³fD™8sÚÜÉSdΟ@ƒ J´¨Q—Э㇡gÍ[ÁB}x%T•Ë´0uaך޾8TÊôc-Y;«ª]˶­Û·C¶(ëTäWMžP *c™¬,Pð¸vÛ ÿÁÏ9æ˜sN<˜ Ô3Ò,d1Å·ò Ç£ °MÉmíOÙ‰=PûÐ{ù×Éí•zj³í¶BRSm5b(d?ÿ=šß€ NøB~WÀ›Ò¼÷îûQ×:-?¸*DÁ=ZÈ 4XkÍ5É玭¹7z‡vC.˜ƒœ?àÄ"úòû©?3äOöf€?&lüxrTijípŒñ*>~×ä•'ãÉ& Æ@,€ „zɱÞè‚>/yX^ÍBy,dxÅSû ‚t,éw ¡Y"%+,€WxPÞq……p`3@ÐÁ<ÉeM[;“0`{HO!Ú0S ÿèñ.†Laè@9¼ _]@¾0Ù  åŠä1‰KTÈ1’Q‚ÄàJþðE(ð‚g\M!3ÀÇ æ ü]L!û£ýwªöP€‘D ±ˆ ¹¢½° ʆû¹Ä!€œ"h.×õψNty#âdœÙчV´¤'M[ˆ `и´¡#MéN{Ú®iô£?òéR›º¨¡v€C| jRŸúÕ°¡cÓëZÛšZ³ÎµSnÍë^gU×ÀÞ¯‡íë`;$ÄN6¯?"ä.A"Ѓ´1}l­*ûÚÉ–rA´])#ÀÉpK’Ÿ‹ír¯dËDöÁE‚ D;ÜÑžv¸ýñ!K[Ýqò–õ0o}ëÁñ÷2îäšûà&ávÀŸ|‘";€Ýð‡|ð°;ßèv2Æïˆ;ÙßÖèýozÏû ÿG.ÂËVŒ@ÎA·E.=í |ÛíöG®qM+„Ý™–ù¥^oŒÜ")¿ïʯm¾Œìã·È»pqŒO;ç2¿x½§¼sø{Ú»…u”'·KgúL+Rhœ¶Ý|«ÖƒB¢­jpS¬Ù—žw‘¬Ÿó" ‰6— ~ö§=ÙT>ˆ¨Óºx‰t]!ͺ׽¼u »Þg7ÀO€‰?@¯û¿[.ÂþðÃæ³?|~1Ö§U¦ÍVßãmoÑ»›ß;Ä­.íÏ×[Þ'%ˆéu‹zb'çfÜâ;Â8¯¾O©*üXß'SZdøÊ-~±×®ø°_ŒÕÁ¯~ÿþªOú8àó‚Oõ¿Ê~³c?¶Úß~ùeÖ°î¥ý]µ>Aü½é©NUÿÇõ~°½6nVÖçè`Ø€%±€ 怸ZhaxxEVè~X`˜v uFÖöK's Am q`)f‚.¨ܶ{ö$Z/xƒE!s£‚+XƒÙ…ƒ@ø '{h&>øƒA˜„/Qh ñvFx„¥„RØ–P…S¸…'¡iázO˜…šÅ…dHU¸"÷ €Z˜deø†Nwsû×j!†›‡xH"a‡c˜‡~èrmõgyÐÿéN’ÿ—œÄI’ò–Mç›?gŽb'ŸÆœ0‘“‰ºI1É]sÈ  ¡È1^æ>GkÑuªù’Ö·e)‰žœI ú’¦™šÜ™ŠÚ~By{ !ç–æY¡é)ÎW¯— !ª‡Dw¿ ˜ö™p ÷8fæD¨j2:zñŸá ßØŽP6¢é’Z¥£*¤”)š Š 1 }ÝÙg¡‰éd6ºpnɘo™˜ù|ZÊ–îùzjmci‹tØŽczl/Úäy†æÉgã¦ù¶‰ÍÇ£ŒŒ¸÷rDIk:yDpϦ>ð ´É§Ýh§ðv‹-)mC–‹8ÿ:v`g¢ §¹g“xŠ£òhoJ¨rè˜X0Tמ„zrù}Ûˆyþà‹¸Woc§n¶È­ú›gº!¤eWtW·Š†`Éqº¡·g•§ rG'¨É«nÑè’¾ú‘YrÐ’ w†y—¹º£*q"·pêŠÃJ•(m6÷mÇoËŠ­A‘=Ç£E¤ÝÚn y !¯—«*¡ƒêt.‰qm¯üú“%'>9t·‡2‘ ¨Qt'Y°;ɺ¯Å‰“Aš®<×nk±&QuèZ‘;° {qþêŠè¦®ðºŒg¦fj¯'1«³Š›£+± ÿ'ª“Zk»¤¡°%Ù;гºW®Ã°1³*é³9›¯:×n<˱%°@»­$Wv‚¦wC&“ê†{Y—²ÂèÒ˜ˆ.ۥᄄV‹N*§ áŒ)èªáqfŽñ8yŒ4±u?'§r¯£ç‚g·ᶎǶ+Ú‰ ‘w÷lukR˜¦·b'§uë>÷Žç'wŠûrr †ÇÙ¢rYaAW8yÉWf¹‹¡¶¨Û™»‹ÌÈyž—‚ôé+iw‡‹¡~RzF»‹ ›¬‹·‹[ÖyŠgx{·A€±[»x»gï&Œª¶e[ÇwÅ»i£;º¡¶¼“·ßÿ;ŸKa¡œË¹«Xº×©¾/7»k›ŠW·i´×j_·ªËh`矆¹ ñ{ºÈ¨Ñ;mmê;¿„zo‚;½ ¾b›†ŒSæocjÀËjoA÷H™ÀÁØ·ýø·Ánê ÂNêÀX8¾36!±½$ì‚V¦-,¶û›ˆ„Û¢mõÂ4|Ã5Am÷›k&|Âð ¼eêuAlRŠÃEŒÃHœÄJ¼Ä Ñà ˆÂLÅR<ÅT\ÅmåÄÅÆ†Å\ÜÅ0V¾ÇæÅb<ÆÆ[LÆhœÆ fÆ4ÁŽ´ÃM¬Ær<ÇýÅÆ)ÌŠÂ t¼Ç|,_v :쾕ØÇ„\ÈâõÇM†Ç3ÿ¨€†ÜÈŽ|`Z,¾\É–¬r‘ ŠŠŒÇŒ|ÉžüɈ)£Lx |ʨlƒ8®àš“©üʰ\Y8á…­°¦˸üʈ €UHªÀz˹ÌŸ¼ËÝ·«(ÌÈ|É*Z™ Z¥ÚƒÉÍŽÌPÍÖ|ÍØœÍÚ¼ÍÜÜÍÞüÍàÎâ<Îä\Îæ|ÎèœÎê¼ÎìÜÎîüÎðÏò<ΤPÏö\Ïó¼ÎÔœÏÜœ)üÐ=Ð]Ð}ÐÐ =Ð÷|Ï íÍû|Ѐ°) ÏŠ0ÑèœíÀ1 ÑéÜ ÅÒØ,Ò$=ÐÏÚlÒÖÌÒ'Ý.Ýͼ€ ßÿÜÐöüÒ×Ñ=ÑÏÏ*€ ˜` “°=Óçì7ýÒàsͯÃõÀ W€ÍTP ÝÔÙ\ÕÞü:ÒPÍYPä\üÀúÀ¾° ]è +=ÒÖ¬Õ ÕTmÕß,ó@ÞlÓøŒÔ Ó|]Î?=ÏA-) Eý׿¬Ô8-×ð:NP¬pVpÒŒ=ίsIÐ_Öü , ï` ý °°Í1Ñ•]ÎÊ@Óݬפð×~ýÍ? ‹Õ|ˆÀˆ @PÍ@ˆ°Û½Ý|°Æ}Ô@ ¹Û·ÛÂ]Í)à‡p~ÐÓ@0ˆ0½Í†°†ÿ0 † ÕÜÝÕ¼{ÐB 꽇=Øåm՜ޔPÔ=ÝÝßÞ¾m”ÐÝçÝ*ÀÞE-ÞþÍÞû=Üì|àPîà Ö¬ØÖLæ`ò@ -PÍÞÐ ÓÓ Õ\ÚPß  n½Íâ"^Í/ ìÆð¢é±ÐØü Õ\ ÓPÍ]msÍ.áÞáân}á¾áÕ<Êîà ,PÍ2Ð)óx ãî ã4Îã>>âÕŒà Îà¯ãš Öà fP͵À Àè@ç ð€  ÖQPÍRÍA>á~æ®áÞ%nä(®â,îâÿ0åñPåx]Í-pPàÔÛPÝp nÝã?þàÎçDnâGþçJÞLîäP.åTnå/ã3^ã€é^Þ`¾à×<å×z ÛAγ]Û·½|PÜ~PÍÀ=CÀà C0]Í&pŠÀ½þë‹ì% ‰ðë‰`Û)€Ï.‹€ÑÜl†ðÏäÝçnÞè= )ÐÝ*P *àÞ*pØè- ’ÐßänîúnÔB@ ýíÝñ®îàÝÿ,¾ÎQp]P3à îѳ.&@ç0 >/ Ü ÕÌ ÆÐRp¯ŽÍ /ò$_ÍÊ  3ðÎ@ ÖÌØ¯ÿƒãPf^Í1=oñß'?òG®ñïñ° ÑðDP´P͹  - GóîÐÖ×¼ð ÿð6.ò›}æiÞkÞæíÀÜ /p4`ç@è Ú óñ¿ñÿñ!ô*Ïò.óÐôOõÕ ìsÍÞ` ,@)ßÒ^÷þñM ïûÞlòÐþîO×Ú\ ɠ͞͵ð ^Ú}?ÿ4ÀH:0+&ÐàAü$Ø¿'£Ð3hÅÝA#ü”üÂ/„Á^¬õ¬CÂ…Ezƒ%0W²"òQh¦œ@\➈iq¤À‹ÁÄÈÏȱVYê ôfF`-f¸tëPlVuOjð“/_-ž#K2mÙáåI… >ŒØa"Na ^¹wpkJg"êk¥Z².aʤÙÁ&Ü=/þ jpèO‰Œä6Ì )Ì™1CæÜÙóçÏþD&]Ú葊u²ÀCˆ:¤Xÿ$H A‹ rТ‡,â#‘ì±g×î0\÷s Çt±Û³¡=÷dï€]{v!†:lï0 ˆ LB€ì™¤B`øI“(‰ïÎ<LÁÇgÇ/É|÷TØCJöp³ˆPpA:›¦Ȉà'†ƒª˜Fu摆)§:€ªƒ'øqA `ø)Ä;(±'øAçEtäyA Ÿ Êh£ÊX $¾,ÄPCE$q¥?Ü궈G z9§ždf¤q±‘èÁ‘22 uüÙ±©§¢â‚›†‰¥ƒt ØêŠ"rY|ÌpÃÀô0*‡dÑEeì É'£4HŠ}ä ±ÿ=y¬ðÂ9ƒLqÅ:‹ŒêÈ$—üÓI(¥ì Æ*ù²5…L3ÍP3õTSMSu4T;@äÖ\ƒM6Úl3(…áüð ¸ÛÑ5ES®ÖXýâX Rh­8ÚVëÌ»ý‚–¼ð¢Dô„ Î»*„ñè›6;ôz‹¶Ü΀„;ÈΨç]x«è챟šÁ î ƒ§[è´óÄT©³€‹Ÿ «‚Ên¨˜i²2ß};è-Š4̘fªé¦ƒŠ@ǃ†Ìʪˆ²Ñ¨:‹ÙqVúEL2ÍD3Š­¢è pvé€b~ý•cƒîLd’™Ì‡ ƒš¬eøšXßÿ ‰xã;;.ì°G.™aESy¤/ÒùŒÔÌZU{mV]µUAÂY“£•¹übo_gÛ{EöNöEøøMØ»mKaDø‚ÕRxunëžµïòT˜<ñÈ»6Û÷(QA…KzÓ\\ÌëS¶ÀïTm;P$‰2ŒÐ}wD9“âž.J˜¡ ƒBˆÇ ƒfØ'‰fHGhŽ;àÆ˜ ¸ÇDʨ·^¤e˜¡!#( |žn˜'Š`å+$ÖKyæ§súê¯ç0zf¢I°ZÂ"‰Ìàd0ùÌ6ü.xÃ;Ÿ:à…{ìËè@ ÔA³2)8ã‡ÿÎ:€…{Ô~Í{Þý²&=íÙ¯Ýû^øü@Ð Úˆ™Aº!‹¡R{ßòH8¿ ú#ÿ^À°|Œá‹…G<ƒ?™Å+.ƒ6R°M‹§r›ªZ„Øð¡nÃÂ䎈ÞÐæ9º™n§»-ÇV@ðCl¡+Ö0Žª¹Nê€`I`‡sÖÂVz â;¨ûÎm 1òdŽ=”X—vä³9pmñ XG=Ü‘4p¡÷à…@΀oH£Ð;a´Qo$ƒžq%,eɤ_¬Ãè°¢A~ñw\%#ü°G7°`o¬£öXÈN™ÊU ¤–±œ%Ö>ÿÔ¼eÄÃÀèÝ*ÔáI`”à ¿ &S”ÉL}°“Ÿl`JÐŽçˆÆ10h³ æÌ á˜â3UÉÊkNó–Êå.{éMpŠÓ [F´!Ži@c%çl¦)QùOi¾’š&¼æ ²¹Ín~s› •0¯R'Ц““ž¥ äÁ¼‘”ƒLÁb5ySÎtÑ48½é’‚DØŠ§C%ªA"YT¤¶ê¶0ÕR“z*§>UªSHTׯ,$ÕªTEM,,3äC|¨)WÙ¦ÓÒ˜4~ÐÛoŠ£V¸D=¬¹V\§ ¦!Sð ^; W¾ÚÕ¯€µkaO5ؽjñ2*bkØÿŸÔ wÑ‚8>BS,B4h%f2„C$â~Ðg§*„ølδDÍÂ:䑎"ÕB¶³=CZûÚÙõ¶°]mo²ÛÜ®¸¾EUY‰{βê¸Ëensû\èFWºÓõLr»ìfW»Ûånw½ûÝø¼ÚÍxÍ{^ô¦W½ëeo{Ýû^øÆW½Ö¥o}í{_üæW¿ûåoýûßûÊWÀ&p |`'XÁépƒü`GX¦0i|a gXÃæp‡+üa‡XÄ#&1Z;_ñžXÅ+fq‹Ñ[bÇXÆ3¦1gœbçXÇ;æ±{küc YÈîq‘|d$ÿxÈKfr“¬ª$GYÊS¦òvŸ|e,g9ÆUær—½Üb-‡YÌcvð—Í|f4+™Ìkfs›mœf8ÇYÎçusí\ç9çYÏy¾sŸý¬åùFÇ{&ô—ÿ|hD¹Ð‹ft£ýh.‡Ò“¦t¥-}iKÓ›æt§==i& @Ô£&±¨lê'£Z§Ÿfu«!êQ«:IJö/­—lk(»Z×»æóI]šX£:ØͰGcldÛÊ^v°W5lb7;Ö]v´•ÍlÑìÅŽ6·¥ýkcóZÜã6ó­m-€(°ÜÎþ¶ªImjfïAY{86»¥Ýljw›ÛÓv[µ÷½n~‹&ÿ{(·å½x³;ÜäfxÓlnb;Ýø¦x­Ým\{;ÛóÞ·Æ)ŽVY¯;߸ÈG³‡ Ôûà{H¸·Eîp˜Ç\Ç4æ€1ÞÁŽ\H`ÙÛò_‘ ÌíÈÇ‹Vñ‹[TPƸ½ô¦·»Û+ïøÇ°!”åBØÎ¶×³!,`ÙXßÎ š”]Y÷‡¸ŽuˆæeßäŽêÈ[åón9¾¡-™^ð¦ñ1œaŒ£;ï¹?~>ꉓÆß¢¦A-Üá1X@4•¿|æ§­j l@YUw÷v´®wØ=YØÊǾ ÀõþÀúÎv®WÀXÿMö°¤àì¿.ÍÀPïÐ+ëâìp†ÅK3xèGÁ3V>œ š0ŒC4<õã—n“›Z Ý@,d ~ò›¿ÞHÇxÈímkÞ[Ô¾ÏvæŸõÖ‹@4ko»Þ0ðÞ“·¨¶€[ùã7Q›†_ @R“>|@øš1à*€‡í ƒîK†b?Ã7*€‡e¸ 0µA[?âû¶s7}«¿â£;z£= ¸?¸¸óþ8Œ;·»d6ã“<…K:©4LB%ü.ê³>ìÓ>ˆ2— (hÎZ€+x†x†'PÐB.ôB0Œ°Ù¼‚‚£?ÿì=üÛØ¿¬Û=»[Ð6Ú½ø¯%ìC?$¯K†ÃK8„CèX6=„ PNhC­™É/µ\˜•´t˜µ\H¨û̿ۆ[ˆtˆ† 5î€Ç«sr`…w †ƒä‡#µa€Qór¨‡x ðÑÝÑ€zèc˜Q Ø…ux‡a°QÛe€ÿyð×\Ib(ƒa{ÓXƒQ6.‡…4[OñìSá Ë[¶xÊ;L0€;È9 ƒ<˜ø„Ê9Ø9¨Ïõ#à‡hôþôOõ‡CœáàÑ@Ð ø>ø…Ю$6„ÂáJ õTP%@AH„½I}€ãàƒÜ„²d9™œ@$(+ð‚xˆ5æ[È·¼GÎÃ<3½Ñp¨€Õ@ º*X ˜†b°€{ \R8ì.@‚XrhÖje…† @‚{˜Qc†°eX@˜i PPÖæSH9 ¶„µf5#؇ ¸G @ÿlÅK?½Ø¬,B`CÝ45hÔeƒÊ÷ÌÍ<0T5)°}ÛÔÿ ÐDH€hY¸Õ!ˆ€Ÿä6Ç$¶X„>ÈÐ`qY˜mÙíƒxº‰€åðO`¥G³œÇ0ˆ©Z¶à˜†^ ‹XS@fÑw¿ò;?zÜUµY(†kÝ@¨m€`p×t(‚ Œ‡wÀ‡WP€a{…eðѳýWµ- µdPË à‡"µ#˜Q“…p(½ 6¯EX8UØÊeX°µƒYzœ…|è†ÓœHŒÝ~{?­äØÝ$¶PTQ³ƒ<8ÈÍ98âK‚}HL–íÔØYÿU­ µœ}ÐÀ©Ð åÝ– ‚5ÒP^ûC€ÚVz´€¨^ë-Ah#Ö'MV´Ì\h;A¼Ç}<_muÑ_8:t8‚ ”˜u¸Q{‚hHu‡gXÛl€"à‡*€]PK 9s0‡sˆ3µ[(zøÖŒÚx¸{Ú'€` ¦àQkØQ“ ¸Ç`‡,àSÒáûBÝÑøXGõ‘Ý<°ƒä²|¨Òx•þ”ÙØh;™ P^? Ç¡õÙXÝÝÞСý$þHZ€€èuZa}G1 *®âª ¶íuÑî½G1ìÂ/|Gó5)dÑó€ÿô€õW(o  €{н'-_l}<Á%Û àxG03øHêmdp…ê•€CNäEÎ`ï,@‡…L†YaÎää2aÑ8€D•ƒùLáÜtáä’†)¸ ‚>hY âÿ5Çi^žå]$ÎRˆ!€UQså@€ˆÐ!‚!àÕCøºiÚy|Úw¼ˆfiŽØ¿Û…q0"€‡5[üÚŽ¼D(ã<:8D?^ĶE_õe_%µ)¸à€}˜t¸ã1€i†0{˜ÑcH†(€Àwžè€rØfQëfÊÓË…äÿaû]XHïÄdMÎh·ádødOE}O&eΪ‚p Ð#¦Ð"b~?(P'^Þ” Q>¸aOEäíÔØPDQ•P6CJ˜CIÌ”ÒK޵s_u ‡zP<íÈÐ…¶|&FcDÆtFãufcQó†]10nx†`Àçqµ-¥‡m(`5 È…o:‡3µ1@zp]¸jxj…œ#6Á޵mˆê©®ê8–zFØ\ÀháìÔg*8Ê5êÉ–É|ÜÇÍþìX#†sýÈÎ^ËUð…Ž¤iðëŒlŒl ÈÒ¢äÇáJ¥홄H‰Äíÿè4‚€%XIÝ^K f…|h`‡»ü;×ÖhÞ&Ê ­Cà‡ŒnìÎn¤uˆtí^ËçÎèð.oó>oôNo…oMVo÷~oøŽoùžoúVïÚ¬oüÎoýÞoþîïü¾oÿpÏNtX~À€üÖàèVðè¾JhÓ`ÇíwK°ðò^ƒ<Ø…ü­nPÞ!µUþ¥  Mÿ\E­ˆÎ Py€2ðak×nµ‡àz˜)6Õœìµ!GÑ$MÓ<ËÃŒÜ`Óà#Î"µ(—É#·ððÆp §ÇPE„@Ö`F¤eÿ-Ú„WñÚØe_‰Î1è ²µñQÃqÏî""x2¸‡(Àî)ïÈé¬Îëø5„ÂYå>Øu`íõd÷b&ñ=„Çy|[ÅÕ!ÐÕd÷ØÙ_€>àbþò^žU¥mÕW]œÞü\ý¿“|Ðb…d¤ÿƒTHwaU¤Pì(wØ‚½:Cvâ—´×+X€0è{ÏñQK×um×w¥VkÕgzµ×µièþ{µ|Ý×~…ôume{ßBâ7?²X58ȃX0c\í ýÛ`­ÔA–ÐM <È8)‚¢›YÜ7?É .@œ‹¡%¿@1KÜ›ß59¬a„óË@ E‡ä€.?P„"üà‡Öçø"l"€? Á7°A@ Á‡>ÜN‚PDè›Uî ´ÄæHA bABkT'€ÂŒ¥Îe·ëÔÎX±‚m¬“B‘sT8Ád¸Göwf:šìf6SFÍd@E*®ÈfP€”à A§:åyaÓ˜è=L@ÏgF3}LÉ5ó Nq’Óœ¢ ”´€-\f3)zÏŒ~s†ÃP?ÇñOt =h:{–a!¬8ۄا"µ¨DMâbÔr‚:F P `üñ(µÈ0}9ÁZ0Àܨ?çøàQA-|¸Õø@ÿÈCô!j@ɇ¨åƒ@ÄY¡ÕÅ%„DYýá™X B¬|ë"ø@>Ī©q€?båÚÕU‡`,"öWD¶ˆYG7º1‹ul¡ˆæ‹$±žÓú£y°L!(±ÚP`Üjåé2oÐÃ@=HÖaZ D æàÆ3‚!ÍäÒ Ç6Š º8ºÒ•Y.ÔQsüv ¹p;BB"~ÔCS8È6ÔAz¨#ÆE®r›ûÜèN×¥ Á1àÑ]Sc@Gou‘“ƒ|7¼"Q/{o¸ÛÞõ¡ñÆ.ðÞä.—šÕ¥/vµË]„T!qî7¢Á ÿ!¸½Å=.…åkÝúNó¢ÏÌï~ûûߨ»à¥Jz×kb€òÖ·Ç4î”ã @Op3*’“¬ä%3¹ÉN~rQÓ"·¨Å¬1ª”¡\Ä;2·^þ2]ˆ¡A‰Ìf>H™Ï¬æ5{%Í“™ØÜæ1ËÙÌÀ‡2¨å=óÊ ÔŸû,h&gùO|à&‹å@Z.e‚}R0 ûÔ¹Òf1 e%ÐÓÐ4§-=OƒZÔ¦u¦7-( l@ΤVõ©X…o¨(·Jfô¢Òh${%..´ÜÒ¢ë]›,Ž.²Ü‚ÀœËÒ5ʸ޵Y€°-Iè2Ö–¦‚:â0ìÿÞþ¶€mmsÛÚe÷¶Í­î »Üë>H»ßmí[»ØÃ&¶½ëýëgÏÍØøîw¯ÿ-p#Ê»à?8®ð…ó{Ë'ª” ñ‰S¼â¿8Æ3®ñs¼ãÿ8ÈC.ò‘o|à&?9ÊS®ò•³¼åôö·½ÕBò™Ó¼æ6¿9ÎsÞq—ó¼ç>ÿ9ЃŽòÔBÿSÄu®ô¥3½éN¹Ð£.õ©S½ê*?2 7 „B<ÐOÿ:ØÃ.ö™[½ìf?;ÚÓάÄFϵÌÇ.÷¹Ó]ìj¿;Þó®wÇàCG®R÷Á¾ð5ß;â¯øÅËm¨|RËŸ° À…Îÿð»à ¯ùÍsÞâŒÿ<èCö!Ñ1àÇ à2_µó®=áE/ûÙÓ¾çC„‹Ä*ÀdØó¾÷`¯=ðƒ/|bc}-X@G“}¯üåç|øÎ>ô‘|û·üBqùi뙯ýíC=úÞÿ>øãByÌ .@.ªòýÁ}§‡¿ýî¿ÉWዸÜù Ù_?þoÿýó¿ÿN6åÁŬÀý埒œÿ% .`Ÿ ŽF &àV ÓM f`øY 6Ÿ~ _Žàá…  žàçžúíÜ ’à¢ Æ Þ¹ vŸ Þ R] î æ þ`Ï­_ ò` ¡áÉ5ÿÝáë!¡>á®1¡VV¡>Ùfa\!v!úi¡z¡ŽáZ€a’!r¡2a¶a®!º¡"!È-aÂ!Ρî!º!âa"þ!š`ÃÛ½©Å2hA“%":¬Cô›ËáZ"2™Bð²Ñ#FâZl"üÉ"ž%]&ªEÑ9!®!â!”‰H\<9(\@C.ÀÝ[È'"])>EðC>¬.,€³ù”5Á‰ ÐQé"\@#\È"-šÜ³i À6&_*‚á*ö"¡£’Á"\,ƒ*Ä…-ââZH£¯‰#“QDH¸ÿ,4b+ö‰ÜCù5ã3râ:úãZ˜#Ͻ„,Ä…Ûqc7fá7Æ…C=Ä0P@°m€2Àƒ ß*¬Å܃¬ÅAØ¢°=œðV;˜ä±£?4äCF¤ZlÃ-D:DèEuu A^¯9Ø0@ƒZø$DJ¤?%Q%R>—RC×éš Ã<¸„ZP¤Eb¤?ˆ0ô‚¸9£ZÐ?îâNâK&¾dL¾…H’¤Iö¤CNe XeQ¥?$¥?p¥Fr¤G‚$äqàÉäßÝ# ¥EBjáBÂQ|D+‘U`…V¨LÈÿM@ž?ÄCŽD…ZãZÜ12&M"›¿5ÄCDÄ[¾Ee‚DP.ÅI¨…J°ÄO0¥®=Fh„?ÌæeV¥m²n"Ån:\‘틨Effœ%? A<\?¶¥×ĦLê"£¡¦\8ƒh i…?äDIœD‘åfKpfLÌëAžä  Íg)ZÞ±AfdNád¶#‚‘ÉZlH¨Å‡š3  ­…iª—3`8šD£?JÙVå9úCƒøƒ…¨Å„<&SúC’,I“,'²e¨”Ôˆ‡²aÁ]âZh5J' C\§?„Z Œv¾%£=èw*(c¦è2ôÿešP‰ €(Wh–Èäé¥ÞcFi)®ž£ÁÅ~òçò[Ö[–ž¡>Û ýT:\ùƒœ3´$£=\”P Ñ Äœ.¨?Tè[|OtªÅ ùÃùèi&C‹.©?„¨”ýÙCY=k´V¥[‚£ÆEs¾E®Rj”[F¨Å-®³2ÿ&³2š°~gK®…·B¥}}èµr¥=›_‘ 츖a¬Æá–’ÅDÙSM?Ø”¨E8S9æ*dBÅHÑTkî²1T1­2ÙŸZГ?0,¸N+n²a›ƒMAD-l4éivú>iSÁ2e¹ÖAE,ºbÁ=°%/ƒ®¦Ã[”,c–,®m¬LöjZЬ¾**Áà¬ËJ,GU,äUŸ£U®a_‘êçÁîà7öÚ„)W͘?˜ZX@vmׄäÅâZ…ª?t˜¥cØ2Ú‚ùS×p©ÅÙÞ*±l`ΗtÍ©¶VÄŸA˜? îZ¸åá®ØÎV¥:øC‚©ÅŒ¹ÿÛ¢ë¬[¾€7Ã3ƒ W-ü-ê¾ÞÚåÜ"äÚ×äÒWÛf—?p¾’_ ‰î–âùåg‘- "QÁÕ‰Y82òîñöY -¯ÜÈ_\H/\Ô_ / ï—&Ðaš?€Zò•÷‚ïÞ±š ï¦ÆÅú ­]/öv ö¦]»õè·ŒUýÊÍýâ/ííïž™ Ä/ BÃ0'°›Ùü60/.0G°+°WðÞš˜=8Ãwpn-¢¯)z™[°œACSXÚ „ ,ƒ<ÐC7lϺýb0£¹QcÑ 6’p ;°œ™Cœ™Û“ÿƒ/tL «<Ê#=š›9æ°w…W¸ÿðü®Ù1 >¸:Ã2Ã;°C.Ì‹ÜeI>A˜ƒ8+¼1 „TFä9¥äJ¢ÃÅrþxˆ1Ï Õ›ä–à¤mdG~dËX„<¥ï%GÉPþ¥Šm¥Ì¦"]zÅ ÿÇ;Œ_e%³Ð%'²ÙÐMq[Ë ¤J¢#„b^1¯œ¡ÃƒSLQŇgT—LÃÍ܃ EGXfˆP±À9ÏEAkï-ç2ؼLÌ )/¿LýÂÅ¢ƒE êPD 0ƒ4´Ì…ˆ}AµW¬ÍA ª™ZÀ Ð; HoÍB˜5Ô „›rrTãi[— ©2ê©:ÍYQSƒµPŸ2—5?T€­%µb/6c7¶c?6dGvôueK¶e_¶Ùqÿ ew@“MB%€` ¨Õf#^hvQ•6“µ‚,ôB®d–UvûYA»®k»ö[äök#Yԣʩ6m/Ùp¯EqïY¶P‚l qo6g›&0÷[¨6Q Alu‹Zhöq#™gÿ‰sKÝvÿIk÷B/Ø‚Z<y§÷È@´|wu€ÈöZPÁ*è‚qª… œA-è,@~ó·¸ZÀ·Z¬€Ì‚.¸B xÈ@-è¤ÉÍ÷[„¸‚.Ì‚Ã6÷t;÷s¯…TÁ[Ì/”À[¸|xY8†kx ô Ðö0"¾ÉàB-ˆÁ °œ¤w/ÐÂ[ A]®ÿ‰›øˆ—¸’Y4™l(“ wxÇ·‡;¸Ct·?´•S7 ìAt׊X‚%‚!HBvS”a9˜‡9Ïyx”«… ô‚ ˜€ yع (.¼À A ¬Â ¸9\-˜À[@Aœ¬E¥ÂÀ `Á-¨Å£Gú-<·‹€*ˆA ¼À8x ´Â,dŠ›¡#úZxÁ,0 A¬…Šw@¬s9Ђ‘«Ø­ ðB ”: ¨:«»: ô‚l6 äà[À‚´@9íøÊÉBèy®Ê®ÇE¶+™ˆ8“uA£7mº”Ã7œóÙ¸øÃf«€?xÿùp¶—37·ìA%Høƒ`‚¾ë;šwÀHB%ÈÖ½ã%¨À˜O‚ t€!`»wpö¼S‚½«ØÖ$컫{jUÂÅg÷g A½¼Åc¼ºËz(7sÃ9gwÀÆw< ¨ºÐ»!Ü»ºOyÍWy\(J ¼øÃŸ‡6 øƒ¹ÍS6+T—ÓB€ù xÁÀÅÓÁ¬xœA€¹˜ÁÐÂ{£%ý[ã¯E°‚-ØBiÉ ç7>\Ak›ýZÄ}\Øþ:&þâþ?H,àÀ‚¾îŸþ˜êB˜,4½?lA,ð-Ä,Hi’{œʹß<¹/™¤]Âp¶ Ô{¤%LøÃ$0ü´»?¸»tû;¾ûÃ%‚ÆcBkUBÊS‚%DŠ;ø›dÉÐL{üT‰a%Cþ:Á4É߆+ ©$IEÇ'vâSÂ=B(tiãF3iÎT ÓLK’@´téógM¡Vtå¢eE¨?+­Bø›á¯XÈÔ:ÿ& ^/’Æèe•¦•Z»²”;¶lM‚4_eae«LŒ–_¬xQ0i^½{³n­ÉªKÞ_¨¨\˜æÀ%³Jà¨j VSxM1A…ÖL—X;Þ|V Y¹BŒ©âJ‹[\ÑÌ’kJˆO£ì:âïIf¾dΘåëOK`Pf™@­šõL¹Šøsq{ï’^.ò!-rÒì4g¤^ÝÚ“ZDB€éŵ;rðRvñ—$—oºÀþNº¶¥ýû›5ó×ÿÛ¤=,ÁD’“:P‹6š¤BJL!ŠhR¡%±¬.Yh ž(áï nšHAT@°C0¢Ã‚¢„’K)U÷ šÞ]÷\ûh”d&œiJüyP3ÿ†„À „=&Ù'*¤ ¢Ä…±ê·ƒý±§Œ>DL(Á„¥‹s¢ dKʱÝbóGð¥‰%# ë“•+j*ãÕ™Œ ƒŠ²hå ðÃO f“Ââ ¡°Â%^6™žy&(üò§‹2fêÍ,Ìh·^ýŠ®Éˆ^Öœi…bã ³K(Û´ÕȉXB8²]Ë•Èü¹‚Ù¡ ;†à­†X¦Hú=2^‘Å–ogº:šV‘b&,Œæ« áøª[„*V16 ÅwÜŸ*\¹e só"c ³c Ž&/¶ªnßhª½¦ÐoÜz¡a¦*ȘI÷ÑgR% y1Οÿ(žíúÈ=»žþ?NâÆ&éW¼úýW(….È"IXšRâ=RÑ}“\üÐb…¸_ yl‘#¶IAùÊŸÉ|B‘Ü/1<¢ˆò¤øcH‰ÑQ½Xp 'Ðä ¶€]¯4õ…TÁ ~£Ér&”2hAit²B¨5o[3YüquݰÔû kB„^<å>„‘àaW@AGQ`ÅZB  ,ùƒ H¡ï²ç¡®8åŽP )‘![3àÅ ¦U©™DÑ>TÔo(u[H©‹_ÌVVˆÅZ &)¬H^M”˜”>Ò$Žg~ÑO-1E™  D|¡´B Ñ=•Ñ/%x ¿4‚¯…a$#üª„Ȳ>JhÄeBN~b£]j&¹ÜËM.1—õDf}‚ V@„3œÁX, 冸„-t` X˜$M„'˜ P0AS°PƒAª`§;á)OÍá /À xa„Tá\qI-ØeÉß”“&%˜…â$Fˆl" gžàйåÈtB+Hí B‹AS¡ uC'à v±"-P ⢠¨™<á´Ó…fâÑߘ cÛ +b!«™X¥.]ÁÈÿ¸\jä—½¹•ï…Õ”™ å˜lJæ{YÁ¹ÓŠp¡y𠵩gZv"Ä’š‰'B{ZU@!ùˆþ,Pÿý H° ?*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç ŠI²¤É“(Sª\ɲ¥Ë—0c–I³¦Í›8sêÜɳgB™@ƒ J´¨Ñ£{"ÐãcáÒ¦虪0ˆ…Sõ<ðùP*Õ„^¯ò|š0ëÖ…V¹r4k3ÔªoÕ @J·®Ý»xóœ¨'þƒøE;!Ó¿>|ˆÅ¡³`õ xx!SÅk ¨œ3EÁ ¥N^øXîFÑ6=+T-W¯ë×°cÇ–¨xtÂÚ´õ8 ­»jᲉ#D;ðoÃÁOK½\#艊w¯nú#kR¥GÖ®V¶÷ïà÷ÿ¤¬™3DóÈIßœ|xÖ©g³rðü¶üÛë/So¨¾û÷[…åŸýæØ}ô½×ÛyšÕgØTÚ=Ð×To8GX5`Ñ÷›gn••†[I¨a\Ru(@ŠÕ‰çâ‹0~nÓÙÖÕ‚ÛñÆ8Иƒî`Y\Šù€€bB¸>Ψi%¤‡ I¸Ûgy¤I.¥¢CÙ!ÆTI*Ù”gZ"ù‘TA8pädŠ=¥pæ=‡ÙSqV¤’UjµPˆ-Æ(è „zìA·ä~RU„èuKiG–‘º·QeV'fBúP椕 ¡]G)Žöùvà©P…ÚQ”Œ!ÿ”é©ÜU–V£ f§p4ÚGªO…+ì°)AÔë¿6«”ûJ‘Ÿ„ýÙœ’ Jç,F³ªiØ—Ð2Ûœ .hªCËÊ:­”¿ÙzUv„^¶\škІ™[›‰Õ²å&XÝ\Ä,0±ÑÛ˜ÁŸ­7e¾Íët;Ô­E×Öç°¹®¨ç~-¬ìzãræ¥a~ëÑ»ÍÕÇZ¦dåꀄ§ÆWؤ ÑÜÚÀ8ç c©ñNW¦“;rŒ(û\cdžúØáÐuº%d¦²æãnÑiœti$Sõ¹1sÚÜaR]ý%oc[J‹ÊÔÓ¾F¶•U»15*f×r¦­}?ó¬bœdGÿ¤óß€ËæÍ¬VD&sy'*‘ƒìr–tì.­™ÖíR­×l˜9µ#΄œSȧÆY‘U‰ùÞh*ô¸sNó½%‹Å¢Úó] êhõÌlê .üðv9t÷À7Dï|Ë3ä1WÏÿûQóÒW¢LKüöÜeü…<ꔘõã[oþùè§P÷ì·Ï’úðÇ/ÿüôwäþýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ 'HÁ Zð‚Ì 7ÈÁzðƒ ¡GHšð„(L¡ WȺð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ ¢ÿ‡ø¢úñˆHL¢HŠ&:±‰|à¢%ZñŠXÌ¢;B †BƒXŽ’A¼o‹4AÇ:ø4Þ"ò{#/² -4DŽ Á#üô‘ZÈB"]\ȸ¾¤l$ #9”2ž‘")À&,1‰=(`Ž iãv(üà=¦!……4á ÕëdCNP>!T ÇELÊ|¬ ÞÌqI†ð‘•ÒS%C€‘ ȃ ¤BÀŸÄ™ˆdHQ¹‹DB%1™M¶~ÂD(‰ð‚2Ü# ê çE@y –³äG$€wÀBzËP…Cøhÿ>ufÄ„ˆ2ÂÌþ92‹„@> BHˆ‡FÔ|X„F9—C`èBjQ@ ‡8Dé"Ô$¯{í+B,°‹u¼cÀ ÐÑŽ| «(i€`D!V@Ç<üе¶õ­xÕ+_ý*WºÚ!0Æ;Ø‘ pUð‡7¹ØÆÿ>6²Èìf2Ö²ž”ÂèÅ;e×0 äÉ@Ì!r°âÄ-€a@£³lu+\K[×» °£la›Xl¶²E&B&p#($Ó ‡6ˆáWÝrVžÕnhKÚ¹vµªe­kÍ‹ÞÙ*–±Ž…,f5{_ôÖ¬ áÂ8’éE–QU¨?±ˆ! a|Eƒð>ü@ ?𨂀A(‚aDÄB;üá#@‰ðp"!ªŠòA‹Ä\~RH¢>@5ÝiOðÓ NÂ5¥%@pTH"©B‚¦šT##¹Ë{È&%’jS\•̆p€€Ð áÿWX@°€Öo"„ HXÀ ÈÑ „l#PÀ4Xi conðB è{øÕÒ”ñ‹„¨s²ùqÂG<ë™Ï…>t¢ý hAZÇp†V0Ž> `Ò €”ÀK{Ò—÷}sœç,Y~ !€gq›Ü*¬CÓ(†î!‚é @縧<½gWÿ9Ѓu£éIWúÕ±žu­r~ä2!܆šàh…t:ÏÕÖö¨ãZêl£ZÕ¬v5¬eMk[ß1×p–3b„}L`!ìpA+ü¿ gx¡‰HÀ*!T”©ÙÑEôÁP„Œ7ñ‰+ôÿÇ’”‡¡BÖ8#“ìŸ*©Je2P'„Hfµ–dH“PSœƒaÕ¹&€ ”ð©!€,…„!XÏ:*Œb4Ä›yÅ2ü¬ÏW{½üB’¡è„ ]í`».À"{þN¦€~ m€Øðöµ“¶ì³ðºðá„„aÂE8ŠÐ˼/„]_(a@Œ2{Æ|±µ!€`ô9E e<ÞWT>!ƒ+âÏžvÃϽîwGˆä)Ï[{(„–p_Æ}ù û±>î‡GHâ°øÆ àñºŸüëàONß7ó ‰?V°èo ` )(ÿÿNñ #bEåWq#šE¢¸Ã©ùýáŠA£ø_Äîï` !<%6GtKÖdB`JÇs×”Xup75 c†<…s@€ ÒÑd( ( “àZ`Sc6` a-‚*h‚  ¯ðui…O é òðJÃ&zPüW»x;؃ñƒ@üpæ`çåuiü@Y iîv_3Xƒ7„>HZ¡‡\ÒU{ʃe å@ÊfyS¨.¨yüF€U@\ GlÊ5 ð ‘…G@KRà³  ƒ4hƒ8‡:ȃYX„G˜„K˜X †dÿX^ûPy†8„ÃG…x…•(D˜ƒ\|Q`(8†eˆÕ'|”† a„ P ç?ˆpV~ …~fR÷ç2å×Rr"w"U'çq)–bàr d†0Xs{psJ—€ ØsM'Pt@ B0CwJwtI×d€t‘Wöb@îøŽ[ר·"Àã&pZpI±p]ž˜\Ç'wp„ü` íðIOXY—x ‘û(ýHx^(„È…Íçx—.`g… ùo 1â´†q Ä d€¹Plth‡€‡ÎVÞ@ øÿ¨üè Yù’¤ˆ5àvü ^‚‘!‘;i‘p‡‘[˜\ù|‰C™#‰k%éu è@a‚@‚ Aжx~Æ(|0ûŒb@Fbà 51FŒ2¶– ðQCàC`F0‹?°rfDdE&8J·ÛdMÆ€Ù”p aee]v€`¶f¨s P)°d=W Ž q0°š¬ ñfV°p Qï@›¨µîèÀ“SYh°F`@(ÓœÃéWÇ %P10pŠ…êÕkDàdpNg˜›»Ù›À)œÄég¿wøÿ6®€S0Ðåà 1ÒÉ• ›²I››Çw÷@\¼p €é“ux‡yÈÔ%Sp&Àº)¼é›rhœÈù¨ÆœÎ9p癞ë©ÒÐ’ ¡ „Öôp‰  ÛéÇéZØ É0žåI è©žì‰î9L‰ò9› ñ ºÀ¬p 7–þ#?0 EqPŒå˜³èù§Q~áR| RE:rå(…ƒb-å—Ž$M¨˜ÒxSUU@™;‡Nge:T?µ™8'SõUC7‚¸ŽNÆT{pn1då<šÆfµ€b`Üð ÁÀ :ø]zÿµ Å XŽ ©¤˜ êPçð§.éìÐg Äõ  SÛ ôPêy…z¨‰º_“ ž Çí  8è@î  z*¹À©Öfª¨Ú‘|ª« ¦N—<×±Fp”2JI+KÛ´¦ñ´Q[²AµL»à]µR‹>&àš€ú ×°>êAAp‰p|ð$€B1´Y% KÆMT ñ€`p\¯Ð·~+ï„·zû/w›·{kµQ¸ƒ›>Š{¸VôDOtAˆ;¹”[¹–{¹A»=°¹œÛ¹žû¹ Û¹D4º¤Û?¡{º¨ë¹¥»º¬Ë>©ûº§Ûº²;»»¶«º´›»º,·Û»°»À¼.â»·+¼Æ{¼¯A¼¶‹¼ÌÛ¼H¡¼°ë¼Ò;½2½¯K½Ø›½)a½©«½Þû½ÿÁ½¨ ¾äë½â»å›¾Ó{¾¡«¾îÛ¼ì ºï;¿Æ¿ö{¿ÅK¿ú»¿{A¹üû¿ƒ2S‚R¹\ÀDq³ý‹L \,ê³iê<Á2!±ÐÔI?ÛÀ1±)Óˆ³.¡>X¶>ÕÁIeœÂ!œ³ŒÁ8 ·p+s@+MLfÂ襇±è³ÇÁÁŒ*Ä'‘Z«ÕZÑ“þP[ ¶ Ü¿ÌGÊðûÄQìáÃ@åı`:<,?åtüSBpn\ܦg1m*Kæ`ÌÅÖÒ¦{Àµ±¼X ÄB¼Ç"‘j«ÖjG<•á†ôL4P îà cÿ`qȉ¼È3Ü‹þÐÁ‡´6G?•ôwW=‡]5?å&<ìSeì€KÆà\Ü1yŠ)P6 ဤBÉ–¬ ç7|¼ËQ•ÈÄ6ÈìÁ¡Ý€°w`ÌÈ, É8¬Á"ÁÅ/ìÊ>5AÐS]%ÁÆ+rÇpšTAÀÁ$ ?LÓà}VÌË» Šþ ŠÀìÈ%ÌMTËpæ÷œÏð̈yà Œ<üL(Ç>•¦ÙÎÒáÍ-Ç»áÆdœ1 AË4Áλ¼‘þðËþÀ’sñ’¡õÌH°Wð ñ O þ`Ò(­ÒÓÉ9<Å#ÿ±=v 7Î Ý1Ú¼T=ÅÊt¼ÁÁÊI÷ÍÇâùÇ®pùéü™ £…üÂ+À 罸Õ]<3Ã|Å]L€A@pÇ0tHMø¨ÜÍB°`iÚsÐÖüo-;ªËMÄ :«µ:Á¬Î ­°­° ‘-™ìÅi½c|Æ= סÆdÜÆoüÖ™-1Íç, +؃ ,ͳB°ñ׳3»Î«ÛÜs)V&Î4ñ2Qd«Úº}Üý“Ù@À»øÛÜÎýÜÐ}½È=Ý;„ÛÔ]E œ¹|³R”qSÿìÚxQÖeÐ4Þ’,æ]Á,œ³áÝ×==ò=Ò œ³uÔÄÕLßá~/|­;•ß½Â)!GϨߢÝB»Þ áG*Qãà[ à þÞ+Ñò½9à&!±»ÄÒîÄ+±ü]âo»Þà"A´5 â$AÄPð Y}¬”ã®AKü`K¸ôà-äÙ=äqJaL,¹  &žÞÎ'uààþmߪÀãß}É^:ÞE^Þ,îâÏXHîíÞ2,»@-`ñà[žáç­âÍPN´4Oõ O~ËÀd>ÖbÃ3­Å/P)Q ·ÿ°çFå%!ߎž‘u ßrÐ1åt0òmß]ìeA~ÆPQEQ%…Qø7F(æ—òGê5'•R+Õê/%æ!˜TNÓZ¼> /š tØé&a_ ¾ ÅRŒ˜Gì_§å 'ó¼\Íõ\ÄàÓ%Ö%ùZÒí:åàÕWAX†…Xq^±e`9ìç ÜyÛyì!a)a ¶ èìÍè)‘ñ}îpy tspéò=; œçQn“-¢>cb"†$fb(¦b¬Þb/–—EJc F)7;æƒÙP@fF+α*ÿçLKHPVàñ€ §Ào$ãŒÈŠÌÈ~×fjs1íòlÕÆ†lÊÆlÛmzîÔÆgG\o„挖hi’Fi±oâ6dË$ïe0ïe`?_‡Ø&èüîï0T>6 ð!ß–>åy`ZîR`qñ$'qågqWür} !'cEZr ¤)÷+×rs+®t7{³W—uX'Åg>O8 ½p÷€éìóÞßÁÌÉÜÄ@» ³—ôt¿ôï¬ þ`zþ€zªÇz®çëbgôYîËGþ@wE0ñóp»ÇÒ3œÎðnô^ÙOmÿOÚ·&1 ùÐ oÝv¯€÷u0;pðsaypþ0å ?ø’Hâ/d7k¹¥‚"ø#è/Ð","Àß!Dþ@ôç`Q AmäøCc *X’ ”{ö ,ˆÒ!A -dΔPÒ¥?üô¯åK“A%Þ f’eA*ð–]©yò(KÛÂ|•Œ TªV«Ló÷k•?tGrJq1KÝ‚O¢¥S'ï™D¬þªú+‚Ã]E‰ð;gÎܹxX°UŽ^1 Ÿ½I0L¼x÷ìA~ò8òäxO  º·‚P“%Øeùé²1hÔ©U¯fÝÚõkرeϦÿ]»¶yê´‘gŽÃ (Š8‘Ãéà¬ÿa!F¢v©2yrbèíçÿäæÍäé¥\¸rª58³ ¿®x&ž`žP 1¨¤Bi.¢!ƒ \´šF¯À‹Ÿ#ü)ÀZü¡à-&Œ¸Â¸Ðªø‘¥dŠÂ€sÈ4Ì1ÃÇ*¦qE& T’É“l tŒÂ df)Í4 lóòK0ÃsL2Ët*·Ý:àŽ<ä˜Ã7‚Š;ÎÊ.%’fÂQ$ˆ>¦{("ëâc飢ÿõY$ˆ"p¢!ŠèOM@D†b’xî?æ£Oû,éRUu.Úeˆ€Ç‹–X9£N¡,jÁÿ\Z•s Xì% À—cüÁ Aü*¬œJôgŠ{Là`Ÿý)Ãi„YÀ{Šà˜dJ( ,Pšb†:(‡V–lÖJbÊ*_£¤<é]è ª˜[¶4ÍL„Vxa†akâaˆ#–xbŠ+¶øbŒ3ÖxcŽ;öøcCyd’K6ùd”SVye–[v¹åb–yfšk¶ùfœsÖygž{öùg ƒzh¢‹6úh¤“Vzi¦›vúi¨™~8jÿª«¶új¬³Özk®»öúk°ž:l²ž„’¢'©¤l¶w.A$Úþ‚ §ßŽ;êVd饈™ÁÈ¢mÀ}¶‚Œ™óÞ»p½ùö¹ Xšûh¼€-JÐC(¡Ä!„Þ“·"sJöˆùì´×üh½{éÅ™™`—Wœè@†2Z¡Ûg/þ–™ŠUtaEfΨEX ˆ¹øã“×y-fÑeÉ™e¨ÅŒ™ŸXÅéÞg Wt™e ¢Í¨bæx±\fW”çùûðÇ¡fC ¨e —ZÄxak1¸Îu´˜Œ@³ô­Of ü™Ä 4)¨g+šf”@ çÃÿÔ¦I˜.hŸ ]Є` KÂ’8Úˆ¦¶Õͽ 2³#ä ßÓŠƀ„¬b=;-L03($á \ Œƒ`á1s"¥˜3¨B 5xÁfÖ‚VÌÂw1£/VÀ´"Qf^˜XP„&ÈL D¨Ùm†Z(°PhÅÌLÀ‹ôŒn„# z!™± ttZ`á…°ëZ“ElxÜñ±fšüÙ…Ö&ÞŒ‚>»‚+ÙÈ‚‘8±LBf*èÀçDHœm•: L3˜,¬¥$*±9_As*8á$hiLˆÐ—¹,%zÿ3 ìa“Ø-c&crótk/“©Mnz–†ØƒæJh3pVBœ*ÀD+a_ÒÓžøLšH3.Œ!fDà ~ø6t@z´+8H3ZD¡f+ð‚@gFQ‹Þ¬ gAÍD`†'Ðâ 3cA/¹4‡f/ ­ÙÜZº;š©¦1Ó‚ff^La·˜iÍž°Ò™È/ö芴@ ´ÈE+Ž ³'¸¢ ®¨þj  +¨‚=¥Ù ·³3H!f!`Å’ºÔ¦>5fM`…-l±…œyU­3#ƒÞX*³šÖ,¯2S*S*3)ÈX€…ÎêWµAY0ƒ,$Úÿ-Ä‚´ˆ,ÎH³QölH°Ð'´\€+ÖR0‰KìA ˆ™ xÙPb¬D4mÙ Á–BJt{ Yþ2š†¨Dè(a‰Ðl)¼-Œ©’{~ÜTÉ8Ë) Z:·Ð .,cé[œ“º¦£§m-! ”W%çeíѬ ‹\Р2›‚,^à2ümfÐ °@†“Þ¬Œ“œÙüÜ+ÔbYP`‚ÌPš½" m-C dö+ÌoˆÄ£áÒ<3Vtáf.¥‰g¶„Y0Tä£oNM@…Þ,Ä4;,J ‹\„` ç›Z‚-p–¨¹˜BB0Ä(ìÿâ©!ÕÎa½Šx³8bäåå‚o.˜«Í–Ð ØÌ9Ž)‹g¶bôùÈœeB-ˆ0ôâV^s̤°‹&!ë.ŒÙ8M20B,h`V<ö•{°D=§ù¹ÜFsœé¥Ìp9ˤW–hï.!éLcÂ…3[n è)K`vSî4§ÙÞå.Sºªf5,g»3WÇŒµô¤k]Ík_cbšF+B Jà„]:ªà/>;Ö%ˆ¡ ŠËúX3'9‘2¨B.,3pÛÛ8«A/ÈpßVHÙ `ígvõ-ÍÚ3{/îF_·Â×­G˜B¾s±o™±B¬ÿÞ[ä̼@¸4A8«÷½c¦„U@¡ ´x.d@3%Ù 6ÙÂ3',œa…Xø¸˜±‚¯ Ëx‚3Z\@J›™j󞌜™§¤™ÀŒË¹Œà:b‚^°¹¼Å°4$þ;\ØDN£¥ë@Ÿ!ƒ:dŸ$øšUSn6X²º‹G™IÌ!»¶Ó¥4ÇôR›iÍ!ÓÄ-m’'ìGÙ¢MÕ¦ÎÉ&ÿД&qHLHÆÃÁyª§vâ'}ZN-$š1À…\p+XŸƒ[°…38?W0ƒœ¬™" ¥s@=„(ƒæÁiLÏõ”F™á‚\Å ‚YÈ…3й˜ß“™TêˤOç‹È\¨…1€²œ Ú±X…\È…ÿÁŘŸ¼5PË©Z@¤3°¨ek…2¨‚‚ê,v› …0Óœ‚Oé‹“™ Ñ•­¼Ê´™l;¥ü“…Yè…Y…¹jÐ%0!…Ð UQø¬YhËQ%½Uƒ\XP¨šZÀ½šqÆŸAYP‚ãÓK²QŠ!¶q¼Y";ÿ3¥GÒO£áB3 š1°E¥iS¥éÉŸ\Ó¦ùËÔS¢É‚÷.ý™"¨«WˆSÏÈóÓ®AÓÖRSFuš*ÃH-š(ÐJUš&˜ÍT )D]ÌôT H$U¬qT*lATmUWuÕÀ…Vø³WÍ™Z8?Q­U]ÝU^íU_ýU]}aVb-Vc=VdMVe]VfmVg=ÐhiVj­Vk½VlÍVmÝVníVoýVp WqWr-Ws=WtMWu×hWw}WxWyWz­W{××XW}ÝW~íWýW€ XX‚-Øj½W„MX…]ØvÍWØ‘u¸…se†ÿw`ƒ•ÖWp†põ†/ØV¢0 tX~À€iýØj…X‰½V“­Öb¹X—õÖ•Õ•‹-‚|¸Ø˜}Y• k¥X‹=X†ýY eX‡Ý‘ØÖ_—¸q¸w Ó˜‚ž5W¥eZ§5~(” ~ˆjÍØíXmmÿ0Ù’Õٓ凢ÅV±å’(ˆZ”hÙ~}[n=Zo¥Ûiµ[pÙ¶ÕV½-×pÅ[¿EZ—è[œÅÖ›•V¨µÖ }\ȥסU[m]{¸¨‚{Ø‚ Áu‰Æ5WÍå\Ï30o€ @‡yàÚiõZpåXq-[’•ÖÅå¢\¸ ùWÿÂÅVËÅ\ný]ÓÞp½Ýl5ÞÄ%^kUÞÄíVä}ÚÝm•È­^ëܵu )ðzh3à\0—^˜ÖÐ-Wòå3†i˜-È…xàZ/ ‡zˆ`¸ cÑX €†bX€ÁØ…ux‡a jõ†\0‡yH† ˆÛÞ­ ”°ÖE[— ]Óˆi m  žÖÜE‰u—(ƒgž žth‡|@tX…¸¥n¸‡hXàjuZ8†tpÿàc¨Ø\”àabVavák _”¨sr`…w †¸½…h@‡€"^á_ñÍÜ&~â(F `&` Æ`ÿ ~à6ù­ßûåb—‡aÐq0† p Æa!f‡F "Ùšu‰1àÖ^îõ^,Na-Fâ Pxo`8Vcæ’<Îáîa?⨠b+^àÀ‡@ ȘV&vb(–b>æä?€3Î`´-ä2–^ǵ^]Zì5 $¸‡+X€h—Ø€z(1Þ+0ßéW Pfõ•†/€h8‚ø.@‚Xrh… q† Ð_(”0i P†_¨VoX°ižÓ¸Y v n h‚{Ø`ií`0V0cP—¸Yâ݆s¢qèŽ'Œÿ8g°€o¦h‹Æh—`^j5fdÎÜu€i@Œ{¨‡ P€iphðh^â‘.i 8é€>çt^gÈç}îçzÞàlÞæn6˜F p (€dØ<†h‰Öè‹Îh” YÓ0gtVg”øå`æŽÞÝY P%à¢>f.¹Ygpj‹†jŽNé•ni–ÀZXi Ö*˜i“Féc¨è¨F žæg´µêœÆeŸÝeÃVØ^v `(†i…E‰à‡±m•ó×Èžl”X_ @r€k6WX† á†oèb¸~é#˜v–” z˜gcI†Ÿæ’{€œÀÜeðçÿVh1hx†Yu`‚ƒöç„ÎhZ`ì–g—P|ˆhƒqè–nêîjÓ° È  —pl—¨m€`ðæt@æm0h˜æ~éfï%ïò€óFmÕfíÜF‰Ý®mŒíï~l£vè)pr—X_ÈÁ½fµ` ·¸~@x dØ‹¾ø‹À(àÏ5~âo¡íÿã¶m³j»@‰¼°V€&‚w pè¸ÿE „ÞÝ2·VgjÜöÌ­xÀmYâAG‰ßE’™hOr"_âñ  Þ¥gDŸ^GïHwá° èòsð ¨ ümó3w‰)o‹ã!7 pƒ¬Ör€>7ôƒä-ç ¿ Áøñ ß]Â0 Ä äV?k®u—¸õCßóÁ°‡"8zÀ_~à‡\€tg™ô ôA'u6×Y.ïõ/w—$G‰OwÉu ”hðV9ƒ1oÐf>×zfÓˆßix‘ †i˜1lõ×*'ÿ1s<÷gà²F‰ÑrcàmÜ¥\”1ˆfƒyŸx.‚vàg§Vg@âwñ·n˜Wp@yÓÐþر•wÓØŠm§ô•·y.áyMÿù#8x.ÉørÞà•íwx” ú8Ž…&p”hùŸyŸj]Gz.÷“Oyi ’ïú’ßð«wy™ÇnßÅp`”é4\UÞtn÷ðìVú€ÖY¯§ìsu|xíqøe+X¸”w˜.¡¹€è]s?WÈ×É—'w‰ø½–lÙ¨÷Ú 0‡…GuavV‡w–F–‡e´€xÅw mè ÿŽ7 wovH0`‡…7yÓe-—m¸gyµ€dàëqpq~èG ãw TQ•TaÆwü¢—t o`‰¯~—Øþž·{J7ýu!æÛ€Ügz ö|má–Åo|.wg_Àãåoþž~®KV¢@ ,‘ܳ²€Ã•3ð±(`ÊŒÊù(ÁÝ‹oél•ÈdÎ,¬çJà¶0_%èÄÝ;&"EV™&àJtG¨déR 6VZÐ+IÐ B…§°Û)2Ö¬Z·ríêõ+ذ\ý‘-kölGøµ9Å=wgŠ g5Ë8|îhY¤jõ/`‘xõò5#ÿÍb¼(Ęãö,´™Î¹E€…\êê› Ø®róŽ]øÂ¹gÄj ئŽ^=uã,VYg¯–iiߢ1s xmÛgÞ)`ÁO Ì×±gÌåŽ]+˜2Ð ,à¤ÈÇàµÓ5A vîÞ-:‡¸.OŸ@m=½zóçÑÛ¥­>èÐÌ›;çÞÝ;9l²ÑÕØc‘Ñ·8¸œ3ZiagQxÝ}7PùX¤gž]—\äÉ'ÐèÄ¥ËtÕg‘k2wJn'¡t3±&Ð9çX×ÓOø áx¼ oNaÈßTU&’I*¹$Vh9Y–@Äs_€-NDÖ ” :+jÿù%˜aŠ9&™cJIe™iª¹æ•Y®)R›o²‰%‚]ÈyÄ=rZ§ž`J3_Ÿcré¥ULz¨¡O>)æ ¬((¤‘J:)¥•–Ùè£bj©u›ŠŽo²â §žr*÷TtꚈºúêWŠ:É*­µÚz+®¹êú%¨kvsÏ9Jì:i7òL7¬–°*»¬¬h!û,´ÑJ;-µÕZ{-¶5»mZÙzû-¸áŠ;.¹åþÅíYk­s YZ˜&3ïù-I¡³?˜+R½dª{Ë—ý­ï©Àazó…˜ ß›ï_ Ûê0¾ú,ÄZ¢kpP ÔýÌ@Äðs²Åùÿéâܳ¤Mý ^äl¸¾à}Î"Ë£Gób½×Å{¶w×»ß!qxÅ;^òóÄ( @„$|aöÐxÅíuï{%$Ÿ•ˆC¸~òãÚY¾¦¨Ì¹k'¨GB7º•éÉû°ÂNޱ’–D§6˜F1,p`q(@2va‰EÎÒ”ñ‹À0ä Ti”F®ã‘‘œ¤#ÿ!)IJr X9æ³pT@ÓPЏ! 4áN™…4( %pÀ:z€1€)c¨b$ÁLÎ1ƒŒCšV‡%1©IÔò–¹6[£MnzsRΈ‡0³‚,rºä¥/É2d‡qa+e9Iz®R Â$¦1âIPŠÒ" äÒÖ! HcAƒƺµƒsjH)O™Êz²Ò•³¬ä%3¹IZd¡¡%`BŠÊi’ôu}¥b‰SrÚ—÷ìå/ :ÌŽ ™Êd&/ç¯ÉŠ”éÜ@`1AFrZ?ffà#žÃlª  #:é$8€9ÿw¬”fk»? z„yÅ W½ Ö×µ¬8«XÉjVˆäË€I50‹»š€ˆ[†SdŽ"dÊ™õ£K3ðŒY@:ɨÏÚ¶ùÐ⮀I«ÊØ*âS´¤½kâ!ÛÙjUNΰè@ò*½¶&±‹Õž8B-&°~=«n¿:›Æ>¶$p•+]£:Õ¥ÉB T ÇEg„3– „¹¬E¤j»âµ«» k_‹Eµª´O{k\2׺š6·æU._û×"W½amo‹ÊXÇ~7²“­ì¹–j9¥>É©¨H, &XEt b[ ¸ŠH‹x÷uðxÝ}Ø3pÿ€a!ú(€5Ýš2"ðãæ0Ç9âF«Dã"ép>Œ£õeÇ:zB4Ò¡yìÏ=2z0?À'€]Éå G$-áG7Lp¹·µD{vTb áIJ‰ìå¾Ù-x3œih[@ Ç62uXc{áôP²¤q²\ÄÇ"¶3’•Ìd*·øÅ1£„)<oÐÍüp]µËɵ!ÉYt'l‘ߘÀqŽDŒÅ1—Å]ãXìbË0¤æ°©sŒjÁÐíAó‹œéDºÉOŽr‚Œ9¶xìÁPÀ|b•(àÁV•Ó7tQ^½†5ÿÄíG,b…önW$"àG3²€‰¼[½ï^}Ýko÷Уba a—€«2Fð\`çåí²(€<Æ fŒAÚ¯Úñå#Ÿ6Üüc«½ñ-}$âÏóbè!ò‘×öMHry;l ¹ YqéòÙôûß%Y·U¢-oTWT‡@¢AäBÓÁ;wºPs…úFçã­/ÊáÝíTÛâãn«E>œÉÝöåö®ñ#ïŒç{ß`Vº¿™.Ü*•ÓcS™-6g[ä#!é8^`b€Ã-¥[î}L§(-y‰¼±(Ñ hÃXHÞᦧ$!¤ÿlÈC²dø£È[ÞØÇ v„³S<)KiŠÊ2²/HÙ"Í`GÀÀŽž?|"óÃ3F¿¹øÆ—ô¢7lÏf_Æ?þ„  ˜[dù;q¾EN.Í¿÷3ºIN“xê#E)LqJA*/»ï\•Lyq µ¤Ãè"‰üäMÿ}€D$ qD¦_OÄÓ[ñ2`¼ã¥˜EÀŸE„_T\þiÞþ…ˆyžï…ÀèeW÷žS`„F”ë ô ÀÛÁ]ƒÉ]·@Ø@ ‡EÐ@4̃=tƒø]¤ ÌìÈ‹ŒGâ%È‚€,mØn`†fdˆu¼E\x|Gçõc8dHÿ É@ˆŒ—ÑÏ”Aqr´†rH|˜‡õ-‚0È€ !ð @yèÒÙY;L×@¤áN°aôµÈ@ ¡Òˆh_ÿÉáú‡ô ‘ E€†hØ  †j°FŠàà@ÔÆmôG˜ˆUa‡À xaÿÑ b¡Šäà"òà~hÈ_@¢Æ %Rݼ‘âbHva6¢Šˆ;ˆE¸!n Yœ -Ìžœ €É LK¯ «Øb®ü"0jÉŸä Ÿ ã.B 1ã¤Ðâ¢Ĩ „©˜K3:#6bQ¨dc…©J®Tã­€£ž\#7ê 4Îʯ‹3’c9 ;rc±øM;ÚÿÊ;ªÉ+Ü#>¾Ý\Ì9:K­ô#@¤@$A¤A$B&¤B.$C6¤C>$DF¤D ä²T¤E^$FÀDn$Gv¤G~$H†¤Hd…$d¼°C³d¤J®$K‚ÅH¾$LƤLÎ$M‚¤åœÈ($U¤dKö¤OfdM¥P%QeP*ÛC’Oþ$S6%¢%TF¥TN%Uö£–Åæ¬C>˜EÅ …IYlƒøÀ”줬8¥Z®%’T¥[¾%\ÆeM2ÕREI–…Q-…*1RYàÓ/uËÊ( [¦aj…\&¦b.&c*ä‚1YÜ%YHe•ÅÌ•…*Åb%J¦ÿåa~æZ6¦hŽ&i–&Z eYH¦?X€“A™øs‘EŽ5‹Rz&hÞæOš¦nî&oºåMš…j–ÛùC^‘XÑ&Z&n.gKö¦s>'tÆ$jFæV–…®^GPßX†Y¼‚YÔ¦r2§xbdt–§yž'Hªæ¾âÅngGx'g.åxÖ§² '~æ§~&$žl åtË@”E/΢“اÂÊ~&¨‚.(·ŒŠG(„ ƒN(…*h:*ÁƒF¨†&I…v¨‡~脊ÄPÎ#‰–(²€(Ц¨Š*¤‰rÊŠúÿ”ÅÃ`ÀYœ$T(Z\êhYðèG'Gú¨Q i@ÆŒîÿË‘ZÊ‹fY@ Z &B D³Ã1Ð"Žž‘*ÊÈøc³ Í“li@ ©Ì ‹@€©Aæ$@þ 4š©?ŒéLJéwr`–ú#›žE`D¹àé_¤S˜,)6i¾Ø)”ä•> •Z)œbi0pËáp©¬x)Z4*4®@ €¤Š¤@£–MQ&êÜÍ©^ª?þ…žŠK©îŸ‚‰Ÿ¶ÀY8éw&çAzª¡VéY„%Y°Q‘…-ê¶|ŽlVQõŒeY–?LP Ð*œ…¯úƒ‘…‘®¦Ï‘Å™®~²CYdï”yùƒ­úCVV§³~ò”Å™A±R²’EWÊÿO¶–EµšÅ·~Ј« µŽ°šÐ+>”Y¬ ‘…?ÅiYèTÓþl+íPmÖ~ÒKQmÈ ™Ýÿƒ)ͬNØþT> Ä4 Ã0DðØçŠM”ã8¥Ô8 OÔÀíš „í&Ìþ©ÌªÇ æÍÞl4hZt Yðl€^&€lšd­Î „xq`í—Óf¦?l&YLmYHUãjƒ?”•?œÕs‘Å\•Es™¨2o÷:ƒY¤Y¬•·âVÔ9qŽCÛ¾‹?”¯?œ¯xEhª?Pf¦ˆÍôŠM¿ø-ý§Ô¥oíŠY ãÊ&øŠ/r5p‡=/ÿžo»x¯æðÉþ€mãâ$Cê>ݶW~Z±×GI| À|e*Ð<—|E—ð¦hÌÎl»$'ÒF¯¬Fÿ£ràή_€ÚY‘ùC§Q@G0ô"1fˆZ¡Ñ›Ór§?ÐDYpïjNXãÒ›¬9šŒe®¢y­?©?CYDÚû‚Y´šƒDGYÄ&³ÂCþJiÓZòÜ€ 0kÛkvD¤q×qñ2ñˈ³ò™ŸI1Y?ä‚lNƒ?…?Gq±‘k£ù±!‹±æÞšŠYDK '/Ù „)wW®éX%²š™Ñî@ôñ£á°Eàr­õ0ŠÆ,Ò jg¯ñªæz*o•&o“ÝÆAƒ?ÔÜÛòj2 „Óe1)nqw&CYxÜYD›YÈÛº…À~eÖª±’?è[YèÜûÆÿµºCZ`‡evÕýî1Žsñþ¯i¨ÇÁé@ gG€3";Å<á(oLlsY´ÜËU16óÚe.4-ª>³OЦ „Ö „3s\ö[ ·²@ˆðÌ1`Õ‰[{u´Zð»íÄ?«›Kɪžü s³Í1û'2[ñ,2L€PO@øƒv~^èA 4+_Ô~ŸØ3ù%¢/ts3YØžYØ]8k±&DG$…Ì6…úz-RûƒR“ù½ïîù‚ß"´Qï>ó%Txõæ& DP„Î^'¢5Hìsß:H²š…vjsU—ö1D£ô¼µQ¸YÈŸXûì\Ó­?¤õY,”Üÿ_æAžä RÿžNƒ0,€ØI×õfÅÎàZsöäuµT^l¿¬óîÒÞÆ|B´N“)ñþg1,˜ý¾ç)Š!#öÆS証¶—E’E]œEsÉÅèáXf!þúÈt×Çû~!ix«[¿gZ¸íjòáu« ‡xb‚ˆ+’Hx?µÓrw[ã(zgšYÔˆ£2+&k²P˜µ(b72,{‡w§áï¾·&îàw§âÊý=lC10ß':¸$ÂÈ ’÷…ÙÔ&Z·‡p¡ˆënŠÚâ¶ Jœö¬1óŠ11SιجOûC2ò­ˆâ¬ˆ¶‰@æ¸Ç4Ë“¨øÿ§Žç"ŽkKô(q€òxñ*ù‘qÏÚ·YüÉÿx³]i‹ŸŸÐæ©,XJ=žÊ‹Âd'ä‘+ ¦$䚳虛E›¿o¤ƒ:dœÏ ñnŒ1§Š9Çjž;‰©ó¤A € Àƒ°Tʘ»h™ä›ûù”Ëå–sËä…~d2Ÿc¡Æ£›ëù¤Cy P:Ä:ŒY>âã>®É¢+i£ïæF冯º¬‡E«×º­Kä¬çº®7É­¯hŒ6‹¾%˜=¸¯Tî:²'»²/{®ŸcÌ* ¬nä4œŒú4@BÃáN%³o;·w»·«¥³ãö“DûDNC-œÒ/ÐC!C£9PÿAU~;¼Ç»¼Ïû’„;«nkÉv«u3GNC•È?,¶?Ük¸¦lG:è:€Îj¢ëº|¾¼Ó뿒źžë½&½W†'½<ȇ<·Ûûûší.˜¹K¤¿'t,ÜCÅÿíj .Üv :PÎÎë·¾ëåÇáû¸Å3Êóûð¶KŒ3ùÞ_éÊçùIpŒKÏJæÃèL+7‹tË8ã(ûyé>×Y…@û´@¼¾õ_?öshGôöÎ>8¬õíóô§y¦ÿçïŸEð›lCIñK¶ø´ñ®#öácDüd§Þz¨ @öD 4xaB… 6tøbD‰)V´xcCþtô¸dHøµ ×¹yÇ.„œÂNdLŽ7 ˜ióæÌœ =âœF‹fHg«DZÈ¥®Þ¹35 £BS€Q¤J=Í)5ÿéRÛÂØ|•¬æoôÜ-z4kÇ1èÈêZp³§€ŒséÖµ{o^½{ùöõ«.N™/Ä;G $¸.2“¡78d\›’qB *™gOÈ'c¦Ì¹r\¦‚GülšrÏ¿«Y·vývlÙKo†¬ØvnÑœ™îÄ\š´LÑAÿ}¥ä±7ý~ô“ÐB =”Jâ”4OD}ÒH/TÔMI-½ÓLczñÎ:ûÔPEM”RM-UÓTU]ÕBNwòtÔXe•ÉHa×\uýޤunÉ™w`nÖbA½%PkëÖ]}öY’L"6®—D‚cµm≸°íiYp¡—\U¥e35kCýVÛv{b·£p=j¶ÜzíuôÜšD`†žp€q¦'ÿu›vòAU:âÀas‘àÓ}ûý·#®:úª#+Й'ÙŽ6a…å÷Þ’Mî3_Ž’Q†"äØ#?…·£cœ±`…qZùtå–_®¸+0öYo³×Ö“•^úÍ”À‡‰Ž(ŽùhPi~Ú‰ŽÂǹ§£`j‹…N¦§¢ß­Z€‘Ófší¶¹LÙ~dè(˜;’Ù9šãž[€*àqnoºa{èŽÌöˆfµéu›ñÆLy|¾žún´ƒ¢ž°ÖšëÔ"ŸæhÈè(²‰îØ#ÌÁMÚñÖ]×1e”a¹†Ÿ©u|Xè)™›svåÓÙ)¨f^ŽƒtL7uÿuGšÙ×¥Ÿ^ÆØKp¦ß_ìoçrq‡áxÚÑe‚O¯Ïæ¼!çbLßFzêQ§sÒÁßYqêýÿ¿D…9 pZa·ÆäÏ]±*`ãÅ:>‚ŠËØ. &°Ôà[Õ“ V°XlשNÅAž…)Tá YØB¾†1<Ù‚hXCùÈÐO6Ôá̓Ã>ñˆAœù$D#‘6DÔ™ØD»(q‰N”â'E:Q‹Y\ˆç¤E/~Q \”ɈE1Æ©Œitâá¤F7‘PêÀéXG;ÞyÔãùØG?þä YHC‘‰Täÿ"ÙHG>’‘”ä$)YIK^ò*P©INb”¡å(IYJSž•©Tå! Ìq˜¥XéÊUF2³èE ê˜Ë]r P¨d°€Ê`B2 ^P¥/yYGbÞštlA/Œ0G)Ðb!+dq†jÒ± J¸c8¹‡=Ôq²”¥!.¹‡I|R† %ÎÉÈV¾²@ˆ'&hÙÇXö³Ž÷\$dY Iì“BPç$ „:šÓ‘,Ð,ìƒ_ÖÑ¢Íìã`‚:VA%‘`\ð¢Ž%=©]p ˜’£#zQÓšjtɤd°éÇŒ²Ô¥Ñ„æ4¿ÿyÍ=n 2èjñÒ-4¡ K˜BæøÔ¨NU‘*0„̹vvÀœ˜ g=)©JôS–°„! ! JþÓp$A'±J`✠5DXÙ©U®šó«Š|‚+tQŒ^”Ž?õ㨠NZ,áDPª…) ”Ž•½ìÁPÌR2¶ŽXP… Hk‚Cêt’<ý£bëØY¡Þ’¨ÖìéÏÐ…ÌÊBtìB:P‚)È¢N©o+ÜEÆS­{pèA€ ·Ò‘ {'-àκâsô4¨CcYO¹Âr)˜c+ë¹ÜêNâº`eh] 8w•h(,Õ‰Oú¬’¨%æ«Pÿu:—¾²´ïyÓÛìÆWËÅctói J¤@¡õœD%æˆ\K(—‘bÀB®pXœv€µ{4.FJÇYLÀlU|Ç(¸¢”#.ñLUqGUHaŽWÃU‘…2Ä¢ Í”IÏðevàŹ°EJÐ'À¢®¨B-¾0Çlaµð xìc ór¹äE,bÑØ$/¹És ñ_üÚUƶF¥#-È@G.Pɯ`…¬Ð"„á dèÂdÿèA+î¤CÚÜçΑ ˜Øë„C\¸»sLgXÏ©ƒv ‹þ$¨ëJGJXB¼t´4¦ñ V¼V¢®ü|/^÷` I$ÿTé´¯«ñkN®^‚úì®Кk[v`ÕœÖ4­[Gw •úÄ«>å‹lE3z‘%ÈŨРW±{$B/r;Çô¤´ø‚ úØb;º»ŽDà…iG9îrÓØÆ8yÜŠ„à }î€*¼P#èâÈQ(‚bàŠ>;a%(²D_Ð0˜á+ƒmîo€ ¼ª­£ÂîðĆ{Žò¦·›O g9ãñ G ,`°‚€ÇùáœÁ¬™s%ì\‘)P®¯Éêè:ÒuÔž£$l9a÷Jš¾Ò&+XÌ\±ÚQé`º b©‚ƒ*Tï¥'£MGÒñ»x¥{%a‰O¦}¼ÿÇÎúÖ \‰§öŽÏn%±ÿ›`PÒS?¤rQôb'ÿðšó˜„\Ôq½8à \Päv¯˜Žð¦£ zR:ÞŽXà…-HÏñçxÇo,ÀÐs'¾c8r¯0'Ÿ¡^è³,jÀ‚^ÖÏ·àñê[?G‘ã±öŠ¿#ç=ÏòSú¾¨³Ðc+v^åTäN˜1µoG3ÔT †¤´]¨Ó1ë±thvÕ~þ«_Õ¥65ªë˜~LTו%hØÌk³û¾TÍ.AR î Mîš þØï½ðÎŽôîþôŠ«Ð˾ƑÀ Î:` ÄPŽñð¨xA¦:Ð æè ÿfK4oŽT°j V€”Bp; X!nÝNßøMQÏÏz!ͶàÈŽ  dAn¡ n¯º€ªb\ð`A mOoßR/äP°ˆÐ‘PùìÈaÐùL)xᛦÆòè Š€`¡D  @î”ÊÒߚîðü@½(áÑ:@(a×È Ò]©ëôOÖÄJ¼Ê.îví»Jˆ- Ÿîèìæ®é(¡ýðè  Âð!IntAxèèÜrÐ{÷ˆxè(p¡;à/ïŽXð b¡”jñéH´î¨ 𬴠õ¬ßÎí¥ÿ,N™J@ À£® ÷˜°œpš¢±Žœ ‘@ú舭qß’ÐÜdñŽ‚q Q‰Ö-Î`ö: ¶è( ¨JËÀ ”ñ”Âj¬êï’-Ó Œíd©è ëÔŠ­ÜŠ [-•k-–n ŒҖKiI¯ô‰S­#AñJ€ "%ì í0ï0½ZM¯Ìé®Ì‘”€*n©x¡ùB x®ŽxÒ'ûÈ ü1÷ÎÀZÀòèÈ 8°BÀœ`ÞÒÌ)¡ÒÒlŽº` Li(C«Æìh v¬d¡w0õ΀ªb”ÉlÑõ`!·± GJ ÄàB@|Réhÿv×ò_À-q±'ï+ßñ”f  pÁ¾§èŒŽfnU)Ô髞 ºìªÀô0°ÊìK*&+Lžè Ò0s^i"÷j¿jÖþ«Ÿí®81Ѭç(ä À^S¨Ë4±k%=ÑüÄê J JðÉ Ô±)iÁ!.² Ž S:ù¨ Z‘ŽX p¡À`]÷èH lªpaŽÆÓ¦ÌsŽLÀŠ‘”®“+—o\ ¾`,}°†ŒÊ€ Žl ^Aøñ-—0.;€´@rá+/éH hî?t9§s¢“ŽØÓ= ÓùºÍB@>ŒCIÿÖ* ’‘VsDW4‘Î` ú¨ƒrª€ãLÉEYt‘hG È@fAßv”T`ŸŠëB3‘TTH—ÔX 2ñÈXaéVnŸ”I©J³Ô‘,… *a4d5ãˆLdŽÊMÓÔB:„ÚÔMßNãt„H¨TÞÈNït5äTO÷45 àMýPùÔ]è´NñQÕ.äòÀQm€P÷Ô ò :¢QÕ]&µR#U[ •TCµ"fÅÔ Ü@ µOqÀTUÕXLDÅ&5ÔÀM5µ#€UóÀU?V%W+¨õTqÀÀˆU75VTÛsã2U®¼;1ïFcOM ”â^;3‚õôB®^<`n» ]´ V_H3k §À‰þbL£§Ø\VÐÍ›‹uƒ2xò¼ùõn˜6qÆ.ä`ì»\ü ÿp]úC »Ö½fA~4$Î@×.:t« :£u,;´É-ÑlµÝön¼1'À÷‘pÄ÷P€ Ž÷\t~ Àšk°=äM.æÌ“ nyzê±ãü…Ä=W,©)Æ ¬@N+²…SÓ°"Ð4ÃLð¢oâMÄ04qÏq%Ð,ÒP €Î8Ì.ãŒ+ŒÃ£TZ‰åCÆH‚Êü"@ç<E{Q&‘3ñ8!™EU¸@²ò‘F> Ñü,Ñ’M*hDi^ÉÁC7渣‡ëÈ`4Ã@d"›nÂ)'DFì3Dì8ƒ‘?ÀÿVj½²Œl˜¡YŒ?%ð#ƒ@É—$A&øúÐ2ÂÆœ@²„S„#¤?S¸ãø8!Pãˆ×ì³]ÀO1ÏC&ä‚>˸ÖZ{†:‘fÛä:‹¬½ÊðP°IaODÅê+²iöm\ÙêahTÐ#jUˆK®æ>ÈÏ MsªEþDóʬåEÐѤ£Ž<ÏÈÆC¯$ãOüÄæÏ.‚ 3ÑlU”Ëúc-åÐSŒZ‚!ú°@UÀ#ÞÏA-üœcŽ9çăg‰ÌHóîDδ"×€+ в7ç¬`û ŒvÌj\!ÔBãI²É({(ÆCFðÿ#A‰Sm5ÖZCDu¢ÅªØo"ð“¥@Ü£´±@£2Ë.ç ¬o… Ôk†½%)€”¿ à‚9¨Q‹@VX‹­¶þp+ºé¨ €?&\DE<AÑØùÍ+hÙg绯‚àSDŸ³Y¡fn†‘O.@å ?D…<5~éC·çNè¸x ppÅo¼³þvûÌàOèXîÏ6+ûÓ²xÓ³€öàÜâÄ£ Cµ€8‘ é¦0ƒt ^ÐR§.  _kLer…xè@>äÉ(Ab€…‡ø¢xÁ3ž‘à#Cú žDèE¼dʬ4È‘ à€Ï«ÿè÷ÄOôƒ†‡Ôá)il¬}WˆEHˆüBaÅ42…Ҹ㠢«Â:ìQ ˆÁÜxF0ì‡?«ìÏÚF1€Q:À@7߈3¸ uУêè–?Æ€z¸C Ð.Î1chg~Ç€G;t1ñÒˆÜa ñ=$î`‡Øâ >¤ ä+kx ÝÈ©B8"‚G=2–€l‘.yHG àŒi\£‡pQŽF^ —c¬…&9éIˆP@3˜È8¦±‘¨€Ì0Ä€…aŽ.\¥2èœH83F…tº"«ðÅD.€(¶Ä›ã4B ü!Cx(aœ )ç9ßÉ}  ŸJˆHDPtš`U©Â7 ð*€"„ êˆ:Œ¦¿Wxô£b°¨@ ÓP–`T£`(©JW!ù®þ,Pÿý H° ¿*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç ŠI²¤É“(Sª\ɲ¥Ë—0c–I³¦Í›8sêÜɳgB™@ƒ J´¨Ñ£}*]Ê´©Ó§P5"JµªÕ«XFÝʵ«×¯`fK¶¬Y³aÓª]˶íųpãÊÛÒ­Ý»xóB¥Ë·¯ß¸z L8äßÈ-̸±ãÁŠ#Kžœò±å˘¿RÞÌysæÏ CïìLºô_ѨS«Æhºµë³«cËžðµíÛUiëÞý·ïßBy ^¸ñã,‰+_n¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨a_Ìuèá‡7Å'Àˆ|hâ‰(R$"‰F±¨RŠ0ÆãvzaP%9 ÇŽzøÐ¢ÉÉ(äËiçƒtd’$-‰À‘åbeDViålבØ#þŒ(À–yé¥@Aè1¢ŽQêÈc”þvydzD)Àœz80ž6v)&W*hhYÞ‰$—#.‰èŸÕ(€e"ð¨ P¦@Gú`¨œyª)i¦OêA@›y¶É柀ªêªŒºå¢¯†ÿ)¦@ðX£žcnêOA$ª‡?µj*@™Ûe­zºéè±H"«ÐF‹W–Š"Z­¬³¢ùÀ¥œÚÚ¨ÃþꦤÃöŠ'zîºcL:›ª´ðÆ«™u¼Êe½Âr‰-Gv©£žPv‰c­vâxäˆÁ ä˜é§»É+ñÄN]w$ _Ì0ª»ö:¢£Äêã¸\g’¥:L€”úÃ2À¥ú)kÄ×lsNÖ%<¦±3ꨯòX&Ì\ÖIæºHbjk”n®Ùì¢4ß,õÔYw±’¢Æ´¨¾%õÕ`‡m‘ÕéäCÙ/q<’iöœØpÇÍÐ}j‹„gœ_Ë­wÜîíÿí÷ß]9‡êà„>冈'áŒ3®øã×ø—‹ùóà‘g®ykWë¥çuo.úè‰5n¯—§‡Núê¬ÇÅ8膒Kxë´×Nã©™ïì¶÷îûQ†Ã»ê¿o|K…ãû§òŽïüó(®±˜ÓýõØD¸Î^ro}öàCOxõ¾bÜxøè?¾¨ž=9×éÇOûûô3,ÿý¬×¯ÿþü÷O<þÄŸhH@ŨéWˆ`XÄ&q›U¼$Ð0ð‚AYÖ˜$3ƒèˆƒA™Axåbð„.‘ ATØÁpGl›ü‘©uùCh0tÙÒŽf«²Ej&„B¡ÿ£»E)ÊOŒ ÷T'ëhËZY° ä6–UŠ[À2Úø41™pˆ`ÉÇ„%«XÍìFx»¡°Ü”®Ë­cjÄI¦=øåJ_ £ýt-N‘ëi"Ñ"©Øg(óIi»ò‘ÑÎÅE šdJyÜ#€¯VÒE‡ä@Æ5" €ú"ažÜDC-Bp‰'d%©ÇBvðj˜„_) ¢¬P=€_f²¥Ô/nej d"ÚZµÌ°rÞË"¸b ?T*mG„„c÷êÔKphLÜÑ ÍTG‚Dò˜'$_)Í7%¦D–]ÊáTiAp‚ñl§q¾éÎzÞ†žö̧t’Xÿ:ÿùóŸ ¨@ªÏ‚VH,ý‹±²P—°YX¼aáòPòÈ* uZA"š%i$SH±‚Є åc}ZaJKâL2­”…ßr䷴ײ†%-‚#íÑÁR‰N˜Æñ%2%I¹ òÁxÎ02E%JPƒ:’u¢³©c*©Ieâ+–Òªv‹™0G¸Ò˜rQ Ií"ÖPÒR5îô‘² +Xo*Tsº4%G&S­‚9—Ì5&ÿ"ªVKâÔ§ÄER*LƈF”ø¦>èªY¹øBSBs£]ÅSًƳ6I£mÛKiÃnŬL=Ä©AZŠ®M¾I…’eI]ÛZ-Ê«fC ›¢„C£ÿ¹ ´iD“^ªZ¿vS ,òŠ(«#"Q„yµ)Ú欳±lQ¼r—Ž˜å'3‚ –k®žÛµ&F´¬Îd£©8åƒP1‹`©Lî G:]ýÒk×ÍÄ0׳µÁOJ”œˆÀ1²(º›šbÜöޯζ &H9íH"j¥!ÂÕšîH„:27c_UׂÖ3ú׈Üô²H¤³s˜ÂÿæµzØ4*‹º%ŽMbYZí•ScZb¿bŒ+¨9Ža!cÑ«Ä[¬< YX—ÒQ¹t×1_ÅÖªT°,3É`¨ê+¸^I”ùx(Ž£êÒ'·Ö³:5³W²3g{8¢1ϪÿÊ´4²+5CÔÝò¿ëÒ¯­[Jß*1Ħ堗œ)ÁK1²Tó]˜¢ë*A‰wœmî²?êÅ&ƒ™ ¤7¤-’¿ f0SyÊ™¬#`!œe—(¯Y—ôòh])›ÙÇÎ%×éd÷róŽ_ºó›C-1£òÑ~’5×Öç3‘¬hŽ­”™lãJÛ謓Š/,ÂÓ‘ŠIžÜ”£œ°èŽòWè½aJаÜñóÓ~FâƒçVê–h¬Y°TõX±¶á ÃZ_ÙÕÁ@üG•ÑÐNÞµ_k0D>-ß“‚™žTfE`*v$5¾ª‚÷i&U±G+«i¢ƨ\Õ '¸ÑªJ"Ýb³GãÿêQ›µâŠªyg"ocÞàbþ¤Ý+ÑÙ@’©n½Rw­?ÿðÌ6`\Ú*_L×¹nojû6µJ\i'+÷ÉÍ®Yx:ÉtõúXFjÊkº½ú©í§2*‰bz!“$‹¨¤O´Ä"ØÁHد ± ؽ6ò_›Ùò?ÿ\]o!–ë Pò’~õ"¤—ª¢´~޼äëÇøÉ[þòï˹1ÿ'ÀæòîûSè-ïƒÝq~|¦?½êWÏúÖ»~ržÿÌëgOûÚÛþö¸Ï}ãbŸÝŽ÷À¾l|*áÿø²'¾‘ÏüæfõnDiáœOýêÛEõÂëòï­Ïýî{EõšOýÿò½Oþò/åôÙ—ÝöÍÏþößäôágœûçOÿŽp>ýò¯¿þ÷?Ì3oñ›7~ü7€ˆ˜gx†·~¸€úwyÞSdâW| 8ôz/G=˜¸æzŠ÷9h88‚ä§|H‚(Ø|¼ƒs,„C 0ƒ0ׂöô‚¨B ¾áV@g°p‰ |•nG¸ Æk¼ÖEHØ„ëÀð· c±`q…X…tµ Z \8cè:\S†ØRµ Ëö'¤°ƒ=è…¿uaRfA8„.Ñq,R„~%‡$‘˜€ –0 { <%jP…VHHLŒ(-ÿ@…Wá‡þì 30Àü@Ó ÑO0‡{'aA‰²ä‰‰x‰Ï T@,a˜˜ë€ ‡‹Xsþðæ`ˆ[ˆ…aŠgA‰Ää‹uH ,à„bò†n‡µØa &‰ç¤‡ Çm€„H‹Oå…p¦ëôˆUHW‹HŠ$r‰DðepQ€VV&ŠŒàxŽüp3à«ØŠü€î ´¨„S² ª0h(À(‡™d l¸/ɇ¸QeIT„þ‹qˆÀˆ  ˆÐ‘é|°(‰‡þð‚€C ‘¹‘$)Їp}ÿ0„À’‡Ô¨6†°†0 †°@bB0"{°þ ’`A¹×¨”LÙ”†@ „˜.A9”E))p•AY•°“@ˆ @–”`) VÆ&mö3"Rà ôÐf&âÈ"^@õÀp–þ° · è Fé/ ôÐ ÆÀ‹#‰¹˜)° ëðÃ`þ0èÐù€è° þp‰40"À aè0Á@a{Ù—)‘Ù þ€… ˜„i˜ÁÆðì €–Êòà ÇÈ™ž š¢éªÉš.2—uy——( ½ ù˜a0"¯ Pæ äÀ ïÿ@ þàŠG0"à ñš~ ˜¸Y˜Ð%³9™þP™—™™ÂIœÆ&pF@10 ô  ÄК̹š­É%웩˜Œi ï©›À›¾ œùYœÇÙ™Ÿ𩉠ÏI—vI\0Èè%ʘŒÌ؆{(`‘)‡°C0‹À!’Að|ðñ,)„´2ŠÀAˆ)£4j£ ‰0£‰€‘0’| ‹À¢Ô&Pù ”Xš”°”M9 ”@ 0• U)@ _Y•Yº¥pºÙH U)” 0–wj @ÐnIL±DHpW°!€xI…,ÿÂH°+@­ Û ÓÀ @2 Ã0…ê˜IÄ©žz¼h Ò  ¿0ŠìÀ"¤9"_@Šv…ú¨‘:©þ ªŸÚ%•z©™ $Çà °〫³  JÀ¬Zo´Ê%…z¨‰:šü€ñp×¹ Ù)ÛÙë ÓP p"`ž çþà¨*©”j©˜Ê ¡«¤*Æà¨ªªq¬Éº¬qü0‹Á  M@ª³š Á®·:¯º« ¯™Ú%Á:¬Å $üª¬ÌÚ%æ¸(Ï*ÑŠ¨Š:F°€-ìà & ‘·ñŒ²Ä‡.Ú%‡ ðÿ)L:ðwwØ£‹ÐþŠ`¤þ0³5{³?ð³ð~°´|ТUjG\”TÙ%H)`*†à`: @ˆeY …xF`êVû¥L ˜W;˜” µ†Ve?a|Û·Ÿø–ÀP v”—²ô Ë@©ª€±Åà%À2 É`›Ó¸2$‘ëÀE0"G0\BŠñª€üP~ò±3c¸Œë¸#r¹·™¸0 ‚«øà$*²E .ººë"—ÄPÙšþ°þPÚ ÁÐ EàŠñðøð †È0ª˜é²ÿ»º•ë—›¹›++»Û»!ö /®8¾Ë ¹€º,¢º” ¹¼¸ ß¾´ë#‚»#²¾¾«h ¹hÂ+¸²ü°Ø2 ¿°²Ë‘ZX0{³0j¤p³+I¥UZ’7 ¤+)£1YÂŒ‘A€’*¼?½‚S{¥hë¥`*HI•Àµ^Ë”`{)@–$@0”“`§]zµ@€ „¦I, N, “œ ”vœiH™-ÅZlÅÄ ¯0¸ŒÊ%O é òŠØ $Ì[þ˜»@¿3Sü@@òÆþ@üpæ`çš9‰­ºüPš« Ë"c\ÆgÿìrLÇ`Ç·¹­ÝjþP¹Ý #b¶Pô ®Í*e¨ëÅÄË0`èP²šÆË› Í; ð « èp®(.0 êp]’Èfü @¢­±Æs\ÇXˆÇzÌÇ~\Ÿ›ÜÉìI°ºÈÈÃì<"¨ËË‹ÜÈ#bÇiÌ­¬¿#R˜,šÌÉž<"ŒDÏ $¢,Kx\)Á(JÁõfˆpR‹‘E«ÁL“)ìѳ# ´BK´0yÂí£> P´S»k]Ú%5œµ;l•ÝÃqëÀ¥@ B$g{Ãjëlë¶#½mû–þj¨b@0ÓKLÃÿ«="À@"pZ`ˆ± žªÌ¼ùK¾p,3”k¹Xˆü`Ií@¢{š‡ $;ÝÓþðÓâ‹Ô¼*ÉÜù¿·›»$âæp—áÔúâ% Ì5ŘÀÀŠþ d$¹ÀÊUàʰ,Ë´ÌçYÞ@ mÌÓ> ÔÀ¼ÊYMÔþ Ô”— Öd]ŸøPѸ,$“‰Ö [ÕÕp¹Ø̬ü¿<³ÂØ~âÔpY¿¼(Ã+KX€%:"'j¢)Z¢8«AЬ‘ÂÁ|0-ü³.ã£Tš£à9EjÂ7›-9A0F¥‡ðMË¢¸Ñ#½Ã°Û¨Ã_ÿ¶q;"t›p m™¦pJÃsê§F¼Ã P) s›Ýs˜ ú½ß'û–…j ÀW&ðW@"°÷è ØÊ˼¹* `öª"4 Ná¶y ÉPX°03€Ç(èèdÀŽSí Þ% Ô>á¾ÕÚÉä+¬Äê 13PP^0#^âꬰþðß>àÅ;º÷àÖ¼p €é@×v˳l®0÷` >ðâ”ÊÕóšá3îîá ¾ã=þãA>Ò@¡ šÚôªÛåøÚàc.ãûžÝ%É€ããà @Âã>äaÿ2äH.àñ ºÐE¬pò,Ûô,j,òƒ°‘¹»­ÏÐ}Ï~ð‘°Â(i#<É0¹Ï.ÃÁ`“ˆ06º“Íý“IDÑK $_–LéÝ< Þ@à%\ꔼ~ÄÙý•ky¶S\Ä-¦X¹‹ß2\7S@—îp²Rë`µ b`Üð ÁààjÌʈ©˜ÛP Àϲ‰îêN™¹ õpØî'¹àì0©—Èõ  SÀ"ê@õ $êßîãÞîôîëÉ5$!p ðкÐßc€ôຠ°#rïùN©?ðŸåÖŽíK¾ëàÖ/à äð Ä@å¯låyÿ}ž@â »`ðà.îäîÍ Ïðð.ïô.ŸñŸíáÀ"‰ù ÑÀ ûòïí9Ÿðç¾ðïÞÙ„ýåOñAìCïþÀñàñ¸º ïO¿ã%? ÷ˆ-ãàʰͲ¶áƒˆé–`E‘Óq¶½cA êz€ßVµh÷1øYøi?Xø#øbÔ„Ó@R"ŽŸøð³ ¾ e€÷Lß(|ÐÛAh£Ïr›`ëFÙ2JP­_ɰOøR2û¯û–ŠTÅø$ëúµÿŽ#añ)­/¹ß&ÐßÙþ Pé°}A0³‡À¼eÚ8 ’ ß¾ÿAêèÁü ä_þb€ßþfáýà/þ|á÷{ÿÁþêÏôïþý´ƒ2ƒ8Øÿ÷$XÐàA„ ð×ÐáCˆ.¤XÑâEŒ5näØÑãG!EŽ$YÒäI”)U’”ØÒ¡˜®¤YÓæMœ9uîäÙÓçÏ•.]ÆœÔèQ¤I•.eÚԩΆ1e õGtæS¬YµnåÚÕëׄQ¥RµêìY´iÕ®eÛ–`D˜B˺¥[×î]¼y=F;µå\½&\8kß²fÜØñcÈûý÷jdÌ™5o&Œ˜jUËf9&]ÚôÖÉdCŸfÝÚõk›ŸáZ…ÿ]ÛömÜeSÍÝÛ÷ïÖ»…'^Üxcá.q&gÞÜùsèÑ¥O§^ÝúuìÙµoçÞÝûwðC¥Ž'_ÞüyôéÕ¯gßÞýøðñåϧ_ßþ}üÜCWO¬øýpÀÿò3ð@TpAÇzh?þ(ó@ +´Ð¼=€°A;ôðCCLÍ»(Ø‘p6 ÷Hˆ=.tqÀö(@*Y,PDsÔqG›ƒÐ³—àÍAò*ñDˆ,¬±Å›|o Æ[òÆ«´òJ,´JÂýŠô‡cÞa'  ¦W’ñgtÚÉtV&¨Pæ ©ê¼½)ÕÛC)ƒb `‘Pÿ!€éOB÷x¦PôO`z Ñ=6Ho¥\‘I÷²4õTTSÍÎË ,K€cœ±`…qZ1³¡44Q5jqÇ›1,€©×_ƒEˆ V\P)CuÀS R@`(ÝêàÏb¤tÐ ø¦ öXE/FÆCVY©Øq&=Uëµ÷^|Q„°KøÀlj†Â‡ª#©R¢t`‘!¦ƒ^ØI))-¯ÜE£@P¨¦I+ U€ÉUqFõldoš_èÍwe–[îÑÁVQôÇ~dh¨ xÞU(*àYæ bêùç !¦Ñâ˜bätQ /4ÆLèXiÿN3µѨÏc÷B—»öúë…Œy2™üu&ІŒ†ryŠv|p+ž‰'˜'€n»ñÖÛhmaˆ)Þ¶iŒ©5c@ÅõÔ< EOܸûrÌ3·_“‘•VWâå0Hç¡ðaA5˜V`å(¤rö Ç=ZªM+¯€ÙÃÉ¥ôOtmŸtLh:ZvošÏåÓcå •5—~zê­û1¢ާ]&hèoÈy†5£ÊÅvl­lÝË–šXlÂÄ |¦ØüQŒ[È1—;ÜåC²øÏ<4$uÈ¢Ð^ÒaY´P&p#&àÓz:ÿèoJ«ËÓB¾tˆ fÛ,´—y0€l¤`ˆ×¢þ8D"ð€à À»CˆêI™ü`}ð]2›Í•sð?,"ræƒ(Š^‡f[Cu•_ÂHGš”ä™?h0^\áAY£_µ_õ2 a K§z·¡ ˜Ì¢kšPm ¶JGhwà㎠â+–VT @Õþ(AÍ`’ Â^€EÉæQY„£ Ê@ûªÌ¢ÈR2’cÀ >³ÈG7|+Hà2Ê™ò/²Ø6Äy8?zI[Ù$a¼nˆ˜_ꤺÿçíhLàì9áßdÆnÀ-“F|?€x”pÞôò¸*ì›?,Ї¼h2?0WûŽ­Bu¢e24 •šÇbE“š`”µ€¿:Ž@3)¸`ê¸@Cžt¨CÏë™r®¦"ðƒ0Ùa‰Às˜Ã爇°,`‹rСv¯e{ØÒO8{Úדnéê@²DJÀŽ,89ݦå„Ú]å+û#Ëö΃vc|Ôà!ˆ8„?(:fŒVª¢>…Äý0¤ƒ÷¹Îwþ·Ã>çç>„0îò—pœˆ=\ÿz¬ ©]¨ SJw¶ÜK|»ÿ[Þ²Js²–omK]ðÎW!ŸSXð-üA{hAo±«Vž«b? Ù¥ãÇâÚ+˜Ã d§jaAŽ W€\oúÕš¸ƒ è¸6e“1‹IŠfïP>ÌþÞx-9X(|ë%ÃÛ i`‡E‚>.†“¼@ >Š›3€{.óR®pŒ‚ëê¼àJ€•‚ ‚3¯Cø@C´kÞQ/‡¸¨Aôh x°&Ðxžú«'Ý›Öy(ø½V+ŸÑÓ)>à9äû9·‚‰)¸à€}˜t¨>œË†0{P±cH†(€À‚ÿ†˜‚(€(„ ¤Œñ1m»¬!€øƒ‰_Ð…  |Ê¿}Ò¡!’ˆÿC(‚‚­ƒ"¼”*‡‡øAÈ(t)ÏódìX_ $ iHƈ(Ä…´ è+îàƒ £W4•*€çèÈõ)¥í0Å“xPçÈÉFËðžÝxh`‡@j —|I{ ‚2+ÅØ‘ÊÊ&¡uˆt­ Ë ’J²,KýK´LKµ|³T7:²È9DYKº¬K»¼K¼ÌK½t‘8òÉcü {Jžl½,LÃúEP„@„3"AD4 D€2£IAP¸¾à#à D£:4\„ËëɃn  xèéÌL½|Ïë$‚(ƒ{ˆ‚¼|O÷§q*' &ó(Íï4‘´lìÄN”Ì&Õ xË¢¨E4(,ƒ­,ª7°Ùʃ;h(+¨;è8#Q44çR?X)1¢¨ -=™¢)Wt€ªð7Ç«¨>©æÊ©•„(©ÿšº©0õHãlˆ X)D„‚Ã(â(˜P)–Š¼Ò£)›B©óØ‚nhF™„IÐ!0[¼˜0„= ECxœ`THe ØD݃©³)ðzh3ˆ‰• º²+¼‚‰­êª¯‚‰¿ ¬ÁBW¬õ4,Äaa7“ã»N€ `ˆ˜Ø¬õ„‰S½«NÕX½¹½jU1!˜h¬ÇŠ,ÐÕ7‰“aªb…‰O ÕQU>ˆ+c­+dUÕf}e­ÕÃJ,€‡2©ˆi m †õ$VS5×T€uEWV}h“¢¡VÈ¢%låÕmå,©øVQý}µŒµÑÿ‚ÄQE+¥•9ø%ׂ-Ù·‚’ƒÀ{­À­†: (9ØÝ:F@EÈš©(©PŒÈCP„>øv„êz@:€žz<™ N?8Áæ’³C> ³îú®!/C“P³1ë>8Aÿ¬ŠC®â*´éª®ëâÙ5‹Ú <À‡.`MÕ ¨!¨T&1Cx€ÔG½ ªE1ÈT»‚, ÕéŒ ã0SÕ30˜(±K1ô \[Os1‹ å‡_€/ õ”ŠÆí°V˜\Ë\È%0É…•Ï©•T£1ã쥄 ëÖÂ=ÜÄU>ÿ ƒ˜8Ýǽ¹ÈeÕ­\Ím±K˜à­÷n hË…»nÞÔÌ­^s]ã…ÝY‘]a£Ý»ÝÐÔÝ{0\Ä Ó„Š]‹u*—˜7Ýr$+Ù<8¨,R€C:À×ꀗÀÏ{tˆX„Æ‹ŠJ„«¬ŠUL‚û¼> óz0=´m0)ˆì³? ´ N“²Ó†¸Êpïr³2;³Éë³Ò»³œš³4ó(tðw@€‚/à“Á¥‘ºefL¨œEƒWL8J8³‹´xÏñ†b(R-_SÕ`S5ȾcëÖñàb@6P6fg3_ÿë]˜À~h!%«eØbc ãõ<µT›b³A›Ï€h›¶ñ@Q˜ðL)[˵]#+¾¹,žb0c2nÞyˆ‰/“ šy˜eèÖ7¾âF®ãE¶ªÑc˜èãô@æÃndi_~ Ñ÷¥ÈÔ´ÃRÒ¢‡€797z¼€:¤&-Ò×b¨¨ `ùõ˜M€²´á (®3J8™aZÄRóÓ¸€8PüCãE/E€–R„ˆ#æÈs¸¾Mˆéê#jWÛäó n è¾ò€©ðU`V©nîè›>hcí«ãŠÎc˜ñ¿Q… í&AžbJžBæ£pnñ–nì&Ä«˜(6Z€e äbÅoèoêÇ—Foõ– öމ÷Îéã–ïQå³.H÷re YÚ @Ø"À õ‡¹ö‡9XƒÀ"|óx£Ör þ¤Ò*8R½­Dðƒ!4‹êÙŸÅ@`@Œf …ˆ¦¥35AlSx€š½Š4píÓ&gd©±]òD/ó€xøÕHrHÿzî€K¨„|¶–½U€¾â=H‰!´Á<2ó@1+XÀ ˜(€wôgÍÂ-ìBýž\1$C/ihô2„‰3LÃ5Œ‰ÔpQ ƒ5éC×B.oí•tó~é0Ž]W Â7ŒC¥‚‰L‡oôýó@×ê·€*¼BDõE/õ1œtXAC5LܘH@©ÐãmzÀäbÅBQWt_wô^÷œð]u\ou9ÄtÕ‘u©ðs@7t¨CõÀðVû„ˆ̓µ·mD¹FÒ†YÛ"R`€…‚w¡MÆ;®âE’š¸(/Æëƒ‘RS«t®J,©Ç.r#_©Að÷ÿUÄ(WtrM4.0EDèó²r ÜSRÄx˜ˆøV,´óÈ‚pè†n˜…uØ!„Kmó#Kå ÐTJ`ó ™Puè‰ ³‡Z€‰mìÆoìõW5G`Õr‡Gy¤G©8ŸôQUaìú˜àyy„ql€¯?z²w5mú¥ïj¨oG©ˆD©ø«oˆf¨ã¸/F¢çF°wUÀïõìÙžî µŸÇçuûìåzǧž—z õðüÏ2ëro¥¶„Ló æJé)Ê¬ç … dÚ_ËÛŸýÿôÈýË¥'áýºÄH™Ý/~¡É%ùÃÄ$ITÝJJ%@è—~´¬þ¡4~òÀþéW˜¼îÏËœ~éÐ~óªL«LL @TI¸sèäJ¯K²zû¿1ùÿÊ´Üú,hð „ ¤¢.:0 'R$è¢ÄŠ7r<èï#È"G‚ìhò$Ê”*W²léò%̘2gÒ¬ió¦M’:wjÜéó'РB‡-jô(Ò¤J—2mêô)Ô¨R§R­jµhÏ«Z·ríêõ+ذbÇ’-«µ–¬YͲmëö-ܸrçÒ½Êï.¿ä±(Y±.àÀ‚.lÿø0H¼wEKûq-âÈ’'S®lñb\Æù¥xù3èТG“NŠ÷cÞFöMx,³…¥gÓ®mû6`Å™AÆà·Âµ€i¿dã.nü8òäKu‹$¯ð‰Ê§S¯n·b‘XÐu–~ý;øðâ3ùKWgVgˆoïþ=ü°äÍèý)Pƒ*Ô¡µ¨F=*R“ªÔ¥2µ©N}*T£*Õ©RµªV½*V³ªÕ­rµ«Yå¨FÃ*Ö²€H“ „R&Qÿ ’ü4*mL T„·| S‰ë\­Ò Yô¢!CNd2„d¯}-,_ý:”&ÀB*eeŠ ¼ Xh¡_‚!(A Cá({ÀDg‘"„ÌRb9kZ×:’·U)o½ _{Ñ [|ä ²½ídP†VØu(^,H¨° ]°â#Áj¡ X@ÁÇMîr›ë“haºpE B"ƒZ˜!$OXR|º“߆$Tp….f1…¤˜¡ !™/, WH(æE¯zcÐ 8·þƒª"2à¢bxN€*ñ*E ·í-B‚#ˆ¾ò‰…‰b1E ªØÉcCÂZÿÿî¤F˜ELP1¸·¿«%±S@ VìA¦*P>Z£Á–0„!$qZJ¼–(3~1‰[ ”"—ÁLj]Ð ˜@Å A•M \¼` H(Á*ê”#Рé’p.€$Ÿ0xnñ7ÃYÎ;*ÄPƒ,¡É-hÅ,€ûðâ7ýuò¡aÜdEƒ„Ìf‰fÁ¡ QF‚i’ Fs+Îl^Ô€É#‰ô¤+Mƒ^ˆ ¿,ÈE¦§Xx¡1À‚ŒèC+EUÈò…u…P‹dØEañQºÀf„øÌ Þõ\Ñj¸@™öéÄ€ãDï:ÿ¼@À„!~ª‚`bâ­?κ‡JHþ&âo!ÓX•ج» Yôxã6D¹}êîöö0‰IìaÜ‚½~Úµ ÝùV8ÃînCìA³;^-Ä+!q`ÂÆ•0„»Inr”Ê>U-ÚԼ®^Ž+ ü!‚`“„-^4-¢àì¬À cXtѾ“*œ!"î€ÌðZ©¼áEB¾Ž$lÉëAây§ÞR.° %^ð´ÿt‘3ÈBèþØB,xA‹XÀÂÐ!iö¢›,âUüݹXÀ‚?œÐ Xpa ÛÞ6SR0‰KìA øˆ ØÝPb 8&h\î‡öÝí€i…°‡K„»ðÞƒ!¨–?P‚%¤À³MÂ}–i€½™ÖÉù¼1ܘÁUBÅI¸1`%LàÉ}„»Û ŽA`ºM i9ÜZ‚$€ÉÍŸ ¾Ÿ’±•x •èB.Ђh´‚ÓÍ€ð– `dÝNZ®5™~ÿ¡sYA-ìBÈW0¡òœH¼BŒ^Ä@}è—˜}„ LÙӽЄ†+tN”H°aH,Á,|Z¨Âz×À PA„=[’¥á[,”€,äBŒAtÀ @A „À¸ÂOeA.LA„À t@ìÂtÀÔq›ýœA $Y jAøÌ‚™%â"6"æ‚_¹@í‘Äô‚ „"ÚÕaHÐá{)"#VÔ„ô‚©â/~„ì…%A.ȗ肎ôñš‹9ۙɂ A,Ѐ °B|_ ºV$œ%”ÜÁ™üŸs© ‚[[V’©ÿ@° $X î_Àù`‘ÁÁ É…¼ùƒ Œ&AœBÖ£O!ྑX¹Ûgå[ºŸÖÍàB"œOÉQÂû1äG†dB‚’edÄ@ 8Á.4PÍ@.PØ•-tbùÛ¢9. È@ä‚:×OåP’D ô¼€ ´B)F!t€ØY£Å×vÝI†DN†Ä ðB^Äž ’Þ„¥-Œ¥-Ô+Hˆ…¬™–?4AZðáGt%¼•¬t-¼€.È@P)#ú”xÌmAø”Ôe v ¼Bf$ŒA+t€ Ö×OæGÿA. ÓýÄÌé)ÝGLx•×[ªf¬iZõ?œ¢k~Dp˜?è— Ÿ.„&IT£O¹¥lUN¼@ÌuÁø”župö™-§jgQ• |½uÖ&d;Ù@þ”މ(Ü%øC¼ ÿaB%8Ü (¢Öv›¼‰§" PM‚?Êã»Å›xÆ[gmœˆqÛiY‚¢©œOÕŸÊ9WwŽc׉âPqP•b~„´@´Â<šNhiœ@Š.g[…èN@/äZ”&úC(bAw…Äða¥Œ>£i¨jôÂQ~Ä Ä@ ˆÁðh ìhþ¨J~„Äÿo:—ã}+g\ÁÑÙ¥?Žº˜T~b ÄœÁG$¼‚,Ø‚¶ù×-P­[vD©(:[¨aúƒã‰@¬Bhz)˜Š)H(Þ-lA’ŽŒÆ@-Bšé…Ä’ŠD¢‚ž†)‡…áØU\6ªžúƒ*ßÛ=Z¤&³YZVvHÔ€#vA.„f·í×… 4dºáãi½Zmç€Ê£Á›$Ч¦€$ i}ÀÄÀ±'<þ¯ò*=2dG>äy.ܸ)벎.Z ð*ƒÂ}„Gú£Š$¸.dIv"¨F'ú Ü‚ž-*‹~ÿD|?TÁdêÄ´6–|hteêýÀîDÌ‚x­tÀÚÈÑÊäÕvl.ðÞÞÉ¥?¼©Oø¦”~D¼B_øÃ ØBÀð+Ùr$àgq«ÆÛ°ÒªAÂ#‚¯Þ'Ê Á%`‚ꘂ„™ùívkiM $®RàŒY§?Hÿ® ÒÛµÚ·UƒuÖåþ-ÿQç;ž®?¬ FzÅÐÀ Á4ÝG°-°eÝ™Þ`ßÒ‘­OUY-@ 8Ô@ *¨‚ñ"¯ò2/HÁ!ð‚”@Ü ¼U-çGDN¬Ä^eHHjH”À,˜ @Ç~Ç"ÞŸv€âaè¢ÒÂ\I)úª/ûvÀV+äB D¡‡úCx¥O=Á+˜kÌéGàï5:Y˜@ ¥‚I0+ÄB€„x¨%z¥?¬ÀüÆàBû’„~ÝdyI£†¸†ª­ s0—0Ã/dôB»vð÷‚ðªùéà‚LúÿZoz*’Ì™¹B ¨VL§Z1ÜÀ•#&X‚ÃA.à®_f•?*\iù*¼ ªUCŽ–fÝØYu€­ºÛS þ+ÃA«Oœ&Ü{ ôÅ£è&YµŸ¹©\Çq+{1¾Y鹦«s.ä‚+XA(~@ïHˆ€¸‚!I- j> ˜@(,`A_ˆ2)›rHpA.8Ÿ?PÁ,äÂÄÚOÍ@•~Dµ©°8®ê5†'')íæB-ŒþD¼B»Ž ¬B.ä‚M­~ÕbëW0³eU-ˆ€ÂFi ¨B+”Að øD¥‹…¬OÁ-F0@¾]ÛÊÿœwA`ò†7ƒ³8ûƒ 0w 1Iðä´í©,ÌB/Ì‚,ÔÞ27ó´3ßf=‡sÛV,ð«vó7;´?|ä2{×,ЋR#'h‘I0È‚é —…O©À)¨HÛåk­ª©)Ù*Uº*hëÒô[å¶•€Ât"»œI2ŬѲ¿ÝÖ½Öºê"6"µ“A8ÒèˆÉt·õS€ïŸŽo/;µÏò!×Õ4"s¢Ä"ÚWãd'2bdœE5Fg¬Þ+05Yð›CÅH».9êµThHøurT½Êà’©õO¶SD ‹ïh4Á,´mSFÐõb…tR@±X„ÿî°6Åc"vtzvS6úyñx ¶© h[Ej#Æ àB+L£V[F-Ä"Q¼uiŸ¶[­öXí6\ð”oÿ6p·p7q·q7r'·rÓo“ÄÄ<7tG·t» )T·uW·’4@ @R‰Oh7w¯ˆ@ÔÅt—·yŸ7zŸÄu_7iDH¸A$ä|7ÀGà@ì· è}«ÅxûCAü7HÜwPxw\L·< Ä‚£J䃫4¸tKøt{ÃhDƒ# B0Ðz[·a€ Àw¨?è· @ð·{x| …Ìw}ÄŠ„ûCà€äA“Gt@ûCûÿ¸H 8Iä8ü„GxQÄ/CG““CùI4xºhÄ“»DˆÁIH9Cdù@\¹yS8B€9¬X¸Fˆ9#‡w8)ˆûC|«A}ë·ŽÛùŽ{7|Å‹ù ÀOäøŽ„ŸË¸@z‘øQ ¹’„€;z“Ä Üƒm„— ĤWzG9Edú¬\zBxzz§„¨Ÿù…£„#‘ú°¸ù›†0:H˜¸Ð¹Ž—x}8~ y€8}ãw¸¨~{Œç¸ì8} @Š“¸?äø~7 ·ŽDç‰ÿ8H„x‰xŽ„´ 8~׺œ÷w°»Á°ïº$9}'ÿ¹ Ä7¼Çø¹;ˆûˆ;» $9Hø ø@à‚1D˜ƒ8+¼1| éèÍÑ$ÍÒ4 A¼À¼Á#üêŽëÄÀ4Ѓ6Û NáDèØÍ¿¼@€Ã0hƒ8ƒ8=кp€1¼;ä‚ð „ÏëŽ@TÍÕdMÃ+ ÓÎÍÐLÉÈŸQçÀ¼È<ÍÛ¼ÂçMÙÌ>”€@¸@>ÀB |Á|Â?ýÌ×üÍ €Æs¼Ç_|ë„Ä«}àx}ŇýÈÐcÑ'ŽBxC.˜Ã<$ƒéøÓ" ÀÒ„}Ç·º›Ãy|3@€ë·­ ú³—8² øG¼»àÿ÷Ô7‰·¸±ïw­Ówx»³¸€çû}O; ûƒ Ä® ùc<ú¤øˆÃwŒ›~„ûèï» dþ½“þº»¾³ßø·ã@|>‰þˆã¸ à·è×»?@¤×L=ìQ¬ƒL-݃œ Ä¥o@õ <ök¿p?ò(Ï 7ƒ4 Dƒ—0Qÿ 8Œ@2ìB„V8æŒà¸V (’¯¡cÒBXPö‹!’{W„ÀÒ0 »ˆfI£ @ ‡ˆêy+ØHgñ4ˆp…B†ÛÂUP0Cne®’62b•u¦³pOÄÍ„ p&¡ÿɽ˜)ZÄØ¥K†+^ ”©S¨¸ Y°‚U=2,y2%ÒˆÞÖɰ mØÎ0 _%‹sd ~"ZŪU)É“%û³|sfÍ›9wöÜù@7ýáðg#OÓ6ü5p€›<ÈíZj5 ¨ÉÓÀrÃË R3ð'ÛõåyÔøkˆ<¢o Y«°|ôeá§ó8Çüøo†­E¸¬›·o×ÒàÜ7Žñº-CÇn úiúŸ37„嬡*´ ˜…ÒqiUì*$‘ú/À àÀ øëˆy0Zf+†Óë•e"‚°!p‚` wr&°†ÀG ÿÂ'¢‡²C †A¤BI–pŠPàA_ ‘!#š±ÆwR¤ ½‡!r´Ð‹! 4ðH’’CQÊðD%Ó¼pM ½œðÀ‘JdH¤Š<’˽daˆ z#̰†FlH1Æ*óØ(£Œ¿H%ô³â¶kM 5XóÇ5Üð'µ<¨í<†pè.Ô<6½”¸Oýaï¸ë˜sŽ!è’®!ÓL -»àÆ+Mµ×D£•TÜȳî²SSUÕÚº#¾`ßÛO=Y›‹H7\)eÈyšp~YEtŽ`›Á(¬A¤ºý¶ËpÇ-÷"ø9ÇsΉǂ"ø¡€¡ÿ]˜×`„fHdwQVYj …&š!oÄ`È~$¸™ÐØ цüýYàÈ­ŒÒ¾ýæO€ø¼À4cUEÍ lmTäÜpÃ5ÝW8h-#NÔWu4úžïVis{UÖ^-GÍ»a?7v9d-“|r×kï=¥容ð\k}¤íWI:#\p¦îu Šÿv">)­éÅ€F*Æ8D îÑÉX iz‡caÈ ›$WF1mÄÑî Þú‘òDªy.]0Ç ò‹_R&ìc”Æ¿tÅ!ÃÀE.€Ñ§³HÏ\|Ÿ°§=‰Ä„~z)C2½ã™Ë{à€øð$½ì¯}òÆŸ@y€ ÉÅòð2ðC% ©àöô¶·¿ýˆ˜ÉͲrw*Ü FqÌijDõ瀪9±y•i\E¬ñ`.S¢ÀqJE08M(š0^ç8¦ñ•^°ƒß| ŒbT €Ã»_ÉF n Ḙ;çœ*¬ñs|s­å@‹!¾¹Ýÿ¤ wLÁƒó2Wòr&€à q$$'És#%(@ >"m¥ôà^C8° è_#9pôåÚðÅ‹Èdàd®ÐXD@)JRfäVX®ÐKf’E3(@ÊáMÖÒessF/ðË„“’Ës‚;ÞÁfíƒçòfNÀyJº©’!Åe)79yžlå+c9K(“™ ™‚4©iMªÃ/Òø /Ž1¿tÐðexG3âÎT:jo¤âFÿÆÅ¥¦9Fô¨ªà)æÀ1<‰T¦.ãÇ‘|Q4oÜÔGý¸œTI늤k˜£:½œ\´)³ºÿxHá\ÇSÇAÍø3½yÜn¼Cºñ0¤rÉÙ–Â1’|n-œÉ…;ØA®z‚ç²@.ÔQsœ!/Æ7¢ÁŒ­lCô¨‡:à'spãÁ˜åYm‰‹sÌãàåHBp x´C&ÃØêV¸ ÔôpÇeeHVªŒšÕÅB؈àU¯|]lDûØÈJy9Ç9øÀtÂÒ±•¬äJW»r«²o-mWG²Ö¶ ÷«Èó+`Û)dv³ ­hI«B\”±Šå­7Èñ b µ{…_—ÖaZÄu®uŨ9Ú^÷¾¾‘ºT|éÛ·Öýmé hmù‘¥üî·¿ð‘Ž.¸OG¸‚Ì7Â@“Y„!ü` _Ãîá£êÛaXxÁñˆ•ãÆ•úí¬@’†’ⳘÁ..ð1Ì oÀ˜K2Ʊ•phîØ:òœQ’ÉIŽï|•ìa&ú±oD–r† |ánÜãJ˜ò–õÒ y¨‹Ëa3ŒÜd3ŸÍinò˜ÙÜf7¿Îqv³š=!ù‘þ,ÿÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹)’ÚÈqc€ CŠI²¤É“(Sª\ɲ¥Ë—0OfØ Á€†5oRÀsæBž| J´¨Ñ£;Æ\Ê´©Ó§P£¦l˜ÇÁªyºÉÓ áÖ®þ€BhP8ò¨µÑ³aÛ¬on=J·îγp-Þ æ°H>ƒq&å(µ°áÈ»D›ÇÛ²bÝàˆµìW‚jòà0xòضfñ6À‘™íäƒ6æªñ—ÖÍ€kÎuHÖ®ÂÀ3o&ˆ{`ï… X¥»7. ïÓ螌Y&¿g©Ð#Øä‰Ãb#WÎ<á`ŠÃ‹ÿOfØÕƒ†ö'¹`åÞºþ~X[`éùŽÕªYÍzmÚ<6ÈÖmøÙVßAñ‡Ð ݲÎ ÆBÉ-×?÷Ì €tuUØBß‘RÞˆ$–Hž?¸¡†Šê¨YUAØŸUþ ÇO6¨¥#™©– ¬¨"m•™`Yµ’hY•‡?®fšBºñÔUkûm [=Ù@P[ #“A²%df5©–?`$¦‘V#l«­h§Š°)ä™YUW9ꈕ˜=º!£? Øðšd…Ôød‘&š¼y”sÂô²átþXÎ<Á´µÍ-Ñ ÍAÎ:ù´å9õÄÿ YYê[š!š¨ë®¼2åk™uÕÕ“[I±ÙÀ%›A–k2*Û™4Úæ“ü‰í“ö;¨÷Æ›@ ˆ•¥Õ¨Æf0ž5fW)ÖèÏ€Žª·ßnÕ”"²yÈi,·™YÚ¾ûqÛç¶jIÚ“8ȸ¤zìYõª·žüˆ0i^¾]aB Q\Êñ\ÀaY{‰N LÊÅ~µÅ ¬@N+Yy 2ÅëåÚëÏ@-¸¦`€ Ã&YŽIÃhÙ€eÍ‹Cm!}ÚVy²§íJÓ$À l5@OΗgœ=ݘÑY-öÁâèe\Á…_éN1ÿ ä¼”ý['W*æ¨èÜÁ̵ÓDO}–‘6ðÍæšyõ´^ÔXø£€?µ¸ãÎækçs0SÆÉ<¥|Ö6ª5K1Å<O¯0×(Ïù,ôî¼—¨µŽÙN}Œi ÏžÅVý.kT×ýk¶l²×‘4†ÉV¬8¯Zå=å‚óvTZAªaxö]rßç@¦¥µ}lž „¾Žˆ"ä·œO>xØæ-èZÀõÚÓ¸¶¤F-†ºÕÝ,†&iðƒ¹àIüÑ\` üXÀ­Ž“&ÒUàTêBÕ“m„!(¯HFìZu–'D#êt*5‚è®w8Ì!bè¤(7¸i“kOÿ€Ä¸ƒ}©,ÅkX¬¦5mÕ¯zý`~ uÀîIm>üùäv8*n¥\_ñá—˜¦(E)ïjŠ"—ýžDÄ9 `yàŸáÈXÆ/YqI¼Ûh¸E®4VÎbÚÀ=¬ %dpƒvc é° `ˆPªˆ Q¨B Èθ‡ €X@#~ ²áwtHÊRB%ó²AWܰ0c±‡4ÇcĆƒ/ à\ CÔ,5SËx $a¾¡^Xî¸4/ª{c‚XBÄ´&þl‘™‡ƒÒ1)6¯Õ„­F›©Öz˜ÖéÍ aÛÖ€°űp 纴Àª—2Ú²øØÆ Zd™E:˜@ÿ.2tbË"±pGFÒ“ôG árIìCC!@Ç'Å3\Ò”ÍhKžÅ“s½éIí:ÔœC¿Í=ÉûŸf€´§$EQkëàñ°"dékÏ‚š›(¯ÍØòh4…S¥Ç“t•©[‰ JP‰5Tû)i6©1çþР k5íd eŸ.),Dz'%¼bÄñBR+*P~ÀÀ X§¶¡zÔCãä ªÂ²\Òb07žŒ‰’5©þ¸¡FËØØæ±ìAÀ)~F\adT ‚ᢓˆbKÚŒJö´¨¥Ëò=·t6"š},g1›V9x#´miw«ÃÔúö·¹åUÛÜâ.ˆ¶éÆ=Ρ"W!ºå­twgÜêZ÷ºØÍîD¦Ë]!ùnþ,yP¤ÿý H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£ÇI‰ ²¤É“(Sª\ɲ¥Ë—0cÊô7’äÌ›8sêÜɳ§ÏŸ@Ö´¨Ñ£H“*]Ê”ãPRM£JJµªÕ«ŸbÝʵ«×¯`Yj K¶¬Ù³h»ŽM˶­Û·p[®K·®Ý»x ÎÍË·¯ß¿U÷L¸°a™‚+^̸1ÅÄŽ#KžÌ2å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬ž$À«°Æÿ*무Öjë­¸æªë®¼öêë¯À+ì°°¾T,CǾHì²Ì6ëì³ÐF+­®½jµ%+Ð-Á\‹-H²räÍÞr Ó+ÎüõíBë^4í»ðÆ+/³ÜîZD>óÎ ‘ üð“Ï:¸,àíÀÙ®+@Ox+ÀG¿ãO¸ÈÆúp¬ /<®·CÔ°FèvC¿ôL#AWˆs;´øc?eD ?QdÁ=æ ô1 i!ÏþLÓo¿ê(äóÏAÓpOqO=ƒ¬ ÒþlÌ=òì"0¿þ,°3?ÿœòÄë–|rÊHMµÕ¬\Æ«/G!ÀÐô<ý*4]Óòj1ÇÌ:4иŠÿò«fW½@Ú,³ ³Ú†»-ÀÌæÀúñ3¯RAó²°Ê°Œ<ôtóÄ­£ýxä“ûª+éÜ3N¸¢óÄ˼:º’NJ𮈡«ë°7+P× ñ›„H¸ Áµ«ðJ+Ü#CÁ ³n¬ÍË`1¹)¿Põ§ËÑÇD¼PÆ=1ûSÅ=[\ ƒ*›ã? 3OùYsO ÝìÎJ4Í- „@>¬ãX€Âá ÿÕb!ø=,àdlc5PG+ü!<âÏ `4x@-zæCŸúØ' bPƒisŸâ7¿·=0‚@§‘‹ NxÓ[ÿ' [/}ë{• 3ØŠzc†ò‹‚dHCÅÕï~²ãÇ=f@»ÉO|ä{9|Ñ Lás¶Z" ?¶Å.þêëx‚†Ö½.v”Ó"k/ÞáqY¿Bøu„W ÙFðŠd$òÑ@G46ðÈHNòaV_0°µ HJ’’þx4:gŒnMl¿À–¾À† cDO‘¯j¤@6  xÈÃ,ˆœA‹c¤Ãh|U+­å\˜cÉe&ç±IkuÒ’ H+³%oУf0Ÿ9ÄAV¼ƒ ó9ê`P@ £4Š18 ìbJ}ÝìUÀˆ†@ÄÁÿ ‰™AÓ˜rò%ƒÏh ?n¦³$èr_cD¥Ãq˜¡ â0áD ~ÁøÀ\ÚÐÁA‘ƒF.¾%±}ò¢ ©Б6€ ” nÛhG ù*iÜ"VA”ÕFsÅOYÅôU3­i@ZÐ.§¯:hB³(Œ^¸ñžȧ8Àèê¨#ÍcUÝØ« àƒu»ò#U­ÊÇe6óUÏü䫈€Žuà Vâ$§9a¥Vf¤_ƒ4©Îq<À’‘Ž4l8* €i°"‘‹mìcaU¯WFÖ±›Æ0&€„{˜òUìp†*!¸zá•‹”¥?f! (@ Ð¥3âáÿX`°Ú€i‰¹X@ÃÐ¥*û°m\ö±Ñ-ÓÒÙ+@ æ[‡¦QŒ™‰@\@ÂV@Ž ú]І/ ð0cH#PF*i%\‰aõ ô°í>¬àOi|Ð8BAýA{<¡ ãÈ?d‘„=4¢ ªpýAyœÖvS@,î±#ðã‘ÛÇ)€Á/¥+EaK-0ß‚XôÓð?ï›ß‚¾-ÂÞ¬| Ô¼ Õn¹"1}cuâ /`ÅøÕ¯íd÷÷¿ãÈ"âqÚ½wr8Ç3¢0Ï[õ8Å øØ’›\:^I×ÝÕLPÅi™É||UeázÜXÝ+ÿVÙÝnwa5æ2ûÎüdž¯x¼¯P@qÃð0YV›E1©ŠW):[æÈ6-€G—€ÏóG26yÂѶta°­3SëHÈ"E´p\è…ºXÞéè9\N—ÒŠFa¨ ŒbȪ Ú@06˜ŽÓZ‹‘Ë@'7¾áÊ…]€Æ>Â[Ñxů§!€_¬Âè(䢑uÈãèä2àÁ‚…ç0‡9Î*ëKÒè×JÕíUÀ× ÀÇŽ­õOä‚}û-†÷ÔquG¡ø˜ÂÿC}Ñ‚òs…™ùÍ?±\Lƒ¬ˆÞ4xaÂûãÄ¡‚†ù÷¹×Ä}Ògbæcÿ$×7soC0+%w76†rë×çW+Ñ7}¯reú÷cÒ€€ºÓT˜€.¦}¯Â};gçE@ç|V'-À hå7ƒ- ¨aS‡‚UЂ¨|¯ÒüÐpSÀ?´+9˜‚±²f¤xnvW¯2{µw{ïâv{Æg&UÞ€cÑ@“ xGhˆõwc¨K‘F†²ti™¶i´¦x£x¯r¬W,]ø*`X.`Ùô0Îðz31rxB±9ò@kÄÕ„ˆ=˜-½¶z­ÿ÷z±G÷ Y (õ ˆ4 Ó hÀ&@-ˆgm+˜Oñ ºP_ÅRP 0øp÷ï£?¬à"Y_£-QÙã[Tõi5å3S%UHZH6sb aŠ0EŒHES+‡cøS&°2T¸bŠFa5¯‚±¢Š¬èа¸s† *Ø|Z%+T ôPö(Gà˜TS·Ž<ˆ+p;¦FØ+û¸ 츄o…ˆô„°"‰”(–X…xöv AH1÷ð‰¼7axƒæ„fØL!™ˆo# `öðY  ÀxÅ"àS 1)ÿYjS0Ðåವ 19“â+Þ ¾% ©41‡y¥F”ÉÓYV°pP¬çz°w°\èp‰¢Uæ s ÉPXP+ V,àãd@>ù7‰„&ŽãSµèP°- ? à Þó?@è—‹C4ü…ˆ&¼0 ¶.Ë  d¦ Äa€‘Ÿ¸ŒèT`—xù0—™™®PSå˜SÖ+;ÔC?T Ș0tˆ™˜·2šZp—‹tš”šâ8sÁYP}f9˜ü€÷ ‚D —a$¾PðÏ9Ú¹ ¾©™êÈœýÿˆ+³L@]0_—œËÙœIv¥‡vPØ•_–Ïâ’ÇÒ5Whù0Þàn/à äð ÄPjNY’ éÛ ôPê` ™ #Jô° Åà0Z0ylbá Z 1è@î  &ä}“Ú^à ¸Póp °0 Ú j£|ç-šà®A±k± #°+±žG°";²´Ò ÷pJÀ®,Û².û²0³2;³4[³6w{³8›³:»³<Û³>û³@´Bk³ÊÂ^­‚ny´É!§‘´Jkú©Nû´ÃX 1µT¹ŸÛRY+úɵÙc´_ ¶LÛµ[¶½q¶c ±jûQK. =ýú¶ÈZtëµvËX»·ÉÑ·~{€¸µ;irony-mode-0.1.2/server/000077500000000000000000000000001242454076400151125ustar00rootroot00000000000000irony-mode-0.1.2/server/.clang-format000066400000000000000000000004541242454076400174700ustar00rootroot00000000000000BasedOnStyle: LLVM AllowShortFunctionsOnASingleLine: false AlwaysBreakTemplateDeclarations: true BinPackParameters: false BreakConstructorInitializersBeforeComma: true ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 2 IndentFunctionDeclarationAfterType: false irony-mode-0.1.2/server/.clang_complete000066400000000000000000000000421242454076400200630ustar00rootroot00000000000000-std=c++11 -Wall -Wextra -I./src/ irony-mode-0.1.2/server/CMakeLists.txt000066400000000000000000000040451242454076400176550ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.3) # CMAKE_CURRENT_LIST_DIR project(IronyMode) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${PROJECT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) include(utils) check_for_in_source_build() release_as_default_build_type() # Disable exception, we aren't using them and right now clang-cl needs them # disabled to parse Windows headers. # # Logic stolen from LLVM if (CMAKE_COMPILER_IS_GNUCXX) set(IRONY_COMPILER_IS_GCC_COMPATIBLE ON) elseif (MSVC) set(IRONY_COMPILER_IS_GCC_COMPATIBLE OFF) elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(IRONY_COMPILER_IS_GCC_COMPATIBLE ON) endif() if(IRONY_COMPILER_IS_GCC_COMPATIBLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c- /D_HAS_EXCEPTIONS=0") # irony-server uses some code that breaks when iterator debugging is enabled # # The culprit is CommandLineArgumentParser who initialize its member # 'Position', of type 'std::string::const_iterator', to 'Input.begin() - 1'. # With checked iterator the begin() - 1 breaks in debug build. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_ITERATOR_DEBUG_LEVEL=0") endif() enable_colored_diagnotics() check_cxx11_options() if (CXX11_COMPILE_OPTIONS) add_compile_options_(${CXX11_COMPILE_OPTIONS}) endif() foreach (link_option ${CXX11_LINK_OPTIONS}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${link_option}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${link_option}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${link_option}") endforeach() if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options_(-Wall -Wextra) endif() option(GENERATE_DOXYGEN "Whether or not to build the Doxygen documentation" OFF) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) add_subdirectory(src) add_subdirectory(docs) enable_testing() add_subdirectory(test) irony-mode-0.1.2/server/cmake/000077500000000000000000000000001242454076400161725ustar00rootroot00000000000000irony-mode-0.1.2/server/cmake/CheckLibClangBuiltinHeadersDir.cmake000066400000000000000000000064571242454076400251030ustar00rootroot00000000000000# # Get the directory where the libclang headers reside. # # If found the following variable will be set: # - LIBCLANG_BUILTIN_HEADERS_DIR # set(CHECK_LIBCLANG_BUILTIN_HEADERS_DIR_CHECKER_CODE_IN ${CMAKE_CURRENT_LIST_DIR}/LibClangDiagnosticsChecker.cpp) function(check_libclang_builtin_headers_dir) if (LIBCLANG_BUILTIN_HEADERS_DIR) return() # already in cache endif() message(STATUS "Detecting libclang builtin headers directory") find_package (LibClang REQUIRED) set(checker_code ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/LibClangDiagnosticsChecker.cpp) set(checked_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check-libclang-stddef.cpp") configure_file(${CHECK_LIBCLANG_BUILTIN_HEADERS_DIR_CHECKER_CODE_IN} ${checker_code} COPYONLY) file(WRITE "${checked_file}" "#include \n") foreach (version ${LIBCLANG_KNOWN_LLVM_VERSIONS} .) list(APPEND builtin_include_dir_suffixes "${version}/include") endforeach() # Paths stolen from Rip-Rip/clang_complete#getBuiltinHeaderPath() find_path(CHECK_LIBCLANG_BUILTIN_HEADERS_STDDEF_DIR stddef.h NO_DEFAULT_PATH # the default path, favor this one over the other, in case a specific # libclang has been chosen. HINTS "${LIBCLANG_LIBRARY_DIR}/../lib/clang" # other, distribution specific, paths PATHS "${LIBCLANG_LIBRARY_DIR}/../clang" # Gentoo "${LIBCLANG_LIBRARY_DIR}/clang" # openSUSE, Windows "${LIBCLANG_LIBRARY_DIR}/" # Google "/usr/lib64/clang" # x86_64 (openSUSE, Fedora) "/usr/lib/clang" PATH_SUFFIXES ${builtin_include_dir_suffixes} ) if (CHECK_LIBCLANG_BUILTIN_HEADERS_STDDEF_DIR) # On Windows the paths weren't escaped correctly, similar to: # http://public.kitware.com/pipermail/cmake/2006-February/008473.html list(APPEND run_args -isystem \"${CHECK_LIBCLANG_BUILTIN_HEADERS_STDDEF_DIR}\") endif() list(APPEND run_args ${checked_file}) try_run( CHECK_LIBCLANG_BUILTIN_HEADERS_DIR_NUM_DIAGNOSTICS CHECK_LIBCLANG_BUILTIN_HEADERS_COMPILE_RESULT ${CMAKE_BINARY_DIR} ${checker_code} CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${LIBCLANG_INCLUDE_DIRS}" "-DLINK_LIBRARIES:STRING=${LIBCLANG_LIBRARIES}" COMPILE_OUTPUT_VARIABLE compile_output RUN_OUTPUT_VARIABLE run_output ARGS ${run_args} ) if (NOT CHECK_LIBCLANG_BUILTIN_HEADERS_COMPILE_RESULT) set(CHECK_LIBCLANG_BUILTIN_HEADERS_DIR_NUM_DIAGNOSTICS 1) endif() if (CHECK_LIBCLANG_BUILTIN_HEADERS_DIR_NUM_DIAGNOSTICS EQUAL 0) message(STATUS "Detecting libclang builtin headers directory -- success") if (CHECK_LIBCLANG_BUILTIN_HEADERS_STDDEF_DIR) set(LIBCLANG_BUILTIN_HEADERS_DIR "${CHECK_LIBCLANG_BUILTIN_HEADERS_STDDEF_DIR}" CACHE INTERNAL "libclang builtin headers directory.") endif() else() message(STATUS "Detecting libclang builtin headers directory -- fail") if (NOT CHECK_LIBCLANG_BUILTIN_HEADERS_COMPILE_RESULT) message(WARNING "CheckLibClangBuiltinHeadersDir: failed to compile checker, please report. Compile output: ${compile_output} ") else() message(WARNING "CheckLibClangBuiltinHeadersDir: unsupported configuration, please report. Check with args: ${run_args} Check output: ${run_output} ") endif() endif() endfunction() irony-mode-0.1.2/server/cmake/LibClangDiagnosticsChecker.cpp000066400000000000000000000023071242454076400240300ustar00rootroot00000000000000/* This program takes some forward its command line arguments to libclang and returns the number of diagnostics that occured during the parsing. It is used during CMake generation to adjust the default parameters to libclang. */ #include #include int main(int argc, const char *argv[]) { for (int i = 1; i < argc; ++i) { fprintf(stdout, "argv[%d]: %s\n", i, argv[i]); } CXIndex Idx = clang_createIndex(0, 0); CXTranslationUnit TU = clang_parseTranslationUnit( Idx, NULL, &argv[1], argc - 1, 0, 0, CXTranslationUnit_None); int NumDiagnostics; if (TU == NULL) { NumDiagnostics = 1; fprintf(stderr, "failed to create translation unit!\n"); } else { int i; NumDiagnostics = clang_getNumDiagnostics(TU); for (i = 0; i < NumDiagnostics; ++i) { CXDiagnostic Diag = clang_getDiagnostic(TU, i); CXString DiagStr = clang_formatDiagnostic(Diag, clang_defaultDiagnosticDisplayOptions()); fprintf(stderr, "%s\n", clang_getCString(DiagStr)); clang_disposeString(DiagStr); clang_disposeDiagnostic(Diag); } clang_disposeTranslationUnit(TU); } clang_disposeIndex(Idx); return NumDiagnostics; } irony-mode-0.1.2/server/cmake/modules/000077500000000000000000000000001242454076400176425ustar00rootroot00000000000000irony-mode-0.1.2/server/cmake/modules/FindLibClang.cmake000066400000000000000000000052731242454076400231270ustar00rootroot00000000000000# # Try to find libclang # # Once done this will define: # - LIBCLANG_FOUND # System has libclang. # - LIBCLANG_INCLUDE_DIRS # The libclang include directories. # - LIBCLANG_LIBRARIES # The libraries needed to use libclang. # - LIBCLANG_LIBRARY_DIR # The path to the directory containing libclang. # - LIBCLANG_KNOWN_LLVM_VERSIONS # Known LLVM release numbers. # most recent versions come first set(LIBCLANG_KNOWN_LLVM_VERSIONS 3.6 3.5.0 #Arch Linux 3.5 #LLVM Debian/Ubuntu packages from http://llvm.org/apt/ 3.4.2 3.4.1 3.4 3.3 3.2 3.1) set(libclang_llvm_header_search_paths) set(libclang_llvm_lib_search_paths # LLVM Fedora /usr/lib/llvm ) foreach (version ${LIBCLANG_KNOWN_LLVM_VERSIONS}) list(APPEND libclang_llvm_header_search_paths # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/ "/usr/lib/llvm-${version}/include/" # LLVM MacPorts "/opt/local/libexec/llvm-${version}/include" # LLVM Homebrew "/usr/local/Cellar/llvm/${version}/include" # LLVM Homebrew/versions "/usr/local/lib/llvm-${version}/include" ) list(APPEND libclang_llvm_lib_search_paths # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/ "/usr/lib/llvm-${version}/lib/" # LLVM MacPorts "/opt/local/libexec/llvm-${version}/lib" # LLVM Homebrew "/usr/local/Cellar/llvm/${version}/lib" # LLVM Homebrew/versions "/usr/local/lib/llvm-${version}/lib" ) endforeach() find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h PATHS ${libclang_llvm_header_search_paths} PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/ DOC "The path to the directory that contains clang-c/Index.h") # On Windows with MSVC, the import library uses the ".imp" file extension # instead of the comon ".lib" if (MSVC) find_file(LIBCLANG_LIBRARY libclang.imp PATH_SUFFIXES LLVM/lib DOC "The file that corresponds to the libclang library.") endif() find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang PATHS ${libclang_llvm_lib_search_paths} PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/ DOC "The file that corresponds to the libclang library.") get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH) set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY}) set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set LIBCLANG_FOUND to TRUE if # all listed variables are TRUE find_package_handle_standard_args(LibClang DEFAULT_MSG LIBCLANG_LIBRARY LIBCLANG_INCLUDE_DIR) mark_as_advanced(LIBCLANG_INCLUDE_DIR LIBCLANG_LIBRARY) irony-mode-0.1.2/server/cmake/utils.cmake000066400000000000000000000103771242454076400203440ustar00rootroot00000000000000include(CheckCXXCompilerFlag) include(CheckCXXSourceCompiles) # # check_for_in_source_build() # function(check_for_in_source_build) if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE) message(FATAL_ERROR "In-source builds are not allowed. Please create a build/ directory and run cmake from there, passing the path to this source directory as the last argument. This process created the file `CMakeCache.txt' and the directory `CMakeFiles'. Please delete them. ") endif() endfunction() # # release_as_default_build_type() # function(release_as_default_build_type) # Set a default build type if none was specified for build systems with a # unique configuration type (i.e: Make/Ninja builds) if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) message(STATUS "Setting build type to 'Release' as none was specified") set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() endfunction() # # add_compile_options_() # # Adds options to the compiler command line for sources in the current directory # and below. # # note: add_compile_options() backport, which first appeared in CMake 2.8.12 function(add_compile_options_) # possible to check with: # if (${CMAKE_VERSION} VERSION_LESS "2.8.12") if (COMMAND add_compile_options) add_compile_options(${ARGN}) else() add_definitions(${ARGN}) endif() endfunction() # # enable_colored_diagnotics() # # Setup the flag to enable colored diagnostics if any. # # For now this option is enforced only for Ninja builds, where compiler output # is redirected to pipes. # # Clang has '-fcolor-diagnostics' for a long time now. Since GCC 4.9, a similar # flag has been added '-fdiagnostics-color' (somehow they managed to use another # syntax than Clang's one...). Recent version of Clang will support both as they # added support for GCC's -fdiagnostics-color. # function(enable_colored_diagnotics) if (${CMAKE_GENERATOR} MATCHES "Ninja") # Clang check_cxx_compiler_flag("-fcolor-diagnostics" HAS_FCOLOR_DIAGNOSTICS_FLAG) if (HAS_FCOLOR_DIAGNOSTICS_FLAG) add_compile_options_(-fcolor-diagnostics) else() # GCC (and Clang for compatibility with GCC) check_cxx_compiler_flag("-fdiagnostics-color" HAS_DIAGNOSTICS_FCOLOR_FLAG) if (HAS_DIAGNOSTICS_FCOLOR_FLAG) add_compile_options_(-fdiagnostics-color) endif() endif() endif() endfunction() # # check_cxx11_options() # # Throws a FATAL_ERROR if C++11 isn't available otherwise sets: # - CXX11_COMPILE_OPTIONS # - CXX11_LINK_OPTIONS # function(check_cxx11_options) if (CXX11_COMPILE_OPTIONS) return() # already in cache endif() if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") check_cxx_compiler_flag("-std=c++11" HAS_STDCXX11) if (HAS_STDCXX11) set(compile_options -std=c++11) else() check_cxx_compiler_flag("-std=c++0x" HAS_STDCXX0X) if (HAS_STDCXX0X) set(compile_options -std=c++0x) endif() endif() # Check whether or not the system library provides proper C++11 support, if # not we try to link specifically against libc++. # # This seems useful for Mac OS X builds, see: # http://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/ set(CMAKE_REQUIRED_FLAGS ${compile_options}) check_cxx_source_compiles("#include int main() { std::random_device rd; std::default_random_engine e(rd()); std::uniform_int_distribution dist(0, 15); return dist(e); } " HAS_CXX11_STDLIB) if (NOT HAS_CXX11_STDLIB) check_cxx_compiler_flag("-stdlib=libc++" HAS_LIBCXX) if (HAS_LIBCXX) list(APPEND compile_options -stdlib=libc++) list(APPEND link_options -stdlib=libc++) else() message(FATAL_ERROR "Standard library doesn't support C++11!") endif() endif() endif() if (compile_options) message(STATUS "C++11 compiler option(s): ${compile_options}") endif() set(CXX11_COMPILE_OPTIONS ${compile_options} CACHE INTERNAL "C++11 compile options, if any") set(CXX11_LINK_OPTIONS ${link_options} CACHE INTERNAL "C++11 link options, if any") endfunction() irony-mode-0.1.2/server/docs/000077500000000000000000000000001242454076400160425ustar00rootroot00000000000000irony-mode-0.1.2/server/docs/CMakeLists.txt000066400000000000000000000006631242454076400206070ustar00rootroot00000000000000if (GENERATE_DOXYGEN) find_package (Doxygen REQUIRED) set (HAS_DOT_VALUE "NO") if (DOXYGEN_DOT_FOUND) set (HAS_DOT_VALUE "YES") endif() configure_file(irony-server.cfg.in irony-server.cfg @ONLY) add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/irony-server.cfg WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM) endif() irony-mode-0.1.2/server/docs/irony-server.cfg.in000066400000000000000000000240261242454076400216000ustar00rootroot00000000000000# Doxyfile 1.8.2 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = irony-server PROJECT_NUMBER = PROJECT_BRIEF = "The bridge between libclang and Emacs." PROJECT_LOGO = OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = YES CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO SYMBOL_CACHE_SIZE = 0 LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_PACKAGE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../src INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.cpp *.h *.def RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = NO REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = YES HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = NO ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES USE_MATHJAX = NO MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_EXTENSIONS = SEARCHENGINE = YES SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = @HAS_DOT_VALUE@ DOT_NUM_THREADS = 0 DOT_FONTNAME = Helvetica DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = YES DOT_PATH = @DOXYGEN_DOT_PATH@ DOTFILE_DIRS = MSCFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES DOT_CLEANUP = YES irony-mode-0.1.2/server/src/000077500000000000000000000000001242454076400157015ustar00rootroot00000000000000irony-mode-0.1.2/server/src/CMakeLists.txt000066400000000000000000000040121242454076400204360ustar00rootroot00000000000000include(CheckLibClangBuiltinHeadersDir) find_package(LibClang REQUIRED) include_directories(${LIBCLANG_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) check_libclang_builtin_headers_dir() if (LIBCLANG_BUILTIN_HEADERS_DIR) # look for CLANG_BUILTIN_HEADERS_DIR usage in the code for an explanation add_definitions(-DCLANG_BUILTIN_HEADERS_DIR=\"${LIBCLANG_BUILTIN_HEADERS_DIR}\") endif() # not to be taken as a module-definition file to link on Windows set_source_files_properties(Commands.def PROPERTIES HEADER_FILE_ONLY TRUE) add_executable(irony-server support/arraysize.h support/CommandLineParser.cpp support/CommandLineParser.h support/iomanip_quoted.h support/NonCopyable.h support/TemporaryFile.cpp support/TemporaryFile.h Command.cpp Commands.def Command.h Irony.cpp Irony.h TUManager.cpp TUManager.h main.cpp) # retrieve the package version from irony.el function(irony_find_package_version OUTPUT_VAR) # this is a hack that force CMake to reconfigure, it is necessary to see if # the version in irony.el has changed, this is not possible to add the # definitions at build time configure_file(${PROJECT_SOURCE_DIR}/../irony.el ${CMAKE_CURRENT_BINARY_DIR}/irony.el COPYONLY) set(version_header "\;\; Version: ") file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/irony.el version LIMIT_COUNT 1 REGEX "^${version_header}*") if (NOT version) message (FATAL_ERROR "couldn't find irony.el's version header!") endif() string(LENGTH ${version_header} version_header_length) string(SUBSTRING ${version} ${version_header_length} -1 package_version) set(${OUTPUT_VAR} ${package_version} PARENT_SCOPE) endfunction() irony_find_package_version(IRONY_PACKAGE_VERSION) message(STATUS "Irony package version is '${IRONY_PACKAGE_VERSION}'") set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS IRONY_PACKAGE_VERSION=\"${IRONY_PACKAGE_VERSION}\") target_link_libraries(irony-server ${LIBCLANG_LIBRARIES}) install(TARGETS irony-server DESTINATION bin) irony-mode-0.1.2/server/src/Command.cpp000066400000000000000000000153261242454076400177720ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * \brief Command parser definitions. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #include "Command.h" #include "support/CommandLineParser.h" #include #include #include #include namespace { struct StringConverter { StringConverter(std::string *dest) : dest_(dest) { } bool operator()(const std::string &str) { *dest_ = str; return true; } private: std::string *dest_; }; struct UnsignedIntConverter { UnsignedIntConverter(unsigned *dest) : dest_(dest) { } bool operator()(const std::string &str) { char *end; long num = std::strtol(str.c_str(), &end, 10); if (end != (str.c_str() + str.size())) return false; if (errno == ERANGE) return false; if (num < 0) return false; unsigned long unum = static_cast(num); if (unum > std::numeric_limits::max()) return false; *dest_ = unum; return true; } private: unsigned *dest_; }; /// Convert "on" and "off" to a boolean struct OptionConverter { OptionConverter(bool *dest) : dest_(dest) { } bool operator()(const std::string &str) { if (str == "on") { *dest_ = true; } else if (str == "off") { *dest_ = false; } else { return false; } return true; } private: bool *dest_; }; } // unnamed namespace std::ostream &operator<<(std::ostream &os, const Command::Action &action) { os << "Command::"; switch (action) { #define X(sym, str, help) \ case Command::sym: \ os << #sym; \ break; #include "Commands.def" } return os; } std::ostream &operator<<(std::ostream &os, const Command &command) { os << "Command{action=" << command.action << ", " << "file='" << command.file << "', " << "line=" << command.line << ", " << "column=" << command.column << ", " << "flags=["; bool first = true; for (const std::string &flag : command.flags) { if (!first) os << ", "; os << "'" << flag << "'"; first = false; } os << "], " << "unsavedFiles.count=" << command.unsavedFiles.size() << ", " << "opt=" << (command.opt ? "on" : "off"); return os << "}"; } static Command::Action actionFromString(const std::string &actionStr) { #define X(sym, str, help) \ if (actionStr == str) \ return Command::sym; #include "Commands.def" return Command::Unknown; } CommandParser::CommandParser() : tempFile_("irony-server") { } Command *CommandParser::parse(const std::vector &argv) { command_.clear(); if (argv.begin() == argv.end()) { std::clog << "error: no command specified.\n" "See 'irony-server help' to list available commands\n"; return 0; } const std::string &actionStr = argv[0]; command_.action = actionFromString(actionStr); bool handleUnsaved = false; std::vector> positionalArgs; switch (command_.action) { case Command::CheckCompile: positionalArgs.push_back(StringConverter(&command_.file)); handleUnsaved = true; break; case Command::Complete: positionalArgs.push_back(StringConverter(&command_.file)); positionalArgs.push_back(UnsignedIntConverter(&command_.line)); positionalArgs.push_back(UnsignedIntConverter(&command_.column)); handleUnsaved = true; break; case Command::Help: case Command::Exit: break; case Command::SetDebug: positionalArgs.push_back(OptionConverter(&command_.opt)); break; case Command::Unknown: std::clog << "error: invalid command specified: " << actionStr << "\n"; return 0; } auto argIt = argv.begin() + 1; int argCount = std::distance(argIt, argv.end()); // parse optional arguments come first while (argIt != argv.end()) { // '-' is allowed as a "default" file, this isn't an option but a positional // argument if ((*argIt)[0] != '-' || *argIt == "-") break; const std::string &opt = *argIt; ++argIt; argCount--; if (handleUnsaved) { // TODO: handle multiple unsaved files if (opt == "--num-unsaved=1") { command_.unsavedFiles.resize(1); } } else { std::clog << "error: invalid option for '" << actionStr << "': '" << opt << "' unknown\n"; return 0; } } if (argCount != static_cast(positionalArgs.size())) { std::clog << "error: invalid number of arguments for '" << actionStr << "' (requires " << positionalArgs.size() << " got " << argCount << ")\n"; return 0; } for (auto fn : positionalArgs) { if (!fn(*argIt)) { std::clog << "error: parsing command '" << actionStr << "': invalid argument '" << *argIt << "'\n"; return 0; } ++argIt; } // '-' is used as a special file to inform that the buffer hasn't been saved // on disk and only the buffer content is available. libclang needs a file, so // this is treated as a special value for irony-server to create a temporary // file for this. note taht libclang will gladly accept '-' as a filename but // we don't want to let this happen since irony already reads stdin. if (command_.file == "-") { command_.file = tempFile_.getPath(); } // When a file is provided, the next line contains the compilation options to // pass to libclang. if (!command_.file.empty()) { std::string compileOptions; std::getline(std::cin, compileOptions); command_.flags = unescapeCommandLine(compileOptions); } // read unsaved files // filename // filesize // for (auto &p : command_.unsavedFiles) { std::getline(std::cin, p.first); unsigned length; std::string filesizeStr; std::getline(std::cin, filesizeStr); UnsignedIntConverter uintConverter(&length); if (!uintConverter(filesizeStr)) { std::clog << "error: invalid file size '" << filesizeStr << "'\n"; return 0; } p.second.resize(length); std::cin.read(p.second.data(), p.second.size()); CXUnsavedFile cxUnsavedFile; cxUnsavedFile.Filename = p.first.c_str(); cxUnsavedFile.Contents = p.second.data(); cxUnsavedFile.Length = p.second.size(); command_.cxUnsavedFiles.push_back(cxUnsavedFile); char nl; std::cin.read(&nl, 1); if (nl != '\n') { std::clog << "error: missing newline for unsaved file content\n"; return 0; } } return &command_; } irony-mode-0.1.2/server/src/Command.h000066400000000000000000000025161242454076400174340ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief Command parser declarations. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_COMMAND_H_ #define IRONY_MODE_SERVER_COMMAND_H_ #include #include "support/TemporaryFile.h" #include #include #include class TemporaryFile; struct Command { Command() { clear(); } void clear() { action = Unknown; flags.clear(); file.clear(); line = 0; column = 0; unsavedFiles.clear(); cxUnsavedFiles.clear(); opt = false; } #define X(sym, str, desc) sym, enum Action { #include "Commands.def" } action; std::vector flags; std::string file; unsigned line; unsigned column; // pair of (filename, content) std::vector>> unsavedFiles; std::vector cxUnsavedFiles; bool opt; }; std::ostream &operator<<(std::ostream &os, const Command::Action &action); std::ostream &operator<<(std::ostream &os, const Command &command); class CommandParser { public: CommandParser(); Command *parse(const std::vector &argv); private: Command command_; TemporaryFile tempFile_; }; #endif // IRONY_MODE_SERVER_COMMAND_H_ irony-mode-0.1.2/server/src/Commands.def000066400000000000000000000013331242454076400201220ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief Command list. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef X #error Please define the 'X(id, command, description)' macro before inclusion! #endif X(CheckCompile, "check-compile", "FILE - check that a given file compiles") X(Complete, "complete", "FILE LINE COL - perform code completion at a given location") X(Help, "help", "show this message") X(Exit, "exit", "exit interactive mode, print nothing") X(SetDebug, "set-debug", "[on|off] - enable or disable verbose logging") // sentinel value, should be the last one X(Unknown, "", "") #undef X irony-mode-0.1.2/server/src/Irony.cpp000066400000000000000000000223031242454076400175050ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * \brief irony-server "API" definitions. * * \sa Irony.h for more information. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #include "Irony.h" #include "support/iomanip_quoted.h" #include #include #include #include #include #include #if defined(CINDEX_VERSION_MAJOR) && defined(CINDEX_VERSION_MINOR) && \ (CINDEX_VERSION_MAJOR > 0 || CINDEX_VERSION_MINOR >= 6) #define HAS_BRIEF_COMMENTS_IN_COMPLETION 1 #else #define HAS_BRIEF_COMMENTS_IN_COMPLETION 0 #endif namespace { std::string cxStringToStd(CXString cxString) { std::string stdStr; if (const char *cstr = clang_getCString(cxString)) { stdStr = cstr; } clang_disposeString(cxString); return stdStr; } } // unnamed namespace Irony::Irony() : debug_(false) { } void Irony::check(const std::string &file, const std::vector &flags, const std::vector &unsavedFiles) { std::cout << "("; unsigned numDiag = 0; int fatals = 0; int errors = 0; int warnings = 0; CXTranslationUnit tu = tuManager_.parse(file, flags, unsavedFiles); if (tu) { numDiag = clang_getNumDiagnostics(tu); } else { fatals = 1; } for (unsigned i = 0; i < numDiag; ++i) { CXDiagnostic diagnostic = clang_getDiagnostic(tu, i); switch (clang_getDiagnosticSeverity(diagnostic)) { case CXDiagnostic_Fatal: fatals++; break; case CXDiagnostic_Error: errors++; break; case CXDiagnostic_Warning: warnings++; break; default: break; } clang_disposeDiagnostic(diagnostic); } if (fatals > 0) std::cout << " :fatals " << fatals; if (errors > 0) std::cout << " :errors " << errors; if (warnings > 0) std::cout << " :warnings " << warnings; std::cout << ")\n"; } namespace { class CompletionChunk { public: explicit CompletionChunk(CXCompletionString completionString) : completionString_(completionString) , numChunks_(clang_getNumCompletionChunks(completionString_)) , chunkIdx_(0) { } bool hasNext() const { return chunkIdx_ < numChunks_; } void next() { if (!hasNext()) { assert(0 && "out of range completion chunk"); abort(); } ++chunkIdx_; } CXCompletionChunkKind kind() const { return clang_getCompletionChunkKind(completionString_, chunkIdx_); } std::string text() const { return cxStringToStd( clang_getCompletionChunkText(completionString_, chunkIdx_)); } private: CXCompletionString completionString_; unsigned int numChunks_; unsigned chunkIdx_; }; } // unnamed namespace void Irony::complete(const std::string &file, unsigned line, unsigned col, const std::vector &flags, const std::vector &unsavedFiles) { // Register the settings the first time, to enable optimization of code // completion and request brief comments if available. TUManager::Settings settings; settings.parseTUOptions |= CXTranslationUnit_CacheCompletionResults; #if HAS_BRIEF_COMMENTS_IN_COMPLETION settings.parseTUOptions |= CXTranslationUnit_IncludeBriefCommentsInCodeCompletion; #endif (void)tuManager_.registerSettings(settings); CXTranslationUnit tu = tuManager_.getOrCreateTU(file, flags, unsavedFiles); if (tu == nullptr) { std::cout << "nil\n"; return; } if (CXCodeCompleteResults *completions = clang_codeCompleteAt(tu, file.c_str(), line, col, const_cast(unsavedFiles.data()), unsavedFiles.size(), (clang_defaultCodeCompleteOptions() & ~CXCodeComplete_IncludeCodePatterns) #if HAS_BRIEF_COMMENTS_IN_COMPLETION | CXCodeComplete_IncludeBriefComments #endif )) { if (debug_) { unsigned numDiags = clang_codeCompleteGetNumDiagnostics(completions); std::clog << "debug: complete: " << numDiags << " diagnostic(s)\n"; for (unsigned i = 0; i < numDiags; ++i) { CXDiagnostic diagnostic = clang_codeCompleteGetDiagnostic(completions, i); CXString s = clang_formatDiagnostic( diagnostic, clang_defaultDiagnosticDisplayOptions()); std::clog << clang_getCString(s) << std::endl; clang_disposeString(s); clang_disposeDiagnostic(diagnostic); } } clang_sortCodeCompletionResults(completions->Results, completions->NumResults); std::cout << "(\n"; // re-use the same buffers to avoid unnecessary allocations std::string typedtext, brief, resultType, prototype, postCompCar; std::vector postCompCdr; for (unsigned i = 0; i < completions->NumResults; ++i) { CXCompletionResult candidate = completions->Results[i]; unsigned priority = clang_getCompletionPriority(candidate.CompletionString); unsigned annotationStart = 0; bool typedTextSet = false; typedtext.clear(); brief.clear(); resultType.clear(); prototype.clear(); postCompCar.clear(); postCompCdr.clear(); for (CompletionChunk chunk(candidate.CompletionString); chunk.hasNext(); chunk.next()) { char ch = 0; auto chunkKind = chunk.kind(); switch (chunkKind) { case CXCompletionChunk_ResultType: resultType = chunk.text(); break; case CXCompletionChunk_TypedText: case CXCompletionChunk_Text: case CXCompletionChunk_Placeholder: case CXCompletionChunk_Informative: case CXCompletionChunk_CurrentParameter: prototype += chunk.text(); break; case CXCompletionChunk_LeftParen: ch = '('; break; case CXCompletionChunk_RightParen: ch = ')'; break; case CXCompletionChunk_LeftBracket: ch = '['; break; case CXCompletionChunk_RightBracket: ch = ']'; break; case CXCompletionChunk_LeftBrace: ch = '{'; break; case CXCompletionChunk_RightBrace: ch = '}'; break; case CXCompletionChunk_LeftAngle: ch = '<'; break; case CXCompletionChunk_RightAngle: ch = '>'; break; case CXCompletionChunk_Comma: ch = ','; break; case CXCompletionChunk_Colon: ch = ':'; break; case CXCompletionChunk_SemiColon: ch = ';'; break; case CXCompletionChunk_Equal: ch = '='; break; case CXCompletionChunk_HorizontalSpace: ch = ' '; break; case CXCompletionChunk_VerticalSpace: ch = '\n'; break; case CXCompletionChunk_Optional: // ignored for now break; } if (ch != 0) { prototype += ch; // commas look better followed by a space if (ch == ',') { prototype += ' '; } } if (typedTextSet) { if (ch != 0) { postCompCar += ch; if (ch == ',') { postCompCar += ' '; } } else if (chunkKind == CXCompletionChunk_Text || chunkKind == CXCompletionChunk_TypedText) { postCompCar += chunk.text(); } else if (chunkKind == CXCompletionChunk_Placeholder || chunkKind == CXCompletionChunk_CurrentParameter) { postCompCdr.push_back(postCompCar.size()); postCompCar += chunk.text(); postCompCdr.push_back(postCompCar.size()); } } // Consider only the first typed text. The CXCompletionChunk_TypedText // doc suggests that exactly one typed text will be given but at least // in Objective-C it seems that more than one can appear, see: // https://github.com/Sarcasm/irony-mode/pull/78#issuecomment-37115538 if (chunkKind == CXCompletionChunk_TypedText && !typedTextSet) { typedtext = chunk.text(); // annotation is what comes after the typedtext annotationStart = prototype.size(); typedTextSet = true; } } #if HAS_BRIEF_COMMENTS_IN_COMPLETION brief = cxStringToStd( clang_getCompletionBriefComment(candidate.CompletionString)); #endif // see irony-completion.el#irony-completion-candidates std::cout << '(' << support::quoted(typedtext) // << ' ' << priority // << ' ' << support::quoted(resultType) // << ' ' << support::quoted(brief) // << ' ' << support::quoted(prototype) // << ' ' << annotationStart // << " (" << support::quoted(postCompCar); for (unsigned index : postCompCdr) std::cout << ' ' << index; std::cout << ")" << ")\n"; } clang_disposeCodeCompleteResults(completions); std::cout << ")\n"; } } irony-mode-0.1.2/server/src/Irony.h000066400000000000000000000036331242454076400171570ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief irony-server "API" declarations. * * Contains the commands that the Emacs package relies on. These commands are * mostly wrappers around a subset of the features provided by libclang. Command * results are printed to \c std::cout as s-expr, in order to make it easy for * Emacs to consume. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_IRONY_H_ #define IRONY_MODE_SERVER_IRONY_H_ #include "TUManager.h" #include class Irony { public: Irony(); bool isDebugEnabled() const { return debug_; } /// \name Commands /// @{ /// \brief Set or unset debugging of commands. void setDebug(bool enable) { if (enable) debug_ = true; } /// \brief Check that a given file with a set of flags compiles. /// /// Can be used as a hint to know whether or not the compile flags are /// correct. /// /// Example output: /// /// \code{.el} /// () /// (:fatals 1) /// (:errors 3) /// (:warnings 5) /// (:errors 3 :warnings 5) /// \endcode /// void check(const std::string &file, const std::vector &flags, const std::vector &unsavedFiles); /// \brief Perform code completion at a given location. /// /// Print the list of candidate if any. The empty list is printed on error. /// /// Example output: /// /// \code{.el} /// ( /// ("foo") /// ("bar") /// ("baz") /// ) /// \endcode /// void complete(const std::string &file, unsigned line, unsigned col, const std::vector &flags, const std::vector &unsavedFiles); /// @} private: TUManager tuManager_; bool debug_; }; #endif // IRONY_MODE_SERVER_IRONY_H_ irony-mode-0.1.2/server/src/TUManager.cpp000066400000000000000000000161651242454076400202410ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * \brief See TUManager.hh * * This file is distributed under the GNU General Public License. See * COPYING for details. * */ #include "TUManager.h" #include typedef TUManager::SettingsID SettingsID; typedef TUManager::Settings Settings; Settings::Settings() : parseTUOptions(0) { } void Settings::merge(const Settings &other) { parseTUOptions |= other.parseTUOptions; } bool Settings::equals(const Settings &other) const { return parseTUOptions == other.parseTUOptions; } TUManager::TUManager() : index_(clang_createIndex(0, 0)) , translationUnits_() , effectiveSettings_() , settingsList_() { effectiveSettings_ = computeEffectiveSettings(); } TUManager::~TUManager() { clang_disposeIndex(index_); } CXTranslationUnit &TUManager::tuRef(const std::string &filename, const std::vector &flags) { CXTranslationUnit &tu = translationUnits_[filename]; // if the flags changed since the last time, invalidate the translation unit auto &flagsCache = flagsPerFileCache_[filename]; if (flagsCache.size() != flags.size() || !std::equal(flagsCache.begin(), flagsCache.end(), flags.begin())) { if (tu) { clang_disposeTranslationUnit(tu); tu = nullptr; } // remember the flags for the next parse flagsCache = flags; } return tu; } CXTranslationUnit TUManager::parse(const std::string &filename, const std::vector &flags, const std::vector &unsavedFiles) { CXTranslationUnit &tu = tuRef(filename, flags); if (tu == nullptr) { std::vector argv; #ifdef CLANG_BUILTIN_HEADERS_DIR // Make sure libclang find its builtin headers, this is a known issue with // libclang, see: // - http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-July/022893.html // // > Make sure that Clang is using its own . It will be in a directory // > ending in clang/3.2/include/ where 3.2 is the version of clang that you // > are using. You may need to explicitly add it to your header search. // > Usually clang finds this directory relative to the executable with // > CompilerInvocation::GetResourcesPath(Argv0, MainAddr), but using just // > the libraries, it can't automatically find it. argv.push_back("-isystem"); argv.push_back(CLANG_BUILTIN_HEADERS_DIR); #endif for (auto &flag : flags) { argv.push_back(flag.c_str()); } tu = clang_parseTranslationUnit( index_, filename.c_str(), argv.data(), static_cast(argv.size()), const_cast(unsavedFiles.data()), unsavedFiles.size(), effectiveSettings_.parseTUOptions); } if (tu == nullptr) { std::clog << "error: libclang couldn't parse '" << filename << "'\n"; return 0; } // Reparsing is necessary to enable optimizations. // // From the clang mailing list (cfe-dev): // From: Douglas Gregor // Subject: Re: Clang indexing library performance // ... // You want to use the "default editing options" when parsing the translation // unit // clang_defaultEditingTranslationUnitOptions() // and then reparse at least once. That will enable the various // code-completion optimizations that should bring this time down // significantly. if (clang_reparseTranslationUnit( tu, unsavedFiles.size(), const_cast(unsavedFiles.data()), clang_defaultReparseOptions(tu))) { // a 'fatal' error occured (even a diagnostic is impossible) clang_disposeTranslationUnit(tu); std::clog << "error: libclang couldn't reparse '" << filename << "'\n"; tu = 0; return 0; } return tu; } CXTranslationUnit TUManager::getOrCreateTU(const std::string &filename, const std::vector &flags, const std::vector &unsavedFiles) { if (auto tu = tuRef(filename, flags)) return tu; return parse(filename, flags, unsavedFiles); } SettingsID TUManager::registerSettings(const Settings &settings) { SettingsID settingsID = settingsList_.insert(settingsList_.end(), settings); onSettingsChanged(); return settingsID; } void TUManager::unregisterSettings(SettingsID settingsID) { onSettingsChanged(); settingsList_.erase(settingsID); } void TUManager::onSettingsChanged() { const Settings &newSettings = computeEffectiveSettings(); if (newSettings.equals(effectiveSettings_)) return; effectiveSettings_ = newSettings; invalidateAllCachedTUs(); } Settings TUManager::computeEffectiveSettings() const { Settings settings; settings.parseTUOptions = clang_defaultEditingTranslationUnitOptions(); // this seems necessary to trigger "correct" reparse (/codeCompleteAt) // clang_reparseTranslationUnit documentation states: // // > * \param TU The translation unit whose contents will be re-parsed. The // > * translation unit must originally have been built with // > * \c clang_createTranslationUnitFromSourceFile(). // // clang_createTranslationUnitFromSourceFile() is just a call to // clang_parseTranslationUnit() with // CXTranslationUnit_DetailedPreprocessingRecord enabled but because we // want some other flags to be set we can't just call // clang_createTranslationUnitFromSourceFile() settings.parseTUOptions |= CXTranslationUnit_DetailedPreprocessingRecord; for (std::list::const_iterator it = settingsList_.begin(), end = settingsList_.end(); it != end; ++it) { settings.merge(*it); } #if !defined(CINDEX_VERSION_MAJOR) || !defined(CINDEX_VERSION_MINOR) || \ (CINDEX_VERSION_MAJOR == 0 && CINDEX_VERSION_MINOR < 6) // XXX: A bug in old version of Clang (at least '3.1-8') caused the completion // to fail on the standard library types when // CXTranslationUnit_PrecompiledPreamble is used. We disable this option // for old versions of libclang. As a result the completion will work but // significantly slower. // -- https://github.com/Sarcasm/irony-mode/issues/4 settings.parseTUOptions &= ~CXTranslationUnit_PrecompiledPreamble; #endif // Completion results caching doesn't seem to work right, changes at the top // of the file (i.e: new declarations) aren't detected and do not appear in // completion results. settings.parseTUOptions &= ~CXTranslationUnit_CacheCompletionResults; return settings; } void TUManager::invalidateCachedTU(const std::string &filename) { TranslationUnitsMap::iterator it = translationUnits_.find(filename); if (it != translationUnits_.end()) { if (CXTranslationUnit &tu = it->second) clang_disposeTranslationUnit(tu); translationUnits_.erase(it); } } void TUManager::invalidateAllCachedTUs() { TranslationUnitsMap::iterator it = translationUnits_.begin(); while (it != translationUnits_.end()) { if (CXTranslationUnit &tu = it->second) { clang_disposeTranslationUnit(tu); translationUnits_.erase(it++); // post-increment keeps the iterator valid } else { ++it; } } } irony-mode-0.1.2/server/src/TUManager.h000066400000000000000000000121351242454076400176770ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief Translation Unit manager. * * Keeps a cache of translation units, reparsing or recreating them as * necessary. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_TUMANAGER_H_ #define IRONY_MODE_SERVER_TUMANAGER_H_ #include "support/NonCopyable.h" #include #include #include #include #include class TUManager : public util::NonCopyable { public: /** * \brief A structure to configure/tune the parsing of translation units. * * No special settings are enabled by default. * * For example to tune completion requests: * \code TUManager tuManager; TUManager::Settings settings; settings.parseTUOptions |= CXTranslationUnit_CacheCompletionResults; TUManager::SettingsID settingsID = tuManager.registerSettings(settings); // tuManager.unregisterSettings(settingsID); \endcode */ struct Settings { unsigned parseTUOptions; Settings(); /** * \brief Merge another \c Settings into this one. * * \param other */ void merge(const Settings &other); bool equals(const Settings &other) const; }; /** * \brief A unique ID referering to a registered setting. * * \sa registerSettings(), unregisterSettings() */ typedef std::list::iterator SettingsID; public: TUManager(); ~TUManager(); /** * \brief Parse \p filename with flag \p flags. * * The first time call \c clang_parseTranslationUnit() and save the TU in the * member \c translationUnits_, The next call with the same \p filename will * call \c clang_reparseTranslationUnit(). * * usage: * \code * std::vector flags; * flags.push_back("-I../utils"); * CXTranslationUnit tu = tuManager.parse("file.cpp", flags); * * if (! tu) * std::cerr << "parsing translation unit failed\n"; * \endcode * * \return The translation unit, if the parsing failed the translation unit * will be \c NULL. */ CXTranslationUnit parse(const std::string &filename, const std::vector &flags, const std::vector &unsavedFiles); /** * \brief Retrieve, creating it if necessary the TU associated to filename. * * \return The translation unit. Will be NULL if the translation unit couldn't * be created. */ CXTranslationUnit getOrCreateTU(const std::string &filename, const std::vector &flags, const std::vector &unsavedFiles); /** * \brief Register some \c Settings for this particular TUManager instance. * * \param settings * * \return An object representing this registration, aims to be used by * \c unregisterSettings() when the settings are no longer required. * * \sa unregisterSettings() */ SettingsID registerSettings(const Settings &settings); /** * \brief Unregister the given settings generated by a previous call to * \c registerSettings(). * * \param settingsID The settings to remove from this \c TUManager * instance. * * \pre \p settingsID was generated by a previous call to * \c registerSetttings(). * * \post Any use of \p settingsID will be invalid. * * \sa registerSetttings() */ void unregisterSettings(SettingsID settingsID); /** * \brief Invalidate a given cached TU, the next use of a TU will require * reparsing. * * This can be useful for example: when the flags used to compile a file have * changed. * * \param filename The filename for which the associated * translation unit flags need to be invalidated. * * \sa invalidateAllCachedTUs() */ void invalidateCachedTU(const std::string &filename); /** * \brief Invalidate all cached TU, the next use of a TU will require * reparsing. * * \sa invalidateCachedTU() */ void invalidateAllCachedTUs(); private: /** * \brief Recalculate the settings and invalidate cached translation units. */ void onSettingsChanged(); Settings computeEffectiveSettings() const; /** * \brief Get a reference to the translation unit that matches \p filename * with the given set of flags. * * The TU will be null if it has never been parsed or if the flags have * changed. * * \todo Find a proper name. */ CXTranslationUnit &tuRef(const std::string &filename, const std::vector &flags); private: typedef std::map TranslationUnitsMap; typedef std::map> FilenameFlagsMap; private: CXIndex index_; TranslationUnitsMap translationUnits_; // cache variable FilenameFlagsMap flagsPerFileCache_; Settings effectiveSettings_; std::list settingsList_; }; #endif /* !IRONY_MODE_SERVER_TUMANAGER_H_ */ irony-mode-0.1.2/server/src/main.cpp000066400000000000000000000111721242454076400173330ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #include "Irony.h" #include "Command.h" #include "support/CommandLineParser.h" #include #include #include #include #include #include #include #include static void printHelp() { std::cout << "usage: irony-server [OPTIONS...] [COMMAND] [ARGS...]\n" "Options:\n" " -v, --version\n" " -h, --help\n" " -i, --interactive\n" " -d, --debug\n" " --log-file PATH\n" "\n" "Commands:\n"; #define X(sym, str, desc) \ if (Command::sym != Command::Unknown) \ std::cout << std::left << std::setw(18) << " " str << desc << "\n"; #include "Commands.def" } static void printVersion() { // do not change the format for the first line, external programs should be // able to rely on it std::cout << "irony-server version " IRONY_PACKAGE_VERSION "\n"; } static void dumpUnsavedFiles(Command &command) { for (int i = 0; i < static_cast(command.unsavedFiles.size()); ++i) { std::clog << "unsaved file " << i + 1 << ": " << command.unsavedFiles[i].first << "\n" << "----\n"; std::copy(command.unsavedFiles[i].second.begin(), command.unsavedFiles[i].second.end(), std::ostream_iterator(std::clog)); std::clog << "----\n"; } } struct CommandProviderInterface { virtual ~CommandProviderInterface() { } virtual std::vector nextCommand() = 0; }; struct CommandLineCommandProvider : CommandProviderInterface { CommandLineCommandProvider(const std::vector &argv) : argv_(argv), firstCall_(true) { } std::vector nextCommand() { if (firstCall_) { firstCall_ = false; return argv_; } return std::vector(1, "exit"); } private: std::vector argv_; bool firstCall_; }; struct InteractiveCommandProvider : CommandProviderInterface { std::vector nextCommand() { std::string line; if (std::getline(std::cin, line)) { return unescapeCommandLine(line); } return std::vector(1, "exit"); } }; int main(int ac, const char *av[]) { std::vector argv(&av[1], &av[ac]); // stick to STL streams, no mix of C and C++ for IO operations std::cin.sync_with_stdio(false); std::cout.sync_with_stdio(false); std::cerr.sync_with_stdio(false); std::clog.sync_with_stdio(false); bool interactiveMode = false; Irony irony; if (ac == 1) { printHelp(); return 1; } std::ofstream logFile; unsigned optCount = 0; while (optCount < argv.size()) { const std::string &opt = argv[optCount]; if (opt.c_str()[0] != '-') break; if (opt == "--help" || opt == "-h") { printHelp(); return 0; } if (opt == "--version" || opt == "-v") { printVersion(); return 0; } if (opt == "--interactive" || opt == "-i") { interactiveMode = true; } else if (opt == "--debug" || opt == "-d") { irony.setDebug(true); } else if (opt == "--log-file" && (optCount + 1) < argv.size()) { ++optCount; logFile.open(argv[optCount]); std::clog.rdbuf(logFile.rdbuf()); } else { std::cerr << "error: invalid option '" << opt << "'\n"; return 1; } ++optCount; } argv.erase(argv.begin(), argv.begin() + optCount); CommandParser commandParser; std::unique_ptr commandProvider; if (interactiveMode) { commandProvider.reset(new InteractiveCommandProvider()); } else { commandProvider.reset(new CommandLineCommandProvider(argv)); } while (Command *c = commandParser.parse(commandProvider->nextCommand())) { if (c->action != Command::Exit) { std::clog << "execute: " << *c << "\n"; if (irony.isDebugEnabled()) { dumpUnsavedFiles(*c); } } switch (c->action) { case Command::Help: printHelp(); break; case Command::CheckCompile: irony.check(c->file, c->flags, c->cxUnsavedFiles); break; case Command::Complete: irony.complete(c->file, c->line, c->column, c->flags, c->cxUnsavedFiles); break; case Command::Exit: return 0; case Command::SetDebug: irony.setDebug(c->opt); break; case Command::Unknown: assert(0 && "unreacheable code...reached!"); break; } std::cout << "\n;;EOT\n" << std::flush; } return 1; } irony-mode-0.1.2/server/src/support/000077500000000000000000000000001242454076400174155ustar00rootroot00000000000000irony-mode-0.1.2/server/src/support/CommandLineParser.cpp000066400000000000000000000052741242454076400234740ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #include "CommandLineParser.h" namespace { /// \brief A parser for escaped strings of command line arguments. /// /// Assumes \-escaping for quoted arguments (see the documentation of /// unescapeCommandLine(...)). class CommandLineArgumentParser { public: CommandLineArgumentParser(const std::string &CommandLine) : Input(CommandLine), Position(Input.begin() - 1) { } std::vector parse() { bool HasMoreInput = true; while (HasMoreInput && nextNonWhitespace()) { std::string Argument; HasMoreInput = parseStringInto(Argument); CommandLine.push_back(Argument); } return CommandLine; } private: // All private methods return true if there is more input available. bool parseStringInto(std::string &String) { do { if (*Position == '"') { if (!parseDoubleQuotedStringInto(String)) return false; } else if (*Position == '\'') { if (!parseSingleQuotedStringInto(String)) return false; } else { if (!parseFreeStringInto(String)) return false; } } while (*Position != ' '); return true; } bool parseDoubleQuotedStringInto(std::string &String) { if (!next()) return false; while (*Position != '"') { if (!skipEscapeCharacter()) return false; String.push_back(*Position); if (!next()) return false; } return next(); } bool parseSingleQuotedStringInto(std::string &String) { if (!next()) return false; while (*Position != '\'') { String.push_back(*Position); if (!next()) return false; } return next(); } bool parseFreeStringInto(std::string &String) { do { if (!skipEscapeCharacter()) return false; String.push_back(*Position); if (!next()) return false; } while (*Position != ' ' && *Position != '"' && *Position != '\''); return true; } bool skipEscapeCharacter() { if (*Position == '\\') { return next(); } return true; } bool nextNonWhitespace() { do { if (!next()) return false; } while (*Position == ' '); return true; } bool next() { ++Position; return Position != Input.end(); } private: const std::string Input; std::string::const_iterator Position; std::vector CommandLine; }; } // unnamed namespace std::vector unescapeCommandLine(const std::string &EscapedCommandLine) { CommandLineArgumentParser parser(EscapedCommandLine); return parser.parse(); } irony-mode-0.1.2/server/src/support/CommandLineParser.h000066400000000000000000000011071242454076400231300ustar00rootroot00000000000000/** * \file * \brief Facility to parse a command line into a string array. * * \note Please note that the code borrowed from the Clang, * lib/Tooling/JSONCompilationDatabase.cpp. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_SUPPORT_COMMAND_LINE_PARSER_H_ #define IRONY_MODE_SERVER_SUPPORT_COMMAND_LINE_PARSER_H_ #include #include std::vector unescapeCommandLine(const std::string &EscapedCommandLine); #endif // IRONY_MODE_SERVER_SUPPORT_COMMAND_LINE_PARSER_H_ irony-mode-0.1.2/server/src/support/NonCopyable.h000066400000000000000000000013101242454076400217720ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief NonCopyable class like in Boost. * * \see http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-copyable_Mixin * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_SUPPORT_NONCOPYABLE_H_ #define IRONY_MODE_SERVER_SUPPORT_NONCOPYABLE_H_ namespace util { class NonCopyable { protected: NonCopyable() { } // Protected non-virtual destructor ~NonCopyable() { } private: NonCopyable(const NonCopyable &); NonCopyable &operator=(const NonCopyable &); }; } // ! namespace util #endif /* !IRONY_MODE_SERVER_SUPPORT_NONCOPYABLE_H_ */ irony-mode-0.1.2/server/src/support/TemporaryFile.cpp000066400000000000000000000037251242454076400227120ustar00rootroot00000000000000/** * \file * \author Guillaume Papin * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #include "TemporaryFile.h" #include #include #include #include #include #include static std::string getTemporaryFileDirectory() { const char *temporaryDirEnvVars[] = {"TMPDIR", "TMP", "TEMP", "TEMPDIR"}; for (const char *envVar : temporaryDirEnvVars) { if (const char *dir = std::getenv(envVar)) return dir; } return "/tmp"; } TemporaryFile::TemporaryFile(const std::string &prefix, const std::string &suffix) : pathOrPattern_(prefix + "-%%%%%%" + suffix) { } TemporaryFile::~TemporaryFile() { if (openedFile_) { openedFile_.reset(); std::remove(pathOrPattern_.c_str()); } } const std::string &TemporaryFile::getPath() { if (!openedFile_) { openedFile_.reset(new std::fstream); std::random_device rd; std::default_random_engine e(rd()); std::uniform_int_distribution dist(0, 15); std::string pattern = pathOrPattern_; std::string tmpDir = getTemporaryFileDirectory() + "/"; int i = 0; do { // exiting is better than infinite loop if (++i > TemporaryFile::MAX_ATTEMPS) { std::cerr << "error: couldn't create temporary file, please check your " "temporary file directory (" << tmpDir << ")\n"; exit(EXIT_FAILURE); } // make the filename based on the pattern std::transform(pattern.begin(), pattern.end(), pathOrPattern_.begin(), [&e, &dist](char ch) { return ch == '%' ? "0123456789abcdef"[dist(e)] : ch; }); // create the file openedFile_->open(tmpDir + pathOrPattern_, std::ios_base::out); } while (!openedFile_->is_open()); pathOrPattern_ = tmpDir + pathOrPattern_; } return pathOrPattern_; } irony-mode-0.1.2/server/src/support/TemporaryFile.h000066400000000000000000000014731242454076400223550ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief Not the best piece of code out there. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_SUPPORT_TEMPORARY_FILE_H_ #define IRONY_MODE_SERVER_SUPPORT_TEMPORARY_FILE_H_ #include #include #include class TemporaryFile { enum { // if we can't create the temp file, exits. MAX_ATTEMPS = 25 }; public: TemporaryFile(const std::string &prefix, const std::string &suffix = ""); ~TemporaryFile(); /// Returns the path of this temporary filename const std::string &getPath(); private: std::string pathOrPattern_; std::unique_ptr openedFile_; }; #endif // IRONY_MODE_SERVER_SUPPORT_TEMPORARY_FILE_H_ irony-mode-0.1.2/server/src/support/arraysize.h000066400000000000000000000025361242454076400216050ustar00rootroot00000000000000/**-*-C++-*- * \file * \author Guillaume Papin * * \brief \c arraysize() and \c ARRAYSIZE_UNSAFE() definitions. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_SUPPORT_ARRAYSIZE_H_ #define IRONY_MODE_SERVER_SUPPORT_ARRAYSIZE_H_ #include template char (&ArraySizeHelper(T (&array)[N]))[N]; /// \brief Convenience macro to get the size of an array. /// /// \note Found in an article about the Chromium project, see /// http://software.intel.com/en-us/articles/pvs-studio-vs-chromium and /// http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/base/basictypes.h&q=arraysize&exact_package=chromium /// #define arraysize(array) (sizeof(ArraySizeHelper(array))) /// \brief \c arraysize() 'unsafe' version to use when the \c arraysize() macro /// can't be used. /// /// The \c arraysize() macro can't be used on an anonymous structure array for /// example. /// /// \note Be careful to check that the array passed is not just a pointer. /// #define ARRAYSIZE_UNSAFE(a) \ ((sizeof(a) / sizeof(*(a))) / \ static_cast(!(sizeof(a) % sizeof(*(a))))) #endif /* !IRONY_MODE_SERVER_SUPPORT_ARRAYSIZE_H_ */ irony-mode-0.1.2/server/src/support/iomanip_quoted.h000066400000000000000000000020101242454076400225740ustar00rootroot00000000000000/**-*-C++-*- * \file * \brief Dumb implementation of something that might look like C++14 * std::quoted. * * This file is distributed under the GNU General Public License. See * COPYING for details. */ #ifndef IRONY_MODE_SERVER_SUPPORT_IOMANIP_QUOTED_H_ #define IRONY_MODE_SERVER_SUPPORT_IOMANIP_QUOTED_H_ #include #include namespace support { namespace detail { struct quoted_string_proxy { quoted_string_proxy(std::string &s) : s(s) { } const std::string &s; }; std::ostream &operator<<(std::ostream &os, const quoted_string_proxy &q) { const std::string &s = q.s; os << '"'; if (s.find_first_of("\"\\") == std::string::npos) { os << s; } else { for (auto ch : s) { if (ch == '\\' || ch == '"') os << '\\'; os << ch; } } os << '"'; return os; } } // namespace detail detail::quoted_string_proxy quoted(std::string &s) { return detail::quoted_string_proxy(s); } } // namespace support #endif // IRONY_MODE_SERVER_SUPPORT_IOMANIP_QUOTED_H_ irony-mode-0.1.2/server/test/000077500000000000000000000000001242454076400160715ustar00rootroot00000000000000irony-mode-0.1.2/server/test/CMakeLists.txt000066400000000000000000000000311242454076400206230ustar00rootroot00000000000000add_subdirectory (elisp) irony-mode-0.1.2/server/test/elisp/000077500000000000000000000000001242454076400172055ustar00rootroot00000000000000irony-mode-0.1.2/server/test/elisp/CMakeLists.txt000066400000000000000000000023151242454076400217460ustar00rootroot00000000000000# On MS-Windows, emacs_dir is a special environment variable, which # indicates the full path of the directory in which Emacs is # installed. # # There is no standard location that I know of for Emacs on Windows so # using this special environment variable will at least help people # who build the server from inside Emacs. if(DEFINED ENV{emacs_dir}) list(APPEND EMACS_EXECUTABLE_HINTS $ENV{emacs_dir}/bin) endif() find_program(EMACS_EXECUTABLE emacs HINTS ${EMACS_EXECUTABLE_HINTS}) if (EMACS_EXECUTABLE) message(STATUS "Found emacs: ${EMACS_EXECUTABLE}") else() message(WARNING "emacs not found: elisp tests will be skipped!") return() endif() # # ert_test(name test_file) # # creates a test target named NAME which run the Elisp script TEST_FILE using # the Emacs ERT testing framework. # # FIXME: assumes MELPA is configured... function(ert_test name test_file) add_test(${name} ${EMACS_EXECUTABLE} -batch -l package --eval "(package-initialize) (unless (require 'cl-lib nil t) (package-refresh-contents) (package-install 'cl-lib))" -l ${CMAKE_CURRENT_SOURCE_DIR}/${test_file} -f ert-run-tests-batch-and-exit) endfunction() ert_test(irony-el irony.el) ert_test(irony-cdb-el irony-cdb.el) irony-mode-0.1.2/server/test/elisp/irony-cdb.el000066400000000000000000000023731242454076400214220ustar00rootroot00000000000000;; -*-no-byte-compile: t; -*- (load (concat (file-name-directory (or load-file-name buffer-file-name)) "test-config")) (require 'irony-cdb) ;; (ert-deftest cdb/gen-clang-args/end-of-opts () ;; (should (not ;; (irony-cdb-gen-clang-args '("--" "a.c" "b.c"))))) ;; (ert-deftest cdb/gen-clang-args/order-kept () ;; "Test if the arguments are given back in the same order as they ;; were given. ;; An argument may be dependent of the previous one, it's important ;; to keep the ordering right." ;; (let ((args '("-Wall" "-ferror-limit" "42" "-Wextra"))) ;; (should (equal ;; args ;; (irony-cdb-gen-clang-args args))))) ;; (ert-deftest cdb/gen-clang-args/remove-files-1 () ;; "Test if files are removed from the arguments list." ;; (let ((args '("a.c" "b.c"))) ;; (should (not ;; (irony-cdb-gen-clang-args args))))) ;; (ert-deftest cdb/gen-clang-args/remove-files-2 () ;; "Test if files are removed from the arguments list." ;; (let ((args '("-Wall" "-D_BLAH" "a.c" "b.c" "-Werror" "-I/usr/include/blah"))) ;; (should (equal ;; '("-Wall" "-D_BLAH" "-Werror" "-I/usr/include/blah") ;; (irony-cdb-gen-clang-args args))))) irony-mode-0.1.2/server/test/elisp/irony.el000066400000000000000000000106201242454076400206660ustar00rootroot00000000000000;; -*-no-byte-compile: t; -*- (load (concat (file-name-directory (or load-file-name buffer-file-name)) "test-config")) (ert-deftest irony/buffer-size-in-bytes () (with-temp-buffer ;; this smiley takes 3 bytes apparently (insert "☺") (should (equal 3 (irony-buffer-size-in-bytes))) (erase-buffer) (insert "☺\n") (should (equal 4 (irony-buffer-size-in-bytes))) (erase-buffer) (insert "\t") (should (equal 1 (irony-buffer-size-in-bytes))))) (ert-deftest irony/split-command-line/just-spaces () (let ((cmd-line "clang -Wall -Wextra")) (should (equal '("clang" "-Wall" "-Wextra") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/start-with-space () (let ((cmd-line " clang -Wall -Wextra")) (should (equal '("clang" "-Wall" "-Wextra") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/end-with-space () (let ((cmd-line "clang -Wall -Wextra ")) (should (equal '("clang" "-Wall" "-Wextra") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/space-everywhere () (let ((cmd-line " \t clang \t -Wall \t -Wextra\t")) (should (equal '("clang" "-Wall" "-Wextra") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/with-quotes () (let ((cmd-line "clang -Wall -Wextra \"-I/tmp/dir with spaces\"")) (should (equal '("clang" "-Wall" "-Wextra" "-I/tmp/dir with spaces") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/with-quotes () "Test if files are removed from the arguments list. https://github.com/Sarcasm/irony-mode/issues/101" (let ((cmd-line "g++ -DFOO=\\\"\\\"")) (should (equal '("g++" "-DFOO=\"\"") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/start-with-quotes () (let ((cmd-line "\"cl ang\" -Wall -Wextra \"-I/tmp/dir with spaces\"")) (should (equal '("cl ang" "-Wall" "-Wextra" "-I/tmp/dir with spaces") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/quotes-in-word () (let ((cmd-line "clang -Wall -Wextra -I\"/tmp/dir with spaces\"")) (should (equal '("clang" "-Wall" "-Wextra" "-I/tmp/dir with spaces") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/ill-end-quote () :expected-result :failed (let ((cmd-line "clang -Wall -Wextra\"")) (should (equal '("clang" "-Wall" "-Wextra" "-I/tmp/dir with spaces") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/backslash-1 () (let ((cmd-line "clang\\ -Wall")) (should (equal '("clang -Wall") (irony-split-command-line cmd-line))))) (ert-deftest irony/split-command-line/backslash-2 () (let ((cmd-line "\\\\\\ clang\\ -Wall\\")) (should (equal '("\\ clang -Wall\\") (irony-split-command-line cmd-line))))) (ert-deftest irony/extract-working-directory-option/not-specified () (let ((compile-flags '("-Wall"))) (should (not (irony--extract-working-directory-option compile-flags))))) (ert-deftest irony/extract-working-directory-option/specified-1 () (let ((compile-flags '("-working-directory" "/tmp/lol"))) (should (equal "/tmp/lol" (irony--extract-working-directory-option compile-flags))))) (ert-deftest irony/extract-working-directory-option/specified-2 () (let ((compile-flags '("-Wall" "-working-directory=/tmp/lol" "-Wshadow"))) (should (equal "/tmp/lol" (irony--extract-working-directory-option compile-flags))))) ;; TODO: restore functionality ;; (ert-deftest irony/include-directories-1 () ;; (let ((irony-compile-flags '("-Iinclude" "-I/tmp/foo")) ;; (irony-compile-flags-work-dir "/tmp/blah/")) ;; (should (equal ;; '("/tmp/blah/include" "/tmp/foo") ;; (irony-user-search-paths))))) ;; (ert-deftest irony/include-directories-2 () ;; (let ((irony-compile-flags '("-Wextra" "-Iinclude" "-I" "foo" "-Wall")) ;; (irony-compile-flags-work-dir "/tmp/blah/")) ;; (should (equal ;; '("/tmp/blah/include" ;; "/tmp/blah/foo") ;; (irony-user-search-paths))))) irony-mode-0.1.2/server/test/elisp/support/000077500000000000000000000000001242454076400207215ustar00rootroot00000000000000irony-mode-0.1.2/server/test/elisp/support/ert.el000066400000000000000000003166131242454076400220470ustar00rootroot00000000000000;;; ert.el --- Emacs Lisp Regression Testing ;; Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc. ;; Author: Christian M. Ohler ;; Keywords: lisp, tools ;; This file is NOT part of GNU Emacs. ;; 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 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 ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see `http://www.gnu.org/licenses/'. ;;; Commentary: ;; ERT is a tool for automated testing in Emacs Lisp. Its main ;; features are facilities for defining and running test cases and ;; reporting the results as well as for debugging test failures ;; interactively. ;; ;; The main entry points are `ert-deftest', which is similar to ;; `defun' but defines a test, and `ert-run-tests-interactively', ;; which runs tests and offers an interactive interface for inspecting ;; results and debugging. There is also ;; `ert-run-tests-batch-and-exit' for non-interactive use. ;; ;; The body of `ert-deftest' forms resembles a function body, but the ;; additional operators `should', `should-not' and `should-error' are ;; available. `should' is similar to cl's `assert', but signals a ;; different error when its condition is violated that is caught and ;; processed by ERT. In addition, it analyzes its argument form and ;; records information that helps debugging (`assert' tries to do ;; something similar when its second argument SHOW-ARGS is true, but ;; `should' is more sophisticated). For information on `should-not' ;; and `should-error', see their docstrings. ;; ;; See ERT's info manual as well as the docstrings for more details. ;; To compile the manual, run `makeinfo ert.texinfo' in the ERT ;; directory, then C-u M-x info ert.info in Emacs to view it. ;; ;; To see some examples of tests written in ERT, see its self-tests in ;; ert-tests.el. Some of these are tricky due to the bootstrapping ;; problem of writing tests for a testing tool, others test simple ;; functions and are straightforward. ;;; Code: (eval-when-compile (require 'cl)) (require 'button) (require 'debug) (require 'easymenu) (require 'ewoc) (require 'find-func) (require 'help) ;;; UI customization options. (defgroup ert () "ERT, the Emacs Lisp regression testing tool." :prefix "ert-" :group 'lisp) (defface ert-test-result-expected '((((class color) (background light)) :background "green1") (((class color) (background dark)) :background "green3")) "Face used for expected results in the ERT results buffer." :group 'ert) (defface ert-test-result-unexpected '((((class color) (background light)) :background "red1") (((class color) (background dark)) :background "red3")) "Face used for unexpected results in the ERT results buffer." :group 'ert) ;;; Copies/reimplementations of cl functions. (defun ert--cl-do-remf (plist tag) "Copy of `cl-do-remf'. Modify PLIST by removing TAG." (let ((p (cdr plist))) (while (and (cdr p) (not (eq (car (cdr p)) tag))) (setq p (cdr (cdr p)))) (and (cdr p) (progn (setcdr p (cdr (cdr (cdr p)))) t)))) (defun ert--remprop (sym tag) "Copy of `cl-remprop'. Modify SYM's plist by removing TAG." (let ((plist (symbol-plist sym))) (if (and plist (eq tag (car plist))) (progn (setplist sym (cdr (cdr plist))) t) (ert--cl-do-remf plist tag)))) (defun ert--remove-if-not (ert-pred ert-list) "A reimplementation of `remove-if-not'. ERT-PRED is a predicate, ERT-LIST is the input list." (loop for ert-x in ert-list if (funcall ert-pred ert-x) collect ert-x)) (defun ert--intersection (a b) "A reimplementation of `intersection'. Intersect the sets A and B. Elements are compared using `eql'." (loop for x in a if (memql x b) collect x)) (defun ert--set-difference (a b) "A reimplementation of `set-difference'. Subtract the set B from the set A. Elements are compared using `eql'." (loop for x in a unless (memql x b) collect x)) (defun ert--set-difference-eq (a b) "A reimplementation of `set-difference'. Subtract the set B from the set A. Elements are compared using `eq'." (loop for x in a unless (memq x b) collect x)) (defun ert--union (a b) "A reimplementation of `union'. Compute the union of the sets A and B. Elements are compared using `eql'." (append a (ert--set-difference b a))) (eval-and-compile (defvar ert--gensym-counter 0)) (eval-and-compile (defun ert--gensym (&optional prefix) "Only allows string PREFIX, not compatible with CL." (unless prefix (setq prefix "G")) (make-symbol (format "%s%s" prefix (prog1 ert--gensym-counter (incf ert--gensym-counter)))))) (defun ert--coerce-to-vector (x) "Coerce X to a vector." (when (char-table-p x) (error "Not supported")) (if (vectorp x) x (vconcat x))) (defun* ert--remove* (x list &key key test) "Does not support all the keywords of remove*." (unless key (setq key #'identity)) (unless test (setq test #'eql)) (loop for y in list unless (funcall test x (funcall key y)) collect y)) (defun ert--string-position (c s) "Return the position of the first occurrence of C in S, or nil if none." (loop for i from 0 for x across s when (eql x c) return i)) (defun ert--mismatch (a b) "Return index of first element that differs between A and B. Like `mismatch'. Uses `equal' for comparison." (cond ((or (listp a) (listp b)) (ert--mismatch (ert--coerce-to-vector a) (ert--coerce-to-vector b))) ((> (length a) (length b)) (ert--mismatch b a)) (t (let ((la (length a)) (lb (length b))) (assert (arrayp a) t) (assert (arrayp b) t) (assert (<= la lb) t) (loop for i below la when (not (equal (aref a i) (aref b i))) return i finally (return (if (/= la lb) la (assert (equal a b) t) nil))))))) (defun ert--subseq (seq start &optional end) "Return a subsequence of SEQ from START to END." (when (char-table-p seq) (error "Not supported")) (let ((vector (substring (ert--coerce-to-vector seq) start end))) (etypecase seq (vector vector) (string (concat vector)) (list (append vector nil)) (bool-vector (loop with result = (make-bool-vector (length vector) nil) for i below (length vector) do (setf (aref result i) (aref vector i)) finally (return result))) (char-table (assert nil))))) (defun ert-equal-including-properties (a b) "Return t if A and B have similar structure and contents. This is like `equal-including-properties' except that it compares the property values of text properties structurally (by recursing) rather than with `eq'. Perhaps this is what `equal-including-properties' should do in the first place; see Emacs bug 6581 at URL `http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6581'." ;; This implementation is inefficient. Rather than making it ;; efficient, let's hope bug 6581 gets fixed so that we can delete ;; it altogether. (not (ert--explain-not-equal-including-properties a b))) ;;; Defining and locating tests. ;; The data structure that represents a test case. (defstruct ert-test (name nil) (documentation nil) (body (assert nil)) (most-recent-result nil) (expected-result-type ':passed) (tags '())) (defun ert-test-boundp (symbol) "Return non-nil if SYMBOL names a test." (and (get symbol 'ert--test) t)) (defun ert-get-test (symbol) "If SYMBOL names a test, return that. Signal an error otherwise." (unless (ert-test-boundp symbol) (error "No test named `%S'" symbol)) (get symbol 'ert--test)) (defun ert-set-test (symbol definition) "Make SYMBOL name the test DEFINITION, and return DEFINITION." (when (eq symbol 'nil) ;; We disallow nil since `ert-test-at-point' and related functions ;; want to return a test name, but also need an out-of-band value ;; on failure. Nil is the most natural out-of-band value; using 0 ;; or "" or signalling an error would be too awkward. ;; ;; Note that nil is still a valid value for the `name' slot in ;; ert-test objects. It designates an anonymous test. (error "Attempt to define a test named nil")) (put symbol 'ert--test definition) definition) (defun ert-make-test-unbound (symbol) "Make SYMBOL name no test. Return SYMBOL." (ert--remprop symbol 'ert--test) symbol) (defun ert--parse-keys-and-body (keys-and-body) "Split KEYS-AND-BODY into keyword-and-value pairs and the remaining body. KEYS-AND-BODY should have the form of a property list, with the exception that only keywords are permitted as keys and that the tail -- the body -- is a list of forms that does not start with a keyword. Returns a two-element list containing the keys-and-values plist and the body." (let ((extracted-key-accu '()) (remaining keys-and-body)) (while (and (consp remaining) (keywordp (first remaining))) (let ((keyword (pop remaining))) (unless (consp remaining) (error "Value expected after keyword %S in %S" keyword keys-and-body)) (when (assoc keyword extracted-key-accu) (warn "Keyword %S appears more than once in %S" keyword keys-and-body)) (push (cons keyword (pop remaining)) extracted-key-accu))) (setq extracted-key-accu (nreverse extracted-key-accu)) (list (loop for (key . value) in extracted-key-accu collect key collect value) remaining))) ;;;###autoload (defmacro* ert-deftest (name () &body docstring-keys-and-body) "Define NAME (a symbol) as a test. BODY is evaluated as a `progn' when the test is run. It should signal a condition on failure or just return if the test passes. `should', `should-not' and `should-error' are useful for assertions in BODY. Use `ert' to run tests interactively. Tests that are expected to fail can be marked as such using :expected-result. See `ert-test-result-type-p' for a description of valid values for RESULT-TYPE. \(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] \ \[:tags '(TAG...)] BODY...)" (declare (debug (&define :name test name sexp [&optional stringp] [&rest keywordp sexp] def-body)) (doc-string 3) (indent 2)) (let ((documentation nil) (documentation-supplied-p nil)) (when (stringp (first docstring-keys-and-body)) (setq documentation (pop docstring-keys-and-body) documentation-supplied-p t)) (destructuring-bind ((&key (expected-result nil expected-result-supplied-p) (tags nil tags-supplied-p)) body) (ert--parse-keys-and-body docstring-keys-and-body) `(progn (ert-set-test ',name (make-ert-test :name ',name ,@(when documentation-supplied-p `(:documentation ,documentation)) ,@(when expected-result-supplied-p `(:expected-result-type ,expected-result)) ,@(when tags-supplied-p `(:tags ,tags)) :body (lambda () ,@body))) ;; This hack allows `symbol-file' to associate `ert-deftest' ;; forms with files, and therefore enables `find-function' to ;; work with tests. However, it leads to warnings in ;; `unload-feature', which doesn't know how to undefine tests ;; and has no mechanism for extension. (push '(ert-deftest . ,name) current-load-list) ',name)))) ;; We use these `put' forms in addition to the (declare (indent)) in ;; the defmacro form since the `declare' alone does not lead to ;; correct indentation before the .el/.elc file is loaded. ;; Autoloading these `put' forms solves this. ;;;###autoload (progn ;; TODO(ohler): Figure out what these mean and make sure they are correct. (put 'ert-deftest 'lisp-indent-function 2) (put 'ert-info 'lisp-indent-function 1)) (defvar ert--find-test-regexp (concat "^\\s-*(ert-deftest" find-function-space-re "%s\\(\\s-\\|$\\)") "The regexp the `find-function' mechanisms use for finding test definitions.") (put 'ert-test-failed 'error-conditions '(error ert-test-failed)) (put 'ert-test-failed 'error-message "Test failed") (defun ert-pass () "Terminate the current test and mark it passed. Does not return." (throw 'ert--pass nil)) (defun ert-fail (data) "Terminate the current test and mark it failed. Does not return. DATA is displayed to the user and should state the reason of the failure." (signal 'ert-test-failed (list data))) ;;; The `should' macros. (defvar ert--should-execution-observer nil) (defun ert--signal-should-execution (form-description) "Tell the current `should' form observer (if any) about FORM-DESCRIPTION." (when ert--should-execution-observer (funcall ert--should-execution-observer form-description))) (defun ert--special-operator-p (thing) "Return non-nil if THING is a symbol naming a special operator." (and (symbolp thing) (let ((definition (indirect-function thing t))) (and (subrp definition) (eql (cdr (subr-arity definition)) 'unevalled))))) (defun ert--expand-should-1 (whole form inner-expander) "Helper function for the `should' macro and its variants." (let ((form ;; If `cl-macroexpand' isn't bound, the code that we're ;; compiling doesn't depend on cl and thus doesn't need an ;; environment arg for `macroexpand'. (if (fboundp 'cl-macroexpand) ;; Suppress warning about run-time call to cl funtion: we ;; only call it if it's fboundp. (with-no-warnings (cl-macroexpand form (and (boundp 'cl-macro-environment) cl-macro-environment))) (macroexpand form)))) (cond ((or (atom form) (ert--special-operator-p (car form))) (let ((value (ert--gensym "value-"))) `(let ((,value (ert--gensym "ert-form-evaluation-aborted-"))) ,(funcall inner-expander `(setq ,value ,form) `(list ',whole :form ',form :value ,value) value) ,value))) (t (let ((fn-name (car form)) (arg-forms (cdr form))) (assert (or (symbolp fn-name) (and (consp fn-name) (eql (car fn-name) 'lambda) (listp (cdr fn-name))))) (let ((fn (ert--gensym "fn-")) (args (ert--gensym "args-")) (value (ert--gensym "value-")) (default-value (ert--gensym "ert-form-evaluation-aborted-"))) `(let ((,fn (function ,fn-name)) (,args (list ,@arg-forms))) (let ((,value ',default-value)) ,(funcall inner-expander `(setq ,value (apply ,fn ,args)) `(nconc (list ',whole) (list :form `(,,fn ,@,args)) (unless (eql ,value ',default-value) (list :value ,value)) (let ((-explainer- (and (symbolp ',fn-name) (get ',fn-name 'ert-explainer)))) (when -explainer- (list :explanation (apply -explainer- ,args))))) value) ,value)))))))) (defun ert--expand-should (whole form inner-expander) "Helper function for the `should' macro and its variants. Analyzes FORM and returns an expression that has the same semantics under evaluation but records additional debugging information. INNER-EXPANDER should be a function and is called with two arguments: INNER-FORM and FORM-DESCRIPTION-FORM, where INNER-FORM is an expression equivalent to FORM, and FORM-DESCRIPTION-FORM is an expression that returns a description of FORM. INNER-EXPANDER should return code that calls INNER-FORM and performs the checks and error signalling specific to the particular variant of `should'. The code that INNER-EXPANDER returns must not call FORM-DESCRIPTION-FORM before it has called INNER-FORM." (lexical-let ((inner-expander inner-expander)) (ert--expand-should-1 whole form (lambda (inner-form form-description-form value-var) (let ((form-description (ert--gensym "form-description-"))) `(let (,form-description) ,(funcall inner-expander `(unwind-protect ,inner-form (setq ,form-description ,form-description-form) (ert--signal-should-execution ,form-description)) `,form-description value-var))))))) (defmacro* should (form) "Evaluate FORM. If it returns nil, abort the current test as failed. Returns the value of FORM." (ert--expand-should `(should ,form) form (lambda (inner-form form-description-form value-var) `(unless ,inner-form (ert-fail ,form-description-form))))) (defmacro* should-not (form) "Evaluate FORM. If it returns non-nil, abort the current test as failed. Returns nil." (ert--expand-should `(should-not ,form) form (lambda (inner-form form-description-form value-var) `(unless (not ,inner-form) (ert-fail ,form-description-form))))) (defun ert--should-error-handle-error (form-description-fn condition type exclude-subtypes) "Helper function for `should-error'. Determines whether CONDITION matches TYPE and EXCLUDE-SUBTYPES, and aborts the current test as failed if it doesn't." (let ((signalled-conditions (get (car condition) 'error-conditions)) (handled-conditions (etypecase type (list type) (symbol (list type))))) (assert signalled-conditions) (unless (ert--intersection signalled-conditions handled-conditions) (ert-fail (append (funcall form-description-fn) (list :condition condition :fail-reason (concat "the error signalled did not" " have the expected type"))))) (when exclude-subtypes (unless (member (car condition) handled-conditions) (ert-fail (append (funcall form-description-fn) (list :condition condition :fail-reason (concat "the error signalled was a subtype" " of the expected type")))))))) ;; FIXME: The expansion will evaluate the keyword args (if any) in ;; nonstandard order. (defmacro* should-error (form &rest keys &key type exclude-subtypes) "Evaluate FORM and check that it signals an error. The error signalled needs to match TYPE. TYPE should be a list of condition names. (It can also be a non-nil symbol, which is equivalent to a singleton list containing that symbol.) If EXCLUDE-SUBTYPES is nil, the error matches TYPE if one of its condition names is an element of TYPE. If EXCLUDE-SUBTYPES is non-nil, the error matches TYPE if it is an element of TYPE. If the error matches, returns (ERROR-SYMBOL . DATA) from the error. If not, or if no error was signalled, abort the test as failed." (unless type (setq type ''error)) (ert--expand-should `(should-error ,form ,@keys) form (lambda (inner-form form-description-form value-var) (let ((errorp (ert--gensym "errorp")) (form-description-fn (ert--gensym "form-description-fn-"))) `(let ((,errorp nil) (,form-description-fn (lambda () ,form-description-form))) (condition-case -condition- ,inner-form ;; We can't use ,type here because we want to evaluate it. (error (setq ,errorp t) (ert--should-error-handle-error ,form-description-fn -condition- ,type ,exclude-subtypes) (setq ,value-var -condition-))) (unless ,errorp (ert-fail (append (funcall ,form-description-fn) (list :fail-reason "did not signal an error"))))))))) ;;; Explanation of `should' failures. ;; TODO(ohler): Rework explanations so that they are displayed in a ;; similar way to `ert-info' messages; in particular, allow text ;; buttons in explanations that give more detail or open an ediff ;; buffer. Perhaps explanations should be reported through `ert-info' ;; rather than as part of the condition. (defun ert--proper-list-p (x) "Return non-nil if X is a proper list, nil otherwise." (loop for firstp = t then nil for fast = x then (cddr fast) for slow = x then (cdr slow) do (when (null fast) (return t)) (when (not (consp fast)) (return nil)) (when (null (cdr fast)) (return t)) (when (not (consp (cdr fast))) (return nil)) (when (and (not firstp) (eq fast slow)) (return nil)))) (defun ert--explain-format-atom (x) "Format the atom X for `ert--explain-not-equal'." (typecase x (fixnum (list x (format "#x%x" x) (format "?%c" x))) (t x))) (defun ert--explain-not-equal (a b) "Explainer function for `equal'. Returns a programmer-readable explanation of why A and B are not `equal', or nil if they are." (if (not (equal (type-of a) (type-of b))) `(different-types ,a ,b) (etypecase a (cons (let ((a-proper-p (ert--proper-list-p a)) (b-proper-p (ert--proper-list-p b))) (if (not (eql (not a-proper-p) (not b-proper-p))) `(one-list-proper-one-improper ,a ,b) (if a-proper-p (if (not (equal (length a) (length b))) `(proper-lists-of-different-length ,(length a) ,(length b) ,a ,b first-mismatch-at ,(ert--mismatch a b)) (loop for i from 0 for ai in a for bi in b for xi = (ert--explain-not-equal ai bi) do (when xi (return `(list-elt ,i ,xi))) finally (assert (equal a b) t))) (let ((car-x (ert--explain-not-equal (car a) (car b)))) (if car-x `(car ,car-x) (let ((cdr-x (ert--explain-not-equal (cdr a) (cdr b)))) (if cdr-x `(cdr ,cdr-x) (assert (equal a b) t) nil)))))))) (array (if (not (equal (length a) (length b))) `(arrays-of-different-length ,(length a) ,(length b) ,a ,b ,@(unless (char-table-p a) `(first-mismatch-at ,(ert--mismatch a b)))) (loop for i from 0 for ai across a for bi across b for xi = (ert--explain-not-equal ai bi) do (when xi (return `(array-elt ,i ,xi))) finally (assert (equal a b) t)))) (atom (if (not (equal a b)) (if (and (symbolp a) (symbolp b) (string= a b)) `(different-symbols-with-the-same-name ,a ,b) `(different-atoms ,(ert--explain-format-atom a) ,(ert--explain-format-atom b))) nil))))) (put 'equal 'ert-explainer 'ert--explain-not-equal) (defun ert--significant-plist-keys (plist) "Return the keys of PLIST that have non-null values, in order." (assert (zerop (mod (length plist) 2)) t) (loop for (key value . rest) on plist by #'cddr unless (or (null value) (memq key accu)) collect key into accu finally (return accu))) (defun ert--plist-difference-explanation (a b) "Return a programmer-readable explanation of why A and B are different plists. Returns nil if they are equivalent, i.e., have the same value for each key, where absent values are treated as nil. The order of key/value pairs in each list does not matter." (assert (zerop (mod (length a) 2)) t) (assert (zerop (mod (length b) 2)) t) ;; Normalizing the plists would be another way to do this but it ;; requires a total ordering on all lisp objects (since any object ;; is valid as a text property key). Perhaps defining such an ;; ordering is useful in other contexts, too, but it's a lot of ;; work, so let's punt on it for now. (let* ((keys-a (ert--significant-plist-keys a)) (keys-b (ert--significant-plist-keys b)) (keys-in-a-not-in-b (ert--set-difference-eq keys-a keys-b)) (keys-in-b-not-in-a (ert--set-difference-eq keys-b keys-a))) (flet ((explain-with-key (key) (let ((value-a (plist-get a key)) (value-b (plist-get b key))) (assert (not (equal value-a value-b)) t) `(different-properties-for-key ,key ,(ert--explain-not-equal-including-properties value-a value-b))))) (cond (keys-in-a-not-in-b (explain-with-key (first keys-in-a-not-in-b))) (keys-in-b-not-in-a (explain-with-key (first keys-in-b-not-in-a))) (t (loop for key in keys-a when (not (equal (plist-get a key) (plist-get b key))) return (explain-with-key key))))))) (defun ert--abbreviate-string (s len suffixp) "Shorten string S to at most LEN chars. If SUFFIXP is non-nil, returns a suffix of S, otherwise a prefix." (let ((n (length s))) (cond ((< n len) s) (suffixp (substring s (- n len))) (t (substring s 0 len))))) (defun ert--explain-not-equal-including-properties (a b) "Explainer function for `ert-equal-including-properties'. Returns a programmer-readable explanation of why A and B are not `ert-equal-including-properties', or nil if they are." (if (not (equal a b)) (ert--explain-not-equal a b) (assert (stringp a) t) (assert (stringp b) t) (assert (eql (length a) (length b)) t) (loop for i from 0 to (length a) for props-a = (text-properties-at i a) for props-b = (text-properties-at i b) for difference = (ert--plist-difference-explanation props-a props-b) do (when difference (return `(char ,i ,(substring-no-properties a i (1+ i)) ,difference context-before ,(ert--abbreviate-string (substring-no-properties a 0 i) 10 t) context-after ,(ert--abbreviate-string (substring-no-properties a (1+ i)) 10 nil)))) ;; TODO(ohler): Get `equal-including-properties' fixed in ;; Emacs, delete `ert-equal-including-properties', and ;; re-enable this assertion. ;;finally (assert (equal-including-properties a b) t) ))) (put 'ert-equal-including-properties 'ert-explainer 'ert--explain-not-equal-including-properties) ;;; Implementation of `ert-info'. ;; TODO(ohler): The name `info' clashes with ;; `ert--test-execution-info'. One or both should be renamed. (defvar ert--infos '() "The stack of `ert-info' infos that currently apply. Bound dynamically. This is a list of (PREFIX . MESSAGE) pairs.") (defmacro* ert-info ((message-form &key ((:prefix prefix-form) "Info: ")) &body body) "Evaluate MESSAGE-FORM and BODY, and report the message if BODY fails. To be used within ERT tests. MESSAGE-FORM should evaluate to a string that will be displayed together with the test result if the test fails. PREFIX-FORM should evaluate to a string as well and is displayed in front of the value of MESSAGE-FORM." (declare (debug ((form &rest [sexp form]) body)) (indent 1)) `(let ((ert--infos (cons (cons ,prefix-form ,message-form) ert--infos))) ,@body)) ;;; Facilities for running a single test. (defvar ert-debug-on-error nil "Non-nil means enter debugger when a test fails or terminates with an error.") ;; The data structures that represent the result of running a test. (defstruct ert-test-result (messages nil) (should-forms nil) ) (defstruct (ert-test-passed (:include ert-test-result))) (defstruct (ert-test-result-with-condition (:include ert-test-result)) (condition (assert nil)) (backtrace (assert nil)) (infos (assert nil))) (defstruct (ert-test-quit (:include ert-test-result-with-condition))) (defstruct (ert-test-failed (:include ert-test-result-with-condition))) (defstruct (ert-test-aborted-with-non-local-exit (:include ert-test-result))) (defun ert--record-backtrace () "Record the current backtrace (as a list) and return it." ;; Since the backtrace is stored in the result object, result ;; objects must only be printed with appropriate limits ;; (`print-level' and `print-length') in place. For interactive ;; use, the cost of ensuring this possibly outweighs the advantage ;; of storing the backtrace for ;; `ert-results-pop-to-backtrace-for-test-at-point' given that we ;; already have `ert-results-rerun-test-debugging-errors-at-point'. ;; For batch use, however, printing the backtrace may be useful. (loop ;; 6 is the number of frames our own debugger adds (when ;; compiled; more when interpreted). FIXME: Need to describe a ;; procedure for determining this constant. for i from 6 for frame = (backtrace-frame i) while frame collect frame)) (defun ert--print-backtrace (backtrace) "Format the backtrace BACKTRACE to the current buffer." ;; This is essentially a reimplementation of Fbacktrace ;; (src/eval.c), but for a saved backtrace, not the current one. (let ((print-escape-newlines t) (print-level 8) (print-length 50)) (dolist (frame backtrace) (ecase (first frame) ((nil) ;; Special operator. (destructuring-bind (special-operator &rest arg-forms) (cdr frame) (insert (format " %S\n" (list* special-operator arg-forms))))) ((t) ;; Function call. (destructuring-bind (fn &rest args) (cdr frame) (insert (format " %S(" fn)) (loop for firstp = t then nil for arg in args do (unless firstp (insert " ")) (insert (format "%S" arg))) (insert ")\n"))))))) ;; A container for the state of the execution of a single test and ;; environment data needed during its execution. (defstruct ert--test-execution-info (test (assert nil)) (result (assert nil)) ;; A thunk that may be called when RESULT has been set to its final ;; value and test execution should be terminated. Should not ;; return. (exit-continuation (assert nil)) ;; The binding of `debugger' outside of the execution of the test. next-debugger ;; The binding of `ert-debug-on-error' that is in effect for the ;; execution of the current test. We store it to avoid being ;; affected by any new bindings the test itself may establish. (I ;; don't remember whether this feature is important.) ert-debug-on-error) (defun ert--run-test-debugger (info debugger-args) "During a test run, `debugger' is bound to a closure that calls this function. This function records failures and errors and either terminates the test silently or calls the interactive debugger, as appropriate. INFO is the ert--test-execution-info corresponding to this test run. DEBUGGER-ARGS are the arguments to `debugger'." (destructuring-bind (first-debugger-arg &rest more-debugger-args) debugger-args (ecase first-debugger-arg ((lambda debug t exit nil) (apply (ert--test-execution-info-next-debugger info) debugger-args)) (error (let* ((condition (first more-debugger-args)) (type (case (car condition) ((quit) 'quit) (otherwise 'failed))) (backtrace (ert--record-backtrace)) (infos (reverse ert--infos))) (setf (ert--test-execution-info-result info) (ecase type (quit (make-ert-test-quit :condition condition :backtrace backtrace :infos infos)) (failed (make-ert-test-failed :condition condition :backtrace backtrace :infos infos)))) ;; Work around Emacs' heuristic (in eval.c) for detecting ;; errors in the debugger. (incf num-nonmacro-input-events) ;; FIXME: We should probably implement more fine-grained ;; control a la non-t `debug-on-error' here. (cond ((ert--test-execution-info-ert-debug-on-error info) (apply (ert--test-execution-info-next-debugger info) debugger-args)) (t)) (funcall (ert--test-execution-info-exit-continuation info))))))) (defun ert--run-test-internal (ert-test-execution-info) "Low-level function to run a test according to ERT-TEST-EXECUTION-INFO. This mainly sets up debugger-related bindings." (lexical-let ((info ert-test-execution-info)) (setf (ert--test-execution-info-next-debugger info) debugger (ert--test-execution-info-ert-debug-on-error info) ert-debug-on-error) (catch 'ert--pass ;; For now, each test gets its own temp buffer and its own ;; window excursion, just to be safe. If this turns out to be ;; too expensive, we can remove it. (with-temp-buffer (save-window-excursion (let ((debugger (lambda (&rest debugger-args) (ert--run-test-debugger info debugger-args))) (debug-on-error t) (debug-on-quit t) ;; FIXME: Do we need to store the old binding of this ;; and consider it in `ert--run-test-debugger'? (debug-ignored-errors nil) (ert--infos '())) (funcall (ert-test-body (ert--test-execution-info-test info)))))) (ert-pass)) (setf (ert--test-execution-info-result info) (make-ert-test-passed))) nil) (defun ert--force-message-log-buffer-truncation () "Immediately truncate *Messages* buffer according to `message-log-max'. This can be useful after reducing the value of `message-log-max'." (with-current-buffer (get-buffer-create "*Messages*") ;; This is a reimplementation of this part of message_dolog() in xdisp.c: ;; if (NATNUMP (Vmessage_log_max)) ;; { ;; scan_newline (Z, Z_BYTE, BEG, BEG_BYTE, ;; -XFASTINT (Vmessage_log_max) - 1, 0); ;; del_range_both (BEG, BEG_BYTE, PT, PT_BYTE, 0); ;; } (when (and (integerp message-log-max) (>= message-log-max 0)) (let ((begin (point-min)) (end (save-excursion (goto-char (point-max)) (forward-line (- message-log-max)) (point)))) (delete-region begin end))))) (defvar ert--running-tests nil "List of tests that are currently in execution. This list is empty while no test is running, has one element while a test is running, two elements while a test run from inside a test is running, etc. The list is in order of nesting, innermost test first. The elements are of type `ert-test'.") (defun ert-run-test (ert-test) "Run ERT-TEST. Returns the result and stores it in ERT-TEST's `most-recent-result' slot." (setf (ert-test-most-recent-result ert-test) nil) (block error (lexical-let ((begin-marker (with-current-buffer (get-buffer-create "*Messages*") (set-marker (make-marker) (point-max))))) (unwind-protect (lexical-let ((info (make-ert--test-execution-info :test ert-test :result (make-ert-test-aborted-with-non-local-exit) :exit-continuation (lambda () (return-from error nil)))) (should-form-accu (list))) (unwind-protect (let ((ert--should-execution-observer (lambda (form-description) (push form-description should-form-accu))) (message-log-max t) (ert--running-tests (cons ert-test ert--running-tests))) (ert--run-test-internal info)) (let ((result (ert--test-execution-info-result info))) (setf (ert-test-result-messages result) (with-current-buffer (get-buffer-create "*Messages*") (buffer-substring begin-marker (point-max)))) (ert--force-message-log-buffer-truncation) (setq should-form-accu (nreverse should-form-accu)) (setf (ert-test-result-should-forms result) should-form-accu) (setf (ert-test-most-recent-result ert-test) result)))) (set-marker begin-marker nil)))) (ert-test-most-recent-result ert-test)) (defun ert-running-test () "Return the top-level test currently executing." (car (last ert--running-tests))) ;;; Test selectors. (defun ert-test-result-type-p (result result-type) "Return non-nil if RESULT matches type RESULT-TYPE. Valid result types: nil -- Never matches. t -- Always matches. :failed, :passed -- Matches corresponding results. \(and TYPES...\) -- Matches if all TYPES match. \(or TYPES...\) -- Matches if some TYPES match. \(not TYPE\) -- Matches if TYPE does not match. \(satisfies PREDICATE\) -- Matches if PREDICATE returns true when called with RESULT." ;; It would be easy to add `member' and `eql' types etc., but I ;; haven't bothered yet. (etypecase result-type ((member nil) nil) ((member t) t) ((member :failed) (ert-test-failed-p result)) ((member :passed) (ert-test-passed-p result)) (cons (destructuring-bind (operator &rest operands) result-type (ecase operator (and (case (length operands) (0 t) (t (and (ert-test-result-type-p result (first operands)) (ert-test-result-type-p result `(and ,@(rest operands))))))) (or (case (length operands) (0 nil) (t (or (ert-test-result-type-p result (first operands)) (ert-test-result-type-p result `(or ,@(rest operands))))))) (not (assert (eql (length operands) 1)) (not (ert-test-result-type-p result (first operands)))) (satisfies (assert (eql (length operands) 1)) (funcall (first operands) result))))))) (defun ert-test-result-expected-p (test result) "Return non-nil if TEST's expected result type matches RESULT." (ert-test-result-type-p result (ert-test-expected-result-type test))) (defun ert-select-tests (selector universe) "Return the tests that match SELECTOR. UNIVERSE specifies the set of tests to select from; it should be a list of tests, or t, which refers to all tests named by symbols in `obarray'. Returns the set of tests as a list. Valid selectors: nil -- Selects the empty set. t -- Selects UNIVERSE. :new -- Selects all tests that have not been run yet. :failed, :passed -- Select tests according to their most recent result. :expected, :unexpected -- Select tests according to their most recent result. a string -- Selects all tests that have a name that matches the string, a regexp. a test -- Selects that test. a symbol -- Selects the test that the symbol names, errors if none. \(member TESTS...\) -- Selects TESTS, a list of tests or symbols naming tests. \(eql TEST\) -- Selects TEST, a test or a symbol naming a test. \(and SELECTORS...\) -- Selects the tests that match all SELECTORS. \(or SELECTORS...\) -- Selects the tests that match any SELECTOR. \(not SELECTOR\) -- Selects all tests that do not match SELECTOR. \(tag TAG) -- Selects all tests that have TAG on their tags list. \(satisfies PREDICATE\) -- Selects all tests that satisfy PREDICATE. Only selectors that require a superset of tests, such as (satisfies ...), strings, :new, etc. make use of UNIVERSE. Selectors that do not, such as \(member ...\), just return the set implied by them without checking whether it is really contained in UNIVERSE." ;; This code needs to match the etypecase in ;; `ert-insert-human-readable-selector'. (etypecase selector ((member nil) nil) ((member t) (etypecase universe (list universe) ((member t) (ert-select-tests "" universe)))) ((member :new) (ert-select-tests `(satisfies ,(lambda (test) (null (ert-test-most-recent-result test)))) universe)) ((member :failed) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-type-p (ert-test-most-recent-result test) ':failed))) universe)) ((member :passed) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-type-p (ert-test-most-recent-result test) ':passed))) universe)) ((member :expected) (ert-select-tests `(satisfies ,(lambda (test) (ert-test-result-expected-p test (ert-test-most-recent-result test)))) universe)) ((member :unexpected) (ert-select-tests `(not :expected) universe)) (string (etypecase universe ((member t) (mapcar #'ert-get-test (apropos-internal selector #'ert-test-boundp))) (list (ert--remove-if-not (lambda (test) (and (ert-test-name test) (string-match selector (ert-test-name test)))) universe)))) (ert-test (list selector)) (symbol (assert (ert-test-boundp selector)) (list (ert-get-test selector))) (cons (destructuring-bind (operator &rest operands) selector (ecase operator (member (mapcar (lambda (purported-test) (etypecase purported-test (symbol (assert (ert-test-boundp purported-test)) (ert-get-test purported-test)) (ert-test purported-test))) operands)) (eql (assert (eql (length operands) 1)) (ert-select-tests `(member ,@operands) universe)) (and ;; Do these definitions of AND, NOT and OR satisfy de ;; Morgan's laws? Should they? (case (length operands) (0 (ert-select-tests 't universe)) (t (ert-select-tests `(and ,@(rest operands)) (ert-select-tests (first operands) universe))))) (not (assert (eql (length operands) 1)) (let ((all-tests (ert-select-tests 't universe))) (ert--set-difference all-tests (ert-select-tests (first operands) all-tests)))) (or (case (length operands) (0 (ert-select-tests 'nil universe)) (t (ert--union (ert-select-tests (first operands) universe) (ert-select-tests `(or ,@(rest operands)) universe))))) (tag (assert (eql (length operands) 1)) (let ((tag (first operands))) (ert-select-tests `(satisfies ,(lambda (test) (member tag (ert-test-tags test)))) universe))) (satisfies (assert (eql (length operands) 1)) (ert--remove-if-not (first operands) (ert-select-tests 't universe)))))))) (defun ert--insert-human-readable-selector (selector) "Insert a human-readable presentation of SELECTOR into the current buffer." ;; This is needed to avoid printing the (huge) contents of the ;; `backtrace' slot of the result objects in the ;; `most-recent-result' slots of test case objects in (eql ...) or ;; (member ...) selectors. (labels ((rec (selector) ;; This code needs to match the etypecase in `ert-select-tests'. (etypecase selector ((or (member nil t :new :failed :passed :expected :unexpected) string symbol) selector) (ert-test (if (ert-test-name selector) (make-symbol (format "<%S>" (ert-test-name selector))) (make-symbol ""))) (cons (destructuring-bind (operator &rest operands) selector (ecase operator ((member eql and not or) `(,operator ,@(mapcar #'rec operands))) ((member tag satisfies) selector))))))) (insert (format "%S" (rec selector))))) ;;; Facilities for running a whole set of tests. ;; The data structure that contains the set of tests being executed ;; during one particular test run, their results, the state of the ;; execution, and some statistics. ;; ;; The data about results and expected results of tests may seem ;; redundant here, since the test objects also carry such information. ;; However, the information in the test objects may be more recent, it ;; may correspond to a different test run. We need the information ;; that corresponds to this run in order to be able to update the ;; statistics correctly when a test is re-run interactively and has a ;; different result than before. (defstruct ert--stats (selector (assert nil)) ;; The tests, in order. (tests (assert nil) :type vector) ;; A map of test names (or the test objects themselves for unnamed ;; tests) to indices into the `tests' vector. (test-map (assert nil) :type hash-table) ;; The results of the tests during this run, in order. (test-results (assert nil) :type vector) ;; The start times of the tests, in order, as reported by ;; `current-time'. (test-start-times (assert nil) :type vector) ;; The end times of the tests, in order, as reported by ;; `current-time'. (test-end-times (assert nil) :type vector) (passed-expected 0) (passed-unexpected 0) (failed-expected 0) (failed-unexpected 0) (start-time nil) (end-time nil) (aborted-p nil) (current-test nil) ;; The time at or after which the next redisplay should occur, as a ;; float. (next-redisplay 0.0)) (defun ert-stats-completed-expected (stats) "Return the number of tests in STATS that had expected results." (+ (ert--stats-passed-expected stats) (ert--stats-failed-expected stats))) (defun ert-stats-completed-unexpected (stats) "Return the number of tests in STATS that had unexpected results." (+ (ert--stats-passed-unexpected stats) (ert--stats-failed-unexpected stats))) (defun ert-stats-completed (stats) "Number of tests in STATS that have run so far." (+ (ert-stats-completed-expected stats) (ert-stats-completed-unexpected stats))) (defun ert-stats-total (stats) "Number of tests in STATS, regardless of whether they have run yet." (length (ert--stats-tests stats))) ;; The stats object of the current run, dynamically bound. This is ;; used for the mode line progress indicator. (defvar ert--current-run-stats nil) (defun ert--stats-test-key (test) "Return the key used for TEST in the test map of ert--stats objects. Returns the name of TEST if it has one, or TEST itself otherwise." (or (ert-test-name test) test)) (defun ert--stats-set-test-and-result (stats pos test result) "Change STATS by replacing the test at position POS with TEST and RESULT. Also changes the counters in STATS to match." (let* ((tests (ert--stats-tests stats)) (results (ert--stats-test-results stats)) (old-test (aref tests pos)) (map (ert--stats-test-map stats))) (flet ((update (d) (if (ert-test-result-expected-p (aref tests pos) (aref results pos)) (etypecase (aref results pos) (ert-test-passed (incf (ert--stats-passed-expected stats) d)) (ert-test-failed (incf (ert--stats-failed-expected stats) d)) (null) (ert-test-aborted-with-non-local-exit)) (etypecase (aref results pos) (ert-test-passed (incf (ert--stats-passed-unexpected stats) d)) (ert-test-failed (incf (ert--stats-failed-unexpected stats) d)) (null) (ert-test-aborted-with-non-local-exit))))) ;; Adjust counters to remove the result that is currently in stats. (update -1) ;; Put new test and result into stats. (setf (aref tests pos) test (aref results pos) result) (remhash (ert--stats-test-key old-test) map) (setf (gethash (ert--stats-test-key test) map) pos) ;; Adjust counters to match new result. (update +1) nil))) (defun ert--make-stats (tests selector) "Create a new `ert--stats' object for running TESTS. SELECTOR is the selector that was used to select TESTS." (setq tests (ert--coerce-to-vector tests)) (let ((map (make-hash-table :size (length tests)))) (loop for i from 0 for test across tests for key = (ert--stats-test-key test) do (assert (not (gethash key map))) (setf (gethash key map) i)) (make-ert--stats :selector selector :tests tests :test-map map :test-results (make-vector (length tests) nil) :test-start-times (make-vector (length tests) nil) :test-end-times (make-vector (length tests) nil)))) (defun ert-run-or-rerun-test (stats test listener) ;; checkdoc-order: nil "Run the single test TEST and record the result using STATS and LISTENER." (let ((ert--current-run-stats stats) (pos (ert--stats-test-pos stats test))) (ert--stats-set-test-and-result stats pos test nil) ;; Call listener after setting/before resetting ;; (ert--stats-current-test stats); the listener might refresh the ;; mode line display, and if the value is not set yet/any more ;; during this refresh, the mode line will flicker unnecessarily. (setf (ert--stats-current-test stats) test) (funcall listener 'test-started stats test) (setf (ert-test-most-recent-result test) nil) (setf (aref (ert--stats-test-start-times stats) pos) (current-time)) (unwind-protect (ert-run-test test) (setf (aref (ert--stats-test-end-times stats) pos) (current-time)) (let ((result (ert-test-most-recent-result test))) (ert--stats-set-test-and-result stats pos test result) (funcall listener 'test-ended stats test result)) (setf (ert--stats-current-test stats) nil)))) (defun ert-run-tests (selector listener) "Run the tests specified by SELECTOR, sending progress updates to LISTENER." (let* ((tests (ert-select-tests selector t)) (stats (ert--make-stats tests selector))) (setf (ert--stats-start-time stats) (current-time)) (funcall listener 'run-started stats) (let ((abortedp t)) (unwind-protect (let ((ert--current-run-stats stats)) (force-mode-line-update) (unwind-protect (progn (loop for test in tests do (ert-run-or-rerun-test stats test listener)) (setq abortedp nil)) (setf (ert--stats-aborted-p stats) abortedp) (setf (ert--stats-end-time stats) (current-time)) (funcall listener 'run-ended stats abortedp))) (force-mode-line-update)) stats))) (defun ert--stats-test-pos (stats test) ;; checkdoc-order: nil "Return the position (index) of TEST in the run represented by STATS." (gethash (ert--stats-test-key test) (ert--stats-test-map stats))) ;;; Formatting functions shared across UIs. (defun ert--format-time-iso8601 (time) "Format TIME in the variant of ISO 8601 used for timestamps in ERT." (format-time-string "%Y-%m-%d %T%z" time)) (defun ert-char-for-test-result (result expectedp) "Return a character that represents the test result RESULT. EXPECTEDP specifies whether the result was expected." (let ((s (etypecase result (ert-test-passed ".P") (ert-test-failed "fF") (null "--") (ert-test-aborted-with-non-local-exit "aA")))) (elt s (if expectedp 0 1)))) (defun ert-string-for-test-result (result expectedp) "Return a string that represents the test result RESULT. EXPECTEDP specifies whether the result was expected." (let ((s (etypecase result (ert-test-passed '("passed" "PASSED")) (ert-test-failed '("failed" "FAILED")) (null '("unknown" "UNKNOWN")) (ert-test-aborted-with-non-local-exit '("aborted" "ABORTED"))))) (elt s (if expectedp 0 1)))) (defun ert--pp-with-indentation-and-newline (object) "Pretty-print OBJECT, indenting it to the current column of point. Ensures a final newline is inserted." (let ((begin (point))) (pp object (current-buffer)) (unless (bolp) (insert "\n")) (save-excursion (goto-char begin) (indent-sexp)))) (defun ert--insert-infos (result) "Insert `ert-info' infos from RESULT into current buffer. RESULT must be an `ert-test-result-with-condition'." (check-type result ert-test-result-with-condition) (dolist (info (ert-test-result-with-condition-infos result)) (destructuring-bind (prefix . message) info (let ((begin (point)) (indentation (make-string (+ (length prefix) 4) ?\s)) (end nil)) (unwind-protect (progn (insert message "\n") (setq end (copy-marker (point))) (goto-char begin) (insert " " prefix) (forward-line 1) (while (< (point) end) (insert indentation) (forward-line 1))) (when end (set-marker end nil))))))) ;;; Running tests in batch mode. (defvar ert-batch-backtrace-right-margin 70 "*The maximum line length for printing backtraces in `ert-run-tests-batch'.") ;;;###autoload (defun ert-run-tests-batch (&optional selector) "Run the tests specified by SELECTOR, printing results to the terminal. SELECTOR works as described in `ert-select-tests', except if SELECTOR is nil, in which case all tests rather than none will be run; this makes the command line \"emacs -batch -l my-tests.el -f ert-run-tests-batch-and-exit\" useful. Returns the stats object." (unless selector (setq selector 't)) (ert-run-tests selector (lambda (event-type &rest event-args) (ecase event-type (run-started (destructuring-bind (stats) event-args (message "Running %s tests (%s)" (length (ert--stats-tests stats)) (ert--format-time-iso8601 (ert--stats-start-time stats))))) (run-ended (destructuring-bind (stats abortedp) event-args (let ((unexpected (ert-stats-completed-unexpected stats)) (expected-failures (ert--stats-failed-expected stats))) (message "\n%sRan %s tests, %s results as expected%s (%s)%s\n" (if (not abortedp) "" "Aborted: ") (ert-stats-total stats) (ert-stats-completed-expected stats) (if (zerop unexpected) "" (format ", %s unexpected" unexpected)) (ert--format-time-iso8601 (ert--stats-end-time stats)) (if (zerop expected-failures) "" (format "\n%s expected failures" expected-failures))) (unless (zerop unexpected) (message "%s unexpected results:" unexpected) (loop for test across (ert--stats-tests stats) for result = (ert-test-most-recent-result test) do (when (not (ert-test-result-expected-p test result)) (message "%9s %S" (ert-string-for-test-result result nil) (ert-test-name test)))) (message "%s" ""))))) (test-started ) (test-ended (destructuring-bind (stats test result) event-args (unless (ert-test-result-expected-p test result) (etypecase result (ert-test-passed (message "Test %S passed unexpectedly" (ert-test-name test))) (ert-test-result-with-condition (message "Test %S backtrace:" (ert-test-name test)) (with-temp-buffer (ert--print-backtrace (ert-test-result-with-condition-backtrace result)) (goto-char (point-min)) (while (not (eobp)) (let ((start (point)) (end (progn (end-of-line) (point)))) (setq end (min end (+ start ert-batch-backtrace-right-margin))) (message "%s" (buffer-substring-no-properties start end))) (forward-line 1))) (with-temp-buffer (ert--insert-infos result) (insert " ") (let ((print-escape-newlines t) (print-level 5) (print-length 10)) (let ((begin (point))) (ert--pp-with-indentation-and-newline (ert-test-result-with-condition-condition result)))) (goto-char (1- (point-max))) (assert (looking-at "\n")) (delete-char 1) (message "Test %S condition:" (ert-test-name test)) (message "%s" (buffer-string)))) (ert-test-aborted-with-non-local-exit (message "Test %S aborted with non-local exit" (ert-test-name test))))) (let* ((max (prin1-to-string (length (ert--stats-tests stats)))) (format-string (concat "%9s %" (prin1-to-string (length max)) "s/" max " %S"))) (message format-string (ert-string-for-test-result result (ert-test-result-expected-p test result)) (1+ (ert--stats-test-pos stats test)) (ert-test-name test))))))))) ;;;###autoload (defun ert-run-tests-batch-and-exit (&optional selector) "Like `ert-run-tests-batch', but exits Emacs when done. The exit status will be 0 if all test results were as expected, 1 on unexpected results, or 2 if the framework detected an error outside of the tests (e.g. invalid SELECTOR or bug in the code that runs the tests)." (unwind-protect (let ((stats (ert-run-tests-batch selector))) (kill-emacs (if (zerop (ert-stats-completed-unexpected stats)) 0 1))) (unwind-protect (progn (message "Error running tests") (backtrace)) (kill-emacs 2)))) ;;; Utility functions for load/unload actions. (defun ert--activate-font-lock-keywords () "Activate font-lock keywords for some of ERT's symbols." (font-lock-add-keywords nil '(("(\\(\\\\s *\\(\\sw+\\)?" (1 font-lock-keyword-face nil t) (2 font-lock-function-name-face nil t))))) (defun* ert--remove-from-list (list-var element &key key test) "Remove ELEMENT from the value of LIST-VAR if present. This can be used as an inverse of `add-to-list'." (unless key (setq key #'identity)) (unless test (setq test #'equal)) (setf (symbol-value list-var) (ert--remove* element (symbol-value list-var) :key key :test test))) ;;; Some basic interactive functions. (defun ert-read-test-name (prompt &optional default history add-default-to-prompt) "Read the name of a test and return it as a symbol. Prompt with PROMPT. If DEFAULT is a valid test name, use it as a default. HISTORY is the history to use; see `completing-read'. If ADD-DEFAULT-TO-PROMPT is non-nil, PROMPT will be modified to include the default, if any. Signals an error if no test name was read." (etypecase default (string (let ((symbol (intern-soft default))) (unless (and symbol (ert-test-boundp symbol)) (setq default nil)))) (symbol (setq default (if (ert-test-boundp default) (symbol-name default) nil))) (ert-test (setq default (ert-test-name default)))) (when add-default-to-prompt (setq prompt (if (null default) (format "%s: " prompt) (format "%s (default %s): " prompt default)))) (let ((input (completing-read prompt obarray #'ert-test-boundp t nil history default nil))) ;; completing-read returns an empty string if default was nil and ;; the user just hit enter. (let ((sym (intern-soft input))) (if (ert-test-boundp sym) sym (error "Input does not name a test"))))) (defun ert-read-test-name-at-point (prompt) "Read the name of a test and return it as a symbol. As a default, use the symbol at point, or the test at point if in the ERT results buffer. Prompt with PROMPT, augmented with the default (if any)." (ert-read-test-name prompt (ert-test-at-point) nil t)) (defun ert-find-test-other-window (test-name) "Find, in another window, the definition of TEST-NAME." (interactive (list (ert-read-test-name-at-point "Find test definition: "))) (find-function-do-it test-name 'ert-deftest 'switch-to-buffer-other-window)) (defun ert-delete-test (test-name) "Make the test TEST-NAME unbound. Nothing more than an interactive interface to `ert-make-test-unbound'." (interactive (list (ert-read-test-name-at-point "Delete test"))) (ert-make-test-unbound test-name)) (defun ert-delete-all-tests () "Make all symbols in `obarray' name no test." (interactive) (when (interactive-p) (unless (y-or-n-p "Delete all tests? ") (error "Aborted"))) ;; We can't use `ert-select-tests' here since that gives us only ;; test objects, and going from them back to the test name symbols ;; can fail if the `ert-test' defstruct has been redefined. (mapc #'ert-make-test-unbound (apropos-internal "" #'ert-test-boundp)) t) ;;; Display of test progress and results. ;; An entry in the results buffer ewoc. There is one entry per test. (defstruct ert--ewoc-entry (test (assert nil)) ;; If the result of this test was expected, its ewoc entry is hidden ;; initially. (hidden-p (assert nil)) ;; An ewoc entry may be collapsed to hide details such as the error ;; condition. ;; ;; I'm not sure the ability to expand and collapse entries is still ;; a useful feature. (expanded-p t) ;; By default, the ewoc entry presents the error condition with ;; certain limits on how much to print (`print-level', ;; `print-length'). The user can interactively switch to a set of ;; higher limits. (extended-printer-limits-p nil)) ;; Variables local to the results buffer. ;; The ewoc. (defvar ert--results-ewoc) ;; The stats object. (defvar ert--results-stats) ;; A string with one character per test. Each character represents ;; the result of the corresponding test. The string is displayed near ;; the top of the buffer and serves as a progress bar. (defvar ert--results-progress-bar-string) ;; The position where the progress bar button begins. (defvar ert--results-progress-bar-button-begin) ;; The test result listener that updates the buffer when tests are run. (defvar ert--results-listener) (defun ert-insert-test-name-button (test-name) "Insert a button that links to TEST-NAME." (insert-text-button (format "%S" test-name) :type 'ert--test-name-button 'ert-test-name test-name)) (defun ert--results-format-expected-unexpected (expected unexpected) "Return a string indicating EXPECTED expected results, UNEXPECTED unexpected." (if (zerop unexpected) (format "%s" expected) (format "%s (%s unexpected)" (+ expected unexpected) unexpected))) (defun ert--results-update-ewoc-hf (ewoc stats) "Update the header and footer of EWOC to show certain information from STATS. Also sets `ert--results-progress-bar-button-begin'." (let ((run-count (ert-stats-completed stats)) (results-buffer (current-buffer)) ;; Need to save buffer-local value. (font-lock font-lock-mode)) (ewoc-set-hf ewoc ;; header (with-temp-buffer (insert "Selector: ") (ert--insert-human-readable-selector (ert--stats-selector stats)) (insert "\n") (insert (format (concat "Passed: %s\n" "Failed: %s\n" "Total: %s/%s\n\n") (ert--results-format-expected-unexpected (ert--stats-passed-expected stats) (ert--stats-passed-unexpected stats)) (ert--results-format-expected-unexpected (ert--stats-failed-expected stats) (ert--stats-failed-unexpected stats)) run-count (ert-stats-total stats))) (insert (format "Started at: %s\n" (ert--format-time-iso8601 (ert--stats-start-time stats)))) ;; FIXME: This is ugly. Need to properly define invariants of ;; the `stats' data structure. (let ((state (cond ((ert--stats-aborted-p stats) 'aborted) ((ert--stats-current-test stats) 'running) ((ert--stats-end-time stats) 'finished) (t 'preparing)))) (ecase state (preparing (insert "")) (aborted (cond ((ert--stats-current-test stats) (insert "Aborted during test: ") (ert-insert-test-name-button (ert-test-name (ert--stats-current-test stats)))) (t (insert "Aborted.")))) (running (assert (ert--stats-current-test stats)) (insert "Running test: ") (ert-insert-test-name-button (ert-test-name (ert--stats-current-test stats)))) (finished (assert (not (ert--stats-current-test stats))) (insert "Finished."))) (insert "\n") (if (ert--stats-end-time stats) (insert (format "%s%s\n" (if (ert--stats-aborted-p stats) "Aborted at: " "Finished at: ") (ert--format-time-iso8601 (ert--stats-end-time stats)))) (insert "\n")) (insert "\n")) (let ((progress-bar-string (with-current-buffer results-buffer ert--results-progress-bar-string))) (let ((progress-bar-button-begin (insert-text-button progress-bar-string :type 'ert--results-progress-bar-button 'face (or (and font-lock (ert-face-for-stats stats)) 'button)))) ;; The header gets copied verbatim to the results buffer, ;; and all positions remain the same, so ;; `progress-bar-button-begin' will be the right position ;; even in the results buffer. (with-current-buffer results-buffer (set (make-local-variable 'ert--results-progress-bar-button-begin) progress-bar-button-begin)))) (insert "\n\n") (buffer-string)) ;; footer ;; ;; We actually want an empty footer, but that would trigger a bug ;; in ewoc, sometimes clearing the entire buffer. (It's possible ;; that this bug has been fixed since this has been tested; we ;; should test it again.) "\n"))) (defvar ert-test-run-redisplay-interval-secs .1 "How many seconds ERT should wait between redisplays while running tests. While running tests, ERT shows the current progress, and this variable determines how frequently the progress display is updated.") (defun ert--results-update-stats-display (ewoc stats) "Update EWOC and the mode line to show data from STATS." ;; TODO(ohler): investigate using `make-progress-reporter'. (ert--results-update-ewoc-hf ewoc stats) (force-mode-line-update) (redisplay t) (setf (ert--stats-next-redisplay stats) (+ (float-time) ert-test-run-redisplay-interval-secs))) (defun ert--results-update-stats-display-maybe (ewoc stats) "Call `ert--results-update-stats-display' if not called recently. EWOC and STATS are arguments for `ert--results-update-stats-display'." (when (>= (float-time) (ert--stats-next-redisplay stats)) (ert--results-update-stats-display ewoc stats))) (defun ert--tests-running-mode-line-indicator () "Return a string for the mode line that shows the test run progress." (let* ((stats ert--current-run-stats) (tests-total (ert-stats-total stats)) (tests-completed (ert-stats-completed stats))) (if (>= tests-completed tests-total) (format " ERT(%s/%s,finished)" tests-completed tests-total) (format " ERT(%s/%s):%s" (1+ tests-completed) tests-total (if (null (ert--stats-current-test stats)) "?" (format "%S" (ert-test-name (ert--stats-current-test stats)))))))) (defun ert--make-xrefs-region (begin end) "Attach cross-references to function names between BEGIN and END. BEGIN and END specify a region in the current buffer." (save-excursion (save-restriction (narrow-to-region begin (point)) ;; Inhibit optimization in `debugger-make-xrefs' that would ;; sometimes insert unrelated backtrace info into our buffer. (let ((debugger-previous-backtrace nil)) (debugger-make-xrefs))))) (defun ert--string-first-line (s) "Return the first line of S, or S if it contains no newlines. The return value does not include the line terminator." (substring s 0 (ert--string-position ?\n s))) (defun ert-face-for-test-result (expectedp) "Return a face that shows whether a test result was expected or unexpected. If EXPECTEDP is nil, returns the face for unexpected results; if non-nil, returns the face for expected results.." (if expectedp 'ert-test-result-expected 'ert-test-result-unexpected)) (defun ert-face-for-stats (stats) "Return a face that represents STATS." (cond ((ert--stats-aborted-p stats) 'nil) ((plusp (ert-stats-completed-unexpected stats)) (ert-face-for-test-result nil)) ((eql (ert-stats-completed-expected stats) (ert-stats-total stats)) (ert-face-for-test-result t)) (t 'nil))) (defun ert--print-test-for-ewoc (entry) "The ewoc print function for ewoc test entries. ENTRY is the entry to print." (let* ((test (ert--ewoc-entry-test entry)) (stats ert--results-stats) (result (let ((pos (ert--stats-test-pos stats test))) (assert pos) (aref (ert--stats-test-results stats) pos))) (hiddenp (ert--ewoc-entry-hidden-p entry)) (expandedp (ert--ewoc-entry-expanded-p entry)) (extended-printer-limits-p (ert--ewoc-entry-extended-printer-limits-p entry))) (cond (hiddenp) (t (let ((expectedp (ert-test-result-expected-p test result))) (insert-text-button (format "%c" (ert-char-for-test-result result expectedp)) :type 'ert--results-expand-collapse-button 'face (or (and font-lock-mode (ert-face-for-test-result expectedp)) 'button))) (insert " ") (ert-insert-test-name-button (ert-test-name test)) (insert "\n") (when (and expandedp (not (eql result 'nil))) (when (ert-test-documentation test) (insert " " (propertize (ert--string-first-line (ert-test-documentation test)) 'font-lock-face 'font-lock-doc-face) "\n")) (etypecase result (ert-test-passed (if (ert-test-result-expected-p test result) (insert " passed\n") (insert " passed unexpectedly\n")) (insert "")) (ert-test-result-with-condition (ert--insert-infos result) (let ((print-escape-newlines t) (print-level (if extended-printer-limits-p 12 6)) (print-length (if extended-printer-limits-p 100 10))) (insert " ") (let ((begin (point))) (ert--pp-with-indentation-and-newline (ert-test-result-with-condition-condition result)) (ert--make-xrefs-region begin (point))))) (ert-test-aborted-with-non-local-exit (insert " aborted\n"))) (insert "\n"))))) nil) (defun ert--results-font-lock-function (enabledp) "Redraw the ERT results buffer after font-lock-mode was switched on or off. ENABLEDP is true if font-lock-mode is switched on, false otherwise." (ert--results-update-ewoc-hf ert--results-ewoc ert--results-stats) (ewoc-refresh ert--results-ewoc) (font-lock-default-function enabledp)) (defun ert--setup-results-buffer (stats listener buffer-name) "Set up a test results buffer. STATS is the stats object; LISTENER is the results listener; BUFFER-NAME, if non-nil, is the buffer name to use." (unless buffer-name (setq buffer-name "*ert*")) (let ((buffer (get-buffer-create buffer-name))) (with-current-buffer buffer (setq buffer-read-only t) (let ((inhibit-read-only t)) (buffer-disable-undo) (erase-buffer) (ert-results-mode) ;; Erase buffer again in case switching out of the previous ;; mode inserted anything. (This happens e.g. when switching ;; from ert-results-mode to ert-results-mode when ;; font-lock-mode turns itself off in change-major-mode-hook.) (erase-buffer) (set (make-local-variable 'font-lock-function) 'ert--results-font-lock-function) (let ((ewoc (ewoc-create 'ert--print-test-for-ewoc nil nil t))) (set (make-local-variable 'ert--results-ewoc) ewoc) (set (make-local-variable 'ert--results-stats) stats) (set (make-local-variable 'ert--results-progress-bar-string) (make-string (ert-stats-total stats) (ert-char-for-test-result nil t))) (set (make-local-variable 'ert--results-listener) listener) (loop for test across (ert--stats-tests stats) do (ewoc-enter-last ewoc (make-ert--ewoc-entry :test test :hidden-p t))) (ert--results-update-ewoc-hf ert--results-ewoc ert--results-stats) (goto-char (1- (point-max))) buffer))))) (defvar ert--selector-history nil "List of recent test selectors read from terminal.") ;; Should OUTPUT-BUFFER-NAME and MESSAGE-FN really be arguments here? ;; They are needed only for our automated self-tests at the moment. ;; Or should there be some other mechanism? ;;;###autoload (defun ert-run-tests-interactively (selector &optional output-buffer-name message-fn) "Run the tests specified by SELECTOR and display the results in a buffer. SELECTOR works as described in `ert-select-tests'. OUTPUT-BUFFER-NAME and MESSAGE-FN should normally be nil; they are used for automated self-tests and specify which buffer to use and how to display message." (interactive (list (let ((default (if ert--selector-history ;; Can't use `first' here as this form is ;; not compiled, and `first' is not ;; defined without cl. (car ert--selector-history) "t"))) (read-from-minibuffer (if (null default) "Run tests: " (format "Run tests (default %s): " default)) nil nil t 'ert--selector-history default nil)) nil)) (unless message-fn (setq message-fn 'message)) (lexical-let ((output-buffer-name output-buffer-name) buffer listener (message-fn message-fn)) (setq listener (lambda (event-type &rest event-args) (ecase event-type (run-started (destructuring-bind (stats) event-args (setq buffer (ert--setup-results-buffer stats listener output-buffer-name)) (pop-to-buffer buffer))) (run-ended (destructuring-bind (stats abortedp) event-args (funcall message-fn "%sRan %s tests, %s results were as expected%s" (if (not abortedp) "" "Aborted: ") (ert-stats-total stats) (ert-stats-completed-expected stats) (let ((unexpected (ert-stats-completed-unexpected stats))) (if (zerop unexpected) "" (format ", %s unexpected" unexpected)))) (ert--results-update-stats-display (with-current-buffer buffer ert--results-ewoc) stats))) (test-started (destructuring-bind (stats test) event-args (with-current-buffer buffer (let* ((ewoc ert--results-ewoc) (pos (ert--stats-test-pos stats test)) (node (ewoc-nth ewoc pos))) (assert node) (setf (ert--ewoc-entry-test (ewoc-data node)) test) (aset ert--results-progress-bar-string pos (ert-char-for-test-result nil t)) (ert--results-update-stats-display-maybe ewoc stats) (ewoc-invalidate ewoc node))))) (test-ended (destructuring-bind (stats test result) event-args (with-current-buffer buffer (let* ((ewoc ert--results-ewoc) (pos (ert--stats-test-pos stats test)) (node (ewoc-nth ewoc pos))) (when (ert--ewoc-entry-hidden-p (ewoc-data node)) (setf (ert--ewoc-entry-hidden-p (ewoc-data node)) (ert-test-result-expected-p test result))) (aset ert--results-progress-bar-string pos (ert-char-for-test-result result (ert-test-result-expected-p test result))) (ert--results-update-stats-display-maybe ewoc stats) (ewoc-invalidate ewoc node)))))))) (ert-run-tests selector listener))) ;;;###autoload (defalias 'ert 'ert-run-tests-interactively) ;;; Simple view mode for auxiliary information like stack traces or ;;; messages. Mainly binds "q" for quit. (define-derived-mode ert-simple-view-mode fundamental-mode "ERT-View" "Major mode for viewing auxiliary information in ERT.") (loop for (key binding) in '(("q" quit-window) ) do (define-key ert-simple-view-mode-map key binding)) ;;; Commands and button actions for the results buffer. (define-derived-mode ert-results-mode fundamental-mode "ERT-Results" "Major mode for viewing results of ERT test runs.") (loop for (key binding) in '(;; Stuff that's not in the menu. ("\t" forward-button) ([backtab] backward-button) ("j" ert-results-jump-between-summary-and-result) ("q" quit-window) ("L" ert-results-toggle-printer-limits-for-test-at-point) ("n" ert-results-next-test) ("p" ert-results-previous-test) ;; Stuff that is in the menu. ("R" ert-results-rerun-all-tests) ("r" ert-results-rerun-test-at-point) ("d" ert-results-rerun-test-at-point-debugging-errors) ("." ert-results-find-test-at-point-other-window) ("b" ert-results-pop-to-backtrace-for-test-at-point) ("m" ert-results-pop-to-messages-for-test-at-point) ("l" ert-results-pop-to-should-forms-for-test-at-point) ("h" ert-results-describe-test-at-point) ("D" ert-delete-test) ("T" ert-results-pop-to-timings) ) do (define-key ert-results-mode-map key binding)) (easy-menu-define ert-results-mode-menu ert-results-mode-map "Menu for `ert-results-mode'." '("ERT Results" ["Re-run all tests" ert-results-rerun-all-tests] "--" ["Re-run test" ert-results-rerun-test-at-point] ["Debug test" ert-results-rerun-test-at-point-debugging-errors] ["Show test definition" ert-results-find-test-at-point-other-window] "--" ["Show backtrace" ert-results-pop-to-backtrace-for-test-at-point] ["Show messages" ert-results-pop-to-messages-for-test-at-point] ["Show `should' forms" ert-results-pop-to-should-forms-for-test-at-point] ["Describe test" ert-results-describe-test-at-point] "--" ["Delete test" ert-delete-test] "--" ["Show execution time of each test" ert-results-pop-to-timings] )) (define-button-type 'ert--results-progress-bar-button 'action #'ert--results-progress-bar-button-action 'help-echo "mouse-2, RET: Reveal test result") (define-button-type 'ert--test-name-button 'action #'ert--test-name-button-action 'help-echo "mouse-2, RET: Find test definition") (define-button-type 'ert--results-expand-collapse-button 'action #'ert--results-expand-collapse-button-action 'help-echo "mouse-2, RET: Expand/collapse test result") (defun ert--results-test-node-or-null-at-point () "If point is on a valid ewoc node, return it; return nil otherwise. To be used in the ERT results buffer." (let* ((ewoc ert--results-ewoc) (node (ewoc-locate ewoc))) ;; `ewoc-locate' will return an arbitrary node when point is on ;; header or footer, or when all nodes are invisible. So we need ;; to validate its return value here. ;; ;; Update: I'm seeing nil being returned in some cases now, ;; perhaps this has been changed? (if (and node (>= (point) (ewoc-location node)) (not (ert--ewoc-entry-hidden-p (ewoc-data node)))) node nil))) (defun ert--results-test-node-at-point () "If point is on a valid ewoc node, return it; signal an error otherwise. To be used in the ERT results buffer." (or (ert--results-test-node-or-null-at-point) (error "No test at point"))) (defun ert-results-next-test () "Move point to the next test. To be used in the ERT results buffer." (interactive) (ert--results-move (ewoc-locate ert--results-ewoc) 'ewoc-next "No tests below")) (defun ert-results-previous-test () "Move point to the previous test. To be used in the ERT results buffer." (interactive) (ert--results-move (ewoc-locate ert--results-ewoc) 'ewoc-prev "No tests above")) (defun ert--results-move (node ewoc-fn error-message) "Move point from NODE to the previous or next node. EWOC-FN specifies the direction and should be either `ewoc-prev' or `ewoc-next'. If there are no more nodes in that direction, an error is signalled with the message ERROR-MESSAGE." (loop (setq node (funcall ewoc-fn ert--results-ewoc node)) (when (null node) (error "%s" error-message)) (unless (ert--ewoc-entry-hidden-p (ewoc-data node)) (goto-char (ewoc-location node)) (return)))) (defun ert--results-expand-collapse-button-action (button) "Expand or collapse the test node BUTTON belongs to." (let* ((ewoc ert--results-ewoc) (node (save-excursion (goto-char (ert--button-action-position)) (ert--results-test-node-at-point))) (entry (ewoc-data node))) (setf (ert--ewoc-entry-expanded-p entry) (not (ert--ewoc-entry-expanded-p entry))) (ewoc-invalidate ewoc node))) (defun ert-results-find-test-at-point-other-window () "Find the definition of the test at point in another window. To be used in the ERT results buffer." (interactive) (let ((name (ert-test-at-point))) (unless name (error "No test at point")) (ert-find-test-other-window name))) (defun ert--test-name-button-action (button) "Find the definition of the test BUTTON belongs to, in another window." (let ((name (button-get button 'ert-test-name))) (ert-find-test-other-window name))) (defun ert--ewoc-position (ewoc node) ;; checkdoc-order: nil "Return the position of NODE in EWOC, or nil if NODE is not in EWOC." (loop for i from 0 for node-here = (ewoc-nth ewoc 0) then (ewoc-next ewoc node-here) do (when (eql node node-here) (return i)) finally (return nil))) (defun ert-results-jump-between-summary-and-result () "Jump back and forth between the test run summary and individual test results. From an ewoc node, jumps to the character that represents the same test in the progress bar, and vice versa. To be used in the ERT results buffer." ;; Maybe this command isn't actually needed much, but if it is, it ;; seems like an indication that the UI design is not optimal. If ;; jumping back and forth between a summary at the top of the buffer ;; and the error log in the remainder of the buffer is useful, then ;; the summary apparently needs to be easily accessible from the ;; error log, and perhaps it would be better to have it in a ;; separate buffer to keep it visible. (interactive) (let ((ewoc ert--results-ewoc) (progress-bar-begin ert--results-progress-bar-button-begin)) (cond ((ert--results-test-node-or-null-at-point) (let* ((node (ert--results-test-node-at-point)) (pos (ert--ewoc-position ewoc node))) (goto-char (+ progress-bar-begin pos)))) ((and (<= progress-bar-begin (point)) (< (point) (button-end (button-at progress-bar-begin)))) (let* ((node (ewoc-nth ewoc (- (point) progress-bar-begin))) (entry (ewoc-data node))) (when (ert--ewoc-entry-hidden-p entry) (setf (ert--ewoc-entry-hidden-p entry) nil) (ewoc-invalidate ewoc node)) (ewoc-goto-node ewoc node))) (t (goto-char progress-bar-begin))))) (defun ert-test-at-point () "Return the name of the test at point as a symbol, or nil if none." (or (and (eql major-mode 'ert-results-mode) (let ((test (ert--results-test-at-point-no-redefinition))) (and test (ert-test-name test)))) (let* ((thing (thing-at-point 'symbol)) (sym (intern-soft thing))) (and (ert-test-boundp sym) sym)))) (defun ert--results-test-at-point-no-redefinition () "Return the test at point, or nil. To be used in the ERT results buffer." (assert (eql major-mode 'ert-results-mode)) (if (ert--results-test-node-or-null-at-point) (let* ((node (ert--results-test-node-at-point)) (test (ert--ewoc-entry-test (ewoc-data node)))) test) (let ((progress-bar-begin ert--results-progress-bar-button-begin)) (when (and (<= progress-bar-begin (point)) (< (point) (button-end (button-at progress-bar-begin)))) (let* ((test-index (- (point) progress-bar-begin)) (test (aref (ert--stats-tests ert--results-stats) test-index))) test))))) (defun ert--results-test-at-point-allow-redefinition () "Look up the test at point, and check whether it has been redefined. To be used in the ERT results buffer. Returns a list of two elements: the test (or nil) and a symbol specifying whether the test has been redefined. If a new test has been defined with the same name as the test at point, replaces the test at point with the new test, and returns the new test and the symbol `redefined'. If the test has been deleted, returns the old test and the symbol `deleted'. If the test is still current, returns the test and the symbol nil. If there is no test at point, returns a list with two nils." (let ((test (ert--results-test-at-point-no-redefinition))) (cond ((null test) `(nil nil)) ((null (ert-test-name test)) `(,test nil)) (t (let* ((name (ert-test-name test)) (new-test (and (ert-test-boundp name) (ert-get-test name)))) (cond ((eql test new-test) `(,test nil)) ((null new-test) `(,test deleted)) (t (ert--results-update-after-test-redefinition (ert--stats-test-pos ert--results-stats test) new-test) `(,new-test redefined)))))))) (defun ert--results-update-after-test-redefinition (pos new-test) "Update results buffer after the test at pos POS has been redefined. Also updates the stats object. NEW-TEST is the new test definition." (let* ((stats ert--results-stats) (ewoc ert--results-ewoc) (node (ewoc-nth ewoc pos)) (entry (ewoc-data node))) (ert--stats-set-test-and-result stats pos new-test nil) (setf (ert--ewoc-entry-test entry) new-test (aref ert--results-progress-bar-string pos) (ert-char-for-test-result nil t)) (ewoc-invalidate ewoc node)) nil) (defun ert--button-action-position () "The buffer position where the last button action was triggered." (cond ((integerp last-command-event) (point)) ((eventp last-command-event) (posn-point (event-start last-command-event))) (t (assert nil)))) (defun ert--results-progress-bar-button-action (button) "Jump to details for the test represented by the character clicked in BUTTON." (goto-char (ert--button-action-position)) (ert-results-jump-between-summary-and-result)) (defun ert-results-rerun-all-tests () "Re-run all tests, using the same selector. To be used in the ERT results buffer." (interactive) (assert (eql major-mode 'ert-results-mode)) (let ((selector (ert--stats-selector ert--results-stats))) (ert-run-tests-interactively selector (buffer-name)))) (defun ert-results-rerun-test-at-point () "Re-run the test at point. To be used in the ERT results buffer." (interactive) (destructuring-bind (test redefinition-state) (ert--results-test-at-point-allow-redefinition) (when (null test) (error "No test at point")) (let* ((stats ert--results-stats) (progress-message (format "Running %stest %S" (ecase redefinition-state ((nil) "") (redefined "new definition of ") (deleted "deleted ")) (ert-test-name test)))) ;; Need to save and restore point manually here: When point is on ;; the first visible ewoc entry while the header is updated, point ;; moves to the top of the buffer. This is undesirable, and a ;; simple `save-excursion' doesn't prevent it. (let ((point (point))) (unwind-protect (unwind-protect (progn (message "%s..." progress-message) (ert-run-or-rerun-test stats test ert--results-listener)) (ert--results-update-stats-display ert--results-ewoc stats) (message "%s...%s" progress-message (let ((result (ert-test-most-recent-result test))) (ert-string-for-test-result result (ert-test-result-expected-p test result))))) (goto-char point)))))) (defun ert-results-rerun-test-at-point-debugging-errors () "Re-run the test at point with `ert-debug-on-error' bound to t. To be used in the ERT results buffer." (interactive) (let ((ert-debug-on-error t)) (ert-results-rerun-test-at-point))) (defun ert-results-pop-to-backtrace-for-test-at-point () "Display the backtrace for the test at point. To be used in the ERT results buffer." (interactive) (let* ((test (ert--results-test-at-point-no-redefinition)) (stats ert--results-stats) (pos (ert--stats-test-pos stats test)) (result (aref (ert--stats-test-results stats) pos))) (etypecase result (ert-test-passed (error "Test passed, no backtrace available")) (ert-test-result-with-condition (let ((backtrace (ert-test-result-with-condition-backtrace result)) (buffer (get-buffer-create "*ERT Backtrace*"))) (pop-to-buffer buffer) (setq buffer-read-only t) (let ((inhibit-read-only t)) (buffer-disable-undo) (erase-buffer) (ert-simple-view-mode) ;; Use unibyte because `debugger-setup-buffer' also does so. (set-buffer-multibyte nil) (setq truncate-lines t) (ert--print-backtrace backtrace) (debugger-make-xrefs) (goto-char (point-min)) (insert "Backtrace for test `") (ert-insert-test-name-button (ert-test-name test)) (insert "':\n"))))))) (defun ert-results-pop-to-messages-for-test-at-point () "Display the part of the *Messages* buffer generated during the test at point. To be used in the ERT results buffer." (interactive) (let* ((test (ert--results-test-at-point-no-redefinition)) (stats ert--results-stats) (pos (ert--stats-test-pos stats test)) (result (aref (ert--stats-test-results stats) pos))) (let ((buffer (get-buffer-create "*ERT Messages*"))) (pop-to-buffer buffer) (setq buffer-read-only t) (let ((inhibit-read-only t)) (buffer-disable-undo) (erase-buffer) (ert-simple-view-mode) (insert (ert-test-result-messages result)) (goto-char (point-min)) (insert "Messages for test `") (ert-insert-test-name-button (ert-test-name test)) (insert "':\n"))))) (defun ert-results-pop-to-should-forms-for-test-at-point () "Display the list of `should' forms executed during the test at point. To be used in the ERT results buffer." (interactive) (let* ((test (ert--results-test-at-point-no-redefinition)) (stats ert--results-stats) (pos (ert--stats-test-pos stats test)) (result (aref (ert--stats-test-results stats) pos))) (let ((buffer (get-buffer-create "*ERT list of should forms*"))) (pop-to-buffer buffer) (setq buffer-read-only t) (let ((inhibit-read-only t)) (buffer-disable-undo) (erase-buffer) (ert-simple-view-mode) (if (null (ert-test-result-should-forms result)) (insert "\n(No should forms during this test.)\n") (loop for form-description in (ert-test-result-should-forms result) for i from 1 do (insert "\n") (insert (format "%s: " i)) (let ((begin (point))) (ert--pp-with-indentation-and-newline form-description) (ert--make-xrefs-region begin (point))))) (goto-char (point-min)) (insert "`should' forms executed during test `") (ert-insert-test-name-button (ert-test-name test)) (insert "':\n") (insert "\n") (insert (concat "(Values are shallow copies and may have " "looked different during the test if they\n" "have been modified destructively.)\n")) (forward-line 1))))) (defun ert-results-toggle-printer-limits-for-test-at-point () "Toggle how much of the condition to print for the test at point. To be used in the ERT results buffer." (interactive) (let* ((ewoc ert--results-ewoc) (node (ert--results-test-node-at-point)) (entry (ewoc-data node))) (setf (ert--ewoc-entry-extended-printer-limits-p entry) (not (ert--ewoc-entry-extended-printer-limits-p entry))) (ewoc-invalidate ewoc node))) (defun ert-results-pop-to-timings () "Display test timings for the last run. To be used in the ERT results buffer." (interactive) (let* ((stats ert--results-stats) (start-times (ert--stats-test-start-times stats)) (end-times (ert--stats-test-end-times stats)) (buffer (get-buffer-create "*ERT timings*")) (data (loop for test across (ert--stats-tests stats) for start-time across (ert--stats-test-start-times stats) for end-time across (ert--stats-test-end-times stats) collect (list test (float-time (subtract-time end-time start-time)))))) (setq data (sort data (lambda (a b) (> (second a) (second b))))) (pop-to-buffer buffer) (setq buffer-read-only t) (let ((inhibit-read-only t)) (buffer-disable-undo) (erase-buffer) (ert-simple-view-mode) (if (null data) (insert "(No data)\n") (insert (format "%-3s %8s %8s\n" "" "time" "cumul")) (loop for (test time) in data for cumul-time = time then (+ cumul-time time) for i from 1 do (let ((begin (point))) (insert (format "%3s: %8.3f %8.3f " i time cumul-time)) (ert-insert-test-name-button (ert-test-name test)) (insert "\n")))) (goto-char (point-min)) (insert "Tests by run time (seconds):\n\n") (forward-line 1)))) ;;;###autoload (defun ert-describe-test (test-or-test-name) "Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test)." (interactive (list (ert-read-test-name-at-point "Describe test"))) (when (< emacs-major-version 24) (error "Requires Emacs 24")) (let (test-name test-definition) (etypecase test-or-test-name (symbol (setq test-name test-or-test-name test-definition (ert-get-test test-or-test-name))) (ert-test (setq test-name (ert-test-name test-or-test-name) test-definition test-or-test-name))) (help-setup-xref (list #'ert-describe-test test-or-test-name) (called-interactively-p 'interactive)) (save-excursion (with-help-window (help-buffer) (with-current-buffer (help-buffer) (insert (if test-name (format "%S" test-name) "")) (insert " is a test") (let ((file-name (and test-name (symbol-file test-name 'ert-deftest)))) (when file-name (insert " defined in `" (file-name-nondirectory file-name) "'") (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 'help-function-def test-name file-name))) (insert ".") (fill-region-as-paragraph (point-min) (point)) (insert "\n\n") (unless (and (ert-test-boundp test-name) (eql (ert-get-test test-name) test-definition)) (let ((begin (point))) (insert "Note: This test has been redefined or deleted, " "this documentation refers to an old definition.") (fill-region-as-paragraph begin (point))) (insert "\n\n")) (insert (or (ert-test-documentation test-definition) "It is not documented.") "\n"))))))) (defun ert-results-describe-test-at-point () "Display the documentation of the test at point. To be used in the ERT results buffer." (interactive) (ert-describe-test (ert--results-test-at-point-no-redefinition))) ;;; Actions on load/unload. (add-to-list 'find-function-regexp-alist '(ert-deftest . ert--find-test-regexp)) (add-to-list 'minor-mode-alist '(ert--current-run-stats (:eval (ert--tests-running-mode-line-indicator)))) (add-to-list 'emacs-lisp-mode-hook 'ert--activate-font-lock-keywords) (defun ert--unload-function () "Unload function to undo the side-effects of loading ert.el." (ert--remove-from-list 'find-function-regexp-alist 'ert-deftest :key #'car) (ert--remove-from-list 'minor-mode-alist 'ert--current-run-stats :key #'car) (ert--remove-from-list 'emacs-lisp-mode-hook 'ert--activate-font-lock-keywords) nil) (defvar ert-unload-hook '()) (add-hook 'ert-unload-hook 'ert--unload-function) (provide 'ert) ;;; ert.el ends here irony-mode-0.1.2/server/test/elisp/test-config.el000066400000000000000000000012401242454076400217460ustar00rootroot00000000000000;; -*-no-byte-compile: t; -*- (defvar test-dir (if load-file-name (file-name-as-directory (expand-file-name (concat (file-name-directory load-file-name))))) "Elisp test directory path.") ;; load irony (unless (require 'irony nil t) (let ((irony-dir (expand-file-name "../../.." test-dir))) (add-to-list 'load-path irony-dir) (require 'irony))) ;; load ERT, fallback to a bundled version if not found in `load-path' (unless (require 'ert nil t) (let ((load-path (cons (expand-file-name "support" test-dir) load-path))) (require 'ert)))