pax_global_header00006660000000000000000000000064152706444430014523gustar00rootroot0000000000000052 comment=2db2fb1ee5812d5cd63039d3bcb7c51436b5fcbb icingadb-web-1.5.0/000077500000000000000000000000001527064444300140415ustar00rootroot00000000000000icingadb-web-1.5.0/AUTHORS000066400000000000000000000027411527064444300151150ustar00rootroot00000000000000Alexander A. Klimov Alexander Rieß Alvar Penning Bastian Lederer Eric Lippmann Feu Mourek Florian Strohmaier fsalomon Gabriele Bocchi <40704221+GabrieleBocchi@users.noreply.github.com> Gianluca Piccolo <2795394+gianlucapiccolo@users.noreply.github.com> Jan Schuppik <114286749+Jan-Schuppik@users.noreply.github.com> Johannes Meyer Johannes Rauh Jonada Hoxha Loei Petrus Marogi Lorenz Kästle marianrh <19990392+marianrh@users.noreply.github.com> Marius Hein Markus Opolka mrdsam <69315803+mrdsam@users.noreply.github.com> Noah Hilverling Oscar Zambotti Patrick Dolinic Ravi Kumar Kempapura Srinivasa Sebastian Grund stupiddr Sukhwinder Dhillon Timm Ortloff Tobias Tiederle VerboEse Will_i_code <42240136+w1ll-i-code@users.noreply.github.com> Yonas Habteab icingadb-web-1.5.0/CHANGELOG.md000066400000000000000000000203431527064444300156540ustar00rootroot00000000000000# Icinga DB Web Changelog Please make sure to always read our [Upgrading](https://icinga.com/docs/icinga-db-web/latest/doc/05-Upgrading/) documentation before switching to a new version. ## 1.5.0 All included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/16?closed=1 ### Icinga Notifications v1.0.0 Support This release accompanies the release of Icinga Notifications v1.0.0 and Icinga DB v1.6.0. Earlier versions of Icinga Notifications are no longer compatible. The integration covers the following features: * Setting up Icinga DB for Icinga Notifications [has never been easier](doc/03-Configuration.md#icinga-notifications-configuration). * Host and service details show recipients that were notified about the current problem. * The event overview and object histories indicate how many alerts were triggered by which event and provide easy access to more details. ### New Features * The event overview, notification history and object histories are now separated by date and allow choosing between relative and absolute display of times. #1065 * The host and service overview now include a fourth view mode that represents the table layout previously only available by changing the address bar. You can now also choose the displayed columns easily via the … button in the table header. #82 ### Breaking Changes * The filter column `host.user.name` applies only to contacts associated with a host now. If used in a restriction, users may find that they have access to more hosts or fewer services than before. #975 ### Fixes * Exporting the tactical overview to CSV or JSON works now. #1334 * Custom variables with `host_` or `service_` prefix now have values in tabular view. #1400 ## 1.4.0 All included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/14?closed=1 ### New Features * PHP 8.5 is now supported (#1315) * Exported SQL queries are now easier to copy (#991) * History queries can now disable the MySQL/MariaDB query optimizer via configuration to work around performance problems on affected database versions (#1219) * State pictograms now cover additional states and show tooltips to make them easier to understand (#1271, #1262) * SLA history can now be filtered by hostgroup (#1324) * `[INFO]` and `(INFO)` in plugin output are now rendered as visual state indicators instead of plain text (#1348) ### Fixes * Empty or incomplete object custom variables are handled correctly (#1332) * Setups without the `monitoring` module no longer produce unnecessary integration errors (#1346) * JSON exports with pagination now generate valid JSON without a leading comma (#1349) ## 1.3.0 (2025-11-19) All included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/10?closed=1 ### Icinga Notifications This release accompanies the release of Icinga Notifications v0.2.0. We have changed how notification sources are configured, and now an integration into Icinga Web is mandatory. Icinga DB Web v1.3.0 will serve as the integration for Icinga DB v1.5.0. ### New Features * The *Services* tab of a host and the *History* tab of hosts and services are now filterable (#981, #1293) * Exporting hosts and services to CSV or JSON by using the `?columns=…` query parameter now includes only the columns specified in the parameter in the results (#1011) ### Breaking Changes * The restrictions `icingadb/denylist/variables` and `icingadb/protect/variables` from different roles are now merged into a single list, respectively. This means that variables denied in one role will not show up anymore if another role denies access to different variables. The same applies to `icingadb/protect/variables`, in which case variables protected in one role will now be protected even if another role protects different variables. This has been done to simplify the configuration and to get it more in line with how refusals work in Icinga Web. ### Maintenance * The migration widget in the upper right has now been removed. We assume most users may be rather annoyed by it, and those who are still unsure when to migrate fully to Icinga DB are unlikely to be finally convinced by it anyway. Modules with support for Icinga DB will now default to use it if available. * The upgrading documentation includes more details and other changes, make sure to read it carefully. ## 1.2.4 (2025-11-19) This release includes fixes for the following issues: * Commandtransport in cluster mode is broken #1292 * Redis config: Path "/nix/store" is not writable #1269 * Hide list selection-count and action list hint in minimal layout #1298 ## 1.2.3 (2025-10-16) **Notice:** This is a security release. It is recommended to upgrade _quickly_. See the related CVE: https://github.com/Icinga/icingadb-web/security/advisories/GHSA-w57j-28jc-8429 Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/13?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/releasing-icinga-2-v2-15-1-2-14-7-and-2-13-13-and-icinga-db-web-v1-2-3-and-1-1-4/ ## 1.2.2 (2025-07-16) **Notice:** This is a security release. It is recommended to upgrade _quickly_. See the related CVE: https://github.com/Icinga/icingadb-web/security/advisories/GHSA-q2w7-mrx8-5473 Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/12?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/releasing-icinga-web-2-v2-12-5-icinga-db-web-v1-2-2/ ## 1.2.1 (2025-06-30) This release [fixes an issue](https://github.com/Icinga/icingadb-web/pull/1229) with version comparison that caused incorrect detection of the Icinga DB version. As a result, the health check in Icinga Web will now accurately reflect the current Icinga DB version and no longer incorrectly indicate that an upgrade to version 1.4.0 is still required. ## 1.2.0 (2025-06-18) Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/7?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/icinga-dependency-views/ ## 1.1.3 (2024-08-06) Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/8?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/2024/08/06/releasing-icinga-db-web-v1-1-3-and-a-ipl-security-release/ ## 1.1.2 (2024-04-11) Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/6?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/2024/04/11/releasing-icinga-db-1-2-0-and-icinga-db-web-1-1-2 ## 1.1.1 (2023-11-15) Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/5?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/2023/11/16/releasing-icinga-db-web-v1-1-1-and-icinga-web-2-12-1/ ## 1.1.0 (2023-09-28) Included changes can be found on the milestone: https://github.com/Icinga/icingadb-web/milestone/2?closed=1 And a detailed description about the most important ones on our blog: https://icinga.com/blog/2023/09/28/releasing-icinga-db-web-v1-1/ ## 1.0.2 (2022-11-04) You can find all issues related to this release on the respective [Milestone](https://github.com/Icinga/icingadb-web/milestone/4?closed=1). Notable fixes in this release are that the *GenericTTS* module is now supported and that the legacy integration of modules with no official support for Icinga DB Web is working again, even if the *monitoring* module is disabled. Action and Note URLs, which disappeared with v1.0.1, are also visible again. Some enhancements also found their way in this release. They include improved compatibility with Icinga DB's asynchronous behavior and its migration tool included in the v1.1.0 release. ## 1.0.1 (2022-09-08) Here are Fixes: https://github.com/Icinga/icingadb-web/milestone/3?closed=1 Here someone blogged about them: https://icinga.com/blog/2022/09/08/releasing-icinga-db-web-v1-0-1/ ## 1.0.0 (2022-06-30) First stable release ## 1.0.0 RC2 (2021-11-12) Second release candidate ## 1.0.0 RC1 (2020-03-13) Initial release icingadb-web-1.5.0/CONTRIBUTING.md000066400000000000000000000142451527064444300163000ustar00rootroot00000000000000# Contributing Icinga is an open source project and lives from your ideas and contributions. There are many ways to contribute, from improving the documentation, submitting bug reports and features requests or writing code to add enhancements or fix bugs. #### Table of Contents 1. [Introduction](#introduction) 2. [Fork the Project](#fork-the-project) 3. [Branches](#branches) 4. [Commits](#commits) 5. [Pull Requests](#pull-requests) 6. [Testing](#testing) 7. [Source Code Patches](#source-code-patches) 8. [Documentation Patches](#documentation-patches) ## Introduction Please consider our [roadmap](https://github.com/Icinga/icingadb-web/milestones) and [open issues](https://github.com/icinga/icingadb-web/issues) when you start contributing to the project. Before starting your work on Icinga DB Web, you should [fork the project](https://help.github.com/articles/fork-a-repo/) to your GitHub account. This allows you to freely experiment with your changes. When your changes are complete, submit a [pull request](https://help.github.com/articles/using-pull-requests/). All pull requests will be reviewed and merged if they suit some general guidelines: * Changes are located in a topic branch * For new functionality, proper tests are written * Changes should follow the existing coding style and standards Please continue reading in the following sections for a step by step guide. ## Fork the Project [Fork the project](https://help.github.com/articles/fork-a-repo/) to your GitHub account and clone the repository: ``` git clone git@github.com:jdoe/icingadb-web.git cd icingadb-web ``` Add a new remote `upstream` with this repository as value. ``` git remote add upstream https://github.com/icinga/icingadb-web.git ``` You can pull updates to your fork's default branch: ``` git fetch --all git pull upstream HEAD ``` Please continue to learn about [branches](#branches). ## Branches Choosing a proper name for a branch helps us identify its purpose and possibly find an associated bug or feature. Generally a branch name should include a topic such as `fix` or `feature` followed by a description and an issue number if applicable. Branches should have only changes relevant to a specific issue. ``` git checkout -b fix/service-template-typo-1234 git checkout -b feature/config-handling-1235 ``` Continue to apply your changes and test them. More details on specific changes: * [Source Code Patches](#source-code-patches) * [Documentation Patches](#documentation-patches) ## Commits Once you've finished your work in a branch, please ensure to commit your changes. A good commit message includes a short topic, additional body and a reference to the issue you wish to solve (if existing). Fixes: ``` Fix missing style in detail view refs #4567 ``` Features: ``` Add DateTime picker refs #1234 ``` You can add multiple commits during your journey to finish your patch. Don't worry, you can squash those changes into a single commit later on. ## Pull Requests Once you've committed your changes, please update your local default branch and rebase your fix/feature branch against it before submitting a PR. ``` git checkout main git pull upstream HEAD git checkout fix/style-detail-view-5678 git rebase main ``` Once you've resolved any conflicts, push the branch to your remote repository. It might be necessary to force push after rebasing - use with care! New branch: ``` git push --set-upstream origin fix/style-detail-view-5678 ``` Existing branch: ``` git push -f origin fix/style-detail-view-5678 ``` You can now either use the [hub](https://hub.github.com) CLI tool to create a PR, or navigate to your GitHub repository and create a PR there. The pull request should again contain a telling subject and a reference with `fixes` to an existing issue id if any. That allows developers to automatically resolve the issues once your PR gets merged. ``` hub pull-request fixes #1234 ``` Thanks a lot for your contribution! ### Rebase a Branch If you accidentally sent in a PR which was not rebased against the upstream default branch, developers might ask you to rebase your PR. First off, fetch and pull the default branch. ``` git checkout main git fetch --all git pull upstream HEAD ``` Then change to your working branch and start rebasing it against the default: ``` git checkout fix/style-detail-view-5678 git rebase main ``` If you are running into a conflict, rebase will stop and ask you to fix the problems. ``` git status both modified: path/to/conflict.php ``` Edit the file and search for `>>>`. Fix, build, test and save as needed. Add the modified file(s) and continue rebasing. ``` git add path/to/conflict.php git rebase --continue ``` Once succeeded ensure to push your changed history remotely. ``` git push -f origin fix/style-detail-view-5678 ``` If you fear to break things, do the rebase in a backup branch first and later replace your current branch. ``` git checkout fix/style-detail-view-5678 git checkout -b fix/style-detail-view-5678-rebase git rebase main git branch -D fix/style-detail-view-5678 git checkout -b fix/style-detail-view-5678 git push -f origin fix/style-detail-view-5678 ``` ### Squash Commits > **Note:** > > Be careful with squashing. This might lead to non-recoverable mistakes. > > This is for advanced Git users. Say you want to squash the last 3 commits in your branch into a single one. Start an interactive (`-i`) rebase from current HEAD minus three commits (`HEAD~3`). ``` git rebase -i HEAD~3 ``` Git opens your preferred editor. `pick` the commit in the first line, change `pick` to `squash` on the other lines. ``` pick e4bf04e47 Fix style detail view squash d7b939d99 Tests squash b37fd5377 Doc updates ``` Save and let rebase to its job. Then force push the changes to the remote origin. ``` git push -f origin fix/style-detail-view-5678 ``` ## Testing TBD ## Source Code Patches Icinga DB Web is written in PHP, LESS and JavaScript. ## Documentation Patches The documentation is written in GitHub flavored [Markdown](https://guides.github.com/features/mastering-markdown/). It is located in the `doc/` directory and can be edited with your preferred editor. You can also edit it online on GitHub. ``` vim doc/02-Installation.md ``` icingadb-web-1.5.0/LICENSE.md000066400000000000000000001045131527064444300154510ustar00rootroot00000000000000 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 . icingadb-web-1.5.0/README.md000066400000000000000000000052511527064444300153230ustar00rootroot00000000000000# Icinga DB Web Icinga DB is a set of components for publishing, synchronizing and visualizing monitoring data in the Icinga ecosystem, consisting of: * Icinga DB Web which connects to both a Redis®[\*](doc/TRADEMARKS.md#redis) server and a database to view and work with most up-to-date monitoring data * Icinga 2 with its [Icinga DB feature](https://icinga.com/docs/icinga-2/latest/doc/14-features/#icinga-db) enabled, responsible for publishing the data to the Redis® server, i.e. configuration and its runtime updates, check results, state changes, downtimes, acknowledgements, notifications, and other events such as flapping * And the [Icinga DB daemon](https://icinga.com/docs/icinga-db), which synchronizes the data between the Redis® server and the database ![Icinga DB Architecture](doc/res/icingadb-architecture.png) ## Documentation Icinga DB Web documentation is available at [icinga.com/docs](https://icinga.com/docs/icinga-db-web/latest/). ## Features Icinga DB Web offers a modern and streamlined design to provide a clear and concise view of your monitoring environment, also with dark and light mode support. ![Icinga DB Dashboard](doc/res/icingadb-dashboard.png) ### Various List Layouts The view switcher allows to control the level of detail displayed in host and service list views: ![View Switcher Preview](doc/res/view-switcher-preview.png) ### Search with Autocomplete The search bar in list views can be used for everything from simple searches to creating complex filters. It allows full keyboard control and also supports contextual auto-completion. In addition, there is an editor for easier filter creation. ![Searchbar Completion Preview](doc/res/searchbar-completion-preview.png) ### Clean Detail Views Host and service detail views are structured to make best use of available space. Related information is grouped and important information is at the top for instant access without having to scroll down. ![Service Detail Preview](doc/res/service-detail-preview.png) ### Modal Dialogs Any interaction that requires user input, such as acknowledging problems, scheduling downtimes, etc., shows a modal dialog over the current view to preserve context and focus on interaction. ![Modal Dialog Preview](doc/res/modal-dialog-preview.png) ### Bulk Operations Bulk interactions such as scheduling downtimes for multiple objects, acknowledging multiple problems, etc. are easily accomplished with the `Continue With` control that operates on filtered lists. ![Continue With Preview](doc/res/continue-with-preview.png) ## License Icinga DB Web and the Icinga DB Web documentation are licensed under the terms of the [GNU General Public License Version 3](LICENSE.md). icingadb-web-1.5.0/SECURITY.md000066400000000000000000000004401527064444300156300ustar00rootroot00000000000000# Security Policy ## Supported Versions The latest two minors. If it's a critical threat and the latest minor is just a few weeks old, the third latest minor may also get an update. ## Reporting a Vulnerability Please head [here](https://icinga.com/company/contact/security-issues/). icingadb-web-1.5.0/application/000077500000000000000000000000001527064444300163445ustar00rootroot00000000000000icingadb-web-1.5.0/application/clicommands/000077500000000000000000000000001527064444300206355ustar00rootroot00000000000000icingadb-web-1.5.0/application/clicommands/MigrateCommand.php000066400000000000000000000754531527064444300242530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Clicommands; use Icinga\Application\Config; use Icinga\Application\Logger; use Icinga\Cli\Command; use Icinga\Data\ConfigObject; use Icinga\Exception\NotReadableError; use Icinga\Exception\NotWritableError; use Icinga\Module\Icingadb\Compat\UrlMigrator; use Icinga\Util\DirectoryIterator; use Icinga\Web\Request; use ipl\Stdlib\Str; use ipl\Web\Filter\QueryString; use ipl\Web\Url; class MigrateCommand extends Command { /** @var bool Skip the migration, only perform transformations */ protected $skipMigration = false; public function init(): void { Logger::getInstance()->setLevel(Logger::INFO); } /** * Migrate monitoring navigation items to Icinga DB Web * * USAGE * * icingacli icingadb migrate navigation [options] * * REQUIRED OPTIONS: * * --user= Migrate navigation items whose owner matches the given * name or owners matching the given pattern. Wildcard * matching by `*` possible. * * OPTIONS: * * --override Replace existing or already migrated items * (Attention: Actions are not backed up) * * --no-backup Remove monitoring actions and don't back up menu items */ public function navigationAction(): void { /** @var string $user */ $user = $this->params->getRequired('user'); $noBackup = $this->params->get('no-backup'); $preferencesPath = Config::resolvePath('preferences'); $sharedNavigation = Config::resolvePath('navigation'); if (! file_exists($preferencesPath) && ! file_exists($sharedNavigation)) { Logger::info('There are no user navigation items to migrate'); return; } $rc = 0; $directories = file_exists($preferencesPath) ? new DirectoryIterator($preferencesPath) : []; $anythingChanged = false; /** @var string $directory */ foreach ($directories as $directory) { /** @var string $username */ $username = $directories->key() === false ? '' : $directories->key(); if (fnmatch($user, $username) === false) { continue; } $menuItems = $this->readFromIni($directory . '/menu.ini', $rc); $hostActions = $this->readFromIni($directory . '/host-actions.ini', $rc); $serviceActions = $this->readFromIni($directory . '/service-actions.ini', $rc); $icingadbHostActions = $this->readFromIni($directory . '/icingadb-host-actions.ini', $rc); $icingadbServiceActions = $this->readFromIni($directory . '/icingadb-service-actions.ini', $rc); $menuUpdated = false; $originalMenuItems = $this->readFromIni($directory . '/menu.ini', $rc); Logger::info( 'Transforming legacy wildcard filters of existing Icinga DB Web items for user "%s"', $username ); if (! $menuItems->isEmpty()) { $menuUpdated = $this->transformNavigationItems($menuItems, $username, $rc); $anythingChanged |= $menuUpdated; } if (! $icingadbHostActions->isEmpty()) { $anythingChanged |= $this->transformNavigationItems($icingadbHostActions, $username, $rc); } if (! $icingadbServiceActions->isEmpty()) { $anythingChanged |= $this->transformNavigationItems( $icingadbServiceActions, $username, $rc ); } if (! $this->skipMigration) { Logger::info('Migrating monitoring navigation items for user "%s" to Icinga DB Web', $username); if (! $menuItems->isEmpty()) { $menuUpdated = $this->migrateNavigationItems($menuItems, $username, $directory . '/menu.ini', $rc); $anythingChanged |= $menuUpdated; } if (! $hostActions->isEmpty()) { $anythingChanged |= $this->migrateNavigationItems( $hostActions, $username, $directory . '/icingadb-host-actions.ini', $rc ); } if (! $serviceActions->isEmpty()) { $anythingChanged |= $this->migrateNavigationItems( $serviceActions, $username, $directory . '/icingadb-service-actions.ini', $rc ); } } if ($menuUpdated && ! $noBackup) { $this->createBackupIni("$directory/menu", $originalMenuItems); } } // Start migrating shared navigation items $menuItems = $this->readFromIni($sharedNavigation . '/menu.ini', $rc); $hostActions = $this->readFromIni($sharedNavigation . '/host-actions.ini', $rc); $serviceActions = $this->readFromIni($sharedNavigation . '/service-actions.ini', $rc); $icingadbHostActions = $this->readFromIni($sharedNavigation . '/icingadb-host-actions.ini', $rc); $icingadbServiceActions = $this->readFromIni($sharedNavigation . '/icingadb-service-actions.ini', $rc); $menuUpdated = false; $originalMenuItems = $this->readFromIni($sharedNavigation . '/menu.ini', $rc); Logger::info('Transforming legacy wildcard filters of existing shared Icinga DB Web navigation items'); if (! $menuItems->isEmpty()) { $menuUpdated = $this->transformNavigationItems($menuItems, $user, $rc); $anythingChanged |= $menuUpdated; } if (! $icingadbHostActions->isEmpty()) { $anythingChanged |= $this->transformNavigationItems($icingadbHostActions, $user, $rc); } if (! $icingadbServiceActions->isEmpty()) { $anythingChanged |= $this->transformNavigationItems( $icingadbServiceActions, $user, $rc ); } if (! $this->skipMigration) { Logger::info('Migrating shared monitoring navigation items to the Icinga DB Web items'); if (! $menuItems->isEmpty()) { $menuUpdated = $this->migrateNavigationItems($menuItems, $user, $sharedNavigation . '/menu.ini', $rc); $anythingChanged |= $menuUpdated; } if (! $hostActions->isEmpty()) { $anythingChanged |= $this->migrateNavigationItems( $hostActions, $user, $sharedNavigation . '/icingadb-host-actions.ini', $rc ); } if (! $serviceActions->isEmpty()) { $anythingChanged |= $this->migrateNavigationItems( $serviceActions, $user, $sharedNavigation . '/icingadb-service-actions.ini', $rc ); } } if ($menuUpdated && ! $noBackup) { $this->createBackupIni("$sharedNavigation/menu", $originalMenuItems); } if ($rc > 0) { if ($this->skipMigration) { Logger::error('Failed to transform some icingadb navigation items'); } else { Logger::error('Failed to migrate some monitoring navigation items'); } exit($rc); } if (! $anythingChanged) { Logger::info('Nothing to do'); } elseif ($this->skipMigration) { Logger::info('Successfully transformed all icingadb navigation item filters'); } else { Logger::info('Successfully migrated all monitoring navigation items'); } } /** * Migrate monitoring restrictions and permissions to Icinga DB Web * * Migrated roles do not grant general or full access to users afterward. * It is recommended to review any changes made by this command, before * manually granting access. * * USAGE * * icingacli icingadb migrate role [options] * * REQUIRED OPTIONS: (Use either, not both) * * --group= Update roles that are assigned to the given group or to * groups matching the pattern. Wildcard matching by `*` * possible. * * --role= Update role with the given name or roles whose names * match the pattern. Wildcard matching by `*` possible. * * OPTIONS: * * --override Reset any existing Icinga DB Web rules * * --no-backup Don't back up roles */ public function roleAction(): void { /** @var ?bool $override */ $override = $this->params->get('override'); $noBackup = $this->params->get('no-backup'); /** @var ?string $groupName */ $groupName = $this->params->get('group'); /** @var ?string $roleName */ $roleName = $this->params->get('role'); if ($roleName === null && $groupName === null) { $this->fail("One of the parameters 'group' or 'role' must be supplied"); } elseif ($roleName !== null && $groupName !== null) { $this->fail("Use either 'group' or 'role'. Both cannot be used as role overrules group."); } $rc = 0; $changed = false; $restrictions = Config::$configDir . '/roles.ini'; $rolesConfig = $this->readFromIni($restrictions, $rc); $monitoringRestriction = 'monitoring/filter/objects'; $monitoringPropertyBlackList = 'monitoring/blacklist/properties'; $icingadbRestrictions = [ 'objects' => 'icingadb/filter/objects', 'hosts' => 'icingadb/filter/hosts', 'services' => 'icingadb/filter/services' ]; $icingadbPropertyDenyList = 'icingadb/denylist/variables'; foreach ($rolesConfig as $name => $role) { /** @var string[] $role */ $role = iterator_to_array($role); if ($roleName === '*' || $groupName === '*') { $roleMatch = true; } elseif ($roleName !== null && fnmatch($roleName, $name)) { $roleMatch = true; } elseif ($groupName !== null && isset($role['groups'])) { $roleGroups = array_map('trim', explode(',', $role['groups'])); $roleMatch = false; foreach ($roleGroups as $roleGroup) { if (fnmatch($groupName, $roleGroup)) { $roleMatch = true; break; } } } else { $roleMatch = false; } if ($roleMatch && ! $this->skipMigration && $this->shouldUpdateRole($role, $override)) { if (isset($role[$monitoringRestriction])) { Logger::info( 'Migrating monitoring restriction filter for role "%s" to the Icinga DB Web restrictions', $name ); $transformedFilter = UrlMigrator::transformFilter( QueryString::parse($role[$monitoringRestriction]) ); if ($transformedFilter) { $role[$icingadbRestrictions['objects']] = QueryString::render($transformedFilter); $changed = true; } } if (isset($role[$monitoringPropertyBlackList])) { Logger::info( 'Migrating monitoring blacklisted properties for role "%s" to the Icinga DB Web deny list', $name ); $icingadbProperties = []; foreach (explode(',', $role[$monitoringPropertyBlackList]) as $property) { $icingadbProperties[] = preg_replace('/^(?:host|service)\.vars\./i', '', $property, 1); } $role[$icingadbPropertyDenyList] = str_replace( '**', '*', implode(',', array_unique($icingadbProperties)) ); $changed = true; } if (isset($role['permissions'])) { $updatedPermissions = []; Logger::info( 'Migrating monitoring permissions for role "%s" to the Icinga DB Web permissions', $name ); if (strpos($role['permissions'], 'monitoring')) { $monitoringProtection = Config::module('monitoring') ->get('security', 'protected_customvars'); if ($monitoringProtection !== null) { $role['icingadb/protect/variables'] = $monitoringProtection; $changed = true; } } foreach (explode(',', $role['permissions']) as $permission) { if (Str::startsWith($permission, 'icingadb/') || $permission === 'module/icingadb') { continue; } elseif (Str::startsWith($permission, 'monitoring/command/')) { $changed = true; $updatedPermissions[] = $permission; $updatedPermissions[] = str_replace('monitoring/', 'icingadb/', $permission); } elseif ($permission === 'no-monitoring/contacts') { $changed = true; $updatedPermissions[] = $permission; $role['icingadb/denylist/routes'] = 'contacts,contactgroups'; } else { $updatedPermissions[] = $permission; } } $role['permissions'] = implode(',', $updatedPermissions); } if (isset($role['refusals']) && is_string($role['refusals'])) { $updatedRefusals = []; Logger::info( 'Migrating monitoring refusals for role "%s" to the Icinga DB Web refusals', $name ); foreach (explode(',', $role['refusals']) as $refusal) { if (Str::startsWith($refusal, 'icingadb/') || $refusal === 'module/icingadb') { continue; } elseif (Str::startsWith($refusal, 'monitoring/command/')) { $changed = true; $updatedRefusals[] = $refusal; $updatedRefusals[] = str_replace('monitoring/', 'icingadb/', $refusal); } else { $updatedRefusals[] = $refusal; } } $role['refusals'] = implode(',', $updatedRefusals); } } if ($roleMatch) { foreach ($icingadbRestrictions as $object => $icingadbRestriction) { if (isset($role[$icingadbRestriction]) && is_string($role[$icingadbRestriction])) { $filter = QueryString::parse($role[$icingadbRestriction]); $filter = UrlMigrator::transformLegacyWildcardFilter($filter); if ($filter) { $filter = QueryString::render($filter); if ($filter !== $role[$icingadbRestriction]) { Logger::info( 'Icinga Db Web restriction of role "%s" for %s changed from "%s" to "%s"', $name, $object, $role[$icingadbRestriction], $filter ); $role[$icingadbRestriction] = $filter; $changed = true; } } } } } $rolesConfig->setSection($name, $role); } if ($changed) { if (! $noBackup) { $this->createBackupIni(Config::$configDir . '/roles'); } try { $rolesConfig->saveIni(); } catch (NotWritableError $error) { Logger::error($error); if ($this->skipMigration) { Logger::error('Failed to transform icingadb restrictions'); } else { Logger::error('Failed to migrate monitoring restrictions'); } exit(256); } if ($this->skipMigration) { Logger::info('Successfully transformed all icingadb restrictions'); } else { Logger::info('Successfully migrated monitoring restrictions and permissions in roles'); } } else { Logger::info('Nothing to do'); } } /** * Migrate monitoring dashboards to Icinga DB Web * * USAGE * * icingacli icingadb migrate dashboard [options] * * REQUIRED OPTIONS: * * --user= Migrate dashboards whose owner matches the given * name or owners matching the given pattern. Wildcard * matching by `*` possible. * * OPTIONS: * * --no-backup Don't back up dashboards */ public function dashboardAction(): void { /** @var string $user */ $user = $this->params->getRequired('user'); $noBackup = $this->params->get('no-backup'); $dashboardsPath = Config::resolvePath('dashboards'); if (! file_exists($dashboardsPath)) { Logger::info('There are no dashboards to migrate'); return; } $rc = 0; $directories = new DirectoryIterator($dashboardsPath); $anythingChanged = false; /** @var string $directory */ foreach ($directories as $directory) { /** @var string $userName */ $userName = $directories->key() === false ? '' : $directories->key(); if (fnmatch($user, $userName) === false) { continue; } $dashboardsConfig = $this->readFromIni($directory . '/dashboard.ini', $rc); $backupConfig = $this->readFromIni($directory . '/dashboard.ini', $rc); Logger::info( 'Migrating monitoring dashboards to Icinga DB Web dashboards for user "%s"', $userName ); $changed = false; /** @var ConfigObject $dashboardConfig */ foreach ($dashboardsConfig->getConfigObject() as $name => $dashboardConfig) { $dashboardUrlString = $dashboardConfig->get('url'); if ($dashboardUrlString !== null) { $dashBoardUrl = Url::fromPath($dashboardUrlString, [], new Request()); if (! $this->skipMigration && Str::startsWith(ltrim($dashboardUrlString, '/'), 'monitoring/')) { $dashboardConfig->url = UrlMigrator::transformUrl($dashBoardUrl)->getRelativeUrl(); $changed = true; } if (Str::startsWith(ltrim($dashboardUrlString, '/'), 'icingadb/')) { $finalUrl = $dashBoardUrl->onlyWith(['sort', 'limit', 'view', 'columns', 'page']); $params = $dashBoardUrl->without(['sort', 'limit', 'view', 'columns', 'page'])->getParams(); $filter = QueryString::parse($params->toString()); $filter = UrlMigrator::transformLegacyWildcardFilter($filter); if ($filter) { $oldFilterString = $params->toString(); $newFilterString = QueryString::render($filter); if ($oldFilterString !== $newFilterString) { Logger::info( 'Icinga Db Web filter of dashboard "%s" has changed from "%s" to "%s"', $name, $params->toString(), QueryString::render($filter) ); $finalUrl->setFilter($filter); $dashboardConfig->url = $finalUrl->getRelativeUrl(); $changed = true; } } } } } if ($changed && $noBackup === null) { $this->createBackupIni("$directory/dashboard", $backupConfig); } if ($changed) { $anythingChanged = true; } try { $dashboardsConfig->saveIni(); } catch (NotWritableError $error) { Logger::error($error); $rc = 256; } } if ($rc > 0) { if ($this->skipMigration) { Logger::error('Failed to transform some icingadb dashboards'); } else { Logger::error('Failed to migrate some monitoring dashboards'); } exit($rc); } if (! $anythingChanged) { Logger::info('Nothing to do'); } elseif ($this->skipMigration) { Logger::info('Successfully transformed all icingadb dashboards'); } else { Logger::info('Successfully migrated dashboards for all the matched users'); } } /** * Migrate Icinga DB Web wildcard filters of navigation items, dashboards and roles * * USAGE * * icingacli icingadb migrate filter * * OPTIONS: * * --no-backup Don't back up menu items, dashboards and roles */ public function filterAction(): void { $this->skipMigration = true; $this->params->set('user', '*'); $this->navigationAction(); $this->dashboardAction(); $this->params->set('role', '*'); $this->roleAction(); } private function transformNavigationItems(Config $config, string $owner, int &$rc): bool { $updated = false; /** @var ConfigObject $newConfigObject */ foreach ($config->getConfigObject() as $section => $newConfigObject) { $configOwner = $newConfigObject->get('owner') ?? ''; if ($configOwner && ! fnmatch($owner, $configOwner)) { continue; } if ( $newConfigObject->get('type') === 'icingadb-host-action' || $newConfigObject->get('type') === 'icingadb-service-action' ) { /** @var ?string $legacyFilter */ $legacyFilter = $newConfigObject->get('filter'); if ($legacyFilter !== null) { $filter = QueryString::parse($legacyFilter); $filter = UrlMigrator::transformLegacyWildcardFilter($filter); if ($filter) { $filter = QueryString::render($filter); if ($legacyFilter !== $filter) { $newConfigObject->filter = $filter; $updated = true; Logger::info( 'Icinga DB Web filter of action "%s" is changed from %s to "%s"', $section, $legacyFilter, $filter ); } } } } /** @var string $url */ $url = $newConfigObject->get('url'); if ($url && Str::startsWith(ltrim($url, '/'), 'icingadb/')) { $url = Url::fromPath($url, [], new Request()); $finalUrl = $url->onlyWith(['sort', 'limit', 'view', 'columns', 'page']); $params = $url->without(['sort', 'limit', 'view', 'columns', 'page'])->getParams(); $filter = QueryString::parse($params->toString()); $filter = UrlMigrator::transformLegacyWildcardFilter($filter); if ($filter) { $oldFilterString = $params->toString(); $newFilterString = QueryString::render($filter); if ($oldFilterString !== $newFilterString) { Logger::info( 'Icinga Db Web filter of navigation item "%s" has changed from "%s" to "%s"', $section, $oldFilterString, $newFilterString ); $newConfigObject->url = $finalUrl->setFilter($filter)->getRelativeUrl(); $updated = true; } } } } if ($updated) { try { $config->saveIni(); } catch (NotWritableError $error) { Logger::error($error); $rc = 256; return false; } } return $updated; } /** * Migrate the given config to the given new config path * * @param Config $config * @param string $owner * @param string $path * @param int $rc * * @return bool */ private function migrateNavigationItems(Config $config, string $owner, string $path, int &$rc): bool { $deleteLegacyFiles = $this->params->get('no-backup'); $override = $this->params->get('override'); $newConfig = $config->getConfigFile() === $path ? $config : $this->readFromIni($path, $rc); $updated = false; /** @var ConfigObject $configObject */ foreach ($config->getConfigObject() as $configObject) { $configOwner = $configObject->get('owner') ?? ''; if ($configOwner && ! fnmatch($owner, $configOwner)) { continue; } $migrateFilter = false; if ($configObject->type === 'host-action') { $updated = true; $migrateFilter = true; $configObject->type = 'icingadb-host-action'; } elseif ($configObject->type === 'service-action') { $updated = true; $migrateFilter = true; $configObject->type = 'icingadb-service-action'; } /** @var ?string $urlString */ $urlString = $configObject->get('url'); if ($urlString !== null) { $urlString = str_replace( ['$SERVICEDESC$', '$HOSTNAME$', '$HOSTADDRESS$', '$HOSTADDRESS6$'], ['$service.name$', '$host.name$', '$host.address$', '$host.address6$'], $urlString ); if ($urlString !== $configObject->url) { $configObject->url = $urlString; $updated = true; } $url = Url::fromPath($urlString, [], new Request()); try { $urlString = UrlMigrator::transformUrl($url)->getRelativeUrl(); $configObject->url = $urlString; $updated = true; } catch (\InvalidArgumentException $err) { // Do nothing } } /** @var ?string $legacyFilter */ $legacyFilter = $configObject->get('filter'); if ($migrateFilter && $legacyFilter) { $updated = true; $filter = QueryString::parse($legacyFilter); $filter = UrlMigrator::transformFilter($filter); if ($filter !== false) { $configObject->filter = QueryString::render($filter); } else { unset($configObject->filter); } } $section = $config->key(); if (! $newConfig->hasSection($section) || $newConfig === $config || $override) { $newConfig->setSection($section, $configObject); } } if ($updated) { try { $newConfig->saveIni(); // Remove the legacy file only if explicitly requested if ($deleteLegacyFiles && $newConfig !== $config) { unlink($config->getConfigFile()); } } catch (NotWritableError $error) { Logger::error($error); $rc = 256; return false; } } return $updated; } /** * Get the navigation items config from the given ini path * * @param string $path Absolute path of the ini file * @param int $rc The return code used to exit the action * * @return Config */ private function readFromIni($path, &$rc) { try { $config = Config::fromIni($path); } catch (NotReadableError $error) { Logger::error($error); $config = new Config(); $rc = 128; } return $config; } private function createBackupIni(string $path, ?Config $config = null): void { $counter = 0; while (true) { $filepath = $counter > 0 ? "$path.backup$counter.ini" : "$path.backup.ini"; if (! file_exists($filepath)) { if ($config) { $config->saveIni($filepath); } else { copy("$path.ini", $filepath); } break; } else { $counter++; } } } /** * Checks if the given role should be updated * * @param string[] $role * @param bool $override * * @return bool */ private function shouldUpdateRole(array $role, ?bool $override): bool { return ! ( isset($role['icingadb/filter/objects']) || isset($role['icingadb/filter/hosts']) || isset($role['icingadb/filter/services']) || isset($role['icingadb/denylist/routes']) || isset($role['icingadb/denylist/variables']) || isset($role['icingadb/protect/variables']) || (isset($role['permissions']) && str_contains($role['permissions'], 'icingadb')) ) || $override; } } icingadb-web-1.5.0/application/controllers/000077500000000000000000000000001527064444300207125ustar00rootroot00000000000000icingadb-web-1.5.0/application/controllers/AlertController.php000066400000000000000000000024751527064444300245460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Module\Icingadb\Model\AlertHistory; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\AlertDetail; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; class AlertController extends Controller { protected AlertHistory $alert; public function init() { $this->addTitleTab($this->translate('Alert')); $this->assertPermission('icingadb/notifications/usage'); $id = hex2bin($this->params->getRequired('id')); $query = AlertHistory::on($this->getDb()) ->with(['host', 'host.state', 'service', 'service.state']) ->filter(Filter::equal('id', $id)) ->disableDefaultSort() ->limit(1); $this->applyRestrictions($query); /** @var ?AlertHistory $alert */ $alert = $query->first(); if ($alert === null) { $this->httpNotFound($this->translate('Alert not found')); } $this->alert = $alert; } public function indexAction() { $this->addControl(new ObjectHeader($this->alert)); $this->addContent(new AlertDetail($this->alert)); } } icingadb-web-1.5.0/application/controllers/CommandTransportController.php000066400000000000000000000117061527064444300267670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Application\Config; use Icinga\Data\Filter\Filter; use Icinga\Forms\ConfirmRemovalForm; use Icinga\Module\Icingadb\Command\Transport\CommandTransportConfig; use Icinga\Module\Icingadb\Forms\ApiTransportForm; use Icinga\Module\Icingadb\Widget\ItemList\CommandTransportList; use Icinga\Web\Notification; use ipl\Html\HtmlString; use ipl\Web\Widget\ButtonLink; class CommandTransportController extends ConfigController { public function init() { $this->assertPermission('config/modules'); } public function indexAction() { $list = new CommandTransportList((new CommandTransportConfig())->select()); $this->addControl( (new ButtonLink( t('Create Command Transport'), 'icingadb/command-transport/add', 'plus' ))->setBaseTarget('_next') ); $this->addContent($list); $this->mergeTabs($this->Module()->getConfigTabs()); $this->getTabs()->disableLegacyExtensions(); $this->setTitle($this->getTabs() ->activate('command-transports') ->getActiveTab() ->getLabel()); } public function showAction() { $transportName = $this->params->getRequired('name'); $transportConfig = (new CommandTransportConfig()) ->select() ->where('name', $transportName) ->fetchRow(); if ($transportConfig === false) { $this->httpNotFound(t('Unknown transport')); } $form = new ApiTransportForm(); $form->populate((array) $transportConfig); $form->on(ApiTransportForm::ON_SUCCESS, function (ApiTransportForm $form) use ($transportName) { (new CommandTransportConfig())->update( 'transport', $form->getValues(), Filter::where('name', $transportName) ); Notification::success(sprintf(t('Updated command transport "%s" successfully'), $transportName)); $this->redirectNow('icingadb/command-transport'); }); $form->handleRequest(ServerRequest::fromGlobals()); $this->addContent($form); $this->addTitleTab($this->translate('Command Transport: %s'), $transportName); $this->getTabs()->disableLegacyExtensions(); } public function addAction() { $form = new ApiTransportForm(); $form->on(ApiTransportForm::ON_SUCCESS, function (ApiTransportForm $form) { (new CommandTransportConfig())->insert('transport', $form->getValues()); Notification::success(t('Created command transport successfully')); $this->redirectNow('icingadb/command-transport'); }); $form->handleRequest(ServerRequest::fromGlobals()); $this->addContent($form); $this->addTitleTab($this->translate('Add Command Transport')); $this->getTabs()->disableLegacyExtensions(); } public function removeAction() { $transportName = $this->params->getRequired('name'); $form = new ConfirmRemovalForm(); $form->setOnSuccess(function () use ($transportName) { (new CommandTransportConfig())->delete( 'transport', Filter::where('name', $transportName) ); Notification::success(sprintf(t('Removed command transport "%s" successfully'), $transportName)); $this->redirectNow('icingadb/command-transport'); }); $form->handleRequest(); $this->addContent(HtmlString::create($form->render())); $this->setTitle($this->translate('Remove Command Transport: %s'), $transportName); $this->getTabs()->disableLegacyExtensions(); } public function sortAction() { $transportName = $this->params->getRequired('name'); $newPosition = (int) $this->params->getRequired('pos'); $config = $this->Config('commandtransports'); if (! $config->hasSection($transportName)) { $this->httpNotFound(t('Unknown transport')); } if ($newPosition < 0 || $newPosition > $config->count()) { $this->httpBadRequest(t('Position out of bounds')); } $transports = $config->getConfigObject()->toArray(); $transportNames = array_keys($transports); array_splice($transportNames, array_search($transportName, $transportNames, true), 1); array_splice($transportNames, $newPosition, 0, [$transportName]); $sortedTransports = []; foreach ($transportNames as $name) { $sortedTransports[$name] = $transports[$name]; } $newConfig = Config::fromArray($sortedTransports); $newConfig->saveIni($config->getConfigFile()); $this->redirectNow('icingadb/command-transport'); } } icingadb-web-1.5.0/application/controllers/CommentController.php000066400000000000000000000025601527064444300250740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\CommentDetail; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; class CommentController extends Controller { /** @var Comment The comment object */ protected $comment; public function init() { $this->addTitleTab(t('Comment')); $name = $this->params->getRequired('name'); $query = Comment::on($this->getDb())->with([ 'host', 'host.state', 'service', 'service.state', 'service.host', 'service.host.state' ]); $query->filter(Filter::equal('comment.name', $name)); $this->applyRestrictions($query); $comment = $query->first(); if ($comment === null) { throw new NotFoundError(t('Comment not found')); } $this->comment = $comment; } public function indexAction() { $this->addControl(new ObjectHeader($this->comment)); $this->addContent(new CommentDetail($this->comment)); $this->setAutorefreshInterval(10); } } icingadb-web-1.5.0/application/controllers/CommentsController.php000066400000000000000000000151421527064444300252570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Forms\Command\Object\DeleteCommentForm; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class CommentsController extends Controller { use CommandActions; public function indexAction() { $this->addTitleTab(t('Comments')); $compact = $this->view->compact; $db = $this->getDb(); $comments = Comment::on($db)->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($comments); $sortControl = $this->createSortControl( $comments, [ 'comment.entry_time desc' => t('Entry Time'), 'host.display_name' => t('Host'), 'service.display_name' => t('Service'), 'comment.author' => t('Author'), 'comment.expire_time desc' => t('Expire Time') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar($comments, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($comments, $filter); $comments->peekAhead($compact); yield $this->export($comments); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $comments->execute(); $continueWith = $this->createContinueWith(Links::commentsDetails(), $searchBar, $results->hasResult()); $this->addContent( (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d comments'), $comments->count() )) ); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(10); } public function deleteAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/comment/delete'); $this->setTitle(t('Remove Comments')); $this->handleCommandForm(DeleteCommentForm::class); } public function detailsAction() { $this->addTitleTab(t('Comments')); $db = $this->getDb(); $comments = Comment::on($db)->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $comments->limit(3)->peekAhead(); $this->filter($comments); yield $this->export($comments); $rs = $comments->execute(); $this->addControl( (new ObjectList($rs)) ->setViewMode('minimal') ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $rs, Links::comments()->setFilter($this->getFilter()), sprintf(t('Show all %d comments'), $comments->count()) )); $this->addContent( (new DeleteCommentForm()) ->setObjects($comments) ->setAction( Links::commentsDelete() ->setFilter($this->getFilter()) ->getAbsoluteUrl() ) ); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Comment::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(Comment::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } protected function getCommandTargetsUrl(): Url { return Url::fromPath('__CLOSE__'); } protected function fetchCommandTargets(): Query { $comments = Comment::on($this->getDb())->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $this->filter($comments); return $comments; } public function isGrantedOn(string $permission, Model $object): bool { return parent::isGrantedOn($permission, $object->{$object->object_type}); } public function isGrantedOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool { return parent::isGrantedOnType($permission, 'host', $filter, $cache) || parent::isGrantedOnType($permission, 'service', $filter, $cache); } } icingadb-web-1.5.0/application/controllers/ConfigController.php000066400000000000000000000042311527064444300246740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Application\Config; use Icinga\Module\Icingadb\Forms\GeneralConfigForm; use Icinga\Module\Icingadb\Forms\RedisConfigForm; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Web\Form; use Icinga\Web\Notification; use Icinga\Web\Widget\Tab; use Icinga\Web\Widget\Tabs; use ipl\Html\HtmlString; use ipl\Web\FormElement\SearchSuggestions; class ConfigController extends Controller { public function init() { $this->assertPermission('config/modules'); parent::init(); } public function generalSettingsAction() { $this->mergeTabs($this->Module()->getConfigTabs()->activate('general-settings')); $form = (new GeneralConfigForm(Config::module('icingadb'))) ->on(GeneralConfigForm::ON_SUBMIT, function (GeneralConfigForm $form) { Notification::success($this->translate('New configuration settings have been saved.')); $this->redirectNow('icingadb/config/general-settings'); }) ->on(GeneralConfigForm::ON_SENT, function (GeneralConfigForm $form) { if (! $form->hasBeenSubmitted()) { foreach ($form->getPartUpdates() as $update) { $this->addPart(...$update); } } }) ->handleRequest($this->getServerRequest()); $this->addContent($form); } public function redisAction() { $form = (new RedisConfigForm()) ->setIniConfig($this->Config()); $form->handleRequest(); $this->mergeTabs($this->Module()->getConfigTabs()->activate('redis')); $this->addFormToContent($form); } protected function addFormToContent(Form $form) { $this->addContent(new HtmlString($form->render())); } protected function mergeTabs(Tabs $tabs): self { /** @var Tab $tab */ foreach ($tabs->getTabs() as $tab) { $this->tabs->add($tab->getName(), $tab); } return $this; } } icingadb-web-1.5.0/application/controllers/ContactController.php000066400000000000000000000024041527064444300250620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\UserDetail; use ipl\Stdlib\Filter; class ContactController extends Controller { /** @var User The user object */ protected $user; public function init() { $this->assertRouteAccess('contacts'); $this->addTitleTab(t('Contact')); $name = $this->params->getRequired('name'); $query = User::on($this->getDb())->with('timeperiod'); $query->filter(Filter::equal('user.name', $name)); $this->applyRestrictions($query); $user = $query->first(); if ($user === null) { throw new NotFoundError(t('Contact not found')); } $this->user = $user; $this->setTitle($user->display_name); } public function indexAction() { $this->addControl(new ObjectHeader($this->user)); $this->addContent(new UserDetail($this->user)); $this->setAutorefreshInterval(10); } } icingadb-web-1.5.0/application/controllers/ContactgroupController.php000066400000000000000000000025211527064444300261370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\UsergroupDetail; use ipl\Stdlib\Filter; class ContactgroupController extends Controller { /** @var Usergroup The usergroup object */ protected $usergroup; public function init() { $this->assertRouteAccess('contactgroups'); $this->addTitleTab(t('Contact Group')); $name = $this->params->getRequired('name'); $query = Usergroup::on($this->getDb()); $query->filter(Filter::equal('usergroup.name', $name)); $this->applyRestrictions($query); $usergroup = $query->first(); if ($usergroup === null) { throw new NotFoundError(t('Contact group not found')); } $this->usergroup = $usergroup; $this->setTitle($usergroup->display_name); } public function indexAction() { $this->addControl(new ObjectHeader($this->usergroup)); $this->addContent(new UsergroupDetail($this->usergroup)); $this->setAutorefreshInterval(10); } } icingadb-web-1.5.0/application/controllers/ContactgroupsController.php000066400000000000000000000056121527064444300263260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class ContactgroupsController extends Controller { public function init() { parent::init(); $this->assertRouteAccess(); } public function indexAction() { $this->addTitleTab(t('Contact Groups')); $db = $this->getDb(); $usergroups = Usergroup::on($db); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($usergroups); $sortControl = $this->createSortControl( $usergroups, [ 'usergroup.display_name' => t('Name') ] ); $searchBar = $this->createSearchBar($usergroups, [ $limitControl->getLimitParam(), $sortControl->getSortParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($usergroups, $filter); yield $this->export($usergroups); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($searchBar); $this->addContent( (new ObjectList($usergroups)) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Usergroup::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(Usergroup::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/ContactsController.php000066400000000000000000000056511527064444300252540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; class ContactsController extends Controller { public function init() { parent::init(); $this->assertRouteAccess(); } public function indexAction() { $this->addTitleTab(t('Contacts')); $db = $this->getDb(); $users = User::on($db); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($users); $sortControl = $this->createSortControl( $users, [ 'user.display_name' => t('Name'), 'user.email' => t('Email'), 'user.pager' => t('Pager Address / Number') ] ); $searchBar = $this->createSearchBar($users, [ $limitControl->getLimitParam(), $sortControl->getSortParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($users, $filter); yield $this->export($users); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($searchBar); $this->addContent( (new ObjectList($users)) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(User::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(User::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/DowntimeController.php000066400000000000000000000033171527064444300252610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\DowntimeDetail; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; class DowntimeController extends Controller { /** @var Downtime */ protected $downtime; public function init() { $this->addTitleTab(t('Downtime')); $name = $this->params->getRequired('name'); $query = Downtime::on($this->getDb())->with([ 'host', 'host.state', 'service', 'service.state', 'service.host', 'service.host.state', 'parent', 'parent.host', 'parent.host.state', 'parent.service', 'parent.service.state', 'triggered_by', 'triggered_by.host', 'triggered_by.host.state', 'triggered_by.service', 'triggered_by.service.state' ]); $query->filter(Filter::equal('downtime.name', $name)); $this->applyRestrictions($query); $downtime = $query->first(); if ($downtime === null) { throw new NotFoundError(t('Downtime not found')); } $this->downtime = $downtime; } public function indexAction() { $detail = new DowntimeDetail($this->downtime); $this->addControl(new ObjectHeader($this->downtime)); $this->addContent($detail); $this->setAutorefreshInterval(10); } } icingadb-web-1.5.0/application/controllers/DowntimesController.php000066400000000000000000000164761527064444300254560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Forms\Command\Object\DeleteDowntimeForm; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class DowntimesController extends Controller { use CommandActions; public function indexAction() { $this->addTitleTab(t('Downtimes')); $compact = $this->view->compact; $db = $this->getDb(); $downtimes = Downtime::on($db)->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($downtimes); $sortControl = $this->createSortControl( $downtimes, [ 'downtime.is_in_effect desc, downtime.start_time desc' => t('Is In Effect'), 'downtime.entry_time' => t('Entry Time'), 'host.display_name' => t('Host'), 'service.display_name' => t('Service'), 'downtime.author' => t('Author'), 'downtime.start_time desc' => t('Start Time'), 'downtime.end_time desc' => t('End Time'), 'downtime.scheduled_start_time desc' => t('Scheduled Start Time'), 'downtime.scheduled_end_time desc' => t('Scheduled End Time'), 'downtime.duration desc' => t('Duration') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar($downtimes, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($downtimes, $filter); $downtimes->peekAhead($compact); yield $this->export($downtimes); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $downtimes->execute(); $continueWith = $this->createContinueWith(Links::downtimesDetails(), $searchBar, $results->hasResult()); $this->addContent( (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d downtimes'), $downtimes->count() )) ); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(10); } public function deleteAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/downtime/delete'); $this->setTitle(t('Cancel Downtimes')); $this->handleCommandForm(DeleteDowntimeForm::class); } public function detailsAction() { $this->addTitleTab(t('Downtimes')); $db = $this->getDb(); $downtimes = Downtime::on($db)->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $downtimes->limit(3)->peekAhead(); $this->filter($downtimes); yield $this->export($downtimes); $rs = $downtimes->execute(); $this->addControl( (new ObjectList($rs)) ->setViewMode('minimal') ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $rs, Links::downtimes()->setFilter($this->getFilter()), sprintf(t('Show all %d downtimes'), $downtimes->count()) )); $this->addContent( (new DeleteDowntimeForm()) ->setObjects($downtimes) ->setAction( Links::downtimesDelete() ->setFilter($this->getFilter()) ->getAbsoluteUrl() ) ); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Downtime::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(Downtime::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } protected function getCommandTargetsUrl(): Url { return Url::fromPath('__CLOSE__'); } protected function fetchCommandTargets(): Query { $downtimes = Downtime::on($this->getDb())->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]); $this->filter($downtimes); return $downtimes; } public function isGrantedOn(string $permission, Model $object): bool { if ($object->scheduled_by !== null) { return false; } return parent::isGrantedOn($permission, $object->{$object->object_type}); } public function isGrantedOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool { return parent::isGrantedOnType($permission, 'host', $filter, $cache) || parent::isGrantedOnType($permission, 'service', $filter, $cache); } } icingadb-web-1.5.0/application/controllers/ErrorController.php000066400000000000000000000054541527064444300245700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Controllers\ErrorController as IcingaErrorController; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Web\Layout\Content; use ipl\Web\Layout\Controls; use ipl\Web\Url; use ipl\Web\Widget\Link; use ipl\Web\Widget\Tabs; class ErrorController extends IcingaErrorController { /** @var HtmlDocument */ protected $document; /** @var Controls */ protected $controls; /** @var Content */ protected $content; /** @var Tabs */ protected $tabs; protected function prepareInit() { $this->document = new HtmlDocument(); $this->document->setSeparator("\n"); $this->controls = new Controls(); $this->content = new Content(); $this->tabs = new Tabs(); $this->controls->setTabs($this->tabs); $this->view->document = $this->document; } public function postDispatch() { $this->tabs->add(uniqid(), [ 'active' => true, 'label' => $this->view->title, 'url' => $this->getRequest()->getUrl() ]); if (! $this->content->isEmpty()) { $this->document->prepend($this->content); } if (! $this->view->compact && ! $this->controls->isEmpty()) { $this->document->prepend($this->controls); } parent::postDispatch(); } protected function postDispatchXhr() { parent::postDispatchXhr(); $this->getResponse()->setHeader('X-Icinga-Module', $this->getModuleName(), true); } public function errorAction() { $error = $this->getParam('error_handler'); $exception = $error->exception; /** @var \Exception $exception */ $message = $exception->getMessage(); if (substr($message, 0, 27) !== 'Cannot load resource config') { $this->forward('error', 'error', 'default'); return; } else { $this->setParam('error_handler', null); } // TODO: Find a native way for ipl-html to support enriching text with html $heading = Html::tag('h2', t('Database not configured')); $intro = Html::tag('p', ['data-base-target' => '_next'], Html::sprintf( 'You seem to not have configured a resource for Icinga DB yet. Please %s and then tell Icinga DB Web %s.', new Link( Html::tag('strong', 'create one'), Url::fromPath('config/resource') ), new Link( Html::tag('strong', 'which one it is'), Url::fromPath('icingadb/config/general-settings') ) )); $this->content->add([$heading, $intro]); } } icingadb-web-1.5.0/application/controllers/EventController.php000066400000000000000000000034541527064444300245560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\EventDetail; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use ipl\Stdlib\Filter; class EventController extends Controller { /** @var History */ protected $event; public function init() { $this->addTitleTab(t('Event')); $id = $this->params->getRequired('id'); $query = History::on($this->getDb()) ->with([ 'host', 'host.state', 'service', 'service.state', 'comment', 'downtime', 'downtime.parent', 'downtime.parent.host', 'downtime.parent.host.state', 'downtime.parent.service', 'downtime.parent.service.state', 'downtime.triggered_by', 'downtime.triggered_by.host', 'downtime.triggered_by.host.state', 'downtime.triggered_by.service', 'downtime.triggered_by.service.state', 'flapping', 'notification', 'acknowledgement', 'state' ]) ->filter(Filter::equal('id', hex2bin($id))); $this->applyRestrictions($query); $event = $query->first(); if ($event === null) { $this->httpNotFound(t('Event not found')); } $this->event = $event; } public function indexAction() { $this->addControl(new ObjectHeader($this->event)); $this->addContent(new EventDetail($this->event)); } } icingadb-web-1.5.0/application/controllers/HealthController.php000066400000000000000000000111501527064444300246720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Command\Instance\ToggleInstanceFeatureCommand; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Forms\Command\Instance\ToggleInstanceFeaturesForm; use Icinga\Module\Icingadb\Model\HoststateSummary; use Icinga\Module\Icingadb\Model\Instance; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Health; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\Html; use ipl\Web\Url; class HealthController extends Controller { public function indexAction() { $this->addTitleTab(t('Health')); $db = $this->getDb(); $instance = Instance::on($db)->with(['endpoint']); $hoststateSummary = HoststateSummary::on($db); $servicestateSummary = ServicestateSummary::on($db); $this->applyRestrictions($hoststateSummary); $this->applyRestrictions($servicestateSummary); yield $this->export($instance, $hoststateSummary, $servicestateSummary); $instance = $instance->first(); if ($instance === null) { $this->addContent(Html::tag('p', t( 'It seems that Icinga DB is not running.' . ' Make sure Icinga DB is running and writing into the database.' ))); return; } $hoststateSummary = $hoststateSummary->first(); $servicestateSummary = $servicestateSummary->first(); $this->content->addAttributes(['class' => 'monitoring-health']); $this->addContent(new Health($instance)); $this->addContent(Html::tag('section', ['class' => 'check-summary'], [ Html::tag('div', ['class' => 'col'], [ Html::tag('h3', t('Host Checks')), Html::tag('div', ['class' => 'col-content'], [ new VerticalKeyValue( t('Active'), $hoststateSummary->hosts_active_checks_enabled ), new VerticalKeyValue( t('Passive'), $hoststateSummary->hosts_passive_checks_enabled ) ]) ]), Html::tag('div', ['class' => 'col'], [ Html::tag('h3', t('Service Checks')), Html::tag('div', ['class' => 'col-content'], [ new VerticalKeyValue( t('Active'), $servicestateSummary->services_active_checks_enabled ), new VerticalKeyValue( t('Passive'), $servicestateSummary->services_passive_checks_enabled ) ]) ]) ])); $featureCommands = Html::tag( 'section', ['class' => 'instance-commands'], Html::tag('h2', t('Feature Commands')) ); $toggleInstanceFeaturesCommandForm = new ToggleInstanceFeaturesForm([ ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS => $instance->icinga2_active_host_checks_enabled, ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS => $instance->icinga2_active_service_checks_enabled, ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS => $instance->icinga2_event_handlers_enabled, ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION => $instance->icinga2_flap_detection_enabled, ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS => $instance->icinga2_notifications_enabled, ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA => $instance->icinga2_performance_data_enabled ]); $toggleInstanceFeaturesCommandForm->setObjects([$instance]); $toggleInstanceFeaturesCommandForm->on(ToggleInstanceFeaturesForm::ON_SUCCESS, function () { $this->getResponse()->setAutoRefreshInterval(1); $this->redirectNow(Url::fromPath('icingadb/health')->getAbsoluteUrl()); }); $toggleInstanceFeaturesCommandForm->handleRequest(ServerRequest::fromGlobals()); $featureCommands->add($toggleInstanceFeaturesCommandForm); $this->addContent($featureCommands); $this->setAutorefreshInterval(30); } } icingadb-web-1.5.0/application/controllers/HistoryController.php000066400000000000000000000117611527064444300251360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Util\OptimizerHints; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TimestampToggle; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemList\HistoryObjectList; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class HistoryController extends Controller { public function indexAction() { $this->addTitleTab(t('History')); $compact = $this->view->compact; // TODO: Find a less-legacy way.. $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM ]; $db = $this->getDb(); $history = History::on($db)->with([ 'host', 'host.state', 'service', 'service.state', 'comment', 'downtime', 'flapping', 'notification', 'acknowledgement', 'state' ]); $before = $this->params->shift('before', time()); $previousTimestamp = $this->params->shift('last-entry'); $timestampControl = $this->createTimestampControl(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($history); $sortControl = $this->createSortControl( $history, [ 'history.event_time desc, history.event_type desc' => t('Event Time') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl, true); $searchBar = $this->createSearchBar($history, $preserveParams); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $history->peekAhead(); $page = $paginationControl->getCurrentPageNumber(); if ($page > 1 && ! $compact) { $previousTimestamp = null; $history->resetOffset(); $history->limit($page * $limitControl->getLimit()); } $history->filter(Filter::lessThanOrEqual('event_time', $before)); $this->filter($history, $filter); $history->getWith()['history.host']->setJoinType('LEFT'); $history->filter(Filter::any( // Because of LEFT JOINs, make sure we'll fetch history entries only for items which still exist: Filter::like('host.id', '*'), Filter::like('service.id', '*') )); OptimizerHints::disableOptimizerForHistoryQueries($history); yield $this->export($history); $this->addControl($timestampControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $url = Url::fromRequest() ->onlyWith($preserveParams) ->setFilter($filter); $historyList = (new HistoryObjectList( $history->execute(), $previousTimestamp, $timestampControl->isEnabled() )) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); if ($compact) { $historyList->setPageNumber($page); } if ($compact && $page > 1) { $this->document->addFrom($historyList); } else { $this->addContent($historyList); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(History::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(History::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/HostController.php000066400000000000000000000563641527064444300244220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use ArrayIterator; use Generator; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Command\Object\GetObjectCommand; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\HostLinks; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Hook\TabHook\HookActions; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Notifications\SubscribeIncidents; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Util\OptimizerHints; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TimestampToggle; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\HostDetail; use Icinga\Module\Icingadb\Widget\Detail\HostInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\HostMetaInfo; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\ItemList\HistoryObjectList; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\Tabs; class HostController extends Controller { use CommandActions; use HookActions; use SubscribeIncidents; /** @var Host The host object */ protected $host; public function init(): void { $name = $this->params->shiftRequired('name'); $query = Host::on($this->getDb())->with(['state', 'icon_image', 'timeperiod']); $query ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::equal('host.name', $name)); $this->applyRestrictions($query); /** @var Host $host */ $host = $query->first(); if ($host === null) { throw new NotFoundError($this->translate('Host not found')); } $this->host = $host; $this->loadTabsForObject($host); $this->addControl(new ObjectHeader($host)); $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle($host->display_name); } public function indexAction(): void { $serviceSummary = ServicestateSummary::on($this->getDb()); $serviceSummary->filter(Filter::equal('service.host_id', $this->host->id)); $this->applyRestrictions($serviceSummary); if ($this->host->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $this->addControl(new HostMetaInfo($this->host)); $this->addControl(new QuickActions($this->host)); $this->addContent(new HostDetail($this->host, $serviceSummary->first())); $this->setAutorefreshInterval(10); } public function sourceAction(): void { $this->assertPermission('icingadb/object/show-source'); $apiResult = (new CommandTransport())->send( (new GetObjectCommand()) ->setObjects(new ArrayIterator([$this->host])) ); if ($this->host->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $this->addContent(new HostInspectionDetail( $this->host, reset($apiResult) )); } public function historyAction(): Generator { $compact = $this->view->compact; // TODO: Find a less-legacy way.. if ($this->host->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $history = $this->host->history->with([ 'host', 'host.state', 'comment', 'downtime', 'flapping', 'notification', 'acknowledgement', 'state' ]); $before = $this->params->shift('before', time()); $previousTimestamp = $this->params->shift('last-entry'); $url = Url::fromRequest()->setParams( (clone $this->params)->add('name', $this->host->name) ); $timestampControl = $this->createTimestampControl(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($history); $sortControl = $this->createSortControl( $history, [ 'history.event_time desc, history.event_type desc' => $this->translate('Event Time') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl, true); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM, 'name' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($history, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/host/history-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/host/history-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $history->peekAhead(); $page = $paginationControl->getCurrentPageNumber(); if ($page > 1 && ! $compact) { $previousTimestamp = null; $history->resetOffset(); $history->limit($page * $limitControl->getLimit()); } $history->filter(Filter::lessThanOrEqual('event_time', $before)); $this->filter($history, $filter); OptimizerHints::disableOptimizerForHistoryQueries($history); yield $this->export($history); $this->addControl($timestampControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $historyList = (new HistoryObjectList( $history->execute(), $previousTimestamp, $timestampControl->isEnabled() )) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)->setFilter($filter)); if ($compact) { $historyList->setPageNumber($page); } if ($compact && $page > 1) { $this->document->addFrom($historyList); } else { $this->addContent($historyList); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } } public function servicesAction(): Generator { if ($this->host->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $db = $this->getDb(); $services = Service::on($db)->with([ 'state', 'state.last_comment', 'icon_image', 'host', 'host.state' ]); $services ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::equal('host.id', $this->host->id)); $this->applyRestrictions($services); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($services); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $sortControl = $this->createSortControl( $services, [ 'service.display_name' => $this->translate('Name'), 'service.state.severity desc,service.state.last_state_change desc' => $this->translate('Severity'), 'service.state.soft_state' => $this->translate('Current State'), 'service.state.last_state_change desc' => $this->translate('Last State Change') ], ['service.state.severity DESC', 'service.state.last_state_change DESC'] ); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($services, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/host/services-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/host/services-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $services->filter($filter); yield $this->export($services); $results = $services->execute(); $serviceList = (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $continueWith = $this->createContinueWith( Links::servicesDetails()->setFilter(Filter::equal('host.name', $this->host->name)), $searchBar, $results->hasResult() ); $this->addContent($serviceList); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(10); } public function parentsAction(): Generator { $nodesQuery = $this->fetchDependencyNodes(true); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar( $nodesQuery, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name' ] ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function childrenAction(): Generator { $nodesQuery = $this->fetchDependencyNodes(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($nodesQuery, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/host/children-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/host/children-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function completeAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("child.host.id", $this->host->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function childrenCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("parent.host.id", $this->host->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function historyCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(History::class) ->setBaseFilter(Filter::equal('host.id', $this->host->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->addHtml($suggestions); } public function servicesCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(Service::class) ->setBaseFilter(Filter::equal('host.id', $this->host->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->addHtml($suggestions); } public function searchEditorAction(): void { $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath('icingadb/host/parents', ['name' => $this->host->name]), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name' ] ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } public function childrenSearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name' ]; $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath('icingadb/host/children', ['name' => $this->host->name]), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/host/children-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } public function historySearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM, 'name' ]; $editor = $this->createSearchEditor( History::on($this->getDb()), Url::fromPath('icingadb/host/history', ['name' => $this->host->name]), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/host/history-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->addHtml($editor); $this->setTitle($this->translate('Adjust Filter')); } public function servicesSearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name' ]; $editor = $this->createSearchEditor( Service::on($this->getDb()), Url::fromPath('icingadb/host/services', ['name' => $this->host->name]), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/host/services-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->addHtml($editor); $this->setTitle($this->translate('Adjust Filter')); } /** * Fetch the dependency nodes of the current host * * @param bool $parents Whether to fetch the parents or the children * * @return Query */ protected function fetchDependencyNodes(bool $parents = false): Query { $query = DependencyNode::on($this->getDb()) ->with([ 'host', 'host.state', 'host.state.last_comment', 'service', 'service.state', 'service.state.last_comment', 'service.host', 'service.host.state', 'redundancy_group', 'redundancy_group.state' ]) ->filter(Filter::equal( sprintf('%s.host.id', $parents ? 'child' : 'parent'), $this->host->id )) ->setResultSetClass(VolatileStateResults::class); $this->applyRestrictions($query); return $query; } protected function createTabs(): Tabs { if (! Backend::supportsDependencies()) { $hasDependencyNode = false; } else { $hasDependencyNode = DependencyNode::on($this->getDb()) ->columns([new Expression('1')]) ->filter(Filter::all( Filter::equal('host_id', $this->host->id), Filter::unlike('service_id', '*') )) ->disableDefaultSort() ->first() !== null; } $tabs = $this->getTabs() ->add('index', [ 'label' => $this->translate('Host'), 'url' => Links::host($this->host) ]) ->add('services', [ 'label' => $this->translate('Services'), 'url' => HostLinks::services($this->host) ]) ->add('history', [ 'label' => $this->translate('History'), 'url' => HostLinks::history($this->host) ]); if ($hasDependencyNode) { $tabs->add('parents', [ 'label' => $this->translate('Parents'), 'url' => Url::fromPath('icingadb/host/parents', ['name' => $this->host->name]) ])->add('children', [ 'label' => $this->translate('Children'), 'url' => Url::fromPath('icingadb/host/children', ['name' => $this->host->name]) ]); } if ($this->hasPermission('icingadb/object/show-source')) { $tabs->add('source', [ 'label' => $this->translate('Source'), 'url' => Links::hostSource($this->host) ]); } foreach ($this->loadAdditionalTabs() as $name => $tab) { $tabs->add($name, $tab + ['urlParams' => ['name' => $this->host->name]]); } return $tabs; } protected function setTitleTab(string $name): void { $tab = $this->createTabs()->get($name); if ($tab !== null) { $this->getTabs()->activate($name); } } protected function fetchCommandTargets(): array { return [$this->host]; } protected function getCommandTargetsUrl(): Url { return Links::host($this->host); } protected function getDefaultTabControls(): array { return [new ObjectHeader($this->host)]; } } icingadb-web-1.5.0/application/controllers/HostgroupController.php000066400000000000000000000130061527064444300254610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Generator; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\HostgroupTableRow; use ipl\Html\Html; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; class HostgroupController extends Controller { /** @var string */ protected $hostgroupName; public function init() { $this->assertRouteAccess('hostgroups'); $this->hostgroupName = $this->params->shiftRequired('name'); } /** * Fetch the host group object * * @return Hostgroupsummary */ protected function fetchHostgroup(): Hostgroupsummary { $query = Hostgroupsummary::on($this->getDb()); foreach ($query->getUnions() as $unionPart) { $unionPart->filter(Filter::equal('hostgroup.name', $this->hostgroupName)); } $this->applyRestrictions($query); /** @var Hostgroupsummary $hostgroup */ $hostgroup = $query->first(); if ($hostgroup === null) { $this->httpNotFound(t('Host group not found')); } return $hostgroup; } public function indexAction(): Generator { $db = $this->getDb(); $hostgroup = $this->fetchHostgroup(); $hosts = Host::on($db)->with(['state', 'state.last_comment', 'icon_image']); $hosts ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::equal('hostgroup.id', $hostgroup->id)); $this->applyRestrictions($hosts); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($hosts); $sortControl = $this->createSortControl( $hosts, [ 'host.display_name' => t('Name'), 'host.state.severity desc,host.state.last_state_change desc' => t('Severity'), 'host.state.soft_state' => t('Current State'), 'host.state.last_state_change desc' => t('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar($hosts, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name' ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $hosts->filter($filter); yield $this->export($hosts); $results = $hosts->execute(); $hostList = (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { $this->addContent(new ObjectHeader($hostgroup)); $this->addContent(Html::tag('h2', null, t('Hosts'))); } else { $this->addControl(new ObjectHeader($hostgroup)); } $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $continueWith = $this->createContinueWith( Links::hostsDetails() ->setFilter(Filter::equal('hostgroup.name', $hostgroup->name)), $searchBar, $results->hasResult() ); $this->addContent($hostList); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->addTitleTab(t('Host Group')); $this->setTitle($hostgroup->display_name); $this->setAutorefreshInterval(10); } public function completeAction(): void { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Host::class); $suggestions->setBaseFilter(Filter::equal('hostgroup.name', $this->hostgroupName)); $suggestions->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function searchEditorAction(): void { $editor = $this->createSearchEditor(Host::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name' ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/HostgroupsController.php000066400000000000000000000117641527064444300256550ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Hostgroup; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\View\HostgroupGridRenderer; use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\Web\Control\GridViewModeSwitcher; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemTable\ObjectGrid; use Icinga\Module\Icingadb\Widget\ItemTable\ObjectTable; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class HostgroupsController extends Controller { public function init() { parent::init(); $this->assertRouteAccess(); } public function indexAction() { $this->addTitleTab(t('Host Groups')); $compact = $this->view->compact; $db = $this->getDb(); $hostgroups = Hostgroupsummary::on($db); $this->handleSearchRequest($hostgroups); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($hostgroups); $viewModeSwitcher = $this->createViewModeSwitcher( $paginationControl, $limitControl, viewModeSwitcherClass: GridViewModeSwitcher::class ); if ($viewModeSwitcher->getViewMode() === 'grid') { $hostgroups->without([ 'services_critical_handled', 'services_critical_unhandled', 'services_ok', 'services_pending', 'services_total', 'services_unknown_handled', 'services_unknown_unhandled', 'services_warning_handled', 'services_warning_unhandled', ]); } $sortControl = $this->createSortControl( $hostgroups, [ 'display_name' => t('Name'), 'hosts_severity desc, display_name' => t('Severity'), 'hosts_total desc' => t('Total Hosts'), ], ['hosts_severity DESC', 'display_name'] ); $searchBar = $this->createSearchBar($hostgroups, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($hostgroups, $filter); $hostgroups->peekAhead($compact); yield $this->export($hostgroups); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $hostgroups->execute(); if ($viewModeSwitcher->getViewMode() === 'grid') { $content = new ObjectGrid($results, (new HostgroupGridRenderer())->setBaseFilter($filter)); } else { $content = new ObjectTable($results, (new HostgroupRenderer())->setBaseFilter($filter)); } $content->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); $this->addContent($content); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d hostgroups'), $hostgroups->count() )) ); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(30); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Hostgroup::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(Hostgroupsummary::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/HostsController.php000066400000000000000000000224461527064444300245770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\HoststateSummary; use Icinga\Module\Icingadb\Notifications\SubscribeIncidents; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Util\FeatureStatus; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TabularViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\ObjectsDetail; use Icinga\Module\Icingadb\Widget\HostStatusBar; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\HostItemTable; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Orm\Query; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class HostsController extends Controller { use CommandActions; use SubscribeIncidents; public function indexAction() { $this->addTitleTab(t('Hosts')); $compact = $this->view->compact; $db = $this->getDb(); $hosts = Host::on($db)->with(['state', 'icon_image', 'state.last_comment']); $hosts->getWith()['host.state']->setJoinType('INNER'); $hosts->setResultSetClass(VolatileStateResults::class); $this->handleSearchRequest($hosts, ['address', 'address6']); $summary = null; if (! $compact) { $summary = HoststateSummary::on($db); } $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($hosts); $sortControl = $this->createSortControl( $hosts, [ 'host.display_name' => t('Name'), 'host.state.severity desc,host.state.last_state_change desc' => t('Severity'), 'host.state.soft_state' => t('Current State'), 'host.state.last_state_change desc' => t('Last State Change') ], ['host.state.severity DESC', 'host.state.last_state_change DESC'] ); $viewModeSwitcher = $this->createViewModeSwitcher( $paginationControl, $limitControl, viewModeSwitcherClass: TabularViewModeSwitcher::class ); $columns = $this->createColumnControl( $hosts, Url::fromPath('icingadb/hosts/suggestColumns'), ['host.name', 'host.state.output'], Url::fromPath('icingadb/hosts') ) ->getColumns(); $searchBar = $this->createSearchBar($hosts, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'columns' ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $hosts->peekAhead($compact); $this->filter($hosts, $filter); if (! $compact) { $this->filter($summary, $filter); yield $this->export($hosts, $summary); } else { yield $this->export($hosts); } $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $hosts->execute(); $continueWith = $this->createContinueWith(Links::hostsDetails(), $searchBar, $results->hasResult()); if ($viewModeSwitcher->getViewMode() === 'tabular') { $hostList = (new HostItemTable($results, HostItemTable::applyColumnMetaData($hosts, $columns))) ->setSort($sortControl->getSort()) ->setColumnChooserUrl(Url::fromPath('icingadb/hosts/columnControl')); } else { $hostList = (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()); } $hostList->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); $this->addContent($hostList); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d hosts'), $hosts->count() )) ); } else { /** @var HoststateSummary $hostsSummary */ $hostsSummary = $summary->first(); $this->addFooter((new HostStatusBar($hostsSummary))->setBaseFilter($filter)); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(10); } public function detailsAction() { $this->addTitleTab(t('Hosts')); $db = $this->getDb(); $hosts = Host::on($db)->with(['state', 'icon_image']); $hosts->setResultSetClass(VolatileStateResults::class); $summary = HoststateSummary::on($db)->with(['state']); $this->filter($hosts); $this->filter($summary); $hosts->limit(3); $hosts->peekAhead(); yield $this->export($hosts, $summary); $results = $hosts->execute(); $summary = $summary->first(); $downtimes = Host::on($db)->with(['downtime']); $downtimes->getWith()['host.downtime']->setJoinType('INNER'); $this->filter($downtimes); $summary->downtimes_total = $downtimes->count(); $comments = Host::on($db)->with(['comment']); $comments->getWith()['host.comment']->setJoinType('INNER'); $this->filter($comments); $summary->comments_total = $comments->count(); $this->addControl( (new ObjectList($results)) ->setViewMode('minimal') ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, Links::hosts()->setFilter($this->getFilter()), sprintf(t('Show all %d hosts'), $hosts->count()) )); $this->addControl( (new MultiselectQuickActions('host', $summary)) ->setBaseFilter($this->getFilter()) ); $this->addContent( (new ObjectsDetail('host', $summary, $hosts)) ->setBaseFilter($this->getFilter()) ); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Host::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function suggestColumnsAction() { $this->suggestColumns(Host::class, [ 'host' => t('Host %s', '..'), 'service' => t('Service %s', '..') ]); } public function searchEditorAction() { $editor = $this->createSearchEditor(Host::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'columns' ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } public function columnControlAction() { $this->setTitle($this->translate('Select Columns')); $columnChooser = $this->createColumnControl( Host::on($this->getDb()), Url::fromPath('icingadb/hosts/suggestColumns'), ['host.name', 'host.state.output'], Url::fromPath('icingadb/hosts') )->handleRequest($this->getServerRequest()); $this->addContent($columnChooser); } protected function fetchCommandTargets(): Query { $db = $this->getDb(); $hosts = Host::on($db)->with('state'); $hosts->setResultSetClass(VolatileStateResults::class); switch ($this->getRequest()->getActionName()) { case 'acknowledge': $hosts->filter(Filter::equal('state.is_problem', 'y')) ->filter(Filter::equal('state.is_acknowledged', 'n')); break; } $this->filter($hosts); return $hosts; } protected function getCommandTargetsUrl(): Url { return Links::hostsDetails()->setFilter($this->getFilter()); } protected function getFeatureStatus() { $summary = HoststateSummary::on($this->getDb()); $this->filter($summary); return new FeatureStatus('host', $summary->first()); } } icingadb-web-1.5.0/application/controllers/NotificationsController.php000066400000000000000000000117201527064444300263010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Util\OptimizerHints; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TimestampToggle; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\ItemList\HistoryObjectList; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class NotificationsController extends Controller { public function indexAction() { $this->addTitleTab(t('Notifications')); $compact = $this->view->compact; $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM ]; $db = $this->getDb(); $notifications = NotificationHistory::on($db)->with([ 'history', 'host', 'host.state', 'service', 'service.state' ]); $this->handleSearchRequest($notifications); $before = $this->params->shift('before', time()); $previousTimestamp = $this->params->shift('last-entry'); $timestampControl = $this->createTimestampControl(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($notifications); $sortControl = $this->createSortControl( $notifications, [ 'notification_history.send_time desc' => t('Send Time') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl, true); $searchBar = $this->createSearchBar($notifications, $preserveParams); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $notifications->peekAhead(); $page = $paginationControl->getCurrentPageNumber(); if ($page > 1 && ! $compact) { $previousTimestamp = null; $notifications->resetOffset(); $notifications->limit($page * $limitControl->getLimit()); } $notifications->filter(Filter::lessThanOrEqual('send_time', $before)); $this->filter($notifications, $filter); $notifications->filter(Filter::any( // Make sure we'll fetch service history entries only for services which still exist Filter::unlike('service_id', '*'), Filter::like('history.service.id', '*') )); OptimizerHints::disableOptimizerForHistoryQueries($notifications); yield $this->export($notifications); $this->addControl($timestampControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $url = Url::fromRequest() ->onlyWith($preserveParams) ->setFilter($filter); $notificationList = (new HistoryObjectList( $notifications->execute(), $previousTimestamp, $timestampControl->isEnabled() )) ->setPageSize($limitControl->getLimit()) ->setViewMode($viewModeSwitcher->getViewMode()) ->setLoadMoreUrl($url->setParam('before', $before)); if ($compact) { $notificationList->setPageNumber($page); } if ($compact && $page > 1) { $this->document->addFrom($notificationList); } else { $this->addContent($notificationList); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(NotificationHistory::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(NotificationHistory::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/RedundancygroupController.php000066400000000000000000000314101527064444300266370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Data\DependencyNodes; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\RedundancyGroupSummary; use Icinga\Module\Icingadb\Notifications\SubscribeIncidents; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\RedundancyGroupDetail; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Generator; use ipl\Orm\Query; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\Tabs; class RedundancygroupController extends Controller { use CommandActions; use SubscribeIncidents; /** @var string */ protected $groupId; /** @var RedundancyGroup */ protected $group; /** @var RedundancyGroupSummary */ protected $groupSummary; public function init(): void { // in case of quick actions, param id is not given $groupId = $this->params->shift('child.redundancy_group.id'); if ($groupId === null) { $groupId = $this->params->shiftRequired('id'); } $this->groupId = $groupId; } /** * Load the redundancy group */ protected function loadGroup(): void { $query = DependencyNode::on($this->getDb()) ->with(['redundancy_group', 'redundancy_group.state']) ->filter(Filter::equal('redundancy_group_id', $this->groupId)); $this->applyRestrictions($query); $this->group = $query->first()?->redundancy_group; if ($this->group === null) { $this->httpNotFound($this->translate('Redundancy Group not found')); } $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle($this->group->display_name); $this->groupSummary = $this->group->summary; $this->addControl(new ObjectHeader($this->group)); } public function indexAction(): void { $this->loadGroup(); // The base filter is required to fetch the correct objects for MultiselectQuickActions::isGrantedOnType() check $this->addControl( (new MultiselectQuickActions('dependency_node', $this->groupSummary)) ->setBaseFilter(Filter::equal('child.redundancy_group.id', $this->groupId)) ->setAllowToProcessCheckResults(false) ->setColumnPrefix('nodes') ->setUrlPath('icingadb/redundancygroup') ); $this->addContent(new RedundancyGroupDetail($this->group)); } public function membersAction(): Generator { $this->loadGroup(); $nodesQuery = $this->fetchDependencyNodes(true); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar( $nodesQuery, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'id' ] ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function childrenAction(): Generator { $this->loadGroup(); $nodesQuery = $this->fetchDependencyNodes(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'id' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($nodesQuery, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/redundancygroup/children-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/redundancygroup/children-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function completeAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("child.redundancy_group.id", $this->groupId)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function childrenCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("parent.redundancy_group.id", $this->groupId)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function searchEditorAction(): void { $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath('icingadb/redundancygroup/members', ['id' => $this->groupId]), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'id' ] ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } public function childrenSearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'id' ]; $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath('icingadb/redundancygroup/children', ['id' => $this->groupId]), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/redundancygroup/children-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } protected function createTabs(): Tabs { $tabs = $this->getTabs() ->add('index', [ 'label' => $this->translate('Redundancy Group'), 'url' => Url::fromPath('icingadb/redundancygroup', ['id' => $this->groupId]) ]) ->add('members', [ 'label' => $this->translate('Members'), 'url' => Url::fromPath('icingadb/redundancygroup/members', ['id' => $this->groupId]) ]) ->add('children', [ 'label' => $this->translate('Children'), 'url' => Url::fromPath('icingadb/redundancygroup/children', ['id' => $this->groupId]) ]); return $tabs; } protected function setTitleTab(string $name): void { $tab = $this->createTabs()->get($name); if ($tab !== null) { $this->getTabs()->activate($name); } } /** * Fetch the dependency nodes of the current group * * @param bool $parents Whether to fetch the parents or the children * * @return Query */ private function fetchDependencyNodes(bool $parents = false): Query { $filterColumn = sprintf( '%s.redundancy_group.id', $parents ? 'child' : 'parent' ); $query = DependencyNode::on($this->getDb()) ->with([ 'host', 'host.state', 'host.state.last_comment', 'service', 'service.state', 'service.state.last_comment', 'service.host', 'service.host.state' ]) ->filter(Filter::equal($filterColumn, $this->groupId)); $this->applyRestrictions($query); return $query; } protected function fetchCommandTargets() { $filter = Filter::all(Filter::equal('child.redundancy_group.id', $this->groupId)); if ($this->getRequest()->getActionName() === 'acknowledge') { $filter->add( Filter::any( Filter::all( Filter::unlike('child.service.id', '*'), Filter::equal('host.state.is_problem', 'y'), Filter::equal('host.state.is_acknowledged', 'n') ), Filter::all( Filter::equal('service.state.is_problem', 'y'), Filter::equal('service.state.is_acknowledged', 'n') ) ) ); } return new DependencyNodes($filter); } protected function getCommandTargetsUrl(): Url { return Url::fromPath('icingadb/redundancygroup', ['id' => $this->groupId]); } public function processCheckresultAction(): void { $this->httpBadRequest('Check result submission not implemented yet'); } } icingadb-web-1.5.0/application/controllers/ServiceController.php000066400000000000000000000477001527064444300250770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use ArrayIterator; use Generator; use Icinga\Exception\NotFoundError; use Icinga\Module\Icingadb\Command\Object\GetObjectCommand; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceLinks; use Icinga\Module\Icingadb\Hook\TabHook\HookActions; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Notifications\SubscribeIncidents; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Util\OptimizerHints; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TimestampToggle; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\Detail\QuickActions; use Icinga\Module\Icingadb\Widget\Detail\ServiceDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceInspectionDetail; use Icinga\Module\Icingadb\Widget\Detail\ServiceMetaInfo; use Icinga\Module\Icingadb\Widget\ItemList\HistoryObjectList; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\Tabs; class ServiceController extends Controller { use CommandActions; use HookActions; use SubscribeIncidents; /** @var Service The service object */ protected $service; public function init(): void { $name = $this->params->shiftRequired('name'); $hostName = $this->params->shiftRequired('host.name'); $query = Service::on($this->getDb()) ->with([ 'state', 'icon_image', 'host', 'host.state', 'timeperiod' ]); $query ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::all( Filter::equal('service.name', $name), Filter::equal('host.name', $hostName) )); if (Backend::supportsDependencies()) { $query->withColumns(['has_problematic_parent']); } $this->applyRestrictions($query); /** @var Service $service */ $service = $query->first(); if ($service === null) { throw new NotFoundError($this->translate('Service not found')); } $this->service = $service; $this->loadTabsForObject($service); $this->addControl(new ObjectHeader($service)); $this->setTitleTab($this->getRequest()->getActionName()); $this->setTitle( $this->translate('%s on %s', ' on '), $service->display_name, $service->host->display_name ); } public function indexAction(): void { if ($this->service->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $this->addControl(new ServiceMetaInfo($this->service)); $this->addControl(new QuickActions($this->service)); $this->addContent(new ServiceDetail($this->service)); $this->setAutorefreshInterval(10); } public function parentsAction(): Generator { $nodesQuery = $this->fetchDependencyNodes(true); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar( $nodesQuery, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name', 'host.name' ] ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function childrenAction(): Generator { $nodesQuery = $this->fetchDependencyNodes(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($nodesQuery); $sortControl = $this->createSortControl( $nodesQuery, [ 'name' => $this->translate('Name'), 'severity desc, last_state_change desc' => $this->translate('Severity'), 'state' => $this->translate('Current State'), 'last_state_change desc' => $this->translate('Last State Change') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name', 'host.name' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($nodesQuery, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/service/children-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/service/children-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $nodesQuery->filter($filter); yield $this->export($nodesQuery); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $this->addContent( (new ObjectList($nodesQuery)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()) ); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function sourceAction(): void { $this->assertPermission('icingadb/object/show-source'); $apiResult = (new CommandTransport())->send( (new GetObjectCommand()) ->setObjects(new ArrayIterator([$this->service])) ); if ($this->service->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $this->addContent(new ServiceInspectionDetail( $this->service, reset($apiResult) )); } public function historyAction(): Generator { $compact = $this->view->compact; // TODO: Find a less-legacy way.. if ($this->service->state->is_overdue) { $this->controls->addAttributes(['class' => 'overdue']); } $history = $this->service->history->with([ 'host', 'host.state', 'service', 'service.state', 'comment', 'downtime', 'flapping', 'notification', 'acknowledgement', 'state' ]); $before = $this->params->shift('before', time()); $previousTimestamp = $this->params->shift('last-entry'); $url = Url::fromRequest()->setParams( (clone $this->params) ->addValues(['name' => $this->service->name, 'host.name' => $this->service->host->name]) ); $timestampControl = $this->createTimestampControl(); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($history); $sortControl = $this->createSortControl( $history, [ 'history.event_time desc, history.event_type desc' => $this->translate('Event Time') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl, true); $preserveParams = [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM, 'name', 'host.name' ]; $requestParams = Url::fromRequest()->onlyWith($preserveParams)->getParams(); $searchBar = $this->createSearchBar($history, $preserveParams) ->setEditorUrl( Url::fromPath('icingadb/service/history-search-editor') ->setParams($requestParams) )->setSuggestionUrl( Url::fromPath('icingadb/service/history-complete') ->setParams(clone $requestParams) ); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $history->peekAhead(); $page = $paginationControl->getCurrentPageNumber(); if ($page > 1 && ! $compact) { $previousTimestamp = null; $history->resetOffset(); $history->limit($page * $limitControl->getLimit()); } $history->filter(Filter::lessThanOrEqual('event_time', $before)); $this->filter($history, $filter); OptimizerHints::disableOptimizerForHistoryQueries($history); yield $this->export($history); $this->addControl($timestampControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $historyList = (new HistoryObjectList( $history->execute(), $previousTimestamp, $timestampControl->isEnabled() )) ->setViewMode($viewModeSwitcher->getViewMode()) ->setPageSize($limitControl->getLimit()) ->setLoadMoreUrl($url->setParam('before', $before)->setFilter($filter)); if ($compact) { $historyList->setPageNumber($page); } if ($compact && $page > 1) { $this->document->addFrom($historyList); } else { $this->addContent($historyList); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } } public function completeAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("child.service.id", $this->service->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function childrenCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(DependencyNode::class) ->onlyWithCustomVarSources(['host', 'service', 'hostgroup', 'servicegroup']) ->setBaseFilter(Filter::equal("parent.service.id", $this->service->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function historyCompleteAction(): void { $suggestions = (new ObjectSuggestions()) ->setModel(History::class) ->setBaseFilter(Filter::equal('service.id', $this->service->id)) ->forRequest($this->getServerRequest()); $this->getDocument()->addHtml($suggestions); } public function searchEditorAction(): void { $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath( 'icingadb/service/parents', ['name' => $this->service->name, 'host.name' => $this->service->host->name] ), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name', 'host.name' ] ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } public function childrenSearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name', 'host.name' ]; $editor = $this->createSearchEditor( DependencyNode::on($this->getDb()), Url::fromPath( 'icingadb/service/children', ['name' => $this->service->name, 'host.name' => $this->service->host->name] ), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/service/children-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->add($editor); $this->setTitle($this->translate('Adjust Filter')); } public function historySearchEditorAction(): void { $preserveParams = [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM, 'name', 'host.name' ]; $editor = $this->createSearchEditor( History::on($this->getDb()), Url::fromPath('icingadb/service/history', ['name' => $this->service->name]), $preserveParams ); $editor->setSuggestionUrl( Url::fromPath('icingadb/service/history-complete') ->setParams(Url::fromRequest()->onlyWith($preserveParams)->getParams()) ); $this->getDocument()->addHtml($editor); $this->setTitle($this->translate('Adjust Filter')); } /** * Fetch the dependency nodes of the current service * * @param bool $parents Whether to fetch the parents or the children * * @return Query */ protected function fetchDependencyNodes(bool $parents = false): Query { $query = DependencyNode::on($this->getDb()) ->with([ 'host', 'host.state', 'host.state.last_comment', 'service', 'service.state', 'service.state.last_comment', 'service.host', 'service.host.state', 'redundancy_group', 'redundancy_group.state' ]) ->filter(Filter::equal( sprintf('%s.service.id', $parents ? 'child' : 'parent'), $this->service->id )) ->setResultSetClass(VolatileStateResults::class); $this->applyRestrictions($query); return $query; } protected function createTabs(): Tabs { if (! Backend::supportsDependencies()) { $hasDependencyNode = false; } else { $hasDependencyNode = DependencyNode::on($this->getDb()) ->columns([new Expression('1')]) ->filter(Filter::all( Filter::equal('service_id', $this->service->id), Filter::equal('host_id', $this->service->host_id) )) ->disableDefaultSort() ->first() !== null; } $tabs = $this->getTabs() ->add('index', [ 'label' => $this->translate('Service'), 'url' => Links::service($this->service, $this->service->host) ]) ->add('history', [ 'label' => $this->translate('History'), 'url' => ServiceLinks::history($this->service, $this->service->host) ]); if ($hasDependencyNode) { $tabs->add('parents', [ 'label' => $this->translate('Parents'), 'url' => Url::fromPath( 'icingadb/service/parents', ['name' => $this->service->name, 'host.name' => $this->service->host->name] ) ])->add('children', [ 'label' => $this->translate('Children'), 'url' => Url::fromPath( 'icingadb/service/children', ['name' => $this->service->name, 'host.name' => $this->service->host->name] ) ]); } if ($this->hasPermission('icingadb/object/show-source')) { $tabs->add('source', [ 'label' => $this->translate('Source'), 'url' => Links::serviceSource($this->service, $this->service->host) ]); } foreach ($this->loadAdditionalTabs() as $name => $tab) { $tabs->add($name, $tab + ['urlParams' => [ 'name' => $this->service->name, 'host.name' => $this->service->host->name ]]); } return $tabs; } protected function setTitleTab(string $name): void { $tab = $this->createTabs()->get($name); if ($tab !== null) { $this->getTabs()->activate($name); } } protected function fetchCommandTargets(): array { return [$this->service]; } protected function getCommandTargetsUrl(): Url { return Links::service($this->service, $this->service->host); } protected function getDefaultTabControls(): array { return [new ObjectHeader($this->service)]; } } icingadb-web-1.5.0/application/controllers/ServicegroupController.php000066400000000000000000000134521527064444300261510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use Generator; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\ObjectHeader; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use ipl\Html\Html; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; class ServicegroupController extends Controller { /** @var string */ protected $servicegroupName; public function init() { $this->assertRouteAccess('servicegroups'); $this->servicegroupName = $this->params->shiftRequired('name'); } /** * Fetch the service group object * * @return ServicegroupSummary */ protected function fetchServicegroup(): ServicegroupSummary { $query = ServicegroupSummary::on($this->getDb()); foreach ($query->getUnions() as $unionPart) { $unionPart->filter(Filter::equal('servicegroup.name', $this->servicegroupName)); } $this->applyRestrictions($query); /** @var ServicegroupSummary $servicegroup */ $servicegroup = $query->first(); if ($servicegroup === null) { $this->httpNotFound(t('Service group not found')); } return $servicegroup; } public function indexAction(): Generator { $db = $this->getDb(); $servicegroup = $this->fetchServicegroup(); $services = Service::on($db)->with([ 'state', 'state.last_comment', 'icon_image', 'host', 'host.state' ]); $services ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::equal('servicegroup.id', $servicegroup->id)); $this->applyRestrictions($services); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($services); $sortControl = $this->createSortControl( $services, [ 'service.display_name' => t('Name'), 'service.state.severity desc,service.state.last_state_change desc' => t('Severity'), 'service.state.soft_state' => t('Current State'), 'service.state.last_state_change desc' => t('Last State Change'), 'host.display_name' => t('Host') ] ); $viewModeSwitcher = $this->createViewModeSwitcher($paginationControl, $limitControl); $searchBar = $this->createSearchBar($services, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'name' ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $services->filter($filter); yield $this->export($services); $results = $services->execute(); $serviceList = (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()) ->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); // ICINGAWEB_EXPORT_FORMAT is not set yet and $this->format is inaccessible, yeah... if ($this->getRequest()->getParam('format') === 'pdf') { $this->addContent(new ObjectHeader($servicegroup)); $this->addContent(Html::tag('h2', null, t('Services'))); } else { $this->addControl(new ObjectHeader($servicegroup)); } $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $continueWith = $this->createContinueWith( Links::servicesDetails() ->setFilter(Filter::equal('servicegroup.name', $servicegroup->name)), $searchBar, $results->hasResult() ); $this->addContent($serviceList); if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->addTitleTab(t('Service Group')); $this->setTitle($servicegroup->display_name); $this->setAutorefreshInterval(10); } public function completeAction(): void { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Service::class); $suggestions->setBaseFilter(Filter::equal('servicegroup.name', $this->servicegroupName)); $suggestions->forRequest($this->getServerRequest()); $this->getDocument()->add($suggestions); } public function searchEditorAction(): void { $editor = $this->createSearchEditor(Service::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'name' ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/ServicegroupsController.php000066400000000000000000000112141527064444300263260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\Servicegroup; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use Icinga\Module\Icingadb\View\ServicegroupGridRenderer; use Icinga\Module\Icingadb\View\ServicegroupRenderer; use Icinga\Module\Icingadb\Web\Control\GridViewModeSwitcher; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemTable\ObjectGrid; use Icinga\Module\Icingadb\Widget\ItemTable\ObjectTable; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\ItemList; class ServicegroupsController extends Controller { public function init() { parent::init(); $this->assertRouteAccess(); } public function indexAction() { $this->addTitleTab(t('Service Groups')); $compact = $this->view->compact; $db = $this->getDb(); $servicegroups = ServicegroupSummary::on($db); $this->handleSearchRequest($servicegroups); $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($servicegroups); $viewModeSwitcher = $this->createViewModeSwitcher( $paginationControl, $limitControl, viewModeSwitcherClass: GridViewModeSwitcher::class ); $sortControl = $this->createSortControl( $servicegroups, [ 'display_name' => t('Name'), 'services_severity desc, display_name' => t('Severity'), 'services_total desc' => t('Total Services') ], ['services_severity DESC', 'display_name'] ); $searchBar = $this->createSearchBar($servicegroups, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam() ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($servicegroups, $filter); $servicegroups->peekAhead($compact); yield $this->export($servicegroups); $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $servicegroups->execute(); if ($viewModeSwitcher->getViewMode() === 'grid') { $content = new ObjectGrid($results, (new ServicegroupGridRenderer())->setBaseFilter($filter)); } else { $content = new ObjectTable($results, (new ServicegroupRenderer())->setBaseFilter($filter)); } $content->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); $this->addContent($content); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d servicegroups'), $servicegroups->count() )) ); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(30); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Servicegroup::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(ServicegroupSummary::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/controllers/ServicesController.php000066400000000000000000000407341527064444300252620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Common\CommandActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Data\PivotTable; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Notifications\SubscribeIncidents; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Util\FeatureStatus; use Icinga\Module\Icingadb\Web\Control\ProblemToggle; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Control\TabularViewModeSwitcher; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\Detail\MultiselectQuickActions; use Icinga\Module\Icingadb\Widget\Detail\ObjectsDetail; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemTable\ServiceItemTable; use Icinga\Module\Icingadb\Widget\ServiceStatusBar; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ShowMore; use Icinga\Util\Environment; use ipl\Html\HtmlString; use ipl\Orm\Query; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; use ipl\Web\Url; class ServicesController extends Controller { use CommandActions; use SubscribeIncidents; public function indexAction() { $this->addTitleTab(t('Services')); $compact = $this->view->compact; $db = $this->getDb(); $services = Service::on($db)->with([ 'state', 'state.last_comment', 'host', 'host.state', 'icon_image' ]); $services->getWith()['service.state']->setJoinType('INNER'); $services->setResultSetClass(VolatileStateResults::class); $this->handleSearchRequest($services); $summary = null; if (! $compact) { $summary = ServicestateSummary::on($db); } $limitControl = $this->createLimitControl(); $paginationControl = $this->createPaginationControl($services); $sortControl = $this->createSortControl( $services, [ 'service.display_name' => t('Name'), 'service.state.severity desc,service.state.last_state_change desc' => t('Severity'), 'service.state.soft_state' => t('Current State'), 'service.state.last_state_change desc' => t('Last State Change'), 'host.display_name' => t('Host') ], ['service.state.severity DESC', 'service.state.last_state_change DESC'] ); $viewModeSwitcher = $this->createViewModeSwitcher( $paginationControl, $limitControl, viewModeSwitcherClass: TabularViewModeSwitcher::class ); $columns = $this->createColumnControl( $services, Url::fromPath('icingadb/services/suggestColumns'), ['service.name', 'service.state.output'], Url::fromPath('icingadb/services') ) ->getColumns(); $searchBar = $this->createSearchBar($services, [ $limitControl->getLimitParam(), $sortControl->getSortParam(), $viewModeSwitcher->getViewModeParam(), 'columns' ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $services->peekAhead($compact); $this->filter($services, $filter); if (! $compact) { $this->filter($summary, $filter); yield $this->export($services, $summary); } else { yield $this->export($services); } $this->addControl($paginationControl); $this->addControl($sortControl); $this->addControl($limitControl); $this->addControl($viewModeSwitcher); $this->addControl($searchBar); $results = $services->execute(); $continueWith = $this->createContinueWith(Links::servicesDetails(), $searchBar, $results->hasResult()); if ($viewModeSwitcher->getViewMode() === 'tabular') { $serviceList = (new ServiceItemTable($results, ServiceItemTable::applyColumnMetaData($services, $columns))) ->setSort($sortControl->getSort()) ->setColumnChooserUrl(Url::fromPath('icingadb/services/columnControl')); } else { $serviceList = (new ObjectList($results)) ->setViewMode($viewModeSwitcher->getViewMode()); } $serviceList->setEmptyStateMessage($paginationControl->getEmptyStateMessage()); $this->addContent($serviceList); if ($compact) { $this->addContent( (new ShowMore($results, Url::fromRequest()->without(['showCompact', 'limit', 'view']))) ->setBaseTarget('_next') ->setAttribute('title', sprintf( t('Show all %d services'), $services->count() )) ); } else { /** @var ServicestateSummary $servicesSummary */ $servicesSummary = $summary->first(); $this->addFooter((new ServiceStatusBar($servicesSummary))->setBaseFilter($filter)); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(10); } public function detailsAction() { $this->addTitleTab(t('Services')); $db = $this->getDb(); $services = Service::on($db)->with([ 'state', 'icon_image', 'host', 'host.state' ]); $services->setResultSetClass(VolatileStateResults::class); $summary = ServicestateSummary::on($db)->with(['state']); $this->filter($services); $this->filter($summary); $services->limit(3); $services->peekAhead(); yield $this->export($services, $summary); $results = $services->execute(); $summary = $summary->first(); $downtimes = Service::on($db)->with(['downtime']); $downtimes->getWith()['service.downtime']->setJoinType('INNER'); $this->filter($downtimes); $summary->downtimes_total = $downtimes->count(); $comments = Service::on($db)->with(['comment']); $comments->getWith()['service.comment']->setJoinType('INNER'); $this->filter($comments); $summary->comments_total = $comments->count(); $this->addControl( (new ObjectList($results)) ->setViewMode('minimal') ->setDetailActionsDisabled() ); $this->addControl(new ShowMore( $results, Links::services()->setFilter($this->getFilter()), sprintf(t('Show all %d services'), $services->count()) )); $this->addControl( (new MultiselectQuickActions('service', $summary)) ->setBaseFilter($this->getFilter()) ); $this->addContent( (new ObjectsDetail('service', $summary, $services)) ->setBaseFilter($this->getFilter()) ); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(Service::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function suggestColumnsAction() { $this->suggestColumns(Service::class, [ 'host' => t('Host %s', '..'), 'service' => t('Service %s', '..') ]); } public function searchEditorAction() { $editor = $this->createSearchEditor(Service::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM, 'columns' ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } public function gridAction() { Environment::raiseExecutionTime(); $db = $this->getDb(); $this->addTitleTab(t('Service Grid')); $query = Service::on($db)->with([ 'state', 'host', 'host.state' ]); $query->setResultSetClass(VolatileStateResults::class); $this->handleSearchRequest($query); // Create problem toggle before shifting params. Otherwise, the toggle // will redirect to the grid without the shifted params. $problemToggle = $this->createProblemToggle(); $this->params->shift('page'); // Handled by PivotTable internally $this->params->shift('limit'); // Handled by PivotTable internally $flipped = $this->params->shift('flipped', false); $sortControl = $this->createSortControl($query, [ 'service.display_name' => t('Service Name'), 'host.display_name' => t('Host Name'), ])->setDefault('service.display_name'); $searchBar = $this->createSearchBar($query, [ LimitControl::DEFAULT_LIMIT_PARAM, $sortControl->getSortParam(), 'flipped', 'page', 'problems' ]); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($query, $filter); $this->addControl($problemToggle); $this->addControl($sortControl); $this->addControl($searchBar); $pivotFilter = $problemToggle->isChecked() ? Filter::equal('service.state.is_problem', 'y') : null; $columns = [ 'id', 'host.id', 'host_name' => 'host.name', 'host_display_name' => 'host.display_name', 'name' => 'service.name', 'display_name' => 'service.display_name', 'service.state.is_handled', 'service.state.output', 'service.state.soft_state' ]; if ($flipped) { $pivot = (new PivotTable($query, 'host_name', 'name', $columns)) ->setXAxisFilter($pivotFilter) ->setYAxisFilter($pivotFilter ? clone $pivotFilter : null) ->setXAxisHeader('host_display_name') ->setYAxisHeader('display_name'); } else { $pivot = (new PivotTable($query, 'name', 'host_name', $columns)) ->setXAxisFilter($pivotFilter) ->setYAxisFilter($pivotFilter ? clone $pivotFilter : null) ->setXAxisHeader('display_name') ->setYAxisHeader('host_display_name'); } $this->view->horizontalPaginator = $pivot->paginateXAxis(); $this->view->verticalPaginator = $pivot->paginateYAxis(); list($pivotData, $pivotHeader) = $pivot->toArray(); $this->view->pivotData = $pivotData; $this->view->pivotHeader = $pivotHeader; $continueWith = $this->createContinueWith(Links::servicesDetails(), $searchBar, ! empty($pivotData)); /** Preserve filter and params in view links (the `BaseFilter` implementation for view scripts -.-) */ $this->view->baseUrl = Url::fromRequest() ->onlyWith([ LimitControl::DEFAULT_LIMIT_PARAM, $sortControl->getSortParam(), 'flipped', 'page', 'problems' ]); $preservedParams = $this->view->baseUrl->getParams(); $this->view->baseUrl->setFilter($filter); $searchBar->setEditorUrl(Url::fromPath( "icingadb/services/grid-search-editor" )->setParams($preservedParams)); $this->view->controls = $this->controls; if ($flipped) { $this->getHelper('viewRenderer')->setScriptAction('grid-flipped'); } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { // TODO: Everything up to addContent() (inclusive) can be removed once the grid is a widget $this->view->controls = ''; // Relevant controls are transmitted separately $viewRenderer = $this->getHelper('viewRenderer'); $viewRenderer->postDispatch(); $viewRenderer->setNoRender(false); $content = trim($this->getResponse()); $this->getResponse()->clearBody($viewRenderer->getResponseSegment()); $this->addContent(HtmlString::create(substr($content, strpos($content, '>') + 1, -6))); $this->sendMultipartUpdate($continueWith); } $this->setAutorefreshInterval(30); } public function gridSearchEditorAction() { $editor = $this->createSearchEditor( Service::on($this->getDb()), Url::fromPath('icingadb/services/grid'), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, 'flipped', 'page', 'problems' ] ); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } public function columnControlAction() { $this->setTitle($this->translate('Select Columns')); $columnChooser = $this->createColumnControl( Service::on($this->getDb()), Url::fromPath('icingadb/services/suggestColumns'), ['service.name', 'service.state.output'], Url::fromPath('icingadb/services') )->handleRequest($this->getServerRequest()); $this->addContent($columnChooser); } protected function fetchCommandTargets(): Query { $db = $this->getDb(); $services = Service::on($db)->with([ 'state', 'host', 'host.state' ]); $services->setResultSetClass(VolatileStateResults::class); switch ($this->getRequest()->getActionName()) { case 'acknowledge': $services->filter(Filter::equal('state.is_problem', 'y')) ->filter(Filter::equal('state.is_acknowledged', 'n')); break; } $this->filter($services); return $services; } protected function getCommandTargetsUrl(): Url { return Links::servicesDetails()->setFilter($this->getFilter()); } protected function getFeatureStatus() { $summary = ServicestateSummary::on($this->getDb()); $this->filter($summary); return new FeatureStatus('service', $summary->first()); } protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter, array $additionalColumns) { if ($this->params->shift('_hostFilterOnly', false)) { foreach (['host.name_ci', 'host.display_name', 'host.address', 'host.address6'] as $column) { $filter->add(Filter::like($column, "*$search*")); } } else { parent::prepareSearchFilter($query, $search, $filter, $additionalColumns); } } public function createProblemToggle(): ProblemToggle { $filter = $this->params->shift('problems'); $problemToggle = new ProblemToggle($filter); $problemToggle->setIdProtector([$this->getRequest(), 'protectId']); $problemToggle->on(ProblemToggle::ON_SUCCESS, function (ProblemToggle $form) { if (! $form->getElement('problems')->isChecked()) { $this->redirectNow(Url::fromRequest()->remove('problems')); } else { $this->redirectNow(Url::fromRequest()->setParams($this->params->add('problems'))); } })->handleRequest(ServerRequest::fromGlobals()); return $problemToggle; } } icingadb-web-1.5.0/application/controllers/TacticalController.php000066400000000000000000000057631527064444300252260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Controllers; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Model\TacticalStateSummary; use Icinga\Module\Icingadb\Web\Control\SearchBar\ObjectSuggestions; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\HostSummaryDonut; use Icinga\Module\Icingadb\Widget\ServiceSummaryDonut; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; class TacticalController extends Controller { public function indexAction() { $this->addTitleTab(t('Tactical Overview')); $db = $this->getDb(); $tacticalSummary = TacticalStateSummary::on($db); $this->handleSearchRequest($tacticalSummary, [ 'host.name_ci', 'host.display_name', 'host.address', 'host.address6' ]); $searchBar = $this->createSearchBar($tacticalSummary); if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) { if ($searchBar->hasBeenSubmitted()) { $filter = $this->getFilter(); } else { $this->addControl($searchBar); $this->sendMultipartUpdate(); return; } } else { $filter = $searchBar->getFilter(); } $this->filter($tacticalSummary, $filter); yield $this->export($tacticalSummary); $this->addControl($searchBar); foreach ($tacticalSummary as $row) { // The query is a union and always yields host state results first if ($row->type === "host_state") { $this->addContent( (new HostSummaryDonut($row)) ->setBaseFilter($filter) ); } elseif ($row->type === "service_state") { $this->addContent( (new ServiceSummaryDonut($row)) ->setBaseFilter($filter) ); } } if (! $searchBar->hasBeenSubmitted() && $searchBar->hasBeenSent()) { $this->sendMultipartUpdate(); } $this->setAutorefreshInterval(10); } public function completeAction() { $suggestions = new ObjectSuggestions(); $suggestions->setModel(ServicestateSummary::class); $suggestions->forRequest(ServerRequest::fromGlobals()); $this->getDocument()->add($suggestions); } public function searchEditorAction() { $editor = $this->createSearchEditor(ServicestateSummary::on($this->getDb()), [ LimitControl::DEFAULT_LIMIT_PARAM, SortControl::DEFAULT_SORT_PARAM, ViewModeSwitcher::DEFAULT_VIEW_MODE_PARAM ]); $this->getDocument()->add($editor); $this->setTitle(t('Adjust Filter')); } } icingadb-web-1.5.0/application/forms/000077500000000000000000000000001527064444300174725ustar00rootroot00000000000000icingadb-web-1.5.0/application/forms/ApiTransportForm.php000066400000000000000000000061771527064444300234700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms; use Icinga\Data\ConfigObject; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; use Icinga\Web\Session; use ipl\Web\Common\CsrfCounterMeasure; use ipl\Web\Compat\CompatForm; class ApiTransportForm extends CompatForm { use CsrfCounterMeasure; protected function assemble() { // TODO: Use a validator to check if a name is not already in use $this->addElement('text', 'name', [ 'required' => true, 'label' => t('Transport Name') ]); $this->addElement('hidden', 'transport', [ 'value' => 'api' ]); $this->addElement('text', 'host', [ 'required' => true, 'id' => 'api_transport_host', 'label' => t('Host'), 'description' => t('Hostname or address of the Icinga master') ]); // TODO: Don't rely only on browser validation $this->addElement('number', 'port', [ 'required' => true, 'label' => t('Port'), 'value' => 5665, 'min' => 1, 'max' => 65536 ]); $this->addElement('text', 'username', [ 'required' => true, 'label' => t('API Username'), 'description' => t('User to authenticate with using HTTP Basic Auth') ]); $this->addElement('password', 'password', [ 'required' => true, 'autocomplete' => 'new-password', 'label' => t('API Password') ]); $this->addElement('submit', 'btn_submit', [ 'label' => t('Save') ]); $this->addElement($this->createCsrfCounterMeasure(Session::getSession()->getId())); } public function validate() { parent::validate(); if (! $this->isValid) { return $this; } if ($this->getPopulatedValue('force_creation') === 'y') { return $this; } try { CommandTransport::createTransport(new ConfigObject($this->getValues()))->probe(); } catch (CommandTransportException $e) { $this->addMessage( sprintf(t('Failed to successfully validate the configuration: %s'), $e->getMessage()) ); $forceCheckbox = $this->createElement( 'checkbox', 'force_creation', [ 'ignore' => true, 'label' => t('Force Changes'), 'description' => t('Check this box to enforce changes without connectivity validation') ] ); $this->registerElement($forceCheckbox); $this->decorate($forceCheckbox); $this->prepend($forceCheckbox); $this->isValid = false; } return $this; } } icingadb-web-1.5.0/application/forms/Command/000077500000000000000000000000001527064444300210505ustar00rootroot00000000000000icingadb-web-1.5.0/application/forms/Command/CommandForm.php000066400000000000000000000077261527064444300237770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command; use ArrayIterator; use Countable; use Exception; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Command\IcingaCommand; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Web\Notification; use Icinga\Web\Session; use ipl\Html\Form; use ipl\Orm\Model; use ipl\Web\Common\CsrfCounterMeasure; use Iterator; use IteratorIterator; use Traversable; abstract class CommandForm extends Form { use Auth; use CsrfCounterMeasure; protected $defaultAttributes = ['class' => 'icinga-form icinga-controls']; /** @var (Traversable&Countable)|array */ protected $objects; /** @var bool */ protected $isApiTarget = false; /** * Whether an error occurred while sending the command * * Prevents the success message from being rendered simultaneously * * @var bool */ protected $errorOccurred = false; /** * Set the objects to issue the command for * * @param (Traversable&Countable)|array $objects A traversable that is also countable * * @return $this */ public function setObjects($objects): self { $this->objects = $objects; return $this; } /** * Get the objects to issue the command for * * @return (Traversable&Countable)|array */ public function getObjects() { return $this->objects; } /** * Set whether this form is an API target * * @param bool $state * * @return $this */ public function setIsApiTarget(bool $state = true): self { $this->isApiTarget = $state; return $this; } /** * Get whether this form is an API target * * @return bool */ public function isApiTarget(): bool { return $this->isApiTarget; } /** * Create and add form elements representing the command's options * * @return void */ abstract protected function assembleElements(); /** * Create and add a submit button to the form * * @return void */ abstract protected function assembleSubmitButton(); /** * Get the commands to issue for the given objects * * @param Iterator $objects * * @return Traversable */ abstract protected function getCommands(Iterator $objects): Traversable; protected function assemble() { $this->assembleElements(); if (! $this->isApiTarget()) { $this->assembleSubmitButton(); $this->addElement($this->createCsrfCounterMeasure(Session::getSession()->getId())); } } protected function onSuccess() { $objects = $this->getObjects(); if (is_array($objects)) { $objects = new ArrayIterator($objects); } else { $objects = new IteratorIterator($objects); } $errors = []; foreach ($this->getCommands($objects) as $command) { try { $this->sendCommand($command); } catch (Exception $e) { Logger::error($e->getMessage()); $errors[] = $e->getMessage(); } } if (! empty($errors)) { if (count($errors) > 1) { Notification::warning( t('Some commands were not transmitted. Please check the log. The first error follows.') ); } $this->errorOccurred = true; Notification::error($errors[0]); } } /** * Transmit the given command * * @param IcingaCommand $command * * @return void */ protected function sendCommand(IcingaCommand $command) { (new CommandTransport())->send($command); } } icingadb-web-1.5.0/application/forms/Command/Instance/000077500000000000000000000000001527064444300226145ustar00rootroot00000000000000icingadb-web-1.5.0/application/forms/Command/Instance/ToggleInstanceFeaturesForm.php000066400000000000000000000130301527064444300305530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Instance; use Icinga\Module\Icingadb\Command\Instance\ToggleInstanceFeatureCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Web\FormDecorator\IcingaFormDecorator; use Iterator; use Traversable; class ToggleInstanceFeaturesForm extends CommandForm { protected $features; protected $featureStatus; /** * ToggleFeature(s) being used to submit this form * * @var ToggleInstanceFeatureCommand[] */ protected $submittedFeatures = []; public function __construct(array $featureStatus) { $this->featureStatus = $featureStatus; $this->features = [ ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS => t('Active Host Checks'), ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS => t('Active Service Checks'), ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS => t('Event Handlers'), ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION => t('Flap Detection'), ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS => t('Notifications'), ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA => t('Performance Data') ]; $this->getAttributes()->add('class', 'instance-features'); $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } foreach ($this->submittedFeatures as $feature) { $enabled = $feature->getEnabled(); switch ($feature->getFeature()) { case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS: if ($enabled) { $message = t('Enabled active host checks successfully'); } else { $message = t('Disabled active host checks successfully'); } break; case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS: if ($enabled) { $message = t('Enabled active service checks successfully'); } else { $message = t('Disabled active service checks successfully'); } break; case ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS: if ($enabled) { $message = t('Enabled event handlers successfully'); } else { $message = t('Disabled event handlers checks successfully'); } break; case ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION: if ($enabled) { $message = t('Enabled flap detection successfully'); } else { $message = t('Disabled flap detection successfully'); } break; case ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS: if ($enabled) { $message = t('Enabled notifications successfully'); } else { $message = t('Disabled notifications successfully'); } break; case ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA: if ($enabled) { $message = t('Enabled performance data successfully'); } else { $message = t('Disabled performance data successfully'); } break; default: $message = t('Invalid feature option'); break; } Notification::success($message); } }); } protected function assembleElements() { $disabled = ! $this->getAuth()->hasPermission('icingadb/command/feature/instance'); $decorator = new IcingaFormDecorator(); foreach ($this->features as $feature => $label) { $this->addElement( 'checkbox', $feature, [ 'class' => 'autosubmit', 'label' => $label, 'disabled' => $disabled, 'value' => (bool) $this->featureStatus[$feature] ] ); $decorator->decorate($this->getElement($feature)); } } protected function assembleSubmitButton() { } protected function getCommands(Iterator $objects): Traversable { foreach ($this->features as $feature => $spec) { $featureState = $this->getElement($feature)->isChecked(); if ((int) $featureState === (int) $this->featureStatus[$feature]) { continue; } $command = new ToggleInstanceFeatureCommand(); $command->setFeature($feature); $command->setEnabled($featureState); $this->submittedFeatures[] = $command; yield $command; } } } icingadb-web-1.5.0/application/forms/Command/Object/000077500000000000000000000000001527064444300222565ustar00rootroot00000000000000icingadb-web-1.5.0/application/forms/Command/Object/AcknowledgeProblemForm.php000066400000000000000000000236521527064444300273670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use DateInterval; use DateTime; use Icinga\Application\Config; use Icinga\Module\Icingadb\Command\Object\AcknowledgeProblemCommand; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Notifications\ManagesIncidents; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Validator\CallbackValidator; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class AcknowledgeProblemForm extends CommandForm { use ManagesIncidents; /** * The acknowledgement's set time, `null` if Icinga 2 does not support setting it * * Generated once in {@see static::getCommands()} and used for both the `set_time` sent to Icinga 2 and the * UUIDs written to the Icinga Notifications job queue. * * @var ?DateTime */ protected ?DateTime $setTime = null; public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $this->manageIncidents(true, $this->setTime); $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf(tp( 'Acknowledged problem successfully', 'Acknowledged problem on %d hosts successfully', $countObjects ), $countObjects); } else { $message = sprintf(tp( 'Acknowledged problem successfully', 'Acknowledged problem on %d services successfully', $countObjects ), $countObjects); } Notification::success($message); }); } protected function assembleElements() { $canManage = $this->getAuth()->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp(); if ($canManage) { $description = t( 'This command is used to acknowledge host or service problems and to tag them as being handled. ' . 'While a problem is acknowledged, only you and anyone who subscribes to it will receive' . ' its notifications. The acknowledgement remains until the host or service recovers.' ); } else { $description = t( 'This command is used to acknowledge host or service problems. When a problem is acknowledged,' . ' future notifications about problems are temporarily disabled until the host or service' . ' recovers.' ); } $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement('li', null, Text::create($description)) ) )); $config = Config::module('icingadb'); $decorator = new IcingaFormDecorator(); $this->addElement( 'textarea', 'comment', [ 'required' => true, 'label' => t('Comment'), 'description' => t( 'If you work with other administrators, you may find it useful to share information about' . ' the host or service that is having problems. Make sure you enter a brief description of' . ' what you are doing.' ), 'value' => $config->get('settings', 'acknowledge_comment_text') ] ); $decorator->decorate($this->getElement('comment')); $this->addElement( 'checkbox', 'persistent', [ 'label' => t('Persistent Comment'), 'value' => (bool) $config->get('settings', 'acknowledge_persistent', false), 'description' => t( 'If you want the comment to remain even when the acknowledgement is removed, check this' . ' option.' ) ] ); $decorator->decorate($this->getElement('persistent')); if (! $canManage) { $this->addElement( 'checkbox', 'notify', [ 'label' => t('Send Notification'), 'value' => (bool) $config->get('settings', 'acknowledge_notify', true), 'description' => t( 'If you want an acknowledgement notification to be sent out to the appropriate contacts,' . ' check this option.' ) ] ); $decorator->decorate($this->getElement('notify')); $this->addElement( 'checkbox', 'sticky', [ 'label' => t('Sticky Acknowledgement'), 'value' => (bool) $config->get('settings', 'acknowledge_sticky', false), 'description' => t( 'If you want the acknowledgement to remain until the host or service recovers even if the host' . ' or service changes state, check this option.' ) ] ); $decorator->decorate($this->getElement('sticky')); $this->addElement( 'checkbox', 'expire', [ 'ignore' => true, 'class' => 'autosubmit', 'value' => (bool) $config->get('settings', 'acknowledge_expire', false), 'label' => t('Use Expire Time'), 'description' => t('If the acknowledgement should expire, check this option.') ] ); $decorator->decorate($this->getElement('expire')); if ($this->getElement('expire')->isChecked()) { $expireTime = new DateTime(); $expireTime->add(new DateInterval($config->get('settings', 'acknowledge_expire_time', 'PT1H'))); $this->addElement( 'localDateTime', 'expire_time', [ 'required' => true, 'value' => $expireTime, 'label' => t('Expire Time'), 'description' => t( 'Choose the date and time when Icinga should delete the acknowledgement.' ), 'validators' => [ 'DateTime' => ['break_chain_on_failure' => true], 'Callback' => function ($value, $validator) { /** @var CallbackValidator $validator */ if ($value <= (new DateTime())) { $validator->addMessage(t('The expire time must not be in the past')); return false; } return true; } ] ] ); $decorator->decorate($this->getElement('expire_time')); } } } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp( 'Acknowledge problem', 'Acknowledge problems', count($this->getObjects()) ), 'data-progress-label' => tp( 'Acknowledging problem', 'Acknowledging problems', count($this->getObjects()) ) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/acknowledge-problem', $object); }); $command = new AcknowledgeProblemCommand(); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $command->setNotify($this->hasElement('notify') && $this->getElement('notify')->isChecked()); $command->setSticky(! $this->hasElement('sticky') || $this->getElement('sticky')->isChecked()); $command->setPersistent($this->getElement('persistent')->isChecked()); if (($expireTime = $this->getValue('expire_time')) !== null) { /** @var DateTime $expireTime */ $command->setExpireTime($expireTime->getTimestamp()); } if (Backend::icinga2SupportsNotifications()) { $this->setTime = new DateTime(); $command->setAcknowledgementTime($this->setTime); } $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(250); } } } icingadb-web-1.5.0/application/forms/Command/Object/AddCommentForm.php000066400000000000000000000136231527064444300256330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use DateInterval; use DateTime; use Icinga\Application\Config; use Icinga\Module\Icingadb\Command\Object\AddCommentCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Validator\CallbackValidator; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class AddCommentForm extends CommandForm { public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf( tp('Added comment successfully', 'Added comment to %d hosts successfully', $countObjects), $countObjects ); } else { $message = sprintf( tp('Added comment successfully', 'Added comment to %d services successfully', $countObjects), $countObjects ); } Notification::success($message); }); } protected function assembleElements() { $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement( 'li', null, Text::create(t('This command is used to add host or service comments.')) ) ) )); $decorator = new IcingaFormDecorator(); $this->addElement( 'textarea', 'comment', [ 'required' => true, 'label' => t('Comment'), 'description' => t( 'If you work with other administrators, you may find it useful to share information about' . ' the host or service that is having problems. Make sure you enter a brief description of' . ' what you are doing.' ) ] ); $decorator->decorate($this->getElement('comment')); $config = Config::module('icingadb'); $this->addElement( 'checkbox', 'expire', [ 'ignore' => true, 'class' => 'autosubmit', 'value' => (bool) $config->get('settings', 'comment_expire', false), 'label' => t('Use Expire Time'), 'description' => t('If the comment should expire, check this option.') ] ); $decorator->decorate($this->getElement('expire')); if ($this->getElement('expire')->isChecked()) { $expireTime = new DateTime(); $expireTime->add(new DateInterval($config->get('settings', 'comment_expire_time', 'PT1H'))); $this->addElement( 'localDateTime', 'expire_time', [ 'required' => true, 'value' => $expireTime, 'label' => t('Expire Time'), 'description' => t('Choose the date and time when Icinga should delete the comment.'), 'validators' => [ 'DateTime' => ['break_chain_on_failure' => true], 'Callback' => function ($value, $validator) { /** @var CallbackValidator $validator */ if ($value <= (new DateTime())) { $validator->addMessage(t('The expire time must not be in the past')); return false; } return true; } ] ] ); $decorator->decorate($this->getElement('expire_time')); } } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp('Add comment', 'Add comments', count($this->getObjects())), 'data-progress-label' => tp('Adding comment', 'Adding comments', count($this->getObjects())) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/comment/add', $object); }); $command = new AddCommentCommand(); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); if (($expireTime = $this->getValue('expire_time'))) { /** @var DateTime $expireTime */ $command->setExpireTime($expireTime->getTimestamp()); } $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(500); } } } icingadb-web-1.5.0/application/forms/Command/Object/CheckNowForm.php000066400000000000000000000041141527064444300253140ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\ScheduleCheckCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Orm\Model; use ipl\Web\Widget\Icon; use Iterator; use Traversable; class CheckNowForm extends CommandForm { protected $defaultAttributes = ['class' => 'inline']; public function __construct() { $this->on(self::ON_SUCCESS, function () { if (! $this->errorOccurred) { Notification::success(tp('Scheduling check..', 'Scheduling checks..', count($this->getObjects()))); } }); } protected function assembleElements() { } protected function assembleSubmitButton() { $this->addElement( 'submitButton', 'btn_submit', [ 'class' => ['link-button', 'spinner'], 'label' => [ new Icon('sync-alt'), t('Check Now') ], 'title' => t('Schedule the next active check to run immediately') ] ); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/schedule-check', $object) || ( $object->active_checks_enabled && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) ); }); $command = new ScheduleCheckCommand(); $command->setCheckTime(time()); $command->setForced(); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(1000); } } } icingadb-web-1.5.0/application/forms/Command/Object/DeleteCommentForm.php000066400000000000000000000040531527064444300263420ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\DeleteCommentCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Orm\Model; use ipl\Web\Widget\Icon; use Iterator; use Traversable; class DeleteCommentForm extends CommandForm { protected $defaultAttributes = ['class' => 'inline']; public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); Notification::success(sprintf( tp('Removed comment successfully', 'Removed %d comments successfully', $countObjects), $countObjects )); }); } protected function assembleElements() { } protected function assembleSubmitButton() { $this->addElement( 'submitButton', 'btn_submit', [ 'class' => ['cancel-button', 'spinner'], 'label' => [ new Icon('trash'), tp('Remove Comment', 'Remove Comments', count($this->getObjects())) ] ] ); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/comment/delete', $object->{$object->object_type}); }); $command = new DeleteCommentCommand(); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(500); } } } icingadb-web-1.5.0/application/forms/Command/Object/DeleteDowntimeForm.php000066400000000000000000000051321527064444300265250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\DeleteDowntimeCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Orm\Model; use ipl\Web\Widget\Icon; use Iterator; use Traversable; class DeleteDowntimeForm extends CommandForm { protected $defaultAttributes = ['class' => 'inline']; public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); Notification::success(sprintf( tp('Removed downtime successfully', 'Removed %d downtimes successfully', $countObjects), $countObjects )); }); } protected function assembleElements() { } protected function assembleSubmitButton() { $totalDowntimes = count($this->getObjects()); $isDisabled = true; foreach ($this->getObjects() as $downtime) { if ($downtime->scheduled_by === null) { $isDisabled = false; break; } } $this->addElement( 'submitButton', 'btn_submit', [ 'class' => ['cancel-button', 'spinner'], 'disabled' => $isDisabled ?: null, 'title' => $isDisabled ? t('Downtime cannot be removed at runtime because it is based on a configured scheduled downtime.') : null, 'label' => [ new Icon('trash'), tp('Delete downtime', 'Delete downtimes', $totalDowntimes) ] ] ); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $object->scheduled_by === null && $this->isGrantedOn('icingadb/command/downtime/delete', $object->{$object->object_type}); }); $command = new DeleteDowntimeCommand(); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(250); } } } icingadb-web-1.5.0/application/forms/Command/Object/ProcessCheckResultForm.php000066400000000000000000000130231527064444300273650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\ProcessCheckResultCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class ProcessCheckResultForm extends CommandForm { public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf(tp( 'Submitted passive check result successfully', 'Submitted passive check result for %d hosts successfully', $countObjects ), $countObjects); } else { $message = sprintf(tp( 'Submitted passive check result successfully', 'Submitted passive check result for %d services successfully', $countObjects ), $countObjects); } Notification::success($message); }); } protected function assembleElements() { $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement( 'li', null, Text::create(t('This command is used to submit passive host or service check results.')) ) ) )); $decorator = new IcingaFormDecorator(); /** @var Model $object */ $object = iterable_value_first($this->getObjects()); $this->addElement( 'select', 'status', [ 'required' => true, 'label' => t('Status'), 'description' => t('The state this check result should report'), 'options' => $object instanceof Host ? [ ProcessCheckResultCommand::HOST_UP => t('UP', 'icinga.state'), ProcessCheckResultCommand::HOST_DOWN => t('DOWN', 'icinga.state') ] : [ ProcessCheckResultCommand::SERVICE_OK => t('OK', 'icinga.state'), ProcessCheckResultCommand::SERVICE_WARNING => t('WARNING', 'icinga.state'), ProcessCheckResultCommand::SERVICE_CRITICAL => t('CRITICAL', 'icinga.state'), ProcessCheckResultCommand::SERVICE_UNKNOWN => t('UNKNOWN', 'icinga.state') ] ] ); $decorator->decorate($this->getElement('status')); $this->addElement( 'text', 'output', [ 'required' => true, 'label' => t('Output'), 'description' => t('The plugin output of this check result') ] ); $decorator->decorate($this->getElement('output')); $this->addElement( 'text', 'perfdata', [ 'allowEmpty' => true, 'label' => t('Performance Data'), 'description' => t( 'The performance data of this check result. Leave empty' . ' if this check result has no performance data' ) ] ); $decorator->decorate($this->getElement('perfdata')); } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp( 'Submit Passive Check Result', 'Submit Passive Check Results', count($this->getObjects()) ), 'data-progress-label' => tp( 'Submitting Passive Check Result', 'Submitting Passive Check Results', count($this->getObjects()) ) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $object->passive_checks_enabled && $this->isGrantedOn('icingadb/command/process-check-result', $object); }); $command = new ProcessCheckResultCommand(); $command->setStatus($this->getValue('status')); $command->setOutput($this->getValue('output')); $command->setPerformanceData($this->getValue('perfdata')); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(250); } } } icingadb-web-1.5.0/application/forms/Command/Object/RemoveAcknowledgementForm.php000066400000000000000000000053301527064444300301010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\RemoveAcknowledgementCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Notifications\ManagesIncidents; use Icinga\Web\Notification; use ipl\Orm\Model; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class RemoveAcknowledgementForm extends CommandForm { use ManagesIncidents; public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $this->manageIncidents(false); $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf(tp( 'Removed acknowledgment successfully', 'Removed acknowledgment from %d hosts successfully', $countObjects ), $countObjects); } else { $message = sprintf(tp( 'Removed acknowledgment successfully', 'Removed acknowledgment from %d services successfully', $countObjects ), $countObjects); } Notification::success($message); }); } protected $defaultAttributes = ['class' => 'inline']; protected function assembleElements() { } protected function assembleSubmitButton() { $this->addElement( 'submitButton', 'btn_submit', [ 'class' => ['link-button', 'spinner'], 'label' => [ new Icon('trash'), tp('Remove acknowledgement', 'Remove acknowledgements', count($this->getObjects())) ] ] ); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/remove-acknowledgement', $object); }); $command = new RemoveAcknowledgementCommand(); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(250); } } } icingadb-web-1.5.0/application/forms/Command/Object/ScheduleCheckForm.php000066400000000000000000000111621527064444300263060ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use DateInterval; use DateTime; use Icinga\Module\Icingadb\Command\Object\ScheduleCheckCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class ScheduleCheckForm extends CommandForm { public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf( tp('Scheduled check successfully', 'Scheduled check for %d hosts successfully', $countObjects), $countObjects ); } else { $message = sprintf( tp('Scheduled check successfully', 'Scheduled check for %d services successfully', $countObjects), $countObjects ); } Notification::success($message); }); } protected function assembleElements() { $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement( 'li', null, Text::create(t( 'This command is used to schedule the next check of hosts or services. Icinga' . ' will re-queue the hosts or services to be checked at the time you specify.' )) ) ) )); $decorator = new IcingaFormDecorator(); $this->addElement( 'localDateTime', 'check_time', [ 'required' => true, 'label' => t('Check Time'), 'description' => t('Set the date and time when the check should be scheduled.'), 'value' => (new DateTime())->add(new DateInterval('PT1H')) ] ); $decorator->decorate($this->getElement('check_time')); $this->addElement( 'checkbox', 'force_check', [ 'label' => t('Force Check'), 'description' => t( 'If you select this option, Icinga will force a check regardless of both what time the' . ' scheduled check occurs and whether or not checks are enabled.' ) ] ); $decorator->decorate($this->getElement('force_check')); } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp('Schedule check', 'Schedule checks', count($this->getObjects())), 'data-progress-label' => tp('Scheduling check', 'Scheduling checks', count($this->getObjects())) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/schedule-check', $object) || ( $object->active_checks_enabled && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) ); }); $command = new ScheduleCheckCommand(); $command->setForced($this->getElement('force_check')->isChecked()); $command->setCheckTime($this->getValue('check_time')->getTimestamp()); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(1000); } } } icingadb-web-1.5.0/application/forms/Command/Object/ScheduleHostDowntimeForm.php000066400000000000000000000056041527064444300277210ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use DateInterval; use DateTime; use Icinga\Application\Config; use Icinga\Web\Notification; use ipl\Web\FormDecorator\IcingaFormDecorator; use Iterator; use Traversable; class ScheduleHostDowntimeForm extends ScheduleServiceDowntimeForm { /** @var bool */ protected $hostDowntimeAllServices; public function __construct() { $this->start = new DateTime(); $config = Config::module('icingadb'); $this->commentText = $config->get('settings', 'hostdowntime_comment_text'); $this->hostDowntimeAllServices = (bool) $config->get('settings', 'hostdowntime_all_services', false); $fixedEnd = clone $this->start; $fixed = $config->get('settings', 'hostdowntime_end_fixed', 'PT1H'); $this->fixedEnd = $fixedEnd->add(new DateInterval($fixed)); $flexibleEnd = clone $this->start; $flexible = $config->get('settings', 'hostdowntime_end_flexible', 'PT2H'); $this->flexibleEnd = $flexibleEnd->add(new DateInterval($flexible)); $flexibleDuration = $config->get('settings', 'hostdowntime_flexible_duration', 'PT2H'); $this->flexibleDuration = new DateInterval($flexibleDuration); $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); Notification::success(sprintf( tp('Scheduled downtime successfully', 'Scheduled downtime for %d hosts successfully', $countObjects), $countObjects )); }); } protected function assembleElements() { parent::assembleElements(); $decorator = new IcingaFormDecorator(); $allServices = $this->createElement( 'checkbox', 'all_services', [ 'label' => t('All Services'), 'description' => t( 'Sets downtime for all services for the matched host objects. If child options are set,' . ' all child hosts and their services will schedule a downtime too.' ), 'value' => $this->hostDowntimeAllServices ] ); $this->insertBefore($allServices, $this->getElement('child_options')); $this->registerElement($allServices); $decorator->decorate($allServices); } protected function getCommands(Iterator $objects): Traversable { if (! $this->getElement('all_services')->isChecked()) { yield from parent::getCommands($objects); } else { foreach (parent::getCommands($objects) as $command) { yield $command->setForAllServices(); } } } } icingadb-web-1.5.0/application/forms/Command/Object/ScheduleServiceDowntimeForm.php000066400000000000000000000254021527064444300304020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use DateInterval; use DateTime; use Icinga\Application\Config; use Icinga\Module\Icingadb\Command\Object\ScheduleDowntimeCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Validator\CallbackValidator; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; class ScheduleServiceDowntimeForm extends CommandForm { /** @var DateTime downtime start */ protected $start; /** @var DateTime fixed downtime end */ protected $fixedEnd; /**@var DateTime flexible downtime end */ protected $flexibleEnd; /** @var DateInterval flexible downtime duration */ protected $flexibleDuration; /** @var mixed Comment Text */ protected $commentText; /** * Initialize this form */ public function __construct() { $this->start = new DateTime(); $config = Config::module('icingadb'); $this->commentText = $config->get('settings', 'servicedowntime_comment_text'); $fixedEnd = clone $this->start; $fixed = $config->get('settings', 'servicedowntime_end_fixed', 'PT1H'); $this->fixedEnd = $fixedEnd->add(new DateInterval($fixed)); $flexibleEnd = clone $this->start; $flexible = $config->get('settings', 'servicedowntime_end_flexible', 'PT2H'); $this->flexibleEnd = $flexibleEnd->add(new DateInterval($flexible)); $flexibleDuration = $config->get('settings', 'servicedowntime_flexible_duration', 'PT2H'); $this->flexibleDuration = new DateInterval($flexibleDuration); $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); Notification::success(sprintf( tp('Scheduled downtime successfully', 'Scheduled downtime for %d services successfully', $countObjects), $countObjects )); }); } protected function assembleElements() { $isFlexible = $this->getPopulatedValue('flexible') === 'y'; $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement( 'li', null, Text::create(t( 'This command is used to schedule host and service downtimes. During the downtime specified' . ' by the start and end time, Icinga will not send notifications out about the hosts and' . ' services. When the scheduled downtime expires, Icinga will send out notifications for' . ' the hosts and services as it normally would.' )) ) ) )); $decorator = new IcingaFormDecorator(); $this->addElement( 'textarea', 'comment', [ 'required' => true, 'label' => t('Comment'), 'description' => t( 'If you work with other administrators, you may find it useful to share information about' . ' the host or service that is having problems. Make sure you enter a brief description of' . ' what you are doing.' ), 'value' => $this->commentText ] ); $decorator->decorate($this->getElement('comment')); $this->addElement( 'localDateTime', 'start', [ 'required' => true, 'value' => $this->start, 'label' => t('Start Time'), 'description' => t('Set the start date and time for the downtime.') ] ); $decorator->decorate($this->getElement('start')); $this->addElement( 'localDateTime', 'end', [ 'required' => true, 'label' => t('End Time'), 'description' => t('Set the end date and time for the downtime.'), 'value' => $isFlexible ? $this->flexibleEnd : $this->fixedEnd, 'validators' => [ 'DateTime' => ['break_chain_on_failure' => true], 'Callback' => function ($value, $validator) { /** @var CallbackValidator $validator */ if ($value <= $this->getValue('start')) { $validator->addMessage(t('The end time must be greater than the start time')); return false; } if ($value <= (new DateTime())) { $validator->addMessage(t('A downtime must not be in the past')); return false; } return true; } ] ] ); $decorator->decorate($this->getElement('end')); $this->addElement( 'checkbox', 'flexible', [ 'class' => 'autosubmit', 'label' => t('Flexible'), 'description' => t( 'To make this a flexible downtime, check this option. A flexible downtime starts when the host' . ' or service enters a problem state sometime between the start and end times you specified.' . ' It then lasts as long as the duration time you enter.' ) ] ); $decorator->decorate($this->getElement('flexible')); if ($isFlexible) { $hoursInput = $this->createElement( 'number', 'hours', [ 'required' => true, 'label' => t('Duration'), 'value' => $this->flexibleDuration->h, 'min' => 0, 'validators' => [ 'Callback' => function ($value, $validator) { /** @var CallbackValidator $validator */ if ($this->getValue('minutes') == 0 && $value == 0) { $validator->addMessage(t('The duration must not be zero')); return false; } return true; } ] ] ); $this->registerElement($hoursInput); $decorator->decorate($hoursInput); $minutesInput = $this->createElement( 'number', 'minutes', [ 'required' => true, 'value' => $this->flexibleDuration->m, 'min' => 0 ] ); $this->registerElement($minutesInput); $minutesInput->addWrapper( new HtmlElement('label', null, new HtmlElement('span', null, Text::create(t('Minutes')))) ); $hoursInput->getWrapper()->on( IcingaFormDecorator::ON_ASSEMBLED, function ($hoursInputWrapper) use ($minutesInput, $hoursInput) { $hoursInputWrapper ->insertAfter($minutesInput, $hoursInput) ->getAttributes()->add('class', 'downtime-duration'); } ); $hoursInput->prependWrapper( new HtmlElement('label', null, new HtmlElement('span', null, Text::create(t('Hours')))) ); $this->add($hoursInput); } $this->addElement( 'select', 'child_options', array( 'description' => t('Schedule child downtimes.'), 'label' => t('Child Options'), 'options' => [ ScheduleDowntimeCommand::IGNORE_CHILDREN => t( 'Do nothing with children' ), ScheduleDowntimeCommand::TRIGGER_CHILDREN => t( 'Schedule a downtime for all children and trigger them by this downtime' ), ScheduleDowntimeCommand::SCHEDULE_CHILDREN => t( 'Schedule non-triggered downtime for all children' ) ] ) ); $decorator->decorate($this->getElement('child_options')); } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp('Schedule downtime', 'Schedule downtimes', count($this->getObjects())), 'data-progress-label' => tp('Scheduling downtime', 'Scheduling downtimes', count($this->getObjects())) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/downtime/schedule', $object); }); $command = new ScheduleDowntimeCommand(); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $command->setStart($this->getValue('start')->getTimestamp()); $command->setEnd($this->getValue('end')->getTimestamp()); $command->setChildOption((int) $this->getValue('child_options')); if ($this->getElement('flexible')->isChecked()) { $command->setFixed(false); $command->setDuration( $this->getValue('hours') * 3600 + $this->getValue('minutes') * 60 ); } $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(250); } } } icingadb-web-1.5.0/application/forms/Command/Object/SendCustomNotificationForm.php000066400000000000000000000110751527064444300302520ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Application\Config; use Icinga\Module\Icingadb\Command\Object\SendCustomNotificationCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Web\Notification; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\FormDecorator\IcingaFormDecorator; use ipl\Web\Widget\Icon; use Iterator; use Traversable; use function ipl\Stdlib\iterable_value_first; class SendCustomNotificationForm extends CommandForm { public function __construct() { $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } $countObjects = count($this->getObjects()); if (iterable_value_first($this->getObjects()) instanceof Host) { $message = sprintf(tp( 'Sent custom notification successfully', 'Sent custom notification for %d hosts successfully', $countObjects ), $countObjects); } else { $message = sprintf(tp( 'Sent custom notification successfully', 'Sent custom notification for %d services successfully', $countObjects ), $countObjects); } Notification::success($message); }); } protected function assembleElements() { $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'form-description']), new Icon('info-circle', ['class' => 'form-description-icon']), new HtmlElement( 'ul', null, new HtmlElement( 'li', null, Text::create(t('This command is used to send custom notifications about hosts or services.')) ) ) )); $config = Config::module('icingadb'); $decorator = new IcingaFormDecorator(); $this->addElement( 'textarea', 'comment', [ 'required' => true, 'label' => t('Comment'), 'description' => t( 'Enter a brief description on why you\'re sending this notification. It will be sent with it.' ) ] ); $decorator->decorate($this->getElement('comment')); $this->addElement( 'checkbox', 'forced', [ 'label' => t('Forced'), 'value' => (bool) $config->get('settings', 'custom_notification_forced', false), 'description' => t( 'If you check this option, the notification is sent regardless' . ' of downtimes or whether notifications are enabled or not.' ) ] ); $decorator->decorate($this->getElement('forced')); } protected function assembleSubmitButton() { $this->addElement( 'submit', 'btn_submit', [ 'required' => true, 'label' => tp('Send custom notification', 'Send custom notifications', count($this->getObjects())), 'data-progress-label' => tp( 'Sending custom notification', 'Sending custom notifications', count($this->getObjects()) ) ] ); (new IcingaFormDecorator())->decorate($this->getElement('btn_submit')); } protected function getCommands(Iterator $objects): Traversable { $granted = new CallbackFilterIterator($objects, function (Model $object): bool { return $this->isGrantedOn('icingadb/command/send-custom-notification', $object); }); $command = new SendCustomNotificationCommand(); $command->setComment($this->getValue('comment')); $command->setForced($this->getElement('forced')->isChecked()); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(500); } } } icingadb-web-1.5.0/application/forms/Command/Object/ToggleObjectFeaturesForm.php000066400000000000000000000162121527064444300276640ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Command\Object; use CallbackFilterIterator; use Icinga\Module\Icingadb\Command\Object\ToggleObjectFeatureCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; use ipl\Html\FormElement\CheckboxElement; use ipl\Orm\Model; use ipl\Web\FormDecorator\IcingaFormDecorator; use Iterator; use Traversable; class ToggleObjectFeaturesForm extends CommandForm { public const LEAVE_UNCHANGED = 'noop'; protected $features; protected $featureStatus; /** * ToggleFeature(s) being used to submit this form * * @var array */ protected $submittedFeatures = []; public function __construct($featureStatus) { $this->featureStatus = $featureStatus; $this->features = [ ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS => [ 'label' => t('Active Checks'), 'permission' => 'icingadb/command/feature/object/active-checks' ], ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS => [ 'label' => t('Passive Checks'), 'permission' => 'icingadb/command/feature/object/passive-checks' ], ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS => [ 'label' => t('Notifications'), 'permission' => 'icingadb/command/feature/object/notifications' ], ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER => [ 'label' => t('Event Handler'), 'permission' => 'icingadb/command/feature/object/event-handler' ], ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION => [ 'label' => t('Flap Detection'), 'permission' => 'icingadb/command/feature/object/flap-detection' ] ]; $this->getAttributes()->add('class', 'object-features'); $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } foreach ($this->submittedFeatures as $feature => $enabled) { switch ($feature) { case ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS: if ($enabled) { $message = t('Enabled active checks successfully'); } else { $message = t('Disabled active checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS: if ($enabled) { $message = t('Enabled passive checks successfully'); } else { $message = t('Disabled passive checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER: if ($enabled) { $message = t('Enabled event handler successfully'); } else { $message = t('Disabled event handler checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION: if ($enabled) { $message = t('Enabled flap detection successfully'); } else { $message = t('Disabled flap detection successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS: if ($enabled) { $message = t('Enabled notifications successfully'); } else { $message = t('Disabled notifications successfully'); } break; default: $message = t('Invalid feature option'); break; } Notification::success($message); } }); } protected function assembleElements() { $decorator = new IcingaFormDecorator(); foreach ($this->features as $feature => $spec) { $options = [ 'class' => 'autosubmit', 'disabled' => $this->featureStatus instanceof Model ? ! $this->isGrantedOn($spec['permission'], $this->featureStatus) : false, 'label' => $spec['label'] ]; if ($this->featureStatus[$feature] === 2) { $this->addElement( 'select', $feature, $options + [ 'description' => t('Multiple Values'), 'options' => [ self::LEAVE_UNCHANGED => t('Leave Unchanged'), t('Disable All'), t('Enable All') ], 'value' => self::LEAVE_UNCHANGED ] ); $decorator->decorate($this->getElement($feature)); $this->getElement($feature) ->getWrapper() ->getAttributes() ->add('class', 'indeterminate'); } else { $options['value'] = (bool) $this->featureStatus[$feature]; $this->addElement('checkbox', $feature, $options); $decorator->decorate($this->getElement($feature)); } } } protected function assembleSubmitButton() { } protected function getCommands(Iterator $objects): Traversable { foreach ($this->features as $feature => $spec) { if ($this->getElement($feature) instanceof CheckboxElement) { $state = $this->getElement($feature)->isChecked(); } else { $state = $this->getElement($feature)->getValue(); } if ($state === self::LEAVE_UNCHANGED || (int) $state === (int) $this->featureStatus[$feature]) { continue; } $granted = new CallbackFilterIterator($objects, function (Model $object) use ($spec): bool { return $this->isGrantedOn($spec['permission'], $object); }); $command = new ToggleObjectFeatureCommand(); $command->setFeature($feature); $command->setEnabled((int) $state); $granted->rewind(); // Forwards the pointer to the first element if ($granted->valid()) { $this->submittedFeatures[$command->getFeature()] ??= $command->getEnabled(); // Chunk objects to avoid timeouts with large sets yield $command->setObjects($granted)->setChunkSize(1000); } } } } icingadb-web-1.5.0/application/forms/GeneralConfigForm.php000066400000000000000000000621421527064444300235370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms; use Icinga\Application\Config as ApplicationConfig; use Icinga\Application\Logger; use Icinga\Application\Modules\Module; use Icinga\Data\ResourceFactory; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\Config as ConfigModel; use Icinga\Module\Icingadb\Model\Instance; use Icinga\Module\Notifications\Integrations\V1\Source; use Icinga\Web\Form\ConfigForm; use Icinga\Web\Session; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Sql\Config; use ipl\Sql\Connection; use ipl\Stdlib\Filter; use ipl\Stdlib\Str; use ipl\Web\Common\CalloutType; use ipl\Web\FormElement\SearchSuggestions; use ipl\Web\FormElement\TermInput; use ipl\Web\FormElement\TermInput\Term; use ipl\Web\Url; use ipl\Web\Widget\Callout; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use RuntimeException; use Symfony\Component\HttpFoundation\Request; use Throwable; use function ipl\Stdlib\iterable_value_first; class GeneralConfigForm extends ConfigForm { use Database; /** @var string Config key under which Icinga DB's Notifications socket URL is stored */ public const URL_CONFIG_KEY = 'ICINGADB_NOTIFICATIONS_URL'; /** @var string Config key under which the default relations for events sent to Icinga Notifications are stored */ public const RELATIONS_CONFIG_KEY = 'ICINGADB_NOTIFICATIONS_DEFAULT_RELATIONS'; /** @var string Config key under which the Icinga Web URL transmitted to Icinga Notifications is stored */ public const ICINGAWEB2_URL_CONFIG_KEY = 'ICINGADB_NOTIFICATIONS_ICINGAWEB2_URL'; protected $defaultAttributes = [ 'class' => ['icinga-form', 'icinga-controls', 'general-config-form'], 'name' => 'general-config-form' ]; /** @var bool Whether the notifications section is read-only */ private bool $notificationsLocked = false; /** @var string[] The reasons why the notifications section is disabled */ private array $notificationsLockReasons = []; /** @var bool Whether notifications are enabled */ private bool $notificationsEnabled = false; /** @var ?string The database resource the form is rendered for */ private ?string $resource = null; /** @var bool Whether a different database has been selected than the one the form was rendered for */ private bool $databaseChanged = false; /** @var bool Whether Icinga Notifications lacks a source for the responsible instance */ private bool $sourceMissing = false; /** @var bool Whether Icinga DB reports that it fails to transmit notifications */ private bool $unhealthy = false; /** @var ?string The configured default relations as comma separated JSONPaths, null if not configured */ private ?string $defaultRelations = null; /** @var array Lock reasons for individual config items, keyed by config key */ private array $configKeyLockReasons = []; public function __construct(ApplicationConfig $config) { parent::__construct($config); $this->applyDefaultElementDecorators(); } protected function onSuccess(): void { $this->saveNotificationsConfig(); parent::onSuccess(); } protected function assemble(): void { $this->setCsrfCounterMeasureId(Session::getSession()->getId()); $this->resource = $this->getPopulatedValue('icingadb__resource', $this->config->get('icingadb', 'resource')); $this->addDatabaseSection(); if (Module::exists('notifications')) { $this->readNotificationsConfig(); $this->addNotificationsSection(); } } /** * Get the updates to transmit for the default relations during multipart responses * * @return array */ public function getPartUpdates(): array { $this->ensureAssembled(); if (! $this->hasElement('notifications')) { return []; } return $this->getElement('notifications') ->getElement('relations') ->prepareMultipartUpdate($this->getRequest()); } private function addDatabaseSection(): void { $this->addHtml(HtmlElement::create('h2', null, $this->translate('Database'))); $dbResources = ResourceFactory::getResourceConfigs('db')->keys(); $this->addElement('select', 'icingadb__resource', [ 'label' => $this->translate('Database'), 'description' => $this->translate('Database resource'), 'options' => array_combine($dbResources, $dbResources), 'pleaseChoose' => true, 'required' => true, 'class' => ['autosubmit'] ]); $this->addElement('hidden', 'renderedForDb', ['ignore' => true]); $this->databaseChanged = $this->getPopulatedValue('renderedForDb', $this->resource) !== $this->resource; $this->getElement('renderedForDb')->setValue($this->resource); } private function addNotificationsSection(): void { $this->addElement( 'fieldset', 'notifications', [ 'ignore' => true, 'label' => $this->translate('Icinga Notifications') ] ); $notifications = $this->getElement('notifications'); $notifications->addHtml(HtmlElement::create('p', ['class' => 'description'], [ Text::create($this->translate( 'When enabled, Icinga DB connects to Icinga Notifications through its Unix domain socket.' )), Text::create(' '), new Link( [ $this->translate('Consult the documentation for more information'), ' ', new Icon('arrow-up-right-from-square') ], Url::fromPath( 'https://icinga.com/docs/icinga-db-web/latest/doc/' . '03-Configuration/#icinga-notifications-configuration' ), ['target' => '_blank'] ) ])); if ($this->notificationsLocked) { $notifications->addHtml( $this->createLockReasons( $this->notificationsLockReasons, $this->translate('Notifications configuration is not possible') ) ); } elseif (isset($this->configKeyLockReasons[static::URL_CONFIG_KEY])) { $notifications->addHtml( $this->createLockReasons( $this->configKeyLockReasons[static::URL_CONFIG_KEY], $this->translate('Enabling or disabling notifications is not possible') ) ); } if ($this->sourceMissing) { $notifications->addHtml( new Callout( CalloutType::Warning, $this->translate( 'Icinga Notifications does not have a source for Icinga DB configured yet.' . ' Storing this form may fix the problem.' ), $this->translate('No source in Icinga Notifications') ) ); } elseif ($this->notificationsEnabled && $this->unhealthy) { $notifications->addHtml( new Callout( CalloutType::Warning, $this->translate( 'Icinga DB currently fails to transmit notifications, please check its log for details.' ), $this->translate('Notifications are not transmitted') ) ); } if ($this->notificationsLocked || $this->databaseChanged) { $notifications->clearPopulatedValue('enabled'); $notifications->clearPopulatedValue('relations'); } $notifications->addElement('checkbox', 'enabled', [ 'disabled' => $this->notificationsLocked || isset($this->configKeyLockReasons[static::URL_CONFIG_KEY]), 'label' => $this->translate('Enable notifications'), 'value' => $this->notificationsEnabled ]); $notifications->addHtml( HtmlElement::create( 'p', ['class' => 'description'], Text::create( $this->translate( 'Host and service information selected here, such as groups or custom variables,' . ' is included in every event sent to Icinga Notifications. If an event rule\'s filter' . ' needs something that was not included, Icinga Notifications asks for it and Icinga DB has' . ' to send the event again. Select what your event rule filters frequently use to avoid this' . ' extra step, but leave out anything no rule needs, since it would be sent with every event.' ) ) ) ); if (isset($this->configKeyLockReasons[static::RELATIONS_CONFIG_KEY])) { $notifications->addHtml( $this->createLockReasons( $this->configKeyLockReasons[static::RELATIONS_CONFIG_KEY], $this->translate('Configuring default relations is not possible') ) ); } $suggestions = []; foreach ($this->knownRelations() as $search => $label) { $suggestions[] = ['search' => $search, 'label' => $label]; } $suggestions = new SearchSuggestions($suggestions); $relationsOptions = [ 'label' => $this->translate('Default relations'), 'disabled' => $this->notificationsLocked || isset($this->configKeyLockReasons[static::RELATIONS_CONFIG_KEY]) ]; if ($this->loadPlugin('element', 'termInput')) { $relations = $this->createElement('termInput', 'relations', $relationsOptions); } else { // TODO: Remove once the terminput is decorable: https://github.com/Icinga/ipl-web/pull/317 $relations = new TermInput('relations', $relationsOptions); $decorators = $notifications->getDefaultElementDecorators(); $relations->setDefaultElementDecorators($decorators); $relations->addElementDecoratorLoaderPaths([['ipl\\Web\\Compat\\FormDecorator', 'Decorator']]); $relations->getDecorators() ->addDecoratorLoader('ipl\\Web\\Compat\\FormDecorator', 'Decorator') ->addDecorators(array_filter($decorators, fn($decorator) => $decorator !== 'Fieldset')); } $relations ->setReadOnly() ->setSuggestions($suggestions) ->setValue($this->defaultRelations ?? '') ->on(TermInput::ON_ENRICH, $this->validateAndEnrichRelations(...)) ->on(TermInput::ON_ADD, $this->validateAndEnrichRelations(...)) ->on(TermInput::ON_SAVE, $this->validateAndEnrichRelations(...)) ->on(TermInput::ON_PASTE, $this->validateAndEnrichRelations(...)); $notifications->addElement($relations); } /** * Read the current Icinga Notifications configuration * * Lock the assisted configuration if it is not applicable with a hint explaining why. * * @return void */ private function readNotificationsConfig(): void { if (Str::isEmpty($this->resource)) { $this->lockNotifications($this->translate('No database has been configured yet.')); return; } try { if ($this->resource !== $this->config->get('icingadb', 'resource')) { $config = new Config(ResourceFactory::getResourceConfig($this->resource)); Backend::setDb(new Connection($config)); } if (! Backend::supportsNotifications()) { $this->lockNotifications( $this->translate('The Icinga DB schema is outdated. Please update to configure notifications.') ); return; } $instances = Instance::on($this->getDb())->columns( [ 'endpoint_id', 'notifications_discovered_socket_path', 'notifications_synchronize_with_database', 'icingadb_service_user', 'notifications_healthy', 'icinga2_version' ] )->filter(Filter::equal('responsible', true))->execute(); if (count($instances) === 0) { $this->lockNotifications($this->translate('No Icinga DB instance was found.')); return; } elseif (count($instances) > 1) { // Each environment has one responsible instance, so several of them mean several environments. // Supporting those would require one toggle per environment just to allow differing config. // Such setups have to be configured manually. $this->lockNotifications( $this->translate('Assisted configuration for multiple environments is not supported.') ); return; } $instance = iterable_value_first($instances); if (! Backend::icinga2SupportsNotifications($instance->icinga2_version)) { $this->lockNotifications( $this->translate('The Icinga 2 version is outdated. Please update to configure notifications.') ); } if (! $instance->notifications_synchronize_with_database) { $this->lockNotifications( $this->translate('Synchronization of the configuration with the database is disabled.') ); return; } if ($instance->notifications_discovered_socket_path === null) { $this->lockConfigKey( static::URL_CONFIG_KEY, $this->translate('No Unix socket for Icinga Notifications was discovered.') ); } $serviceUser = $instance->icingadb_service_user; $this->unhealthy = $instance->notifications_healthy === false; $configuredEndpoints = []; $configRows = ConfigModel::on($this->getDb()) ->columns(['endpoint_id', 'locked', 'env_key', 'env_value']) ->filter( Filter::equal( 'env_key', [static::URL_CONFIG_KEY, static::RELATIONS_CONFIG_KEY, static::ICINGAWEB2_URL_CONFIG_KEY] ) ); foreach ($configRows as $configRow) { if ($configRow->locked) { $this->lockConfigKey( $configRow->env_key, $this->translate('This configuration item is managed locally.') ); } if ($configRow->env_key === static::URL_CONFIG_KEY) { $configuredEndpoints[$configRow->endpoint_id] = true; } elseif ($configRow->env_key === static::RELATIONS_CONFIG_KEY && $this->defaultRelations === null) { $this->defaultRelations = $configRow->env_value; } } $enabled = isset($configuredEndpoints[$instance->endpoint_id ?? $this->defaultEndpointId()]); if ($enabled && ! isset($this->configKeyLockReasons[static::URL_CONFIG_KEY])) { if (Source::get($serviceUser)->getName() === null) { $enabled = false; $this->sourceMissing = true; } } $this->notificationsEnabled = $enabled; } catch (Throwable $e) { Logger::error('Failed to read the Icinga Notifications configuration: %s', $e); $this->lockNotifications( $this->translate( 'Failed to read the configuration from the database. Please check the log for details.' ) ); } } /** * Apply the assisted Icinga Notifications configuration to the database * * @return void * * @throws RuntimeException If the configuration could not be applied */ private function saveNotificationsConfig(): void { if ($this->notificationsLocked || ! $this->hasElement('notifications')) { return; } $writableKeys = array_diff( [static::URL_CONFIG_KEY, static::RELATIONS_CONFIG_KEY, static::ICINGAWEB2_URL_CONFIG_KEY], array_keys($this->configKeyLockReasons) ); if (empty($writableKeys)) { return; } $enable = $this->getElement('notifications')->getElement('enabled')->isChecked(); $relations = $this->getElement('notifications')->getValue('relations'); try { $serviceUsers = []; $endpoints = []; $environmentId = null; // The loop is required so that all instances are configured in the HA case foreach ( Instance::on($this->getDb())->columns([ 'environment_id', 'endpoint_id', 'icingadb_service_user', 'notifications_discovered_socket_path' ]) as $instance ) { $environmentId = $instance->environment_id; $endpointId = $instance->endpoint_id ?? $this->defaultEndpointId(); $endpoints[$endpointId] = $instance->notifications_discovered_socket_path; $serviceUsers[$instance->icingadb_service_user] = true; } $sources = []; if ($enable && in_array(static::URL_CONFIG_KEY, $writableKeys, true)) { foreach (array_keys($serviceUsers) as $serviceUser) { $source = Source::get($serviceUser); if ($source->getName() === null) { $source->setName('Icinga DB'); } $source->setType('icinga2'); $sources[] = $source; } } $icingaweb2Url = null; if ($enable && in_array(static::ICINGAWEB2_URL_CONFIG_KEY, $writableKeys, true)) { $icingaweb2Url = $this->detectIcingaweb2Url(); } $this->getDb() ->transaction( function () use ($enable, $endpoints, $environmentId, $writableKeys, $relations, $icingaweb2Url) { $environmentId = $this->encodeBinary($environmentId, 'environment_id'); foreach ($endpoints as $endpointId => $socketPath) { $endpointId = $this->encodeBinary($endpointId, 'endpoint_id'); $this->getDb()->delete('icingadb_config', [ 'environment_id = ?' => $environmentId, 'endpoint_id = ?' => $endpointId, 'env_key IN (?)' => $writableKeys, 'locked = ?' => 'n' ]); if ( $enable && $socketPath !== null && in_array(static::URL_CONFIG_KEY, $writableKeys, true) ) { $this->getDb()->insert('icingadb_config', [ 'environment_id' => $environmentId, 'endpoint_id' => $endpointId, 'env_key' => static::URL_CONFIG_KEY, 'env_value' => 'unix://' . $socketPath, 'locked' => 'n' ]); } if ($relations !== '' && in_array(static::RELATIONS_CONFIG_KEY, $writableKeys, true)) { $this->getDb()->insert('icingadb_config', [ 'environment_id' => $environmentId, 'endpoint_id' => $endpointId, 'env_key' => static::RELATIONS_CONFIG_KEY, 'env_value' => $relations, 'locked' => 'n' ]); } if ($icingaweb2Url !== null) { $this->getDb()->insert('icingadb_config', [ 'environment_id' => $environmentId, 'endpoint_id' => $endpointId, 'env_key' => static::ICINGAWEB2_URL_CONFIG_KEY, 'env_value' => $icingaweb2Url, 'locked' => 'n' ]); } } } ); foreach ($sources as $source) { $source->save(); } } catch (Throwable $e) { Logger::error('Assisted Icinga Notifications configuration failed: %s', $e); throw new RuntimeException( $this->translate('Failed to save the Icinga Notifications configuration. Please check the log.'), previous: $e ); } } private function lockNotifications(string $message): static { $this->notificationsLocked = true; if (! in_array($message, $this->notificationsLockReasons, true)) { $this->notificationsLockReasons[] = $message; } return $this; } private function lockConfigKey(string $key, string $message): static { if (! in_array($message, $this->configKeyLockReasons[$key] ?? [], true)) { $this->configKeyLockReasons[$key][] = $message; } return $this; } /** * @param string[] $messages */ private function createLockReasons(array $messages, ?string $title = null): Callout { return new Callout( CalloutType::Info, count($messages) === 1 ? $messages[0] : HtmlElement::create( 'ul', ['class' => 'lock-reasons'], array_map( fn(string $message) => HtmlElement::create('li', null, $message), $messages ) ), $title ); } /** * Get the relations that can be included by default in events sent to Icinga Notifications * * @return array */ private function knownRelations(): array { return [ '$.host' => $this->translate('Host'), '$.hostgroups[*].name' => $this->translate('Hostgroups'), '$.services[*].name' => $this->translate('Services'), '$.servicegroups[*].name' => $this->translate('Servicegroups'), '$.host.vars' => $this->translate('Host Variables'), '$.services[*].vars' => $this->translate('Service Variables') ]; } /** * @param array $terms */ private function validateAndEnrichRelations(array $terms): void { $knownRelations = $this->knownRelations(); foreach ($terms as $term) { if (isset($knownRelations[$term->getSearchValue()])) { $term->setLabel($knownRelations[$term->getSearchValue()]); } else { $term->setMessage($this->translate('Is not a supported relation')); } } } private function encodeBinary(string $value, string $column): string { $query = ConfigModel::on($this->getDb()); return $query->getResolver() ->getBehaviors($query->getModel()) ->persistProperty($value, $column); } /** * Get the default endpoint id, to use if none is configured * * @return string */ private function defaultEndpointId(): string { return str_repeat(chr(0), 20); } /** * Detect the absolute Url of Icinga Web, respecting X-Forwarded-* headers set by reverse proxies * * @return string */ private function detectIcingaweb2Url(): string { $serverParams = $this->getRequest()->getServerParams(); $request = new Request(server: $serverParams); $request->headers->replace($this->getRequest()->getHeaders()); // Trusts X-Forwarded-* from any peer: only safe because this form requires config/modules Request::setTrustedProxies( isset($serverParams['REMOTE_ADDR']) ? [$serverParams['REMOTE_ADDR']] : [], Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PREFIX ); return $request->getSchemeAndHttpHost() . $request->getBaseUrl(); } } icingadb-web-1.5.0/application/forms/Navigation/000077500000000000000000000000001527064444300215715ustar00rootroot00000000000000icingadb-web-1.5.0/application/forms/Navigation/ActionForm.php000066400000000000000000000030661527064444300243500ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Navigation; use Icinga\Exception\ConfigurationError; use Icinga\Forms\Navigation\NavigationItemForm; use Icinga\Module\Icingadb\Common\Auth; class ActionForm extends NavigationItemForm { use Auth; /** * The name of the restriction to which the filter should be applied * * @var string */ protected $restriction; public function createElements(array $formData) { parent::createElements($formData); $this->addElement( 'text', 'filter', array( 'allowEmpty' => true, 'label' => $this->translate('Filter'), 'description' => $this->translate( 'Display this action only for objects matching this filter. Leave it blank' . ' if you want this action being displayed regardless of the object' ) ) ); } public function isValid($formData): bool { if (! parent::isValid($formData)) { return false; } if (($filterString = $this->getValue('filter')) !== null) { try { $this->parseRestriction($filterString, $this->restriction); } catch (ConfigurationError $err) { $this->getElement('filter')->addError($err->getMessage()); return false; } } return true; } } icingadb-web-1.5.0/application/forms/Navigation/IcingadbHostActionForm.php000066400000000000000000000004241527064444300266220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Navigation; class IcingadbHostActionForm extends ActionForm { protected $restriction = 'icingadb/filter/hosts'; } icingadb-web-1.5.0/application/forms/Navigation/IcingadbServiceActionForm.php000066400000000000000000000004321527064444300273040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms\Navigation; class IcingadbServiceActionForm extends ActionForm { protected $restriction = 'icingadb/filter/services'; } icingadb-web-1.5.0/application/forms/RedisConfigForm.php000066400000000000000000000642561527064444300232400ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Forms; use Closure; use Exception; use Icinga\Application\Config; use Icinga\Application\Icinga; use Icinga\Application\Logger; use Icinga\Exception\AlreadyExistsException; use Icinga\Exception\IcingaException; use Icinga\Exception\NotWritableError; use Icinga\File\Storage\LocalFileStorage; use Icinga\File\Storage\TemporaryLocalFileStorage; use Icinga\Forms\ConfigForm; use Icinga\Module\Icingadb\Common\IcingaRedis; use Icinga\Web\Form; use ipl\Validator\PrivateKeyValidator; use ipl\Validator\X509CertValidator; use Throwable; use Zend_Config_Exception; use Zend_Form_Decorator_Abstract; use Zend_Validate_Callback; class RedisConfigForm extends ConfigForm { public function init() { $this->setSubmitLabel(t('Save Changes')); $this->setValidatePartial(true); } public function createElements(array $formData) { $this->addElement('checkbox', 'redis_tls', [ 'label' => t('Use TLS'), 'description' => t('Encrypt connections to Redis via TLS'), 'autosubmit' => true ]); $this->addElement('hidden', 'redis_ca'); $this->addElement('hidden', 'redis_cert'); $this->addElement('hidden', 'redis_key'); $this->addElement('hidden', 'clear_redis_ca', ['ignore' => true]); $this->addElement('hidden', 'clear_redis_cert', ['ignore' => true]); $this->addElement('hidden', 'clear_redis_key', ['ignore' => true]); $useTls = isset($formData['redis_tls']) && $formData['redis_tls']; if ($useTls) { $this->addElement('textarea', 'redis_ca_pem', [ 'label' => t('Redis CA Certificate'), 'description' => sprintf( t('Verify the peer using this PEM-encoded CA certificate ("%s...")'), '-----BEGIN CERTIFICATE-----' ), 'required' => true, 'ignore' => true, 'validators' => [$this->wrapIplValidator(X509CertValidator::class, 'redis_ca_pem')] ]); $this->addElement('textarea', 'redis_cert_pem', [ 'label' => t('Client Certificate'), 'description' => sprintf( t('Authenticate using this PEM-encoded client certificate ("%s...")'), '-----BEGIN CERTIFICATE-----' ), 'ignore' => true, 'allowEmpty' => false, 'validators' => [ $this->wrapIplValidator(X509CertValidator::class, 'redis_cert_pem', function ($value) { if (! $value && $this->getElement('redis_key_pem')->getValue()) { $this->getElement('redis_cert_pem')->addError(t( 'Either both a client certificate and its private key or none of them must be specified' )); } return true; }) ] ]); $this->addElement('textarea', 'redis_key_pem', [ 'label' => t('Client Key'), 'description' => sprintf( t('Authenticate using this PEM-encoded private key ("%s...")'), '-----BEGIN PRIVATE KEY-----' ), 'ignore' => true, 'allowEmpty' => false, 'validators' => [ $this->wrapIplValidator(PrivateKeyValidator::class, 'redis_key_pem', function ($value) { if (! $value && $this->getElement('redis_cert_pem')->getValue()) { $this->getElement('redis_key_pem')->addError(t( 'Either both a client certificate and its private key or none of them must be specified' )); } return true; }) ] ]); } $this->addDisplayGroup( ['redis_tls', 'redis_insecure', 'redis_ca_pem', 'redis_cert_pem', 'redis_key_pem'], 'redis', [ 'decorators' => [ 'FormElements', ['HtmlTag', ['tag' => 'div']], [ 'Description', ['tag' => 'span', 'class' => 'description', 'placement' => 'prepend'] ], 'Fieldset' ], 'description' => t( 'Secure connections. If you are running a high availability zone' . ' with two masters, the following applies to both of them.' ), 'legend' => t('General') ] ); if (isset($formData['skip_validation']) && $formData['skip_validation']) { // In case another error occured and the checkbox was displayed before static::addSkipValidationCheckbox($this); } if ($useTls && isset($formData['redis_insecure']) && $formData['redis_insecure']) { // In case another error occured and the checkbox was displayed before static::addInsecureCheckboxIfTls($this); } $redisPortDescription = t(sprintf( "Defaults to %d as the Redis® open source server provided by" . ' the "icingadb-redis" package listens on that port.', IcingaRedis::DEFAULT_PORT )); $redisDatabaseDescription = t(sprintf( "Numerical database identifier, defaults to %d. This only needs to be changed" . ' if Icinga 2 is configured to write to another database index.', IcingaRedis::DEFAULT_DATABASE )); $redisUsernameDescription = t( 'Authentication username, requires a password being set as well. This field is necessary when' . ' connecting to a redis instance that requires authentication beyond the default user.' ); $redisPasswordDescription = t( 'Authentication password. May be used alone when logging in as the' . ' default user or together with a username.' ); $this->addElement('text', 'redis1_host', [ 'description' => t('Redis Host'), 'label' => t('Redis Host'), 'required' => true ]); $this->addElement('number', 'redis1_port', [ 'description' => $redisPortDescription, 'label' => t('Redis Port'), 'placeholder' => IcingaRedis::DEFAULT_PORT ]); $this->addElement('number', 'redis1_database', [ 'description' => $redisDatabaseDescription, 'label' => t('Redis Database'), 'placeholder' => IcingaRedis::DEFAULT_DATABASE ]); $this->addElement('text', 'redis1_username', [ 'description' => $redisUsernameDescription, 'label' => t('Redis Username') ]); $this->addElement('password', 'redis1_password', [ 'description' => $redisPasswordDescription, 'label' => t('Redis Password'), 'renderPassword' => true, 'autocomplete' => 'new-password' ]); $this->addDisplayGroup( ['redis1_host', 'redis1_port', 'redis1_database', 'redis1_username', 'redis1_password'], 'redis1', [ 'decorators' => [ 'FormElements', ['HtmlTag', ['tag' => 'div']], [ 'Description', ['tag' => 'span', 'class' => 'description', 'placement' => 'prepend'] ], 'Fieldset' ], 'description' => t( 'Redis connection details of your Icinga host. If you are running a high' . ' availability zone with two masters, this is your configuration master.' ), 'legend' => t('Primary Icinga Master') ] ); $this->addElement('text', 'redis2_host', [ 'description' => t('Redis Host'), 'label' => t('Redis Host'), ]); $this->addElement('number', 'redis2_port', [ 'description' => $redisPortDescription, 'label' => t('Redis Port'), 'placeholder' => IcingaRedis::DEFAULT_PORT ]); $this->addElement('number', 'redis2_database', [ 'description' => $redisDatabaseDescription, 'label' => t('Redis Database'), 'placeholder' => IcingaRedis::DEFAULT_DATABASE ]); $this->addElement('text', 'redis2_username', [ 'description' => $redisUsernameDescription, 'label' => t('Redis Username') ]); $this->addElement('password', 'redis2_password', [ 'description' => $redisPasswordDescription, 'label' => t('Redis Password'), 'renderPassword' => true, 'autocomplete' => 'new-password' ]); $this->addDisplayGroup( ['redis2_host', 'redis2_port', 'redis2_database', 'redis2_username', 'redis2_password'], 'redis2', [ 'decorators' => [ 'FormElements', ['HtmlTag', ['tag' => 'div']], [ 'Description', ['tag' => 'span', 'class' => 'description', 'placement' => 'prepend'] ], 'Fieldset' ], 'description' => t( 'If you are running a high availability zone with two masters,' . ' please provide the Redis connection details of the secondary master.' ), 'legend' => t('Secondary Icinga Master') ] ); } public static function addSkipValidationCheckbox(Form $form) { $form->addElement( 'checkbox', 'skip_validation', [ 'order' => 0, 'ignore' => true, 'label' => t('Skip Validation'), 'description' => t( 'Check this box to enforce changes without validating that Redis is available.' ) ] ); } public static function addInsecureCheckboxIfTls(Form $form) { if ($form->getElement('redis_insecure') !== null) { return; } $form->addElement( 'checkbox', 'redis_insecure', [ 'order' => 1, 'label' => t('Insecure'), 'description' => t('Don\'t verify the peer') ] ); $displayGroup = $form->getDisplayGroup('redis'); $elements = $displayGroup->getElements(); $elements['redis_insecure'] = $form->getElement('redis_insecure'); $displayGroup->setElements($elements); } public function isValid($formData) { if (! parent::isValid($formData)) { return false; } if (($el = $this->getElement('skip_validation')) === null || ! $el->isChecked()) { if (! static::checkRedis($this)) { if ($el === null) { static::addSkipValidationCheckbox($this); if ($this->getElement('redis_tls')->isChecked()) { static::addInsecureCheckboxIfTls($this); } } return false; } } return true; } public function isValidPartial(array $formData) { if (! parent::isValidPartial($formData)) { return false; } $useTls = $this->getElement('redis_tls')->isChecked(); foreach (['ca', 'cert', 'key'] as $name) { $textareaName = 'redis_' . $name . '_pem'; $clearName = 'clear_redis_' . $name; if ($useTls) { $this->getElement($clearName)->setValue(null); $pemPath = $this->getValue('redis_' . $name); if ($pemPath && ! isset($formData[$textareaName]) && ! $formData[$clearName]) { $this->getElement($textareaName)->setValue(@file_get_contents($pemPath)); } } if (isset($formData[$textareaName]) && ! $formData[$textareaName]) { $this->getElement($clearName)->setValue(true); } } if ($this->getElement('backend_validation')->isChecked()) { if (! static::checkRedis($this)) { if ($this->getElement('redis_tls')->isChecked()) { static::addInsecureCheckboxIfTls($this); } return false; } } return true; } public function onRequest() { $errors = []; $redisConfig = $this->config->getSection('redis'); if ($redisConfig->get('tls', false)) { foreach (['ca', 'cert', 'key'] as $name) { $path = $redisConfig->get($name, ''); if (file_exists($path)) { try { $redisConfig[$name . '_pem'] = file_get_contents($path); } catch (Exception $e) { $errors['redis_' . $name . '_pem'] = sprintf( t('Failed to read file "%s": %s'), $path, $e->getMessage() ); } } } } $connectionConfig = Config::fromIni( join(DIRECTORY_SEPARATOR, [dirname($this->config->getConfigFile()), 'redis.ini']) ); $this->config->setSection('redis1', [ 'host' => $connectionConfig->get('redis1', 'host'), 'port' => $connectionConfig->get('redis1', 'port'), 'database' => $connectionConfig->get('redis1', 'database'), 'username' => $connectionConfig->get('redis1', 'username'), 'password' => $connectionConfig->get('redis1', 'password') ]); $this->config->setSection('redis2', [ 'host' => $connectionConfig->get('redis2', 'host'), 'port' => $connectionConfig->get('redis2', 'port'), 'database' => $connectionConfig->get('redis2', 'database'), 'username' => $connectionConfig->get('redis2', 'username'), 'password' => $connectionConfig->get('redis2', 'password') ]); parent::onRequest(); foreach ($errors as $elementName => $message) { $this->getElement($elementName)->addError($message); } } public function onSuccess() { $storage = new LocalFileStorage(Icinga::app()->getStorageDir( join(DIRECTORY_SEPARATOR, ['modules', 'icingadb', 'redis']) )); $useTls = $this->getElement('redis_tls')->isChecked(); $pem = null; foreach (['ca', 'cert', 'key'] as $name) { $textarea = $this->getElement('redis_' . $name . '_pem'); if ($useTls && $textarea !== null && ($pem = $textarea->getValue())) { $pemFile = md5($pem) . '-' . $name . '.pem'; if (! $storage->has($pemFile)) { try { $storage->create($pemFile, $pem); } catch (NotWritableError $e) { $textarea->addError($e->getMessage()); return false; } catch (AlreadyExistsException $e) { $textarea->addError($e->getMessage()); return false; } } $this->getElement('redis_' . $name)->setValue($storage->resolvePath($pemFile)); } if ((! $useTls && $this->getElement('clear_redis_' . $name)->getValue()) || ($useTls && ! $pem)) { $pemPath = $this->getValue('redis_' . $name); if ($pemPath && $storage->has(($pemFile = basename($pemPath)))) { try { $storage->delete($pemFile); $this->getElement('redis_' . $name)->setValue(null); } catch (NotWritableError $e) { $this->addError($e->getMessage()); return false; } } } } $connectionConfig = Config::fromIni( join(DIRECTORY_SEPARATOR, [dirname($this->config->getConfigFile()), 'redis.ini']) ); $redis1Host = $this->getValue('redis1_host'); $redis1Port = $this->getValue('redis1_port'); $redis1Database = $this->getValue('redis1_database'); $redis1Username = $this->getValue('redis1_username'); $redis1Password = $this->getValue('redis1_password'); $redis1Section = $connectionConfig->getSection('redis1'); $redis1Section['host'] = $redis1Host; $this->getElement('redis1_host')->setValue(null); $connectionConfig->setSection('redis1', $redis1Section); if (! empty($redis1Port)) { $redis1Section['port'] = $redis1Port; $this->getElement('redis1_port')->setValue(null); } else { $redis1Section['port'] = null; } if (! empty($redis1Database)) { $redis1Section['database'] = $redis1Database; $this->getElement('redis1_database')->setValue(null); } else { $redis1Section['database'] = null; } if (! empty($redis1Username)) { $redis1Section['username'] = $redis1Username; $this->getElement('redis1_username')->setValue(null); } else { $redis1Section['username'] = null; } if (! empty($redis1Password)) { $redis1Section['password'] = $redis1Password; $this->getElement('redis1_password')->setValue(null); } else { $redis1Section['password'] = null; } if (! array_filter($redis1Section->toArray())) { $connectionConfig->removeSection('redis1'); } $redis2Host = $this->getValue('redis2_host'); $redis2Port = $this->getValue('redis2_port'); $redis2Database = $this->getValue('redis2_database'); $redis2Username = $this->getValue('redis2_username'); $redis2Password = $this->getValue('redis2_password'); $redis2Section = $connectionConfig->getSection('redis2'); if (! empty($redis2Host)) { $redis2Section['host'] = $redis2Host; $this->getElement('redis2_host')->setValue(null); $connectionConfig->setSection('redis2', $redis2Section); } else { $redis2Section['host'] = null; } if (! empty($redis2Port)) { $redis2Section['port'] = $redis2Port; $this->getElement('redis2_port')->setValue(null); $connectionConfig->setSection('redis2', $redis2Section); } else { $redis2Section['port'] = null; } if (! empty($redis2Database)) { $redis2Section['database'] = $redis2Database; $this->getElement('redis2_database')->setValue(null); } else { $redis2Section['database'] = null; } if (! empty($redis2Username)) { $redis2Section['username'] = $redis2Username; $this->getElement('redis2_username')->setValue(null); } else { $redis2Section['username'] = null; } if (! empty($redis2Password)) { $redis2Section['password'] = $redis2Password; $this->getElement('redis2_password')->setValue(null); } else { $redis2Section['password'] = null; } if (! array_filter($redis2Section->toArray())) { $connectionConfig->removeSection('redis2'); } try { $connectionConfig->saveIni(); } catch (NotWritableError | Zend_Config_Exception $e) { $this->addDecorator('ViewScript', array( 'viewModule' => 'default', 'viewScript' => 'showConfiguration.phtml', 'errorMessage' => $e->getMessage(), 'configString' => $connectionConfig, 'filePath' => $connectionConfig->getConfigFile(), 'placement' => Zend_Form_Decorator_Abstract::PREPEND )); return false; } catch (Throwable $e) { $this->addError($e->getMessage()); Logger::error($e->getMessage()); Logger::debug(IcingaException::getConfidentialTraceAsString($e)); return false; } return parent::onSuccess(); } public function addSubmitButton() { parent::addSubmitButton() ->getElement('btn_submit') ->setDecorators(['ViewHelper']); $this->addElement( 'submit', 'backend_validation', [ 'ignore' => true, 'label' => t('Validate Configuration'), 'data-progress-label' => t('Validation In Progress'), 'decorators' => ['ViewHelper'] ] ); $this->addDisplayGroup( ['btn_submit', 'backend_validation'], 'submit_validation', [ 'decorators' => [ 'FormElements', ['HtmlTag', ['tag' => 'div', 'class' => 'control-group form-controls']] ] ] ); return $this; } public static function checkRedis(Form $form): bool { $sections = []; $storage = new TemporaryLocalFileStorage(); foreach (ConfigForm::transformEmptyValuesToNull($form->getValues()) as $sectionAndPropertyName => $value) { if ($value !== null) { list($section, $property) = explode('_', $sectionAndPropertyName, 2); if (in_array($property, ['ca', 'cert', 'key'])) { $storage->create("$property.pem", $value); $value = $storage->resolvePath("$property.pem"); } $sections[$section][$property] = $value; } } $ignoredTextAreas = [ 'ca' => 'redis_ca_pem', 'cert' => 'redis_cert_pem', 'key' => 'redis_key_pem' ]; foreach ($ignoredTextAreas as $name => $textareaName) { if (($textarea = $form->getElement($textareaName)) !== null) { if (($pem = $textarea->getValue())) { if ($storage->has("$name.pem")) { $storage->update("$name.pem", $pem); } else { $storage->create("$name.pem", $pem); $sections['redis'][$name] = $storage->resolvePath("$name.pem"); } } elseif ($storage->has("$name.pem")) { $storage->delete("$name.pem"); unset($sections['redis'][$name]); } } } $moduleConfig = new Config(); $moduleConfig->setSection('redis', $sections['redis']); $redisConfig = new Config(); $redisConfig->setSection('redis1', $sections['redis1'] ?? []); $redisConfig->setSection('redis2', $sections['redis2'] ?? []); try { $redis1 = IcingaRedis::getPrimaryRedis($moduleConfig, $redisConfig); } catch (Exception $e) { $form->warning(sprintf( t('Failed to connect to primary Redis: %s'), $e->getMessage() )); return false; } if (IcingaRedis::getLastIcingaHeartbeat($redis1) === null) { $form->warning(t('Primary connection established but failed to verify Icinga is connected as well.')); return false; } try { $redis2 = IcingaRedis::getSecondaryRedis($moduleConfig, $redisConfig); } catch (Exception $e) { $form->warning(sprintf(t('Failed to connect to secondary Redis: %s'), $e->getMessage())); return false; } if ($redis2 !== null && IcingaRedis::getLastIcingaHeartbeat($redis2) === null) { $form->warning(t('Secondary connection established but failed to verify Icinga is connected as well.')); return false; } $form->info(t('The configuration has been successfully validated.')); return true; } /** * Wraps the given IPL validator class into a callback validator * for usage as the only validator of the element given by name. * * @param string $cls IPL validator class FQN * @param string $element Form element name * @param ?Closure $additionalValidator * * @return array Callback validator */ private function wrapIplValidator(string $cls, string $element, ?Closure $additionalValidator = null): array { return [ 'Callback', false, [ 'callback' => function ($v) use ($cls, $element, $additionalValidator) { if ($additionalValidator !== null) { if (! $additionalValidator($v)) { return false; } } if (! $v) { return true; } $validator = new $cls(); $valid = $validator->isValid($v); if (! $valid) { /** @var Zend_Validate_Callback $callbackValidator */ $callbackValidator = $this->getElement($element)->getValidator('Callback'); $callbackValidator->setMessage( $validator->getMessages()[0], Zend_Validate_Callback::INVALID_VALUE ); } return $valid; } ] ]; } } icingadb-web-1.5.0/application/views/000077500000000000000000000000001527064444300175015ustar00rootroot00000000000000icingadb-web-1.5.0/application/views/scripts/000077500000000000000000000000001527064444300211705ustar00rootroot00000000000000icingadb-web-1.5.0/application/views/scripts/joystickPagination-icingadb.phtml000066400000000000000000000122601527064444300276460ustar00rootroot00000000000000translate('%s: Show %s %u to %u out of %u', 'pagination.joystick'); $flipUrl = clone $baseUrl; if ($flipUrl->getParam('flipped')) { $flipUrl->remove('flipped'); } else { $flipUrl->setParam('flipped'); } if ($flipUrl->hasParam('page')) { $flipUrl->setParam('page', implode(',', array_reverse(explode(',', $flipUrl->getParam('page'))))); } if ($flipUrl->hasParam('limit')) { $flipUrl->setParam('limit', implode(',', array_reverse(explode(',', $flipUrl->getParam('limit'))))); } $yAxisTotalItem = $yAxisPaginator->count(); $yAxisItemCountPerPage = $yAxisPaginator->getLimit() ?? $yAxisTotalItem; $totalYAxisPages = ceil($yAxisTotalItem / $yAxisItemCountPerPage); $currentYAxisPage = round($yAxisPaginator->getOffset() / $yAxisItemCountPerPage) + 1; $prevYAxisPage = $currentYAxisPage > 1 ? $currentYAxisPage - 1 : null; $nextYAxisPage = $currentYAxisPage < $totalYAxisPages ? $currentYAxisPage + 1 : null; $xAxisTotalItem = $xAxisPaginator->count(); $xAxisItemCountPerPage = $xAxisPaginator->getLimit() ?? $xAxisTotalItem; $totalXAxisPages = ceil($xAxisTotalItem / $xAxisItemCountPerPage); $currentXAxisPage = round($xAxisPaginator->getOffset() / $xAxisItemCountPerPage) + 1; $prevXAxisPage = $currentXAxisPage > 1 ? $currentXAxisPage - 1 : null; $nextXAxisPage = $currentXAxisPage < $totalXAxisPages ? $currentXAxisPage + 1 : null; ?> flippable): ?>
  qlink( '', $baseUrl, array( 'page' => $currentXAxisPage . ',' . $prevYAxisPage ), array( 'icon' => 'up-open', 'data-base-target' => '_self', 'title' => sprintf( $showText, $this->translate('Y-Axis', 'pagination.joystick'), $this->translate('hosts', 'pagination.joystick'), ($prevYAxisPage - 1) * $xAxisItemCountPerPage + 1, $prevYAxisPage * $xAxisItemCountPerPage, $yAxisTotalItem ) ) ); ?> icon('up-open'); ?>  
qlink( '', $baseUrl, array( 'page' => $prevXAxisPage . ',' . $currentYAxisPage ), array( 'icon' => 'left-open', 'data-base-target' => '_self', 'title' => sprintf( $showText, $this->translate('X-Axis', 'pagination.joystick'), $this->translate('services', 'pagination.joystick'), ($prevXAxisPage - 1) * $xAxisItemCountPerPage + 1, $prevXAxisPage * $xAxisItemCountPerPage, $xAxisTotalItem ) ) ); ?> icon('left-open'); ?> qlink( '', $flipUrl, null, array( 'icon' => 'arrows-cw', 'data-base-target' => '_self', 'title' => $this->translate('Flip grid axes') ) ) ?>   qlink( '', $baseUrl, array( 'page' => $nextXAxisPage . ',' . $currentYAxisPage ), array( 'icon' => 'right-open', 'data-base-target' => '_self', 'title' => sprintf( $showText, $this->translate('X-Axis', 'pagination.joystick'), $this->translate('services', 'pagination.joystick'), $currentXAxisPage * $xAxisItemCountPerPage + 1, $nextXAxisPage === $totalXAxisPages ? $xAxisItemCountPerPage : $nextXAxisPage * $xAxisItemCountPerPage, $xAxisTotalItem ) ), false ); ?> icon('right-open'); ?>
  qlink( '', $baseUrl, array( 'page' => $currentXAxisPage . ',' . $nextYAxisPage ), array( 'icon' => 'down-open', 'data-base-target' => '_self', 'title' => sprintf( $showText, $this->translate('Y-Axis', 'pagination.joystick'), $this->translate('hosts', 'pagination.joystick'), $currentYAxisPage * $yAxisItemCountPerPage + 1, $nextYAxisPage === $totalYAxisPages ? $yAxisItemCountPerPage : $nextYAxisPage * $yAxisItemCountPerPage, $yAxisTotalItem ) ) ); ?> icon('down-open'); ?>  
icingadb-web-1.5.0/application/views/scripts/services/000077500000000000000000000000001527064444300230135ustar00rootroot00000000000000icingadb-web-1.5.0/application/views/scripts/services/grid-flipped.phtml000066400000000000000000000141001527064444300264230ustar00rootroot00000000000000compact): ?> controls ?>
translate('No services found matching the filter.') ?>
$_) { $serviceFilter->orFilter(Filter::where('service.name', $serviceDescription)); } ?> $hostAlias): ?> $serviceDisplayName): ?> horizontalPaginator->count(); $horizontalItemsPerPage = $this->horizontalPaginator->getLimit() ?? $horizontalTotalItems; $horizontalTotalPages = ceil($horizontalTotalItems / $horizontalItemsPerPage); $verticalTotalItems = $this->verticalPaginator->count(); $verticalItemsPerPage = $this->verticalPaginator->getLimit() ?? $verticalTotalItems; $verticalTotalPages = ceil($verticalTotalItems / $verticalItemsPerPage); if (! $this->compact && $horizontalTotalPages > 1): ?> compact && $verticalTotalPages > 1): ?>
partial( 'joystickPagination-icingadb.phtml', 'default', array( 'flippable' => true, 'baseUrl' => $baseUrl, 'xAxisPaginator' => $horizontalPaginator, 'yAxisPaginator' => $verticalPaginator ) ) ?>
qlink( $this->ellipsis($hostAlias, 24), Url::fromPath('icingadb/services')->addFilter( Filter::matchAll($serviceFilter, Filter::where('host.name', $hostName)) ), null, array('title' => sprintf($this->translate('List all reported services on host %s'), $hostAlias)), false ) ?>
$_) { $hostFilter->orFilter(Filter::where('host.name', $hostName)); } echo $this->qlink( $serviceDisplayName, Url::fromPath('icingadb/services')->addFilter( Filter::matchAll($hostFilter, Filter::where('service.name', $serviceDescription)) ), null, array('title' => sprintf( $this->translate('List all services with the name "%s" on all reported hosts'), $serviceDisplayName )) ); ?> protectId($service->host_name . '_' . $service->name . '_desc') ?> escape($service->state->output) ?> qlink( '', 'icingadb/service', array( 'host.name' => $hostName, 'name' => $serviceDescription ), array( 'aria-describedby' => $ariaDescribedById, 'aria-label' => sprintf( $this->translate('Show detailed information for service %s on host %s'), $service->display_name, $service->host_display_name ), 'class' => 'service-grid-link state-' . $service->state->getStateText() . ($service->state->is_handled ? ' handled' : ''), 'title' => $service->state->output ) ) ?> qlink( $this->translate('Load more'), $baseUrl, array( 'limit' => ($horizontalItemsPerPage + 20) . ',' . $verticalItemsPerPage ), array( 'class' => 'action-link', 'data-base-target' => '_self' ) ) ?>
qlink( $this->translate('Load more'), $baseUrl, array( 'limit' => $horizontalItemsPerPage . ',' . ($verticalItemsPerPage + 20) ), array( 'class' => 'action-link', 'data-base-target' => '_self' ) ) ?>
icingadb-web-1.5.0/application/views/scripts/services/grid.phtml000066400000000000000000000141501527064444300250070ustar00rootroot00000000000000compact): ?> controls ?>
translate('No services found matching the filter.') ?>
$_) { $hostFilter->orFilter(Filter::where('host.name', $hostName)); } ?> $serviceDisplayName):?> $hostDisplayName): ?> horizontalPaginator->count(); $horizontalItemsPerPage = $this->horizontalPaginator->getLimit() ?? $horizontalTotalItems; $horizontalTotalPages = ceil($horizontalTotalItems / $horizontalItemsPerPage); $verticalTotalItems = $this->verticalPaginator->count(); $verticalItemsPerPage = $this->verticalPaginator->getLimit() ?? $verticalTotalItems; $verticalTotalPages = ceil($verticalTotalItems / $verticalItemsPerPage); if (! $this->compact && $horizontalTotalPages > 1): ?> compact && $verticalTotalPages > 1): ?>
partial( 'joystickPagination-icingadb.phtml', 'default', array( 'flippable' => true, 'baseUrl' => $baseUrl, 'xAxisPaginator' => $horizontalPaginator, 'yAxisPaginator' => $verticalPaginator ) ); ?>
qlink( $this->ellipsis($serviceDisplayName, 24), Url::fromPath('icingadb/services')->addFilter( Filter::matchAll($hostFilter, Filter::where('service.name', $serviceDescription)) ), null, array('title' => sprintf( $this->translate('List all services with the name "%s" on all reported hosts'), $serviceDisplayName )), false ) ?>
$_) { $serviceFilter->orFilter(Filter::where('service.name', $serviceName)); } echo $this->qlink( $hostDisplayName, Url::fromPath('icingadb/services')->addFilter( Filter::matchAll($serviceFilter, Filter::where('host.name', $hostName)) ), null, array('title' => sprintf($this->translate('List all reported services on host %s'), $hostDisplayName)) ); ?> protectId($service->host_name . '_' . $service->name . '_desc') ?> escape($service->state->output) ?> qlink( '', 'icingadb/service', array( 'host.name' => $hostName, 'name' => $serviceDescription ), array( 'aria-describedby' => $ariaDescribedById, 'aria-label' => sprintf( $this->translate('Show detailed information for service %s on host %s'), $service->display_name, $service->host_display_name ), 'class' => 'service-grid-link state-' . $service->state->getStateText() . ($service->state->is_handled ? ' handled' : ''), 'title' => $service->state->output ) ) ?> qlink( $this->translate('Load more'), $baseUrl, array( 'limit' => ( $horizontalItemsPerPage + 20) . ',' . $verticalItemsPerPage ), array( 'class' => 'action-link', 'data-base-target' => '_self' ) ) ?>
qlink( $this->translate('Load more'), $baseUrl, array( 'limit' => $horizontalItemsPerPage . ',' . ($verticalItemsPerPage + 20) ), array( 'class' => 'action-link', 'data-base-target' => '_self' ) ) ?>
icingadb-web-1.5.0/configuration.php000066400000000000000000000543641527064444300174350ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb { use Icinga\Application\Icinga; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Web\Navigation\Renderer\HostProblemsBadge; use Icinga\Module\Icingadb\Web\Navigation\Renderer\ServiceProblemsBadge; use Icinga\Util\StringHelper; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; /** @var \Icinga\Application\Modules\Module $this */ $auth = Auth::getInstance(); $authenticated = Icinga::app()->isWeb() && $auth->isAuthenticated(); $this->provideSetupWizard('Icinga\Module\Icingadb\Setup\IcingaDbWizard'); $this->providePermission( 'icingadb/command/*', $this->translate('Allow all commands') ); $this->providePermission( 'icingadb/command/schedule-check', $this->translate('Allow to schedule host and service checks') ); $this->providePermission( 'icingadb/command/schedule-check/active-only', $this->translate('Allow to schedule host and service checks (Only on objects with active checks enabled)') ); $this->providePermission( 'icingadb/command/acknowledge-problem', $this->translate('Allow to acknowledge host and service problems') ); $this->providePermission( 'icingadb/command/remove-acknowledgement', $this->translate('Allow to remove problem acknowledgements') ); $this->providePermission( 'icingadb/command/comment/*', $this->translate('Allow to add and delete host and service comments') ); $this->providePermission( 'icingadb/command/comment/add', $this->translate('Allow to add host and service comments') ); $this->providePermission( 'icingadb/command/comment/delete', $this->translate('Allow to delete host and service comments') ); $this->providePermission( 'icingadb/command/downtime/*', $this->translate('Allow to schedule and delete host and service downtimes') ); $this->providePermission( 'icingadb/command/downtime/schedule', $this->translate('Allow to schedule host and service downtimes') ); $this->providePermission( 'icingadb/command/downtime/delete', $this->translate('Allow to delete host and service downtimes') ); $this->providePermission( 'icingadb/command/process-check-result', $this->translate('Allow to process host and service check results') ); $this->providePermission( 'icingadb/command/feature/instance', $this->translate('Allow to toggle instance-wide features') ); $this->providePermission( 'icingadb/command/feature/object/*', $this->translate('Allow to toggle all features on host and service objects') ); $this->providePermission( 'icingadb/command/feature/object/active-checks', $this->translate('Allow to toggle active checks on host and service objects') ); $this->providePermission( 'icingadb/command/feature/object/passive-checks', $this->translate('Allow to toggle passive checks on host and service objects') ); $this->providePermission( 'icingadb/command/feature/object/notifications', $this->translate('Allow to toggle notifications on host and service objects') ); $this->providePermission( 'icingadb/command/feature/object/event-handler', $this->translate('Allow to toggle event handlers on host and service objects') ); $this->providePermission( 'icingadb/command/feature/object/flap-detection', $this->translate('Allow to toggle flap detection on host and service objects') ); $this->providePermission( 'icingadb/command/send-custom-notification', $this->translate('Allow to send custom notifications for hosts and services') ); $this->providePermission( 'icingadb/notifications/subscribe', $this->translate( 'Allow to subscribe to host and service problems and receive their notifications.' . ' Requires the Icinga Notifications component with a contact configured for the user' ) ); $this->providePermission( 'icingadb/notifications/usage', $this->translate( 'Allow general access to the Icinga Notifications integration.' . ' Permits to see recipients, alerts and changes how acknowledgements are handled.' . ' See our documentation for more information.' ) ); $this->providePermission( 'icingadb/object/show-source', $this->translate('Allow to view an object\'s source data. (May contain sensitive data!)') ); $this->provideRestriction( 'icingadb/filter/objects', $this->translate('Restrict access to the Icinga objects that match the filter') ); $this->provideRestriction( 'icingadb/filter/hosts', $this->translate('Restrict access to the Icinga hosts and services that match the filter') ); $this->provideRestriction( 'icingadb/filter/services', $this->translate('Restrict access to the Icinga services that match the filter') ); $this->provideRestriction( 'icingadb/filter/alerts', $this->translate('Restrict access to the Icinga alerts that match the filter') ); $this->provideRestriction( 'icingadb/denylist/routes', $this->translate('Prevent access to routes that are part of the list') ); $this->provideRestriction( 'icingadb/denylist/variables', $this->translate('Hide custom variables of Icinga objects that are part of the list') ); $this->provideRestriction( 'icingadb/protect/variables', $this->translate('Obfuscate custom variable values of Icinga objects that are part of the list') ); if (! $this::exists('monitoring') || ($authenticated && ! $auth->getUser()->can('module/monitoring'))) { $routeDenylist = []; if ($authenticated && ! $auth->getUser()->isUnrestricted()) { // The empty array is for PHP pre 7.4, older versions require at least a single param for array_merge $routeDenylist = array_flip(array_merge([], ...array_map(function ($restriction) { return StringHelper::trimSplit($restriction); }, $auth->getRestrictions('icingadb/denylist/routes')))); } /* * Available navigation items */ $this->provideNavigationItem('icingadb-host-action', $this->translate('Host Action')); $this->provideNavigationItem('icingadb-service-action', $this->translate('Service Action')); /** * Search urls */ $this->provideSearchUrl( $this->translate('Tactical Overview'), 'icingadb/tactical', 100 ); $this->provideSearchUrl( $this->translate('Hosts'), 'icingadb/hosts?sort=host.state.severity&limit=10', 99 ); $this->provideSearchUrl( $this->translate('Services on Hosts'), 'icingadb/services?sort=service.state.severity&limit=10&_hostFilterOnly', 98 ); $this->provideSearchUrl( $this->translate('Services'), 'icingadb/services?sort=service.state.severity&limit=10', 97 ); if (! array_key_exists('hostgroups', $routeDenylist)) { $this->provideSearchUrl( $this->translate('Hostgroups'), 'icingadb/hostgroups?limit=10', 96 ); } if (! array_key_exists('servicegroups', $routeDenylist)) { $this->provideSearchUrl( $this->translate('Servicegroups'), 'icingadb/servicegroups?limit=10', 95 ); } /** * Current Incidents */ $dashboard = $this->dashboard(N_('Current Incidents'), ['priority' => 50]); $dashboard->add( N_('Service Problems'), 'icingadb/services?service.state.is_problem=y' . '&view=minimal&limit=32&sort=service.state.severity desc', 100 ); $dashboard->add( N_('Recently Recovered Services'), 'icingadb/services?service.state.soft_state=0' . '&view=minimal&limit=32&sort=service.state.last_state_change desc', 110 ); $dashboard->add( N_('Host Problems'), 'icingadb/hosts?host.state.is_problem=y' . '&view=minimal&limit=32&sort=host.state.severity desc', 120 ); /** * Overdue */ $dashboard = $this->dashboard(N_('Overdue'), ['priority' => 70]); $dashboard->add( N_('Late Host Check Results'), 'icingadb/hosts?host.state.is_overdue=y' . '&view=minimal&limit=15&sort=host.state.severity desc', 100 ); $dashboard->add( N_('Late Service Check Results'), 'icingadb/services?service.state.is_overdue=y' . '&view=minimal&limit=15&sort=service.state.severity desc', 110 ); $dashboard->add( N_('Acknowledgements Active For At Least Three Days'), 'icingadb/comments?comment.entry_type=ack&comment.entry_time<-3 days' . '&view=minimal&limit=15&sort=comment.entry_time', 120 ); $dashboard->add( N_('Downtimes Active For At Least Three Days'), 'icingadb/downtimes?downtime.is_in_effect=y&downtime.scheduled_start_time<-3 days' . '&view=minimal&limit=15&sort=downtime.start_time', 130 ); /** * Muted */ $dashboard = $this->dashboard(N_('Muted'), ['priority' => 80]); $dashboard->add( N_('Disabled Service Notifications'), 'icingadb/services?service.notifications_enabled=n' . '&view=minimal&limit=15&sort=service.state.severity desc', 100 ); $dashboard->add( N_('Disabled Host Notifications'), 'icingadb/hosts?host.notifications_enabled=n' . '&view=minimal&limit=15&sort=host.state.severity desc', 110 ); $dashboard->add( N_('Disabled Service Checks'), 'icingadb/services?service.active_checks_enabled=n' . '&view=minimal&limit=15&sort=service.state.last_state_change', 120 ); $dashboard->add( N_('Disabled Host Checks'), 'icingadb/hosts?host.active_checks_enabled=n' . '&view=minimal&limit=15&sort=host.state.last_state_change', 130 ); $dashboard->add( N_('Acknowledged Problem Services'), 'icingadb/services?service.state.is_acknowledged!=n&service.state.is_problem=y' . '&view=minimal&limit=15&sort=service.state.severity desc', 140 ); $dashboard->add( N_('Acknowledged Problem Hosts'), 'icingadb/hosts?host.state.is_acknowledged!=n&host.state.is_problem=y' . '&view=minimal&limit=15&sort=host.state.severity desc', 150 ); /** * @var \Icinga\Application\Modules\Module $this * * Problems section in case monitoring is disabled */ $problemSection = $this->menuSection(N_('Problems'), [ 'renderer' => array( 'TotalProblemsBadge', 'state' => 'critical' ), 'icon' => 'attention-circled', 'priority' => 20 ]); $problemSection->add(N_('Host Problems'), [ 'renderer' => (new HostProblemsBadge())->disableLink(), 'icon' => 'server', 'description' => $this->translate('List current host problems'), 'url' => 'icingadb/hosts?host.state.is_problem=y' . '&sort=host.state.severity desc', 'priority' => 50 ]); $problemSection->add(N_('Service Problems'), [ 'renderer' => (new ServiceProblemsBadge())->disableLink(), 'icon' => 'cog', 'description' => $this->translate('List current service problems'), 'url' => 'icingadb/services?service.state.is_problem=y' . '&sort=service.state.severity desc', 'priority' => 60 ]); $problemSection->add(N_('Service Grid'), [ 'icon' => 'cogs', 'description' => $this->translate('Display service problems as grid'), 'url' => 'icingadb/services/grid?problems', 'priority' => 70 ]); $problemSection->add(N_('Current Downtimes'), [ 'description' => $this->translate('List current downtimes'), 'url' => 'icingadb/downtimes?downtime.is_in_effect=y', 'priority' => 80, 'icon' => 'plug' ]); /** * @var \Icinga\Application\Modules\Module $this * * Overview section in case monitoring is disabled */ $overviewSection = $this->menuSection('Overview', [ 'icon' => 'binoculars', 'priority' => 30 ]); $overviewSection->add(N_('Tactical Overview'), [ 'url' => 'icingadb/tactical', 'description' => $this->translate('Open tactical overview'), 'priority' => 40, 'icon' => 'chart-pie' ]); $overviewSection->add(N_('Hosts'), [ 'priority' => 50, 'description' => $this->translate('List hosts'), 'url' => 'icingadb/hosts', 'icon' => 'server' ]); $overviewSection->add(N_('Services'), [ 'priority' => 60, 'description' => $this->translate('List services'), 'url' => 'icingadb/services', 'icon' => 'cog' ]); if (! array_key_exists('hostgroups', $routeDenylist)) { $overviewSection->add(N_('Host Groups'), [ 'description' => $this->translate('List host groups'), 'url' => 'icingadb/hostgroups', 'priority' => 70, 'icon' => 'network-wired' ]); } if (! array_key_exists('servicegroups', $routeDenylist)) { $overviewSection->add(N_('Service Groups'), [ 'description' => $this->translate('List service groups'), 'url' => 'icingadb/servicegroups', 'priority' => 80, 'icon' => 'cogs' ]); } if (! array_key_exists('contactgroups', $routeDenylist)) { $overviewSection->add(N_('Contact Groups'), [ 'description' => $this->translate('List contact groups'), 'url' => 'icingadb/contactgroups', 'priority' => 90, 'icon' => 'users' ]); } if (! array_key_exists('contacts', $routeDenylist)) { $overviewSection->add(N_('Contacts'), [ 'description' => $this->translate('List contacts'), 'url' => 'icingadb/contacts', 'priority' => 100, 'icon' => 'user-friends' ]); } $overviewSection->add(N_('Comments'), [ 'url' => 'icingadb/comments', 'description' => $this->translate('List comments'), 'priority' => 110, 'icon' => 'comments' ]); $overviewSection->add(N_('Downtimes'), [ 'url' => 'icingadb/downtimes', 'description' => $this->translate('List downtimes'), 'priority' => 120, 'icon' => 'plug' ]); /** * @var \Icinga\Application\Modules\Module $this * * History section in case monitoring is disabled */ $section = $this->menuSection(N_('History'), array( 'icon' => 'history', 'priority' => 90 )); $section->add(N_('Notifications'), array( 'icon' => 'bell', 'description' => $this->translate('List notifications'), 'priority' => 20, 'url' => 'icingadb/notifications', )); $section->add(N_('Event Overview'), array( 'icon' => 'history', 'description' => $this->translate('Open event overview'), 'priority' => 30, 'url' => 'icingadb/history' )); } else { /* * Available navigation items */ $this->provideNavigationItem( 'icingadb-host-action', $this->translate('Host Action') . ' (Icinga DB)' ); $this->provideNavigationItem( 'icingadb-service-action', $this->translate('Service Action') . ' (Icinga DB)' ); /** @var \Icinga\Application\Modules\Module $this */ $section = $this->menuSection('Icinga DB', [ 'icon' => 'database', 'priority' => 30 ]); $section->add(N_('Tactical Overview'), [ 'url' => 'icingadb/tactical', 'priority' => 10, 'description' => $this->translate('Open tactical overview'), 'icon' => 'chart-pie' ]); $section->add(N_('Hosts'), [ 'priority' => 20, 'description' => $this->translate('List hosts'), 'renderer' => 'HostProblemsBadge', 'url' => 'icingadb/hosts', 'icon' => 'server' ]); $section->add(N_('Services'), [ 'priority' => 30, 'description' => $this->translate('List services'), 'renderer' => 'ServiceProblemsBadge', 'url' => 'icingadb/services', 'icon' => 'cog' ]); $section->add(N_('Service Grid'), [ 'icon' => 'cog', 'description' => $this->translate('Display service problems as grid'), 'url' => 'icingadb/services/grid?problems', 'priority' => 40 ]); $routeDenylist = []; if ($authenticated && ! $auth->getUser()->isUnrestricted()) { // The empty array is for PHP pre 7.4, older versions require at least a single param for array_merge $routeDenylist = array_flip(array_merge([], ...array_map(function ($restriction) { return StringHelper::trimSplit($restriction); }, $auth->getRestrictions('icingadb/denylist/routes')))); } if (! array_key_exists('hostgroups', $routeDenylist)) { $section->add(N_('Host Groups'), [ 'url' => 'icingadb/hostgroups', 'priority' => 50, 'description' => $this->translate('List host groups'), 'icon' => 'network-wired' ]); } if (! array_key_exists('servicegroups', $routeDenylist)) { $section->add(N_('Service Groups'), [ 'url' => 'icingadb/servicegroups', 'priority' => 60, 'description' => $this->translate('List service groups'), 'icon' => 'cogs' ]); } if (! array_key_exists('contactgroups', $routeDenylist)) { $section->add(N_('Contact Groups'), [ 'url' => 'icingadb/contactgroups', 'priority' => 70, 'description' => $this->translate('List contact groups'), 'icon' => 'users' ]); } if (! array_key_exists('contacts', $routeDenylist)) { $section->add(N_('Contacts'), [ 'url' => 'icingadb/contacts', 'priority' => 80, 'description' => $this->translate('List contacts'), 'icon' => 'user-friends' ]); } $section->add(N_('Comments'), [ 'url' => 'icingadb/comments', 'priority' => 90, 'description' => $this->translate('List comments'), 'icon' => 'comments' ]); $section->add(N_('Downtimes'), [ 'url' => 'icingadb/downtimes', 'priority' => 100, 'description' => $this->translate('List downtimes'), 'icon' => 'plug' ]); $section->add(N_('Notifications'), [ 'url' => 'icingadb/notifications', 'priority' => 110, 'description' => $this->translate('List notifications'), 'icon' => 'bell' ]); $section->add(N_('History'), [ 'url' => 'icingadb/history', 'priority' => 120, 'description' => $this->translate('List history'), 'icon' => 'history' ]); } $this->provideConfigTab('general-settings', [ 'label' => t('General Settings'), 'title' => t('Configure general settings'), 'url' => 'config/general-settings' ]); $this->provideConfigTab('redis', [ 'label' => t('Redis'), 'title' => t('Configure the Redis connections'), 'url' => 'config/redis' ]); $this->provideConfigTab('command-transports', [ 'label' => t('Command Transports'), 'title' => t('Configure command transports'), 'url' => 'command-transport' ]); $cssDirectory = $this->getCssDir(); $cssFiles = new RecursiveIteratorIterator(new RecursiveDirectoryIterator( $cssDirectory, RecursiveDirectoryIterator::CURRENT_AS_PATHNAME | RecursiveDirectoryIterator::SKIP_DOTS )); foreach ($cssFiles as $path) { $this->provideCssFile(ltrim(substr($path, strlen($cssDirectory)), DIRECTORY_SEPARATOR)); } $this->provideJsFile('action-list.js'); $this->provideJsFile('loadmore.js'); $this->provideJsFile('progress-bar.js'); $this->provideJsFile('timestamp-toggle.js'); } icingadb-web-1.5.0/doc/000077500000000000000000000000001527064444300146065ustar00rootroot00000000000000icingadb-web-1.5.0/doc/01-About.md000066400000000000000000000050061527064444300164210ustar00rootroot00000000000000# Icinga DB Web Icinga DB is a set of components for publishing, synchronizing and visualizing monitoring data in the Icinga ecosystem, consisting of: * Icinga DB Web which connects to both a Redis®[\*](TRADEMARKS.md#redis) server and a database to view and work with monitoring data * Icinga 2 with its [Icinga DB feature](https://icinga.com/docs/icinga-2/latest/doc/14-features/#icinga-db) enabled, responsible for publishing monitoring configuration, check results, states changes and history items to the Redis® server * And the [Icinga DB daemon](https://icinga.com/docs/icinga-db/latest/doc/01-About/), which synchronizes monitoring data between the Redis® server and the database ![Icinga DB Architecture](res/icingadb-architecture.png) ## Features Icinga DB Web offers a modern and streamlined design to provide a clear and concise overview of your monitoring environment, also with dark and light mode support. ![Icinga DB Dashboard](res/icingadb-dashboard.png) ### Various List Layouts The view switcher allows to control the level of detail displayed in host and service list views: ![View Switcher Preview](res/view-switcher-preview.png) ### Search with Autocomplete The search bar in list views can be used for everything from simple searches to creating complex filters. It allows full keyboard control and also supports contextual auto-completion. In addition, there is an editor for easier filter creation. ![Searchbar Completion Preview](res/searchbar-completion-preview.png) ### Clean Detail Views Host and service detail views are structured to make best use of available space. Related information is grouped and important information is at the top for instant access without having to scroll down. ![Service Detail Preview](res/service-detail-preview.png) ### Modal Dialogs Any interaction that requires user input, such as acknowledging problems, scheduling downtimes, etc., shows a modal dialog over the current view to preserve context and focus on interaction. ![Modal Dialog Preview](res/modal-dialog-preview.png) ### Bulk Operations Bulk interactions such as scheduling downtimes for multiple objects, acknowledging multiple problems, etc. are easily accomplished with the `Continue With` control that operates on filtered lists. ![Continue With Preview](res/continue-with-preview.png) ## Installation To install Icinga DB Web see [Installation](02-Installation.md). ## License Icinga DB Web and the Icinga DB Web documentation are licensed under the terms of the GNU General Public License Version 3. icingadb-web-1.5.0/doc/02-Installation.md000066400000000000000000000022111527064444300200040ustar00rootroot00000000000000 # Installing Icinga DB Web The recommended way to install Icinga DB Web is to use prebuilt packages for all supported platforms from our official release repository. Please follow the steps listed for your target operating system, which guide you through setting up the repository and installing Icinga DB Web. To upgrade an existing Icinga DB Web installation to a newer version, see the [Upgrading](05-Upgrading.md) documentation for the necessary steps. ![Icinga DB Web](res/icingadb-web.png) Before installing Icinga DB Web, make sure you have installed the [Icinga DB daemon](https://icinga.com/docs/icinga-db/latest/doc/02-Installation/). ## Installing the Package If the [repository](https://packages.icinga.com) is not configured yet, please add it first. Then use your distribution's package manager to install the `icingadb-web` package or install [from source](02-Installation.md.d/From-Source.md). This concludes the installation. Now proceed with the [configuration](03-Configuration.md). icingadb-web-1.5.0/doc/02-Installation.md.d/000077500000000000000000000000001527064444300203075ustar00rootroot00000000000000icingadb-web-1.5.0/doc/02-Installation.md.d/From-Source.md000066400000000000000000000014141527064444300227720ustar00rootroot00000000000000# Installing Icinga DB Web from Source Please see the Icinga Web documentation on [how to install modules](https://icinga.com/docs/icinga-web-2/latest/doc/08-Modules/#installation) from source. Make sure you use `icingadb` as the module name. The following requirements must also be met. ### Requirements * PHP ≥ 8.2 * MySQL or PostgreSQL PDO PHP libraries * The following PHP modules must be installed: `cURL`, `dom`, `json`, `libxml` * [Icinga DB](https://github.com/Icinga/icingadb) ≥ 1.4 * [Icinga Web 2](https://github.com/Icinga/icingaweb2) ≥ 2.12.5 * [Icinga PHP Library (ipl)](https://github.com/Icinga/icinga-php-library) ≥ 1.2.0 * [Icinga PHP Thirdparty](https://github.com/Icinga/icinga-php-thirdparty) ≥ 1.1.0 icingadb-web-1.5.0/doc/03-Configuration.md000066400000000000000000000324351527064444300201660ustar00rootroot00000000000000# Configuration If Icinga Web has been installed but not yet set up, please visit Icinga Web and follow the web-based setup wizard. For Icinga Web setups already running, log in to Icinga Web with a privileged user and follow the steps below to configure Icinga DB Web: If you have previously used the monitoring module, there is an option to [migrate](10-Migration.md) some settings. ## Database Configuration Connection configuration for the database to which Icinga DB synchronizes monitoring data. 1. Create a new resource for the Icinga DB database via the `Configuration → Application → Resources` menu. 2. Configure the resource you just created as the database connection for the Icinga DB Web module using the `Configuration → Modules → icingadb → General Settings` menu. This configuration is stored in `/etc/icingaweb2/modules/icingadb/config.ini`. The `resource` option must match the name of the database resource you created for the Icinga DB database, for example: ``` [icingadb] resource = "icingadb" ``` If you use MySQL or MariaDB and notice poor performance for history queries, you can also disable the query optimizer for these queries in the same section: ``` [icingadb] ... disable_optimizer_for_history_queries = 1 ``` This adds hints to disable the optimizer for history queries and may improve performance on some MySQL/MariaDB versions. ## Icinga Notifications Configuration !!! info Icinga DB v1.6.0 and Icinga DB Web 1.5.0 can act together as an integration for [Icinga Notifications](https://icinga.com/docs/icinga-notifications/latest/). ### Quick Setup Head to `Configuration → Modules → icingadb → General Settings` to configure the Icinga Notifications integration. Icinga DB Web allows to set up Icinga Notifications in Icinga DB with a single click, if both are installed on the same system. In this case, Icinga DB Web configures Icinga DB, using the database you chose as described above, to connect to Icinga Notifications via an automatically discovered unix socket. An accompanying source is also automatically set up in Icinga Notifications, and will appear read-only in this case in order to keep authority with Icinga DB Web to ensure both services, Icinga DB and Icinga Notifications, can communicate seamlessly. Speaking of seamless communication, the same view allows you to configure the so-called default relations. Each time Icinga Notifications receives an event, it evaluates event rule filters in order to verify it *can* match them. If not, because a condition references a missing column, it rejects the event and tells the source what is missing and expects it to re-submit the same event again. Here, *default relations* come into play, as they tell Icinga DB to always include certain details with each event upfront. If you regularly use custom variables or service groups in event rule filters, this enhances the efficiency of the event transmission from Icinga DB to Icinga Notifications. !!! tip If you notice increasing times between an occurring problem and an alert in high load environments, review your event rules and identify repetitive conditions and set default relations accordingly. Though, be aware that this may also consume higher bandwidth in cases where e.g. huge amounts of custom variables are part of every event. In such a case, not defining default relations may be the better choice. Both settings are stored in the database. For local configuration, see: [Icinga DB's documentation](https://icinga.com/docs/icinga-db/latest/doc/03-Configuration/#notifications-configuration) ### General Usage !!! info Functionality described here requires the permission [`icingadb/notifications/usage`](04-Security.md#permissions). Icinga DB will embed alerts, sent by Icinga Notifications, into the event overview and object histories. You may want to restrict users to only see alerts they are of interest to them. This is what the restriction [`icingadb/filter/alerts`](04-Security.md#restrictions) is for. Host and service problems that are tracked by Icinga Notifications can be subscribed to, if the permission `icingadb/notifications/subscribe` is granted. A subscriber receives their notifications without being responsible for them. A user who acknowledges such a problem becomes a manager of its incident in Icinga Notifications, which suppresses notifications to anyone else who did not explicitly subscribe. The acknowledgement remains until the host or service recovers. The *Send Notification*, *Sticky Acknowledgement* and *Use Expire Time* options of the acknowledgement form are therefore not shown in this case. !!! tip We recommend to grant `icingadb/notifications/usage` only after you are confident Icinga Notifications is fully set up. Configure contacts and event rules and verify that problems are tracked as expected. Make sure users only see what they are authorized for, this applies to each recipient's name as well as the sent alerts. ## Redis® Configuration Connection configuration for the Redis® server where Icinga 2 writes check results. This data is used to display the latest state information in Icinga DB Web. 1. Configure the connection to the Redis® server through the `Configuration → Modules → icingadb → Redis` menu. !!! info If you are running a high-availability Icinga 2 setup, also configure the secondary master's Redis® connection details. Icinga DB Web then uses this connection if the primary one is not available. ## Command Transport Configuration In order to acknowledge problems, force checks, schedule downtimes, etc., Icinga DB Web needs access to the Icinga 2 API. For this you need an `ApiUser` object with at least the following permissions on the Icinga 2 side: * `actions/*` * `objects/query/*` * `objects/modify/*` * `status/query` !!! tip For single-node setups it is recommended to manage API credentials in the `/etc/icinga2/conf.d/api-users.conf` file. If you are running a high-availability Icinga 2 setup, please manage the credentials in the master zone. 1. Please add the following Icinga 2 configuration and change the password accordingly: ``` object ApiUser "icingadb-web" { password = "CHANGEME" permissions = [ "actions/*", "objects/modify/*", "objects/query/*", "status/query" ] } ``` 2. Restart Icinga 2 for these changes to take effect. 3. Then configure a command transport for Icinga DB Web using the credentials you just created via the `Configuration → Modules → icingadb → Command Transports` menu. !!! info If you are running a high-availability Icinga 2 setup, also configure the secondary master's API command transport. Icinga DB Web then uses this transport if the primary one is not available. ## General Configuration You can adjust some default values of options users have while interacting with particular dialogs in the UI. (e.g. While acknowledging a problem) These options can not be adjusted in the UI directly, but have to be set in the configuration file `/etc/icingaweb2/modules/icingadb/config.ini`. ### Available Settings and defaults | Option | Description | Default | |-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------| | acknowledge_comment_text | Sets the value for "Comment" in the Acknowledgement dialog | "" | | acknowledge_expire | Toggles "Use Expire Time" in the Acknowledgement dialog. | **0 (false)** | | acknowledge_expire_time | Sets the value for "Expire Time" in the Acknowledgement dialog. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **1 hour (PT1H)**. | | acknowledge_notify | Toggles "Send Notification" in the Acknowledgement dialog. | **1 (true)** | | acknowledge_persistent | Toggles "Persistent Comment" in the Acknowledgement dialog. | **0 (false)** | | acknowledge_sticky | Toggles "Sticky Acknowledgement" in the Acknowledgement dialog. | **0 (false)** | | comment_expire | Toggles "Use Expire Time" in the Comment dialog. | **0 (false)** | | hostdowntime_comment_text | Sets the value for "Comment" in the Host Downtime dialog | "" | | servicedowntime_comment_text | Sets the value for "Comment" in the Service Downtime dialog. | "" | | comment_expire_time | Sets the value for "Expire Time" in the Comment dialog. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **1 hour (PT1H)** | | custom_notification_forced | Toggles "Forced" in the Custom Notification dialog. | **0 (false)** | | hostdowntime_all_services | Toggles "All Services" in the Schedule Host Downtime dialog. | **0 (false)** | | hostdowntime_end_fixed | Sets the value for "End Time" in the Schedule Host Downtime dialog for a **Fixed** downtime. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **1 hour (PT1H)**. | | hostdowntime_end_flexible | Sets the value for "End Time" in the Schedule Host Downtime dialog for a **Flexible** downtime. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **2 hours (PT2H)**. | | hostdowntime_flexible_duration | Sets the value for "Flexible Duration" in the Schedule Host Downtime dialog for a **Flexible** downtime. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **2 hour (PT2H)**. | | servicedowntime_end_fixed | Sets the value for "End Time" in the Schedule Service Downtime dialog for a **Fixed** downtime. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **1 hour (PT1H)**. | | servicedowntime_end_flexible | Sets the value for "End Time" in the Schedule Service Downtime dialog for a **Flexible** downtime. It is calculated as now + this setting. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **1 hour (PT1H)**. | | servicedowntime_flexible_duration | Sets the value for "Flexible Duration" in the Schedule Service Downtime dialog for a **Flexible** downtime. Format is a [PHP Dateinterval](http://www.php.net/manual/en/dateinterval.construct.php). | **2 hour (PT2H)**. | | plugin_output_character_limit | Sets the maximum number of characters to display in plugin output. | **10000** | ### Example Setting acknowledgements with 2 hours expire time by default. ``` [settings] acknowledge_expire = 1 acknowledge_expire_time = PT2H ``` ## Security To grant users permissions to run commands and restrict them to specific views, see the [Security](04-Security.md) documentation for the necessary steps. icingadb-web-1.5.0/doc/04-Security.md000066400000000000000000000230431527064444300171620ustar00rootroot00000000000000# Security Icinga DB Web allows users to send commands to Icinga. Users may be restricted to a specific set of commands, by use of **permissions**. The same applies to routes, objects and variables. To these, users can be restricted by use of **restrictions**. ## Permissions !!! info If a role [limits users](#filters) to a specific set of results, the command and `icingadb/notifications/subscribe` permissions or refusals of the very same role only apply to these results. | Name | Allow... | |------------------------------------------------|----------------------------------------------------------------------------------| | icingadb/command/* | all commands | | icingadb/command/schedule-check | to schedule host and service checks | | icingadb/command/schedule-check/active-only | to schedule host and service checks (Only on objects with active checks enabled) | | icingadb/command/acknowledge-problem | to acknowledge host and service problems | | icingadb/command/remove-acknowledgement | to remove problem acknowledgements | | icingadb/command/comment/* | to add and delete host and service comments | | icingadb/command/comment/add | to add host and service comments | | icingadb/command/comment/delete | to delete host and service comments | | icingadb/command/downtime/* | to schedule and delete host and service downtimes | | icingadb/command/downtime/schedule | to schedule host and service downtimes | | icingadb/command/downtime/delete | to delete host and service downtimes | | icingadb/command/process-check-result | to process host and service check results | | icingadb/command/feature/instance | to toggle instance-wide features | | icingadb/command/feature/object/* | to toggle all features on host and service objects | | icingadb/command/feature/object/active-checks | to toggle active checks on host and service objects | | icingadb/command/feature/object/passive-checks | to toggle passive checks on host and service objects | | icingadb/command/feature/object/notifications | to toggle notifications on host and service objects | | icingadb/command/feature/object/event-handler | to toggle event handlers on host and service objects | | icingadb/command/feature/object/flap-detection | to toggle flap detection on host and service objects | | icingadb/command/send-custom-notification | to send custom notifications for hosts and services | | icingadb/object/show-source | to view an object's source data. (May contain sensitive data!) | The following permissions are available to allow users access to the Icinga Notifications integration. They additionally require a contact configured for the user in Icinga Notifications. For users without a matching contact, the _Acknowledge_ or _Subscribe_ action will be shown, but disabled with a hint explaining the reason. | Name | Allow... | |----------------------------------|---------------------------------------------------------------------------| | icingadb/notifications/usage | general access to the Icinga Notifications integration | | icingadb/notifications/subscribe | to subscribe to host and service problems and receive their notifications | `icingadb/notifications/usage`'s *general access* means that it permits to see Icinga Notification recipients in a host's or service's detail and sent alerts in the respective history. It also controls whether the *Acknowledge* action allows to set an expiry date or to create non-sticky acknowledgements. ## Restrictions ### Filters Filters limit users to a specific set of results. !!! info Filters from multiple roles will widen available access. | Name | Description | |--------------------------|------------------------------------------------------------------------| | icingadb/filter/objects | Restrict access to the Icinga objects that match the filter | | icingadb/filter/hosts | Restrict access to the Icinga hosts and services that match the filter | | icingadb/filter/services | Restrict access to the Icinga services that match the filter | | icingadb/filter/alerts | Restrict access to the Icinga alerts that match the filter | `icingadb/filter/objects` will only allow users to access matching objects. This applies to all objects, not just hosts or services. It should be one or more [filter expressions](#filter-expressions). `icingadb/filter/hosts` will only allow users to access matching hosts and services. Other objects remain unrestricted. It should be one or more [filter expressions](#filter-expressions). `icingadb/filter/services` will only allow users to access matching services. Other objects remain unrestricted. It should be one or more [filter expressions](#filter-expressions). `icingadb/filter/alerts` will only allow users to access matching alerts as part of either the event overview or host/service history. Other history remains unrestricted. It should be one or more [filter expressions](#filter-expressions). ### Denylists Denylists prevent users from accessing information and in some cases will block them entirely from it. !!! info Denylists from multiple roles will further limit access. | Name | Description | |-----------------------------|-------------------------------------------------------------------| | icingadb/denylist/routes | Prevent access to routes that are part of the list | | icingadb/denylist/variables | Hide custom variables of Icinga objects that are part of the list | `icingadb/denylist/routes` will block users from accessing defined routes and from related information elsewhere. For example, if `hostgroups` are part of the list a user won't have access to the hostgroup overview nor to a host's groups shown in its detail area. This should be a comma-separated list. Possible values are: hostgroups, servicegroups, contacts, contactgroups `icingadb/denylist/variables` will block users from accessing certain custom variables. A user affected by this won't see that those variables even exist. This should be a comma-separated list of [variable paths](#variable-paths). It is possible to use [match patterns](#match-patterns). ### Protections Protections prevent users from accessing actual data. They will know that there is something, but not what exactly. !!! info Protections from multiple roles will further limit access. | Name | Description | |----------------------------|------------------------------------------------------------------------------| | icingadb/protect/variables | Obfuscate custom variable values of Icinga objects that are part of the list | `icingadb/protect/variables` will replace certain custom variable values with `***`. A user affected by this will still be able to see the variable names, though. This should be a comma-separated list of [variable paths](#variable-paths). It is possible to use [match patterns](#match-patterns). ### Formats #### Filter Expressions These consist of one or more [filter expressions](https://icinga.com/docs/icinga-web-2/latest/doc/06-Security/#filter-expressions). ##### Allowed columns For the restrictions: * `icingadb/filter/objects` * `icingadb/filter/hosts` * `icingadb/filter/services` Allowed columns are: * host.name * service.name * hostgroup.name * servicegroup.name * host.user.name * service.user.name * host.usergroup.name * service.usergroup.name * host.vars.[\](#variable-paths) * service.vars.[\](#variable-paths) For `icingadb/filter/alerts` allowed columns are: * contact_name * contactgroup_name * schedule_name * channel_name #### Match Patterns Match patterns allow a very simple form of wildcard matching. Use `*` in any place to match zero or any characters. #### Variable Paths Icinga DB Web allows to express any custom variable depth in variable paths. So they may be not just names. Consider the following variables: ``` vars.os = "Linux" vars.team = { name = "Support", on-site = ["mo", "tue", "wed", "thu", "fr"] } ``` To reference `vars.os`, use `os`. To reference `vars.team.name`, use `team.name`. To reference `vars.team.on-site`, use `team.on-site[0]` for the first list position and `team.on-site[4]` for the last one. Combined with a [match pattern](#match-patterns) it is also possible to perform a *contains* check: `team.on-site[*]` icingadb-web-1.5.0/doc/05-Upgrading.md000066400000000000000000000167451527064444300173070ustar00rootroot00000000000000# Upgrading Icinga DB Web Specific version upgrades are described below. Please note that version upgrades are incremental. If you are upgrading across multiple versions, make sure to follow the steps for each of them. ## Upgrading to Icinga DB Web v1.5.0 **Icinga Notifications v1.0.0 Support** Icinga DB v1.6.0 and Icinga DB Web 1.5.0 can act together as an integration for [Icinga Notifications](https://icinga.com/docs/icinga-notifications/latest/). There are several new additions to the authorization configuration, which need to be considered when [configuring the Icinga Notifications integration](03-Configuration.md#icinga-notifications-configuration) for the first time. **Different Behavior of the Filter Columns `host.user.name` and `service.user.name`** If you use `host.user.name` in a restriction, first audit the effect this upgrade will have on roles that use it. Since this column now only applies to contacts associated with a host, users may find that they have access to more hosts or fewer services than before. If they have access to more hosts, this is intended effect, and you shouldn't worry about this, considering that the previous behavior was a bug. If they have access to fewer services, you may need to include `service.user.name` in the restriction as well to restore the previous behavior. ## Upgrading to Icinga DB Web v1.4.0 **Behavior Changes** Modules that provide integrations for a host's or service's detail view now have unrestricted access to all custom variables of said object. This is the case by accessing custom variables via the object's `customvars` property. This was always meant to be the case, but due to an implementation oversight, the restrictions configured via `icingadb/filter/objects`, `icingadb/filter/hosts` and `icingadb/filter/services` were applied and caused unexpected or erroneous behavior. Though, in some cases this may not have been noticed or seen as a problem, so when upgrading we recommend to review modules that provide such integrations and check if they rely on the previous behavior. If so, accessing the `vars` property of an object should have the desired effect. The following modules made by Icinga are safe and do not need an update to still work: * Icinga Business Process Modeling * Icinga Web Graphite Integration Cases where this may not have been noticed are as follows: * Restrictions only reference `host.*` columns and integrations only require access to host variables. * Restrictions only reference `service.*` columns and integrations only require access to service variables. Since these are very specific cases, we don't expect broad expectation of the previous behavior, but please review your setup nonetheless if you use third party or custom modules that access custom variables this way. ## Upgrading to Icinga DB Web v1.3.0 **Requirements** * The minimum required Icinga Web version is now 2.12.0. **Breaking Changes** * The restrictions `icingadb/denylist/variables` and `icingadb/protect/variables` from different roles are now merged into a single list, respectively. This means that variables denied in one role will not show up anymore if another role denies access to different variables. The same applies to `icingadb/protect/variables`, in which case variables protected in one role will now be protected even if another role protects different variables. This has been done to simplify the configuration and to get it more in line with how refusals work in Icinga Web. * When using the `?columns` parameter to filter for specific columns and exporting to CSV/JSON, the exported file will only contain the listed columns of the Hosts/Services, if the parameter is not set, all columns will be included. * If a relation is entirely empty and would result in an empty JSON-object, the JSON-export will not create an object for it at all. (instead of `{"someKey":"someValue","emptyObject":{}}` we will now export `{"someKey":"someValue"}`) **Removed Features** * The routes `users`, `user`, `usergroup` and `usergroups` have been removed. * Accessing these routes will result in a 404 error. * The corresponding values for `icingadb/denylist/routes` have no effect anymore. * The alternatives (`contacts`, `contact` , `contactgroup` and `contactgroups`) have been available since v1.2. * The migration widget in the top right has been removed. If you have not adjusted your navigation items, dashboards and bookmarks to support the new filter syntax, you will need to do so manually now (see [Upgrading to Icinga DB Web v1.1.0](#upgrading-to-icinga-db-web-v110) for details). * Modules with support for IDO and Icinga DB will now default to use Icinga DB. * The accompanying endpoint `icingadb/migrate/monitoring-url` has been removed. * The class `Icinga\Module\Icingadb\Model\Behavior\BoolCast` has been removed. * Use `\ipl\Orm\Behavior\BoolCast` instead. ## Upgrading to Icinga DB Web v1.2.0 **Requirements** This version is released alongside Icinga DB 1.4.0 and Icinga 2.15.0. A change to the internal communication API requires these updates to be applied together. **Terminology Changes** Due to user feedback, we changed the terminology of _users_ and _user groups_ configured in Icinga. Both are now called _contacts_ and _contact groups_ respectively. **Behavior Changes** Macros referencing properties of type datetime are now rendered in ATOM format by default instead of unix timestamps. (e.g. `$host.state.last_state_change$`) **Deprecations** The following classes have been deprecated and will be removed in a future release: * `\Icinga\Module\Icingadb\Command\Object\PropagateHostDowntimeCommand` * `\Icinga\Module\Icingadb\Command\Object\ScheduleHostDowntimeCommand` * `\Icinga\Module\Icingadb\Command\Object\ScheduleServiceDowntimeCommand` The following methods have been deprecated and will be removed in a future release: * `\Icinga\Module\Icingadb\Common\IcingaRedis::instance()`: Use `\Icinga\Module\Icingadb\Common\Backend::getRedis()` instead. ## Upgrading to Icinga DB Web v1.1.0 **Breaking Changes** We've extended our filter syntax to include new signs for *like* and *unlike* comparisons. These are `~` and `!~`, respectively. The *equal* (`=`) and *unequal* (`!=`) operators won't perform any wildcard matching anymore due to this. If you have dashboards, navigation items or bookmarks that attempt to perform wildcard matching with *equal*/ *unequal* comparisons, the migration widget in the top right will toggle and suggest you an automatically transformed alternative. Please note that due to our release process, this change already affects installations of Icinga DB Web v1.0.x. The module's migration command already performs the transformations necessary once you migrate navigation items, dashboards and roles. (As described in the [Migration](10-Migration.md) chapter.) If you already migrated such manually in the past, and you don't want to perform the entire migration again, you can use the following command to only transform filters of such: `icingacli icingadb migrate filter [--no-backup]` By default, this creates backups of menu items, dashboards and roles. Pass `--no-backup` to disable this. ## Upgrading to Icinga DB Web v1.0.0 **Requirements** * You need at least Icinga DB version 1.0.0 to run Icinga DB Web v1.0.0. **Configuration Changes** * The restrictions `icingadb/blacklist/routes` and `icingadb/blacklist/variables` have been renamed to `icingadb/denylist/routes` and `icingadb/denylist/variables` respectively. If you use this restriction, make sure to adjust `/etc/icingaweb2/roles.ini` accordingly. icingadb-web-1.5.0/doc/09-Automation.md000066400000000000000000000220211527064444300174730ustar00rootroot00000000000000# Automation It is possible to issue command actions without a browser. To do so, a form needs to be submitted by a tool such as curl. This is also used in the example below. ## Request Format The request is required to be an Icinga Web API request. For this it is necessary to transmit the `Accept` HTTP header and set it to `application/json`. In addition to this, the request must be authenticated using the `Basic` schema. The HTTP request method is `POST` if not documented otherwise and it might be necessary to manually configure this (e.g. `-X POST` for curl). All endpoints support filters. To issue commands only for specific items, define a filter in the request's query string. If this filter is omitted, all items are affected. The options need to be transmitted in the request body as `multipart/form-data`. ## Response Format If the request succeeds, the HTTP response code is `200` and the response body contains a JSON object such as this: ```json { "status": "success", "data": [ { "type": "success", "message": "Added comment successfully" } ] } ``` If there's something wrong with the options, the HTTP response code is `422` and the response body contains a JSON object such as this: ```json { "status": "fail", "data": { "comment": [], "expire": [], "expire_time": ["The expire time must not be in the past"] } } ``` ## Example ```shell USER="icingaadmin" PASSWORD="icinga" BASEURL="http://localhost/icingaweb2" FILTER="host.name=docker-master" curl -H "Accept: application/json" -u $USER:$PASSWORD "$BASEURL/icingadb/hosts/add-comment?$FILTER" \ -F "comment=kaput" -F "expire_time=2023-10-05T20:00:00" -F "expire=y" ``` ```shell USER="icingaadmin" PASSWORD="icinga" BASEURL="http://localhost/icingaweb2" FILTER="host.name=docker-master" curl -H "Accept: application/json" -u $USER:$PASSWORD -X POST "$BASEURL/icingadb/hosts/delete-comment?$FILTER" ``` ## Option Types ### Text A simple text message. May contain newlines. ### Number An integer value. ### BoolEnum A string with the value of `y` for `true` and `n` for `false`. ### DateTime A date time string in the following format: `Y-m-d\TH:i:s` The timezone this is interpreted in depends on the user who's transmitting the request. To change this, log in as this user and change its preference setting. ### State | Value | Description | Applicable To | |-------|----------------|----------------| | 0 | UP / OK | Host / Service | | 1 | DOWN / WARNING | Host / Service | | 2 | CRITICAL | Service | | 3 | UNKNOWN | Service | ### PerfData Please have a look at the [Monitoring Plugins Development Guidelines](https://www.monitoring-plugins.org/doc/guidelines.html#AEN201). ### ChildOption | Value | Description | |-------|-----------------------------------------------------| | 0 | Do nothing with child hosts | | 1 | Schedule triggered downtime for all child hosts | | 2 | Schedule non-triggered downtime for all child hosts | ## Endpoints !!! info Some of the endpoints support configuration options. These are explained in the [Configuration](03-Configuration.md#available-settings-and-defaults) section. ### Acknowledge Problem #### Routes * icingadb/hosts/acknowledge * icingadb/services/acknowledge #### Options | Option | Required | Type | Depends On | Default | Configuration Option | |-------------|----------|----------|------------|--------------|--------------------------| | comment | y | Text | - | - | acknowledge_comment_text | | persistent | n | BoolEnum | - | n | acknowledge_persistent | | notify | n | BoolEnum | - | y | acknowledge_notify | | sticky | n | BoolEnum | - | n | acknowledge_sticky | | expire | n | BoolEnum | - | n | acknowledge_expire | | expire_time | y | DateTime | expire | now + 1 hour | acknowledge_expire_time | ### Add Comment #### Routes * icingadb/hosts/add-comment * icingadb/services/add-comment #### Options | Option | Required | Type | Depends On | Default | Configuration Option | |-------------|----------|----------|------------|--------------|----------------------| | comment | y | Text | - | - | - | | expire | n | BoolEnum | - | n | comment_expire | | expire_time | y | DateTime | expire | now + 1 hour | comment_expire_time | ### Delete Comments #### Routes * icingadb/comments/delete #### Options None. ### Check Now #### Routes * icingadb/hosts/check-now * icingadb/services/check-now #### Options None. ### Process Check Result #### Routes * icingadb/hosts/process-checkresult * icingadb/services/process-checkresult #### Options | Option | Required | Type | |----------|----------|----------| | status | y | State | | output | y | Text | | perfdata | n | PerfData | ### Remove Acknowledgement #### Routes * icingadb/hosts/remove-acknowledgement * icingadb/services/remove-acknowledgement #### Options None. ### Schedule Check #### Routes * icingadb/hosts/schedule-check * icingadb/services/schedule-check #### Options | Option | Required | Type | Default | |-------------|----------|----------|--------------| | check_time | y | DateTime | now + 1 hour | | force_check | n | BoolEnum | - | ### Schedule Host Downtime #### Routes * icingadb/hosts/schedule-downtime #### Options | Option | Required | Type | Depends On | Default | Configuration Option | |---------------|----------|-------------|------------|------------------------------------------------|---------------------------------------------------| | comment | y | Text | - | - | hostdowntime_comment_text | | start | y | DateTime | - | now | - | | end | y | DateTime | - | now + 1 hour (fixed), now + 2 hours (flexible) | hostdowntime_end_fixed, hostdowntime_end_flexible | | flexible | n | BoolEnum | - | n | - | | hours | y | Number | flexible | 2 | hostdowntime_flexible_duration | | minutes | y | Number | flexible | 0 | hostdowntime_flexible_duration | | all_services | n | BoolEnum | - | n | hostdowntime_all_services | | child_options | n | ChildOption | - | - | - | ### Schedule Service Downtime #### Routes * icingadb/services/schedule-downtime #### Options | Option | Required | Type | Depends On | Default | Configuration Option | |----------|----------|-------------|------------|------------------------------------------------|---------------------------------------------------------| | comment | y | Text | - | - | servicedowntime_comment_text | | start | y | DateTime | - | now | - | | end | y | DateTime | - | now + 1 hour (fixed), now + 2 hours (flexible) | servicedowntime_end_fixed, servicedowntime_end_flexible | | flexible | n | BoolEnum | - | n | - | | hours | y | Number | flexible | 2 | servicedowntime_flexible_duration | | minutes | y | Number | flexible | 0 | servicedowntime_flexible_duration | ### Delete Downtimes #### Routes * icingadb/downtimes/delete #### Options None. ### Send Custom Notification #### Routes * icingadb/hosts/send-custom-notification * icingadb/services/send-custom-notification #### Options | Option | Required | Type | Default | Configuration Option | |---------|----------|----------|---------|----------------------------| | comment | y | Text | - | - | | forced | n | BoolEnum | n | custom_notification_forced | icingadb-web-1.5.0/doc/10-Migration.md000066400000000000000000000161021527064444300172770ustar00rootroot00000000000000# Migration If you previously used the monitoring module, (built into Icinga Web 2) you may want to migrate your existing configuration, custom dashboards and navigation items as well as permissions or restrictions. If that is the case, this chapter has you covered. ## Configuration ### General configuration via config.ini Icinga DB Web still uses the same configuration format as the monitoring module. This means that the file `/etc/icingaweb2/modules/monitoring/config.ini` can simply be copied over to `/etc/icingaweb2/modules/icingadb/config.ini`: ``` cp /etc/icingaweb2/modules/monitoring/config.ini /etc/icingaweb2/modules/icingadb/config.ini ``` The behaviour of those options remains the same. ### Command Transports Icinga DB Web still uses the same configuration format for command transports. This means that the file `/etc/icingaweb2/modules/monitoring/commandtransports.ini` can simply be copied over to `/etc/icingaweb2/modules/icingadb/commandtransports.ini`. But note that Icinga DB Web doesn't support the commandfile (local and remote) anymore. Remove all sections that do **not** define `transport=api`. ### Protected Customvars The rules previously configured at `Configuration -> Modules -> monitoring -> Security` have moved into the roles configuration as a new restriction. This is called `icingadb/protect/variables` and accepts the same rules. Just copy them over. ## Navigation The monitoring module provides two custom navigation item types: `host-action` and `service-action` Icinga DB Web does the same, though uses different type names to achieve that: `icingadb-host-action` and `icingadb-service-action` With Icinga DB Web 1.1, its migrate command allows you to migrate these navigation items automatically: `icingacli icingadb migrate navigation --user= [--no-backup] [--override]` By default, this only migrates navigation items of specific users and keeps the old ones. The `--user` switch expects a username, with optional wildcards (`*`) to match multiple users. `--user=*` matches all users. Pass `--no-backup` to fully remove the old monitoring navigation items. A similar version of this command has already been available since Icinga Web 2.9.4. Due to this, the new command allows you to perform the migration from scratch again with the `--override` switch. (Provided you still have the old navigation items.) Otherwise, already migrated items are ignored. That's also a difference to the previous command, which duplicated items instead. ## Dashboards The dashboard item configuration does not change since it is related to Icinga Web. However, items that reference views of the monitoring module should be changed in order to permanently reference views of Icinga DB Web. With Icinga DB Web 1.1, its migrate command allows you to migrate such dashboard items automatically: `icingacli icingadb migrate dashboard --user= [--no-backup]` By default, this only migrates dashboards of specific users and creates backups. The `--user` switch expects a username, with optional wildcards (`*`) to match multiple users. `--user=*` matches all users. Pass `--no-backup` to disable backup creation. Please note, if you do so, that this makes resetting changes more difficult. ## Views and Exports ### Url Parameter `addColumns` The host and service list of the monitoring module allows to show/export additional information per object by using the URL parameter `addColumns`. Icinga DB Web has a very similar but much enhanced parameter: `columns` If you pass this to the host and service list of Icinga DB Web, you'll get an entirely different view mode in which you have full control over the information displayed. The parameter accepts a comma separated list of columns. This list also defines the order in which the columns are shown. As of now, there is no dedicated control in the UI to conveniently choose those columns. You can use all columns however, which are valid in the search bar as well. The migration widget, that's shown if you have access to monitoring and Icinga DB Web, also assists you by providing an example set of columns conveying the same information shown in the monitoring module lists. ## Access Control ### `monitoring/filter/objects` This is now `icingadb/filter/objects` but still accepts the same filter syntax. Only the columns have changed or support for them has been dropped. Check the table below for details: | Old Column Name | New Column Name | |----------------------|------------------------| | instance\_name | - | | host\_name | host.name | | hostgroup\_name | hostgroup.name | | service\_description | service.name | | servicegroup\_name | servicegroup.name | | \_host\_customvar | host.vars.customvar | | \_service\_customvar | service.vars.customvar | ### `monitoring/blacklist/properties` This is now `icingadb/denylist/variables`. However, it does not accept the same rules as `monitoring/blacklist/properties`. It still accepts a comma separated list of GLOB like filters, but with some features removed: * No distinction between host and service variables (`host.vars.` and `service.vars.` prefixes are no longer keywords) * No `**` to cross multiple level boundaries at once (`a.**.d` does not differ from `a.*.d`) * Dots are not significant (`foo.*.oof` and `foo*oof` will both match `foo.bar.oof`) Check the [security chapter](04-Security.md#variable-paths) for more details. ### Permissions The command permissions have not changed. It is only the module identifier that has changed of course: `monitoring/command/*` is now `icingadb/command/*` The `no-monitoring/contacts` permission (or *fake refusal*) is now a restriction: `icingadb/denylist/routes`. Add `contacts,contactgroups` to it to achieve the same effect. ### Perform The Migration To apply the necessary changes automatically, Icinga DB Web 1.1 provides this command: `icingacli icingadb migrate role [--role=] [--group=] [--override] [--no-backup]` By default, this only migrates roles with matching names or matching groups, doesn't change roles that were already manually migrated and creates backups. Either `--role` or `--group` must be passed, but not both. Both accept wildcards and just `*` matches all roles. Pass `--override` to forcefully update roles that appear to be already migrated. Please note that this will reset changes made to Icinga DB Web's rules, which were not equally applied to their monitoring module counterparts. Pass `--no-backup` to disable backup creation. Please note, if you do so, that this makes resetting changes more difficult. With respect to permissions, the command will only migrate the command permissions. If a role grants full or general access to the monitoring module, this is not automatically migrated. You have to adjust this manually. It gives you the chance to review the performed changes, before letting them loose on your users. Please also take in mind, that Icinga DB Web handles permissions and restrictions differently. Our blog provides details on that: https://icinga.com/blog/2021/04/07/web-access-control-redefined/#icingadb-permission-linkage icingadb-web-1.5.0/doc/11-Concepts.md000066400000000000000000000112001527064444300171170ustar00rootroot00000000000000# Views ## List Items Each list that is shown in the web interface consists of list items that follow this basic schema: ![DefaultAnatomy](res/ListItemAnatomy.jpg "A list item stripped down to the skeleton") ### Visual Each element has a so-called visual. It's purpose is to highlight certain elements in long lists and give an intuitive overview about the underlying objects' condition. In the case of host or service lists, the state is displayed. This makes it obvious if and where there are problems that need to be taken care of, immediately from the overview. ### Title The title briefly describes the state of the list element as an addition to the visual. For example, it contains the information that a host is currently DOWN state. While the visual gives an intuitive impression, the title explains what exactly happened. ### Meta The meta area provides additional details, usually displays of time. In the host and service lists, you can see how long the object has been in its current state. ### Caption The caption area contains detailed information about the list item. In the case of hosts and services this would be the check output. For comments and downtimes the comment texts of the user are displayed here. To make the default list view compact and consistent, long texts are truncated to a maximum of two lines. ## Different detail degrees The level of detail of the host and service lists is selectable - the above image shows the default list item, but there are two more iterations: In the compact mode the entire list item is displayed in one single line. Given, that there is enough space, the caption is placed in the same line as the rest and trimmed to fit. ![CompactAnatomy](res/ListItemAnatomyCompact.jpg "A more compact list item that fits in one line") The detailed mode displays the entire caption, which makes it possible to react to problems directly from the list view. ![DetailedAnatomy](res/ListItemAnatomyDetailed.jpg "A more detailed list item that spans four lines") ## Overdue Items In host and service lists overdue checks are highlighted. This makes it immediately apparent which objects may no longer be up-to-date. The red badge contains information about how long the check has been overdue. ![OverdueListAnatomy](res/ListAnatomyOverdue.jpg "A list with a highlighted item") ## Downtimes Downtime lists have an extra information to be displayed: the progress. How far along the downtime is, is immeadiately visible via the progress bar at the top of each list item. In the visual it is displayed how much time is left until the downtime ends. ![DowntimeListItem](res/ListItemDowntimeAnatomy.jpg "A downtime list item with the added progress bar in the top") # Modal The modal element introduces short interaction dialogues. For actions in the detail area, a modal dialog will appear. This preserves the left list column and thus the content better. ![ModalAnatomy](res/ModalAnatomy.jpg "A modal presenting a form") ### Utility The utility or close button is one of three ways to close the modal without confirming your changes. It's also possible to just click outside it's borders or press the escape key to return to the previous page. ### Title The title specifies the target, e.g. an action like: Acknowledge Problem, Add Comment or Schedule Downtime. ### Hint The hint explains more about how to interact with the modal and what is asked of you. It goes into detail about the consequences from an action to your environment ### Form The form is the main focus of the modal. It takes the call to action out of the normal page flow and makes it easy to focus on the task at hand. ### Submit With the submit button you apply the selections you made in the form and return to where you left off. # Details ## Check statistics Information about check execution is available in a handy graph that makes it possible to get all of the information at a glance. ![CheckStatistics](res/CheckStatisticsAnatomy.jpg "A panel with the statistics about check execution") ### Descriptions and Values Instead of having a table with the different check information there is a header that lays out the information in an intuitive way, giving weight to more important bits of data and their values. ### Graph The graphical element makes it easier to see, whether the check is on time or late. It's easy to immediately see the configured check interval and have a better grasp on how up-to-date the current state is. ### Indicator The indicator visualises where the current time fits in for orientation. ### Specifics The specifics put the exact times of the execution points in relation to each other. There are both the full timestamps and the passed time immediately visible. icingadb-web-1.5.0/doc/TRADEMARKS.md000066400000000000000000000013451527064444300165700ustar00rootroot00000000000000# Third-party Trademarks All trademarks, logos, and brand names are the property of their respective owners. Any mention of company, product, or service names in our documentations, product descriptions, or websites is solely for identification purposes. The use of these names, trademarks, and brands does not imply endorsement. This document acknowledges trademarks of companies and products, which are the property of their respective owners, whether registered or unregistered. ## Redis® Redis is a registered trademark of Redis Ltd. Any rights therein are reserved to Redis Ltd. Any use by Icinga GmbH is for referential purposes only and does not indicate any sponsorship, endorsement or affiliation between Redis and Icinga GmbH. icingadb-web-1.5.0/doc/res/000077500000000000000000000000001527064444300153775ustar00rootroot00000000000000icingadb-web-1.5.0/doc/res/CheckStatisticsAnatomy.jpg000066400000000000000000002353451527064444300225360ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' +ÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀ+'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € (  WzŽ�`P__ÙY™CÅÝÔæ@¸ÜPM"o YwmÎÜŒã"€ MKN¿.,oì¯ aL‚Òê ƒl….!‘ʆ í-Œàã8  ´P@P@yç�>.ü)øo«ø;Ãÿþ%øÀºïÄ=Y´/hÞ0ñ~�á­SÆšÒyôŸ Xk…�Ö½¨+ÝZDm4È®§óïl­ö¯-£”Ðè €™QY�‚ª‚ÌÌ@UP2Y‰À’IÀœb€<ûáÏÅ¿…t­C]øKñ+À_´M'W»Ð5M_áÿ‹´éºn¹a·íšEý÷‡ïõ kMJÝdŠY,ç–;� ÐÏå˜f†Gô*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (�Ö§¦Ø²%ö¡cf.®à·gPpYY²ƒÁ s@UƒÊC+ÊÊA È Ž#�Gr(“êšdW"Ê]FÆ;Æxã�yn—%å bAnÒ KÈ j— ¥zн@ ’HáŽIe‘"Š$i%–FTŽ8ÑK<’;¨ˆ ³3ª ’@зÖWÈÒY]ÚÞF�±ÞÖâ+„WÀmŒÑ;ª¶ÒÒs† °ª( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÕþþ( € ( € ( € ( € ( € ( € ( ãÿþ„ÿ‘çö;ÿ±Oã7þž>P¡kßðm›i~ ‹Æ?³çímâÝâzè0jÚ §‹<1‘£ê”ö�ÝC¦Mâ¿k6ú߆­å‘¼³ªÁ£kï ¹Ó$Ê€z¿üïþ ñïÆß¾&~Á¿µž¯âüKø_§ë“x#Ä>-1]xÃK—áæ²¾ñÿÃëŸPñ¥¤]Ïþ‹«j²ßji�âCV»‚=pÒÛþ ûþž3¸økñÄÞ+ñÏÄ­:î5ï|$дïk>ûDPÏgkâKí_^ðdž´�RòÚt»‹F¸×ÿµá³ho/,mm¯tùo@=Cö2ÿ‚•~Ê·oöΛð?ÆZ”>5ðí—ö®µðÛÇ:RxgÇvº –Öݵëm5/u7ZÑ ¼½¶±½¿Ð5mV2òâÒSìM¨i¦ìÃÿkOø-/ìGû |CÕ~øËZñïÄoˆ¾‘müYោÓñVÝÀ=Çö.ÿ‚“þÊß·ŒzõŸÀßë0øÇÂöiªøƒáÇŽ´_øF¼o§h²ÜÇg¹œ7z®�¬ékš [«ßëš²iw7V0jë§Ë¨éËvåÿµÿüö,ý‹¼eqð×â'Š|0ÜYÚø’ûV×|5á�#S½¶¸K¸´{�|jñY´7—–6¶·š|·@…ûÁN?dÏÛ¶ëWо x·Z±ñÞ…`úΩð×Çú*øgƱèQËko.¹cmo}«èšÞ™owy¥ôÚ¹©Ë¦Ï-¿öœ6q^ØÉtó‚ÿÁv?`ôÒ¾0꺆§ñCH/,ô�cOÔü§C©ø¯^¿×o´ ?øÖÜ kU–m3RÔdÓhöVº6Ÿy©ÞÞÛAo&ÐŒ¿oÚþ wûF런?ÇßÚ&ÃöžÓõè�ñàÖ™à�;ÃQë—Ç6ºyðßÅ;GÖµd²Š?èqÜgÂ:½®¤l¥¹Q®ºK v ªÿ´?üÓöiý˜i†²ßÅñÝ·ÄŠÖþ»ðî¡¥x{Mºðm•¯Ä/jžÑ.uý~÷Ä:sévöÚÆ�{6¯7ö}Äv:j­Øi‰x”å{ßø8þ ÓcñFë἞.ø�6™g¬¶‰'Å{?5ïÂéeŽðYK¨ZßÛkx¾ïFŽMÓ.«oàÉ,îlÐÞYÉslðÉ(™Áhÿশÿ³§Á_øö{ø•â?ükø»£x/â¿Ã_ˆÞ Ó¼9âj nu‹¨/î¡ñ ôº�ŒË®Y@·l–ºMí½í”Ð\A}Ê€5à—ðS?~Ö³&¹ð§ã.·ñÇß~üø‰ã¯ÚÄ·‡´­7Mñ„—ĺ嬑h:ž‡¨éÿlÔÇ…5}OŽ(t½«Á)Bh¾Ñ(÷ü6ÿöÓþþÐvŸ±5çÆ÷Ð4ßxw^ø›­|ÿ„~ÏQ‚MGJ×O†ì4‰to¥G èZ^—«y·7V‘ê%ç3jz�ø0ý”ÿÅOø8#þ éðËÆ÷¾ ±Ö~)üTM3Q}2ûÆ? <£ëŽhF..,µ¯x·Â—îŸ Á MKÃÚ~¯a|Wí:eΡbñ]¸è?Á?Ûöpý¢¾x£ö†ø;ã¤ñŸ�|¡ëz׌ì-,å³ñ—…dðþ‹s®êZ&¿ámDÙßéºÏØ-'’Â;‚º~®¡n´­J÷Ot½`†mà¼_°-ÇÁÏ|h—Zø—a¤è¾0´ð6�àëïi±üAñ~»s¤�ràøW@‡ÄóÚ\i:NŸå>³®jú®�¤é·šmŒ÷bûTÓmîÀ>‹ý‰à¨_²ŸíïâüÖüW£øïÃX×µO‡´_ø´øt\ÚYK¯éãKÖnµð#Ç'@ñ-ÌQá“áÿÅ#c¤½Íܨ7HºwŽt¿YØÇ.cƒþ=JHÙipÒ_ø$ÏÇ´ý ÿàŸ_³§�¯ïÖç^ðÇ‚“áŒ%šP×kŸ æ—Á�y©ÊÍ�µëZ&‘¤xži¾hõ¸å}ŒÌªüæÿÁ=á³ý»¿à´??kßÜÛ?ÂσÚçÄ��kZÌÑA£ÚhžÇÃß‚j:…Ë$Rèž�KñdW2¼Ñ/�®ægŠŒNúûñ þÿ‚zxÆ~Ò§øÑñ2ÎÆõìgñ§Ãßhòø=Þ/–k‹;ŸøÇÁÚæ¡eÁ¢KÛ âÞïoÚ,êÍá¸p¦>0þÔÿ¿kÿø&7í•ñkà�müeá9eÚSHÔ•­/4­oÚý¯Áo\^ø{Äš¥ ½þ“«ZCwm7—,Mk{k=¾¡¥Ý_é·V·³€~2ÿÁiŸ†ÿ²ü›ö¦ø÷ñj?Ëà_þÒž¬žÒàÖuÃ7‰ü1ðßÃ:oÙ4û›ý.�jZ­©¹g½‹Ê¶Ê¢FA€JŸ²÷í)ðçöºø#á�ÿ ãñ ^ñ´Þ#ƒFOi�húè øŸXð–§öÍ:ÚÿT†u]ôÛ½—͵0ÌÂ7‘£@ž¿c/ø)oìãûvø£â'„~Añ[᎟¦ê~%>5ðņ�jÖÚ®£{¦ZÿfÍi¯ë u'Úl'2¬‘[„�cbÅhçßÚGþ ›ûþÍ_õ…ú¯ˆ<}ñOÅ~Ô‘â•ø7á�ÄÚ7†õxn$·Ô4«ïëþ(ðž�{¨hòFÑêöÚ æ²Ú}Ê˧O�RÚòÆÔíÙöáýœ?mÿê^1ýŸüp5óáéí­|]á=bÊ] ÆÞ¸¾7_Ù£Ä>ºg– MU,®ßJÕ¬f¿Ñu#k{–¥5ÞŸ¨[Ú€}o@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( ãÿþ„ÿ‘çö;ÿ±Oã7þž>Põ·á©àµðv�uu4VÖÖÞÒ§¸¸žD† ‡K‚IfšY ÇQF¬òH쨈¥˜…ÐñÇÿ×Õí>;ÿÁw¾>|køZeÔþYxƒö¡ø‰£¤#¦›â ë—zŸƒü?©O<Ê©oŠ5_èúí·ÚZ÷rÆ[nÇJùwþ kãoÚÓ_ý¢?hÿÚà÷ìàÏÛ#ã=ÕÕ¾¥ã[â_�<3áýKᮥñÄ^'Õµ]cGOëšKÝk>)¾Ò¯4û½WOIïô{6}5æ³µ×æ‚ôïï„_²_ün÷þ ‘ðöϽý‡4ٛ·¾5ðå§Åí+áÏÄß…³øPxW°›Â^?ñUÎ�¦øê[Û™5Mýµ}oLÓt«—Õ5‹)5e¶¹Öof¸p ŸþÈ¿ðQ/ø'Wíõñ³ö½ø û:hµ÷€þ)ø‹âFµex4—ñ·ˆ¬to‰~1OêVáÝ#Sµø…áïè÷�'þ�HÖô=[Ožìbäê—:]€µÿÁ3ÿjØcâ÷íß®ß^~Æ~,ý’¿nÿ[x÷Eãÿßx'ÅzÜ~»Ôüyá«�jRøOFðOˆo´­&÷_.§àaö» ëÏ혵å³M@å¿ø7ûÀ> ý£k¯ÚÃã_ÇÍHø�ñ_DÒ¬üQ¥Cã›_ËiâOˆÞ2ñÇŽ0ø©¬´�?[žÔ­tm=®®t;}>+”¶Š×KŠÝ"ĉ@²ðM/xOMÿ‚2xcÅzw…ü;aâ�oöuý¡-õŸÙhºm®¿«ÛÃ⊫ž±²j7ðͶËWW2¢ x¨Æùèý„ücâÏÿÁ$ÿà¬úçƒ./¬õ{«�Ù¿Â÷WºuÃÛ\ÛxsÆÞ0¾ðw‹¿y$Æ ¯ 뺾Ÿv±mo%2â˜Ðî_ü?ömø­ÿÁ=“ÅúïÃxßÄÿ¼iñNø™yâ� èž#»»Ót=j i>¼“U²ºuÐ`Ðì­µxôbEŸÛ5ëíCÊ3^»ÐäÏüp?ÂÛOþ ±ðáµÝõ×Á»Ù÷öÎÒ-ì"¾šm4i_ ürÞøwâ[­îÂúêÃIÕ¯´K+¹wÌ"ñMã šBÀñÿÜ~Οþ'éß´÷ĉŸ <ñľÔþøCÃøãÚOŠlü9¥k:Šõ-}ô�?[µ¼±µ¾Öä´Ó-ï5·ûjÙX-•¼ñZÞ_ÅtÅ~Ë~ð×ÀÏø8÷[øcðÏMµð¿�¿á4øÝ¯†ô«h,4�7Iñìïâ߈m iv‘Cka¢izìÐ&�§[Cµ…�…•¬¬P"¨ös@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@xgí7ðOGý£ÿg¿ŒŸµÏ";?Š?|Ká(.î|zV±¨iÓÂ=®ªí|Íáý~=3[¶ù�‚´üeÁ=¿m=cöNý„¿à§ß¼Qu?‡¾ ø[EþÓøw¡Ï0�VÓ|yñú×öyñä–°— ·žÕ®| ­¼qo�M–¡<Ê¢&2€}ýÿ§øQð7önÿ‚CþÒ¿´—íU§êÿð«ÿh¨üAŽì´Iõ]7Äž%øC¡Ü\|(ð§‚ô©ô}KDÕ¡Ôügã]oÆ:n•$zÎ�iyŠôǺÔ,´ÇŸR ,ý›¾4k>2ø ñ;Â_°/üSGÖ¿fÿÜø²ÃÄ^7ø«ñzvãÅLö+¦jSOâˆÖvwmý‹ii]Cñ®¿§ø[UŠyl/-µn&”ç_ø#v¡zÿ°‡ü»Jk™[NƒöL¸Ô ´-˜b½»ø9ûNÛ]\Æ¿Ã-ÄV‘LÃÒÖÙòÓh—~Ï€Ÿø §íë€N?jOƒ¤ã°þÚø$2}HRq@Ò§üzöÎ_ø%çÀŽêÞFÓµŒöú‚¬Ñ“c9øÓãûñ ÞýžScyiy²]�ök˜&ÁŽTjþ|?à‹^3ñ�~ÿÁX~ øk•ñ_„¿dŸx»ÂWšl¦;»}sDÓ>$jú.£e*•q5�í½½ìQó™¢ i™€)Áµ�ÚûÁ?>-xûödý�>þÕ“ø�ÆíáO|TñÏ�<¡ø‡AÒu9|ccâ¯išŒ:MÚkë®ê·¶–ÂÓÄ:…½­õÅäºØ}ýÿÏý�¿nïƒ?ðR¯~Ð^8ý“­ÿf¿�_tˆö~6ðŸ„þ!ü9Õü áí�8x›DÓ´½Ãþ3ÔõI4ßøN´{ôk;M­´uWµ´[& ýQP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( Áÿø,Ÿü÷ãïü;ÄŸu�‚Þ/ø?á‹o…º'Ä 7Ä ñG_ñ¦‹=äþ+¿ð¥Öœú:øSÀ5Žâ(cЮÅë^˧¼o%°‚;…y ‰µ¿ø$ü3âö‡7Ãߎ_ðQ ]|2¿²M3Uðþ‘ñ_㟊tÝSM4:~¯á+Ÿx F×,Q"ŒÇiªêåÑ� ‡ Ú¯ø'‡üƒà÷üÃáÞ³áÏê:Ÿ�~ øäé7?þ&ëÖÖÖ7þ#¹Ñ¢º];LÑ´‹fž/xWL–ÿQ¸Óto·jw¦{ë‰õMcT˜[½¸æ‡Åßø$Oíqð#öœñ×íEÿ¼ý üð†ãâdºÕ÷‹þxöÝ­´{)uÝF=_UÑ48eðo�|#â/ ÝëmKGÒ¼Gáýo:Ç�«N«o- ¦þÅßðKÚoGý©`ýµ¿à _´m‡Æ_‹Ú yü%àÏÝêsøF×V;èš^±®Ï?‡ü£[[ønÂâî]ÁþðmŽ�o®M}µ‹‰mg²½òŸˆ?ðJ�Ûãövý¦¾ þÐÿðMÿÚsÁþÐþ$Üë—Z·Ã_‹ÓÞκ—ˆµ{}zÿÂz}¶¥àÿøGÄZ¦± ÏáýNêÓ¾"ðî™öm »ùûUÔ=Cöÿ‚M|vø{û\k?··íÇñ§Â¿hK£­]hšWÃëIŽ�o­ëþMâ-wT¹ðσlüÝ+Á÷z‰áoxJËHÒ÷ÚßA«ÍýŸoi@EñÛþÛûRü$ý¨|[ûVÿÁ1h |Ö¼u?ˆ5øŲ]èÖšLÞ%½‡T×´áð��ü)â�êÚÌk¬YøWÅþÓtÿ ]ZX}‚êóìkØzwìÿˆøÛð÷ö§¹ý¸ÿnï�ú'Æ¿�¶¢îãÂúw…îõ­cK´Öîü>ž¶ñ/ˆüE­h¾sè’çCðÿ„ô� A¡h¤XêzœßÙ–Vpt_ðKø%ßÇïØ�ö�ý¢~4üVñÁïx[âæ�®i^°ø{¯øÓU×ì®5/ˆ6ž+�õ»_ü?ðž�m iÖï ÍaªjN·¥cHžnÿ‚°ÿÁ.þ?~ÝŸ¿gωÿü_ð{ÚÂ}´¯Z|G×üi¤k·Æ1x‡~‹oះþ/²¸‡ìQ˜·__éÏö¢Êò‰ž€?*ÿ฾Ñ~(ÿÁ^dφ~${èü;ñÀ?³‡�uù4Ë„´Ô“EñwÇÿˆÚªú}ÓÅp–×Ëc¨NÖ—é â9)”`¢>9Á¿à©´&«á߃Ÿ¿n¯ |Eý˜¼®Áqá-KÆzÇŒn|a‹f_MÓõmÀö>‚ÏÅ>>Ó´K‹˜­çñÄ-F f»ŠßÅVk}p¬úáñ¯þ �ðïÇ¿ðNk/ø'ïÃïÍà�º†á ñ®¡§E©L|ká¿GâËßø—N´k4¹“ÆÚüÚåωFœöÆÚO_\é±£[Ù°ËðO/ø'Ÿíñû,|4øÙðã7ÇÏ…>9ø¯üø�àß‚þð¶¹âÍFÓÁþ>ñÅÝÕÝλ|úïÂíRÒ4äÔµyï¬ôíg]Š;ÝNîîÛE{‰¤�À+ÿÁ3à‘ž8ý™¾~Ö¿?k SáOÄþÓÞÒ$³ø_®ø³V[m#JÑüW§j3Ý]x·Àž—KÖ­.õÍ?Sðåö�¢öz…Š_‰m.--Ì %øCþ -ÿdý�ŸÇß ¿aßÛKáÞ‘ð+â.³su4~(¹¿ðï‰tö»±†Æ]v}.†mü'âAaoi¥Ýx§á¯ˆ¬µÍU4Ý:íá±û%•¶ž÷Wìÿ„¶ý�þ~ÐZv«ã}â/í/ûC|0ñO�5ßIo¨ØøGÂöºÖ‰ªÁiá½öæÖóÄwZ-߈oíu�xŠïM‹Q×$Ót©SÃÖÍ¥Co8×ü¿þ Óñ³þ çàïŽ~øÑ⟅ž'½ø›âoë: ¿ õ¿ëV¶–¾ÒõÛèõwñ_‚<,˪[µªÙÁÆ“¥�•À<ëÂðK¿�Úü6ÿþ yâÿƒÒ|º×üaªÇá‹mÆ�ñ<[øƒà.¯ð¶ÉE—áü>Eâ BË¥_²&޲ÜE$ס4çýä € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € þMÿoø íñûö³øÏñ·à�þx[áÏÅŸÃã6Ð�àí[Äÿ ´�káìž)ŪϧxÙ­t›ýF÷P´Óõå’öPµý�?à�´¯ì¯û9ÿÁD>üBñÇÀÝgÄŸµ·À�øUÿ/¼â_j‰¯ÿ ñ£ÃlñµÎ·ðÏÃ×úv�öÿˆÚ$ßhдß^ýŽ×T“û?ΆÒÞôÑ?bÏø#ß�¾~Á?µ'ì[ûLøÏÀ‡ü4ŒG‰4Ÿü#Ô¼Mâ+O M¦h¾“ºÍÔ^-ð§€î.µ-ÆžÓõÇÒ"…¬µ++T³“S€ÝMöp‘g/ø#_ü×àåî«ðþ?Ã~ý�|[â+‹ïˆö_ $|GÕÿà™_µg�|-ðŸâ]ÜS^xâ”húÆ�šði¶ÓYk¿¾$øC\¸ðŽÛCcãKqáßÝÙŸ±\é·³-ØÙÿðMïø&Å/Ù§âÇ�jÚÃã£|rý¤¾ Újö,4[írûÁ^"¿†ûÄ:¼:†½g£^kž Õ#´´ÒìžßÃ^Ò|1¢�GGÓ¬/­¯ ŸOý§ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € (ã/Œ¿ðOïÙOãÿÇo‡ÿ´§Å_‡ž#øÇð½<‚¼Q�üu¢A¤¯€¼SãO Í € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( …~2Ã{ÂÈñü)oøV?ð¬ÿâOÿ×ü$?Ù¿ÛòÓ?¶~Ùö�ÞÿÈûWìûÿå×ÉÛòí 1ÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿå€+ÝÏÿJµ´¹º[oƒ÷�mo4ëihºÝÝ41´‚ÞÙe–šâb¢8VY¢ŒÈÊDRÌ @~ÊŸµf‘ñ÷I½ð߉,‡ƒ¾3xÀ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € øóöƒÿ†Íÿ„ÏLÿ†vÿ…}ÿOü#_ÚŸð–}ƒûGþŸí]kí¾OÚ¿yö/ìŸìO/'Ÿöœ|Û¨¿ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèþÕß> üQÓ>~Ùú6�¢hž6·‚O|Fðݼ1xsO½Wòg¶Õ/-$–Îk6X!Ôgam}áùžÖòþ t]A/í@?Nâ–9£ŽhdIb•X¥‰ÖHåŽE ’FêJº:�ÈêJ²�A ƒ@ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ø#ö«ý”õojÖ_þÞŸþÐ>hõ k�:HlañÌ6P˜×OÔYöÚm}�5�¥Ýúµ†­`çÃþ é²ÛÝi ·ì©ûVi?ô«ß xžÈx7ãOƒ„–~7ðEärØÍ$ö2ýŽïYÑm/6Ýý‡ícÉÔtÙ·ßx~ùÅ•é’lo¯À>Á € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( .øÃðÀÿ|©ø Çš`¾Òï×γ¼‡dz¦…ªÆŽ¶zÖ‹vÑÈlõ3#mm­ÌOe{Í�ÍÍ´ �ß~.øïö1ñí‡ìãûFjj_ u9/„fIF�e§y©^©q+Èm´{c,6÷v—ÉqàË™"W–ëÂwZuý�êürG,i,N’E*,‘ÉŽHÜnGG\«£© ¬§ FA Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (à¯Ú³öSÕ|kªÙ|uøz|û@ø9£Ô-.ôùb°ƒÇØÅ±4íI߃Z¡¬lïo•ìu[oø…eÒä¶¹ÒÀ;/ÙOö­Ò¾=i—¾ñM�ðoÆ¿ lümà‹È汚i¬%wšÎ‹iy¶ïìbèy:–™0{ïß7Ù/ ¶òÙ_]€}‡@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Yñ�àç�¾9øSð�tÁ{¦^�:Æú‘꺫H–šÖ‹vÑÈm5 C#J½½Õ»Íc}Í�Íͼ ž?¾/øïö6ñí‡ìÝûGßɨ|3Ôd1| ø½2Ⱥm®š%H­´½Ræi%6ú=¹–k›{‰žçÁwRE ÒÝxNëNÔl?WÑÒTI#u’9^9ƒ££�ÊèË•ee!•”àƒ‘�hÔP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ƒ?jÏÙKSñƧeñÏàeéðoíàæ‹P²½ÓåŠÂEaDÓu'|Z dZ±²¾¾F±Ôì\øÄ].K{�,®ý”ÿjÍ3ãÆ›}á?X�ülðh–ËÆÞ ½Š[ n&°—엚΋gxEдCÊÔôÉwÞè7®-nŒ¶ÒY^Ý€}‹@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Uñ—à×�þ:øRð�4áw§^?OÔ š·‡õhãt´Ö´[¶V6·ö¦F«ÛÝÛ¼ö7ÐÜÙ\Ü@àž¿þ1xïö;ñå‡ì×ûI_½÷Û÷0ü ø½0‘t¸4Á*Ãk¥ê—S4ŸgÑ 2Am473Is໩"·¹– \麕€êê:H‹$l®ŽªèèÁ‘цU•—*ÊÀ‚¬äg4ê( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>ý«?e-KÇz•—Ç�×ÍàÏÚ Á¦-BÂÿO–+|m„[cÓu9-ªë"Ô ûÐöZ�“�Ä .•-½Æ–Õ~Ê_µn›ñßN¾ð‡‹¬Gƒ>6ø4KgãO^Å-„·2ØKöKÍgE³¼Ût¶«t<­SK—}îƒxÿf¹2ÛKe{vö=P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@y?ƃøïàmKÀ~;Ó…Õ…Ø3麕¸�5ojÑÆéi­h·N�ökëbì¬d¶¼¶y¬o`¸³žxóëàÇÆOþÈ<±ýši[ö¼øzÞOÁÿ‹Ó‰—–%X-4½RîiÛèЙ!¶’;©ÞçÁwO¥Ü×>ŸMÔ¬?VÕ•Õ]]C+© ¬¬2¬¬2 �r8#‘œŠuP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ø?ö­ý”uj6?¾_~Ð^ 1jv£§ËŸ�#°‹lZf§+âÕu…¶ e§ê7ªöwön|?â—H–ÞçKê?e/Ú·Oøé§ßx7ÆV#ÁŸü%²ñŸ‚ïb–Â[¹tù~Éy­h¶—{nVÝnG—ªéR‡¼Ð¯ÈœËi-�åÐÙP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ä¿~ xãÇ�uøïOûM•Ð7f§n#M_úºFëk¬è×N�ö{Ër쮌ÚöÙå±½Š{K‰b`Ïï‚ßüwû"øòÃöfý¥¯ÚëÀ·l ø?ñz4iCJ¬zV©y;9ƒG„É «-ÔÏsà˧ŠÊöIü/>›¨éà«JÊꬌXVR ²‘�ÊFA‚äg4´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (áÚ·öQ¿øƒcñ³à�ñðgíàÓ¡¦jz|±éñxÎ;ŠE¥ê’¶ÛeÕÖØ-;Q½ g{fÇA×ĺD¶÷PIû)~ÕÖìo¼ãK࿎> ÙxËÁ—±I§Ë{&Ÿ'Ùo5�ÎïmÊ—ËÕt©]èwmäÍæÙËiypöUP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@yÆ¿‚žøõà]CÀž:ÓþÑiqºãJÕmÖ4Õü9«¤n–ºÎ�têÆ ¸7–& m}lòÙ^Å5¬ÒFÀ|øÕã¯Ù/Ç–?³'í1~n<rÞG‹×Q¥6’%X,´½RöáœÃ£Ä^@n§kŸÝ ¾†M:Kù4ù>Ëy¬è¶wd\$I:ìÕ´™7]è—OåÈf³–ÖîP³( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (È~7|ð7ÇÏêñ͇�m6nt�^Ùc]_ÃzÂFém¬h÷.­äÜü¤Ð¾ëkëV–Îò)måt �¾ülñßì£ãËÙ‹ö›¿3øFr øAñzå¤]&]$J¶ö:^©}p\Å£ÆZHÞîf¹ð}ÓG¦ê2¿‡%Óu<õXÀ2�A‚A�AÈ þy  € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>ý«e ψ÷¶?þ _þÐ^ 0êF¯§Í�ŒN�iZ¬ä xõT·ÏLÕ/ZÜڱеá6�4é`¿²�í]gñ¾ÒûÀ¾:±ÿ„/㧃Ö^0ð}ì2iϨɧIö[ÍgE³ºÅÂ"N6êÚCîºÑ®[ky¶RÚÝ8ÙÔP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ãß>øã÷�oü ã›2 w\èÚͲF5 k %¶¯¤\:Ÿ.x·l¸·ôkûV–Òî9!•…|ð;㎿eoÙ~Ì´íñ—Âò•¶øAñvå¥EÎ�$[}?KÔïîìÒtV�Ëw9¹ð�Ó&—©É&€úuþžú¨ AdÈ ô ÷PÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( WñŸ£a'f–å—rÛBI´ôi !"SعÜÃ%°Æ€9SñdíÒ‰‰¾ÁǸM�Ìþ´Ÿð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@ü,ú„ÿäÿÿpÐÿ þ¡?ù?ÿÜ4ÂÁÿ¨OþOÿ÷ ð°êÿ“ÿýÃ@þÔßäø�©iŸ~«øã烞 í+_Óuµ_E§Ç‹}3V²ÃöœP¯Ù4ÝRä´Z3hšÚÜinúheû5~ÚüX³¹ðWŽtðÇÆo ¤–~*ðåÄï¦jI`ßg»Õô‹‹I%„,Ë�OJi$ŸJ�øil¤·¸p¬?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€øX?õ ÿÉÿþá þýBòÿ¸hÿ…ƒÿPŸüŸÿî?á`ÿÔ'ÿ'ÿû†€%C‹ÿM,î›M™·/›e$3ÐÕÔP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@å>ø?ã_ƒîü#âÛL«n¸Ñõ‹uAªxTVKN•Ôá†v][9û=õ¶ûyÔ©V@�>|`ñ‡ìûã_Ùçö„º'I%-þüK¸w]æ—¼Aaa}>q¦óµµÍË›�\ãKÔÉÓ~Éuhú/@P@P@P@P@P@P@P@P@P@P@9Y‘•Ñ™YX2²’YNC)!�‚AÀ zÑo[QÒ¬¯ýd°âR8X™¡•€ç¤�ˆ³Ž:P¥P@P@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € ( ^ñݶ›<–z|+}sšVr¶ÑH8( �Ó:°Ã…ØŠx³+…å�Ä}o¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔfÛâF ²¶iörÅŸ˜[yðH Ë-Ê’bªpê �¥jÖZÍ¢ÝÙHY Û"8 ,2 ŠTçkA3#¹©€4¨ € ( € ( € ùö�ý›¦øƒ=ŸÄÿ†‡ÂŸü(b½Ò5{)–Å|H¶+û�;RŸh�5â_³éº•ÀxZþÊÕ|Ý-ã{ ß³‡í%ÅX/|ã‹Aá?Œ^Zø—ב6žu3`|›½WK¶ŸFѺ“ªé‡2鲟1¶/¨캿Ä8mæx4›d»ØJ›¹Ù–a×É�6¼‰ÛÌg‹8Ê«)V` øXúßüúé_÷âïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ [ÿŸ]+þü]ÿòuoiḙ Õ­’Óy .àfh�O:7Üñ§o1^\g,ª¡™@=(@ ‚r<‚à‚:ýhh € ( € ( € (7UÕ¬´kF»½�ª¶4@Y¤ ‘IÆæ IeEs°PMy�ÏÄ�A¤?cÓìâ‹?(¹óç�ŽpIŠ[eŽÁXFãÕ€+ÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@Ãñ#UW{>XóÊÂ.`r=�î.?öÌþ<íô�_±×­Ú[RÉ,[EŬ˜óa-œ8xÛdŠpq†TpQ@7( € ( € ( € ( ^ñݶ›<–z|+}sšVr¶ÑH8( �Ó:°Ã…ØŠx³+…å�Ä}ouøGûAøÿà~µgð7ãÖ—Z|;müã½EnžÚçLÝäØé÷wææ úzü¶ö—%®4yq¦ß·Ø–Ú[p·ÿácëóë¥ß‹¿þN þ>¹ÿ>ºWþÝÿòuð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòujé¿Ù¥Xõ[(㉈âÏÌýÞxÜÖò<¬ê9,V]à}ØÜ€(Ô!š+ˆ£ž XfE’9îWFVSÆAÞÇДP@P@P@VööÛN¶–òòQ Œ»žNIª¨»»¨Š2Äàcå׿.ŒŒ4í>„ïL’Èã³4pË ÆO÷D’ÿ¼y  ?ð±õÏùõÒ¿ðïÿ“¨ÿ…�®Ï®•ÿ€÷ü�@ü,}sþ}t¯ü»ÿäê?ácëŸóë¥à=ßÿ'Pÿ \ÿŸ]+ÿîÿù:€øXúçüúé_øwÿÉÔÂÇ×?ç×JÿÀ{¿þN þ>¹ÿ>ºWþÝÿòuð±õ¿ùõÒ¿ïÅßÿ'Pö‘ñ‰’ ZÙ-7�¢îf�Xôó£}ÏvóåÆrʪ”Ò� €A ƒÈ Ž#¡Ö€€ ( lð�ü‹Úý½ÿéuÍt”P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € (Ä·²iú¥u • Æãï#ÜKººú2ƒ)ì@4ó�P@P@Pqà Ù-õÕ´ |«ø&�ÓøKÁÜFøþòäP}$aÞ€=€ ( € ( € ( €>&ý¬>Áã4ÿ‰þ�¼3ñ{A¹�4ý^ÆQbU„Ɖü!ç‰.$|yÄ‘©>‘¨í@=P@P@P@P@P@ÑøNöK-NhØ…¹¸K)Ttxî˜Eµ‡p²2H=ÐдP@P@P@‡â[Ù4ý Rº…ŠJ�ãq÷‘î%ŽÝ]} Á”ö ù΀ (Ï>&|4ðßÅ? ÏáïÁ†æÒõHQ>ߣ_ìÚ—–ŽØÊœºµcäÝØ¤Ãäˆç/†_üIð“İ|øÍ>-ÆÈ|ãy�þÁ}`_ʳµ»¼›Ù¶ [™ßÎÓ&ÙÚ†!KÚP@P@P±|8½’k ë'bÉeñm·ü#ß!¸™�Ùw´Ñ·b#�-˜€2‘“€ÊN2(Œ € ( € ( € ( € ( € ( €7¼1m%Ö¿¥$`“ä7/Ž‹«‹‡$ààb"jZ~¬º> ö¾¶š[›ë� Ù —Ó¾3  :‡Û­­Õ ºm©nˆìôP@P@ë¿ ­¤KMNé�ÜOm dñ¸Û$Ìäp2¹Q�O Ž6Ð¥Ð@P@P@P�üH¶‘u >óÊ–ÌÛì$‚ye œ`·ŽyÁÀùI 7 € ( € ( € ÷/[I€ÁQwyqsx&=�ÛƒŒ ·b:äAäPm@P¶xGþEí?þÞÿôºæ€:J( € ( € ( € ( € ( € ( ÿ×þþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € ( +×¼$“Éu¢¼A$bïc+yb69$[I�› ?,RôY@Eå�‚|OŸùçÜ^éø?�Ð?§ç@ ÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%ÐÿO‰ÿèÿ“ºwÿ%Лoø†i͈OÍ$×0Hq’ÙçbqÐc¡+œÐ¬h®�h`€™f”«\Ý2…y�F3²$Ëyqå¶îbY™™˜v€ ( € ( € ( €,QÍ�Ê‹$R£G$nWGYXe$éõ "ÕþÞG3Ë£ÉÅ»VÚiwçø�¶)Ps‡fGÇ ®G˜À*ümý–üSãg¶ñ·‚-¿áøŸáãΗªÛj:u Ö>È3 �ôâé\¢¯—c"²¢Ÿ±^ï±pö ¿þ*jâ}7þÿ‹>ó­µß_4\º‘±o.êûN¶½–óá+¿RÓ¢Þö¹ûL!¬]Z§¿á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwNÿäº?á ñ?ý?òwOÿä£ü¿:ÞÒ>ÞI2K¬I½º�ZÚ—cø ‰º(�ñ—VwÇ ¨O˜ »QÃpÄ‹Q"ÇhTDUTUéô Ð@P@P@P¿ Zëö‚ ÉŠh‹5µÒ¨g…Øa�â|/™WvÕ!••Y@<žçÀ~!†B°ÁÚòÉ Ì†à•¹xuÀè c4[þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK þŸÿÐ3ÿ'tïþK  að/‰$p¯g¸'ýd×v¬‹îE¼³Iù#}?¼êð½¾�È\\ßÌ¡f¸ÛµQ3»É�O̱VUfQ@:š( € ( € ( € (ÊõïI$ò]h¯I»ØÊÞX�ŽIÒcfÂOË…}FP@9càŸçþA¹÷º~çtéùÐÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉtÂâúäî�ÿÉt«¦ü>Õg•N¢ÑXÛ‚ �dIîwXÄEáŽ7»ü�|¹8Jõû+;}>Ö;XÄP@›G'Õ™�Vwb]ØòÎY�Zµ@P@P@P@º¶•i¬ÙIev¤£é"àI«÷%ˆ�pÃ$dfFXŠòßk¶ò2Ú,ñdì’9¢�ÊößÃÆªÞ¡AþÙþ ?ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ò]ð„øŸþ�Ÿù;§ÿòQþ_�oio$™%Ö$ŽÞÝH-m ‚K‰±üDÝHxË«;ã…T'ÌP]Š(áŽ8bEŽ(‘cŽ4*" ªª*€ôúPè € öÏÿȽ§ÿÛßþ—\ÐI@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € ( €*6¡`„«ÞÚ#ª×0©P\ù}s@ þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(ÄSÃ8- ÑL£«E"H}J~¿–(Z( € ( € ( € ( $I 2Ià:’{(¡ÔtðH7Ö`Ž Ý@úåÇòü¨äoÚGà‡Ä¦³ø�ðç\²ð§ÆŸ y7š¹g¨A`5ï°|ÖÚf©rŽw‘…ò´½RPDJ³õ3Mtk _³‡í5mñ6¿üCŠü`ð¯™g¯h×Á4øµÏ°þêãTÒ¡”¢Çr…KêšTe�±?k³iÏ›P«¿´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øå(Ôtò@Ödž€]@IúaÏòüèØ €A�G ƒÐƒÜ@ @P@P@P@„€ $I<RO`T:Žž úÌÔ¨\¸þ_•'ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(Úºº‡FWVä2�ÊG¨#ƒøA@ € ( € ( € ( € (£jJ½í¢0ê­s ‘õÁ—×4ßí-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(Úºº‡FWVä2�ÊG¨#ƒøA@ € ( € ( € ( € d’Gï–D�¤uEÿi°={þTWûKNÿŸû/ü ƒÿŽPý¥§Ïý—þAÿÇ(þÒÓ¿çþËÿ ÿã”iißóÿeÿ�PñÊ?´´ïùÿ²ÿÀ¨?øåÚZwüÿÙàTür€í-;þì¿ð*þ9@ö–�ÿ?ö_øÿ ŽžHú̓Р¨ ?L9þ_�[ ‚2äz{‚(h € (Û<#ÿ"öŸÿoú]s@%P@P@P@P@P@PÿÑþþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € ( _Å’ÛÛCLSíM ‘— ùqÊdc̃wª©*H ? € ( € (  –’ØÜÅÅóÛéú�Âmòîc #Óu) ùýŽó~žÃì éàÁâ±áMxá´×ñpÓmƾÚ@eÓΡ·÷¦ß.ìmûA„-³\ùÆÕØÂŠÓÐ@P@PgáKÉYç²v-ÅçÇœŸ,‡TuSÙ[z¶Þ*Hêå€;Z( € ( € ( € ( +Åw’«ÁdŒV&‹Ï“a.ȊǺ®Æm¼‚XÑ €q”P@P@P@P@P@tÞ¼–;ái¸˜nC°äªI4�ײ’«`|ÙÉ @…@P@P@P@Ëø¢ò[{h`‰Š}©¤2ä. ™LŒ`9�nõU åIçôP@P@P@ÓxbòXï…¦âa¸YÃ’©$hÒ^ÊHR­�ódg$%zP@P@P@P˜k·’Ýjì|»y^£çjˆÎÆ`:nv‹c$`r¡h€ ( € ( €;? ^JÏ=“±h–/><äùd:£ªžÊÛÕ¶ðRGW,ÚÐ@P¶xGþEí?þÞÿôºæ€:J( € ( € ( € ( € ( € ( ÿÒþþ( € ( € ( € ( € ( € ( € ( € ÍÖäªÿØ6ûÿIe  € (  ­_L]NØG¸G4m¾ • Œ2°ìq€HÉà«q áÍ]IÙ\ygƒéºToÍG¾:PáÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñúÔÓ<5sçÇ5øH¢�•ü ë#ÈTä)(ÅU3�Çs1(Q’ôÝP@P@P@P@`ëz?öœi$L©s`»òD<ùlGÝ!¹FÃIÛ”�>ÕÁ#ì�½ÄöØ?LÌéùÐÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€xwW$²÷3Û`}q1?§å@~‰£ÿfFòJÊ÷3 ³%#AÏ–¤ýâ[—l($ ¹€7¨ € ( € ( € ( €0u½ûN4’&T¹„0]ù "|¶#î�Ü£a€$‚mÊÈêà‘ö@Þâ{l¦fôüè?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùôÇ¿Ú-¸ÿÈçù~tÓèzØ9ºº*g*R8ÐîûŘpÎÀc 6ªçæbÔÓÐ@P@P@P@ejúbêvÂ=Â9£mð¹¨la•€çcŒFH 0XˆojêHÊãûË<?MÒ£~j=ñÒ€ÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÓÿh¶ãÿ#ŸåùÐO¡èo`æê詜©HãC¸DïaÃ;Œ(Ú«Ÿ™‹PO@P@P@P@Çë^šæáîì¶3Js,,ÁürèÌB�ÝY[n�[$Pü#ÚÇüùÿäÅ·ÿ þícþ|ÿòbÛÿ�Ðÿö±ÿ>ù1mÿÇèÿ„{XÿŸ?ü˜¶ÿãôÂ=¬ÏŸþL[ñú?áÖ?çÏÿ&-¿øýð�kóçÿ“ßü~€øGµ�ùóÿÉ‹oþ?@ <;«’Ùû™í°>¸˜ŸÓò ¿DÑÿ³#y%e{™‚†Ù’‘ çËR~ñ-˶…ÜÀÔP@ížÿ‘{Oÿ·¿ý.¹ ’€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ÎÖ:F¨$�:øI&ÚP’Ièõ û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(û5Çüð›þýI@Ù®?ç„ß÷êJ>Íqÿ<&ÿ¿RPök�ùá7ýú’€³\Ï ¿ïÔ”}šãþxMÿ~¤ ì×óÂoûõ%f¸ÿžß©(Ú<&¬žÓÕ••‡Úò¬ ‘›Û’2# 短tTP@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@zF�ÿ ›Oûoÿ¥3PÅP@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@]°²’þå-ã;AËHýDq¯Þr;œ�ª8Ë0€K(w…¦D�M¸•€åågfcê@(ƒèª {ç47ö>™ÿ>PþMÿÇ(þÇÓ?çÊÉ¿øåØúgüùCù7ÿ ûLÿŸ(&ÿã”céŸóåäßür€ì}3þ|¡ü›ÿŽPý�¦Ï”?“ñÊ?±ôÏùò‡òoþ9@ö>™ÿ>PþMÿÇ(þÇÓ?çÊÉ¿øåØúgüùCù7ÿ ûLÿŸ(&ÿã”L?òåà~»Î?/ÏÏë 0Â÷VA”D7KfeØ>ôˆ[sƒæega´¤µ€9( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €=#@ÿ�M§ý·ÿÒ™¨b€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@u>í7G¸�@ú?ú Þ€ ( € ( € ( € ‚èmpC ý l y5P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@‘ È&ÓþÛÿéLÔ±@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@u^ÿ�‹¿úâŸúvÔP@P@P@P7ñï?ýq—ÿ@4ä´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@zF�ÿ ›Oûoÿ¥3PÅP@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@u^ÿ�‹¯úâŸúvÔP@%ñgö†øUðSRðv�ãÿgê¾8Õíô�N³¶—Q¾Hî%û9Öµ K_2âÓC·º1ZË|br×ˆí¡¸òn�¸¶Ð@P@P@ÜǼÿõÆ_ý¨Éh € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ô�þA6ŸößÿJf  Š( € ( € ( € ( € ( € ( ÿÑþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@kè·ëax\ù2¡ŠR9Ø NÖQœr˜…b FITY#uta•t`ÊÃÔÁü(ôóí?ûNøOöoð‚_^Fš÷Žõõ–×Àþ ·“7ºÅÿú¥½½H³=®…g;Æ/.‘|Û‰Z; ÷s)@ý—f/j+—ö�ý¦]õ#tÔ|5á½F0lþX:æÁšÁ³ž·mlË™¦F¦/ [}òúü³É¦€~‹Ð@P@P@zÞ¥ ­¬°+«\ÏF±ƒ–Eqµ¤|}À�™ÜY°í hÎè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ô�þA6ŸößÿJf  Š( € ( € ( € ( € ( € ( ÿÒþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ô’Hþãºg®ÆeÏåþ–(çïÚ'ö�ðçìýá/íMNi5jë5·ƒü!Ó‹ÝnýB¯Ÿ>ÀòZhörI_ßo¼––«5ìöð0€þγ狼Aâ³ûIþѲK¬üQÖš+ÿ xkPFû/�,F_M•ì$gK-RÖHÒ°Ãñ±¹ºßâ9¥—MýûMÇü÷›þþÉ@Ún?ç¼ß÷öJžßP»¶•&Ži )û®îèëÝ]I©ùT«eô-;RƒQ‡|$©�4$å£'¸?ć+�ÏCµƒ Ð$I $œ$’x¤ÿJáõ�q§&ÚÍÙ`S‡™IV˜ŽÈG+#¨ _¿ÉÅsßi¸ÿžóßÙ(ûMÇü÷›þþÉ@Ún?ç¼ß÷öJ>Óqÿ=æÿ¿²Pn'ûþ¼îôL”åtP@P3«x¢ËLv‚57wKÃÇŽ#é$¸l0Ã�ûH@9wñ¾¤IÙkb«ž¥Ãœ{•¸ŒïŽ}°w7þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäºó=wö™ð7†î¤²Õ¼Qá¸îâfŽk{8u=ZH$Sµâ¸]%¯Œ£pñM²E9Ü£P ¿ üwðÿŒK'†µÏj³ª™Î#u úƸ +i÷W0^ˆ� M¸Œì‘@�ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK øÛûQiÿ|0umV :ÿ]Ô¶þðÔáou›ånl];[i–¬ñ½ýû#,JÉ )5äööó€|íð3áo‹üMãcûFü|Škâ¤ÑÞxGÂÚ¤�;ÁVJLšlÃLó‚ÙÞÙFùÑ´ÇóŒ]µ+ã?‰&yôð¼á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK  oã…��„Wúö±áí °f�o$™gºUÿX°Y-ã]]¨È,K·#;N eÍûb|:ñ4Öúv‘â}ȼh· ª&«§ÅquÆñÞ£™l¶åŽ"�¦w�òHàP`¾9Ô�UÒ5ÑÔ2:ÇpÊÊÃ*ÊÂì†VAÁŒñ@ÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’è ¯ˆvVó]ÞÿdZZ[ÆÒÜ]]míà‰ZI¦–õ#Š5³»ª�É#šò›¯Ú»áͥɴ—źʬT½®Ÿ¯^Ûdw¶Q\Y²ú:ÎPö'PDÐþ,[x–Ìj¿ðþ³g»cO§Ê÷+˜ åL#¾f‚`¤†eŽUnN†€6á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK þmWþ}´ÿûõsÿÉtÂmªÿ϶Ÿÿ~®ù.€øMµ_ùöÓÿïÕÏÿ%Ðÿ ¶«ÿ>Úýú¹ÿäº?á6ÕçÛOÿ¿W?ü—@ü&Ú¯üûiÿ÷êçÿ’èÿ„ÛUÿŸm?þý\ÿò]ð›j¿óí§ÿß«ŸþK  Öž8}à^Ù&Ây’Õ˜2�_*Ráøÿ¦‰@Í¥åµô qk*Ëôa�TŽªêpÈã<«zARÀh € (Ò4ùÚÛý)š€6( € ( € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@�âMI´Ý5Þ#¶âá¾Ï ±–V/(ô(Švžp섃ŒP�’I$’I9$òI=I=É4”P@P@P@|eûM|WÔtË„ø{áë¹,ž[Hî|K{níÉ†í ¶Ò#•J´1ÍnEÍñOšxg··!k˜eør€,Ù^Ýé×v÷öSÙ^ÚJ“ÚÝÚÊð\[ÍÜ’Ã,l¯©ä2²‘ëÏÊú{ð/âTßü"fÔÊèsG§k,Šn·Ç¾ËR¨ ½�%YQ º·¹1Ç&$Pj € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( øÓñ£Ã|-&¹­8½Õï°xoÃ�Ê©}­ß¢¯Ê¼Hm´ûc$o¨êÇk$q¤÷“ÚÚÜx'Á/‚þ'ñŸ‰×ãçÇ„7¾-¿1]ø?ÂWQ2YxRÅ “N¸›O•œ[\Û+ùšV— wÓ�›SÔž}zv{ ·h € óߊ>:‡á߃u?´i=âyvZM¬»¼»�RïrÛ$›J±†YnçUtf··•Qƒ• Ê�w^ÕüKª]ëZåýÆ¥©^Èdžêá÷1þäq¯Ü†—Áo¤0Æ8£DPŠ‘@VþÍ¿õ#^²ð³w%΃¬Èm´o´;9Ò5GÜÐAnÌY–ËQ“0aû¸ï$†h–!%ËJú@P@P@P@P@P@P@P@P@P@P@P@Pæ7Ç/Šú��|G{¥Ù]É„tk¹m´ë8]– Fkgh¤ÕîÀ?¿’wl„ƒm­¡ŒF‰4·(„PYàÏkÞ×-µÝííî!d[›bÌm5Mᥱ¾„³[Ê9d/¶x)Ñ%PÖ? xŽËÅÞѼK§åm5‹®Ò69x$9K›YÀ2ZܤÖÒùKÄÅr¸4ÐÐ@P@P@ÑxkS}?QŠ2Çì×n�L„ü¡œíŽo@ѱ<þì¸î €zõP@zF�ÿ ›Oûoÿ¥3PÅP@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@Áxä7—¦°ÎÀ÷A½7€¦}ð¯Ž=zPžP@P%ãŸxká׆µx³Q�NÒ4Øòîp÷wÙì4û}Ê÷w÷n<»{tûÇt’4PE4ȃð“âD<§xÖÛAÕü;£5ÜQXêè<ÉÖf‰o,®Q#ŽúÂàcÉ»Ž4C*OÒгP¥Ð@P@•ß⹋âߌÅÐmï{g,e�ù­¤Ò¬Ô©=T[ùhÈJÿ äPÙ²W?Ú>8™C 1e¡Å)ÁØ×->¢ð ô,‘-ÇÈÎ7 û–€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( "øËñ“Âÿü+.¿¯H.µ¡-¿‡¼?¨—úî ¨•Uͽ�¹xäÔuFŠÎP{¹í-n>yø-ðoÅ|RŸ¾ûþ¼îôL”åtP@�®éŸÚº|–ë�:5¹8Î@@ROE‘Y£' ÜýÑ@5$rC#Å*4rFÅ]a•‡qÈú~Y P@rž6ñ·†þxkQñgŠõôÝL‹t’7Í=Ìí‘occß»¾»qåÛ[F7;Ìc‰$•>ð‡„¼Yû[ø¾Ûâ_Ä›k­àÖ…w/ü!> idOøH Rmk›’¾W›o)@5}U@7l§HÒ¶[Eq=¸èM½½½�¼–�Ckkk VöÖÖñ$ööð"Å C¬pà j±Åj©*¢(P€M@P@|³ûD|¾ñœpx¿Âöÿiñ›kö]GL� 6¯§B^Hdµè$Ôl˺¬÷—–Ì"‰ŒÖöðNù÷qmqg<Ö·pMkso#E=½ÄOðʇÐÊ«$r!2:«)à�î€køwÃ:÷‹58t�iwZ¥üì Emd…‚™î¦8†ÒÙ 2æåâ‚1˸Í~¡|#øqÃO Á£™#¹Õ¯%þÐ×/bËšþDDò`,›K8‘`€°S!YnLq=ÃÆ€£@P@P@P@P@P@P@P@P@P@å>0x[àÏ…&ñˆ¥óîæó-ô Q5 wQT -­Ã+˜m¡Ü’jƒÆðØÀÁŠMq-­´à6üø?⟉Þ*‹ã÷Lj|ýRãʹð'‚.bt°Ð4ås6�ws§Ì[ÈKpþ~•§No9ÛXÕ]Fdò€>é € ( €9ø;Oñç…µ_ j,bŽþmî•Éc} lï#RWq†eS$a“΄Ëp²’ •þ4ð‰¼ªË¥x�N–؇qi|ˆï¦êQ.žÂóbÅ:*ÏVâÜ·—s2†EãÕY˜*‚ÌÄ*ª‚Y˜œÉ$œÉ< ÐÛ³·ÁMVÃS·ñ÷‹¬eÓͬn|;¤^Fc¼iæF‰µ[Ûy’Õ"‰�l`™Vy%µ•‰!·{€µè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € üµý«<5¦|-ñëmÍœéã)n¯´ÿG2 FÎý¤Íã5"_ìy.%ßmrƒjÊÒiêŠÐÆò€x…&«.›šÊEì›�’%(V69ŒLœªLùÕÐ6ƒµ÷ª€{/Ão…~%ø“ªÃo§ZÍm£G2�S_šP«)™"‘‚¥ÝùCˆ,as#;+Ìa¶N€©ú�aáíMÐô¸¼�?J³‚ÆÒ>¬"·�P4��¾Y2M!’Vy%�jP@P@P@ÕøWH’öñ/eB--HŽ%¸Nc�sÔ#bI8UN7PªÐ@P¤hò ´ÿ¶ÿúS5lP@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P>§¡iú¯ÍqIñ�s 6À J²È ˆ)^ws/àT$ìÔÙW<µqîEÄ`Ÿ|sÛù€ÿ/ýE?òKÿºè�ñü¾øaáM[Æž4ñL:Fƒ£ÃæÏ<–[渙¸¶°°¶‚KÝFö\Ciii%‘¿…º€|ðóáw�?lÿÃñ;â2^ø_àf�{0ð/„eWY¼TðÊc’æuŽX·ÛÈcÙ¬ëÄK"¾‡¢¸Š+ÛËPÒ;_‡vÖVÖövW�ZYÚAµ­­¶š�[Û[@‹AW+0ìqEªFŠFÚ?ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@z§Áï 뎲kvz±" ¨ú§‡,5UZí§` Àü³@tï†^‘Ùt—°Òí³»ìúv�oeïïyVÓÅ}ögëÎÐ ÿð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîºñÏ�þ4ðoÀÝx»Åšï›<že·‡¼?on‹ªx“VîŽÂÅæO.÷$šŽ¡$mm§[7›(’gµ¶¸ù“àgìëã/�^"·ý¡~?“m5ÑŠçá×€.m${-'IW3éÚ…æ�<±ýžÙ7-Æ•aqºâöV:Ö©ºI­ÑÀ>þÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèµçË=BÝí/îm¯­e’ÚóKŠæÞAèðÍrñ¸ÿy[ù•ÆÓ¾ xOH¸û^“¦xwKºŸ´éÞÓl®2zŸ:ÛÈ“'¾“ß=(¢ÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèç�Ú+â…gï .£¨jK­x»Y[x?Áöðm½ÖoFÔ77.e–ÓG³’HþÛ{ä»;´vv‹-äñÇ@Wû=þË^*Öµ�ø_¯çâV¸É} xnöÌ˃,™sc$Ö�p±Zj°ÂÁl4ÅV]<ŵ¹&m<ëK¯�þ ½¹7—º7†.Ý×…4©îYÏW3Ê$”±îÆLžäâ€:8~Cop[ßÇ1(H¡‡OH¢�DŽ4ºŠ;*€`3Š“þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿîº?áÿ¨§þI÷]ð‚ÿÔSÿ$¿û®€øAê)ÿ’_ý×@ü ¿õÿÉ/þë þ_úŠä—ÿuÐÿ/ýE?òKÿºèÿ„þ¢Ÿù%ÿÝt ÿQOü’ÿià»\=ÕÄ×{N|°·³…/!îÈžô×EpF‘CE ©jzÉÏNI$ä“@P@P¤hò ´ÿ¶ÿúS5lP@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@qþ=ñï…~øSVñ§ŒõX4}FƒÍ¹¹”î–i[å·±±·½¼Ô/eÛ�œ!¥žf 6¨g@ÎOx?Æß·7Žm~'üN´Ô<3û=x^þoøA< f’ |[4¤º»xŠù±Ìc1ëzÔD®ø@•vj:…¸ê••ž›gi§iÖ¶ö6ÐYÙYYõ¥�¥´k ½­µ¼*‘Ao(‘C H‘Ç*"ª€(ÍP@P@P@P@P@P@P@P@P@P@P@P@yÆŸ�> ø໿x¾ë'ç¶ÐôKyj¾#Õ¼²ðéºtMœv{ËÇSmamºâ|þíã_‚üeû@xÒ×ö”ý£­wZ7—sð»á�Â?öV—¥,ŸhÓuí:~šty[­>Îé~Ó®\Ÿí­X=«ZÛÝ€~“P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ûBþОýŸ¼ ÚÖ°WTñ.¨³[xGÂPLÿ]ÔUTo“ÞÓH³y"}KQ(â%xííãžúæÖÚpžÿg_ÙïÅž)ñaý¤ÿhíú¯Ä}a¢¾ð„¯¢+càmšú@P@P@P@P@P@zF�ÿ ›Oûoÿ¥3PÅP@P@P@P@P@PÿÑþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P@�޼uáo†ÞÕ¼eã-ZßFÐ4ks=ÝÜç/#Ÿ– ;82Þ_ÞK¶ ;8ç¹�Ö8Ð’hóƒÂ^ñ·íÕã›_‰?íu ~ξÔfÿ„#Á&i ŸÆò42\ÝI_4JPÅ­ëQ6ÈSÌð WT·ýB°°²Òì­4Ý6ÒÛOÓ´ûh,ìllàŽÚÒÎÒÚ5†ÞÖÖÞX ·‚$X¡†%T�Q(€[ € †ââ Hd¸ºš+x"¤šy(‘}^G!TgŽO^9 NOˆ>‰Ê6µ �Lvš„Éø1ø7à‚ï¼gãÍ‘GºÛHÒ-Ú3ªø‡VhÙíô­.eß,›wÜ\6-ìm–[»§Hb!À>)ø-ðsÆ_´‡�­iÚ*Ïf†¥'øYðÂáévºP“í~£¨Y\*ïÒ�Ùum ÔKqâk¬jº”i¤ ++ÐÒÚ( n. ´†K‹©¢·‚!ºI§‘"‰ÕärFxäõãšääøƒàøœ£kQ’ Çi¨LŸƒÅi"èUÈ=FF(?øX¾ ÿ ÏþSµOþA þ/ƒè3ÿ”íSÿ�hÿ…‹àßú ÿå;Tÿä?ábø7þƒ?ùNÕ?ù€øX¾ ÿ ÏþSµOþA þ/ƒè3ÿ”íSÿ�hÿ…‹àßú ÿå;Tÿä?ábø7þƒ?ùNÕ?ù€øX¾ ÿ ÏþSµOþA þ/ƒè3ÿ”íSÿ�hÿ…‹àßú ÿå;Tÿä?ábø7þƒ?ùNÕ?ù€¿üìk* þõޤ‹ø³Y*�Ä�ÐÐSee¨À.l. »�‰[yRTÜ:©(N×nFÃ/B(ÝP@P@P@P@P@P@P@P@P@aj~&Ðtgòµ-RÚÞ`0ó\(# ´é,ÈåK&¶q@ßð±|ÿAŸü§jŸüƒ@Añ§ö¤økðwÂ7:íÕókZíÂK†¼/må­æ»¨ª�¨f¸µHí4ëf’95-AÖAm W7“ZZNò¿ÀÿÂkãFý¤?iMXj<¾–;Ÿx&ãMÔŸKð^Ÿ´šeÌ–e¸‚ ›Es&‰¥%:[;kœ—>$¹wÓ@?Aÿábø7þƒ?ùNÕ?ù€øX¾ ÿ ÏþSµOþA þ/ƒè3ÿ”íSÿ�hÿ…‹àßú ÿå;Tÿä?ábø7þƒ?ùNÕ?ù€øX¾ ÿ ÏþSµOþA þ/ƒè3ÿ”íSÿ�hÿ…‹àßú ÿå;Tÿä?ábø7þƒ?ùNÕ?ù€|Dðq lŽ}l50?l@‰ü¹ —NÕ´ÝZ#6›}oy�à fŒ‘�%ŒâH˜ŽBȪHç¡@P@P@P¤hò ´ÿ¶ÿúS5lP@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@P'ã�ø_áÏ…õoxÇV·Ñ¼?¢Û5Åíää–c÷aµµ…s-Ýõä¥mììíÑî.®$Ž‘�…~ox[Âþ6ý»ø;ð‹Æ´ÿ�m?h¿ÚÉ ð•» ¾|-œHÚZižbÍg©jsªyºK”Šä}¢¸ñmÒ¥ýìQxz>ÃPý1 8€JZ( —¼sâk�{W¸…ea¦XO$p+~íÌDÆ÷nÊòLÁŒlyޱ€ ‘œˆ € ( € ( € ( €: ø†óÚ”W¶Îæè·¶¡¿wuoŸ�~Y �óœ�ÈdFúÒcž(§‰ƒE4i,l:4r(taìTƒøÐ”P@P@P@P@P@P@P@P@P@?�¼G/‡´]Ö�¶þþCkjüìÝ=È«D˜HúíšXœ†Ud`˜žG•ÞIä’Fg’GbîîÄ–wvË31$³1É$“’h˾+|UðçÂo Ë®kr ïn<È4Mou‹äLˆ¢Îã ¤;‘ïï™+H™@\Ímm8…ü%øUâ/x�>6|gCs­Ý®|!áKˆÙ,¼?bŒe°¹šÆ]€8—LÓä̰Hͪj>n«>ëp°¨ € ( € ( €4t­V÷E¾‡PÓæhg…‡såËAxfAÄ�È;2•p® [é:ŒZ¾›c©B Çyoá ÆÌ?y€Z)FÄ eN1šÐ € ( € ( € ô�þA6ŸößÿJf  Š( € ( € ( € ( € ( € ( ÿÓþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@Êø×Æ¾øwá�[Æ>0Õ­´_è¶ÆæúúäŸP�Û[B™–îöîfK{+;t’âêæHá†7‘ÔPæß†¼9ãoÛ¿Ç6Þ<ñݶ§áOÙ·ÂZœßðˆøHÌö×~5½¶‘¡–ææHXy�( ±«Ã!‹N…¥ðkÆÕõx€?Ptí;OÑôû-+J²µÓtÍ6Ö ?O±‚;k;+;XÖ{[[xU"‚"EŽ(£EDE  @h € (â— ®êùÞƒç®àpÙ÷Îs@  € ( € ( € ( €;�‡�Œt¢¹Â­ù|wû6íF}·²þ8ö ¨(€ñ&¹¬Xj gû5¸Ž6�üˆŸÏܹvß4R�•÷GµÆÌžI {þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJà¾$ür´øUá[ïx³[ÖVÃÊ´´ŠÚÁõ _Ptv·Ó4Ëv‚?´^\'–X`…eºº’Xfž Šþx3Ç?´çŒì>:üu‰“Â:syŸ >Ü"¶˜Ö"Uš ûëŠ(gÓ&hâžy.-„Þ)¸H¦¹�Ëå~îöùŸißþ¦(³Ÿ->öìcŒdîì(â— ®êùÞƒç®àpÙ÷Îs@  € ( € ( € ( € úÿá—Ãú¾w�Lž»…”³ïœæ€*x¢þïNÓážÎ_&W¼Ž&m‘I˜Ú‡+‰c•FZ59 åÀ8,(ƒÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ͧ‰µù.aA?Ú‹H‹ä}šÛ÷™`6æ+xä\ôÜ­Ç_zõzñ_Œ!¶xy†vÕzn#O)Ÿ|+ãñ ’>(üPðçŸ M¯ëÒù·oƒGÑá‘ûY¿ •·· Ë‚=Ê÷·Ž¦+H[qLööó€|ÿð§áˆþ#ø’/�Ÿ¢óofòî<àùãac£X#¬.ç²”Ÿ*8w ´ë)CK$Ìu]DËw*û&€ ( € ( € ( €>¤øxx;Fœí½#?ÝmJñ“ðØWØ Ò€ ( € ( € (Ò4ùÚÛý)š€6( € ( € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP@s2ñ—†¾øgVñ‹õkmÃú%³]_ßÝ6T±AK™n¯.¥d·³³·InnîeŠÞžYhó_Ãþñ·íåã›xÖßTðŸìÓá RoøE|,e’Ö÷Æ÷¶ÎÐËqq$2aä�‡WÕ ’Ht˜^ox~g¿}_WˆõLÓ4íN±Ò4‹]3KÓ-`±Óôû#¶³²³µ�a·µ¶·…R(`†$XãŽ4UU(õP@ó—�üw¥êZµ”6•y+ÜÈÑ)sc<‡|É0]Å i <2ácPâÚê†P4 € ( € ( € ( UgeTRÌÄ*ª‚Y˜œP2I$à2O9 øoá �$K­j�´w0ù–² Konå^IgRsÓEXÙVH£Va¥(€±@P@P@P@P@P@P@ç_þ)x?àïƒu/øÛQZ]‚ùvÖÑì“QÖ5)ÚÓGÒ-ZHÍÞ£xco.=ñÅ)5åÜÖöV×|ð¯á‡ŒÿkŸÙ|~øñc&ŸðÏM•ßá_ÂéZV°¾±¬�ê:„2¬fãI™¢†{»¹ ŽoÜÇ1Aá‹[+°Ó¤D‰8ÑcŽ5TŽ4Pˆˆƒj¢*áUU@UU`` uP@|åãÿ]éz…Ö­eÍ¥^J÷24J\ØÏ!ß2LqHBÏ ¸XÔ8…¶º¡”Í( € ( € ( € ( ËÂ>½ñ%ì,ÐÉ“Š×—Œ¥QÑ/mlço™<˜ØJó$èˆàR*ª*¢¨ŠT UP`ð P@P@P@P@P@P@P@P@P@|ñûLüGðOÆ÷^"ñ}ðŠî9ñá}*S©ëúÊÆq¦YBN|—…Ù¯¯\}ŸN‡mÔÂGX-çüæøið³Åûþ¼îôL”åtP@׌Š( Š8a�!†H¢Š$XâŠ(Ô$qÇ€¨ˆ *"€ª Pè € ( Œðy‚zÈ“Ãú Îd›DÒ%‘‰,òi–R;É%šÄžù?\PðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅ9|9áä`É èÊã.—b¬=Á??Ë®ª¨¡U@ ªª�ÐÀ=²(ÔP@P@P@P@P@P@P@P@P@Oñ—ã/ƒ~x.÷Æ^1»Ûn¶Ñô{wCªø‡VhÙíô½2#t�·Ì¹¸}¶ö6Ë%ÕËˆÓ ñgÁ?ƒ~3ý¢¼mkûI~Ñv˜ÒK�…Ÿ nΕe¥‰<ý?R¿±¸^t°v]Z[ÜÄ·#»ÿ‰¾¦§Lû¥øé Õ�•ò„½³µ¼Eû©uo Â�¢ÌŽå@ßðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅðŒøsþ€'þ l?øÅ(ðׇAh(#�F•`ú#�óé@ÑC¬PE1 ÂÇ,q¨ôT@GÐ~t%P@P@P@‘ È&ÓþÛÿéLÔ±@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € §¨ÿÈ>ûþ¼îôL”åtP9âïxsÀžÕ¼[âÝZ×Dðþ‰j÷šŽ£våcŠ5¤q¢†–âêâVK{;Kt–æòæX­­¢–yQóGGÑümû{xæø¢WÂ?³ƒµYáðÿšö—þ9Ô-á’yÞ+%Ä‹¾OR†Ym´i%д9åÕ&Õõdý@Ò4�/AÒôýE°´Ò´�*Ò 7M°‚;k;+;hÖ(-­ ˆâŠ(Ô*"Œ;ó@4P@P@W»¹ŽÎÚk©‰ÁHØêqÑW ÜìB®N2Üâ€<¾çÅúÄÒ3A$v‘çä�!†B°gž)K7©A=�–€+ÿÂS¯Ï÷þKYò%ð”ëßóýÿ’Ö_ü‰@ü%:÷üÿäµ—ÿ"Pÿ N½ÿ?ßù-eÿÈ”ÂS¯Ï÷þKYò%ð”ëßóýÿ’Ö_ü‰@ü%:÷üÿäµ—ÿ"Pÿ N½ÿ?ßù-eÿÈ”ÂS¯Ï÷þKYò%ð”ëßóýÿ’Ö_ü‰@ü%:÷üÿäµ—ÿ"Pÿ N½ÿ?ßù-eÿÈ”±¤xºðÜŤRhfu�ϤrBÌv‡"5Ž6�$oó)ãkzEP@P@P@P@P@P@ÂüHø‘á…Õ4XÜhßô+™áZ|6y$k�¤ßñû|¸Csa;Â�¬jŽ‘¾¿/Ö&‘š #´�?$i 2½ƒ<ñJY½HÚ è|´_þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD  bñn·†{ˆçPFc’ÞR;ŒÃ .3ìÿ—ð€z^—¨GªYEwÙ¿+$däÇ*:g¸èÊxÊ0$q@P@P@P@P@P@P@P@P@P—ü^ø»àß‚ž ¿ñ¯Œï¼‹Kp`ÓtØ oªkÚ«£µ®‘¤Û¼‘ù×S”,î̶övé-åܰÛA,ŠðïÁÏ„^3ý§|mgûF~ÐÖF @Dß ¾N´ÈôÏ1g³Ôµ IÑ<Ý%Ù"ºQs \x®éc¿½Ž/çØ^€~˜€p€Èx�Äri’-�š¡¹($–Yå…[î*¯C#¸–UYx%² ü%:÷üÿcÛìÖ|~v¤þgó þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€øJuïùþÿÉk/þD þ�{þ¿òZËÿ‘(ÿ„§^ÿŸïü–²ÿäJ?á)׿çûÿ%¬¿ù€ž+×U�kµ�à{{P§ëåÛ£~L(Ñ4=]u‹C1Añ?—ûþ¼îôL”åtÎø³Åžð7‡uox³V´ÑèQœgl(Ë(Üh € ( € ( € ( € ( € ( € (‰ø‡ñ |%ªø×ƺ¤ZV…¤C¾Ysyrá…®›¦ÛnW½Ô¯¤U¥¬dmÏ#ESM瀼 ãOÛkÇ6Ÿ~.ÙÝè?|;y8øuðíå–5ñ'•6Æ»¼)å™í&xWûsXS–?ì]%¢Óí§–Ô kk{;{{;;xm--aŠÚÖÖÚ$‚ÞÚÞX ··†%X¡†ÑcŠ(ÕR4UDP š€ ( € (  ½jÒKí.òÖ/õ’F c8Üñ:J©ž1¼Æ“�›œhÅ]6d‘Y VGYXpC)Á Ž=²h´P@P@P@g�É<;Яx^Æk)u)$ò½É�²0ë"°?uŠÆ¯Áƒ 訠€ ( € ( € ( € ( € ( € ( € ( € (;+üWðwÁŸê>6ñ® -4ë1äÙÙòMK[ÔäGk]#HµgŒÜß]b2Ë´ 5åä°YÁqq ~xËö®ñ½—í ñúŬüdí'¯…³y�§O§y¢[mKQ·™#ûF“+GÄÓO Søºé#žx­ü3maa~únª¨ªˆ¡U@UU*ªŒP0`c€€<»Æ3E¨µîÖk{¤ˆ %RX£ØôRU×8ݸã%_h!@P@P@P@ŸàÛ­¬î.fVO¶ÒÚÂÆÚÞÊÊÊÞK;;Hc·µ´µ·�a·¶¶·ˆ,PAH‘C J±Ç* ª(ÅP@P@Vk+–ßqik;zkxeltûÒ+×óþ²t¯úiÿømÿÆèþÉÒ¿è§ÿà·ÿ û'Jÿ fŸÿ€Vßün€ì�+þ�šþ[ñº?²t¯úiÿømÿÆèþÉÒ¿è§ÿà·ÿ û'Jÿ fŸÿ€Vßün€ì�+þ�šþ[ñº?²t¯úiÿømÿÆèþÉÒ¿è§ÿà·ÿ û'Jÿ fŸÿ€Vßün€ì�+þ�šþ[ñº’-:ÂCcg ŽCÅkn>Œˆüÿ>(åP@P@P@P@P@P@P@P@yïÅŠø?àíOÆþ6Ô–ÃIÓ׈öɨjúŒˆæÓHÒ-KÆ×š�ãFÂ(ƒ¤QD’ÝÝËoemqqÀŸ ~øÏö½ñÅŸÇ¿ŽÖéß ´¹]¾|/•¥6:…—𝣍E"Eö­*fޝoe†9¼Yuj#ƒÃ6–v7@§QÆ‘"E$qÆ‹qÆ¡4@@UEPU@ 1@ €è’)I]a‘Ô2°ô*rú�ÏŠ£ý“¥ÿÐ7OÿÀ+oþ7@öN•ÿ@Í?ÿ­¿øÝÙ:Wý4ÿü¶ÿãtdé_ô Óÿð Ûÿ�Ðý“¥Ð3OÿÀ+oþ7@öN•ÿ@Í?ÿ­¿øÝÙ:Wý4ÿü¶ÿãtdé_ô Óÿð Ûÿ�Ðý“¥Ð3OÿÀ+oþ7@öN•ÿ@Í?ÿ­¿øÝÙ:Wý4ÿü¶ÿãtdé_ô Óÿð Ûÿ�ГLÓc`é§Ø£Œ––êÀû@GçùPê( € ( € ( € ô­ JéV€Œ²·àóÊê`hZ€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € (òÛöÓÿ‚¿þÇŸ±‰á_øó[ñ?Ä_Š1D%Õ~|$Ó´_k~I­ã¸±>3¿Ö|AáÝòÞÅ,SÃ¥KªÜøŒYM¢t#augqpòŸÀ¿ø8£ö#ø«âÝ?Â?о(ü}VçìÖ~.ñÆ™¡k·šI–Hµ�kº֧¬h¦é¤B÷מœ¾lÚ¦³ei ¹pÞë[«[ë[kë˜/,¯ †êÒòÖhî-n­n#Y­îm®!gŠx'‰ÒXf‰Þ9cutfV€' € ( ÍmCþ ƒðONý¿ãÿ‚vMàŠOñrKí2ÀxÂ-?ÂGáÈ—TøIkñŠ7Íâäñ7–ž¼�N”� ʼH¯bõ€?Jh € ( {Åž,ðç�¼9¬x»ÅÚ½žƒáÍÊ[ý[U¿“˶µ¶�°i&ži µµ�%º¼º–f¹š(˜ñþÇŸðP/˯Me®ø?öQð^¹(Òì2ÖÚ§ŽµWdg$Ÿ2íдwWq4ö~±™´Û)n5©ïoœô·Dд� iw‡´2ÓGÑ´{Htý7K±�mí,­-Ð$PC €UFI9wbdvggfÔ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( KÇ>9ð¿Ã jÞ2ñŽ«o£h-¹¸¼»œå��Ë¥¤2ÝßÞLVÞÊÎyîn"‰ üßð—…>|;ñŸí—ã›?Ž,gÒ>è—ÿ²øi#Éö]f”}|¤Eö­6g†)5]IâŽOÜD¶6 Ò;wý?†­âŠ"Ž �!†QcŠ£P‘ÅhGh¡UPª  ( € ( € ( € ( € ( € ( € ( € (cNÑ®¯dRñ¼ùæq´•î"VP]�@À^üàP¢Æ‰$q€©ª"Ž�T }Å>€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € óŸŒ>:�áwÂOŠ_%XÚ/‡|oã©VPZ&�Â>Ôõ÷YUYY£+§�à2’¹‡UþG?à€ÿ³ŸƒÿkŽŸ´×íoûIiV|aá o@¸ÑSÆú}®»¥_|FøŸ}â¯x¯ÇZŽ™v�§ÝëZL=´wVw6â+ËûK{}GLÒ.m?Tÿট ?à•ÿ´ž™{ð_ã'íû>þοþë:3ÛxÆÚóÁoÄo@m­on|-®éRÞh·Zžƒ­h7ñK�©Þ-µ�ÌÚfµd¢[o*p™iÿÚ§ÆðOø%·ìÜÿ±GíYá?�Ö¾øëÿ A>2ÿÂ;á?Ú_xDxWâ_Œ`ðlÖSÝø›H·»ð�´ðæ‹c=µÂ\Ûèzn�hR5y¼ÐUý…joø*¿íOñ;öyøëâ¿ÚxWö“áãÙüI¾7Ã% /Ä4õ—º�´­#MϦYÇc©ZŪ߸�AûHÁxÿlßüHÕÿg†¿±ßÂßÞ'ü#ZÆß†Z_…¼Gâm>yµ ô{u/Œ^ ñ,þ$ñ=奘]rëÂú^ƒá=[‹+iﬞâ+»° à’ŸðT?޵'�~8þ̵‡4-7ãçÁ/x‡Äiâ]J‡AmbÛÂ>&µðgŒ´x~ ‰t›_øoÄÚ¾�W^·±Òµ)îb—K²¸ÓMæ²ù½ûÿÁYÿà«?µ¡ø£ðSá>…àÿ‹5‹ k^ ñ¦©áoø;Àÿ¼¤O®Áñ Å>#ò¢Òlu�[X¾Ôü £xVÇUMJÒ;ƒ©NºmôÊ–7`D~ÊðUoÛ›à§íÅáÏØ—þ M¢xzêÿǾ!Ð<¦xºÇBðÆ�¬xsÄ^3>_ÃýbÊ÷À6öþ ñw‚¼YªÞiº ÅÄ66·ZD—ÚêqO¡ë-ÐÆµ·Äßüÿƒˆ|]ãÿ‡ÿ5/Šþ?Ó5¯†úW€þiSÁgqâÏx»ö9ðoƒ¼%¦\ß\Ío›£ŸkÚuLj5IfDÓ4(5-@“ölP«ürÿ‚”Áe¿àŸ~ë¶^‘ðçZøwñâûWÓ¾éZÃy<1©èz=Õ„^-Ð<1ã/�øK4�xvß\Ó ¼ž%×5Ø¢¸ºÒnî`×tùnRàúíð—‰´¯øWÃ>2Ðey´?øFñ6�4ª©$ÚV½¦Ûjºt²"<ˆ�%¥Ô.ê²HªÌB»¹€: (  ø§ÃÞðî¯âÏjöZ‡t)u [VÔ%ò­m-aêÌpÏ,²9Xm­¡InnîdŠÚÚ)®&Ž&ü¡··ñïüsâ ß_&µàÙ#ÀzÓ}’ÏsÙj¿5k6*Î줤º„ѱIçC5—„¬'k+3>¹wuxଞðî‡á-Jð׆´«-@Ñ, Ó´�'N�-ììlíÐ$PApgv-$²3Ë+¼®îÀ4P@P@P@P@P@P@P@P@P@P@P@P@ÉxëÇ^økáMgÆÞ5Ö-t/ h6�w¨ê7Lp«��ÛÛÄ¡¦»¾¼�£µ±±¶In¯.¥ŠÚÞ'–DFü³ð·† Ö<{ãÍ^-Ãú4;呱%ÝõÓ†šV—k¹d¾Õ/äM�¤\»n’V†Ú)®"üÍøqðóÇ·ŸÄ/Ž?,/<=û?xjöqð»áŒ’Ê‘ø™b˜+ß_mò�ÕŒïÿok[Qµ™âþÄÒ|�*ÒVˆõ¦ÚÚÞÎÞÞÎÎÞKKXb¶µµ¶‰ ·¶·�(-íá‰V(a†4XâŠ5T�Q(@& € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ä¼á ˆ>ñ¯€uVÛ¦xßÂ^$ð†¤Æ10[èך5ã‹ —÷²,ºû¥—$Ðñqÿ­ý¨ôïø$·ímûGþ˶W¾ð׋µ-ÃúÇŒ¡ÒõMSMð׌|{®¯…|Jm¬á}Jçá÷Žü9â‹ë¸uí;NÔgØ|)zö�érj—¶›ÿ‹ø­ÿ‚ñÏ‚~"üFø'ká¶�ÆmGÂòÁñÁ¾4øµ{£øNÛN}ßUñGˆl%ñ-¯Ãd¸oè­á�;ÃöÚ4Ú‡ö¥ü�¼º ý¯~x³özÿ‚þÆþñÞ�qáÿøãö¬oŠÚÖ‰x/tÛ|=øÅuáxoà|Ig¨Kà«_ Ý_éÓ,w:måÄú}äiwm:Pô™û6üB×> ÿÁ~üWð†ƒˆ|MðÏö Ѿ!x{ÃÏ�m¬ëÞø1ÿ %…�Ô6ÒÛÜÍo}¨ÙF/£´•o§ŠIŦû·�\ù¾ýŽ<{íë§|`ø­ûzÿÁ\~*|½ð¾¸N›ð«FøÃ¦ü(‡RÑ%Ó-ïî|Gá_^ßZøJKº–] ÛÃ>ðMæ®o,•¯ýCMŽôOþ(Þø)/íJþÖ|Iâ? ?ì÷ñí¼-â;Iã {Ã�ñ«áAÑ5Ÿ»[Y³ø“TÓ ­öºíijͪOtM´˜”…ÿƒÿkï�¿²×Æ�ºOÇiŸü?ñcÁþÓ´ˆž"I­ü/¥x‹Âº¦¹¨Gá�k[H¤µÐ¿á%Ó5MFþÆóT’×Nšo =¤—Iu5¤r€w?¶ßÆ_ÁAÿ೿²¥�ì¿©7Ž4_j¾ÉãA:Yëx'âg‰¾(xëÅÚ<÷0ÛËu¡x3úÝûIªý›É¹O j7Út·ºcé÷€{?ŽÑ_þ‚±ªàxËáÓ€À0 ìWá‡FänGUt=UÔ0Á\оÿÁψ‡àïì§!E2/Ä¿ˆH®ToT“Âú#HŠßx+´q—PpÆ4';V€? ¯Ù?þMgöjÿ²ðoÿUׇ(ßè  /øŸÃþ ðþ¯â¯jöZ‡t)u [VÔ%ÚYZB>gvå�ÝŠE¼K%ÅÕÄ‘[[E5ÄÑFÀ“ѧ�¿à£ŸDÓ kÀÿ²?€õ£åE–²Õ~!êÖg$nIu¢rÁšËÂ:}ÁŠ/´ë—’É(ë†ü7 øCAÒ¼1á�*ËCðþ‡e�¤é:t+�•œ ¶8¢�z’ròÊåæžg’y¤’iØn€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €9xÓÂÿü/¬øÏÆzŦƒá­Íïu=NõÈŽ”…Ž(£PÓ]]ÜÌÑÛYY[G-ÝíܰÚÚÅ$òÆŒùYáýÇŸðQOˆPxׯvú¿ƒeêòÿÂ+ác#Ùê5+Ghe¸¹– 1$Ò®ø5}V{m ÖI|9áÙåÕ%Öµ¤ýkÒt�/AÒôýDÓìô�I³·ÓôÍ3O·ŽÖÆÂÆÒ%‚ÚÒÒÚH ‚‘cŽ4UTUz°…P@P@P@P@P@P@P@P@P@P@P@P@P@P@q~"øCáOƒõŸxëXƒDðæ‡nfº¹—çšâVùm´ý>Ù{}©_M¶ÞÊÊÓ\LÊ£j‡tüÂð�¼wûüB´øÅñvËPðÏìßá=BqðßáÓÍ$/ã ˜Å-ÝëDcóíæh‚xƒ[�‰Ù_Ãz©7÷Ö ­vvvšu¥®Ÿ§ÚÛØØXÛÁgeegvÖ–v–Ñ$6Ö¶¶ÐªCooo $PÃ$qFŠ‘ª¢�@h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € (åoÚSö"ý•kë}*/Ú+࿆>#]èPÍm¢ë·k^ñ^—i;;ËaeâÿꚉáÓZgk“¥ÿj¶œn¿Ò�¯ž<ÊùçàŸüÿþ áð Åš_�< ûŽ«áýCâ”’j>Öõ? ë6zÞ‹§ Ë©øcS¶Ô¬muO³Íq®¤ñ\EŸ³ü·ö8ý޵mKij÷Á]Áþ,ÕìŸL¿ñ†¥¬ø£Æ~*:l’™eÓ¬5Ïkzýî‰apÂ!{g¡>›m© kFÔbº’Ö@ [ïØ#öMÔ¿jý³¯~yß´¬wšuú|Hÿ„ëâTx»Ò¼mðêÂ_øC¢ñ‚xýŸÁÖvÚ?–|.b—ËþЙTw½p ÿÚö0ýš¿l½¾ý¤þÂÈÒ<©êφ-?á1ñ÷ƒÿ³5-RÖ+ûŸ?À^(ð½ÕïŸko ^N¡=Ôlß QÈÎìô„ü-¡x¾ðW…¬²ü3àÿèÞðî™ö«Ëßìí Ãúu¶“¤Xý³Q¸»Ô.þɧÚ[Ûýªúîêò/ͺ¸šwy   ?ø—Aðv�«x£Åµ–‡áí ÊmGVÕµ „–V�.^Y\ä–'à jó\LñArÍ,hÀ“Äø÷þ ;ñª�kÀß²?€õ¯˜üÖz¯ÄMZͽ>䚌Ñ?÷ö^Óî77ÚµËÀ%ýaðφtèO…¼-¤Ùh^Ь¡Óô�'OˆCieiÂGŒ³31ifžVyîgyn.$–ydvÜ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( oÅþ/ð×€|5¬øÃÆÅžƒá½ÊKýWU¾“dÐG€UUåžæâVK{;;x滽»–KHf¹š8œòŸIÒ¼yÿø…‰|I±à¿Ù3ÀºÌ¿Ø:•ìµ/ˆz­›´RM<�>îT/¥¨C$Ö¾²–]Dš]fçVÕTõ§EÑt�in� i¶z>‹£Ù[éÚ^—§ÛÇkcackŠÞÖÖÞ%Xâ†(ÕUUTtÉÉ9  :( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ã¼}ãï ü0ð–³ã�ëÚ†ôVº¾¾¹$’s¶ KH3^ê³2[XØÛ¬—7w2Ç 1³°ùsàïøïþ ñ Óâ�ÄÛ=OŸ³ƒu9Ç€üóImsã‹»iZn¯$�ÔJ³hµín)m›á�Lf¾¯núÙ§éö:U�ž—¥ÙÚéÚn�kŽŸ§ØÁ­�••¬Iµ¥¥´*�ÛÛ[‰0ĉQª¢*ª¨  tP@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( €8¿øYÿè}ð_þ:ÿ'Pÿ #áßý¾ ÿ§Cÿäê?ád|;ÿ¡÷ÁøTèü�@ü,�‡ô>ø/ÿ �ÿ“¨ÿ…‘ðïþ‡ßÿáS¡ÿòuð²>ÿÐûà¿ü*t?þN þGÿú|ÿ…N‡ÿÉÔÂÈøwÿCï‚ÿð©Ðÿù:€øYÿè}ð_þ:ÿ'P SâßÂÝM¿Õõ?ˆ¾ µÓ´ËK‹ëÛ–ñ6� †ÖÖ&ši<¨¯$šVXÑŠÅ rM+b8£y€?1&›ÇßðQψ-kjÚ×�ÿdëCí{-Sâ&­fÁ‚¨`R]Fh˜4Q:Íeá->u¹¹åÜò€~°x_ÂþðW‡´� xSH²Ð¼; ÙE§é:NŸ“kgk8D\³É$ŽÏ5ÅÄÏ-ÅÕÄ’ÜÜË5IJÊÀÔP@P@P@P@P@P@P@P@P@P@P@P@Ïø«Å^ð?‡uø³W³Ð|9 ÙK¨jÚµüžUµ¥¬XÉ8W’Y¥vH-­`Ž[›»™bµµŠ[‰£�À?(¬ìüyÿø„𮫳àŸÙ#ÀzÓÿgiÅÞËTø‰«Y³#I#FÅ^úXØÇwuOgáM>y4Ý:Iõ»ËëöýfÐtÂÚ.—áÏé–Z.…¢ÙA§iZVŸ[YXY[ Ž {xcQTz³1.ìÎÌ̯@P@P@P@P@P@P@P@P@P@P@P@P@P@P@§ŽÿáÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ ðLÏÙo#þ%4<ô>0¼Áö8„}ˆ>„u ¸ü+á_øú?„¼%¤Yh>Ðl¢Óô�'O�ʶ´¶‹8%¤–idgžêêw–æîæYn®¦šâi%`‚€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €0üMâmÁº­âŸêÖZ‡´+)µ[VÔ%ÚYZ@2òHÇæfbV8`‰^{™Þ+{x¥žXã`Éä_ÁG>!‰dׂ?dë_»ˆï²Õ>"jög’>I5¢|;=Ÿ„tÛƒmq®^»ÊúÇáÏè^д¯ øgJ²Ñ4 Ê ;IÒtøV ;;tÙ0ƾÙi$ròÍ+<ÓI$ÎîÀTP@P@P@P@P@P@P@P@P@P@P@P@P@P@ÍxÇÆ>ð†uŸøÇX³Ð|7 YÉ}ªê—ÎRx…TEPÒÜ\ÜJñÛYÙÛÇ5ÕíܰÚÚÃ-ÄÑÆà•&�ã¿ø(¿Ä8|Yâ¸5~ÉÞÖ%ÿ„sÃ�,–Z�Ä-RÑÞg¸–"K™Wt:®¥o$¶Þ³–_è3˫ϫëúÕ£èúW‡´­;Bдë=#FÒ,íôý/KÓíã´±°±´‰a¶µµ¶ˆ,pÁ H©h}hJ€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  oø‡C𞇪ø—ĺ¥–‰ è–Sê:¶«¨L¶öv6VÈ^Y畸•CI,Œ±D�#¢0äÔÓxóþ 9ñÚZkÁ²G€µ¥ûMÎËTø‰«ÚÁQYJI¨Í††'ÙøKN¸[«¥Ÿ[½··”õ‡Ãðÿ‚ü?¤xWºM–…áÝÊ?IÒtø„6¶v��•yg‘Ø´·ÊÒ\]\I-Í̳\K$Œ»@P@P@P@P@P@P@P@P@P@P@P@P@P@P@÷ŠüWáßxsXño‹u{=Ú ”º†­ªßÉå[Z[E�“…y%šY µµ‚9nnîe†ÖÖ)n&Ž7ü£°²ñßüoâk:ÄZÏ‚¿dŸk/ý—¥—{-Oâ&­fZ7–W�ŠÉ}4lÑÞ]Äeµð¦Ÿ<š^—-Ƶy¨j,úÑ¡hZ7†4m3ÃÞÓ,ômF²·Ó´­+O�-¬¬,mcAmmaV8ãEq–9f,ìÌÀ´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (+]×to hÚŸˆ|C©ÙhÚ�eq¨êº®£:[YXYZÆežææy ¤qÆŠI$åŽC9U`É}BÿÇðQ¯ˆrhz,ºÏ‚¿d¯ëQÿkjÁËSø‰«Y°‘"…%]’^Í,–6r¬Öž°ž-_UŠmnëNÓXõsÂ~ðç�|9£øGÂ:EžƒáÍÊ; 'J°�Ë·´¶�'–’i摞{«©Þ[›Ë©fºº–k‰¤•€:( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € Ãñ/‰tè·Š|S«Yh^Ь¦Ôum[P”Cieiåä‘ùff%c†–Iî'xííâšyR6üžDñßüsâ–Q¬ø'öGð´|¨þ{-Sâ&¯fpI#å“Qž'!ÙLÖ~Ón qõËÙPÖ?øwBðŽ…¥xgÃ:U–‰ hvPiÚN“§B¶öv6vë¶(a‰}²Ï#—–iZI¦’I]Ý€6¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÍÖu�'ÃÚN£®ëº�ž‘£iwŽ©ªjÚØØXÚDÓ\Ý]\ÌË0Ã3»»÷àP䮵¬xïþ /ñ o xV}cÁŸ²w�µˆ¿á#ñŠK-Kâ©fë4pÛÇ:m’êUÙ6—¦Ï–Þ³–-]†}^}#H@Õox;Ã?ü3£x;ÁÚ=žƒá½Î;/K±B�Û™fwv--ÍÕį%ÍíåÌ“]ÞÝË5ÝÜÒÜÍ$ŽÓP@P@P@P@P@P@P@P@P@P@P@P@P@P@P?ˆ)éÞ(Ôô9>éþ¾†Â \èv·ÉªŸx»Ã·k¶Íh,Òñ"œÌð•�eý!Ó¯¢Ôôû J‘!Ô,ío¢IB‰R+¸xÖ@¬Ê$U� Ì¡�ÂÀ( â·Ä='áÂï‰?õû=GPоxÆ?õ« -¤Õ¯´Ÿx{Qñ&¥g¥Ç{sgg&£sg¦M Š]ÞZ[5ËijÜÁyPóŸà�ü‹áWíû*~Òµ/Â?„?õ;ör°Õ¦Ôüâ? éþ'ñf¡§øißÄ7_þ.øâÅ¿„¦ÓmüM7‚5ëMr=}e/¤Ò¢ÔZÕ˜[=üzmûÚ‡ÿZ¶“•Ï–v€{•P@P@PÕu]3BÓ/õ�fþÏJÒt«;�CRÔµ ˆ­,l,m"i®nîîfd† x"F’YduDE,ÄhòSÄ~"ñßüKâÇ�| s«ø;öTðF¯ü%Þ-XžÒÿÇú�¤‰�¤ÜDöú-³Ãâ_[¾¥.‰¡Äú¡à�x[áÏ…´oø/G´Ð|7 Z%–›¦Ù¡ jKI4Ò1i®¯n¦g¹¾½¹’k«Û¹fººšYåw`ª€ ( € ( € ( € ( € ( € ( € ( € ( € ( € (ò;öÖÿ‚ÐþȱO�ï~ø…üiñWâ¾’ ÿ„‹Á 4Ý*î/Éwgõ•·‹ xáfµ¦üBøã/j:7†.>#Yh— ×5ýNåm4ýøsXÕ—¨^Üð߀ü5£xCÂEžƒá½Ê; +J±M–öÖñå‰%·K=Äò3Ü]ÝÜ<·W·RÍwu4·3K#ttP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ãÿþ„ÿ‘çö;ÿ±Oã7þž>PÑßðRø*í9ûþÛ_³ÂO†÷Ñjßu¯…Ÿ¼k㯇:g‚ü5®xÃÆÑë?¼W¢x³ÃþÖµ; �RËXñ/†ü=k¢h©ksµÔåŠæßËžWvùßö¯ý¿¿à¸¿±—ˆ<ñÇã׆~x/áÄ?½¯‡þÁ¡ü4ño…4«„†Mj?x‡Ä^¹¸ø“c­>…or´Æ —¦ÏQžÆtšÒâÒÜõöàÿ‚ºiŸ³çìð'ö–øgá}?Rø›ûTxoE¿øUá?Í5Ö—áI/|1i®ø¿ZñÓÚÙµ»\ߨhRé¶—ºsjºÖ§§IçǧÅzó.ÿö¡ÿ‚ÍÁû|YøíûPü4ð÷ÄoÙOãÀ_ˆ:%Í®•¥|9ð¯Ä_‡ø¥àMWþ ø™a ødéšùðµ¾£®é¦«gâ{}sQo Íq}r4HÌ:¼sÿ‘øÃã¿Ùÿþ IÿøËðËQµÒ|{ðûÆV»á�JûM²Ö--5$ðφmVYôÍF)ìoCs2ù70É-»nTPè?ì­ÿlñ߇¿à•ß?mÚrãMø‡ñÃß¼Eð»À~Ñ4�+Á6Þ-ÖäÒ<)/„|0Fƒ¥ý‡N¶·’ÿZÖu�XØÍs…¦ß¼^]Áee8ÇÞý­ÿྟ>kÿ·ÃßøVzÀ�.ÇÅ>/Ó¾Úx+á¿ÚüAàß Ü_>»ªøoFñ›¬|BÕ´�-3R‚ÜÍã+ w^‹Ož]ÏY’k)n?U?d_ø*¶§ûK~ÀŸ?iû‚Úÿ‹>8|kß ø¯à�ÂÝ3\ñÏŒÿÁÃ^9øGãÏÚÖÎÇÁŸ~ø2ÓÅ^'ºø%¯|-ð‡‡�øyû~þןðPïø&gÅ/üÒ>ø'ö•økâË¿ühŠxôôð^¹ð¶_kλâ/ Øx¬ë²i7šÖ“uŠi¯ww}o«èú”úmôVwVöð~^ÿÁ¿ö¿¶¼ßüU7ìí¨ø.Óà~·íIkâðók×¾'ÅÇMO 6«csª-ÈÒljVOì[‹I¼×¶Þìâ@ÑŸÚ7þ ‡ûl~Ñ¿¶§Šaÿø&V‰àý6ûáÕÿ‰t|WñF›£k3]ßø6HtÏk„ø¶ÆûÂÞðW…üE+ørÖæ]ÄzŸ‰õD±¸Ò¤Ù«Yi2€güÿ‚ þÜß²‡í™àߨßþ u¤ø3^´ø—qá› ü[𶙢hÓéßð—Þ]èžñe´žÓt¯ x—Áz¯‰­ÛÃúäsx{úφî!Ô5)å)¤Üh÷à·í[ÿ]ý·þ ÿÁRþ%~ËŸ 4ý;⇂¬n4Ï |2ø=g௠ɬkž<ñßìý£ê^þ'ò¬uæÑtÏŠþ&ÒüMâ"Úå‡üS:v¥`×öVy•?iÿà�Mûy¿Áß¿ü.="Œ|RÕæð”:!øhl­þOá?Ë¥Zƒð¹åÑ™í¸É5ÅÍ͉Óî%ûö€ (  ZŽ£§èú}ö­«_Ziº^™iq¨ê7÷ZYXÙZDóÜÝÝÝNñÃomo o,ÓJëq£;°UÍ~Jx³Å~;ÿ‚†|BºømðâïTð�ì¹àÍVøN9øsoªü[ñ?Á¯�z{ßiZM¦™¦ø௎Ÿ§öMLj즵üÌ—öŠÿƒ€tÿÙô~Ý—z‡Á™~ '„£ø©qð]üà¥Öáø_öq¯·‹gÑâÐãñ„^ÿ„h�fâø¤|WmáÝ×òé°ÜÅ#¨èÎ…ÿ”øc¨Á4õÛÎÿÂ>OŠ´]n_…Wÿ­õK�ÇÇu�iá;OɧÈÑèú5ý‡ŽßS{K‹�?Â3Ü@Ñ^k–mepùwáÚßþ éñ£àf¿ûp|=ÿ…g¡üÒì|Sâý;áݧ‚¾ý¯Ä ð½Åó뺯†ôoéºÇÄ-[HÑbÓ5(-ÌÞ2°×uè´ùåÐìõ™&²–àë©¿à¯ß¾2ÿÁ"~:þ× ,´†_´�Á?ü:ð'‹tøt»_øR×XñÄï†ú<¾ ðþ“â6ÕL¾ñ?ƒüY}¥¦´×wš>³«f—wãL´ÕîÀ>ý«¿hÏÛÏö«ÿ‚1x㎫âêß uíGÇú_í_xº'†|9­^ÛhŸ´OÃÿ|‡ÂZe…�»Û%¾·f`×ÿ±…·Úl�}KÎ�ÝXéÏø7Îßö؃ág…®ïäø{ì9&ŸñfM KoÇñãâzx®(å»Õ%†Ñ5û›5»‡X¶Ž[»¹biÖʼè€ÿðHOø*ŸÇO�ºí“ñöÂñ懩xöuøiáoˆæóBð?‡<9s¦iÁ°±›Y»¹°ðåœ6R´²It‘ÛÚ�-Éáß o/ø-ü‹_ø‘ãÿØ‹Hømðoà×€5µÒíl5�;áî¥öÛï±®£iáßüGеù|EâÛ�6k[íbmJ𾋥G¦‹™ô•½³–ìô'þ ÿ;ø�û^x›âÏìÕûMøGKðŸí+ð>ÚúûW¹Ñ,E´ñ.� xŠø®=kÃíww‰âß øžóL°ÖK‘tmDj±Ëcc¥)`¸ýÈ € ÏÕµm/AÒõ o[Ô,ô­#I³¸Ô5=OP¸ŠÖÆÂÆÒ&žæîîæfH ‚‘¤–YUI=`ÉOkÞ;ÿ‚Š|BŸÁ^ ¸Õüû(øW‹þŸ¬Og¨|@ÔìÝf†ÞÖ9ãdò®Éô�*â'·Ðm$‹Ä~"‚]RmFˆõOÁ~ ð¿ÃÏ èÞ ðn�i øo@³K-3L²B±C’ÒK#±innî¦i.oon^[«Û¹¦ºº–[‰�ب € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ãÿþ„ÿ‘çö;ÿ±Oã7þž>P1ÿTUø,‡ü±UÑü%û+£ÊÊß´GŒ+)Èe`H ŒÁÏ4úSÿ""7ìáVeV1þÒŸÞ2Ê G>ø¥d'•bŽèYpv;/Ýf ø«ÿøsâ�Wþ Kÿ�ø«ai{sáxÇž ñÌc̲ÒõŸˆøSVðÃΫóBu<â( Ë«Bdµµ·/Ó@—²?¿à¬¿±o�ÿà˜~6Ó)üPý™µ¿„Z_À‹{éüw£øçÅßî<¥ê¾KO2ÏAð�åõæ£wâ ^QÑô‡—DÔïf½Ó¢œòcþ õÿ(Qÿ‚¦ØcLÿÓ„hÌt�…¾/ø‹ÿýjç…,µ JÛáíߪ|Iñ…¥€ó|Ÿ§Ã{_^ê×É™¦ƒIÔüg¤]\Ëu±°ûn¡t‰im=Õ¨íÿì-ÿ]ý‹>ÿÁ4~]xË⯄´oˆ_~Gà�sà¥Æ¥ —Äø«ÁeÝŽ›aá¯K—:Ä;6–^!²‚ëÃú|Ú畯êeÍ–¥¨ ñKþ ññWâüãwísû>|¿øªéŸü-ðsÂÞ)Õ¯tŸCë/§¯‰<§Û?…´=&xô)u+O éW7–ºÖš¾+Ô¶ÜÁ+i7vNù}àÍ'àçÆØsÅ´ÏíIÿpøñâ�ÚÇ„ü~öÿ³^‹ñË!-¶ŸÄO„>\ü=ñ ÿ‰ø{^½M>çÇ7–üAÓot¯<؇PÖ-®µ�)N–Ž·³¥üRÚEqWFÜŠÿ‚q|OðGüûþ ãûZü?ýª=ñÍÌ:^Œ—º§Ä}â„5}s_ºhôý'Ãþ=ð…ªëVzíüÖú{Ü]h©u$kÌ@ÿÁV¾*xöÿÿ‚˜þÉ¿e?iß/|9oáj8ø{o¬h¯®jž<½ñNµ.‹â;9$Òµ]#Àž…Áà=STÐ-›âìëñËÁº�‹t}bM'UÒ5};TøA¢I%¼pêº6½yiq¤ßZ$¦}GN�i†üñkþ  ÿÁ4Ï‹þÃÿòoê?u­SW‹â‘ðNë[Ö>KmrÚd^�K·ïDƒÅ÷Z´—vÖ:_€¤X�ª¿ö½„W²ipØÁWüEã/…?·/üÛÅŸl5/üBømû(~Æþ"ø—¥ºÉw«ø›Æ^ø…ã-KÆV·Ë-Î¥­kzv¥nË4ÒI5ÕÉJìÌìúÿ‹ÿ‚›þÆ¿àŸ^+ø[ðkâ)øãã�çÃs¢x{@KçÕ¼#¥øsÇ^ø�ªë^1±»³¶›Â·VÖþzN®lõ©u-^#Ÿqck©KnùûF~ÍŸô_ø!/ì[ãÛÝ#^_†¾2xïâ/‰t§�t~ð/Æ=SÄ~ñeì@n‡HÕM·‡çÓ®w2ïø‡eæ7¸ˆÛ k?ðEïxûö'?´×ˆ~ø{öÄÑ~.x¨|}Óüc®\éúýSáW‰)ѶÁcißëzRŸ+sï#°«|ý“¿gÏÙ‡án©ðSàŸÃ‹/ |-ÖõmoZÖ<©kž)ñΟª_ø’ÂÇK× ôÿ5¿ê6zžŸ§ZZ\érݾ˜ÐÆê¶‹çÜ@>+×¿àˆŸðLŸx¾_ÝþÍVvW77“ꚃñâ—‡¼#qw<ÿh݆4_ØéZ]¤/”ƒHÐàÒôHá>AÓZ±Pè:ü ø4ŸÛà$ ü ÁWðôÞo…ÐøkJ‹ÁÃó³Ë>š|ûK_øËW×u-Æôí}CMðüºN›~ñ[µÝœÍmnÑh?ìû&ÉûP�Û9þgö”‘êâGü'_‡ú\^ _‡i7ü!ÃÆÀ?/ƒ‘t/þ(ãû@¡ÕÛhì(  ÷wvš}¥ÕýýÕ½•�•¼×w—·sGmiiimMquuq3$0[ÛÂ�,ÓJéQ«I#*)4ù+ãÿxïöüøƒyðgàõõÿ†g? ßÀ~%|HHd„ø¹à›ÌŽÎÉdòþÑk;Â_Ãú˜ûkƾ"×R;[{+;pÓŸ†ÿ<ð›ÁÚ7�< ¤C¢øwD€EooÏ=Ôïó]j:�Éeö§.g½¼˜´“Jßäqw4P@P@P@P@P@P@P@P@P@P@PÄ´Çüƒö,ý¯5”ñGÇ��~ñ?Œã‚+oøNtmGÄ^ñ•ÌÖéig¯âêþ¿ñ}¬Io§[x–]bÒÂX­-áPqß³Ïü—ö ý—üU§xûáWÀ<{¤2ñž¹âŸˆZÎ�y‹-¾§ ÇãMkZÒ<9¬[¸Ìχ´½'Tˆ3"^„bŒø¿ÿTøñ»ÇðX¿Ø«â‚~ üUñ—Ãÿ ÚþË«â?ø[á狼Eàí蟴WŒµ}mu¿i=Þ‰¥�#I¸·Õ5A}Ø4éá½»òm¥IõþÿþïÿÞÔþ(Ýü]¾ý˜|-qâ‹íe¼Eu¦øæ?Ë­Éx/¥¼†ðø¢?i§ÏÐ�‡ÿáš7–9tvÅ€?D5�øWÄ^¾ðN¿á­[ðn§¤¾�¨øOVÑôýGÃWú–ÿd}óC»·›L¹ÒÚÔ fÓæ¶{SyEUü¼—þyÿÅ—Å‹âÃû6Â’­È½m/‰_c𜗂´ [Ãëã�±­°pèñùz Aþ�&–öìÉ@¦ú/€| áÏY|6Ð<á�áæ› � XxNдËOÚøkì­bt|= ªé)£µ›½¬šp´û$°;Å$LŽá€?3õïø"'ü'Ä^/—Æ7³U�•ÍÍäú…æ… üAø¥áïÜ]Ï?Ú7Gá�ƶ:V—i å Ò484½8O�tÖ„,Tö¯ŽÿdïÙÛâGìýsû+ø£á^€¿³íÕ–…§·Ã Ï«ø B‚ÏÃ~$Ó|a£Áa?€õ êÚ`ƒÄÚMޱpÚv¡k&£v³�Mï#½½K€&×ö ý“ì¿eýCö2µøSå~Íz¥Ð¼¾øoÿ ×Ä—óîG�lþ" ?á0“ÆãؿⱰ´Ö6CâˆÓ÷_Ùû²ÞK'õO€_³¿ÁßÙ᎗ðoàgƒÿáøo£^ë:†›áÏøHð�ÂßèÞð>�o¡øsB¶öVp ¼Ž~k‹ÛÛ†ýíî£{1k›ëë†yî®$ydl�ªÙÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (‹ÿ…‘ðïþ‡ßÿáS¡ÿòuð²>ÿÐûà¿ü*t?þN þGÿú|ÿ…N‡ÿÉÔÂÈøwÿCï‚ÿð©Ðÿù:€øYÿè}ð_þ:ÿ'Pÿ #áßý¾ ÿ§Cÿäê?ád|;ÿ¡÷ÁøTèü�@ü,�‡ô>ø/ÿ �ÿ“¨ÿ…‘ðïþ‡ßÿáS¡ÿòuð²>ÿÐûà¿ü*t?þN ·Ä¯‡(¬ïãÿ¢"–gohJªª2ÌÌoÀ É$àN0hóâGÄOþÞ_o~|¿»ðÿÀ ^@~(üOŽ)R/¤Sn[ ˜MÕ„ï ah»Ñõ¹¢:Ö«äéq¤@¦? ¾x3á‚ôxH‹Hðþ�ØÐm’òþî@¿kÕu[½ˆ÷Ú­ü‹æÞ]Ê2Çd0¤6°ÛÛÄßP@P@P@P@P@P@P@P@P@P@P@P@sú·‹|) Ü¥ž»âoè·rB·1ÚêÚÎ�§\Élï,Ip�]ÜÃ+BòÃ4k*©Fx¥@Å‘ÂeÿÂÈøwÿCï‚ÿð©Ðÿù:€øYÿè}ð_þ:ÿ'Pÿ #áßý¾ ÿ§Cÿäê?ád|;ÿ¡÷ÁøTèü�@ü,�‡ô>ø/ÿ �ÿ“¨ÿ…‘ðïþ‡ßÿáS¡ÿòuð²>ÿÐûà¿ü*t?þN þGÿú|ÿ…N‡ÿÉÔÂÈøwÿCï‚ÿð©Ðÿù:€ÿþF�$Ÿ<q«;»ø«BTDQ¹�ٯªª‚Y˜€É ÐæÄ/øïöùøƒyð[àÝõ÷†ÿgo _À~&|IHe‹þƆmñÙÙ+ˆþÑi3ÂÍáýØBHLj5´ŠÊÞÒÞÓ�†ÿ üð—Áº7�< ¤C£xwDƒÊ·‚<=ÅÕÃàÝjZ•ÑKíNþ\Ï{y6^i $HÔº € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (óïþ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠûá�Âÿ|ðv›à_‡ú$:‡ôÍò,HÍ5ÝõìûMÖ§ª^ÊÏq¨jWlªgº¸v`‰´+ ¥½¼èP@P@P@P@P@P@P@P@P@P@P@P@|»ñ·ö?ø3û@ø«Oñ—Ä[Üëzg‡í<3k&“¯O¥Û .ÏRÕµXíâ‰ÕçzÍó4Äå‘¢LXÇáÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠ?áÙŸ²ßý|iÿ……ßÿ þ™û-ÿÐ'ÆŸøX]ÿñŠûá§Ã/|!ðv—à_è°h~Ò•ŒpFZ[›Ë¹°nµ=NòB׆¥xêæîá™ÈXáŒGm ¼1w´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/ListAnatomyOverdue.jpg000066400000000000000000005405341527064444300217120ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' ˆÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀˆ'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € Ži<¨¥—¼¸ÞM¹ÆíŠ[ÁÆqŒàã®JÃþÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(þÝÿ§_ü˜ÿínÿÓ¯þLöŠ?·é×ÿ&?ûEÛ¿ôëÿ“ý¢€íßúuÿÉ�þÑ@öïý:ÿäÇÿh ûwþ�òcÿ´Pý»ÿN¿ù1ÿÚ(bÖ´Áû6oÝòîÝ�®É÷¶®s·?tc8ç  P@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (?QÕ´Í&´jwÖ¶0󆹙".G%bF!å~Ÿ$AœöМê<-hÅ,ãÔu6ÃÁn¶ðz½ÛÃ0Ïb qôà°:ÿâ ˆ¼7#®z¾ª±¶=v®Ÿ(϶ü{Œ|Àí¾6inGÛ4Kûuîm®-îÈú Ež1øæ€;�#â„õ–XíõX­î¬¤$ôUy¶ÛÊ䜆YÓ®(´ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €@“€9$ôÔôéõü¨Ä@mÁ»Žázð+íBûS¸{½Bîâòåþô×¼¯Œ’Kƒ?,i„A€ N€ ( ëÃuï 4q,ͨiªT6�y#º"Ö“ÒZ0uP4å rr NxoÅWŠl¾×¦Ìwǵn­%ÂÝZHÀáf@H*Ø>\È^)@!X:HŠÑP@Ækþ>ðׇ%kkëÆšõp^ÊÆ?´ÜGÆ@˜å!�È!„sJ’!‚•!Ø•ÿ…Ñáoùð×ÿðOÿå¨þ_•ðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨_Jø§á-Rt·77:l’±ÿiÀ�DÌz)¸†{‹x¿ÞšHÐô ’(Ñ�AäÐ�Qׯ×ó € ( €"šhmâ’{‰c‚Q¤–i]cŠ8ÔežI…EP2YŽäç€<Öûâç„låh¢mGQÚH2ØÚFb$¯yqf\z2.Â9VpA  ?ðº<-ÿ>ÿþéßü¶  VŸ<%s*Ç*ê¶*ÇuÝ”Mû°³»»—HÎ:žÔév—v·öñ]Ù\Cuk:ïŠx$Y"uÎ>WRFAX™X`a@,P@P»â]Ã�¤Ú½ôvÞf|˜@ingÇÊ·ˆ4¬ �B«ȹ]À |fðª±Ë]pÞ[[§ÜoÔãoÍá@ ÿ…Ñáoùð×ÿðNÿåµtÚÄ? x‚u´µ»’ÚòCˆ­uþÍ,Äÿ .[yd=¢I¼Öê¨y Þ€ ( € óýgâg…4YÞÕî¦Ô."b“G¦B·&\‚­;˱pAVHævFdT9  /ø]ÿŸ ÿtïþ[P‘üeð«¸Vµ×!Ry’KK2‹îD:ŒÒø n˜`CÑõÍ'_µû^“{ä …“få–#!'†EI¡r9D]Àer§skP@P@P@P@P@P@P@P@P@P@P@P@P@�ªjÚn‹h׺¥ä6VÊvù’“—r ÅæY¥ "‰B�МMñ“‘9D·Ö®T°ÙÚª6;�qo ¶èÁõÇñEÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–Ô$_|)#„{]n$$¶–…܈u ä wÚ„úf€=IÖ´½vÔ^éW‘^[“µš2CÄøÏ—|ø¡ãÇ’Yü3£ÎVó¯wa¦�pú|N­Ä1ýÛ²2d“6Ǥ¾h…P@P@kèzÞ¡áíFKM˜Å¤0 ¤@ ƒ�AäFAr?žhçoŒ^"¸’þ Á#%¥´1]ß*’<û©²ðG'fŽÞ¨9V’}Ì7C(ˆÐ@z×ÂO\Xk«¢I+5†®% ¤7ÐÄÒÅ2g;LÑÄÖò æ3BÌO”´ô½ÕÌv×w2­ía–ây[îÇ (ÒH羞9ì:ÐÉž+øƒ­xŽêe†æãOÒC2ÛØÛÊЗ‹$½xŽë‰d\F&Î4$4ŒÇYêZ†�0¸°¾º´œ0o2Þy"bAÏÌQ¾`Hù•÷+ ‚(鿇9“ÄðM§êe±c”Ê€"ßZîXÍÇ–0©4R2%¢¬g̉ã Ñ@="òæ;+K«É‰Ú[Ïs)‘4²8ÉÚ‡þTñ&·¬^ëÚ�Ö©}!y®d,«’RAýÕ´Cøb…0а]òììÀTP‚T†RAAÁr#yËõ×Ã�Ïâ C5ã´·Ö¾Ÿu3rÓ˜R9!��wx%�dc’ó$Ž~öñ÷ŒG„´Èͺ¤º¥ûIŒrsKS5ÔÊK$[ÑQ_2WPr‹!P•õ-kVÖ'k�OPº¼•Žs4¬Q2sˆ¢E ÈŽ(Ñe€7<7ã}{Ãw½½Ü×6A‡Ÿ¦ÝJòÚË~abÆÚ\r³@î æ #&úãHÕ-u­6ÏU²bÖ×°¬ÑîÆä9+$R`�$†Ux¤�$F�3@yñcÄW.‡�œ� Öµ,Ð4ÈvºY[¢±Uå3Á #G$›Hb¬ -Ð@t¾ñφu«MFAæ$WðvÜY;�4l½ "þöCl™€#*Ài‚ƒÈ#¡£¯_¯ç@P@P@P@P@P@P@P@P@P@P@P@P@PǾ>ñLjðõÍÌ.P»?bÓÇužU;çŸøö„<ªHØe#ä8 �Y‹ÌK3ÌÌI,IÉ$žI'’O$òh( € ( € ô�†>&m ÄZO&Ý7Xhí.’+‚H³¹”¬¯äÈÄíÌîÙò’€>° €<‹ãGüŠÖöµÿÓ~©þÈ ™( € ( € ( € ( € ( € ( € ( fø+ÿ!Í[þÁ#ÿK-èé*øËÇ>wü%þ!ó÷oþÓ¸Û»9òr>ÏŒó·ìþVÞÛqŽ(” €>Þðß�ÿîƒö�Þö6—çoÎÿ7ìPoßžwîÎüÿ}èæ?Šò;êßõÏMÿÓm§ùÿ&€<ö€ (­ðüŽÿ°Œú PÒ¿üïøBµï#vÿ"ßvÜçÉûu¯Ú:s�#ÍÝÛnsÅ|{@z?Ÿ;þ]?ÊݳìÚ‡Ú1œy?c—nìq·íG^7mïŠúKÅò+ø“þÀÇþ›®hâj( €>�ø)ÿ mcþÂqÿé,TÈühó¿á#Ó·nò?±bòºíó>Û}çc¶üy;±ü>^{P�P@T|!ó¿áO7vÏí+ï³g8òu»o·Ú<þœnÏ|Ðñ¿ýo†¿ëž­ÿ¡iÔàôP@}áiÿ¶ßõïþ‹Z±@P@P@P@P@P@P@P@P@P@P@P@P@ð�î~ÙwœçíSç=sæ¿_z«@P@P@P@P@|P@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ™~1ê­uâm-[0éVh]3ÒîûÈH÷¶[Lg8äÿÈh € ( € (A ‚ ‚8 Ž„ÄûcÂÚ¡Ö¼;¤jlÛ¥º²‹ÏaÐÝC˜.±Óé1KÇnœã4¿@g�´ |Gá«Ë+QºöŽúÉ8ýåŶìÂ2@<41–!D’)b@:xžÆöÖcosiuopÓðK¹ôòÝóí·éŽKzO‚~êzÍäºÅ¤Ö4.’ºÜ£Cq´îC í•a“Kpèˆcb fs”ú� *€€À~X �¾1xvâ;øWÔ´][G�­õ=>êÎU8ÄÑ0GÁÆb”ÈOH¤t=˜à Üðß‚5ï\F–ö“[Y~¥uÅkyùŒe‚›™qÂÃc¸¯˜cŒ™Të�#KµÑtÛ=*ÉJÛYB°Ç»œä´’É€’iYå�€‘Ø€ÅyçÅ�ÜkZÖq´×Z,³NРÜïepˆ.Ìj9gˆÁÄ “rm‚«|·@ÒøO÷>&Ö­4ècs˜’ßÎÛodŽ Ò3t ëû¨A+¾gE ²€}¦0€z�>Ÿ•P@P@P@P@P@P@P@P@P@P@P@P@P@øû÷ñê´l,oçš÷OŸËx§s#§™jîau?>ÕŽRJ…€8š( € ( € ( € ( €:ßøvãÄšõ�¤q±´‚h®u±û¸m"pάݤ¸ÛäB£,]÷cdnÊö]ØiñáýµÿÑÒP…P@P@P@P@P@PÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Œ¼sp×^/ñ ŒrWS¸·ÿ€Ú0´Qø,P)@P@P@}Oð‚á¦ð€Œž-5;ÛuöVX.ð?àWLzõ(Œ×üá¯Ê×7Öm ë`=팟f¸“Œ0ÃÃ;€‰&‰ä † (+ÿ _Âßóÿ¯ÿàVŸÿÊ£üÿ:?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTо•ð³ÂZ\épm®u)#!£þÓ�'‰Xtco ðKþìÑÈ€ó·!hÑ€àÐAÓ§Óò € ( €"šn"’ ˆ£ž ‘£–QdŠHØa’HÜu`pU†àã"€<Öûá„o%ib]GNÜI1XÝÆ"œ�©yoxPz*6À8U@  ?ð¥ü-ÿ?úÿþißü©  VŸü%m*É+j·Ê§>MÝìK{1³´´—IzÔév––¶ñZY[ÃkkìŠ#XâEÎ~TPI%˜Ÿ™˜–bXå€,P@P»á­Äp¤:½Œw>^|™�h®`Ï'ʸˆ¬ª¤€Z2Í� ÆØ]  |ð«1"÷]@OÝ[«£ØoÓ$oÍÏã@ ÿ…/áoùÿ×ÿð+NÿåMtÚÃÏ x~u»µ´’æò3˜®µ >Ó,$(+x¤¥H|Õè®9 Þ€ ( € óýgៅ5©ÞéífÓî%bóI¦L¶âVl’ÍÅ=°rIfxáFv;¤g9  /øRþÿŸýÿ´ïþTБüðª8fº×&PyŽK»0�ìL:t2ø �n¹PCÑô='@µû&“eœ$†“fæ–gçšFy¦p8Gm áp£j€kP@P@P@P@P@P@P@P@P@P@P@P@P@�ªi:nµhÖZ¥œ7¶Ìwyrƒ”pE"âXe�%‰Ò@€H$PœMðoÂ’¹t¸Ö­”’DPÞZ².{qaq!¶é õÏð€Eÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4$_¼)‡{­nu·v�ؘtø$÷Úàúb€=IÑt½ ÔYiVqYÛƒ¹–0KÊøÇ™<®ZYä æJîÛ@…TR€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ‹Z € ( € ( «Ážx‚ÇOØÆÕ_íZƒ�‘”ZPOð™‰[hÛœI2¤@f€€@?¥-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ØiñáýµÿÑÒP…P@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè eVR¬+¬¬VR0A ‚2#ps@&|Bðd¾ÔšæÖ6mþF{I%m%l³ØJßÂS­‹ÞÀ1–’)hÎè € ( €$†n%Ž#y¦šDŠ(£RòI#°TDEË3³ª d“�šúßáÿ„ºOú@VÕµ×î0Â0ÙF°o1”âIÚF£X¨½ € ͼÖt}9Äz†«¦ØHÃ!//­m\ƒÜ$ò£}@Çæ(—ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÿÐÉ àãNÿãô±osmyÏiqÔ÷f·–9âlvHÙ�þëž O@v_üxAÿmôt”¡@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €)ju–«g>Ÿ¨[¥Í¥Êl–uVR>d‘ŽD!ãuŒ¬”åÿ|7Ôü8òÞX,º–�–q2&ë›4ë¶ö$_¸£�µÆ¦&2, ÊŒæ”P@¡¦éZޱt–Ze¤×—2tŽÎÕÎ ’9ÂEçæ–WH×øš€>›ð/ë_ …Ôuæ¶é€ê7[éêà ®åæe;eºeFÛ˜âUF�Êé´P@WÄÍᯠÜÞÚ�··2Çag!ˆg¸Y¦ÁÈ-Í$`‚¾j¦ðË‘@ Í4×É=IJO<®d–i]¤–Gc–w‘‰gbNK1ÉïŒÐTP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užñEç†5‹k˜¦“ìMz�¦ãäÏl͵ÜÇÓÏ…I’ YvcwFû2€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (Ïuÿ†~×çKvÒ¯$ÜiÛ"�ÜóºkFF·r[%Ú5ŠY ËJ(Ëu‚úì N›©i÷ñŒàN&±œúa6ÜÂ}óp¾ÝNÐuþøÝ ¤G(Î7&¥¦…úþöî6Çü?^´nÛá'ŒnÁadV¹¾�À÷"ÍnÏä=ûá@;�#൤L²kz´·XÁ6º|bÞ<ú5̾l²!èBCnýÊõí+EÒ´;qk¥XÛÙCÆñ ~òVQ€óÌÙšw�ó;°dŒP¥P@WÄMâ_ ÜÙZ€×¶ÒÇg §·Y¡ÉÀ ,Md�¾k&ò«“@ Í ÖòÉÄRA�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO ÿз àŸNÿã±ommgÁio¬ ÷a·Š8"\ÿv8ÕP~ëŽO@v_üxAÿmôt”¡@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €� ³ª –bp’IÀI'�jóMOâÇ„´ë‡¶I/µ6�мºm¼2[†²Ü\Ú¬£=$„É °ù¨;þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.ŸÿËSü¿:ìü;ã=Å×Lºasï’Æé<‹´Oï„ÜÉ2@g�åT$*YKuTPa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ÓâÆ¥s§xJD¶fC¨ß[éÓ:måŠây”È­°�ÿ½¬¿Ähå*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÒÑõ+�#T±Ô­–{K˜å]¤�êBØê“F^)ðÈå{šûš€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €0£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúõÿüêüb€=Àÿ õk�J×R×­OÓìåŽámnFÛ«ÙbmñFmùx`�§ØîƒËŽ3½�>• €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € Åñ%ÜÖׯ­’9.,´]RîÝ% by­¬gš$”+ÆÆ6‘8Y#b¤áÔá”䝸[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€ø[>3ÿ V�ÿ~oùs@ü-ŸÿÐ+@ÿ¿7¿ü¹ þÏŒÿè ß›ßþ\Ðÿ gÆô Ð?ïÍïÿ.hÿ…³ã?úh÷æ÷ÿ—4ÂÙñŸý´ûó{ÿËš?áløÏþ�Zýù½ÿåÍð¶|gÿ@­þüÞÿòæ€>›ø{«^ëžÒ5MB+x/.¾ßçEj®°/‘ª_[Çå‰&¸qº(Q›3>\±F@;J( € ( € ( € ( € ( € ( ÿÔþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÖþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@‡â/h>Ó&Ö?x4Ù¤o xŠmˆšN«4f ¹›�/KÔ€Ž Ç$…H&ŠÎöV$Ek*©z÷Š( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ûáWüˆZýÅ?ôó¨Ð¡P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@yÇÄà µ}Pýªúä¼>�Š—Z¥Ú®Hî0Ú[†W½¼dd·FETšâk{y@?.¼sãÿ|CÖ$Öm�Þ`‚ òèG¨ë×ëùÐ@ekšÖ›áÝ#Q×u{…´Ót«Io/'`NÈa\�ˆ2ÒK!ÄpÄ€¼Ó:Eguù»ãßÚKÇÞ)¿� øyw&�ÿiñˆ!ÇŸ¥éMŽÅŠîTÔ¯åo&ÚVmâK»¸Ã#Mo:;yn“ûahkµàÝOK³g nìu[m^HÁ8Ik-ž“ò(;œE<ŽýÚHÇm}[áïh¾*ÒmuÏê6úž—x» º·'‡ ѸY­î!o’{yÒ9á’HÕ²(j€>øÉûKk «ßxgáåÌVz|ÒYßxŒEÅÝíÔ.c¸�K«Áoe«Åö¿*Iî™|ëY`„#Ü|Ó'Å/‰r¹vøƒãPÌrD~'ÖaOÂ8¯5ú*¨ý Gÿ ;âOýáY¯òxþ•z7‚?h߈¾¾„꺭Nj4s"ý¯OÖå7m~w´Õœ5ìsåùÏukŸ¿jÿz€?I|3â=+ÅÚ™â=s>›ªÛ-Å»0 $gsG5¼è î-gŽ[{ˆÃ0I¢uVp7ÐýOSÓôk ½SU¼·ÓôëZâîòêE† xS«ÈíÀÉ!UFYÝ–4ÙU€>Pñí{á{É-ü;á�OÄñ9O·]ßG¡Ã>úËhšÏQº10åMÔ6²ñ†�3@—ÃÿÚWÁ5¿·Ñõ.¼+«ÝºÅi¥47mÜîq´¤B—p©å­šJì‘C,“:DÀEÐãÏi¼3âmd»Ah+kHˆ…üù[[}ÙI˜y+¼s\¸d……~nø·ö‚ø�â›Ù¦‡Äž°.Æ×Lðìòi«oHU’þš�Ô»qæI5ÁŒ¸- ¼ B(ÿ ;âOýá[¯òuMÅ_‰¶ò¬±ü@ñ“2@ŸÄšµÔD�ïCsu,.=UЩèA€>¶øûEê!ÕlüãÇ‚[ûöú/ˆ#Š;SuvÕiú�¼!mÄ÷'÷v—vé’o.ÞXY¼õû2€ ( € ( € ( € ( € ( € ( € ( € ( € ( €?<¿k/ÛûᎭ?Ão†bÎO[Áø‹ÄwpG{mᶺ�g¶Óôû)ƒZÞk& aº¸šñ'°°ŠH­ÞÖîîYŇçüUÅõ2ʯ.Ëy.) k–_ >*5›x“PV�Ã>,¶‚+õ»¸£2'X³�"²·Ôç�%{ Ë(ímo]E‹ZGzöïuú' ñ…\}xe¹£‡Öj+a±QЦ«É+û*Ð�¡²I¸N 1›^Ï‘MÆSÿ7¾•ÿCL³Ãü�â_…qÆ.ËåœK˜šõ±õ2L%ZŠšÍr|eyÕÆâ2Ê'J8ü&2x¬V –9b烆"8OÒýÿ7€>ÆøUÿ"ƒÿqOý<ê4èTP@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@šÖ±§øIÔu½Vámtí.Ò{ÛÉÛø!� °Eêò¾pĹyed�wQ@‘ßü{ª|FñM÷ˆµ"ÑÄìmô­?yh´Í.'o²ÚG٤î¥P¾}ܳL’4àè € ( € ý ý˜>*Éâ1ü®Üùš¶…j%Ðîfsæßè±�¬Ø¶L—IhÖ<òiï~Å4®õ½ó/íc=ŸÂë{x]–=WÅZM…ÐS�$Ù꺚£ú¨¹Ó­äÇ÷‘OjüÙ € ( € ( € ( € ( € ( € ( €>Æý�/çOxÇKße¹ÑloÞ?áóìo¾Ï�Ù¼½Be80Æsµhïªü¶ý¢¼_{â�‰šÕ”“?öo…æ}LµÜ|¸Z×hÔçØ C=Ö &ß( ío ¤2d[¥xEièÚÆ£áýWOÖô›—´Ô´Ë¨o,î#$š  €ñH3Ñ6RhYâ‘YÕ€?e<9«§ˆ<=¡kÑ'—·£éš²Gœùk¨ÙCx±ç“”m99Èç4ù¹ûOßÜ^|\Õ­¦vh´­/C±µRxŽ tèµ7U�¹Ô.õÉr}€|÷@ì5 �;â߃$�Ù~Ө˧̣¤–÷öWV²#Ž…Gš$Î4uÃ(4úEñKÅø3á÷Š|Ik�y§é¥,]€eŽþþxtÛ ™O°Þ^A+!ûá ÿ È)çšæy®nf–âââY'žy¤ifži\É,ÒÊä¼’ÈìÏ$ŽK;±f$’h*ú§öQñ}î™ã‰ü"ó;é~&±»™-‹:¶—n׉u–Â4º}½ÜìPÓmµ21[d ÷g�/î4¯xÏT´vŽëNð§ˆo­¤S†ŽâÓH»žSÎ I°÷ºÐãUP@¡ÿ²üóøÄ»<:‰�íƒùi{§Y<‘§pžl/.:o•Èêh‡ý¯<_z·Þð5¼Ï‰±#ÔѪÝË5ÕÕŽ�Ø?2Z}Šî)†Ã$ðÊAxbeø¢€ ýXøâûß|3ѯµ9žçSÓeºÐﮤbò\¾œÉöiåv%ä�ôù¬þÑ,„¼×lÌI|І~Ø÷÷ €´µv³Kâ ùãÏË%Ųi6ö®G÷¡ŽîíAç‰Û¦>`†¨ €'µ¹žÎæÞòÖF†æÖx®mæC‡Šx$Yb‘fŽDVSê¥~ØÙÏö›K[œm7ðO·û¾lK&? Ø  P@P@P@P@P@P@P@P@P@1¾?ÕîõÿxÏ\¿‘¥½ÕüUâ FæG9fšóUº�ý‚©}ª«…E ¨¨üÕ�«û^ÉtZ+ZÇý9pQ„È8ƒ2<8ÑÁå+Ãùvœ£8<« B»”•>iÊW”ç')·)9K‘®Cë‚€ ( € ( € ( € ( € ( € ( € ( € ÔÐõ{¿ëz>½§ÈÐß蚦Ÿ«ÙL‡kÅw¦ÝÅym"78dše8àŒóŠÖ…iáëѯMµR…Zu Öêtæ§¼ÓŠg•žåN É3Œ‡0§Ø ï+Ì2Œm«Â®2ÂVÁâiÍuŒèÖœd»7Üþ£+úlÿ—@ ±¾È… ÿÜSÿO:�zP@P@P@P@P@PÿÑþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@~×4’ÇHÐü g1I5§:ΰªØc¦ØËåéÐ8èÐÝj 5Áà.— ø€ ( € ( €:Oøš÷ÁÞ'ÑPŒgy,ÀPéÅ/ Ïã?‡Þ)ðÝ® 桦—±F!VKû áÔ¬!f<"ÍygLçî-ü&€? §‚kiæ¶¹†[{‹yd‚x&�¢š ¢s°Ë€ñË«$‘¸ Ž¥X ¨êŸÙGºŸŽ'ñsÂ饸fÆî¹*DsjÚ¥»Y¥¬lWÑi÷sϱ‹CºÔH¡nP°Ýž<°¸Õ| ã=.ÑK­Gž!±¶�FZK‹½"îQG/$Š£Ü÷é@�TP@~‡þÈvÁà__ÊŒ�ê&t¶,1æ%–�d’H�Êy³ € žÖÚ{Ë›{;XÚk›©â¶·…^Yç‘bŠ4ÚIUG©´ûcg¶´µ¶'q··‚ßÞ1D±ç·]¹éùPŠ( € ( € ( € ( € ( € ( € ( € ( € ( €?˜ßéz޼g¡ßÆÑ^é*ñ�sŒ2ÍgªÝ@þÅX¦åeʺ•d%XþjÇÒžŒ¡Q5:8ªôäŸxUœ_mítú­Uïsþœ¸7Âgü Á™æ¤k`ó~áüÇ Rñ•fU…¯ÝJ*§,ã+J‹ŒÒ”\cÈ×!õÁ@P@P@P@P@P@P@P@jhzE߈5½AÓãi¯õ½SOÒ,¡A¹å»Ô®â³¶�Œ³Í2*ŒòN8ÍkBŒñèЦ›©^­:0Kw:“PŠ^mÉ#ÊÏs|'䙯}˜T�I•æ¾6´Ý¡K –á+c15&úFhÎR}“ìQ•ý6Ë PØß ¿äBÐî)ÿ§�F€= € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@•ÿ´^´úÏÅ¿û Ò>âڌçbYYB×)ÿƒ ¯_ÝŽ –ðú( € ( € (õCötÖŸZøIá“3ïŸJûv‹!ÏDÓïf[4ï�š|–i�ör0î•®hºoˆ´�GBÕíÖïMÕm%³¼�‰á™pJ8ÃG,gC*ð̉,e]Ðæï�fßxZþwðþŸqâÝ ¤f³»ÓeÔ∟’ý-qsö„V–Ê;‹i‰ ÂÏöx€<¸ü1ø•ÿDûLJ„õÓú‹¨þ´±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@ü+‰?ôO¼qÿ„–½ÿÈ4±ø“ÿDûÇøIkßüƒ@W†~|Rñ5äVëámGD·gQ>¡â8%Ñ­­�õ‘¢»‰o§ÇO.ÒÒâL‘�PÑφôŸ†~ƒÃúk›©ÞF¼Õu9G.¥¨Èˆ’NcË`�#H-m•œC kºIfy¦”Ш•ñ‡‚¼7ã½"MÄÚtwölÞd/“Ý•ÀR©uct˜–Úu�ÊY$BÑOм‘0ËwŸ±Î�÷EìTÂ\\L�=v€<[ãG ?Šš5¸‚x´ïéshúŒªÆÞD˜)›NÔ<µy ¤îˆé4hóY̾lQÈ’ÜA8çγð[➇u%­Ï‚5ûÂŒBÜhÚ|Úݬ«œ,‘Ï¥-Úíp7“Ê•AÄ‘£¬�ÿ ÇâOýïá%¯ò iiŸ~)j×)kmà?A#°Q&§¥\èÖËî÷Z²YÛ"Œä“/° x ¼þü‹á…­Î­«Ïÿ‹uKu·¸–Ø3YéV%ÒVÓìäp�<“J‘KyvÑ vŠ(`�b‰æ¸ú€<+âGìýைwrjïöŸëóçêšRÄc¾`»Qõ+ G“s*Ž·5¥Ô€"Ís*$h [¤þǺ½ÚË­xËSÕ,ÕÃK*ÛH’@Dr]Ky«|Œ×1A�vñ°Ý@Vø{ú/…t›]Ãúu¾™¥Ù®Ø-mÁÆãËÍ4ŽZk‹‰›çžâw’yŸç’FlšÚ „~2~Í:Ãê÷Þ&øymýž£4—wÞYb·»±º™¼Ë‰4³;$R¹y~ÉæÇ=«7“kð”Kpšdø[ñ.'(ß¼jYN �ÃÌÉøI›ÆßUf PÿáXüIÿ¢}ã�ü$õïþ@?Ëó FðGìåñÅWÐ WJ¸ðž�æ)»Ô5¨¾Ïv±gçKM%Ùog¸+Ÿ/ÎK[\ÿ¬¹N€?I|3áÍ+Â:™áÍ›¥[-½º± $‡sI5Äî‰..§’[‹‰¨y¥vU@vPýOLÓõ› ½/U³·Ô4ëèZÞîÎê5š ˆ_ªH�ÁÁ•†VD!ÕY@>Pñì…á{ëÉ.<;â}OÃöò¹°ÝØÇ®COú»iZóNº(áEÔ×Ró–�ñ@—ÃÿÙ«Á ¿·Ö5 î¼U«Ú:Ëi&¥ 6úm¤èsÌ\F`÷pÉ%åÕâDê’Ãs"J EÐãÏé|3á�d:Áv[k¸€7}ük[ë}ØHX•xÉ =¼“[9T™�~nø·ö}ø�ákÙ¡‡Ã÷ž$°Â×SðìjKqIV’Âú�¬»qæG5¸Œ9+ Äê°ÿ ÇâOýïá%¯ò M¯‰·¬Qü?ñ’³�ŸÃzµ¬@ŸïMsk(=YÜ(êH€>¶øû:jÕlüeãÄ‚+û/‡ã–;£kv?Õj�Ä%­ÌöÇ÷–––ï8Žo.âYÒX|†û2€ ( € ( € ( € ( € ( € ( € ( € ( € ( €?<¿k/Øîûâv­?ÄŸ†fÎ?\Ax‹Ã—sÇemâFµ�`¶Ô4ûÙŠÚÙë"¡µ¸†ñà°¿Š8®êÒî)ÍÿçüUÂ3:¯1Ëy.I,FmB8ŽXòÆ¥9¿v”R„£'TIIΜâý¯úôMúb`|0ÊhxoâbÆÕàêêχ¸‹ F¦7ÃqÅV•|N_˜`©Bx¬fM,EZج=lqüZµpðÂâ°•hÃù›¨~ÏtË™-.~|G’X™•ŸOð†¹«[§˽Ҭ®ìæ_î¼Sº0åY�¯Íªdå)8K(Ì[N×§„¯V:v�*SƒõRiî·?Ó,¿é àVg†§‹Ãx¿áÍ:UcƇä™N%)+¥Sšã0xÊ2·Å ¸xN/I(´âRÿ…ñ·þˆçÅOü7¾.ÿåMGö&uÿB|Óÿ1ü îÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=ƒþWÆßú#Ÿ?ðÞø»ÿ•4bg_ô'Í?ðƒÿÊþ#¯‚_ôxü+ÿÅ…Â?üöøQ_èŽ|TÿÃ{âïþTÑý‰�П4ÿ _ÿ(øŽ¾ Ñãð¯ÿÿóØ?áE|mÿ¢9ñSÿ ï‹¿ùSGö&uÿB|Óÿ1ü ?â:ø%ÿG�¿üX\#ÿÏ`ÿ…ñ·þˆçÅOü7¾.ÿåMØ™×ý óOü Åÿò€ÿˆëà—ý? ÿñap�ÿ=‹v_³ïÇKûˆí ø?ñ&9$eUkßkúm¸,p<˽FÆÚÖ%ÏÞyeUQó1 [†AžT’ŒrŒÅ6ì¹ðuéÇç:”éÁz¹¤ºÚç&7éà^_‡©Š¯ã†Õ)ÓŒ¥(à¸Ë Ìñ E]ªxL·ŠÅÕ“KÝ…*3œß»åhËôƒöPý�5O‡úå—Ä¿Š‹f¾$ÓÕ¤ðÏ„í§Šþ=îXÌgVÖ/ yl®58#yRÂÎÊK«['a|×r^¥ºZþ‰Â¼W^–h¡õšjøl,dª*jÞÖ´ãxJ¬Sjƒ”`ß´çsQŒ?Íï¥Ó/,ñ#Æøiá\±�†ó FŸñ^&…lLï J¢¨²¬Ÿ^±¸|²½HR–?Œ†�„e�XH`爖/ô†¿E?Í𠱾ȅ ÿÜSÿO:�zP@P@P@P@P@PÿÓþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@�¿]ßâgÄýGŒ¼FƒýÈõk´�óES@ P@P@ú=û$;·Ã=L7Hüeª$~èt�Î?ànãüšúŠ€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ûáWüˆZýÅ?ôó¨Ð¡P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@“ô·Ò~-xÖÝ••nuEÕ#$pé«ÚÛêE”òD—N„ŽŽŒ§ ¬(Èè € ( € ( ÓÏÙƒK};á.—pêÈÚÆ©¬j€0ÁÙö¯ìØÛv¼zjº7#)€>„ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>ÆøUÿ"ƒÿqOý<ê4èTP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@þ×¾x5_xÚÞ3ö{ûVðþ¢ê¿$w–m-æžî{Éwk5ÜCÑ4à03–øÆ€ ( € ( €.iöz­ýŽ™a \^ê7vÖ6p'-5ÕÜÉ/¼’º¨úûPì·…´ÆøUÿ"ƒÿqOý<ê4èTP@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@|ßñëàŒ,¿á!ðôqAã-:Fe†zÊ,•±¸‘±wЂ³îä*„±Ý0€Á=�æÅå�Þ�wsam=�íœÒ[ÝZ\ÄðÜ[Ï–¢�ŽD`U‘†Aæ€+P@P@ÕðwàÞ±ñ?UIåI¬<%cp£WÖ6íi¶áÛMÒË«,÷ò©I´68žã{µ½µÀê.‘¤éÚ™c£i‘Xéºm´v–v°‚"Q’YÝØåä–Fif‘žY]¤wvÑ €2uÝoLðÞ�¨kºÍÒYiš]³Ý^\>HHÓ€¨£-$ÒÈR!Œ4“M$qF¬îŠÀx‡ö¿ñ ßJ<)á�ÛMGe‚O}ºúöxÁÂË$ZuþŸ«8Œ -ØŒ�¢â\n` økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(ÿ†¼ø“ÿ@Oÿà·^ÿæ’€økω?ôð?þ uïþi(µçÄžú�ñßv¼8úÿÂHqù~tî_ iKjÖÞñ>›o ëwÍåi—vsHúN£rA"È¥Ã5Å�ԸŪ¼÷1]?îD±Nmá¸úš€ ûáWüˆZýÅ?ôó¨Ð¡P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@ãß¾ xGâlFâö6Ò|C~]·ˆ,"O´•QˆáÔmÎØõ;dÀÚ’¼W1(Ùmwn�"¸Á8ø ñÁ2M,š<ºö“æ]c@Ž[øC�÷v‰¾±*¸2¼öæÕX•ŽêP PŒA ‚8 ðAAˆ4”PæƒáŸø¢ìXøwEÔµ›¬¨hôûI®| Çî$E1[Eë,ïJ9g@^ü7ý”.H5O‰7K *REðΗq¾iOS©ªB<¸“�¯˜Ò¼ŠÙMFVVûkMÓtýÆÛLÒ¬­´ý>Î%†ÖÎ΂ޗ¢GaUFrÌq–fgl³Àh €>jý«~Ýÿ ±~Éæ}Ÿþm#ûSgÝû“åù¿ìiÿgc?ò×Ë ÍJ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÓÑ~Ýý±¤ÿeùŸÚÚv?ÙÞWúß·}ª/²yxçÌûG—³ÅŠý­ €>ÆøUÿ"ƒÿqOý<ê4èTP@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@ž¹à?x•Œš÷…tVvÎn®ô»I/9ë‹Ï(].z�³ œ’prþÏ&mïà»u9Î"ÕüCçýÈ5x�l1Ú€54ï‚ ô·mà]Fý¡ú²ätù5Yïþ+õÝÕ@=*ÎÊËO�-l--lmcâ;k8"¶�8ÇÉ (‘¯•G…Z € (  �wDÓŸð�Œþ•{—Â_Ù®ÇÀúµ·‰¼O©[ëÚÝ‹yºe¥œ2&“§\€@½/p«q}usjÏ´V¯û᳋y­À>¦ €>ÆøUÿ"ƒÿqOý<ê4èTP@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÖþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@pÿ¼oeðóÂ:§Š/b7&Í#†ÆÈ>ƾÔnŸÊ³µßÏ–†CæÜHš+h§‘QÙUó;Ä?þ(øŠú[Ù¼a­iHîÍ�‡ï®t;+hÉÊÃvE$ªƒ $»šæá€Ì“9$Ðü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔÂÎø“ÿEÇøVëßü�@ü,ï‰?ôP|qÿ…n½ÿÉÔ‰ß¿è øãññfºC}ƒô?Ö€=ëà×íâ‹i¾ñ¶§6» ê·PX&£~Dšž‘srâ{–½ùf¼²3:-â^4ÒÅ7ò§”öó€~‡P@c|*ÿ‘ Aÿ¸§þžuô*( € ( € ( € ( € ( € ( ÿ×þþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@|ñûO膻ð¶æ]>9&mX°×®á‰K»X[ÛßY]HrRÕuy1äG¼²·Ê„¨æ5P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@t>Ð5ø“Eðþ—’^êš�µ´^Z–0£H{§Æ6ÃiËs<„펞C€¦€?gè ±¾È… ÿÜSÿO:�zP@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@5•]YUÑÔ«£ÊÊà ¬§!•� ‚0G<ÐÏ!ý—þk×Òßõáç�ÚIm¼?}modds–hí/ôýJ;e'8†ÓÈ·@qH�ÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝðÈ ¿è7ã�üh?üÍÐÿ ‡ðÛþƒ~8ÿÁ–ƒÿÌÝöDøkÿA¿c©h\ûqá¼þTëžøGà‡l¾Ó\ê3ÇäϬj3}·T’‚aYŠE ´.Ê­$VVöÉ3*„…¨¦P@c|*ÿ‘ Aÿ¸§þžuô*( € ( € ( € ( € ( € ( ÿÑþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ( € ( € ( € ( € ç¼]ÿ"§‰ÿì^Ö¿ôÛs@ P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ö7¯ù´ûŠéçQ B € ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ç|^@🊠áÝl’NM¹$’x¤ÿJøOí6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc í6ÿóÞûûi·ÿžðÿߨèûM¿ü÷‡þþÇ@Úmÿç¼?÷ö:>Óoÿ=áÿ¿±Ðö›ùïýýŽ€´ÛÿÏxïìt}¦ßþ{Ãÿc ²þ2¿€tV §ûS ¤08ÖµpGc�¥zP@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € ÏÕ­`¾Òµ;+¨üÛkÍ>òÖâ-ΞdÒE4{ãe‘7Æì»£euÎUƒTÄáXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäêõÿ év:6…c¦é°}šÊÛí>LlÓló¯..$ýåÄ’ÊÛ¥–Gùݱ»jáB­oÐ@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (?QÕ´Í&´jwÖ¶0󆹙".G%bF!å~Ÿ$AœöМê<-hÅ,ãÔu6ÃÁn¶ðz½ÛÃ0Ïb qôà°:ÿâ ˆ¼7#®z¾ª±¶=v®Ÿ(϶ü{Œ|Àí¾6inGÛ4Kûuîm®-îÈú Ež1øæ€;�#â„õ–XíõX­î¬¤$ôUy¶ÛÊ䜆YÓ®(´ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €@“€9$ôÔôéõü¨Ä@mÁ»Žázð+íBûS¸{½Bîâòåþô×¼¯Œ’Kƒ?,i„A€ N€ ( ëÃuï 4q,ͨiªT6�y#º"Ö“ÒZ0uP4å rr NxoÅWŠl¾×¦Ìwǵn­%ÂÝZHÀáf@H*Ø>\È^)@!X:HŠÑP@Ækþ>ðׇ%kkëÆšõp^ÊÆ?´ÜGÆ@˜å!�È!„sJ’!‚•!Ø•ÿ…Ñáoùð×ÿðOÿå¨þ_•ðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨{Fø™áMjtµŽêk ™X$1jq-¸•ÎE�$šØ;æVv;cŸ˜¿ € ( €+ÝÝÚØ[Ëw{q ­¬ ¾Yç‘c‰8ù�ˆ$…P>fbAc†óK¿Œ¶•£‰u[åS�:ÒÎ%‰½×í—v’‘îb\õû átx[þ|5ÿüÓ¿ùm@ì>-øFöUŠWÔ4íä(’þÕY'3Ú\^y`ž®ûQG.@Ð¥E,SÅÐIÐÊ‹$RÄë$rFãr¼n¥•Ñ�YIr:Š’€ ( €9�Åú†‚®©|©pë¾;8®.ÝyÃy)þ­‚IžÙ�‰0~3øX>ï6;‹]?ÜgTSù�üèü-‘þ�¯Žz›]?ÜãU'�`O =(±ðÿ�|;âV0é·¸» \ØÝ!·»ÚY’6,“.mä” åÊŒnêè € (®é4’2¢"³»»DEffl*ª€K18“ŒP›j_<#§ÌÐG5î¦ÈJ³é¶é$;‡]³\Ïk£Ñái#nªäÐoü.� φ¿ÿ€ºwÿ-¨{Œ^žEI"Ö,Ôžf¸³�£_v——R‘þìdûhÒìoìµ;X¯tû¨o-fŽx:68e$r®‡åxÜF]U�U·@P@P@P@P@P@P@P@P@P@P@P@P@P^­­iz©½Õo"³·j´„—•ñŸ.�4³È@'ˉ¶‚H (�Kñ—‘¹DµÖçPHEih½À›P‚@mÈ®(?ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶  "øËáI#Úëp) %´´(¾äC¨O!¾Ô'Ó4èºNµ¥ë¶¢÷J¼ŠòÜ�¬Ñ’'Æ|¹âp²Á .TFÚA© À”Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €>|ø¡ãÇ’Yü3£ÎVó¯wa¦�pú|N­Ä1ýÛ²2d“6Ǥ¾h…P@P@kèzÞ¡áíFKM˜ÅO”¬<ùÓ÷Â_Ý!‹Ërà÷—rMö‰.®$¸'q�畦-œîóY‹ç îÎyÈÀ ]øñ#P´¿¶Ñõë©/tû¹Þ »—2\ØÍ!Û{‡%åµw!$hY#q:0ÒtóÅ¿\_ë­¡Ç#.Ÿ¤ˆ·Ä{éaÉ3Œ ÞLr¬†Ý±–f\y¤Ð’P@{§ÁÏ\ »¯ ÜHÒ[<^Ø$ýžh�>Ñ}Äs¤†}™� ²üÓ>àrÕõK]L¼ÕoX­½”-+ã�³¶(£Î’iY"ŒwPJŽhä�øß^ñ%Ä�qw5µ‘cäé¶²¼v±GŸ•d TÜÉ�–špĶv,Iµ(MÖµmu¸Ó5»9ƒ~æV¾9ݱhfBzÇ4N‡ºœPÕñŠø·L‘®!Õ,#¾Š>#�H †ê$•Žmެ„Ÿ.TqÂ4tÒxƒU]EÔõfPæÆÒI£C�²O�–ñ±…’v��ºžÂ€>)¾½ºÔ®î/¯f{‹«©ZY¦�å�ÛÓ²ªŒ*"áQ¢ªU €&·¸žÒxn­¥x.-äIaš&+$r! ެ0AúsÈ ´<'­ø{LÕœšæ·*¼(º·‘íî Ž6£ËÈ‹ÙG=h‹ø“ã¹¼7ZV”Ê5{¸¼ç¸eY�©fDuFÊ5ÌÌ­å ’4F‘�îŒÐÍ7z�ýüÆâööêîvmÆ[‰ä–LŸFvb1Ø 0(oáˆzLJ®¡ŠòæãQÑÙÕ.-.$iä‚2@2ÙI#n‰ãa˜ —•eWe’ ¬ š+˜a¸‚E– âŽheC”’)P4ñ§ˆ®ðõÍÌ.P»?bÓÇužU;çŸøö„<ªHØe#ä8 �Y‹ÌK3ÌÌI,IÉ$žI'’O$òh( € ( € ô�†>&m ÄZO&Ý7Xhí.’+‚H³¹”¬¯äÈÄíÌîÙò’€>° €<‹ãGüŠÖöµÿÓ~©þÈ ™( € ( € ( € ( € ( € ( € ( yø!Ÿ7Ľq³IϦwj8üzãñ  ‡¼Açok_hÝçÿkj>vìîó~Ù6üîù³»=yõ  ŠQœ�¹Ý‘·sÛç9éŠûÂ×Íû5·ŸŸ;ȇÎÏ_7Ë_39ç;óœÐÇž=ÿ‘ÇÄöý(‘ € ô�…ÿ„ÒÃÿ�mC?O²K×ñÇãøP¯ü_ó¿á>VíŸÚv_hÆqäâ}»±Æß´yxÝ·¾(åŠ(ؾ yßð‘j[wyØÒy½vùŸm²òsÛ~ß;n‡ÌÇzõω_ò$k¿õÎËÿNVTò P@X|'Ïü!vYÏü}êú}©ú~9üðï‰þwü&ÚÇ�»°òs�¾Oöu®Ý�±»vìqæoÏÍšà( ²|çÂáÿ?vÿ°.ÝÙÏ“æIö~¿Ãö+om¸Ç  øÅŸøKbÎäg�§ŸyÓñÏãøÐ”Ð@oøSþFŸ ÿØGÿÓ…½}³@P@P@P@P@P@P@P@P@P@P@P@P@PÀôP@P@P@P@PßPa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ™~1ê­uâm-[0éVh]3ÒîûÈH÷¶[Lg8äÿÈh € ( € (A ‚ ‚8 Ž„ÄûcÂÚ¡Ö¼;¤jlÛ¥º²‹ÏaÐÝC˜.±Óé1KÇnœã4¿@g�´ |Gá«Ë+QºöŽúÉ8ýåŶìÂ2@<41–!D’)b@:cŒF†Ö ŽîÌä2WsÊ,tÒxƒJ]sEÔô–`†úÒHcs�±Ï�öò0•Žu�ؼŽâ€>)¾²ºÓnî,oa{{«YZ)¡�a‘×Ó³+ 2:å] º¬ U €&··žîxmm¢yî.$H¡†%-$’9 ˆª2I$�úñÉ ´<'¢Ÿx{LÒ\†šÚ×,¼©º¸‘î.žw"K+Æ�ÝO(‹ø“àI¼IZ®”ªu{H¼—·fXÅõ¨ftEvÂ-Ì,ÍåRDv�œmŒPÍ7zuý„ÆÞöÊêÒum¦+ˆ$ŠL�EuRsØŒ‚0G°oᇚLjn¡–òÚãNÑÕÕî.î#h$ž0A1YG"î•äQ?–`‹–fgUŽP¬ †+ha·‚5Š"ŽbA„Ž(�$q¨ì¨ŠG ö øÉáÛ‹…²ñ¬m*ZAöD Ɇ5¥µ¸ dùbYæŠVÀØ^�¥¨çÊ( Lø]áÛ�_ÄVÚ‹FÃNÑ¥[¹§#ä{´´·�»Ëæ•�À,QûKǸêÊ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>4ñ§‡n<7¯^ZI Iæ–çN›»šÒW,Š­ÞK}ÞDÊpÁÓv6HŒÀ•P@P@P@P@o‚ü;qâMzÎÒ8ØÚA4W:ŒØýÜ6‘8gVnÒ\mò!Q–.û±²7eû.€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Œ¼sp×^/ñ ŒrWS¸·ÿ€Ú0´Qø,P)@P@P@}Oð‚á¦ð€Œž-5;ÛuöVX.ð?àWLzõ(Œ×üá¯Ê×7Öm ë`=팟f¸“Œ0ÃÃ;€‰&‰ä † (+ÿ _Âßóÿ¯ÿàVŸÿÊ£üÿ:?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐö�ðÏš,éu¬×÷10xeÔå[�ŒëG ±u 2;ÂÌŒ7FA(@P@W»´µ¿·–ÒöÞ«Y×d°OÉ®só#2 ¤|ÊÀ2�Ã*æ—ü%s+Ij¶*Ç>M¥äMû/Û-.åØÊØè÷€*ÿ—ð·üÿëÿø§ò¦€/Ø|$ð�”«,©¨j;aýÒ²Ad´·³ó=Q÷#H JŠ( Š8`Ž8a‰8¢‰8ã�ÕHÑBª"€ª€àt%P@s:ÿ„4…mRÅ^ádw�3[Ý¢ó…ó“ýb)$¬s$Ñ«B‚IP$üð±$ý»^\öZ~°Î–Çó'ùÐ> x[#ý?_<ô7Z~±Æ”>ÄB:ÐcáÿxwÃLfÓl³vT¡¾ºsqw´Œ2¤Œ![ÇqÆÚÕÐ@P]DhäUtudtu ŽŒ0ÊÊÙVV†R0G9 6Ô¾øGP™§ŽÝ1œ–dÓn8w»a¹‚ê8‡¢B±Æ½  ßøRþÿŸýÿ´ïþTÐöÿ|%ŠòK¬^(<ÃqyÆÞÌm,íeýÙ÷Ð¥ØØYi–±Yiö°ÙÚÂ1 D\òÌ@å�ÏÌò9.ìK;3Ìn€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ½[EÒõÛSeªÙÅynNåYãd¡Y`�G™£m$T•`:—à×…$réu­À¤’#ŠîТû6Ÿ<„ÛœŸ\Ðð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@Eðk‘¸wºÖçPA1Ëwh½‰‡O‚@}®¦(Ñt�KЭE–•g�¸;™c¼¯Œy“Ê奞Bd®í´P@5( ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ‹Z € ( € ( «Ážx‚ÇOØÆÕ_íZƒ�‘”ZPOð™‰[hÛœI2¤@f€€@?¥-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ØiñáýµÿÑÒP…P@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè eVR¬+¬¬VR0A ‚2#ps@&|Bðd¾ÔšæÖ6mþF{I%m%l³ØJßÂS­‹ÞÀ1–’)hÎè € ( €$†n%Ž#y¦šDŠ(£RòI#°TDEË3³ª d“�šúßáÿ„ºOú@VÕµ×î0Â0ÙF°o1”âIÚF£X¨½ € ͼÖt}9Äz†«¦ØHÃ!//­m\ƒÜ$ò£}@Çæ(—ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÿÐÉ àãNÿãô±osmyÏiqÔ÷f·–9âlvHÙ�þëž O@v_üxAÿmôt”¡@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €)ju–«g>Ÿ¨[¥Í¥Êl–uVR>d‘ŽD!ãuŒ¬”åÿ|7Ôü8òÞX,º–�–q2&ë›4ë¶ö$_¸£�µÆ¦&2, ÊŒæ”P@¡¦éZޱt–Ze¤×—2tŽÎÕÎ ’9ÂEçæ–WH×øš€>›ð/ë_ …Ôuæ¶é€ê7[éêà ®åæe;eºeFÛ˜âUF�Êé´P@WÄÍᯠÜÞÚ�··2Çag!ˆg¸Y¦ÁÈ-Í$`‚¾j¦ðË‘@ Í4×É=IJO<®d–i]¤–Gc–w‘‰gbNK1ÉïŒÐTP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užñEç†5‹k˜¦“ìMz�¦ãäÏl͵ÜÇÓÏ…I’ YvcwFû2€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (Ïuÿ†~×çKvÒ¯$ÜiÛ"�ÜóºkFF·r[%Ú5ŠY ËJ(Ëu‚úì N›©i÷ñŒàN&±œúa6ÜÂ}óp¾ÝNÐuþøÝ ¤G(Î7&¥¦…úþöî6Çü?^´nÛá'ŒnÁadV¹¾�À÷"ÍnÏä=ûá@;�#൤L²kz´·XÁ6º|bÞ<ú5̾l²!èBCnýÊõí+EÒ´;qk¥XÛÙCÆñ ~òVQ€óÌÙšw�ó;°dŒP¥P@WÄMâ_ ÜÙZ€×¶ÒÇg §·Y¡ÉÀ ,Md�¾k&ò«“@ Í ÖòÉÄRA�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO ÿз àŸNÿã±ommgÁio¬ ÷a·Š8"\ÿv8ÕP~ëŽO@v_üxAÿmôt”¡@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €� ³ª –bp’IÀI'�jóMOâÇ„´ë‡¶I/µ6�мºm¼2[†²Ü\Ú¬£=$„É °ù¨;þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.ŸÿËSü¿:ìü;ã=Å×Lºasï’Æé<‹´Oï„ÜÉ2@g�åT$*YKuTPa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ÓâÆ¥s§xJD¶fC¨ß[éÓ:måŠây”È­°�ÿ½¬¿Ähå*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÒÑõ+�#T±Ô­–{K˜å]¤�êBØê“F^)ðÈå{šûš€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €0£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúõÿüêüb€=Àÿ õk�J×R×­OÓìåŽámnFÛ«ÙbmñFmùx`�§ØîƒËŽ3½�>• €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ËÖÞò=W“NŠ;�B=.ýì`”�׋i+ZÅ)2ÂrN™¢X“*`º€|íý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒP»x6mbãÃzlÚý¥½Ž®ÿlû]­«+ÁÛû¥ƒËe¹»S¾Ùa‘±q&Ø„lPž€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ÏÔõ];Gµ{ÝNî;dàÉ3csc!#A™&•€;b‰FþphÃõÿŒÒ–x<9`¨ƒ*/õÝ#vß ¤rL}äiå“ áàS‘@[¨xËÅ:£y®j%[9Š ÚÒõ·´ò!8í”b?¸�y¥•·K,’6s¹Ý�³ë–$çñÏÓ4nÛUÕ,ˆk=Jþч Û^\@GÐÅ"ŸÎ€;�#â§‹4ÆU¸¹‹V·-B52c¹[¨|›�äpc:Ž¥ø€=»Ãt´v®ÇKÔŸj‹;ÇO.w?Ãit6Ç1Éc�C;Ÿ»uzP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €9ø«Oð¦œo.Ï›q.ä±±Fk¹€ çË‚<†žr ƤWŠ7ù3_ñ«â[Ö¾Õ. �–[¦RÚÒ2Õ[Å’` Îs,¤n•ݾf € ( €=ÇáÿÄÉmäƒDñ%Á–ÙÊÅeªÌÙ’Ù� ôŒI’ÜŸ•.\—€ñ34|CƒžG òï@Rþþ×L²¹Ô/eÚÙÂóÏ!É ÎFK»,h£s»*.Y…|½â/Š>"Õî$m̺6žˆ!´`—n€ü²\]€eó[©KvŠ$fÙJùÌÉÂWâŸú5ÿüjü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãô¯¥|Cñn•:J5{›øÁe¶§#ßE*÷Ró3\Gþü2Æþ§†ú{¾&³ñV“¥j¦.íYƒ½­ÊfŒ¶|l¬²C&ѽd#‡Eé([×´¿Y5ö«t¶Ðƒ²5Áy®$ÆD6ð¯Ï,„ �£j.^FDRêä³ün²YŠÛx~ê[|ñ,÷Ñ[ÊG¯�–÷(·ŸîOA@ÿ…üw¡ø«0ÙÉ%­ú)wÓîÂ$åÞ’Fxî#[Ë12Ä€© ΀8OxÖØÇ寗Z¥îñelìDh©€÷W;Nÿ&6eU�v¼îJ#€²<@7ßxïÅÚ„­4ºþ£âHŽÆâK�g…T³0‚@_{�>f'%€(ÿÂWâŸúuÿüj?ü~€-ZxÛŶr¬Ñx‡UvS�·wrßD}šéôÆI ¡¼ãÔñdRÙÞǶ³i–D‹"Ë}ʆæbÆ6�Ùx‹0ÒHØ£´pzMy÷Š>$h^™¬ˆ—RÔSýe¥™M¶äŒ…º¸s²'=ãEšd"U*X‘³øÙ§É0KýêÒÀyÖ÷‘Þ2‚q¹¢{{N9`Žì8Hì:n§a«ÙæÜÇwi8ÊKî>ò:œùé@Éà‰·:•äˆZ7¹¹"+I!3N~åµÔiˆ¼ÉOË Ñ*“lMi<Ê÷( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+�Ì�â=iY‰$C¨Ý[§>‘[Éj=   ¿á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€$‹Æ+…ĉâ=m™H K©ÝΜzÇ4¯PÊAèhÚþ|KŸWº‹C×Ìfö`VÇPD ©sö{˜Ð’á€c ±,QÊG’cYJ<àÕ@v_üxAÿmôt”¡@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  —×¶Úm�Íýä‚+[HdžyðÇ–8Äí�¨ƒ,îUT!Xã?øŠóÄú½Æ§tJ£�¶r––ˆÇÊ…yÁló8Ì™ÝðPz€ ( € ( ¤þø½õ+Vðî¡.ûÍ> ú|²½Å‚aL’wIg• ƒ¹­™FÒ w e €<§ãÄ�xN(ш[½bÎÞ`?Š5‚òì)öómboª�Jùv€ ( € ( € ( € ( € ( € ( € öï‚w.§­Ú>L¶0\2öó ¸ò‘‡¡Ûràã¯è(èªù'ânµ>­â«øÛìšL‡O´‡?*°.¤ÀàÉ5È�—ÆãCgËZóÚµc{s§^[_ÙÊÐÝZL“Á"œt9þò°ù]Uв0*ÄPÜeêêZnŸ¨ªí[û+KÅ_#˜/~T>:öï@/|X¸’oÞDìJÚZX[ÂðÆÖÉt@úËs+}XûP›P@v¿îd¶ñ–†Ñ’<Û—¶�g†Žâ bpGBààŒªÃ•õ‹ui4? êú¤8óí­H·$æâDµ·r§‚M29\üÁqÆhâÉ$’YY]ä–Wi$‘Ø»É#�ÎîÍ–gf%™‰É$“œÐ(×¾ëSÚkòhÅÙ­5X&uˆœª^ZDgY”…-mÑÉ´fLC¸â%ôˆn$³Ð5˸X¬Öº>§q É”ò#؆PGÒ€> € (éo‚÷IáýFÝØ²[j¬bøkkve_EÞ¬øãæv=É` �Ôâ}3Ãñ;%¹·þÓºU$ Ýæ–ÞÙeaò&“aÈ-">D4áP×ÿu©õÏ ØÜ];Kwhòé÷±ËJÖÅ|©œ–‘­ž5ØååÞç;�yÿÆû‰~´ D2>¥q"öi![(áb=cYç�ùhzP€P@I²A,sDÅ%†D–7^ IFœ`ã¨ï@xBþl1HF ‘ÆäÛÔ6? ДP@P@P@P@P@P@P@P@P@P@P@P@P@ j÷^jº�Ô¬Z[‹ûÉ��RÒ\HçéŒàÀ  ê( € ( € ( € ( €'µ¸’ÎêÚî+-¬ðÜDêÉ‹"0÷  ÐÞ4Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÍ®µ½•‡‡à|5ûÛÐ&ÖÝöÛFÞ©-ʼ�°Ö‹êC|ë@P@P@š&«>‰«Xj¶Äù¶W .ÜãÌ�îM ~Yái!oö\ãhíëkˆ®í­îàmð]CÄ.:-Òd×<7«épãϹµ&Ük›yêÝ …4(…±ò†Ï8 ‹$ŽH¤x¥GŽX�£’7R�ˆvº:¶]Xe# ‚1@  ^ø?¢Ïw¯É¬”e´Ò ™R0¯yw�aRF­´“I&Ó˜óá‰TÐÐ^!·’ó@×-!RÓ]hú�¼J9-$öSÆŠrY€Zø~€ ( ¥¾ Ûɇõ‡R©sª°ˆŸãXm­Õ™}W{2gŸ™v!@0>4h³™ôÏDŒöâßû2é” tš[‹g|…›Ïš=ç4h™%ÐP„P@_ü9ÑgÐü+cot�ÝÛ˨\Dà \•ò£ppVE¶H<Ôa”—zm4çÿíä1øvì)0Æú•¼�Ùd™l¤…Iõ‘`œŽå™ë@@$QI<±Ã—–i(Ñy/$Œ2Yˆž§µ}á yPÅ91Ç;ìP¹üq@P@P@P@P@P@P@P@P@P@P@P@P@P@|1«ÛÉgªêv²©Ymïï!u=CGq"®q�Gr8"€3¨ € ( € ( € ( € žÖÞKË«kHT´·SÃoŽ­$ò,h£Ü³@xÐ@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ‘~&ß5÷ŒµQœÇeö{‡÷V#2�ü ’vÿ�sÒ€8( € ( € (믆WÍ}àÝ(¹Ý%§Ú,Xÿ³m<‚ÿ¶hðâ€;ê©ak©Ù\é÷± ­o!x'Œäec*ÃN7S¹U× ¢€>^ñÂïi6Ú]gO,LZ({´B~Xî-ù«Ð½ºË�¿tE¼•ä¿áñOý zÿþ õþ1@ü"ž)ÿ¡k_ÿÁ>£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øEÒ@’ÆÞKøœg†W³Pc€~e!@(ÿÂ)âŸúµÿüê?üb€-Zx'Å·’¬1x{UFc�×v’ØÄ=ÚkÁJ>¯ôΠ¡¼à$ðœRÞ^ÉγwŠG‹&;}ÊæÚ`¦F‘ÕyJ¨%8Ô"4“€zMy÷Š>è^&™¯I—MÔ_ýeݘM· º·q²WäF†g %e ‘³ø'§Ç0{ýrêîÀù6öqÙ³sµ¥{‹¾bˆŒA8(@4ì:n™a¤YÃa¦ÛGiiÂEî~ó»¼’¹æId-#·,Iû ¨ç¿ü,¾kÛ�WÃQ-ÄR<×`‘#šÞg;¤{O0¤r@ìYü�ë$Dì…%M¨€XÞñR1Sá½t�‡I¾uü!e?POë@ ÿ„SÅ?ô-kÿø'ÔøÅtúÃj÷‹ËI4{ Ãι¾O.`¹äAhXO$„}Ýé?Þ”q@QiZ]¦�§Zi–˜ílâD Ë·%žI�ÒË#4²¶çv ( P‹«[këy­/ ŽæÚá sA2ŽD=™NG\z«Ë†Ð�j_´›‰ÚM3UºÓbcŸ³Íߤ|ýØœÍm(@8Y&qÔÈØ"€7<7ð³AЮ#½¸’]^öÝ"Gk ‹÷eŽÑK*žU§–PŒãUu ›@ž!Ðl¼I¥\éWÙXæâ™2[\G“ ÄyÀ,„ᔜIåÍÔ‰˜¼È�Í 13…“l­(hüº÷( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€$‹Áþ+™ÄiáÍmYˆË¦]ÀœúÉ4I�RÌêhÚþ|4ŸHº‹\×ÄböZÇOG‹Yqö‹™˜žáAa Q4±ÄOœdiB$Õ@v_üxAÿmôt”¡@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Š|\ÌÞ*ñ!n¿Ûš¢úü«{2¯þ:Ó§jçh € ( € ( §¾ ³ ݃Ñu˵_÷~ŧ7Ÿ37óï@µ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ޾!Z?kÑ�@–ì]©ìÂö®‰¿4¬§ù”Ž"€8Ê( € ( € (êÿ„ö†ÛÁ¶’0*o®ï®ðx$yßeSÿ[PËÓ*Aôš( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ž~4hÍÞ™¯F§Ë¸„é·Dx ÏlÌ{´ÑI2x[Q×"€<6€ ( € ( €'¶·šòâ Kt2Os4Vðƽ^YœG޼³°?:ûƒHÓãÒt½?Lˆå,,ííCca†5G”ŽÍ+†‘¿ÚozÑ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ?hpx�F¾ÒnAsa›6÷1‘%¼Ã¾U_1Aâ/@s@_ØÝi—·6±4V“<3FßÂèzƒÑ‘Æ7\«£+©*ÀÐJ( € ( €=¯á…Zêõ¼My¶%áÓC ïJK8ÎCGiSŒ}¢L«·q@FÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €<¿â'€—İiiª‘ë–±íÚp‰¨Àœˆ$c…[ˆÁ?f™ˆSþ¢b#1ÉË“Á5´Ò[ÜE$Âí°Ê�‘ȇ ŽŒ+)à‚2=ñ@P@P@ׂ|{âËÀî$¶Ñíäl½Æ ã“ki‘‰.p͆ŽÝI&XÇ ZÙYÛiÖ–ö6p¥½­¬I  Â¤h0rÌ~ó»îå�Ë3@h  z…ý¦—es¨_J°ZZDÓO+sµW°–wb4\´ŽÊŠ 0à:ŸÆ­HÜ8Ñô«íUˆ�µ/´\\H££²Û\ÚÇ aÉŒ<Ûzy��¸;þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Åóá à.£ÿËSü¿:ôüR·ñäZV«kŸ¨\¶³@ìÖwRã>FÙI’ÞfÆ!V’U•¿vd1¤ ·@v_üxAÿmôt”¡@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € â|WàMÅhe�Mž¦©¶-JÝÍ *\ÆJ­ÔK€¹YP ±K—Üó¾¿ðïÄÚ ;½“j6k’/tå{ˆÂâš_´[�¸.d�Ê…™±@)àðGÔP@~•©jÓ }2Æêú^2¶Ð¼»þ)AXÓÕädA݀ɠhð¿Áé Gw≂ ÚÃJ´“s¿}·wi…AÙ£µgf‹” «{Í­­µ•¼V–�Emmá‚Xâ�ðª.ä’{–$œ“šž€ (Ë>0}£þäîòÿµl¾×·§Ùü»�»ÿÙû_ÙqŸãÛ@-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P«´}¶Ï웾×ö«²ìûÿhóSÉÛŽwy›vã½}Ý@v_üxAÿmôt”¡@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (  }CÃÚªKj:F�y!ë,Ö�´üúO°Ì3ßkÄçP:ÿ <#nm 0sŸ’÷R‰ÕqíŒ{ |Àí¼àëB/Ø1>Ò²^�Ä^<àþ ~¹ ª ¶�a·†("_»1¤Q¯û¨€(éØ~t-P@SÔ,-5K+�>ú%žÒî&†x›�ÊÝÁ«£ñºá£uWRA Ôþ êBáÎ�ªØÉjÌLk©}¢Þâ5=šÚÚê9ŠŽ �!Ý×Ë\� ßð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ(ÿŸýÿµþUçùP x7ám¿‡ï"Õu[¨õ BÜe³µ—ó÷J—.s 4q,MûÀ� �âõº(°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €0• €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ÓâÆ›s¨øJG¶Vs§_[ê3"Y­âŠâ ˜É-È�ÿ»LßÂhå*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÒÑôÛ�_T±Ómš{»˜â] �Š[2LØè�ÆY𨅻ûš€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €€À«ÊÀ†R2<AÈ Ž#ŸzóMOá?„µ‡¹Hï´Æ‘‹òÖâ-ΞdÒE4{ãe‘7Æì»£euÎUƒTÄáXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäêõÿ év:6…c¦é°}šÊÛí>LlÓló¯..$ýåÄ’ÊÛ¥–Gùݱ»jáB­oÐ@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (?QÕ´Í&´jwÖ¶0󆹙".G%bF!å~Ÿ$AœöМê<-hÅ,ãÔu6ÃÁn¶ðz½ÛÃ0Ïb qôà°:ÿâ ˆ¼7#®z¾ª±¶=v®Ÿ(϶ü{Œ|Àí¾6inGÛ4Kûuîm®-îÈú Ež1øæ€;�#â„õ–XíõX­î¬¤$ôUy¶ÛÊ䜆YÓ®(´ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €@“€9$ôÔôéõü¨Ä@mÁ»Žázð+íBûS¸{½Bîâòåþô×¼¯Œ’Kƒ?,i„A€ N€ ( ëÃuï 4q,ͨiªT6�y#º"Ö“ÒZ0uP4å rr NxoÅWŠl¾×¦Ìwǵn­%ÂÝZHÀáf@H*Ø>\È^)@!X:HŠÑP@Ækþ>ðׇ%kkëÆšõp^ÊÆ?´ÜGÆ@˜å!�È!„sJ’!‚•!Ø•ÿ…Ñáoùð×ÿðOÿå¨þ_•ðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨{Fø™áMjtµŽêk ™X$1jq-¸•ÎE�$šØ;æVv;cŸ˜¿ € ( €+ÝÝÚØ[Ëw{q ­¬ ¾Yç‘c‰8ù�ˆ$…P>fbAc†óK¿Œ¶•£‰u[åS�:ÒÎ%‰½×í—v’‘îb\õû átx[þ|5ÿüÓ¿ùm@ì>-øFöUŠWÔ4íä(’þÕY'3Ú\^y`ž®ûQG.@Ð¥E,SÅÐIÐÊ‹$RÄë$rFãr¼n¥•Ñ�YIr:Š’€ ( €9�Åú†‚®©|©pë¾;8®.ÝyÃy)þ­‚IžÙ�‰0~3øX>ï6;‹]?ÜgTSù�üèü-‘þ�¯Žz›]?ÜãU'�`O =(±ðÿ�|;âV0é·¸» \ØÝ!·»ÚY’6,“.mä” åÊŒnêè € (®é4’2¢"³»»DEffl*ª€K18“ŒP›j_<#§ÌÐG5î¦ÈJ³é¶é$;‡]³\Ïk£Ñái#nªäÐoü.� φ¿ÿ€ºwÿ-¨{Œ^žEI"Ö,Ôžf¸³�£_v——R‘þìdûhÒìoìµ;X¯tû¨o-fŽx:68e$r®‡åxÜF]U�U·@P@P@P@P@P@P@P@P@P@P@P@P@P^­­iz©½Õo"³·j´„—•ñŸ.�4³È@'ˉ¶‚H (�Kñ—‘¹DµÖçPHEih½À›P‚@mÈ®(?ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶  "øËáI#Úëp) %´´(¾äC¨O!¾Ô'Ó4èºNµ¥ë¶¢÷J¼ŠòÜ�¬Ñ’'Æ|¹âp²Á .TFÚA© À”Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €>|ø¡ãÇ’Yü3£ÎVó¯wa¦�pú|N­Ä1ýÛ²2d“6Ǥ¾h…P@P@kèzÞ¡áíFKM˜ÅO”¬<ùÓ÷Â_Ý!‹Ërà÷—rMö‰.®$¸'q�畦-œîóY‹ç îÎyÈÀ ]øñ#P´¿¶Ñõë©/tû¹Þ »—2\ØÍ!Û{‡%åµw!$hY#q:0ÒtóÅ¿\_ë­¡Ç#.Ÿ¤ˆ·Ä{éaÉ3Œ ÞLr¬†Ý±–f\y¤Ð’P@{§ÁÏ\ »¯ ÜHÒ[<^Ø$ýžh�>Ñ}Äs¤†}™� ²üÓ>àrÕõK]L¼ÕoX­½”-+ã�³¶(£Î’iY"ŒwPJŽhä�øß^ñ%Ä�qw5µ‘cäé¶²¼v±GŸ•d TÜÉ�–špĶv,Iµ(MÖµmu¸Ó5»9ƒ~æV¾9ݱhfBzÇ4N‡ºœPÕñŠø·L‘®!Õ,#¾Š>#�H †ê$•Žmެ„Ÿ.TqÂ4tÒxƒU]EÔõfPæÆÒI£C�²O�–ñ±…’v��ºžÂ€>)¾½ºÔ®î/¯f{‹«©ZY¦�å�ÛÓ²ªŒ*"áQ¢ªU €&·¸žÒxn­¥x.-äIaš&+$r! ެ0AúsÈ ´<'­ø{LÕœšæ·*¼(º·‘íî Ž6£ËÈ‹ÙG=h‹ø“ã¹¼7ZV”Ê5{¸¼ç¸eY�©fDuFÊ5ÌÌ­å ’4F‘�îŒÐÍ7z�ýüÆâööêîvmÆ[‰ä–LŸFvb1Ø 0(oáˆzLJ®¡ŠòæãQÑÙÕ.-.$iä‚2@2ÙI#n‰ãa˜ —•eWe’ ¬ š+˜a¸‚E– âŽheC”’)P4ñ§ˆ®ðõÍÌ.P»?bÓÇužU;çŸøö„<ªHØe#ä8 �Y‹ÌK3ÌÌI,IÉ$žI'’O$òh( € ( € ô�†>&m ÄZO&Ý7Xhí.’+‚H³¹”¬¯äÈÄíÌîÙò’€>° €<‹ãGüŠÖöµÿÓ~©þÈ ™( € ( € ( € ( € ( € ( € ( yø!Ÿ7Ľq³IϦwj8üzãñ  ‡¼Açok_hÝçÿkj>vìîó~Ù6üîù³»=yõ  ŠQœ�¹Ý‘·sÛç9éŠûÂ×Íû5·ŸŸ;ȇÎÏ_7Ë_39ç;óœÐÇž=ÿ‘ÇÄöý(‘ € ô�…ÿ„ÒÃÿ�mC?O²K×ñÇãøP¯ü_ó¿á>VíŸÚv_hÆqäâ}»±Æß´yxÝ·¾(åŠ(ؾ yßð‘j[wyØÒy½vùŸm²òsÛ~ß;n‡ÌÇzõω_ò$k¿õÎËÿNVTò P@X|'Ïü!vYÏü}êú}©ú~9üðï‰þwü&ÚÇ�»°òs�¾Oöu®Ý�±»vìqæoÏÍšà( ²|çÂáÿ?vÿ°.ÝÙÏ“æIö~¿Ãö+om¸Ç  øÅŸøKbÎäg�§ŸyÓñÏãøÐ”Ð@oøSþFŸ ÿØGÿÓ…½}³@P@P@P@P@P@P@P@P@P@P@P@P@PÀôP@P@P@P@PßPa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ™~1ê­uâm-[0éVh]3ÒîûÈH÷¶[Lg8äÿÈh € ( € (A ‚ ‚8 Ž„ÄûcÂÚ¡Ö¼;¤jlÛ¥º²‹ÏaÐÝC˜.±Óé1KÇnœã4¿@g�´ |Gá«Ë+QºöŽúÉ8ýåŶìÂ2@<41–!D’)b@:cŒF†Ö ŽîÌä2WsÊ,tÒxƒJ]sEÔô–`†úÒHcs�±Ï�öò0•Žu�ؼŽâ€>)¾²ºÓnî,oa{{«YZ)¡�a‘×Ó³+ 2:å] º¬ U €&··žîxmm¢yî.$H¡†%-$’9 ˆª2I$�úñÉ ´<'¢Ÿx{LÒ\†šÚ×,¼©º¸‘î.žw"K+Æ�ÝO(‹ø“àI¼IZ®”ªu{H¼—·fXÅõ¨ftEvÂ-Ì,ÍåRDv�œmŒPÍ7zuý„ÆÞöÊêÒum¦+ˆ$ŠL�EuRsØŒ‚0G°oᇚLjn¡–òÚãNÑÕÕî.î#h$ž0A1YG"î•äQ?–`‹–fgUŽP¬ †+ha·‚5Š"ŽbA„Ž(�$q¨ì¨ŠG ö øÉáÛ‹…²ñ¬m*ZAöD Ɇ5¥µ¸ dùbYæŠVÀØ^�¥¨çÊ( Lø]áÛ�_ÄVÚ‹FÃNÑ¥[¹§#ä{´´·�»Ëæ•�À,QûKǸêÊ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>4ñ§‡n<7¯^ZI Iæ–çN›»šÒW,Š­ÞK}ÞDÊpÁÓv6HŒÀ•P@P@P@P@o‚ü;qâMzÎÒ8ØÚA4W:ŒØýÜ6‘8gVnÒ\mò!Q–.û±²7eû.€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Œ¼sp×^/ñ ŒrWS¸·ÿ€Ú0´Qø,P)@P@P@}Oð‚á¦ð€Œž-5;ÛuöVX.ð?àWLzõ(Œ×üá¯Ê×7Öm ë`=팟f¸“Œ0ÃÃ;€‰&‰ä † (+ÿ _Âßóÿ¯ÿàVŸÿÊ£üÿ:?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐö�ðÏš,éu¬×÷10xeÔå[�ŒëG ±u 2;ÂÌŒ7FA(@P@W»´µ¿·–ÒöÞ«Y×d°OÉ®só#2 ¤|ÊÀ2�Ã*æ—ü%s+Ij¶*Ç>M¥äMû/Û-.åØÊØè÷€*ÿ—ð·üÿëÿø§ò¦€/Ø|$ð�”«,©¨j;aýÒ²Ad´·³ó=Q÷#H JŠ( Š8`Ž8a‰8¢‰8ã�ÕHÑBª"€ª€àt%P@s:ÿ„4…mRÅ^ádw�3[Ý¢ó…ó“ýb)$¬s$Ñ«B‚IP$üð±$ý»^\öZ~°Î–Çó'ùÐ> x[#ý?_<ô7Z~±Æ”>ÄB:ÐcáÿxwÃLfÓl³vT¡¾ºsqw´Œ2¤Œ![ÇqÆÚÕÐ@P]DhäUtudtu ŽŒ0ÊÊÙVV†R0G9 6Ô¾øGP™§ŽÝ1œ–dÓn8w»a¹‚ê8‡¢B±Æ½  ßøRþÿŸýÿ´ïþTÐöÿ|%ŠòK¬^(<ÃqyÆÞÌm,íeýÙ÷Ð¥ØØYi–±Yiö°ÙÚÂ1 D\òÌ@å�ÏÌò9.ìK;3Ìn€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ½[EÒõÛSeªÙÅynNåYãd¡Y`�G™£m$T•`:—à×…$réu­À¤’#ŠîТû6Ÿ<„ÛœŸ\Ðð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@ü) Ïþ¿ÿ�Zwÿ*hÿ…/áoùÿ×ÿð+NÿåMð¥ü-ÿ?úÿþißü© þ¿…¿çÿ_ÿÀ­;ÿ•4—ð·üÿëÿø§ò¦€øRþÿŸýÿ´ïþTÐÿ _Âßóÿ¯ÿàV�ÿÊš?áKø[þõÿü Ó¿ùS@Eðk‘¸wºÖçPA1Ëwh½‰‡O‚@}®¦(Ñt�KЭE–•g�¸;™c¼¯Œy“Ê奞Bd®í´P@5( ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ‹Z € ( € ( «Ážx‚ÇOØÆÕ_íZƒ�‘”ZPOð™‰[hÛœI2¤@f€€@?¥-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ØiñáýµÿÑÒP…P@P@P@P@P@PÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè eVR¬+¬¬VR0A ‚2#ps@&|Bðd¾ÔšæÖ6mþF{I%m%l³ØJßÂS­‹ÞÀ1–’)hÎè € ( €$†n%Ž#y¦šDŠ(£RòI#°TDEË3³ª d“�šúßáÿ„ºOú@VÕµ×î0Â0ÙF°o1”âIÚF£X¨½ € ͼÖt}9Äz†«¦ØHÃ!//­m\ƒÜ$ò£}@Çæ(—ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÐË àãNÿãôÂWáoútüißü~€øJü-ÿC.�ÿƒ�;ÿ�Ðÿ _…¿èeÐ?ðq§ñú?á+ð·ý ºþ4ïþ?@ü%~ÿ¡—@ÿÁÆ�ÿÇèÿ„¯Âßô2èø8Ó¿øýð•ø[þ†]ÿwÿ þ¿ ÿÐÉ àãNÿãô±osmyÏiqÔ÷f·–9âlvHÙ�þëž O@v_üxAÿmôt”¡@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €)ju–«g>Ÿ¨[¥Í¥Êl–uVR>d‘ŽD!ãuŒ¬”åÿ|7Ôü8òÞX,º–�–q2&ë›4ë¶ö$_¸£�µÆ¦&2, ÊŒæ”P@¡¦éZޱt–Ze¤×—2tŽÎÕÎ ’9ÂEçæ–WH×øš€>›ð/ë_ …Ôuæ¶é€ê7[éêà ®åæe;eºeFÛ˜âUF�Êé´P@WÄÍᯠÜÞÚ�··2Çag!ˆg¸Y¦ÁÈ-Í$`‚¾j¦ðË‘@ Í4×É=IJO<®d–i]¤–Gc–w‘‰gbNK1ÉïŒÐTP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užñEç†5‹k˜¦“ìMz�¦ãäÏl͵ÜÇÓÏ…I’ YvcwFû2€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (Ïuÿ†~×çKvÒ¯$ÜiÛ"�ÜóºkFF·r[%Ú5ŠY ËJ(Ëu‚úì N›©i÷ñŒàN&±œúa6ÜÂ}óp¾ÝNÐuþøÝ ¤G(Î7&¥¦…úþöî6Çü?^´nÛá'ŒnÁadV¹¾�À÷"ÍnÏä=ûá@;�#൤L²kz´·XÁ6º|bÞ<ú5̾l²!èBCnýÊõí+EÒ´;qk¥XÛÙCÆñ ~òVQ€óÌÙšw�ó;°dŒP¥P@WÄMâ_ ÜÙZ€×¶ÒÇg §·Y¡ÉÀ ,Md�¾k&ò«“@ Í ÖòÉÄRA�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO ÿз àŸNÿã±ommgÁio¬ ÷a·Š8"\ÿv8ÕP~ëŽO@v_üxAÿmôt”¡@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €� ³ª –bp’IÀI'�jóMOâÇ„´ë‡¶I/µ6�мºm¼2[†²Ü\Ú¬£=$„É °ù¨;þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.ŸÿËSü¿:ìü;ã=Å×Lºasï’Æé<‹´Oï„ÜÉ2@g�åT$*YKuTPa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ÓâÆ¥s§xJD¶fC¨ß[éÓ:måŠây”È­°�ÿ½¬¿Ähå*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÒÑõ+�#T±Ô­–{K˜å]¤�êBØê“F^)ðÈå{šûš€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €0£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúõÿüêüb€=Àÿ õk�J×R×­OÓìåŽámnFÛ«ÙbmñFmùx`�§ØîƒËŽ3½�>• €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ËÖÞò=W“NŠ;�B=.ýì`”�׋i+ZÅ)2ÂrN™¢X“*`º€|íý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒPý³ñ‹þ…Mÿ`ÿæ’€ퟌ_ô*høÿ4”lübÿ¡S@ÿÀ˜?ù¤ ûgãý šþÁÿÍ%Û?¿èTÐ?ð&þi(þÙøÅÿB¦�ÿ�0óI@öÏÆ/ú4ü ƒÿšJ?¶~1Щ àLüÒP»x6mbãÃzlÚý¥½Ž®ÿlû]­«+ÁÛû¥ƒËe¹»S¾Ùa‘±q&Ø„lPž€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ÏÔõ];Gµ{ÝNî;dàÉ3csc!#A™&•€;b‰FþphÃõÿŒÒ–x<9`¨ƒ*/õÝ#vß ¤rL}äiå“ áàS‘@[¨xËÅ:£y®j%[9Š ÚÒõ·´ò!8í”b?¸�y¥•·K,’6s¹Ý�³ë–$çñÏÓ4nÛUÕ,ˆk=Jþч Û^\@GÐÅ"ŸÎ€;�#â§‹4ÆU¸¹‹V·-B52c¹[¨|›�äpc:Ž¥ø€=»Ãt´v®ÇKÔŸj‹;ÇO.w?Ãit6Ç1Éc�C;Ÿ»uzP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €9ø«Oð¦œo.Ï›q.ä±±Fk¹€ çË‚<†žr ƤWŠ7ù3_ñ«â[Ö¾Õ. �–[¦RÚÒ2Õ[Å’` Îs,¤n•ݾf € ( €=ÇáÿÄÉmäƒDñ%Á–ÙÊÅeªÌÙ’Ù� ôŒI’ÜŸ•.\—€ñ34|CƒžG òï@Rþþ×L²¹Ô/eÚÙÂóÏ!É ÎFK»,h£s»*.Y…|½â/Š>"Õî$m̺6žˆ!´`—n€ü²\]€eó[©KvŠ$fÙJùÌÉÂWâŸú5ÿüjü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãô¯¥|Cñn•:J5{›øÁe¶§#ßE*÷Ró3\Gþü2Æþ§†ú{¾&³ñV“¥j¦.íYƒ½­ÊfŒ¶|l¬²C&ѽd#‡Eé([×´¿Y5ö«t¶Ðƒ²5Áy®$ÆD6ð¯Ï,„ �£j.^FDRêä³ün²YŠÛx~ê[|ñ,÷Ñ[ÊG¯�–÷(·ŸîOA@ÿ…üw¡ø«0ÙÉ%­ú)wÓîÂ$åÞ’Fxî#[Ë12Ä€© ΀8OxÖØÇ寗Z¥îñelìDh©€÷W;Nÿ&6eU�v¼îJ#€²<@7ßxïÅÚ„­4ºþ£âHŽÆâK�g…T³0‚@_{�>f'%€(ÿÂWâŸúuÿüj?ü~€-ZxÛŶr¬Ñx‡UvS�·wrßD}šéôÆI ¡¼ãÔñdRÙÞǶ³i–D‹"Ë}ʆæbÆ6�Ùx‹0ÒHØ£´pzMy÷Š>$h^™¬ˆ—RÔSýe¥™M¶äŒ…º¸s²'=ãEšd"U*X‘³øÙ§É0KýêÒÀyÖ÷‘Þ2‚q¹¢{{N9`Žì8Hì:n§a«ÙæÜÇwi8ÊKî>ò:œùé@Éà‰·:•äˆZ7¹¹"+I!3N~åµÔiˆ¼ÉOË Ñ*“lMi<Ê÷( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+�Ì�â=iY‰$C¨Ý[§>‘[Éj=   ¿á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€øJüSÿC.¿ÿƒ�Gÿ�Ðÿ _Šèe×ÿðq¨ÿñú?á+ñOý ºÿþ5þ?@ü%~)ÿ¡—_ÿÁÆ£ÿÇèÿ„¯Å?ô2ëÿø8Ôøýð•ø§þ†]ÿ�ÿ þ¿ÿÐ˯ÿàãQÿãôÂWâŸúuÿüj?ü~€$‹Æ+…ĉâ=m™H K©ÝΜzÇ4¯PÊAèhÚþ|KŸWº‹C×Ìfö`VÇPD ©sö{˜Ð’á€c ±,QÊG’cYJ<àÕ@v_üxAÿmôt”¡@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  —×¶Úm�Íýä‚+[HdžyðÇ–8Äí�¨ƒ,îUT!Xã?øŠóÄú½Æ§tJ£�¶r––ˆÇÊ…yÁló8Ì™ÝðPz€ ( € ( ¤þø½õ+Vðî¡.ûÍ> ú|²½Å‚aL’wIg• ƒ¹­™FÒ w e €<§ãÄ�xN(ш[½bÎÞ`?Š5‚òì)öómboª�Jùv€ ( € ( € ( € ( € ( € ( € öï‚w.§­Ú>L¶0\2öó ¸ò‘‡¡Ûràã¯è(èªù'ânµ>­â«øÛìšL‡O´‡?*°.¤ÀàÉ5È�—ÆãCgËZóÚµc{s§^[_ÙÊÐÝZL“Á"œt9þò°ù]Uв0*ÄPÜeêêZnŸ¨ªí[û+KÅ_#˜/~T>:öï@/|X¸’oÞDìJÚZX[ÂðÆÖÉt@úËs+}XûP›P@v¿îd¶ñ–†Ñ’<Û—¶�g†Žâ bpGBààŒªÃ•õ‹ui4? êú¤8óí­H·$æâDµ·r§‚M29\üÁqÆhâÉ$’YY]ä–Wi$‘Ø»É#�ÎîÍ–gf%™‰É$“œÐ(×¾ëSÚkòhÅÙ­5X&uˆœª^ZDgY”…-mÑÉ´fLC¸â%ôˆn$³Ð5˸X¬Öº>§q É”ò#؆PGÒ€> € (éo‚÷IáýFÝØ²[j¬bøkkve_EÞ¬øãæv=É` �Ôâ}3Ãñ;%¹·þÓºU$ Ýæ–ÞÙeaò&“aÈ-">D4áP×ÿu©õÏ ØÜ];Kwhòé÷±ËJÖÅ|©œ–‘­ž5ØååÞç;�yÿÆû‰~´ D2>¥q"öi![(áb=cYç�ùhzP€P@I²A,sDÅ%†D–7^ IFœ`ã¨ï@xBþl1HF ‘ÆäÛÔ6? ДP@P@P@P@P@P@P@P@P@P@P@P@P@ j÷^jº�Ô¬Z[‹ûÉ��RÒ\HçéŒàÀ  ê( € ( € ( € ( €'µ¸’ÎêÚî+-¬ðÜDêÉ‹"0÷  ÐÞ4Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÍ®µ½•‡‡à|5ûÛÐ&ÖÝöÛFÞ©-ʼ�°Ö‹êC|ë@P@P@š&«>‰«Xj¶Äù¶W .ÜãÌ�îM ~Yái!oö\ãhíëkˆ®í­îàmð]CÄ.:-Òd×<7«épãϹµ&Ük›yêÝ …4(…±ò†Ï8 ‹$ŽH¤x¥GŽX�£’7R�ˆvº:¶]Xe# ‚1@  ^ø?¢Ïw¯É¬”e´Ò ™R0¯yw�aRF­´“I&Ó˜óá‰TÐÐ^!·’ó@×-!RÓ]hú�¼J9-$öSÆŠrY€Zø~€ ( ¥¾ Ûɇõ‡R©sª°ˆŸãXm­Õ™}W{2gŸ™v!@0>4h³™ôÏDŒöâßû2é” tš[‹g|…›Ïš=ç4h™%ÐP„P@_ü9ÑgÐü+cot�ÝÛ˨\Dà \•ò£ppVE¶H<Ôa”—zm4çÿíä1øvì)0Æú•¼�Ùd™l¤…Iõ‘`œŽå™ë@@$QI<±Ã—–i(Ñy/$Œ2Yˆž§µ}á yPÅ91Ç;ìP¹üq@P@P@P@P@P@P@P@P@P@P@P@P@P@|1«ÛÉgªêv²©Ymïï!u=CGq"®q�Gr8"€3¨ € ( € ( € ( € žÖÞKË«kHT´·SÃoŽ­$ò,h£Ü³@xÐ@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ‘~&ß5÷ŒµQœÇeö{‡÷V#2�ü ’vÿ�sÒ€8( € ( € (믆WÍ}àÝ(¹Ý%§Ú,Xÿ³m<‚ÿ¶hðâ€;ê©ak©Ù\é÷± ­o!x'Œäec*ÃN7S¹U× ¢€>^ñÂïi6Ú]gO,LZ({´B~Xî-ù«Ð½ºË�¿tE¼•ä¿áñOý zÿþ õþ1@ü"ž)ÿ¡k_ÿÁ>£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øEÒ@’ÆÞKøœg†W³Pc€~e!@(ÿÂ)âŸúµÿüê?üb€-Zx'Å·’¬1x{UFc�×v’ØÄ=ÚkÁJ>¯ôΠ¡¼à$ðœRÞ^ÉγwŠG‹&;}ÊæÚ`¦F‘ÕyJ¨%8Ô"4“€zMy÷Š>è^&™¯I—MÔ_ýeݘM· º·q²WäF†g %e ‘³ø'§Ç0{ýrêîÀù6öqÙ³sµ¥{‹¾bˆŒA8(@4ì:n™a¤YÃa¦ÛGiiÂEî~ó»¼’¹æId-#·,Iû ¨ç¿ü,¾kÛ�WÃQ-ÄR<×`‘#šÞg;¤{O0¤r@ìYü�ë$Dì…%M¨€XÞñR1Sá½t�‡I¾uü!e?POë@ ÿ„SÅ?ô-kÿø'ÔøÅtúÃj÷‹ËI4{ Ãι¾O.`¹äAhXO$„}Ýé?Þ”q@QiZ]¦�§Zi–˜ílâD Ë·%žI�ÒË#4²¶çv ( P‹«[këy­/ ŽæÚá sA2ŽD=™NG\z«Ë†Ð�j_´›‰ÚM3UºÓbcŸ³Íߤ|ýØœÍm(@8Y&qÔÈØ"€7<7ð³AЮ#½¸’]^öÝ"Gk ‹÷eŽÑK*žU§–PŒãUu ›@ž!Ðl¼I¥\éWÙXæâ™2[\G“ ÄyÀ,„ᔜIåÍÔ‰˜¼È�Í 13…“l­(hüº÷( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€øE£ÿÆ(ÿ„SÅ?ô-kÿø'ÔøÅðŠx§þ…­ÿú�ÿ þOÿе¯ÿàŸQÿãÂ)âŸúµÿüê?üb€$‹Áþ+™ÄiáÍmYˆË¦]ÀœúÉ4I�RÌêhÚþ|4ŸHº‹\×ÄböZÇOG‹Yqö‹™˜žáAa Q4±ÄOœdiB$Õ@v_üxAÿmôt”¡@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Š|\ÌÞ*ñ!n¿Ûš¢úü«{2¯þ:Ó§jçh € ( € ( §¾ ³ ݃Ñu˵_÷~ŧ7Ÿ37óï@µ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ޾!Z?kÑ�@–ì]©ìÂö®‰¿4¬§ù”Ž"€8Ê( € ( € (êÿ„ö†ÛÁ¶’0*o®ï®ðx$yßeSÿ[PËÓ*Aôš( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè ž~4hÍÞ™¯F§Ë¸„é·Dx ÏlÌ{´ÑI2x[Q×"€<6€ ( € ( €'¶·šòâ Kt2Os4Vðƽ^YœG޼³°?:ûƒHÓãÒt½?Lˆå,,ííCca†5G”ŽÍ+†‘¿ÚozÑ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ?hpx�F¾ÒnAsa›6÷1‘%¼Ã¾U_1Aâ/@s@_ØÝi—·6±4V“<3FßÂèzƒÑ‘Æ7\«£+©*ÀÐJ( € ( €=¯á…Zêõ¼My¶%áÓC ïJK8ÎCGiSŒ}¢L«·q@FÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €<¿â'€—İiiª‘ë–±íÚp‰¨Àœˆ$c…[ˆÁ?f™ˆSþ¢b#1ÉË“Á5´Ò[ÜE$Âí°Ê�‘ȇ ŽŒ+)à‚2=ñ@P@P@ׂ|{âËÀî$¶Ñíäl½Æ ã“ki‘‰.p͆ŽÝI&XÇ ZÙYÛiÖ–ö6p¥½­¬I  Â¤h0rÌ~ó»îå�Ë3@h  z…ý¦—es¨_J°ZZDÓO+sµW°–wb4\´ŽÊŠ 0à:ŸÆ­HÜ8Ñô«íUˆ�µ/´\\H££²Û\ÚÇ aÉŒ<Ûzy��¸;þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Å?óá à.£ÿËj?átx§þ|4üÔùm@ü.�ÿφ�ÿ€º�ÿ-¨ÿ…ÑâŸùðÐ?ðQÿåµðºþê?ü¶ þGŠçÃ@ÿÀ]Gÿ–ÔÂèñOüøhø ¨ÿòÚ€ø])ÿŸ ÿuþ[Pÿ £Åóá à.£ÿËSü¿:ôüR·ñäZV«kŸ¨\¶³@ìÖwRã>FÙI’ÞfÆ!V’U•¿vd1¤ ·@v_üxAÿmôt”¡@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € â|WàMÅhe�Mž¦©¶-JÝÍ *\ÆJ­ÔK€¹YP ±K—Üó¾¿ðïÄÚ ;½“j6k’/tå{ˆÂâš_´[�¸.d�Ê…™±@)àðGÔP@~•©jÓ }2Æêú^2¶Ð¼»þ)AXÓÕädA݀ɠhð¿Áé Gw≂ ÚÃJ´“s¿}·wi…AÙ£µgf‹” «{Í­­µ•¼V–�Emmá‚Xâ�ðª.ä’{–$œ“šž€ (Ë>0}£þäîòÿµl¾×·§Ùü»�»ÿÙû_ÙqŸãÛ@-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P«´}¶Ï웾×ö«²ìûÿhóSÉÛŽwy›vã½}Ý@v_üxAÿmôt”¡@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € (  }CÃÚªKj:F�y!ë,Ö�´üúO°Ì3ßkÄçP:ÿ <#nm 0sŸ’÷R‰ÕqíŒ{ |Àí¼àëB/Ø1>Ò²^�Ä^<àþ ~¹ ª ¶�a·†("_»1¤Q¯û¨€(éØ~t-P@SÔ,-5K+�>ú%žÒî&†x›�ÊÝÁ«£ñºá£uWRA Ôþ êBáÎ�ªØÉjÌLk©}¢Þâ5=šÚÚê9ŠŽ �!Ý×Ë\� ßð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ)ÿŸýÿµþTÐÿ _Å?óÿ àV£ÿÊš?áKø§þôü ÔùS@ü)ÿÏþ�ÿ�Z�ÿ*hÿ…/âŸùÿÐ?ð+QÿåMð¥üSÿ?úþj?ü© þ¿Šçÿ@ÿÀ­Gÿ•4—ñOüÿèø¨ÿò¦€øRþ(ÿŸýÿµþUçùP x7ám¿‡ï"Õu[¨õ BÜe³µ—ó÷J—.s 4q,MûÀ� �âõº(°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €0• €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ÓâÆ›s¨øJG¶Vs§_[ê3"Y­âŠâ ˜É-È�ÿ»LßÂhå*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÒÑôÛ�_T±Ómš{»˜â] �Š[2LØè�ÆY𨅻ûš€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €€À«ÊÀ†R2<AÈ Ž#ŸzóMOá?„µ‡¹Hï´Æ‘‹!x3ZY›Iñg‚¼A¥x£Ãº�·šKk‘e¬è·Wº}ÃÚÝE5­Ôq\4–×1Ko:Ç4nŠØP@PsM ¼O=ıÁ ct“M"Ekýç‘Ê¢ŽG,@üè;[ËKØÌÖwV÷p†(eµž+ˆÃ¨�¼Lë¸RW9�=EX € ( € ( € ( € ( € ( € ( € ( ..m¬â3ÝÜAk• 5ıÁ–;T$d@X�É8h;þþƒš?þ ì¿øýI¹¢Lâ8u�.Y%c‹P´‘Ûj–l"LXíU,p8PIÀ€9‡?þüaÒµ wá/į|NÑ4�^ï@Õ5‡þ.ÐÕb¿ø*WÀ�ÛGÂC¤xöÿÀ?æ[Uû<:��¾jú.�ñÃè£lF-oÂ6þŸU;‘¯'ñN¤ÓüÒ<Ò€N_·í%¥| ý…¾:~Ñ^Öau´ø?wðëZ¶“Ýx—â �§‡>jÍ•w†oøŸ@¼>Gdž3½ñ|ßð�\j—3iþ‚{kùµÖ4ú7†4h®õ¥‚ÂËHºÔæyo@<·OÿƒŒ¿àž·¾,�ןt�ïÔø÷Pøm£Iá8¡iü¦Ô$³Òüm©xãìqÇ‹—Hü%ÿ�p–Op ÷×í+ÿý™¿eß� ÿhïëºÿŒþ|^Öt�À~"ø_¥Yx©u‡Ö¼;¬x£O¾òîµm!°}3D½Y™æû]­èK;›8¦,é§~Ñu?Ù–ÚÆÙ5ñð²ãà“|~Ž94ØÅð‚'‚ÇåHÍl5Ïì#û?ûHÃöì[ý´!ó¨Ç¿c¿Ûûàí½ðÿÇß~Ïâ½Â? u£¡ø³Pø�¤é¾[“E‹Äß#Öõ[DÒ­4É|ë»û«›híÄr´Š±£HÀüBÿƒ‡¿àžžñ…ß…4©þ4|L³±½{üið÷À<¾w‹åšâÎçÆ>1ðv¹¨YG0h’öÃ@¸·»Ûö‹º³xn½ý³?j�ßµÿüWö±øµðƶþ2𜿠µ]#RV´¼Òµ¿kö·Ú ÅI¡êPÛßé:µ¤7vÓyrÄÖ·¶³Ûê]Õþ›uk{8�ÿÁ¸_ò�Í{þÎ/â7þ¢Ÿ(÷Ö€ ( € ( € ( € ( € ( € ( € ( €>Iý·¿d¯~ÛŸ³Ï‰ÿg¯ø»Zð>�â}_ÂÚ¼þ"Ð,luNÖO kÖZõ¼1Zê,¶®—rÙ-¼Ìì#vdË(ø�ÿ‚µÿÁ4¼ÿåÖ~éž ø›â¯‰üYÓ> _êø£GÒ4—ÒÁ·^·¶ŽÍt§u�oG‰'iÌäÍ´B<ïzýàýŸà…ÿeíµV¯ñÏâoŒ4߇ñ޵ÿÏáŸZZë-÷ÃÝjiiy§Þ[ê1¹ÒµKák%´öó´ñÂð–2 _ðN¯Úƒþ �û~ʵ'ÆoÙÔþÓ—Ã|Cømsñfûâf�á½SÆ­¨øþþçÂÞÒ|-¦è×ú.‘q¢hÏ%Ê\Ëqäj¡.%¹¾¾Õ[ÅÆ_ðIïø-Ä>2kÿÿmO‹~)7Å�kៀ¾ [ÙxWÂwVZ'‹¼E⛽òãXŸL‹Ã3XX][CŽk’5R‘A3Çj1(—ìçÿ+*üSÿ±ÇãŸþ©�Z€?wÿl¿ø*÷ìyûxŠ|Yñ_ˆ}»WÐ4ɪ[O Ö™c­kÖz•íŒÐêPX¶�4Wnwö2ÿ‚¨~È_·>±}áƒþ-×t?ˆ–62j§á¯Ä�ßÂÞ1¾Ò ŒIw¨h‘ÚjšÞƒâ¬c©A¡kš…ö� »ÛXl+§ý € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ù´ÿƒšÿäÓ>ÙÄÁÿª×ÇtÌÁ·?´¥î­ðËãìuã9®mÒµ1$Ñx'Ɖgã &ÞÎP�¯†ünmµ{‚ñ«=ßÄ<‚Ê (gü•ûJÞØøàßìoàÙ®nõÿ‰Z“ü[øƒ¦é¢I¯Oƒ|%5Þ�à½6æÚ í5†¹â˜µÍuò€Û\|>µœÈ± ÝÿÁ¶zΑáÏØoö�ñˆ5M;CÐtÚ+Śη­ê÷¶Ún“£é_Â…×Ú–©ªj7’Cia§iöPOw{{u,VÖ¶ÑK<ò$Hï@ùã?ø8oþ ãá/ÜøFÊ÷ã'Ž4û;û› üyàχÚuÇ‚‹ZËå=Õ¬Þ ñ_‡|K¨XHêæÚóOðÅÌ7Q¨žÜÉo$2¸Ý~1ÿ‚‰þË~ý’®ÿm�/Æw¿¾Ù\h67:·€4Ѫx‚ßR×üC¤øb-"ûÚµÖ‡}¤ë:n«¬Ù.³£ë-§jZ|g’ÙÑíÖPç/þ =ÿ¢øƒ'ÆMáÿí©ñoâoÅ&ø±­|3ðÁK{/ øNêËDñwˆ¼Sw¢Þ\ké‘xfk £«hqÍrFªR(&xíC¦%ýýý³¿àª?²ì-­Xx;ãмC­üEÔ4ë}e>|7Ðcñ?‹lôk³8´Õ5†½Ôt?hPÞ4 ö+]gÄ6Z�ô.—–v3XnºPCö;ÿ‚Â~Æ?¶·�àøaðç_ñŸ‚>&ê6×7Z�>+ørÇÃz¿‰â°µš÷R�ÃÚŽ…®ø«Ã�öŸgo-ÜÚH×ãÕæ³ŠâòÊÂêÒÎú{PÔš( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÖþþ( € ü9ÿƒ€ÿgOø]?°~±ñ J±ûW‹?g?é?ìÞ÷ÞKàýA‡…Oƒ‘ƒ�¾\ �¿µoíÏuñ‹þ÷û þÎÚf£6§ãûßëžñö�bïw~Ú'ìçoiáÿh·pG¾yOˆtü8Ö­Uâiî5/Ê‘y¢&y@?i?ÙþÛöZÿ‚|Bø0ÃàÙ§N´ñ;[ì0ÝxçXÖôŸxöþ&L†ŠÿÆz¾»w Ý!Í™núüŸýŠc߈?¶ïüßÇ_þë:v™ãý/ö³ñÄiºÕëéº/‹n¼1á�A?…5-MVHôÿí -^æëJº»‰´õ×ì4ˆõ¬,ãS°ó‹ÿŽŸ´?ìŸû(è±ÿüKþ cŽ¿f�ÜéúGü'^“^øs=½Ô^ ƒT±Õæø¹à8¼[àû¿\êŠ��WBñ…/¼Yf[NÔ¯/R÷S¸¿ê¿à¦^2ý˜|oÿsý�õ/ØÿAñ„>ØþÓº¦Ÿ¥xź®·­x�ÀÞ"›ÂŸ5ŸøoVÔ5íwÄ×’Ìšþ­}©Û4åþ�5†¥ks§¼V³Goî/ƒ5-=ÿà…ö7©{jövÿðLJÞ{”ž6‚+‹ÙžöÆö‘XªÍi{o=œñ¾+˜e�ÔJ…ñ¯þÉãO�¿ÿà˜?ðP_~Ò««\| ‹Æ1èßô½ïU±×|G¡ø«ÀÚ…“ÂZ5Ö‰©èšŒZŸŒ5 fËÃ>V³¤À÷´qßjv uw¯Ù»ãF³ã/€¿¼%ûÿÁ4}köoñ�Ï‹,ÿ‚mj¯ÿßÿ‚ÊéMs+iÐ|'ø¨Ah[0Å{wª|V¶º¹�†[ˆ,­"™†7¥¬³å¦ÐÞßø7 þQù¯ÙÅüFÿÔSáÅ~úÐ@P@P@P@P@P@P@P@ÈOüÿ#gìgÿbïÇ/ý9|, é¯âgüšOÄû7Oÿê´¿ ç3þ ›ð燼Yð·öÉÐüS èÞ%Ñ.ücðYî´}K±Ö4»—¶Ó<}sn×~£ŤÍoqSÂÒBÆ)£ŽXöº+PŠÿÁ´^ð—‰þ,~ÕW^$ð¿‡|Csáÿ ü*Ôt �sDÓuiô=A|Iã ÿH–þÚâM6ñd··‘n¬Ú •à…„�¢B ìçÿ+*üSÿ±ÇãŸþ©�Z€><ý‘|aûOø¿þ SûX|iøcû(øSö¾øÙ¤x«â†¡wá�‰¾0ðÞ†Ÿ ã¼øŽ4TñŽ|S¬é6³j^²µ¶ð6‘ö™´òK[8`…àtûWý•ট¿à¢_³ßí›ì  þÍ×ñßÃ~&ÃðËâŸÂŸìŸèúW‹e�Æþ%Ö ·ñð¾—PñÃíRóÂ~"‹Oµ™õ}Æ%x.onnàû € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ù´ÿƒšÿäÓ>ÙÄÁÿª×ÇtñGÄØ›þ ÏûoÁ7ÿn=5[Iø;ûI|ø3á_Œ²Â Zlpü2ðO�>$Ü^Å"ÛøfÿÁ,ã•¡“VñN…«Ý7š`»’€3þÛËÿý¬¿à¨_·¾±š—€Ÿ³ŸÇü{¤f²{«ÿ„¾7ð'û‹8'cð—â¿êö± Jñ_Š´­@H’Mo+€|ÅðÆ~+ðwü?ö¿�ÂÓßY¯‹ÿlŸ ø3Ä׺|ío-¿…5o|"¹Õ žT"O°ëiÖ^Ô BòÏWšÎpÖ·£€}uû·í¿¢~Ä>ø}ð›þ Eð?ã×ÁŠ/ˆ¯uψÞ)ø�ðêËWø¿³¬jö—º�‰muOXjöóéJ­áÝ*Þx-.tKMÑl– âûC}·ÿ8ý‹j�Ù»Fý¦~~×_LJ>øöïáÇ‹|áÏø‹á×ÄMâ­_ÙøŽH´=Ä>'µŠúïO>’òÿP±¶óχ4“ �%¢¬@ÿÁ´^ð—‰þ,~ÕW^$ð¿‡|Csáÿ ü*Ôt �sDÓuiô=A|Iã ÿH–þÚâM6ñd··‘n¬Ú •à…„�¢B õûCþÑŸ²JÁL>3Ôï<;sq§Åªø’ÂÞëBÕm$K[©í´t¼¼¶gÔ{€ï€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿ×þþ( € ä¼à�|Lð'�>ø¶Ìjñÿ„üEà¿Ø�¸¼Ð|Q¤^hš½¯Ì¬ Ï§ß\F +X8ù€?”?Ùþ åý¡þ~Õþ'|fø‘ð Å_þüF´ñæ¡¢øSÄ/üY­¿…žMgÂvãÃÚçÃ-ûuižOÚ\xŸÈ�GŒpͪ46ö×`ÑßíÉð/Å¿´Ïì•ñÓà7€õi>/ø�à¹|9 ê^.»Ôì<7i|ú–Ÿx%Õï4m#^ÔàµZJ¥ì´{ù¼Æ@ ÚYÔòsàßü‹Ç�Á6Ôµ-Yuíám­Î»ñUð߈®nnüO£ø;Vñ?Âí#Zø{'ŠEÄñj³éÞ6k]&ÿQ½Ô-4ýyd½‡T�öFÿ‚-~ÔŸÿe_ø(Àßx÷à¥âßÚ³À? <+ðóQð׊~"^xwFÔ<¨xîïU›Æwz§ÂÍRÓ¬î#ñFžº|š‘â)åxoͽªÇ Îúyÿ™ý‹~)~Áÿ²î§ðKâö¿àøª÷â¿‹…x÷0®”öÉ–ÍäÎòÇéÍP@P@P@P@P@P@P@øKÿ”ÿ‚`ü|ÿ‚‡ëŸ5?‚¾.øAáx>i_ì|BŸuÿè³^Mã ÏÜi�¢¯„üãd¸Žðåð¾7ϧ4M-¨·K�ò´°~0ð.¯â�Þ(øggq§E¯k 5¿Ú]ÝMršDz¾¥á ­ ‹‰â´žñ4ä¼�e–hì&¹[`Ζ’J,ù_ÿmÿ‚qüoÿ‚yxgã΋ñ§Å? ¼OuñG]ð©áù>ë~.Ö­ìíü-§ø¦ÓPMa¼WàIo4Òk–­f¶Qj "Gpg’Ý–5”âß�_ðFÛsö9ý®ÅÙ[ö�øi¡ü×~!hSxßB×n|M¤xß_ø9Œí5ýWÀšŸ‡ãøwã jÚµ¾†—z6›­C®èRÏ{'Ûí¤ðÊ^Í Òß ?à—¼ ÿuñ§íõ«ø¿àõÏÁïëÿ5[ éÞ ñ¤ßâ·ñ‡Ãûï i‰u£Üü?´ðºM£r“_,^1�"²%¼·S�nÀGí7ÿŽý¥<'ûXø—öÔÿ‚k|zð§Á‰^>ŸYÔ¼{à�C=§‡nu]|ÚÝø¢m"â? xëD×´¿kVÿð‘jÞñ�†?³,ÉàkzÔ~ ²ñÏ€<;¦øKĆ}NÇÃ×¾#×¼9qâ}>ÚXü<×F{­#P»ÒCÙy/ì…ÿê×?eÿø&ïÄoÙ"=_ÁWÿ~+øãL^6ñv›w­j~%øcUðž…rº•ׇ­¼Eÿ惠GáM{§ðá¿xô«íBßH3]-•xwì'ÿ�×¾þÁÿ´Oì]ûYk¼[añÏâ¯â¸u_„ú¿ˆux[~Ï:¾¥®�mr[Ý Ä¾Óõ«‰§¾º³Kï„Þ<×þ]êr\O{siðëÆw°Å«ÜÞê¶óÁ¨\Ízà­ðLÏø'�Ÿìð¯ÄºµñPø­ñ_âV§¥ë?|gp·¶ú: è´ øZÇPº¼½‹EÑF­ªË&£}2ê棨Ýjºu¹²ÒtðË�_ðFÛsö9ý®ÅÙ[ö�øi¡ü×~!hSxßB×n|M¤xß_ø9Œí5ýWÀšŸ‡ãøwã jÚµ¾†—z6›­C®èRÏ{'Ûí¤ðÊ^Í ÷Æ/ø#÷í¥ðÇöÝñßí{ÿóý¢~|4¹ø¯â/ø‡ÄV?’þCÃ7?µd×¼q¡®ž¿¾!x_Æ~ ¿×Ö]fÂÛQÓtËý#:e…µ�åÎ�¿(9¯ÿÁ?m?þÚŸ³WígãïÚoá·Æ­sÁ~6ø-ñ㯈¼q{â k÷ú÷ÃïŠ'Äš¿‡>ø3Ã5 iÞÒü ¦øwGðµ�ֳᨵÇ­jZg†¬u¡·þŸ¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € üîñ·ü<þ? ÿ “þŸøIõÿøCÿ´¿²¿´áþÕºÿ„íþgï>Ûý“öOµyŸ?Ÿænù³@Çüm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQè½ÜÿðT«[K›¥¶ø?xÖÖóN¶–‹¡½ÝÓCH-í–Y`‰®&*#…eš(ÌŒ¡äE,Êôì©ûUét›ß ø’É|ñŸÁâK?xò9¬¦iì¦wzÎ�i{‹Ï°}¬y:Ž�6ëÿß¿Øo̰Éa}~öP@P@P@P@P@ûAÿÂûÿ„3Lÿ†vÿ„cþoøI쿵?á,û7öwü"ßÙZ×Û|Ÿµ~ïí¿Úߨž^>#í8ùwPÇŸñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÌx«ãüà]�ŸÄŠþðŒ>hÚ�°ñ†›á¬ŸS‡G¸ß÷­s`ÆëMŠT¦¦m.�±Ô`{7”PèßÂÏŠ~ øËà­'ǾÕ£Õt-V<vÇ¥ßĨo4}bÌ;½†«`ΩslìÊÊÑ][Ksesmu8¢P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|yûAÿÃfÿÂg¦Ã;¾ÿ„'þ‹/íOøK>Áý£ÿ Oö®µöß'í_¼ûöOö'—�“ÏûN>mÔá_ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ô™¥þÔ¿´gìûñ Ãúí�áí/xæ5µÒ<{àÛ(ä°ðæ«®®o¦ÓšX®àXÙ$Õté �S¶³hµ]7í±[ÜÙNúƒe{e©ÙZj:uݵþŸmí�õ”ñ]YÞÙÝD³Û]Ú\ÀÏ ÅµÄ.’Áý«?e=_ƽ—ÇŸ€×­àÿÚÁí¡oq§É Œ9‚Æ-týA¤Å§ößÙXÚ]ß+Øjö |?â.�-½Î–Ü~ʵ^“ñ÷H½ð߉,‡ƒþ3øÀ € ( € ( € ( € ( € ( € ( € ( €!¹¶·¼·¸³¼·†îÒêm®­nbIíîmçFŠ{{ˆeVŠhf�Ú9b‘Y$Fdu*H`É�‰_ |{û øöÿã·À›¯|ñÔMñSáZË3Ááècÿ )ø+ã/‚´Ÿø V�UеXðAÛþ—¡¼Ñõ‹0îö­ƒ:¥Í³³++Eum-͕͵Ôà‰@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@/ÄŸ†ÞøµàícÀž;ÑàÖ¼=­AåÏŸ%Å¥ÂdÚêZmÐmާc)YÞBD‘H0Ááy"”óÀž;ñ÷ìãë/ƒÿ/uþÍþ)Ô'>#˜%žOÉ<¦Y,¯R!)‚Ú“Ì×´ËrÒx‹Ã©4ßé×­6W¶Z�•¦£§]Û_é÷öÐ^ØßYOÕ�í�ÔK=µÝ¥Ì ðÜ[\Bé,Äï±:ÈŒÊÊhÕP@P@P@P@P@P@P@P@P@PÿÓþþ( € ( € ( € ( € ( € ( € øö¬ý”õjö_~^·ƒÿh´z…½ÆŸ$60xæ |µÓõ“ŸÛd ciw|¯a«Ø1ðÿˆºt¶÷:Xqû)þÕzOÇÝ"÷Ã~$²øÏàñ%ŸŽ<y¶3´öS}ŽïYÑ­/1wöµ�'QÓ¦Ýáû÷7ÆXe°¾¿û€ ( € ( € ( € ( € ( € ( € ( € †æÚÞòÞâÎòÞ»K¨e¶ºµ¹‰'·¹·�)íî!•Z)¡š7håŠEd‘‘Ô©!€?&>%|5ñïì'ãÛÿŽßln¼Að#ÄQ7ÅO…k,χ y�üL4ñ‰ÚÛN¶i¤mYXä›Ã³HÚn¤·zÓ£~”ü,ø§à¯Œ¾ Ò|{à-Z=WBÕcÁlwú]üJ†óGÖ,ûØj¶ ê—6Î̬­Õ´·6W6×S€z%P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@p¿~x;â׃µ�xïGƒZðöµ—<|—— “k©i·@y¶:�Œ¤Mgy E Ã…äŠPÌoxïÇß°�¬¾ü`½ÔÖ<�GN›uÿ‡ïÜXßa–Âúüì ( € ( € ( € ( € ( € ( € ( € (›k{Ë{‹;Ëxní.¡–ÚêÖæ$žÞæÞth§·¸†Uh¦†hÝ£–)’DfGR¤†ü˜ø•ð×Ç¿°Ÿ�oþ;| ±ºñÀ�]Dß>¬³<�æ?ñ0ÓÆ'km:Ù¦‘´mec’oÍ#iº’ÝèWNŒúSð³âŸ‚¾2ø+Iñhõ] U�±ßéwñ*ÍX³ïaªØ3ª\Û;2²´WVÒÜÙ\Û]Nè”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÂüIømàï‹^Ö< ã½ kÃÚÔ\ðIò\Z\&M®¥¦ÝæØêv2‘5�ä$Iƒ ’)@?1¼ ã¿~À>>²ø?ñ‚÷PñOìßâ�Bqðãâ9‚Yäð|“Êe’Êõ"˜-¡i<Í{AŒ±·-'ˆ¼:“A-þ�púÓe{e©ÙZj:uݵþŸmí�õ”ñ]YÞÙÝD³Û]Ú\ÀÏ ÅµÄ.’Áý«?e=_ƽ—ÇŸ€×­àÿÚÁí¡oq§É Œ9‚Æ-týA¤Å§ößÙXÚ]ß+Øjö |?â.�-½Î–Ü~ʵ^“ñ÷H½ð߉,‡ƒþ3øÀ € ( € ( € ( € ( € ( € ( € ( €!¹¶·¼·¸³¼·†îÒêm®­nbIíîmçFŠ{{ˆeVŠhf�Ú9b‘Y$Fdu*H`É�‰_ |{û øöÿã·À›¯|ñÔMñSáZË3Ááècÿ )ø+ã/‚´Ÿø V�UеXðAÛþ—¡¼Ñõ‹0îö­ƒ:¥Í³³++Eum-͕͵Ôà‰@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@/ÄŸ†ÞøµàícÀž;ÑàÖ¼=­AåÏŸ%Å¥ÂdÚêZmÐmާc)YÞBD‘H0Ááy"”óÀž;ñ÷ìãë/ƒÿ/uþÍþ)Ô'>#˜%žOÉ<¦Y,¯R!)‚Ú“Ì×´ËrÒx‹Ã©4ßé×­6W¶Z�•¦£§]Û_é÷öÐ^ØßYOÕ�í�ÔK=µÝ¥Ì ðÜ[\Bé,Äï±:ÈŒÊÊhÕP@P@P@P@P@P@P@P@Pÿ×þþ( € ( € ( € ( € ( € ( € ( € øö¬ý”õjö_~^·ƒÿh´z…½ÆŸ$60xæ |µÓõ“ŸÛd ciw|¯a«Ø1ðÿˆºt¶÷:Xqû)þÕzOÇÝ"÷Ã~$²øÏàñ%ŸŽ<y¶3´öS}ŽïYÑ­/1wöµ�'QÓ¦Ýáû÷7ÆXe°¾¿û€ ( € ( € ( € ( € ( € ( € ( € †æÚÞòÞâÎòÞ»K¨e¶ºµ¹‰'·¹·�)íî!•Z)¡š7håŠEd‘‘Ô©!€?&>%|5ñïì'ãÛÿŽßln¼Að#ÄQ7ÅO…k,χ y�üL4ñ‰ÚÛN¶i¤mYXä›Ã³HÚn¤·zÓ£~”ü,ø§à¯Œ¾ Ò|{à-Z=WBÕcÁlwú]üJ†óGÖ,ûØj¶ ê—6Î̬­Õ´·6W6×S€z%P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@p¿~x;â׃µ�xïGƒZðöµ—<|—— “k©i·@y¶:�Œ¤Mgy E Ã…äŠPÌoxïÇß°�¬¾ü`½ÔÝ\x7ö€ð{G¨Au`m¬müq”^X°ÔY˜Úÿm @Ö6·w±=ޝ`Íáý|M§Kms¥€zì¹û]hŸ4{¯øŸO“Â_ü$¯iã_OZ;Ïe/Øîõ�ÖõÒðX›¡åjtÁï´ çû é–±¿½ú×ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñʆçRÓ/-î,ï-êÒîm®­nmàžÞæÞth§‚â Y¢š£vŽX¤VI™$PäÿÄ/xÓöøƒ}ñÇà=…ö¹ð+Ä7Q7Å/…m#›}˜æûNÚnZÚÂݦ‘ô]`#Íáé¤m3Q[Í éã`Ò†_<ñ{ÁÚ_Ž|¨Ë©èšš`©Hc¾Ó/£T7zN­h'‘¬uKuK‹wfVVŠæÚIì綸”¿þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ âO„|ñkÁÚÇ�W†[í>èõ~ËÄúN¥gk¨ió‹ë ëh/,¯lä·¹´¼´¹�f¶ºµ¸†g†{yát–¢wŽXÙ]•”Пí»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊÒ·�.aI�0WÝ€àùY”äGU8Áéé@P@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáèáŸÚö`Õ|[ªÙüpøvÞøíá&Žþ ì$ŠÊÃgE±¾/‹_í¯²†²µº½ eªØ³hZê˧Éoq¦€vŸ³í?¥|tÒ¯<;â+1á/‹þZxÏÁ—qËe3Íe(´ºÕô‹[³ö¯±}¨y:†Ÿ6ëíùþÅzd…ì¯oÀ>² € ( € ( € ( € ( € ( € ( € ( €!¸··¼·žÒîn­n¡–ÞæÚâ$žÞâÞt1ÍðÈ9¡š6håŠEd‘£‚¤Šü³ø‹ðëÇ?±/Žo~6ü²¹×~ë·17Ä߆K,σ JÓlx™­ôûv–FÑõ…ŽI´ ¤:v¢·:%Ë£~‰ü2ø›àï‹ÞÒüsàmQ5MTL;c¾Ó/£T7zF­hžÇT±gT¸¶vueh®m¥¹³žÞæPþ€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €8ŸˆŸü#ñSÂ:·‚ø‚a–gð›Ï)‘í.Ò1)†Þ'™®hqî6åŸ_Ðhe½±¸ýO²½³Ôlíu >êÚúÂúÚ Ë+Û9â¹´¼´¹�f¶ºµ¹…š‹yát–¢fŽXÝ]«)` 4P@P@v_üxAÿmôt”¡@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè †iÿÙƒUñn«gñÃà}ÛxKã·„š;ø'°’+(|k œEÆø¾-¶¾ÊÊÖêô5–«bÍ¡k«.Ÿ%½ÆšÚ~Ì´þ•ñÓJ¼ðD޾/øHIiã?]Ç-”Ï5”¢ÒëWÒ-nÏÚ¾Åö¡äê|Û¯´çûé’²½¿úÊ€ ŽYb… “IQޝ+ª ú³O_΀2ÄÞ‰¶Ëâ 6Î6¾«`�ŸLÁÏ៦(ݶ­¥^�¶zžŸvOAmym9?AŽÏÔÐ…P@P@P@P@P@P@Cqooyo=¥ÜÝZÝC-½ÍµÄI=½Å¼ècš á�4sC4lÑËŠÉ"1GIùgñá׎b_Þümø%es®ü×nbo‰¿ –Yž”ÿ¦Øñ3[éöí,�£ë “hHtíEntK—Fýøeñ7Áß¼¥øçÀÚ¢jš&¨˜*vÇ}¦_F¨nô�ZÐ3=Ž©bΩqlìêÊÑ\ÛKsg=½Ì ýP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@q?>øGâ§„uoxßI‡XÐ5ˆvM ü—· “m¨é× ,µ+)�iw'X¿ $ÐË{cpúŸe{g¨ÙÚê}Õµõ…õ´–W¶sÅsiyisÍmuks 47óÂé,3Dͱºº1VRÀh € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €>ý§ÿf Wź­ŸÇ�÷má/ŽÞhïàžÂH¬¡ñ¬6q[âøµþÚû(k+[«ÐÖZ­‹6…®¬º|–÷hÏìÿû_øcâ†ï´ÿÛ¿„>,xI›Oñ‚¥¶ž »›ËW6×މgtVàZ5Ìmý�Û-Î�z~Å#C%�õø]¯ü\×õx´…MÐåC&Ë‹é¦^yË„‘‚¤‘’@�ð€<ÆòþûP“ο¼º½—ŸÞÝ\KpüõÃJîGà€X¥Ôé5ñ>ˆËö-^è¸ÿEºswjWû¢�1c-‰ýx nð¿ÅÍ7Rhìõè“I»m¨·hÌÚtÎxùÙ�™dIéæ´°€2÷ �¬ì ÊÊHe`YH*ÊFAdF àŽFhh € ( € ( € ( € ( € ( €!¸··¼·žÒîn­n¡–ÞæÚâ$žÞâÞt1ÍðÈ9¡š6håŠEd‘£‚¤Šü³ø‹ðëÇ?±/Žo~6ü²¹×~ë·17Ä߆K,σ JÓlx™­ôûv–FÑõ…ŽI´ ¤:v¢·:%Ë£~‰ü2ø›àï‹ÞÒüsàmQ5MTL;c¾Ó/£T7zF­hžÇT±gT¸¶vueh®m¥¹³žÞæPþ€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €8ŸˆŸü#ñSÂ:·‚ø‚a–gð›Ï)‘í.Ò1)†Þ'™®hqî6åŸ_Ðhe½±¸ýO²½³Ôlíu >êÚúÂúÚ Ë+Û9â¹´¼´¹�f¶ºµ¹…š‹yát–¢fŽXÝ]«)` 4P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €8_xÚ×ÂVAP%ίv�ö6'j®J›»�¤2ÛÆÀ…PCÜH¦8Ê…–H€?,~=ü#Ö¼e­ÿÂÜðóé?ô¹Vù®­Ú;Tñ2ÛÇå­­ÎBÛ%ú[(³µy“ìw–ñ)ÔƒY˜$´Øø)ñ®Çâ}�Æ“«Û�â‚ørt{iKwû<ú†ŸøŸìÞxòîí$Ýs¥Ü·Ù®KÆö×7ñ@P@§àˆ—>š-/U’K�FŒÛ¤—K,ÖAÕž×'3[ í–¼®ð?‹cñn‘ö¦D‡P´qo¨[ÆNÅ�®èçˆ1f\(b�™™%Œ³lÀ�rþ)ñn•á;5¸Ôäž}Ëie Å˦7’8cܾlÏ…]À(y Fà-?ƽq¦&ÛHÒ¢·ÏÎo.&Ûï4wÈO¿�=;À‹àÿ‰zo‰§]:êì½QÁòbiD¶×„JÛÌUfò%PJÿ«’V Ó(Ì~#øâO ÛCa¦˜Î±}HŽê$[+]ÍÚLlB¼²H®–Êá£Ý¯"°EI@>c¾ÔõNVŸP¾º½•É%îg’R2s… ÅQFNÔ@ˆ£€£Pµi}{a*Íewsg2œ¬¶³Ë€û¡°ík‰gB$[y&•Z"}îÛ˙س³;1Éf%˜ŸRNI?_Ó$Ph§Ð<_¯xvâ9lo¦h-�Ä�5”ëžUàg*„Œ�,F9W?,ƒ&€>·ðö·kâ-"ÏV´c¹CæBÄ3ÛÏ)<GSŠB¶ÌB’ êέ«Xh–êZ”ëokng ³31ÂEšIdo•rIäáTšð�Kã]ù�†�¤YÇlõ&šyäáš;Yíã„‘üIÀ?òѹڹῌ6·×Ùø‚Î=4ÊÁP¶wk5v8â)wËop<á,ʤæA+È Ö A9ApAþ´Ìx¿ÄÐxWF›R‘Ó³ {bp'»‘X c�DQª<³ƒå¡U;Ù|™¬ø—[×çyõ=BâpÌY-Ä�¤ ç ²°Š0Û» #™FËPI²ÂâHd’)å^7du>¡”«‘žÓÄìÿ~#ê_ÛhšõÓÞYÞH–ö··-¾æÎáÈHRYØ–šÚW"2f,ð³+ù« º(Ñ´P@P@P@P@P@P@P@P@P@P@P@P@P@xÄ�ˆ—Ö׳øA¸kQl|½GP…€¸iÈùím¤˜ …šdÛ9œ4hÑ,Ngð™§žáÌ·K<ŒIi&‘åv'©.嘓ܒs@P@P@P@ß‹|# xç@¿ð׉l#Ô4­B=²Fß,°J¹0ÝÚM‚ö×–Î|Ë{ˆþdndgFøïÃ^%ñ?ìÁâ{øòâëZøK­]IÿŸ‹<·‘´•÷½¼êŠæ8£-¿SÓ>QfÕ´¥xÞêÖP¸­îmï-à»´ž«[¨c¸¶¹·•&·¸·™Hg‚hËG,2ÆË$rFÌŽŒ¬¤©€&  "šXI ²C"�VH�£u#¡ ¤0 òý8*íß¾"ßûm^¹{¸.Ý`°¿�·ÜÁrØX­î%bxglG’š9�»BÙ@¡¨ ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ÝcUµÑ4ËÝVñ¶ÛÙBÒ°4��±B�¼É¥dŠ<àoq’&€>.Öµ‹Í{SºÕ/Ÿ|÷RÚ Ù Cˆ ˆ»)„AÔãsvf  ªù�ã_Á;ízúßâgÃ;ƒ üPÐJÝG%«%´~$ŽÝ6‹k¢ß¸þÑò¶‚{•6×öÌt½S}£Ã- IðSã]�Äû�'W·Ä 4#ðäèöÒ4–ïöyõ > ñ?Ù¼ñåÝÚIºçK¹o³\—�í®n=†( €=ûá‹Y÷xZþRÅVIôws“µA’æÄÔ*î¹€sµuÜbJ÷ª(ɾ2ÊñøRÕ�³ëv‘HÆäz„ÀQæB��U° ˜( € ( € ( € ( € ( € (9¡Šâ)`ž(æ‚xÞ¡™H¦ŠE)$RÆà¤‘ÈŒQÑ�VV*ÀƒŠøÅþñ?ì×â{Ÿ‰_ m¦Õ>ê“!ñ§‚ÄŽÑéq—?éVß,†XLŒtý@#ɤÈíix'Ó&e`®¼ãO|@ðõ�‰¼3|·ºmêàƒ„º²º@¦{ øcm}lÌhX�U£š–Úhf”ª €=«à¤®5�fO—&›®¹à¼7H‘’;•YåöÜ}hèêøûâ.§>§âí\Êìc±¸m6Ú2r±Egû¦; 'NßíÊØ$`(@C,¶òÅ<.ÑM ‰,R!ÃÇ,l7B0C#ÊAà€x ¸´kÖÔ´�+Q`ïôë+ÇQÑ^æÚ)™GNœŽ�¸Å|¿ñZW“ƺŠ3°[éÑF ÎÔ6PÌTz2i»Þ€<æ€ (±ø+Ãã-£%K^˜Ž;¤ðË €ôàÆì?Ç¥};ã}Nm#šÕý³ž;U†ᢒòx¬ÒU<áâ7bcrŒä@Ð@§ð‹SžÓÅK§«7Ùõk[ˆ¥�?/›i —�Í�ïÆ±MœýÙß9È ¢¼M+Ãá¿M+$Z&«*08*ñØNÊA‚þ”ñP@Iü•ÛBÕb$”�VÞ€ž†[KpøôËSÇ|šæ~5js¾§¥hሶ‚ËûE”âæyíÔ°îaŠÙ¶p'�¤(‰P@Zü.ÔæÔ¼!f.¤“Ož}4HÇ,Ñ[ì’Üúåo

£¨M!-$×·R»’Ï$ò;NI%‰$“ùæ€)P@P@P@Íø·Â:Žt ÿ x–Â=CJÔ#Û$mòË«“ ݤØ/mylçÌ·¸�æFà†Ft`Žü5â_þÌ'·ð�..µ¯„ºÕÔŸð‰ø³ËyAi_{ÛΨ®cŠ2Ûõ=13åm[JW�î­eûŠÞæÞòÞ »Iẵº†;‹k›yRk{‹y‘d†x&Œ´rÃ,l²G$lÈèÊÊJ�hj’^ bš2VHdIc`pUã`êAìCAÿ ûÒ€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÑ­²�3Ãð¹ÔêwªÞ]Ï’6:€És##¢ãjÐ�P@|Íñ£à�ÿˆµ+O‰ î—Ãß4I#ž)á’;KG ùbÞöGÿG[õƒ6ñÜ])µ½´-¦j»í)m>†Ñ°4},x€Ø¶¸,-µÛK 8ê>J}°Ø‹ŒÎ-|ýþO›óìÆì(N€ (  ºuýÆ™i¨Ú±K‹+ˆ®"=‹Dá¶·L£€REΩÀ&€>à°½‡Q±³Ô-Î`½µ‚ê,õÜD²¨>ŒóC@èËþ.ÙKwá,JXiú•¥ì¡A$EåÜÙ³`dáZí�EPÌphåz( € ( € ( € ( € ( € (9¡Šâ)`ž(æ‚xÞ¡™H¦ŠE)$RÆà¤‘ÈŒQÑ�VV*ÀƒŠùoCø-⿆íuÏ…ú…�¯ÃŸM#xËÃ:”ò5¶–‘�6™þòwfv]HÙfÓåw´¼yt·u`ª( sø'e)¼Öõ"¤Aµ½’±,²ùîªzB…Ær¢Xúî ¡håoŠž¸Ò¼C>¨±±Óõ—ûDSJÇy°}ªÞFí#H­s 4rá7¥Úæ©£iºî¥k¥ØFd¸¹�.q”†,þöâcü0™yÐm\»"°ÛV6‘ØYYØÃŸ&ÊÖÞÒ,õòíâHS>ûPPÌ쥶ñ|×.§ÊÔ,ìç…ðvŸ&³‘sÓzµ¾Ys�®„à:ИP@w_ ¬e½ñ–‘å©+i$·Ó°éVð¹ Ýpf†þܪ8Îhê?é#]е=$°F½µxâvû©p…e¶vÆID¸Ž&p9*'4ñ]å¥Í…ÔöW�½½Õ´­ ðÈ0ñȇĪ˕u!�•`ÌZ€=¯à÷‡n&Ô¦ññ²YÙÃ5­“°#ís�.g�ûÑÛÀdŽFû¦I•T–Š@ ó®ZI¨hº½„\Ë{¥ê‘‚q™.m%…9<™Ç'úP쬌ÈêÊÊÅYXÊÊpU�Á  ‚2ÁÆ 6€ (éσvS[ønîîU*—úœ¯Ž!† ö3¬ÑõëéŠÈøÉáÛ‹˜ì¼EkJ¶P›@ ÉŠÛÍym®ùi,ÓG+`í2ÄN3(ÏTøã’i(‘å–WXãŽ5/$Žä*""‚ÌìÄ*ª‚I8“ŠûÀÚ žðÕ†ŸpÞ7™wz ‚æå·˜²8&„P1RÊÍu;XP�|m²šKMPE&iï­gaÈG»Ki`ϳŒ“×hã?0ÏTP@--f½º¶³·C%ÅÜñ[ƒ$´³8�€O,÷åŠû¶$G`äFˆ€žá(?Ž(ôP@P@P@P@P@P@P@P@P@P@P@P@P@ëÖRéºÖ«c:”’Úþê2#ryÌb�g¤±••2:·“@P@P@P@ß‹|# xç@¿ð׉l#Ô4­B=²Fß,°J¹0ÝÚM‚ö×–Î|Ë{ˆþdndgFñÏ‚¾"ü2½ñ'…5�jÏ[øsfÉ7‚î'v}f'º”Ë5ºÄ¿-•¤1ï¶Ò—…¯Ù.tÁSÞ ú€.éÖRêWöZ| ZkÛ¨-�OÍ4Š›Ž2B¨%˜ôURÇf€>ë €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè �þ$^µïŒõ¦-”·š+(ÇP‹ioN£ë2Êçý§>‚€8z( € ( € (ëO…—­yàÍ=]·=”×vDž»c¸yb_ø3Dƒý•´è”ðCuÖ×$Ö÷¼3C"†ŽX¤R’Fêxeu%Xw€>wñÁíJ‰'ðä±^Y»K+™„vù?ê–ivÁqó¶G’í²0g`KþŽèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN  }+áŠ/'A© ]"ØæÉ%Ä7“íî!†ÒI#wÿ®“Ľòp¢€>ŒÐ´;i°izte ‡,Îä§™ñæO;€¡¥��’UUHÐ,h‹@ôRöÆÏR¶–ÎþÚ»Y†Ù �‘¶9£)Ã#©WF‘ƒTÍçø?á¦2!ÕmPœýž ØÚþÈ7ÓÎÖv#ûÆ€;] Ã:'†áh´‹íÌ€ §bÒÝO·�%¸”¼…A$¬@¬HI(‹šÞ [Åž°ñnž,îÙ ¸�šK+ØÔ4–²°ÃeN�J‰áܻ©VI>|¾øMã YY-mmu(²vMm{m+ž7%ô–®­ŽY@u…vÆê£ÿ ÃÇ?ôÿÊž�ÿÉÔjÓáG�.%TšÂÚÅ ÁšëP³xÔz‘e-ܧè"oÃ#p½ø3ÁV>´‘c“íz�Ð_¶_2Ü«ÊÁoÌb·Có]žWýä‡ @ÚÐ/âxÄ»_T² r‹±/mÝ »U™ST\’‘β¢’Jª’Mrö¼#i0šEԯ°a åÚy9#"Ö WuõGvV6A"€=.!µ†;{h£‚QcŠQcŠ(ÔaR8Ó Š�íÍK@1ã_…cX»›VÐ&‚Öò጗–W£¶¸•¹yá•Ì3HrÒ£!ŽYÈZ&/¸Ë›áwŽˆ2¸ï.¥¥>à=ê·æõ ÿ°ñÏýÿò§£ÿòutúÁíbââ95ù¡Ó¬Ñ�’ y£¹½˜ÌhÑù–Іe2HËÐBÙÜ EÚZ[XZÁeg AkkC1Œ,q Â¨ÎI8噉fbY‹3@2««#ªº:•d`YXa•”ä à‚0G94æú—Â�ê´éæšÎw€ô`eð/È<1 Ôõ¢¾Ö 2DbVû-‚ºí“ìæ@¯,®cÄlÑÇ îà£@v_üxAÿmôt”¡@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Š|]»þ¯nëý»ªÿß?mŸoþ;�éÚ€9Ú( € ( € (éïƒ;¿á¼ÏOíÛ½¿îý‹MÿÙ·t Z € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè �þ$Y5—Œõ¥+„¸š+ØÏ@ëwo®Ãé3J‡ý¤>¢€8z( € ( € (ëO…–MgàÍ=�v½ì×w¤»d¸x¢oø0Äãý–”è”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÑ¢3 3Ä¡!é—¬Ý]Ï=“¶:Ïs;¦çrÐ�P@P@PÝ:ÂãS¿´Ó­T½ÅíÄVñÁ¥p»›®/#c ŠXä@pXYC§XÙéöãYZÁkz˜íâX”ŸV!Ac݉'©  tP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ÝcJµÖôËÝ*ñw[ÞÂÑ1´m�ÑL�¼ÈeT–<äoA�@"€>.Ö´{ÍSºÒï“dö²ÜÙ4G˜§ˆŸ½ɇCÔgkue  ª( € ( €=ûá„™7x¦þ"¥–H4tqƒµ�ŽæøÐ2î¶€ñ¹vÚU¢z÷ª( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €8_x&×ŶA�¥¶¯h�öÆk.KK� ³[ÈÄ•` ÛÈÆHÖ9@>OÔ´Ëí"òk FÚ[K¸£�átaòÉ�º9c-¯(İ( € (ÔüðîçÄ3Eªj±Éo¡ÆÁÑ[trê…Oú¸:2Zäbk‘�Ã1@w—’ ¨¢Š8cŽQ"Š$H¢Ž5‘Ç…DE\*¢( ª b€@ekzÅžƒ¥Ýê·ÌE½¤{Š® ’ÈÄ$PÄI¤e�s…·1TWuù¯Sø·âË»‡’Â{}*ßqò­á´¶ºeOáóf½†s$˜ûÌ‹ ȉAÅgÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ CÇ?ôÿÊf�ÿÈ4è^ ø©w}¨[é#1¼‘`µÔ¢Œ@VâC¶8®âLBVg"4–%‹Ër¡Õ‘šH€=†ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € çüAá�ÄÖÂßUµ2ò.¢";»bÝL3m$pZ' � ÄÛEx¿ð�_Ó™åÒ5«A– ›-ï£^¸x$.b0HòHA"ÈUóË í>O&þÎêÊ^uuo-»ñ× *!?€üN@P ”PS¤x+ÄúÛ/Ø´‹¡ cý*é ¥¨_ï ®<µ� ä¬&WôVâ€=»ÂÿôÝ5£¼×¥MZívºÚ"²éиççVeé§š±BAÃÛ¾(°*ª¨UU@UU*¨€€8  € òï‹Ö×3øG|ŠZjvw7ArѼ»›|°Un.-Øç cwI –( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (æŸmsyekfÝ\]A ¾Ìîó¤•21ÈÚÄ1ì €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( åŠ)�Ç4qËê’¢ºª° õôü¨!ü3áÉ[t¾Ñ$lçséVÙõÉ€œþ9úæ€-Ûi:U‘ g¦iö„t6ÖvÐô1F‡üýEhP@P@O70ËoqMñ¼3E"†ŽH¤R®Ž¤ÊÊH ŽG§4ã:ŸÁm2æáåÓ5{�6bÂÚkQ¨,yþ¤76²ˆÇE´ÎY­gÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ß„þèÞ˜_ %Ôu0¬©wp«[«®×û-ºn3©*ÒHòË´”IÕ€=€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €9_øˆxc@ºÔÕVK’ÉkcýÇ»Ÿw–_‘"É;¨9uˆ *[r€|…©êúž±p÷Z�íÅäÎʼnšBU3ü1FŠÇEŽ$DQÀQŒPuP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@‰àoêZ¥ikuw5Æ‹q4p\ÛO#H¶«#6ÅÙŒ&CÉecš5ee.#x€>´ €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ûân‰u®xZxìÑ¥¹°¹‡SŽyÖæŠhÐYÄȈ2Ò2ÔeòEP@P@P@P@|ÿñ‹ã•¿Ã˽/¾Ó‹¾"kw6qØxnݤqooq2-ÿÙ÷KבîŽÂÙq+–ûdÁm"àÝ쥸žÎÒ{»Scw5´ÝY£¹6wD�5©¸‡÷3›y Df‹÷rìó#ùPš( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (sÚ%׈u‹-2Ö6o:d7(;mí�¸¸�ôUŽ<íÎ7ÈR5˺ ûr€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € äµ/øKW¸{«íÝî$%¤–.lšW=^_±On$rygugcÉ99  ïøVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäêøãö£ø£à/„qXü=øyáoøKþ8øÇɱðφ¬¯u�E´S¨·“i«êÖ�ß³Ë4ŽÙÑô‡ ÷ò/ÚnvéÑ;Nµû5þÇ:?Ãí>oüY'Æ?¼Q¾÷ZÔ¦¿»’ ­âî›HÓn-n"WŒf­ª|ÑÊÊ,´ÝštFKð«áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“Çóü¨¨Òt-#B… Òtû{܃!‰I’R¼)šg/4ÅA;|Ù_nN1¹¨Z€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( €>;ý¨¿j~[Øø À6_ð—üoñ�“eáo ÙBÚ‹é-¨¿Ùí5�ZÎ ÒHòJØÒ4“‰u9×Ì“ÊÓâžf£û.~ËÓ|2’ûâ§ÅKÓâÿŽþ1ó¯µÍnúeÔG†WP]×:V—rwG&¡*7‘«j¶øˆÆ¿Ù:NÍ*)&Ô€>Ò € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( �ÿj/Ú†ÛàÕ­��üd<_ñ³Æ"+? øRÎÔMk÷û5¦±«ÙÛæiÎÛt�(m¸ÕîT�ÝXÃsp€_²ïì¿sðÞ{ï‹?oO‹þ;øÄÍ}¬ëÓ& ¾MA?Ò4½.ã š”‘mªêvÁmÒ6ŒcÒb–]HíZ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € (ä/Ú‹ö¡³ø-eeàÏYüiñ€ŠÏÂ>³†Kù,^þO²Úk½¥¶éÞ7¸;4­)6]k7iåÆc³Šêæ ?Ùsö_¼øyu}ñâõéñwÇ�™oõmVþXï×Âqߦ'Ó4ÙÇîT’¶º–¥hÚÚÙ‡¢´˜§›Rûf€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ùö¡ý¨,~ iö^ð•˜ñwÆoˆìüá H¤¾’ÒKé>Éi¬êöv¤Ü½»\Ÿ+KÓ#Ùw®^!·€Çkåݸ7û.þË÷Þ½½øÉñ’ôø»ãÇŒ ·úŽ£$wéáïãÛ.›§J¹·mYíÈ´Ôu @-l­hZ�JŠ{�PíÚ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÒþþ( € ( € ( € ( € ( € ( € ( € B¬+HÈ ðA ‚8 Ž}è²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@þÕ¿µ…ðK±ð§…4‹oükñ˜ŽËÁ ³´7óA5ô¿c´Öµ›;47fÌÝ'LÓ"Û{¯ß!´´ò­¢¿¾²å¿e/Ù:÷À—×ß>8Ü'Œ~>øÌ˨_Ýê ý¿‚¡¿�lšfšUM¡Ö ±w÷öH–zuš/‡ô‹JŠâãTû·ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�Ðȉ…ETQœ*(U982I'’sÍ:€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>?ý«?j½+à‘eᯠY|gñ�ŽËÀþ´Žké’{é¾Åi­k–y»6?k>N�§Bc¾ñúý†Å¢†+ûë+öRý•5_ê—ß¾:Þ·Œ?h5 »­BHo¢ð<Є};NtͧöÑ´+c{yb«c¥Ø¢ø@X´È®n5@½h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( �ÿj¿Ú«GýŸô[=ÃöcÅß<`©gà_ÚG5ìæ{Ù¾Åk¬ë–y»þÎ[ÃäXXC²ÿÄëýŸ§”�5 í<‚ý”ÿe]cÂ:½ïÇ¿�W�âÿÚÆ&MBiµ†òÛÞÃå�>ÀǺÐkc+cusb‰c£Ø"ø@iñ]\ê@|Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (äoÚ«ö©Ñ?gÝ ÓFÑmÅ¿<\«gà_Z$×—\]Êlíu�bÖÌ›µÒÒðˆ,¬  â õ:nšcT¿¿ÓÀ<ïöTý•µ¿ kW¿´Çû¶ñwÇï3ê$ê/ ä·¼‹Ë6"0m\elgšÅÇC°EÐ4%K4¹¹½ûö€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ù+ö©ý©ôÙë@´Òô»UñgÅ¿¨´ð'�mVk«‹‹›©��¶±«ÛY“všLw„AkkËý~ý³4Í»/ï´Ð4ý•e�{Ãúåßí ûAÝ7‹>>x¹›PDÔZ+¸<mw�,í3iº¶eld{%[ÁCÑ[¥ÍÅèèP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>Ný©ÿjoþÎþµ°°µ_|WñZý“Àžµ\ÜÝ]\KöK}_V·³&ò=+²!‚Þ—ºíòÿfiŒ¬··ºh–~Ê߲ψ4}~ïö‰ý¡îŸÅ_|XÇQ¶¶ÔLW6þµºˆG­´I›HµÔ³)e‹4[X*èÚ:¢­ÕÄà ”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € (ñ÷þ ÿ�øûxŽ…v~Õþ7üzšßMÔ/~øWO ižÓ5xΗ?‹üa>�¯&�©jÖÒAw¤øJÐõÍV{ ¾ÔbÒ,o´«­HóÓDÿƒ‰>%ø Ä^Ú�ö ø�ð·á׋/ éž)ÓuoYkQhûUžïEÐüyà é>;šdi¾Ãâ Db5 eH¥þ�~ üaøwñûá�ƒ>0ü'ñ%Ÿ‹>ø÷Fƒ[ðî·g½Öò3Ãqg{k([�;VÒïa¹Òõ�&ö8oô�VÎóN¾†+«iQ@=2€ ( ‡þÿÁD?eß�´ŸÄÙ7áÿ‹5ýGãWÃïiÞ.Я<â-/K²»ømâð¿‹ÛÄ7¶Qi7Ëg¬H°Û½µÌ‹}g¶ß-@Oñwö—ý·<'ÿ ø+ðáÿìž-ý“ücáË+ÿüo:Š®Î‡srú¸Ö¯��¬u8|áGð¯ØôÕ�¾"Ò¯5Ÿ‹Çe¶©¦½€éÅP@P@P@)~Ôßµ/‡?g_ Û[ZÛ§Š>)x¥M¯�< mæOu{u<Ÿe‡VÕ`´ÍÜ:,eaŽ8BÞëw«ý—¦aÅåæž䟲Çìµâ=?ÄW?´oírþ)øíâ¶þѱ±Ô¼©í¾Ú\D �GÙ!×¢³)gVж^±UÒ´µ.nô"€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÑþþ( € ( € ( € ( € ( € ( € ( € (ø´ÿ‚8øcEý®¿à¬´_íñrÐx³Wð\~/ø^ËÄËóéþ3Öþ#hþðµìšv£àÇà� êú�¶�Š/øFõ;O]iæÊ}&Ä õ�ûSþÍ?k��>|Lµ áïhòÚÚkÚYÝêÞñ ¾gÐ<_ }¶9"ƒZðþ¤°ÞÚ¿Ê·1-ÆŸpZÊöê7ø#À_²_Æßø&§ì)ñsáWìK7ˆ¿i‹z·‹®6~ÑGƺŸ‚?h„¿üð“Wø—àG_ êšÕÄ_>_7‰-`Ñᴳѯ5Ïøú-]µÒR :âê-NkKM>Îú=:ÔÅ?e +þ ÿý’¼1â‡_µu×Á¿ |2½ñ¯‡ôßk^9ñ®—ñ7ö„ñËx›TñΡ­øÃÚ]ε¦øSÂzf±£ü?ÑãmA´ßµh—Í.Ÿ~ë3é@¹ÿ¼ý·¿loÚ^Óö·ÿ‚x|lø™«h´—†~üI‹á/Æ�i >5øã/êÇÀ~)ÑüU«h�Ö·á?kzFµáýN8›Z·‹Kñ½Þ©¨Bº,6‘ß²OìÙûZ|Bÿ‚—þП~~Ôº‡ÃOÚÁú÷ÇÛOü|‚ïÄ‘^xÚ÷Â_bѼqy-Æžë­È|g¯²k’›Ç.î»®ó0ù€?_¿joÚƒö˜ðüëömýŸtOŽtß„úÆ·û5éž(ð›âMF× :êÚÃâg¾Ñ–Qopšô‚I/ÖUcq¼ù™9  µ�í£ûkþÛðQgþ éû|OŸà/ƒ¾k>!ðÿŽ>#iS\húýÖ©à[YSâ7‰5¿éIwâ ;@ðþ¯çxSÂþðÔšdÚÞ·ö;­jý¥gÿð“øÃö”ÿ‚„ÿÁ?j_„¾ ý§¿h�sö°ý›>*Cow{¬x²ï\ñ.­'†¬5{m+Å÷š÷‹oo¼Uáÿx%5+MTiCÄú¿†µí?RÒ ¾‘®.•ôGÿ‚½þÙ¿µwÀ?ø)·ìÑàÿ€Ÿ|u7…õ|ñ8ø%¢ø¾÷Cð_Å/jý«¾$þÚ×þ(³ñߎâÑu |=ñ7Š.¾ø+Å×v‡‰ôÿ \ü2ñ…càß ÝiÚ>¯eeÛIÔ>)|2🋵�*É¥{-3^Ô´¨Ä}‹ÌLÏcg­%ý½›ÌL¯mM!.XÐдP@PÊ¿µ/íGá¯ÙÏÃ$P'‰¾&ø� ¯�< ldšëP»šO²Ãªê�Ú“u‰otDXˆ-Þ¯x¿Ùša›««ý–eÏÛø’çö‘ý£ç|rñKhéšf¤#šÛáõ¤ñm¶Š;eÍ­¾» ¡KK{kT[O تéöíBâUý  € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÒþþ( € ( € ( € ( € ( € ( € ( € (ø›ñ]Ïįø"üCÆŸõßø—Åß³GÆ­GƶֺƓ`¶¶Þ#ømñY³ñ¥ç‡ü?«]ƺñÿÂßXifãCº»Ó®5« wK¢hþ,·Õ`ûçöÅÿƒ†~^| ñ†¿cÏøYz¿Çi¡xg^Ö<‡ôï†w:®Û[�zãûV{ÿí¿éÐM#xsLÒtí_J›Wû=Íþ –Ößd¿ñ�ÚcÇ¿ðSo…ÿðEý?âgƉ_OÅŸŒü=ñUE‡Ã¾8øYû8x�Ãöžðþ©'†t�ëÂMâoi~›ÄS=ž¯okãk?ë/µ=2ÜóWDÐà‘­ûj–™Æ?ŒðP káw‰o®ü-"|S´ ø�e ßë%ñ£¾�g£ü8ºøwðòÂÓPñt·Z޳â+ýKEÒe“W³i¥k§€z·ìûÿ*î~Ý?öwÞÿÓ¯ìŸ@]Á(ÿà­??c/Ø«@øGûLx{âO….t½GÇþ2ø;­h> ¼×´‹¾Õü[­FÛAÔâšÚÒ Dñí¯Š¼=~ÚÄÚ~‰Vúx:ÒN.íí@0à…^ñÇí%ÿý«n‹Ï ÜøÀ:“|YÕåœùÃO‡âLj6Þ*²ð†�yäCo¬>…á´×gÖ'itòþžú}fÊWðoƒ?´‡ÃÏØ3þ ‡û_üFý£Gˆ|+àíkâ_í+¥É¨ÙxRÖ.ôÛO‰^>_ø7]›F±‚MVóHÖ4Oìëˆ'Ó­n�íµk;ècšÐ³¨¹þÚW�j?ðp×쵨Z±{[ï~Ê·–ÎÊÈ^ §¶š(À2�Ô•`O 4xÚ?ø$ÿüçâÿÅO�ú¿cðSãÆ±ño\Ó|o¥éwÚÜKàŸ�>#‡Çv¾ Ò!HEÞ¶|âûk_ ø¿N°ûFµeok©ÜYZê²6›oª€sðTÏÚ?ÂðW¯Ú·öVý�ÿb¸u¿ˆš„“ÄúJxâçà ðö›s«|KÕ|#ÿ 6³6�®ézˆ´ïxBðn›©k:æ³¥éÀ4º ¶´’ k[�@Ôÿà¬Ú]¶‰ÿ¦ÿ‚~h¶^gØô�ö;Òí<é ²ýšÃö’ñ¥¤l­óI'•o‘¹vËM~�ÁÈò`ÿ³’øuÿ¨_ÄúûÏþ Cÿ(åý�ì�h¿úY¨PèMP@|³ûQþÔ^ýœ¼- 0§‰>$x•×À¾¶g’ïS¼‘þͧ©ÅoºêßB¶¹+´@]j—@išnf7@+û-þËÞ'ÿ„žÚWö“™üIñ»Ä�£jJ’Zü=³–=¶Š¶c6¶Ú쌶ÖvVê¶¾³ il?´LòÀú!@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € (”ñ¯€ü ñ'@ºðŸÄ_xSÇÞ½x¤½ð×�|;¤x§@»’L/u£k–—ºtï$ÄÒÛ»!$® ù€<3áïìQû|'ñ4^4øiû/üð?‹íoÿOñG†þx/L×ô‹¦R¦MV·ÑÒûB]¬TC£Ïe‚BÄ £µm#J×ô½CD×tÍ?ZÑuk;�;UÒ5k+mGKÔôû¸š »BÂò)í/lî w†âÖæaš'häFFa@àÿÙöSø}eâ½7Àß³OÀ_éÞ;Ò5_xÖÃÿü¤Yø³Ãšì×Yð߈­¬´¡Ö<9©Ú³[_x~ýgÑîmÝà’É¢gWøwþ EûCâø'_Ç_ÙÛö1øàx“Ç^$økâ;‡ <;ð÷áN‘¯kGÄÏ‡š–¿­ÝEü">mV/ ø]~Ѩj71ÞÝYhöVK;Áem@_ðN?Ø7GÑàŸ_>~Û?³ŸÃÏø×À:ÿÅ=Q¼ñ3@ðįøF_ÄÿüO®XÞiz�¼¾'ÒlæÕtk½6{‡Ò5?6HZ;[í¯Û ê炼 à�†ÞÓüðëÁÞð„t‘*é~ð_‡´� xsMÊóÎ,4MÒÇL³O#Í/Ùíbó%w‘òìY€<ûâWìÕû9üfÔíu¯‹ÿ¾ |UÖl ŽÖÏWø�ð·Àþ7Õ--av’+[mCÄÚ©w ²;³-¼sG,ÿ!ÜÔ6¯û9þÏzÿÄ âÆ»ð'àÖ·ñOÃͤ>�ñ/Wøaà�Kâ†þ ºèþ2¼Ðçñ˜Ú ECYjP4*‹?'h  ÿ‰¿þ|iÐcð·Æ†^ø§á¸n~Û…ñÁþñ–•m}äÉ¿´±ñ †¡oi~�Ë$qß[GÔJì#•w@çÂ/ÙÃöø ì?~ |,øOý© VúµÇÃÿøo·úÄ6îÒÁ³©húm¦¡«¬3<#R¹ºò‰ýÙ@,xÃöyøñ ÆúÄß|ø=ã�‰>BøcâŒ>ø/ÄÞ7ðâøSŸ[ÐWAñfµ¢^ëÚ@Ñ5›«�_H~¡l4ÝNâ{û/&êi&`‹âGÂ…ŸYHŸè_è?=½®»mjV ?O…E¿…m@†=ÚÃO-�è�P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( €8_ˆ?|ð§F¶ñÄ_éžÑ/5H4[]KVy#¶ŸT¸´½¾‚Å QÊÆy-4ëéÔe´§9 ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(Ìþ-~ßß|àËýSÀ>+Ò¾'øÖá“OðÏ„´{+Þj·A–ÚmNqlŸeҭܺ13]Ü“�”mq::r²÷ìÃâËÿËûMþÓ2?ˆ>2ø‰ÓQð߇5(ÃYü<±u̓5�Ýž·klË™¦F¾O…­Ï;µçšM<ô^€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( €8_ˆ? ¼ñ[F¶ðïÄ_ iž-Ñ,õH5«]7VI$¶ƒT·´½±‚ùRDÂxí5è–#eÌ£9 ÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’è{òÇìñàÝ{LñG†~ø;J×ô[‘y¥jqX<ÓØ^"²Åwl.¦š(î`-æ[ÜüÛi‚OG4i"€{õP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/ListItemAnatomyCompact.jpg000066400000000000000000001263231527064444300225020ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' \ÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀ\'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( €?–Oþßß¶OÀ¿ø- ¿²í ñ£Pñ‡ÀO|XÕ|á= Tð�ÃÝ$G |WÑ%Ö>ÜÛkº„4}^öòÇQ×|áÝFwÕ$Šæäjñ]D÷‘”@Úø)·í1«~É?±Ç?Œ¾ÕcÑü{cáûO ü7¾k{+Éí:i¾#·Ö|3âË­%î×S×Å׬Yiié·^$Õ%ŠÿR:dú¦´–ú„÷‘ Sà¿Úƒöiø‘âOøC~~Ðÿ6ðíÄ×öúÿ„uí/Äš,÷’n ‡TÑîïlešÚPb¸‰'g†@REVP“ê_µwì·£ø­ü «þÒŸ´¿Åw%„ž Ô~1|<±ñTwÑMöyl¤ðõψ£ÕÒî;‚ {f³ó’oݘÒªñügöŠøÇû0~ÄzßÅ�€Þ6›À^=¶ø‹ðûEµñ®‘áÝuÓIÖ¯îâÔm–ÇÄú>¹¤º]Å/œÖ 4`f b$µ{?üãÄ�¿°‡ìóñ{âç‰eñ‡Ä_øÄ÷¾'ñ$úv�¥Kª\Ø|@ñv�i+éúŸ¥iÆ3M²µ e§Û#ˆ’#Lò;}ë@P@P@P@P@P@�âõit r-Uƒ]“GÔãÑg+d:³ÙLºt¯ç$�íŽðÂíæÇ$XSæ#&å`ä'ö™ñ‡ü#û%|ñ'Ç_Œ?´o…¬¼áK½ËW¹Ðl~kššOâ]wOðæ– Ó`øW³«êz�ªLÊß¹…žc•B(Ÿ³'ŒÿàáÚßà÷‡¾9üý£|/{àÞëÚ~•q¯Ø|е7¸ðÞµ} jbm6ãád’‰¨i÷ –ı”æýuøðûö‘Ñ¿à¤~7ø‹ñöüøsã?…Ú�èti?eK/ŠŸoñ^�â�;ÁÚ:j¶7?£ò|/áXü%¬Xë^'ŸÅúuÝRÚâS©ØYÛjš³DçÞ ÿ‚ÔxkHÿ‚�Ú~ÆvzÂ]Cà­Æ¯áÝ>OÚM>.Ø`Ão¬|&Ó¼{vfŠÒO íÓ¼Cy7„¤Ýâ`Ÿi·e–H¯ƒÙ¨ÏðYßø(í'û;|oý“´¯Ù{ãŒ>øwñcÁ¯â ^ohßø•àßjV lëɽ±ð泩]Z‹y$D˜Îˆ"wE}¬Áhר € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ç|_{u¦øOÅ�Œ¦ Ý?úÕíœáC Õ®›u=¼¡%V‰ÌrƯ²EdlaÔ©!€?�?ø%×ücö²ñ§í¡ð«á—íQñ®oü,ø³swðÚ;]KÂ?ü<šŽ|8ñçÅOÞ�?Â?|!â/x–óå/‹á�&ïXÔL(ïšå­¬äŽÖÜ0{‹—Šòò(`ä þ ·ÿbý¸ÿißø(ç†ÿ~1Ïqð{âWŒ~(^_|1·ðwë]/OÑ ø}ãÿxÃֺ헃lüTÖž½Ó´¨ínß\7÷qéÑÿh\Ýy×+pý}øÿâ�Ã/…Bxƒâ—Ä_ü5Ðdy"MoÇþ.Ð<¤<‘ ’HÓQñ¡¦Ù´‘ÆCº ÷*aˆå€%ðÄχ4câ?†<ñÃÂQ×|â½ Åú0œÆ“N©áûíBÄJb‘%ùûü·GÆÖS@Œ¿¶¿ü[Ký–¿l/„_³Wƒ¼%ðËâ…ë>"ø£âøŸDÖít» WM±Ô.ðµÇÚþÏâ_ kÚV½áùþÁ4¶×þN³¥]ÝéÒýŠâ à»Ùrßfšb›cÆê€S¡~Õ²÷‰üU�|5ûHüñ�繎Êh~jÞ*šòg1Ei‡ì¥uûGi>ý£.<5§Ëæ^™üG¢YøKᮄc ¾iî5ïx÷JšÖržN« D²F×1nõ‡üóàŽ“û6ÿÁ~ü Ѽ‡µø_¯|ð¥Õݲì‹U×,£Ô_ĺîÝ«‰|Aâ)µ]nãäLÏ)¹  ›ßµN—ñëRÿ‚~ÀMðÚÏÄ׿lu/^üw�ÃQÞÏðxãůà ßC§‡”x:×U]mï.u:%¯ˆ�…ÞñãÔ�ÔãZ€?àŒŸ´Ã_ƒZ¯�?`¯ÚGÃóøj_x÷âÞ‡ã¯h~&Öl´ùSV¸m_Iñ„ð¥Ðñ ³ÖtYkž±°°´h¯<;åâf€}ÿéúæ“àïø'&—â_ˆ6¼A§| ø‹c¬üSÓí °³ø“¨ÚXü‚ëÇ–övºž³io‹¥F×¼»MWP´Íù6·RÛ˜Ú€?u¿à´òŠoÚWþÅŸ„_ú¹¾PçGü÷Ãrø¿þ9¯øi¿iöKÒ5ŸüK°ñGÇMjÍ/-ü/áIþ$Bšö—n­âo 4W¾1±/àè$·ÖP•uÙ-4«yõK«% È‰ßàŠþý–¼gá~Ð_¾5~Öºn…¬jø³£ü=ø—àÏxƒÅö×Wz?‡ƒñO�eÿi¾ñgÆðlW7º¶¥}ãZMG[ÖäѾÅâSÃ^ ³Ó#ð5ž£kwm¥k:¦¯xrš„¨€�?µÇŽ?à›lþ|Rÿ‚axËãïÃO�>ñ�„š‹x€øªÚÚûGM6þcâû/kw×—:o‰¬u‹]:ÊçHÓÚÓ@Öt�oSŽ].(ìŽÐ÷[û(ü_»øÿû2üøÙ©Ckm¬|QøEàëö¶1¼66~#×|5§^xŽÎÆ9^IÊÏ\“P¶´I#›h¢,ìNæú€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (“ñïüˆÞ4ÿ±OÄúg¼ ó•øû6j?`ÿÚKö’ðLW6ÿ¿e?Œÿƒ¡øÓÃz VÔ-¥øk«éºgÄoÚÚÛºÜÙ�ã :‰¡C2Û®·á¶Õ#Xä·–TP”ÿf¿ÙÓIý“¿à»?²ßÀ ,[<ß¾ø^ÓÄw¶£jþ7Õcíw]ñÖµÀs­âíOY¾´Y ¼6s[Ûu… €|çãïÚcölý¬à£>&ÁGëà‚µ�xgá'ÿ‡Ñë·–çNð÷‰að焼6ŸÙ×PÝxgD¹ÐlnüUâÛÝ ]+Rñ‹¤-s ^\ª€t?i/ÙÛö`ÿ‚ ü ñüÇÆ¿býš¾-ø›áÇ€~*øâ:Õ¤VÖþ7ñdÞñ.Šð_ÝKyâ}7Ãvú_Ž|ªê÷z¦›â&žÆK™­-¥à?ü¯ö=ø1ð¯þ •ðKá·„ìüE†?i»ß‡¿¾)E}¯M{{u⌴OÄ=Ʋè—o 6�e6ŸcéÖq$‹§ÊTy a@?v¿nسà�Á?ø'N‰û0xgö¸�ö*ýœôÞjž+ñ?Ž,uˆÚ×Ä+-nëľ(›á�¼^&ðž»® OÄWòx‘ô-ßYÔõ _Clºlºu¶£¼ù§ý­?ੳ]ÏíWû |vøa¢ië^8±ðØøƒðÞÆÆÖKÝZïÇ?¦&Ò´�Ú$’IµOZYj^ ¶�¼‹â9"BŽêêü½Á)ÿaÏÚÛâ7íÇû7ëÿ´ÿÀø]û/xR÷Ä^Õ~.ü*ñÇ�´h`ðV»­x—á烴]cź“e{eñ?ÇQø¦ÓJŽk«ïì}7Vû< g`ÒÚ€~ýÁv~üKø½ûk>øOðóÇ?ü]/Å_†úŒ^øwá-ƾ#“O±ºÔÚöú=Ãz~§©½�šÉ]]-©†Ü:�) Žü=á_ø*/Á/ø%ìq?ì{¡ë~ø™ðëDø‡eñ¿àWŒþè|JÔtmcÇ~ Ôø“áÿ툵=8îžëÃV‘Á«ëúo‰¬otí>øØ¢Jù£û[ß|vÿ‚†øSÀ? |ÿiñ_ÁÚ>ßÄúEïŽþ6iu¿Ezðiz�ž§¥j×Ú—Ã_‡ÚV…¡ëú�ݶ²n¾$øËT·ðð´m¤—·w#ZP²य़ðJ¯Ú3Uÿ‚þÃ~øs¦_|dø¥û!x+Ä>ø�á_ �g\Ö´¯ÚøsT¿¹ð=Œ¢ GĶ>Öü2žÒô}3Ojz&¥kwk¦:ióÛÀä¿þ;ÿÁW¿oØgÇŸ5ÏØÏÆžðïÃÏx"o‰Þ4»øuñPüDøå©x#Å�Cð‡€< ªh±êw>'ÔüCi§øÇƇC‡Z‚ÃLðö±%ÅÆ“m=¾“©jÃûþÖ?ÿà…^ø?áß…ÿ|1ñá¿í⟋Z×ÁøwXð/�ü_á+kŸé iaáßYhÚ…Ö¡ø¢ËÅZ6ŸqäÇ­ÛiǤũkO¢Ú¸ÂÿþÜþ)ÿ‚~xßö1øaÿ®Öþë>ø'ã üGøõâOx£Ã—Œ´�Ã÷>!µðÿ€5O‡OŠ<_ñ³âLÂ-§ÛhÞ#ñMÛø“Z†õ4{=4‘£ygÃÿÙGö¤²ÿ‚!|tøOyû5ü~´ø§«þܾñn“ðÒçàçÄH> jž‡áÿÂû)¼M§x6_'ˆ¯|=æŸi&µm¦Ë¦Çsey܉m¦Dþ–?à’žñ§Ãø'wìÍàŸˆžñG€¼g økÅ�kžñ§‡õo xŸEžçâO�/íáÕ´ rÒÇUÓ¥žÆêÚòï-!ymn-î#S Ñ»~ŒP@P@P@P@P@P@ùKÿ­øuñâ¯ü¯ã/‚>øÆ_ñ÷…õ¿xžÂ GâO‰¯´ù¯tØéÚ­¬WÖ7^YÉ=¤iuk4W†Dvü»ýžÿgŸ�Ú/ü ñCã6³ð7ã“ð{PñgÆ«›ŠúŸÃ?X|5¾·Õ~êV\öž:ºÑ"ð½Ì:•ô‰ea,:«¥åÛ¥µ¹’fT ?ÿ‚�þÏŸ¶§ÀOø+6™û|ýœ|oûAxNâ_‡ž*Ò-¼ á�øÖ¾ðÏà 'á_‰ü)âm;Áú~«â/ÜOa£Í¨YjÒi’éÆ^ÊâÒêîêËP°´Êÿ‚Àü2ýª¿kÁ>>1xwöPøêÚ¾§ðkF×þ%øCÂ_ þ"øÍ¾ø—\ñV‘­êñmæŸá8®4}WFY'Šâß^°Ñ¯ö[K4ö6Û]ëø+çìAûJ7í7ð?þ -û!ø.OŠž9øK…`ñßà KÖ5{÷ð.¿>§á½kMðÌ=WÆ:f¹§j×¾ñn‰¢HúýžŸe¦^é6³Gq©^é@]â_Ûóþ ÁûXk~ø_û*ÿÁ>|Oû*øŠ=jñÿÄŸŠ~›_ðͲ,fÒòÚÿWø©ð›Â>ðž�b× ¬^Y-¯ˆ¼m¨ lô(¦•.,µ@é›À?ˆü?à_è^1×àñ_‹´ hgмQk¥XhVÞ#ñ%–•ko®k¶Ú&•mg¦éú¶©Õüe…¬–1\-´$q*Ð]@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÌøÖÞ{¿ø¶ÖÖ®nn|3¯[ÛÛÛÆóOq<ÚUÜpà 1«I,ÒÈËqƬî쪪X€ÀÍü/öTø“áÏ�¶¯ÂßÚkàoÅ†Þø½?„<-q üTø{âχóx¯Âú·„|F²ø3û"øƒÆþ'ð7�|]áOé_>#x�Dñ šgËï‡zÆ«e‰©Å}ªÞÛ|R@¸�a>DÔÌW3¬r€}�ã?€Ÿ.¿àâÏ|nµø-ñfç཭®”·_`øsã ¾[4²ž«áÙÇ£7…!hüA$z‰5e+¬:i‡¬°0‰ø¿à/í‰ÿ�ý¾>3~Ò_f/þÖß³OljüW}yáï麖±«èšŠ5ûo]húšxgþ+Ö|«x'ÄMqa¡øŠÿÂú·†õï Êé,«¬\ÝÇ¡€}eû1|ÿ‚ª~Úµo„!ü5Ю|Câ½/HºmFïIÐÐôO xWI‚[µ¾�ÄÑ6®â?ð]?Ù/ö¬ñOíUû6~×ß³ÇÂüe°ømàßèÚ?�´CÆ:މ⿆ÿ¼MñC›V𖇠Ljo4=u|P-Ö÷J´¼†Ò/mõÓÞ}4Þ€qßðT_„¶çüö,ý”ÿhý?öiø…àOü:×þ2ÚüOý˜ãÒ¼O/Ä:Ã^Ö4-Ã^9Ò<¯hñf¸’ÚøîJ·Ñ¯µ»};Åú}Î�g¥¦³ªÐ”þо0ý¹ÿkø'þ±ðSá�ü·\ý›ü à]7á´¾7¹Ñ¼â™½Ô­l/|K«X«YikrûMÌ�KynÖWžKkF{É ŠSmó*Bà¤Z.µ¤ø�IÓuíR³Ö4]bÊßQÒõM>â;«û¸Ök{«[ˆ™£–£etuc�ppA§@P@P@P@P@P@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € (ÄÑÿ‚r|@“UÒ£Ö¼sû$øëYOí;{Þê¿õ[ÇXÒHÚCåÅ}ŽÖîG†ËÅv0ǦêRÛkvÖ7êú·á/øoÇ~Ñü]ábÏ^ðæ½gþ•ªØIæ[Ý[É‘Ü,�Ï Šð]Ú\G Õ�ÔSZ]CÌ2F€P@P@P@P@P@P@5M/MÖôÛýY°´Õ4�RÒãOÔ´ÝBÞ+»û¸š ›K»YÕḷ¸…Þ)¡•« ~Jø£Ã=ÿ‚xxþçâÃë][Æ_²ÇŒõX?á3ð`žK»ï_]È�Euk,ìDOäƒDÖn$HuHV x–xï×E×'ýKð'Žü)ñ/Âz7�¼¬Úë¾×­VëOÔ-XàŒìšÚæ 5�ýœÊö×Ö7)Í�ÔRÛÏI­uÔP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Ëx×Á^ø‰ámgÁž3Ñ­5ï kö�e©é—¨Z9cb9b‘JÍkyk2Çse{lñ]Ù]Å Õ¬±O:€~VèZï�¿à�_ ðwŒgÖ9ý’�«i:Œ+qg}gp»%†h˜AduÛ$R*K¤¨Ž “w6Þ?ÿ‚r|@}COMkÇ?²G޵¥ûm–æ½Õ~ê·¬]Ø$WñF¡-î$0Xø²Æ±¾’×\¶³¼@ÕÏ x¯Ãž9ðæ�âß jöz÷‡5ë(õ 'V°“Ͷ»¶—##!dŠhdW‚êÖtŠæÒê)­n¡†â"P†€ ( € ( € ( € ( € ( € (  ÝcGÒ¼C¥j:»§Yêú6¯gq§êš^¡oÝ�ý�ÜM Í­Õ´ÊÑMÑ;$‘º²•'#¦àÉm{Añïü«âþ3ðm¾±ãOÙCÆÚ¼_ð”x\M%æ£ðÿR¼t‚+‹i'lGéNÈxnm¦LMg}g2¥Í�õ³GuguWò$±£Ð姆â+»û¸–kk»K˜^Hg·¸…ÖX¥�Ù2±¿@P@P@P@P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € (Ä^м]¡j¾ñ6•e­èå”úv­¤ê0­Å�õ�Âí–¢ol2H…%†UŽhdŽTGPÉË‹ÿÁ8þ 5õŠë^:ý’ñ¾�k®øo]µk[û ¥>¡àºµ™q5�ýœÊ—67ÖÏÍ¥ÌqO‰") Ëo ø§Ç¿ðO/ˆ¿~"]j¾0ý–¼eªÏÿW�L2]^xöîFž[[¸à�¼¶ˆ3Ï­è°*C©B³x›ÃP¥èÖ´[€Ö­3SÓµ­6ÃXÑïí5M+T´·¿Óu+ ˆ®ìoìnâYí®í.`g†âÞâIaš'd‘2’ ^ € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÖþþ( € ( € ( € ( € ( € ( € (  _øsBñv…ªøgÄÚU–¹ k–SiÚ¶“¨À·wÖw ¶Hf‰¿ŽD),2ªM ‘ʈêù7<?ÿ‚qøý¯l—Zñ×ì‘ã­i~Õi—¼Õ~ê·Œ]ŠÇ¡j© Îa°ñm„ ivÖÚåµ½Ô@«ÞñW‡|oáÝ#ÅžÕìµïkÖQjN­§ËæÛ]ÚËÀe8WŠX�^›iÒ;›K˜¥µºŠ+ˆd�@: ( € ( € ( € ( € ( € ( €2õ½Hñ&‘©hþ›g¬hšÅ•Æ�ªizŒÝXߨÝFÑ\ZÝ[Ê­±Kee=r0Fhò_XÑü}ÿçø�7ŠÓm–¼Õ~ê׬2–"8µ£P±LæÞÇÅÖ-µÓZë–¶÷~¯øWÅ^ñ¿‡t�xOW²×¼;¯YE¨i:¶Ÿ/›kwk.pÊp¯±¸xnm¦H®m.b–Öæ(n!’%ß € ( € ( € ( € ( € ( € (+\ÐôhúŸ‡üA¦Yk:&³e>�ªéZŒÝY_Ù]FbžÚæ C$‘ÈŒAd2•`¬ “¦—ãïø'?Ä ¼GáÈu�þÉ~9ÖcþÜÐÄ�{©ü<Õ/bŽhgÛÜH?P™ã´ñ5”QhšÜÐk6ÚV¬Àªþñ‡†|á�Æ>Ö,õï ëöqßiZ¥‹—‚âʲ²°YmîmåY-ï,î#†êÊî)­n¡Šâ#@–€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €8ψü#ñGÂ:Ï�üq£[kž×m�½í•ÀãšÞöÊáq5–£e0[‹ëwŽâÖáXœE~]ø?Åþ=ÿ‚{xþÓá‡Äë½OÅß³‹õIÿáñá†[«¯Ý\ÊÓËiw(ÞRÄ]¦×t8c¹A/‰ü5žu}àõ¯NÔl5{ -WJ½µÔ´ÍJÒÞÿNÔ,gŠêÊúÊî$žÖîÒæ’‹kˆ]%†h�£’6WF*ÀÐÊ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÐþþ( € ( € ( € ( € ( € ( € ( € ÁñG‡ôøwYðçŠt›=wúƟqe«é7ð­Å­õ”¨|Ød�±óp’X&Xæ†H¦�@?$£ºñ¿ü»â “Ù.»ã�Ù+ÇÈiíý/Wø{ª^0PÑ“'•¡ j9á±ñm„ ɵÖí`¸ˆõ[Ã?|-ã-JñG…õ(õ¿ë–q_éz¥ƒG-µÝ´¹Ã)Þ9#pðÜ[̱ÜÚÜG-µÌPÜC,j»ý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPNºžñ>�©øwÄ:LZ·­YO§jºV¡kÍ•ý•Òç·¸‚G(ñº1ôe8teuVPÊ+�øM¿à�ÿ¦Öü=¹ã_Ù7ÇÂ_Dw7z¯ÃíRñÒ4šÞI$hÒöTŠÆöi!´ñE”1iÄÐkVúf¦ ª^ø�á/øwIñg„õ4×<=®ZG{¦jvE ˆ‚ —Y ¸†Ex.­gH®m.b–Úæ(gŠH”¡þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ /â…ü ñOÂÏ�¼s¡ÿnxs\¶0^ZNˆ²E ù­ï¬nA5–£e0[‹ëwIí§D’68e Ì�|Añ¿ìãË…¿®õo~ÌÞ+Ô§ÿ„Ç-O{à«‹‰Zi-.¢‡zÅeÚ]wC‡lr¯›â_ Ädm[Jºý`°ñV�ªØÙêzeÀÔ4íBÚ Û ë)-îlï,î£Y­®­n!™ážÞx]e†h�ã’7WFe пí»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ ûnÓû—÷Äür€í»Oî\ßÿñÊ?¶í?¹qÿ|GÿÇ(þÛ´þåÇýñÿ  +yÒæ™}Øo•™N@$uSŒž”5P@P@P@P@P@PÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jòïxwCñn‡ªxkĺ]žµ ëVsXjš]ü+=¥å¤Ã¨pAE*2MÉðIÑ#¨弑øëþ ñã³<Xñ¯ì­ãm`yÐü×z§€uK¶Àa’±Å¨E…�ɆÇÅV0f6ÚÕ´RÄú‹á¯è>1Ðt¯x_U³Öô nÎ+ý/T°—ζ»¶—8el+Ç$l­Ä¤w× -µÌQO‘¨åP@P@P@P@P@P@Zî…£øŸGÔ¼=â6ÏXÑ5‹9ôýSKÔ K‹;Û;„)4Âà«+)àðÈÀ+±ƒË—ìÚÕ¬rDú‹á¯è>1Ðt¯x_U³Öô nÎ+ý/T°—Ͷ»¶”pè~òHŒ)à•R{kˆå·¸Š)â’5çµï‰Ðd{wº“Q¼BCÛiª—[6Ë;K²0#•¦B>hÁ0 'Æøâ ÊñçïIª¤O�]‹a0Ï·™øœ| :gÆO]:ǨYßieˆnòÙ=K¼;.:ÿrÕ¸äÿv€=RÊúÏQ·ŽîÂê »iFR{yXÛÔnBÀ2ôtl:6U€a…µ@P@P@P@P@PF½ èÞ(Ñu?ø‹L³Öt=fÎm?TÒïá[‹KÛ;„),3DÜAʰ*ñ¸Y#t‘ÔòÖê×Ç_ðOŸ>£§&¯ãOÙ[ÆÚÂýºÇs]ê~Õ/"º3�‘ߊ#¶¸‘¢³ñMŒ)c~öú͵•ê€~¡x_Åñ¯‡ôŸxWV³×ð—Å jÞ ñ¶“± k0yWò|³[̼Û_Ø\ŒIe¨ÙK‰ìï!+$2¯ñ#:8æ×‚¼iãŸØKÇVŸ ~*Þ_øŸöxñEüÿð€xüÃ,òxJY¥2Éiv‘+˜aˆÉækºa¼¼¿ˆ4Ý%Ô,'ýP²½³Ô¬í5:îÚÿO¿¶‚òÆúÎxîm/-.cY­î­nagŠ{yát–¢wŽXÙ]”ƒ@h € ( € (°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  _xwCñv‡ªxkĺ]ž· ëVrØjš]üBk[ËY†9ò¬¤,�ÍI­æHç‚HæŽ7PÆ�kVñwìcã oÃþÖµ¿þÍ^*ÖÎä '½ð½ôãlÑC8û²¦ /4Mkiâ«;T3,wÑ+(ÔÚ6³¥ø‡K±ÖôKë}KJÔíÒêÆúÕ÷Áq�O ¬¬ rÅ"¬°Ê� È’£¢€iÐ@†¼QªøZô]éÒæ'*.¬¤,mnãÃ*ºê 1L›dŒô,Œèà^hå�ˆ´»}RÁÉŠa¶HÛm´ê›m0�$Dއk¡I²:3lÐ@P@P@P@P@�âè¾*Ñu?x�L³Ö´-fÎk SK¿…g´½´�vÉ Ñ·àÈêVH¤T–'IQ@?-§ƒÇ_ðOŸµåšë5ý•¼m¬/Ú­w5æ§àRí‚«!b;ø£UXfc—Ь`[K¶ƒZµ·¸ˆõÃ'Ðu�Ü$ôfá$iå^„2[G0�Á\Ír@ ñ–±£ézþ™}¢ëV6ú–•©[½­õ�ÔbH. �|ÊëÁ WŽDe’)U%‰ÒDGPˆÈñ?ì›â�Ëý¡âO�ž%Ô>aó\^øVúsÔtHîÑùvÚõ¬[O‘¨À ·4}cKñ—c­h·Öú–•©[Çuc}jþdH8e?yYH)$NXeY!™TtP *(×¾kÒXë²h’96šÄnÑ¡éõ¬M*:“Âù¶é4NGX?"új€ ñ_‰n´‰Î�¡Ê!½£êË´Éj%]ñÛ[çp[‡‰–If+˜£xüœJÌÑ|ñquuy#Mws=Ô¬rÒÜM$ò1õg•™‰úŸÄÐP@P@P@P@�«if½¦_hÚÍ•¾¥¥êVòZßXÝF%‚â N á‘Ô¬‘H«$l²*²€|BéâÙ7ÅX†¡âO�ž%Ô™Z{ß ß\dg —q \˜íµÛX„ruQÐíÍYÒüC¥Øëz%õ¾¥¥jVéuc}jþd7¿FSÃ+© ±:¬°Ê¯È’£¢€iÐ@=$xØ ‚Àî.!´·žêâEŠÞÚ'žVác†2K#c'ŠXàtèäïüBÖ|Eu4v×3éúB»-½�¼�Ë I{$ni$´E¼ˆøTFeiÏÉ,IbI<’NI>äõÿ>´€ã‘Á‚;PiáŸë¾¹ˆÇw5æžDúmÔ¯, ~o³™ Y€9I!Ú¥‚‰’T(ë}7P¶Õl-5+7/m{w±á‚È íq“¶HÎREÏÊêÊqƒ@ø¯c­]E§jöË¥^Î˼é)’ÆâVábbàIm$ŒvÄÉ)”;"8®Ð ãß/„´´’Iµ;æxl"“˜×`S5ÔÊ –ŠÜ: €ƒ$²D¹T.Ôò®§­êÚÌÍ>§¨]^HÌ[JÆ$Ïh †ôH‘vQœÐ]MÅÅ´‚[iæ·•H+$¼R:ñ²°#¶ÓÄï¿ ~!^_ÝÇáízss4ÊßÙº„ŸëžHÔ¹´º~¬è¤Á;~õ�LrZT(î´P@:¶»¤hP¬ú¶¡oc’#±2JW–Â�昨#w•íÈÎ7-rÿð³ü ÿAÏü¦kü€?—å@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@ü,ÿÐsÿ)šÇÿ Ðÿ ?ÀßôÿÊf±ÿÈ4ÂÏð7ý?ò™¬ò (øŸàb@þÜú麸‰6ÇôäÐ_§jz~­l·zmå½í»¾m¼‹ V%$îŽ@&9d¼� ¨ € ð/‰/­¯gðþƒpÖ¢ØùzŽ¡ pÓ‘óÚÛH0, 4ɶs8hÑ¢XœÎá3O=Ùn&–y’ÒM#ÊìOR]Ë1'¹$æ€" € ( € (šñ„4hþñ-„wú^¡×Fùf·™sä^YÍ÷í¯mœù�Nœ«eXæ·¸Ub‚2áµ=46¬ÇSÓD–òÍ qÛÜAw7V³EsmssÛÜA"MðL‹$SC,e£–)c`ñÈŒÈèÁ”• дP@E4°8’d†E ¬‘;FêGBH`AäúpTÛ¾|E¾7öÚ½r÷p]ºÁa;o¹‚å°±[ÜJÄ4ðÎØŽ9$/4s:)v…²€CP@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øß#ˆ<7Ï–òê²7¦ø’ÁSñÄÒcŸ^´óõfë>—â .ûEÖ¬mõ-+R·{[ë¤ó ¸‚Aó+ªÀ€ñÈ…e†UIbt‘Ôã='Iñ×ìÕã«-G±ÖÞ €:OHñx¯ÃŒ™ÉÖ´ØÎ?¹5ÔQIëÿ,ݳíéÖ€>Ô €>*ñ„¯7ŠüFòÌ5½N IÏÉä°Æ>‹j v ç( € ( € ( € ( € ( €3µ}#L×ôËíY±·Ô´­JÞKKë¨Ä�\A Ã#¯pñÈŒ²E"¤±:Hˆêñ–•¤øçöjñÝ–‘£Yk>6ø?ãmb;[+ XÞ÷Uðî«xØHãA…K¸Ðgc žµe <­o}l^ ·¨ € (îmWŸGÒ¦�–’m6ÆYœ–y-bv$÷%‰$ÿ�qŸµ9ôßÝ‹whäÔ. ÓLŠpËþd·I`‚H§É+`ƒƒ@&P@ÝðWS™u-[G,ÆÚk!¨¢ò¤öóÁl죳Mʇ מ6*ÆÞÞ"AÇÉ=í¬2/Ñ£‘”Žààõ4ñíP@Vü&•äðmª¹$A{yþ3yØÞdÎ{uüXÉ>.êsÝø­ì�Ùô›[ha�?/™wW“K�ïÈ&†69ÁX#èA - €>ÏðN§6¯á]þå‹ÜKhbšF奖ÒilÞV#ñ·uâb÷Sº‘›Î™Å¼lNÛ{Db-íãc�±�ò‘²îæ€0è € (�Ô|]á�'\Ñü5©kz}–½â�´m.âuK«õ¶�‡�¸å 2™H­„ÒDè€P@P@P@P@P@P@P@P@P@P@P@P@Pwðç[ºÑüS¦Å�ömVæ 6î �’‹©0HW¦ûyÝ$GûÁ|ÈÁ +†úö€ ( …5)^}GPšBZI¯n¥v'%žIäv$œ’KI'óÍR € ( € ( €9Ÿx?Ãþ;ðýÿ†|Mb—ú]úaÔág¶�Aò/l§ÁkkÛg;à�9S”u–’&ùsá“|Fø)ãÛ„å–©ãø‚[™<â;Kw™ôh£Ì³¥ÙÜRÖÊØ0:­Œ’ªÙI"ßéÆX.^€²h € ’^ bš2VHdIc`pUã`êAìCAÿ ûÒ€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè !øÉ¦=ׇ­5Ô±Òï�—î[^'’îO^.Õ}>|’0|Ë@P@ïÃM1õ/id)1ií&¥;�‹j‡É'·7on�¾öFHÅ}w@|gã›)l<]¯Å2•3jW7±’+ù äl¤ðFÙ¶’2+/U!@9:( € ( € ( € ( € ( € ( € |QI4‘Ã4’Êéq Ë<’0TE’ÌÄ(©8ï@téÖÍg§ØY±­,ím˜Ž… �"$tà”$qùP7ã½_øjúÂܼ�˼²RpâÙ·yYàž#,XíW•Y° ÐÇRFñ;Å*4rF푺•tt%]XVVYH‚1@  ¡¾xvæÖ+ß]DÑ-ì+e§‡Z[a"Íqpüò’X H˜ýï*F!F`Eñ唺‡„5ëh¼¿cóÕÏö9¢¼eP2YÙ`!T ³I �( € úÛá}Œ¶^ Ó¼å(×’\ß*žŠy˜@ßIaHæ^¹I÷€yŸÆÜC©Åâ8#g³½ŠkÇQ‘owùq4œ|±Ü[¬IéæBêÌ Æ¬â´fÎÎçPº‚Êθº¹•a‚ÆYÝŽô}çv¢îB©4ö¯‡t‘¡hzf’;YZ¤rºçkÜ6e¹uÏ!^w‘”B�Jð¿�vS&±¤j%O‘>šl•ÇA5¥Ôó²“ÐKÔ+“ó|gkPŠÐ@t²›Qñ&‡i –wÔí±ÎØ`™'¸�õâ8"’CÇEïŠûb€ (ä¿øRÐ5+»«[I®4[‰¤žÚæÚEµY¹¶¹¬a0’R9$ Ѫ²±q"DçtP@xׯOŒš/Âm$‘UñNª ør&-q}pO–·WIe‡M‚VIÜË‹K\ÌÎñy¿ÁŸƒšÔÚÔŸ>/»j¿ufz^—vªÐxVÝ—ýý› :”0‘¥¤{bÑaùT6¢d’ÜêÚ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (@$€$ô’}‡_åùб|3ð>¥q«ZkÚ•¬¶šuƒ‹‹U¸FŠ[Ë¥ÿPÑFàH …ÈœÌT#º$q—ÌŒ€JÐ@ðî½e.›­j¶3©I-¯î£ ‚7'œÆ)pJKYQ±ó#«q‘@4P@P@P@P@]Ó¬¥Ô¯ì´ø´×·P[ Ÿši7d…PK1誥ŽÍ}×@v_üxAÿmôt”¡@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ·ÖVú��Õ…Üb[kÈ$·�ñG*lá`QÆR@x£ÃW¾ÕeÓ®ÁxŽd²» ˆï-‹a%^¡]~äÑg1È�£¸9@äF‘•YÝØ""ÌìÇ ª£%™‰2IÀÏõ‡Ã�?†4—šõjÚŸ—-ÒðM¬?qg¸ ¡g’r¸S+ùyu…€=€ à¼màK/CË(²Õ­�¥½æÍé$Y-ök¥\3Ÿ³FêwÀîì¡ÕÞ7ð›�…^5‚FH´è/ ­õ�½Ô]Ïm.?Þ‰O嚃þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€Ÿ ¼pÌ´eŒ®ú–”T{Ÿ.ñߎ¼+}Jõ�|/M ê-_Zš½F¾ÒÖ Íig'ižGUiîÝá(.¦Wº{Çkþð߈å77ÖMãöÊO³\>0—á�€CϺ¨Ú®b€1ôß…ÓçYÞ ½I‘ƒ"jW ,‡MÐ[ÃmÃÕ&Y#=Ôõ HUTUDPª *ª€UF¨ 01�@ @ âß„RÜ]M¨xfXgv–].á¼”ŽFË7ئшÙ�ËÞRÅÎÉvl‰@<üü/ñÈ$ 0Ƨ¤}Æëà1ùq@>øçþ€x÷:ž�Ç¿ÄþCó ÓÃ?¯æ+¯K 6±²¹Ó­eó§¸*såÜN€Ã Dã�óÉ"îUhX¬”ô""D‰h±ÇªG(TD@Q@UUPTcÉà‚êmîaŽâÞdhæ†dY"–6d‘2²‘ÔGé@iyð‹Â7Sc]JÀ30ÙÝ¡‡$äà]Átê9áQÕ@ápÔøÁÞðÖæÒì‚Ü:ì’òv3ݺžª%sˆ‘° ÇÇ RFh§  ?øOñ.™.™¨¡ò܉!š< ­nð± ¨fVmxÙãpÊÇhκŸÂ/ÚLË`–º´�—,70ÚJW·› ì�¬n{¬sN£³œ|Àð¬)“ö‘ý£Ýõß‹zó&¡áÏêƒià+"¹°v°bÐÚk6Ð0�MÓ#W†¡åüÍuå—Oý € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 4ñÏûo¨YÍޱb3,ŠMµìh1w^^dI#ác¹Ev�-ã‘V#ŠÍð³Æñ9DÒ¢¸PHéiÊ�îÅÌàöÝŸU ¿áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN  "øYãy+é1À¤€d—RÓY܈.¥“¾ØØúÑ€=—À¿ ðăSÔfŠûX(ɉ[ì¶ ë¶O³™¼³º–F¸e�³G`3»€z�ØiñáýµÿÑÒP…P@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €1µÍKñ‹Øj–âh‰ÝŠvOm.0&¶—käã£#®RDt%(çí{á»c#É¢I¯i’R6xío£vºJñÛË�Àx¥ !&@ Ox®'ØÞÖ‹g¬zuÔÉÿ!‰ã?\â€6tφž0Ô�AÒÛOˆ�}JD¶T¹‡-tp?¹nþ„‚p ëá‡O†/fí=X/Ëu,a µ$a¾ÇÌQÈ%Lò;ÊWîy*îŒèÔP@P@P@P@P@P@P@P@P@P@P@P@P@P@|ãûHþÒýž|&º…ú¦·ãMme¶ðgƒmäÿMÖo¸Œ]],{¦µÑlåtûmàBò¹K+1-äÈŠàß³oìßâ½gÅOûIþÒ,ÚßÅmu£¿ð¿†5‡Ø¼e‚Ú|�§±hm5{X.•¥¨)á¨ÏŸ?›â)e—Mý € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>tý£ÿhï þÏþÔÔÂë>/ÖV[oø:Þ\_kwã ö‹€‚Im4[9$ŒßßylrÉih“ÞÜA |ÿû7~Î>,ñ‹ö–ý¥ k?u¶ŠÿÂ~¿‹>°}6Y4Ù7ÇeªZDøÒ4Œ¸ðê1»¼y¼K<²é`¡tP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( �ÿhßÚ3Â?³Ï„±«•Õ¼U«¬ÖÞð}¼ÁoõÝA@_:]»ä³Ñ¬¤’&Ôu­²Ísmo(ϳ‡ìçâïø¸þÓ´®í_âV²Ñ_ø;Á÷ð•±ð&ž¤É¦M6™#Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝ|ãûJþÑ>ý›¼Úö¹ok«x§VYí|àËo%5/jhª7>"y,´k'–'Õ5F‰ÖxííâºÔ.lìçù«öfý™|]ã?ÃQ~Ô0®«ñZ0ßøÀ—¶¢=/À:`̺\÷:<¾dVz�œRnÑtY7¶‚]µMQîÉiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèdD�B¢ª(Î*Œœœ$“�É9æ€@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ç_ÚKö’ðWìÝà—ñˆuOj‚{_ø6ÚuMOÄšš*ú,¯g£Ù4‘>«ª¼M¬o¥Î¡uee8Ëß³WìÛã_xÕj�Ú•[Tø‰«4þð%ü šo€´Ä-6“s>“3H–WÖqÉæhz$¡ßEw}cWyüUu#é`¥tP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ùãö�ý£üû7ø"Ox‘Æ¥â HOkàïÚΑêž%Õ#EùW呬ô›&–5}Yâx¬¡x¢Š;­BêÂÆìåÙ·öpñ·Ä�'íSûSFÚ—Žõ3÷Ã߇÷Ð|ý£hÏ~ΗÅ&”jæ 'µð‡„mgHõOjÑ >\,­g¥Y™!“WÕä†Hl!’8ãŠëPº°±ºùCöoýœ¼mñGÆñþÕ?µ4m¨xÓQ0^ü9øw{Ç¥øJG3é—ZEǘ,î,ÖO;CÑ'ß.�3¾¹­Iuâk¢úhé•P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ý¢¿h¯~Î>›Å~)”_j÷¢{O xJÖt�Uñ>­)ò ÊÈm4ÛC$Rêú¼‘<}»¢¬wW÷667`$~Î_³¯�þ-xâ/Ú«ö¦ˆßø®üÁ{ð×áÅì•à½%®4{Û½&áœZIh$óô=q$ö“Èúö¹%ψ®·Ù~›P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Á?hÚÀÿ³—�§ño‹'z�؞מµž8õojéamld6º}®ø¥Õõib{}:ÝÐl¸¾¹°²»ùöuýž<ñLJ¼7«k�Èb–}FÔ¯àÕµ”ŽUhœévW›dVB7+*€Aðkö ýœÿhˆïàgDžߦÓ-¢¼ÕtïøÓB×µ­Òwò ¹Öt++×Ötxf—÷QI©ØZ¤’� uePv € ( €>`ø)ûg~Ì¿´WÄ?Š ~ üVÑüqãÚgÄ-ÇNñ‹iRÛêé7:mþ¯¤iú_‰´»]bÞ}.çVðÍÁz‘$—J—–2]}?@P@P@PƒþП´'�¿g?Üx¿Å÷i¿¹ó­|-ákY£�WñF®‘†[K@ÂO³XÛïŽ][V–'¶Óm�I[‹ÉìlnÀ>9ý�ÿgÏümñ̵WíMnnµ›³çÂÿ†7�ÈšO…4„sq¤_Þé- ¶ŽØ8¹Ñt‹�×/rïâ uçÕ®"ý> € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( Ÿ?jÿ³7ìÛñ¯ãÜút:ÄŸ >ø‡ÅZv�q3[[k奣Eáí"æá?y¶©®Ï§X\Mi¢†âG…UT`äÃþ iÿõ_ø*¯ˆþ3~Ù?¶çŽüyã½?Ká .ÓÄSéÚ—Œüc›§ø‡\]CY &£ x'Â>½áý3þðÚéÖî×Íea¤Øxi´ÝHÝÿnoø#GÄŸÙGÇßiø%vŸñRoè¾.Ž=_À:gˆb×µo^ÚZË©é^%ÑuMrîÖûSð~¤¶Z‹|9âk­z ·¿³¶”Ýi:­æ�nû;ûKÁLüûþÌ_>-~Ó>ñ&—ñ£âσ´i­þøz (üMÿ í¯†ô‹ÿi²Í¨ê-a£ø_ÁÚî©o¦êšì׺Œ±&¡¥�>ÏY¹ºHóÓÂÿðqO†ôxWMý¤?bïŒß³÷€üfÑÍ¡xúë\ºñ3Ï£NñDž#O ë_¾MªhvÒJ²êWÕ|Au  i,-5K³ŒàoÁD¿à¬~ý€ì~jçᆡñ³Cøý¡ø»Ä~Ö¼/ã]7Ãú}¾‘á˜|ui ÷:&µ«i¯ÙøÖÒîÆâÝá� ¶ßûå¹B€ühÿƒ‹~|8ñíæ›àOÙ×â?ÅŸ„vµ?‡$øá§øŽÓÃ>ñ³§®ÝU< i}á­JËÄöÓ¤ÑZÞÝø�A“Qо·´ÛÜNÿüËÁwÿðM[ÏÚöuðÏ�¾%h´g†~#ü!Òu¿ O}áŸü×µ‡>>µ¿ñ—‹¢°±Õnô[¯‡ÞŽN mïl­Ì«e«hþ#—M¹Óu; Ëÿø ¿üâ™ñRþÌþ?ð�ÆŒïñ{â~§¨ÅñÃÄ>0ñ‰ü=ðÒÓIøp÷ãAÔäÖ¬5“ß\xx¼0.½¥Åö�fE¼ŽOž÷¿ü¿ö�ý�¾,~ØŸµ×…~þȇà'ħ‡Ä¾+ø¡ñü}{â¸�Lðo�µÝwÃú[ŒxŽçFÑô�Bcæé÷é2Ùj× hÁ=ÿિà §Ä^ðž“↟<§É¬ø‹ágŒ$¶»½“@Žö >_øk]±Ž+=J³½½±°ÕRkM#WÒï®àK­ YÏg}pòÿüóà…þ2þÒÿ»øyñÃÞ¼ÒüO¦ø‹XøÇã¯|QÒ>i^ ð†cÑ´ÉlõOI©^x›ÍºÕ.cÑt Wžt¼6Ù` ¿²_üïáGíñÿß³ßÅ?€Þ1ýžÒéí­nŸP·þ€è € ( €1¹óîçó­|1á‹Y£M_Å:ÂG½,l••ü‹HwÇ.«ªËÛi–Ì®É=Ôövw@þϳ÷Ž~;øêÛöªý©­¾Ñ¨\y7 >]Ã"iÑÒCs¤jÚMÎï³ÛÛïZ>“r²\Ý\»kúãO}—¯xãÅ?uk»mÀ> ¼ÐWÄðh:u�ĺ�‹¯íõ�FÂ;mßP:431ß}¨_˜íUÓõ·ü±ÿ‚šÁC¾�[ö>ðo†ÿa¿„i¯Žÿ >üLø{¦þÓ>ðçŒbøM¥übÖà±ðO„”2ÛÝOãkºtˬZZx»ÃZfƒ6�¦ÜÝ\klQ§€~zÁf×þ [wð'àþ±ûv7ì¹¥øfïâƒÂá_„ ©Éãý/ÄsxC\›T·Wɨڿ†mtå[]hiÞ$Ô!}aü8ïö•X.PŽÿ‚ÄË,ÿ±WübY¤yeÙ ËÉ#³Èçþ§ìÚ2Îij¤çé@Ñ×íQ¢~ÎQÿÁ~#XØ[øP|±ýŽûákF–CJ]r?[]ü¾Òœ-¼AwãÉ<3-”âCy{¯Ý¤Ë-ÍÍøãŸü.m}ÿàŒ_ðT(nŒ‡ÃPøgö•þÄ,Ò]^_ÙfͼAJß»TÃÃòY%rà }3ÿÈKý˜?hx‘™£øói,�‡S*E7Ãß ¤2ø©k:…§î§¿Ôô?ŽÞ'Ó4ÍJf\¾¶Ólì,ã;þɧXÂ0¶é´û € ( €ÇSÕ´›/CÒ´ËM>€3ÿgø7¿áσþ*iŸ?k�Þ,ý«$ë?¾4ü9Ñ×ÃZ/Žt­ 5¯ ÞCq¡kWú�÷‡õ½^ÓçÓ_YÕ>Ûg¬©ÓcÓ@>0ø�ÿþk¿þhúWÅÿÛïã7Å?�Gˆ4itÿŠÿ|?âˆÚ7†¼§èºí¦§ðûÁ¾×~.Åu£§ˆ5ÍKD×5]øÇSyO…të[MO{íNæàóçþøQÿ #àÿüÿà�ö÷ü%_ð¨> üCøcÿ 7ö_öü$?ð‚øà†¶ÿ±´u�ìŸíOìÏ·fÿkjaóþÍöûÏ+í÷Å/ø7²Ïâ}ö�kðßöÂø…ð»öxÕ.m¼]gû?ê¾Ö¾ xoÁ¾©l/õ4ðgÚ¾%è:<6—×wÙï¨x~]OJ¶ŸeÖ§®:³Jûeð/ö.øû?þ˃öEðv‹}wðªûž+ð·ŠÛX¼x‡Æ£Ç–wÖ~4Ö|CªØÅdeÕµèu+¨Z[8làÓl–ËLÒ­ì´í:ÊÞÌ/Øïþ�wûþÓžøÝð×öÅø…ð×EÕ5‹Í_àµ÷‚¥Òׯ¶~×tMMñ—Š4/ˆ¶ºt+�f=b «¯‡-½ÓÐÚØéòN.-À=£öÿ‚NGûþÑþ>Kñá>*Eñ«Cñ.‰'ƒdøV<‡ãñެ(ÁŸFø·âŸŠÿ±í…ñ3öA_¸õŸxfËÄ2ZØYê÷¯w«èþñWƒ¼à-n×ÂAŒO§øGX·Öâ�âX†±ªZÁjöoü«þ /ð‡öÔüMñ x×^øÕñׯ6z6µñKĺT 6:%õü�þ›á� .§â ô©5‹Û[K�UÔ¼G®êºœ¶±$wV6oqg8;û&Á(á—n�Žÿ¶—ü/¿øNáuÍñ†_øV¿ð«áÿ„gþÇÄ�/âßøLácxƒûgûû3û#?ðŠé_Ú¾ö†4ß+ìR€·�ü‡þköŸøûHÂûÿ…eÿ _Gð†“ÿoü*ßøLÿá%ÿ„Sâ¯ãÏ´ÂEÿ ŸØÿoþÕþÊò¿°µO²ùnón|ß±Äû@P@'ñïãß�gŸÝø×Æ—{ä6×þµ–1¬x£Xï‹MÓ£}Û#L¬šŽ£"]2ÔùÓo•­í®€>"øðÇ?´OŽíjÚ’ÓÌŽO*ëá7›¨¤>‹£¬ŸiÒµ-CK¹Ï—§G¹nôÍ:íëZºc¯k‚Hä¶·ºýI € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<_âßìãû?ü|}_Ž~ü]“ÂÉ©Gá©>#øÞ2}5“bÚºhí¯éš�Ó×Sm/Mkåµ1 £ahfßäE°Ù!†+x¢‚Ò �!†•R8¢�BGh *""…EPT ’€ ( € ( € (ž<|wð7ì÷àKÏxÖï'÷–¾ðý¬‘�cÄúÇ–^/L‰ó�ÒKëéÚé¶»®'$˜¡œá¿€ŸÄÖv— ©´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ãÏÚàïí#ñ Æzfµð{ãçü*Ï ÚøbËK¾ðÿÙ.®>ٮêëWw:Îø"thÓïtˤîÙÙ  xWü3íÑÿG�ÿ”ÝGÿŒPÿ ÅûtÑãÿå7QÿãÃ1~ÝôxÿùMÔøÅðÌ_·Gý?þSuþ1@ü3íÑÿG�ÿ”ÝGÿŒPÿ ÅûtÑãÿå7QÿãÃ1~ÝôxÿùMÔøÅðÌ_·Gý?þSuþ1@ü3íÑÿG�ÿ”ÝGÿŒPÿ ÅûtÑãÿå7Qÿãµð÷öñn§ñ/Jø“ûOüVoŽSxJÒ(üáû«k±£Áx·/r.5h/d\YÚͲâ=.TƒQ¼ò¤Õ%šÖÐY]~�P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/ListItemAnatomyDetailed.jpg000066400000000000000000002002441527064444300226220ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' Cÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀC'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( €  5M0Ý}ˆj6÷y�ì‚òßí^`)ö0˼JìÝ�ž1š¿@ö¡âÿ é^­®j¾'ðö™¢èeîµ®êú†·¦Ùiz.�¦Â÷Ž­«j71ZiÚe…º<÷·÷“Akk <³Êˆ¥”‡€¾!ø â§…´Ïü2ñ¯…>!x3ZY›Iñg‚¼A¥x£Ãº�·šKk‘e¬è·Wº}ÃÚÝE5­Ôq\4–×1Ko:Ç4nŠØP@PsM ¼O=ıÁ ct“M"Ekýç‘Ê¢ŽG,@üè;[ËKØÌÖwV÷p†(eµž+ˆÃ¨�¼Lë¸RW9�=EX € ( € ( € ( € ( € ( € ( € ( ..m¬â3ÝÜAk• 5ıÁ–;T$d@X�É8h;þþƒš?þ ì¿øýI¹¢Lâ8u�.Y%c‹P´‘Ûj–l"LXíU,p8PIÀ€9‡?þüaÒµ wá/į|NÑ4�^ï@Õ5‡þ.ÐÕb¿ø*WÀ�ÛGÂC¤xöÿÀ?æ[Uû<:��¾jú.�ñÃè£lF-oÂ6þŸU;‘¯'ñN¤ÓüÒ<Ò€N_·í%¥| ý…¾:~Ñ^Öau´ø?wðëZ¶“Ýx—â �§‡>jÍ•w†oøŸ@¼>Gdž3½ñ|ßð�\j—3iþ‚{kùµÖ4ú7†4h®õ¥‚ÂËHºÔæyo@<·OÿƒŒ¿àž·¾,�ןt�ïÔø÷Pøm£Iá8¡iü¦Ô$³Òüm©xãìqÇ‹—Hü%ÿ�p–Op ÷×í+ÿý™¿eß� ÿhïëºÿŒþ|^Öt�À~"ø_¥Yx©u‡Ö¼;¬x£O¾òîµm!°}3D½Y™æû]­èK;›8¦,é§~Ñu?Ù–ÚÆÙ5ñð²ãà“|~Ž94ØÅð‚'‚ÇåHÍl5Ïì#û?ûHÃöì[ý´!ó¨Ç¿c¿Ûûàí½ðÿÇß~Ïâ½Â? u£¡ø³Pø�¤é¾[“E‹Äß#Öõ[DÒ­4É|ë»û«›híÄr´Š±£HÀüBÿƒ‡¿àžžñ…ß…4©þ4|L³±½{üið÷À<¾w‹åšâÎçÆ>1ðv¹¨YG0h’öÃ@¸·»Ûö‹º³xn½ý³?j�ßµÿüWö±øµðƶþ2𜿠µ]#RV´¼Òµ¿kö·Ú ÅI¡êPÛßé:µ¤7vÓyrÄÖ·¶³Ûê]Õþ›uk{8�ÿÁ¸_ò�Í{þÎ/â7þ¢Ÿ(÷Ö€ ( € ( € ( € ( € ( € ( € ( €>Iý·¿d¯~ÛŸ³Ï‰ÿg¯ø»Zð>�â}_ÂÚ¼þ"Ð,luNÖO kÖZõ¼1Zê,¶®—rÙ-¼Ìì#vdË(ø�ÿ‚µÿÁ4¼ÿåÖ~éž ø›â¯‰üYÓ> _êø£GÒ4—ÒÁ·^·¶ŽÍt§u�oG‰'iÌäÍ´B<ïzýàýŸà…ÿeíµV¯ñÏâoŒ4߇ñ޵ÿÏáŸZZë-÷ÃÝjiiy§Þ[ê1¹ÒµKák%´öó´ñÂð–2 _ðN¯Úƒþ �û~ʵ'ÆoÙÔþÓ—Ã|Cømsñfûâf�á½SÆ­¨øþþçÂÞÒ|-¦è×ú.‘q¢hÏ%Ê\Ëqäj¡.%¹¾¾Õ[ÅÆ_ðIïø-Ä>2kÿÿmO‹~)7Å�kៀ¾ [ÙxWÂwVZ'‹¼E⛽òãXŸL‹Ã3XX][CŽk’5R‘A3Çj1(—ìçÿ+*üSÿ±ÇãŸþ©�Z€?wÿl¿ø*÷ìyûxŠ|Yñ_ˆ}»WÐ4ɪ[O Ö™c­kÖz•íŒÐêPX¶�4Wnwö2ÿ‚¨~È_·>±}áƒþ-×t?ˆ–62j§á¯Ä�ßÂÞ1¾Ò ŒIw¨h‘ÚjšÞƒâ¬c©A¡kš…ö� »ÛXl+§ý € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ù´ÿƒšÿäÓ>ÙÄÁÿª×ÇtÌÁ·?´¥î­ðËãìuã9®mÒµ1$Ñx'Ɖgã &ÞÎP�¯†ünmµ{‚ñ«=ßÄ<‚Ê (gü•ûJÞØøàßìoàÙ®nõÿ‰Z“ü[øƒ¦é¢I¯Oƒ|%5Þ�à½6æÚ í5†¹â˜µÍuò€Û\|>µœÈ± ÝÿÁ¶zΑáÏØoö�ñˆ5M;CÐtÚ+Śη­ê÷¶Ún“£é_Â…×Ú–©ªj7’Cia§iöPOw{{u,VÖ¶ÑK<ò$Hï@ùã?ø8oþ ãá/ÜøFÊ÷ã'Ž4û;û› üyàχÚuÇ‚‹ZËå=Õ¬Þ ñ_‡|K¨XHêæÚóOðÅÌ7Q¨žÜÉo$2¸Ý~1ÿ‚‰þË~ý’®ÿm�/Æw¿¾Ù\h67:·€4Ѫx‚ßR×üC¤øb-"ûÚµÖ‡}¤ë:n«¬Ù.³£ë-§jZ|g’ÙÑíÖPç/þ =ÿ¢øƒ'ÆMáÿí©ñoâoÅ&ø±­|3ðÁK{/ øNêËDñwˆ¼Sw¢Þ\ké‘xfk £«hqÍrFªR(&xíC¦%ýýý³¿àª?²ì-­Xx;ãмC­üEÔ4ë}e>|7Ðcñ?‹lôk³8´Õ5†½Ôt?hPÞ4 ö+]gÄ6Z�ô.—–v3XnºPCö;ÿ‚Â~Æ?¶·�àøaðç_ñŸ‚>&ê6×7Z�>+ørÇÃz¿‰â°µš÷R�ÃÚŽ…®ø«Ã�öŸgo-ÜÚH×ãÕæ³ŠâòÊÂêÒÎú{PÔš( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÖþþ( € ü9ÿƒ€ÿgOø]?°~±ñ J±ûW‹?g?é?ìÞ÷ÞKàýA‡…Oƒ‘ƒ�¾\ �¿µoíÏuñ‹þ÷û þÎÚf£6§ãûßëžñö�bïw~Ú'ìçoiáÿh·pG¾yOˆtü8Ö­Uâiî5/Ê‘y¢&y@?i?ÙþÛöZÿ‚|Bø0ÃàÙ§N´ñ;[ì0ÝxçXÖôŸxöþ&L†ŠÿÆz¾»w Ý!Í™núüŸýŠc߈?¶ïüßÇ_þë:v™ãý/ö³ñÄiºÕëéº/‹n¼1á�A?…5-MVHôÿí -^æëJº»‰´õ×ì4ˆõ¬,ãS°ó‹ÿŽŸ´?ìŸû(è±ÿüKþ cŽ¿f�ÜéúGü'^“^øs=½Ô^ ƒT±Õæø¹à8¼[àû¿\êŠ��WBñ…/¼Yf[NÔ¯/R÷S¸¿ê¿à¦^2ý˜|oÿsý�õ/ØÿAñ„>ØþÓº¦Ÿ¥xź®·­x�ÀÞ"›ÂŸ5ŸøoVÔ5íwÄ×’Ìšþ­}©Û4åþ�5†¥ks§¼V³Goî/ƒ5-=ÿà…ö7©{jövÿðLJÞ{”ž6‚+‹ÙžöÆö‘XªÍi{o=œñ¾+˜e�ÔJ…ñ¯þÉãO�¿ÿà˜?ðP_~Ò««\| ‹Æ1èßô½ïU±×|G¡ø«ÀÚ…“ÂZ5Ö‰©èšŒZŸŒ5 fËÃ>V³¤À÷´qßjv uw¯Ù»ãF³ã/€¿¼%ûÿÁ4}köoñ�Ï‹,ÿ‚mj¯ÿßÿ‚ÊéMs+iÐ|'ø¨Ah[0Å{wª|V¶º¹�†[ˆ,­"™†7¥¬³å¦ÐÞßø7 þQù¯ÙÅüFÿÔSáÅ~úÐ@P@P@P@P@P@P@P@ÈOüÿ#gìgÿbïÇ/ý9|, é¯âgüšOÄû7Oÿê´¿ ç3þ ›ð燼Yð·öÉÐüS èÞ%Ñ.ücðYî´}K±Ö4»—¶Ó<}sn×~£ŤÍoqSÂÒBÆ)£ŽXöº+PŠÿÁ´^ð—‰þ,~ÕW^$ð¿‡|Csáÿ ü*Ôt �sDÓuiô=A|Iã ÿH–þÚâM6ñd··‘n¬Ú •à…„�¢B ìçÿ+*üSÿ±ÇãŸþ©�Z€><ý‘|aûOø¿þ SûX|iøcû(øSö¾øÙ¤x«â†¡wá�‰¾0ðÞ†Ÿ ã¼øŽ4TñŽ|S¬é6³j^²µ¶ð6‘ö™´òK[8`…àtûWý•ট¿à¢_³ßí›ì  þÍ×ñßÃ~&ÃðËâŸÂŸìŸèúW‹e�Æþ%Ö ·ñð¾—PñÃíRóÂ~"‹Oµ™õ}Æ%x.onnàû € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ù´ÿƒšÿäÓ>ÙÄÁÿª×ÇtñGÄØ›þ ÏûoÁ7ÿn=5[Iø;ûI|ø3á_Œ²Â Zlpü2ðO�>$Ü^Å"ÛøfÿÁ,ã•¡“VñN…«Ý7š`»’€3þÛËÿý¬¿à¨_·¾±š—€Ÿ³ŸÇü{¤f²{«ÿ„¾7ð'û‹8'cð—â¿êö± Jñ_Š´­@H’Mo+€|ÅðÆ~+ðwü?ö¿�ÂÓßY¯‹ÿlŸ ø3Ä׺|ío-¿…5o|"¹Õ žT"O°ëiÖ^Ô BòÏWšÎpÖ·£€}uû·í¿¢~Ä>ø}ð›þ Eð?ã×ÁŠ/ˆ¯uψÞ)ø�ðêËWø¿³¬jö—º�‰muOXjöóéJ­áÝ*Þx-.tKMÑl– âûC}·ÿ8ý‹j�Ù»Fý¦~~×_LJ>øöïáÇ‹|áÏø‹á×ÄMâ­_ÙøŽH´=Ä>'µŠúïO>’òÿP±¶óχ4“ �%¢¬@ÿÁ´^ð—‰þ,~ÕW^$ð¿‡|Csáÿ ü*Ôt �sDÓuiô=A|Iã ÿH–þÚâM6ñd··‘n¬Ú •à…„�¢B õûCþÑŸ²JÁL>3Ôï<;sq§Åªø’ÂÞëBÕm$K[©í´t¼¼¶gÔ{€ï€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿ×þþ( € ä¼à�|Lð'�>ø¶Ìjñÿ„üEà¿Ø�¸¼Ð|Q¤^hš½¯Ì¬ Ï§ß\F +X8ù€?”?Ùþ åý¡þ~Õþ'|fø‘ð Å_þüF´ñæ¡¢øSÄ/üY­¿…žMgÂvãÃÚçÃ-ûuižOÚ\xŸÈ�GŒpͪ46ö×`ÑßíÉð/Å¿´Ïì•ñÓà7€õi>/ø�à¹|9 ê^.»Ôì<7i|ú–Ÿx%Õï4m#^ÔàµZJ¥ì´{ù¼Æ@ ÚYÔòsàßü‹Ç�Á6Ôµ-Yuíám­Î»ñUð߈®nnüO£ø;Vñ?Âí#Zø{'ŠEÄñj³éÞ6k]&ÿQ½Ô-4ýyd½‡T�öFÿ‚-~ÔŸÿe_ø(Àßx÷à¥âßÚ³À? <+ðóQð׊~"^xwFÔ<¨xîïU›Æwz§ÂÍRÓ¬î#ñFžº|š‘â)åxoͽªÇ Îúyÿ™ý‹~)~Áÿ²î§ðKâö¿àøª÷â¿‹…x÷0®”öÉ–ÍäÎòÇéÍP@P@P@P@P@P@P@øKÿ”ÿ‚`ü|ÿ‚‡ëŸ5?‚¾.øAáx>i_ì|BŸuÿè³^Mã ÏÜi�¢¯„üãd¸Žðåð¾7ϧ4M-¨·K�ò´°~0ð.¯â�Þ(øggq§E¯k 5¿Ú]ÝMršDz¾¥á ­ ‹‰â´žñ4ä¼�e–hì&¹[`Ζ’J,ù_ÿmÿ‚qüoÿ‚yxgã΋ñ§Å? ¼OuñG]ð©áù>ë~.Ö­ìíü-§ø¦ÓPMa¼WàIo4Òk–­f¶Qj "Gpg’Ý–5”âß�_ðFÛsö9ý®ÅÙ[ö�øi¡ü×~!hSxßB×n|M¤xß_ø9Œí5ýWÀšŸ‡ãøwã jÚµ¾†—z6›­C®èRÏ{'Ûí¤ðÊ^Í Òß ?à—¼ ÿuñ§íõ«ø¿àõÏÁïëÿ5[ éÞ ñ¤ßâ·ñ‡Ãûï i‰u£Üü?´ðºM£r“_,^1�"²%¼·S�nÀGí7ÿŽý¥<'ûXø—öÔÿ‚k|zð§Á‰^>ŸYÔ¼{à�C=§‡nu]|ÚÝø¢m"â? xëD×´¿kVÿð‘jÞñ�†?³,ÉàkzÔ~ ²ñÏ€<;¦øKĆ}NÇÃ×¾#×¼9qâ}>ÚXü<×F{­#P»ÒCÙy/ì…ÿê×?eÿø&ïÄoÙ"=_ÁWÿ~+øãL^6ñv›w­j~%øcUðž…rº•ׇ­¼Eÿ惠GáM{§ðá¿xô«íBßH3]-•xwì'ÿ�×¾þÁÿ´Oì]ûYk¼[añÏâ¯â¸u_„ú¿ˆux[~Ï:¾¥®�mr[Ý Ä¾Óõ«‰§¾º³Kï„Þ<×þ]êr\O{siðëÆw°Å«ÜÞê¶óÁ¨\Ízà­ðLÏø'�Ÿìð¯ÄºµñPø­ñ_âV§¥ë?|gp·¶ú: è´ øZÇPº¼½‹EÑF­ªË&£}2ê棨Ýjºu¹²ÒtðË�_ðFÛsö9ý®ÅÙ[ö�øi¡ü×~!hSxßB×n|M¤xß_ø9Œí5ýWÀšŸ‡ãøwã jÚµ¾†—z6›­C®èRÏ{'Ûí¤ðÊ^Í ÷Æ/ø#÷í¥ðÇöÝñßí{ÿóý¢~|4¹ø¯â/ø‡ÄV?’þCÃ7?µd×¼q¡®ž¿¾!x_Æ~ ¿×Ö]fÂÛQÓtËý#:e…µ�åÎ�¿(9¯ÿÁ?m?þÚŸ³WígãïÚoá·Æ­sÁ~6ø-ñ㯈¼q{â k÷ú÷ÃïŠ'Äš¿‡>ø3Ã5 iÞÒü ¦øwGðµ�ֳᨵÇ­jZg†¬u¡·þŸ¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € üîñ·ü<þ? ÿ “þŸøIõÿøCÿ´¿²¿´áþÕºÿ„íþgï>Ûý“öOµyŸ?Ÿænù³@Çüm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQè–¥{ÿIÓ´ûí@Yü$ÔM�¥Åߨ4Øt[�Bóìñ4¿f±·y`Yîæc·‡ÎŒË+,a�e ¥¿eŸÚ›ÃŸ´O‡.m/-—Âß<*Ÿeñß�.¼Û{«;«y~É>­¤ÁvVî]kÀaš•ï´;æþËÔÉf²½Ô€>¯ € ( € ( € ( € ( € (¿h?ø_ð†iŸðÎßðŒÂmÿ =—ö§ü%ŸfþÎÿ„[û+Zûo“ö¯Ýý·û[ûËÇÏä}§.êøóþ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿå€9�üvýºg©tOüzð�ƒ|Yð�uXtß�A`úž“m{ˆ`¿7V’©°‘feRßBÚUåÚÇ¥]ÝXO¨Y\P釀¼yá?‰¾Ѽoà�f×^ðÞ»j·Vö­ï¶k[¨[YßÙÌÚúÆå#¹´¹ŽH'�XP_@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ñçíÿ ›ÿ ž™ÿ íÿ ûþŸøF,¿µ?á,ûö�ü%?Úº×Û|Ÿµ~óì_Ù?Øž^>O?í8ù·P…ÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£Ð>ý«¾8|ø£¦|:ý³ômDÑ® € ( € ( € ( € ( € ( € ( € ( €(jš^›®i·ú6³aiªé:¥¥ÆŸ©iº…¼Wv7ö7q476—vÓ$�Ïoq ´RÅ"2:1VR ù+â ø÷þ ßñçâÃûm[Æ_²¿�5há3ðh–K»ï_]H�Euk,îDOdƒEÖgtƒU�!ðωfKôÑ5©À?Rü ã¿ |Kð¦�ãoë6º÷†õëU»Óõ V8#%&¶¹…ñ5�õœÊö×Ö7+Õ�ÔRÛÜF’Æé@uP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ywƃþøãà}OÀ^<Óö—~¾u�ä;#Õ4-V4u³Ö´[¶ŽCg¨Ù™kmh.`’{+Ø®lnnm¥üîøCñwDZ��l?gÚ3P“Rø[©ÈÑ| ø»2J4ë-;ÍHàÒõK‰^Cm£Ûa·»´¸žK�\ɼ·^ºÓ¯ì€?Wã’9cIbt’)QdŽHØ€ ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € üõý©¿e¯ÞøŽÛöŽýœn_Âß<,ßÚ:†Ÿ¦ùpZüAµ·‹mÄ3[°[Iµé­ÚM Úµ—‰l˜éš�3{ŠõÏÙgö¥ðçíá»›k«dð¿Å/ /Ù|wà[¯6 «+¨$û$ú¶•Þ.æÑf»#”5î‰zßÙš¦]¬¯5«¨ € ( € ( € ( € ( € ( € ( € (  ý[IÓ5í3PÑu­>ÏVÒ5[;�?SÓ5 x®ìoìnâhnm.í¦I"žÞx�ã–)‘ш äíü•ñ'‡<{ÿíø�qãÏ[jþ3ý•|i«Cÿ „DÒ]ßøP»‘ ŠæÖk‰1±�hÚÅÃ-¾³n�økēǨ¦‹®Jú�àoøWâO…toø+Yµ×¼7¯Z-Þ�¨Ú6U”’²ÛÜDÁf´¾´™^ÚúÆå"º²ºŠ[k˜’hݬ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ,øÇðsÀßü ©ø Ǻ`½Ó/G�c}Èõ]U�$KMkE»hä6š…¡‘€%^ÞêÝæ±¾‚æÆææÞPσßüwûxöÃöný£ïäÔ>ê2¾|^™d]6×M¤VÚ^©s4’›}ÜË µÍ½ÄÏs໩"†in¼'u§j6«èé*$‘ºÉНˆÁÑÑÆåteʲ²�ÊÊpAÈÈ4ê( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € (ó×ö¥ý–¼Iwâ;Ú?öp¸ |tð³ÿhê:vš"‚×â ¬í¸†kvÿD›]šÐ5¤ð]¡³ñ5“6›¨ƒ9·ž€={öZý©|7ûExnâÞâÝ'ðÀ•ï5‡Ú•ã¬\[I;�ÄK² 'UžD¶×íc‡Ã¾!šV\œõKÁ^5ð¿Ä_ hÞ3ðf³i¯xk_´KÝ3S³rc–6%$ŠXÛlÖ·–³$–×¶W)Ý•ÜSZÝCñI€u4P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@äÿþ xã¿�µ/øïNV`ϦêVâ4Õ¼=«G¥¦µ¢Ý:?Ù¯­‹²°e’ÚòÙæ±½‚âÎyàpϯƒÖlõÿ ëöi}¥ê–.^árUÑÑ‚Ëmum*Émyer‘]Ù]Å5­Ü0ÜBñ(M@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Gñ¯à§�¾=xPð'Ž´ÿ´Z\n¸Òµ[u�5j饮³£]:±‚î Åe‰ƒ[_[<¶W±Mk4‘°À_þ5xëöKñå�ìÉûL_›�\·‘ðƒâõÁ”iM¤‰V -/T½¸g0èñ†Ð©ÚçÁ·OŸ,Þ—MÔl?VƒÊC+ÊÊA È Ž#�Gr(h € ( € ( € ( € ( € ( € ( € ( € ( ÿÐþþ( € ( € ( € ( € ( € ( € ( € dŽ"ŽI%cFv©¥Ž3�œ2*üÞý¨¿gMn[~Ò³t·>øßᙣ«ivÁ —Ä H£Ût²Úï6Óë“Ú‡¶»µ¹ˆÚxžÍ�•ðûh·¸”ÛfOÚË¿´†eŽâÑü5ñ+Ãh¶Þ8ðL¹Ž{¸ŸìÒêz\wR-Üú-ÅÒ´x•ZïIºoìÍH™µÝøÓÿÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPV¸¾ñ6�©ø{Ä:LZ·¬Ù\iÚ®•¨ÚÁsecuŠ{k˜%fI#‘‚È8e*ÁY@?(nׯßðOˆSkÞ‹\ñ¯ì�ã�b3­h29ºÕ>j—ޱ$ÖÒI+$w‘ H¬/¦xmUÌ;ŠM æÚúÕ¥³¼Š[y�há/�¿¼kû+øÖÓöhý¥¯e»ðŒ„Að‹âÌÛ†Ÿ&�%[{/T»¸•¶hñî†Ú7º¸k¯]4zeü“xz]:ÿOýJå›Ê³�@ …Œ‚ ‚$ ‚9Ï4¿ÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿ㔥o:\“ `¯»À ò³)ÈŽªqƒÓÒ€& € ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáèà_ÚcöhñøŽÚ#öx™ü9ñŸÃŒu [JÓÂGkãÛX£Åʵ©Ú}n{Uk{«K€Ö¾%µciv>ÝäË8¯~Í´¿‡?h/ Ì­xsâ7‡m¼m૆xî¬.£³K©é‘\í¹ŸE¸¹?Þ«]iWMý›©~ôZÜ߀}9@P@P@P@P@P@P@P@ekš�â]Rðÿˆ4Û=cDÖ,çÓõM/P�.lï¬îPÇ5½Ä2®Ž§ýål:ê¥@?,ïìûOý; ‚2äz{‚(h € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè �?i٣ćÄ�þÑ?³¼ÏáÏŒÞvÔ5m#NXãµñí¬i‹¥kS‹k�n{PÖ÷vwm|MjM­ÐþÐÍpì³Gí/á¿Ú Ãs+Bžø‹áÄ[x*áž;­>ê7û4º–›Æ.gÑn.AŒ7\éwMý�¨âaoqvôݲŠ&’8£^WTAõf ž¿�d?‰¼9m—Ä$mœm}VÁ>˜3ƒŸÃ?LP»m[J½!lõ=>ìž‚ÚòÚr~‚)ÿŸ©  ( € ( € ( € ( € ( € ( € É×t-Äú6§áïé–zƉ¬Yͧêš^¡ \YÞÙÜ!I`ž' ¬¬§ ãr8FUÕY@?-/,üsÿùñÛêºZjþ4ý•üm¬'öŽ�½îõ?jwld�¤;#½‰Çiu#Eiâ{(SMÔdƒY¶²¾PÔ/ x§ÃÞ6ðö“â¿ j֚燵ËHï´½RÆO2ÞæÞLƒÁÛ$3Ã"¼V³¤W6—1Ëms WI€oÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P‘üjø-à¯ŽÞ ½ð_Œì÷Fû®tmfÝ#·‡5a$®—;©Ù"geͳŸ³_Û-nQãq´â/‚Ÿ|mû4xÞÓöjý¤ï7è.V…?nO쫽+Ìön£}pNÝ(f;[yîf7>º+¥ênÚ3XÞØ~œ‚ƒÈ#¡£¯_¯ç@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €>ý¥ÿf�ÂIíû;LþøËáÇmCXÑôõHí|{kbèC‹k�nâØ5½å•µ¯‰­I¶¹Ú>L³€z/À�ÚçÀß<5ö«ÿÏÄí²ñ�]dþÑ·Ô#&/4‹yÊÏq£ÜÎŒ�î Ë¥\ŸìýRE”[Ü]€lkÿ5ýEž-!SE´9PɲâúEé—žDòá$`�i$d�'|`1¼¿¾Ô$ó¯ï.¯eç÷·WÜ?=pÒ»‘øÀ`©@u:G�|O¢2ý‹Wº0®?ÑnœÝÚ•þè†ãÌXÁÆ B"F^(Û¼/ñsMÔš;=z$ÒnÛj-Ú36�3ž>vcæYzy­, ½Âd+{²²†RXVR ²‘�A‚8#‘šZ( € ( € ( € ( € ( € (  �@Ñ|S¢ê~ñ™g¬èzÍœÚ~©¥ß³Ú^ÙÜ&Éaš&à‚U×l‘:¤±2Ȉêùksmã¯ø'ÏŽßPÓÓXñ¯ì¯ãma~Ûe¹¯5?ê—l]ʤwñFª–÷,üScX޼ͭ¥â€~¡ø_Åñ§‡ôŸxWV³×:|'ñ¡âI~6ü.¸}?âuœòjZÅ•¬qÅ‹�ô“öUÛnú”°†Š{FO#Xƒ÷2(¼Xžà¹ø3ñ›Fø³£IûµÒ<]¤(‹Äž”²Oi:7’÷–i.&›Mš`P}”Çìw˜�C5дP@P©øâ%χ¦‹KÕd’ãC‘‚#6é%ÒËõ�ugµÉÌÖÃ;Fe€o QE,sGкK¨’Å$l$ŽE ŽŒ¹VGRXAÍ>€ ËÖµk] K¼ÕoIöqWårBE y*<É¥tŠ<�»œ‚hä�x×^ñ%Ä’]^M¡cäéÖÒ¼v�ÇŸ•YoÚ$Å4ûœ±`¾T{R€9*( € ( € ( € ( € (  ý[IÓuÝ6÷GÖ,­õ/Q·’ÖúÆê1,6òŒÛÑu­+ÄZU޹¢_[êZV§n—V7¶¯¾á~„:0hå†@²Á2I È’£¢€jP@úV¿¬è“¥Æ—¨ÝZ:v$¬`�ášÝ÷Á2±$l½Æõw�ü[‹t�µ2$:…£‹}BÞ2v,…wG�økãÛ�Ñu‡WÔà„Íkvc7°F@•%UÂ}ª«nEhw9Ex¤wõêò/üX±Ñn¥Ó´‹UÕo fŽâáå1ØÁ*’%( —2# K°ÅŸ”JìP޳ø×«¬ÃûCHÓf·,7-›\ÛL«žHiæºG`2@*��—­{ž�â3ĺzj:dÅâ-åÍ€-Å´ÀÐ\F2À ‚¥£u!ãfR€6ÉÇ'€9$ö —�âý{÷Ëc}3@ln$y¬§\ò¯9T$d b1ʹùd4õ¿‡µ»_izµ +Ê2!žÞxÉIàr:˜äR°¾b�(WP umZÃD°ŸRÔ§[{[p 9™™Ž(�|ÒK#|¨‹’O' ¤Ð„j_ïÌì4}"Î;`p¯©4ÓÏ Ï ÑÚÏo$�àNÿ–�ÎÐ Ï üaµ¾¸ŽÏÄqé¦Vš…³»Y«±ÀK¾[xó�ç fU'2‘^Eö°A‚ AÈ ò#‚èGõ cÅþ&ƒÂº4Ú”ˆ&�˜[ØÛ�=ÜŠÅ‚"�Q嘌- ©ÞÈäÍgĺ޿;Ï©ê†bÉn$hí!8Hm•„Q€ÝØi Èò6Z€0¨Hå–C$‘H§*ñ»#©õ ¥XŒð~˜þ gø{ñPŠþÛD×®žòÎòD·µ½¹m÷6wBB’ÎÄ´ÖÒ¹“1g…™_ÍXUÑ@>� € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (À¾$|D¾¶½ŸÃú ÃZ‹cåê:„,ÃNGÏkm À°d,Ó&ÙÌá£F‰bs8„Í<÷e¸šYäbKI4�+±=Iw,Äžä“šŠ€ ( € ( € óï‰_ |7ñKÃwñ¿÷¦Ó58U~ߣßì+íœ��d¸·cäÝØ¥qÐæï†Ÿ¼IðƒÄ°|øË?úVxÞf°]Øò¬í.îå?ñä~X-ç™üí"|i÷ùµû<Ö iP@E4°8’d†E ¬‘;FêGBH`AäúpTÛ¾|E¾7öÚ½r÷p]ºÁa;o¹‚å°±[ÜJÄ4ðÎØŽ9$/4s:)v…²€CP@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ÝcUµÑ4ËÝVñ¶ÛÙBÒ°4��±B�¼É¥dŠ<àoq’&€>.Öµ‹Í{SºÕ/Ÿ|÷RÚ Ù Cˆ ˆ»)„AÔãsvf  ªùSã7Á­eu˜þ/|!‘´ŸˆšC½GN´UX` € ( € ( € ( € ( € (  í_HÓ5í2ûFÖlmõ-/R·’ÖúÆê1$H0ÈêpA Ž¥dŠEI#e‘U”â_þɾ(ó#þÐñ'ÀÏê:|×¾¾¸=º*]Æ«ò±1Ûk¶±l+Q�>Üѵ�/Ä:]Ž·¢_[êZV¥n—V7Ö² ¸†NŒ§ª²°hå‰ÂË ªðʉ,nЧ@{WÁI\kÌ Ÿ.M6)]sÁxn‘#$w*³Êí¸úÐÑÔñ÷Ä]N}OÅÚ¹•ØÇcpÚm´dåbŠÏ÷LvN&�¿Û•°HÀP"€$†YmåŠx]¢šX¤C‡ŽXØ1 €=Oá§=§Š—OVo³êÖ·K~_6Ò/!›ß�bš59û³¾s‘@ExšW‡Ã~ š2VH´MVT`pUã°�”‚90ý(â*( €>“ø++¶…ªÄI)­½= ¶–áñè–§Žù4ÌüjÔç}OJÑÃm—ö‹(<=ÅÌóÛ©aÜól<àO HP €>µø]©Í©xBÌ\3I&Ÿ<úh‘ŽY¢·Ù%¸?õÊÞx ^¿,C$œšá¾7ÊÿñM ŸíYY{3�ìõRFq”Vp¼q½¹çàtP@ ¬ÊÁ”•e!•�ÁV ‚0A�Aü±@y@æH!‘¾ô‘Fí�V@ÇÓ¹ôü¨Z( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( …5)^}GPšBZI¯n¥v'%žIäv$œ’KI'óÍR € ( € ( € (Ï>&|4ðßÅ? ÏáïÁ†æÒõHQ>ߣ_ìÚ—–ŽØÊœºµcäÝØ¤Ãäˆç/†_üIð“İ|øÍ>-ÆÈ|ãy�þÁ}`_ʳµ»¼›Ù¶ [™ßÎÓ&ÙÚ†!KÚP�ÊðKÑ’²C"K‚¯RbøPÞ”Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÑ­²�3Ãð¹ÔêwªÞ]Ï’6:€És##¢ãjÐ�P@|¹ñgàŽµsâkŠ.àðÿÄK;¸[R¶i×Lñ ºÅq=Þà`>K¨Ç25[E�H ò£ÎôÕ—Û>Çiý¢mŽ¡öh>Ül„¢ÌÞyIö“h'-0¶3ïòÌÒˆ¶ pÆ€,Ð@wN¿¸Ó/í5V)qeqÄG±hœ6Öé”p H¹Ã#8Ðܰê66z…¹Ì¶°]Ež¢;ˆ–UÑ€`v`AèhÝyÅÛ)nü"e‰K ?R´½”($ˆ¼»›6l œ+]£1誎Í|¯@P@P@P@P@P@fêú>™¯é—Ú.µco©iZ•¼–·Ö7Q‰ ¸‚Aó#¯pñÈŒ²E"¤±:Hˆêó¿ÂŸ…9øOã­kIÑõ›}Gàî¥o6§ig©Îòêºf«+mŠÎÊ%ÆÉÓí—œYßÙ,/$CQE}5@{ŸÁ;)Mæ·©"í­ì•ˆ8ye—ÏuSИ’.3•Ç×u} @+|TðíÆ•âõE�ŽŸ¬¿Ú"˜V;̓íVò7iEk˜ù£— ¸Å.Ð0  MH½×u+].Â3%ÅÌ�sŒ¤1g÷·á†ËÈÞƒjåÙ€>Ú±´ŽÂÊÎÆù6V¶ö‘g¯—oB™÷Ú‚€>`ø·e-·‹æ¹u>V¡ggedfGVVV*ÊÀ†VS‚¬`A�F0h´P@N|²šßÃwwr©T¿Ôåx3üpÁ 0±�f�¯XÏLPGÆOÜ\Çeâ+XÚU²„ØêLVÞkËmp@çËIfš9[i–"p¡™@>z Ç“H‘D�,²ºÇq©y$w!Qgf!UTIÀœPØþÐdð4û€ñ¼Ë»Õ—7-¼Å‘Á0D"�Š–Vh‹©Ú€<ëãm”ÒZh:‚)0ÛO}k;B=Ú[Kxà0µœdž»Gù€>z € ±ik5íÕµ�º..çŠÞ%¥™Äh¼yf¿,Pݱ Š8ã"4D÷¡Aüq@ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € øw^²—MÖµ[Ô¤–×÷Q�A“Îcƒ8%%Œ¬¨Øù‘ոȠ š( € ( € ( € 󿉿 ¼7ñSÃsø{Ä0muß6“«Bˆoôkò›RîÑÛ‘°îÕÛɼ‡÷rmuŠh9Ï‚ø•á? Ýøsâ&¥§êË£êaá{ëi¥¹¾¸Ð ]�É};ã0œ Ó¡˜}ºÚÝZ ¦Ú–è€Ï@të)u+û->-5íÔÈ'æšEMÇ!TÌz*©c€3@uÐ@†—ÿÛ_ý%hP@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè �þ$^µïŒõ¦-”·š+(ÇP‹ioN£ë2Êçý§>‚€8z( € ( € (ëO…—­yàÍ=]·=”×vDž»c¸yb_ø3Dƒý•´è”ðCuÖ×$Ö÷¼3C"†ŽX¤R’Fêxeu%Xw€>wñÁíJ‰'ðä±^Y»K+™„vù?ê–ivÁqó¶G’í²0g`KþŽèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN  }+áŠ/'A© ]"ØæÉ%Ä7“íî!†ÒI#wÿ®“Ľòp¢€>ŒÐ´;i°izte ‡,Îä§™ñæO;€¡¥��’UUHÐ,h‹@ôRöÆÏR¶–ÎþÚ»Y†Ù �‘¶9£)Ã#©WF‘ƒTÍçø?á¦2!ÕmPœýž ØÚþÈ7ÓÎÖv#ûÆ€;] Ã:'†áh´‹íÌ€ §bÒÝO·�%¸”¼…A$¬@¬HI(‹šÞ [Åž°ñnž,îÙ ¸�šK+ØÔ4–²°ÃeN�J‰áܻ©VI>|¾øMã YY-mmu(²vMm{m+ž7%ô–®­ŽY@u…vÆê£ÿ ÃÇ?ôÿÊž�ÿÉÔjÓáG�.%TšÂÚÅ ÁšëP³xÔz‘e-ܧè"oÃ#p½ø3ÁV>´‘c“íz�Ð_¶_2Ü«ÊÁoÌb·Có]žWýä‡ @ÚÐ/âxÄ»_T² r‹±/mÝ »U™ST\’‘β¢’Jª’Mrö¼#i0šEԯ°a åÚy9#"Ö WuõGvV6A"€=.!µ†;{h£‚QcŠQcŠ(ÔaR8Ó Š�íÍK@1ã_…cX»›VÐ&‚Öò጗–W£¶¸•¹yá•Ì3HrÒ£!ŽYÈZ&/¸Ë›áwŽˆ2¸ï.¥¥>à=ê·æõ ÿ°ñÏýÿò§£ÿòutúÁíbââ95ù¡Ó¬Ñ�’ y£¹½˜ÌhÑù–Іe2HËÐBÙÜ EÚZ[XZÁeg AkkC1Œ,q Â¨ÎI8噉fbY‹3@2««#ªº:•d`YXa•”ä à‚0G94æú—Â�ê´éæšÎw€ô`eð/È<1 Ôõ¢¾Ö 2DbVû-‚ºí“ìæ@¯,®cÄlÑÇ îà£@v_üxAÿmôt”¡@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè Š|]»þ¯nëý»ªÿß?mŸoþ;�éÚ€9Ú( € ( € (éïƒ;¿á¼ÏOíÛ½¿îý‹MÿÙ·t Z € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè �þ$Y5—Œõ¥+„¸š+ØÏ@ëwo®Ãé3J‡ý¤>¢€8z( € ( € (ëO…–MgàÍ=�v½ì×w¤»d¸x¢oø0Äãý–”è”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè øÑ¢3 3Ä¡!é—¬Ý]Ï=“¶:Ïs;¦çrÐ�P@P@PÝ:ÂãS¿´Ó­T½ÅíÄVñÁ¥p»›®/#c ŠXä@pXYC§XÙéöãYZÁkz˜íâX”ŸV!Ac݉'©  tP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè  ÝcJµÖôËÝ*ñw[ÞÂÑ1´m�ÑL�¼ÈeT–<äoA�@"€>.Ö´{ÍSºÒï“dö²ÜÙ4G˜§ˆŸ½ɇCÔgkue  ª( € ( €=ûá„™7x¦þ"¥–H4tqƒµ�ŽæøÐ2î¶€ñ¹vÚU¢z÷ª( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè €8_x&×ŶA�¥¶¯h�öÆk.KK� ³[ÈÄ•` ÛÈÆHÖ9@>OÔ´Ëí"òk FÚ[K¸£�átaòÉ�º9c-¯(İ( € (ÔüðîçÄ3Eªj±Éo¡ÆÁÑ[trê…Oú¸:2Zäbk‘�Ã1@w—’ ¨¢Š8cŽQ"Š$H¢Ž5‘Ç…DE\*¢( ª b€@ekzÅžƒ¥Ýê·ÌE½¤{Š® ’ÈÄ$PÄI¤e�s…·1TWuù¯Sø·âË»‡’Â{}*ßqò­á´¶ºeOáóf½†s$˜ûÌ‹ ȉAÅgÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ ?Ç?ôÿÊf�ÿÈ4ÂÏñÏý?ò™£ÿò ð³üsÿAÏü¦hÿüƒ@ü,ÿÿÐsÿ)š?ÿ Ðÿ CÇ?ôÿÊf�ÿÈ4è^ ø©w}¨[é#1¼‘`µÔ¢Œ@VâC¶8®âLBVg"4–%‹Ër¡Õ‘šH€=†ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € çüAá�ÄÖÂßUµ2ò.¢";»bÝL3m$pZ' � ÄÛEx¿ð�_Ó™åÒ5«A– ›-ï£^¸x$.b0HòHA"ÈUóË í>O&þÎêÊ^uuo-»ñ× *!?€üN@P ”PS¤x+ÄúÛ/Ø´‹¡ cý*é ¥¨_ï ®<µ� ä¬&WôVâ€=»ÂÿôÝ5£¼×¥MZívºÚ"²éиççVeé§š±BAÃÛ¾(°*ª¨UU@UU*¨€€8  € òï‹Ö×3øG|ŠZjvw7ArѼ»›|°Un.-Øç cwI –( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (æŸmsyekfÝ\]A ¾Ìîó¤•21ÈÚÄ1ì €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( åŠ)�Ç4qËê’¢ºª° õôü¨!ü3áÉ[t¾Ñ$lçséVÙõÉ€œþ9úæ€-Ûi:U‘ g¦iö„t6ÖvÐô1F‡üýEhP@P@O70ËoqMñ¼3E"†ŽH¤R®Ž¤ÊÊH ŽG§4ã:ŸÁm2æáåÓ5{�6bÂÚkQ¨,yþ¤76²ˆÇE´ÎY­gÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ß„þèÞ˜_ %Ôu0¬©wp«[«®×û-ºn3©*ÒHòË´”IÕ€=€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €9_øˆxc@ºÔÕVK’ÉkcýÇ»Ÿw–_‘"É;¨9uˆ *[r€|…©êúž±p÷Z�íÅäÎʼnšBU3ü1FŠÇEŽ$DQÀQŒPuP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@‰àoêZ¥ikuw5Æ‹q4p\ÛO#H¶«#6ÅÙŒ&CÉecš5ee.#x€>´ €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ûân‰u®xZxìÑ¥¹°¹‡SŽyÖæŠhÐYÄȈ2Ò2ÔeòEP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@nxsDºñ±e¦ZÆÍçL†âEm½¢07бÇ�¹Æù F¹wA@nP@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € äµ/øKW¸{«íÝî$%¤–.lšW=^_±On$rygugcÉ99  ïøVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù<?Ê€:�'BÒ4(Z 'O·±�È2”™%+™¦róLT·Í•öä㚀5¨ ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € äµ/xKH¸{[íjÝ.#%dŠîoZ'R_±Ap#pxdvWSÁ  ïøYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ùÿ/΀:�']Ò5ØZ}'P·¾�˜‰"-ʉ¡p“BX·Í‰7`ã;Z€5¨ ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<ûân·u¡øZy,Ý¢¹¿¹‡LŽt8xxæ–iŽUÌòÆŽ0ѳ‰†U4òEP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@nxs[ºðö±e©ÚÈËäÌ‚â5'mÅ£°òŒ²G�¹ÎÉH¸tC@nP@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €9_øtxŸ@ºÓ–;�Éuc#ýÄ»ƒw–�’£I°E”¸ Wk|…©éž�pöº�•ÅœÈÅHš2ñüQHŠhÏU’'taÈcœÐuP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@‰àojZþ¥iuui5¾‹o4sÜÜÏF·KÖÁÕLÆbI$a£†6ffcI@>´ €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €"žxm¡–ââT†#y¦–F qF¥�݉UTI<^hÆu?�:eµÃŦi”(ÅEÌ×COY1üqFm®¥1žªeX\ޱ¯JÎÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzhÿ…ãÿR¿þVÿûÓ@ü/ú•ÿò·ÿÞš?áxÿÔ¯ÿ•¿þôÐÿ Çþ¥ü­ÿ÷¦€ø^?õ+ÿåoÿ½4Âñÿ©_ÿ+ýé þ�ýJÿù[ÿïMð¼êWÿÊßÿzh»ðŸÄmÅ3 ºv¦U™-.dK…EÜÿe¸M¢VEš9)v‚颻( Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €<»âõÍÌÙ`—z��µÑ\�ôo.æã GEk‹{u9À9ÛÎâ(åŠ( € ( € ( € ( € ­w{g§Û½Ýýݵ•¬F1%ÍÜñ[[Æe‘!ˆ<Ó2F†I¤Ž(Ã0/#¤k—eV³@P@P@P@P@P@P@P@P@P@P@P@sO¹¹³¿²º³,.­î šßfwyÑÊ�äî`ŽwŒ‘@vP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( €2µ½Ï^Òîô«å&Þî=¥—H¤R)¢'�$2*ȹʒ»X23£|שü$ñe¥ÃÇa¾«o¸ùWÝÛZ³'ðù°ÞÍŽL}åF™àJÀf€3¿áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨ÿ…aãŸúÿåOGÿäê?áXxçþ€ùSÑÿù:€øV9ÿ þTôþN þ‡Žèÿ•=ÿ“¨Ä^×¼%¡êž%ñ-½ž‹ è¶sj¦©¬hÐÚYÚ@¹yds}’IÂEaæžfŽ#’gD`„t|Ký´¼C$ú.™ªhß<+ª¥¹iítëŸêVÿ1Ž6¼ž¸¼1°,#ûE·‡­gV”>¥sÊ÷õ—ÂOéöv–ž1ZXÛAgkÕô¹LvöÑ$0Æe›Q’i FЦI]ä|n‘ÙÉj³ÿ ÃÇ?ôÿÊž�ÿÉÔ°ñÏýÿò§£ÿòuð¬Ð< i^ð¾•g¢xC³ŠÃKÒìcò­­-¢èª9y$‘ËMqq+Iquq$·72Í<²HÀ´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € (  �w]Ѽ1£j~!ñ§g£èš5œú†©ªj%½�•�ºšyå~UF�ܬq«;*0å¥Ýߎ¿à Þ<}3L}_Á²¿‚u„û~¡±¬õ?jvŒR5‘Y$¾–6Wµ¶�Kgá{)ÓPÔ#›Y¹²²pÔ/ ø_Ãþ ðö“á_ é6š‡´;8ìt½.Æ?.ÞÖÞ>qÉi%šY Ïss;Ësws,·72Íq,’°ýP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Pa¥ÿÇ„ö×ÿGI@P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ¯wÿ·?õï7þ‹jáè € ( € ( € ( € ( € ( € ( € (/[Öô� hú–¿¯êVz>‹£ÙϨjš�üéogcgl†I®.&�ª¢"©ï¹Ž;*°å•ýÿŽà ¾<“EÑdÕüû,x'WOí]WË{=KÇÚ�£¬‘Çr©Y/%B²ÙYJ¯iá›)¢ÕuhæÖntí5€?P|)áOøúO„ü'¤Úh~Ðí#±Ó4Ë$Ù¼ ’I-™&ži纺�¤¹»¹’[«™f¸šY  € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÖþþ( € ( € ( € ( € ( € ( € ( € B¬+HÈ ðA ‚8 Ž}è²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆè/[Ô<;á­Rñ¿s¥èú&�eq¨êº¦¢míl¬,mc2Ü\ÜÜJ«QE–fcèY€`É�N÷ÆßðQOˆRøwÂãSð7ì�à]b?íÝ~;o°êŸµKGYc‚Ýd�]Ê…&Ó´é’[O YÍ·­Ã>±q¤éJú¯áxGÀ~Ñü!áMÐü;¡YÇc¦i¶vê"‚Ë3¼Ž$šææâV’âòòæYnïn¥šêêi®%–FèþÉiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@Ù-?çÚßþüÇÿÆèû%§üû[ÿߘÿøÝd´ÿŸkûóÿ ì–Ÿóíoÿ~cÿãt}’Óþ}­ÿïÌün€²Zϵ¿ýù�ÿ�ÐöKOùö·ÿ¿1ÿñº>Éiÿ>Öÿ÷æ?þ7@"$jQFp¨¡TdäàÉ$œIÏ4ê( € ( € ( € ( € ( € ( ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÌÖu�'úN£¯kÚ�ž‘¢éwŽ©ªjÚØØXÚÆÓ\]]\JËP×wvÜ�(ò_[Ö|{ÿø�?„¼'>±à¯Ù;ÀúÌ_ð‘øŒFöz—Ä-NÍÒhà·ŽdÛ%̪R}+L�$¶ðí¤°ëúüjóèúB~ªx3Ážø{á�Á¾ Ñí4 hie¥évHV("R]䑨´×7w3<—7··/-Ýíܳ]]K-ÄÒ;tôP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €3µ}_Kðþ•¨ëšæ¡g¤èúM�Æ¡©êz…ÄV¶66‘4×7ww32E ÄŒòI#*ª‚O£~Jëú÷�࢟.<àË�_ÁŸ²�‚uxá)ñ@ŠK=Câ£fé'ñ,-~Ú.‰ê_�< áO†žѼà�×BðÞƒj¶š~Ÿj§d¼×739i¯/¯&g¹¾¾¹y.o.¥–ââG–Ff먠€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ¥©jZ~�§ßjÚµõ¦™¥é–—úŽ£q¥•�•¤M=ÕÝÝÔì�ÛÛ[Â�,ÓJéq©we4ù)âßx÷þ ãû¯†¿ ®õO~˾Õ ÿ„ãÇ -o|?ð�ÂïèÞð>�m¡øoB¶öVVã/#Ÿšâööá¿}{¨ÞÌ^æúúᤸº¸w–W%° �P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ( € ( 1I$à9$“€’OåŠÀÑ|[á_M{oáßx^ŸL•­õ(4]gNÕ&ÓçRC{�Ìïi*’G:£‚@ gæè( € ( <Õ~.ü)о øá.µñ/À:GÅ/i·Ï…þê~/Ð,?ý¾fÏþÉSþÛV¾,¾ñ÷À¡ðüÐøƒÀ[jšµÙñ‹´ÏÛÛ&…«Üh7vZŽ�â-R+-sKÕŽ�©i[ÞÃygÕ»[PÆ4ÿ‚ò~Àþ ø_ðÇâuÞ±ñ3YoŠÖ¾!Ô´‡þð†“{ñ JÑ|7âÍkÁwZçŠô˯Xè>°¿Öü?ª.‹׉RÕ¬íÞöÓOxRR€Qü&ÿ‚–þÉÿÿgŠÿ´ïÃOê¾!ðWÀÿ ë^)ø¥áa£‰>±Ñt­KZ0ê¾»·Ý.¯§iWòø~ößP—DÖd´¼¶³ÕÚçNÔ¢´þl¿g_ø.׉¼9ûrüdñßÇ‹?¼SûkZ¿Åé¾|<°ðw„.µ�KÖâ+» KMÔ-â»±¿±»�ä‚êÎòÖh®-®!wŠhdI#vF @è € (  ··¶zm�Þ£¨ÝÛXiöÓÞß_^Ï­�•�¬M5ÍÕÕÌì�ÛÛ[Â�,óÊéQ£H쪬hòWÇ~9ñïüâç„Wº‡…¿fß j0ÂÆøŠ°Kž1– D‘ÙÙ$¢3=¼Í™ hRãÎÚž#ñ qE�§Û€~ž|8øqàÿ„þѼ à] ú$Uµ´_<÷3¾çQÔnHßjwÒæ{ÛÙËK<­Ÿ•@;Š( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿ×þþ( € ( € ( € ( € ( € ( € ( € (øÄÿ‚êºÁ¯ø*WíAðoâزñæ½áŸŒ>Ñn5…{}SYñw�¾)èú滣E*¦ê:�®øŽdd@ðøzV�"8õçñƒâ×€þ|0ñÇÆ‰ÚÚx{À_ü=}âojÍ ×R[éö)Ä6–vé%Íþ¥}pðiú^�k—ZŽ¥ukcl�<ñ«~C~ÕðP�ø'7íÿüø“ñcâV�ñâÏìå/Å|*oi¶^5øi¯üEø±¤Ã¦|CÐü)¤_&­á Ö²Ò­í­ü5ð/Ûo[ÄZ¾™¢\§ÃO xÓâ5ÇÂ?øßHøM§x™t‹½oLI¼_y?†ì&Ð ðâ#éÒé Cñ‹öøµûÁ ÿl_„?üEðëľ$ñGÇ4ûï†z·‰u�TñÇìïá‹{KËŸøGÁ·ñê©á=Ji ‡M¸³[9ì¤Ké&’âÞÔÇÿ`�ØcöóñŸì!ðãâçì ûZOðu¾2ÜüIÓþ4ü3ñg‰5} Ã÷z¿†~ øŸÁºG�<¬éñmLJ5ëÏ iZN•­Kgm¡jçûÖößÄ·Ûišxì—ücþ 8ßðOÅñßįŠ5Ð~#ü~ø‘¦Eá½CUðÄ:“ø_ÁÞ‹SM^ûEÐu]rËL×uÛ¿êÖšN«â-[RÒ´•/£i6ztd¼Ô5PŽ>>Á¿lÿ~Û?ÿl/ØKö–øoðËXø•â¿øÖá|usâm _ðæ«ñâKÿèëý�ðÿâ'‡üWáýGXº¿Ôm£Õtë†Þ{k9ì®îôäÕ.À=ïãÏüÛö‹ø¯ÿFøûpiž6ø9Ã_‡:—ÀíCÅ6±¯øÒÛâ£'Ãt·>%“IÒ,>Þøji/åŽWÒïÅ:rM¸}¬éÙ!@3¿nø$ÅßþÔV_·ìñ§@øûAK}¯â]7Ä­©é>ÔøçPðö«âï†Óü-¯ê>»Ô¯¼9y¨ZOu,“h÷zÆ“¡jwl³ I/t‹ ‰ º€ }M@P{»»[ [›ëë›{;+;y®ï/.æŽÞÖÖÖÞ6šâææâfX ·‚$yfšVXâ�YÝ‚©*ù/ñâ�ooÞüø+}{á¿ÙëÃ7°ÂÎøš°Ëø¤E6õ±± !76S´,t š7ÕeOíÝhA§ZÛÃéŸÃ/†~ øCàÍÀ~Ò"Ñü?£C¶8×]ß]¸_µêº­ÞÕ’ÿU¿‘|Û˹yvÛK ´Vöñw´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € (ƾ?üøUûOü)ñ'Á?�~›ÅŸ ü[.‡6½¡A­ë¾–òOëÚo‰´†]_ÃzŽ“¬Zý›YÑôû¦·ð‰Öop%¶–XœŸ³÷ìûð£ö]øWáÿ‚¿ü77„¾xZã[ºÑ4)õÍ{ÄrÚOânÿÄ:³¶¯â]KVÖ.~Ó«jw·*·7Ò¬ /‘n"‚(ãPh € ( € ( € ‚ææÚÊÚâòòâ KKH%¹ºº¹–8-­­ �¥žââyYb†bF’YdeŽ8Õ�Ø*’ ’ÿ>#xóöññý÷Àß�÷÷~øáËÈGÅŠ ©‰cŽl‹|“sa;ÂÿØz t“\š?í�TÛi¨ô¿á‡Ã|ð^‘à/é1é�~Y/uÙý¯VÕ®Â#ßê·ò ’îî@3ˆà†8- ··ˆÐ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( €<+öƒÿ…÷ÿf™ÿ íÿÇü&ßð“ÙjÂYöoìïøE¿²µ¯¶ù?jýßÛµ¿±<¼|þGÚqòî �?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQè—ñWÁÿø(?ÇK;?‡?�oºYìÚÚÅ>Õ©E1 åé†âÖÊîì[ Fd³I@?G~ü-ðWÁ¿ið“• é1õ;d¿Õ/¤Tûf±¬]„G¿ÕoÝ—W.ª ,VÖÑ[ÙÛÛÛ@ètP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/ListItemDowntimeAnatomy.jpg000066400000000000000000001747471527064444300227170ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' æÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀæ'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € Ê×uk}DÖ5Û¨æ–×EÒµ Zæ+p�q-¾›i5äÑÀ²IfgŽXĒƅʆ‘–Pçwþ"eýŒ¿èŠ~Ó¿ø øUÿÏ^€ø‰—ö2ÿ¢)ûNÿàƒáWÿ=zûŸàïüÐ|_ý½¼_ûZ~Ï>=ðþ—á߇Ö>:²ø·©êjðÜÁwá�ÅϬxR-[èÞÕb×bÒ¼?â|]« OT‚ÅŠ.¥ÿд.ÿj¿ÙÂÃãL³�ïÆŸ‡¶¿¥¸³´�áLÞ!³O=Ρáè|Ycè……Ñ’ëÃwkp.2ú|±Ü £PÊ·üà—ìñáwÃ_Š>ø©â½gâÆ™.« ÞøOð•æ™a:ä: G«Éâørê9MÔë(v·‰öpĸ�èô¾€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € øgöòý¾>Á>~ø?âgÅ� |@ñv�ãO'�të/‡–~½Ôíµ7е�|]^ÇâOøjÑ,®�qx.ç¸ûD°�³˜ËÈ€¯ì]ûcü+ýº>XütøIkâ-+A›Ä~ ðž«áßA¥Zø£Ãšÿ‡§‹ÏÓõ›}V×4¸å¼Ò¯t�~Ç캥Ð}'YÓä›É¹i­àƒö×ý³¾þÂ_%øßñrÓÄš¾ˆþ(Ð|£øsÁöúM߉üC¯ëÆêxì´›}oXдÆ6:F™¬k—Ís©ÛìÓ´›£šààÏìûx|.ÿ‚�ü/ñWÅo…ñ÷„´/øöóáíý‡Ä+?Yj×µ—‡¼;âI/,ãð߈¼KfÚsYø–Îy¯ ¹70]+Z¬K²€}½@|ÿð_ö«ýœ?hËßi¿¾4ü=ø­áK{¿Zx'Ä6zÜú-¶§5ÌêÚ³xîæ³ºŠq‡x%;~P ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÕþþ( € þs¿k/ø*÷í;û#ÁLüû2x÷ÿÿá™ük⟄÷¶-—ÂÞ*µñÔ_ ¾!ÜÙø[ןZ>:m ¯<%â¨xÅÞ>ÕÔÈ#i¬<' ßk—±1ëqv–_f¶�CI-ÄÑE<ŽˆÀ�ðOø(?üwþ ðgöÄñ6�áï€þñGÃo‡�h?®ô? kº,:¿Æ¿Ûjz…„7wþ/ñ·ŠñEïŒ5Àß ôêËw©'Å è³Mk ºÅʺÚéè,­R-²Î»¥æõ/ø-‡üSöKñç„4ïø('ì]áÏ øÅ7s,z—ƒ´x7^»³·ò“R›ÂÚö¯ãŸøĺ–†.-ïn¼;çi·rÅ4]êºTwöº„@Ô?ÃÿøSâ��¼ñ'ÀºÅ¿ˆ<ãß hž/ð®·j`Õ4éÖú¦•z‘Ê±Í žÎæ’Þx⸷�¼E4NŠ×P@P@çüÿŸç@çüÿŸç@çò € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ù´ÿƒšÿäÓ>ÙÄÁÿª×Çtò¯ü§Ç¾'ý’¿l‰Ÿ°çÄ»òšOÇo‡øÇðÂiCCi¨x�ü¦|EÒ%Ó!whRo|(ñ%ÜúÛE5Ç“ªøÛH ó[ÊÊ™ÿÑñï‰ÿk¯ÛÁß±‡Ãkã&ƒû6|#ø‹ñ�â]ÄAæ²±ñ§Ã�K⇈¤Ô–7H$}ᯆ´+Y¦Œ§ˆÑü?{ycuoáeñ_‡>xÁ¿dÝGÁv>ƒ\øA'í(ž+O½ÕçÃøLõy‡¹cw:êgM_:CZÞy�m¶Uq PÞ�Ûkö¯ÿ‚£øÃö®?²‡ìð+\ð7†tX­cÖ?i�ˆŸ õ)¼­êçéâ-Z]ƾ4Яþé¾ÑbºM3izþ½âX\Ú軡’ÖÎì柀_ðRŸø(7ìÉûy|<ý‡ÿࢋàoˆ+ñ_Zðo†ô/øcEðÞ‰©ØÝüB¾}Àž&еéžðî¹á]WÄÿñ$×lµ_ XëVEuqÕ´ÚTúF¤ýDÐ@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € þa?àåïÙØø‹àÿÁÚE±-©ü1ñUïÃ/ÜÛÇûæð—�#þÔðÕýô¸ù,´è·m®¶øçvø€+ÿÁE¿oãïø!ïÀïÚko~Ö:oï†~$–ÿÓN©àY./~5^§Í¸ÙIâ�‡—ž¾WÝ!¶ñD1:ƒ3H 'Ãÿ€wß²ÿüÉñ1Un´üOøI¨üvñE園Øj1j_u ]xd4�˜®í/4ÿ‡vžÒîâgY¡¼´»VXK4(ðßÀ�Úö‰øCÿø£ñá‰|_mã;ßÚ³Uðgˆ¾!éú†¥uâx ^Ѽ©®ézÓI5æ‡4Ú�Ò|1m¬A,L¾'û^™sgª K¸>jø û1þÊÿ>xOâwŸø)e÷¿ø(¥Õ݆¥«èþ$\ü!ð�·ˆ�ˆbk�Kñ¬úñuƧo¦I&§¢ø§Añ_‹Fµ¬ kYtMâæí4€ÑÏø,œŸ´ßÃÏø%·ì�¤þÐ_4?|vÒ¾9Øèž3ø�ð³ÄšÔú'�tûo|Wÿ„c[:¼ºG…¯¯õ OÂñh>!™ôÈm¯|B—ú…¾øg„¨ë„5=I¿à‰:f°Ú…ëjÇþ �>¢uF»œê'Pÿ†cžãíÆô¹¹ûgÚ1?Ú¼Ï?Îýîòãu~bÁõÏ�ž&ýˆ?lÓðÏÄZn£ñ“þ««…ú§Äí_W¼ð¶‘âûŸ†v)áûízai®ßa麬°jWövÚu×Û#·{cóÝÔáÏþ¿u�â�?nŸø+¿ÂÝKö¹ŠÿÄ^³ð7Æ«?Š:&�©ØY'ö]¿Œ/õX,ü]c{sª%Ö—7‡4=+ÑøcKŠÇì|Ÿñ.·èÿc_ÚÇã'Çø$oüßá'Å¿kÞ>·øðãÀwžñе­kÄ6^øƒwâ+iü+q­_Ï>¡}¤èw^ŽãBŠöIåÓ Õntè.™k§YY~¯ÿÁ¸_ò�Í{þÎ/â7þ¢Ÿ(÷Ö€ ( € ( € ( € ( € ( € ( € üsÿ‚õÿÊ0þ:ØÅðsÿV÷‚¨¿ü;þQ�ð[þƯŒ?úµ›ãk]#Ò,¼K¦iò[éúµŽœ‚ÒÊîÚKHw,;¨è:( € ( € ( € ( € ( € ( € ( € ( € ( € ( € þ!þ1ünømû8ÿÁÃþ1øÓñ^—Ã< ñ]ø›]ƒGÖuétø5_ÙžßÃö.šG‡ìu=bóÎÕuk b¶V7Ìg•V¥‘=þ Iÿ7ýœ?n¯…_ ¿fïÙbÛÅß0hÞ:ŸÄÃÀþ!ÐÑnm<7â¯é>ð¶�®iö^+ÖuïÞøÁe˜C£Ci:mµ¬ ©]ê4Ð-ÿ‚¾xâ—ìÃû%ÿÁ'¾kÞ ×ü?ãO |øµ§xÒËJ×î¡û¼íðwS¼Ð¦ºÒî"·¾O \ê—:¬±¼öë§ú,²Bë, uxëáí ÿÒøMñ×þ ŸñOöŠ“â§íKñÓá'ü+«_‡·>–?ü:ñ÷Æÿø^Ó.4 cWñF±«¥ü!Ó´OûÃrxJÇD¾†ÂßKŽÞËJ¶‘o@>yý‘à‘Ÿà¡?³j~Ùßÿk¯Š¶~)\øË\øQ-åÝνi¦�ZÕ|=g©ø³R¼Ô†±¶¹­h÷‚ÛMð›è°è>þΚÔ^´ƒKµú#þóÿ+ø¿gðOöÆø_ûJk·Ä_þÆŸ #øëöŸÐ>%øÆK�s\¹ðÇÂMö‚ÓüAªZøSG·×4b5=c[м+á3¦•¾Öu­:æåt뻫y@>›ÿ‚Œøÿâ—üÓàÿìŸÿ øEûCjZ†³¥x�Æ>?\G?�uK¿|UøÑãuðö‹©Í¥ê~ Õ¼1á�Iý àŸðT/|Gý h5›íBU¸Ó@?²(L­Mø£âßìÝÿTÿ‚‘|X¶ó¼sñëáí)áÜÊ®RßJ¸ðgˆ¼cñëI2©Î‰>¿7…ü)£y&%ÓâðF§¦$~AD@Œ?g/†/ø�ÿý±“Á–Z†©yà/ÚçGø—­izjù“ÝøO¾øOÿ =̰�šK/é7×*¿ÙóCi ÍsóÓ?b/�ðN߈ÿ²O‡>#|[ÿ‚—||øã¿ iÚÕ·ÄOƒö_üà� _iš¦¢ÖÃá÷€µO ]ø�ÄzF¹¥}ƒSÒãðÔ~ –kûùô¶oíX.,âý^ÿ‚ü?ýŒôïøhψ?±Î·ûXkš§7€¼%ãmOö‹Ó~iº¡¬é§ÄúÖŸ„ÀöñO«évš¬ÓøƒûQ¿Ðm5íƦMBB –ðnçÇ?„ßhÚÀ¼u ü<ñ7Äí/áÿ„ü câ›ÄÒ“Ä~,Ò¼_®éÓøZÂæãe»ø†âó^ÓàÓô¶•nu ZX­ib)@/Å_Ú«ã/íÿ;øÏû5|zý¹¼eû þÎÿ üsñGÁ^¶ðÇŒOÂíP¶øyâ!áÝGÕµèõ�I¼ñ�-í¦ñX×üs«ë:=´�6�áÛSo>‰§¸Æ^3ð×Á/ÿÁ\¿d üý¢¾!þÔžо=þËvZ¯Åψ^0³ñ캟‹Æ­*ãWÒü'âÝ:ÆËMÖ¼#¥[ϧEmu§¾¡du·×–ßRºEù?Ѐ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿ×þþ( € ù‡öÒøiûQþÊŸ¾\E·ŸþëZ†Þä ‚ÓÆÚbG¯øQ˜¿Ê"Ó ð�Ÿ‰®t� h¦�{âë ¹t‡¿Ñ|­J;¿ É®ÌlfkTFüÖý¤?hoø&Oíû9Égà�اƟo�V}IŽËàöœþøAmã¯Xů¥‡†¢ñ­ü3h¦ž5t¿GðÝ,ð��u‰?þ5\|k‡áuåž¡¨xï¿um3Æz¶†<:±Üëê!ñE¯Œî|8aŠûùÔìïôû+�âÊÐ�ø!ÿiñ×ÅOø'¦¥û|7ý�|Wâ¯�^ý˜¼{ð§\ø‚5}6ßáÏ…¾øcÀ:Þ“­üBÖÂZ ONÔ|9ðÚÚKK}6ò%¶Ô¼U‚Á©ÞÞjVÚÀÿàðoÆŸˆðFÿø)„gøuËωš·�¼,¶zW† Ïü$š÷…í4ï_|Bðö‡œ©wy¨k¾¶ñ.”šM¢\ÞkÑ]K ÙZÍy©Û­y7ü×â·ìg¤|Õ~êŸðNŸþÓ·–±¬ø§IÐ.õÏøwÆ^ºÔu«» Ïâk�kFëᆅà¨(üW$> ¸·�4Û­cRÕ IîŸHå?à›òŽïø,×ý‘¿€?úzø¿@¿?ðnü£ó^ÿ³‹ø�ÿ¨§ÃŠýõ € ( € ( € ( € ( € ( € ( €EÊÍm$°¸~þÏß¿f†:/Á¿�žÿ„ῇ®õ‹íßÛþ'ñ7ØîµýVï[Õ¥þØñ~³¯ë×kÔïn®v]jsÇ›äÛ$6éJä~ý�ÿdÏþÒš¿í{áÏ…Ùß´N»{¯j¯Ä?øNþ%]ýªóÄúLº¹7ü"WÞ0¹ð4nÒ§–×˶ðÔ1[nóìÒ •Y”·í-ÿùýŽl cKñ'íð?@ñ÷‰´]54m;Åk>.ð‰£Ò"žâêßK¹ñ�üyømΈž žâ;ÈôÍ~Þe¹ÓoãSSÐu½:âÇ^ðæª±³Áý© jzv mežÔÜ›k‰â”ãƒßðG_ø'WÀßéÿüû;éw~,ÑuõOÝxÛž:øƒ§xvöÞhî,î´½Æ^%Ö´·i×0Ãu¦j·úuö±§]EÍ–¡ Ê@?Mè € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( â£Ç? ¼ñþ?ñ߉þÑ ü;ñD :[ø«Ãü1§øªÖ+¨š ˜-3þÌ´'ì±ñ7Æþ3ñuž¯áë C,”¾5Óì?±~Ûá+ÉôÛ­Ç^ñ–“ŒÖÚ†‹}çYfC,_IwqijÌ|.ñ¯Æo‰ð_O„>=ü?›áGÄoüDðgЧøgw<——�|'©|�¾xsZimìåM~ËÀ1ølø‚9ìtë¤Öd¾ûv™¦_�>Ôéoø$Ïü§Cöíÿ¯¿Û ÿZKÂÔï?ð__Ù/â]çÅ¿ÙÿöîðÂè¾4xKá.•áÿ |cðèxŠÀøÀ¾8Ô¼¢_x»C†Þýõ_ø†{Ä^ñ�Ìš|ÖšFŸ �ÔËØj­>IñßüKöø•¥ø+Á±'ü+áwÄÚÅZ–�o{ሿ³‡Ã}[@°C ßÚ–±øg¨^ø«Å—«v°¥­õÅ·…¬­´æ“SÔ IRM6 Ò/Û¿âŸí-û~dz֔ÿ°7ì­ñ7à^¡àìþÒtO†ÚƳðÏà§Ž.oá*¹Óô�èú棣iiõ]f|q>�ªi¶>3Ó®µYuH$ñ…ivüøþØ:×ìûTj? |;ÿÌý”~=x+ãÿˆ¼Aæø»ÂÖ¶·Z†…{a%¤ñÅ¥è>ÓümãÙY´ÖÒóûgC‹ÃÓ´H%–þ ‹›§:0ï?íýñÇö¤ý‘ÿgÏÙ+Á´ì�ðŸöÅýŸ-þ |$ÑÿiOøÿÃZ×�µßü`ð®—k¤üA–ç]‡X½Ð4;ýOMq7‚~#jºIž$“Y�ï%‘RÞPÁOÚ‚Óö?ý¬>-üðßü_ögøÿàÏŠº­ýÝ׌´IZítèõ ®´#á}GB´‡Ç^> 7†ï´®|Iâ•Ö¼-àýÑ,o¿|‚çS°ÿ@?‡Úo‰4_x#Gñ–ª5ïé>ðÖ›â­pF³âK Ê×\ÕAl1ާÕà,3ûîpMuôP@P@P@P@P@P@P@P@P@PÍŸ´ßì‡û;þØÞÐ< ûGü=ÿ…�áo x‰|Y¡éð–xãÂañé·ú:ßý»Àž%ðÆ£s�;S¾·û-åÝÅ‘óüãmçÅ ¨Ðxÿökø#ñKàDŸ³7�¼ mâO‚xgÃoÝk>$·AáÿÉ£Íá{HüCa¬Zø®�}Hž×U‹]M\ÜYG<×ÓJÓ;€ ýšþü;ø?føÛ@ø<âÿ k¬ø’HÛÂÞ2]\x¢ÁüCu¬\x®K�iõí^{ÍaõÖÖÍÕüבê1]•@9ÿÙ·öBý�d_ø‡á§ì÷ðæ/øÅ~"¼ñWˆt üOã?Aªk·ú>— ^]Íuãÿx£PH®4�M²“O‚î-4¥¹�Z ®.eœãïÿÁÿàš"·Ó¡ŠÖÎÿÂâ?AâG‚ÎÞÖ íb+ÍRßN´µÓm‚;z†ø%Ïì/޾|H·ý�ô Åßmü#oð’÷Ã^*ø‰á]3‹àj|99ð׆ü]¥xc_¾·ñž³ªxƒRÔ¼O£k:‡ˆo¯gÿ„ŠçU…„J÷åP@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € Ì]FMMµ¥Ò4ÅÖ/!õe°µ›Ãÿþ”Ëg}m$w— ðºÉ²€76³÷ü‡ö?ø“ãeøñƒÃŸ¶ßÂïÜÆ4ý¡~!Ï®k:.�mq{™=ö�ãßø>ÿÃZý½µÙmf/ø³Sðþ³åZ\ÜZÏ<ö6@�ûÿÁ/?i¨?lÝkþ %û}øÛÂ:·ÆÛ‰5kß x À×jVšv³¨øTü?³Ô|E}kc…m¦ø[Á &‹áOè3jÌŒšV¯¯%î”ö— ЭŸk¤iV77—¶ZfŸgy¨È%Ô.íl­­îo¥(’òxbIn¤@3» d7hPe†‰£iRÝO¥éf›5ôžuôÖ–rÞMÓͺ’Þ(ÞâL7Ì]½Æi` ‚È ðA ‚8 �Ï4�¦èº>Œ³®‘¤éºRÝL×+¦ØZØ­ÌìIiçÑD&™‰%¤“s’I'œ°•P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÑþþ( € øsÅ¿ðPßÙÃÁ^*ñ7ƒuÍOÅÑë~ñµá�b;o Ý\[&© êW:V –÷ 0Yá[»Y–)”*plP=ÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>ïÿ�Ðÿ3ý–ÿè-ãOü#îÿøýðó?Ùoþ‚Þ4ÿÂ>óúNOä?:û‹Â^-ðߎü7£ø¿ÂÅž½á½~Ê;ý+U°“Ì·º·“ õÛ$3Á"½½Ý¥ÂCuguÖ—PCs ‘(E@P@P@P@P?âßi~ 𯉼e®<ñèžðþµâmbKhMÅÊiz›sªêon¤4󭥬Í*A•  ¶há¿øyŸì·ÿAoáwÿÇèÿ‡™þËôñ§þ÷ü~€øyŸì·ÿAoáwÿÇèÿ‡™þËôñ§þ÷ü~€øyŸì·ÿAoáwÿÇèÿ‡™þËôñ§þ÷ü~€øyŸì·ÿAoáwÿÇèÿ‡™þËôñ§þ÷ü~€øyŸì·ÿAoáwÿÇèÿ‡™þËôñ§þ÷ü~€$‹þ aû-I,Q¶·ãIi|åB®ÁL²ùRK/—%ßÊŠI6ƒ²7mªÀvèºÖ‘â=#M×´JÏXÑu‹;}GKÕ4ëˆî¬oìn£Ymî­n"fŽXe�•‘•�\EiÐ@P@P@P@P@P@P@P@P@Pçßü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÃÌÿe¿ú xÓÿû¿þ?@ü<Ïö[ÿ ·�?ð�»ÿãôÒxCþ û1øËĺ?…ìüQ­i7šåäz}�÷ˆ¼?s¤hÑÝÏ‘mî§$�’\M²Þ;‹Ÿ.Ù&–?>hb-"}Á@P@P@P@P@P@P@P@P@P@PË¿lƒ?³÷Š´ÿüE¾ñ ¶·©ø~ÓÄÖ±é: ú¥±Òï5-[J�Þâ)QRsw£_+BFU'Éá@@ýŸ¾=xçö{ñݯì«ûQ]yF&Óá7Å;©dm#^ÑÚCm¤é·Ú¥Î<Ë ¶-¦“¨Ý2Ýi7H|?­y~U¼�~£Ð@P@P@P@P@P@P@P@P@P@sú·„¼)¯\¥æ»áŸëWq¶ÑÝjÚ6�¨ÜÇl�,©n“ÝÛM*Â’Í4‹°Eyep¡�Ë€eÿ·øwÿB‚ÿð–Ðÿù€øVÿÿèBð_þÚÿ Ðÿ ßáßý^ ÿÂ[Cÿä?á[ü;ÿ¡ ÁøKhüƒ@ü+‡ô!x/ÿ mÿ�hÿ…oðïþ„/ÿá-¡ÿò ð­þÿÐ…à¿ü%´?þA þ¿Ã¿ú¼ÿ„¶‡ÿÈ4·øwÿB‚ÿð–Ðÿù€øVÿÿèBð_þÚÿ ÐÆß´ÿì‰'‰§Òþ1~ÏeøyñÏÀa/´ƒ Gi¢éþ.·²W+¥^EC§Ã«ù -­•õÔMc©ZÊúˆm2k{�(¹ý”¿j½3ãΗ}áOÙ|kð`’ËÆþ ¼Š[ §šÆ_±ÝëZ5¥ã ¡f.‡“©é’†½Ð/œZ]™m¥°¾½û€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÓþþ( € ( € ( € ( € ( € ( €1üCáíÅš©á¯évZÞƒ­ÙO§jÚV£\Y_Y\¡I`ž'G̬6¼r*ˤˆŽ “W–~?ÿ‚r|@}SKMkÇ?²G޵¤þÐÓ÷µæ«ðïU½aÉHÁ#¾Š5Xín¤x,¼WciÚ„–ú嵕ê~­øOÅžñׇ4xGX³×¼9¯YÇ¥j¶y–÷VòdwÛ$3Ã"¼V³¤WVwQMku W0Ë€tTP@P@P@P@P@P@P+ãx[â7…µŸøÓF´×¼5¯Ú=ž¥¦Þ))")¡• Íkyi2Çsc}m$WVWqEum,sÄŽ •þ×ü}ÿëñý¿‚|kq«øÓöRñ¶¯7ü"¾*ò¤¼Ô>ê7nóËms‘ñóêúL–Úí´sø�Ã�GªE­è®úÓ¤jú^¿¥éú懨ÙêÚ>­go¨išžŸqÝ�ý�ÜK5µÝ¥Ì,ñOÑ:É‘³++dz(�P@P@P@P@P@P@P@P@P@P@P@P@x_íû?xöŠð%׃|aoö{È<Û¿ xžÖßWð¶°ÑíKë&bž}¤ûc‹UÒå•-µ;UÍ Ô6w¶€þÎÿ´Ž~xêßöSý©. ¶«j`³øYñ6îiIñFŽòm#N¼ÕnB}¢€‚ÛDÕn ÜÃr�áÝq`Ô­¢gý@ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €> ý«eMWÆÚ¥�Ç_�W§Áß´ƒLz…¥ÞŸ$V1xÞ v&�¨¼ŸèŸÛBÐ5�•åòµŽ©bçÃÚø}.[k�,´ý”ÿj½+ãÞ“{á�Ù|iðh’ÏÆþ¼Ž[¤šÆagw­hÖ—›nÅ�ÚÇ“©iÓo¾Ð/ÜY^ï‚[Ûаh € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € Æñ‡´?hz¯†¼K¥Ykz·e>�«iZŒ qg}ep›%‚xŸ‚;‘Ô¬‘H©,N’¢:€~MÝZxÿþ Éã÷Ô´ÔÖ¼sû$xëZ_·Øn{ÍWáÞ«xÊ‹$líåÅ*Çms!†ÇÅ–0G§ê[kv¶Wˆú¹á?xsÇ>Ñü]ábË^ðæ½eþ“«XIæÛ]ÛI‘‘�²C42+Áuk:EuguÖ·QCs ±(C@P@P@P@P@P@P@r~9ð7…~$xWYðW�tk]{ÃZõ£Zj:uÚ’®¤‡Šx%B³Z^ÚL©sc}m$WVWQEsm,sDŽ –>ñ�à�¿-ü ã«�[Æ_²§�uy¿áñi†KËÿj’<òÛ]G±óë:<–úÕºMâ_ Á£µ¢NúÕ¤êÚf½¦iúÖ‹¨YêÚF«go¨išžŸqÝ�ý�ÜK5µÝ¥Ì/$SÛϤ‘K²:0 œ� P@P@P@P@P@P@P@P@P@P@P@P@àŸ´GìñàÚ7À·ñ\"ÏT´óîü'â»hMWÂú»Æ\ÛÑý«Oº1ů¤É"[êVȘ’ÚúÚÆúÐä/ÙËö†ñ¿ÂÅû)þÔ³›/Ø,¾|H¼žI4¯i2;[èö7Z½ÀOµµØŒ[èZÅÆË‹‰Ñü?®%®¿jìô†( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ø#ö¬ý•uoêÖ_~Þ7„?h´z�µÆŸ$V0øæ |µÓõ“ýëd cgw|�c«X;x_Ytémn4°ãöSýª´Ÿ�Ú= € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € (Ä^Ðü[¡ê¾ñ6•e­èÝ”úv­¤ê0­Å�õ�Âì–¢`Aa‘×l‘H©,N’¢:€~MÝ[xÿþ Éñõ =5¯þÉ:Ö—í¶[š÷UøwªÞ°Etg`‘_ÄŠ©oq!‚ÇÅ–0%�ô–ºåµ�â~®xSÅ~ñχ4�øKW²×¼9¯YE¤êÖù¶×vÒädd,‘M Šð]ZΑ\ÙÜÅ5­Ô0ÜE$JÐÐ@P@P@P@P@P@P@�Žü áO‰~Ö|ãm×^ðÞ½jÖš†Ÿt§º›i“YßYÌ©sc}lñ]YÝEż±Jˆôùiá�x÷þ ßñÛáÿ�îµoþÊþ3Õ¦ÿ„7ÆF.ï¼w#Ï-­ÔVè|©"çÖ´h!Õ Y¼Má¨Rý5½pÖ­+UÓuÍ6ÃYѯí5M'U³·Ô4ÝJÂâ+«+û¸–{k»K˜YâžÞx]dŠXÝ‘Ñ�‚(ýP@P@P@P@P@P@P@P@P@P@P@P@|ùûFþÎ~ ý£ü/…üMÓõÍûÿß¿ö~ ^9,/µ¯( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € (  oxwBñn…ªøgÄÚU–¹ kvSéÚ¶“¨À·wÖw ¶Xf‰ºç†GR²Ã*¤ÐºJˆêù7qoãÿø'�ÚúÅu¯~É:Ö—í–ykÝ[áÞ­zÁÑœˆâÔ"�U �Ú Ø@–W­i­ÚÚÞ êï…|UáßxwHño„µ{-{Úõ”Z†“«iòù¶×vÒä2H¦ŠEx.­§H®m.b–Öê(n!’%è( € ( € ( € ( € ( € ( € ( CÇžðŸÄß ë>ñ¾�k®øo]µk[û ¥>»àºµ™q5�ýœÊ—67ÖÏÍ�ÌQω") Ëo x§Ç¿ðOˆ¿¾"]j¾1ý–|eªÌ<ãC —W¾¾º‘ç–Öî(ùMçŸ[Ñ`D‡R…eñ?†¢[ÕÖ´IÀ?Z´ÍONÖ´Û cG¿´Õ4­RÒÞÿMÔ¬."»±¿±»‰g¶»´¹�ž‹{ˆ]%†h�’D`ÊH4z€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>uý¤ÿfïþÒ> ø�WKñ&–'»ðoŒm WÔ¼7ª:¸hä¼ÑïZ8£Õ´§•#º�#ž¶Ô-l¯mÀ>_ý™ÿixƃöVý¨Ù´¯ˆúCCaà/ßÎϧxûLbÐé6ÓêÓ¬K{¨^GÍZ“kë¥IÕRÛÅvϨúU@P@P@P@P@P@P@P@P@P@P@P@P@|ûUþÊÚ׉õ›?�ÿoÂ?¼ɨ+iÏ œ;·³‹Ë67Â@,Û\6a¬`žùZÃ[°vÐ5Õ{'¶¹°ô/ÙWö©Ñh-óD×,×Â?| ­gã¯]¤¶w qi7Øîµ�Öô‹Ã¦5àò/l¦ßáû÷n¢Ò¤–† õÕP@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( €1|GáÍ ÅÚ«áŸiVZæ�®YM§jÚN£ ÜYßYÜ.Ù!š6ü9¬°Ê©4.’¢:€~N\Aãÿø'Ľ²]kÇ?²G޵¡ö«@Ïyªü;Õo*º3•Hµ£UHfs �‹l KK¶¶×-­î¢ý]𯊼;ãé-ðž¯e¯xs^²‹PÒum>_6ÚîÖ\€Ã!dŠX�^ ›iÒ;›K˜åµºŠ+ˆd�@: ( € ( € ( € ( € ( € ( € (Žñ÷€|%ñ?ÂZÏ�üo£[k¾×mZÚúÆäTýè.í'\Mg¨YL©sc}nñÜÚ\ÇÐÈŽ€ÐåÇ„¼Wãïø'Ÿ�í~üI»Õ¸Öa¬b’ùÃ^°vеÍö¯mq`é²·íQ¡þÐzÞ�¬Z/„¾/xEZÓÇ^»Y­."¸´›ìw:Æ‘kzEãiOx<‹Ë9ƒßø~ý†›©W°¿Ô€>· € ( € ( € ( € ( € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ( € å¼o¦xoXð‰ôßhöúÿ…ît=KûwFº·Šê-CMŠÖIîmü™^$2²DZÝüè+…Šhç†HÒTügð¿Ä}köø‹vtñGŒeojÞtú6¢–òkþÔnø3X²^ÏiöûuU�d’âÒÓÅV¤¿cÕímï ý8Ñ?i߆þ#Ò¬uÍ=RÒu;tº²½µµÒžá~ãþ'!‘уG4R*M ÈðÍR£¢€jÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4Æü@ø…ð{â�„uŸøãšö¹áÍvØÛÞÙ\Xéa‘‡ÍoygpºÐ–ËP²˜%Å�õ»%Å­Äi,LÅ~yü'øç¯þÄÞ3“áÏ�'ñŒÿf¿j7/à�Ü[[¶¿à¹î§6ò[Åw%¢Ä]ØëZ<71Á9x“AŠ äÕt‹ ÓkOÚ7ÀWö¶÷Ö6¾ ¼³¼‚+›[»k}{{›yÐI ðM¸ñ˱²¼rF쎌I€,ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ÃAø3þ�ž'ÿÀ-/ÿ—4ó7í9£üý¤|4ÝCOñ&…ã} eºð?�­ôÝ/íÚ¡Ä‚Öé£Ö’{½öXãÖAÃÆÊ—ÖM ì»y×ìÓûlêº Ãàwíiª§Ä�ÅaáïÂ-'�Æšr¦Û5Ô.nîì’}e¢U6Z¤O"ø†øùXµ¸§þÒû{þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ þÁŸô ñ?þiü¹ ëô_ØM¨éÖÚ¤0Cy%“¥ì6±ÊeŽyÙ•`¼¹CK”— ¸8( @öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@ŸÿµGìã©ëúýŸí û=Ü\øGãׄ�u RÀ[ZÛxòÖÖ/.KKÄi>Ë&¸Öa¬•¯#{~Á›DÖ’H^ÚâÐÕ¿fÚßß4 �3W±“¿<,†×Ç ™ÞXnm¥—:¶‘o{ ½}*K°b¹µœ5ö…|ßÙºŽðÖWú€Õ_ÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽPý·iýË�ûâ?þ9@öݧ÷.?ïˆÿøåÛvŸÜ¸ÿ¾#ÿã”mÚrãþø�ÿŽP•¼és L�‚¾ì7Ȩ̂ :©ÆOJš€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € æ5ðþ¿âÙoÅx/ÆwšçÁívòOøFßüOŸÃ7z_Å=!¬õŸj£Ùë2O’ø’ÎÕvhIgÌØUQ50U5Tap#%Ä’€{EP@P@Müÿ‘^ÿþÃ÷_únÒ¨×h € ( € ( € ( € ( € ( € ( € ( € ( € ( € (àïÚsöd×µmv×ã÷À–ðÇÆÿ 0Ô.-ô󵿎­­¢Ù%½Än>Ë&¸ö�¬ñx†ËÄ,ÚF¬ZÚâÜÓ?fOÚkBøû ÜØjËá�Š^SkãÝ -®-®m¥—®•ov~ÖúL—`Ã=¼Û¯t;ÖþÍÔ‹–²½¿ú–€ ( € ( €; /þ< ÿ¶¿ú:JР€ ( € ( € ( € ( € ( € ÿÒþþ( € ( € ( € ( € ( € ( € ( € æ�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€9o|!øoñÃ:¯„¼Oàý óGÖ-žÞábÓm-níÜŒÃy§ÞÛÄ—7ö’bkK»wYa•A©d`Ío jÏì9ñ†ß4û~Ïž.Ôe>ø‰w£[ß^xNyŸ{Úß0µšDHoÖôHË.Àþ!ðìD6¥¦Ü~¤Xè^ Ôì­5-7Fð½þŸmí�õ–›¥\ÙÞZ\ij[]ZÜÃÃ=¼ðºK Ñ;Ç,n®ŒÊTЯøE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠ?áð·ý Zþ ôïþ1@ü"žÿ¡k@ÿÁ>�ÿÆ(ÿ„SÂßô-hø'Ó¿øÅðŠx[þ…­ÿúwÿ þO е àŸNÿãÂ)áoú´üéßüb€øE<-ÿBÖ�ÿ‚};ÿŒPÿ§…¿èZÐ?ðO§ñŠÓ²Óì4Øš :ÆÎÂ�ÊðÙ[CkJʈҴp"!�¤h…ÈÜUI!@P ”P@P@P@P@P@P@P@P@P@P@PÁŸ´ßì˯êZõ·íû?Ü¿†~7x]†¡wi§ùp[øîÚÞ-’Á<.>É.¸ö�­.Õ¬üCdÇJÕ3[ÜDê?³/í3 |~ðýÅ¥åºxgâw†ìÞ6ðMÏ›ͥͼŸdŸUÒàºÛu&‘-Ð1M»ï4[ÖþÍÔ²ÆÊ÷PúŠ€ ( € ( ÃKÿ�?í¯þŽ’€4( € ( € ( € ( € ( € ( €?ÿÓþþ( € ( € ( € ( € ( € ( € ( € ætɸ½ð­íÁÇÂÇw®‰ŽÛ]µˆ#˜uQÐíÍYÒ¼C¥Xëz%õ¾¥¥jVéuc}jûáž:0<2º�c–)e†UxfD•N€ ( € ( € ( € (íŸ ȯá¿ûhÿún¶  ú( € ( € (‹øƒðûÂ|%«ø'ÆÚL:LJõ˜<«‹y>Y­æ\›kû � –Z�”¸žÎò²C*ç,Œé@›^ ñ§Ža/Ú|*ø«w¨xŸöwñEüãÀ>0É<ž–yL²ZݤAÌ0Âd2kºa¼¼¿ˆ<>Ž’j|àªW¶z•�¦£§]Û_é÷öÐ^XßYÏÍ¥å¥Ìk5½Õ­Ì,ñOo<.’Ã4NñË+£2�hÍP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|ûM~Ìþ!½ñ¿íû>Ü?†¾5øa¿´/ìtÿ.ÚÁÉâ–ÖmnK@Ö²Ãt­gâ+&:n  ÆÞeõoÙ›ö™ðÿÇÿÏosn¾ø™á•û7�¼sæAsgs ‚Ö}SK‚äýª]k¥1#ø*ÖFŠ]ze8&ÞÞúò?ø Ö–³DÃÝdDZþ?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hŠø‡{ðc⟄uoxÚhu�X‡Ëž 4Í]'µ�2mµ:äiæK-JÊR&´»„‡ŠA†ß¼Nùõð»ãµûøá>ü@×.üeû>k—Ò·�|z,¯þÓá¸�ÊÖ÷V’[ …µ�Ÿv·£[Ç"ÛÈÍ®h+$s^ØÝ~š[üXø}yoݧˆá¹µ¹†;‹k›{ Vh. ™‘M ÑØ˜åŠXÙ^9²:ÊÌj›þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�hÿ…Ÿàoúå3Xÿä?ágøþƒŸùLÖ?ù€øYþÿ çþS5�þA þ�¿è9ÿ”Ícÿ�héñ3Àò0U×TоŸªÆ¿‹Éd¨?ùu ÂÊþËR·K­>êÞòÙþìÖҤђ:©d,¯FC‡SÃA n€ ( € ÌÕ5­+E„OªßÛXÆÄ„3ʪò•+ \Ë3ÉX•ˆ‘È TüOð0$n=4Ý\�À‹áúðhü HÛƒŸ]7Wñ&À�øþœšê´½kJÖ¡3éWö×ѩ̫#>ø×áÉEö¡§YiÚ�µ§ŽíâM“¤ÑK`¶O¬ËjÖæ+ÑöY3Yjé)ÜÝÿgÿÚÿÀ?¼0­­Ì<%ñFO³x·Â2ÚjRµµÔ,!—RÒÊ[M,ºEÌà…Žvûn™pZÂûs-½Ýø¿ÿÂÏð7ý?ò™¬ò ð³ü ÿAÏü¦küƒ@Eñ/Á8�5ØÃ1lµ(gÖIìÒ5¥�êsŠìí®­¯`ŽæÒâ«y—tSÛÊ“E"ú¤‘’¬3Ç‚0ps@Ð@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € æ—â .ûEÖ¬mõ-+R·{[ë¤ó ¸‚Aó+ªÀ€ñÈ…e†UIbt‘Ôâ2<ð¿‰üMû1xžßáÿ�î.u�…ÍÔŸðˆø¸Æïýˆd}Íop¨Ç eÃjzj–6ÌÇSÓÁ,ðJ÷½ÄpCuk4W6×1G=½Ä$ÐOȲE42ÆZ9b–6ˆÌŽŒIR K@P@P@P@_„^ñÅj÷ 6æ]O DÚ0K·@~Y..À2ù­Ô¥»E³l¥|æÆÓ> ø»L™eMfîñöúœ¯ «ýÆóÙ¦@}`š'ô‘ˆéÏøªÓÅšRßÛ§‘qùÖe·5µÆÝß+a|ÈeS¾p7 ÈÁdŽE  mkT‡EÒµ VpZ;i'(WQˆ¡Rx 4¥"RxÁ4ñv±¬jíüú–¥;Oq;¤ùpÇ’R$E@‘êÌYÙÙ€2è  MXÔ4+ø5-6v‚â òæ� ¼¦@– @D'Ñ”«ª2€}£¢ê�ëZVŸªÀ Ç}má Äì1,,G¡”cÔþ ø»S™¥}fîÍ –úd¯a KýÅòfp=gšWõ‘¿„gÿ|E¤\F5+™u�<°ÃvÁîÑ ù¤·» Kæ¯P— ,Nͱó”ê û]NÊÛP²”Mky Oƒ#(ã8e8(êr²# ÈêÈØe4Å|GñDÞзY6ÍKQ”ÚZI€Mºì/qtà¼I„�¨Y¥‰È*¬¬òT’I4�,®òË+´’I#’GrYÝݲÎìij3’I9&€@wß¼YuáÍjÚ™Ž“¨\Go}n͘�ÌÂ$½Œˆå�Š™s, ñ�HŒ¨ÖòH‘FòÊëq£I#¹ ˆˆ7;³UA,O šùŸÅŸµmBêkoÌÚf™2%Ìhõà�8É"–µ�¸h£ˆ$Ê9–V-å gã¯XÌ&�_Ô¥!�1Þ\=ô,3’¦+¯5ž‡`Vî•8jú?Àž6‡ÅÖr¬Ñ¥®­dí–è[Ê‘„º¶ÞY¼§`Uãfw�ö«;«Ç#€wÍ´3\LÁ"‚)&•ÏDŽ$.ì}•TŸÂ€>0ñO‰¯¼QªMu#ˆºXZnýÕ�¶ï’5@Jù®¡ZâQ̲óÂ**€stP›;Ë­>æË)嶺·q$3ÂÛ$�‡pzFU�å]‘ÁR€>Çðwˆ?á%ðý–¨ê©rÁíïQ8U»·;%(2v¤£lñ©$¬rª’H&€:Š( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>Oø‘âË�wZºÓâ™—IÒî$¶‚$G=Ä ÑOy „ŒÒ[v' Ý¡ZIKy½P@P@P@*ügø3¬6±ÅÏ„’6‘ñGcw}ah!ñL¦&û™u9 à•LÌÛÏþ•åÈàƒðgã6�ñcG�×Hñ~Ž¢xnbÉ=¤èÞKÞY¤Øš]:Y�Oœ¬¦?d»ÃùRÜ{Mß|>ñeׇ5«hf:N¡q½õ»6bC3’ö0N#–*da̰+ÆA"2 ]P@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € æã € ( € ( € ( €>ãÐI:ŒIÉ:VœI=ɳ‡&€8Œ3M„•"ÎË�ZÊŒt0¬WW Ÿo´AúãÚ€>[ €=›à¬Ó.»«[®~Ï.’&”vó ¼·H3îâãÄЪüO$x\ÁÇhü¯`üAÅ|‰@P× >ÐòsƤ?«ß€?1@Uñªi›]ÒmÛ?g‹I3D;yÓÞ\$ø÷)ooŸ`(Æh ©>M4¾d—;-µkØmóÐBÑZÜ6=¾Ñ<çëŸzæ>8� ðN´H÷ÙX?†Oç@@ �A‚;ÐÐØ_fšëÏwµ´0¶:ù7–Ö÷�·–P}³@P@�ð¢i¢ñ¥‚E�—6Ú„7èa[9n>ßh‚õǵ}'â¢G…üHAÁ°AˆÓîphâZ( €>œø0IðµöOMzèaýŸ¥œÄ“øûЮP@P@P@P@P@P@P@P@P@P@P@ð�ñ&öð“’n® '¹2¹'ñ4V€ ( € ( € ( €>TøÍðkY̾HÚGÄM�Þ£§Z*¬)�÷ù·âµ9a+‹iTíCû©qx#yÀ=7àÏÅ›‹>“R[ô�wH�4ßé2Å:Åe©„$›I¥@%¶œ#È‘;5Ý¡ ov»–9§õêPH ƒ‚Aˆèhïz(°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿ×þþ( € ( € ( € ( € ( € ( € ( € æ‘â­FW�…¶«4𕤨;$ûCo¹@Ø æCrÒ+ %‚4Nx• p4P@P@P@®l¬ï ¹»´¶º6—1ÞÚ›˜"œÛ^Bb»·óU¼›˜–GXç�l¨° Á€,Ð@P@P@P†•¦]k�¦™d…îo&HcóË&:E –V<,hDZ ¸mmÒÒÚÞÖ<ùvÐCozì†5�sïµFh'ĺ>#Ño´‰›ËûL`Ã63ä\ÄÂKy±ÁeYU|ÅKÄ]27Àk:&§ ^ÉaªZÉm2±ˆ&„‰­¦ÀI¢lŒ2r¤ì�#«"€gA÷3Gom ·ÊÁ"†ÞYdsÑc�;±ì@Tü5ðtÞÓg¹Ô.«©˜Úh� öKh·m‹.U¥,ï,åNÐÅ#ü­ìÔx·I“\ðæ¯¥Ãƒ=Í©6à�¡®mäŽæÝ …<1¡cÐ1ÌÔl-õK Í:éK[ÞÛËm0 d(Y8tÎänΪxÆhã�x[Tð½óÚßÂívû%ú#}šò<�­ò«.Ñ™mÙ¼È�]ÈQÜ�UgeDVff ª –fc€ªIbH’Nr(é…ž »Ñ„Úö¯ [ÞÝAäYZH6Ímm!W–k„<Ç<åR& $1+ù˜iLjëZ�šê}õƒ�©}gsfíýÕ¹†HX÷螟�|?¨X]i—·Z}ìM Õ¤ÏѶxd?yItn0ñ8ùd�•Ô•`X�P×_ tYôO ÚÅuEs}4º”и!âûBÄ�£© Ë'Ù �¤F£vd8*€;ê( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>/ñ–‹>ƒâ=NÎdeŠK™n¬Üƒ¶k;™HNb€˜dÛÀš)�¸P^€ ( € ( € ( € ­megd'v–Ö‚êækÛ‘mP ‹Ë‚âî)Sι�€i§“t²� ³š³@þÑgñ¹§é�FβÎ�tà°ÙÄê×39Á ,„ÝÃÊÑÆ2îŠÀlÐ@†—ÿÛ_ý%hP@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € æ§ûTgë�ô(ÆF|NHî‹‚~‡ûTãëƒô=(»ð¿Ã� Ã3-êùº–¢Ÿêîïm·$ašÖÝ>HœÿÏGó¦PYc•Uœ0 P@÷šN•¨�u 7O¾+›Ë+k¢£Ðã|~à(ŵ¥¥”b;[{HAÈŠÚíãÔGªƒø~_Äb€Ê®¬ŽªèêU‘€eea†VS�Tƒ‚ÁäÐ’k_´=By.tËÉôf•‹=ºB—vjÄ’L0´°Ë$çË[�)GËq @0?áGÔÑÿ”OþûP‘|ˆ83x–I#Èܱi+ ‘Ü P�T‘À&&Ç\CzŸ†ü'£xZÝ¡Ó o6P¿i½œ‰.îJôHªÆ:¬1$P©%¼²ìÎÀ-E4ÜÆÐÜCñ8ÃÅ4i,l=2°ö#óþ 6º&�c'�c¤é–rŸùkkako'=~xbVçë϶à :(�ñG�´?…–ö9-¯£]‘ê…ã`äG0`ñÜFÝ!tˆd�sЛ·Àõ,vx™•sÀm;îÃS@OÑWùoü(ïúš?ò‰ÿßjë|;ð«AÑ.#½º–mbîÚcHí"‘NVU´V}ò/U3Ë2+u�dUjôú( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ç¼Eá}Å«mªÛ–1–6÷PŸ.îÙ˜aŒ2á†tR+ÂåT´lÊ¥@<¦o‚3“oâIb�'jM¥¥Ã�ØúÝIõ"%Ï  ¿áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨ÿ…ÿSGþQ?ûí@ü(ïúš?ò‰ÿßj?áGÔÑÿ”OþûPÿ ;þ¦�ü¢÷Ú€øQßõ4åÿ¾ÔÂŽÿ©£ÿ(Ÿýö þwýMùDÿïµð£¿êhÿÊ'ÿ}¨H¾D¼K$‘änX´•…Èî�¨NªHàc®!€=OÃ~Ѽ-nÐé�7›(_´ÞÎD—w%z $UcV’(T’ÞYvg`–€ ì4¿øðƒþÚÿèé(B€ ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € æòXíÖêä–Vن㇚ä Ö}îˆ|ÈäéZ(°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÔþþ( € ( € ( € ( € ( € ( € ( € æíÓû�öªB„€Y H•ÈÃP UØiñáýµÿÑÒP…P@P@P@P@P@PÿÖþþ( € ( € ( € ( € ( € ( € ( € æ²½ÖuÑN¢ÞM¦¯«ZC~Ï,Ò;gGÒ+ßÈ¿i¹Û§Dí8×ì×ûèÿ´ù¼oñdŸübñFûÝkRšþîH<6·‹ºm#M¸µ¸ˆ]^0mš¶©óG+(²ÓviÑ/À>­ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þN þ‡�¿èÿ•=cÿ“¨ÿ…aàoúÿåOXÿäê?áXxþ€ùSÖ?ù:€øVÿ þTõ�þOÏò £Iд� ƒIÓíìcr †%&IJð¦iœ¼Óíóe}¹8Ææ  j(°ÒÿãÂûkÿ£¤  ( € ( € ( € ( € ( € ( ÿÓþþ( € ( € ( € ( € ( € ( € ( € æñEµ´2Ü\\xw[‚Þ#yfžitÛ˜â†�3É,’2¤q¢³»°U�(áøB|gÿB�‰ÿðAªò%ð„øÏþ…ÿàƒTÿäJ?á ñŸý >'ÿÁ©ÿÈ”Âã?ú|Oÿ‚ Sÿ‘(ÿ„'Æô(øŸÿ§ÿ"PÿOŒÿèQñ?þ5OþD þŸÿУâüjŸü‰@ü!>3ÿ¡GÄÿø Õ?ù€øB|gÿB�‰ÿðAªò%ð„øÏþ…ÿàƒTÿäJ?á ñŸý >'ÿÁ©ÿÈ”Âã?ú|Oÿ‚ Sÿ‘(ÿ„'Æô(øŸÿ§ÿ"PÿOŒÿèQñ?þ5OþD þŸÿУâüjŸü‰@ü!>3ÿ¡GÄÿø Õ?ù€øB|gÿB�‰ÿðAªò%ð„øÏþ…ÿàƒTÿäJ?á ñŸý >'ÿÁ©ÿÈ”Âã?ú|Oÿ‚ Sÿ‘(ëï éú„ðüØÞC<:&•ÐËm4rÅ,v$‘KÄ9#u(èÀ2°*ÀŠÛû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝ|wûR~Óqü‚ÃÀ~ Ó_Å¿¡'Ù¬õ�ZÆßÊ$œìÒ4¥ q«Ü¦K(nn;ö]ý•5?†óß|Yø²÷>/øñã5þ³¬_gP_ & Ÿé^—q°Ã&¥$L-µ]NÔ6�åé1K. ö¯Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Ù.ÿçÚãþüÉÿÆèû%ßüû\ß™?øÝd»ÿŸk�ûó'ÿ ì—óíqÿ~dÿãt}’ïþ}®?ïÌŸün€²]ÿϵÇýù“ÿ�ÐöK¿ùö¸ÿ¿2ñº>Éwÿ>×÷æOþ7@Vš�”*êÈÃÌʺ•a™\Œ‚‘È9æ€/P@P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( �?jïÚ¶Ëàu��‚<cÿ —Ç/¬¼àë(dÔ$°“P“ì–zÖ³ekºáâ{ƒåé:RlºÖîÐÅ—gÝÔ@²‡ì¥{ðÞîÿã7Ækãã?Ú Æ¦kýcW¿š=A< ˜ŸJÒ§·}VH Újš�˜[[kT…åhðÏ>ª÷UP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ãÚ»ö¬ÓþiÖ>ðuˆñ—Æïˆ¬¼àË(¥¿–Ò[ù~Ég­k6v›®^ØÝ+JÒâÙy¯^§ÙíÌv°ÞÞZ€s?²�ì§ðöúûãgÆ»Óã/Ú Æ†]CSÔõ bÔ#ðdZ„{fÒô¹—u³jïlÂÏRÔl‚ZYZ(Ð4‘ÅÆª÷uP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € øïö­ýªôÏ€Ú]�…<)d?ý«?j½+à‘eᯠY|gñ�ŽËÀþ´Žké’{é¾Åi­k–y»6?k>N�§Bc¾ñúý†Å¢†+ûë+öRý•5_ê—ß¾:Þ·Œ?h5 »­BHo¢ð<Є};NtͧöÑ´+c{yb«c¥Ø¢ø@X´È®n5@½h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( �ÿj¿Ú«GýŸô[=ÃöcÅß<`©gà_ÚG5ìæ{Ù¾Åk¬ë–y»þÎ[ÃäXXC²ÿÄëýŸ§”�5 í<‚ý”ÿe]cÂ:½ïÇ¿�W�âÿÚÆ&MBiµ†òÛÞÃå�>ÀǺÐkc+cusb‰c£Ø"ø@iñ]\ê@|Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (äoÚ«ö©Ñ?gÝ ÓFÑmÅ¿<\«gà_Z$×—\]Êlíu�bÖÌ›µÒÒðˆ,¬  â õ:nšcT¿¿ÓÀ<ïöTý•µ¿ kW¿´Çû¶ñwÇï3ê$ê/ ä·¼‹Ë6"0m\elgšÅÇC°EÐ4%K4¹¹½ûö€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ù+ö©ý©ôÙë@´Òô»UñgÅ¿¨´ð'�mVk«‹‹›©��¶±«ÛY“všLw„AkkËý~ý³4Í»/ï´Ð4ý•e�{Ãúåßí ûAÝ7‹>>x¹›PDÔZ+¸<mw�,í3iº¶eld{%[ÁCÑ[¥ÍÅèèP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ( € (ç?Ú;ö·ýœd Xø¿ö‰ø¯áφšF«s%ž�¢ºž­â vâ pš„ü7a¬ø§[K5xÍüú^�uo§‰­Úþkežàü2ÿ‚ÝÁ6¾)x¶ÓÁšwÇÁáMWRÔ›¤^|Dð_Œüá½JgÿU3ø¯YÑ!ðÞ‡k)ùcŸÅZž€¥öÆzèŒú¹oqoyoݤðÝZÝCŵͼ©=½Å¼è$†x&Œ´sC4l²E,lÉ"0t%H45P@~+𾣪\èz‰4 íjÉ®óG³Ö4ë­RÕ¬å]­ÎŸ ÃÝÀÖ³À–%0Ëˆå øñ'ÄŸø(ïìýð³öËøiûx–ÓÇòüZø¡§i7šNµ¥ørÎëÀºEPÑõ½V]jßZ[Í\i“‘s¥x{TÒ´óqb5+ûP÷ϧ€}õ@P@P@P@'~Ôÿµ7‡ÿgÚØXZ¯Š¾+ø­~ÉàOÚ‰®nn®®%û%¾¯«[Ù“y�ÙÁoKÝvù³4ÆV[ÛÝ4Ë?eoÙgÄ>¿wûDþÐ÷Oâ¯�>,c¨Û[j&+›ZÝD#ŽÖÚ$ͤZêY”²Åš-�‡¬tmQVêâpÐJ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÕþþ( € ( € ( € ( € ( € ( € ( € (ø‰øðæø,‡üãã.¿ñçR½Õ¾ ü4_x‰ øLÿ„¯Á^#ð¿‚¼Gð¿Çw·ú–™áÏßøÿÁ×ô{­gCmçY³‹Bñ•�ˆ´-RÕ4Ö»µ¿ÓP°²¹ºl@øcþ {ûmütø!áßþË_±üZøƒá‹?ê?´¿¥øKâN¿ð·À—x“[�ÂÞðÅŽ‘¬Yëšÿˆï| e£ø¯ZxüItÖgWŽÚÓGº]› ¬ÿaÿø,/ˆÿm¯�?´D~ø7§Ø~Ø_¾kÞ9ðßÂ=B÷Uð¿Åf†ÞîßB—ÃbK«Úlj²<=â}îëΰ›]Ðî,uÛÏíI Ò€?œ?Ù'ãçí£àø)í ñwáì×§üCý§|S¯|}¹ø‹ð>{}bK?j&ø‹«ñÒ(m5ëI„|H©£D.5{¦DlN÷R+@´íùªxþ Ûû:þÎÿ³Oìÿ¯ëþ �àï† øÙâ_ Ï{ñ§ÀºÅ„ âm#¾*ûP—J´²šúþ;kH±o'Ú.…Ôs‹›�8gûwÿÁbüSðcöŠÓ¿cOØçà„´gí÷VVôWrjwÞÑuËý-õxü'§è¾¹µÖñƒeg¦iÌ!³Ñ[Å_k·Ze–“«Iný2þÙðQßÙÛöKø â‹Gâ?Ã�ø±´IŸáoíÇ:&£«|Fñ-Òˆt{[(ô9õkè¼;̱ÝxƒÄqYÍc¥iQO)•ï%²µºü¶ø“ÿ�øémÿʶIýŸ|#àoüLøö~üÓõ‹ÝsÅþ:M·†uMwUø¡©Gy§xûN(/ü1âÏ èzLW1ÛK®é‹¨]K}ae¥Nò?Äí'þ ñcþ µãÚïö€ÿ‚—ø/EøOñᱨÚüð¿ÃßÁeã+oé·6GÂ+½_Ãv~ ´Ó"k?-ê6?´§Š´ë‹[ -´Áà�|dÑ.|§lò¡‹MkÕ¹Ó5?MuIRÛIºŠ(™,¦t»ÿðñ7‡|%ÿùý²[Å:æ•áÄÖþ"~Ù:>‘&·}m¦E¨ê·ÛUµÓíe¼–建Ӭ/.í Vgžw0«ü´·ûo0oø8—öde!•¼cû-²²�C<GÈ#‚9‡ûkºÁoø83ö˜±øé¨YxZñ¯�¿hý+À:¿ŠLZ=±Ö¾ ø¢øínuo⟇²K¥øpyê53®iúV�-Ôº•œ7?ðr‰ü%ñã×ì“ðƒáܶ~(øË è¾:³ñ‰áÉ"Ôõø_âˆ<eð×Ã7�Ø™naÖ/5Ä—zn�1[å‡Xµ¼Kd‡Uµ–è‡ü¿Kš_ø,¿ì¢ø’H5»‰<1û izü²Ä ¶¯3þÑ~5´Õd’Lîgg‰�\¥â€?F¿àä› +�Ø'Áw³ÚÁ-ÞŸûJx¬n^53Ú›¯üQ·¹ò%ûñ¬ð�“ ;$ pZ4*÷ÿü‰™¿àœß² bXÿÂ�Ð×$’v­Õú¨ç<*¨U€€?B( € ( •j_Ú�Ã_³Ÿ† H O|Mñ:_xØÉ5Ö¡w4Ÿe‡UÕ!µ&ê Þ舱[½^ñ³4Â%7WV;û,þËž%·ñ%Ïí#ûGÎþ&øåâ–þÑÓ4ÍHG5·ÃëIâÛmvË›[}vB––öÖ¨¶ž±UÓìڅĪú@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ( € (àïÛ;þ »û*~ݶZ[üoðe忌48VÓDøŸà[ë_ üEÓ´ÀòÉý�&·.�ªYkZ*Ë<óÛi>$Òu› :æ{›½2 ;›«™güìøoÿàþÂÞ ñ]¯ˆ¼YâÏŽß4½?PVþ ñO‹·ìÁã߇ÚZ|µÓ4M7Ã~ðÚ¯‡ÀíáˆR j ¹Ó£SáýCÃñ'‘böñ½¬Ö2Ýé:�®¡¤j:�…ØåÿÃ�ø7“öð1�QÕ¾6üA¹ñ7…üeá]÷ƾ-ð„çÀcÆ>¼ðܾ)𶛣øIÐçñ¶‰e}-Ö�¬xŸKñ›¦ëØjðèbûM²ž ý¾ÿa„¿°üŸö­øCðsÄ_|Ká¿|SøSñ#P¾ø™«xkY×!×5O‰ÿ|1qigsáoø6Â=),<'¦Í i·‹y=ì�}$2[ÛÚ€xüÿþ û+þÞßðNŸÙ³âÄsã_üJÒ/~/è×>9ø]¨hN©â}Ûã'޳ôïZëþñ›¬ÿd£K•¨­­ž±mléc.¡q¦ZÙY@û÷û~Àÿ³¯ìà�kÁß4`]øªîÒ÷Æ~:ñ†¥o®xëÆ3i‚ítxõ½RÏNÑôè¬4X¯ï"Òô�GÒt«V¼¾¼ûj7÷÷—@ þÔÿðC_اö¯ø·âO�~(¹ø»ðçÆþ3½�Tñ‹|)ñg†4�ĺϕZåî�âßøÒÞËUÔc�$Ô¦Ñ[K‚þûÎÕ.í¥Ô¯/nî€=âü·ö{ø•û_|7ýµ5Ïüe³ø¥ðºo‡øÃúGˆ|Ãû¶øa1è ¬iw¿/üGp·kký�ÅV pK6Óò€OûoÁ)dïÛÏUÓ|]ñWIñW„~%iVé0üLøc«éºŠuÔNl´oíhž#ðö¿ae,åíf¿ÑZ³‰~Åa¬YÙ;Á@MûÿÁ?c_Øûâ•ñoGO|[ø™áùóÂþ ø¯¬hzŽ›àýZ2ûu¿ øsÃ~ðÞ›®ŠÀÚê:ïü$7š\è·š<ú}ب¯þÑÿðK¿€?µíOð—öºñ÷‹þ0é~ Çðê/ hž×üaà‹õøgã­Wâ‚uí7Zðˆ5ë£w¬ë6Ú¿ö‰t±q¦$Ù >é$½”Ù?mŸØ«ágíåð~Ãà§Åíâ‡<+§xßEñì‡Ã}WúGˆXд½{I´¶–ëÄþñ†œÚl–þ!½{˜SJK§š+VŠòI£œÖÿgÏ‚ý›> ü8øàmCÄ:¯„~xn×ÂÚ£â˽6ûÄwš}¤“KÚÅÞ�¤èZeÅã4îK-"Â�n¤ÀÇ@P@,þÔµ†?g/ BL)âO‰%Fµð/�­™ä»Ôï$³G©êq[Э®JÆíZ¥Ðf›™�ÅÅ�Šþ˲÷‰ÿá'Ÿö•ý¤æ|nñ;®££hÚ’¤–¿lå�m¢­˜Í­¶»£-µ�•º­¯…¬ÂÚ[í<°~ˆP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € (ííî¢h. †âÛ¾âI¢m¬wG *ÛYC.G  P½½¬K¬ÛB›ŠCI K¹·6ØãWsÍ�Ëœ’hj( € ( € ( €>]ý¨j þΊybO|Cñ=¯�|nì÷š­ë7�šŽ£®-´+K†UšTU¸¿¸Æ�§n¹y%µðïÙsö_ñMÇŠfý¦ii_Ä_¼Jë¨è¤ˆÖŸ,¤Oô/ôžÞ×]¶µ+Ÿ§Â¢ß¶ Cía§–ÈôN€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( €8_ˆ?|ð§F¶ñÄ_éžÑ/5H4[]KVy#¶ŸT¸´½¾‚Å QÊÆy-4ëéÔe´§9 ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(ÿ†Îý–ÿè¶x/ÿnÿù€ølïÙoþ‹g‚ÿð&ïÿ‘(Ìþ-~ßß|àËýSÀ>+Ò¾'øÖá“OðÏ„´{+Þj·A–ÚmNqlŸeҭܺ13]Ü“�”mq::r²÷ìÃâËÿËûMþÓ2?ˆ>2ø‰ÓQð߇5(ÃYü<±u̓5�Ýž·klË™¦F¾O…­Ï;µçšM<ô^€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €?ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( €8_ˆ? ¼ñ[F¶ðïÄ_ iž-Ñ,õH5«]7VI$¶ƒT·´½±‚ùRDÂxí5è–#eÌ£9 ÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’èÿ†1ý–ÿè‰ø/ÿ®ÿù.€øcÙoþˆŸ‚ÿðïÿ’è{òÇìñàÝ{LñG†~ø;J×ô[‘y¥jqX<ÓØ^"²Åwl.¦š(î`-æ[ÜüÛi‚OG4i"€{õP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/ModalAnatomy.jpg000066400000000000000000003033021527064444300204670ustar00rootroot00000000000000ÿØÿàJFIFHHÿá@ExifMM*‡i ' ´ÿí8Photoshop 3.08BIM8BIM%ÔŒÙ�²é€ ˜ìøB~ÿÀ´'ÿÄ ÿĵ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛCÿÛCÿÝÅÿÚ ?þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( Ì�ø+÷ǯ‹_³Oì#ñ;â÷ÁÏà_ˆºˆ¾Ùi>$·Ò´j[;]wÇÚ�ªÄº‰t­kH”]é·—6ÌóéÓ ~ÒPk?ñ:w…>"üdðæ‘à�éŸnt?‡\—ž)±ŸÄº‰´ù,µÝn;�j BÁb¸¼K¡$ó¾÷JõÏÚ'Hý¦>6h_ðM‰Þÿ‚�øöetøuðËâÆ_ xËâZ|3Õ>(^ø“AðN±«xŸMð¶�¦�ñÞ¿öÖˆþ ñ _„måÕ;ib‹P¾† @ÿ‚§Á[­ÿàŸ:ÇÂ� øÁŸþ5ø›ÆsxöøroˆÉ¤kŸ_þ½ðúëZN�§ëš…‹ø¦ÓÅ÷·6K«Ûé¦k}+βû\o+ÄúAáïÚ«öyÕ¼á¿ê> iZn½oi ÝMñWÁ ¦[ø€én¯©øy5µÈ`“TÒ Õ,ä»±,·°[ÜÚÏqm \ÄXÜ-|A ßh6Þ)±Öô‹Ï ^iø‚ÏÄvº•�ƃu ÜY®£o­ÛkLú|úDú{­ü:”Wg-›­ÒLÐ2½rÞø±ð³âö§ü+O‰þ"b}�ûgþoxwÅ¿ÙÚ?jþÏþÔþÀÔµ°}¿ì7¿cûW•ö¯±ÝyþÍ6Ð@ € ( € ( € ( € ( € ( € ( € ( € ( €1üC­.�®E J°k²húœz,ïål‡V{)—N•üä’±Þ]¼Øä‹ |Ädܬü„þÓ>0ÿƒ„d¯ƒ¾$øëñ‡ö�ðµ—€|)w Yj÷: �ÀMsSIüK®éþÒÄl ã–u}OSµI™[÷0³Ìr¨E3ödñŸü!û[üð÷Ç?ƒ¿´o…ï|â{Ý{OÒ®5û€š¦÷Ö¯´ LM¦Ü|,’XQ5 >áarØ– ’€|À®¿~~Ò:7ü�Æÿ~"~ߟ|gð»Qøu�'ì©eñSíþ+ÑüS§x;GMVÆçá~O…ü+„µ‹kÄóø¿Cλª[\Ju; ;mSVh€<ûÄðZ� iðQûOØÎÏBøK¨|¸Õü;§ÉûI§ÅÛìmõ�„Úw�ïnÌÑZIá=ºwˆo&ð”›¼Lí6ì²Éð{5ùãþ ;ÿý¤ÿgo�ÿ²v•û/|q‡Ãþ,x5üA«ÍáÍá猴oÃ?ŒìtûVÇ[×<;âRöwMÁKyômB Yá�NŒîVUþ”u­oFðÞ•}®ø‹WÓ4L�®µ-cZ¿µÒô­:Õs}¨_K¥¤Xšy£�I°È 4ø}ûA|øµ©^èß ¾7|!ø™«é¢vÔ4¯‡ß¼ã-JÁm�c¹7¶>Öu+«Qo$ˆ“ÑN诵˜-zõP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÐþþ( € ( € ( Ưø/�'þ ‘ñŸœx¯àñ8ì?áixTdú �>¤â€-ÁY[þ ‡ð(+SÄ_À ”cñÆ®€åX«+`àí`zXñ§þ ²CÁXÿbôRÇÃ?€PrÀ·í%ñKh d�ݲ9íœP‰Á}eï…_kÿ†*ð]®¹­ûJËâoˆßQÖe¿‚çÄ7ž3°Óæ“E�âA¤Z{©‚ÚÄÒª¾×ÜqŠû?þ ]û$üý‹à˜ÿ þü´ñ—‚æý¶4/<>$×&ñ£ý³­üø½i|âþx`qnÐé6b(6m�„„¿åù�þ “ÿ(…ÿ‚KÿØ¡áïýTÚUq?ðW?õÿðH¯û4/‚¿ú„(Ñ¿àäÙ¯á�¿‹ß¾<øJÛZ‹âí'}ñBçâuÅþ¯-î•s/Ã|ðç…N‹¦dIbóŸ„ÿ·öoüµã�Yµ|ø÷Àú/‰c›b'Ùxo|W«ÙèºX�ÂH'Ð~ xâËP·‘Nõ>žkfWTDû�þ øý�?áL~ÂZgÄmVÃì¾+ý£<[«|Gº’hü»Øü¤»xOÀvœösZiz¯‹tæË“ŒY‹ Â4ýÌ € ( € ( € ( € ( € ( € ( € ( € ( € üsÿ‚õÿÊ0þ:ØÅðsÿV÷‚¨¿ü;þQ�ð[þƯŒ?úµü4øóàØI¨·ˆŠ­­¯´tÓoæ>/²ñ·}ys¦øšÇXµÓ¬®t�=­4 gHÖõ8åÒâŽÌ[Ýu¿²�Åû¿�ÿ³/À/�š”6¶ÚÇÅ„^ñ®¿kcÃcgâ=wÃZuçˆììc•ä‘,¬õÉ5 kA$’9¶Š"ÎÄî` ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( ˜¿lßÙ³Iý¯fŒ³¦¯«?‰>†ÏL×…ºÝ&‰âm WÓ|Sá-ZâÔü×66(Ðô‹�FÖŠæëOK«kk‹yåKˆ€?•¯Ù»âïüÃþ £x«öv½ý�¼Cñ¯áŸü$÷Ú;ÁÞ=ñÇ…tÝgZHašçÁ¿~A}¦>‹â ¶Ôî<+­ÛE¬[jpæ×AÔ¯5[yÀ=Cö_ýŒ?oø(�íóàßÛ›öàøq«|ø}ð׾ñ.•áoøsPðMö¡ÃmB/xῃ|â™.|]káS¯˜õoø‡ÄÑ%¾­o{¯®Ÿ¨Ý꺉M4èø8/ö5ý¤¾9뿳¯ÆÏÙÿᧉþ+ÃðãKñO†¼W øJ›Äž+Ñînõ­]ðÞ­oáK®5�oN»–-RÚõô«;Ó§ÉijobŠ Äš€<ïþ Eâ/Û#öÿÿ‚^ü&×õïØ»ãG�¾4é¶•±ðwà þ(xƒÅcÂzÁÿ‰vmñ¼)uáé>Ôõ¿&›ÕæŸu§Zܽ�—öÕåÍÌe€<ûþ ?û5~Ñž9ÿ‚ZÁ1>x'àÆ¿xûÀ>Эüwà� |+ñ׈<_ૈ~é–Áâß i: Þ³áÉ¢¿�줋X±³t»G¶`&R”ÈÁQfÚWâßðK“à/Ùçã—�ÇÃïÙkᇼz|#ð—ÇÞ$×ôÆð·öއâó£h¿ð�kx·¸ûn™¬›+Û_"o>òŸhßðp§ìqñïöœømû<øßàGÃý{â}çÁ½{â]ŸŠü#áWÕ|ZtŸˆ¶^{MoJðü Ú†¹o§^øXßÚi wªDu{K”°šÆ+û«¿ÿà�¾7þÔ_³³¤þÕÿ³/‰¾ë~øS×þñׇ<_á£ñ#¶ÞÐm5/Å xË@Ð5-'[—RÕ4i­-N«cö7‘C©»‰-íÀ?‰¿ü%øÍáO�~<ÿ‚SøsS{ý_ý´¼/i¢9ŸÄ:cø›áÏ„¼[p-åŽ(ì5øâ×^×£¸DûZm¬“½©²¸Úþ‹Ÿ| áï†ðGÃo Z  ü>ð�‡<á»!·ýAð¶�g¡éçbª–†ÂÆÞ6`ª”¶Ñ’° € ( € ( € ( € ( € ( € ( € ( € ( € ü¥ÿ‚Öü:øƒñWþ ×ñ—Á ü ã/‰4Õ5ï…ižð†5¿x£Q‡Nø¥áCP–Ã@ðõŽ£ªÞGaamq}zöö’-­�¼×3”†'uƒþ™ðçâŸø'wÂ?üQð'ŒþxÏMñ/ÅYõøûÂú߃¼Oa£ñ'Ä×Ú|׺ˆltíVÖ+ëˆ/,äžÒ4ºµš+ˆ Ã";~]þϳÏÇíþø¡ñ›Yøñ‡Iø=¨x³ãU͇Å}OáŸ�,>ß[ê¿ u+ .{O]h‘x^æJúD²°–UÒòíÒÚÜÉ3*PŸÿÁFÿgÏÛSà'ü›Lý¿¾þÎ>7ý ¼'q/ÃÏiÞðLj|kßxgᆓð¯Äþñ6�àý?Uñ‡î'°ÑæÔ,µi4Étã¯eqiuwue¨XZeÁ`~~Õ_µ�Œ¿àŸ¼;û(|um_Sø5£kÿü!á/…ÿ|fß üK®x«HÖõx¶óOðœW>«£,“Åqo¯Xh×û-¥š{m®ˆõ¿üóö ý¥ö›øÿý�ü'ÅOü%�°xïá…¥‚ë½ûø_ŸSðÞµ¦øf«ã3\Óµkß ø·DÑ$}~ÏO²Ó/t›Y£¸Ô¯t .ñ/íùÿ`ý¬5¿|/ý•àŸ>'ý•|EµxÿâOÅ?ͯøfÙ3iym«üTøMá øOG±k†Ö/,–×Ä^6ÔŒ6zSJ—Z ôÍà Ä~ð/ƒt/ëðx¯ÅÚ?…´ 3Å^(µÒ¬4+oø’ËJµ·×5ÛmJ¶³Ót‹}[TŽêþ 2ÂÖ K®Ú’8•h® € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÿÒþþ( € ( € ( € ( € ( •ÿm†Ÿ´ÅßÙëÆ>ý˜>*ÙüøË¬^øeü;ñú÷TÓ­ô{é—Þ"€ÞèÚN·©[˪hjl2[iÒ¸–é3%°-p€˜?ðN¿ø"ôÿ²ÏÇ]Sö®ý£¾2'ÇÏ�ÓÏâ+íæÒÓX:6‰â/G{oâ�êÞ ñÌšÿŒ¼a«Ùêz�œ7z…†—o¦�KS½’=WT¸²½Ò€?y¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( €<+öƒøÛÿ Ášg‹ÿáñ?Äí/ÙxoûÂqyÚ�·Û4­kTþÓ™|‹ŒYCý�öY`Ä÷¶ÃpÎãÏøyý[?Æ�üÿïmðò?ú¶�øÿÞÚ?áäõlÿ?ðÿ½´ÃÈÿêÙþ4àÿ{hÿ‡‘ÿÕ³ühÿÀþöÐÿ#ÿ«gøÑÿ€?ýí þGÿVÏñ£ÿûÛ@ü<�þ­ŸãGþÿ÷¶€øyý[?Æ�üÿïmðò?ú¶�øÿÞÚì>ÁC¾ø¯ÇZ/�üqà?|!“Ä›àÑ5Ï$º=Î¥æE½•ÌÏ«ÙGvïäE¨H¯eц© I„Èú@P@P@P@P@P@P@P@P@y�ÆO‰?ð¨¾ø�âü#:׌áþÇÿŠsÃÑùºÆ£ý­¯išúySgìÚo¸ýÛbÖÖcòãu|+ÿ#ÿ«gøÑÿ€?ýí þGÿVÏñ£ÿûÛ@ü<�þ­ŸãGþÿ÷¶€øyý[?Æ�üÿïmðò?ú¶�øÿÞÚ?áäõlÿ?ðÿ½´ÃÈÿêÙþ4àÿ{hÿ‡‘ÿÕ³ühÿÀþöÐ?ðS/L…¯µ¯Ùßã“¥@ÑíFîÚ`´�åHšW’æÒÖ ‚걤·,’2Gæ¡pÔúà/øOâw„´oø#Y¶×|7¯Z­Õ…ý± ŽJOiubk;û)•í¯¬nR;›K˜ä‚xÑЊì( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( øûð À¿´?�n¼ã;_*â/6ëÃ~$µŠ6ÖøëöwñÕ¯ì³ûS]yk•kð£â½Ô²6�®hí'Ù´­?PÕn@ótùv­¦™©Ý²Ýh÷Jt-tF±[ÜZ€~¤P@P@P@P@P@P@P@P@P@P@P@ú®•¦kºf¡¢ëZ}ž«¤j¶w~§¦jñ]ØßØÝÄÐÜÚ]ÛL­öóÄí±H¬ŽŒA�À’¾$ðß�à�Þ?¹ñï€íµoþʾ4Õ¡>0ð€šK»ÿ_ÝÈ�Esk,îÂ)# –ú6³<‰±n�xkÄ“®£‰­Nú›à_xSâW…4ox'Yµ×¼5¯Z­Þ�¨Ú1ÚÊII­î"p³Z_Y̯m}csWVWQKmsSFé@mP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PÿÖþþ( € ( € ( € ( € ( € ( € ñ�¿¼ ûCøëÁž3µò§‹Íºð߉-b�µ� k Èõ >GÛæA.Ô‹SÓ$uµÔíTE/—¹£´ŸfÒ´ýCU¹ÍÓåÚ¶šf§vËu£Ý)еÑÅoqjúŒX§øá¿,~ÂÃ'Ðsÿدóü¿ˆ?7Éü‡óÿ?˜ O®>¯ÿدùôþ ùçûßú0Üv,_óùÐ ÈÄ?Oéôÿ<Ð}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð  í^ËI×ô½CDÖìlµmV³¸Óõ=3P·ŠîÆþÆî&†æÒîÚex§‚x�£’9•”�A ÉÝ{EñßüÏâÏ�¼­ã/Ù_ƺ´GÅ^=Ýÿ€µ ·H"¸¶–áØG¯;Ç·m>ñé©E¢ër€~¤ø'â…~"ø_GñŸƒu›MwÚíªÝéÚ�£®¤•– âp³Z^Ú̯m{csWVWQKmssFè WÚ—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…j_ï >Ô¿Þ}©¼(ûRÿxPö¥þð íKýá@Ú—û€µ/÷…(¹ø‡éýÏé@Œ ´ÿ<ÿ{ÿB  O®O³ÿõ›ù~Âñ)õ#߃þþ_–hA'Ðþ<ÿè-þ}„áÁöúŸëµqý}±ó:€ ( € ( € ( € ( € ( €?ÿ×þþ( € ( € ( € ( € ( € ( € (Ã~?üð/í àk¯øÊ×ʸ‹Íºð߉-b�µ� k Èõ =ßo™»R=OM’Ak©Ú¨Š_&x­níÀ>"ø ñ÷Ç_³ÏŽ-¿e¿ÚŽëËX¼«O…?®¥‘´}kGi>Í¥éú†©s³ÍÓäÚ¶ºf¥vËu£])еß)b‚{PÓæ|uäýúÍ�¦?<| Þp;þÿ\~ž»sš¨÷Xä`~¿žJŽ>¾üq¸›Þ›³þ}r¿�>Ø%€+5øçëžLÇûÙúvÔèÀwÆyÿа!øô Φ1ËŸ×üúg4Ïí5þÿþ:òÿ?‘ þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(þÓ_ï�ûâ€í5þøÿ¾(;W�I×ô½CDÖ쬵mV³ŸOÔôÝBÖ;«+ë+¨Ú‹[«y•¢š£fG�Ô«Î0 ~ZjÚ�ÿ`/\x³Á±ê¾0ý˜.ð–³k­x[µ[½?Pµå$Bvɱ°Ym®í¥W·¼³¸H®m.c–Úâ$š'Eé´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø ûM¾?ïŠ?´×ûãþø þÓ_ïÿã ?óùŠrêc oéü¿úÿ®UÔsÕ‡Ó<ñí¸#ôÀ  Öüüv=?£góØçh”½¤güúŸý—Ôç  ‰užàôÿõäÏÀ  I8nøö'úãñôõ=¨ʸ>ÇëüŽÕÿ'·ñL¯Øþâ6ÿìÞþÔa±úóƒŸÌcß%P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € úŸåùÐWlsø~=ôúÐ…|}øàoÚÀ×^ ñ•¯—q›wáÏZÅjþÕÚ=‰¨XHû|Ø%Ú‘êZd’%®§j¢9LSÇkwjñÀ¯�~:ýŸùéùsÿÖühÜzØÈùÏçÿÖ<ÿ?C@ëÿÎqžãò-Ïóì €5 Õþ,ôïéÁíøÿ§=Xb ðpw~¿çéÎç®  ˆ.³ŒŸÇðÿ{Ÿ¨�‘´V)ó�œ�åü¿ÏQ’J€h#çþ×ôëøŸ~¿(”lðz�Çúæ P¥9ÿŸéþ}zÐÐ@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € kýÓþÏIÛ’}8ÿ={ž¸üñ@ÓÉ€F~¤éŽ=:õçŒb€>}øùðOÁ<uàÿ[š/6ëþ"¶Ž6Õ¼3«´{ÿO‘Ây�>Ô�QÓ¤eµÔ­—Ë›dÑ[\Ú€|?ð_ã·�þø¾Ù³ö‘º! Û|2ø›q,�¦kI³é–ú•ÆÃ-„�VÛO¿ºdºÒnûZòÒ8'µûÚ÷T Ÿ›õàŒcŽ¿Ïž:â€9;Íl üÿ¯_çïÐþ'�À½×ˆBç÷ƒ¿þ»r>¾üçåÁŸÄ qæzõ==ùÏL}~™@2dñHþð~$ÿ‹õ¿¼0S(ÿ–œ}Gø??�à:°ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢ÐOXÓ5­:÷IÕí­µ3R¶šÎþÂòçµ»µ¸CÐO †Y#‘«)ò0FTáSuâ_Ù+Å“jÞkÿ| ñ6 �ªè�#\^xVör±¬Ð<¬BÜF�c´½�ǯmznªË …õ}Å¡|HÑüM¤Xkº¥£¥jP-Å¥Ü)"7 ¬¬âš'VŠx%Hæ·™£YQ•@5¿á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢Ðÿ ZÿÏOÑhÿ„­ç§è´ÂV¿óÓôZ?á+_ùéú-ð•¯üôý€øJ×þz~‹@ü%kÿ=?E þµÿžŸ¢ÐÓÅJOúÏÔ~¸ ïü_Ÿ!€-Çâ�p<ÑùŸñ¡oªàÕƒÄÀ‘ûÏׯÿ«ž¤ûî€nÚøˆ~ð~}½ù>Ùöç4ÓYë�±óþÿ>ýÈǧ%€:Û-T6>oNÿŽO_Ë?�u–wá±ÎËžÜýáëêh¦¶¹Î9àþžãƒøŽAÿgPìgŽÇß§þ;ÏéǦ(I¡ô<ÿž;Ãß  ©Óñ Ð@P@P@P@P@ÿÒþþ( € ( € ( € ( € ( € ( € dœ.}ôü—ç@²¶?Sþ}þ¼{æ€0î¥Æ}N{�åŒp0:žOjåoÏëÿ×Sþy9pÍ?~ø;ão„.|+â»p³Dd¹ÐuÛxãmSÃÚ™M©{bí·|2ac¿±‘’ßP·Qž\±[Ü@ñÂ/‹Þ2øCâË?Ùûãåð‚RÛáïÄ{Ç•´ÍWKó µ…•Ö¡6Ñ5›2‹[Û—Y´Ë”:>®Ð¬pÍn÷}Ï…n'Î5m€ÿÓŽOãþ˜¹ÿ'ŽŒ…?ÃË™³�lÿ¸^î¿÷_óØ É—áEÔ¿ó4mÿ¸1oýʧÿ«ò  /ðrñ³ÿv?îOáÿ!ž%þtXü¼'?ð˜‘íý…ÿ߆þŸ&€þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö þ�çýGÿ_ýö  —ÿÆ«eu¦ê^(†öÂö -®í.|:³Aq«¶H¥�õm®¬CŒu |%ã_†ž1ý�üE±c}¨ø›àgˆõ#Õåµ³yo|#}q �sXË|ȳö¥…Ü—ñ[k)iº„¶×éerÀmxcáÖ›ã=KñG†>#[ë³j—šv¡i¢nŠh›*ÊÊÚ·™ ðȯÕ´ëÅ­ÌrÛÜEÑ:(÷ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ü);Ïú�þ¿ûí@ > ÞgþG"}¿°¿ûî?Ÿç@àÕâÿÌߟû�?òµß×'ñæ€.Åðšê/ùšwܯþå›ù~€5`øsu3âÿ÷ Ûÿ¹#ý=°FXrÛÂ7øÎ±¼úpÇþÞŸóǧö[Ý?çóÄ �΀£ ^Kžþ¿ž~P è € ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ‚nŸ€þt‡vü}OõôàïÛ¾~P7R—¹ÇSëÏÔ�×9û§ô 1Öç 9ç?¯Ëþyd–ò™¯³¬éIŸ½ªiëÿ}]Ä£¸ü°ÝÎã@³@Mñ“àß„>6øBã¾*·Ù*y—»o6§áíL¦Ô¾±v+¾'ÂÇ}`î-ïíÇ—&ÉRÞâÜäïƒ|_ðCÅöß³Ïí s²4òíþüG¸‘Ι«i…ü�:ÊûQŸo™c&ÚÆþå–ãJ¸_ì�_b$3Àú@P@P@P@P@P@P@P@P@P@P@x_ŽukZj~º¶‚óÃWÐÍa}eqK«lÿ$¢à0æ 91F¥N6Èø�&ÀÎË›oþÉÞ(kûÔÙÐõÍ'ĺE†»¡_ÛêzN§n—6W¶Ïº)¢~:¯±¸h§‚UI­æI!š4•Z€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €74¯êzL¨ÐÎòÀó-&vx{€>SÒF²mé• pÓï¡Ô¬íïmÉ1\F�È܇�ñÆøÜ2>27)ÚHæ€.P@P@P@P@P@P@P@P@P@P@P@P@P–ê—ž_‰õ³÷ZÏÜØZ·¹ºsÎ1Õ@=CºÈ�ž1þòßû7 ÇFõ2\¨çü�|úœçší¬ß g¿¿áéÏ9'§NÙÍoÃÛê•Y € ( € ( € ( € ( € ÿÕþþ( € ( € ( € ( € ( € ( € ¯7o|_óÿë vôà?¶æ?úüõýp &«!ÃtïôõçŽÜv¼f€<“_Ÿþ‡Óü:ŒçŸÏP޲|G¡¦OÍ®iK××P€{÷÷_Ä�´ôäß> øCão„.<+â«}’§™q¡k¶ñ£j~ÔÊmKëb»â|,wÖâÞþÜyrl•-î-À>Nø7ñ“Åÿ<_oû<þÐ×;#O.ßáÇÄ{‰éš®˜_ÈÓ¬oµ�»ì_ mc}rëq¤Üì�_b$Û€}ë¬kš-¯Ú.‰,Ĭ'úÉä;W¨ ¼$?*Ý™À<ŸPñ–µzíåOöIùbµXÛ§ ÌÍêU£CÔ"ô  ؼE®BáÓU½$âYštϼsy‘‘ìWËÁ ëAñ¿Ú$ŽÓWÆîBGzƒdläà „åcÜåªlŒó$j ТÐ@P@P@P@P@P@P@P@P@Ÿ«»G¥jr!ÃG§Þº‘Ù–ÚVð"€>w  ¦—§kzuî‘«Ù[ê:f£o%¥õ•Ôk-½Í¼ÊUã‘‚ä†FÚèC¨eø~xÿ¯à9jôŸ\dGϦOýx÷Çáü'%€=ƒI��¼ú~¿×?_NøPþŲÿ´^çðõ>ƒðÍt�vúåÿÖ  tP@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿæµÃ~_�ÔPžë ÜàßýoNž¸ü¨Æ¢ € òoŒŸü!ñ·ÂñU¾ÉS̸еÛxѵ?je6¥õ‹±]ñ>;ëqon<¹6J–÷àø ⯋¾ø®‚5¹�Nÿ‰g€¼w<’6�¨éqNðXÚÜ^Ïó=”˜Xl¯.X\éòÓ52‘Å �}@í~ ÔßPÒ9›tö2}™˜œ³ÄZn¼ì&,ç'ÊÜrMu´P@P@P@P@P@P@P@P@P@š×ü�µoû_ÿé,´óÕŸªéZn¹¦ÞèúÅ•¾£¦j6òZßXÝÆ%·¹‚Q‡ŽD?ƒ+ .ðÈÎ3âMß9Õ-xÿ zóÑ@>¶ € (⊠ü;ñG@¼ð߉ )6ø?ãmb;[+ XÞ÷Uðî«xØHãA…K¸Ðgc žµe <­o}l^ ·¨ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €=Àò¹ÿ°œßúKeþýTÜÐ@P@P@P@P@P@P@P@P@P@P@P@PÊ^5l|IñûÚHëÿP=0ÿtÿžã¥z…Øâí�ü¾ŸÔÿñ í¡œ¬güô NÓ¿öaÿ³P]mþñê¹@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@üŽ>ÿ±ŸBÿÓµµ}‡@P3ÛÃu –÷¤ÐÊ¥dŽEܬ>�ˆ8*ÃXR€<ûPø»I¦Þy*NE½Ò—UÏe� p£°x�½d8  ؾê%ÀšúÊ4Ï-žgÔ#Ç'ØÈ¿ïs@¾‹á�?Eýìa®.Êí7SYAûÂ, Ž ¤#†�©!€:*( € ( € ( € ( € ( € ( € ( € ( € ( €"ž¸†h$û“Å$/�îH…ôc@=j6eäÖw*VHœ€ØùeŒŸÝͪH¸aÔŽU°êEQ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € UVvUE,ÌBª¨%™‰ÀU$’N$ð3š÷� i�¥iöó ·¸¸^»%—»$dŽ0‘±ÕŠåvÐýP@P@P@P@P@P@P@P@P@P@P@P@|¡ãoù)>"ÿIÿÓ™@¡á~°ýò wÐþäçµzv�ÿ³ýš€:ëoóÿ�PÊ( € ( € ( € ( € ( ÿÒþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@üŽ>ÿ±ŸBÿÓµµ}‡@P@P@P@P@P@P@P@P@P@P@P@ºŽ‘§êшï­Òm¹òäå&‹=|¹T«¨$˸#`oVÂíæ[À1$‹�IG¢Ïm�ôÝj[ó?—4Ÿð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿGÿŸ�OþÿZò%ð¯ôùùÔÿïõ§ÿ"Pÿ ÿFÿŸ�OþÿZò%mižÒ4§[Û™.ݸ¸o:Tê3#b £Db RÅr~€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ùCÆßòR|Eþþ“ÿ¦-2€=CÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@n¬þ3ðª"³3x§AUU³3jö *�’X’d“�œŠû7û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ û:ÿþ|o?ðþ7@öuÿüøÞà4ÿün€ìëÿùñ¼ÿÀiÿøÝÙ×ÿóãyÿ€Óÿñº?³¯ÿçÆóÿ§ÿãtg_ÿÏ�çþOÿÆèþοÿŸÏüŸÿ�Ðý�ÿ>7Ÿø ?ÿ ‘üu‘|LñrÆñH¯¤nI‘×:˜Ã*À0È ŒŽAdôß õ‡è?•{¾‡÷#ÿ=¨Ó´ïý˜ìÔ×[Ÿüz€.P@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@5ÝQYÝ‚¢)ff8 ª2I=€šãïø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@ax†V�OÚ§tñÄݾ]¯!º˜À>Þ¹Åp”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@v•š+¨Iùcx�}Œ¡Ãè?t䟫uP@|Uÿ’ÁâÏ÷ôýF4jîø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@sÞ%ÿ�¿ëî?ý=qP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@sÞ%ÿ�¿ëî?ý=qP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@sÞ%ÿ�¿ëî?ý=qP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@õîí´ûë› #©ß[ÙÜÏg§-Ä6�¨]Å ’[Ù »�ô{Sw2¤âÜÂ_Ì“äV ˜¾~ÒÖŸ¯õ¯xÏFø³áËËøµ/]4Ñ­í¥¬Ï™´£xDò\éð…�T²}Ó(_í+c-„Î,€>© € ëüB³ÿ„Sã?…<ë={A¼‡ìÛ¿`ù.uM2ÖM¾UÔ[|ÍWJŒ³îûu�™¦»-�Ö”PYáù~ÿ·oý¸ ²€ (à�Š¿òX5xLE{áýnÔf xéÿ¼µÒµKØæýÍÔ{|½'U‘X[WÌúl€ÚAû,~Ð6_¦¾øsñ6ÎO |qðsOg¯ø_P„iɯ ;äºÕ4»WÚÂî¦M_GŒâÜ7Û¬„ú\޶ t€p€´P@|Uÿ’ÁâÏ÷ôýF4jî%ÙÂñÓÁÞ}—ˆ¼;{öwü$Ùß»»Õ´›Y6yW‘móu}" ~Í»ûCO¥¹@eÐ@|Uÿ’ÁâÏ÷ôýF4jîßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊ>ßaÿ?¶Ÿøÿ íöóûiÿ�0ÿñÊž9¡˜fc”zÆêãóVoó×9@$ �j/Ùt|WûÄŸ†×ßð‡|tð‘{áÏÙMý�ý¿ý�ûËM'Vº‹o•wß/HÕä'웾Ã}æirÿ¢'ì»ûQŠßnøiñ.ËþÿŽžóì¼EáÛØ?³¿á þÎýÝÞ­¤Úɳʼ‹o›«éömßÚx}-Ȳû.€>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@U½º[+innØ>Uþû± ‹Ðà#'²äóŒ0œÜÝOw!–y ±èÝAýÔ^оÀS’XÐz( € ( € ( € ( € ( € ( €¬ÈÁÑ™NU”•e> ‚>àþ|Py¢êM} $ÜÏ61æ#gkã`8èßÄB€mP@P@ºÖ¤Ö0ªCÄóä+c>Z.7>0AbHUŽ­ü 0ÌÎÅݙَY˜–f>¤’I>äþ\Ðh € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ’)e‚E–häS�Êp~‡ÔêA 8 Šô-.ûíö¢FJ‡Ë˜›ÀÎåàpêCcœ¯lЕ|kûPþËÃâÀ±ø“ðÚûþïŽ~òo|9â;)ÿ³¿·¿³¿yi¤ê×qí1]DWËÒ5y7}�·Øo¼Í2LZ€'ì½ûPŸŠ¦ûá§Ä»øCþ:x;βñ‡o`wü$Ùß»ºÕ´›WÛå]Å·ÍÕôˆ· `ßÚ™¥ÊE 'ñWþK‹?ßÐõѨ¸ð¿X~ƒùP»èr?óÚ€=;NÿÙ‡þÍ@u·ùÿǨåP@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@sþ%$XEïw>ãÊœÿ0ê =P@P@P@P@P@P@ÑxhŸ·L;W8÷C�Ë'·~ÔÛP@P@O‰Iût#°µC�s4Ùüð;vï@íP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Öø\œ_ÀÛ{Ÿ??žnÝè« €>5ý¨¿eÑñ`XüHøo}ÿwÇ?ù¾ñ”ÿÙßÛßÙß½´Òuk¸¶˜®¢+å鼄›Bßb¾2i’¢|mà?�šÏÄoëz7Ľ8x_âÖ–m4ÿè—çO7÷Z™i¤Ý_ZÙÉ�Ô‚È]ߨD<¨ŒÍs`O#ÈûSÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@Ï÷íÕÿEý¢¿f¿ø)'ìûû#x@øQ}ðÃâ•ÇÀh¼G¨øŸÃ~%Ô'j^ñÒuM;ÆZN•l`Ò­"—K7:çÙïKËr/!+o@Ð ?ßðO�ø*'íûSÿÁBhÙ[â.�ðŸOøsð¯Jø×yá­Cžñ.›âˉþ|XðÏ�ô!«êZ—Œõ­6æ9´�bê]Mmt[6¸¾Xf·kHQ­åû+þ Ûü¾=Wö„ÿ‡„KàÉ4Æñ†�~Â1ÿa¥yž!ÿ„Œéÿð‚*ʾ6ÿð‹�§�‡ü&¢a©P+¸ôÞ€ ü¾ð_ü3áO�¿o½{þ ÷cðãâŸÄ=Tñf•q㋹|6|<Þðe×�/$†8uY5Ï.êÊÕí-·éèÂé�ʽ~ Ð@P@PÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@bëð4Ú{˜$IÈÝPÈçèªå�^úe@8( € ( € ( € ( € ( € ( € (¨ðÌ e¸¹ÁرˆìY™d`=Ô"ç�â3@…P@Äx—þ?¢ÿ¯HÿôtôÏP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@g…ÿåûþÝ¿öâ€:Ê( ÉÚçáž7ø±âoøNèè_4'ðõÎ�ªA'Ù~ÞÖ¾Ѥ†Êîu*c™Jí²½cû†>MÆûG>@ÿìÑñÚ?Ï7�#ð7ü»à'�¼á¹ücâïxöxñO…|#mk{sâ¯øâ§‹µmÃvözTrêwsëš�¥®™®�—óÉt±YÆ÷ŠÀhÿÃä?à«_ôŠ_ˆ?øh¿iþfèã?ø ߉5ÿÿÁS?i/ø«A›Âž(ñOÂ�ž$ñ'†'·½³¸ðÞ¿®|høk©ë ÖšŠG¨ÚÍ£ê7W|–÷ñÇ{Û˜î‘gWUÒÿ‚x»ÅzÏÂÏø)̚ljüC«I§~Ív|𖵩_=�ÁðïÆ3ÙµÕÌ­m1h¢o6æ8Î쪕òoø$ïì±û@ÿÁC¾üzø?}ûOxËáÀO x³Áþ%ñ Ñ`Ô|Iâ߈¾4Öô]kNðç‡îî¯|E¦E‚ü5§iޱ¨i’Ìö·úƧ¦I>Ÿqme¨xxÓ¿àœ|oýœ?à£ÿ?à–Þ&øµâ}ká�Ä�|xø?xëqzÚ^Ÿwað»Ä^0ðÅ� xzïU¾¶ð§‰nü-¥BÓYÚÞÜÇäjÿÙz”ú„ºn›}dòÃOø'Þ•ãø+OŠÿay>4üBÓ4Ý]ø�¦/Åë8í�ŽîÇ…¾_ø½.'Fº[q.£%¯öeÞ.Hû±8Fþø>ø:?‡_üðú-R÷\‹À¾ 𷃢ֵ £QÖ#ðƇc¢&©~�Eî ¶"îè+º‰å“ À;J( € ( €?ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@gƒÈ<{Ð1yáÄ‘ÚK9VܘdÉŒýÆPYW¯ÊCàôÚ0´ŸÿÍÿüö´ÿ¿“ñŠ?á¿ÿžÖŸ÷òoþ1@ü#7ÿóÚÓþþMÿÆ(ÿ„fÿþ{ZßÉ¿øÅðŒßÿÏkOûù7ÿ þ›ÿùíiÿ&ÿãÂ3ÿ=­?ïäßüb€øFoÿçµ§ýü›ÿŒPÿÍÿüö´ÿ¿“ñŠ?á¿ÿžÖŸ÷òoþ1@ü#7ÿóÚÓþþMÿÆ(ÿ„fÿþ{ZßÉ¿øÅðŒßÿÏkOûù7ÿ þ›ÿùíiÿ&ÿãÂ3ÿ=­?ïäßüb€øFoÿçµ§ýü›ÿŒPÿÍÿüö´ÿ¿“ñŠ?á¿ÿžÖŸ÷òoþ1@ü#7ÿóÚÓþþMÿÆ(ÿ„fÿþ{ZßÉ¿øÅðŒßÿÏkOûù7ÿ þ›ÿùíiÿ&ÿãÂ3ÿ=­?ïäßüb€øFoÿçµ§ýü›ÿŒPðxfRÃí7ªȃs3@Ï>å\{êà‚+h’T$h0÷ä’y%‰ä’rO¯-P@Äx—þ?¢ÿ¯HÿôtôÏP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@g…ÿåûþÝ¿öâ€:Ê( ‚>*ÿÉ`ñgûúþ£5x¿ÅÏ€/ñ" xôøgâ߆D7š·k1²þÖ{Km§j1•1\!]šn¤ÿñìÇì×eìýœÙ?e�ÚA~$½ÏÃ�ˆ6ŸðŠügð§�k­èW‘ íå±.u=.Ùö»ˆ/›ªéQäû}ˆ}5Ùl€?@tïý˜ìÔ×[Ÿüz€.P@ÿðVßùN?ìkÿ_Ÿ²þ¯�r€?² þ6¿à�Ÿò™�Û_þůګÿZÀ´æßðAOù%?ðT_û6]?ÿQ¿Œ”ö·üÿÿ$Çö·ÿ±óágþ£Þ/ øqÿ+=ëö9|LÿÖ;ñ-xïí)ñ/Å?ðN?ø.'�jÏŠ_ ¼g¯|2Õ¼Gâè—ZM¢ÙEâÿ üAøNÞšûÂZÞ¢bе GÃzƬöú–�=ì .ô«½>â[¸‚å?³o‡^4±ø‘ðûÀŸ4»;Ý?Lñïƒ|1ãM;OÔ–Ôll|S¢Xë––wëo,öë{mo7KóB'IrÈ�]€;*( € ( €?ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨ξ>þÍ'â¤Ä‡wßðˆükð—“{áßÙÌtÿí³§þö×JÕ.âÚb¹Œ®Í+V}ÆÐ·Øï7éÒ¢€wÿ²‡íEÿ JKï†?,¿áøéá–Ï_ðõì?Ùßð��8»Õ´›W "¼ˆ/›«éd@ö†Ÿæir2Ù}ómþñê¹@P@P@@a†Ž8##ƒ‘Áô ïÏjZ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@ûJ~ËâðÓþ#|7Ô—Á_<%½ç†¼Ok;éË­}�¼Û]/Yº¶S,SÂWn“«íw³ÏØ®Ö}6]– ²ÿÁQQ#E“à䬨ªe—û<…F ’Ò8ù›ËŽ4ÉùQF@-ÿÆÒ?ê‹ÿ倸ÚGýQü£ÐÿHÿª/ÿ”z?ãiõEÿò�@üm#þ¨¿þQèÿ�¤ÕÿÊ=ñ´�ú¢ÿùG þ6‘ÿT_ÿ(ôúq@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P�xãïÉÞ6ñ¯€|¯ÿlë¾ò±-½¼�¤ÝG$‚Úâm#TMÖºŒVÇû>îDh×í<Úýª×mË{-P@P@P@P@P@P@P@Pâ_øþ‹þ½#ÿÑÓÐ=@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@užÿ—ïûvÿÛŠë( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@ù¡ñ×ãŸ�~=øÚçöeý™î|ß7͵ø¡ñ>ÖYIÑt•“ìúžŸa©Ûg˱‹sZêz�«5ΫrÃCÑ|Ñ$óNöOÀÏ�ž øà›_øB×ÌšO*çÄ>!¹Š5Õ¼M«,{$Ô/Ý7ypǹãÓ´èÝ­´Ûfò¢ó&’êêèÙ¨ € ( € ( € ( € ( € ( € ( € ( €8ÿ@Â[{œ�€žÁ•šE݃¶8þ×ËÐ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Ÿ† d·¸��yS=Öà°öÝ#/NªzÐK@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÑþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@~i|xøëã_޾6¸ý˜ÿfk�:i¼Û_‰ßme‘t­II¾©ac©Ûçɳ‡q¶Õu+gk�B内¢‰ešwp±>| ðWÀÛxCÂ6þu̾UψüGsk«x›VXö½õó©o*Þ-Ï›¦Æím¦Û1Ž6šyn®®=¦€ ( € ( € ( € ( € ( € ( € ( € ( §‚+˜ž”5øÕãYÿf?Ù–´êW>u§Ä¿‰6“:i^ґž«ceªÛ‡û<6ûͶ¯ªÛ︚á×BÑú„ò2€}uðà7‚ÿgï[øOÂ� ‹ë�*çÄÞ&¹†4Õ|Kª¢k»¶Ræ ;}òE¥éq»[éÖÎÀ4÷sÞÞ]{uP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|ñWþK‹?ßÐõѨ¸ð¿X~ƒùP»èr?óÚ€=;NÿÙ‡þÍ@u·ùÿǨåP@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�PøýñïÆŸük?ìÅû2Înµ›£5§ÄŸ‰“:i~ÒÑž­cgªÛ‰²[ >ϬjöæIÍî…¢,ú´îmÀ>¶ø ðÁ³ï‚ ð§…aûV¡säÝxŸÄ×0¢jž%ÕR2¦ê䩳Ù[ï’=+KŽW·ÓíÝÀiï'½½º÷ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (à�Š¿òXE_™ÇûE—=²T;þkïùãiÿ~æÿãôÂMÿãýhõ§ˆã‘Äw�ùœyˆIŒãçVù�z�ÍŽø–éA ) äy�A‚çšZ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (à�Š¿òX­)[p—à·ÂíáV»à=G_´ÞKã K¬ëSF©y«Þ¦µf ²»Éµ„³%•’;Gm1&k‰n.gýb € Å×çhtö H3È�?ºÁ�ÇÑ• žœ1õÃp4P@P@P@P@P@P@PQá™ØKqm“±£�Ø2²ÆÄ{°uÏ?Â:â€; ( € (™ñãGVˆH3eå àùjp©Çgl–é�˜îÁ€8Ú( €:iI©];N ¶¶ Ò($yŽÄùqä`…;Yœ©È �Ë ›q‹Q¤q¨Â¢(EQèpùëœÐ6³£A¨Á#¤j·¨¥¢•@VvQ‘„}åº 1“•ãz°;áË·’9lä$˜0ñî'"2v²sȶ09ÆüvP 5P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔùgûEüzñWÄ¿Ü~Î?³œ¦ûÄ—-=§�üyg3¦›áM:)<�NÎ×S€H-¤µó<�cW„¼¶“:hÚÛnH7•2Žì‹¹�÷ &߆€;Šd’$1É,Œ8Ñ�ØôUQ–'èyׇ�’úòàË`}ŒÓ+¨ôÎ#oéÖ€; ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (à�Š¿òX ü~øS§øOSñ·…µÏéºmŸ�´ÝOVðì–þ'ñ¦‹áíE®ìt�kÃ÷ÒKŽ¡;Ú4ZœKÊÇ$‰4jѰá?ÂOø*Oü'ãÇ�4Ÿ‰ßÿcÿ„¾?ð»6§o¤x§@øaãYô»ù´mJëGÕ#·’o�Vò²Ôì®ì¦ÝÄÐH` ÛOø&÷Æ�ÛÃã7…>'ßþÝ´/‚ž#ÐüC Yü?Óô/ êÞ�]Ñ.ôÛÙµ›Ëˆu_xÅîžÎþ+HHn,–5”«C)`êúQ@P@P@Zã§áÿÅPå¿í%ûCøÃâo�gý˜fI?´|]|ÓÙüBø�e;¦™àÝ66úµ�¦­”ZOh$òu½fòéó:hº2ÜøŽà <Ø~ üðìÿà±á¿ ¿Ö/+�ø¦â�Qñ¦ŠÀÈÿ4†ÓMµ/,z^–’YÐè½P[ÛU½¶–ÝŽÝãåoî:�ÈÝF@`2;®GÊ€yÍͬö’§Œ£„ý×ÞFèËî ô8!…W € ( € ( € ( € ( € ( € (ʬì�˜áUAfcè“ìåÅwš.šÖ0³ÍÄóà²ç>Z.v¦rAbIf#Ž‹ü$°ÕP@CQ±Kûs ;\ñ?÷\Œõ;[î¾pr2TPŸ\ÚOi!ŽxÙN +€~ò7!‡ÓèpA^€ ({{™­&K‹w1Ëʰ÷à‚C+X`Œƒžh±ƒÆ8Œ ‹-ÒËC&Ôo}Ž„¯Ós~ŠÏ¼Õµtý’Ú¹+½–ȃq6ÕÁÚ Žw�‚€::Å,-Ä îrwÊÿÞrqÐí_º™ÀÉÁc@è € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ‚>*ÿÉ`ñgûúþ£5wëÐ*÷}îGþ{P§ißû0ÿÙ¨®¶ÿ?øõ\ € ( € ( € ( € ( € ÿÑþþ( € ( € ( ÆŸø/Ÿü£#ã7ý�Ÿ¿õhø^€?¿à�ŸðYÍgö@ý“~|³ý�þ!|]·ð†¥ã‹Äñæ�ã;½KÕ�‰üo¯ø™¡‚Â/†¾"H[LmXé³0Õ®<Ù­^R°0 é—íÿ‹ñí×üÅÿµ7€þë_þ*xÃã[~Íßô¯j‘xšÿúµÏ†WÅ·ß MKš½ô–¾´×âÑl®´yìmµÛkËÉ5 d›Np‚¾ÿÁ>/þÔß².›ûeø¿ö®ø°ßµ'ÄÏk?þY^jwºµƒZÞý³SðÖ—â?ßjÏâ§Õ0þÓðHø(Ëž1Ö¼Mñ+öyðO�'ðßÄ{ýN_øKõïøßÄ‘[iÖš¾§—¨êšÇ…u j6÷^$¼º—RÔôýwHƒP’{»9ï.À8ÿø%ÿìñóþ ð/ÀŸ¼yûQxƒáïÁ¯€uDøsàKmUñ•çŒ|ii©xwƾ,ñG‰&¼ñ–ƒmmË­ÃEÎÝRæ;}:ñ-­´‘ Äúð?‰ñÿãGü÷öœø ð“ã~¿ð†_ˆÞ1øÛágÇPϪê÷žðÐUñ]ׂô„Ö4Ø-|U¥irøwAÔ!¸¶“FŸZmRÒ{+«H/m@<ׯ ¿jßø%Oükó_ìõûD_ëÚ×í5áÿ øWÃ^.ñE…Õ¶™ymñóÄZ·Ã-_ñg…†¹¬Ø¿‹~xÚÊã]Ðõÿ:w{ÝËP›N:V©©øvèÿðQŸÙö€ÿ‚L|WøûD|:ý®>#üJñÄ­[Äww¾<Õ×RÐ|UŒ|<;©[x•¦ñw‰?á2ðß‹¡ñ ÓM§jí=»YA©húÚê�Þ%ÅÀöýðËŲxûá¿ÃïKl–rø×Áñl–qîòídñƒa¬=²nyd xb]ÎíµF]ŽZ€;z( €?2ioÚ;ÆŸ¼lÿ²Çì·!Ô¼o¨™ì¾!ü@±�“Lð>—y½�¶­u³¹³I|­w\…ž].WMFK¯]"iàA|ý�|û:x!<5áÔŽ»~ ¹ñw‹®`Hõ?êq£üÌ7HÖzU›I,zV”’¼Vp»É$·W÷7×·@ηÒ_¡þf€<3ÄßÅþïøÐ‹i?òP|ÿcŸ†?ôùg@¢ôP@1ãŽUÛ$i"ÿuÕ]& ?OÏ� þÁaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº>Áaÿ>VŸø ÿ ìóåiÿ€Ðÿñº–;{xÔÁ Yë寑çþùUõõü³óM@P@P]E+"+©ê®¡”ýCph·Ø,çÊÓÿ¡ÿãt}‚Ãþ|­?ðþ7@Ø,?çÊÓÿ¡ÿãt}‚Ãþ|­?ðþ7@Ø,çÊÓÿ¡ÿãte#P±¢¢ŽŠŠGÐ/€@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÒþþ( € ( € ( ÆŸø/Ÿü£#ã7ý�Ÿ¿õhø^€.Á¿å_ì`øÉÿ«‡ÆôÔÿÁgd/~Øÿ±N¹àÿ…úößį†Þ4Ð~/x?Ãqª}·ÅwÒ¼C k^Ófy# ª_xoÅ:ÅÖ•nÛ×SÕôý?KÛÞGunø›û<ÿÁu ý˜?bÝ7öWñÇÀ_а~Õ|¨ü#ðHšÇNÒ¼'çé‰y¤øB÷ÆvšÆ£aãk·’ÂÃTðÍŸ†5wÖnt]Ðêº1Õ^ ‰ý™ÿbŠ_³�üëþ %ñ«ã'…õOø�ãß�<gáø�N¸Ó'Žî-U°»^ið˜jž*�ÚéZ…´©§ørÃStjÐýfÿƒt?åRÿÙyø—ÿ¦¿Ðæçì�ÿ+ ürÿ±ËöˆÿÔ#P  ÿø+ü§[þ ×ÿ]c�ýkP¥ÁÐ?òMÿdOûþ,ÿé‡Á4ý~Í¿ònß?ì‹|,ÿÔB i € üÒý¤ÿiüEñ³þÊÿ²Ë¶§ãíPÏañÇö3¼zg€ô´q¯mm«@$[+Ë$“Ê×5¸Œ’hòI�£¥×Šn’=,éÏÙÛönðWìßàtðç‡Pj~"ÔÖ ¯øÆê�Sñ&¨‰''摬ô‹6’hô�%%’;HžY¦–çPº½½¸õíK£ýGþÍ@o­ô—è™  ñ7ñ»þ4âÚOü”ÿØçá�ý>YÐè½P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|Uÿ’ÁâÏ÷ôýF4jî›Ck¡Ãy¯êO`öŸì×û5ø/önðRè:®­â�Y`ºñŸŒî`TÔ¼E©¢“±r]ìôk'’TÒ´µ•’y..$¹Ô.nîçú:€+\tü?øªåu.�õû5y¾·Ò_¡þf€<3ÄßÅþïøÐ‹i?òP|ÿcŸ†?ôùg@¢ôP@aÞkö–®ÑF­s"ðÛ«á2r}v+€F …Ïÿ„£þœògÿ´Pÿ Gý8ÿäÏÿh þ�úqÿÉŸþÑ@ü%ôãÿ“?ý¢€øJ?éÇÿ&ûEð”Ó�þLÿöŠ?á(ÿ§ü™ÿíÂQÿN?ù3ÿÚ(ÿ„£þœògÿ´Pÿ Gý8ÿäÏÿh þ�úqÿÉŸþÑ@ü%ôãÿ“?ý¢€øJ?éÇÿ&ûEð”Ó�þLÿöŠ?á(ÿ§ü™ÿíÂQÿN?ù3ÿÚ(ÿ„£þœògÿ´Pÿ Gý8ÿäÏÿh þ�úqÿÉŸþÑ@ü%ôãÿ“?ý¢€øJ?éÇÿ&ûEð”Ó�þLÿöŠ?á(ÿ§ü™ÿíÂQÿN?ù3ÿÚ(xÜa€:4t‘HÙ]eYNU�îë@ € ( € ļ׬íXÆ›®d‚#ÀEaÁ !ïŸî«\c �ÿ Gý8ÿäÏÿh þ�úqÿÉŸþÑ@ü%ôãÿ“?ý¢€øJ?éÇÿ&ûEð”Ó�þLÿöŠÑ³×¬î˜Fû­¤$$ÁFcÀ ïŸï*�Lç ·@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ðGÅ_ù,,ÿAÿÔcF ãÂýaúå@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÕþþ( € ( € ( € çõo xS^¹KÍwÃ>Ö®ã…m£ºÕ´m;Q¹ŽÙYRÝ'»¶šU…%ši%`ŠòÊáC;—Ëÿ…oðïþ„/ÿá-¡ÿò ð­þÿÐ…à¿ü%´?þA þ¿Ã¿ú¼ÿ„¶‡ÿÈ4·øwÿB‚ÿð–Ðÿù€øVÿÿèBð_þÚÿ Ðÿ ßáßý^ ÿÂ[Cÿä?á[ü;ÿ¡ ÁøKhüƒ@ü+‡ô!x/ÿ mÿ�h_Hð¿†t &›Aðî…¢Kp‹ĺF‘a¦É¶ž .,¢Xn£Rþ\Cls…ä§–U��¸Ë·-ܨß5Äo+’ÛnÖ=Z&áGrLdm$ž…:õ ‚€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ø#â¯ü–¿ ÿê1£Pqá~°ýò wÐþäçµzv�ÿ³ýš€:ëoóÿ�PÊ( € ( € ( € ( € ( ÿÖþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@sÞ%ÿ�¿ëî?ý?ùÿõÐ@P@P@P@P@P@P@t>ÿ�éëÑÿôtÛÐ@P@W‰•…Ü ü&Ø(ÿye�·èë@åP@׃�6_G‘æn…ñܦ$\�P­×Ž7¹ Ú€˜*–bTf<É$örhÍü=óêr ýß•'lc|ÈÈ;ãåVã?ž(± € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>ø«ÿ%ƒÅŸïè?úŒhÔÜx_¬?Aü¨Ýô?¹ùí@�§ìÃÿf ºÛüÿãÔr€ ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@QÔm>Ûi,€ç=‰ÊçÐ7(HäÏjó‰#’'håFIᑆ?§QÈ=ädh”P@P@P@P@P@P@Ûè[D÷)I' a’%ç,8!¤c�¸áUIÁ&€:( € (/VÓÿ´-¶¦ñð“ÆI4dôLyÃ*“À%@<úHä‰Ú9Q£u$2°Á~Yö#ƒÔg­2€ (å�ôú}Ê\Û�r[”‘Þ�ÇR§ñ‚ wPx»OxÁž+ˆdÇÌŠ‹*çý—IìŠG£g*‘©ø†mIMŽŸ‹ß#³cΕOT »–4oã%زœ«¹XWIÓÿ³í¶¾ ò�óÎ,`ô"<žxË3Á€5( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ‚>*ÿÉ`ñgûúþ£5wëÐ*÷}îGþ{P§ißû0ÿÙ¨®¶ÿ?øõ\ € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@ZâÊÖëh�% `1p:à:íp=�ü¹ÜKû JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ û JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ û JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ û JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ û JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ û JÿŸoü�sÿÇèþÂÒ¿çÛÿ#\ÿñú?°´¯ùöÿÈ×?ü~€ì-+þ}¿ò5Ïÿ  àÒì-˜<6Ȇbò2ŸU2´…O=Aúcø@/Ð@P@^{Kk ÄËŽeù€ôW2ÿÀH÷Ï@(ÿai_óíÿ‘®øøþ_•ØZWüûäkŸþ?@ö•ÿ>ßùçÿ�Ðý…¥Ï·þF¹ÿãôai_óíÿ‘®øùþ_�^‚ÒÚÔoqg‚U~b=ÏÌßð"}±É` P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|Uÿ’ÁâÏ÷ôýF4jîÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËj?átx[þ|5ÿüÓ¿ùm@ü.� φ¿ÿ€ºwÿ-¨ÿ…Ñáoùð×ÿðNÿåµðº<-ÿ>ÿþéßü¶ þG…¿çÃ_ÿÀ];ÿ–ÔÂèð·üøkÿø §òÚ€ø]ÿŸ ÿtïþ[Pÿ £Âßóá¯ÿà.�ÿËjßÑ~%xW[ž;X®¦°¹•‚Ã¥Ûù®H ‰2I5·˜ìB¤m0wb+œ-wÔP@|ñWþK‹?ßÐõѨ¸ð¿X~ƒùP»èr?óÚ€=;NÿÙ‡þÍ@u·ùÿǨåP@P@P@P@PÿÔþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|iãO\x“^¼»’F6�M-¶�w ¤NUW´—|ù˜å‹¾Üì�@9*( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €>©øUâ+�oA–ÒöFšïGš;o9Îé%´• Z4¬~ô‰åÍã–d…Évf`O € ø#â¯ü–¿ ÿê1£Pqá~°ýò wÐþäçµzv�ÿ³ýš€:ëoóÿ�PÊ( € ( € ( € ( € ( ÿÕþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨕Ժ?ÔìÔæúßI~‡ùšðÏû¿ã@-¤ÿÉAðOýŽ~ÿÓå�~‹Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|@P@P@P@P@P@P@P@P@P@P@P@P@ùð?þfû‚ÿîZ€=ò€ (à�Š¿òXÿÌÏÿp_ýËP¾P@|ñTø[þ,ÿB?ùlèÃüþtÛø\ÜžØËüÿ‘@ï¡ýÈÿÏjôí;ÿfû5uÖßçÿ  ”P@P@P@P@P@ÿÐþþ( € ( € ( € ( € ( € ( € ­qÓðÿ⨖ÔFC�qÿ³{�çùâ€<ãZêÞügÿ×þEx�‰TâOpǧoûëÐç¶=ú¨ŒéQãÇþ >ž1ðÎ?ðwgžøü±�CÅ~†Ð@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@|4O²Ã +$2½¨ïÊ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ž~"ü:¾7÷:öƒl÷p]»Oa﹂å²ÒÜ[Ä 4ðÎÙ’Hã4s;°F…°€#,2Àæ9¢’�ÑÊ�©AV�‚éÈPè € ( € ( € ( € ( € ( € ( €<ïâoÃ/ üTðÜþñ ]wÍ¥jТýü¦Ô»´vÆäl»µvòo!ýÜ›]bš�>|Mñ'Â_Aðcã<û`]�øÆó;› ëþM•¥Ýì¸ÝfØX-.ço;K˜gj;`Xf€ìú( € ( € ( € ( € ßÑ|1®x‚xàÓ4ùåW`éãxìá\Œ¼×,JÛ´®8Š9ŠúÓÂ~·ð¶�— eÜÓÞ\íÚnnä $�.2±ª¢E ’Ya�7’åÙ€:Z( ˆ>&C»âÇŠûÏ¢zq�iôÆOzí<5\c�×ÜtäûöÇ%@=·F@¶?úÞ¼þc>Ø IÓÇ{�ú�ëø÷ ¦ÛüÿãÔr€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ¯?oÃúÐ9|¹ï·òÀÏqžž£ñþ  VL†à÷ÏËñ1϶(ÈØõõ§8Ï~r(É´ëlx×ÂM�»â�úôÕ­§`?§Ý@pP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P�üqøà¯�ž ºðŒ-vHžeχüAmgVðÖ¬cÙ¡§ÈøßácÔ4ùmµaäͶU·¸·øËàwÇþÏž6µý™¿i‹­–éåÛ|-ø¥s,‡IÕ´“'ÙôÝ?PÔ®>þœøK]?Pºqs¡Ü�ì]keº[ÜZ~˜Ð@P@P@P@P@PÇí÷üNñ#ã«hþÝ4,Ç¡מV€;ÛíñÆ¿åÐzÿ!ž´ìšDx Æ1ƒü‰ü8ôç¯4è6 €¿ïƒýHëê§ÓŒ0MoÔ}ò4n€ ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ‚nŸ€þtƒxœ7~1ÓðÄyÎúýhŠÔãÊ·¯?ýnrzãÐzµ@]®[Ž ÷ý8gŸ_\ŒP™YÙâÏ >>VéÓf§j§¢ÿ:ú†( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ñ¿Ž?¼ñóÁ7^ñ…®É̹ðÿˆ-£ŒêÞÕŒ{#Ô4ùã|,z†Ÿ#­¶£l<™¶Ê¶÷à|øãã_ÙóÆÖ¿³7í1u²Ý<»o…¿®e�é:¶’dû>›§ê•ÇßÓŸ k§êN.t;‘ý‹­l·K{‹@Ó( € ( € ( € ( € ( €>[ñµ§™ñ^“3ig¦zhºjûzzžÜq@n…j@AŽÞ¿ýnÿOË� «¥Å€?Ï>™c8÷õ碀wi€½±ÏNüž¹‰Ç�t0q�èOþƒøÿ?΀,Ð@P@P@P@P@ÿÔþþ( € ( € ( € ( € ( € ( € †aÆÏÿ�o΀2.— ã׸õèsÿØæ€9Kø³¸`÷öÿ{�õæ€<ûVµÈn;Ë×î±ÿáó‰![-[M¾qòYê6Woì¶×1Ìp1Ï Ž¾Øã4ôz°`He`YH!�ÁràŽE-P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ã~x+ãç‚n¼ã ]’'™sáÿ[GÕ¼5«öG¨iò>7ÆøXõ >G[mFØy3m•mî-À>2øñÇÆ¿³ç�­foÚbëeºyvß ~)\Ë!Òum$Éö}7OÔ5+�¿§>×OÔ.œ\èw#ûZÙn–÷€¦4P@P@P@P@P@>뉡â½^î"æ8C&ÎÚ2A‚¥ $@#œÐ_¤Zm ǰÿõmÇÔúõ D°‡ £Ÿçœc¦G\ûb€:ëTþƒ§#?ð.ÃŽßQÒ€6aýÏøž¿®TÅP@P@P@P@PÿÕþþ( € ( € ( € ( € ( € ( € ŽNW¿à~ŸÏò  É— û�Lò:wþ_Žq@7qdlûVïèsƒÐç*Èj»²q×?ý~6ßa�š€<ûTÓ·ã�Lõ¸?�#ÓP½Æhñ%†© ב –÷0á§‚0>X¤F*%‰8²²É ›\ Ò?Ä_D3.¨ñžêÚn¨Ä~1ÙÈ¿“`ûg4FOŠÞ‹>fºËŽä®妟ëëÎh£üeønŸÄN?î âü´£ü϶9 ]¾7ü0^¾%~?êâCü´pàŸ”3ñ×á`8>'`ìâ_þSçùâ€þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€ø^ß ÿèhoüx—ÿ”ÔÂöøWÿCCà‹Ä¿ü¦ þ·Â¿úÿ^%ÿå5ð½¾ÿÐÐßø"ñ/ÿ)¨ÿ…íð¯þ††ÿÁ‰ùM@ü/o…ô47þ¼KÿÊj?á{|+ÿ¡¡¿ðEâ_þSPÿ Ûá_ý ÿ‚/ÿòš€3|6»â&?÷ñþzHþŸðæ€-ÇñcÀÿ«×™³ÿP�p=0þG=hìü(ýÖ¬ïܦjÊO°ßb£óo©(#Vñм‰í48çC((ú„Ëå”VÈ&Ö._Ì#îË.ÃUŒ°WP /NÆ:‘ž={“‚IÎxÏ<“ŽhдëM»xè>œß×ñäšìm"ÀÛÿ×Ç=ÈÁ=ø †À™ãOâ?‡òhNòýr}ÿϧJš€ ( € ( € ( € ( € (ÿÖþþ( € ( € ( € ( € ( € ( € kýß§ÿ«úûþ¹P 2.r?Ûúþ®;Pdñç'×ôýsß‘‚(êØŒd_åõCê1’•¾°ÜŒäzuþ¤÷íÓŒ}öãoô�Ùù{úsœu=Çz÷ú¨}¡îÏÉúd?Ç·Nœa€9+¿ŸÝžý¿ý};ÿLæ€9Û� ©ÏîÇåþ\÷àç*�/…2Oî¿ñÞŸ×ùýNp _ÂKŸõCžøôüOò�ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@ü"_ì/ýñ@'Ä?‚Ä�Ï¡kPyr ò隤¯Ût›Ò¸K«f8܇å[›W"¸~I6ºÅ,@5ü<ñn½ð§Å�|øÒËnŒR/øÚrßÙº�“?“gms{(PlÜ…‚Úîvi—ñ.Ô¶Ä!šÜìÿøD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_ûâ€øD¿Ø_û‾ÿT~òä_¥]�€c÷\»þsíŒþÍk[ø]A»�?Ïøú–ÎT¡´ðà_·OóÇçü€u¶:Ý¿»ý?úã×GNø€;+ .ß—�—Œž‡Ûó ÊÇOÛŽ?1úœääŸò@Ù@]­°x÷'Óß·ò9õë@¼XÀì?Î:öÿ€äŸ@Mj¢ôÿhÿžþÿìúvÍ_Œp~¸ü¿ý~Ÿ�>€ ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € B2õÿ>ßÏò  ®3ϧòÿ>ß–(¬‰�OQÜQÏôü¸6h3ž2ãþqøzàǸ´ÎxÈþ_†Òz÷ù³Û4‡q§+g�ñÿû\{õ  �$ü�sÛןéŽþ¼ãmcO¢ƒ“³ôÿ ûã§à(.] IÆÁ�P?LägñðÍQŽv9îôÚÙíŸÏžv€@|:?çž5ý@oåùó´¿ðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝðŽ�ùäï¶ÿãtÂ:?ç‘ÿ¾Ûÿ�ÐÿèÿžGþûoþ7@ü#£þyûí¿øÝy‡ÅŸ€žøÃáKŸ ø’Ñ£‘D“èÚÕº«jZ¤Slw¶NÊ»ãl*^Ù;/ \›]aš’~|HñGÁÛþÏß´,žDDÇH4­SMgò,,ïu ðÁÈ[{;ë†Yô{‘ý“«�`¸·ýÿ„tÏ#ÿ}·ÿ þÑÿ<�ýößün€øGGüò?÷Ûñº?áóÈÿßmÿÆèÿ„tÏ#ÿ}·ÿ þÑÿ<�ýößün€øGGüò?÷Ûñº?áóÈÿßmÿÆèÿ„tÏ#ÿ}·ÿ þÑÿ<�ýößün€<:?癉oæ«�óÓpÉáñÀòÁǨþ›F3úæ€.Ç €@Ø=øéôç�Ëñí@ph cäè@éÓüúû{ Ù·Ò@Æô韧Ó=é¹€7m´à¸ãÿ­üÇ\ó‘î9  Ë{@1�€;ãÛÓ'èàDÙ† `ïþO|~8ô$�@qÆöþ¨Çä<дÿ/óÿÖü±@”aGçùþ}¿Èé@ € ( € ( € ( € ( € ÿÐþþ( € ( € ( € ( € ( € ( € ('\sØÿŸSœý:s@Ù1’:}?û#Çà={b€ d§å�äwì¼~  r[ƒÓ¯¡ãòÿëcõËR’Ыÿ×ÇüžÝ‡è7Q{ {gúþ_§ >¸%@)¾œðŒûpà1ýq×»-V}-OU?—Ÿ9ÿ#Ž´i@ÿ?(3¤§Rà?ÀÿAúüÀ ý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔdÇéú5Ù1ú~�@öL~Ÿ£Pý“§èÔä_~x/㟃n¼%âËc«æ\è:õ´Ju_j¥6Ç`îTIac¿°‘Ŷ¡l<©vH–÷à|ø½âÿ€>8¶ýšÿik� Ë·øañBæIN‘«im'ÙôÛ ýJà®í:BÖÂþåþÑ¢]ìmk˶[{‹@Ò¯ì˜ý?F û&?OѨþÉ�Óôj?²côý€ì˜ý?F û&?OѨþÉ�Óôjùoö—ý¯eÿÙJÓµ?Ú âÆƒàYõ¤i4/y§ˆÆ¾ô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_z>ƾô}�}èûûÐö5÷ ìkï@Ø×Þ€±¯½c_zñ�ŽŸ³ÿ�þ?ø"ëÁ¾1µ1Êžeχ¼CkgWðήcÛ£§ÈåwÄøHõ >GÚ�°òfÙ*[Ü[€|Kð/ãw�¿goZ~Ëÿµ וl¾]¯Â¯Š×2Èt}_Hi>ͦiúާp@}1ð–š~¡u"Üè7@hš×•l–÷@¨?c_z>ƾô}�}èûûÐö5÷ ìkï@÷íÑ«øÁ¿ð[¯x‡öýð¿Š�sðÿÂV‰|Q Ígwouá›ÿ‚zÖ»ð§SÖîî/&Ó¯!×O“[Ó.,¾Ë#4�Å»€zoüöòøëÿ“øcûüÑ!ðOí®j¿ |Eá¿|Fø�¦ø§DÕ5é¾Aà}KÖ³´�_Íþ¯e­´ºÔºŽ·­\]ß[ý³íaç�Xõöñý£|Oû'~Æß¿i/øAñ/‰¼¤ø#PÓô@h7²ø£Ç~ð�Ò^�2êÏPÙmiâ+››"ò#ö˜ ˆÈŽø3ûp~Ö/ý¶?à‡‹û@xçÃ>ð�ˆu¿Ú AÐ.4_ Lè°ÛøkÅÚ¦—k4?Ûš…ñšâ(ÖK�÷Lža>Z*`PšþÉÿðR�ÚÓágì-ð_À±—ì®|qоxGÄð½~+x�Â>:Ö|£kwž4ñW‹®¼-á«/ _èW…Ö‡áM[IÕµÍ_ûRôÙhú éÖ‰ªê­ÿ°üŸAý´¿go�~6_iÞøëû>x_ñ—‰üÚ”Ú§…õû m_Õ<=âÞ;Úk2h—WÚšgˆtù“íšÌÖq�Nî=RÂéÀ?>~ Áu¿l/�ß |wÁØÖÃâçíáýjÚöü9ðÇÄ¿øÂ ¡ÒžkßøÎ+ VãXÕ5½_]Ù¢xWÃ:>³¤Ï¨­®¯vò™¬¬l5p§à'üãâ·Å¿†^%ð5—ì©wãÿÛ�|Um xáà 7ÆÂ'ѤӵkßxÃY¶¼x‡Ã6¿Fšè—ZÌ×7íªh²ÙêZuŠø†ÿà�ûÁi¾2übý¬m¿cÏÛà‡ðkâG‰/uM÷>Ò¼gá;¿ø³MÒ.üAmáoø+ÇZž¿«@Úö“nF•­Ûj¶¨/ÛMC¤Oa¬¥þ–ÿÁB|]ÿ\ý¡ÿgŸþÊÿ³íÇÄø[ã.‡£|[Ò|%uÆßˆ3|-ø_ªxÃÁ>ñ‹"¾†çQÓµ�sGÒ4iì ‰Y‹t´Ò[Zº~ü3øùûhèÿðVŸüoð¿ìÕ§ëµåî»ñçVýžžßXk>ÿTøm¤ø†Ñ`�^‹VGðÌ·ÚïÖ݃řXó |? õ�x‡á߀µÿèiá�kž ð¶±âÿ F%Xü;â�OC±½×ô8Öi®& ¤êÓÝØ(–âyBÛ�$Ò¸g`Ò€ ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € (0¾ƒò  è?*6©ì?—ùÿ>”›Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@ÅôýhؾŸ­Óõ bú~´l_OÖ€ ‹éúб}?Z6/§ë@)ñçà�?hOÝø/Æ–{$O6ëþ"µŽ3¬x_X1ì‹RÓe}»ã|$z†�+ý—Rµ_"`’-½Å¸Ä~±£™>Í¥éÚŽ©s÷ôÖÂZiú…Ó¥Öƒt‰­ìµK[›@Ô­‹éúб}?Z6/§ë@ÅôýhؾŸ­~üný¶¿à˜µí7â�ØOö¿ø9u¥ø·á׈|YáküzÑü á?[êúh‰Âx3⦓ñ¼gá8üq¦‹}SÃwsCáUÖà:uµëZêóéÚt �ßðX_ø'¿üÿöRøSáO‹?³Å7ðÇÄ�gÆz5–‘ð~×âm¯Ä;M{ÃWv—×·~'ðÿÚ¯u?è±è[ØÜ_kúž‰0¹¶Ó”C©ßXÏ(€ÁO F‰¤ÜØI§^�ðŽoÙö‘M>Õ,ÞÇM‡ÆÞ0²×~irªÇ61øoÃþ![;6Ts•êEKyJ}çÿ¿Áøoû]Ü£Ëã„ÐÉ0�|Ù!ƒAñ«ÁÉ�Í/spñ¡%Q§”¨ܰ•ÿÁ#,l ÿ‚ãÿÁB-á´¶† 6Úùtèb‚8â±X¿j¿ÙĶq  l±ÚK-ª,AB[»Â¸F`ÀŸµ ½¼ðrOÁé ‚(d»ñÇìùqvñF‘½ÍÀøi£Ú‰çeU2Ëökk{2MÏäÁ[¶F�@&ýš?ådÿ‹Ÿö9|zÿÕMªÐ?Â?h>ÿƒ”¾ _x«YÓ|9cuãÿ‹ZlÚåì]“ßë5h´›Cwzð[¤ú¤ÒÃo§$’)½º¸¶µ¶ón.mÑÀ?±¨¥Šx£ž #š£Iaš'Y"–)þíÖëAºØšÞÛd¶º´ýK € (óOöØÿ‚OþÈß·nµmã_ŠšŠ<#ñ>ÖÂÏI?þëV^ñN¥¤éâAc¦ø‚×XÑüGáCj® ‚ûSðôÚí­ŒpéÖZÅ­Œ1@ ü"ÿƒsao‡ž(°ñ?�uÿŒßâÓn�Ì>ñŸ‰|=£ø2÷cï¶]fËÁžðÿˆu!‚3À¾'µÓov¼WÚtö²½µ~ þÕß±ì÷ûdü²øñÂ’Ãá-{ßßø2{o xƒáÞ£¦éÒéž ºŠÆïL°ŽÛIž]7ûûIÔ¼;qgäÅw£Ü}ŽÉíÀ?6¾Á½_±€|'ñC×~#øÓâýSâ_‡?á‡Æšî¹àOøI~èÍ­éZÕÌþH~ÿ`é¾!ÕH‡GÕõý�àžÿ³ì³ð Ç_³×Áý\Ñü;ñ;F×´�ˆ>3Ô5K]Oâ?‹^Ñoü>Ú¦©¯M¥®™öÍ'KÔn Ðl­4oinÒφf¾Ôžüöÿ‚tüÿ‚yè_|=ð_Å?üOeñ7WÐ5�z_Šß„µ««K¯YêV61éáOx*( –-Rá®–ò ùD„Ã, ®Žƒû;Á2>~ÌßµoÆ�ÛÀ~-ø»«|Køè¿WꋵïßøN~"hßMqà� JKÝïáý÷‰ä†âÒÝ$Ô[<·%žÚKHŠÂ �¿à—|ûox‹ö÷Ѽ_ñ†ç㉵?j·þÔõÿÍðÖ+�øzãÃZ¢Zhö¿ìüQ0XÜ¼Ö 7Œgx®Õ$¸–êÖî柶ükö8ý´~)ê?<{'Å?|E×­´ëë |QáíˤØÚiZv¡­é~,ð�4Ñ©Ûi66zi½Ò­´É.­í¡{áur‚jý?øà½+á¿€üðïBšþãCð„|7à½ãTš �N}+ÂÚ5–‡§M¨Ïkkem5ü¶–0½ÜÖöv�IpÒ<6°FV$먠€ ( € ( € ( € ( €?ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ñ?�_| ûBøïÁ^5´Û"y·^ñ¬q�cÂúÁ�dZ–›+ã|o„�PÓ¤uµÔíG‘>ÙÞâÜ‿¼uû8xêÓö[ý©.öZ§—kð›âÍÔ’XÑÌŸfÒôíGT¹ûúká-4ûû·[­èbk{m’ÚêÐõ.€ ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Å~;üðí à‹ŸøâɾF{½ÄKë~ÕJmMCK¸‘m�ŠþÆPÖš�·în:[ÏÅÑÿÁ6R$H¢ý¥~2Çh±Çw�4@uªŠ *ª€b€ÿÜÿ«˜øÑÿ�ßýò þ¹ÿW1ñ£ÿ¿ûå@ü;sþ®cãGþ÷Ê€øvçý\ÇÆ�üÿï•ðíÏú¹��øÿß*?áÛŸõs?ð;ÿ¾T÷?êæ>4àwÿ|¨ÿ‡nÕÌ|hÿÀïþùPÿÜÿ«˜øÑÿ�ßýò þ¹ÿW1ñ£ÿ¿ûå@ü;sþ®cãGþ÷Ê€?N( € ( € ( € ( € ( € ( €?ÿÖþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿ×þþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÐþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÑþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÒþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÓþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÔþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÕþþ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙicingadb-web-1.5.0/doc/res/continue-with-preview.png000066400000000000000000002245031527064444300223670ustar00rootroot00000000000000‰PNG  IHDRMcá:àC„iCCPICC profile(‘}‘=HÃP…O[¥¶T¬ â�¡:YqÔ*¡B¨Zu0yé4iHR\ׂƒ?‹Ug]\AðÄÍÍIÑEJ¼/)´ˆñÁå}œ÷Îá¾û£ÂT³kP5ËH'B6·*_B˜j!‰™úœ(¦à¹¾îáãû]œgyßûsõ*y“>�x–é†E¼A<½iéœ÷‰£¬$)ÄçÄc5HüÈuÙå7ÎE‡ý<3jdÒóÄQb¡ØÁr³’¡OÇU£|Öe…ógµRc­>ù #yme™ëTÃHbK!@F eT`!N»FЉ4�'<üCŽ_$—L®29P… ÉñƒÿÁïÙš…É 7)’º_lûcîͺmÛvó<WZÛ_m3Ÿ¤×ÛZìèÛ.®Ûš¼\îƒOºdHŽ ò Àû}Sè¿ÂkîÜZç8}24«Ô ppŒ){ÝãÝ=�sû÷Nk~?ý»rx@\&¤bKGDX’¼Í`¬L pHYs.#.#x¥?vtIMEå ´6tEXtCommentCreated with GIMPW� IDATxÚìÝ{\”uÞÿñ×f9*¨C!’‚*ž°RS£Ä‚ʼ]s ËÌ6Ûû®í^Ý{ËßïÎv[÷·¹›íÖª›–y(,1OìBæ MTÄÓ ¢ ¨ƒ0#Ìá÷Hˆ  ˆ¶}ž�Ç<æp¾×5×|ß×÷{}GAÇR „B!„·ŸëN 9–„B!„ÿ–áIq›ß/„B!„wtxRÜ¢÷I˜B!„B܉á¨ÝáéFÂ�BB’B!„âG¢Úœ7ùZÅ LO–B!„¢£ƒÐõ^sÃá©­æZáHqJ!„B!nU˜rµðx[ÂT»ƒMkaèz÷œ„B!„·#0¹ÚxߦàÔÞš#Åuþoo8B!„Bˆ› K̓‘ë:ÿ·)8©Û˜Z I­ÝZ K „B!„”Z K̓ҵ¦£híuêv¦–nÊf÷-…& JB!„Bˆ[ Z MÎf÷-…¨ë'uâzA©é­yx’à$„B!„èìÀÔ4,9²HÓÇZ›N‹ÁIÝJHjíï–‚’ªÙýõZ�„B!„¢£CSK�ÉÑä^Ñ$09›½¿Õ®y-…¦Ö†o)0©Z¹)[Mm N¬„B!„pý¡À[»†ÉÙ$()›&G³÷;›äW³àtEˆº^÷¼Öºæ©Þ{ù^Ýäÿæ­N2ªžB!„¢£CTk­LM[—ì 7E³ìáj屿YÅÕ<4]¯[^Ó–¦Ë­Jn ·æÁéz-N­4!„B!„h-È4®µ¦Ë�©i&iþZ¸oÞMO¸®7äxÓ¢æ�I ¸¹\.ÓOmË-X°@v_!„¸ERSS1 ?¹õžü—LÙøBq‹¬ziŒ‘–‡!W4¹o5¤©›„"Zø»ixjœÔ´mô=!„B!„¸�ÔüÐålÈ4—ï¯ÛÚÔ––¦ÖºæIhB!„Bü˜B“£YpjSkSÓþ}ÍÓµÂSÓà$„B!„wzhj:öBóK‘®9¾‚ò:o>¡æ?j«’òB!„BÜáš&åuÂ’âZ¡©µV§kuÓB!„Bˆ;=45ýÍÙ¶ŽðÝbhjO€Rrý–*!„B!„¸Ý®–®žÚÛ=¯¥à$„B!„wzhjÚ-¯yÞ¹î›ÛCA;›²„B!„â6»ÖÀ×mqR·q­M¬]¡éâÅ‹,]º”ââb îîî<ýôÓÜ}÷Ý7¼ö‡"33“Y³fÉ®p“ÜÝÝ2d½{÷F§ÓaµZ)((`×®]ÔÕÕI !Z5`À***(**ªÿ’P(ˆ‹‹£¤¤„Ó§OßÚ™›óXùþJv�7ê¨ÓF0á¹TF÷ÐÜø4óþÊ˹ñ¼ó|¬lÜ›¥õfì�^Œ5zã¯URg±°÷�‰5ß�§Ì)Å#„h�š¾qaô:sœ %ö†Ç4 ˆïAÀ±ãdœk÷Dq�°t�¥¹ñ„Ö®lܸ‘ž={òË_þ€ÜÜ\6mÚĬY³P*o¬§_Ÿ>}èÓ§�ìW7û�¦ÕòÈ#� V«Ùºu+çÏŸÇßߟ�Ò½{wÖ®]+ÁIÑ¢ØØXî»ï>ìv;7n䨱c :”¡C‡b³ÙøüóÏ9sæÌ-›þg‹9ÜïuÞy8°>C}½�ùëó2kº^©™¼#y©¾\ºòtr__*åó­E¨pâèÏØ¸¾Ì <Îÿn,æ´'!ÄU”„À/‡x£»ÔÝÆ½¬)V2`ä~Ùß M_¬ûžŒóíÎ1­…§MÜÌÌjkkQ«˜åàÁƒaêÔ©„……‘ŸŸÏêÕ«yá…0›ÍL�:•>}úðî»ïrèÐ!âââØ»w/ÑÑѸ»»×­ÓÉŠ+˜2e }úô!--­1xôîݛٳgSQQÁ[o½E¿~ýغu+¿þõ¯ñõõeçÎ�TVVvZh gÈ�!¸\.Ôj5¹¹¹¸\.<<|˜ˆˆ|||8pà€&!ÄU #FŒ **ꊓ1cÆŒ¡¶¶–£G�ÞÚ°Z©Õéì=„ñ½‡0~lo濜Iþ¤! �âÉy³Ò´‹\M¸¹áÖð¯ap<›wRhÒ“ïÏ«üšZ¡QëHH�Ï´ÈfOÌz‡¨ÓùäíÚÆ²ÿÙÄ�ÿžOR�NÚŽj26åÁƒ±�ÁiA¬š€. �ió^Vœ¨í¼ÃYKy�†�®j0Û›>AQÁŽDøÓÏaeïþr LBˆ–Ž´ ¾/–ç.&¥÷�@ÅÆ½¬)¶wêÒÜÌï,µ«ËžÝnçw¿ûß|óMãcgÏžE£ÑÐ¥KØ¿?EEEüóŸÿ¼j^^^³qãF pÅõQZ­ƒÁÐ8rÓÚµkÙ¶m={öäûï¿ÇårQUUÅêÕ«©¨¨`ýúõ�””D\\'OžìÔ‚¿œòóóQ*•·-0]Þ6ÇŽ#..îŠÐ PWWǦM›HKK£¸¸X>¿Bˆ«\¾>U¡PpöìY¾üòK¬V+�†|����[x05±ò^eÉ·æ2ÔébÌ^ꌄ²çûú P{8�eY-Ǻ !Þ¯�Í_~‡ûÐx®hò0æsœü¢Z –ü�æ±x—c/ ûóLÔTæ‘¶b'æÊ|Ò×åA÷(’Sy¬o…'k;wc4§»J÷Û˜ÙvÜ΀Á½èÛ¼÷{ÝEÖlÈç÷_æ³áœ$&!ÄÕ¥ïðÌŠj¸†éŒ‰?m9EQ-àîÍ£ã£xÈïÖç—¦:­¥I­V3}út–.]Êš5kP©Txzz’ššŠN§cÊ”),^¼˜/¿ü…BAjjêÕk©P0pà@-ZÄc�=veÑ*•L™2…>ø»ÝNPPãÇ�ÇétòÁ0wî\œN'=ôÞÞÞTUUñÚk¯¡Ñhðööfâĉ�¾;8þõ¯õ£ÞŽÀtY^^���<ùä“|ÿý÷\¼xºvíÊæÍ›oéÈWBˆ·'Nпjjj¯aª©©!11‘ .P^^~ëf®2’ò‹–,™Ç �FxF0þ¥TŒ* ÝS“X¸d.sÖºQG(ãg&¦fÑ1d°ž%KëxêgÍûÓ…0!5�ÌåUÀ-x4/Äè‰LeÈ_ÞcîoÜp«s',ù% ] àÜŸyã•ÏpÓÖ�÷x¦Åi:ƒ8ªÉØ’ãby:´öö&œÉ-àË€(~ù¸ŽoòË9P þþ]à}‘[N²·T>?Bˆ–�EÇÏQéEwó×0®ƒ×ƆâSZÎsç.QkCˆ7ýÅ\UC¸RÀО€‡Ëåúæ§¶,Xбßù*^^^TTTÜÖõR©TDEEѧO<==±Z­㩸§èªëzÅs^î^xù{æƧû>å‰è'ðÒzIÁ !„�ÐÔºvíÊàÁƒ B«ÕvÚ|{öìI¿~ýP(QTTD@@žžž­†¬Ž.çϟ端¾ !!�‚‚.\¸Ðêë=<<:½l„�ËápPTTD÷îÝ?ëÅÅÅTUU¡P(¾åƒK,Í]Úb`jÎ_çOÒ=I,ݽ”Ù ³[}]íá4Þx;�ö^Yú*C47¿Œµ%yl^»™�§-ਣ=!Ã’yêá( 7ÓQ!ï¯Lû}!ã÷“�·¦|ž=ÈŽ;0]0`ô52´çPî ¼çŠ×~øs¿¬ ÷Ô?1b `%óÿ>ËrŸWXö‹ØV§oZñ2¯~ÁëïÏ$êfÊâH:‹E2kBx[¶¦-aùú|ÎÖn>DÜûOMŒÅ ë¿æ1ûh2‹Ÿ�àlÖx+;‚Ùs’0jäsÿSgÎYÂFí¦ ú7®ß8KÈþp {ÜbxbÊH‚Û[�¬-'oý'l,�aÆó#ñ¿êåd/N‡äTFú^~ÌFÁº%d�ºü¿�ªJƾ<�ào‘ÑeÓâõš~Ì:{d´3gÎ`2™P©Tœ�ô½U¨ÕvðÆÄqáè[Å)ö}•N¶s/§DJ%õv«>…©:’än 0a#ÓFJƒÂñ?ßž÷i‰œ8‹ÈËû�i#ËòB¹ÇÌ·¹8d¼IçÏŸ'77·Ó»çUUU±víÚ+[¾|ù-__oooÆ��ËåB§ÓwÍîyjµú¦×µ®®ŽO?ý”É“'³eËbbb lóû�=ʱcÇø¯ÿú/œN'ýë_‰ŽŽÆf³qÿý÷3f̘ۺ?~œ?ü›Í†Ãá ((ˆgŸ}¶ÍG˜L&<==¯(»ÝÎܹs±X,¨Õj‘‘‘LŸ>ý¦·Çez½žÌÌL&Mš$AS\A©TòðóvíZ ÑÑÑ·ö3tþ8C{m×{ žv�ÜÕjhšûy1PÌÂY àE‹šè7&€Ó;öSæAÊ˯�i!ýµY¤ù¥0êb&[Š4ô{r:ñ¦å,ßaÆ0r&¯??Cm!+—2â¿ækZÆüßbqëj¦nÄ $d,!³ÊÞx‹ã1?ÑJÚ+/³²<�9ŸMìáÅLŸšÇ½NÌ�Å,ü(‹¢*7bR˜ùb—«÷e_/äå7vQ¦½¼|M‹�òÝëHÿ®ÔvðŽ"qâ0‚ÉgÅâƒøÕTUVp®*˜Qÿ‘Hx“N ;NìhµwœØqUhÒôˆ"¢r+·›|e…Úš·Œ7ßÛBQ]ñ÷w§p“‰øÿû#wÏkliÒ|ôs¿�brÌ)6eQ:ŽÙs'cØ8—¹fþqñåËøÕ9tñ¼:ì‡yØ ÒXt0šY}Èû<�=fÀiGß7‘I ¡M*=Ådm1›új}`ÐIz>‰=¯m&ï±¢.GÀ“é,ø¨Œ¤_½JT;/…Ó†�eJ8ؤ±èx,Ó&44š6²ñ„‘§¦À…üæqÊfÄ”R&Ý–Ïêvp$*‰ð–±ÕydäÀ°çR‰ÔZÈ[¹„¬‚pR.7|Tä³nc Ñ�¥tP`Š·“UÍ´©QhíGH_œÅ‘ÈÂÕ-Wš÷}µÃ3Õ Ì;–±vw©CÏ‘µ†=3…p��üÕËØ^ÎXe.YvŒ½Bñ:Þ–:ù)²×gS¢Ö‚ÍNðð‰Œì¡Å~f;iÿ<z56{0#'ŽÂØÔ6î¯A­¶c×F2ö¡XüÕ 6­#Ï¢Ek·À݉Lä�ý»,;ê�Ñ×NÕ™<†L!1B‹íH«sÊÑûð¨´AïkÆr¶/Ûˆ­��’£fІ3êÑÁךÈúüòr«1ŽžÈ°njì¥ÛY÷Õ)Ъ±Õz1ø¡±„{žbãØÃ�hmå”TILŒ¿²ååîØJ½™¼-»)©´“ñ©žÄ”HÎmZËöPcG>–”û�”oYD–ÍgíÄþ,‰(Ï&áçÁ)DUç²ä€½É¡¨„í«×²§F�OWÔvhýGnÊÉÍ.'rB"—wk{Y.i™(5Ûð‰‚)ñþš~,üüü8p ¡¡¡¸¹¹uj¥$""…BÁ¡C‡P©TÄÅšѴ| Ìf³ñí·ßvÈïì\îèt:9pà·4$^¸p_ßúvÛŠŠ ºtiß·–Ñhä™gžÁÝݧӉ——µµµØl¶ 7Ên·óñÇ3iÒ$úöí‹ËåbÕªU|óÍ7mn±Ùµk}úô¹*HªT*~ýë_‚ÝnçÍ7ßäàÁƒÄÄÄtȲßsÏ=”––rüøqî¾ûîÆÇ].ÙÙÙìÞ½¥RIPP�=öXc`5�œ={­VKhh('NœÀb±ðôÓO£Ó騼y3‡®?iÎøñã%”ýȸ\.2339sæ 555ƪÍÌ›�MÌÔbûBšÉHìÝ�sÌD­ÙÌþòt…äA÷cÇ©Š£Ÿs3û[úŸÿ‰O†W°lî<oˆåa€£˜BÛ“Ì™ŸÀæ·ç“¶"“”ÿMúa…*óظÃ�‘Ï¥®µcÚð>¿‹$5¨¨@;hcýìY·ˆÜ#vÂûÿP=¸Ü%¯Å“6-=çÖ� ‰—X°1��c¦ÿð¸ÃDú²õù¤ðë_%PöÑä ‡f­K7 ”Çqã¼ùÚfÞš¿žÏ¶%1?ù&|;—eËÒ8^¼Ëà—˜>¬•VŽÒ=ì¶E‘úÜ`´Îr vŸ£ h|µ£˜âÒb{5{ŸO½t™œ¾@}h:¿‹¿¾�ƒ[ò{$t`uôL Úž1 Ë£'ê�‘ UÄ&ß–*,j-­vþ:[ʹ®FŒÚúi{èÙ}¦€ê#lüĄ۸YDuàÀ­¶’rÔAQùôwä†L#Ê«‚’ ÷káÅÎrJÍ~�Y¼ÿÿ,Œšè�mo)öŠr*¼‚ÐïYÆïŠb™¤f_‰  &±PœAv[BSY>ÎHž˜‹Ái¦¼Z XÈËÌÇðÀ ÆvË®e¬ÞU^Ô¾Q3ì¹IÕvJòó¨¨ÿòl²*£I�…ÖnbãYDM"°éÃõ€õÉ�,ÚmÂʾ�&BžÁ¨€úÏÊök. ÏSdUŽdÆ”{ù® L=ž u¸J³x?sÑSb©),À’Ä”¨,§ªá êZÐÇŒb¤¯�‚´÷ÙaL-/wT‡ö4ûÀ òÏZûø0 «Yc‰!õ¹XôÎr²>XCvÄ,¢”P^Ê‹ÏE]µ¯ª5jh6¨±-?‹íšQ¼8%me.ËÞ;Õz©pù>ÃHõmòÙ©ögÒÔQè/d³dÕJ�½�V0 M·Å¹sçÈÕj¥´´ôš¯÷ðð`èС7°zõêŃ>À¥K—())!66¶Õkš.^¼È÷ßÏ¥K—:4¸%$$ÜÒòýúë¯ÉÎÎF©TrìØ1L&jµšäää6W¤Õj5jµº±UÇn·Ó­[7öïßÏÁƒÙ³gN§“qãÆÙ®å³X,­¶Â´U]]v{ýY…BÁäÉ“ŸÛ¶méé鸹¹a0˜1cÅÅŤ¥¥QWWGtt4YYY|ûí·xxxÑâúˆ¢¢"zôè�ÕjeèСtíÚ•… ÐÕšw IDATÅý÷ßϪU«(**ÂÝݳÙÌ/~ñ  ÿøÇ?(**",,L6 #ö×¶P(„……ѵký)|ÿ[{&ÐrÉ‚—{ûuðr÷ÂrÉÒêó·úPnÚ†Qªú 1¢ñ€Ø~¤}eâ´£þø§1Æ2¤‡‘²ð0‰�!B†.½k/,#,ƈõÛUÔ z¾¾{——>]Ã0v�j�zGö¢.«SAÇ»�&% ��&ÂŽžÆ3r2!G³(´YáÃ_òNÀdÂV¿|ñ£†Ò¢ØœÝ,Ì”œ¢Ü¿wC[Mh?̇ÏA¨=ƒ õ­\ï©Æn³7·OŒ{Œ„- HÛ8ŠÑ�µ¥bLåÐ=9�¨€¸?Šå¹­2m£ï !�X"t›)4W€ÆHÊÌ äýÏJÖ{ÆóÊÜ!´Ú1Ì/œðšt–­>GdïH¢b"¹‘Aô«M§ x$�¼uËÉ8“ØtÑí__åߥ±â(Ø•¢I$´µ×¶Ô•QYÿ]WWnF?(ˆ‚m¹”÷†ÿµj{ζ§ep¤Ô=F2é~ãµ+‡J5áãf¢qÃÔ–p0Œ'~nÇÃ’}EõÓ« 3"ÕØ¿Ï…©ôöÉØ’l2V,Á¢ö'ft"þÎ**.Vqê›4Ò”@-¨l`)§BçÓPj‚£×ï’GÌàS_ÙWûã§³`®þḨÐhQ;íଢªǯKý4||ô×­D«Õ^ï½âuª°Tf‘V `C­ÔRå„àøD¢r²Y±´ ‘Œç_¿Ïªõø7ÌS¯‡‹›½•å¾…—W•ŸCßclý‘Aé�1¸†í%õ?IbèÒæY——U`èTÿú.FB}ò[‹èìË+!txÒåçßËX¿ zzû):óGQ$4Ý$¢££ F£Ñлwïë�Žh‘²Z­ÔÔÔ R©Z­Ý*•••¸\.¼½½)++»f÷<•JE``à ·Ü{ï½X­ÖÆV´ììl&NœxCÓ*,,dãÆ�üìg?ÃÍÍ�ÈÈHÂÂÂèÓ§§OŸæã�?&$$¤ñ§ë±Ûíœ9sæª êîî~Ýý ið˜8q"ï¾û.Ý»w§ÿþÄÇÇÓ­[7Ìf3_|ñsæÌÁ××—U«V‘‘‘Aß¾})++ãÿüŸÿƒ··7¥¥¥ 6ìªÀäp8øýï�Z­Æl63|øpzõê…N§ãÝwße„ 8Nœ8Á¤I“n¨L�F#ƒ�={ö4^ã¦R©P*•|ôÑGh4Š‹‹¯gñôô¤K—.(•Jôz=ÁÁÁ( <==©««£¬¬ŒcÇŽñî»ïõ¿t­–LÑv±¿¶Gdd$gΜÁÃÃãßç‡r/_2êhvÌÓhp»\‰uûáo·ú:Ö*ðô†Š|îjh.*ÄäBˆªS1Dj ŽÀg•‰œ=Å"Ç“¼Ÿ´]™ì/�ˆ'#€,P0jî{Loz~'oÿ žùj[UÀèklµµÉèÛÊȺX’'ôâ—k×’øÐPM+ë×J åˆÛê:sV`3SvEÓQóÐedìs30Ÿ~|º�#%^v f‹ƒl`¼?…Xu}WÆôØ-”WB¤¯�ŠJðº[�VÙŽåî¨ÀЬgor Q«o´^koý)ÛŽœfpȵç~HhºI*• ooo4 nnn�ÖEïìÙ³,]º…B�ÍfC©T²zõêVÉÃá¸f¸i+³ÙLVVN§“{ï½—ï¿ÿþº£ç�;ö¦FÏ«ªªÂËË‹âââÆAÚëðáÃlÙ²…iÓ¦5võkÚzD—.]0›ÍmMjµš°°0Ž?ÞXÕétôèÑ£]Ë6pà@ú÷ïÏ�Ø»w/óæÍãñÇ'$$__߯ gDD[·n¥oß¾]w42•JÅk¯½FHH‡ƒeË–ñÅ_ðè£�âããCQQ—.]¢W¯^íîòØ´EaôèÑ|üñÇÄÆÖ�ŒURRÂÎ�;™9s&¬^½úš'š4hãÇ�—ƒKGì;hmϱâ³Ï>#00�Çü–v±Ô»ë©ºTÕ®Ö¦ªKUèÝÛQËp”±ëë<Æ{AÖž 4¡UP܆·¼ Â ž=gÏC-l^¿‹ZŸ§Ð•d±¹¼OõQDh²ÈÉ…Ø_1ô#à£trêºód¤ˆ B•Ãþmy˜ƒÜØüþJ*†¾ÊL¯úåÛÓ°|9{ÊЄ&]¹Á¡ø—›0ÕF®±sªèþÝ‚Óu—hÏ¡­†¦k]K8z2 ç‘ytÁ€6 £?ìß�CþðʾÎÇÚž-kË—æ Iz…é§þÊòÒ‰�—DH !Æ~&—íæpFö�bXˆ–¿ePR ¡�‡º@Æ™ûÑròB¦×_×TSÌæ¥éXî•X 4ýIû�‰³I)˜ÇÂÏÃxã1#7=6HÈH’"Ö‘¾tj¥µq)¾PÕžixF16á0é/!W �"%\Ýd“ª �Ì •kX·ç &ÅtÀÉ‹n#囯ê�ö¡vÚ1 or=“³œ=[²Ð>Ip7-Ñ÷G±nÓ2VhÀ®gÔD¨ $ ?BúÊä*íÐm,)Ý€Ò\ÒsLÔT—b>Š´ObžÂàn­Õ·Ï±{K6uZ5Øìc‡¡FOôè(ÖmYÁjO-Ôºþ@¿HF =BÆÊÕäjlØ=cIŒ|F2êà:V¯>ŒÞiÃ-~,‘Zi½Ð=$”Õ_,cµ¿/»×µ+ý­ð4ãº4VëÑÖÚñðc}ôØÍùd|µµìµþÄŽÓfPÛ)Ù½‘ôÊrÊ�ƒH2Ê––ÛFÞÊXHF½a#Ú”QT¬ÚNðÏSˆì€Ú¾· ,ûб 7 w–pªÄ‹àx-œkçtü|0/ņm… Ó;-ŽÝRrŠRCH§u½“ÐÔ ÎŸ?ONNN§õݺ.�ˆw¹{àµBSGŒž×´²{«G ´Ûí¬ZµŠ½{÷rþüyJJJðòòÂáp0bĈ6OçâÅ‹lÚ´‰©S§6&—ËÅúõëéÖ­Äl6c±XÚ}F¼iEÔÃÃÐÐÐv¯§ÕjE§Ó1`À À Aƒøì³ÏHNNný$¬› …¢ÍÛT¥R1pà@Ö¯_Ï£�>ÊðáÃÙµkN§“áÇßÔvòóóãž{îaÇŽôë×�ÚÚZt:îîîTTT`2™ÚÜí144”ŒŒ jkkqssã_ÿúñññ7êDÇï¯Í³nÝ:l6ééé$$$0`ÀŽ?N—.]8þ<çÏŸ¿¥]ô‚½‚)©,iü-¦¶8Sy†n]ºµã YF63ï¿÷S¡‹åɧFa¸¢ZÝ:cLÅÙ»Ð<û$qy�9¿dÈc3¿n%o}Á¸éÓê+þªúëÈ)èG¿ÞÐõ&ÂÍŠÉ'¢þºÕxR§›XøÉžýÊ��è$f4@A-¨B0ºe2ï¿÷4.ߺĒ8|é.a»ÚŽÝ{Iqú6�©½'ðþ#æ?Ú4äø•gÍ¢H~8Šœ¥ ÝoTFÆOOÞ{ëykn ƒÃÐQ†¦M•¢ò>ZLŽr¿NBTEÙ¯®â½M±ÌøêSÑjì™kxÿ5jì¨ÃG1¬ÙaÄpïl^­[Îò7_`q- ò!âÞ™ÌIn©õ,�Ñ/<Åá9 Yö&3cÛ7Ö¡ºo ³û^Q 4a©Íz¸kïŸÁ´öT@cRHm~™ª1‘Ù�«` vò b;ìÓ¦%ü�)-Wr•F’þsÖ•ë0˜”iƒ¯>‘Ð7‘i}›=4˜¤Ç·}Q|£HšuuY &eêàÊ*‰)1W¡È‡¦ÐüJ7…ÔÆåÅŒÇ^‘HjDÛ«Øá�θº¬´¡ŒœtõVÖGŽeRóqJ?¢G'6 >-/wì䆥ž6¥þ~zJÇ}ôÅØ¢tV,ÎCMýà*ƒÀÜZï:§‰Œ¥9R]…¹>y7}T©CG2ø`:K>ØŽ¾k(>ê�CöJ3uúpî¤Ý ·¦ÿC}ƒ›¢á^Õ®Ô€p<nž.—kÛO¡²qêÔ©VÃHII ­Âp£JJJÈÎÎnµ¢šœœŒB¡à³Ï>£¦¦†Ÿÿüç×¼¦iùòåmº¦iäÈ‘·~QµÅbÁét6Vˆ®×=Ïßß¿M«¥ \ee%™™™<ú裬Y³†‡z�N×®í´cÇÒÓÓ¯h™™0a]»veÍš5ÔÔÔ0nܸ[:,rKëWVVÆüùóyùå—¯ Ú²e ‡âg?ûo½õsçÎÅ`0°jÕ*´Z-}úôaýúõ¼ú꫼÷Þ{ÄÇÇwEàüíoË /¼@HH.—‹Õ«WS]]Í3Ï<ƒÕjåw¿ûîîîüêW¿ºæ¾ÛR™îÝ»—Ó§O7VaµZY¸p!ýû÷g̘1¬X±«ÕŠ¿¿?AAAäåå1eÊV¬XÁÌ™3qwwçïÿ;�<ò���¬[·Ž=z0`À6oÞLAA …‚ððpe ˆÛ ­�Êår‘‘‘A~~>Ý»w'%%µZÍÊ•+9þ<‡ƒ!C†0thÛG·3›Íí:�‘s<�JC|Ïø6¿glj8]N†÷jÃIƒ›þ$39œOVP ©ÉCñVŠ¿ÏaWEFu@ËÅ�B-¦¯×³ÓÚ›ñc"¨X;—W¿40û½9$Èy!Z§Èø —ÐéÓZôS§P(FP?4EMÃíõý†í 7GCTu5»5Ä`qS\.V«‡ÃqÅý­Q*•ÒÊd0»‘ùùùµên…Ë�;�N^º€´¥V4½ýlª&!Z­4†2öùP)‡;åûiij“ÖBIYY[·n%66¶ÃGÏ»VK“J¥j¬´îÙ³777†Új¸ººš]»vQWWwÝù^¯¥éV鈮B�oÇúu”êêj,XÀóÏ?ÝëÄîä2ÿžûk{[š*m•|ºïS’îIÂ_ïÍÀôeÁ—Lê?©}×4 !„øq‡iiº½xðÁÑëõ( ú÷ïß)óu8|÷Ýw�ÿ_ºt‰­[·Ê×µoß>þñ�0a„XCˆ;Mmžˆ~‚¥»—ß#ƒ§�n]ºáåîEÕ¥*ÎTžáBõvŸÚÍ3ƒž‘À$„¢]$4u€¶Ž¶&Ä� ::š?ýéORâßïX¬õbvÂl¶™¶±ëä.ÎTžÁrÉ‚Þ]O·.ݸ«ë]�Ø%O!„„¦Ÿ •J…Ãá�‚¸E:k¨v!Ä¿¿ÆŒ0Ž�‚BÑadHª6ºÖˆmâæÝÈ·r:íòà?F=*¤¸óuÄ`5B!„„¦Ÿ ///ºté"-"L¥RÑ¥K—ëþPk[uíÚõŽ Nz½Ÿí6òóóC­–FéŸ µZ�ŸŸŸ„BÑ„Œž'„âŽr#£ç !„× =79zž´4 !„B!Ä5HhB!„B MB!„B!¡I!„B!:\§‰åt:¹páµµµò»GBq *• �Fƒ¯¯/J¥œãB!n—Ný¾t饥¥ÔÔÔH`Bˆëp8ÔÔÔPZZJmm­ˆBq›tjK“Åbé´°T[[ËöíÛ)--ÅjµÊ–¾Ã¤¦¦²dÉ’ÍtÅ�M§ÓİaÃþ-Œ×ápPUUE×®]ec·AŽ)‡ãç�SRU‚å’½»ž`¯`îò½‹a#¤€„BÜÙ¡éÒ¥K× 9………œ8q‚êêjÔj5ÜsÏ=øúú¶k>gÏžeëÖ­X,ÙÂBüX­VŽ;ÆÙ³g3fÌ¿e¸�–¦ë»h»ÈÒÜ¥ ë5Œ¡=‡Ü%/w/ª.UQRY‚¹ÚÌ;9ïðÌ gè¢í"&„âÎ MN§³ÕV¦êêj¶mÛ†Ùl@¡PPWWÇéÓ§9{ö,±±±�Æ6Ï«°°P“?A‹…‚‚FŒø÷kM°Ûí8�N¹¶é�é³}ŸñTÜStÕ]š½Ü½ðò÷ Ì/ŒO÷}ÊÑOà¥õ’‚Bqg…¦Ö¾è�N'ß~ûmã/ÀÇÄÄàïï�ÍfãÀ�;vŒ={ö`0ðññiÓ¼JKKeË ñuöìÙÛu“ÀÔº¥¹K[ LÍùëüIº'‰¥»—2;av«¯«=œÆo§qØÃ+K_eHôú¬-ÉcóÚÍìówæŒÒµò>3é¿y–UÞ³ùðÕn|±Ílÿ(𯰶th©=ËÎO–°*÷8µJ hCHHN%eX G!‹g¯"dÞëŒï X Yùæb*&Îaf¼A> ?y6òV®Àò@*#ýnÇüÛ¹¯·ûàV@Ú;«)�›Á¬ÑÁ7?½ ù¤‘�©ÚN=ᣓIì[ÿ9²ÉbõçÛÑ?ôßLêÛ¹ãÙ©o÷ntñâEΞ=‹‡‡ÇG§«?HjµZâââp8˜L&Ž;F\\\›¦Y]]ÝâãÑÑÑÄÇÇãr¹psscÿþýäääÜÔò�5Šòòròóóïø�¬¯¯//½ôü1G�ÀÏÏ�ÄÄD–/_.Ç´<÷Üs¬Y³†ŠŠŠN›ggíS½ncÇŽ¥¬¬Œ½{÷¶ù=�†^x�wÞy§ÃÖ«ªªJvÜfL&ëÖ­ÃårñÈ#�´«åþÆÔQVnÇÇ߃Ψ‡ç˜rÖkØuScpÒûß#žm¦mŒ0¶Ü*yzw‡ëb˜ý—Ù˜§ñÖ‡ÅÄO�ÉüHCc%gÉüË_1Ýû sÚ˜rÓ–Q`±SqºuP0z7±’ˆ¬ÍcÝ—»©P©±;üöHQ] X½`ÝýÑ:íØ5FF=: £¶µ©[(Ø”FöiP;íøÄ%11ÎóWï³Ñs Óâõ˜÷¬fíÑ{HN‰ÂÐçhl§È^—…É©†Z-‘ã&28¨õª§ùûtÒ÷V¡VÛÁoÇ…£Ç‘-ëØ^V¿Ü^±I$E úYŸgs -ö0ޟ¨»´rÀ¿é}ý6sá>LZÜäsêþ`Bojß±cÚ�K]Ü4f÷×c/ËbɚݜŠKhi6ëòÔ{j1߆R¼í¡Él6ãr¹ l LMõêÕ‹¢¢"***p¹\(ŠëN³¥n€žžžŒ=š÷Þ{�K—.áææÆÔ©S)((àܹs×�¦B¡Àår]õxVVÖ-)—Öæw³Î�;Ç<ÀñãÇq:�r¹�:{Ÿú)”]kŸÿŸ"§ÓIQQ¾¾¾8p»ÝÀ�ðööæÂ… „……ÝšÖ+Ë>XSÑ}ùe‚ß-W:~þ8C{m_ÂÓÀ®“»Z Ms?/ŠY8k¼¨cñBýÆpzÇ~ÊÜ"HyùR"-¤¿6‹4¿F]ÌdK‘†~ON'Þ´œå;ÌFÎäõç‡`¨-då’BFü×bM˘ÿ›B,Na]ÍÔ�x�„Œ%d–@Ùoq|â"æ'ZI{åeV–'0çﳉ=¼˜éóOóآ׉9°˜…eQTåF@L 3_L"¢a™Ë¾^ÈËoì¢LÛ°|½ë¨µ�Þ7„À€ÀVîØNv•�ðˆÜCF´P™ršÉß°–í% ÆŽ6|,)÷Ѧ³(OM¤¶†òÊsTè‡ñDJÔagmþZ Ê ®šdÞé<\¸H‰Jizê„€~p �ô‚¦õ¾2Le¾³€åß•á9Ž!Žõd¹ÍäïscÉüÓ¬†–¦Þl~mi)Œ¯Îa}�•€¡Óùõ/z³ç�_±ÜžÂÛó’àË9üj­;OýîuÆ7ž/'{q:$§2R™OúÚí”8Õ`Wc=‰±áM*à•;Ù¼'‚'ÿ_! ™OÓ=�éOîdö†�˜û‡4,³™¼¥ È �ÉãBÚ½/N™Æ`ÊÉþ`#ÚǦ1¸K}ØÉýhn 3H Wc/ÞN–©œ¨þ€ç=Œ�’ˆQ %™ï³ñ»R‡·Ôì…Yd\ˆ"uz,úÚ#¤ÿ-ƒ}S½ü±=²‘µ‡BIz¼ƒ`Þ��©G2Ó†àLïµ�èɱ´mìGÈÚÞ™B¸ÆFþêel/g,ÛɪˆfÚÔ(´ö#¤/ÎâHd ¡§Oa�NfZ”NndÑ7vW+ÓndÕ¡UÛ±iî!qB,lZGn…­Ó‚G¿$’úêÃÞúlN¡›XȪMd­Ï¦\­‡j;Á÷Ndd5iï“玿ÒFÉé:¢’Sˆõ±s*g5'µøûxQsÑNpgüíåä~žÎ3à´£ï›È¤-Û/ïëå­|†-GÈø< “Ð3,9‰(ŸËAÛŽÐÞ5ªþ8Ð,ŒÜwŠàá)ïJ'ÿÄ(B�j°ä²lycŸK°NmXHvÈ,¦ô-gûêµì©Ñ£7c0ŸÂ瑦-pjŒãR¹|jÏvÑ^~è•@À0&MRcú|ÏO34]®ø´öÅ­T*Û”®»¢j5*•ªq>uuu,]º´ñùÑ£G‚R©¤°°�íÛ·NLL ^^^=z”ÀÀ@Ö¬Y@||<ÞÞÞõ_T g×Ç�G�=P*•ddd`2™¸çž{ˆ��oýjýúõ¸\.RRRÐëõ”••ÈÚµkñóókœßÖ­[©®®füøñ8�NœN'ëׯÇf³ñÜsÏñç?ÿ€ñãÇsæÌjkk‰‹‹£ºº�N‡ÙlfÆ W•ÃÅ‹9wî$77÷Šçî¾ûnî»ï>ìv;‡ƒÏ>ûŒºº:žþy:D`` 555”””Œ··7Ë—/Çáp´X~7#00� &\ñXeeecù·Wrr2yyy‘˜˜ˆ§§'Ÿ}öŒ7ŽO?ý” & ÕjQ«ÕdggsìØ1H·nÝÐét|ñÅ”””\1m///’““Q*•h4¶lÙBQQQ‹ÛÞh4Þ’}Êét2qâD|||ÐjµìÙ³‡�;w^±œ*•Š””<==¹pá*U} ­V{Õº«Õjú÷ïÕ²edd\1Í‘#GÒ§OÌf3J¥’²²2 ¾UwðàÁÔÕÕQYYÉúõë±ÛíW­ÏéÓ§8ûïïOJJ }ô:�ŽñãÇãr¹p¹\|ùå—X­Vž{î9ÊËË)))¹éVâwû÷ïçŸÿüçUáòСC:t…BÁ˜1cèß¿ÎÕ�ÕRKÅ…Zj±sdï÷¼^Ù›_Ž ¥û-ü¶)©*!¸Kûª#ݺtãLå™VŸýáæn‹bÎÂTb —°ØQL™çlÞ^iÿó*i+2ñ¿ñàÖÂbB~;—'—Îeù'‹1¼8‡9¾ ™›žNNòFNgd “U™,X¯aòoçc¬Ú̼ÙÙÄL !¶/¤™ŒÄÞ 9ÇLÔšÍì/ @WH~t?vœê 8ú97ó·¿å ÿùŸødxËæÎcñ†XþV0 mO2g~›ßž_¿|óŒXm`Þ±�銩öê͸¯2ÙVFN1‡éûN£1Žbúÿgïü㢪óýÿdæÌ0À Î ÃÏ  LT[qÃ%®R‘z“}¨em·µívïî¶ßýuï­í¶Ýݼ»ÕZji‘Qâ&–™­¤âbbb‰Jˆ2*?†ß3 Ãüøþ10‚bšý:ÏÇct8sæs>çó9çÌûõy¿?ïÏÚ’ûØÚ¶ò=Z’Xõ`2JW…/¿Í�øGÈ�@g‹@ÜCY¤KŒþmåæŠY^ IDATDRûDÏ&˜¼Ÿ5”Câ€�QsÉ’½ÄÆm…dþüRAÖC[ÙXb!iͳ¬/â¹ÿ&Ê‘ ,TÖ“§ øÕoyêØ:~õN>…w=ÏÒ5K9ü‹­lyÇJ÷µÄ/{¶�``P—•`½„5·k¡­’’óí8P\2’jk¨ÑêÑOÈ[�:ÀBÅŽ?²õÄ~÷§øçeu©o F¯÷ÔFÐ¥’¡}|mX,A~C ˜:#Êè4”r=zí. 8ê�w¨�” ½a÷ªƒúFÚ[›Ùõü›(–¤l2ÐäbpO„ÙˆY†òØfž9—Ìò0�ãF6šÂ©|çJt9$ªÌÍ—NFϹWWQÆNgh?“ à #Ú´2¢Xš›\@Í Û&²ji" ‡�‚ …”'d|h†h�÷�6%çM8§éð Ñ÷²jº YÿA)É9)‚n‰ šŠ6²«ÒBò$ÅŸkHhz‰‘=3Üœ‡ý1ŽØYõ` WåGšiïÛ2CÜÃQ‡ö`³Œ5Ó5XÊ ØQf$!¸˜öTrVÇ¡ÀDñ†·)NXCzX_ãìeÆ(’³ô„Yl>n C7¤À°•R,ŸÅ¿.ODh<ÀÆ Ôƒ]m¥ämÚC¥+Šôe <3‚ðµ —¯=@>00±Ùl—}^SSƒËåbĈ×%žÚÚÚ8zô(�>ú(wß}7III(ž‹(66–ÀÀ@6oÞÌk¯½FBBÁÁÁ8�N"""زe D§Ó!žîJHHè>5fÌ4 ¯¼ò ÿûßINNF¡P�––Æ–-[زe ‹…I“&‘��À¦M›8zô(‘‘‘¸Ýî~Ç;{ö, .dÏž=lÞ¼™Ï>ûŒ9sæ\qT988˜;vðÆoAxxø #ôûöícÚ´iøùù]æ�Û±c¯½öÕÕÕLš4 —ËÅÈ‘#)))!77—˜˜š››Ù¾};6›�ÈÈÈ!Ûïzhhh`Æ ý^_V0�'<)::ð„)öö}tt4UUU¤¦¦ræÌ^ýuòòòX°`Á¥n«•-[¶°ÿ~~ðƒ\Vö¸qã0 ¼úê«lݺ•€€€!ûþ«º¦´Z-*•ŠW_}•õë×Ú ¸Ýn^{í5öíÛçí£ÁÎýÌ™3W¬[¯XLNNfÓ¦Mäçç{³\úûû“žžÎë¯¿ÎæÍ›q8Lš4iÐóé{í-^¼˜mÛ¶aµZ¹óÎ;yï½÷xýõ×9|ø0sæÌÁét2räHöïß/ ¦ax™¾øâ ¯`’ÉdÜzë­Lœ8™Læ°ª¨¨¸g'�¯¾{ˆµÛÇêW‹ybÇ*{Š­­:Íÿ½’_áÊ–. *ßkKê òUaé:a�\æ1yeŠÓW„izä~z’'„`¯6Pëô|&×'3-ZOb\Èâ™:UG|B,t`m‡ªŠFb'ê±~z�î)éž¹C*5ꑱèGB€ì.9cbè6T`(?AUäæ�µRQnàô™ZüÆ¢;SA…Íʉ×~Ʋ~χõPk0`í©ßÔôiè"“I›Ø[?%º SI¾m?ùùZÒUçØ¹!ŸÓÀÙˆ%änþ}m&¡†�lØ^Ñïü›jšQFë=¶D‹>¼“&cÏoth8á Q P8°]CbǾáz—Ft4¤Ý—NȉòOt{77 Øeñ¤ÍÔš�NZÌ =åùwôLæŒEŸO&Ìm@ø<ÊŽåĶ|*Æ,塹¡C_£ã>›Ü�…”6¨™˜¨½vãÌU‹Á>�Ì�Ãly¯æÆ[kƒÝª¶J ·æ’ûz¥Ê LR\›Å׳­©E No¦øŸÕ8®V—ÖR ^ßÌæÍ›ÙurI·dQÌZ±ŒÔ�á�å«&e±f~ IŸ:Kâæ®aI’ª¿8š(Û™G±<ƒì+†B*˜8wÂÑ|6nØÌûefp˜L´7çýü|òw”Ð.‡N˜Í64AÊCUOJb8,fÚàžãiQ·[0¹<å«FxÚÞOÀt´cS(Q €DƒzÄM2÷ƒãˆë<Äæ¼]øÜBXRÂåa¯—Ýê�>ʳ§21“åiá4ÕÔc2’»a#7l§ÌfÃbr p(£I?‘hÑœ=Nåž M�f4: @‰#.hˆv L&û±_ðÄb-eïRý ŽúÚ=MAAAh4ZZZ())aòäÉàr¹8sæ •••‚@LLÌuëã�?¦¤¤„ØØXÆŽËœ9sØ´i:�ލ¨(~üãàëë‹F£ÁétR__Oww·×ðŽ��¥¶¶–€€ŒF#‰‰ž!³ÈÈHΟ?ïõäçç͈#¸ÿþû=u¹‡Ã����w_£ÑÈÅ‹/ ôO"‘ä‰?þü {_jkk½�ÑhD«Õ^æèì줤¤„Ûo¿�O?ý´Ÿ*==—Ë…F£ñÎ{²Z­´µµžùb½í­V+ …‚°°°AÛo8a�7 ƒÁÀ�wÞ‰ŸŸ]]]Øl64 ÑÑÑ:tˆ;1cÆxGÝ}||¼¢²×ãT]]ÍøÃËÊ®ªªbÙ²e¨T****8uêQQQƒö½ÉdúJ®©–– ÷Üs=zô²z†„„PSSãDhmm@§Ó]vîr¹|кõE«ÕÒÐÐà ûºpá‚×KØØØè]bàüùóŒ5 ¥RyÙùÈår¤R)ÙÙÙÓÜÜŒ��dffz½Í½íe·Û¿Ó‰n˜}%‘p×]wñÚk¯ÑÑÑÁäÉ“½ýüü8|ø0*•Šùóç_wxžù‹“<õQ�WÚ§¾Ž�ÎG3aœï·»a{#?�,y�÷C È.½—vÀÚþ#À|Ò‚zt�á~®C°�ÔŽ¡B䄆ǣ~Ë@ѱ4 óH ?Aþ὜0Bü}ñ@!HCHÿÕ‹¬NèsüÒƒ×WªgÞšµ¤KåÈ¥r¶€ÝÛ1„à/ !qf2ñz=IQ[y«©¼�~ Hú .°²ë0ÂàF½|t&Y·òÒ¶"âå—ÚŽ¾þš+EÞöö�DÞg_;æ“§_š0wBèŽ!b«J¦úì)ÊKÞdý‰ Ö,N¸4>©C×TÊi+„öñ6Y 4ê’ÑII<óîËdžLGã“ϱyôSäL¸Á©’pt¡Íœ6ØHŒWà¨/fÇçZÍq¤/õ„ç] MD8–4(í -ÁèB�sž˜Ê¬)I¹o³ãdYã•W0ܒɼ?yX&fX˜‚’ÚN”Ó5PwóÈ(´½uµ©<ë ||”Gœ«ÃÑZË1J’‰ ´QVç@›¦@�GQ=¤%¢±WRdÕ’ ìÕxç¶”,²ã”W“ë˜lÁ¤.^N:6Êòr)©‹#]£EÅ�Y (p`i¶¡“Z�©ÙqJh«ä@…‚Ô)Q¨Õ LÍ&ˆÓ@« Ë5 ;¤¿ …­³4’&š[(oÆsJ¡'ãÁ5˜.TR^v€-‡*Yò`ÒçìÀ{¸{H¡­IZª۵CI ÊÊŒ8l…¬±pÐiëäx¥�„QƒýôSŠ‹‹yñʼn��%%%…[n¹…ãÇ�Ú÷_Õ5ðÊ+¯Ÿqã˜9s&¯¼ò ?ü°·žW*{°s¬n÷Þ{/aaaÔ××_Væ•<Á½m8Ø>þþþ”••‘’’ÂÉ“'½ûoÞ¼¹_ÛK$’+Þ"î‚àmï¾ þöÞ×>>>^¯Ó—§��K/ &™¯‚±ÚÔ2;' í˜{ŒØ3oåÁ¯P0)}•´wµ_“·©½«¥ï5˜0ÎFï/ež �™‘GÅ£—Âpü ˜Mà¯QÒPWvؽó0võ Œ…ìnšÀŠÀ™H¼¼�¢H~T�&d!¯PÔÉ} r žxi'–b “±{ýVÌÓÿ�‡Užúë©_ѱFäQ™è­E<ý“uÔ$­fõl¥k!,Ý-ñLVí¦è½½LHiä“s2¿ÿümD–ã5XfhPºŒTU„OUÀ0ò¬$„$ ¢—š0T+‘v÷<ò‘O™SN2 ‹Ö!·•Qt°}HEÕÀ5äU°ŸÎç¥줭] ›_â¥mÓxöþÁÃæš>?@uh*É )D…;¨~ˈɕ@xïOlà4æ%å³á•"ô?IC'»±ˆ-yµL[¹– ýFÈW=RƯ^ØÀ'ÿµ–i×�°�‘EœâH›QIÁÖ\J$ˆÈ +`éAùä½~Áå@3#‹8Œ{ (nQ¢/}Ÿ¼R@=ŽŒ¹‰C^"–ÊBöPàÀ&O$=RI/ßA^Þ)”ŽàTÍV¢�žAÔŽ|rk`ƒ¨™‹íÔ ¢v�[§$ÌY4´’'�:¾”]¹yiÀ®¡E�'»Þ„÷w¡ÈJÇüV1á?Î"á»ÁQWB±)ŽYãIÕcùÛŒIWë)¢Âa�Ál' È«Kbyt¶VbJÓ¢‘X(û¨eÚ¬KÉFêÊ(³§°ü§Þ�KÛ±\þz¼[œ {= 1a4¶ƒ4AJ,5FÄ!4–chu7@45¶ƒâÆrfh¡Õ@µ]Í,ÑÓÀˆ#˜3gÇ�§¶¶Ö›ýN­VÍ©S§0 Øív¦OŸþ¥„Ó-·Ü´iÓxã�7°ÛíH¥R‚ƒƒ©®®Æf³1{öl<ˆÛífîܹ|üñÇ—•qöìYî¸ã”J%}ôÑe^ž©S§R\\L`` ™™™Þ93X­VRRR¨©©¡¹¹™ØØXï¨ü`©Ô].---DFFR[[KLL 555Øív|}}½¢(""Âë=ˆŒŒDœN'‘‘‘>|xèß§“½{÷2{öl:;;‘H$Èd2.^¼ˆ ÄÇÇS]]=¬¶­©©´ý®´˜ñÕ¨¯¯çå—_¾¡×™Ñhä¶Ûnãã�?¦³³“ùóçÓÚÚŠÛí¦¦¦†øøx.\¸@@@©©©Þ>ŽŽŽ¦©©‰ÈÈHq:�Þ9e&L ©©‰ŠŠ ¸ï¾ûøÇ?þ1hßU×”ÛíF£ÑpêÔ).\¸ÀÚµk¡_=¹å–[<�G�ÆN7Ô¹V·¾!’���„††"n·Û{�644‚\.Çn·Ã… °X,—�ÏÛo¿M{{;{öìá®»îbæÌ™Q__Ϙ1c¨¬¬$&&µZÍñãÇE%4LÜn7;wîÄjõÄÄõ> Ün·w.c[[»wï&33óË{›�Ô¶y†#ã&&òxZ°'6½í<ÿ}¾³TÅ�s'ñ/ú¯Öî ÇØfô®Å4êÚꈌ¸†¾ôìæ÷¿8�9 ™ûV¤£ax1‡ú¤XjFþÀ}LþË‹<ù?¡L»ûaæíØÊÞˆgîê�§BÏ}7Eå˜0Vc‰—Y1¨ãITÒy¬Zm`Ý›ÏñÀÇ2t3yø6 ”ÛAªC/ÛËïqìRýå¬zàëÞÜÂÓ% Ž™ÊꇲÐÈYñhÏ­ßÈïÊ<)ÇÔ?£¢0>�Œsän(EÀ3™|QÃMK—°½l;†VC¿p¼¤È$Ü²à •IVÊnÖò´kÀô¥¬8ôG¶lø éÄG@í°¯Mù/ïÄ2ù§¬H�†½û[ÿùSŸeéØËe“F+PX°ž#‚K@;#ó’`òԆ䕿eEÞFÖ=¾«ä =S—ý’¥“ä—yÁä 9¬½ãIžþëntOÎóôï°Ñ2ëÁÉ9‚ÉÌ8,�ìŸ&\“øJ˜ŸÃÀohg¯Á{4e™%ܸ›SŬìf ::šÎ#O è‡ñ ș넸;–0¬!|Î#übΰÝ/ègg£¤Mâæ^^6 =éÙƒdõד¾ôòíq‹×xËPNÏñ¶gÔìÖ ³~ÉKWyÞæ,÷ü¿:ëËöj-޽o³þŸ„¸tR¡ô*ß‹JË êïo³þ$ „“ú£(„ Uù¼½¡üRB˜>ÎâêÏË&-ë7GM1>ýþŽÛ³IŽ/¡07�ã�*T#4žÄ“ÒI=¯¾÷8äðéù_Ú#®<~r_À¯çåïv»÷`Ã1Â].���Èårï(hUUG�ÅåryUá´qãÆA·§¥¥‘˜˜èõ””——³ÿ~¯÷'&&Μ9þ}ûˆ��%99™mÛ¶yËøÑ�~DHHˆ× ï›f¹w’»��}ô‘wÒþŒ3èîîÆjµòî»ï����L&£¡¡�NÇ[o½Eppp¿ã………1oÞ<œN§7D[[?üቈˆ µµ___Μ9Cgg§wâ½J¥¢¦¦†Ý»w÷æq×]wõóR¬X±€-[¶pÇwƒÕj¥´´”ùóç³mÛ6î¹çþô§?ðÐCñÆo`±XÈÌÌä‹/¾àôéÓƒ¶ß•XµjÕ�ýt=\©ÜÄÄD.\È3Ï<ƒËåâ‰'žàã�?æèÑ£( 233ñ÷÷GŠŠŠ¨¨¨à¡‡âôéÓ„„„ÈŽ;.  å®»îÂét"•J9xð ƒö}TTÔWrMI$²²²¼‚úÌ™3Þk»¯çáž{îÁÏÏ“ÉDPPÛ·o§³³sÐs¬n™={6ñññ\¼x›Íƹsç8v쉉‰L™2‡Ã�Ùlæ½÷ÞÃår]v>µµµÞ”ãr¹œx€üü|\.wÞy§w1ׂ‚L&�?þ8Ï=÷ܰ®ƒï"QQQÃÞ·¤¤„¢¢¢+zœgÍšEJJÊ—¯�ë"yo|Ê»íüq2³{#‘:ëyµ ‘˜ôñÌÖ^û Wïº}Ã¥¨ª¹TÎÔQS‡ý�Cçár»˜3ãê;¹Ұψ¢ÿ}šÂ°,V-™æÉ¾æ´Róy‡Íñ,L×#Gä2K)8`@3ySKY÷óunÿ#/Þ¯ÛFDäÛŠ¥š²Z ñZ{%ù/—2öÁloÂCÐÇÇg&Ðtö¼ºðD;z^N<³Ý^ßLÑ4½ÂI&“‘‘‘�¿¿ÿ5‹¦o J¥’¨¨(ÊË˽ëÔüßÿýßuMÈ;v,ãÆ�óвo:_‡hùþ Š&O¨ïñãÇ â“O>ñz:£££IIIÁd21qâÄ/òìµk�}Ê“ÅpoÎmdÜ €ýkMÏ=Ïòäåh´WÝ·¡½�¼ÏóøéÌŸ¯ðëM€ÓDÙ‡ùì,®ÀÔ 2™†ÐødÒ禓"J¦A±×°ûÅul+1`&ÀãY{4‹ø±iDD¾½÷u5Åù»8Ö. ¸ xr&‹¦hoJèÛõŠ&áÛÒÆ±±±øùùáëë{EÁž°¾›¹éµb³ÙHLLôNÌ.,,×L¹A îú}Do†B‡ÃáM*së­·sC’ë„$�çÁ‹•4ZàæÌrœ•SVòÎñwÈ—‰V©½¢`z¯ü=VNY9ü“fsÞuVPª!qÁjˆ×æ°‘ë˜÷Ø™'¶„ˆÈw辎"uéR¿�¿«ß¦Ê–B{0¢££¿Ñ¢Éáp\WúìÁ8}ú4§OŸoF‘ï=½©åE.1fÌÖ¬ñDÖ+•7ZÙø‘òƒ‰_û9*¹wâ½l:²‰©ÑSÑøkˆŒ@å«¢½«�º¶:Z;Z9R}„•SV^[‘ï=7U4 ‚pS²_Ýzë­TUUa±XÄùÀ­·ÞúÝ|X ×÷¸¾ñb雇J¡bmÚZrøÂaêÚê°tYPú*‰Œ`ôÈÑÃÉùºD“ŸŸííí_ùqd2‹/¦¸¸˜úúzo)‘ï®X #55õ¤Ñþf2p1j‘¡™©ŸÉLýL±!DDDDDn75„Ë墾¾§Ó)¶¼ˆˆÈuãvƒÃåö<¬$>øøô }W�J¥„……]÷B´ß¾L"‘+ŠžoS"‰DBXX­­­ØívQ<‰ˆˆ\—`j²Øù¢ÁН !,З‘2‚ä;# ¤R)r¹œ   ï�`ù&rÓAH$‚ƒƒÅ–¹.ì'OÖòOƒ™TB�Ò—È b´*¢G* ᇿ\@�úàããó�ô@}ݸÜnlÝN2)±…EDDDDDÑ$"""ò�B*ñ!*(€è`%u&+š-\h¶püB š_‚U âÂFHÈ?üäR¤>>H¥Q@Ý Át²ÆDÉ™FRÆ„0^§…“ˆˆˆˆˆ(šDDDD¾IH$>ŒAVŠžóÍÎ5µSÛj¥Åb£ºÅBUc;u©ò¨­Š‘J±!*4¾H%¢€ú²¸�¶;ï»ÀÉ-–.ôZJ…LlQ4‰ˆˆˆ|Sðr)£C‰ÑªH­¥áb'š-Ô¶Z1š;¨3wxÔ©Z3þr)ájƆ« VyÔ9‚T‚ ¨aár»iiï⨡‰ê N§‹Vk�v' ™Ø†"""""¢hù¦ '$R?9J…Œ­ ‡Ó…¹ÃNE�™ ÍŒ;h¼ØI‡ÝÉñ ­œmlÇ_.%d„á#ü‰V¡FÝ# ¤qÔP‚©©ÍÆþò:�nÀdé XmÝ\ì°3Rå‹�¢'"""""ЦË1™Lb+Šˆˆ|ãðƇ(ˆ–Óf äBK­V;UMÚº°Úº9q±“/¤f”¾¡�¾„*¡ Rí‡Vå‹B& ¨^ÜnhµÚùç™f>«6ÓÜÞåÍÃÚípRßbB#wˆóšDDDDDDÑ4âZ"""ßt€ё.œ.7&kU�í´Xlœkj§¹ÝFK{ ªš­(2F*ÞL|£‚•„ŽðÃO.|o”°tvS~®ŽÏjÚ0Y»q¸Ü}>÷¡ÛGFà52éõ§FãDDDDD¾s¢IDDD䛎ôÌ[‚Pµ?Á*N·›N»“Æ‹�T5¶QY‘æv&kW¿L|}Ô÷1•yoøÝçZ8r¶‰æv§kÀ>nº.ñBE“ˆˆˆÈwJ@rAJ ŸgÔ´¸P/vr¡¥&¾ïs*ó^ÁôÙùþq¢–sMí— &ð„îu;]¸ÝߌzЍj©ÂØnÄÒeAé«$\Îè ÑÌŒ�)Þ"""""¢h¹åããƒ\ðA&È ô“¡¹”‰ïûœÊ| `ªjh£Û9¸7©Ûáâb‡×׬š.Ú.²©d©1©L5�ðÀpT¾*Ú»Ú1¶1u˜x¾èyVNYI "P¼DDDDDDÑ$"""òeÔÀL|ßÇTæn ³ËÁ±s-ž¬ÅÐ8´`OV=[·ókõ4]´]dÛñm¬˜¼‚‘#û}¦òU¡Òªˆ Žå�ãïpïÄ{Q)Tâ…/"""""Š&‘) ¾/©Ìí'Ÿ�oa÷çÕÔ´Z°_e¾’Ó妣Ë�ûkTM›J6 *˜¢ Ð’9.“MG6±6míÐmp:Ÿß=›Ïi[Olúw¦Éo@»KÙ½}7ŸÔZÀÙM7Jt©KXqW"éu\ú9ÿSÁ¼gžg©¾Ïvë^~¿ò%Êœ}¶…-ä©u9„|º�?¾RÈéÆÎYÍ¿¯šÆ�Lëtªá‡ÎÂÐj@¤gú¨éŒ ×g¯òþ[ÏéXøôó䌜Ÿ°.çÿ°®|…'Ó†(ÝDÁÿ{€·F¬åµOãËw�‰â× àÎRƒ†Ó� |òæFÞ*©Â.‘ƒBGÚ’Ud¥†"wV°aí[è~ÿ[æ�¬l}jæEOòðT1a–ˆ�Ò­¹XîXŬàoPµ* xá‹Ywƒ v`<²‹]G«qHvP'¤³hNÊë)¶µŒ‚w`èp€KIÜœ%,óî/Q4‰ˆˆˆ S@ɤr�`•‚©c¤iÒ¿’3E!þ`]+q™<÷”ÛVžC0ëÁGˆSöj ߨCi}³Â¾¼3)¡{rk')q4²ñí#T'd%¹9Í%Š&‘kQ2©¤Ÿ€rºÜ¤ŒÖšÊüD�‰ £ù[“ʼÓî ¨ÂHÓÅNÏùúø “úà/�J$tv;èêvâr¹½ÂIâãù^[‡�@?ÙM_ඪ¥Šé£¦_›¹ì¯áð…ÃCЦ_ý½¨aÝ#ÏÁ¿°a�� ? ¡öÐ eñd=öY  ~þùÁY¤_ܡçäL¸o5S [ØrÈ„fÖÃüö¡ihìlÝXÁÌ{’dÃfžþX\bGšèžùÒöld¯÷ª½ÀÓ ¬ä?ñ[›Òxò•µ$ŸÞÀê§k¹û…ß’trë^/ä\»Œ�¤,þ×Lâ{êܸ�ýî0�ŠÞúiÐMРì§7³±*’yOÍAS½™Šö¦Þ‘FrLS·ïåðI$Ç_j—‰²÷·SlЏ ²fëQTðB©@‚¢“¦¶fÌÊTîÍJì'v�?4d»:h€h’2!NæSPžFÎØþbjïóϱåh#²„¹Lsî¤Pö0¯ü*™½~¤ÇÓ4–Ý?„ü�,æu±³ÜJÈôÕüòѱûݰőų¿Ï„÷žä?¶û²â™ß2/¼÷MØPKV1KRFÁöbŒ.ú9ÙdÄõ1ÂÛ>a÷±xîûS:¿žšG¦±ú¾OXûþ'˜&ézêl¢tÓsì�z˜ßÍÕ]󵜒•C MxyŠ»sH ôˆ�’×!K[ê8GM1…†&'þãÈX¾½Œ{׳ëh«f .Ô…ìiMdÕêd”öJ þ¶‡ãñˉê•T•»ØþE™÷Ü Á˜ŽìÁ½„œé¨+dýÇÇ™¸4™Aå�£’ÂC�ºr9qrey›)®‰#ƒb Íɹ?…£’‚ …T&d¡>y€cmZ¢FiÎ"¦Ï ØõE7 Á�M>Ž Ñ`¡üƒ”˜(\ü&d’9Iã{;P�6O]Dúht(Üy€&A Âo_Ĭh�òüõ”úÇ¡•Ø0Öv“¸$‹dµƒê¢<ö\P U«è¼è üгŒ¼7ª‰ÕŽ¡Ù³X~{Ô {NZ*÷�¿×€C‡$œÔ%™$óyáÔDYh#oÃ)´z�ö63Ííá¤/[@œ¿‰ò�Û9PëÀ�‚¸9YdÄ)1}^ÀöÃM 8@•È‚E©„÷Áp8pÐ ½A ò(ÒW® Þ€bt:Y³õåù¼ð©Œe7¦¶f,êT–,êûlÐÏ]E¯3ÝvѪ`”’›÷[#ADDDDäK (A*ÁW&%TíOÊh-uÜŸ6–å3â¸+9š”ÑZ¢Fz.4[8tº�‚£çxóŸgxû“*ö—9ÛÐF{§�n§ —ÛÍ×™NÁW&%%6„È bC™«e΄H$E“¥ÁW�¢�I PÈ�J<âÈí[·KW÷×2¯ÉØn$<0üš¾A][Ý�Ÿÿö®PÏáÉWž M!g �þKyö…§X¨*#?w/ 2°VÔ {ðWÜ7ÆLé›8=ù ž¼3„š� (jkI'²H“îå¥�r–þæižþ·Dj�A¤^Gòx0ôÄ��Ú³ì¦ N4…PAÙ9h8[EGØ&¸vó·¿¡¼çϼ¹ñI’Œo±áý¯À¨°M剧Ÿ ]ѧ~4°{ˇ˜R²ÈÔ&3fÐøR5Ê0·ô7;må{(´$±üÁU¬Z½„ðŠ]¨óX �-q ³È¾?“¸†ÊÍýÛ®7$o0ý,j.Yã­|¸­SŸPBë¡­l,±0aõ³3K—•ïµ%uPùª°tY†¶_d“W¦è1}¥!L˜¦GîÉBÈÿØ@­3ͳ¯>™iÑzãBÀ gêTñŠX *°¶CUE#±Iz¬Ÿ¾E÷”‡ÐË•õÈXô#!@v—œ± 1tV`(o¤*rY!|Rn öL-þ KÑ�)¤Âf…×~Ʋ×ðŒâ Xc=õ›š> ]$¤M a÷µN•‚½|'»+Õ¤¯˜6ìÀ¦šf”Ñ[¢EÞI±Ñ�@h8စÂ�Í~�(Õ�v_:;Ÿ, ÿÄRïæFƒ»,ž´™:Båé¤ÅäóÖå=åùwôLæŒ%€xBÞ)ÄÜèçñPöa~¶)&­æÏsC‡¾FÇ!l{›Ü¶nIdb¢öÚ $W-û}d†ìfË{søí"Ý�»È%\µïg WR¸5…Ë�‘Á‚IŠ+—1ͦ�T½™âV“pGԕϽµ”‚÷Ë0¹@{[ Æ_e–Š,ŠY+–!ø×óþ0ÌRÕ¤,Ö$8>/¹tÞ�¸¹kÐÉeª¾L*˜8wŠòÙ¸Ç�rt*wÎÖâ0™ho2ñ~þiÀ�M.Ði³Ù†F×s^�zR="Ðb¶¡�Ðc¦iQ·1¹<å«FxÚÞOÀt´cS(Q Ô#lW;{yúÑ_E˜¡ýØ`Š 6“Ÿ�À¸ñISà(ïslÿp¢‚<} ôpØl45×£Ô¥{<ƒA)de•Íö¼VÝ£‚8ôfè'_ÄÍ]Åc3ŒÎ0œ.dóÇÅÌúqQ5õ˜ Íän8àùºÍF¸É3D!„ë{ž-µݔ4Ù z@{&“ýX26Ã6¿[HÔƒbxžˆˆˆÈ·Z@]K*óoÒZP>€Ÿ\`T°Ç`p»álCï•^ ²á"ájæLˆ$zd#üå||ª‹­«ÍÁÅNû×âiRú*iïj¿&áÔÞÕŽÒ÷§$÷zAœT‚¼Çû!d—ÞË;`mÿ`>iA=ºÇp?W�!X‡NjÇP! rBÃãQ¿e èX š„y¤…Ÿ ÿð^N!þ¾x ¤!¤ÿêEV'ô9~é‰+TÚNÅþOhÔ¦1mtÏ&�5˜:§‹Ô#û a€âèc`Ë®b:èƒôCz›ôAúÁEêèL²n+ä¥mEÄË/µ}ý5Î+´·$ò>ûÚ=4)ÐÜ€¹B‡pijXõP2ÕgOQ^ò&ëOd°fqÂ¥0²Hº¦RN[!´�ò´*hÔ%£“’xæÝ—É<™ŽÆ'Ÿcóè§È™pfªIÂÑ…6sÚ`#1^�£¾˜ŸkY4PÄ‘¾Ôžw54áXJ XР´0´£ ÎAxb*³¦$!ä¾ÍŽ“9d]I%“yò°L̰0%µ�(§k îæ‘Qh{ëj3RyÖAøø(�8W‡£µ–c”$h£¬Î�6M�-Ž¢zHKDc¯¤Èª%A}­�hÃd &uñrÒ±Q–—KI]é-šð(îÌJ@�K³ E ˜Ô L͈SB[%*¤N‰B­V`j6AœZMXF¨ÑHÀ8Ø!ýU(lÕ˜ ‘4ÑÜâ¸zÉWg–k&/ç‘x#†ŠrJ·¯§tê*²ý¯" \Cíð4–ß?D˜%€Ë�Í! P†7)œ¸I©$|ø»Êšˆ’€&i «nïï-í+àÇAS¥GTá PŒJDïÚEuD©oÎo�ž'"""ò‹‰�'‰„ÊOÎèÐ@nOçÞi±,›1†ÌÉ1LJt�H©n±Pr¶‰÷J/�ûÏJ^/:Ížã5”œm¢ÁÜA—Ãù•‡ðõŠ>‡Ó�ÑÜÁGe5TÍÈ¥R&Çs먑èF*™F¸Ú<‹Û~]ôÂUáÛŒ×ô�º¶:"#®A05rx) ÆR �™‘GÅ£fÆ;� Ì&ð×(i¨«{ »wÆ®V`,dwÓæÄQ‰ÄË+(*±¢OУ;��ÓEµFŸ ‡1ñÄK9q°“©Œ­Ï<ÉKûMÞúë©_ѱÆKõsÖr¢ÜLÀ˜>õ�I$QÕȱÝE”îßÍá&5É#ûÕY†åB —‘j£Šððá�€_i~ÙПiH»{!gK)kólÑEë�ÛÊ(:XCÉBŠª¯íº°ŸÎç¥줭]KšíC^ÚVÁPN±¦ÏPÚª *!…Œ;§ lèõ ô8�yI¶¾RDMO!vc[òj™6?­¿/0™U�$qâoøÄt#®p%Ésg!û$—�¯ofó‡Íè'ë¯yÔ[ˆK'#¨ŒÜM›Ù¼åÌX@r_£Y¢%uq:²¢|Š7ÆPŸ’�þB›·æ²ù£v’æ$^2´ÍåìùàF—·‚¤Í(ÞšKîëyÎ`V1‹ô ã佞KîÖb„éÄ `*ÛE^^eM�擗üž–ÊBòóóÉÏßÁqy" !@t*éÊRòòòÉ'�÷ËšpÚéD]È'÷�ÇËÐMÌäáÛ4Pn©½l/¿ÿű>õh ±n ½ä³‘'sßC ùã+/ñô!5‰™?aé¤þ3p„ñédœ+ wC)”ã°( h¿úùŽ Dz¤eÃH9>°¡2ÉJÙͺCžv ˜¾”‡þÈ– ÿ�!!�ø¨n9 俼Ë䟲"uöîOxlýKäO}–¥c/Ÿm¤Ñ ¬çˆD�àÐÎÈ$¼ß¥@òÊß²"o#ëߊU r…ž©Ë~éi;ç@{9‡µw<ÉÓÝ�îÉyžþ6Zf=8 «_P"™9‰öK û§ ×$¾æç0ðÚÙkðM™@æC 7îæ”G1+;‡Yƒ}–Î#O è‡ñ È?pGqw,g`’7Mⲇ[úÙÙèi“¸¹——�BOzö ^Q=éK/ß·x�· åôo{FÍÎaÍp«(‰"ã¡ó˜$qd=è)9{µgSÎò/'¼ƒý«)Øp 䉚éwEAKé•EBB:ég¶³ùoGP Ÿ“…V©$cN o¬§DF$² ±¿œPLº“EÍ;(øÛ:‚.u¼'|T�Ì%£*Ÿ·7”_J2Ó£�„ÊþžK¡ÉŒ-<�åºþ}˜pÇ�¶¿Í Gž¾»#›8ùÍû­ñ¡vØÞ÷’ÞR<Žm¡ç%|¿ž—¿Ûí>(šB""""×'TÜn7N—ûŠkAYmÝúÉ©òEíïËH•/Ñ#•Œ ÷¬%‘ø ññÁLJagäë{l—ÛMg—ƒóÍU6PQg¦½ç˜SFk™=.‚�~Hz²ãõ.‚[k²"éQ~rẜÉdB£¹¶é½Ï=Ïòäåh´WÝ·¡½�¼ÏóøéÌŸ¯ð¡ÖAþQô¿OS–Ū%Ó<ÙלVj>/â°9ž…ézäâmp9�¥0 ™<�©�¥¬ûù: ·ÿ‘ï׋m#"òÃQÞ“É/+î+óèøøøÌ:€ÎžWžH`GÏˉ'(Ñ=àåub7‰ˆˆˆ|½\ËZPÕ­Vª[,œmhC.xBþÂFø¡RÈ ô—¡Uù Wû£U)� Ò+¤wÓÕí¤©Ý†ÑÜ�Ùjç|s;FsÍí62)1Z·Ž &eŒ–`•Â+˜zëíç+0:4°÷ékK›¾rÊJÞ9þ™ã2Ñ*µWLï•¿ÇÊ)+obí4¤=ö$êóÙòT>¦n�É4„Æ'“>7RLC¡A^³•ÍÛ·²Žt—²v‰(˜DDD¾ÆßêÃ×äi2™L466b6›1›ÍÈårìv;jµµZMHHÈ5�>Šˆˆˆ|›é —sºÜ˜¬]|QgæB‹…–ö.Ì]4·ÛhëìÆív#$øÉäR �þrýäø Rü}ozð¾8]n.vØ1wtÑÖaÇæpa±u#—Jˆ )&˜ñ: |…›¶þÒ—ñ4´ÛÚÙtdS£§¢ñ×�ÊWE{W;umu´v´r¤ú+§¬¼ö$"""""ßnÑs�ž¦oŒh:qâmmm( 4 jµ�FƒÉdÂl6c2™èììD­V3~üx±çEDD¾—ÊátápºéêvÐØfÃÐØ†¡©k—ƒ¶N;mvìN�vöžYÇCÍyê-¯Wl)dRBFø¤$1:½V…Ÿ\@"¹¹¤/+šz9h8HUkumuXº,(}•DF0zähfÄÌ/$Q4}ûDSWWûöí#""‚ÄÄ«Ïè;~ü8õõõüà?@.ƒDDD¾¿ªw.R·Ó…½O˜�Õæ ©½“¶ŽnºNlÝNœ®ËÓ6I%|‚”¾hU~Œð—¢b„¿/rArÓÅÒ�M""""""7Z4}­sšººº(..&%%eØ?�'ND§ÓqðàAfΜ9láäv»Ù´i}ô™™™,[¶ìú�·›þóŸb³Ù°ÛíŒ9’{ï½—Ñ£G_W¹Ï>û,.—‹_üâ_IHŒÝnçØ±cÔÖÖâpxREŽ5Ф¤¤~mjµZyôÑG‘Éd<óÌ3h4ªªªøÏÿüO~ó›ß;hù<öØcÌŸ?ŸÅ‹_W[lÛ¶�™3g~ÕýÍf3›7o¦¼¼‰DBhh(K—.eìØ±8~ó›ßð“Ÿü�NGGGþóŸIKKcÖ¬YâÓDäÛõðçÒ<( nÞÝ–�½»›{ܗÛ�ËåÆîtÑÞi§Ûy¹hêMƒ.q;ù¸p/ŸÕÔ0å�ÕÈée÷áÖ­[ùÁ~@DÄ¥4Ý~ø!•••Þ¿- kÖ¬áäɓ̜9Sì(‘ï_«hÚ·oß5 ¦^‚‚‚¸õÖ[Ù·oÃh%%%ÌŸ?Ÿììì"˜6n܈ <öØcz&B_¸p�õë׳zõjôúoî„Õ’’êêêúm;þ<S§N½lÿ––þñ�pÏ=÷ «|þë¿þ •Ju]õôññö1ív;Ï?ÿ<·Þz+�>ú(‰„ãÇ�ó—¿ü…_þò—„„„x÷u:�¼úê«$&&Š‚Iä[Ogg'‹…+V Pô_KÇô“]ñûp÷nÔ�*šå²kò,Í�;—¹sçPSSÃ'Ÿ|ˆ#ÄEÓ�âĉDDD|錠  ÂÂÂ8uêãÆ�»êþøÃhiiaçÎ�8�Nêëë±X,øúúRQQAJJ �<ò•••<õÔSÌŸ?Ÿ�>úˆàà`²²²ÈÍÍ¥««‹'žx‚[n¹…C‡áããý÷ÞË–-[¨®®&""“ÉÄÝwßÍ|ÀøñãÉÍÍåÏþ3UUUü÷ÿ7‹/&;;›?ýéO°bÅ ^~ùeŽ9B@@Ë—/÷ñííí<óÌ3”••yë'“]2~¬V+;w½·ÛÍ´iÓ˜8q"¤µµ‡ÃAkk+ñññ¤¥¥õk��‚©—ÚÚËWÁ�J¥L˜0�={ö�žžÞï3‡ÃÁ† (**b̘1ÈårœN'�?þ8¿þõ¯™?>üìg?cúôéœ8q‚††²³³™5k¿þõ¯INNfÅŠüõ¯¥¦¦†gŸ}¶Ÿ8íáîêêâ£�>B"‘ ‘HX¸p!Zí¥,Yøøøp×]w!‘xؘ8q"©©©8p€»ï¾Û[ç¼¼<”J% .Ÿ"ßjÜn7ûöí£¥¥…wß}—E‹QTTĹsçðññA¯×“žžÎÁƒinnÆd2±dÉ’~ÏÞ9sæÐÑÑÁ™3gúÝÛï¾û.&“‰   :::®X‡ââbÒÒÒ¼÷^SS¹¹¹´¶¶’””$z�DDDDD¾ÕH¾Žƒ¶¶¶ÒÖÖ6¬9LWbâĉÞDWãßþíß ";;›+V •J©¯¯ç�àñǧ¤¤„O?ý‰D‚ÃáÀn·óØc�Q__Ï|ÀO<�B¡`÷îݸ\.öíÛÇüùóùàƒˆ��å©§ž"((•JŸqã¸xñ":�Žîînøâ‹/æôéÓØl6.\¸@||<;wªŠ_|‘ÿøÇ¼þúë´´´xÌ]wÝÅÊ•+½õëËáÇ ã�`éÒ¥ ¤¤„{ï½÷¦eùªðññáöÛo'88˜Å‹SóÿÙ»ó¸¨Î{�ÿŸYa–a€� Û"¨7b$n1jªI\“´IjnÛ¤Ms›ÛÜü~¹I“›äÞæuoÓß«v³½µ5šªYL*jÔXpÁMD‘MPa˜``˜õ÷0ECbÒ>ï×k^Êpæðœç<çÌó=ßç<§¡“ÉÄO<Áã�?Ncc#/^D*•âp8xì±Ç®ºX5øbÌ€ªª*\.O<ñ .¤³sä§šÖÕÕ¡P(ˆŠŠò½×ÓÓÚ5kxä‘G8wîܨÏA‚ ‚ ‚¦~&“éª!$7ËßߣÑxÝå:Òr¹™¬o¼¾Á` **Š””üýý©¯¯ú2+S§N%55µZÍĉ1 ÄÆÆÒÕÕ…ÕjÅétLii)3fÌ 44”ÄÄD_ÐAhh(555TVV’››KKK µµµtvv’””DEE---üà?à׿þ5v»�ææfIOO';;{Hù:ÿÍÍÍÄÇÇ}Ãá°Z­ÜvÛmH¥RßýIƒ�›1�•9pà€¯|Ð7Q¡P0sæLRRRHIIqS¦L!::šI“&ÑÓÓƒÓédÊ”)Ìœ9“÷Þ{�»ï¾›ñãÇ�øù¤¤$öîÝ˾}ûðz½¾mÌ3ÌÍîƒA�ÇCoo/qqqìÚµKœ„8—/_&::™L†L&C¯×ÓÒÒ@TT”/4šóôÀò���„……]ó‚FFFÆ�‹qqqÈd2T*Õ˜œƒAáŸ.h²X,c63ÒÀ´ä7càK| £=ð…/‘HP(( ßÿ^v»ÝôI$üýýñz½TUUƒÕjE¡P V«7n%%%4662cÆ ‚‚‚8|ø0�Æ× ?~ä÷111\¼xñªlÙ… |–L&ã�`ݺuœ:uêªì� |ãOêWE^¯×÷ÞHÇ÷a·Û1™LÄÆÆŽÉ9HADÐ4(hÒh4c4�fxÞp.\¸Àùóç)**¢§§‡¸¸¸Q}Îßßß7ÔÄétÒÙÙÉùó穬¬$00�pûí·#“ÉHMMåôéÓ„„„IRR………$$$ V«INN¦®®ŽššŽ;Æo¼áSSSCEEEEEØíö!å“H$DEEù&oèêêÂn·�º^Ï€5XttôˆŸQ©T,[¶Œ²²2ßöÇÆÆÒÓÓñcÇ8þü�™´FãàÁƒTVVò£ýˆÓ§OsìØ±—=~ü8‰„¬¬,æÌ™ÃåË—‡ü>99‰DB^^ž/ø*--åĉWÝÓĺuëØ²eË�Ì™ |ÓEEEÑÔÔä»(ÑÜÜLddä ¯'<<œææf<˜L¦a—kkkC¥R‰G@‚ ÿÐnÉDJ¥rL3M7ûeÅ»ï¾KEE999L™2eÈ�Ð# F­VS__ÏÒ¥Kùå/Ibb"=ôo¿ý6S¦LáÎ;ïú†”¹ÝnQ(¤¦¦²wï^RSSX¶l���üìg?C­Vóàƒ„Çã!..ŽíÛ·SQQÁìÙ³™2eÊ�rLŸ>�¼¼<þüç?ãv»™3g£ÚöììlŠŠŠ0�WM9~-Ó§Og÷îݾ¡‚“'OæŽ;îàí·ß&%%eTÓ‚hnnfÛ¶m,[¶ŒÙ³gSWWÇæÍ›™={ø‡O°iÓ&är9R©Ô7k×àvõãÿ˜Í›7óÌ3ÏÁøC¢¢¢®Ê@%%%qÏ=÷°aÃ~úÓŸŽÙ�QA¸•’’’¨««cãÆ�Œ7ŽØØØ!Ã{s»Ý¼óÎ;˜Íf:::øíoKZZsæÌ¡´´”?üáhµZ†Íuuu¡R©F=ìOA¾‰nÉÃm÷îÝ{SS�Çl6sòäÉQO=có¤ÚÚZ~÷»ßñÈ#��‘‘á+ËÑ£G™2eÊ�¢ÿ‘µ··“ŸŸÏ¤I“ ãå—_&33“'žxB]‚ Üôy]<ÜVAÓ ç›øp[�F3f÷5™Íæ1êw#xæ™gرc›7oF"‘ÊôéÓ‡<è]`` ­­­¼òÊ+¸Ýn&NœÈý÷ß/ŽLAAá'èâdš***°ÙlÜ~ûí_x>ýôS‚‚‚®9k› ‚ðÍ!2M‚ ˜=_0ÓtK¡GFFÒÓÓ3&ë²ÛíÿT™AAA¾Z·$hÒh4h4JJJ¾ÐzΜ9ƒV«½%ÃóAAAAÓ—*==�ææfÚÛÛoêómmm�FÒÒÒÄ^AAn OEŸñÒ;E¼ô×c¼ðÎ)6Wö�¨ª+<ÆÏÏô~eE©�ôôtÞ}÷], þþþ¸\.æÍ›G||ü°ëöz½äççsá¼^/“&M";;›'Nàr¹ÈÉÉ¡¬¬Œsçα|ùò1 ö¼^/¤¾¾¯×KFFÆ5g#4™LìÝ»©TŠL&cÉ’%R^^NQQr¹­VËÂ… ‘ÉdX­V>ŒÍfcÕªU7õ,+áËSRR‚T*õ=#l€L&ã‘Gt³_|N';wîäÞ{ïE.¿ö鱫«‹�;wâv»q:�Ü}÷ÝÜvÛm7t¬I¥Ò:ŽA„¯uJ ªJxá/ ¤Ç‡‘¯#;!uÿM0¦5O/OFc©åµ¼fê&ÃéƒÍDäfót” [e /m"sV(ÊC,a¼ì ñPg† ¬Ô‡²bptÐÝ ñ©¼˜‚²·™õ[/R–žÁu/—*e}ÁÝÐÞjµ¬?8jb_½šœ)~C–0V6PŸÎ«Ùjèh%¿É6#[Îú±úþ r7u‡‹ØV¦ãùPènƒYf“�‘®­Í”9¢ÈVöPTç$sfTô¯ØÖÄö32–¯Ê&Cj%ïã&Š{ä™0ÌËf©µ¥¼|¬‰Ì)�ìë½�WÇ¢öØ(:cÃ|UÓÁÉ¿. n„ X,ŒF#&“‰ªª*”J%N§Ó7qDRRÒMOú0}út¦OŸN~~>�†¬¬,Ž?N@@Ë—/Çn·sâÄ <R©”ŋ˥K—8rä±±±Ã>õ¾®®Ž¦¦&{ì1Ün7ùË_7nœï÷µµµ”””pß}÷�Yv¬¥¥…––Ö®]‹ÛífË–-¤¦¦Ž˜](,,$''ƒÁÀéÓ§9yò$999?~œ•+WÈÎ�;©««#88˜3gÎMMMÍuËb2™8pà€o-Z´�FCyy9§N�B©TÈÝwßíë$677ãñxˆ‰‰áŽ;îÀn·³gÏ<½½½Ì˜1ƒ¤¤$vïÞ�ÛíF©Trùòeî¹çt:'Nœ ªªŠÐÐPZ[[¯Y>»ÝζmÛˆ‰‰¡¥¥…¨¨(îºë.ìv;yyyx<wÜqñññÃnOPPo¿ý6ÑÑÑ8º»»ùÖ·¾…B¡ ??ŸÖÖV<ñññ̘1ƒòòrΜ9CXXF£‘ÌÌL222n¨®d2Ù°ÛÓÔÔÄáÇñóóãüùódggGKK ‡¢¡¡�uëÖH}}=‡F*•HWW“&M"--�üü|š››HMMeÊ”)×loŸ|ò þþþ¾!((ˆÍ›7sÛm·áp8èììäþûïG©Tä¿óÎ;,[¶Œàà`ùôÓOY¸pá°ûàìÙ³œ={³Ù̽÷ÞKDDİåkooçƒ>À`0ÐÑÑApp0óæÍ±]]ºt‰“'O"—˱ÙlLž<™ &PPP@MM |ðZ­–ÜÜÜ÷ÃéÓ§IJJ";;›¦¦& ¹ÿþûoèXS«Õ7t ‚ _CÊ–®¸ƒÜövÊ.¶Q|º˜í§ô<ú˜°¾a{~hÜv½�ÔÙƒX ëû~QG…QÔ‰)8ŠäÞzjZ­*r“�]îÅâµ¢ˆIùû¡n­á×…ÔE]¯œlÏÜKö41g2³¯W¨‹ Cùq ouéÈLŒ"{¼ê.R×aeókßB.pÄô@(BŠ Œi‘Uœ¬w“iätO8«uàšLVꂵýˆ°ti8šXßf£ñÀ)Š.„íµm»Ú°’1H¡rÈv_U eÕŠId]ñU¼úÁlŒ mW_àÍâ6ž\•LÊWÍÈÿÙÛùH��ÇãaïÞ½¨T*T*óçÏqÙáÞx¯½½�øøxŽ?ÎÝwß}Ían‹…Ý»wãt:ÉÌÌdòäÉ×,»T*eîܹÈd2öîÝ{Ým çᇦ»»{ÈûiiiŒ7ŽŠŠ Ün÷ ×áäÉ“9zô(þóŸ aÁ‚x<l6{öìA*•ÒÝÝ�Ýn÷e2vC‘¬V«¯³ŒÃáÀét"‘H|™ …B�ÝnÇn·£P(P*•Èd2BBB®H©$11qÈ{f³™¦¦&ÚÚÚ|õér¹†Ýž+ÿV`` 6› ¯×KHHR©‰Dâ{`‰D‚\.÷â7RWcE¥R!•Jñ÷÷G*•âñxèèèÀd2±cÇ_{ííí6hòx,6¡ˆMEÜ‹¾³Ž|·š%W ´èîq¢Ö¨P¶Ze½�â½ÉMðØÈÛ×@Äœ¬á&Àx¾†ª0³“ã1DBÕ.+–�ÌmÛb™­vÓXz�²ðD®¼¼©ŒÕ‘PÔ̇].²f_ÑψÁÐÞNY¯ž,E'y«%t~†ÀŠœd8š.²£=œí쳆³4%Š…zæ­UÔÙ!å+šmãŸ>hŠŽŽ¦¶¶–ñãÇãt:ùøã�™?>R©”E‹ {ÕüJQQQ>|·Û�ÛíÆd21gÎ, &L`æÌ™|ðÁû†G£ÑðÐC�ªÜ:�޲²2Ôj5.—‹ŽŽ_–ÎëõRQQAll,jµ™L†V«¥­­ ƒÁ@mm-:�Žàà`œN'n·›àà`𛛝ºGf4:;;™5k¹¹¹œ>}šââb²³³ fÉ’%ÐÑÑ�¿¿?&“‰³gÏâñxðz½œ8q‚©S§¢Ñh|�æ�eGÊ8�¥p8H$ßç®`׉ $''—Ë…ÍfÃÏÏ�ÖÖÖ«¶gÖ¬Y¸Ýn¬V+jµšŽŽt:AAAX­V<n·›ÍFPP‹å ×Õõ\™½ÁÁÁÜvÛm¬X±©TJ{{ûˆ„T*%((³ÙìË„ ²7"<<œ#GŽ�œœLgg'õõõL™2‹Å2ì~ðxå5¥P³j^ßD Ä„BÁ%¢§©AêO‚ÒJ�TOÊÝÃx=ê=%¼Ö B£gI|y‡šY©¼v€wúïEloò`±:P¾_È>m ÏNuP`ì�‚¢¾ápHѤLàùìÏ/JkBåœþ{{¥ ”ˆž’Nt�еӭlø[ùr ’‡SdWo´2ŒiÚrÞj�á¿®e¯Ö³*ËÌÆ÷‹Ø!�Ðäq<¨F17† §x픇ןEóbPªT8��å¥ÓR”xPÇ'²ô+œžPÒÿüs_mõý_ Èúƒ+9 üUÿ+Àëõù&5í+ïir¹\ìÙ³‡¶¶6¼^/S§N%##ƒ÷ߟéÓ§�*h˜¢¶¶€I“&1mÚ4Ž?î›Âf³±}ûv,X@LL̘lË¡C‡¸xñ"^¯—É“'û2Sn·› 6p÷Ýw“��ô çûøã�‘J¥( _½¢¢‚ãÇ�û†ÁÍŸ?Ÿööv èîµ•ØØX¦OŸN\\ܰ娮®öÝ�ãr¹ÈÍÍ%""‚òòr>ýôST*‰„»ï¾•JEAA—/_ >>žY³fa·ÛÙµk^¯‡ÃANNñññCfP+..¦³³“;£G�RYY‰V«¥½½�yóæ�¸¯†ŸÝÿýC†=õöö²{÷n\.—oèÝĉ‡Ý­V˦M›Ðétôôôàv»Y±b …‚øî«JJJbÚ´iœ;wŽË—/3oÞ‚”`™¨›‘ô4ñë¿ÔqÏ,Žõt£,gÏð£³!¼úP2)4~v†j#øŸÕ èDõ ¡·°q[êÅwòdÐÑÄúw0,ŸÍÃzQ="hA„+õ¶³ãÃ3l7zP‘žè�Úi£ª©‰ ï·²/ÐE£,†W“‚0 Œ¯èjeÇÁ {qz LÇŠ9ãÈÖʨ+<ƶÀÛy~²ßMÈFÞ¶rX4•¥š–8ûß?&å_Êdv`§ñÌgü¢'•Wg¨oiuÚjÙp Ž¢ÏÐ_Hå$§&ó/sôD‰>Ý4–V²¹¸•&' õ#=}k§jQÍšJc•E²nŒ;ánÏ–óûc-T9��G©ËHåé;th¤c³ß}åîmbý‡6–®L&¢¦”׎v’2sÑe5�{; 57²£Û9m "K¯ ®°ˆ¼°,ž¯¸u1€p{pø.„¸ÁíÁ9L}ŸÞsˆ_7)‰ð< ‹bÉId ÇC³‘Ú~Ÿ×½á–ŽÓꡨ Œ¼†šÜ.(8Fm!àqar;h܌ʰ(_˜€aà8m¯á¥­ tËQÐWg„³jaêØÔY])Ï•…ó?K¢nü³5¥NM‚ Â7˜“Ó‡ÊØn”’>e"OÏ÷uTÍU¼öþ%ª:€ÐAñt²cg9u©“xeIjÜ4––ñÖîj4kR¿²l”. ‡¼ã­L›þµÉ€9ªxío—¨nT”ÇEUy9¯u¹yey¬/ð°U–ñV‰‚µ÷Î"+X¶V¶å•±Á?›g3ü¾Fm¥“¢b#†º1ìý8.UòÖ¡bL�ƒ²’2~¡Rój¶z öû rûéyzuß»•�VtÓ²y,E)·ßx¹ØgI"K¯À0;›§oñÞÑÄÇñ/�~D÷¿š¤þ%BÍðq ”ÌÙ3xz¼¬/h=WÎúËQ¬Nc¬›\íùK§èÈþ¼îo)—•¢sVªŽÑ®nlƒßÑ�¥«‰æ ‘ƒ+XÏÓk>7�§Nófa3é‹£D^M‚ Â?<[3ûª¨ãÓxzVø V…Ç›¨”,ñ]C¿t‘y ÿïí!ý™Ñé¼’àA-‡:ÀÙv‰ Zi°ö:iÏfáh¹È†C-X$RÀŸÜ»2˜­íË2l<Û�Ð¥¤òäÔA_­Žv¶}T 3³X3ô*¾&1�ôú ìj eEäàá\nÏ–±±ÔÞ÷-Éà b0çQœ6“Çâ òï‡y³'™ß,‰Biªá¥B%Ï/�ý‚™� Ž7 0 b©¿À‡µzžL�õÕó+é3û&u8«ïÍÆ¦ða[â14–òÂY™½4µÙ !žôîv*[;1j“xþ.¦ÃÇØæÔ¡svÒØæ"yR$\6S×jC=1“§3TÃï“À&Ö¿×JD´k§�†ž V,M%´¼‚“��¼Ô÷&�ÙUëÊ ãçÓç&uÕÍ4f'}ep0â~[S-›°ÈÀá `Ѽ ¢ë•{�’];ºY2GÎö� gÙ¬H@óYM_fSÑʶý(ëqƒBÃÒùidv²oo9Gº¤(=4Òx2¥‡íEfªÜål Lg¶é3v…eóìW_ÃJ<¨ãÇñä -êÚR^(S�í×Kc—c@ O/Ò�QÆ®—¼ãl¼ÔŸeúdèo•ù!¬]s;¹#fDdDOHeÅÅãì¯ê%#C~u››Ä‘Hy`ÙÊNv¼sŠÊôYÚÄ+÷ *·³ž]1I,Oh¦@?™‡“íä}ÖÀ�ª¢.>“W³TXΗ³±º“ì”^ˆOåÅŒ”½Í¬ßz‘²ô Ž¿D�'�Ç&¨¨<Ø_¶ê*¶wëyeµµ§“ÛJÉK˜Éj t[ }Í$VH;Ù±µ‚â= Çd8œÉ©ah.¶ |‚.!Šô€ë­C�!RÅö6;tY®nsç2Yf£ÌÙ¡U!ÐlÅ19ŒÊ&É“àb–àÉ<;ËÇùbþŸsfVÌ7°(ÒHíÔI, ­§Ìw޹ɶ¹D?Çi;ö”Qx­‹Ò–?0“Õ‘#·ÛÊ*3Έqh°±Ò w IDATo¸².–SP&eŃÙd)ÝÔ�kÂÜ ¶áÚX88­’×ÜÎ …•mïTQÔ¡Çp¦š:Ãd^Ìð[oí¸@i¬ž²�¤/šÉŠ7•ǯ½-Ÿ_R¾œcQ§"hAþá©I�UbÃŽÑ"G쇺¿“ªÖ†�¢ub¼dÆhw1(×Ô7¦ÿô1a}AX€·‡ÃJ]›�Ƨ(ð8A©Æb²Q¬%E ÂÒ¥!€�<œT+¡Ñ?™7Æ«FêÙ 6$²´ô3>¬Šb•/bë¤I«%ů/˜K‰RcºØ‰zzjÇfƒ:E¹~F*-NlÍ.’'�A·AêG€ Åpj¿QvFØ´ ídý•¨ƒˆVõu~dœý�¨ˆˆ¾É;”þr4Ú ¾@×OŽÚåyŸà‡B„AÓ÷7URNÏ—Óþ6õ�é—“{OO& Êz´7°~çLã&òÿE©P­g…™F´ƒ†N¹i¼Ô…:&dÄE(«VL"kð7g]éïp`öÓÑÜÀÉŽpf�xEÞ�Ù³¢Èÿ¸ŽÊñ×ÙÖ`-ɽõ”5‚32‰te+E�flA¤‡�A]JCÈI`ß§Ý׎›üÂÈMî¥j¢ClT59ÉM”vX)u’ñ‹4ä^ É•}Âö‰£éêÏ~IMMœ´ŽÔoí¤°ÜFîTõè÷ûXÄv’¡?K+ÈsxñÞpÔžV6þ¥á¦V«¸²NÇ2U…’©—RTÅJe!dÅ�æ&¥^ªšz‰N9%¥Ž Aq¤�²úÔ0 íMTÖ›i Ô²BM_EÛ¼•‚îirSy°ˆÍ z?À1rY£Ì$¥­•âšf6¿ß@æÒô¾í–Œ²}H”L›;uèl~½M}AÏml0çhÎÁ_!ñœ&Aá›Ëûùl[š„dV ˜lílÛ_GþÌ�öùz\ sibãñvlžþ€©´ŒõGŒGê*ƒ0vRÜàìï,_d[© "B0´·SÖÛ×IÎû°„Â.5ÙÓÒø—©Ròþ^�ñZÛ �cUt;;Î÷öý‚¾½�JG_Ù*›l裂@Hz¨�ü2;ú(j}¶šêCI£N„!;‰ÿkõœX² Í7ó¨˜=)„²cµ÷§‡l­lÛ[Êþ&ÇÈÛ2FÚ'×éòŒY‚ÄceÇ�†a‡” ôËŠÊÙgå~÷ ÁÐI™©¯mMVL¡!DHG[n†U�}u`«,åç…ít÷8QkT¨[­‰²^pzûªÃáZx}”K“¹ï"„§“*“CäW1£žŠÜùé, —ik ïJÅŒ€NÏ–³£CÇÂDÅÈm.X‹¡Çľv%)á2R"¡ìŒeLص3Ò›o¸m~•d¤ÌH&¡º‚}¦k”µ§�}ŸµBX8³³ÓX®ï¥®M9l¹=Be­µïÝÓJÞQ#…½¢›ª¶þýÓÐÿ{¤(eN̽}ï×mŸÏ¤ø5©S‘iA¾á¤hü•µŸ±ñ´–ç³Ô#wb²ˆÞ\Ö\êy8ËÊÆ§Ø%óà Šã±ô¾ÌNBŒœªCR†ò¢Íu4NM³¬Š­ÖH™ð 3šZí˜Ý ð'%^Ï‚©1d\ñ¬&uJ:?uU³y÷q¶»™é“3x*CŒ°- cQÚö #¤~¤jÒ#:Ùþ~Š{SÉR}ÑfHnn: Ýž‘{Û2)טÀ`È~GÍ’Ü(6|ÊkJ) fÕ¼(ÔÒžÏ˽ðÚ7÷¤LM%y_ /UÉ@ÄÒùZ n=ê=%¼Ö B£gI|y‡šù×´Ø_Ê[Ê – ôK““YU_ÆÏßmBíuòžŒ¾Š¾i Ž‡ %û`¯Õiùéª42T#¤Å…Çyá8Ý}� X{orß0YåmNª$=ÔÆþ®ž–ƒ:*Ëa#Ùwø=#]%ÀåÇö¿ŸB=S7mókÂ/œUÙM¼\PKÖý ×U%%¢£ŒŸÿõJ9 Ò³Ê #%úê6†eø<]JvYû+xí])J�Ãíih¤*Íà{ŽQ¤ÂÔ´ªÈÎâÿŒõZ%~*4C¢Õ[_§†&Ù$ƒâjIÿ¿²þàJN_æÍPõ¿¼^ïñ…-‚ Œ³ÙLhè(ïãho&¯IÍÂ$……Uìª¶ÒØI^ÆÜìdV¤¨Å”º£ÒCQaµª0rÒtý÷ £UYp˜—Ï:PèÅY¿cQÏU†úr+\ÁedýÏRx­Ô£4€U«f²"BT×� G"ɺû£ä p®þ—›¾¼¢÷Š—šA„oxÐt%�[·§L‰F%•)|u<½46ØPDjÑù‰ê¸YŽ+•]JRô*q±cXn«.Qdt ¾6ˆ20ŒÜÉZ4¢²DÐ$‚ ˆ IA¾ª I$>AAA®AM‚ ‚ ‚ ×ðO3{^QQ‘ØÛ‚ ·Pvv¶¨AAMâËZAA„4bxž ‚ ‚ ‚šAAADÐ$‚ ‚ ‚ ‚&AAA„¯Ò×j"³ÙŒÑhÄb±`±XP*•84 ��N'x(‚ ‚ Â?gÐTZZJGGþþþèt:RRR Ål6c±X0›Íœ;w�FCzzºØs‚ ‚ ‚ |%$ý¯Á?Cß°=Iÿ¿²þàJ(?@Õÿ ðz½G¾Hz{{)((@¯×3qâÄë._RRBss3sçÎE©TŠ=(‚ðÆl6‹Q‚ ÂØ=IÐ ôô¿zàê¹à½âÜâLSoo/G�%;;{Ô_�“&M"&&†#GŽ�““3êÀÉëõò§?ý‰ýû÷sï½÷òÐC}áò{½^ ùûßÿŽÝnÇápƪU«HJJúBë}óÍ7ñx<üû¿ÿ;Éçqmuu5/¾ø".— …BÁ믿N||<[·nåã�?F©TòÄO0kÖ¬1ÛW TUUa2™ˆˆˆ 99™˜˜˜!Ë�;wŽW^y…I“&ñüóÏ#—ËÙ»w/yyyüüç?' `ØõŸ?žÿüÏÿäÅ_$--í¦ËyéÒ%>ûì3–/_>ªå«««yûí·}Û•––ÆÚµkÑjµ?~œ“'OòÃþ€£G�²ÿ~ž{î9Ôjµ8ûcÎëõòÞ{ï‘““Ãm·Ýö¥œsÿûß“’’ÂÝwßý…×gµZùè£�°Z­x½^æÌ™Cff&µµµìرƒÜÜ\²²²ÄÎA¾ÑniÐTPPpCÓ­VKff&,\¸pÔ�…¢¢"/^ÌêիǤsóÿ÷Èår~üãìë´ÿþ÷¿ç»ßý. c^gv»©TÊÏ~ö3t:aaaœ8q‚={öððÃSUUŇ~HVV*•jL¦£G�yÏd2a2™˜5kÖU�ÀÙ³g)++còäÉ£úIIIüïÿþ/aaa_¨¬qqqÄÅÅ�jÙ––~õ«_ñøã�3yòdÜn7yyyüâ¿à¥—^²lyy9;wîä'?ù‰˜„/�D"aåÊ•_Úú/^¼ˆ×륦¦»ÝŽ¿¿ÿZ_qq1&L`êÔ©´¶¶òÞ{ï1~üx:::8yò$qqqC.úÜ:NŒ&šb|‚ ‚ð� šJKKÑëõ7=C«ÕŹsç˜0aÂu—ÿ¯ÿú/ÚÚÚØ¹s'n·›ææfºººðóó£¢¢‚ììlžzê)ªªªxýõ×Y¼x1û÷ï'<<œû￟-[¶ÐÛÛËsÏ=Çøñã9v쉄U«V±iÓ&êëëÑëõ˜ÍfxàöìÙCzz:[¶lá­·ÞâÂ… ¼öÚk¬X±‚Õ«Wó‹_üµZÍ£�>ʆ 8yò$jµšµk×2gÎ:;;ùïÿþoΞ=ë+_oo/2™ŒÛn»Í`x½^Š‹‹IIIaáÂ…#^AnlldÏž=H¥}“&.^¼˜¨¨(¶mÛ†V«Åjµb6›¹ë®»7nœïsUUU#ÖkUUÕUA“R©$>>ž�>úèªûÏÊÊÊX¿~=ÝÝÝÜqÇþøc<,^¼˜={ö�˜˜È믿ŽV«%((ˆ &`µZ‰‰‰ÁétÒÒÒÂùóç §²²»ÝÎ¥K—HMMeçÎ�\¸p�ßüæ7|ç;ßáí·ß¦­­Í×Y_ºt)�?þ¸¯|===8^yåÖ¬YÛo¾‰Íf£¥¥…®®.~úÓŸòØc�±sçN¼^ï�Ó'Ÿ|¼yóxüñÇÉÉÉ¡  �ǃÇã!88˜•+W2gÎJJJ†ÔÝÀеá ÷;©TÊâÅ‹©®®².—ËÅÖ­[ à�7ÞÀårát:‡tì>ïr¹hkk㥗^B­V“——Gjj*÷Üs[·nå�wÞÁét²fÍšaËåv»)..桇bݺuL˜0�žžž!õÑØØxU6P.—“��@SSmmmüò—¿äÎ;ï6£&7«µµ«ÕÊw¿û]Ö­[Gpp0n·{Èq`µZY°`k×®¥««‹¶¶6Nž<‰^¯ç{ßû³gϦ´´”ÚÚZ¬V+O<ñO<ñF£‘úúú!¯««‹ÆÆFÒÓÓIKK£´´tÈ9b¸ ".—‹'žx‚ÜÜ\L&Ó°Y£ÎÎN~ó›ßðÁ0wî\är92™ì+Ë0ÙjËyaC>ßýM>�z}÷w‡Y®“ºÊ6"dêÊ+ØqÉw–àôž|¾û…¼°¹�6òÜ_KÈoqÍ[NûÞ+b‡é ÕyÛN‘gù ‹]SÊs{�}ßmUFŒâ Â7Ì-É4™L¦/<,d€¿¿?F£�æÚ×år¹ï_™L€Á` **ŠÀÀ@üýý©¯¯'44™LÆÔ©S7njµš‰'b0ˆ��¥«« «ÕŠÓé$88˜ÒÒRž}öYBCC D*•"‘Hˆˆˆ 44”šš*++ÉÍÍ%??ŸÚÚZ:;;IJJâðáô´´ðƒüèžÓÜÜ @bb"éééÄÇÇóÎ;ïP__Ojj*Ó¦McêÔ©tww³iÓ&8€ÇãÁb±ðýïŸââb¶mÛÆ”)SÐëõ@ßðD›ÍFTT·Ýv8¤R©ïþ‰€€œN'^¯÷¦;=^¯—ÄÄDf̘ÁŽ;˜6mÐ7´°¥¥…¹sçÍܹs9|øð°ë�ÉdäääCrr2õõõx<¾õ­oqúôi8ÀsÏ=7â~—J¥ ¶nÝJZZééé×m#ƒË? ¡¡�¥K—²ÿ~¦N�*2M˜Ñh4x<¶nÝJjj*ééé¾óÔ€°°0ß¹ÒßߟÞÞ^š››™>}:©©©¤¦¦räÈêêêøÓŸþä;Þ­Vë�uUVV¢Óé&55•“'OÒÕÕ5âqn2™ÐëõH¥RÂÂÂ|Ã�¯Ä~ðêëëùøã�yä‘GÆìü>–Ë¡¬š¥#tÐõ…JMÀår^û´Eì8žºKÏþú–è‡^7Ìœ=ƒ§Ç÷}'تJx¹àé«Љ&ú%館؈!A‡N.jC4]ûKÎbñ øF…††^32šÎ±Çãñ,ÿ*  …ïÿ—Óér/€D"Áß߯×KUU999X­V jµšqãÆQRRBcc#ßþö·9uê‡F£Ñø†×�?ž—_~Ù—qñz½ìÚµëªÎŒD"aòäɤ¦¦âïï�Óé$//“É„F£ÁÏÏ�ÌÌLT*Ÿ|ò f³Ù4]ϕٞÁ"""F¬ãˆˆˆƒÔeË–ñÿñC†Ä 6PïÃ\ïƒË6üy½Þkîw‰D¢E‹hkk£¢¢‚Í›7³|ùrbcc}¿�ŽŽ¦ººš™3gú>çr¹¨««cÊ”)tuu1yòd–/_ŽZ­æw¿ûÿöoÿ6âöÂ�^ðùö·¿MCC¥¥¥lܸ‘oûÛWµãÑ�H$Lœ8‘ùóç�x®+++£­­�ßþö·x½^:;;©®®&99yÄ‹×S[[‹N§C­V£×ë‘ËåX­Ö¯4hÀ/ˆ¬ =ŸtRyô4o~Ú‰  ¾š-QÙüׂ k®FJô+FOEï—Ñ!¥ÁÁӋé+(#ÏJ<¨ãÇñä -j[+Ûö_ ¬Ç Kç§‘­éåôÁ2v5{`вÔU±þ˜§±tQÙ4³qï%j\rÒg¦³Ú0øüâ¦ñl9Ïvãt)©<9µï®,Se)o즱[ÊìùY¬ÐË0ž+eãY;N©#yx^<åpëôÕïhgÛGÕ03‹Õ1Šþ7{È{wÐö/ÑÑ8Ì6©;†)„‘Ÿï°³ú¡d R¨,(d—nÏöoVÝg˜l„äÕ ¾7‰©8‚ðÍpKNW‹eÔWýG4�fxÞp.\¸Àùóç)**¢§§gÔ \ñp:�tvvrþüy*++ äÀ�Ü~ûíÈd2RSS9}ú4!!!DFF’””Daa! ¨Õj’““©««£¦¦†cÇŽñÆoÐÙÙ @MM a·Û‰‹‹ãÃ?dݺuäçç³gϬV+ dffR]]ÍÑ£G9tè2™lH@ãççGpp°/‹uùòe4ͨf¼²S5ÚßÅÄÄ0cÆ Š‹‹ñz½øûûÉéÓ§©¯¯çСCC†#�&ȸÿêá‡æ½÷Þ£±±qØe{zz8vì�†Y³f‘ššzU�•““ã»ïi`ýû÷ïG"‘�šš:dÙùóçÊûï¿C�JA‰ÑhäìÙ³ÄÄİ`ÁT*•ïØ¿VpÅÅ‹�¾Ù?þøcôz=—.]òe‰<8d]&“‰ÎÎN¾ÿýïóƒü€§žzŠåË—sîÜ9d2n·—Ë…×ëåòå˾s«ÑhÄëõÒÞÞ>ìEв²2Nž<‰×ëÅjµÒÝÝý5˜(劀 ÐÄŽãé©A×ùœcM�¡!ÄHA‰ sh¯.‰ES]Åön=ϯžÊ‹+Ó0ÔV�ו§ª¨‹ŸÈ«Îä_3 °ºGM;1<»z*/®N'¹¾‚}-NŠKŒDߑ͋+³y~f În'ÆÊjãÓyue6¯.‰Cgw -’­‰ígd, ›WW¥bhn¢¸ðö`HàÙ²yåv9çÌ`«gËY?Vß?•WNááÀ&¶•õŒ¼·�ÂýÕ˜&N0õ²ýÃn×/ÿ0 ™q¤«BY±TL‚ |³Ü’L“R©³gp„††Þô󚢢¢x÷Ýw©¨¨ ''‡)S¦P]]}ÝÏ£V«©¯¯géÒ¥üò—¿$11‘‡zˆ·ß~›)S¦øn�NJJÂív“˜˜ˆB¡ 55•½{÷ú:åË–-£±±‘Ÿýìg¨Õj|ðA‚‚‚ðx<ÄÅű}ûv***˜={6S¦LÁápPWWÇÿøGär9óçÏçÎ;ïÄãñP[[Ëo~óüýýùÎw¾3$›'‘H˜?>{öìáàÁƒH$î¹çžkf˜?³fÍÕ”ãWvð–.]Jaaa_c“ËY¹r%ëׯçå—_fÚ´iÈd2ßpÉë9yò$G�å…^ ))‰S§N±iÓ&^xá…a[›ÍÆÿøGd2���äää Y&22’gžy†wÞy‡?üáH$&L˜À�~ô#_–kð¶<ú裼þúë †1�Î]øçD~~¾oR™ØØØQÍ9mÚ4vîÜɆ �Ëå,]º”ˆˆ 7nD"‘ø.Ê 8wîœ/C= 11‘ƒb³ÙHIIáÝwß%$$Ä—9OMM¥´´”?þñ�ètºaË6gÎ>úè#~õ«_}CRVVF~~>]]]ÈårŽ;Æš5k¾‚g/9©,<Í›Ÿ ˜yvQ ÑÃ~Ûy(>VÄ §ú~RkY{W,z@¢ÄÕ7ûhS‹ �>5€4ˆäûM�„šÀ�Ú·Œf|Ïu…�˜šºyëݾ›§½:¤üÿìÝy\T÷½øÿ×Ì0ÃÀΰ È"«¢²¸`…( Æ ·ÔÄF�‰¦mLÛ$·×~Ûäצ߶i½IooÓÞæ¶5mšÛ&—hbT”¨q_paU7Œˆ082,3ÌÌ÷e* ¸kLÞÏÇã<”³~Îçsfæ¼Ïg9£cu|´­GlC„1:D Š 4Kùïf#CãÂ9𪀳®‘3� ÐôaÚ´>@+Ÿ*|yi]�ŸêöŽKë65òÞG—›ev€=²µ‡}ØX‡ƒ{K©Ööçµ�ÝŒ²zåù×vwNNŒQݤßf•·âKé¾¼Ü6??ÿ–†ïŽÅbáÀ�7<ô8ôþ¤UYYÉ_ÿúWæÍ›Grr²'-{öì!--ÍÓwHtµwï^.\¸À¸qãØ¼y3+V¬àõ×_¿cÍ5…wFKK UUU 0‡ÃÁ»ï¾ËìÙ³=¯W¸›næå¶Õ{öòò#¿™O„­Šß¾sœâË-õ‘q¼0ÈÆÒS�üjjøUÃ�;)Ú°‹Ý±™ž>MÿÒʧ–a3’GCàÌν¼§Êφ_ "oÞɦ°¡$;Œ%ë!f‡þkË3»÷òž:•Ÿ�ì¦ÆÍv‘Õf¶•ÖâHÎÿIö{+g>7SP~Ž>ýùÕ#ž-Ïfáá@~7íÊ´wMgóâ‘`^O²°°Ø�×fDÑåÈÝîãÒ@û�èLíd>2”ѽœoçtuúGµóçn›ç•óâI#¯O€·Þ­åkóR&}š„÷2è¹Í—ÛÞ—Êq½^ËMêºûq½SMýnFll, .dûöíüä'?áå—_æïÿ;~~~ôÂßߟM›6ñÔSO±nÝ:æÏŸ/ù%Ä�——GŽá­·ÞâŸÿü'ÉÉÉøûû±ÝÜFç/‹>2�ŸMí‡ãóªos@¼ð0Öó–KµW®‹œ¨ó"&ÔŸ˜'ª/ÕiÙŽæ·»/æ�õl=f×¥àcÿîSno¥hÿçWû“œÏ·†ê¨6Û0;ÅîF 1ý£™�‰¾¾ë•]=CúsáGÚ/wÝÇ¥ìnî!‘!~ÄX(¶] «ŸàÓZg/ûÐ1òkƒøî%ë>«êu4»îωîÓ¯R£s¶Ó|yÝ3uW7Ù»tÛá��˜âAû]¼_A“Åb¹#/½• I¡Pðãÿø¶�Î /¼ WÑMHNNæ�ü£d„_p�†Ç{ìÁJ´!œoå@çCD°�—óŽ m­éߟYUGøíÊóè\ ë?˜ï„€fD"ý?-å'T ògÚø@4zOž;Ÿ—סQºÐEÅñol¾yëÃý ;¾L}Ø€¾ÃFÑgûÉWªÑ¸ "-‰ˆ+eê™5ÌÂ?Wíç#ú'ð?ØÝ]"uQ<™ÞÈ[Ÿìg«àÊST é~[;�&òhe!ÿ, äÇúï�¦‰ïßÍ9�Úàumúµ^äÄœcÅÇ¥ìéãM_-\9è�RGRÈEV¬ª@ýH"Ã|ä³&„x0Ü—æyV«•#GŽ0zôèÛ>�Ý»wßÔpÒB!¾Øn¦yž¹ð /înìµæB? …7&ÑHÖ !ÄW7è¹Íæy÷­¦I¯×SZZJjjê-理¤„ÀÀ@ ˜„â+ʘšÂÿohÄÒÑà J/Œ‘�0 !„¸-÷­fRRŸ:ä#F IDAT~ú)‘‘‘Þôö ˜Íf&L˜ ¥(„_Ù_1obb�ÄHN!„¸‹îë[rrr(..æÂ… 70•––’““#%(„B!„øòM�†ÌÌLJ¥•JÅÔ©Sñóó£¼¼œýû÷ãååE`` 'ND¥RÑØØÈÎ�;±ÙlÌš5ë–Þe%îžÒÒR”J¥ça�T*óæÍûÒž·ÛífÙ²e8�NÔj5jµšÉ“'ãããñcÇØ»w/*•ŠøøxF�uׯ۞ʡ;‡¢¤¤///ÂÂÂ?~< …¢ÛÏq{{;yyy´¶¶ÒÑÑÁرc‰ŠŠêq¾B!¾äAS§ÁƒcµZ1›ÍÔÕÕqâÄ 4 ‡Ã3pD||ü-ú�žžNzz:[·nE¯×3lØ0öíÛ‡¯¯/3fÌ ­­�‚‚\.J¥’É“'ÅÙ³gÙµkQQQ(•×VÎ�9s†óçÏó­o} §ÓÉ»ï¾KBB‚gyee%¥¥¥<öØcw¬vÌd2a2™xòÉ'q:�,]º”ÄÄDtºî‡ŒÝ½{7™™™ÄÄÄPTTÄ�ÈÌÌdß¾}<þøãøùù±víZΜ9C@@%%%DDDpêԩ릥®®Ž-[¶xÊkÒ¤IèõzÊËË9xð �???rssQ*•lß¾�ÚÚZ\.‘‘‘deeÑÖÖÆ† p¹\´··“‘‘A||þþþ,Y²„ˆˆìv;---|ýë_G­V³uëVêëëq¹\DGG“‘‘Ayy9%%%a6›:t(ÉÉÉ7•W*•ªÛó9þ<;wîÄÛÛ›cÇŽ1räHúõë‡ÉdbÇŽœ;wŽgŸ}???ªªªØ¹s'J¥???š››IMMeРAlݺ•ÚÚZIKKëõzÛ¼y3Z­‡ÃAnn.þþþ¼÷Þ{ôíÛ»ÝÎÅ‹™9s&�¦Û`çý÷ßgúôéž—£VWWsèÐ!&NœØm9”••QVV†Åbá‘G!00§ÓÉ£�>ÚåZoii¡  €9sæàííÍÉ“'q»Ý=Myyy8|}}1™LLš4‰��ÊÊÊ(--E£ÑàííÍ”)SP©T¬\¹’ÈÈH*++ÑjµL›6�†††nË¡§k°¸¸˜'Ÿ|oooÖ¬YCuu5jµºÛÏqyy9AAAdggc6›Ù²e ³gϦ¬¬¬ÛùÝ}/ !„âK4Á¿FÕ»—L& @¡PàããCNNn·»Ë:ÍÍÍhµÚoÀL&¨T*T*F£³ùÒÛAjkk)))aîܹx{{ß±t×××Äúõë  «ÕÚmÐät:±X,¸Ýnþô§?1iÒ$Nž}Ús“:kÖ,Š‹‹éèè ¸¸˜àà`²³³ihh`ýúõÄÄÄ T* %--�pòäIúôéCii©çtñ⎦O­VÓÞÞŽÑhdܸqžù%%%“““C]]�g`’îΧ3“’’'//�S§Náçç‡ÙlfÖ¬Y8�NÞ{ï= €¯¯/&L ¶¶–]»v‘””tSyÕ¿ÿnÏ'<<œ¤¤$‚ƒƒ»Ôp„††òØc�±téÒ.ëûøø0tèPJJJHOO÷›f³™9sæxnÖ ÐíËKÝn7;vì`ôèÑÄÄÄPZZJAAãÇ�Çét2lØ0BBBøè£�0™LÝÖ|( ±X,œ:uÊ|öX.—‹°°0F�Eii)EEEŒ7Î`ÛívO^644 R©Ø²e ÍÍÍôïß¿×Z&…BAß¾}9r$G�¥°°�œœöíÛÇܹsÑétäååqâÄ  „¯¯/V«•¹sçzöÛS9ôt<»ÝŽ··7N§“úúzÔju·Ÿc³ÙLtt4o½õ999´¶¶b·Û{œ¯Õjå×L!„øªM÷CO7V.—‹üü||||ðñññ4¥¹Ñ}tλpáÑÑÑìÛ·�ÜÜÜ^oä¬V«ç øÐ¡C2dH¯iW*•äää R©ÈÏÏ¿î¹óÔSOÑÒÒÒeþ AƒHHH ¢¢§ÓyÓy8dÈöìÙÃ;ï¼CŸ>}˜0a.— ›ÍƆ P*•´´´ÐÖÖæ©9ì|2ÞÙ¤°±±Ñs³€ÝnÇáp P(<5jµš¶¶6ÚÚÚP«Õh4T*}úô¹n5 qqq]æY,Ο?OCCƒ'?;::º=Ÿ«�åçç‡ÍfÃívÓ§O”J% …Â3¿s…B�———'¿™¼ºS|||P*•hµZ”J%.—‹¦¦&êêêøè£�<×k{{{·A“Ë墹¹Ù3Ê¥Á`ðô5òòòÂ×××S>®+_by•   jjj¨©©ñäUtt4§N�ê¶”J%AAAžkâäÉ“¨T*rss A£Ñ°~ýz>ŒÁ` µµ•Ù³g{jµbbb<Ûw÷Ùé,K___l6­­­ž¦Î‡8���žs‹‰‰¹åæ~ÞÞÞdgg“——‡��n·Ûóèés¬ÑhxüñǯyØÒÓ|!„BHÐt×DDDPYYÉÀ�q8lܸ‘ñãÇ£T*™4iÒ õ cçÎ�8�NœN'uuudggcµZ£F�ÂétÒØØˆN§£©© £Ñˆ¿¿?���¸\.œN'6› ¬VëmçÕõ\]#z3èÛ·/�>ú(J¥’ .ôø2Q¥R‰¿¿?‹ÅSÒÈÞŒàà`víÚEÿþý¹xñ"UUU¤¥¥aµZ»-—Ëå Zšššð÷÷Çn·SSSCß¾}Q(x{{ãv»1 h4Ün·§Æ··üénß>>>ØívÚÛÛñòòÂjµßë5t£åàv»éèè`æÌ™( –/_Nxx8n·»ÛÏqhh(555ôïß³ÙŒN§C£Ñô8_!„4ÝUC† aÆ ¼ûÝnFŒ���ÏMí£_¿~„‡‡óÎ;ïxöyå ¨J¥bÊ”)¬X±‚��"##o;ÝF£‘¾}û²téRÜn7C‡õ4Ís¹\lݺ•ÜÜ\bcc=z47ndÏž=¨Õj¦N�ŠZ­&##ƒU«VyšÁEGGS__϶mÛhii¡¾¾ž?ü�ôôôûkX­V6oÞŒF£ñtN÷öö&##ƒÕ«WãããƒB¡ 77—ððpŒF#Ë–- ::µZÍ�!CX¿~=+W®ôôké©O�··7III¬X±‚ÀÀÀëÖpô$55•¼¼a_Â#dôÓ�!ƒ§_Êð¬sýÚ&5j `¯à“åj²ÆdaY·‘ãÛóZe‘iãÈjÿ„�Ç6òöêt2žM¨ë®eä�ÈbܰÖî-cÕ¢_Q˜HÆøaìü¤€Â÷óÙC¯�daË¢ßðA‘š“ð„¡ŒUË·ðæÿI|}&‘*P«€Ú-|°ÍHÊØq$¦d¡‹X˪3‡(4Ï$Ò/¤¬ 4éY —€I!$hz~¬…BÜ_±Sæ3½ô Ö^Åë?\…&ÀHÌ€RF>Lî˜D ª›Üß´çyb”Žá¶Bþï3Ö¾“ùÝ“YèŽ7Søóµ˜++1‘Bèåîö€tžùÞL"mz*½Ia é9fÆÚП*âÍ¢ÓT~�1óžK7�OQj"F-X*Ë(<„e�š€8"TTZÌËÌÄÕîcËEàç=Jj°½ Ì'?cÕgvØ»‘J½j«(Ü^ư±=o«KËbx@; Ê (—Ìd ™„â^úBÕ4Y,***((( ??Ÿ­[·’ŸŸOAAX,)1!„W†"¤Ì{…W¾9Ž” ;§ídËŽ[ýHó?ýÅR|€ˆé|˜¦¦&´Z-ƒ½^�Á`Àb±`µZ±X,´¶¶¢×ëIJJ’’Bˆ/)‹Å‚Á`�ŒèÂÄÆ_þÞ.72óµ?òD¼äˆBÜTУPd-@ëå©°—''—K»¯š€/@ó¼ööv¶mÛFxx8£F�ºf¹Á`À`0{ée„¥¥¥|úé§äää ÑÈ£6!„_f6*6¾¢òÛÑ�˜N®LBqÏÝ× ©½½�={ö0räÈ~ª˜ššJdd$»ví"33ó†'·ÛÍ?þñ6mÚÄ#�<Âܹso;ýn·›Ý»wóÙgŸÑÖÖ†Ýn'((ˆY³f[ûý¯ÿú/\.?ùÉOP(þU¸jÕ*>øàƒ.ë/X°€œœþö·¿±ÿ~‚‚‚xþùç8pà+«sçÎqâÄ êê. óBÿþý‰ŒŒì²ÞÑ£GùÕ¯~Ejj*?þñ�ñòò"??ŸuëÖñÛßþ__ßn÷ìØ1~ýë_ó³ŸýŒAƒÝr:Ïž=Kaa!3f̸¡õOž<É’%K<ç5hÐ ž|òIÙ·oàûßÿ>{öìaÓ¦M¼øâ‹èt2Ô¯¸wnöº¾ÅÅÅ P(p8ôïߟqãÆ¡R©nyŸ���¬Y³†ÆÆFÜn7ÙÙÙ :T ò–4S¹k-kËA?p:ÏwR'„_± iÛ¶m70u dèСlÛ¶�‰'Þp€¶ÿ~&OžÌìÙ³ïHÀô¿ÿû¿xyyñƒü€€€ÏÍÍßþö7,Xà©»“²³³ILLÀd2ñÎ;ïÎîÝ»)**â…^`×®]¼óÎ;üú׿F­Vß‘€iÏž=]æÕÕÕQWWǨQ£® œÊÊÊ8räC† ¹¡cÄÇÇóûßÿž   ÛJk¿~ýè×¯ß ­k2™øÓŸþÄ·¿ým† ‚Óédݺuüáà¿øE—uËËËY»v-?úÑ�$`÷ÜÍ\×7ãâÅ‹ìÛ·�¹sç€ÝnçÃ?¤ººú¶ŽW\\ÌàÁƒ1bõõõ|øá‡ 8­V+…yÓBÉýåûäJF!ÄW3h:|ø0ááá·Ün=00�°°0Ž=ÊàÁƒ¯»þo~óX»v-N§“ÚÚZš››ñöö¦¢¢‚‘#Gò /pâÄ ^}õU&OžÌ¦M›fæÌ™,]º”ööv^|ñEÈÞ½{Q(Ìš5‹Å‹SUUExx8‹…o|ãlذ�¤¤$–.]Êÿ÷súôiþã?þƒG}”Ù³gó‡?ü�NÇüùóyë­·8pà:�Ž'Ÿ|’ììlÏ ÍþçRVVæI_HH!!!¸Ýn>ûì3’““IJJâ/ù ddd R©øóŸÿŒÕj%$$Ä“ÕÕÕlذ¥òÒø“'O&,,ŒåË—Hcc#‹…‡~˜„„Ïv'Nœè1_Oœ8qMФÑhˆŽŽfÍš5×ô?;räþóŸiii!++‹íÛ·óÒK/¡Ñh<5Mn·›W_}•Gy„-[¶ðýï///^{í5ž{î9† ÂÏ~ö3ùÞ÷¾çÙÿéÓ§9tèßøÆ7Ø¿?ÅÅÅ(•J Ó§OÇÛÛÛ³î®]»HOO÷v*•Š©S§R\\Ì‘#GºäÛâÅ‹yá…–o qWUVV²iÓ&”J%J¥’éÓ§sñâE:ÄôéÓY²d ‘‘‘455ÑÜÜÌ7¾ñ ؼy3§N�ò<\ú( …‚¦¦&|}}=7G.—‹ÆÆFÏún·›Í›73nÜ8¾ýío“™™É¶mÛp¹\¸\.xüñÇÉÎΦ´´´KÞu6]ëNwË”J%“'OæäÉ“]öÕÑÑÁ²eËðõõåµ×^£££‡Ãá â®Ü¾££ƒ††~ñ‹_ ÓéX·n‰‰‰L™2…eË–ñþûïãp8˜3gN·ér:�3wî\ž}öYLkkk—ü¨®®¾¦6ÐËË‹ØØXΟ?@CCüã3fL·5jBÜi%%%Œ;– �››KKK×!Õš››IMMeöìÙDEEqüøq*++©¯¯ç;ßùsæÌ¡¢¢‚ÆÆFöíÛÇSO=Å3Ï>>žf¬¾¾¾´··SSSCß¾}Q*•èõz}ôQ©¯¯géÒ¥¼ýöÛ”——sñâÅkŽ—““ÃóÏ?ÏàÁƒùüóÏyóÍ79þ<çÏŸçÌ™3üãÿàÿ÷±X,ž1F£­Vëùžë|Ðs%žþyfÍšE~~>mmmR¸B!X÷åÑŸÕjÅh4Þ‘} †^kBn俏3àèpA¡P V«Q«Õžÿw\‡ƒ¶¶6OЧP(Ðjµ¸ÝnNœ8Aff&���¨Õjt: ”––R]]ÍÓO?ÍÁƒÙ¹s'z½Þsã3pà@^yåO�‹Ûífýúõ]€¸2} ”””0gμ¼¼p»Ýèõz¬V+.—‹‹/znžn8zVö?‡„„ô˜ÇW6ÿ»:H�>}:?ÿùÏ»4‰»Ro�Þ•ù~eÚ:ƒ?·ÛÝk¹+ &MšDCC¼÷Þ{̘1ƒ¨¨(ÏòˆˆNž<ÉC=äÙ®££ƒ3gÎ�––Fss3C† aÆŒèt:þú׿òÒK/õx>BÜ )))ÄÅÅqüøqÖ¯_Ojjj—ïË«¿®ô¯\Ïh42oÞ¼?ß.—‹ŽŽÏá””vìØÁ‘#Gðõõ%%%…ñãÇwÙæôéÓ×=‡ÊÊJŒF#:�Žððp¼¼¼hll”>MB!X÷¥¦ÉjµÞÔ ýõ‚¦iž×�Ó§OsìØ1öïßOkkë w|ÖjµžÚ‡ÃÁÅ‹9vìÇ�ÇÏÏ�-[¶0|øpT*‰‰‰ѧOBCC‰��g÷îÝÄÆÆ¢Óéèß¿?gΜáÔ©SìÝ»—×^{Íó4øÔ©STTT°ÿ~ÚÚÚ<髪ªÂn·{ú) RRR8}ú4ûöícëÖ­ÄÄÄtÉcooo<µX555èõú}°ÿþ·´,22’ŒŒ Š‹‹q»ÝhµZBCC)**¢ªªŠ;vàt:o*ÈíìõÔSOy:¬w§µµ•½{÷¢×ë5j‰‰‰×Y™™™ž~O�ûß´i …Â3ØF§ñãÇc0XµjÕmÕ q½k|ß¾}Ã3· IDAT( † Fvv6555×Ý.<<œêêjœN'MMM,[¶ š››=ß�eee×4£;~ü8K–,ñ4És¹\\¸p�>}úÎÙ³g=5ÏÛ·o÷|7™ÍfÚÚÚp:�˜Íækž9r„àv»ill¤¥¥EPBñ@»/5M�掽¸Ð`0ÜòûšÂÂÂX¹r%dff’––ÆÉ“'¯»]@@:�Žªª*¦M›ÆÿøGâââ˜;w.K–,!--ÍÓ:>>§ÓI\\jµšÄÄDòóó=7åÓ§O§ººš_þò—èt:žxâ OŸ¤~ýú±bÅ ***=z4iiiž–ÎÁ :�=š£G�ò—¿ü…��þíßþ­K…BÁøñãÙ°aÛ·oG¡P0eÊ”^k˜® ~F�uCCŽ_I¡P0mÚ4vïÞ}ébóòâñÇçÏþ3¯¼ò _ûÚ×P©T7<´ñ�سg/¿ü2ñññÕ4uö¿¹SAÓ�jêw3bccY¸p!}ôï½÷ …ƒÁ@zzº½ð÷÷gùòåüóŸÿ$88˜ùóçK~ !„Bˆ/vÐÅ}¨iª¨¨Àf³1|øðÛ>�C‡áïïÏ€¤4…âKà^Ö45·6sèóCX[¬XÛ¬4Ù›º,Р×êÑûêI‹NÃÏGš !Äô<ˆ5M¡¡¡]^z;ÚÚÚˆ��—+A!Ä J»OîæxÃqLm¦^×5µ™àrµéÌ&Bµ¡ Àè„Ñ@ !ÄWÈ}kž§×ë)--%55õ–÷SRRB``à}iž'„âÁ³ýØvöTíÁæ´ÝÒö¦6¦j…µ…ŒŠŘ�c$S…â+@y¿œ””Dmm-.\¸¥í0›Í 4HJQ!D¯N›Nó›M¿aÓ™M·0]Éæ´±éÌ&~³é7œ6�– B šîžœœŠ‹‹o:pjhh ´´”œœ)A!„½Ú^¾�%ÅKîH°Ô]ð´¤x ÛË·KF !„Mw‡F£!33“ƒRZZzCÛ”””PXXHffæ5ïÒ_Müq�/¹ýªq:�,Y²›ÍöÀŸK~~>'Nœ�B·eMá6}¾ ‡Ûq׎áp;Øôù&Ö®‘ Bˆ/)¯û��FÃĉ9zô(»wïF«Õb0<“ÅbñLmmm2a„›>NAAÇŽÃb±àåå…¿¿?#FŒ !!Áó’F€ôôt’’’X¹r%V«­VKGGãÆ�#::ºÛ}»Ýn¶nÝÊéÓ§q»Ý¤¦¦2räH èèè 33“#GŽpôèQf̘qG‚=·ÛÍöíÛ©ªªÂív“œœÜëh„uuuäçç£T*Q©TL�:???ÊËËÙ¿?^^^2qâDT*���ìܹ›ÍƬY³îÚûXÄ­)--E©TzÞÖI¥R1oÞ¼/íy;6nÜHKK µµµL™2…„„„›ú<ÜírèΡC‡())ÁËË‹°°0Æ��B¡è6ÝíííäååÑÚÚJGGcÇŽ%**ªÇù¢‡*…sÐ|ð†ÖU+Ô4úõé×eþÙÆ³Xì– º˜à.t3cø É|!„� éîÓ§O' €êêj:Äĉ»-€²²2ÊÊʰX,<òÈ#„„„0}útÏu·k×.ââânúó�——‡ÃáÀ×דÉĤI“ ¡¬¬ŒÒÒR4 ÞÞÞL™2•JÅÊ•+‰ŒŒ¤²²­VË´iÓhhhè¶zº‹‹‹yòÉ'ñööfÍš5TWW£V«»Mwyy9AAAdggc6›Ù²e ³gϦ¬¬¬ÛùÝ}/}Õm/ß~CSB@ÙñÙÄ…ÆõºÞiÓivœÚÁɦ“½®wÐ|C¹�1ƒd€!„� é.é Žî%“ÉÄ€P(øøø�““ƒÛíî²Nss3Z­¶ÇÚ“ÉDDD*• •J…ÑhÄl6—ž„—””0wî\¼½½ïXºëëë býúõ€Õjíö&Ñétb±Xp»ÝüéObÒ¤IœýôSÏ�ñÕçÓ™�III„‡‡“——Ç©S§ðóóÃl63kÖ,œN'ï½÷ƒÀ××— &P[[Ë®]»HJJº©¼êß¿·çNRRÁÁÁ]j8BCCyì±ÇXºti—õ}||:t(%%%¤§§{‚M³ÙÌœ9s<7ë Àß߿ۀgÇŽŒ=š˜˜JKK)((`üøñ8�N† FHH}ô&“©Ûš…BA`` ‹…S§Ny‚¯ÀÀÀËÁårƨQ£(--¥¨¨ˆ‰'vISff&*•ê¦>�ééÛ·/#GŽäèÑ£’““þ}û˜;w.:�޼¼.ý˜ª–ª×ÝvvQ�Q× Ä„BHÐôÀè)r¹\äççãããƒ���§)Í�î£sÞ… ˆŽŽfß¾}äææöÚÌÍjµzž€:”!C†ôšv¥RINN*•Šüüüëžkpp0O=õ”§iS§Aƒ‘��@EEN§ó¦ópÈ�!ìÙ³‡wÞy‡>}ú0aÂ\.6›� 6 T*iii¡­­ÍSsØùd¼³ Ucc£çf; »ÝŽÃá@¡Pxj&Ôj5mmm´µµ¡V«Ñh4¨T*úôésÝ4j4ââºÞÀX,Ο?OCCƒ'?;::º=Ÿ«�åçç‡ÍfÃívÓ§O”J% …Â3¿s…B�———'¿™¼ºS|||P*•hµZ”J%.—‹¦¦&êêêøè£�<×k{{{·A“Ë墹¹™ÀÀ@ ƒ§¯‘——¾¾¾žòq¹\=¦#((ˆššjjjZ­l8¶�Ê •XZ-7½½ÁÇ@l`,“NÆGí#¨B‚¦Õ�!Cذaï¾û.n·›#Fàãss_ìýúõ#<<œwÞydzÏ+o@U*S¦LaÅŠ„„„yÛé6�ôíÛ—¥K—âv»:t¨§)’ËåbëÖ­äææ ÀèÑ£Ù¸q#{öìA­V3uêTÔj5¬ZµÊÓ .::šúúz¶mÛFKK õõõ|øá‡¤§§÷Ø_Ãjµ²yóf4�§sº··7¬^½ ¹¹¹„‡‡c4Y¶lÑÑѨÕj† ÂúõëY¹r¥§_KO}z¼½½IJJbÅŠ^·†£'©©©äåå±råJOÓ»”””nϧ󦹨¨ˆ={öàt:‰‹‹C­VÌŠ+€Kïë®¶æVòª·›á¨¨(6oÞ̱cÇ0`©©©ìرÃÓ·gݺu„„„té[wu ß™îΠzìØ±=Öšfff²yóf)ÃÚCC{ù»üæwk9ç�ÞˆÞaæ\ÑFÞ¨´¡þÃB2níЭŽVíYtKÁ’'Økµ`©¶PÓT÷G~['!ÄKqyºòo¸4¹âò¿ªËÁ• ¼ŸË“¯ÛíÞ%Ù(¾ì:ûýÌœ9³×›qñ`ÈÏÏ'..®Ç~câþ²X,=Ö|öfcÙFvUwÿ“åÅw³¿{WÒû·ë±�SfD&¹)¹·¾óÊøÁOÖb6“,ÕVX¯ªi²±ï÷Ïóú^ú‡ò»ea°òÆ_cgƒ†áßÿ;?skßY«ÊVQT]tÇòiXÄ0f¦Ì” \q‚…"hZ/Oí€è¸<9à¾jòGB!Äïxýñ—ÍH½{À÷¶ïÞÒtC´‘<üì«üî'3Iî¡ÅièCO°àÙçx~n],±!všmö[>ô™ gîh>Ýéý !Ľä%Y Äõ©T*æÏŸ/ñ%1iÒ$É„/™æÖfÌíæn—%$Üð(y·"TJB@B·Ã‘›ÛÍ4·6ßz½¾Y<Ò··tÄŽÊ%öÊY5;): '*âÖkÆo§Y޽؟BÜKRÓ$„â�wèÌ¡—eÇgßõã÷vŒòóå÷.#šÊx÷÷Ë(kÍ€ÉLO–�B„âN�š&!„¼žj1Ô õ=y_R\hj…ºÛ¡Î««ù_»û™ÐPÈÛ¯¾ÎƳvJç¹ïÏ$Ru§ï¢�ò8ã}�òÖž�Ô¸…�ÔÁ�3>Ø`©^ÇÊÇi–ËRñ%"5MB!x¦fS·ó Ã=KCODz¶YïAÔ¸�7_¹0i"Ʊð×/‘Õ÷NÄ�´Á“ ¹xšº+FÚ׆å2Ùÿ4ìüØ»™æðñ¤ùÉ5)„� I!„øBiw¶w;¿_Ÿ~÷, =«©½éîØ^ɪßý[jíhâ§óò¯Ÿ#Ëx7ÔÆ‘£ÿàãÚ®uHmæµ¼U´�`¯ÃâðÂGÚ±!$hB!ÄEå'‹XuÜAY¼øŸ&%àn©ƒ¶ŽŽkg;›±´_šï–É`W %�R.Bˆ/y$„B|a#¢�¼ñ~!6XζÐR´˜_½j@­Š%÷ùd 7Vb¸XÈ¢.è²¹ßC ùã3)÷$©†¾3x"vo¿Ô×I!$hB!¾øîI¢»y,K%…E…Ø®˜eo¨¤¬¡T†Û±uŽ=a·a½êµLŽÇ= ˜g^ŒƒÍ…+9Ú*×�B‚&!„â�q×ûÝÀ±¼UÞ·¾ÓáÏñî‡ÏõºJî»òðÒ·±NY@–á>d²n43â¼Ø&“B‚&!„â‹«_Ÿ~˜Í×¾ÜÖÖa»gi°Ø»ö<Ô¯—ëžÝ›ïî¢õ[ êóY8-–›}»RÊ“ îþ *0-cÔ>øk`~æ`,æ�YëB? #~Èx:8~|ëLra !$hB!¾("úDpÐ|ðÚ ÉiãpÕa’£’ïêñWîöM�iëIÅg[`ò/ùé `¢ð³j,Dàȓť sÚÐ�ާ‡�ãí_¯Ææ¯Ç 6aó †€í³ßñFÛÓd•¿‰eÞ+Œ3À¢�*A ~™Ïð\j5ïþm#V�)<ñÝ\ŒåðÆ:3:� {P.ÏÏŽîFNÒuœu{þÐÍ‚Eüê¤\ƒBˆ/7=O!ÄoPø —í®Ü}×�ßÛ1zK[lVÍÞàíeÙyNhk!«vy⇠Y¸ða¬ë>ãhòeø÷2B"ÕE€�}E†§ë/ïÍÂÎ5• _øS^úÉ|†aåÄ–1g.dá÷_b~DŸ´c.-C7f> ð" Ž�‹G!n€Ô4 !„xàùùø‘�Àɦk«<ªZª0YM„êCïʱMVU-UÝ.KHÀϧç7½jâᥟ۱œ­àpéj^ÿHÏœ§u˜.”ñá"3ìX‰Äâu€£�Ȧû¨°ÄqØ5œùApÀiÅÔj E¨"É…±R]ñ6o6 ÀBìן&qåÛüjc úQsXÑ}¾è}ôX[ïÜàz½\¨B š„BˆûiDÔNé¾�Øš²5|'ë;wå¸kÊÖôš¦žÙ([³GöL†÷K!«_öïr¸ãB�iÌüþL"±aª�PÕ9 U—7S%’³Š�ë¬Ø‡ÍÇ3öƒJO¨·³Пcg¾™ ÐPbG<ÇÂt XLX´¡Xη�þÍ—ÈU™øä—‹)óYÝ´Ï‹ Œ¥¨ºèŽåÓ ã ¹H…4 !„÷SrT2¾Ç|iq¶\³ì¬í,~ÌŒá3îè1—í_ÆYÛÙn—ùª|¯Ó—JG\<,zãWlÔú‚³u¿o° .ëÈÿçèÔ64Éóyn|×-Ó#xó?«™þ{Ð9θ�¬GcycÑk”uöizh:þö:¿Û¯ƒ6#ã¾û±¦-¼¹Ì‚NëÀ‘Ås=thš2p 5M5Ô^¬½í| óãᄇå"B<°—§+ÿ†K}�—ÿU]®¼ÍÿkïÞ㚺óü�¿’�ÄpG.‚ˆRÄ;A©w­¶¶öbíŒ3ÓÚÇc¦ýͶ�™vgº3¿iç·k÷2³3ícfwgÛîlGkµµöæ½JÕ‚VÔŠ\+ $€ ÁH$ùý¡¤€ ‚Òzéçùxœ‡rr.ßœs’œ÷ù~Ï÷þ@À•!ÐívÈfB1TÌf3!!××wöÎÒ�ÔûþYš—0�Ycg I9÷Wìg÷W»}¾ž›Í´…·õ¾hïlgûÉíÔ\¨¹®¦z†c#Ç2;y6ê9¸…7/ô(ÙÀ% ýÊÐÁå«N]W'àÜ}@jš„BÜA¦-¤ÌT†¥Óû þî¯vci·pÿäûoh=û˜#¦#¾Ã‚ÚpÛ&€uËÓ–Ë�%„øÎ“Þó„BÜQ~œõcÔ µÏ×�˜Žðzþë-ÆA/Ûh1òzþëý&µBÍ�³~,;B!î Òâ–át:y÷ÝwéììdÅŠøûûjþŠŠ òòòp¹\DEEqÿý÷£Õj{}'mذ�ÜÜ\bbb<ãKKKÙ¾}»çóòeË8xð ÙÙÙ²s„BÜnjhÚ·oß S·ÐÐP&NœÈ¾}û˜?þ€ÚáÇY´h�>úè�¦ÿùŸÿÁÏÏ�çž{½^ï9iÿïÿþoV¯^ÍÈ‘#‡|›Íœ9“””ŒF#o½õ111|úé§lݺ•ààà!_g]]�ç$¨[SSMMMdee]œºO¦Nœ8Azzú€Ö1jÔ(þýßÿ�°°°*ëˆ#1bÄ€¦5�üéOâ‰'ž ==§ÓÉÖ­[ùÃþÀo~ó›«N*·lÙÂÏþs Lâ–ÓÞÞÎÅ‹YµjÕ “ÍfcïÞ½¬X±‚°°0>ùäJKK™6mÚ€¾Wï¾ûnfΜ);A!„„¦oBYY111×Ý#44”èèhÊËË7nÜ5§ÿçþgZZZزe Ô;H IDATN§“ÆÆF.^¼ˆ¿¿?•••LŸ>�gžy†ªª*Ö¬YâE‹Ø½{7ááá,_¾œõë×ÓÑÑÁóÏ?Ï]wÝÅ_|�B¡à‘GaíÚµÔÖÖƒÙl桇bÇŽŒ?žõë×óÇ?þ‘3gÎðOÿôO<ðÀ<úè£üá@§Ó±jÕ*^ýuŽ9‚N§ãñÇ÷œ€´µµñ/ÿò/”––zÊADDn·›Ï>ûŒÔÔTRSS6lYYY¼öÚk>·A}}=;vì@©¼Üiâ¢E‹ˆŽŽæÝwß%44”ÖÖVÌf3³gÏ&99Ù3_UU•ÏeVUU]š4 |üñÇWÝvâÄ þüç?séÒ%rrrØ¿?/¼ð�ÆSÓäv»Y³f ÷Ýwyyyüô§?ÅÏÏ�W^y…Ÿüä'¤§§óë_ÿš””~üã{–æÌ¾üòKzè!>ÌñãÇQ*•„„„°téÒ^'”dddx‚�J¥âÞ{ïåøñãœ8q¢×v[»v-Ï<ó áááò­!n)n·›}ûöÑÒÒÂG}Äý÷ßO~~>gÏžE¡P0räHfÏžMAAÍÍ͘Íf|ðAÏwo÷÷PPPÆ £³³“®®.>úè#Ìf3¡¡¡\ºtéªuÛívŸµýMMM¬_¿ž .0iÒ$©uBq[»)]Ž_¸p«Õ: {˜ú3aÂOG×òóŸÿœÐÐP}ôQV­Z…J¥¢±±‘§žzŠŸýìg>|˜£G�¢T*éêêÂápðÜsÏÑØØÈŽ;xþùçÑjµìܹ—Ëž}ûX´h;vì ))‰5kÖJpp0ãÆ�£µµ•¸¸8:;;1�œ\..— ½^ÏÃ?ÌÌ™3)))¹êäÇo¯)•J-ZDuuu¯euuu±qãFyå•Wèêꢳ³ÓâzÎßÕÕEKK ¿ùÍoÐétlݺ•””/^ÌÆ�yç�wù$óçϧ­­íªu;ÊËËyóÍ7yã�7¨¬¬ô¼ÖÞÞΊ+øþ÷¿Oyy9²³„BHhŒ¦¦¦^íåo„V«Åd2]s:???Ï¿*• €ÄÄD¢££3f Z­–ÚÚZàr�ÃÔ©SIIIA§Ó‘––Fbb"ñññ\¼x‘ÖÖV:;;Ñëõ”••‘™™ @HHIII(•J „„„púôiN�:Å=÷܃Ñh¤¦¦†¶¶6F�Eee%F£‘§Ÿ~šÿø�ÿÀn·ÓØØ@RRãÇ�gúôé½Êçv»ÙµkÉÉÉ$%% h;utt`³ÙˆŽŽ`øðáX­VJ¥’áÇHgg'n·ûº÷‰Ûí&))‰ÌÌL>üðCÏÉ’ÝnÇh42eÊbccÉÍÍõ싾T*ÙÙÙÄÅÅ1zôh¬V+.—Ës¯E^^?üá1 Þl¥’ÄÄD6nÜHAAÇ÷9­·òw«««cÆŒìÞ½›ææfùÆ·¼††bccQ©T¨T*bbb0�DGG_u‘¢[kk+›6m";;›ððpššš<Óym:›””DNNO>ù$K–,aÏž=žp5bÄT*W}®„B M`±X†¬g¤înɯ÷äÀårx:\P(¨ÕjÔjµçÿ=ƒ—Ýn÷„>…B�V«Åív{šªµ¶¶¢V«Ñét$''SRRB}}=™™™“ŸŸ�Á`ðœ„Üu×]¬[·Žõë×óöÛo{š´õì¢çß---3}útO™nø@Pú>"""ýšŸŸK—.¥¶¶öªš«nÝÛÝ›žÛ½gٺßÛíî·L¡P°`Á|ðA”J%o¿ý¶'tv¿Kuuu¯ùººº8{ö, ¤§§³lÙ2.\È_þò¹Z.ný/õ>Ÿe·ÛíçëûÂjµòþûïsÏ=÷p×]w x]‰‰‰Œ=…BAdd$ÁÁÁX­Ö~/D!„ššzÕ ¡i Íó¼9sæ 'Ožäðáô··¸­Vë9yîì줭­�“'OrêÔ)‚‚‚ÈËËcòäɨT*RRR(**bذaDEE1jÔ(8ÀÈ‘#ÑétŒ=š³gÏrúôi¾øâ ^yåÏ•ÚÓ§OSYYÉáDZÛížòÕÖÖâp8zÝwÔÖÖFCCØívΟ?ßëßßß½^ï©ÅjhhÀ`0 ¨÷ÁÑ£G_×kqqqdffrüøqÜn7Z­–¨¨(ŠŠŠ¨­­åóÏ?Çét*ävßõ½ï}�÷ߟúúz¯Ó¶··óÅ_`0ÈÊÊ"%%åª�•��í¹ï©{ù»wïF¡Px:Ûè6wî\BBBؼy³œŠ[Ztt4çÏŸÇétzîßŒŠŠò9½ÓédÛ¶mÌš5«WÍuxx8���¸\.¬V«×‹»víò|~Z[[ikkótŠó­k¯#ýïø‡ÿóV®|ˆ‡¾÷žþ‡ß±á`Ž;m'›>áV®æ¿ŠåxBˆoËMéB£Ñ iMÓõ>¯)::šM›6QYYIvv6S¦L¹ªæÁ½^�N§£¶¶–%K–ðꫯ’””ÄÊ•+Y·nS¦LaÖ¬YÀå^áœN'III¨ÕjRRRصk—ç¤|éÒ¥Ô××óòË/£Óéxì±ÇÆår1bÄÞ{ï=*++™1cS¦L¹ü{i2y:7èöÉ'Ÿðá‡zþ~öÙgyî¹ç˜1cp¹feîÜ¹ìØ±ƒýû÷£P(X¼xq¿5L=ÃOVVÖ€ºïI¡P°dÉ8pù`óóãá‡æÏþ3/½ôÓ¦Mó4!ˆ#GŽpðàA^|ñEF�ÅÑ£GY»v-/¾ø¢×`k³ÙxóÍ7Q©T]u#zTTÏ>û,ï¼óo¼ñ …‚qãÆñw÷wžZ®žïeÕªU¬Y³†ÄÄD²²²äÛCÜ’F�ÅÙ³gùßÿý_’““‰��ïUÓÚSSSgÏž¥¹¹ÙS›=vìXrrr(++ã�7Þ 44”°°°«.Lž<™-[¶�ŸŸ�J¥bÖ¬YßHž×L•lxù·l>ím$#Ç$Ôn¤òT!›ÿPÆ)Ë^Z|çÜ“h.*â¬âåpBˆoÍMy¸í®]»®««q¯?f3GŽp×ãÐÿs�ª¦¦†¿üå/|ÿûß'55ÕS–ƒ2eÊϽC¢·/¾ø‚ .0gÎöìÙÃ{ï½Çïÿ{"##eã!<ߥƒù}¨ûøþ~] ŒXÈ‹/¯&íJe—íÔÖü¿Íœ5,å¥×~@Š Œ…X»)�¢óPG;a�ýp9“ÃêØüüsl8?™Õ¿H¥ô¯›)j‚Ø»Wñì÷"Éÿó±³Â‚:~6«ÿ~5™aPù?Oó«6rž~–Èo²¥ÂB`âlVÿ|9|ô;ÞÜ{–Kº–>ý<�¥_é¬ÇtŒ ]K^Y Œœ´ˆÕO-'E¾ÆÊßåcXò<«µŸñæŽ2,H½ÿYž}0…3o¬æ·»¾n]¡¹ûyÞùy&æ£xscEµjqcsXñÄÈ.Ç“BÀ�?ÜVå#4)z ÊCw€Rw/¿üòƒ-tKK *•jHBSCC.—‹ØØØAÍwàÀÜn7ÙÙÙךBBB?~<;wîäƒ> //�òòr’’’7nÜu-ó» µµ•÷ߟ·Þz‹ºº:{ì±îEQqg±Ûíž$±Ø÷öZŽ5ë˜úä/y ùë–š°42gÍcùC™D)Ávì¿øÕï·qÊ=šy÷/dò°ŽåçSPâ$õž4ÂUíTïÛN±ÉJ]£Š´¬g*8}ª‚cÅ_á?ƒqÎjʪ*(ïË}S¢h9±�Ï*-Xk-MÊ$éRÕ•”•Q8‘™ 6*Ê+);«bÚÜ4BÜ5lxé7l>­gÚ#?â�ñ.Êvoc÷¹0r³“h,ä“‚s\j©æ¼&�Üé!˜NTPYz ÕÔ…LŽ¡ólÕf-iKVóÈÌ4ÔùãKk)ñKgéŠûÈMñ§fÿNö”ªÈ˜?½RBÁoûÛ¿�}BRwPrõ I}Ý”æyƒ³Ù<$5›Íƒ¾?J¡Pð‹_üâ†×Ã3Ï<#Gá ¤¦¦òꫯʆB § Ó@IRÂÕ�]Ð……xÂUþ¶|LN9O½Èê �ƒ®éÞ,ÛÉÎ’å¤Lýz¾‘Kžæ±,“mÇøÕÇ&,Ãñ»ÇsÐ�ºÈ±ÿ»SM FÒðD´ôùÉŠ4H®ãпäc±%ñôÓ�1™ê¾|…üÆêì0²z'yç@s÷rV/Ê@Íd8UÈkGó(l™ÃÂ+-¦Ú žzî1FªÄ5ã•ýuœ:mã±¹9¤ÿ/vžV9i9©Ài¦N *…Ìì9ŒÔÍaò¤ÙXT‘H¾B �›𢢢z=<ôFØívF�%{R!D?᪎š¯ J$ÅSÂÈD”™¨;g‚©WîeTE’w9€E†‘1qè !“£“΋�w9@…E¢[ôHFjg‘Á€­‡ÌõµX¾x�|ѳ€&jê¾þK3"…X€†ÈˆÀF‡Ãxy_üd2â·°¹x-/<±C| i“²Y¸8�ìy!„¸}C“Á`À`0PRR„ ®{9ÅÅÅ„††YO|B!n3ªHâ"S=gjlÛ;TÔÂ7™”kþL¨û,÷Ê¿Wj~ÔþÝ�ÊG é;Þ¿ÿµé2Vó÷÷lm¡Á T~½~ÏýÔý/L“ÂcÿøGR>ÿŒÂ’R*+*Éÿ°”ü/jxé«I“ä$„7Ly³V<~üx¹páÂuÍßÒÒ‚ÉdbìØ±²…â;+„IÓÓÐà hÓŽõxlŸ­b¯ýî÷üêg¿'ßÇÈ 8멬îî„ÜLMµБ”òí”6:ÐiƒÈ1)¤ŒI!RåÀ�š A=ó½G=—ÍLÍY‘w?ÆO^x…Wßø~2IMe”ÕË"„CÁïf®<77—‚‚&NœHhhè SII ¹¹¹²…â;.jî*V|™µ'wòÊO�1&%ÿö:Μ6asêHûá*rô!ØåðIYùýg �ÕåñÉIšQËY˜þ-UǤÎ&'6�-eøÝf†Õ�÷A>5aKYó»�2€Eè´�€…/·þ�Ol3™­ÝÉšWòèL]Èc3SÐuÖQXomêåZ8!„7Ly3W®ÑhÈÎÎæèÑ£””” hžââbŽ;FvvöUÏÒßM}ô‘χÜ~×8�NÖ­[‡Íf»íßË®]»¨ªª’�*ðc2’û~óo<¿"‡´0g+ŽQzÖ†nT˶†—\~F“nêOxéÙ¥LÖÕ²ë�7Ù|ØFì¬U¼ô«åŒT}[eMá¿|ž¥“B0í]Ë›ï£sìRžÿåH`nK™·ˆ´0 –»Øù¥ÅäUüê‰9Ä6ç³ö¿_㵿í¤.4‡U¿|š�B1nÊsš¼)//Çl6£Õj ñ f³Ù3ØívBCC¯«I^aa!'OžÄl6ãççGpp0S§N%99™íÛ·{š fdd0~üx6mÚ„ÅbA«ÕÒÕÕÅœ9sHHHðºl·ÛÍÞ½{9sæ n·› &0}út éêê";;›'NP^^βeˆ$ì¹ÝnöïßOmm-n·›ÔÔT&Ožìsú¦¦&víÚ…R©D¥Rqï½÷DEE‡ÆÏÏ�ÐÐPæÏŸ�J¥¢µµ•üü|l6�<òÈ-Ý…úG}Ä´iÓÝíüí¬¤¤¥RéyFØ�h×®]$%%1zôhϸÎÎNvîÜÉ¥K—hlldñâÅŒ=ú¦³ƒÙ_~ù%ÅÅÅøùùÍܹsQ(^?Çlß¾�öövººº¸çž{ˆ��÷9þN3Øç4 !„× =7øœ&¿[å�Œ7‹Å‚Éd¢©©‰ªª*4 ���žŽ#F�uÝ�>ddd�‘‘ÁÞ½{1 Lš4 €C‡Ȳe˰Ûíâr¹P*•,Z´ˆøøxÎ�;GAAñññ(•WWÎ�={–óçÏó£ý§ÓÉßþö7’““=¯×ÔÔPRRƒ>8dµcF££ÑÈã�?ŽÓédýúõ¤¤¤ Óy¿¬xàÀ²³³ILL¤¨¨ˆ#GŽ���Í¡C‡xøá‡ bË–-œ={½^Oqq1±±±œ>}úšeijj"//ϳ¿,X€Á` ¢¢‚£G�¢Ñh báÂ…(•JöïßOcc#.—‹¸¸8rrr°ÛíìØ±—ËEGG™™™Œ5ŠíÛ·ãt:Ñh4444°xñb"##),,¤ªªŠ��š››û-ŸÝnçÝwß%..£ÑHtt4³gÏÆn·³uëV\.‡ƒœœ¼¾Ÿàà`Ö­[Gll,‡ƒK—.qÿý÷£V«Ù»w/ÍÍ͸\.ÈÌ̤¢¢‚ââbÂÂÂ0™LLœ8‘ÔÔÔAm+•Êû¥ïóçÏ“ŸŸ�¿¿?'OždúôéŒ1£ÑÈçŸN]]O=õAAAÔÖÖ’ŸŸ�R©$((ˆ‹/2aÂÆŽËÞ½{ill %%…)S¦ô{¼íÙ³­VKgg' .$88˜·ß~›áÇãp8hkkcùòåh4¯!ÿ�wÞaéÒ¥èõ—ŸS__Ï—_~Éüùó½î€ÒÒRJKK1›ÍÜwß}DDD°téRÏqWPP@RRMMMƒ:f·oßNgg'����F,X@DD¥¥¥””” Ñhð÷÷gñâŨT*6mÚD\\555hµZ–,YBKK‹×ýàë<~ü8�?þ8þþþ|üñÇÔ××£V«½~Ž+** cæÌ™˜L&òòòxôÑG)--õ:ÞÛ÷’B!†Žß­T˜îpôm2�Œ3…BA@@¹¹¹¸Ý½ŸkuñâE´Z­Ï+×F£‘ØØXT**•ŠÈÈHL&pùJxqq1+W®ÄßßÈÊÝÜÜLXXÛ¶mC¯×£×ë±X,^C“ÓéÄl6ãv»ùÓŸþÄ‚ ¨®®ÆjµâïïÏ©S§¨¨¨ )) “ÉĨQ£˜;w.���:­©©!**ŠÜÜ\l6*•ŠŽŽ8ÀŠ+ bëÖ­œ9sÆs’úÈ#�püøqººº8~ü8áááÌœ9“––¶mÛFbb"J¥’¨¨(¦L™Â‘#G¨®®fذa”””xN@×®]ÛoùÔj5DFF2gÎÏøââbÂÃÃÉÍÍ¥©©‰O?ýÔsbÜ÷ýtoÇñãÇÃöíÛ9}ú4AAA˜L&yäœN'o¿ý6ãÆ� 00�yóæÑØØHAAãÇ�Ô¶êYÃÒSLL ãÇ�'<<¼W GTT>ø ëׯï5}@@'N¤¸¸˜ŒŒ OØ4™L¬X±Âs²>fÌ‚ƒƒ½žÏ?ÿœ3f�˜˜HII ………Ì�;§ÓɤI“ˆˆˆàÃ?Äh4z­ùP(„††b6›9}ú´'|…††úÜ.—‹èèh²²²())¡¨¨ˆùóç÷*Svv6*•ŠˆˆˆA³ …‚áÇ3}útÊËË9vì¹¹¹:tˆ•+W¢Ó騾};UUUŒ;–ÀÀ@, +W®ô|øÚ¾Öàp8ð÷÷ÇétÒÜÜŒZ­öú96™L$$$ðú믓››K{{;‡Ãçx­V+¿fB!Äw%4Ý ¾‚�Ëåb×®]àiJ3Ðet�»pá :tˆ… öÛdÈb±x®€Oœ8‘ôôô~Ë®T*ÉÍÍE¥R±k×®k¾×ððp¾÷½ïyš6u;v,ÉÉÉTVVât:½ ÓÓÓ9xð o½õÆ cÞ¼y¸\.l6;vì@©TréÒ%ìv»§æ°ûÊxw“ÂÖÖVÏɶ^¯ÇápÐÙÙ‰B¡ðÔL¨Õjìv;v»µZ�F£A¥R1lذk–Q£Ñ�””ÔkœÙlæüùó´´´x¶gWW—×÷Ów]AAAØl6Ün7Æ C©T¢P(<ã»§Q(øùùy‚ø`¶ÕP @©T¢ÕjQ*•¸\.¬V+MMM|øá‡žãµ££Ãkhr¹\\¼xÑÓYKHHˆç^#???=ûÇårù,GXX 444x¶UBB§OŸöº”J%aaažc¢ººÚ³¬ÚÚZüüüˆŒ¼¾»Ü•J¥g_b³Ùhoo÷Ô0u_Äimmõ¼·ÄÄÄënòçïïÏÌ™3Ù¾};¸ÝnÏgÀ×çX£ÑððÃ_u±Å×x!„BHhúÆÄÆÆRSSÃ]wÝå¹_bîܹ(•J,X0 û¢££ÉÏÏÇétât:ijjbæÌ™X,Æ�ÇÝwßÍ|ÀñãÇ=ͽ1 ¬\¹r@厌Œäĉèt:ººº°Z­žZ:·ÛMee%ñññèt:T*¡¡¡´´´�˜˜HMM ‘‘‘èõz:;;q:�èõz¯ë™¶¶6²²²¸çž{(**âøñãLŸ>½^Ͻ÷ÞK`` V«­VKSS¥¥¥¸\.Ün7………L�:ƒÁà9iîžÖWSÆîZ ‡Ã�B¡ðÌw­“do'ñAAAdggÓÕÕ…ÍfÃßßŸæææ«ÞOVVN§“ÖÖVt:V«•ÈÈH‚ƒƒimmÅårát:±Ùlc±Xnx[]KßÑÁÐëõ >œx¥RÉ… |ÞC¢T* Æl6{jBºƒì`„‡‡SPPÀèÑ£ikk£¶¶–)S¦`±X¼î—Ëå -V«µW ;yò$ÉÉÉ×b¼-; ‡ÃAGG~~~X,–^ÎöÕn ûÁívÓÕÕÅòåËQ(¼ûî»ÄÄÄàv»½~Ž£¢¢hhh`ôèјL&t:�Æçx!„BHhúF¥§§³cÇþö·¿áv»™:u*ƒZƈ#ˆ‰‰á­·Þò,³ç ¨J¥bñâż÷Þ{DDDwÃ厌Œdøðá¬_¿·ÛÍĉ=Mó\.{÷îeáÂ…Œyùá‰3fÌ`çÎ�>ž={öpòäIÆŒÄ øüóÏ=÷ºmݺ•ˆˆˆ^÷Öõ úÝåîÕ÷Üs�ÏZÓììlöìÙÃÑ£GéêêbÑ¢EƒÞÞƒ�ææf-Z„Ùl¦²²’€€ŸûÁívSWWGCC­­­Ü{~ÒÜÜÜëÄ`�Y…BÁ¹sçhhhàÂ… ,Y²222øàƒÐjµúÜ~¾öƒ¯Úa…B�Ýn÷4�LII!<<ÜÓL°ïç8--�mÛ¶ñÎ;ïÐÕÕżyóP*•>Ç !„â›uËôž'Ä­¬û¾ŸåË—ûìlCÜ>¼õÌ'nÒ{žBˆ!=7Ø{ž\¢B!„BˆþBRÓ$„â"5MB!†<ôHM“B!„B|s$4 !„B!Ä7šÜ²é„B!„š$< !„B!nîÉ/Ò}ó±mäŸqÈ¡)„�Ðt…4ÍBq Т몡ø«ö;óí]ª§º¦å¦…&óW•ƒ MBq »îüâ'ÛN!ÄíMEXÊHl'Ëhˆ›Æpu�—\ùêh!•­ r;ÑD§“1! MÏÙÛ8~¸”Æø…1vÚ4t>æ;ˆ�Õ¢ýÛikmÃ7†á—L4[-Ø‚RÉ™‡íøNбè]¬fa£pµ±¶¶¡NÎfFRÎ •*ú »B…ÉS3IÒž!?¯�à(¶K6Ú:BH̓£¨š³ŠƒÇ´d¥8)>T‰À©!25ƒ‰1=ÞŒkõ�¶0b2cµTçb¦ÂÚGæŒX¬Ç )oq¢Â‰fx:©Qh¬g8täVÔàT1|bã\åÕ[p˜ ›2ƒd¼”[ïÀXœOQ#huzt.À G¥âÎ"Íó„BÜþ“I�5SZaî5ÚQWL™}$9óæ0gî4 �E”·ôžÕX^LKT ç/dVœ«3÷;Ÿ£]M´ädÄâ¨<‡j|&3f¥£oú S' »2œÉ™9d%«8]ã 9c¹S¢i;[O;V*‹ê™6Ÿ9³ç�;N•œÁ¡Úmh’3™‘�Kzp5�’Æ GgH&krŽsÕ˜£2™?g>óg¤b`i¯IDATà°÷®�ºTñS*ÒfÏgþÜÉšjhhVlú©ÌŸ‘Œ®®˜²ÎdrçÍaμLÂŒE”_€v»‹�q³˜?gs&è8w²gô8Æ„h‰KŸAJ¨�r·USV¯gÒÜ9äf%£µÛoZ­˜B|S|Õ4¹/í÷ú[!„¸E©¹+ }^1Õ£rè®l²^hC™N€2„pƒƒÊV„u×5]ÄÒ a‰A$N#h>îc>-¨‚CÐ+M­ƒ?€­ÒEç•ûªtà ¨�V�Z‚@£AívÒÙÙLK«Û‘<\�8UzlhÁ?„� ËïGí¯ÂÙÕ;~D GõÅAò/Å2<.�‘‰zT='hmÆI˜ œ´™áÀE*„…]~�Ö íÍVòó*p:œèmN jÚK ÙW¥Bå²ápêéug’¯r·Z±E¢!2T‹EH!Äw$4]‹»Ç „BÜ|šá¤§T³¿´ŽdEñêzc™Jã{¬_Õ³,®+KRE’š;ƒ¸ž3wžé^¤ï2„ŽcÎü47ÖSW�ÏîÚtæeÄõnn赬JT=¬™Éœqú¯;8SPF[ìlrG@Ëqv{ÙÞÊ]w¨WÍ’Ë%‡¢â–ä+» (Ï(opeš„BÜ2S‰m« ºõòY½>4{³‰v—£Eƒ!¤gÄÂ0ÌI‹éò=@Žs‡È;nÀ|7@BX …ãåzgS%ÇÏXûù¥V‚œ€µ¦”3�Oaâ¤d´–fl=CʰpôM48.—»|ÿªûtâ 3`olࢠà"_—ÒàpÐéP¡ ëL´;¿ŽBNW?åÖëѵµ`vN3Fó×ÍóÚ­VÚ¥­žâÖ M=óÌ rŒß WÀ�¬L!„øF)C—ƹü4#ÒI5’ŸWƒÊšø©d„ôž%jÜd ²³N ªÆN‹B¬ó>ß�tЧ'er2‡Ž}Ƨj@GòÔd ÙûäAá.cÿ!%w�ÖPd7Õ*58!$%ƒ�ž—?G’>ÚÈ‘½ŸRħ“¡ƒš“¨âÒ™l*äàž:T 'š¨424A�4PpäSöéKL&î|EUÃI�ÐRv,�ÒɹŒóVn}2iÃó9úé§hõ„ë®Ô¨Y©)ÌÇ>ñ^&GÈ¡)„¸%BÓuW)è}ǿʃߕA ø_€·Û](û@!ÄP1›Í„„„ȆB1d E—/}Ù¯ @'Ðuepõ®ª4ºVó¼¾ÕX}Sš´\B!„BÜê\=òË k›”L}Çõ Lš„B!„·ChrõÉ3Þn?PhºVPê–œW!„B!„¸•9¹º Þ€ûiló<——à$„B!„·zhrru3=÷5r�'4]«¿ro5MÝ+í’í/„B!„¸Åuy NÞúoðª¿.ǽÕ2u&å•+eû !„B!nƒÐÔ78 8<)û$¼Lèë~¦î !„B!Äíšz&oÍô®ÊCÞžÑÔóÿÝÏkêþWueèùÜ&u�¿ýzL£ì1oÏÁ…ìK!„B!D?¦ïkýuX×Õcè¤÷s™œ=¦íÛùU¡É¯ÏJ>þO�…)®,\Ñg|÷J}&oÁH‚’B!„âz”¯çÈú N}›æ ¨– ú¿§ ¼wáò1Î[`RöG× H „B!„ý%o¯wOãòœúÞºï·sœ„B!„wl`ÊÐ#áI!„BqG…¥nÿÎø-#+…ºBIEND®B`‚icingadb-web-1.5.0/doc/res/icingadb-architecture.png000066400000000000000000015672211527064444300223430ustar00rootroot00000000000000‰PNG  IHDR€ßç» 7eiCCPiccxڕлkS†ñßI*-µZÁ R;µ’Vº¦H‚”ÁªKrš‹�')R\ׂ‚èâmп@WÁYEçΊ.Zކ )B‡¾Óà ïÇÇCªÔŒZ½±,­v?.®äëk×Âñmc&6a®õºçVW ö̯Oø°0¸e9¸^íE8uã>Ánõ»¾�LÔ(¯¼Ä|üïA‚�ÈT†¼�L}È�‰KÅeRGÖwqeG�¸E*‹ÙVs#˜ª¶¯\ÆqÌè)Z‘ºè¼e9‹ÎÈÉY°ä¤EöØg1ã’ŽP¤£kS즺†¾y¡ =U¡šXUUÓæÀÿÿ^{µSK ˜Êsà[’ü8Áø=v¶’ä÷Ó$ÙyFú+oÚ£}ç §’Þu³�™¾Ã«·£®ò€×w9ö¥[ŽË �T­Æ÷Zãè{&¯�! Ï?SºMá1WcúÆ_êgÅñÑß) pHYs  šœìÒIDATxÚìÝylÞuÇqaxl²1غ�¡Nœ:dÐuíìV¦È}H@4 ‚€Ü†Ó@8D.[:7 ÀÈ©"‡J�c¶®c[7v•=‚‚ ‘�PáëwOŸöû¬OOx ¤}½’O¾O û§¿ßïü~¿m>À´¯-�#â�÷é¸mâãVäì-€�vøW÷f\èe­qgÄ õ—øhÆŸ‘qOÆ…~îõ¸Kã†ù+|Xêßøx܈¸¢ì¶î¶Ž«‹ ïc/Ç·•?8À}JãN‹›7'g•Ùÿ~`Üèì«ÜB�öl\™ PØø36îâ¸9½mÈü×oþüÙÞ,>de(`z7±.Àû�?»ÄUÆÍéˆßõʱU­aó&œ¿1L9¸ !èŸqÄ}Ò…xoñg»ú¶Q×½øJ&e7®²5L<ý…PºOC!CPKÜ¡¾пø³UÜIý‰?Cj^¿yleë»)¥íxeKØåûkCÙž)ä`5q»ºX}õÛœþlè¯=œ¢O×ûÌ%Ma·o¯*dú_Ü�q;¸h= £û€¶½ç/O¦ØÓó>î†PràŠB† 7âÎŒÛÆÅÈ�?Câ®êoqÇËõ)òô¾q?k _<¹1”îµ¼�!¨1n_`ËôŸ9ýÝÈ[þ¼2ž¾oüå-á+Ǭ Ó¾^Èï-ýC<'º˜m¨â½ íç½´.…�þï³5…Ý{¾ ¨læÒx.}{ÚÌ¥×ÄßÃ]T`° ý?ü”¶óYëÃÔýÞŠ+Ë칿Æ�·µ‹ ÖtÄ{ @ãªZB!"и«[×O\ʾñ^¾ÔâÙ9­ˆ«p�€Á€ŽïOø¿dý¼_¯?ºyá {ý§fíá’Ç®Ónª+HÚé§Ía×ï®Nßê=ü¤³-ú´m�%¹ç½¥{<ûL褾ƟO-~õúG7òêê–©!w Måá{÷Ý•‰8…Øç.ØŠYÙ�WÀ¥ø“»Ò=–dCпcº,n¨ @9;¨á¡ß¤ð“¿K»]ï„ßÞš"N¶ãU-aÒñkCÙž�¾”¾÷Óí“?ùhqˆ(ÄTÏôhöº³—÷€–o*Óç-L§@Ûé'Íaò‘«:¾T63}h˃OŠ>¿Ó2hsz7ž·Å�qƒ6�½ºz~Š=Ýï�†£Ò«à ¼ ço S^‘ ?ÏåÅŸÌbôé*ü¤Ô¾úÍûGÜùS+ê>áf]:°ááô  ^¶ßí�¦pSà�«l Om S÷^–ÂO<ãòãOÅâxÆ¥ß)þdV×~6•̨û¦Th»Å/Þ°¼¹üí¾ y‹NKÑæÚŽW¶„IÇ®e_Ë„ŸôýŸÎOÿdŸøÉžiÙøÃOfSÛÎ'Kf,úŠà(í†ÆÓŸïKZÕRvžÝX¸àSÙÃ÷�.Ù&¾2½þ­c‹óPizú§SZ”³ºÿ–̨½¾dzíön`À â¥õw¬jîÛkà¾~ëüB ¸îcИª–0áœõ¡xÿe�¾ûW‘ Ay¯~KhQþ¦×n>ÿÏÓㆸQ€€Òn}ᤵ} @ÇÞwgŸâNÑõ«ÃØê¦>† üð3æšömþÿ-aâׄ’=Ó+àò¿û³87ÅÐÓ¾Eqµ›2}avµkã¹·›°hÄâ—nxlíÁoõ€N}ð¦cοz" [{nºéÔ0¬ñ¬0¢æÆP4wiïO¥åÆŸ-ÎqW4…IG?Jg¦ø“V×vΈgŠ?9á§} ;ïáâò;»i€€ÒÊïYмtãŒо·ý±Ûø3úæ%aè†32ñ'wÃÖÿ(†¡ÇûÒRüÉßNm“YÞRø©h�>é̾ö-†ž#Ð[ÅåÏTÆmëæTÚ~ÞKë*n~&Ô¬= Ëø³lÓŒ°óìÆn£ÍÈGîNá§‹�üݽùÿ.ÿ»?)UåÇŸ¢œM8k](ÞgI6¥§~²gzhz7O•/èXqfϼÏ㊿úôÖn"`À ÍñåK×®·Ô�V5—¶ÇŸÌïÃî~ Çx3|Qu >ÝlÔOwùýŸwÚÏløiÝ2üTçüžW�]Us˜xâªP2³¾Ó«ßÒbìéAñwÇbðÉ�?gܲ�¦»‘€€Ú·Ëu+ÃÉÎ ?¸ÿ¡|nm¯OïlûìU½ Ì÷�Æ\»&~:ÅŸª–.P6ôdϼÍjÛ¸Ë7…IG5„’ŠNhzm~üIOÿäG ¸2çî_}úžø{¼  ¨ÿÛnþ¼{z؈§nH(-牟Ö€z?£»Øø _»´$'¥øÓuJá'7ÅÅôT\Í¿â.‰1èSn,`Рíº?…žž¶áô0æº5¹á§»oþ¤àsMÎ9+»ê®"PsfÎ\vÿF}úîOOñ'…ŸRj;§Õüi·ió�ŒçVn0`Р¢¹ËRäée#ùå–¨*»Üø“ÎNOåEŸ´Ÿo^Kæ,ªj �[Š+²¨|AW¯Ká'ï韴~B @›ÏÚ¸b70ÀPÚðúÊ> O7\œ >)¥ïþä®(7ÍÊ}ý[:SüÙ2�Ênìå¤ß Sf¤'€bìéùõo™Õ¤§€¦ÅÅ3‚Þ‰»%®ÈÍ ø4ꮚ¾¿®º)óoòâO7Oý¤ð“6ºm)Íê?q-éœÝÆÿx]Øu¿úLø‰KÁ'vïôú·ô ¸LôÉ_Ù“�ç9ñü¸›h(-†›áu×ô)�¾©¡ýµoéÌ]us˜rõÒð­Ë~&V®IOu ?éŒëˆ>q)þ¤Åÿö¹SW…ÝfÖ¶‡ŸRJOüÄÅß�ÃO<ãÊÚ6¹ì‰�q¹ñ€€ÒÆ\». [s^ïhîòì“?ùOÿŒ«j wžs^Øpòþ™5žr`¸ûœsCùÕõÝ~û'ÿÉŸ~vˆËý]T¹)|á˜å¡xú3yOý¤ÕdÎ.PŠ?gÜc“Ëÿ²@(mÔí ÃÐÿ³w÷,m…aƇnJ_¬MB)m¡‹�f1ÐÁ¥Ð©ºtêÐBk‡d("‚(:ñ%‰â Žâ,ˆƒQAD4ÆOàWp¸}rÇxNNŽÊõƒ‹óˆëÙþ<'…DÝñ§)Ÿ”ðXÉÆ}ÚÔ×;©Ã�¿Ã�ò}hÁnþ¤ëÝþqçL½È•­ÌK[çveèñ Anì©´— @VN>Æs×®¬ë9/"x �•º”W3;Ò|Ô8=ÝÌØèã+äZLþµá' ßýsÞßþq•lò–±lü±Zn{Ó},Ñ/›:U?ûæÉûé7ÿM €â¹r:EãËWîÜåžOx!ÀC€¬TIÂÙy¶>%M…äÝøÓ¼ß/¡lÁwóGÓßøy=z.']ß @úÿŽá 4ûô›•©<_Ž?VË„«|NåÝŸ‰uè- ÿdÕÜþÉÙ9®ã�·£hûÒg^JðH MÏáô™´Î®IhzO"ÕÁg$`rEF‹65h5ñSÞŽåïqó'ø�6Qt]h­©3ùðcWbŸ¼Ÿ€[ ¼õcç»›?µµ/•›w½çår²áÇrãŽÿïšBÕÆK²œøecOƒþ÷Mßcª7þس܋ɢ>çÒöuKb7ì�k”Våy†«m=qRN”†qpƒ“ÚÖ´êJÛekÒxhš¤®ÖVm¬Õ6¦Æ6šFd†r>ÊAAÅc”…RODBP+2ß Š(QQðìÛ÷{ölï=¯ïÞ3„¨¨×µÖ½žw\&þùö¯kÝÏÜý Û?­~³wLÕyË~^æg'~¤ðé@ú;Güè­õoÊ„ .ê�º÷œSÝ� k´þmd~BñJ Å  Q%ŸDõý×_ºº¯.‰¶€”ÛsÅ�b¨’�>[wÄÍ{ðc€Ý[ÇV¾Yr$P/“@É<ý'ó%zÚÉi—Ì �îþ(ñÛ?¡Õ¦ äãg³ÿ{äWuÆÃnðW"âGòǦ=öŽˆ创+ó?¿ÌvOTŸóVëG(§ýc³!y÷±ÆÚ=@#xi|훦¤�¦¤OÐü‘üñi–ª¤ÇåO¸êoÝç†�Ê?�’ ’Ê Pþh&¹ú°#nêÃv¿P½EïÈÚ7M‰½}”ó<¾ChÁyg·b­å%Ò åO’nÍ-mÞ½/^åj¿v—P\å6€¼ð1ùãgš×|.òÙ›0ì^+àêÛ[ý¦ô W¿YÔ:hÄjw˹ß®Z~öÉ&}R $ñ£·?-ÁÚ7%@6»�.ù´Ø»ï¹�¸º?º3�?í¯³H)íóù¦÷�`7Z§æO:»û#ñÓ³A9êòûÝʳþ²P-ýçÓÕþ‰ßþ‰Ë‰µ,’?J 29 ñIWõ½\ÝÑ·Çš?é´DÅ�äO6wù åÇ ŸŒª¯¤œ'�,ñ»?>’@ŠÉÍS.Yàý§sФ .ÔÍK¼õc³)hÿD›?Zÿæ§ä�Eâ§ëèÌ{Œÿï^ö¸«þÆÒ<ñ“N­‹ÈŸAÃnT¾xÃ{~ŽóéÁ�ôñ z͈ôÑú7ÉŸbÔ Ù3ÈŸþl±»ÿœoGЩ—ÎW맨ù£wL©¤Ä@6í�ÊŸ6éý£•®ö¸Å1ù#ñ•@@öN$Pe¾ìçy>¿Ï�ô‘ ÉŸxó§ãퟰõ“¦”ÆV¼Õ Ä]ö£ánÙ9§˜øy䬓Üù� Ö¾ÞüQšb µ~,ÑÕojuUüßùÓ’äªäß9謇ݠ?¸ÝD�$P¼ùãßjþ¨æ‰Ú/^ÿgüÀ@¡*jÙŒ4€$~$”žŠ$Pc:Ô«q�Rÿ°Ÿ-’?q ¤Ö�¹ûÓ¢äµÔøIßjýX ¨’’æU•øÿ¿ÆÕ®êoîóòçf‰ âõozG$�@®öð…7ûÔðC@}Ô  Tøè­´'€5”Ʋ‰Ÿed2%}â‘øIgK¶ù“μµoßÒ½ÅdOV¥  d*=þû1W}â’DþHühZñcSâ'ÈÛ> ^uå€úm ¥^(™­ž#Fdïþhý[¤ý“&.€,@š±�ä�P6-Qù£p>�üIf$&~ÔêRÉØ×ûßW¸C�½-*~lÆ[?éT_h9ôð/øüƒÏžüð@Q´ë«ßÚoIIö„âGÉmþÜþQÚ¿ûcÑí‰ÿ–ôÑ”øñS‘ø Pòî¢øÿí×÷ÌÜ £­ $ñ£ä6$Tä�ÞC¯[áóÇüø@¿™ªWôÏË>aã'�@?‘P�Ærdý›Þ»$€t÷§m ¨Ù’ʉŸæ@ÙÌ?ŠÚ?ÊXeÿ†'\Õ·—z Tpó'?ahè‚T¥™wèÐùU| Ž  ú`*Åâ'͈ÈíŸèÚ·t–ƒæO9Xýf3XûfÑ»)MKVYö�Ç�ä�¢ö�fV…é¢)4®T‰½;�kqÝ/]å|íÝý)@ŠÚ?&€L¥s‡—@?­:?>�ЮH 0?ʈ¨üI#ñfdÑíå€hûG­“?‘õojû(@‘û?…«ßJyíŸTþ¤2ÈÞ½Ï_îj޹%œ¤OVühZæû\gÓ癚!óN¯2> P�ø‰&ÚüÑß�üiÈiÿ¨¤�%hþ4¦Íµvæþ�š?-6•@Ùl›°õ£«ß,1ù£dåOçñÉìR¹tÆ}®öÈE9·Ôú±¨õÓFþÔ I3¯’e>_âÃ@uDIö 7áÓþÝû;ÖüÑÝK;­¥@ü4Å“?ºý“¹ÿ@–\ñ_ý66?š–ñiüÄÿ¹ª“—¸ÚaQ d‘Ró§&•?6çeóþÀ!s§Õ ™û>PAÈÄO«RÚÈŸˆ’øiÿö�RΕ@Å­½½ôÑ”üÉ_¿ýc PÁê7 Ÿ`¦1á“•?�2³û­tŽ¿-@&}$¢í‹�2pð\ç%Ð6Ÿ ¾v/>€Ï³ª�þ-ù3<²öM š?Jüî�¦bÇåOñͽ-ÁíŸæTü(�ø‰ –bdi¿ù“MVuJç„’½;M,Ù»÷¹ºš//JÚ?©ü9\òG¹.§4×�?þm³äsÒÀÁ×pàsÛªfdœ%{ëgD$±öOcvý›Ä�RNÅO: oþ(éc‰ˆŸæŠ²‘@%ˇÚ?Wi*YdSmŸ±�ôÑÛÒÉÄ�½mZ&jvý¤ëûÝ¥®fX¬dÑý‰ËÀDú¹ÆU×]³Ø¿óÑ|žP½¤Oµâ÷$}´ú-lÿh¶]ýÖSâ'hÿDÅ�ÞMÙ´hFïþHþHüØTó'º®E îþ(A HÈÞºù¬›�“‰J·á�¹ª¯ßÈŸ´õ_ý&d3”@ïúŒ©®›Ó��àó"€Šå�füö�¤O$’?Iz(’?;}ûG3zóG2(@-ù·ì­  àîOØü‘ôÉÞýQûǦֿåÊe¿I%×ý¢GÜ€c%kßÚÜýñSí{'ÈÈŸ4s*ÙâóƒêºÙ¿ÇGðùj+ß’¿Ãèæ�½‹oÿèþ�’/~â- %”?éÔ݉Ÿ°¤¹ý$z÷G­ŸXû'ˆš??~jõ›%"”NZ\ï³—¹�G-”üÑú7›jþHþT¾F©›döã›uÀgRÅ#ùSެ}S®¼o‹ûþõ›\ïøýŸ¨ü±·Ä�’×üÑT´þ-lI‘üQ$JIŸ  Øê7E«ß‚Û?a:Òü‰§sój×÷´%®Æ·�$€Lúø)ñ#¶ÂÌv›}£AÕ|PŸTÌ ”LK*~²ÍËüÇ·¹÷ÞwnéSÛݱÓ6dÅ�f£Ÿ’?AûÇÞ¡øQâòGQóG²'AaãÇÞ>¹«ß”R(�Âö�%ÚþÑê75")@“Û¦Û«\ÕŸßšJ Øí“>jÿXñãS™öžõ–Ï•ýÍì‡ðÙ½T´þM  +Ô°l‹yÿ·õÍ÷Ü䯸š1ë$,&y‚”Û½ûs€f\� äO³"ñ¿ÿÓUQ (Öþ±ÄÅO\Iúhúä  ‰¹‰  )š=.|Ø 8æz  l Ö¿ h@Õ6gµff%ÏûœáEО|`Ÿö�ÒVø Ä�P›Ð¥K_´ÕoGN|Úݰz›{áµwÜovþÏÚ¤õc)[rîÿHüè?J¸úÍf(ìmâG(I)zû'”?]ÚD²§¸$ˆŸ�_ÿ69*�$‚&¬q½Ï¼ÇU›§öO¤ù£™ŠÉe¦ë?Èò Ÿ?ä#ø ÝRûGÑê·Ìlh+€|¬íó�k7º›Þp+}¾9ÿY5~é£YÜþQš4còG­Ÿt*jÿ$éšLÝûQ¤æO×TüØ bâÇÞù£) $ùÓ! 49ž}Mù95Içæ'\ßoÝéÛ@’@‘Û?jþÔE�Íþƒ®nÍŒ9~ÄÇð)@ñöOØüÑ?“ø±„({÷Çò/|Îûù î™­o[+è¨Éë%~‚ÙÞíÉŸ–`ý[°.¶þM‘üI@A?’?@Åw‚©µo©øéÜÞíI½'ÇäOš©­™VvÝ~¶ÒU¿(]ýJ 5ÔRûǤ�Íl¶R;ã'>ûòÑìÎHò'@…퉟¨’jÔ¬ö÷€šÚâ6ùµp#îÉU�¶µpAû'Oþ(aóG))jý˜J$�"éãcS(¸ù“@ŠäO6ѵoz—víîO5T¶™¦ûºþGÏÏÞý‘ô±HþHúÌÔÛ2æ—?•¬÷9å�Úé{ðñì¶HÒÇæpM52)@—¨”¤1I�LŽžú´»ñÉmnÍKo¹¼õy×3¸÷‰ÄO$1”mÿ¨ä§¢Ö�Ú?�*Zÿ—@&z$�,�"«ß”PúÄoýØ[Hí?ËzûØ} ¿»Ûõj¨C«ß$€Lü˜òÒÇÞI¦ß{Hí´#øvó@jÿ(aóGoŸI ¸*[$€”¿^°Ñ-î w÷ÓÛÝ sžIdÏȈøQ‚›?z[šÛ»û£t•Š´JYñ#ùc %P |l*‰’ì‘*lþ(“5£(lIÙTJnŸéeשéq×ç¤Û\õà<ù£æO�Tú„ó}ŸÉU‡NíҰ  øíŸâPO@Éœ'ÔšDô¤SÑÝŸ›Êî‚Å›]iË[nÚÊW\ÝħrÖ¾µ´ÆÞ‘PDþŒ¶hå[dœ%Òü‘²DÖ¿Iþhý[DüØ;§ñSÜþ)^û¦)ñÉ>&l&™žÌn—®pýŽ](ñ£pÁ¸mÖÀ¥òG™æ¼üñ™¶ÕÏóÙ‹à@ûG�äOÐþQëGi�ò‘ nÿ˜2ñS–üQ¬õS3n�½üe·áÕ·ÝåË^rŽ.ÇÚ?QñcÓ¶~ì�/€Æ(ÑPLúÄå�Ö¿éþOÁê·]@š9âGíIÍ =þå>wÈךüQû'ºþ-hþLK# ”¤Åçë|”Ÿœz\ò§Ü*€²)XÿÖ ôŒ XëGHâ'¼ý³ì™–‡7îp§Ýð\¶ ¤öO €Ôþ‘²Þþ nþ(&{lZrä�Þ&~Ò©p’??’?;»úM™”•>Šnÿ”ÛÞÿQ²Íe†f%û�ÒõþÎb׿nV®R¦Gå�2ÅÒ¯fÊÏ}ããøxP“ ÉŸ4�ü‰6€B®€+Zý¦ù�üQîXûºû«ëžu§^¿Ñ=øìwÚmëÃæ�@’?1$é£)ñ£”,áê7EíÉ¥S(�Ôú±Ä�¦%ÒþQÂõoºûcò§HíÝ:;�|Ìõù‹›Â»?6%~ŠÐ½MM~ǧÙg>R€�MÙ 8­z‹EâG³ÁföÖ�E(*~|ôîÆZ>‰:É ÿ¶5pÞµÙ=ºùM×øÐW=~�P ,jýØô‘ø±H%oEH颴#~‚·nå´Š›?z+�ô±w|í[)MVþè-ñãß’?{_­tûÏåîàcægÚ?Óӈɟ@üøØLó¢ÏÙýj&ý.+ÀG#€š|FU¢�?1dÒG W¿™ðI@#–mIîÿ4æK 5Ò©Hiå[íÄunÌ/^v¿|þ ÷ƒ;_p½*÷�Rù£hõÛèlâ(.J±û?’>q $¤æ�½MøØloõ[\)’>š�üÑú·DþXrä�%�?6+Y›dzÉõ8û]ÕЙ&~”°ù“Î)éLåO�I®ßÀI«ü<Žà#@Á ¸@þèï^–üPOÅ$Ðm¥×Ü›ï¾ïFÜ¿Åõk.GäOñýŸ¢ÈbÂ竳7ØJ¸;×½îNôÿN(�$ÂpÑ»??6Kí7$‚‚»?‘¨ý³KkßÔþ‰ÝRd)ºý£HühúÌL²ïøÕ®÷)·»CÍȈŸ jþæà�“Z3q¡O>\€ßŽjR”ÈžµNÓ'ïöOƒfÏ0�•ЫnÜòWܽ뷻 [ßvgÞ¼Éõ P¬ù  &€¢¨GsÉ}gÑsîž ÛÝÔU¯¸aӟιý£û?]óÛ?qùS¼þ­øöÏ„Èê·‰@…·lÆÅOYÓÄO¹øþ�Ú?ÊÕ–P)³ÖºÎWþÊõ9a¡š?aûÇ25Òþ™”ÌDüdó¦ÏWOèÌ °khT6•@¾õ‘?jû(ZùfQóÇföP//ƒ¾¿h“[ûò[nÙ†î¸Y‚PTþؼc��Ä�ÞéíŸ>^Ú\x÷f÷àÆîâ{í·Vò'²úÍæ%hË%?6Mø¤(Iqû§øþOqûgªÍ°ù£ÆO¡üÑT‚öÏÌxöšå§O·ÿxÐü¥9Ù›?Ù·%�?ië'’ •ùÜAÕã¿çEО|È;/€š”V4Á7€†ÈM%@�Ù@¯šJ[?}G•ÝOïyѽ¸ý]7ãW[Ý ñë´ö-”?á ¸¦dñïæ’«›ò”ýÈw·o}÷ÖçÜcB¤µoŠš?é´ÄÄ�ÞjþŒ/å­€“RóÇÒ¾ü‰¥còÇf¡ü ÅOØþQÂæ�ÞÊ>ÓZ\÷3—¸~ƒ§§7üTÔú`å›@鬞ðÁ<(ÉC^}…�`ç�Z@÷¾4¶ë¤§7 {[Š›?&�K�R�ÊÍ\µÕ=ÿÚ;îÇwÿÚõi.·@AH7€$}tïG(›ãænp×=¹ÍÍ[ýªû“¹ëMþ˜ìÑŒµâë߯ßÿ‘ŠÜüñ+^ù–&v÷§lS«ß,?z+3‚H·f©´×lÍJöû„ë}òM®ª6ïÐ$?9Í‹—>afùôå£hOIü4Ù\ºù¶ßY²éÕ®S×;­€“Rû'.  @öNRn³öíø9Ü=¾©óè oºS¯ßèz¤HÑ ¸¦Tú´H)áÝK÷1%k­~é-7fÅË®vêºðö�æUÙ”Ú[ý&áÄd�E«à$”bTp÷G  HûGÍŸ í·®ÖŒÜþQf){¥™Ýš9I:_±Âõ9v^xó'ý;?jù¿%~ÆUbï¾ƽîçÅþï}ø¸ÿŸ½s‹�ªŒ¢ðƒ•`©@J‰ŒŠ��cŒÞML|1>ŸE_x1’hx @33m-u€Ú‚”hE¼T -—x#˜€dN§7.…Ò©”«¥·ÿü3'+gçgFŸl×—¬ìBx8™!™|Y{B!„B!„B¡ ku\hŒ´�;cä�dS@ªñ³ZEIÄ -€ °ö­¼Ê“7¾ì—ßoÈ®Ôy,Ùë·}°Î Oßý &ùcgܾ¶²gÿék²êÇŒ´õ^•å{ÎËôõXýæ§`ùSëa"he'¤OwB@?Nùãϰæâ’?Xÿ† õSâ’?ˆý³²wHåÂÍ�@�õoA„Õoë1­ü±"ÈL›î™÷×¼jr¿ä„B!„�ñð㾄�ð³B!„�¢Ð¾ÌÆÈžóÇ"ß÷ÿm"&VÙ�’?vBú`"�>hÿÐZ‡Zg‚)•‰´|p0#½Ã£Rõó�DkÒFö d¤�¾ùƒÄTû'¼ûÓÞwMæÖuÉüd·ÄI‹wY^ùü´”áö�^ýfßcý›CøÔ¦ÜâÇÈ- @hþ XýV� ä…7_ü [œAû§2¨+H Æ.)ù8%S—µÊ¬y› �tëÂ�ʧ&Ÿêìl7y„_tB!„BÈXÿq_Ƈ@ ü¬Ü͇@!„Œs´?‹ìØg„ψ‰@þ@å^kTî ä�Z§Û?Ⱥ`ÔuKÃoÃr2sCÞl=/­þ ÈÕúñ' dÐCùõoe OžÙÑ'M'.ÉÆ#eÑ'=�ö@!wjuûÇä¿Ëwë§©÷Lì,bõ[èÚ7÷ý%€ }”jÌe‚ÉÄêcrïKŸÉ¬9Vþ%P@©øò'7‘hõÍŠhbCE´ºœ_xB!„BÈXýq?ƒ�ð³B!„�PÔ>ÐbdÏJüRª@n9nþعÆ$+zr�ê° âÓqûç…m}ÒÑ{M2×ÿ’{/äP^Å ‚ÍÏF5€ €Xý6µÆ“¥_Ÿ•]é+òîÁ 2û£´ø- R$Dü ùãg’HŸâÖ¾}XŒB € ~ìLæ^cªÙþ¹Ñ­¼G¬ü±iÊeÒû‡dÆã ¢×¿iéƒ÷Z¡ TÍ&q±"ÛÌ üâB!„BÆÚ�ûøH�Ÿ•ù!„�q(€:“FöôD¾; ñ.€ ~tH ¬Ë·ü ¤n…ÊÿP¹‘=GF¤ëâ¨l>:,ó7u׿ÅÐþÁÝŸœô™lb§jé»?÷ñ³bÿ€|ÑyY–}Ó/ÓÖ«ÕoêÞÏ-Z?6�?ˆCþàuXû§Î⯱îß´\·¶8ÐVL 4€œÍHŸüT¯Íß){«]fί×ëß”øÉ¥kà¬ôñ'’Èæ„É‹üòB!„BÆÒ�û'øHŸ“R“|„BÈ8@û25‘¶s¿FZÏÜ´òÇÄ%ðúœ”Ö÷âæO¨üñ�5ž@�pa«ß¦ø³ÊOÊNÿÐk-gdÕ918"+ ÊÌšt°ùcbePÜÆŠ;•ÒòñdáÖ©:<$›�˳Í}2k߇Âí$D% |0mÜ·ÜâG7ÔÚ7¤ÓÑúQQ7n±ö ¯›T¶uÛYRR¦½¾[*çlPíŸZ}û‰Vç㋟x> ™1;žÍîŠÙñ¹üO€B!„2~Ü/æqRÀçd!„2NØéÝndOƒ?×#­Yñ£âlÿ@Aú¸îþ`bõ›nujäZÿ¦£Û?´¸ù´•=�&{¤Áü›¿œýS–îî—)ñ”¾ÿd.€¼| ƒžßyÊJ Õ‡2òð–îœøAûÇN-/Dþqû§™ˆ ùcghóIb¢õ“v·t´üA €”ü±irÊÌ|{žûÔoþnÿSíÍŸ@²(–ͨ‘@kÍä½TB!„BÈÿ˜CKL¢|$äsò!„2Ø‘z:Òœ:ùªOŒ²q òÇÆ_g„bߣùƒx¤²Ö ã—deÇ LUò'lõ›@K¬Âª·—›OI[ÏUiñ.Ë“�½ùõo)�ܽ}7TÊ�¸Yöm¿l?yI–·HE]§àþÄ&„O¡ëß´øq ×ýŸN÷ݤÀöOº�»?�>�?êþä�?ÕÚ7·ÒÙÞ-w½÷“L_””ÊØ;hË®ª\sŸsû{ëVs«ïR•¾oH !$! B”GãPÀg"êCy ø@PŸ ‚Ò¼¨4ôA*@$¤#M¥#M%•ªTßÞþœ=ßõŽ=ÆwŽ9ή T%óËX¬½W7×^g§Nqþük­ÿ sÿü…]Ï ?–Lø™q­�€,­ùÀ¶™ôK3©‘8$IòxRä$I’$IòcdM.AÒAü)€U¹I’$IòäE>}÷ºñç_ý:pJU! :ÖÜ. °ê¸ªÕ¥`e0ØUðËgÏ碵ý¨•{‚ŠÊl¦"U½òíÍüü5[ùêƒc|à’¥üþ#,éo£nÒjq„�ɶò¹à­×í ·)¼÷ü%\¶v€¦`ϋ͇ŪT0‡«7 b…A;O=Bíü»¦°J,¶5­™�*ž‰“–²ûÍrð9Ç¡Ý *,–*Š> ve,> |oFº ÿ¤H’$ $I’$IŽDŽaîî\†„˜£€þ\†$I’$yò!ÿp× üã]ïFu£¨¾QñjN€Ö €:@¬KØCñBˆÀh«ä»�Nð¡+–ò©-gÝü.±ê!H<¯ª|ª,ùÇ»öó³×la¼UrÕ•+xÍ)Ãô4Ô„’{8‹åÙ=Yò‘Ûöòñ�ûxë9‹øƒóF8e¤ÇÆ­úããH|­rèÂ‹Ú ƒJÃuˆãcs°†jY€Š£¢—G-Ùk ¶V–v‰6Œ^| »~ëÙLœµÒbªÓî0a¨Ê-^Å™À†èÓK×¼?ÿã¹$IRJ’$I’䈢 ŸË�sr.A’$I’<¹�¿ß(3éÕ¨ÞüÐ  "(âÝ.†h�ëD§oT†Úxþgwë‹*Ü´u‚sÿn÷ï�æß_¹†·?kÝEÁDÁ+bó2g Êž‰ü_»øÕ¯mãiK{ùÔ VpÑšÄ1Ä‹?øÙ[±¹}�Á÷˜äË›FyíIÃüÚióYZ9Ž´zЂ`aç )*~ÞU… ˆÿ0Ç�GÔ·#œ“!6°Ï4x½jQ{ïTlÜr¨—ý?{&{~åYL¯Y= ðØe¤(Uþràž¥«ÿô�3BÐ@þI’$I @I’$I’)œ”K�Û¿-–çB$I’$É“¹êÎg z=Â'V ÂlREPgÐPìP�-"^ ÐØ=”+^WQ§±ìŸ*yç†�<ç昅Ý|û5køÙ“†¼‘Æ.|xµ$Z9ŽT¬•À}{¦xãlã¯oÙÃ/Ÿ>Ìÿ½t)ÇÌïÆ‹ã¨Õ[ÂăînaÙHAÙ׿Û�Žñöëwðèh‹ß=g/9fˆþf"�uÁ¯ƒ2Q»ö¢†Í_b±GŸ�ؽ³E}#ÑÞ!51H;<‡ïk:’*¾Íôêù3"Ðù³bP9܃Ìy8õ¯¤•ƒ¨èÞ¡ZÞ1#]˜¢$I’P’$I’$GÃlØuL.Câ8+— I’$IžȧîX!Ÿ¼ýS(×£<ƒRA�²Ukg× X]ˆÿÑ]Í$±]Å.EM„À ã®�öLóšk¶ò¦k·ó†³ð…—¯âì½ J…s“ør»TÑp~ß|dŒ×~y+7>6ÁŸ]²„ßxÚBš…˜`á|?±óÇ8jYAQ@ÙSÒÕ„ñ–ò¹ûðîv²¸¯É;ž±ˆg.ë¥:¢âã`¸3tT,9§Ž{†AÅy�±\ü:áJ5˜³Åèˆ*{N·E\ÄÄY«ØýÛ—2zé±hWˆÎa²5²máâ9rð�%«ß÷Ç3©'ÿ„I’$ $I’$IwÎͳ€Ìý³ XŸ ‘$I’$G63¢O¯|âö·÷"ò*ÁÎÞqB±zu÷b¹Zp„g똠X‚Ø\ò�Mc<ïáŸï:Àß¾`ñœe¬jâ\EâúšóÃÄÅ‹@“måÿmÜÏ/|y+=Máä‘n®8z€®ÀF$**!¢« V/n ¢¬]Ö€Šãm>|Çìù@<{U?¿uÖBÖw…-î>rë¨#nÝÕVXК>ÎôŸAäÄ*«s�ÔªBDqÇÖEðí,ùçÑî£Ï;‘Ý¿u “§®Dލyì3ŽÝAüª7̈@ÇåŸ6I’¤”$I’$ÉáL?pv.C†] àü\ˆ$I’$9âÅŸ—)ä]¨  msü ÁoRªßzˉ=�p¢XY­øãkl[0¡V?]*ÿþ>.¾êöM¶ùÊ+Vóëg/ § A}' DµBTÅžuçxÉw?Ø3Í3—÷ñÁË–rβA]oü¹Fë–6(P(V/)h‚RuPåž=S¼÷¦Ý|gë8¿xÒ0¯>a zx—KÍÂ"¡�"¡�¢XBèL_ˆûEíL¼qÕÆö�$� F_ëç�¿)ô³ÿÕç°ï—ŸÅôò!è,òÌ™‡¢�³LN¾µdÕŸœ™ê$I’P’$I’$‡3'³a×¢\†§<§ù I’$Ird"ûýÓäã·ý'íò3”ºs¼XB¡TP¨êM‡)Ä�ûS!X#û(O_ÑËW_¾†·Ž;ëÅâ©(† ~düs޶JÞþ��\}ÏÞxÖBÞñÌE¬jÆz˜êlên +Glô¥» V-.ªx¥Â·¶ŒóG7îæÀt9ãZÀs× Ð]¢ n±,¤³ 9Äq4rîÔÏGÂ�l�¯-Ö�kÂXCÄ…‰ûùŠé£GØûæK»äX(/àV.Õ?êÜB¨.Vô?gD ü�¨’$I(I’$I’Ã.Ë­àžÒîŸyöO’$É÷g·X”¹ëªÎǰò—íŠ F4ÿ¸ÎÇŒãÖ6Žõ�æQ7×úµ‰Ç ËuŸI]ùØ­#3éÃÀÍÀ³‘ª‰R¥h 4ìÇýB T¤TBô‡"¤ÊQblºB}h±Ò»wOòêk¶ò®ïìâÍO_ÈU/\ÎÉ#½áü,W[Õ8RUõµM£¼îÚ­<¸wš<{)¿xÊ0ÍÂÆ3��µK4 [_A™ÝN$ܶlVhúÜýùËïïeí¼æì¶pgŒô nþµ5Gm¼°�‚¹´ã¹?ÖAìæP…™¸µ` ƒz%r,Emâ­ïÄ呵HÜ\Âè Nfï¯\@{aäþ1T©þÁæfå‚ +úµÅ«þøyùÅ”$I @I’$I’® —²a—äR<å~@.Ë¿�&I’Þøõm,îoÎn ÷ܵ…9Gš eÕHŠ }=°lQÑQÝzl¬ÅÇîØÇç<ÀekxýÉóY9ÐÄ&;mÄ×!Á¹?† «â…�øó%h§@<¸Š¯~ë7‹#Nµ2â2/øaL¯[Äžß¾Œ©“–S‰9Ì-W F§øìŒtF~1%I’P’$I’$‡+«�sržR?6�ç½¹I’$G ±¸Så`¹¿nX»ëo¢ƒÇì�bí¨rB‡Œ+Wâq ×¶Àæ#.˜°UÄJD/¨3aÇÊ|< ú ñ|­Üƶµµ¶þyJ×ÏD¾»7].SÓßÕ :;·'þ¡ºô唨#èãõBj°µšC, †G:óµ“måonÝË•ÿ¼ÞsÑb^sÚ<º›…;ƒH±s¬¬3&Ò¼÷†]¼ÿÆÝ\¾n€?¹`1'/ê`ÍâÍFôr+¬[ÞÀˆ/6îžâϾ¿‡�{&gÏzåñC vø~*ÁÜ [J,þX™:'�5v�b7R€`œv R~ ÷¬" JŒX|üb´»Á¾_<�ɳV‡îLä1ÑPí^lä~T¯Y¼ò½Kóë)I’€’$I’$9\9ƒ »ŽÏexòSýèt10’‹‘$IrDSE'ÑÄ•"‘õw¹]Ç1´ºn¸zܵ†¢�!nž¸y µ?A#n^þ™vßqn…‹#n¬Òúë_—â’b±-®�÷¦ãäî‡?/È—P=�¢7JÔÄUð‘T-•¥‰B%Jˆt*$~4²–X’Têñû˜mks÷®)ÞÿÝ=\vÔÿòâ•\¸ºAlLU¬›vfÀI�·ïœä·7ìàÚM£üæY xËÙ 9qe†"A@…áA–øy�øÒ*•ë¶ŒóoäYËûùõSçsþ²>š…ÌÕd¤N%³Ó� Ú°juq ‚µõã‰õÇ,<êã{4>#ÊŸŸ"X�_S[Š˜B8ðªg0qþz›‡*ÅÊCDV#ò¹‘•ïéɯ¦$IRJ’$I’äpå"6ì:!—áI/þ\ ¬ËÅH’$9âÑ·�zѦC?:.¥…|L—0Ì5 6V§� âD©8ùçÓ`îÑ3ÐA¨R¬®áê#L1‚؆¨\{•û6Ï—;z_QêíÒ.¯Uh—  â]>˜Ð£€º-¶ ±†ÒñÛ&NÂmàìtÏr‡…ÔŠ;#Jü†‹eNax`߯þâV>|ËÞvÞBþò²%5Ü…Dn dG#,k—ʵ�ò¦olg²ÙæEÇ rÚH/ ÄÖÜ-ýº•…û„ Q\Œµ”ÛvMòÉ{ösÜ‚nþçÉÃ7¿ÛÆUSaü3)B¼½^¬Ï©k+B€…Sß׫Dq¼Xµxø9+ˆÆQŒÌym´|<—ÃÁŸ9‹ñ‹Ž… uow( ùzÕóù`~5%I’P’$I’$‡3²a×I¹ OZñç9)þ$I’<)ÐÀ%Cè^ñ†]”Y2®Ìâ:¬Ì‹1±Ë¦ƒcâ¶E‡5 hS8w�º¹¸¾µb‘Ôq‰Bá8Þ•åÓ®ý…ÜþÀëebênÞ tHY¢… ª5ŽÁ\?v¾ euU=R#ÚÄ2¢qÍAâÔ·Úu¡}¥Š‚‚Š��Z›B ( ,•/>p�v3wìœâ“W¬à-O_ȼž nΖk�CIª4Q–Ü~pœ¯è�E‡-ã4ê$jÊÕmÁ¦îÚÏ»°<�2jÖ°F¬²dÂW0~ÜOg„Ÿ åÑ�ßø"‹)Õ‹0nË7»v® øGvLRs 9Lĉ屪È*´ºV@Qlœz¡¡§!üÔ±ƒ,h†ŸŠ¨ ¢U‘س}]ÂòùMš èjšX0ÞR>|ë^ñùGékòÏ/ZÁKŽ¢|’UvÈ¥•‹ º°ªä›Ç¸qÛ'-èáüå}t7¤Д²õ+ �Xø'#ú�îÎÝ“|øÎ½Ák¿¼•¾w?ï<„w]°˜ƒM§¨Ö;VV-jÐÕq‚B©Êýû¦fÅ V.ZÙÏúá.  `Ý !DÝⷲ䚇ò¹G9ea¯:vkØk"uîŸ`‹8sá„ýDk¦)‚½·�Ð'Aû­ú†Ñ„Zw“ FÝ6sžrÑ_s^(T &$ac"È\w�Èf\@åWT’$Í\‚$I’$Ic/aîÿåÈ¢4;åUR ´kråÈâi̤|…“$Iž. ^Ž]Ö.xb7NŒø6–‡ÂMé]H~ ›�‰ZÁ˜Çóøþq»"–ãÄø¾v_úuŽ>#¹ù¾ŸGx·ÀJÔ…Q5ѧ,¡(*w� (ÙêѪŸ(³÷í6ˆ@£ª³±«qÔ=ŽJø„ñ½Wü]¬<äÖm“\yõf^|üï~ö~áô)Þ~ÝîÙ5M5C½Ý…ÉM¢`ãκ‚F§JÆ[Šº ” ×Ü�¯?2ÆkOæcÏ]Îgï;ÀUwí›m¿Åæi̺*bÑXÁg¾?ÆÓ�íâÄEݬèâî}“”K”û†©VµlÃÄv ¸ytš«îkqòÂîÙó�¶ŒµÙ°uœ}Se­×Nñ1m2a_Á·h³w¬‰ÆZg1F«¾Z».çP%âx.L�°”‰s×Óû�û1±”xû·ª\ïzÏ¢ï>ÐüªJ’€’$I’$Igz�+€;�€?Yú€�*õÍPàyü)©Ä ' M£Xjó“e>p!°,_Ý$I’§eඉ(:ü¤[×× =Úa+¶2ŠÝ1Žõ“ú¶ÖÞ Zvô­yv©t uq¢:,!‘[~píöDä<ûáÜý-•@ƒ‚‰@�Ì¥Î}!@Õ±q ÛÂÌÊ ¿éžÃU„ÂPÅ�ÕD1ÑÃ�½cØ2ð¹{ð•ò+g-àšŸYÍÕwíç/nÜC[¡«¡h©4 ¡T¥! bƒ °l^“‡ö´ÐHãT88UòW·ì™ƒþçéóùÔóWð±Û÷ZÓV,(*÷¨j•ÛüµoðÈŽ’£W¶ùîô8K» ›•CMö­Ÿâúû¦Ãõôe Ä… wìžä¾}Óœ½¸—Ÿ;fˆÛvMrãÎI¦J¨—=‘Cü·%~¬‘ÌÕ‘ß¿ó¹>j1«ëx^õ尿g�â¡8áÊ…Ñ—œI÷Æ-{Çð��Åqž Ͼš_SI’P’$I’$ÉᎧG×�ðÄÓ ¸Ôüd(ªÔEg¼ 4Våå�a~ggyvS’$ÉS‡Ò‰/¥w×bD½&8$hStpÅ.%ïòÄñpcH8žŸ“Å?W®ÄÏ×+ÃÏ)ˆëæes—ÛXÆäô»¤ÔWQˆÌùñÙÂVÂŒåE5kE‹ð+íǼøã… U÷T‘ôe7v©Î™bãx46…íý[7>¥üéwwñO÷ñ¶óGøúϯæ#·ìã_p€v ¥(…N zÂÈ@ÁŽÑ’�j>›öOóÖëvðŒå}¼á´ù¿ ›ct±m¢ ªsž±ÖVîÓ@ Û­ï±ÝŠ ­6<¼ý¿E ‚mcmvLŒ³f^“žÚËé勎rpºŒE�ÕW+û &Û%ßzlœ;öNrþÒ>^yÌ×oŸàž½Sæ¤ñ‚[ígaåzèíý|k°6æú‘hÜ€¹” ˆu©G\îEÊÞ.¾â†>òMD�xªŠjI€Õ£ˆrmº€’$ $I’$I’#…AàùÀ€ïüètcâΖ™ôTi!sŸ#Ùµò£³¸0ÏúI’$yÊÒŠ@ŒÑá¨v¼8p"qF]?¢q�k/®„cûv†››#.S;x¾x,†¨]Ÿ Ù¼£‡Gw½Q ùJ²§t¢ Š•9GPYB£@JÅ;´Q`ýOÕû!{î= >þÖT� Aˆ]nŠêëEñg "ì™TÞúÍ�¯7êÚÌ©Œ7†�ÕóÇ;ƒ‚:jÄ%ä{÷¼�Í;oÕÿƒê…8qG«ÑÕù“JìÀy@§B !Þ®K¡°Bì:>_©A«~sEP %:åÐw"³@•®¢ ¿« Y(¢pëöI^ó…­|zã~ÿüþèÂŬlŠ:P¡DY1¯AQÄoºbóV”iU¶�µùÍong¢­|èÒe¼üø!zš…TîD@@DEPàÑ]%“-Ì> �îT{V�‰–ro{œ�mÜÇ9K{yË 9~~7â�?…³äˆµRkÍÃ[|oÇ¥ê¬tÉò>º ÿ9×K¿€D‰ïlšjÅ{ŸC-¯ê�Æi†‰?"à)Ä•‹Û:Î&6ú‚S1'ž9jÅŸ*>oί¨$I(I’$I’äH¤8øyà™À 1E%N]‰çUÈR '·Öc>ppfµŽ'+€>ˆ©ê¯^¬$_Ç$I’tbÉ,báÅ 9å×FÖ5ÆÄPï­h6…ž†‰*PT�pÍðòk¶°ùÀ4½|9¯;m>ý]‚* sŸ«»),lÞ4böO–üå­{ù_×m猑þê’%<ÿ¸>zš€Æk¦Àƒ�•x™ðÁ-%*su‰¾nïiñg·ìá�Žñòc†ø…†ém`mý4Õ>q‚Y qªÂC§ùç0Y*/^;À‹zh6ĉ¢QY-͉Sãþq/‡ 1ÚÁ;»‡ê�Fâæ!âÇqíó™—Ú?6¾r)èêüŠJ’€’$I’$IŽTšÀ)•#èÙÀ ,©ÊÏNV¹\µk9 <½Jë°u[ ¼¸X•Ë•$I’„. /à\«¥7Pä°‰$kcq½‹NÚÙ¥csï îÃ�Ï'+zF:ˆQwnZP|gã_ÈøÔw.¶3AÇC© صoa¥˜3¨T¤ÔÙ\MˆEõÂ�‚Æí¼ò`«ìñÅâ/m¨Xòã+*JWC(Ähå–èàtɇnÙË®}ŒÕóºøØåËYÜ×`º„†bA 4èï¼s©Žö·ø½oïäwíã¥'ò¢£‡XÔ×Àô4ÛoË®’ñ)Å?è脲}�¢€¨í¶·~¥ 7lŸàOnÙͶñoo­ÜV+sY’$I’Î}#NqõÖ‡÷�JÔ;¢¾Vo„ãÇý|½ÍÕк-Ül7ߘC; ]»tß¾óWfò;Eõõˆ4(b‘Å\?¥ØÙ=ê¬�¸1*'�˜;'ŠçWÅ×;ÁÉ-¥_u vÐà“”¨µhU'4E(Q E{>EÄ^äÍû§yÛ†¼}&­ìâWO_À± ºE0-`Õp“¢ˆgûÁÌËqÿÁ)þþÞý³Ž£®àY+ûém "Öù�m%˯l-ñAæ ‹•H3{П߶‡E½�Y7Ъ¡&E$ê©[{�Äϳ{²ÍW7�ñ½�œ¹¨‡ç¬ìcaOõ7ë {Û½ðã]DBD:ˆ;8–icÏ™ qLUB4‡lë7 ª`ï¿Ð^6�É3ט¨úÇ‹«Š""æ ³¹¾F)Ó±Ÿ$)%I’$I’‘ôË�£«|X< 8XœKôCѨğ‹�3�‘JP[¬äß%“$IGÛ9b:‰<^Àhx1çÝCâ ⺄âxbýä5NljE~þº^ŒÒàù¥¸þ®K‹;ú®”ú~A Ø�ÂE�ˆ€ =†j°mUHp�!Z9‚�j•lÚÞ T/Q!n~t@bñGq8W‰£@�6Tú™0›€­¦jë9ÙV;Øâ?ㆭ|ûÑ1~÷é‹xÓÓΊ)Tí{º„eó¡šË’ö1¯iÐR妓\}ßš"¼ô˜!N^Ø�ˆ°uw›Y÷Oì.aÏ�M 6,ÊúU»&Û\uï~¾üð(뇺xý‰óçºuDÀÎBPBÄÿKioëã->?3þ–±6—,ë眑zBÝrà_{éÐGéˆÖAëD‰n­;gH5ôúr€Hôœ{^ÑäÇ`CY'LðÁò +;8+¿¢’$ $I’$I’#…;»f0T•yF€s�‹€ã€y¹tµëº8¸´ÊûOO%¬�g)%I’$Ži¼3%I>€tÎ-NÍØÖ.vyG�±j·‰+n¼÷èâºÛ¯–©éÏ œ`RœB…”%” €Ø9=&ЈU™xÁʼn66kß¶ñÕúÏ–›¨: \)4U �™(F Z‘«·±Tµ{7E±Ç¯žßdÉöÑ6­@P…¯mãŸÙ̾‰6ï{ö~ú˜Aº  ‹ôw (6ð\¡`Éü}Ýb[ºµJ¾±y”kgâ5¯‹+�` Ý …µeá�-%þµ_4†Áë{l±aë87ïœàåGñÒõƒ ÷4 j%`ŸwD¤EÙºÒV¸sï_Ü<Šˆpùª~Žîr)·.5¨�%b)vÜÄ便–üRbxDjËU°¹ØÄAu®?˜>n)íE&ò¨ÆÂ•í�ç£gç×S’¤”$I’$Ir¸ÓU 몼›Ccp|%]œ,ο Aµ†«�³�çϨ„µê`X[�1äöI’$éRïV©6$¨SW¥ÂÇê ©%ç ²$êrê:¾o¼õ]�ƒׇH’{7n{·¿QÚåˆ`€*/Õ •Pƒýpl©Ô*•U{7=Uðáhì’ª-X[‹ëb·K0ÑÈòÚ-äü2kPãßB÷h¢Ì&@«¼@(µ´¥±y‚Ð*aûX‹Ñ©Ä©{'Ûüþu»øƒoïäøEݼçÂ%4Ê·žä5ÇÍçwÎZÈŠÁ¦û,,ß±W98®x›ÎúÕvŽ¡0{>Ð_ݱ—ÑixÉÃ\¸¼�®B°¹wÞ¬QÅÊ 4ÞVnØ1Á†m¬ìoréŠ~–ö5lŒà³Ž â¨Ö´'üÄá¬_\¦‚!B×ê�HüQÀÄYÜPSÏX�¢>V|.:ç”óóë)IRJ’$I’$9\éVVÂÏ| ÁO_5ι•àñ4`ÐÍS‡Áʽs>ð\à `9Ðü×uyµ¶ RJ’$yÊ»€Ϻ±kï†ñ"NQóókÔž·P´U ââçÇŒçÜGåE�CÉúŽNÅ7n{µ<²ó6i•¿�jw%ôÄ?šâä.ALô‰…°Ü‰=AÛV®TD-¤* îsè÷þR ¬�ç�·†³WPT(N_ÒCwQTš€­‡´J”ýSmv�—•ÁIP‘@Ÿ¦ÛÊ÷¶LðÞïîæïïÚÏO;Ä[Î^ÄÑ ºX1ÜŒÝTвd¨ ¯r ¡j Ÿß8Î[¾µ�‡LóÎgŒð3Ç Ñ¡êbI±³€,ËC/@¬±�µJ¾òÈA>~ï>V 4yý‰Ãœ´°ÃI¬ÖÕ!s2>Ð7çî½Sœ¹°‡ó–ô2ÔUàÝ?¦fb P\üè]rmį¹b8ÚS»äÐ�?„ˆR¡Ö_ã>ç® ¶‘³s�l!¬\lÝŸ¥ÚοŸ'I @I’$I’$‡=À ` 0ÀãO³ÿÌJ9¿FyrQ‹€“€K€‹«ë…€<kº˜J¬K!(I_úçÿf_®BòÑ 0±`R¸6JŒ`ˆKŠõ¯wá¶mÁXâÆ:ôyù²¸½Z<�õ+¾uǹÅõw}SZíŠêk�u@Ü=PÆ?zƒs¡”¥sØq·÷ã:XûÀ�c}oßq jS‰Q§ ô7 žµºŸ¯¼b5ç®èCUPUÚª¨%ìŸ(oUÁÖÿ¬ ÀžñrÖ%tó¶ Þñí�ܱk‚7žµ€7�=Ÿ5ÃMPçqÛÌ­^Ô@,† S(а}_Éè¤2ÞÒÙ³�Þvýö h®Zò80ôvØ~Ͷó Äõ}ƒ1"AƈÛ*F´u~ì°m,<•�ƒˆÇÏK™šþCY…âœ<…Ÿµ¹m¢§Q;¸Dm«71áG‚ówT±xêE£ªŸX™n01‰Bœ¤V9Š<&y¬L4 �¸NWˆ 60mUöNµyÛ7vò·ßßË;/XÌu¯\Ë»®ßÅ¿Ýw[V±g&~“P`÷Xɼޒ¡Þª%{è@‹ß±›e==¼ù¬¼pýœ‰°`  ¿[u…"ÕüÜÞÆÇT»§üç–±Y¡æG ðö³ñõÍc|õ‘QÞ¦½J0�GX»îDi·Á‚¢žƒÓåì–pßß=ÉEËû9yA¶�óàþiïHéx6ŽJ¨îÄ êŸ7&ާ R£%  .¦Xß(Nˆøzñó¶`‚Q˜xë©@6´c[Uõÿ^§”$)%I’$I’üD„�¥@ß“à9ºó㬥X ìöæ�ÌIò„ ?K*qç¡3GŸ¾üðý\ÁäGdè ¶PLÀ;h¼'Ä]`ø6.oؽÄ Ç úJÝÖs¾Ìîöþy´±áöÓ�øàxÉRV6Y?Ò`_«DDUA v(90®±ØåîGÛ%W߀붎óÒ£yÇÙ‹øÂ惔å´é…Ý]ÊêåÂC›Õ=ƒ¢&‚„oñ¶ñ6ÿôÀŽî梥}œ:¿›ÝS%^ ‹ÿ ŠŒYñ‡¯âj=±K«j_à'¿oâ*íU®qÿ¸q朅e}¥¯ æÜutpaA¹ Ÿrá Å®ƒÄACa( $É3€’$I’$I~ì°¨ò ò§°X ôär$É"ütϤ·÷¿‡Î³�›�å�EÉãÀ$±ˆb¹¥Pìš*/¶vMÔ&vù6ñ|,®r\Û8®wôÔ NÅ­÷/m|ù{”ãßÕóÀÜ%Ö2<�Ç(¼ÇŸÑ&Qåe âêKuçö”U'ê¨úûÙ¤�ñ¢6»V›«¸6J…¿Eçê�d§.�? Å´¥ *Š×nã’O?µŽò?µ’÷={ Kú ÖÏ‹~äé¶ò辂5Q„d^ƒ¿»s/¯û÷m xÃó9kI/ J P©Ü?X47¶Žµøàí{ùÇà²åœÚ×Ç`W1§ÝúU ÞÍ„ ¨µB¸gßÿ¶N´¹dE?§,覷i1"™UÔ\aX ÅãÕT”Έ%·6î=öïG,)ñÙ</’yTjβñ] ´¢h´ý›�ûNKGò+)IRJ’$I’$ùqÐ ¬­ ÉåxJ¿k€‘|’äq~d&] Üü)0�Žøeà¾Ê Ô•«›ü�L›ÛÇ 6±g£èôS½»Úùq­¼FœßÏ÷µœÚ~q?òØž®Æ—o|“lÞy“´ËW¡(†»ö˜È€‰BíÄ/Sp«˜hD¼í–­”9wì… Ö×ÿ(îcX½ >U½„ª6¹ŠÀPjÌQb1½²Óݨ; Q+UïèPÁZÛ$vŒ•¼õ›;xå·péÚ¾ôÒÕ\¶¶ æ®èÜ© <²·MY*"غ ³Û¾� P(›¶øä]û¸yÇ$W¬äÊ™4\=ïCÛÛD¨€å�%ÉV©|å�1¾vß$%pÊÂn–õ7Ö¯ÆÄŸH@Qk•ܼs‚¯mã¸á.^´f€ýMÐHkñKh´ ŠCkı$ ^ 퉮RݶmR³'î„H,ðŠX ÖDE(‡z@AU­£mý�¦(š;/'I @I’$I’$O ,–¥Û#ép6Po.E’8ê…Ÿ3éÿ·Ï£ž}ÀoË€Ÿ~@='TâÒ€ãrÕGS@›Xì±íÖ¼Hc¨Õ[�å� dÉ£X�ÚFˆ«/:9€ü<|œÆ†;Žo\ó_Ÿ•ñÉÕ£7œ‚å€j° ›@Q@»Õ¹®ŸV'9NÕOT¡,-†`q·œ³A¨ZP+‹·³Òj<Åî¼0Ô’¿ §ÞæÂ{nÅâ“ï b¹ˆ‹®¨Àí;&yù5�òç7íæíç-âï._Î@—`Ã+†Íoº­<²§5·X•î¦pÌâ&¢¦—ݾs’¿Û¸�ý“%¯8nˆ3ö2ÕÂph�Dé¹sSɃû§¸gï4óº‹YGЪ…Ãó × bgŒåˆU<6Ñæß6�rçÞ).\ÖËÅËûê*¬½­�¡�¹/ôçÕŸý£âºEX¸XƒÐ N(Ò¨Ÿ ¨ ÁZZÿè™´‡Ë¡>7†¢(‚8G‘Î~$ÿ/X’¤”$I’$Iò„°aW7°ÎÅH:ÐV¹?y’šðÓœIÕ6m¼‰z�Ž­\=S• s2ðÛÀêyp'ð~`~~ ÉqPìØ1Âsv‚r:Š?†‹å® �Úº„ÏáJ]¹PQܹiaãóßýcÙµÿ[Rê%xt®SF´4ÙA1 ¡ll;¶Bæºp sÍcL€ñ¢�Pµµðm|æ8y¼8bå‚�k¨‚ºúHjS»vXÃá0ÇËœkõ]Õé>¢UnA,³¹Ùs»ènèÏß�Ë?ó7m›àiK{yÕIó˜ßS ˆõqoÍîqeßx @‰V!P‹<ÙR6lãêû0¬]üÕEK¹xu?‚‚É9¼Ö²÷ìÞ£­’{÷N±e¬ÅÊþ.ž}JCv>�%?HRâò{÷MóÙ‡F9Ð*yÁê~ÎXÔCW! ‘\êŠ;좇K�‘Ø„â�*!Íǹ‡|ÐÂú†Î…¤€ ýÝA#Ð9B¬�$@:€’$ $I’$I’'Dü™< èçÉHYÊO,=9à(6ì:v&妘$†.n>,¢žog¿ ìÜZ C”Î4+ѽÀërûÆ„C€ÊNÿ�½S v©k¯®½º1�Îq‹@tŠúA×ÏÅ90Þl|á†_’»7ß(Ó­×M¼S¬ U�v/3Õ5®Î9†\›ø¼±íÛœˆÆllï 2áÉÄ++/m¾¢J•©Oê\+6n£@ô†Â‡Ý}�¨ø²x=U7/A«Ü3ÞVþêÖ½Üð؃Ý_øéU¼â„!š… ¨òàž6Óm«-DÀª)DQŒ÷´øýïìâ¯oßËO¯ä=Ï\̱ó»QqCÍÛ¯nQïÄJöL¶¹{ß$£Íg®êâ§ÖÐß~g6»™Sï™RåÆ�“|qóÃÝŬ´n¨ Áð› ¨�ëQ ç§€Š ˆ »‘Ý „íAñHY禪¯Wé ÄÕŽ[%¤£R*H•Wõâ×€’$ $I’$I’ÇWü™œt?)…�v[På'–Úí'³P´81E $Á ?ëgÒ¿_N¥žMÀÏ·Ò™m• s6ð-êY ü p#pa~: õLâ™>ŠÕk$…íã6±+(î§¾Mìú‰©HÌj|å¦ _½iƒL·Þ'°'˜h•À CÒVÀDD,wN6�Ūê�9÷ZÈ‘†ÒæF!v]gÙu$ [X ZÍ�BñJ­,:\F@öb}­Z ±!E�ÍÕd o¶Þ ¶¦V0ÑR>të^~ý?·ñÓÇqõO­àÜ}s×§Jí–òðžâvû­´3dÎnÚÙà¦íüæ·vð­-cüîÙ ùµSç³ ¯qH"…‚ÅöÝÊÁQ+(vM´ùîôz¯�4Ÿg,é¥áÞp¯Ç¨¸=ø‡-Ý�é’o<6Îí˜ä„ù]\º¢Ÿ‘Þ¦ë¨.Ð ë@æ 3Q’yÝ4ž³‚âœèm`, Ø¥ EM<±2Ëk'BŠ«Sµ2�¶´+³Ìdópeù×ê$I(I’$I’äñNG¤Ø£J]²þíâÇž¨¨Ÿ#G°(´8E $�JøœIï6/¡ž1à'ÿ(‡ÎÍ• ó àê9£r] ¬ÍO+éÀ¤LêÜ6ÔmÝÔ)q™Å5 _Ó&rÅ-¾³qmã_¾}•ÿWQ=‘v#®§:�E�¢M¼pÔ.¡fsÃÆ —/v ‰‰8ÇâQÙQÌÑcCz×�mMg?d[?Å„,;Ïk î“rKÝÕ€y=ÁY–)ñ›!*€ ˆU„˜ø£.�Šøxž·l›àç¾ð(WmÜÏ»Î_Ìû/Zª¡&è\gËîqe÷X ö ¶¶TìSöŒ•PÑ*•/<4Ê›®ÛÎD[yÿù‹g]AÝ"N|‰§ëÛ<°Yí¹«!Úý-¾´õ Ÿ~à§/ìáõ'sô¼.âaM2qb7‹…Þ:Þâ«[ÆÙ4:Í3—ôòô‘úš… 2á¶~5‚‹xg˜¸öP¬¤yÅJІcQÄé‘uÄ‚gèþñêYŒˆÅ:"bcê!Õt%I @I’$I’$�«øs*Ð8DŸ@H©vÚ­UBUªôDoûfqÚ¿ƒHtH¢PŠ@IrX ?ÅLz5p/ð{@õ\¼ç‡C�NþàÇyp7ð‡À@~zI€ZsfOxtIØ6¾W A; Eœ¸^‚øâRòƒ-�Ï~ûËÃ;¯—vyEu�;'GÌ�#`îÞÀ¢— ¥"Z¨ZßÒÄ øG츽=¡â�â�DÊ\§’¸²"øXÔ‹<%‘`âí Á½ë ‹ú@ðÔ—ùˆ(‹*' ¨Ó—Ô½²Ôl+|ö¾¼øšÍ<|`š¸b%¿væš2g�ÚݦUú1l†"°i¦MÄþ©’�mÜÇ;oØÅÉ‹zxï3G8kqOÍvdN áÑ01e–*@Y¿–™¹·øèÝûøÎ¶ ®\;ÀËÖ ² §�b[¬ÙXĈÅö+X–Ê}û§ùê–1¦J¸xu§ž=A£p[ Ê¡ .(±øã›6 ŠÓи|2Ç¥Z®Kxü¿ÇF4—*Õ!t@ÝRTqQ[kUÁÈ3€’$ $I’$I’ÇQü)8œh•Ât« ÝZm¡]Z*K¡U´Z ¦Z�Ù|zz&µÿ»l615ÝœM“SÍ™ºÿNU›©*UדS]T‰©©&“ÝÌä³÷­éÙzª{¦-ŸMSUší?ÙUÕYÙL|ªx3õÍ™û3i¶¾šßìÜ«9Û«gšœ©/Uhµ Êr6ŸMí¶Ì¦rv=$E $9lÄŸs�ë�OË©çà<àUÀ£<>ŒïŽþ‘zz�·÷¯òßÛ„Ø;y‚ÜBv-.ÕUou¾�šm៦[4ÿõúŸ+¾wß Òjÿ†ÒmJ@iâ‹T÷"V.Á97Ì&ç`Q ©…8±'ú‘ÜÅh4Š�µñg» 6®=—µ+ °r{VUP�¶ºOGÀ£ÁM_»Â6ŠCÔ‰jy…¯ê.øÕ³ð§—,e¤¯1wl9‚ÏÆÊ£ùœ,ùó›÷ð?¾¼…uóº¸úÊ•\yôEµ6­Rypç4ÿŸ½÷€¶ä¨î½»ú¤{n˜™;9h‚F�F9#!@ $ŒM²�Á§÷ì¶±±±ýpx€?c?œƒÁ&˜`ž [  (�PÎYšîܹñ¤îÚß�^µn­®Õºg@B±~³öêîêîêªês`tþóß@Kt¯É–2>mt–<<Ýã/¾3Ƨï›Ê�@'�ÖY?\ 'eèüë|hGh{�uk”Z¸å`‡Ü9ÁþvÆÏoá‚ÕÔ+¨Ÿ¿úÃ2ñGÔ¯T(Ìt2ËÍÛÜ»â õcg9÷ÌŒe�¥?á7X]P ›v(CU’ç¯ yáJdQ”òy¨öqŒù}€`|�BD\ ¨ï³D(Ô`¡Õ;ƒDp�ñgàH$ @‘H$‰D"OˆøÓN O²\Ø:iBf V ¹Ð“%sa覕|› =½¼�̉&¹˜’ =¹øâÚ��Ò©:a§š÷ÑíUóýÎÜ6u‚LÏÝkS3¿ßî¾'ï7¿®Ý­â¶î^_×oéº~s1(Íû!M+ù3ó8|ÎE»ã¤´Š»ß Olfòçg^üÁªÐË’�N-ßïu*´ÝµÝN~>ßæû/DµÛµyA§Ý­ºöÚ¼ •åóšw#¹k¼¨ÛsÏ̯ÜADfMªä¢�ºHÝü/=õ¬áʱ•ñËy ?sñÀ½ÀOÓŸ.ð.çÎù`ùÁó-'J½ØKÎuΤ�«ã[Ž8Ú€ HÓå)ÛÏ÷I%G™(h]Aök)`Ìõ÷¬­|êŠ÷›±©ÿkO«¡çÈï[-MÁV@�Ð5”¹FþàïDÊÛ ð‚‘w eÖ�Õ*ŠÃÂ>½ðãöCPšùë$Sð#ººëDÜfYj óô,ô²@- S›- &á›Uü&:–_þêÞôå]üøÖ.ÿÉõ¼d}³4 `Øÿ‚¨¢(‚pýž?3÷ŒKžáÝç/çÏ^ÊŠ¦á‘±ŒnRp)glqÈR܆¢S×*Û§{üÁõ¨áÏÏ^ÆK�jRIÄ] ¤™òð®âº(°é(h6)0ÞÉø�G¦ùòŽYN_Þà�›‡YÛ¬P†zÓZ‰_O ïgÃé³  bóxø˜½è¢ýkÿ„ ·CÉ+ï’]¾‡ìºý0›Bxÿ1Ã$?´™Ûb¼°SŠPŠŠO ’I .©ýŠ‹ò:Bêþ „øs ^}³h€"‘(E"‘H$‰<Žš<•XÚi…Ù^•\È2kèYçîq®›™\êö\е^.”�§¹k‡ÔרɅšl.l/Ávèl§B’ ô’<$ß7ä‘J~¬©Aܾí´›`÷ÕÉãð~Þ6nßõãMMî¹y¨{f’J~®Íöò±ÎEBvx.4Mè䎡dÞa”º¶y(_ƒ„Öáë²Ü”¯™UqÎ)ò¶éN�®s =uláʱ¡øu‹<Ë„™‹×w4éÏÇ»º@S<¹X'èlþèÑŸŸsÂÖ;€F|ëѸ€”rÇN(¼Ð§Þáý%¡.Êî5A?RrŒìkT>{ÕÛÌ}»®•̾«‚bƒš{8- (ebޝµˆ/þGzQ‹JyÁw¬ ú! [؇°D±‡Ã]>™¥8 úç( 8(üy�b�Í*,®Ý7 ^· (Oÿ~<Á½×íjqñgånç}®äã¯XÍÑ‹+ =¦ï9Aæ·=kù÷û&yã%»˜îYþõâ5¼ñ¸vŽg(žGKÜ?¢}D/Òäõ�þöÖqÎZÞàOå„Ñzqòâ•Exx'dV }š¶®)9�L÷øø}SÜ1Þå‡�äek› WMÙxC¯_ @ Ë6u\ÖÃ#Hg¤:hªý¦ãëÿ>tû é%;±wÂfJ�šÁœ:Šyédy½Ÿ{g�º? ÖF æ tZ~dþÁ‰‰eiý9UDÜ>1'k$ H$‰D"‘Çáþ9 XÎSI'Khõ*¹kEÕÕô± ™rñÃ¥9sn¬wòs½É &ó"ŽqâŠÍ£‚u"PÚ«8‡ŽÛÎE7wñäA·]ŒN»Ž‹Ü¡Ó' ×}ùgtjùsÝ8òý¬—�‹TN¨R/L!N "4ËÓÝ9wOÞ‡«TÉ×È­™•\,ëYC×­�U¡Õ«2Õ©ÑzÊ\A8�+Ç*ñ‹y–ˆ?§ß>l¤?·¯ä©eø]çþüýrŽ¥;€WÇߢžó´J…�ñÛ¾U÷%LßÖ'õ›)ˆrŒ JÆGåó×ührÙÍ×H§÷Qm¢áã�YÉâ]:™-Ö¼Ñð_ÿ—9|LààñÃ/΄÷•ï[õ® [þ<úÿÐ.áŠú¹(>‚CaZ9±ê¯#TsÜ3AV RàPf{8JÒŠ !a�EñÂPØ‘äaþíî)Îý·G¸g¼ËW_¿ž?ܼˆþŒ¿ œ\ÆÓ‹û€.î¤?GŸ.NŒŸ†ç, Ì. è„Hžr‰ôÉÿökJûtísu~N¬|ì_”ÉÙ‰r8¤XCGTóÈÉ4_Äû­G‚Z;¡0d-HáE·�–Ü£”;iڂ燂’ª±¬º6ü¾Ÿ¿ïÓH±_«¥«.V§«ûS1ÌÓÍÐ-Eéóæ„âXTQÉCEÃO–—iÜZNw-~í.þ÷GÙ´¨ÊoX϶Ž�ˆ �ž”×=r® ¤¼þΓ)¿uÕ~þáÖC¬oÔxýæa’ÔP†úç,Hø¸n_›wÞ0Æöé”ß>u ¯Ù8H³ ¨8Ü�d¢þ= œbPÀûIü¦�)Wìiñ¹‡gXÝLxÙº&k𠏦ÔדZwb‹J]çk©XŒz¡i`Iʲ--P-Ÿ¤„�ì§Ã†Ù{ýìå{Ðñ.–"²z€ä¢Õ˜CE|Ÿ¦ø}Lg’c Püy/&!ª §¾'¤”¸ï4Ê@‘H€"‘H$‰D¾OŽ„§‚vZÉÅçú êýlf\º³*6ªXª6ÈŒ«ËãŸÔ¹pzyD�â¾sâtÚƒ´f—1;³–ÖÌ:ZÓëçŽ7ÌÅ&fg�ž‹cæÚDZ´¦�›ÛŽãçbÛ\œàbyäíǹØâî;†ÙÙñ9ï³5}86̵¯¡ÝZJ·ÝÌÇ’‡sÆÛ®û¹ä[__(uŽ!“ •ªV©XE­8!¨’¯›K…—¯qêÄ4U_Gi¶WåP»ÁL·ú$ A˸rliüúEž�ÂOu.~É&¿&Þ ¼Hyúr)p ð`œþ\Üü=¿ÏÏMZ€ÄEÁ¾øm¹‹§Oê¶ðCx¯oSÆÜôÀÒÊ'¾ù×f×ø×%ÓsáÃo ÚËF­ê¬âE›Àm¤¾��Ðùã)Š8®É‡Hqø"HfCG��âñ"Q±o#àñs’Ò¸ Wa¤^öž?vO¹4(�©Ç�tÂOB¹æ(Az2€‡&z¼ù’ݼõ²}¼ùÄE|é5k9gÕZæòRv•{Êü�ßÚÕâ®±ßÝÞå÷O[ʯŸ²„ÅuÔý Ê÷ s÷"Í>2Í»ogI#á÷æžñ¼• ŒuÆí�Œ+¨0Ѐc7i_Qã`'ãK�Îðݱ.Ç-ªòªõƒ,o$åI�æËÊcºüE VÈI;†±š�À ‚ºó~ÒÁîªä¨AE"q-cìe»±ßƒNF#È–’‹× ñ*nOƒwбB¡(èúÌ£T |ªEÐ0õ[ ¶)þ;% Hä¹HL�‰D"‘Häñ¸VC<Ù¤V˜éÕ¤Ó« ¨OG�`­QQrHU0ª4$#Q%‡r‘È8¡(A3Cæ„ ÍÛóû°YB–Ž`³QTad15ÄT1¦‚I’ªá©F­ÅÚŒl.Ôö°vt8„©$IZcQÄ(F,&±ˆ$£Hb1¢y›1–zbÁX:Ö "dš�YE T4“ Éï0ƪ(ˆ ³Ýª¶zUÕÍjš÷ùƒg3WŽŒÿ 1òL¡ù#ñrà¯�­_~¸“g©t>ü ð?�„ÇÆ¿¼øcà@/~Zžsµ€ñÇ!aåíS'Hƒne¨¿¶´OÃÁ©jå’�Vçmbd?’ÀÙ�Û”çÒQw½»ÎÙZ'ú(<�U? cÈÏcð£Uÿc³/0áŸSêPÂ){‡~>x—bðýhñšÂº¨âÏãÕc|VAçTˆƒ¬¤ÀÁ´3üš€”·ùS x]%¶ Ï·vÎòŠÿhñÆãGxÿE+¹jG‹¿üÎ;gRQEŸ–K„ðã¬?Wø÷û¦ùÔ=ÓüÜÜ3>øâU|ú¾I¾ôð ©ÕPÞ,EûÔZkg|äîI¶,ªò#‡8wå_|dš&{ 09!Øé脤M•»„™~]ËØÕêqÅËþ¶ååk›<4�rÃ�6­‚j¨}Z D±øáªX0 V`Ï-ƒdüg'˜› ‘Çöú $$g-C�é`o>ˆê– eúð4ÙŽYÌñ‹�c†‹f#Áœ¾Ý4ŒÞ6Žï ?¾³à{B0N E4Å‹`ZLûæç…RL©hÐoq�ÜõQŠD¢‰D"‘H$rä¸,›x²iõ*2Ù­!*djD€Ì@ÁФY‚Z£UÉHRljèelfr(ËL¾omⶇ۫ôzVaÌ Im€ZÕðtGŒ!9T�0 ¬G–¦ôz³ØtØCµ¶“¤±ˆQ'üdn«dIF’Xªù¹ŒL…ŽM$Í„ÌT’ ‹`1FQI°Lwê´Òª6*)ƒÕÞXÖÛã2ò4~ŽsÂÏ+8ò”jo¾(ÏLÆœèƒÀÿ.da– üà7€Kã'ç9Ã,Ð,­ÙSDð;H ìØðšÂù@0 ú¶•ÿwÍEš~§(›ñÂJ1Å™ ˜@ü‘ðGiA¬¢È׌ßú{¥kÝõ‚¿Þ‹GÁ½�¸¸R\Ý=ÆÏY�)¦{3~ X qç%•,E$p3¡ Y5DÞ§·® Û~qC„B»Š>¶%F·E ~.å¤>vÇ$_ºš·œ¾„/¿f½c‚Ä�!M~ ¬{(Ò¼÷¦q¶,žá—O\ÄÅëùç;'¸a_…r4Ø•²´hÞqtÏD�÷Þ6Î9+üô1#Ü?Õå+�Î`÷×ÈF[˜Ä(ª ¶oùÎ�  " ™Â-;Ü?Ùåôe ^»aˆ[Æ;Ü5ÑËÏ-ßÐcxYŠª€(þËo°Xì¡*c4ÊëQ*ýß[ˆ,«“\¸{Xè¹ýt3?©Å>7w�9iIž<²¤†¼p%²c–ìÎCÐÊJ^„„2véwÓ#�Y&8ã�ñ‚tpn¾P,½‰Äp‘H$‰D"GΠú¤Öú9ØjÈ¡võµ~°*¸:?yÝšn¯ª‰ª%]š’æiÎÒÞáH\ú³ ½¼ÎMž&�ÖÌQ´[ç#æ•4š'So® ÚÄó�¤R¡V¡1xÔ\œ•ϳÛ~!­Ù­tÚÃźE]_ó¨×©æ)ò$š¤:lºšXPkpõ�æ"qµƒ ªäï ÍŒLuê²v OÑgU~ÐŸÃøuŒöò5œ¸´Žº?„€k-ÿ4‡X�ËwÎòkWî徉.ï>o9?¿uC¡Y]Â.¿u¸¦B�™Ù¼>Ð ÿx×!V6.X5ÀðL�ÙYP¤0Þ­[3’ ¥H¹6:ÿ½s6w�xJJsТ®S[x £`w4É&ê8ú¿¿)¯ Åtzð˜ªÉ>ÉE«s—�ÿë¾6y} [Ç¡[ìÃ&‚l]„yÉ*dm�ò1¨Bˆ Ò¹yÂÓåî�SÀE"QŠD"‘H$9bVò¤¹~Ì‘f†\üÉr�k%ߦi’ AbÑEÕ5,¹0á"íVÉ£W%wüLoBíÅ47S©Öy.#F¨510x2"/§Ó:‹öì2ºÞD·;ïšÊC{ ƒÒÓÓÑ*v^€K³ êÞ‹UWGIµÐÍk59Ô®çmO<+�˜Ó"òt^|×¥>[F¾œ ü°—g7à=Nèú(ý©owBÚ›ã¿>«±NRÀ–ºwúÿ´kð>ÂLžv7©|òòŸ6WÞ~µtz¿„jp‚�Ûª ÁSšÆ)9|ý±ŠGÁ¸­.Ÿž­(æ„�x¯“()>?T‹â‹pøë]ˆøýªÁ¼úx’×�¿ê 9ÕÙº ós§"g®§ø±[~å5€j ²~Qql³=o‘£¥NˆPàý~h¢óáÛÃ]-O '.œSà@;ã÷¿µŸË·ÏðO­äÏÎ[β�„P@ µ+PúÒJ•OÝ7Åo~kK†÷½`Õ$‘P+Ž×;ÂÔmý(Böµ2>ÿÐ4·�wyáʶt‡i¸¨Q°ùh B ¶PzÁ>érhù4ªP! �Z¤=ƒÞ³ˆ€Âzùõ“ÐÝSDÝõ:¤—ìÂÎÍÏj�/r¨Š9oæü•0R ïuúÀÙ×w£æ}`ÁÓ¬ g.Åœ¿UC÷˜¡[G@E D(x” �€?V´¸±lf$ H$‰D"‘#fÕ“Rëg×ô°L´.µˆAUœ»Ä§Ë]?’ê⤩Ðȩ̈{sâE.üÐi-¡×}!�Á3¨Ôñ˜J5OWx1iïBZ³r(uŽ P"3¹´¤ÚÆ(ùš§™¡Û«äÛ\RC–;‚äp›LtdïÌ ©žXªÀ²ø#O±ð³q.> \œB¶?¼¸‘ç»� s6p-ýYü3ðàüøi{Ö2ƒr´<å[ŽYà§f¡Ü$aÌÕù9¯ú/_ÿªLξGD–¢”;p$H±ˆ0åâ  Öúësün(̸D#A»{f¦ö�Pn$æ ø¾$˜3š‡¬"ù¹Ór¡À¸pxÑæ…0?s*Œ€ææÆïŸŒÃSuâOÅæ©»§ƒ4fþ^Y Õž¢xä"t ´ÂߦåרSøç;&ù‘/î@Uù«Öñ³ÛF¨þØ¿ œWØ7›ñ×7�óÞ›òÒuƒüŸs—sÂ’Zx]¹›DÜJ]#¾i_+åî<Äí;S6hƒ•MCŽM-ƒƒŠgáo¦�°ùÔ6%³Î�#JM#y3ª°ûÖ&ô’Çì_MðÞ…ri8logØïŽ¡—íFÇ:„ÈÊÉKWcNYUS2�®ÅÞz¾¹Ý߆�¥uÌ W"'/�š)ÿÌKð^B7_ˆøXàOòw¡ ¨kâ¿—ŠD¢‰D"‘H$rDéßü H­ÈÞ™¦ì™v®—êͺY…Ìæâ½4Á(º¤Úb@2B×OÚ›‹\ªÑi�HR{ õ�¥ñÒŸZc$¯”¦‡… £èuóµÄ9‚rq-|zè™Ãâ[þ*ª¨5Ø,qn-CæD #äÇí´"»¦Fè¤ O,«ã‹‹6 N —÷…1”ã¬Á÷<¼$DDP4L/èÿ¨�ÿωD¢‰D"‘HäiôCûd§&;§1Ýi�‹6AUò°Ö 6¯+CšV´!™.«Íb,„®Ÿ®K_Öi/!K_Bcp ÆÄ¿÷|BÐ9¤½Ój­ñŽ WS)_ëÜTÁXt´ÖÒÑj Quµ�¬€\ÄS„\¼³‰ì8üž»Už8–ÑÙy2…™‹7÷ÿhПŽþ˜�«˜£Áº´éÏ€»��ÖŒKø¬b ¨Óƒß–ŠBá/öRr­‘‡öV?üÕß5·?|¹t³W€C)bCgM±Þ™õ†]6åb�Šøóü¨-  øçxÁ$mü}ÆÞ âÇ øg¢�CpÂŒ«ÎZ‹yÅçÆñXúШ`^¿ Ù<êúS<âæ€ÿ!ÝÝ#'®€ZR|%ûf‘É%ø5M¼b¡ø×¯a­§î¨ ]0 xvM§üÚi‹ùñã†1…OXá �‹#<'Ü1ÖåÍ—îæ·�óÛgŒò·/^ÁÑ# h¹HÔïCù'<.Û9Ëo]³Ÿ­Œ?8c)‡«4ŠÅÏŒ° Šß›V®¼Ã²k¶Ç@EXÛLòíè2˪ՖP?ò ‚9!©À¦“:åò‡Bææ³âáQÎZÚ` ‹EÁõ<‡bàÛ=І]>:CöµÝè]�)jsê(æ%«‘å )qh º§…½l/z礡»Í Ûa.X‘»‹ÊÂq…®ÂEÃëËU<‘˜.‰P$‰D"‘È÷Ä(O4i&²sjXöÎÓN+X•yÿ$ï¹é ƒUáÝç,ç¼U DÄ­€w˜ .è£m‰?÷Ð£ÂØ„°{6e¼kY\3,¯'œt‚%1 � ¨,¥áúãz4¾&Hñ7öp�+ï±L÷,§.©“”¬�/²�z*Bˆ-Y×Ôbïš ûÚ.tÇ,!2RÅ<9æœeЬïÇ»Ûô¾)ì7ö Ûg d°‚œµ9g) WƒqéßBñJË…fECÁÚ½iÂÚOQþ‰D¢‰D"‘H$rDéßš@…'’Ù^EžeºÛÈ]#ÖrçˆÔ¥›kŸ‹ M“êêÆÕÜu’»Oz‡·^„èt‡I{/``h&IâK{©,¡Þ8Ÿ^ç´[ËpN«¹ÈSïÑs‘¦ u“éêú4uÉ\Ú>ƒªÁæ!äïÖÙ3=œ?1D±/òƒ~VÏÅ¿ßÎ¥?{ñµn®Ž+xD<âj#½¸‰þåRÂ]œ—ïYÁ „ôOG¸_ùµ§Vßÿ__”ñ™÷‰Õ•�©%d6¨Y:iÂûŒwå`5¨Ç¡8 ¢‘XEü=¸¾?_Û‡rQÈB†—@Tµ8‘È�S¤è¼É,ˆÛº6Y>„yí ®O�^·ƒì¯¯Á~ø»dÿ÷Zì%÷aÜ8 %ˆ nB.ØÍŠë_Ý|€•ƒ˜;>¯D=�DÀ¡fal–âêh‰óE±-ÔÔQ¯\,HØ· À%ÍpÞ¿=ÂÞ?Í¿ÿÈZþ¬úgŠt�Ë*–‚Ôr³|èö ÞtÉn×>ý²5¼vó¬y™Ø¢å©×ö´2î8Øå#÷LðÊ ƒüþi£=R4¬—SJ™L†›ù�÷H.6åÏédÊÚE†Wœi0R쟢`:0dYwL@£+ ÈzÂŽ[šôîœìñ�±YЧ)KJ‘uM8a$B)­,O g¯Ø‹ê"«�—®Ê=T¤ü'ºzÓ8öª}p°¤�å Ì W ÛF *nN ¤ž£ 84J>‘H$ @‘H$‰D¾7†y"o5äÑÉ%Ò³ ÖŠXD2kÄ‚¤‡Û2C–%`E—×ft´Ò"sµgçO~ÜnM’ÄZ??PD¨7—Q­]@§}þ\,Î×ß A i7ÉE ]QŸa8i“f‰ôl"™Š¤Ö¸÷ld6­É¾™Až†ãû‰ü€„ŸÆ\¼¸øYúÓÞl> Ä$üß;Wg¿ì§?Ïw5…> ¬ŒË÷Œ&f ÂPDü¶š\{÷Êê?|å}æÁ½ÿ)™=k \ êB„/Òä"�âÏ)q¢øy�x×� D#! $µœ)©ÿãRÄIñ—rÿ�M~ëÆC"Èë¶A=ažÔb¿xö›zç�Uôæ=ØOÝŠ™éaylä´U˜_8yű¹Ø#/;yíVÌ�mƒåMpH"èX‹Üý£‚¨z-GÁ;¥üzf Á ˆJA ߉w›%%wäqGÝLùû›ÇyÞ'¦g•«Þ°ž·ž6J#‘#LýVt¨h˜âK•=³)xÝ~ïšý¼bãÿ|áJÎ\Ñ@…r”"4‡'€[Ç:üñwƸ~›ÿuÂbÞ|Ü"× „ácÜøƒÏ06.ìÞmpÓ`ª«ìke ¬îòÓ' rêÒ:ÆHðYŽ=©ƒ „¦¸�w4èµýE©ª?© aí,‘r X)§b0Û“\¼Y7”¿G=ØÁ^¾{ãAèd€ÇAŽÁ\¸9j�R8ÔÅ^½=ÜG;#¨ÛãÑB›¿ÏàðýøÀÌßa^¸Y>È<™Å~âôö}xÑËzáaÇ$ÙÇo†}3À²e)rê*严ȺI„\üÙ;ƒÇ¯1R.Ù(�5 *ê/ — ú."ø£0]ÆÛ.ßÇk¿´ƒ 74¹ü'ÖóòMƒHè@¡€wA¥ôú<Ü/_¶‡¿oŠ?8k)~Î2ê%BSA¨ü UøúŽYþø†±\Øú£Ó—ò²£šT�P†öˆ¥À]÷ÒÔ5%S8ÔµÜ3rˆ­#U~rÓ0ë“‚SmÙêŒ%+³ÐSTHeÖžHØ{_ƒ€ “[Øýó×Ià¬jVòtnæE«�%uJQWèÒ=èýSX«X�9}󕰤栻ZØoîEï�„,è£fÐ!ç/‡¥õráFK_mèþó) KE A£(‰P$‰D"‘È“â°È¬ÈÇËx«YH¦™M$³¹ëGÅb× LäÍ„ÜUÒKr—‰«7“×¢é´Ö"æ¥4šñ_|?˜J…zãLZ³§Ñíäµ�Š"Pj°¹�×ÓÑú¬d6p"�г‰Ù5µˆÔJtEžFâÏIÀ×�ÏGÓŸ;�‹�W÷Ç|B™~8ø ýþ¸xU¬ôŒ$fJêû$€”¹*»ì•O]q¹L·GD ‚�Û/?´è¤Q‘bê*-¹O5¬R8n¼x¦oS#ˆµÞÁ�©wYõ"†úv?ŽÂœü5E*‚(yô•ά"+‡�s×{ÙƒèŽ ß�«Ûƒâ™h£Ÿ¼•ìŽ}<ôÁñ@ü¡(„ù¹øq;²!*Zx/!‚  ­û;¼ú ;x×õc¼ó¼å|ê•k8~i ×w�ÎSêÈ+øòÃ3üÔ×v³c&åø%5Þ´e„ÁŠ_o$œŸwéHàŠÉCü±“©å÷Oñ×·�³uq�ÿ}Ú(§,­#e:‹ë"P(çw;¸ÿƒP|/�ËÝ nëpáª&ç¯`¨j0‰p̉DÑÐi¤ ÝÔDJüŽH(•_§Z°T D–Õ1/^…9}Ô»ßBR‹½}½lÙž†€%µ\’ÓF¡‘”»÷2Íëå©åvû0ÃÕ¼6�œ²$t–×)üülA ðí"1%\$ H$‰D"‘¾Ô·óçÑÉÅ2Õm�ÚÜý�"ù~žòMs÷�.ª´u}ó5U__¦[uéÞo+Nü9�úÀÙTªµøjžj7Ðàfº�ÑmD ÞÜÖ‰@:Zki=é‘×x²‚UÉ·Ý,‘}3C<~âg!òx…Ÿ¥sñÀÍÀKèÏ8ðààÒ¸‚?Pî~x9p7ý9øp °-.ß3ÝTžò-ùÏë�«¾÷óŸ6û&>(©= §…U D@-¾Wœ0C ¾@‰¦…sa‘ÈZæQï4RcŠ"’_£ÇRÀŠQÁUÝueÎ�@Ó`¼•yõñÅ:<D¯Û^|žàï¼ø‘Zô+÷¢_{2Ë÷D«‡þ×ýpã.ŠÅ’°�GH  ¥â�GKSœi¸>¡{D¤pï˜æEŸ}„ëw·ùÜ«ÖòçÏ_Î’F‚øbü¡cÉ»ÊÚgz–Ü~ˆ»Æ»¬ªæiá.^?ˆHé=aÃ?ÓãÇ ¸Ý\`zßÜ3>ÿð4¯Ù8į�°˜5ÍJ¡{Ÿ¾Î?ò¨arº¨)pìÖŒûfº|ò¡i&{Ê V ð¢S•�¦R†¨ ÀØö“û+þYªá|�8«�R^Ç;­¤˜Òn¼ 3)dãÉÅ«‘-#`$‡c:E¯?@ví~˜ê•Ö2/Y•§‡#1¢@+ËSÂÙkÀdXð,«SŠH¸ï·ŠRþ@-ž“øï!"‘(E"‘H$‰,LÂã@vLŽÈ¡ÎV� !�œ`­É]?Ëë³hfÈÒ¼Þy¤>ý[»=J–½„�¡ ˆ¾�ö?ãȯ+ë·lÛoa{Ÿq¶õ�ÇF^{©×{~þŽ\:8²4ÉCÔŠ®˜eÞùeÕ�§üCdïì0�4áñ‘įiäû~ªsñVà>àWÃÂdÀßǺmWñIãàdà7€CôçbàVào�Ѹ|ÏR`¶ä§]07>°¸ú¾/ýEr׎ÿå<'‚x‘pmåiÓ…|*8Œ;¯%EÞQ(×# iÜJDWu Ur,`Õ§šcþ¹~|Æ… uýYë¯C�LÑðÙ®ï9s-²l¨ ÊØ/Þ Hð̲,l>ežÞ¼ûÉÛàP›#Aï?ˆýÔù–NT (´y·‰àQÒ¦A�ÚE%�Bj8¿'ø÷)øI†¢ÐJ•¿¹ñ }n;Ã5Ã7^·ŽŸ=aSæ)RT�?}édÊ{nã¯nçõ›‡ø›óWä® 2'‹Ð-ÍævóX‡¿¸ù ÷NtyË ‹yݦ!kèÛ»€wÞ•„™i4”£·¤t­rëx‡+Í0xT›ÁªPIð›¸l*<|kBáSüxý¸úL^ ßkaN:Ñ%ûÚ®ÜÑCj)P5˜“¼t5²j ¸_Ýׯ~szÛ!èY $‚lÁ\°Y=º½æz:Þ%»z?Ùá>º–#&L‰ ÊÓ¾9¢ó'‰P$‰D"‘ÈþÇuÙ15"û[à‚u¡š;~Hm‚ vãàA†’Yjrçˆ º]—ò­W¥={,ÕÚ‹¨5†éK?áã{>.oÛè.Çö¹GƒX€ÒñÙ#¼NËâqˆ@�Ö6WÈ @™!íå[Ô®mN j°™ ¸º@²}jqüûmä).nÞ,¡?ßNuΟ±¸‚O =÷¾ŽÞX&Þ‚øb½°g €žÉÙJõýÿý É×n¼Rf»?…j‚µ�€>Jqk­?‡øk‹n/yñÆ?#?�ß÷Ú�£°Öß#>…•CNù¸~N%)Ä‚qï3^ÈÅ×3²�à•æù¼¤ Ø/Ý Ó?WkWK(*�@ì�Æ~ÌÕ êd’ZôŽ}ä×|å>˜éúõîö ÂWia~Á_£¾­7’øAR‹Ià„ÒaQ2'¡€º/Û5›ñë—ïã—/ÝÃkŽæË?ºŽç¯: Þ^D Q à†ým~õÊ}\v¸†ÏYKù­S—°l  |ôÁ áp ô2å«;gy÷-©áwOZ’§mK¤˜ò ¡tQÆÇ…]» \sÔÆ”¡a @¶n†kigJÕ@3*x¡`ÇÝt[DÂg„zœGJ楔®Šhp½UôžI²¯îB™��¡ æÜåy0R Óîy!îÁiì7ö MƒR¤YAÎ\Š9w WýÂ9nŸE/ß Íç:¢‚nJ�Š(Qö‰D"ñ?�#‘H$‰9WŽ |˜ÆÉŽ©¥bU¤g±j$³ ©5bU´azvóÐAjbçÅŸ,Íëý̧}ëvšsqC'a’„~(`[–’Eü9Uηù®´ð×–µY(~‹ýkÙ~É<˜›ú®±A®­tîŒÑ~ŸbPm` íÎ çàJæ�@63s‘0Téj3é’f®æ“�OgÆ[ƒl DPäI~Ž�‹/_ާ?¸?·Ç|ZpÀ :§—ÓŸQà€›€ ãò=íI�È‘ÊÇ¿ù¢Ú?~å94óGƲ!üáÓ„iÏr„g‹uC@¼pTæâ \CAº7Å…‚x7B(ìˆs‰õã·_舒¿³éíDÀHQØRðót–œ¹jàÐ{ wíÇ�'Ô‚ÚCßÞIÑÿ¾ûß>ìÊSÃéçîÄ~ä&ìß½ôAo×±Ó„>®ñGw¤â×�J1 ˜×æ‚ú0„"‚¢ˆ‹`¾7ìëðšÿÜÁ‡o?Ä{Î_ÎÉËê¬l&®-Oi¦"ê·EÍLùÒÃÓüòå{™M•¿{Á ~â˜aj‰PDÅN?%-Ÿ�]˧œâÃ÷LrÚÒ:¿~Â6 WËÅ*Áp÷= ½Pÿ 1p܉=£)•Ñ®›´{�YH U£¨(­é„]÷ÕüÏÑþV§â8¥ø¢Ô€–¯9t,ö»cänž±!²²Aò’U$'.†ª)ˆB׿N ¼¶Ï�„,­cæÞ™œ´êIé;&½{½j?ìk—¼+É£ïh (†¢(‰P$‰D"‘Èÿúìœ4·íß,yš/õéÞTE2Mì@ÒÓMC1 NüÉEƒžs�¤sÛöì*àBÍ•G&üø¢Ê¬¸Ð@( …|„u4ø—¾ür`‚–h| øm�ÏÛ~Ÿ M °(9åÂ~žZ2O ÄžPèòkwdcHÌÙôzµüæ  ܪ椸pb­Åäb�E’ûÆWF(ò~Fæâ/�;€WÑŸiàw�€/BüGµOCnu5›^:íbZ<-ŽQ:=×¾@8A /J[@P jÄ .Bñ'D@}©n.ás÷MñCŸßοÞ5Áï�¹”ß>c)CUƒhñÚ°sÂ(Àd×òþ;ñ{×àÄ%õ\zþª|·~mU¿�à‘rê‘™?÷ŒËw·¸xí g-¯³¬‘”—–rÑíÂý÷'ÅITX2jY¾µøÔx tT™É,¨0`î&Áø5 E2ñ.¶þ©ßÀxá'œø>t¼‹½r/ö†1heà°¸çoF.Z�l)"Ua²‡^»½á Ì–ÔZß$O wT�²ï÷lŠÞ1Ž·-±6Š€Ç¯¼o�}‰D¢‰D"‘H$òÄþ½AöÏ6’öl« V�ÓCÅ¥þ2Z#Ó�ƒã`MAüI{^üiµŽ¥V?�J­A?,N¬Qò ßâðÇ’a}YÅ$âÃT$h£ ê„Ǿ �# ƒÛ ~îû±%¥áÇã)¬…X¿ ³}„?òHv8Ò#ƒò÷Õël#M+NJrÈ¥‚£.™]R›%³EH]-(€©Î�¹óÀÒø÷ÛÈ@øIæâ€û€·UF��Ç tâ*>­Q'èü>0C^ܼ ŽKøô¢þ§Ÿ™‹wU¾sß%ÒK_ êUïž £\:Ö’‡,�0b!G¬ETË]¡”Ú0-S™Xã)Oq†¯éC˜šÎ‹J¹ÃXÁÏÃúc‹O›Š)§®…á8ôÞè®I°Zâ�)wø:I^8ÓP„BràÔpíí®»'t0 (B¨u…B…–ê¢å)Äü ó¡@9ŠÿC0ݳ¼ë;c¼ö+»X?\á+?ºŽ×3D"”ºTp„ã ñíOöø£ïà#wMð¦c‡yçYËØäß#ˆ (€Ûö#0‰pãX‡�Þ?ÉTWùÇ�ðCk›4)7` <úˆaj*<RQDý:ªäǠг°oW…ų ^¾v€õƒ•`0^ÀQ�òôpá;ß AýÖWÐí3d_ß�§‡#S x!¨f�“c.X‰,kàEÆ ^Ñžö›{sG©R jÀ¥ T‘@¤æåÏs ¿å®6-íL‰ÿljÄr"‘H$‰Dž &;Õäº]ÇIj«j­ÀªA¬MÅnÙ?ïüÉr‡HQüi·ÖQoœ„ÃB(HªH¦H™ÈaA\ˆŠÇ€&I ò…x&ŠJnny¨†üúx¡Ì‹gV kæÏ¥ G"ÕG“v›ä"P/!Ç>œ®˜Â™R›äB‘‚¹÷àºYü»jä‰Î¾ |XA®ÎÞ ì‰+øŒ¢í�-ÀÇèO xp/ð³ñ¿“Ÿzêòo¦þÎOý"pª¿…j (:{UQ \0þ�wíί�Y^]{€s’Ý Ñ 7.|Ê·b_àŸil‰û'S0~\¡£ÈõYt«úZ=¸pížâØüýâïס«$ â/r÷ϹÁâÆzŃE±I¼“Âç¡Å5A2ë¯3Âõ4âï+¸ªÝ:Ͷ Ÿ¥œÎâ ¶BŽŠ_S Zamõº'üAŸt\ ˆß}d²Ë[®ØÇ;®9ÀOo]Ä'h §¯höåßK¡¶Ìø9]·¯Ío\³Ÿ›Æ:üÑ™£üò¶ÅŒT‹J¤J°.B4lèfÊÝ“]þñî × oÙ¶ˆ3–Öç×L)Îùλ*Å̇Š¢¢”a-Ü}s�Ëö´¸ñ`—ÕxñÊ–ÔŒ§ú­§|á…*”¿×£1g/ƒ�rÁ�ÔbïšÈ… lç,„ŒT‘ç/GÎ^ Í b½ {ù^tÇ,Ö!"}Ó "”"å‚§ú�v¡]¢(‰P$‰D"‘ÈD73•oí8NZi“Üù£ ©M°*¤YUÉ6í§&v^üÉÝ?i2/þtÚ˨ÖÎì+þ¤Št-d ª�…õ}|€  h.ˆŽ�g=EQH«. A½ pkéŽq¡Ì·I Òsk¯@ˆI²ìd'þäu€ ©àÔ®lL�Ù$€Œü3"][O¾»gmü2Ežágý\|¸ 8�þìÞœÜWðÍ.'è<¸žþ¬þ¸87.ßSCý�ÿíˆÜ|Õ%5hJR› ^��âÖ;WXŸLñ¡áËøêâ/ð'ÍëøàÐe|vø+,3­°ÐzѤ�¤sn£ UlI� ß—wlXïf-º™Ó¾ ÇPmpañ}âç#§úÚ?XМûǘ å]˜Æ.Ä\8Ô¯5âç BØGÉš 2ݦ<Í•GòÐ<@ý³;K*åu`òpíR"Ü”–ÐQ|{9‚ B‚ww\»»Åëÿk'_xhŠ¿~ÁrÞ}ÞrVVÂôoG†BøèZåóNñ¶kö“¼÷¼¼b}“Š)™Ÿâ#DCk�ç`Çò™‡¦ùÜ#3œ¹¼Á/;ÂQÕÀA%7ìÚiÀŠºnÃ~ý|·ß[£3k@„�³)—ìžeW+åü N­ÓH¼…J‘Ü-Z&l ÉE ä¢5ÈÖE�¥´2øÎöª}0Ñ%DV`^²’¼�JaŒ~¿“¡·Œc¯Þ‡º@ý5 »šü5%çü¡†®<Ÿ$Ñ·«k!–ŠD¢‰D"‘H$ò1'þ-SÝEXM4³T Öš|«ŠÝ8t€ÁJ�,3óõaòèVÉÅŸî0&9S©,èúéZ$U…œô!Z´jæB ‘˜‡AGÍä[L!¯Da '‘*„ÔVÓí.%uià‚Tpº¼6KÕd �‹@VPD­5æÑÉõæ¶ýËãKŠ|ŸÂOs.þ¸ø úÓþØ |*þ3Ùg×ç?ì¦?g9Ø'€uqùžêø‰õõ?úäg®Dõ4Êë¦DQ‹(€ºvÁׯ³~ßñüê.>¹øRΪîEð¬13üYóÚ¢hƒ2\8‚z@Þ!ƒ!¸/P/x¢M1”YXÃÏ‚V�À~n¶¬VPÑ¡k(�»ÎÛÈ<)èeàç#þùÌÕæ�GA¼($�nNˆeßO(’õRHÓ7Daý‹û⻋+h"„J˜³ ‡4 Í׬Ã,«ûç+åsÁ§×ÓÀu£àÈ€Oß3Å�~y'ã�ŒOÿÐj~é„E4ª‚‰³%¨ TvÝx×ò�wNðž›Æ8{Åxú(£õ!Iý¡`mÊ…xh²Ç?Ý;‘;Ž^·~ˆW¯dQÕàEXåÞ{z=ATPƒx¡LÝhÍvÜ[M3Ü3ÕãÒ=-¸påÇ ×0èÂëžð›‚ÈJHE0Û‘\´Y× Þ±_s{°‹½b/zóAèd0‚;Œyñ*dÝžât¢W »eÚ6tì„SÝv>‚Ëõ"Q©ÝIðÿZ‰D(‰D"‘Hä‰ ùö®µ²wf5€Zk°š X+v]s\—TÛäÂOϧ}Ë#­Ðë œO¥V_ÐõÓ±`!ÇRÜW0¹°EŸ#AðΠšÁ A>¬ -Ygqï…L™GŒ r’~ò÷Œ{çyˆ];0Næb™Qĉ‡Irç�-æî±Ñør"¹ð#sñàà��úó`«»~&®â³ |ØüС?orŸ£ÿ Ä%ü� ?͹x'ÆÜ�È�CI½‘Pà(懲^°)Š,ê.¬ïàï]Űt)ãôdÆZ�êÏ(`$€s )é‚ú<ž &ŽK�†X ëÿ¼óÇP^WH cò(X|- Uäô£ QKŽÞÝ=YX¯R$Ø*婯ßO¸VV Ž ×î�ZS­G„ŠjŠ„i� ¨JXù_EJö/@²®Éð6и`ÒH Jë! ÞeU¾v]Ë{¾{�7c§,«ó™‹×pñúA±)@A§Rñc¿²Ç;oãË�ÌpÌ¢*o;e kœã¨´%<(G½í»c>pÏÓ©òóÇŒð‚ j‰„nW¸ÿ¾ h™›Êo¸­ŽU¡Œv¦Ü8ÞáêmV5 gŒ6Hd¡q „ïÔ fw\)ÍJžμp%²¸Vþ}dûõ=èS`•�9uó‚ö� ª¨;[¹#¨\”*wõEµè‚Dƒv¼SˆX(‰P$‰D"‘ÈãÄÜsp‰yàÐf@H³ªXM$Ë*sQ%Ë»¢1©«¦°Ö�e^øÉ… ÃÛn•ÌžGµ>H Ò±H×ú,øô*ø­€Ö Z�ÂÏ÷…�¯]¾†5ñ?Ö”‹?>2÷Ž:ÞD}` ½Î:òTpNò Ñ%ÕŽVÚdÖ ™MÄÚ �nÚ{¢y`|Q|)ú‹?gW9Ï:úsðBà À#qŸL;AçxàÿÑŸ&ðgÀ]À�ÅŸÏžXê¿ÿñ7bõà�Èì€OåêPÅE@½Ó$tßX×&ÂZ3Í;‡¿�A�rê’±1™* ¨w³„®×7iÒ¬»×ä5ólà/~äÏñÏ ]= hym£°M‹)\%S¨%TÎÚˆ±@° W=àÇ_¾æ…ç‡ÂŠ?ˆwh¡àÇ¡k‹_Gï.B&g!Ë(α�èªàØê.I°5(J¹SDü{¶@¦X�ꉋüéMÔN]Füü�ò€¸)Šk§œ&zy} ÿïæƒ¹èý¬ä¸Å5PJ(‡Äo¥(j)‚¾½¿Ãwçâ¡©pÚ(oØ<Ì`Å€„)ñ\”ºíBü0ZVùúîY>ñà«*sBÐÇ/ª!ÀŽí SSu��ùíÁ= c{* ÞÕô­ýî�ê‘y%©¯ˆ¡¦ôZï¶ÛßA÷µ ‘¥uÌ«0§ŽBÝBžyõŽ òÚ>{Û²¸†99rÚ(4¿ÒGŠÐ‘âwË¡î” ^1ÿ[$ H$‰D"‘Ç�ì�HnÞ»�L+yX Ö& ‚µF‡«3º~ð6Ëô'íæ�s…Tóý^÷¬\,(#U¤•AükÚ°˜0‚Örá"þMç‰tÕ Úpkªê×½l_›IÚNªÔ¶‘¦µÐ äÂØÍÃ0 iV!Ëò�Ãá>OÉ·wŸ,�L Ç¡\øY5ÿ |x>ýÙüppU\Áç$¯^ ÜJ6Ÿ.N�Ë÷x…Ÿ��1'þ| á“À:/\jöx‘ÅZò%VÁ!ÖâÝ3:ME3Þ½è:†¤G?Úš¸>Õ�G¼¨Š!nëEr A½ *?·À¡ þ¹`�0›ç±Ý@"~ îù`N_�ªa �ºÚ?;'‚u ú )«íÖ6²Š¨BY8 Ô„Ây3þ8ЀBCÃé³+k%…òÕ‡V±ã¶eæ“>0 €Ô õ,gð'7PY?Hèdõ¢Šˆ›oÿšû \µ«Å¿¶;ß¾ïü¼ãŒQFJ ÇëmPxÁÏ-Så?šæ�¿;ÆâšáOÏ\Ê‹VP^ú24M…Ï-ÑŸt2þý‘i.ÝÝâÜåu~|Ó0+ê wÝQAÑ¢0a-Üw{=ø¼”­•Ok6ѳ@06%ÀOJÊkÿ0ÏlŠýÖ>ìuûa&…°›�ƒÈKWÃ1Ã` µ¸üM§è· ×È÷Cdíæ‚•è±#`)‹Û€ÒöÒ´Š^dSaØ!ñŸ.D"QŠD"‘H$y\Ìt+•+·ŸBÏÖQÔ Ö&®öO¢u™µÛíB­ÉÅŸ^.ü$dóµ`:ím4×”»~œ�` Ý'Å6#è€�Jü¯œFІÉ ÓÃû¸m¦äï/« �egÍ»¾²4ÿ �:7P›m]´ƒEÕ`µ‚ZƒZ!µµÊ5;O“�SƒñEDðÂO}.ÞÜ ¼¦ü°ø0�ÅU|Îs9p:ð?€1úóBàFàƒÀЏ|ßõwüëª9áç#(^¬Uõn[^{ÅŸ÷‚‹d¶ø#°µ`d^Äyic'UÇèGGöØ0Rtµ(¨kƒ‚»'pÇjqìBÑ…£�Hƒëm¡Þ�›WÙ:ˆë³¬ŸÀÜ/§¯Ç¤Ì£W>àÏûû‚¾C7Eè0¤¤£ ëá Úð}ËL²¬øl(Gp×ÿ4/\5ÀïŸ:Ê–E5”`þÂc¢}æöàT�}`Šû綯>j�39°«‚Š—&xôþ*í"�ƒ*Lݦ¾­¿ V&ï�² º»Evénì�‡ ÕbFéªAN\L^Ûge�ct{ùžÜDÏR ’-ùĪ ˆæ|Ĉ@øýD½ÿg�ŽNŠ. H$ @‘H$‰D"ß™•Ê×9‰ÙÞª‚UƒÅ 6µÙÉCw�Uœã£èþé´ÖÑhn)uýÌdÐSPŠa)RË…‰˜œçÉ É…6ï² ÄŸÒmªˆ6VÐí�™¿÷È7w·xóq#üâÖE,m$þ"¥á3ŠvœÌÕúØCSX…3ÛK¨«A¥=+8…ýæ^ô‘P Ø�9} rÎR©BÂç„”M6p*!SÀE"QŠD"‘H$ù~©\±}³j¯@1dZE5Áf¬&¨J¶µy§ÖÚ)63ÎícœT!ë%t;‹©ÖOGŒ\?-‹™ Q˜G,  Í­FåçI§"äk?`@@´ô¿Óý{ËÀØ�5Ì´O%~\ý§y!(KX\íd[†ÂÚ„\LÌr@ÞÖI›•¯?|‡Úñ×ç®øsðUà‹Àfús7ðràUÀ½q# 0ü&pp ýÞ Ü¼"._9�·ôG�;PÞ .�bz·Ìz€’}UËk{> þøÄê'ÏÅ‘pIwƒ bÀ‚ ð‚†)ÞDŠõÑ¢H¥~œù– M[PG¬„?Ðk8ï‚ðã&< æ¤u`�0 ·î û �@E1 ‚yZ/áP÷ñsÁ‹@`L¹€å߯ïº�^� PŠm!Bj`vu $¸®0\E�BßE! z·O�§…»åмû«zêšoÚDuÛ*„iîS(T ÅŸâxî9Ôå­Wîã7¯ÞÏÏ7»ž·Œ�#Õ>©ÀÊÌLåze¦ð­=-Þyã;ï8y”>ªI½bXq¾Z©rÙž_z¨ÅÒÃ4*BÅÀýwÔ°©R†ÿ~±0 H¨âIxè ¾›¥"‹´3ì�±WìEv ‘�ÜÉ#',†ª)㺽ýöª}èX Xð,­#Ï_Žœ¸j†p¬áxCÊ…�â±Pþ’T-ª H,c‰D(‰D"‘Hä{#¹qÏ*ydb V j…,« P±š÷ÚÕ• º�ÄÿПGî¢× 1Ï#©TpHO1SÒÕ¢‹·�´.è`ÿFót‚†´aPĺ­úw˜·Y0ÒÜÀDë¤Ü”å‘ ƒ¤Ý¼�.¯LeG×ïÌ]?ŠA—RP°šÐN‡ª_}è,fº•¸øÏ)ágt.þ¸¸ˆþ~8¸$®`„�þ¢á+�P4Ü|ø/`k\>rìo䄯oäRT¿ ªÇˆµEÇJ!u›Ì‹ ^ ¡8áÛ}ÍÄ“sVm?޾µ>ßÙìžMXkÐoýóÊ�à-@ÂÂXàýÀ±Àß½¸Š‘ï“ÿrn ß&éÏË�èo€Åóà4®mò–m‹Ù0TñÂLɽ¾µÜi¤ÁüÝ?À×®7ìne¼rÝ ç.kÐH„Ð¥¥ëSRƒ*@pýH ò• kÈkûŒÖ)wg ºcûõ=轓`•5ƒœ¼ó•ÈÒ:ÞI”‡ßÙÓF¯Ü—§˜#S T ²u99,«ƒˆ ÊQ¥A ÂOèÈR j>‘H$ @‘H$‰D¾O’+¶Ÿ$=ÛÀª« YV%³T…�d2=sènz=“»zÝĹ<ò M+t;§Po.�®ÅL:×�‚¥€:×ÏPILað´D@k‚JÐZðã#F0�㘘Ýì\@÷ÙÈ?/t;Iv¬ÙiWÕrÂ� š‹@’i«Æ˜]—\¹}S\ôgµøs!p3ð÷À(ýù&pð«À�¸‚‘'€.ð×NPü'@Y˜ ðN°ü á9‚ýÍWæâåsWý5 Á‹( %iËB¼XBUXÓB^µ¹hlžu×ûû\š6‹aCeŠ~ìÎù»ÖɾTC‘£P_H¬‚†„•oÀV ‹»§D'.á¶e©½´\"‡:ç‰ëÀç¤ÂÞ¶¬E‡â(8{|Ö\A…ºLó÷kUüa܆ë„ßú1.+ (29í.G‚”×:É Ô þœ"óʼ¨Ó|ÍQ ¼,uPÒG¦™ùÌ£´¯Ù�v-•ÍC4ß°‘ÚÙK¡*%¢O‡‹º�Û÷µ2ÞuÓAþìÆƒ\¼n�ÿ{ÞrNYZaawT¹“§Ôt×D—ÿï¶qnëðóÇŽð㇪(KWçBÑO)‡�©05-Ü8ÞåóÛg©xõºA¶WIÑ2§ å[B$\3‡>öÚÈ’æE+1g,…FRnÍrõ�ìe{Ð]-©"ç.CÎ…�$xÇŠ¸ï L£—ïƒ�%} V�3GóA U@)G¤(0ÉÂnu!*@‘H$ @‘H$‰D¾ïÔoæ@kª y ù6¡×{ÞèM”´kr÷O§íܽ\ü¡ÓÚÄ@s# 2›!Ó¬©DܱuÇvØ &¦¯~&  M“Žð##"dµ“˜™=Š4uu€Ò„^§Bk¦š‹@§4´Ëª�bm«‡#Qk@P$¹ïà‰æî±Ñ¸àÏ:ágó\|ø:pýyx-p!pk\ÁÈ€}NÐ9¸’þ,>Ü\À³ûëz)ÊÍ(Œ–ý+€X-ùñß…ÔhþÚe]ÌïÜ�ùƒû�—íËE óë÷#g„ÄàS²yqf<«³ÂïN�ËTVLJo7xqíS›ïò± •³y#ˆ êîdvÁBûêæ…õâQŽëç„–P”’ÑAdåbßÁº}¬X{ÅjѹŠsÖ’£Á{Cüyÿ÷¶ ’¡¬"Ö†b—¦Hiš?ÙÈ­“k£uQv]kU�Þpe~ì A8ÐvFç[¹¨ƒÌaQçM©=oR5+Šd–ÞÍã´þíaÒ;'æDÕ3FiþäF*Ç—¸K4ÂRDâÂqÇÁ¿yí~¾ôð4¿yÒbÞqÚRV5+”"P!|oÅÝL᪽-þê¶CôTùÙcF8v¸J5‘©Ø¦G(BM÷2®Ø×æ›{[l®òŠ5MV5“¾µ“‡Œ”¸¨ÁÖÅB)÷ä¨&ÉE«‘ãFÀHɳzÃöšý0Ù#DV äõ�ò>ñ©(Ãú@·B¯9‡z²¼Žœ· Ù: •p�%ë¯þPKRÙ â.SBK–jƒ"‘(E"‘H$‰ôc²S5·î?T°ZP«Õ ;cé ™.¹ûlj?½NeÞ”v›Të'¡"f:CZJŽ–…wýØ‘*Qùy¦¡uƒò9ßÉŠéü ÆÐ©œA·½›§€ó. k…N;ÉÎ^t·.®íB1¨¬­V’kw>OöÏ6âj?+„Ÿá¹x7p'ðjú3ü>° ø|üg®‘'�›œ óãÀ£ôçdçLû°‰gö-ÿ´Ù¾õC_.Eõ„°ø¿£¤Æ å?î†m€l™Æ¼ã~ØØ"DÞ´)8nQ¸«»dAñçÏ&ÏâÖt™<4¼ÈÿaŠb‹"Põuy̦ T^óJ̉Ç�j1=œ”¹vÂõqsË#¬SdµÜUãî—ã�"Ç�cïÜ –Ç^ !¨uáCÇŽ¯Aäñm™-ïÃ*ñ}†ÏÌ,²ïh0×à@Ô-)®ŸàªÖŠÝE�£'pXuogæã‘Ý1�Q0‰P;c4‚*[Fð²‘èZ�+öÑúÜ£dÎ)"ƒê®¢ñê£� D92¡ÆEpà¬*—îœå×®ÚÇž™”¿zÞr~êØašU}ì>QÿžA ó Ç2�Y>ÿÈ Ÿyxšå�„·l]ĶÅ5Ä”¤`EsP€¦ ÜÛÉø¯�³Ü9ÙãÜ¥ ^°¬Áp"aŸ-y_ŽraM9b�ãa.\…¬(O7(ÀX{å^ô–qèZ AŽÎ… ]×t‚Ÿ@Èd½ö@.Ñ)©´a9g)@Ñu'ø6¤0Ïè €Äÿ”ŠD¢‰D"‘H$Ò�ÊÕ;¶H'Â’ çüÉ·ººù€]S›¤×5ÎýãÒyusv.ÒÞhR1‡2ð)ß\["è¢m&ÑõóL¦"ØEþ¢€õa²$aFÏ#íÕr‘°×­ÐíTè´olOÒsßF]¦æg� �(Fz¶Q¹j{¬ôÌ~Ì\üp/ð»@�þ| ؼ hÇUŒ<‰(ðïÀVà�Yúó:à.àÏ�!žáØÿõÁÊœøóîDø”aPLæ@Ô9AÐÀý‹#sû›g‘_3J1Ьk…¢Ó|ж¯¶Ö1£UBÙ:¿2þ"¾ÐÙT¸7� /?-O½ä¯õó–ÑQ*/{)É ÎCš„Η‹w÷„¸6QE� Ö:�` ŒÇæøµøg�Þ¶Ý�_]ÿbP5&O H•�Ü{×`<Ö†i½¼˜e$¬BѰ(ôRäÀGN¹“¤½¼Fg´æN—§ÔVFûò}Löz^Ô¡ñÒU ¼n=• BìX‡öwйt7:Õ YÕ ñÚ£¨¿x%2ït)—°|[ñ@|ãLfùè}“¼ýº¬¬ò7ç.ç‚5åÎ :,uÄ(ö·R®Ýßæ«»f¹xM“ŸÝ<ÂÊ?�ŸRØg(¦„ÂÍÓ=þsW‹ÉT¹hõ'/®Q5Ò·Žâ…¡ ˆ A÷¶Ñ‡¦A)Ò¬ g-Ež¿Õ(R}t{Ù^ôÁiP¥@#!9eIîæaqí±SÑíj¡W8¼`•S–Ö1pâN RºT߇^o4E"QŠD"‘H$é‹ì™ÙÀ<*.ý›¡*­ôœå÷`3ÉÃÕþ!í%d½\ü¡Ý^O2°ÒLdÐó©A°A(h3 Ðèúyv `‡PÈÃúvL¯2ÈLçl²Ô¹€zµéó–}›Ät±$š×›B°š ÙßÚÀd§ú)þœ\|XEܵç? ìŠ+y i9Aç8à“ô§üpðS€y†Š?‹�KPý= †â S|‰P ´L‰X€fŠùÅí`”YÝ*u‰*÷†yÛ�çqooaG6ȇ§·ò†/å†ÞJÿ,cÓ yaºqû¿»Hfó(Œ¿Ñ 9ç*/{2º,䑺ó¨7 Ž2ñCpãðÏüØÂ:,^ôñî©�+`¨–}d �hÝNÞùãÇg‚[Á;-Üomq¶�ÒÍ_ë „¶ÂØ•0œ›Z84 ‚'Öü=Rr�¯ ÔZÓ@+aÍ¿vŠbth}~;í¯zQ'YÙ þúõ¹ÃGš•à~H˜fö3�ÐýÎ6U `Ž¡ñ†�TO]¦d\~ÈåHèD•]­”wßr�¼s‚WmâÏÏZÊ/^€‚J¡pYþ,)ŽE�;uù‡{&ypº—‹@¯XÛ¤™¸9(^ŒqQ$¬sUØ€BšYnïpéž6ÃUí`Ã`!ì&¨«$nnýÄ‚Ïp×boÇ~sz ƒ¥ˆ,«çõ�ä”Q¨Ba7ßö2ô® ìûÐ}mY\ËE 9e 4’ò”™¢÷O£ß:{Û,Hèþ)Íœ©(Z+AP@¢(‰P$‰D"‘ÈBÈÞ™ig#øº?«PÉN^v#uÉè´¬ÒÔ�æu2k 91wþd hy:vqtý<+©:hŠ…£­ß7i} íÖFz½ ¹p˜²žÀf¢Ëª³ö¤¥7€Jáç÷yLnß¿:.ò3JøY7Ÿ®Τ?»€ŸÎ¾W0ò4b‡tžÜ@Ö®Îá„]·t3V¯CõB¬–Õß]=¥Žñ5~JíòÓ»a´G_¦’ÂÂg]ß]É�ﻈsw¿šWí{?}{lÓ�/¯Œ#„. 0å’Jü¼Í¶mT_ù*̱›™Ç‚Gý±jàèqý†„n* "µ~ŒŠ`T1ÛÖ�ŧ»}{¸Îþ0¨MäÇWì3/bxaÌ‹Tn¼à¯)î«H(úùIÉ{Ä‹\29§ÀQ^ET!èGÚL˜9j€Þ`bqHÕ�¬Á‹:SÌüÛô¿}íY*Ç�0ðÆ TO#H•ÞwÒþÔÃtï»zÎ2~|ÉÆ!ÊPÁSž ͵*Š?wËX‡ß¹~?Wínñ['-æ¶ SKŒ_˰? *Rt õ¬åʽm>pÏ$U#üÊ–Î^VÇ=ßgˆ–žÜ\EÜó„©Ôrõ�6ß9Øá˜¡*/ZÑ`iÍPD½³ÉÒ—Ðýƒø‰Ù©ÙÕûйwÊlJx�lļdrô˜ÂçÕ¾g2ô;cè·Ç`:ņ_÷µÈ‹VÀá>).[zË!ô;a*ÅQxV¸–*” NäQ ¼@’ª6þ?v$ H$‰D"‘ÇÆÜ{p%ª« .TU¨W¦ì‰£{È2!ßö Y:™É‹ûw:£fÊ4 ÿ%¨Åï× v´ký<‹Ñ¦�š ¸íXhÙMhfÈzÞ”§�Ë ;~h¯.ilGñŸCUs8Ìö©£â ?#„Ÿ�¹øCç‚x#ýéà]Ÿâ¯‘§'^Ðù9`}p×^ü+°æ þ¼ÕëQ=‘¢%¬Sþ¼õb.T5Æ_«�ð°®�œ1É‘ {%éÃü¸D- t¬AQÓÎÙ’6�oS/v„î³n•W¼ŠäÔÓ ^…¨à± “€à].®oÂu)ŠgA¡w±Î‰$àÅ+u[Ç@Ù¸Ò»�Ú)zßE±E}¿9¾SŠ¢XÁõ¤^8³¾{>s[uÎ)-I ¦.ÐÐQæÏYE¦fKÒÁ)HØ"á磉Ð^7¸£½fðN›H—ªÐ|õ:^¾©x“zÃx.¥÷yQ§vÎRš?¹�ʦ!BìlJ÷{ha;v©R¿x5õW®Å¸Tt¡c§\UQ_È?¬™å–÷’�³¼ýúLö”†W¯¢–ÄE™F£ N<üý“½Œ/nŸá³�̰uQ�73¦á*þÚ)=T œ^âÏímg|s_‹GfÒ\d:~¤J"�#‚†S—¾îŸ’:9‚¸CÝÝÂ~cOîè!U T rÂbrGP˜öOü;Ñým²«ö¡wN@ÏR dË0ò‚åàûÕbݬñ.zÝôž© ¥£:©Dñ¨Å£ î«FP$ H$‰D"‘>˜=3«‚:,‰WÇèu 6sΟ\üq?äg9�‡ S¼ˆOU2h°KHãY®�€´˜"DÚ•%¤i•Ü5–¬u‚¢œ¤kwb5™¿Ñ9Ñd¼½–Ù^üûíÓWø‘¹ø1ànàO�&ýùp¼«³2W1ò À:Ag ðn K~¸ø= ÁÓ»vt-ª_Bd)"…TcÁ�ýAÁ¶.®òÎ\ÆYËëBHøŽ ] ŽP„€³){`Škö·yÙš^»~�Ñš¡\„)«”×· ?Zͤ|co›©TÉ‚a¨€ŠˆPЍÞG.ê¨÷Nb/ÛƒnŸ��¡ rø³pöR¬„kã­‡gÐ+öÁ£3 H�Ó—�÷1RÐ໢øtpÚ±Zò¹pÊ®Qu±P$ H$‰D"‘#bª»Õª@—7öÑí̧êÊC­`SƒU1‡š«$3+Pñ*€°*èH;R‰êÈs"ƒUÆ2B’0™�ˆÍ jk…€lÛènÅjeÞ‘†(©mT®Ù¹,~QŸ–âÏiÀÀg�õôçVàÅÀ�ÅŒ<™r‚Î6à ôgø?À�ÀkáéŇ�Å…:4AJ´0U¡+C ûåÿŠ?²È9 zÃbèš@ÌÑB*2Q4ßúthÅ6Þa8˜´àò×Ö$§�MuÎõcV¯‡5x�)MÉnº…ô?¿Œ}𑢘"Ç �ýc¯jÁù£Fü}ÞÅSœ‡l[_t Ýþh�¦Oñ}û1‰uàç þ<?öp^øû sÐÂu’Ù¢à~®?†²ú>ªÐê »Æ Ó+-ü/h�IböÎÅ, TLÖ^Þ¼wÉîöÞ!UH„Ú£‡… <Ý(¢^Ôiý¿ít¾¹�MçE�æë×S{Á ¤‘ ‚G ½g’ög¦wó8Ö9¸jÛÑø‰ $',Ä-¼g%5Ì´–;hÞsë8Ÿzp’×mâí'/aýPBB¨\ü!Üpû¡.¾ŠýíŒ7mæE+¨K‰ #‘>ç][×*;f3P€@´éOy¿Í $âú .j¥èáwsÕ>ï�»€Ì+�ãA%äÿgï= ,9ÎûÞßWÝ7LŽ›#6‹œ `I‰¤$’–LI¶õhY²tžƒlÙ’lKOO’eÉT~¢Ÿ-ŠJ”DJ$Å ’H@$",âb�]`ãììä¹sïí®ïA÷ÔyuºN�¹KŒ¨ß9uª»ª»RwÏîÔ¾ïCE¨ÐUôà"zǘmCÈdyù4rÑ(Ô D‚Ü?ܪ E ¤¢#+žðSO P"‘ D"‘H$‰u�n9ˆ%C1(‚%ÅØmÃgÁ‰?8¬¬ŠÌÖ7I+Ÿ Ë›¡ë/ÍС DRz %vÖ^eà0ËÙf rJ/Qt 8Fê]js¸wÐYÕ‘Åv3}©ßPÂÏÆÒï÷¯¤?g€®>ŸV0ñ-ÀÓÀ÷ßXó„‚Nu¢�Iˆ_+¿Fáú”6˜§Vã¯Ø@²�Ð_ulJ�«‹ëSNÍÁÜRx�w§Qˆ�úákúÄ¡ÕGgZúâø\g¹ÈPNãu›xÛNdSƒ€ž¨ÓúÓ#t˜ƒR±ùEc4¾o7ù¥�¨h×Ò½ç í¿8Bùì ÐFFí† 4ߺ³m(Œý·bŸB±Cð¯Ä}g:ü_÷�呹6ÿî’qþÑÞFkO (h¬“°ÞßÓ±Êm3küÑ3KŒÔ„Ø3ÂÅãuD• ‚p”õ^Hp DÆ"c×WêeºAþm[�CÁ ïçÊ|{ûiô�³°V†mõâ™×lDw B\¼‚¥n/®�>0­° `Ç òŠiØéÛ Xñ)ˆ×UA¨ FõM IüI$’”H$‰D"AD¬ºOÖË!“Âp”Vp�ÌfSf9ßè6èKBpC:’'A䥘Œ c5zØ@ê2k¦ )KG·5•_õU3o¶Ò‡ú !üÔ_H?<ü0 ¬Oü*°ø L«˜øãfàJà_géÏk€€÷Ó|�ÐMc»PÞ�â„”@±�K3k#1]bÇ>Æ‹¨¢ø{ds›sA†ç*í"„—‘ªPB`ý!tÃf6n¥öº·�]qä pbÆå€Î�¡øô'(ï¼]] çëðÖ.UËňWÖ;‹&g „ï@*B‹\¼ àÆ¨=G8/w­ïÃêÝ̈Z0Æö ¿¸hŒDÌ<*‚BÜL_YY?&õ©èäYXëAãç�ÚcéF$A‹•ÇY¾·ûÄò£ã«E7dS³'½ õD¡âE�ÎÝgXùÀô™e CýïD�wì$Û1Hˆ.uiú8í�Ã:k™¨ÓøŽ­Ô_¿­Å­Âˆ|SR=UÄßÛµ–�=¿Ê¹ÿ,¹�Ÿ½r’×m 7ný5âúM$GF=ô9ÍÄòÑc->~|•Ë&üÃÝ#lhf þvÑÈ”$rC@ˆÜßÂ¥³Í ¹jóªM0Ùð×*èó«ØÏ�BŸZ"‘mÝ�]2ŽÜ¸&ë�¹ žSkèm3ôÚ(#1†Œ"7LÃTÃ?q/z~ý½¨ƒ¢¨jð�ø¡¤ˆ?‰D" @‰D"‘H$¾<Œ¨fX| KÎJÑ @̈™Ë¶‰%s¢QYù+¶� ;QKBÈK8éP�¬úWŽÖ–bÍ‚¬6&éduÀ“eŠ¥£#øxT†^ÂØóÆ–Ò‡úu�óó]ÀÃÀ»�QúóqàRàÇ�ù´Š‰oa à·�Ðù›ô: ð£NHý1 Æ×ù`ÄŸ–6Û¸÷×dÆò²KOòÓ?r7ïþ©[øáø0ÃPsÆCwmlèÒ—Õ }ß¶Ð t«æË¬F,K!UbÈÀ0ù ¯#åë‘Ñ ( ‡õ¹®¶(¾p�Ï|ff¼°b5.—|¬W�¯ïw‡RX7\²èý‡(ß÷9Ê?þ,åÜŒ}à°¿Ï·UY'ß ~mp¢ž®ë<^ôSð"�ÈåÛô✚ª¢¢»Ï#ÕóÒ¥[ §ç�™yè–qK#'©ågâo¯çäéÎé'X¼»ytõÈXa ?„ÁïÛEíêIÈ„ ]ZŸ:ÁÚGŽa϶0ãuß¹�Æ·"c5~ÉŽ­ÒþàºwÌ í€lçÍ·í¤vÝ4Z3É¢Hh=£wks]Ë>µÄo=ºÀ•“ þÃe\ýyø.à;�ÇÓ &^Bœþ5p9ðiú3üðð†¯¡õÏÅ ¯Ç!êÝ·E7êK "àØ4µÊïÿ§ùõŸþozÍan¸ò8?øÖGøÅ¿�Z^µ,‘Òúø339ýÐ?Ú³µÀ]�[õB�ˆ›.w÷IàÖ¬°~>y�ìâk©½æm˜-;¡ �ãé””�>B÷ãÂ9 €Š ¥ ×É�Ãúø6¨_ËÐ^¸ ž‡RÝùî¹|›]¢—/¬BiÝ|ÅåRüZTb�(~|1«©–ù¶+±È¦¼øçWÄ„@¼‹Å,òýUDÅV›ž5ÐÜ2X ÷È×h6žÄ§ U�XKùÌ‘µ#ÏÝ¿x÷ø©µÙ¦*Ô õ—M1ø½»È÷  ÅñUÖþò(�ÛO£k^ÔxÇ.j×O#5Sy´X([ ý�#�΃³žÊ/ïÝ“�?ŠšØh] Ñ@5 xv¹Ë»ÎóÉc«¼s÷0?rþ›²ÀÍ`üf´�µ�Uzñ�>ñwë`ám;‡¸f¢Až™xx!?w×!îR ¿¥Šìļf3²¤òîUî_-Ñû΢wÍb»X¶ ¯ÞH¯�LâkÓ±è# èݳ°Ð…�érÕDdq¢sw"OLTW”âþ$‰$%‰D"‘ø2ÑL:U‹ Íz©]ÖÁÑ*jÙ¡îù”ä¢0‚s‡d»±&YÀ¤$h#ƒ¡¬€ ºŠÐɆ²gÌÀcž^؈ª÷>R3«Ô²ô[î×^ø™x!¹ÍiÞHœµÏ¥ÀÇÒ &^Ât‚Î[€Côçð à#Àù|õù!ÔoЫJÀ‰X“ \~à ïýÅOsÁys„\}Ñ)^uõs„þ‰Äõ¡G›qô›ÑûGñ&Œ)¢xWaÖ¢BÅâ%tg¶ï§öíï Û{)ãÅŸÂ'{ì(ÝOþ å#÷C·ëÚî%ߦP�l({1-ê¯Éˆ¿‡„kM(2ùß®‹¯Šo”[%ŒÔÃH y7~®Ïê³°6ð_üx �Ž¤Úžâ<¡Å–ˆ?¯¸«³Èr 91‹¬´UYf°yFJª—ÄçUÖÚ¶óä“«�.>¼ô¥‰…n+d¤Fãõ[h¾e;2Ý ‚Bñèkþ,Å#^Ô©]6Aý�»ÉŒ� t·vI÷ 3´ÿú9ì±Ug�–Q{åFêoÞ�ÙÔ\ßfIcq­â‰î9³Æ/<4ÇÑ•.ÿæ¢qþÁŽarS}^4MŒøw×¶ÊÁù}l…�ÍŒ·ï休kHYQP‹ýÓ'>�CÅ¥c-ô‘yèZ*ä‚\8†yÍ&dË€o?§tv ½cyx: #°oyÕØ:Œo)¦wÏöÄ Ú– è’BD’Êç�†Ú¥øóMbP"‘ D"‘H$‰uÉL�"€ ø_[»¶†;̶öÓ±¨8‘ˆ AµDÝ\‡Ü$ñ#%pÉNÔÀ¢@i—@€L1²"“ÙÝ= `20G—ö äNXÌD›ùBúH¿¦ÂOöBòî© g}ÔÅ÷9ßÅûé¤UL$P'è\ü$°DÞ<üO`ì«dýÓ@ù'î ± 7Ü] …„í—øÕŸ¾•‰±5 NOR*í)Npx¦‰>4wûö«;ÑÏLÅÍ4¿'fI þ¼E޵Èä&j7¼…üòW!ù=rÀNÒ¥9ŠÛ?IqçgÑ•%°^è Æâëü<+‚™:ĸz‹+/¦hÐ.øçâãùŠ® ÀF¬¥ü9>P5F‘¨E\}Dðb �ÙãË4è'bÍㄹŠW©·�k9wìêü<£B”"³‹è™…{lüÆ´pwâQ| ðùüB±üÄCK÷ph婱µ²ȶ0ø¶�Ô_¹ifþjm[:_˜éY•ÏWE�ÆwïÄl ”Xì\‡µO§ó锋]Ìtƒúwm§v“‹A>j!´‹¾ÿ(¨?dÍ*;Þâœg¬.üä%ã\¿¡�‘HÌ&@ãF:ÁÄ�k®cù؉wœ^ãʉß±u€ézÂ9£B„Ê÷½×ZôéeìÍ'ÑgW@©2˜#×Lõܺ1R#DE ö¹Uô–ÓðÌ ¨R¡™!—�#×OÁXÍ!Ç[ègèµa5²Ò‘Ø?ˆŸ“†×+ŠÏ‚±iŠ ”H$(‘H$‰D¢™¨¬f€ ôŽ¥U d÷/œÇr9áÄŸ œõJJÝ\GëY=Rª¦š�‰UU YÁ%‘yݘ\Ý €Ô�Ùµ½¨ ª÷êÖágÓGú5^ÜïÔOÑŸ[€«€N§L$i¿ ì~PÖ§ü;'Àþ�ñbRê÷`uªªœD-0<ªÔj–Ÿûww1Ð,X�][]Þuœ¸6¤ýí-èg'àÙ&@ÿtög÷¢� à.&J8.«•8C¢xËëúl’_ù:j/32½‡·ú(Ú÷ÜI÷æcOð1VBÑB¼ÈâÇA®^ŠÐŠÈS§D ´ U«%55‚X ^}ñ‚±gåÐ@„ Åoõ €ß®ü*Ö>^@ŒR!(ªô�…P zIÔÒËÏ3ŒŸäƤµü�ÙµùŸc̯œ2U4ª(>—'Ú§ß¿øÅÁç[LJKU+�_4Fóûv÷\·…1²ì|‡öÇŽ±öÉãè‚u¦4Þ´�úk· Ã9 ®”âè í¥¸gœÅJ¶g˜ÆÛv‘_5 ™ø%RúÊ µA�*³í’÷Zâý‡—xÙt“¼g”éfêLñ¦%@c–IÊÑVÉ_?¿Â‘Õ’×mnrÃtƒ�L‚vµ*x‘ȳ�‹Qq|9m‹>4‡½åz¦MˆL70¯Úˆ\:5ãÅ J]‹>¶@/¶ÏLBÆëÈ˧{b C€�1ôÔzç,œn‡1’ÖGAU"Q’‰$%‰D"‘Hô%7Q2@ÄjŽjÖ;ïÚºyreƒ9ÕÚ�Õ ‹UFÁN± y;RŠ&;^Gk¶+J�ú](T 1§:;²vfÎnÃR%C5Äå”WnJÐW_ø9ï…ôWÀg�ËèÏàÀk€/¥L$úrÊ :×wП Àï÷¯âÅBø!„Ð¥˜5b¼"üÐ;rÁž9úqò̠ߤ5ÞÊEÅ·3ôý›°ÿm7öçv¡Ÿž€ù B�ÀZ_s�fmhEâ-š¬B-'Ûw5µ›Þ‰Ùº,&±”‡Òùä_bŸyÌ aÜ?&\æùþñ%rŒ‚ˆŸ wrêûçvN�\Š)„–PB¤,6&W¯k)ôòRA‰áÛŠZZ9Œà�}½@µ\ëU7¥‚¸2ãrW­èó:2øoõ‚¿Lf,ôxø%çN±À‹§&âXMðÉeZ–Z>ûLëð‰Ÿi/4©ê7l ùö�d; ãØØ#+´ÿòÝ»ÏTD�æ;vS»zrAÀ¥TЇçz÷”O.‚¹�_1Ù‚Ìy^ ¤¬…�ð=xz©à·_àÓÇWif†ïß=ÌxÝ ~eú ªøùº¤É\"ñ’E¸u6­B"‘H$‰s¡žèÉ™žUð†±“�ÇÉ¥ƒ-rµ¥HÙ­kÙ©QvrŠvÃÖæí5;¯`ÛîW§eLqæÎ¥Å|Ñ…Ÿaà?:‹ƒýYþ;ðn •V0‘ø{!À;�eÐvÎ�8WrGø{¢S#uDZ¦ºI/¨D5Á¬Cƒ]>ü{Ëà@A?~é÷¯áCŸÙï7õ}{½\‰¸r ¯ ó,^ ²u/µó¯GšÃØ<ˆP{êåÁ»Ð¥y©ÆÁ¿.ˆøB©ö¥^¼ðâŽTÇ‚juüêæ£Áƾëb÷LDüµGŪ'èW|n]�q‰ð:EcënOP'øyŽn Ô—�„k*¡«¸êšˆ °J³þûzÞæ÷S¯up+1‡Þ \µŽlb"ç ²b&&òñ©]û–Fjõz”GWèÜy]ìToç îši²óG½eÎJAçž3”O/GGc¦ä×oÀllN§<µFñÅ3èlÛw ¢®Lü±/@…’�L¸iËWN6¸kf�ÛO¯ÑV�YÿDã]6^gº‘qóéµ Î/ÄdÝôÜÂ53áÁùÏ·JÀsÉD�Va9ä…•¨k»°N…ÁwÞkÙ7ÒKd!Ëåc 0Ó^»‡èµ‘ „´Jô‰%pk‚ þÐÔPµ8Âÿü¨ìšïý<8/F‹ªJˆªøðÎôÏk"‘ D"‘H$‰¸ô·Oÿóì±3ߎˆ¢jŒªŠnh> EQösla´è44[Y+Çžž}_Ãæ�o'Ï“rBÚkk,/|ž¼±–ݶ�Ùöy£-Y½‹É,Y­`MÇd¶s 53+¹i�ßG)L}¦xÓ¾‡’ô¢ ?øÇÀ/[87ÞüàXZÁDâEaø à§€ú³ü’K+èÂc nRª1ÕýJ‘^z盟âßüàƒœ ÿìg¾�GMûû]ᆲ†eÆT… ľ‰·ç�™&¿ä˜‰-X×A®+ ”OÜ�=uŒÄÄ GПB�ÒC3êN²`¨ÆÅw±† æ«‘õ Çç�ÏM$#ì#�$°¾‰ßWÈŒ_£¸ & Þª)˜«o+xnÞªµü£ºuê7™=ƒwô'}âûœ¼ØáËâå&Òv¾e[cãÀöæÎ…zfÀ*ÅÁy:÷ŸE;–°53ݤöò ˜MMpØS-:wŸÁδ}Oêï“=#Ô¯™B‡rz(”‡)ïŸE×lß‘kPˆ”•ë642Þ°m� MÃÍ'[<<×Aû@*^ú쩈œï¬qéX�¥BùÒB‡ÅŽE.¯Ó*-‡–(D ,W/ ¸ºÑJ`¥ÎÕ·ÝÌ�£ÈöApXðœ^C[„Õ2Ô•<� Ù? Û]yÀÙ=!h¹ |ÏÃ9vb*PLª”UPMP"‘\À%‰D"‘HxBtÃÀY@°šCa­ÜôBÚ‚ÕŒ²ÌQTKNF»Ü¼ü‚–öÚ)¥D˜ç–ÌØrÏ�Ó• DP1(FæÚ£šÑ)7RêŠ "Z^»å©ô…¾èâÏuÀ�Àž£øspðO’ø“H¼¨¬ÿ8üýi? <|? |9¨îE$;FATC—K½ôݯ†sá‰g&xìéi]Ì©Ï}ÿT¬|§¾_JÙ„ °ŠÔÈ/¾‰úõolj?ëRÀv(½‹îmIOüŒ+t‘¦Z] ëê"–A %,®ÞD6äCwnDúÄ*(Hié A€` ѵ÷}[[YsQE¼»=(5Ü´öí*þ bHáñsðõ‘X/^\ӍРÂC:=þzÉyÿÙ‰?o„à›PR9 ü ðÇÀ"x‚뉸„#Xéòıö‰£÷-Þ7|¬53àıüÒ ïÜM~`ŒÐ¿™=Ó¦ýÑçé|î$år�Ø4@ý-;¨½j#2˜U{ôðk:Bù¥9(²ý£Ôߺ‹ì’q0]œ ‚DWÈ£¾h¦SòÇÏ,ñÑçW¹qC“ÿcï[sÀŠ?¡Â¤êÇ®Q冣«Ÿ8Ùb¦]òª �žðÓˆY˜IXƺ¨Hå"¯c^» ¹h r‰·½V¢Îaï8ól𰱉¼rr`Ä·!Ti—裋ôbûÌu d²Ž\?…\8584.þ¸<ü&‚€ÈòTëS D" @‰D"‘H$ëP^ºñ¤wnß“w¦±ÚÕ­r5T FÊrgçQr-Qºí¹ï&%´º´DÙ=¢Ô(Š]íG4Ó6ª@»Û¥d@D ]nÂjEìÖá{uÓPr3öâ ?Û^Hïî^FNï®îL+˜H|Õ8 |ðJà~ú³Ýmhß\ù"²'€¸œŠ#.¹ëiÔKvm[ä\øó�_€zñ¡êVÍ*Þš'è»Ó"@ðmi›Ä�íº‚úußO¶íBÈ 'ú8¬(öÙÇéÞüç”Ï> ÖÆc§XK/ PZâ±êî÷"š”¥¿6Ô^ÜÜÅÏ]ñe(k ©<5ÁÝçï±>ùõŽŠ@Á¼[-'j1w<¡•�Uwîò êǾM7p”W^Š=­ÃÍŸÑËöþ îØp0*Øø\ƒ2ä÷:‹×Ï%ñë4hK#íRj�n=}öÁÅGÎvV2@šµWn¤ñ=;1›üí¢”‡—iÿÕ‘ž…ôD�ÆÛwõ$ŒT_ÉB)˜¥óÁ£Øg—éQ3äWOQÿî˜C„¨ñ#ïkë¤øGôÔR—ßyj‘Gç;|ï®!¾kû#5w3çïŨàØS*<¶Ôí¹Œ«eðÚMM¶dH 2ÅÛŠ[ÿ€F¤lzâÏ3ȃs˜v‰ ßñó†‘Wo„^7ˆ ,wÑ{ÎÒ‹íÓ*Ã.z÷Ê�S°c„á[\ýæ}lEÄ—E^IWŸ¢%IJ$‰D"‘X��¼Ôáú1T3J;HiG{ÇŠ‘µr PîàQÖp¨ �ö1¬µIôH —PUæg¥iÛå>D()µÎRyU#–:ª98K #E÷»öÞ•>ÎEøi¾�þððOèOÇÅù9ßY Ù´Š‰ÄׄÛ�8ûÏ€Óôçg¡÷Àfúaí>oÐÐbÄ‹,â„…�[—¡/ÇN ó™;vàˆ´�ë3ÜèÇ‹D,aP—UëÌônê×}/ùÞ ¯ƒ:€vî$Ý/|�âá[ѵ”êú²^äªÂ”�™ã…! âÓXoÙ‚øùøûæ«.…'‚KâǶ§ŠX‹_C—G-14¾aíÛóÏ?Xk5‚”Gh¹åƇŸË«±ðùUž·‹kTmÛú>:ZÏOì|›îßþ D|Ò 0¾ÞQ= |Ôýûö àY§mbm¯,—kÏ\~¤ûØÒSc+EW3Õ ñ¦íÔ_·©y÷ŠNé>0GO:¼äE�k¦è G;‡¨  +Ý[NÑýø1t¶ Ðk·öÚÍÔ¾} 2VuƒUЈ˜�A„” _œmóÿZ¢´Êîáúé¹÷Üp³ U¤8áû­Àj©Ü7×á‹gÛŒÕ FÆnbNàú-6Žf†\9‰¹qL6ªm£.�>ߢüüixz¬R¡n�KÆ�—OÃDÝ¿«á÷sj ½ã zhJ¥BÍ Œ ×OÂT¼€ i¡Ð…z5¼' áÎ’ø“H$(‘H$‰Dâ\Щ�#(;‰bA5cµØIik¨fvSí°Ý,g±e‹Å¹™$|¤„K,/tévVè¡‚ºT–F‡íjq ö€,—;Åj'.¢d(‚պ䧪éËüŠ„y!½ x øy`ˆþ|¸øOÀRZÅDâkNé�ýÀ/]úóO�§€Ÿ@‘ó�%°È \z l˜lÑ�¢4ü̯¼œn×8Ñ'h_!D "@ü^_&Íqj—¿…Ú%oêc#q~V—é>øi:_ü0,ÌD¶ï%î–,\›°LñVB6r�‘@±Uñ?!_ަ\BýýTÅ)‰ÇQ[ôDÀ÷ï“xÁÍ‹TTêÔHT€‚XLü¼Ñªe�uøúЭœkC3s³îÚøv½ä¼÷0Ølˆ;‚Ç„ç.‰Ë•¸#´Yà÷€÷'À�Ì'ßvØGзœ=Ó�ö�ÅkϬéZµ@vÞ0Í·ï¢võ$šõÅ‹‡ËŸ@|Á‹²zz {Ë)ôÑèZ*ä‚\0ŠyõtKиˆ3Ûé¹tëµÑ±~?{‡‘§¡×qËÁ…úų裋жÀhÜ56¾�ê/‹¾îª¶Z“D D" @‰D"‘H$ýȾtú€Õž2Â_~…"»wþ*òÜ F©bh 쥵,¬,%÷g/å´xZ+`hî§,ưe†Z1GÌ.Y°¢j0tÔ˜U”¬—jf–z¶„Õ«yöÐÌeéë<'á§öBú1àIàGÃú”Àoû�œän/‘øÆæSÀÀ¿æéÏ·_~ ˜BÑ£*@„nÃp"C©üâÿs%!Ë«5þýÏ¿‚÷}èZz·o”6 dîë¨Äò»êwûfF·S¿âûÉ÷½‘�Pôé%]:M÷ž¿¢ûȧÑÖRåþŠXTD»C(Üx$° i4È®zµ×¿³ykµÕ굪�%ŒzñÜyDR n±!Qͯ}E82â΃>Ö%�åJ‹” (¢Á|½W5‰$�-�áµ …hü‰^´ë­zñî‘ëï¨ >ï›LpŸ r‰Zòøø@tVtOO=æN ûóIW–ŠÕg^~Ô>¹üÌX«,ÌÆ&õ·ì öÊMÈ@x´k)î�eí¯�bŸ[¡GÃ�¿lšž›·-„èR—âs'(n>¡#~ºhà O ˆXã×V{ñ�þäÈ 5#¼~Ë»†k�8â»âá¹KâsÄÇÌ© Ì_ƒ¡ŠUôð2ö³'Ñ£+ TÌ‘«&áúip®í¢]Eo?GVâ1†.G^6£5/Æj v_CïœÅY­¸sŒ~Û1!OAC MÅQ­“ä.‘xI"Ü:›V!‘H$‰Ä¹P§´7Ôÿà¡ï¦ÔšÌ¬Þ@aÇ ‡ÅH[s™»#ûLqQû Ë Mγ¼8ÌþK¯$¯ÝH½¹µ`FÇ`d2­ìK�…3°¼Æ€— ”å"ŸeþÌA9º|¦vxò-¨©#¦‹‹"ÒÕi”\§š·SÏW,Šé~Çž�é®±Ç�Ci‘£âÏ�_pîÉÿx4­^"ñMÉ4ð_½ØÛ—9àgulð­dæ58×_Õ ë™oVE¸ñÚ“\wÕ)&Æ:Üz÷Vn¿w ­µ2ªÕûã±jÀ*©Æ·w:0F¾çU˜©}~†9`éåÚY¥|î.Êc��ªï׋~l"¨DA%˜·‘в¥"Åæ�í½€ìâ+¡Ù@æè~æ#¨1ÁZa¹¡¢’ˆ©öI Êk©½y9 šÜà£×€Êó æR­#¨óÖ:h\ ‹¸·—Â2üó©ŒKóìÝ6ýkº}úU°}œŠ…h±FXIP"ÀÅÀÛ€i<ŽË'O8cÈ6îhnη67.æF @×R<4GqpµŒ\0[zâ��DO*î™E—»~â‚'|.hUˆ gAü¾p¶*B�Í�Œ74Éî<Ûæ¹•$Þ�J|œ—ŽÕh•Ê¡å"øfB¡T‚¥õã�¶Æð1�ÃTðXž[AŸ\†®…øÚÀPŽ�éQŽ·Ð§\Jõ{·†uÁ[ùï)\÷úÇ ñŸ _§@ðQBýðÎôÏc"‘ D"‘H$‰uóÄÙïÌ?wäõ¨ZÅYh_PjÍœAQkì&{G±gîa–æ†h­ °÷âk}"kÁ‰@ �ÂøTZÝ— ó³°¼"`2—¿9´¶ö43ó¯ßm®¤Ì0¦£ EEÈÍ’ŽÖŸ‘^�C»wüKÅëÏ»9 @„ÂÏùÀ¯ßŹqÈ ?›Æ'ß\ üðZè�7W¨eC‰7ƒø,Øô×L«¨»Þ×¢�*ã7hCÑGÀ—ûëWž×È·½ŒlûÕ�gPu¼uLtKÊ“R½l�1¡`ˆ:Aü  ‘q¹Üáêz–>Ù•/C†'¼(e@—æè~ê#n @ML4‰·éóÀò(óãÅjÜs1&úÜÈ‚óÐÚË�3*>©x‘ÌÇüºùz'¾UD ÍäY�ýu=°ãö@|üSÖ@œðõq!h}�„eA]¼ø ³H ÆŸEí:Üq½iêw6wt75GÛУ\êR|ñŒ·ú Ä�ì‚Qò+&¡aèa•ò±ºÍyg¡xˆÏÃѸÀ~"\"•Ûö�ÔxÙdƒ™NÉݳmºJ¨[¨!$.I8–þãöý÷Çæ³e�ìÂQȰt-zhœÅPT`C£çFŽÁ BÎvÐûç£ë®+ZÕ?þwÐç@•*Š*Þb2†„$%É\"‘H$‰„'ÄYØäâý�ü,¹™GUJDT JfNêMù£ƒ7‚€µk7�åÆoøÈ ¬,ÂÌq(º`䫟Ä'_æó/3Åï…j9Äï�so3,ƒ0�_gbýÅê¿iþ¬ ˜ ŒàŃË7Ô©]O!#¨f¨š^ƒ"ä²b÷�}ºWf5syŽª‘Ë;ÓWZ~Æ_Hø³üp1ðÑ$þ$ß2<ì\½}p˜þ UÜrYï¢-ˆyn®z ëë¢B‹µAÔÅø~‚˜;¢J>y€ú¥ï"Ûü2 «Zü8ìÌa:ü1Å¡ÛÀvcnÆ\ÿ�Ãã'Æ• îzõ–CB!¿þuä7¾Á‹?!êç$.wó÷ɺ€V&à˱ǯ©‚Ç‹røöqçP�)äëâîø\~­qyèηáñ׈ƒ K:Üü5{ÍÿHìø�!&'Û'.þˆKý| …£°®t±ñ~¸k�{ «Øx:k¶óü“«‡WZ<4²Øm ��Ô¨½n µ7lC&ê„ñmÊÇhèH/GÁA.§ñ=;1ûG­'жÿy‹t*ˆ@ˆ‚ ˆ‚ü|»O-uùÀs+œm[Þ²u�k&ëÔ�€ë�JŸ}$;=§G·®h…jXî9Ù¢¼å4úÄ”J…šA.EnÜXùã›i£wÌ O.AëKé‹ë}J?¨»ÔשïOÒÿì‰d”H$‰D"±>õÚŸ>úSr¶µ K×Élë2YÑL–A (¨°"¶¬k­{º˜:vŸ½|×›™ÜpU*ÉY¡ Ãc06 &ãEG ê?_×q‹Ap�+¯œ[­ÔõýeU"—jqmø±…}øò°]??Ÿ‡óPüyá– �“ùXZ#€ñ" ˆ+(…ü�UÌ‘å£Ò¶K*¦DŒÒË¥S–×nøßºyälvÛñ7Š Z‰xP¼á¼ßæ%LóÇ;~øy`ýQà÷�ŸN¥u‰Ä·4Màß? A‡PËA,vÝœUE #¨2bEX§A›N`éå⊇·�ïyfp3Öà «â�³‡nÅ.>ºóýY¥¿u’V@nþ~•9“åd^I¶ï"È3°à,’ü8)){ˆòñ‡AA3ƒ¨¢"UWt8T!Ë‚õÅ‹ø±Ðß}žúµ¨ÎCñå>�oœ‡ë‰¿^]ýß߆?·Ú¬ý�=ûÿbrd0ëmû÷sl¬Ü¡ÄÏÍ:×HЦ/¼Ë¹…;0¡G#ç†W?µ¹1ÕÜÙܺØÈŒ¸«Ë'(˜C;%=�È\;]‰¤³mŠ{Ï 3í`.wÔÇ’¦¿ÕŽàëã×Hžõ  �ŒûçÚZ)ü a_Þh¥ˆ�§ûGÅw^içœ-šüý*Í 90 [ˆÑz_„ÕÒßÒÈ�}ÃôÚ`®b]ëðû ñ.à>}mU•x¹$Y%IJ$‰D"‘âÔë¿û¥_¢]Ž€"t‹!V‹¨æø¿!4h™‰Ú µFÕšò‚æv{ùä�Ö4LÖçb`| †FùŠPÀF\¾‹ßXBCU„ÈyÅ%JX6øk`…°<0ZÝqµ-_�oCcûæ‘>ˆÔ ¯óˆË|úŠ˜?Kó—o.G�¶’߷Ь(º¼:gZö$bJS‚1¥=ô/‹7zÓÖþðñ·I© ƒÃîûCà^¢Ô÷Ï_ü:pçÆíÀ�÷§q‰ÄKŠ-À/ï"@PË‚ÍþÀ‚Ô‹"ñlü÷ŽÜqà ¤6L¾ûÕdUbûØŠ�G›â¹;)�=hµ¼äûŒQ �äÝ›!‘E³k?Ùþk�áAÈ?.?ÖcG)º]]ªÆи(‚/ �}=&,s¢Ä ð×›h|—ˆ‹9‰Ýd‚ø%~~1ñ¨*îZËï×íÓ¿¦çm~’¸ë5í#æÄD�ˆ7ôi#z¼ž«¶ðº /\ |70qWëË—W1&³ags3[šS­ÌUw,Å}³”O.Vx®±�CdWO!#5ptÞ¸Ú¥ø³uV=êæLŪ^<Ál‚†U`K3ãê‰:VáÞù§ÛeLœ©º€‹ "h¤$*­õ†$.ÈL4�‹Fa¬!Váè*zx �÷%ÀHNÏ-œ*zß\eûý‚Ø\}yýoï¯ÄR4®sjåíN1€‰$%‰D"‘H¬'ý¯~•®Ä# Z^2y[v÷ÉD·œÀY Ö Ö8(×ñæn¨×ŠóØíu@ë]‹ îØÒKy Ʀ`h˜/ «` D–Ðíƒ (Š®Ò–ˆ8â0Tο±”EP/ }YhÄèœ }…' 6¤úa-œ��Ö2 q0Ë–ìžU¤£èÒêÓ¶3ˆ±ˆ±Š±º¹þùî›·}‚Áá‚�Á²öG�§´Ê)@P»}ä�€Ïñ£þ± øeàœÏ9woHA‰—4׿\_±Ê³ÐBÆ‹ÖÆÝœ±80&Ò¦ÿwÚ—g5ò-×¾�®S«:ô2`  J9óÅÑ/@±†o[¼…ú>b"K8.'rhó(€dl#ùU/G†7€ ¬‘ܹ.ÎQ>ôE왓‘�p¼ä×'_(¸í£óòט@ørhfü=êE°ð^GpZLQ© ãaâq…47'x!Î�½ì¼[úÄÝ ˆ\?ËY§ì+éŸ>Uݹ_|½;öÄD¥x½q¹m ˜æÔî�íkÓ�¡ÐÅ.��Š6 � Ù…cd—N@ÍÐyÿÓ„ïµFV.Bõ2 Tbõ‘6¤z â‹ö�Ô¸d¬Æ‰µ’‡:¬ºžPü�–˜å…FO(òV¯W‘uçͶz"NÃ@HÇ¢O-ÁñhpŸ•a$‡¥"ÿç\bù²P ô­Ô¸ú(‘HP"‘H$‰D?  V1‰H‰j†£xí¶¿Á–’ìÈ�Ð)7jP´ÌQkPÍìXc§Ôë5Pt8£Ü[Çn®y!(æ…¼ãS08Ò_)-bµZ,‚hP†ÿP‚_”ƒ�™onï*ΪŸ¯‚ú_,qëƒÆÖ¿fÞeMæ7x¢¬.ÓlY|ŒîÜ€™){nß(ÔoÚ-´ŽK§\FŒ‚±:ž?ÐyÓÔŸ14Üýÿ ß;øN)uEA°åµ[¸——�_xïðSNÌiÒŸð?œX´š~¬% @€ïw?¶é`jy°Ñ±ê …cP#T�ˆÐ¢€)DÈ&�o}5Òƒ�·°¡X:JñìçÑÕY7 Ü›À]Y8¶ÌTÅåZ±€Qñ3Ò$»è:Ì–}�C(Lõè´)»{ôÉJ[�+tcµžë´p¬àóÐ=œ{u>š™ÀåŽÊ³Œ t�PðÜ‹"õÏšp3[¡Åèྠüü)�và´VÁ_5aîï¦M#VAºŽÕOˆDÎ5CŸñŒÝãÀ[�«‚{¥Ï¢ÖB#ùÈèîÁmKVóö‡ŽJELˆˆÒ4dWLQÜ5C ßÇò'ÖÒWÆ M(~Ô�pñh�ÝC9O,uyr¹ P@œTx(.üD™È9Ïĵ¥hD ®F™ ûF`× + Xì¢�/Á|'ƒ}F´¨;æ¸ÕRý£Nr7­k„›$p‰D€‰D"‘H$ú@¿÷àg¥» Á¢@Š6}Ôž?4#GÆjŸ8öOeµÜÖ 6C5CËÌŽ6·I½^,舡<¿‰Ý”븅S V‡ñI†�¤,«¿`jàÿ;ò‡�š9!㥈¬:ÁL—‰çÄÿ’Q܆U.T°%=águ9"üøc) {´…y¾[�‡dKËrç¸tm 1j‡x¼ûºá÷39¾ÊàPAc DêÔßûø»¼WA(;ïºôç�'øgðÿÏʆ-çÆŸ:±è¹ôã,‘HDè Ê:Ôøi2c� .Ž„bM%M`…jÑE2㯇ŠK0ØDmÇë0ã;Á @Úš§xîŠù§\qÁ¢r¼ÞXýœb–+¸ër²Ý—‘í»j9xkœYʧ£|âKPtªquˆ‰6¾Nƒ±DĘªØC`ùŠrªÑ5ñ‚–ô 6Þ_€XߺKMP®ªÚ¬JÏßþÛºyât üXânØ$&ªœ³ÛxL l1)l#~^!>þÈ}{�¥îNâÊlPÖ|ÿflº6²üøÂ@¶´6%*‚€Fz�Š�pÒ?VŽG�^D×¾’–D$ßÏXÍôŸáÌpp±Ãs­²bŒ%(8ö™‡/�[ÿHxN•Á90›D9µ†>µ k%g|á·“8  ß¿pãÇ¡È{EH@‰D€‰D"‘H$Ö¥^{ïCÿ·,v¶ jEDË«¦?U^6zŒv+cq©žß:{ƒ9Öyƒ”:ŒµJcGš[¤^oVÜ�9t,£Üï„ UW AÎ*¨Þ€ñiU¤ëêb.ß”Ðý‚}DÒÅaJ'i°¯¢¡ˆ&Ög­ ´–áìiP­Äøñ"�3Ó%{hiYÂç¥EÑ•ÕîiéÚ5;nïí^o>ÌøÄ*ƒ#]œ$'»Ãµ�}'"ðäÒêü‹«8Ä·0ƒoùùk]œŸ—snÜ炾ߞ^öD"ÑnÜ�17ÄãõÄE‚Ð5˜V®ÈL%ŒääÛn"›¾TÀ€KéPœ¸‹âÔ}€4ê’Lcñâ×d&ºÙŠSfë~Ì…×!C#UkëÇiÏ£|ø.ty>>B%ˆMâNÔDÕ[éÄ,®L7зs/ˆ_�%€™ÐC à�¨åÛ 1²®�ææQݾáWõ‚íÏ%apM„ÀJ(~½†ÖEQ‹¡>í†÷ÓG¤@#J9pð€Ñ˜ˆiÃDÚötÊz~vu“i£µ.‰4·þé/‚(á²Ïj±Ú1﫨gÔ¶J¡0Ó.9´Zv¤²®H}Wãã”swg^3UGŒÂp!VáÙUôÈ ”QIÐõÛÇZÉ—@7x�Ç‹ äR€‰—"yZ‚D"‘H$猑Õ �  ke¹±ÅõÍ»åxë©üAûF³h®FEPu7Vq®ÙP3_bîYÁŽgÎ"¨X°€Š�$EfŽAÞD' 9ñKaµ²�¡u™IÏ0F&��‚ƒ,R„–TÞi{à´:rz:+h-ÃÅú©ÆûÁ ¥’=²Jv´�Š ª„1Œ @ÊÉÖmÅ%�[É'J2£8²C ÛEÕTvêùò·¸ðmïË)à?Øô¢'‰sBÌ~Òç&rîqõôu©hèBÎ*€�O]C¶õHÖ¬ÚCXŸ—‹�P»-VCi—M®ÝˆE‚ËU}±‘àz‡xÑFF§É܈™Ü€õc‚:�ƒ®,P¼{ê(¡;<¬·”ª/Ç­ÆåxÜ=þÜîàüZR*ä”À*‹ ]ÿ¼Ô=#D|Yøo½«°Z�÷ƒ†± Ü5ø~Dk²Y¦FÞc¯ÚÿqŒ¬ãÚ,* ™u¬{ žx{éÓ†ï£�ˆÓ÷þðº°=Ÿ,pðð�ÀM@m÷u¦Ïœ”zÖ-6�§�CÑ¥‡¶ºy¡ÍÈ 7 ¤Ô/eõ Ìц[·`{£²©¶º§žƒÖ*Ø é¤� ²Œ^n f¦ vó"Ù‘6àZP×­‚Xwlµ[î)¿Pì�»›@~ñ«©_û6ÌèÉ�N§gñÓýü_aO?ç×Ká'²)W©ÎEÜ€ÐE�¿ÇÇ8òë�‘s$jÕ$V}¾,â…‡ë£Z¦êû0â穊éÚ‘Á÷Ù.|§½æ|'þôg�DEްÎc\™Y· OØ—‰ŒEÃóH{ñ{ã}›ˆXÔ>üð`d\‘<áµ:Xku·�>[LœT#eô6�4"¬‹öG}WY]ŠÙW©EÀZ8´Zò¹3kÌv,>n%�ˆ�KT̉¡"½ä U�´¢Às«èígz9J•f†\2Š\=£9¢O‚²Î8ãcA�u ”bÝ€¦â‰ä.‘H$‰DbpöØOÈñ¥+ð v×ÈÝÅ·múÝŽ¡µœ³´Pgy¡ÁÒüÀ iˆååa3rù�d§Î3Ëåz¿PUêìdNyÑ v:Êi+X Ö»‡CF'`dÌo‚äm˜ô×n/V‘ÂBÇŽv –çam âãü�µ €ü¡æ¹µ ÎP€‚-˜[mcî‹Ì�9Äðh‹á±5Æ&×*ëÊ’Ökqø]¨f®5±¨šò•;þª¼vË=À¡oáGœ‹˜w{87> ü{à©ôâ&‰¿:Ò¼äµW`ÆàˆÇ†©Xר»^¬ú8=Ò˜¢¶åÛ1£ûè‘ãsK-—(N|žrþ1À!ø1�U ¨w¯¸y¯µA,� ö�²]—“ï½LÝ�͸dQŠ“OP>y/ÚY­´ÕÏÝ�ë;°sqçñ€Œ_O|[á}ÿ,0„±šüqf|™C+îÛ¼„‰Äzre‹0mÔo±lûMݹñdL¤ˆ”Ù>[ø¶ÏCâ®Úâ×÷o3âÆÍô{8fí3 \¼Ø�³ÇP%.P•ÖdskÌJ{\ ¯VéãÞ,@Äå }âE*%÷' þ¶˜ˆ ¹°4þ݈DDÕª$�YY]§CrÁ(LÕ!d®ƒ}`>øv#ãôÄÖ¡¨þ{7C\HCÕ‚oÖ’\À%É\"‘H$‰Dr銒Òµuê Û€p£ˆ(™”vgíUÎ3G[ä�,#+ @ÄM‰Ãœ-0·/b7Ô(/@낳.± âc-œ…Õ˜Þ€Ž�IÂÏ‹F&hf n‘ù˜�‡¢ƒß,2�ùy¾KþÈ ÒѪ÷zUªå¾AŠ}²„±sÌ‹EŒ’ç¼õOöÀÌ>±šã7DQÈL»¼|ãÉo!«ŸK€_^ǹñ¨‹óóéôÂ&‰¯«� Þµ˜Ë!ˆEƒ/£êZMÔú:C³åÕäã×zI(ãr Š3wSœ¾ ´ðBÞÒŒAÜ.€Üç­€ÖÛP5Ó»È÷¿§Ga¼Ÿréå#w`—gññ}‚u3âsqÇ"~j+bš·ÞQ°¡x…YàRÀÚŸø2”pó;§ñcÐPsñ¡ÅøÜÕiž=­Û§Ý^vÞýpÖT$*öôw·F0{ ê4¬�\k׉·Å×GÛ$8÷s ® úÊ€G�Ÿ^¼  æÏºó ÉŒ–Óƒ§íh}>;ÛÚhÚå�qÖ“ºÂ?z%$Ò†@\s‹ôáŒÂŸ5*•<˜„øÕöDÚ—H{²Îõ‘2% ˜Ój‰>0ÈþaÌ¢ W\¾‹�‰ë£q|^øUß0ªšB &É\"‘H$‰Äúh-ëÆY_îXº¶ @­î7ëC¬=‰ìîA:ß¹�îµãè ‹wÛ¦êr|™ỦµÏ-’=݆2 �ÑKâÒE�Ãâz˜”^”Tt`ñ,?‚.�A%Ô3ÈŒ_{200Ȳ’ß¿Bí¾%¤m�H=´št0§{Ó$ÅU#J¹ö‚‚(Y­$Ë,YÍ’»÷ª­™yféT3QÄIŒ¹N6SÏì·€ð3õBú-àÁsæ€\žÄŸD"ñbàb÷xwcs ®¼êÎ*¡`P¹’ÚþI>vd:x¡"ÇÅùyœö“¿Kqâ6°EU ±Gà¶Í¡.® ¡ë3ÂC_‡Ud`‚Ú¥o¦vñ›�Áq°xaÊëò2݇?Cqç‡{â�(àn ëY¹ú5‚êº"x‚ö¬‚P�_(Äî D#õã(K�@Œ2îX‰Š9`mlL®Þ�OaÁN�üJùú«þ©*ɬãb-#Äß $a�¬#‚H$�×…í…çaÿñûÍ:nì²H�Ygü¸øÏ.WÀ†ëÜ'Ñù8´žwŠMÃÇ»�i&Ý`µû# ºuS :ë‚úRý­�4îM…¸ˆ".V5J E!Šjk+$ˆ�¦0ÓFï>‹Z†B°¡(¦Á\c„‚—'8W7ÌÈÏw»&p‰D²J$‰D"‘X—f¶†ªp"€²ÐÞ@(þˆñÇèÝv‡z£N&ؽƒtv’=³Jvp Y.!üOë’…’=ÞœèR\:„Že`PÈmºëÔÂÒ´V`j34Ósû²Qh­Bk™Þ:€¸˜L ¹é]EDàL—ì™6f¦¸çPB÷åC—�BM`iá,pºòÞ£wœešßrò Úå$"% øw»{ìÐ7¹ðS~ø¯Àý)�÷ÿH>�‰Ä‹‹@A×ݘô®Õw½wÃfvRÛôLc3(`�¶“{ȶNQûvÅÅÑ1ÕvüXˆX²ø:Q‰Äÿ‘ÀPÄ: œúùÎkÉv_bÀàÚç² xöÊg¾”àšS¼ýˆBnèåhÕZÇë¢Ä€ÚyT\RU,Ÿ\?ÞH¼�ÅŽÅ׫«³~F01ÁDŸbÜE™D® ~žÄÅíoÒ#ôGð3PqÁe]ô\,ˆÌ«cÑÇ¡¼þª¬‹5Ÿ%ŽÄÛT”$%IJ$‰D"‘X»o|^kfY:v�róèÜŽòº‰§±¥ V0™Ggmc¦ 1P¡Ü;Lþè"=‹ RAƒ_rÄgÙÓ-ät‡âú1t0ÃG…5 ÄåËKÐZ…ñ)K ÛñbO{�Þ9ø )c@ªB�?逜ì�ï`N´¡mÁà…:¥‡XÀ¸ÜÕ•{)/E>vs3§QÛñq£p£dFó;fn¤¤¡¢VAP,Tì%n¡žÙoBágðnà-œ‡�>œ~ƒO$_5¬V-re=¡.uj“¯ Ÿ¸²œ¬cé娥˜ý"ÅéÛ€Xšx¡#ˆoáE ÜÍáÇ&"(±�þ‚ÝN¾çÕÈØ4€wó–»¡ÔA—f(žº;".ˆ‰xKu}[�,b­¤xk "õ8L|ÿ^¬¢™©^ ÕØLF"®í\yENpíø{Ý\4ˆ�â&'È$‚ó¼n›ú-{íù_$"Îxª½Ó'Ž MúZïx4WB #‰Š4>רµq³ŠþÂKØ^P‘B½x¶Îu <<ê\Ã~0¦$ö "ý)™)Ë©¡Óv¸X4ó­iÓµMB4bÖÇæªºL"è:±†ú#àP îÕ¾ñ…ÖíC圭�"å}æ,ƒzM:»·¿X,Tæ¬à‹xzñR D" @‰D"‘H$ë“ÕÑÆQ™Y½Á äæùÅ==(êþÍÑí£³v�f��®b– ìŽìÖ²§—1O,#eä—M*`–KjŸ9‹Ý7HqÕ(ZT«b�(PÂÙXš‡‰ 08ÌK†ÒB{ÖœØÓi�µA‡,«þ‚‰TëÌ|‰9¾†ë`f;ÞºG ˆ?Å—z"]qõ8:U@ºV­%Ë ÏR«*¨K8ñ0Ï´6ÈLçrPÍ0XБú‘âÕ;žþ&~F�ŸqV<5ú³ üœ³j§D‰D⫎zqÁ»9³^H¬rÄ4ilûQ¤9î-G À€]|Šî©O£ÝY0îÞèF­·8‰oêÆ¨Wc©·HB£=áÇlÚçÚ¢·Z¬R>yå©Ç t •Ð긼PàÊ‹+þ~ o|=Humýf¯sÓf*s ® ÖBâ.¥T©à¬ºT¤Zo„ð\a…‰‘÷•7\ø4j%‰¸o³q%&¼˜˜ó°h»úXüª„ã Ç@l Ñy„çñ¾Ã~üºTÉ"åºN[ðIà.à­ÀõÁ\âB\(2yDy»Ü8|Ì®v‡³…µ)±šW-Ý‚FUK¼~–9ýéç†Î[–‡øï ÖN ÿíö³BrT-à >^é3ÿ˜€åó8F@K*ˆ¾.‚ŠÊ«êjUÐ$%IJ$‰D"‘èƒn:ÊÌê(•3íKåøÊ]:ÊZ(yÔ2wæ96ïØ Y)�5‹;ƒÊóG(· �?°€9Óª!ƒÅ�‹ÐsgžoÓ½n »£é•µÞ-Š(”̇ÆLnèåß’´×`u V—¡³VwD Ë×{¤«È™.f¶@Ît0³]¤£à‰ïÌ(ñ•åyC”Ž@. 8éXta´¬¡5!lÄZ¡,MþàòM€TDÅ XS¼|ÛgÉŒ~“?xðß��œï~8‘~ú$‰¯ "�ãŽñ¹¼e€©!ù¨·ÃÀåhç ÝÓŸ¢\yPÔp„–E¾O$²õ®Uñ‡1 ¸ú¬F¾ùZ²]WƒÉÁFvBÊ’òèƒÏÝÚu7ãD ÜÒ&âELÁ ¢nòüØ·zh%«Nï žO&®ÿ \ðǾo?W&n½Õ?zçju°ù1{Õ¾ßÓÍó¡Øc<11Çe‚#°Þ!&X„çáuñþ₊;¶Äç£Ñ1Æci8÷°.2>"cŒß·VZÞ |x'°§�`æëb׈ˆÕ—‹�ÚªYj�›¥µqA„XÌ#ý…üû§ô‰™CTà­ŠO"qâTëE ]8z„8Ú¼Q”Ðú' Ÿ°ˆ?ïóQ7žðS_’\À%IJ$‰D"‘ ?åežÉž1•ß.‹Õ<ÿÂÌ�Ýïœþ ynQ+x¼[¯Öò):�óh4 ª˜….tT ܰ¬Q¼bóì*ÙÁE¤° ñð½²ZRÿüYÊ”W�aÇ2°Ä‚úUètàäs�×`h†G¡V盫ÐZî >½¼(Á0501¡+˜…™íö„6™é`J�ª„nøbÛ4Þ ZÏz¢Oyþ0ÒQüæ>/»˜åNf›Í‹Q½Ez ‡ZÉ/ö°TîALénSA@1vãàýöŠM§¾IÄŸ�_®æÜ¸ø1àžôS'‘H|MñÖáF¥~b×[K'ðh±F1w ÅÂ=à,OÕDŵ#î~w‚ÇZן¸k7‡£ã ÛpfÇ+�Áa0x `é%;w˜âÐíèÚàãë q«€PaÆ 2�åOUTQÅá×K}< ÄTÛRßTH*Ýy×o¡°êû¾ý|±n.B­gõâü\¼ëIÀàªH÷eÒÇÂÆ†«»^_ÁýÚG$Òuîí?¶þÖFq·vÓÇb(f�£ÑyÇÛ;üàeÀÛ�ñ>söÄú1½ø@sv¨¾œ-´&ÌZ1ìgÜW‹ŸQ'$.ª„"T(Èq‹œø¸\[q¡6ÞŽŸo„¸5TxO8Ác$l/Xßõ¿&E‘h—JHÑä.‘HP"‘H$‰Ä¹¡;F—u¢ù˜Ìµ.Ô ŠÈÌÚ•æÈêývš%ÄhER$ÛÅò¼!ÛØ(#¾íÑi,ñö¥Oß�H�§¿p¥~,‘ØGëÎ5þõ÷o¾¨­3ž¸P‡— É{ñ�ÎØv±dZSÒµuXgµÄ=†žKlá+ŽQÆ(ó+Ñ û¸´‹–‡ˆôsý Nç.‚Ip¢DñË=E4xÅ4ý×2‘x)"Ü:›V!‘H$‰Ä¹P^`™™®}äп‡ª* eG:75ÿšî|ÆòB“…³Ã¬.²÷â«ÉòÝÔ/“®ie06å7xb[ vÔ‰óì µÛf�•rý_÷UÑ\(/£¸t2ÿ‹jAq¹ö’¯ƒµ:Ôÿ.5 Ö —çu¾~(¬µ`uZÞµ[ÅUŽ÷)î7ÇÌ©Ùѵž›üÊ%"âD‰ô{!É·›]Œ¡ñy}½¥-"dEE¦œYC\dj™#r]­B—Øá½ß ü píbS�QªF¶'3fc¸G,™ï W)1Ñggùy$Ö꘡8ÎOó}ª1÷�ýŒˆŽ5]h‚…4ÇS‰:…âsCd-¾¶ø#ºïý0ªŠ<*�úõ¿ ühú]"‘ D"‘H$‰)�«¼÷‹ï–‹Û¯@1ª*`„gÆ÷Uÿ…ÉJÆÆÊ,N¢Ó{§ØbAÖ+—T:‡%'¿/Õ¥Ú͈!ãŠü3—ÉYoÆæW…0 ý:öØ v)Ç >4!¬oC}iñá[ja¨çËn²œçu‚Ïp †Û0âs#„îÓÈç##‹99ºº ÈNa¢á£†x®Œ¸¶iy @g³Zì©®ŸÁž�ÂЊUÌ…m¸rª TÀêM»€ÅTŸb}åÓùÇ}siîMS‚QÄ” 8±èÊøÏ¿ú_²ÐŸ¼l /üð£NȹŽ�ñ«Îõólú˜I$/9½â#ÀýÚA‚ÇÃâsåÔÝ=LïFªÁ£à>ÓÁ;[ðâ�ÿÿHC  $=\áòfä‡î#¿î�>ä©ÁáÄŸJ©.?DyâSP�šãªF®/.¶8ÁT\X»È=r×ÕÃŒñûQQH‚L6~\‰j÷-"F‰ÐÀø¹t¶û‘êõÇÿ�^àM”&¡ÌÀ´ a¾ôG�ÝáON4¾žvGNìÜ)×cÂðt‘¶øý1áLq'Dæ ÖÎÌs+ð£ÀuÁ1BH¼Í«Æl ekc¾²þ‘üay ’Uˆyn³Ô‹ˆÚ»÷ÿJù]7}™<×—X ş׻-êfñu·™ÙOqä혹ëÁà7 䀭29ùqìêS¨_K\Ð7w(Âx÷’ïß&¾O38sÕ‹3·)Ó�FÆwE�ƒX‹fYüáyøZe†Æ�@ÐL®è5Ëÿ¶úö×|#­âˆÃ´åÑi?âç´‹(ñ¾ ]¦8Šh[O|Œvq©mΰ­ÕÝ?VãûñzäZf€wºü@¦5?�?×®Í!£²oÖ‡KRÙ"þM\‰gzÞ†M‹ãÿŽÛÆnN¢"Ósy‚ö­¡ßÂü?á]•)®Ÿé9…BPç= ¿“ŠMP"‘HP"‘H$‰¯CbPf�÷<ø§YÝ(¨ Öµ"Ø [fUó+Õ«–Þ(KK°ІûFçAû,íƒÙyv‹lNÈ?s‰ìáUè.‚„d‚.æØåºÜ©K– ì|ÐPr¨FDݵþah7‡k7«ą̈|²Ó¨ÔÍ-͵ñkÍ$XnäÞ{°Oíð¹¶�ì¡39 N&¶*d«¤ÞlVÈv‰¹4†aE˜>B‰Ä7J85æ~QÅ»€šB‡wÅà÷§ˆ#�ƒÈïóÛDÃÇ™…›(®y;Ò߇wú4½'vxšòôG±[ç€0lœ€Hóéx fùµú2ÈÛ 5® ®Õ_'š h$ôœ¿nßçûýœþÞD£@` Çòó yöŒ½õÚ_°ßòªÏGsд»t4zÞî]:áø´¸ZZD™ð_@í×Öê¶i¿_íù€Zæy¾BË)`vùºdÀý.?PÏ”qâý“ªc6† RÚît·K¬.ÄC§µ„jÓX¿¯hìZr ùöV(¯D(œG¤=¤\x1ÒâòD@IJ$IJ$‰D"ñ| @¶ìø•'~@.ß$ª¨8ñ§‹Z£3�}ÒÉ ìbFu[{Mj½kF­Ï¹c]{÷A§Ën1+cÌ£«dW7¹<šöûÍ�ö@"fJ ‚¶¶`%aÝúöÖÀ$¾ôÌTÇæ©Ž/`¯›…Âð¢Q•på ¶Á8ÑG‚Ò€ÙT²ÏmaVª¦qj{tQ*`ØF²ª<^ü?Õdvaò¢ @^øYþ'à/í¬ºã˜¤��D"ñ�$!r?ªÎ5:z¤Y—ˆCÆ·GÎõ}š¹¼6A~é,SúNÌâq0€ÁãêZmPžþÕÚ£ àçWðŠ_ƒ»Tƒœ<a Ä€)b—*á5jæÇ‡)î¡°îvñBPV/*5ÆÓÌlèµËÿ®zûÝÿ•"×–AŠÁ±qwާ]ôhD˜:¯£E‰ºn¦žçëÚ.Èøý¶|IA�Øø-¯G˽Œ½.áõį?ØŸ~x‹«›`¬Sò©Öù�ds4/J ýF(†(qHCQÆÕÛÅZDž˜ƒQâçù� @ÞÔ®.¬·?­�¢à…‘äJ$IJ$‰D"ñ| @Û£a–ÿö©o5'ß#¥]ÄjT3�)–¥È pd ¹ û ª[ºØE @õ¾/�þ¬suÙ5 æâ�ìáÌckÈêDhEÕçc‡O?6,ãcíjþVê°nǰ7/`÷÷@„�­u¸r Ô‚‰ ?`0ç&ä �í ,àPk­ &+TŒÈبŽòkå=óÄÜ☙ْn¿zQ /üäÀŸsy{–iÇÿø{À¥ô±‘H$¾á(²Zò¡Ó‚噈ˆ"A®‰:„<âÚTQ7&¦K~à­äûî1`ðÒD5¶¤¼ò‡”>:¡F$¢ë “À#±äë~ $|-�5ûy‚>믿!eÆõ®£P ×Î�_—ºu¹�*öÌ} zë�ÿ—\ÚŠ±’vÏs�´ì‡ - ‘p1¤Eô±÷•´ø¤u—n$Ùµåiߦ=ž–PtÓÎi9ïðÇ�ÛðÈ”qÍÔŸ2©ŠlOfe{®½c¨nZÀ_¨Ã»é\ÁKFUÂ¥ó0Üc@LTø‘±’?´�œ›€Œ-5´*'2¶ëX»Uí-¯|mþö-m03?yÑ /þ|ðÏ�;Ù¿ü$ðPú¸H$ßÐ ¸¼(¡H˜kƇBC��sÍDœ3±³bÈ÷¼sàÛ�| ÍÒ@µþ(åÙ�ÖîÀaH5Gc_cŽ\°&?^ëŠ;ßUÅPcðczq*˜7ØW‚{�ŸÏ†ó8t¶ûyûºãÿ‡½ó†g§„mÛ±Û$œk‰;fL0æNáÅ}Öí.£ðzâ‚U»ÛH"Ç·­�–uìÐéϵcq´¸•¢bUëýK¿Ý ü°�)"OtmÁ>T6“­ñ¼Œ&}ABñ&>�Àe“Ç"cÄ…˜·MLHjéÚ<ÁÚÃn‘6ÁÉŸ§»€TBW’j€‰D€‰D"‘H¼0�œ]›Ï¾°òZÆ£›ãCÙZv•,k·X¬CÀÐŽA\"c±Šw±”·öÑyX°Ä]A(ÌÌS;‚ŠÏužKCÌùrqà„¡!Œ*^ÁžAo˜£ºaž:´[nxÉÙ\£vý Ç�®`ÎL¨ÅŸÒ‚ú02q¯³‚–Õ�ªºbç·>ª½üŠÌô×Ê»¾Èòü€þ\Iѱ/˜ä…Ÿ›€ ü1vÆ3ÀOÿÐôQ‘H$¾i ð sú€%â.i8[ÌÌõ‡¾Ó9äóúäMñÇÏSžývë¤?ß;bšÂT¸VñëR×/ªhT$ ÜAà<àû"óEÆòs¿–@à‰ˆb�ÛJðíâ¯GssF�_û‹Õ·¿úÓà_�ö ´žv‘À3­­­lCÂÐo­‚‘Ç&~õ}íPþ­=d\àŒ XÒž÷ÇÞ-HDÌÞ�¤h…’(‘H$(‘H$‰Ä $­nuó?8÷:F£YÊIA9êR{²aŽ o�¢è‘G–¨þ¦ÓîPÞÖCg3@�¤!X\†Å½¼PÈú¹0ÄÔ¢�+/ abyAÉ{x½~žê†9ì‘h.Ÿ—Öõsù< ·›Â�q% Èò/naN�ñ!y‚�B#‹(TYµb÷Ž?-[Û§èô˜n©³�Õê[<Èüì˜Ùù’,ÓçUòÂÏ<ð·�¿thg øYàç�aúˆH$ß4!àà~/Ò8$pÐøü6AX5K–îÏC@@òEŠýï [º� ä`½ðƒÚ-Ê §Zý"ˆÆÅ¤ÐY ^h‰:w�à¼X¼Ã)tôzTÌÁãT\;‘uVñ"ëõøk5f`íù•ê»_ÿô;%ÀGŒLBvÞÖî,bŠØ�o�øj £Ö.ˆÄEž ­=Ó£?N[®›!,rNK>¢øšãsÆÃ²ÙðuouzÅs/í~(òo‰¬96–iÔU…QÙ3[ã9Q5ˆâI›h3]üQ'ìú2£Ã†}Ú.æð‰ç,òŸQB9˜\v')†}KP"‘HP"‘H$‰HOLþ¡¯ÞÍÚp_-þè8£v¨E qÇ^à[enùhöä62QÀ¡Áìu]ÊWõЪ¡+È—Eö‚n��Ò"ã VðÜ6ª�Q½_—¾î÷}¿…LÐù;WÀÕMŸÛæëžkßÛƒÜð²c<„õØÞDÇ�+‘ZôÉÜBÆ6þ¥^}Þ„j1³ºG¿Àææ)Yž'ïŽë-Ë',Î\*ßvø!fgJŠ® ÄŸ¨Uø1ÀŸþWà;ã—€¿œI ‰Dâ›ŠÜ @F"…HA_¤!ôGC¬™‚bé-äûÞ ’CXšîµ”+Hyå M Õ8u„ÆDÂÀ…bŒD¯)ºüqøc5v,^˜BQ ]I€i>¾ Wú¶ÀEP×Ug·|Û�ïÓë÷¯àÙmŽ"ÂKL`gN“pÌvçNLœi óæë&2o|?F»dÛrèì0$»ÉÓöÇç÷ìÖÔrnlž�nÂ#AIKŸ¯«Ë4œôŵ©‡ /¬û'žC($tèŸw1(’mêÚÃúî@Å{>„¸½”@‰D" @‰D"‘H$^ (ûýÓÇͩ՛°V´šäØQÎdÜ£u¨†�òž·pÓ ÷ÊÄbžØ&{| ™ØàŠÆ¿’(_5Kus `P'þ¶òΠÅ=°´DÒ+ö|³½E-üŒ¶›aÞ_wm2¶äŸßœ�†AYðè|Nyß"º¹~Á\¨žemó¬lŽÎa:ŠîSTbòJ—gΕï8ú%ŠN«´ ñç[€ÜËÎø,ðWŸ+ÓD"‘ø¦$3ÁÈýqÇJÆÌ»el&ΗÍÝE±ï;‘|Áõ»ã ÔäPm~…ñÅßEÇW"bRàÂ1P‘J5:Í•™¦„¾ÈüµÆrý`ŒrÔ»wqûê„ ¿æp_ˆ‡•£9žC{�Gª×û?í=7?}Àßîâ‘0$X›SÅ·· a}yzâëÏõH0V;ñq%>HÜ•_S»ë(ê(Š;�lÔ)Ž×ŽÆÆŽ¸¯Ì�ìMδÜ/ÿZCÇU6“íñ¬Lª.á-4´¸q´éžQ‰žãiíóÄsôÄ�KÁça”ÐA‰Tv/¡É”H$’”H$‰Dâ…€óÀ™k³‡/ܵø“‰­r­F9å¤K9êØÙKçìkn8Î5G�Ì.ñöè&ÙÛ>”šLС å½óØ=¹€,@W·�çÔn þLzÕ¾.lQoåDê ü8d dO0O‘Ò†ßI›Éi�PÝ:KùêyЪbõòÇÌ¥Ìȉ� ÙÖ�ä�‰JnŸ+£zhþDùö£�¶ @íÂÏçøùqvÆào¿ Øô·‘H$¾© ‘ûîch È•Nñ¥¦{ ÅþïÁtƒ1nƒÆö“ ¢ÚzŸw(pÇd q)–CÃ÷©_O4#. áÝLãÛ£çÄÃÁ©ø¹ýùQË_OÔ) E~Ñ;ô¾«áÞ>†¿:ZÚ -‚D©:µTÙßÓîþñbŒbL‹Ë':N\¨‰ß²P’6·R<äœ?o×äx '€*¸“(‘H$(‘H$‰Äó/™§V³Ožº[åØ2êÁN2ì8×rܱ½�+vöÌeŽÝñzöú>ú³³à‘‘%{d“ìñM¨túw×Q‹wÎ@†wþXÅç rŽ ÙX>ƤWo§Ø¶·¼è£Jèðñ¢�„ººZ‘=6Àœ‚*~¹Æ?èt± |ãv_‡š+žAí#tzÃì¡ËÛrn< ëL$딘¢Äd1“Uöðü3ÕwÞôx«~úÀO»ðm3´3þ©‹6ÓH"‘x¥@^Ðð¨B‚㛟ûÆ 'R,P칟læ.È ä9X yæ¹Ï�råãuÈ7Dý<9ÖFóäøãÄ‹†¡ãb’Š €ºº#p .€0ô\xLe ûÔˆ÷yÜùÁx@cl52ÖýK¿V¾óž_eqf´“\>±câíq!¥%wN›P"»t§h8æÃÔiL<ñûñþp¬–u†Ç¶‡º‹#»ù&-î¨àz¢}žv·’F]Aí7€^O\82—X"%¨Â¨ìÉp2#ƒ´Š?!aΟÆ{kjø7Úæñ—ÿ¿ÅÁíß½Ô½*©*ŽäJ$IJ$‰D"ñü @rq»—ÿÎWßĤì"(•�ªI��ÛmUûÏ=Ãöú Çï|s‹oeißa"ÈÐ’=¼A-Y�?F@A¤î¯Ã†Ý»€=Øñy€P°õ¾+-{Âì|zCÔåó`4„ÑÊI ô„NJ0ç&d_ÙÆ\G¾çÇ©nŸ§|Í‚k3L¸|îst{«tûV.=ž}qP˜ÉÌQ~Û�ïÕã×^lÉSÓšÛ¥Åí"€m !Ðæ&iqñDŠAÄħ'Rk(·HiÁ¨E¼Úµ0$±s§¬½Õ±vÚŦ]:ŽBxðß×µ¬Iˆc•çD Z ’–plèô¼?B”¸'Ö>]xR‰¼ ¢kó�¹}ÎîÉÿ¿ç@ÂÍŸ D"‘ D"‘H$/€TY)~ã‰7°1Þ‹Zª ‚­ Õ¸ƒ)Ç“׿Ìp¥ÃæÚ7Ýþº½;8tý«˜‚ *²/m�=± 6Ì äsaöhŸòõ hG¼To¬ºÒB·Ë ×ãKUÂ`#·�Ç –1 à�°Ž æì¸Îíc.Nükä>þ¼ÿºÕ®Ÿ7/ã\?žÓ_=�µètGµ´¾òW®<�ŸÞ{³LФ°dYé…¨¬°wíÿBuï5gbP þÜíòü¼•�ñ�Ëóó±ô¶O$¯T(AB'�Š@&^lqíÙì-Ë߉ä{pb‰j:y]Úá3LV>ŒŸÇÍãç°êÏиÕ‡…BQ% MçÏ�¹Â9$ÌÙL�"BNó¥0…´ßyÒ¾æÆ_¬Þrû—vžk¦Æ´ˆ!Ú..>S#&(cci‹ L'œW£ý­Ž �PjG[CÕµ¿†6rœF¯�ðu·m÷ åžÇÏi¿î xðýÀ<œõááfæ`Ï~(:|Ó3Á` F¡šΞ@ì!pøˆ ‹\.ÉÎ�‘3#Ìf…  î| t_ ¨‚¯Sݵ@y÷"dBƒÍõ çO=JQŒ)ºc:� k+_acå Ìì[Ëï¾Z&ÙL-údùňEÍdR¾ýè'ôº…ÍPrÂÏ~à?í\þð^ JoùD"ñŠ€p˜@Ü žóÂtR,~fö&(�œ¦d Z®2¹òaªÁ£~ÌX~«�v� 0¡ažØ/ô½äô¢~îà×úq(ž¿Çç ×åÆò!£L�cÐ,[Õcÿ]ù®û>LžYÚÑ·O«8–íbJ{{»`Ñ.hµ¬¥Í=bˆ»p씹´E”‰ÓžÉw6Áîï±¾XޤðšbcÄ×S£-αYàû€·&ÏÓîò÷jR‰ 'ób5÷3îŸaûn"#A[3ç�ŸÛU¤ñyÒ¾Äúõ @¤p‰D" @‰D"‘H$žoÈ…~ûÀ“÷K¥9UkpPu£ù’Ý»µÆÆÚ5lmÜÀöæÎl§„šÓW…ŸÀ_þ°H;%ð¯�¬¤·z"‘xEcä#(÷BGCÑ,Ã÷ƒÈ ½CŒr¼�"Ï¡2Ùü,åúg@ˈË&ÇäÛ}þ‚þº½™kÇmÄ×ýu�µàÎSÆ��?ë6ƒmP ÒîìAÙ¶È¥±{®L�  %S€N�ЯF°·ÎSÞ¹€.q¶Öa}ÔZFÃ'ètWë0p+O°¾rŠ™¹!½þYX/¾”§¢ƒ ¢"F©QÑåþéÉÞú‡�Ÿû/7çûòßnag|ø)à±ôO$ ç²zCÐÀS·»RqP6OïÀ_‚ÜŒIªÁ—˜¬} ­6@Â<>4[Ôa# "A¸5_N Ûæv¼c$Ì3:›¼Û(tøõÄCÁ ¡Õ†„¨cAgÿ°zëïµwÞp°�³âums­xù-ŠŸ'`ÇŽ ÐŠ!ã‰k}n�IejQ#cÔ=ìÏñí P[d«BžU”U†­Ûp¸>7cëã€z�úx_«¦ÇW·R·UVê9qX·mŒ3) Ý¢ªëîœz½Ý¢d<)ê5¹õãÖT¯Ï­ çör‚€NqJEïÄíÔêžjq<٨˨=´øu½øãÀA@Ú@‘u�ñc¬Mf™T}Á£î½EZÜ=Q‘æëü\ÁØÓB¿%P"‘HP"‘H$‰—‘”}þÜ¡ì�soA°(AU­hŸíò9Å`s/£AÎ`«Ëp»ÇöF�#Çj¸•^o†=w-¸˜ÛŸ¼„l”­!¯µo(_³@uë,|> r)uJ½žÞ ué6DxÙ1zÑg<‚°n >ÌÅ1µÐsqRïË Šÿ�We×h?£ºc‘êö´g˜Ê`V.‚U9ÁVRt¬^|–õÕÓôúcz³Cz3Ùîù#Có€S`ÉÔ.éYóä“ïΞ½ø9»í<ᄟßJoíD"‘À#|‘û#9mây€É��0;<ÃdãCØñY0‚'Óx툺zÔsÇC5q‡Ž¯kÌÕäæ0ñ1�DsƒL¹?QaÊ÷+¶[œ´¯>ú‹Õw¾öÁ–°hžE|œö0SæŽÎÙæFrΛZÀaP»e È*¶fûãZàÁ�ïÅ’ŠI•�ÃZO-¦¸þ†Sh0Ìé÷JFã œÁðcH=fž[ÜØ£�ùêºÛ/rûܘõx£I^—Hí(ª�scâ÷¡ÈT©Ô0gô»Áˆm\_Y�c1Æ×óÜâÊú¾£NŠ¿žíb]ܵåûÚÃÛ…çÇ$;%?S|ðn Œ®=\O‰_—ï«l!ÃÉV‹ 9Òr­!@û‚Ðo�Œ·cçá«• D"‘ D"‘H$/3¨ø�¼UÖÇ‡Š¢‚)—ÊWçOél9b4ê8¨Ãöf�áv¯våÅMôg¯Ã 0,„^ŸÝ KþÙ+d¯µD~WPÐłɽKØú€ºöp³ öÕ^¢èA§óâ»|[0خ˺.1¡G@ 5"ÈH1§G˜SëåÚøc"I¾UqÏã� íeØëg¨ŽÎb¯ndBõ5\¹"`2W 7Ȳ/²zéYÖVNѯşñÕrLQTæœÙk¾Z-ÖAÆ‚A«²#—®¼Q›wŠl¹¼A‹´üòmœÞÖ‰D"Aˆ€¼;gš¤"Þh6drå#T£‡}ˆ¬Ð±£G¢ãÏ;ñãânˆ‡�“hh6^$·PT’ Ïmáƒ^Í̦½ñ௔ì[~›n1‰<È÷3·„ðjqð´´µ�ÑrœoŸL„Jk©E“PÀétJ'x(aŸµ†J!sM�c\Ý % Fî8Ü9t:UÝ^d7E¦8— nœú8'ÊÔûNtñs9‘&È?ƒZƒ‹“Ѥ^nþº çFêeÝ/8§àKõZò¼Â�øëü9îš½[ŠZÊ NR²,tçÄ…™ö×Q¦8xbŽ öy³^bNŒ®nÌ…Q$�HK„x�8ª `÷w±×Ïb�Î`ôvç’ÚÞ„Püã¯e¸ýkW>Ëú•SµûgffDwfB·?!Ï«ìáò6s¥º͆reó:ÙØ¸Gа…\^%.¡À{€Ÿ.¤·s"‘H´@&žÜœÐ%S,ÐÛÿç)·`²ýi  ~ïC¯ãûñ‡´8¡ÉáE¥p‘0ÜRS¬Qâ"�º1!.6ã÷Ã5[G£®`õÀâËï½÷—õðÞõ)ùudŠ4íA>-‚Á!v‡î"˜”Ro£q†µ81D—9FÔ &–á¸À…h«Ë²Œ‹ u{–U8AkAPuaÙõ±½N‰1Þ­’uu!ÏJDŒsÍ„ÂD»ˆñzeʇÔåòaß@�ÈD͸̱Î$¨'2AQT8A)pùcݹ¸ûBxlf¤vLÕ‚P™‰‡Œ‡ô³;ÌG4ðîÝB×?ÜŒ¾šÄ�CªÂ¸ê˸ìÒ]£¢P›PiT"çøNùy<áçP€‰D€‰D"‘H|CÐ1žÿþüÓ§ï@´«YµˆØ®æR–o˜ù,¦²Œ†ãQÎpP0Ü*lõ¯–={ {öß Öâsñ(,,ÁÂaWTJþGWȸVAغ˜SŸÃŸÁ.:1È‚{!ðu|Yãû›uÀC]f™Û¢ª‚rU ¶k‚‚/Å4ûŒ@æÜˆìäóìYŸà¿kº·ßž¾7ŽÝÛEô°×ök·�Îæì/þ\>ï?ÔeS ×¹rá¬_9MofDvD§7¡73¡Ó)Ñœâ#—¿W.l¾ÁTv‘#äò¥˜ôûÀO_HoãD"‘hå#Àý€€i8j"¾ž° F¢¡Ü|^WXEEÂ\_�¯A€{�±/2‡ʨ /«†qÙ—Êv›RU\ti'ÄC¿5ú="-ž D"‘ D"‘H$/O:ùo=õòìÚÝdåbçPAí¢¹X½nöa&ãŒrœ1Öáß:u9ÚêsøØýì=xc3÷Nåã³g–öÃÌ,»Å\“}ê"ÙSÁ¯þðÄ#”£3º·ƒîé`— tù¹ýÍ¥!ü8"Î š}@x|+"¸�ÈG|‰u¡ÝNjÁ';1€‰Ư»ËÜ×Ñࡘú_/j?ÃêQ >×ôÑC}´c �vñç’ê-tÿ `+ËÙg�õ•géöÇÌÌŽèÎŒéõ&ær¹˜îì»Í*¯�~äyD…\>‹€xøëÀ¯šÞ‰D"± È(-yv5AQDë²!¶øó#aÓüø^4 óûøsB‡N\Â_?ˆsFÇ�œ‡CâIßM³]ssÞ¾úÆ÷•ßwß§ZÜ5-ÂMK®ž�øqáxíLJq¢OQ—y¦yY‹ãò¹ºÅZ©Kc”ñ$£ST8�£>ƈÖmÖ eåÃÀƒsôýnE‘?·kŒ®7ì×PØÚé5¶ˆ@Ú6_,Nt~/¢I�³¨²0žÔâP}ÏŒQç�2Ô÷TÅ9§ F,¥…õ<³ ‡”»§ô»–¹™rª³) æ Ú]ˆ¹ø±¾=Jønà]@ÏÈ�+ñq\ŸÇàE¸œq9#Vs€PŽ´ÇrÿÂË÷)§D܆É”H$^|„ÿ÷±t‰D"‘Hì„^þÛ§þ©l�Ž!€"¨Ju}ç+öXq’ªÊ˜Œ £a§vmo^-·; ·úÜpÛ°´o„¹wœ#WöúÔaáò»Åœ�â|ð_Å5Ô·…¡�/°{;°\—èž»§&pÅD¾Ø!ñøäÿ‹kYäܘìô93Ä\ƒ2�0ì…†ù~ì¾.zM'ö`—:<ï ¼ó‡zóyã×*À³_ù,ë+Ÿ¤7;¨ í�?¸òVs~ðmÉ!æ‰!—Ï g/oÿ ðÏ€Azë&‰»€ ép�ÖnŠ€¸v«�?ñ‡¥¡Pã]4ø±´)i& ÇO,›‘ Ï„n¤æ> Ó\L"ñûâÚ*=¼÷¿N~üm¿Ìlo Hìáy‹;‡àX_o4Úsý„kðáÝ`s�³¹�×"…#0b�ÓB|nc)­A2Sâ 7NN–Y'T(y®ô:ýnå=Úi¿¦ÝŸOà~iÍeAZD % :Æpœ1 No{˜;ñ§Ö�s\Ø<\;^ ò¯�»÷�û>ן0?[9gP\¬‰ >ÞQå¯ ßÞæ°Šßç)bÞ2ðÃÀ·U½yâB�ï“èë0©ºLªž€Ap„"MÌ!†‹�ºx"aæB¼ž@‰Dâ%Gø™_Lw!‘H$‰Détï*ž>ð—Û@ÅR¾¶ÿY]’MÊÒ0eµø3µûg°Ýc´ÝåØ�œ¥=³Xˆˆ@M!…™X\†æâ¨%Ísþ!˜=2C�¿çšìÁ.DxÁØXƒÕK€4]?F€z¿™ßˆZúFwv”�,o1'‡ß™U²™;Îs@Fˆ¯>`çÖþjùÚù€2½u‰DbwÌüÛÓN ©®.M÷ŒóAãBÍ0j ÑZj"!Ù4.ÒÄëªÁ¸Bƒ¬1¿Ÿ#¿Mü‘Í!º¼€ëáåߘ|ÿ~ƒÅÙÑ”œ>-Þ€¨«DZœŽŸ£µà³²Ñek�×nœª2(Š EFž)“2#˼¡VPAÇfFè÷JgÇWËŠÌD„–]»—4&¬øöèõÆ]íd¬°]"[ò\¹YÁ¨¥I©_ÛÕß1›S›§ºi=:‡:Áç§œÀå 0€'ô¥ñÔxÐ÷ÕÇSž>¿–Ÿ,ßfFÙaÈ1 @š�P£Y¶¦Ks�”7g¿d퓟G¨€Ó(çSø·D"‘Ø93ïsPìÁffš!ŽêÒµ9×�6®Á!ñÜB¹«0Õ� ¨ñç"~n�ÁaÈ9\¿ºã!¹´!tc¡�Ü?2œ §¯ Û#ì×£s=4Ï.ÛÛŽ¼¿|×=Ÿ"3–€–ìQB§ITÈhˆ”Ê k.¬ö˜”†"«°*AîŸÛÇÚpƒ`év*:…2ß/™é—ô:UäZÚ]1qgŠ�&æDï‹Gvx/¡ýmqPEÆkKÚ×WYÃ`( F†µ­^-Y V3ŒTnDC'ŸÔÂ�µ4ó5ÍöKö.Œ˜›©bëÚE˜çL�‹«{1¨é æ�”±[d}BöØ*Ù#kÈ…(žPdÙ}„ýöcùzA´Œœ¯ûµèc�ÏcÍ€ðâ²é\?ª`2âÂ�L�ûh2.ÍǾx2êÒ��#䀀$ï_52Òù™Çu¾„òýºúÄcx†ˆœVÓÛ:‘H$vâ:å Ðõñ‡�ârY‹fQEÇMãÿ³^$Šå þE%5ñuކb2~Ý„–´å žÙ—s~YÙ‡.Íbo9ì:Û}¬ú–ÛÞ[½á–'ñÈŽÅð•ç ¡PTçó¹´Úe}+ÃjUƒ‘ U©÷}®F‹},ó3“«[Y‹ MtÇŽ§&í‚VèˆjwAénrþ´„:‹ºeZsçÄ_‹v·RŒÊ íØZ»ZVÖø×˽vV3 "8WRUB¯[q`iÈâ|é…É]Óž;É£�cÇFUŸÎBÍ<ðW�¿t™"P…÷Ù4ßn«¬aRõ 8dºH£4ÊN¾SS¸D"ñÒ!ü½$%‰D"‘‡GQŽ!¨*ˆ€*E'ÏOüÓ²e—éQ-_Ýÿœ0+”¥Á @y-þlmôêò¦;þöÜïsã¸Rñß ­º¾xž DZ„ vÌåæ‘U²'Ö�‹CP�>Ð ÷¾-l÷ýÑ1}®!Âq§ÏŽ¥‘/ Ø£óTÇ°ÇæÑùDxÑ)K¸|†0Æ‹>F@2·nÄBè¸òÊŠTäü�!ä 9‚ñçb°ºh™é=«K³O"F,ÀäÍæ}<ó賈¿‘( ¬'€az›'‰Ä®@q' -®Í‹&ai¤!Ž ˆ6á¹øs<^h2>_Pà ênõ!IUAüÂkRꪄÂCàçÌcgNKYý}àxª»n€ÙžK@­ªî[øhù=¯ûe½~ÿÊ´0f1(èkw…áÅVŸsû¬tÙQD”Êu«Ðè+rei~Äžù’™^<â¡ÄÂÜ2‘>i û&AºÚ�Añ¹ÛÝJ!­B�'ê²Ùñ}óe¼ou£àÊz—­aFU Îíƒ|À¡jP´.3Sáò‘eÊâ섃ËCºì”õíQdWy‚|ÿøPdÜ�|7 SÄ4Á#±Òa(«œÒvE�fW3ï�(¨Lq$îND û“(‘H¼ ÷¦»�H$‰D`?èm¨Î‚‚ x¥¦Ó-ò“ÿ¤¬•,ŠA¤5ÕmÝÏÛ#ùEʉÁ…€c¸Ýi8€ŽÝñNöºÅᇠ xW�õb�UÀ AÌ/Q A&ãk¦´µ $˜ ƒZ2W7ÖÆ8v #d÷Ž¢v˜+jÁ§ºy{tŠŒ—”õUXs®/ü4�?˜@ô˜“Èx’ZÂ9€$k@v~öQº/k'Šs©É`ò&óóÔ#'T5x„b� Ài JoùD"‘Ø…$®ôâI4¯�ƒ (2ÕÅ{DÀ*ä¨6C-×g jdú¯òE 3ø1À—�+Hõ!èÂu©«»sá¯Ïd_>¹ü]çX(tÏö¶ÃQ?ŠŠ ô†ýÿiòîû~“ÙÞ$& DE€Ý;/œðsîJ—íaŽª`Up÷™±TÖ`œ(”EÄÒ-*æg+ö-™éÙÝäÕi¹ˆ †�v7�´×ÒÖ:–L9¿u¿EP±»tÕh´¯²†µÍœ+ëÖ�3ÈTVQŒhÓä^k«îõ_^sxÿ6E íW»ë+âÄQâ×÷ðž�·? ¼*âþ!Ú–þïKP…Òv©l.� £B@äó ¢yÌütêÚqÕ$%‰.‘H$‰ÄKË,"·£v/"â�?€û/yaò³‡~L.—‡A°¨JuK÷‹öhq–r"8ˆÑ `°Ýe°Ùctµ¼ñöwpàÚëE Ä õm¨mä ò¥[âÂXÜ Âó†Œ*äÒ¨g.ÖÂP]²Yò’±XP]?�½a½~»§ ÂKO9�Kça4ðBÏŽ„_zóè³d�œBί…€ BFÕÍÏÚ»ý:²GÍéñmn¥FEg³Kå½òk<ýÈI�ˆx'PMéD  éíŸH$;€¼øâÅž@XqÂŒ¢ 8gÔŸÓ8ß¼(ì žñfþ¡*Hà6ˆ¸yŒB˜ÃÇ­=¨¸6õ!â¾èDž�!{äÔÍÀ?¾ zÍQ˜éÒÄϯE~îªSèýÕÛ_óGd¦d‡‚A<�(¦¬o圼0Ëævc,“2'Ï*œ€#t‹ÔÇ,/ŒØ·4b®o£‹ß)ñl‹:ußOK¦Cq<~N��²×ö¼"-Ÿ#ºÿzlj;§*+\^ë^Ý:ll8qUÁ[—Ö€ºî¨Û‹¼¬^GlSä¾/âÆÚ±c«ýgR%ð;ÀˆéäÀŸþ6°Î1¥$¾ïòUU!– ‰…~SBcˆï‡«IJ$É”H$‰DâÅ'=@ÕøìÆ"ä�<»pèGÍ…Éu™BªRÝÔ}ÈÞ\œ ª “qÎx˜3Ü*ØÞ®Ý?ŒŽÞöv]wðhCeà ²‘°p®ž°ÿtz¼�Èv‰\`. ‘KC–Ȱ‚Q… -2®ÀÕ¿f˜Íѹö@¿|ìÑ9t±ËË µÔ®Ÿõ+ñ?"~C‚„»BkÉ>ÿæ™ x(C³lÛÞ°ü[å·\÷)ú½qñÑ�ï`¨ € ¥.Åî>RÞRýO?r 'fZŸ¥WU©ûØNéã ‘H$Z X86‰$FÇ—Š€ø:J4äšß—¦Ð¤ëÆòój,çÄóú‰QnœF;\R‘¿‹È{K Ù£§¾ øy]ž•½õ°»âæ�í~±|ëﳯ¹ñTDèÑHÞ™RR ?'Îϲ¶Ùʼn;SamP·eÆb¬Íê>€~·äÀž—Gd&*ü´¬)‰D€Ú h¸~šuñýJ òÇ5Úp„®#qÁFý¸*ñ5Á”œBpœêI™™`õ_cä«ìóø™BEþ¢½ûè?¢×� Ÿƒ‡�üµzhÏï”ï|ýÔƒK›-î�¸c0Êøê™Y.¯÷€8Öfù„Iéóí[ÜæÐ¾!Ks“±ÃfZ¸¯7‹âñãyt—N"ëË»�„)Äs µ;`¦äÎ i¿Gn®)‚_Hû\•…³—ú\Xé³5ÌÉŒEÕ`Õ ®Ö�e%U•ãJòÜrxÿÆÕmHfb!éks�ý°Âîyð��·&˜?DväªlNe D‚�ë sv&P"‘H!à‰D"‘H¼lXF¸X@QD j+€ ì(^­)ºE¶zÍ»³£ÛQPÑêÚâ©êîÞ#L&“QV‹@ƒíN�htuÛÞèsý-¯çÈMw%@ Û½À qY_79ì;3³éÕ~>`}¶·@EW—˜ë'òà0hs˜'N W˜“ѵ�¯V·ïûM=²|šnoB§[=·e_ß’�ßéDŸ ¡BÉ´+k“ïÞûÛl®žç©GN!^¼DCÑÇõ5ŸmYàèYÀ¦<‘H¼r 3^Š!ÁŽsê„Nš«hÝd2-t\P ˆ´ä ¬Öu5†aîBwRÌ}ÔXßo#üð8_“w¼öÕæäåÿM.®}—(‚L—%Ô˜M{ÓÁÿX~ß½¿K·(ñwÖTVøê™9Î^î¡*¨D¬sx€1.üe™×e'¯êo‡÷jçžÝ 'í¹`LTôpe°_EE„&íîq>4E ZÚ¸ö]ÙÓÃW`÷çÏ–÷Í|�ª2µ4Œ†µûgÐe°9Ñ›Žsøè[È‹Œâ¡à ×gÁ*`ÁZQ×gçaïA0&½ú_ ÖÂ`ËmÛ`+/ú‘Ü>¡ø¾|GÖ71Ÿ@ó| vëÓÚ}šþì˜Þ̈þÌ„¢S2΋ÎÇ·Þ‰Õ/îöpçáò¾…‡ØX½ÈÓ�žjükä�‘ ¨ª_œZ' ��SÀåôG�H$’% ßÖtðhfUTBñEнc|H¸0ô›•ÄÍ% x$"‰ýÞIäúþð[< îÏ ðvóàWïÌÿà‘?#›Ã»¼¹Úáêøv´[œ¬^wìýÕÛîxˆ)ÔIÿ?±T»Œ(•rSQÚ Ap ÿéäU�ß広[d&"L´ºUˆ‹ñóãŽO¼oŠLîÇ$�Ò^w;;½-s1åÚh¹®`­mã;¶9O�žge£ƒª`UpCZï”6CDÉÄr`y››�lRä`Z^£h=8çà_?]à/¸Ðp³Ä…S¢BP_WͨlŽ" (|ÏôA€‰DÊ”H$‰DâE%=r¨BM�_¦„h°ÖbŒ¡èäfrä;ò‡·ßŠ X@´#[“w,ü“qFU†ÃœÑ Ãp»`°Õgk£ËuÇnaïÁ×1·8ÏŽQün yg�߬m A’Áò˜[H m¨…ÑFƒZô©ËŸ×"�wQ#Òh÷SyèqK‘�äàⳬ]z†ÍõµÔí�éõ&½2ÿ£ñëÌÅêx㡈`&oXø ^Û½ÂÆêž~ô4¨4Ág¸R4òƒT·ƒ/�Mà°•þ8‰D €Â°k^¬¨ëê@áãhã£iaêºy‡«™ \¤¸ÂÏ¯Æ M±‡µŽÆø §’‘5”ük`ÂóÈðŸÿ÷×÷QYÉ>üÅ{²‡Oüi—ˆ?HnÔíâÌVß~×/Ù[ŸÇõ0) _9õœëg޲2äY3™?®ô9”ë¬sÃ!ŸÜŸvÑ#ê"iŠ„v·Šl‹ó†©n�ćø¸á1-áÌ¢DÖݺ--÷cW¹“¢ÂÑ4Ö·2ž:½À¥µ|Î(‹ª8g�‡`) Ë-GÖ¸fß e½m®‘Z-Ï�Ÿþ^ ’È:%úúûs¼kȪA5kœ Ê$(‘H$(‘H$‰Ä Ïa„ÛPºx‡ƒiXk<þѸ€O’¯ PïçEƾc¯íüîê÷! O…€2yÛüo鬎˜Œ ãIÆh»Ë`«`{½Ï`ÐãÈM73·x+ûbkS;­a88\©Î äêýYXÞE'ýUà˜L`4€áÆÏmc@‘‡xx7"¢�Û<²ó_D^¼8akíúýMŠÎ„ÕËϰ¹zªvÿtgÆôz¥¬³ÅçFßà&¶€è\vaòŽåßð ªÄ‘¨+ü¾ˆA#ñ•KÎ4I4‰Dâ•ÀÌû[@ A&*ÚWâ÷U„&îÌñŽ¢P0¢!ܸ9ƒù5ÒZ×¾NíN"ãÜd9OœÜÕ�F 3N”EUQ'ðÖì[pûÑuB0zo[^ßÇ€/óÂðZàŸ÷…y«ZòùzØf5CÕD]�„N÷$%‰$%‰D"‘xaYDäNT—‚/[¾hVUë€ãÎ~’ZGoyUñÁ•ï’m»ˆ (€(å-ÝìÍ�gsÆã¼vÿ ·;µh{£Ç‘c7Óéíáàá;) CJõíª€ú}k#® Ö• ÌÎS AYþÊ çæÄžº¡ª"nÿPÌíïÂå#~_v‘wR)§žzœ,Û¤Ó“w&¬^:ÁÖú³ôgGtúcºýªø¬ýVÙÐCn~‹ÑNÞ´ð›zMwÐ:ÜS�œØù/rUƒ ¨�„a9œ4}Ä$‰Wt¸P¨ñ®•ˆÛ&„H(8=+ü¸öíÚœË5abR þðqD~x�˜á¿ø‰€{ñ«W9qq9ÿЃ?f.o¼­Ul¿óøäÍ7ÿçW惵8ç�ŪÀZƒ1–Ì(×î[ç–#t;Ó /´‡ð’)¢‚Ý¡3ÅDÛÛ�3´�ßžÏg·ykv)¸Ø׎î¾?¼¿ñ×!ÖÖ2¾3tV�¿ÒçÉÓ ¬muñ⪅ƒU\»¥È+Ž]»ÁÑk¶Zœ?Áúj~ðÂ!Àÿ8Y�'î24ñB� ‘®$%‰—-ÂßOP"‘H$ß$tQnE¸'ÞBNÄÝà ¾Ÿ)ª xŠNÎ ·Üžfýnsv|+à ŠÝ“�)ßÔÿ åØ0Õ�ËÿsuÛêqøÆ[È‹ú³×±ÿš}|­h<,(qW�W×XX†Åe�ŒoNÛ0Ø .Ç£ˆhÓ¬û¶ .¸¶ OCp¾'¨·qåRÉÊùÇ(:CŠî„¢3®@«§˜�Òé�Í…î�ü±ê[£~rQP±û;O”o[ú$8œ„ Ððµ9ÔÜ  �ø#Á™NîdäÜ@+éã&‘H$HðNÄõ8n´.ñ„¹~!`JX8G0®ºq}î `m³ó7€ÿÄ‹Äð_ý9—¬ž¹ÐÑaøÊñü³OüÙÝL *Ëdÿìûí5KcÕàÂs!¨»uM…¥¹!w¿Ìl¿Â�@àDiZB-BLÜYwÆ´ä¿iuµ‡v‹÷·åÏù:Žƒvg”¸­Š [á¼ñû»w»»‡5ñ{ròBŸGŸ]fRfþoN´fPîÙâõ·^"3¿çˆ*§€Oñâ0ü¤ËíÕ�‰?áú¦ŽÝו@‰DâeMÊŠœH$‰Ä7>åðmÀuhø ;Pëõý"‚à�Uõe,³© vqEê Ô™¹R^'«A­€§®‹("°¹v‘²Tİ«ÍMçÛŒ�Ì•&ó[–á÷sWº}É`}N®œƒÑ„oüM+Ø\ƒ‹§áÄ“pþl¬AUB–SoyyÞ¬×û¾ô÷Ï×s�Å•þÞ{Á(òZMÝ*KíË;×£þOWÐz«&{ºz-*9Šq› j©Ê»ç¾5Bˆ¢ˆ¼¶¥ø&]¨·øPŠ Nd=†ê-(ýôÑ“H$^Á4?2­ú¶0†CT%ÖøýJÁº <êÆÁQ×ý\Í~±Š¨"• ×¶åòƒÜæÄŸ‹ öÞ›Ÿÿßó3Õ]7ü+-²Œà1`RRUå“vßÜã8§ŠÔû®dR�;n¼Â›ïºÈlߺ³�+‰ˆ?â�‰†Á’¶DùÑã|©AÎg¢ãúcÂ~�‹0ñuóÇ®QƒµïDü1m÷'l ��8¯â÷Ï#áümy—‚û'¾-šKI¢âÕuF¼íîs\Þ¢²VM½•UŽªàÚ8¿2Ë'º†­�Ÿ³1¿«{¾Â‹Ç6ð��׿w …ÂYüo7p?ªaA$ýÿ ‘H$(‘H$‰Ä „råmˆ¼ È¡Fc¼ûÁ»�@ "\{]4‚ª¥FiÙGì‘îD*ƒÅP—jÉÞ ¡EÇ�£*nÞ¶Öe—‡ãŠ ’ùýÌ€1ñ'w[á÷ØÚ¤JN= +a<1ß8[9�µ+pöœ|®œ‡Á6ˆ@žC^@V@î¯ß߃Ìï×¥¿O˜<ÒŒëw÷7vïÅ AÁëèV³~˜™]@¸T…z³‚µ&{ÊÜ"CÝ€6ÎÆé>Äb¾|I÷5Ó5¥áö ?"~h eTñ®¸zœE„ÛQ½Õ<}%‰W, ¡øã�· B±Š64x%‚S$Þ¦ HÓ \ÙÆpêÝB ü2"·ºpPC^ž6!Ü2CùÎ×rügßþSöÚå_W˜ ‚ŽÆØÁPíá=¿åòg ŠZPK]·šq`i›oÝŽÚn!Úû�†ý¡ÀÐÒ/€´$â�‰It ú5vA&ü·¾?:¦Ác"ã C‘uÌ+mâÑ Ûc.¨XN¡–5{q¨[(÷ܺÂ}·�§ß�àþÞ¨¬A°¨&eNUÖ6ûüÞƒ×sæÒlKȼuà"/>'€?åòq}qçï“Í×ä7HP"‘HP"‘H$‰ç™yà ¯GdTÑPx!D\»¢ W(Џz]º~U/ Õí(=3¶‡Š§ÞK.«ÕsºÜ�dþK;büÚ4§;sˆá¶{øov¿yÇI(8¸þ¬)e�€s» °¹æ…”s'áòyØX…ÑÔ‚ÈK¾Õ ·¨…žSOÁég`õ2LÆ`¼³'tõx,æê …¿ù{ž5î¿¿ß�ÍõíÌÍU n£¡5ן½[íÁçu¶µ—�á.” µ¨AÕÔõ Ê×Î}9vE/b ^‹šõ&ƉžÍøB"Æ�,~ /"`?È]¨@5}õO$¯`°�(›M·Ž«K#Ÿ„N"_^Tr}>¿�+½ø#•>€µoþpš— <:E Pg‡“Û¯MÞuÏ_¯´z�Ñ�ë=`ûç¨lAe…J ¬æ †<¯¸ï¶³¼ñŽ‹t hËÓ‑˜HmZCÚ,=-a¶bãê4q$v}á9-NZ®Ëìð8�öùz}mÚ…,O\`#²ïØqΣ,r;~hïˆû_w–­ *µë¬¬2¬*+”¥ðÀc‡xä™Ewnæ6ƒ–žä¥å“À[€¿\ls¸µ¼.’rC&‰oÒ/‰D"‘ø†B Ð[Q®GÄ€j½©nj\ ¨à󞸇Ý   ¸z$Z¸GU]‹)_=ûpçÜøJ Å Aš=R¾QïÖOh‡±Ë½ãCz!G):(ln‚öì„]!ÑïÚ®P×,þÁRæùu Þ�ãïM£.8Ä—aÞ�?NÐ׆ÂÊêë1 QOèônfRna«ŒJ³âéþ=Tô,Ú|øTï=@Ç”~Ѐð}€êJÔº’zß‹:ÒKÅ¿ üû˧8±ˆ äzÐý¨žÖÓçT"‘xå>•@À %zEÅx1G"ljÛTº¼ÛoŽï'÷b�Dõ,ÂßR#¿(/žîf� #Vºúô©NyüÀ¯š‹ëŸÓÙÞEÔ]¨j†Z‹µ†Ãû×xÝÍ—)r;%OÌ£Ä:E²±ðaSÆ Rš©9V<6lÇš’;ˆp�-¹\ÂõÚh_ü\qy¦Þc?NËuJð¶æXŠ^wû=È¢×Ιåîã«Þ·Í�bk�“g*›#b¨4…GŸ=Àåõ>o¼ýE®ø±Kà^z*àýÀoøË@Ñ‚/û’ï'‘H$(‘H$‰Äó‹€ÜÜ R ^øÁõzÔ»yÔçò}�//ÁCî �. ˜ÍFöp÷óìðn¾j&#](>§ß1¹C>©† m—ÁdŽÅåyDÀZ0Û› ,a×DORQß­Ö‹A¢®OA]ŸW÷[�…|}<„ñÀõ9òp¿eͶ,ñuÀ�[•PN¨Ëª¢Þü\"€¸sñ!ðB‡¾@¡XÖ.ðøcŸ?.»0u&âèêt2F£Ø�ÊŸ^¸[¶ÌµˆV ‚ˆq"":kÎW·Ï<ÅTTcPUŸ ȽÀ�Û'š/«žE×íCA¸D'õ@n]N£ô±•H$^(^˜É ŽæÇ¬UpÎQQõ.�p¬àýÒ46W÷c†ÒÃk‘Ÿ6y¹á]@÷D�§.öùÌ#‡±¨»$NÉvÊUŽËÚbWRvœÄŸ¼•%ÙåØŽãX²å*%µR¢DmI‰7�XfÌ`öåÍ[nŸˆ·º¦ëvu½‹Á`ÿP]}oo·o¿÷îÃëÿœsü¼#óõs‰‹T]—ÝÛ»Üÿ¦³òÐw÷ra~«æÒ/-�2£¥™š×Ï>ÒäwNÑj¸ùð<ÐçµÃ"ð«À‡�ß~"X�AIJ$× Âûÿ8­B"‘H$¯mv'Q �J¯ÄmJ‡¹jhõPEð›âe3ëdž�þÍfΡ£'”¶m4?9÷³ô´å祠ր‚±½ÞÍKëú¥&«+Û8zôvöí?‚Z¼e�˳œÒhx„+FÃs êP_®_®¸úx<ƒ Ô¿Žâ‰•;D¼dmDp sã«ÅDÄÂ2—ãñõ>âˆE¸r¸tÚ«ñÇåt:ó•é'óóÙNLÞÅd=ÄXÊd¤è¿yËÇìM#ç£Z^˜æÔç¼ C@Ä >ÎÝ[d‡RA#/žˆûL8ë9cܹ?YÁÓÀ H�°D"q-1ò‘óŸÞyÅ–@FÜyì; Ô|ðÁ >s¹ö E&�1€‚ÈÇ1òËÀ)^ôÿèßà=À0ø»åìôˆ|å‰ýX+*b1¨UP±š1:´®ÿàö)vnë $¢ÇAYØ&Ì=ñqˆ 5ñzÂ6µ‚‘GjÊC„(ñ9el²¯� jñöÖCQѨf� ǯ{­êÆÛĘñC��“ï�Ùãß³V Æ(Yã‡ïr"ŸVxír?ð;Àñˆ"¯¦”âë4ÿèS\ü³ôM—H$(‘H$‰ÄkƒQÐ ø`õúBq–:®ÈBøç¸!"¾¯-6ÎEÄusc‚� €=¾!/Ù£«Ç²ï­¾ ×ÞfNL1X+j»y±uþ´m]XàŽÛîcÏÄnT©$k VahÆwCÞäÊÑx™ˆ?Š9U1 ˪ýˆ�çÚDQâHäÔ[ôÔ[ö ‡¾$jÄœ¨(ö‰ZN…}ê­®|}˜Ÿ›’¯?µ—n/Ǫ)S&"Ja3¶oYÓ¾óëÀgy­3Üjÿø°=¶¾>y®!èw�÷¦oºD" @‰D"‘H$^]rà(è� YEìÁã­ bÙ €†ê… UeP\×ÇYJ¸±="B^ @'|�UÉZºÇœë¼PP…~ÑÀÚS…Ñl}­÷Öñ í®º[³�䎷ŽÃØ8 \]4"ÜÄŽ5(ʼЂJjˆYæÄÅ1Õ2 ú„Ç"x„W�Y'þ„V?Æ ?Ùó]²g:èòÊš´û `c,b ²¬£Û²3½w�ý=ͼG–)qèÉI'øx‚ÏMLò.ß<®,ØZSÅÇ P%Žmà,°’o‰Dâ:€<™!BÜ(3Õ:2'ð `|TÁx�#³ˆ¼ø à¢ý‘Ÿ? sêüÖr½_äx´L±zìà%î>:_':DÎ5"ÕZÐ T$r^'<±I ¡%`³–<Ñûç\SȂßKD¸ÒH½ýˆÔÅ�Ák鯻‰×"Ò.RÐâ"ÓJ»!_xl/sË£ä¦pB�`D”B�{­|V‹Ïüö.àN 2ÁZp @¿ ü—ôM—H$(‘H$‰Ä«ƒ rÕã@3òC9°úÁïˆ( HU²6 ¿ìO8fܲAO£™sã±ZE¨É¿ºôFóÂú½(‚-š6 jÕ ¬ald‡=²ÅÇZh.€:ˆ¸„À¶qغŒpÅhp Ä,zâå7×Z÷sÊæ‰hBD›z„x�ðòÒëÃÜèvA¤"þøP!rs¶ €.®¬H§X±ˆQÕs½· ý{¶.’7,Yf @ø÷¶6£›`¡Å\|“DÕ»�+ApåÞÏÕ‹·Ú8ÕY` è¦Ç]"‘x­2òÑ W. Žª¥N™/©V]Á‰«ß„"ã 8¨�‘ßCy?0Ï5JûOß{+ÏNý�<üäA¬Bˆ"dRèŸâèþ@k¬kQËÁœKL¨Ð_Â1jæUk S#>ÄûÇçm‚ùýjE+ Ê À&ƨk�ꭕ±¨�â×ÖH]”šû‰‹ƒ…EøÖ¦ÆPT±�N¯-ñù¯Š-€Ç€>À5"ÝüàP"׸ô¯€�¤oºD" @‰D"‘H$^yv·cÁ†³ ´þ¡âœJ|\Õ0¾OhÑPu[Ž AN:|ì¶J”!UÁdßX~Cötû±šácI™k)m§ÕÊhőš@5HŸÆPŠ@Û¶ƒ®�œÔÄñ‰¶�[ ÕŠKõHp{¢"ŽD�ãmyåXš‡…Ù� ;/úHõ¸€Æ#kÈ¥¾×lVç¥Wt7 ŒvïàÚƒ:š-r`çöŒ- p7é'Ï…qñ¿ãd•hóÇO̵ ¶TÂÏKͦV\tɦG_"‘¸Ž,€<âE ïÎÍåÁw–Š/ÃnNM`+ò)Tx‚kœÎ¨Ù¥o>þoÉLE±¨Tňê[o;Ñ}ËqÃ#„ ­q#¶éø/‘s­³”ñõ5âRl,ß®py]Œ"­‹mä’­gb󍷍НW½{»ø½÷â÷ŸO0®�]sÀúÅ Ûùü£û˜œÜûZž9÷œ<ôÄ×n ø`¯è·øià¿7«Lão¾B㣟å x'ð¹ôM—H¼¾>ðá´ ‰D"‘H¼z 'PÝx¼u�Š@î¸Zº§rõ¾qõD\yÙÞ�ï[¸oxp~P'uºÏNï7“ö¦üB~'ªJáGA tëÈvnå(%Úì‘!Šƒ 0ê-�P° ªøc Y[ÇK!èeGÃ�ZùÔ£l©�«à|ÙkŠ~�2ÞO·S~ÊcŒ„ÌBAöè*²jý½ô Ër{‘^ÑCŒEè÷ö®>¤ÛÍ4¥è“[ŒŸç†íKn]4n¤Z‰Þ#bE!\³ÿ¹3ÆŸ»zAðŸÿ§fCGÜg´‹ê$0Ÿƒ‰D⺱‚xüž¸u«kçD _îs‰æŒùeà\t§Î·¹Oßrâf½eß1 }cзßþ7M¬„.¸bî¿jâÀDˆ:á FŠ_»^ �š:BkœzA#~£Þš(¬×>ÞGƒ¾>¯_£$Õ¬‡�ˆFѵ¹ÂØE H­pTX#Ÿt‚33»PÛ—�?ôeYë¨îÿcç®)× ACÀ/¿Œò*ÒüãÈÿöa6É"°'Y¢'¯?LZ‚D"‘H$^2T�¹ –€ >NO°á/ B/UE¬r‚º¬ÒÏcêÃ9›PÔ©±®Áåu–6‚'6G‰4 ¾.®ÜÏWãkïûºDx?¾ÎŒI0?ä.í5õ¾.\—°]ÜJˆÈœpm,ñ÷ dFõGî:Ï¡=sXf§e­Ó‘ ‘ýˆäÚcøÏÀ1àOx‘ù®€¿OâO"‘ D"‘H$¯ ûQ}p«sõ¡xCÅÇïð�æA5î…[ðI%tgÁm^‹·ô â ~g¦"•e½ßàééÃtú-Áj¦#ý¥Þ¡Å¯ÛWžBÔŠ1EA— ÒVòÇÛ4?·Œ9Û©ˆU1$Ï…ùK0y/É•¤zÁÄÄR¬­m$H¦&EÚ†s‹Ï!ròʧ~�RøYœ‘ŠpçŽÝëZZýÐøâæ¹¢€O`«}Œék£¿ÔÛséaê-¡Ô‰9ª”ç“óL.ì Šl¸CônÞ"I¡E�¸z�Çý17oªêÛûºª%�û̱! •ýܱ"²¸8„H#=‰Äu€ÆŽqX;(*‰þáðÛ×Ù¦åI`éô�ÓÓ“(@Ãôõ�wžæÐžõÈÆ» OˆÔ™°.¤FòÇ�PdÄ®Ñ�óö‰ˆ€‘á1x$HÔœK�;¼075bQtìšùâ¢�ֺˋ¿¦ÄÖ®¦�P!>Ï¢‘L ¾¦^#˜�x]52O­±#úÞˆŸ·¶Jôoü¶LÍ= d `(sÉÁ´€»‘2¿VùðVàŸS¼R(˜s³l’‡€�§/§D" @‰D"‘H$^T[¨¾x;°#Ø3Ž‹UÅÇ÷ñÎî ïh­‚Z¼uøa¸?¶2¦¢ˆ1¾­£°Âs—ö²ÞÁª¡@ÊÜYj`%#3û‡Îõ�-<Ü;<õ [颀ÅÏNƒT€¬)�o­Òøìf²ï„¼*e /4¦'an·n±ôòY !ñ$W�S� õ*¥’•%8çðVZy þ˜27óZ¾žÙ3mPuãØêû@ûVíD6Ó¿³ûM†h3±å"ÛZó•áV³ò\Ý{nra/3+[ˆŠ3"‚Gª.àÔ—©ª;‡°Ÿ¢þ\OU˜õuB<–�·P‰­`PÝ œ@d,=<‰Ä5�%Fb‚�?ÄêYAÿ)ðvà[\gtÏO�ƒ¼ÑY@d.7Òî9;3©'Ÿç–}ËÄÅq‰@ˆ‹æQ�%P âû È(È=Hf¸v±ÀŸ9kîß:¼Ì˜§ÎmÖ\× ê6}1%IJ$‰D"qu1Àà�ˆrç>vˆªÅo³Qâ�%ø1çM†)øù¥€+ð}$úC®ëÔ·'Ï]ÚÇjw ¨¢¨A�`�”KŸý['id=t´½Ð»GÏ÷~hvGcCìÁºi*`µ²1d– ßX¦ñÀæ|?îÎxÁ�Õ%Jk öê++†óò&‘×NRK)øL>ó3Pø×!wsö@¨!l•Æç0+EU3±U/òÚ0ôïl­õßÔ8C."ŠìÝ:ÍŽ‘,¦LVsÊs—ž¿t˜åõa(P­Š1�[ÄX,EA¨¸Eô-ĵð¨W ­…Â�¥²¸zm×EügÅ[ ¡z¸J�ÒD"qí¢.ÓJ ôù5ànõ/¹鞟1 oòÂO™û ö§§¾Æ}'Î…nßjâÞDE"!ÞGc}]Ê‚~ÔÅ‘ E™:1Ä—E¯%õ@¡eŒ'è«‘ùÇï7^¯—éFÍD×ÁçYK‚5t/2`­ƒ~ÑX>Ä\Ùůg@$S©÷×og�ø˜��Ï€÷P°ä(×>+À¯'€¿æe$ûÊS›¨~x2}%IJ$‰D"qu™~8‰H£ÿCÄ jËÜ[håØod[6Pu™ bœ€øMloÙ ¾ÔáÚ‹o§.Sõ#Twf|rVgæw²Ð”‚ EP¨9}n?ËP£�ˆ”yQÌÙ‰½wí¢÷ƒ/ A9€Ÿ‚O¸2'}eéûiYÈ2¼è¸S…™)Êd-ˆ¤ôSÉúÌNS ?Kó.&SÅêÇçÆ`f šÌ“=ݦĿÆ^ŸtØCtß½Cí®îsˆQD“)ÆXLf9¸}šÝ[§@E°jÄÉ’eÞ·9O]�­Þš§ÆRG¬§„u5¯cÌ"ìiüû¸ |=fî.H.È ‘Æ×Ï?¼x”«M¿ÐüËOr™,?üaú2J$^ßäi ‰D"‘¸z¸€î·{ÐÐÚ€jìPTqª¡ïÀHqFDüèb\½Ë_�ø3qÃ*(®NÐÐÚÈ!.Ÿ]ÝÂ…¥°TPDE T�†ôô¦]ç �ž©öÖ�v—ÖpÓîma÷îÆLvÈ[ÂÌ÷¨`ÄOM]ÑT—æôý7l¡82â*Tðq÷-¨P SÏÃøØ’œc NmB�НÁ¦ÏCê׬^xªÿ#�ŒUwoÏ!ׯ½˜ ü?S‰<\ä:£ÿÀolÞç\±å\9ßq¢R`ä=¿)ÀQ'ªY`˜¾ôÓ·Y"‘H@‰D"‘H\œhs84ƒýd*Äàã�o/øø!J‰o_ :_qm¥–2Ç_µ¾�¼Uƒþ²øqD̆0ô襛¹q4GÕ bÅb‹ôÈŽÓ å=ú½¬âÆÊM§ì×k/adœ*¥Ð=4‚9½FþX)E~² ¸¥23=šŸ¼DÿäVŠÛF T]5”9t:0u¶m‡±]`„×5¶€öt×�àÓ-oÕCžá\] ü¨`f»˜É.Ù©6¬ �ñ˜ºQ§-CÿÍ;J«Ÿ ff€.1Œñ$Lf¹yçk½!–;cˆªß–Q±2µ|@Ç:Ãìn®A¸�áãA(ÐþñÂ�г˜sç">÷ŠMU8ò&iâ4„B°º‡óñ�À·oG€E`è¦q"‘¸ÊÌrµº¨þ.ÂoK¼Nè.¯N€®n¢‹A0 “À$Užn5Ö7Dê%Ö>b�¢A[‚vq·nñr�^ËŸkäúR«'<‰�”Âkõ¶FÐï+óý7a}\_XI1@Œ‘غÕZfÕïSc�®é÷ ýðc€qãIZ ܃òÉëP^~ɹbûoÀ�³yž~èâQàéSúÚJ$)P"‘H$/»P}ðDZU¡ÿûÖ4® ®ªÒÞï²;Ô¢ê㙂'€Á >¸ñÅ‹?HÕqC%æ�È™åí2»¾EP×RÕ *e~plŠíÃm("”ã§ÔíÍÑ^í"qãö¦º?5Aïm;Ñ-9hàÈÄV)S¡¥ÕP󓳘¹ŒãbÒ˜ N�XZ€ÉSeî–áõ‘ºÊ{¾tžòþÏ<3SeYYg€¬áRæRîcü_&]ÁœîÐxh‰ÖßLÓøôÙwW`½Å'«`ƒm «¥Ð×{Ï^ìáaÿºwÚ}V–§¡"d*îk½ c­ ¨žÜ{Šf¾Ž%Ã"(RæV3¬ÍÍc Ç7ÄñcVãý¸ºªú)«JBA¦êzU¢øþƒ\Ƹ1ADðeeªù«è1à"ûÒÿé‰ÄUæ ®.‡rø•וø³²f€»÷¼w)GéßB:nó\bÂNX‹Cä11Ä h´¦œÈ¼L¤,†/Œ¯îÓDúD]•Õ¬‘DûÅ×Ñ\VGxýðu ǬɣmƒúÚO�8æçêòâÛ<0ƒ'dxr#FªHŽ È"·rýò=“çàÏ7a¥ó à>àTúzJ$W‚ðÁ�¤UH$‰DbsŒ¢zÒm¼jÕ[ÅýZˆ·¶*® BK€N”‰«êïˆIBˆ·J2þÜ�]¨1œûUÙÆ]·N/LjîÚ2í»&±ô{†^7§Û3¬¯6KpíÕkË#8r”¼±�,ÛÅþ›RG¡ä�-’=¾„–:ú'¶Ð¿k 2w«ª.YŸ[7í¬ÛwÁèV¹-|Vau…2/ ¼7¯ý!øã2Ÿ�u‹Ìö13]Ì….2Û­õ¢ zo݉=4!3S–¥ùçh4K÷oÍf�ùK§Y^8ËÈ–­‘CC}ßOy®4Z}–;CòøÔ ú¶¢(ÁrqnIž:3§7�>¦'·MºED½0äÊü"ø˜?Á�7­�`ä>û¾.Dñ„Ÿu‰¸‚ —VÑÈ5¼5RÕ)`.=ž‰ÄKeäO.þ#à]%!é½À§yÒmwn½Ï[uûàoÀ#Àw‰Ðÿô~hÔÑx9AYH<6�GkD“ÍÅ!rÔÄ®±.§nü¸Xäû×ŦñÇQ %‡<ÊKC/3–‘¨më Û耘B‚£Æž?¯sE/x–ä÷ÿº~ØY§ÈÇ€‚ëœþ§?tøàÍ.žÏ�¸*'¢ý5ðQà‘ÿ1‘H$(‘H$‰W†Õ£ÀÀº‚#ÜÆŸcÊ<ŒäˆÄ‰Rݘ «ÚúøŠÇ×Eãÿ¸rùæÌ�rnå&m憻n=P™_3[×{<‰Å†~ßÐëdt»�µ&í5'­ sðÈòÆvz�!öÝtœáQ�zÌ|—üÁK˜K�ÁÞ»5§ÿæqìþ >Pæ6„ÄÀÈÝã \›ôº”‚ÏÚ2tÛn�±G €+ ê,˜…>2ÓÃ\ê"Ó]Ìj1pû"$|ëHFqÛʼn-h3ƒ�N榡(úô{ߥÑ\£Ùê2?s†åųŒŒ®34Úeh¸G£Ù'o(Y^�eNÍÞ gæoB Š8h–Ìtí;w‘‘¬�nˆ%Ö»g«ˆ¨Ö/ˆS7Ä]�¢¡([‹¡pCe¥T«�µÞZ0"•yœU` XM�ëD"ñ “Àw¸ræ�÷¿ô^§Ð�»#›ëKÀß:`cø^àŽP\ÙD\�Úø05åQá ÆXˆ g,õnƤV¬ˆ�M¬]ÝúÕˆ65íck_‡š×�š×¬æ<2�°..¨…c2h}¬IøK  †üþ÷M÷wé÷¥¨µËõ/mº@' >‰D"ÅJ$‰Dâ•çªÇ&Ü„ Å_ç-jÔljnìú aP«•ø?øÁ ]µ‰Ï#¿×4ÃÍEŒÁÕEþ&Ñ÷é¹L­BÉQ2W*¨@õÆgÉŒEÕø~.S Ï Y>ÁÊ¢04 ÆP‡ÝѤûSûȾ»Dþõ9¤Pˆo1`û4?5C±ˆâÞíØñÜßœõñ�Për…µX]†ÌÀÈ6…f ò¯YX_+Ÿrþý.>fOF(<‚´-2Ó-ã)™óÙ.Øê¼ó«Ïíx“â c·lCœ~gAš­ôÐÇQÔ Eß`_Ì CfÄž›vL3³²›µÞV r – •œ¾Íå»KûõžñÓøxY"€Vb÷x«:|¹€`ð"�·ŠsxWpac?¾àÛãA�¸¡„ ¯«± ŽóNê¥Gw"‘¸žÖ�!6Gü� v> ð:v€LP¢Eà‚ÿÛ€Rìý¶ ŒÁ#Ĺ ÿ„‚Ì&ܱ….Íl¤_çŽ=&è½V4FNüžLÔz(œw½å“°6«âcsÕ°mxD§›å‰DbsV@Ó¿ü—Ïgœ»·ï¤Õƒn»û€cx£°ü õÖ|3p{l£½ÖrÃ×Ë×`žè8ñ²š6J€+ËbÖ@AN¤>Öží+y�ÅK��f}ù•[Duõ–Bñ5'œKDpÓ«¯ÈlbáµâÂÞ_+\&ùýï?¼»:-@2àcɵm"‘H\r4Y&‰D"a‘“À@PkC×K±ã¨U^Ô±®NQ¼È#P‡Ä•CŤÆÍAß@Ü�‰me;¼O4qçâÝcyë9³vKŽ`Ar”ŒÉôè®3€€C«¦bTa­Áª»? Ñ6�UÃî-ÓzÇ §/î}¡×3=Ãz»ùýÔ`}­E{¥Éúê0û�œd|÷[P[PæÆÀŽ=04Âf�vAþà4Ù3+P¢µîËì¾!Š#£Ø›GÐ!ï«� äÎ]‘×Ì´š‡^öÄ€1”y–á� H&£,wíܺQ¦~láŽ]Ù WnˆñuÒUÌ™v™J+©®‚¬_”ZO÷^ŠlÝ:šao¡¸q»²¹XEÓ“`Œà×Kü½¬·g™Ÿù,ÍM2¼¥ÍÈh§´üi¶ ­yÃ’e“©»we¹3$Ÿ¹¹0·(ÏL.¡ÚGÎfì�íùòÆgË58ÜÍ¢U÷n^ÊõbŒ/Û:јðZúÞQ j¬‚ÔÕ…@« “@;=æ‰ÄeZM¸XG€�ï~è¤Õª@'�·E tt�?ßÌzõ?ý�û€Ûj¬X�õåqbÎ]ú <¨«âãi‚1j-’âçq¡¥&öN8'jæE|œz'¹~Nñõ­/2N(¶ÕSg-U×(~¾íÿ&Ù$ùý¸x+u©þ 覧J"‘H¼dè£i‰D"‘ d?pt$ˆ@5n™\wDÂWAÛà¯÷#BNèöMÄ @UY*ŒˆÀ–Þ 0LÞ% Ýý VÀØf.ÜytAôM¾ÍXk PTk j¡×Ëèw3ÖÛ9ëkM:ííÕaÖW[¸ùíì˜8Vq¿f-`Á*¥4¾kÓ±wÌ «4>wYéþé-xŠ#Ø££¥(¤£Y •y$¸�?&4΂°Î£Ê@D*só¢�àê}*ñÇf¾‡9ݦL×ýµ�DÞxÿ6'¶fevG �ÂÞ0„îÆŽ·@ðlZü±U·o¡»¢ß癿fiþC£ë �th�ôh õJ(oxHqÈ×Ξdq}§\œ[’§'— €â¾±O²oxÁÿ¢ûEU[QÁ‚Ï{u�üBUò¸p¬®‰Dĉ»| ñbPÅšÉYþ÷ 8æ€ó@?=ò‰Äe A÷?Ü <ü-ðtZ .ý$ÈQP¼ öÀؽO¿øÇ@(êìuk„"‘„ýby´MŒ¸X£¡uÊ€>ñ¹xtëõîçl4¶P||ÙD;­)�•ÅûE¨»F´¾Þ}ŸÔ–y�ÿÍиÿƒMà_(jÉp®ª,ð)àTzª$‰ÄKCøP€‰D"ñºg Õ7;+?†Tƒ˜?� T©óÖ?QM „nž|Ì�ˆïnµˆ1¨�ýãÆ]?…ç ~XU Ô7TMö±Ó÷SЀÑfžé]G÷°­¹ ÷xÂõPņ¢�2õº9'­·›´WK ßúÆwíF•j²>Ø:cã€pÙô•üÛsä_¿] "wp¡âÎ}]Ó`w4Ñ�Mìx™£ã tØT—Ñ DqwîZij 5â�¸,,“jYfªMVŠ>kÈr?æ½ÞÿûШ®HËPìA'†±{‡Ë\›†—L¿ 'AmÌê§jé$Àég?ÇÒì#Îh/õÉJ–NDòŸ� +còøù;åüÜŠ<39�ÿl¡†±o?ˆ¨J(Š"�p£¾BÑŠ«7qeŽ@ò„Ö€ŽP3ªÙ¨a£¯¿¯�|îÅ—«ºL�aä�üA'‰ÄU¢ñû“øy �ˆ©ÆŠ“ÿ\$ ^zßÛ€D´�¿ ËŽhl� -¾}MÙæ\¾™ØÜ]»&6Näþj,“¢"Qü>k®šXA‘¸:1—tõëºâå¦f£¯Gd¾ <ÁÒx÷‡~å8¨Råñä.‘H$’ ¸D"‘H$^ -�7úøá&ký,×ÇÐŽ7õ?€ãâ㔨�â?CUÜ}‡‚•œY3_�ùAðs×V#×;oÙ£'v?Éþm³xxâ è÷2úý¬€:ëMÖVš´W‡è®µ8rû?aëø(€}ü±ƒ,d ؾF¶nÞ-ÜÃ3d�ÍC¡ÕŸ¶êóª�—+ï—Šá »«‰Ž7±;›èŽSmš(n Tï}] <.s¡[Š>æ\3Ý�¢âå/˜‹\ž³–L°;[èÞaìÄ0¥uÏöW—^¦§ü|½øuiWræ™ÇX¸ô€³ú~ÚÒ¥Ñ,î‘7úd¹z �|ñù{å…i•g¦–|aµlÉ'‹Ýõ%ð �;¬Þ�j£`Šú҈਌ÑÍUêl»ñ�1XkË\UáÙ›ƒ{ ¬‘w/Ð)`9}$‰ÄK§ñ‡ö?‡R T D ÐþP6IïSïÛ⬀LL@¨ù>©³üPêDƒ:adAñ˜7ñs6kaTgõÞÓ&Å"6a=æõ®ôê­�Bd@ $ ×dBTlãu�ÿ ô^‚t+Ê»L 4Ížž,‰D"ñÒÈÓ$‰Dâu‡Ü zÕ@´×Ç£±^ÔÁáÏ+âŠË}_ÕÀ¸†&+ÆUG\Òá-“DÃ9ã¯a­¿Dðc[?®G¦Ú7€d(ŠJŽº>{¶,ŃÁñrl#R`Œ»MãÅܱµ€”ueß¹iXœ‡±0º¨GGrz?¼—þ];É¿|‘ì{‹`ñKùYïÊã.ÐVû˜µ>œY#ã[èκ-‡¦A]¢eЖw¬ MAƒé[Ìjk}d¥@溘IçÖ­¯Ä·,”€ˆå5C»g{Óì¡-üöÞê²ìªïûísï{ßWsuUwWÏ­jõ ¡ K �HÈB„°#’Â(Àq0!qÖŠ³ì¬@ƒ&Û`c ‡H`ZHh°@Í-¤–Ô­îêîªîšçúê›Þ{÷ì¨î:ëíu÷:ëÞ*uMÝ:ÿZ§Î¹gºçœ÷îyß;ÿ÷ßûéÃ(pé ´¯ß™“$HF!)-@ F®@¤«�‰‘^l[<‰ÊTsHÅrsª!b÷’^s,¶'€¢ˆ2¿¶çÆ«ý4F$䀠ãûˈawouýªÚóªùgëCºJ@éôkÕ‘E”ÝÀè�âÇ£   àYã&� Q@‚ùcÓÏBqyx xÑ�É®R §.!S†W°ô ¾M…µ•!ò¤w܆�%Œòó’ &˜ âcß¾‡@2òÇÕÉ+‘òóÌ•äiv­ò$\è!pð‡S&}˜ò¬ Ï Ô êì _º¬•­¥    @ç‘P½‘-Î<Î)¼#F ޼É;e7éc"œ@¾Ÿ€¢&O™Á¾x!v¯²þèªZ˜)zˆ@gÌŽ,91¹¥î80ŽÔl-3 3”€ä»RA@›A@%å+æªX¡SIJ7³–jI„í;aãf`zÍÓï¼�æÖ¨>Exô4²4qÇšÖ(g¤£Ç"> §§È©)H�{ÜÆ}�_¨HäP"‹*˜4ÈJƒ,7°Þä�l ?>eØŠ{-Äl¦¹s+q÷––¸º,˜Làø!˜NºŠŸ €¥ó&îšÈò™g�æeB`„†�ÑOˆêµ¨Äò¥aQžZÛ®»7œ4–R@T:áÜÓ3¢Vu$®#„ð²4F÷¼3¿7 )QÛè%~¬~§­ CÄ”L•²¸ä8Âa )_ Âí�ÈLæz�g‡Ï÷á‚ì‡ ÍÔoÈC!GÂô¨L”á±ißÊ#zî™ÉsȯOì!}Äߣgmðõú7=j$žã0¹æû~XÞ@?_äÙc8²#c¯ùf`OÙ[ TPPPPPБ-À}À®91"AÚÅÒήְ3×Ô—3£æ‰!U;ŒµvàÕ@Ö¿õm×VSuÛ[f¢Jpªµ¾B¥kš8;ÛiGâÉŒ–¢l[<(Òg´_}:HMrŸÙlÖ^‹ZM­ ˜ø‰6))­ HDбC0_¯ß@|ýxÝ�„g–©¾x’êK§a­Ü+Ùô¹)NÁC}Úõ±²ÕY™�2dtESz¦1y¸#‹-#š;·|%l#Þ¾já²ANŸ€3'@ª ¼¹·�®@ÚôÓÉ*k++ŒDçoÙ*Dò+nÏä®ÍgP ‰âÀnrxr­îÞpAPTÔ¸U÷ˆkŒˆ)øÚX cÒQ�ü±Øò0§Pê«XŸ‚%s¾È2ûÊœšìä©Òm›Èl ¦ô°9\‹²ô0p¢ø*(((¸óoG¸¤"¨)è^žÎ$Ð=}Ê� PmH!Sa°º®¿ž´ïOÚé€â†A³ey’JûÇìUMû¾{5±�ô"‡ÔE�¼‰½@Þlœ‡ ÌY2óÏ¢§ÿýÀ). ä°ÓÆ)šÒ·¨    @ £dêm7"hT§¤Ñ6xù‡%<´Ó–¼ú§C褲KÊ·6ªÙm‹­]Wy¤š¹wª)h·;"H0Sr1Ú˜R•ISѰ!Õ­°E·/žNꟘêËàÇ"ˆgĪƒbIµ€xÿ@æ–¥™Áу0^€í×ÂÆMœâm›Û0}ã-„'—ZópáÐ*r| f«+rÖñ–×{,¢ø>,­¹2 Q-WßÝCoÚHKøÜµµ%½.?&ëp,©~BŽø @ð¤�€`X={:ùL …ˆˆ¢$¨€G*W3ë%4ŒºoÖâ&@PœŠHHu\¿âVHä‘"h–Œ1Ø›Ù?ÓްQü�HÈÎæwÌ‘×Þ™•¥%õ+¦Hê쉴}�P¹Ø ºX.$ç…- SZìGº ãÙã!àž�¿:`øÇK¡§X,„„ºöCä�xÓs®Ž7—Æ CÂ�ÚÉÏõ±ò¾›X{qé!5}jž Tù¾ÔÅÑ“a¦çÂ`�<©ø0O/¤m@pmÙZ TPPPPP�7ц¼x1°€Lùƒ'ZÍ!6bÇ`$R®O|^G1d‘©„:d�F�ÔEÝ=çhËç°šJž�+s¤8=]DM9‘ÚULë Ö‚4&1g>Y4³)ÒcABÔ†idDG IHDÐ/Â5×Á† œ7*!Þ¹­ -¢N­#GÖ�£çÂ*áÈ*rbÒ–ááóÔ¥}™{™ =eêêl¨inÛLKøÜ¹Ý<âŠA�SÇaé$-ªjˆøI1óØ °|ö”PE$DÚt šÚök§‚®¡lФNCdÊÆTËÉËÀ±Qê”2ЦÅW{t¤CƨSæÍဪµ5×^êü…õø 3tˆh +W@œ99›�(XZ°¹ìž‹ /=�r˜”–‚‚‚‚$òǰ‰€g¸88�T@w÷!8ÂÆâaÕˆ¸ú9"H†'—ö°ué7Q—Ÿßp¿ôôë O”à×Ê«„zMãÄ“1>ÏÕëk‹K{Ø š#¦úú鴮 °ìå¢AÎtÕga�Meo)((((PAAAAAA®½Ø Šb®uÌ·‡ˆ™IËþèQó_ŒÅ)�@ysÃõ&Í|;—7ØÞ“¦áäÉ«`†}ùüÞ6yôš‡³ñáò´ßoÓðý,=h&N{T>ôødêQ eÉ©G�5..Ö±¡L��ÝÌÊSPPPðÕ!”%(((((xNCÂm(oî©ÀžDÖ X4FPÄÈMJ'YPé1÷œ/ H*Í;šÒÈû2é„T§lklP+G,7õ—V'#Å‘”¿XMP (ÒuÍʺ�U°y†*>¢i¸:Wi´iQVÎ>E3‹�¹ÁBè VG„ ª6Né BM·¡¦Í_[�OÂÙÓ ru„: ›jâŽEâM›ˆ»·_t ñ®íÄ6¢›GižWYˆ ,Ÿ�c‡`ÿ´¾~bôkÞÆöÚKK�6Áâ $…õµ)ö~�–ô©´%‚BÛkœŸ¤ß‚üj{cQ�¢ˆ¨ PQÍÉ IÿUR´ ]ΙÇXª…)ÿ‚åÚ>áfòª±>À)ŽR{O@x¤2E�©’BG¹¨¤IRç!6Ž”Ø€È�À-åeó-y³ˆÒuHÑ*'€=ØœBƒÕé5ó•'bÄåw¿ól½¤®¿²c``LdÈ­pªɬ£0L†„B'{ ¾žÕõù¹ñõ\ãûx Ô�-3×@þ=ô0—«¤ ‰„à\\ü¨    àk¡ÚAߊð sˆ¢¨c\è�*ÎÇÈüZœÅ ’=„õJèö'Ò5ñdu "Xÿ³OÚõáãýŒXϦbÒ´ æ×ÇNá±Fj €!¤›ê5T•EQ"*ŽžÉ;îm¡"˜Ï–H¨L½–N/ƒ� Ž U—#)íI!N…CÏÀl„Î+LÖi‰žƒûà™'áÄX] é“BUÑ,M öúä8K醧}t�ªžQ�fŒê†�È ªjÚ8„˜éÀÐÌÖÏù°U@F@…Š´¡ ë�]Bq¦À ÒòH䈒 Š‚0³oÑHÛÔÔDÒñécP¯tuLašÊ#¥ìRÝVbyŠÚÐ0Â4P&ØDv rp"R>˜ ¾¶!UÚ²«Dþ‘0”‹�O’±âË|��QöÐ3nueÒ“öcÄî7Hå}Û ûé¡gþô¬™/S[§abË•i–X«!ß> ©tÖÓ�E\\Læþ‡�£—ˆDU©I×UŠËÙeAAAA!€ ¾f a‘^ú­(;PÀœ±Gã:Lcu¬®™ÓŒ¹$#~\ž5ùtÀòðD‘z¢¨mc¦œ VÇ`ói“v -Ò�_º÷¼_DLÉ a>qª„´º¹^³õ� ¥F©P©eß±J<’²G"’Ú8ÔÍüÿÔñ£ˆ� Fà‚H—L¨*K§k u7ž¬Ã�§àÌ  ð;øg°zN�Cû`ßcmÜú÷™Íl-ýºVžtK!„tmŠ÷z¦ báÌ©eíûXKþTuCUÇ6Ôu43‚m`î�Õ³g˜ê4Ô(‚Jb ŒªI‡À±¸…å!Ýg# ÔhK[ªàˆcº6õ¡Ú³†Wó€ÐGI'Ï“H¶ýØÐ�Lù˜b!ÿËhO.)êÈl€€È�¨Þ…ȶò!UPPð5Œ� DR\²™‹�ãÀäùµ‡äPòЬ²ÇBP©H‰dí áûõ±Ö~Pé#½dHžüÒÜZzy½÷&ÂÔ¥]_ÇÝ+ú~2ëz^7$µ<ùÕ…Ÿç’A¶ÚóÓ +e{)((((PAAAAÁó¡ „êEoD¹µs ÒU礀�‚ F²ô˜JGúX…äX½óË|ëçûG�T2têúC`‘�ñb±‰ä±6ªë7&E‘9µ'•á¯;ÐÝZ¯£J…bN\äðÊšÙº­rN!4ùnQBŠÓÁ>Ç=Œù7ɇ�5 —Ê�DHdƒ¥��pÄE€ÓÇiÍÂ-/�È×fX[…Ó'àÈ~xz<³Ž‚³g`:�*¤5¹5tÄO›Žôq¯�„œÉ·LxüóÑúýi•?£†º}¿ÄäH¡m›wh †Ó§Î2Ñ(˜Š t$+Ø#m{‚ ÿœ€ F’ëLKz(`eFšX¹ØsêU=–øý¦-³X2·Ö4'ðN·Ì¤¥…„4G§@²9€© !ÅförŒê­ˆÜ�ÈbùÐ*((øÚ$€¨º¤‚T—Ð|Õ§2¾_yŸ—U~X�óT¿(†Š<é¤äÕ1 +‘RžA”,’ÉWò$–ºëSqÖGÿ=òsë'xü|ó$Œ['OðTîO åÖ`þê[«À.’Zn1óŒÀzÙ^ TPPPPð|F7o} È‘€€;œì:9¥ wPk«™ï�^`¦ÙTOø¨úü€ÝK° ¨2¯gãë#©4‚æl²k‡ø@¡S'uh¤O uþN€N[;Ø­ÆÕÙd:+ H›F‚Y¿‘µ•³@ÞÌE¨” IýSEêQÓQtL'‡8üÌ‘ #/hCžJqðª”#&jÚ  ; öÒ!„çwP`å,?B;ç½�ÁágàÔ‰4…jdäN]ƒ][ðkkù¶öÈ“=¤ �çÆtŒ¥S�1Z˜Ñ¾_F uf´&ë–P¡½v> ª<´$ ›@¥ÂDFl §QÔˆžyâ|ÿX ÿ„˜Z5Óo)m噃–.Y�êYÚÊÓ£ÚéO:×NÔ%qBð„Ï\ñˆˆÍ&š8UMå6#Ã@³~ÐÒÜÅðºÕ7Uù+((øÚ�¬€�:Å#Z\2uäQàÉ 8à÷õèÉ£‡ü Xðu´Çß ®Œi}jq!XlÈÝÓ©œâ�ÿ"_î¯ÏÓï�Ú·–½÷³0<Æü¸Â|¾†üú«º¾4\ÈfSÿ´HiVËÞRPPPP ‚‚‚‚‚ç+Bµ�P½x°©£XAdN‰Ó´‚8³K(èñ}j>?ÚØCRYçÚbG9@Ö¼WýˆÝWÒµÆN]ŒEB12 [ “Ë(�ÿ¢hªÁ)ЭõA ‚J…ª ªr¦¹…¥Ógð6àEb2Í“‰/M>[ )uÝІь}_þMÏŸ2Sb�Q UŽ ª*Rl¡nI!Úx6ƒ#ÏÀá§a匉½ž¡™ÁÒÉvn­9·#áìi˜M!ØÙ“Ò¶V9µ�'}r„O׬)xso>4MdÏ>Èh<�¿?F£Õ(&CŠHLïq€gSÖ×–«'VnaT*€æ®…ý`ï~#E5Z7è<-þÆüþdžÅª]% £�áëÉ#v³{އ�߃ì>FƒHhƒj$™¡Ë�IY¾¤p8¦²õ33–î °¸ ؉jñTPPðµ€å®ÃB;ؾdø$䀇ö�Cùzy…K¶½/óäM^aîûÐŒúÉC}ÿîºêñ“¤9UϹæãÐC~Ù}† 4uã Ó& «Šòmü=N\B¨ÂB R�¬•­¥    @Ï7„jL¨^úzà:ÿ;:S· tÍ©)V‚銄DŒüPMï7Ã2†áIŸÔµ’Ò¾­c„æD”‘JªN½Ôiã¿ò¥„t2 jÓ32 Õ¨×/D @ R#RƒŒ™éfùÒáŠét Í™Ñ0÷×R…˜œø's^IÙÑÄã|j?"\PHă…*#$’Y²jLT‘Ô-&ë´Š }�Ãу°ºlËõ\ ëkpêìŠÖ¤ÛÉ#´y¡%whC•b3ëf!ø¼ [7¯þ ŽʼbeƒcßûØ̦‡iÍ¿�§ŒF±%êÚÌÀ…ÊBŸù—ã‡ËÉÙm(B¤ : ÇØQ¯!ЮC§Öó�#æ+L5šò#žéA ^Ùã„^¤~^ŽXŽ]µ�µ��Èû4KÊ$ë¾í âȬŽß4+³5JåV¦Ž0·ñ×À�ˆÜ l.nÏoÈ2‰X°Xjà.Ž{3†�¸¸—àPÉhÖ,š]Ó{oƒ({|À«SzîÈ.ðåÃ~Ž<„<Á¦=„Cfñ|ðmÜuLÁÆèÇàç‘_÷Ø£Û,_Zÿ?ˆ‘@T@(þ TPPPPð|B¨„Pݼ ¸$€jÏ/â} A ¡b‘WèxsIõ7¤öëw|Ú›Ÿç/^S,6/ÿeÐ9‰÷Îà¡M[§(ö4‚5´î±ÚÖ^½sãIeQT  !<²|K§Ž#(þ‹e:¤O¦Á”ªŠÔµR�Zó^ŒÚCþ)O}ù}ÙòÂI oZŒ”?'#ìº ¤üŒ¢¥ÆâkËpä­_œ£àÔqXY‚é,Ý;\=A•vlÇÂÓ�á}pú$Äy3n£^¢Çʱc>~ÚØüùÑÓõËD'Øk4ì=ÀS�¾�ö=1ž¥0e¼0Kfß4™TLýã˜Ú„ÙtMÙ7‘e½Ón@  R±¥Úß!9 êŸ 3³¨Ž,6]�=ç)$tÒªš%w­‰•ƒ2]¤ûgUBþ^1cã÷GÛ/T¬/ ‚FS ¥ù5Ú˜²YŠtÕ‡²þƒ€·ãòaWPPðü„œQLºLŠ·ˆ,ìäÒရ,&2í*&�r$�ËËÆ.dÑ£lÑ�ùÚÜòЬ:§‹�éCÔ=•«ãI9|¹‹‡•VyB'Ð…ú±fÖ.øë²ïs\ZÜR¹çG@N—½¥    @Ï„jð×Q½ƒ©], æ‡Çà…-vÈIj+bþqß#²¿~òD’’‡¯­DŒðqŽÜÝ¡´tËD°ùÙuÇŸ=ŠAB·%oÚ*RJ·×˲N‹Ju. ª‚QB8´~‡ŸÁš5 M±¹E$�ñZògÔ*:Úƒþz´Î?ýØ{„ |°ù§ª*ÌO�©[¨jK‡¤�A`mΜ€£‡`ÿðÔ—aÿ“pt"†ÎB3år¢ÓÉ£´dÏÞÇáÈ!X> Š©{BÝ™W†è1U�+OkfD�'{‘aB ‡ö拟~7ãñ:£…D�fÔãÖT`{*3}*Å xœ:v8<´v¿(µ@¤NG¤Òk뽨ó‰eûIg.Ñ"óõÓÖMÕÔÈ�;XY˜“Òm:e»}ÀÔ@àçê÷¼üž’ÆœÂO‘Tæ�u®ø�Ì5˜¨c£S7^�F®«:} ppCñTPPð<Ä xÚT ’ˆ€0¹‹K‡CÀ—†Ì’õ(UÄ›ëùÌ äûU †>…Ñ€jI]ÍäK–„É“-øz®?†æiÁ!?Þ˜íË!×o)70>OP¿v™5ŠÝûY[Gf=àÒâ®îëFi{ÊÖRPPPðìP—%(((((¸¢Õfà�t (ˆ(" ˆ÷±1WÄ$3ef†È›CrÎÒQÀÈ#gíIS¹Õõv¸U£ÝS éÚbÀÒ†œ¿ §ú1…€å;fK#ˆ!$éÞN=`ê£Üš`SÔ˜g±¹¤�‰©šôºñ#òôÚ7©Dflª>qúîæ–ÓÇÙzÍuØ` !4h„…ªÒöp?6‚F%¦q>òÙ?¢iÞÌmwÞÄW ͵D±µVP°t*‹°<Ç3vÛ63X�ÁÊr÷L{¼£1m09f.Mҵ煡™Ât“X]�õµÎKOU¥4î’)€ó—„Ë÷ke +W!áÂqôàþÄ»�'ŒZåãs$ÐBëûÇÔ?•BÄÈ’Hö?}:m^‰&JQ ÑеæÞ…§Ì·—ÃÆ:Ã"I‰”2ÂEm_I‹�#s5FDÄT€vŸÎ¾aE_/éóï`ÅžP¿'ÅùúhL´Ö>PÑù¼mÿÁ`û¶[‹N¸ØN”‚‚‚çäI„»P#õ¡Íû—vz|ÑÎ_-¤.=ì×¢ïã<É=ÏqzhÏØ}~Àò}Œ�¸�ÇCx‚ÌmÚC Yyv}|ßyµÒ0±dëÑC¶­Æ%„ÈÆ Àí šˆÓ AP"Èãe_)(((x(¿¼+((((¸b¨G#DîE䕈lÍÿ ÏNÚ-m×m,€ZÚs'ž ™«gטó¬OŸ{ô–«âîéÉ™{è6_#~Ü=}ké´qÜ~¾ä! ×ŒN…GV^ŽJŒˆdY·ÇÝúq¶ï¼ 5‚b ÔÎÛU@hc Šª`ãWŽÜÃÊÙšm;®e4 ˆðU|)?˜ù8 ¤Øò¼¡`ׄ`å–g훦X_�ÕeX^‚å3pöœ9Ù*‰ZÕÐéã´×K§áì¹°«gÛúmþé­Â§­·t V–h‰Ÿ&BLÁŒh2²))�l|XÀ朙¿¸y‹«ã‚Õ»ðpäÀaþäRÉ*ãÅÉW”ñBcñ¸Iæ#"$ß?‰��üáÏñCÏTïÝk8Þ¼ Þñ²î¬>_¼ðTjidŒ?Û±„žF÷�?: †Î�7ë¨j×"!åù¦2"yr9¿×höŒHQ×Þ©uRÁZ‰ý/)POp©½�ÒµW8©†´÷oAu˜–Æ‚‚‚ç:ÂáX�|"2ßë7äÒa†ÈYSQ ªY Ã~g¾Ÿ|z”72hÎÍ «›´‡ørõ:®¾öÜ3s?ƒ/ë!hdh�,Ï—�+Ÿ?¬pê¹ï‡.µú§úÝ�½ᕘ’Y©9¼§ì,…*((((xn?B»y5p!�QaŠsè.bR ð„ fÊÈ-Ý©ªU¶ƒ×óúE¾¯g}X ¨©n°n4Ó�t1o„êÔ=Ö6�…€l{u€ VÚ9î^ Ó°o}›¬Ä]Æ$ jfq£¬6§õ–ñ6oÙ€õ0óvs2¦{.)ïìéƒ<ýøc„j'[¯ÙL‚Ï.d"ŒÔAè:FþxR(XY¨RY5Ï·:ÎÜ\pþrPˆ Ä4)Ä8?/7‚ÇÒÎ?OŽäqãr÷lƒ¿–Ìu†ü¹˜áàÓ‡ùÜÇÞEV-Lé3caq½%êQ¤®Û@;烑Šþðf²¾Ìç¿p¸þÄÚ[¥a# •€g߸ñÝl “ÔÒ)€Tùkä©@×Ï–=c5MïæH�àÈXÛ28„³âÉ$ÛK;å’„€dµK+$Øý+µ�¹9l®FŠ›ŠrlGdXbù ,((x®¢z¼YäMöÇW¨@£ˆl©>,sép‘]À5=d^ýÑ×Ö+F,Ø'�‹é¹§ëÛÅùqøþC�ÂÇ·áÂÉ'oöž nŒô¤}žøk¢Ç|ŸºñøyúqÒ³>ûLýséPÿÎ_¾V�""AD‚ ø«s¡ì,…*((((x®`¼pmKüˆìFµB$ b$GÇ|�PÍ™>sªÌÇEº¦­‹õ+t�êÛ¡¥ÕPðŠ ßRðŠ"ïÑ1(ªFÔØ!¨Õ1RHÓœóä˜8òÇ—Ù�°ùˆ÷k‚‘==¿¬e)ì]y*hý!p.–S³[â�úIvl1-àϼ5ŠÍqÎÑ霬0‘€¶A㔣÷pøé£lÞ~6�AxVA,xÕ�•{å�`ééÒ¶qåU·<]¶•‚‚‚‚B\íXXÜHUÿ5àT: ˜¼Y'œƒ3}š1Å$èüÊ ‚„ŽÉ#‘`>„PPç#ÇÿRÐõieÖ.oΘFüA­õãíÅù~ŒôÂ>ƒ[�ÜXD@ÕÖ?BAQS3Ø¡´î¨—«/¯Þ&Ý-Œ9‹ŒåÈt!¾€Ï³uÇDBç‹¥0þI!Åóå¤²Øæ‡Ð¦ëK<óÄ—8ulÂæ­;ذqtqÌ‘ÉGøäÌ£‰#œI¸L:K O åËÅP9E�¥3þ€òó—KbTžøâ<òÐLªŸIëëg|.Œ[³oŒÆ­ïê‘RÕ‘ªÒDx¹gÄý’öôÉ£á£OHõèô{Q©A!M\•_ûúÍ¿¿u÷*;¯¿ÅõE‹ØTm:Fhš@3šYÅl*L§#f“sés!0›ÖL&5Í,åMÆìºå%Üyßýlß¹ÈW ÿöÀ_j®È[Ô2h¾ŸyလPÅŠ-Ó5smð…Ö×eÁé«üÕ_~�å3O¶$Ïh|Žüi/L¿ÖÛt�ˆŸÑhJU+UÝ Fþh–˜�NÖøâg½óÌ÷˪Þ�H…ÁÞÿº5|~úÝÿ=âIÐTÇ‘)F) êè_AQK§çQöWfϱø=Ðö‹˳6~ï±|r{gç9¶lÿø«ÍÉmA)Ãûëì�~<˜ô¿=¾Ž¬UunÏVP=¬–�Ó‚‚‚ç þõê5 ¿€9´O�øëÀ_p‰±þ'ÿ¥À›€èÄÅø:=J”„‰Ô“ö1víaí†â\w�«ŸË÷&Ó¢ëgh|†ü¼qsŽçæó}Ÿù±[» éÃå}àR›^3Ð/þOÀî̺?¼£ì(…*((((¸zqp?°!F:‚Áú™Ù3+Ó[ž)�,A2_—œ=§ Y’?ì´ž�ãö@FîøC\»Ë·6ý_&5¢ÖÎÓJ¤zù|ÅnÛ\m-mmT5ÇÔxüõáÈì°5µŽëpvöæmÿZ_vç¶V±6U"1 ª›`$PSÑÌB¦“*Åu"ƒR˜U4Ó³YÍ�·ÝÏ]÷½„-Û¹”°—Ì`³í!‰zò•~ˆOd®ÅÄï=#–-O I'íú7Y›‹)‚b‡³ûú�¦ç(Ì�ϯOn/ÌäÛµáp˜•�Ö‚‚‚ç ´þ“À_Ôç[ìþÀ¥'�þÞ«€W 0@ÖH��!îýõpÚÇC}{xu‹Gùâæ&¾nÏ8†I$ƒW:Ñ?g_/?Wß¾7/??¾üÚ>|äò�?¿´›öyИùƒöÿ.»IAAAA!€ ®>\¼ ¸¶sø êü°üœß OØX[#Aù£æø¼«–É«�ÌîÐR‡¿´ì^™C]u&Ý4#ð÷3Â…ŒúÉa)åÛZqùhf„ÝõSU–ãÂè÷�ÿ�ÌtŠ Ú H˽!쟾eÇïp÷Ý·²°¸Ù)�Pb#(BG¡‰m:‘?³Y Î*¦“Ъ�š¦nËfÓQKͦã6ïæ<À]÷¿˜ÍÛxÖÐ>ÒfªçׯÒRì\8qt™aªŸÏ~ôƒ,�ÚËh4£·¦Þ¨ÇSÆã†zñ\<£N>ªJ©êØ%T��ü‹òôžÇª?|zwµgö6È“.ñæê]³7lø¸í%¶¸E3"Ç”+`yžÌ°çŒ !ÓÞ3Ç$J·\”?Lòª¡ó"„°}0»~Š) 1Ø~èx‘`{k*§ôm ~þZsªCò‡w ªG9Qü< {A~SFFLÿsÀ—/ ôà�abfX5âTBƒí|lmá4L‚�ë§§nôu\?á‚îíÇ;L`i†áuÈ÷qQÊóÄ×€?¸LÐ�ßdë&¨‡€Ÿ-Ÿ÷Âÿö[e .¹‘Ý^E’®³~\™Wþ@—¼98�Ñ|[xókfê(5ÆŸ£ù_¿#¤òì¯û5æÉ% gVÊ)‰:y¹ƒàìa/�7ÿf•¬¥•»k×@°¶™/Ùjƒ«>vöÅÕçWÞ"fú#¦I5‚TqGýÐô-×>È÷ÜEU�œˆ±Ec`6Õ@Ó´&á:¦áZ5ÐtD3f³úÜuR�iãfÄmw¾Œ»î}›·�¹(P¡}z¡]A>Sú_1Ä™òø9_?Ÿù Õh�ÑhÚ’?£DüŒ¦‰ô™Q×Ú–eÉ´M£âŸ!8vpoõ¾ÇªOO~T”E â.Ʋò·7¼!³ù 9Ñé•qVÝ=�þùOùj$’#„4çÌÈëpûVBï^`y½f†Œé·ü–“êÐÝL%Õ1Ké�=ü³*öy�Òà1Kåc·  àê%€&üpC†tøðó—‡ú)¾ ¸ à¼Õ.}Ê“A5�A{ú 1Ó.`èQádû±1�Ë¿V24—ÞuÊ�i˜Œ³kðzÉÚ +‰žþˆ—‡üùg7€þ NÄOc*lùwÀƒe')(((¸8þñï”U(((((x6¨Þ�ÈKP­zñm„Gæ Ò«\¬aÇ$SŽ5ñŠIÄRβ’j*Ç@àM¦Yßv?Èûß°_nõSŒË˵Ql¾–ž&«õïZ+¶~Jþ;¼€Æü�UíÀ;€ñ;�¿EN5/@TQ@H_ÚšÛGï�}÷ÍŸåÆÛwS…*ã»DD›Žñ\€1™…K&âH>�Rºj‰ 6žT´ê ¶lÄ _òJ^ôÀ=ŒWz!åbs9WJõ³ÂCýgNîc4ž$¢gJ=š%So3F£¦ õ¸i ŸºnT•"! Ú¨áLÀ-�:"ý™ñÖ~’†í ©Žˆ‘õÙ+Fïh^2> €ÄÒ!�Á`êAGÔ„�êfŽiRŽöìKÙgÚµKD’]{hFŽ{(“vð�ÁúRnù^™êùgZ{|e‘Q.©Ÿ¿'‚2m–9 ¬—�á‚‚‚«”z3È÷“ÿqÓ/¿L$P¼¸‡¯Ò$™ù²´d CVµÓG ùªéSÞØ8�ÌVY7ß³­YßJÁ‘=™ñ ÏÓ0ìÛh`½u ¾�$åÏ à2@ÿ‘ûQmll"Àx;°\v‘‚‚‚‚b®    àÊã&àD¶8RdÀâÕ0ƒ&�Ò…«•ÚÚuªì^Ö•;äì¦[èÀ/èE²æáò‡“ÖÖ¯…­��5ÅYGð½Põ¿èÏŒ=»¼¶Fi�R{ëËî17kuv6ÿ¿'PÖ¸T¡K4·�þdöŸÝô7ÞöªªÆÁÔ@QÒµi‰UmÕ>±i?4m0PÍì\zÒš…£U Í*Æ‹;yÙ7}+»nÝÎeƒrù \uXYšðÔ—cÏÃ%„uZÂg¡¡M�št=kU?Õ(RW‘ªŽ„*)ªˆˆb>”<”3'Ž„qeôç“cwtu*F¼4wT¿5{íø³$8¢4" @†ä°gÚÚ qäTC$‹!¯�C�ˆXç¯ÇÔ„1¦t�êÇí3YØÜ²~ÌÜžjfñŒW¬¹‘ßù£*›ƒš€�2ÈzÎ!OŸ@ä(Д�ä‚‚‚« ¿1Ýü°9ó÷ÙIà§�U.Ößó“_¼–¼y3 "ÃêK÷,ÃfÔ$soz”Fƒ>ŠRDKìY7—¼Ú§¯í€I:zLÛ]ÈxðsíU'åï÷)\6,¼ù—_üª "Õ|à7ËRPPPP ‚‚‚‚‚+‹­À˹Á©`ò_ú¼‰3ÿ+o kέCàh¦GïÏÇ“BFðt,f.GÙuÏ\.Ü4“?äŒ)îaf¼3zS÷€ëßÑPnM¬Ä|’HpŽï�߬ބ\Ø·¾½~ß™‘†�ä¿ôo}`ú=7|Œ›_°›ªgœÚÛœcCò P…[2()‚B"‡*f“sqRM“éˆÙ¤Nê ÖW·Þñ/ýúûYÜXsÕAy^H~N]æ‰/}�§÷|–PM¨ë¦Uý$³oçÒIõs.©ëØ1ù†@U%³o�.ù# * ÑFÇ�„}i}ôÑsä�îÀÁ¯ ˜~ç£`{GÚoPSíuÞçF¼JçùÈ–¶x@ù’7ÿ¦þP¦�øu*¡”&§–ì9˜2å`§H‚»ŸjwÏq„°øõ°6ûµ1K~ßóëÑ!ÃýgDŒ‘<ÖÇ€“Å_@AAÁÕ„…ßœ}ðô0’4bÝ—�º ø@�ñ‹3LÄ>‚èQ¹¶y ,Ã}ú>†Iªá¼a↠“ÏË+{,MNÕäU>1o7KïÁ/]fògðO�­Ç—g�Ÿ*Ꟃ‚‚‚B\9Œ¹Õ; žäÈ©WŒÈi!^)ä[9£C‚ØýœÇŒ(2pN�ƒÚ˜kÝ!¢ìWù�~{à˜|ñË;@"„ü!°÷ƒ”ò°|²P«g}™Sû~kâ6Èê3+»ëO®ü—@e¤TZ7¥Bhâ�£?Ÿ~Ïuæ¶¾ ‘@Ö¥™…k T…¨B33uPlBO׳ÖgPRMB2W1�ŒÕ^öê×qëîëË#{‘0™FŽ:Éã?ıC�SÕ³–Ä©êÖ¯m<šQµ¤OÃxa–T>Ú–UµRUqnò ’Ï$( Îï€ròèÁðþGâèãÓ·Óè6é�›’Xå�òðä{ÿ�®:ÇT?F‚bJ»öj #ˆ½zÑž“Œ0—Ÿûnê^è å“Q1¦v~È“PI©ç÷Vè’b¶6ªx(åwPØvbùØxz�Ú{B§õM2~‘Mp®‡ËÁQAAÁÕC5ò€Þáö»˜Âÿì^lë’v™QiÆl‘o'ÞñwÎü‘wœë}ß ÛãVÍþò¥;vS9??Öpk`uTã€Ù[ëÎ;Á›‡S ~ÒæóQLù„­cll¾"�QƸžÏQͪ'Œ<óÚ°oòíjDcšGº/  ÂS“7mý=^~ç66nÚF¶þiL±0EPL¦ábÚ²ÖäÛ,д~�³Y«jMÂM§£¹Y8t#÷½êu¼àž›AÊã܃å¥)§OœæÄÑ£ìßó(gÏ"¥5×bRǫ̀k%TMëç'Ô‘Vù“ÌÀ…*R�"¡­OÛ�*DD0?yÕ¨ã”gžzjôößžnÞ T˜Y6Ûc@qxú­£_Ž·ÔK¨ê€�,ÀïسØ}.’Ù2{æÅ‘ÎÿM^áâÕ*kj£ôûgŸ? ®r™ç›ÂÉWçÿ,³evMlšÿ¿zNÅèÖ}À”޵3J¢ÜêÛuŸ>¯‚:byÀ ®$S ø¶´/{³¼~‘ËŒµ÷¼]€Wß ŒòŠÃPþ€ÊfXQä00z”Aç¯ÀÉ�…󬀯™e#£öWÖc’Χ ¾Ooú-;vC|ø/?ùóϯý?A¶):nü?<^v‹‚‚‚‚B\>lNÄÏMÞÔ™?ÌÌ«`ì3w€çüyh^m]2«gç·‚Ýö†œ 8ìÒåO.o˜³µÌB¨ó±ìàŒØræñT�êG­®#Ñœ¿%ÿúÚ¯ðcò§„©‚Fï=ûêðäúw‚Ô³�ZNϾnñ·›7î^bûΛÉ�?)Ɩ܈ MDhb ™µÄ³iÕ¦gÓ�ÌÀ¦“šfZµ×³– ±ýÚÛ¹ÿ_ÅÎë¶”G˜N#gN-sêè)ŽÚÏ¡gö²¾zšV¥#±%xª*"!R×-±Ó–U)?T-á“È¥E+«µmcª­È\'Š®tˆ ÉÚ ŸdßøÝ§¿W–â×cR” èú…±òúÑ?ÓÃR"<#¸½HŒüõ‡6))XÚO÷<ç�‚Ôû»IþË¢‘D`>…Œ<²2Uæð„‡ÕgpÏõ±Aû}–!9ÜïƒÎ\jáT@_ Tã iO|yøµÁï{4ÀQàTyð ® ´ øU`“SqÄÿF2ÉÅå'‚~üàÍÀ­6¦A>žtPß¶Gñãò Ùû ß›ü}‡‘#¤zë T:Ð6Ox ¯Gž$òåžd²µ:<¸äÏ"ð  ·‚äTU ürÙ) .ô»e ÀPƒ¾¸«crÀ©z2ÑûHÅòIùšÒÝ>Œh¢ëÈû�èU�ýÊ�Ô•ù¹0²!kŠ)Í/äúôfÚ\{—6ø|ïÃ#çKï½4©¾adÈ1ò~CðNˆAÉÿâß^ »× ¨ß¿òªjÏúwƒŒ:ãEhÐÄÛÇNßrãg¸áÖ[¨Â‡aEBÓ@ëhV%ÿ@’üµyL§­h®jÓmùˆ›wßËK_ñ[¶/ò5¥5çvêØN9Ê‘û8vx?Uh•=‰ð‰ÑVÉ#!]‡†ªRBe¾|BÕúö!Tšˆ!:Ä�´}hê[AÅT?’?äGÚz,�>*ïÿâÚø/§?Ì„Û�¨à•h:æÉé·�E¯•åγåˆâÜKžQ$QÔ�#ÿl»r¼z‡¬Ê§¨É*ù=7©]€Œ u„ˆú{$²*à Åæ$“šÕNݧ¥ûÔ�–Îæõ}æd•@y?së¨VËÇ|AAÁ•Àâ¿‘o~4‚x3b 𿟾2$Ð� ðð:`ÜCâôbHÙr!Š¢�0Ü¿º6ƒDŒ¿g¿(ߦÇ,^¿‘‚¾_Ëëçç4>œÞWzeÈŸ_Ðÿä5 ûÀ¯=òßKe—(((((  ‚‚‚‚‚K�ÝÀ}À"´OVø¸ït©^V=”1k$ÃÊËÄZ¤”‡*8¢Ä“>ÐÖqæ�¼ˆN]�`>¯ÈÁÊR]ŒÍ®ƒŸƒŸ—jLãîÎG�”ʬ©[*O yhn=ýºê,]õØäm¢ÒäThÓ±#÷Øž¼aÛ»yÅ ·²¸a Š7öEWQP™+‚iãªBRµÄOÓšV TÑLkÚ¼9t.®išš»îýzî¾ÿ7�x>b}mÆñƒ§8°wÏìù2ëkK´ŠÑäc©Uì` M$P*;—nã¶~2íÖ¤´R~U+!õÛöŸSýxòG¢9÷¢6Þÿôè÷žzqx&¾•ÈFAD)“ºÀžé›GïÐkd%KÎzÁQÓVžÙ¶#Ž3ä¨]»ç½‡øÉ±JþQêâ1F¿O:ÒØ�!Ÿó°„nŒ`s²¾Û m`xcÖœWDáU–ø5p¤”3Á9 º´Øî3pˆxô(0-ù—_ $?|y¥Æ2ð÷€ýWˆÚšÔ@»qÈ�ÃÈ+ŠÈª‡ êÚ  C ¤g£0rK̶3Dç ¨_±“oôãìoøõð×û€¯˜Ö ¿ üä_�uà§�=ew(((((PAAAAÁ¥Åµ /½Æ«|r_.Ô-ùÃOOzoÍ+~È«PŒÐñ�f„üw2;¬„t x3pÃ~9òJ‚4ww€käšõ›?ôô뢖‹H°ñu” øƒW—oЉìq©ÕqæßÜëbã«ÿbí¥ÕÃko#²A’Ù.EUT‚õXkn«ÿpú}·‘ëwÝH5²¤*M#h”¤ªÐF˜L±5 W%³pÂt2¢ióF)®ˆ:æ–¾„[︓ënº†Ñ8ð\ÆÒÉ5Ž8Êþ'çÀÓOdF‘6TMK€V�Ó*|4å)U"v$ʼn¢ªÛ¸­Óæ'ÓnUÛ�Ø%~¤­çˆ1â{-WÎïÿÒtôko“5îFkK¢þ4ŠŠA7ñÉÉ›êßÐm²î”.ž¨Ì“Ä™|È›�s-:&І¥+NéèÕ�’1�æIú@ƒÊCÏ2ys‹hÌí}�ÊÍÏ‘µ%k.|ž�@ÈÁæ�!ÂÁ_÷bÝù@Ƥž‚�ˆ´ü PPPpù *�Ÿî#ÊA*Ðäð€“WŽúÑßìêQ¼dýùä� ’t \2 êcÈåúëèÀÜ}¾Wóh¦Íàz= þ x àÊ’?ÿÏë€ÿûû¨êÎ]ø@Ù TPPPPpé°x¸½sðé]äÈŸA%а9ü/½ójwÉöèÉðDHF qCPOlô�bôb®Ô÷‘óÿáÚà•Fî—û’?üMyvx«nùíB­½õkëÙ¯DJ¤Ð¹8!ì™]?úðÊ%ëÜ ®}g=TtcØ3}ÍÆwÆ×¾0°iËeN Ú¦…Øf³€6�¦!™…«HfáZâ'åµõ⬢iÚkBØÀí÷ÜË-wìfç®­Ô£ÀÕŽf¦œ<ºÄá§°÷±/qæä1B9ÓÚ8bŠMD�¦¼–øAÚü9)¤ó< Ð’@"‘P+¦ö‘¶®A¢#~‰ D±gP@”f6eß¾ýãß;ð�áˆþ-”š4šÿÑYÜ%¿?ùŽú}xòÕ«éSˆ8ÿ`’3‘æžÿn™úw²'§=>óf=nmRùä×rÊ¿ìÜU£óŸ¦éÚ™ÑÔ¼ˆì~Q…êÖÄÈóàLÒY~OìA*ïÛ�$·¹ öy6Eä(p¦ü9PPPpùLÁ…k€\›Qi6À~D~8ÊÄÚƒ?"À=Àk��u @8OŸ=Ñ8ô©vúÈ��¼aX;é—Cæä|ùðÚä×ÁµµòL™kwøsà‹€^äÏù€)†M‰,À»�w”¡    ø*((((¸4¨€�¾¤õdOÞ|PþPM‡lƒgý쀦k»Wž,P—‡wÌn¦Ù2‡˜`Ðh$ŠS¹y8åOϯÏýü›ã°ÊÕ1¿G"â}xäLâå×Bc·�›‚ƒ}këfü„ä?�r�e]Xø£å·ÊÉøõ©rê3V0«‘ñ:ö«×&ÞX½wò½7~œÛn¾Žª#ˆW9eˆ€‚Úˆ‘@QR’Y¸ä'hæj Ø„”_Ñ$‚¨i1J›ÖX³uÇuì¸þF¶í¼–­Û·²yÛF6n^ ª…+‰µåÇ�äÀÞ½ì{ü‹4Ó5Z’§%i”07ÝÖ sOÄí¨�Út+‚ùS7¦è €hÛ'‰¨hÛ‹´mí™D™CÅ ‘¥SG«w=²qôW³ïgÊ­Ø/ 5kç>pzöbù•Ù«êÇ<ÑÑçsË)åÁÐU:ÿX® š723¬Âö õ&à¼)5×…æLgúÁÉÀà¶G8…]ÆŸOÀû,³öŠdÆ„âÆ—§ì½rÇï‡�T‡F$�·úÒßRÀ2lî’ò`8 ¬•? . T½ø¿�š¼˜ƒÀχ®0€{�×Ûû ˜žÏ]‡Rc°}�i7õJ¡ÂÅ!KÆ\¸Ê(G Ê“:þ�,Î’og€�Ÿ"W¿ã×þ&ðS=kòpzÏÊnPPPPpé!ü“B|�á6T@dªêÔ!ÚkžÁ2ýæð+ñöêtŸy3O¹C~Ú~Lµ#ÉOЮÊ']‡Dî$%�]iÉŸ¶�„hjŸ €á´é ótZÝ®Ú'äÎ'´û¯¯-…�<G:ù×嬼:ÕðN—E'qNÞ\½‹iHP�žüµÝÀ©{Íø£˜" ÈÔù}Ð:¯Šé‹ó fjŸaBHH%ï÷KrQ—‰)Vudxf¯Íš½ókg°yÛܽ:Ê–Ër§ÜñŠ(»¶ûä 0#ý2ŠB鮊r 8Yü\j,þVý6à‡{L þ;`/†«� º)A/BϦzàëûÚ ‘B/!ÕÍø2 ª�†U;~Ì=uéi�G�OOc¸ZÈŸï~0£~ ö~–öý\žþ‚‚‚‚⨠   àâa¸‘;SûdNõ\&ÄCþ:Ó¹W ùC½!ûdžhÈ5ì˜tJiÔ ÅLÁ!äL¿ùCM[Ïü3ù.Ï+�:šbÈ9‚÷ªçÐ݈#AP7ï”v$Z˜§ NàÖaÍa~> Õž¥�£�ùÁpfú:TåúýH=3…�ó¬² ›{þãì-»÷³uûN°¾É¿Ï˜Ã›…ÓsAçD�=‰Š ÄRy"�be„OlûmÛYŸ�òR�D Ù’I›PiË€è¹Öy"„’¿¥%p$"!bdN›OUM )/RÕióMÍ“ˆ DÔò’ß -ƒm¾"(ˆ‘k¡R§ªÐ?Ê :¿`²¾,Ÿ~juüžãß&gø”Š„ÿÊON�_oî•}øräƒåµuÌd˜µo¢ ö—�|m5HŠ x8µv×äˆð!…a¦�í ~ï“ –IS�áíá÷?G| Á›|³1zÂØÅƒJÔ\puA?´xðuÀÖÙ2¨¨ö¯ã¡}¾tzˇ¯=$WïǬôà<}ü,¥÷ÀÒÕGüüz�ÞÃoußE,}ô'€§ËS_PPPpÙMÀýÛ² ÏOл�—¢ÔB‚(æ÷AûÝáÌ| øÒu� ‚'޼/GÀD›‡ÿU¿õ›æä}‰µwk�óùáM ¡²yE�Ÿ{Fýcã&gžÎõ'àæ¯Žð2uˆ­£âÕY±‘‘R1cê/kúο?äÌd4~ï�ï ‡×þ¶( �‡²¸¢aç1·F~œèûš;?<ûîÛörÝ5› !`@D$Å(ébC›nã(D hTZ²g&(2÷$“o�üµmš˜? Ęò™“J)¶�–Ÿ±ñÅàH.æ„‹ˆ¦×EªdâMIDNòß#ªdê-©|¨Bʯ �ác¤Ò€@K¹á$�eJˆÎ—Oöq6ˆ²¾z¶úð¾qýç'^#Kúj”Ú*÷˜OÖâ.Þ9ùvùS*fVSz}‹åýd‰8µ‡Ìó4§h§Žs:#X 95œ-ŽåÔ ×æ‘'8 úÐØÞôYî!×hóu>Ó2±‚3�)~TjeæC§JyŽøÉ®‡w?ä0|ø¨¾¤ß|,ƒ&åÏŠ‚‚‚KHýà'½94AjE#пü.ÀUH p#pw ×{Bæ:žPÑ>¿9VçüD¦Ô±ëþq «ŠzÆáû: <|ØoeWù³ø9à>A‚¢Ñ+9®èÛ�gÊÓ^PPPPLÀ\ܼ Ø‚ •Œ2¬þ€�C7ïkA~ˆ#†¼8òÊ“Î�.øÃHƒb|ˆÍüÙ¤Í'cÚÌϽŸÊŸŽ™rs–¢bJd× Û>oÚHrJ¨”=h‹=;‹Ôέ‘©¢†ñû¾¦Úsö‡¤ÑëaQvFFSZhƒJ�Æ tüþ@`¹¹>|xöæ›Ò—ìF£ ÞØ—Mbc5c#¨J"x4ù ’9©Ó$ÐÖkfm]PˆQPÌ´\"|@e^&(1Š©€¢ôŸsˆ‚‚ÌM²Å¤Îiæ×Ú8™‚££êióæfÝ�ª�#UˆhѦ±ó3ÿÖ5ëfcTK§rRäc¥áÔ©3õì½½~tõ[X×{ÜûU@@@*�£xhú*þe¼CŽzž*CüskŠ9‘¬I8#xò$/‚{žZxY^QÔK„{Õ=²Ö&;oé!‘#6Oâ¤^Õ¤VÝåžjË=QŒhؼÐÜþà>òj#ºzˆ1‹mïOå†<ñÖqŽñőܶf§PŽMù£  àR`Ão/ü’ã|E£¤ÏK· ÿ'A~Xæ*ÆêƒÿÍvà.àà6 ô‘$C¤HyS,õËHÄD Xœ'ŽÈ!!?—}À£‰ø9ÉUŽ ßñ/_ü¯ ׃6’ÏLÂ~¼�?WTT ‚‚‚‚ç¶/nÄŠ:gß.Àd‚æÅóµyíxÅH#ÍßScGá2hÛ5ÍŠ?�Øn£æû"5¶Ð~‡ðúKôìá¯O«öõ>—¤Geã Ý|µƒp�¦ŠòÜ1F$¬ ‘úÓGw�>sòÇd­¹†¡ãðD³{Û¿‘ã[î’ú-¨R_¤Áà`‡Î4º9|nö×¶~¤yã-ÇÙ¸y öª…TÓz¡ÄÆCI僠m¬šˆÚq®î!‘Eiêm[æe¤tN$µi  æ§ŒðñSED‘ä¯'#�$Da“Ô›W–çw„˜rSÈï½95«˜iJÛ÷ºäFùõôïcÕ"Ç�SåÏ�‚‚‚K� ¿µð}ÀOcjþ¤jcSÆïýY`†«™ Z^Ü�H¡E< ’W e¡=Ê+P (z|¿jã†ë· L0•Ï` ÃUNþü«·‘ËŒÒ Ðpx;°¿<ÝÅ\AAAAÁ³Ãá>”»@ɈæuòÄ…ó_“=ˆ”NºÇÿOïá'èù}qÊ(¢Ù¿=xARþDuK䉻¯3_äÖ`0í×5å‹sz~^þ�RÝAl-Üágï¯ß½â˾{�Ìg¤ ᙕíãú�pjò&@€ÎÄ[7ýÆú·ßøÆ¨ÆjO¼aôñÉß┾J ¤ÅŠB¨ì~](¨ �‡›ÇŸ˜}Ëu�Ä®_£-úc]ó1¤©dN1#¡S¥!@ŒbùMHK$D"‡LÙ’–YS¾qZySˆ €Mä�½ɃEp¤�DÚ|Áˆ"Q›?B�~bKŠh�£-;„?zfuôÞý·W_Xz9«¼¥2V‘4yÏv! Ôjnâ�“×ó猄Ìsz÷ Õóç;˜JÄï vm �ŸB‚=©_[¾Ìþ4lÛßs3šÙ7põm bƒÎ©óìÎϘ˜"²[ßö'‘p~OÌ8à վ_cÛœP«ŸƒWAeHEd’Ì­”?? .> ´ø7Aþ!èÈ“ Èz2»õ Ï2è¿À­À=‰ Ú0¤ê!‹¢'w.Dit!~R䯹€¾Ob*Ÿ½i<‡ˆŸ� ÿôÛº ,§z,‘™ËS]PPPpe!üï…*(((xCP}!Èý ã¾CH;wDƒùÊ9V·/Lþ`6oÎgX d·èŒÃäZ~΄’S¨jÎô‘Á{'ÒËS#~¬~^õä"ý¸œÙ;”@9JJž2=¨Zí® G¹y YH7õOw~ià«ÓjáO|WØ¿òwEÙÈݹð®õo»áßêõ‹gífvÇê Ó›GŸn¾G–ô@Àf¥ ŠJ@,Ñ8÷12–Í- Ÿš}Ëõ�Ä—^;e4“0×€¥tg-b#Ø –é-jDP ±© -“Õ7¨š ¡M¢ÍOÔ–UAªˆ`¼I¨Œô!Õ Uƒ©|H±ª™u3>¦€’DòXl¯ºWý¤ñØø•K+£?=x[øÜ™Ârü:TðĤÁú†: Tœˆ7ðûë¯ç,´yÙ=Ëò�ÒÑ=ys�yY n7ó¦ÑHé!r$ ¹} �×s¨~OÍ«ø”.þöÎ=Ö²«®ãŸßÚçž™{gæÎtfzg:SJ[ ¼JK‡G¡Ik‚UD”D£PÚø‡(ÈDc‚b”@5 ‰ ji„"b‹Rʳ<,}ÙvJ[Zú˜Îtfît^÷œ³×Ï&®ä—ýËϽošQûXßäfŸ½ÎÙ{¯õÛkïsî¿/«Q¾8ò!|¬Ý?"Fðˆõ™Bz YsDü¤�™][ü¬‹î^+¥_PÖ-n½1ˆ‰óXä¾ߖ˱cÅÙ4?LëÏ‘ŠŠŠ[nþ¹ˆ\†²„ý&+Iƒ¢ øð`/�CûÜ›O–€“�me¹Hc•åáÃäŽmodNîÙFpPµÀ~àA`oùÛSÚ �+òçò—#¼e A@ç@¦¨¶”ßãeyÈ»�ãõj®¨¨¨¨  ŠŠŠŠŠG�m ç›,³;Œcä†%¹|›Ê�>? – õž†žÄÝ kg<å8¥ÏOΠø2o¦ú‰}L€NÜzÆBø~Œ¸ì‘…Ö«Ä¿C5 pâP‚Å!k|¡@Â'R]eÒÜÕ¼ptëò%2Õ�0 ]h®�¼ää¿nŸ³ñntKÄZbvô½Ù™£ÛŸ—Ü ÚòS�¦”djðJ‘5ÜÙ>õ2è%'ß•ÏÙzŒ¹¹9Œ&°daŽÈEµQÚVº62mN%�fJ{!‰úH=ïߢ¤ÆZ‹�S iYÚ¯Mr¤ž˜êÇÎrÙ‡Ä1œªhnÙsh:úÊž�ÍõËg§Ã¼ˆ¬k+I¦`,Øž�"¤‘Ãy Ÿšü8Wé:&Áõ§¬žòI~¥À;Ó˜²í�`�I_挾¾û ‰ØkÀ—9&bò#TÆ¥0ŽçHqÅ‘"¶ÚšÃ{¹•Ÿ ˆt ¥SBö¨šz”˜"~Ä=V÷g±°økGÁdd�#E¢ù! ן&' óW¬Û ¼t—÷Wså)!ü9ð)@y¼ÂH¡ØìH¡¥Òfž<ÄßD®=üÑßëƒé«O=‚çAû{âøÆÍ¿êò-À;Q.BH¥¹�Ù3A¦ ÷Bs tò~àŠzWTTTTPEEEEÅ£Çzàcýíí‹·Ü­§m„Ô4.Z~ÈÄ‚©‹2¹M¥-ÛLÉâç‚)pÊkCW|×$»žE…Ò W$£jd`ëÎ )΃(‡�¯4×îÝÚܸüôtϱgÊ„g ”¸“ͨ$@JÜÅR’\•9ÝÝž’®œ\¨_e�i—Tp;ÿ")ò˜é¬çœI)…%˼ÎM Cr”ý{®ÙAûž3¶þ¬žü1ĸ;)žôòE 1 ¬Íßã\X±RT\Vã “9‰á ˆ¾Ÿzb)¼|Xl\âú„ÅÓæ%ÚõR*çfÀ>àPý™RQQqâH …x;ð+Vn+ô«Qàzà]À<�`ÄЛFE´TþNÖã²\SþÆÁwͰ‚'Æ´¨X&e¹Rþ`DϾ'šÔˆŸ ðZ�w€. 4@†v’·™e¤>ù�Àçë•[QQQñ˜#€>^£PQQQñøÀ8x¨¥­;PœÉŽžü¶6UOEŠœ^3vߨ]¤“س'ßÂcˆê$z½Ç�+#„¸fK¸ú§ÿ½ÈÇÀÃÆiò�²î’¸xbÍmkÚlì¾üUüùX”õ ¶@�´çغñîÿ%yhåÕ PáHÞ¹pÅÊÅ;>ËÚfÖUŒäÜ1]÷ä�x­�ˆìmçÇ_Ÿ½<=ÀÅLÙ†@œ\v3Ûc!/Æzw»}í-í³7Ü™ÏݼWw¬oI©AÛÖSÖ×¹¥Êp£ˆZR#{|â\¤ôÇAŒ´u+öˆH‹jcD™£+mºáÀâèúƒ§Ê]GÎJ‡óóP�ë¨ab•^†Œwªëøz{&Ÿ�ž¯·9bq÷Wr.FL:«ôx„Å ñ÷õŸÃÀN%'hìSæÔ!‰^¦Ébá¶%(})þ~‘¡"Ô¶³ýXøŠBÒ«�¬w#ÌÁ•'Êa9?#y\LÁŸWwX†T"%¦#ÁúÉ 5ß%»;wÐç e%òœÕq`o-{SQQqb‰ õ¯Þ ŒÝ÷�WO@.ýГ®<¥E¬ø—ø¬`ÄŽÿ›<•�Fþ|ätà÷�t¼È fgAJˆ3$òÃežþ°R¯ÜŠŠŠŠJUTTTT¬gç‚®µ&Kþ�j˜pó^>YFY�¼!ÒGPض!4ª¦ä”.¡k°öÒ+_Ô'zÝv>Ù‡��Sþ_qRz¨^Ob3z�_÷°>:È àW-JÑþ;IîiNkþåG§{޼A2‹ @Aõ¤ñ•“Wlûh>uÝ!KŠÆÆ63OQ�Uæ®Éç5wæ‹åç‚öÌ9I -HÎ-{�±/oHwêö5w·O]wo>{ñݾ0c4^‹HÓ¡LTCÑùt1î/}èI-£°,*Foy#D)ªTSyf³ެLÓÍË[šÛ^J÷?Mšž)Nmº×\Çì_À”nÝ”A茆ù$®œ¾@¯Ê§qÐ$€`Ä�‡%÷Ý5’αg™©}ôÝ|’ȪCŒFD‹¤dåÔìø=÷ÂXµc÷Û&PD®JÓïª_âÒ Jø]`1Iž Ô á=ÍŦïëK‡ï¿1�佄¿'O†[÷²©{Üw‹ëƒªW„¹< ìfõ'LEEÅ "�ι ôiýž6Ú÷”R\WZ£WÁê±äàõ s€WÝ'hw‘‘ã ‡ý4»½(×þ¹Î¿ŠŠŠŠJUTTTTôc+ª»@7ã}'ó£pö$·y1ļÃPml¼ªÇ+€bU†âJ£y"„>âc¸äœbqüe"/#ż�Üýq"ó÷(AÅÃõl=³#¯2æa‚#Çl]¾Ö/¿=“?s×ì9gtÓÁKe’Ï€aè|sÃt׿¿œ�·ùŽÐ—ç†oVºÛy¨ô³¹#oÝ ¤}z+<À™Ï昈‘d†‹½•2khØ£óúƒ¼iô€n[»?ïœ?�Ï\Hw®[a<cÄê�ã×#, •¬ÝZ$ØkP&¬¬çvÊò±6Ýþðút÷ÑÍé¾£'ÉÞÉÉé˜>•‰< csG�(£Kø¨Þ YTºKá�®ç›í®™žŸ¯cÌ !NÒ#ÁœŒ9N?/OŸ^!8PÔÍü¯Œð.Aö@†ÉðÐûÛƒó˾Z)mG@LjïËv TCÏŸø˜ªï…#‚±b‘ÒÜ7ÿ;d�þ³®{ÞIð„N:äOìƒä ûdq T²Ž2Ò'R{‰ó£YÝ_`'†Ú0.~˜seàòzÈK G¡y¸¹¨1¾T£W1€ À›�7ë æh@×@{2CddJþxps oEEEE%€*****º˜Gõù§ƒ%»¢dhø4ºOby_+M–ߟ䞾ôŠ˜$—ØÔЂ=ö¿ ÈŽ�ÊÞƒAc“pO¡øRA‚ŃáÄ«ï�WýøÒwV–å�±×PlL#Òcˆo‰],ôÎ(ö]A¤Ù}hûÜ×öüZzxv CG²§}ú†¿™\´ý«$Qøóâ=J¢ù*µˆËc5·æí£›òKÓC\È §wKÀ‰ Ú E¡$õýIñ¶1?GÚÜLLtÄýºa´‡-ã}yóš‡uqtD×?ò·qt\·ŒëæñqÖŽ””"‰”BøsQ¯šÉ9£ÚÒ¶YNÇ<4YH¦ëäÐtAÏÖspº�ö­l–åÉ’×m´lðžI¦2ò°÷°í(Û�°¸(‰£ºŽoæízõä%ù{Ì3ÃÁ !éŽö'¼÷••è:°kPpÛz§(…"6\@5TO–±©€ˆ@u—±X›»o�>«$XOntT\vŒRþ-&‹•!R¬ÄÀ�×N³¾ûÏuI9*±’A~›(>~Úùr”ž„í#€b5˜HÀ§)0ö‡ëÏ›ŠŠŠD� ü!È‹ ¯�v+ȼ}ÕÏÝIÀ÷Aß|«F¯Âa¾xL½Xïï¨{­3äè".aÃh�¿(þTûk¸+****TQQQñdGú,�ç#—ì ]±*$$€|)8À%g{²Ã*$PÌøl´Ž#c"³qCŸ×‡SŒ¸í­ÝTPêü‰l¿~©zÜxÿ¤þ„mìAÿ³ Àˆ&ÿ‰É+Où]O"L¢ñÚBpý¢¬º¹kÛÛ¹�ç ÍMyÇè½0àŬpHÓ›·rg¨‡è–'´Ï¸ý�ßg’c$Òp„Ä$'™1§FMË(ͧ–¹Ôê(M%kÃ4'&yŽYn˜µ 3ædÚ&ɲÕ1­l$ë"*s8„ñˆ¯åáëËJºµ�k!É]à»y[¾zz¾~G×ëŠ�û\t¿ ËP6÷ãòfѵ-ÃxXk@/{sëgDJ îú˸/½Þiñ=Ôº`1§ÁãÅ„‡ñc„†N0/ÔÚ|y>…à3Ä!aä—Æ÷¿˜ê”hŠ�õ-&ÐâJÿ òyŠ}Ør¼€‚¹ÄQ`_õE¨¨¨8X¸b£Àä7y—ÀIÁDÇ„¹´«Šþpp}�à“s ¯½dhŽ~_»ßÂ×¿ì–æž­À—‰aì~øP-�ZQQQñNý}�BEEEÅcOÙ¬ë%;<²f’$Ô'àb WŽÉ‘¶ÍÐSø¶ ô)`B¿ÿù8™)`Ê_Ú)cÙwÖŒ˜±¼WÃØ¸S²1u“›nì оÄô0Aæcb±t1ìó‰<ÁÞêŸk�’Áe¥Uy„øyEsçá7K«›ayqî‹“—mûp>cÃ~Ð`~8? 0¥‹g*K7§kwj(ï…›Cé>]?ºAÏM{e—Ös˜±$H£hÛé�Û¯ @)×DÙ j; e¿¹36 J»}¢èL� ¥oI@´@�¤h ˆØ{ª¢’°Âlš)ãÐ2QDE¥Q)ŸÁŽ‰È”5ܘõ»ù)úÓ]ù$2a9Ê‚NÙ3E£éïÈ#KÀ�&¾ œ�q°mw¿" ó ʾÙ|Bs[È¡X¡Åj„aB„BQün²WÑtǬ"5Eû‹‰UOÂøó¨c C¢xõ'‘®±Zì�Õ�õDŒvH›™æî?ÞÉ�­_u†•b-lj½Æ°˜”¾Bõ! ­?}*** >qhðNàíЬ%o4«ÐŽX3í�t´´f±dþW€�_®%*Ÿt8 øEà—��×#î�'@�(\&ÈÇ€ š»ÏÞü«Ã�Ào_¬§¢¢¢¢¢*€****žL?ÂwÛõH”HrŠº^”.Y#¸„lÄ3ÄO{÷�A†°ì™‡í£Kv˜©<ÞËÂ!@!4t'ãX™#ʲ¬ûòoØëHGУj²X‰$OÅ~@ߘ ‹J)yµÍ°ïŒÏèÚ}Ïš»nÿ¥r¼}& Cפ[gçnþ«éù[oéó Ua¾ÝŸ#Ÿ¨¶q‚÷ VÆùM�Ñ-ìhvë¹i?Ï—c<�–ÅnÊüê…�¯†ê¢Ò6.§¥¨ *–J…,˜ãbŠ<•á7qÊ> v BËwè¹®]j¯�îÊ7ëzV@½ß˜#BÒYµ‡ôqŸw~ZÄ÷ÛÞν½g×DL†¥"ݾ¬Ùú+ñüxÝúêaÄø ù¬q\pe‰È× öÝ“B=s!žŠÕì|Gß!¡wRç3æãÓëÅåU6FÕ�Dò¤¸ù^£ñý¥kòµ¢¢bµXøøò¨ø´¼XÂP �� rš½ØoÒHˆ4€¢zðwÀ'�C5ÂO`ˆ<Õ7?¬ñ>„e}†HƒýFQT? ¼¸#�ø¹¢.;ƒÕáÓÀ;€;êÉ©¨¨¨øß…ðžOÔ(TTTTüÿ` ªç"òtT¥“ô>>±æ“MRÚMù&à|R6.ÿŽøÁû-DdO˜Ì3 R±@ÌÒ()fP7A:mÚQõ jc±XÛQz1L„¸÷ƒrpCJUè$/‘"$V^€¦»Žl_ýÀ›Òòä"†6²¿=}Ý哟Øùï4’1 %¤=ÜXUƒóš¯÷>…{NÅœ“m«Ín–Fwq–ЧÉÎ’ãò ².-öÙ¨%pskD¥�“n)9ßÍ�Ðìædƒu.;r/fhU[D ì¸Ö—ž˜Û±Fz§ÎËnÝÀîv)ß6{N~äµ®bñÔ4åý�ˆ4Ï:†úŽÈqD3Î{,JØŠ¢,JÐÛkˆ<€"ß©nÎ7‚ºra! QÂßî: !±ZhÕª#¿¯h4ÒÕ|Ò”Ž§˜óqŠK¹)ŠÄqpj  Nß 6pÿÉŽxP™B×¹è~Ae}Hýd×ôØ ­?‹***T?¯þ8›>èä d|Òaì;ˆà¡!2ªG€Ï òàÖí' F¨þðFD^Ô� ’@[_í ,®*„Îm¬é‡k�·¿ ¬càO�?®§«¢¢¢¢*€****ž(HÀYÀÙÀØU>±mm–  žfö2($f£ä—xåM�Œµí¼7Ã0ùa0ß û,Néú{Øøa€SxE­’–/£/ n]žpÇ«ˆúÔPŽrJ(;R492�¯üÑϦû�ý‚(k€Â4/­ýÇGˆŸOꦹ£i㉓ܱ»Ÿ›¡ß‰ x•œ¡¥¿'úiÑOs«œ2úa!…ŽsªLd'Sv ŒácçÈ%¸ÍG(`8²45@î#:£ræÕ#)Nü«Ò°�9¹OÇz�.èyIwOŸ�o×Mü˜2êç°SyHTŽ À—Û¢— ô$PLøÄ£m¨5ÂëÓy…9¸~Xß‚¢lÖb¥ÏÂ9nˆÙö˜T—^²"Ž�'ß�Z±kë§½gû•P~^‰SW©‘£¶½†ÄÏ0ùããä_ûÒ•¶€üŒ×KS÷ûRè”’ój(?¯ŒøñÐÜSÕÍ'=‚È>`R&UTT8ÕÏsJ"þ'Æ1à½èüÐ¥Wƒ¼ Ø:i¬´Wð€™-¿úaàߪgÙ㧯+eޖʹm�Ôýݨm ^ÿ2È{�ïóh‘îÚü1ðV‡JIÃ�¹ž¾ŠŠŠŠJUTTT<ž±ØlìQ¿¸ÒD.‰^à•@½DO€®·Š‚Á?™/®ŸÄ OSa˜ÏOèuA\êLÕ++ºJ(ï1¢Êqœ�ϵYÂ.%¥PŠéwì•„FÉÆÐ·èS£tââžz7",;ƒzƒ§ŸÞ×Äb˜Iã/Þ÷Òf÷¡_•™nƒaäõ£¯M/XúÛö™‹÷w�í Ï%žŸ6~—ìÕö~'!BµÏ¿'&>ý+UˆýI:×–TnîdKs/§ÈÙ)GÙ)ÇÙ)¶‘ÙHËF” ìX*¤¤d„D¥Ãu)”¡Û¶Y%çÒ¦@Kâ Ë4ìӱܯózŸnÈ÷ä-zïìÌ|Ÿ.rÜv_ânÉz|€\ƒ Ä$³jm¶ÞK6[\ ƒÄª_ú9àûg*#I=¥ï\ÿ�O•›ƒˆ“þîµã T} "?¶(N�×Tl-¤¹C‚—¶ìI°¸ÌžEÒ«Ÿ¢{Õ¡îÆí$�^T«Ã·�ß¾QÏgEEEE-WQQQñxÃ"ðTw <Õ,Ý6O„8 ‚ lW§š\É3;^_Ù·Pµ—ƒÃ%ú¤—T 'x;jWzÊ ]i6ãwÔŽ¡ I@!.!†÷)qËPÕ«2ÒÈbeíâ|€Ü9î#„S©÷Ž]÷ÐsßÞw©kŸÃÐqºköÜMœ^¸ízbt )Æ´¯Y¬B<Égï¥î†ŸÈÇ+Ãb��ZßëE�ÒÅ_o²Ìš´G6¥eÙ$³QޱIVd- ’‘YCf„2¦,QF¢Œ�¬ÂaBbŠ0%1!éTÿ»mÂË:Ï#z /êÁ¼9ÈÛ9̈lñð„©� Šà¼£¢D¿÷'Òì‰ÏhN’Ѭ^õâák[ƾ5^E‰'Àñ%íúD:dRä{•=+œvU¬¯ ‘âa)³­{5aìQ?PÆ�$)cÂ{¡yÿ·˜Âq±î‡í 7í~ˆ!.·ÖC÷*ÌÈ#ÎÏ3„€lŒ”¨ ~NÆÒ&7nOškGeþ@ËõçSEÅ“’øY ¼µ�9‹ ãjà·K?F>}È%À›€“Á`ês´i0uHigôs ÿz 0«gê±Ù úÓÀk@.è)O=t'ÿÅÞ¹mvUeþ·Îwétî�NHB‚�p ` "È Q X¥å(x¡tD‚ã”e©¨ÃH�Ž×AÔѱfñ2Zh¯£ŽAF à5ܽ $„˜+æÖ�¤;éþ¾ï¬ùƒ]µj?µÜç­�4Ý�õTõ¾ïyÏeïuö9çíõìg=à;Mñõ³À;x$0}r¾xp6«á­Mts�ãB¡P(¨P(Žtlâþ`�<Ñi˜¡É«ådº'QåxBŒ´uªI§{o¤ÓÀë%úe±L/©ï�ônuŇ»�f\«YxÊ·©z)’~yôÚ§†î&ùÓ•â Š'‹>¸O·8yó�·}ƒÝ}ð c>qï|î ¿~ðŠ³¯f×ú‰Ýhu�=ÑàAq"ðŸÚ˜ÝÅ24EÒOÖs°P(ª\¡P(‰0ÌÎ.ŽÓÙßc² ¼8zÝn\þM•‘d—„l�?¬î¹û\P½ˆRHHMä‘ÇB«ª†ê”©"À,)᣾;ÒÙõªJÉÔ  Ù&â'>H°\‰š7výÉM/�nÞÿJ›—ÍWfß³ë�}ñYo�Ï8~?xâo"ãPbÙ”@;�ÿ�B ŽHLG\¥ˆ’! -5'ê—P€áƒ’UFÀûvúˆhÈ‘+-ÌPR'ö9®%õ0UЬès£iz€Žh“¤8ýy‚Æ3•ƒÄD¡}�>GüB�ãdXö’"U=áÚsåG”ÄCIé§ed¸YNGVŸ—\ )ØúÇgê7&~WžsÑÑéö¢ª Mg%µT—�aúì°®ž»‹HAQ?-ßwç$yw )…ׯå€àÎÔ—¹:SÇ„B¡Ý¹�’ªŽÙà®*¿T(ÓäÏç53ü糌{€þçÐ7l™ z6ø«Á¾XuH7(ùnævük�w×_%,vœ|ø‹À¾x q^´œ_ü®�)ÖóFðù'Á~ü­m~L7< x#ðÕ¬†�ï~ð…B¡P  B¡P8pð\à±Bp0R|à’ÔœÀ£ÄSjÀ/‰Ï‘Åq”(Ñ„õ<ïôÇJJ@�gD‡¬? ÌÏÕÿÂ�¤Õ€xúpÙ±r%WUxl«3ÇU¥ ûZNÆf¥ïÐõbûB䡺‚�wßþœõ�ì}�mÍçÀ2üøõl=oÏ[¶?÷17¢‰\“du¢p�q™Æ$‰EOШ=�“J4’T”@±M´>Döi¢ ³Äü¿¯Ä!ùõ¥Éh!XL}¥’K>ȪˆC#×p"¢ðÕ‹�@éµ/eý„$nqEÏ-9y¦äÌçBá‘ÄGÈçe¿­¡šLrzZ§€Ò±H_2‚„Oö0‚ÔKËr¦u÷sÏíTõ²X Íóã‘¿‚ÏŽM†ÏN|-çRbž)Ô\ÔgÝöQOúžžãÌM×U ‘ S>;J6«ÿ• 9š)îÚ9εYÚâÄ+ Ú‡ŒOuIÀîöVrµP8¦ˆŸÏi*‡¯cÛÀÏ?ÜÍÃ…ù¼=`ßþ*à,€PФ�z¯wB!tðàÝ�º±Î²``Ï1ð…Í?Ö"ƾ¶ÞÞodÏL(»®Þ ¼íˆy†L׿¸ù]ÈjxOóúp ‘B¡P(¨P(>[8¡•Rx‚–¦ÑYΪÃ=M¡Çˆe‰WŽKB6'„À ë—¾'÷ÑÑä^盓$ûd¹�c‘ KÞ%÷ ·ÔÛÈط›,–¥ÇW‡q"2à IPdæ¿n# nõÁ�µÜûø�¿üÔ«§ýÛ—Â2|cºuûi'ÿâÖ‹Ï|/“9d¥Ï$? A2B@¡�&eåØA,©`” ‘+&9N×g9Ͻ¿SƒªUºñ7ð(‘$»Aq¬X¯mªž�“�‹ñ¸ËÈPuN>òµü—n#¥ûð|8ç~a²’`<Öro „°ÄÐD[ä>!ñÕȤþir¢e¬åêÄ‘ÚO ø|Œ5¤ª1²+¶“Uôœ)¡ÍëÛÙ=!½.ò8Ò©£r2�\™+~–ï¿õŠZVÛµmB­G40Ô�îÝx�ñ!䘣¢)ò ÅVKüÞW?» …£šø9ø>à»V,‡õÀë€�ñHa>ü‹Á¾ xp")l‚y,Ê[Ãd‘M1t+ðÁö÷!°÷Ô Á x2p1pI{½8˜DÙC7Q›ÒçJxû|øÝVêí㉘®_®~ØÃ2øEà?wÔø) …"€ …Bápa³gá~0e[ˆ´i$;;2"7å´¾ ÜÀÿ†Äûg%ò†Ü³Â.FTêA‘î{ùØtq‰e¾ri+@—©ÿ ±w¿BLîÏE:€!¦ê™1}(¡†¾HÏJ=EL–L»óÁvýéͯ°;~…Á pãÀüø~óàKÏþßì^ßÖÒN]lÄ×$> 4Á‹£TV %ö4!=ö{É�ý{?¤®g*Pâûäžrí*Ôl_ÇX{j œôÁÀd¬E¹#ôQâ·½íŠ÷÷—ðÿRU‡�Å‚öýª´8ž‡ê)W¬xF ä$…Æ{ù^—3§sTý¯¸^ÒFWs›2r4'‘[Ÿr2<^åßFþk¹jϹ÷nL¦ˆñ¡#I=¶ò÷äÊAÏKÂÉd€ˆy‚Ìk,#=¥��ßk” “cg*³þx­æœÄ ÷ÿ‰ýëz=™m„X÷Aà®òÞ(Ž:âgxuSñœÎ2>¼¸†Ã‰ùü〗ÿ¸Â°w|6lrpƒÉa6˜w:•o<›�d°ðÜ„ÿ°�c-OrüÃ.žíø…†�âø `ØäøN{¿æøÎ§_qp7lhñ7@gòÜþ;ÀïÏÑ‚éúS�¾Xgû€nЏCug) …"€ …Bá‘Ä“€‹�ãqk3±çy–ºþB~4¤ ?ýNyR<7¤�ϪÊÑø*íe„¡É¸Üèr¿�MNŠi¿Ú¾ôhšè×$b‹£wI:ÓRN˜Æ$ITO@N’iâvj³Â%˜$vÃ÷ÈÚ61"Á¾í›WßtùÚ�û¿Ñf?…eøü˜Í·zñY¿6Ÿ{Â^À@•Zƒ{bÙbr`Ý{õèQ£;O d»tôFüô¼Úq„"„eÿUD©9ñÚ’$òì0Ìÿº XIùË”z²SÈ­”dèÇA@K@v¯‡ì„ ¥T ¤ÇB¡¤¯ÙÈ*(  ç7WzfôŸ\JEŒS’JŽׇÄYI‹1ùáÙ8í•Ah!¿^$I8�õ¨\wÏ‹¦Éý5ù>Uƒå>y �òCù³�Fp.ßÐÏN®‚J0 Åiºíý�Ú©Ÿd…‘�ãë¾—4Cûg²Œ[�׿Ì|aþäp^†ñràKp60[#žµ˜ÃlF[Ž.O ‹ßI¾ƒ1¿á>åp½Á'0ûøõÀõÀuÀ½=˜€s€óqÎÎÎÎÇxÎn"ZrÔ1&€ÞËkŸwK~Þü.f¿|€£nzóÂz)«ácME÷'u‡) …"€ …BááÆi˜]ŠûžÑ¬t!2¿ƒøN“™êÓÔ,©oò²6ªRߘú’¤¤OU±ÉÉ�²aóˆm�¢ÙñD ã8&`¹ *‹E¼z޵Mñ��aâÿ#¾aä›nG7âœÈ[N »W¬89@IŠ±Ï¸NõhX¯8KÕPRŠ1/‹þZ}á>TfÅøGï…âù3 ¾ä¹Òîê÷¤á]&Z‰keö¹#E¦ŠÜt¼*Tªã%–»”QÕ¸8°÷½e�](‘ÄÏ3�7W°ŒÀÛúû9Â`þ”SÀ_v9øáœMLÑûûL#ŠˆÉL“”�›¡¡­O¬ÛÞsW#ƒ> ÜÙþþ¥½ÞÑþîîœG›à{ÀNo¯g{ÀOûô2œþD°Ý¤³+|n‹¦äGï -VøNW‚Ûˆ•ïÇýÏ0{;pmÖzðÓÀSY W7¥Ü?Õ§P(Š* …Ï»�gç% d†·–?òÜÚGº©¯Il>‘Ã¥€~IÃ<¯h¶¤BËÀ%I8Òr<ùzê÷“ÅCÍé•hÓØÏL6uý�Ùù7\MêâìëH¤k9:OHªP59y´vݽglüùí¯šîÝz!,Ã×íŽ�óOú¥C_òø¿`2G¥¾¦)%ÿ\ì]_<¶]ð‡r"-óèɉiK¢üHgÒ�ÚET^>+Ù)$½P�®$¡ž“.}™¼©½‚zIŸª„qŒ‚ Æ*Ãě˥ ŽkßÕc,'¬bÿ½÷ާ÷˜L]§$´ö[û×|¢Êˆñ3‰jÆc èõã_÷;T¼5$e M—+!4ˆƒ*/I¼ÓèÛa¹ú®{®Ï2R¨'’Ë}YVÉú°"˜îWî/Y¹¿ˆ-Îâ}ǽ»oªbRÕpÙÄ�9®Ša}>r¯Áí–(Ý_?× …#¢ÜÛÀßLŒáÀÿjÞ&·p”Àü©O¾¸ü…ÀÉAXø,¿µÚ+€þ3 ‚'– ¯ú¼Ÿ�´;ÁïÁ‡€ƒà‚Å{X6�ã€]`Ç�o€µÏ¾vø©@SÜ[âÁ#ϬhçØZ:q'¶op—>΢&¾üÏ€wï>FKæ) ´ |ðƒÀÉ,cø¹vÍí­;P¡P(Œ7üVE¡P(–±†û˜}.°.‰Mpk²G�þ°�RdÅ„·x´�%¡È‘+*,+w–%‡ª ]7'‘X*1IÙA&åĹ#–¥ "‰…4W›–%ÊI0#‡nàê ¥±³}wmþé-/Ÿn{à+ 6Y€‡æÇí¾êÐ�ÿ}?yãÁqŸtO�@î3P‚IlÇ匲T×8½"f ªÀ2l FP#vK”¢‚Á5N]ìõ‹(+P…E[H|N‰ôØ¢ÊÉý‘€D—‘¢@r= y‘’Qä>d9¹ª*’ÀhÙ*÷š:©êPÏ—˜þ§IQÚø9‘_cƒgPCœ{YŽúNé–Q`J‚E™J—J¬‚<5TñJÞ�l\ŒKãͳ¨”ê<¶TØ`ÀÔ”| ¾tÙ•xÈÛ Ù3ðþd>tðpgù" Ÿ5âç8à;[ ·“XÆ5Àwäè‚’AëÀ¥�ú¢ö~7àíoj¯3°Ö^'â{ŒX@|6£yä¹ÂÜÞï´×òß3ú×ãFƒ¬"Þ{ksO¸®gm¹Ëvѧø~§ß¯o‡ò‡[�¿þ¬ýý3�R¸}ìŒæ™õÀXÆ��H}K•G- …R …ª8xf'�ü(bÙ l�Ìà–dO:S~äý£>-×eh‚.7ý_ .é)Ðd›ô;G‘ÜÏU/hÙ¢Îó%Ž�–³ËR’±0S/H’/)äÑîH‹úGÎež„„Nž«ÎgºÏ>m¾ý–/X»îÞWÙŽŸ˘OÞ¸fëEgþêÎy'Ý)dšð¢Åcm%£¡ª¨Xò?Ò„¬ìKˆ©Ø^T0I‚:^5Ù»…ÿŒ¼h´ü¡©ÐX�4FVn1_Ë]û-* Q“Aî;’ødÑïK”9SŒ ‹s«14›Té!d³´GÈ–L)äxF2‰!oADÄû¹õ÷D‹Ÿž¨Qb(®)ûe˜§��ú-‡e|øà�çƒùÓÖ�g€?hvøf¢~ÉýÖN¶ÈŸ· ª´‰õ¡Wèàª&jdÌ:tn„|ÂAÕI�•~“6Ò“Fv'ðþæßó�öþ¶º¢z¸}ôbàg€±þøàšŠ^¡P(¨@…B¡9NÅý¹À™]¢)/½ã$·)äA2ëYü+zŸUhN;OirU’粃é12ßnq߆ÌÌ=¶QB(%#ò@¶mÕ 5ˆ¦¼“šªÏŽY’ÍKQ-ù9 |*¢ï&ªUˆ5¬¿ÿΧn|ðÎר;O‡eø®éºí‹O{óÖóNÿˆDœœrô[Q¬Ø˜\ÔåýIÒœ ¯ŽA©:…;.±¶hã@ ã, úU!ÉyI6ä‰!9´Ïšâ%-{æYi¹¹#*#ñ^¯Íü¦„$ðREˆªº¶Hß±¹F ÃcU£ÜãR-‘LEÛ[L…¬ £L9 ¢x12ä×»*áTëŽ}p¼»ŽþCI¨ÜWÊeìh½ÐXjDõ¦Éb•(e‡ä–�eÉ}\Öù«)yèu6òнŠ"7SÞ*!–÷ÛÐ~ç¿ ¢£8ı;À^àÞò*QòçùͼþóXÆ=­¬ÕÏ? ”zJ mÏžÛH¡KšÏË©û˜�›€�ПözK]A+“@|ð&!YGø]à{�*‚…B¡ B¡P(а ¸x JX@ö9/q“ûåºMÀ“š&>6ãYÇãYø ½¢Â•aP†)^Å÷FH.C½ @ãǨ̛&¹Ç¤V�lÂ1x—l'Hõ?ŠíÍÀóþ³º/GFz$É`›nÚÿ˜ÍwÝú�Ó=‡.‡eøšíÝy≿zè¥�Óñ4Lc¢¥Ë¤MBL-(3´\`•D¬-ª_°Øo®ø‚&z¤ W)…68%91&çV‰—XãPË«©ŠB 9 Âav4Æ>TïØpV¬ƒGÞGwÅó†x¯c;¾ëú¼j‰¾œ˜2�¸n£'ç#¢x1,':…4qÔÿ‡\q¥*t%b:XNŸös¬"ÕÒtºýÀÃmvl²ØF{k¿xe.ê16öomìºúæ/ŸnÙÿ5æÇ¶ç3ŽûƒC_úø«ü´ãHË€BêÑ)«t#÷\é�Bº®&/ä:‹=MÀj™/Ìô{ås†Ç$ÊŸI?d?êkëvm^[É~Dý#Ã"Ù¿™*+FJ$M §~E€*A²~tÍ’€F ƒéu`rï!>§’ŒM!Ž#>Jv&×h:Œv¯]Ÿã¸U¥jU,æH2–‘Y¡j˜œ|�çœäLzŽJܽØäVx %ž·êg_¡ð?§´äów»XÆï¯>^Ñ,“C§ç�Nog´Wý|Ò#DêÜÜAüýKòþVà“u=¬DÐ9�Ôy%«áÖvþ0W …£ˆºª¢P( p6øsÁN×ÙÕ �+>Dñ‚(ÃÙwjþíŽgIu÷•ýTý Þ€¨,Ò“�3€ªhR•‹ª£ròrEP$k] Àa”ø= f‘§äFBj�É]7OäÂÎl›ïºíykÿ´÷›mÛÏ„eÌ'm\»õùgüÒÎÓO¹Ur¼íüE‡ã#I´kRw 0Iú£ž%c�‡:CÎQ·?õmò>æâÛ$†î6õ¾Cø Ÿˤí¿E2¬SÑ ™ÄÏmÀٻöK_R…œÆ¡õY<‘¢ i)0ÏýI”3éãìs‹ôÚÒË&‹‰*¢rÂW‘“?ª’ÌKjiBèHcH”…ñMV\Q1Täe Å,Ƴ@c¢þ7ý15þtäOO(ΆŒïã%crRP=�H©3”èòŸì±z`h2}@‚è±g úœù $¾¨'F~,ñ^èü´Ô™îE“>ïˆÚgP¾LÈEž�ô!q¶þ·w=aãÚ;®´ÛÁ2|sºiû™§¾yëEg}8Ú#cÍ”ŒÐ@'* HðC@ B0ý܈ %+‡pWUŠúrDû£òtTFŒí”$µW¨4¢ÿB°˜s  Ù:òmWï#„ˆÕš¼& ¨NÇâ5J0,K’Çv)–ûE)qûlqTUIKU@‚Ìc*½µìG=�Ä*®5)�9ƒ´š(ß–b¡þaZnL@+¢>S(é¢C%Ú�•Ì�ºQ2H¿Î}âfО¯KªTy�•V•�žë¡ç:ñ ”‰˜Y®ÐU&zUOpÌÑ¿%uœBË?ÆöÛ�º¯~ Ë8þªû¯~x˸¥)„ÞZäA¡pX0ßÐAg²~­]§·Vø …B@…B¡pìa¸x:°xêA1(­âŒIÂKËž¥>‘œ%¹£ ɯYÑyõ(ñ0œ½¬úèâÉ:Ý:»}áØ€šÝk¢¿‹´ ±¶�>¸’@10R'Œ½ÓíNÚü¿·|�ÝuðeÆ|âþù '¾õàKÏy›kÛÙ¹•ñqŽ€ 9�–sƦÿªP �èo^j2&„ºú¿t÷- ¨Æü ×+Xï˜ õsPå’’ $ªŸL©^VKdØêÞ/ª2 •KþèñŽ(í‚Z:3ƺ*"%✆¾}˜’çê�´ä¿ˆç\F~¥Š"õ‡CH•® :ÂGÞœ¼ô]zu´êD’6RGITx¸ x°~ ©êçYÍ?ä%,ãð†Fí¯è ‡'¯oÊ»M–±ø1à§ë9X(Š* …cœ�Ù%8ÇIÂ0Ì®s‚åd·¾�UóRo ©‡.We…¦¯çðùXœ‘ûÈÕ ÄÞc[�ªróÿ<†àQ Ëi$Ïw"MÄGú”:¸H7´ü”öÕ&iÿÀciœˆÌ§œÜYßuõMWLÿ|ÿ×Û̉,Àaö=Ç]}èò³Þ:Ÿyü}иè¨ë“ïNîÇ!³ØÅóh˜ØÎ¡Ê02Sü€§äUôM”IÃãk;Q…¬Î[~ýªòF”#í3êSd2ÖcY´]�äІ'åÕ$Èh¿'›z/$%ÔÐþG{a ôÈ”3ò^Ô†c(±�W K•aýo·/;ý-Û>憎LÔ`‰òÅ!ç ÔDŠB&z96wÏI°åòoÉwZ–IÏÕìsŒÿ$.y;ä¼¢‰p×+ ´�œÉH4%^[ÛƒäUh,ÆÐëÝ@ý�Ü%!9�I~̼e²>ªÔˆód6"€4z��õ”!÷£q‰M+±–‘Î>g>Y3$ä{Ïš=ô¯QŒ‰OK¿E\‰ÀŽ “ÁŸaCbFˆÍKŠÆ¾Þ?¢x´±Qý²rÑUW†1yé9ˆ±1À˜è³�ŘzåùC)ÿ¦ê6Q€œØì«XáQ\êm7ð�MEp"ËxWS|¸¢W(q¸øoÀ³X ïj×ÿßUè …Â±ã�WU …±ŽšÏϳÀÐrPº,KrËì]£ÍTÖ¼¼|vÀÐ\¾ú²`i"9Oò “ªupðŽx‘Fšn±J";YîR®I­²/ýŽeïQ¾8† ù¡$Z´Õƒð$¦]Û“)c²D¬&ôÖ>ºïì�¿¸ýUÓ}[—Á2|cº}ûé§¼eëÅg½—ÉòÄcSJuÄÏØ÷(Ô½`¦%°4ŠZÖhlп\vhP‚(¶] ?Ô³j¨$ ¢7Òœs$@C¦LÊž)”ðÀ¬/†Ž %_2? ˆEB~¨}c åªp€\§*Kˆ$õ¾iã\û­÷,#œQ"xa,MJÞÊß3”|PÒ<�IøZár‡Y©ôWŒOÐ’_`¦e%<ƒ«AÉ>œnL´¶‘z JÁ©­\ Q‰ƒÀ "é³2W9Šeâ9ÆîÝMˆq½^—UîxøPå~Xqí¨ž§‰@KŸOcÒS™Þ¼$^îɶ ÜS%¬ �2âÇ€¯m"O`kŠ�?.´P8¢±| ð#ÀcYÆ ¼¹)úî¬ð …c@TP¡P8f±ŽÙ³ÀŸ…û‰Æ<”«*ÜÇ%ˆ€(Q²cÙNHMÔibI í%âxÍÖÙ÷ÿ5k¾- ºaÙ³œº/ŸÛèɘ¼ñI(Ë‚}ˆÐcä×¢¾yx…�Ìœúnõ*£aõzè¾5>äeIµcá—˱€8žÛÝÒyQÌóÌ4‰GZ[¿-ÜOº{–ª�â½ýƒz}ŲåXë÷#"<û>‹—¶³Û×ñ»÷Í/¸ôc!<åG.·­Ä£ RŸª|ïù³P¡¥Ðro<�¡>zÃ{Œb@~¤Ï÷ŽhU"(0îoÄG;5÷ý7ƒTe¬ýLc0ŒGl·#$뢿_O²†z¶W@ùƒ`÷ëgeá'>ø)ày,ãnà�Ÿ¶*z…ÂQƒÇÿø6`�eìm×úÿ¨k½P(”¨P(Ž<< ÷K0;1Oìá=ñ£j 1ù±œ~ ��œ¨~ì_Wš@7k]�Ú? 9÷Ñ$jf²Ÿ—ƒËý`äý¢G’˜X³<Ë[Õ.‡�Ñgt.às[n€ퟤ_R IÚ?œ}¿3ÛæÕ7_¾vÃ}ßh;~ ,cÞ¾…�­�á^¹µB¡¾¹ù¾�+¿þßg„øŠD“z®5ÂÓ{2Û]¼¬Ba&J }ÂÅzK^HŠ®±ª”:Ë=t²{±qé³7-±°N•‘šúbà‡$qYYÁ›+IÃ�””þÏR5ñA³ÑØRÜßA;u…Ž1âçIMñó –±üwàG�{*z…ÂQ‹g? |)«áŸZY¸?­Ð …"€ …Bá³�ÓÀ.ÃýtŒ\ù¢†ôêA¡¤‡@}k¦ÎšØ!5w6³X¦È½^òr_H�„è"`XêùB´cŒ<é–NÁÏKßÅñe:¸’?¢iL uåå­¬7Ù'Ú†@1VS$9Àúßü˾ë5öàÎù° Ÿ÷²}èñy_]µ…BA �÷î\ùÊÿ8�‘úR‰{FJÓØNÉ-ß§åôô¸UÎP©4VŒʿÉò1‘¢±ioÕÛ/Jâ ÔJß�Â,?þ<dz$VHÛ£jÙ¶\}’rò+/I:V¤‰GÞ’º*/�×ü�üÞ*wU8ú‰Ÿý§¯oIÝM–ñ{Àë€ë*z…Â1¾¬AOf5ü1ðÝÀÇ*|…B¡ B¡P8üØ v ðdpJ©Ý�‰·�/”Ý!OÀå†ó²Ž¨_r߇(ƒwå¨pGAê?1„z ©ßC0Tñ’›{ÃÀ‡alt�ÏøvÝ>/ƒ—•·2ëâÙ¹v¸«¹wR!gXv'VŒÄÛÚõûöl¼ûö7í;ô° ÷Ù9ôQæ�Ûêª- K •äÔ÷oµ~±ÏªG%00L<ód!éŒecFú”—>S̲[§d<�¿,3ñ´Šò�o-ñØ•‘ìzµ1}ùªUÛ2ö {™MÙ³±‹CÛ±¨‰·ÀïÔÕZ8 ‰ŸæÂ{XÆû�×^Ñ+ŽIì¾øà¤•€?Ûü„j&_¡P8Z ß®( …£ø3€ qÖ»Zö„&/ƒæN:ó™Ä#U¡Adeó/¶öÜñ^ûû¿~m]¶…BaUШL—"¾sEÉ}!Å¥ô[·/ò{¢ÏÿU¡Ø±L&`(á‘íÎ` Æí=q ËÄQ)顳„@‘I-.z>rõ¹2 OŸ—ä¾|±|8><6%W‘QPBL&¤Ø½ÀÞJ’Ž`òçs�Ÿ¾„eìož@?U*·BáQ‰K€Ÿ^Èjø0ðÀ{*t…B¡ B¡Pxøp*pp6(r/Qê9–JÍ„¡´&›Ô Ç=Oåd‡ KŸ8zŒHNuÛ´e1’[CH)¸è³6x©ÜÌ0¦co „´‰~ úŸtÅQߌ¤ÜÍÝ"éíÍÜ^ÿÀço¼ïŽ+í�� `¾kúÄöŧýâÖó÷‘é×\8]ûþ©Ë·P(Àê MìçïƒX�Òdò\LÈóx>ØÔö%·e}uÿ³�ÕQäÄ…l& iª"-…6x&yF²ÈsFÈ'/q‡®çRŽ4<äB‚©Çœ™”j}”e µsþüJÕ¶½š*ˆ¯ø�3ô&TõðŒ³¸¯®à‘‚ã{ÿ™À¯&Æpà—�ïªNo¡Pþ@¯~8—Õpð�+|…B¡ B¡PxèØÄ¸÷§Êlb�úØ©P#†z³kI !22Z–$�–ySUŒ&€F¦Í2ë:#ƒÌ"ù$1ÈÔ.ê”Ï.ž”°Qâ&‹ÃÈë@ËâÉ)“d[zL�Ñl$ÞNª _‹h«ö �KÃtÓý§l¾óÖo˜î>x9`,À×lßÎOúõCWœó6¦€é×\TP¡Px@tjÊ"ÏšN±Ù.È>DÈ� ÊJ“*A0¸—dzUɈ|"†î#úi¡J?‡¢=©q€ÎßGU?ët¤PêÅg¦�~Å^¥ý$‰Oal#¯¡Ø•‰r¾G‰¯L•þΕÕ6ÎÝÀƒu%>‹ÄÏnà»Z ·YÆ;›ÏÏßVô …�ã�ï^ìfolû+|…B¡ B¡PXþ4°g»hU‡M]ù3C‰�øœ$[’òHÉ÷¦‰¶¤$šÓšdŠ&ÍZÐ�–›‘P�`};;åÓíéâ¤XBÞX¢ Hû=ÉJ!Æ„`&cÉyqWµeˆÏ�’€firëÀöÆ®«ÿù˦›î…9»Y€ÃÎ|ÆqxèKϹÊ÷·Ÿðz`zç»/šþæ}E …•@¢^UÿŸ!"ÙPõ£$ö*!8ô~¬“Lʼ Èÿ¶éxâùŒ•©®»Ue¨*]„PÒ>ç~@ªºH›�xKÁL‰ �ÏxrJ@vš{ä¥Û¦j(�ÇÂo¯š?Ðv]Ñ…ÃXêm¾øñgíøàÿ^, äxðàkY 77Òè7ëÞR(Ž?QP¡P8¢qð<œS!7dŽex’2”Œp¡¸#{U2H›)„‘åeàV-µÒdŽe„XF|u šÜóFaª†Êã‘—æY*×Ån¹\ƒ™¶CT@:›º�UÛ«jv6®¹íÒõ�Üó*ۚςeÌ'n¼oëgüòÎ�¹5›)_P¡PŒ  ×¼ò[ �ÕH ¼¼˜G9Lïˆð±Z#JûŒ Wæ Õ?Úö1á£pðd2@^þL-«þæèH1S@(qÀÚ¤UÆæ%c]OÆÂ¤ �Ì¢dUŒ!t[¬S� Ïä�_Ûݽ÷–?Pá0�?/h¾=—±Œ»€~تè …ñÂæt «á¯š?Ðû+t…B¡@…B¡Š“0.Ã9—˜�›ó�KÍà‰ €˜DǶªâYÕ|[“sRF-’;i’K Ÿ!'zú23€!ÒÇðyΕ>áû±ÕX*Aµl¸½LêÁ¢³¾Õó!'»@ÒŒ¦ÑË}lêÏåÜ-I®µ8­ýÃÝçnüõ§¾yºûbX†oL7o?ë1¿´õoÎú ä(¨P(|%à)¯*‘™üž‹˜ýç“ CK†º;“MÌ> Ñ#O¯”�ÑòŸª%–õ^Gƒrg&qX‹6Å1iŠœX®ÏGûš«U¥ô›µX„:¥©’r¬sâãð� 9Um UN ñÕ� QF¥“Rôs¿K¾Ü Ü_Wwáá/÷v༦øy9ËØ~ø1àžŠ^¡Px˜€oþ+p«áW€×·Wø …B@…B¡˜]„ûàS^;ßLaÝ÷ªx vA½b4¹"³{ŤºAjêçåÏÔ°Ù“P¦Êûè¨á´˜pG¿Çˆ$Y4 @±\ú”ûÿ ü œ€”iRf�ÊTP¡æiûR¿#q�ˆ]j™#þ?{gšUÆñß}öóu³Ù̆I‚Š3IA£¾6J‚BêƒDAÑË—QAoÐ $Ô#?˜�ôA"ŒDˆeX:Úš¬¹¦”ºiÓgî9w'nÎÅÅýLñuÏõƒÁ9{vÎýrƹ®ÿ}]ÿìܱ³�7ìX[ë �8>៴mê–rGÛê“qH/†Ì¨Ý ÈÓ4«�•+1cæ4èæ·žã5-Å„÷ˆ›BFˆôþ ljç¹ò Z6) è~7Ÿ™ÅäP…ª€&€Pµä™.@)kˆžéÆ%ѳoò3"í<ÁÃ0»'× Âf”ï ñ5Yÿ~"ÿ6Rʆñ¬cY×úsÖ|¦ÆÀŸÊö¶3.�ð3xx¨§:Û€N ×fÏ0ŒKÀtàUày HuÎoÙ:h† @†aÔ2 �;€)Ò»Gb乌�b�,‹—b‹—Þñ„æñ;Í G˜6«FÐÈ€2¤ÿM¾·ù’3AÓËÙ„>ãE—•¹B˜âA¡ ]‘rq¡q�è‡ø‚WCö¼¥OEæ“BôxÎW õßô¯©;rf½KýT¢d™ÝðíØ½7oI[K#Qo£ðœIví^6Y Žµ+H’2º¾ÿ…SÃe®Ÿ~ò2ÍMM�ÑÙù.=¿ÿeo×k�–yö™õ,_¾”¹soúï§¹¹)÷¿4<<ÂÑ£ƒtw÷ðö;9ðsmy�G_Ïôœùþ×á� úa\l0 'rD=ƒE%ŠNŽ£Ù.Èã0/‘2sä½îDâ�à­—Û|¡d¦t¯ ª¥ï€ å<Ÿ\T‡ÌœŠ—T<€�ÂMJæe¤>߬1AHfåúº0 œ*ö&4.Bø)OoÍTçGà ËfÏ0ŒËÃøXÇÄè^¶›?�aædF-ÑnøÙêNTt±Gky.î+cdŠhàY¶-æÁ ˆ1ñ$”|ËnÎ]>Í›LKŸ)éÈÎáwªA,ñ>Z~HS¸Fˆ` ÍèÚË?Êgûèåf€°û<�ð»È÷ü¹¬pðï'\9mƒêøRáàùÕ-›Æooî#ëg\ ÞHY ¸7™„œÞOCCdÜu÷:öýÐËÕ ¯÷;æÍ› «ï|€ý?õÙ[ö¢T*ðþ{/òÈ£1cút&ÊèèY6oÞÊk¯̉“çj.HÉI¢´@fBÊõ/÷žDxÒ¿ ð™"vh�†¬)Ôp!Y=âs /·&Çîò‚š,‘—uJú†ã$!”\ ¥çäµr|²ú:¢__s´l*­Ä-ÈLZðjÆ+'×èl.ˆlä!#N#3&(ü8 # ´.¢:@'ð…yP†q¸øXÂÄØ™‰Ó¿ÚÔ†a�a“™ž•À‚ EƒMRü‘;Qõà—ôìmh> r·.@š† X’„¼r fÙhÁ;é÷n‘Y¿”²6¹¬ Y– çBTñGžË¶CÖK*M®‘×éÁºòbY/t=;ײ—puݧZŠ{†6$#c« :¾àŽUÏúlìžÖ½ÔÕ9ðUwåË€äÿ@&™TË,¼­…/·n¤½} ËÀÀ �s¨{h @Å}•'{š4M³õÄë™0"œž‰‚WJ™*Á}ÍÜßÈe§†µ&×–ž$Jž8¤ ’¦•ì<\£ >Ê\ÄñJNncANì�ãEóL’£“^}Z�K´¬ M’w-¢=OyYN»—*zÅEŸ¸ï¢CóÌ xù±»qð§€Q{C^ß>ÿjð —…â —L[ê\±âx|…ôl·÷gzÀ[–™aW’Ĺ©·’LYìHŠÇã=¾ÜçÓÓ‡ #Î&àk›bÃ0¬œa× u8Ú�vpEÈù8|ZÉ D`"ˆˆãÑ@àµnÒ˜9RnG÷ ÷ËŽm‰ëÔ,˜0FÙ¶¬Ó ˜õςσœKY–.*tèâVæéª€ZêOˆ8inLB$“^@²ûîD¹¡~Ç'C£ë ŽwœKç5n+ßËv‹c"s"ñÉ®ÝË-È Z§uÎ4ÞE©Tããã Ñß?@ß‘~ç˜?¿� æÓÚ:IW×^ÖüËÞ¹…XY…aø]ÿvfÄ,­40Œ0´‹nŒ4ŠÂ“�ì$t$Ê(¼‹º‹ÔHW¦ug”LÊ`‘A–PáE÷!c‚‡š<ì™Y_B?}¬—·ÅnÈaœùöìÿþµÖÞüëç{×÷~ëŸÃø„Í\hËã/×aZ‡¸Ö‹Æ Ò‡ÌÅ#$µ.¶¦ ɳ]Ô:T·?Ó×L¶>åZ7NbkÔª5©P¯8 Ô³~|mÔâ˜�‰Ç^ŽEˆ?-•91o^ÚÍêLâºæZTÖOÛ$ …ý›°�ÕÙ×ÚŽí9[Øävav @7®”—'s††wx1f"‚à’ð€�1 AL2hoÌBSÉ2·˜ï�*­hx)ŸP÷¢c´ë6% xQàFß¼9 ‘UMÜ�~TÄ�j0Ž.¶í �õãþq¢8´ìe?ÉÂÓå9´í�ÀdQðT±ùCâv¸?f<£ÿ‹‘u�£gžJ¶=�¯øº»nÉP¾ñÊ“h¬Ù2ü~sðP@!†÷íÀÆ�÷Ž9ŠÁÁøüÀ÷øc´ f` ƒ7^{[·>ƒùó¯àlÛöÞü`vÕ2³,Ieöci{–ÛvĵÓE8â2m0U�³U•HC@þþ߇‘Í B¢½^ëÉz@>$q† Ö ÏøáŒ,3î‡�Éç�–øª¥�¿v_¢²ŸÜ¢­£ÛªBeÿð# Arãï­%Ú�ßYjgœ‰ú@!A!Aðÿ�°}_ÌBSÁ5°|�–Èļ©ZôY‹>:Q)LL l©š®áæ,3>ÆÛ"zÛÝܾž[áEï4æì'ÑLd$ÕìéêsÂPR5�DTѼ%�Žù\ø:¸g\lšsø·›û~8±%�ŸXް¹�#c«¿?¾æº£loT­ÅAp°2 ©³›Óñ¯ã§c'páBħ?x'vï~»v áÕ×ßÃÙ³ã`˜î_‹={v¡iš¢&в›îòz@3¼_{ym`›T(;PÖ¬ñM…Z¶ìy±~xšbcFe-õàx õÿ a�Æ‹¯g.Ä EfAq6ŒœïFŒÏhý­Þø=Šö¨&n]LÝ[(®’™Ìkqæã\¨ñvŠ9óRÅ,ûqZ *ÖSËŸïkÎE} ”F£>ÐeePA@ADP³�¹Hi5ÌVàà‰@lP�,íIï¶feÖ‹[xW3‹E*¦lÓHmW.½—uM#m³Â�äÒ#ß§ŒŸÓçÀ.Åœ� ãšLæñ0d‚ƒxìРG̓™ùY´HÕû}QÿÁ_žlN]¸=`�trbÅ‚¡îú¥‡ÐI)óPA „!Aɪۖýç̬O>~›7o*ŤGžÅ§Ÿž±­!.¤S–%a•òjåëži ^(ÕÛVvlþvö:7wJ[ �D Ém�ðãë¶®€X“Eû gþÔ3’õzÉ›"Zz°¿cRñ›àš?„ê+g^«û-~MÚâ™eÚh“]P´¢Ž¢ø}z{. Ž8 à\\5C ‚ (  "(‚éEà˜Ý  Ÿ‚¢è1=­Ôý©Û¿éš8"pá'T5pœšÕŒì£›Ž§å6PVkaãÖ2.wÐX³Ûê!þ\óïAg—º2 Z–ç_›ÞñL“ØÎ\àò~¤Ñn_ÿ�Ÿ75Çÿ|(€:Œå%󆻖۹çY„«ƒNJºÎSÛ¯VZyQ (&Ç}Vaÿþ!Îààv¼µíÃkÇAÿJ–‡•öc€+D„"û$¹˜_®É…ØÀ›3¸o6hNÛÙ¼ñzaÅBãÑÙÁ|.΀òÏPM9Ï’™@9#5�÷‡%¬žê µ/{?„ýY*2£|Ìb=®ÛÁÕ³“=sXoñÎòœHÁ‡³ËüÿŸõ?¿´ê£ûÅs­-ÜX\ Ã.‚`–ò2€1 A„Átᘭ°ÀãµyÊfR¸ñ¶´ÐQ|Æwȶ$<8\ã¦^ÈHuÑÀ�Ñb–w¨µŒI…%šQ+Êz¦žDÄ¥eŒ4%ø�肬f ìß*¢OEü³›þ/GÖv~<ýtÏ‹Ñùª¾ïÆî¹þ£‰å ~åZS|ë]Ô4_}³22€‚`ò,ºvŽ�.làöîÝ�Çžxef[Àië3ÔŸÓk¾ð5ÍOÃÙ#í1.ÆðZRŠ=©)D!Që�Ö Z$‰7Kô¾à q YŸÉ¬]N/¼óŠ®mð4,9$† ¼õÛPâ˜Cv¹ΦVuµÍnÍck±×Z"Y“3qŸ0Ú A9®ˆ!AÌ&:}ËG.þ= àÛ˜�¿Ø;(­ª«ïÿö�†¢4)"Æ€ŸD,±Å^ìb‹%vcìFc¯Ñ¨Ø°£ÑØb hÔÄĨD!Æ7~Q£¨Q�&fî~ç�u×ìuö:ë2€2çǺë>÷yn9gß«çÎþŸ½w"‘XV²d‚D"ñ5Ò€êADÀ¢<ŠµÚ¢–g^ð©ÔœÃÃN‚wÆ8|ÝçÊÝo§Å:¡œXBÃw†`bIL£l¿à×O'�eA[ÉÄÄ놳ª(A$TØvÁ‹4¾m>ª'’’H0;8ùÔÍôõEÀ!.š‰H(þAê<©|sú†-îeå¸?oŒø£ÕŸ,ÙªÓ% Oè3¤¶WÛ)RXF@Q«ÄÑè�ojë�TàqôíÓ…K.:Žïç¯Ïÿ†×ÿ9œ—þvo}ê¯ë¯=•Ÿ¸7-[VRÆ�ûoË?Ü¥aiß®9gûí6nØoïA[c×]úqÇmç1êÉ[ûêC¼üâ}Üß\|á±õui*+„aíµšÕ÷ëÁû¯â¹gîäŸÿx„1¯¯ôoÛ­{ÑXÚ¶©æÈÃwå¢ ŽáÎÛÁ“OÜ\w­‡xeôŒxtCo>‡sÎ:¬þ>¬ŽÌ𵀝¾š-Z´  ¯½fßi(v ~�Í•Bè$ŠÁX! ûaLBÝ@—�æ jmk;ʼn?vÛìz~<´œ �¬ínŒÉÌTî|yMÕjýÔ¢-&tÅ„g?,Â&¸§‹„ "ƒf·í¿ó"�mÛõQñÇ×WÄ÷×&OؤSjAB;k®˜}ýó ö;nŒm¬ ¬•FÌD"‘H4)¤r}àà÷@·d�D"‘"€‰Äʦ°ª}‚/hîŠDGœþ¦×ø¢ÄàgàZ^y¥ _#Ãf©útpÖ‡ÒT3NArÎ-¬~Ÿ¼\d��©ìÎI9ã¶mOýâm@Ô&1üìå¼(zíÒÅíã#¼¼MÀ¬.’MšÛº.êç‡Ùô…{åh&_Õn¸öËõx�J©ÅîéR#ÂÊjAøâã±âäu@)qî¹9—\|&[n¹ÝgêÔi<öØÓÜvÛý|ðÑ—xþûá_Xýõ `›m÷±Z3ŽG¾†ƒÞ€O?�Ć=@Á‰'ìͧŸHïÞQÆØ±¯ó³S/æíqŸ-s4˵¿:‡Ü‹6­[qò<祗_åÌ3.çÝ÷¾àì3åºë.ƒ‚‡Á±Ç_Nûí»5G1˜ÝvßÑ®U¼yóyà�?pùw0cæBV°Ã‡ß §�v>Ã~óôštÂá?ŽÕ©‰ Ð1‡¿PàÇÛ-6&ú1ÁGa龬}hc#_ì8—Í�%µ{2ÌáxbÛ‚ÙA‚š;NÌ÷ï¾Aô±Pԩ˲ ÈÆè’Tx¶¶´rØÄ™/ùålåúàSº‡Áõ1ýäŸ�0Òˈ§�³­>*(jc_É¢ÂÔÁ"ÞK@g‹Òkøê42E%‰Ä7DE³ÞTTn–õ:`0?Y'‘H$(‘H|“°1°H‹ØŒÒÀÉ„³;Eœ£*"xçL�“ÇÒŽ�½Ð!’ùÔ%Q'“?�ç9–¶âyö}ôO´¨³·ÜvK‰fÎ&«M`³í{—òÎaû»âËæc*)ˆ;.ÂǶKZ1ÊSÁ-¨©¬~vâ lâœÃ$§”£P›wnñìâë׎-æû:aóãϘ¿×þžv‰ @ýS ¸�Ê áîß\ÆGdÂO#¹~Èm\tñ°¯MZ¼x mÚnVwl;î¸ýJ Ø…Æ2{öW\rɯøõ]OÑöÝg+nzµµ³̘1“SNù=zt]&è…¿ÜÍŽ;nÇò0yòì¶ûáLø`*«O�Ê A»CÁ—_N绽veþüš5<\¼ÎËR ûûh`ã…Z”£/mr…Ou‹NQ ¹I“O^J1ĉ>ñ±WÄúO?O‰Š©â¼`Q"žPØÌΡ1!̵ÅBtyRŒbûyûD'\”ÕPô}öµ€b©wã‚$ Jl¬ Þ;üwåÏ‚ÙÏXÌjÒkyJ—H$MB2>ÎM'‰D€‰Ä7A` ½wè»ÔY&þDë¨B¼þoi DbŸËÄ�@$*)¤ˆeµoâ‘@†ÛÆÎ�Úç f;±ÇKTþs‰Ã K9c}�G¡±H±Z@Þùæö£´.’5ÕÎÞÑĪ^þ|‹Ê·§+‹óõhùZUo,ùÁº÷Õþ¿v“@"bNŸE¯ZkÑZE¾ ºïKîEÅ$Ô§rþÈM ¸[Ô—9iÒd>üð¿õçíܹcýR¤û¢¦¦†ïmº‡ +*ìµ×ÜpÃeôí»1@ƒ04eÊT¾øb sæÎc½.ëÒ­[WZµjéғͦÿ�Lšüeì±Û¦<òÈ0Ú´i�gæÌYL˜ða½ Ô«×wéÞ}ý@«û¾îØÇ9ùäã- »óN8á(0êÓ¨ÕERÕõkZ]¿¦R]ÝŒ®]»Ô_s­µZƈ£8⨠YÕlÚ¯cÆ�‰?ñ”3>ÕLØoS_”9Ž-â‘ }¹ oæìÃEX �§ ª?£kÕ«_—ÍY²�@«²Ïkúµ¿oÉÎ]ÿ…/òm8QL°Ô9}üsÃÔúd÷¯Nú^öÚÿü2 @pÓ grÚi'Æ´iÓ¹úê›xæÙÑ|üÉ ¼`tâñûsÈ!ûRSSË.»�€±¢�E”tè°Nƒ 3|øHn¸ñžh[nòsŽ=öp*++¡à׿¾—Óϼ±´Ï[o>G—.�ã�7ÞâÜó®b̘w©©U(èÚ¥5ûî»—_~ë¬Ó>>l¬´ÍV==zd}^xáeùÃ(žzú5bl¼Qg®¿îöÚk€±mР#xiô;¬Jî½çR~ô£Ã‚vm¿Ãvo›HPäs­Oê…{çì·µ�Ë¥ð‡;F¤4ý›í¯&�]ɾ·íxšMO<ÊÅ bEß½M¼8d"�æ(X_\ß5¢âÄÓ¬*E­$g²hTTAdŒu¶-ÃÔúqÅ„¯À.@4ò'†·¡Oÿ&øhl°gÂÎí°HdW<’Ju "s€yéu=E%‰D“€ ~ \ LIK$IJ$ËC%ÐØ¨À©‘T_¡d)ß, H2 S+^Àñ�¨Àápß;LjDR�Drë«;s¾Û˜mb!Äû•�,½�ædr¶Ág` Äóñ»»x±#Žâíç…$/îܪò嵚ýiâ!Ù”ƒ* ͘Ÿw_ûÑEƒº=K‹ªÚ0b ñõ/\ó¬¿�ÄÚZn‹ÿ«”"€ ÏÆë2fÌSA´É[o½Ã1ǜŸñ“XÕÕ,ZTû5 @Æþ3�ý8��þ;�2®ùåO9÷ÜSƒ�þ› ä³I³‰qù¥'pÑEgÆÝw?ÀYçÜ`ý‰°ÅæßáÁ†ÖGè�¯tè!;òÇgÆ`©ÒÊÓò�ûúoº üþ÷�qÌq—±ªèÞ­ÿÿ�çhÝzm(xñÅW0Ðô‘5Vòã—M¨¨¤DxŽMšPÃMø¶qÀ 3NŒ‰E ºë”cí·HPÛŽGù1Ø®O{fXíA?´û1-‰²ëXü¸ ~2FÄvâóດ©vlÉUZw¯Üö�7€‰‡ˆ·IðŒDSïZßËR̺¨ 7ñ$F´A”˜¯‡­¯‹�YÀâôúž D"‘X¨¨Ú8¯¨úNÆÒ™\ ÜšÆÁD"AA–L�H$AO�C�M1¼D‹4‹`Øín†°ØÌÚ\‘Ll–²�Ί+æ�AÉ,�wªàÄ�†™Ì8'™„ùçwÅ–†¨ØS|Ï[,ö›51pÚÙ¹ÍY¢ª‘¢Ýv " ZÞ¢«\m¤P,3Ûý@‰Ø$T\Tè2$âÀ‰ÏX¶ë Þɵ$Ïš=õñ€æ½{Å”û4BüÑ|�æÏ/:´ç©‹oø4-«jƒçA°ç-Ú�X¿í9 l%RwB,%�‹øJéhW^uN þüûßo³ó.G™øSމ%_?õiçLü)ç†ïcúôÔ§uÛy§-�¸huÌ1?£>"ç”S¯[Zê¬Ýv;²>BiyxtÄèF×É©©Un¹ù.ÀXo½uY• ½å’Bü1† »Ÿ&ˆbQ?^œ0'~€€¢¶!˜ø“ BàÌ·s n¼²ñÏë&yOöŸöÔúˆAÅGÏk'.Ù9°�Aœ8¤êÅml[G ?Ú¶­ƒ1Es—*Ö"aÁlmýU|ŸüøÝÖ<7›E"o51ÈÒÿùw+P|´ö梒”À^. [Ý»ØuŠ"is³v d [öü7CµªíP­H£îJBZuMFH$eœzÊ�Ü6ôçüîÞËyìÑØá}’QImÍg×Ï42cË`° Éz‰D" @‰D¢é„È~ˆìŒÐ ïàQ7³Ø wð…ÿ�â Á¢u”Љ ÖŽp­ì#&bX;‚È� çMðû{!ÇúLyM뛄³�õ(ÏÁ2�½ÔEôˆ}6\ßs6IQô[QsGzWq#xFvÛõ{¬^X´÷çÿ(hkÿM»³28ꨃëkYyä!ì¿ÿ ÖíÒ!=8�EçM-�½€÷X:½€§�瀤´%IJ$ ‡HKDvÝ¥ éfÀ�, R‹‰sI–Ej¾ˆ¿^ðû@p‡"A´‡bB„Kõ’ƒ«�€ßÉœ âL±DÓИÔ >©X¬_a;‚™ÍÎ΂aðB–€] ‰8b¢)YÌ&±ZEemÐp_ûìŠ][� çÜ¢âý™›ß3þœª±S.—Eµ= ­Ì¦ÕlÒ~È‚÷½´¦‡�@ +ìŸ[z±Úö¼¹ŠÙÐÙK² ¬ÿ¥Q?"ÁR$üìgÇRQQ¯½ö/{üV>úècî¿ÿ9–…O?ý0ÖïÚ…Gy0`Œõo�ûŒeáæ[îcþüù|ÓÔ¥°«¯DA§NYlУ=W^q@Pû窫n¡I�e6–”×y d’B¨!Øø§ &Ìñ�‰&…XžE¿¿am€h:RÁ?6zQÄ C%¦Ñ1È Uâ~ ¹ü¤_»Æ6ÔoÛûOÑGRð‚”í‡ï ±H  åž RÑšx&Á¶Ù;�:!JÁz›ÀàÅ0GëZñé{,B*Í>6Ø ;`Üu׬.L˜ð5µÊ²ðÉ'ŸF—.�c3-ëúÝÍ @fYùø“¼ùæ;¬ ,XíÛ·­Oa·©¿Þ}÷¡cÇ€ñè£#ùû«ïÒ$ð‚F<ú2>."¸”faú/7Ôäþ¼6þ8õHECqGíìRZH]¿ÿ[±¶('tEÇÌø8ä>«gmˆEÇS~–E懲B¢wÝø£ŠC¡¤¼ÀDW{Q'²�—¥gõ©ðÂÚOîÝ+e} l¡¹ÙS�A °µŸÌS\3Ïs̶%÷Ò�ÍQcú¨küÑ@»"5\U�WHø©ª[N>Î’= ào/¾ßÿþfTV+ÂÁïÇ[ô–ýö݃aàÀ]cܸwyïý)é~»XÜô†9åT§€Ÿ•É„‰D€‰D“D¾ƒêA([ T‚¸è|1iˆçý7LqßY –Hú òÇ[”Ž]×ÏÄuØþÎÁ¡Á,לð4ö½/œd6±ýP·€ú\ö¥5s|êuu¼ƒÉ©Hf/‡q" †³¿w²ÅE=¢)Ðì™ï£û]È5köìÇ;4ÿÝn­˜4o°@”“·«]WãçôE‡ô¡kU-Â�ÞdmÍ­[6ó¸$M¡õÓð³ò]¿ÍF)œÑuý.øtc« sæÌaY™5;<¦C‡öxzo¼-Z´€‚iÓ¾äé?þƒåaòä)¬lD„Š Y©©IzðZ¶ß>Ô‚ß{ïÎ8óš ~l �ânüÁ§ÄB±è«ñì'v¸«ä£[ÂÚ.NTR@lß Å©¤útŸ­¯�`‰ rû:[˜½üñ¨‹ òÑ'V®ÁV‚Ç¢J=v}wt$U*f‡\àSÁy›yQÏGéÚõ0\ÿ}ôŽ¢�0f}p×ò˜èhíT\›¢jý‘è=pïAy H*ê.+@5ÐÕ¶¨¦¿…—Mø‘ºe?`0hŸ¬’H#Fü©>RÙ&д«�¶Y^vÜ¡/–>ØØn»ï³"l»mxüèÑcÓÍûö2­t6^bé¬Ü ¼ìšÌ—H$(‘H4$k�ÈÞÀn ­g}<�ˆ‚jIÚ,Üþ8?’‚¥ õv]еK%b¨‚wùÚHÐ4‹ ²Ô`>}›å§—Ò"þæ`ŠG»€ÏYï�Zj¿¹>Bæ\SÌF? Üï£xvwñ÷ÑÚ`íñ‚HªT¾>µW‹aã~Y9~æéR«í¡m^ñÁâí»\Xõ34ß õt@±IQ̈‚º¶¨¥Ä ðQQˆ/æíúïû¨>2ÌÕî ‰@°ñF�iÓº5|õÕ&~:“U�µg.+F<@q“Mzº´q“,Òhùüó/ø:hÛ¦š�{nι??‚»†]Èã#nào½§¾–À‡þLçÎYUÜ:ô<Ø/À˜7o>'Ÿ|³f/¢ ¤ø*yØÂ”–NÙÁÆÙb�`œ‘L°1F]À�4|´gŠ`Q!b¢‘]‡òšEÄÇ W÷'ˆ Š <þs®df®OßbN-°f„ÑTÞ&æÔ7óU$"Š•§€+>;{iL42�sÀÙÚáÒþY“ŒlâœvÍï{÷Ôf£?¿FÔö‚r´BfÕôn{û‚Ÿô=¿fëNïy'•µÃ÷G±~KÐFÛVâ€`i‘Š…ðÚq¯¿¢6WM5€€-6ï S¦Lcubî¼y|løÝ€1}ÆL–—Ï'OY£�ڃ瞹³^à™üù?yú©¹æê‹8þ¸#Ùo¿Aì°Ã¶õµºw_Ÿ,ËX\qÙ‰œtÒÑxG×Å_Ã+cÞ£é Jü䌒c!’“Í¢:ŠÔ[¨�¹ˆØqñ±Á×B3aE$ŒÂ�Ì~7‘Ãt“ÌÆÏhªÕ b‹Gä}Ÿ×Þ°Tn–zWŸÏõW"©á$Ë‚ï Í1Ûûþ©g‰EÇÄ-÷{L Ã×-*l¦Öž £onu \Ý#ÿ>†¶Ø½7A0/öç” ÛÌ-®/¶ê×`×µ}}4•ÕHTÛFŠû'ˆ´:¡yóôÇATøY¯n¹xØ…”ôž³²xãߟÐiÝ4,ý7?(e5áïë¢m¶dyÙÁ"¡ªªª8è =X¼ãMœø/�~'ݸ5úóX:ï×k'&IJ$k…h° èaäÚÛüÚNÀˆø"Nš0ǽ}ï£B2üDT,Æ”bíÓ‘¸ôhѺ.¥BˆÍîµZC&>™ÈÕn‰Î¦•¸áœTAýsºDë(’¹þ©"~V±¿¦wÆrý{q&« 5ìá@ AÛ ñ‡-^øŠ8€æ×4«~tÂ�Õ#>¸5›±h'(G¡¦¶KË'SWçgï/RYáﻄk[5“ì'E2 £ÁTM@ P+îìÓ¨‚ì&¤‘jAÏžÆÔ©ÓX�Ð\W°LKœn.}Çœˆ4ª­©aYè°NK~yÕOÿÎ3üö··°ûî;Õ <•••ÄÈ󜺙Äõë•Í©§ÈùçŸ�·ïUWÝÈíw>IÓ"MéÇ!DCáBðŽôè8¡ªŠ=‚�sìc‘²>« "’bPX×âBE8‰Ä„‘BèÁúí�ü?XÊW«÷Ž ’!6^«ZLp ÅK‘Öåƒ =œOeg§U?i "šüïyž»‰â"O=¡pWㆫÈî.[Q_?ÑÛ)´{a[C@Ýu]zX³6æú>záÑD0¤¡íñ±Üð“v*€öäùÿ-©.õÂO«ºåR`p ”ó|^;å¡d¹DSgäÈ?FïÞÑ«g'–•õ»¶¡_¿>]ôñÄ`øÛyçíXvÞ)<îÕW_K7mÍca!èl <ÈÒi\¼“üĉD€‰Ä·ɺ�¶iæþ&Wðsd�˜R8vÖ ^hqŽ\Áe‹º±ú@Xn|Ì%˜ó@ gúÛE�Ã,wýˆ _b#'úD꽈¯äkúxP\¯²­æ¬“6ò<(¸,&è…<<‚3pq9÷;€Øâú‹† ±ˆ*¥¢ê¯ŸnÝâžñ7WLœ{„(ÕPNÞºÙk‹÷ÛàŒEGôzHÛ6›"¡ãÍ"šÂ6Zj;÷\Ç ¥+Z^[Ê¥Š‹œñ‚í@Jý2sælÀhÕª%k6–¾ Œ6mÖfy©jVµLiÞF�Æ/Î;�ï|§@0ãó…^æÞûæ’KÅa‡�Ħýw§uÛþtè´íJO'søa;síµ—à#�nºé×\ý«ûi‚X.��¢X›ð®Áx¬jQ.¨/ìÖƒ³ñÈt“H�8KçR€ùˆViXƒHpk—ÐÐWܘãÆiˆÕɱu( ERœ‰,êÅG·`"‡ÄRÐ:kãE*lÿþ`âÅ=ò6 Øßý¢€FÇ]C}ª9ûhã¸EA«µ³ø"q‘Çú¼§©‹jòý«M•5ØÂ´ËLl‰Õ!¼À†Z”˜E$i,� Ø3/ Ò¡#yÞÕ¬‰ ?YÝrtá¼hI9ã�AÀžèÂééM'ÑÔ©‹V®k(ȲŒÁƒ÷`Y9äàõ‘><ûì_yÿý¡`«­6§²BXª«+ØbËþØy_H7mÍep4° ðO–NàwÀ?€m’ù‰$%‰o’µ!Ë¢º'П ÞJÃHP8WUqÃ¥HsÎ)_xÁ ‚‚üæìŠ8€"3L㎠¼€„šßDO˜×?dXÿÃ#’Bˆd&|ç±ïÝ»� N2Tsk¡dø(ÝøÿÃ~XdP,µ¾v^8.»‰&ŠQØÄjþyÁ1;FqWAP�φN‰ Aþ}%^Ç(&|ä��J]TT +©]èµAÅ×`D¬ßO³�L&H»kckDs+DJ{·A?ñD}ß#ïªK l6 ëdáÏ |vl­Píˆj«&&þì¼ÜtmdáñM�?¥?¶ ÃGÕìdQ7�f—]¶ŒQO=ÏØ±¯ïÐ;íÔ�eáÀý·ÇjqR_?êÉQ¯°*©­©MÌ7ÏkÀ¶…4™¥ó}`,ð Ð5™/‘HP"‘XÝ‘¬Y¶ p0Ð�L2"µt‡{Ìù¢Ø5c)6l‘¸# UPÀfâÆœ^¸ð‰í{s!˜øäg#¡c&Ž>¼0$Ä… JD±6£±wv-¶-u™õÁZbùö‘2�EËØ9ƒ¶9±Ëo¶­Ùó[7ÿÝ»'VýåÓ!ò¿ì�}LVuÇé,LÓLkbj ©ùš3_0³Í¶œù.øŠ  "Ñ‚ ïÆk4¨��È›À,šR²2ÞÒµœekJ]å²tŒ—¸�{öÛ=œg—×l3|Îöñœó=çÞûü®ÏžçÑ{ïïw¿sôf´�ݽNç1¶úÎ épw¸ÊÓ!ÜÅ1×Hã)Šä "øŽj;áUM®eaü�ÙúVb](Ó©™ÌïÞ·³=d ×i=P6aÂ30räpøØà§€kjjùÔ©“=n‡‰Ð;á +_s7òöö8›¶…òsµð°ØÂN`±dÀèÑ£„^XXþ’àQ6ñt©xòÐüB‚Ôå;ò³�ê|#†hëâÏ? TÁd1~Õnö§|bÒ|Ý?ë š_Ààó Çm ëb==q*4±&�Òåê@fO‰Ê‹>tLÒ¬G'.¦ñx¾¹„'ñÅ9ÒyíAãûƒ0¿è£ô^¦Åãéúø;Ý|*S^ûPãu€ºº(6Yÿ‡½4ÑË9ÇjZ8>–&¦O%ÄXx …¼�EŽEìC^”“ï%~ZXÕärÃ0]]ã‘CüÂ� RŠa 2z·v$ qA2‘NÛ¯›�Oí¸ΕgÀ÷WÎBÓ�/àÎï—àú�ðeuä'BDø.xv“½î#.vŸÁ‘OèÍm6zׯ[Öæ:ý9HŒßk,ðÓµOá�ß¾¡×óù…,ø 3ü÷­¥§Mi´­ÇÚÅ�{*êkÏÐZ„8fûåÆb°dGÁ«æ‰m¼¶¾.Ƹ`¾c¿�µa½;¤&Ò¹¬©Ê†kW?¡1Ýø¥.}�¥%)ð^z0Ì�3þ ;¾Zä _žG7æ à|‰xZZnCUõp¡²Fô­~s% ÄV­zUäuu�âÆ³×±x‘ „Þ ùyñp廸Ýrê¾Í§¿Ë£G˜ âtf±î¥N14bì‹ÝQšÇ¢î&㽌+�:Ç1¨Ÿ˜.rô?¬ûE»PƒǪÎ1ã¬÷qLp}_Ô4Ä¡åÖ¸GÖöwê UwÊ# ÎÙûF¾`NÄT‘ûDLÑ5ÖeLuŸcÔ#Ø>õÉcóçuOÖh;ôJ'o•+-lLjw˜ƒ«:áM8�§¾Pê£\‚:÷ÂîЉ“%�<� ƒ!dø;l’†´#Z?(@¡ÃÏ®4DªxyùiÝŒ~Ï d{‡I µ¬,‹vÿöÎÊÊêúâ3´™‰‰QA#QLì"K£FDc�")jìe†¡(‚ bÁ†R4öÞ¢F�%Œ½›ÄˆÆŽ+*ñþÏœuÖÛ³ïÿ|ï}Æ{×Úë”ûÍ Ž(Ãû½}Î_†<ç“Oæ…™3¯ k®µ•}h³Ív¢gågÜ;ú÷¿ÿÓøÏXúsø–[ï ß~ûm(uÄÕºwïµ0ß7|ýç¾û k¯³µ~Ü�7Þ^ÖÏMýfû0uê%aΜ7CΣ?¿^|ñ,ýwÓ”¿W–ùɺ!þ9JFíæþxqjÓÇ^yåõ…Ï+®�Bÿ‰'žÖ~^É9ú¼uu£2ŸÝ{ŸƒÃ+¯ü3”:òÆ.ýʯ-ׯáÿxŠ>~Ç�ú5ôõçõG™JýïçϾÿ]ü°tlþÿ¿«èZQÈ©×E}D•éŶtÒI'�tÒiðg¥Š3oì£ÐG �ëA‡ì¾ ƒBuú¨Q�!��‹$‚=–[ä¾Fô ?¸×žˆkÀ•ö-—;3¨ù ‡åƒ À†>€<Òø1�Ê�pÏÑ �#Àƒ<�ôö¸àuíY¿m¯ñckVòß¼?HV¯2ìéÖ{M>�Ç$Ÿ‘�Êâè³úœõ�r§PG"zx†À‘Bžé¥@G†C@£§íœ�JIãsé¥náÈ2wÜq7îóIÿYð"MqôÎ;ïÒs½·ß;÷×Yoýßãë,&Ôy¥�³ϾâsÿýöµìéAðÇr@Ôˆè™87Ð#Bm G{–k4È£ÑäÀ?7à£Qd°5@ÀO£ž�~ÆÄwAIc¬o±à‘ÑztRiˆÃ °Ç¢›Ì!$‘AP {u¬I¿v(Êz>VCøxÀ é¢=€j€ ‰œë]•Õˆ,Y5":~(78T<ˆ¦z‡h°Ç �ÖÖ3uýDz•K9øi':Zô‘(äÐ#¢Í*ì$T>Úzë=ôùü/®o¸aï&@O=õ¬ö9´>|øáG¡Œ£ðaß~‡äúg–7r(À’i¦¡œ3wW¯¾e UWÝT~�öüóŸÿnòŸ=þò—{èk\rÉå¹?vÚ%—ÑÇpdáî®»ï vôÍE]ºl¢}–ÈŸùóçg~ìÔó/Õß{åœ'Ÿ|¿WË@ÛõÞ+}ôqá³Ï> åÙ³6Þx‡€ýσ­EÏ”‚þ&êž^tK'�tÒI'�ïüüX´- ŽEÁÊ ôEHsëò°¬�è@!A€>pENôÈõcBM9� ‰$À»'ÀW�åÜÏvi¨ã€!ƒ?M”Ç`ˆÕì!d2È£÷åÎqY IN¨Q޺ߔ£ª>ü‰¼?8ÖtòNÛmÆ�«8iÆž€=ª>¨%'$’;pçÀrƒ:1à1)Ü‘¢Á½cGd}…§ž:©I¿ zbü}Ëû±òì«p‚Í›G?ƒ?òú¼Çs|®ÏyÊ)gÒljÛ&÷¿7ùý«oБߧú}”1½á©§ŸÓŸeŽþ{Ü Çve Ñ£O#—¼ü¾ÔïÕµ×ÞN>yBÚYú߆Põ¿•ž=wMhÑÿlh#:D4Wrè¢ DÓ‹p餓N:餳äÀOÑFâú,ú Ï pÿQO£Á�BßF¾AV#2ر¾Âê›7�ªÈ¸7º£{8~P£ONô›Èr’|àr{ý·�ÞÅέ%"gè“9 ÎjÀǤȢJsD@ ô�|Ѓš·�æ•Ç^t@Õš#o‘1n r�Ÿåk¿¬ê>zfňKöè�´Gî®MR+Ђ‹Ge}«r YN=‰Ô‚²FÀ±vVYm ‘ é‹ÿáµ×^§çgͺºå ŒÑ]޾ð“x¨ƒçóϿȀäs’ƒGÞ}›ã¢€Gï¿?·‰¿#ø¦›nñyþù—~� þx({ü›†ô`Ì›�ž8ªzE�Ö¹}¬&Ð#}3È5² H£—!2ô�ã9œ>*»³ÜÀ ž‰\?Úcè£÷ìNîБF½YN.Ëáôa„Qoú=‚ÃG¥9Õ¸gdÒ^‰p.ðÉ?ìBÞÅ€Ï*¨…¹cáØùƒÈ`=Ôáò‰Ç½ìa÷�Á®;ˆÚ.%ð§‡è>QÈ¡OEÃDÕv*áÏþW_ýWˆŽþ9(®•Ì?'8àˆp×]÷ê‹ýM€žþ48”wݵ¿ûqË·ï®n”ø…þ#�Žç x”3nm¾¾ _äç){Ç'?’qf¾Ö\úk/ö³Î_ÿú·^èÈ^¹o­Öu3ø¾‹ÃºäÇɘ=rMÉïƒx|.¹sÄ)…ûlÅ@Mß�?³ÿþ‡…è¨ã(ãû¢n0@BüÞ.Ñ÷è_ÿz-lù»Ý2/Nœx®¾©)vÉ3 5ÍŸËÛXÐoE!‡>+j—^”K'�tÒI'�Åxø¬. §ÀËóf ‡#?ä쑚¡�åè³#ˆ÷úè]¼!d"Ð#âœ�Õ®ãÇúy~pçº}á"èc÷v�CÔЉÀ�EŒ{cðcB�±o±<øÃH!N €L<ú�!¤=ÜI3÷n·é˜ókV¨›—ó‡Ã請wO«C§(Ð�G"À>*Íý½?Ù탨RP¤÷è¡¶ÈàÀ‡ëRû€ ø™Zõì|@ªð§C†Ðó+tG þ·´ ¼Èá Ö��ÔÐ1h¥Þ½xøáCe4ÆçÇ@¬x·ŽŽzÁ½¯n«o�yï‹éœxü…ÿW¿î™ÀO€\àcB�@èA~hü[<âÍjD@”›£G{VYÌÖÚ&êÌ!0äƒîû"¤B©\Àïâ1pè[ —túˆ� ƒ y»€T{bø“{ © òÐ=r»ç<Y´œ à £ß,@zpû �ÄÎ †?Øûõ㈑oìüAÈï-W1px«f ~~&ºTô]ÎwuO­Xa' E@'�4!è�»A�e|Ý&@|&L8'××»áÆÛèã^|ñ•²^äï½÷Ã;ìƒg|é^Hüü’èÏ1åìdz÷Ý÷=7MSI�Í‘Û÷¾’5>Æ�dwÐsϽH.¾÷¿7⸧7é¸6�úfœÆgÊ” ñŒ/ýùí­·Þ&‡;þ]û¿7œ£@®ä�lta<¦¸¾~t@MûçÆš¢¿ˆBN½,Ú!½8—N:餓N:Mïúé(Úµ~ÌÑ£µõHkÈ$9�xS9 HkärA$õ†"Ð#u€<ðƒ{ôHìüñGÂa œÖ‡|׃ ‹ÙPpGsë ‘ã‡@ íK4*€Çä9}ä±{~Öî)רæ§�ªé\ÿŸÜãÞVúR›ÝÏJ£ÝDT“(†?"ä��žx'„Qoä²¾ N �4ò àGä»ãž@zJ –Œžx<ÄçþåOß�xÚéSô/¾X6»Ô Ìuç£ÎžóΛÖðâ’îÆ‘¿„ë¾€ãŽ?%\ý-h$Q�Q¿³UÿrŽ…¹î;ou>N“ }︕ÅÈúŽÏ…æ¿·T«‡ÊƒB>øðaç� u € îHŽh. ë‘;ÈçÃÜ‘ã*C4ö�Ü@Y hŒ }ÀŸ|üÁ. þ �ñoÅD “õ³ÇÀňï1ìqwþäw!ÂTˆ¦‚ûÇŸ1䡱p×äü!· $=jƒ> "EŽ HëN¢eD•Íü,#-úBrèÑÚvZt$Ýgpt|–Ü5¤{^ò~½-¶ØÅ^tÇ‹ü?èŸéÑÑ1¸9¿–þ ‰¯å ¦“ŽÆçŒ3ÎmÊÏ¯Ž•Æçž{î§{O2j�€¡8‰âgt[¼G'ÿ¾JÝ�!£è™^x)÷³F�O+ãøò Œ%„c«´ôg怣.$ùµ&Ôô#CwÄÈÐ\ºMôëôb]:餓N:é,ºãçG¢­*&Ýx`’9~àö�²ûw4Gä@!9…\7 �Šœ@´ïråC!Œ}³Ü@ ‚|  üòÝ??‘;;�|ù;¬FN"à£5";€|0±ë¹¨Õàs¯î:âáÜà§Ã�¹ízž2©â䙺çÇ´§Áìþq¤w €ù0ˆ�?ìþ�K(†?&g@ˆ ‹A&¯N#ವÍïûà…‘h'�@…3òÎYýËøÕWߨ0Ÿ¾Ž|üÒ€0Ï�_䆂ۇû PΚrA.ô‡?ì« ~Ÿyó>m˜ƒ¯N$y±@�X“Ϻ@ç¸Ñ÷ /75Ò9îMv0:®Å søô(¹ûZŸ"ÀêÈùCn € Èפ}÷ˆÁÝÅŽwê\ @ˆ€Cš[Œ!"r†@üŒãøA^ÂùcÑ=¼È”ßÄу?ð‰]?TSä^,wÿO ˆÌÅ£÷¼ó‡Ç¾!w÷ì�¼¾:�ö@Žû'· uU�à§•h€è-QÈ¡çE½+ì$ÔdH÷ÛD�Fÿ,mhîÜ�Š�z”ó51¾?ëåÚÅsϽà>Ÿô AK騸ÆçŠ+¯k¢Ï ˜¥û|ð&ß©Cã~üI÷¹Ýv;€>¯ü,gw®ôŸ+à(@Š¿îoü—ÆÕí¾ÇÀrv;ƣఠÈ@åƒ7†«ú3mãÓ§Ï €ÏŸ)íDµ¢¼“?¾�)Z.½x—N:餓N:僟Ötº ø À£àb§"ÀjÇùc¹ NGƒyøÎú€¨'€ÇrÀ¡hÔ›Õ¸+C4Î"rA bÈSˆÙîŸ~\3ôANw�Ôä¢ÑoU¼ˆ÷ÿ ‡ô ü@?${®rØ%ûW­3êÙßóMÎ=?_W­;êêÊaÓöSÐ#b×rCØ÷Ã"r�#°C}©‘KT‘ãg:ò2ÄtB@$upØä<ÓÑ,ЀGæ@ ô ÞÑA 0ÈÀN ƒ} íqßòÑ(8qdøã ü›ìì.»{^É=î­sýkmvž8 Ðð§$B�åì±èî²¾ ðÇóáÎä,AP¼÷§qÞ’@]4S!Ži¡úwïÞKÿ²øÀë_N*Ù_jçÌySÁÊÌYWÐñ4iÒTúµ[|ÄÃèY¼+3¿zöÜ•>Þá[þ?¿ÌÈ×o§ž:Im´ßÆ!A�:9 ›‚#=§#>d¦¼Ž!yê©ge¼žŽÚÃ÷û–èŸ #KZú9Xáó.ºÔÕ‚P�¬ño�ÛàÁ> ìä�ÖE$7�y³çã½>Yãá<(”éâ‘pšàA_kÎáò‰öÙûãà þ°ó=‚9.øq{ýp„^ÑÝ?”[tÔÕËð@ƒ$Ï?öŒ�h´z ¨6DãÞ¬ŽÇÁA}XÚ؉kŒ�‹Ü?vG Gz;^4ötRI4¬¡^Qô£ÅðB\{Ñd¹rèÏ¢U+ì$´øÐÞûì½8Ý\�þŒ�û|š5ëjú²?'~Fw5>7Ýtû"8g^[ì¨W¯¾ô5dÇd~~'Ò«¯þ ÷,ýy׎îeä{V}ýhú¼Y?M˜p=' ÏO‹ G�>-�CˆŸ+[Ç;’>χ~”Ð’ÝÔW4§ t�hµô"_:餓N:éüT‰¶Lî…@ €\Á ÀcãÞ´žˆý?pú0ì!裲ڑÁÀ†>z纂 ø¨¬„±oÚ3°ƒÜjÊÉå#µ�~ é¡FNð§ôH8 ©~´¯=Ïùcp‡ž5ìÑç|÷¢?Î�A~ZzþÁÕÝŽ»/7øY¡î“v›�™ZqÒŒ¾ yäsüðÑš �ˆj�|û ¦qo*†A&«-ì †«G{ìþñF¿iÏàNñØcÂ. ÑÓ ()¿:¯´QûÓ÷‚ß�»ð®%€˜ô}]�?ò­‡�ø¸Ð® Ë¡öXlÜS)¼‘·tŒ]ã³`Á‚†ïu@KÕˆN}Y†uŒh™ô¢_:餓N:?Ø#€§•hÑ@?ìüÑÈòÁÏõ<΢öM€@’ãŽ`"C¢L„»AM<Nå8~œ;ÏeÂÈ œ@V³ëò� 9íõ‰aàE�ƒ³Hà‡—�Ö€>Ð8Ü•R 4Žœ±_U÷/—ý=_å?ËÕ.¨ZsäM•µí¯pǃ?ˆ ~LÜ÷Ý?äò‘ˆjŠ?–ðXé=ƽY„\�#èã90n'uõì|za;i¥#á¢]HéûÒ’@€>ÙÈjß „H£Þ¤§Ž�¼û}Í| qn²gþ@ |¬†9õ¼@è1bH9�Ø Äb÷äïû�øžžS±ó‡FÁAì2ðƒå|¼}?j€žü"—�å‘óÇ‘¹ƒ òˆ ÈAÎ#á�õX€>€�Þј7­)âÎsýPdðÓÉÉU„–µ^Èw]ï&ú§(äÐD}E•rZȇ%ê`nNh§�÷[HÇy5ÕÞ£›o¾#?â‘gê*y÷Ý÷B‰³DƵáœ|ò„ø}COãÓ§Ï º÷ôä“Ïžë­·½7RéˆeŒûý,,ß¾{üœŸ¦>O=ý\jŠŸcuä]¼ojíu¶NèûA]D—‹BNýW´Ÿ¨Uz0�tÒI'�ü¹i:} ôþ˜ µ† «mü›çÒˆQo�¼1oˆÔ‡|¨‡Üq)ÔáÑp> q¬B®²ž»(îСgxÝø”—-ß�å@Ü‹¡joÜ©ñþ¸�ûÀ‡z¢†=?m·7¡fÅ!ïæÞóóóá�·îöÑ |D1ü¡ý?èRùãà iþGCÙõC ˆèð¹ÔÇGÜQM‘vÿXž@IM¥ø�íz/-ØÜqÝ?x†FÀ‰4ªœ½? 2à£ù‘ „PK4eƒ®iÜÀÏZ~ ïKûEÝ@Ü'™ÃGEû€�“aäÁ O‡BÞø7D†?ÉÝÃð‡sîòdCg'À�}L<Ϋ}'€O †h,œˆ\@púXßž‰vü˜ìž\=Úw �ôi�}3ÁDˆz‘ȇžÕc8¤’;ÑO* «Ìù[ÑßD!‡æ‰†Šª+ì$´D@–ù7'¤î Üç’B¬Rè™gž§gjkOÀ}ùKþË@{î98<ôУº?±Ô.É÷ߟ«#æÄ ´$�~Ÿûî{°(ùàƒ¹¹Ü,gŸ}}Þm·Ý“î?|h®};ŸþEhêóÄÏä@¿\¾>ýô3ú\²Ó) ïýVôx èÑÆéÅÀtÒI'�t~ãÞ~*Úž@�Éë1ôñÝ?úŒ3‘w!G„ûGr‰Y#âî85�{3G@ÀŽ7ê BŸÝ@A€?èìä�¬¤ýØåcyòp�~äÂØ7ˆàåàòA®êÛ[ï}Ö�êU†=›{Ü[§ú7Ûö>m,>ÁŸ>ð±;ê9À=S\ó «Ùd�QècÒ¾íùQaì[nÁäíþ ‚#HÐÈôÂvÒ¢h×]û=üNÎô½iñˆÝ?¾ãìÑÜ î°÷GE»�D¸gY?†=N�$"ð£BN@Çwý¬AÏB´ïQó‚ò’ÚDcßT±+ÈD€‡Á+Ûõù/‚@¨ ¡ìA-²<Þý£½Èñù|yžC¹ °99�~Ð 2àc. € ŠÈi Á ’£àøP_j»ï(ª)ò‚ÚÏDÓE߉B ýOtžhÅ ; }?èŠ+®sÆyµx¤{Ÿñ§�…û2õ—¿Ü“õí{ Œtû2Äçã�? ·Þzg˜|ÖáÈ#‡ë˜µe—[¯ðq»ì²ÿ@]ºlæÏ''ý:V]uSÙyùM°£î§<Ÿ·÷ö{ |Ýu·ÐýˆãÆâÒý�±+g÷=.’¶ù}Ÿ,Ô�Pþ�aŸŒÅKèû‡@­DDï–‚¦‹VN/¦“N:é¤Ó?mE› ¬9H!� €n:5DÏÛd°ÇrìRÁ ÄPG„Ý@*ÜG²>ÁË p=D@ �¬kT™Hå»~{ø È>!»'Ècw{üý?è) ‚züØ�Éwý ï¢š\@Z«àü©<ꢫ=òÎy‘ øi_÷y»ßœtIÅèûÄðGåç;ì bàcw&Ü¡ìqrC*€÷,7àc. ­ÙåCÀ‡r‡@�#Œ�“p %-’îºëÞÐøÜyç½éûÒbÐú�U;áÿ®áøÁ=zˆp©¼Ý@ö O €0*€ÇîP{N ‚>¾ÀGjìú‰àÀ×€�ÞEü1 Ĉ"‹�? ü`Ç÷~ @ Y9àŽFÔõ&Ò{‹Î˜7=ü¨ðtüAwªE"{vÀÐŽ•{ k/;ËÏbo‹B='Ú®ÂN@Í pd –~4óÊRH{�Ïã�H@yÁÆ;¹ÐO¶a„[î=?« {®õ^“‡(°1øƒ\dy܃Øíã8¬ dPGï=‘ÛGrÄé!Üñ`vüèóÔS!�z>øá±oؤ0h§4.i!¤ó̯¾úÆŸÙ³Ÿh˜Ÿ¾G-¹Î qCŽÈ öXޱpÒƒâ±o&ëRìd à‡û€A¹ÆÁÙ}‘½?k8¹;Nrˆ\>–s­ð}Œ|£:†@=ˆs‚�‹ðŒÅR"·ÕˆÈG¡†ó'Ÿ(vÿÄðˆÇ¾qQäAô|÷�?ŽáO<ÎÙý¡Fî@ ÈàÁÎUx¨§bT½Zík–W rè=ÑA¢6rj^¨{÷^ôì‡~„?³[0ÚÿÃè™ „u×ݦܯ¥G+%Ð2?Y7Äûk6ܰ·Þ57´ñÆ;„€£;ˆ¤¯¿/æÎý°ÐðÁG´ŸSúf Æçˆ#†iÿ¬)PÿŒ3²�6&œCÏÞtÓíK Ýu÷}Ú/WcÆLŒv=�PóAÛŠž/Ý#Z7½ˆ˜N:餓ÎÒ~~,ê%:„ä¹€<ç"új;~|·Ï4úÍ"—rî±ó‡ z;,B€;¥ÇÁáý"»$GÏgb—å¬~…¼g è –œ¸cÏ:9¹€0æÍò¸gð§õç]½êðäÞó³â�÷Ún3îôŠ1³ÔíÃòwÿÄ® zˆÇ¾q1Óäƒ o�Á!‚?¼ ÈòìÝ?¨9÷!Grü@ €’(‰Ô0†ãè£�#{ìÈpòÉÂ9ç\þüçkuüÉwß}â3oÞ§a£ßlŸ¾�? P�üPô!Á†A€<¨ øPŸ �»ïÇrÏ™\'�õñH8€žB?ÎM¨9ôBÍn …5Žîù`2è#9"‹€Ëß»},f÷Gñè7@*ä`Žyh´Ýû£àö@Þ8ÚýãE<ÃcÞÐç½?T"÷�3ŽöôBŸ# ® œåíÖªûmÍ µÉùóÚ|Ñ)¢e+ì$ÔÌ�½¨ÿÙgŸÓóÇŸÜrþ¹õ×ÒøLš4µì¯uæ™ç:>ÒŽÆç­·Þ.×]½ôê«ÿ G–“}9Ô“ŸËúœâø¡ýB²÷ÇuFm±Å.Úw¤ß[vÓ| ŸwI O>™·P_ë©§ž�?&Ôü!PÑa¢E¡Œ½vÒ‹Šé¤“N:é4gðÓFôÑA�>‡jœ,nŸÿE o¬¢¨òÝ?*ôØõ#y$ëÛs¥àO ‚¨'5„±nì <"$5�Ç D ÇE€>û#—¨5Ã�N @Ÿâ® È �³Èwùp‘A�jç•õ— ªZû„›eŒÛ‚\àgùÚ¯ªºŸxyÅÈéý{|üÑo<Ú-ûÑýæEgßGé#ò¸7|,ïý¡š¡‘õyx¹|ì}ŽzÉ”ÔHúñ…9sæ¼vÚy¿ô=ü ‚<‘\z ‚bdÑz€¹àÃÀ sý´:xêáÕ¿8îï¹ÁO‡ºÛõ<å슱—íãî÷1„Úwés;>Ü�¤ÏãÞ�J¹€pÈãà²@¨%7aìz¨‘Ǹ7Ê}à’û€’¼w®rh}0é_`e!±.L– Ò÷( \£ÞÈä  9ÆÁaäî�|#àq  ú»|àƒ<úÄ}Šô,>*@ ð5¹}P#2Ô‰{‚<àƒ>ïù±\ïÐWáYßDµ¯®N„Û'vù.Îc—�ˆ@�Ô?EVúhä±oÚÓ×9�ô°Þ §]@±ˆ�@ZCÚãšäïúF®ŸªÕëzÕ´¯}$×ÏjËÕ~*¡“Zí0d=²+H¤ðÇ$Ÿ[b{QU@Í-ß¾»Â™øÜvÛ]êr>F�G9<<øà#úbùÒ€ »îºL¨Óä¸ãOi€:¶ëÄOWG‡À†ÂsÿùÏ8cŠ¿È�ï/ Žþå=»A�íÂÕW߈ñhK A7ß|GÈ:½·ß{a?¯ŽÆ¡}>y¦Ô/Þ’Î=wšÂ¶¬ß¯»ív€î2Ç[øë_ÿVáóÓ¨:ù}á}œ:àgͺ:àÐØ¿€–~T%ª}* 9ô�h‚è§éÅÈtÒI'�tûÈÓJ Ï‹…�üH„èÎ×Ù=8€<è±£ß0Žú} ø 'ØC²Ú>èeA?G¤{ DðÇjvû v �ÊéŠá�E=œË�å@Påq3T­7úywè×9ßEúMÕº£®«~é xi¤Ño–[Tñ¨7Î-šxÄî~,ªÐWèãÁíüá@}$·¨RpÃî �–Çð‡ I{è{#߸f$ð'9€’’’i�?ò p‡"ßû#à»Ç`(†=!éQn5€CôáòqîèÞuYM€Çjrþ0øYr@�³ ˆÅ£à�3 òG¾Y­}‘E÷&µFô4¢VeíýA ñè71èÑš�Ýð”€?¨}ÄNÍ|,j�]?žË‡àD5Àœ>}D\› Y?ÚÿÀ1ø)¦¶Ù ¦CíÕ9_ÐZ ÏNk»É�5+úˆ;þ 3 TßAâO%¶N¨¹ h¯½ óæ}¼óÎ;ïê°Ë.»:Üyç½áÙg_üIáþÃ?Zú^°W×O¹ç•WþÖ^gk—ýé�!ñHÝ'‹B¥±cÏhõ¦ûlî½÷AM'ÎíË÷x‰ £Žèð¿Ã…•‚-ïÜxãíe}ž™³® tø÷«—[n½SAŽü7˜Æû®r ùóç«[hÁ‚ÁŽþ»|ë­·Ãý÷ÿ]÷# XÒÑ~pJñè7�z µ,ÔY4Mô�(äÐ{¢Á¢ÖéÅÉtÒI'�t—ëg5Q?ƒ=‡rÄ~uÑAÙñÈs9‚ÐCtîáö�3N C1ì!¡Ç2O}‚ÌíƒÝ>èÅ{€ÜÑoˆðXMΫ‘›ØÙ£w¥wñ(8Í@äìü!DjäøÑZsë¡�:Ú$pfß¶[�›RÓqÈÜÜ{~ºŽx¤Õàó/€‘€ @èÛ@OiøÃ5ƒ v!2äÑ1ô‰á�z–@púúòGÂù»€Èåãƒ_@'¤¶“’’ò õS�sì@š{Ñ"ìþ!Ø“Y«0ú�\?’#rŸ`�Ë©Vèð‡sD€Š�õ"ÁõC9A ÏÄ}€íѸ7IôñÜ@¼ˆ¡;ƒ(¢OêF@¨(ü�àüq¢åA*Ü9`5� =”"À�õb(9à‡ÇO¡¦€ƾþ@~i­`ÇîY4µîUÿËškÏ7ÏW¹Þ¨³BíÝíÖ¬Û g8@�E‚BÖƒê,ªL¨9 èØ7¼ûî{a!ŽŽ€mH÷Èä@y6þ´³Â_|ò`§Éc�ýƒî:¸Vûž®¼òúPÆÑ1l©ûÈ#³— ˜4Q_…è¨3j>¯2ï~øÐ²?×ĉçÊä>k=ô(\G.âÿ†FŒ#¿G¾ 圗^z%˜‹. – ‚6aÊIi=)ê™^¤L'�tÒI§)ÁÏò“oÙEâaœ?®ÌáÃΟ¸ü!xD=?úŠwY$Øã×Éä�|óG¿!¿f Ý£&ðÇ�ÕÈÐãEä,ƒ=”ÓH8‰Y. Äl�‚|ðãäÜô�+¨Íž“�«ùÙ°—s�{ë\ÿz›�'žT€<Iæüñ"rŒƒ£; YMb´GÑ1pÑ£{V ~¬Fü‰wYΈAˆ´ˆvþÄ. ¢{€ä> ¤¤¤2@€?ÙãàÖ§\øÃ»€àø�¤Ï ‡D®rùãàPòØ�åö ïâÈëE Çz´óÇT¨É „È#9"ƽÙ=èÃ=vø0‚À. †AxâqpšC¸#7�åNÝ•j œFøPí¹€üœA”ØÑÜD0ˆwä±ÚÿƵßü1 Ãcà îØóÅ��բʽ‡ý¬zåÚcü¼—Ó¡ýbõjµ}øØ1™ãµæA † ¢š€šÂŽÝ_’÷…î—_þg¨¯�åøKâ_ïõ×ß^xáeÝ{ƒƒ‘o“Ϻ té²Iácžb÷�ŽÍµ;w ÙI'MÐ݉¥ÎÃϦqâ2Y2R@Ÿ��òŸÏ¿/*þ½¥õŠ�zè}¹Ú®÷^êN+u0Þïsu!m½õø<Å�þ;¶¾înzôÑ�›Ë;sç~Î9çâ°êª›6|\@-õ`?ÐÞ¢7ËAWŠ~ž^´L'�tÒIg¡�@Ÿ*�==èüÉÀTÔ„Á�9€ Bnm®Íy|¬¶ÜúØùƒ;ƒ;I~¼ˆÁ�¨yì{ ? ê FÏúpû°ëϡȣ9"@NQøƒ^,Œƒã@ìú1Àï2à�ƒkuÄE‡V¯~ü½y­Ð5+ÔÍk·ÙØ‹*N¾¬_aœ›|.À!rûh„ó‡¡+kï�W»n sÿ˜ÐË>*ôyü›¿‘ûØûãB»#Q/üàŽFÀ©JJJ*×DòGÁ­Ï¹Õ@œ>�àü9Ms{&ó&¢€D ˆƒë‘#ˆ�¿ˆ# _Øý#ÐÇz&ÀÔ$éäÑh"ècBÝ-ŽÈYÚ÷wÿ@ ƒìøêê÷Fiß"@O´È`OÉp¼¹ëøÁH8@p¡ç«‹9°Hj#áôXŽ(ô!é�WªêZ×G€Î 9÷ü¼_½Rmmå^ÃV6ø >�4ŠbTßuýòÔ·M¨i%Ð@� &ÝÓƒûò@�|¬‘Ù³ŸT8óöÛï y©a¾‚–:¶èÞ%ôk9âˆa¸w${éysÙ”%�Fô9h?¿kzõê«Î”?î> sïa¼¨oßq_äû2~üdÿ6{ö £È*Èîý5o»ížøZ¦-¶ØEïDú}—Þâaö5¡e—[o‘?¯¸¤èsÂ5µðZc�-õû"ÀO¾öÚë ÀQAÎM7Ý®û�† •È(è²_ŸBÕè^wM»ä2…dAŠKKÿ�Ž3QTöl@?ô#щ¢\ŽZ{î$Ñ2éEÌtÒI'�tÊqüTŠÖ txøh4M²Ú úpû8ûœ‘o*@Hz$Þýèã»LäòQi-¸8Çùcrœ@�õ©G#ßzÐiÎ(k�xP;òÐþ…ø£òGÁ ‚hœÊzÅ�>,÷6zVÿª Oº¼¦}ÝW9_LXPµÖ ·VÖMäÀªãQoˆ"ôÑ#1øÉ‡ÎœŠkì²H�¨Ð!$wpùÌ1ׄ‘pìòaTúPßjA¨Õý“FÀ%%%-ì UN¤@'Þ „¾�îW?¨5èò " ÉztÏ»l�õ|hì›—« 1äQYN=û†Ü"� A rû𸷸‡»€Øñƒœvû¸=€‚A�bg�Õ=àC ‹*{ÆD{€b÷õŠŽ}ãQo\3ø1ÙóD¨!Cpý´[{Èæ2Âí®œ?«Í—Ñp“Zo[ßMaŽH?—æÃôXPh€Öäö±Úu üé€ý@C['”´4jΜ7 pJß—¤%ô= ÎÑ¢�SoŠöU¦5ÓI'�t¾ÿÿ‰·­/ÚCT/š(:KtŽèLÑPQQOÑ�¿×Ï*¢½+ÎðèÃ2wÕiÁÁäì¢>” ‚àâ· �ÖšCv»}È%d°²€�‰ò@ÚÇ^ ?1ü±HàÇsýh Çêx�ˆr»ð1wõ£qoÒÓˆ¾ {�Ãý£{~z�?½fÅ!ïäÞóóóáO¶ÞÿœZËŠv™ã'–ôU|¡VEî¨è1¨#9úEw±û'ïþŠÒ��AܹRxc�=Ëã}?€A>$ô©6ŵãöáÚz<êÍrÔ”S‚ú¨¬† ˆïÙd (Þù#§^`Î3¹÷ütª«íö§���> €Póà @€?ipç@ ‹Yr�ïü�úð §:¹qÐ'v±},ç]?vG.ëS5 Éqÿ Qp­zö™þâ’””Tö ‰*vü 7îèGÜü¡¨‡¨€Bp‡ïùŽøƒ¨Â=D Ç‡=þÝýpÈ ò Ç£àbøðƒž)†<Öë!oä›Á rü gý"ãßâÈ9‹F¿¡G. 7ÆðG…œkvyà‡€�Jr“ÁDÏØG¾7úbèc1‚>Ò×Zú­vúóêε'Š›g^®ŸÕÚ×>VµzÝ {HÃM”¯ùàÇz¨cð'Ð ¢¦örW�PRóÆÍ‘÷Nú¾$%%¿‘|°(×¾=¥‰¨súN:é,þÿIטËç-Qh½/:]Ô© ?múl&:Td�p'Kþ3€C<€?èɽãðÁ}øÃ;�<Ä. †@¾ˆd=ýÆÏ°ˆÝ?‹špïöP¿˜û¹» È �ë¢]?ÅÐ~ìòÑËÀOeÝ%W­yÂ_jtæ{1¡î‹v�<£âÄYû€EÈ�?R#ª"ƒ¾s@�Ù Äãà ýÆðð˜7É�¨Ï B W÷AÔ™Ž®1NFÀ%”””TbçO!ä›ë ²]?4þ »€xÿ�FþH®ÑjAxpï¾SࣵDôx(·è ÷pùð=Á Ñ¡þ> o$œ>›ýÑo¸£>�vÓqoÖqµã²rÇÀiNp'þ@èa×,ùÆêb@5C‰�öHÜ3ðC²¹€X#¡ŽF½Ù�æý‡¯\Ý¥v°ìùùOžŸÕä¹×ž¯è?l¥ü>¶?H�Žíú�+(ýf9êŒ{ƒ>ƒ8Ö/'j›PRsÖÌYWúë_ÿ–¾/II y¯1þT4Aô�(äЧ6e¨*}÷ÒI'�tÏÿ˜ûŠ^…Å ¯DSDq×Ï|Âá#Q!�Éú±+(vûhÏjÀ­5·Qî ú@E�?ÝQo&A–«l×O4þMŸa×O¬B�å zàü!У²Zå!“ D}†àrDˆ�Ü›³0ˆ]?*rùû€}¸Î–�ýVp�tYÿv›Ž½´f…ºÏrÎŽÿ®ú×#ÿÚêÈ VØ#ŸK£ °‡Å�9FÁAÒ÷" Ž ùÂÈ7Ö…{I?¸g$‘„\@A–£–HÎoô›ïbY?íJJJZäÈ…@ˆ"îÓÈ7’Á‹ëž£@pø¨h\œ‚¨ç80ú 20D�ÇäËÝÄ ®DUàq¥p‚ÛÇÉý}?š[TÑ3>¼ûÎAÙÈrD:™;�ìЇå�|#�~ØíÃûH4Ž œ>�õèŽA�ÔÈ=dÀ§ ©«~U·Cƒ“'çÏjóB N!…;"…:}hÿà�ÖpùЇ�réK4­`wš›~,u«€’š›VëºYøôÓÏÕÕ�Jß›¤¤€Š½Þ¸ºèfQÈ©‰vMû�ÒI'�tšîÄÝE÷‹ÂÐ'¢ZQÛ2ǽuí):‚àŽæVS„ë¹?þÍÛ÷C ˆ\AÒ·Zc AÞ¾ê«{¬FßA¶ç9Áø8}†C@ˆí¦5'€¡LôÉ1 Ñú™€â{V?/wöýˆ€Úì8ñ”šÎõoäÞó³Ê°Zï5yAÉU=¾lÔ›åˆ oà‚0"9C‚?xü‘oÖgðƒ¼è8Ôˆ–ÃôG«ˆÐS @�ô�â±p¥ƒž¸—PRRÒ¢ïb÷OiÄ£àÐYN. 7ÎÓºpþ8ãáÈìA�?€;Ѿ�5vOŽúˆÐ#ç�EÔÞ8ÔŽ3HÈ£µ |¨&¹N ?€:Ö§ñn,†<~MŽuõ@>‚«Çí¡fÙˆ7€¡‘,À Ô¶ÿÇb¦=úÜ‘œÇ½qîÃÞÔvÃú k:Ô^›ógµ²hZ›Íë×&Ѓ0Èzz¤çŒ~ó��Dô¢çø­`Ñ Ð‘‚ Qe@IÍAk¬±exöÙþÌ›÷iè¼ÒFéû“””Pž×{‹^…œº[´vúÎ¥“N:é,äipãˆ.´½=a ëeÑŽ¥ÁÏ­ËäéUpøœw� ëè™ä�z#à)ìA׉÷1¢;úpχ@T‹2áïBÄw¼óÀGEÀÇjÚñ£¹×³Za�Üû#àsàþQ9ð5\?�Ôž3HD�GkwÏ�?ÎÔzðÔc«»Žx<÷žŸŽCÞo»õ¸3Æì1ðc"È3Žëörí÷�œÚqøx=ÔÀÆÀìQá5=㻀!‚=VèÙ�Ç¿qž5ÎsþÄ9íúaࣵFë¥pIIIeï‚|1ð1)бœwñø7‚?<N¥�}­1îŠ�;î�`�=£u ùãàØõãw?z<ð#²ž�vAöœëB�»‚PðÑ<ϾÔ,8~D)wFÀeÊ>|Áíƒ(à±\#»� ôüp€Ï�*Þû£õDrñH¸Ö½êY³bí$qóÌÏõ³Ú µwµ[«ns…8>ú�Èåã:€X~Ÿ]@"º Ò¨½¨]@Iß—~ñËÍé§N o¾ùVˆÏˆcÒ÷()) r^‹l+:²Œ}ã Dg‹Ú§ï^:餓Nyÿ³­37Nøžu»h�ŠøL¹µµžßˆVÐc°G£Á€ À!ÀÞ ÄÈ"„ç$9�#Ük,= î@ë!� Ä;€b„¾3Hc4.cÜÛ5ˆöŒÖEå�ƒ‹]?1ð!Ù� HÁŽ~TÚ#ðð‡kD?•ç®ZgÔMòb·9gÇϯÚàÄ«*FÎ<ÀÀ�9~xßån ¸øA®µ·ëÇ€O qà‡¢ˆÝ?jÐ+±ˆ÷±|$WÑX7©%G´gU4€Çî þ˜’())iо€�óÞÔä1ÁDb×Ã@ŸØ„;‰¾¨q$÷�Éà r€}–ÅãÞP3²HŠ]?ä"øã�‚c( (äAô¨Ïcß,ÆÀ=`�w,wÆÂq0ȇ>\S^\þˆ¸ìÑo«î�0ò�zpA ô>û†{ô Uî;¢KõÏjëj°XºÔÏj/Tu­ë«®!;ˆ"Çİg8©5·�‡cn)‚àþ)ä �4öÒ^òeEmJjJíµ×Aaêù—’.¾xV¸öÚ›Ã=÷Üžxâ™ðÕWóƒwî¼óÞô=LJJha_›ì :·Œ7¥(:\Ô&}÷ÒI'�tŠœ×�èQhFúF4I´œ�{ë&ê_¡pçV‚?"‰<ê-[ìüAñ(8ÒdWl�…г~ìú¡ö!�>Cµ},2ôÁ=‰wñ 8€4º#àÌh_�PÄâqo9àÄ.í!þ!§ÚzæüñÝ?c/ï×®ç©ç×t’ŒVw;î�V‡^p˜ìúÉp!§èŽ~3á}ô2¡òœêã8�x"$µå<ò�{p± ìè}4öÍžÑ=€"¸}¦+èñœ@äBŽh@¨9 vË­~úÛ Â�~±^hS•þ•”Ôü@�ãr!”=N{ñÈ7äpú˜ ð@æúø1à±jé=;xô›Å¡Vú ' ƒHâqo}(yÐð È˹ø±â]@¶ï=A”C~\У=@ÍyÜš�íù�²¡�ƒ+È•Wr�ý?Lb·×È%Vý²n/:/æÜóó^õʵµ•û _…Ý>�|:!GÏƽÅu)ÄãßPø�ûÇ¢Èj•€ Ñ2¢V %5…N:iB(÷|÷ÝwaÆŒ+²˭—¾‡II -êë”ëŠî…œz^´múÎ¥“N:éD§Áe#ºCš�ðî¼Ûm63o:‚`à\?‚ØñÁÄÈ"FÀò„1pèñaC rFÀaÏ ƒ=èèay»€ úàÀ@ÎÍ#àãö¬6Y æð®çAœã>‚>.ü‘H£Þ µÙ}Òèš•‡þ;ïïUyö_mö˜4J�Éà�íûÑ\û> ʇíûÁH8úØÕš»û|üñö±b)ô ¢Z"Áˆ@T#ϱ}Àä�õGOÛYs‰Kz\UÇuÂÊGnV¿tËÐýÙ^a³;†ßUøÍûÛ‡µîØ:¬:vó°Ü–¤¿P%%5_ðCÔësµæ¨ÉD ‡jA¦Æ ‡î¢ÑoÙ "è#*Ô‘Ó¾ ?îÈ788²Û€Èù†õÍáãíÒ;»w õ}Ø D#ߤOàGÅ€'ç> !Ç. ˈxP9{â<=RCƒT‘»GïØ¤¹Õä ‚h9�,Ǩ7»k·î�-F¸å?óFõî5tuÚDâ}?�Tš[÷äÒHðG…µH �$²ûª7: Aõ5 %-ªþtÈ�²ÀÏ /¼Ž8bXúÞ%%%Ô”¯YVŠv½& 9u£¨[úN:é¢âªMaœU3WÍφý·ÍÞç�¥�Ç�@ê "\AI „H;‚4âÎ?=Z#÷ƽÅàbèC=«5šPg ½#èã w �0ô�#ˆ �ÈjŽçíòöö�óÇjÜÅ€ÈùF=wjoô[«Ã.<¢ºÛñåþ½Ù¡îcq �×àjäúAN ˆ`�Õþ¸lt™ëúѵåìúɽ÷‡sU´ûÊØ÷cyÏ„;€ ©M‡È®ŸUÙÀwæøAÍwRÔ³ÿ@+üaðÑ{+ìÉ£nS{†ªöë,ò×]±S�°òÏ~:tl¨4`À‘á�CëÃÆï u –¾ËU¾w±´ß”ŸoùöÝÓ_ —>ÄàLJ=;Ü'×�ö�k?†AÈÙ¤@{€e‰î òp$Ø#ÏSm1ÎúøN ú° ˆ �Ðsöþd�„‹#  ƒ@ÔÏýFw;Eåîý¡ÇÝ—g Ç¢ ®ä1øA�ACЏC Ð#=�*BìøiÓsè:5k/Ñùÿ¹~V«½¶m�!=ò˜Ë‡G¿eïý1Àù�!ù¦‘?¦R0èÉìÛ�ƒ3è#ÒžÉêå$¶M(iaµãNý‚w¾ùæ›ðÞ{_þgxøáÙaÒ¤©a“MwLß³¤¤€çk˜Õ¢á¢ÏE!‡¾�ý$}÷ÒI'�âÿ4[‹} K£ªWùT«cfŽb÷O<þ =êC~TècßƼeº�ø8ÂÀ�{àüAŸ¡�Â{FséáŽä |�çû&‚ˆ ‘ˆ > î‰Ðçà9@�Fú Vuýðiä¬AUÝO¼F\g_ç|'é7U뎾Aö ò]?q;~ìËyJ`‡F¾ü!ÇçîÔ"×òürGÁ!² Ï™0òMb<æMŸ1§Eõ–¹ûõn¨ƒ¼qp�Ô€–ĸªÖ Ý.ÚÒ…<ÎéÖ¹+Õ†¯÷úÿ÷¯õËÿ¾Ç"}ý§Ÿ~.4œë¯¿EëE”¾0ÐpN>y‚Ö-YÇ;2xçÛo¿ o¿ýnxê©gÃí·ßΚr�.K.õùN9åÌ�u>ûì3]´üä“Ï„ÓNŸ~õëžMöÏÑmõ-škmªkÖNQo”½ÿ‡kŒwÓ;öÿÐsÿ†\c¬‚óGàS6øawF¿Q­÷Þ8íù‰kÎþX5÷‚ #ßLè9îŸâê÷â8{€D¨õÎ�}³Ú�¬®×ðA/‡û‡�~¼ño€AÞîŸÒîˆvû¨´g±ÕnÃV«^©vŒü öi®ŸÕÚ×>Zõ«º<—rS…\»ƒ¤G‘v¡'Âx8ËYu<ç�Ý9b7�ôhvýDÔ: ¤…yCʆö&­±Æ–é焤¤€¾Ï×4WM…œzG4@Ô*}÷ÒI'�Êÿ(·=# K­0 Çþ¥bìµÇ\@y™PsÎè�â®Àr I;òˆÇÀñx7­!Ü™ëÇÙÿÓ(�• J€¸ƒ·�ÊzPôŒ‚€ Èjƒh'9|´Ç{ôã4Zm}Gk{=ñé�E‚@îN ËYpô4Ê©ÆX8Ï &åph/@P7äpùàAäÜ}& ðøýQ4ö =‘Õ;Ξ×ÄÐû€$Z‘!�Ë üØ3‚(Ï/Ú 4pÄ*Õ?¯;Xþ0'çß^—çW0\�C1ø‰…>ž!Ç�ŠG¿™ô¹Ê`ÀOì èñaíü¡OŸ}ä^"îÉúËH¬L()))) ðúæÆ¢GD!§ý6}çÒI'�–ü?Æ®¢ëD¡¥I^°ÿ¤ívg̨8óf@ƒzy(GMÏØàAÔ÷~Ðà¡è�~ƒØ d*vG®ŸÅnîä!„Áõw�ˆG¼Az§‘!�·9DÀ‡rªÑ�A�Ý3bµÞgÊñÕ« {1÷ï¹ÎõsÚì4q¬ArøP¤ˆÀPàá>�}sÀjÇåãFC» £}Dœ?‘£.âüᜅqpØä��à™YÍ ß%ıq.#àŽ_Œ!€ó§lÄÚäÓÂ�~¹^³@#FŒ cÇž¶ÝvÏZæ'ëë+äùÃö Çs|8÷ÜiA¡˜�>˜zöÜ5™Û'~'nïí÷#ŽfκJaRÃùâ‹/Â6¿ïƒgóIÝCòy ü°.¿üšô—õÅè"1àáñpm}°ˆ@�ô‚0âM%5rõ©&”é2ˆ£pÇ©5ŠØãïBí�€c ƒõšt�Èn ©iœErþXÝpG‘Èc9Ay†îyäC ‹€;ˆ;|Pãà±˜Ø è“c/P—B"ïûÑ^òs€‹U¿²£8yfçtg*¡[í:lUî( Bí;}Lnm‘wý@þ88Ô,†>œ³#ˆ?àð1ÀcÏiM¨nyäCòª€’’’’j¯u¶õ½% 9u¹h•ôÝK'�tZÒÿ —�"úJZ²ª» ­õþœ® ‡ �Õ¾ó‡£åv´&çj(=ÖÏíúɆ?§*Œ~CmQ„ZNÇÏ ¿f9. ÁT›òôð ëCpQ/ªáüaÀcÑÉáB‘œ@„Z3íÐê_�¼W^(ø.× +Ô}Ön³±—Tœ|yì÷ñ!�F}5íü‰úÐã»~°ïÏÒ¾ŠP)0ÄЇ�å{htÀ×>ÚC޾�!�qÎЇÐc�LJ>E ÏnYîòÅîZaÇ qAëܳMhSµH(ý%mÑ�«Î+m¦L¹0|þùúìsϽ¨P§4òµçžƒC°sÆçZ?¿Æ�›¬°ç¶ÛîÒ† zlVëºYØ{Ÿƒö7¥·M €àêïBMމ*@‚@< .ó¦÷!ë‹w,WáŽîKìâ‘oˆÈ!€ Ž��…“Ù�Á ¸‚€¼šO†¼@ˆ”ws!�õƒºËpy‚óÇ@Îþ€†CqOrœAÜË öX�>àOñ}@ wx Éži»QýÆ5r¿‰m�ìšÖ¦gý:püˆ$G ØñöINîvþÐ�7æMDˆá"’³ÐGj‹TÃDÎ o7�ÕPݲÛ&”””””P xíóÇ¢1¢ù¢�C_ˆF‰~”¾{餓ÎÒü?¿JQPðŒ¾«^sÔc­†^~œÂøpŸ÷ÿ bÑÜ=¨ ðhÎ#ßP{ôAεAj@ Ü[D~ à�Jk½—˜¡Aœ£føÃî Þ'�³=ÇéÑ]?g²;ìbÇOŽ@¨Oº|`»ßœ|YMûº/r¾“tAÕZ'ÜQY{ÉA u }!BNM99�,Ç ‰A €,äq÷¡‡œPžÑpîX8Ážœ£àØ d€Çz<N#A à1 $9F™ôŽ Ä=†B$Ú „@‹ U­¸NØè­í›A+±Éb@Ë·ïvÚy¿pÀGèÒߦ¶êª›†þýWÇ J¾�ÛÿÃÊ\> ‡Î;ì:¸Vÿyäs-F zbáù‹.šY>‚tÇPùóÎ{µÎ«-¶Ø¥àö‘~í-aßкënƒïy @yGÁ¡²(vþ �Ú`í â=@’ûàÇs )à�ü]?¸Ó:úøqûcőǼ©47¨ƒÜ‘9€4B´'H¥9jo4œ €Ç‡>!½ç^ zX]é@pú8=ô3ÇÀùãÞtP+¬ÑÀ‡�Ô}З<ÞûƒÜÛÿƒ~ëí†ýª¦SíY59_È©Y¡ö®vë ù�í ðAîŒzË„×�FÇŽ ‚:äBÑ€"� ú+� 1âX·¼ ù�å®U@IIII µ€×BW]- 95GÔWT™¾{餓ÎÒö?¼MD�ŠÂUòÂþüv›žzsŸëŽ27;€´ô1Á Ù»}üȽ3ö µ €âЃš¹|D<ê ýxç�Ê\BÔsÁ×$<íúa'Aõü8}Þûcu<ÎsúHÁŸ¶;LœPÓ©þíÜβŸ¶uÿs‡bÏ�Áù¼š»0ìñv¡ç�ž¸GÏì±(Bíô"·)†<ìøAmÎ> x†¨ÇðGE£Þ,Z®Ïòð½�Uäúq�A*®‹��#¡¿³Œ€[,hå£6¸iB´Ñ½RÐòÒK¯Ê.Þo3wîGaêÔKèÙ·Þz[÷àœxâéÔ¿ð }uÂH­;‚^yåŸaÁ‚{m¾ gŸ}QQ˜rÚéSÂþ3'üïÿ ÁÎûïÏ ç�7M�”€ý:G1Œ>N ƒ~î×^{=xçþûÿ¶üÝnM€Xúuäè?÷Æï°ÐèÕWÿ½PèðÇ*ü¹òÊëñk^‚š1ã ýúG}\K@=b‡»{ðƒ~yÈd5"ÆÀ¡6)ÔáñpL<ìúAÎ H„;rýPÎòa;} ­Ý½? �üå�@ýVÌ„îƒ8¨ú"§�)ÿ †C\3¢±pÞÎÔ�ôHæð‰Ÿ‹9{è�Ç�?±ú·jõ*uõ~ÞϹçç…ª_ÔõUGQ{('èƒ"ä�#¸CµF�SY Ø÷»~TÈ!…9ìöQɳÔÇž¸�Jô( j]½öÙéÚ¤¤¤¤€ZÈ뢿=- 9õ€hƒô�K'�t–†ÿÁ­,š)ÒqVIµA^èŸÛvÇIþÀåÃ천Bθ7vY�žD†=Èö w�ÐD†<"Cˆ€>pú@V;ðGe€Gûäòq@wb”_ ƒ{Ødчè«õç ­^uÄ3eüÞy§mï +N½b?"@ À •æ4ÎjÀ’��ªÜ;€ú’ (r úÀù»òxNŸØ!‡?ÇÐ'Îûpm2ˆƒ;‚?VsäñoV›èˆ4/îBÎÀ=‹®l œ8€NXX}ú–M € ê•×m*¤@å‚ ¦ Í_|žyæyýƒAáÑGÿAcûnõ§M»,Èѱc7Üx[vÞxã¿áá‡g ¸y§Ð›9óJû8¨CÇ ÂÍ7ßAð©áãž|ò&Ÿ9zÿá‡i~ÔQ#B ±‚�7ß|+ÌžýD¸ûî¿éNž`gΜ71šmñ u:éÁ¯±lÔ¥Ë&Ëæ9m95þ´³ÀHÓzÉÿåß¿~ýÝ÷Øb@ €�çQ6èc9Ã@ êx·�ÜYÄ‹�? {1 fµêùôV-€0[¨¹Ð�!csXqà ·4¶€“¹6ƒ>&Û}÷� €¾üòËÆ'H¿~»e~€rã�·áìÓO?…cg®sϽ$ü%—\!ÀÅ>/B%•f¡å[±~Ä#òÇ�rË ~<8�lÁ=Uñ±ýûï�»ˆ^zé~OTá÷râÄ3¿�0Ó§_ƒ|츓äº=ö„¹B3gÞ˜]sí ˜ÔeµMü<Öö; ÈÆŒ�Øè°‚³è¦›nË.¿âºì¬³/Ì–Y¶Wö‹_ì‹�eÏ›·Ÿ›ø0R:ëÇsÊj‘ªÃ�.�ø‘}x´ œˆÀ'�¨)äYQAŒ+ªPW0äêÔch_kávwIð3×ZÃ�Ñ~Ûá?<*Ì÷LÂ>–\[ÕýƒsŸâ™Â :€PGtE°Çj"?Ú{:‚YƒØþ�"òœð{ÏJJJJJè[|Ïô¦3LóLY Í1Õ›:¥W/­´ÒZ\þ"ÛÍôj‚<¥þÃøßšµŽýcÛQ× ËA�´|#ØiÛ·Àñ·‚#èQ¡NÈ  Qfþ@r …3uøgi ¥ð‡sL<âôÑ Ä¶p’‡-à4·�ËakîøA]÷È¡¯Ù¿ÓÆ'^Z·Tý¿KÏ�úé˜Ù펺ä0™ócÈ$QàO ‰ü8ðÎîþpDß!N~d_<šGnŸÝƒð:�˜ï.îžàšØ4]Z¾I;8œAtýøäðç¶§*Ï"è)г€Z¢\§tÏ6þ/`M¶ÁûÛd+Ÿ°ÑµÔn=s´Ô®=+^kÏ…ç\yÜÆÍ€àÖxýõ7qvË-·ó,Ry„uï½÷óŒ È|54ŒØgO•ÏåÁ P)Áýc Уå�¶o»óÎÙ!š7o^vÛmw‰|ðÏÙGsæd¶Ðþîž{îËÖX³oé�9óú›¾¨ ¦åpiĈãóº;uòvqݺmîÏE­Ú¹ŸO gÏ ÈĺjÏ=ÆsYË>äW_}}ñã 5Ÿ_/`ðW{ FÍœ_:ž�›ð¹ù58÷º½–ˆø92pÕ"-àŠb¨#u‚Â ä … ™¤s~L … q¹òÕ]��ƒ Fì!ÂiGÀÚԩþ¸~t6Ïx £ Š€‡{Bcu¥�W„<Õàóö@ØS1ì! àO¬þ¨ÆüH޽€ PÚê°ù°uê–2}‰²oÒYzÈõ׺>Á�9{°w àáüÖèøAÍ!�GuAs�¤ Dî €L{qÌ"Š@`NPC„|($(9€’’’’úŽÜ?]Ýt«)+©M;¤ù@i¥•Ö¢ü‹«‡éžv^>é´é¤™mN�u8�´…#øèñˆ3Àj„CÅTŒ”¸€ÄõÃè@Gaò¸õ#¤ ‡ð‡"ä @�¶z#¢ˆŽ¿ÎëââžÀGEȳ`øö@„BÅù?v:cbÝòÃþQÚ!¶âðçÚÿêìÑ>&ßü@ìA�ò\æý(ðA®Røƒœ€"ì�°§•ŸÿCñœ3L=Üü0‡Åb 8QÐî�5“»€üøžN î1îLÈCØ#×XÝ@Í€¾¿Éº¹[g½n ¸ÓZïpeÝþ¯os À[hõÖ§ÏÍ€àîé¾V¿:\Þÿ\g‘¼n!={n…Z¤��j*‚ãÅgµ4¼± j sŽ&ŸuaöÓÕ7+í:úõ! pü€†�ÚÎ;ïÏÙ@~;lh¶Ê*½Ñ®Îêö¹ÉsÚÇTr˜‚×bëmö„§¾~ê—^z®í±Î–4§�vê_|9ràžÏ„j<ƒ‹ÈrÑ^{ÿ:ó�#î £��úŒp+e×_svê©çÂ]fŽ ;‡Ž;îÔFÇ>—I“­àBË¿fvQÕÛ¾M"ðqèúÎû�<‡ŠN Èœ@~޼‚ˆ{‘€ ØD×;} ;¸Ñ:Å:�� ‡<”œô¨ˆÀÇs‡=êjR ¸Õ¢öo؇ˆ5ÖCøÃœ5@�`þ„\j ytCÉøP–«p.ó~WfË7Æv»ŽìR»|ý öæ¬ÿ”sgy¨fõ†íô(ø1�È=»~€âY?<Ï�žÓ 䀇uß;èÑp„4Çžb®{Bä,J{7Ï¥îó�Âpˆ¬:?Ý MJJJJè;p?µ¿éySVR·›ÖH¯\Zi¥ÕšQ-mšbšŸ`Îד‚·:ìzÎ9p9Òy@�}�ËÌß#Ê>P¥p |èðñºK[Àå¹Ifü8’vo<øÃÜ"¡O¬™9ì rÄÈùÃè{@Ö)½ÆDàSC¦vƒ/<¦¶Ë¨GJÿ ü¨áýŽ[L:Ûæü8è}¥í[�.äIpG�@RÇ�Hfÿú0_ðÌDî!º|¢9@Ѭ9?µ±†zK %VëÑ¢hµó7k4mÚÕ¨ÿõ¯Ï!o&„ù;¨ÅÂl8q®¡ÇÚ‰•ù\J �©ˆÐ¸þüçÇ[ÁÍ#_� @²ƒÉuÈ¡C³ÑcNÌÎ<ó¸§>ûì³|~Rß¾»”ý¸h³æ@ÄÁ �<³fýõ‘#' æ‚CÇÁ�À-¨x)¶SË‹©[Ë;ÔÙvŽ:ÿü©8c >y�qÆÙP|½¬]uÕ̬ëO6è5eÊtœ]tÑeŽìºüqÛlû«fwäN <²FØ#n uˆ5º~Üá#íß‚ù?~¦-Þty�¢#ˆ{€FCkjTTÖ¤q¢Ìÿ�@©YÑå#n ƪêJDøSVy´ÖYÏéüÑšB QP‹fEòk$wÐÑ$`(nõæñÀQ+×®RˆÍùùg™ßÓ캿ÛõµÙ$Àg1*ø¡üD"¢¼¹~4�Û½Ñ ¤À¹G=qû7™ÿžAêbÛ7Ï ¨4()))) ïø½Õަ£M™²šošlúazõÒJ+­–üË©ƒÿåô¯ošWµ]F?Ýî7ÓŽÍ¡Oì  ?.æl8�$šðx{J‘ÌýA�0 æÿðl`Tz A2ˆ{Aˆ%@Pä*B�œÿÓvÔåƒkz{“Ý(˜Wò†Âç5ëw}›1W Tàƒ¨¹Î‚"8$±²èŠ€jÌ]âüaM€�*A¡ˆà‘Š�AÁ¬Ÿ Å@Hë&º ÉÎà>b]A�0©ð¸3È?·v�u‚=”9¾ø¹4'RÈÓ‹y…Âä9ðaîíÞBÄ™?Ì {47Ùž‘€‡{‰:ˆp�‘?ŒT)ø£NÖØâMò‚¤~¨ ætAâ ä×D³8÷’½¶…‹A‘ ÐýCÐC�g æþˆ °‡ûÊÊá÷r*˜DøcªéÖ°ƒ9y-Ù¶yNí õǵÝmĪzÔýã9ë¼NÁkêb4INI«7ϥ氨·{S÷�Ã(ª[ÀA¨1ÚÀ¹è âì© P@IIII }ïµþÈ4Åô¥)+¡÷M‡˜:¤W/­´Òjî¿�¶5=›`M ˆ@`~MÏãîj{ìuÇ"葘ƒë�4BÈòH^!.öpÏVoP €tær‚œ¨å›œ±ý¥-ázP'ð� ÒH­IíßÔéã5Îú™hs~~vÒsò”£µ]Gÿ©Ý!Utü찊װõöœûýçQóòœ È÷vB7ÁE„\Ãzàø ÷„=„?ÜCÈE1äA {FÀ?ã5¬3Òý# ÇjÌQƒä:qÿ°!HrÊ`P3«ûí[ÖTÓO.Û$@]§mRê1ÿoݞ̀žxâ)Ô š=óÌó €{ìIÔl¦ òJzÿý#§Ç³Ï¾ °çí·ß\2÷^‡Ö@æ¼A+»Æuúéç5AG5*ó…ÙIÕ®gË4ÎýqqŽOT‘ë͵ƒ¼ ôxà‘Ò2®ð<¹~¸dÏ|6Ï.»€ZzF�>QêæÚB}øðã¢v€8«"üœ47ÊuÌ©½B'P¬uÂ\Ý@ˆâRàã¹G‡>Ä8�z\̱ý[{*ÎÿáuÝ*ƒ!=Øã—�  ‡ç †@²'èéÍ ÒsAœDΟ(G¤P¸ã{…?Ò.vÑõ£ûü J;8‚qþþ…ë:n4¬·Íî™Uò÷´y6hj‡Ÿ [ ðH]?ÚòÍ!gÿpO(ä±èøñœµ¸%\Xè ?&©;Â9÷¢°í�÷¨ËŒqÿPù5AOEPj—””””Ðwü¾kOÓ½¦¬¤ž2õK¯\Zi¥ÕýÔtk4­§º¥þÝ©ß)WL9Œó<†âáNE×úÄíà¢\œ?}˜«ë" ?±èöñHÐãBîàˆà‡s€bØC@Äš y�X“}‡=Î>®îÇÃ_.ý½]aØ«v›|<`�Á£"ØñÚ—¡ÜáCØCdDàƒ\$(nýÆH©#È÷€?ˆº�Ý@êúÑ=¤­ß$šôð'Ï„¨]$§³‡³€˜ËœÄ`ö÷ ‡Šp'AqK8¶€ÛÿXõÄMZõþ¤Öq‰îÍ€ì†<êüãŸ9ºóÎÙ¨=ðÀÃ^ 3oÞ<@¦ 7Ü.{÷Ý÷Pê©gÐN­0×ó`ZÁ�â n›& ̲ñ…¯GÏcM˜p Ç)§œ#uB¨O:ù¬¬ÿ½)UÞ6nê¥Wâú††qÅ��ÙAQ{µíwµŸƒ6ê½}~fß«h>Î|L^[fÙ^¨™Àôuƙͪø5­±fßf@tý”ž¤õuüÀùÃ:@=Ì)i ç¹À móÔ©Ø!¤sT<£à*)m÷ÆH1¯ÚNE˜#0(V×\?Ì£º‚Ÿ®?ª"ð T„=á#${½NÅÖoˆ"žA€Ôø°\ûþ#Ö¨[nÈ9ææù¬ÜŒÎ!wtêѰ9À�ì |X#Rèãr $‘µ!Š¡÷�þüTlñÆ6p�æÚâ­sèc‘5C�Ø.vý°žPRRRR@éì�¶¦ÝL7e%uƒ©KzõÒJ+­¦ü¥ó}Óé¦/”Y42°ðÏ{�†´�C”œ-ÞŠÈcÑõS±Ì‚èöAN±Õ›\µ…ãžîì„´ý®‘3͹×vo |Šr§P)y»·v‡_rdíOÆÜ·Pï£N›M¼¨Í‰WïKÐSÁÝÃkŠ3~{T¬õÐùCèÃ:jªxP {)©Ñ!TÖ ¤ÒoŒþ˜Êíàè Š?#k¸`'8�µÎ$Æ Ü? ‚L-€~ð³^-€Ö¸©ž¿9ÐS¦¡þê«oÄù8@œã`äcÜø¯0ã&œ4yòÔ aÞOôØ+¯lAÄÙ3¹C饗^�ó¥©hãMvÌ|ÑSEç�75œósé¥W¡n_òj�ÍZ®áúý÷?ÜëT¿~»áÌ$pÅZ»¡võÕ×{�Ú}÷�y :¾&tLÙdI¾~«A={nåujÌØ‰8;看‘·¬€èü!Ôá^¥çtüp/ HÀ�@!�� µCøã‘{ÍEq‹¸"èÉÏÕ¤¹‹µ*-áX‡8(ž$Ž W%$ä:ç'Ïc@”ƒmµ€ë¬1†@²‡ÐSBtÅQ€�í£Vp„>Œ€CûŽ^µvÅúa殿¤ ÿ¯5]öÈ¡áçþH›7ž ÌÁY {äqýÄ-àâÙ?ÙêêRdµpÏkþàÌ¡NÐr—£:ƒ¢y?’äad-ÍJJJJJ(-¹'[gmúÄ”•Ðg¦Mÿ›^½´ÒJ«Ì_2íLƒMï&³xÈ@ã펾l´ÌðQ0DÐÃ(rXžÐõƒsßø@ {t÷ˆ„?†âvptûëz $ B=˜ù£Pˆmá˜S¬…-ᎽjPM¯ãfØ�‚ÏJö�ŸW³öø[ÚŽ¼lpú gŒA�¶†S÷µ·ìElùFÄ3‚ ø z^ …ŽäñÌŸ¨^%î^­¡£B…?RÓù?„:]?ÒîÍ��‰`‡À‡5‘@¡xP ~ZÎDu�²Y³ �>Ú.[¢s�æ@hß•ù:à€#%‚[ÇÛ¦Á¥bµHhå ›c„ÚþðòHÏ=÷B  ‚ w2Á¥´óÎû£ÞT4vÜI™/¶T«,ÀqÒ¸N=õ\ÔO8áô…@ãÇŸ\<Ç|ŸËƒ¹?^Çsëê�C‡âìÚkÿ¯b+·µ×Þ"¯ÿò—¡vë­w†¯ý¯iÀ¹ýL´:‚Š€‡ìA¬Ò޳ ž \¨¯Ìò¼w‚¼Ýϸ—9@¶gÍëEij úhÔA„?n N üí €ú°&�¹8¹Wà:‚d_Õäçîæa]Ay�@'pq�ŸBIë7ˆ×úYÍj ì÷´çJ‚Ÿw ÓfÀ¨U8+ÈâA!‚<×¹?„<̧�‚­U�DØ£Q[»aOÈŸ)äÙ_÷<'ìa®R8ÔàÒpñžPh1@p.o½žÙòo”u½`³lõk–­4¼O¶äÏ{e5K¯…k-ý£u³­·Ù²7,¤›ÛIåÄ7¼ µ²ý>–^�€ÒZ|ïÑþØt¹)+©7Mû™Ú¥W/­´ÒZÐ_,››žHÐeñSÝ’õ_Ô¬­mŽŸq„@:€ÐIMë„=# dâžÐG`�‚¡ªÎ�P<ÿ‡5 g3£¹@UÚÁé| ä© �tíþ·>åìºeJƒÑÚÎ#m?hJ�©ø‰÷lý&. ?«êŠ�æ.ž³-\¬xj� |ï'p é™iý&Ò¶n�ŸÅÈA�䨻üÈ™Îý�}PG.sòTwû5iû‰3€š_5K®•­÷÷mš -7hCš3×þ㯴”7¿ýíaË4{­PŸ5ë·p)ñŒíÖ¶Új�<Ÿ6íêÜ̓�ÍöoøÚ¼õš<ÇÅ_®ÐHçáÌnŠÈó™Ã(Ÿ t‹}î8ã÷›€'vƒÎ!Êž‹õšT@ zÔùã"Ü ö wq�œé¬ŸþİG��Ÿ8Baë·x6aOÅñÃ=¤³Xƒø£.ŸÀù)è‘kª» šÒóâ}0û‡Î<º�ÛÁQsXÀÑsB.Â:€DvÖi�a[Z ·Ù%ß 3×ZÃ�a-âVðqîDs(¶x �AÌüòÈÄHÉyøÃý2Ømá�û^ź!qú¨¼÷r@Ôv€< �h·€ûß5Öɺ߱EÖûÓþ¿éõüÖÙ2{oÐÔ�ƒ/Møwƒõ¦éç?ÿeæ‹-K¿�b{\ýT¯½öFöÈ#�c6£¹‹ù{YeáÍ!ÁóáwÇ_|¿wÚïò&™Pú; oσ7 •qcßpÃ-P™7¾|ï=²·ÞzÏÏÙ�M~7¶e¿¾�ÀH@i-þ÷k{›6eå„k{§W.­´ÒÂò¿HV1ÍH eñWÝ2CÿÕqëÓ¦iÛ7샶o1ÒÜ!O¼‡ò°°#"$B$ø±Æœ°'ÜòþX {=³ˆsD*pÿP„=ÅØ~ßóF×®4â™Òߣ冾Þq‡Ó'9øÙÏ£@ŸjÊA�ƒ9£(tñ\��@iùVa¶~Ó@ {îh¤æhmw9'‚ð8Rþ”Ý?"�ûc ?.¯G¹_Gȃ<AÜ#RëÂFásºé¦Û²Ç{2{ûíwpî-ìÐŽŽï@ÖСãE�¯çE]†9Hî†Â׺ÓNû•ú\Í=“‘õÖÛæ+×ßÔx€cðÀhÝ^[Ã-dß |­�+íùlÖ\<×\{j‘ÓÇZ±¡n­öpíW{ nœE„+{îypþ¸}÷=,[ƒmÑÂÍÜ=ùs^~ÅuÅ›(U[¼�uö…9X²��›Dös÷�)<¶eEУ9¥à‡9"j¾êüHüȺ(ü�ð½÷Þ¯ö&¸à}5¾' ¯'@ºË/¿6;üðᬫÊεÄó 26 ´ZºcÓ~îòÉJêrÓ�Ó«—VZßí¿<–0oú4Á•o– H¼Ü~¿)'y[8è&FAa�Ô ‚Äù#5Іmß✳‚ä0Ç¢‹°‡r×�´�‹ZÁÅÐGk®¶õÓ¯YcÜl{—è—å×Ü©÷ ÓÛÕþ=€ æ±à†¹HAÐÖ|°‡îx9{4šå¼„üøž1pÅóªÂ ælùÆ\�>ž *%‚Èj’Û¹¸|<ÇÞ#EÀƒë-òL�Aa;8…<]@[Qpîlôï횀jŒ"Í€({&\& XxÇf‹ `à�üS-ƒ@hÍòÙgŸÑí�s_y6_¸Áaï n*±¬n¾ùwY�u¶”ÇG¨ÜÂç ˆ>Wì æìP’óìšü:ßfä7‘�.?§¬–»ƒ Êóï²ër­»zpfŸêü˜¸‘4iÒä(²ÅŽ"Ê€“~MÜÿæ7ÃZõ"â>šûA‚"Jçÿ¨ãGriù&Їg2ó‡Q€�¡îŒ„=È)Foüú*ó€zXgN‡"u‚ìq¶}óÜ÷A›7î¡2³uÖ�аHÛ¼i®`Gj ƒ´FàýIœBç�FuÁÙã5qþø5ívÙµv…ú‰ö{Úʹé‡<Øi�†í~!Ê¡rm'€‡î—:�Š­âÔÝÃHàÃs“‚ 5wö СH!�Ö(æ"m§3€Øê�5BÆÈDðüõZÕ®uï–áï3½çn—-½×ºÐ²{…×lðî¶ÙÒ;­¿ÈP÷µúá�&À‰ï zöÙð;˜ àk×Ý̆ ;6;÷ÜK²{î¹oLñ…c UbtÿýáM&¼ Å\Ƙg8}ú5I¾ì�4)år>ù”³q½ýˆçÓsÕí·ß�e\úFš¸}.®{ýõ7󀾞ò7Yðµ�£»‡@Hœ=y B£háP€&\3Ð@ΕÖvï“’mDþ[³æØ;Û6L;ÇfY„°¯äÒ|Ź?Å3Ô£9@A9óG4‘uì«·{c49ÈAΨΠÈ÷‘#¨èüadMÚ½1—Ù?A;8ÙGíÞ¢9@éüÁž9d°Æ¡¤­àØò-pÿp¯. ÔúhÜÑÏx>~êŽlײúŸ®vCäž-üÕç¿ý³>ó\óûëÌŸ9Û5Íù£. ƒpð®Zi¥�pÞféÙ\ñŸòK.¹Bý›p#ßž³`ŠmƬŽV!¨Å‚+Ä®Ã�=S˜`°ÿù7~Izò›ƒ]ÏÇø™]‹w‰þóŸ¯DdÈß�h7rðqÏ8ã|ä�"h‚Ç„VjvSïJ4ð0Uâùà~ÑçÒç¼`Ê48cªº~âw°êœ�˜ÀÙeíÛàš¹ðÂéÙÈ‘¢›\€@‡6.{Íà ²×n%ƒ2p�_ÿýöû ®µÿüãõ�«ˆsòsk ‡ÏÅgùàùöÚû×È]xm­®íìâÙKøÙ6Ç §Ý´ÃÏÎF½·o�@ë<ìp§¤�G�@žçŠÛÀQ8ã>Ÿ¤ŽÛ¼yŽ¥à'‚@‹-á8ûG QØö-–ÌöÁž3€xF±œ8�,'ðá,;^ËsD挢ÐÄ:#AP÷�K® AÐ8F¯i®má "ìñZx¦Šç ½ríª ‡Ùüž×JÎùù[M熃Û8je@s!V”»|d�F>È v¼9ôaÔÖnÌY£bW�‚mùæb-„>ŒtöPÑ\ b8Atþ@Ò.€Bö­ €:Ö­™õxðçØ�zº]þ¦—ºÎÝQ‹Ôç³þÙÿ[g�¦ ÔŽª‰è©§ž©öû�»p°Ø*-@x3j±àþÍ|mþ³�y PÊ—8K¢ß]>üð_¸îoû¢ýnåç±^}õï¸nÆŒúšZáÇäoÄÙaÇ}šú;4õóÀìFky‹7X´,¢î½÷þ¼E-nð7m½Íž™/:Š+ Žtwu³®‚sºq}ôÑ<¯-8áy�ß·Ì×�ɳ`® ½±¯u9ôÖWÀT¿~»á W–[˜çˆ®ø²Ò7,åÏcߣ€ÒZ÷y·0=eÊJê^Ó:é•K+­oç_Ë™¦™¾LÐäÛ©ºå†½Ûq‡3/ˆÜ>;º—šCì?ñl º Τ jÒî�ÐGÎ숂ù>¼–gâ2µ?hÊðÚÎ#Ÿ\ˆYLïtÜæÔÉmNºn‰òÍr)àÑ(. *ðGsŠg>Aü‘¢8|йB…=•f©t$àGféÞAPƒ˜S„?²'ø!Øaî¢Ô ;€<Š«Ç®áž(†A1¢¨uUg-Ý–Úq½låñgkÌê›­vÁfÙòo”}¯WÏÆéf{,8RlÁ´Ê*½ÓkBe'�„Vj�1½T‹¶€ Z½…à×àL•ƒßKÝ�D7êˆg1 pO‡a�×|OÇ"rÖ¤\ÅöoT7ÝSsÔ „¨­Þx�æ: (lyN¨Ó•5º|€X…ˆ{j z�;ÔѺŸA"Ûº1Râð)殎ëc³{n,ù{Ú¼ºe‡Lí°Åðµ wD ‚ })Ô|/nDÔÅĨ HÀϤś¨{â™?.…Aˆ8÷UÕõÜ{‡8È= ÀCIû·X¸®u;æÜiD­88½&*8ì?ÊæJ-p¨–i…0H=ž³Æœ5‡HÜ>} ¸õUÈ ð‰Á@OìúQ§O¤þDHæüÐñ£9"»èòa.Q@¯Ð [Ã9ð!ú ì©ÚÎ[¿YìŒÜ"�ƒDw4G¤qo±òÜ:~Lí·¹fírõçÕ•ìqo�èŽNëýY~ò@ÜWnGà£à‡5¿.˜ýSÙéçED(4<¯É¼Ÿhö�_-ß ŠˆõyNØÓ nB¢)ôì‘ØÊ-àzü sšõù¢ö¿Ý×ù:7�­µ—Ììkl †ú¾.ºè²üúŸÿü—yÝÚŽÉs$AÝZµÊÜÁwß}ís 4ä�`�=…Ðã�õÜs/fÞ² PçÔSÏÍÏ $tV�;\àˆyá…—|¡MoË êì³/Êg-Š#¦<Ba_˜¤ç±vß}`æ ß§J.!›_$ß3k_]Ÿ?î¼ëž¯üÎ9yò”ü{úþûfO<ñÀœ/Ì"䄟1›q8g?söy½bàèo8ûV¶,äìLü.zÅ3�7MhŒçñ¶| ¥µ¨ïÿÐ4Ù„{\%ô‘éhSÇô꥕Ö7÷þΦ—ùN‰siÖ>öÞ¶£®"@G P ƒÄ D¸ƒ‘5iýA ŠÐGE·� ä]@�€Ë¥Õ[äúq·ö¯ØiÓ‰—Ö-]?§ô¼¥ŸŽùC»#§!.Ÿ|¯9"Uf�F‚ DÈ!÷¼u÷*™û“ç�´€Ã™äˆ€úˆî¨+H[ñf*7÷9]>¨qï°ÃkÅpGky�Úg®Bë7Ê€k¸NZÁ)Š�>Ì5F¹ÍÿqÐØtc{±Þm‹› ¾Ž>ztz] ºîºYøÏòþûž^�uøôà´�£îÛÃÑñƒä°‡{*>l÷æ5ÏqF;XóœR÷� gŒ~D¨q/s}|¯3�xƹ?!‚u™¤¶ 9@÷⢺º~ê"ØQ($ÀÇÄVp¨ ’ºB îù5‡tîö^ $ðG @ â¼DŠg ‚Ttö3BÔ Úe×°i>D­pDï& :Bà’è±%ù ~sÜflºé/Ê 8}¾hx>›S‡çòöWp~ØÂ¼«‰fϾ/¼�‡t<.ÄÈfbÆž�©[9üûï.$¸tZa& /|ýåçù<ÿüK¸Î\U õF ÷Þ{?³8S<_ƒmó××`j6ÿµßš#%€ƒ¹{kĈã‹muóç2gµ´étð1p¶èR”ƒ£?ÿùq´/ös´�³y…9ð³ßoQ¯.:ÔìsƒƒÈ¿ü<ØÌDÀ|,¾^øÙ°kñ5˜› µ8²ðø .¸4»òʘ×imúü<Ö—ìÙèžÃ,I›7й�7Þx~'Ÿu¡ü|ÚçŒÙŽúññùãÌ$Ÿ»AV<�ÎoâóÙÇÄŸlþ#ZýYW€€Òj�ûÁkšî0e%õœi»ôÊ¥•Ö7ëúZ¦ß'’T·TýÇ�6=éÚ6'ßp(à�ŸÈô Ž|PQÇ>hû8ªÁ=#ðQ؃Í‚fRÑŒ¯wØõ¬‰uËû{iGÕŠÃ_ìð«sÆéŒDÊÏà §4/‚QÑ Di+8…= Ï)Ÿ¨ý[ìâ>ÏÄ壮Ÿmß8Ñó@�èÂ>�P슡÷îú¡ó9¢ƒž ôìÑ=¢À ­•B~� äZ AÆ³Ï¾ÐØ"ï üàƒ3,o�1õÒ+Óëܱÿ|ãF–ÝH¯Ik¶€3ûux @!Rð!=¼†ó€ Ú0ü„HÀ®¡ëG!ĺ‚B!©±ëq+8q…îŸ ÌMz®×C‰èø‘µp��@ Í]„A?ÌE ‚"ð°–CDÖ qUrýĪéÚ°¯�ŸÊüŽf×½]»rý�6û�†{ ‡Ä¡óGö|]âö jtýÐíƒ÷&w!‡�S„?A�8~\zæÐ§Xw¨C0T„<^ó½¸{,G´÷ {´ œÃ!*lûæu¨€µ’hÉmÖk1ô“i›7q¾ËgŸ}†3»¡Í³På�º†T^8=óå°‰3o B¡~ò)g/¨½€D €ÊÞÒ’³]°Ü  8¢ì÷µ\Ö¾ °çí·ßÉ�\SÚ{Ý|óïr°R<›8ñLœY;½¼f€Ê]Zï>¸9thîØ²q6^{í œñºÊÀOîþZnùõùzé¥Wù(Ôžyæ9\cíäšä°¹ì²kТðò˯En‚nºé6̲��ÏuŠ?: ðÆÎ¡[o½3�»x-hjŸ® $?¿ùÍ0Ô®¹æ†èy™A�P+¶Üsσñ3€ÇPpÇ@J(­Ö¸7ÜÖ´ƒéESVR·šVO¯^Zi-Þ¸—4�gšŸàGä2àñ†��3ôèÞÁŽìö8ŠÀ�:‚x�×ò w¸CE5=lÿF$ðu™$0Èêí»¤¾¶ëè‡K¿f?jø ã'_ÐfÒuò˜{0‡ çý°¦ÀH]>~ÎÚÉAÈ ~(«Q51l+†?>ZÛC`k�¶‡‹�@•Eç�@Ô'Pñ¯®Ÿ]Y. ‡AêöQ§�ìM€t¯stÎ�Â]@îþI ÅRèÛ^\sç~†w“ZKˆô%-Òp€:�"G�ŠyTóy?2ûGkk3š)øqÙ¹DQàŠA$ÀÇ…œðŠrÕuýÄgãVpxp�¶ƒósºDêðÁ^OÅáÃóh&P ~Š{m‡½@î=gi=A�zÛÊZ¸Ý[Òéþ©µ†;£Ý/F­˜�uÄ=D‚î¡A‘û‡0ˆ.:€$—™? �üî (ræ¨ÑÁŽä!ôñܘã5Ù‹ ¹ïéü!ØQDùµ¦bË7䬵Šh¥Q}r`³Ñ'ÛeÍÙ6Ôïl“ ÚUº{=–Á"<_ϧ¶j*‚[Æœ5vS¿¹ÚyΨ~ù˃2_â 0gjÍœycy¤ti\'žxFË 3slÁ- ªëᇕÙKeuä‘#s§“�9³yNEØècðõvÜ'úù0`$0 î[˜Û#-îÔýw�-´û‹ÐÈQ'Tœqã ³ŠP/!ûÞæ0eÖ¬ßâûgP¯¥»oà’?ýôópn� ®#{ƒδÔùƒç°3€:û™ˆ9ãŒók€-k¬ÙWcNs8ªðy\{C6ø×õøY7ˆ†Ÿ_«ËïëÇ{ jçž{‰×è„3ƒ¬…êp:æ¡fÂë`Ž;¸øìóFÍÀj@iµæ½âN¦zÓœ²óM§›~�^½´ÒZü†}aú ÁޤJª]mô_Úv阰k>.¡xn�»~ØÎöZS÷� ß»‚Y@¡ö•@dû¶c¯<¤¦çq7Ú»D¿(ùnÒ/ìúYmÆ^ypÞ6Ž0BÍ´~“œ"à)çþ¡ö §ÜÜ FHÀ÷̵�j@ˆ&‰*­—Aêª{‚=‘ÎýÑy>Ü+ '�Kg¹�sæ„\£ÌüQüx�ç¬'Ðâ$Þ|9hÐÑ�µµ@K» ’^›¤ÅË„ƒŸôèü­»|ÖFNÇ�´‹[¿q¯¢ˆ0HAçýè9£‰1p®ŸnÑYèò¼èþ©. rqü`ﱌ‡Vƒt/pH`OT£:k…ÖŽOêæª)¸Œb½þú›tA¨[·Í+ýœäéÀ�Œ¯‹f9±Ï[   1øý¹On»í.i—f� uƒaòùš3 �‡³%éºå–Ûs÷¿¨›¸¼ðc5¶Ë£ð=´3Ÿ]Å׿ÿØ¿Úkp^³vލÌ7Wÿþ{ç·ëO6M(­Ö¾w¼¬ébÓ—¦¬„Þ3 6µO¯^Zi-ú?À[™žIp# *8æ฽íøk�ð£P’ù?<ÓY@zlPcNèS^?º¸ðÃy?²·ˆ|ÒŒ;nqÊsò|X�uýP£S(‡<œDùYîŸþTŸ¤íÞ€T8£Ô D„½:€—�@ ='üq±å#¡N¸n €É#øCðã5Ÿ¨ÝÏ{Ôñã{äÓôÄŽ ‚ž\„=¬ÓÄÇ©3‘ Ü?Rí˜@III €Ž9µ$(˜ýÜÐR¹»'‡@~(Ô×fû7PH Žì zT �¥5œ:~â¹?ŒZ/žöþ@¬G3‚ âœäÅëÌ}ï¹Ì"äQç�×%—šÌBÎH•@º'äážyXsÇO»ÝG¯^»Bý$só|\®­ñ�;uÚ�7À9üqâ`O÷£ƒ�E‰ÓGà"…\Ï ‡¤jtÿ¨ H÷�ÖØòMZÃ9"ì©ä¢â>�º‚sig‘!Èëá�Ä@­9¨Ç[¶‚þ§k�& ÷ßÿuk Ö\¨ ÄÉÛÎqÄä&´ ³7¯ DUЮ»ØØö-ºþú×ç²7ß| ód°ZáuÉ|�wRù@H€ÖÖW;eõÀg¶“¼Øæî,¯Q6{gO<ùt^ÛbËÝ3_˜)ƒºëž{îCÝ  ¥r€°U@h凚*Pgžyò¨q7MÑÕ†viv†CÖ®øsí�$@€%sðáZ mí ßÿ¾åê’K®(:ÙÞücÈÇ7·jÖ yð9ûL'¶ôçA[cÿs‘×8à8Ž\@«ó€ÒZT÷‘{™î3e%õ¤égé•K+­Eó¶«éæ4’š*#s:õ;å2ƒ4îRð£H÷�·v#Êu0ëtE­Þ¹×HÐ3P#Ý>gæ{›Ùslãìž…h‘÷÷ÆÙ@=3Ñö Ñaá£Ôµå­ Ð:óÀ´7öcq.P$Îûa.uä¦êH᥀'ÎYÔ‰ÛÁ ZP;8Ö}´Ýë¬IÌu<£ 0‡Ès‡:.œEç ‡æø g©#ˆmßTí6Ûotº±�””T ô‰Ï �?tùèܯôx„èúA-tühŒaöE؃#jܫʷ~Sö¸‚™?ˆ�ä*…?1ZÐ Ö‚µå£ÕU¬©ˆðÃâÌB„€¸Ï[¾4fÕÚU·7$½^ò�K¯ÖtiÔfà™$ðàÇsî™úh„~x­ïÝýƒ<@ªÐåÚ¶uc4i�ޝöð1¨¹°g¶€£8÷‡®Ö]À£î A¼&A �|DVk Ðjl–Ú•OØ(û~ß±6ë!�GÏU]¦lŒçÛðCƒ05¥[À‰‹Àgî %V3 8DJ ¿q>þüRQt3,aˆÿ3ÏûŠ3kçî´¡ËŸ¯ûZýg¦L™ŽÜEÈMøsR¸®}Ÿ”Ã!ƒTpYçVYK:œ�sb^³V}¨™ò9ZC‡ŽG^MÖR. ´õ| =Lÿ4e%5ôjzõÒJ«uþ�~Ïtªéó1’šCu?þ÷ö/²wÇ�×ÚuéQµ«�½¯¬¥µnéú9�6›8µÍÄëÒíJáA�º~¡Šn *†CÜÓõChÌþ!ÜQ·Åk˜Óõã{¯Û¾¡T„BêŠ]A„=„? v 䌔Öèü‘o²‡ÔùãQr¶ySd±z°gÉL a�×ÂVoZÛQÎ,7”ZÀ%%%- :€´FÈ£@H¡ä5=’ ô��þ¸u‹”×ca$Pˆ�'tUwÿø0g â ìuΣ‹.Dæz�Îý)æÜ³Fñšøè ÂÔ�»�ë¾³Hœ@�¸€ ¨fê´æÐ]ë–òxÉ9?Õ®X\Û=GwðQç$s Ô#—�À ¿–çá, ÖŠà'oí¦-áÂvo~V Q8Økû7©»ë‡ÀÇä{iû&{mû&¹:}bDð#3~°Ç5¬{DÝÁjØK‹8�?­€–´!`M5Ù\ŸþÔuî^ê1kݽEgÑu3iÒäV@sç ‚>øàÃ2n´ æÌ Å™Ï¬™tòY�@Za=÷Ü‹­€0÷ŀе k*Bk¸¦ÌÁ1wIîÚfÛ_I;6sG…�yì±'ågÄ^Cä6?¹| wÿg�—fá{Sbf�MeÁ SØÀ™¦ss(kã†32‚<Ôè¤ÁeÆÙ:�ù¼žh¦–9|p~ÕU3½¦Ðˆ­ù¨ë®›Õx†9F^ÃÞÛÒå5ûsƒš9�à¢T6¯( ´‡{ÌK˜Æ™>5e%4×4Áô?éÕK+­–ûƒù ÓÛ Z$µD[¸N½O¼¡Íi³QDÈ£N …>.îO“œ ÈÅ\4u;2¨‚àæøkî´Á„uKÖÏ-ySa~ÍÚãok;òŠCñx�?Ü ðA]kâ2aO€B¡"ô‘½K@�?Ìy†œŠ¡�ÀÈ÷xŠx‡�w¸ ¤®Ÿ°!�Uªœ¶„£ ˆò\>ù™ä¼NfARSÈã‘`H[Â… Hs…AZßÑ£´K-à’’’š€bè9~T¨Ñ„kúX¤&1:ðÑVpy�²Ìc)ä‰Ï"è@äp‡ÒÜAktú0î@Z§âöoÈc÷÷A©sT‹Ú¿‰ÈbÇ>Ã7³Ù=·”<\·ì�KÚo9¢  àåàÇ%Ni'ŸüpOÅšÌõ±šƒŸb¸"rø#{D:|(ԨФ-áŠÀ‡bŽÇ{ë·\!¢ó'Ïé à \Aýš¨å›Öþ´¦è{½z¶ê|Ê&M@hùÅ–m‹ñ±³gßWŠ(úÃÈçÒZoµ*Ú~‡?�ë®»îE­©hüø“3_hûUízýZ_ÈlaÌV[í�ý»ï¾GèÀ [hyfssh×.»à×PÓ¦]�³gžy®©kíµ·¨8ÈÛöîÉy,ÌÃ1‚¯A¾NqÚÄ.ƒ 8;í4º•F�>5þ<«lvÎm.•¸pı¤ßOœŸsÎÅÈMx}}öfY-š×�×árØ“×ìûŒš} ä”PZ‹Óýæ•LW™²’zÝ4ÀÔ6½zi¥Õ¼Ö¼³¨HjiÕv÷@›Sn ü)ÎüñHðÃ9@�´{„šÊkzD¬ö æ{h¦ÁŸëê¸íiçÔ-3ô�Ò_cç‘O´táp>¦J®ÈaNt]{è"艣Îýá™B“¶xÃ9óP! *:~ Ý3WÑÄ=U¡Ý›œÇ�§B»7ÀÖ]t á<êxbð#{uA¬é\«üDpˆ’@ºwÀSn&Pr%%%•@=*ÔKJA*B ‚�=ØËüÔ9û‡{=„?;÷¨K¤3H£©b8ŠŽŸ@9äAÔ¹?}�s:BÇÏþ�8ˆ�%à `!óÐàþÈüß3§¨}ÿQkÕ-WA:”qf¹½ãúÃûây ð„®Ô|ÏúJâ²(nŸ-à Ö i;8ßãz?±ûG¡OôØ"Äzäb]÷w€|…³~˜ò°®n�¡O4($!ÆþµÆ  ŽKt7¸Ó¿EÐ2¿Ú  ˆî[pÁ©²èöÛÂÙÆ›ìˆZ¤'žx*@Ö& 5ÞÀWuYm8„Z8ÁÌ![h7JÓfÕØÂ¬&ÔÊ swl™³ç/€¶ÐÞ ç�l6LÞnî˜cÆämÚ`àá'ü<4U�=uøáÃq�µ)Äë*ç±ÐÊP� µÞzÛàÌþ|ÙÌœ�q|^3§Pî*BÅ~ývûJ[µý÷?ëL;„>¥µ�AgýP–ˆ1'^Õfµ-þ(äáëâô�XSøÃ\‘ì zpPÀ¡�À “À 2RA uŸëS„@È HfQ|ª¹€bW„Üa r�@DÈq¯àGZÀ!2çÜÛ‹ËèƒhB¤pFÇ�ìý¼èâü—åÉ”””ÔTÕýÃ!À¯¡Ý›ïY·š@ Àæ”:~¢öoªØýÉ< uüDóX‡"D ç>È |üÄ­ßX£H��:‚X£‚ù?êþQW� …8”¡Î vÿö@zæÈ€PM׆ý ü¼X²ñÛµ«ÔisÀØ.„?@L¾g�°'˜„º´}C°ƒ¨�'–ºéüQáœà‡€H�÷Òþ Òë4�]@túx´¡OÔâ 5uy�°'rþ �g©ÛGbµvoR_D¨ãÿvÏz>µU³ >ó·Ï¾¿±´Œ*€(´‘ò…Í637›Íq€XæfÀ|”–@œ‘â³kt¬-n¤ŸtÒd€â\š�?þ7ñík\°›äh+çn’¦ À ƒ:¹Ž=ö”lúôkðyýíoÿÈ|bÙçËç †þ»àö°¯ãþûÂçêî¬J­Ò*A)¸y|ô|TsqT:hÐÑùuÏ?ÿĪ�û4¾î G9mùþùÏ×#”ƒÇ—^z_¿}/ñ9ÛÜ&@¥Ì¿_{8¤ô×pI=lÿƽæ>¾Gd®ó|й×â–oÜç9¥ç�º{*·ãìº(i' ‡ÎBžÐ „<œûCà³g|*Íýa�0HfÿÈÞóØñ³ ¢8}\~RçžðÇE0Ä\¢ÀŸ ô!‚¢=·ƒ‹Ú½-á¸WÑ T^îöaÞiÝaÛX ·?”üíÓÚêÏl·Ó¨597(vþxdÍ$ó¸—ù?²‡X“z8û¹ì z ‰ØCâþñnUì Rèƒ\ÁçþhMAR£ó'nùæ9Å3€Ïs¨Ã=!PPCµV 8ê{ôÌúÌëß,hÕ“8û§iˆ³VÎ?*Ü&¾hb|Á�Ð|7ÿé0þ>ø0 \<Öf+@hëõïÿG@ @“ƒ„©—^‰¡ùM@eÖüùóñüæd’ÇG¨ä±™BMþy›5ë·VUÇœ/ÌßáLšXÇ—Í™óïÌ~fÌq$_Ã{ïy{A@€\#G��ϲèß?¾ž9å4sæ� º¶HÑ3mçF÷Œ:k|Nä9ZÄ[ääcÐÞ s�¼æn™ìçuwû þu½Ï%’¶nh+h5¨oß]¾âºùæßáÌažÏóƯ% ´¾I÷¥»šn4e%õŠiç4(­´îÚƒ H$- µ;rúp;pþ0*ìñ=rìeþO4Hσ–p9ðñ=Ôa§3O«[nØë¥çü¬<âÙöû]0�Ç€�Àž`ÍôÑ:÷Å–o‡Pc΀ «1'ÔåðÇ#öÁ< ˆà'ˆ& Ö±G •¡�æyªµ|‹æ)à¡óGj”@F@”^+âìS0 ˆ{@ùüFº€ º TPä J())ék´€ÓKÚºi®ˆ. ‚ äÙÞ ×ˆ3ˆàÇc÷N �ùÃ=ÛÀEsüœµ²ÎŸ œDÑícç¸N!�œG Îþñ}%—÷]?Œ¬ B½àòÁÞ¢îy¦çîîqgÁ]Aú�Ø n .ãÌþÒ®�ÑaÓáFЇÒzqöOÐò­ØÞ�b´{ Á�žÄHÄÙ?Ì }ñ¬ƒ"I‹·¹ƒ'l Gwk¡ˆ5…>ÈÅõÃs‚¡ÈýCèÃöt‰3H¥óZÏD­4z㯠€Öyìçp•ý˜�<ò´Ï>‡"�dsLp³úå—_ 2Hƒ6_æ&�›âvó:¾âŒ›«¯¾usǰÈ`®ãp Š=nœßyçlÌõ±^¸Ùn7Æs¨S|œ9Oð5X+3 _ÀµsÏ=÷å7¾ÍM„�kày�|ÊÙxLAøìëÅsqFKe¶ñyT÷Ý÷ Æä³.ÌçÊ4Mt—øsc>ŽžÇíÚ :áúiÓ®®|=à’1g~f Áõóàƒ�ÀA&íáø=€SÆçܲ™èÍ7ßÊî¸c6œ@v^V€�öºAFØj g¹ÂùGv†Öq:”9v ¦ ÅÚ¹ç^U*Í]çP  Õ\JÅ×®¢!CÆ6~ ÌòvspšÙç%@k£ÞÛ£fÒÙH<‡sÎ^S|\ûøøº r¥@i}SïOoe†’ºÛ´vzåÒJ«ÄúŸ¥F=™`DÒ¢P‡]Ï>Ý! À?+¶}óèò\j�CÎûqµ|ñˆÚ.£/í\Z¦áÝŽÛžvN›I3Äs ì±¼}4ÒÝÁ Ô)qÿ°%ç@9Ü«{¨½«Šh€¸|ôè î)æ5Úú ’sÕ‘ªµ|C¤¤.íߊÎ�ÁçúPîÂ^`�œ±†è(>„>U`P¨ñSÙú-rm¶_j—””Ô”p½Â@:ëõ@¨']> €©Ë§ ƒ˜S|$'ä‘\ÚÁ ôaäž fÿH^Q„<ˆ¢¸ œÖèSñÜa�Î çþP’C �´{cM[µÝcÌæâ9ÙÜ<åœÙK ùS§µ‡mŸ·vs¸µyC�×(¢V ÷tú(ôñœõXêbÌëT€°W؃=ó¨Ý›Öãy?ÅÚpä~,WÈD(vþhû7B"йB‹„A?È«¶†Û·þtµž~ôËõ³ ÞÝö«èóþYç³ú@]ÎèËí³.“7Í:}?€?Í!¶™‚�/^Â�þÆõŸÿ|\íkHÿ.ZÄ?7ßÌï!gñ”œTöØÖþ^[þ%”Ö7u0núД•ÐMç™–J¯^ZiUX?X錌HZj¿› wÿü0âÌA�ÄÓDðGž·sÕojÖ9ö6»©0¯dùÏjÖŸ0³ÍqWè1Ð gqO1§ äAT ܉@�j€+„A�hï<ÆPHÝ>žK­…XW°ÃsW±%\ €tN�:€vÏ£×éµE¤NŸxÏHàÃ\êÒö-p1[ÂQ±+HE@´{ÓºÎÂÞ”PRRRSZÀ!VoûélmÑÑ#ðGœ?`Äk„ …=÷’;Ðá^�?js°'àaÝkâü)‚�}˜KTG�»~c7Á�º{L¬öp¿÷;ª ‰Ë{mñ–kи.µ�Ž´ß½^/ù;Ú«5]µ9hlgi÷ÆÈš À'ÊÝù£. wùH 8Ë Â™À�=ÚÁ‰û‡màBðcâÞgþ ÀŸ°í#áá�ÊA�ƒ m‡sW±í›îur&¢¨µU»ÂÚY·ëûì”Ñz¯l�ý°nè~—…öZ�ëÅ_Nÿî&%UV@i}Û@ÐR¦sLóMYuiê˜^½´Ò Ö²=nš�`DRk«f©†�Ûì|ÖdÂiG·£ÀuþÄ0HÏÝtòÌA�~6éÒº¥æ”n÷öÓ1÷·;rê1îøçOÔê ç|¼¶�‹��K¡sDæ¬Esй\§°ûì êD³~ ‡9 }¸‡Ñ僼ØâMEàÃ|FÙÇN FÖT>aîÎÈ÷�(=”:|�CÌÃpÈ |"ðƒòs€œ -à½Gwí˜ZÀ%%%- Z༟x69ƒ<º´&s}LÌ z8H„º:‚â D‚Ôq_?R�c7©Iû7îq¦. ì5'ìATêh,J!çN Ja#·~CÔy?�ºÛ­nÉ!�—œóó¯ÚëÇ·Ýkôj„<„>€6ÌÕíyÎÝ?Üôômáê ÌúD(ôÿÙ;ƒ�¨Â( �©¡Pæ4š-j13tFÍ)( H„Vm‹‚¦¢]äB(¢fa+Q«hQÐ"Z”5%´qeP­¤M´^¿—Ë8—a"xþ÷ÞóÞBfãâãÜ+âðǸ dÜý‘âÉíù@�Ì |¤Šo&~X>§€{D”øé- øª0 V>¾jÏ  ô•;6�ì¾9šô¾<œ ÿ8ê�ÏÈêDÒÿñH’Ÿ;�ì87œlÌÆDËZ’beå› ùùGñÿnTT@ñYŸ ¨×é…SR§–œÆã/ŸøOWñù§ì®ò«%¢ÒTÃΫ_2“åÛ|4éÃ7€8$³T@ê�pïÇBMSwfZ»KŸëýÝ·ËM'Ë×=ðA=cÜùè!¾UúÀ£´ Ýq/²`��ôôÁ,= �ÎðГÂ�÷ÔGÂÇX gÝûq°Fkƒ|ÐòÐŒ$f¤} 7ÃCúý¤T€ôæ 8@ñ¤z=à%h¦õnÚ3Bòоq3§Öú†‰³sû½¶}ðÒ9e‡ÞûjôønP<yƒ« õÏí"íÓÐÀ;^ªÚR|[ë]jj+.ˆhVaNQ…7Ôkeñ»ÖæþׯL5mßÿ�‡a >A|ƒY*’A>$b´×{šú‘>\óÆàgzõ¡šI ¼ã5pÖ*8‚<®Zw€àëÜýQ3� $„ÂÛ?'‚üðª7­R?ä1üa Tü±�¹yäòÁÖŽ‹Oë?¿Z;/Ýo¿Ò‚‘ƒI¡ÖPâUp"í|þ $3Ë<´þ ¾‡::+’™A*ñôB5Ò@ìñU塤ð‡“AœòÉ·ð!†?”úa7~ Ó}� BÝf­€âС–ždSO_Ò>ZpkÞ"ð õW*‹ªÕj266—¨¨€â³~!PƒÓq§e§¤N=qÊÇ_/>ñÉužýl뺱ÁDTjê.}ÍäJ«™woü(ôa؃w |œ ¤ÝÂÚ· çç¦[ò×ê?Óß›ÍÞËÌ>–Ô�“‡>èy ­‚3!'�þ?í»?Òól$€NY‰òÐSÒ‡S>â[¾z¤ÐŸ WÁþ@ð5 „o�ø�ÄǪ7®öý¼ƒVC‡ÂUoÜsðǽ—ŠUoÔÿfïÜu¢ £(L4-¬4á l0¢(^ñ†| cÇ�ÔdÐJ¼ #:( �±² -I,¬‰ñ L¬dŠãž5+ÿrÿÙN¦1¡8“|Ykï´ "|ùÏ‘àQòLèÝ?éû@ì’?B’ˆ=—=Ý03y#ˆýæ_`æžgkã ÌìïHpÉ®|kà{šï½¹fy]¬igçHÎ.sî®^u½7ÆR.4®u }c ,¼¾¬Î3Û!«J·«¾ºÔNÃÒõ‹yvRY¹ÐW±Lp?¿2Š3fêó/ÓlýCŠ£È�ãö¤��Y„HßÃ<¨�æ”™üaJè8“üARÎAع[@šgÿÞw ˆþ×- \‘Py¤îy t²‡]s,€0Š '€ι<^…ÂGHøÄâÇßôÑŒ¾{¼:¸÷ÐÔªI�íÞ~G›ü´gxnÿ�u÷è7Á�ºæàÝ?èL Ÿê^‘�é†;w=<‡Ð‘$<“ðaF(ºõËŸ÷8Ξ9Aƒ9‰�?î­ë{~°“ôÉ;ÀN"H³nü¸.áãÁžˆÙ@åhwëëÍ¢Ùü\ll|)67¿[[ß‹‚ŸV«UÔjKåÏ©¤¤@å§ü´EP¿1kü2ŠØ6ûËŸ^ù)� £0 ôsßÁ‡ßJAQò?Ù5PùÑw`¦&€²G¿ÝŠßû#!„n;É&æLÕÞÝéZü`φÿÝã3ä[ýGjíý@·�ôAúǾ·€Âw�X œ©{Þ+ƒ›?š{{w@Nìh¹J;ßI,|4ëÖO9”@ê"íô~ÌùNßó�‚‹äw.Ã[@zÌv˜»J ÉŸÄ¢fwÃ'}O²²Æf¤áIg>JuÁ]$~´‹‰„�4C�8è’B’ÐK¨§Þ½™§;¼¡' “:äAÌü­"0èqä:˹`àGê��GAÔŠ j"†Ñþôü$¼Iõð'µGóˆ!zz#Ðó˜Ì>ÄÚ ƒ¢o1a‘b 0¤Z¹bJ ‡hy…?™+V€ÈÛZ°ø#Tà�zª¥7Ë=ÀÐ  `ŽÍ‡¡P‡:EÞÖÈA!ËCD ‘CžÒsà“}ÉÀºÆsÕžTæôpýôká˜E45Î �Ÿ¶îô²5p&õÍýSïÿôN úv·�ÞI~†œ@«Ÿqèò…‹v^Ü8îÀo¬…û½ùî~Zº{pø´êj �zQ“«o·~"ªvx+i^À�ôa&Ô ÜA#Ð € s~ˆåþ�rEàOæDîõN $À£\Øc2Ècuïþ‘&tßÔ‡?ü‘Yý>ó™ÏÌ~ë·þŸÙ3žñ¼ég4iÒ€¦oú*ÚzsèîÐl„þ.ôÝ¡µÓOoúN{$}vóoù?—�lM°bÒ—Ró[wdÕ…ûÿlÕæ=³Õ›÷Þ€žtû+@DA z€ƒAY~X÷²÷Þ°þën»cqÛ®¿}ççÒÿ~ÍóÞ´'Žà(”ÿº;°§sÿ ì1Ëù*8â;kmw�†4´®Þþ!W퀤º…>uöb?ý8Ä[‰uoˆkápø´2øã«ß$Õ‚=+=júeí±Šq¸zÔ£Æù£y·öM}Ü>~(s"²Þ‰� à‡ˆ:gð§ÊA�»$à°G؃öPW{j¯o|"JÑÈ1è£Ü¡�¢TÀÏãB‘+ºH½Pô$Õ¸€”K}<Ì¡v%äéüR­ˆ+ ¸})’€\zÔÛm0Huç R4èÓ¸~äòÑœ>Ї\ï@ô‘|Ìéc. ^‚AK€—Ü? �p{”ë¡.õÓõ£(’¨QD|ÈSä¨8~põnúý 8EfQ�p¹óàÓ»~˜§¬ßÖÅ!æÕ”u³æÍkd=½u×�rÔ;{”_jýPµè†#—Í_¾ûY~þhä_ÎùÛ…‹wí\õ¯¯¸†ÌýÓ¡„7 ü¡O�¢¶àÓÜBæâîO…?ÌÌñ£ZP'ßÑËè¹ßùqw�ú-Ê�iž³½ølCôˆ7 áênQ;øq}@�Ü?Èïû››?ÌMÏX:g@÷=íÜy(]>G�¾löüçß8{ⓞ5{À¥�ž~6“&Mhú¦ï � ‡‡~#4©ß=fúÉM߀¤yÿïoØqË´nÒ­…MKŸZ{ñÁ?XµeÏgî?{fŠ €XýàA€V½¥ì¾OÖÒÚg¼þæ… oüÃÑëÞÎÝóëžøê—|B{"&ô áÂùcÀ§wý0bôz ¨uþH#�?à à#UèC/ü!õ. jÜ?8{Ìõƒ›Ç@ÙÇùC¯[ç·Lôî1ì4·€:|pýDÏjÜ?ÜÿÑê6Õôp‘÷N _ÿV%d�§“àŽ­x“èù*8êÐa\?æü©u¾1·�»�=ß„³D�Ø®{£�s”ã¢ÆÙ£Yæ@YÓcíÊòpäæÂ”9ÐGQè!&ÔÉ7‘æ%X¹bHsÖÃÉÑ#©¦ŸbŽóG¹A €5àÇAÀ`Ðcpü4nŸ=^»Ü d°§s}¡õoÀw˜ãî)ëß–<Ïb îTWà ꨇÜ$™ã‡î Õ8‚*äÑ[ë“}NŸ92¤âî�ú@Í#|pþ(¶ðǤž»}B‚BÃøé¹n9îú7J€£ òh†ÛG3ÕÊ©y¨‚f€årÿ\VWÀÍ=tï7-nÙùk#ïü||á¼¥ck¾õÀWiÅ[ÆÔaý*ú}j/%èäüX-7PBæø‰Y›»B!Ü?û*ðöHÌÝÈA9׌9Ñîü("€�� à�¹|$súXOk߈Å$¨ƒë§Dæ5P§iܤI“&MhúNéû@ßúËÐl¤ÞºhúéMßé €ÐÝÛ®y÷¯Ÿ¹yßßM c§Å°b®¿hÿ‡Vï8ð÷¸~n\qþD íÁ$"w þ¬@!iõ®·ýÐüU‡m¬tqËÒ?Î}Õ­o]u뻞-ðô‰XUÝ>)A¡qÂýã=d÷;9ô¡‚<–‡ìu€È 'gÔ€ �žÈ3š4ó¤˜2¸£šYйK}@O‚Ü$Èc÷¨3šË‡˜}>¶ò ©Æý|ä0Ïœ[@3ÍÛoʇ€�9}ƬS¬HQs\@Åå“0hØD]WÁ ðÃ}zwXOüød®èrÀc5�GÂýc ~ÜcË Abï"OðÓÀz5—û‡üvÔߢ6¹ÛÄ  ”f:„€=ÌÈ}Ý›9€¤ãÞR ÜQtäy@ª«jàãN $È£döØ­Ÿì ì(*—ƒ˜!AE‰ó‡U—O] 7~¢&²êÍ£ÔߪH}r€øCN�ü½C �ßúAѳ؀å8}”S«"àÑ\ð‡·QRÝ!Ü>ªQΆ„Ó$�=¢Þ˜ëgÝ×î{äâö¥åÿ¡ýùÐ µº{qÛÒ;×};G²2N(sÁõ†…ûÇ`�buÕ@ô>ÝíŸÚkaPŠÛ?¶.` ¹àO»ú�^Fs!@ øis àÃú·”;~üÀŸN†€@8�2 îP§p ®ãþO…@€^?ýí¤I“&MhúN9tfèhè“¡Ù}BïϘ~zÓwš ¤Û@ÿ¸ùò7ÿêçìúÔ6&�Ñüy7þõš‹ýÕš-ûf¡„? ~¶DÄ”7€Xõ–‘;@êeÝ®~S|Ỿwî+_ô®ÅMKŸ ¦>?í‘»Vïû‰ç'< ÉõƒpqûG5îõCôˆ€ž¡•oÊUÓ )ð°þ­«ó. õð‡Y€¨«H5.Ÿ¨³WVÁõˆ›@–Kª=‘­€SL©NX²7šù õ¥�µoä8�$åêßp¸üþàèúÐËÜ`R�y…:ôÈ¥âîáPö{ÅŒ˜JÈÓÈÁ�ràOÖ�;å�Þ¶ëßbìáþO•…þT(ä«ß4Ïœ~Wû­r©uú�øá-½Æý# ¤ˆ£ˆÈ£[@9GÔ~Уš™ 5°Èc½üdüD.eŸ7Ý8‡CýÍŸì™ÊÚ·u…?5VU‡�V»Ux”£¨åêr„ó‡@TÝ?¼-w€ªËGyF>æ±ò­ë~,W­¨ÜÖ¿©Æõ“5�w�4äÒ,á�jËëíAô:¨€ Dßp§ƒ<  öØm s•;@’z¨8€pè£YÖkž|ðê…ó—^¾ìæõßÑ6ïü͹ëö|s‚Á=ê9à!gÖÜüXÿ†È!}@Üû‰7�€=Õíøñ»?ªAÌ"J ÜÁ!$ ÔIï‡@�û§@‚=ô+ôQÞ­�sx,èÁù#ù*8DŸØ®~£7Ýš4iÒ¤ Mßi‚î/‡ÏlŒäzZhõôÓ›¾Ó‚>ðçg_xìÿšÇ$äZغ묹äȇÖl=p÷ê„?ûg·îO$P ô>À9 sqó'ïü|ó±×,îØ=Ú¡¶pñ¾ß]ûì7ôyV…?Y ö¤,øTG±_õæ9²9@'ü)�‡wô”y'fõö9€§ƒAš±ê-g�<çε+zÃÐ7�Ý2ÐÓæˆ•n>öTTûîøöä›fð§ÞúÁ¤:bfN ‡; EÔº€jtÀ“5öð¦[‡è ð âöQÄÝÃíæš…€=¾ú�~Ff�Ú5q5ÀGÂñã5nõ€>îú¡6ðãdp§Ö=œ>¸�ô–j{8‚$r“À‘~…?Ýê·þþê`Ô‰>yD ö�›ãG=‰¹¢;£6 ÀÉ{ÊwâþñÕoÊ b&W=`�ÔQî=à�ƒúvÿ‡hPh„AM º~˜©—Ñs`�àŽGwåÛ2ËèÀ'"*=\>šÑ“ƃ @9àì±\+ÞŽ{ÈÔ8}Êm õRŸ~ \Íq‘÷‘Ëç/ÙõCq¿ç¯FÞùùãùËvß°êÙ‡/MˆÓ¸~ÔϨ¾zª0@Ô®€ËØ;€pUç+ßAkèk†<Ò ª7€úÕo¾NùqÁOÍåüþ� æ ¡�­~3—�­…SÏ"àÇ!�¢Ô­z³>P(Äݽ5ä9÷–ãäš4iÒ¤ Mßi‚¾*ôB³‘úõÐæŸÜô�æm¿îç~û¬mGþh“¤ÙÂÆ�Ÿ]wÉá?X³ýà§þ$øIE®Õo¸~þ(jîŸNŸìÕ‹çPÀœßûû Hô7ëìU yt7ÈÝ?ŠŸˆÈzÜû±Ù˜uoC÷:|€@½ëGï†ÐÑ#Òø�éÅü„˜ ‘#½õÛ>~ˆ¹H±wu=`� O€îXŽ£g+ß”KsÑüñðØãŽ  õà§æ qÕ'Ì‘ÔÃÙƒpòÄ›~Fü8¢o¸óCdœò”¡ápôÖj¤™ÝôÑLÐG3`ÈÃL¹ ?êg�¹¹�P¹ÿÔ¡×Bj„+H¢ÆÔ8� ô 1á"âøÉ(ÀÓ¸~ $ÒÜ\@ä uN{[B€È‡Ý@æJe_=àÑ  ç¹÷ŠÛ§_ÿÖ¬xS¤‡hôø= G]gÑ?Ù3裹@·w¤üd®Zâ]Èç@Á!Su ì0öÔhR?!Žê„2ªíî�bëüIUçO½û£žj¢f½ó‡Ú{~ ÈuÙ܃öº÷sz![óÖô½&wØjï~”§Ψ*êï!À¨ÞФ|”—áþqDŒž9€$wþ V©nïÿH“hÒ¤I“&4}§ Zzvhì_¿;ô¦ÐŽé§7}§1B;úÁÏozä»þøŒmû>1�Ó[sø“5çýû?[ïqü¬Ýz0?¡¨uûgóneÔ ¹~ˆ8~ þ„bmÛ æ¯=úKËkÜÆ­YúÄÜ£^ôŽU/|ç ~XóÖ¹€˜€€>ÈœA;äÀžMêËõÃ- Õv÷G�þônzÔ;æü¸D¯uIµnŸxgåC÷€ u §öBùžØS{Z g�'k¿ä@ˆ;?¦ì!½íó { •{@)õ”§o Uõw€ ÐÐ:¸êøéÀy­@©ì‚ˆ~ÿçxë߀@êÓSŽzЃۧ®�#G@Ÿ±Ñ3¹I3)k?Y# �¹‚$!Ä{ƒ?Q}î´èvõ�€B¸$A¹€*ôQ®>`dµ NC"ω¬|kÜ@ÈàNæD@¹÷û[@‚:Y+Êõ³�¬F­ ¨[ùƬ:~ú•oD©‡AÔ¨»ýð‘F€j‰º®~Cîú¹�uäPÈ”o{�Aë‡ ì”{@ôú;@¶òMµCúÈàP8äÈPFÕ€Ÿ>*w×kÞ²o.Ÿœñfý£nüÚÅ­;ï ~>»¸cé�k¿qÿC€>- T×Á†˜�¸„ëÇ{5B€õ�>CàGoRæôÈQwý ~4«. É€�rê>Ú:¸Æ„¸¤h5rT]?¶öÍðqÜq§=f™WMhÒ¤I“&4}§%:;ôòÐgB³úŸ¡Ý¡ùé§7}§1BÛ¯ÿgϾèUwŸ±qi‚!§™7îš­ÛvàÓ˰gí¶Ã¡C©A€äâ0(õÄ×3ØJØSë—¼û9s�¹õ'·,}lä,Ü=ÿÀÿºz×[èü!V$؃l\CvÊ= *ƒ=æúèQ®(Ñs'�¿vüô ¨YýF¿¸~u2§çëÞ<:òÕoŠ èê›ÓGy*rÕ̇nIõ¹ÇT¹ÿS�AÈÝ=- âöOH 'rsú„ÔoÀ ‡Ü×½äérÕ5JzÈ%� }¨@PuýøÚ7káAîhnðG‘^• Ü=ÌÚ»?@ Õ!Ë«ã§ÞêããúÈä+àA!‡@¶.äÁéCŒ¾"·€€?@ü‰<#Òlð�‡˜ÐAÔ@  };~ïGj>ÜüÉ7�ãà3,@ϸUp‚<-ð‰ï¨ ì”õo=þH|²V޼§œÛ>¼ÍZr§�z€@)‡?½pý°NýÌ„€;Üø‘¢‡ºUoÔj`O� رÕpôUð£ˆÔç kß¼Æñ“Q=sÿhÆZ7ÀkÞªú¾9‚ººtí7¸~áÜ¥7.ŽüÔ‰>°þ‘{ÿyzjdp‡~HõXðãîÕ:vˆˆôN5à'jåô$î9r„}üÎO…>Ê?Ì9àA¬|[QÔÀ¿ „ë§ÞüÁõÃÌïÿPwÎõjÄñ³ÙÖ½)*§60´´±?ÙWœnMš4iÒ€¦ï´AW„~>4©…¾eº4}§9BÛôÞÙýÎ}ÑFNì› ˜#Ø£xðƒ(��nu«àXÇÊ7VÀÉ ´î‰¯¹mñÜ=9zÝE7þÁÚg¾þŽIµ;}pÿ$ÐQ °#×�æê+örð“Ѥ>o;ªSÍÚ·Öñ“o>ê|wÈõáôqèc±A xyrFn0'ûÔ–KÔ¾.¥þxðäéA:¾Ž(ðã9ŽŸ¬Íåâ H3@úè¸ãGµrÀï�@ƒxK-�“¢Ž™z™«6øCð¨G.¸!º³§¸~¸$è£ç�bu `“u}jD¸{èzl œ@1ÀLB[(Ô8~è±þM¢‡¨sÿ(rÈ êåÐ'�T@�zäÅý#Q»ãÇîþ(§^¹÷ƒó'£çî ø ©vçO—§ÈMöЋXW¿! �f¼c®8D|„ äëÞôVµÃŸ>"nýhæ«ßR걎�×½õ½zãÔ82W,PHP‡üi\@¡’£âbå�Çóu®Ÿ÷OWW×}@€¡ˆýPqÿГ¼îÝ@åÀ‡^Ö«¿ëÈ• ÷ßu4î÷|døÙ´ó÷æ¯ÞýÔ:Žˆ@ŸÖÕR?{ˆ¹bƒü� YÏÀ�¢ÀNÎÇ=ĺ·E°C�È]@ ("`U'�×þ¾sÿˆÈqþT„è¹óáBîúQlzÀ«YýF­^ƒ¦@“&Mš4 é;íAÐ7„þsh6R¿ºfúÉMßi€Ð–«~|vÖÖƒ$9E5' O:~Öm?’Q H7B™ïË<׿±.!P‚ŸÍ€€@8€Ö<÷Mû.=ðÛ£IÛvxý7ÜöºU/{ï Ÿa÷�¹üÑL×�Ÿ|g}‡?¨¯ÍÍ“µb¨qÿ(ªFÜj"êzÀ!jÉPŠYÏ?!à�j‰7¬ƒ³èp0”=Ä›þö�É@�TÜ@Q[Ï?Š€å)úîô(ÏH}Ež ƒBzƒ?îävÿ èƒËE !Ýõ©ëß?¨sý n¯}õ›êÔxjsA _§9µÁÁ¡ýRy¢V”pþØ\Íqþ(×ÜW½©‡Û3»ùCN-×oR@ž˜›»'E bŽ#´v41„A@¸}¨ÍùcŠžœ@‚B€ÜAÙCÙÜaVèA½;Ü ¥ÃÇæ)ÕÀÔ»~=Dr�î "¯ Áq½®3ཡ5pˆuoÌ}€BY‡pû("Ü>ÀŸö�õ�@½ÛÇ„»§…@‚?æ"jø!—¨qüQnŽŸì 9x+àƒ–ëŽ\>åîgÐùÐ8ÇøÎ¿Y¸x×ÎUß}Dw~VÀÏ%Õë€P ¤(5ká=ûž$˜ãЀÜÍ£$Ù;ú¨@H½�r€OÌ3ªøA½ë‡¼:|ˆ�ã'"bõ›ƒ@D½ºÎU�+âZ䩱öÒñƒûg@“&Mš4 é›¾U@ õ¡}44¡Ï…^Ú4ýô¦ïËý—ÐìK¦ë?0Ûô€;fgnÚ3A“SD ñïåzAŸõ;nJè“ábí[Ÿ€=™�þà:¶róGhõÑw<þú›Þ`ðÙ‘£ôÓó�¸å}«n~Çs�>_!9ØqèC|3å原a×`ÉõƒË§¹ÿ“ÒÌÞ‡?ʵ9€èenŽI=ìñºWH=œ@äDîY¯BÀ �uoÙ7ÐS£ç.Á‡>TáŠyYû¦¨ž oÈ€Y —µê˜+v·~,v¹;|ˆÕñðAš™ òôˆˆã§º�<I ÷�ƒ›•õnĘ ò ;¨›5p¨q ÝÿêD�ã§Šwuý›ßÿÉHÝÞüÉ™ÕÀËU[då ˆµn�ˆÜaPßkn±îM¹Ô­‡+îê”ç‚>ŠÊS‚:e2R¯»ý£^{P³öMJ¨£ˆ|‚Bô€=)jV¿¹+wOqý Ü>)=ƒÕÞ�þ(¯p‡è®Ÿ|㎟n�ØC�¢ß� œ>ÊýÞu…È»ÚïÿpëáêàOãþ! øt.Ÿþösz!Ýü™{èÞÇ/nÙùë#×ñ~báü¥ckž|ðAäɨܡà'#÷~B�ã'k �iü\”½Œô›µp¸CÀƒCîðî{x£ZQâÞ�"ÈóþxD8},�(Ñ/ëßPö õëàpú î{È%ÞºHò¼®|Ë~ä“hÒ¤I“&4}Ó7‚¶„^âÖø°þ>ô}¡uÓOoú¾ÜÐφf_jí¸îçgç\øŠøÿÓ} /ç;?sÛø9àçæˆG¤£¡Ã©A[BË5Î)jVÀí¾GOyíËW@/{ÏsÖ?îeo^ܺëFƒ©+þæšüØ®„HÕñÓ×8€|í›jƒ@-ø!—¾ðý‡Aô”³Ò-ç€É\@½F¸ž^ä@HnÕ¬�SðУo (åyyˆý=  ÷~ZÇOÔyÆÀ ¹}²ü! úÔªî`�ÅPèÉíCm® TuelÖÀuˆœˆpúXΊ7úÙ#¢æÎ�ÞxmNŸ½€1ÀÏ�Eô!jÀ�Áž˜‘KÍú7ëãö!Wôp^ßð…èýÖOÔ–g”²ï¹"ÈÞsïÐq€ ‡;@Äœ±þ­>C·¨+ü‰ˆpöDž‘w)ƒ<©Qí‘ úð1ð“91än ^ãa�»€z7.E �rµÝýiïü(„ù½[7äþ©yмª‚d7€RÔ!œ?B 'gŠøø; �Ç"9N iøþ�4¸.%Dn=$¸ã1'’‚ ö�»tëgÝãö?jqûÒ;Gþã»·-½cÝ?ß÷•yÈ ð4½�f™KõÞOuU à ¢\>þdÔ}Ÿ¬Õ³uoPh¤ëØ#g�Tz¶îM5È�¤÷­+èC�û§‚ ĺ7fuÝ›;CmN` \DÁ½3Ø£~qü ‡@€ zš4iÒ¤ Mßô5 èÚÐ/‡f#õû¡ÇM?¹éûr@»C³{KÛ®y÷lÃŽ›' òe¥¥Ù|¸xú„nJ%ôü è“yHðç�9�äüþÈ$Pèyo>°ìþY÷¯}Éâù{ÿd4˜Š·ëžöÃ/¾ÇáìɺYùF”;Ì‹ûÇnüÄ\5kà”ø†?Ô5n`9= �g "U9à‡|HþÆÖ»)7à“ðЯÐG³ÈnÄ- V=üñZP‡¹AŸÌQÖ8|ïzºˆÃG°'s`½Œ¶îÍÖÄôÑœZQê }Ü?‚P�?ä½ üÞ¨ï+ß”«_]A xc°Gýêø©rð£7ÅÔ øøinûä›ã¬~óX׿³Ð&kœ?!@ý à£Ü¤ž€Ž� „ê8sü™Z$ižýœ­DÄý�!@P*z@I3 P¼7(¤ØÝ’¸ï“2G�¯ƒsÈCôˆ¼ç�G9}V¿™ë'9n îx:÷� àƒÔψHTá�j>þ†¾À‘¼®�ãæ+à¨@nÿ'øÓÖÀwÿ¨×‚õ,¢ò؃7�ÞõN Ü>un=AÒ0üYóÔÃ×.œ¿ëX¸y>>꿟mÙùs×ï}¼`ÀÇbuúP÷zD½H9}AˉÍ àôø"—rN�Ó‡º€ å(k빈up�ógì ä ¨_ r„r^¡OÔ¶Þ Øð‰èñÑWD‚=VЀ&Mš4i@Ó7}huè[CúóÉQz_èÒé§7}÷ùï~ϸk뎇ßõ Í½£-W¼evÖ–ý\¹�kaó� ~øìÉý“w�€|\€ ¼1s9€ôä89�äþ‰Þýüñšzëž…+ý»Ñà'ÜAëû²7­zé{nн ðu '(¢ÁjÞ{Cæüô4�‡84ô!â’'3sû¨?ØC_èöOD>­�ëÇCÅí“=�ÖùƒzG79ý€Ç?M üAÑCÀŸ¶'Øã3VÁQ+؉$ ßrT?¦ƒÈ[‚²YÞ�Ÿsƒ=Zÿ–1ìáö�rnü�«&°§A®nÝýȧ�øQßsÀ�Ëû¶ ÎÀ�n ´¯>Þ׬YgŽÕ¬}S Êi&çOÑJ_÷~xçÈ>+3fæ þ¨&âò!W-!Íz稸€ìÖ�"}z}Ò(ôxäÆOŠÈ„H3Aú@¡�òzv€ºup¸}è Üÿ^' c½¨ ‘~ÜäÈ£3ÉîþX-Q7·€ªóGuˆÚg@ u0øã5Àd±ô==j×Á¡Ëè«~öÑ+ç°{)ÖñþõÈu¼š¿b÷³ã>PþzÁŸËlí›rú Ç`uJkᨙY]A�@°Çs Ï!I5. Bx˜glïüУÀqÐSoÿxÏaP/@P¼'x4§èþ¤˜Enwxã«à” øã«Þ!îû�×Õpîòs ×M@;iÒ¤Iš¾éA ¡}¡�…f#ôéÐKB¦ŸÞôÝ÷¾×ÿ›5¡G„~póîz{@š»ïm´ãú;g/yíìÌ�»'ØrÓb@™¹y¹èÉ~S“;ê4ƒ€=^7ÀGY¯uÑ7µÀG}€�fl„è3ãÇ]Aìô §ÂzäÃrä.ÏõüQN4ÀÓº€|ͽêðéAOŠ·ôÈqút2Ø$J�£¾Ýÿ±Û?ÀI3Ö»%à©oúÕo(zD ¢z€à‡\ïR­Ó‡È(äw~ˆ’9€²g°‡äAôpýüÁé3, �;ÔôT8DL î ú’€À¸£¹@OJ3“zxB‚CÀŸ{s4+bðú � 1N äpgR$ø¸€?ä{²ÇŠ7Ez>ŠÈ\�žR‘#õ[ç�¨ƒA€pSª ø ­ƒ©6ÈÃíŸÌU§š5päÀòô¨Otè3 š{?îê`ràƒHJ'�z�»'ûêñ0Tnÿä›&o¡u%à¨æOêÅj7Õ8}äb&¤¾­z3H” „êú7z=À‡œYYùf¢�ç©Öôë= ºNQà'Eí+à"’Kõö5�‡è©W è)«áúµoDï÷w€:'2'�bHkß÷€2/ŽŸ^¸~ú¨®káx”�"ö ø‰<#ÀG ‡˜R ¤™­xSŒ9R¯º�vmµú4«ß¨wFßþþ[÷Ï#pu·ˆ©zë'gŠ k*ô 7P D¬ §¿Dm+ßüÐ{ 9} P¿ Î���Á! NsëÇó˜ èi€P |œfÈ�Ô¹~*€§wùÐC@Ÿ•7=Qãø‰ùúGï{ìâÖ�ûsÎ]zãÚo>p}¹~�A x†b Ø "W]A�Áë�T€š] ØÝû)îæ8€\ p4'†*r·w~ ô À ”9€ˆ@Á9‚Bæð±sòþ&P…>¾e_nžÆ Dß{€ ÅN jÓ3vž“ÑzK˽œ…ÎÎú;—cÖÊ—r"ÿκ=ÕËÊ|¥·A}ôô¤ó¬5�ügE E1jIýïxÁ™ÄdD?pQy×ÿöç/’ÿÀbÈ똇RQg”òMÄ|ó´ïŸ­‹|õô/Ó7}Ó7}Ów € ¯i{Ñ(ýûÐ?›~rÓ÷OéúÙú¶ÐÞОŒ¯½kï‡ÿóòHϹðéÒ9Y hëÕï˜mØ~t‚0ÿDw~¶ ÇÏ C/JÉõQ·´ .rVÀ þD�%üI؃(jÝþYhaãÒxGÒ¹{þëº'¾ú¶{ Ïû?Y 脲æMØÃª7EÏ]"î TPwóG�¬Ÿ59 â�h¬ûG=îþdî�0¤š¼Q�@îÕ€ÔŠ°D®zð<™žrSÛóUpŠ q2wàsüpÊwDÍ= Èîÿ rïÐ3ƒ@¼% êøä ŽDM¼D4ȃûÇ…›§wé Î@ÑÕ �»?g�;}ú›@äx?údq (• ‡¨9«Þ¸„lÝ›j?ŠúÐçÞ�jœ>rÕ[?­ûèÓ úîR-á ð•s÷G¹õšpÊmÝ›jË øàBŸ¡ ð(v üàƒ#ˆÜA�C!›1Ìþdð æP;—¨M×uàGðifëßÞpˆ Ñ Énþ(�~³þ�9ýÖÔ ?‚<~¨uuÀУhu”õÚ'zxÀœ ¨ó™qëxw~`ý£ö=¶Â Љƒ t˜±uüdo¼ãÕUp=6SÏîPÄ¡�;@ôqÉíÃ8îÿd/d·}† �D�(؃óG¢‘³ÎÁO?¨é÷Îä÷€2âÒì8à7ýN‚8çD4tT;ð!ñÖ€�fê©n!ÐY�?(a�Á!Bð3؆? Ö¥x£< PäËZ;ý!ÌôMßôMßô�hMèé¡¿ ÍFêí¡ ¦ŸÞô�Lð3zlhw¸öDL-çë¾íõ?–ÿÁ”Î (°íšw Òœ }p¶ùò7ÍÎÜ|ãeN’7ï›Í'ôyq‚Ÿ„>!åË·äºEèw€p   2”7Ö„æ6îÿ{Û²ëcs�¹õ'V½äÝß“@GÀ‡Ç�ÝþQDÔä…Ú\µK=»ùC^ÁRŸ9À§‹ïöd ô#=à ë€Ü$Q“;ìq”µzÔÈœB=ðéaÐõ �½ž\o©fʼª]ý& € PäDõ‰îöa \ÖÀ »ÿ3…$zÈoý zÀËʉ¬„3ÈC4àC/DÏ@@_ýVk PæÀD¯�>v÷‡h°Gn ¤9= +ßPöÔï==ÌÜ”RŽìPö:øSûÃhX=.¹�teTM.yoƒ¤~äÀ`ý z öd¯‘¹},§ì4®r>8ܤZh!â\ÄiÎôMßôMßô� è¬Ð-¡O…f#ôñСÐâôÓ›¾{ï»ã—V‡°çù¡½©€>)Õ Wù��;$Ü@Çf;®ûù“‚v<äý³�ß¾¼’l‚4÷–6í�-ì¸9AÏüù·V¤xK*sA \ÿŠÚÀO€­�Û¯çÏr>·yïxðsÎÎÏÏ_{ô—VïûÊñð©ëßÔ#7ÈãÒLNÞ9r¸QNTŸ¡ãƒŸÞäëß¼OÞC!wû…¨{ÇO€ˆ©ã�½A�”÷ëà|\ôɉÇË+øiÝ?ð£�Ç��õú•oQ}^ �úvë§ô«(æ@ )ûým Oöû›?m_Q* Ø£ˆxRŽ€A¶úM}\?!EzæüéÁÐ!à�¯~ó»@ÌþÔ~§ú zÀWÎÞ� öô÷�ü8ü1ç90¨€åu sw‘S‚ˆî²œ•p�A¬Ó; ‡�Ö½­ÌÕ'�™Þ¤ÊýjyD‰º»¤Âý£Y`P{H¢˜ãÑÁ�Ã`ŽrTa�bÉ?¡þ ¹~ú›?ŸŒÍM¢Þ63Ë�<ô³Fv€EÙ·Ü$ÐÓ8€>ÌúõpÄ„7™~RÍ*8Ï]À &Ü!ï׿~ˆH½ €$Á¿ôœ£WÌ_¹ç9tþxä�Ÿ¿™Àî¥UÏ>z…�€>D 9nŸš‚Á»õCþ�óÆfŠÈ�>€¡¦§õn抚¨9ê#Ð'ó}uÝuˆ9½ú Á�Z÷Žz‚@ŠÀŸˆ8ˆ>ƒ:àCI‚;‚B øQTŽ:èƒÉåCßA¹ Žƒ úÊ@)?äDÀ�"Ž"~€;Öó™É`�äu¿ .£�z„4CÔ®õÓZ¸é›¾é›¾é;E@ÐÅ¡w‡f#õç¡o Mÿwpú¾äðç¢<ÏŠxcÂE tÑþ¿à?�®3cmצKdvîõ8i hûµï›�}Þ­¬ùßùYÜ~Ó2ô ½ä%üyñJ\/0$à“(bÖºÿƒ²Æ ´v+ e´.ÀÏb@ÄÑw~.ÙÿŸÖ~÷'ø ~$õ@H5¹\>„èûLÀG¹ÅPõ?¡~92Ôæ)9}šõo¨½õƒÄ ȃ¢× D¯�=H3õ‰žsçG¹zÐã°‡[?¼qðSṫ‚ �û? †=‡<úÌ ˆhè9nü õ|î®ÀG9Âáƒ|æëà€CÀžþP}>ÙWNŸyJ9€ç› ©?äþ¡nÒš7ú€ º®B!ï|†VÀ5È{øCî}àQòº_gÒ;‡>¼ÃýØ“yö¥ê Räö�$¨Ø#¹ãÇëkjÞ€ŸòP×|ìê·aÝb0Èà�À�Cj¢»€æº÷ ‹[vþæÈ¿˜óñ…ów[óm‡®ÕÚ8 O({Ê‹ Hu0¨:€�¯€c.ࣹÁõŽï"g†ãÇ]Aˆ7¸�¸õSÁ® 1+Þ€?.œAôÚÛ?™ Þrȃ˜5. îÿ$"Jäü¨&ÇÙ“Q ‡àcÐ'r`Oæ¸~ˆ­Û§sUÔ�b€fuý® ÍÔçMãþI˜Ó9€¤œW ÔßýA17À=sú ˆ7Dw!sþ„¨�@£÷�¦?¬™¾é›¾é›¾S}MèwB³‘úµÐõÓOnú¾àçìз&ð‘þHê�ñ€[þ²ÿ¥¯…ÛzÕOjN‚¶>ðíñÏ=4Á›/òÎÏâ¶Ãy~.xé ü ”Òýsÿhõ(òX —î�Ÿtü ƒ÷@ pþ,üï¬{Ûºë#ëŸðÊÛW½ü§Ÿ³ê=ÇÞ÷ÁåÑGÅä·$ÁžÆàI©êD¯sü¨ïÀG¢&7 ¬~!œ?€ P},õ9ð§:˜ñ®sû ~±:$ƒA½¨®€£½†* ~¨û5p¦Æ„?=ôAü}qˆ°àã‘ÙÐM  y$›¤á&Rߢ”9ð¨¶ÕoHoâøÊ7Õ¸}²6 ¤~‰DEË™yZð“1AM~Ú{@rÙC¡¬¹÷ìñÕoÌ�ÀÚozœ�žèÙ�ŸF¶ö­Ô! ²Uo)Õ_øxîN€âîoqþ|*ü!‰à3Ôôi׿if §º˜Q •ÐÃ= Þ$@$Гµå¬{£'¤^Hµ‰µn~`T×½uª�‡>ëÝÈ~  êÔupŠÈ×ÀzŠÃGsŸ)Òö Ö¼)Ï~…=¼ã}]§ºº}RÍÐÓ¸€$êÉõ³îq½¸}iùo(Þš¡VŸ�·ïX÷/öÿ3Adpgì!Ò£ØQ¿º} ©g H5€‡h9�‡Ùð- w”÷wÔ7èr×�DOr‡.j‡A=B@Ô:~ÜõCT¿�=ÔÒüA8~|Õ@D4ÄÊ·TW+|Tg^¥¾ N …º@qÿôqÐSoÑO äd,½µ �"ù ô1Ù¸9ôüÐG¬SÌ\³È¥¹Ðthú¦oú¦oúN´6ôœÐÍFèîÐBÛ¦ŸÞô�øYúêÐîô°ö­hÃWü¨­€ÒýÎ}ÑlûƒÞ{ò@ÐõqèÒ7†iïsÐ8-Ø? }Béò 9ôáP·þ ø#�V¿eR~8Ðü¦=ü³GjÍ^ùê„>R…@¸pëý)jèaî}wü�kÞ2JüÐW øQ=xz èÁÔÈú�†×Á92d€Ç%°ƒ¨QëöñÜÀŽúÕí£ö$¢nnÿXÐÓ!f~ÐJÏ@Oçú røƒx+oí¹ðår¹ãgøHQW×O]‡Üñ“:"Ô!à�ßþÁåC=p Hý |2Òç:î ‹�óG=\>VçØÈɘoéŠ*ðÁéC!;~ÿ's[§7}Æ�bÈúÒõYó&g�€OR™p)o¡kܲW O PÖDÍЃ|B€ä ê�?Ô~ÿ˜CŸÞ0èQ®¹¿ÁùÓº€\ôàÏP j„ÈÜ>ä¸~LÌ[�ò”9€kß1ð„ú»?E¼«€‡úªÎõ£Úà�ÔÖ|¨×<åÈu ç/½2Ü<Ÿw‡qçoÌ=lïãÓÝ#×¹�zð‡>9*+ßú8„裰ãb†*øi{r59N ð#˜£À‡?DÀnA��Ý„Žs÷‡™;€x3æµõ�=äÈàywˆH.”ðGøc2ÇO+wût³”Õ¨¹ùãµÎJލü„è#@�*ôÉÚœ?¾ŽÎ¯‰vÌ$DÄíc³W¤¹ Næš‹ËgøîÏS}âݘÕozÈ¥�•pä€ W<@ Õ‚@‚=Šº $УØÑ¯c–0Ç€ÒÌ£ƒŸ~ö‹äÔÈ 92·90ÐÚ7õè þô¸|õ›»z�÷{”òºT@‚;ä)`�æDÀÐÇd Þ 2÷�¯ƒ#Xÿæw9ô¡�ØÓÝþAôºàÑ@Š!¯}\Ùwù€ÊŠ·æÞs©wÿ�#=ÝLsƒ?!?!"ýGÜQ¤GͽŸÎõÊžC æô;1t©WåÈVÁõN A[ù† ¡ �?8y@ô¯€@V�?vó„TKöô9ëßn¸éªùKwï^¾ß3 üÄ= ù+w?{ù>PB$AV½¸Q¯8‚PwˆN þ APÔê}\ßëoÿT75Jˆ}?‚?‚AÊM‚6‘»| ¡ó,Gôpÿt÷”³ò­æ½9€ @¥�Û'EÏDOЧ�BD€d ˆYˆ¼wÿXÞÂ?µgrÇO¹ýÓG � Ø£¼¿d+ßÈØ“¢Î¨Ú��»~Ô£657¬Ô1÷�zÐC̾÷Мâºé>ÐôMßôMßô�" èÊÐûC³‘úÃÐ7O÷�¦oÈõsnè«~äÿØñFI¹ôÐö¯¼ëï7~ÅOrv¤ÎŒ;/›/ûÑ4ªÝä«Ýªuì�zD`¢6UÇ�îú4µ¢@�¢¹"¹KðÇïù8”5n @¹DÏÝ?ª{Ç�"*Ò[9~B@ÖÀÑÔɹÝrÑÂ$eîw€Ô7ÐC-0ļ¬� uîrOŸãöi宿ýÓÇ^¸€È›;@¸|JàIi®\µ€�bç2øãÀèCn+àü�»èI�Hý„¼‡¹¤šž¯É>¬³ZsseÏ¡�Áž„ZàÓËßTØCí°ç3�à�bYûÄq„ëÇ�@õÞos 5bÖË?Š©˜Ù¸:Üö1i¥›9ƒrV!q¬; zÍù3|àC$’Ýû¢25«àZPæ‚?Oý¾ŒÊ§µpÓ7}Ó7}Ówª€ o ý—Ðl¤>zàô“›¾ü~Î =Þ€yu‘£=€–áÊÙ×½ñOOäò7l;÷z~ê¤ÞÚråÛâ>Ð� ú„ReÃásÆEÇü,D1ºµ‹ |üøÜ’Ñòtÿ]qþ¬�uo ›vQ¿ß5ìÿóUñ¯!+ß<‘+*GÅýCìP�v H è#ÔÈ@OÔ i 9ì±ý^?8~ üôn½¡fÞÁ¤ð‡\s¿óØ¡îççà‡Ø¸~ÀG¢ô4�Go|Í[Ÿ·+àü f’;J­Ø;�XñF]ïþ˜É˜2„‹§¡ Zùr‡@ÔöxrÐÃ@�Ýм�>Ÿì¥ ô ½gå÷~F¹\æøQLåìzòHæôÉw;Ì€<¾úM}‰žÕ€Ü>ÕéÓÕ~T·7È¿&ó!$ ’KäªN ;ô¸ûCàQ¾·5¢ÎëßÈ�?z ô‰\0§B wû¸4'€@5GËw¶èÁéCì†?@ =ÔòÆ”‘;@.Þ�¤á°S׿©'Э8|õ›DÝCEò~Í›ßþ)àeÙÛðc«Ýì}w9ê?Šë³ÿë·-Ý5 üœ³ó3 ç.½qí>,!ºl8™ãÇÅô)@¨ÞB¡Ö ¤wtJíQ G¹÷{”ûš7À�¹�üH‘9ÈåÎë13Àc·˜¸CD�ÈW½qç‡UpY+V×�rõú��N>ªé•û?Š�ëçOÿG3ŸÎ„£‡»@Y«gõwªgÐGòp€C(ûDTnÿ ~B€Ÿœ¹z€¨…@ô€=$0¤è�§æŠ%ŸK)Od¿.gk¦?ô™¾é›¾é›¾SÍ…~(ô¡Ù}6ôªÐÆé§wzƒŸµáöyTÄ�€ŸV|¨÷XŒ»@@³½ëîsúæ?9Ñ?Ô?ûü—ζ_û3'ñ>Ðf›pÇìL`Äé§åõkyÂñ:¶ìø ½"P*fó@þ¤äúÑ  e~P õ¡ùÍû¾˜ßo€£¥O­:oß_¯Š5u €äª+ß,Ï(8tΟÈQ¾+5°§¿õCìa½¨üQöüm?=䉜wô%~ h”ãÇgU�€?HP‡µpÊ[Dž`§[G¿ƒ=9«7€Rô€?8�è9ªõЍŸÌM úÀ倀�€Žj OÈkbJ §w½%��¯‡C�ÓàꔈÔCeÝP§©;×3zäI€PÖ‚<ÜùRž±Üÿ©®Ÿ xˆô$Íp1WO 'r‹)½©+àúHYãö¡‡zÀ‡œoÕðqáú©Ê(ðC”pô¨o7~jŽ«G9îžœãð‰¹do U��Ÿ®ð±Z. wõ™UèCìÔ;€?侎œ5pÀ!žèI¬†ò4w€èáô!G8Ê3€R–… ð�qúHÌé òd(¤¾zõ.P57tÍDб¼Š~?ÑïÝ@½û‡X�@Ÿ^kŸpèsÞ¼8r×x@¢;×?zß×®8})w؃pü(7Ø3‚¼®¨Ñ%vÿ§®‚«p(æzcàÇsd=Áž¦Æ$ˆð) G¹ê|¯œ÷úd „ÛY/]>€"»õ³¡›@„È þT¤yuþ0Se�ˆ°CäPÈ]@€˜Óü´«ßR䨇<Ô}ò~í¢Ï¬ !àãЈ9R]Ü@¸| ù8½1©Ï�@Pö"~€?}È­ß ïImO. ”à�òu§u8Ó7}Ó7}Ów*€ ­¡;Bw‡f#ôáÐ÷†&gìi®øóÜöìK˜£š¼(`OΊ€p×<êçþë;ü㉮!ÛxñíqèΓxèçfçø8ÝîüœÐ&ÀO¸~^ ™û'ràÐ'jÀOh}Â)æë¹”qnÙmµñ‹»¿´þÂ}²jûÞ�¬hµzó^@Ç~æ{Vœ@¡g³úÍ�?ôü.P�©œz–;D(j๠TÁýzï‡^†,è(!»õC”˜áþ©0𣼠ÇâŠÃÇzÍm Ö ä«ár”ãRÏÞäLyëòø(³ЃôôŽŸ~œÜ@9‹(á2 ²upÀŸ „P†,øA¸˜»ó‡™ú¨q±êÍnÿÐìQ?¤¤¹jìiV¿1«j uˆ>9qpÍ[ßúDt ê~ô¶…@ô$nÿôQ$Ç dRß�?¸�üæ�µzuŠ~€P‡YÖH`§½D 2àÓß"' ��¹‚€C¨Ü¢&Gò§w~,â]…@Ê àQO5} w� êàBy²&¢ÁÕouí›r�Ÿzn j?­+ÈWÀQûýrà. ÍUww².½±7€\·l¥[H=õ™I«¿ë¦kî¿û…‹ÇýmÂX ÷»±îiùëì8ü!"ÖÀ™Ž ƒ†Ö½Ñ§çØA8|,y¨C¼/ð‡÷í- œ?zd\öÍ!¤ØDàCmàÐ#¸ÓD@PhàÐ7°8dÀ'cB~¨BêÎáÓ rïoF»,OÑß’qþ ßùy�h ÈÖÁ)2³@æöÉœzRÕõ£®nýX/ø1�Þ®‚È1àÃíú{‰ô[Õ•o½æ|%î ÐºÈ'4}Ó7}Ó7}§zHèWC³‘úÝÐ×N?¹Óà è³5ô¡ýºõ#Ô‰zú0Ste„v<üƒŸ8û¡oþãÅ�KŸ?‘?ì?3œ"›/ÿ±“ºnÛ5ïšmØ~ó)ççŒ2g^üªeð:¶ró‡øŠ\ûVÖÀ€tûg.$çOöµ .£¹�¶‰ö‰ÃŸù{þvõ…þbõ–gkVÐ_sLkßø¨ðhÖ;~ª+øÓ D�2p(ëîî�­…оôNs™ãG=úÌkâÚtOD@ˆþУ�*àq¤œ>áþ±àcQ`‡ÄL±ÏýæΟ')âú!'ª�\ÀžÐ û‡œ@¬}ü%�çôÆ»�€=ô ø(²¼@dNV¾õH�ˆ¾CŸT“ãêá�jä0ˆ‘œõo¬zÃD�@ôêÊ7�õ=Z§9·øô+ઈY àã÷}?ä)ú{”kN¿ƒAuå[Ö­ãÇW€èrˆ9§¶Üîþà2àì¡}@-Rtè#éžOö�=ùÎÀÑú…"†¨>�â (DÄ„²Î~½DMNü¸èU·�Þ{ ôö ìu}ÁDÔæÍê7òfõ›Õ)rêÆõC} 1zæúž›¯š¿jÏs7íü“‘w~þjþÒÝ;WÝpÓU+À'"@g%¿Œ:rú€ _ý†²�xj!‘ÃwöàöAÑ75=‡@ÀŸIÔ@{#Ð#Q;àék è3°î­@�û‡žCŸq úÀŸœgàÇ!�A¡ˆ¸|ˆ°§©ëß<©âüXÑ4 9ð±^ —µ;€ìü�~Psû¸ÓÖrIæúþ¨.ÀÉùÃÐ#ø³R—¼ òüXO±ª Æ4ý-è雾雾é; ÐêГCš�Ô{C—L?½SÓñ³ú†€<Àå!E O×Sä®‡*�¼óî<ö—'ø‡ÿdn 0óΓ{芷ÌÎÚ²ÿ”¼ósƲãçþ¯JЃŽúÂýÃýŸ„@ªS €¤=¡›—¡�V¾Ý”õü–_ù¶°e×ÇÖ\rè�VmÙ÷ùå•o‚>@7΢‡HH·H3j à3R€�F¬ƒ©_׿ åê^šÕuoªÒ™p* b戺¨ÞþÁù“µr€�f{L‚:Š¡ÆtøÓ¹ÔG€ƒ>U#WÃ=e ôizˆÇO_W÷�jsø  �rÜ?ôBƒ *‡CÀÁžï›{@€Ïõ—OF kÞ€=Õýà  ˆ¶úÍ@Þï×á±P؃€@ÃÀ§C.‡@€¤ž Üékƒ=Åå“І>«Þ²¶Þ×�«^ðG"ï=àà‡œü1𩎠½1—OFêö>�ú©Þ飜º¹ÿCô zä#œ@vÔ7øR�UpÀü1×�f€Í=?Ìš[?н:¨é_'u¨=Êí“ ˜CθÌuøàú\ÿ†è+ðQMTß]?šx˜!>½+ˆpsß÷/·ìüw#ïü||á‚]¯XýÔÃÆõ³ $Õ�Ç(Ðqç�ÇA¢O~I@­ó‡¾r`O(rœAä)�þøíf™ ôàŠœ:e (ÔH°ÇàO;S ˆ“ÒÛ…rV¡Ï8Dîu±wý(†üî«Þ˜õŽ Z æà’ÛG3wÿTÇOôÚh>ƒà~\oRYãðayÌ�A¼i´AÀÇ£÷SŽ Í²à±Ð·Í¶?øgOÞZ¸ëïœm¼äµé˜9îüœyÑm~^-øs,�?g^üêÈ—�Ð+Sr¥Òý#Ø0(%ç0(b8~L ‚þÌo=xÂ?»…sv~~ÝÅÿpõ¶}ŸX nYáþqç�”(€�ÄŠ7j‹¸}BZïf ¨®|#’‚úõoˆ^F¿ï“uÈ`�½É>Ña3©sùè}~j_3‹9>§ÇÅêüô±Üå«ß$@OŸ§ÚÐpþƒ¨+øñ;@ˆÈqý´ðç=½øtz�$õ¹ïãkß”3³>¨ÞJ5ð§é ®�«zÂPÄíƒ* "²ê�Up�#(çÔ…ŒäöÑ ÷Oçø‰~B›œ�A({wàøq2˜£yæ‚@Í„pú(².D¿®‚K˜c}ÀŸ!q¨FÀPq)ðDQ¹­†rCæê�? r”‚}$ƒ=RöºõoCü{è9BcV¾y§QøñwAš±ê�@¨]‡ˆ•o!\>ý= î�fäàq]7b"7¸£š^H¨Þý‘¨}¨t†Ü?’ ó}$ O ˆ4CWÑ 9ðQOkà–㺯;øU‹Û—Þ3rgøçw,½sí×ügÀž� P ~ž×ƒ ä}Aqõ´@(çäô òµë0 hP}è;àñwÌlÝ[H5bŠ>À§— �Ö¿!õöôð‡H€ˆ�³Gýîþ9½�`Ñ@Oô€‡œN ”5ÚL¸ù“à‡N f8~ˆC7€R‚=ôU#«+øAYop�C 5�'b‚™¬õVÐG1�@µg ˆ¼]guuÿ¨7| ¨®…£N £þˆ;@ë�@ÜRO@H1AÐó¦µpÓ7}Ó7}Ów*€ óC?š�Ô_‡žšþBÄ—1ü¹$@Ís"&Ô‰¸?â�Ê%z¨qý dhP;öÁÏmüŠŸúãÅ-{>yBká6îžmºäu³s¯ÿÀÉA�~fvöù/û²½ósæy·&ô ØCð ZÎøhå. Ýÿ Ø#}"_Ž…rí[¸ŒÌœèïyî‚ý¶æüCÿmMÜ Z³5à(£ Æ”"7—�jz=Y—û?äô]¸{ˆÀ×»m>äìÐC~ïG=jr@PÔb Ø£÷� Hj!�»~¨îþÕu¹ûc÷€ÈY'Ðc}ïQ£ ‚†Èq(TûÊ ö„TÓcŽr^Ý>ªôäÜîú!õ€=5°‡H.ôaÍ›„ã‡þq×½Y/ÕÞèafÀGpÈ{8ƒPÔæðAíÍÁz8�˜ ©î…¨‚ëÜÿqðÃj7êŒ8€€?y"&˜¡þ}ä¢G̾@�çŠÊS@sÿD�¼½„뇜:�NöYýVîÑÌ©w�Ô“ÓGP}2²ö-åkÝ4Ï\=ƒ?’ÞÑSnõ ëG0g U×�ב³æÍœ@Íí$¢Ÿq@‡*ðñ(%àQì�?DVÁµw€ìMÖŠr† z€B@ €Ž÷ºuoY èHÌ¢¯÷™[ß]@Wµ½zàCZó´£×‡‹çÕáæùÄ(×ÏÖ�¿±þá7>^Ž¡>¬|£¦7àþA>Ãù#$ÑçæOY§(ÕŽŸøT�êš»€?ô�Kú�Ó'Þ%äQ´™ä. õ îhf7èÙú·¡âò¡VT�¹j�¾à#áð1@„ËGs½mÁPwOBðñUp¬xÃä=ˆ¹ G=@‘5pz‹¸ dî�Dmê’è îHÌz�ƒå­ãѯÀ§ÞR]Ý@ô�rƒ;Êé×è3¯h0HšÖÂMßôMßôMß©‚ú¿C³‘ú­Ð#§ŸÜ—øÙzÊ ô‘?¬�K€SkàOÖôj”û‡œp#µýüØÙ×½áOío!Ž×Y[̶\ù¶“ºnëÕ?5Û°íÈ—É�Ÿ¥Ù™;n™�uñð¹}&ðzMÂÕ€øp(c:€pþ„€VêÌuh.Ö¾-l¾ñÄïülßóß×\|øÏÖn;°gßl¥"Ï:¤ÕoÀŸPÞ2èê·Œ!€�¢œ@€!D_J—OÑsл¥è¬¡Ç,ûú5- ø„¬ç7€>ÔzGÜ!ÒkêÆT¡ð(D]�?ôéÕoêS“‚ö¸¨FàÏ@ŽuZ�rà©5ÊYB�+gæ’ðƒ‚ öHfôê�õé9ªÑWÀeÞBÀ°‡9=?’úý½åÍJ·º °²•pÀ !(T{|î §OLÝÊe¯¸€?VWý¯NV¼!A�:ô ú0cÍ›ä àOF�~�jsEM¯È��œ=À­…£Ï¬[ý†ˆµoü(§&'" �ƒW âôn frû¬¼ÃìÑ{›áò…pö¸ë$)g¦HŽË'rjƒC}2oêãjA"°ƒ"'âîÉýk%‡?![ÿ¦ŽwùH^ ðŒXäQŸZYÏÝ?ÊŸsóÕq·gOÜïùÛQàgÓÎÅ] V}ïÍ ’� �¢õ‚zWÀÇ?Ê»;?’ÍÍý3ƒXëÆÚ·Z#ÖÄùÍwú fÈC-ÉÝc�HP‡w€¬üxðIEŽ4î�Ç[¿û#À}rE‰ºÂ!‰y�èpTVÀetzèõ«ßè9üanÀ‡þfïË颯Zy öyÜD�ú;{ç�I=—õ\ºõÚ7r>ÙÃå£_S׹ѣï5y=¾ö-s¤÷Uzgh hNµÅì£i-ÜôMßôMßô�"hM虡¿ ÍFêm¡ó¦ŸÞ}ü̇J¨3ÂéðaFŒê¡Š^€ÆjÛWÞùwg]öòòÈñº_@ŽmzÏIAœm¾üM³3÷9�¹íp€ŸW ðúèQ”^)ð£(¤›@rÝ–Š\àè#¤µo/œ-,¯{;géÄÖ½mZúäºýÃÕ[|nÙñ³6þµ2n‹ˆûGèFî)®zâíÇòìAê"š£'zôÕÃäð§Ö7‘ãòéïxS­ÈC_µ"òž­uS ð‰µÎ€Û‡~u™Ã§öȳnÝ>È�w~"RÓãm>D‰µn!�šgN ðQàCnu ‡|îå¼3ðÓ èãy·æ i†#ˆ<ÞüÐQ_µ"€Cª‹€@äÔŠÅ 쑺Z §Î?š0TA=€Ouu«ÝÔ§V®àرž OÖ©¹ó‡\Âý£œˆ({Ä�À1ôzå:ê ø¨ø©0È3´ö- ND §O?y/ÑÏùê7J'ðÇ\A!"ðGQ2Г=·úõoáþé�>u‘s ì áR.ñ—O]ùÆ,Tnü ÎùSÞ ì�£þtëàzØãà§¾3W÷2FßóŒÀàPÖô�ßê��¹ª+¨®€úHÔä=øq Í]»÷;7ïüýQàgãÎ�,\¼ûèªgÝtuëúÉ §É©‡Ü?l”wúUà#õëÞüpGyÊ¡�Ýùi”³á ÒJ7൤^ ØÃÚ7òˆªÉ‹4àÁ$ÀS×Ñ EdÖÝýéAµ÷Ú8è Ùê7´½`'ëâþ©°‡92˜£÷ªé#`O©�>ÔäÔ&Ÿ*úä?©¡5p€ WçþñÙM �$Ôæ/HáêÁO»òMý9@ òÆé£šœØÁž¾vGP¿ ÎáOçšÖÂMßôMßôMß©‚6„^úth6B í-L?½ûøYzHè¡ýÒ>‹¡ xR1÷•oê)—?¥~Q}ЉjËo WÏþ„K³s^ì¸îçOÞ} ‡¼¶ñþ¯I§Í}ü 9ë¢WÌκä‡gg=àµÓý“QΟŒ8^‘Ž@¯È\ëßRrC‚@ æ·ù¢n$͇ƒgݶCwôI·ÏrT>“Òý“ÚÌ ¸�ßø©«àpõ˜ë'#3"p8D݈û?ÏRm÷~ÔÇýS]Auœ€ò}ý[+ÁžŒôþè 5vý}$å’ßþqEOp'b ÈU“|¨Ëº7åu,�ÙÐÍä�§+àXû¦~©€è7kßÈq~¤[J.À#qãÇ×ÃeÏPö|æð§‡=ÔÞØôT؃¢61GÙãÞˆ\sSB?†äB¾æ�èC­¼ÔðSEŸdjzýJ8 î[û†š5pîú©€ˆ5pÄu+àpý¨ G}ÉriNö�ðqGN �ÞVøƒ@�»Ç{?ôGÜB¯ÊÑáÎð Ïý�D×�æÔ·!‡=Àõ æäD�û‡\`¨Y—±àÓ9}¨+’¼ qHyFàOsÇOÖʑ͙áúiA53ÞûZ8äu�|ÜúÇìÿ†ÅmKÿfø9gçgÎ[zãšyøáæöI©äQ—›@—¡1 w÷¤ôØ£<4€\@š™#¨B¡ÆT…¨Щ.Q9ì {ª ñ¦[—¹ßbàћ̫ ü´ªz­ ¨‚ îÿy²¶ÜA¾"N9bò:Þî0�eÍ:¸þ.�÷ ÇsV¼üøàü!š[h ø©7€ÈsVïÿ�g­¨^{Èû;?ôërT�?Q#îûø- wUGÐÜ(o²u7€Ÿ·n9W\¯Þ´nú¦oú¦oúNô€Ð{C³‘úÓГBÓ_ˆ¸ÀŸ CÿðÓ@Ÿ¬¥f œßþAÕ Dl€Ð €ÐŽëïÌû>qççÄHÀ„M—¾!î}ðäݺö§g÷;ïÖZøä¬ ^2Ûð€×Uð“JèsÉíÜþ©º(£Ü?Ò…!neLøsÁKsåÛBÜúYÜ´÷„Ï ñïñúXõ¶.ÒÚp,­�\Jè£È*8¹€VmÞù>VÀÉ”p§ÂA¡Ì�@¸€B@b¾ë?¸y¬Ç;sµ Èê’jï9"ð´ˆø ê’÷÷~è ò0³ÚÁ�”o$úÌúxžÒª7=êé-À'doul¦H(”RÞC ÅþÖ�»|@Qãøé{hå °G}îõ7€<ä¨YõÖª:|è©V.胂püTÄ� jÜ?ˆÛ@g�üø0¯êï+ú¨G.w�æú˜óGÑæÈ$èãö�GØ*¹2؃èÕ;?¨Þþ©+àˆ@Äj¸4êñ6ò …¤„6¬ƒC¬„S­·»«û§Üø©÷€*bF°£öHô'P „4ü!o �œ>@ weTÞ­wÓøS{Y‡ó ®Sž3ü©káÔî¨Vìàn wû¨¯ð‡º:||ý›GŸ;rØ£ès¿dj>Wuw€LÑ[û-‡¹pÞ®·Ôùì(ø³méýë¾jÿã%Ü‘¨BÜ„¢–£µÎ¿áþ¡gâ�ä«Þ?{˜ ;¼×¿1�r[ï&8ä §¿TeÐÇO‰è¼~]HèuFÉfòô. õ�:©Î ¤\ 9äÑ[Ü?½ú[@ÈÝA‚=¬‚£ò ©uôЧfî€GpÇÖ¡¬ ôè=}EJ‘ãöy�BÑ#’'¼‰<Õƒê¥æöÏ9²;@‚7&sý0ØAÔó‚;žû= âþ©HùSž7­…›¾é›¾é›¾S=6ôC³‘ú•Ѓ§ŸÜ? øùåû¼ùV�ìñ\°'Ur 8d�ÐS]?÷BÛü³³³/xù Ã…³¶šm½êí'ó>PþóâŸ{’áOÜù9÷–€<{þl údø‰Ân (a�\@åPŸE9µND‹áZ¿eŸ ��Ÿ¬{äþÙŸ®E»TPãüáöÉ~̳—j¡ª÷}ˆR³NÑ`�À�ÏÕ¯kàRÍj·¬ëŒ÷iRŒpgÜú· €”ÓS_b œ ç½~ÕN ø“9Ñ”}�_ý¦8Dd6ìü±^ó8ä2—p¨uú ?rÁEVÀI¸{Aˆ@îü‰:#¢.«ÞÈ›¾C P€J×ÏJ÷OŠoʇoeO'PÖõU¨º{™Q3¿#cuùhNmsžiîà‡¼:‚põ¸Ã'æÌ$Þáú‰œÚÁQw€"Ò—;9Ü¡/9 båÚã. ú;µ`PŠÜïùê·œwÀGΟ ²§™årü4«ß˜5À§ËûáråL 59°Gödloÿ êúñ*ÐG=> äqÔ¯ÃíÃÌ`PΤ¬Õ+. Þî(—ÔYD�ÃG=j»¤ºYÿÖÞùÑ<òÕÿêækî¿ûE±ÆíFý÷°Í;w߮Á:Ä; �Iý!Uࣞ!ÕëàÊ™Eîn ÀOô†`‡\1ÕÞðèi\?€æýÝë§�½1øƒ (D.gs Ô(æ~2¢øà"׬uýÐïWÀ‘»èû  ¬• è››@€W€¨é±îÍêz8Dâö°Çr½A‚:}\€?ˆÚ@�×;ùü¸ŽÍ©Íý*hÝthú¦oú¦oúN´.ôÜЇC³ú|èõ¡­ÓOï䀟õ«ÞðË_qoÄ÷€EÁ�rú½ÛG` Ô ×�׉¶=ú®¿ùRC•mW¿s¶aûÑÙ ß X�“�Ây”¤p"�„;?‡fÞÈõ³, 9€.¹=ÅýŸÛ#¾ÚnE,®ŸŒ+n ”ëÞ–NVÍoÙ—Ž×Ñ„=@äyÿ'Ý?‚? ~”ëÐf 'ÿð1œ>ºóräkßô0¢—Êpûg„HuãBš ú�Ë%ÔJ`‡•p¬zcîpH1Åj7n)ôôîŸÌsN¿Î½ö•oÞËh G=rîþ(wd@¨�x€E €n 僮ŸT…>ª­?(îýPw ÚôH:Ôð!gÕ[uYñVk QDA>�x ܉9èü,K. j@�ÕÀ ¢=9P¨:~rNmîŸÌëJ8¢Ýþ)ëݺû?’r¢ÍGÀ œ>ˆ€¸C/ç!zÕÄ�­zkÖÀIæêi×ÁÑs$Q{ÐØ@Üýqøãkà¨#ψ ÈÁ�êêê�AîROPGR¿�=Ê­îÖ¾‘ }ï-WÏ_µ÷û7íüÓ‘w~þzþ²Ý;ã×å�à�ç¸zš5p?š#ͪŠóÇVÁøÑ»ÑÀG²7¨ˆ•o}, Y¿wúP“·ð9$’Ó'k �b3 O�}¹ëóˆê«â @HP§BDzü0§® —�bêFbôw~X§ÚðÜ!¶=ÀrdÒ?¸zj_þ(ïйêœÐÓ86ÐC¶ ®BìÑú7sÀŽ� ƒAêuÎë‡ ôXQµ»~zÔ� Ü>¬~˹rfÀ z¨‚žTß#J¬…{Ês§u8Ó7}Ó7}Ów*€ M¡W‡>š�ÐGC/­Ÿ~z÷ü¹& Í÷ãöéð‘Zø£>y¹äµ¢rnþ¤Ì ´ùëïú�{¬|p¶ùò7ÏÎÜ|㉀‡|ÄÍž“xèýH8‚~éáOü6Äʶ —¾>tÇ2ô‘^o (sVÀIrû„ó‡(bJw e/Ö½�ñE@­…€5ëî$ðÙqSF×á¼ûàGñ N ¼ÿs£œ?ŠËà'´=õµ/¯wÈqýؽ­S_P§€!Õã�AÜÉáƒtHýüP÷·€ ú„˜#›;äQî@(E¯_§»?+±Š G1¤hj�@¾òÍs»õcoèuká|åЧF‰Ú êzüA ”>–(ßøŠ·ÈQ}ˆ1WÄõâ-@¨3xÿ‡žœ=žS9ƒ ø bÕw~Ô“º5pDàŽjr›äi@P/Àîë7ð‡¼@S:AY›Ó§qþÐCþ8ô¡˜¹ë'×Á!@0(à½tþÝ”2—uDêö¸øÄÛ¬åöYék-œ¯ykaP $ü‘†ïü ëõëÞú>ªÀÇ¡îØÜ¿†û?zõÐJ8ÀOãâÆOÄâú!{¸D¿…@è¡o §u;Uš{²à‰ÜêŒÌƸ€ìöOzZè£>¹@ÐÜÃö}ëâ–�¿5òÎÏÇ.ÜõŠÕO;r�`ÏåèaÝ›ò”Ý÷©ÎŸ‡˜+¡zH0ˆ¹ ©uþ¤T#Ü>0È4æö�÷Pëø!¢ q)Êõ#QG´™rîÿ‹ ¹+Ènþhf. ”ê;·Ž fÈ�P§Y‡¸óClúƒîà�êÌÎw‘£Ý¨?抺•à÷~\„ü�¯zS¿sÑsø#ðÃ;�œ?Ô!V½÷=`N}P}› DÎ}Wô¸„˧CêÕ[@Ÿ{¤õDr¯{$ð“uÀŸµËšÖÂMßôMßôMß)‚®Ýš�ÔÿúÆé'÷¥½ó³#ôLœ>�ó'Ü@Àiàö0hàÞ�ò”÷¨ÓDoÃwÝõŽ{ª$ÀÙ¸ìbÙ¸ëD D¤Í—ýh¥“ºî�?9;ûü—áœ9Åÿ›ÏÜ~4ÁÏý.û‘?÷ ÀJð“º4”HðGëàÂõÃÚ7 è#5è帀ο5V…ì;ñuogæî¬è øs4%çO*`O(�Ü?—k­|Û¯Èú·Õ¬�[ÖçVíù‰�+ÐF (£Ý"z�A!){ð¨&ú� º ®uü¨ç÷}È+ø¡ìq$ îTØA9î<ÓrÁŸ�[@æ’è+† )—¢‡¨‹úõoªàƒäöa jDDZÌ:�¹ù£>Y=èŠhÎ V¼qH`ÇÀŽ µÅÆíÓ:… P§ÞB�§Þ$±ÖMµrE �Ä,€MDò”Þ):ø!Z¿“æ@—Þ™ã§[õæý¨Môò-·5ÃñS@Ê}å[>Ýýåôw?ôi¦û>¬{Ãd. ÁCšãâPæƒDBDå=ÔƒÚZnõÐÀ­D­wy¨G:€vâì¡VÞ8€>‚;ÙèdŽÈÀO+½³uo¸† îdNŸ^ó§A¨‚ŸÌéø¹–7î JEèÒÜàŽê$àãð ©6@Ô‚ _·îë~Íâö¥åã­w�YÕ°¸cék¿áà£wXù¦ÚW¿‘»Žçô©95ô„ˆô™y.#ôésÁê¥XGl`O;s×OÅ”fÝýE‡9@ \>Ì{àSïþxÐ#|�A¡}µ­~ð!º9²7øð�d°'kå’ú-øIv6«¿¹wñÎ�õ˜û?Ä^Õ!Äz7€Ž;RYWDäAêwˆü¬Œ¬}ëbˆ•oÕùCŽûÇzˆpCµøqÇ ÝB8�šhŽåY[ßVÂU DJH4¹�¦oú¦oú¦ï�@«C�ýQh6R¿ºbúé}_@�3ò<>b�ˆR€T{Üþq(„ã§ÆÌQïþéîÿ�G|í/²î^Ôökß7;û¼—œ0”ذíH@™Ÿ:‰ˆ»F›/}ã윋^5»ß¹/š�µå@®E;.ðÙ´wvVü^ïÐçìËö\þÆ€?oHø£(è“À'ë€>©Xý–«àäúÉÚ׿%b\(€�;�¶ú¢€Õ¶C xüH7KéZ¹ûîå3j\ÂA![û¹¢ÐG~[à‡•oøÁñC�+¨¿5s µV»U$È£9JÈ¢Æ%Ô� Ô;|ê¼»û“jÝ?|jn=Èsà�4ô ÝüQNl]Aô�?ª‹l-\ãþ‘a9«ß»õoô ö ú‚8CÀGQbå[ÂzzôÆÜ@ª=ä¬y£&¶«àú»@Þsàã½Ç{öP»Ó'{Ô¸~Bªô¨Ñ�AмkÜ?co)ŽXýf¹C¯�@ú(wÈRŽë§uÿhŽÈcÈV¾)G€ fŠZë¦HÞÕ‚B”"·Ú5€Èá�Ü=5J>ÑøXßW©Wo€?�HÑV¾55*«Ýè«F®ºúM9µîþð0/÷~²G߀�„ëpÜ‘*ð©@HÑa}ÎrE ð#¸ìAkÞ²ì¤T×^|Ôö,×ÈÓé"½5O;ú°pñÜnžOŽú 8[—þíúGî{BÀ�­ys÷�K §ÖÊ{àS{= ²(èã+ázszøCÞ×¾Þ t õ=M Ù *œzçÐG5®r««û‡žI½„8‘�ÔSô»?¬~ »€:çsÖ¾ižp'£`�ÃràN«;½ëG9ŽŸÚïï¥Æ “?D½þ‚"¢¡û?Üþ¡&Ï~€ ô¼ MßôMßôMß©‚æB»Bÿ34¡Ï†n �=ýôþ÷ÀÏÚUoø•GÔÙñ à„«§‡@Ì÷OÌ>Má²{@-ì¼ëÕ;þÁO�$gMÀœÃ' )•óÒ€2?s²n…ƒéÎÙŽëïœm¿îçfÛm‹ö¶€Y›®zÛlãeoœm¼âÇf›®|kÔ?>ÛJ]ù¶ÔÙ—¿é8ðG®nÿD­< �n)†ä à“‘@á ДñÜ[pY�€ج?÷æÐ-¹îm.ÖÇøÑú·£éö‰\:*tdüúèþÏþŒrüd(ÀÏž{âö?ºjçÛv%ð‘p± .{H}åüøê7ÀNç2àÊÜ!л ò¨€<Ç‚ z¸}Èøôn RßÿQÞ s¸ÑŒ>È£€�;~2¢v¬WW½õµßüÁ¤ÈÊ·p=™(Q›È…‹Çzª™#Í©™;’ë'"yXÿ¦y…>êÅÍÔÔŠ~=Ž\@Yã ÊÜ>‚AÜÊwÊÑ0øñ;@õ]ëüðQnHÑîþt0¹ ÈVÁÕ›?Ì�@š'¬q÷�z)õ?D‰¹‡P€zÊæ´�ÈÜ?Ñ2W�„㇘ý€8ôV`�Üáþ�¤~[“;èñžDŽzÔ»~õð9°‡\Š\@ âÄ\‘~@rÕ!ƒ9ô#g&|4§&¾DÏ@�jÉá�rj‹¸|€>ו§£GµÝù!ÀjÖ½1 |ìÖ�zßóÂÍ_ºûƸßó·ãœ×;?4õÞäJ|"Ç d åõ¥¦–€?ª@Cðà3ìþ©ˆyÿ°C ÚBNŸ®¯8Âù#èÃ:¸ºòMÂõCÄñÓ![õ†¢ôá `'sFŽŸ×0§ö${SÖÀù=Ÿˆ9W/çuå95°gÅõC^áN I¿ “óñ Ô»ú»?îðÑjS~R}n`'sEÜ@8}Xýf9øéôñØ Àƒ~øä[êTYgµâÐú7ET]?îö±¾ÍƒR šîMßôMßôMß)‚¶‡Þh›†õßB7„ÖN?½/ ®èó<œ>!@ „˜5àÇzÇ»ûC�9}sUõ}¡@k–~ê¥ÎÑ'tœ4°²9àI¸eNØ©²ñâžÝû¿ßæ »íù…@?Ÿðgëµ?=Ûú ÷ζ<èݳ-×¼k¶ùšwÌ6=ðí ~6Ü:çÊ·$ü9'ÀÐÙ—ÿèL ëß^—0H+ß–c‚!ÁÅ?DI ($ð³ìª ÈrÂëÞÈÌè™;ïE }…äúArÿéæ�Aªåê7� iÞü‘ûgÙôù5ßxìŽUÇ~æ{ŽVzªkú|ˆäüƒ$ Èîúè]çüé!=¤2Te«ßp¹H9µ¢D� ä¡GmðG¹ÁêÈ‘¹:P'@È\?Ê04èú±>óaçÐ'{+5¢'²Û>æ2PA‚>À |ØÉ>À‡(胬®îƒ>MñÆzÅñøQ�¹@�æä¨¬Ãå3‡?äîüQ-ÐC> ñkà¾Þ"�Ç>z£µN �å¡výŽ¢€ààãq!œ?ÍýÜ>(êÆùã¹#(„ÓÇ9hÌú7wý€pÿtð'dÎ Ѓó§¸5§&v÷�z4 �BäÊÜ„#Èû?ä·°ÇÝ@Ìè¥>8ƒèr�ú¨¿„?¬~S.E-؃ª ÈVÀQ Rín <É}nî@’ê¹ï}æâæ�ÿiÌ @ô÷ —ì>ºê»o¹6AöDM*N äàÇa�z‘[/UzZñÖ ?Ù�?öØÃÔ8„p)§æ>Ш5pyÈ‹AÀœzÿ'ÅÌà�A—úDƒ?¾Îoý¨/ècÔ±ÜbŠÚá�¯|Ó §o ™ÜñCLá"Õ›@D OÖ8}²‚=æòQDê!ÞYîkàŽw(¥žßùɹj‰9 Èîþ¤ºZà0$Ñ|ð¸H䱈šyØÃÔ8„ÜõCÄd³àSÜ@3 �CŸvœÕ-ô‘èç½% ù õ€>àCnQ¢o�‡•oˆuoù†Z±_§>þx”ƒÈ�@ý= ‡>YàáøaÕ›¢DÑ#¯Ððƒz”sçGÂ2èSAnjå€Ô­}S4Àƒ(¤ž NÖŠÔ8€ˆÊé ð(:üa†ÓGsvðC ™ÛG±¨:¼îô`ÈUA�õäH| ÒÝ`�;‚>€âP‚ZèC�ÛØ#±.szãäð7P¹TW½‰Ô7÷ Çáϰ Ôh€€>ÒúÇìÿÆÅmK¿4꿃�³óÓ çïzÚ'y€ÐC.'½7�2 öy2'×õ3^—™F:jßæƒb œr@w‰2³N5R-àƒpõŽÔ¹~ˆº äw€øÔ»@·OÖÃ+ß@=ð©:.ô‰huæôüzˆ@æ_§¾f¶ê�HO�Ðãb]Ü.dàG¹DOR�àÆk �z�ë‡7îúñ(wOA‚:~ȳïν¡‡û‡¼dðG©7ÔOÀC±ò Ѓæ,¢ ƒ üð(÷Uo¤ˆøãú¶ï]3¹�¦oú¦oú¦ïºôÔÐ_„f#õÎÐý§Ÿ^||Bß2wOJ5=œ@Õå“y�sõBîüékÖ»UÕ›@Šë¿ñUï©îšM)Âýr²@PB§¸¯sâ÷�¶ß<Û@æ^p ݹ²þ- P �@ïþÄZ¸\'„ûGH ””à'¡�ò•×Ï«rÝÛ™Ë1 ÐìDîüžÍŸÿ’?nŸt½�õ.�ìIÕ5p¨@=ðq CêÈA è!r÷ge.°£ЧÜÿ©°G¢'è“\‡?‚8¼§'¹ˆÚ O伡_åwˆ8ƒ¢Vî÷~2Ïš\}sþƒê À*ÎEÀ�»Ôcîý ‚T#Ü?îB¬}SÌøø‰¾�r@ H½@Š€Ëqþw\ô‡Ý?êòû?^ûÍ©ÜÿQ�<$¨Ã»™ãG=à eM^WºiÞÜýqÑç]½ùSa=TÝ=äÄ÷¨‰ý 8À�Í|õ[Ôk¿åÈ£ÎÛõÖ€:Ÿ¶/½Ý×üºtRô ü‰huö˜™Ê�@PH¨ã½!z$ë3z¼–¨/ÉÜÖÀ‘ î€Jíæô=Ïû;@ü8 ‘÷y*swi�Û Ò¿d°Ç#³òf æ0 ™#¨ œkå[Æ�à'ÔÞrH؉¼¬�ë×¼é�" ÇßtˆZÀ‡›?8yÌý£7{ì�r´Aòpu&¨#5káBzäAôˆØi �õúÛ?¸‚zèãQj]?î ¢O.àC Rl`}å@Þ¥o›@ÐôMßôMßô� èŒÐ‘Ð'B³údè¦Ð™«NÇ/Ü>«ð<"´ä®ŸÈC€~QxÎ rÉ!O]ÿÆD]]@ä®þàÞ…‹÷ÿi UĽ`ÈIЖ+|vV…Aç\xÛlG8u¾´. ;s \hEÔ¸÷,»€€Þž:Gð'VÁ¥ûÇÀ�œ@rÿ¬ÜÊpÑ[VB tü„"Z†dwŸ¸ë'ÀÌ|Ÿºø 'z)� tþdžàGðGÎ)j¡µ’ÀOäûfsü~ëÚ“O¯þº—¼vÕ ?rpÕËßû=�ãGà‡Tî±úÍ�>½ã§ƒAîŸP½ýcïÊÔqCê�2¸u "Z­ü YÏg- "v®ŸÈ}‰~A½;¨=¬|£¯šh�Xgëàˆ ˆý*¸ñ”5pGbÕ[ƒ²ßßrØÓ×ôF Až2—ãGðCL%¬q7yÎ=@!�'ßé=® Eò:€ ”ú ØñZoèó¦@÷~R½ÓÇjÞ{ü�ò�æç3IPGŠÚÀ�¤7‚;&õˆu²/ØC.¸Ã;Õ¾®Â dŽ¢9‚*èÁTúÅõ£7ÜúÿÙ;ó`Ëë2½ßsº›¾—fënzAe5ˆ¨ ¨mÀ\Ð1Ž 1Q&•8*Š)�nz£7„^hè…U Ù—fkYÆLª2©JþÈR5$©LÔ2N9‰šh$NE‡½yÏËÃùäùÖÛ?O]fzœÎùU=õnßÛ\ÊZ>õ¼/¨€=̪5pªõ¾q‘[Ý �ŽàO;W_o[‡�»€2OèàiòTQ[”äö1 )}ègÝy÷G5øÓªÎÍ �¸|=æôQ­œZnŸ¬íÖ�!f丅¨C äQOýŒÔîžT �<§æÎ�r‰{?qñÞôR�Ï$øCÄTå-øQÌœ˜Âô¡Î™`R½¶tyÔ“¨@Ä€8Ô5pHª\?!¢òEŸÚ]@À쑘ãü‰Ú×À|Rê!¿äÀ‡ÜkÖ»iF­¢—ÀF*\?–ûŠ·ŒšµNê@×OÔä%ø¡WB ‡=@îýdÝ!æõJ¸CÈ}œdu÷º7‡>À�f(z�È]@³¤~¼ƒ ñ7þÆßø:6thzD}/ta¨÷ÿü91àÎg�à“øã�åmO '¹fbÅ[µþ ¸S÷‰ÈPí* �Þ–·ñ&£æDîûà r'P! �êÊá“}ÁëäQïÐÃ?ê·àGª\>!ëqï·�Aú@Äl«¯‚+Á ˆj�=ô-/nQìÉ>¹" ƒA nÈ#N î[@K裨èìI�˜ òD$W,?äu4áð±Ü@ ©?EÔÚ·�”G4HÄê7 �å)s)¶ŽõZðcýbí[€˜ þøõ®\ûFäàÇï©gräPH²5ošz€Íý#Ù[VÁ!¹~È|<×½À�DPKèãÑoÉ4Êê·V‚;(jõ—ýª›?m]÷põèÑ{=8„ü¶�z€""VÀiV8€PøqØcN fQM¥û§[ �ê{?.À® jäÎòQoþ¸#ˆ;@sÞ´ö£S‹Vü›ïüüÙäq—ììý£/ŸîNøôÔ·~<¯W¿€ˆ!�€�êÑ7Q5±]÷fu¥zà‡œ™ú{ÈéWŽŸRÌܤºA‚@î’Øc}  ˆžßûÁõc½ü„Èõ3:8~�fäu�<yp¥rÆ ¸©Oݱ®‚=Q—7€sÌé£Ú"ªWÃu Ü?(g@¤º…<Ù“è—®«}ŽˆÜ‘ÍÝùã5Ð'òˆ&ŸúîN ¢æ¶æ­È©mõs¯=]îø¡/¨C]Ãjê�ï�¿ñ7þÆßø;ˆ P?ôÉÐ÷CÓ#êÎÐ1›ãç�€9ç†Ö¾v¢·A T¬�ú°§¾ûCM9ЍœèÀG}wü„v=½®÷é;nðs_ÿ7wßÚ;Б§íùîÈîšp¡,|Õt-ÜâS÷M0b¦äˆp´,X3#à' P¸¾.ô. Aû�Ð  {_¼èvà�@¬�»%c >ºý“y€ ?ó¼:¦w~Vä�Ÿpü$ð‰˜7}ÒÒÝŸˆ8€�€¹­~ åê·¬¸M.`ÝÛ(ꟶé™þ;·ÝÚçÖж=ýs¶Ýº©÷ñ®˜ØòðŸ€\@w¹êÛ?íÝs‚è…¬gNäΞÑ×ÀÙÚ7@Oá DÞ±ú�Üœ=„€@  *b ‚¨íÖ�ü!·[?žÚýì)óîoˆYëR­\øã‚\‚<¸ƒ¤fÍ[Æ�÷ê@ô”ëg�= Êù3’¸û£ô!§࡟5á*åkÞðGÔÁD}ŠºáþA·(:ô¡ü¼˜#<@Á�ˆ€"_ç0øã·~ˆÈç€õå"âüAÀ»û£hN ECŸfå›Õ¶ú�Ük Ñ O zè'ÐYÕÔ52UŽŸAµÃ ò6¬|Iš«ï ÈïúDD̈|"¯î ððV9ýþ˜óù ærüHœ?™7Ž ¡‚ éæ�'k¤>sÜ=Ô¦á�Ÿ�f¿wÃ9SKW<wùeh•úÅä1+œõþ gà‡º¸ùã+Þ¸T*æäµ§}»”}j€PÄ:¼/ÖÃ…¨[ÐÇ£å…J@ÔºƒT× u À=‡@H} 2øS;�€Aî¹|ýk߈Ñóˆë§ykÔÉÜaNj„ÛGÐ'ÞdôчÊÕÏ7ŠÌ )E€Ÿr ëßpý¸ã§Aô)k\?ô}àGšB>êW®ŸªÇ8‡>(]?Õ7èCŸ¤•÷�>cŽ i‚v’³þ àãRŸˆ»'bé Òº7Ô:�ôF½ ÕÒÜA8€A}*1«�@^w9�€?BDB¨@zÈ3š DÄäÂé“5¹¢©„@ô ü(¨Ö•ö�ƒŠõo  _û¦¨ž¢ú‚ˆ&Aå@@ªQ y€A¦ìqû'59*nýH@E½áîO ècν“˜�êüð8jïúðÆáP |*øS8€ór ëßjàC]¯~³»?U-dý¨�<€€�böqý��=['yôÄŒºpû¨ÏZ8žzóŒÀ e@!åà§@H3ƒ>ê7€BÊ{"J¶þM52 DOr·OΨ‘@5 §¾ý£^ëøÑÌú’C!VÀ ŠH�|tȉ | òdNÄý#õ?vÙ™“¯¸äÆ©8„:Ú­ÅÿrÎ[/ýÐð^P@Eƒ?ÝyjÜñCOtJ÷ÒÌç¾þ èc±^õÖ‘ŸXÂd€§ºÿc?gð§ðÇÁOH¹ßý¡VnkßÌõckÞP}÷‡9Ž _ çëáT ճ8âÚ7´ºBÅ TÜüµ2 “ôø\}Í”#<¸�ÐhÎ"°‡žänŸÌ@Hð§\—¢Æ$'ÀÇòÃQq÷§‚=6“¬.A×=«Þ&©é©î\ûÖyHol½[³ö-UÔ?‡Ìä(E]õ€@¬‚C�×Â�¿ñ7þÆßø;Ø@ЫBO„¦GÔ·Bú[y( Ï+à|*´ÞáOíRî}‰90(U‚ŸVê Õkàê›?õºG¶öοáÎþûv=( àÏ‹ùý->㩟.<}ßÿœ: ·É¨:2nÓ, rÀÖÂ�þôôüÁŠ´ù+gxhõôÂWî‰û@ÏŽúÏÓ  §Óù(âã¹þmQ(@ÓôÚû(àÏÝ B¹ N. <@ [ú¤Û'PB ãwO*À5#Å�Ÿ©—m›ž:öêT€ŸŒs|$ÕÛ¤+ôøú7V¿€6Yþ"ü9äèµ¶îmTMÎ_þç‹Wý¤wÚ¦§ûoßz{ÿíÛîŒxÛ W¼5õ¶¨Ï»êú¸tÉô¤yRÊ-’| é¶OæŠæøv5Pˆ\PÇak߈ÀŸR@§O-à�C"jì î>ô ú�}œÃž:wÇ°ÇØ)ïÿøÏ€jPÔ!åz¨qkßì–�»~B€—æ!úîÊ<Ü¡¦Gìºñƒ||ýóì§Ìd ‚Üáã·èzÚ9nƒ:äÜR>²óÇ£ÃzÞú BÀsYt(d«ÜpI¬}CíÝŸÙL¢FÍýEÜ?ÌÜäàGΠ”Ï\8,gÎê·©Ÿ¹úÀ •Ô?YrDíÀ§^G/ø©Õ è}”û�à}\@¨\ùøÁT ½CÝ. ÌMÀ Ž>2G5��j}Äê7œ@ÅM / êÖ¤ˆ¼÷Ù¸ósòªuSó—ÿ`Ä;?ßœ{êê‹ ·Ï©Ã^„$[ùF-änŸþ8ôaÝ› õÉÛˆÚZHÐGþ zŪ7ú~ µ÷~TËéC¯Xüñ§3w¥€<ôq÷zb.1SÔ¼pU°Çk„H2àÃÜ]>Ô¬~£v ê”}nþXîn@½Œ8~ÈéÙM 26+à$\?ÊCô¨ øÄ  S .�\>æ’|ÔcÅ`ˆpõýV¿eß!ëßäö1XÔÀŸÈQµöM‡yäô�:¸},ÇýS­„søSH® ˆ¸}>&�È ú0›ƒjPªÍ�A0ùº7‹ä%ŠØhìãoü�¿ñw� ÷„þchzDýAèu[ÀÏq>Øù@ÑÏXÝÿ)��r>.õq%Ø‘ÜÔ¹ö øã1µík{¿ùÖþ{w=z(ãy÷Y/´øÌ§~:€ —=òV[Œ¬„1 NüJÂ’‚:€cÆ÷�m˜^tÊÞWÀ==p¥™h°þM Ð}rÿÜ�(ЯºUëÞnHn Ô Ο�ë'ÀÊŒÁO¬]›:fsÀžÓSÇíÌJ§·®4ií[º€t ˆ5pyóç²A™'øÙ¨(7¦fá&,~â˜5?œˆß{âÜ«oýæè Ý¡¨n Ëk�jòjõ›ü!7àCO5ªnUê}€Hbüië9Ð'z z6Õ. z ®ŸQÓCQ æT¨ûöÏÍv¨Ãíƒ4÷p­Û‡|t”�ÔwÇ ¨…?Ô%ôöd- C‡�ßûQßW¾!nüqå 'n®1ÅŒ5oîràÓæ8�j*��úôÈ îX^ôP{ï‡($·�æôCÑWtG� �æQG®Þ2àc9Îò ôàÂ哵9€Ú\PG=“;‚€CH® A€Ž ”êŒíÚ·Ð!oX󉩅ËÿÓHàgþòMž´rÓħ7¿~¸2.bÊ?uÎÍŸ2zB™ ì”`ÇÐG=æ|Ôkïþ� �9�º Pkáªr�€P{ˆˆð¡Nh£7Ì�;ƒZÀ‡~äˆRä1'¯WÀ±êMyFàH2èS¸*ç�õqût;‚=Ęu )ôñ›?-üIìQTÏ]A!Eœ@Dày€ ¤y±êÍ@PÖü9 ¸Ó±®¾Ä�ŸÈA¾ŽšUpÕú7¢÷}VËP³®ë�÷k'�9{ÔGêðA>ö ¿d 'sÕCíÜbJÐ'"à'!Ð�¿ñ7þÆßø;!ÐìÐçC?M� _„n-üu?³ؼ-âZ`O¨<ÌùÝÄLnž ÕkÞ€@ôqü(rPêšg×õ>uÇõ xÞ³3Oÿ=» íKe_õy»è}æ®k—,{öGÃ5kËÿî¡‹Öü|FP%Ü+Gü8�ká½öÁ\G7ãû@á˜YrÚãÿŒgåz*ÁÏb9€ð'�?§>˜h�@¡J±îÖ?|2¢pýŒ9tþ%3¾ó3µä2�Ÿ]ö$Rž ' �߈@Cð“âþ�;€ ø3ùÖÓÍ]²ê‹W?—ð'þœ‰ó¯ß5±uߎ oÜœà笭w‡îꟽåÎÐíƒ<õw·d tgïc7lžØš÷�ú<~QÆHñ“íJ8¢rÄú7�„“g˜W3õy"V¹¯~kkƒ@r)ú(/où­‡DÀæÀEr`Píú)òÊD¬…ˆäÑ�dp‡œ²[?Ô‚:z3œÒEz TÖ䬂ÛÏ 89}èÓC%ø¡&¦Jç�×ìpå °CÌyÇÍz€ êæ�C å!ÁÅA'9¢ôiàOª s_õ&ÈC.µp(¡ŽÞ$´ÉX®„ù œ>ä!_G�›@Ì€<€ï›ËGʾ¢r>.Ÿúа&}%€OÀ I3VÀ¥¬t€CDÖ½™«'rfä9+ï|frûgq²Ôþøm sýÑgfîåÅú·‘!�" G=åÌBÊ�>%òÚ@1ÔÞ"�H�×`ˆõo}ÌtªÕÜ:uÎÛÖ}`jñŠ>ø9jùŸO¾ü’=ý¿Ù›‡.½¼&†ˆ¥€>.ArÅ��!؉YF� œ?@s1“xÛj„{?'9 »ÿS瀟N÷}‡?¬{#2C¬†ä)æ€Ýÿ©V½et è!oÖÀI̹„1¯W½ f@DÏoÿ¨ßä€!"ýJväò¡î0Çõ£:ç¦ò�ßbV ¹y þDŸ5oЬ€cÅ›ô¡.txqûÇrs ú ú‚BDåH}`R¯?.Ÿ É飜ÚÁ�ÕÕÝŸÌ‘Á\@ä!åå= 9Ìp)Và§rþ¤� @hüŸÇßøãoü$ h¡ÀÎ_†¦GÐ�Žfÿ:Ýùym@Ÿ/Êá³1#j�@Y[_ëÝ,²YÀ›Œº¤h@¨ºùCÐCîJô•¶¶÷Ž;ûï¿ö¡þ»w¾{Þ½ëÑAzDz8c€¡Þ…{öLlrÃàg—,ûý™»æÍÏþïÃ_³ë{3†*K¯˜^|ê¾€€4 ´Ì[¸fÆ eþñ×%äÙß ¸¸ý#øó„Ð` œVÀÅ¿k®€;e¯àO8�„iý[èÖ\ý–®ÅyhbeÛKºó3•°g—´s¨=¹.r¹ü¸h�RÀŸŒ|á ø“¿ïŠ™¹~®øYÿ„uÿ% Ï_ö®šîÅÍ „@ç_·K碉�|¾÷[»wõÏÚrGŸ· Šº[yhÐ�øŽm·ö>yË:[õÆŠ8õ€>D)�>ôØàʨšÜœ?zFQ €€=^ãF@E^HP'ó7êU°'{|bF®Y{èÓÃý£èªÁ}àyB òîû?Ùütºê›?¬{S´™ ìA¶NÐ'•yáþQ.×¹©Y'ñ–;@.ÀP {Ú؃?Ô&@~ó‡yö]r9èñ[@ÅÊ·å¼C€ òÔÈÖ¼En±} O]77€¨7UK@ d(æsA!‡A€"É�?.ŸË飜º?Ôí} ŸŒ({ ì¡Ô)œ@ô�<Ìë•pä8È%ú£Ýîð rg�"÷2J¼ ÙíåDõ5sà£ÚïþÜQž3êòÐog9‚J $ø‘àÇu%*VÀ¹ ¨Aôf}xÓY“/»äÞ©ÿ�ÍÔ’OÍ>wý»qû{Ô«¡O·€?Šôéá )·@‘ òµ+áêµo¸ˆ!« ôXB6ïZûæÂáS:}~ju;‚ ™+¨�­~üøj¸þ°ú�>ˆYh¿·4Ó|ÿ9. ò™û‡Õn‚Ô#¢rý[(áMÔˆºê€>ž;üɺ�ÊÀáðQ üÑú7z¬y£�HÀG5 'Pë²{@€ êìUw€Ì%Ô €;ôÝáSÔ ø9zQÛ[@’rP•— Çî©B¢Ã 4‡èy }ö‚ª•pÑ‹h. jÜ?ÜJ�Ý@ãoü�¿ñ7þ"ô:­z›Qÿ!ôž¿i×ÏÒ9ÿd~ì(oV¾ÕЇˆóG‘>+Þ$ µ�wÿü(6Zÿè–þ‡n¸·ÿ®��õÏÝùxÄGRýè0F/ÞÝ3±þ‘ͬŒ[rýÖÇ¿;ïe2#@ à¨cwM/ pr€@Pœ9tf) -<ù¶¸ô fä �Þø´îÿ|5ˆp îÏHw€î’ûgOÄÛpÿœxÃô¼Å^Ò�ŸC_¾}úÐãváOä¬~‹ðGu:€?Š¡„> €~t (@hzî6ÍÐ¥4+g¿î›½%kþ,ÁOÜ %üI]pýî‰]�&!PÄ8¿w×Êþ»¯¾izB÷†î Ý×_u(rôî«nˆ÷+€A{ �Ï™IîRÕõC¯†>µ*QH=Ü@žãRž5àG9® ¢¯zCÔ�ü�>ÔÄ®µo&søNŸrå›× rT£Zí�äNŸ ü¸ÛGü˜ˆè«ß43øc3`ŽA òÔþs�ž¬#¶Ž z¸€AÛžK`§C u¢FYÇjõ )º?ÀŸ"¦ê[@€9|*øø9�ÜÁ�»‚|4G8�p÷€€@ÔñÈCl�A]ðà2У\}súäÏD´Uq’;|Èò}–âÞOH¹¹‚ÔÇù“¢öup8‚†3ÕÈÁ�ÇÝDÀ�¯�KˆCݺº!à‡r×Oö�;òÚÁ�»‚$sú ì!ïw¬vÐCìv!õÌå£ ô9+ß"€€@Ô®z‹Øû�+NŸÜR”¸¤H/kzîþqáð±^Q îàJ©Ñ?! uÎÐÇ}9{X÷ÖqˆÂ„ŠÕouØÑ»*×V¼)|<¯œ?•=€ êö�TÖh…Ä- Äê7fÅ�Ïs®Úœ?vˆ™¢Ô±®p‘«6øS¬�£è!ÚÚ7ëÕîÏþn¼§7꥛øƒ ô @yªª>¨r]l1¯…ãoü�¿ñwA ^èC¡o‡¦GÔ¡“'èwÛ`烡õ¡�w°GÒÌ�ÞƒÈ[ç`Pè¡68ä+Þ ± N½«¾¾©÷±[nó«¡ÇðGz4ã9;Ëþ;#žwÍC½/ìÝ1qã7òFè BKÏxöùùoÚûí©…+ŸŸT‰5_ ^yK@•gÜ} ÓËÕnúfð;¯N�Îp\Þ ˜à'P¸", Ïƒ©@CâþÏÉéþ ðsãôaK¯˜�ƒFŠ{;óÖÌ;!×ñ»úDLÐcwäþ e Úf€†Â tùô!‹7ÅQã¼ó3ÅŸ·æOz/_ÿý>8~B‘«^%ôÕÏ&J ä\ýègz¿sóƼÿ³ló½ð“ñ-[ù=ƒ8ë-…Þ2èm¾»÷ák¯ŠµpµˆГÂíCT_w~4£Îwô5kßTgTÕ÷€@À� ™ûèƒÚUoå} Ô®ŠëBµH5=`O †âhV‚9‚j÷7~Ƚú±Î @@hé©v†\À�¶çó5>¸}ÔÐÉèC¤G_ò¸²/gOs àäÅ”àN)¿÷ã0ÀÃ8Á!r½ÙÀÚ7"n yD¤~¡Êý“=‰µouF>üL |€=ôìî�»€A~ÿ‡»@6‹ä+àÊÕo!æªÍÝc�H0H}@Òœ~‚püPîàÎ@Ô7� ò¸Èáòž�Í|¾¬Yôé¸dý"²N±ºóƒ#ˆ8µC¢Cì±zyøHÀœìW¹žìSsÿ‡œp¬�à dÀGØÓº‚ è#Ù½Ÿºå´¹§¬þݩ˿;øY°ü{s_½jùÄç6 úT ÇïþTrèð!— ‡÷€Pö ôÔ¨tQ;RMäqD4÷�$�39µ‰7%’JèÃõˆÀ©µ÷€2’;à¡öࢇjèãúàþAÀ}<Ôô”kFÏî¹ ÷OÔ­óG}ný j@Rí°g!Ηæëà"¶P("*׿‘×)Òó•o¬�òУê^ç5 ÈÜAº„ó‡\3T­xË>±zãrø“ÐðqMk'�9}$æÌp)6+á€@€r\@ lì&P €;Rl¦µo¦øèg;�Æßøãoül hnhuè§¡éô|h{舿nðÓ�óÖÐê�œ>’ �jœ?RéRí÷€\‚=¨ZýèÁ D"·@½ÏÝ{]ÿ]»�uÎί Ьwî|"4Œè3ÈcöXïwÜ8±û™µØ“àÇÕ€|-ܧÝô�™Â€Ãm˜^«Ñè} ¿³7ÿ¹ü3[gwô«ïš^’÷žÀýð'W¿�úPh�tè”ûÒ”+àü@fÞ¢õ3þç'0ŠÛ;óŽŸk¤kvƒòP‚ �îýHæþÉÜÀÏÖ�ÓÐ’/OO¾„õt“‹Vþ¸ÂÆo÷­›%èIè“ h�� ‰ n¸fèü‘ Hõ§³Þüðçú\·mÖ²>oÞÀ'ã^�ŸÈ·Üuªÿ¶+oí}é®@ŸÇOô‰‚AÌ2"àà'ú¿bݱ˜I|Ƚ‡Ã䊙CjTC ¯¹ļrw‚€<’@ §c ½  ª¡�fÌ[$u É@ž+yëðQ/ó2‚�¯„ðø½Õ䎟ªGM¯uü¨o¨uû `P÷ýVÁQx”¿ TÈ×Á¥îh²õpÅú7ònôI+ß�Ǥ;?¼Q�:VÂ}…HÎÍŸˆ)zvÈa�bô‰åM ¡ŠUo ~Lš•Ò›Ú $ˆ“QÒ|xÔO¸“¹;€~Èq%Äá�ßü¡ìHôZ'n åHNŸúhf51áqÑgÀ f8…�;¨rY.}lŠ~×ê·TQ[߀� úè h{ÇJ8nÿ(GÑ›óæK?:µhÅ¿ñÎÏO'�_¹³÷�/?#ÿ<ÜCvó'k¢äàÇrEøA~Zç9Ї1‘{Í Ö¿Ù •®zµîÔðÇÕÞ"ª‡?>s—Ïð]ÔÖÃñ£;?‘ã R�YÄ”ƒŸ¨‰!à¢çuüÁýC²¼€Bž;ä±}\?Í*8E>àƒ%ÈQµ@È€OÖ‚=äšu� vå›Õ5ð!W´µoÔ)@�¯{«`O}ÿ‡w¸{=æîÑ\ƒ=^ã2Ñ+`Oqû§Í�=~÷Õ«à\�=Áf¬~Sž¢O/!Ž!4„<‚A©Èäd¿ 1³ÜÖ¾9ð±Y|c'Ðøãoü�¿ƒº#4=¢¾úd¨ÿ×^ú|ëø‘”ãüaF/Õäæìɾ¯vS­œ¾jrƒ?#®„ÛùôÆþù7Ý;€;©wìøšåŠ¡'úÜtçÄÖ¯]öÿžaÔú7n�U–}ý¿Ï;iÛf T6„³æ€A p…iO:‘ø=fb;zÝôáIŽ ÐrT¬r›+Þ¼&`O¸|ŽŠõnG†;爘+Ú hÃ*º)ÁѼãvN6Xwµrÿ\3„>¬üøÑ¸”Ö¿e?%Ðg€ƒr ÜdªÞùY°âç³OÜôǽŗ>ß?úÒ„?ü¬€ŸŒ8�V½@ŸþÈ ¤Û@ sÖÜ÷Åþy;o àsÀžú¼)bÔïDioïS{.Õ(å}`Pë’š9Ž H„#ÈPäÔDBÅ dÈÜ@.fÈ@�ÍtÈ!O(k‡<�<Ã~”Ü)à g¯ä7€ˆ9Ãéc¹×îòÉœÚ{îø ékà˜¡+¨¬=(kÜ?]kß$@%ø‘èÑ7ðÓ¬‚ë–ÀŽE)æ8~pþ�Û- Iµ€Žrƒ>Ì€CÌQ×À‡±ö­vûP;2ØC¹ ”¹\>ííA"9|Ìñãd¢WŸ¬Y繃Á jîÿä¬V}ûG:›žàsV¼5N �!z œ¥Zè=ÀOäg@€¤žÄ»Påü!2 pc=¹{27Ç3»d·€xOe¿qøP{Eîþ!Èé„?îüiW¿•7€B>Ãh. V¿•Ê+à2Î~ï†s§–^2XAðËÀÏ/&�¹ä�YØx¶Aàjî‘{ºœ@€�©²ÜÔ:€�õj—¢WÝòœÛ@ŸÚùã}ÅZŸT±Îý9 R§�r?ä8~*Ôºô^=ˉ•È�?Å�Ïý®Oíò!úRŽÛ‡h÷~è#wÿ,ô=—Û'a‘¯zy_1üqù­r O—û§^çëß?­và£}sø¨¦�Ú{?@ŸÌ«@­*ÐS8}xô©rç�ú€<9ïZW»|2Gjz¶î-#¢ÏŒÚ@É ô´ëÞ ú�ã äAêÅ7v�¿ñ7þÆßø;ÈAЛBÿ:4=¢þ]謿*ðstè·�'â&@ºñSÔ@啳§Ëí£ºAÀÍ*áþ‘C¨]ùvͳëúï»n߬·ïüz�éíƒ:ã“ý÷]û`o;+yV›è ‘õË…ËýΡK×a÷] F懋%nö(”·ˆŽ XÜø5V@’y¯¸:¡�ÀOèúa ¤û?;_õ± ò$’¥üô!.Ùw~f¶îm*þcÊœã׫̆çú‹~B³&õµþMΟ„@Ê_Ðù×ï@à�r_ 7Œ½Ïݾ¦ÿö+o›uææüü‰R-my !�ßI¸~€;H=Ö¿¹ HµÍ›uo–+69µ N‚ªp)rÔá¢gjï DÏÝ> €Èk„*ç�õ‘ÁŸîpvÈú…ã§ì}2~öHÖô(êR�œX¬kïþXL�£\*`�‡Ñç5"O裈AÌ•w8þxï7U³ê '� }"kàÐùÝrÅV>ïXÿyS·. ázÀÕô%ÀO¾ú¨§\²µo¦ôàøñ^³þM²Õo~ï‡o’z­Z$8T½Ãå#ðQ}[G- ð¸ÓÙÍ«»ÖÁwÈ@Ê�>–×7è€Tãúô eN]i‡DÝöÝùQÊyá’³§¾¤Y›ÚùûëÀGä±{@ |pÑc÷~®´:çû¿|Ùä±+oŠ¿«ü|¤¿Ó,Zñ‡sÎZ÷¡?~Z�¢D¿qú”=>&õ‰ä¶.% “}É�ªîÿ8ìáP ~$Õæò1ðc ÈßÕ`Hp§’fëÞ˜€~”sßG}©«_ܪ¡��bµþ�yÇÚ7 PuÿGsõ¥¨¨SÁ r"GwÊÛ?@  Ú/èQn}E¢r ÏÂjœj©Ã ¤¼v!€ŽÃ�”ê7Šæêpÿ¤4w8¤^F—Á €ŽrÖ¿ñ‡ó¬éz\ðɨ�Ç{ô•›Ë§Q}¬WÕ ‘ã r�»€jø“üà(äAšqüdN=†@ãoü�¿ñ7þÒû@†¾šQ÷‡Ž�)ø™ xs^h=ðG�Ç@êµbnw�´î�q•€=©ºïõ‘¯†³µo7ýÁ¥ý�|åžYoÛñdèëU쟻뫽‹ï¹vâ†ßÏŸ«Ö½Y®7€F×Ò3ŸýùQgÜýí©ù+þbF— O¾-ïì(´8n÷qÌæ_Oð3ÿ’¼ó#èΟëåþ¹NºVëß®1”ñØRº~X—‘p{üP¬~›Z°z¦¿sÀ¤µÿmÖq›þTŽŸPÄ€>¡Ì{íÐÂUÏ¿nðà£<ë7B™_õÈE½ ¿rù¬7o½?Àσ(àÏ›R~¬ƒ[üQD¸€p ƒˆ) � „ ˆ~Ê}Ü>EžÚÏê7òR¿-‘ãüÕ°ÐÓÖÜúñ:Õ å‚;• êöÐW­™z@ž¨í¾�ú}ä`ˆ¼ èD$¯VÂeüˆ OHsAò»>‘ üÐ! ŽÃb=‘#ƒ;ªC{È}í€ðèQn}EÕä: øI1CÔæ"wäøpÏ�ÝüQLiæîŸn%ȉ·ÊÝùCÄäøƒ¢×º{ˆÃ÷‚;ÖúØÝŸÊõ£œZs‡<Ü ©_ßýA>“pÿHê) € ¥J÷�¢ò”ƒE_ Ç:8‹�ëßj„ÛøÓº}:õ&"7~¼èñöϯZ×BžÌ½ßí²ˆXù&øCdåÚ†¼+ß”¿‡.Þò†¹'¯Ú05ùG? —ó�×­¾H�§€?Ôü1ÀƒCH½”ÃED8¤U+àXñF®9=Á� l€>DÜi]@(çµê»?>Áù’¨ýö±Ê%A¢€¤Ú\?"†t¨#o@Ç�r"°Gµfª‘;‚ˆ‚<ä�:âÎOô2JÖ73T"€nÒ;A!rs¥ ú¨n�>xÊ0è¡{2:àQ^ôP·Hñ0¿ÿ“uBŸŒQƒ¸ ¤gP±ò­êµ@°£èš$êîŸÒ-TËïÿ¨.×Á‘GåÌB8¬®Ö»Õþ€öð&Õ³Bñ�×Â�¿ñ7þÆßø;AмÐ塟…¦GÐÿ m :*øé…Î ­BŸˆÊ7(B~(£å¾ú-úÝ ¤\}"Šy½ ŽØÞê}é�ݳÎÞñtž³SOeJøóñ={b=܆Öí“bÝ[ˆ¾náš¡–¼å™ÿuÄk¯ûîL!Âá‹7M/:å�zèè×Ü“+Ý~]àϼ¥_ž>l}Nº15/àO ø“Ê{?ǹîµH+à"ç�"ðçeÛ¦'ù÷ŸÉ�ŸçfŸtù·f-ÞðË¡Û'¢ �bôt÷'‘œ@¬�K]pýîØ‘û‡HþéÔŽBëîÿBÿœ«o™uÆÎú�Í…žE¾oÖÙÛï˜Ø¾O®A ¹~²§¾� `O ¨þ O¼K©‡€?ê!úÀ!åªQ× Eúü¸ (Džª]@·O›�v÷ ´çà‡9ÀG±È Ľu•»è è k9}˜©Îà�`�úäªõF*Ü? r)ëN€ª›?ˆ¾€�½éD5ôá ™ ˆ~}Tw8}XûVå€!@�jå@ ·~”ÈsÖ½eŽ#Èîÿ¨xCw÷�€B‚A@žâæ=VÀÜQ”³‡\µA�ÆýCÝ®ƒ3×�Ýâîˆ:T I=@µ€Aä)òr5\¹úM¢ï 1øä[nÿØL°‡¨Üîþ¤ÈÔ0s§bÝ[Ñ3ðS9€Zàãò•oqQ“ûÍŸVr¡ìòƵŸ  óŸG?ó—ÿhî+W]6ñ™Í¯Oh IÀ…ÊÛ?ôk ÔBõ¨-vªuoQwÈ�B€žjý›jåµÊ[?¸€rfQ}OO´žK ‡ÚÜ@y”K�=ž×ŽŸˆˆ~J¹­|ÓÌîû+ßL7Í zíš·ð0£_Ýüiónç�»|¬ï®æÀV¾©b†j¹óGÊ Gp(sÅÊõðQ^©‚@–Kªïÿ¸˜g­¸Ÿ{?ªmÝóì3ØQ¨£ž àOy÷§í·®Bô'Ë»@ä“£È@�«^÷ÆÛÊíS¬…#'"\?Ô¥t#È\>Ñ'y¬îRó�AÐøãoü�¿ƒz(4=¢þ$ôC½.øsBèbŸ¨pIîJx£9¹úª=Eô8ð1Y¯Ski†0¨ÿ÷n|pÖYW?5ë¬Ïf”úç^óDoí¾­ÃŸqøCÏã*Á»ôRµè­O~oÞñ›ÿÇL¡Â‘q;gÉë¿zï=3½à¤›â>ÐÊ¿9ð ä°;áôiøI$à]ù®Ì�ÖÁÉ”ëß&oH·ÑŒÀÏüå1ç¤Ëþ¸¿tãÏgÇÚ¸@ äÊZ (�?ÜýY•‘p«ÒdH®Aší`œéªG/êäºí³NøsúûfÄÞ…7}×OÇ- bB»ÿã½� ŽÔ ƒB-ä1$èCôÛ>ô:îþ�3ï¾÷C^éXóf÷€\¸€ð€¸ÿSŠ•oÔê)y”# ��òJ¬‚C­û'c×Ê7±•àM{ˆžòÖéÔyTˆ¾ÀyÊ]>ÀŸvõó¨Qéb&àS8€¼Ñœ>êèɹTßø(¯Ü?"ìhF.ç�¯xsÕ3¿ „ÛG½È €Á¾A E\À]i+–cǪÄ—KI¼HŠä%¶,o¥8±-Y²ãJJåJ9•ŠR2)Ë´e-¤$Š;D I� HB؈}ƒÙÿí½îP¯ºæÔé:øêb‚‘Òý ƒ{ÿ»v÷ë{o÷w¾s¾ æ �ü“í’ÿ§þ­Rp”{³òo>P{¸NðF€¢ òðC`ˆL»®à�~öP ޹ȪSî–¹·üäû—öýøÇzÊ×®/^ò¿Ðý—ÿð.PÚífûO� ²{¸>t¸Íƒ?ëÇ‚@ìá6þ“ýú�ìŸú7%ß4Ï·sIP§îçúÕü§€�“~ X@€^"$÷) ¤,þ‹Y@�¸. O]RŽ Ï¥ØvP³�ë^έ+äp;@ui%áÜ™wŒŸä1 �ÈôqÐl¿@Ž D)8'åRpdzàg°Ál°?@Ð=ßþ÷À+ð;ò>hl€w¸PJ™-SJu½ ¥n¶N+ÿ*yv PPJ™�‹𜄄‚Âkç ¤„j¼/¯Îý¼7Jý›ûòÙ;`vßÌ2È�Íi7úÅ/Ý]ÏÍ@éP/2ýS7|Û7$Ô:i;èºk‹ýÿWþ›ÝváU°‚’7æN<±öذ±¾„Wj©ÃÂÊåXØq%R7Â…°2]ÇÚÑo`ãä3¸`6šÃhy0¿¥v…ÚÍJž-»4B©ë(¨]tZ»tí*ls”’¥«¢d°kÍŽ@š¬!mœFÊœ‹MV¶<6�Žw`cº3¥ÙµQ¦õZ©>FyZ½ —éÙŽ\òH©–»vÉ·^ú/p÷%cöGªÏ[]G)¦Ç&>·|Ž»O>}ýÜçžþÁn}²_û2º´nªÃç– p©”ø\sܹŸ›Ü}ùw|®¿oŸëÕþR¾óܹ%¾‡{çú}‰ûú¶E|_?yX‚²×«èºöAûÔ® ¤"e‹Ú‡íS³Þ¿/ÅÛø{ûß¹èq´RÛEÎu}$”Ò”Ïm“þ mžk!_¾ÿ&6B-ä« ËïÆãm×ovØO£z°ýì1¾M? õ£`öAÆÁïôûRJJ)ÍÊÂã òIÙÛë%y23ø�-êø9m”…ñë!�É.# ¶²˜~móæå9¹aùŽÍKißÙuWwÔ:ÔyC-çm¯¯Æ9IØUÓ9�Þ·þÇëêxˆÏ—z¿.u³m%³H©´ ¼³ gëòá¼¢Ca{±ùdðĶqKšiÛ&ZwÞFÚ…×Ò�ÎÉ8æ”óÚ¶ÄÙß`™]=Î;3h®Ohy¸·ÈÓ]¾½8Ï”[”ÒÔƒ¦ýœ×‘ „ŒÁ›6àþÜ|Õø›Jmy^½gSŽ:§N€ÿ­´Ÿ×Z,Ÿ¶�>3õï’y]ö –AÛÇ?WœŸ€í›KFWŸƒÚöú•’g%‹©c]ªÕcê:{‹¯ýˆ~‹ºü-åy ÅÏ[)®Oøî›àÛÓ½Õ̳Ïw¬ÖO/Ï‚hÛ°]¸ä5ùß?RçðÙ¢I[È™¿Ÿ9PM÷±Ìƒ{p°Ál°?ζüÑå€ÿÀOØ ÄF˜p7€7CŒ"™tÉdE¶œÔ¡ œL$$·®xqŸþ-«ö8Ž;8x9½17úÐCoOV*¹ìX:–¿ÿº šXY0ŒVöýbþ«£Ó¸¯¢•®¬®ægžÛx쫇R)^¡u£,ìºóÛ.Æ…²éúq¬¾ø0¦kÇpÞ,uè–v!-îçL¹ºX2ºnŒ\&H NY—Õ0ÎÎiè7P÷5s»ÉºÍSH“uœ‹å¥¹&‹ÛÖqfóR˜r¡dú: Á °<³rç9o»ôgð=æ['ù|6eÂÓ¡;'S,þÜçª[�\:¼^l°Ál°ÖÊ8=0½|áŸm¼qÛW8XŠM‚Ê ÑñÈqvB®ÎFs ãèôA¥€ƒÑ<©ƒ\º3§g×ñzœ‹ÈqàœÉÏUôà.B,¤Ö7l¶… –Ðò)Àï� Râµy?©�´S"üº¦|Þ8÷‚¶Í¹¬Ÿö­RØ ¼¶í*þþ¬¿½Ÿ.%’íàAFS0ƒHۺߒˮӿS²×ë¥}&i_"�çûó,Ÿ§Î¯ƒçûÇuö‡6m‹°¯Ól®ëí±ò§®ö-׿ †E'Û]sÛ˜}Ò€¬ˆQ ØõYgÀU y÷h°+ä^R/]ç;.¢¥-Å´MùŽÈúÕ2(àÉñË#j€ Ál°ÁþA+þ€Q· ëÞ `[ üè@CY;:�µ/ÐÌÄŠ&‘vÕ#ï"€<@S¹ –e}ð¡{”Ú”‹/å\ÿÖÕ¶…pòï²û?æ?3ÿ<^�ó`Ó¹é‘Õc¯MŸêœƒ�V°´ç†ÙòBA'¾…ÍSÏUpåÕ°„nq;ÒÒ. ›GªàH‰euLKBXí~9O›TDs[©ee—M¥'‘6ΜӘ2�Gg¦+ÛŸ.§ËU(Óε²Ì…Aà µd»R´K¾ûŠŠ;‘抭¿aØð:²�ý[�*íϬ!ëÅ¿ Ø(@£ïà \:ÆDýæ$È‚ƒ¾o�í§Öö �O2ý�íÁerm#õõϼ¢íS듹ž3ßúêJîyaMŸtçñzl;L SÉ�@4®ó}ÒÕ 0�Xg)ÑÏSÏ €æ™õ¿�B –jÝõoß¿cà4Ø`ƒ 6ØŸ0 è:ÿ À;a,}[w3”èú×�°ïà6øIZ€EŽÑ@+QÐÉz)9˜F~çM„º÷Õ7¤S[� �‘PRA7}Ã%_.7î}´ä@¤¨Ë•+W>]~çÑ6Ö¾µú­¶–S'vâlnëÅXÜ}íŒt¡¬ä 6N>…�O!ožÆ¹Xš[FZØŽnaŠçqœ�’›ñ%Y=T=“±ôl_�»!ç ç›g�ÖOŠ R_Ë yºkåò*.IÓ²”fל ˽dÊÑI ·Õ²u`�&Ú%GiýuËs"sa�‚ßj4k°>íþóÿ [Ÿ\4¼Nl°Ál°œ*;F¿°þÖ•_,ÛG€¥Dã3trDcdó��)†aâ"Ë¡ÎGJ3)p¡saUeZNßÈ!�L9 <¾b¤ßzé¨Y°‚r[Ú^ ‘íôqLe™×óàLP¬»aþÔþedÂgÛ„ý¢‡‚Rp �ÌWƒß6دjùHRö‡)=àË�¹~Á'ŽýYù5’8)�òZfGÌŒj%¾T†�mb žI‹° øŠV躴{Ó·Š4[ Ê›gµ÷ƒ"R�b>b0~'Ò pÄkʳÕöAÖEƒrMK€€ß™ï TV žEQýOhäHºùçȾ÷‡¹¸Ál°Á¾ëmùGÿ}ðçüS–(’¾� þ6€¬ì>‰›îœÃ–í‹2Hà²o�‰š±@¹jWY¹Þ7g-G<àŒ;zH÷‰'®ê9zy©Ró(H%!§”ÊôM—>X®Ùõ‚\±®™£eÛóÁüçŽázœG+©L×G/=±öèÓdòŠ‘œ”FXØyå,GR‡ e¥LgÐtý$òdÓ�“(“5äÍ3(y2+º1Ð�êúÝx˜ß†4^*PC¹fM™Prž-9ë(ó†„*ûÖæòò“u¤õãÀtçbÓí[žÌiië“=œ¼q�™UŽN%®K6sEˆo¢\²õ£ø¯oú �põâ³èd ½¢õñµùîcO½nþGÞ×mL ¯ÔÁl°Áû üä²Üý»Í;¶üïÓC‹/ÁhÁ;fã€2M4�R7NIs)ƒ.Þ™ëåœè�lÕ†�ÈÃy:Ö¥­‡“†Qš~"%Í[wÿ*þ»n{qž-�ÊéÕ�'o>ñõCDßú[7^Ââîë0·e?.Œ•šGrólW˜ýËT6LI¦g·³í••“ê1©‘MË@êfË\™<¨àH=¯úF såMT£�°ž“JXv:cÔR\–°Ì‰'È~qD×ÓsÌu‚2è¹á~ÿ£ô¿—%(û>ÑûÜþuç¹A[G×Iæ 4 El°?.VæÓ'&×-ýìæk·5ùSW| ‹sSqôXMÿê ¡£Ç;€øê�ç8Ö�­Õmó“ •(NZ¯8É*�Õk8… ^‡Ëu4Qoœ“Ì€îÎÙÂú¶ ™s«ÇßFåÆÌJß¼¾´ ä‘2·à7v!Ažwäû£‘¼IŸضðõç7AÚ6—Äõ\£ÜÅ”ôÌuY¤]g÷K¼#�KªW¦„K)‰×¨ßÐ\¢d>‡yv¯Ô:‘1ˆ‚ÚÞL<†r¶ž,_>[NîóìHEœ©Ö•4¤Ê –×�=:ËêuôzR¦ÚF%!¥Ü¿Cϵžþ­Y�J�­ÎC^©nºÔaÖè€÷§ó ûÕÙ^"޶®^�ÚýõöÐÞÆë±/*8Éë iSt ÐHs C)¼¿JÕ§Åç23=Ÿüö)%iS”ÇÀqÊ%—TÛS�ÞZN~òä½Ãr`1on³å+¼oFÙ²ÔñÄ >ì3ò[™`ô.åú°&t© p‰”rmã~<ë¨ã�ä!þþyeô•�·®Ü'ßeî"õ}¾°Ï Q�1²_�ÅÒЦӹ¼?LéƒÚ¨HÀo3A n %à8?¡%­G;>‚•Öî#GÍy˜êýÒÔÑï˜P®=£œ®Þæ»Ê1F´�· œ¹†éó²ãeXO-«ËUÛÊSyPbÉ/ev$”E`ÁZ=ßÝ;7 ëm�ý Œr“>ÛðŠ­tž`(èËZá5Y6a Ê±óØ¦¼nÏÜc¥´ qã·ÐKÅù­¢~¨þ ‘H”þDψ.}®â(eýò`²—ý‡J-ê> ÖÕ¾aþ6e—*;G¡eÀ³>Ðg°Ál°?¦ÀÏ€ð“ú8î7üœ@Ζ¶œÁ�¯/عo€´R/7 Ysrg"€Ü@[—Ò}€P?Ôõ"F ûèc×w�»êvê8¨(¥\²ýéoËÂ=‚íó«²”ÁÐ�* ;«¼þ0^‡ dó§_}ò�]8sz;^±%Ìo¿‹;¯FÍãÕ6â%O+83!ÐS2»H)’¯§äMä2cð𜜫 ŠŠ‚•i£ìydpü�³Ý¥�ÍU`ý@ॷe ä]+�–͹ýiŠ­ôg“­Tsø(û ìá9d+qîS;eÅ1êÖÊu+Æ®ùºdž•ª°ÏÙK«‹£ÏßI5 nû<”ú‡¶-¹|~¼jËۂ:»~K Á¯›¼¼d;¦ $°L`–,…c%ä§æ~+AÄm¦îAþ+å*•vqù(ª,]œ ¨ÐöAíÞL É™l÷ŠƒñÄ‚~@€„ÏH ö=ûv�÷á5t<ÚŽõ¤^úüViš„JПe`-/ÿà}&æßµ4?.×w£uó+Õ΋µ¾œ¼® üÓÜ?!Ð÷ ²fàs¡}ÎJÑ\T]ê\›}Òô{‚B¬¯ÉkÜÎRÇ1aÝ® Aœz@0`‰)ØaF†mX÷›1(ë§ÀMvc×@EßË)ñÝfÍ£H.`׿âä½X XÛâ¯*9»‚Ùy¥Øò¼ïŠÿ€ýËÇ‘`¥6ŒÆ4ûæÆ4uŸ}þÚîÑã×cZFu�^�ÏÆºSÓ»ÜW.ßþ’k¼D‘‰çcÂÈp‰f£èSþ�pÆZã<�À˜™„ÁÉܹž8ùÛ[:àÃ;5>êl2“ «W/Û]?`]"‡f ÈÅÎG]èûH�w¬ðAJH�£ö¹"²HâŒèŒ!fÃú¶±ß ýÔ…Ž&mÐÈA‘u+´�*ÓÆ€™rŽ™úµd²ÎNI‰q‡}èdÑvh E«ì6—ó£­ë¨ý*Îm ‰¿õÁöÍEÆJöÝǶtŽ@á-\6z�ej�SmÐäe”¼(pÖ~ ß¡Žqîžµ>߆—G+è( 5 4žýà˜‘4•¾Êý}Ÿ¹Ø Ò´OÀƒÅ¬UìŽ�^Ód(ÎÙÉ»ý€m®å²ïZ±c’˜qä�œ\çýÅíóÁ€^6Nß~À>¥À�þ]Ì\ŒòܶYc!�ƒ»ÇåÙlÀW~rÜS�7f"ÚþÊûó}¦ G Zã÷É+öad8Ù1˜/¹HöñmsÔsA8ú}Örúœ5)�4÷6à—‘¼ƒÿÝ[V€+Ï‚ã9ö~-È Øu ”³’6pë4Ã0ã ÚÐâ -ÿ­Ì¡JÇ߈çöÀÚ<Í>WËÏú÷(¶9¦hÉ‘𓸟Ë!gÐ`ƒ 6Ø`ß%àÏM5ÏÏ;ÐÏðc>b%àìX^ÿÎ8xå \}ë6ŒÆ €ñhr"m¢ZíÄ�!3ñ¯2*¡³A,Œ’ ¥‹>ì>õ­+º‡Ž\ƒ‚1 : d9®²‚ÊÒÜZ~Ý�‡Ê »ŸÇ¨³Ž;un±AÒjïø$Þ¶ð$Þ’ æp,�óñÕ3�›<õ‡pÖÍmÁÒîë1^Þóªæÿ©¾Ì¸Q¦›2_Èerv®œsÝ—'¨~/JÃÕ<:©ž+s$˜UШ|"çz�µcÀÆ)œ‹åù¹cyeçKÝjº¢æï2šHG×rwݘRw@]'#¨Jáñ þNò['í¹võ[dYoÚ|þ£ß×÷:Êu‰¢c=•ßõc�þL3!਴—ÎÇ-ÓT¶É˜ÌKÂ)eL²Ÿ:eÓ³_V“vXåõ-O §«,p @ª¬U¾w›€VÏnól¨¾l w]OtݨþÎCÎ!˜iÈXTg}wFy¤½ô[oÆ;ËMà§©³‰Ð`ƒ 6Ø`ßÀÏ.ÿÀ`Ôã”c~ ÀÿQ¥ßв6žÛÀÕ¯YÅÁ+¶q�ФI&7@²‰+ë �ƒ·â#€Ä¼­ÆxJOŸÜÖýI'6V §:ÇK®åCÙ½t8ß}ÉCåâ­'€6J1Žš{¡ìXù4¾wîE¼È&ó›Ï®>÷å.;²ç`ãå½XÚ}Ý :wS¦Ì€™ n”  ÎÅëþi úŸ�G6M)Ê:Õ\¢³c0Xçù¨c̵(kÇD޽¯å.m”Ý»žÀÚÜå©”90OõM�êß3¹:Þ·2“4ÐKåèRre+±=:”¹r´Üº÷ßã]—ÿ¾:Ÿ¼ì†L(ª¥'O®t÷½p[:¾±¯‚=æÙ)%%,�Nç×ì~ ß²ëiîÌI|iô�q°™H;·-zwÌBWD+ âôºí2n—ŒÕ$¾vQ„*G§ŽNw7?4ãØŽp±c¦îS)<•º1 ðþ42U| hCôÞlý©µl(WgÏÒŠóNØ>“sv~!s-ÊÀ9°‰'jŸ°¥÷Ï  ­—jºÇ’¬,¿Ë¾¼<‹O�:¹Ÿ¿m²! ªe²-�ž½FDóÙˆ$Ö<fydöû…?ª÷éíÒöó 5MÛÅÈÔÈ™Z”ƒð.÷š¹:z2~Ô|<Íæ*HÖ9Äw’²Ûƒ8E2#ÙŸõ{¨ÏÿÖ~d™“P­ûü˜XDz¹ u\6‰öW½ª>€(§­[ð�öÇAeÞÀç™È1øê£ÞyÿŽWHóY6 Kü@0Åxž6IPß@¦;�Có`/Áö~M^(ÃF¿>¡sG+MÉ1‚aC ag±übÖ‡:Ýí1žµéû~Ó`æ]lú…n†à„«³”Ë¥"ñ%ßvc­« ‘6醈Çü¤”9+Ž Ëúkž0ç(‘y™•§­ÇPâ¹%§ø}èÇ¢! ·‹öÁö¹ã}Y~ú82OäX{IFúÍM—öµmÄ‚-ã�6‘7¯}Û9F�o,Œ>ùÜÍé™SW¢¤N"æ0H¥�|Õö¯ä7ø&Æiêœ;¡“‡u—\)ê§ãÂ98ûD¿˜Öx~,%KZ[—ìœY&²ÛÎ,*·ç#··ÒTª 0súE-r…æëß‚ñ¤³H4u–kZù·XkßFbÓé “\æùa”'@eCÅìôŠÂÓœP.ê2v~z€LëΉ¸¹ž¬'�B%’ᣅQÍÊ"R™/cšˆÞ\W¦‡Õñ­ìdÉHg8ZØÄå�hrôøb.é7È4È9èRÖq±®œsV%�ŒÈAÖb˜��ÈåÀñŒ¹Öè@.'K�È~\ Ž×|P÷([ÎhÄ;céÃÜ”Å}Õ)iÞ9 Öú{°À•Ò&d¹Ùœœ“³€±Ò€…1Kßì.˜„h%à¼D ÄÁOs}ѾsâgŽ•0 �ï úÀ;b `&~§™ö°ŒcËz¡<7×K&³Ã:¹ÕüøS™×w¿o±8“ šq@TÔ‹ø›Ö:tÌç›[ó±ÅIÿ ãd™ASöå6É2ÔçγTX¿ÍÐ1™†t§˜g˜\YÅHÇæä¿¢Pù^¸ „t&ˆßîqy'•à7#äû_,ÿfôü@Ʋ"û+Ð¥_] _+]Ê~e€1¬q°\œ›ÕüüÌP±àš[;\{kÒc¨Þ"¥•An°Ál°ï@ðçUîí&ô³ßð£D`1ÄqmìûÚsÑq\ÇÆœTxýd”œäŒäi"Ëž@œxGò6ùì±µ…Ñ'žº!=uò”’$Ê”@¸ÛÈ7íùz~ãÅ�£Ã¬‹K”­ÎÏ\ÒöûpÇÒ7ðÞn‚­¸Vº²¾–Ÿ{jý±/O¥Œð -�汸ëÌo;àn�"A;J!èS»rÞ@Bš-�…¹€Èè©ëe§.ïï9ÝV_DÙ\ŹXÞ²ô\YÚ‘»õtqÎÐ ó$јy'ë**:ü�÷,|¾¼ûЯàÒmGý$·qµÑ¼“ÜuŸ}þšîëÇoÆ4�%vèœ�[.ZþƒéݾŒ kêÐñÖS÷êÄò p1i5¡=#Á;ªõ@|„©ut{P&²ü[�{Âv‘ö4Ž\Ùo&Á†m©:üFþÉIc•üJeàœ´K`œž.ï@}(„*{æ|>i¯JŠ9'µÎ�cy7Yz '3«ußI2ð„¶èó#©| -éd¼•<Ô²Ôíň.ñ<©“‘‚#èGâÔ?é³!£1 óù>4r7"ÏÆ=¼¦“ÄŠŒlã8Ò›»}Ž1ÝdúoÀŠŒ“~³µ6 ËaÎâz+Aä�1²³y/“�÷vÆ9¦<ûQó~P¦Íç2,±z��e HWŽ’< ä¿En H ñw䪌GÅé1‘,£LŸ.ÏFèñþÎ.RÀÐï/{$WF¾8ôM~ —ȃ?þ9C ÔûH4WÏ®.�œû±|ؾQâv©—{×X©n°\Îñ1lý÷HN1L’Ùþ ÀB%”Ūyýïl+¸-ãdA±âÞ‹.7ï«c?.dúï)ò¯žÇvŠõÚ|[h; µmŸ“R¿^>ÿX ™§ÒÉo¢•Õºkô7t,Ç�ç>;&×ç¥ý>Z8` Ëw.’¥®K›£²•UÔ¶ôã ÿ.Ž%1ã±M‰$N¹ýš[®½•唈P`�}l°Áì»ø¹À?ðô³Gü8€ûïÚ¹3€¼/„ù2§¸ìÚ“¸ò†mèFÉæB�“§rtòXÛØD~É„›9êž8HFf@¢×Ó'vvŸzú–tl}ÀЕ„) è¬Û:w|zçE–và¥<६ºSX\ùÞ±ð4îN£ ”è虓ß8=}ö‰Kq6šß†Å=7`¼¸ó•1€P@æP2‚B¥Ô<@Ì«S€Ú¤¹nÏÌ¥£ã=™×¤R0=sX?yNã½<7>Uvîy¾[í®,(©‚8V‘¡”)%àê1µüRvÓ‚”FµX‡²eîÉòÆ‹~©Ü±ï Œ2„wúw=Ð}áÈíX�®œí¯@9{c¤ÑYgóÊÜóÓ»öÝ_®ØvÔF×Åz/õ>`Q@t¼ª“^ö¹I'|ô»‘Òp@�°"'Z¿„Ë1㣿ŒI1 ®SyZàtP@0–>+ð x¹,«o/þ°¡´=`Ëf@'뢓~qþëžë%YhÀÀ@/ýA +{¤Û hbò À° Ãìð¦ýKrÙþ6ê\º>ªð­‰È5‘•ô,u†¹¢@Ókú=`»é3+M<ç}�?Ϫ,^vRß;ÉÕŸ×Q±Ód¶ÌçºÞ:Þåþ†äòORÆÜŒgÝï¥ïôPÏ÷uhûœO;¶FäRàæ¦1ë%úVò܈•Î2 Ù‡$þÖè‘ö ˜×Òw)Ì:{¶[,Oë�æýiY¸.ß“aÀØ1Y þê;Äæf­f‚Ô¢1²æç$S¶´AA<Þ�WYoÛ/Ä*&ÏÏ-ÈCËytì=HÀ 6Ø`ƒ öütþÿÀ~ô³ àïx��ÈÙk0F2Ê6[wœÂ�w$l]Y’�Ÿ™hE@õX™pé ÛGÁXŽI@^æim³}üéëºo¾t F�To'÷O)ç«v<2}ËÁ‡°4Þ44çб½åKåê-â£5ì¿@ù�òÆøøck�?p‹x¥–:,ì¸bö/¥Qt'<•5Ã&çß%OfשÀO‚öÉ#DÀev�É*Ê™#ÀtçbyçÊãè¶mO›Ø5|òĤ:ÈmŽgIÕAP–¹�€FïOÊeÛ~'ïe¿†•ùué'�“Zìäæüè“ÏÞØ=yúFt¡c-¥I¾rëCÓ{<ˆùÑTXx>‚|ÆXø@ß_¤Ðdïd6Šu9pˆKÙhr ¹óØ&Q{Â;à"90çè㶨æòw¸ TyÍã¼È$gÏÍ&¼ÿäÓ˜�,¾Sl½|þ·z�Ô&�Õ¾Áœ�¨KZ–̉§�ÌU'±“crLÛO¼Diñ Ïïâ¤Î¼‘‚!ËÉ9¹åzNîÍ;›âäîiÜæ)°Àoyß²qLþ „ ü)0Úö%t…€så�€Là9†­ÌA–c#øïØ$€ˆÈ V30[Ñlýý5Ùz~9ç«qìX Έ¡QÔ½DbaŸnû!Ï‹ãK¶øh|­[À „5äšlw >‡ÎN²~X¯8Ï”(u lМaþ)ó‰Áµ8xe»°�¢~Ñ_‰€u†gªXv™>óˆs×ùœ$aŽ$ϵτ[w )ígÊêu ‡¾¿àåº ¤�^Žqleª$犳8�à­L„mÀŽÀî˜ç­“Û¿“RËr°@I[%0[9.í13IŸ{  Á>+Hì¡à&?mÆåþÚþ ÎuÞ+ÌcÀ´øiž‹VÆÔ?ߺßdHÍûGÇfYkÚ.GßÃV’ÚŒ;qV³œ¿·aß×ml•?0eûOQÌçÆHçz¸ÛßœpÑ¡Ž;ÄJ¨° Ìch°Ál°?"ðç{üK¯C?û,€ðyÐ^5( ì¡o0V/Øéq\ûšeŒF}¢f|î#cbÒÕ;Ù< Å9±ûG]¦Ãg–Gê–ôÌ™KÁAzA%qÀ|wfúš}_Íwx Ó¦þqФt+ŸÁ—þïJS,] ü@gV'O=·ñøC—' Ã+´n¼ˆÅ]×bnëE¼å¼Y�¦u¼7E!¨‚ Ñ'�'³í¹L@QeÓuä3‡Q6NŸ[Ý———­»×ÒZ¹´MËQ%ëˆ1h}ÄǦ¾±ìP¹¾{ñËùí}¨\¹ò‚:m z†’gÓ’FŸ}áªî¡c·c’À´Ò”Ù±³µ²oéñé›÷ÿ~Ù·xFãã�äS¨í­æôí«(ÁÏ #úéŒ#ÆŠwqÅEÆQµ\wæ�q<^°Ö$u]{ÖQ£ö=K/ðÝ'N üÄ ‹dë�cÖñKÿøI5­ÍóáÎ…qò Åyl$pÌó‘ÿð Çzr}2*‹ú,›Ä:1Tg>tŃ‚Rz8Å9!Î@hƹ›g‚AAó|©ô[›´Û�ÌÞyÆý�“¯'¨§ó]û¦aB»w` @ÿ¨àúNä7Ѱ¤= J•`Jü$?>öA>QN �4Ø`ƒ 6Ø!ðs)€ÿÀŸG?{Àßðÿò{õj@)¹à¦>—â9hÎïÆ\~ÝiºnÛl[K�h#튉B §ÂA²U€4emå—ÚÈ:FÞ…VÒ×_Ú;ú̳¯M'7vp(Q2Jê�jVÿ’Òì®Ûç�Mßtà�rÍÎÃ/¯ì£ëFǰ¼ò)¼gþ9ÜEPæüÚtnzøÌч6òágâl´¸K»¯Çha4ÍóÓ2‚ªÄ™2gÁž\»Í@=N‚‘òê‹(k/�×íoeÎQkÀ`û‚0̬Hsºwœq®¬©Èç$¡y¶´È$š(f�p»ÍÿQÏ�Pî·³e¯× F† ¬<6�Hœü‰Ç³M<ª}›x©#?xöQè†E˜ì·È;õô¹aÉhL¦<ŸÆú€aš˜_‰Ïqà|õ²L*Ålˆ�íö�¾vjrÁÑ · ÓI–ÑÀ,|ªü‘É 0´Óùúp›3/•–-¸älo=†˜|dAÿ÷À»x0³*  Em¢ɳbô;Ø‚BŽÙëÖ5h&f‚Z©+žmÍs=Kw$¦ò„ž�ªmåbeÂ9Ýè¦ß£¤¡}…·×>â@h—'ÈÌGr«@`Øw];F—2Õýž%º/)VÉ¥Y¿ÏÉçÙ/œè3�“¼T·cÿ8ðU—mО^0^÷m!cùknöae·éªÄ›¯k47Éø3Ø`ƒ 6Ø~–üDÅ_ú;Öü³ ‘Ýð*@ À"Œæ�WšHV>^Wç—Îàú×N°û¢­*ÿD‰?ÉÍ&Û ¶´@)�‚ãØ%ŠÒ²ÄɈsIÝgŸ½bô¥#·`cºÀ˜S‰f,HÈiT.^~|òöK¾Œ=KgÜ<H-<ŽÛïŸÄ5¸@¶9¿úÄê·X)§OîÀ9ØÜÖ‹±°ãrŒæ·¡@d ƒ€Ù@•Usöç!h”+ ŽÖO Ÿ9ä ^© —}ûM“…‹ÓËF5†>SúÁØ•èçàß05«çDu§Ëu+¿:}ÏeŸÀ8M‘�\4ªé%y~uëèãÏÝž¯] þ¤Š’�Gëù¦•û§oÜ÷ºÔFd;™�,Z#àÅm8q— ·yŸèöx¢éYm”cµ`rå–Ö9"ÑõŽiPëhØPð @¸:Ú’úHè@ãÞ€X¬‚Á¸Œ�$©·6²wòñ< òá‰Øz÷a2ŽoåìÀ€¯;·[v‹C hÖäóÿT†FÈüá=ÕÁn|Îñ©û[öË›M=ãï¤Jlq©ç—@­Í2Jb§#û0x-ã”VQ}|PnŽuµY,•ȾXs»Å8cŧõŽ�‡ÐD†œcòyP^ú­qÇuœøÝÎX0†®,YaDÉÕ4¶Ü:Ž=} ‚Ÿ±í­ô™O>®ßT­(@Ì2–Ô+¥uìGò\ÂÀ�þÀÖôÏ…w¸¹º‹ãQ¥4»º�çÇòeZc®�]T¿‘¥ŽÇ%vtÆ"V>!½;¶eBE¬\-wÌóùcëŸäž@€!¥Ùq˜ÔßÖ«�„ä]©¦¬@#ÿäh�ÇŸžQçr ±�ño} ØC3Ò¬æýb™àn\«Ï®öG/Wƒ\ø^ðÃâVš]óÿXÀÕ«‚°húÎáõÙ9:J;`(�1ï‘NÝÈJÂ){šæsD•žìžÏcl~­`ND³*•Ù–Å÷óü¬ËûþŒPËäó)†åãÞ·¹­×þ 6Ø`ƒ v€Ÿà+˜súÙ+ëçqÐ^5h€÷¸JöÆ4aŸH©”=ŒjÛwžÄ ¯cyË‚›\ňF;Å@žL#9/Lä›IJ-ÇÎ.àÔæxô±§né=~�LìKjÝl@‡�|íÎoLßvðk˜MBé c[¿€›·|ß×m`7.€•T&ëÝÑ'Öýâ%i:YÀ+·h~û¥/ïAêÆÄ8*ØÃ”ÙÕê63Ý@^?�¼ze²†s±¼cû·ºùÝ‹XŸî‚S#”<‘nDzÒV©LËÙ‘©”r™f\¼å“Ó÷]úŸ°{é4à“ˆ“ðÕÉxô»ÏßÚ=vâFdÌéįғê™è0-‡¶>4yËþ/bëܦ‹ªó¹nZ}ë’#=oǼ3>æa·Ñï�|¶m`䈜Œ‹Ÿ˜;‡?7PŽD&{‘<¥‹lví±C�qÛbÏ $F'–½LQÏÀé§ �gqéëç]pHB�éò}/ëÔ_r�¶NáÛïãw†ÓÈߘß3¹K«£Îþ¨rT#tHû\7TKH.ùôlÙ¥ë$Žþ€ÕWŠCÏõ h;ë;Á8?Eÿ³e¤eM2Þu£¼“ñ†ùà86(� Ù?Ò¯¹*í¢}¢ ‹Ë{€qìëÆ 0àØGýoB QÓÂ’ÌY‚lî–Ã�“ÿ&¤&· ÿ†É¿n‹¾¡œq,%I™ÞSòðè%$°‰Ïd<о³xŒ4l5?ï#5”YS0Öɘ‚ü÷½O^RžçÇL±l\$›múq�‡­ý-d\fægšßÄ3?œ\ëÙ% À?!@ê�@~̧%?tŒ§ˆ…é'Ê>Çž¯qìãl?Õð9·\?dÝK12…4Ãï3Ò¯ÅÆ43OÐo¡ èÔ¼ÓM]C…Ê‘±*N‚’ã@aP+òSx–®²ë|QùÝs‘·\52½;+£ò¢�ܤ–BÉENþ­½l ÞÞÑa÷þγ}ôêî½äêZ¸l°Áì<ƒ?¯ðóÞŒ~öÅšçç ½ÊíZï°Ë�>qþn0*:†1” \vWݲ„ñÜØÉTaFÏprâÑ>Ð+Œbå‚I§ yÒ3§WFûÖkÒ «:€��ë(¿dÒ £SÓ×í} ß±ïItI]1½¾”´™æW>‰»/÷¦’p,�ÊÉÕõÇ�LžüÆåÚÎý-uãY~ ñò^tã%¤ñÂÙ|?@óÿäÊšT@ȧ�W_š�?(çbeiá%ì¼èD:�ñg$3©rŒ<þ”�gª¼!Rp ‰ru+óˆùP¹~ÇÓ|舰uzvÝ}G®}ùèë±Q¶á €e÷üãÓ·ìÿ\9¸|-�µÿò>&ï�ÈKÕqásЬKèè¬æ#ñU’©u@úD«Æ ÜN¬ó@·³¾=LD3—‘¼Sâ‰ÙêÁ:öزn²¬Û-0Åü&½#°¹<¾m Ÿo!fBéoÎ{»£û3€üô•5Ô(LëöçƒVû³•b ¤m r6.'’‚{¾LŒÖzF¬—À™LSY2Nz&c�ŸÖ–gÓä¤ßL¾qóh‘/³’o^Âγ먭Dâµ·t¸øŠ¶lƒËáÃm²ÞE, a€l°Á»ÀÏ>? à/õô™ðwüŸ¦ �'ˆ6p€{�Ò‚ ø4 à:ç9¢¶b}ã¹M\~ý)\rõöÖ™c´ÛmôeT¯À aot x¹Øáç)u‰îËG.}ö¹Ûqf²½²3¦€·²sáðôž‹î/W®5jƒÈq@9>R¶¯|ï›?’^Ǻœ_›ÎOž?óƒ%}áë ¥ñºñ"ÒþëæPò&J~�ëúdm¶É”‡f ØZËÇ_ØP>yÀq¬O)C߈n³ÍVX�‘ë¾ ë�f2ZöÑø¡Y@-;4tv* âAޏmàÙ×�ï#ú=+²‰tÐ9r:†L`n÷àž˜æb‹¾Ç´ˆø­\·ÖÛ$Ç€‚áúÛ² e=’!bmÁ÷�ßEÓç‡Ç´ŒÉ�<`hþä®Í>I¶žô'™ïêXDÇ�AÉ£|@@ °p<ÊwDI@#V|p¿{,™{ÞAócu齚¼•‡ƒ <Ë,y<D—þÐ �q²O%7Í'>£¾o‚px­ ¸Ài±^ýKÚÓ\\sËÛv¸q@JÐÇ›|�é·Ál°ÁÎ#ð3à¯ø)Û{œ2ð/ücÇ@»@m RºÀmh'T>o¯‘{ Óéq‹Ë§qÝí;÷.·ƒ *´n7 èïRG$B™Í8ºv’G£�?sM÷Õ£·`2�£SÓNr¹t룓{>€�‹ëËÁ °—¾™.Ýv?þÔè4áÂXÙ˜?õÄêìÆê™møÎµ’÷í}t”·ïKÓ²�]Á*Ê0„(íÔíeêó’v\‡µrõöߘ¼÷’ßÁâh‚\2R;Àç½Ý¤"Y[ýî w¦gÎ\ Î…3Nëùú•û§oÞûUŒÙ‘H\´�~¹PgL-þ"šÚ")ÂòÅQ—1äþŽësI¿y‡¿×á¤ÑÍKTëå·;6 ÷³My¼qp¹÷jF`3Ák¶û¿!ý#8ÎÿÎq> …D©Óîä7¸OÚÇ8¦Õã5è{¸ÌÃ<z/— ‰ëÚ‰è˜ÐH^ÃÞ dîŒ@Ì?áM"pl- \Þ/ÿÜÇ,(ÖS›6‰DêÞä}€‚žÊ„09Œ#Ó�?ên%[VZÇë›|±±?ôw±_Ù6…a¬·^Éå9ˆÔ&8AŸ1îˆsTcnVòÞH*—èóµ`˜l+=~[Ї¿}�û%bƬÏj2`– ˜q Û `?ésGÀ+ûIëá‡ð/û½�rr°Ç±�͘+bÙiÛ{Ð�ejræ›B{-ÇìIAޏ°Д «�U&O¥?ŸýÍçC,ƒÏ¼eü ²ÒoƬF—¬ÿÝïae÷¨žÎ/êþ®7«Ç�¿óàžl°Áì<åùù^? ôÎÕÿŸü8€¯ãYŸû+@l¼Àeg¿ó]'ãoÉa{mçÞã¸îöy,,Í!yšs¯ s¸ä¢øª7#€üÄ;–H@cŒì=¾±0þí§_Û=~òÚ‚RRW€ÒbSAWÆÝF¾qç—§o½øk§ '¥ÆÌ$cÛ}å¶å¯§ïë6±r�òm¬ã…'×ðò4�Žñdeû¶gÓÒžÔm¤Už­Q°R¿}ëôÇ2P+;¿ýk³m¹äýK÷Mßuñ‡Ë�Åãt’­NŸ gc:}ì…›»GNÜŽi™CI@*H%¥ÚÞ9•Ô•4»i.—lyxò¶}ŸÃŽù5´çŒZfE$“ÌXÖÀIºØç,%a€+Æèñë�ãdâ<×-�¶»‚‚ÿ°à¯gÂÄN)]Ïa¢fI φ2�àgÑêøÓ6pë±Ü„OäÝRåDòBòßðúAtøêtålÌ:¤t2Þ;7œšo/¶¥©¿ÊÀE’3VfÆkXZiÏüPSZ$3ýf¾ÑUE¢¯ó’�1 ‚Ç4I·iFbаŒ#¯âò“±"y�ŒD—uÄ–,€yìl‡ö�[pà›2 M¼¸sny3 «´cÛaÇA3ŒÕsÙöÇs:Àç®’3\»Ðxx \Ù±CL-y^¥ÃbG7ë¬m\^ÞQß2…[p“ŒࣄyÐXþ¶9g;�¿ÇÙ9µí7�ŒZëÜõÌãæû”³‘ô÷ùœ$n,従a>A.u ê�¿>ØEÁ0ZŠe8åoûŒ)/å}eîãéÜ9¤ù¬r»—­Û€¸Ü$ èž’ô:ZòÞVö‹‚àoø „�}®£œ…±?^ À‘—Íë$KZˆ{öz,¬cn7ÌË�¡\?~L.`«N™(f"·Ì¸òuOæÓAºgÊê$TÞ†ùæÇž^­�ï9>_¾ÏSê4ó\ûÝ|g‡Ë®é¼´[ h›cÌv^o`ý 6Ø`ƒ vžÁŸü ïF«€Ï�øuоC ÚMÞ `…µñ¥uºei@DJ)ãâ+NàŠ—1uÑ� ˜DÁ9Üìä3žlÇÚÚ~0�À´›KzìÄÎñï>{W:º¶¿MjX€œ€®$d -�OMîÚ÷¹|Ûî§0ê˜ÄS^—¹[ÅüÊ'ñö…§Ê[SIc\Ëã|lõôŸ<ýè!ü[Y˜?‘ö|1�Á Iœ:7PU Î'KžhÐýì|’ Tôž[G�NÞ´÷ƒù–�OÆ)IKV*aZÐÝôÐø Gß„µ¼ð ‚Z˜sOOïÙûé|ùÖŤR!AÁE»{ÿOëxýg¨³Ë%&Õ€ªœ|øI…~ô™ ²ÞÇ:SÍ ©„Ú×>ÿ '™49΃>¢ÕÖONbû{)¤œ[mm ™L­‘ÄNë\²ˆ qv ¨Ž@ˆ—/Ór®8tx_nføœVòûFùèªEß³�íɉ» Jè«/¯Î-Çô;€4Ù£v=rc©¼¡á�L à��\cßÐç_Ë-}?êÿÐ6 "]ÜõùøÐº[§<ŸUÛ®ÞÏç±OâéjŽñ’$!¹Êi¦ôp2PþwòÌ:y.Œ9Y¬Ö+2pZ³¸—+óÏ-¹Á>÷ È ðcÌ8áB)HGœõg£7€8û�J¼ ˜u4@EœÿÉmÊt�.u³ Žg…Ѽ“¹Èw 3Å&€‚‘ÊÕúsàiØ`F.·Ÿ$5ë'Ö7Àx�”à¶8÷�g3x8}¶*{¯ŽaJ.>‰2¡ú‚¿F S˧å²ïà8] ÂßSfvÈó&ß#>¬'÷Ù0©•�Ó<ŠÜ§sט¦ ¤«»ÔÛô## ‘ÀkÇybÁÍIÀi¶zžg=i¿VX œòf®Ø>áÙ˜Ò/)a8V¨ÙÂ1¬—âL¡ …﫞{é5®¼¡«y~äæï,÷ŽŽWËàþ<?ƒ 6Ø`ƒ�'àg'€¿à¯õ8å8€à_Øí; ¢�¼©þ›‹¤Þ¸Ïär–’¹ÛÜ:®¼iÚÚài½"€8¡â OîÙ{båL£Yy+{ÃIöès/}þðë±:ÙR Ãö“+¥ìYzvò¶‹?WmyIë§É�%z¶PçžÉ++÷¥ïŸ;š^ƒ d“ù�§WŸûò|>öâ^\`+]·™|¼[_8”Jš/ ê&þ¤ŽÄ¥€�“ŸªüÛ\wlzËʘÞ{às Å䣯I�ë=µkô‰Þ”Žml\°Õï^�˜Þ¾ãÓÓ;÷<N6“ž¢7Î{bk#¾Ý„ß'Æéø¤£�Hî$�v‘бÊ8@]bð‚ÐâÉ–m •>ËQ®Áê�¿î#NVë'NäÎ;ôÈýãêβû/¹v±uñ“çdž1˜-Ü,íÞÕûµRH>êØ_Àôy;ü3áóÑùß†Ç Ð!Ž#Ã¥€€äsßÄÑ�±ãQ×õ›hžó(â6hFÚ¡çîyèÁºl˜ç^Ò–csÝç”?L@‚íOæÝÙ1(Å�íNîͱ= K„úསgå&ŸoGÙ¡õØ^2ÄÊ´ õþ©Ñ(,ÇÔu:îà>y·ìÞ×á–7Œ°e[×—ñ£ù}ü~wÜ ÷6Ø`ƒ 6Øy~ÆþrÍÛ³‘1áj^ Ã }‡@´í@z'PnßqØÏñ ×­éXÑ´ð¶S¸îµÛw-›(´` c"€(É McNÚÈkØÓœÌ;ª­OGß–…»©ûÚ±[1-cð˜Î$&.ùÊíOÞyñØ>¿ÞÛ FK_þj¹bëñ�Ñj:ˆój}oÎ�|lõ±/ìÇÆú– rϽ{u+;±YVR£”©�TAg*iMT¡«c¾Ÿ4¢$\ã¨ÈÈ›ùÐòoMÞ{ð#Ø2ZGAQé/2ü®7<¾±4÷[Ïß™ž:sJê$R_&P a#_³õ÷'oßÿe,tÀGä X�»}–|ô??<^�´E �|ëÔ Ê¥2ym~A9ŒºÃ‚$No»?Íû;à[ËÔµN-Ûî:!GïhC5-oÚ¦ýĩӞH’hbq2â ¹ù¬"™>& ̱ì10¨Ž3W”F›ó%Å»DßÂÖqæ¤�Œƒ›mizc,yÉÍhReÕ×o™/z½Rœœ�ÞÛh÷Ö¹$Œ/5 îñ9�égû¥ƒHÔR©À9¡¨RÐ:"sÉdkÒ,5 »‘äÑxçoØ™ñ�²�Øf^ê†çö]iži3�|æ­ÃgÃGyûgÎ};(ëp Xa5<W62…¦ß�þçR™¢ì©ùQT*È€ýhÇÔ®MDŽ’Gò}ê @³œöYõ¬–ßɳ²ßéõ~¾�=b à̸ø»¬ïO˜vày•Mç®;ü¹tŠðR´ xRL™É’æ-èXÙX)J©ÀPÛüûVŸ)™Pì`ïÔçͼì™ãéðÚÒßzŒ�]ÀˆËr×3%#ïmX2½ó±õXûÚgéšk¹Ç<ðIK¦L”-ÖÀ´�ý¤cÀœ{HÀÙ>Á6Ñü}z~ `e=y=ÙîÖõVþ©1¹(=C_ó·ÝÝá¢ËFÊì‰=þ[Š,å2ç ¬ŸÁl°ÁÎ3øóv?àô³ßð£¾gú«À¹Û¥Hx/ .B dà$Ÿ¹úD»Ã5·Îc~iÞôhaP=-Š.4 �¹n¤‘z%¼×(Su¥ÃgÇyæõééÓ×  Nä:×­MoÙyÿô­¾ŽQ7uùM* %A¬dtÛ?›î\þfyo𦭆‘SÖÖò³O¯?ñµËÒt2w^î±mëóÝö‹'iuz0Í›ÜøÉȧߩ¸ \Î!…Ð0U!áVnK�¸ @¥´J’Ò<0g'×Ü;€ÚtÞ\ÿ“ry'N»äšaÞäö#Í—#÷¨Ü �zþq”¿qÆZÉFþ6.*;hùm‚4¤þ.Š<ûÖ¡ê@fŠf� öɘ“Ö¹´RrÚò|²7¥î�”‹Ê$ú1�'d¤ýBÆ?–ê[öbÐNãy=˜Pž%fä} (iÞ¹&·M/‡xpW|0­¸ñfðº‹b¹JΈó³èÉþ'â1ñ}rè ÙÐûÒ^*ÿ1eõþ ø°Žàx$ÊçüA¢g+Éê�ûy^ŠØ`úNäRê-c4/æ€�(g ÏWðOÇH”ƒ{Ù@�Àœ¦È›É¸Óåãôl—8ñ¿ZÌbñ# ÜÈ£²W¦lƒ€µjû•ë‹¡ì¯aÀàLm^×õñ˜ ;†TFTÀ Þ9®Ùt|Äû÷ nA_æOÐ'²”`eea,djÛ±î^_ê½gä(•ßÕvºæÖ.½zŒÅ¥‚øºn²Ûi®ç�õ3Ø`ƒ 6Øy~®ðÏüúÙã~À¿ÿN JHøóÔß^‹RîEJ[dì—’‚ü?Á˜ž×즸䪸ìÚ-�ºÀ1CÙ ü´÷QI¸9€hA‚bÕ¶g¹š‰…�*ê¾vlïèóßÜ�”(µU0 ºd[ÇG'wï¿/¿f×3Æ Àûêdu¶}tª[ZùTyçü3¸;!�p¬¤²±Y^:²þì7öäÕãó¯Ê5—–Žw{.>Ò­Î]‰’ç³êq¢¿³ÔŸHX@ôtÝ9OÚq0¯¹<úÖæ];?4½}×#QD¤NâÕÛ}á¥KÇŸ{ñÍ83Ý�‚t‹Måo cûÜó“»w,_¿í…ö¡ñ÷ò´2Õ `Uü³E°!˜dñ¦ÞVWü„µ¿(ΉD›òš¡V~œ¸U�e:9nóÿ>‘L�XÉ™šh×äý°Í=ò^€`�g7qi€{ñjŒ7ŽÞ/7<„ßÈ[µù�À{›„úÉ8:c™*cýå�aUöÊ´©»>Ï>:67ßEDI–y u‚x`Ö‘iKÉ�Áû¼v€xç/7‚mbÞ[ btpZNQ~Z*‚¦ïh>kÆÄ3§º4�¶f_òàWëx´©céM+õŸD–ð8ºbËÒ3\½·�%j#‰3Y?)j˜wÎ˲%ï˜ôæeßJñ²|l =EA÷–�d"ld|m@ïÐQ0H%ñyO�Êú¼`m~BëÜú¡~â߯çÿá-=„;‚ùMõ, óî4· €Ÿv[ÿ|` ˜çÂ?Òþù*aÐHëdGÌ" „ân'íÉ6ˆYÊÕL9Tæ­.%Ãç~C•Ý9ðŲÓX–¤,BÈõ&—ÉŸH‹e0c€NÛ�7 ÐãN+¹ÜCYA^AÚØæÛR°Ø?ø>ÁgÀ³bý8§;öì¯H Ï¿B<Ö!è+ÑæI-½äKÍósõÍc,-'xF�ÏõCó` ¯Ó�ÛËü 6Ø`ƒ v�Ÿ­þ'?`¡Ç)§ü? `´?&mÀ[ÜU5³Ô¯3|ܘ"f Íͯâª[6°÷à€¿(^¢ªW�úœ#€Šq¼Èî@ŠiVL FŸ~áêÑý/Þ‰õÍ Eù?Ê�¥Ç'ï¸è¾rpË “àÞ;južÂÞí÷áããé\@›ŽÖ_\?óÔé�çŸØŸ&› @+£ñ´Û±ïhšÛ:î&ÝN 3óüœ'UÑ"Í1ô]Œª\\�W婨 d”NæVþãæ;ö£T@³“M3Ñ,éÉ3;Ç;üætdír› ˜–°0:5½uåSÓ7ïùº‹þw  Øêþ“€ ï‡y˜…M a#+¡ %;€Lþ�€!EôVsÚø"gdñ)H™P‡Nž+UðÀŠŸXµåðÓAÖ›ÎdÏ2@Sɳ¤Zû+ʰ+iA²óÔWêÆîÍM6‡e˜p[1€P'u–˜‚ l1  àëñUNC#Ó[ù3•×sŽm‚ÁQd¯qx{†Y_c£°`@æ/s£à‡�ÔÉ­e—^äùGAÞ ÓVJ+ÁäT±Îgé§�“)|Y €I?�îL@y &¼†Kê8>mNƒ@z4–¸‰oÄÆ�sÍ2cDŠ’uSp4fµ¥G?¦ºg}Ä,T³Ý°3Pœ¼�KNorx°ß±=ƒg²G~#4A3à�}¢g1�iµý”fXbØcK‡‚ß)0Ÿlnž“º”ï´æ»‚œ½šÄñoßÇ4þê8„¿ŸÍAXŽÑØGz×±¨½4œ•|l@È÷¸ù& PµC †±�T>ž�ßuÂ4c©åÞ²¿ŸiásÁºJ¾—^²Ì@V¾É‹¤ßÀ X zžùFV¾0„ #›EPÐ~kb†Л /ëÊ높lqNRc#¿ÇÜû'¼ïö] 7¼v„Ýû» Ètä)Ó'}ìqy�{l°Áì<?€ð¿¸ýìÿ®`ÑÓ }§@ ¯²íð.ס•õMÍü%–‚‹‘h[VNàú׎°¼m^#€tpHY'››`Ùel”Òb�m�uêœÙ�ó™×v�œ¸#”’€T€’jCdÌÖti’¯Ùþ•É;Ü�­s›´1K®’pE°Z‡-_ [¿’>Э§}8ÏÆÛfÌ@˜®œ™bõtÎk›Ó�SÓ¼qº+›kctã”Ò(¡ç4?¿�ñÜe¼ÐmŒ.J¥¤œ7ÑŸR¡¨ÿ¬dŸÚ†93ë|a *,Lf×*HÓ|éâïn¾kÿ¯••¹µØ Ewj2?þèówu��~m½iÝ�’€®Ôåì"6ó•[sÿç±<ªHTàô4÷lû KVÍ>.N3¹ê#qèÁF>[¥0Ù¾œÂãêö8¡0¥ßl’Ùä_,ñÄÛËáÅù'¼É~ü$ ô�‘â_ÛHc ƒ€ta¿øþ£ ˆinàeÞ Ókèy1¸"%q’gü‹eç!*‡�Ô³Mx‚Ñ6�¿ †ù:êsæè"ÐCóŽïÀõmþtåàG*�‹}$fÜ6Y·Ñ×±H™/zÿ(O‚2„5'CàtNÜfä&C¶ 2µ]œo‹mcÁð()½²¶�íãÊ‚ôb<þ€hÀ…ö>R.ÇòˆêÜnsrŸ{0¤NO¶�I¶ì[K—âˆDßµ=AwÿÍ ³Ö§cC.K1@�Š#<ßßÔŒ\¨cž†@�{î=3Ì€âõø–å¡ãó½iÙ°¬0Ëâ�|¤Ê¸ ¢þ½õÁJø£À�ûô”EûÇÀ‡ÔA^=a×m“k…Æk Xrq*Fä;…ÙÄvôògq @*F¤&÷žäáîY‹sb†·Š Ž!0n+¢üHžékéa� åÿáÒ°É,QØ|ïi;°HöwtÏA+éæÞ‡¶ÞÚL>4íKæ3AÙtW“køï˜W¼À­oã’+|gÎæZY–jÅ®ëñÓ�õ3Ø`ƒ 6ØyÞàç܉~ö9?à>Ðþ„@´+‘ð íÇõ&ˆ-dÅ�¦ š*Ø{ñq\uóææG5ró"€ú;€ZÇf+·  çò9)Ú•ž>³}üÑgîJÏ�¹à5m‚ëùtzúÚ]¿7½gÿ7��‘ºEÛJ$þiǧÓÝ‹�áÝ)§¥ €ÍX7e¶Ô¢T&%ÙrÞ<ûä馲wJ–q:ç¹¹Ž¯»³÷HH<³suNÉ?³ý32ÖJ÷•Í·îûå|åÖÃñd‹&ߤ`üñÃ7už¸;MòJbÛ§ZØéd1MÖ–ÊÜ–“ùÀÒ×&÷îýd¹há˜(<(ÒÄ7’p¡óDò�ØÉ¦­–eGGŽ–7µù\X6Æ“Isìð ó�Àç¤ð¿£ ƒˆû¡3Âç|ˆò�!š¼ ða!“ØádWbuœ%È�2/ ó‡íaÛ[Û&Å|d{ɵŒ¼�”ɳ&M½£Ix úç’“ró" �êóØÂŒºÇ‰éu_=©eöaŸ*Ȫɿ|¦Ô�uO†l—ºîú‡ºM5osà((`œ°N’°…k+seƶ2 Œ ¯g®¥y�¤|ÂLTLÎ*÷fJô Ëp  X—ŸÇ9°,þ6x–ƒÏUãØ$R?‘ âzømfY¹�}ª€PØG\;»ï§—»óŽ}¶‹¹N�a�’�è®%ÕõûìräIÓ+˜ŸØ.4:�’ÿ­x¬û EJ¾8~pïý€%bþ <ö© 2‹@º®r¶cA©¼aÓÝÍÉFàO aí;ž…ÊpÒ‚9pv€¦…Hÿ`ŽÆv@TYqr¾…ÄlYç§°õŽÁØû2?¡ö©«oN¸æ–@çY=\Fõ ŽcÈú™îÉÁl°ÁÎðs°2~~ýìY Àÿ%ü1•€óÖ¸)½¥,!uýØÉÉûSÄܸa4ÞÄ¥WŸÄ%Wo£S­{Ò!“Ëòå¹ðÉ®½¨�¦l�ßíD£ûÒыƟ|þnœœìRòò[5ÇÃöñó“·ìÿT¾iÇsõöÅÌÿœ6~ÃòʧÓûæžÇ] ©Ãy²œ7gÕÌyRý1›g ªEdÔ"ÖíevÞ¨C­j�£”FÌ¿Œ\}Ù™÷츿”Ù~ú¼»ç6oßñ¡Éw?Œb>œøxÝ—�úèÛҩͽd»Hê<ìV_<˜òÆrYÞ|Ó%¿8yóeKˆ(p±ÃÅç]Ðã¡ÎY•ZQ§Ÿ‚ª y6�/¢q,ªäHrÒ‘î¼vl~¸ü/.~œ‹Â1£ì‘uZ1?“K4MfBpO.Õùäeòë:ùŽY#qžÀƒ:nBÈfãvFN4Žn).? s@œ�tÛÜþCeAãô³ýÂGòê;œ­èÙG†õ²ÆþŸ>ù�Z†D,›ZìÍ\~€>Ϲ2 Zã1êPÖöðù¤\®=âÓ�ï“ÿL@Ö1(ë;ª³�\ÌóçÁA$˜üÓòîÙR6bü¾q}̶�V”Á;f! YÏ- ˜[+õgEò|m†˜õèA�€qh€­³Ì8éK æß4é #—ë!{8ªo E¾O`Çáþ¹ÞŒÇã1‡šo®‡iDÃïˆÖ[Úɪh~½Ôö…XN/–ÜõÆc<ðÃ÷ ÁŽ¿¬­XyÉkž¥ìXˆ€qs4Ïþñ`‡/zœ2[F¾˜}.Ný[¥a«yð§š¶©cä*ÐaEßÅx~Âréø¼ ‚jdýóxP‘ïA¾3¡ÁpR¬r¼ô�€Ö_¿ïv^®cKm¨´ô2õpL)—{,œÓí¹¨ÃÍwvXZî¸_¬ô„ü¹†)4äÞl°Á;ÀÏ€ÿÀß°Üã”u?SsýœBµ¢-émH¸ƒNp!bøÄÌ þÍ1tæÎàê[7°kßràÌ4,Ýæ¦ÞdåfêµL‚aK�ï•ÜZÒøwž¿©ûâÑ;Óf^Š'˜(ù’å¯OÞuÑ}eÿâ©öXÃ~§ôâc¸xÛçÓŸŸJWáU5�Óåé�€2­’kþLQf« aî9O5P5OÁfæüi¶­9¶æP¯Ë:‡auzõ–ÿ¼ñ®}ŸÀ¸Ë€Vt›JݤgV·�?ú›»çׯ7mž”þ¾6�9z9@Ë»—¾¼ñ®«>˜¯Ùu8Èoc�,'3ÈH³Úp©ud5αj>�€�^bÀEìš*Ðo&Áº $à\"rJáqÝGäsÙÏéMs=˜D«,ØeŽ Ô/�oê¤}š¾àœw£,Ž4×càGÚE&œºŸ 7÷Â1�  àrAä7Ë&×·Pˆi—ÞÑçH¶�ð ¿�D_ÑvÖÒ©3Û3€úåýàE"±yÿ(¿V”ãE·yÙ7Ÿ‡ Ø` ½¿&\V #¹hþ0’O\¤(Aú2t½X0K€qþV¼�y2?pY6´ŸÐÌw‚í`-Îùà¥ÅÔ êÆ[á{S£éõ<=Þô#IÚÜÛ„\Rfm>œGè÷ýa»ô“f óщ�–Ùš$o¥q8*;ˆ]'¼‡Oö¯ÔmÏzäy�õ—c�¤…ä·w, o¥x† é޵Ëú •½‚úŒI‚à‹ 7‹ ‚vˆó^y&'×í;†KOʆ“ ÇdɾµÚí¸Æw©¹~œëÅ!æ7ã%Íýâ¥ãßÃ3„üж‹ŽŠí �ëÌcÌØËŽ¡”�޹âüŸÒòÏ‚ÞÊ;ë}‚æ8 =NÊî#þÕé×JÁ'me\UÞi£’‚[ÞÉiÇW*ùæûE1`o$·b-¾Í&¯ÅÏ:PNÕ´�0?â~FG›yoY�ŒùÈþªå–º»„ã®N¼Ÿw±LÒý(Õr{Û#Ÿ$+ÿè�‰1³n_¿8^$+ø°>6êÜÀ¬É¿{|Ä,ë…b1ðQl’{žO†�ÉÙƒÜPl—€}€TÆgÔ‹Ûû2¢´ öÃu~ÃúHÁ Ø,€²?ú±‰¾÷“È¿yÐ\�Û4ßq[¤@ZžQ‘lt@@ÌtɆI˾d^í+*(ÙD±îÜVëa™Ã¡ô¦X$�ª ‡H*ƪdòû¸¼RñýIš^è”ÉFŽNêáû�ÞÔõuâÀ|špÞ>ÍAÀZ0fñ²ƒ^ZQÞM›Äm�R+ nˤý"Ì‘Çû÷ÏÄu�eYûAÉ[îá’+ð³]i%z™kN¹·Ál°ÁÎøóššçç-ègÖëCY ¬[£éÏòø±RUÞ¢äô6Ò2Y‰¿�%ãÚÁ¶‰ºd%™{5+ý¥y�ºŽ, =¼C'I=[ƒíä±P”È´�8ûêvso^Ü>ŸmÂmñóF'§‹†g¿`Yä8ñÎýšëðy‘|. >£l+-`¬�üºJxc¨hìÅ:¶m£g:¦œ“dÛ)¼¢û(*)ÊÁ£ÎývéÀ_{â7˜îAôxÖè{Þ÷祎•ÆŠ¸ÊñÂUbI_-ˆ=Ëeä䤅 —s‹ƒDŽËýx©v“ó&ñ~T®Ê>ìÇ‹¿A!€f%àL‚~åý7˜ë¶<´ ?_—Úñ˜¹¤ý�}û°œö}€„6Ò €ùqdÐ1ƒFžï@“d*(¤ÌÜÔÉXÚ"“€e�‚�ˆ%àâ> íkm®¸\²—:–±©—tGlíøµö¿­ ¾�j‡Ÿ·û¶èr—ÏÛ .Èdž€x‰‚kÝ8|–ç粫簰d¾/:Çà¯ñߺ^Y?ƒ{r°Ál°óüìð�üeæ¯ íE? àß ~›èÜlà î0åÿÑ}b޵Ïã4?Ð]w_±•Z‘¨:ר÷;}„Žl7‘aÑDš÷ä@}tß‘CãϼxO:3ÙÕFñÖ¿:¤ª¦¶sþ©É½û?‘¯Ûv$�š°^€¹Ãؾý3éûæ_L¯ã¾s° à”³Royö7*«§”)ýyÕ'”óPŠ4çìXJºUvÏTýzeZ›£CA>[Û<./Nn[ù•Í»w}É€âäS'&#Ôº¯�ºhîã/¾=ß¼”ƒVI–åÑÑÉ�;~kz×ÎG‘sZüןÿº£k7£‡•-sOn¾ù²_šÜyñ#áÄ‚5Ð §WA “¬²�ÇIWE>‰ÅJ>‘qè`¶QýR6M¾Ë¥©OÀ#Îy úÔN�ÄJF ¶­DÀGðÜ;ÿ\ݧl«ÃîÁA<(Í(N¸8€ú%óî!s#NýHxO(kcú›À¤<=ƒ") ©³ÉóàsÓ”ç5½(�ß�:céì×v¤S×½ZçþßB•£C²Œ@e7èõô·©Ö8€âélGã<áuÛäöþ™ä¶üQö‹ÅÝ€ ¤sb&„˜+Ÿ–Å7Á6©{Š€Nðý“k !•–K�óØov¤€àQþŸ6ÿ…c ƒ CVÚDÞ%"y‚Yý¡^’?äÅln©z˜ŽA»N€!/[ÙH@:Ç0²�V.¶‡«§—eöæy¿;fT%$ÍååÆÿÔ$ý,f਄&Úœ‹R>—§E·» ÷ŽðLV2¸Ï0£¼/2Æ�÷˜•ÄDÐo͸«ò�Ú®ÅÛÙ™€€‚޵²œ¢ÇìPšÉ�Äû¸œc*Ùš3 €$÷¬Y¾ Ý�Ý2f¼è}¬ü(¼\ÓO¼„c.Ù=K|_ý š—m×á£cJ:frø^hÌ×;u-ðÓ–M¤‹€õ:.Š`˜wG>û,u]W÷Áä£ÓwÁ�K®¿}„¥åQ›Ç'`(fxãõE�Çroƒ 6Ø`ƒ�GàgÀ_ð÷¬ô8eàð�¼„jôÿß¶¸)Ý&˜‡býB4?Ú_\>…kn�be÷R½ŸI"Ù/ê²§Ü‚jìë.må; ›¹ÿÆs·�¾zü i³Ìûø›³hI·–Ü|ï�Ï”Ý gL~#Ç–¾‘mûBú�Ñ™tÎ]®‚5Êš-óÜaQfÛ&àO4©nôyrü.’Ëšs¨+ëÓ+–>²þν¿�…nÂn€ I§ôÂÆÖ¹�~k÷ÔÚ͌В<# Ì*WÆÝF¾nË'6ß³÷~Œ;R•réæ~ó‘×�xîÒfÞ�–÷-~ã½Wÿr>´Â—P -ï�!ç€k@ÁdRrÿXÇ0sjµ]'çL'§q§„sþö~ŒãÑD‡†·þϾÏwàÏ#ðêYÜÎ\F’°‰4–º+¤õñNÓ? "»dò]ùhÃ8�E1’`JhÚ#ö��B&À ÇþñŽHïbùv¨|ïÔD9Xyq,ðÿžA¥Î1þ qòð 9ç™Ã ‘Þ&½•‚òùgl•é|ô@ sDr¿žãžmVîõ. =/Hr<_]�+ÐËn&>„“Ó*=àåŒI?nYé<’m僲*ø.}N¿™~Œ ¬Paöž¥Ï²tá\µ}[ë?Gá‘F¥Á}“ÔŠ“[6¤2c%¢“f½ØÁV*Û�‡â ªº¯‡B‰°‚ã�-Û€ëncßÁ‘–Á—£Gþ|“-4­ÿòà¢l°Áì<€?ïð/ªYûM?àkøcf áGðbx€K`' ¦ä˜ÙçÒcVöÃÕ·Ìaqy.`ÿ„“>ëàòR.ÂNåˆ(qf'\íä4š¬¤×—æ~íÙ7uO®Þ‚’kS‡T2JJH¥ þ]FiczóÊ}“wíóÝ^^V¢*lÿ½tÇÒ7Ó÷u“´ý�ÁHy3¨J³5Àïì<£”ÉÙ¦žN7„lœØü»�Ã伉Ú\eºoþóë÷îúpÞ¿xB&^Ô¹wšä´µéxî£Gîè>õ¦4Å'þ©ÞB‘—|pé�Í÷îùxÙ=¿ŠØhÔ“ þú»ºG_zg*˜b+6ó•;cýý×~[æ×½<—mÃÐQê&�ðÑïà„0r¾;I:·=Ø*R/­, ÍL®§õ¨Éç¾l;‹@2óK´ï9×€ du8Ê'47Ì.k¬¿ËBPO½ñ g¹Mä%�9¬�˜•´Ò¼ ìÊ.S™,é®Ú~Öµë@¯0²ÔY=¦¢Õ 0ÉÔ¥ ¬d¢wn°Ôî¨fýô€wéµXfJ!õÈ�òŠãqºKôï™bzU—cA™-HS?ŸØÊ0ÊZ° ºç€Edó(èPÔÄ28PP~n7¡~Mp„ý¹® @”ùh»u/÷åˆ8_–gv9ù]ýÆ9¶ ¯8ÕÉoX€‘ì#ë*u�ßAú�óŽ7+Aä�\à}Uê¬GPPA e?©d,ÍCnAîÎPòLs¼¸ñˆ£{Ó~§²™ë(7—¾!¾ÉÕV Åœy0HÙ˜ËÊ;½5PœóÆåØw¢–×�©Ü˜�m¢Ì'ʲ ¼ì˜JqFàu?)�vtnû¼i»´ï15/ÓÚßj n ž¶¾ ÁaÄùo‚¼¤ú]ÐãÊËÏË”�*]Š2“n\£ïi•Í šÚ ¢Çò´ðR¨”½YnLà“±Ì¢ äskÆœòî¹î¶^1‡ù7×k¿)·[i85¿msÈó3Ø`ƒ 6Øy~®ð³Þ‡~öÍ üüZûÍ@çÏnAJï°Ý‚81ÀŸr6q!‘ÿ)ãÀ¡c8tí2FãΤãdßýX@uŸOæÌ¨­x‚Éh!y‹ÒD¡tŸØ7÷Û/¼-½´y JIHÈf‚’¤²i&XUfœC@ÎÝwìêñ玽3­æ }Hµ]Jšm+;Ç�m¾u×Gòu[_p2Gt&r²Ó=zlçüo<ò_t‡Ï¼=¬Ì�^šÜ¶ÿC›ïºê èR‘I¯L^Tc[' :}1“” ´mâ�L�D�lgÄ›$šµQ˜AÒ\^K&†~î| .é©GŒ½Y֋ϓȿP>(Èß@‡¦yàÎjØ·É~ý{G.èòê¸÷�q~Ú\c5?”Õ±OÍßð‘þúŒk´»c€©3# è+ÃÁmþxc&ê9Ì¿à]tI{(À×6¾™Œ³Á³€˜7ȃ‚Ù±ËB.Ÿ¬?û|¾} 0©Ü�:C[öJËÆÕà™/˜A€U×kÄqÝ®c,9ãæ\‰Žö‡-ãˆÏ{�Ê0ß¼[ºdÆ/ÜßÖÁ ƒÕ2>èŒÕ<3 0ì}6Tú²eéø-|.½lb6òÌk=ß�G>0‰r|�"%ïÅvµ¸Å:¶àµâu‘½t¬GÏ�•g# <8èÇÐ!€1ñÝóï­–E$ñRâߦ>Ët ’œËcÈM‚ŒA‚}Ýß/«`±žéDþÑ” Êe-[ èÛ#ÿ\Ûu®ŸD�4'93ßuËeÚB˜NÜ&²o¡D´irË|ñõ�åÌy­^¹sÚœHˆrmµy�¤±ì$ CJÇ(m9ã¥gÌÆ -ü5Èê%YÏc‥ƒWt¸î5#,,uÃ4‡ N¼�ß,JëL¹·Ál°ÁÎð³Àßð×ôñOŸ¨Roÿ À@@Ææ�ÒÝ(å{Œí\_«Æg›€ŽÇ´ w±ÑÜ®¸aû.ÙR¯Ã w?Ço1NN;±r‰î¹=’ð9€ÂȪºâÅëGŸ;zOZ›®€×Ɍޡ(ï™ÿƒÉ»÷,_±ü¢8[ìK¯óÏ`×öûºÌK·ö`ipÜ[·Í@¢º�ÇæYžä2©~ŽéWI¼Î\:6¹që‡×ïÙy?F <(�ŽÕ oeºGNížûí£ïNG7¯RúQê��QÛ(KÝKÓ×­üöäž]3�mæ™\ª·=þ½§®�ûÔ·þl:½y zXÞ6ÿÈæÛýÒô¶Oò÷ @:ÑdBÞý¯Z]¬s89V¢¥O�2s²q›VtLGˆ¿¦²>\�Íó›:°‚hç ²Ô3mÐÛ�yí$ð"§J”Âì·"ZŽ Eë~ÙöOâX1Q¬>ª×�br¯¨ü±)ê'Q"^Ùç ÏlIèn�Fm©ël-b©AïÔðL Ö™Û;)Ê)ä¿•j†õcòyVŠëßÊñ¬–Ûü-Úþ¹¨ü[5NlòyÕŒ–pšzÈÌH²k h�C‹ærFïñ@‚ÞÙ_AÈœ3hÖUìCêlÝЂŽ.?R,C$ï¡R±À¯¯;¯¿‡æYÀUª­‰ÏÕ! ïÈ÷¹²xïX‹@\ ™ßû\p{ÀD Ü£ž-ޝŠîΉȲÙþ¡õqÌaå/ϧœcÆq.<$¸ß_ÆRÖØž]Æó­ìYÉfÌfòÚ||îy幨q8�²iùœºwK^˜ï"ÛFÀcS†‚Âë;Iòv^ÑÊT3/�ù(·ÕôUPî9Ñß“ó?gˆ%š}~(¶?Ûžy°¤©Ü=b€¶´Å¤ü¯Ü ³yF�,¯gô²ŽgaùC6dßyÛÎ0J·l+¸õ�c¬ìrmÁ˜8–wã>Ynroƒ 6Ø`ƒ�àgà/øi{z*�ü? àT ?:[ðN¤t“ ,²¦Û•Ä9±Ï´´õ$®¹5cëÊbàˆä¶â�—ó‡s]“ñ–6j8Œ2Œ Øtf2žûõî=|ê�˜–1ÀA´±<½rËý›ß»ÿ3X™[ãàRY@ZsþµüÕtõÖ/§?=ZK‡PÉu>4­øÃ&‹œ§Èe bU]•‚Ë ž‘Qeµ+Ig‚®a¶Ž²9½lþwÖÞ±ë7Ë–ñ¦ÔO@J;™HG7—æ~ýÈ[º'W_‡‚ëÝêØ§#¬M¯Ùò™o˽݇ÅnÉL€rɘEK7 CfÒ4�æõ›o}õðÒ$oëóòš^´õÓßwõ‡Ë�mÇ‘�<ë'p©ƒKåÖb ÅËÏx‡› mÒ]ó;õŽÂÕí>9 „sHöOÓHîšTUêí£ðÚç鬑 ØÖÇ98èìöNukQg;‚Ç “|– Gä¢5ÌC—ßEß�duÌK}³�‚ÀjL�Þ rFÖ}Ò6*]$·ñmÞöñku÷UÂLAp4ŽÝäI.ÊŸ€PËüqºóáwÒxZÔg@b¥¨ë!�h åÎÜsïß;ØwÎ~–Õ;tØž¬€K¾»Þ±'æs@´c Àô%uv!v¸Eù‘ZÖÿ6¡é÷1;ìÑ–Ãëë%àZ¦V ¿E1S”`ë¦Ý(¿‹Ò¬Úl¿“±ƒeµ¬8³ä}i¿…4 ô9¦ ?¾?Sßü$kALÏÎos�©TëlIë;fr]ÈR–�±Ý#Óo£‚+*¹Ø÷Zq½™Ö6ðÄ˦à¹a=U2Ö*(X‰ÔV®�kæ9 Ø.ÂDÔk‡žd—m@D�̖ɰe[ •f*<3+éXhau²Í,XÈç= FRÆQÌb,Qþ5Ãjµm"׌XêµÂ2îN³L߈d!ÓÐõÞ§˜�ïÕJü-T³s±Ûß<ƾƒã øË8~�eËQ&.˜ roƒ 6Ø`ƒ�'ðç-~ÀkÐÏ> àG<€jô�c—!¥÷8€RB�Ç[’…g‘¹�]û_ÂU7-`naHN„‘àu»HM‡·#֔ލôADÚ‰Fzzuëܯ=ÿÖîéµ� ÃÔ�ÈõôñQ”F~&‹œ�·sdÃdˆ@·šuFxSV‚q)8ÖãZZï09¹‚ RÿÀ$û¬žŸh·¹^¼¼˜j¸kÿð8`À3梽©/ß¶�“ÕK‘üœUÛ^Y@´â`{P@$Ý <þ„rDPÔƒ(Ú€ùÇ(”F„\´†�SïXûPæ3/>± â8Nî,÷QG™e…:à§n³¬5 xònòb»'×N÷Æû†9‚µ>ò^Ñ< Özäì²Ð§ÙHs•UÕzh$¾—; ÊgŒuVFC]†`Û"x#vØûw©þNÂúÊ%:^qr¹Z „i™=øÅ¶ó/b+CÊkf€EÇêííàõ \Ÿ*V 0@#™Ód?0ߢà]ìþ·eRÖGœ)–Àóïue¬°ÜdþDAÉLƒÂßÊÇv¼¬,¥mËäã>z+ TÛ©¯"6n>Gà�ÏËæÛÝŸãHL/iÚ ø¦/4ù干ϹÅrðÚ¹•PÍŽýäÚ"–e¥Ùí±4b;gí¤æå •xÍ-s¸ìš1æx-µܳ¼BöO©ÀÏdpO6Ø`ƒ v€ŸËüS?ˆ~ö$€¿àƒeH~èG¿{Ê ¼ÀÛlAÌüñã�î8InŽÏºÑ_~—^½©ëmÙGv(%ÃD1Ž® êçØ¥ƒÍ”£/;8þØ‹ïH'&{Veëø…É=»>:½cÇ“€t³.ú÷èW>Õ½gþ9¼9� IÀ¦ O7gKT@‡cöŒ*óFÿzž[‘—‰(æä¥îé�×oûåÍ×n{„í¡ŽŽÉyô{Ç.æØ{Òé¼_¿næ¹}üôäž¿þm�ìióÙéËË‚±hôðá}s}ôÏtG×nA+‹£&¯¿øƒ›o9ô L¤Ÿ‘Ú1À,©cýlÔž8€”ýá#Q=-�Ç›ü61û^lrœÈoh;ô?bGÇ–ŸÈÑâûW Gmyíq—|ÙGÄ«EÑ«-bt-”«i¯ÃûÚïºîïè� Å!"Í¥`1û™ÿ½#ÖK�¨´yŒô[èÐ2lPÞGÀ-oÔfÞñæÛ[œ¦Æ)ïaºGì @Æ m~›\l <ózmî3ÕïeÞ ,Šˆàâr)¦ØKD“Ë€ßz)�wd¶2‚Ž-‹8 ¹H¯Fyhþ]ᢜõÙpã&+FÉçŽ`iáu<€ï¾—Vþ)vüãà—úÉ}*k4ïèW W—¿±„RÂu!ãI�½Ü‰8ÖµI@))g›ÇHDˆ˜l«è¸0†wúy=Ø¿$/KÛÏ��™é�0püdÞK—Õs¸Ýt3ߦÞ²Už1lêfÍK«¦–M™Àz ¡¤³elÁ_6OÀ“¼­QŸ±ì"ñàs=|íßÑØÏÝÛÉÄZf‰2rõï<¦,|eöêu8ï4¯¯@Þ•÷òßlZ,CLuU#ð ïXÆ@=ÊÅês!�–$Ø&eb«í;Ëóså�óز�¿·”Ƕ¡¬ûmSCžŸÁl°ÁÎð³Àßð{œ² àŸøç˜­ÓÐw¶- ¥·¸ @Çš¤ –<Év;vÑ /Ê'ÏͯâòV±ûÀr�ÿ$õvl³ ^‚‹ÖÛQb4P}pVZ¢M º¹�¹uô…coMëek;Á+©”T€RK�÷/|mòÞ}¿“/[:&ÇZW¶:$¾…=[ìî™?Œ×§œ«\õ-LA•ˆ sæ¦TÁ!`üT¦O…˜hŒÓ›×,ÿ§µ·¯|£Î´�õIoé_Ý9÷GÞ•Žl^/=¥˜™ç|wrzÛÖ�nÞ»óK�fûŒœNÒÛj®•c¡ÈGãÒÁ?÷ñ'nÿÞ36­Mö£‡å mÞ{Å/MoÚûœHÐè³u’ù6?ÁããÎ#߃³ò û†I,©Õ°¶R3è#µ ÇÁK‘Dy¾dæ%¦¼[�çóoû"R“üú>ð N€Ù¦1 %�.Î1é�M¾îÒnlW·N"/âðI@×Ùþú>d®…—Å|YÔ ‹E–ŠTG�ö1Hæ�ŽÞ=žÊvŽçxœäi”S¶‹ÿMq=— W ó¢Q²{0Áë, ÿÎòýÝå÷PÆ‹}ý+EÅòÈ󿿉sXÿ{ot[VÝ÷ý÷¹Ã÷½¹ß{ݯ§×óD7ÝÐjæIˆ±¬É(H¥Éq*‰J $˲ÙŽ¬ÈQb�Êq*•Á1B’-™B€d ™Iˆ©¡�†¦'z|ã÷}÷ìPÎ-Výw~YuŒûI {U½w¿{î½çœ½Î>ûì½þkýÿÿ_Œ?ALù¹’·ß5vàbÒ0餞t"¦¥š&ÖŸ%$:@¹6–û??NÛè|?€1º yƤä­ãhÂa鼉Î)©�‹s°P·Óá1¦:tbÀOÅü‘ëPm±MÔ÷K¬EdzCvsÕ¡W¢®­Õ_¢*ÈDÇJùßù ¨ˆÕ>“©:Êf·‰jÑo•­ýÑ&SA?N+ú]N¯† ÐòµèfVíÞ[tý:td†ã$�Óã4Y8¯ºÎO·nݺu;CÀO‘ôý’~EÒ…šf¯ZƒE·«±^ô�c‡%Ý,•«`ájÉ­Mlä¸Îžý銪öìÛ„@(.xA ÈÐD·À‚¢^–žA¾²5Í‚bEm/–¯¿ëi³O�x’FÍ ”Ë‘¢quõîwo½øÜ÷jïì” ^L˜Ü¶'ê|6?¯§ ÇÇ‹¿ŠE­Û:&²ÛêI�ãÎWuƒÆ½ÃmÛGçvú‰ûÞ_ÌOE»i~\Û¶€9¾Ú\¾öž§Ïn;ù4�u�T"ó©ÙÑPvV—ïz÷Ö-‡ß¥½ó­i „ÆÁ²Y ƒ|[ãü+´pß1ûĽ·”UÝ5�÷d/Ú÷Ž­—\ýºzx×±&¨Áad%Bïb Šdqe/ÖÜÆÝ/ó·Ó4HS@| EgôZÛ“SÅàEìî'£íšÀÇ�}ŠƒÇYÕ[K÷•г3,\!^ RA&ÄÄÏ#@™%‚rÐ.{ ü³ŸÓ”€¤ÑßùwÀî³õ�úy‡ÂjCÚU©Ý'={ê˜<ײ`& Ô3U™’…MÏJ@¹¸zE¥ ž9@SíÜ Щʸøø¡¥…«ªÊIÁI“‚|×AQ Lô1…3Ó�ñLãÝßî!>Óž�™Á,p‡~‹¾Á´wœ!åa¥jÐPfãF–„–èÒ‘O…š”¬ºÔ׈–/¶QÂcY˜½b€(8dÏ î1Kº±1æhp<×NjVÔ¹A �)Fí³ÖïYEj¦sØÒKZ`€f$H÷‹æbIòÁT¹IÓL’|8îô˜ž¬WY/rýq¼7dÀ{~dÝ’è]û†éq>Pà¹m×8Œ”ÔÑ? ¦ZR‚­SÁ2¿ ðÁÆýßÇðÚŒµm…�ˆÂž9á/šÿsõ�xÜÈ“Òx}bmÊèèK ßôŒÙZç3Rˆþþí¶ÕéÞºuëÖ­Ûž°ÖùyЦÙû×:?ïîÞ3èÚ®\Agût…e%Òï°Ô‰4 1é:ûütéµK-–s䨿 ÓÌDY=,08s(x³è2UA †Ï�<¸xãÝÏîÚºF¥”l‘]7†c«›ö¿uû¹gT3�q,ùÅ*¦ÍOëè®[uÃp¼ž;œ¨GêÉ�sÊ8.ªªjT4nwíœ7¼ÿÔcv½uÑò˸¨ k'ã«Zoýò�ó{ž¶ë~ImÙ½-2Æs—ݾùð›ÇKv=Ⱦ¯Õƒ¯(P¯ø,1Õ‘·Üylßò ·¾tøâÃÏpx“­Î‡ã«G~ÍÖ-W¾K˹-Ì?H³À(iBP@¸º¶. FqE}ñœÀ0éú. Í�H &ˆÁ ]�í,ö\Û �{–è{@˜ž¨œ$å•~ÜÐAI¨�Ìo‰è>d÷[ûÓ .ûÖǹøxÒ\Fía÷'#d\öÖWÒ u¾�ËûS^ê¾pGpddÃgâËdbPжgz$¹_¼"ÍO†™ÿ\|Ú*r�þƸ_G¸ãA˜ŸÉ¨ ú?Ñìðe¸$ï’ëiØøê>ÁÎ[#F³êPìµÞ^6Öjðàm¬ƒÃcqüe’D{¾†&–k.xåUÂM{NZÿ¢ªŸRÒêî'p~ùXfã†o«Ía@”Þú„�…Jé 8CŸú8úƒžC)äÏ»¸Ê“±Òq¹ÂóGü@:Mß=ÑçÂ<1©úÁþÀýŠ5€r 4o?¶�uN *áè�~¨©4©N�ês!ë6Ÿ W�V`B˜Ò°ÐfÊ+ hj3ŽÒ0H£ï»í¯¼Ošão%ºç³ê¤Gõ~ó²¡ b]ÆŠUÈÅÛb@LË IDŒÑZÛ ,?û½Ê'§I´ £è£\íç}&[£HW^_tñUK-7JVÁÛñ{4‡�ŸíN÷Ö­[·nÝÎðsþš¾í‡5ÍîZWüüŸ½U-ô }Ø Õ'Hú•²©6¾<”$Üdaþ 1žÙl[^ñ°Î¿tw|Ÿ…Ï#ðB´o*6ÿšX>î\ÂŽ^A€š™!ªÚf\iþÞ.›ÿéý7—c;çb&i´±Öý³/l?ûð›W�Ù÷Eš²ŠÅ-…t$«U]ÜYÎï®çÇÆ}u³žXí*'Æ=åø¸¯œ\�5;¡YYÁ õp¢^Tfÿö¡£‹w>pKyxçÕ2¨Ôñß½jÜñ‹JÝ3¿kçéû_·óÄý·a°)"W+Ðm>8Ë�³íÖíŸ}ø®£‹·îeÃC§¯Ñ«»æwl?åÂWï<í¢�g@Y»ØŸ”ÍÆ•¥©–Z þŪ€&§ñŽç hÆ›žÐ(P¶5WÜ/䣖–$§r` Û‘�¡Ô¯€Ê")ø\ø J Îf—Ä”sÓ�®/ïÖ²ÆðÊ Ûö‹œ"�>Ãö…o!èû`Œ4N"kÚÁwUr¿GfÝ#yJ­”&ámèÂx@€K?n´±z`0ÌÏ èlJI‹â¼¯Y 1X]�’²HäHÈ™ÆÉÆYûK¢ßÕjjI²÷@Ch@¢ƒ­%¡ýí§3jƒ‹DÊשøׇõ±rªÞ$I,´ loü'ch �§ áCº>Œ4�j.Ùh}@«w|ªz´ùÂÚÏð\�íäÎì÷‡A€„H»Æ�ƒ ¨9Æšiyõ�ýÚ”ƒyÜNª0LZ/°&Ij¤K7ZU¤Ï¿ìZ­óJ««ÄÕÒLiJ4zV• ‰0¸K7ÿ¬òq3¦\Œq4ÆYûÛTœ8GÂçÑWyÌ,ôìЪèñi_ƒºTv @‡)ºKÜoPi—Ðgów¥ZY(˜:x¦ê¨°¼:Ž}l××€lLyÍpðéºÇ/´wÿ,Y_T±ñ˜å¿i¡�N÷Ö­[·nÝÎð³)é'%ý¼¤½ƒ*Ô_—ô˒ꤙí¾â›ª�¨êY*zœOÌm –2.7ßírã¸.{ô–Î:{W)@˜…dÑQбF±àAÃ&+§‹7Þó¸ù‡~¶vê®vB»>“q}þÃxtã[/>çmõü�‡½²£ ½‚ú©Î gYqæ! ýÇ‚j¸ãô�Å¿ü‚áK[�U´gÄ‹»('w®ßóÖízŸC#Š>Žt„àl;]fý…¬?-U¶à5,þè3��ÿù�³l­k‚�‡w}`ëù—ÿÞxåÁ{\ˆBï°ð$IÀ¹?5$»W`± @)ø„i(pÑ­Âb­’"öç@ƒý©åôKy6(Wÿ°O €³ ƒ|s+Z/¨�Ž«Â2½_AÍÊÎ1¸ý)`í�™1(…×™h˜ðÉû†ûAlùcº&VeÇcf¡ìUJYØßö‰`‘�åmõL÷Ya%¤rZ/�ùzD€›@!ÿþ4Í)ǽÒ0× «H J©ŒÌ2® kDÅ1!1Ã’\ UTÃWv®à›Lg†ÅsœÆ%º7|¬à„ Ë”$JHÖÚ¤yÃÕ ëqÒßt�ó€¿%þ€�¹Ñ{‘SÀx6„0}i}<¸øFê4±kðùØN´­6W$zfª6Æ`w|ÐVð¦Î¶ ê\ò¦‚_\ÖÞJ«¡håõI«3èAìœ:7ŒA¬èî§å¶Ý�:Ïd(Èζïbå2SŸ9°¨ëƸd`:XŸŸÀxí³}Ðáãy$Ñ¢?&˜=‹8+>¶>Áp)-ñ ŸÅnl;P³¦IeœœÅ˜`-†ýkcWÑu�›ëÈ…³ óØø;ûžoc»éü¬z8­[·nݺ��Ÿ¿!éW%]®iö¯%ý´¤Ow~3@lçJz�¤K/@7˜ùw0®j¶ïàƒºüуvíYúäÜÓ3€<Å&¹î ˆøFfå:ÓÎÎÔåþíÍåkî~öðÙSOT­%¦Ž¥¨Ôª¢º®¢©ÊÖêQ{ÞµuËÙïÖ®ÙŽ/õ͸@µŠ¨Ê¢çÜ~¤ÆŠŒßã«ùòõ÷>cöÉÏÔª,cY×A�"Iëö”ÕxÉæ{·^rè�êÁÅ)UÕŒÉƒŽ {Äå_P¡á Ø”ª0ì˜Ç·fË×}òy³[ï{aµ1�g¼ôÀÛ¶^rÕêY›§` ò\ãdýÞRœIë °ø”*gÜqV�Q²xÈï ˆçqF ä‡qöµSLضDä[¨ûP�2¦ðÙAæaJƒ'á…¬a Ec�e£òmq:ñûœ†¢¹1Úàm6àÛAÅ>`/'ÚGY»¸*Ó�0¨–ªä±s–@à¼È̲ÐßÚ,~)«4À)sê7¦dðGAוAfŒäû9œ=;+ÚÉ«“Ú`™Ýkþ\† ªU#L²”†°ýkú5Žsµ,úDŠªXÛà#Pç¢!-W¨¥Yù¬Óâ [T©8”Ñ{¡|>P²U¸ç!EÄÇŸ¬êÁ�ȸ7À‡èˆ×‰OÅþF0HjŸÇ­Z&Ðâpð˜)¼Ÿ±¹o|#‚t®º–N|Æš]4×3?Ø÷I @R¸w1i`Wö9>/ù~` Ùýl€ ùÂçsÑ3“*c›ÛAµ¬�Ê4ψkÄÕÄNgj•’H êǶ±©‡!�)¥$¦µ�>þ•ÛŒ.ÜÀN^È®)ßÖÞÀ{Ìoa÷…W…¯9QÄ}äýª;�Z¬#°=ÌÖb)•bèZ¤¸Lì hNT«¦åý„µS3PÚ`XR xý“f:rÁR‹ex,· ¯ù<Í+�¶%m÷0Z·nݺu;àÏ ’~CÒ³5Í>º®z[÷Þ·Äv­¤çK:˱·X; Sd(à³"©Œ:rÁýºøšMÍfeSpË«UJ�j^Î0ƒŒ~£ý0*ªD ±ÍÈ”Êð‰ã‡—o¾ï–rßÖåëix»°ˆÐÙÆpÿö“¼iç™g}LC /Ô:·39h�•óÊç@«ªÅ?pÃüý½P§êY¹ q)õðìã[Ï?ô†ñê]w[p#éq^Ã`‚¿<-õ,ô€ï  á \¾ñÖïî:þd��>Ѓ«Îùý­^ñ^͆1‹ÿˆ-3:k5Az¤}ûwÛÆÚІ¬RŸ¯�´�+�°2i²9g8;šïKà]¨4ñj£ö0ã…7<dÁóKœ–�…´%ö� >Œ-ôJ€ú,|`çâûr`14†Ò  ƒïÓPJ —ö<Õ—(øÎ@`±*;ï+®Eè`ø ƒÝ¾¿ ¦Jh9É OJ…éëþ8=›dú»õ«�«¨K!¸&Pý4D?A½Òb뚟֞ >?ðW ¶qõS€Ö\dúoýšh‰þѳ�ú(Æ^^Á€þ-,¥�sáýhd°›Ylü¾À@$Î3x”ò"ÇšW¢RU�kQšobç±?*×Ïc«ûÿ¯6S²r¢U}ø+ÿ„«.™~î9'íXx1�g>‚ :‚�ჵŵ‚ö‹ªðÛþ‰íÊÇÝœf5ÌÀÛ;8î¡ú‚ü\õ´™ Mž�w6÷1@Çkï3ð¬´õY2öò9Øï½¯Òq@ À¥xuÍÛnó¤x¥~ëÕ»ñ‰Â�r'•@�(b¯¦w´¡æ7ÒŸdˆWÊ“Mðžkç_ü;Ó壤ªiIо^£êàð§o'ªhÓ§T¨Çª‡\l×·Íßqÿµó÷<ø‚rr<¤˜XÊ&ÈëEn=´øôöó¾auÝÞ;ÝÑ@Ž0¦“&ÑÀ­ÿžýÅñ o»ÿo”W—¬+—ÆõgE¥ø>7‡{·Ÿ¼ïu;ß~àãA�w˺ó PîV�å ~pó,;¬x‘D‹L¢Ü˜¿ÿK—-Þù¹ï+Ç·/Ó«{ŸÝ~ÆÅ¯Þyüy·BŸKD�±�-hÐfʶ´hXÅ aŸQ¾yU‹g:BéÎ* ÍÚ6k§÷Ôá¨R¢õÀ\èâ*ÐŽ�f‰Wð„¹Þ‡˜‚*‚œîÍÌÄÏSÀ€ýÏzcŒc|@¨bm–<ûÇsØ¡µÓoã¤**¾” KS%Zœžqh ꥕@ ="øÔÇü�*¿/Yª¾ˆ®ð¯”ñš€ž~)HÈAd£�°PÕ°ï32ðé¸D)š”€à_mõp–…s?à4?I@Ú®KJ½™Í��&Òõ óg±ŠeãCDI´(À°-ül`Ð#ÃÀÌÇö§¿wð³€þ”ZmC:'%å“t‘"©f•—¹îÚô ¿¿ýöŸô_'µ 6´W¤Â ¿À�á¹�ú!Ÿ£pBÓæ:èCÉHÙxœ‚Hª¤Èã¨"Qƒ(ù>�9Pmuk�~­¶@ÖŠÏ"ž¦ÌEíøµ^ üáy0õ1^#E{|›í�ׂ6Þ¦û!ÕbóñÇöÉ@q|Žcrh¨áó…“�€¢ª[㳸6ÜöRhÇssÒ )ÅçN]{ÓRÍO‘4z;yŒáñÕ_�îít×ùéÖ­[·ngøYHúÏ%ýCI•Y<“þ§õ÷ïëK¬è‡^©oÛ§ªç¨è±Æ‘:%„Â8v²¹û˜.ô¶öÜl©TõÃ¥ô)�S€ü94®«/êh$0X:�ÓãlùÚ{ž2ûËãÏÖŽ6=ñ *U5¬'³ãxÉÆû¶^röÛê9‹ã–�� ,Õœ4‰®µ–»¶÷._ß ‡/œ~¼j-)-ÓlØZ]·û­[/9ø§Z «øôV@ƒø´ã3XdÑby]•S!ý/zÉvVZüámOžø®ï.ÛãM°ñÈî÷n½èÊß�î»�+è&º/ ?ºAˬcÊ7¢fIãŒÌ+ïäœëSÄ—�ž„ƒNþ½¨Rà{ȉb�¨‰`Š=�P6ëµ¢ì ²VÓ€€œÏŸ5>V©éƒn°p†^u úiE¹·‹¿K•^t/ñ˜æà��‰|¬-¯t1 4 Aàƒ²ì l»V %HÄ+Üœõ<Ž€ë@àÐÆ;¶÷�R¢’•ôªµÏ€.0öáÕ‚IBê…_’Šô€¦Gáûâg��Ö³Ûýó")í_8N€%Tð\f€2Ñþ‰=€í;`TÔo…Ž—øÀ c¬Ÿ8nº{Ðv+Õ yÐ¿å™øaѦø¹ù")AÁÆa¾ï!PíºsÞ6ž�ѳ)öƒ•¬µ%î(8½O¬�ysÜáæãìË“qÚjãa°±Íc̾&ñ¡“eÜh\çÔ«ñ«ã·=3­_Ç®„à@0û�rÚ¯ØwÛV «p%Yô1¤Zv ñû�òË×­9;gIšïÐb�©èc‰†ÚŸÓtPãÑ“ž^[µD”ì¤×:m.®Š•@1ìäæné†'ÍuèÈ\Ò�Ì 3�ŸQféïW’¶zfu·nݺu;CàÏó×to×jš½UÒ+$}´{¯@SíBU½PEJ’CóÏØœ±h¤*iÿ¡tùu3-7çRý2€’€wR‘/²J *8ÿ¹‰Î¢è.OöË�[{—¯½÷æáöÓ��%–-òB+hV¶ÆË6ß³õüƒRÏ]>  ¨ta ÅfO�³¯?O›ýå‰çiU7%�ZW(Åš­U$ÕñèæŸm½ôà›ê‘Åêy…Ñ4Ý!¼¶ ã”›Þ²½ôßøÂ„Î»<ÊC§7–¯ùäÍÃg¸¹TÍ¥ÜjÑÖxÅÁ7ž~É•oÑž�mÐeZÌŸñÓ`øÏÂy…5J�.|Á�j§h›ô—ÔVÏ´U/-í™ÏïE4gH€2à=pôT ˜¶ôTìc¦ÀXñB@p®ØÂ>wüQ$ b YÛÔ°àKœFKÃAí§6ÚïÈwñj`<³€×ß3M¹ŸT£ÔÖ¯âà%p¾W>P@�* 2�¨,Õ¯W´‘‚n9í¡Ÿ§s¼ +ðÜç@?jÏe œ¤{ÍÁ¶$ß‚p@©¦ÅÏ)üŽûß‚ÏvÈý½ýn‚Aå ÐI�ǺŒâ�9TZÅ�èñŽÊà4GÀjŸè –q%ëDåYݨ¿TNÊ5ŒZ€Ÿî7¦`bpKy;xüeЂïçéîœz“A ¦À³¿Ý€†} n €À�¿ÜUÉšBö<]½œ�Ú—ú±™íóÀAª„ægƒÍÀgvïqw³¾aàP›8Út+×Tbên¶øurXÊçõÄ 5ÎÇ[ÊØÐä"í.«†£5ªÍÃ-9úRžÇ} �dþN@f¬N¦ÁŒ+Ó«*o1çaÝÅ€ ƒNÍïX;/ò×_sã\]±¡ù¢H²û=7F}èóÖÆ5ð³ÕCeݺuëÖí ?WIúUI/Ñ4û´¤WJz]§!íp_«=FEÏ•´/t€p}ÇÛ¡B[�ßÈcjÔd†æã"ÐÁXIlQ‡3ÚÔš$§Ø³€#£…Œ{žSVMEósÄÀ�V „Tgnþ½"Y¿JØyq­m\·¹8�uè?´¼d~gÀÀÛ€r“xYç÷Öº:mGòA^ ÆàW[%ï£ÿ ÎÖùºê†¥víÄ=5Õ CÝ8xVmI:ÝlݺuëÖí ?û%ý—’~RÒBfhKúG’~KÒéîÁG¤è§ô-l ©>CÒS¤2g Ç�éßÄ¹ë ³�æ‹Sºèªc:ç‚=®Ô.4Ü0À-)p°¸bú·6�) 6p¢HØvuñ–ûo\üÙÃ/ÒézЀŒXTú"rYNŒG–Ï[ܾºlóöÕ£vݩŰ~€ÒúqT¹{{ïüC'®š}öÔÕÃ];×k5î¢ò•¯Ëáþí'ì}íöó|H’�{PŸP–[+ÀŠU¾°¢L;…y@6_dyp ÜD¥8šÿ›/»H¿ªêAWÒÙRir¤É,þÇVl5_¸þ…�¥fDKä–ÑþPÅ‚½²Yû�º‹i{Ü>6æ5*Ä Ç赡ÇÀwç:àÕ1Ø'\ô?¶s%`No)iÂX)qÕ“]'Ö’T•¢í†I¹QõR{ß‹}4á ¤œŽƒÐ?ê€(£c«6ºÐx‘Óâ10 €ƒ ”Tèú½ÎÔož�4]‡­îQÌ~m¨gémö  µ!øÅ÷?Ï�*S?úFž“ÓySŸI’ôÂç@ÅK³h»qÀÓ¯ñó—ï/Zên+ì|ˆ6´�Ò*òv}Ÿ`uëøq"VÍæûö6MRË!h½fŸ·ý¥]cì?TCçÛåçÎUA5Ø0ÈÁ–±þwJÒª‡ÇºuëÖ­Û# üÌ$ýˆ¤_–tD`ð|ûß$ý¼¤;»;Ü#mgIåù’®Å˜ë0ÐZ“åƒ>>amؽ÷a]zÝJ{÷o-Q–d‚Ëž…ZHü{}Ó!ÑY{ßd<ùôDë�­–¯ýòwÌ>qòY5÷Æ»?Œ†¦Ô*•QÃuc8V7ËCš—Sª4Ö¡ŒZèÄx°œkU7$ Ÿñ Øÿº*¡V•²³ºzó­§¿óÐ;µkØŠ,{>¯Xh$”fLÁÇ�u]$aöôtÀCµÍ2lƒ�ÖÞíÕ°|íOŸýå½ßYVuï”ÁxuþÞ?ÙzñPÏÛwLb=‹–RÐ|ƒÔ&œ¸Fý|ª/ ™s�î‰eÙçNç€üf´T–± A Ð%�EiNÃýgqlÐB¢À&ˆz t(Ù+€ÖýÝ®7T¾@`ƒ…‡É�¬ê‡5¡¤B½”Þ ‚ÛY¨x€+^�Ž õ'ÜOþ{[(‹i£ è‡}¶•°-@¿Mõ“<À­4ä#mgšÍ4x.©­âjÁi™ÖíŸC: ú¶bè^¢T¬v�‚`?Wúdúk\YWŠð²Aà—Ÿ¥¹OùïšU Šëdû±ûçl¤ý•M’”TÇæÕ?\=¨‚ZtNŸë•n1GdÏû»·�ìÕo?ªšö åÚ• 5V ¯�™¢›B?ÎÇàPaî HœIÌüÇ©ûßÛÏ~´d.J”‚vÞ0Xut)„¬‡A°8'‚š©¯4|°Â‡€�iÚ­‚{6ªL�M�ТZó5 û&Úâ:| E ¨JtYÍrŠÖ\�Ÿ…ñªö3rsõaŒñ4 ¶d®D/שåJ~×  ânýrÓºàÒ¹]kJøÉ=�ïªbÚ¸S’¶{8¨[·nݺ�ðçé’~SÒMšfï–ô’Þß½÷È[Ñÿt÷BØ¥ªõ*å܉:@0ç%+ö=ëœûuÉ£fZ.6º+›¼ãbªN¹øüzßAéc¼Û¬IÁ h™†ÏŸ>kùºûnîܾËÍ«�ª*@®Äž½J‹Ž¢8“:ž·øó­Ÿõºñâ圙lÜ}¶àw¶SÞsÜâ‹-�-.88#Ÿµ”8pã•Ñæòå“{–¯¿õ%Ãí=»Hƒ”[�•“««½vë–+ß®ÍÅH~p½ƒÑ(à¬ÂÞœ}ú5SNpfðH€TXJ*^ “×E®ñXnøó€{"3^Ã��‰;ø…©ƒ8ã‚{®3Æô7è ÆšNƒiæ5ï3àV3–í�ô¡<ÓÝtª¦×·QÊà÷~ÆàK¤Í­"„ªÈ�sÈAÏBÙDM „Øýß|6I›­ Ì´�,(ÚfZ[•­µ™µ¶`æ¬ñ¢âºPÿT%´°˜(’<‹Â?V‰‘=Oý^‰{|MǸ³Šñ„Îßýçaû¤êK¨¢‚ª ê~þæ[£Lä¦0]Þ®ø}2M£±ÂŠk¾Wè™~¿�?>zpÚ+Ð"0M sôGÒã#àÇÜ ´¢T9ëãÏÕ2àÃ|Ã÷ŽqXqêÕaõ«}^*^©Yɪ’�ª ¨ÊFgD›H‡è´—aqþN ‡:'-íaJùØÒΆi1í®},iÄ|mçÊ®F*ÑW]]§­ŒiûD«KÉ4Ä €�_„À„´Zà=¯üËX ¼·�^¶ÏZ›°ßÙÒ$¦a–CõT±W i’N¡¥ä4JÆ¡J\ÍsšróµcÕ�žé’«Z,‡,qȪ}ü}2æb¶Å)I[�î­[·nݺ�àçbIÿ­¤ïÓ4û‚¤¿#éwús©SÀýÕú¤”›Të³%íÖ0pÜ9z$’WµGìmGç]ò .¼t—4¤j‚€ê‰öaT¨Tp�¿$Ú$H‰‹âq\Íþòä…‹w<ôÜáέǪjˆp‹³ñ—ÙXu½ÿ¢2TÕª¢*’7_ÿ_TJU,ë¾ÙíÛÏÚ÷{;�ßûY7n3¸<“„žÉÌI¥4�ÂŒNÃ�¯JèÅš]eÚ3ŠBT�}ìÞ o»íeç­ V7gwí<þüW…îà 1­Ñðî2 vƦDŒ8¯~ŠdÀ‡ù†}‹¸¼ªËÅk!TÊ`¯ðÛÈÄŽù¤ú€—<û±¥ci©]âó\ ÉÀ ¤©a¡]o¼J‘¨&)8FT?rÆÿ8ý$×ûàj  ÄL+ ˜n ’r[PIDÈÁDz¾Ç kF™ÖÎßïè{¸$zdxìS¿žL?í�’iŒôQzHæ_i¬ µŽ”T)b¥¬Í·‰®�¡\€œµYJiéŸhÜõ g´t(ì½ |�àSðÉÆàXt+Ú©¨@ŽE¢ìú\ÿ�žÅà�í =íy>çB ¤k”ÐÄ+€dâú0&’^˜{«Á ò'î/Å^KiyÜåJ@¸¥õ %d¹¹öŽ‘ÉuKú%�X‚í“ÛoçÄÉ@ h€ŒcÞ¯Ò1× *u›qüÙ&C%ŒùWhÿ•að~ßÈ�O®ûJŠulÜHæ%q̯EÿGb�ÓsÎ/ºú1›Ú{`&©¨Côn9È#¼¶¾�í5ø3ö°O·nݺu{„�ŸÝ’~fýo—ÌÐNIú•5Xt¢{°WýuÙ¦¤gJz¢¤Áæ¨ÌÄ&qß¡*ñùò„.¹æ”Ù¤‰3-àãïȸmƒ)–q'U\`1$¤ò€YM5b£fŸ'apeôNîB Q›[Ò[×¼ÈÁÊV( én²~ætr¦•¢¤ }û… k fw¸cˆ‚‡�lf,|(Ð6I4¶rÐ!¶ÄøÀ=�†¦,âñ‹+FÉ«1áy¦­.Xe_¤•†¬{cÁl}p ?#}e)Vñ•s UlìO‰’Ùt´ðP‘UÝ€_pœ‰9”$ûm;€pÏÂOݺæ~p ;Òü�÷á_L3€$üâ˵ג¹u³.‰‡Ì�F'’ù°'GM&ôÛôù…ƒ>|ሖ˜ÆAó¯]îÖëäàNv@¿p�2B�ú :g€§V‹åë?õ¬Ù'ï{I+£÷îéq¼hßm½øÊ×Ô³wŸ´\"níA䜒uÉ"à ¤ ÿqÁè’ÒÈ9ÝkûØv ú!:*€ðø¤ËÛ¼ÍHéï-;Ÿ-E%Ž}/,Pæ7 `HQ”Q‹QÕ!e³ÈG�/ù9ûå˳7sÊ3b6£Ùïá7©Rð�Y©L Ê}bA2º3½˜·Ó*ìÈ?„H+ªRHϘe@Ì÷ëÁß"¡Ph)Å9Å{êLÕF ¼?ÝŸN ·Ö#hÆE÷óÒNÈFW‡Ëb-ö>÷<èÏe2pùAo gRàÏôùëUšW¤lŽ`m¶ûKn•çeP�*¨üñŸ&³ÉiUü¼äôP¤Ú ïûs3€Y£c²>ïºC[ÙÔƒ8>P°ßüƒ€Ðt�¾ˆSeð6Œè6è.݇ê,¦^†6OÀØw~ø6 IN¯Æ «QþÙ¸ÏÏv>*NÀ�6ARÕ‘hƒyuW‚¹�+PÁ¹6¡µï¹¼"i=}›Œÿ Ðü3¯>ñå �—ؘ±M¤!­¬œÞŒû.é诘�Bâú��‰ãnTº­!HR‰¾‚àÕTvûüºÇ-tÞÅ ÍNÑæ¯"Àg<29ptZÒéÖéÖ­[·ngüyÜZççišfXëüüI÷^€¾^í*•r³¤Ãj͘tZ:ãbqö4É=ÖÊU�ܧ‹¯^j¾˜Å¤ß'°¶ˆ`®~ˆ ®Mœ1ûœ,Er1\?6m³ýÄÚü��ÍÙGO�ݾuIypuv91îÓéqÙª4j®¢•ŠªŠVucx¸îî­ûf_®gwïܰëÖñÒ�ûì8‰µ�P©ã4?VÞO4 J„çHÌÝÎ�°>Rú·œöKØm»ÍWq"qÌrçñýË7|ê;g_:þŒ)`]�—c«kÏþƒ­]ñ.-f#/ÂÆÚô}[0'«õž‘J¸ ÝWN1ƒÆH‚UÜù©Ý"iKy†··™Ót!€Ä�0£´à>·ß±‘Q‡Ì¶y ‹0jcø‡€ ÌÔÔo\ V°˜tQP‹#Ú—k!�OÔ sðÆÁ¥Á¾äGo�¸Z±ƒÐ|¿2= gá·Õ@s€�r~A7«²Æ��;Fê@ÀqëhV-½|<ø.Ð Á¼O„a—'×1ü@4xžÊ`À‡eþƒE»ÀÿTm\¤6)aMÄ�õ<+ŸÀÛèPEàAPÓã@ ž©ä¬*ÁÀŸØƒÑ[æI6y5'$0ømÏ~JŒð*®¨¶^ä Oø~º™nNŒ�N“iæcc®xA}'a5'äxy[Ä€�i•˜ÖKV¼ALÐ…ÊûKõ6;¨Áýn\áÀ 8€ úX2ÊZHm²„jP�a"I®É㉖ãmsÖ›?’ðo4®È§qÑÆZÓmþcs,«ôÑ0HãˆÔk®‰Ö‚r ÉÏ ó‰Ø²ä´l�J}5° ïôßúoâz€Ä×By)¥¸&)*‚90ï/½f¦‹¯Zjs÷�TêP  NТí§%�êz ݺuëÖí ?çIú¯%ýèĤþ»%ýœ¤ÿ]Òª{°@_ï6Hz’Jy¦¤ ª{ŠÐü[«+‚Wî Ûºà²uîE»%ÅB -D+àÄLoq ’ÃG4‰† $æ/ù>lq �5£:J³ò9™ÎÛÏ,øMi @W£ú5‰ ñÏç�Ó< ³ýŒÀ°,ÓÙ³àÛ K,nfºû’Å;>÷}ÃÃ[Wk‚Õ]óÛ·Ÿ|Áoï<í¢O°ØâWãè‹SêÇŒIº&\‹{‰:+fêA–qγß~_²C �ŸG8NÙ%%c‡±¸¿{ð‰Æ  ô‰æ2œÿÉGmÐÓÃÕ1.E0Ê3à%y†iä3M¨üI}—€ŒàÇžýXრl+ýŒŠÊƒÍ>„ ¤dcmø€‚¨/=”‰.cà%ÌûEQKùˆ:4v¦Tíæñ™W^‚ÞUJiDT3�ezªì?þB�”–²Éý´œÔ÷ü_€Qx ƹö+0D=œLU±�]ì  C 1#ó¿W_ç'~îx£Ê%ÔêLá˜VI'(![½,2÷‚=p|® «9øE g^¡æÚ?µú¸ã€‹ƒ¯¤Y¦Ñäç&ô ä€9#@t³9•t|”é•ÐdÉuo¼}DSìI'í06”�¢?Qe˜UPÛ±y¾Ì0Ï}¼úGè¿81«¥ÏÅ9)ë»U± pöÞ3Žzã¶*%ÔöÆ\!|‘>›òuŠ%pØXkuz_zXëË�I¯ÉüËÀa«¸nyû­Ý/ž4E4‰v}�3Óµ7-µ÷À<™g³foçgE|¾#éd°uëÖ­[·3ülHú/$ý‚¤}Ê,´ç~CÒ/Iz¨{ð¯ÏŠ~äït/�å¶[Òs$}[ލ¨¨�#š!E10-7�ëâkNëÀ¡�,¸Ù”$(z@ ¾>P ×…±I[&À PTöEü¹ú%·àóÙ1Åd ¿vBM6aïâ°iõVXZé�Ûk+,´Åǯ£ùÆZo»íqóÞõ²²5ÒïzÿÖÍ—ÿÞxÙ�{‰›ß΀rß¶>ËÀ/Ò¿ÉÅé]û‡«—8èï�îØèm•8QÓß+ýÇ‘4ü;¾Ð†û©° M« BÑmÐÍ ß[ü[Ö»jƒœdÚŸZü�Ì\n’Äô…DõÁËD=M£Qñ1ÉÏÕÏ8ÚÂmó€?S­x`‹-ä JýWF}ÉÏž$ä{ϵPJû°æ ³ùÃA©5�½ö è0að&¡rº*÷ äUBðÉ»#ŒmLg@Rdš5-ãÍîsÏüŸ'ã0�O *�sIâ xU¦:cÝ8GM JÐ>¡A€Ü÷Ï5O iï9µâçEÐ.ËzOæjYûøŠñ<’}Ú l…~íOé±òj;Ûž%àpë‚~³­cz§\ïÈ|–è"hÇóF#­Òà (8S¿õ%�õ^ùííRj vÁó4‹Óþ:&<‹�VÚÄŸùÍüàó³ø ëí)å›HŽa¥†ê À0X«Ø³&Ó6�m�çëߟõQWp2ýV@DZÑü)Ð ÒFbmÒ8 WŒ-7¥G?~Cç\°@ ‡+$i%žÓrżï÷„¤í®éÖ­[·ng@ççI¿&éJM³×Iú)IŸêìÐ7º�'é’.Q^ ±D¨ømWü½÷¬téµÒÆ®¥²jÕ,ÄônüEÎ�¨Ý☛ÅÅ8/.üœ’@?€¸Òƒé4üüIpzB`5À4 ¼ÅâNæp"ƒC˜ªÊÌ…Çm°P,UåœöÇN/6^{ëÍÃgîa©ZJ¹Õ¢�ñ’oÞºåÊ7Ö§%É ¯n‹�Sqp¿3?1DAGØŽAÅ<7®A±f�½¦ æ°÷ŒÒ À €V¼ˆ¯bßäFþ¸œ¾H*Ìùícॠ°¸e¢:­ŠT �;Î<ÏA,s"ÔÒý&VBÌ处s&:/&2À±��*0¯~è µY×@à ß$¤�ïIzæ¢Öljg�3®úgAC¸öõóQaò$Âã6F´•JP‰íJ6BXÿÇ·{å%ëò9Ýì Ž1xÜ„Q6>³[g*ô0_! \¨‡Š!¡µ6¥úzªÒÁÅûD‡£IÎ)áxb�a%Œùðƒ¤Š'Ìú…�1î;ÖºBœ7<¢q2íŽïMå•^Nsß70Äç9@êûæþ÷_ZLL’ðñ›|¿°gp�NžêD>dzfÿ>ƒ`-@hà»WâS•¯Q˜µ�µ1UÛJÎHF†xåŠpƒìýz<�y6%ø\=�Í0¦A€¶rEY1JN‰€hQõ{’³Çº�NÉ·-Wï»o¯¹q® /ßÔ|®Æòñ€¿Ë@�ïëd×ùéÖ­[·ngüy´¤_—ôï~½b¡ÙlFÙý(jÞÒ2Ýý:cѨHŒW2”×G4ͧ`’UoJè±ú‡¨�,«Št]ÌÚ ©nË(G݈µdYv¶èj&YÒœÑnæLÔ¿É´o˜JÏ�h Oý fŸðàòMŸùžážOÖ«‹á��ëÏù—Û7_öÍ�FIø?6sª óiÿðM~NéwPÀ8á‡}ø1P‚)®¤ÂÙÆ”6_4Ûrú%è·ImÛ�.ê©Ôq£ŒÞ8ÐJš´ek+AØ7JÀ¬*aÈúT›É}èã/ûƒiUÜçt8�ã+�ŽXIÀVþlÿn…‚]Ùý†JÚ¶3õ#è¼”V7�+Qk.hù«Ê0ý€a„ZÌjì4íÏü7ú$/Œ-zx¿4ÀÀ0÷¾@Z'a%ð¬9ÑjM­TñF×c²ÉІ¨tk t€¦T†Š*Sá5÷9‡âw“’$˜8Šuèð&¿Vå?¡ÊQÔOâJ̸‹M‡Q²çjBŒ–W}Ç …ê4’r ‹Á0þ^^ ź_ŠmÐFðƒÛÎ×ÚAV¢å�¹zTü èk§€ ýÄh3'qÈÁO›µ y›0cíjl(0ï¿AJ@÷C–Ÿf 0„XX|_uŒ Nªë!ÉôÏH%Ú 4.V)ɲ›½ Áoî5õƒ�zË©ÀÚlu·\Üž« ¤ñ]ÆöuC�f¬,¸šóêçbô\æÊ}\>^9È™ôÍØ;Ž…6ÞíiÐPÞªû‚-×yP•F»>^ý3« ‚Döy_e@È“'ˆz̓¤Ö7¹:ÔŒÇ`ÒBócæš~ðÞhaÌ�?€ó¬ *®8%Eø=ã-c©¿ƒ«¨º£Õô3Í1¢ %¬™¨ÿ¸¯®5Xp'a@›PÀñ¾(o�žÊýaze.SºBûSú·T?R¶²ò>îšH  dßg«¹ïðÉdp:æR¦ÎÁ0Ù„óD*^¨¡æ®œ Hø3’4's-;54¦¥í&VEøA> ,@§Íµ<1-šÆ”˜¶�«5éY41AÍýOIY6/ë¨!@;‰ªÏ\Í+ �v’ªÍY£u µ WI:ëð k»Ô�Ã3IƒX«G·U¹Ñšr[Ò‰®óÓ­[·nÝÎð3—ôŸJúEIS¤Æ5èó$ÝÛ=Ø)à¾Ul¿Jy®¤TìgÁ¢“ˆ!#-µHú`c÷úøê-í=°1)Ëßyº%ÉVe_Iè¸â¥%T#@Êû �‰í›Þ·Ók£*—øœ(Lb[ìÃÛØêÑ´š@mPEéͪ Ó¨'ÆI`ŒU¿æÀ T#$WÂü «:,ßôé§Ìþâžï.;ãM°ñÈîwo½àò9^´ï) AŸÃía¹¨³_o¦aû÷ù&�zøøLMX¤Œ¢0^Ù�Þ‡@é¹P`6 Â2ÝOŒ=ö¯è¹°1k�5>,®… hp:* ÃXFÙèPçÁ-{¼"ª¥¼CŠ;‰€D Ñ� \ç!Séåô|¹&SõÅo9•5 ˆW)€£%Ðc€g��Ô/ø¾ƒ Q¿MÑ‹cñÝú…Á "Âs!¿pvЩù;j›Êû²SMcÐî…›Ò~ãÝ08˜æýÖŽéãÐA ‘=‡ÄõNF¹ei§å³þŒàQV%ëþÆóä ¾$Ã0ƒ ±Òø²  ’Xôy¡qÜã- b÷C?v¦ÃSù³2Ðñ9ô5‚ANX€;æL”H”ë ±¾%�Ÿ ÷ƒÏÜ–ú­N¿ý¸-Mï*€£ùŠcD0éÚt¦>v;°”  qüÅc$–¾N±uR¬)r@ö=U"E7s «=žß麄·ûøäv-È£*ž3ÙÞÛ»ØtÝ·-uîEs¸oíùÛ²¤Kÿ (߯5ð³ÕÃ.ݺuëÖí €?Ï‘ô›’­iövI?)é#Ý{_ßVô£½è ÙQ©¼Pµ^ÿ¶¾FpȬж"´}‡îÓ¥WÏ4_Î<èTŠ->Ä ¤ýà¬Ã"Í�ÿÖ«i8D`SN´ï™wܳý«Ú/3Ö‹À¬Ú'ô~!¬åÜûÆ94~­À(€x˳/„k�¯ âªav…ŽîZ8µ¹|ý­· Ÿ}ðyEšOÐ:=^qÖëO¿äÊ·h÷r¨#”�R|Nyv¾ ÐPd•8˜ýÁ¾!@DMß q§5ñ{ÌΤY›@H@‡ú?$Êì4L´÷\€šÁ-�|ñ�ëèðx×�d멺$‚ãê«XŠ[ZL%}ÁÚ“>‚ÌfuKõnsµA�ø¦ï�3üC{E’�K‰8¿}FTD¬#]Î=˜Ù,º&XíæúîÁÒè•æ¾G�l»Œª�æ �—,`'ð j!®.ó`°ß,ð<‘ªõAk <ó� Ä@(ëôA› Šö%cc) ÅÁಃMÖç’ê`;:èŒáç•PŠŠÈ¬êЪ‘í÷j˜cäc8˜ßkmÆ“xø#¼dT‘ôü…qAµ¶�4Ó •Tü®Y‚Š_î\…¿!?0èÆmϩ۠ªix[°#^òj1o5Ï4�¢ŸxÀÞ5À˜&Uœdé6VuI "Í×3ÐÉÆ§­Žgx•BOÎ41åãÅ0ø8—}yµé´fºM>�Hæ� ¼È 1«�†q& ‰^U± ©–cŠŸÛºÔŸAczåõ3]tÕ†æó’Œ—Unxï³ÎÏ©N÷Ö­[·nÝÎðs…¤"é;5Ín“ôJI¯éÏ¥oèïv/œY»QªÏQ){cèK–BÓ=ûÌ*Ü)ö]ÊJç\x¿Î¿lCC‰`Ѝ2![ügÕІFk†ƒvXÁÄÌ1.UÑYZ”‚f‚�Ã?>‚è¹Z}ÉÞW®DÈâê´°�…¦i^Ä{¦ü²Îå‹7È2V^ýƒæ‚¬Ã§î;²|Ûg_6Üwê&M°ºœÝ»ómçþÎö³.þs Å´Z¦fŸf:H¤e˜heñˆ'b˂ր¬Mܧ±s0¥nS1|ÔjȨˆòà›²ê'Â1¸ÓV8XˆŠÇ�¨ö€�ƒöœiK�é¬íÔ_ ˆwð-©¼4í3¹'?TÅ$‚.ÔFÖEê;Ê¢?€/ !6€�¬â I'ÐýY …æ]ÿȃYès.<§X³ÎÇûùÇ †2s_�ýÚq-ÖÇlªNÇ…>ñŠc  â{Á ®y8Çk€”A{c01žŸ^ æt“ž”ÁtOKuoA*Ŷm Ì ²÷/ƒÍŸüœðþa¿±�÷‰W ›% •¹3O@ðßqÐ>Þ£¸;WÛ¹±¾–o[[$fp¥6Ïð‘*ÕÝ×@/ØFc³õÖ‚ªG‰“�˜~–«~ü†}JJKÈbãg€€Ù¼Ù÷Ï•`â6åš?<…ä–ÐÊã5ûÛ¯�P)M5F KGT·Þþióñxö¤T‹¬×c2$ÞAu”WW®_©�5(ëš ³šÐç�ëÊë—Ú½u~h<¶*ž¬Z“?;µ®ú{h¥[·nݺ=ÂÀÏ>I?/é’–2C;.é—$ý†¤S݃½¨›ÛRÒ3TÊST5S¡bº:„¿Äo8pZ¤ùü¤.¼â¸Ù”"½¦>×îHA‚Ȱ‚2Ï$ƒzàÖÊ ±Ž¹Ø?/l¢±Sµo\ãD•�f¡Í0[–êúo×V#¾ïR˜¯ U1µD® ”ýãZC2Ÿ$v^iÂt_ñwdóÎÿäöëïûÒËË©� 5ÁÆýË�m?óâW­sÎ󠌷;Ó áÀ�WŠM©¾ àc^=gT:•î-ØGFåÂ¸Øæð ˜õÒ’ÄZ/®¥}Á8“iÏäAí,ØZó -K¹¾FyŸÈ4¥x …�x¼cÀ'ÚgŒÁ¡J§‘UÿÄ;¨v Àtøü;ŽTbþ¸n�‰ÏU˜£UÕù÷èž-@åzH®ÿ¯f ÃTPc-® ¦í¼rAvïþÏ+ÌÏ‚âbEÀ›¨ÿ!‰Æ8&h%ã`ó‰ø„±ÂÅÐ׆q¸Ð¢€J/ÔæVqÿtœI€�H>Q�1UnT’¢N`|’p’g®U ¼[ªTk™.wøa É*ú¸Âa‚Ù=A•8yer%0=UEÿ$ó{Í„~ ì´>íA6'ž¢ýe†ñX–ð)?KJFO›÷‰¶ê›«d™F;OÔ�¿Í¬ïé(�ÂØòöd}‹×gž4Ã>©Pe :_xp¢š÷§Û½=…)«G¬0­í «BcNÇ‹ „ u$ã9ëÜ=û‹®†ZШ@Ôm¡”V1€´³´íôpJ·nݺu{„�ŸAÒIúÇ’ÎÓ4û?$ýœ¤;º{P·ÜJz¾ŠeøHFtáIK‘°Êæq¥Í½ê’«WÚ½o)UÐIÕq(Èâ“ùöW$¸Ê ÒÊ€ŽTè{mPáÜß¡[1‘Û\ju8âØä k øÅa.¦²¹Œ‹ÑG¡²æÕçLû˜'(1}£µQ¦C•j,Ò¶tÍP äj¨Òyv¾¶ÿ”¥��žé±ÿ˜·„/¨²>¥wJ?Aÿ‡î/£æ+ºþI ¹`—fs¤r4�'ÀèdQ „€Q¼—tº‡OºuëÖ­ÛžºÖùy¼¦Ù{%ý„¤÷uï}ãZÑßêÐ_ƒ]&é’Ž�˜ö�¥{pÍË«œ}Ÿ.ºr¦Ù|feðž¡]€š ƒ˜ üXàBé@µšÞM«ËCÚ?!Vt?IEQŠI>ëÜ80• LœçŸ%ºxä‹ �7m�Å€âz9åh›¬?÷ãM¤æˆlü¯ö­rω=_‚^:ÜqìÙE¤ÜêPN¬®9ô¯·^tÅÛµ1[µ>O}²ÌC7îÿh kÅœù•ƒÈîw)AL‡À²‘¡Od€(d¸RÅ\i)àè5ˆ[?�±Aàa}?õTÝPÕ\ø*΀ \—$<øá;ÅP¹P§Æ\ô»WÆ{ï‚\µá�²ŒŒ÷üâÌ~¨:p±ùWn©z` žE~!0ú?¾7?ý°)Ðâ»c•†¢¢b:®7€Yè¬ùC”£ÕO­¤�dŸQð¸@-]û 5a? ¤Õ/bM8«’£½z;Ú µ{¯õÉ3óÛì�uuƒÚ ?T^G;-Ñ Õ~qú&ÖB3ý8{¨ÈÁªÕ8Š›sB 'ždøøïzE@õË:lD³èß窮œ~×AÈøNøï+*쾈¾šV¸µ–W>µmaÀÇA lÃy( ýG’Wì Ã`ÕévqÕ�ß#uœ0Wæ^è@¸?I‹3ÚÃzJ90ˆ’4ÆÙVâ„ï˜�~ŸQ/¶´…>&Ø s£>ó~‘÷ žkø«Äâoø^eš HIg;ZpøÒG-tÉUK-7g±‘éÚÄàûc2ǬZÓ½u=…nݺuëv€Ÿ£’~EÒ÷kšÝ!ég$½ª?—zP·©ÆÁÞÇ«”gIu—ËLèþ T nAGvtîE÷åß.Iµåoƒ´À%av¯ö± %PA­­Éæ£L°„w;§œaís.´\[¢ÅMN³À™ùžuí‹.ºY›mQ‹\8' îÇ{Ë:w ¾â¼ HíT',ê,xgô.HM2ûè=.þøó/<}�&XݘݱóÄó_½ýŒ£f´³ÖÌiðjM2l9ÓšÿmÐ.t¢¼º.2)­ðsZ”¶íTÄ™–æ|Z_˜(¶Í™×”S³mô>Á¢ã¬¯ÅÿIÐ×çmPpº\ÜÝÛ‡¾æ�¨R°ßØù£P­Ö�ò µÌ*SrÖ‘¨ôÂå@¹æ@y߈6À TD(D^ï1ÓšŸ?Ðl �ÍMe”¼ üP48 ®Ñô'ì´@ƒ&ûqìK°m¨F0Òúø�2¼¡ÿè>´ãû³Úæ ¼³Î Vȵzj®Î ÿ•&€@Y¥G~4à¸ÄZ&…4¢°ý`D�‰z-NP†"U›?%Õ?ƒƒÇIÒùƒq„ªÄ€¾3V{U•õ Ö|á`·�{S0:‚óyµ6‚bµfUµ)/|ÏûfÛn°¸/ ÌæŸ ³þÙÔ›K©½gFK ÀzB×ë·ô'Ð5ÊiÏX®ð*®ŽÛæÇMú%Ž€ìF¿Æ9L¬Å4�p>4ûü«õ\uóAz0/çJLI - ÃçI×sº3 ðX Ú’j™„¸èª5«þAakî7ñ÷X‡Åî1óÜõ•Ó«#š`ãÁ�m?û’W¯®9|'éÜ$�'ó¯UB¹? ˆ�‚ö¹05�K\ “Wœ@— h ŸÞ/ØÚ6¦´Lf¾‚Z˜™œ�9äYÛ¼ËÏ€~o„*h2Ž9Ð~>œÚ†ïk/aL @�ì3Zö1Ñ ??pBü'Úé›ghWÔ�€À‡¬Vì9LiY 27ýüE™Ö6ž•§Õ®‡ädžîbí6ÅÞs Ò�ZP§/  Ö7�"PR&€î÷ψ‰ªÿHðÞúˆîÇwd`š…V¡2Îú>W³ @‚2ÊG?˜.ÔŽC–kÐY?³}š!ódTKFÿ‚L|?ª¨J’%Ì/66ðóµ¥L4ÈÌPÉýìUpÞâZ¿G I¦¥òl.k¯é™¸‡Ûþ~€çcÜë�±?†99‹é‡s(¯¾¶¹âºï1µ!V£‰çþ[«è †Ç\OÄ2$ à4ÃÊG®Z)ôböÐáÄq‡×+ªð\¶$ÒÄRád´äÊ#§Yí2¦âóKEc€�°”€d.о5zؽïÿ~Î>o¡°¬ò§ Æ�¿Ï*£×:?Úêa‘nݺuëö?EÒ÷®ÁœK4Í~o]õóÙîÁo: ¸}�Ø9’n–téÿ˜•·/" ü¡jzíÙû Ž^µÒ®=K!媠«*‚“µ…Fœ4º€ Ž�ïÔ ´¸Šý8‹-sª/|9ÛÛ�Í"¸…˜â‹FÏÆ\Ù‚™Ü ºÅbß*€G¸¯·M`dÈÞÇéA Ëx·¥“Ûóåën}îìÓ¼´Œus‚>Ðj¼hß[·^|ùkê¡Ý§”/DƒòÆ3Ã'H È~�~T8dÚ×!Èlךï#kSÜ{xXŸ—?½OXð“î0j·½'kà¬{Sbj’ŸPéa\õÖæ†Ò0hàà±ÁuÚ‡õ ¬êqƒöÓ»?ÒÀã0T9X;|ìc:?…AUh­Äwcjµ÷翟ƒÐ¶ ¨ÂŠ'5¸_ÔqÒ„¾ã÷D…Ï»ð­A€‹UM1O>ðj(©‚®TæÕa\ùÂc¯ù(׋(T3eŒÉÆO§WT‘¸Ú½:Y^£=þž�(x¹M, OµÞ¦ÆÌÅùý²³6èŒ�8;=‹JT Úg‡©Fù;~ø¸âíFÊE¨º€¤¢Ã“ZÍDõüóSIÛÏ¢øtÅ�î×Ú4g™PR�Î4–m§uåt€³ö|²ç%ù!×½‰q™©Ó`?Ðr0,¯@ßy†»�µÇ¸úF FZN¦°ôª$Í(ÁÌúJ†¿¬ L¾‡>‹Õ†Ù¼9,Ù�R°J×ܸԅ—.5› èãÆ ÷ˆôØQ T:?'{¤[·nݺ�ðçÛÖ:?ÏÐ4ûÐZçç�Ý{êöWcW«èfI‡ômÌøâ–QÀquPUÕ¡#÷éÂËf2!â°&HYÇØê¢«´–‰w”m§49à–Wº îMQ!�Õü[0§Äçñ7;=ÅŠL莿lÁ“;˜†Ä«!<«Ž9w¾ù1×m’”qVõÐ|/~‹ºÃðŇ,ßô™ïî:þt?O¶:/­uø_}EèO5ÆŒÂÀ@ã 8‘è-$A~ ° ˆy ™qp!¯‘±ë•ú@Nh{ì3Óbÿ`ï‡Ï\°ŸÛ�ÓÜäAïªð¯3Û¥Y# ²8áh“4(8ˆîärêž»_›Ó|A$G•,Ø�Y¶-šr4Í32Ó*¡9hqØXÏ€½ß5xxŸ'ªR»¿ÀH›ªÔLúr5ý F�Ú°�AR{[º²¯‚% ¨ÏÐ ¶ ³l Hï5¯ ö¾÷ˆW1ySÒüÇû(kýEu‡}Ÿû<·"€hß¾‚ȼ(ç:'^ulc!žWÚ9õ“ÔêÞÀ<Á*—@I Ã~0cðÉ+=˜V°­áD$HŠ# À±÷v_…(Œ»ÐòÓˆQŸá±_¢ ùl¾aà—�;' è\3¦¯„ó7Ÿ›>Ò@Æ—ÐÉØ‹ûâqЮsµ³në3 €W\í^ l¡êtÖ_b=&ºæ>?`žï@�gÔ�jôÒyX®O*JH[ß§þL¹èŠ™.{Ô†–›sðѹ‰hÜì}^ÝBÒñ®§Ð­[·nÝÎðsDÒ/IúÛð$%»WÒÏKú_; i€ºýÕÛLEO’ôíRÙü€ z|ê:Ä6û`˜méÜ‹Ô9nÀÂ,áÙö `+6Í �š8€¦fÛµt2\”ÄÍÄ_o>ÿ@;í3ÈtÇLC4XðØ{¢ßKLuݼæW}\W©Hœý®JÜê³Þ}Ùâ]Ÿùplû*M°ºkþ¹í§\ð/vž|á§²,t÷I5_í—}'«Óï�5.,;Ÿ+<†ÐmÉ@, ̾@í_Ì'Zqî\ð#B��@a €È4b ÒA9ø‘ÓÙ¸ð9V«@eøƒ,¼/î7Bãà“ññP›>f¨‹¯é»´Õu МÐFÂ52p «3K!ú?”k_¸€\{vBÁýeÚ;¨÷`kœ{[%z2z*Åb¼à{Ä“3b ÿ¸~‡Ô±_»_Ä• –tá´VRÈ„ïp@lßeÁßð©ÓGý‘�›vÌ(¬SæSö  ;ù@g®"`-­ ÕfJ#¨�þ`_ðù»ëš‚hÅ`G;°öb[Yc3iÒyb@ˆÇ{w¯¨ï'É3X�¦T)ÄÁ€ŠÎú õz’~YKýÅÚxI^@öYe£Ó›úß<¤þàôoU” Aïùzsej¸4ý€N:­8*ÄØà}µ½.‰&’é°ñ…«/©?!…«ÓǾÆxö=3¬^Ò±¶#mì±yéþCE×Ý´©}g-Óªƒ*;ß¾µÖRØéáŽnݺuëö?KI?.éHگ̂‚ô·$ý#It~Khý½î…¯_Û#é9R½Q*ãs IPB‡5‚ÇtÑ•'µïà¦QvíO¾(‡P­ Kc�”4Û| íjF´YÔ.R,˜ÆÈ*~< à 6ÈJ‡J(ˆ�¦ $È >¡ÅVPRÁɬÒ"+§¡ƒ�©·Ëš`™úÞ¶øMÕlñ–Ûž0ÿðÝ/+ÛãAM°ñðæÿ½õüË~w¼ìÀ—ì°E È�¹gaé)Ôg :›Ñ— ô}[¡:®åF£ ·Ë�¿,ãÚüh~`­ ‚«¦MFvî| þ�âÆt.T“þôoSÁ¼: ©ß(°9øõª €Êú˜b@Ñ��QÂÙu…kBí0ð’¸O¤ýÛ)®<ˆ&1nt_¨}RY� ³ŸÛ W5?E—�RFCÄÔt>КD6FˆZ*&€ÏO¦R«Q¢ �’ó¸ëýl~ŠïÄ6(*%ÔgP ”ܬ Ç”_F ÷¾%c QQBÏ _h’áAíu|üíó›–&ULëÄH6&s Ðæ°qƒÇ¦µ%ô›žˆáA~ߥÏMñžcq}›¼JÆë¨–†¾b÷†÷�u�q4²Â8©Ì}! ð Ï͹ÿs5i»€± q¨Þ Ê@Ø—½f RE6 ¼t(ªó* I©6§¤| f€’`ìLfþÕ'HFÜ$eøø1‘†��©ñÂßX)Š©…B@Èýã”ÑÆå†ôè'l®u~ ¿J)Ç80‰>3óÍ(°pBd¹Só>È`OôŸØ+Ó¥ÒDóãùóp@­<¸Uwò±6§œlA„\·s4šÄ@ªáeR¥”,à³�ŸÝ| õ€˜TÙ'\�Š4Vb «¸²¡B­*$��Hÿú3oëúc 5óïæUd\¡LÀpK§Ì ˆ”i"ÁÜ“çã…+€bw¾Ús24}. 4œÅÄjb ²jíÉA¦hHè0ˆÊz·Þ•³$Ft¹­V‘µÕæi8�‚¾Åº­<�ªTë/´>‰¿‘šï÷Œ÷9ùU7ÌuôòMÍæEŸF÷ã’b[|›Ä¡&ÓÛ0�–íÇ@(�#ò]«& ° _” žƒÀ+øà–­~Yÿ€=ÖbQC¢V„{åÈ@Ù»&ÆoA—øÞpÛ‡–o¹ío÷ž|’&X] ÷íÜpöïn?ï²÷jVd~àÅ.8™â&7 ƒÞ�oPç&¨L¬Ê®½ÝsYP6eÆàQŸ±¦Q.öÍ18¦& #€×DCÄ|C”$ ´6íÉAó(Â*³*BÀxìÍ`;§³³@XhºÈm'ЛPõe‘�î�w Ê3ŒÈãYßq°ÍÚȤFwÖê1Äxˆ¾õW8OÛN~1 ±ˆh)Iºir&>ëOðsu�(½º�úÌPùD:F6Öbµ S-¶ �µ©babTXÔž’Dì­�+àw£4ƒg¤›s\ É:HØÒ2yÒNô!+ôCë×Þn¾?ü\­ÈºH¾�*eiÌIžA9àì™QØfÐ�|m€;ÒN=/×b1 ƒ°’ÍM Ò ãp5PÀvˆî�ç§­Ž’ 'àð< ôò¬ÍYÒ˜�9P çlý*«Žbê!ý[�åy¿ÏÏ-Ú Õ«>®pÅ;´‰ìüK]~í.íÚ3ƒO�FÓÌýÅVÚ¸S몟±‡0ºuëÖ­Û# ü”ô÷×”os™¡=(é¿’ô?JÚêì@ݾ1l®Rž.éip£Cüc�a°*fæóÓ:÷âuø¼Í)Ôo�óh2�`4Wq@K¹cS¥¶ê†²i9ÀÅA�ZùûE wÒBü®€‘ö/¦X+@X¡Á Kæd´7ð¸÷3󅇨òü½w\½xÏ¿¿œÜ¹DlÜ»øÔÎÓ�¾jç¦soSN7‘Ò—ä�'ÎL‚ý<tÝ™_S)9ø Ûð0‘kó2ç×>Í>€Ä2¾i²ßøÌYß Ø¨*²Û³ŠŸ�d‰ûE®?A]Ö^â¬åÁHÐxaýŸ°bU#ÑG¢­ä¢ˆõsþsªD2¤à:H�Á9ÒNˆªS®ˆcC¥QÁ?%eàŒvÜá®SûÆÃ‹cšÏF8SÐ' ³{6>_£Íe˜yàTþ,ƒ¹˜áRF£†uÿOÆ;¿ðO«ùÂãnôf‹{"Ïœ k$€µC`ÜÄ{#ö � Uœ ü�qôØÐCJª eÏIïO!Öý#ÈfIT½B•™NÓÀù\#6A¢ÜglüLÎçF¥X5¯W‡¡V‰S¸áH–hã@¿ ‹g+ý³j{OU/¬‹6Âo‹Tø}e€Xa0?‹¶�Þh ”Ç6NFà{ž“m|›x*L´Âq|xþØœõ?mŽ—ôžÀTí„mÉA ¦Ï+Ó²gÌEã×6Øk�ýgÍtí�:pxÉ4o9è? ÅûmIIÚîa‹nݺuëö?3Iÿ‰¤_’tX`�àð¿HúI÷tö  î…oLÛ¯ZŸ§R®çX†¯…xÍ… œE¾Üõ�Ž^¹¥={´Èò…Пт}=Ù‡ì} ÂNÏ4cýÓu %:R–1ðæâLu¥•>È“NàŸ_sL°•ù)q8¨ƒ"òaXÁô^Ê)ðjժΗoüÌÓf»÷{ÊN�"nWÇ#»ÿtë—þîxáþ‡@ð,ÓèwÒÊŽðC±j(¨T±}¸æÍà‹pö³g†ÆµOû­Ê�ö(«v±÷ Õ €9öÛ„è½;”³XÇ‘€¿ß4vê6®’± ¥²¾€×5ÇV­OF š+¯ÚqªÊj€IÍýÛm¥ðkw'bP±a¦5€Kþ˜’‘Ïà0ðŽ£S£Z0õ[Új(f§?í{Ö')E'væxç÷wŸþA-Êvµÿ·¶ŸzöG¥j>hÁzzþíÒ•• vo€Fš%´ð*ßÇtðìQ#R@7O8ñÄÐ…BÝ+ÒDI)'ÕÍ(þxm(Ñ‚fnìS†Q`¨ßZ Vau¶_Éö2=$ó‘�ûtîm;¢?ÄûàK“38xË@zí Ú³Àxz¥Ñí¾÷~(k9O¬;Å~hÇΠGösJèïg)S‰ŽÀ´ê`s¥ù£|¼I©˜ý\fóªënÚÐÙçoj6Ó:6ˆ)ÞìxöJÛZIzXÒ©¦èÖ­[·ngüy–¤ß�ôM³wJú IêÞëÖ o»XÒ ¤r>7 yœï‹UùŽöžõe½b¦Å¢H‰pyI@ K€YÍJôx€~‚5d@‰{‡½ù0ɨLÔ±¿ðˆS¯%mL‰ ³. >c?ÊÁ$Ïff:“6@î»iÚ¨3RÅVî?¹¹|ý§_:Üþðó‹4“r«C9µºüÀk·n¹âµk±ÔG9í—›‰§;¸Á9ƒÌ»¤ $òRõ�g-àÍÄ,L_“ cÔCJ©Õƒ 窄U0§s�o|á,xf9PŠÆà¦‹wÓxˆ òe ÿ>Zè€�_-`ìU\Gª+i­�iuÂͤ›Ô3~Ð=â{ŽÀk¸5ƯTÿBjÁvx.0àê¿mújÑòmw>uöÙ?Vvê…RظgöGÛO9ü?¯®Øsµß$â†gAø„ž·à¨flŠŒóÈÞ®\�˜<‹ ƒ@D�Á,ù€÷Ƕÿ@°1öN×Êû¡ðÜb{méI Ú5Ußg¢æW¡ÀS°²Œhtù™ØÞ“!Ù8G` ¢@^OèϵoØj’Øoíçg�@/�æ^LBŸ°D¾xÎÀ$ŸyÛEŸy¿°ŠÐ–î,C˜j2¥öb0¨£Ï¥c@¼?Äwi^ T«mÂHR‘nFkÌGÍ3Æû^Zåd‰9%4÷Sés]Ò2°�’j9ØwR…뮬 _�F+W®GÒË�^èÂË6µÜü>rІ´|('ŒåÇ$ï:?ݺuëÖí ?—Iú'’¾[Óì³’~ZÒï÷çR7)¬Ì—×u/°ýŒ¤ŸÒ7ˆÕRæ†e,ìÏ´ÈÒýZ-}sZ³þk0Nʼúê7�?ðýoÍ'ro2x-¸ µ>¨Ó@³O|ùÈâíŸ{ùpÿé'5o9»{çÆ#¿½ý¬‹> ¡TlýôŠ?¿ðe—&Š-°À·}Q€iqÁ fŸquV¼Ð>üú&ûñöçÑ6±Öƒoÿp¥Šk|¬Á1Uy Ã|%�“Cê¥x@Xˆ²·Àú‹Á„z'üçmsø~™~Mªˆ M”Î+£¨"Á¨xZ- ¿9Ë›|¬‹$©¥±rp3(×ÚC±ö…XGó=xéâ÷ÿx95>.zOÕ³—¯>ýüs»î_œ–ª¸²'׃rß;”àpÅi½€Î "vñ0¨–0Ú/ üfý�4:¢H±uïAc$ÛWZåŽv]¼øºù9Àé| jµÆr:RL«"5¦D�äâ>J¼ê÷��cÉ ƒ€Ò»1_ûwØXóG ”Õ Õ?y‚€ éÛvž3�<~om‡ªX�O0!ƒŽ/vPQfÍï1å:8-RÇ•BóŒúª ô³&Þtß3 À—ÓšbÝ4%šH :s¥‹Óßak}¿Týmþ'Z>N˜³'_3÷”]ÇRº?0Œ´Ç仨ýF)jfÇ:÷è\Wݰ©ÍÝso`JÕ>ñ-ÞŸZWý¬zè¤[·nݺ=ÂÀÏ^Io—Þ�Ú I¿,é×$�ììÖ éö‹’~¡»¡Û·²�W_õšñG~øõ™ƒv²ïaÅé^$A>·Å»n¿~þgw~9½º`RÛö/?ºý¬‹_µºîð²jÛ–r©‹‚yâÊ�€B±ñ¨¨ M¦ÁMôö#¯<˜�&Mjÿˆ@¼ä7`*�¾ýŒë_µÛ"‹´‚Þ�ÐÓ+Ãr„7€ÔAJú=ÀE@ðƒ×\M »°®X^�ãÊøü�Úˆ� 4~Ü'lì™F‡Ó½�A½• Õ¦ºbZ8¬B•4|éľå;ïý[å�í—iЫ3ݽºx÷?ݺù¼?6qòµÅõý »O\#¬¤:hTõ!Í'J5G¸ (v“€“ LŸÓpŠ+4¨.‚àqt«æ�ÊHRR%Ì \ Y«•L� ÁؼêÅö™ÈîPžõYx6`¢‡íš¯ ëàD_Pj¨‡#Ó>Q 1Ð�ªÕü˜yå5õ Åƒt† NM>Èiù®°ªšcŸ Hc±SÝiR%Ó¥áùÂ=C׈ô×¼�µÁ,Žïä4¤LjÛ[ð‡g¬Ê÷öxŸböñ󀫛h [$øÌÀ±vÈqÔ캦=c…¾³kOÑu�Û¥ƒç,Å;­ ß±£ùg¡óÓ…´»uëÖ­Û~I? éW$�¯iöÏ×`Ñ»»u¨@ݺ¡åÐÕ¯ä‡^ :§X 0ª€< ÑÆúJ)Ç6TI÷ÂŒ”éyzœ/ßpëwÌ>yÿw—±îž�<ŽçïyûÖ‹/ÿýzÎîc HŒ`L¦}cºþÙ´�ç‚áAÈHžÀAB¼pø~ ‚üëk)¨ŸqàŽ®¯ë"å JÃo½ÒŒ3¾=ÄŠhYLZÍYþV)GW˜úëHmÐÖµ‘ê˜ÐÅäY$ÁgÜçðþ`Ц’?†ßf}‡öÙÑwo£ƒÔÝ jÚN÷ÚéÕlãÍw¾d¸óÔ�–Qû„–[Ý>²}Ã�ÿ~çq>Î@`¡ª;Ö†bý%|9øû¡ë×ÜέÚþ- oÇG8Õ½ŠÃ@Æ9ƒÓ =-S‰q_£"àaº^Mm«á;ó~„` X&jO%á‡4 ]ÓóÈß{2€\cJŸ—SO‚0;ì ÷<ßà ¢û…{¶`Žú*qî¦V,�´è²Š¢øýŠºfá“pŸ\} 4Èm%“» Çy?¯`´ë‚°rS-JæsÒ¡s]ͼúÈï+ß¿WPÛI3ÏñØi@ Õ›DËt€�¤Ô¥­äÜC¼‡DœhsÌÕ(™ÃÞÏE×ܸ¡#nh6KÇ‚‘ §Œø[§‡{XÒ‰¾JìÖ­[·ngüy’¤ß”ô$M³÷­u~ÞÛ½×­@êÖí?¸(¥] 3ЇhKâ3\ãzh½ÀNé�Ì"Tî>¾ùÆÏ|çð¥ãÏŽUk–q_ޝ®:ø¯¶n¹üZÌv’@›› 8GL«š1)ÄúÇØÕjƒJt(SÕ3ßaá€ÇôjÉŒ²$¡{LuNœïßµ·8mHd�l'L—àSãµ j@@?eAø U?è]⽟£*W{)ËjßQp“ªÂX¸„ç=C9Î%ÔÈë½Xßð`¿�>Fë”¶Y2mÅñï¼ç¦ù§þñ²]/}$†áqßüÍ[O?üÏÆ‹wß/0Ö óÀk!ãJ*èµ™¯¯h�’qhàÌÕ.©ñØ„ºiNýÌûE!Ì!ÚäÇr &¾—à\ȠŤd„u;£ ¬åa@�i· !JÁÜÊš`^ÝB� n>!Іßs_IéZ™ Ϋ€Z]œ ´›¬‹#ÓãÃêÐ K’ÈgS5¤ìyc˜r¬ÝÌÕäx�:ìWU+IŠ‘y»Ø9HzhÀUdŒ„Ä}–P¬Á+»î�€TÚ¹†ÏûJ‘ÆQi�þ³Ð32?? ÇóD5Y?ÀÇú…ƒg’4e}A€¨tÉUK]ú¨M-–3Ðò™>¦úï˜N3t~Žu=…nݺuëv€Ÿ $ý7’~PÓìK’~VÒÿ%iììÖ uëöTýàk9Ë“ƒ5¨gÀ£§€@‹¿‚qæe¼Ÿ}䞣‹wÞþÃC[×j‚ÕÍÙ·Þ¿ØyÆÑ¿ˆ5 jqØü€í@ßFA �!0`XJš  Q2¥—GÕ‚xDÍ߉ša16UÛÃÅÿ£¿Dp./w©k`ŒU¥@@£BÐ6@¤ûÃ×wzügYήñÓžs5M¾qÐL~¯ÙYxß­–a°àzRÁçÏ}*« #�Öã�9Þ%KV;>kûg±}ö±‡.X¼ï¾N¬žúÈëüéÄxdãŸEè÷´{ز …¤ªíO~Ÿ˜/±/zµS�ZŸË*(s=¢4zœ€‚9%U|/<ÑÑOb¿Pp`y%ëþp_wgxÒkñ‘®“õ¼WJ°hQÍ}Hc6™úÌŒf1%Xì“Ï)ðr0ÇÛ~Àó!>î þÛ¤ªÆµ”(xóä ÖþB0(hfý¼ãy,šcP%2<+anéþ@•M¢8%9ÇBÇ[ ¿LÌ+neZL1Àª"£?„o ŠžLÇtzVmd-ŽyB³¯¢Ãç]õ˜]Ú³oNZò°æÒ8‡�ZÓ½íô•a·nݺu{„�ŸMI¯”ôs’öÈ í´¤_•ô�%ëìÖ uëvf uT=:i2RåAw_Õšø°-Áˆ‚ ƒD£Êâ�?Óüƒw¿¼l­Î™ÔîƒÿvûÙ—¼zuõÁ;“¬ô4(A-MÕŠã±1“,xÍú0ž™K:Fi , zyUTI‚–¸‰}E;!H̪K(¾>6A^„²,gÖFÊ�yEgÁÛ!=#~rð“÷í49QAdTP.<íÁpAS0Á¹¥:'vlÏŽvZ�Ì÷ä�%"ôUEÙ¯ :-˜rÏ©Í�?ºû‡Ê}[ßS¤¹Î ÕyùâêÒÝÿÃÖs�¼Çp8�6dFMšn›w\É´’Žˆƒ“±'¨× ?�ùØÐP$*žx{!P¾ö·U|€%÷¬�Ÿ ùe«yõ©›U9)ÊEhŽû™(¶¢¹&T?Ö± ÌE€� Ú^°zÒ Æß ´q¬ÿã Éa�“DÀ$RFŽMÁʰ~3Ú|Aqˆ V dJ…²�ÇtÀþ`Æä”ÿ‡½s�µì,Ëøó­}.3g:—v:Z(S¦¦µ2ƒr š")P.F …Рo$* Ñ?$‘/Q¢T4/`ClZ.U AJЦ-im±¥L/ÔÚŽm§ÓétfÎm}³“7Ï—ŸovâÌi¾çŸsÎÞgï½¾w}ë[k¿Ïzž'¿'@ÙD¡þŠTMù’Y¿Av¢$55…Ñf×nágÿHŠÈQaí"“Ï|ʶ5Ç•³Q \‘ë9U¹ f Øn ²ëF "g¯�|¿Æÿðy§ÝBm^’ö½xI;wϧÄ9£¤A[1óckSâçdÿFØÑÑÑÑqЉŸ"éÇ%}PÒš Ÿ–ô>I÷ô vt¨@§ÅÎ?x©û|S�€�LÅŸÇÁÁl'¶7“¤k ‹×¼r¸çÈ›KÕâ ªµñü­×Ç}ñ„JcSV¹ñ?7öJI² ¬~I¸rØqß™vpÑÜ‹&Æld‡øq$wøµ•ëÇÍ#ÛßÞè�ºç {ŒühÕPö&VóYÂÇÙ6ŽkËC#�[Šm¾àno5�_kÒx;¨BÐ6¨_h®r-lŽÖ…žy@ÍÆT''‚8/¢*Ö.h6Ƕ؜µúŒµ,~ö¡×žxWu¦6uÓpÓê�í^Û¿ý>kDO›ñQP MTWjHFZumNàšÄìÏX—}íÏ×ÿ 0…‡�—†8oÆn¶gÅU@AF¹•\’ÿÅk…Ñ|ÌŽÏôX€(ö¬Ù|ÌÅ ñÝçX/Qé"ÕTõÄd…råi<–xU’5¢Óóƒ„ Ïäs*«Ô¤ ~Â&ÌÔPž ed‡ÕÎæGR&õª“`mÆ�ç ÍªÈå.·%…Ó^–y—գЙº\‘×ÞHR{=›E”‹Cuñë*GÔ€ ´®­e*+e­æžûÃõ`òÉjÖx¤6‹q‚Z×ãI6œåð¹Zè…tîžEM&“ tÒÌÅŠù>þ³âš#­O‰Ÿ§ú7ÁŽŽŽŽŽÓ@þ¼hšóó*͆—ô+’¾Ô«×Ñ  NutœFÐ;®Í­ß¸é=µ‡Šf„ÙK@v €›RÄÖÞˆš>7¬üi뛕ˆ"µßmM9Ñàæ;è+4Ðø´@f²Þámm·ÍjÁM_åM[ÙݽØdis´Ü¾hàúÖüQ#anQ³+Ïñð £Ø·HEi£Y ˜#žçà+’ÛÅkÈz¦môNîyj÷üW}×plíÕz† ::î^üØòëw_£ùaTõàôV%ÆMàÿaª;hÚ]ß©õ4 ]eh mÈ ›-çÅç@Ò�§¬ "áÇ>öÇȘ¬o ä! 3F¦žôš!l¼ñ³Õ5´µ±%0óÇkÏë}¾ö%ŠÑd��šX]šyã%Õ –�D¿Ï‘üš ÿù’jÖù�çæ 1¾)‚k¨|C]Áí„ïþ|XÃŒƒíB´*ÈV_C7‹ø|SÏ&cXõÂÄg ŠÎ?``™ÍÙúhkn¼/e%6º�mƒgZ- «©í\´}ç î_ÒÖl÷Æ¿—„ŠßË’ŽHZíßþ:::::N1ñ3/é%ý¦¤ÊJÔ?–ôI�÷ vt¨@—TJÁF—«\\µÐ>WÇø'³Bóæ Ù•eAßÜ€„;?©Q2V-\ß+&w<úÖ²:&;7}må5{þn|ÁŽÃ UO¼?5§ãÿÄHfu?¡wçŸ5B‡XW÷†xb  ¡ÉM*GÚàaë3Ö¹8=Æ.'{8$³;¬™ÈcJˆ¨yjKħYžµvHÔôÏ@ñ ÈQJ²¶R ¦2ÄçYƒi¶}D¶LÜü—<àÝë`Ílî“Úg[ÎÏÑÕÅ…ëþÉáÑå·²…äÓ�:_î]»èŒ�¬^±ó&&gœ‘’ÛrAØ?+1ý" ¨ÒªÑvQJš…X} 2Z8„æ„×H18º¼NfÅcLØø¹€É÷|m`ÅAŠ×Œ±„ òùÒŒŽØÿ±UNþ�•‰ß0ÈÎÃñÒ¼È×à<Ž”k‰ÒÒ¨Pâú±€ÊŽP%K¼¯aü°ßÓ%x�ç,¨‚$ f˜Î³N…ð®‚BØ1'îKqëFÕ–ä¶í7¥ŸWŒÆMd·)v$¥¤‡j¶vòM8ª‰5æ¬ÕÎ^^A% þ²±Â9´UÔ«Mb%œÔê$�Γyé{_¶¤goÒdâ¯ä«½œrµP…5a]Ò’Nôo}§�üy�¤?’´O³ázIï•ô�^½ŽNu¨£cà  ö ¥eƒxSÆ®#ós(r¥4€ÀÚ"ŸÚIµ¶Då‰åÍ ×ÝsÕðÀÑ«JÕ¼”£­Œ{¶]·ò†½Ÿ©ÛWƒàñ&)^â÷œDá»Ù�*°¦|v¨…œ"«Ÿ@fߘ…b[@·t‰·§`m&Äbù²Ùî¸[»üì¿]}ÍžU4ªx˜nCúÈ`�? ‡²Ü‹@Fаˆ-„¼!à  ØÖæÕZ@I…÷/ì?¤F‚ÊH,„l›G«5=müh`Ÿä GIÔaƒj]‡Æ/õ†­Èñ7·%ST‘âÙR³Út9¹,4ÛÕ=ų^Z}†ÛàUµÍùxÎ3@æn:|ÑümGÞSNŽ—ëY†*­Ö3çÿaùÕ»þ²î\xŠï[VŒ�IGË|Áý�[!‰•‡J`ŸŸçœpØæv›ùc°?aLP“D�J¯‡±Ø¸ŒèÇPäU^;2ò9~�ƒÚÌcb{ ¡ý–Gæ6XHrÝhJHG[›ç Ra1sÁH&W:Šƒñ�GUYÌ«œðÎÏѰ†Š Dé(œ­•œ‹«bþwÍ?”¿�»�e¹Á¦äÙ€¹ª`N^Ô!¶ÁU�¶ ®êåmväÄ3]‡úñ –“q>\‡ø±çÛà™—âëX ý&V&óÆÞ[¬²v%Ôsž?ÑÞK·hó–‰ïÏóÁŒŸø½Àÿòu©ôÔTõ³Þ¿éuttttœbâgû´�üË’æd@�öž?"i¥W°£@�êèx†d•ž³&†7`¼!Ewÿ›Ý„5–’5u<Ã¥{¿ïJÏýëC—ÍÿÛCo+'Öž?S�Θ¿kõŠçýÍúþ]÷R\ùÁŠ Üv©m8qÈêD,ìMÍ#ª 7«0ÀØžç|¤xú%Y(ÆDôÒ´1×¢pÇ®½‰ï³Í¡mæ&,«¡pkÙP  ~­dO]y“JÕcRKÆœdµ ¬ °Ú²}DͦؾÁæ[÷>ï`nz£s SyÔ°ü8±sá+�ülybõµE*z£:<ž·éÏ—_·ûsb=´ºŒ0ó1nô1ùÃVkN4øcyÎI¢B ÂÇI@'Y�(†Ã Æä–GvN RÌUŸ¬²·Øç2+�˜ÈUö¾|Ž­@(EþXÔ7¶2ùR²ÃjÁ¹>šÍ Ó³GH}ic'@WÆZD�öUÒP{ˆGßS1¾ØéX‘bמœOÇd�ɇ½A’sÖ‹(³ÛØzWÕÿ^,?Ÿ�•® |à �s­Ú'¶!jé۱ēÐ(ž"–TòÕ32ÌþžåÜ3ÕÁ­ìXi�Æ6p‘·g„½Õ@jêPÛë R # à5¹]ósÖÜ,ÉãܨjCj~<hgFJ0û™ÙýºÒKR(~ü|㵈ýIç³<É3%T õߨÚÚšf)XVûÀóØ3 a-´õæ�ølÉìמÓç.Ø7¯ó/\ÒüÂ@j#æ\³1³r†ŸOJ:Úó:::::Nñ³GÒHz‹f÷%½OÒ§úy©£@�êèÐÒÒœìß«ãÇOêöÛÐÚz}Z  ÿµ€c‹1oÚPynñCѲ¿ ô~­Ï9oîz 5n6Mî:|Þü—øéá‰åýšuaòðÚ�]ŸXý¡ç}]C©­µ˜+<¨‰äH4§¬þ`Í䪧°ôá  7 Pm¾P”o‡½?dDIèñßæÀÔ<ð»UšDÃïþ'¥SžéÁµ%˜À›’2,8(i�$:oÁU«ƒ`_”ÝÍ*†qdÒÞö Ý5mDn¢ø˜¢Qø�ëÍë4wë‘çÏßòø/•ë߯ Âdi»¶í»B›ÎÙ«º¶¢'Þ¨ã÷ߪ:®oT>Ðɺsá“˯9ûuÛªÍ$²¬ªíœ€ã æ¨JØÞ'ol ˜, ŽƒûGÏ÷ ‚¤VSë(”g6Ÿc¾ÇçÒñÀd‡ —¦y>ƒú’XP½�åe�ZFŠqÈ ‚Py0!fóÌë(k°“2ŠæÔ×°? $AQg{_««èüà$kd)Y6/•@‚pÚf*_o -¿�a¥[̹hûÆ0‘ƒv¹^×fŽ:!l7ÂT‰,Iá¸;SC1Rõ›çü01Ä‘¤qT&1÷ã=IN×Iñ·Õ¤*k€•œ<ì÷�Ï™è’-ió–9Ÿ¿pEãdпË~òyåøTõ³Ö¿Yvttttœbâg‹¤_›’9›d@œ�ô{’>ØÕ¨�êPÇw9Þü¦—ë~þj]zé%Ú½{—æææ$IËËË:tèÝ~ûè£öWúüõ·<=@®2™Iñ_bóPQ!ë'k&ã�†¹ý›g,°IóqþËÿ¹î–Co+ËëçÎTÃm ·­¾êüO¬_zÖƒV£RÚfÿà„KÖ4'Ärl°Ñd˜Ð Ê •Y0å¹/ž¹Ù�¶˜÷‘qsÞC‘¬y§*•¡H5›�”©b˜¤; knU#¡‘=•˜[Æ•B » låûÏ›gÖÔÁÁ¤$«�X•¿[#²Ýv�÷ç@©`:`eW‡CËÛ¾øðÕåÈꛊ4Ù  .�qáKµeÏ•Á?ríø=yç :ùß÷h£P':´~þÒGW®ÜõË«1bÑ  °Ÿd["VkNÁÁB9Ù!Î8 r˜æ%çjp“±& j�$ ó´@›ë(¯3fßd5•½¾°ÍŸ=>Öi.HØB$±×ªBþNz:'5˜©¨2»S&áÙ«Ê®=H‘Êç¶Ùj•�p>1¯—b,m6RŒÛÖnÿ�C%˜ïÌ÷!²5Ÿûµ&×þ“�½˜Q ÊæSr-)Vàñ7øÿ8IÂù$ ¢ðFMklJlSò "œ=ä¶p~4°‚‡•¸¦³±x½ƒñGîÏæ3]ö}‹Ú~Ö&ñNqñ ÂgTÀ'[Ç-Os~–û·ËŽŽŽŽŽSLüI?%é÷%ÍêñII¿.é�^ÁŽNu¨ãÿ‰«ßq¥ÎܱMÛ·o“$}à·>®g ÞxÕKõþ÷¿W\®o~ó î¾û î¸ã.Ý|ómÚ²eIû÷_¦}û.ÖEíÕ…^ [n¹U¿ó»Öµ×ݸá@lYfÞþfåbcÞ »<¨Uë”2àï‚& A´á`ë{½Õ`eœ[¸îà�L¾uäÇÊX—f`ÅÆñ¼-ÿ¼rÕÞO×�›Ž5™Åé­Dö@4>9?¨@’RÕ‹5ø1k€ç5ûðg€ì~JXßåckïì �¥Kìwè™ÂÄ$R,·`â-7€0*ˆ !憩 òl Õ cÂûˆ›�T ÷ƒæ�ßïl÷9í6[|×uBþZ"¬A·:–ÅÏ=ôæá¿N\]FmÓaéy—iëÅ? aqI–ý¶ŽÞù/Z;vX…º0ܺö=[?¼úÒw!G* 2UëÕ‘Ô‰›$e^”ä&�˜  j°ÿÍÎ5QŸ&�lÛî*a–Â-ÀØz’´ð7(0‰TÍDvŒ5Aï–�VU§Ä�5v}Emc\ £<$'sD¤Gš{¥1Íd®U¼Ž ±<Ϥ%ÀÛu ÖEœ_¾†úø™ØÃã#ŸËd)(nð8ΕvÎôçq¿Õÿaï: ¬ªÎî>÷Í{ÓéEz“+ÅXÁ^¢±€ÝØ¢1k~{/±Ç˜XbÚDDA1Jì±�€¢R¤w†:åÝó'³îø­ï¬½—dfs6‹õÞ»ïÝrÊ=çηÏþvòž�>dAïëBFè¾at:6µ»< ÙAë€{ìøžCi:b>>*5�/'Å-©s!¡ä7–—–*/‰œ·_e2@ï­³hÓ¾QƦ }b¢ðQ×äam²ÿJkÂ_Æ @þlàvƒ‘“ŸŸ·Cí(@^<óÔMˆ¢i[‹êªjTUUaÆJ,\¸ßÎ]€©ŸÏÀ»ïÏÀ�Õ•Ÿ#A­Z¦cç¡8®¾òTôë× uxà�'0ö¥Ißquç×Ö¶ÙÅ—\‹N;õ\uÕE(,,Äoλ <8¶ñ<€$ÈCƒd$Ͻ¥«¶­UÁp_N~ŸÉ7ÿC[rì3Ãaýê*ƒ¬_íî»-XS–{iÖÏ͵C…Ið­¸7kò=›?[5¼Ûd£<�éÔ’K¾3ŠØâÞ xÅMŠ43²‹?¤Õ`žU)“u¥ â}D“ªohE™Š?â7�€¢¾•èiü²QªÚ„+ ä ÜÛ©Îäšz#i£h­ qÓi¿7ä%Çqî[Wh­cÆîWÂ2Hu³o,Þ¦à‹Š3MµíŠFB®Y;4黲MÛ 5lŒµs&cÍWï!®®D#!ŽË ÆU nñǸKñJ<ͤÑJEN´ð~ÁS,òqƒ�5þq‡+#•7”†u § *÷˜l(«M�ÊSMÒ^F øSÊ_E|ÃÜ:ŽÔ=.—HÚIHYâ=æ­ {ŠÂ‡ñóñ…‘ šT³€\�Jµ¦¶QÕqRVzýš<×$5OËÊ N­ “v ëhgõÖ­Ÿ“sÊì}KµÐ„€üÙK«Å51è/‹¥>7šøåϲÁ£RϧLÙh�³àõÉÓ⩹Ñ;RXËSPÅ�_娬L1ÅI0Cä|:÷(@瞥Èe<þ>l».5ÿ�@ûü¬‡ðE@@@@@=?í\àx¤Ã"x8ÌK� P*¬_ûi’ì?ƒ"‹1iÒ§øË_žÂßG¿û?O½úÊŸ±ë®BÚÿú×—âž{ŸCcã¬3Á�7^ŽO?�ŒSO½S¦ÎCôï×÷Þ{¶Ûnk\vù�¸ù–Q�àtÜ pÿÈ7ÆŸÊKˆ›ì¢ „Ü AeR×B<˜­u®}šþŒ¾|^6óÙ’®Ù7æ­©î‹°E™o«·kûHÍ�öŸ'«Ù¡T@,àÂSrð„2!&*+„ПӥšáƼ¤(Òîä|¾T;<ÕŒúiÀ¬t¤ÿò•À4ä«ú&QþМŸTôzøGîªæ�¥ÔsoMÊL|•x ž*~4¬+Wb)ˆ˜Èg6σfRæÌôŠöÙ÷—�­ÍF#!STŽòÞCPÜ®þSÄÕ°zÆ{X÷íd)fì�[çþR¹w›gQUÁD‘îR°.¢B‡e¼’¶Ð}OŒõ­ˆ¨1ýŠC=îé•ÿ¢ £J­. fø¢X[4à™åõœH�É6>n¸e÷ÏKBL¸>MÉgœ–!Ñã)$Dˆž§% ¬·yÉ5vxÕCV›’î>sxcö¤Å’÷)¡H}û}¹²T¦6æŸ¨ÚØ“z•«N ˆ'–"ÂTPß5Nþªúâjc®¸!´Uéß<¹#áOKÆÓ¨é¦Ps�/»V§«cës‹ [Í›¤­,K^ «êš¼._îQÝ?¥½I½*Ï+>†³´Íj¬hѶ½£¸´œ¸1îgòñúá÷L ù¼>I÷VÂõLüø5€ß(ÃÆQà¶„,ª5 @5Äã†ÿxõuœuÖeøfæ²@}�PÇMññGã°rå* Üæ¬[WSëôØ£÷ ù|ŒŠŠŠÚß|6y*žõÜwJ¥‚ŒÁ'?‡N�Úc§�À´/604rŒÄq‚ bf,F÷Q¤¶IðF:$Wè€\ðà3¬¥äÀ§Ný&‡•w†QIZHù XB6FF±±”CA”™àcŽg,нJ÷žsˆÿ K¥j×J]Ë6ÖJ`ëXЗdТuÁæcªRÔàÏÒ_ÀÉ0N,ÒT›H¡01©Þ–®Ư¾å)ßQC‰xÃHMŽ ±E?>ÈþQ²?å¾äM¢Ì•rúH_M–º -À-Ÿá)àDöÅ8&–ÐçGÇ^}©0]uºN?GFºðÂ…¨‚” �û¡î=Vß=×£î˜J�[X¡ï B´h]œBáþÜ] B:S…P5€åÖ‡pE@@@@@øüàVÝ‘£œà«Pƒ� Ð÷L &OžŠ}‡�ÅKÖè{"€þp÷…8唑8óÌ ð§û_rÐÎxúéû±fÍ,^¼´6Í[ëÖ-‘ËåP‡›o¾—üî^ÀQGÅ#�Üó¯}žÃ1#.m l ÙcÉÊR @§µá ù×®,„õ­x$d†€§~«Ý—x¾�2òàŠ7EÝšê\á‹ß ‹f­:ÐXäRøUÇ�ÊÇUí×íyÛ´p=#?èJûZR&)««ð!ÆÌRNÚ£¢øñÃjbи�<|«n%páÁ¸¹!Ácž }C‘A\ùDÒa%`Ê·(,øKH0�/ÀÄ ÈÅt€(�|)uôý¦Èk-¢(‚4Ù£=0<„©"oI—sÈ\i_Ÿï[K�ØF¹—ì�™³öD£µjŸòÞCjÕ? � ‹¿AÅô7‘_· �[½_½uÓ»j¶j2KšŒŒE䆿©9�@«›þJ)à¦öF§ùM¦ŽD½�~å¨åXŸÖ¾zþQéPká¤>”²x¼oÒ¥ûâ\¬MdH×ãy¤:5 >«±„\™ZœáõýáÞpzüC Ÿ­jOºMÆA¯Ú‡ïVµ¦&Áó�9B†©g"ߢ¸žPÔÉMÝ—À«së‚+‡-#%X±ñX�ÝÖ’~%Çcž{ü~ÓÏRd?žR|ÈúEæ~PâK®C}ÇæeN~AÍ‘¤nɳ÷¿p5®l£„¸&xL”�rÒöLmG ,W�Û{›"´íP†‚¬´§øù0¯ëýìzé×<€UIÊ7BõLþôO|~ö@:LMTB¯„Ú P €ê�:þø_áý÷?ƒ¹Â,ºvi�N�Ú¡C‡vØsÏݰýöÛÀÅs£ÇâçGü6@ßÔ½[KLúp¦N�Ž!? Š?~ö;à¬ï”>?éׇ> ]t`ðà0qÒ7€—_ú#v²†=4ÙÖ€@ <)¾„ Ò)P¨2B‚–þÑÍL©å7þ@¸"{XšIñÅCYLáAƒý±€¢9Ísãg-ݰKÊ÷+ó}Z>Yµo—·�1±Ç¬_×µ1†‘?Œ¼Qõà —å37d�ü¾:Èç´»�ö#Xad˜;H›°6µ±…‰ ó›2HG3U½‹*À¯„âÁ,!A +/ „-úcM~©@�s,«�J‰Ü…Òå–zÑm+Û„€’•ßn*&šZ†ß[^rwÅwöÝ%} ¦¬:ÓTŽÐHÈ6iƒ&}wE®y{44lœÇÚYŸ`Í×Àæ«Ñ°@Þ6-x®j×–÷ÇíŠVë´_’nSÈv¢"÷ŒÜg< § öÆÎ+¸2ÂUðë‚Õ# 'fõ ìë1RÆ\9�&Á9ädÜ‘{K—š*e}Ao=vÃðñÑMFÅ\ÖC#U|°±”‘í~µ!—œP•¨ôUjxO•†Æ�ãdÎõ,(±D 2îG>2H�—?ïpE¥¾Ê5¦M}çÞÛ\%ÄŸõ{)º�%ê0ôyÁ¯˜c=A/,`‹DÔó'YpDI îÁ£î–bQï'‡ÕDIG=�Èü«Æ ¥\PU”Uc8-K».Yôè[‚\Q�Û&âÇRbˆß§«¬�!Š€€€€€z&~Z¸Àé"l+\à�jB (@õJrÈñxaìDl*ö¾=î¼óZtêÔA޽~=úØ s¾]ñ?GuîÔÅÅ9ÈïWbåªJ4Nÿå�¸óÎëqá…Wâ÷·?í!€4æÎ™€¶mÛà⋯Æ-¿0â˜=ñàƒwàšknÅ•W?ØÐ)ู±^õl¼*{V&èϮÿ‡¯÷½¡«Yµ�ôySÁù µŠ·àƒ[fß[0¬«é�°%_WïÔíÚÎHV`Æê,*꾌‘€Wj¢†§`ò�—ߤ Z’ßkå‹&KàìHÙyàQ6úW:[êD‚Ï\ñƒ�Ã1Ôô[àQyŒï¡¼­"©{!bˆŸIiÄÔu²ñ£ð¼gä�päfä¼Ü®â)óÍêVÙ·–œ­®Ù�„(WŒò^ƒQÒ¡Ÿ\^#!®\‡Õ_¾ƒu󦢱` VÅm ï¯Öæy˜i_2.³îºMéì%ã­£¶!`ŠE”¸×–¼!ªyCG8úLR’þQg­K°ûÆ—”žk¤\å$P†÷œÌwIi뙋]…˜@~¢”OÊJÒ€yÓŸÉüë–Y•�,0áþc ˜Ú‚Ö�«’ó«cI°žA·¹ê/D%ä‘z¶¢L�úNaê=óÕQå% ªí˘@iļýµJVšU§;�Ôܦ8@ÀˆB)—î  8æùÃßëû—(¨�ls¹†¤Â”ó0¥¬&€”*ˆ3å¼o”53è·m J›²>%êŸ�úüB ±±kC’î­*„&ê™øÉ8-!šcãȸÀ–… P €¾gˆ“@O=õgärb�põÕ·àªkúÑ@?TÜzË98ûW§bßaGáÕ×>KE•”`Þ·o£¬¬ {ï}$&¼>лW[L™üF�zÇ�py@½ž¯%€¾]Ík•±?7ÊOö‰ Q;�•¯*:'},(!ÇáQzï PH{»$‡E>6¹q³†d¦/û…©±Í�qË¢7«öêüTܹÉrâ;@WŽ *2b©À@ÊOL¿å3 `J[zÓáqƒkíi’㟬~÷}ÒþÒÎ:è¥@ò{®>�*ï$XéÁ@ÒW¼) äÜ:…›&k¼a_Kü ÙªTAÞøS;p•#¹rCŽ¥ÛÎ%žÌʬ®.Ì�_xD´xÑƢ�ePÒe Ê{ìS�Ã÷‰êU‹Q1íuT­\Иþ@_ç·,½³ê§-'qŒo|±oA:¿-º�Bo×ûÈèyC¶ë¾ÉýâXVÿưô¨†\¢?àÍI)=pâ•îÏ|_„´#)ûh œ§ßc‹D<„…Œ�4ý™Ÿ#ä; ìKA�N”LÒoÉX¤Ï)Ç'�÷džæJ¾B×/×°PnZ�‚+2Iúñ¹!÷mk­vQs,ó ÔD°sËRÄò:3$MUŠIÝÕ=#1Tˆ9£bT–€o#4S¹ÄO²]Šz!–WáÉ6�Ýwy$Š?­@Ž2ý·/AóV%ˆ2p�œb¼²ì³gßêd…õÚ’hòg¯$Ý[?¤Ã«Iº·)¡ö  $ý÷Û1|ø^¨ÃOü#�¿,@�Œ¿>s † Ûm·Ø«×TÁ%€^ùÇ?qä‘ç¢eË2l»MôîÓÃöÝ;ï¼=¾þz&úôÛ€`ñ·1uêú³žÒˆ˜¹¼F÷²7 HØoÈÌ}@¸2–ú»ÈgŠY|%2OoÂÌ·ÍÊ …¹¿90úvÍð4¦ôÖ *îÒä¹ÊáÝÆ¢?EAI3ü�°~ÁXýÅÛÈoXƒÆ‚-ŽÞ¨Ôô®š¾åóå‘>¡H š^Kú¨ìKÆ^JÅ1,@¼/4ܹÇhò×M‘èø€‘[V©-ù˜h�y‘ßxœÄ1UC)xSxºJ[žÚɨ¹:æyî*ß*Õ�lKN—Æ>¶jxhlšFŽ´ƒ_}htpŸïë&`êÏäZ,™ɾZÇΟN!fÙ3ƒù<»¤�VûðgEþhrLæG¹îÔd!¡Œî¬N4ÂÔOüü2OÊ>4E+¨ç�œ^Ôk ãúj¹ oÙ�Á?&:ÊiëŒA�ŸäоK) ²•âMŽ.ˆ"’øñû}%€•Áç'  ˆŸ-Ü à@¤Ã×Îð|˜— Í‚ºé†³pî¹§ }ýêëØwø�jd|ðÞhÙ²zôÜ!€ŽU«*pÁ…WáÁ‡Æ©í}ø ÊËËг÷°$€Fo¬¬?hê3�)Põ?¡‰5ÏÚXÚKÏ{T%L oŠT®Ôâm*×$uè*Š”ò'¥÷�(œH#js÷9 uÛüÏ9lñ“~6të@Ê"×ÊI m;eнoŠJ²$µ›x¿T¿å}Ò‚{­°"ø)4ñÓÀ¥Î�ÅÆ±ÀÕîPj0 @�Úl “OÚ÷þá&!>ú ;î|6ƒ]†ôÃ�!ÛaàÀ~èÒ¥æ|;Ó¦~‰�?ž‚×ßøËWlÀ‹¾½·ÀС;`ëmú£_ß^µñÆÅ‹—âë¯gá±ÇŸÃ'ŸÎù�  ½öˆ6mZ¢Nú_|¹E’rí ƒöD—Îбc{´k×UUÕXºt–,Y†E‹—àÍ7?ÀËã?Àñú„‡Ð«W´ë°+%€–/_�Ù³¿ôêµ%Š‹‹pÕU·àÑÇž§žMŸO�8Ž1`à!�CÁÆ*�áKg­YH:Ô©7TB°¸þFó¯` !+$ä@Êñx°_@ͽ¡ýf Þž×7ûᢑfC¾R .ËN«Òþ‘üÖmæˆQ²HâG¥yã�Y¹&jÀÎËfè{�Ž�7W¶p‰ ðq#j$€©êAƒ}“m–)Áüä áÊ"_À×cnM@ÎÒþ:ý›ÔµªisÖó=æöü¸ñ8)£Wfɪg7¸}»¶iîõÅ'šUÕû&Ýàˆ²…(Ûr'”v˜›òVת�Ö/ø�aYÜ®è�•û¶ƒdlbÊN«Æœö\*ß3‚Ôüt²r}�PéÝ4RLã¹ÿÓ{ˉš]‰÷‹"z¨ß'¥NtŠ+¥ªK“%í˜ÔSÞJ[ëà=W È5e$Ô˜ER.¦èqÇ¿HC^t=xž¸cQ¥I—i"ÇÛOêÎñ0‚lçs‚¿qâ_·‰”Çí ÜÇ6oŠ‚”{ü0ŸïüŠ/rO0Ï›ºWQ'º�Kógªí”ÚÇOy§Ÿ¥/‹âÖë»îÅ&BäÙ„Ž Æ ¬I„>Û” ¼Y±‡¸‰!�mDñC|€ ¸Ïφ~¨gâ'p<€ë´M™.÷/.°0Ô`@ €´Ù@—\<W^q!Ô¦¾ß™HƒîÝZâúë.Àž{î†&MÊpTVVâö;îÃWü 5y‹MÅ©'ï‡ßþö,tíÚà¨�…Lšô).¿üf¼òê§›L½úÊŸ±ë®ƒQ‡_ÿúRÜsïsð¡k—¸ô’3pÄ¡¤¤ð£–Àyíµ7ñäSÏãµ “Õw�>|5~ñ‹CÑcË]¡Ã<€Ž9êgxðÁ;0mÚ—¼Ë‘X·®.!·léD¼ýö{¾ÿY DõŸp܋ԑ  Ö‹ ¯Já“x¥ $žŸ_ÿÁ-Aj��­pö¤"òðú¾p¯ Tå3¹q3‡ff¬<Âäm¼H¤1mŠ_«Ú§ËÓqû²ÕªMèuÀº�=Eüð@¬õyð & J‘󃯺&«[=imT¿•fyFøèà›Ý�/(7ÿ�hÁúcŒE Æ ¤Ó”÷Ü Q¶›#ªV̯õª®X‚Ƃ͚i5½Jo«Üâs—hvÆ $&ã§÷³ôA ­”“þ$äWÂ�ÌmÄSÂ^3íÿîø'p€žU|rOîqñyIöMê#æéø”Bwphä%í�€©^XÊK–úŒÃ¯begŠ®†õŸ ˆÿP¤×õÇ)ÓÁ�� uAæâÎXë­®ÄTÄU »�ߟ-Ö^RÒïˆO" –wJ¬¸7JjHùÙwòŽ4¦_,"Ÿ¹�§Xä‹ETÛ©6&õjdÿ´Ê,š®OCrof2}¶)D«-ÊeX][õ™<ð�z.1œ°ÀšvhògH¢à„txÀ9> µ @m¶Ѓ÷_†#Ž”Ï=Ž_žv6†Çì‰[o½Í›7CZL˜ðNýåŘ5{9Ò °0ƒÇ½4)Q«¼ùã}á¼óï@åúɈ¢¨A ½÷Ü£FÝ‹¦M›`SñÈ#Oâ¤S®VÛ®¼üd\rɹ8ú˜Óð̳oú Z<9êvظë®?ã7çß@°ý îxç�1¸ÿþGqú™74¨H§÷;°q^L®x€hë ƒ¡)Ÿ8ü* î}cãT©Q(ü¾ì�wõžë/Öš%Êrãf-X»—2€62ëòÝ›þµj¿nãQ˜É»�_}¸A Nˆù QÃÈv¢€ÑÊ0À1®:Ë•ÄWö“àŽ”ßà ‘�?¥ Ñz÷òIbý[ʪ÷÷è TÁt�ÇÆ€V8¨ ¯"�¨U�õÝ ú¼Æ¤ñÕÐjMôæ^[¸cfÆê_šÛ�„–�Фï®((k‰ÍÖbݼ©Xýå;ˆ«Ö£‘`ã’Ì+Õ;5ûC¾Géú$›Ju)Aö(BÖ§ü)"EÃîsªlEBîjÏ’XùŠxFáJ‡„‚ª€ä3øÀGTƒZ=ä!ZXÙDÈbøFhòGW7 ú ø8 À?¶ð}µÊØDŠøp•0|‚VŠY­c„9í_:ýWxÉXÊ>~å¤]aÉda\BžcJµÃUØ<}¯¶ÕS)àôõê¾FÚVêAÍ_I=ÑùR÷oª’ëÒÄ �&;áõˆ"Ï[¤Ÿé:×}I«â…ÈözmAüù’÷„˜#ÏÃrÆ®½shß­ ¹Âˆ7¢"ïõ~–¤ˆ«HÒ½Å!äPÏÄOg7øÒa.€ <|~ Í”¥È{ï>‰�û‹"è’kpó­OÀ‡“NŽÛo»EE…êïÌùó⫯¾Á‚‹jÓÀm¹e7´nÝJí»`ÁBxÐ ’®ÍsmÏ<}+ö߸Èçó˜1ã,Z´¸VÔ©S‡„è\wÝm8ï¼3PXXXïЖÝ[áÿx:´SÛ?ýt fΚƒÅ‹–Ô*‚ÚnÑmÛ´F÷î]QVVú]=ýìg‡á­w¾PûuäP<òÈ=¸ùæ»qÉïîõ@’vî½wŸ‡19S§-@Î:ãÜvÛ5¸è¢«pëmO5 4rŒlá+Ž=i¿˜Á½×³Gù´8ßÅ|ž=|_nø-'dj ôÆÓ”8ÑJKˆŽ¨î·™Ï—¶Ï¾1oDTQµRÀfæ× lõhõÐNŸ’Ô .¸Í6…yö&ú!  d6nX�xä½›ZIêÓ©­,K‚N®!½¨ÅŒxùÔ?:8ç[…Nî ¥bNR”€cÁ)¹k¾¯£L:Xë–S·«K®ª44ÉvLfõ’Þ ^‚p“WvÎ~¸ì4³.¿ ™’¦hÒç§(jÓ?6Øš*¬þú¬�õ‰4}Ãl°Í³�VîÝz”-/¨JAIŸóøÝ° ±‹ùÇ$0%(‰³9Á—ŽÉ &“ŠæY€ñ*tyý�NqeÔg5Çd¼2`é!¥.ˆ7õ¡s3FÐ�aŠHïx €¨®t»k¥ Q¼±G$J2y¬ï )èWD¹ó¤‡ÐI Sã2�¨/i_W×—6í%MyÛÈq¹í‘´�æx4AHwæp ¢È�VKb˜œŠŒª}ý �ø³.ñCÓç1Šì$Z©„S§ÅK®¥eÛ,zmU‚¢’B)0‰ÒGÿ†o#í·À2Õ!ÔPÏÄO €ß¸@1|�¤7%ÿ׆ P €6{èŠËNÂ¥—þuX²d)úØÇë×Ó¯o;¼óöó(--Z|î|œóëßáù1ïÃÅ™§Œ+®¸Íš5E^|q<>ô\øpίÇ-·\ ê<7Üp^û&æÎ[…:´i]Š=÷ØW]ua-ñ555ˆ¢¨A@/�ýöØc7$¨%£Î9çwµ©çš5-Ä?߯í�ÒÒRì½ï/©Úé³OžGII1¶Ùv,]¶œÜvë¹8묓ñÜè±øù¿ýŽ8ûø£¿¡eË–Øjà¾Éqˆ:aäÐ!Á5b<-*–]ùØ<ÂU?É6w•¥“oJéBÒÇiŸ}áNÜ¿êÚoì̽m4 b‹ìës·.ødñ±¦*Þ)7É}R=´ã£ùÞÍç%õ 4Øi ÎŸ&W°ø@º¼ºùÔv�å�&ÙÉãì@?Q,Iÿƒ›JÊBŠMÉ¿»� ‚ºJ*¡UÑeѽºÖ! ž :u£Õ!@êkâÖ¿J%E÷Þ”pI¹”¢*Z´¾,÷êÂfyÕ¢„kX˜Le=v@i×­a¢ ~̨Y»ÓßDå’™h,Ø æ;ßSµwëW¥cú<¯8™¯Ó"úçfÏÓ}¹>Y\�ÄT�|5>¿Ï=s»GËæ">Æ’º`uZ§ rëFûÍ$äWÿÈ5'Ÿ¡ÆžOÕ!-‹Ô«Jæ*C}óÏ&ª…‘ÊCˆùå='ß Œö€¢mÏ`yZ<íåWþøÕW¼)ˆêÚ{¬´I''}��ªrØÈ(  bê˧•ADéâ�ž¶ÎßJ{f)…:÷ˆ0”)‡äþ#©Ý{,�¾×8Á¨‘Ò~ʪ¸$BßAÅhÚ¢| ŽDTÅãf”:×ûUX`}1Ô3ñcàf��O%DÑìPƒ� Øì  V-KpÎÙÇâì³O­%ˆú„B§«ÃÛo¿�cGœ+„ ÁÀ�ðüó¡}ûvßùõxÐH¼<þc42ùÓ1èÖ­‹òÏ9ì°Sðéäo½ž<�=z;vÜqê…eÒÂ…ï i“&€ŠŠÕºûá˜ÄsŒ´©*K�ÇÉqø˜’:/¯Çj«ÆAæD²ÅQ¥£®6ò…*å´\‡£dRõ¤U¨éÓÕòt`Öå ¹zÅ€"úxBäpˆÚE5#™¯õ\âÖ�&züª êè¦8�uÚX)+÷@’2åyÞRõFùYí¯¥ßÏKN:s$éï:lï�EØ¢S)¢Œ!jo!rR)Üõg²½&Iõ¶*„€üàv» >N|~Þ µ €$tÕU·Ô*Pjòyäkòß½æã55yÄù­Z7G‡ömk‰‚ŽÛaï½wG‹Í>úè3 ~‚WýóÓ!}1~ü“ß�Õª ì<ø Ìøj16†óÎ=7Üpêðþû“°Ë®#ÁpáÇàš«/A/^‚½ö>J¥9óùM|ÿYôíÛ«A Ýwë�ñã%­Ú[o½‡Ý÷8 ÿ„\šøÁ3èÞ½ öÙç(¼÷ÁWµŠ«cŽ93fÌÄ_~.=x0m·¦LžŽ�>ž† ¯=ƒššjü¤ÿ0¬^SÕÐÐhb"ïOý%_k•ƒ&„Xº2ãÿ6­�2û70.â÷’<.¾ô;<è¦Óü¨mSf ŒB"9F4M“Ü˳�ˆ¯ª÷ã°³:ß³ÙSUûN@AÆòTvÆŒàmëOMÓ�_$„˜V©prAµ‰(Ü«ó!²¯‘¯â€áä�V¶ÑtTÜøÝÕ[4-ç�Ïê½¾M–‘òB®nÐè²ét8‘ló(ä¸éáÄôÜ£to¥ì‹L«8ÝTÇÝÐHÈ5k‡&}wC¶iüÏÂÆX;g2Ö|õâêJ4â¸,3¦jpó?Æ�‹WR¶_`™bÒ ²»ŸYê#÷þ”ßê•ÿî𬎛üBæ¹!ÄICSÕY¿Ù?Ÿ{Ôgº^ÜÀº…ߢ�”j0jA$eŸ*»"�uJ8:' ¬"Éœ9!­"•¤%U’òpÅ1':Ès%Äi¹yª4&‚�&Öõ„â Y~]Já’ ­b‡yßø•U¼¿“þJÓ-¦TÛYux=Òó±4©J£É 9íŽF¿õ¡Ìsä¥.-X*bÙîK�ro‘ô¬ªü²ÍK vê‘EçžeÈf¢Æˆ6Jæboz8!�VX|~€øi àZ'ÊäÅb—x@>Ô`@ €~pP}â½÷>Ä!‡ž¾Ñtaã_º»ï.úõ×ߎˮø3(13uÊXtî,~ÝÇ 7mZII>Ÿ<;¶Gî»ïaœuöMH‹‹.<W_uqƒ@'¿/þtß­¨Ã¸qÿÀ�ŸƒúÂÖ;ãÉ'îE›6­på•7㎻žEœxÂ0\wí%µ©ïFw6^›0 ‰¸WÏѵ@ÚÏÀ(¯ùCݰ?àµÒ'–  j¸i¡xjkɪæt);´%:Ü@¿×|Y“@®yµkÐûW ˶‚O–t˾5„Y[Ý)`‹2³«·kûpÍàvÓüŠãI%â_]¬¶I™y—ÇŽH_àõ¯”^܈ÜÖM“âxÉ p ´þauˆ¤`勵 õàñÑ&A. ^Q“i!pT¯=ÕÖÒæ´Ý’z¡AL€¦Jä* _›šÌ[dß]rJ´¦f ™¢2”÷‚âv½ÃSN‚¸zVÏxë¾� XÛXþ@kâV¹‡*÷jùJ bÖGˆê…â%õ–¤á’±F>3ȘÀ8_B†heœŸ(õƒ+Yઠèïý àO­Ó ½Vi5‚´�V¢hOMÈ¢€(bJ)J¤ÃUº.¨"Wª‡h–”?H}H Ÿ{ru‰7©g�N ¿BŠ«–½~tî 7)iCš6QïÚãýK?oé:ðr]©}ò¬Õ|ñhR 'þì©UÄò=›—É‚$ ýŒê*ý¤¬ªÏ©kñ+rU]4m¡×Vå(-Ï’4mdìàµ�ÚŸ�Eë“toUa† ¨gâ§ÀÙI¬¶G5€;\Ô¨� Ð�žZºtžyf4.»ün¬\U mÛ ï½ûê°zõ´ë0••y¤ÅÃ]‰£�>\ˆš‹®Â­·=@pìÑ{ࡇîD‚ZBc‡÷K™bMR£MŸö*š7oV��4?‡:ÌŸ¿ƒ¶;°^½vºwk‰gž¾[mõŒ=×]w>úd6ôïˆ .ø%Ž<âÌš5¿øÅéòÛ'€Ž{�škï�òMVùŠ:Àý `Y€A½W&¹<’.�•˜êš W¢Ê—€Ú�(Tú4fÍÜcxú†w•3Wè #ß®�Ìý.,„Èeu¨ ߉ÇH¹Å·ÁïSBƒDfEeqáøG™%•‡ Û8>?(í¶-ʺm÷ï÷á ‡ fõ2¬šþ:ª–ÍEcÁ˜oó�Šî¨Ú£Õ;à)Ñl*Uƒöó"ÆïÊ�Äì�¥ÂJ@R/y²Ô«BˆkE~k4yî'<iðtxVׇ&Ôxšlcs�«bã#;Tù¢+�ZàÌQ®"Læ6êÑäÂòu ²žô‹ÞH\}"$†ê¾”‹Þ¶çäKµªûOýú\¥"f*@M °…0êU?£¤ð¤$„�ÀQi’Ä7IA)µXÝIÅ—|—-ŠÐw›"´hSJëJ×Ö9ö(€DA”øü#퀀€€€òùÙÀïl‰txÀy¾ 5 =ôÐC£pÁ…·â‡ã¤‡ã�÷ÞŒ:Lœø1ïr,6×\ýK\xÁÙ¨Ãïû ~uöÍW\v.½ô7ÊchèÏNĦâ‰Ç¯Ãá‡Ô @sf¿ŽÖ­[BTqÕU·‰šÉ‹ô$ÖoΉcŽùy­jÅŠ•øê«o0ý‹¯�‰"ôìÙ=ztýw*¿Ú²=ýôsøým/¦†öª…OgIf㦼qŒ¶UpZ>$ßyä®v”mŒl iÛ±DL‘=ÊpÒÁmoG å�})r^yoVWåÆÎÜ/š³ú@c‘K±â¾:îXöBÕ~ÝFÛ&¹JOú ð:ñ�3UQÇ0�Çó†yݰÔ.r­�ÚŽ¯nV†Ó¤.x?ñ›²ËvÏêZ�J® )I7ãx!h#yIQ#÷‘Cðè²pÓiJ|Â7JRàqäc›{yÁ^™ÙkO4yÛ�„¢-z¢Iï]�).O6)°aÑ×µþ@ùõh,Ø¢è½ê­Êï¨ÙªÉl�ï–‚J=(AX¦vðkd@kò{¥ˆãc•Äshÿ¥øóƒ@2§øý¶\…ƒNù¥| š62© ^~UHêÔ™ÃêÈOrPÿ3wÌäD…ß/G/Jˆ„—þ§ç- R>NJF‘}½Ï¼,Æ�²¹J(Uš0‘ý˜Ê%=d” �¤>Sí˜*ý›KÂÆúü€z> Ç‚aj ’6’@~èg[Ôy‰\õ+UÇ®ó›Š"¸m³eÿBlѹ EÚYÃHëës$Å ï—X À†Y4  žÉŸ~n°7Òa:€s¼j/ @›ôûßÿ¡–(,*Da.‡ÂÂBæ�Í ªº•ªPUU…í·ßæßÞ?*íÛOw;iqýµgàüóÏTÒ©§]‹MÁÉ'í‡{ÿ ©ÜÆŽ}òk‚¸#Ž=Âsžt¸áº3qÞygÔ#$ø¿KOÀe—�7æðþûâOz �>þ¤@êÔy¿<å`l¿ÃÖèоÚ·ßql±pá"Ì›¿Ÿ|<÷Þ÷W¬[WA#@'Œ£Õ?’.e°Bv‹ã:³]£WIºæ¹_uéÿÛH–^O_Fóù³ß’ômÔÄŸ± „ˆ#X”¡²®/�¢Y­r¯Ì92Z¾aHÊ÷Ëó}[Ÿ­8ÃTƽÐHÈ6i]ëó“kÞ><Ñl"lœÇÚYcÍ×aóÕh X o›<[µk‹ûã- ×*ÒDÞ«€»|Ö÷*÷ýP=]Ï?Za]¥W¤Èv÷üÄ_�/D r¯ÓÔŠtÌåÊEzÈ5òyÑUE“QD;!‡™2Š(`N Y׳ˆ§ÿâu!ðR~*íO«·q_:©?MÃÔ@ð¦Hu ßs© ùŽ~Ÿ)é´ õ}g¹ÂÆ(¥·jÝ—ôaõvå—'ã€ш«væ`€"5ȹÒ�@¤>XÓ»mkiV?ù$ŸÛu)@·>åÈæÄEO€Üç„ÜöE«, ~  @ü´p€3d°q¬p9€{T‡ ÐfIrÈñxaìDl }{o�>xEEE¨Ãég\€ûxñ?RÔ|öÙç˜?!6ååe2dGuŒAÛQO>CçžósÜtÓõL‰ è¥q÷a·Ý†€aÆŒoðò˯aԨј8éüø )àtÛö̸)nTàŒ¾j7¨}µ‘µfôyµ�1Kµ¡¶ñÕ¨é ¦ýyò9üu#Çò¥}ÓÊý„)xaï싎3ëkº!lIÁŒê�¶øKÍ ¶_C7 ¼õ@@S©I[ꥻ”ìã0E²]·9÷b‰ ɇ(rW^㨣$L�:ÝÀâU4ˆ''çFÖº>ÜòëšÖ+¼õYŽÁVy«cñ4Dr v¯D³Ö¶Ê½±èĨ¢zw9RÃ"Ê£¼×`”tèžfþ Ä•kQñå;X?o Ö`eÜ&÷çÊ}Z?‡\Ì]ƒùeùS„Á*�g àÞpT (ßûÆ}н� 4S¡øµ6>¿ùÌ•®bÄUÿ(¡Œ#DÂÊ®½P8i,ó€þ,�K~¤$âu[r ­úiNU.–�,¬|þç$#å‹24- îâqœ‡!)b¹ï‘åý�A”`åD�nsÞ÷åK§`´‰âJíeŒþ®®l²�À�I�òû\«Ë8é&¤�T«ÛæL…Îç`ù,uàQéãq¢Uê�«ï¬sï•7Ë ÏÖ¥(mRœ<|ž€Ý3fMu.÷ÒüãEŽ0Eh ˜¥]·Fy�` rá)¦Q½jVM{Õ+6¦?ÐWùîÅ·UíÚò#>Öp¾r_›¿bÀº©Îd¬ÐÞZ*¬êõ@ò—(zR(YYäñ“m´^ˆ²ˆ\· ²0ÄKÇ)¿œKÒº¹Ê¤g�>$uùù„$ˆU¤�3žó>&ýGŸW®‡�›\1C¼•$MªšÓûò ‘DÓrUi¤>;žŒ>õ�*«³¯l³* /#è8Qj „òß'.agÉíè°å¾×Ï º  Ý÷Ó>‹joK ç\ÄSHzïg zoU‚mKE†�5€ßóǦ"|„,ªI|~V‡™1  ÈŸ=Ü ?Òa€_ø,Ô^@@ €þç ¶ï�×ÿù7µÿ¥¿»7Ýü86†¯¾| ]ºtB}bΜ¹èÑsµmÁ¼7ЪUK_ùR—õí·žo H°ËàÞ8ãŒã0|ø^(--À1oÞ\vÙ�xä±W°ƒ{ñ•�Ü(_< túœä5 îC¥ãRA9f†›¼’•§òÞówâ�`èrÐO•cT�O.—)\é½de¨˜žËþB‚˜JrãfÍ[;Ü)VÜoˆ»6y®rX—Pš­&Á¦âÞ ºnbXË‚{žÕö~²Ã£>“¾âô)iéWÎ),I½¦<0Ò¨ÁX=ñ?Œ%ñS]fhÃs—ä.RBÂéôX°$à­•R6 vlj׊I¶SÒGÞç^ž·Kæ›5'›Û�„ÂÖÝФÏOQPÚ,<½4 ÖÏÿ«¿|ù kÐX°ÅÑ?«·irgMß²ùžû ¼OÅŠ¼WJ 2—i?°Ôo ’{U�?öŽk26B‘;DùCç/ =žÊ)¡ýW` c¢D JÓ£ªt¡Ö«ô§ÄrÄ+NŽ�<3¨©æi©[õY”?ôZ•× ¼çä£[ªô¾N´oHßR)à¤È~.Üy\9͉ãlãÄK•þ�Sú˜”I69¯!÷’^�«WÕu1 }B¸Ï±.!æ[|Ä!eפ�¡u(߃Ã%»÷-D».M‘ÍIßIçí¢â�tqyË,>? @ütp €C�3œàïa^ Ðÿ $3úNì»ïŠ„é×øFU@}ø  �>ñðÃObæÌ9øoPQ±wÝó7µmÚçc°å–ÝQ‡³Îº÷ýùl*¶Ôï¼3¦� AÇMqÒ‰‡aøð=±õÖ¨*(ŽãÚzûÕ97H}oÖÐÈ1<�‰1 þ t0G­êu uLmF-Ê pxri"HÒ«èÏ0ü�xž%â^=4àdY5…GÄ@,œZÍnt€^¯Õ”U¬™/Wl‘�0÷˜hUU*YŸÍF‹j´|¬z÷Ž9ã!$°à"©\¤íh�B£Eä…ø‰‰º'°£–l¾<¨§êPû¼A]âå(Š:ˆ«Ý  ZX9Žç¸ƒ÷‚�—÷ÈNZ~šÙ�€FBAY‹Zâ§°U—ðÔÒH°ùj¬ùfÖΜç˨Ú6+U¹{ˇm‹ì:5՜ϫÄ#dܰ*¥¨Vɉ²“Í?T¨Õ4fR2§¤OM*ã ÷ê¢Þ7†Œ€qÕŽ J`¤>Ùø�bN�²’y’¨ž¼Ä;O§MUp¢ò )h‰ïŽE±JA¶XàílHýXÏB¯RFÊKRîr‚®b…ÍÃJ™Kû',›TxÚŽ.ÊPåWÛ<© ÕqµšO-6r�°1F~/ßIý(Õ“*&•þ%×N')‹�Îm:dÑ£_ ‹s¢ÌñÂÂÿÙïMT$ªŸš0Ô3ñSà¿�ÃÆ±Àµn°!Ô`@@ €þç  =~¶Æ�¥þ:ÿüËqÇ]ÏÂOÝ�}÷Ýu¸âŠ›píõ£¾1áÕ°Ë.;¡¿ÿýpáÅ÷`SqÔ‘CñÈ#÷40Äñ³ÝàW¿:{ïµ;r¹,Ä×hsW Xš/ ޏßkH§Ý0Q©aᦿpSe¸Ñ¶&Lb½/O ט\ÙÀQ‘xüPôg—ôð¤µá�>¦‚¡J Z�€«¢²oÎPðÑ’‘¦2ß)—e§Ti÷p~«VsXå=_•Îê�Ä&u‡{E€�u@GΡêÂñ¼q’$í%X”/�.ƒ^õ¢Pª'VW|UzòøeÆÖ¼ßDZT§Ï–\ú» ‰Y7½[õ.�^@ê'š¿¾YnÂÂãÍŠª}Lcùüd Q¶åN(í<0Qxbù�__�Š/ÞÆ†…3ÐX°–Æ[Þ[¹O«±ˆ ñk!-–‹BvPA†?0OÚ7êƒC‚ª’òËOø‰—O×�¡Þfµs1ä•)HÂYÎÅK¥Û„Œ�B¨ªtƒY� éßôܬž%i{ð”„rî�§ÉP™Ë‰]êÍ�¹/%÷Ès‰0ý\aÔ³ŠK*—Eè=°M[”8�æ–ÒmJ¤Ñcè× ‰ÏÏú0ãÔ3ñà[ p1€ù¡ Þzãì¸ã ÔaêÔé¸Íaðáî;/À/yêðècOãÄ“®D}ã±G®Á‘GŠºóÙ¿>�£Ž¾›Š ~{ ®½æ’F"€8èô¯ãœ„ƒ޲²RÔaUE† 9_|¹èGFùAƒ<?Œ–]Ü£EÈ ñ”t<�‰á ?ÃÓ ‘÷_ Ê3óˆ%¹H¬'~@º>¤n+óQnì¬=2_¯:ÒĶ:Ó¦ø•Ê}»z¼e OKŽ·"!â0±Ô3ñÓ1Qüƒt˜àB£Â¼ðß#äMùã‘G^¬YÚ¿ç´ÓŽƒÓ§­I�þ}Ñ¡]Ô7fÏþV}îСþl³ÍVø¡`ÊÔy¸ëîûÕ¶=ºbóG\Xå¥BÀÈŸ$H/9©G$#¤GòÞJ€œ‘?tª@ÿZ‹y53ýçHRÝÅà&ø†˜3g_@àäý'iîÔ¾q “ô- ÏiŒ¤c„…6µ¶mKVWŽìûPÕ°.ÄeÙÉ€&¶¥_­:¡ø¾)7eߘ7€•´Rn˜‚ƒ¦©QûhOŒ¤,:˜ÂßW~©#YѫҼɫöµPD  Kû¥"¤Üò�“[+¯ Ù³”ƒBæ�ô-k‰!¸îë.!§‰&!ƒ\o+¥�Ü6ËL_Õ®èÁ¯®ÎNYyEc‘?™â&h¾Í~h¹ý¡�üùB”YýÑf×ãPÚu›ÆJËg¢uñ°Ü?—?Sô÷EÇ£Òda ÷‡Ì%nºH IýiÝtq¢À�¾/$¹ßd|cD’ [ Ÿ!„°dÞ‘WÝtAAò¿®ØÌ“ÄÊ.ÎùMiŒä³"·\ôÙAv±¢’’Zgž‚j gs¯(zžŠøv6¢ËÜ)ûjò§î},ã¸ÌÇn{èºvë yO¼� o[=¯ò>á’?dü—úp!ó‚•ú3F“&®—Ÿ�‡L ¤¯QÊ­Ú79¤”Ó�»lœ(†£ïîQ Èg@='hÕd†3ºœ0�k•ì9“²SÉIÿ&õ«~+uÕþgê½æ­ °ÃÍЭOó„ü±˜ŸTTû_¾‹�ûä³@ޱ&1Ô^‚lõLüÿëÿï|‘’ü©L|~zx,ÌKA@)påå'ã’KÎUÛö?àX¼<þc0´h^„/¿˜€¦M…ôyè¡Q8õ´kQŸØ²{+Lš4%%%¨Ãˆgàɧ_GZì»Ï¶óü£4¦ˆc÷Ýúcüø§P‡_�ƒ=w³WyW'+�7ê{×ü>–Õ×4åUqðpò=ñê�죖¦Ã�T)ÉqüÊÀÑïXu> V6r&¶�§Âƒb9u “�0wÛ‚)KGšª¸-R n’›T=´Ã£ùÞÍ�: «¯=iôØJv8†Óz5±,avW^“:$ÆÌºO°¼ü¾toz›€[†¢ûVüK`‡Uµ²�{]qß�eFèR¾hÌÊc –U ȬY×ÓX£a2Y”õؾ–P0Q&<•lF¨Y»ÓßDå’Yhpd f·P½n«êß®o·b»'…e韌;Ž&ã<Vî%"¢ãR«Éhíq¢Ç9Œ×È?æ€�'L$ªXç{@©'Y¹•HùQ/–:U]»šo‰’6Eùɼ(‡`J¿A?‡Zxa”2‹¦~ó¨5à*cÕüÈæ®€‚o›ÚOühÚ\Q|q¥�øà8õœìO·¹j QþÏ-²ˆˆ(߸JX�lg©U}3 ¤ox}&uyUß"*()sÒê(,ŽÐ{ë4oUž¥È}¥a=þ><-\%€EÖ†™+`3 $Ešh’ü÷¾—ÿµ¨€ü_•òý6Ô~@À&Ã8Àͺ žp€™¡ú ¤G«–%˜6õhÖ¬)ê0~üìwÀY8øóÿaäÈ_ 6Tbèî‡aÒGõ;ßÿ§ÿÃqÇÉy&Nü»î65y‹4ûâ=ØkÏ¡?ˆ§Ý»ûîûqîy·mæÐÈ1êos7­ 7VæøþOÑÅ*(A¡ƒ=rn¿Õ÷x‘ë—òh÷´Ï‹€Ö36W)½ #$í ­ ÔѦæë«³…/Îͪ8ÔX¥ðÊÇíJ^¬Þõï¶yáZOð1Ùæ!õoU™69¯¿†'Yýî\»X÷éòÙgÌîIñ£¼0X E!HëA§<ä °{BùAQk‚*³ò8³,ÿ ‹üÊl¼f^fmU?9{ý"×¢#šõß™’¦á‰d3Äú_bÕç¯ÁÖT¡!`�Y‘kÝmVqé–�1ÑÊÞóú´®7Ž!¦ýœDW�X¹ɘdÕ=˜:]¤|vI ø«÷|Fªß0«˜GŒN÷'u¥Rþ1¢ Ò×III�eÕ'û�9˜¦àä;ú­lj›C¤B„JB,8‡—ú‡Mãã$‡•º¶ŸÏü¾sô|ÖçEÈ I™ÇëCêÊ{m ÒÄ�yd‘yR*5¿YÈœ,n9òœçóTeôN’ú�ïãZºÏϑŖýŠÑ¶c92!n¬w»ßû'NÔ>+C`;àlß@ç/…h\T&Ê…)ÎÿÙA™ p°uâó³+Òá3çøg¨º€€@hìÄz!Zjjj°ÛÐCñÁįÁ0p@'¼ñÆß”:ç‹/¾Âé§_„7ßž¶Ij˜®Ý:â¡¿¼€«€&N‹²²ÒMV]{Íi8ÿ¼3Å µ �w쉉~NHq<óôÍ8ø á¨Ã 'œ�ÇF½ºÙ+€Xp�+=¸©¯'dÁmcȪKf¬,P�ŒÔF0äK’‡Ýg4íIÁÃH/Kcù|k²B;Žå¨Î4mõYió}¢(WŠÿ"€®UI–^í÷îQ*9ÆhÈW\™)Ûäþ…¬,P�ÎYXQºúˆ=qÞOŠhó{Qå’ò+EŽÌ¡jaUÁ¨*T†/áA†—[Ï¿”X'Ä�Ç ˆ··”Bg¨öõUp°kã×/ý‚�_œØã*0HR§Uó(S\3¿$Úÿ¹ï–¾.ýìÅI—s¯ßZˆJØïפçȺ÷¢øaD“êž>áS_{UË¢´“4¯ºeÑ¥WñùQàu¥·!ÕgÙ9€%òaÆ ø�(zÚ¢ç'JðÃÆZS 1´ «ÿÃh ৤\$¸À¥óR@@ €´I'tÞ}w ²Ù¬è*Ÿ�£Ž¹ÇÅ�ÀUW^¤¶­[·7Ýt®½þa¯âèÔSÇa‡î�­¶ú >üðcì<äX÷ýñœx‚Nú׿ŽÁåW܆/¾\mZ—âÁnÀ>ûü DZ¤q¯gèÓ�ÿ†òò2<÷ÜXÜ÷§'äz 3¸êŠÓð›ßœ!K…*+ѳçnX°hõæM�0rŒÈ'ì’@�JSbxà?Q«t#uc]š‚Cú,8ü+¸DáB9:Õ¯3yˆ9ÁåŒñ]… %Ä$] O” `ÒâîÙ÷ž`ÖÕôB Ø¢Ì7ÕÛ·}¸f§-¦k‚�€˜êůö‰ˆÑ5[i 9O�&õÂÓ¸5š:jºUø$ðëÞòê…Ô ¡a‰‘!Á6YõÌ‚½Tå�¼F/¬/m³mó‚‚òöp @*Ýcyƒ*¸ÏhTº'Áo¦~ÑÐã'n ódò�Ñ€®ÿ8–)Z¥œ\ ©@þô¨2ƃ¨‚( £¾#JH )“ÌíTáÁ[‹øµ‘Uõ .2OˆbD>Zøû“¼§)ßôî”ÚgÏþº×ûº Q)§ÌRg:M¯ž+¹¹î½"‘Ôõ¹DKœô»XÚÐhoCÚ—ôs'c,U4ÉýkŒ´«R¡ó”s~"L ÕQQY Ió z,CIy‰‡°!J^õ<÷§«"Z`!€Ê0c|�„O€!ö°cBö4Ç� +"è}/x@Mhý€9rÎp€¦Ø8jÜ•Ä]W†ê P €¼Pz¼8ænì½÷îrüõë1h»á˜ñÕbO?yã¿Î»?\,_¾3gÎþ×¾ß`á‚ÅØ¢]thßíÚµE‡íP\\,O?+V¢ÍCptíÒ¯½ú$:uÒ^âk×®Ã[o½‡3¾ÁÊ•«°å–ÝЧo/ôܲ;JKe1Ð=÷<€#Ž8­[·¬whéâw¿óBªªªÆ§ŸNÁܹó0çÛù˜5sÖo¨DûvmÑ©S{ì³Ïîhß¾�Úÿò+nÄu×?Áæ«¢Á,º„Y�xz+Á{e¼Ÿ"dHˆ®<å Wù£W~ƒ{&ð)=|ÁB€QÕ‹Ô£†Ü¡„—eÄ�H`‹§!r¯.ɛͽòí�Ì´Çšš¸R n^øvÕî�»7YêúNH@‰¥ý‘ó«ÕºI:#W%e¢Þ7,… å&5Q§@ÚH¯²&A},Ë@ÔÛ AŠÔ=Ú£:¢´�Û'e»"¥¬4ý‹à+ˆwö v홵ëû‹Ù¦mѤï®È5kžR~ °qëfŠÕ_Ð`éÞPÍ-jó“Õ…Eí(  ö+êûÎ!F  TƒPž$,e™¥þ?¢›e àį[‰ d®R¿áó�Ìk–Šwà¤Q³2^$ç’à»ø“È®ƒçšFã>@)T?FÍÍdœ$ªõž�½õi'Mn� ¿l—þDçf6j§ñ�"©îÒ¥}󧤥ßqBHF0¿Dö\ÆU?wÑ ñÚs0Ò'!ÅÒJjNt‚/œqÕÂWðI»+Ô™ýe—íÔGI—]ü r@Ÿ­KѬU9¢ˆûejÏë|É6o¿‚ãó³:ÌXßéÓÀ¾ é3, áó#$„Æ%dÐKV„^ð#Ãp·è…tà7¦‡ª P €ê™:`ÿð·¿>¤SÃÝÿ(N?óƒ»î¼'Ÿ<ÿ)–-[ŽAƒöü8¶Øù_×v¿"�Òˆ2{ìiœxòU˜4ñéZµQ}@=·lƒ©ŸOÀЧŸ~ÇŒ¸›;â^=G‹�1du3U²�À–k¸«É mL©U¹àùÖÙ6¸¨¯.\£Bl¹)þ‡:‡õ­âåþ,òK7˜Áƒ�< ó»¡ï¡Í·�¶5¦¢º07væÑÜ5‹,à‡5¨Š;”�®Ú¯Ëh[ž«–Pµ9Oë"Ò¾:µ‹:(IýãV³6�Ö+Þ%0§O(àAX¢†"O§(~:��Ü3Ò7T™M‘@ Iq%íMÔzeRþ: x‘_š­Y½$Z_Ý „âö½QÞk2Eeáiå{Då’™¨˜ö&jÖ­DCÀ¬ÉµìüeQy¯�‘ÉdÀ!  ö+iÂ=~RŒv�ŸÕìÙ!f¤ñ’ïô¾q’ZgYHGð=�>½Âç?� µR‹<€7ŒI¡/C•lÆèà÷ ±›_8ÀØPu� P½@‚?x öG‚ZeÍOúï…ÅKÖ‡Çì‰ .8}úôBZ|þùtŒzâo¸÷Þg°zM4¸èúë‹CÙ_ùú0,Y² —]~#îàEÀ˜Ñw`ß}÷¬'HRº?rŽ:êPì´ÓvÈ�¸Ãüù pÿý�ãÖÛźu5lÎ  ‘cÔ¸*À!.O>{«¼ ¢(ª{¯M—ý†Ä^/I[B¼€Øq4™åñØXŠO|„A¼Œ<õ—:0ó_pÓâÅ“{é<5[ôÍªÖ¹×æ­¨Œ°Ѳ|Ÿf�VíÕéd"¸ §Yj kÁÃab€®•e:§¿€òjåyržŽ»³TpO(ê½$ûÓzRL‚[ÒÞ•IwH»6ï·€êK�)'€8LTõuvÝꜩŽ;¡`2Y”uߥݶ…‰B\¡1Q³f9*¦¿‰Ê¥³Êç'Δ7û´¤åÖÝ3QaSPpHî ¦RÐ=^§’ß+î}Áç’öË{ó1"ØCv¤N=ÉÏoiÊ37H/»©±K«ŸŒ¼“šÑ)ðh½hå'ŒØœàK¿ª¿“F”kgœ_,±qÏ!æ™*„F\¥æÒv„O³þ>!*isÚ/HºX—øÒ=�ÑkÒ}K·Ÿö²1S…ðÃ[•Ö›>Vú€Vÿ°Txræ%©Õs^ºÀU;mÑ)‹n½›"W”ã>¼còmòÙ“*n%€E!íT@#§vÛBúô µ’2 .dÐ[áž ØLÐ ÀåIÊ·l«\ àU¡ú Ç'2B„Ü}÷Ãøtò·øopøa»`Ÿ½592jÔs˜ðúhp5Ð�ìŒm @¿§bëÙ]»vAQQamJ¸… aÞü…˜7wÆŽ}ý.þl?¨;vÛm Ð÷ß„Smê·‚‚ –.]Ž9sæbôèqxàÁç©tÂñûbðÎÛ*V¯Æyç߀ã·ç�^=»£O<9¯M˜ mÛ #Ž=]ºtDÛ¶­Ñºu«Úÿ¥¥%µ$Ú‚‹0oÞ¼óÎDFüü(SÀ‘Õ�±2µ—¯]"…©2”2È >p²G öWŠ!§x ÃZµš™GÆyª/Ô'ûK�°ôo$H(Ç÷A ¨ù¶…­ÁlHgúoK ¦Wï´Å_j¶mý�éà'=,X•ìG;T~YÅïQ»iá¸ð'�ä³'ý›l“ÛŠž›Õ…�Ó6t ±‰ÂÂjL..5$—f3ц)kÖt61š¢�).G“Þ» h‹žáÉ¥�WWbÍWïaíœÉ2ì×7 ¿(i³uQ6Û¬ (ü)à\u‚¾ËH 8¾9��¢‘›æTŽ¢Ò²ùÆ’êJMgdÎ!¯ú;mx/s¢T†œÏãkݱÁ;TÝxÈo¢®µêDIë�Á_'`¤‡î3ÂÃ^Ý·Ü”¬u`JLN ’ùQæf#ÿ¤Or?(¸$ S‡’zñ’=¼M9Ô3‡Oµ&íÏœh´ZJRÉQRLßÁrïë²»u›ø†É±ÝûŠ>&û©r—•gÐk`”7+&JiWñ£aIŸ‰ÁÕÆëúõaÆ h$â§€3’@pëP#ÿ–¸À, ÕðDÀÉ®Ð*Ýš.ü9‰«.Õ @mv•LqQV®ªDýCˆ§š¼Ååe9�ºéÇEé?ö%ÐBƒ0ò3ò¨gäE{×�ó0RÄ ðÑX°ßGú°czsìëÕ¬ò=[Ūƒ$Ðæ"àÁ7 [áÊÓƒ�×_MåÆÍšùjÕQ&o›¦² iY4á_j 'ã¥+| ÞÆ.Qa¼fær­„X”&)»S‚¸”RõÉ|9 ‰)â"Ä�îƒFŠä vi 7EQIIù‰P�‘A\ù#ÐPzXÄk³ví×Ñš ý P€@®E4é³+²MBü¡Þa-Ö};«g¼‹¸z6-*jÝ{IQIçþø°²×¿@+Âí/#�y@îíX«<ô½¢ƒà*å›qýyø¼¨ÁRr4Fð¹Iü8é"pU :=]’‹)€äx¢ÌÕ¯z!—y=ðíˆ_�‡éÃÉxí‡ÆÆžú-åüoøuqbĪãó%:„€ä Gä••_+ÂT]X°zåªd£}â’}#éOÒÏØ³áŸ8(÷©nC¨òÛF×ê»V—G~Ãû˜•ïx}øSáä zmU‚mÊEròœÌËÆýõ=S`!€Ua h$â§Gâáq€âP#õŠõL U @lÐ #Çè�¼zÍ…ù.dмóàâ+Q9éãOà ö�ŸÒå÷cÜàŽ÷Z¸Ç‘•@£ ÜÓº å׊—dy惡Ñ�5�4K×ç^š}X´`ÝpdRøy¬�»”?[9¬Ë8”f«yZ!|’àm,eedóñü1pW»+e #]_ ›"�x±¦aD #"u?p{O¡ÈS ÉNn@Rù“¨À6àQ¥‡©Y�­Z½*ÚPÓ cPÒñ'(ï¹3¢\ˆGÔª–ÍŪ鯣fõ2Ô/d\È6o?­¸i¿þ‘Éä@�N”@àêAn²o-ã[$Ьӈ¹ª ž•)?øüÀÔôÞ×�?"°ò¢Õµ26FN`Ûõ\%-@ˆÃÓŽ’y@BøS`õJà+/ïø6$峆wÉ|)ÛÕy ”?�æÙ€Ì;Þ÷|ÌçJ4•êÌ……«´‰Óø J{Éç�+ÅaüéÑzìe„¸ü>P˜ŽZ‘ò³|ŽBl.�~A-µRŒ¨£Ϲ)@ü�ŒÕ*9ç¢êkùÆû>¿7å-Gã#s4T¼Eòý#*fîÙãÉÅ Œx+ýDýÆ *9UN²§/Ãν}©@Ä÷‰nãûä•7ï}~fÒŒ•°ÌÄOÀ;¼À®‘sû|‚ýÏ4R8–ÀÛü€ (†Ox?€)| ‰JPBÂùNñ’&Ü·‡$…h=zQgHÒ@®-d“Ü'!@tH'eä§µò–{hâG^9Ô~Bè#T’E ‰­±pÄì:ô?Ò ÀÀg@zÃPåK£“UîxêõÙ“§Þjr×[ 3™»5=_n¼aógþÇë)@ Öa€h‚‡Ø�ûþô�€Œóo|vÛxÒGJêf«>EÊúY‰ù~�D$í< æ¥Û¡cA’ua"|E²Ñ1ðçëë,A 8î4UΧŸ²3�Ë `± ¨®Þ²@•z‡ÓÀÁÜÁ‡0õÈ? oÌ`9à¬9Q]½ý`­¾õr#}x© =ÎÊ;+í‰ìgc¼|/B…,¤ÜY¨\ ¿¿N%øÉ�WîpÒI½Êæà\_@¨Œ¤ÌŽ Ç| ¥à"÷FçN}'ÀÂmz‰ƒ6û×ch°‚+Q¦.ã>@HYA@·SûÀÉß„ãà¿Kâ~SE·ðøÀ„DX,.…TÙzáÃbeàhb+ïˆPÌsI”ºê>„ Û.*!ˆòI¦ahU®µÀŽË{±j]?²’%ñ¥ó-#~IDbÐòŠŸñ4[%œòçZŸð‚�s¸À·S(–/ðQ/E1|×ûüÜ“B—�� D%$\@*±F ¬œ2»f+®´ 7%|Ùã]q*·¨ÌþÕªYR?FøÐÄ?O^)cc¶²––/AG½'¸_�)½Ãg ÀÑTú)á ?=>ò+R Ýs¹Wý6€ùŽ„ç� ¾|ÛÍ(†#¾<ÜŸ§y)!!@‰JH¸P [ßñù0�£I8²84RÂd*Q«D›@—€‹¯Èåµè£p´Œ3iV‰±H/Ü1úWçIJb¢Í0{t÷C5k?ñ¢qÈîÛRùÖá[ÍLû2€«ÚgÚW¬úDë~¨ÍÈ^Þ…ëi¤Oy¸ÓHELÉ#q¡æïú½$ûbæïE“[ÚŒÝzŸ-õ‘Úì>T5©ƒã L{ûä­Rny`Mã¡ÒÌ©U¦ãVc`+=èßq-ê›öHW(:�œzø[˜;´ËS¯?лúªÕYÖ·ˈ‰�ß4·qüWJR•r3ÚçC«f´}¼V½0� BÃ|Œ¡àÄPø™Œì# r—ÃKƒ~‹´Q»�…=ÿ½ æ¯�ÐqŽ*abþ@‘­šD£Äš&~tÉÐÐÿÇú¸‘öÇÔ1Qb@Ç€{Óñ~Äý†À AV•)ËxiSÞ.N*ZµØ…z«çé®ö†ä÷¿'i+™o�S˜Þî! Œ¬¶Ø¶g=½uHÒËïK<|˜Â'ˆb ÀáTê)á ‘?/ðÉTîí¼Ã>¯º7…"á9¢à—ü€^tGÀ‡|À©¾„„D%(!á‚"€n¾M'uÄÌ9®þÉ=1¡¾Ì”5pN%€tÒ ´ -ñÁ÷iÉñ bä 1ù.®ü8q Vy«¿U»B? ÐЫÎy»ã¦Ìbî­·Cü’8\Ä÷ÂúPîLùÎ/*=xòÓÊ× ò�ÊwZ×oøTgçàaRÎÅt¡J\p;ª|)÷ã4Æy¼° I°r‚L/#GÁ�­Õ{ú,„àÓ%­´Ï�ÄF·Ev/‹P‘¦6Kfæ¡lzîÆ¡†e@¹.}%*#›°¢à­_fž¼ÓO|oÁógYP.=Ó³æ²ùJuíN,'Dô¦¹ GÙwFÆPÝ÷)$ùK=ã¸J.®þ‰yü¨ùE)"~\„!ž?Š”Ðs¯ƒ.ÿöìœM¹ï(Y*¢ü9™”Bs„Ä eE»“îú•(lÉ\+ (Ï5ípüå¿MdÌ$eß „m0²]ODÝæâ‚‹RøBîE†…‹)<‰HUTay]!�¤ýÒ,é‹>Ô¡ŠWƒòQƒQEvì¾µ•šÁÎ+z182k! ¤ŽŽ3'òôqláHÀÁ”`K8CÄO À¿ðÞ¤ú9¯Õ@ð;I ”PÀ›ü!€­(†¿ócÄ)| ‰JPBÂJ©„Fd¥¯*ã«eI‰é¾á váÅIH%¯¸)s¬ÔYÔ‚+=š[“ä5ûïC.&$ƒ èVŽ%,sÆ•0jIÞð4|µ²¾ÆL«\½ã韰ϜúiãPE8 �¯¯ßÞ¼iËߺáÊ h�4�Õê/â“cd›$<]$IÆÊá h¿…�a„÷zˆ‘~©4+e'ýA÷C}gþÙȆÐã$$ U_—ã‰Ð2ás²Ò™>dg›{|‹–µµÛ1°ëåÈz°0ô1Lí»�¹©åòù™¬Œny¢Ö·ã kt¦tù@Gé<á ÉV>dk¤€{Ðh2†›ÿsòBŽÑs)G’ÿd!BÜ„jŒÀ2Œ)B!‹´2W¶±6 ñ÷¢ƒîS ¥àBpÅ ÷F C‰ ÄJ®i.W©}¤Ó‘¶92}…}„{Åù¹6¶xFNÕŠi­ °mÌ—Oy1 ¹"Í¥ek5ã(祋�‚Ì“rT8?‚¨¬$œaŸ}¶¿ï¸¼Ž5�•¸O¤¨}ô3åïå•ûþä¾´Î .ýO$á �?/ðŸ\š¢qAàA¯ún E8öø€W£ðKîL¡KHHP"€.t •Læ%àtÍv!ƒÙ¢ÿSïxÍxžH1ÊH8}MZª‹$"Üb%{È6Vº ÑZûÜóEÎ�Õ¶ç>8'Y¥ìËø8G}$1É0¶�—Š‘ä“ßÎ순}æÔHåÎo·'¯B¸ÌLtv þ—æ�›¿†,‹«�Œ‘hrï´Ÿ‰ÊLÂ.m’xÒÄb¸�ûMÖœð{ÂɧH©Cš64&ìr@„¸"ä–V%èÏè ôž¬ÌOÓÌ/Æ2ÀØ ½[¯Fß%/„ÉʸÑ:5†©‡îBóä�åòùigƒ#?ì¾b‡µ•>,/¸І‰#!9êoN¾äa²[­!¹JIŸ¶êðLÊËwñÒgr/|ìqŽUýRœ£Š™¸Ÿì eáüx…ЗHň0V6–Ï©ÅU@ÑyX<Д²EÅ3êÍ”² á4á%%9¹×ñ $¼o¤ü[ ®k‰3æ÷ĔӪ” ørÏ9_d!Ç�ò¨ð{˜÷ƒ°£#,»î¢ ¶ì@¥Z‰üÖË©’G=Ö¿:}œ/8áÉŸvúH ~*^-òëIõsAª�þ=€ßIå# Xåsœ¿Pð;Àoø“4/%$$(@ +ʈ˜ñó'NŒóyi8_†þXIÆ“ò\Ê0˜2 ²=Nüè$—�>TùO6iÅ‹€û¼Èûâ^?<±áH{Ùû|û…Dã1`¤TÄ@@Òf¹VŸ*}ïØŽòw޾ÓÌuv¢\-{¼õÂÕÖ~ÉÚ‡I$Y¢ÌŠz�õ Åb¥šP$K”PFΣ×b `Ý�À³ƒrx¥®A™*€�?*M® Û`??~óY €„<´ó?*MÏl4¹Æ2 «ö¢ÿסgÃ.\(È›s8õè=˜=ð#yäK�Zí¡úê«Êå��œ-H0¢ü e ¡÷BE (D´2¾Av Éb°ErmQƃ±ò›yN˲r…´€—U¥Ïb‹SØs'‹D…+÷)Û|?V‹"ä}T…/¹k ×õà %%áBu,ë�`ûq§”ÁD!Ný†2l¿|}=ò˜j+¢`s” â˜p •mJ8ƒäO¿/çôÚ� wxs*%¹âQðxBpÝÑðû²�'Sø” „„Aíø\~ë-·+Ò�$J dÂUXŽ'â+qO‡èPª�œ åaH".ºÚZ“ûÄŠR=é˜èrp¡ÿO\xß „¦æ¬ š$9ô1$dHHJ°¨{ŽÆ!N~Ác±�C'·•¯ìyöÈÄ;L»XR?®ÞÕ|͆Oçžd÷¦cÎ@a‚*Z6ˆ÷ž”䈀ñ:Ê�£KÙàÔ�QÛi¢Ú_Ò?¬ö;!%àÎÜ\ÙM?b§ç/5@Ë€òÐ: ^z=ʃkÏg£Ì<}?¦¿y«�eAɬ®Þ=UëÙx)Î*ÄH¾ë"Ÿƒ”‚Ò„áˆh©Ä.ó‹ãd� JhòI¾·rïj ˆ« •JJ¼�”$:ÿ[88â÷Bâ‹$\LmªÚÞ]•+ûôoiwè?ÈU/œðð[•7Ü‘~�Ìrÿòû@•$ê°¨—(‡Õ¹Üë*šŠ/ÀÑçég£6½`D¶Éã×ñ ûŽ?¢Bs%y2ð*¸T2ع·Ãkúa­'mè÷;â” �øüL¦ÿq$œAòg-€;\�¢±"p€78šB±"ñ_îmŠá+~Àƒ)t ‰JPB ,ÇEž3«GdoŸ¼ÕŒµç:ÇÊí©v®½läÃ�y���/ƒ­öâ|Bcìé…roí™q, fÊ£›©õïºÜ𬄳 ñÚ0~d1¢T‘œzÞ`d‰«„´Ws‰š%8A>'²ñ$$A8x²Ÿ) HùK£Þ‡žh¢Ì͉²•è ©"ˆû¼¨v;Ç,üDEÊËdjpB�Œ¡žtÉóDý*¢¤…�PÄcЩ~Dé;Ö'äoö¬t[‰gẢ‘‹ò7‰�"%öüwTœ I%=·ŠY•\胢Ì"ó"U}…óãâårÃÙÏér°[wõ`ý–AdYæ�¤ó©:ô9òoº¹ÿwÀ±äó“p†ÉŸK|‚w[ŠÆŠÂã^ŸÌûWvø€†bxÌ?_HóRBB"€”�°’KÀ'>_Â9¨Dº$­d_̇¯<�Ö›70¤�$ØêZþJ“eQCgiOÖéU«<d!`æÎ‹û(é)“‡îåϧ¹­ äÏË›\SþúÁwØÉæµ(W²Ç;—}ªyæ{`Œa©3è„§xæÓ!Áˆp5r`v-qe}.J ê.¼¨á9=_ú‡†!I·H7#; ÉmîLeo“pç ¬iÊ9ªeg1…†¾™è\!ñ‘8ø}ᘭ”¡ìW@É•äPÞ~»@â,ªú¡êOÇ~w0ŸA¾-T´ä¹xüâ�€¨¥%&šüàåB±þQÜÿGJáY=G:�8ïDQÉ1L]æãq¤/O#çI D‘ê·)�%Q:Ùðâ¡�òõ[¸W«7”°uתµ*øâ‰H¹_õЍ�¼Ž8 •þ—‘p†ÉŸ‹Ü`CŠÆŠÄa×x:…â‚Æ Ïaþ"€2ºã”Ï{þQò‹JHHP"€¤<€Š$h90^Ê�–¦ M­u’%®”‘ä_ìo-’x�d-¡f‚•Î$ïC�òJ6N—à2Aû]Á’xÚð\Hiš¨“„‰ƒJ‚Å T‚D^ÔãF+eLù_Zºoì]¦Ñ¹àê¥[×®ýxûÊUOÂå�$�œŽ§#}Cb KÀq5P|õµÀo㾜 ÷ûñmQ׃w¦„Ò&õ†µ“Ÿúüs�’¦åfÌf涇~,²ž ìzjk·á\ƒk7qê±{1óôüc^z˜ÌÎô¬»òT¹ºz–ÕÁU¾x/¼¸ÍéqŒ?þOÈ;í"@œ(øñPÞuú»QqR¿UF1,s†À÷|,�ÏIrLlæ%ÐäEæU9×@ˆ c‘»F>($Æ �.ªjÔó¥ ½�º*NãŸEÊÍ*…W0ýr5 S¿5lÌtln á"¼¹'¢#ý!ª"Pʧ( ¦o.TkâG©m„”åÞHZ §ïUíó¿-'5Wù+ ÙÕÓg±sï ú‡zI\Ô!½-î¤î_cÆûü̦ÿ]$œògÀÝö¤h¬h<à:)2ïð« .Öý8€ßHå”� „ïtómà‰žÀ�÷RV©ï¯k¯so™xÍyJüp²ƒ$tä¶$QBO¶8’¼`d‘!ù#‡8Ä£ñ’C4~\ Ä:Ž•‡) §KÌÁЄ“c imw+7•/>ýÚ쉩·›Žë/DŒÖ¾Ú¼aÓ_ä›z§BP¸Ú¹«ï”@ÀGý%¸Y5'Ñ„”ꦠrU¶Uñ‘öÉQÁÊmhrÑÈ=‹Ð9Š¼Ý©4&2ÓvX.TF6-ø•úGqÖáfü§½ysËc*ƒ¡6²‚åUþ¬Þórج¬¶Ïß�ÉýE _ÎC}ÿ•"È9R“ðñEŒ‚úÝhO­¸ …’º¤'ßãd'>” B”?äc$YO¹/б3Fü(‚,•òÇ9,¦¼â^Já8J|ðØ\ÈU/Å|ýB :ĤÏE‚�c¥�Hì,™C•µÀ\kT»˜*JÏ $>zþ‰-¾!‹Prx"Rö9¥œV¡V¾?¬4­¬ï9PÈ–+¶í©ctm?¬µ¬Ü[DÙƒ ¤›«åÅççP2ÒN8‹äOÀ—¼:E#À×Ü ™BqÁà•> àJ€'ƒß ྺ„„D%$(!aùŽíŸËßyëí1âE¶QR(Z~Ä{Ðă(\¼¼ŒßÆ’qÅŽN†0ÕKÓÿX’L%øX²OÇÈÅ’M~³.}âU@'@µÑ$C}p"If<-µÇVøò•ìþþ=ùgÆæz+_zæ-öèÜMÈ øÍæõ}¦ñÆ-_DO©t='}àÙð²²w†ÇÂ@¯ð÷Ð} õ� Vˆúš¶Œ3…žáuÚº—p{-½ÿkq �ãGàT�ê,IŽÝh•\¨FUd¯:�Î ñyD ETuQ}SÈh¥ SÝŠâC«=œœã&¤”ALݪA˾ ¤ì©(gl¸0!êÀÄ1T3«$C½õ1Ü‹Ï1ÿ þ»$V/BF#´·ÂíúQñ…"qp�&õqlaŽZ¤ ¯Š/¥}–›·—±ñâ”Ê%¸"[#wøo_ñ :à€<ý�"á,@ŸpkŠDÿ9õ‰ [ü{oE1ìð«>›|~”� „…|ûÖ;ó·þÔ_¢oH=t…ªßOÊ›�‘:§Í@yG¡o�¼œ#9õ�’gÄc@'»d?÷7“}†¬ð%éIß6búO@˜l2r!ÂH;H’†* â%‡ ˆûÛðÄ /Ç=ode/�ýèäÆò·ŽÜjOµ®F¸²=Ô¾läã­Wo¼Ïo2ðýŠ´�$ìx¿ûK@†eðüß ¤˜(©Lœôéj4®Î’þµœâ¾?Ü\\@ç J­Id�yÀY,l¹Š¾í/EïE—ÆâL 3w Sß�ù#�b¹�•K¨¯½¶2„3�ÞÕa`ó.ÚÝÿ«ÒݹСÐûG‘>žÌdJTB˜ÐÒˆÔ˜�¹‰€•Ä$d0;'>þÆU'rŽ¿E#í'ãü¢¤��bŠ ‚{Þè8Z=?q%°'�˜ÈÊñq„#[¨v!„-ÿªL¤ÜŸ1z>Ö2hBC’çJÄEd^dÏ3Œ#Sè’ÅdÑ€Q¥àÂí,.¼ì®lS¯LU'_cýNr.º8Eû'ÊoÒUëÊØzéjõš?–«xŒŠïÓçO8�VØ'œäÏ[|6E"!„' þ:…á¼D/€_óÿjèŽ9àƒ© iBB"€RXûRÎE¸5«*ùË^x�«×¯`uîÊ ÙÏÅü?GÂÈ{JJ¶0–Êê$œCÐg¼%E"!‚¿ðÖ†ó/ô>?/C1Üç}~îN¡KHH€@JQHH8ÿ±7fœâÛ¸5ŽºFŽJíú‡›Þ@7„Se­xíùç”RÊb ÀJ ä<­Ô0TŽ”yãÉ&íy=––x‘ä?)¹¦Û’[!!$÷�”‚“¸)? ž‡S1%íPˆ*v€Àä\¥RY<˜â‡'á´ÿ�=43Pùûo³có¯Ó�ápÖLu.éÿ‹æM}%Óö\NÕ¤ $zc&ìh¿�'‚!1’¼ô7Ý / ¤VpK°yò*|>ArW¼¦ìmât¾"kO£Ô˜òò2©h2Ô·\�þm/†)Uð|К<Š©‡îBsâ0–¥žzÖ¼6«a¹Ñ¿aúÖm}¶Ox3ÇŸ¡1ìß°ÕÁÕÈ[ Ì} ó“Ç¡À@'�É÷…�òÝñà>(Ž”¿â$ üv­¬ä~`̨(¹O؇‰uùZ¶R·�—Á”øé'$="„daƒÜnwB‹—¤Tã²z�Z�+íô¤ñv£¥Ðô˜®Û%eWd.VçpòKæÂP)kLaU(‰gy¸ŸŸ•û$$SäzDNÜÐ^@¶¹\b´[+¼øl§‘¬¿¸Š-;†P*WºªNíe%†h Åçç€Nú¯HÂ9DþÜàŽ‰„x#€/¦0œ³XàÞ‰b8àý>™üçB¼÷Ã) ,€îzÀÔÂÿ÷†ùt­RûX^˜X‰˜&zû�¢Þo` 55–m´Þ¾?¬`ÈÀ0Ù.JM i"µÐÞ7•a¯±²gT#çÀÿ3f‰�2¡÷äo‚P1¥Jà©rz!Å ˆ2ŠxE02¨HH“mœs.|–²_PúþØÖò·�¾ËÌ´w£\5{º}ÅÈŸµ®[÷C‰j4YF’Ê\¤Î#+´IiU.‘¯ræIdNãHâS?×ðHâ)áˆâÎÉJw!€Î”šcÈš-À•°°•ôï|êwK·-ˆ¼1‹©G¾…¹ƒa¹`Ë=«¯F©¶gµ¡µ¾ä „Ûw/Z³“x¾˜ØùchüˆŒ“R N‘¢¢ŒÓÙv=^j{¶<œoøC히'>q±ããc€Vv=ÖjP�#mü/ûµ�Š"zd¬“y™«]ü¹ŠüQ÷FU,ñù…Ïudü5Ÿ‰(—@‰/ý^ƒ ÖŒꪈ…±zA\8ݱ»²�ÌÅÒöœxêÙX‰S]šWC‹®¥áH9^­24±&ÍpÄÛ‰¨¥åXú\†F3\²gõ¾>IzEÛ Bú¸èwQÿ=éKȩ̂ÿ~$œƒÐ7¼P¾§uý†Ou¶QɨˆJ†%,5±'yòV'�xÙéDSR†­îWÛñº`ÐAyþl+[6 òÀj \z=*ÃÐ .ï`æ©ïcú‰ïµ›Ë¤Pê 6| *ƒ»p&1|É•¨ ­Aˆ™cO/(�Š"^nâó6‘ïZŒwð „IG”EUÅ�¡$¹ŸQln’±^ýíœÓóñ Sñ Äü¢ª!¢ É/9…“[ÖZ8Ç ª¶ŒAî Ê1œø,O™øòñg–€ãyŠø s'Ìøœ¤‰7|¦ÀÖï9èoýœÅkŠûÅJ%æˆ/'Ø *U,øü Œ ÂZ¹¿¾�>²_@²ÍF|�žø™LÿÝH8GÉŸëRÙ§O~+…áœñùùI° Åðyïðh _BBB 6… !á‚Ã,€ÛüžB¨ðq.JüرÄg(Ïû15¾Ǫh·$‘€€T€d\¤<å <Ĩ™›‘’hªŒ‹‡ñ«¢uŒ4†¾-úoÿOÎÓ±Tû…»RJ#þ’â‰EI,ù;Õ×·ÆÚˆH'¹dE»(m$®äé²`”üÑfàÊ GbCbV]ŽGu¦”…±Í×oºgþ]»~±³¹÷/œA]`§Z×Vn{úcÕÏ<ö³f¢Q…‡î³Ú@œ¯fb�øémN«®‚þÇŒ†{)e›zfá*m#×׫úýùD$~ þœ ZµõhõÀT3,ZSÇqâÞ¿Áľ„Îü),†ù£�ãøÝŸ^ðúYòÇdµÕ[0pñ�KJþ˜¬„¬Ú³ðCV®‚Á²íÅWj8UâKú<„ðоpp€¨„üXJ�ƒÂAF{x‘9——×”ñªd'€ý+Ø|â¨A¾þäfà}#÷ /¹_™“¤­j;#ð©‚Ô·WTÉ÷IŒš?dŒÿäoRòËhòGöÈÂEúàÙyHžnž«68öãJî�ÆÉ™çés7ÿŸPYêÔüCËùI S¿Mž—ÿ|¥öÇ«ë„0ÐÏV÷½€@rPŽ3AÌ¥_¨>'ÏOâ!á5ºøñe=¸æúõZ5kù¢yUªªXi¿/œ›ÛøQ"Îqüz ABê3ç%.ðÿAòçA¯ð¦Dþ$$$�Á¯þ‡…„„ »áÜë`ÌPq Nö„ùe„É0‡µž#èlÃf–šPÃ�0_áÉU RNN’j-oC¸ B,�&߈¿+õ†¥¿¬z-‰ãr1Ý&+¬ùJpåy€Põ®Ä¥…”(#e‡bê åý£Vújb…¯6¦ÅËô wûÔÔHåk‡ÞaÇ×£\fNvv üyóõ›¾ŽÌÊg�¯Æ/T~ˆ÷G¾„µKnÓ2p š‰!QAÈ"C<€T™'¥º Q¶mdó§àm,-„,éÝz ú¶^ó,aÒž>±àóÓ8±ËTFP¾ÆÖ–.V½ƒè[»Õ�Uð<É‚OÏ©C�¢=7�ƒíF}Õ&X8~úÈ“(ˆ¸Ðúñ#!aª5ò7¿Óeàô÷B{É…ß“®ÊTN8æÅ¼Ì$sÔk¸)TÚ:§�1ÖÀ9Ý~ÿ*Ÿo­¿Qâ‡xÑä¼ÌŸÒ~¢tb¾<ÄWIÏMÚsÐÇø6;çHIRG~ÿ�sô<@JÊ>éŽÜCŽ€ôhÅuÜ‹Qû^IDH<„ôòˆ•{£>Œ\m,m“æÉ}’ßXÊçgÝE5lÙ9„r¥ò�ÈÉo;ªFŽx*ÐNÿ¥H8ÇÕ?H‘H8 lp0…á¬`À¿ð¿ÈÐã~Àÿ›æ¥„„„D%$$„(x™—x—‰ò‡æÂ4ß V•§]mçQï;Žž>Vª%$-”7A,Ä1š\� ËÀ©R$¼¤ «íOjÒ )7ä�U‰VÏž0oÜ ‡P,$ÄŽµLEÉ ŸÌ$Ęx`xÄʽÏÕ<–Ü’æ‘ä,!?Ti;ÇŠš *}çø Êß;ö.3ßÙ�pµì‘Ö5«þ´ýâ5�*…ñ†bÉø‡?_ÚÆj{±rxºOè®z¶<©HˆÙ¯ü¦ìí·˜±öÏàGÕÌÁÌÌÂur,²Zúw\‹æäQÌîÿ¡<û%FÖSCϪ=ÈÊ«–îšåú7î@ÏÈz0ä�6N<ü´ç5 TªÖ±j÷Ë`Œ•cÛ-ðî…×¥)7~Ø÷ð€"É|!YIÉMfö¯H!£‰|cº{É9‘rfy¼¤€�P†ù‹šõ1ÝWm±V®éÔ\+ô=‡q•{Ðçk¸X™3ÖnÛÅÊÄ…qQ$\ø›A ç�ßÑŸN{ÉNŽñ~¢ãFJÆš O™h|4Tù�ˆY�Ã¤äº ¯ž/ È¢RP©à¤�õeضg}½´¿pϾŸëú¾~ À3fÓ#Îè�>ž"‘px€O¤0œQ”<éóï £;rÿ€àD _BBB"€bèp€½$?á! Â�çÏa•7¬�Dßð8*ÕL%–Œ5!q–dщëÎñòfaBP,9OŒ³HHß+Q…„�ÄY%þd÷›!^/��¬D2LÅGƒ?}£ñ¤€û1p� ÝfJþ„I.¢lqÄ«�“ƒ¹Ë*_ÞÿÊìÑÉ›MÇ ¡òáÊ×›¯Þð©|KÿÉØJ|Z†GöÃÃð¶rOÎ!Ée–€ Û®Mîý˜ÅÛ¨ÒŒäùÊÃ2ÆØÏ�ß,   Õ|nvp8¯`ʵÑKP©oÃRÁX‹Þµ[Ñ·öb›!‚Ðñ‡þ�ª†6îD©Ö‡Öì$¦öïC»1 ÁóTm˜8ª<®dl ¼n S ò1/T)EP±…ñijàQõ�þ›ûˆq]о†stŽƒ�*–{b!wв­¸_^ÔGˆ3SíÈœæ¨i¡êʉy1qèþ¥wÄÛN~�ÈÔn(Q¨«p5®?F½g�…6&þÌ$.2·�vª÷`ŠáN¿ à‡)t ‰JHHx®2ïl¤@ÎIÙz@F#›7I(UŽ¡h6 ËŠ8„ç9°„Œ”Þ‘¤6Wí@'€AÀÊtÉ{ÉDÅ̧:1gÈ>Ë À=x.' ²¢9X�N)ù&÷& äO,¬ÍäZdµwQÕYÙ¯÷9ÒAÕ½›ñF½ò¥gÞlϾÉ%t�3˜Ï7öþMã�›?�Þr“_>vÿªHFº²[{°dtNË'É6ÝnRú¯@gT Yͯ7i›˜„Û¿Ÿ|£9ÐúWXAÈL åæ4Ü|û¼pv¬­Amp/`2,Ô>ýv «ÔP �”‚[^8ã&Ç/ú­�Ñ™Iš¤vQEÇÂ^E $Ný6G(Äæ#� ì»âŠX½­ØøDÄ $¹ï+ªK�±²¨ò9BÌ�v³’ ¡·‹Ä#ôtá\JÚKÔÁd»SJ:߃”¢Õd¼"e\å‹LÀû\X’“ÍJ)›«)*n$NDqŒÿÎÑßYj_$žŒHbªc=ÿÈ=/Ú@qìÛ¾uWë.B–•ýÕd_œhÍ©ÂGÀ¶up@žþ«�pž‘?™/W8’¢‘p8 ` €N Ųb;€øIÃ~À績„„„D%$$œ.®€17裹c"Å[ ©ŽÿbØÂÒªõ#èíïÀX£|h"ƒ'u¸× }c¨÷Ž&B4ñ¡á¢þ7šH W¯jŸ í£ÿ¢mõÛ•"ÉùWµMÎÕ„P#ÇW¼ûý6؇ˆòŃª©8ÂW«+•÷<Òåþ¤ r-µÝ¹ �)Û²G'Ö•ï:|‹�j½àJæXg×Ð'š¯ÝømXãXyÀHùêu]­o-ë—Ð mé¢lè$v¨,2†¬Ð–c…° ŸÌ}ӻ̾ÆÿnšnVʘG6? ×r8QêëEÏè•°Yß’úü nÚµðú\1þä0?~Ë ×éô4ÿvò‡þ¸9<3[ÁIRu\î÷ª…Zí�òÿ¡¤6â>5ú»*^ü+Möëä}|ÜQJ—€Ô…(Z–µ ‰0ê¸ÐŽÍÏ„WÞy¤4¦€,4�{Õd‡Ì$"_vj¼ÖJÒj.ioðža²?W1`åA…°ádE|±… îíGÊçò9�y,ƈOu®V’B®ïà y¯çÈUëËØ²sµž¹÷BŠ îÿ£á|òs?€fú¯AÂyJíðHŠDÂóÀN�¦0, ü†Wñ”ÑÓ~Ï«„)| ‰JHHX T`Ì+àܵ0&£J]1Š{ìÏe0Biõþã¨õZmÊÌW£ú“8"*è�$‰´¢H0¤| 3@"ˆú ðò_P u8ZþÌ€¨²3Ýüq`X’&,±ILÒr`±¤ã¢Ä˜¾>èÊm��"Ï�˜oóô�Š’¼!î\ùî×—î?ñs¦‘oA¸z釭—®ù³öÞ‘'©ïOîj耓Brp r’ŽÕ*$caø÷ÚÈ+T°˜r5¬ýúôëp y«É1Œ„Š›‚�mH$Ï2l5CϪÝ(U7œŸŸâ8ñè÷Ћ�{‡Ð78/×&áÊ þ�äïO˜NÿH8Ï  W¸+E"áyà•¾™Â°¤°nðkQ ŸðdÑᾄ„„¥„Á¯}$E!!!†¼À.ˆO¶Î•éT-9ÃUE6GßÀ$ʵ .wr²",hR†%¾ñ¡I"AHþЕμæ>/G“{Â)T¿hÒĩݡá?…�N’R@úÂ! ¦–l£þ*Ñò;²�z XعÿKžª8)Õ�4…ùMIû�C3Ï*_|æ†ì©éŸ5¹ëGþ&WÕ¾Ò|í†OçëëSþ¹Ò$®ô?ýe }I�\K•²ÒÒ\+£‚¨=MT²]õ¥0Îrïí{×ôÛp²óf”°B`ÐA¥= Ìup¶`2 :²ÕþÝgÁç'޼Ýı¾ —/}|œÍ÷ϯ:õ±‰ÝûïRý7 àIšX@Ô j rL9(ß4–ž×%á]d<3„³wœx×Û ¯áÊ÷Å!6úë†åº ðñæžh„ô¡ÞxÖ.t Ým"ã!‡Š…L!ñóÊë>'‡¤b\¡ÌH(¢þdj⇽2D{ñy�‘?‘Iœ†!ÅCB€Y ìØÛ�áÕÃÈ2‰ON¹vó™RJdBµ½ÏÏXúùŸp�@ÿ €¿N‘Hxx €¿IaX2\࣮A1Üàݾ›B—��� „„„3�­Þh å¯<é9$o¨op¹z½ X/AE4ñúŸ@ÀjîÇI°0¯v~�•bõûå³uPy,4 D<,Ø9ÜDÜ£¸Q¶Ëü.âq'¾Ä€›š¹‡+¼á"ÏÏgH�ÎõVÿþÀÛÌñù› `»'¢1“_Ô÷W�›6µRIºipóv°/�¿´]{8éïŽþÒêÕç´ÛKß�ͤãò‡ôøü:ó�³?ofók±‚�¡�rc ®‰3”†Ð3r5Œ)Ÿ%ŸŸ8&÷?„Ùãû—ºÜÛL«þã—?ó™¼Únq¥‡s4,1Q_Ò±Kû‘xÿ9˜Ê¢äsã¥$ #ß•7WN^ˆÇžÜ2ŸgeÎ!}lt1E(–1ÈñÅ¢Z”O'ª`²#¾ Á‹K¨@Êñ’\U¦ËpªM´L‹‰éºÍtΔ¹RÇ>ôâsr8§ë²»Ò2/JÛÉb�6Jœ¸*h1¯AƒM۪ظu¥R…–l“÷6FùýÜcI+…Ž8”¼..0è_ø£‰„ç� à?¦0ú»s/+‹Î~cí±Fç·íÓÊÿ*ªGéÛÚ7L•#êIù®ÅÉQN„ȸúÝ€ÀEÑÒ“2rrœ\×Ê\ E#„ÊS9%ŒO0Wˆ”—¾‹Î-ZQ«Hƒ�¬’m2¿ñ²¨ÜˆªM�µBâÒGâ’8Ã=á´2VîLù$깘ÇGŸÏçê…ô,BÒ�‘]ùÝ ýˆÍ!ë˸äÒaÔê5¹ÏBjÖFNüèk�ðtòSH¸Ñû+·½Ïå­ßO‘H8]8àýþ¯‰ÓƒêÞ à}’?‰bÀ=Y4“"˜��°Ü0øõ�¦($$$,†œ{€°0–UD|€éÃöM£>0†JÍ„æÃòʽÄȘ$팱‘$U½ÄÔ,´—œÃ’t9¸Ùwd•±2¨÷âI§XR'ÜI1¯-M$m•øÄUSÊŒöü – �ùq̟؇Ns ÎÁåõìË­þ§ÎöÞã’„÷ýÐZkççL^­v=NpoùÎS¥„ß#ûÉœB•”<1@¡ŠPÄ /ñ& ‘ä�‰ªAÁ%¤wdêS±¡$X¬T$ó»!$Ô\ÊüøbDtl~ÕäžVNògKË’êg傈'!Õ ‘Åã ókŒbþHªýºoøc9 W^ÇI5º¥R3عwÃýª�¼ì›�@²Ï‚+…øµæ<ñ3™~Ö'\¨üÍ{ÞÝš>œVö&œ6Ú0¿ %Ÿ#JpÀ[=™³ÅðY¯úy:E0!!!@ çVÁáF³Må†x5©â¥àÎ_ØÒ ôL!+YPð俨N¶h(ï¶bX¶E@:¹çT�ÀãÞ?²Ñ’L”x†>,.n¾­’9q%'�(xébjmȱᣔX*Òƒ[B¾iÒO«c”Mâ+÷ø{p‚À\»\½cÿOØýÓo5ut�:nMí¶Æë7}Æ­ªÍ²C˜Ê«HÌeŸ.'÷’a½( ÉCv]�ðS•ñÉjølßÔ¦ò=ÇÞδ_"¬…A»Ò‹N¹+ -”[ÀüRxò8T†×£6¸€9Ë>?íùiLx�©X*¸ö<æO>ŒÖÌ„#¾æÜHùS�Fÿ‹(·äû †x¯Á:Ç15�\‡)_dkP~3'³ û[“>zX ç ª~‰(è NÔDzL�ÒxaÙ7æµQÜDʯÊÜj™7™k9©#ó‚×Ãc9‰âBSBâh%l4±’åñÚ®2?é}*TYLüyò<�üöPä»z‚“X9óX$eðÔ6Úfî;HKk°mw/V¯†Í,™‹¨y¸"ˆ£`?€c©¬NÂ…ŽÑ<ö¯çŽÝÿ±‰„ÓEØwH}ÅQuîjOš½Åð}ïósWŠ^BBÂY(— „„„ÂØ cÞ¸Eþ¨\ ËËßœÊü�ê-#%H”ç»°òŒ!ê²"–Þ¤$aX‰“!„„ Ç�Ï^,$¾†%€´ú)ª|áIÄ<0r¢÷Ç·EV;“D—ÚGÊÙ°ëD0Ú7!¾r:4ýÒ§ËÊw�=03X¹óàÏÚ“�ô>gÍdgkß§›7nþ*J¦#±—þAú—Qä þ„%å¤h`]¯I y„²�ú;ù­ÜNÔ NÌ÷T¿rèíf¬ñ&”èWޖЪö"Ï*XI(¹Y”Óp-sz>?}½èy!LV;'}~òv Ó‡ÇÌØ~ß�–®ƒæÔ“hL<é»þâ—vw6Öþ¨ùºUÿÍ7ÈwLÆOõýp<9®Ç ¥£ÓÐj GKUæÁm1õcD�QwÄ}Å䮥}l³':¤¨Œ9*bDu"qSû5‰Îçù›á|¾Ñq³D…ꂹ $ÌIýZªr!ª¦¨N“«2)¤áÔ\™G£êÛø{W鼯�—Ü Ë�ðÔ%×]TÁæm#(Wª]?3Ç÷/�?y§…¥B{ö0æÇ†kÍÃ9SXëé*æ¾ö¥}n½hèq8ç d(Äßý~Â"—ò"£ˆŒAŒ¼h¸RÆ"=¾ˆûáDH ê÷¢ÎeÉîñÃÇÆÜå02°Q)œ?8Ùc­4˜Ïòª`Dçi''N8ù%ÛC5(�ëµúÔ©q!aÎ{­¾¾�õ !´H A¤ ªý&R¦5,§ÿ.®Èîʰýò!ôÔû8}ÆæpLù8P•��éTÒÏEI£]˜Ä&ÏWTQ�­º ’lÏ~0¾¥òícï1Í|; As¼íJZå^‰û €q9*�q`>(L ¨�^‚JåóÓœDcâ¡¿8ã{ªÿGž÷—þ®ùÏ6|,ïéÌÃpeM¦kUŸœëZn32ȱz¼rê=`R˜?Ž—›#¤‡¡* —»ðt}]£É«T·xv<0¬DžŽ ¹?Qè£ÊvU¡Èóˆ’b$¶â{ÃJ¿éR ²_®EÁIw9ž–ÉÓ¾Pr¿tQŸ”h|Â×EAJÀRH98FþÄʲª¿+• ;.ïÃàÈŒ5´¿’"ä9–j³ÞKa<ýxÏ-�ÆÔö�„çŠðXÃfŸð»)„øÉ;ÀOø0€(†/x€‡S’PBBÂ…€u€¹ ÀE´ä>/ó'‡âÍã¨÷O#Ë KÄEÌ�8FüÈ~B.uM²„%ÎÀÉ#ñ6 &ä‘d¿|FDV!ÄßÂAÉ)ž| ËÝ„mÕª‰… ¯O*†%д©»în¹$¡Ô�µú‡zh8ñˆ2“�JåËÞlÍþ´q¨  ÐÌ7Ôÿ®ù†MÿÕ ”çåz’ôãm—ø#=ÉýV Þ'¬Ü“a+îí&ÿ…™h^YžšXgÛ�ÑçN98kѪô¢“õ`%!sÍ ×0²Ñ:TW£gø*våøüthL>‚ÖÌAÀ9FþG­ö`}õU³»§ß=»éäÝë„, uz¿ßÌ2Bñ¹€OtB6Ç=ÐøØÇQDñÁæBY „‹|×Õ¢eð§Çê£#PH`I;¬Þ.—Z¸7k­/±ìBET#.x¡ !¿Vz–x ñç‡ëâ‘§Kò1YàxÙNN8:(’P‘dJ]аíœü�Q}më¥u¬Ý8 ›e¤ÍÅÉÃþ&««8œ|~V:Ôœ>|Ãܱû¯OÑH8 ÿŸotŒ½3@”ü¹ÀðÃ>¿ àK)z ç Þ÷G) K�=€{`#Ù_¾ÍÛ4Ä"yÀ ƒRõzû;€¡¥ËTzjbìÈ*REüHˆ–܉|GÉ,¾Ò×r}•LôŸ^˜Ëªt"PÎ×q )cÄø›x-0b‹™Mh8Evð>–$?© +âÇ NvŠ9¸Z-No$©K<¡| ìS«*ß8r‹�l¾à2s¢³cà“Í×m¼ Ö¿ŠH§éJ†éT­´[`ei/ôý-ôg²·Mü 3Ö~»æm©ùHibr—¥Xœ‚òR ­R?r[^aþ@3(5f�Uëè½6ë[A>?9šÓO¡9õ\ÞNŸüÉì¡êšKÇk=›öÀäöC?½@QJRŸ4æ #oÃ9„[ÕÓùGj¢æBËÅ ñcÔØPbD¤¶‘„½ƒÜ‡”Åt¹(%C¢Üƒ)j䏨¤ÉV ”œ&1Rí¡1à÷ç?@�Ë?9[*Âwþkoñ–ÒóA|¡÷¦óÇK;ˆ2”)Q#Þ~*1¥˜V?QrϨ8ðç,m\½±Œ-;V¡R­vSùoîû#8æU?­ôA>Wˆ.­2&Tp¨àK›t¼t¬]$Ù!Å"«½ckkÙŸêo`Aó›Žxv(‚&—¶ÉªwisàusšþG^›–£ò¥¯Íž8u³é¸!@>\¹³ùê ŸÊ7÷žôí”{‰ú-È6�ðcd_ †O¹–?ž'ú䂞¾9ØL•4c«wýfí{à¡V2Z–�bFâþ89ˆ'Lˆ¿„Rq"J}ÚœY¶ÇÛ!çh5‹ O,ñ¿5¡D’š’ìâ‰OCˆICêkúóµš%wBøDÔT¤M,‘©�ÓŠ s²Q¯|ùÀ[ìѹ7 + h˜Ï7ö~¦qӦϡ^jûëÄ—.E¤T>ê=ó:áIi•ä3úL­âÁq¦Üy <1~‘ÍÝ`5�(�ü«3vA ÔÉj‰:£>?3Þçg K—·ÐœzÍSO«Î.Ä� ‰öH}Í•ryäbˆèÄxZBO�_ WË(&¢^ñã*S�ˆˆ‘LýCT„9SGò…„L�ŒéºšŒcrsÄ/šfg¤”11? ù;ZÎ,�¯þ�ó¢%Ñ?phM?�Æä# $`N[õã2s¼¶jç‘ZïÅ”-ã Q•hµ 8¤¡U€zœ#ª®v Õá˜ÈU?q›b¾\B—ùÒ×ó¤»E DÚ§ˆè`Ì0Ôû&�éá+Û¢%àâJTi»j3{þÚͰrhÊ_JÍGjÜÌÕjÒH8iW„@â¯*NQõù.qQq][ÆÅ»FQ­õ@A‘9t>'¯ECÇ}¢­‘~J'$t'€ 5sô³G¿}ŠJB74lé¸ëa „ZQÄO?€÷{2§‚î˜ð0ŸzPBBB"€€¯ðRŒ¡åßHb>HÈvÉ9˜ÔzŽ£RSD€¾VćG¶ó„¿‡ÞFK‘3êÈ*ÝEÙ0)µ£“ö,1ÉËÿð’lL¥½gtôY,¢þrQ¸kY,˜ñ4QÀè6ȹðû}²Õ—€óÐFïœ dJ&Ö_ºy"•ï:|Eé�ñŸ7Í|3 ÀÕK?h½dõŸ¶÷Ž<µXâ�ÆÃ†‘}ð稾nìNHE®Š#Ѭ5=Yš™{Aë¯P 8´³´ü�ì €ÎŸŸÎüæ'@Þš!rO�‘?\WZ÷`}pÏkKUPhãÉjü0¬ì›N€“d½(EƒR‰ò]!ä¹Àd"  äRÔˆ“ïq¥GÌ’�ŒwôZ*™‹DEH”?´$‚˜JÁÅñ˜Ð±� ¢"Ò÷.Ÿ¥ÚSî XûC…˜Ä@Í•…ÔÉr<'ß(Ù%eÞ¤Mõþ¶íBÿP?[¸Â âʼn âû3 à SéçsBÂs#€t¦}çÑÎüø®™„ÅÐö5³Ê‡<óU>=´"ˆ à~_U*‰ãSž,:”zOBBB"€ºcÀëaŒ$„ƒœ‡Ñ©í_,Û´½ÍN¢Ö7�RÉŠB*¹FŒ«£É&ðÛ±\=�Ú÷ÆéÄ”l JÒ ¢|b5ý”Š”~7àöj#¶BÙÍ&1á 6â¿AÊ�0o �o1CW¯ð8pÍNV½cÿ�ö™é·›}ˆÁ7Æ�VïhÞ°þÓùºÞi­ì1†™‘3H‘bŠ(“.+ýIù›¨ä.!€Š£ì)MOôgÍöz"Š ñò�X �Ú¥:³ óÐç§=ƒÆÄƒhÏÒG•|+¬úq¦·ï‡½£W­ÏJõÕP(NiúVÔš4é/ŠŒ“â¤Á/^Qç½Ëä{™ûà ÃÄšÞû¬k-Qˆò¹‚ûƒ‘zNrKû¤)òÁ阄wDÈbª†ò%H#ŠWª~¸è8ˉ+ñüÈ| üÔŒòIb$» ú’œ¯”R]=�Dd"Š ‰+‹—ž‹99ÈD˜¨RÌ÷{õ ?o¿l£k†a³ €‹üŽq‘2~9d`È#$QË+~ަŸË §MÁå�ǧžºó"À•StB8 ÕÈ*Ï8äÛdÐNþ¼ÀǼÅð¿àÞÔsÎg¼ÿ?¦($$$œ \àF« •“ô‡ä”LH°€æx8”ʇQí�‡µFyÀh•NÞUÙÁËθ Éç¢eZxrDÔ0þC¨ÒCûRÈv—ç:%«›Õ}€›=K`ɱܫ€'á8!¦?O›`CÇ,âŸ@©6r®QAèöÀøp;œ"Ääê Å�¸Éq°Gf*_=ô636“,ºÀYLç›ûþ¢qãÆ;P+uh|BU˜&Ç ™ªmÒ$!à´ÂÌÞ¦JÀ†Ú¶ÔþQirb»Í]oaháÕß¾ÉÐ*÷£ckTÅàÀtCÏð: nÙsîúü¸¶÷ùyž?Ð%ßrSÜë§\z²gíÞN¥²z;N“Û\îä]â-,,xà„ªAù>ñ1ŒÃJMDÔ?zÌ•+/ÉÉ ¾Ÿ+P}[„,ð‡* ®´Ssp¢‡ÑÅàøižü�KQ)ÅŒ*û'í–q_Í¥¢(Œƒ'ÉBBDH¾P� ˆjˆ—Ðìª&�—yõERž=r!:¥�+ÕðÆ­5l¼x¥r8y#Û#Ê Nö x=`?€Nú‰œ�ðßÙ{(M®³<ø¹·ª¾­·éUšUÒŒF›-[²±-aÙò;aÉÁ`ö6›%ŽÁa á÷�ÄN €YBòC!`¶Ä`lÀ6x‘…µK#ÍHš­gë½û[«êÞØuî™÷¼7oW׌zVÝ眙ª¯¶[÷~õÝ[ý>÷yŸ‹%€iûìÇ;g>_h�!õÛÇ�R÷±,ÝD]¯ÄÏvïð�¨†SÞ àw‚ÿ\@@@ €^”›}óF(Õ„×–9NòPÌÍ­kw S¬{&àƒÂ¨Ö0К b�º°dœlVõ·ÑZóhìc—INZp¿àƒþ’‚…‚Uœì¡UPb`­ÜkÀø^‚º‡û$¹ó„Î"$OÖ.rZ< öyí"¬ $ûI䙸͸¶¦ºÉþIñcs»’OŸýVÕÉîDØDËnÿ`zß–GÜËÌîID�H^'ÿ#ó­ëåöƒö9 üm¸HX�¥½£ÑâòA èrE�DY了4ƒUñuM5'·aÃÎÛ®:Ÿ .GñiØ|@]´×�Õj®¾qϱÆÐÞ;”R•!{quPå›|À ¥D5óshï»ù¹²RBP_*U’­$ÐÏÊ‘HžöMV‚Òq~ú»b¿!¯0‰z'ò¼\=é�´dß µ#„ùz¹þœàcmGí¡5W>¥µ ïG`¹,¤ ’?ó”€ZkÞ¼4>•ƒ~ø^H˜Rx|c »Œ£Ñ¢ƒùSU$>ÏÂq³ž~ ëKÙ/ =ý•÷Cœ‡Q }Y(­øŸ¶ èú"~šÎãç=ZX}ÿÞ‘E+በP@@@Àú¡ ¥ÞàU4dHö‚b y¢¬Ÿ6N/£Þ<‡¤&\Tô_ pÒÈ®ä�g}£‚�’”–ÎW~°ÏBЉ§�@tž¬”T.l�¶¬îeÊ(@±@–èù£4OÄ[œîËm‘SÉ)�¬åer²$‚©È¨nrÚ¹±É_Ÿº7~fá[Uf· Ìpü™ôuS¿žïßpÊÿž)�Ç}�Ü1Ü÷‚vYßûGxDÜ'G‘èâáxd¢·$^mÉëF ‡|å]™�ì‹" %ªCÁû†§<“�ø­¿…ê^\Ó•OÄ�‘,%žOËãOé½Ëã»–tnÒƒàÕ] |H%ÅÚƒnˆ—_–ÔÝyJ•ú ¶¢*¶l"A™R—�þÐæ_˵†Æ¾ÛF1ºaJ—¤z«¼‚ò‡TAäó³^ƒÖ“"˜´�åØ `@�~T‡A@»¡"‡@×ñ£|�#sv¢þ'€ðBxRpé° J=k÷ˆ)áhŸD/ Mëœ8â­gPZBA tD¥G™á¶�îL•ÙØÐy2¸âEPõX~qÙ¬šü.¨�„YÛÈðœˆ&ÙëFÚ."a½vS‚ ˆALmæÃúeòÔNîú¬œ,âÍï¶s#l8+%ÄämV&¾ ÐÍ“/øý?údûë•E£J:53ÕøãÁ›wü¾�¨­pPª ý`\ý™ÊAPT f⊞7òZ'$æédya£NóMê T4©R(ü�¢¡ëŠª�NbbßÝW•Ï�Í»…ÏOÚ9 @�\0U?Õl>ÙÚôŠÉ8!âs� ¨?"‚Ã}fõKLýB5R°ÉÁ}¶O$<¸Ï•Ëá<�(¥Y‰ŽÜ—²þP¸NÁ¯+ZWÊ'„ü?}âí!×]&$‚�¼™HíSÉwŽ¡D ëPšΚœŽ•ÆGyl–ý÷ø3!ÝW5R�ƉJ)YågŠÊˆð*@©ë°{ ›¶NBGZ"ݶÜ- \T®¢ý€£.½Ž ¯¾ëOqµîtÎ>H  t %°&;ÿ§ ¿”î: îð_Šjx À;üuxJ®W(üÈ/…V¸Úp €·jb(B¬‰O¶õcsìx?e%Óh´iÃý¾ïOD³yYA�B¤ës#r%€8ä¶kÜ9þ5�Ê2�á3j¼=r"Ë8Ù#~äà'¤v¡û@u6T¾OrXxéßøÌi¹|¡Ê‚äL"’d +´Ÿ8‹[Hý}|e¼ö×§Þ®çoBØH-仆{ðàö¿B¤=²ôÕçÝ¿W>»_3Ÿ‡õ&€\±§OÇ 7k‹æ…¦„Sø�ÁèúuA5'¶bîۯ ŸØƒåÃ,=GâúwaäO�hL\©7¶îÇ:cñ¦S_ÓÙ1{‚ÿf=rDVûŠ\|ÏFŠ–)<ätYY,§ÈÑô¿¤Ly°qD?õ¥ÊÕÇpRÁ¸r\E¹G¯wÅôo¢¯ #Ã!·›_ÿ ÊázœH}~°}D”C"ax[PÙ|[�Š$”ôn ª ä òl¸Ó¶ÜXÃŽ=SHj È«ÇVkGNä´qný”#Òðªp© BÚ9‡Î™G ô2Æ ª!²’ÒŸVæš'€Z¦˜LöÓ¾ €ÆÚ˜ð^¿ OI@@@ €.?"¯p€Xƪ’qå©à'À—è£Ö(ü�x€H(H¸ÉA.k™©µðÀgK3˜ù½PˆŽŸÉîR÷¬êßã{>(¥aL¥5•!µAò�!{aйb{+)•“»oÏ—INĽ�Ø:µ[„å„'àCûh›;eñçfoNžùvÕË l]Îîšøµô5›Ÿf÷á·‡ïUbA(Ì`wKòŸ Ð%€Õ˜‹Lg:^nT€ZS¤­GYäQi< «âkšª oÀäÍ÷\qŸŸ¬sýŧ`². @�H„‚ü©æó£°T›Üù|cäæÛµÒ—€’µ+dø/(QXÚI»ú8`aÏ6įžîŒÒƒZk uä«�.&Í¿/9M$õ£D)ÄyŸ7°\¢ßM¹/§å`ÄG™"ÆŸ( yº±vâmο[ŸüA™ÿosé9)CÁžQŸè£>Xn‡òç‚�ó0:ž`Ï� ´†‡!ÃÒ²Rê7y�?à€vx½ ¸œ!ëΠsúX›‡{™a×` Q|÷JC�þtrˆº6‰Ÿ€ïðãÆ°62ÿÀO˜OH@@@ €®<†|€»%„íHÕ³š¨œ_×zµæ,¢˜z¢Nƒk‚õ‚}ÂÌZÚHHžVÆíÒ~j!^æùÃá¶ ÐÊ~Õ½€äR¿Q¹,Ëï‹ôØU…^É,z"€X{X¦â‘¼¥³Èý6Ëæ3ÿ%“scQûË“÷E‡—Þ¡r»`Æ’¿Mß°å·ò=#3,WEñzøÏ m£`¦@Ht)Ûâî’Šzƒ]ÕÕ@@DPD ®R¨‰±Ñr~oê¶ûÕWÄçǤ‹è}Ñç§? @_´êÇy4:þØÐÄ]{µ®�‚p  é/@ó'ùoš{ÝHŠÁÇ ôË*>I±(*�,O7)2QBdF)M�¼€$ÿ/w ÷%’Êçå–* Œ¯vÈi7¥€ãupÇ•“kÕÒ´r‰¨[02L$zÜ6*ƒ«qiŒVª< d%ÁŸ (VK&#”«Áø³'ªðùÙ01¥5#zøº¶—D|¡ëˆŸÙð:på "�æÐ9ý�zY‘?u9&@éß,K@@×ùóå~À-¨†¿ð.O‡§# àeFýrh…€€€kÛû  n�‰ΟH Ãé¼USõëè êÍ6tD��Ü `›¬pa¤OyˆïçÄ�ì}£ÉHTÊÈ©l ª�(¨¤ýYÓe)Ð$H$Ï„[v®9$ÃmKĘ@šAAžÅÎg¼óTy>£[nB.ÏЧuqB¾•ÏáÏ’Z4j>ñÕút÷kPð ³¹ù?nÿŸv¬6 g„ÿf¸ºLR7È è’Ã"ΟL–·é,ŸX‹* ­k=ãÚB$Pµpµ¡Ñhatd?Ê�´F1qÓÝÐQrù|~L¿Pü¤+ÇÝ}ñéÞõgZS¯Nâ±¸Ä  ù“ôü }!þïÁ2¯ÚG[èDÓÄ>°Rù”’LZæ O*€¤ò)SÃðr(}#}J CrSñþœÆ¦µÒ’“?n�È c̪u䆫k ;o–“ÐQ,©z*<¶ÄÿÇ?6w©ÞN9§®8DÈzó(H 2^]ÿäOܰÁšüüŸ>ô (ät�?·x?€¯@5< àü¯à?ðr„Â�( àšÂí°x€QhŠG‰ÖŠþT9’Ú4jÍ”í+¤7“ÒÖHÛyðßO/ã{Œ‘HJ…æ§¼�‚�6‡FËSî(™�n¹ú‰¥Kƒ¤‚’ÙÈWñ°%#¯ÈÉ>,Ý•¥Á;AN$ÔŸRô¸íÿdíξCif?•˃ÒÑ‘¥©äg¾E/¥¯GØXÍä{GcðæmŸ„R†~ª‡_=RJfWýg ßxY "´z‘Šh VI¤-S#�7ÀèÚ5D 4vã­ÅîJW°ræÅuöù1¬<�ÁÒ!ðˆëþU!"}ª>µ®Ñ¼á —‰š;�a0õ @)ߘÄÔVòŸqÅ”{¹È¤M�U€V"‰KHh™xçdí*¼~´ëý:øÄ•ÉH0´Oò½)UQº¶•'Èž|´”¿�  öY¸>]§Ü�‰Ê¢e¥0•ÁÛÉû~ùw_ýy6mKpã¾M¨Õ›TN ÉCKI!¤E"ˆ·Æi/„WÖ€€ËF}·KiU yí/’@yø™^�°PH㬊ÈäÓúÓŽúð¤ö{üÒ5@ülpj¥ïcm,øIÿ1ŒK� ¸¶�x”z¬�YÜ�§ö—¬Ê¡”Çé¢Ö8ƒ¸–£B0†Ùì[˜õ-‘?1 ¨LÉ”»4к¹,9õ�¸.«˜àÏîæõ•Û�“<ÊëžÒ ð £´MÌë]VE9ÂMh‚t£ïž«Áø:µE©ªÈo¸äSgo‹�ûvÕ7{Q¶=™Þ=ù«ÙÝ�p-+¦m©y¼"è2Cãl”·gâ•έ T&‚Èh VEW4„Ñ‘[PQÒ@Ôh!m/š뉬wýùÇa²öKK÷¦ÐI&¶?Ó=p»VQ‚Ë òòZ|Õ$Á’"�ñDu`—àžhÜÈW“Dõ“ìƶI)íÈ÷‡ÖAD )_h» UA’âFRɲuNî£Ì‹�Z˜+¢„4ybZTa’„åDo›ŠÞPtý¡a�='1<:êÊ3^Ù í v /?™à\pÀrxM ¸ìÐ×ø¨Ž‚üéÎ<…´}&4àu£#dq \èK�?4[¸ãþ€?¸Š‰ŸÀ·øw6VâÁ€_ð^gÓ ýO¡®UŒö(u�âL ¸ ¸o� ’cTô™¯Ïþ@q"˜d¿Q=bm™òÅŠéˆ 0¥›å„�ì�ÀSØIiÏÊæ9 ÞB`KV•´{ù¬rve¡]ˆcÇ{2˶1Å z*jßU©’ ¡ýÄxléÉ·4WµŸ| zqåíÊØ±JúŽñÚGÿhë1;Zs´Y óo’œ­µúÏ—ÞNÐ@lŸ‹;‹Í¨Ÿî¨îd™•E#‹G¨+H ctäf\I˜l¹ ~²Þ9á£)õ›`T•toF �>64y×Î(jŽãŠ€<€Ä`~Ú/šk}õW®ø¦ÿ¬¯që¬33n]K�ÿåÍÖ H™'º˜ÇÏŸ²tkÔBùä�¿�õ¹åc‚ìsYéS¡O-k0Ï7¥5#Gˆû«Ô—OJ°¶Âäé¾Eå0;O)ß¿DòzıÆÞƒ£ß8¥#Fø>˜jGT¨ h›äq×p$Ø®(ôzŸÀE`°<�ÞìÓ!%Ü5U?¹NÜëC ¥"ÀÍi£™VÎè ûŸ¼JÉŸ7ø€;Q ðNŸÏE@@@@P\?¸PBa+˜µãƒ*U•Ë ôéÂHiˆ^8né§ûâéÏœþ^LÇÍÅI‰Â½p\I2³âŽ÷T,l¦3WÔ€XêÈAC"6Ø1¢—�ècå 3­…L~:8¿VLõCN€H2í‘?²y�@øÐ~)?t½r)÷,Ð:gÏÔLo¨þ—Ó_§ÎõÞª€¸B:µ®ÙÞúÝþƒÛÿÍ(E´ToKÄ{æX ¸ù·©™üm¸‚°€ÑqöD¼¸°K;º– Oi Ÿ²Jj .¸u^°LŠË7FHS)õ£š÷ß*GhG@±s-'†iY}rBycû)ΪªP%Hô>"XŸ‡÷±²WžP'+‘Ft_¥¤Ý¿3T®�ªò½Ò½Ü°¯…­7lD×€åiM}Bˆ ŒIü>Ü1Çå® ¦~îômQ}äq\$LÖC÷ÜȺ³¡1¯A#�0l¡.H ­"—!;牠駬½À㸊дf€Ÿ𵨆c~ÀŸŸ€€€€@\ŸP€z”ºÀÐjGÈBYD%ì'¤ˆ’SHê1µ}f*Ñß@V~hÚ/º\PÑ�ðá¼náá‘!t "�%+^Äu‚<ë›Ýf™/„ôEÐ6a–µâžG®žpǃ{Þ°Hb™¥³Ò r0RÞg{ º¦ä$—ÃÛÁ틞^Øž|êì·ê•ìT€MÔtvËØÓ7n}>ìêæöúÏ¿I�#Ð…ŠV½#ñâòA"ÀJAÚq]ç«l _ 4Ù£’—d‘®¼ˆþâÓ°&%Å��îÍ…Rh5SÛtÓ©æÐîÛq…Á@s'JÙÄ>×ÿ© ÛrT¦Æäq@}5K 驼 б,·‰õã¬_„b×s·GÄPá—&´‘ßžœübõàiÏ”öT2�Æ^g™‰+W´äx|æoÚÎRüq"ˆÊ¯DmÂÖ¹ÜSRâÀ'~„‰Rð{š˜ªa×Í“¨7‡„w�*cîji\ ä¶=çT?½ðúpå1ôrûÈ ÷=öR³¯�¢7÷¬ œî5£ú‰jÈ£D˜?æ†7Ì›KG ¹u7DÛ “_5�†ük?  ŽµÑð>ÿ@7<RßúÞ�. àºBP÷ö^@Eçc,JŒóù+2ßPNµ‘ÔÏ ®ÙJénx �Öñ#(`Pæõà¶I°<õy<@Áß/Ÿ« ê9Õ ]§¬îþ7RòÙòtL¾Ï�êj©z DE÷Ç‘H1yF:X­œVª¤]ó| * O*Ëm"º¨Œäã§_?¹ðm*5;P¶ÿCzïÆf·�…’¿9?¥€»ŠÙéx°²uz"£"AÜ(‹ZÈ  }™ Œ߄˅¼½ùÇaÒå2â§Šê§�O=Õ»ý€Öq—q½…Úè$L–¢¿xnMï£Å}§¾ºsÃÜ´  (¤a¤SºÐïO:Χ“„|¢D2HJH¹?ÁS¾,õ9‚ÑzeùOD¸µ†R£Ñ} ]cÍ]`ÉSžÈæyœøÛZËĺpßW¢Ì,!ó]Ù%¯<‚L9ÉÏÄT~üþeÅ-}–êFcQsHaÏ�qŒlØ ÔULAÈ–|þñ´à9 áu3 àêAë�xkêŽ�&Ã[ñRaÒ6ºçžDÖ› {ÃêY\‡{ou¤ý‰ÂþD²9ýÉÇ^ïmq\d�ºÍßࣸ²Ð¾Á‘9ÛQ ¿ãÈ¢á©P@@ÀË€z €›�R`ö¨äT ¥gQkÌCGt Où¹ýeU 4B *‚•[ëÏ<–e2!$„³Xy’¦‚ß Õ[4¹–½u$õ“LŒQ;ø^ŒÙcžHø+U5‘KØ� ‘>%mÁ”`ìÎˉ0H„àªAÉnÕÿâäWêãí·)ƒ¡*éÔìdýOoÚú;fª¹"gÄ¢²ôŸ-~@WT”Ž—·hc†+ùiNY…Â(‹F.4ŠÑá}—Á秃þâÈ:ÓDúøéÞl5Õ�n4�´¦^9ÅÃq‰ÑœØŠ±�Ïÿ\³^sÏ=Œ<í•§€Û>{Âï;y_ÁT‘  ß<¥•ô=V )(­ïý#’ ôûåé»VêË@¢’„“òÙ ˆ&𺌠ˆwF¬ cK�'¤!µ Kr2‹÷¹ªR›È¿'Y$¦2•Ûœ®#z³qÅ�¬\%0R�©¢¼ï·\±£,öÞ:†�[&Ýó¤$ÂF&ƒh¿DÉåaày§BZ�€€«’ú†ÚÈößinº ë„"\þH ‚®Bâ'�ëÅ€0ç†i'0…†±9 õç‡Sœ_³±5oð»¸r¸À/x ªás¾À߇§" `m(ü›_ ­p=c/,°‘‡G⇶WK g­ M#©w¡5 ¬x¦ÿ¾>ŸÁís(ºÑÍËëbdA=E IéâÖ!y/øþ¥�Ç®Á%ª†8c›{áÈu&3o(ˆ“,¨ýbè|V}9œ[jIUšîH6ðfÛ¥Œ×�ùšˆž>Ý­ýÕôÛÔÜà+Û+Ãj,™CÿµÿåÛ?ŒZ”C� ßAetµÂ"NWõ{€­ª(>j`UŒ4C®¸Th´F1:té k3 –žÅ`ùˆëNdŸ`mâGi…Æäͨ�ìÂå€Nj˜:øç_OèΟÆÂ �Uðr¿MF^ë)‚2/7ÈiEâÃéÎÜ>wjij3vÉŠ¤‡=ZPšÊ«“áNõC)Ê|úIV ŠXù~ü¦4Td²]‰ûr#y8%2HN9*M ±OHÍJ÷ ÃúEI*.v}·Ûv6°uç’Z]ôñ‘ŸaZ/WÿÀÛfܬê‡ø€€«—z—ŽêïÙùF8"èz$~’æ—”ÀæP*‚1™(.¶™¬øLi3šwáRý5Mü €÷ãòc€Ÿðͨ†ÓÞà¿0áɨ¬ P@@Àu àÕÞ¥Bœ¨Lå#’>"ˆK ®M#JR(¥8ãÎá{ù^/¾Ñ4Wü(ÙÏÀ}f³»©*ªŠï„<$ð•Qù£ß/·xy¼®\ÍTâ‰A©�¨>DñTp²�Wv¿²‰7µ�|]¥J0åµßcãGfw'Ÿ›ùÕÉï@Øš>šÜð+éë7?ÊÌÍ-põ@esă%èA†2hGAýßiár]/ü�¬Š±j‰ÂH XéôS…êÐF‡öâR íGáIؼÿÒ|~”Emd šïp׸8ÆÍ —ƒ³þ}ð6âž>¾:ÈéÜd|n­•Šà_ªl>^­Þr{ÊB‚òÀ�|¢ìä©,ŒUµ�žú’è¹¥oS™ÝŒ 0Ãñß§_²éƒù-c§àÚQqhÓGÔ_†Î,ÖôÒV ‚€,n!‹Ga¡Ùñ÷¿vnÝÛ@§ÓA»ÝÆá£<úœBš© ÐŒíÁz"Ì£?ÿx±|‰>?ˆ-4§^7q¹ÑÚ¸c7Þ*r,§ù(u=´cþ¤H˜Z‰0‘ÓŸ‰i - ðrZFV¶˜îÍ�úRå¼bòRßw®ŸÊ’{‘ùÄ7À?S ;Rƒ² r?èi%*E‚ÔÁ*ÁÉÊDù¤±ú–,¥r™ÒÉSü0ÒË{eu%ˆ—jiL¿/VWa|`u®ÕöÝöEŸŸIº®ö)?¬´]<ž®ÛqÄÏlxm ¸6°áÇ>÷}ƒ¥c¿56`xÛ½pDÐu@üy¯ù–†eÀ’Ô ©(Aа6gCYùaT7´µH¡ÞéR°]R$° À?ðìF5|À8žŒ€€€€‹N÷«¡^n˜샀ÚÍbtåJÿ3?Žâ*|©uIc J �ªò@©ù4��ÒôhØâÁNºW·¢@Á@Ÿˆ’?±%x tŽ–�®y¾!!ØF*:CR9Ñ—è{¹|RˆÔ?¬ ©|·�–2é÷»ö0Æ)ðÀ‚°¾òK€ìÁ!ˆKíéˆ µ’Öj>ùOõ©î×+‹F ÌljüáàÍÛ~ÏNÔ:Å—÷góoS3ùÛp�!Ê—õzˆ 06a00hwLeE�Uª �²hJßðOnÂ-{FÐï÷ÐëöÐéö "h¥½‚GõqäDTJ²4†6`´µ>�Í{è/>‰´}‚È!Ý[âGÇ Í©»7¦p¥�4G°ñÀkeÓfžù42$÷]¬àÃ{U1&ÿýƒ{¾(W¤ˆÞ?®Ÿåê‚LÑSADë\%*ci,3fuŸ²r½ç¡@)&¥yƒ[§ñs×þalÚºZGeiZi�Cð²Ì%œ+�rçós"øü\[Øø¾£ß×9ýp¼ÚvâÆ8.5òÁ Ò•i¤+§`²^øÖJÃÄuب«#ÐƒŽØ¡9$RfJi04ÁÚâÎü3+Öµ1=¥/9Ô°ævp?ªáIïðWááP@@@ÀÅâ€7ØBe å}ôÕA0ˆ¢iDµyð4oe>0Ü_€š´)T€Ìω¨)KyF®h“Á‰!^?+^äúðëR*7¯ÍඃÏr‡eA>ª#äv( F%%�lF.“2¢÷?k>­•Û…Îëc}te²ö·§ß¡Ó/CØHÍ细~sð–mÕÿ{ùItí@k…û^=†»÷×±²ÔA§ÝÅ™³ËøÜÃm´;VöR4O gt„·¿ýKqÛþ)d™A¿ßG�¢Xöºèt»hwÚXXèà³Od8;¯!@ãmíÆK‚5,.¼~ˆOuå] ñ£´A}|7êcûq©‘´Æ�4‡ B'í.C†�·¡9¹�=îs‡Fy®º)˜j‘{ �“¾DXîéC}5_Êi<= +z€ù*WÏ2åc•´p2á@EqÈXæ�FûIäÖ…ÞÉ-yšHTWWYJ ê¯óv¥ó*(€å—À‹Q{é%�ïT& `|�Ʀú¡”xü¹Ø¼£�{6!©5…ŽrKud¶h›0ífV§áÕ0 àÚÖ,¼{éÅ�½âæF m½—…(]žFÚ>kB7rAP 6jÀÄ5X�@)GøèÖšâ|Á¿7‡ÎíçÍÑë�Eáÿ£c§R¨™ ‘®:J¿Àûp вf#€Ÿð�s Ïø7~-øÏ( `=x-€7¨ j re�,á»8ú…?P\Ë%ÐêÞ?RðI& Øìf \Š�BÙ H&d„{I!?˜%\VVBÉJ ™øáFr:'ü$ï Ë à‰,¡¤Út¯BýË·ûÕSöý)ŸÙM`ižWx é€%13)€4ãF;K×59²už¢NVwó]ý<€‹uDËä € à'iÂe)r¿ à'Ì…ç$ @ë�a(õ&X{g™ Hæi–eUó¹ wÎBá¤#$�¨ÝgÄþƒ{ü(]- Ï §‚¨’Õ.tž0£™Hý: åÓgFyA9Kj&Nz°öP~ ºU–ÊB@ 1$ÁB£Œ”Ë„¯ö1T7¸*#ÞJÑ>ÆêÚ_ž|côüÊ·¨ÜN ò¤�¼>«4®b„Ïwã�ˆ#…Ý;j¨%ü~Oœîàø±ôÚ=¬´Ûøü£‹8v<ƒµ241ÙÄÇþâ{É�v�ãáGO¢Ý5¤9Ò4E¯?(Ô@ƒ~�NA¡Ý^Á¡ºxâH„ÜÀ@“míą¤Kè-<޼7øÄ�uÿ*úüDõ­Í÷BÇ#¸hNlÆ]·ÁÇÜá@iUQ®š= *IRÊ?Oå{g¹Ý™î÷ÅDøºs � wÛ½þ’MÔ/ˆ}ŽH43�?�S9²kÈžpîX~_~ê;xê(ÖOJ$Œü™Ù,šL¢Iln¿Œ’1ɰ{g„¸Û%�gá$NÆPŠ­£ä{”Ö“Z„½G161¥"¶Ô?‰þiP;›Òãù@×u>?gÃë_@ÀõAµO=üuYw¦dUTÃÈŽ×Ë+k2¤íÓȺsÈ{ó!MœŠ`ãÕ`ãÆùW"m¬g³J6}´øÂd Kö�DôÀ²¹<›¶E=@ëòD_G¿Oк�?oðó >à]ž ¿è€€€€õ‡Â�ýZh…€€€ÂvØ™èaK�»(Oç+Œ”:�¤¾ìÅˬ÷—™˜+žJ†‚�çÓ"@”gpÍR¦‰1¢jD„|,ñÐ�M¯© ICmKõ+ñrua�76Û/B:!cÈûHQ*$©M(P+˜·W™•îÀ 1+øˆ7 ‘_²÷‘ì{Áž)·ÙÀ¥T ƒæˆ ÿWŸé}µ’*)+²Z y­éоºpóî|Õ[°q< [˜_Jqú\7ílÀñ>sx³ç–Ñív17ÛÆC/c~ÁÀO!÷Gð/°{×$|ÌÌ®àÉC³è 5Pñ¯?è£× ßë¡Ûï¢Ýî`eyŸ{j€c§£ &€¬ ¿ø Ò•!ûü zº·(GkÓíˆ[7àrb|Ï]hl˜‚�ÎÌq,{ÕQžŽëQ€¢'ÜcM*Ðï‹À‚üîúÒvwº>'Ä™Hö“S¤ñõÒDT?rÈãƒqõ Zº)EóA¢ú3ˆ*("vÊÆ ÚÇ!§Ç,oøÊžêM"úh æ¼µ •S°Ê^@,e»ç�7cjûFDQÂï>yÆê×ü8q á>?Ç„©ù×”õæhOö>8$C›ÑÚ|®˜´‹¬W�A_\Ÿ¯kèˆê@áé“*âC ÿó‚ A„ {å7ÎǧPAÂ#“ó¡‚“L�•ä)"úŒžŠ>nþj= –Éoð~ÿÕpÀøÓà? €€€€Ë�;¼ J�øqwp‰ü‘AÞÙþùt4�(é³óE�cÄ™ÆÜ€n)§#¹Ryð­Ü�¼$xIÛIDLj�ÈÕEå3²e· Fü°”IŒÿ�}0ÜNª‡ì»Q¡]è3~Ø]s‹H"‡H©%©¿ô}Óå…¢…+‡9£g—¶$Ÿ<ó-z%{=*ÀêY}¨0­½Zp×­ñϾr7ÒÁi:@–gؽ½† £ ŽMw¡”ÁÖM5vN¯ŸãéÃËXž_B§ÓƉËø‡Gºè÷-à�ßw¾å÷¢ Ï9‡§Úè§i–aÐO1(ˆ >º½º�"åÎÍ®àÑ#c°v/Ö†Å`å ÁšlUâX;Ý›Nb4&÷ iíÆz"ª5ÕEª¶¬×Æj˜¼ùÕ¨ �ÃGoþ æ_xtý@²_‹•SDò>ƒ÷ͽÊû‚2DH�&§µ%Þc½€Ø…ùgV#�Y[Ð8À|‹ˆbmÁÒá±6`ùh¤ÙVì ©¯å©÷$ÈŠ#Èä;oWº¶# ÜI€4É>ukµ�Ãäæ7Þ´ µzKVÀr’GXçißøñJ �N9ÕO?¼â\�µö—^øÈ`847݆ÚÈv\�0YÏ‘Aó…JȤm\ÓÐ 7€BåÓ€UŠÍá+`‹ àlÈc6…$reûmAüD°&g"Zw-¸‹s1sk U"“!1@g¥]¥ÛPêý"T�øð^ß ÁÚXvåýb—p%‘xƒóŠW÷R«Ù+3oq(#�ÐA”œB~';xáR@Üs3•¹?)�ØuøžÇ¡l¦µ@ˆÈ�Lwz™é7¿«;Jk*ßAÑìuñzÖX:\‚`Ä.\%_Š m€2…߯¿oÖR�ô]¸s¼6”S;Qú#ªcòɳwÄO.|—˜Jl�‰d�aXãJbÿ¾ |ÏÛïD?M‘eyA ÒA±Ô*Çþ=-ıơçW°eSŒáVÄÕ<ó<ÿâ":K+…‡Ï“Ï,!Ž'ð»ÿõ›PÖ?r Ë™K Gþ@ý"-\�NýA†³3MFwÜ‚¡©�ð±|ò9¬œy/‹7ŸúZç®þa j,%aK©?/3ø/!€þoR‘ã"É^î»Fä}9 O„�ðÉ_NˆÑ5„nÛŠi?9©£ø$ê“}5KUÇQn{eÿ9*cÍÉÜÈWÁo™ðqªFÄ—�Ï>ñÓа÷à8†FÆ•ÎZéôd¿7"{´÷YXð €ÅðZpý@þmwæ©O–Ž¿ô€¡-¯DÜœÄÕk2˜´SAÅ2ë />w`óÁU“Æ Q¥@G@TC±Ô1,4³—#+Sc2(h– Û-™èÔÚÜýiÁ ÷NÙCs5˜—½¾(ç!äTB¦Xº?³b©ò u“ñwM¥?�êè5ÖšcPuâ'ð?` kÃø-? àtøõ\(üøC+”c¬}À­^ 7!:¨¤�tŒÿ�& Ï!ªÍB+K»(˜DD»‘ZiŸˆ b@ŒÑFæ0’@†LØøªxj)&få š0«ÚB‘åÔq`i{(U>¤Š‚@””>R¸oª7…éšÖ'�!È®Kuá)�èÁS¾9}G€ì­¡R£ë>ù >¶òve0zµû)¼ï=¯Ç¶ÍÃètÓ‚dIÓé  a�¥  µ€›v¶ÐéfxñD{ol Šxùùãœ9µˆA·‹]»Gñš{îÀ޶£*Ú�>>ÿØitú–Ô@i¡B·ÛC¿×G–'h¯tpèhGÏLÀZ§äÉÚñ“uÏÒDŠŸ òù‰GFМ¸:Æz!ndN}dþ“™{îa Væ½É±ul:ð%ÐqBÏË ‡sOÿ=lž­ƒhú‹)àNÀ ËÓÒº>NP*Âë÷h«;kÉ~/’š;ÔO%)œPæ¤�Ü Ä/ùÄú1ª'f„}¢"TP¹ë—´ƒ82R›ðqˆÎY3œ¯ ëûàùã“öÓi®®bÛäç @ ¤•ÅÞƒcß´ñ¼Ï�!¦ð“JÓÁÉÇ÷�âçTx� xy@&ë=´|ìo_Í'�ÄÚv¢Ú®Q9”u`ˆ‚µ¹SÅä€ÉhÝšê/ŽJ9£é³ûWx(�'{’b’Mær·Nö¤Å6B¸òG©â~åLц6”ŠŠí®|:†æíùäg­óýéÃGWEY¥^ X"€ª“?oð ^�jø;§z8üjpµb'€/°ð¡ªl"q%yi?ÅÜ4âÚ ÷` uçƒ#3*‚·A è>hE„Ÿ®gÕT;~Ú#0bBù8ìzRº3¬¦¾÷í¤´B<=šLúT"_J|8è³ÜD‚ùÇp5Ò ^P²)9™ü²üÙá߯ â©’ÔÙÞPý£§Þ¦fúoU@TÍhÈù]>lß2„ïÿw¢^�Ñh$h6tz)ú½ƒA†4Ë ¨?H‹åÖ©[6Öqf¦�no€[¸?�1çf—Ñïe€±h¶j¸ï¾{0<<Œª89½€gŸ_(ÒÂeY^”= BÈØZAµÛm,/wñØs#˜>>�ÁÊ‹€µ/‰øÑõÍ�×·b�P7#Ûö¡5¹ƒÅ»%äigÿ¸”.î‹×(H¤´³„åéÃ0ië@ÍŸ”ƒœ,¥VôØfÚ.™üS29ÚN�·¬v!ß3ÉM&�9aáyÉ�”òÓ#~}8w*]Û#ÂéC™…œ•Ó�ñ£å4¡Ô'É— ú•õ»ò6ŸÔ‡p>µ‡�ÚÎK•ÇÎaßóªÜÙö]-l¹q q\+UüpB’'�ئœÊs^?yxu xù@ò¥£;kóÞ¿Úvo±¼~a‰t±Ƥ°y)d2§ŒQ€ŠPÐ!0€GÄÐÜ뀆5©SäX÷§F1¤2ÂÇ#�˜ ‡%gð3¥Ò1p…žWëø¯,4 ùuÝ E}A™T‹áÖZÔ²�»Ágûq}Òš<"¨ñs#€Ÿðu¨†~À€€€€@\ P^ kï‡R-8Pl�Û(0ð4p<æè (ŒÒÂHÇ(pRÄÒ�Å6Jò숪‘ uTI€D�*“ Ÿ»ãEòˆŸ'\Vè*ßè v€åíáªCmHmRMõ$Ã'Ŭ¥m’ßçôä6‡¿�Ê`�O~ɳàý 5oqßç<°=¹pcòw3ïÖýlOu a˜¸†Ë�|ÿ6Ü}û&Ôëu$qRAÃC5(­ÐífJ  i¡Ä)ÒÂÁšûv61ÔŠpæ\CMU�G¡ßO13·‚<5°¶lžÀ½÷¾I’ *žxú4ÎÌô0HMqY–ÁÚi�NGCgéEdi†c's?iXš7 ñ£"…úÄ�¨�ì_OiU‘ºmd˨(FUÌú,í\Xe¦çî8öŽÁÄÊb‰ŽŽö0•$µ£bÑ×Çr¿Zо/ű²:ELƒYÀOÇ&÷9å}5ïXüžó>“Ò¢±iÄPŠöKUDhG‰°`¦LÅ#¨{ªöÁrê;Nð PðýòJWàc‘„Þý�oL°óæM¨7G‰#Ãø=q©"H®ÿÏè†×µ€€—%“v>³|ü÷ÂƒŽ›Úú*褅ëN"I,Œ#~c�J(H"Xë+gÜ�@ÂÚbÝ:O>IJò©‹§,³…zGGŽ�h߀þ\#“óÀæ\Øïvr "’(«¶quV&GͤPÖJêŸÏX¥Ü³BP ñÓð¯¼@k£ àgÝ¿Nø¥( àZCÀ—êÀjNqŸÚ.IqyºŽR+ÐÑi¨È¸Ã½€ˆ …;J<éf«�>~ ²tf:"œ0ªxóý‡|/ ¦öá×�‰ #x_P½éš¤r*1ƒgK�´a‹�òˆÔ_ÌSÜœž�îÉ»¬¥â´™§yâi“?›~ ~qù_*c¨× "Èêè’¦{ç;v¡–ÔP¯×Ç ’ZõAifÐí¦H³¼ �ÒAzÞ(‰MádŒÅìü ÆFêˆcͽjVz˜_èÆ@k…öâ–[öMSYfð¹ÏŸÀJ× Ë,,šèuWð7ûÜ´‹›Ÿ:mð©‡2ÌÍÙ Ä�û^Æ&пJÕÖÕçgdÇ-ˆë-\(^x ÝùÓ—z¾o7îýÖÜíÇÿ›©ôePºHRJ2®¬$XÐÂ2"ˆƒû¨ÉêËóܹY ‘(µ¤œÆ ýŽ‘‰XïZn?X±¾:’ (Ýñ¬?`ë¥o ª¯H‚±z—õ¿"”àƒ�lÌ bʉ6¦´äÏ’œ ®ÞPØ{p#cãtDñO D_çK%©„çcÙùü̅׳€€—1äÐ�}æSƒÅ£¯…Õ0´ånDõÑëTdœßŽrD�#‚ò”66;¯ô�5ä‘C‘>þë€Í: ·~~6&c><–Ûsš~†RXãʵ²½'ËZ fßéGŲØï†~e2$¤üaÈTô©Të×Òk8ĉà둳ÕðßQt,üBp­cPv³Œ�ì}”b™½dбò65ÍA)[¦>áªXÈD�83BÀ�<1*!Ü œ^ûÞÌ�—K„„H>Y–~‰°ƒ§�²!qå1rt(¶:!UÞn)yŠ‹~ ®ýàÕE•‚}µ�à–% Ò³(R(Qy)ÖÍâÚ‡¦¿+šé~¹‚Õ¨€¼Ö,RÃQuÖ͆Æ/ÿÄ~z¡ƒ<×( ¤†¤V+Ô@Íf µZA¡ÛËÐí¥H9Òì‹Ë�óJ1>ª±s{+íúýFGð ž™¹6fg–ÐítÑjFxå+âÀ­Póó<þô ÒÔàO>ô¿pÓž¬ž|:ǧ>›—@Q«Žæä�ˆ’ñKïóS…Py—6¯§^Úwú—zS‹çÅ‹—�WNº2YðÞdòÃZ�ø�çÌl=¢C&Áe"^P› BHh cXz7Nâõ�r_ÃSžq·k(Ú.–ÏSà¹m>1^æ1',‰ˆS2ÑG¤9O‘)aWŽBLMʦ�SùÀîý£˜Ü¼ ZGe„–àû#A>qØpÀ‰�V' @ îrþ ^@¹ÍûáAé­Íw!nNâú‚u@Dê��…SúŸI dŠãH˜kÏ“F Æf|NOÇFC$A¿õTEºXwd œ"¨lþ'©¬ñæ€Ûå1ß¡ÈZ$Y59ôLOÇ”wÇsˆ“?w;ŸŸ×¡>ï|~>~™Wôë¡^:nð“B�6IÜm—mJH @�„Ž»Ð «¥;óI Ì*¶køÞÖ:Ok–æ¦Šï •‰’À–Ž_Ëm~=|Ÿ#¥Ø}R�(Ê’aÃ’ç…‚�¶”ø¢{‘É0¾ÍO÷äû_ð€° ¡-邾ÒÁûžEu—œNŽêæ˜ó%‡>º2ž|ôÜ{u»«ÂÚ°J#¯!OXOlž¬á?¼ç¦b}q9à 'zÐ:A’D⤆Z’ ^OÐj%¨%Q‘®ÛO‘28"¨XfYŠ�Ûj˜Kpn¶‹zÍ Õ¬¹tp}~î–—WØOôÖ[ïÅý_ö\Þûcÿ[6-b-<úxŽÏ|.‡�h4&oBÒÚu%|~Öô:÷Ä']—²¾0QþDgëüû—o:ó=§2$hl¸ÏV±¤þÊO‹é¥³ŒðáE~èpÅ”?¤„Ô�Õ0�ûZ‰È*#·xÈ�¡�á};, ôUB?ÄÔ�Õ}ÐèéXiº„ÔíXчÀÚD¸µâgy<)È*j#ã‘1œlrí¸åÆ&¶íšB×KHrº7ZŠçÇù“…W°€€@ùÁ{“vZ>þ‰WC‚Òhl؃úø ×±bMæêe‰è)Èž( `ò›·aLΗDÖD°&w>@¹§¢r­5¤Â¡‰'tNq�¸¸7:Žæ–°ëòW~ïO·Ü&™Dˆòâ<Åjèéä!«ðjB-@Dülð3ÞQñ!9 àGüçà?@×34€{¼JÕé圳 2"œ#_£¥OBéJ+ÁŒ»„¬P< 5$óqÙ—§Ê t¦(âçsÿ9HÙÂUžçDSépSÓ€�Û€]Kø¥™êþŒóÊŠ!Hiþ}•+!¤»’¼NØwã{zpÈ5÷Ë–RßÅ?s{üØÂ»ušM¢¬Ž‘5†a¢ë�ƒ7 á=ßɉ�ã§z˜[0ÐQ\@I’)âjõš�ÍfQ6:]G¥ŽôPÈpËžj‰Æé³Ë˜>u ½•YÈ?•&¶ßx^÷Ú=˜šÅZøÐÇ^ü4´Æšèt,þÿßKŸ\ßŒÆØôõù‘a±ðâèÎ�ZoŸŸsƒ �_š»óØ_BY#ýF¸ÚC&E˜jÄ­—:¹ëðþ‚Êäבû2ßïF @d?4 ÔÇZ®ÈÑ´�‘ãˆê�üH“¤CªžþŽ]‹C ¶\=xÝñSÖ²m2%§Ñs»ØX@g‰Ê#9ý�Ö‹±{ÿF4Z£^=|_iLD²È†Ï¹toíðÚÀ ŽÎÙÇ‘®L2ŠTpÍM·#ª _@¤r$‰µ”Ú�¶S['Ö¸õ¤®24s!­GúÐU”Çç_äÍr•Ï0ÊÔF.�Ýeg†1ùù!Jà N{ôŠ$ WQ$¥¶+ –ÉëNÁó^#X)€øiKá×puBá'‚( `�Ñp?€Wz&ã~ê·ªiàDˆ ¡ôÐ˼•=hÉ•(€#rÀ ®i#Ä »8ÁJi�Ä”s´òlpî‹#‘´`³êEï‰\ˆ j OG {ùx—ê#0eO#ˆ˜’ìmâÀTQd~OPLàÓ?ÖOá¤5/ÓVcUí�N~]tªý�ÊÚ¨š?PY}è%û=ðº |óWmõÏ<߯ ÕˆâIR+þÕŠÔp1Í£Ãõ‚ê2iáÒ …7PÚÇ`�áìÙ9´_À扼œ¹åIlÙ´{ölÇë_¿ÍF ff–ñ«¿úU¨c€_ÿíA±� £9ñJè¨y…}~dØ<ÃÂÑ'Ð[8»žA›ª…�,¾zög²áA�“8ô<ÖΞl¦¶wáÿ.”H­X"B9 Ý6? ¦@ éÏ8,Hæi™ˆN•8^ bŸC}ªHþH¤ŒT šZì\~� dŸ0ªˆL\Écˆ"k\„‹Æ �é‚L ¤íî<>¶Q=åÔotjϤ¦°çÀ8FÇ']½ ÍS»Éã™ç dKUB´­íˆŸsá5+   dM†•“õ@Ô@ã{Qß°€º|€œêǤnô506s» h¨4(ÔBÖ,Uœ#kÜ�HÖ›NJéäø�R€¥jã~?PDèDÜ€)ÊóÒÆ)V>½Jx¯näˆò¢l€2X¥Ð�j,U(Â�·¬yÀûìE5ü)€ð\ø( àåŠÍ¾ÀNP �eª¬þñ�“:gÅ‹€²ìb<˜EàªÅ‚ˆ’19 Ê)‰h›œú‡ê&“þuYƒHj PÙ¬ZrÔW¦JþEœ()óáÛ‚öˤʼ†¨žt]YåÀ+ÇïÔ¯ÝÁÆo7ùÌÜÛB¡˜^íÔ–Ô}FjâúŸŸüJ=Ýù&e0l£*7m)”ój]tÚ±ïøºí¸ïÕ°z}ƒg_ìÀ"F'TøÕêhÔcÔë1†Z5´»)ú½ Yž£ß೟“�çÑjX¬…n6‚¥…VmÛ¶nÃ-·lÇkîÝ ÿú=¿„Û2È�@ÿí� š“w ªO]U>?‹Îì4–§ä}¬Òöôç!O»° ýÉô®Ñ_Ì“HÐú™ã­þæmXÐïYÖó±þ…“<ì�tÔ�Œ`@œøá]'n8¹ï� !¡–>éCÇÒn"~)$S1¯8òòÑ®6 ZÈøÀÇ}ظJPÀˆÄEä¢gk΋•ª~h¼,�wÞ<ŒM[§ uRæéS®ü‘IáüÔ׎ŸŸ€€€jÁ¤m´§‚Éû(CTCkÓmÐצˆü|”l"‚ätpî,Gål(cä{0Þ°äˆ"ÃÉŸ8reóNžH>Ыúùû¢w݃S3)k§�bY …~”xª&ºNló#5k«?Ox€¿¿¾€€€€@8{@=`ƒ‹¡Éb‚dgás 2q(}Jw¡? Rº8p^6Wêx()ðVâKA %�äâ•"¥Š_iß È �4·JÇZªµ�%Ööƒ€Ö”zñØrÿ‹’s©.LiÕ>Òu%3rªóýË–RïùkDøI©ž˜O”5&ùø™WÅO/~‡Jí�þ#lTeràû}×?߆{î+Òµ•áÜÜ'Τˆ¢I\¤…+H Z£VK0ƒ¼7ǺB ¤v,þýÁ—Nü¦ÙTkK�")Fx7™(±‚Ò�¶°”g"emm) Ä}Ï80E�¨þ‘ûSÒïˆ>7"/A¤‰�üfŠI�„âåÙ%“Ö«¥ÃôÉ ‰ø’I8y›¤†b¾H´N„��ÀÔ¶vì™BRk­AÆX±9)‘0ä„Ò Gþ «T@@À@ä„ö©‡H TªÚ‡ú†]Ô5ªþ1ŽÊáÒ«�'Sˆt)”?DD‹.È ²Ô4pžBñ"…`aÝ«ºæZðLÑ”Š.÷„¥¤æ¡{74<:e;‚‰ÊÀùò£î^¬e¥¸ã¤ÿ=ó�º�Ý#?’´b +A&J�Õ‡a+zÑ ·|ß7ß‚ng#ÃnÞ=„µpäXKm[¨�’¤†8)TA¨% �gÏ-`ú…¿E£fQqÒÄèH³Xow-ŽŸ. ˜šØŒ]»¶ch(Âßûê5\>ñĘž�¼Ê|~€|ÐÅÒ‰gÑ[8ƒõ‚Íè/<‡ÁÒIâIX�y3UûOý·lüSÄÊ�bÎ9é–·ÕÏ�Ä19A³>Rø­0¢[èû5 d—#{߸²}¥e9ñ,“¬´°ÔŸ+«%9ÛÅ7S%¸;u%w1¿�DB�¥+ó_sÛ%%¥ õ*iÁˆnI1;4cÏ�I4‡ÆWWûÐvAý#OŽðϧcæ<ü.žâ0Y÷‹J bI(QMÝ� ]K 'ZO]—~^ñC�°Sû�úÇùyª ø>à�¿´€€€€  ¸0ì€Âƒ€Ú^I$§…“N…žÈv §µÀ”2hŸ¨‚òÐ6<øèº’ F„L€È^ô—÷÷�Õ/¬šLéÂ÷qòG6‰­r¢Ë'�„í‚g”’ÌÔ}…“DQ=è;•¼¡Ü:ùœð69OEŸ˜yEí±Ù¥ŒÝ†j$`y^ùä¬Ö*<‚¨bDþüÐwÞ…WÝ>‰á¡�š‡1 ý~ŠùùY$q†};[nÅ(ÃÒJ†NôD…(·N<ÿ)LŒ\ÒLáøÙqd Ï ¡†¡ôq‰GŸß‹gŽßx]ûüd½sèÏ? 3è¸_;q#UaGjÒûª-ﳉ1¬£¤ÿ!üVX_‰bdEÂCù*@ÚÆˆsRú ä¯+––¢nIRúK‰®âÊEeƒÈyŠ–±~Ÿ~ÿÖò~äcFçJƒ”»‡ß§Êû ²‘›_ HÇJpurGÐ5üºÞ°wSÛ¶"ŠcPùF"�ªúú”�?€çÝ?^‘.�úÿ`ó>VN}f°‚jPˆ[‹´pqcW!ˆ´q=¬±)E^@Έìì²âx7ŒIäˆ!Í�06ƒVq±T®]œèUòþq§–�šöÓœ D )í݃«P>@”ö LŠª°J#�0°tŸîª/œ­ŸBœ§>ô€ðÇÁ. àºP( à âN@½ Àpå�œ‰KkÀŠƒo“Aá z€†¯R³™ ^7ògN Ñ:?~-ß ˆ�\%{Ö(®Ê)À®¥Fà¶$Àz�Òã•(£øv\` óû!Czº‚ü¥|ü;uí#§ƒcÛ$tý¡ùïVíl_²²0¦Ù–‹$� 䈡*AVGÈêC0qýüõ~ú‡îÅo¸ynñèÓç°ç†aÌÌ÷pôd€ÆÊÊ Úí4ëÀþ=È"…2œ<ÓÇÙ¹ ‡Ïb÷¦¸ÒHóú©×ËëÒç'kÄOÖ=XGþÐ/°,�E£�MÜyËÜ=ÇßšŽô:<%"­ùÃHV±¤S|§1—f®X®Iv(ZòížFÉý!'ŠË½pø~Œ#»¡”÷Ûgé0i›_g(îDý)¬ E%%”¨‚ô‰¡oôûS”öén½¡î Gå0ògb*Á�û¶ Vr'И²šˆ ¥{3â3AÛN8 ^‰.’ú¿z!éV;gEÖ�C%Pj¸‚J†6_mA¤Æ1¹ûÓÃÀZ·�ˆò‚áÛˆŒa–¢pÇ x�¦¬ÚìÏv®, ’Ý:íçY³ÉëÇ)rØœ³´ �õ L† �Ѳ¸ëæEPYŒŒb¯5›#.ÖÑðÓ>Æ¥€€€€�. `ýPƒRo€µ¯…RÑjþ@¾õ„xç8øq¤jjJ®~á13Á£¦XÊê*•<<>*)™d" òI,µ•Ê�'þ£8–ÖT† þ‘f³Æg¤–)Pé×Y˜í/§=âAjNþˆõ'çZFÆq_#·MqÓ{Ù}ȯ? ÿhá{Ôbþ•Èt’=Ï/ìÓÖ¶.ŠRŒQPÆ  Òæ(lRÇ�~ÏÝxë»Ù¾Åå>¿¸€ÛoÇãÏÌca9Cn,æçç‘§mlO°kG 2¨•÷Á¾í\i:q9²ïúóù1KÏa°r0ö¢É4Oµ¦^1–Ä£Û`æîÃÿ(íwýšï¾#X*7Y‰£xäÄ]¿¼7–½!¨\ä%»¾HÀ[[–•Œ®E²@ú,¤Ž´€—NºšÃ'ƒÅº9ÿFåsÕªíDÔPìÜ©9¤±çÀF �L”¤kCég"‡d2�^ð$€ùðð  ·:¥Æ¡¿xý¹çIR:i¢>º Éèv(]E�¢lÎT=&O¹ãÔ?°6+îßšŒ«bülÅ>ë+ì‰,‚ügÙœF0&c׿ º?S¤ySiŠ®YYTC%°Ö� ×Õþë•‹º5ˆ¬ým?`:üª‚( àÒ`Po°_P•§}ƒoEƇˆÔ,€s€’Ó“ù—l2d“oÉÐY$9¼Êj ÷Ù8RÇóèðg{û ÂÒ"ñà.÷�(÷ä u+xYØï�òÕH<ÐËîËKÿ&rLô�Ú�Ö!¦\r××Zø^µh¾’”9XŠlïh´´|›ÔE�@Å?cc /Ê(U †&ð®o»ÿü­7a5=¹Œno€í›‡ðù'g‘f ƒt€…ù(ô°s{“jX ð'ᆩWƪÂû§Ó¯_?>?°HWŽ£¿ø,¬I‹‹#"}²>u`¡ÑÜq ̼êÈý…È'IùoÆJ]'‘­21ÄH H©Ï*¤<3Ì7Lìse¶ÆW¼Ðy’'_²¾SN‡)Ï�ÛÂ�ÉHë÷St¢G‚“Ê”ú—*>9"y#ö»²Õ‚¢` )ìÙ?†ñMS H¦-#øå±RÞ'¨�ÎççDxí X'è^ŸÆEÀ¤mtÎ>†¼¿„ …ŠÔFoDý ÿTTÃ¥z+ĺ)Sõ8ÒÅ~"@1cØŸ¤@ž>°–ÎWJƒH§ÜÍá3ìÚPжYëûq‹A“A§]¨¬Ë¼2«Âªi\+Jÿ³€îŠÚŠ-ck¾Ào…_S@@@Àõ …Ÿ }|@@@ÀU†Ý°öA(5UE—H Ú'g¦q‡YZ‡²€= ¨eòB�‘òƒ�<íy Á8:�Êc °}øª?ȉ* _Dê!w¼˜æIy)ðh› ¹]Ü:•)‚UB|ÉåŠòÅ Ò9ûç®Ãëâ§�“Ó>É  ‚ZÈ¿>b�ûKiÔéï¹`5�¶çyÈÜÔVM —6ÇðŽ·Ý…×¼b3n»eq¤Q†ÇžžÁÔd½P=sd©h¢n·‡Å…9$IŽý{†P¯Eðñá�|ã#Wg&ð7�Þ u]øüäýYô柂I—¨‹"¬ÂJ2±ãPstÿZE 8Ôm3ªBA>ABû‹ч†«_"r¨Ÿñú8¿€·Müí‹Ä²LAúÌËwÛýþT÷b›O»^>Mæj(Q-È×eX�CSå¤8'âK•?²úGéµmW[nØ‚(n”�wœø!ØJÄcœ§ÂaYxÕ Xèoÿ š:øÚáÍwþ.½ù#è/<ϺíÊP q}âÖ&$CSÐÉ®\*7RìÀ¢Øf œw‘D %ŒÉçÏWÐDÜÐQœÈ¡yÒ<9úÓÃ8bˆÒÍÇ7'&²TÖü}ª#�jÈã:ÏÞmr&ú§!Ùrû?W75hß§ú+Ÿ ~?� ¸|P°ön÷Cë¦÷¯¦* )Üf~ÍPøõá6Ê)àä`]ùŒhNz”=¥wòR(…ÒŸy÷n%£oZ—îÛRY¹Ö˜’ «eþI|Ÿaž<ˆ)eò‹;ɤÞþöÞX“ãºïýõÌ|馽»{ïÝ»y»ÀÄ%‚˜ƒDRÑýlK.¿rP²e–«ôÊrà³\¢ƒüüd׳eKz”mI–eÚ ”,‘ ¤D$’Èi±ÈØ]lN7afúX˜êò©îšý°X€ýC z¦§§'Ü�îùúßçÿ9ÔZþuÉuÈõo><®FòÙs?¦@54ìþÆâÜL’—S,9hõê·Ü4‰-<úø2ós8lÖä]ØÍOüè�ÌL�päøgçºìÙ¹šaô%O8Íž�«xéð"ÇNöI’„…ÅºË Œ�&ìºnEiùæ7¾Nšð†’³‘Ós#<þÂæ–FÞÄq~VèÏ X9˜Kl2¾ê±‘µû¶§Ik’Zœ ¸ñÞr',´–QßÝ™ŠÏÆ©êX �¤õеè¡QÁmwÀZ‹ I�?46ÛðvX+`î�÷oµµ:ü¶b˜ø´¥zaíz õÂÏðXk!â��É©[®Ÿ¡Õ^Ø!®Þê]uÖ[ù$„û”cÀÓÀJü¼‰D"WNüùŰ3k´÷­Þñ‘ÿš4:\e¡²²ù2—CÒ¡12M62CÖ^ Ƽn�³ôqÖ=¹ëêC ¸2RT©ÆR·m®»B°PãTÀŸ_e4‘Ø:¯ÎU¾±98Ñ[p9ˆI(D?_w/I’:±Ë‚üï{*ýŸ:î>½Å(òÞ£ Ïy|»"‘H$ @‘H$yýhïcj Y´¼ñ÷iŽ.‚9¦Ta¡®’z¤vŸ HCc ·xñÜ•ù3û­»£Ç!hxÈÖG‚Yëþà§b.zPÒ• 6ëž¡Kkãyñ�¤vÀ¨³ÜñÄ1}ºÔ0ÜÅÕPH¤‡ÓÅs[h\ˆôö;7ðžwo¦×ïÑïõXY^æ…çyìÉez]ˇ>Ô¦=¶–M7³qã4÷ܹ¹²ÞyêÙ3Œ�flX7Ê0Nž^áØÉevïXÅÃO�fyÅRZanî\%RÌN·Ø¸®Í3/Ì1wj?o4ë7ldny-§Îæ=)ìiŠ~ÞxóÄù‘’ÁÂó u61b<áG„×&kYw³m´Öl" Öh¬»Œ¨}Wa¬M�×–éOn®­]É!–‚èÙÃs‡1nÂöC©s%é‰W@ï«®ÝÒëW÷h‚Ê4urˆÖ‰ ^5m¸EônݻԠÿ0n�6T <Ä£šmÃu{§›˜ÆA©w ÜVdhL M�ýÀéø9‰D®°ø3f0»�VÖyÛØú}ÿ¶9±™ËF,½¹ÌDlÁåb’ŒldŠÆÈL•š¤ÁÕBl� jýâbû@[ö5^�‚[×xA¡%� +¨Ø#6º`ôyég�µL™cŠ.}Ëåc(Ó¶ÑAÄz1„´·7zíÎ-âî×o®K&–tÐýD>X~Ð` Až–â[‰D"QŠD"‘ÈëËð`Gm< &¯P$„B4O’&§€Óh�:�'¤^”±uîÞ‚X耟µ„ƒ·€n‡V/ÃÜïÔ�Û¡�ÜÅy†Çâþ,êñþNÁÌÿºAÎ×¶ÒÊ|wOþ=é:áã Š ¹Ñó«ÐÜ�™ùò;¸0–Ò¢7Ÿv7ÎÏ]wná{¿çFò<§ßïÓëw+!¨Ûí²¼´Ìá#KLMYf×=Ó¤36ˆ صc–}7­£(,�î?Å ÛW1ÒÉƳ/Α¥0¹ªÁcOŸ#/ ÈsÎ�;K–;~–µ#Gy£gÃÆM”¥á…Ãó‹}ž?Ôäèò.F7ãü@¾r„þÜÓHÙ÷¬~.JüIÒ…æš�ó�‰m› n´‚1&|gT¶ Åbdˆ/A ¶4ž™ïWEÀ$ ˆøG8+  /,ÞM½¸NM;PçL¨uSYg(<;ƒ"Cl=‡YmÚ:‹P}~Ï:2lw‡··xÛ¾°… @Ûv­bíºu$IæÕ_ßò µ.ï§"žFw:‘HäJ“þà\æf²ÖèÛ«6ý“‘uû¸RˆÍéϽÌ`áЂBWqi{ic“6¸8×oX)ÔêÆ‰B€sõ&UY��cÝRÖülßh¸Ú—VièÖ “€;eåò.”}®›µ(Ó&ø^_ÝzØ%éýÍ÷ç½!4m yÿŸý•/�”®àSÀ||Û"‘Hä­�áS¿ŸB$‰¼y¸øv` rA>¡…�®{"‘FwZà˜¥!�Rp[+ \É…±/†Ä¼ o°BñGÏcêãd³ùëf³×Z"y­f ±nVïɧÆRÈ‹Œ©¹v%PøP!È�s¢â@m|tÅ£¶�ß$tw1NgÝ“æýµL­åŸþÔÇèõsòAAž ò�‚zôº]º++,w_]zŒvŒ�ÇÏŽ05³‘õ³³ì»yÛ6­âì\�—_Y¨â%Æp>¬�í?ÅÖ�£Ì/æ¼ðò"bzÝxè1®ß0ϵÀ¶í;h6›,uŽÎ¯a¹—òâüÎå›smÅùÌÑ?÷$å`Þs‰‚½pwoyc|ÃÑΚ=“4Ë.Jšèw}Ë} |we¾"¬OÈw„nÿG+ÜvhIm;ŠÇ„ àë�üøn"aû§Û^'Q׊gí㞣Ö!Â…#„ÔÇAÃs�7$æšæÌlh³qû,Y£ƒâµùµëõy6ìã‚Ô:Ñç™èB'‰\ñç?­s X I"�öØÇÓFûo�o}Ƥ׬bÒis¬Z’*'iŒa’ô’,€ÀàbU׎ëªuíªmAÐí‚p΄µ%Î0~¸R[ ElŽ”}¤D¹²ÂO‘6õóë9 @,ú3@ªu“¤ž0$¶¬òl™£?Í„vY eñïóÞÒ¯£ý^ < œ‹o]$‰D(‰D"¯?)pð z-«0øè®!¢‘¸Õ$ðjDä0ù°7=‹¢å=·Gu3à !®¼øyUÕÝ*ªÔ@7˜@¸±CüéÕˆ9ê‚éµc"é¹j,¸t`YˈÔÖì*¡‘ðztš¢ÞÖŽëß7«@�ceËç&“Ò®Âñßí¯²wÏ,Ï=wŠ“§—è®  Š"§×ï3ôéõzt{]VVV辺 úLMæä…a¡7Áú [Ø´q†w¼m«Æ[¼xhž š�1d¶ a-eY|ºè- , �gãÛ‰D"QŠD"‘ÈÃ(ðAà¶@ù© eŒ½iV}¾© o1æx¿fø t=Þ Hø»VRQÃLôÎR³å’á"—ºA:¿ ·€a"X½5”Š@Š›–‡£V?xVT"R/ðyî®%Tœ |lNÔòv†÷æ.L KC Ý4é?›Î-ì½û®­�Oÿü_Ô}�sšoXC³‘p>>õ¯þÛÖ-rÍÑÞÌ [ÇXê5yúȦ�‰ô ,–›ydåo½®q~Šî1úsOa‹ž/ü` ðÚ±~$1g[Ó×n�ì¸Ù“pY¨ 8}¿ñG[šð«·TÁÕAïç|–.0Ì*²¶=Ðk=¿à<Üíæk¦0œ¶Çš' ºî ?z*š«kȰ­ñžU€ß¨fݳ*Œ…éæ�ãLÏÎ’¤ÀE?õ‚Ýð˜?ð,ð"`ã§H$¹Z¤?ôK«Á¼=tÏé;¹õžÛ»§žø—#3·Ð[ÏÕG(VÎ0X:J±|‘2þ¡. ƒdMlÚBÒ&"%ƤàÄ5à—jÚņ¡õTðñ×#hKŠÐ, zð÷Íʃ@$AŸW‚y8ZE"‘H€"‘H$òÆs#ða`•Æùñc`w‡§yÛ¡xT‡Yñ* ¬_™ÛÃ@­ ƒ¶kZo’„xƒ°8tÛsùæ‚°»º4¿&ð¸ÿeÈà£ÎD ã�Ô# # lOèÚÊ¥:À è ‡ÇÑ¿®D8ð�í·xdá’·p™ü�¿tïGï ×/äégNöîšiµÛ @9rdŽ—ž­¬�ò¢`PÅÐí«´²²LeÔë³j,§‘ §ÆX7»‘�ÖsçmY75Êñ“Ëœ8½Â�7¬&äSÿïo²mfŽkKÆ|yÉˤfÀù¸é“ä2zÕãüØ|�ÞÜ“”½3�ðS-ˆ5¾TYƒ@žMN?>2yóž$iŒp…8—¼ôãý[W¾)“2ðÞq‚ØÇa£¨JÈùE-it;!À�†9ä‘P#©jQaä|Vˆ!a;‰ñë‘Ðí›8wpÖoÃu Úð]Â):J¢–¡¡xd<÷w¡åc(„…"ÐÔl§ŠóÓluê¬w.Æ®«ÖUœ®ã¶Oýøé‰D®®øóËàn Î:\É�oNíùî]<ø¥Ÿ*Wiãïcx½))–O0X×Í�™Kn½yCJÀ“Oãܹz½œÚVéé…Ðâ§3š²}÷4#ck4¥>î�¦ Ù�=<ÌÅÏ�H$ò:ˆ?)˜»Aƃ¶¿L|X˜¹éû>¹ðòŸü_bóU­Õ;h¯ÞÉ�”KÇÈ—ŽRöⱎ¤�4ÚHÖñ\´©�¦Õ:ºÏÚ¢J ".¯tåKµ±Œ´»VÈ\y�ùn’þ ð©tinÌ;AR “€+ˆY¹ˆæ^‘H$ H$‰\L`ø0p“f™aá€Â�‹‚Îbå$`Q†‰!œ´Ö•Úùgi‹x+Šh¢ÖEž‚QI�k8©»I\}CSðêÝ¿y3àÕýQ( ÃÐûByC×SÜc]Ðú*ÿ骨d¤ÝxDv%§¹C ˜b¹€öpüëü^¾ãƒÛ©ã…ƒçº‰Hçºík¥(,?òJ%õ{9ƒ<'/rz•%PŸ^¿G¯»ÂJw™••V¬Ÿ*8v¦Ikd†M›6±cû wܲk…Gž:Åçÿð~6­9Î[�ÇV~˜³ÝuW>ÎÂ`é%ó[ÖXý\ ø“¥‡;37.7Ûëw£\iè?ˆ”]À�ÉB±½x¬ØSAñDb_øE·Áb‰€—‡1º=DÈ""‡í_�/ê]Ò!xõV48w’š‡xVCžø¬ù¾ä"âOÐz†µaµ>õÂ�Š[I ÛwO2¹v]µ}þgnQ|�ÇG¨C£.ðp$~^D"‘×Oú•·kÚ±Ì}À"ÀÌMþ“KGøËeïì^\5¶ñ�¤ÍqÞHl¾BÑ=CÑ;GÙ;‡-z|KbRÈšHÚ×ÇÅ%Ò9¶q@„AªýˆŒñ©Jj—L‚`5D¬µ´4~%f?I>| ]šîš€“¢\�Ä·3‰DÞ\þi€"‘Hä-Ìfà£ÀzÔò'"Ó•áq€BjBN˜#”v>¨L@ݬ…¿Rt 0 bnÖ™ gå«è Pc]¤7Zï„10B·H>Fëö©ètç°Ö¢‡¨ £¼¨8äðî�šAg£Ï$Œw¢õ¨Ø£×>/¨($i<ÊŽäÙm,èÞbeñÝ*]šõÏOÿƒ{¸eÏ4ÓkG¨£,-O8Ùݺi²39Ù¥²zúÀ‰*6P1(èçý~ŸÁ O·Û£ß¯¬�Xé®pêÌ2­¶0;e9y®ÍêµÙ¸q=·ìÝÀgï~ÖvñVáþCãðËý+ç§w’þÜ“Ø| Hjcýˆ˜áîÞšk·¾Ð»á–Ä$)W‘¹…—N¤ÌAÛ•£ùžü!»©\ð­Ü۽РÈK}×*<+˜:�¨µ€ … 0Ô§õÖ?®Œn×⎷~;§õ¸66ÔåõÚ|÷oz¿Þ:�kÌáh¿ ý€ÒÖjþ¦ëƘÙ0Kšµƒú,�º´ÞÚGóñòC4¯žž‹3ž#‘Èë+þü—�ÀM¸ï`ƒÉ) â«ÀœTtÏ|xù؃ïÑX‹ã•„1\¨ äÄ ¢{[tyK’d�6·˜$CÄzŸ5îÜ‚y\*â8ë I ú€â¬‚ÔJ(Ǖš]=B«t®ßý$½·„/ŸÂ‘.-¬Þíõ›ê‚ðIàùø–F"‘È›Jú•ø"‘Hä­Ï>�‚Åp!!*|�g¸èã×#R€ÂJ·.ÞÌZùèzèòÌÔÅõ¨ÂYþ‚‹ºAóÒšSëÍÕÄ͸ˆuop$Œ‹äǼËð M¾ ¤„ñ{*4‰;·Z;@ôyø"]ú ³çäV3` °aŒbyñn)ó½\"ïºc–ïüÐv:íc£-î¼m­fFK+ƒòùçO—7ß8Û̲P^|é G�ÎÓëÈ%EQTV@ýAŸgž9ö$3S ýœœËXXN0i›F–°sýÆð–áOÛÇ©¹I®¶Xª„Ÿ¢{H.ÉêG L'V?6ºæ¶�IÒœ@¹ú�’¸ÔÚÕöéü¶Á“2!}tCÅRmÌô}tk„Ö)B€/†¸ò¸Ó$µ1rt³NR4ÏÕ[ÛæH ¢Âû©� †ç&2t�§GW¥ÔÅÒkE¤ÆzÒw\5áöùã!­žn²yÇ,ÍÖ8>–PÙóL©/sx*Æ;ˆD"¯7Ùýê¸ 0˜ *Œ ¥æ1àP¦oúsŸ‘¿»ðÒ&AR͉-t¦öp­b‹•Ô;KÙ›¯"‘’7Æ@Ò€´ Y Ò6$)N°À¹kC‚O}—W3B]»y?ܾ*Õ: ç¤Î,UÚKfKï{­k’9ŒùÿÀ @*m7°� “ îE�/Kñm�D"‘è.‰D"×M ïî˜ÔoPm@$Œã­åŒÑm�ÚxêKˆ=‚•|¸Ê„¼–¥M½@"¢G× àªP¸oó…ßÙ6‚îvõ‰[W´® Åa­õóë]?Õúl0I‚–È`Õ{Õ¿'^`ú`,Ô³JŽÊxãq¹Õ,³AЂ èÌúb¥€vs‰üè\ÇôÚqšÍ&íV“V+«,�öÝ´ŽóqôÄR~n¹±w÷lBÀ#�¾ÂÒRŸ^7§(K¾òÕ™^{Ž,å[Š/=v'çVs9ˆÍ,<Ë`éE’K‹õÓn==2³o¬‘­ÚÌëÈÜüK¿ b ÀÖˆ* )+ålùh¾o𥺃ᇠAj´b¡ Ý>:4­-lBÚKzn©½ E]@Š Û ×VV×ã¶­ÅJh „/J]p{/áþÐ2ªÕ1lß=ÃØÄÀÔ>_E.ÄšÊ?Æåk™9àqàLülˆD"o�ô0³TˆÕ8,æð€¾÷“À§VN=ù@¾xäNPÚkn 5¹�7 ¶ìcó·,ëzÑElÁ‚I É0©zLµŽ$˜D»t±`üù"¥Æî!t0€·­–@Ös� R¨õ:àÎçy„v®æœøSJ�y`�$wÿX %[Z¼Øúãðð§ñm�D"‘7†-€"‘Hä[Œ5À·»ü¡1j õ©¢ÛÃÄ ‘SX{Ê>N8piP¤F ª½ý…d-‚�˜Ak1‰ ¸m þÀ¯Æñ0 îøÄÛ_o™d ÷‡÷$¢‚O8Ó] E @ÂÀô‰ZÔ¯Êù,†êâ�˜E›5æ¦ä×»#,�¸ÒAï%¥È {èïâh6 ?øl ÓîÐl5i4š´Z-:í&ÍfÆõÛW³uÓçãÀó§WV�5G6¬_JèÑÇŽðõo< å3¤)H´¢BÈ—ÑŸ)¨î‡ZýXóÚÂOškÍì>Ûîl¾‘7€sý—>E×N!H ç”@ UšÑä\±#ÿF±»8¦ƒ* «…�¨(PﻥžÐêEÂx\"�Ž=<î�#€†-*l#(&¬/>Õ¹Œ Û=PWoº…óî¿>\�S½åSš&l¹~‚ÕÓëI’´Ö§qKâÒá–AZ¾ì?"‘È#þü×-ÀÝ€ Ú±³À»üZÈæ+ßX<ü•»ð0Œ¬»…Æè,ov¤ìSV‚P±°%b Dª´Zøßëe•�KÁ}B›\ ªmƒ`Ü>ã·/É i`Ò†s«f œ{%j¬ç®Ííwå­v›.OlzP­\Ý�sA�ӂЕøžTÁ!B*–F9 ¤—4¾!†»Dìy ¥ø°08ÜÅÝŠom$‰D(‰D"×.צÅ$µc™!¡âÅ‘W°v f{‡ÔW®㻄óDO ¢&Ö�€Ñ2z±p¾AÞ¡Ö@J i™ÚØGº­ 7«’0¢ˆ«GŪÀ(PøÔª´4fGzXn¡¤‰"€ $¨³žà¬ûÂöAÅ”´--‚‹€!¢x€ˆxuÖºDÅ!½Î ]­7Ø‘Ú3éý„÷«"š"¡¦­×<Æu›Û¬ß¼�4ëÔ 6ͳá³V.¨¯^Eü4ˆD"oÙÿZä;€ã·Íü°@ Ó7~O%ÅÂÁ/-H9X~Û�ÎÞNÖYÃ[u�fKO±6×®ÊέU9k œhãêí"-ˆv!*øø¡æBSñÊZ/®.=§î×2þì '(™*UÏÎz®:÷ošoHlN³Ì 8ÛMÒq áYdËË«\LÙ$ðPÐù] �oo$‰\Û$ñD"‘È·,/?æ÷�®Æø]t°®Z”P2~^¸žCšl&Mv’&­ „Š1ŠžÐ›Æ&‚ Ö=:‹»H:œqõ¨×ƒNßÓs©•�Š?>‚^G ì8×E!ú‹/toW¿­"*NU‹1nqÏF§Úà|~ÜW{ú¬�i}N>š¾$wQÐÆM4tKZ-B*cœ¼ÓüÑà½æA7.ƒ¢€“§ç™ŸŸcnnŽÅ¥%Y^^dii‰å•. K}¾þÐQîÿ³¥(-!ÍFjn»y}§7(‹G?ZX+üÌÏ|æ[Vü±bXéµ¹¤ìÒ=ó+'¿J9XR ÑÅ&PĬ=¯øc“ñU��oyotÕMoSñç�A’$)n.õ>Òý-»Î>‚Á‰0˜F• bc„F²d¶5ïo}¼yoûv³œ4ÿmõÞ?� J³Ñ÷Ñ5š\_LÒupïx½�AѺÜ9]: Ïù¿�Á]k°_píRR£Ÿ:eÂ3¹}ÆM¥V·�zÿ&ÁGP! Æ'Snºs#›¶ïtâÏp1¬^Î� Ž9|x2Š?‘Hä�ÇÜ É$ 0©[ ˜*þ %]ÇÓ„ˆeùøCäË'x+#bµ rTëNè'ìhWŸ¤8ñ§J}÷k®. ‚ ¼¶‚v'6^Ü'„ÕŸ"&ÑëñºV\œ†*‹àʸ:4dŸø±ƒô¾u]wݤ*þÒO²§�I¼6ó`žÕ~ܤnsS|o#‘H$ZE"‘HäÍAx?p3ÔÂGó5 Çàj4o—•ly+%`\]�µK}¬›p.¹ºp‚Ð ‘ÖaÐzD�S« `€V‘ .‘fÐ+.Ï$ëÔcÄ;&\Wô8ºÁS±«>’Zÿ$'e¬ñ°}›™g3®4¾#9ÖmÒ-o0»9B‚Å�;ùìÜ�©ÐųjÔrÏ-ýÊò§ÓîÐîth·Û¸µªâ±iÃ{¯_Ëùxù•ùÞ“�¿Ø|þÙ{“,åuÃZàlÐÏ y.X[’&–Þ azµ¥™ ¯GNOñÕ§næB)©âü,>"—îî­Ù|~dæÖ¬Ñ\³�7µÊ'ú]*D’ÓI§ñHóÎdÁ\�Z¥¤ ºÿ’”årcñ`þ¶üy}Çë-‡¸=óßw'κ"¢nàÜ6õ¢rذk#4ßZ0Fˈ€©‰]†AÐÑzµþ Mï.ŒTO ø‡.ìªm²¦áº=SŒMÌ �YÐdxÓ­Ñt¨õ�û�'€±û�D"׆õÏk€AY~g˜H=}ãwW@84Pˆ¡3µ—æÄ&ÞŠˆ”.ÄYþTy"U*XD,b-HéòÀY׸@E uç¦1}“b]½-kR@ÔjÇó,[j÷­‚‘×õ:|¡Ê8´> çJ.ì Å’ØœF™SGa’ò$½íŽÕ¨†ly%¾@ûæøõh‰D"×¼ô_âSˆD"‘Ž��€ÙŽ£&6�®GË'I½–#œ ,O!b€z7pnŠŒ«¬6ÒN8X*`ðÁ‹ ¤Hxú^? [¥uù¡�äöÕÆq÷ì èÖ‡3W¤V,SákÅf͹19.{R¨°ÕºÁ÷DH”y2¿Ý iÊ0ÂlòÛóŸ0óåǸ 6Nçܾ«‡•Êív‡ÎH‡‘N›V³C£Ù Ýn;¨‚¸i×ë¦G©ãïÿä/ 6Mõš¼MJF”Mli)Š‚Â–”EIY–زr/B#KX?Uòzpï·pììZ^‹båzsO!eBwoâk ç%1§[S×o�m¿‰«Lk| Íñµ”y�ÞÙcزxmh¼·‚ÁyÓçÓ©Æ�æ;M�uø_(ÆJKN7ä_/n(N€ 4a¬ÏÕcÐ6è>_< „d=m}l4ñ·uÚðº‚ÍÒk®o›„°ÝÓcÅ Vˆ‹£Vp¯hBñÇV›w޳vÝ’$Ÿg˜°“xåü4,_û�cœŸH$rm @ŸÙ ÜXmOMêâþD©€¾Ë€DäÔâÁ/5Äæ“ÔÐ^½“ÖêoIñGE“‘Bãì`4V�H•emb¨ò�€ã{SÆÆ•Ð9`¥«+Ôí[•Š“x½õŸêxÐãÁÕaT„ë{££Ý_fsÒb@s½$ËÅ0�¸œ!.àTêny?NÍr©¾ˆoq$‰Dp‘H$yspøŒù pc¨ÃË¡“hY+(žÇ¶udé^²t $Bª%I‚AHð'Ïå‚Þ¢ñ€\½�{7 ™yפxq„4U<+!Ô¸kC�s×HÍQîVô> ž»*+Iö°ÝÖþ¼|orTnÁ’!$Þ ©�"TØÕ¼Ðÿ ¿“ß�Á»* ŵin1Ntq‹×ž„÷P+)ên� &ڢ¸ * ‰ï—Æ€Z†Û ÏDï]‡z~�Ññ”½wl`ËÎëÉ#(B=žp¤yBXN9íâü< b÷‰D®=ëŸÿ¾Ì:y ¡ZxšK$mŽÝÝßôM¨§èžfé•û,¾Â[cÒÀ H»G[À?„ÃUÝ/Xí “�2pËfÐÏxªkp¡Çi½N\Ò� Á"àý$0¨ »j©ºô’ð'Ø*MÊ‚f¾B¢eê\¿}Ó"ïtB”»fáÂ1û�LêÒ˜)H6Æ79‰D¢‰D"‘7%pðïy=ô<NŠÇmê¸a‡4¹žFcI’¸<ã AÆ (TX18´nŸ7 štzžA� 1S'Ú Y÷fæ»uÜ}èºÞNÔ!0¿Þò�*5gd¤õö]�oÚï2+̨Ë7õùåò„”A±Ë|¥ÿ]æÊíæ B…7H,*hbÛesìì8'f1¶Í®`ìb%üÌÏ/°ðê²°ÀÒòKK‹8‹ –—{?¹Äï=ÈOý«ßajUÁÕ$ËZLÏÞÈèØZ²,#Ë•ØS-Yƒ¬Q‰>´ZMgä¡f“‰ñ/ip5˜[ãþ§oDÄ@ˆX‹Ï±|ü 䎣¢ÄxÂ�õd�#�õûޝ¿gwš�®åu¢9±–úü5 ňñ-Áá¶“DFe0xoï�þ;û¿fÇì‹:€AîáˆH°¦‘žLînÿaçû7¯§Aß7mGôœ±ž!â»$ÓwOª·ð1^3DLÖsjõã•5'H%4‚´/¢ x#e•&*N{˜À�žØ ²F ·L±ë¶]tFÖÔ‰>í#ØDnQ$°Zîîb—‰D®UԂ¤†¤i0 0…Á<ÏeОڻäÍsP�؂X>þæ¶Ò^(Á�èœÝ�Áø60 âMT\=A·£å¡ªG× ÃÚ%je„Áâ5¦˜ ¬‰,¸zŒŠEÎE�ŠIhçN–wÉŠÞP1Gà\nÒëL’¹ãíb/œ ¦tO5ãRöÆ÷8‰D¢‰D"‘7'|Ö˜O‡a(FÇæ4O¤ÖÈ%“d�ɲ5€`šz¿súkN´¾ú¡Qã_ƒ‹+"PcÍãß„Ôk×<—z³áu¿§ßƒ±*`A•¢‡Po$¨ïW)]I›÷Ú[[_°ßgÎÈõq Tëà,k7ðDï;ÍoûÌK£þ.À¸H’$xîÂâŽ[¦yû{i�ïâØ¹IÖL”lžZ&,0¿0ÇüÜsçæYXXdyi‘•å%–W–YZZfaq…A÷W“‘‘ÕlÙv £í6‰ØJài·tÚ•õ�Êúǹ}kTÛ.¿AÓ A$ ®4§çWñå'n¥(SBŠî1–�ÿ1ý¹ýˆßâGÔÝÛPáÇ˜ÅæÚëžßü¾ ÍÎÌV^gÌyuÎäñÞÞÚvÃ`7–Ký�ôþ0ß“Všr 1Æ-)âŽcLa&³k~äÏ¥ÏgS¾ !u�šñ6CðÅ—*‚–•Ë!º½ î/PèUàÖ¶ £�@]¿á’Ð7ŒX«îî4ÑskŠ/oÞ1ÎÍo¿ž‰Õë«súÆ JÂÎa¸ð£·K-ððàhìÂ#‘ȵLãG~ÝÌVƒI_]p~É æP\fºv|ó»O˜¤17À‹á#á'µa= X)Ñ:Å­WV?4úK$¶¥>îOÚ8A’L�€çÅZ¸ Œ9 ²™KM²Ý�™øFG"‘H€"‘H$òææ(ðŸ€ßBdÓô5 /_1þº" Áq¤É�ݤ٘+~j\ƒ£Œ .U‚ÁQl\¾–—a£Ï¡uR•ú¢��$Z7 ÂP� ŠD ç¸ä®ª”Ò’=Rnmÿ®ýxrXnÇÒ2/(º�V “¼0ø ùÍÁ{Ó‡é˜42ˆ/,‰à¡Ï�+ÄŸÿÈnÛ»–ïùÈnö>Û9µÐaóô€µãˬ¬,°¸8_ Aóóó,,.:k %ö?wŒ S9W‹ÎÈ$Û®»•V{1)íVÆh šY&#Ë2Z­ívóÕÔYÿ8ë fµ^åM¯é0È WŠg�lâOÛGoЛ/Ð=õ5º§¿‰-º—ç§LǦŸßúþ¬³êú]‰I oƒÅsõùKç¸`T~P A‚é·Rܘí}¬û?ÊMÅŸ�Hý6NR—cºÉææÃ­hýQçƒÉÓR�ÉÕOø¾C ‹o‰#º­„Û¡PËÖŸæ¬BŽ Ä„±Ô´�¬�5â)é¢çDÏ¥ºgq©¬]×ä–wlcfãv’´ÜŸÔl[TJ‚|\ž>EÜò2ðÀÀÆn;‰¼ X‹a“40&s�kžå `’l÷ø–÷ž2ió,Àpk 'Y>þ0¶ìóæÃ`’Ìë²0IàaY´ Dcõ˜Ä¥¡5‘X ¾…�1**Ub :/ cp₞Œ~Þ£ué=pyŠ0ÁHI–¯�]@†ÀÙ^Ú<…Ivã \z_…yFÿ­ºšÖÆ×9‰D®M ÿüWãSˆD"‘ÈÅÒÞ…1wý–iÝŽt? ²BY¾Bi Ƨñ +ÆÛçðã]=_XVw*ÎçB8¸Ä-²€V¬‘ 9F.†ó¢Ç§/ÉÚì1¹Û,Ë,`‡©u¶9•ßd¾Vî2ǵ~ øîJ¹òÁ½ê#’ä³s?fæËïà2é´S~ûÞ (§Îôxè‰ã9rÉO0=Ypz>c©Û¤ÙjÓnwèt:ŒtÚìö87m›ãj�eMví¹§Šé³¼ÜÇŠ¥Ñ0 ú9½þˆ1ôs!/JʲDÄRä¥}u[—¢(é.�`Í„år(Ê”žÝÍ¡“3€"6g0ÿ4ƒ¥— =ý©Ðjµø©Å4GŽLß:–µ&ÖrUPµ=9CÚa°<Ç`ñ,uLn½‰ÎÚ à°EΙg¾AÑ_á|œ¾ýù÷çã½@<+¶°1rrPøŽ˜y²æí»“sÉmnªbDÐH%2(gʯ îê?F ë¿÷.îŽIðÝJíßpWg"•�¬Âr`)¤çÔc•!mWpë®�ªRͺQ«'£¢1"„tÆlß5Egt:¸/rϺ]Ÿ�˳ÁºÎ�çb÷‰DÞ\@¿ù6�÷¢md,Ÿ„ `jïG? |Š!ˆ-_Z<ü•Q)û3 §Ò¢ÚkwÑßÈ› ksß³©K+AËh<M-‚hžç�Õª«µà'‚8kk —-žÇgkK�Iäܹ!6p* 1}ŒIªº’$u]~•çÝè§LRôIs~†!p²Ÿ¶–IÌvµ2wMz-ð�õßÐp+¹~h£ðeàÑøVG"‘H´ŠD"‘È[ƒøð³ÀS@¨»ø±~·î– 1*=v„,»�fs=&IÕY6î<*fè`©„‡Á¹ƒŽ1>ÆPO­û¥@Ò™ú¡ÀãwLâíÓºÝ6Šþ¤ÎI»õöÝ�ûì÷™%Yoƒ�0º�–”^¹Ã|¹÷½Ég+ñƒA1è°¸€'þ*d]v]7AÈôÚ6yß6ÞõÎY»n/Çç¦è´,[×­ Å‹ ó,,Ì177ÏHs…«Åöocddœ¢€4Íé´H’Hè´Ût:M 3–N+«\Â5Y£A(uKV¹Š£7H¸–º¾øÈí�ø#äK/²|ì‹Nü1@Š ?¬AÊ[’ìL{ææÃ›Þ½õª‹?IÊÚîdrû-ŒoØÉÚëï`bÓnê˜;ø$óŸ¢{öK'^æô�ûQñ§ÏJ&t¿æ‡ƒ¬’¼ÿ¡Þ—oïý²ŒØƒ€ñM©ÜJÓJ�elnä¯6in7MWÝVR¥"í�'~W ˆËÓÔ½oXkC±Ø-¡ ” h½á:‘œŽÆR3ˆûcôü^û(Úöº%I ;n\Þ}×Ó�BѸHÞR‹E”0J·}à›À—¢ø‰DÞ¤l¦ÂdT :Yç öÁÛÇ·¼§k²öqŽØ¼²Z<üU ‡A,×8j½£®¨�Û·g„ºPÓnËG/[=<»ýçÇÍóð<@ *ÚÚEjê}V‹-AlU¶:VÅÔ[«`ŠYož4_Ñš†`1Ç�‘.Æl¯ÎeŒÖ�xsa.s�Wš ˜­ñuŽD"‘kÿø¯ñ)D"‘HärÙ|Ì,`|£L`t¢eBôØšøâbqâÄòÁ¹š_/aœµ¨³BP—q\8fH�r?¾� @Öݳ+£¯èzâ *"6ŠôÁy)�KÒøºÜ”–ÛMIH0Þ° n½\gÏï2Ë8=Ski€1á^ݧëÉoÏÂÌ—ã2ù‰ÙËÞ9Ëù°Vxð‰S¼øÒqæÎczbkáØÙ&&m‘ nØ<àJ33³ƒÝ{ö±¼< /JšMƒµ%ÝnŽ`idÐäôz9Yb-Ý~A^&€PY%y^P8ë —bëlÎ¥ bøÂ#·snqeï½¹'±ù"`üEÜ"¨«·ZL·±jËñöê¶&¯ãëw0ögKÈ™gP÷n—Áé;^ø@>Þ]@-k  HãÑæöìÅìäf5NP­7WD¤c_Ìo|©ÜVœ%À³ôѶÂתķØq„î&ëÐFWpÕh]ðÚœ±¶¶© ÛE�& E=‹ �ÛÆ˜^¿ž4k„¥†XûX^û¶Éð,ð PÄ.8‰¼‰-€þ0â‹äæ��‡¹@¦ö~û?þ€ˆ}eéð}Æ+¹@LÚ¤5±…æª-˜¤ÁµŠØ¡JÝŠÂYðXÄ -žu�Û¢–7¨gh±%¸ Á‚P¥Æu«:÷Ì¢–@‚늵‹íþA5£×£^[}k$[’=Ò²"\(sd�µc6á¬�œà|V$¸ó}2ü74Ü ¨Ø|L¢/KÀˆou$‰D(‰D"o] °Ì0Œâ3\ä1¡ò ùCâ åX{�<_1c°nšˆŠ?UyQáÅZ[ þ/9¼_jîX‘ôxëÅòðŽ«ûµ¥Çkþ²Çí–ìiû.3`��!€ ëHí/åoKî³›˜««ö®ÃW—Nz_¾pv\ÀUUÿþ~_•¾‹K9<~‚Ç�2èž`f²ÇÂrÊKÇ[¼í†W=WÆÇ?þqËÒRŸf3¥´B·;ÀÚ’,ƒÊ¥[/'K“@w¥_‰5Í×ö߀-–éÏ=EÑ={!Â’tÖ™¾y&ÍÚ^G¦v¿ƒÆÈ!KÇ_bñès\&êNcs©ð!(žŒê ˆç±OÒüFûméñô„– ‡]]>8¸³ŸLÚþp—fJM, ¡žÁØGÅ­ >Õ¾$•‘¬A†É3"LNµØ|ÝFší1_ÐñŽ´h;…¦µÏ¥Þå›¶u‡€Ç�•ØíF"‘7·øó[ ˜Ÿð‚ÔTëæW�c!ý0ðó\ "rlùØ7ÊÞÜ..cRãi­ÚFÒèpM!âDžÜóNjm®=¡®héÜ·U¢Hµ FËb\žx3†ÄYY/&�†Ä³A�&þÿ�Ë5çò 2ß̘¼KRôáb°&y&ÏÚë ®ÕJ‰ëö½9i ?üÂ… @v=Èÿ íûÿUŒÁ‰D"Ñ\$‰DÞºð0†‡p?`ÁÔÆRë ü"ayÁåyî’pë Òt'íöÒ¬éòu€Ñ„*œT0®ÛD@êÔ(†¡%O8›ß„Ô½Füñ\Ê%‡ìªÖo—ßÙxÌ~‡0 „�÷ã/Œ4YÈo5¿Ûÿîäsv“™Ós‹Kœ #¸ë7è€2øfZŠw­—ËÆu´ÊáŒ�5øÀÝ›øà{obý¦½œZš¥´pëŽ^:šq¥ð—¾ÿã¥�H»ré–2>Ö–B#Ëi“¦ ¬Mh·´Û-Ä’4cd´C£Ù@¬ÐÊ„±NF«Ù M³jÿä˜åR9zf ‘‚þü~–�‰¢{HüÅ&PÄšáâOÖ9>²áíçÆ×ß¹õЉ?ÆÐ_Cgõl•b 5h@åÚüôÊÊÐNÀô­WTiE�@QÖmÁ§edðžþCýt?mWÙÇTÆ d@‚�âÖ“³é]í/Œü­æWÛû(H BÜ)ªÔ¡ŽúŽQêDáÐ"„po›à> Ú;g„n{M„C«“°û¶õ\·g7Íöx�5OBhù£ AZ�Ög€yçêíëQü‰D"o Ì`À¤`œ;­$³ÌÅqâ"'â¬Ûp׎ÎÌ-_Sr�ˆ” ±xø+¬œxŒ²?ϵ@(Ƹù®ÛÌ\ž8á§tsœ‹µÀêÆ¸ŸIµ8gUyçFNnxݺ@U^=«bŒ\B÷o¥«#0�ÁØ‚¤¿@Ú=WYþ€p¡”yÚúrÞèìd½ �“©°ï!÷Ç2˜ý‘–:7†#ñ½ŽD"‘h‰D"‘oÖ‚ùv ׃Ã�?K¸©�$ ËtÝÚS䃓X±žï“B‹Xþ¡»#E¨§&p:RsÕ¢×Zk`\=xåD¬Y�Vã~{GzRnAH=kŸ`V¼$ôË-æ�üæ šÆ"u&JðÁ³Òâ„1T’ß:÷·/×èÃ÷Ìò‰¿¶‹f#åbyâÀY<œ³§�2Öœg¡Û`óLÉå2`–ïþ®oG»cëªä‘G_aýìGŽÌ3:Ú`0(YYÉ„,ƒA?¯\Áe™ÁaÅY e)ôû9ƒÜb1œ�_¦XzšKA0üÆ·±pêY¤ìŸ×âGÄ Âù1éBkõ KíÉ-¸lTÿ�ÙÊ躭$Ye…ùWž¡?Š�U[ö22µ‰�¹—§{îø•q7Ö]Æø�ƒŠ>ŒzH�Š® ‚A‘ì¹ÆL¶¿ù!Ó3[]ÁLßEÏò%¡!Ç‹�ùå7÷Vê—ØR^u ¼ŠõÖ‡n�0 ¾ÒuW±[m÷ãmƒZ†P?5ÕqÛn˜drj#I’÷º|S†»} êO/»ÖH$òÖ±úì ðCàÐŸŠ ·úð;€û/ÑmÚÓKG¿Ñ±ƒ¥m\Y{5ÍU[iŒLƒIx#)Ak o[°8A\ ⬦ný4¨ºº )**äãêýÌOµ0ò~Xß{´-}¡Që¢r€¬`lÎ¥`Mòržµ»˜d�HI’¤îÁª±º}Cð>Þ |ý",€20ÿDT}«ø4p2¾Ý‘H$rmaøé_‹O!‰D"W“�À·SÁ¬r¥6¬Fø[Ô¨FrkX{ˆ~ã+IÞ¯œ`°Wjã…Ö<"6„U?º : < ,Æî3‰¼Uiþèïìþ2¨•·ˆœþÍE @xØÂe`ËÁ£KG¾¾NŠîz.“´5A%�LWëWµâ±8Áǰ¶tûËjŸº{S÷oV�?á$D0&E@BO²^,÷Iž€Z©Ó�²Oeé“÷Àæ\.‚9–7GN`Ìm"ÔÜC ‚†õ>D@Û¹HèÇ�ñ`‚ÇöÇ·;‰D¢‰D"‘o]F0æý·3$ÞÄP¡GÅ#= ¦.džÁàeY€x’†‚Ro‰C88*R@ÝGEEвcð¶AéKÚ¼ÏÞž¾"wbi°j ¶œ5Þ•<@‡>†p`¿~PåM×Þ™Dü_³j¶d¾¼ø>óòàFèp4› ?õwoâæ]«xáЧÎZÚíÖZò¼K»i¸áºUŒ�6¸X^8´ÈCßøcFÚÂ¥ðÞ÷Œn>Ξë×TÂŽ~h53Ž_âÔ™¹uï´yò©c21Þ6¯ B““mæz䃒$5€Tâ�µ–,3EN¯_ðå{ïcózË¥ð[Ÿësöœ€r�îÞ’ÖÙÎôM4G§Öp…H²&ã®gdj`¸PN=ý5Šî¯6+8u׳×6m‰ '÷>bꜹµ@õb ±Øi<ÖÜ–=Ÿ}„ܬÔê·]ºs$Ò’—‹½ƒÏ»òã~ü=e� ZÖº~ŠxÇZ_æõÒ@£aضkš±U3^Œµá¢ŽbÕ$a^Pׂ~ŽÅî2‰¼õ ÿyð7|+Iéÿ”‹dížýÿÀr™ˆÈâ`þࣽ³Ï¾¤Á ÉÚd#ST‚PgíUs'¶@Eºv«D!Í7ˆÍ㬂‡Š<�w3�@»Q�;äÄ'�ç… ••OŠ>HÉ•@ /ÓÖ×mÚ¸ cÆq—þÐi%ܼk5išp¡<øøQŽü—ÂÈè$ïzïwrv®ÏöÍ«8|l‰}7MsòL—“§W¸íÆž|æ4cM™�áÑG�˜MWñÊ‘yZÍèv¥%Ë ,+7p•ôØ£ÊèˆábYZ>ó›œèãé õ¤+ÍÉëÚ«·Ïc®`œŸ-ŒÍ^‡I3.–3Ï=¨nà®bì‘ÞÚ¥;wóá/ƒ‚¾“¡%ˆ{çB�D~PDË¥‡²ÉÆc­�˜e³<9Iñâ¥Ì•›óß¼½€A§ßz–;ÃÚœº¸?¡ä…Ó’w_Z�uë¿'þb`óŽ1ÖLo"I^[ˆ=ÓÇÖ5âAÞx x°±‹ŒD"ß"Ð:à`R�H â'�üâ ~ð\!Däø`þåçzgŸ»BB�ºŠË:kH[«Hšã¤Í1’Æ—ƒZø”ÎM´õ„ Ê(I±åÀ‹¿¬C…ƒÛLT\‹µ%Æu¥ØcslѯRŠˆp¥ÈmÖyUøÙ‰1ëE,Šñ¬š@¯ÑÅÒÎ[ÝØ¹ò|øÍ‹`~ Äâóo�ñíŽD"‘k ÿüoñ)D"‘Hä�bðm`&k±4»6.�¡†úã­XlyˆAWi£ÛC ]3)uÛ‡ðª�Z9wné�r¶ñ¨|ÈtYWo ¤ÈGó[Í—»’€¸{j,TN -®Œ¿_„!˜G»»Íþî›�ì†z>ðÎ~üoîâ|,¯<õÜiÖ"k4èu»4²‚5“mvn�àBøù_þ*›ÖœâRعëNÖoØÁJ¯`íê6½¾e¤Ó ´–];Ö°ÿ¹³ŒŽdlÛ´Š²´<ôÄÉWãI¿ŸsðåsfÕªv%þ¬¬äU| ¢(+÷qÆ_ùÊCLŒ�àRxú™’û¾^\ˆ»·2™=92½w*I�+çgÆÅùá©\À½e®‚t‹ñÞ/�½ùð³ÍA_ß U†‘:ë�Œ]Ãù;ÌŸÚ³¢MýXxž`Z ââ�è@t’`-É——>ÀáÁ_3–µhIþÜ·má{><ËÔê¯ÅÑ“]íÓîŒ"–*>P§%lÛ<ÎÔê6Ãø…ÿü{lœÊ¹îxçw“—)‰1¬žì°¼œ“e Sk:œ:Û­b­YÝáá'N²kÇjV�·˜›ïñÜKs¼íæ^|éŒØRÌÊÊ€ÑÑçÎu±"d™ás¿÷Û¬]Ã%ñ•¯<ýŒe&?9²îæÑ¬5>úúÇùN¾<Ïég¾ÁU@ÊVþù…�Ç®·nñ "ê£%tÞ�/}új²Ÿç¥¡ØZbš÷·nM�d¦dZ0QACßG³nïÿ‘ÝP.ࡱ¿Ü:aà»|S4ÿ‚E ãÝŸ+[ï*Ò Ñ£[®Ÿ¥32Š i(æ$�õ�­u[©ÊIàa`.vƒ‘Hä[Sú½ø5“„~8tñnàÞÿiào¢¼©„ “d•”þoK¡Ñ*Ï-ðjjR¯‹UËñ*ôTer0ê Ml‰I’*­Öqõˆ[:‘§�8Á±\uB‹Ÿ$] ¢V XyÎ ,NBDËÂcñR\6»éàï@…~‹Á?ÊøvG"‘È5'}&>…H$‰\ Œƒ|Ì­¡£˜‹³ Å$óþ† q‡Äåð„ ðn\uÇj�6‹Y–fó+rWr\îR¤¦N�T”Í×ï2Ò69>NRÉÉeYïžD$pý6Üj¾h%÷.ýEΔßg ù]ÜÆÝwÌP »wŒÑn¥¼^XäÜ¢Ðétªc¥ìÓln¼a’v+#äì\—¯|ùH.š,krã¾o£?ÆÇZ¤IRYMŒ¿ºnX\ÎÙ±u’—/pËÞ)úý’ç^žcßM3di‹çèJù3aÈ<òèÖM�qäè<-¾vÿS¬,=É¥ò͇J}¼¤Óœo¯ÝS¶&fßà8?õHYpæù‡*èJbÓò‰• çþÍâÎû D'²Ñ|]±ì5Þ«ˆ#† µÀà $ÙS�Í��ï``¶ÖX±$F0b(�PÅùÉwçŸ/nòÞÍúÔ�ý¾Oõ¨(;!€ë/A²†aÛ SŒOκ6 A·$ºíå› Ÿà¹-�‡c·‰D¢ô{?é,áK´�þmà«— Ýpõpõ„ ƒÏõÎ=;RŽðFc ÆdNJUJRªÔ0ˆElŽTiRºÔºu NHy£ÌŠmt’¬½XïFÞ]¼’q~N V¯üìÙ[}#%ˆá£/•/ÂzQ´Œµý÷‹b’£Ùxó¡æG“s; ž•K IÊ\¹¡øüàžÞc$È�X> �9ŠBÃÖƒ¶GßçÐ%œ –@¶�1=»™$mqåV‹ÂsKM~잉³ƒ#‘H'}þ¯ƒÜ¨ô�ÿ àâE ÷ýð}\}ºå`é‘þÜKÍ|éØ>�4þ5/�R²ö#Òè H²}Ö–êÊ-I[ª€ãò½ŸÆ}Ö”¸mÓ(E¤Lµn)ø8—@³Ûpÿn‘ªò yø¥ø×ŒD"‘kÃÿ H$‰\“Ü‚ð!`uÿV/ �ÿã•uZ  ÈÒï-1tº|}  ºAXO@ÒòšR¡ÛŠqé0÷NIöX¹9{R>lzLºbRåÅüöä�Ê�œ"¼-AüàïHèN–ï ®îìžëüâ‡ïú‡e_¦Z˜YXèwò¼$/ Šb@‘ÌN5Ø´¾é„—/.“fš�Œnw™VÓ2;=Âæõcüì§ÿ�m³+\ ã“Y=}£# Ò4¥×ÆG4š –WÊ*ÐH§ÉÒò€UãͪLQ c£ ¶nšàÑý§X?3Êìô(½~ÉcûOrëž)¹ïkÏØ§žøbj —Å ‡ÏýAΩÓbÓÖô©‘u7®N²VóZ‰óZý,‘•“‡±\ ”£ý_;wã‘_)Æú]_(u.k]ÀÚߊA¿ †.Ië+íw'§“¡ ¸;· +«íŸöïîþ‰L�»¶FÝ)†¢¯^bèö­žzKCëòêÛ"E¯�ùƒØ*eõL“�Û6ÐhªK» íóï½ÞâÐÛ¯ùZ^ó_º±k‹D"Pèsïóuÿ Kþ \$kw¿wð �ð:!"gËÞÜ“½sÏO•½³{ã_õ‘´±ß6FN“4od €Zð”èü‡?×£*‹óûâ�¨{8L‚ØÂ‰?%˜Ä"åÀ#\$�•Ì`øi„6x“Æ~ ¸7þU#‘H$ @‘H$‰\ 0ïy§‹}Æ uÜF°ß ‡á‹?Ed™Áàù`0d0TV‡ÀRå[k1Fë¨1®ÑºlYeÖr �KÒ¼OnKÊ{)@¼ÁYAÏlì4î1_’µIÏÕ¡–µçœ_ }Ô«Î"è“ûnxÇ{·Ì~¨ÙȲV–�ž;Û[}ô•¥Ùn7ÿ_ì½ ´$Gyçûû"3k»[ßÞ÷EÝ­nµö]€H`¼âmìg?óðÊŒÇØ†™yžñc°aÌcÀ6˜Ý dV!$! $´K­ÖÚ­Þ×Û·ï^U™ñ=T'Ή—qòÜnZÝR·¿sòTFdDär+«êÆ?ÿß—EA§Óí9‚TsÖ­j1ØŸq4¶íœdÏ�œV«E^Xº�)šuúՃ|ùß¾LËr< ¯aîüÔj)ÝchÐéXÀ04X§ÝQ¬ÂÜ¡íŽííù’vì™`ÃÃ4)l>À¹ç÷£}&y÷ûþYW-šNíúµ»6NOKZ§Rž�2upã»ŸÄæNE­{óÔêïŸXvxwé^sýcJ¾?#‚BUöd+¦ö�ÚÙÉŽô ’3/d˜’ìÖmKêžß¹¡8# G>?ªx´4ŽŠAµZt®þ\ñíCœ?"B¨Ù4š «Î\D«¡C§Z€Vª™] òîƯ³H$��ÚÛ¾¼x'~Öß"ÈŸ»8æm¼ú/€ßã@Õ>Ó�Ü·­}ø©3lwrEü Cˆšd‡Öž&©­V‘U¨*>|[‚µ]PÞ ·nÕ‰B>b ¡éÙÿK‚)§üzÛTõ/�wpÔf²e 8° ª ìŽáH$9õÞý©x"‘H$rª3µ×ƒœU!žø´6"® h£A `n´´]íAf¦÷PvÖ°Lx‚ÉZ?rðÔ~°Gð]Žæú‘êW�mÔn·×˜}\ øýT…—J˜)VÈ­�«ä{Ô(JIáýä¸C¡ô¿.^÷«óúÔëMi42Y–Õ“dx÷î‰9ûöN,èt éæ9EžÓévHåìõ¤‰0ªðÐcG˜j'Ôjul‘óäÓÛ™“=Áñ28o;aD I’ôÜ>"†¼Púš5jµŒ©™‚f#£ÑȘšÎ{ëý­Œ‘#mÖ=›hç�»�‘Ã3ìÚ7É]w?Dwü!N$ûó­/8Eòüx:ã#Œí|ìĆ{Kì3 �üÕÄ™{ÈÕÙ�.Õñ+ÛH¸Í‹?é–liöpöFiË� Œ£ÇhÊî|m÷óÝ‹;O"UÇ%„‹$~|ûPX.#áçFèšíšcƒXuæ0Có–"’Î’«G+EïêmŠ'tÍ÷[ã×W$‰Ì&ý›òn…–€€P«ðuàsÇ)5œ³c#/ jóÍùôÈ�îäÞþîä��hÞÇK™Ô¬±EÓÆ&[€I6¡ê-Ên=Lõ'àÊ®¥Z‡Z|+‹ª„‘_]Uø·¨3Ùtö&A®W´0ô�)Ðß4ÞÕ‘H$rJ:€>¯B$‰DNV#ò:Ô.B ž€0B‘ ¤ÚÛæ*ŠíÌLFU�!ô[ådhåzÐt¶$ñ•áã\‹°oò´]�Ý­¯• ÖBu~(5öu7ÉWó‹ÍÓ¸ÁB¨ä …!çB�»0$±qÉ;�†Ôë ¾¿h«E½ž%ib²DÍüíÛÇæ�š, ÛsE—N'gh@X¿ºŸ£1Ý.zù� Îc�|›…ÃŽ—§ö¯à³P¯%=�1 Š!MúZ5r ªÒË TX¡›+ƒua¦c™?Ü`r:gÎ@�©vŽh›ûÒg¨gʉæ3·]Ma“S&ÏÏØ®Ç™ÝωBEGóÁé�ž»ý‹-òT�j‚°o•Bi(_Täų_Zµï6^gÆÌ•ø¾ƒ(¨€C�NÚÅÅ—ÚWM‡Tüg~d!ÈâËÝ+ ¥ðpe”€Ù>w*Ä$©t-YÕÇ‚¥ËI’àÛV :Réð ñãøÐ“¾n3ð�ǯ¬H$9:õ·}åW€ËƒÏãIà÷�ÇÁÜ�W]ÜN ¬Úü±¢}ä@gbo#ŸÜw¦Úî^Œˆ%m>NÖšÑ$]lPU#&EµõfÄø}jËѤ«UZAýW·kŒ ¸>î™P' äÀw8jSI øK ¸£ïþw¼›#‘H$:€"‘H$9ª�¾ 1­YŇwùrˆŸÆQÛ%/¶ÑžžœeR6c<®M�©·- £¨ ìMáÄv�Rx¶Â’}O×§[ôµt˜_ eU^/ÑAï^*_)VË¡ŠXR}Å0<Ë2é{ÛÂÖ¯ö5ê}ÍfK�D³ÙÔF½N£ž%µ4iÎLæswì_46ÖnÖÒívÉŸ]òœKj,šß`6¬Uþ²fñ8Ï…¬o Ïì5¤IÊ™kú{ÂO-KÉê)F ÍFJ³Që9�õ”¾V�‰©‚45 5ïÐl$ô÷ÕøØ?~‚sºœ ¾xçË™îÔ_Œy~rÛì~vrÞhÏ™GUóÄ­Ö°ÞâÖÜvWΰMZ¿­ñ ³ßü°Xi¢H ˜ªµsì­�—Í|ÅÎÕ/ŠV ¾� HñH˜'¬ÔOÕ†¢ò¬"p@i,׆ÁáŒk—R«S-ä(žÙòÿø¾³»†v÷ñk*‰D~ èL�w¸®?Üpœ"ÐïÆ)ŠÚâÉ¢3¶§;±7˧¬²ùÌPN;Lº‡´ù Y«K’.AÌ:U­6ðŠ/c 0 Î1…ÃG`Tµäò)E²PŸúOµ@œ¨„¸}(¨’þøsŽ“ÚtíПIÅónà±x7G"‘HtE"‘H$r"i r p`(! �Ð"RÜÈnr©Ž33³½§T1*pBІ¹rBáH*Žh¶$ñá$²"H )Mj·èË’úJ,u@Q$8M·Fargç•r‹È *žê:U½´i–¼e8ûã'»|~U«~^³Þ0�Fƒz£¡ÍfSê�¦¶uɲ$m$éà¡CÓCÏæjwò¤Û-èt;=Í9k]?ÍzBÈ®½ã|ùkw°|A—çL¶„´6@š¦Ü·yŠ3ÏègÁÜI’�˜„¬–ôÄŸ¢Å0Ø_£P!Ï•ÁþV¡ÓUæ Öù—O•%Ã#œ ƧZüÛÝ—¿èòüØ4ÿNgÅá¿™^1òL.VQ4OV‡Z¬¬wuáöÐ-Wûnmc²5}³ä²¨Â}—à[[mÚG»çt?—oèî FòÓ±æ«m,@éÞÅŸð|=~½ÖHY½~­�ňT; gwù@…³Gpbòa—p|_üZŠD"‘〾&À–6Ž]Àôø WðAà×8=h«-vjÑ9Tt'§mgÜäí#¶=¶ÐæÓKá…A{"ORÛOZ'©[LÖĘy(ËAëxœ“€*Š žWqÎ� Ý&(†lSWVëœBˆ3  ZŠ [Ò{u9(¾^̇P}+ ÙT* ÿ/ÈÊ \îNà¿Æðo‘H$rJ;€>¯B$‰DNg惾XÎÑŠAbªŸ_•0O�_·Å~¦§vcíÑr“(„ºö>ù{©]Éð£j‘ 2Ñmsmƒ$÷€€Ù¯­Úmö5rˆK+�Í#$LkøZçj¹‡DôØ&ßý5¸´)‹~iní##¹Þ1ªòè’fmC£ÕÒF£É÷i4Ú¨Õi5ë&K“Zf’á;Ɔ쟚—ç–n7ï9‚ºy‡F Î^?ˆÛ+7ß¾�{63Øg9tÆdC$&%ËRº…ðÐãÓ¼ìÂaµ^ˆÁC£žQ¯§´;Ús õõÕ˜i[D wÝó8M}”“ÅægVóж5/ž X@0:],°7¶¯ž¹•†^\O`ã  jªê¥ìäóÇ�_÷핹Ç.m²xÅ ’´¯Â±£x$Ø®”±€Û´B@zxèįžH$9Ð× ïõŠŒ€þ0óD ~à›À¥¼8ñâˆ-ÀÚÜÕÓ°E§Žÿª{¶Œ³VøŸÍª áÏ ëÊ‚bña-þ«º¨01+ ^ÐA°ZàúãD¥ z¬«s9|JÏ•¸²ëçö ÎäÊe“¯ w+ú*`‚ã$›LÀ_C )þBM¿ ÌÄ»8‰D¢‰D"‘Èó�.Gä”:(ø8Øah7O˜HÁ¯+¾[Ðßj›n{33Sà™%7�ÕÛD¨‚Ôåå顤*7�ŸÇŸ0¥ü(ÖJv‡ž�>Áë%gu Å ( ±s¸¯s…|Å®�Qüùýªµøs墆,þ÷sÌG¦¬>^OÒÁzbª[Úú‘­ÚY­F«Þ¨×{BP£Ñ”f/<\CêišÔ²¤o|¬;g×ÎñÅ““ÝšsqÓ·¾ÇÆ#œhTadr˜,«‘¦)i–ö^³4é½nyz†yÃuV.m‘$I¯¾ÞÈÈÒ”N×òÝ»taßNÏ ?=ètÎóX[ïÞ8½fÿßçs§GĨÆ’ "’‹µ€RÁ¬.;q£[ïüq¯¹$õ[jW${’7be¨$ö¡Þcì·;—·¿`—ÑÒ‚pl±ÜüzˆÈu_»×£†´ó\�þÁ”•ë–RoÎ÷û ñçZ)Í3’v÷Gâ×M$‰œpè'@~¬ô[KàFàŸxÌÝð²àsÀkx¢Z8'�sѸPkÐ+;·Nîêœ$&ÁÝR$V'$yÁE-" ª….ĉ=>ä[ Ax7Eéá�?n!Åá�]1‰Ïéƒø¾þ˜@Œw¹¶ÆõófhýªoÆžƒûç-ˆ¼ÑŸ”ª»Ÿâ¤b$‰D(‰D"‘ç�"¯FõB�RH4p…Pì¿=|ðåáö¡=³ƒn§Kˆª†ÂPeø7ÀÕk(îøWÔ»ÿDü@e+H:?E½~³½ÊìæQÞf«Å¨¡m—ð­Î5Ü¢ýÒ)�‡ªú0\ð¬è—ç˜�ºÓÎ'UíO“u©1M€I«�íÈùúÊVý‚zýYáÇ……k6m£^7�Z]êµ$©%éð¾}Sƒ{÷L,úâ—ï1g,ÜŽN ãÓ)ÓÝþž¨“¤iï5«¥¤IÒ[“pïæI.8k¨—ë'I’žøóÈ#²tÞ '›Û>—Ý‡æŸÆy~Šû;‹GßßY9ú8FµçúITr±^D4¡øPqyÄõEÜ=å]8Ù÷²õééOHWV…B�+p£Öõ±î¦î§ós:ÏàÆ*Ýsþ]J¢§w)…®œCu\J ø, Rôuã†{KRa͆ùô .G¤Êmh)£³ˆ?2‹ÓǸ±Æ]žŸ]ñë%‰DNõ_¿©ú?€ù€BäÀï;ž£T> ü4/*¼hãC³uQUï”ñ"Œ«³€†es¾Zqc‹7ʺýømê…/LAù¼Éõ‚ŽÛ·?VÁ ÞAD(ùp8�øUû‹@ç9Š?+€?Òàá�CÀÚñî�D"‘Sá=1P$‰D^´,y°*˜[ÃÁõUîÊ}À—½´‡éÉý…Ÿ®ì€¢Je¨8ßÏ»‚늣òtTª,Of—¬Ý®?lsQÅ(Î-!XM+ÖqcçJ¹Ÿ0?�[_šhÿ¯êgÉùƘ W=ÒÆìHÌÙÆØÛµ_î˜äÐÂVcu£Ñ¤'Õë<»Þj5©×2“¥I¶ùñíã÷ßúµkj))' eÏ¡*u²,£çÊÜòl9é……cjžÜÞfõҔ鱧™;Xp²Ù{x.·Õy~ÖÑš¿ìÔÍó#vo><õÁ© {¿%"ïúQPrƒBÅ=0›pZ" §šlKçÕîÉÞ$æR?7ãÖpkJ¢‡ò•Åg:¯˜¹Sát©¸¼kÅ•ÁSá²xÍVðÛ•PßÕŠüG)9�–Ÿ1ÄÜ…Ë1¦\»PØQÂë\ÑO(lüJ‰D"‘“-}ã2à?1€Oï:ÏMºÂï~‹ª8‡Ž©Ö+kIüQ¬sÙàÖ ¼ÀcñÏt· |x7ðÏ�à÷ãêU‹^?T½X#½v~ŒðgBo?yU¹Àèo}†Î·ï¡xÁKß/Èï–ç@:•Õ€ÿº $-@ ôxpW¼k#‘H$ @‘H$‰œ l®†ÀQ1¿Š 'B ©Ø®Ö’Û˜ ½Wåû(;|ÛjÂäö®„`êº2)½ÿoÒº–’Þ¯«³ôGe†å” À¯‹6ÙÖ½ˆÏågËÎp²ZPy«z{_£Un5Ô’3qÌXÝnLR´Òd�ëV<Ѷÿ0·ž-h6†ZÍ–6ê ©7šÚl6¥Q¯é¿~êãóëZœÅI&/„'wf4BV«Q÷B©Ë49•sààA–/˜¦–*'Uá«÷\ZÊý#bh-\ÉÀ©�çg¦hµ?>uæÞÑF>#)¶H¬äRXrc+k¨8*Â�U®;dŒ¬~kã‡Ìˆy-J[* ;¯ø·öÕ3_Ó~º€‚Wx€’ ÐÇz!tQ NÁ;�$ W:Gõ}pû™U›·¨ÉÒU+H³~€YÅŸj”€ �uO÷Ÿþ‘H$ò| @ßÐ?.$S´À?1p+èûxŽBÐO Ìãô§ìèQ N°±¶€Ò6Å‹9¹ë›£ à¶!n±îk;'?_zuƒ­Ï'„ˆçú�C¤äòç>´\â„#\W?^9¬¸:¤èÛNDX¶lª. ¿\#ˆQ| ;�û@ÿÐx×F"‘H€"‘H$9UHA^\‰�Q…Ríò·-D$ˆ¸dešöÌVf¦fðOúWæ*M‹‘7�oIâ¥Nƒ¬¯ ((¡Ý t’ X5µ[ô’äi^/®§A pQX;ÌÝ�+¹Ñ.1ãøñX‘O _×ù¥V³YèëËæ6ëëëI²Ç„ÕGZI²¬–$s:ªûŸhë'VöÕ/hÕI½Ñ¤Ñh0Öéì{âö›ß$ |(Õ)ü´ÔO¼Hä·!àÜñ”"Àz¡*GpÆc¤"ï� ž7±Ÿµ¶x°Ÿ@mªñ# ¿ XçR ãd{ã݉D"QŠD"‘HäTdÐ%À=·Êäס"wP £øê ú“ïhõÓ“»É»ÝrŸ ÁÆáE à‘B|çò„4øÿq„Éé«„- ÃN9¢µÚÍz}²�«�… è¹€«3LKùJûUÜFƒ.ŽLmòšöþ«–ûò¾V¿ö÷µšóêÙy‰1 «:ÓîæÓ}�ư1€#…Þ}ÀrßÒf}S³ÕÒŸÚútsdï/ò¤›§Üx×´»ˆ0´b“ ÷vjæùѤØÒžä�U‡ÖDƒÚÔj.ÖæF)‰ž¡)Ç"üøþªÙ}ÙêtKösÒ‘µB† \½Ötk~fþ/Ý‹;O %4ìªåŒÊ„òÊìaß0ý÷Óë÷~USµTŠ^È7cµäú‚ÌÄÁû±ÂáãmõŽ7³Ó Õïªÿ¸ŒË•€TÜ´†ñbiñÉöÕ3·“¢á;·"¿sÕQí˜Ó@µ)¡¡¨Õ!ìAŸHÀ—•¥«˜·xIÒ Z¬)·Ç3«PäQ<9ð0ðPį†H$9% ùmÐW�$xgøÈ»€­œ †7\ºø ð£œvxÇ�Õ\x7U‚@Nx±¶ jßu"‘ü3¾¿wâXo`"¸ª*x½Ä½»±„·!4—LÇÖæàêÝ>]}�ˆ|^Õþ?À>NÙd} ðg@Eô€›@þ:†~‹D"‘èŠD"‘HätâD^ ôç�†"�o¬8¤"à“vév¶159æ9ñåjfwÿ„…’[@ ê`]ƒéeW§š}WÏL7óÒa ¸­Š >>âZ÷ñXçR>[l`7þÑE6uÆ–_RŒÿØ@³1Ø×ꓹ­ÆÊVš¬ÂÑétHÓ”Z­ŽsM?üøã;Øõ¼ÄØq`!wl>€¤ÖdáÙW‚È©–ç§k�OO­ÙûÏv¨;%Fr¤0–\ŠAr£ZÊ›#H�ó'pÁŽšà~�IÒú·ê¯5Í�`iø�„Å‹¤B×Û/·¯š¹A‡u…jÄßÔ!à „çñï~¿�ð\ ²±"ì~›«^Pgéªedµ!<:‹ØSZN ÚYüX[�{€©øU‰D"§šô­ð—À™€¼Ãuä�'Oœt‰?|>Ý ·†P-pâ V]x8Ûk»¾Ÿk„q+¹w¼™ÙîLÐßâ( V]IÀõ³6#:;§ˆ¬Íý6 7¾\N£Ã"æ7@>('ˆdܬþðȸ“„Ç€ß:ñîŒD"‘Ó áDP$‰D^òÔ€«@^$ôÐjCRaf%”ÔN0=½�ÎÌÌ1ˆ?A®”`Òõâ ab}¼³¯Bá'¸­¼ë-í³«¦þM®N¶óz úäî AÈí|nk¿’u¸ÿ^E•«Ú/X/�ëû[ýi_«•Ì­gçÕÒdG»Ý¦Ñh’$ �<¶ew†.å%ÄþÑa¾ýÈ9tó€æÜ¥ÌY}Ω”ç›voo/ù`wÑÄ.M©IQPX„žë'7ªTçì±âNe\Â0ÏOíÛµ‹Òg’Ÿ!gQŽPñe -½»{Açãùú|‚ @èèQkC‡Oy8 �GÂ\@åþ8ªÃÃ…×ÃߣøºzÓ°jý"š}‹sÔ�me4Øf >A›CÀw�ñã?‰DNeè–ùÀ™‡j¸»§y'°…Èð™/qn Çi„µ9^H±Ø¢ëËNÇPÔ;oT{}*òÿ„aÖÊf}44ðúœ@Ö¢X@ü³PªeÇ�«wn!ĤîÊ“”¢Ò–„¥/Ðsý°‡H:QÛàÄŸ~@ƒÜS‡�߯»2‰DNKè³ñ*D"‘H$B�aàz`#‚GC§OU  S�« Výö"ßÏd/?�õ½½à®»¢–rþôp“Úb ª6<  œúr0Qº¬Ó�-m«þ-^or­Û»%ôC)°$L+øbûÕz ™¨k#-›g×µ÷_·83 ôõgíæ²Vš¬H’Dp»Ìóœ];w ª¼X¨5úž¿š¢ÛffzŒ©ÉQlÑ ° OìZƃ[Ï@UÀÑ·p%ƒË7žy~ŒÝÚ™;ö·3+ÞC†%EmÚËñCn¬EÑP£ðAÊBa6Bñ'}8]ž=œýœÌÈ9%Q¤ŠT·çk‹꼬ý0ˆw�?Khp�„v¿àDB±5 âZùÙEÜøaøG“V®fhx%b Õè¬u¡(6{Ÿià>à‰øq‰D"§�߸õà=¨D°Ç t] ü.ðã€áTÆ $>ü›Å¹€óöXÛõâ‹W„?^9'�«÷&f\;O© Nt1þgˆ;>ìŠ1 Öø±Õ›‘+ðiUûà{œ`’ñd"´|Â"UwÐ]çüy(Þ�‘H$@‘H$‰¼XXò:`¡xáBýį;Bm©ªGÉóíLŒB-£‡®ŸêÐo¡Û-´â·‡¦ Êã£ø:ïWÒGuiv7?)Sl@1ž¨w$h�]ù&>Ù½œ-àÛ¬È'‡nÈüvªvn½VïKÄ$}õl1Ž­O?õ¢€¹ø’ËHÓp¸ÐwÝn—F£Á޽†¿ÿT—ý‡µþ9Ì;ó²6Ï:–÷OdêŒ=7PÓ‚Œ‚lbmž(¹8ñGÄ”/ü”à)êëªÂ—‰˜}ÒW»½öfsD®ð®<,¡Èb/Ÿi_Û¾‰Öí¿Zßñ[B¥Ö‰4ÞÞWrü¸‘ü±£¸Új7�*eªÃÂ-ZÞÇÂ¥+IÒ¾ �=Jnϱçÿ)€ÍÀƒ@7~ÄG"‘Èi']ò'@ T ˆ[¦Aþ¸�“Àð™­Þü_@ë”§u XT{‚‚`�0„ ‡wû¸²º²"’àÇ«H»çÝ=8·ŽÓM|Î ðhÉx�ÚRÞ<64HO©Úï¶rHÆÓ—ƒþ!H¸ƒó²Ìÿ¸;Þ…‘H$ H$‰D^lÈ%Àµ@'�P…ßNHø^‡v{Sã¥L¯Un ÷Ÿf •²÷øöT%.r ðû̶‚øq*®ÂjívÎK秤Ë|€’K#‚ôÞÎåòÙbû@©‰á«?zÍŸG_ðÀCNžœØÛ¬ÕûjI2PÏÒÁ‹Ô××Ï%—^F–Õ8£cÊ»ÞסÝ ξ’´Þz!òü¶Þ¹azåþ�ڡΨfj%ÅF%7VÈ) DJâH)Ü™«+;n”jáè`ê7Õ¯Kö™ŸDiР½ºúÜÚ¯v^Ñù¬]TŒãï ¥u÷Œ¤bï þ~„ G…“΂8ל˜JM‡3–Ÿ±œZ}.ÅŸ›rìÎ úW±ÝMÜŒÇ�õH$9�E Û.þ¨Q�•òcÀ?ö$ Aó€·¿,ä”B½ãǽªÍQ´ì rK-Êe¨Z/GqõÑlñÂMUDVß^Ä”ö£(âÇ/Emv¡çö#æoTíÿ�á'1À/?H&ººÀï÷Æ»/‰DNo„¿Š!à"‘H$™…ʵˆ\C{¦ƒÃ 4áàJ“ÛÖ‚Hhòqh¨Í²QY R¿“0Ì\IšÖ´þ ^“ìâ ( ÙÉKjA¬]À×Û¯æKðš³6þüÆ5>ÕÍ÷Mµ;£#»wlxhË£{sÕ©,I²½»v &0ÄiL³Ùâ’K/§^¯s¬|æ«9_½­GRk0oý¥$õæó—ç'Éïi/ù`gÉØ61š ’Š-Œ¥—ç'Qïó‚d)ü`Ù)ã…¡@øTœèX»³v~úTú tY^ºÏ‹"xDú`÷¼ü#ùÙ�í¥û!tÿ„ù´òfÕ MEñò“*•ˆT;üe¢VOY¹~­þeˆ˜àH9FÑ'<;‹',�ºÓÚúä–…OnßþôÔÄD£;5± ª±0ÝEöÕÑÕœ‚Ôë�žøÓl6ùAxòË_ü} $õ/^Kch>&­Ñ�£=vˆÉÛOlž±»»Ããš^}àÛ’RhŠ~Äjn¬e¼„wÿ9wÂðoé–dQv_ö‹2-ûÉ@ñ‹BÂî|Mñ±Î+ÚßÃø°U´:\9|¡#®Ú¡¢þÆ {+×Íeμ“-¼Û¬ÂNØÎ\«7a³ÐøÑ‰D"/:è\AÞ«hïADQvï8‰B�Þüp `x�PUïæ) ,ΉD>?®-Z€lÑAÄ”Ý< ŠE0¨(ЏKî÷#TçR@@Åøçe\?×Ö‚Þ¢ªïý¸Æ'Oü9S�?St1ôPAŒ¢Ö•'�ß�9"‘HäE%}.^…H$‰DŽ�3�×sÁ ?žr](ô)GÄ ]Dj-y÷&Æ¡^¼ 'Û!#gÜz¸M‚¼-‚øÿdýöÐY¤ZáD"}�5Ù=¼Ef8°”1ëÖ$ŸüØUó+N'?8=³ÙNM®lËf}ô‘‡Zcz‹ˆÐQv“wç Ô9…¨Õj\|Éåôõõñƒb-¼ýÏÚLMS‰˜µ'E§ŠÖôǧÖìûœ6Š6–+Fh§¹äâ²—ÄÁ@Œ¬Â·÷}Ì!šµ[ko6£æ (YE3q‹"LÙö33¯nßHC»ˆ"�ŠcާäDRªÅ‡8P A w_„‚OiŸá˜ó—ô±hùJÒ´�2å ÿ™Íõ”-¾^]ù1'þ´ãGu$‰¼xiþÆœh ¨­x` £è‡ù$Pp’™sæó€Þ¼äyE±¶®çþq’�Z¼3Èöʸöa(9—7N�Û‚kW AôåÞVsŒ$( Þ�4úU½ø2pˆ“Œ9bПy+PSl H87™îÞ<ï²H$‰P$‰D"/eàrD®Fµ”u ˆŸ—®tø¨‚‘ ¿�àðc(3ÌLoczb"È TÕß;,· úŽE`Öðo„u„“ûžB©Ý¬—¦OË[ÈFîðÁ¿¾lè²Kæ×¡šNQ92ÝÙ±ó‰GÏ~ì‰Ç''»Ý]R«Þ;1õÔbíü,xåö[ƒZ¼’S„4͸ø’KäxùЧºÜý åDÒjÀÔ %U[ë~mzÙ�ÃÓ#’Rh µ‰Ú<±ä¢*ÞÁ{йɌ+ÏNW¥~SíÚdOò,C@ Xª±: ßì\Þù§b¥=‚ª–ŽADºҫRáLBfÑ_” ˳úêÒûÝ B ¥¼?})Ë×.£Ñœ_²Í¯ e”�Pø©Î‹´ø0?ž#‘Hä%#Íþô�ÐW®äqàO�-8N¾t~ ¸ x£[Îà¤ã�é¶h—ÊÎqã@Ö9y$ÁÀ‡cs"ˆ�xìÆ~ kð¬”-›çUAð"”ZyZÑ€P½ èð4úé­ÏlŸÙµïD÷ÀžMC×L©<œæ�³„S€ 7±bÅJŽî}"çÈ„r< õ ŸcX¾XX¶HX²ÐЬÃÞƒÊæ'-�¹ R±ÙwÓ³²ÇÒ_¡ËšàÝgüº±Î–|S÷ï»å[}æ*Á*sˆRŠRÆ‹’ÞÕƒŽÄêûî¢j”4KX¹~ýƒKI«7‹ÈSáì™Õùc\y ¸ Ø?Ž#‘Hä¥(Ýi@ äW|\1§`‚ª³œèÇ€3Ï£$ÀF¼ôrÀpbñaÖT±êœ7¶ëœ>x�ºWµx‡P�jáŸéPÀ�çC¼‰×ÕE\½K…èÚ¸q,Ø;T­}ôùÍzXÀ[�Ÿ¥”Ĩü_Ƈ�¿l¼«"‘HäŇðÞÏÇ«‰D"‘Èsc‰ {±‚„óÆBux8ÁoW_YÒqÈó]LŒí§(,ªJ•¥¡:�‰ºj?±îÿ…£@Yò�1n Ê°UÉVæ×nç-2ÆåW½b¸öºë—4굌5«“Õ«ŽÂÈL{s‹S1}·<³ëCíCû–?¼cçÓó&F~²†®íÚ»û(.}áC¿Õ¹êêW""å‰m–Ç·ZߦŒO*³±ñ Ã5—%\x–!I˜•ÜêØæƒ“y÷=Û¿Ð-lª½?¹ÑPô(Až|ž×^ë_ÙÿZ³·ó³d‹vÉÌÀ&@ðX|ÎKÂH±¢ø‡öµ�oc°¨êlb�¯¯vÅùšrmé†ò}Å�©¶Ô#ì�*!ËÖÌaîÂSÃ÷²x¤bD­ª¯Úcà êÇÉšH$‰4ó;ׂþ7 œ�KnƒZ÷ºøà;¼@ÌYÞ|÷›ù2àà\`'ksp¡ÝÂ0pÖvIP›£j—óGµòöЫ Òºv‚ôÆÊÁ G"ﲇ@R-¹Ë…v;È ÅHq9»€e%aã˜þ ps¼‹"‘HäE-EP$‰D"'ˆsÀ\ ‚V˜e„ Òõ„¸ÍåñlA§³�ɱÑ@xñ2�‚*Bµ©–GB\…“ÝaÞ“PRÕÀ¥¡@)GKvÞ~ùâÿ<Ôß̲Lêµ�F�ï»�Ò¡¡š0 …Õ™‘™öcirÖT7ßsÓ“O†ÑCglÞ¾c÷@{Ꜿ¢s /0sçÎ㢋/åd±÷ „¶é÷ËÌŒÒl �e¸ú²„Åó…”é¼xê–=£ó�§vÝ[rÀxÞñSñ^„p0;ºsê_Ý÷)QÛG�þ6,˜B2[‘]§kçÚOµ¯í|N‡´í߯ªäªÞŽª]¤¢/ø:ƒ?wE|?¯ÄV:äæ.h°då Òl`÷Ž«C|Ù–gi÷8ð=`:~äF"‘HÄ‹@w®ùàl‡ ¼ $À�Àû�ͼÀÌY® �s*–~ŽçÆ)œð“ål¨âÛX\;W§@˜6PËã^‘‡Uõa„‡Q}DÕ> ºP^`t¤Øü&ð2ÿ��æ YðpÊàï¶Å»'‰D¢‰D"‘HäØIA®^¤ÞPæ rxQ¨ÚjàûV·Q;ÅôÔ6¦&§ÊÓΪn%P¡/„4œø´ÂýƒyªÂ¾Uº€åݫ缳;ÝXØOW$I–Õëu­×j28Ð� /˜›fYÂlLwóSÝî��,Û´c|òæû·n}|ôÀþZgçÖ2E¾˜�eËWpÖYgs:2ÒîÞüÞ-;þê¾ÃG@-J rEÍ&Y¤þÍìÊdÛ¡ßCGçRB†g`n1ª}zKçÒµÅÁPø©)—U¡Ú+S¶Þ¹öU ÂÎ~]gu=µúV¬]L£µ„JË� ™=4\pFž}Àw€ƒñc6‰D"Õ"Ðw ð3ÀÛ�>7žueÀt Ç×�OqŠ1gý9¬ ¡ À`àqŽ/èàB¼¹6Š:xáțꙎXÍÇ@F¶(ú0ÈÃ=wì”S {°½ä7€ë@ "¡‘y?ð‰è"ŽD"‘.‰D"‘Èñ3\œSÊMï𺌯/G¥’Y\@Áv(òƒLŒï ÓÎ+Z«/–’âã(U|?ñŽ�@ä „·^5i¯€ø¶ªòŽ�üI£ÞJ:cõÝélq½–I–Õ¨ÕS–,ê7›ÎN8 cíΓª¶ÙLÒeOí?xû=7õå““ Ⱥõg²zõœ®t¬Ý÷ñ­{÷3;lÅýíK"`˜ë‡‘ìÞdmöpúk´;çÂ3 T“Z’yÛò�­?ï¼,(È#%€–ê¡óÇßXÎ�f­EŽ*·hÐ?g(ù€Ä¯b”Uë20g9"i�³Ç”Ð,‚€ ÚL8ÇÏSñc5‰D"Ç(-}˜kÁ*è|°ó€6dÏàóÀ(È—@?ìätÀ‹D5`'©Í|ödTÛTtÈ =GÔvÇTu ôˆÚb SµcªÅ` tèpÑÝ7±xð s úuI@oþØï’H$yé ¼ï_ãUˆD"‘Hää±xÊŒ€U0¥ÈRnWFªóÎ ø9kðå¼»ƒ±#û° Ö ‹ '¬õ¨yVÂpSáR\=ÀO‡Þ°¬‘�;Ð?@ß÷—Ì4[S#éj)jÃY=£Ö‚2ÎÚ0œ,YÜfAUíÈt{ËØ�½¿ö• /0çžw‹-ætæH'¿çgïxä·Ñ ×�à ^€Iž‘ÁÚw²_’1¹ØÝ‚‰”£ 5y ?«ÿ½ÝK‡ÊBd¸Ï�PU ¼ø¸à(—_ïúø{Ÿ+K„Å+ú˜¿x5&iÍš¯Ç£T¯KÐ7,  <è–<~”F"‘Hä¡ù[ß0`þ­ý'0uÀavƒ™Àc�ø"ðOÀæxõN 6?¼HƒÿMQa»üO7/]$‰D(‰D"‘ȉE€ €W£ôa$HÁSâ�’1'ÌRr©viOoebl¬œ(DÁçmѲÁZïî1&€*@ªªQ€D­üøÌžŸ›[ËVöõ÷k__?ý}}B·9<3–­ÍZõFMkY�V«&]8ß´š©0 7Þx;wnç…æ²Ë_Îàà §33…Ýñã·=ô |o¨È´Ôê_ËÞh˜ŸGi šÀ‘ÖÁ GGmrC÷Š9W¬n�„®ŸPÄ) Œ•¹~¼Y‘åª,üøq_GÙš§04·ÎÒÕËÉjs+œ<–ê޶¢NñTöuËVà.`"~|F"‘Hä¥õ;Ÿ;xðj0 ý¨mAÉÁ<bA háêP rèÇ€¯Ýx5O)Ràzà@.Æ#¢ AbÑô  ŒÆË‰D"QŠD"‘H$rr©ƒ\ \š€”Óô¨–Ê~üütÉ-T&tÙbœ©ÉmLOÎjRà´Ä‡}sµ„Ž ¿@x*@¸]yäÂöáµ؉ék¶ê­�hõ›V«Ït'êK:éŠ,«¥i–QË2æÍm=›È|Bö>²÷óŸþç…¨^@D„k^ùjÒ4åtæÑÝ{¿ðŸßÿPªßJí–Úåé6óVrVÂP#…�CŒf*LÙyÙ‡Û×/ø4MÓ)‰‹¡½P 0{[/Nª‚„ùÊ¡àü&¥Þ0¬\·”Vÿb×0D©æèN êpp]žŸ½ñã2‰D"Ç!üÌþðVÀP";€jA+É!"ŠZA €¢@�ƒ Wøp ^Ý� ?£èO ²÷»EÑ\À(XAR@é¡Èç�¿vÆ+‰D"/yè ñ*D"‘H$òü2ôµÀ™ ¡6P6'¨¯Ä!O0F‰"ßÏøØ.º�UEïðpuyTçD˜ðß­‡.�P*œ�#ÑB^5sàå«Lqu«ÙÇÀÀ ´úû¤™µÒ™#µUÝétq­–I½^£V«ëª•²ní ÏÿégÛ æí­ó3oÞ|.¼èNg¶:üÕ-wß~í+^í]?êBø¡  �>˜®ÎHß*3\ = 8´´&dl+�}ÆÚÿ*™±/çÐDv+ݹvÞQ�¢"—� œ«9ppp30¯øóB¸Ö…x{ �"’ Z°Áß W÷eà½À“ñF"‘H@øë(E"‘H$ò±Õ×"² äôqTç ÚÕA_VUòîvÆÀZõ*^ ]øÌö¯ïÝòÐ+t?P_þJïóB Ùgê·d¿ GäGQRÜ·X葊aÂ.´ÿgæúöhˆ¢ªµoº"Ù6ýÛ’ë*Ž­›ïvÏø›üüÁ§C‡YµÐ¨êÃÖ‰¸2¡£ÍW”½p,\ÚbÁÒÕ$Ik–=³¡ø>aÿ�x¸7†Ù‰D"‘ÈqŠ?×¹po›86n~»J�w¯Ä¿ ª¶ÂI«î·Ý$ð D¾äÄ vü œPêîïñD®Cµé®»EÄÌò{DPý"1‰D"щD"‘È©ƒ.A¸h@ˆ”t—@è êÂz­êßffj+ãGÆ 3£hؽ"ü[Xž=ìÖl.ˆÀE¤¬ïN,º¢;úæþF}¨¿o�þ�þg… D;͹“‡“3R“Õ³¬&õz¦Mn½õ^†‡ž2ü€4›M�&­V‹n·‹1†F£Áøø­V;vlç!Ë2®ºúÚÞ8§¹ÕÑ;ï¿ïÁ©ý»¯è @�ׂ™QÓøZí�fŸùe,�°a¿è�þkûÊîGìR;F˜;jÚfõ¯x“9ÐùQú9 VÓÏv®þ�]R'"†"�«ï•¥*d! U�Ô+­C5–­YN­>V'OuY‚'¨Ã;Ë·ñlwáÞŽÄ�ÁH$‰‡ð³øÀ96žþðE@ÁaWoý�Ÿ­ƒ$ ÞR•pù:è w“ñ¯rü{#Ð�²{Gצ�¿]:zÇ€¦òT±¦ùÞÎÕs¿á{2p¬…x±ÑÇò5sž· 1õRø6�R-üHÐF+êÆj»É±Í€�u‘H$ù…Ÿø÷ÀŸ 96þx'°‡cÅ®I€×8!è•߃€ZïÁç¤1®nôV�[Aïy(xi’€®ó °W�\ •®ià&ö‚”¯77¾ñ®ˆD"‘H€"‘H$9}Ù\ ãô‘2RzP__A)õŽÑ#”‚n{£##øÜ<”]>"ørúÍוñ;ô±Ë)¥Ê�¥º¨h]Û9ôcsêÙ²þ¾íïï—V«%�nÙc‡ôàµ#I’pù/ï…xÃQ;wngrr[EN«ÕÏÄÄ8‡äh,_¾’�gmª™šÎ‹#�äð‘6cãŒæ Õª1¸N½fx!±ßç»ß½ÝŒ9xþ÷×þ£–Ÿ¤F�ê7—ŠNÛùúíë:ŸÖ~íâß#Ö /hyL«Rûæ¡k’Ó¿)K8´a¾Õ½pðýù¦¾�PñžôhÅûÑ0oaƒEË×�fƒ€âS)Þ„Nž€ª>ÁdÎfà{ÀLüh‹D"‘Èqˆ?W \ıq'ðÛÀÝ<ì«€ýQàlÞZŽ9�pá^=3Ît?þõ©Ÿˆ¡ °8äàBгAúªû†6}Ä”mûúð¯ny&Þ ‘H$‰P$‰D"/D^†Ú«©…‰zÂâì�)ÿ�îñe«ÓLOne|t¼ä¢ÂÀ-!¥HT•\Ñ»EJøƒ=¯sxÕ…Å䛚ÍFßÀžèL¿‘cdÓÙç²té2ª˜žžfÇŽg°EÑsþÔMvíÜTcŒé…}[sÆZðáÔöï<<úÀÈ¡C¹N��=ÕÉ´Ä^<ÑNö ÷É’évB³ahÔSòõŒNר}£ÃF©18Øâ¼ �:Ï+““ÜyÇm=1 ÇÿùèzŽ‚Ú~{cçåÝ«í!Ü{%tûoУi)*ãy­þ�ƒo‘CÝ_hrº:'ýxçêá�Øõi<á{Ï—­þ„åg,£ÞXLu®¥ÚÝCX_Ñ_*êww#ñã,‰D"Ç!ü¬þøiŽ�]À‰=c=ð&·œYzx"ü¾ôI(mERK·0Ü<êÄ ­ÀÓÀv Í©MX ¬ÎYº 8 ¼+Jܺ†×¥´Ý÷xø,ð9à‰x'D"‘Hä9 @1P$‰D"§8ý ¯AäüPÀ CÃÍŠ�¸æ×«¶ö0ã£Û\~ ÏQœ@aþŸû'D5¨ö€ˆñeß'Q5¯l¼l�t_Ó‘äÐÜ|æM‹/áœsÏçhŒŽfÏî]dµÛ¶>M .bý™i6›XÕÎþ‰©û·?ýDóàÁýµ¾$ÙÐóh_bΚ1éý‰œß•dK+‘��"™©¥ÒhÔ3œÀþÑ&KtØ{¨AZ_¿¶yx¸/]ÉóCOüÚüÈCÇ$iMêž•¿¯{y¾ª)åÿ¤ªÎ•+• äé©ÙwFßj¦ŠæPÃ!»¸þ?Û×Íû2©ÑRž)²Ô°|Ý|úW!†Z!\ŸÅÕ#Ž!‚¾ Œß¶Æ�¯H$‰‡ðÓ~Ï-MŽÎ ðn'Mr2±ktÈ›]ØâMa³@üE"ãÛ8|(9 ºdðèv�ÀAür˜âäÐóݲdè `-èj�• 8·SºvBçqõS0jÿ£À—A? ²Ðx'D"‘HäD üMtE"‘H$rš°‘BYN@�FÇ!„m|½ú:­Ž,GÞÝÉ‘‘}äyQª­Ú¢ˆ˜ª<-®hñ¢‘)•ÁïÏ;Kì@Ñ­_Û9xÝjíüª�³Ðjõqùå/#ISŽUeß¾=<þØ:�8{ÂÏðð\¦òü™§ví~bï�^ÞV¶5EÏíˆy¬U€îïOä‚Ü$�6�œ¥&IDjYšÔëN:ÜdéÂ.ã3fÿp² k²Gúæ ï_Ø×x¹©s’¹÷ž»z9‘ ZR£û‹åöoÛ×woÂxñfVœ#¨äñâ"øWÂ÷CöÝÑsÒÇ&ß.]=›c@3Ùœ¯oýU÷Š9•„È%+˜»` &©2kÞžj´²\í ê÷ÆØü‘H$9áG€ŸþXÁ±ñ)'=à �]»ä• × òj`©¢… FADQ ¨ ) n{¢ø‚Ë5èú�ZߦüûÑ•§@FF�émÐ�®€+ÓQ° u R­á^i*ÔAçó€¦Û¯ÅíW¼ˆ#nçŠp0 l¥ü‰@(!°Wá&Ðo·ûâ‰D"‘.‰D"‘À¹ˆ\‡0€!á�Ù@j9Aÿ%§=½•###¨âEc@5}BP8ANµH©.+xÁÿôó²ÎèÙçc˜¢ © ÑhpÉ¥Wô^�'4Ú¶m[X¼h1óæ/@UuÛÈè7ûÞW‹j ›d7EÏñPà2É£-Ó€%"Cµ,M­jQËj =PC—.È £<Ýʲ3À3�ܶzÉÒ­,]ÍI¤ÓióÈ#±ßÞ’¤hÇÎÓn¿ªûÏ:l§Á!b¼�>ÏŠ‚^ôPõýUK¹¡ªrKåjê_?p½ÙÓþu±Ìç°­ä+ÝK?P\²rŒ%+W“fsçŽ'(WÔÉ1„�SWÿ¸sýLÅ�¨H$‰‡øs±Ëóó Ž�û]žŸ[9E»Nـꫀg——sIPÍLùA"¬×Jðxg8"¨½qUÍ ‚”Ûá“€"Üv@� eÜï�··¥m×Çú¶®]xNþ¼w|îüw"|zËcÑå‰D"‘çÉtC¼ ‘H$‰œ~dÀ•ÀËAS�RΕ Ô¸Î\[*°v’©ñ­LŒO…ÂÏQ@ •ë®ö YPKë?ºlîY‹êÙ¢¡,îK“yÍÄÌk3×h±`ßÎíóŸÙ¶U|¨Õj\réå=Љ PmßùÐCwNîÞþJNzÈ9€o%É™¡èÿ/¥"CY–¦ªY–%Óš<5P“µmåé¾@šîv&"�9KW<8¿Q9'™v{†íەÇs:ª;—™[»-»íp;?ôðèÄöoì=¼Ççûª¥Iïò©È뤔Bz'š–B†¨ªê4ëßùEÍV ã(¨Ð.ÎYrSç§.º‰þz�Îò¾T ĆÛ*Êû€oûãÇR$‰DŽCøY ü ðK€ptïþÏ©î6]/ «� A...ƒXĆ2 ˜J·­GðÍm9¦±IÝø6h+øpsÆ­'€ ~£j¯Þcýñ¸íþ¸µ"ÔÝp/pp¯[¶EÁ'‰D"QŠD"‘H$òƒ2„p=° \@"AÄŒJ‚¹x@Âzõ•E~€±Ñ�´§;„¨Z|¸7d–0[‚kL€ª.id�·ž±è5«[õ+†kéùG ƒÖn·Ùµk“ô÷°hñZ­'U-îܼù[ã;¶¾š€N’=Ü=Ç @fK_b6zP²¹ed“€ædYšxÚÆô#'mí˲5�t Yp¤“ß{Æš3Ò¡zí<^@ «Gw»w}m÷ÈÇ?¾mßÁÓ®Zùô®£"| @…˜è ÝDé£K³ûÆ~S¦íµZOGò+ÏøB÷õg߇‘pÒÈVæ+8ö0qÀwbræH$‰§ðS~ øÏÀG'w¡ÿá4EôL¬qbÐùÀZ·¬mz{z(êˆ Ä¡ ÿ^Øq‹¥„w|‹·Å_Æ�ã þ·ÀSÀÓÀ“ÀÀ÷€­€�ïòH$‰œ ï�P$‰D"/V�¼XÌY‡‘Ó*þ7/Õøüµ x‚iñng£÷“ç6tUçþBQȇÑ(…þ:NkîlXöÇýi²ŽS€-ûöù™ûîú!BBÐìÐÁTdØ @6Ë2sŒÐþLdá‘N÷k™>ãÆ�©‘9¼ð胇Çßó‡÷?õ¯³‹?!¬øDT¾îè¹¥j·�\œ<=ývÉuÇ€n=Ù}ÃÙŸ-.^±ó(Ok…R÷÷yüè‰D"‘ÈqäùyðWÀ:Ž��ÿ<Æ‹Ñ3X¬ó‚ë@– @à )¥øÚŸL¾çÕŸ¯´7l£+W ™{výiáÓk?–¹aÛY¤í€å�ë€*ü‘çüd¦Ëû�‡�¿Bª«WCÀ—þˆˆˆˆ �tû�ï×#$'ß8žx1’!�碂—ÉvÒÞum�s£%Õý¼˜¿(ù¹fFô�³DÀϓլó\Í p¥Š;̬}‡$çñüÇâ³~|Ãã�¾�buí]õ ¯ZΜ¶ÅX�K†6ååÝ{Çÿù«&ß0|•+d÷Qƒ�Muä~±í½u—Ýð¾ðþ'»`FÜ|تõýEDä9„?Ü|h¥¶›�UÀû€§Õƒ"""¢HDDDNÄà«À `ã€ß;3ÀEGóG\rÆPÊÖ-¾>bäëÒÕ{Í­MxñV˜ pàp> À˜%ZZ ÔàRÏ�K{ߨÂ9ìD~O> z™MÌ:3G‹~œs`>ĉíõdD×}’K6C–œ½ˆ®þ„™b2™LöoéÂámcŸ¼ès¥U}×¹ÐÆ©!]–ûæ�Ï_qËÛlähðð}à6`B�9Éàgpº\Ü,§¶G�·[Ôƒ"""¢HDDDNV¸ÜåÀ&0‡YÊ@Î×%óð‘#9ÀÌ_bAŦet÷/¥¾˜þÿËâªÊd¥ò ³D__3ÕŒ»ˆ3R8pÔf$9€E Jc±XÌA³ÄžÑ±½DK÷ÅþÍÑž=>Ô1üÍã—Œ30ðG¿ü[˜�K»Xºš\]�ÎHNI«ËV&ßõŠuãÁgÊó[ÖŽ*Ì„;Fίûì��´ë™.GôÈ‘“ ~§Ë瀭À[©mø0 üX³MEDDD�ˆˆˆ<_Ç€Ÿ�ûð¨ÏabáOí8à œ?õ3ƒŒ˜ œCKû¹töÎ'›ËÑÀÄ0ð'˜;ÜÌ,±pa ��M@ºÉ±°`jf‰ñRù© ;v< >èña^" ˆßdf˜OãGŒž�9,9g �˜ù€'5H¤’87¢6®·ùèÄGÎÿþÄ%«ÿµÒR¿“ÌÑ \lšÄ{�""Bíà'˜.ï¶rÔö`1ð9`\½(""" €DDDä…´ø6صÀAÀàùñz$Wì2K ·µu�”Íõ0·û\Ú:Û Âp`àp@ì¸ÏS…GžùŸ±råqÎ03cxÙr‚ .YLŒ†�åI+$ƒ çüÀUòaÓ¼Ö9MMœyîðäÔ–[o[7Q)•¢^0‹zfæÃ #öc†¿Æá-íu,]5LëÜa‚ G*Ÿ&Uéߨg—WÏÛ=þ‰ ¿ó µ�¬›ÐûátÐãBDDH^ l¾tQCÔöUÀ»€'Õƒ"""¢HDDDN¥m˜}øfSç’†³Orñ×Ϻ´œYH¡~ˆî¾4µ4µ üž13\éàÈðž]�Ͻë±'~¸óБŸš,=0^*ï©87ÅiÖÒÒÊò+IcF̱Cá|€J™,€Kï-ÿ§ÆYzk(�†‡÷Íá (;7>Ý÷»GÆÆoß²û©k®¿õ–ŸÝñ«ήŒ�€_º‡‹íçä¢DÐ0ÿ7&ÓD3 !C+è]p™L3øöÉÀ'åŽ R‚‹ŠSoY±yì^V^Ôþ_ƨíbàÁé¾Ë¦KQ� ‰‚Ÿ¾éò]`=°šÚžÞ ü°A=(""" €DDDät)·‚»ÜfX•´ÃE�ޝ� Ë'C£dR„õ4ÍYNϼ!ê‹ùãá�™��žB³BÃÔøšÃOíØûÈŽ³ßùp×}[·=q÷ƒÞþÀ#�nÞºûÉuÛ÷í_»{tìæS uw÷°rÕj²Ù,à9GªCûÂ¥8,ü`œ„cGh/‹¬\Ù— ÀSéàøÄ½;žÞýOìúùæíÛ×mÜrß½wÞµaÿÝ層oÓ†Þû6m¬ß³}ëÆF—1œ_ö-Á×›ùPÈ,¶Ž`˜ ˜?ÔÁÂáÕäëº!�I]âÍ«$ê\â}Ã;B1ÿSàí‹�k¨-|xhz°ï’é¢ÿ?‹ˆ¼|ƒŸÂtùððj›> ,®*êE9�2ꉮۈsoÀ¬\<í0¿‚×L!zí‡åÓÇðý6/þú l£­£�Ææ'8°ïI¦¦Ê8ã8GR¹Ü˜�?›Éqö 7îË~¾²¿÷ÍfpŠtvvÑÜÜÌý[îåÀ�ýÄ1ÎYŽé hQCw/Ö9T *‚€ùóº²mm�œjO�Ž­¿cý-a[±ø™ÀŠé–‘Ê0¿œ‡óA!¡Å¿Ó®þ&Zçuø¾½—6ã'}™½ôàÈSÀ&`3P†»€K€+�/«©®¸øÀôà߇€�zdˆˆ¼lp1ð`>'æ¿�Q÷‰ˆˆˆf‰ˆˆÈl±øðÌŽ€ÏA1©çŽšk§åòýtõŸG{g›¯¯~YÒÔáƒý�:r§X]]�5¯xõLimk'Ý8UTÊ–;j­i{90 …ííséííãt„?¿[Zïž;~½0NŒ#bþŸîy3瘯Ãáhn«cÉÊaÚ;ÏòáOŒÃ«g)uü€óeÆö(¸¹ (Ië�WïöPÛ«€ À·�=.DD^òV7מ`ø³8¸Xá�ˆˆˆ(‘Ùê>W€Ý†Q®î8À�Y¼«–Þxf KèXQ 3Yª3 É�îzì‚Ó¥­œ­­m¬Yó*Þü–5n`Á MMõHÎuñ*erà—€s‰ q²Ù,sZ{§CæÎí ¾¾3ãTsΕ7Þ{ÏW*µUQ»ß-í“âûý˜ßÛÉÌÈç—Í£á¹d³-€ùâÞ”z«’0Z•@{�k�€Qª«D�ÎbàóÀ$µ½3 —þ ¨ÓãBDä%§ø:°x-µíÞ œ ܬî-'"""³Ý$ð86a¼Ç0àÒöÛ�OñuAzd–|]<šÉwLäS —¨ó,02�=²#·lñ’£¡Y‘Ó ©ØX˜. Œ��qðàÆÍsJ ”KeòùqF�A6—!—« òù,Ùl>ÌçrX&7PÈÿ®>pšíxzdíØÈž7âÃ(dzsFœQEþFß`;�Í 0Ë$B•dd¤ñmÉÏñF�õÀ6NÞ‘(ÐùðEà­T×ü ð×À¥ÀO§Ç†ˆÈ‹Zø ðI ‰ÚJÀÀg€gÔ}"""¢HDDD^lט]„s�`€Å‡àÍHHìd~¥°äž@‡Q�,@Ù‚¬£bàð¡i@XšZôÐS{o\ÖÓõzN¿<\WW€Î.f ÖœMSä 9<1¹eçæ Ç5Y²]pü t8 ‹;zië\HáŽKüNóï%öøñ$®5Àá¯ß ÜLñüìþø#àKÀYT·ø1°ø0°E� ‘¥?þX̉Y |xP]'"""ZNDDD^ìʝ�]�sÇ âHpñ£‘dà‡Ìˆ*@É‚ÜD˜)RƒG¤|èÀyç&õUU÷è®ÇG B<£&—Rå*$5Îɱäì!:zV† ÉåÙR—nóÇ àj´³ãm}`s5°˜â…s°øp€ÚÎî®Úu—‰ˆ¼h,~\‚áÏvà�Àþˆˆˆˆ y)qÀݘ]ޱáxà³›Ä8T_ƒoc8»Ðˆ8#É €l6Ç¢�Í�YN_SugÍXÓÑÑ…ç¨Îá°´ù@vüúl.`áÒ>úW“ÍuÀŒÔµGðïÄUðm“í÷?®qj”¢@g¸(S]¼xø�ÕÝ&"2kµD3~î.¢¶ÃÀ¥À àçê>Q$"""/UãÀZ°¯;}c€K†3žs‰:ß®–© ,L—:R444°pp�B¡ %n©-Ìd2«Î]ÍÂ…‹Àç/Žt‰.¹з°�¡çQ_ÀŒHPe¯Ÿø¥s)R€¿÷Ößžàô8üpðKj›| Ø\¨;NDdV �¿¶2T瀯CÀ¿ši,"""ÚHDDD^F€ïCÀ…àÚü˜}ZøSeO ¿œ›‹�ý{e rP¼žöö޾ŽÌL߯IZ¼”bc#›·n ÇI0ç*´uÔ3·g�0léûû8â| ä‹¥?–Øû§ ÜÜ Lpf<:oŠQÝR`-ð3àR`»î:‘3êü( ?›sKÝ£®Í‘—«‡qîJàF`¢êòofÉ×±P(’š$u··÷õwvÎSøóÜuw÷òšÕ¯ªÞ‡Ždªw¤kþ]ýçúð'%ÜñuVeY·xH”¾TÜcQÐøk`‚3Ëÿ ,þ8Bmo~|hÖ]'"rÚ-~üêßÇ�?^§ðGDDD‰ˆˆˆ@¸ç.6³™R�Ÿäë�^ü$Ÿ¯£«¥¥GÝþüÍinnìëí«#UúqS¹ºV 8Òé³|üÑð,q À3ÀO�ë€Ì.À€ÅÀ7GuYàRàaீPwžˆÈ)W.¶o£¶c¥É‡~4yì¦OM[››.oŸ.ïPQQ™E�4@"""ræ�F3$¾<Žsà\r¦OJøž3x.åÔÓ/ úúú€**A�)…Ù:<¨1ƒÇðÅ¥¼?úk&�[€«�ÿgvÛ¼XÜNms�ÿî~_wžˆÈ) <|ÈSÛ5À’Jé‘‹¡ôMà»***³«èÑ&"¢HDDDf�=À·€av(e&P<²0 �Þ‘£G)•Ëeuó cß¾½%H7™É5”ÂLA1x^Ú’o‰sG2$ò~ü'° (óâ±) tþØEm«¢�ëÀ|Ý�""/˜Wë�ï=Ôv7ðà`—ºODDD‰ˆˆˆœ¸€+pîfœ›Š…@A€ŸTÁ9àHJ©-—Kìü-{wÓU€qü+Sƒ¢EÑË.²ZE­ªEß EPô5j¹ú킨… -¢Uоd*Š‚iŒ™o£sÇœQjÆ™;:sçœZ żè½ÈóƒÃå\îêár6眨—ÎæòyE\?k-Sá©õ•/D6dØWÅyõrÈPúÎÚ�nÀçÿ䀠xd©í0 ´Íú#EDêv¢Xú W¨í+p�ba¤øDDDD�ˆˆˆH} cžbí$˜²��óë”B~k_8ù¾¾–ÀYËndòÁ¬·‘î�f²]©\¶ÎücrÖ®ÆýìÀJÚïIæòãÎ9Ë.$q?ôáE�²cÆ”)yL•{}¨Pü¤€·À+ ÎÞàmÀ9 ƒÚ�‡À4p0Z2DD¶­xÌw©-<Î/«EDDD�ˆˆˆÈ×ÀsŒ‰áEö·ãÁ ”8*1ß'êEI&S;`�ÛZIgú{GG‡Þu�™šüÈÄBdf-ºx~~a.;‹õE’éîT.˜´ÎåøÃ²Aa9–J÷N,F:ß}êï9652Ø:7;ŠyѦÏ›�¦Ò�yk쀟Í&ÇÆFÿ92™ õq®ÜKªs”ž0 ¼>³7-·�«À8µ�Ú�ಖ ‘ª p��fj{\îŠPDDDö²E """É2𠸈s7€€‚1°¦Ü½2LµRÁ9G2ù­av+Ÿ4Ô3øßý·.Ìo çhα@èeB€+|¬Áø#À3@‰ ÿ��_~$Í��/¿¾ ë‘!"ršk€�O�ÎA`3ðO•NDDD‰ˆˆˆ¼=ö‡pîFà†™–᫘¹š×™áX”ÁBÝåÒ•Õ¡ÏdZ÷æÚ–ÕÚ‚L`¬\)§¦£Úð‰å¹é‰Ž¼E·%_±Îw´úÕ¹�E…9öŒò§�k¯¸Ós.` ííõ‰ñþÞ¶8®fqX=µrA¶Q 8‘·WøðóçƒÎ§†\vÀ‡±€#¥\eî"76´²0Ð×9Ò{¸³|ìðê`hà2¿:ßUË-4a$«ÕjLUÃý,¡Ø¬|äxß`$s4‘Áº[*sw†c#OëYuäàËï=vt�+Ï^ÎÙué†_†~&\ƒ ÇG}˜žþ ª "ßÖ#Ù2à‡À+À§ô~ ¹@ÀW�ànÀKºoÖ¿Pø#""" €DDDDÞYEà‘_+?ÿ][y-ûªxå„|&=—.Ar`¤0\(Œ±„&æ+ûÂZÍ s,î­7—f¬a4c0ïg'�v^ü¯‡×mºï•®÷÷/¸ž×äwDÀà7ÀAÀ4ÍßÐÜÜ"ÙÀãÀNà*•OD. ·û��N’= \Ü T>Q 8‘³G_�ËÞßãw]�o7µYÜÑiµ|{æÛ-j½Äª]+âpEwTYÕ‘–áR¦HŽdnnth½­|�¹SXý'^�sàŒÅÕWÚ¤d€9ç"?“ ¢�Fbçª#A[ït&7V ò…©L®8™ÉÏL�ÚŠ™ülÙ¢ïó‰©ï[ƒÒö»�IMéEí6wß:YÜ&`°ø0¡ŠÈyêÀO€ÛI§øð„þp """¢HDDDÎ^¼îÀ¬óo:µ]7èç<^׎˫¥Ÿ�‹Ÿ,y™É.âî„k9õ/FCål¾Óe‚, ÌÕÂÕ•ð¹®|v#g¨\‹F Ç6B¦/m…¥ °œ‹2A¶Š×ê…e�&†‚ÖÃ�­ºöÏ‹„K¶ å›G�Q7ì4�S �mÀ#À})ÚùÀ=Àç€ïÛÕÞHDÎ#Àà^ Y Ø üLïJQ 89w̶cô§e6áçÆhÎ9÷æ� EÎÅܲKI©§¿¼Å#œ™xÏ�—�Eí)ÛÜ9RŠ9ÇùÀ—�àë)Â~ ¬~¬ðGDDDD�ˆˆˆœ›Æ€‡1þˆY8 }`b@Òg`¤`V-wé?þÚ‰Òì““Õð¥ZlÓ¤›……råÅçwÌ�œü8o‰YR@Tó3ùªŸi3pÌœHç¨3Àì[ƒ6t1°ø5ðkºž±À&à. �dë�§�¿kT>9ݼìºIö,p=ð%`DåQ 89÷ÁÑ ÜàÌîrà,y™Œ�n8ãÀ‘Äê§{qÜǯ«£¥Jí`ìûS---±ïy ÌW«³³¥R®2Y\máüe'-óüÅ,�Øy�ˆçàŽÎÌѼ@FýXL}¿ØŒkj.9ž6ß–±¸;€Û€€û�i•QDÎrï~|†t^¾<ª÷üˆˆˆˆh�ˆˆˆœ"àÙ[f‡ÊY4ò àw|Œ‹˜dùÝ3¿â9¼Žm'°Œ/p4ñEÄ=4�e\Àm¿áœÂŸ‰/""""PDDDÜ?ª–²³‚¥Vµ]Qé`mÏþC›¥A¡ª¶R�ŠZ(v¦\ï=¸1´3•ʰ *VpßãZ–ÝL¨¸€'ð6´�Âe¼‹aDÜEã³­»é*Nã$–_DDDD  ˆˆˆ¸/ �tÛ«®ÙRM©š^eÔw£9¨Šª}‰B…ásU†m–nÜwã¹BÅÔ WQQ4TÀÿøKø'Km&]ÞÄ×Úæ°ˆKx%FÄ´ïà ÞÐÖãCùì6�Ûmqá´¥Ïß÷í7ùñ‡O,"‡‚/ÀYpqtvrÐн³[A\tu B ­5MrÓ<õÞœsϹW‡N%M ¶EÊùLg9ËïþËoøÇF 2‚ý”ß,�^ÂìÄ›ãäÒo£±|–â(REù �BÄ‘$™TÚc�°ž—JʼnўëÄ#ÍÍZybº@s}«\¸Tº�Ëq�D›”¬ûEeâ,…ûyž :²*ì§””‰–m"GÄÆÃsDÕý’ø¶2Oêõг¶æ;Z/ œ!0œ¸_À*§gxœÎ=¸ ¼®1Ü4°<ž_ìD±,ë9À#à0ÃѼžŸ…ýr‹opçîMc´¦ÝéÒnuØÙi³±Qåã§h“ØtB––)—¯Àž±Â¨ Ų,Ë:ÓR6˲,Ëúo]–m k4ZÔ;T*[sƒ ßoͺ® BT¡u„Ñ¥ 1ŒÙ¯ÿ»:Ùkô&+€vV.s}†pk{BÅQ¢Ý0¶º9á‚—rI{ƒï¶ºSR)'!“vioÖî±Wuþžƒlš C  8ŠÒa­:ÕO@}9¹ ²Õ)ô;]¤R()‰c�›PÊ3ˆ¬Ö¦Åû¯vGÌñx¬rú>óÀà%p‘ánŸ�eà°mŸÎ²¬4¼îs4ß�?ìÝKHQÇñ’\X‹j[ÝEQ m*z“„.$z,*¢ ÍÓ¢Fj‹²MKKDQ³L•Á ¡P 5®"µ Å·÷¸©¼:£ÞÑßfwÎaæ?sV?æ²€‰½{ws5ó"óÑß?@gçgÚ?uR[ó†Êªf}Q"""¢p"""¢€¦cfüÅùOsÎáÇlú130¿õO3ç˜8¯õ§>‹¨Û×Ò1”à>0Ž7\º€kÀJ•PDæaP|œeøÓdñ@ƒÊÇ¤ØØ5ìÚϹ³§(//£½­†;y—ظ>VÅ@"""²tô ^Š›6Ìqx0¢`8çÀ�óf†?óç<&1£PHÇü,2}@6°¨Ã_,�´‰J Ed–VW€. X†·0P lŠ�1•pf�À&®çf V“–šÀB—™q‚{wÓ¹u3M/ODDD�ˆˆˆÈü��OÐØÄŒ91#*ÎÁ Ì ŒÿÊáðf@9‡§îîï €¯ 8tà/ÔõÀV•OD<>E@þÞñ@ðƒ%"laÿ�äˆ+99•œœÛ””<¥ªªnr\oïFGǘjÆõùàh¶á/$G€V–˜áášßuF\µ/ß󰨂¬ìœ<�Ëž}çÙ8ÆÖmÉÏ/!êaª¤¤^èõöøzíö"Bðß,’M4x4�ÀóÀ �ž¹_¹À2À]Z(Ä 6Ødoã\°ðNòOœ+,ªÂwý~¼&Ícûö=444ÐÕ¬Y3ˆøq'înÉÌÓäÍB!ù'„BˆÇIvömL¦ fÏžÆüùÞt§0èTYYKrŠ�;w*ºMÔ466ë©¢öÒ!ÐСîxx<ÉĉÏ2}ú$ ÃÙÑk®Meg‘“[Bii%õõ=p:§µµ•¬¬|]£F�ÀÛ{ª^{‡®Ï1†ІVVæ áì5êêdÓ ^÷€¥À~ ð¦g£�}À2`9`“ 1¨ [�1ôN8à ü)íë›–V…ß7ß“��HDD0ãÆ�¥Ã¼¹obZ»ˆÍþ?0PL™â%ošB!@B!„�N[[Vë%V®ÜÅ… W(/¯À¤ÞåÚÕ<}äÙ‘£‰—ëðÇ™¦¦Š‹ïbµ¦áï†Í–ŽR ¥èú(œÒÓHJuK‹**j°X’ˆ=“F^^‰i”R8SUUCT” ŸÌæh’’2ôczmÔT×sãF1±—±D¥Hø#:ü¼¼Üƹɀ°¤}B 3�4 ´—áO*ð2°XŸþ‘˜lgÑâåÔÖÖÑÕÒ¥ yjôp\åîfèr•—× õÔÚÒÚ㽆 sø?Ö%×B!�B!Do555sýz.qƒ£2�jÇ5nåŸÕ÷‰²ìf�i¡Ÿúz�Ãá›tßnfÅt\_¯#3#ŠsÖPBúé½ÐÇ»3oÎ4¶l^Â/'÷è5T;®’s3–ØÓÁ|ð¼ï-Z!„B!„è‰ûPÏ7ÚKI Üzn‚·Z°ÐG­Z³Eí 1« ÔrŸ�jÅ×Õê5›ÔÖm»ÿfïl`ª*Ã8~­­D³Ìµ4]‘ÖÊR™(Φ¸–…©Ck°¶L°ZI‚ø• Ž N0A™†Ù¦Ð¢�ˆ6R¾?ãS>"aŽ@ˆ°Ÿ=cîÀ½Ü{Ü!—ýÛcwï9÷¼ï9ï¹Ûùñ¼Ç`oÖÖBEE¥Ä•ꤖêêZòðôVý=Ë–9ɱi»ÆÆèܹïÔŒ�ÄÍíKª««'5\½š!}çí̼G „ŒMž´²$€û…ÐW»üÈÛÇŸöì5&€v?@Ÿ°Z6 €^}m Æh<=vàdkA9ܽ°Ø9?‰ãÊiÐ0ï/q¬u@i@Úããs˜†âäô‘Ñm®_Ï¥‘•Ŵùƒm÷[_ßhVtŠFÙ3ñš�­í;|"BŽI M´bÅzUç,!ñG {öø©’?wî´ÑHÈË+TÕ�Ó§Ï“FäÙ¸q @YfœÖ¹�Nmßù°ÈjŠ Æh¼=~Œ³•ÓÌ!•¹À™ƒ»85×í8h˜ç…œUº €ÆNÍza©T¡( �ˆ1¶�TÇ(éìì”*›ÄÄŸˆ·ÁðõÁ@Š�ýFª~†RXT*"†„MdäYI\Ü·¤¤­í?ùÜ@†=Þ7Þt¤û÷¥oB¿TÍü|%MŽíð‘ã"ÀN…ÇPjjºž´éîöïi@AÁცrÚ;:dlbbΓ—×Ú¿?@*djjê V9:n2yÎ\\dj™9½Ê�ôMÆŠ—ªɳÄn­Ñ¶\ù$•8 DHh@"™áÆ�<š?•Áí¦N³¡£GCXnt“’ÜÜUK÷ÕÖÞ¢ÂÂ:v,”æ½²Òh{w÷�ÔÑq—”DDÄ×^„𒦦f“"ìéé‹h»Ç.º|9I’‘¶R&’LAjê¯ôòÜÛ¯ZíLeeC¯Q €²ÌÌš½’ŽG*�Ÿ ä;HÙ,~ãd)‹çq¾ç�ÊÜâ|È™„»:ãj.?ÁñåÜU9—û8aœéº €�ºx1A«lQ<äW—„„$R’’’>Hûqru‹^å‘Z¤$þÂ%‘<¦¾ïÓÏ|õäW%iì—ök¨¸¸l¸¶zUC›6»›õzËÏ/"R©dbyŸSii9)ñÜá@–›iÏØ‘õ\G²_îLNëÜÈÅõsƒYíèJ‹—¬£_z‹&cÙ7 Ë|x¼†S¢AýαÅ�€qñžŸ œJ ó÷ çuÝ@�^…… Ú¿T‹˜ù7LÞo£@–†3�2ª«kI�T)MÒÒr[jØWTœ‘™Ÿ÷Ej×[Ø™Íý¤æ}uõâY°R…R €Ì$oáx8‹²�8§““�'<i¹g 8>âgšs$+�k�ôlQHy.Ãï]‘±XL—s«’ó«�Òp6�|»ØÙÞÎ]%´ºúÓÂ6�%üB dÕÑzß2KK˺’cÉ¢ËÞÍÎIsâ¤ÇQ¹ÂòòÓ@ð7ÐîÜý”DZåB4Õ..L ð–ì¢þNMMÓÓg^ª¬<ët_Dê8@D£×ûšŽ?G<¨dvPy;çN¢DYÈ2çgžôü³{´�óÛÆ=z‘³5‹�rŸò\¨¥dŠŠÌ—“�Ÿÿ¦Þë¿äýéFÔßÿœ455uV�c*ÂÄç �B¾S —ôÍÑ””µ$Yê¯6›Ø¾L¢I:W¶£·÷ iêê!€Éd¤Ñe?ÚÚîKãét äA©ææ[@æ™ó9o°ºW­Ò«²¹JïVée¦ÚSxØø»ln.Dš¼¼n@Ò¿GÓÔtÓ²x™Ò6»»“frò“ñã{G ™Äbe_ÖÖb²*ºx_©£í××7‘Æ?2jû7Z[ï’†ËçAò? M(ôU0œ ™‰,�ž“"åãñ8YaðÅñlf óýEJmöâäâ©€Ñ{ñç3‡,f”Sˆ3—èZC )ä½§V±˜(ý%B‰W|¸Zñ;\ʱ ¾JYutߥR�ƒ qXÌsÔà™P�B!„BÈ’zÜòvä°ê´Õj™—\îm· w¤ E{I$nËê~rzúYH}‡n(rBž­ÓP ªE8_y蒢׳»9\ŠÅÏ~ÿÏN]ün²cÆŽç…qÃ.�¹¹ÿ>>ˆÅÜgƒN“@£Z]§™S*}㨺¸ÐÐÐHì1mív;L|hü ÓÖh4Ì�f³ÉQrËË+6?ÿÕ‡Ð#t‡‡“63ó‰¯çcç³;Šö˜öö^1ÀýœÑsÈd§¢¢NB¡—)"hdä~ÊØññ‡vïF B!„BùGìgf^`÷†C FªkÎáx+¨+o”Ëtnˆ—$KK_’¯£”VVf“--Ws½n(7�~`ÜŦË8NeIÆk;�ÀoöÎßµ©( ˃“›‹›ÿA&7‡¢£‹ØÁ¡�ŠB‡8ŠKŠ‹] -$�¥þ„Rm±N–ª-q,„"88äŠ-Ä¡§ÏP§4œsIÚæö}à[Â-·9— 'ßû½ïA(BT‹!±mp &’³ì¯ó`*õ¸ °ùS¯¿”t²Mí«V_„ /VW´râŒÅ'Þ²ú™ðž¼µº¬Õ+–ô|j&)Æ”ýS~bÓq@O*UçÁùC ÿ'ûÓ¼ÐÒÒû<Ï‚a(Ÿ••Ïá5 ùÌÏ¿áóx¨Ùc(wºïÃÆÇ+ás‘$„B!„E€††n#näwN/ v;ã3Ë!Ç}“Êôt-6v —R|‰“£ùàÐ`â_D¢ææ^…‘(þÜgˆçº³³ë|Ì­%ètd×êwBƒ»auI«' þn”¬VÞ‹¦Õ5­\Ñ œÅ8�÷O7'0qoœŸy?ö¸Dò @¸‡bﵸøÎy ®¤¬ÍÖV+§Ä€îëÔ½D¸o«T&]·¹ùÃyàм±¿ õGbÏ…k¾‹ƒéÆÍ;΃½»EòIB!„Bˆ @üøkg™ ±¸7&-΋ˆ‹‰‰g®V[pËË« öV‹X’ @À¤¨ïDêtþ3y9;û‚ȇh|øø)l^pߘ8¸FãõQ®&âæÊå§nl챫Õˆ™óÖˆÍÚÚ·PJ™Ä¤™a‘&Ä·Ø&¡Ñ{�\urÊ­¯w|ÿ€hb‹Ògˆ(>Ÿíí_Κ €NO³û‚UÕªÙìþgU¶:¯Õ{.ZÍXíE¾ ¬î[�ÓêNÂ]8gÙkŒŒ>ì_ëÁ¾)!6–óñ JBP"rw£ïµ±Ñt¸¯cÿvxø�ƒ4(¼>ù<�pø§Tº~è:‹ ÞgïÌc«*¢0E1&& Aƒ(˜h"â+ (D Je­ ˆ�ˆ„]Öh,†BÓ²•ƒRl ‚ ²×°Š€² ¢- 5R”ñä %“éí{3Ï^¸·|¿ä„¤¼×{ß¼!Ì�ßœs”Ê(Û^cêÔ™ ø"€èýSÆ… ¿yõ¼„È3ÊæRB!„BH@Ø((,ܧ °)mÓ¼îcMñà*2Ƥ¿oùŠÕ*!!1ÚÆ€™½„FÃÑ®—”ÔK™\ºt =w¢�ïÎ�{”†‹Âg8wî<îM¤[ÌïfÌØ)Ê$9¹Hú`h@ ú'€0Æ8é«Q6G)€‚·ùý¸DŽCÖÃq‰ŽwpôHÈç~u‰¡-çþU‰™58zUOÕ~¸1Ê”z4îÇ��Xï/**V:Í›w°ºn»v=�™ë!€\zi½£¤‚ûz’ sâ@zö‹µ“×áûÔÀúÏëµRy×@– ÆÒ7„ #ý03Y”Ä\”òÎ@„B!„~„ÚßfóZd¾8\×/„÷¤¦Î²ºÖè1)å>G�:MlÅNpZlš@Š¡Œ‰³B¸œÌElÜb62‹B˜rqýú|_�œÊE¦š)çÏÏPò÷@ÁÞ o-±ßAH<Ñ#!�æ{žD=Ž\•@ȺhÕª32Œ‹‹/*�‰OfÍ'ésc½eâ´Ã×s•TˆY³>S:{ ÷ÅZ¡lÛŽ{p@&Xkbmý»�¬2…H‡==_‰ä)�U9ëbŽ…d©CHKÔ©sd%9ÌQ³T1æ[‡ºp@IÐË1#ûߥ÷ã´ééJæ!„B!„DáÁúìÙ_”Ðñ÷@xPuØL9sæ¬Eo"l|˜'m!®…²bލ2Ê™a£!<ÈX8}j)€Ð[¨‚@yƒÀ¦…”¤17.°!¿—(›âwI ’øÝrSü_‰9µ8z$$süI‰\ñsD¢=3ÞB#€� 2lØx3°¾�õ²™¥t,Ö¥¥¥ªгeÊ”Ö÷±xqV¹ž�Þ^ÑF?Kh}gœÐÒ¥«”za½GYØÅKU­z–1b¢&Iâ@�7-÷ë%Ÿ^zùM•Ÿÿ•2Y½:·ÂkMžœæuo^¿ŸUÖ&Úa+¤÷UDO¨´´O!\*¸'H.ÉêÁgׯ)J6=ÖR&99¹X7ËÚ×Súôî=‡{äà^/=‘(€!„B!$îf J‘A•””heE¬½‰4пÇãuxPÕÀ†Œãgà Ǜ!€^hÒ^ià$l˜PvvDé>ü£õ|t(3wý„/Pø6ÉkJ¤Küc¹I^,1DânŽ èœ~@b†ÄUË9ý‡Ä‡Õ9zÁ@• zZÉSêœ>}V#ÃfÑ¢Lù‡&ŒC裘—Wà$€š6}} i…i+WFTdíô1<~üçrýpÖ¬Y¯ pIäÆsΜjÆ�êäÉÓfù6Pr@XÛb=ˆRhÒ×ÙLË—ç(Yƒ¢?Ž»víE)µ(‡‚�íìñ]¢äïô鳑�,ë-ôÖÔÙ½û{µdÉ2SY¨‘σƒOrTRF²fëÖïÔåË%Ê}(£Ï%È,]™™õ×-[¾Q²–ÃA0ÇD~QB!„BH�Y"ßòó@ µk7¸^8!éqª:(qá^³¹> ܯ¾iqâÄ©P  … 3Í�?�y8dÈh%ãGÎMóúùÙ%ÚpäH€æp5‰÷$.XÎákó$âèÝ~hûö]èïÿYݺõCV‘%ØÌ—Í~¼wÒ¤4„X±b�²¡K—wÍž4XÇ8i$}€p_È?·†Ê(ÑÚ¯ÿP›À¦~ëÖ]U½§Zj½T| \Kä Ê‚I‰1d±Hy0ȃ-’L€ûÑî¢ÁòZø}))«ÌÌ•jÛ¶íjóæmjÙ²ôŸ‘> QÆåt³²²ñÞëåØ�‘””ÔËó>:vê]vŸ�9ýî®]û–½î†ìÒ£AƒWQRnݺ/•”®C ·ÜÜ|5oÞ"5hЈÿ•=Ü®]5cÆ%åðP OeÞF�IQ¯µIöúþ‘Tv¿(l1îò}â3ˆ¨Á¸‹ì�Zµj-Æ_Ö»ñ|sn@ŽŸª2³Vb>IïEH´ŒŒe˜"ùôƒ6@„B!„„¦­x  ’š0aš'F-ûº—œs@èS“œÜ÷$Ö(#§[½j·‡UaSBµã�k`î˜Èæ Pø7×kK,�¸f¹¹~^¢¯D5ŽñynÞ'‘"ñ·åÜüKbœÄ½½[+€ F¥!„B!„M¥¦ÎRh.$4jÔd¤�w©9÷ÀÉËxP�·¨‚‚ÍÈì± ÔèØ±ŸLáæ·BÌžýy¹ÕRš„¨jl¶7–Øæ�e±G¢GŽø0ï”xGâŒÃ|üB⎃Á "„B!„Pù&€æÏÏP:ÙÙ‘@  ‘#'Å“ùSE"yJgîÜ…ñ~>È„¬«#GŽªh\¹RŠ>9Òì’�–Ã)€ÐG@¾w³i³ŸÈì`Ê>  ªÕ¨»Ä)‡�÷,‰G9z¤’æ`‚Ä·óo§D3ŽƒÁ "„B!„PýÇÞ¹ÇVYž<‚Ð ‘0Çp7dÁuÜ•±M¶qí)àq‚ë„À�R,0&ÒÅDœc¢Á :AÂÝ¡i¡Ü:JÁ`§PÆ­-]¥ž=>IÍ›Jß8œËï—üþ öœïœçûbàûåýÞk€¦<;Sìñ1€ì9øö¬ô*Ç�hÞ(aà›G�ÚÞ5ºI¯=Ó=ðlxûs¤ ±c“$€ík¢dϨwÑ?€¢ï&ümj²Z¢Š‡%j²z+Óƒj^s ÕªxzTªÖ`z D$(ÈöžqÉÍ= È6+¾JáË6 ö @=$……Eâ`+|zö|´’cDvJOß&¶"G²ôÊ+óƒ×8(zoÊ7RSUñ4OM`ó}¨Â5VK�¨žQÅóêLµÓ#!"@! @÷4}@\ŠŠŠ"<Ùª¦JЈ‘ãÄåtA�ÜQ¯Uµ¾_FF–WZ½úqÉÊÚ# ïºßþ[” ‹[A-ZÊdçÃåÈ‘£ è¿IßAÍTÅÓ�Ô¶L*yÜ`oõ�*ž¾§6az D$(¤ÈõäÉSÁÇsE}ú~“ŸIII‰¸$&ޝê±,�8qÒ'Ùž>.½û ­Êq".Õ©ÛB23³ÄÁ®…-;‡2ÙùwIOÿ„7ìkªÃÕ|U<¼ ÎW0=\KÍÕ4U<Ý£var D$\ïd+QûáDtJšò\eÈ\»vƒ¸lÚ´µÊÇšœôgQ* @¶Òʾ{9Ÿ,�øg̘É€Þ~û½ŠVÿ„4egçˆËÂ…© Øºy»š¢–ªâa¡:^½…éÅüµS_�«žWÅÃêïÕ™ @! @þq¡´´ÔVE{6l”;6Éû8µjÇINÎA¯Ô§ï0qùì³ÿTé;mß¾#R�­VZ¼ø1{ÿ4köó� !Cþ eeeâ2aÂ4PlÞÌoª¾¯Š§¹jOöŠÉkå&u”zJËÔÙj=¦GBD@8 ;vì—uë7ÚÏ£8Ù÷Û¿ÿ€8ØãÜ4~ùìÉc«Y¯Ô¸q{qW�=[ê½hâ¤?‰¨{÷Ùµk¯�½¥ºÅ?b¿ªôãö=.z¼aIÉ—¢?'ÅöÍýxuŸ*ž®Sã˜×× @‘€Ì‡"çÏŸ—-[þeïåsÌz…I²Ç²ù ³K—~R\ü¿`¬°èâþ^pÿ ­[·‰â€Ì/¾8*ö9+û.ãÆM±,a€,„é¹·Ud¼]ÜÈåF—Ç7Æ~?¨á]÷Ëó³fÛ¼ƒL›–"ú; nòWg…ÇK¬ðˆêkâê Vˆ€‘mÈ\¹r�ÉËû\F�ž$Í›wºÔqìF{NN®Eb2'=3C.ÅÞ½Ù²dÉ2{? 1¶w̶mrº @Ê9pà ¬^ýA0ùì9d¡)1q|E+i,Ê8Q.”ÈÎCJÊœ‹|ñÅ¿ÚLÒÓ·ÉáÃy¶’ér<ø©}=Fu�…¥~ý†_Òþý—‘O>-Ó§ÿEæÍ[hçÚ9?— I îñòr÷xId�—˜ß#êiöˆ"!" ’�­lÉÌÌ’ŠÈÏ?f$;{¿ˆ ­Zu�´äF‹þX ²Y§¦þÃ+µhÙYŽ?)ì1tË—¯’ Þ’õëÿiQIÃ�»'“½§Î>4èʱY.}g¹4øÎ}ÎqüÐÕ&##KîþÞO@PQh®nPÅÓ=j&Ñ缦:\ÍWÅà êkj¦GBD@¤ óÎo·±-Õaà ‘a€ž™<Ã;¹Æÿj€ìÞ½O|ÐPfûúèë,t8ØJ™ŠŽ¡«U,èxb+°úôf¯}ýõÅa€NŸ.°ÏÙºM7çý¯_Ú¹s·<öØèò÷&Áå‚À joõ�*ž.S›0½ˆ;×ÔLU<Ý¢ÞÇä@ˆHˆØäš0p„EŽŠAæ�Í›Óe@Âöº @îž6öH¸wß]!»ví•¢¢3åŸÛ¢‹>ŽÌwG½V_¿fÅŠ5â2cÆ —=FÇŽ}ƒß3ˆE¢5kÒÄ]µ2jÔÄp @v^uU˜í‡4wîk2xð“Rÿ[­�÷ m*((”ÜÜC¶w•ž?wß!T%ÔR'¨gTñð¬:Sý&Ó ûsÛHMUÅÓ`û•sîÜ9©S·³!AtF…o¨ÓÕ/Uñ°XMRk3½��£ê|õ‚*æ«ÃÕšL@øµ³gÿM\23³˜ ¢?2Ü­.UÅÓÃjõ¦wÍÎÉ-êxµPKÕõv¦ ׯ�ÛK~þ1qy~ÖlfC‚؉¿Pwªâé&µ5“»êûüôRsUñô}µ)Ó^d‹–�%;;G\Š‹‹EÎ|@[¢¦ú„ú_U<¼ ÎSïdzW<û8u½*žîS㙀ð";u~X,xKŽ?!A’“g1#ÄnŒ¨«¾ žSÅÃõ�êÍL¯Ê³®§¾¤–yÎú”:J½‰é(íÙóQIKûP\7nÜ,Y’›û©;v\*bíÚ Ì�ðUœh¦®TÅÓµûyÍöF5Q=á9ÛóêËj}¦ ¶OßaRUÊÊÊdΜ¿K­ÚqÌ�àÆŠ_«ÿVÅÓÕê½L®ÂyvQ÷¨âišÚœÉ¥u›nâ‡í÷c+„Éì�E‹›Õ1êéÿ·w?¡Y×ÇÙãš.TP¡¥•™‡’:ˆBå!HꌺˆB‡•¢Q‡B©C¡·�¡´C5ðá)©CŒEˆEBYÐ5ü³\®}ûàaÐì;ÝŸçÙ^/xvÙžçûû±Ë‡çù¥RÑD:�V9½©3¼-M¥²ïÒc>Q€HS-ï¼»ŒŽž)gÏž›*?_þú·¡¡/.Í[ÿ¥§§·¬]·Ù™ÉD툱&õ¥ÉT*M»Sû">³ÎôzO¥¢±ôbZêŽÀ$ÉÄ\Ž›ÒñT*;™¶-²3j¤§ÓH*•½“nt‡`’db¾޶´3�N¥²�´~œÍi(•Ê>K÷¹«0I2Ñ,cDzԛ.¤RÑÅ´/­X€gqSz7•Ê~JO¥†; �$Í8~t¥#©T6œºSc�Œ`/Os{-­pç`’d¢Æ�-i0•ÊÓ–þ¼'Ò©Tö~ºÕ�€H’ˆVF©;�¤RÙáÔÕBïñÞôI*•�H[Ý€$€hõ!¨3íOã©T4–^JK›ø=­M‡Òd*ýšv¥%î @’ @,¤!hCH¥²ïÓã©­‰ÞCGڛΧRÑ¥ôVZéÀ$ÉÄB‚¶§“©Töqº§ žóóhú6•Ê>Lwºâ,¤hcz[RK¶×1æ`PiO{Òh*ý™úÒšyx­w¥�R©ì›ôˆ« ,Ö!hu:˜&R©è\êI×ÍÁk[•Lóµ=—:\YÀ´òù�éX*•}�žÅO'ížÆ§“&S_ZãJüû9;;Ò©i>gçŽ| Û¦ù|¢ãi“«på¦#½�ΧRÑ¥ôfZy s}H¥²ÓigjsÅêG™uéPšL¥¢_Ò®´dcEÚ—.¦RÑ…Ô›–¹BW?mNŸ¦RÙ‰´õ~g#u§áT*;’º\€™{>ГéÇT*{/Ýò¿ëþ4˜Jeƒi‹«0;CÐõé•ô[*ýž^MËSW:œJe#©;5œ<ÀìA7§þT*Nc©T4žö§N' 0÷CЃéóTf¨�´ÁÉÌïÔHϤŸS¹Ê¾LÛ�&@s A7¤7Ò©T6šö¤v'мCÐíéh*Wh"L«�@ë A¥¯RùGÇÒF'К#P{z6�I§ÒŽÔædZZ•:œÀßü"ò æÊò_IEND®B`‚icingadb-web-1.5.0/doc/res/icingadb-dashboard.png000066400000000000000000007404141527064444300216040ustar00rootroot00000000000000‰PNG  IHDR™?Ô_â"zTXtRaw profile type exifxÚ¥›Wv$9’Eÿ±Š^”A,òœÙÁ,îC�Ù©ú£z2«’AÒÃ0ñ€pçÿçºñ§6]¶ÚJ/Åó'÷ÜãàEóŸ?ãý|~ÿ¾?½¿ïôý/?wéúø^E~”øš>¿håó5|ÿüë ß_Ãà•ýt£¶¾~1ýEÿ<×ÇöÛ�>�õI#Òëýu£þu£?¿_7ŸiùÒ[ýy ó|¾~½ÿþwú'·_‡ýÇ÷•èmã9)Æ“BòüSû éÿèÒàEáß�2úÔxmüj¤ü. Ÿ€ü-N?þtFt5Ôü׋~ÉÊ�W¿e«~Çè÷låøuIú-ÈåÇ׿þÜûíéÇóãÏOÎíëUüõçq…ýÑoÑ×ÿ÷îvßœ™ÅÈ…P—¯I}Oñ½âºÉ#ôèæZñ•ÿ�[Ô÷·ó·QÕ‹RØ~ùÉßzˆ¤ë†vá†ó¾®°bŽÇÅÊ‹WLï‡-ÕØã"{dQÃ�5õ´ÉfL‹´'~Œ%¼Çv¿Ü{ZãÉ;pi Ü,¨.þé_÷Oßp¯Z!Å’Ô‡O~cT°†2§¹ŒŒ„ûT{þþûûå5‘AS”Õ"�ÀÎÏ-¦…#Az‰N\h|ý�7ŠøŠ$óhc0!‘²’…|�±†@   =Ò3“ ³¸dÌ)rÓ¢Í[jx—F‹üØñsÀŒLWÉMOƒdålÔOÍ�–,›Y±jͺ�’J.VJ©E 8jªÙU«¥ÖÚj¯£¥–›µÒjk­·ÑcO€¦õÒko½÷1xæà΃w.cÆ™fžæf™u¶ÙçX”ÏÊËVYuµÕרq§ ~ì²ën»ïq¡”N>vÊ©§�~Æ¥Ônr7_»åÖÛn¿ãGÖ¾ÒúÇß�µð•µø2¥ ë�¬ñÓZ¿o'¦œ‘0X$�ñªPÐQ9ó-ä•9åÌ÷HWXd�¦œí Œ‘Á|B´¾sçâ'£ÊÜÿ+o®æ_òÿÛÌ9¥îfîϼý-k[4´^Æ>]¨ zhÔ_Ψ¡¯:w-qçj5{ itg¾2’¶Ö¼%ÌvS7’Ùn9¹§ Æø“Û"X%Ùj¹¬õMö'X ‘Ù…[ÆnÞRëù¶6Ö¹ó¬�±³N!. U·rkÞV°¼.Õ0ÐR ¸§'«eÒW½»O†µ—GAd¿(•´};©¯ãwòçeaP$€î@äKNB³é펲O'|nÌÉÝoë\dcßa|±3òæ~€s«õKÅ”�%"É£ZZf=]JkS}ðkvL'� ò†í=úMa/J*Ü:ãÝpȳ’æoòÅâà6.áØt_æ0·C)Óˆl1f¥´ ~'VûX$èZlÔá®ñÐA­ìl3î5½°óÜ*UwÒn“YŸdŠ{Ûi¬d¤´æ¹weõnV׬õÎQcíëÖt[7ÑKcT¨'[sužÛ¤àS†¢¸=$—ÓMˆ™z;Ü=ß;©½Ý,0ϼ/áË·÷}w¡iŠ”¢ï$.ŽT7³n‹n>¾¤I�^ž¼C8¿Æô±_ú>3ÇC„× õBO„‰ÞsÍn=#N)§“JåNt‰(«Ü«Úá¹Çwæzj13¹‘û>Ôs½~——qÉüÙ@|3¯Úc¦ƒ¦B¶î0f0¦°v¹”ä°�3 n2ååëIÓŒ4 ¶\({÷r[¦EL•ʸ©7ZqöÓo¯Á!¹µ—sº§Ooà–¾QDwû[€¦hZ$[ݱSóÀ[Ò”Ð0ôSª½Ä[yÿÁ_…ê¢ãr‡»ˆù9»d*Ø[¡#f§~Üð’A_âÜ#“ÏDk"L™18x@©\РŸL‚Þ›Ú׈¶t$y^dA—¤E²þø¾žMa·úË®]ÂI㮓-fhD›bVu!âé,ô2x§•žë ƒÎ_;Æ|Crè!í³s�üü’µÞ"­'`Rѵ¡J«tDú´†\G&ã”"¬‘²9èP›ä æòë€EØœsOjÊ2+ñ¶r™X �ú&³È\¼Ð3†FD|hŸŸžõž´Ï�”�ʵ\éŒT`’Ûöb†J3¬îÎ"Ôê ÕV¸ºÝq‰2aØ�‚£J‡šî{¾õ�ùºï,ñ°Ñ@x®/'îkàâ¡ò¨ah¯·ÜUò€hÂ'Ýó;ÝîoÓ©_–Åô™4r›³JMY3IjI¤¢ñö©ï‰Qi# šMýV½hª%膂<¡o¢æ[vÔ?É%%qy¸°ŒDs(bQ9Ýáf àx[ Qá_—µ‘í^¤®·€�0-`ÅZ˜[ü2FÀžYÃj¾— :êFªð4Ï‹d A5€ä�‡tv Të,štJ©¬0/4 ã40 f„J…ßÓóÊd�'DÌRb´Cq®{Qþ]—žBÑi°<žžR¾b 6#ÇÄ’æï�ÞúJ£ ìéÆ Vº´çñBÄy” 4H­mТsê ‰¯¦´ÑÌm^¨›ŒLâ—Lý€27 ³Ã¢L-¢#”ª–ZZ…T“îŠ,!M¨FÄ"Õ¿À¡ÛÚ@Õ%r‚*�7ÐÙ�gŸ &ïQwC$Ä—-_뤔qyJ91A>[:5®æ“POȇ`]º ½Ãì¥{Ô&È#²ðì§vP‹YA)L˜’µš(QГT$fº5 ú—¡x4\´8š�ÏuYl£Jyä ’1Sõ�J¼¹ VÅ�ÑœN‹(Ù‰ Ä‹�ÇHm[™è=Hdμ'¹§qpz¢ñƒ¨8ð:&+å žíÍMÊ;[Ep£w$à‡M¶äVCÛ‰\ày‡¼']Œ¼E•2B2SsãÈŽ\xNæ^º m×0=—""L臷)]Tz¯…; ˆ¼ Û¸ýØŽÄôI7ÒJT—À �˜ˆRw> ˜4%d)ÒÂÖÙÊIÇt*{5ªÂÓ¨í:„ \D²fÝ#t±p�ûi¨3Ñ,]E—^¾F,ç‚üH4ÂÍy^þ¶SÜL¢³–ÕL±¶L¢Ý©#Þ!ønm>š,›¹Óþ¨R4¦G¡Vu±¼‰¹KõYífê- ˆ N‰�6`AÙ’ÅL�îWËÆQ¹‰©ßˆ‡ ³t<�wÀO¸æj¹®Óý¦¥¬-®Q”à‘¶& rbÏfà‚ÐÚˆe|U@¤Óñ™r«¨Ä Jk#‰ñ8$×l: œñXVgTØu÷sÐ�˜•�ßÞ“¡¥ 9µ�z“võŒèI6ª`ÔI+ 8‰jM«+ŽÎ¡èèBB»WcF}]ˆ¯ØQƒbBÙ MP×ø¶›±qÒ-h(­ïÅ®‚D"€•RPpzºˆGA7‚$,¡ù€Ay#<„ÜР‡ñdð]§¶nCẋò ›p/hÃÇfôÿÂb`Ä ×rhÀ÷hBvç¨9x±-ù Yæ,S“@‡“"¤�²]í*+ ¥¿õ |^Š[Gyyt“á-1K‹àÓöƒ¤h¡�ظÃ!°*FaGS{24 ¦ì8ÃÃ×ßEvêš‘m^k ¨d/ç0îh·£RD¥&@…–~6V5xµ0YÁ�¶$ØŠ$>X®';æ¬å]pÀ¨¶;c?xذq¦h·½0Ç£*%Ý€²‘_ø7 ¼"_lK�•H_⋘K&‡á` £dh�1Œðâ½—%%ºÀ¢Œz‚ÚB�AvšGÚ˜ Õëy(TäšÇ?‹"Š=D” cÍ£Œ’A�ð;D”‰*ÔwÅosµGGvôž—Á.!ÐÔs7b¡u†a¸˜âJò¾f ãIÁvb¹FŽö]~ žË;þ¬¼ò-H6 ƒþxªµs× )†‹H׫äÕ]ÕèŸÜÁà.ǧN�Ñ lá§€N *Ô=A– &ÈŒB`l¯Ì “«YM@¤'X ™H wÝv\Í:ÆJŒ®iw!dÑx�wx‘x¨¥º¥À�”H5ž@ÜЂ]ôÔ‘“ ¥„ÚJ§Á¢ñ„†º@ñsã €€ÝÐRA¿�[(M uHW…ªWhµŒ…—Œ£«Á1ôNÀÛÐfKØZ' �µ�ÑøS%Êt¥¥)Óût |p!:†&+]V g!£Ÿé8ìþ§;BIù1ÌŒ4“¾N4Ô ¡‘È B5fš¶VÞ' |ì+J£+IÈ` 6ŸûI<÷©Ú «vI“Û2�¬¯Þ1·„"A'B@ka&<“N/Žè#@bŠ8R¼NRѸj™".’¸MÊèÛÚ&þ ¿6àW«lOùË*Hm gQ䬼ª¼Œ2?EžŸ<¡ Æ<Å}ð>!Iü Äœ×òXN˜W. ¦vÚ 2JÍ`k,þ`–?%`†«²\¦¢ñ3ÿPäôBYò"ˆ”‰*À| ŸîÛÈ ¥¨U6*Q½Rôöl‰*m2×Z"¿a<`²:u4äŽÆ *|Ü 4Sà‡F“ÁѲ7tž†~o°ðѺ¢z‡‹G]]xæ9=htGÿJ÷g¤ä!•+�!@‘ˆè)_µPžÀ_Md9HÏÕqJ�bn A-Ôs!æ�êP0ZmÐ%ðöÛ4 =lÄ_¥ûá�Š.§þ¨ˆ¦m‘ƒ~ðº±VAÁ4 XÃLb—âän@æ6ºwÑ=V18œ5JW–‘x6îþ)`Bކ…¦ôΘ‡eà¸ÀÓV«øz‚²+¥h©ö²šç´JaÉMpäð®ê ª ‘òŽ[%^CÌCç÷¦eŒ Tq3Ò(¨~:šB°�LDÍeÉÔ6¸®3r‰F ³¤…2ˆjúñÜ.Ëi±BËò¥Û¹ +NÜ&õFYìÒxª6Äd’‰º‰BI¸ö›š–´5fÊq x˜-TQÝPF·ˆ¤ÐZéœsmŠ™:‚0'ˆ#Š©Ä�%F Ex¤¼KU°º£˜²Ì˜%jÒàè+M‚bòˆÆsžâ%hh®BÁ€…4hÚ·�®]1•ÄDDX|D áÝL¿PœÚÀŠÚÕM‚nµ´Š¼Žö£).‰ E†ýÛˆ®½Ýeº9¤·ÜY–ª wt,yÑ#`4j&Ç%�^PþÐf$a£A# å¶Ç.I7á Qì™ Œ1ž ŽgÓ"©dÎe}tÐk°•¹†‘púq]ëŽ.»fBš­’¿&¼!H­c¥²ŒiCôlRûAk3’ÓBA4À uéS+ñX‰õʰ’µxS\ |�ȉ´dT؃ñÔVÂù6¾ïd¾¿¦Õ5¬TŠO4ø�0rÍi¯øÉ†&·B«�'”'H~ähµÙÓÒèZ!:Üîàî�ÙZÔ‚L&p޼iÉi½÷ ìÔݦÈY<·mÇ…fž¾鿥t ²Ñ*qFת|4Hç|FÔ‚*7ÐXii=òNI0¨µ Høgå€ Àu�«„PѲe!:Ýxnj3³€;fè7*Š~D¥xciw(“û®�ÀõÖ¯H¾F…‚K¤äšµàœ¼]éÑPÂkyöˆ ¯=2£PÐØŠÓ¥›¯ÊO;ð¤Œz"ì€-'±B÷Z󧣓tc”↠Á^�°5M…åH:5HÁ´Gq-Ô–¡˜’(¤^êUÄh'6@¬h“ É=µJ†Ö2ÿÙÛú¬xeÛÂ-2¿HŽ`†ÐšÜJγ ÕÇDŒ»x1à5˜Ì”ñŠå¢‡«…YÉE_ z&šƒë�AúD¾Åƒ›¡\m D“tVµÇÓ€‚À<™àMÚŒ+Z’ÅÌR6´_ñ ­7£X+,¶mPBˆ TMÑ#Rì#´5 2¿ÃC‹­R(O³µƒ"—6Ý[+rém VCˆâÕ—VXoe­Ãé’¸Dïšb1ÇÔP¤ÕOx›J¦BÓÜhZ¼NTŒEëÍWÖJâpi JŤÖæà‡K°Íã=�\!|M>è?ò®�7àcj³NP)$»5mBéÌ ò8VäÆÄ.ƒÈ`1p], ®ö¡�´˜Kø6l"ÌŒÁ�§[Ž‚“œk'/kÏ«©„êDÍ‚:s›)‚6î°ÿQ{ˆ=Ê�ç€"”ÇCB'ìFp�2�úöö‹ý“ PÙÐÆü;´7…ö ­Ðt<ħV¦”5ôÌtvÇ+N´‡æKßAycaí»CÏA;'’_yE(2šQ«~·‰ç°18H¸PJ¹¢+�„�Ê]†I�£0¨�V(BÄ!õPq(Ú æÔzM«ý;ò=:P2!‘�dAêðø…+ èsÁA—.4þÑÖlÓn¾Ðfâó•GáTå€#Á‡ ù‡ ­û¬­�þü½ŒºÓí®¾BH� >ÙoýDöIëÙ�å,;ÕÙ]ò¡,ëƒD©ZOŸÚï„þK÷oe•‰( Ì \§Ïü×( �„“×é3mL�„+a¿å,öÔ™žqà‡ùIZÜt§þfQ7Š ýµÏË‹úOÈPî?h¿r?tTÑöJÌP>ª,©ª¦dé18åþöŽ(*ù³¦X´L#¿Õ7|kâé-¯¤Óüèj‡ûJ5µþ—ð´€ âj›Z»ÙâØnÚ0æ¤ ½x&¤eHæâ†_õ{^ãˆ(Åšù>T­DmÌÎ¥ªwMVÃËd!Ã#–óEžâWZ¹˜Ò¡E/"»��î Ô¸Y!2$¨€XB±à}ýŽj�¬ÐáD­èD.KMׂÃvBGøâ4Æ6ühcŸhUÔÕc§p¥|’a/µÅ1´Èybwx£ÑHÚDØG[n@diMŒÿPéñ¢¯µs• ß&Ú«½S“D-S+õZóïˆòµ]%ìez¤¶¢Ž-ÐP9ô¹RQ@µ”�Á‰Ú†½ŽV‡Õ�­�ép' ¯Öô´r.–·Ë "=Â(¯ ÞZ¼Æ\I`¶ˆÛkBRmçkiÜNÃ÷ Àý™´ßP(Ç…/麢ˆRŽ#Ð褄@ßÔ± �QMÆ�>9:Z3ì`UCÑz l€�–ÖKÞS·cáªii¬M•à‚ Écº|M´±i©¯á0‡+-0ÀÔáîÙ±ÃFHšÎ� ÓúCÆ?@9oQ¨t¤ÀÔÿÉ:¸³…>¥Žè¼Ü ]%N�d ÿESÑÉ[¶eB-ŒI›|Aõª¥ЧÓ~Ä–�Ç —qÙùh-vÄÀÿ$…Ãà2ytT Šµt„ÔÃUjGg0‹ö$|S'tB\h ÇU Ä@¸ˆGD5Œ$ù€v)4¤|Èž‰Z � ‘Þ8‚�…ÐnX×~Ny„†�Ë(&bÓ3t¶¼Ë;{žˆ¼Ï²�VlõU€�t0GHÉÏôKKÆ_[ð3�r´Öyh@´b�¢í¶+Ð Fƒ†ŒÑÜ �çtUÎŒ~ÊÒdE,¨P„Á@0ê¾o½¼µàn&¥Œ2¬Ørí¬¡ßnÍÐ¥»°ÏÚ³CW­IaÒߤ’|i8ͧ·†Þ¹µM/ H 1®-Ÿ>P{¬ òQxŠí~SÒtº–!´Œ­sŸ¼ SÌÜt²� ´Lw¤e)Î�5`‹‘bÆIö‘“öÑ‚”DÒs*Ô.L˜#o̘`I kk·�úÀÂ"O—i±‡½_Ü,JÏŸ‡¢sfÓ™¤¦cRüTäÐ º­í “\åfÑV:_ÿ6MýÐ~7æ¶½“7â@ÛÑÏÝŒU~7à NÙ!2ÚãtH…w fkK¡¼=ñ¤Eß‘—LMO‡bå:cžopû*=kêY«|�B; ™[µ†ü\:½-ë‹)¦¦‡HN'3lÜçTuJ†:Ç»6¨�lKÜå*‘£4PÚúL†ð ×ò⦵ùwT• ÆPåm?� U^Åxg4 �Öšz#“É ¥†¸A¦‰;/~"êuÕ½7DmH_X‡HB: O‹I;£’ˆÙ4 ˜G ^Xú@ ¬DÅ®È�74ËšÿŽvS¦–þÀæü,!³vc\ r4¶EOÅ?P.baH’Af1 ¾¡Ø–8Åfù�~ÝZ'æ{âªC:s{l¬üCÊKëºsÖb†³jõxæ®�}OèÔ›�|�Ç`‚ÐZÑR¹sW~ƒ“ª:ÆÝ=¼Áýx‡à2zWÌ�ö÷Á¸³kåkbœÀ òňÂóÂ_ó69©عB~Ùq¤ú9C[ô›¶†^¨u–ÛÑ©2{¼9 /,Tu|¡”œéåJ9è˜%Jކ ˆFÒ[»ö¼Aϯc‹‡BFYùfo3f'Ú…´ {á¤}_Ú�0µå«•¦³E‘È~û�Y*ôé� R#v¯+Ú…AÓ ˆð*ø†ÔôÔRæn%Hý5á!&®cŠpV–†Ez�äL'Ú,EoÕ²ÑËCf˜:êD+¬¨ÚP§NHn…oÐJô „P�:h/è¨é Ð!=VßóšäP5)¢!‘ƹT½JrgˆRŒöDt×b 7Bf ”´ÜL5ßá‡+À Ã@P9æŒ÷áªh� ˆc†ì4Q8(ä„'’5ªÞÐÚ�‘œl[1T:PR{‡Ã)ô 7µ¯vßNFv T§NÄo�>$©gè\N�‘ MÇšŽ¡Ä†XÉèHòõÉxPqÀ«/òQÁpa±è°�N²ø‹Ã§¾ ~BÇθã+¿Izĵ2J^Áàâj€ç€¥° ˜TµgÆ�ÖëŸÏÆ7ù^tf âo�ÌúLǬk’YZã�è¢`V®Â¦Hu'�svª¢üNÐ $e�"ÅtaFÄsèz4¤–ðnÒM]K�Mâ JO)uAksS —7aá+ƒß ¨ãbÚšÆd­m”P£Ò–ðŸîÇ%è'Áì ZiŠaÂãU�Ò}ü‰½zœÐJ®ðë:çݵßu,‚y£ ÁLgä1´³$ávŒ"Ž ÷BêS|Œ(h'Vg›'b˜)hˆœiÿ3é„B+�©%­àO� ù˜,PÅt#ÆV¸hÁ%ÖOeÐÿ ”i�$p$ +寋í%™Þ‡4{�m:¹ÕBB8.$&ØÀ·’"¢•ê1f<§a³4è‚6!�Ȭ­=|i¯Í솔ýè>�‘ëPQÇÞ*+êŸ[´­½kuUŸè9Wê.j—ÕøL¿Ž×tõºŽèìÐÕ¹o„ÎÉ& ól�n4uì8ÈÓÑ&:6OéùȰM48Gûx:Wru’r°Žr!@:,�ji:¤ƒE5°÷ÓO“:uJ¯Ð¿¥ŸP®ä“'Š"•5d°0ÈÚI»|�ýYN+%yfÌNëϬ±?'K’™²a .á¥D: »Odžc‹vü™€Çf�N�þÁgà!sJºí„�pê÷�žÅ'ë Ü4�GôGyœÝ¤IÞ|*À ä ñ­År¬:”„~„ˆ*–qó›MÚ§êœÇÑ1ú_9è‹iT_Ý÷‹Ÿ¾Z¾K«ÀCŸ‘óY§ÁZ-aÜhe€=þÄ„'ÌÌ)e»Ûë[‘®—Û´¬“|{|ö—õ1ƒ£Ó´ÃÔ'⤊ÄDÜê¥Ä‡~§ßíL·�™+¯¸`¤(éœ 9d6¾9ë´.5Š•LøÔÛ‚¶ŠˆÅ%§™D�€G€Ÿ5`ò�ä�2´ˆÈÏNIÂOç6²¼M®O}h]rpG-R¥«³^K›âèÕ· ¨O­-4ÜQ0¦7�jžz§Ž´ÃH¶ +µ1вÜå-[ƒÜà¤óoÊ� *¤už� ñ³‚€qñEàW ±:?ÏJ«bË J8n"Ãá8dîÉ$_>fM{ŽxWhÞ(›$ÿÉ}1‰"@.å·&4LC¯ãt¸T«ç—@¢ž"Ðö;¶À+½=i´zÇ›7-Í1îš>̬Çt_—$@ñ§ðg%"�r¦1‰a×^�ì0�É|ûàÔ -s–VŒÀ>}ˆç*ÑÄéòÛþ/]‡~´™&*Lý,U슰à‡[Øx«ö'œwLPÇ)—V׎Ö*�Cbñ†4ƒèÃð:Þ‘hNúo`Î7ª¥Oë�oê~Üf“‰Ðç³t—'‡„xtÆ o ã\[g|ú;.,Ù*}ŠÜFÁT/¢C$­¾©údãÍ çt¬4ÐWAkd­?As¦ãÎ#ó'i*ð¡ã•ZÅ@ëCÔYKŸÏ`Åáåu0ÕÃz –âa0¡˜>¿�ì£.L‹+KæêU´àˆ<=9ˆ•N îíhjm¬H$M§ÍUPwÊâʰn!B�ZÑâwïEó|uübèÃ-ÐY‘¦hÓžyRknãíååë š`6ÒƒHì|ãt舞ãè/Ñ9’~À:ߥOaž)œ:dé,ú[¡ñ[f TÑ9`·šyQä“=ðÏP-¡�øh,'DbS– ²�êÉ@„ö7;á-:’×�„NœØïÓ´ÐÜíåsn }¯U ÜÀ€ Ùž’¦¬¢Ý™q*)1Ö¦dÁ]ˆƒÁ£Båt+E«r¼ªˆ¥“uK¾ä< ••­9FÑãL!h¡ë ÉÛ𵌊_âq´~ЍÖ%ÊP8©5R03ü;êÓRÖ¿:ƻڂV�ds îŸ;é�û­ú\&hhè1S®E›Shˆ5¯ øÆ¬“d Þ /Å ]”Ù SDïq—®�ó,_zŸb�w¶xÅ›¶s1�¥Ä }:Ë;ø§Û¢—~Ê:)¬OÎá[Êx–[Ö÷}¢HŸVÓ'_QaîÿZCw€Í�Íz iTXtXML:com.adobe.xmp  É Â…iCCPICC profile(‘}‘=HÃP…OSµ"U;ˆ8d¨N-ˆŠ8jŠP!Ô ­:˜¼ôGhÒ�¤¸8 ®«.κ:¸ ‚àˆ£““¢‹”x_RhãƒËû8ï�Ë}çB½Ì4«c ÐtÛL'b6·"†^Ñ…>*1™YƬ$¥à»¾îàû]œ÷ò¿÷çêUó"ñ 3L›x�xjÓ68ïGXIV‰Ï‰c& HüÈuÅã7ÎE—Þ3bfÒsÄb±ØÆJ³’©OGUM§þBÖc•óg­\eÍ9ù Ãy}y‰ëTÃHb‹�(#Ul  qÚuR,¤é<áãrý¹rm€‘ch�]?øüÎÖ*LŒ{�  óÅq>F€Ð.Ш9Î÷±ã4N€à3p¥·ü•:0ýIz­¥E�€þmà⺥){Àå0ødȦìJA*¡PÞÏè›rÀÀ-гêåÖ<Çé�¡¬R7ÀÁ!0Z¤Þk>ïînÏíß;Íü~m×r¥4 Ú}bKGDÿÿÿ ½§“ pHYs  šœtIMEæ49ƒô×á IDATxÚìÝwXWÀáß.UÚ*‚ ØQQT{°aì½Ec4‰ÆtŒ%‰F±·| ¶˜Ä[lhìID�½€Š¥÷Ýïd‘fTМ÷y|dfggî=3³3{öÞ; ËâΚ¤Ät„xwh²ý­Ñh^𺆊Õ,%\çc%B!„BQ†Žñ¥��º !„B!„BQPCÇøÒÑ·3elËH’I!„B!„Bäߘ�üðîÜ«R¥²Ì—$“B!„B!„È•©JŸacüiãÕŽ’VV/\F’LB!„B!„â…2“Km½ÛS¢dÉ\—•$“B!„B!„Ȧ¬)ÃÇô£I‹˜[˜çë=’dB!„B!„ØÚ«<ªM[¶@en^ ÷J’I!„B!„â?ÎÖ^ÅÈqƒiܼ)Æ&&/µI2 !„ÿ!Jc,L•$>Ž#!M#B!„ø�«^Ó†�#úQ¿‘'ÆÆÆÿî^SÂ)DAÏ œý>æÇ_7sìðöm˜Ç”€:”(”³I‰MëÑ|ÜÖæ'³.ÎãÖ°mœÓËe“õ0e×t:˜)²½¤°ôbþ¦q¸é½d±ukÐjÎE6Í­ƒ•›Ÿ/™Åž?VqôÀ|VÏê�W#¯i‹ ËæmD=½·ìt(ÝžåÇ×±kr- ²¼¢‡ëÇ øóD }ls�šN¥V|6Ê•¢`û¨ÎøÙ,ì^\.dù;Â0®äɸ Yì;´œßw/å`è|þ÷•7®%t$ÛòmÆ²éºØ¸e�.©DϦcgÿ�Ý{·ñûê@¹X tªôgí¢Q šÂ�½[9°éF»©0¬?‚o{T b×/™Ý«B.'´>­¦®eúÐaüoû6îÙÀO_{QQÿÉP‡Ž|½|-ûvÿ¯óÞ£��èV£ï7ƒ¨o¬… 5zLfÍÖ-Ø´ˆ½1Élubh�×G³Ù¼c¡[ñM÷j¯é9óɦé¼×o:Û÷lãà®`fûWÇHiOÏoFàiêÆ?Ž¡±‘!Õº|BÈ–ÍÚó+ë§wÃÉHQx;Yß�¾cjrú믙²á<7£“‰¿ƒCÁsø`•#Q¦n?6oÀ)3MoäÂW»§1¨¢=Þ úŽûd׺ñ tUeìÃj=Y»° ^#?cÓÒŽTÔ5Ʊ×hVm_ÆÞ-ß0ͯ2¦ŠŒc¦ÂÀoX;¢üÓc¨ß×ÚéœÖ_¨Îr(¼Íj?m†¥W£n‘süI’R×¹›·ÅúIaukõæ×Åm±)Ù�O?õÄÚÉ—ù_5¦”Ž1Õ{ŒdÅæ%ØÄÒ‰�(ÿ产WÚ•± ~`÷þEü² /ÍK�K˜AYÚlƒsͰôíÜàïTH-Ÿ(V�á_zcºí[ú~°žßNFpãÆ-ÎØÎ”AŸ13¼&Nj†�Ü!„B¼Ó<UaÁʯY¶fMš7å &I2 Q@†µ\qºqˆý·²69J8<—>“¶™WK$}W|=.ñY� ¬¹§É:ý }§½O•£�tjÑ¿yQ´ûz ­,2¾¼ê:µ¤ö_iÑ´#½V¤â; %GæòÁš«\ùéSF¯ºš{+*EqZ4Õg~Ïö4ìð%Ví�=0reÜŒnò­[õáóÓÕøè½æX<ó�¹˜Ë ¦²~t7šõœÁßUPSÀçáSn¶�Q½h9ütü>ã=WÃ'YWÚUØNß–íh1r7Åô¢I±pV<—ÐØ£|Ûw¡æ^ŒhÄúÁ�iØf?ù1¬•…•fÒ©Twƒ¿Øû\k¯4®l årÍ:ÔºvœÃzµhX1# dPÇ×;GØQ†>3RåÈ\|› " è1m¦ô§eæ>tlA‹Øüû¯ç†s¦ö6àç‘#hÙ}!§\¨‘WÛRÛ\×_h41܉kóªOºÌéâØ´&·÷þÉÃ<Î ÍÃ|ùe(wÂÖ3lò’÷çû.I,4Œ¦^ß±·¬?Óú—GGY’NŸ ÅõÂRz´ÁÐðhhY¸1e):Lû”Àý™3Ï×çMúvM\8†‘ã&0ï½O³o:ÇäÖœv&Ç™Æãç&¦Üâ§™¿éܔֶrK „Bñ.jÔÜ‘ek¦3wÙ|4jôZ’K’dâ%NSK t?â‘ú%W¡¾ÏžµÛ¹§Î6­,߈–fX²î"±é©Ü9ÂúˆÚx>ÉÛtõ™‹Îm‘¸i9¿^I -þk—ï"RèV§M“6,ÙÉõD5Iá»X¾=÷•2úâª#غj?·Ó4$]9ÅÙ˜b˜{î›vz:jýT®^ŽâŠ[¬Ù�a¢(¬áˆ•æ*Ì=äAÚ v_Ô¸ñ%ö1£�5Jô¨Õ¸wwáF97š«Ž²líÕŒ}xp¿D8Ò°æ“}˜pŠuk.ó8M—:mÜHÜð.'’�uË晤TVÈ}ý…GãƒÇˆpu£– [�¦îQì?ø¸€ûÑ€z­ksmÍzÜI%=îëVœÄÌà ÛÒõhSå,?.ãAJ*÷þLȉ´B®vw"‘„cGf=“hÊH0 ¥…�NÆr7“¢)œÏ-ëŠe0¸|�ÓÙº¾*0¶«J=k5Q©epkU·**¹1B!„xG4jîÈÒ5ÓùaÑ\=ÜÑÓ{ýÀʘLBä?CD|t,j•9æJˆ}6!P¬qæéWçWf|¨?$*ýé—zM�Ûúhxøðñ“ÖNí¸N†Å-1º’»O꣉½Âþý€ž»öcBe^Œ;ÝÕŽ!”Éíôr gIɶ4�¶œ¶ÏT+jï“�„Õ�¹¥yZæ|ÉVßÝÆWSJ2¶ß4¶~¡CÄ‘-Ìûn9{# '� ~CŒ¹%–ºÀsC/)Í-°$–GÑ)üµ÷ %ûÕÂ:ä�ëEñû¨;(ÊXR²¸ “W×xf>ä¤R÷ÉîŽz’¼ÒEeaÀ�¿î?Ó;ÜQÛ¾°L™{Z§xnëO-Ü|Ë£?Ù{£Íkéñg‚+O0ú¾†j9¾ãǯ҄% pð)?õ|z°Äܾ…¡¹¦�ïs;1sƒqܺ‡ºP+ËÑYSx_1‘ïý+ͪS3¾6�öM㞺Ìs;[ñ4a¦2ÅTqï¹u$“‰õŸðþo{_afCõ \Ih@Œ¹Ö†p:PP¢¤ÊË…]ïhŽÌ ä}Í$¾ ÈH4Íù1£®¤G±ê×|øÓ ’ ­€LÔP•ÙBÈ�¬i9õƒL³œ’s[pí󙬺œ*ôB!„o)¯ÎîtíÕ�ZÎuÐÑ)œ'¿³­â�œؾ} NN4jäÂöíKðôt‘#O¼ü÷É»;˜¿Á˜�ÓÇÓ©FIŒttQUjÉ„÷ópÃþJ…ø¸$¬±Ñ]›&ôji“¯-ýÊ!BuZ1¤cEL”JÌëôaÖ½pÌ3¬@O_ï¥Ç0J9u€ÃÖ^ôkP]…Õº g”«9ÉÚìJ*§÷żC?|Ê¢4´§C¿6Ø)�Ô³ì9bM·ÁM±3T¢[Òƒq?|�¯m>ú)ôÑÓ¥]G¦ÏMËRz¤ÆÜåNt éé…Ø>%ùËgŸÇyÒ8F¶¬€µ±.楩ßg,³ xÎþŒV_ñgÙÿ·=c\‰Ú}ŒÛjH¿|’Cºž êd�±R‰ÊÙ—ïgûP=Û>LãôÞS¨:úâ]Þ¥a|4"cH qÉX9V~r yгuIt(Èú '™ñ0ô(7ø2ºIû÷?ÌÒÊHŸ@’mjZ*À  �º;?èü =}ô ßs�¾4°ÒCa`�÷äI|ÒÒõ½¿Ù^“¾k`©«ƒ¥K'üÜ‹ÈóèÔ1™Èû+®¯Qd$Ó£Ø?õ«BN0=9ƒÿÞNðY;†|Ñ'³¬Ÿ:º:¤\Ûɾ“™u,®Ðº© !„Bˆ—סk}VmœCàwSqvu)´¼Ã-™&M–ãü6mÈQ(^R"�aÔÝa|ðÍÿ˜T€ÔGWùã×/½ì©ÀÝ�+YßìB~€¾ò6;ÿ¸�¿ŽL)g™?a1ïô›†›¢¾†õ_Ì`wŒ…uÎ_ìï_¼€Þçß°0zCV^¥ !×Ädꇥ™øá<~ÿ\�Ø‹¿3åë]<Ô¸j—‰ûcãV�cÒÜõŒ×ÄËa·½OèÌÉ”ù` 7�Å(9’#Á_ñÕŸ)¹º¤ÝàÌÅj|¸z< ½–2cÇ$&o`É<8·�ÏJ+¦Ì˜ÞÛÄ€8oF Ãê/Š£Ÿŵ¿ÿ`Îà¹ìºšª=Žî»€EcVî}’PI¹È‚q«;qG“~ï¿|¶�ߣ5(JgÝJü¡ŒÄÇóç3N/šÃ˶ó»} @ÃÝ¿°¾ù`VììŽ�ò;]Ë8†rYQ yø{oôç#ÃU|rWÏ\ÛÒ/íañþ1Œ[·„Ié\Úy–ëO:©#¯r¡t–N‹§ïÇ ˜Xj ¬˜O nW¬ç“¯“®†Õ“RòÓA¬ÛcFÚå}üï§+4** êŽÎúš÷ù„ïýÌ9>õ+>\³ÐLe»ÍÚOæR~Î(ÿT‹›�sö!”¨\‹6 •¬ò5!×’åã]!„â-Ó³O :uï‚Cµj(•E£ ‘²¸³&)1ý� ööíKñô¬›mþéÓqwï&Gã;M“ío�Fó‚×5T¬fùúŠ¡cˆ±n ñÉjÙ%oÀÕó±ï^¥t žCïPû….FÅ$&¤¾›­fFØ–3äBƒ)ÅlhÔ­=�UÁÎBI|ä5oÛÆªí׈–�)!„Bˆ·†_ÿVtðíDÕêÕŸf£hxg[2EDDÙ“Láá‘rDŠ7#=‰øt ƒø7ÇPò»w iÒHHx‡÷™&�׊hosàK8ð?9µ„B!ÞF½µ¥S×.Tr¨RdËøÎ&™çãéé‚���v^LL��óåÈB!„B!Ä[aè{]h×Á›ò+ù²¾³I¦ððH† ûœ™3?âîÝ(ÂÂÎ3wnˆ´dB!„B!D‘7tŒ/í|¼ÞŠäR&Ýwy‡ôîÝ�÷Þ›Â�ÇåèB!„B!D‘7tŒ/};QÆÖö­+{‘N2©T¦89U!4ôd�ß[£F,-U’`B!„B!D‘7æ#?¼:u ”µõ[[‡"›dR©LÙ¾} NN„…] M›�DGçÿéQÇ÷dÞ¼Õr” !„B!„¢H2,¦Ãè }hãÕŽ’VVo}}Šl’ÉÛ»)NN899àCPPH¾Þ[¹²=åËÛ²sçA9b…B!„BQ¤˜ªô6ÆŸ¶^í)aUò�©W‘M2…†žÈ2­£“ÿ¢Ö‹ùóW½ÔvU*S<=ë>)ÃɵžB!„B!„ȉ©JŸ1 U»6˜[X¼sõSXwÖ$%¦ÉÂyzºÐ¨‘ aaðôtáñãX¦LY�e/¯&89UÕN?~šI“†Ò¤I@�·÷l=ॺ鉢@“ío�Fó‚×5T¬f)ázG\=/ç©B!„¢h²)kÊð1ýhÚ²*sów¶žE:Éô¼þý»Ð¸q=úôùOO.ü{ûÒÙ–;þ*�;�$<<²@ë9Ò�iÓÆg™7eÊÈñV‘$Ó‘$™„B!„E�­½ŠÁ£úЬUKÌTªw¾¾ºoSa—-û™ ®qñâÊ”)•ãrU«Vàðáµ´i3�°° ù^­ZU³Í³·/#g…B!„B!ò­\E †½7�Æ-šallüŸ©·îÛVà›7ïäš`ʤR™²pá—xxtÏq™ªU+àæV‹zõjâæV µZ�m™Í›÷ÈÙ!Ä[ BUS ‚B!„¢P•)mÅÀ}hܸÑ*¹”é­K2Mš4,ßË:99àïïCpð&+ãææ¤M,ݼy—cÇÂØ´i'Î$::o歷á�¹¹)AAÁlÞ¼WÎ!„B!„BäÈÞÖ†¾}ýiÒ¤1FFFÿÙ8¼Uc2DF†¢Rå¿ÅÂéÓ9}úõêÕâúõ›=ÆÑ£§8v,ŒØØx9ÞI2&“B!„Bˆ×¯¼}èƒg#O þóñxëZ2$Á`ffBHÈÆŒ™B||¢œB!„B!„øW«U¢Oo?Ü=Ü%¹ô Ýw½‚·Ù·ïh�ÞãééBttlžƒ†{zº0b„ÞÞMµó¢£cÙ¼y/ÁÁ› =‘ã{ííKcggCXØE¢£s~*–JeªÝ†““ƒvþæÍ{Ù¼y!!› T·‘#ýðóóɲ®N°eKF™s+KnuñóóaË–½h]!„B!„x›8ÕpÀ߯õ=Ð××—€<ç­ë.wîÜoØÙÙä{ù��Í <9ßËOš4”‰‡0eÊd[F¥2eÍš™4jä’뺂‚BøðÃÙæÛÛ—æðᵨT¦„‡GR½z»¾ßß߇éÓÇçÚz+,ì=zŒ%<<2÷ÁÉ�5kfbo_:Çe¢£c2äÓ�C¥R™rîÜ6m«Wo—gY^?é.'„B!„âÕqw­�¿Oê8×AWWW’åÛVààà�Z~åÊ‚-ïééú¿3©T¦lß¾$Ïd´Z¸ðËlóíìJk“2öö¥ñô̾..ü2Ïî�NN>¼6×ä‘§§KžËdÖmÍš™øûûä;^>YÊX��Ù…B!„Bˆ¢¬¾»3A?Lãû™3p­ç* ¦<¼uÑ aäHÌÌLò\64ôd®]Ö^ÆÚµ³²t5زeaaçðönFÍšU´¯ùûûpúô‚‚Bò½ OO—lÉ©ˆˆÛlÞ¼‡èèXìíËàíÝTƒÌä�‡G÷lëR©LY»vf–y11qlÞ¼—ðð[ÙÖ0}úxBCOä«EÒˆþY¦½¼š R™¾T·;!„B!„¢(ð¬ï‚@/œœœP*•�|zë’LÑѱ´n=€;–æšh:}ú"Ý»�y¥ÛnÐÀOϺÚ阘8Z·�e¢ÀÀÚVH™&NÊ‚kHKË_·Äç[½¨ËŸ½}iÖ®�¥Mh999àïïCpð¦çÖ54KK£-[ö1xðä,I •Ê”3&àçç­�ž4iXžÝ ½½›f뺨R™àS ¤šB!„BQ´nшnÝ}©^½º$—^Â[±°° Lœø=—.]ÏöZLL§O_$0pþ+oMÓ£Gû,Óݺ�yá@×ÁÁ›˜2åéXN*•)ÆÆFùÚFF÷¹§‰¬Ì¤ÐóÂÃ#iÝz11qÚy#Føe[.  ƒöÛÙL�‘¸>!_Ûx>¹8?Çe££cY¹r£6¹ô|7¾%,²´öš;78×ÄÛàÁ“Ù¾} �÷XVÏ'Ãbbâ´Û²·/�·wÓW!„B!„âUòjלnÝ|qpp�`¼oe’i᯴­{¢£c³%{îÝ{Èš5Û=:€Ù³W¾²í::>M2mÞ¼'ÏåÝÝ»áééBXØ…|w•{~ ïµ”Êíu''‡ßsêTîë =Aõêí°³+�çXVÏwéü´öGƾ/ɥשÈv—óòjB£F®˜šsûö}V¯ÞÊìÙŸ0dÈä|¯£NGôõõ5*€ÀÀ²·_@¥2Åßß/¯§cAEGDzyóž,-“žõì€ß·µO´ »@hèIíXM^^MP©L_kK.!„B!„"'}ºÑ±Slll$o@‘L2-Zô~~ÞYæ}øá Ö¬ÙÊ¥Káù^Ï„ Ó™>}‚¶¥�È. À‡iÓÆg›ïíÝ”_ÝEBBR¶ùvvOOιs³¶^ Þ¨M2©T¦ø"�B!„BñFèè(ØÏ�ö^í(Uª”ä *rI¦‘#ý²%˜2õèÑž�?þž{÷æk]aahÓf€ìå\ØÙåþ…ËåöÚ›”��DhèIí´ŸŸ7þþ>/\ÖÉÉ!Ë€ë§O_$99E;ýlW¹˜˜8z"ÇÁÁ›²lÛßß'K’J!„B!„È�2¥­ølòx~ZL‡Ž$ÁT„)‹b¡Üݻѻ÷6nü�“'ϲråF:vA`à‚B-×ÚµÛˆˆ¸­�Îì—Ù�L¥2ÅÏϛÇ×âää ].4ôäoÅ”)0p~–é… ¿dÚ´ñÚîkööO‡;|xmŽïóôtÁÎÎF;œ¯moÔþ­R™âíÝTÎ8!„B!„ùb[ÆšÏ&�'xå2Úµk‹±±±¥ˆÓ-ªûùç�üüóÎ"W®Áƒ'g»Q#5rÉqù˜˜8† ™\hå =AHÈæ,­”FŽôËõ©p!!›³t«9Ò?ËëAA!ùÚvpð&&M¦MPMœ8”ààMrÖ !„B!„ÈQyû2 Ї†ž 144”€¼Et%Y=;ÆÒ‹Æ[ =Á�!Ÿ2cÆÌÌro¢GëÖ�Ìq‘/|-&&®@å »�m™Áƒ3’\Ï&šr²™ñã§g™÷l7·��Í9ŽCõ"ÁÁµŸ[X˜½\ënÀ IDATLjR©Ä»]kºvñÁζ,úúDFÞ!ôÐ~\¹šG�¿±²ü±ï7LMM=îcöî;øZ·µfåb«WÍ2/9%…7n²þ—ͬ^÷ jµú_og¸QôêÆÎÝû÷aÎ Ú¾›B³&ž¬\µŽéßÍ‘/!„xÇÕ©U“Ëæ½ø~(&†#GO0eú,¢¢Ù:4làŽžž.§OÿÇQ¯ôZþ÷±}èèèd›Ÿ””Ĺ —˜:ãþ9wA¤'xÔcAÐw$§¤àâÑ<ÇålË–að€Þԩ턵µ�=æÚõpV„¬ãà¡#o¬¼þ=»òá£9á]{õ—(ÞYŽÕ*ѧ·îîH@ÞB’dzγÝÄžïjö4q²‰ÐÐLŸ>!Ç'®e&k^”� »À”) ðôteË–=Y’P+WnÂÉ©*vv¥™;7ïniaa˜;7'§ªlÙ²'ÇÐàÁ“9pàx––EÏŠˆ¸M`àü¶4š0a:‹}ExxdŽ1É9ž prªŠJeš¥ûÜÛ샱#èÕ µZMZZ:•+U r¥ ´hÖˆî~‰‹�ÿOœ/úúTªX��Æ¿G±bÅX²|¥|ˆ!„xãTff´nÙ #£b =¡È–sÊ—Ÿ`a®z#?e244¤N­šÍš†Og¿ÿÌ=Ê«Pº´5kV.ÆÌ,ã×ääd¬KYa]Ê 7W§~ÏšŸ~•@ ñ Ô¨^™Þ½ð¨ï�¾¾¾ä-&I¦ç„…] {÷1y.I÷îc077£|ù²˜›g\|?ŽåÚµ›<~“ëû3Æ—Ê>ÆTtt¬¶åQ~å÷©mÁÁ›Þ„µu ªU«¨�îÜîÜy�kLÜÝ»½tLóÏ·…¹J¥M0}7k¿lÜBllnõê2sÆ×ØÙ–¥k–¯XýFÊÓ°Y{4Í‹Á¯·òù×ÓQ(ØX—bZà§8Õt¤·wI2 !„x#|{öãÒå«+ÆgŸŒ§M«æx6ðÀÄØø?�H™:ãV¯û=]]ºvéÀ‡Œ¦d‰â¸Ô­Í¾‡äʧ¾þ=033åò•«|ôÉW\¼t•™�Mû¶­;zë~ÞøJZrç%dÍzV­ýYvŠxçÔªY•¾}¨WÏ]]IO¼ d/þK�Çð×_ÿ¼Ue¾sçA®I%‘³ åíµ¯ÿuqq7±GŽž`Þ‚e¸Õ«KZzºv™Å-ù`ìœëÔÂÔÄ„°3g™¿h9Ÿ:€KÝÚ,_4‡ôôtZµ÷eÒG˜È¡Ãǘòå'Ä'$аi{ÒÒÒ˜õm Í›6bûÎßÿñçܳ5[ûÒ6ÖŒ3§šŽqþâ%‚æ/åÏ¿NiËUñï�LµjUHMMãÐá£Ì™·˜»wïçµF£½™ºy+’�5ëqªéˆ…¹ 33Süzø2|HŽ=ÁüÅ?òþè¡lÞºƒµë7 ££Ã€¾~´hÞ„rv¶DÞ¾Ãá£Ç š·„ø„¬ƒã+ † ìKçíÑÑÑa_è!f|DrrrŽeË+Þ�z0÷‡é^mèÑ­3•*”çaT[ÛÉ¢¥+´Û̬۰Áýp¨R‰ääNþyŠYsyûŽv™–Íà×�Ê+Ë™³ç™5g7nÞÂÆº;¶ü„B¡À¯ÏÂÎdÜ3ûõðå£ñïñàaÍÛtBGG'Ï}uúd(ý�¢e³&Ô÷pÅ»³_¾ëÒ´qCè�½�-§Âΰ}מ|Ü÷•àðÑ\¸x9ãÞ?:šéßiŸleanÎè¨|•c٢ٸ֭Üy‹yô8š~½{2jìGÍšFÙ2¥™9gË~Ìû´JåŠü¼æG:øúSß½Þ »ËýÛãWîqDa©ïîL¯žÝq®ëü®¾B’LBü'ܹ{�FƒB¡`îÓY·~#‡�æÖ­Û¬\µŽ•«Öi—511fmÈR¬J–àÑ£ÇÄÄÆRß½.Îu½lÔÐ�–Í�‰‰1Ý};R±|9ú õÂí$Þæ*&}ô>iiièêêÒ¬‰'ujÕÄÂÂ\;¯i“†$§$3þãÏQ(Ì›=‡*•ˆ‹‹çæ­Û”/gÇÈa)mcÍg_M““C! ‰¡¡!ž =8{î�£3®c?|ˆgíø�Õ*øÅ$J”(®ý"?vô0ú÷é•q]ºsÛ²eèß×[Û²¼?á“|¯'3�³lÑlLMŒÑÕÕ¥|9{¦~Êù‹—¸qãó.£Ÿ^òÛŽß9ôÇÑluÙ±{/ãßI±b†¸8×á�#ÇðpwÕ¾^:::4kâ @ZZÇNü™‘¨éÝ“÷ߎF£áÒå«T¬PŽ!ûâX­*ÃF�rö`ÎÌ©(•JîÝ€¹JEÛÖÍqªQßžýˆ‹�×®àÞýX˜›ÓªE<¸ÓÍo×Ã#8}æœj:Ò°�»6ÉäV¯®ö~F­V4kj¾b 0t`_ÜêÕÕÞ¯ä§.M7dÖ·�(•J©ïQW—:yÆ/3™Öµ³ ‰üqøç.\$*ê#Ç|˜eÙü”#“[½º¸8×F©T¢P(رkúúãYß][ßÌ]¾r�«×©ï^/[ù^Åñ+÷8âMó¬ïB÷î]%¹ôSJ„È¿ÈÛwX°øGÔj5ε�˜úõd¶oZÇáýÛ™ûÃtÚµiùÌÍF/¬J– ìôYšµéDïnlÜüúúz|0fDÖQ©¤˜¡!Ÿ}5�…K~$.>žC‡3n>6p z5ÌÌLIJJâÀÁ49dP_LMM;}–&-}h܇ÐC‡ÑÓÓÿg׌’÷†¡««ËŠàµxuêI“–¸v=œR¥JÒ¯�_�âa]ÊŠžÝº­šžmeT¹RNüyбã?aß�C4ö¬�gÔj5†¼Gkï®tè@tL +”£G×NYÖm``ÀÄO¿Æ£qµZ�KÝÚ4¬ïö²$ÞÓ¾�M½†­Y³>#ñdaÎôïæP¯a+m7ç:µ°·³Å¡J%ºù  c׆�σ‡Q¸¹ÖÍò˰Bˆ×ï×u+8}2”Ó'C9~hÝ};òçßaŒ? w7—Œ/ÖÉÉ´nß•NÝúðÉçS>¤?*33J•*I@¯Œkã{L¤µWWzÈH˜´lÞ˜²eJçk=™ ›·l§aÓötëÕµZ�ŽŽ®uë V«™¿h9‰I×ÉßvîæÐácÙêuïÞ}þú;,ã‹XÃŒëÙ2¥±-[†””Tö磫ÛÄÇjcó÷±}|óÕdî޽π¡cˆ‹‹ÇÌÌ”!ƒú0úý�éÒ£/>]üQ«Õ4làŽgƒŒ„ݸ1#P*•¯þ‰æm:Ѥ•£¢(SƆ–-šPÜÒ’áC2ZÔÍ_Bó6�hÚªa§ÏR¬˜!ï� m1”y?££££Mðìܽ·@1(_ÎŽYs2vü¤|ÕE¡P0fÔP”J%›·î ~“¶´öꚯÕ,ù‘›·"144dÈÀ>üoé\ŽØÁÆõÁŒÖ¥¬òÓLµ�j¼ê'†�ú€ÈÛwر3#Fuj×ÄäÉãÙ=Ü\´1z‘WuüÊ=ŽxS{º±pþ÷LŸ1×z®’`z‡IK&! hÞÂŒ¦ï�=ëSÛ©&Õ«9PªTI5ô QCj8Veúws¨û$AŸ�@ÿ>½´É$ÇêU12*–e½cÆOÊÒ]mÇ®½4mÜÏîÌœ=÷z7&))é…e«S«&·l×6oœ6“šŽ;ˆ‰‰EWW§Õ02*Æà½xô8šò€kÝÚyÖ¿KG/ºtôÊ6Éò¬ÕGܸ™åép½zd$£þq”ã'ÿ <ü7o§·_7ê:×ÊÒìò•«lÞº€ÃG�óÇ‘ã4¬ï†»› _ðëoAâ�’’ʺŸ7�ššÊá#Çñëá›1o}Ƽ#GOг[gŠ=y\êýûHNIÁ@_Ÿÿ-�ËÞ}¡<|¯Ž=³uóBQ8Tff>yQæ5áî½ûté”qÍÒ××C£Ñ` ¯�SMGôõõÐÓÓãÁÃ(m—ó¿O�aÔØ�044$%%%_ëILJ2Zô.Xò#ñ œ»p‰ —®PÍ¡2–æªÇo;~ǹN-<x0íÛÙÔ÷ÈhÁrèðÑ—kJß@Õ“Á««V©Œ±‘iii8T©L•Êãt>xð+«’¸ºÔáÔé3Ú!Ö­ÏxpKll£Ç~LéÒ6\�À±º†††ÄÆÆiïâX²<˜ÙßC]çŒØíÚ½�ñcGâXÍ svv¶˜ó0*Š?ÿ cØà~yÆ8ôÐam]fÎYÀ–m;¨çâœg]._¹ª­Ë칋HOOçÎÝ{¬Y÷+cF É5n‘‘wèè@ãFõquqƱzU*W¢By{*”·§s‡ötîÞÛ²eò,dzuزm3fi§Ï]¸DÄ�›ØÙ–ÅÝÍ…}áâ\'×$S�êÕ^Éñûç_§äG¼Vm[7Á×·3ŽŽŽ( ˆ$™„/råêu®\½®�¶³-ËÇãߣawzuïÂ÷?Ì×þºåáæŠ‡›k–÷+ ÌU*í´Z­Î6Ò¾ý]æ*Wª€•UIÜŸü¢µcWÎMå3·yÿþÓ1·nݺͭ[·°±.¥ýÕÀ·³O¶÷[ZX(jµš«× Y³ž_6lÉòÚíÛw³L—¶±~RžÈ,óo>™Î|][îÈ;Y¦oܼ•¥Ž9Õ=?ñNNNÖŽ��9hzrr²61§!ë@êñ |ýÍw ê€�mYºùv¤›oG“˜·p?®\-'…B¼A™+ ªT®HЬiT¬P޾=ù"p†öš`g[–QýàzgމIF‹‘ûf½þ>ÓZ(?ë¹u;Q{MŒ��Ó¾–˜˜øRuÛùû>>ž0{»²ØÙ–¥þ“®r;óÙUîÙ�¿­KYñÙ'ã©ï^�qï gïþƒX[gÔIWW—‘ü°NÏ^kŸ½§;ó�¶Ë[m§O÷Hf<Ê73®ëff¦qçî=ÂNŸ¥–S <Üëa[¶LFòé÷ý¨Õê|ÅøùÄ�vÿä£.™ÛËL.eº‘¯x&§¤°s÷>vîÞdݴɧ‚øyÃ>ÏGÿüçëtûÎÝ'u¶É2¿Ì“ܹsï¹ù6/œŽ|.y•)?ñ®T±üKïû ›¶±aÓ6*Wª@ÓÆ iÛº9•*V`ܘáìܽ÷…7ŒB!^�gþ>wþ">FGŸvØÚ–͸&ZDTÔ#ŽŸø ·zuiÒ¸n®uIIIeßþü=îÙ�¿3p®ï^[Û2( m�nß¹K«ö¾/\‡Å3I‘â%,µ-¨ª9TÆÚ¦7nÜÒ^×KYY¡£££M4e^×ãââµ-avìÚK-§x6pÇÆºTFRåÉ�fù‰qN÷ù©Kf«"¬¬Jrï^Æ�z%KÏs[ ‚¾Ã\eÆŠ�ulÛ¾K›tÚ¶}]:yQÏÅã|•#·{¤Ì ì€g}w>|¨M<åvÏ÷*Ž_¹Ç¯š�WK|};ãàà Áø�’N¶BÀõð8V¯ŠkÝ:Œ5”bÅ2ºS™™™ÒÝ7cL¡7oKØé³´lÞDÛm«S‡ö¬Y¹˜™3¾Î×ö2Ç1< 7úúz8xDû´�Éܦo'o Q*•Lžø³¿ûŸömHIIåü…K´nÙLû¾‰ŽeÍÊÅ êðÚb—9ð¶gwœk;`oW–Ž>í2^æéw™ ¡vmZP×¹–v,¦ÌAKsªû¿‰wN:x·eÓÏÁÌþî®\½Î¢¥+8t¬ö&¾D>nT…B¼>™-Q3»Fg^Ü\ëj[²Vu¨Ìê‹XµbÅ--9{î�4s,½ý¡pòÏSÔu®Å¦_B¿Aõjèëë±rÕ:í#ç׬û•^=º0}ÊgŒ5DÛjvÓ–íܾs—Ûwîæ¹žòåíò]ÎG�ca®bìè¡cý/›^¸Üî=øäãqÚÖ6;wïý×±0*fÈ£G�ùqÅ*† ì˲E³ùçÜ*–/‡™™)agþáØ‰Œq¿ÿaßOÿšî¾iìY s ôõ¹z-œÝ{ögt§Z´œ±£†2fÔºùvÀÌÌcc’’’øvæ\ívïÞ½Ïßag´cGîÞs@›ÄÈï¾Ê)žyÕ%55•_7m£g·ÎtôiG‹f�144@­Öä»ïgÏíž36Ö¥X¼D›¬2|rœ�üó¿íø�ôôô|Å4/;víað€Þ”(nÉÕká\¾r-ÇeoݺýJŽ_¹Ç¯"¹äÓÁ›Š+J0 -™„(°og1îÃO9~ò/zœ~ƒGsùÊUŽ=Á€¡ïqòÏSØÛÙ¢§¯ÇÖßvâßo7n¾ÖØ�ûAó—réòUJ–(Á�›·^ý½zÖŽ‘”騉?ùuãVRSS¹wÿk~ú•Ï=.øùÍïœ\�`À�ÑìÝw�„ø*U¬@\\<·üÆÐQã²ÜÀ !„xó®_Ï_§|9;ªU­ÀÐQ°rÕ:bbb©êP‰«×®óEà ¦7Gû¾©ßþÀôïæpñÒJ·äÆÍ[Ì[¸Œ/gh—ÉÏzòkVÐîܽ‡…¹*[7§gEÇÄpäè m’hïþƒÿê–)ó)¸Aó—8õ{®] §šCebbcY²|%ƒ‡�Õ^Óvý¾Ÿ!#ÆñçßaÃÆ-¿1hØm«êe?†0îÃOùûÔÌLM‰‹‹g×ïûéܽo¶1�2Ÿ O»Ê½Šç§.ßÍœKÐü%\º|püä_Nû>Ïuߺu›.=ú²zíÏ\¾r �“’9söÓ¾�Í�‘ã´ÝóSŽü$™´1ÊGbñU¿r�#^V߀nlø%„±ï�‘“ÈBaYÜY“”˜.‘ïM¶¿³ö}×hÿ¯XÍRÂ%„Bˆ"gPÿF�ÌþÐ?™Ë�,Bñ¦èè(ØÏ�víÛbmm-/$Ýå„B!„(*7纺X—²¢å“�ÉŸmÝ"„…A__�~½{àåÕ«žô,„ö:&!B!„¢hhߦ%_1€{÷îK’IQhôõõ:¨7mÛµÅÒRz€ˆü‘$“B!„EDø�lÜüá7ؼuG¶1 …âu335fÐÀÞ´lÙ ˆ(“I¼ƒdL&!„B!„( •)ýûûÓªUKÌÍÍ% â¥HK&!„B!„â?ÊBeʰ¡ýiÞ¢9&&&ñ¯H’I!„B!„ø�)SÚŠ�úиq#Œ��% â•�$“B!„Bña[ÆšþýhÒ¤1FFFñJI’I!„B!„xÇU©TŽ�úàæî†¡¡¡D¼’d¢Ê•–ð„BˆWázäc¹ !Ä`mcƒ—O'ê8×E__Ÿ””tRRâ%0ÿQff¯·k¤$™„x�7ÄB!„�k°B†Õ+Ó; õ=Ð××—€ˆ7B’LB!„B!Ä;©†ýúõ¦^=Wtuå+¿x³äˆB!„B!Þrõêàç׃:Îu$¹$ �yB!„B!Ä[ª�G]zöè†s]gttt$ ¢PI’I!„B!„xË4jàŠŸOœœœP*•Q$H’I!„B!„xK´iÕ˜®]»àèèˆB¡�€ˆ"奓Lv¥_¿Î�––ÆÚµ¿ñÃÿ#=]�B¡@£Ñä¹WWG+ahh@TT4§O_âܹ«¯½ÒíÛ7âÂ…ë\¾!G€B!„Bˆ"¯}ÛftîÜQ’K¢H+p’I¡P0eÊûXYY2~üt.\¸Fùòeñ÷÷aΜɌ7•¤¤”<MŽŽ•¨R¥[·†rÿ~––fx{7!%%•+WnüëŠéè(IOWËB!„BñÖònß‚®]»ààà ÁE^�“LƒuÅÚºNÒ&q>|̉gX¼ø+† éÁ¬YÿËs=66%ˆˆ¸ÍýûQDEÅpøð)LLŒ055¢E w¬¬Šsÿþ#ú‹»wP»vUœ�«j[@íØñ�Åàíݘk×náì\�#Gˆˆ¸MóæîØÚ–"66�ýûOpóæ]ŠWQ·nLM�¸zõ&ûöG­ÖÈ!„B!„¢ÐõèêƒOo*V¬(Áo��6hP7‚‚‚IOW£§§‹B¡@W7cûéÓ—R¿~ ò\Oxx$5kV¦~ýÚ”(aÀÅ‹áœ:u€ví<¹qã.‹­çÔ©óxy5ÆÀ@33c6¬ÃÆ�ûX¸p=÷îEáì\M»^'§*lذ—‹ÃiÚ´±±ñ,^ü3'Oþƒ—Wc”ÊŒf…U«–gãÆ=o¥J{Ê–-%GƒB!„BˆBÕ£««‚3öý1’`o�·dÒ××çúõ[( RSÓHKKàúõ›�””œëz.]Š >>‘ZµèܹgÎ\æøñ3R¼¸9?ÿ¼�FÕ+7iØÐ™Ò¥­ˆˆ¸Í²e¿’��„¡¡>jµ†bÅôµë=wî*11q(• *W¶cÁ‚ŸHOWsþü54 J¥ŽvûII)ܼy}}}9„B!„BŠ]}ðõí‚­�­C¼µ œdJOOÇÆÆŠ‡£««CZZ::: ¢Ê–µF¡P�’’’¯uEFÞ'2ò>66%ñôtÆÄ¤ÿüs¥RI�mŸÙîÓÅëÖ­N•*ö$$$‘’’JBB’v¹¸¸DŒŒŠ‘’’FJJªöµ ®kÿ¾ÿ‘öïü R.ÄëÒÔØ”V&fÔ14ÂZ/㔼“šÆ_I 쌋ao|ìk/ƒB¡È2x Z-ã™ !„x÷:ZbT£zåLе0 íQ©×ãH8󀤳Q$!Äk×7 �:wÄÚÚZ‚!ÞzN2…„lfèÐŒù¥¶SæØLøz"KÒ''ýûwdëÖPí8K·oßçðáS´háΉg‰‹K 8x‹vù’%-‰ŽŽ¥re{lm­ ÙFRR2Õª•§\¹2Úå2F‰‰Ièë뢫«KZZF‹+gçjÚ§×IbI¶ê†Œ/aRÏ{ IDAT�K1£l¯•ÑÓ£Œž /S'˜ñàÿ$'ýëm¦¥¥b¡2ÃÀ@�´äx,,,066&..Ž””Ôj5zzz˜˜˜�œœLTTºÆ$%¥ð8&]]=ÙqB!ÞzúeMPµ/‡~y³ì7džèZR¬N R®Å½õ:)7ã$hBˆWJGGÉÀ~~´÷jG©R2t‹xw8É4gÎJfÏþ„… ¿$((Xût¹^½¼;¶/‹­Ó¶ˆÈ-‘sñb8Mš¸²k×a=Š¡X1œœªÉ£G±¤¥¥S³feΜ¹L¹r¥iÓ¦K–ü‚¡¡ÉÉ)¤¤¤b` G�•ILÌþå;=]Íõ둸¹Õà�?NQ©’®®5øûï 8ñu(UÊ’»w£HOOfú!ééêlÓBäWScSfÚ”E‡¼=êR̈U¶å{ûæK·jR(À¾¬5ŽÕ*c ¯‡��éé餤¤ðàÁJ·àøñãDGGÓ¬Y3’’’¨X¡èéé‘””DrJ*ÿœ¿LøÍ;€<2U!ÄÛÉÐÑ’âU3‰?z‡¤sQ¤ÞËh ¯gU Ãj–»Y£_ÞŒ’#�x¸ò¼´jB¼úúzôëÝoo/JþŸ½³‹*{ãøgffè�Vì@EÁÂîÀ޵Ön]»u×îvíÖŸÝÝ­(&v®ÒHÇ03¿?FFPÁUWwïçyæ�[çž9÷̉ï}ß÷ä° Dà_G¶''+0` ÷ï?eÔ¨žlÜ8‹‰Å’%›éÑ£%³g�ø¬¥Ð… 7yöìÞÞ•èÓ§mÚÔ#..žóço Ñh8tè< ºÒ³ç/T¨P’ƒÏ£T¦ðèÑs4 ݺ5£Q£jܹó¶äÍ›ÑoõÔ©+X[[гg ¼¼Šsø°O¶Ü€ #Z¶¬ƒB¡5Ÿ61‘Ó²eŒ�3ßÈ EdFY˜Ò0@Ä<gŠÈ²W×Ò_++K7¨ƒF­âÕ«W¼zõŠÀÀ@öíÛÇÙ³g122¢L™2”-[+++nܸÁŽ;xñâ/_¾$ €ä¤Dš6ª‡��µ^ÚcÍŠÜõóùìïcÑü\¿tê»>ƒÒž%Y³b¾g�pp÷fF�¤Ëg‘¹ëçC—N¿þ­{ Ò�y³&ÿí¼N›4†»~>>çOünå•+— ×}O’+§óâ7j^7'v#«–Îÿy&wÎ&:�)îZ0A3ýˆ9÷F'0(Cˆ9÷† ™~Ä]K]•¸}!¤Î&ÿù1Ì/Ís×χ ^e¾Ù=Ê–ö`ïŽ œ;±ÿ‹®oܰ+—ÌÃÑñçs;ÊNÿ³×F½qÁ…3‡˜1e,¦¦_^OÅb1+—Ì£W÷N_ý»™šš0vôPNÞÅuß“ؽ‰ÎÚè�'ÍÍ̘0fGöoãÒ¹£üoõbÊ—{_×*Wô⮟½{tþ&ý¡µ•“'Œæèþí\8sˆUËþ¤L)ÝñÌú1×\99s| ë×É’¸Ôÿ·®ìß»•.];ÿ+¦YÓ§£T*¿Ûý^°bÙÒ¯žn€¿?þþzûnøù±dáæÍžÍŽmÛˆ�‹ûdׯ]#6Fß@àÕË—¬[³šùsf³oÏîÏjgOŸÖÛŽ�‹cǶmÌ›=‹-7õ†_rQRR2 ¬gåJFFF$%%é\äRRRèß¿�†#f}ÒÂçúõû\¿~?Óc‘‘ÑìÜy"“{+Ù½[BškéÙ³WzûãâØ¿ÿl†4:ÿÉí4¢£ã˜?£n;**æ“ÛYa˜�}¶¦ôBÓ0{:¿ Èò5ib¯T"¡H‘"( ¢¢¢ˆŠŠ"))‰–-[Í»wïðññ!**ŠÚµkS¥J¬­­Q©T( ÌÍÍ133ÃÍÍ��ûŽé¥ýw9|ôwîÞÿnå_¹¢ çM'66ŽÓç|prp õ/M)é^Œ¶{~µû¸)Dn×\;�“§ÏñòÕkÝv�üy©Y½ ááßï�úÐ�¿qöüE^¼|ý¯ÿ}Úö,ªç>ch)äª3Ò\f„.¿÷ÅéÞºs�%Ë×úMó¿kÏ""#³|¾B.gãÚeìØµ�ÉÓç¢R©hÓ²9KΦQóv$%iñøsñ Ö¬Û¤$ðS'ýA½F­ôÒ+Q¦*ŽöÞ·U·�68ÿð7²`Þ4&M��ÏÅËXZZ0|p?&ŒÁ�cuçÕ«S“·îP¯N ¶îØóÃÖ�À·Álؼã»Ü+9Y‰§G Nž>§ÛçYÒý«ìôëÉå+×™¿p%Š¥g·Œ3™%Ë×"N7)¬TÑ ‡ŸÇÍü¾«N`z·ëÙgÏO;GQÚóú®«ȪHäMÞ<® 5þ‹®wqv¢\ÙRÈ��ÿõý�R©dåš H$¼Ê–»n-Þ½‹fÚ¬/~Ë•-EtÌ×w3j(õêÔàøÉ³¼~ý†Ê•¼< ‰‰IlÙ¾¹Ü˜mWáääÀ…‹— � RÅr,[4›Qc&sèÈñoÚZ[Y±sëZö8Bçýˆ‰�¥|¹2Ìœ6Ž™sqøhÆy©““+—ÎcÑ’•8tì£i›™*èÞ­µk×ÂÂÂâ_ýûmÙº5†††?õwçÔÉxx–Â5wn¸pþmÛwÀÄÄ„ÃröÌi¼4Ìp½Z­æÕË—œ;s†<éVŒŽŽbÿÞ=üÒº æææìÙµ‹»wnã^¢d¦¿í[7or÷ÎmªV¯®Ûâø1¬­­iÖ¢W¯\áȡônÛöß!2¥)Î I$$$éöi4F�š @ÿþptÌAÛ¶C„ÞR@ •j ÓLc0e•RÆrª)L³í6§V«‘Édxxx •J‰ˆˆ ::š˜˜bbb&gΜH$ÌÍÍqppÀÄÄ…B�™™r¹œ””4͉DtîØ––ÍcnaƵë7™4u6¡aáx×­E¹²¥X±z=½{t¦OÏ.Ì[°”æMbiaÁæm»X´t•våáÎØÑÃPÈåì=p˜žÝ:2nÒ vï=HýzµéÝ£3öv„„†²bõzöì;”QäܵZͯ�zðâ%ÇŽ¤iãúT,_–àt"€‰‰‚K玲kïAÆOšÀŸãܹ{Ÿî}¡�Ë÷ÇpÝÝËWý˜!�c'N³`ñ ’“•¬Y±€üùò°qóÚ¶jN²RÉ´™ó9}ÖCCCôíAýzµ‘J%ì?x”Yses»æ¢J¥òtï3€�ýzÒµS;vï=H�ÚÕ ‹`ÎüÅ4iäMÙ2ž=»pÑ÷ !ßPhjÚØ›3ç.rïþCÚµý…R%Kpúœ{÷Îp~—N¿âwã+V¯×í[¾jnE R¬ha®ûÝÊTàØwð-š5B,q^G íÏüË8~òlê˜"ˆñ“f²jÙ|r9qññ˜›™áéáN³–Ù¿{vv¶‡þ£í¸X,δlíìlißö&N�Mõª•pqv"§‹66Ö<{À†ÍÛ‰Œ|‡B.§S‡6*˜ŸˆˆH6oÛÅ㿞"‘Hhݲ)%ŠÃñgð½|5Ó<ܹ{ŸRžˆLîz‚½�µÛ·Æ5WNÔj5§Ïø°ïàfLÇâe«uâõèá9|ì$·n¿ŸÄš›™acmÍá£'Q«Õ\ó»‰w½Z¸ætáÆ­;zmdåŠ^kBû=1r³BšÛ UDR–¦ôB“Q^ ¤¹Í0r³úáÝæ2ëW9Éø1Ã)[ÚDpóÖ~7•ÈÈwÜõóÁçâ%bcã©T±¯^2|Ôx^¼D$ѧgZ6oLä»(nÞ¾«w/�Å2°ùòæ!8$„µë·°gß!¤R ~—NsÝ簾&8;;ròô9|/]cÀo=P˜ÈY¶b·è ³¦¦&XXhÛá´ºö¹~._Þ<Ì™·˜n]Ú±xÙzvëÀžíë©Q¯‹çÏ@.7¦~“6€Ö‚ºbù²”(Sõ³ãŽÆ êѽK{lmmð»y‹Ñc¦ð.**Ó2oÞ¤! ¹œ¿ž>e݆­ÄÆÆ}²-øý�R™ÂÒkذy;çO hÑŸ|65ªU¦ÿo=prràíÛ –­ü‡Žgïm_P»fUÆ�ÁøI3hÓ²=»w$$4œû÷Ò¢Y#¼·ÆÎÎ6C=Û¾sßGÇåÊxò6(˜!#Æèò;oÖìíµ"u�®prr`ú¬?Ù´u§NøÙµm-#†ôãÌ9Ÿ/êïܽOµ*ià]###=~ÂòUëô‡èÿ[wΞ¿È¼…ËtûŽŸx€   ]\h]ß}ë6…‹¸‘#GšµhAJêË¡kW¯r÷ÎmºtëŽJ¥býºµ®W*•<~ô˜¾ýûc``@™²eñ½p�ؘLLM¨úñE£C�F“a"’¶-‰5j.[·¢Aƒj‚ª �ŽÚ&fß5 ]£œ*ÇÇÇ“œœŒ±±1–––ØÛÛãââBÉ’%©Y³&µkצ|ùòäÎ�GGG¬­­‘Éd©ÖŠñZq 5ͬ6ø µDÔ¯·ïÞgíÿ6S©B9ÆŒú¸[É/ÍsòÔ9ââãéÙ­#®¹rbjjÂÜ“02’±}×^Z¶h¢;ßÖÆš)FËìy‹ˆ�O`üÑËõßbZZZàš+'¾—¯é&€IÓæP©z|/]ÍÖ³èÞµ=õêÔ`Ãæí¬Û°…Z5ª0°_/,^Éý�ˆŽŽ¡s�þ(är–.œ…ÜØˆ9ó#“ɘ;sæffz“}++KÞ¾ þèýÆý1 g'æ-XÆý�‹Å,˜7� ^eX»~ /]¥c»ÖôéÙEw�…¹9Ê—åà‘XZZ0&Õ�§s‡6tj߆}³gß!Ú·mIÇv­3ÜÓ«\)Ôju±¡¨[avîÞ�‹³# æNC$qÑ÷ %܋ҦU3¦Løg'æ/\ÎÍÛwùµu ÊC‹òåJS¢xQ&L™É¸IÓ)R¨•*”ÓÏ—77ÃF�gõºM´mÕ<Û6#÷O›­£=ΙBrr2 —¬ÄÚÚŠs¦"•~ÿ€ù%‹“Û5£ÆLbâÔYÔ®Y;»Œù/]ª$'N�˰¿ÿàQ™ LiD“†õ8çãûÅ‚¡T*Á½˜'Nëßû]T-Út&.>€Z5ªàsá�oƒ¸è{…Ú5ÿùqEV˶RE/ÖoÚÆÐ‘ã0‹©Z¹íÚ¶$<<‚�CçèñÓôíÝ ±XL£úu°07gÄïX²| -š5Òs[L�ÀK,-,°H�´(ärìrØòìy€îœF ëÁ�c˜>ëOêÕ­‰¹™·ïÞ£XªÛfÚäÿþýx•1±±Œü}¢îùÊ寨ÚXðRßb¼i£úœ:s>ÓØ˜?"ò¢ÚÉAÜ• l_›vMZ?éû•>½ºP£Ze6mÝÁÖí»©TÁ‹NíÛè äjµŠó>¾.˜_×�4¬_‡^Ý;qÿá#Μó¡i#o½Iö²Es°¶²âÏÅË �dâØ‘z®t%KãÆ­;¼¤qƒzŒÒ�c'Ï�’’°Á}12Òw©Ø·'•*hÝ�OÙ�¥~ÎD!gÈ ßøëÉsΞ¿È–mÚ5=BXXx–Ê*³qG ÷¢Lž0šçþ/X´t%Ý‹3yÂè ׿°µ¡c»Ö¬X½žAÃÿ &&Ž_[·øl[ð5ûCCC]¹‡……òÙ˜(Ìœ:ž¤¤$¦Í˜Ç»wÑL�ø;ŽŽöôüMkpáâeæ/XF ÷¢Œ>ÿ—\º|�fM|²ž}jlñ:ð-öv̘2ŽÆ ëammEÇn¿1o�ÖÕ©‚WYââãÙ²}·.íðˆöí?‚¥¥… ø¢ß�©© ­~iÊìy‹2BëNèU¶t&ã�ÒìÉD,ò½|•äd%òåÑí³¶²dÕÒy?qF/¿ï�›3zÄvíÜLË–¿d*0”+_žàà`^½ÔŽIOž8NY¯ò˜™™“””Äþ½{زq#ÿ[»†[7oè®›=c†îÿ‡î³ï÷µò��‹ãäñã´þµ¿õïOB|<÷ïÝÍpÞë7¯qpt¢ÿ ÁäÍ›ŸsÚ>ÿØÑ#˜[˜ÓÐ`Êyy±kÇvÔj5þÏŸsýê~mß�Îݺøæ ×®^ýjù~óú5½ûö£AÃFœ<~•J•Q0.]šn=z’7_^½ýù  zÍš$&$ðòÅ núÝ °[æî˜ 5¦[�žæ!á¨5j¶lÜÈÒÅ‹8wö ©€Â… ëÄFºvïÁ/­ôÇåqqqÉ�+ºó,,-ˆŽŽþáúŸ¯nË–&6uíú;]»þ.¨ é(i$ÿGÓH³:P*•Ú`ÞII$&&’œœLrr².зT*E­V£Ñhtq±Xœ-a)=Þuk¢V«™0e&ññ ÄÆÅa—ªâgÆÔóñ¹x‰¨èhõï�³³#E ÀÊÊ’ “g²sÏ”J%ƒô )9™ß '8$ K s“’‹ÅX[YÿF—®½�öžAAúBŽR©ÌôÍäg',©¦ø9lm8zü4í»ô!!!�¨èh’’“Q©Õ„„„R¯N ,ÌÍY²l gÎ_D"‘0bh*V(GpH}¯0tä¸�Þ«E³FÔ­]ƒ³ç/²aóv æÏKá‚ùÙ½÷ «ÖnH¤•¡I#oæ/\®ûn¿ NLL,y\sR±B9ŒŒŒhÔ .¯ß²eûD"¨S«:¿4oĺ [ô;Õ¼yxýæm†ŽxÊô¹Ü¸u¯²¥ÉéâÄБc122¢vÍjئ¾å™=oÑÑ1¨Ôj äÏ«+«oE)Ï=~šèh­¥ß‘c§¨\É‹s>¾:Qä¯'ψ‹�ÇHÝ["CKÙ§;ÌϯU½*‰„%Ë×âsñþ/¨\ÑK'|ObcãPÈå899ðäésúôžéyNŽ„faÖ¿OwݤN*‘ùŽ†Í¿<ö�ƒ½))*ݳú¨@]·&k×oÑ=ÏíZ±aÓö´ÿXÙæÊ¥ò¹€ÎÅôÖÝ{8ÚÛ#‹)åáN¿Á£P©T\ºr µF�¡¡^åJ³l¥öízHH(·ïÜ£´gIžû¿Èt¬uãæm̾%RâÃÌêåÒ¥ñ3�¾_ çÔés„„†S¾\é íñ½ûùÇ$Äb1U*WÀÙÙÐÆ7JIIaèÈqÄÇ'�Û55ªU N­j±hÙ*>ÎyŸKÙ¿�&�¼¹æw€ë~·˜:c5ªUfþì)lÞ¶›å«Ö!•Jøµu ¬,-|¤÷ÒÇ‚Ú5«R̳… æÿl?'‘HèÔí7Ýo%ÍÕ+$44ËBxfãŽêU*°lÕ:ÂÂ#(^¬uk× G[=‹Ô’%Šsãæmü´÷ß½ï sfLÔ�™2k ²Û¿|ì¸\nÌ]¿÷>ÉÉJþ·qÛ'ŸÍƒGahh€\.ÇÀÐ�i³æ#“J‰‰‰%.N+ðÇ'$ò.*ŠÆ z ‰?y/^¾&¾Ü:0³z6x@ï�Ž-†�Ï þ½¨\Ñ ïº5µ‚Xx“¦ÎæôYœ� ËðÌ‚‚µã¤œ.NzmPVINmsæt&,<‚©3æe:>¶·ËÁÛ Ì_ô½}„³³#þ©/(ΛÎËWo¨P¾,‹–­Öµ¡.NötéÒž*U*£P(²4.÷nÐ�ûöR¹JUb¢cððôàêå˘˜˜Ò¨IS”J%+–.Á5wn,,,ÿù¶T*ÅÀÀ€à ·˜,DûN�2ÿ~"1î%J ‰(X¸0>@­VóøÑc Œ��nE‹!‰P©TÜ¿w÷%1M} [ÒÓƒ+—/S¦lÙ¯’ï%K"‹qÉ™cc#”ÉÉdÓ­688˜S'O‡ƒ£cöú‘Ä$üýiýk;L öîÞ�ï… T©V SÓÏZ#%ÄÇ#•é·R‰”¸ÏĆúWˆLÇ^bø�¥‘^ 255E.—“””DLL ñññ¢V«‹Åº�H$úba)=v9l  %>^X5½;X¦�y�vÀù.ÕTU,áäèÀ㿞¦ˆéMúªU­DÓFõIHLøè[õ4W8kk+½ýff¦8;9ê2YeÓÖ�äË—‡ÍñKóÆDEG3yÚ\þzò,Ä`ôˆAŒ1H·ßÅÙQ'2ݼu÷£÷ÉŸ/#‡ 88”?ÆM}_RÓ}ðð±ÞD¡fõ*H$Zë™Ø¸xbRÜiå)ió$“É8uäý8•J…X,Öà¹8;eZ.i„R©$**†äd%úßÛÁž©ÿ@a¢àíÛ oþû273#<âýä1<"BOàyý:Poý!)‘IŸè§D&}ºž§Z³<à‚ï.ø^ùGÚšÇ=åü_ºvj‡\nÌ¥+ר¶co±0((ÛÔ`þ vJe ·ïh]¨,Y©‹ÉdiaÎÈa÷û0½ØIÙ!(8CCÌÌL3MÞukrëö=”J%¥Ôj †˜ššàääÀ›7oÿ±vüceû!¯ß¼¯oµ&µŽš’˜*î§qåª"‘ :uh£;ÐsMû�k~7iѬ§ÏúPÊÃ�#ÇN‘ÓÅIwÜÖÆ†vmZ`bb›À·º™�ÿzŠ““# ¹�’ŸtùúGû ﺵ¨U£ »÷äü…KzÇkV¯Â¥+×2}ü£bh©µšIä;«¤]“–ÆÏ@ú~E*•2rØòävå¹@†sS­hÕj5±1qº¸[N¼x¥ë¿ïݤ™ìíôû ×o‰ŠŽÖõyöÚí0½íÏŽy²ÐÏÅÄÄf*Æf‡ÌÆißcÛÆUzçº8;ê‰Lææf„§?bbbÑh4(äò�¶_«ÿI‹É¤íïã¸pñ þ/tÏ(³gùŽ‹WÒ±]+ÆŒÒZ.�¿p‰Qc&e|áä@RR’N$»wÿQ‘)}=ûÔØâõ›@†Œ‹H$"gNgÊ—-ͰÁ}™2áwÊW­Çë7�¸¸8éÆ!2™Œ’%Š‘'�kê3 F–jõ‘’’“Y½nõëÖ¤KǶܻÿˆM[wê Vjµšà�PììrdúâÅ.G½¸”[¶ífÛν¬[µˆ^Ý;±ÿÀAztïLÅJ3Xç}vŒlgG�9°o]ºw×�»_¿z…W… :!ÕÁщ ·A?†È$‘P¿aC._òåÐ�ƒäΓ‡Úuëdpñ³°´@šúÌÒ^tÇÇÅ!M]é:�"nEµqT4/_¼àþý÷îÛ&&…—¤¤$¤Régç(Í‘î÷—Îor¹ºÒ¥[w>¸Ï¾=»éÙ»O–¯•ɤ¸+¦ËGIO|/^¤Jµ¬YiËŒ´Â˜žˆªÔz¨ühˆøO�OI"‘àççÇ‘#G8yò$wîÜáÍ›7„……accƒ���.þRÚu—°ðìrØê\¿4oÌo½ºf+�´Á@žÜÚÁFÁùtÇJ¸£U‹&,_µŽJÕpùÊõ�¦ñòÕk*x•Ñso>¤Û6®¢pÁüZª(g¢}s­�Ëõ\ŸD"1c'L§z�&L™®�G7d`ŸtÇÓÄmÞ;vëK1ÏJ”,[�ªµ³nÃÖOŠÆÆFÌ™1‰¡!ÃG�'*�IlšøS¸pAÝ>·"…ˆŒ|÷Ù|xD$W®Ý ˜g%ŠyV¢B5oª×mšéDk«ìhd2Ã÷ãνT¬V_7þ–DEGc•.¯––zjÖb÷² IDAT>]—o‡þ­ãa©ÁØó¸jëh¹²¥2°6ˆšßKK |.\fÄï˜:còçÓÅ Ó›ܾKíšU3ì9t®¹\2M;ò]{ö"_Þ<_œ¿¤¤$=~Bíú÷¶07gÚ¤1�úü؉3T¬VŸÊ5P¾j=Nž>GÝZ5þѶ4«e›YÛ‹±‘‘^;R§Vu ¹ÖÝwîbÆL˜Æ˜ ÓX°xgÏ_üh>ü^bcm���-ÎNŽÄí];pæÜFþ1‘‹WèD‚””>zŒ§‡;òçãν™¦ßªEŠ-ÂØ‰Ó3Lb±˜reJ}´­ø1Hßž÷éÙSSjÔmúQËÆÌïïpÍå¢[�5_^Wݱ´—$… Ô æffz± ÿ.YéçR>*tŠt]¹©‰‰nRii™µÀËá‘‘(•JÜKW¡˜g%ÊT¬EÕZ�õâ—DEEceù¾ï1Q(‹Ä:·ß¬Œ£¾´ÿI‹É´tÅZ6lÚ®³¦úÔ³133åœÏE¼›´¦s�~œ<}ŽÊ½tÂTú xDD$2™ Gû c¯ÌêÙÇÆCCöl_Ï’3xñâ[¶ïæá£¿066B"1Ä÷ÒUr9­[jWõ®[“勿P¯N ¢¢£¹Ÿîåbv�Ë�yȤis2b,‰‰‰Ô¯[+ÃyW®ùÑ$�;h¥=K"WÈyòô¹nß�ÃÇP«Õ,\¼œ|y\˜4q 5kÕ̶À”F�‚±²¶ÂÒÒò£ýˆF£ÉTùVq.?Y±Í‘ƒŽ�»Ð·d2)—|}3þ3ɯ±\NRR²Þ8õÊåË$ÄÇ#WÈ©Z½:Ýzô¤[�ž´kß�šµkgVçΞELL´®OK2}™………~6?YåÊåËz.‹NÎÎDFDf«üÍÍ-2´¾ ý¦¦¦$&&‘˜� p£ÞEý�Áä‘I@à;¤LùÇÒH™ŒŒŒXµj `РAÌ�;___zôèÁæÍ›IJJÂÖÖ±X¬p.³XlYåøÉ3ˆÅbÆþ>”.�~eôð�ävÍ™­4|.^&9YI÷®èÜ¡ �;¾_I!Í£¨[aztí@­ÔIsf«[Ì™¿™LÆæÿ­`Ô°�¬Z:Ÿ†Þuxôø‰Î¼?�ظ8¢£c¨T¡ûõdáüéziþ1r0ûvn¤^ÝšºAnšŸ€™©)åË•á¢ïâãð[wêÖ®ÁÂyÓ9ut·žÕÁÇèÝ£ ¹]sñìy¥Œ¾½»R¹¢×�-’’“yõê •*x±rÉ<úôì¬iã)^Ì� ¾WHNV²bõzß1rèΛNñ¢EHNNÆÜÌŒËW®›Î%ÈÓãýx¨GןŒ×—ÃÖ–Càìä¨� '&!ɤÍ^°hµªWá·^]±±¶ÂØØˆêU+1sÚxÆN˜¦'Šäquaæ´qÌ�;ƒ¨˜Ö®^õUW÷pvqÁÿùs�°ôÇT÷,’S-ZÞ¼y“¥¾'"ÕÒ;,ÕšðÝ»È/Îó»ÈH6oXOHHR™ ©L¦ `ý9 È›/¾. Ñhxôð—.^@*“Q¨pa.ùúCbB{÷ìáñÇúm±D‚¹™îÝOu½{ˆ]ªU¥T&# À¥RIttOŸ<ùjÏÂkW¯JRRW._ÆÅÅ%[  )Z”G¥ÉoúÝ ~m¬±ØÔ…˜>ÙI$ä/�Ÿë×®iÛž›7µ‹5ý`A¿‘I@à;s31þKC$!‹ILL¤oß¾,^¼˜ùóç3jÔ(ÌÌ̈ˆˆ`úôé´oßž•+Wb``€••"‘µZý·Ôÿ}ްxÙjJ–(N÷.í9}ö‚Îò'«„„†1|ôx Ätlßš#ÇNêŽ�>ëÙ³(W¦eJ{è¸Õªd ®yú¬½úåõ›@5¬K®\.ìÙ˜^}‡fXi´ñ!bbciÖXk!•Þo”Y\½~ƒÞÝ;3bH?ž=ógÌ„ilßµ—à�PôíAXxý�ÄX.gÒ¸‘ØX[ÑoШ –›€Öe®_ŸîºO·ÎíQ«Õô<’+×üèѵ•+–gý¦í,\¼ò³é.^¶†]{Ò¥c[úôêÂÁÃÇuyOÏ�›·‘I¥¸)”­çÁâe«±³³¥E³FìÞ§ ¦Y-5àiÞ<®”ö,©3—θ�;u;ë¦ñ}¯pïÞ&ŒÉÄq£xô×SÎ�÷ÍV¾C—ß#öìk�kBJd±g_giÙò/^1xøŒŒŒÜ¿¡¡aô42Sw¢îÅp/VôãÛ%Šá^Ìí‹sgÏ_D©Laê¤ß™:éü^r)«“èè:vý�¢n…Ø·köl¦`þ|ôøm±±÷ñõê ¶¶Ös+üåmÙí» 9–Ží[söÄ>þ·j��AŒ;GG{Š.ˆÏÅËzל¿p‰ùó’ÛUû×Ö-¸~é”îsxßÖoÞŽgµl?Æÿ6lÅÙÙ‘?çL¥q£z,]¾•JÅŽÝû‰DÌš6�Cpøè �{ðǸ~ãòçÅïÆí ǶnßC�n™:ñòävåìù‹tî  ô|÷îÌÌL¹qóv¦éº¸8!“I™;k+–ÌÕ}J×ÖÑB ðô™ÿO×+´®ÃF…³o]˜vMZ?sÿ\BLl,]:ýÊß+ÄÆÅQ©¢×g'Hë6laßÁ#x”,Nýºµô–qLï~ÃˆŠŽaèÀß°ËaÄÉ3uqð¾_ÒÏ?q†G�ŸÐ½K{LMMX¼l5Ož>§v­jÈd2®\õËÒ½Ï_¸Ä´Yó)W¶cGkÇ ÝzÌ0VeýÆmôîÑ™y³&cnnšaÕ¼oÝÿ|ȧžÍ�[w˜5o9]œÿÇpJy–`ùªuœóñE£Ñ°výlm¬iÚXØÙÊu)T€šÕ«røèÉ/[Œ7™M[wâââD×Ní(^Ì�Í[w1zìdââãiÝ®û¥@¾¼4¬_ÿ€—lݱ‡Z5ª’?]àí²¥=ôÆDõëÕúhž^¼ä¢ïe†îÇüÙS°µµa÷žƒ™Ž3iÛg'G6­[Îé£{éÜ¡-c'L×Y•æÏ›‹3gÎ0wÎtªT­‚T*¥v�º˜šš²sû×�X¦\9bb¢Ùºy3[7m¢jõêºXE弼رu+‡È’ÈÞ]Úû6oX�Z­æèá#„†„|QÞì(VÜ�-7°`Þ<"#"©R5ë sÔóö&$$„ùsfãsþˆ ó-qqvâÕë7ÿX9”+]‚víÚPÒ£d¦Vòú¿�ïÈ™¸®'ÄSÊøËÜL®'ÄgY`Ê ‘HDrr2ÞÞÞ899‘’’‚ƒƒ :w¸´`ß 4ˆ%K–0vìXÊ”)ó�ø}§ñìy*µš±£‡1yüh¢¢£™¿p¹ 0}fÎ]Ī¥óXº|­^`m�Ÿ*Uôâésÿÿ”À�x?‚dÿh¤¹Í°hž—w»žeé:‹æy1°’‘ì-Lÿ)nݾGó¦ Y³|b±˜—¯^3dÄØï*0ÿ˜ÀT¾œmÛ´ÂÃÓ#[±sþë"“€ÀwfVX›]rc@öÜÏTh˜ö÷VèÒh4ðôéSîÝ»‡Z­&111Ãj ib’L&£@�ØÙÙ‘’’ò�v°*•Š©3æ1}ÖŸÈåÆŸtåøºÜ¾s�¦-;f»E@@àç¢EÓ†¸/ú]‚ñÿˆD À¶oq¥µ1<>'4Y4Ï«;7êP€P�þS„„†Ñó·!H$ >ºzï¿�JåKÑ®}[Š/ž­˜;Z‘I@à;ó )‘Ao_3ÏÁ9ËB“ ƒÞ¾æAÒßïÜE"III„„„ Ñh°´´ÄÁÁAgÁ”&0Õ¯_ŸîÝ»S¡BˆŒŒü!L„Õjµ 0ý¤_‚Y@@àçeÛνlÛ¹÷?ûý“_ǾáÖí ¡(m‡Q^ ⮑ø0eˆ6`´$‡1F…­P”µÇÀJ'.|Ã#’_Ç Hà?‰R©üê�­DêÔ¬LËV-(R¤ˆ . ü ‘I@ààL\ m_ù3ÌÆþ³®s×â™ôÕ¦””ÜÝÝ166F¥RaggGPP�Î]®|ùòôêÕ‹Š+"‹u«PˆÅâïƒI@@@@@à[�x?‚ÐEw0¯ïŠ4·fõraV/W¦ç&ûGu(@˜þÅx×­FóæMqssû[ Ýh1ŒßsB(� Ðh@­Ný¨@¥�ö�:õ•*uŸ¦öùÇrû )‘Îo¨¦0¥¶‰%�äØK´ºo�2…›‰ñ��þ[1˜ôJG£A­V#“ÉØ¹s§.ðwžâ’„ØL?4�Ú·¤i³&ØÛÛ …! ð�Ì~B>"0¥Y(©RRÿ¦~Ô*4ªP¥þMš ü9ü?Wrê”dÜÜÜ0«qvrÀÒÒ�FƒL&C*•b``€F£!88˜€¯HRj¸{÷.™Pí~X Ätëü+õxcgg'ˆ€À?€`É$ðòa�ïÔ�4W9�=ÁI�^hJ Ôÿ w¹ôˆD"­’¡”‡�Ÿp÷ᳬuØb±XŸI@@@@@@@@@àGA*•йCk4¬OŽ9„øD&�ŸŒ�­"Gæ“F“NXJyoå”*:ý§Jîo Dêl¬ÆW¢ˆ«PUþcÜz €Рü—‹Åx”*‹§gYLLMyÇ»H¡`þS(˜û‡Ê� 2 üD|L`Ò¼ö­˜´1˜Þ»Æ¥¼ÿ¤¤¼w§&B, ðSafª {·Ô®] ¡@~ ‘Ià'E“qE9ÍLéÜäôÄ¥”dHQ!Þrü,Xš›Ò¥K;êÔ©�¹¹¹P ? ‚È$ðs“^`Ò¨uÿkt.qêtîq) T‚*ù›çX^?'”Ÿ€€€€€€€€€À޵•9=»w¢F͘˜˜" ð#ˆL? YM.ý'MhR«ßöÖY0)uoü±ô;�4è%H¤BÑ ü€89æ [׎T©R…B!ˆ€ÀO@¶E&ó‹G0Œ±˜¨òu�„"|€øB%QZÛa~é8¨Õ¤Xå ªB]¡”¾ z¿ÓÜåÔh4j@ šôîr*P*Q¼ ÀòÆ9¤o_ å' ð’ËÅ�N�ÚQµjär¹P ?Ù™lw,Óý¯21Gþèò‡7�ú_ÈË;tç|Ld²8w›½«ÑˆÄˆÐ�bnMœ[iÂwFó…Ö%ökgëQ‰X÷òú_2*çyÿ滬ˬ�·L²}N¡–}-4ŸØ§—ék¦¤¤  ÀÒï¿)0‰D"ÝÊr‰ qhÔ*ŒŒŒ044ÄÄÄSSSD""‘•JELL qqq¤¤¤�˜˜ˆHl€‘±"CZ_‹Ü¹œèÖµ#•*WB&“ " ð’m‘Ief‰At$)f–¤˜ZêŽi·-ô¶?Elq/‚:�@öÛ]+±Û0— .#žÉ»Z…F$‘H¨Mß�]å4Z+&Mª¸”&2©UÈß`uýÒÀ—ühòH5…)µMÌ(i$Ç^¢ýI)S¸™ÏñØhÎÄÅüý’ÒhФ$âà`‡™‰=æf˜™™!•J‘Ëå¼yó†   Ä"1ÎNvØÛ%11¥RITT‰ŽM 00±ÄX¨zÿ ŒÜ¬�µAâj‚¡¥‘vü™ˆ2 –ø{a$Þ� I@à;àV8;üJ9¯r‚¸$ ð““m‘éÅïK1ˆ‹Ac` µ>r÷"²nkm§la�Fl@@Þ"ˆT*T Ó,§«´q ¨ý`\'tCüšd;g,ÎÄüì> âbH¶w!ä×�$çpÂèùrìX†aD0ÊηD²�3Ò W8ŸŽadqEKÖ¼‡N�°:²³KÇÑH�oØAgñdrÛëƒÇÇ’�×�ÐV}P)Ì�D„`»} F/Ÿ UÑ›ˆÔïšgT[BÚôÃvÇ2^ÿiÐ+lw­À 6ŠØ©TBíúj|„)Íz)�Ф¿Òœyàs¬®ŸEúöÅõ­ŠÈŒfcO)ãŒ&ÀN Ns˜šs=!žYaA䨾”È͈õ¨„õþÿay|;Áí`zý,¯Í�†œSzç^žd;g £Â'%òbÜjŒŸÜÁaÍ4sD”¢$Ƕżé5žd§ÜØîZ�Íî•·‚åÑ­¤XÚâßu4’ˆ\f"ª|T©ZŠ»WxñÇ2P«qX;��Ö}‰+ZËcÛ´A¥¾šÏïJs•Ë 4©‘¿ñÇêêd�/~( ¦j Sæ98cÀç-àJËÙì’›Ao_gߪI£¢zåò¸/FPPjµZ÷¹}û6±±±”/_'''ž={†X,¦bÅŠpüøq nnnˆÒYêÕ©S —œ�8vêÄBø©0r³Âº}!íX5"‰¸+A$>Œ@’€$‡1F…­P”µGšÛ ۾ŠßðH°jøŠ¸+D§Ní)S¦4††ÂZTÿ&²ý‹N˜ cÞémļà F;»¨LÍ1ˆŽ@enEÀ¸U¨LÌ1ˆ�CݽT&fHß¾@œèIXÓ®z×Ç–¨€J®]Ö21Ÿâ„8í±˜ˆzmÑ_¨$ñù‹#tqB±Å½HÊ™€pï_qß•àvÂwB-5Bc`ˆH™ŒÆÀƒÄx�Èô®jcÔ2cLnû’äèJlq/"ký‚Å™}Bíú&h2ýWo;Ud’¿zŠõåãHßüPß ˆÌ(˓ˆyδ}åŸ-‹&¹± 'GÂÃ#xõêñññˆÅbÄb1oß¾åäÉ“øùùÑ AjÖ¬‰H$âêÕ«8p€   ªU«†‘‘‘N˜R(“ÓÅ sS"£â>zï¶6LŸ2–ŋҪ]7ž<}þu/CCÚ´jF)�ÈŸ—аp>ü‹ÕÿÛDHHèW¹GåŠ^,þs&Œ›Ê¾ƒG2/W¶+—ÌÓÛ7ò�I:rœ<¹sñǨ!.X€gÏý™<}.�?ùfõʼnNŒÜm1´”‘™DâíP¢Žf.vûž=‚B!§u»nÖüo3.ÎNÞ·UªU©H$âÝ»(Ž�<ÃôY¢V«Ù±y KV¬¡@¾|ôîÑ)µ«kÝKSãŽ�;…¢nÚÉèÌ9 �I¥ôíÓ�jU*‘ÃÖ†€/Y´tç/\ÒËßá}[‘Ë�©^§)jµcc#®^8�W•ºÄÆÆ Mú¿ˆ/­ÇÙ¥Sû6TªXŽ¡#Æùîý˜ËÌÌ”¹3'ã{ù*kÖmúÛ÷±µ±¦S‡¶äÊéLLL,;vïçÆÍÛ èÛ÷âEõÎU«Ôtë=ð§xNRg�Àw-˜w»že8G’€2ä 1çÞ`ÑMÛ6­ððôÀÀÀà³eréâEN�<Á«W¯°´´ÄݽÍ~ùEçR7fô(š6o�‡§'IIIÌœ6g:uéª÷¢TàÛ3kút‚D"ù.÷{À±£GèÑ«÷WM7À_;vÍ�[·ï†Ÿ—}/’””Œ³‹ õ4@žÉЇo9zä0ÑQQä/P€Zuê"‘HÐh4øœ;Ç�Û·‹Åx”*M9/¯Oæ#,, ÿçÏ)]¦ ñqq:x�ׯ^boï€wØ›[üü"S„÷¯F„€XL\O”V¶¤˜[k;k·Ò(휉®j5Jk»lgÈ 6•™ˆDXžÚ�ÉÍ ¨Ì,QËŒP¥Æ{ mÞëëqß•$‡\„7êDB>í€'Éé}EЈÞ[Y¨ä¦¨eFï6öZQ,!ŽKÛ÷癘ƒH„A|,†áÁØî\ŽA\4ɹЈõÂs+�˜¦´zÿ]5†T©Çþ."²dÍôŠ€ÇXùCøâ‡ûFÃlì³%0¥š†ÙØÓùMÖE3\\\ ÄÙÙ…B¡kôMMM)[¶,ŽŽŽ8;;3iÒ$D"ü®Z©Q IDATñîîî¼yó†ÄÄD ,¨ýÍ(•ÄÅÅ¡R¥P €––¾Ÿ™*”/KiÏ’¬Y·‰·oƒ¿j::Ú3kÚ^¾|ͦ-;yðè1öv9¨U£*;6­fâÔÙœ:sþ»L*CÃÂٱ뽨üד§±vÅBBBÃX¸t%íÛ¶dÎŒ‰ÔoÒæ›äögQ=—CK&U�‘æ2#tù½L¯‹Å ÒŸÎ=úeû~+×làmÐ×{¦�oƒÙ°yG¶®iÿkKš5nÀØ Óxüä)òçcʄ߉�O`ëŽ=Úþ 9™R^5t×äÊéÌöMk¸{ïÓí_¾jËW­Ó‰m/_½fÅêõºãi"ÓûÔ”ÊzõBhX8Ë—eÚ¤1tí5@'$º)„T"%)1™Òž%¸rí†ÐœÿËù’zü¥$'+ñô(ÁÉÓçtû"#"Ø»{Ç�eÂä), ”J%ófÏÆÎÞþ‡˜üý9zø½~ëûUÒ{ôð!çΞÁÐÐSS3Z¶nýÃÔã–­[ÿô–iáááœ:yÏR:‘),,Œ çÏѶ}LLL8|ð gϜƻACý)ªFÞ];©Q«6yòæeßž=\¿z¯ ¸}ë&OžüE×î=P©TlÚ¸;;;rçÉ“i>T*ûöìÆÄÄT'2�8~ kkkšµhÁÕ+W8rè0­Û¶ýùE¦s­U�XŒF"Cml¢ÔÆ ÔR)¦ˆÔjÝþ¬"NŒGöò IÍ{`rë"ÆOîòjØ|T SL¯�AñÐÔjDªÞöƒH™Œ¹ï1lw.ãåÈE©šDæ�‰A| âäDÔR­Ð$‰%É)C Òà×ïÏ‹‹µ•Üçùs‰¬Õ‚èÒÕA$"פžèZKef‰$âý„Kœ‡$<�¯�&[ÚSq®ѨR°¾xi`Àómª)L3�Á”UJË©¦0ͲۜR™‚��… Æßߟ��bbbÐh4*T¥RÉáÇ‘J¥ ÑhX½z5jµooo ˆ��E$abb‚³³3ùòåC"‘ T¦|ô¾2™Œ¶6Üøˆ¤ädvl^ƒB!çôYš4òæå«7L›1�»÷þŸ½³oòjãð�¤ISw¥… Ð-´h‘âîîƒ�mø`ưƒ!Ã6œâ Å -^ZŠ–âÔ=µÈ÷GÚ@hÑÁûÞûºr%yõ¼ç=ú;Ïy_€¾=Ùþçnš4®OBBsç/¦mëæT«êÇ­[ÑŒ7‘¸ø¤R)‹çÏfwðV® ÒÝóvÆ]nß¹KhØýü#Q7n²xþ,,,,¨ß¤-µj°dál6mÝÎŒY?3wÖ4¬_—€À渹güد)åéA̽ûü0ã'""£t×®P¾ úõÀÜÜŒ?vìæ—¥+Ðh4x¸»q%<‚�³ç�ˆÅ„G\C©TÒ¦U3¬­­öÕX"¯]gûŸ{�¹2_±bNôéÙg'GžÆÆ±~ÃîÝHýÀÚ¸º£¸k1lmm¸Ãú�[INÖ·µhZ¼HŸ"2ws,š/rT­VãïçKýÀÚ9v²Ðþn�Û3dPâ≌Œ¢cûÖ4oÓ•1¨/.^gÏÞ¬úu!¥Jz´qÝ»t 7/�™³çsäØI–.ú‰Z5«Ñoðp’“Sؾe-×oÜ¢[ïÁ:Ë;zu×Z€”*éA¯î�±³µáÉÓXV¬âñýòÔÂÜœaƒûÓ½ÏîÆh…äˆÈ(fÏ]H»6-t"Ó‹Ü»ÿ�s.áäøîâêÕüñ*]’m»¡TjóÀá£'(ééNõªþ:‘©y“†ìÞ»"š6iøAD¦?|€••% E999\‹ºAЦmX[[ѧgWìílQ«Õü¹+˜s.Q«f5ºué MG"HMMgmÐæ×Zÿy{•¢K§vÈ ÉT(X³n=f@ßž”-ã�B¡@$qÿÁ#Ö¬ÛHNn.Ý»v \숋KàNt +V¯gÄðϰ³³ÅÄıXLzzYYYL�9—êÕüiÝ¢©Þ3M˜4í•a�J¥Lš0š[w¢Y´åƒ–ãb±˜žÝ;á_É€#ÇOòç®`½tüªükblLßÞÝðö*ERR2·üÁ�›·‘J¥tí܎ʾHMKçÀÁ£„œ-ÚR$üj$þ~/ˆL•+~5R÷ßÖÆš>½ºâV¢8jµš#GO²s÷^fMŸÌâe+¹ÿ@Ûö™0ök‚÷âò•½CF†‚ÚµªóàácÆŽÿž˜{÷‰D ÒŸÎÚ�œ’Ê¥+WõîUÙ·£¾FIObãâX½n;vîA&“ráÌÎ_¸Œ™™)..Î:rœ�3çøêóÁ˜˜³ì×5mÒfÍÌL±´ÔÖiiÍÑÁžñc¿Æ¿²/Ь,ö<ÂÂÅ¿’››Çª_RÒÓƒ¹?/f`ÿž,^¶Š!µV=;¶®£A³ö,ž? cc#Ý@Ï/ógQ«f5|«2tp?† éÏÏ —Ò¡]+¬,-Ù¸å~YºB+xµlÆ þ½°³³åÂ¥ËL˜8�”ÔÔ"ã¼CÛV˜sóömÖ¬ßLFFæ¯Ëãâ°³µ¡lYoBÃ.P¾\žÆÆáè` {¾Qã&qàÐQ<ÜK°ó÷ V® ÂÕ¥c&|¯³øš;ëÌÍ´>ujT¥qÃ@>Îèo&¡V«100`ÉÂÙthÛ’î&<âÚkÓcÝÚÕèÞ½ ìߌD"ááƒìß·—”ällmhÙº ¶¶¶úÏǾ½ÁL�1{{íó8:9ñÙç_0mÊ÷:x€¦ÍšëuÈY° sòÎÓ’E ‹ÅˆÄb©× ææ¯ì‘Ë1”Ë mOJJâÔ‰ã´nÛî­®wöL-[µ¦˜‹Ë¿VÎ\ºx‘�S'ÉÉÉ¥x‰´iשTÊï[·ò判¦¦²w÷n,,-¸�•µ5uëQÂÍ�ì¬,‚÷ìá^Ì]Ì-,hܤ)®Åµ+²Ÿ?wŽóa¡xyûX¿þ¿Ë�S§P*•Ô àLHy¹¹Ô dÁ¼¹Ô¨Å¹Ð³ˆ%ªV«ŽŸ¿¡kœ?wŽË—.’–š¦·=9)‰rå+èÒi™²e¸xþBá¶fL †r9^ÞÚÊ5k²û¯]Ôàæ�›Tô­„‘±¶/X¡BE"#®âîáÁ¹°0®†_¡ÿÀAºk;z™T¦'¢Þ¸~ƒ/¾ü‰DBÕjÕ9uŠŒôtLÍÌ>ªzè­ªØo]‚ÕÁmXï߂镬ÿ�ÕÁmÚÏá?0½rëý[°:¸ ûÍ¿¼¹Ú•‡Ãúy(JW$×ÁqfºV´’#ÎV`qæ(• Qì—ï0 ?  *SsD¹9¯¿�Z�Õþ- Vctë*Fw"P”õ'³\ULÂÏbøè."µ ëà dV¨"bE:yVv az%D+© w¬¥+bø8“ˆ0Ðh°8œï#Hàý#*ò§Þ‘D"®%I¬Þ˜'·�&ô�MÍÿñkdggcjjŠ¿¿? 6¤N�:x{{£R©HMM% gggiРÞÞÞ4iÒ±XŒ¥¥%þþþ4nܘ&MšP¥J,--Q(¯ÓêÖâ‹¡ó,S©X¡¬nt±\Öo؆§» æÍÔ3§-Wև߷ïÂÕÅ™…óf"‰8ŠoÅrtëÒ€ÁzÏÊ5AXYZ0gæ÷ìݵ…Ù3¾gÃÚåÄ'$òûŽ¿èÛ«gÃ.`gkƒ½½e|´Ye¼Kk¿}¼ˆˆŒB£Ñ°tÑŒ�äÌ�¿CCCæÍžŠ…ù³xnÛºãÆÍÛ ЛömZàîVœ:µj´z)kW.fãÚåÉñp+@×Ní8s|›Ö-ÇÝ­x!�I,3|è@N‡„òåÈñ9z’/†Ô�ðÕ®Uƒu¶0ú›ÉHÄbën¸T´{uÃæ%û=~BhØF}=¬�I³oÅrŒû5wïÞçÌÙs´oÛò•÷°´°  f5vï=ˆ••%'h§ÑÍœ=ŸÜÜ<†îÇ��}˜:s®žÀô"}zveß�#|1ânÝŽ¦eóÆ…Žññ)Íã'OuS§Ï„1ú›ÉE—"eËxS®¬÷ßšâQůG�ŸÒ L,_±–5ë7éîÕ¤Q}víÞGðþC4¬_烌êM˜4� “¦qëv46mc¤iºÛ€>=¸~ã&ã'Neî‚%´iÝ ccí¨þ•ð¾û~ßMžÁÕˆktl×êµ�ãaCú´q+ã'Neç®`ºun¯Ûÿç®=Úë}? ujkM¿7nþƒ “¦¡R©˜:ó'V¬^ÀÏ‹–1aÒ4öԗȨë=~’v­ŸuêíííXöË\l¬­Y°x9‰‰Éü0éjTÕSÉ·</‡sŸ6-›1nÔpö:ŠR©dÌÈ/�¿Ðñþú‹!ÔЖ!‡÷nG,³ðç ¨Q•Õë6qúL}zvÕ…ÀÔĘQ#>çæ­hŽ�8ͦ-0äóQ$$$¾Q\uêІC‡�“©P0d`ÜJÇ·b9¦M™@ôÝ{ü²t•*V`Ú” …ûFv¶ôéÙ•_W®cÄØïHOϤG׎¯- ÞG]ž––FôÝ{øæOa­P®ŒžØ|ð°Vˆ®™ÿNªúWÖŠãGOòðÑfM›L�®©T±<&NcаZ‘©f5V¯Ý + ”J%ë‚¶ ‰¨Q½ê+ÃܬI +[ȬY3ðõõÕ öï¡Zõê|=j.®®„œ*<Øu#*ŠR¥Jë&=á*°‘W#ô¦åK£Pd2xè0Ý"7ïJ—î=üÙPœ‹¹ðǶgSoݼÉú5kØÄÖÍ›ÉH×ú?z”}{ƒÙ¼‡Í7rôðaýÁW¹¹¡¼�ˆ¶mËfîFG³võ*6½6\O?fíêUÄÇÅs`ÿ>Ö®^Åþ}{uÄî];ÙDÐÚµ\8þƒ•-ŠÌL8@×=ùüË/ÉR(ˆŒ¸Z踇�âä\Œ/GŒÄÓ³$'�kÓãþ}{±°´àË#©^£lÛŠZ­ænt4çÃBéÑ«7ýâñ£Gœ {Ór=|ÈÐ/†Ó²Uk8 s© 'W©ÂÀÁCð,é©·½TéÒÔoØ�ì¬,î߻ǥ ñ)[¶Ðù©©)ØØØèþÛØØ�š?µ]­VëõDb±nŸ���žUTÌÝ»ÄÇÅãWå™–™™‰\n¨›¢'‘H°´²$--í£«ÞºÕ«2³ÔùZRšYêY+©Ì,Q™Yèý¦ágðÓIk9dfIf¹ª$´é§màT©‡ÉÕPܾïOž�3©Ͱݹ “«¡ÄuýÛ�«�l˜Ož­#q=G¼6ÜyvΤ$â>¹*cSžö�ÊÄ•‰9ñ�>ÃqÍlÄY™d{ø×y mà¸~*¹1™åª’Z³ ›ñ`¤¾¿µÜ˜'}Çb·ý7ì·,&³|5^¾‚ôÞD%Í«7‰ò…%D:�Iû£(æUëav䣰hª$7þG¯!‰‹Å(•JÔj5R©kkk,,,ðôô$''‡ŒŒ �¿%©TŠX,F"‘`hhˆT*E$éV—ËÊÊÒùtzûÆÊÒ‚ ãFÐoðpÎ_¸¬×1~üä)fôêÞY×Ù˜þã<.^§Fµ*w-Æèo&!—Ëiܰvù#m[7ç›ï~@"‘°ì—¹ìع‡1ã¿gäWÃ(_·vîC÷cÅê zvëDù²>”õñâÖíh¼½Jaei�K1g‚÷¢NíXZX°dÙ*Žž8�T*eÜè/©P�ôüÆÃ¾‡ùeé ,ÌÍ9qø/š5mÄî&66ž�³xÙ*zvïÈÀ~½èÔ¡ æZ�ÊÃÃ�•k6лGg~úq MZuÖ'\]‹!‰8~2D;s6ŒæÍâî¦͉¾ýûZkƒËW#pvt,\ˆ[½z™ß—í×h4Ìž·ˆmWé¼Ú´l†H$âûi³¸wÿ!¥JºëýE–¯yy|þÕXÒÓ3ðp+N­€êÈårî?xȪµølP_4 ¿oߥg!Vé+æ„Q„œM[·yŒ‹³ñoÐq0”É8FÛГˆÅ°hÉoD^»þÎùÏ¥˜7oE¿V„ˆKH ú®VKNN¡z5N�>û�”3R©oïR,X¼<¤4™ï&Ï(²|033%=ãÕ>fJyºŸ 0®FFqµˆ÷h``€\nHZúû÷Yóº0Ô¨Ášu‘Hñ¯\é¥@ŒLLŒ�)V̉[·£öåXJ”pÕ;®¨ü+‹ñ¯\‘á#Ç£R©8zµF���„Õ«°ì·5äææÏ•ðªøUÒ¥£óïÅKW¨\©GŽ�¤R¥ \ºr�晀»õ÷?ÉÉÉE¥R!“IQ«UɹI›–MµS_*”çjDT¡ivjµZg­áììÈgûrìø)’’’uÇX[[QÆÇ‹�ùúO©[¾ÏΨ··DÊŽJ¼Y Ý5>N‡„ê„÷ø„D9N\|"5«Wщ#DDFñÍwS‹ÅÔ­€‹‹³¶>hÕ ¥RÉèo&£PdáîV‚õêФQ=ŒŒäü²l»ƒpâäöîÚBÛÖÍ9wáç/\fƬŸiP¯óšÎÆ-ÛY¾b 2™”];bme©g­:uæ\,--iÜ0�ò~µññ*…�W)¶ÿ¹['TÔ¨JÛÖÍ™¿h¹®Ìë;ðs]^)(ƒââã_9¨ñ<3fÍçäé3¤¦¥1âË¡¸¸8S¿n-–­XCBbÊ—¡iãØÛÛéYVò­ÀÅKWtÛwîfî¬t¢Ê‡¬Ë.‡GP¡|Yœ�±¶¶ârx�Öàö�hîÝH�jÚŽjÕ*~$$&q52Š[w¢100 qÃ@¾ó•n`rmÐf~YºgmxqzüÓØ8Š»+2<-›7 sçŽ:w E ¾FÆÄÇÅãé™CÃF�‹<&>>[›"÷ÙÚÙ÷,\¿oÙŒƒ£< 11±Haê­{ "UªVå|X(ÉÉɘ˜˜°o0ýÂØÄ„Ð³g9qüÍ[¶B"‘�–šFç®]Q«Õ,üy5kÕÒù�255¥’_e}qÒÞžº�õ¸yãú[299;Ó§_–/]BÇN�1{n@4ôÌììhÙº *•ŠÕ+Wàîá�µõûwá"•É�H$Ä>}‚…—7½úö-ò8±HLÅ|�ÑËLJ¨¨k¨Õjn\¿ÁW#G"‘H([®¼®Ÿq•о•tÏUɯ2¡gÏRµZµ÷nßJ•‹Å¸/Ž‘‘œ¼Ü\$o9­666–Ç¢ÈÌÄ)?�|6¸“¥P 3Ô/ dR™™Ÿ�Ï·™b¾_…H™‡F$B#3$£R-â;h§‘©e† ‘Q®"��ÁËGSê¶"¥îËGOÕrcûA¿óáWçY#Ï·ð(ÀÓ~ã^úÿÞ·K_Þ`¬T‹ŒJµ wvªÔ#½J½"ωž¹Q?A•®ølÊžÀ‡š ¶ˆK…&ˆE £pö5ÖçŽþë>š¥ÿè5 ˆMjµ¥RINNyyyäåå¡ÑhP«ÕääääwFdºmyyyH$]X 0iÞÑR/%5Uט¼¥9·{®Q äå呚šNnnžÞ¼};쉺~“jUü066ÒM�Òh4:?LÅ‹»’œ’Êù —Q«Õ”+ëM/V¬^Ϸߌ¤E3mƒ&4ì‚Îß΄q#˜0î™`íê⬠cÁ¨Ô´4=~¢3C/°²X·a+ûõÂÇ«4Iùfð“˜Åí;ÑÈå† ؇â®Åô:Œææ$$&ëÅQbb2ù"UÁT �ºè8W&ç¼²ñ©L~¹¥çÍ[wؾsŸ ì«7¦X1'rrrt�âˆÈ믙22¤ç7êSòÍ‹ ,ƒ6ncð€ÞˆÅbÖnxý4¦ ›~§cûVüô㇠åÊ0°_OÆ|3™ŒÌL""£¬€ƒƒ'NŸ¡ÿÓX:´kENn.—ïêÖöø/]ÁÀÀ ss2 ªúWÀË«¤®ó^ÌÙ‰s.ciaÁða9ñ2{÷Ö‰)©©<ÍoxI ´e¥Qþt€Ì¦¦¦¥ac­oñimeIjjææo$æe_‰Ç4Ðå•û_Å/KVЬIêÔz&"%%%chhˆ³“#�Ÿ<Å«tÉwNƒýútÓ œûödâ”™/=VkE'fþ¢åH¥RëÔ¤W�Î…¬p®]¿‰K1g<ÜKèu,jT«Â þ½ô±?/¸^¸x…kQ7ðpw{g‘éÒå«L7‚¹ó—èu’ºvn�™™)GŽ�¢qƒ@:víGÌ=­ÿŒR%=X·j ?LŸó�äû´´t 02’ë¦1™šš�™©MW#®é96©ii:ë¼ÌÌLuÂâ®Ýû;‰)Çq5"ê�Eèw C�Z5°±±aÊÄqùb´=öv¶ÄÅ'|�øµ²²ä䩳ì>€“£Cõ¥²¯ÖzíÅ4Wèݤg`$—#“Iu"`“Fõ9}&”ŒŒ ~š·XgAdgk¯Í¢| IDATƒòÎݘûØÚØàà`‡K1gnÞº£'2 Л={púL�†YÓµ-J¥’¨ë7ð«\‘Ò¥J²|EÑi¡KǶ¸»•`Ò?êVšz>¯V¯êÏ�Ÿˆ/¦ÿWž·â6¤?f¦f4hªõ›r`Ïïot�䔼½JéÊ“’žnº}±qZ‹o/¢ïÞ£X1',Ì͉}O+¼´||žYÅ”-ãMrrŠ® ~y>Ѷ5€™©©®-ceõf>c““ÉËËÿfCÔj5FFrŒ�Œ ùdJMÕÖLML‹Äº:ÿC×å—¯D`iaA‹f�‰ˆ¼^h:÷¡#'з'}zuÅÊÒ‚#ÇO0{Æ÷”*éÁ ¡_Ÿ�È�CG)ãSš}{bnnFÈ™0zuïLßÞÝ3þ{ÜJ¸òóœiº•QCò§ž'''ĨQ#Þ(^ Úš�»vE©TréâEöí fÐ�ÏôŽ+íí͆ õ$$$ò×tâÄq*U~fT½f"‘ˆ¶íÛ3ù»oÙ¿o¯ž¿¦¿Czzædaõû¼e¿è+Í?ì:Å@*¥Nõê”,Uêƒß+;;;{{úôëO–BÁ¡ƒ8B“¦Íôs`BŽ‘±199¹äååé„âгg©P¡Æ&ÆøV®¤�²³²ÈxÁJ'//�y?ÍáóáÃ17·@©T꽇çã=!!^Oøú;ÂcèÙ³Êð­¤MwÅ\\HNJF­VëÝßÊÊšKŸ ¶%&&bie‰H$"77—ZuêP¯AÝ5-‹(�ž<~Dô�;ïÞƒJ¥B­V3oΆý5ÙÙ9dge!72Òº>IIÅÒòã[]NŒ€À§¦)!Ò/=¯3=³`ë LHÀÀ…£É~uÉu*þ¯=ÂÓW8Ëþ×P(Èd2¤R)J¥R'$éÍΛ^ü<_X_`é$•JÉÈx·)1Ó¦|ËÀ~½hß®%÷î=àê8�, '7—K—ÃéÜ¡-ÇNœæØ‰ÓìØ¶Ž]:ðó¢eŒüò3¦M™À÷Sgë,Ά] ¤§É)©<~ü”¨ë7)ééÎ¥Káäææq:$…"‹¯>DÓÆ Xôó�Þ·]¯³Ö´q† ìˬé“‹Åüµ{iééÔ­À„q#ñåPæÌœ‚F£áÀÁ£<|ŒÜÜÖU~II¬X¤÷ÎÑZ„Múv _  '@½ žnôéÙ•“§Ï°k÷>Ú´jFeß ¯lxŽý%•+UD¥R‘ž‘©çðP×éINá·Uë™7{åËú •J©P® ãFɆM¯î8¥¦¦abòîÓV�Ÿ !æÞ}fϘL±bNÈårš7mHÇv­Ø²uÕ«ú‘––®˜nÝŽ&--]çßâC£R©¿IãZK\ss3&ŒñÎ+€Ýº�¥…9Þ^Ú†kIOw¾7BÏÊ0;;›-Ûv0 _Ï¿í ãm “I©^ÍŸï§ÍbòTígwð~jTG"‘è¬��uÂÍßõÙTÕ¿2û÷ÄÒ‚´´tÔùÓÑÞøÝD\£Us­ß»*~•hѬYYÙ\¸x…íZ!“I±·³eüØzÓ™ŠÊ//]¡_ïî„G\+Ô¡111&11 �Fƒ_åŠØÙÙè¬R/‡GÒ®M nܼ­gUU€…¹9uë°ô×Õ(Y``` +'ÜÝŠ“——ûÁ„¼…2Yû¬Rû·õ-8§àŸv¶6˜››Ñ´q¦N¯í”¼Áòñ¡ç100`ÖôÉ Ü�F žYø4 ÃG~ı#èÖ¹=Occù滩º•w†Íȯ†Ò¦u3.‡_eJV,jµšEKVлgºtlK\\<‹–®(4 ù:â—G`Ñ´8òŠvX¢LÎ!ûJük¦ÖoØB§­qvÒvÄ=Á²ßÖÐ¥c[ì ÞwˆÖ-›¾uZýî›QÚ•h–¯&%%•V-š0qÂ(:uPä3j4V¯ÝD—Žmدqñ‰:/²rMYYYL›ò-ÎNÄÆ%°yëvÖoÜúÊ0Ý¿ÿ�õê°ýÏÝïœGŽ™ÈWǰú×EX˜›sï>£ÆMâjdÓ¾Ÿ %~žcÇOÓ¬qCΆj§&?øšçl~§Îø‰�í}oeÍêuéÓ³+3§ND¥V±cç?~ªsJÿ6äåå±pñotïÚcc2 ~Yº²Ð4©‹—éY£ -›7f×î}ºÕå$ Ç�Ö­.÷*ž_]®˜³Û·f¤i/ C/?‰ÕYUä×q£¿ää©3 Ü�ÉSg1väpFŽ�H¯]ØùW°žƒì·å؉Ӕ.åÉŒ©ß’—§äü…Ëœ =�ëKü“¼ÈÚõ›éÛ»+ æÎ 5-�¥ËW¡R©Ø¶}=»ubÎÌ)(•*‚÷,4UôEÎ_¼LãFõøkÏþBû6oÝÁà�}ÈÊÊæÒ•«;qš~½»1uæ\®^½F¿ÞݸxéÊK:+Å04”1oÎT½í‹ÿÆ¥+Wñö*Íí;w?¹&D^LVrä>ÖäÅ=z«så>Öºk|ŠÌ[°„Iߎ¡ß¬ ÚBÙ²ÞÔ®Uãµ¢ðšõ›°··%°Nn%Þw�¶ùοŸ<�eèð1Œøj(£¿þœØ¸8¦L›Íñ“!ïÍ¿Z­føÈo?ækè�B‘ź [Y´ø·WŠCÍ7`Pÿ^ü¹k‹—­¤¸« �ÕãÄÉ3„†]Àßïõ¾SOœ:ÃÌ9óéÕ½3Í›6ârøUfä/hñ<±±ñ¬ ÚÂÐÁý066âÖí;¬}‡U.ßµ.×h4\ �¤N­\~Îöó>z‚žÝ:q:$Tþõ·¢ÑhèØ¾5=»u"#3“°sY¸øW�Ö¨q“دM×§]›$Ä'²vý&R“¨P¡¬nŠÀï[õëߊ¾•Š\•M$Ñ¢UKŽ>Äž¿þÂÒÊ’–­ÛîŽ�;ãèèÈÖÍ›xøð!¦&&TªìÇÈÑcô:žÇÝÃFMšòë²¥Lü~Ê; |lÙ¸D"ìíhס ]9¹ióü±mR™ ™LFó-þ¶0túÔIVþö+R©”æ-[²ÚzSü«VeÿÞ`Ö¯YƒZ£ÆÛ§ †††\ ¿Bll,•*ûü×_ôêÛ— µk9fÌ;‡ÛÑɉò*²)h=jµ'ggZ¶jõÆç7kÞœà={˜?÷'LÍÌhס#‰/o’“X·f5yyy”*]šê5k:¿U›¶ìÛÌ™�iÙº5åÊ•ãÁýû,Y´µZM©Ò¥ß[êåíMrr2¿oÝBvVÅ\\iÕ¶M‘é»c—®ìݳ›,…7wwÝ3”öò"úÎm–þ²3ssë7ÐùuŠŠŠ*´º\Q4mÖœ];w²xᬬ¬iݶíÇÙe—ŸHf¶ |"hžû*ø­Ñ~ÔjШA¥•M^( >¹ºßšÜA=3:ý½Q�/Ÿ<àhfú›ep‘ˆÜÜÜ\�éÛ»¾+`dd„H$"//O;‘��R©D*•"•J‘Éd •jçK8ãKIIáÂÅKmÜÆÝû��aaò*¶m\¥·„ðßað€Þ|1t ›¶lgÇ®=ÄÜ{@q×bÖ x«i@EÓ¸a Õªø¼ÿ÷ï?döŒï)WÖ›ZõZ�óÂ\p�OC™Œù?MgÌøï MEø/#/k�M/oTI9<�}áí:Ucý�X’¸þ:Ù‘IB"ø¤¨X›sg0îÛÞwð­Ï—HÄ ì׃-›ãàà@\\vvvïÍï‘€€À Á’Iàây3¦‚ßÏ[3‰A¤u.KЈUZçß­%Ö€iPó‘“}›þÑ'8š™Îù,þFï6]ç|–â�&ÐŽnÉd†%éÓ»ÕkTÇÐÐPˆ�AdøP„ÐÄËĦ|ŸMb±mÿ9Ê•)Eï^Ý©Q³2™Lˆ�Adø�ð‚Фû!zn[�Ø”?]N$¢M@@@@@@@@à?AÅòÞôíÛ‹ªU«`` tóþ¥ž¹µMeMv–Jˆ �ÿšB¿5Mû5xúX Ñõð-ã&D‚€€€Àÿ—¯Å‘ ÔÁÿöŽT«Q›’%K! >Gþß(íåþQ…G™þƒ"“€€€€€€€€À›€~tëÚ™Ê~•‘HqI@@àã@°£øD¨P…=»Q¡BÄ‚ŸQ�� AdøÈiÖ$�ŽÛS¶lYD‚oQ��AdøHiѬ>íÛ·Ä%�OAdøÈhÕ¢!�:uÀËËKˆ �OAdøHèÚ©5­Û´ÂÓÓSˆ �OAdø—©gbFcSs*É�q”j³äÓ<%—²ÈHãhfºIyYkŒËÙ"u3ÅÀJ€29›¼˜  dG& ‘$ð�!ˆKÿDÖ6•5ÙY*!&>Œ%b&{»ÒÁÉ'¹ì­ÎÕj�†GY9üñ$‰é7�¥V£Ñh^8Jûíécý¯=gC9clñ72~åqç³ÌIxʵœl!q¼d.¦X´pCænþÊãr撚º'†Ü‡B¤ |0ºvjMÇNpuu"C@@à“G™>*Œ%bÔ,C% “w:¿@dRk4¨4.¥fÐêìu*Õ Gi¿ÿ-‘©ž‰?;¹ áÍœ7ªÐ0âÉCÁªI@@@@@ào"/k�M/omýš”CfèS²£’È‹Ë@jo„ÜÇ“jŽH¬ H\]°jxïôíÕ™víÛâèè(D†€€ÀAdø¨˜U¶_¸¿{Eû¢È¤FÃÒ˜§L¼vÿ…£´ßÿ†ÈTÆPÎFW÷7˜ P¡¡ûƒ»ooÑ$�FƒO™ŠøW @‘‘¢B÷=‹��D@¤A£VcljÎ…°®]»¬»æ«°·³åÇé“ð­PŽ.=rëvô{�Gºui�e_J—ò$>!‘¨¨›¬\»�¸¸ø÷r�:µj°xÁl¾›<ƒ�»÷êís+Qœ¿¶o(tÎí;Ñ´ë܇Ú5ùÕgØÚÚr&Œ)Óç Pd}°teÑ´8òŠvX¢LÎ!ûJ<©ûîylȱ½˜˜Óµç@¢nÜ`Ú÷hÓªí:÷æö�»¯¼WèÉ\¼ÎÐá£ßKØ=ÜKг['~˜ñÓ[�×¾mKºunO‰â®$&%±í��¬Z»W—bïÜŒ*_`‰D¤¤¤²ÿÐQ~œ³µZͶ�«Xòë*J—,ÉÐÁ}‹Åh4�õã„IÓ)WVÛ�=w†2_ H½ºµ±·³%æÞ}~Yº‚§Îè…/xçfŒ��¨ß¤jµ##9a§R£nS222…Bÿ?Ä»¦ã·ï”v£v­êŒ7‰ä”TÝvss3æÍžFÈÙ0V­Ùð·ïcgkCßÞÝ)QÜ…ôô ¶mßÅÅKWøê‹ÁT¬PNïXµJÍÀ¡_ïIæbŠÝÈ<KÊw^y¼eOLª8ÿKø[[4iÔjÊ:ÜÆÜH‰RUСÑh‹D¨ÔÒJâ“UˆD`k)ÁÌĉH„Z£Ñ­$¦¤) ¢â<‰ÅïôüÕ«ùóÛ’Ÿõ¶}óÝTöì=@qW&7†2Þ^\¿q‹)ÓçsO[�t騖~½»cd$çБãÌœ³¥RùÖuòù3‡1”Étuå‹aZ³~sç/yå3Ô­]“!ƒúâéîFvv6á×XðËr½º«A½:ôëÝ OOw“9zŽù —‘©P°yýo”-ãMy¿ÚÿXÚ{¾ž6È‚zŽ•êÛ¡Ðqwnßæ‡É“hب1½újë§ß·nå¯�0rÌ*úVzåýöîÙͱ#GHLLÄÜÜœŠ•*Ñ©sŒM´¹jµš=íâì™3ÄÇÅáàèH@íÚ4iÚ ‘HDNNƒû÷ûLÆûÝ+ïu&$„,…‚ú ¾q|(•Jvýù'Ο#!!gggjÕ©Cý ué~â„ñ´ëБÊ~~äää0{æ \\]éÛ€°ÒÞGÈœäëQ£�J¥ÿÈýîÅİß^6ô½^7æ®¶™>*:8½ѧ�ƒÕ "Ó¿Ë[Ç·˜$ˆcëH¿G1o§1F&¦¸{”ÁÜÂC¹1"‘˜Âõò3‘I“/Aiò;܆†rJ¸{uý*hÔh^s߀šÕ¨âW‰Uk6ðäIì{�CggGæÌœÂýûÙ°éw®]¿�£ƒ=�²mÃJ~˜ñ‡�žø ï1%%•%ËWéþ›™™Ò³['îÆ<ÀÑÁžE?ÏäÊÕHþ >ÀçC"Æ};僄ÅnH9½)V†˜º +aNüòˆ"ϋŌõ%ýëûý¶j=Ož¾¿wúøI,ë7n{«szõèLû6-™4e&7nݦt©’LŸò- E›·íÐ6Fssñ¯Ñ@wN‰â.lÝ°Š«×økÏ~Ýöå+Ö°|Å�ØvÿÁC~]¹N·¿@dzÖ€šB^ž’ϾE|B"µjVcæÔ‰ øì+®ç‹veËx#“ÊÈÉÎ¥ŠŸ/¡ç. üœwIÇïJnn~•}9tä¸n›_¥Šäåå½·{|5|gCÏ3Ñ2|+”cÈÀÞŒŸ8�%ËW#~®©]«NNŸÌ{²háöÆ ;ƤŠ-Ü^Z¦¾ +ãJ8€"[‚<_`‹EˆETj 9¹4pë~."Üœ ‘ËÄJEHÄ"ÔjµРA„»™†'i)¤æ¾[{Éýñ ‰lûc§nÛÍ[·‰D,^0 #¹K~]E�.ùméÏ4iÙ‰jUüønü(N…„r'ú.Ý:w@­Ñ0ýÇyï\'{¸»ajbBFf&Ê•yãð—ôô`ÁÜįųyÛìmiÔ >^¥iѶ+9¹¹tëÜž ãFÏ�ƒG)æìD×Níð¯ìKçÞk>y×zZiS/ñøJ2S+|éywîÜÖý޾sç�ïwôða6oÜHÉR¥¨R­:w££9rèéii|ñ•V^²h!çÂÂ(áæF�€nݼɦ  ž<~L¿ßêùÊ–+‹RùæF �†9³~ÄPfÈÐÏ¿ÀÞÁ�{11¬_»†÷ïÓ·ÿ€BçäååñóO?áàèøQ LY óž÷Z!îÿ…Î]»b`ðiK ‰‰‰>t�Ê~þ:‘)!!�S'ŽÓ½WoLMM Þ½›cG�мe«Bi{ǿӠQc<<=Ù¹cçèÀ•Ë—¸uë& F¥R±!h=¸{xè]ãÊåË$Æ'0dØçdgg±iÜ��ñö)Ãöm[©@…оœ cçö:!ú?'2™š£T*ÉÎÎr–Àßâm}0½ ŽàšïJ=³×ú`zþFÆÔ31{ãis"‘v´´Fõ@¼½¼HKMF,#Ò¨@�ÎZIó\=-Ò€H£A#qþ>‘r³r)U²$áNÅyôèÕ–.†††ØÛÙu�œÜ\¶m\…‰‰1GŽ�¤mëæÜðˆ™³~æjd_€¾=Ùþçnš4®OBBsç/¦mëæT«êÇ­[ÑŒ7‘¸ø¤R)‹çÏfwðV® ÒÝóvÆ]nß¹KhØýü#Q7n²xþ,,,,¨ß¤-µj°dál6mÝÎŒY?3wÖ4¬_—€À渹güد)åéA̽ûü0ã'""£t×®P¾ úõÀÜÜŒ?vìæ—¥+HIMe鯫uÇÌøá;RÓÒ˜1k­[6E"‘0cÖÏܸy¯R4¨W©TZ¨q[¬˜}zvÅÙÉ‘§±q¬ß°…{÷R?°6®.Å(îZ [[îDǰ~ãV’“Sô;LM‹¿Ô§ˆÌÝ‹¦Å‹´hR«ÕøûùR?°6GŽ�,´¿[çö Ô‡¸øD"#£èؾ5ÍÛtåÁÃG êß‹‹—ÃÙ³÷«~]H©’mÜF÷.ÈÍËcæìù9v’¥‹~¢VÍjô<œää¶oYËõ·èªl”( IDATÖ{°Î²ÀÁÁŽ^ݵ ¥JzЫ{gìlmxò4–«ƒxüä©þ3››3lpº÷Âݘ{DDF1{îBÚµi¡™^äÞý‡œ»p 'ÇwïW¯æ�Wé’´hÛM7Šøè JzºS½ª¿NdjÞ¤!»÷îG„ˆ¦M~‘iÆÚ­••% E999\‹ºAЦmX[[ѧgWìílQ«Õü¹+˜s.Q«f5ºué MG"HMMgmÐæ×Zÿy{•¢K§vÈ ÉT(X³n=f@ßž”-ã�B¡@$qÿÁ#Ö¬ÛHNn.Ý»v \숋KàNt +V¯gÄðϰ³³ÅÄıXLzzYYYL�9—êÕüiÝ¢©Þ3M˜4í•a�J¥Lš0š[w¢Y´åƒ–ãb±˜žÝ;á_É€#ÇOòç®`½tüªükblLßÞÝðö*ERR2·üÁ�›·‘J¥tí܎ʾHMKçÀÁ£„œ +2 áW#ñ÷{Adª\‘𫑺ÿ¶6ÖôéÕ·ÅQ«Õ9z’�»÷2kúd/[Éý˜0ök‚÷âò•½�C"‘°dù*vþ¥µ0¾}'†zupt´'-=ƒ¯†áá£Çté9�´´t½köêÞIgñúÆm/?_:´m…‰±17oßfÍúÍddd¾q=mÓÂý¥õtdJ AÑèéѸÐ>kkkîß»Gnn.R©”èè;X[[“”¤M3§OãFT —,ÁÜÜ‚#‡±võ*F�ǵHm~úÅplmµí±Å �™©µäº~…saaT©Z•Ï¿ü ‘H„J¥bîìÙ?z”:uqy ÿPQ×¢ÈÌÈ ~Æ<|ð€ýûö’’œ‚�­ -[·Ñ…¡€3§O“š’Âôg!‘H(Uº4cÆ}ÃØÑ£¬W_Ï‚D¥RñË‚XX˜3pð�w˜~œ>�ÑãÆéD�ysæ0ôóÏ12~uÛüÒÅ‹ˆÅ¢"­ÇŒŒ�5fì¿V®]‹Œ ôìYD"Z´n�••տ屢 9u’œœ\Š—(A›ví�J¥ü¾u+_ŽAjj*{wïÆÂÒ‚»ÑÑXY[S7°%ÜÜÈÎÊ"xÏîÅÜÅÜ‚ÆMšâZ¼8çÏ�ã|X(^Þ>Ö¯ÿÆï;äÔ)”J%uµé,$„¼Ü\ê²`Þ\jÔâ\èYÄ U«UÇÏß¿Ð5Ο;ÇåKIKMÓÛžœ”D¹òti¹LÙ2\<¡p[3&C¹/oíe�š5Ùý×.jpóÆM*úVÒ¥· *qwÎ……q5ü ý"3#ƒÊþ~Èårär9žž$'%GNN*ú"‰¨ìçÇ©'HMMÁÂÂò£ªoÅïz¢Tj@ÇŽ�X¶l"¿þ:™U«¦òÓO£ ¬òFçwéÒ”K—¶ò?öÎ;¾¦ó�ãï{oÆÍÍž"ƒ��I$±cï½Wˆ­”¢UJiíU›*ªUÔÞjï=c‹D„ Cdï=?®\n#JÚž÷ëå…{ÎyÎsžóÌÏóý~Ï͛۸ys—.mà§Ÿ&beUº�™6mê3{vÉ;ñ}ú´á›o>=eOà¿K £¿5 ¥R‰™™Uªx &S} õ¥êK11ÖÇP_}LŒô1Зbh ÅØXC= ô02ÖÇÐ@c¦Æ†èj)ñóë‹MYÛ7‹i ë1r¸jlѼ™xVuT.Ln®lܼÇ ,[L!óP-²bK}mÑ5Ei¼ Æ:)Hµ HH)$>9Ÿè„<"bóˆK)@,QÑVŠkE)R]1Y9 rò”HuŸV”RÑVŠDñ)„Çä��G\r> )…èi`¤ýz¡kæí=éÛ»;e­Ë°rõZâã¨àPŽõê²iÝ*~ÿm[~_�žžkëãVLѸ¥ú»¬uuÿUäf/WÈ‘Éô077-Õ˜\Dzz:OžFPí…ÛeU7 �ôÄ)•xZ·NMjV÷V ºg.ðìE¾F İ!ð­S“]{öÓgÀçDD>£š§ú2;wïS Lë6lE¡PP·N­R½w+K úû÷â—ß60fü÷dddѧW··¶sScCÆŽŽMãÊo¼Ç…øÀwªT ¹\NøÓ§ÄÆÄ�“��S¥J/Ç£š5Q*•ß z!ô#ÕÓÃÕÍ KÕûüyÅO?v”‡¡¡ >‚ñ'ªD¦»ª{¶i×^½€—H$´nÛ¥RIнÀ÷ngG¢VíÚ|5v,vöö\¾X|#+(èõ4PÏwŠ042ÂËÛ[-’ L«W® ;;‹¡ÃG ‹?xßþô);¶mcßÞ=ü¾n-{víRo Þ ¼Ë…sg¹r鿯[Ëé“'Õ×�;s†ß×­eñ‚é­ùe5Gbãúõ\¾x‘u¿­!æ¹jS$%%…í[·²mË6oØ@T¤æFàñcGÙ³k×;å;//� çÏã×» ¦²‹ W.]üè}ivV'�§W¾=šœìl‚ƒî;ïYô3ÊÚØ2zÌ×8::qᜪm;zccF�ùšÚuê°{ç OŸ<áÆµúôíÇÀ!Ÿñ<:šë×®}°|G?{Æð‘£h×¾'�W‡TЕkÔ`ÈÐa8:i~á±RåÊ4i֌ܜ"#"¸}ó®îîÅ®OKKÅÜÜü¥ÈlnNÚ ×vÅŸ>F%‹ÕÇ\]]ÕVQõ6ÄÕÍ�ôô4=|HDx8N•+#—Ë5¯©,cÓ^q�ÿG‹L::ÚLž<Œ.]š¡¯¯Ç©S\½ˆ��C‡vcèÐnï”Î… ·ðñé…�O/zõú]]ÆŽí_¢ %ðßeab-#Q%ì>�¹9ï|ìSÄK*ûÛÓðô¬FVF1щ<¸ÿ˜ø¸$ââ’ ¾ÿˆ¸˜RS³ }ð„”¤4âc ¹ÿˆ¸¸$Rxú˜„¸d"#žø€'O"HLHBþ‹è£ÇO1gž*¾ÂÀ¡£¸qóŽÆÂxõšõìþã–æêÅÀì³pÉ Â?%77—qßNaúlÕÀmùbç S‡6üºv‰„ŸZÄÍ[wiÝ¡'±qñ˜™šõ,šk×oâæR™€kª†*»:ó(ì .Ε051ÆÎÖ†«×nÒ ~LŒ�Ù±kgÎ_bçî}”µ.C=ßÚÏóÓª5ŒŸ8…BAëVÍ5ž÷Ë‘C‰ŽŽQ諭üUÖ�¹yyªß 4ý¶íím‰Dœ»p…BÁå«×ÈËϧ‚ƒj7çÉÓp""ŸQPPÀ�{AÈôôŠ•µ–©îßÅëŽ+•Jæ/^Ž�­�ZÀ+¢c;U<†i³æ±äÇU\ºðÆ{ðÅ—ãY°x9ׯßÂÂÜ ©TJdÔ3Öþ¾™šÕ½iÕ¢ »÷а+‰ŒÌLlmË¢§'eëŽ=nkEØÙ”%!1é­u_WG‡WNqãÊ)n]=Ͷ�¿²eÛn‚ï?xïögg[–„„¤·Šñ‰‰!Q-`Ü aÁ’ŸŠ×5--¤R]Ò3>üW¸Þ–‡ú¾u¸~ã6ÁÁ¨îíõQË733 }™ [Û²$%§0bôxââŠ[‚•Ô~Åb1Õ½=ùãÀär9W®³iëN´´$Ô©]ƒ#ÇN’Ÿ_@||wƒ¨áãõÚö{ëö]¼½T±…¼¼ªrûî=”Ê—îŽ]°eûn åèèh£PÈÑÓ“r70Ï*ª~·ZÕ*Ü )fa©P(HMSMZml¬ùvÜ—œ=w‘ääõ9ff¦¸¹:sñrÀ?f>¡í` ê“CJÀ»èš¢4Þ…ò–éÄ&å“‘-G"©®CmÊškc(“�_¨@HuDéka(“ /S¹³ÈȤb,Mµ07ÑF¦«²hÊÊ•“˜R€ƒÅë-š ™ýÃb øjÔç„=~¢ ãâØwà0�šwdͺ�¸ºT¦{׎/Ç­ÜâãÖÕ€ˆÅbþ0�oÆŒ¤A½º*ÁMOVª1ùUîQµŠ;66Ö˜™™r'ð¥¨öø ‘Ϩó¢ß¬YÇĤdî‡pñÒUæÌ[BVV6_|>ˆŸZĹ“ûY¶h2™v66Å\ºsssIKÏ œ½méæ\Õªrëö]ž†G —ËÙ³ï >Þžja¦¤vnjlȤ _²k×fzôèNrá›­ÏòRKüÝÈȘ2eÊð8ì�ÃÂГÉ(kó2ÿ>Õk ‰ º‡R©$$$OOO´´´èÔ¥ ­Z·!)1‘Í60{Æt¾6T-^$$Ä«Àæ÷433QOÞß%^¦'#!>�ü¼<š5oA‡N�‹�“”˜ˆ™yÉ‚­……%ñññêÿïÚ¾�ÜÜ<¢¢¢HJJú(}ƒX,&*2’¦ÍšÓà µÐU¥ª'.nnÔñõ¥ÿÀAq§6nLÿ�ƒŠ _éiéÔoЩžÆ&ÆTóòV»;9x�†�Ñ«woÚwêÈ¡û5®µµµ¥¼ƒÃ;å[WW—aÃG ÕÓC.—“œœ¤~‡µ/ÕÑA"‘ƒD"¡ï€Tóò.^®"1žÕTV7ή®äæå¢P(}J½ú*‘ÑÝ£ -ZµB.—tÏj^¡««‹—�w‰âÕûRÍË ±XŒ}¹rèéI)È/½V\\'O'))‘²/ú›WÉÉÉEW÷åÜ[GW¹BN^^ ¼{‡ÌŒ RRR¸{ç6¹/bíû@èƒPN;оL#CC¬Ê”A"‘p÷Îmòóó¹@Nn.99ŸÞø½Ô›>}Úâä¤ZåçðÛo{°µ-CíÚªÉN£F5 yÂ… ïîÇþýg#ä~0ûöîaØðÇ¥R]ò_¯òóò‹ÄèèèP½F ²23Ù´áwôd2œ�]xýÚ{Õ¨Y“5krôÈaΟ;K«6méÖ£'§NœàòÅ‹TrvÆÒÒ™LöÉ�·¥¶d’ɤ4n\C£’èèh.|[¶ô-UºeËZÒ®]žm)_¾¬ ý xKeXki—ú˜€Êô955‘èg÷¨Z¥çOï Š»-Çö`ï®u4oêM«Öµ¹pö^Õ2°#'Ží¥g�fxVµãÒ…S4¨ïŽ_�f\<Ž~þ­ÑÒΧ°°à½:gccµ@ãê¬ÚÕŒ�‹w‘*%�üüÊZ—A*ÕÅÌÔë2VÔó­�_�.„ÿl+8¨cÂ} LMM¸pñ*¾›ÎœyK¨\É ïjUK¬sÅÞMF&zR©F]hÙ¼ úú2233Y¸x“§Ïeòô¹ü¸âΞ¿ôÚ|< �ÄÂÜœ2e,±³µáá#ÍCC÷ã̹‹|ûý ~\ñ‹Ú’­°°��¡øx{R¹’�A÷KL¿g·NTõpcÊŒŠ Lb±˜Ú5«s5à†0о�ªŽÚtn)#7_ÁÓ˜<òò ÉÉ)äÀù œË P® 1µ€ðçùȹœÍÉ€Lö]H¥‚°È|î?É%7OÁîSéì>“Ξ³ØZŠÑ}Kwâ[§&.ΕP(ô÷¶6&ÆÆLž8–Ö-›jlò¤¦¥©Ç5»WÆ­¢1ÚÆÆš‹—hÞº �{ô#;+›¸¸ž={^ª1ùUîÜ ÂÄØ˜¶­[ü X¿}ò´J êß·¦&Æœ~!‚õíÓƒý»7Ñ ^2³²¸~KíªlldÈ�»AdgçнkG ôÑÖÖfú” l^ÿ3—Jiy—––ŽÙ+ñm ôõ‹Äê~S©TbokÍÔÉßЮm ,-Í4&€úVUßx�7¯T©2�>äqX˜†«\ÕkÔ 55•“'Ž#‘Hðôô`ÕOË™4aº: ²s²ßûóɳ¦Ç��}éÒ¹QÜ{ͧ$òòó¹}'�];qöü%Ξ¿ÄÞ�èÓ³+K–ÿÌ×£?gÖôIL›9_mpõÚMœ+’’šÆó籄£U‹¦,_ò§ŽîѰhÕ¢)Æ `Þ쩈Åb<úr÷ÅÕ™¼ü|�O'Ÿ<}¹\ÎÔïÇ3fôpš5iÈñ“gŠM¢£¢¢‰í…ü IDATDÔó­�H$¢VMôô¤„GD½ûøh$ùOÓK<–ÿ4½Ä ß¯’”œÌšµ›4úë¢Éý”ï¾aäðÁTip¬è@ÿ^\¸t…ý�Ò±}ëã¯N &Œ�·—'r¹œŒÌ,t´‹îOIIå×µY<UÜ]ÑÖÖ¦ª‡Æ�fóÖ]o]0èë¿ÿŽÏ¹ — �ˆdþœ©ØÚ–E*•Ò¦U3ºunÏö{©]Ó‡ôô õg¿…=!==ߺµþ–~F.—x/X-€2iü˜÷þØ£°'˜áâ¬Zà89Và» c4¬ sssÙ¾s/ƒú”x¯ËƒŽŽ6µkUgÚ¬yL�©úsðð1êùÖF"‘¨Emkõ¢ú¯Š}5«{3d�?&ÆÆ¤§g �Ëß9M¹\N`Ð}Ú·i‰X,¦†�m[7'''—›·îÒµs{tt´±²´`âø1oËŠ\æöëM`Ðýb‹"}}IIÉ(•J|¼=±´|9»LçŽm }¦aUU„±‘ ø²ê—udgç ¥¥…–––ºŸ¨àPŽ‚‚|âÿQcpaŠêYµ­J¿ +º¦(�wÁH_Ì�Û9>]]ttuK|ϯú�œ¸|ñ"J¥’!÷¹ré":ºº¸¸ºråòe232ÈÍÉá�½{ )VŒ�Œ¸üÂõ.„2eTó]]ÂßRPP@zza�}°ñÃÄÄ„ë×®‘��@^^W¯boo_lÎS®|y²23‰G©TrýZ/¬Ó"ÂÃÙ¶y3¹¹¹¤§§qûæ ¼¼}ÈÌÈP»©êÉd\½|‰ÌŒ ÒÓÓ¸{ûåÊ«6V·m݃Õ˜på vöåŠY�} ”Úw§ „®ŽŽv± ÖŸS•ÄÅ‹·=ú‡×��W©€ææ&ÄÆj*‘ÏŸ'¨ƒ„ÇÄ$hÜ766ss“? c6ož«¡‚™œfdd©óªP(HIIÓP¸n޼Ϟ='™1ã ŒŒ 8tè<‹o(±<^ÇíÜllµ�ÿrïŠB¡D_߀ÐÁÄÆÆóãŠ_),”sýæ]&|ÿ‰ÉÙÄÅ%³uç^òó yÏœ…ËyþçŠü¼f#1qÉ„?‹cØã¸tå'�ÀÍíuÐÒð,ú9a�Ÿ0°ŸOžF0yÚœ7�.‰EËV²uÃ/Ýứ³á•8Ï[·ß½ ¸v“¡ƒûü"Ðý�‡4iTŸ«/â5%&%3jÌ·Œûz$3§~KxD£ÆLäá£ÇêjÀµ›téØ==)«×¬gÿ¡—"““cž?�Ñèï""ŸñÕ¸ï5â3ºwéÀ‰Sg™=oq ïGÁò•kèçß“žÝ:ŸÀòUkJ´Äy «ƒ0nU©§%Z¦º¦ä‘{7á­S7o§{×jË¥SgÎóó¯ëéÙ­Öe¬8|ô$Úµ*õûþþÛ±hii±rõ:RSÓhß¶%“'�¥{ïÁ¯µ6Z÷ûVzvëÄ��}ˆOHR‹þ3¿­ßDNN³¦‡MÙ2ÄÅ'²mÇ6nÙñÆ£iãìùãà{·Á¯¿™Ì—£†±î—åÉØ S¸¬i“Ô;î¯röÜ%Z·h¦¶ü8wâJ^Ö™™sªcz}ÖmØBÿ^Ì�9¹BÎÞ}‡xþ<–ŠåK�VAA?®ø•Þ½º¢/“‘•�ÍO«~+æ&uëN uëÔ ]›ì?xTýu9‰DÂä‰ãÔ_—{¯~]ÎÖ¦,ݺt`Ò”Y¯Íƒ›«3Ïcâ4\Q®Ýd¸Ñ\¸x…áC2uæ<Æ=НÇO¦oŸžì;pX#@vi9{þ•+92gæwrãæ®ÜÀþc½ü¾qúõbÙ¢9¤¥§³jõZär9;÷ìÇ߯; æN§°PÎá£'йŠþ™·îТyc:VìØ¶{:¤?99¹Ü¾{�³ç/1°Ÿ3ç.âÞ½û ìçÇ­ÛwK^ÙÛ¢««Ãâ35~_¾âWnß½‡‹se aýŸBAx&Z¦R¤®fÄG—êZ©«™:�ÒŒÁ©™ ÎßÊfp'#®çbk¡�\Z03Òâfhž•¥Ü}˜GG]ÓäX[h‘‘£ $<ŸrÖZ$¤Êq« ƒ�žˆšRÜtБ¼þ¾CõÅÞΖEKW²c÷>üýº3tp?=ɨ¯¿eÒø1øõèBl\ß~?“ÛwU1O†�üšißO �_wž2mÖ< G�ŸÂɱÝ»tÀÝÍ…ÍÛvñó¯ëßkL~µ¿¿Lƒzu¸s/¨ÄsN�9�¿_w.]P»ÿ‡0ò« 2€¶/â#†=~Ê –©­ò6oÛEBb"úõ¦]›–äææ²wß!<Ü]1l0c'LVßcԈϊm$$½b…—À†MÛ>t 2™�ÂsîüEæÏ�ŠTªKJJ2RéÛ](gzaÓ“ã\ˆ$!/K]ê[U}£À`go�TO�¼Ü\�x¦Ù'XYYQ®|y"#"ð®î£þ½e+UlÅ3§NqâØQ¤R=ÜÝÝéÖ£§Újæ‹Ñ_rpÿ>®^åüÙ³˜˜˜ÐªuÎ�;˹³g¨ß ¡jŽ‘�À®/ÇV™¾>­Û¶{Íæ¦ˆ¶íÛqæÔI8€‰© í:t,ñ¼ñ'±oï^–/[JB|<æ4nÚô�î^*V¤yËVüòó*&O›^êM�æ-ZrüØQ ‰„¶í;¨�YXXpäÐA²2³Ð“Épu{ÔÙÕÕ�ýûþ ä~0º:ºôîÛ—øøxŽ>¬žÏm\¯j½úôycZµiу¹L¡¼P]ÎEDGG“™‘Yâ—ÏþŒ……^Þ>lX¿±XŒX,¦EKÕ|mÇÖ- úl(§Ož¤š—7±/‚ú×®[÷/÷¥ÖeËR¥ª'[7mD¡PRÖÆ†víÛ¿óõ­Û´áð¡C,]´CC:wí†D"ÁÙÅ•ä¤d6¬_GAA•*W.1¿í;vâè‘Ã\¹|kkkÚuP½G¢"#Y¹üG •*Wþ`ㇳ‹ )))ìÚ±�Üœlíìiß©äºÝ­g/Ž:HNv6*¨Ÿ¡²³3O‡±ê§åѨISu\§��õ×å7iÊÑÇX¿ö7 ή®ÔñUYôµj݆CpìÈ*T C§NŸäx+23÷Vææ¼»?½D"aåÊï04|i ˆ¡¡¾Ú² (èsæ¬ym:={¶Â×·ÚkE¦%K¾áС œ_c}C~,kÿ—ÒÅ™¬Œwn¯>žU¸yãb‰ 4"øAZZÚØ”µæNà åÔ¬Y�û!�)”+¨ìTŽû÷¡T*èÔ¡×n�Ÿ—ƒ³“-×nÜ¥0?‡j^^Ü ,U,Ž�[Ö"“éѶ“ß_.Ç¡ƒû1rø¶nßÃÞý‡�ˆ¢œ½-�ø–(Z t´hÖˆZ5|8|ì$‘‘Ϙ?gî.ÔkÜ–¼÷’( ði¡«£ÃÒ…³ùfâ4u ¹ÿRw3Ìûº OÎ#vþÍÒ-ªÆû 1Ó%iãrƒß-pøæ¯£ðpÔaÞ†®ÝÏ£¢­m} 8;…ªU–²÷l±‰r|\uq°ÑáQd&†œìtØx$ ¹µ7&'_ALb!•ìuèÔ@ƽ'ô[bÿI”ëÇ“›4ªÏ²Es˜ðÝ =ñ—óiddˆiééïu½‡[%úõíM�ºu^kµôÿ`ó† œ8~ŒÅ?.ÇÌì¯Ïkããã±´´ü(q�>U"#"¸|é½z÷�@©-™är9GŽ\¤G�–êßV®ÜN¥Jå^™”ìßöƒe244ѱccöï?K«V¾èò[[+ªT©DÆչpá&v$**Vú)"Bå3Þ­[söì9…¯o5æÌMË–Ÿ¿sZ¶ô¥NO&Oþ‰¤¤Tär9R©®PƒJÅ™¬ nädS]ïýÜunäd¿³ÀTÔ^ƒ„R§ž/…DÇDQÎÞ###®^»F~¾jqqõêËözçÎËÝÝàû·)ooŽ\©$)%•*žnèhksëNàÿ5Øë/¿màêµ›/,5¾ÇÌÔ”Ô´tnß½‡®ŽŽ „üEîÜ ¢kçö¬]­rcŽŒzÆØ S„rø ‘H¨_¯aOžþ§&€ÜàdòŸ¦£SÁ“®Ž¤î~üN×™tuDb¦KþÓôw˜žÆJÈ+ȧEm}\¤ˆ)”+qw”"W€R)¢­¯!Ii ,LÄÊÁµ‚2]::"ú¶6A¡Pbf,A$’PÆL  7C ˆI’|2åú1Æd7Wgztë¤úDû¥³¡›žžñ^×UõpfàÀ~Ô¬YC#dȧÀí[·¸sûŽNND`ÍàÈïÃ{õ”ûö�¡\9kj×V—›2åsôôT‚‹R©dëÖ#…}°LÊårÆŽ]Àwß åë¯ûË×_ÏW›Î^¸p‹~ýÚ3cÆ¢˜8q™Æõ …’qã1yò0F�îC||cÇ.$;ûÝ}kwí:�——+ü±Œ¼¼|Nž àðá B ú˜›Ëɬt ‰žHÌ1‡J¯=v¸¼Ó'ý< cÙb_I)ÝÍä(Y�[êûegç¼÷'¦ï‡„|°ç^´l%Z’7)¼¬aò.ðáˆOHdØcÑÖÖFKëÃÅ!øÿÓ­s{<«zðëÚ�ÿÉçO;ŽåȪè×PÅðx›ÐdÒÕQ}nÚ¡ðRÝëû-6ÿ™rýÐcòŸ¦’SEÿ¸ªØ—Yÿ.êÔô¢OŸ^xy{}râR?¯\�‰‰ =zù!ðþ”+_^óF@@à¯Sjw¹W©[·�×Àή ……r?ŽâÈ‘‹„†† %+ð^¼É]î]PÂ'í.WDc}C–”µ{g¡IŽ’11ÏJeÅ$ Pœ"·9yrY±ä†$S¯úŸ¶•RW3ôkY#1Sm¢–ÆMNàŸ�oüzõÀÛÇ[ãïÆ_™>4aͼ(+}?÷’D¦ç9yT=s÷Og©þþ‰LnºR¾±°~«ëÜ�œl$Ær?O°&øèØ`ÜÖ� FoÉg½Ÿ—ËÀèpëÒÂÀ/© kmU“Œ-(ävn6Ç3Óë%�Lþ³LV!u7Cæa�¶ƒZ¦ª¯„¦äRžIvP¢`½ô U‹†tïÞ777A\ø–LŸ2‰˜ãuÝð2Ö¯ëÿlÉt;-“öW�­¤úÓ°døÿЦUcºv팻»ûêKjÁ’Ià“"[® ÅåûLu±§kY³÷v�‹ÉÍgwL2³C£ÈQ(„‚ }ÛftïÞggg¡0>‚%“À¿e±+•ÊŽ –Lÿzvë@ÇNíqtt C@@@à#"X2 ü+éÕ½: â’€€€Àß… 2 ü«èÕ½ݺužœ½P#‚È$ ð¯`@ßtîÒ kkk¡0þ"“€€À§š›ƒPÿ1îÜ Aƒÿ/ˆD"<«UǧzMLLÍHOË!=í©PþTv®ðiõÉBào�Bào�;::Ú ì׋öíÛaie)ˆ€€€À'€`É$ ð�AGG›Ï?ëG›¶m055 D@@@àB™>yŒ õùlH?Z´hމ‰‰P Ÿ ‚È$ ðÉbjlÈ Aþ´lÙccc¡@>a‘I@@@@@@@@@@à“ÃÜ̘aŸ  Y³fèè " ð@™>ìm­4¨/ 6@__—þI"“€Àÿ™Æú†´00ÂK*ÃZ[Õ$c ¹�›ÍñÌtÎde…$ ð�º›!ó°@ÛÁ-S)…)¹„g’”Hnp²PH#åíË2`€?�5D&“ " ðDdfî­ÌÍ‘ %!ð/BYìßJ¥²„ãJ]Íþo¹tÓ•ò�…5ÕõÞ<‰º‘“Í‚ÄXîçå ¯V@@@@@à cg€q[t*½ñ¼ü§é¤ 'ÿY¦Ph‘ åm2¸?õÔGWWW(�0‚È$ð/äә벤¬Dït¾%cbž•ÚªéÇ…3‰4ï¡T*‹ýöºão;wÔØÉBuøG!u7ü¯‹j|MÎ#+ –Ü�d âsжÒCêj†~-k$f*Á#iãÁªé#àîêDÿ~}¨S·:::B�ü ÜåþfÜt¥¥˜$ˆXRÖŽÞQOKeÑT$) Äbñ;]£P(‰DˆD¢· M¯ÃÊÒ‚fO¡ZUzúáQØ“Ûyiiá׳ Õ½«Q¹’# ‰I„„<ä·ß7ŸðAîÑ ^V,›Ï÷Sç°ïà�cåËq`Ïæbׄ=~BçýÕÿïÒ©ÑÏc¸vó£Ö+ãVå�zZ¢eªKaJ¹wH;Yâ¹—ÏA__F/ÿ!„„>`Ö´ItlßšÎ=úöøéïpá8·î2|Ô¸’÷ŠÊãï×�s–êº.�Úá×£ åËÙ“”œÌÎÝûXûûìíl9¼or¹\]¯SSÓ8vò ?,X†B¡`ç–µ¬üe-•�œ>t€º�(•Jµ0=iÊl<ÜU‹Ñù‹– «£ÃÈChܰ>V–„GDòÓª5œ¿xE#‡÷mC&Ó£IËÎê6¨§'åÚÅÔiØŠÌÌ,¡Cüñ¾õ¸´ èëGýzµ7a )©iêß�Œ Y<—¯^cíúÍù>–æ è×›òåìÈÈÈdçžýܺ}—/Gųª‡Æ¹ ¹‚!ÿúG¼';µÀ”u=ŽÔÝ�‹�SŸCA|4ç¢1éêˆ~�2˜÷u!á§Àÿ¼ES÷®™2iŸ�Ë¥+×Þ;�ªÎ Ø�š5k ¥¥¹ ¹̆õëÉÌÈdùªU¥Nûâùó\¾t‰AŸ}†……Å?ª|7=9Î…ø@òR±Ô5¡¾UUü+¶(ñÜáC?#';›é³fSÞÁ€_WÿÌÅóç™3o>¶vvo¼×°Áƒ¨TÙ™q&|�¼Ç<α£G0hp©®»ré§Nž ** SSS<=«Ñ¥{wµEÛäIéܵÞ>>äåå1îììí0hð{ÍQþÝlߺ•ê5jàèäô·ÜO©TòÜÙ|ùÕd8†ÜÙÓ§iÔ¤‰úÿÙYY:x�gQ‘X[—¥Mûv›"“€À�o,¬K%0½*4}caÍÀèðRuz …™L†\.'77mmí?Yv¿F*•¢P((((xíàý¦4|ëÖ¢†�k×o&&&¡��5 æN'2ò›·îâþƒP¬ËXѼi#vnþ�srêÌù�úSSÓX¹z­úÿ††øûuçixÖe¬hÙ¼ ãÆ|Áoë7}T‘Ér˜‡†Ë‡–©.�ìÐ)oDÂê ¯‹ÅŒ;š�CG•ú~¿®ÝHLì‡{§ÏcâØ¸eg©®éÛ§]:¶cÊô¹„> £r%'fOÿŽìì¶íÜ«šˆæçS½NSõ5åËÙ±cóZîÝçÀ¡cêßW¯YÏê5ëÕb[dÔ3~ùmƒúx‘ÈTÄ‚¦SPPÈç#Ç’�˜D½ºµ˜;s2ƒ?ÿ’/D;w7t´uÈËͧ†O5®ß:¿9ïS�ß—üü|¼«qòô9õo>^ž|°{|9jWn°tùÏT«êÁ°!ý˜8y+W¯CüʸP¿^Ê–-ó�yOÆmÞ(0ëë_œ£_£ Æm^Û§ ¼µkTÃßß/o¯bâRçÏ�ãyt4#F�~¯{ÄÅÅt�¼ÜV˜�ÉwלúrŽ—�—Êž¨ó„fD2ÓsÈkçb[6mdâ÷¥·,oß±#ææN„337§e«Ö¥ºfïîÝ\½|‰ƒSÑщ”ädþس›S§0}Öìbu¤  €% RÆÚú?'0]<---j×­+t$o¡Q“&þ£Ÿ¡  €;·os/ð®†Ètâø1ÌÍÍéÒ­×8rè0½z÷D&�ÿ2�õ ߃éMTדÑXßð�Ýæär9•+WF,£§§GLL ÑÑÑj¡©ÈRI,#—ËÑÒÒ¢°°²³³‰��GGGGmÙñªeÓ›¬¢tuu±²TM\‚C�—ŸÏÎ-kÑ×—qúì:uhCdT4sç-á^p_�Æàþìùã -[4!11™EKWЩCjÕôáÑ£'Œ�0™ø„D´µµY±t>ç·õ›Ô÷ Ë|JØã§\»Éò%?ú�KçallL“–�¨ï[‡•?ÎgëŽ=Ì™·„EófЬIC|µÁÁ¡ÇE%ÇŠ„GD2cÎB‚‚CÔiW­âÆà�}022d÷Þƒü´j ©ii¬úe�úœ93¾'-=�9óã\Ù‰][×½Ó;²µ-Kÿ^Ø”µ&6.ž�›·ùŒ&�êcogK9{[,,Ìyü$œ�[v�’’ª¹`jUîµ1Et*aܪ\‰M …‚ê>ÕhÒ¨>§Ï^(vܯG†}ÖŸø„$‚ƒCèÖ¥m:ö"êY4Ÿ êË­;�:rœµ¿üH%§ŠlÚ²“Þ=»’_PÀÜùK9}ö«–/¤^ÝZ :Š””Tölÿ�¡�ðë7TmÙP¦Œ%}{«,@*9U¤oïXZ˜Çšu›x«ùÌFFŒ:ˆÞý‡ñ4<€ àæ/ú‘ÎÛªE¦?ùŒë7oSÖúýĵkUǹ²m;ùQXXÀ©3çqr¬@íšÕÕ"S›–Í8xä"D´jÙ죈Lsf|€©© ÙÙ9äååq?$”M[wbffJÿ^XYZ P(øcÿa®ß¼M½ºµðëÙUU�D�––Áï›¶½ÕúÏŹ=»wFª«KVv6ë7låYôsðÇÝÍ…ììlD"‘QѬ߰…¼ü|z÷ꊇ›+eÊXŸÈã'á¬Y·‘1£>ÇÒÒ}}b±˜ŒŒLrrr˜9wµkU§CÛVÏ4iʬ7æ@[[›)“Æñèñ6lÚþQûq±XŒïîT÷ªÀésøcÿa�zü¦ö«/“1 Ÿ.ΕHNNaËöÝ„> C[[›^=:ã]­*ié?q†ËWK¶ ¼LuŸ?‰LÞžÞ VÿßÂÜŒþ}{áP¾ …‚Óg.°ïàæÍžÊŠŸ#2ê“ÆÅác'¹s7H£�Y˜›søèI ×oÞ¦Mëæ8”³çÖ�@õyú4¨W‡¹ –þ#Æ`©»:Œ�'罓ÀôªÐ$u4A§‚Rw³OÞm®ºO5Öý²œWüBÍêÞœ9‘ÃGN2mòxjÕðܾÈwSç�’’ʽ›¸pé ™™ÙÔ¯W›¨gÏ?qᑈD"F D�®IIMãöÝ{÷ò®V•±_�Àɱ"qññ¬Û°•½û¡££ÍÍ+§¹q󆆘˜qäèqììlÙ¶y#ë~û•N]ºÐ¢e+�ô²³²ÈÁ™ IDATzaåYÙÙ€ääd6ý¾ž��¤ººÔ¬]‡n=z ­­ÍÜÙ³x…_ï>Ø¿�.ݺ³ÿÕ0iÂx–þ´‚Å æ“—›ËüÅKX²p!÷ï²vÃFþس›½»wÓÓÏ�³§O“‘™I³æ-èÚ½»za`ߤ¦¦âìâÊÐÏ?Ç „Åëƒ�Î�=CnNöåÊÓºMôd2nÞ¸AB|qqq¤¦¤`kgOËV­04Ò·7=9®!0½Jpj8›ž/Ñ¢I,ó $„›7nàS½z±ã'Ogßž½˜š™R¡bEΞ>Í‚%K±²²âÀ¾}TªìL__u9¶lÕŠÇŽ£¥%Á¿ÿ|ªWgá¼yÜ ¼ËÄï'cddĤ ã)ïàÀ´™³4Dž””µ%Ó³¨(Ž=BjJ*ææ´ëб˜UY|||b±˜m[bbl̄靈rõZºué@Å åKÌÃÓðHLML016@_&£Œ•%�Ÿ¼\¤vhßšÄÄdÆN˜Ì –ѺU3Œ�Œ¸{/ˆ*n€ÊÓÎΆàû¡égdfòíw3ÔmU&ÓÃÒœðÈ(�ó:whË©3çÉÉùgXŒÈµüÜÜ6o܈Ÿ¯/ë×þÁý¨G¡0nGF²yãFþܲ¿Í›ÉÍÍyéc\MÚÙCágÚôôê݇ÇŽ¡P(HOOçøÑ£ :ŒIS¦’𒵫W).*bǶmtóéÎôwgahhÄ�ýû_X�k2H$&NžÂà¡Ã*ÎCÈåÚ—<‰D‚±‰1¹¹¹ÿ¸ùG°dx…xÈu_i"‘ˆ   Œ��±±±!)) GGGRRR077§  ™LÆõë×ñôô¤öÿ}©TŠ……R©”ððpD" 6¤´´---LLLHIy²»Ô‘c'116bÞœ÷?eW¯Ý¬°1NLJÆÈÈ€Ñ#†h6;_~õ=×oÓ²¹7öv¶Ìž»¹\N×Î1ð¬_ŸÌýô $ ¿ýü»÷äÃ�?ãýwߦq£ÄÅ'pùÊ5¦MÏšu¾Œ>˜Æn pkàÂ�»Q¸º8cblDm[9A»¶-162båok9p™LÆœÙ3iÓºyGŽ�äç_×`dhHÀÉýt÷éÂÎ=4õ~wú’Ø»ÿ°æMC\|‚F,zvv¶ˆD"üÏ^àÂ¥ËôèÞ‡ºöDÝ�&&V½ð¸Š�•UåAܤú¯ð<é¸J¥âëïW°}ËZ�€÷�¾½º#‰ølñ2bbãqvr më–O,£¬¬ŒwÞýˆ¼¼|êÕµ§MëÈårbãâY»a3oM‡J¥bÇ®},Ī"/?[[ktBåømÛUešÚ6Ö¤¥g<µýkkiqõâIõD,#•JY±r5a·"ž»ÿÕ¶µæö�¨§Š©ééDÝ�y°�˦Es/Î�¿ôJÆ™L†««3?ý²êÁ¢4‹O.©r|00Ð'/¿ú3ÎŽ¤¦¥kŒ�°pBªxŽR©¹\›Ü¼³æiuhÛº%ë7nA&•áåéñD  A~~zººØÚZsçnoÏü€:uì*¤«ªÿŠÅb¼<›2ãý�Q(\ ¼‚R¥D*•в…7¿­^Oii©©i‡âÝÌCÓŽþÚ¯ßÂÓ£ §ÎœÅã 7‚BP© ¸Ûv졤¤…B�–– ¥R�ŽŽœ à0úöòáàác¸7iLHhx%7;¥RIvŽzƒ`ccÅ[“ÆqÆÿ™™Yš4µj™Ð°� [¶î|mæ`Y]}µ(þì–HÅá™v¯£Éãuàü…@�ðž–žÁÉSþ¤¦eЪ…·Z$2$˜…†…3÷ÓEˆÅbÚ·kMíÚ6êù wwÊËË™=w!……E8ԭÛÛЭKGttäüüÛ:FÀÙ‹Þ·•~}z ¯'g÷î݇„òáܹ\»z•å?|Oç®]èÛŠòrŽ=B^^^…¯É�?�¼Ü\®\¾Ì†Í[ˆ‰Ž&&:šv:ЫO_uÿ ⬿?C†©7`ååå|º`!Ö6ê:?Ü€™˜Ôª±1jìXšº{ ¯¯ÇV??RSS¸~MíæÞ·ÿŒŒ�¹wç�—.‘••…‰‰É#±$"‚ú..šòÛµïÀÏË—Ó»¯úeœ­­-Væo'ggÒÓ+[ަ•dW[¿'‰DŒ5Šùó>ÖXè<äÜÙT*ã'MÆÊÊŠ„øx�€WåzA*å½f£«§Gbb"ÁA7)))ÁÒÒ’½z³w÷.D":u¢ž£cõ‚®Ž.i©i8:–hD¿J×”–†©™iÕ♹©©�Ö™;¶þ‰¥•5qqqdddT)L½LLjqñüyFŒ]¡]zx6#èæMZ·m‹J¥"88ˆ#GU›—……í;tävdD%K¦#Ò¢U+�œHNNfÏμõÎô§Ö/+3‹á£F¡P(XþÃ4oÙmmmååŒ=©TÊö­[¹…£“î\ºp�&MÕ–·!ÁÁ¸{z¨šèÔ¹3VÖÖäææ°eÓ¦§Ö!/7¯B½�:ˆC½zj!4ÀŸ¡Ã†£o`@Rb"ù½Ô1®&í ÀÝñXŒ�½=::rÊJK‰¸u ·Æ�15U·Á½zSR\ÌíÛ‘XÛØPÛN=§¿Ñ¼9?/_NIIÉ ùòeMƃ'QTXˆÖ_ê %Ó¢ àŸãS™^!V2é+ÏÃÓÓ“˜˜’’’033C¥RQ^^NBBFFFˆÅb�¥SãÆ�¹pánnn( ©U«%%%( Äb1III?×[¤ìœ�ëÓ­põ›sóÇ…ƒ²²2rrò(--« ÔXZšceiAxÄmš{7CWWGã¥R©4q˜ìííÈÊÎáêµ›(•J¹¹Ò°� kÖm⓹ïÓ³»z" ¼|MogÞœ÷˜7ç½GPmMº@åäæ’�˜„•å£Å���ÞÍ<øéçß5A¦kŠ‘¡!éY~ËÈÈÂÈHmEõÐ@¥¬Úr¬<«¤Z¡©<«ä‰Çn߹Ǯ½ykÒ¸ .0¶¶Ö”””h6È¡aÕŠLù…ä=²sr,|ÕÇ|·lgÊÄ1ˆÅb6l~ºÓf¿ Лo¿ú‚„„D¶íÜKäí»Ò$%§Th7ÑёӫG7vï=TŒÉ$‰ðôhª_¾ç´ÿ¹çDŸ”œ‚¹yå²ëØ×¦¾³#ÇOúÓ½[gê;;pR-DêëéâÓµÓ+™ôõõ(++§´´êø<�5äóùs‰DDÇIJuûž§ä§¯q_©Š>½|èÖ¥:::?yšË/Á5°º:X˜›!“JHKÏàòÕëŒ9䥊L‘·ïpîÇ�BWW‡‹�Wª¼‡Uõ_#CŠKJ(~,VLàåkˆD"Œ��7fx…¾þx¿ü+W®Ý`Ѐ>œ:s/Ϧ>z{;[Íqs33F „¾¾> ‰I(JMýmmmÐÓÕÅÓ£1/]}âæµ‡Oº¼Ùž]{T lß¹S{.^yæqïo]ôšÈÕs̃¯È= Ïy˜ÇëÀ�›�\Û´´´˜ûá»Ôs¨KÔýèJiÄNT*•äçhânÙZ[Gaa‘f>x(2YYZV˜Ï㉎‰!%9‘OçÏcòøq´jÓæ�€!Ñlâ$5´îÌÌT ‚õ4¿Õstäê•+Ë]==�À󼘙™?k 4kŠŒk’…Ÿ~R!mJrr‘© ?¿Bà]]==D"‘&&”ùck†'Yÿ˜kW+4™k?9°¯�½=í;vdïîÝÔ¯ïòhM•š†–––fCëP¯^µ"“\GG#ÐéTS»ùø°ï”J%>=z>õ~vññáÌ©Sü²bæætz³3vöö¹çfD߯úC#™™XYY?šcëÖeÚôìØ¶�5«~ããOç¿”xLR©”ú.õ+‰ žžlX¿ŽVmÚƒ¥¥e%§š¢R©HHH ®ƒƒºYYQ\\LQa!:ºÕ¿Hv¨W±XŒX,Fß@Ÿ¢¢"´µµÑÓ×cǶmH¥RÒRS(,,Ðô•#‡’��…¶–6ñq±ôîÛ•JEll,'�T/ÔV�Õ¹…ríê®]½ŠR©¤ð1qÃÙ¹>[ÿôÃÕµÎ../M|ÖvöPðûkÌËËÅܲB{¸EJrk~_UAô,+-­Ð.JKK‘H$O}¡üWÏ�šŒOB[®È§´¬�ºò "“€€À A¥R…½½=¥¥¥DFF¢§§‡�� J¥’‚‚´µµ‘ÉddggM~¾:>Jnn.yyyØÚÚ’ššÊ½{÷pqqÁÜÜœÈÈÈ癌�Œ°²´ 9%•.j·µä”T¸:×L¤ÊÊ¡´´ k+Kärmj™˜`ei�“S=†Àç_~C“F ™4~Î]H~A¡aáth×KKsÎ_dBr û÷¦¤´”›Á!š€µc'Mçú� ¤R)F††ò†—úm�‹‹“fónkcÍ•Ç,³º¾Ùÿ³çŸù~ääæbZ«â±–‰199¹>5¸:@qPújW{¼:~^¹†îÝÞ¤]›–�-ê³ÐÖÖÆÆÚŠÄ¤d\ê?ÿ×9Æ�ŽX,F©T2iÜ(æ¾ô‰iÅb1‰˜W¬B&“Ñ¡]+F�RÉ çVÄmjÛÚPÏ¡N+�–ͽ™Æù‹—Q©T,ûRmÑR^^NxD$Í<›RßÙ‰Ukªn Cõán|ñ¹¹y•új‹7¼øê5‰Åô_åq×ä·§NÀ@߀7}ú#“É8vpG�òÈÊÎÆÕÅY3ž89Ö}$¶¤¦ÐÀÕ…† œèÚµ s>ú/oï&<s¢£‰÷£¢004Ô¸!?i=ò°ŠD" ‹Š41%óòjæZbh¤.cõºõšr%%ÅèéU`ôôõÉÌxÔÿ‹‹ŠP*•hËk.H¶µh®¸€j�WÇÀÁƒ¹tñbÉÐÈ�ÒÒRÒÓÓ133#.6湟ÃÁ4_>°o/“¦L­ví©T*2låååܸ~�#‡1yê[ÒÕwue³ï&Mý' ÀOOÍ¿[´j�H$¢ß€,üôŽ9\!^Ó‹ä¡ÐøW®NݺDÝ»GXhͼ¼_ðz½f‚Ã_ÅY•JEzz:çÏžeÂä)ÈårML²‡m¿Qã&„…„¢¥­�kÆš ‰„ÁÆ¡¥¥Uãzž·¤´”7ƒ2°gÎs&à<»·odäÐ�ü°â7ÞŸù‹?ŸÇg‹¾ÖX\º| 'Çzdeç�˜˜LxÄmœ¸q#˜ÒÒ2Î_¤°°ˆwß™ŒO×7YñÃWœ<²«Âfͧë›L�4Že_.D,³ÿÀͱ† \()-åî½ûÏ|/ââ‰D´iÝ‘HDó7š¡£#':&®æ›ï#±”Þ¯zÁ\z?·Ê ß�“‘™Éšµ¾žç‰Sê…î‚O>dú´‰¨gÁ±^]ÆŽÆÙóÙwà}{wÇÓ½Iµ †9³gâéÑ…BA^~Z²Ê‹Ÿ¬¬lV¯ÝÄ÷_/¦±[d2M5dÎì™lö«~㔓“‹žÞó»­úŸ½@tL,_/Yˆ­­5r¹œ>�Ô¿7[·í¦ÅÍÈÍÍÓLwîF‘››GëVÍ_É8£P( Ó ††Ìûè½çþØ�»Qâꢃ�ødÎ{ÞÞ³uûn&Žõܱ2ž§ZZ2Z4÷â³ÅËX¸Hýß�CGiÓº‰Dcuhcc¥nþߘMoxy2iÂ(Œ�ŒÈÍÍCùÀ­ÆÏ&ô½{tC,ãÝ̃žÝ»PTT̵ëA ìß--æf|üÑ{Ü™ªê/×o1~Ì‚CoUµôôtÉÈÈD¥RÑ̳)ææ¦šMùÍà0ú÷íIäí»¬ªbdhHûv­ùõ÷u!•J‘J¥šq¡®=ee¥/MÈ{Y”g©¯Ufñìo}žó0�× s3S ðéú&‹~ü`� yêy¯"•JYöåB¦MO—ã Àñgˆ‰‰ÁÉÁ†Ö-›súÄq”J%­Û¶}aõ¶¯S;{{.]¸ÀáƒX¿ö222hÝæÉeÈåjkƒ›7®SVV†™™y¹¹¬]³š5¿¯âÞÝ»5ëëÍ›S^^Άuk¹xþ<ó?žËÂO>©Wй~}"ÂÃIIIA©TâïW—gZ'�ª×7ãºUs3®[eÐï ‚˜¡½ûô©0xy«cc­ÿãvíØÁÍ7žë$&$päÐAšº{Ц];Îp;2²Ús6oÜHdDb±]]Ê«øò¥••]ºv㻯—AYYiiiüþÛ¯”—•Ñ¥k·ÊýP&còԷؽcI‰‰¯´y¿ÑœË—.‘��]¥µL•¢�DBqqI%ÁÃÖÖVcÅ•œœŒ¾�~�Kÿ•‚ü|ôôõ‘ËåWÁ´©‡;‘‘Dܺ…»Ç#áÎÎÞž[aê¸W…œ>y²ehÜËnGFjú‚J¥â¹sâîáI›¶íˆ�S¯esss()Q #ùù”••‘��õBžIMÚÙ“¨ïêJhH0ÙÙÙqâèQrssqtr$2"‚Ä„ 窌¿ejjJDxă`Üá ×ÑA¦¥EJJ ¹¹9”——|3è…µA™L†s}g®^¹ò`Œ»�µµõ?.è7ü–LúúºXXÔ¢¬¬œ¸8µû‹��2™”ÔÔLòó EA@à/Ü(.ÄVfôçQST*ÕÍ8ß>|»÷pò×sO[•J_Sâ¹{/Šñc†u?†ùŸ-©6tU|÷ÓJü6þNè­p>Yø%<çÙ¯ŠØ �—¯1eâÂÄo¹~›NÚré²:ÖBzF&3Þ›Ëì÷§³há\¢câ˜ñÞÇܾsO³A ¼|�}{¢£#gÕšõì;øHdrrt 11é¹î‡R©dÅÊ5Œ5”¡ƒú‘ššÆŠ_×T Þù4ÒV…bäc�¼©9RmʳJ(J{ªÀô�M›·2x`l¬Õñ“§ømõz†ꇕ¥‡Žœ O/Ÿg¾¾Oç~€T*eåªudgçлg7æÏû€Á#&Vy�*•Šuü:¨“Æ�$5-C,ú¯ü±Þ—¢¢"þ 6Ö–¤¤¦óç¶]lÚ²­Ú:ÅÆÆófÇvìz,¦Ö³òþ‡óywÆTÖý¾#CC¢cbù`ÎBÂÂYüÙÌ[°ø‰uhØÀ…Ĥ�UÕÃþ:göLΞ»È´)ãY¸h½?ƒ÷?šÏè‘CÙ»ÿP…ÙÏÊ™€óÔwvdÉ¢O(++çêµ›\ ¼ŠÝcÂtulØô'ãÆ ã§ï–�“›Ë¯«Ö¢P(ؾk£†曥ŸS^®àБã•\EÿÊÕë7éÚ¥#û­tìÏm»™2i,EEÅÜ áLÀyÆ�΢¥ßr‹ñc†sýFÕ‹_;;[´µµøþ›E~_ñËjn…àêRÿ¹„õ¿›²è|¤&rä jQ–šðLçÊÔÒäñ:òýO+YðɇL7’�¾[qss¥m›–O…×oòÃÂÂŒíZS¯n9N¿>=¨coË;ïL&#;›;wîpæôiLjÕbüÄI¸{xVŠóõ¼ˆÅbf}0ß ëÙ·w/rmm|º÷`Ð�!Oš·àÒÅ‹ìß»—¶íÛ3`Ð`RRR¸ˆ»»; ÝþÔ²›º{0jìXŽ>Ì¥ pr®¯ ‚ý8µjÕ¢{ÏžìÙµ“’âbjÛÙãÓ½û3_뢦“ð�:ÆÙÔ`ÒJ²1×6¦­E“§ LéÖ½§Ož$ý�Ue3//úöÀ©“'ÈÈH§E«Vœ?{ö™ëµa�zŒê7`ú‚€q IDAT\8wŽ ëÖòÅ—Kª\cŠD"zöîÅé“'8¸?Æ&ÆšxZeÐ�!XYY±íO?âããÑ×ÓÃóïÏþð‰ëW‡zõèÒ͇ßû•ùŸ}þR^lT…©©)*• w�ŸcggÇùsgùcõïÈd2zôê�™™>={rìða®\¾ŒR¡ wß~Ï]¯Úvvhɴرmúúz´l݆ÀK—¨ëPcccŒ�MБëPZVZÁm̧G8À­Ð0Êå´m×þ©e5óö&Àÿ ¡!Á¸¸6@[.ç\@mÚµC,‘à»a2--TJ%]ô�€3g¨ïâJAAy¹¹89;àïϰ#þ¯çñ,í¬*¬¬¬hסnV€À¹~}šyy!‘HèÙ»ì'?/+kkzö©ü�”ö:r`ß>Vüø#†š¸[æææ4óòbÓúõ”””âÖ¸i)©/¬útïÁ¾½{ùeùO˜˜Ô¢O¿~ÿÈ9GTËÔSU\ôìþô>>m3¦7yyL�úkÖ|†®®7îçÈ‘s‚¢ ð7¡ªôwE@¥ù¿ãƒEã«¢£žË­íþ¯þ¹–L µål±s@³Å4R bDÜ}n•¼žñ Z4÷B*‘pîB ÐD_d2R©Dÿ?s¯$1“Æ�¤g¯XZZ �ç5¥¼¼…BñB>¿. PžË‰ÕÃÃõ©iÜÝ«O3}ú®òÓO›INN'?¿�ãÇ/òé§+˜={z\¸° [ÛG¾£+W~ÂÀ��ÑÖ–ñÉ'“9qb5[·~C¯^í4iΞ]Ï›o6çØ±U´mÛŒ#G~}lÃ$åüù�Ô­kÃ;ï £qcuQ++SV®ü„3gÖ²jÕÜÜœ04ÔãÊ?tuÕ_†X±âcV­R»ik˸rÅss¡ <3·JŠy/)5�á£@Å{Iñ¯­Àp)ðª 0½f”•• “€À¿Œ­;ö0oÁâÿ¤ÀPŸOƦô¼-±ú¨ím+—Yè`ÐÞ«�ši¦ŒMÿ�IKKÆÔI£Ù³k &ަשT*L¯”g™´µµpuuxjº ÐÖ~ò'[¶lÂîݧ*ý~ñbeeeÔ©cÍùó7iÛV_OO�œ8È”)ƒ177¡gÏw˜=û;fÍ¥Œ:tð¦OŸœ={ ™L†““:Ž·w#ââ’‰Ž®ø5‚eËÞçÊ•0:ušˆŸßa¾ÿ~6J¥Š;wbiÜXm™åìlOÃ†ŽˆÅb6t$>>…´´,¡ <§ òwŸ«EOâ}µ¨�q÷79�@qX¦Ú*é~.’ZÚv¯ƒÅûØ~Õ Û¯Zañ¾†Ýëh\äÒ~þO¸ÉiiɘùÎDöîöcÂÄñ‚ Ô”g™ÜÜkä‹*•Jqss¬ºP±KKS’’ªþômbbµk[rêT íÚ5 uk®] #''�ž=Û±nÝ^JJJ‰‹KÆßÿ]º<ú͝ï ŠP*Uøû_ÑäÑ¡ƒw%7¼Úµ-qr²cË–C(•*Μ¹Bqq)žž ¸|9Wì쬈‹K&..''{š6uáÒ¥`¡õü_Ü*)f|B43“â8�—CBY T(P‘PVÆ�¼f&Å1>!úµ¶`ø§QŸOÚªP26EPt#�ò¬GólyV1E7ÒÉØAڪн“¡�¼7�ý{·2rÔHjÕª%4�çæ™#—¹»»Túíúõp”JµkW4§mÚÔ…ë×+"T©T’’’‰¥¥)éé•­�,-M‰�M"66™ùó§¢££MÇŽÞ9r‘H„…E-.|«Â§ÏOŸ¾¢ù;5õÑÛ¦S§®0iRÖ­ÛKûöÍ7n~¥²¤R ›7/ÕüVVV†X,"00„qãúŸLpðärmÜÝëãîîÊž=§„Ö#ðB8]�'X) ü ‡eþgƒy›0aÂ(ºu튑±‘Ð^Ï!2UŒµ|›C‡ÎЫW;MàouZ—'æsåJ}ûv$,ìn…ß½¼ÜÐÓÓáÎ�XÊÊÊ Š¤MO¼½±xñï¨T*²²r™:õ �»ZíÚ–”••kòx<Ø÷åË!,]:“V­š’””FRRZ…ò23sHIÉ`Р4¿¹º:—ŒB¡dÙ²÷HHH! @íz×±£7�9ñé§+„Ö# ðZaiaÊ´©h×®zúz x¡<³»œ™YÅ`× ©š¿ãâR*37²¹íòå[èܹ9Ó¦ ÁÌÌø�µÒ|õÕ,.\©�NŸ¾Ìôéùy3‚‚‚"Nž dæÌhkkaggÉúõ‹*YQ=¤´´Œ‹ƒøè£ 9r¾Òñ˜˜DJKË4¨ b±˜¶m=Y½z!*•Šââî܉¡[·Ö„„ÜáæÍÚ·÷"))�üüB¡õ¼ØÚX°pþ‡ømYO÷Ý�I@@@@ॠý» NKËbèЙ5k7.ÁÐP�{÷âøì³_9wîº&ÝéÓWøøãI¬X±EóÛO?ùòñÇ“8|x%åå Ö®Ýõk·žXÖ©S—éܹÇ�_¬tL©T1{öwÌŸ?•™3G’ššÁ|Ka¡Ú7?00kks22rÈÊÊ%00Dh9ÿxìl­˜0a4:´GWWW¸!/Q-SOUq‘¢Æ'lÙ²¬Â¿—-[KPP$ ŽÁ4g΄ ÇGŒ˜#Üe�WŒªÒß*•ªŠã*Á-þ}8Ô±eÒı´iÛ¹\.Ü�WÂ3[2……ÝEWW®Ù¸gfæhŽedd‡H$ÐX ¼|Ü81vÌHZ´l�¶¶¶pC^)ÏlÉ$ ðÏG°dú»qoXW¸ ÿ1nÞŠnÂßH£†ÎŒ=ssk¤R™pCþ#ÔwqøGÕG*<a£! ðzÒ´±+ãÆ�æ�7¼‘J…¥½€€€€Àß‹0 ¼f´jáɈáCñlæ‰D"nˆ€€€€À?AdxMhÛÊ‹¡C â’€€€€À?Adø‡Ó¾msFŒJ“&M‹Å øG"ˆLÿPºwëÀ ApssÓ|ÁY@@@@@àŸŠ 2 üÃèÙ½ôÄ%�× Adø›é¨g@W}C<äºXÉÔ]2¹¬œÅ…ËÏåtAžp“^r·Zè62CVW©‰€ò¬bÊ¢ó) M§8,ó•שO¯. 4á ¼vˆj™zªŠ‹Â�ø¡ªô·J¥ªâ¸ ǵþ¶Z6Ô–ó¡™^:ºÕ¦»ZTÈ7éÉÜ*)­€€€€€À @«¶>F=ë¢å`XmºÒû¹äŒ¦4>ÿ¥×iØà>ôéÛGGGá ¼¶"“À¿�¾ÈÔQÏ€¬k#¡fæï T¼—/X5 üŸÈÝja:ÚU=¿f–P˜Lqx&e©EÈ,t�7¨…^s+$µ´ÈØñÒ¬š† îÃÀ�°¯c/<�×AdøòÏ™jËÙbçPc�é! TŒˆ»ÿÌM*¥’ΚceiAii©&®ƒR©D,£P(HMM%%%‘H„¥¥%æææH$”J%"‘‘H„J¥BKK‹¤äNú_Fô”/ÛX˜›ñÕ— poÒˆ¡£&qçnÔ ½�R©”áCàåéN}gGÒÒ3¿Í6“ššöBÊhצ%¿üô5Ÿ.\ÂÞ‡+«[Çžý»6W:çî½(úËð¡7jFƆ„„ÜbÉ×?r?:極+#{äMÍ‘šhSžUBqP9Gb«L{áÌaôôt6já‘wXüÙ<úöîNÿ!c¸{ï~µež=Æõ›ÁL›1û…Ô½žCF ÌK¾}¦óôëÅð!¨coGFf&Ûwîeí†-ØÕ¶åÐÞ?Q(Ôó›H$";;‡£'NóÕ7?¡T*Ù¾e-+_K}''¦M€X,F¥RiÆŒy ¾¤‘›z3úõw+ÐÖÒbúÛ“èØ¾-æfDÇÄòó¯k8w±Býíý]]:uë�R©@GGÎåsÇiÙÞ‡üüa¸þñ¼íøY7z8mÛ´`öœdeçh~744àû¯sáÒeÖ®ßü—SßÙ‘‘ÃannJJJ›¶l#ê~Å1lЀ>ìØµïµzNZµõ1ŸÞ€‚+)dï¼Wmzã�Žèy[�ösð µh7zýú÷ÅÚÚúµ¹§OždýÚ?˜=g�›4})e„ß cãúõäçå³â×_Ÿùüs\8ž “'cfföZµOߨcœM &­$smcÚZ4aT½®U¦;rõêñÙ¢ÅÕæ9uâœë»0{Μ—^ÿü¼<Þykªæß2™ K++ºtíF‡N� âÛeËmFE"LMMéÞ«�»T¾Ö‹.PTXH§Î�k\�òòröíÙõ«WHOOÇÆÆ†6íÚÑéÍΚuðüyÓà <›5 ¤¤„¯—.¡¶�ã&Lâ ½ÆlõóÃËÛG'§W³óT©øjÉ—¼;ë=tõô^hÞgN�Òô€Â‚8@|\,VVÖôèÝ ##ãÜ3b2 ¼b>4³zf� @‚ˆͬŸýLçÙX›Ó´Ic 4¦D"A"‘P^^NA�z£ŒL&ÃÍÍ tuu‘J¥( ÍF]¥RáÞÔ’°ˆ{¤¤eU[nëVÍñnæÁÚõ›IJJy¡÷ÐÆÆŠo–~Nll<›ývp+"+K º¼Ù�í›ÿà‹%ßròtÀK}ŽÙÙ9¬\µVóo}F Ìýè8<š6fÞG³½Å¾ƒG=rË¿_Bï#_J]̧6ªàò!5ÑF¿Cm´ê’¶*´ÊsÄb1}0“ñSf×ù)))„…†PRüz…˜´†°ìGk¼´’lvřˢ¦“ž;ßÞ}ûbjújÅ6KKKZµiCQQ1W/²î�5ÈårZ´j¥ISßÅ·F�())åÚ•ËlZ¿žÚµípmРB^n�Ü(/¯¹A„J¥â›e_¡­¥Í´w¦caiILt4›6¬'.6–q&V:§¬¬Œ¾ýK++A`ªÑTŠßf_òrsñnÞ‚æ-Zü£êסS' ^ë{\VVÆÍ7 ª 2?vSSS ÄåÀ@<İ#‘I@à¿LG=ƒ§Æ`ª/]:ê<ƒÛœ /�FP\\ŒH$B©TRXXHZZ‰‰‰dffâîµ5b±˜ììlüýý111ÁÆÆsssôôô4^�8pÔ‘¨jk&mmm,ÌÕ š°ðJJKÙ¾e-zzºœ:s–~}z—ÀÒe?άS™8n»ö [×N¤§gòÝ�¿Ð¯Oš¿ÑŒ;w¢ø`Î|RÓÒ‘Édüòã×8tŒ?Öûjʼ›Ÿ»÷îxù+~øŠðÈÛüòã2ŒŒŒèÔ­m[·dåò¯ñÛ¶‹%Ë~à»e_йS{ZwèAݺö|üÑ,œëËK¾%4,\“w“Æ ™8~$††ìÜ}€Ÿ]CvN¿þ¾N“fÉŸ’“›Ë’eß3 _/¾üê{n…«°~}z`iiNJJE++[[kÆŽ†�µÉ)©lÚ¼•˜Øx:uh‹]m[ìíl133å^T4›¶l#++»â†ÉÇþ‰1E´ 1ò±¯Ò¢I©TâÕÌ�NÚrêÌÙJLJÀÔÉcIMË ,,œAúУï0ââ˜Ø¢¹.õ�èÙo8åååœ<€“£-ÞðÒˆL=ºuæÀᣈáÓ­óK™–|ñ)&&ÆQRR­ðH|ý¶S«– cG ÃÂÜ ¥RÉž}‡¸rímZ5gøÐ�êv$‚œœ<6øþùTë?Wg†î�\[›‚ÂBÖoô#>!‘‰ãFáÖЕÂÂBD"±q ¬ß¸…’ÒRF H£† °´4'55�{QѬY·‰÷f¼…¹¹zzºˆÅbòòò)**bÑÒïhÑÜ‹>=}*\Ó¼‹«­¨ß–/˜7›;÷¢Øè»õ¥Žãb±˜Q#ãåáÀ)ÿ³ìÙw¨B;®®ÿêéê2nÌp\]œÉÌÌbËÖ�DÞ¾‹L&cØ�þxº7!'7�cÇOsáÒå*ë†W³¿ˆLžM  ÓüÛÌ´cG£n{”J%§NŸeï�Ã,ûr!¿üö±qñÌûh‡ŽžàfÐ#ñÄÐÀ€”ÔT®ßàìù‹ èÛ±XŒH$âÓ¹ “É^»9XîV -C™%5˜šäŽÆh9"w«õ\nsZZ2Æ�F¯^=±°´x©×ÎÒÅ‹4dá·ÂñhæIË–­X»f5·nÝB¥RáââÊä©S104dìÈ4u÷@GGÎÍ›7±´´äíé3°²¶F¥R±{çNNŸ<‰¾�>õÿŒüvd$[ý¶‡I­ZôèÙ‹v:PVVƤqcqmЀÂÂBRSSñòö¦qã&lßú'EÅÅô0€®Ý|*äWXP@Á+χeeffâ»a=áááȵµy£EK ‚L&cé—‹‰�‹cøˆ‘ìß·—ƒ³o�z˜7ç#~üù¾ÿækJŠ‹ùúûøáÛo bíÆMìÙµ“Ý;w2tøpΜ:E^~>�»teààÁ€Ú*jÿÞ=dggãâÚ€)o½…~›×ˆðpüÏœ¦¸¨;û:tïÑ]]®]½JZj )))dgea[ÛŽn>>Vœ·}£ŽU˜',;ߨcO´h(.*b³ï&n\¿Ž-Z¶dØÈ‘H$öïÝ‹s}Z¶n­¹_Ý||8~ôR©„QcÇÑÌË €Ç�±w×nLj™àP¯gN�â›~ÄÜÜœ­~~\8wŽ¢¢Bllm=vNÎÎUÖÇÂÒŠ~нgOfÏz—ýûöV™œë»hÒØÛÛóÛÊ_HJL¬$2…ß § ?ŸN�;ÇÑ#‡ÉÎÊÆÔÌ”^}úV²V»xþ<9ÙÙ|ùÕ2$Ƀ²êó᜹|4û:tìD]Mz…BÁÏ?ý„‘‘!“¦L}.�).6–#‡1aÒd$ *•ŠÍ7âõÆ•®çï"33“sþôé×ÿÿÎKKK‹±ã'pæÌßzMOjgÎàÙ¬ŽNNüôýw´l݆+�—K$¼Ñ¼…¦½‡ß ÃÿÌJKJ¨ïêJç.]‘J¥ÄÅÆrìè °³·Ç§{ä::5ªSB|<§OždÔØ±$%&ròøqF�[ãñ@¡P°qý:Í:óqá)2"’é3g"‘Hx£ys.œ;G~^^•ãÒ߉XØö ¼:ºê¾ÒMýÖí»e‹hÚÄ P»05jØ€M›·ãèP—Ÿ¾_Za£ÒÈ­;víî¶ Ë¿_ŠH$âü…@Ü›6bøÐL™8†”Ô4þX±ß,ýŒÃû¶òõ’ÏØ¼aiéìØ½Ÿq£‡séò5ÌÍL±°0§aõbµ¡k}õÿ¸ŽJ¥â×ß «#ç»A[[›ï¿^„Ñc~¿>=9vâ ‘·ï2eâôíYáz›6iDïžÝøaùo¤gdrèÈ ÆO™Aäí»šÉ¸¸¸˜ÌÌìJ›ÕÓ&qþB 3ßÿ˜S§Ï2}Ú$Í¢¨m›–lܼ•Ùs"‹éЮuåMSSóê7UO8ž�˜Dàåk|0ëíJ›E÷¦�øø£YÜ¿ËÅKW4¢Ù“062¢u«æ8|cæÏS»Ñ-ýúGJK˘6e‰IÉ•ÜÏ_¼Ìì¹ «ÌW$áÖЕFn®œ¿xù¹ûŸw3NûŸ«4ñ¯Z³�õ›ü4euëÒ‰}Žpèè :wj‡TúâßéÌ[°˜y sçn›ý¶3oÁb|ýÔ–4ÇŽ$"ò6Ï_Äw?­¤oŸîèêªHAÁ¡|úÙ>]¸„�Ð[ êß»ú6$—óöÔ ønÙÆÇó±wß!† 9¾gßAu~Ÿ-A*•ЮmK¶ü¹“y £P(X´ô[Ö¬Û¤Þà­ø�y sôøi.\ºÂ¼‹Y´ô;.^­tM5©C3Ϧ\ ¼Bm[´´^®øáéчºuøxþ"¾Xò ];wÀÒ²r?{Rÿ5b™Ìšý‰º­O›„X,¦OÏn1ç“ÏY¹j-ƒô¡žC�*ëp?:ccŒ�ŒÐÓÕÅÒœ{Q�6©}zw'==“æÌç«o~¢»OgŒ ¥q£†€Ú³vmÂnEVUrrXöír$ ŽõêÒ§§W®Ý@©T¢P(XðÅWüôóª×nÖm¤ÞŒ&?ó¹Ïy˜Ç³ˆK3ß™ÈÞÝ~L˜8þ¥ L�s`ÿ~rss033g÷Î�\»z•®Ý|èÜ¥+A7opèàAMÚ ›7‰Å¸{xÍî�;¸pî{wï¡^=<›yqÖÿ‘°™••ŷ˾"';›AC‡bddÄ«'$8H“æÎíÛԯµ5çؼiÞÍ[ Kðóõ¥¤¤¤B�·oÛJÐÍÌšþ*•Š¿û–�à`zöêEã¦M9rè »wî¬ °ømÙŒ��î—«çÎÅèAy§OžÄë�æÈµµÙ·g7ÉIIܹ}›Õ«~ÃÆÖ–ƒsûv$«WUn÷ÙÙÙ9t�>}û1ýÝYèêêpüØ#kÙ›7nÒ­{Þ™ù.J¥’×+¿t8›\mýžvÜoËfÎúûÓéÍθ{zpìèN?VeÚü¼½|ðéÚ‰»öUre±³³E$áV½(¹pé2=ºwÆ¡®:økÔýhbbÕ“óÍ�Plªp­�šhW?È?á¸J¥âëïW°}ËZ�€÷�¾½º#‰ølñ2bbãqvr më–O,£¬¬ŒwÞýˆ¼¼|êÕµ§MëÈårbãâY»a3oM‡J¥bÇ®},Ī"/?[[ktBåømÛUešÚ6Ö¤¥g<µýkkiqõâIõD,#•JY±r5a·"ž»ÿÕ¶µæö�¨§Š©ééšø5YYÙ´hîŹó—^É8#“Épuuæ§_Ô›¡ÌÌ,>]¸¤JáÍÀ@Ÿ¼üêcÌ8;:�š–®0B ©â9J¥Rärmró^üW¸žV‡¶­[²~ãdR^žO´zäç §«‹­­5wîFñöÌ�¨SÇ®Bºªú¯X,ÆË³)3Þÿ…BÁÅÀ+(UJ¤R -[xóÛêõ”––‘ššFPp(ÞÍ<*ÅAzدßÂÓ£ §ÎœÅã 7‚BP©m¶íØCII) …--J¥9AÁaôíåÃÁÃÇpoÒ˜�Ðð'ºÙéèÈ2°uëÚ±n£ßk?Ëêê«E‰ðg·D*Ïİ{MOÃÐ@�É“ÆÐ¥KgLLLþ–ëmÚ´©ÆåÌÈȯ7¼166!$$ø�8òh3[ÏÑ‘·Þ~¥RÉÍ7HMMU‹H$Þž1¹\NRb×®^}°½HII  ¦U›64u÷àÃ÷fqÖß×ê¹Ýŵ£Ç�ãÚÕ«,ÿá{:wíBßþP”—sìèòòòÐÖ~4O�?�¼Ü\®\¾Ì†Í[ˆ‰Ž&&:šv:ЫO_uÿ ⬿?C†©7`ååå|º`!Ö66j!ðÁÌĤV�EƒQcÇÒÔÝ}}=¶úù‘ššÂõk×ÔsbÿsïÎ/]"++«Â3�Œˆ ¾‹‹¦üví;ðóòåôî«¶þ¶µµÕ¸F:9;“ž^Ùr4­$»Úú=íø¥ p¨W�ƒ¡T*ÑÕÑE®-¯z] •òÞ³ÑÕÓ#11‘à ›”””pîl*•Šñ“&ceeEB|¼Fð«S·.³çÌÁÜÂ’¤ÄDµåûSÄ�ŠýÁ•JENNN…ûñh>næå…ÎS¬ýuutIKMÃѱ¤ÊøMééOŒfff®iÛ;¶þ‰¥•5qqqddd`añü"p‡Ž�X÷ÇìëÔáÒÅ‹Œ«~¹ͽ{w=v"‘ˆÛ¶q+,”F�›"‘ˆÄÄD(**¢¸¸ø‰"Ó“ÈÎÉѸ>Ý W¿9773}´ˆz ”••‘““GiiY…7Q––æXYZq›æÞÍÐÕÕѸF©T*M&{{;²²s¸zí&J¥’Fn®4làšu›ødîûô쮞ˆ/_ÓÄÛ™7ç=æÍyï‘TÛFSLJ.P9¹¹$$&aõØ›h+¼›yðÓÏ¿kbW�ÚJéýw§1vÔ0ví9ÀÒo~ªt?Œ IϨ¸HËÈÈÂÈÈP#Vi6•JU•÷´<«¤Z¡©<«ä‰Çn߹Ǯ½ykÒ8®ß ~l´¦¤¤D³A ‹¨VdÊ/($ï�°��“û@ÀPóݲ�)Ç ‹Ù°ùénL›ýv0h@o¾ýê Ù¶s¯Æ"ì!IÉ)ÚÍãâ^=º±{¯úíüã1™D"žMXõË÷œö?÷Ü�è“’S07¯\vûÚÔwväøIºwëL}gGNª…H}=]|ºvze"“¾¾eeå”–V-4nÔ�ÏçÏA$ËÖí{ž’Ÿ¾Æ}¥*úôò¡[—NèèèpüäiþÇÞyÇEq¼ü}wÜqÔ£WQQPQ¬€Ø{{ì(ÔhLŒ‰ÑĨÑhŒšhL4–Ä„Ø{ï{C{¤Hïýî~œž^(¢Q¿&¿}¿^¾ävwfgggvg>û<Ï„¼×À²Ê`cm…TOBbR2!—.3h`ß·*2ݽ÷€“§Ï2|¨?††œ»p±Ä:,©ÿ*LMÈËÏ'ï…X1BB‰D˜™™1t°ŸN_±_þ�‹¡aôîÙ�àã§ðlP—‡ŽRÑÉQ»ßÚÊ ¿Þ‡R©Ò–ßÑÑ#CCԯ͹ó—ÊÔæÌ[€¹¹ófOçîÝû:ÁÆÿmè™k&ÝÏV‘{ž¥y–Gi˜+L6ÌŸŽ: 0SüO¯×¥Z5��kW¯&6&GÇbÇ>›h‰Åb ´îñI‰ ØÙÛ#—˵bÔ3‘)5Y#Ö9W©¢é‹66“œüü#€™¹ÙSaC¢~$å´îLIyzç*:‚Ø¥‹µV1†FFZ�çu±²²~ú¬1ÑŽ)’ŸŽI¾ýfŠÎ±OâãuD¦ì¬,�À»†FFˆD"mL(ëÆ ¥¹bY뛕)$Y뛕9ñÌËËÓÖ�X,ÆÏß¿ÔãåZ!ÎØä¹hš˜�ˆL&ÓN€�«TÑŠLR©”Ç‚¸z%LÛV^…ÌÌ,D" …‚ØÍØ¢s×nôíߥRÉ©'XñW ÷ï£k÷¥æÓÞLJãÁÁ,Y´kkÚ´m‡SEÝU-,-IKM)¥=%S¡B…çïîÊ•=æS¶nÞLà²ß™ôÍÔ׎Ç$“ÉèèãˆuëèÒ­«¶Žc?¦regm¾•��‰��}m‘)!!�ºõ4îÚŽŽiÛlTTG~þîAcéW^W¯¿cdlÄÖÍ›ÑÓÓ#1á 99e‹jµš˜˜­;¢��yyyäæä``høÆŸqåiÏžM™XÛØ¾ð Ð|ÌŽçI|�<·Z´²¶¢° @Gd*((ÐÆ¸}Y�èôår<JC_®È^¤ °ƒ×¼¿‚È$ ðZXZZâââBPPwïÞ¥J•*šÉþªUèëë3hÐ âããIJJ¢víÚ\½z•ÐÐPÌÌÌ8p aaaäääРAvíÚE||<ÎÎÎŒ;–ØØØW.�™B��­ ñOp«®üÆ?IÀ­†kùDªÔt ±·³E.×ÇÂÜ;[\\ªà×·'3fÍ£Ž{MFøóå×ß’•�Í�›·iÕ¢)¶¶ÖœÕ«»h'ïŽö\|Á2«CÛÖœ8uFç¥ñóÜ™´nÙŒÙs°aÓ¶¯'=#K Ý�£…¹éé(LM‹½˜J"ïj"Æ­*”¹¿,/ Ä·c[Z4kü ,}}}ìíˆ�‹§zµ×_�#`ˆb±•Jň¡þL�1§ÔcÅb1‰˜‹–!•JiÕ¢ ƒö-f…sëÎ=*8:PŹ’Ž•Gco/>6ˆ-Ûv•ø’½|•[·ïRŹòk‹LaW®3yâ8æ/XªcýÑ¿oOLLŒ >~šm[Ñ»‘�4fê®.UX½|)ßÍš÷Nú}FF&zzzÈÉÍÍÓ¶Ýìì®ß¸¥Øüe¤gd`ªÐuÓ511Ö ‹»÷$äR3¦Näú�Ûåj·¯JYehѬ1–––̘:ñ©mƒ�µ ‰Io¥~ÍÍÍ8uú<{÷aog˨‡Ò žÆz­¬�%@Ffr92™T+vl߆3ç.�••ÅO?/!íé—~k+KŠ”¥»�ˆŒÂÊÒ[[k*8:pïþC‘iäðÁì;Ä™s!¨Õj~œ¥q%-**âö�»x4¨K5W–o 5ª»âíåÁªµ5bBjÉ)©ØÙÚü«E¦·‰¹Â„Ñ £m»¶¿ezÑŠgǶmädg³`ñbŠŠ”|1¶|‹>˜˜šò(2Rûÿñ ®/æ–Á(2"{ÉÎÊÂÂÂâ ö7�˜ù|ÕÓˆðpLLMµnÈ¥Y+=ëƒ"‘ˆœÜ\Ôj5"‘ˆÌÌò¹–˜*4çøsÅJÄb1ùùùäççaddü·‰¸1)ÉÏûÞÓtúry¹¯³¹M¶GŸ,sY¢‘L&#îé¸L¥R±mËhÚ¼y¹Ë`ª0¥  €¤¤$¬¬¬ˆŽzþ~=yüW¯„1eÚ·T«^�/Ç}^Ìm¼ôwR:îßñB…]Ç% užŠ&�"#Ëœ¬«T*úöïOQQa—/sðÀ~>õ‘Îqµj¹s`ÿ>:úvÒiÙYY„]¾LÛvíµÛ5iŠH$¢GÏž|ûÍ<€�o§×n¯•��‹Å¸¸V+õ}ð¬–DyÜÑJ'D"‰„>ýû#“ÉþqßKJJâÌ©S ûp$r¹\ëìUQ«y+�ÔËÛJ«/##c²2ŸÇ¸���'-5#ccª×¨�O§ÎÚ{[,æÑ†ukñðôĽvm_xÖÞ^¼ßÉÉon,bbbB^^¾V8T*•¤§¥cföþ­.'Ädx‡Ä½Ó<Œ��¹té)))Œ?žÂÂB.\È’%K˜6mß}÷vvvŒ3†‹/rõêUÖ®]KãÆ�™5k=zô`ôèѬ\¹'''vìØA~~>GŽÁÚÚúµÊÿýŒ)ŒDϺðèQ4×oÜ*wÚü‚®\£o¯?y†ã'ϰcËjöëÅ/‹~狱ñýŒÉLŸ9Wkp>$—ªUHMK'66žÛwîáRÕ™°°kræìrrrùì“ñéЖE¿üÀуÛu&k>Ú2jÄP~œõ-b±˜={j÷Õt«N~AFèˆm[· *ú1&ÆFŒ>˜‘Ãcjªû‚ŠŽŽA$Ѭi#D"Þ =00�ù(ºü“ïƒQD”<`.ˆÈ(1è÷‹$§¤¸|­Î øH°f ;mÊ—Œ=\G€zªV©Ìÿþœ:sŽÝ{Ò½«/ êÕ)sÀ0qÂXÔ¯‹R©$3+™´ø@)55�?—¯áç¹ßS»–R©”:î5™8a,ë6l-»¾Ò302zý¯i'N�%òQsg‹££æë~'Ÿvôþ +›6ï QC222µÀýádddÒ´‰÷;yÎ(•J®]¿©@MMM˜üÕ8­ úªÜŽ™Â”Õ5b°KUg¦L§óõ.//�M[v0<ÀÿµcZ¼Nd2)�¼=™þý�|;SóoïþC4kÚ‰D¢µ:tp°Ó 7ÿ4fSCÏŒæ�™BAFF&ª§îhå¾77nѵSGÄb1^õéìÛžÜÜKó,�g8:ØðíÔ/Ù¶m=Ý{to¦¿“–¦qu¿pþ<�Oã )Ë!Ôr¯�R©ä·Å‹Ø¹}—Bž[ z5ôF&“±cÛV‚�á¯?þx%aãeT¬T §Š9ö,öíeåò¿HNN¦i³ÒÏ!—k¬ ®„]¦°°+++232Xø'�,ãáƒåëëÞÞ±jÅrÎ�9ÃÔI_óí”)Å„×jÕ¸sû6Ožõ;¶nÕŠuo Ç ˆŒŒÐ>£EFâôÔK¦¯OÎSW§ì¬,23^¾°�……ñqqZa$ë+_§Šµ1§r²³9vô¨Ž˜——Wþ6‘�•…‘±1r¹œ¼Ü\GGëXì—Ö‰ŒˆÐ–ÏØÄ¹�éäçk’ì¬, u\v_‡ò´‡Ò¨V£7®_#--�¼Ü\Ž:DFFU]ªr÷ÎbcbP*•œ>y²Äç–––ܹ}çi0îÛ˜š˜ 70@*“ñäÉ22Ò)**âÚ•«o¬-I¥R\«¹réâEm´··ï‚~ƒ`É$ ðN ËËÁQªøÇy”ÍÊM™?~œ¾}ûréÒ%‘H$Èår¬­­¹|ù2^^^\ºt ///222prr"77—{÷îáääDbb"îîî(•J¼½½qrrz-k…Ç1±>¾�èÝ·o©i¼¼qþÜ9öìÚEó–-éÙ»OžþC†tàçÏžÅŵƒ†-¶X†……¾�;³sû6òóò¨àT_ßW¾Ö™uG°6<ˆS ×HÌOÃZߌæ6uʘž1h°f%«ÃAAˆEb:wíFë¶m_éüžžtÿ 'ÁG��œœD£&M8sJHÙ·sÜ¿OðÑ#x5lHÍZîܺyƒð‡©Rµj Bu<[7oF*•bmcÃ�€a:+ËÁó˜L"‘SS>¾�ÊŒ«#‰èܵ ÇŽaßž=˜™›iãtýý¸¯&Mf׎,Z¸€Ä„,­¬hݶ­ŽÓßq®R…ö}øã÷ߘ:}Æû`R©re\\\Y¿f "‘;{{ª×Ðwsscû¶­ìÞ¹#cc¬m¬_:¾nèíͶ­[ˆŽŠÂÖÎK+KÄOW{öéÔ‰{÷rëÆMŠ”E4oÑò¹åäęӧøëÏ?�J¥têÒµØÊ|/RÁÉ ™TÆÖÍ›166¢qÓf\8žÊÎU8ö ‰ ‰dff ‰¸wçuë×£NÝzøtîLÐ�\ A¥TjÝO?Nµê5ÈÎÎ&3#WWNž8Aÿ^«^ËÛJÃÎÎŽ­Z±q�f×jÕððôD"‘йk7öíÝCVfvöötîV|�”–­Z³w÷n-X€‰©‰6Ö•µµ5žž¬Y¹’üüjÕv'ñIÂ{–ûøvb÷®],ùu!æætëÑã½|çˆ,,¨ór•Âì_à?„ºØßºlµöÿªnï´d­�LøÕÞéå16.šcÙ™å:vǦT¨P�%K–píÚ5*W®L·nÝ8|ø0jµšæÍ›³iÓ&âââðòòÂÍÍ���¬­­qss#00€!C†���̓pww§}ûöÄÄÄðA¿€r—{Ëúåй‡ß?®Ç‘Ã3fô6lÚÎŽÝûˆ|ME'GZµhúJn@%Ó¡]+¼½<ØèQQ�™;{:îµjЬugòÿæ . ðïC_&cÁO³ørÒt²ÞÀ¡o y- ,Õ@™’OüÜÐWJk÷• }T;cÓi Íš7ÓÆ)ø/p1$„[7oàݨ1vövü¶x1áá,YöG1aMàGNv6111¸V«F~~>þþ:ö­X ¼.‚%“€À;äXv&—rsð4x½¯ž—rsÊ-0ÄÄhÌi{öìI“&M033C­VÓ²eKD"‘6.SJJ ÖÖÖÒºukŒ��‘Éd|ñÅaii‰J¥ÂÙÙ¢££‰‹{ò?«Ç?þZÍù�Ч–ß`anNZzaW¯£/“ BÈ?äÊÕôú +Ë—ýŠX,&*ú1ã'NêU@à?€D"¡y³Æ<�ø%0äÝL¡ "™³)f½ª’¶ía¹Ò™õªŠÄB›cþðûYaH@à}õZ5ŽóìïQ«ÕØÚÚòÉØ±‚Àô¾MÞ¥R®^¹ÂÙ3«é6íÚ “À{‡`É$ðäýµd¨©/g½“3^-ž5¢#¸•Ÿ÷¯¼+�¼=Ñ“H8}ö‚ÐDÿ%H¥Rôô$ÚàÑÿ~úõîAÝ:îü¹| ‘�þß]¿¬‚1Öc4±á²/>y©Ðäèïîš ó󌦪‰£ÐˆþÓ¡T*1U@@àµD&�ÿ ï·È·¹_ì+”[hR¢f\ÜãW²b(Î3·9eJ>ÙâÉ»�BaB.  òíà]¹·Yzš@¹_»ûÓв†Py/A™þƒ¼ÿ"h,š¾´²{©ëܥܿ%Åÿk-˜Þ7dŒQt®ŒÌÙ´Ìãj™Ufh_Á‚I@@@@@ œ"“À�‡ÈôŒÖF&t06¥¾Ü;©&LZ|aay9eeÖKo y- Ý­0¨ªSMìk}5Íœilí.X/ ¼"Bào�ÿ1Dz3!I@@@@@à@C³ª låG�:u„à¹o€×™D"ææ&H$’bûÒÓ³(((jV@@@@@@@@à½Ä§CKúôéE­Zµ‰DB…¼!^ù“�‰‰³f}Ê'Ÿø1rdïbÿüü|±µµdР.Ède/yikkɼy_päÈœ:µ’Å‹'ãìüz>ï‹OÒþ}áÂz 4+"|ùeþŽX,fõêYÔ®íúZùûú6£S§æ¯”¦S§æ\¹²_ßfÅömßþ û÷/}íW»¶+ë×ÿ@ÕªN|þ¹ÿ+ç±dÉš7o ô�ÿtömÃ_þÊôéÓpww&�7Ì+[25oÞ€3g®°oßÉ÷ÛÙY1mÚ(ÌͲiÓ¡�322`ÕªYlÝÄìÙ�(•Jú÷÷eéÒ)ôèñ9ùùå*�L&¥  �Æ�ëj·�3›üüB¤R=úôiOãÆƒP©Tüøã "#c^«¢mÐÓ“¼rºÜÜ|ÚµkÄ�§µÛœ�±··&55ãµo\xøcfÏ4Ÿ»»Ë+¥—Jõøõ×uØÛ[óÙgþŒ;‡Ö­‡sçNþþ]8sæ ë×ïgóæC¬[·�Æ�ë2p`g† ›F¿~_R»¶+þþ�K¼ÎÂÂ"Î�»J³fÏÝÒÚµkÄ‘#´¿;wnIË–øù}Eß¾ðö®M�m´û»vmÉÀ�_Ó·ï—´më�—W-í¾ôôL¦LYÄÍ›˜4i!NN¶L�ú“'ÿJûö#IKËdâÄaÚãûôiϘ1³ :[¬¬uëV§S§O˜>})_}5™LŠ££ ãÇaôè™ 0Qp¯xïéß§ë×þɸ/>&�wÈk¯.—™™ @Ƶ7nÕªUÂÄĈøøDfÏþ‹´´²WËrt´%))­Ôý­[{qóæCÂÂî°nÝ>ü##._¾Ehè­×*{ÇŽMØ¿ÿ×¹éÓÃÄĈ¤¤T|}G“’’ŽBaLQ‘ssÓbé;wnÁÎ�ÁZW³­[3hPWÖ¬Ù[âù>O×®­ :‹££ ‰„ÈÈXíþöí±jÕ’“ÓX¹r7|ІíÛ�tN[Ÿ—/ßÂÄÄH[ÿÅë­!G�^àæÍ,Y²‘ƒÓÆØ»÷$11 %¦Ý¾ýJ¥’ÐÐ[dddc` §]»F=zžG�âØ¼9ˆ®][ =G LêÕ¬,T‚€€€Àÿ3®ÜŠüŸ—¡ŸnôîÝ §ŠNÿoïý»BcøDµêÎïUy^[d:zôææ¦ôìÙ�šZ ¦>}:°gÏ ââKM—ˆ••Y±í5),,ÂÎÎ’5œÙºu¾v_xx4rR^û¢ml,yð ê…| ‘H:´;:4!99•œœ<­ðó"vv–xx¸áãÓT»­¬òœ;w•iÓF!—ëkE›±²2Óº >«kksíïû÷iÿV*Ue^›¥¥ññÏë=%%µLM�_ZÎ’Îccc¡“æŸÔ»€0Ñx Ô—zöÀÎÎN˜l¼g“ �ÿ_èý“Ä[·ÆÈÈ€Ž›ê¸ÈYX(xÙbW®Ü¥}ûƇèlŸ81€µk÷‘œœNpð¾ûn €ÜÝ]HJJ@¥R¿v¹SRÒuDœš5«< ì­‡—W-úõû’ôôLºti¡ãæöŒäät¶m;¢ æ­P˜”(˜=£°°ˆ ®Ó¼y}Ú¶õfƌߑHžOJJÃÖÖRûÛÖÖRÇÊ«¤XO¥‘œœFåÊÏWèS(L‹Edff½4¯’öiêÊBûÛÚÚLè5ÿs$1#Ò¹K'lmm… xxå˜LYØÛ[k¯^½‡Õ«÷h&== –– 23sÊÌ'0p^^µ9²7ff&˜™™0vì@ ‚ƒC8u*”V­¼¨S§R©}Ô‡1cú—™§L&-×5=z�.]Zâäd‹Ba—_`gg…BaLffÙÙ9Ò«W{¤R½ò—iÓtÇÊÊSS#~øá3Úµó.󜇟cÀ€Î˜˜ñðat±ò Ü…ÂSS#†íNpð…Wº/Ï®ýøñK´mëMõê•‘H$|òIŽ ymQ.88„ví¼©PÁ##zõj/ô�ÿ2™”Q#±kû† &�÷ˆW¶d:q"”±c0þ�ííÛ7@$t¶Ô˜AÏÈÈÈ& `*& eçÎ…ˆD"®_¿ÏGÍ$++‡¬¬¦Oÿ�3>ÆÊÊŒ[·2mÚÒRó;y2”={ѥ˘—^ÃíÛá,Y²‘ߟ†‘‘'N\bãÆƒèëËhÝÚ‹C‡–ÇæÍ‡?~mÚ4äÊ•»üðÃg¤¥e°fÍ^*V´cíÚ9Èå2Ž»Èòå;Ë<ç¹sW™5k,6(¶oÏžã89Ù±eËO8pšmÛŽ–ûž„‡GcnnÊüù?þ'fÍú“¹s¿ÀÔÔˆ°°;Ìœ¹ìµHDD ‹odÅŠ™¤§gräÈyêÔ©&ô�wŠL&å£Ó©s'ÌÍÍ… xYX6Pçå*…š(W׊téÒ’ Ö¢V«ùê«RRÒ Üþ—Z]ìo]W@µöÿªnÂMx�151âÃéС=ff‚Û¾€€€€€ÀûŒžPeñðácT*k×ÎFOO�ë×ï³fÍ¡bÞ*æ † ó§cÇ( ¡Bþ–LÿAþ]–L­�Lè`lJ}¹!vOc€Å–—CPVDz3ßø9 �LÐÓÓ�ziëåÙV±HDaQ9o¡ %áè`ÈáChÙ¢FÆFoõ\!Éw8—xƒ[i$ækV¶ÖWPÓÌ™ÆÖî4´¬!Ü�W@™þƒü;D¦šúr¾´²ÃÓÀ°Ìã.åæ0/)ž[ùyo¢Ë#—Яÿp Pª”ˆE"Ô<—˜41âՠ֬ꘛ›Ë¦�ËÉËËù[Ý ¼9œí6l-[¶ÀÈèíŠK3cX~€›i‘eWˬ2C«øRÕÄQ¸Aå™q "“À�÷_djmdÂ/ö�h¥�²Q¢f\ÜãdÕ$‰P«Õ´hÞŽV­Ú‘™™†X,F$±X‚Z¥B¥Ö, ­R©P©T¨ÕjLL;v”S§�hóxSTr²gä‡4kÞ ¹\þÖÏ’|‡n¬ÀVnNG‡†xYÖÀÑP³zrLN"“ïp(6„'y©|íî/X5 ”gÞ)ˆLÿ=Þo‘©¦¾œõNÎ嘞¡DÍ€èˆdѤ0UФq[d2)b‘±DŒTO�ôôL¤R=ôõedfå`h`€žž…EEˆQPXȩӇHÏH/÷¹l¬­øaÖ4êÕq§Ÿÿî?£õ¨§§‡_¿žx6¨G5ת$&%sûö=þZµŽ„„Ä7rŽÍ³dá\¾ùv6»öê® Y¹REöl_W,̓‡á|Ðw~ýzÑ·W7ìíí »Æw³".þÉ[kW ŸŠÈëZ£g®OQj>yWI?Uâ±g�ÀÈÈ�þþ#¸}÷>ßOŸL÷®¾|Ðw0F”y® §‚¸|å£?�ðFÊ^Źþ~}ønöO¯”®g�.øõíI¥ŠN$§¤°eÛ.–¯Z€SGöïÚˆR©y¿‰D"ÒÒÒ9tä?Ì[ˆJ¥bËúå,ýc9Õ\\=r(b±µZ­}fLž6 ÷Zš‰åÜù‹Ð—ÉóñZ·lŽ�µ‘�¢Xü[ 'OŸÓ)ßþ]144 MÇP©TÈ 9}˜Æ-}ÈÊÊ×ÿ!^·¿*CùѼY#&LœFjÚóg²©© ?Ïýž³çCX¾rÝ?>O5ת ìßkkKž ×jÕ™0qâÉïbHׯ]¥Zµê4kÑâ­•{mx§®‘˜Ÿ†µ¾Ímêà_¥C‰Ç8ç*U˜>óûwZ/cÊ×y­}ßXYYQ¿�½ûõC&“QXXȈ¡CtÒ˜˜šâáé‰ÿà!H¥R�}q±±:x€¡Ã†¿R9Î�9ÃÑ#‡‰ŽŽÆÜÜœºuëѳOm?œ:yôêMòóó™;g6œœ:l8"‘�÷•M6àéåEU—w3óT«ùaö,>û|†oØ ÷xp0­Ú´ÑþÎÉÎfßÞ½<ŽŽÂÎΞN]» P¼ b�¿Þ1_ZÙ½²À AÄ—VvÄD¾rÚgH•*Uäþ½D?~ŒL*E,–�™•�oÇæ´nÙ™L�ðˆ6lÜKFF6r qpp R¥Š\»~½ÜÖLM›xãåQŸå+×÷fÅ;æÍ™ATÔcÖmØÊ­;w±³µ¡}ÛVlY÷ßÍþ‰£ÇN¾Õû˜––ÎÒeËŸMŒñ÷ëCDd4Íš6bòWŸ³ÿà=ÁGeÊ×_0æó·3ˆµåŽÌÙôùƒÝ\ãV�U2%qÙ�ÓˆÅb¾?–€‘Ÿ¾òùþ\¾æ� f±qOX³~Ë+¥4°/=»waÚŒ9ܽÿ€j®.Ìš1…œœ\6nÙ¡àÙ¸­6M¥Šؼn9×oÜbϾCÚíËW²,p¥Vl‹Š~Ì­Öî&2=cÞ3(,,â£1ãILJ¦YoæÌœÊð�>ãÎSÑ®VÍȤ2òó ðò¨Ç…‹—…‡ßœ×iǯKAA! êq$ø„v›Gýº¾‘üÅb1}ÀÚ [¸zíÛ·aÔˆ!Lœò2™”V-šÒ´qÃ×™j¹¹0dð@7iŒL&{§÷ieø�r L€ö˜Ã±—X~€™uGüëÛj×îݱ´´z#yed¤³<ðOr²5¢ùÛ™¦^ ÔqmLÌOc{ôIîfFý£{ò&ë¢Üã9‰„n=zPT¤äö­›:x€ü‚|†?¿ Z¶n�J¥æÎí[ÆÂ‚îôÔÉËÂÒ’Ž>¾¯tþÛ¶qþì†N•ª.¤¦¤°sû6¾ûv3¾Ÿ¥‰Ùù………üòÓOØÚÙ Ó{ÆÙÓ§hÒ¬Ù[~ç°aÝZ232ðòn„w£Fïu½´jÓS“õ½-,,äJXׯ]Õ™ÂÒÒ’ž½{ráöí§ÿ€‚È$ ðÿ™ÖF&/�ÁTž†´62ye·¹g¢�²H‰H,ÅP.ÃÐÈ€ä”4† êAÇ-™1s!.U+Ò¤±sf�ç«I?¢V©‘JňÅj”EE:y•…¾¾>6ÖšAÛÍÛwÈ/(`Ëúå|ü=ºu"*:†9?þÂõ›·ùüÓQ êÏö�{騡 II)Ì_°„Ý:áÝЃû÷Ã?q* ‰IH¥R–,˜ËÞýAüµr­öœ²"xð0‚ !¡,úån߽ǒ?¢P(hӱ͛6fé¯sÙ°y;³ü…ù?~G»6-iÚª•+WdÒWŸãZµ ‘�¢ønöOܸy[›w�Ú50SS¶íØËâßIKOç·?Vh�™ýÝ7¤gd0ûÇŸéÚ¹#±±ñÌœýYÙÙtïâKG‡ëÊÑÑž!þýq°·#þIkÖmâQÔcÚ´jŽSG*:9beeÉÃðHÖ¬ßLjjšNz…OE�éEdΦ(|*–hѤR©ðô¨G›VÍ >~ªØ~¿¾=õᓹyó6½{v£S÷þD?ŽáÃaƒ¸|åû±ü�_qu©ÂÚõ[Я……Ì™»€àã§ømÑO4kâMÀÈOIMMcû¦Uܹ{¿Á#µ–=¶¶Ö  ±qu©Â }±¶²$.þ �+Ö¯{ͦ¦|¤MMLx’�Àå°«œ:sŽžÝ;?u±ñÍ×ã‹YT”‡:îÕ LÆ^Å&²ï‚�ä;ÜL‹ÄVn^.�éE¡éZÊCn¦E’|ç½w›»ÊŸçÓ¹k7®^ ##=ƒ&͚ѷ$ {víµZu7mÊœYßó8:šŽ>>>„žžÿ!CñðôàÈá vmß�¹…9ÎUªp<8˜y¿,ÀÆÆÐX ¸¹¹zéR©åILLäà¾}$%%aaiAGßNØÙÙ‘””Ä�½{Q˜)ˆÇÜ‚–­ZS©re�ôkÃJ��u3-’µáA¥Z4=·ìß»‡cG�’™•…››C‡ÇÌÌ\§.vn߯ŽmÛèççÇñà`2³²h×¾½úôàÎíÛ¬\þùyy4kÑ’Ý;w0üÑ´hÕŠsgΰsû6’““177§k÷´hÕªÔgH�ž½´ïâo¿™Â©'èÕ§OLj––ÚcRSSù|Ì'ÄÆÄË+55UkÉô8:šC�–š†¥•%]ºuÇÊJW@KHHàà�ýÌœ=G{íìíùè“1|?c:GáãÛI{¼R©dñÂ…(¦Œ9굦¥‹~E¢§§µ®S·�7`õÊdef’••�ÂL�§WC<<=Ù»{‰‰‰ZñmóÆ�4kÞGGÒÒR9¸ÿééšÐM›5£f-÷2Ë�œœÌÁ}ûÈÊÎB.—ÓÑÇ;{{ÒÓÓX³r%c>ûÐXy=~ü˜^}ú ‹ßhß,«Þ%;·o£eë6˜››—ëx™LÆ�€aœ<~ü½zÖ•ÖæO?Nªº¸°ðçù4nÚŒ‹Î#–HhèÝHû|»}ë&'ާ ?Ÿj5jЮ}ôôôˆŽŠ"èÐAr²³qªXßNÈ ÊU¦˜Ç�9vô(þC4‰q±±=|ÿ!C½t‰Ä„'$k+Kll¬©éV€š5ªiþw«Î�›·Q«Õü¶h†ræ/X‚¾¾>?Ï�‰â…~�n� :rœ»÷0rø`zvï¬s½uë¸ÓµsG~ùõw’’SX±z»öÁÀ@ΰ!pp°c˶]%4?=‚3g/0ö‹I;ŘÑ#�H$4oÖ˜Õë61áëo‘ˆÅ´jÑ´XòºÖeÞ‹ÒöÇÄÆq!$”ñŸ\l²X¯®;“¾úœˆˆ(Î�¿HÏ]Ê<‡™BAÓ&Þì=pss3¦NÖ¸ÑÍ™»€‚‚BF� `Ôˆ¡Ìœ3_G`ú;Cüûs0(˜1ã¾æþƒpºt*>qps«Fl\¼V`zÆ™s!LøúÛRû@­š5p¯Uƒ3çB^»ÿyyÔçØ‰ÓÅ^üËW±rÍí¹:¶oÃî½ÙèíÚ´x+êÉÓ¾gò´ï¹ÿ œu¶0yÚ÷¬Ý ±¤>d wîÞcÒÔ™Ì_¸”îÝ|14Ô �®^»Á7ÓgóÍ·³¹~ã½?èZv’ËùxÔ0Ö®ß̤©3Ùµ{?~}ŸMß¹{Ÿ&¿é³ÑӓТ¹fÀ¼~ã6&Oû¥RÉÌ9?¸b ¿,ú�ÉÓ¾çÐácœ=‘ÉÓ¾gæœùœ¿p©Ø5•§  êrîÂE*8: “Ißês¼Aý:8W®Ä¤©3ùnö<:´k…­mñ~VZÿõЗää>Ÿ0EÓÖG�@,Ó­sGÌ &N™ÁÒeËéݳUœ+•X†ˆÈ(ÌÍÌ0S(024ÄÖÆš‡áÏ'âݺú’””Âø‰SùaÞB|}Ú¡05åêõÔv¯ h,0+Tpàæ­»:ù§¥§óãO¿"‘H¨Z¥2Ý:ûp14 •J…R©dÚw?°pñ²r×Yã†õY¼ðG~ûmMš4þŸLç5BZG‡†¯œöYšgyü:xO/*U®ÌÁýû8|´Äã²23¹~íMš6%33“UË5Vº÷ïÝcíªU88:P˽6'ŽÓI÷àþ}®„…ÑoÀÀRË R©Ø¶e3µëÖáóñãñðôdû–ÍZWæÇ1�±wpdì¸/¨ZÕ…S'NËãTµ2¯óeû/œ;Çæ�qqu¥K×®\»zU{�%qìèQ<z#××g÷ÎÄÇÅ‘“�Í’_¥° €6íÚ|ôÈóþ’–ÊŸË~ÇÀÐ�þ¢/—³â¯@òò^Þ@,ãáé‰R©ÔºÑ¤$'³g×NvíØÎïK— —ËiÓ®}™yØ¿ïF�ø|üx*89qötñHwo߯յšV`z‘–­Zsóú �‰î²¥KÈÉÉfäè�ÿ±àÒ·¿ŽúˆÁC½BRRƒ‡Уg/,­,5úc­ šð‡‹åµo÷\\]5úcúùùqãú�bï忳{çj׭èÑÓ¬y vnßVlx@�ž=߸Àô²z¸pþ<«V,gíªU:e+**bÿÞ=¬^¹‚ráüùó »|™­›7kÓ�?wŽu«W³aíZîß§ís‡ƒñàþvlÛʪ˹uóŸ=Ó’““Ù°v-Ö®eÍÊ•Ä<~üΞqåióÏ„ŸÑc>¥K×n B©T’””ÄáC‡èÓ¯?#FŽ"áÉB/]"/7—­›7ÓÑÇ—1Ÿ}Ž©©‚½{ö¼±2_ »BGßN|2ö3T*a—‹„”H$ ÿp$}úõ×Ùž���\®¯uÉ“H$˜™›‘‘‘ñÞ½K&�wH}¹áÿ4µÄ"¸{ï>7nÞÁ­†+É©ilÚ¼‹n]ÚsúLW®ÜÄÁÁŽÆ�=(*ÌG¥Ò§¨¨=Yù~ :й™‚ÉÇ0òS.…^Ñ™ÇÆÅ£P˜0h@_íd`Ö?sùÊ5{{QÑÉ‘ _OC.—Ó¡]k¬Ÿ~�ëÑ­_ó‰„ßÏgÇ®}|9i:_|ö1µÝ݈~CÈÅPF� pÅZüýúP»–µÜªsÿA85ª»bn¦ ‚£û¡EóƘ),ý}9ÇNžA*•2qÂXš5mDff¦özÿˆÂÔ”“G÷àëÓžm;÷jËýÙ˜‘ÄÄık�nܦÆ�¼øø£áäççYÜšÈÉÉ‘HĉSg8{>„N¾íp®\€ðˆHEi^ÖW®ßÀÁήøCܼì8&¥íW«ÕÌýy[Ö/× xÏèÞÅ‘HÄôïäQÔc\]œiÞ´ô/m………|òÙWdffQ¥rEš5m„\.'*ú1ËW­ã£‡¢V«Ùº}·Ž…XIdfeáèh�Á 96o/ñ˜ ö$&%¿´êËd\:§™TIÄbôôôX´ôOnÞºóÚ}¨‚£=÷T„HHJÒÆ¯IMM£‘·'§Ïœ'Ï©TJ�®,\¢RRRùæÛÙ% o&&Ædfe•™ŸkUg“´Æõ›·¹^Â}ÔÓÓC.×'#3ë�_ÓËÊмicV®^�TOŠgƒú¥Z½ ²²²124ÄÑÑžûÂùxìWTªä¤s\IýW,ãÙ .Ÿ~1 ¥Rɹ Q©UèéIhÜÈ‹ßÿ\IAA! ‰\½v/�úÅâ =뿗îҠ~‚�Ÿ¢~ý:„]½ŽZý|´yëNòó P*•ÈdRT*%r®^»I÷.>ì;D½:µ¹~ãv©nvrúöêAåÊN¬X½á•ëªicüú÷¥�G­xþ¿äVš&Þœ×kX"yYÖ`uø!mÿ5iBÏÞ½ÉÉÎæãQ#¹r‘ví;”ØwÇ�Ÿ€¡‘±±±Üö IDAT\»z…üü|NŸ:‰Z­&`ćØÙÙóø1W¯„iÛàê•+èÓ·_™n) ¨ÕjêÕo ù˜T»çΞ%>.}¹±HLÝzõ‰DTwsãöí[ÅòHÌO+ó:_¶ÿÜÙ³ˆD"†�\.Gn`@JrJ©ÇûBÝzõ166bÓ† $$xÀí›7éÓ¿?b±˜è¨(¢£¢8x°f»7®_£n½ú´ïБȈ>èջܖLeŽù÷í£Q“&Tuq!>>ž�Û¶òÑ'cÞÉ3®Ýº­ùrnýÂ`ç™pPXXHzz&…:[[kìlm¸}çÞ^h]£Ôjµ6SÅŠN¤¦¥s)ô *• ÷Z5¨éV�Àk˜òõtöÕ¼ˆ.„„jãíLž8ŽÉÇ=€*8hËøÌ*=#ƒ˜Ø8ìlŸ´ìðò¨ÏÂÅh¿=c÷Þƒ?Åòe¿²à§Y4iå«ó¥MajJRrªNšääT Í€ó™+€ZUrý¥æ—)4¥æ—ºïÞý‡lßµ��F åò•k/¼íÉÏÏ×N�oܼS¦È”•�CæSa!-=ã©€¡Ù·výFŒX,fÕº—»1­Û°•Þ=»òÓßËæm»¸{ï�Î1qñOtÚÍ‹â.�:²c×>@7&“H$¢Aý:,[ò3ÇNœ~í@ôqñO°¶.~îJ+P͵*‡�žÀ·c;ª¹VåäQ�ildˆO‡6ïLd266¢°°ˆ‚‚’…ƒÚî5™1u""‘ˆÈGQlÚ²ó%ù“]F�òn]|èØ¾ >zŒ�·àXVl¬­�êIHLJ&äÒe ìûVE¦»÷pòôY†õÇÐЀs.–X‡%õ_…© yùù:BB‰D˜™™1t°ŸN_±_þ�‹¡aôîÙ�àã§ðlP—‡ŽRÑéyPjk++üýzcllLLlJ¥J[~GGŒ iP¿6çÎ_*SP›3oææfÌ›=�»wïë/�M½èïG�:uÞš5Àë�˜¯)û³Uä^ibð4ͳ<þ TvvÖLÄŒŒ°¶¶&--µÄãäÚ/ãÆ&ÆÏë+!™L¦�9W©¢™Î�9Cb¢frtú©õ@\l,�"#uÜݲ³²0û[PZSS™™™èË嘙›iãr•ÖV¬õÍÊ’¬õËz›’’Œ………Vðiß¡c™Ç[YY?}î˜hÇI‰ šñE¥Jںо{ ¹Ê©'�éë—K<ÑégO?h™[<Ÿð»¸º2uú "#"ø~Æt—-ã«I“Jͧ½�ǃƒY²hÖ6Ö´iÛ§ŠÿvmVDF”,”¦$§`ggÿü½V¹2£Ç|ÊÖÍ› \ö;“¾™ú�â1mݼ ±XŒT*¥ƒ�o1¡’°´´ÄÀÐ�è¨çêòrs‘H$H¥Rn޸ΉcÇÈÏÏgȰáXX”¼ ONn.r¹¾Nù ÉÍÉA__F~~ìG,#yË––¥Õƒ‘±[7oFOO�Ä„'äähÞyQ�ic�I¥RüêZÆÅÅq1ä£F?·LIRbëVkâK`ddüƯE­V£}ÖØÙÙ‘——GnN††oýWž6è¤ÏÚ@ffÖ6¶:} "<œ'ñqþ±LG€-,(Й �H$/ý€ò÷ù“µmñ²”}¹F {‘‚ ÊéÊ'ˆLoµšüü\”ª"rrŠHOÏ`õšM|ôÑP.‡Ýàî½´lÙ”ììlþøsb±˜¢¢"*;WEfðÏ_f v¶6Ä?IÀ­ºÆm-þIn5\Ë'R¥¦SPPˆ½�-r¹>ææØÙÚàâR¿¾=™1kuÜk2"ÀŸ/¿þ–¬ìlnܼM«M±µµæä™s ‹B¯º’_PÀ•k×±·×¼`†ŒÃå°«èéé¡05%;'‡†žõ¨^ÝE;ywt°çâ –YÚ¶àÄ©3ÚmCüûÓ¦us>?™Ô´tnß¹‡[�jØØXû<¾PzF–ºƒc s3ÒÓ3P˜š–KØË»šˆq« eî/‹ÅKñíØ–Í¿0 OE__{;bãâ©^íõWçâ‡X,F¥R1b¨?SgÌ)õX±XŒD"fÁ¢eH¥RZµh �}‹Yáܺs� ŽTq®¤cåÑØÛ‹‡ *Ñ5Q­Vzù*·nߥŠsåי®\gòÄqÌ_°TÇú£ßž˜˜|ü4Ú¶¢wÿ"iÅ®.UX½|)ßÍš÷NºyFF&zzzÈÉÍÍÓ¶Ýìì®ß¸¥Øüe¤gd`ªÐ� ˜˜k…ÅÝ{r)ŒS'rýÆí7"H¿JZ4kŒ¥¥%3¦N|*FÛ`cmEBbÒ[©_ss3N�>ÏÞýAØÛÙ2êá4¨§±^+k` �‘™…�\ŽL&ÕŠ€Û·á̹ deeñÓÏKHKO× ðEÊÒWÿ�ˆŒÂÊÒ[[k*8:pïþC‘iäðÁì;Ä™s!¨Õj~œ¥q%-**âö�»x4¨K5W–o 5ª»âíåÁªµ�5^rJ*v¶6eŠL>ZÒ§O/jÖ¬ù^‰Kÿ_y©™`gg“””ôÒ˜5ÇTaJAAIIIXYYõüy›ššBNv6+þ Ôn»w÷.a—CuD&#cãb+Ófff`òÔú©<“¬æ6uØ}²Ìýe¡P˜EÞÿ±wÖáQoÿÜ].vñ'Xîîî®…¢m¡@)P PœB¡w‡â‚BÐ$!î~¹äî÷Ç‘#i¤ ÒBûyžiié(•JMÛ”’œŒÌÀ@SûõÀ•+Þœ<~,�ƒõ‚ظ~o'ýÃGŒ,’T~åÍUoo†~5]]]Ž>”klT¨H™œDé2e¸ëã£q®%•ââZž¦Í›ÿS�Ä9|Që|AíŒLf xÂÃÉ�‹Cf`€‹«+­Ûª]c(•JÂBCóø<Ú½sÕ=8:”#.>�ÐÐpüžàèP_ßdd(¸zí&©©i|3æ+Z·lÆÊe 8çy0×d­uËfŒ>˜…¿ÌD,s츧&¬Byä<{þîË`DdÕªVfÙâ_˜Ñ| »sû6áaaš8ZZZ¤§¥}ð³‰DØÙÙi¬ãÂÃÃ104@WO�ÄÄärµ ’’œŒB¡(Кò})J�/gWW=|@||<éiiœ=}šÄÄD  ôͲ²²¸rùr¾ÏÍÍÍ ðxëŒÛ#CCtõô�jkAbb™™™<¸wÿ£Ý¯T*ÅÉÙIS?ïùúbccóÙ9ýÁ’I@àÅ7=;©ñ§ñ¾ˆÅb’“’©R¥*{÷nÁÖÆ†øØPN�ØÏ¥‹çÐÓ7D…+ KD"ÈHOG¡È@™•©V¨>��7¡<{Ä��}zñгæê:?–þö»·­ã‘Ÿ?Ófþ9ü<ïÞ{ Ïù7où0bØ@¿õßâçÿ„¦�pã–Ñ1±Œû0–93àå«`Æ}7•'OŸk&¨7oùеS;ôôtY»a GO¼™Ê–k‚çé¥^¶Ò³[g\]�¸wÿó/Ï3 T*•¬ücû÷¢W÷ÎDFF±rõ†¿,ý•¨µ�0n] Ý*h™ê�''ý~Ôß LÙlß¹—Ý:bk£žˆŸ»p™5ë·Ð«{g¬­,9éy–Ží[ûyOÿa"ZZZü±v3ññ th׊?N¤GßaùÞ£J¥bóÖÝôêÞ™áCú£qýW6nÙAZZsgOÃÖÆŠˆÈhöì;Èö]û ÍÓë×!4kÒ�ƒ9|j— “fð͸‘l^·c##^¾zÍÄ)?ñð±?sgýÈùKWòĹxé*mZ6çÆMõÒ¤KgŽ¡ÊñRÍ™·$�O¯aó¶] êß›ùsf�¥ÌâБ„††S®Léb§¥P(X±j=}{wC¦¯OJj*¿¯Þ˜gyèÝ{¨[§íÛ¶äèqOÍîr‰„S¿×ì.W9w—³³µ¡{׎üøÓÜóP¡¼ ¡a«ªì÷uÊ÷ãñ¾r�Q#†0sÎB&OÇ„É3ЯGŽ�Ìå »¸\¼|g'æÍ™†B‘ÉŸ{\¿yûÂtalݾ‡Á{óÛÒy$$&²zí&²²²Øð(ýûô`ñüÙdffqÒóLž¥¢åÎÝ{´lÑ„c'Nç Û³ï#†"--ßû¹xù*CöaÎü¥<|èÇ��}4»Çý•ø„Ö®ßB×.4Va+ÿXOJjîþ'==�m[Vÿíä÷s¡‚IY.EÜãvL@±—ÌÝŽ Фñ¥Ð´y n\¿NRR�ºt¥N½zÅŠ_ÝÃN]ºrþÜYbb¢©]·.W½½‹=îèÖ£'§OžäÜ™3˜™›ÓµGÏbûèšSe8;‚¼ðŽ|@”< XVþ[�  A£FÄÅÅréÂîùúR­zuR¬ë›˜˜0jì8öìÜÁÉã'¨[¿>ž'OhÊ©Zõê<~ôˆôt9õë7àì/|ïú`ck›¯Øüç¾}ˆÅbÌÍÍiÙª5Ý{õÊuNNŸLú2Õ=<4th¡“ývÚsáÜYN;†‰© í;vÊ÷Üî={bmm;=» Á@&ýZu&|?©ÀçR¶\9Z´jͺ5«™1köG’sî.·võšÝårR§n]ví|·£pÛví8~ì¬\�T[W×ò>¾îЩ3§ŽçÆõëèêêÒ¹k·<.‰„.ݺ±mËflll ´.ûØ”´·G[ªÍŸûöa` £N½úܼqƒ2eËQ³vmNŸ:ÉÎmÛÈÌÊÄ­Rå\‚$¨wuîØ©3G�fðÐaØ•,I•ªîìÚ±‰Xíºª»û;Ñ´ª;‡@_&£¤½=ÍþÆ©¼çÉDEF‘””ˆH$âI@UÜ«R¹JUZ·k‡×©Sܾu eV:©wî¼|ñ"Î.®¤¤¤�”˜ˆ£“—/]¢wß¾¥ÌŠSçó/­­iظ1{vî@.—ãäìLu$ í:täÄñc$'%cmcC»Žy7HiÔ¸ Ç�eåòåÒ±sõ‡ ª{x°}Ëäò *Vr#*"ò£Õ•ÖmÚrôÈV­ø SS3:vîüYö?"3ójªô´,aö/ðB•çïÜ“{•æ·Cy³4gMd†¬°±ÿ 4Ƈs!%©Ø ±J¥¢b7Îzgïž-4kÖŒ¯FŽfúÕXZÙ’••…R©BK¢…XKŠŽŽ>::zddÈ)i_Û’¶øøiÒ*.ûwmB__�v�û|p9Ž6�±£†³{ïA=ÁËWÁ”²·£qÃzÅZ$�?-›7¦V�êœ<}–ׯCX4on]©ß¤ò¿¬øòÐÑÖfù’_˜4uÉïá0´W÷Žtê܇Îx¿nŰàѬtMY]kb±âŽº¹”ˆô8~pëOÍ÷pþOr×LJß~]Ê×£Ç[XÊ%¬Ýº…ßãGÔª]kkVÿþ;/‚‚XµvÝ?âùs"øõkΟ;‹ƒƒ#ÕªWçÈ¡Cxž:ÉÔé3p-_^hTr X2 üƒ\HIâNZ*ïéßèNZj±¦œ¨TJ,,¬X¼h)[·íâÈÑã89»¡T)Q*Uˆ�²²2�L22R�ji£§§‹H¤úlÊqÝÆmܸåóÖRc:f¦¦Ä'$â{ÿ!:ÚÚ‚ò�Ü»ÿˆn]:°ií Äb1¯ƒC˜8å'¡\þH$ԯó Å˜z÷èHÇN_ž¸”MMsW*š”áqüKV?=Ì(§¢}^ýô0éqT4)óÙ L'gg.ž?Ï‚_æ¢R©°²²bÌøñÿw€­�b‘˜-›6²~ídôìÝ[˜òA°døòùZ2TÐÑe—}Y$Ï)^*ú¿ÀOž^üý­õ‘«‹+iI DF…ajjFjJRmm22Ø—´%55�¸øx´$bÒÓÓ±··#<<3Ktõeøùû¿·%SíZhI$\¹vS¨¢_R©--‰Æy´€€À—O¯î�©RÙ�õ›¶óâå«"ÅéÝ£#Ý»wþ”ýÿÏ“Þ0éîjZØzü­Ð´úéa΄ª—¹.®6 C»Ïþãããyúä å4>g>„ÌÌL²²²>ÊöÝ_üS¥"=-íÙ9K@@@àKE™þ‹C€<N"¨—Í-³)Yd¡) ß……¼·SN‘)6*•2[»’øùù#“É�gÈquv&19‰ð°p´´´HKK¥b…ò¼|õ --Ì--  |o‘I@@@@àËbð€žtéÚY³…ý…ìesVº¦´²­I sW�Ÿ¦7©QÜŽ àtè-"ÒÕŽj¿„erŸ‚È$ðäó™@mÑ4©„õß.�»“–Êâèð÷²`Ò¼èo…!ggÒSS‰Šˆ@GW‘XL…ò.>G,£ÌÊBOO++ ž>y†H,Bž–‚¥•5ºú2Ÿ>D&�ÿ0‰˜áCúÑ®}[¬¬¬þ³÷ù<é [‚Nñ8þe¡çU4)Ãàrm¾ &�ÏÁ'“€À¿„Ÿ<�!o^ÒDfHK#Üuõ±–ª_ÉpE&¾é©x%'~�¦<¨ÀÄØ¥R‰®®*•CCcÌÍK ¥¥EVVÚ:RŒ �13/�––˜ôT}Œ�M‘+<ÿU´µ¥ Ø›öÚaiiùŸ¿_C;æTέ˜®G=Â/þQò,tŒ©`R–:n‚õ’€€€€€@1,™þƒ|–LÿÎNN$Ƨ ©°³³#00]==²²T¸8;�”œLXX"ÈÓÓquuàõ«WˆDŒL xòô©P½þChkKùú«�´m×SSS¡@>Á’I@àÿ 8;;¢PÈ166E,ÑÆÌÔ„¤¤TÌÍÍ026ÂÌÔ]mâãã)an‚X ÚÚ:DDEå' ðÁÈPÆWÃÒ²e LLL„ø("“€ÀÿÙ~”T¨~Mll<úúqhëèbmmOäË¢bCÉR*‘éëb­oDhxÁ!Ѥ¦$aff‚T[•+-�/s3cF=ŒF�ahh(ˆ€€€€€€ÀÇ�{ Ëåþ{Ëå B*•bjj‰Tª�X"F$!Ó×#--‘X„Jb‘©TBjZ:¨T(UJÄÅE¢P(„ê% ðbnfÌȯÓ¬y3 „ø$–LÿG( "#ß! ð‚�­%Ç ¢Q£†Èd2¡@>)‚È$ 𣴽 ƒ÷§qãFèëë " ð� ˆL�ªÊ… ð/ “P»nC*ºUB*Õ&$øŸÛ´ÁÙ¥¬ð>ž¾ A@@@àÿˆÏ­ÿ|2 ü|2 üQ±¼#ƒö£v�Úèèè" ð¯ðÁ–LVVæ”+W€  ""b„Rø¨ìæBÿ~½©S·ÚÚÚB�ü«|°È4p`ÜÝËp÷®K–l-R¼I“Ó·o[”J%"‘ˆ¤¤¼¼®³`Á&²²ŠoYU©’S§£oßþ•‚\¼x"ÍšÕB¥RßO||gÏÞ`áÂÍïu?Q¥’+ƒ fÍhi Þ>>xT"‘HÞ%VÌAή]'Y¼x 66ìÚµÿ ++stt¤L›ögÏ®gïÞÅ´oßP]¤[ÐñÂP©T|†¿—/ûhœ“·k×�)S–!—gÎ¥K>´hQ‡Ë—}òM×ÂÂ,ßãùñÍ7ý3¦b±ˆŒ gÎ\gß¾Óšð;Ž“’’ö6¯"< À±c—:´ *8P·nNžôæÅ‹7ÌšµCCMšÔàñãçøú°sç <=× “é—DåÊNØØ”àÌ™œ9sCSVùo×®!‡Ÿ×8iÿóÏ3 Ð�?ÿ™LL ™4i0³g�fêÔßòœ›=¾òññãàÁ³üüóŒŒ 8qâ2¿þº-ÏùOŸ¾Òü­T*ߦ!ÂÒÒŒ™3¿Ö¸páv�ét\¡ÈÌsÍß~ÛɶmÇ ¼ßÈÈXÌÍM�Ê…¥¥––æ<{öZs<ÛªN�ʸº–åÏ?—æ FOO—Ý»ObiÙ�mÛæ‘””¶mGÙ·Ï«ÀãÖÖæT¯^žÖ­ëåÊ[Zšœ™3ÿ`èÐÎÌš5šë×ï±`ÁFÂÃ…?tt™TÂ=ý>‰C‡Î³páw9&Æï&²e˪;w++3>φ )[ÖŽ ¾¥qã¼y‘+=•*¯cm•JE\\"#GþLTT%KZ¡Pd˜îÇOò=ž-¨‡lgß11ñX[—ÈfeeFTT±± XX˜¾"*”ÃÎÎ’˜˜Ο¿ÉÏ?¯ÔÄÝÜ‰ŽŽ£\¹’,^¼…¹s×Q½zE–/ŸÌùó·12’å{<&&�ÎrêÔŒ� )QÂCCOŸ¾¦_¿©ÑoèÐ.ÿºCõÿ"Md†,³)‰¤b�‡ž>»ìËò]XH±­šD"*• 33S:µoÅÓ§O GGGíkëêÕ«( Ú·oOÍš5ILLÄÌÌŒãÇ�“””Dƒ ÐÖÖ&55sssºtlÃŽ}G‰ŽŽÕ¤- ðáôìÞ�Î�;âàà Æ'æVL íP�¿tMie[“æ®Øé«ý‚¾I�âvL§Coñ8þ%“î®æ·þ‚U“€€€€€@(¶ó•Q£zbm]‚6mP»veºtiJÕª®¸»—§k×fÔ¬Y‰6m`m]‚Q£z9]cc:ujÌ“'/HNN£aÃêˆÅ"êׯ¦qÞªU=æÎ‡……)11ñdeeË9õ¹s7?¾/::ÚØÛ[±eËJ–´*0ݽ^~¾DtêÔ‘HD›6õ10�áïĹs7iß¾ööV2iÒ¬­KàííCãÆ5¨\Ù©T‹¯¿îÁر½øî»ŒÑm¢£ã‰Dhkkxüܹ› Ò‰%L12’±`Á74o^ {{k6mš�³siRSÓIII*èèY`ÊF‚ˆe6%© £[¬ke‹@ÚR)*T jÕªÔ¬Y“2eÊ`ccCÏž=éС œ9s///‚ƒƒiÔ¨ƒ ¢téÒ8::Ò Aj×®MÍš5Ñ}+P}*�©Byúx3tp¿N«VÍê4kÒð“]O[[ÊýÛ—xèã­ù™5c 2}}þ2ïóÇ9z`m[·Èw@¿žØ—´cPÿÞ<ôñ¦²[…B¯UÔóþ-ôôtyèãÍÜY?ænkcÍê•K¸á}šÓÇ÷3|È€OšãÖ¥°šR»u±šRãÖ¥ <÷·¥óxèãMÿ>=4Ç:µoÃCoúôìú·×ú}ùBî\?÷Qó¿vÕRt´µ‹ǽJ%¶¬ÿ�ë—<9ú03§OÆÀ@¦ ?{ò ÷o_âÞ­‹Ü¿}‰Þ§ùcÅ",J¨7ÆhÒ¸>ûwmàÞ­‹šóúxkþ?vp'2úxçJ»kçöìßµ‰[WÎpêè^†ê›'³gLá¡�7Žesß³}=M×ÿâÛöreKóÓ�ß;^ïÙµc='~W$�éÔ‰ã,øå’“rtHMIaÁ/¿pâØÑ�r?ññqìÞ±ƒeK–°võ¨—ëïß»—ù¿ÌÍõ³pÞ¼/æ9=Oz£˜ZØz°ºÖD:Û7ÐLvút¶oÀêZia«v±àÑž'½ù¿Ã\8wŽAýúòðÁýOv ¿ÇL�<‰q£F½Wü+—/³hþ|¢££¿¸òÝäÅÈKèzi:#o,aG�W¡ç‡³lÉÆ�Ř¯G²xÁž>yòIò6rØP–,\˜oز%K>x�f|¸hþ|Ž:X¬ôÃBCÙ²ic±óuýêUæÎžÅÈáÃøaÒ÷ìÞ±¹\® ŸñãTîúøhþ—ËåÌ™5“Í7KÿY¼` …â»Þ«—/Y·fõGK/::š[·òëâÅlÙ´‘°ÐÐϲœßc¹Ü»‰±H$Êemô×ÿÿnIMŸ>mèÞ½eöt˜G�ž1sælÚt˜ páÂ&bc¸yó! öäî^žÃ‡C.ÏàìÙ›œ<é�‹Ké"åþ·ßv0uêpN�úƒÌÌ,6m:Œ��/òMWWW;ßãBVV'.fÚ´L˜0�ààp&LXDF†ÿ V­ÚÚ5?!“éqéÒöìñD¡ÈdÖ¬ÕÌž=š%Lðó{ÎO?ý¡¹§ŸCÏž­HJJaٲ턆Fx<,,šR¥¬Ù±c>ººÚ\¸p›M›£PdräÈEÖ­›‰D"æáçšç!ðñ˜TºXSN¡iR k†¼yYì¸J¥ªU«†¶¶6±±±$&&’””DRR”*U ©Tб±1666 “É022B__ŸÌÌLT*U®¥¦Ÿ‚¨¨hþX» _ßœVÛVÍÙ³ÿÐ'ËkéRöˆÅb6lÞNF†ºÃòxò¶›E%· ¬ß´�úuk±`î |ï= ,\muÙ®u vîþ“{ñÇÚM„GFz­¢ž÷¹2{ƪ¹Waû®½¸U(Ï7cGð&4”S§Ï}ôkYŒtC»¬Ñ»ŽÎTƒÆ%Ñ.mDÔÚGÆ5bÇNœ&!1±X×;éy†Ô{X¾b ŠÌÌ"Ÿ_±‚++–Ígμ%x_½�©© “'ŒcöŒ)LœòÓ;qsÈ(<òÀÈÈ�Õ+3nôWüôó‚\éU­ÙX#ž<²Gó?�K\ÊL»vjÏO³çøôÎNŽü2{©©iš÷O*•Ò¼i#|ï?¤u˦ü¾z#ÿ5BÃ"ؾk±Ä¥nÝ»RªT©âÞ´´À£F ͱÀÀ@´´´>Úýìß»—ŠÝèÑ»7Ïž>áèáÃŒ=Š.ݺ嚘ݿw�èè/§]ÚtJ#0�rêü·çgŸs&ô[‚N1§Êpa ó‰¹|é¡oÞ0zÜø÷ŠÁãG‘§§Q÷=ãþ†\Ë7£äñ ¾L`Òë|ë]`@‹æÏCK*¥Zõê¤$§à÷ø çýÂÔé3pptüÇò^»n]�5"ÓãGÑ××+Vfææ´jݦXq8À�kWÞx_½Nrr* ê×&8$”ÉSgñòÕkV¯\Býºµ2bqqñÜ»•€À§ô8¥R‰«‹�O™v [kk>ö#99;;Ô«ÃÒå°mÇ^ví9€�LFÊÛò/]ª$!oBQ*•T­ìÆè‘C¹zí&‘‘Q4¨W‡oÇ�ľ¤σ^°`É î?x”ë¼Rövl^·’m;÷QµrEÊq󶓦ÎB.—ceeÁÜ™?R¾¼3»÷dPÿÞœ»p™©3æP¡¼ Ó¦|‡‹³#))©œò:Ç¢¥+ùáûñôéÕ�ö]úÃõKž½xE—žéÝ£ Ó~˜À¨ñ“ð÷ÂŒ'R«Fu“øcí&Ž?õn�hf†5¿QÁÕ™ë7o3kî"RRR©æ^…ë7o³|åZl¬­ð:ñ'µkzä™dúú èד ®.¤¤¦røØInÞR·{+–Îçø)/ZµhBff&§Ï\ÐÔ§lŒ[—Ê%0åD»¬Æ­K‘àù:ßp_�ÌÂ%+ò„V¦m[· v-Öm܆Gõª>gGvl^Ím_†�ü†ÅógѺe3Æ}÷/_Íu½ñcFðí÷ÓPdfÒ¿o<Ü«pþ’w®z›Í”ïdz|żÎ^ --œYs±aÍrdúúšº—“ÄÄ$¼Î^¤~ÝZïÝ&1zÄPúÉ‹—j_ˆ�û³hé ºtj§™êÕ©ÉËW¯Y·a+?Lúö“ˆL%Ì͘:ù;&N™@•Ên4kÒ�_û¸KÄbq¾ÏÄÊÊ‚}{ðó¼%4mÜû’v”²·£D sž½dû®}ÄÅÅ3°_w,-KòúgN{Ò²UkìK•"33“³g¼xˆÌÀ€šµjáV©r¾yptr$Ðß?—Èàﯙä$$ÄsêÄIÂÃB‹ÅT«îAý† Y³êwºtï�••Û·l¡vݺ89;¿û$'“Ÿ@�zõ‰D¸–¯Àõk× Ç9‡¯¨´ÔTîßó¥ÿÀA_D|+&€Çñ/±Ò5-’À”ShzûœÇñ/¹ðÙ/› ð÷gþÜ9tïÙ?Ü«W£N�ºlÚ°???T*..®|5r$†FF ê×—*UÝÑÓÓåÞ½{XYY1zì8¬mlP©T:p€ çÎa`h�ëù< dïî]„cjfFÛvíiظ1 …‚áƒáZ¾<©©©DFFâQ£•*UfÿÞ=¤¥§Ó¹kWZ¶j�+½Ô”R’S4׊��eÇÖ-øûû£«£CÍÚuèÞ³'R©”ù¿Ì%$8˜>}ûqìèºvïÁÑÃêvçÇ)“Yþû*~]¼yz:‹~]¨­n>¸Ï¦mÛ9|ð‡ WŸ>\<ž¤ädš·hI·jËÖ+—/sìÈaâããqq-ψ¯¿ÆÀÐ0ß2¿tñéiiØ—*M›¶mÑÓ×Çç΢"#ˆˆˆ >.»’ö´jÝ:ϤzG�W¾þÁÇ¿dG�ý˵Ìu|ëæMˆD"fÏ™‹µ�zçëàׯYµrw}|pptÌS> —,åúÕ«>x€˜˜LMMéЩ3 7æ®�¿ýº”v:rÿž/‰ ‰Ô­_Ÿž½{kƆ™™™¬[³š{¾¾8;;ÓÐ`J”(Á�k×xüè!:uæÇ)“¸}ë›6¬gÐ�¡ìß»—ëW¯¢ÈTP¿~úôïŸGà‰‹‹ã´ç)FHp0§=O�y sÚwìD‰¹]�DFFâyê$sæÍÇÒÒk¾3–¹³gqöŒ­Û´ÕœŸ••Åï¿ý†±±ÃGŒ|/�éù³gœ=£¶.‹‹�ÃÔLíâ¤^ýú¶×Bll,W._¢cç.Ÿ´ÍP©TlÛ²™AC†þgæ\¾wïríŠ7ry¥J—¦S—.H¥RþÜ·�ñß}GBB§ŽÇØÄ˜AA˜š™Ñ¨qJ—)CzZ'OœàÕËkúi€;·osçÖM\\ËÓ¸iÓ"×¥kW®�™™IÃÆ�¸~튌 6nÌo¿.¥N½úܾy±DBÍZµ©îá‘'�¨È(:tꌶ¶6U«VåÂùs( ¤ÒÏks¦b/—›<ùW† ™Á°a3¹{ןíÛ�1dÈ † ™Áöíǹ{ןaÃf2dÈ &O^&¨ 9hi`ô¯¦!«_y…BAzz:iii¤¥¥‘œœLBB $%%iD%…BAVV–&nq;dccêÕ­ÅñSg055aÆÛ¥$U«¸1uò·¼xñšë7nÓµsûÂEÚzuP*³¸ì}�ò.NŒ©îç/ZNF†‚Q#†0r¸ZÈ�3)J¥'Çr<}”KëÕ½ {öB©T2gæTœßíJÙ¹CŸK�n�hѬ‘&¬U‹¦ÄÄÄqü”M7àÇ)([¦2ÇìdÝ¿râÐn\œ)[ZݹUtåüéÜ>¾ŸÍkÌsëÕ­…÷ÕyîÓÖÖšß–þBFF+ÿX�¹¹+–ÎC[;ÿŽ£kçvyÂúµk°µ³£k�åÌ×ÎmÛ4÷Z)ÉÉìܶ�}{öpÚóªO´:"5%…³^^ôîן1ãÇ“–šÊãGóœò&[;Æ7GMûvÚóÆ&ÆyúéAAܹu“~2døW„¾yÃí[·>Z¾ß„„0jì8ÚwèÈY//Í,'¥J—ÆçÎmR’“¹sû6¶¶¶Ÿ�Àô^"“€€Àû㮫ÿ¯¥‘S 244ÄÜÜsssÍr8]]]T*b±Xó“½ö}͉ c¾™Ìâ_Wrûö]J˜›¡««K§öm‰DÌš»�e+VsõúÍBÓyôØŸ¦Ïaꌹ¤¤¦R²¤-¯ƒCØ´u'5=ªÑºeS:Æ£ÇþoÅŽÚ\¹š;ÝUk7²aóv~]¡^Ý´ñ;MG�{2oÑr.U[±ØÙÚjÂBCÙ1{>ó.# ð)MÕC,“ž.çʵ›´ïÒ—ñ¦bffÊØQÃ1zû…Ò½J%vìÞO\\<Ó˜€£ƒz"W¿n-®]ÏÛ)µhÚ©TÊk7³}×>~þe1§ÏœÇ¤€AòþGY¸d «wä,ig‹E sêÖ®ÉÙóYµf#?Ï[’+Î’e¿3æ›Éܽ÷€ÄDõÕÒ¢·}|Q*•Tr+OÅò.<z €‹³#Ê»ðà‘úzzÔ©Uï«×ñ:w‘µë· ‘HèÒ©�&ý°ð¦ÏœÇ/ ~%ðÉ3Z6Wûž»ãs�×Á!1ïç餤¦rúL^‹M�jU8tä™™™¼áÖí»Ts¯¢ ¿ä} ¥RÉ“§ÏIIMÕøËFË´ðÉnaá[wì!:&–ï¿“ëøß•iQŸ À²kHHLdÆÔ‰( æ/^^h:ÉÉ)Èôõ±³³!&6ŽÑã'‘{i’�µ™™YšçY[6üÎ�ëçð¹~Ï£û�ËåìÚsà½Û£’¶6DE>ÕÕÕ¥n�šxz�#++‹3g/кUó/¶/Ê3zñ’°ð†ê��­¥ìm°°° 0 �ú "‘H¨èV‰–­[“••ÅãG©S·.R©SSS�œð÷ó+0Î.®ðäI N..¹Úê¦ÍšÓ¼e+´´´P(ˆD"ä8::ñìéSµðô ŽyÄZ±X¬±ÖˆŽŽfçöm¸W«†‘Ñ»¶(11�—/^P©r•/æÙùÅ¿ Æ{X"eÇÉNãK J•*Ì�¿÷jըנ?L›F�ºu161~+ŽÄiÎ-çàÀ×£Ç0rÔhtõôˆŒŒT‹—/#‘H=n=zõ¢ª»»&ÎÍבËåtíÞƒ-[1lÄHuœB”‹ky L‡Nj˱æ-[лo_jשƒR©$é/¾Å J�šjAoëÎ]¼~õŠW/_R»n]ÚwìÄÐá_aff–ë™™™Lÿi&c¿ùôeê%½¦¦fEúDÏÞ½iѪÕÛ ~Wß �ºt¥f­ÚT®\™{¾w5"€FìÀÙÅ[[$ 5&À?@ó‘ËÎÎkkk´´´ptr"=ŸÝ‚£äñ…æï¯á1oÛ]£ãƒEóç3¨__õëË/?Ïη|´¥Ú|÷ý÷ 1’’%K¢­­�R©$1Ç2ñÚuëÒµ{wF�«î¿oÝÎ!pÛ2zÜxÆŒÿ‰DBT>KøMMÕÖ=::ÚrÅÛKKKš·lIËÖ­177ç¹—ÊëëéE†\Nó-óµä‰ŠŠÂü­OÁ¿R¢‘‘ï6…úsïÒÓåI@yär9çΞ¡{¯^ôîÛ·Jn\ºpAÝ^&$Ò a#tõô061¦ª{5‚ž?׌%­¬­0x0n•*s岺n[ZZÒ¨qÊ–+Ç !CéÓ¿ÿßæA"‘�”œL9Úuèˆkù øÞUD¼uã†ôéߟ¾ýpÕÛ[ÓôìÕ™LŸAC†2hÈPÌÍÍÿ^ÈIM¡]‡ŽôéßGgç\õ¤ nݼIé2e,hpÎ IDATèÙ»7Õ=jiÜò>Hµµ‘H$D„‡!‘H0x0UÝ«åBDbªT­ŠH$Â¥|yÒåé(•ÊBûé*UÝ142BGG÷êÕò¯Þ—ªîîˆÅbìK•BOOEFFžs7mÊÝ;>üñûïx{_¦i³Ïs<õå.Hø±–jýkidûS’J¥øøø†R©DOO===d2ÎÎΤ¥¥‘™™©™t|ˆSÄä”T’’’ÕƒÙ„Ä·b—Ú‚B.—óêuÈ[)€õê˜Nh˜z  T*INJAœc"µc×~F ˆX,fëνšãujÕÈeIàçÿäíoõÄÌÂâ]'ú&,@“_±øÝ5¿=?;®«‹&&ÆlÙ¾›-Ûwk¯gÏ_PÞÅ™ƒ‡�°aËNvï=Àc¿6¬^Nu÷ʇ```�ïÄ<Û"è¥Zà¹rí&W®,À…½ÍsvÙŠÅ"ììÔ_4Ÿ¨-üžäò£eccͼŸ§#3�iâgß·Ÿ n\162âÎÝ{¨TJÜ«TÂÑ¡,ë7m×XµkÓ’vmÞ™íÛ—|'È<}Wn~¸8;bnfJdT4®.Nü¶d:ºÚŒ=Aóü³ÑÑÖF[[‡øøw_Ãbbc151Ñüòβ#?ÿ`™qòB…¤Ì8y�aiér–­XÃÂ_~"ùír õ¡ð2-ê³QÿŸÀÑãž èÛ“s¼yó&¬ÐtŸ<ãò•k Ü}}=®ß¼ÍÞý‡s}Ý �ˆBKK‚‘‘až[ÛÖ͹wÿ¡oó3xøX�O¦Ò¥íY¾x.½{tyoßeaáÇá9ÑÓÓ¥}ÛV:r‚F êbdhÈñCêwEWG‡¸øx–­XýÑÛXcc#ÏŸ€¶¶vž:ö1(è™üUÔOHˆçȡݘ™™á{÷.QQi¤¦¤ ­-ÍeùS¡¢*•ŠÄÄ$Nž8žK(rvv)0å+Tà¹sT÷ð À?€:uëþî�Ž��Çë´'i©©”°°ÔÔÁR¥KEzZOŸàVÉ­À>ãÆµkܾu“FMšP¥ª{®ð;·nãæVI³ŒæK J®n[r:ù.*Ùq²Óøp̱R¡P°cÛ6Bß¼ÁÖÎ.ϹٓJ±XŒ¾žž¦ï�ŽŠÄÚÆ]]]�åsçq1j ‰lK8KKKd¹&ñ&¦êö[KK¢~$Eô‰’m…Q¶l¹\‚Ø�Û·É|ë·N_&Ã&LJ¡÷¡D õó500ÔÔÿl!gæôÜî-"ÂÃ5B ¨­3Œ�ßõSú2™ZÔ}kdae™«mÈ “B…& “¿ŒÔýqX‹àú àìâÌÙ3gr 69ÊGO_Ÿ»>>x_º„¶ŽN¾L”)[VÏÂÂ"—™]NR©©TZ¤1blL |;vL.1D©T(¶hÝš‹çϳjåJ,,-hÚ¬¹f¹Ò»¼”àå‹\3këw^¥Ë”aÔØqü¹oÖ®aêôÝSdDÉIÉü¹w¯fŒ"}[¾ZZdjáÍÀ�ää$âß9ŸvtrÒ´Ï9-ŒÞ‰X¢yÞFF†DF¨û…�à`êÔ«§y~6¶v„‡…cbbúžý­ Î�C$‘””ˆ…Åß·«‘‘‘Ôª][óüd2ýOÒöI¥RÚuèÀ�ë×8qì8eË•£eëV¹>”d·OÚoŸQv],¨ŸÎ _¿zÅãÇï¬ä²ÛŒ¿ ŽÚÚÚ[ÇþšÓ*/¿¸ìܶ•.ݺáäìÌëW¯Ø·g#G�Êw¯ 2 |r²E&]]]6lØ€——×ÛIŒ3Mš4aÿþýŒ1‚¶mÛbggGJJ ™™™š „J¥úh»pÄÆÆ¡££ƒ­�5¡aá¸8¿¿sÊ!ƒú ‹Q*• ÜŸ³ç£¯¯‡DK’Ç�³«‹#ÏžQÞE=ð�,Ò5\]Þ导«3òŒ âã?f¬Y¿±XŒ¹¹‘‘QçÞÙƒj½·ƒó”ÔT<ªWåŽÏ½|¯ývÀ^®LÞ¼ £v-êÕ©ÉÖí{ŠQ¶êAj¹²eÔ‡²šŽSGG‡ÉÆi|µlÞ˜_f¿<ß¼íCÿ¾=155aÝÆmèéêÒ©C$ 7nÝ!æí×ÛßWodí†-ꉉ™Šw_Z\r”•«‹ …‚è˜XÜ«Tbíª_yù:˜±Ã¦™Ï×OyFŠŒ LŒ�ˆ{+4™š˜h„…×ÁôûQ4.Yhxaœ:}–þ}{ЮM‹"•iq173£s‡¶(•Jš7mDéÒö¼z\àù¦¦&x_¹Áñ“^ØX[1ò«ÁT«Z™Û>¾¹3�OiÙ¬1:önðdlÌü93hÓ©W¾i¿zÌù‹Wpt,÷ÞïŸ_ÀJÚÙR®li‚^¼Ê%ò~5tû¡mëæÌ]ð+ûÑ ä.z¡r¥ŠÝazBB"“¦ªE¦lŸL›‚žIäÛ�¬&~7 [k’““033Ë-¾éë#—gäòŸpóÆ *W®Œ¾¾}úöÓ ããã�ˆ p¬mlHHˆ'66–è¨HJÚÛ癎9LÝzõp«T‘HÄšU¿k&weÊ–%00€àׯéØ9ßDçÏ�%ìM(ÃGŒÔX†äìOü?¢ÿ ÁBçú“³�:tà©)),ÿýw23³˜0~\‘Ò042âÕË—¿Œ!!ï„[Ssuý~ùâ6¶¶DEE‘’œœ§ÞØû¦ž¿|ùNLx„¡‘‘æcXAíqö˜E$‘š–†J¥ÒLˆ‹‚‘±úë7oÉáŸ2™Ì ×y2bcÞíd—ž–¦ÞpE·è;7°¬ÌÁàË…†ÿõšåð÷{L€¿®å+P·~}^½|Éáƒ!Ǻœåó$0�ógÏÒ½gOÚwìÄÆõërY…�z7¬ìÉvtt´f‚ý¾aaiÅÓ¦iÒÍÌÊ,ô¹)•JzöîMff&¾wïâyê$_�ü:×yή®ìܱ�èèè<þš._¾„{µw–+µëªýËuîÚ•™Ó§qÚóT.MeR­¥…‰© ý,\X(DxÈ®£ë½Ïùä÷÷‡\ëÀþ}ôêÛkkkîßó%øõë"ÍEræáSm&”žžŽ…¥%ƒ† %-5•³g¼¸~íZÇòùÝ¡ý´LŸªÕÜ5ïDzZÉ))¹â+ ~]²˜1ãÆaddLffóþ£££r _÷<ÂÃÂÐÕÕÕø«+]¦ æ%Ì Áµ|ùÏ«ÿº`�ŽpEæ¿–†H$zk–›ÎرcYµjË—/gêÔ©Ë‚ 0`ëׯG"‘`ff†H$B©T~Ô/>gÏ«R?M›ÄØQÃhX¿Î{¥ãP® ƒú÷ÆûêuŽ÷¤S‡6T«Z™Z5«kœEçdÌ×Ã< ß�EVVž^EÛÙ̾¤3§MbÊ÷ãquqâÄI/”J%v¶6Œ9”i?L`õÊŘšãéuž€À§<zɈa™¦s‡6Œ60ßmë}|йc[$ vv6ÔªY�{ŠnŠœàùšŒùO 2^$èô;gç¿héŠ\õ½°2-.“&ŒÁÐЀ©3æ"‘ˆÿÇÞy‡Eutqø]Ú.T¤ �bCAłШcï]c�š{Ô˜ÄÄØ[{ïÆÞ{ÁذÓP�ÞYXv÷ûca•€ˆ%‰æ»ïóð{gæÞ;wvÊïžs†ùñ½Þ„»›+_釉±1iié(äòbctÍ]°ŒñãFáãÝ ‰DBk+æÍùžËWý‰ŽŽ}s}¥¥¡¯÷þo““SX»a+‹çÿLÍêÎhkkS«F5¦LÇö�{10Ðdz¡¾—¯šT^ºêGkŸæÿXßkei¡‚Ë”A,chh€¡¡Á{•UÜ3ÑӓоmK’’âéÑ£;ººÅ瘝©©‰�½=×®\A©Tô¿«WЋqtvæâ…óÈd2RRRضy3)))%öéNNœ8z”*ööEúèì¬,ŒŒŒ‰D‘œ’¢¶ü°¯jÏ¥‹±­X±ØxJ™ÞºM§.]K$Èårär¹zr�¦–&&&ŸÕl&VMæ_d½ûnxy ÊøÜHII&33“ÖåÇ’—bËê5j"—ËYùûoÜ¿�›¯Å©çî�ŽŽöíåüÙ³¬_³ÏÆ�?ÚuÛV¬ˆ�­-þ×®qâØQ6mXObb"ž�Þ|‰DÕ¦ïÞF&“Q®\9ÒÓÒØ°n-ëÖ¬æI~L²·~×=<ÈËËcóÆ ø]½ÊÌiS™5}z‘…qU‚ƒ‚xùò% …_ß‹8:9¾Ó¼©_ª›T*þ˜T*ô oÿhii±pÞeîܹ´k׎={ö ‘H044ü¨BÓ¹ —XµvÕœðnîÅñ“gß«œS' ¥¥ÅŠÕY½n3 …‚™ßM ‰gƒbkï?x”ýz¢­­ÅÄ©³ˆzQº Æ™s¾X[[Ò©C[Μ»È‚Å¿ç/ì—ræÜEÚ·ñÁ®²Ê¥¬À}nä˜ <|BçŽíHOÏ`Ü„i$$&áR«wß`½ñôés¾�<‰D·ãFŸÀ˜ñS‹ üWÒ3ž8u¡�Ã2°/wî=PôLLJâ�Uë177£[—/ØHåÖ׬‰Ê|:ðÎ}rsedeeñ”GÁ¡jáG&“¡T*™0å{BC3cÚ¼›7eñ²…\­> ¦š“�;¶ã̹‹Ì]¸ ‰DBõjªx&=»ubìèaŒ= ŸÍŠ\ÿÎÝû�H$,ž?›±£¾dçîýou)û+ñ«�q1Jí——œCÆÅ(âW—.`ï�» �%Õ黊íÚøpéŠÇOžáБÔ÷p£M«oÌsñÒUd²<æÌžÎœÙ3ˆˆ|†_ÀÍ¢ýÂÝûL˜ú=û÷ââ™Cl^÷;Ñѱ|÷ýÏ%^Ó³gQÔ÷pû ¡iý¦mìÙwˆŸœÎµ‹Ç™3{&»þÜÏÖÒ« aaOŠX®]ô½J«–ÍÕo÷Ï›ÍM¿sêŸÙ³¦}Ô¾wü¸‘H$bºwý»*•hìÙ DÝ’xý™üòÓt’S’™1c >>ÞÈåo_´·iÛ–¸¸8–.ZÈåK—èܵšššx5S‰n+~[ζ͛¨ßгˆ{È_qrræÙóg8:�1äíãÃáƒX½r1ÑÑÔquåÄ1ÕwÞÎNµ»¤£SñîxqqqÈòdü¶|óçþªþ U/ž*T¨ðÙ�ÁÕLTn@7ƒß9oAž‚2>7zõ郮®.Ç¡–K-$ººÜ½{÷­ öíÚѨIBCCñ»z•ú ¾ZT—-˄ɓÑ70`׎í$''1xè—ÅÆ>yï…Š†ßL˜HµêÕ9|èwiݦ-Ýzôxcžzõ±­X‘#‡‘••I—nÝ©`cÃõ€d¹¹¥¶Ìq©]‡~òèÁ6mX�Yys¦LŸQ$Èn™2ehÓ®÷ïã÷eKÉÌÈ,²k^i˜íò%]lš¨]ãÌÄ&t±iÂl—/‹Mo_µ*³~š�sµêÜ¿Ÿ'aatèØ‘¡Ã‡Q±bñ‚U]77\ëÖåÑDZ€;qÿþ=–-^LjJªz|¯Q£FFƬøm9ë׬Q»I–]==ºvŸK-âÂùstîÚõ½]ÿNDeʺ*¥Ùrþ;(‹ü]ØÍK©þmç\æ½²fú†,·´ù 2ÆÅ<çBféå‰D"”J%ææfÌýé;455155åäɓܽ{—¼¼<,--ÉÎÎfáÂ…ê<ÖKU«Våûï¿ÇÝÝ…BÁדf«.û}ðñö£^]ŽŸ:˳gQÌŸó5ª;ѨY;rŠ r÷¡Lž0–þ}zТM—bÝ´Þ„��>~¾'Ùwð(?Ìž÷Y´~±Ž“'Œ%>!‘m;÷а~=ֳ͛ͫjí&¡{êTà#`mUž/‡¤iÓ&èÿÅ•ìs@&“±|ɾ;ɬ®þ‹\O fîƒm˜KLYéñn‰£ñRšÌÔýp�ÀáŸ:·oÝbÙâEŒýÕ; KïÏü_eò´iBEü§b2 üƒ\ÈLçfvnºïg5p3;«ÔSq(•J455yüø1<@¡P •J‹š+˜Äb1˜››ŠÏô¡Ü¹û€®�;°aõr444xö<Š S¾ÿ[¦ÿ7rrs cÜèa|5r(2™Œ£ÇO³éâ: u*P<6Ö Ò/¯¦èéé}–÷ —˹{çÖ*ü_ Lîe�¨nR‰‡)‘¬ ;Ȩª�J•oeØA^J“©nRI˜Þ‚ 2 üÃ,Hˆe‡Me4y7×39J$Ä~ðùE"999ÄÅÅ¡T*155ÅÒÒ²ˆS»ví6lžžždgg“œœ\d›ë÷%.>�_M@[[--MµOößÅ¡#'¼s�ÔÔ´wÊ'•æðí伈Žý¬ÚØÞý‡Ù»ÿ0údeeÿm�ÿŸêôÿ›Š6– 6˜F�©wÙú\ñ½p�°°P¾èØéÿòYªÒ†I·Wr&Zåvú6¡ieØAuÚAUÚ_�ÿ,Uììóõ7T±³*ãD°bø/"¸Ë üùtÝå h¦oÈË ¥šä(õÎVLor—;{ö,¡¡¡ÈårÌÍ͉��eÉ’%4lØ�‘#GÒ¨Q#444ÈÎÎ //mmmÆMœñÁîrŸÕ�í8 /õÔ/6@¶ÀçI�Û€¹Ä”VVîÔ+넵žj îYñÜH æTôu^JUAh79�Ò!X2 ü \ÈL§Ïó&•³x«ëÜÍì,$Äò(çì} ¶„‹ÅìÝ»—S§NP¥J:wîŒ��cÇŽ¥E‹hii‘’’‚¶¶6b±…BñQ¶Uø¨Q­*ú÷¡AÃèèèòý¬ \G±)üS"Ù~Š-á§ŠM[ݤƒª´ÁÎÐZ¨8�R X2 üùô-™^§™¾!>FÔ‘èa¡­Ò}ceyJ³8�‘öA1˜ 0/_Ž_ú ˆˆˆ 66–¼¼oÚ´ò¢[·.T¯^]Ëþ‘Ià?ˆ 2ûe‰‰Dj¸wECCCŸI@@@às¢]›ætéÒI—þf„˜Lÿ'|¨@ô¾â”€€€À¿E‡vÞtïÞGGG¡2þ‘I@@à£S»Z%¡þ5�ªS×ÍK+kBC"„Jùpp¬,TÂ'€ÐÞ„ñ÷ßDp—ø"¸Ë ü?Ò«û|ѱvvvBeü –LŸ5½ºA·î]±±±*C@@@@@@@à_D™>KõïAç.�°°°*C@@@@@@@à@™>tt´< íÛ·£¼yy¡B>!‘I@@@@@@à“GGG›‘ÃЦmÊ”âé |Š"“€€€€€€À'‹‘¡>þ@Ë–Þ˜šš " ð #ˆLÿ2Íô ñ10¢ŽD mÕW2V–G 4‹Ói\ÈL*I@@àÿScC† é‡�OKLLL„ ø[¸žŒ_ü¥DŸ“ €™Ø˜j&•i`V÷²NB% ¼¢2e]•Òlùbn^–¸¸¤¿l/ ðo¡,òwá¶©Tÿ¶sþ÷\.ª‰%L*g�›®^‰énfg± !–G9RáÑ üç156dÔÈ!´ðn����P! OÒ_°)üS"KLWݤƒª´ÁÎÐZ¨4�RðÞ"“X¬�§g¼½�““‹¾¾„sçðõ½…Tš#Ô¬À¿È§/25Ó7d‰e4•*½%ãc¢«&�ÿ,ÖVåùrè@š6i‚¾�¾P!׃™û`æSZY¹S¯¬Özf¼ÈŠçFb0§¢¯óRš ÀÔý«&�Rð^"“¹yY¦NB@À}Μñ'11C¼½ëÓ¨‘+Ë–m#"âE‰exyÕcÔ¨ôì9é�i‰!K–lý[+¡oß¶Lœ8…B�H$".. _ß›,^¼…œ;ðòLvö‡ hmÚ4B$qüøe¡þ-|Ú"S5±„6•K-0 GIŸçïnѤT‚HDyý$,MÒÈ’*"‘ª&D¯×Xþ"‘:(A¡]]/S�x™Q浃Cý8;²{Û:–ü¶Š ›¶PYîu1Ð×çÜ…KËù.œ>D¹²EÛPãæí122dÖŒITsr$8$ŒY@äÓgê4ýûöà¢ïUš{5fâø¯è;p÷'3± �Ë×¢_Ÿâç}ûP¹J~˜ýs‰eŽ:„ªŽLœ2幇sçòÍ„ hkk—:ODx8ûöì!""mmª:8УwõóÛ±U5_èÓ¿ÿ«±cËBCC˜úÝttõô„å�ÀßÖ>?„§‘‘œ:y‚á#G}”ò8yìqqq”)[†V­Û`ieõÉÕ³Æûd²±±À̬ VVf˜›«XåË—ÁÒÒ ##}*Uú8ðÉ“WÙ·ïì?RgÏP·n/\]{2lØ�X[›3gÎ×êãcÆÌQ Nèè¼_ã´¶.�­­Å;åÑÖÂgýW˜TÎâ�&MDL*gñÎùD"­\œ,S13ÌźL.ÖedX—‘QáµßÊȨP6ÿ3ÓW¿­LeX—Í¥¼a.Ž)hkÉýM@||+Vo 0ðÞ—Õ¶•7Ñ1±ÛµnÚ²“«7°bõV®ÙHjZqqñdggóDzyT´±aÅš XZ˜³vå44^u¹íZ·äEt wî=`Åê ÄÆÅ—x®Ò¦ûTùqæÜÝ\Ùõç~ž?Á×c†Ó¦U‹¿å\f#j`àU-S1Z¦b ¼*`6¢F‰ùF Œ±‘Ñ;ŸïøÉ3¬Y·ù£ÞÃÒå«�åå•:}õjN,_ò+;vï¥yëNô<Sc~œYxQÑð(j»{áR¯)>íºaldÄØÑÊ”WÛÝ‹Úî^´ù¢'r¹\ý‡.}‹¤íß·ýûôà§_Шy[&Mû�ŽÚÒ«{çׯ0m¼›7%ðî}Zû4 ¢�%¿üôû÷ïÅÙÙñ³˜Ê”-K«Ömþ‘siii\è³��´´>Þ\aÏîÝT¬T‰±ß|CS//­p©Sû³yN›ÂO”Z`Uµ-­Ü åø{¹äëKô‹ô8ð½ò¿|ù’‡î“#ý¼Â ̼»ŽýÏ/Ÿ“¢š夰ÿù%fÞ]÷AåvèØÏF�þ±ûèÑ«×;õEÜgáüyÔoЀù 1köÏØV¬È÷Ó¿#6¶ø9ÜÞ?ÿ$(è“§NûÛ¦µ«WñìéSá ùã]Ûç§Æ±#‡±±µeÌ×_ãä\�Cö’×ùÞ5¬¡¡�›[ ÜÜj�žžÉ“'Ï9yò*OŸF¿WYcÆô¦C‡¦äæÊضí(;wž eËú”-kÂ’%[Y°`aaO騱b±6çÏß`îÜõ( Ú´iÄØ±}P(œ8q7·ê <++3fÎAõêöÈårvï>ɪU{Þz=ÏŸÇòÝwË8qb%•+[ñ‚eË¦Ð¢Å—ØØX2yò îÜ ¡aÃÚôé3…Þ½ÛЯ_{”J%gÏú³lÙv”J%ÆÆÌœ9‚zõjðòeóæmD"Ñ¡OŸ¶¤§g±sçqF�êIÇŽÍT çØ%~ûm' …‚%K&qùr ýû·gåÊ?9}úšÐ3|æ4Ó7|k ¦’pÓÕ£™¾á;¸Í)Q"¢r™—hˆrIL-M¥Ú’¡hj•e“赿•ùVKr¹C}%–†™ÇüE¿1uâ8z÷ìJûν‰OHÄÏ÷$áOéÜc½ºwfúÔo5nAA¡Ìünõê’––ΊÕ8tôÕ«LÖ­ZF5'ünðÃÏóÉÌÌÂµŽ ~7XúÛj,-Ì9}l/õÝÝ8qê\¡v£¯§Gÿ¾=¨æäHfV�'àú-–/ú•£'NÓªe3òòò8u悺=`ÜÚ�ÊÅ E:•�0nmûF‹&}Fļ…Ë‹+©NÛ¶nI}7֬߂[ÝÚo|6ŽölÛ¸’·:âküú­}Z0vüT.^ºZè|ã¾Î7§#ËË£_Ÿî¸å/âÏû^.Ôn ˜2qK—¯âôÙ‹dgÇòÃìù¬[µ}==2³²ŠäIKKçôÙ‹4jèñÞ}’±‘£‡¡ÏÀDDª&ã1Ñr:wlÇ®=ðlàNäÓg¬Y·™o¿�­mê7¨�X,æÊ¥‹¥MMMaë¦MŒùú‡…qóÆ zõéóQûq¥RÉ©“' Àµ®�›6%99YmÉtëæMâã^òòåKR’“±®`C«Ö­142Bš�ÍñcÇx�‘±1>­ZcckK^^gÏœ&,$}Ü=<¨Q³V±×`_Õž�  ÜêÕS„}UûBõqâØqbc¢ÑÐÐÀµ®�š4aÕ¿Ó¹[wÌÍÍغiõ6¤ªƒƒ:ofF©)©4ðôD$áä\ ¿k׈�‰ÅÁÑQ�.;+‹»wé7`àg1_O æaJ$æÓR L¯ M÷’žð0%’ë‰ÁŸ¼Û\pP¿þ<›n=zô(ˆ:u]iР!Ö­åÑ£G(•J�6b†FF ìÛ—ÚuÐÕ•pçÎÌÍÍ=f,––(•JìÛÇ…sç004(ôüBCBؽsQÏŸcZ¦ mÛµ§‰—2™Œ/ ÄÉÙ™¬¬,âââp«W�š5k±g÷.²¥R:ué‚O«Ö…ÊËÊÌ$3ßB²à\IIIlÛ¼‰   $b1îõЭG´µµùõ—Ÿ‰zþœÞ}úräð!ºtëÎც~ç»)“Yúû,^0Ÿ©”ù‹—°dáBî߻ˆ-[9¸öí£gïÞ\<žôŒ ¼[úе{w@euäÐARRRptrføÈ‘…,_¯sß‹�fgcc[‘6mÛ¢«§Wb_ð:ÛÂO¿1>ØÃ”H¶…Ÿ~£E€4;›íÛ¶xû6"DÔoЀ^}û¢©©É‘C‡¨êàHOOu}µjÝš3§N£¥¥I¿�ƒ¨ë¦RÏž9Í¡ý0-cJå*U¸xþ< –,ÅÌÌŒÝ;wríʲ³³°²¶¦ÿÀAØW­Z¬4nüxr¤RŽ9‹¨(ôôtiîÝG'§"ýé–�é?` õ6TÞþ‹ŽH¥9ìÚ¾�o&L,”çèáCܺyƒïfÌDÿ=ãö=|[[\j×!3#ƒm[·Ð¶]{llmÕi úY‹oý®^%**Š®Ý»zùY÷ï£i³æŸåή�·osíÊerrr±­X‘Ž�;£­­­nŸ©©©œ8zcc"ÂÃ1-S†¦^ͨX©ÒÇi€›7npózŽNÎx5o^ê—ï×®\!//�&^^ªgqí²Ü\šxy±lñ"x6âF€?šš¸{ÔW/_'>.ž;¡££CíÚµ¹pþ2™ì³Ì*µ¾ó®D"VVf…>ÓÕ3þF=z‚¹yY¬¬ÌÐÔÔ,u™]º´ N':wþ†qãæ2fLoªU«RT‰ïД¾}§Ò£Ç$Z´ð ^½êX[—g„�Œ5›>}¦Ð¸±«:ýÈ‘=ˆ‰‰§eËá ò=ƒw¢\¹ÒíP“––ÉÇOprª\äXõêö¤§g2`Àw4hàBß¾í2ä{zöœDÍšUéׯÓ¦}IllÞÞÃØ¼ùK–LÆßÿ>;vçÏ?O±}û1ÚµkJÓ¦uéÝ{2=zLÄã&�:5WŸ«{÷–Œ3G˜þ#øýÃeˆkJÑgñ2)iN™ÙydçÈÉÈÊ#Kªú,=+�l©ê'=+�L©êXzvY9r2³óȒʉO–ca�D#³Tª‰±1ž =8zâ ¦¦&ÌüN5Q¨íRƒi“¿!"â~þ7èÒ©}‰å4öl€B!çÒåk8;Veôˆ!ü:)¹¹2F ̈/0û×E( ªÚW!ìIx!WÉžÝ:³kÏ ³gM£ªý«~¦S‡6„„„‘�˜D÷®iÙ¢©úX«–ÍILLæè‰Ó4÷jÌwS¾-,Nèë3~Ü(Ž�8Ã5ÿëXX”àEL ÑÑ1j! À³¡—¯ú¹O++ –-ú…ÜÜ\~[±–²e˰|Ñœ7ZMvéÔŽ{ñøI8Íš6â‹öªÉúOßOÅµŽ ;wï§iã†èêJÔy~ùq:6¬YúÛjïÞ§o¯n4làŽ¾�S£z5œÐÐРJåŠH$ª9;"—˹x—_žA½ºuøcÕz‡Gðã÷Sp©U£Ð³Š}ù’c'ÏàãÝŒéSÆ0bÌ·Ì_ô›Jìë¨ê'¿^^§g�ÎäÊd|;e&+×l¤_ïîêz°·«Ì¤i?°~ÓvúôìZd(q1+±-•t|ß�#ôêÞ™ŠmŠ+©NKûlîÝÈ�CÇpws¥{׎øx7Ã÷òµ"Óë¸Ö©EåJ™6s6?ÍY€�·ææ…ïAGG—šÕ9sÞ·Ðç)©©të=¸X� ÀÚÚ’æÍsáÒ•÷î�œ�ˆŽ‰U L\õ»ÎÄ©³Ôÿ·iÕ‚ã§ÎÒ¾}+þøãw*UªˆX,þ,ûñ�à`b¢£1j4ƒ†åz@IIIEÒÝ ¼C«6mùjÜ×( oßàÔÉ›3nü·ÔoЀ}{þD¡Ppõòe2Ò3ùÕ:wíÆÅó牉.þÅ�¥•5ééid¤§«˜ÉI‰XYWP§¹ré&&Æ|5îkúˆ¿Ÿ™ØU­JøãÇê}\\•«žséêé1rôhu?/•JIINÁ²°5í¥K¾Ôusûlž¥_üUŸnåþÎy ò”ñ9pôÈÒÒR)WÎŒûöqëæM|ZµÆ»¥wïrüØ1uÚ»wihP»NžFFr`ß^õ¢èÐ�ýT®R׺n\ö}ÕÏ$''³pÞ\RSRèÖ³'ÆÆÆ¬_»†û÷îªÓ„…†âààˆ¥¥%W.]bûÖ­Ôó¨�¦†&;·m#'§pŠ=îæî�@¾óJ¥’¥‹rÿÞ=ÚµoOMN?Æ�}û ,;wlÇÆÆ†ÚuêàÝR%ÆLš:ccãRÕÕ…sçps÷@"søàbcb eíêUXY[Ó¥{wBCCX»zu‘¼)))œ<~Œ/:vbÌ×ß §§Ë™Ó§ÞÚ¼Î帒­·ßv|çŽí\öõ¥y oj»Öáô©“œ=sºØ´ééÜ¿w�†žž¤§§³yÃõ³Ú¶y3VÖVT¯Qß ÔynÞ¸Á‰cGqrv¢{¯^ÄÆÆ²}ë–’Ô×®bbjÂ7&Ь…7g_«“HNNÆ£Aƒ"Çš6kÆ£‡ ÍãΜ>ÅÑ#G˜:}z¡î}ÈÍÍeïž?ñjÖ\-"±yã~[º”çÏ ¿”ºréÛ·laç¶m=|HíJž””ÄÎmÛØµcÛ6oæidä[ϽnÍjN?ÆÖM›¸vå ׯS÷ùÉÉÉìÞ¹“];v°}Ë–"×ñ¾<|pŸ'�Ó©K444HKKUßϦ ë‰/T×�Ãs`ß^6oÜÀ£‡¯ú>??u¾“Ç�©ëáS!+3“³§OÓ«o?¾7Žì¬,>¸_$]Ô‹(,­¬7þ[ìììÕýÛ›Æéˆðpn^ oÿ þrÑ/^pãúõ�vÝ/¢¢5f,í;|ÁÙÓ§‹­WÛŠ¹uó™ܼq++«ON`‚w°d’Htðòr§yswÂã8rä"Íš¹c` ‡H$¢[·–4lèB``0::ÚÌŸ?žë×ïsî\ )%–ݺµ'›6"##‹ŒŒ,Æ�ŸOZZf‘t§Oû‘’¢šPݾýCC}¼½ësîœ?OŸª+þyšT‹ÃÅ‹·��-E&“#ë�—'ÇÀ@ï­×S@RR*ffE•[™,�­[� P(i×® žçåËD•z¿÷ ýûw`ÇŽx{×§iÓÁÈdy;v …BQÄí­eËúlÞ|„ÄDÕ¶¹›6¦sçæì߯r‹¢ª}e{6xc91uÆl444hÚÄ“ T¾ÇÏžG±aóvF„R©dïþÀ%ËWÑ¢yfN›@nn.¿.XZb9™èëéammIØãpF�›\Tp°0'/ONZÚÛ-7­û…R‰::ÚøÜ`Ç®}ïÝU°²$>!±Ä4.5�)ó4°/FÆÆ<‹ ÇßÏ�Š•*}–ý¸žžÒìlâãã©`cÄɪgòW·kkk,,T¢Œ}Õª$$Ä£P( áëo¿ESS“ê5j"Ê·}øà>;wA[[SSSì«V%èÑ£7ÆZppt"$$„ºnn„††PÕѱ�øß¼…7Ú::hjj"“ɉDääæbo_•+—.ÑÀÓ“°°Pìì튈µjk�„„ØOWWŒŒŒ_{—JdD„zAÿ9ð(E ¬Þ{X"Õ+ëÄ–ðSê2>\\\=vœªï56ÆÍ½&&¦Ü¿/_IV§­bgÇÈÑ_¡P(¸H\œjîyùÒ%455=v,‰„˜èܺ©ŠQàïGNN]ºu§a£F¸Ô®Ã¤ñßpÙ×'çj€êMÿAƒ¸uó&Ë—,ÆÛ§%;wAž—ÇéS'IOO/$R<„ô´4n\¿Îæí;xÉÓÈHšxyÑþ‹ŽÜ¿{—˾¾ôèÕ €¼¼ü'õb¬8ÌÍËóªÃ½~½ø·Daa¯¾°r¹ª¼òåË÷ê âë[[›3mÚPLM� {F^Þ»©¬¦¦FÄÇ'£º'£P¨ ‹²Ô­ëLëÖž…®¡lYc²²¤dff«??q¢èÛâråLˆ�MPÿ_HØzý~>,>Bl­w-ÃÎ\Êè~†¼ˆ’süj&íê’'‡§ÒhÓP[ -ùfÒ¾‘.© Ž_ˤC#}Äb .fÒÊCŸø9g¯gÒÖÓ�*VÚD'%“jøÖsgdf‘žž¡šÌ¦¦ªxáÖÖ–äääðôYT¾ˆ\¢Èó2B  #=�×&#ÛvìaøÐhhh°yûnõç <겤xšÿ;D%˜•}õö ?vSÁõjh¼:ÇÃüôy�«bbbLR’ªèÔ¡-þ×oòôésµ0 ηØë¨~§¥g ÖÑÁÀÀ Ø…y�…Jxþ°+׸r-à�õ“Íu«¡!ÂÚÚR5é UY*‡ê---˜óÓ ô ôÕù îûQP5ª9aldÄÍÛwP*Ôq©‰½]eÖnت¶(jׯ‡vm^-,m*¼Z¿ üðQ0Žö”-cJ\|NŽUY¶pb‰ÃG«~þˆutÐÑ“’òJÁLLJÂÔä•jTTôkÄ¢ãJ^rN‰BR^ò›7oÈ–æ°dù*æýò½úªÆ’’ë´´ÏFõ*‡�ž¤Ÿœ»p™/bJ,'$ô1—®\cè ~èééâpƒÝ{z»û2--MŒŒ ‹Mm[{sçîul²A_ŽQޝXц¥ ~¦W÷Îj·¶w%&ö%fåÊù\WWB×ÎpwwE!—³få þÜ£rW—åæbhhHÏÞ½?z›‘‘ÉŠß–«Ens Ë�~Ž‹cG#•J©^³&Í[xIgf^^ýwÁ*+3íB‹êjÕk T*IKKçø±£…[Žo¼çjÕ¸pîuÝÜ ¦AÆ…„®””NŸ:IvVåÌʫ۠mÅŠÄÇÇ#ÍÎ&4$”5‹�U¦T*ñ¿v�×hÚ¬Y‘ÄÍë7¨Q£æ;Y®ÿÛÄç¨ú–‚]äÞé…M~ž‚2>ì_s�”ÉdlÛ²…è/°²¶.vA_ 0êéꪭGâã°°´D"‘¨Å¨‘)9Q5G-X”–/_}_�o&¦&ù†¦ZøÐ,¥R�•`åÊU b7oÜ /ÿƒž¾þ¾-WNõ| Õí?1œž5cz¡´/cc -º33206~5Nééë«DÝü˜PÅõEú ±I‰B’™øÍžÙYYH¥Ruhhhл_¿7¦—èꪅ8ÃWîfñqñèè許ÊUª¨E&mmmΜ:ÍÝ;�ê¶ò6ÜêÕ###�ÍÖ£««‹{ý¸Ö­[¸Ý•3#99¹Ø ÉÉɈ%µ¸-ÒÐ`Ò”©DD„³jÅ œ«9¾ß•kW.#—Ëq®æ\ªôb‰CCvíØAUœœœÔîzUªØqúä bcc±³³ÇÑéíejii¢o`€X¬ƒ��!餦ÈP*•<{öŒsgμê�óE.É_‡Ò’““ËÉÇÑÐÐ(ôÝ322âÖÍܺy…BAVff©Äª„ø8¶oQY²åÊrÑ×7ø¤ú>mmmÚu耿ß5Ž9Jå*UðiݪH{115A'Ž^ H¿iœ.Ÿ=}ÊÃ׬º úŒÂõ�ƒŽŽÎ[½>þz´|ù’ûŠÜÜ\¶oÙLç®]©êàÀ³§Oùs×.FŒU¬ïg!2êcaaƯ¿~�¯ïMRS3hÜØ•G�ÂÉÌÌÂѱ‹MäâÅH¥¹4lèBpp$ÙÙ9hjj”8!OLLÁÌÌ”ÐP•ˆäí]Ÿèèøb'�ÚUuiæªÇ•ûÙÜ É¡[s}vœJcÚ@Sô>Ð3"))±XŒ•¥Ñ1±8:Ø¿wYƒöV[}9¨3ü==]4µ4IMK+”ÖÉÑžÇOÂqvTM¼ccKg%èäøêúœ�ÈÉÍU !Õ«9aeeÁæí»^[ô«Ê-°¸²©`­þÜ­nmµUO;Â^¥R%^¼ˆ¡¾‡ž ÜÙ¼u×;Ô­ªÿ¨R¹’j‘aWY=pŠÅb&;V#ÈÇÛ‹_~|5y¸q‹~}z`jjšõ[ЕHèØ¡ šššø_¿Ibþ[ËßW®gu¾ÕVÙ2eÈ•½ÚÍñµºrr¬x:€ IDATŠL&#!1‰:.5YýÇb"Ÿ=gÌÐ)ÄÀ<'7Yn.&ÆF$çׯ©‰‰Z¨QM´Jî¥wã1ðªPâñ’8qê,ýút§]›–¥ªÓw¥l™2têÐ…B�wó¦T¬h£'‹ÙaÂå+þ=~K sF „kíZܸXh2†O /ö8òjòdl̯³gÒ¦cÏâ'ŠOŸsþâìí«¼÷÷ïQp(¬­¨R¹"áª1ܳA]7òäºß<ÆŽbù’Å 4˜f-Z¨Çµ±£Gñ8,¬Øx‚��¾Úr£ &ÓÇ&== —Úµiب‰‰‰:°Ÿ°ÐLLß¾[©®ž99¹…â'øûS«V-ôôtéݧ¯z¢˜’’Œ¦Æ› KKRSSHJJ"!>Ž 66…D¦Ã‡ÒÐÓ“5k!‰Xõ‡j¤©©I¥Ê• æù³g|Ñ©øØDçÏ�%æE4_¡^�¾>7yôðýÙO˜×û©ûö‘•™ÉÒß'/OÎ·ãÆ–nþodÄÓÈHrrr‹ÅDE½z9`š¿»jdD–VVÄÇÇ“™‘A™2oçÞ1'2ò•YDx8†FFj ¼7õÇsh‘HDVv¶ZÈHOO+Õ¹�ŒUçX»qäää�“#-² Ö70 )ñÕ civ6 …±DRêûl\¾ûŸ_*ñxI¢‘ŽŽŽÚÕJ¡P°oϬ¬¬ðlܸÔ×`dlDnn. ”+WŽç¯Yã\ºx�»w™þý,™4þµÈ÷FÑ?3“-}hÕ¦-Ïž>eïŸâààPh1lff†‘‘׊X&]ºxgggõb»V- ©YË…ºnnlX»¶H¼¦wÁ¹Zuj»º²mó&Ê›[¨ãÔ½Q‰è;`±±±D‘HDß~ý¹rå2Ç�¡cç.œ;{+ë ¸{x�œœÌÎmoßõWK[G'gš{{²}ŸT*Ŭ|yBvVgÏœÆïÚµ"›s'ä”8NëëQÛµŽZt’fg“ñaN&“±xá¾;##còòò õQ¯¯íâ _o¥bcb�H$êxu+U¢l¹²DEEk)ø¯Ž?ï¼`•ˆiÕÊ;» Ìœùë×ï'7W¦fÚ·oб±3füƺuû Yò¼‰³g8°#zz*U²âûïG¥WΟ¿Ž··*˜£¯¯K×®¯&&ÄÆ& T*ñö®O… æ¥Ú¥ÍÒÒŒ_~‹¿ÿ=""^”˜öܹîH¹r¦é3wî×x{{ “åqùr ÆuECCƒ–-0thg22T±1 :�sç0 ÆÆ†é3hPGΟfFÿQbeyÿx:ÚJžEʸ$Å«­1ñ2Ê—Ñ¢}{¬Ì´¸v?›ö­ ¹"ÅÆR‡¾]Œ1ÔÓâþc)mÛñB†{u1ƒ‡•ÅÁVŒ\®Dò�"ÓÙóª‰Ô÷Ó'1fÔPš4jð^åØU©ÄÀ~½¸|Õ�ÃGOÒ±C\k×Âý®:Xôë|5r(ƒú÷fü¸QÈårNž>WªóØT°fÖôIL™8'Ǫ;~Z-6WsVuô©Ó?xÄ‹1 Ô—1£†2üË�DÇÄrçî}<zp¥˜xLç.\B.—3zÄ`z÷ìÊ�3§Ð¶•·Zp) Ï£^ö„V-›1lHfN›ðj®¯�®®› ÖtïòǪ‚õLÔý¯ßB¬£ƒ­M> &(8{»ÊH¥RîÝDLÌK< ¢G·Ž´oëÃä c¹xæíZ¿êw­,-˜5c2“'ŒÅÙÉ�ã'Ï¢P(˜ðÍhtu%Ü»ÿ�NÚ0|èšyÝíæVà=:}ÑMMM¬­-ñp¯Ë�{÷K}ÿ©'Ÿ‘Qü"7"í�A¿_üç/Z^h /©Nß•Iß~…¡¡ÓfþŒ¦¦3þß미»¹òå�~˜“––ŽB./6F×ÜË?n>ÞÍ�H$T°¶bÞœï¹|ÕŸèè7ï°˜š–†þìÌ“œœÂÚ [Y<ÿgZ·lÆŠß0zÔp®øž§i³fdgeqïî]j»ºšD¹Ô®Íuÿ¬ïMHHÈ·J%77—¬ÌÌR½±-Ž GA9|˜ŒôtôõôÐÐÐ@&“•*¯¦¦&vöö\»r¥RIpÐ#ü®^AG,ÆÑÙ™‹Î#“ÉHIIaÛæÍ¤¤¤”¸hpprâÄÑ£T±·/29ÍÎÊÂÈÈ‘HDpPÉ))êE¡}U{.]¼ˆmÅâccefdxë6�ºtA,‘ —Ë‘ËåêÉqLt4šZZ˜˜˜ð9a&VMæ_d½û.�y ÊøÜHII&33“ÖåÇ’—bËê5j"—ËYùûoÜ¿�›¯Å©çî�ŽŽöíåüÙ³¬_£r#~aãmØV¬ˆ�­-þ×®qâØQ6mXObb"ž�—¸V¸x™LF¹råHOKcúµ¬[³š'ù1ÉÞ†»‡yyylÞ¸¿«W™9m*³¦O/ò⼪ƒÁAA¼|ù…B�¯ïE�ßi'Þ~U|¨nR©øg`R©Ä ß"‘7ww"ÂÃ9¸›7nàèáCEâ]½ ·zª¸c›Ö¯gÿÞ½Ü |­ý¤ä×i ›7n ..î­"çÏžåêåËäåå©…%¹B^äÚ Ì–Mñ»ziv6éiiœ8v”ógÏÒÐàbËîÓ·O##¹réÒ{·­²åÊR¦LÚ´kÏ�}{‘¾e7””dîß»‹…… <=±wpàe¬Êùö­[(ärœœ�iß¡QÏŸP»·±µUÇ@ÊÊÌä¹s…æ)W/_&>¾ôý˜ŽŽ6††´ôiEZjšúLfF¦Ú2-4$¤HÛÖÒÒBš]x-occCXX¨zÜ»yã±1¯¬²ŸFFª­ÿéñYý¬’“Ù±u qqqèˆÅèˆÅä}„qÚÉÙ¿k×ÈHOGš�ÍÁÔ›€ ­­�±‘�<Ìw½ R ˜:b1‘‘Èd2ÒÒRyönc˜™ÙÙR‚=D.—þä ñ Eâ%~ ”Ú’©À§€èèx²²²©VÍ®HÔÈÈh¤Ò\œœ*£§'y«[Á®]'°´4ãðáå(•°zõ= ÇÍ­ú[¯+"â¿ÿ¾‹�g“ššÎÙ³þÔª¥²RX°`sæ|MFF¾¾7Ù»÷ ?ü0о}§)§E v ¡!"11_ß,^üv5÷Ì?lm-ضíW$.\¸Á† øùçÕ|ÿýH.\XORR*“&-&/OÎ�;!Ì�û5))ilÛv öìY¨\êöí;‡À“@iÖÚÆ\Æ»�“«ÀÖN3 F}­ ìé aÞïñØ”×!ÎJÆ ©1”5ÒÄ©’„YËâq©ªCPD.C&½ œ±ÖåuXþ[5$4©¯Ç1ÿ´º‡s.±jí&zvë„…yyŽŸ<«Zý.̘:---V¬ÞHJJ*Úµbæw¸s÷{ö.’~ÿÁ£ èשTÊÄ©³ˆzM5#Ç·ÏÏùbmmIÍêÕ8sî" ¿²Š´¯¢ÚàÅk y…BÁˆ1ßòÃŒ)ôíÝ�Ç�#øáçy( \jÕ`ÑÒÅžçéÓç|;y&cGãÛq# }Ì/ó–¼S@E¥RÉÄ©³øùÇï2°/ûQ[Š%&%ñǪõ ìß‹n]¾`ÿ¡£Œ;’fM<ùsïAïÜ'7WF^^áO1Ê÷9¿xO=™˜0å{fN›ÀŒiHKKgñ²ìÚs@=<|L5'lm+pæÜEæ.\†D"¡z5U¼ƒžÝ^YM=~š  »ïܽ�ýz²xþl²³³Ù¹{ÿ[]ÊþJüê·¶Eâb†–©˜¼ä¤wãß*0pçîNž>GkŸo­ÓwÁÝÍ•vm|¸tÅ�ã'ÏàQÏ•.�ÚÓ¦U‹"»ìpñÒUªÚ1götd²ZßûçÎ 6œógÏR»Ž«zBüúnF¥¥v�:<öŒÕ+W¢¥¥‰SµjT¯QSÃæm´iÛ–ãÇŽ±tÑB éܵšššx5kΙS'YñÛr455©ßгÐNGÅáääÌõ€³=¹·�‡@G,ÆÁÁ‘:®®œ8v”�ƒ‡`ggÏÿØ;ï°(®¶ß[`wéU:*½©€`A�bï%–»Æ5šbbªy“7‰oz¢‰1=41ÆŽ¢`ï]A”¦HéRw�ÝýþX]åŒ)&s_03çÌÌ™™S~çyž³+r'Þ>�×ùùùÔÖÕòÅòeõ¶�3/ooÒÓÒpvv~äÚ`?‹¶ºq‘3E‰-v™;S”¨ÏãQdü„ üôý÷ìܾƒ�ƒ‘šz�ØØØûöÑBII1Ο'7'‡.aaúà¸ÖÖÖ,Z¼øV€âuXZY1ý©™7[x½b±˜ç½HÄêUlß¶ ¹LÆÀAƒ3nÜ=Ó„vîÂÉ'رm=zöäñ1c¹qã§O�"00?ÿ’î{î�ALš:•è¨(N?އ§“§MkdW'T aëæM¨”Jœ]\8hP‹ïõ�3‰H�æH~ªRleôhÕ¾I�é6“o­ð�X$fȰázëÑæÒ1$„£gÿ¾½Ò%,ŒcGt+¸2”«))ìß·—ÐN�ðóàÊåxR¯]ÃÍݽÑüÂûôaçŽíœ?w¹\Fï¾}ë¹Þ¦}‡@^xñ%6ÿöë"Ö"B„§—'¯-YrO×<¹BÁS³g³â‹/ð ø]Ösž^^äåæ¹};£ÇŽeýÚµh4 ‰Þ³™¡Lézj*—bã‰Å(r¼{éV·´´dÓÆ�¢®«£wß~¿ë½8x0Q‘‘\‰¿L�ºŽ�ÝYŒ&/7—Ó§NÒ©å H$F�ÍšU?áàà@ÇÐP:Hü¥8¼}|‘Éå=|˜î�=¦ÿ¶nÞ„‘±1Î..ôéÛ'gg:±>b-± K ƒî¸SŸƒoÔMë^˜˜sâÐn6m�ä­w>x$Þ~™¡!‹-  °ˆˆŸ7Ö%”O>x‡_ÿÀ×ß­ª¡Lƒ†3zô(üýý[4c/ð×S[[ËòÏ>cþ‚ããQätQ"ïÇG`'·deç–Y$Î=õ 7”%¼0‰N8\@àïΙӧ¹r9žÎ]ºbï`ÏÊ/¿äzj*+¾ùöo¹zÕ¿•ÇŽQ[[Ëc½zýí®í¶ÕãÌÙsþUm‹@CšmÉTZZÎ?laëÖ ÞSS~ýuii:ÿß ùí·† ë‰\.ã§Ÿ¶Þ×ÕìapíZ�†ˆˆ¥H¥R.]JaíÚ“ø[r ²œ³ÕU„(ÌjàluU‹&€ƒ‰œ}£Œ:� cJ÷hШµH M©¬Ñ™”‹EZ¢ãE·þ†í·<ÍlŒel:Y‡&bÊwh�ˆ¡¢ö÷Yc]Œ�gô¨aüøÍrÄb1™Y,zùÍ?D`ú·¡ª©!!)……óf1ÿ駨­­%rW4«Z×I@(Ó¦6¤/cÇŽÆÛÛ[x9AÔj5±/âäìü¯t²öÁߢ —KÓX™²•¹ž#›•neÊVn(Kð·h#LÿX<½¼8¸?ï¿÷.Z­;;;æ/\(L3²³³2tèßòÚòrsñh'LÍ·dxtøûZ2øÉä¬wi‹„–Íü«Ñ2!ó:WTÊÌ“200@*•P]ýÇÞ“·—®.N>z²E1 ¤R)á=»‘�“§_‘îQÂÄĘªªêûºCeÚÆ�ÎðÃp¿‡k„À£Áþ½{IIIføˆ‘¿{E®G‘kåÙ¼t~%ýCî+4­LÙJLŽÎEõ£à¹¸›: /‘À?šºº:Ôju£ñÚšƒ 2 üù{‹L s›ûÌÁ¹ÙB“-ÏçfµØŠI@@@à÷"ˆKÿ4n»ÍØÉ-àØ‰Pk}œ¦ìªÎ%²'ç47”ºU579�æ!ˆLÿ@þþ"è,š^²±¿¯ëÜÙê*>*ÌûGY0 üý?v8cÆŒÆÅÕE( �×ʳY•ÅåÒ´&�ó·hÃ4·A‚“€€€€€@3D&� �†Èt›pcSú›˜$7ÂÞ@&-¯¶Ž Ê*¢+Êë%�?•i“Ç1êñ‘ØÛÛ …!ð�çtQ"' â¹Rz�ÕMleæøY´¥«m€`½$ ÐB‘IàÈ£%2 üÕH$bfNŸÈ�¡ƒ±³³ D@@@@@@@@à�� E ðïÄÐЀéSÆ3lØPl[Ù " ð»D&�&Æ æÎ™Aß~}°°° D@@@@@@@@à¡ ˆLÿÌL�™5s ýû÷Ä%�‡Ž 2 üñ47eÆŒI Ðsss¡@þ‘I@@@@@àе•9sfM£oß¾› " ð‡"ˆL�@¿6B!ü…(ŒŒéÔ¹í: —ËÉÎÎ EàÇË»­P’“® … ´¿"+ë`­²Z-<�ÚkµÚFökq÷µŠK@@àCk¦M›D¯^=122 D@@@@@@@@àOE°dxÄñõvcú´ÉtéÚ™L&ˆ€€€€€€€€À_‚ 2 <¢øûz0uÊDº†uÅÐÐP(�¿AdxÄhàÍôéSèÔ)©ThÊþ=S�G„.¡�Lšô$AÁA‚¸$ ð·Cè¡ üËðñöÀÉÑ‘›e倈êjUÕJ´ "‘##9 …ÎõÆÜ̔윓® …' ðÖ%˜ O>ApÇ`$‰P K‘I@à/&ÜØ”þ&fÉ�°7Ð}’yµu\PV]QÆ�ÊòÎ[$éWÖ<°?ŽNδiÝgWnä¡Ñh©©UacmŽ¥…)Z ”Þ,§¸¤©Ô±X„]+k233HËH#';ƒ]»cä- ðÇÐ#,„I“'о}{Äb±P ™ÓE‰œ(ˆçJéu T7°•™ãgÑ–®¶t²ö I@@@@@ %cP+ë`­²Z-”„À?mƒ¿ë‹!Zýow_«¿ì*ýdr^²±'DÑô2ãg««ø¨0�+*å�Çήsg?MYy-fæܸQ@M� µZhèÒٟ›„uij8yî2V¦œ8u‘D„X$B&3¤U«VܼY‚¹™Œo¾ùš¼ü|áUøƒÐ÷1Æ=1???A\ø¸VžÍªÔ(.—¦5yœ¿E¦¹ ÂÝÔI(4�f ˆLÿ@þþ"S¸±)Ÿ98#AÔ¬ãÕhy>7«ÅVM®.ÎŒ1–j¥©�ZƒX"E*ÑÚÅ™Œk×r),.e`¿nh5jöì;…�­^îN(kj¹žž‡F£Ö§UÕÔa(…í;6‘™•%¼n‘ÁÃ=zþþþˆD"¡@þN%ò~|vrK8v"ÔÚ'#[²« 8S”ÈžœÓÜP–ðJÀ$ÁªI@@@@@ "“À?�¿·Èä'“³Þ¥m³¦Û¨Ñ2!óz‹,šºvîÄ€��“––F›Ö¶È eh�Fƒ£ƒ5!ÁíÉ/,æÈ± ”–”£E‹­�=ºbeiÎù WÈË/F$!‘ˆ¨®ªájZ.έ‰ŠÚÄÙsç~ùøz³!â{>ûâk~\µîwåÕ¹SGLŒ�Ùwàðr¾ÑÛ°±nøõè=”Ò›7õ×àäèÀæ­‘õŽ™^NÄÏ1tï¾ýK?øŒŸÝÜä¹¾üüºt!¤kŸ¾Þ¡ƒû0nܼ½½øèý÷ynÑ" š�GrR›6þJzz:2C�ÁAŒr #�µäó ž¡´´Tïêj(“áííÃŒY3±°°äü¹slÙôï,ý3¦LÖ×��FʶU+Þúï;<=k&_÷½>ïý‡yy˜››Þ§ƒ‡«w}?|÷-‡déâäì¬ßþÖ’7>rÁ;>Ò-OnN{vG1mÆSèy¢vF{1–g.ÄÄÔT¿½ª²’åŸN»öí2løï>Oii Q‘;ÉËËÃÈØˆ^á½ñöñaㆠ\½šRïX±HÌ˯½öH<§kåÙ¼t~%ýC˜ë9²ÉãW¦l%&ç¬î» žÛ"‹&�FCMM «~øž•Šºº:}D£Ñ ‹Q«ÕäççsãÆ D"vvvØÚÚ"‘HÐh4ˆD"ý�T*ÅÀÐ�é3gahhؤ•côžÝìØº _æ/|ö¡—czZ‡ íúu*+*pqu%¸caÝ»?´s¼µä ÊËÊødÙò?íýˆH�æH~ªRleôhÕžIný=vîìYTWUñö»ïѺM¾ûækŽ>Ü žkŒ9OÍÀÓË›_~ù/­ƒ®§¦²iãF®_OÅÐÀO//Æ=9Ö¯ÕµÕ&OÖ§Y·f ÉÉI¼òÚëúv@@à¯dÃÏ?Š»‡ÇvŽŠòr¾X¾Œ   RoßžÝQœ?wŽù `ffþ»Î£V«‰‰ÞCRB‚n¬@ß~ýëM>¦]¿@›¶mÿ–ÏCˆÉ$ ð'ó’�}‹& "^²±gzvZ³Ó”——“œ”ˆÜȈ¢b%ÕÕE¨jjA UUJ.]N£°¤”‚¥Ì˜2µZͪu‘\KËÄÚÊC ™Y:·8©�ÆFFÈ åœ?{’â¢Â?¤| ù꛹p!îwç5x@_~Ù¸å{–«ÖüŒ‘‘ÐŨš0~4*¥Šªê*ÌÌLéÔ�¥ï¼AjjZ‘iÈÀ~¬ûù7.ÆÅóÕ7?’—_Ð乚{Üß•·—¼LpPÖ®ß@€Ÿ/Ï>3›ìœ¢öì{èç²�€a[³; �¥ “^ζ6£à›ø{¦›;{:;vîáfYY‹Î·kw q—.?е>1f8#FÃÝݽÞöqãÇ·hõ¸ë©©,ûìS¦ÍxŠö:P^^Îúµkøñûïê 0ßøÏ[úXUe%Ÿ|ô!›6nä©Y³ëå÷ãÝ ¢°°�Å/<¯ÿ ºªªÞ±»£vqøàAfΞƒ‹«+™|ûõJdr9}úö ®®Ž³gÎàåíÍ©“'y|̘\ÝnemÍ€�ƒþœÎ›TJbb"!¡¡úmIIIuÅÁ�6àïÀØñ㹚’Ìö­[™3o.£F�®7q{ñ"……�N½´*5ªÙ ?&&ç,«R£x§ÃÌfŸK,“pù2–(•J´Z-Z­‰D‚D"¡®®ŽÊÊJâââ000ÀßßSSSŒŒŒ�J¥¨ÕjÔjµ^h’Ëå\¾t‰Žw=ûÆˆŠŒD*•4{Ñ{vɨÑc0h0ÆFF\¿žÊÆ 8yâó,@.—?rßð’Øïë¹O¨JÙœy˜¤òŒ{>w­VËúˆµ¼úÆ’Ÿo؈X[Ûü¥uÐåøK|õå—<9a"sçϧ¶®Ž£‡ñæë¯ñæÛÿÅÞÞ¾Ašß~ý•„„+¼úú‚À$ð·¡WïÞ˜Ý5ñòG!K¸š’‚V«Õ‹>Z­–k))ˆE'¼AìÅ‹2gÞ|”Êj~^·GGGüÚPTTľ½1w D&�›Üýb05EˆÂˆpcÓf»Í’›�Éåøxü°srÂÌÔ±XBzf>R)„…PS[K«Vh�aƒ»#•H8~:­Fƒ±±Z­–ò²2Ò¯_åô©“88Ø#“Éš<÷�ß.ÇÓÃ�ˆõ™ðÄhjjkù߇Ÿ³ÿàž÷8sfM%¿ ˆË—óø`ïU IDATp��©© óæÌ@USÃ…ØK\:w„#ÇNPQQE�î]ÈÌÊañ«o‘–žÁÊ/>¦{Xg¦Ï^@II)›7¬&1)…'§ÌF£ÑàãíIbR ‹-`ò„q|¶|%žƒªFÅw?®eëö]úëu°·cõ+hÛÚ•½û±ôÃÏ‘Ëeœ8´›=1û12RؾgÎ]à�¥SXTÌêˆ_ôéG�‚™©)O¿ú655µŒÞŽ©©I£eÓÚÕ™¬ì4 �í˜7gÇŽŸ"?¿€ݺòÜ‚9¸8;q-õ:<ظøzǹº8ñÓ·_°fݯ¶÷ÇÃÝ�SgÎñÒ«o¡R©°³³åÝÿ¼†¯¯?oØÌÔIãÙwà0¯.y?_o^ùy¼½<¨¬¬"*z~ò¯¼¸�'ŸÍÐQORPXĉC»I½žÎ¨qS?v¯¿òs¾DBB2K^[DçÐŽ”••óÕ7?²-2êN'×Ê‚ï¿^†Ÿ�'N�á­w?¤²²Šà œ8u†Ï¿ø{;¢wþF—N! D&c##&O‡Ÿ�7•UUlݱ‹S§usË?ù‘QÑ èN]]{bèß§Û˜t­'0Ý�a[3̺ÞÓ¢ÉÄʧgOãƒ�Κ7U¦ƒö£Kç¾ýa !ïùl¼½<ˆøi%gÎ] fï>ZÙX½'ŠððÇíÄ/|þy¤R){vGég³‚;†Ð£gÏǯ�X˸'ÆÚ©2™Œ3gñÁÿ–¢¬®F®P4HcdlLh§NÄÅ>¸ [YQÁÖÍ›ùÏÛÿÅÁÑ7ww&NžÌ‘C‡ô"Ó¥¸8>r$«Wÿ!"ÓÍ›¥¬]µŠgž}€«))œ=s†ñ&<ÔóhµÚFŸIII‰ÞŠàÜÙ³äßàÆ�”–”àäì€�153CY]Í®�;IO»Ž™¹9ý ÄÅÕ•ºº:öÆD“’”„±‰ �:w& ]ûF¯ÁÃÓƒ¤„„z"SbBžõÊ#jç.òrs‹Åw ¡ûc�ñõŠ/5f,vvv¬]µŠ.aaxzyÕ{®7KoÒµ[7D">¾~œ8~œ¼Ü<¼nYÛÝc/^`Ò”©�D|º(‘Ë¥iØÉ-›%0Ý-4Å_ãri§‹›í6WSSÃ¥¸XÔuu¨T*½e`UUäääP\\L`` ˆÅbJKK9tè–––8::bkk‹±±1b±‘H„F£áR\,íÛß³.+»‰R¥Ò§?îË>ý„!Æ{ñe7ËëÞ�qãÇ£Ñh˜9m*>¾¾TUU‘ŸŸOHh(íÚµgã†_¨V*ùøãô0€Çޱ/:š×ÿó–ÞÒ ]ûøùðÅ矱ñ—_ðñóãËeŸ3ý©™ôêÝ›·ß\Bêµk|¹òkÊËËyuñK :Œ1ãÆ±qÃN;Fm]-Ý»÷àÉI“ôƒ7�FêàÔÉ“8::2cæ¬F-„ ؽs'………XY[1`Ð`ìíí),,$*2s s®§¦bieEÏ^ázË£ÛD¤Fß3>×åÒ4"R£µh‹Å$&$pîìY:†„4ØŸ˜�Àª@¥TÒý±žlߺ…§fÍæ±^½Ø±mž^ÞtíÖ�­›7±eÓ&žxòIîßOyE}ûõgôرìܱ�_ù…ÇÇŒaȰá,~áy*++yÿãO°´´ÔŸëî:¨¢¼œÈ;ÈÎÊÂÈHAï¾ýðöñiP—­ùé'&O™J—°0ýö¡ÃG Tªøe]Ï-z±^šÈíÛ8wö ¯½±c“ƒÕUU¬Y½ €ò²rär††´us£ÿ€�d¤§³oo 555Èår J«V­¸KÌžhLÍt"‚‰± ‡ ©wÿ�qìÈâã/ݪ7= ïݱXLäöm¸¸ºÒ!0ˆÊŠ "Ö®að�¡¸¸º>ôzçøÑ£$$è,ÐÛ´mKï>}ïë5%…Ç"‰055cÈСzAï^ùÕÔÔ�‘žÎþ}{éÚèûøO +3“=»£(-)ÅÚÆš¡ÃG`ccÃრîØw–}ú ]»uçÌ©“ˆ%:uî¢/�„+—9tð 5*^>>ôíשTJfFÑ{vSUY‰‹«+ n´ï$‘HhegOFzº¾ÉÉÎÆÊÚ•ªFÜÙ3g8sê$ÕÕJ¬m¬6b$9ÙY$&$2fÜ8@g�t`ÿ>¦?5³Aß*8¤#r¹¹\Ž›»;%Å%ú|/^8OÙͲ¿õs¢‰ ü‰ô71ûSóÐjµ(ŒTT”³'’ß~Ž fO4—/ÅS[£ÄHfDü• JJ”\ŒKáÂ…$23ó9q2eU%y9?rˆM¿®cÝšo‰Þ½ƒ²²bLLLÑ6ÃËÂÜœna�‰ŒŠÁÒÒ‚%¯é:+�xuñs\¿žÁ‰“gx|äÐ&óéÑ­+�šÃGŽãëíɼ93øß‡ŸSSSËÜÙÓ™3sïüï4 žn¤\K­7ãþĘQü²q �†wþó*žnú}#‡ "))…¢bÆŽA¿>wòúõ¦¨¨„Ȩhz÷êÁk/¿P_œ06æù…sÙÃñ“§;qƒGŒ§¤ôfƒûéÖ™#ÇN6ØîèhϲOÞ£¦¦†/¾úkk+–²CÃÆ]¦9„¸ø+\½–JxÏî ªü÷ÍWêÀÏ6Ó³G Å�å÷Þ~g'>ÿâ.Ä^bâø1„uíÄÉ[BN€¿>Þ^ˆÅbÜÚ¶F.—ãçë�Z­æü…Xþ÷î„v bÅ×?p5õ:o¿ù2ÚÔ{Vy7n°sw ýû†óúËÏ0ç™øð“/tb�Ì€ìœÜ÷ôĸQÔÔÖòÂËKXùíOLzr,övw×îmyéÕ·øaÕ:&<1º�冼ƒm“ïRSû7mÙÁø±£hÝÚ¥Á¾¦Ê´¹Ï&îÒe6lÜLÜÅóvhGLônƒ‚ ¾g>I‰‰äæä0gî<¦=õ§O�¢¸¸¸Þ1µµµ\MIÑ Lú÷ÒÔ”w–þ¯ÑNÒíAÙ¹³g êüÀõQZÚulllôÓÝÎy êÿ?yâ8ݺ÷ÀÏ?€ŠÊJÒÓÒÙz¼9Ïàâ…‹ 4˜ù ŸE£Ñpáüy@gRonaÎÂç_ K×®lÚø+�†cGŽPQ^ÁÓóŸaÔè1Ü¿ŸÜœœF¯ÁÁщòò2*ÊuÊêjJŠ‹ptº3ø>zø0æÌ_ø,§Låä‰TVTàîéIêÕ«€Îš-??Ÿ¶nnõòWñô¼yú��R©¤´¤{‡úV ‡¢cHÈ}'þ.œ(ÐY2pìÔâ´·ÓÜΣ9œ?{–ò²2²²²HKK#))‰Ë—/“‘‘������„……ajjJyy9•••˜˜˜FPP†††dffORRiiideeQQ^ΙS§îyÞ¥ï¼CUe%WSRøbù2ýöèÝQt ¥u›6ìÞµ“ûïˆü)ÉÉxyyãààÀÑÇY·v-¡�» Kø9"•JEEy9k×0ëé¹ØØØpâøq–¼ö*/=ÿkW­býڵ̚ó4GÂÙÅ‘HDjê5Ôj5™:q?==MïæáçïÇ®ÈD팤ûc�ñXÏ^ìÙÅî];õ×U\\LvV "3#ƒO?ú�FSï~5 ›6þJ»íynÑ":†„°y㯨պp YÙY88:±ðùpw÷àÈ¡C ÊìH~Óbû½öÛØØàçÀ†õ먫««·¯ª²’Ë—S[SCï¾}Ù¿oï}ß™ûöÒ©3r™Œí[·�—›ËÀÁCpptdwTÑ»£(**bÔèÑM ,Ç�ÃÂÒ‚ç-"¼O_öFïipLaa!%%%tîÚµÁ¾žáá\¹|¹^*&z‘;vðÊë¯cjö`ýY…‘sæÎcÎÜy8»¸Ðà æÌ�GÿQ©Tlþm#nmëñXOöEG××gÍyšYsžÆÍÃû÷7y®”äd®\¹Ì´O1sör³sˆ¿×@þmã¯ô ïý‡Léii¤¤$3mÆS̘9‹‚üšy R©Ø¹c;ãžÏô§fâèèÈ¡Cï›ßÖÍ›)ÈÏo‘eKmm-[7oâçuëˆX½šÓwÕ+©×®±nÍ~Y¿ž_ù…²²;ýÙÓ§N±ú§Y³ê'"·oÓkEEEüÁϬ]µŠì? vkÔ®�tîÒ…ç-ÂÙÅ…ãG�4z\vVsŸYÀÐaÃÙ�Z­¦°°�˜={ûÄxfΞCþ�œ;{eu5¿ýú+â™gŸÃÌÌœÈ;îy ¾~¾$&&Ü“ðñõ©'ôØ·�1OŒçÙ^ÀÎÞžÓ§NâææNzZš¾¼’““ðön8iÑ£gO|ýü)+»IJr2éiixÜš eæì9¸{¸ "“€€€Ž ¹ÑŸš‡H«›õ”Ëd˜šš¢Ö¨ÉÉÎ&öÂ%öí=JäΣ:Ǧ-ÇXþåo|úY«Wo&2rÛ·F½'†óçÎ’•®«MÍÌPÈ�ШՈêŹºwã5ÿÙÅ|ôéœ9sk+är9#†B$ñÖ»ðÙò•;qªÉ|â/'ðÊïðê’w©¬ªÂÙY7 ÍÈÌâÇÕëèÌÀþ½Ù´eñ—n‰]8z¬~¾+¾ù�ïZ˧Ëuñ8z÷ºcA²=r7K?üœ>ÑY±8Ý5hÎÉÉcÉÛÿc韑˜”BxÏnõbaLž8s3S¾þ~Õ�Æ-;—̬l}Cr7ÝÃ:süÄéÛûõî…��_}ók×ÿÊßûˆ=1û±0oÜ·{ã¦í|ðñrÞÿH7ˆpvrÄÖÆš°.�Ø»ÿ +¾þ�ÿ.ý¸^š�?û’ùÏ.æüÅ8ÊÊtÔV¶6œ9w�FC»_ü}½¹–ª¼½<ðóõ&.þ F ];‡räØ ¢÷ä›ïV!‘H5âŽ_znÞ ÞøÏRÞ{ÿS’’¯Ò¿o8"‘ˆ³ç.’‘™…¹™Kÿû•UUì‰iØA îÀ–m;©««##3‹ÓgÎÔA¿ÿБãh4’S®QYU…üÿ n¥–Mv›Ú¿:â ‹Šyñ¹ùõ¶ß¯L›÷lغy½û„sôØ1Vÿô#LšÚ´ˆ‘‘Êêj 033gÑâÅXYÕ�VTT„D"ÁÈØø¾×µô�ÿ2sÚTfN›Ê‹Ï=‹��!ýúxàú¨ ¿ Ëûv˜ã/]¢K×®H$:uîÌÉ'Ùz¼9ÏÀÉÉ {{{¤R)žž(UJ4 I‰Itïñ‰ÿ€vô8µZÍåøKt ÃÀÀKKK<<=I¸rïÁˆ—·IIIúŽª§·w½ÙñÞ}úÒ·ÿ¤R)µµµˆD"T55xxxr5ES)%%w÷b­X,ÖÇ{*,,dÝÚ5׋3QVv“´ë×i×¾Ã#óì®”êÄ�Ðà};Íí<šCnN6ׯ_§¨¨±XŒ™™NNN¸¹¹amm�R©D$¡P(°±±ÁÊÊ Äb1J¥sssZ·n�³³3æææÈd2Š‹‹ÉÈÈ /7çžç}ÿ£�115ÅÇÏ�W_C¿½KX��ügžÑÕ˧Ïè÷yûø2yÚ4†�ÐYxõíß�ñ&Ð¥kW4 åååœ?wW<<=9wö,‘Û·ñÒ+¯ðÖ;ïrèàÜ=<061ÁÅÕ•¢ÂZ·iCêµkdgeQWW‡“³3iׯs=5©TŠ—·G�¡U«VôíߟþbmmÍ�}õ-\gÏ�LjQ�Ó³W8………¤$'×ÛŸŸŸ�V«%0(‘HD@»ö’—«›È‹Ät D$áí닲‘Ø–ªÒ¦ëº{ì‰DL˜4‰üü|öÆD×ÛKYÙM†�ɰ#:ìþ®‹“¦NeÜøñô0àÖ½Ý@"‘0uútª*+ùõ—_pvq¡ß-˲{ÖS #JKJ¹yó&>¾¾�Æå*,ÈÇÒÒ²Q«kkkjjjôÂBìÅ =|…\NbBâò}fgeaie…£“.î™›»;ONšÔèjUe% #E“ù]»v•€€vÈd2$ í;p5åê]⤖­›7Ó!0°�•×Ã"#=o_}|6_?_ÒÓÓ›L“—›‹ƒ£Š[m�_@€~b¦©üÆ�O×nÝ�Jšï¨”zí2™Œ''Ndâ”)H¥R´Z-*•Š}{cóÄŒŸ0�€v:p@/t%&\aÒ”©L™6C™Œk·&.vïÜI§.]xrÒ$ú ÈŽm[~¬0¢ ¿€•оýú3|ä¨F� B,ãâêŠB!§¶¦†Ä+Wðo×kkkŒŒ�Kzzæ}ËDfhˆ‰‰ …E öÙÙé¬lRou&Ž?ÅÑã÷àro]óí²‹E899è¦d]ƒŸ�˜\oÖ×ÁÁž¥ÿ}cc}úÛ÷}%!‰?ÌÍÌ8{þ"Z­† íðpoËw?®Õ[ ÔŸ!ƒî¸ ¸8ßäï¾|%o/¬­,É/(ÄÇÛ“e/E&7dö¼ôÏÿî²14”Qz—õWQq1–úÿ³²rîê j”I]‰ªI!©®DuÏ}ÕJŸ-ÿšÞ{“ŠŠÊ»Ä‚¦Ëô^ÏF"Ò�eË–ajn�ƒƒ.ŸîÝ{°gwCB°µmÚòê¶9ÿÎÛQ*•ø·kGï>}õ�¸¬¬¬¨««£ª²²�Ðtâøq<½¼ôn-¯-yS“)//�/>ÿŒ}{cônm-ÅÚÆšÒÒ’F…¥ãG�òX¯^\¼p�ªÊJ^Z¤³¬­©ÁÔÔ”'ž|ò¡×±•|õÅr½ÈmgïðÐÏq¯gòÿ±µkUo :ËCCƒz–?~þhµZÊÊÊÙµ3²Þ€ïîNëÿÇ×Ï�ûöÑ1$„Ä„Dº†…‘—wç›.--%zÏnª«ª°±m¥¯Ó\[·¦  eu5ÉIÉ´ h4­VËÉãÇ9sú=ÃÃéToÿÙÓghWï]ü»S ÒÕ-·W‘k ·ÓÜΣ9¸º¸à=c”——chhˆ��ééé`ggGuu5ÕÕÕôéÓ’““ E¡PP]]�F£ÁÄÄ‘HDnn.mÚ´A©TR]]Ýâ{¸má`dlŒ­­m½o×ÂRWÏJ¥ºçii©N%w �))Éz÷�]‘;6b$ffæ(««‹Åé¬ 111Å×ÏŸ=Q»HLLÀÞÁ__?Ò®_çæÍ›xxzêD³¢"jjjxî™;âþí ç ³|¹]OÞ¶¸+ù–ƒ•X˜[ÔÛfffNyy92¹ K õjcØÊ,ššleMÖ =ÃÃÙ¶eK½o¶° _ÿÍÝ}ýMac£»WSýw¨ûÞýqmÝšŒôtúõpßï.$4”ŠŠrVÿø …‚N]º6X\ÁÚÆ–’’’z±enSRR‚L.× Ë"±˜—^~…ë×Sùú«¯ðõóýÝÁ�´ÁÕU(š)‘zí?|÷í­¾ŒC£õîÝTUVÕ‹)¥PQUy§m?~ôjµ_?ß?¬ÎQª”˜˜šr`ÿ>*Ê+ðó÷GyŸoW©T"“’’œÌî];™3w*¥ò�ók GìÛKäöm¸¹»Ó®}{D"ù7nPQ^Áo6èû[·¾¡ŒôtÚ¶uÓ¿ƒ·]iµZ-ÙÙÙúzÆÞÞ^WWUU=ÔØ]ýäàþý¬øâ l[ÙÒ»OßF­ÐZµjØ———aÛÊî®ïM×7ºžšÊ�¼\¾ÿö›;ûlm¨­©iÔRW®P`cÛŠ¬ÌL 033¯×ÿ‰Dœ‰X,¾WbKÞþFF $RIƒÎ>Þ\½–Н·×­Av~³Îáã}çú|}¼PÕÔè…?íY½î—fåÒ1�³ç.6º¯°H×qvkÓ†ìì\ºt¡[×N¬^ûK ÊV×Ivk«x¸·Õ?™LÆâècõïÛ‹÷Þ~]ŸöÔ™sLš0KK ¾ýa ¹œÃ!‘H8yú,E%ºÉ—+à›[V[ÖVVÔÔÞñA÷¾«¬|¼=©­­¥°¨˜ íøfŧ¤edòÌS/“ßHsUM µ55X˜›éÝ --,ô"Úíw¸ÉÎYl&½œ›ÜßQ{ö2iÂX† ê׬2½×àÜÜÜ”­›×ðÒóÏ1hˆÎ%´¬ì&GŽF,söÌòòò ¬zGü+£C` aÝ»STTĶ-›IINÂÇ×OŒ¡¡!­Û´áô©SôêÝûŽàR^Î7_­àãÏ—5.XÛÛÜ‘¬ÌÌþþÚ´iKA~>¹99õ\æâ/]bǶ­„÷ééÇ™2m:á}úèËgÁ¼¹\MIÁÃÓó¡Öy&&Æz7½Û1™6÷z&–÷_­Tad„JUCmm­~åÀS'OÒ¾}{ŒŒ<9a¢Þ‚¨´´‰øÞI{nÞ,¥¸¸˜Â‚|œ]\ê‰LÛ·m%¬[7Úé _¯øR?€oÓ¶-II‰dfd0|d㱉öïÛKnv3gÏi ^jµZ®\ŽgÒÔiBCÛ¶¶¶¸¹¹Cbb"nnnº ‘Õ«‘ÉdLž<™¼¼< i×®±±±œ;w &NœÈ… ¨ªª"88˜mÛ¶‘——‡›› ,¨÷¬›ËmkˆªÊJ ñóhQzKK+rs²�›QzZ>¾>¬_»KKKÄb1kVãâêJë6m(//#jg$‡謜ڴmËÖÍ›¨¨¨`ðС·Ä 3l[ÙñÊë¯ë¯­N]§¯c««ª(,,ÄÆÆFo±aùÿ,�ML¸Yv³Áwjzë[5cR¬G«ölÎ<Üäþ¦=v,'Oœ öâ…zBè⵸¹»“‘‘ñÀïÒ¥¸X2ÒÓ‹ÅDíÚI÷Çk2ÐEe%}úõgÀ Ád¤§óÛ¯¿âååUoEJ[[[ÌÌÌ8}ê�»t©—þðÁƒøúúêË®}û˜˜šÒ®}:†„ðãwß5ˆ×ô{166¡²²âÿ Ew&OÜÜÝïiµÒh~&ÆTUÞY¨¢ªª²^)_?ƒƒ‰X½ŠVvöú8uM{ñÇ� ((¸^,«Fë|¹‚êª*BB;QWWGfFÆ}…BAUU5®®®Œ;ŽÊ»Dšɯ)ÌÌÌ™õô\²23INNâØÑ£Ì˜9 ©TŠ…¥§Li�ævŸ»9è&²Eí¹×nÜøñÔÕÕqáüyvGíbÖœ§ÛØy��Mônæºq@¥%%›˜àíã£q4 ¹99õ¾—c_®`h`ˆ·o}¡21á ééi̘9 ¹BAü¥8½µ—»§'[6ý†�ÔŸÆÎí[·Ð©KW}ÿÐÙÙ™Ø ©ö¯Åîr+V¼Î²e¯ÜóçÍ7Ÿföì1Ìž=†Ï>{©YyΟ?ž×_Ÿ¥Ï¿G�`þ‰äÕÖý©y˜š™ K¨ªR"5�Ö[ @t»ÂÖjÑhîühµÀ­†A$!‹¡[>¹¼¢Z×øX<ø ÖÞýºŽÜ›¯¿Ä3sŸâ±î](w·6L�4ž#ÇN°=r7#† "8°=�;uÔ‹®W×<ýÓ&?Éó ç¢V«Ùݼ•Í\œ�øÏë/ñò‹ ññödç®h}ëç«›µŒ�OhV^ÝÂ:s´‘xLûF­V3oÎtž|b4o/y™Áú6×é^dfe“œr�ý™5c2K^]tgnlŒB!ÇÅÙ‰±�göS:W­ÛÕ“§Ï!34ÄÕÅ™ËWIHLÆÃ½-J¥’¸KWÈͽAüåÆ�ÁÐÁýY¼hc¶1dàAÆÑÁžÿ¼±˜Å‹àëãÅ®Ý{Ñh4,zn …œ¸K—9l³ŸšBx¯†K]Ÿ»ÇÈბH$899йSG.Æ]jöýßÜ�AÍõƃ!Ö\/»gÐï»;0~²¼^礩2½CC‚:°téR\\êÍ¢Ýf}DU••Ì™;�FÚŸ~jòz®$°cûv*ÊË162B,S[[Ûฉ“§°á—Ÿ9}ê*•Šüü|V®XA‡À &gÉLLMP*•ü-›š™1lÄ–þ©×®QWWǵ«WY¿v ý¤ºªŠ¸ØXïŠ;%‰èÈé“'ÿ´º·°°ð–µÐMjjj¨ª¬¬7£ÝšûLC"‘àîáÁñ£GÑjµ$&\áı£ÊdxûúrðÀ~jkk)--%bõj© –r IDATJKïmY!‰ðòñ!*27�êêª*ÌÌ̉D$&$PRZª�ãáéÁáƒqmݺÑYÚÊŠ .œ;ÏÈÇG&—ëW8»=9‘›“ƒD*ÅÂÂâÑ}dºv+»ªå«áÝNs;�æ`ddÄÙ³g)**bÑ¢EÔÖÖ²lÙ2V¬XÁ›o¾Éÿ«[½ë™gžáÌ™3ÄÆÆA×®]yï½÷9r$sçÎeÕªU¸¸¸°eË”J%{÷îÅÚÚºÅ÷pòøq¶mÙÌ×_}…F£¡[÷î-JЮqqq2qòΜ:ÉÛK–àíë‹m+;žv!*•Šgž}V÷~zû •JÉÊ̤­›­Û´¡°°¥R‰¯Ÿ?¡�»�œ”Èî];ÙÍÂùóX»jU½ó~÷Í×Dn߯Áû±³³k N·jÕ ­VK\ìE½Z£RaïÐ|KÆInýñ·hÓè>‹6�ýþÿƒõaÇ׋aÔ!(vlÛJÔÎHvnßþ@ïmmm-k~ú S33&M�J^n.Q;#›L³ï^Ž9B]]�~ ¬Ö¨Ô!S¦OgͪŸ8qìÊêjÊËtÂàþ½{™üP¿Og*ÊËɸ%&fge±fõªFÃ4O._ŽG¥R¡V«‰»‹—÷�¬m¬±²²bÐ�¡lÙô[³ÚÂ�AÌ�ÿ sç?s_� ÀÝä¤DÌÍͱ±±!ñÊ<=½zwÇ)tpt¤¤¸ˆ:u.®®ÄÇÅéÓ4'¿–�vý:9ÙÙ´nÓFo!WYY�µ� åeeêêÛñ¬\\]õ±Ö@«+áÊeD"NNNú˜kyyy˜˜š W((+»‰J¥BY]MeEÅ­v®ä�®yÝš5$%&"‹12RP×ÌöÀËLJøKq”––¢¬®fïž=”••áîáNRb"9Ùº0GæðÁƒMæåííÃÕäd’’ñö®ou\]­D.“c`hˆJ¥ââù ¨Õ}}¥®«#öâ…{ºÊ)ŒŒ8yüå唕Ý$öÂE½Eä£B‹-™šš½(.¾É•+©´níØâ Z¾|7n5è¸×ÔÔ" ð¨sAY…“�ùïΣ¹þØc\‰�')1©�!R©#ÅÝ’¸Á�D"¢N¬Û¯�JYC�FMm­''Â{…µû�ïaß�Ã|ýÝ*ž3{»VìÚ½W´º%¼ñÊ"¤R)_}ó¥¥76dK^[ÄÅØx6nnؙۼ5’)“ž@©Tòâ+ÿ!+;?3ïûž'fß!œœhçïG̾ƒ|ôé—w:1n:³àìœæÍ*whÀ'ŸÕè¾ôôL^X¼„ófñ§IJ¾Ê{|Ö¢–V«åÅWþûo¿ÆŒ©Ù´u‡ÞR¬¨¸˜_ÿÀÔÉãóøp6o‹äùOþX7~ým+.^¢¦¦–ºº:R¯§cv+°ç¹ qúAô¢—ßdÉ«‹xãÕE”••ó鲯øeã} ìËWñóñÂÕÕ™˜}yÿãeÈårüýt écîXMDîŠæÀÁ£õ®ÿç ›˜2é >ý𪫫ùyÃf²³s[ô^|�ù@Wäl‘Zʨ+Q¡Œ-¸¯Àt›‹±ñìŽÞÇÀþ}î[¦·÷'&&²cÛòrsùß»ïÐ.0°qâ2'Ž£C`]¸|9žÃròÄ ºtm\h "3#ƒoV®D*•àãç§_¶^ÇÉÛ›g.dÓÆ�üðÝ·(är:ñÄø¦]ÒìììÙµ#òw™Û6C™Œo¿^IqQ–––ôí¯›A?vä.®® ÔwdíªŸôñ6¾\öy½þE—°0fΞóÐêÞ_^ÏŒY³Ù¿w/�AÁúX-Í$4÷™äç7Ï2rÐàÁìÚ¹“Ï?ÑÅÍ5z ‰„^Ὁٳ›¯¾XŽD"¡KX·û¢õññåô©S„5"ôíߟí[·`(“áååMPp0Q;#™:}îîìŠÜ‰·Oãõ_~~>µuµõ‚FŒ3/ooÒÓÒpvv~äÚ`?‹¶ºq‘3E‰-v™;S”¨Ï£Ù�l©”òòr:ĸqã8{ö,NNNH$:×u[[[Ο?Ohh(gÏž%44”²²2\\\¨®®&99 @­VÓ¥Kœ��È: wß~œ³€_ÖE°+r'aÝ»× jÞ\vlÛF~~>ã'L ¼w¢£¢Ø¾u+�»†5:™Þ§;wlçü¹sÈå2z÷틹yCQ¸}‡@^xñ%6ÿöë"Ö"B„§—'¯-YrO!S®PðÔìÙ¬øâ ü�I÷@ƒR©”1ãž &zÕÕÕ( 3ö�]rÝ=<¸‘—Ǫн¿^Þ�Zïyzy‘—›KäöíŒ;ö¡ZÞ88:âëçÏO?|�H$ÂÓÓ 7÷ú›“’161Ñ»¢0hÈP~ûõW@gAxÛò¯©ü~Y¿žêê*ÊËÊ�J¥ÄÅ^¤o¿þM¶#VÖVìÜ® p­ÑhðòòÖ[à 1’�;¶ch s“ìÞµ“U?þ€F£ÁÛ×—®Ýº=Rí­ÈÊ:X«¬nþÆÏÏ ¹¼y«ˆTU)IL¼€ÄùóÇcaaÊ{ï}Çò寰qc47n³xñ4.^L",,� ^f„ÁLš4ssRS³X²äKÒÒråBàÿ³ü­ÕjÙ¯ÅÝ×êO½²pcS–;¸ü®<æfr ²¼ÙÇ;9ÙÓ¶u[$béY¨ÕR K1”£P˜cdbŽDbH�ª •ª ¥²‚Ze%ÊšJª«ÊÑjë°·³ÁÔÜOOOª««IËÌlñÀÿnú÷íEçÐŽìÚ³—ŒŒ,>\úþ>t‚ª¦æ¡—ûâE ˜}[[[|}}ùþûï˜:u*•••\½z•€€úõëGvv6Ž®Í›Ù>îË>ý„§çÍÿÝ•²²›üçõבH$ŒŸ8 4Z W._ÁÜÜLo¡$™ìß·ww‚;vdÛ–-ìŽÚÅ«o,ÁÇ×W( �)‡¤¶®ö�ãa> ´Ø’iÖ¬Ñßñý¬©©½§_f]�š^øè�/Îß߃#GÎ3eÊk88Øò쳓˜8ñe22òxé¥iLš4”wßýVxST–s¶ºŠŃùOŸ­®j‘À$‰ÈÎÎ#;;c#��NNn3fL@U£¡¸¸’:µ­*«*¨­U‚¶­¦…BJ«V–)8~ò$ÎÎŽlÞºƒÊªj}ÞÚf¬0×cã=j?~³±XLFf‹^~ó˜þm¨jjHHJaá¼YÌú)jkk‰ÜͪÄuhºL•J%ëÙȈC±²¶ Hà‘B­V{ñ"NÎÎÿ*�  “µþm¸\šÆÊ”­ÌõÙ¬t+S¶rCY‚¿E›f L ³ ÈÊÊb̘1„……aaa�V«¥gÏžˆD"}\¦ââbÝ*Dµµ„‡‡cbb‚¡¡!/¼ðuuuX[[£ÑhhÛ¶-ææædþŽ8j¿33sÞÿøvïÚIÌžÝD¬^…X,ÆÖÎŽAƒ Ø]8:9!‰Yõã|÷Í×›˜0nüxA`ø—¢ÕjQ)•\Ž¿Ô¢øb�"-¶dZ¿¾þlþüHllR£Ç~þùbž{îÃûæy/K¦ï¿‹^½¦£Ñh10�bjjLqñMÌÍMxúéqXZšñÊ+Ÿ o¬Àÿÿ„üýw±dð“ÉYïÒ -3ÇU£eBæu®¨Z?¥11(¼g7D"UU*Ôj]ð:µ´Z$ÝÊqR)ÆÆ 4-½ož‚��R©„êjåZæÞ^¸º8qøèÉ{.GÚR©”ðžÝÈÎÉÓ¯H÷(abbLUUu³4 4�“c+¦M™@ï>½1¹+x¨€À£Äþ½{IIIføˆ‘õ‚µÿ[¸VžÍKçWÐÏ1ä¾BÓÊ”­Ääœà£à¹¸›:=r÷\ZZJJr2nîîËIà÷,•ÕÕÿÇÞ}‡Eqµ þm£÷¢ "*½(bA±cÁÞ{ï1ÖĘS|Sß$oc‹=vcŒÆÞ;bÇ®(M)ÒËRv¿?VWù@[DÏ}]¹‚;uÏÌÎ9óÌ9ϼÔ7l ‚Pñdge±tñ"\ÝÝißáíÊ—»'Stt,zÚ�ñôq�™™%çxÐŒE×!+«ôII)¨TšY•JÍðáÝhLrr ÙÙ¹$'§‰³U¨p®+s™r/†Y¶UËh*DÍ”{1å0=jÜüGŽžxáÓË�ŸŸ_愹/"<â†öõóåQPPÀ�CG+ì¹–™™%~p/�½� #G¡eˈ›¡‚kÕ¦ ­Ú´yg¿¿£±Ó½óSÈZÄ�ãʃ›´«âKK7mž¦ØìDÎ&‡±/.˜û¹šä´Ó½WÈhr5ðõ'ÿ¿D"‘ˆ“ òÁGS߉ïZî ÓÖ­GÐ××)Ó¼99%÷ðóófúô‘tî<Ð$ö~”qýIO>}ð£AOúõû„´´ :wnNÓ¦â-tBÅt$+ƒ�woñ‰•Í3‡Î�ËÉæ—¤øç 0 ‚ðüj8Ø1zÔ0š5oVâ¸A¨˜|-Ýø¥î8VFíáZj4«£ö±:j_‰ózšUgxÍ6À$‚ ¯[¹ƒL~8¸ÄÏ32²X¿¾èÛ¦FŽìAppH±yoߎ¥J•JÔ©ãFDD4~~Þüõ×îR·kjjDFF6YYÙЫW[<=™„Šëº2—±Ñø`d‚�ž6 ÍO2>¿€‹¹ÙìÏL/W&A^œ§»Æ¢‘_#\„·”£±ßy�&89ŒS‰!\O½E¢RÓ®´Ö5Åì~Ö^åÊÁ$‚ Âs™rs•%¾]ÎÀ@�Î�›ùL&“–¸Ž»wïóóÏËùå—��Ëe9r–íÛK’²sgþþ Ø·o1wîÜcÆ}L�:ŒV­|9|8XI¡Â:’•!I‚ððòpfè��ø5öCGGGˆ ¼|-ÝD IA^¢r'þ„7ß›�ø[„7‹w-7†‚¯oär¹(AAAxN¢5-‚ ¼“7ªËÀý¨[¯.2™Lˆ ‚ ‚ ¼ dAÞ)Í×§_¿>"¸$‚ ‚ /™2 ‚ ï„Í2p`?j×®�T*"‚ ‚ /™2 ‚ oµíZÒ»wO<==‘H$¢@AAáA&A^º:ÕE!ÿºê5©ßÀ�jÕ‘H$DFD‹B„WÈŵ†(„7@Dø-Q‚ ¢þý׈·Ë o!ñv9Ax—õíÝ…îÝ»âèè( CAA^#Ñ“IAx+ôïÓ•®Ýºˆà’ ‚ ‚ üKD�IA¨Ðú÷éJ¯^=©æPM† ‚ ‚ ü‹D�IA¨�†éK÷ݰµµ…!‚ ‚ odA* ™LÊèƒèØ©666¢@AAá "‚L‚ ÂOGGÁˆ¡ýéܹ•*W"‚ ‚ o d„™¿¡1F&øè`£Ðü$ãó ¸˜›ÍþÌtŽdeˆBÞY:: Þ3”;`a!Þ)˜ƩĮ§Þ"Q™€µ®)f5ð³öÂ×ÒM’ ‚ ”ƒÄ²®:7§P”„ðQû[­V—0]�£û¿wÓê¡«Ç'V6Ô×7(u¾s9Ùü’Ïue®8´Â;ÃÄØ�1£‡Ò¶mÌÍÍE�‚ðRÝ̈eeÔ®¥F—:Ÿ§Yu†×쀣±�(4AA(dÞBo~�ÉßИY¶U‘!)Óü…¨™r/¦Ü½šv^ðE‚ífÔ F­ùì©¥÷xú³æíT÷Œ8Ý„—ÊÜÔ˜‘#Ó. S3SQ ‚ ¼tÁÉaü²€Êzæ´«âKK7ì ¬ˆÍNälrû₹Ÿ›Àt¯ÁÏÝ«I­V#‘HDÁ ‚ ïdÞBov�ÉCW�uö5Ê`z¤5ïÞ*W�¦]>ü¦š<ò‡ß_RJÙIÎ/E‚´Ôù_E�ÉÃÝ•¿×þÁ¬y‹X¾òÏZWCßzrèHÐ+ÙÞ‘ýÛ°²,~5kÕgG>ùh"Õì¹s7–¹ó—pôØIí>>´ïةȴ}{÷páüy&Lš„‰É‹=$-,,äÀþ}„‡†jîU¼¼hÓ6 ÈÊè[·¨^£Æy±²)w€ @†„O¬l]Žp›5…èÖ³G•–Cþ�$¤ÅÃÖ룹$Oü[‚r—J¨2rQÝË|h*Ú~Ô#êUHLLbÁâå\¼xå…×Õ±]ÖoÜòÊŽåÊÕa` ¯)E‰„�ý{¡ÌU"‘Ào¿|GnŽ’?VüI—NíøíçïéÒk qqñš]û¶üù×?\º‚ÅˉOH,u[e�ïMõÍŒO©ëãÍšuãåáÎß#6.Ž+W¯2zÔ0Z´hŽ¡¡áKÙ֌˓¨LeóÝ Â3îð�÷è§.·eÓ&š4iŠa9ƒ\�7ÆÉùå6júöï�\^ö*úVTsfýÆð‘£¨ííMFFëÖ¬fùK™0ùí|_~õµ¶–�•ÅÌ_~fÓÆ�Œó^‘õ-_­i¨'%%1í£)Úädg™wïžÝ2ú½±ØW«ÆÝ;wX²h!ºzz´nÓ€‚‚Î�=‹‹«+gNŸ¦gïÞoݵÝÂÒ’ví;¼žÆ›\NXXõ4Ð~^®s¦ÔºC­fÛ–Í´m×'ggΞ9ÃÖ-›7a"ùùù\ºx‘«W.W¸ Óʨ=e0ÚyÄ�ceÔžR¯!%•£D"!59†KG—‘MA¡¦‡pY;6©Ö·r™„‹GÒhÔ²r¹Á+ëõ²®g< 99 ‰DRæu¾Škéë’›“ü9sÐÕÑ¡S—.œ<~œßçÌá§_gj /Ó»XÏ] ¹Ê‚ßgÀÀAŒ›0�ü‚Žå?_|ξù¶Ä7Îþ³a¡¡×ùì‹/E€é-ײU+LžxðòªÈ¤2nDF¹«ÕjnFF"•H_Ê6._ºDrbcÇO 77‡¿þü“*UªàéU €ääd<@ÝzõE�IÍ0¹gå`*M}}ü �˦3: ­lŒÔÊ€ÜÝad¬B†¨ ´A% RMK*rÑmîDAxÙq‰ÈÐ{8��‚ZÅã^NO·|É\œ�j²vÝFöëE^~>?þ<›Ã�Çз'cÇ #!1™k×Béݳ+»õÇØØˆñcG¢ÌËãâå«\=Œc'N‘™™M³¦�¸ǴϾ&úöÎû•¦�2â½I¤¤¤²ùïU„…G2`è{¨T*Ü\� �dÚÔI Ø—Ys2°_o”yJ–._ÃÖí»µûkkS™UËæSá凟g£§§Ë©£{Ùwà0úÔ©]‹³ç/òÝ¿’”ü€Uk×k—ïÑ­&ÆÆ¼ÿÙ7Tw¨†©‰ K—ÍgÕÚõÜ‹�ç¿ß|AÝ:µ‰‹‹Ç¡ZUbbãP©TÔ©íÅø±#9qò ‰4kâLJ“Æb_ÕŽ›Q·øé×¹\¾Rd¾jöv¬X2�Õn NmOœkræìy>ùìk”J%•+[óýWŸãîîÂ_ofØàþ:Äg3¾ÃÃÝ•/>�‚«‹YYÙìÙˆŸgÎcúÇ“Я�{ 1)™SG÷uë6=ú¥Ÿ|1ý#ÆMþ„ÐÐf|>•† ꑞžÁ‚ÅËÙ¶sÏãm 3þX47N�9Ë×ßÿLVV6u}¼9uæ,³ç-ÆÖ¦2»¶þE-O7¦M›‚Á ¿ÜœöîÙÍíèhôôõiÖ¼9ž^Ìùm&~MšröÌi¤2¾ Q¯~ý"çÝÚ¨ýOͱr-5šµQûŸú¤77'‡­›73hèÐo˜þX¼˜èè[´iÀÞÝ»¨× cÇ�çôÉ“\ ¹J—nÝ åÇï¿£}‡ŽÜ¸IÌÝ»¸{x0~ÒdîܾÍ÷ß|�›»Ó¿ø‚óæræôi>œú1>uëkOž2¹\ξ½{´O³êÖ«O³-ŠíߺµkèÛ¯? |}ÐÕÕeäè1üïÇÈÍÉAO_¿Ø2††4ðõåÊåçèfef²uóf¾úæ[m/—šŽŽ 2„cG�jƒLW¯\¡J•*tíÞ�µ«V½’ SZZ*kV®dâp#2’sgÏÒàÀ—ºµZ]â1IIIÑöd:î‰ ÷¹ÿ>©))ØUµ§]ûö›˜�›“Ãî]»¸} SSڵǾZ5 8x`?‘áááÛ°!^µj—¸NÎN„‡† 2……†¹ LKKeÏ®ÝÄß‹C*•R·^}š6o΢ù¿Ó£w*W® hz›4jÜg—"ÇÕÜÜW7Íð°ÚÞÞ D¥R¡V«Y½r®NãZj4•õÌË`z2ÐtåÁM®¥FœVæas*U!2™œÍ+¿ 6ö9y P<ì¥$)¡ÎÖ<Ç‘<ñ·Z­‰��MØù=ÔòëCaa¡¶‡áÿWÚuHGG§Ì׳­›7±eÓ&ú @àáÃddfÒ¦m½úôáFdd©×³+—.QÛ»@‘uªÕjvïÜÁ‘C‡ÈÈÌÄÝÝ�á£Faff^æm?úŽ+—/C™›KÓæ-ؾu £Æ¼Gó–-‰¾u‹5«VrçömôôôiäçÇÀ!Cøò³édfd2gþ|m¯¤6m2|8óçÎáÜÙ³,\²”¸¸8Ö®^EÌÝ»ØV©Â°#©éè¨-ß›7o°sÇv²2³háïO¯>}¸sçY™™t4ˆö;aeeÍ’E ‰ êiÓbuMIõ\RR{vîÄÔÌ”[QQ˜[XТ¥?Õ«¿–z®´2-ë±Ùµc;Ö¯§gïÞtêÒ•iM!++‹Ÿ~�Y,¿â£zN™›ËÎ;ˆ�‰ÁÀ@ŸVmÚj¯=O^wW¯XÁ�¡ÃhÔ¸±öóÎ]»‘›«dýŸkùpêÇE–Ù¹}çÏ�åó/g”;¨öä:ì«UûŽ+–ýA»öÈÉÉáà�ý¤>¾Ø´eK–F›¶\¾t¥RYêv�P³¦#Uíí¹xá'ŽÃÉÙ™f-ZzýG"øÌêøÔ-`zRxX÷ââ;n<ÃG�"øÌuЬÌL��‰ºqÐôfKHH FÍšÅÎ�AC‡RXXH\l,Ç�ÃÝéTŠL&cÔ˜÷èÓ¯…;v§C4×ô*¾å^öÑ2�ÖQ2™œØÛ¡„^=Ƀ ™¹dfç“•“Ozf™Ùydçä‘–™GV¶æ¿´Ì<2²5ÓÒ²òÈÌÉ'#+�ôL%©™Rþ˜3…›açŸ`zÖuèy®gG¢¾oCôtuÙ¾u ñ÷î=ózvõÊejy{[×™S§Ø°~=NÎÎtîÒ…+—/³jùòrm;;+‹ùsç’Ÿ—G«6m8|è`‘e–,ZÈýû÷éÓ¿?Î.Îìß·—«W.ãááIjj )))Ú¡&ÑÑ·´7{�I3ù¥RIÿ�ƒP*•ü>g6Y™™�ë‘£GiàÛ�jìØ¶• À@ìììøìË4mÖ\{]°²¶.ö�J«çbbc°­bÇä)áèèı£GËU�=o=÷¬2-ë±iß±¶Uª°wÏöïÕ|¯½z•ú�“'O`fnƇS§âߺ ÷ï+6ORR)))4,! ÓÂߟë×®iïØ¿��;v0ý‹/061yé×G''ÆŽÏØqã‘J¥ 1’±ãÆãU«6}û÷gì¸ñø6l„WíÚŒ7ža#Fj—íÛcƾÏÐá#86˜¤¤¤R·uüXR©”±ãÆ3`à  ›¶ì äZèÃ`G#ŽŸ(ºÞù‹—ñÇŠ5ü6W“�£UËÇ9¶ïÜË?Ïæ3ç`÷ÄMs\\<3¾ù‘þ7‹°ðHü[4A*}|ù2¨/¦&Æ,úc%iééœ;‰”Ô4Ü\�™<~ ‘7¢¸úpßš6nÈÉSÁžgÛV-Q(,X¼‚5ë6ðíaß�Ø™–<¶{ã¦íüï×¹üô˪ÚUÁÚÊ’Æ�|9x8�ù‹–ñí¿Yæ×Y¿3áƒi\¸t…ôtÍ j%k+Ξ¿ˆJ¥¢–—;žî®ÜŒÒ\]œðpwåJÈu ôõñkØ€c'N±ÿP ‹—®D&“Ñ£Ûãqé÷âïóåW?ðߟ~#<âmü‘H$de¦3qü(/šÇ•‹çIIM¥AÃF%ÜÀ‡Ó¼EKd2•+WÆÃË‹ˆ°0íô:>>H¥Rì«UC__�ü¼¼¢�ej©çRiÓÛwì„©©)ëÿ\[äóÔÔB®^¡^ƒôìÝ»Hcñiü[µfÐС ¢yZœ��  tö€¡‘«V,G¡P0xذR×c``@nN‰‰‰˜˜˜2uÚ4,,ŠæKNNF&“aP†á†?|÷-£‡côða|üá(:´ h÷ÜףĄDÌÌJûŸR©$äêUùù!“ÉðmØ�Ó§NUØëxYŽ €��666Èårœœ�ÉUjžj‡‡…Ó´Ysd2ž^µhßžÂÂB®…\ůqc æææ89;zýéù×\\Ý×6T�]]‹ôŽiÕº mÚ!—ËÉÏÏG"‘ ÌËÃÉÉ™‘‘DFFàèäøÔ!+yJ%‡äòÅK¯4ÏÅër=UPhð ¼-óheudçBŒåÙT6“âV]��¥œÊ2Ü4›Jq­¦ÀÂDJes9n *™Ë°2•áZMó·ƒ­‚ZN ì+K±±€BeÙ†M—tzžëÙàaÃèÛ¿?mÛµ{¸žû¥^Ï IIIÁº„Ë©“'‘H$ 5š.ݺ3`ð`ll«”kÛ—/_&==�.ݺӥ[w:w)šÿmÀ A|ôñ'¸¸¸jo¸SSRñðÒ<‰ºy“è[·¨joÏ�Û·ÉÌÈ !!wO.]ºDfFþ­[ãS¯­Ú´!99™+—/k×ïÛ¨½úôaüĉH$N�<‰¡‘nîîsçömþÙ¸�ªöö%þnJ«ç¤)Þuê ‘Hpuw'·„<œ¯¢ž{V™–õØÈd2†�AvVÖ¯§ª½=mæ€zê5U߀ԔTÒÒÒpsw/2Ä[DILÀÜܼÄ€–––äå呞ž¦ù.—.r<(}==ÂBÃÞØëQnn*• ݇"ŸæFd$>u59 �ML¨éèHÔÍ›Úé™lÙôÝzô,̳³³+Ö®¢3Ð7 1!‘<¥’6mèÚ½G‰ó•Ô^ »~ÏZµ°´´ÄÀÐ�Ž�»PµjU""±­R…ªööH$|6äFdäSðÎÎ.܈ˆÐ6#ÃÃqqqÕN744b¤IX[[“Ÿ—‡L&C™›‹�¡!•*Uâî�;šc�‹›[)µÂ9°o/††¯e(àË$†Ë Âkd£�¿Öu¨Qaö]g²7\¹½VN R¡.T£ ŽFne„*#—üè8rw‡a¾¤÷›ÍÃpxCM7(=9²ê–¨>‘CGFÞ•8 cS�g?EÍÌÊ&#Cóô/õa·N‰ììlQ*•ܾó0ˆF³&Oï.wOÓ U©Tdfd!}¢‘±vÝFÞ5©Tʪ?ÿÖ~î×°Oÿªè FhÄÃÿkn̬­-µÓbïižê=Ú_©ôñ6®=œÿѲn®Î˜™™òàa×Õî]:r:ø·oß-²½ŽíÛòÍŒiD޼Ť§SPP€®ŽFFF$&%ûž•+käQ{y?y†ã'Ÿ€»÷pŸ•­T*ÁÎÎVS1Ehz*„†E R©´ËØÚÚð÷_bhd¨]þÑ÷¾Ž—‡¦&&œ»p µZ…�w-œk°tùlm4Ãk:u S‡Ç]ñí«>¾A ‹|\n×èfoǾü˜V­ü‰¿w�ï¿ùš¼¼|>ùtz±ü ùùùäååIflbbJFÆã.Á•*UÒþ]RcÓZ׬Ô¶µ®ÙS§éêêÒoÀ@Îÿ½Hî†Ä‡y°4ÿ¯^½H�±$VÖš�¾Ë£†ˆ‘±1M›6cßÞ=Ô«_¿Ä›°'=ꦿkÇvrssñ¬U‹V­ÛéÅ`aaAAAÙYYÅM§NžÄÙÅE›äóÿÑÞôÄÇÇ3oö,< ÖV^–V–¤¦¦”X:yü8Í[¶äÒÅ‹dgeñÉTMÀü¼<Œ��é7`ÀK¿Æfff±`Þ\íùTÙÆö¥oãiǤعV¹ø¹š�•…ŽŽ]]]í4O/Ôj5ééìÞµ³Èyýd£õÿs÷ðàÈ¡CÔ«_Ÿ°Ð0ü7.Ò;!55•ýûö’“��•u%í5­šƒ‰‰‰äæä�W-¯§nCßÀ€ÁÆ‘‘žÎ‚ßÇÁ¡z‘ßgE“¨ÔÜ„>z‹\y?}ò$ËÿXŠ]ÕªLùøãb=ΞUÏ™™›i{??í¸¼ŠzîYeZžóÂÝÓjܹ}›¶ížÙë®~ƒdff°jù2ôõõñmäWìE–VÖ¤¤¤”˜‹,%%]==m²e‰TÊ'ŸNçÖ­(-X€»‡û %b>rè�¶à£6â‹øgÃßH¥R í;<³§UNvv‘c¥o`@vV–öß»wí$7'§Är~”ÃçMªC_TÛöí <|˜ùóæa]ÉšV­Û`_­Z±ùJj/fd¤c]©òç°æúp+*Šûñ÷øcÉâ"×Ïü¼¼"õõ#zúúXYW"æî] &&¦EÚ_‰„Ó§NzC##t:jŽ¡“³37oÞ@O_¹BQjζ¾¾4ðõÕä¾<X,Ù¸2 ‚ð/Q“µ2£qMQg)IûjòšVô®CaL*yWï¡Vƒ r†¢˜’ü ÷(ð½O~È=ò.Å`4® ¹û#È\t£1�‘U2¦0!ýaަçóàA ºººT±µ!î^<®.Ïÿ„|İH¥RT*£‡fÆ7?b` �L.#-½èxe7W'nÜŒÂÝÕåáMvB™¶áæúxÿÜÝ\Pæå‘šª¹Ñðôp£JVý¹¾È2CöeÚÔIìØµ�¯¿ÿyyš@]ýzu8wþR‰ÛIJÖt®Y½:±±÷hÔ°>Mü|Yµf}9ÊVÓð¬YCÓvr¬¡m¨êêê2í£IÚüMmZòßo¾Ð.{æìy싹¹K–­F_O�n]: “É8|ŽäM0á÷…ËXü°×–¥…yù�{¹>,+ïZnäñÁðÛÜy܈Œä×ÿý„�­-_~üI‰]ç  …‚¬ÌLm<##c#ãRKOjV©6›ï•:½4 ýüØ·w§Nœx|ð°'Yll¬æÿ11Ew呞žÆ±‡]ßÏ�=K|||‰ÉJÿÒñ®S‡ÆM›’œœÌ¶-›‰ŒÇÍÝC;�ŽŽÕ«|æL‘$Ì™,^0Ÿ_gÏ)9`mcƒOÝzÄܽûÜ¿¿êÕk�˜�À½¸¸"CæB®^eǶ­ø·nÍ™S':|þ­[koD&�Ç�ÈHœœ�_êÏÈÈP;LïQ>‰—íiÇÄÌüÙo+Õ70@©Ì#??_ûF¥3§OS»vm ô0p�öÜOMMA&}úÍ™�­-ii©ã?¸º¹QXXHVV&ººz„…^×þ>Ýü'%%áêæh†Â®[³†ÆM›2rô˜ßšö¬z®,ÉÜ_I=WJ™–×Õ+—¹sû6R©”=»wÑ´yóR|gfeѺmí:tÔôÛ°—"×kkkLLL>s††�Šö‚ ÄÝÝ][vµk{cdlL­ÚÞÔ«_ŸåK—Ë×Tþ­[ÉÉô¢z÷íWêðÁÿÏÐȈì¬,m�Ù¬ÌLìªÚk§·nÓ–üü<6ÿ³‘á#G•y“êк«yøÆÛ¾ýûSPPÀÅ Ø»g7cƾ_lÞ’~K††FÚaæšû€xRSR042ÂÕÍM[ç©T*îÅÅ•Zß¹¹»z…®îîE¦……^çöíhFŽƒž¾>!W¯póá0uGgg¶lú…\�››{‰ëÞ¾u ¾�ü´íêU«rù⥠U÷‰ár‚ðÅç¼ÖuHQ�{$‚¤¾ËIñ'…QP 'åý¿ÉÞxåÑdÎBŠ.ªûY¤LÛ‚ ™‹Ž£<…20’ä~+È\v‚‚ðR?ÞJÚw{P%d#áù_Ÿ|ð°¦qôŸ/>aâ¸Q4oê÷\ëq¬Y�aƒûsìÄ)¶ïÜK·.¨[§6 }ëqæaŽ¡'MxÇ `Êäq²wÿ¡2mǾª_}ñ Ÿ~<7WgvíÞ¯m”{¸kz„„<›­¯¯ÇGŒC©Tr7&–áCðÞ¨¡¸¹:Ó¤qCŽ—�� àБ ?vúõ⛟ұ]RRËþäünL,‘7i×ÖŸ1#‡0㳩�††èëëa_ÕŽ>=»òÞ(ÍІG�¿ÓÁçÑÕÑ¡š}U®]#4,'ÇäææråêuîÝ»OȵPúöîFçŽL›:‰ÀÛèÔþq/c#¦~0––Íüظa=žµj!•Jùû¯u(•J�œ8t”Û¶rá|ñcäêæJÐÑ@ ILLäzHˆvzY ®€§Yõ§yšUj2Ô'%)’Û¡R¥JØW«ÆÙ3gرm+«V,îsÝÚµdge1vÜxT*«W¬(uþÐë¡ìؾ�ÌŒ �J¥Ú\O4d(¯ÿ‹à3gP*•$$$°pþ|¼ëø”ú”ÌÈØˆÜÜÜçþ>Æ&&téÖ�¹³guó&ܼqƒukVо=9ÙÙ\¹|™:Oä�’H$xשCðéÓ¯íÚ›””ô°·Pyyydgey\e=&%‘Éd8:9qòøqÔj5a¡×9uâ8:ºº¸º»xä0ùùù¤¦¦²vÕ*RSSK=W]ÜÜØ³s'5�œŠ5¨s²³111E"‘JJjª6Y·“³A��Tsp(ñ†Ä‚Ðë¡Dݼ©Ê—��£M^QYë> °d—ÿ-��–y´Ž²RÈÕ܉Îç\h.-;šŸT@% 9�;›Qµ²§¯)éÜΘK‘y8Øé1¨§)¦F:\‹Ê£cGSnÅæÓÐK�c,quУ°P��þó׿¯ãz†‹kÉC@|6D­V³bù2víØÎšU+‰¿W®ízûø P(رm+{víd×öíÚi¹¹9(•Jîß¿Oà‘ÃlߪyÃì£sßÝÓ˜»w126ÆÊÊŠê5jƒ‹« …‚ZÞµÑÓÓcÓÆ œ9}šY¿þʇ'’pÿ¾vgN�bÛ–Í,œ?•JEÓfÍP*•ü½n:::T®\™½»w±cÛVm@êM¯çJ+ÓòÈÏÏgõŠ›˜0xØ0âïÝcÏ®�¥.søàAN;FAA�ö¦¾PUXlŸ‡ŽÁê•+8uâ¹99d¤§³g×N<È�á#J\÷ÀAƒ¹Íñ   {ÝrrræâM{)3#ƒ[QQEòñXZYáîታ³ »þ_¡k!W9îÜ¿²ßééi(•JrsrÈÊÌ|X·¥¼ðzÿ\½šð°0¤R)ú”±þpqs#äêRSSÉÍÉáà¾}¤§§ãèäHxXq±±r<(ˆ ÀÀR×åêêÆ�ˆÂÃÃpu-Úë8''=]=::(•J.]¸Ha¡J{ .,(àò¥‹O*§o`Àé“'ÈÌÈ ==�Ë/i{Š “ Å\ÌÍ~­ëP£F*ÑA*Q •è ‘È�HäH$r¤…ößjÔH�"•ê>¬ÌåOÌ«x8ïË!C�ú¹¿Ã¡#A,Zº7Ú´jÉk=_NŸŠ\.gÁâ,þc*•ŠŸO¥y¿koÞº“¡ƒû¡PÈùxúWÄÄ–­a{àÐQììléÞ¥#òËo¿?®ükjºÏÇÆ=îAà]Û ¹\Ž®®.ãÇŽdÒø1L?wW¼k{qùêµ·sûö]>š6===>šü>‰‰ILœ2½XrëR�¹ZÍÇÓ¿"âF#‡ âÒ•m!ùÁæ/ZFåÊÖôîÙ•ÍÛ4 ?ÿæM4çÖ¥«äåå“��CÔ­Û\Ó /<ñ ùùù¨Õj¦~ú""nðågSiÓª¿ÍYÀú�[¨çãÅþýûùáǹr…£GiàëËà!CQ*•Ú!‡äŸ øgÃÎ ئmyyyÌŸ;‡M7ж]»g)ûÿ¾óMOûæÚ!Öºfô´o^æW�;»¸yR*‘H˜0i2UííÙµs'NÎ.Ïõ¤0ôú5N�8�w5nL“f͸rµÔüDu||�Ëå,^¸�Å `ûÄ+l‹4œ\]™8y2{wïbò„ñüðí7XY[1vܸR÷©re®] !7'ç¹Ï�ºtÅ¿uk–,ZÈø÷ưdáÚhžJŸ?wûjÕŠ=µõ©[�3§Oior~Ÿ3[›+jôðaEº¬¿ 9Ó­GŽaÎo¿|æ ½ûö}jùŠÂÃLs½>›\þ<-�–y´Ž²ÊÌÌ¥š£[K“>N ;OJ}#þ÷{"vVrjØÈ>ýæFÜtøjN"µå˜J3=K=ªÙê³`a*M¼ iÞÈ€Âüç ¿êëÙáƒ122*±hÚöìÝ›Èðp¶oÛFÝzõú”ÁÓ˜™™1nâ$T*»wî¢Qã&�t˜˜Ò³wog6={÷¦[�žâ’+TÈszî¬YL˜4©ÂŽÊ#89ŒŸBÖRYÏœ… §–kÙqgfr?7…é^ƒñ-GâðÍ ûÓÊó2©…œ¸œƒ«ƒ. \‹1¡ŽW ä25gC•¸U×A&•r3V‰»ƒ.‰Š½‚iâ­�ŽnÄæSÇY3 GÃêÐýý¿ÞÙëÙÝ;w8|è ŽŽNÔ­W�m[¶°wÏn>ûrnîîâ.ÊTÞhA��ää?w>ÌŠ@äd„×èHVçr²©¯ÿ|o™;—“]æÓ›ìÒåzõèÂòÅs‘J¥Ü¹ÃÔOÿóJLïe^¡á‘L?† ï�"??Ÿ�»÷³²y�Ê¢}@ úôé…§§g™rHTd …‡êü³q›ÿù¹\Nã¦M+TFAx¤°°�Ë—.aWµê;`ðµtÃÓ¬:×R£Y¹•qÎÝË´ÜÂÈ­ÜÏMÁÓ¬z¹LmüΙc;Q�%$d©)(PÑfxK,+k’+;¶+‰f\-µ $š€}’î:âÓr Ö>R"rÕH2Ôø÷ëòÜeð6\ϪØÙ!•HY¹|K/ÂÐȈ¾ýû‹`ˆ(SAx£©Õj”¹¹\ ¹úÔ·â½-DO&ámü ûûMéÉà¡«Ç:ûÈÊ™8»5ïÞâº2÷­9R …¹\FNΫýN®.NT³·#èøé§¾Ž´$r¹ÿMˆ�‹×¾‘®"122$;;繓º–¤S‡VôìÙý�.•$';=}ýwò» o‡ÃA×nÝ‹$kWÜÌˆå“ šDÐm«Ôf iaäVÄiršüRwŽÆvâzöݰåæäyó– ÊTÞTÙYY,]¼WwwÚwèøVWdÞÆ*²ØßoR� 4ÃæfÙV-s ©5Sîż½˜„Š©K§6ôéÓ«XrCA„ŠæÑ°9€Êzæ´«âKK7ì 4yqb³9›ƾ¸`îçjÕ–w˜œ ‚ ¼«^8È$‘H033&?¿€ÌÌlQ¢ÂàÍ2�¦GÓ'V6Ï:w.'›_’âߪLBÅÑ¿OWºvë‚£££( AÞ73bYµ‡k©Ñ¥ÎçiV�á5;¼U=˜AáU*w�©R% üü¼Ù½û=z´¦u놟ÈÎ�A>üÌõL˜ÐKK3¾ývQ‘Ï\Ê”)?ðÙg£8púS×áèhO—.-˜={­8’Â*F�éCcŒLðÑ3ÀF¡I“Ÿ_ÀÅÜlög¦‹ÞK¿B—Ax'‡q*1„ë©·HT¦`­kЇY ü¬½Dï%AA(§r'þ¶²2£_¿ö´k×33îÝKäòåp 9ÞÞ®ŒÝ gg/ÞøB;Ã?üQê<ÆÆ†xy9•k½ …œüüqä…7Æ‘¬ HÞýût¥wŸ^ØÛÛ‹Âá­çké&I‚ ‚ð=÷û¦ÍÌLHHHæ‹/æ²té&Ž»ÀÔ©¿M‹õiܸΠ혃ƒ-Ÿ>++s-šÁ‰«Ù½{­[7ÄÔÔ˜ÿþwžžNüøã´mÛˆmÛæ¸œ™3?ÆÌÌ€Y³>¡gÏ6lÙ2_víš�«kuí¶V®üŽ-ꋳA„wÖð!}Ù¶eS>úP˜AAAx.å2¥§g‘˜ø€¤¤¤R)ÍšÕÃØØ�N�š“’’Îï¿ÿEAAmÛú½´�3¦'11÷ñ÷ŬY«™6mii|ñÅ<®]»ÁgŸÍÁÞ¾23f¼ÏçŸÏ¥mÛ÷HMÍàÓOGj×ѧO[&Nü�ýûOtžfÍê`aaг³§O_gƒ ïcGaûÖ¿7þ}lllD¡‚ ‚ ‚ðÜÊ=\.&æ>|ð¿"ŸYX˜jÿNJJåæÍªWökq{ôhE·n-‹|&“ÉŠÍ—’’AíÚÎØÚZqàÀi8]l_:õk7˜?={÷.Ô¾–uçÎ bc :ÏØ±½ùã�Í´hQ�'.¢T拳A„w‚¾ž.ï�N@@[,,,D�‚ ‚ ‚ðRÈ_t“'¢fM;S´ŸéèÈ),|v2ñ-[—˜øûÿûë¯ÝTª4ˆÕ« ##‹Õ«·³aÃþ"óXZšŸ¨ý÷ƒi¨Õ`bb@BÂí´óç¯ãäT SS£‡Ãç‚Ä™ Â[OGGÁûc†Ò±SGÌÍÍE�‚ ‚ ‚ðR=w�IWWH˜;÷Ï"Ÿ;:V¥zu;.] i;iiiÆ/¿¬äûï—P¯ž'³gOãðá³EæINN¥zõǯ—555F*•�‘‘ }»X^^>ÁÁ!´nÝ�ºuÝùì³9âLá­eblȘÑC h‹™™™(AAA^‰ç 2Éd2¦M‰L&eÞ¼¿HNNÀÕµ:&ôG"�íÛ�¼´�œ2e7nÜaÉ’HJJA"‘ ££Ùu��çX³¦'ÿ½—7î2aBŽ F¥R—¸Î  óLœ8€ó篓••#ÎAx‰êxT…ðP(thè×”ÚÞ>èë�p?…„û)¢`Ax%\\kˆBxD„ß… ‚ êßÍs™T*ññIøûû2gΧܽ�ŽŽ[[kÔj5+Wn'<<ú¥íäœ9kùöÛ ôíÛŽŒŒ,fÍZC\\"™™Ù˜››0sæÇL�ú+ÿýïR~þù#LL ¹x1Œï¾[üÔu?~�¯¾zŸC‡Îˆ³R^²K×£E!ü‹ìªTbô¨a´hÞC#CQ ‚ âfCA^ ‰…e]unNás-ìëëE›6�°··¡°PEDD4»vqófÌÿÅõõu9tè:tOZZ†8Þ*êb?9\òñt5Žî"é±ðö°·³aäÈ!´hÑCC\AAáõz¡ÄßÁÁ!‡T¼/-—Ñ£Gk®\‰&A*<{[Þ3‚¦Í𢧧' DAA„…ü]üÒ“'¢yóz|ñÅzzºT®lƒ•µµ8`‚ ÂO —ÞBc¸œ‡®ŸXÙP_ß ÔùÎådóKR<ו¹Ï÷#—H�ɤøÖoˆ——UííÉÈÈ¢  æfÆäâéV#}‚χ¢££àAjJe>R™ cbîÞ!$ägΞ¡°°Pôhz šøÕc@ÿ¾Ô­W™L& Dá%¹™Ëʨ=\K�.u>O³ê ¯ÙGc»çÚŽJ¥¢°°�Ç‚¸IRRººº’——GRRr¹œ³gÏ’––F«V­ÈÍÍ¥R¥Jèêê¢P(ÈÍÍÅÊÊ 'š4kŽ\.=šA„7–x$.ÿCcfÙVE†ä™óÖ×7`�} ¦Ü‹y®^Mjµ¹Bw�ºXU²F¥R¢«£FWGŠOm'drÇN\"øÜ ô¸Ÿø€æ�½qw±ã•”Ê|Ôê|líª’—ç/ž§  @ÄW¨y“ <€Úµk‹ A„—,89ŒŸBÖPYÏœvU|i`é†��¦§Plv"g“ÃØ̵Ôh>¹°�é^ƒËÝ«I­V#•JÉÉÉ!.&†˜˜RSSQ(¨ÕjNœ8A~~>�;w¦Q£F¤§§ceeÅÎ�;ÉÈÈ Y³fèêê’››KFFFFF ££ƒZ­F"‘ˆƒ)‚ ¼qdú¶_ˆ »ÉÂZÿµoÓCW�¥ve 0="EB€± AY™$–?À£V©ÈJÏ")ñ>éé™äB^~>7£bˆ¿Ÿ„±± êyàâä@jZ:·ïÞçJH$™Y¹$ ­?ÑÑwˆ»¯]vÈ ¾¤¤¤Ò£k'Ö®Xȉ“gð©ãÁgÓ§2pàlmm‹Ü@ìݽ‹ï¾þšÚÞÞXX¼y ë•J%£† %))‘zõ뛞””Ä‚yóXµr�‡‘ŸŸ‡‹«Û+ÛŸµQû™¾…7ws8þiy™Ô6w,qÞ¹³~cÁïó042ÄÑÉ €ãAAÌøü3ŒMŒ©éèXê¶fýú+Ë–,¦k÷/mÿùé'|6,W¶ˆðp–,ZÈŸkÖp`ß>âãïáææ†B¡`ʤ‰üý×:¶oÝÂÖ͛ٳ{‘á¸{z §§Ï…óçYðûLXX(666™'ððaª×¨Q¡ŽÓÍŒX¾º¼€¶Uêóu푸™:`¢0ÔÎc¢0ÄÍÔ�ÎUó ?�¨Œ8Ž'\¡¾¥+º&åÚžD"A"‘ E�‘‘fffèéé¡§§‡§§'¤¦¦røða®]»†••®®®4jÔccc*W®Œ““®®®øøø`U©’¶nxZ�),4”©~€R©Ä«V­§î[ô­ÿcï¬ã£8Þ?þ¾»\.î ÁÝÝÝJ)^¤8u/•oûk©"……R¼Å�àî$�„ q"Äs¹»œýþ8²M�`…v߯W^Éegg÷fggžùÌ3ÏÜáõ©S07—?‘:ó Î�=ËGï½Ë–MÙ²i#{÷ìæÒÅ‹¸{xàââòÀó׬\ÉáCiÚ¬y¥¯ÇâE‹X½j%ûvï&æÆ ü±²²Ú¡í[·Ðµ{÷Rçîß·—/>�ApH0®nn�ôÝ�=ÊŸkÖ\£†pÍÊœ;wÖOtìÜ…9?ýTn“r÷.S&N@«ÕZ«Ösÿ.N;†è¨(êÕ¯ÏÔÉ“ zêKBÖ6x^ß¡GígN�8Áòß—²zÕJN;FzZAÁÁB†}ˆƒƒ£Ðk4¾ùêKnߺE½úõ_A{í`iiùTmäü¼<~üá{”ùy•8¶gwë×®¥n½º(�u½^ÏÞ=»Ù¹}gN�"//??$ J%[6ofïî0boßÁ·ª/ÏÝó=™DDž1ïºxTJ`*B†„w]¾¾$ÄÇóëÂ(,,èØ©3:�ŽóçÎ̙ӧ0hп®mwrv¦k·îÏÆx33#**ŠF� ÿ‹ŽŽ~b1ÛŒF#[7o¢s×nrî̶lÞĤ)SÐjµ\ çê•Ë´ëÐá…zNËn‡ Ó¤À~L_”f_òy–Ý«° )ƒÁ€¹¹9õêÕÃÜÜœ{÷î‘››K^^yyy¤¦¦âëë‹\.ÇÞÞOOOlll°¶¶ÆÎÎNð`2 O4ø·ƒ£ý,%?mBkÕ&(8ˆœœN;Æ·_ÿßý4ë�BÓ�;·INN®ôõnDG3óÿ¾BnnNý Ðiµ\¼p�ˆˆþoæ·¼®ŸŸ?ýÄÕÍý‘¿sjj*×"®¢QW.ô�F£aíÐà@d2ÙSéoþi¬¬­éØ©3«W®à˯¿yj×yTÛàyz‡¥ŸÙ¼q#§Ož`ôرøù�•™É–MùßgŸòÅWÿWªßÐjµÌúáÜ=<=fì ã1Ù®Cìþ6ò4�IeÜŒ‰)áMj4¹ƒTòdÚæË—.‘‘~� “§ V«øcõj¼¼¼­U›}{÷àììÌ€Aƒ8{æ a;w1dèPQdù/ÓÞÚö�1˜*¢‘¥í­m+½lÎ`4"“I±±µÃ 7R¨)$#3 U�K5 ‰¹(sP©rÑjUèthÔJ´…j 1W(°³³C§—˜òzˆgé¯s ðcÕšõ }y …Z-ß|7›ƒ‡�ðÊàL?Š´ô ®]‹dЀ>ôè;[[&Ocò,º|•«ŽqìÄ)òó hݪ ‰É¼÷áçįųàçhÕ¢)¯¾6�¬¬l6­]NTt ¯Œ| ƒÁ@Hp QÑ1¼÷ö4F ̬¹ úò 4…/]É–m»„ûõôpgùoó©^Õ—ý�ðõw³±°PpêÈnöì;ˆ••%õêÔæÜ…p¾üúîed²|ÕŸÂùýûöÄÎÖ–‰~�——'¹9yüüËNž>KP€?}{wÇÞÞŽÌÌ,ªúV!1)™ÝÚZ#„í[7Ó¢ÅçH$._ gýÚµ¤¥¦â]¥ ÃFŒ$ 0�›17ؼq#µëÔ%5%…o¾ú’nÝ{póf ‰ Ô¨Y“ÉÓ¦cnnNff&K-"6ö�:wa÷®�4lܘ “&{ç+—/#>. Kš5oÎÐ#Xµ|9û÷íåÛÂÁÁ�‰ãÆâåíÍ×ß~Ç�ýûXñûï¼ýÞ{T«^�e¿ýÆõë×±¶²¢ÿÀA´jÓF(‡¼Ü�kWK‰Lj•ŠÝa»ˆ‹�ÅÂÒ’ÖmÚP3Ô4#;ç§iÞ²çΜF*“Ѥi³R^S«nï-7ÆÊµìXVÝÞËp¿.eW«TlÙ´‰a#G–:VQ™ž>y’kWéÝ·Q‘‘å>›ø¸8¾úâsBjÔäƒ�?æ—ŸçræôiÞxûê7(9+¹aÝ:¦¿ù&fffìÙFtd$ 6¢uÛ¶¥îoͪ• ~y�›4@¡P0fÜx¾ýækÔ*––eö�›4áÊåGt•ùùlÙ´‰Ï¾øŸ0êçïϰ#8väˆ 2]½r///úôëǪåËŸŠÈ”““ÍÊe˘úúÜŒ‰áü¹sOÜø2�e>“¬¬,öìcô˜±\8žô´TRSSÉÎÊ»Š]»uÃÖεJÅ®�;‰‹½ƒ�½=]ºvÃÇ×�NÇþ}{‰‰ŽÆÚƆ&M›R«v�rDç¢##KˆLQ‘‘%Ÿ99Ù„íÜEÊÝd¤R) 6¢U›6,œ?�þƒ^ÂÝÝ4`^¹lÍZ´ 0(¨Äsutt"8ÄämX§n]Ž>ŒÁ`Àh4²bÙï/ä²é³Q\ËŽÅÝÂñ¡¦âBÓ•Ì[\ËŽålFÔ#7 `4±´´D&“amm�ƒƒ^^^XZZ¢P(ïE¹\.Ä^R«Õ žƒ•%%%…¿ÿέ[7±³µ¥wß~´i׎ì¬l6o܈\nòÂ5l(uëÕÇÒÒ‚K—.áîîÎä©ÓððôD§Ó±rù2Ξ9CÍš5Q* HM¹Ë¬Ÿç‘Ÿ—ÇÒ%‹¹~ý:F£‘ààÆO˜€­�]9"S(={÷ fh-æÍ™Íî�;>jT¹}ÔŠe¿s#:€÷Þz“ï~šÅ©'زi#8:: ßëï,ÿ})‰„O?ÿï*Uî·I—ùáÛoY³rÓß|KxFË–þƙӧñòòb̸ñxW©Âí۷ؼq#AÁÁ¸ººrûÖ-V­XNbBž^^Œzu ~þþ�FvíØÎ¡ÈËϧF�Œ;–è¨h¶m1Mx}ôþ{Ìž7Ÿ¥’Ë~çÎíÛXZZÒ²u^zùåRú“Ç�£Ñ¨iѲ%@‰þàü¹s¬ÿóÔj5-Zµ.Õo­Z¾ŒÈÈH, š4kΠÁƒË¬G3>úµJEƒF�9vôîîîŒ5Zðä�ŠŒdÙÒßШմjÓ–m[63vük´i׎ çϳ~íŸÜKOÇÙÅ…~ýмØýnX·ƒÁ@ËÖmضe3}úõgàK/•víØNÄÕ+e¶{Q‘‘9|µJ…�oUº÷è�¥•›7nÄÍÍ�«W.£Óé ¦K×n¥Êñqlƒgñ�FÖþñ'�G¥*ÀËÛ›£FXâ>Š÷3ùyyìØ¾�¤ÄD¬¬,éЩ³Ðf‘––Æî°]|ùõ7¸Ý÷Âóðôd┩|õÅçìß·—nÝ{éõz=óæÌÁÞÞŽq¯Mxd�)77‡°�»ÈÎÎB"‘Цm[BjÔ|"íxbB{v‡‘�•�³‹3½úôÅÅÅ…£‡Ó aCü*´#¯_ãÈáÃj4…„ЩsÌÌÌHˆ�gïžÝ(•øøúÒ­{�2m'™L†›»ñqqT­V €ä¤$œœ]Ðh …tçÏ�ãܙӨTjœ]œéÝ·ÉI‰DEF1hð`Àä wèà^;®”mÕ QCÁëÕÏߟ¬Ì,´Z-ÑQÑL�>™LF“¦M9yü8ùyyØ<�­2ˆÁ>DDž!]lìþ‘<$ F£Qð¢‘ËåXZZ`e¥ÀÊR���¶88Øbggƒ¥¥¥iǹboQ°ïÊt8öö´lÑ”aûptt`ÆGïP¯n->|ï î܉çÔés è׫Â|Z·lŽÁ ç豓Ôdò„1|óÝl µLzíU&Œ À—ßüˆÁ` 0À�˜[·K(yPþ\¿ƒÁÀ—Ÿ}H`€Ÿp¬_ïîDGÇp/#“—ö¥sÇ¿ò];w ##‹a{éЮ5½ÿV‰û³±¶æÍ铨¶�“§Ïr1ü2]{¿Ä…‹—èݳ+­[6ãÀ¡£dff™žaçvääæ0cÆÇXYY`0“×ÈÜY³�Ëå <˜œìlæüôZ­¶Ìr9|ø~~þTññ!üâEN3 x¿ýú+7¢£èÔ¹ —/…£Ñh„s~]¸€ÔÔT^2„À @öîÙÍÕ+—©yßµþέ[ÄÅÆb4¹›œŒF£!öÎd2AÁ!,œÿ ‘‘‘ 4ï*>,]²˜›11Åf_Âqvq¦y‹œ=s†Ë—ðÎû0tÄa–  žâØ¿¹\ÎÔ×ߠ߀�ì ###C8ž”˜È¤©ÓèÕ»û÷îêtÇÒ*L*:Þ¶}{ìßGJJJ©c•éÃ>›€À@Z·mKäõk:p€³gÎP¯~ƒRSq¢£¢¸›œÌ„I“=v,gÏœ!33³Ô¬ã͘A`ꥭ-_~ýM™F@zz:Ο§~ÃG_Þ{—RKÝjשËäiӅϧO�¤e«ÖÔ ­E¾RI\lì ÛŽ?Ì3¸~‰®Ý{0eúë Â/^L.õööLó-š5oÎÆõë0 œ8vŒü¼|&N™Jÿ�ƒ8|ð wËñÚðôò&//—ü¼ûǸzå ={õ¢vݺìÞµ“Í7–û,ÒÒÒˆ½s›®Ýº‘œ”ÄœŸ~B§ÓQ T2î\´……tèÔ‰ƒö—(�ó~F¡P0bÔhlmmù½œ�: IDATuáîÝ»GRb" ™�¹BA‡N�8zøP¹×vssÃÕÕ•«WJ‡-ÈÎÎf÷®�ôéÛ�©¯¿�••%ûöîŽ_½z…Q¯Ža̸ñDGFW©¾ÿAÇŸÅ;tþÜ9Âvî ¤F/ BJJ «W®¨ðžOž<�ƒ£o¼ý6í;vb±2ú«ÈHƒÊ´·Ú¶kϵ«%¦E¿Ì§ @Ék“&?–ÇäÎmÛ©Z­&MfÈС;zTx7cnÜ`å²eü±jëþü³Òy‡íÚIÓfÍxãí·©âãÃÉãÇÊLW–½xïÞ=öíÙÃK/aÜkHKMåÂùó¨U*6¬[G×nÝ™úúØÙÙ³cûörï¡FÍDEEþ%‚FER#¤„ÈvèÀ½<„×ßz wΞ9�ŸŸ?q±±B»~ãF4Áe„Žhݶ-5j†’››CÌ�ÄÅÆ„R©ÄÂB�•µµ x98:�››ûÜõ·¢'“ˆÈ3¤¾…Õ?—G‘q*�¼<%j­�5ØXÍÑj‘HÜñ‹~Š U’J.óÓjµLyý=òòòñ«æK«–Ͱ°° o¯îH$>ÿê[ââ ¨Në–å/›Š¸ÉŸ|‰T*¥m›–T©bÐÆ'$²tùj&Ž�ÑhdæmD\‹¼/L5ãø‰3%ò™¿è7¶íØÍ­;w˜ûã7th׆c'N°mÇn¾þn6M›4dÉ‚Ùx4''§0ã “ wýºµiß¶%R©T(ŸÃcogËÂ%ËJ\ÏÝÝ��Þkk"£bòRúôíÍÖM›4¨t<…ógÏ Óéè7`uëÕÇËË‹KÃQ*•e–Kû2t(·oÝâ‹Og�––FvvW¯Ð¬E  D½úõùâÓÂ9¯ †µµ R©”„øx“—•M£Æ�‘J¥Ü¾u‹Ü¼\¼¼½I¹{—„øxbïÜÁ? �F͵ˆ«4oÙ’ÆMšâïÀåKá=r˜a#LÞ?ÎÎÎŒŸ0Q0$Î�9Ãø  ©QC˜�ùuÁ/XXZÒ¸i³2ðÑŒŸ0™L†»»;5kÕâFT”0+Z¯~}¤R)>¾¾XZZ -,DVÌøN×dWX'+:Þ­GO.‡‡óçêU4jܤ˜�[q™>ì³xyÈ+\8žå¿/E.—3|Ô¨ ó±²²B­R‘žžNÞ~ï½Ri222�Éd‚ÑQ_ù?a jŠÛQ›Î]º>r{”ž–Žƒƒc…i4 W¯2jô«ÂÌÛéS§„À�òžÉßÅIooo<<< äÞ½t ÑQѼþÖ[Èd2BkÕF"‘ ×ë¹q•¾ý —Ëqtt$ 0�Èë×Ë�UBtt4 5âÆ�hƒƒKˆ:vBnnŽL&C«Õ"‘HÐÈñ£GiÞ²%117ðð/w™]¡FÃÁýû¹{÷.=zõ|áûàëÙ¦AaãGðDjìŠÛ{„<e²§[[[¬¬¬Ðh4äååQPP€™™™°®è§(žÓãÇÝädº÷ìE—®Ý¨W¿{víB­V—ÇÃÏߟ‰“§`0¸.´]&ÑÒ�1ãÆc0˜ôÚx᜖­[Ó¨Ic¹zõŠÐn>¬ðfemMÖ}¡¶¼>ÊÚÆ¹\ŽT*ÅÑÑ‘¥’7ßyGG'òóó077Ç`0�››[â{¥¥¦šú&—Ò±~\\\Hˆ�'77Gøßk“&ãêêJ~^>{÷˜b7•�/]"?/�þR¿aCtz«W¬àÊåËœ>u ‰DÂè±ãL––dfd¢Pü5(ttt¼Ó 99ÙtêÜ…ví;”¹>1!��še{€œ:q½^Ïð‘#©U» V¯X!<÷¸ØXÚ´kG¯>}MbÌåË;r„ÁCʈÇOœ„‹‹ Ê|%{v‡qëæM233ÉÍÍáÕ±ãhסfffü¹f�Ð�èt:Ô*Õý{Eaa!V––:p£ÑȈQ£¨Q3 KKV.[VîµÝ=oXû'îž$$$�‘‘Q¦0õ0èt:âââôòËØÙÙ v¡F£aOØ.ÆŒ�•µ5gNŸ®|liEzZ:þþA¼-‹²ìŨë× ­]çûïZ�^½Ñ¨Õܸ�§—U||hÒ´)óæÎE£Ñ (û°ˆÀÀ Ž>,xÍÅDGÓ|ô«:pkk¦L›†•µ5j• ™LF�R‰•µ5nnn$ÄÇS­zunÞ¸ÁàW†V0©͹3§±·wÀÎÖ–œœœ±ÌåæåŽD‘IDä?‚‡ÜìÍC"‘ -ÔÒ¸i}Ü=<0“™£7˜¡)”‘—käæíTÌåFär3 5­3~Tò•äå囌Ĝ\AëòööD£ÑŸx_DŠªPdJ¾kê ùyJ¤ÅŒîUkÖóÚØ‘H¥R–¯^+ü¿yÓÆ¼óÁg%‘7îÿ6¹Ü»ºþÕñ&ÝÊ]t¿Ré_׸v?}ѹ!Á�88Ø žIýz÷àôÙóÄÅ%”4LiÙ®¼;…™�Þ½{âëë‹JUPæÀ<3Ãddy#Ô®S—Úuê–[..®¦8E.²F£‘ô´t“ÁRµª`¸Ÿ�ʸ—Á¯ ¢Rà\,…•µ5ÕªWçöí[ä+ó ©aòZˆ¹MRb"½úô%ã^Æ}ÃöD‰×´Ô´†RÕªW'>.޼¼<ˆ�‹cÎO?RX¨åÝ÷?àÅEÉÂÂÂ.¿vvöäåý5CSÜè)kðåªp¨ÐXtU8”{L¡Pðò+CY0ž`° )•éÃ>›¢Ï­ZµfÏî06j„난úøúR·^}vn߆Z­&´vm:tìT" ¸“““0Ûüw¡éÔÉ“ 1G>šñ©“)%%…ŸgÏâÀþ}²¶Êâìâ\æ`R£ÑpòøqÚ´kÇ¥ðp ”JÞ}Ûä¨-,ÄÖÖ–—_y剷±ùùJ~ùy®PŸÜ=<Ÿø5Ê{&¥êš{éºZ Tbn./a´Ö ­…Ñh$77�];w”¨×AÄù¨Q³&‡ a£FDEFѼE‹BWvv6{÷ìFUP€‹«›Ð¦ùV­Jzz:j•ŠÑ7¨U»üÁ–VV 5мÜ\~™7�ªU«=w.ù•E5&1¡h¹ÊPtNQ•Åh4b0�Ëåœ?ž»wïb0î{[bmmMPP*• �N'�»‹\‘—�···Ð†Ž= LOŒ¢Á—T*ÅÊÒRh»ÒÓÓ ­U[8V­Z5AÀÑjµ¬Z±‚ä¤$¼î_§2åR TâééYaUVݼxáÇŽÁ\¡@an^v›¿ÏÈ̸WfÙ( ììì…<‹Úä"ᆲ¿y)å³rÙ²‚IZZ*™™899 ÂCEþà!Cøcõj6mØÀ¦ ðôòbòÔiPì;�FÒÓÓiQN ãôtSßT­š)ø¾ŸŸ©ç^½º_ ñãü¹sÜŒ‰áËÏÿ²�.^"ôOE}EQ@ÿììl mGñ²°µ³ã¥—_&l×.–ÿn ¨_·^}&NžLffÆý¾³Z‰û¬¨?¹QÚSP™Ÿ�½½C {E"‘ñ­ÜÜ+¶ ×6xï�\.gßž½&oð‡Œ½Ù¨qcòóóX¾ô7,--iÒ¬9 6,%¤–çq•™‘‰G±>²jµjLš:� ëÖ±dÑB>üdÆ#µ=ª‚d2Y™Ë2ÓÓÒ°·wl•¿{Ñ> �»uãðÁƒÌÿùg\Ý\éб>¾¾¥Ò•e/æåå–ˆ­VTßïܾMjÊ]–üº¨„§-,,Sd²°´ÄÅÕ�Ä„är9vvö%ì/‰DÂéS§ˆŠ¼Žµ� ærs¬¬­„I§[·nbai‰™\^aL¸ÆMšÐ¸ISìË#‡iÒ¬9ÚÂÂ’“AÚB,--yÞE&‘ÿ@"•¢Òhûê+´jeò"‰�OãìùH:u¨ÇkÃØ½÷(±±ÉØX™aff&,µ»oò<‘{ÉÌÌB¡PàåéAòÝ‚ƒ=ˆå«£^¼ŠÆ�ÎŒ/¾ÁÊÊ™™Œœ¿¹�†póÖmjÝd§=Ô5B‚ÿº¿!Ah ÉÎ6 4Bk†àååÁòÕ¹ü6mÜ€ÉÇrààaêÏí›7Ù´þOªV÷C¥* 8¤F™×±w0ºÉI‰¸ººr-â*W¯\¥{Ï]vö¦<’’’L¿�«ÂÂBÖ¬ZIÍÐP&M�Æù³gùuá‚bƒÖPöî#/7—>ýú£Ñh8vô(z½žš¡¡BÞ ¢oÿ€É%ØLöWWRÜM=>.333ììì¸ÍßÎÄÃÓ“OÞyGÇÒ"›\.G.—£Ìϲyy¹ØÚØ>Ѐ,¢µ[6%­ðxE4mÞœ=»ÃJˆh•ieÉÍÍáØ±£H¥RΟ;GJJJ)±­8yy¹Ô­W�­Z‘‘‘ÁÖÍ›ˆ¹]"¶�¹¹9U«Uãì™3%‚0ççå±è—ùü0{NÙ‚µ‡õ4$1!á‘ß¿jÕª“ž–ÆÝää7W¯²}ëÚwìÈ™S'9úUÚwì( œ¦MžÄ͘˜Rñ&ka™^QL¦'MyÏÄÁñÁ;ÚXZY¡Ñ¢ÕjüÌéÓÔ©S++K^:L¨ûÙÙYȤåo´àáéINN6™™™ÜKO£Š�O ‘iÛÖ-´hÙ’Zµë ‘HX8`r¯¯V½:ÑÑQ$ÄÇÓ§_éØDñqq\¿A·=…�¤½½/´ÈôOR$2YXX°dÉöîÝ{_H ¢}ûö¬_¿ž×^{�=zàíí�R©D§Ó ‚²Ñh|¤Iû¿µ_éé騷� b^Ž0SfßbgGrR¢p/ ‚°³yãF ”JfÏ›‡N§ç­éÓ:ßð‹ÑëõøúV}`UœÑÑÜ¿ŸAƒÓ«O_~[ü+ÇŽ)•ÎÑÑï*U¿x±D;u-â*q±±4lÔHèWTÜ»wâî÷eŽNNä+óKL| öÁ!!èõz”Ê| bnÄ�/ÄÁ;tàYYY%bÐ�Ft:..®|4cy¹yœ:y’í[·¶k'&M.Ñß9::’›“[N{gzãâb ­U»„PQû—Àpçömlíìppt,KQv_ÐÌÏË#33'''aI³³³3êûžAÉIIøùûßìH8¯W¿:v"..Ž}{vsþÜ9Ο;‡ãý61>>Ž�5Ë\ÆVœœìì2=άmlJˆ„j• ƒÁ€¢;j=Žmð,Þ¡£‡qùR8úAÁÁ¼ûæŒ{—¯TÒ±sºvïA|\Ö­#((¨DÂêU+…z]œ£G�”X®ß¬EK$ ý à³O>fÏî°ñš+kkôz} / UAA¹K÷¥¬R¥ —Ã/akk‹Z­Ú½^ONvÏ]Ÿ'Ædy†¤huÿXFÀh4 07gѯ+ùð“ïøì‹¹ÌþyY9Jì™4a ç}Îè‘P©Tdddb4‘Éd÷�Û'³ÃÄþƒ¦ŽþÓ�ßeꤱ´iõh;ŒùûUcÔð!;qŠm;vÓ·wwÔ«CÓ& 9söB©ôS&ŽeôˆWxsú$ôz=»÷x¨ëøTñæ³�ßåýw¦ÈÎ]{‘¡f “§ADDäýœ”КÁ=|�Ø[Ñ=|˜ ëÖbffF`p0W/_¡Nݲ½“6n‚L&c˦Mìß·—¥‹súä Á�|ÜÜÜðñõåÜ™3lߺE˜YP«Uh4RSS9|è ˆ´È� ­ŠV«%55•ê~~T«^�¤ÄD ��8;;ãçïÏÁýû9yü8kV®dÚ¤Iœ:uR¸Æ½{÷øý·%¬Y¹’¸ØXšµh�T*eíkÐh4øpüè¶oÝÂÅ ¥ŸQpH0G�F¯×“žžÎõˆ‚‚úû÷ëB¨Cµ2�…:T«0°g‘Q2tøˆƒ¹ŠÊ´²¬YµŠ¥’ “&c0Xñûï¦�¼ÉömÛÈÏËÃÚÊ ©TZfŒ®a#F²öÏ?8{æ �†´´4ÌŸOÝzõ+œ%³±µ)ä2ØÚÙÑ»o_æÎžÅí[·Ðétܺy“5+WÐ¥[7T\¹|™zÅ Y‰DBÝzõ8ûnò�ʽ{÷î{ åPXXH�RIÁ#º—?ì3) ™L†@'�Çh4y�S'Žc®P\£‡D«Õ’��ͪåËÉÎή°®…„¶c~¥ jUAvvöH$¢"#ÉÊÎÞõ€ÀŽ>ŒoÕªeÎÒ:99y=’Û·n Kù TB°ðWÅýÁbAz¥Ï-:§(�JOôH$Â2©©S§2þ|fϞ͇~ˆ��™™™Ìœ9“#F°xñbd2NNNH$ Ã#{3U«^777Ž;Êþ}{Y²h!{ÂvaeU¹¥÷�7áÞ½{¬Z¾œ_.@™ÿ—ð’��…R©äÌéÓ,YdòÐW0@¾~í:Û·naÕòå,úe>2™Œî½z=°�R(,(P*‰¸zEx7nݼÉö­[8wöl¹×9úU _|ö)‹-dáüyüôý÷XXZ2dØði/ZÈŽm[9|è îîðÚuë`aaÁÆõë8sú4³~ø�7¦N%-5•&M›b4ù}éoìܾ�•Ë—‘r×WÍÂÂôž] ¿ˆ¶°�/>�ÁWŸÎ͘ÌÌd%¬âxWñ!55µÌr¬]§¶Ð¯„íÜÁÖÍ›„c¾U«âãëËé“' Û¹ƒeK###ƒ–­ZãââÂø …ŸâBɯ ˜¾ÿáCxxxàçïOÝúõ‘Ëå&!lçvnÛ&¤OLLä£÷ßcÞܹdÜ»'ˆçvöv4iÚ€Õ+W¶sÛ·n©Ø¾MI¼…ŠDTd$©©© Ž9LpHp¥Þ‰Ç± žÍ;”}¿~„³ü÷¥¤¥¥¡Óé+Ìïàþýœ8v �N'ˆ!zƒ¾ÔdRç.]ùñ»o‰ŽŠB«Õ’žžÎ¯  ÓjËô¶“Ë匟0‘Í6”ðAý\Ñ®¤EBäŠåËÈÈÈÀÕÍ�ìì,¡ÿ½sûv¥ó_½bÑQQ&O1+KtÙÿ‰nEí‡Z¥bÿž=äææâàOtTÉIIèõzŽ=ÊÑÇ+Ì+88„›7nEppI¯c•J�…¹¹9�†KÃÑë ‚M©×é¸|)œ ��r'¤NŸÖÒ¹â8t”…‹—Q3$ˆNÚ±k÷þGÊç“ÞÆÌÌŒ_ý΢%Ë1 ÌøèmÚ´lα¥°›¶ì`äð—‘ËÍxçƒÏHLz¸Îsß�#x{{Ò¯wö8Ì÷?ÍŽø™Ü¿SSÓ™0n[6­aÂÄñ4nÖ¹¹9ûöìÆÊÚšio¼�»»;7oÆË•þއ‡S¦¿ŽF£aÝààèÈo¿SbiÔà d¦L›NvîØA@`�0ˆ´³³gÀ AdffrèÀaž¢€Ä�AÁÈår,,,ðòö\܃‚C¯¶)Ó_Ç·j5–/û�óçÎ2dèÐK­ªûù{çGަq“& 1�F#÷ïgúulX·ŽsgÏ”ºÿN�»PXXÈü¹sظ~�»v}à’²¿óeÝq ði#¸¿»*àÓæ¡·( ¢i³fU¦•'®qêÄ êÖ«O³-hÙº5×"®rúÔ©rÏ©W¿>fff,Z°€E ~Áóþ¶¥ §à`¦NŸÎî];™>e2_ÿï \\]˜0iR…÷äîîÁµ«ÂLõ£Ð³wÚwìȯ 0ùµñüºà:u1Í®^8_ßRžkõ4äÌéSB›2oÎlÆ�%üwY¬»/rÜ¿Ÿä¤$®\¾Ì•Ë—)¯‡}&åѽGÒÒÒ˜ýã;z”þ!“Éh×Þä…öËÏsYµ|ÍZ´,s @qBBjŸ_fàÐN]º°mËf-ø…»ÉÉÔoЀ°�;L½JeÁ!Áåˆ�¶ôíߟ#‡1ç§Ÿ8{æ ƒ~"3Ñÿ$5Líõ¹Œ¨JŸ[tNQ�4Ùc4baaÁâÅ‹yóÍ7yï½÷˜;w® "I¥Râââ˜9s&={ödýúõXXX`kkûÈB“L&ã�·ßÁ»JÖÿù'Y™™¼6i²{äa4x0Mš6娱£äçåTlP5dèP,--Ù¹m;uêÖÁÂÒ’Ë—/—ëñqõ Ö­ãøñcTññá½?ÂÅÅå�}T‡N�pttdýÚµ4lÔˆ rýÚ5®_»N«û;«…_,=yR£3>ÿ??.…‡y=’ºõê•Øq«¨Þ[ZX°}Û6¼½½ËìííM�–Õj5¿ýºˆœœl^ë-||}iݶ- "&:šm[·Ò aCFŽ~€ÆM›á[µ*Û·n¥P[È´7ÞÀÒÊŠÕ+W°wÏš6kF¿þýËœx¹uëf™^-¡µj3`Ð TìÚ±“ÆMšþeïI¥¼ñö;Ô eÛÖ­\§[÷®VåNRÝï犾¿T*ÅÁÁ�IS§a0صc'ÍZ´,Ñ÷¼2|8i©),]²˜Èë×éÛõê7 ZõêŒ{mJ%{wï¼YË"77‡´ÔÔ2ÝNNNtïÙ“-›6Þ²®¤K×n•~Õ6xïP÷ž½ð­Z•ƒö£Óé¨Z‹ÜÜnߺUn~í;v$6ö?ÏžÍÚ5«éЩS‰e…ů۳WoÖýùS'MdæW_beiÅ[ï¼[®}YÝÏ�Î]»ñëÂ�ä¹Ý£gORSSY´àV¯ZIÛvípqqA¡PЭGO6®_ÏŸkÖ”ƒëA6nÏÞ½8t`?³ü‘3§O 1ÇÚ´kÇŸ«W±hÁ/89;ѰQ#ìììéÙ»;wlgî¬Y$%%ѳOï ó²°´ÄÉÙ+K«R"O­ÚµA"aþÜ9¬ÿóO4jHRbÑQ¦~Ä/ ™LV®'{û133cÙÒßXöÛo¸¸¹ ±I»uïArr2óçÎ!:2’Þ}û>—ý­Äɹ�Q­Ò‹£‘ÆR—GþZúå_Ãé™ÞY{k[æzú£iÓ¦èt:¼|«bfföرš*Ëö­[ÈÎʦgŸ>¨ øú«/ñññåƒ�?þ׿+Ö®ewØ.>øøcjÔ }¦×ÏÏËã­×§3öµ %&?ž43>ú�ZÍw?Í*u,!>žƒöãï@ƒ† Ùºy3»Ãvñá'3Ê 6])wïòþ;oÓ§_¾ôR‰c»vlgÿÞ½|?kv¥&Ö^$þ«ï�HiŽ>ŒV§}äx˜/bL&‘gÈ!eçU4²|´âΫ *-0•eôúúxã_Ý©Ì sE&¹ùš¿¤7£±Ä6Ë׉��ŒÚ'Á¥Ë ìß›¥‹æ"•J‰OHäí÷?}*ÓÓÂÎÖšñãFÒ¥Kççj-´\.§jÕjlX¿ŽM6`ffF‹V­„uæ"b™Šü·Ñëõ\¾t ï*UþS@çBªq-;–1[˜Øï¡Î[³…Tu¡ÕZ`*¯ÿ•Édܼy“ˆˆ jµºT€Ú"�I¡P„»»;:�J'8¤¿ÿ¶„ýûö"‘H bôرÿú:“”˜Èî°]˜››—¢ý¬(ò*ܹ}ÛS™*ÂËÛ©Dʲ¥¿±xÑB¬ml²Sñår÷Òîѹkgüý�ËdfàUÅ›WG˜Ö·Ÿ¿ÁÒeë8qâ$…êÌÍ%H¤,-­0bFž*L/ÎNöL?šN�:amc-¾f""""/(EËæÜ-éêÕ„ÆÎ!x[™â¿%¤s.#Š=ÉgIUgTj™\ñAyYËåöíÛÇ�7Ðëõ¸»»“’’¬Y¦eJ-Z´`âĉ´jÕ ©TŠJ¥B"‘ ×ë‘Édxúøþ£"“ˆˆˆˆˆÈÇžbˆˆ<{)óšp‡w]<¸t€ïï¥<’Sq$EÆ®VËÀ=iÓÚ´£[bR:‡Ÿ�Ê’¥9xè…ÚìííÐ(däçe#•IïϰÿsÏÊÛË�qcGѶm¬­EqIDDDäE§‰sß7˜Ä²Ûa\ËŽeÅí=¬¸½§Ì´¡Õí×½RLeQ´õ¶B¡`Æ ìÙcºžŸŸýû÷ÇßߟiӦѱ£)àkvv6r¹…B�ÑhE%‘Ñ“Iä_ÈóïÉTœöÖ¶t±±£¾…r“Õ®.`o~îcÇ`�›Éñ­R�ÌŒ²2² ®�——ææV U .”�“•EòÝ$¬¬d*Qæç Q+Q«ò‘Ê¤ØØØš<™ rù/عU}<=z8íÚµ­ô6µ"""""/g3¢8•Áõì;¤krpUØSÓ¡:Í]k=v ¦âžL …kkkîܹÃÝ»w…8KVVVØÙÙááá�R©ÄÌÌ är9r¹ƒÁ€^¯G*•ŠžL"""""Ï=¢È$ò/äÅ™žR‰ /”ùY(óò‘Ș+l±¶rÀÆÎktZz½ ¥2µ:�:�ºµ*™™ ; T…¨µ*ÌÌþ½�«WõfÜØQ´nÓú‘¶©)ŽN§#îÖMŒF£Ð¯ýV*•(•Jär9‰ ÌÍÍ�©(²V«ÅÆÆOQ\y®—ˉˆüpqu"8(€'Ž‘¯Tâäd�­�5Ö–VXY[`nnFZ­i¦ô¯“q¬)Ô ‘˜Z+”¤”$222ÿueZ#€Q#‡Ñ¬y3Q\yl R©”ŒŒ nݺEãÆ�1 äææ’ŸŸ�V«E¥R ñ– E Éh4bff†¹¹9fffDFF"‘›ãââ"ä-"""""ò¼!ŠL""ÿrrr¸q+77\œ�0åhµ42fZR3ÐéŒèt ÕêÑjõjÑi 8:9aoo‹D"##ëùùÊUÙÔ©ÌðaChÞ¢9æææbey"‰@NNNÔ¨U›Ä¤$Ô*>>>˜››£V«KüV(ÈårÁ“©HtŠŽŽÆÚÆ†*U« »šŠ“ˆˆˆˆÈóŠ(2‰ˆüÐh IHL N­šÄÇߥvhMªV $ùnR‰œÂBK A§3G‚=U}“�Çõ¨8»ºp%âú¿ªLêÖaôè4iÒXÜFVDDDDä©!—ËññõÅÇ×—ð‹±²µåø±c¤§¥áììŒ^¯G¡P`nnŽL&C"‘p÷î]�œhÞ¢f B+ØZ^DDDDDäyBŒÉ$ò/DŒÉTæË.‘ü­@*�¿oWä©/•H1 ?¥¬<^4Z4kÀÐW^¦AÃB¬ ‘§j™Üï;5žÒãž/"""""ò¬¨Ôô}h¨?11ñjÅ’yA ÜâŒe¥3ýÖ •Ç‹Bë�>b(uêÔ—ˆˆˆˆˆýtB ¡ÉÙÙ??oÎ�»VîùS¦ áʕ̙³ZøßÞ½'ÉÍͧN� † ë�‹‹#¾$'§ñÓO+xÿý1´mÛ…BÎéÓWøøãŸ±··aÑ¢O‰ŽŽ¥U«úÜ»—Í�?.çØ±‹€iŽéӇѽ{KÒÓ³˜7ïΞ� sçf8;; Tª¨S'˜ÿýo ü3‘‘·xç�Ñ´oß„ŒŒlV®ÜÎŽGÅÚ""òЫGGDpp°X""""""""""""Ï�G LÒ²e=ºti!|öðpåÓO'àà`K@€_}5•nÝZU˜GÆ5Ùµëx©ÿŸ>}…_Ý |8°3Ë–meæÌ¥téÒ’ÐÐ|“=&ãííFûö�¨^Ý›{÷²h×n ß~»”™3ßÀÉÉ´Í«Ÿ_ÒÒ2èÑc 'O^fòä—K\ó×_7påJ4Ÿ~:ŸK—¢xíµ—puu¤gÏ)¼óÎ�¼ñÆpj×k‹ˆÈsÌàA½Y³j13f|, L""""""""""""ÿ•öd23“1nÜÀRÿ÷ðpåÿ›‚½½ r¹[[k,-¨Tš2óñöv#++WøüÕWÓèܹ¹ð¹iÓ¡\¼x� L[§}{ãïï/†ˆˆˆˆˆˆˆˆˆˆˆÈ?H¥E&‰D‚Ba^æ1Gáo©TJíÚAœ={µÌ´‰‰©øúzpãF,Ÿ|ò3Ÿ|ò3 N�Z)¤KKËþV(ÌùôÓ Ô¨áGBBŠ 0äääSP .–nnN\»v‹øø»Â1½ÞðÀïçææÄgŸMÄ`ø+í¡CçÄÚ""ò1ä¥> 4___±0DDDDDDDDDDDDžÌžfæõê—+2�>}…�;±ÿéÿoÖ¬N‰ ½†b{¬O™2„ŒŒz÷žFa¡–Ï?Ÿ$³··)á9åååÂÍ›q÷ó0<ô=�F²²r™0ᤧgP¥Š;Z­N¬-"ÿ¬,-‘ʤ�Ʀ•H$ô TªçâÞG�L¿þ}ñôô¤ˆˆˆˆˆˆˆˆˆˆˆÈsÄS™êÖ-?.Êo¿mfãÆŸøè£q,]º…ÌÌš6­Í¤IƒÑéôežcooí[ j©VÍ‹öí ˜<§&NÌœ9«iذ&MšÔæ›o~ÃÖÖú¡ï·ÈCëÀ�3LŸ>”¯¾ZŒ››#¿ÿþ%ï¿?›ÔÔ ±Æˆùdii™-2�þô³GúÞF£‘ïgÎ$8$˜¾ýTê\�NÇÇï¿G¯>}ññõå³O>fð�!ôìݧTÚó~æô©S,Y¶¹\þ¾§«nïåXÚÒ5Ù¸*híV‡á~]ÊL;jØPªûùñù—_U˜ç„±c æ�÷ßb÷yêäITtèÔé¡Ò¿ýút ~™æ-[õnæ÷?àéåÀÎíÛ¸.Ôµ“Ç�³hÁ/Œ|õU:vê,äuôða–.Y,ÑŽŽŽôîÛ�v:�››Ã´I“J�wñÂöïÝË{~ˆª €‰ãDZpñ´:íÓ²sûvN�8NVVNNN´hÕŠ^}ú"“Éþ±:s79™=»Ã=fìS½NØÎ\¾t™©Ó§cck+ü¿@©dîìÙÔ®S»Ìw³²dgg¶c')))XY[Ñ®}‚CBX¿v-7o–ÜmW*‘òþG½ïö­¼$A`êìÕˆI�ýJ¥ñ¶rÅÛÊ•~>­Y³…}Éç™±ŠïLúWx4=é¶èÜÙ³\½r™  à2û¯¢]7zZ­–*>>üßÌo¸q•ï¾ù€î={1dèÐ ¯w)ü"[7o&9) ssþþ¼ôò¼«TÒ\8ž];¶“˜˜ˆƒ½=¡µk3øå!XXZðùŒO¸sû6ËW¯y*íÇ©'8° 8::R·n=¼ô …€5+M›) 1B8gõŠܸÍ}Œ¥••h˜‹ü+XûÇ4jÜÿ€€§v�ü¼<~ž;‡úõëÓ­GÏÇöìãâ… L™6 ;;ûǾÖé“'¹~•JEu??ºõèIvv6¿ÿ¶¤TÚ¶mÛÑ¢U«Wdz^ÉÉÉç›o–ˆo—È Á»íä•˜Š Mï¶“óꟚG¾öÿ³wÞáUéÿœ{Ó{'jz�„�zïU‘ª 4;êºkY]û®®®] MŠô�B�„�Bz…B é=÷Þß— ùÍçy|äæN9wΜ93ßyßw°¶¶F­VÓØØˆF£A¥R5ûïzÑI¥RÉ‚Lcãý€¶—¸sñ,}u1£FŽÄÜÂü�ߥRÉÄǧ±QEbB<»ÃB©«¯cîügoš¯ªª’øsqôð÷»ã:¿þòKΞ‰ÅÑɉÞ}û’œ”ÄšÀ@òó.2köì[æ?a&&¦wý›5 ñçâ022¼ã¼ûö¾ž¾ýûSQQΤɓqqu{dŸÑwÏ,oæBSXWÊÖìÃ$W\àCŸgïºÜ �=†µµÍ}½V¯®^7ŒcØîžž¤¦¦È"S¹xôõõ‰‹;+‹Li©©¸¹{\�èœ8�«›'N4ºvó–ª�†Èˆ~üî[ºz{£§§‹B¡`ëæÍøùûcaayËë»�ô+~ѺſôêkØÚÙ‘–šÂŽmÛ())yàÏͰ²¶fÔè1ÌäMG‡¤¤$ü{ö”ÿ–œœŒŽÎý›Öý¾q#^^]™:ci©)ìܾ�…Ï/fÒäÉͬƒÏÄÆRTTø—y¾3Bo*0]OSš½yQf„ÞÓð°p?Ç¢òò2~]¾Œêª*€&2Ýí¸œ›“CmM ††d¤§ßv}9ÙÙ|óÕWXZZ2tøJJ.Éù¬,þý߯ÐÕÕeßÞ=¬ ÄÊÊŠ€^½(*,bÿÞ½$%&ò¯�?¹£çñnÆ�m[¶pòø1æÌŸ�£“3%—/³}ëþõÏ÷øà£�[­ó¦M$&&ð÷·ßÓCÄñ£Gþ¡`×Î\¼xss ¦Í˜ñÈ´áà¡C135}àõ(JÒRS[x�¤§¦¢�÷¥ŽÄ„xbc¢™1s&J…’]AA ?ÈÈQ£yýÍ«›� ¬]³Ï®^Ýýx$D¦ººzÂãÄ%xèâ¬l5ÓíâßQÁgå=¸Í]�µÔ´ãß4 i—T* ¨T*Ôj5ºººh4 E³Óï¨VIbî짘öÄc˜[˜q**†?ùµº‘ž~>DŸ>Å;ÿ|Ÿí[·°m˦?ù$áPQYÉð#™ÿäÖbldL7oo~]¾Œ„„4 nnî,X¸S3³fõE�:ÅÙ3±ôíߟç-F’$ù÷§Ÿ°oïžf×™žžÆ® �TUV1hÈ&O�Š$Iì ¢]»v 4•JÅï7râØ1èßOΚ…$Iäçç³zåJÒÓÓ035•Ûá{Ðî8ÿº|óž]ÀŽm[9°o555têÜ™§f=MGÇf×®V«ÙBÿ�ƒP*•”–”²mËtuuqus£¶¦†_—/#..Ž.][´uø�„†SZRBûxræ,œ]\Ø3VXXHXp0EEEXY[1jÌXìíí9EaÁ%.]ºDiI í;0jôè÷jmÆžVc´Ä—f±6cÏ wÎjkjX·v 1ÑÑHHôîÓG;IP* Ú±W7Yà¹?‘Dª*+:|89ÙÙì ¥´¤kkÆO| ›æ IOöì“?Ÿ;ÇÈÑc8w6Ž‘£F_™Ò>Rû«*+INNâãÏ>ç­×—rùò庰J’D@¯^üº|—‹‹±ok�žžýûà·5kxþÅ—nù{n•þtTYYY|òù¿å1Ì«k7Ú9´gÓ†õ¨TªnͤÑhØJrb"=üü0h%%%²%ÂÍú[mM !ÁÁœÏÊÄÌÜœ‘£FÓ¡cGÙ·w©ÉÉ›˜Ы]»y·z Î.Î$'&6™’qv¹ºƒ[VVJhpùóP(ôðó§ÿÀ�üôýwLš2U>DaM` ½ûöÅÅÕUÎ[UYIYi}úõC’$Ü=<9qü8ùóqu»*0×TWs&6†YÏÌþK¼ƒ#‹“ˆ/Í¢��åm L× Mg/§_šEdqÒCï6}ú4ÿûï—Œ›0‘3±1”—•Ó·¦Í˜Ñb,úôã�ÈÉÎfÔèÑìݽ%³fÏÁÏßÐn2ìØº K+Kº8:~àÿùêk9NâÆõëñððàtTÔ�ËEEE„îÚ…¹…9™XZY1hð:uî|_Æe ÊÊÊÈÈHÇÓ«+éiiXYYqùòeyα䥗 èÕ‹‹yy¼õÆëŒ›0kkT*“&O‘…³]íÛMqq1ÆFFü¾q#vvv|ðÑÇ7+sOX(cÇO¸í{víøQYQÁ®  rsr022dèð¸¹7ïs„…†ðá'ŸÊ÷¾m[-y��>xŸ}{÷0zÌØâÂé¨Süã�w161¹k�"+3}Ôj5Œ;V®¤²¢‚ÊÊ*Ì-Ìñ¿?qgϰ;4Œç_x#cc"NžD£VÓ»o_JKK ¥¬¬…BA¿þýñôêz‹u_»CC¸xñ"’$Ñ·_?ºv󦬬”5��¼ðò+€ÖÊ+''‡ÉS§6³¸½_BÍ�Úá�$&:…B§»ïmç?ñ1²23‰ŒˆøK®¥n4×9N??œœ�ùß¿¤O¿þœŠ8‰B©$ WoyLKLˆçPx8õuu¸º»3|ÄHtttȾp�=»Ã¨®ª¢CÇŽŒ3V¶Hl&2)•ص±çÂùóòX•—›‹•µ uuõÍæþ§"NRSS‹µ�5{œ¼Ü’“˜2mY™™<°¿Å&÷ùóçñéî+o¶ù÷ìÉáCáH’ÔÌKàäñãxût¿­M¼?�àc¤›òO-C’$Ôj5 ÔÕÕQ__O]]µµµÔ××ËÖM:::èééÉS“0s·/é1£†óê‹‹8ÏÊU¿Ñ§—?‹ž}šß7­%9)‘¬ÌÌféîß�@/ ôõÙ¹}ù/R]UÅ÷ß|CC}=C‡çÀþ}rúÒÒ–ýü†FF̘9}V®XNmmí­A…?T*9ÙÙD�:Ehð.Ü=Ü™:cùùù¬[³SS3=¿€'¦L¡‡¿?Û¶látT#G�føˆ‘œ‰�!$8¸EqgÏh_ì&Ê»:::Œ3V¶0jâÈ¡Cô èEÇN�Ú±�Ãáá-Ê ÙDhð.úÈÀAƒÙJXH0jµš¯¿ü‚ Î3yêT,­¬øuù2²23yã-­«‘·Ow¦MŸAÜÙ3lݼwf<5“‚K—øáÛoZÔ•—›ËåË—ñêÚú¤oíšÕDFDЯ_ÌÌL›ý–ÓQQ¬\±++k¦LŸNiI ÿùü3ÊËËÈó¥V«Ùòû&ºùxóÊÒ¥øùû³õ÷M²5^lL,£ÆŒeÉK/£V«‰‰ŽnQÆ‘‚³7­ãV߯ÿmGbè°átïáËžÝaìÛ»ç_BC‚éÕ»7¯,]Jû8~ôH‹4îžžd_¸@]]ååe”—•3zÌ’““hll¤¨¨ˆªªJœ]\eQÒÇǼ}|ˆŒ8yÃú8~ô(†ÍÄÊIS¦�š’"?·âfé“éЫ…�diiÉÂÅÏÿ!îrÉII\ÌËcáâç™3>‘ò¢õZnÔßv‡…bnaÎK¯¾Fï>}Øòû&Ôj5ÇŽ¡²¢’EK^`Òä)„8Àż¼V¯¡m;**Ê©¬¨�ÅÍ’ËÅ´s¸êÆsôða,,ÌYòÒËÌ|f6'Oœ ª²'2ÒÒ­‹]AAA qÙÐȈEÏ?/�Wµµµ”–”bßÖ¾YºÃ‡áçï/»æ<ìœ(<À¨vwœ·)OSö„…âçß“N�;ÌÁû[MWYQAÜÙ³ôí×�ŠŠ Výª �‘š’ÂÚU«hçЯ®Ý8tð`³|i©©ÄÆÄ0ý©™w=.çäæÐ¶�/½úNNÎ9tè¾�Ë&¦¦´m׎´T­{gzZz³MÿžÚ{z.N›?!!?lmµñ¹¶mÙÌŽm[‰;{†ÁC†òîû`ooOjj*µ55 6L˜@ë†'IgÏœ½ëûvüø1,,-xeéR† ξ=»[ ]\\[=eÐà!ÄÇ5ï§{÷ìfWPo½ýv‹Í•;eÀ A,X¸ˆç-¦¶¶Ž3±±<3g.�?1kk.~^^Ô˜š™¶*jï ÂÙÅ……‹Ÿgú“Or.îÜ-­æ�9ŒB¡`áâçyò©™Ø·¯Å.Žô´4â‰û.0ݪ"NždÕÊ_Y»jÛ·n‘½"#"XµòWV®d×Îòsp½p´yÓ&9ßÉ'X·z5ë×®%,$XÎwö G…sâØ1V­ü•ûöÝÓï)..fýÚµ¬_»–5��äæä4{Ÿ4]õ×ÝÐÐÀö­[X¿nkW­úC„«Û™ë€ÖŠqñ /2~ÂDöíÙƒJ¥¢¨¨ˆ½»w3uú ž}n!—.q:*ŠÚš6oÚĨÑcxáåW033gWPÐ ¯ÁÃÓƒ¤¤Ä«›z÷fòÔ©TUV²dÑBN?ι6&1 IDAT !C®›`ÁÎÎŽá#Gj]”Nžààþýxxzq1/�1ãÆ3rÔhºûö`wHµµµtìÔ }}=LLM©­­»ò’ªÀÔÌŒW_ƒúúúfæ¿ÙWâWÙ_÷rmœ©ÇŽáäì̬ٳÑh4ÄÅÅÉ ß#‡´Ù‚E‹°²²B_OŸË~!*òÔmǺ Ðh4t÷íh]¹´ÖpppÀÞ^»HvvqiÕŧ°®ô¦uÜêû“Ç�ÓÅÑ‘'¦LA­Vcdh„�¾Á2¾QXPˆ“SÃG´nmeccƒ••éi”–”âé剉©)íÚµ#5%™ÒÒ2º8:Ê¢ÁÉ';^w WŸ¾„…7Û?w–gçÌ–ûƒF£áヌ®®.55Ú4<=g.«W®äãÏÿ}Ëßq³ô……xx]5 ?tð kVÊŸßxëï-vüï{;Q[SCaa!í;t`é›Z+ÁüüüféZëojµšä¤d^~í5”J%^]»!I*•Šøsq<6é tuu±´´ÄÙÅ…Ä„Ù�ñz\ÝÜINNÆÏߟ””d\ÜÜš=»C‡ GWO¥RICC’$QW_�³³ G¦O¿~¤¦¦àäìÔb÷]¡PÈñžŠŠŠØ±m+¾=z4‹3Q^^FVfæ ûÚÃHB©vC£ç]X"õ´vguÆn¹Œ¿½ûöå‰)S¨®ªâù…ÏyªÕû¥££Ã«K_ÇÈØ˜¼¼<Ξ‰¥®®Ž£G£Ñh˜ûììííÉÍÉáLl  µè[¸’©Ó¦ßÔEåfã²¾� I�O÷îH’„›‡‰‰ ÷u\vqu%-5�¢¢"ÊËËprq‘Âí;tÀÞÞžø8íæHb|<ææ8:9!IOÏ™ÃÁýûÙ¶e‹ünìáçÇs‹Ÿ§°Pû^·ºÎíP__c .åßÓXž““CYYî¸{x´üÍ……XÛX·>ÎÛÚPPpIþ|&6CC HJL¢WïÞ÷¥544PW[{[nø..®¤¦¦Ð»OŸfù³³³™ö䓘™™ß–ûVZj*ã¯Ä�353ÃÑɉŒôt\\µâù¬,"#"xò©™HlÈëÛAÕØȨ̀ŸAGG‡ß7n$3#'ggÎge‘”˜À¬gf£T*Ù³;Œô´´fÖ¡éii$ÆÇ3uÆ  Ù.�}á3Ÿy€°�`ÎÅ�ŧ»/ݼ}¸xñ"mÚ´¹#K¦Lï¾}qrv&??Ÿí[6³hÉ ÔÖÔpî\œ¼Ñš”˜HmM Æ&&d¤§£¯¯ÏãOhݨc¢£[Ì#ÿŒ¹@w__ :vÄÐЀ†úz’ðêÖ kkí³3vüêjkIII¦m»v´ïÐA;ïÕ‹ï¾ù†ºººV7Q\\\9ÎÈQ£‘$‰ÔädúÌ™ËÁý´ëc–¼ø"FÆÆÔÖÔ T*©®ªÂÈØ;;;²/\ s—.¤¥¤0íÉ–±áš,¨Ôj5'NwöL 1ÿø±côêÝûO�E)D&�à!ÁÞLúS˨­­¥¤¤„ÚÚZT*���¢T*›í¦4Y+«™»ÛÍÆe},,-äC7ndqr/ã²³³ 7¬'5%}}}:\YD6á×3€à �ä_¼Hbb"=ägpøˆ‘ 1’Úš233Ú±“ÓQQ„<€�]›+ïã"¹¬¤Ä¬¬m¨¬¨ �ÛÝÇ-ôïÙ“ÊÊ VýºCCCz÷iq؈��M +ð«s„ËØÛ_Ý’ ÞøÛ[dffðÓ?àáéqO�‰�9BÔ©SZaÐÍwÏ[æQ(øöð#êÔ)t¯Üï¦Å·®®.ñçâ8tð uuuÌž7ÿ¦' ×TW7‹'ehd$Ç«««',4…B�ò»®Ý¨ŒMŒÙ¼i:::\¢ºZ{mΟ§KGyÌlrQoââÅ‹œŠŒ`áâçeqì|VE…¬[½€ú†zŒ�MîûoÑh4äææÊc†½½=µµµÔTWc`hˆ©‰)~û WWÜÝÝew˶íÚrpÿ>víÜ�£“ݼ½¨Àt's�kçÖM×TQQŽí•g·é9ÈÌÈàRþE–ÿòs3±¶¡¾¾U‘ÉÀв³ÑÕÕÅÌ̼™E£$Iœ}¥R‰Cûö„8À™XíÉZ®nn¼ñê+74ÝÞ¶e ÕUU|ýÝw46ªxí¥[M×ÍÛ‡C¼+ˆgŸ[([.„…† I^]»É“ÿ çÏË“¨¢¢¢f˜¯¶…¶vmxëí·å…k£ª‘Âí„?77W»@(,dÿÞ½ôðók©²²’ñ&2{Î\âââØ±m+¡Á»:|x³³••6P|Uee³œVÔN2Οϒÿ–›“}M^+ÎgeQRR‚¥¥%™Ú¿[[afn&/fºÜ†èp;›˜Pv�+^EE9¦¦¦T]™€ÞŠvÞlÍ>|Óïo„�¡!zzz²‹“ÖMäwÚµkG¿è³Ýdm8mÆ ‰‰Ž&,4„ µ'<<‰Œˆ ûÂy&MžrE,êÆúukQ(Lš¬�WA¯Þ½YüÂÕ~ýí×_yòD«§—éêê2tØp6­_OEEy‹ïŸž3—·ßúúú·'·–Þ«[W~þñG¦NŸÞ,VBYY©|j䃦¢¢\i‹‹‹Ù±m+©)ÉXXZÝ2¯¡‘uuõ444È‹ˆˆ“'ñööÆÈÈ�'Ÿš)?g¥¥%(7síÛ¶¥¬¬”Ë—/STX@ûš‰L;wl—c•H’ÄOß' Ò�»t!99‰ì ˜øx뱉ìßÇÅÜ<ž}na³ÉsSKˆ?ǬÙsÄ‹õ!æ|V–üŽ(**ºe¬›ïs3êëë)**ÂÆÆ†ì WO—-)¹LuUU³“ŽR’“‰‰>ÝLdºÙ¸|3Áÿ~�Ë.®®TVTpâØ1º8:¢Tê´t‚ƒvLeE…,æ„…†~àOΜ‰Ow_<<½hll$þ\ÕUÕ¸¸¸```ÀÁýû2tºzz¬øåj®¸é{ûøÜõ}«¬ªb؈‘Œ3– çϳyÓ&\]]›½ƒ]ÝÝY·v�|o®åðáCøöè!öööÁÄÔ”nÞ>øùûóë²e¼²ôõ»¾¾~Ü•åŒO÷îüº|^^]µóQccT*uuuxuí†W×n,ûù§[n›˜P]U% QU••8´ï ÷§™³žæèÑ#„ì ºíÓtW,ûEÞH}ö¹…·eÕZ;qìÈæ-xvnßÖLhkÍsà꼬‚N�;}ú´\GW7w�bý}ëy…¶=%Ibæ3Ï�ŸŸOfz:kV2yÚtlmm133gÁ¢Åädg“’’̱£G™÷ì‚¶ùp's�ÖÆccyc´È¥%%›˜àæî.Ÿ§V«¹˜—×bÞ{-îî$&& §«‡ÛuÖ†I‰ œ?ŸÅ¼g``hȹ¸³¤_qSwrqaÛ–ÍèêèâÞÊ¿éý¿~팷O÷ß'$$àäìüPŸâ,b2  ùåš?½ +++ìììppp�ÝÕˆ««+téÒ…~ýúQ^^ŽF£ÁÆÆ yBx;tõt!33ƒW_}•þúãëë‹F£aå¯+ÚÉšU�ä_Ì»³É‰¯/ºººíØNhð.‚wî¼f0Öîp¦§¥´c;§"#­Érk¨Õj‚vlgÛ–-|òá¿ÈÊÌdÀ A˜›[Èeůİjå¯ȧwé_q{JIJ¢´´„ÒÒªªªˆ8y’å?ÿ|Ã:{е›7Gæ£ÞguàJÞ{û$%$0tøðfòˆ'رm+?~ÿ=jµšþ­ˆ={õ&%9‰°�`öíÝÃKKžgM` �»tÁÎÎŽ£G³oï–ÿü»CC022B’$ôõõÉÍÍ%';›£‡ñ�¿½Éï7R_W‡ŽŽŽvÒw]�棚¯wÒ¶‡þW„TÖ¯]ËŠe¿PRRrÍL,uùÏ?s`ß>¶oÝ‚��~þ=5z .bÁÂEôéÛW0¾ÿæÍ�k?ÿï¿_òãwßÞ°�ØÙÙ¡Ñh8{&V^××Õµêêw#f9ŽÄË¢s«ßyYt¾iÐoI’ð 3#ƒí[·°jå¯ìÚ¹ƒºº–'BÆDGóéÇÉV×>ŧtÛqŒ@{,urR …##CZŸyz.yqââêJ~~>Ù.ÈÖ3'NнGóÝsß~œS33&O›FAAïüý-mìF33*ʵ»Ÿó8)A;¶7ûïf± ìÛDZ#Ghll”¹*uóØ=öööŒ9Š/ÿý9ÉII444PXXÈ/?ýHcC#FŽjµì§fÎâ|VGþÃû£®®.ݺyN�]\8uÅ}±ÉÂþV8;»}Z+ÌTT\qGsºòÒÅÄÔ”#GQ^VNÔ©S·umó<Çâ%/°xÉ ÷´p¯ª¬ÄØÄjkjÈÉΖ=:tìHFFºüyïžÝ$^‰Z¬1ãÆwVŽ‡Ô¡CRSSäwLÔ©Sr€¦6¬©©½ç{#I²u\~~>&¦&RZZBÜÙ3ØÛÛÓ§_?œ]]¹”¯½†¬ÌLòrséÔ¹3#FŽB©TRUUImM •¨T*y^XPPp_úÑíÎuZÃÕÝ�sqg)--¥¶¦†}»wS^^Ž“³ÉIIä忢R©8zøp«1Q¯ÅÍÍ�´”’““p»Îr±¦¦}tõô¨««#6:•J-�‰ªÆFÎÄÆàz÷þȈ<¼¼ðêÚ­Ù à× úŽ÷iƒöA!,™‚?�˜\5Ê{.ã^P«Õò΄J¥’ㆤ¦¦b``@ii)]ºt¡sçÎH’„žžžôûf;0>ÝÜ™3çizòŸÏ?£¨HkF®=yé2‡$6&†~~<3gî]·……‹_x‘ ëÖ²+˜¾ýû|e2çO??âÏ�£¶¶Žþý°oïb¢O·ÏD¥R±yÓ& ÖÖÖŒ5š)Ó§Ú �i©©Ø¿�žxzu%!þéé8:9áÓݗؘz÷aÆSO±rùr‚w1zì22Ò9sæ jµº…Ùÿ«¯¿ÎŽmÛ8ÁÑÇicoÏÌgži1ôôêÊáðpêêëylÒ­ZÀLš<™ººZ‚ƒv¡Ö¨éÛ¿?OÍz¥RÉ+K_gõª@~ß°sssž[ü¼ìc>fÜxöìÓž¤7mÅÅÅDFDp(ü 6¶¶,ZòB‹]›ö:`dlLjJr«§ÂÍ™7ŸukÖ~�Î]ºàáé%OšzðÌܹì eÃoëèб# Ÿ_rÃ…ijJ*J¥â†ŸSRR0¸I€a…BÁä©ÓØÂþ½{±²¶æ‰©ÓîxGíCŸgY›±‡#g)¬+ÅVß‚vÞ7]È4ñô•S¶öîÙƒBR0nÂD† Ö"]iI I ôë׿ÕÏ%%—IJH`À€Û;\’$ÆMÏÁýû ÂÂÒ‚ñk5m“pìyM0w¥R‰‡‡¥¥¥RTTDfF>×íÆûtïÎò_~¾a@ê¦ÅÏéS‘­öÝ‘£Fsìȑ۾­¥ùµ×ضe ?|÷-eeetêÔ™i3ž$##CÃ/4u÷õ%ûÂ~þñGtt”¸{zâÕµÛmO ÇŒKHp0_ù&¦¦Lš<¥RÉà!CÙ»;Œ¾ý¥RIï¾ýZuh&º{Ñê±×ÃGŽdçömèéëãêê†o�„ïböÜy899²+7÷Ö]z hhlàÛkD^€ÉS¦âêæÆù¬,Ú·oÿ—{{ZtáÐ¥XN'ݱËÜ©â$¹Œ¿ C‡�àä‰TTTðؤ'îødK?›ôö¸ˆÞ}ûÞÑóû0ŒË’$áìì™ؘžlêçß“=»Ãðóö–G''ù½}âøqíû°}{fÍž�“³³<>YZZ²+ˆãG�¢§§ÏÀÁƒÉHOgëæßåSÎ6oÚtÝXê{C—µ!Æ´“èÓ§10Ðgèðᘛ·|oN™6 {{{6mXONN&ÆÆøöðãµ×߸aû2ÿ¹çøþÛoñìÚõ¦niwʵ§ËýüãòérÍÚºgO¹=ÆŽÇ®  ~øötõôpw÷hÕ=ÿZúöïÏîÐ~þñ$IbĨQXXXRVVÚì�6iòdV®¤mÛ¶ò†Ùƒ¦}‡èéê±yÓ&LLŒéÓ¯?'OÒ¹‹#;uÂÕÕ�ßÖ¬A’$¬m¬q½.è³¾¾>{œ�;¶3gÞ|ڷǧ»/¿­]ƒR¡ÄÂÒ‚î¾W­§<<<Ù¹c;‰ ñèëéß2ô@Lt4çΞ¥®¾ŽÊŠ ÖÒ¦­=#G�fô¸qì åTd$j•Š �i­\MMÍÈÌÈ îÌY$…CCÜkÝÔ­¬­Þ$¯/\]Ý033'îì.]º„o?B‚‚xzÎÖ®ZÅko¼qÏbØíÎun4?8x0Ö­¥®®WWüüýQ*•Œ›0‘à]ATVTbß¶-ã&ÞütHCC¬¬µ.u×Ï�»vëFJr2ßó?¬¬¬éáïÇþ½{INJÂÍÝGgg2ÒÒdWäëÉ¿x‘ÜÜÜf�ÔÛ´iüg R©È¾p�ÑcÇ>ÔïÉʺ‡¦¶F…@ðè iñïæ¦·ùÿNVè• qVòÍz÷TÆK[ë9˜vwϬSçöüôýW466"I•••œ={–öíÛsüøqôôô¨¯¯§OŸ>$$$àíí��� uW,]Þxë=Ò³rZ¾ð{÷à©'§ÓïÇ3‘;p�û÷áääL??vlÛFXhçÝVƒb>Jñ�7ß ‹£#çÝ?¼þM6}šO>ÿ÷÷µž††¾ùê+–¼øb«G4?ªD'ñÙ¹µ´1°äÇ^Kï(ïâˆ/¹T[Â[]g`íþPÿÎèÓ§ùß¿dÑóKîXXj&¬EF’Ž^½û`ßÖž¿ûŽÌŒ ¾ÿù—‡ÚMãN9Å7_ý—ÅK^ ÷ËÚ{¡ºª �F#Ç­‚k9NCcÃCSé^–LÁÈÁ4QÔøw¼;OÕ¨ 께@“©¶¶–ºº:T*’$QQQABB;v”­œÒÒÒhhhÀÈÈHöQ×h4-N ÐןéÓ§>Pq©‰v($�¿®`ÙÏ?alb´3y� `M`à•·?¥þ 'räÐ!bcbšÅy=T*gbcqhßþÿ•À`펗EgâK³ø1u;‹]¿­|?¦nçRm ^�z�é~ââêJø�|öñGh4Ú´iÃ’—^z¤¦¬ÌLîß�žžÞ=ÅQº£œœ+þ£Ñh¨«­%þ\ŸôHÿVaÉ$xáÿ~X,™<íü6KåêL*5<µ¶Ž„ü»w—ëÔÞžßÿµµµ466¢ÑhP(²è$ ’„Á•8�F>]îƒ�þÍùœ| èÅSOMÇÛÛû†§Á<Ⱥ¶¦¦ÙÉ"�:ùùù¨Uª›ž`÷ )++E’¤{:‘F üùØ·�ÔÔ&>öx«îÄ�:é¹¼ý##ÚùßRhú1u;{ó¢øO�Å8™:<ô¿±´´”Ô”9ÞÐ½ÒØØˆJ¥j5~×_�ÿþç?œÏÊdüc�Ý0Ž‘@ ܪ«ªXöóO¸yx0zÌØGú· ‘Iðòp‹L u›ûêq½ÛšTjxu{ý=Y1x¹;óáûÿ ªªJ"§V«åÓ®åÚ¿«T* ض#˜i3¦âåå%ܦ�@ð—¤Ém ��%£ÚÐÓÚ]ŽÓ”[]È©â$vçEr©V´ö¯à&'ÁÀ™� ¿ÈZ‹¦7ëÞÒu.ꂚÿ„7Ü“S®Ž|ûõ¿©©©A£Ñ4;±@­VÓØØHcc£,0ÉÅ•“É.—–Ò«O_ÑÅ�@ð—&½"—ÀŒPâK³nšÎË¢3sÇü%,˜�@ x1™‚?‰„|5s7Ô1ÄYÉH7%¾ ìÍ´ÖAùåbrÕìIVݳõÒµH’D]]õõõͬ˜šÐÕÕ•c-4Y0566ÊÖK�@ xp2uàCŸg‰,NâDá9J3)¬Ó+o«oާEúØvÖK�@ Ü!Bdþd¦Ý_!éf( Ôj5 -Üåš�$ …B�ŽŽzzzèéé!I’˜�@ðÈ`í.„$�@ î#Bdþ_¡¡¦¦†êêjÙ-®)¸wSp¥R‰R©¤±±tuu144D©T ¡I �@ 7DˆLÁÿ#ôôt177—z_+25ÑdÉÔ$6éêꢣ£ƒ……é™Y¢�@ �@Ð*Bdþ‘�“φMÛ¨oh�š.�;áî™i‹´M.r’$¡ÔÑ¡®¾û¶ö¢�@ �@Ð*ât9Á#È_ãt¹? ==]æ>3ƒñãÇaׯNt�@ �@ Ü„%“@ðÿ==]-x†1cÇ`ee%D �@ ÷!2 �8f¦Æ,xöFŒŽ¥¥¥h�@ aR’3E#Áÿ#\ݺ …‚6mÚ`ooOmm- ”••¡TêàÝÝS¦Í˜�$IBhÁCË=[2%&¦“���$I¸»w¡[7&LÄúõ¡·Ì{üø–,ù…Bbøð>|öÙ+œC@@Ott„ñ¡@ ÷JzE.�¡Ä—fµø®°®ŒC—b9t)/‹ÎÌqƒ“©Ã×!I/^仯¿ÂÎÎÜÜ\ÑÑÑAOOµZMhh(mÛ¶%** I’3f ÑÑÑŒ7•J%ÿW[]Mue%oÿíM–¼ü íÚµ7Q %÷¼bMHÈ`Ë­åQ»v¶|ñÅëØÛÛÜq9jµ†½{OðÏ.ÂÎΚ¼¼Büü<ùÛßæbeeAtt¼Œ²²J‚‚¾e÷îãL™2‚ÆÆF6lcùò­8;wàÝwâèØž¬¬<>þxII™¸ºvæÍ7ç›Lß¾Ý ?…··ÿú×Þ~û[æÍ{œßßÑ#Ñ„‡ÿÊòå[yúéñÔ×7²ví.6n `̘þ¼øâSW&Gñ÷÷bîÜwEOÜwúø2sæ |{ø qI ‚ûDdqŸ�[ @KFµ  §µ;F¶äVrª8‰Ýy‘Ä—fñFô�¼ÕuÖ[5¥§¥¼‹îÝ»SXXˆ$I¨Õjª««‰ŽŽ¦¢¢‚€€HNNF¡Pлwo²²² ÁÄÄOOO”J% …�Fƒ··7;·na䘱8:9‰›)‚‡Žû¶r•$‰.]´»øNÎÎ÷¥Ž¨S§8uЬÌLtttèØ©C†ÃÙÅENóÅçŸwö ßÿô3&¦¦444°pþÍ’_ÄÌÌüžë:yü8±1ÑÔÔÔÐÅÑ‘ÑcÇQZZÊÊË[¤4h0}û÷´D¦É“G0yòùsdd!!Go+oŸ>>DDh]]%’$1oÞ{ÔÕ50fÌâãÓ‰‰Ñ @ëÖöÆÆÚÁhÅŠ­TTTQQQÅo¿…0bDoŠŠJIŽétˆyó&áééDmm= �¬Y„Z­¹åµmݺ•JÅéÓ ”—WahhÀðá½Ù¿ÿ$çÏ_`Ó¦=L˜0H<Õ‚ûÂÀ~=™9ëI¼½½Q(¢A�@ ¸Ïf„ÞT`ºž¦4{ó¢ÌåCŸgo».+kk:uêD~~>:tÀÈÈ]]]LMMéÕ«íÚµ£}ûö|øá‡H’Ä;#��¹¹¹ÔÖÖâææ@CCÕÕÕ444Э[7ÚØÛ?”í[UUIü¹8zøûàìâʤɓ±²¶¾ç²ëêêX³*�Üœ&<ö8OΜI}}I |ûõ× <˜ÉS§¶È—žž†Ow_232P©T·U—J¥â?Ÿ}JUUý @!)8É·_Åû~DÇN�ÈÊÌä£ÞG¡Pàëç‡F­&úôiâϽſ>ùû?á½{fy3кR¶f&¹âÂMûnnNµ55’‘ž~ÛõådgóÍW_aiiÉÐá#()¹LTd$ç³²ø÷¿BWW—}{÷°&0+++zõ¢¨°ˆý{÷’”˜È¿>þ䎬õ­¬­5z̵ɶ-[8yüsæÏÇÑÉ™’Ë—Ù¾u ÿúç{|ðÑÇ­Ö¿yÓ&øûÛï|ðî»tìÔ‰žWE ++ÒRµ"SFF:VVV\¾|¹Y; 1‚gæh3zqñbìÚØ1Ás\¾|™þ2{î<º÷ðeûÖ­\¼x‘Ž�:±fU *•Šwþù>�»t¹RfŸ~ôëV¯fé›oÞQÿ,,,$,8˜¢¢"¬¬­5f,öööºkæædfd`ieÅ ÁCèÔ¹s³ük3ö´c ¾4‹µ{Zµh²°° ¬¬ŒŒŒt<½º’ž–Ö¬�¶oݶ-[XòÒËôêÅż<ÞzãuÆM˜ˆµ�5*•JîO»Ú·'&:šââbŒ�Œø}ãFìììøà£�126nVæž°PÆŽŸpÛmTRR"[2UVT°+(ˆÜœŒŒ :|nîÍŸÍ‚‚ÂBCøð“O±³³À¾m[-y��>xŸ}{÷0zÌØfyvíÜÁé¨Süã�w161¹«±fýÚµôêÓG¶6ܼi]»u»¥5ÛåË—9zøŸÔê÷sæÍÿÓBhäçç³7, •Z'nð�¡²ÕPø�¤§§¡ÑhpssgÀ g„‘“�Íî°PJKJ±¶±füÄǰ±±ápx8=üüprvæÿý’>ýús*â$ ¥’€^½ñó÷—œCááÔ×ÕáêîÎð#ÑÑÑ!ûÂö죺ªŠ;2zÌXÙÒ®™È¤Tbׯž çÏËÏ`^n.VÖ6Ô]3.G�:Å©ˆ“ÔÔÔbmcÍ„Ç'/7‡¤Ä$¦L›@Vf&ìgîüæðùóçñéî‹……%þ={røP8’$É µvòöé.§{˜¸g¹­)&Ó† alÛ¶¥R‰›[ç;.§¾¾�M›ö`aa‚……ÅÅe8Á”)K™2e)Ó§¿É‡þrÅZ Ú¶½÷©];ŠŠJ)..mªM+ µy®=ÉîVh4šVü2lm­ä϶¶bÆ&¸kÆŽŠeßðþûïѵkW!0 �@ð9Qx€Qíî8oSž¦2n—ÚÚZLLLð÷÷gøðá 8wwwT*eeeôë×�víÚ1xð`† †»»;£F�B¡P`aa�¿¿?#GŽdÔ¨QôìÙ ª««o«î]AA”——accËOßÿ@bb"OL™‚Cûüº|i©©rÚˆ“'137£oß~œŽŠbM` ¿oØ@XhÝ{ô`ÌØ±œ‰�å»ÿ}Ýj=í;°èù%<1e =®,ê®çLl ’BAw__Îge±mËfBƒw~à=�$‰Ä„x9ObB<±Ñ1,X¸6oÚÄß^_Ê?ßy›Ÿ~øžø¸sÌž7O.« WWùwf¤¥5s©sswÇÌÌœsgÏÊ Åòò2zøùannŽžž§""ømÍNEFbß¶ï¾ÿ½z÷¦¦ºš´ÔTºvó–&wOœœ�Iˆ?wÛVSMk”-¿o¢›�7¯,]ŠŸ¿?[ß$—‘“›CÛv¼ôêk899säСe)8{Ó:nô½‰©)mÛµ“Û)=-½Y;ù÷Ôöýsqg¯¬ý´÷ÅÏß[[m³m[6³cÛVâΞað�¡¼ûþØÛÛ“ššJmM C† “&кáI’ÄÙ3gïúy>~ü–¼²t)C† gßžÝ-Ò$'&âââ* L×2hðâãš?Ï{÷ìfWPo½ý6¦ff÷} R«Õ|ýå=|˜5��¬Zù+%%%² öûÆ Z·Á•¿²~íÚfÂñª•¿òí×_“}ájXšß7ndßÞ=¬Xö 'Oœ`ýÚµœŽŠ´Ö�»vî`ýÚµ¬]µJþûµe~ýå·}í÷ïgðС̙7Ÿq&²wwØ•þ’FNv6sæÍgμù¤¥¥6»ÆûMhH0½z÷æ•¥Kiß¡Ç�i5]nN‹_x‘ñ&²oÏT*EEEìݽ›©Ógðìs )¸t‰ÓQQÔÖÔ°yÓ&F�à /¿‚™™9»‚‚nx ž$%%^mˤDÜ=® œååeÜ¿Ÿ)Ógðòk¯ÑÆÞžÈˆ“8::q>+K~®SR’qsk¹i1xðü¯Ë/åçÓ¶mÛfiÊËËHHˆÇ¿gχò}{_¥Ð¦øDúw•¿®®žÚÚzŒ� 8rä4‹Ocûöƒ$&fðÜsSèÞÝ� >`Þ¼IÄÆ&cjjÌ“OŽå«¯Ö�œ|�xì±!ìÜÎèÑý011&11ƒÎ�[÷¡×׿ý£àˆdÙ²²ví.JJÊ™5ž}n¡¼ð‰>}µZÍáǰ³³“­yòòò8~ô(óòZÔ�¯]´›˜Èñn®ÇÑɉEÏ/A­VCAAGÆÂ‚yÏ.@­V³ø¹ržÃ‡1lÄp �ŒX·z5åå|òù¿9w–ÿþç?L›ñ$&&&\ÌË£¾þª5�³«+[~ÿ]ëÎ’–ƈѣ‰Œˆ�ïO? ¨¨HOzøùclbÂko¼Áö­[Ù¿o/»Ã´n–;uâù^¤¡¡k›–n€VVV¤§¥É–@·CAA�†î¾ÚxO]»ysâøqò/^DßÀ…¤À§{w$IÂÍÃÄÄ„eÖ•Þ´Ž›}¯ãÒ(**¢¼¼ '¹�Úw耽½=ñqqZÁ/>ss �œ�$‰§çÌáàþýlÛ²Ev!êáçÇs‹Ÿ§°P{o­¬m®[éclbBÁ¥ü»~ž� �ÈÉÉ¡ìÿØ»ïð¨Ê¼�ãßié=¤¤wJB@ªô*" ¬¼vWÝu­»ºê *VºA"½H/¡“�B )$¤BHŸ$3óþr$$`‚¨,þ>ו‹0sÚ<çÌÉ<÷<åâE‚‚ƒ›m%TXXØì9hãÒ†‚‚üFá§…¥%–$%&ѽG�~R«ÕTWëqsw§wß¾9|˜=»v2zì8\]]é×ÿvN''5iÉÔðú–/]ÚäÓ®];lmí8_\Ä�áÃÙ¼aÝ"#9¸?.®nŒ3ƒÁÀüo¾ÆÛÇ'§ú„„…µøØï�4Iù½¨°G'¥Œ=;tPÆ‘õóó'3#Ï~—û¸•¥……øúê4xÈU—ëŽZ­Æ³C,--¨­©!)!�ÐN�p¾Ô}wĨÑè««9}:™¶´÷ô º{w>™=½^ßì}Ìß?€];v0dè0T*)ÉÉôœú ?oÛ^ÿ³¶áñ'ŸÄÊÚšêª*4 •XY[ãêêJvV^ÞÞ¤ž>Í„{›ŽyÖЂÊh4rpÿ~âNžàžû&5Y÷î¥{�7íø½74dºp¡€N�üY»vÇum#+ëtgáµ¼þú\þùÏÇhÓÆ�„„4þþ÷Ï”åŽI`ùò÷±´4gåÊ-lß‹ÉdâÙgßç•Wæ™g ;;�gžy�ššÚf÷µoß ÞxãqžþƒÛ™39|òÉræÏ“‹Ëغõ�;ȧ6Ñ"ïر£ñ•Ù`„Bˆ?\¡þ"€2‹\k4¬Ó°�–0™LJ¥[­Vc4©««C¯×S[[Kmm­2¨·^¯Ç`0`ff¦�»û/­CTj5Ï¿øgΤóùgŸ|Cpn¶¼/µëб#Ç�ýMÛ²³³§¦¦[Ìt:jëêë½Y™™Të«I=}Z¹]8^ ™ÜÛ¶ÅýŠÖ1¿æ\n.«¾ÿ�VË„‰÷ÖoÇÝ�?oWžÎÊÌÄ­íï7ÙàaÃØ±};ŸÎ™ƒ‹« j6к¼õZõZVVŠË¥k²áú8“žN~Þ9¾þò‹F!dmMM³!“…¥%m\\9›��N§ÃÎξQK=•JÅ�ýûIJLÀÚÆ3�VÖVʹOKKÅÂÒ­N§Ã•Š‹‹Y»f5ÖÖ6Ü?e*6—�7U]UERB ¾iÿÞ^wÈtìX÷Ý÷b£ÇRR²š�É”)¯4óxãÇ?Ûè±… ײpáÚK¯ç_ÊãýûOk´Ü A]J-;àíÝŽ!CÁd2ñ rôh¢|j. !„¢ñ‡l­�FƒÑhTf•kœ~7��F%�2��–iø·!¬R¶Õ‚qYÂ;ûúŠò�ãÇ3öŽ;�ú®ZÍ/ÛÈÌÈP~ÏÊÌD§Óáêꊅ¥e£Jú™ôtœœœ)--½fèÑúʲ¹9g• qvv6æ—‚'ggŠ‹‹©«­Åh4r&=WV,[†¯ŸŸ2ëÒ˜±c ?àêêŠ��=›6lD«Õ6Ç($4 +kkâNž 11‘~ýo¯¯7$'3ï믈îÞƒ;Ç�ÇÛLJ¶mÛ²më*++±´²Â×Ï�ø¸“dfdÐÑË‹5?¬âä‰T”—Ö(ìú5Ö66\,m`–••b{©bÙ’!ú¸væ‡ì]×|þjü(/+cÿÞ½xûø Ñh›:ëbÖ²aý:ÊËÊ”0gã†õìØ¾�{'M¢K×p%”;GeE%þþþXXXðó¶mÜ>` :33¾ùòKªª«è|Y€ÙZå <„¡ÃG�•™ÉÊï¾#  Qe< (ˆo—,¦¨¨¨Ie~×®��f ìܹ 6¶¶têÜ…n‘‘Ìûê+f=ûÜu›úÒû¾�Ñhl¶ÅÉåƒG_¯†õ/„@«ÓÑ·G�F]«¶<ñô,Îåæ²bé·<ôèL¼¼½ Ì bÉ¢…ØØØâè䈭­ÝïrOm¸GN˜8‘ºº:Ž=ÊÆ ëyè‘G¯Z.�ÞgÖ6”—•)ÿÏËË£ä¬ml RfŒ3�œËÍmt-])(8ˆÄÄÌtf^ÑŠ.)1�ÌÌ ¦Íx KKâãN’–𠀝¿?«W­D§ÕÔü]%%X¶d1}û÷§s—®MžOHHÀ×ϯU÷˜?šLaÕ iig1�,Yò+V¼�™™ŽÅ‹c¤`ÄUÃ¥•+òÏÌ’€I!„ø“¹˜×‡-9•…­^·a�†m´DÉ… hµZ,,,¨««kT¼¼"ÔÜOsQƒÁ€¥¥%�†óÅÅ->ggg||}Ù¾u+ûöìaéâÅ<9s&û÷ïS–)((`þ7_óí¢EdfdгW/T*½{÷!??Ÿ% ².f-±àãë«´ö¹’¹yý=§“’()¹Ðª2ŽŒŠ¦¨¨ˆ% òåçs©(/Wž c׎˜[X0é�øbî\æ~ú #G�&åôiþñÊ+„GD4;ˆ´€?'O§£—W“J™F£¡kx8ÇŽ¥¢¼\¸CÇŽè««Y³–Ï?ý„Õ«VñÁûïa0”€eòSP«Õ¼óæ|õÅçÔÖÔP~i`÷+ÇIÙ»g71?®Q~®œÁÍÕÕ“ÉÄÉÇ1™L$œŠ§F¯oUK“É>Cuðjö¹P¯fýnàÞ¶-Ö66œÅÅÿðý�F>þø[ù”&®iêý¸ãÎqÊÔµB!„h^ˆƒ7;ó�s¨8©Õ]æ')Ûhq¨åêÊŠ¥ßòÔSOaoo�Á`Àd2QSS£´^2 Jk¦†@é^g2™033C£Ñ`aa�ÑhdÅŠŒ¹Ô"©%T*�?õ4 çÍcá‚ùX[Y1ñ¾û8h0U—�ŠŽ¦° �ôô4¢¢£™4ù~&Ü{/*•ŠC±©©­¥s—.Lž2õª­/||}éÒ5œãÇŽÝ£g«Êxü„ \¼XÂîÝ»$ 0�¢K•Ú!Cë»È,^¸€©Ó¦7 ºé\�@GnÒUîòpkßž=ØÙÙ+³eYXXðÂËãûË9Š#‡ÓÆÅ…{'Ofè°áÊk}ýÍ·X±lÇ�£®®ŽN�»`f¦#æÇ5�fغ²ÂjnaѨ’¨V«¹ëî lZ¿žm[¶àäìÌ�wOhõx+ov™Á’ôÍì.8I¡¾sú¸v¾fÀÔp�øùùsâø±«¶|éÅæMéÖ¹³ÖùøúòÏ=Ç�«W³_}hÙ¾}{&O™¢”å�¡ÃpttbýO1ìÛ³33súöïOzZ?¬üž'žž¥ì£avÂ]º†_µËÚí².f-G�ÁœƒaoïÐìuåîîÎwË—qöìYl¬­ �èÆ3Ï=Õòµ°´dúÃóéœ9„„…)]ÌZªGϞĬù‘/æ~V:FwW¶¡ÕhI9}š=»wSW[ËèqãC{÷ìæ›¯¾D§Ó1bÔhÚ´i÷‹a4)**bó¦�˜›Õ¿Þk†¶ÑÑlÚÁ 9 IDAT°žÅ `4 iÔõ«¤¤„„øx† Ö¢{ȈQ£ùií�Ê}kÀ �XXZb0HOKãà�èt:zô쩼Öï–-eÚC³}ëVº†G�w®~öù·Ýv]÷p•JÅÈÑ£øyÛVÖÅÄààèÀ¨1c[¼¾»»;}û÷gù·KÐëõøÐ-2�FÃÈÑcX÷S åe帷mËÈ1מõÐÂÒ'çú.uW¶x ëÔ‰ÓÉÉ|:ûcœœœ‰ˆìƶ-[HNJ"0(??ÒSS¯ZWÌ;wŽœœe\4777¦ÍxƒÁ@vVÃFŒ¸©ÿÞªœœ#LÕU„¸u˜šüÞø›C“ò¯o°Ó Ù£F£fƃ“9jnnnr „Bˆ›LlqÿŠ_‚›…#s»?Ûªugü€üê ¼6™èV ž››KzZ*j´oßKKK´Z­26Suu5uuuèt:t:fffhµZt:�R!¬©©¡¤¤„ÌÌ,Ô:-Þ>¾x\¥%QkUUVòèC3èwûíL›ñПz~b~\CÉ…FŽCUe%ï¼õ&žžxé•úa0NÅÇñß>ÀÏ?€±wÜ�—·7ååå>K÷=qt¼¾i¼++*˜ùðCô0 ÉTâ×õ)Ôd¢¨¨H™yíVqäðafô!3âºC‚+ËÝd2amc󗺽÷ðòËrCþ Ûµcµuµ7õ˜J¿•VN³×ÏÌLǃLdôèQ¸¸ºH�!„7©hç B¼8U’ÁÜ”5Ìô×¢õ榬!¿ú¡^­ ˜ŒF#xxxPWWÇ7_~I@`{víÂÖÖgggÌÌÌP©TØØØ Õj•/Å*++ÉÏϧ¤¤„^}ú�p*�é?¬ Þ06Ó­$0(˜ùß|ÍÖ-›Q©Tø0uútåùаNüûƒY»f5+–-¥¨° s<;t k×ðëÚgQQ[7o¸aS�«Tª[.`Ê8s†Ÿ·mÃÌÌì7�£t¹ËJâ¯Àd2¡¯®æT|\“o5Ò’IÜŠoá&¿ßè–Lff:}èFŒqÝßœ !„â�•V–ÃóGç0Ø#òWƒ¦¹)kØ’{€÷#fâkÛ®Õ•Š+»–mÞ´‘º:ÖÖÖèt:Ôj5:�®Ñ@àz½ž²²2´ZM“î,7b°àƒ�£GŽàââ‚—·÷MqŽôz}£Yõ~OÖýÄÚ¤kx8?:ó†•ë­æÃ÷ß'3㠣Ǝ½ê8FBˆk«¬¨à«/>'08˜aÃGÜÒ¯UB&q úýB&;[kšñC† nÕÔ´B!„¸94t›p³pd¨G4QÎAÊ8M9•…*NbSn,ùÕõƒW·¶›œBñW%!“¸Ýø�ÉÑÞ–iÓ&3tèìíí¥ˆ…Bˆÿaie9,HßÀ©’Œk.êàÅTŸá­nÁ$„BüUIÈ$nA7.drv²ç‘‡¦2hÐ ¬m¤ï¸Bq+‰-Nba< %g(Ô×Ï\ìbnOˆƒ7=]¤õ’BÑJ2‰[Ðo™<Û¹3mÚýôë×k˜P!„B!„øU2»œ—éèÙ–©S'Ó¿?¬¬¬¤@„B!„Bˆ’�I 8Ї§ÞO�ž=077—B!„B!ZIB&ñ—ìÇ”&Ñ󶞘™™I�!„B!„×IB&ñ—Ô£Owßw7“î‡V+o!„B!„â·’ÚµøK8¬+wL¸ƒà°PT*•LB!„B!Ä "5lñ—0tT$ã&ÜAHX*�FŒF£ŒB!n)§“ÏH!!Ä_H@ ÷Mu<2‰[Úˆ±ÝßÝc¢!\2HÁ!„B*B!Ä &!“¸%M˜<€1ãÇáÔ‡K&i¹$„B!„Bün$d·”Iaô�c  Äh2b4š$\B!„B!þ2‰[Âý3†qç„ñøøÿÒjÉ$å"„B!„BüQ$dÿÓ}ú.FŒ�·¯&“$KB!„B!ÄŸAB&ñ?éÑYã1f”. !„B!„âÏ%!“øŸòè¬ñŒ½ëÚwð”ÂB!Äo[œÄþÂxJÎP¨¿€‹¹=!Þôt #Ú9H I!„h•“s„©ºJ¦t7·Y/MbÔcqsw¿ær&“I“É`4(ý”ß;ûË4¿B!Ä_MZY Ò7pª$ãšË…:x1Õg8¾¶í¤Ð„Bˆ��IÜ´,,5<õÂ†ŽŽ«›[‹Ö‘�I!„×[œÄ¿â—àfáÈP�h¢œƒhgå@Ne!‡Š“Ø”K~õ^ ›|]­šL&*•ŠC±±\¼X@]]*•JyÎd2¡ÑhÐét¨Tª_>¤«T�FÔj5jµ­VG�ž=•õ„Bˆ›‘„Lâ¦ckoÆÌY“>j$m\]ZýaNB&!„B4'­,‡ç�Î`°G$3ýÇ]sù¹)kØ’{€÷#f¶ªESC@”š’ªïVàââByy9–––�&*Q«Õ”••QRR¢|–¹<|JLL¤S§NXYY1bôƒ‚”m7'ãÌþñê+L˜8‘‘£Ç\õøZºÜ�4÷“9Ø¿Ÿ¯,dÕ÷ß³aÝO|ðñlÚ´isÕuÊJKÙ°~=gÒÓ)ÈÏ£­G;ƒ6b$:�€u1kùnùržxzQÑѼýÆ?9�œ À—óæcnn~ÕýTVTðÝŠåœ8vŒòòrœœ�éûí 1R õ*ÊËY¾l)I ”•—ãééÉØ;î ¬Sgôz=O{� �^~åÕ?¤L—¤ofwÁI õ%¸˜;Ðǵ3“}†4»ì�(§ÜœV,[Fjj uuu´k׎ÑcÇ¡,s6;›Ë–qæL:µ_&NšŒÛ¥/�O?Ƈï¿ÏwÝŸ;ïºæë[±l‘QQøúùµ¸LJK/²bÙ2’©¬ª¢C‡ŽŒ½cÁ!¡=r„Õ«Vòæ;ï*ëŠ�eÑüù¼ðòËxvè 7Ëÿ1×s�´VyYsfLxx8ÃFŒlôܦ�8zä�?ù$vvö¿y_öíãø±£TUUáíãð#)))aþ7_7Y¶_¿þÜÖ»÷Mu>dL&qS…K³^œÎ�Ãppt”B!Ä µ }C‹&@YfKîa¤oàÍ.3Z¼¯†`bëæMx{{³qãFJJJ ¡ººZ ‰T*UUUh4œ��1 JÈdnn޽½=DFF²cû6ƒ‚®Ù’ÉÁÑ�;îº ÿ€Àk_K—û3%&œâ˹sé?`÷Ü{/îîîäää°yã^ûÛË<ýÏÐÖãÑ:i©©DEGc0È8s¦ÅûZ8öï'*:W7wN?Æò¥KÑ™™1h𪫫ùÇ«¯PXXHç.] t°çıãüçßÿæ‘™�ѳW¯?¼|^;ñu£.Ÿ…ú~ÈÞErYÖ¯^«×SNƒ�÷ÿõ.ôêÓµJÍ¡ØXæü÷#^ó-:tìHÆ™3¼õÏ×Q«Õ„wë†Éhäè‘#œŠ‰7Þy÷_úâJý ÀÎÖ¶ÅË—–^äÕ—^¦wß¾¼üÚß±²´$..ŽÏæ|¤ûï§Çm·5YçÄñc,œ?�ç^xñ¦ ˜6oÚˆ•¥½ûö•›÷ ¾N®—F­!5%¥Q‹R“ÉDZJ j•ú†Ý÷Ž;ÊÄI“Ш5üÃÎ?3dè0ž{áEe¹ºÚZ–,^DHXèMw>$dº¶ímylÖƒÜ>xöR B!„¸áb‹“8U’�›…c‹¦3ýÇqò|§J2ˆ-Nju·9GRSS©©©ÁÏÏ­V‹……E£ÖJ•••\¼x£Ñ¨„L ,,,8~ü8®®®üêþJ.”°zÕ*t:��äåå±hþ|ÒÒR±³µeôØqôíß¿ÉrS&ÝG—®áXZÖïÏÍÍ�Çžx÷¶m©««cñÂÄŒ9ÿý/ÅEŬ]³†ÂÂB&=ðC†S�W^|‰o—,&¼[·Vuc¬®ªbã†õdfd`aiIŸ¾}•×ùñ‡гWo<€Z£!º{ºEF6ZIú櫎)vª$ƒ%雯ڢéZåT£×óäÌGqnÓ†wß{€ÏæÌæÈáüò÷pþüyz÷íË”§Ð5"œ5?üÀ¹sçèб#‹.À`0ðê?^ÇË»¾Ç@Rbï¾õß.Zij/¼Ðª÷Ï®;ˆèÖ __6mÜ@rb"Ý"éÓ¯_“å¿_±‚ðnL˜8Qy,º{w¬¬,ùâ³¹D\Qމ §øê‹/˜õ̳Êñ¶Ö¾={¨©©¡ÿ€@}«¨ Î+×ÉÕ˜L&-˜¯”å•ü§ß7«*+Y8AÁ!Êë«©©!+3“íÛ¶Ò-2ªÉµù{:›�ͦ�(¹P‚sgF�K›6m”ëÄ×ÏïšïŸÄ„Sìܱƒ½ž€   ‚V«%;+‹Í›6RYQ�g‡ > K˦!“Fƒ«›;Y™™tôòê[÷99·A¯¯Q–;|臠ªªç6ÎŒ;ŽÜœ³$%&1~ ¾5éÏÛ·ñàôÆ�pff&]º†ãàPßè"2*Š];w R©”Ö›PßÚ©s—®Êr75BüI<;Úóæžbåú¥Œ»{¼LB!„øÝì/Œ¯<¢[½nÃ: Ûh •JÅÊ+8þ<ÇŽãìÙ³TUU‘��M~~>yyyäçç“››KUU666ØÛÛãàà€ƒƒŽŽŽÊOÿþý©­­%??Ÿï—/oq˜a4ùïÿ!++“»î¾G''æ}ýÕU[®œ8~ •ZM×ðp232X½j%ÖýÄŽíÛ‰ŠŽF¥R‘˜pJYgõªU9|˜!C‡1hðN?Æúuëêƒ�Å‹ˆ=x�^½zcggË©ø¸¦çeyyyÌûêKFŒIHhY™™¼óæ<ûôS|»hÿüûk 9 �NÇÑ#G”mùp&=ƒÁ@zZ¶vv�ÆõŒŠŽÆd2q*.^©pZXZŠ‹‹ ÅÅÅ|þé'ìÙµ‹‹%yåïÿàž{ï îä ,,-4ø—àÆÎΞ>ýúQVZJfFF«®©m[· ÓéxâéYŒ»ó.6mØ@qq±ò|ÎÙ³Ì|âIF�ÃÖÍ›1o²»àä5·­ç¯UNfæætîÒ…Üœ.\¸€Éd"1!‘à�PÜÜÜ033ãÐÁƒ,]¼˜C±±¸·õàµ×ÿI÷=¨ª¬$5%…°N�6AÁ!øúù‘p*¾Éëh©ä¤$ÎåæòÈÌǘ:}:±*áa£€-.޾ýú7y<¬Sgt:-g³³•ÇRSRøïðÈÌ™øùûÿ.÷�];v°yÓF–/]Ê7_}Éî�;•ç-˜OÞ¹<ΟÇÂùó”ó_Rr�…óçñÅgŸ²ï^eù¼¼<¾]´ˆV®dýO1lܰžy_EMM}¸q`ÿ~¾]´ˆeK–°qýº&eýÕŸsäðá»Á``Ãúõø\ÑmÍ?PXPpÝ¡Üo±aý:º÷èÁ¬gŸ¥½§'ûöìnv¹æÞ?EEElÙ´‰»ï™ÈŒ‡¡ ?Ÿ#‡S]UÅÊï¾cè°á<ñô,ìììù)&æªÇLRR¢òÿ¤¤D‚‚ùò¡´ô"?oÛÆø{&òô3ÏàæîNìÁøøø’™‘¡œ—Ó§“ lú¥Eÿþ·ýËß©ü¼<Ú¶mÛh™ÒÒ‹$$œ"2*ê¦ü{+-™ÄÎËב™OÏ ßÀÛ±¶±‘B!Äï.¡¤>X‰ºŽ¼£œƒX”¾IÙFK•–^$44???eÀo£ÑˆÉdj4.SC T[[«´pºœZ­Æd2accCfVV‹÷Ÿ•™É¹Ü\†�Å�¡ÃèÁ¦õë©®®ÆÂ¢Éò>¾¾<úØã�FŽ;FAA{víÂÁÁ�i3Âh42óᇔuzõéCdtŽÄÅ�T*Ƀ�ý{÷âëçÇä)S0™LÄÅÅQ^VÖhŸwŽ¿›>ýúÑÖ£³?ú�ƒû÷ѳWoÒRSyþ¥—)..æ?ÿþ7³ž­oiòöÿ¤½§'*•Š à2ΜÁʪ¾Å�_@ +3“´´Tüüü¨ª®VöÕ-2Š% G�Ûn#11‘.]º Õj™ùÄ“|¿|Ç�gÿ¾}ØÛ;0eÚ4ºEFRXXˆƒƒC“±°œœ�(ÈÏoU¥;9)™‡y�Fƒ››!aaœNJRºÝu G­VãÙ¡––ÔÖÔ ¹¬eE¡¾äšÛ¿Öó¿VN‘QÑŠ�åT\^ÞÞ”–^$¢[7¬mlxæùçYóÃlÛº…M뻟vèØ‘Çžx’ÚÚZœÛ87Ùg}ë©Ôfƒ¡–°²²¢ºªŠÂÂBÚ{z6Û"Êh4rþüùf÷ÐÆÅ…‚‚ÌÌÌ(¹PÂçŸ~B‡Ž9zä�:wù]î;jµšs¹¹Ü?e*ƒ�¯>ŸKXçÎ8::2ញ|óÕ—MZ29882åÁiØ·�ºº:åq•JEyE9“x€ßŸ‡}”­[6“)˜ÍÎÊbÒ°qý:âãNÒ¥k¸²~``Ð5Ç?»ÒÖ-›‰ŠŽ&//�Šòråñ†VbÛ·nýÃïãV–Vâë«oø^©¹÷ORB¡�:áì\}Œ5}u5§O'ÓÖÃöžž@}Ë·OfÏF¯×7;>™¿»vì`ÈÐa¨T*R’“é9õA~Þ¶kkòI¬¬­©¾Ôº²¢+kk\]]ÉÎÊÂËÛ›ÔÓ§™pï}M¶ßЂÊh4rpÿ~âNžàžû&5ZfßÞ½tïÑ�F#!“øk éÔ–�?H¯¾}°²¶–B!ĦP@™E®5ÖiØFKy¶oÏÀ�)))A¥RQ[[‹ÉdÂ`0(]ã uuuʤ$ ¿_45„SVVV�*�¿¦¡Bß®]ý€å®®®Ü?u*@³­™*_jµ«Ë(/,,$4¬“òœ——ùùÔÖÖ²dÑ"rsrðh÷ËÀè%%%ÔÕÕáåå­¼//oâã·°ièrâíã£sêéÓ´kß­VËö­[‰ˆ¬ï.õ]Œº¾äçá€áR™8::Õ‡i©¤¦¤Ð§o_ââ~i=åè舯Ÿñ'Or6;›²ÒR""£”²yü©§1™Läççw’eK–ðÕŸÑí+\. ƒ®×ÔÔ�r:™Üœœ«+WS[[KMM 6—�!cggOYY©òWW×FçÿJ.æ× ’\̯ÞCà×Ê©kx8Z­–¸¸“TUW¡R©”nfÁ!¡‡„RWWGvVûöìaó¦�¬X¶”Gf> t1„ún�Fƒ�œœT*äæœmõ{гCºt g]ÌZª«« íÔ‰5ªd«Õj9_|¾Ù.Dç‹‹qwwçüùóèõÕüßsÏáÜÆ™¿½ø"‘QQÊ5~£ùøø*³Dº·õ ° ÇëÖÞ¾þ¼š™é°¶±ÁÌÌŒºº:rΞ¥¨°€o- ¦¶këÆ_æ÷íß¿Åû9KÛ¶mñìÐAi]x3ùø¿<ÿì3ôî݇a#FòÚß^ÆÓÓ“_yµIEÐ/ €¥‹×·œjf°ñnQÑ,_º”Ý;wª„ nnn=r„÷Þ}—€À@Îåæ�š’B×ðt:cÆŽåàþ}|»h§ââ°wpÀÌÌŒŠòrº÷è�…¥%z½€âÂBb~\óK…K«eøÈQ�Ž#0(�];w0tøΟ?OB|<“˜Òâs2ÙgÉeYÍþêàuÕA¿[ZN‘QQœ8~ŒÇ�sçøñ@}·8}u5ëbÖR�Ÿ‡›{[eœ¥ˆnÝê�ë�)¼ýÆ?yçÍ7ˆŒŽ¦¶¦F©Ø_P$%&5*'7÷¶ÊÀïWJLHäLz:£F�ÆÚÊ µZÝ(¼mp÷=yíå—±µµcààAXXXÇÂyó˜ñð#hµM«¿={õ"öà–,^Ôl`ñkIOMUÞÇY™™ý2kãÙìl% É;—Ë€Aëï z}�Ò:î·ðôô䧘µôé×�NÇáC‡hß¾=î—�å³kÇ:zy)­¯åòr8KEyù¯L¥¥17·ÀtéÞffnNEEù ˜úÛE‹5f þXYYR×Ì5p5AA¬\±œ®X˜›³uÓ&‚‚ b׎ŸéÜ¥+nîîìݽ›œ³g¹wòä«n+00ˆ½»w£Ñj™4ùþFÏUUUcan�ÎÌ ½^Ïñ£Ç”–N®®®êê8qüwO¼·ÙmÇF{OÏO[0~Â.^,a÷î]HQa}ð6ñ¾û˜ÿõ׬[ðÃIOOãĉ�F¦N›Î·‹³cÇÏxy{ÚhÐp¨ï>òSL V––Ì|âIÜ. @=þž{øæ«/y嵿óê?^o´Î½“&]õXýý0™LxvèÐì¸S®®®—ZNeÙMyüáGgòÃÊ•=r˜”ÓÉØÛÛ3xÈP%`±°´äŸo½Í²¥ß’”�À©øx<ÚµÃ×Ï�Ÿ·mãlv6.—ºè²ò»ï”m[Y[7 ™ ÂÆ ëùtöǘ™›3xèP\\Zw]¾ÙeKÒ7³»à$…ú\ÌèãÚùW¦–”SD·nÌÿF})@ªï*gaaÁ /ÿ�ïW,çTü)Ž>Lî�<™¡Ã†õãz½þæ[¬X¶ŒãÇŽ)­ÀÌÌtÄü¸¦ÑŒp‰ §]Ý"#¯2u ';+‹/æÎE«ÕÒl÷6Þ|÷]V,[Êÿ;••´oßžé?Ôh|¢+M�>�—_x�cG�ѪóDÊéd>ÿìST*„uú¥%™¥•%«¾ÿžŠŠòF³�™››ÈW_|Ž………Òeoë–ÍœËÉUºOžIO'$,L3¨9íÚ·§K×p–.YŒF­ÁÁÑ�®á�_orrÖ66- ™®eùÒ¥TUURVZŠV«åä‰ãÊ ÿ�ATTøŒG© IDATTPVZŠŸ¿?»vîdâ}÷Ý�{¸J¥bäèQü¼m+ëbbppt`Ô˜±-^ßÝÝ�¾ýû³üÛ%èõzüè‰F£aäè1¬û)†ò²rÜÛ¶eä˜Ñ×Ü–…¥%NÎõ]ê® ºÃ:uâtr2ŸÎþ''g""»±mË’“’ ÂÇÏ�ôÔTÜÝÝ›ÝvÞ¹säää{ð ò˜››Óf<„Á` ;+‹a#FÜÔoUNΦê*BüV}nfÒ´ID÷è�®•͹o”†o LF#££Ñ„éÒ‡¸_~~ù6±³¿·œ8!„â/ ¶8‰Å/ÁÍ‘¹ÝŸmÕº3~@~õ^ ›Lt+ÿéÇ5„…†RTT¤t�«©©¡¦¦F—çò�ÀZ25t§233SþÕh4899‘�˜È¨±ãþв‹ùq %J9f U••¼óÖ›xzvà¥W^ù]?Ó}ðÞ{œNNbü=÷Ñ [22ÎP�_Ъñe®ôí¢ElÙ¼‰gÏÁéR‹¬ß¢   Ñ0·Š×þö2úêjÞûð£r>‹ŠŠZ¤ý¯Û³kZ­–·Ý&7aÔ·(«­«½©ÇTú­¤%“øÍúãþéÐ-*�V.)!„BÜ|¢�ƒuðâTIsSÖ0Ó¿eAÍÜ”5äW_ ÔÁ«U@—ˆnØ¿¯Ùnq—Sþo2a2¨¾ÔD£Ñ(³Ò©ÕjÔ™™ô¼­×^v�AÁÌÿæk¶nÙŒJ¥Â? €©Ó§ÿ®ûT©T<û ìß»—}{÷²eãFjjjqpt GÏž×½ÝcG�rüØQ|ýünHÀÜrSeEG�!çìYeœšq>ÿj“—3™Lè««9ǘqwÜÒ¯UZ2‰ë6òŽîL˜t]"Âošé¥%“B!®&­,‡ç�Î`°Gä¯MsSÖ°%÷0ïGÌÄ×¶Ý_ºüôz=�¦ÙqmþW<2c:L›ñ�AAò¦hFzZï¾õ&Þ>><þÔSÊŒfBˆëWYQÁW_|N`p0Æ�¸¥_«„L¢ÕFßÕ“ñ÷Þ}S…K $dB!ĵ4t›p³pd¨G4QÎAÊ8M9•…*NbSn,ùÕõU·¶›œBñW%!“h±qz1aÒDB;wúÍ3 ü^$dB!įI+ËaAú†fgæº\¨ƒS}†ÿå[0 !„-%!“øU÷=8˜qwßIPHH“1n62 !„¢¥b‹“Ø_OBÉ õp1·'ÄÁ›ž.aÒzI!„h%¥Y\Õý3†qç„ñøHa!„â–í$A’BqIÈ$šxä©;9n Þ¾>RB!„B!„h ™„âÑYã1f”„KB!„B!„h5 ™�ÎÏØ»î }O) !„B!„B\ ™þ¢,,5<õü 97ww)!„B!„Bü&2ýÅXXjxê…) 9W77)!„B!„BÜ2ýEØÚ›1sÖd†��‹««ˆB!Ä-ètò)!„ø ô¾©ŽGB¦[œ­½³^œÎ�Ãppt”B!„�ʆBñ»��éÕ¶½-�Íz�þƒáàè "„B!„Bˆß•„L·ÏŽö<üä Œ�½½ˆB!„B!þ2Ý"¼|™ùô ú ¼k)!„B!„Bü¡$dúÒ©-3�^}û`em-"„B!„Bˆ?…„Lÿ£Âº¶cÚ£Sèݯ/–VVR B!„7“É„J¥Rþ*>žœœ¬¬,Q«5ØØØ`kk‹J¥B¥Ra0(++£¢¢£Ñ@eeíÚµ#4,ìªÛB!n&2ý�éáÉCOL£gïÞ˜››K�!„B\§Øâ$öÆ“Pr†BýE\Ìí qð¦§KÑÎA×½íËàï¿[AYi)'�ŸÀ`¨ÃÎÎ333¬¬¬ÈÉÉ!//µZ�››îîîTWWS[[ËÅ‹Ñh´tîÚ[&LœˆJ¥’ I!ÄMKåäaª®2HIÜäzö `ÊCÕ½;f.]ó�ÑhÄd4b00M˜ŒFŒ�~ Êï�ýeš_!„â¯&­,‡é8U’qÍåB¼˜ê3_Ûv×µŸsçÎñÉ?ÂÕÕ­V‹Z­F«Õbff†ÑhdÆ ´mÛ–uëÖ¡R©>|8ùùùŒ9ƒÁÐèÇh4rîÜ9zr…BÜ”$dºÉõ¹=˜IÓ&Õ£fffR ¿BB&!„B\KlqÿŠ_€›…#C=¢‰r¢�• 9•…*NbSn,ùÕx)lr«[5¥¥¦²qÝO¸ººRXXˆJ¥Âh4RWWGRReeetíÚ•víÚ±páBÔj5“'O&##ƒ“'ObccCHH�µZ�ÉdÂÍÍ� .0dø||}åd !„¸éHw¹›TÿÁaÜ?ý"¢"Ñjå4 !„BüVie9JÀ4Ø#’™þãš,ÓÎÊ…vV.ŒóìÃÜ”5lÉ=Ì¿â—ð~ÄÌVµh:›��Z­¦¬¬ŒŒŒ ªªªP«Õ¨T*rssÙºu+GŽaÔ¨Q 4•JEll,111äååqûí·cnn®|�fee…µµ5:�Ž‚üü‡LyçÎñâsÏ2rô&LœÈ#Ó§áÈs/¾xÃÊ53#ƒË–1hÈ"ºu»îí ¶lÞÄé¤$²³²ppt¤cG/FŽƒ£££²ÜŒ©S¨­­¥½§'oÿëßœŠ�ã½wß`øÈQL¼ï¾kîëø±£ü¸z5¹99˜™™ãëçËÝ÷L¤]ûöÊ2GfýO1œ={{{B;ubÂ=±°´àõ×^åLz: ¿]ú‡]ÃKÒ7³»à$…ú\ÌèãÚ™É>Cš^ë©©¼ñ�¿0hðîŸ:€•ß}GÌ�kxæùçéÒ5üšûÛ°î'vlßNqq1vvvt çî ÷(�FÖŬåÀþýàæîN¯>}:l8*• ½^ÏÃÓ$($„—_yõšûÚ¿oU•• 4¨ÅåQWWÇÚ5k8røEEExxxлo_ ¤t)}ío/sÇ]ã•kS¯×óÞ»ïÐÞÓ“©Ó¦K×Ó[ÀŠeˈŒŠÂ×ÏïwÛGyYsfLxx8ÃFŒlôܦ�8zä�?ù$vvö¿y_öíãø±£TUUáíãð#)))aþ7_7Y¶_¿þÜÖ»·„LâêFŒ�âžûï¥KxW4. !„BÜ0 Ò7\3`ºRÃ2[r³ }ov™Ñâ}99;Ó±cGòòòðôôÄÊÊ �N€­­-Ý»wÇÃÃöíÛóæ›o¢R©xõÕWéÒ¥ 999TWW@mm-•••ÔÖÖÒ©S'ÜÜݯ» F�‹³s›Z®圊�#"òú¦¢¢">›37wwŠ——7çÏŸçPìAþþ·¿1uútºEF6Z'çìYª«ª°°´$=-­Åû:›�Íì�>ÂÑÑ‘ƒsáÂyÇÆ’™‘Á{~„N§cë–Í,^°'''¢»w§¨°ˆm[¶�”˜Èo¿ó§| üÚ‰¯uñ,Ô—ðCö.’˲®ym¦¥¥*¿·¦œ~Þ¶�åK—âçïOT÷œIOgûÖ­”•–òÄÓ³ølÎlÅÆÒÑË‹ž½z‘rú4Ë–,á\n.NŸÑª×J]]Ë{ؘL&Þÿ÷¿073gæãOàêæFfF‹. ;+‹©Ó¦7Y§¶¶–�þóÜÜÝoª€©ª²’ÿ~ôá¯q¢yý ÀÎÖöwß�F­!5%¥Ñ¸x&“‰´”Ô*õ ÙGbÂ)Ž;ÊÄI“Ш5üÃÎ?3dè0ž{á—/êjkY²x!a¡7Ýù�ã&1êÎÜ}ߺD„£Ñh¤@„B!n Øâ$N•dàfáØ¢€©ÁLÿqœ<ŸÆ©’ b‹“ZÜm®¦¦BCCIII¡  €²²2L&AAAÔÖÖ²~ýzÌÌÌÈÈÈÀd2ñÍ7ß`41b�†òòrT*666´oßž   T*•úškîûð¡C|¿|ÕÕÕÜÖ»O£çb~üÿ€@zöêÅ»o¿ÅÙìlî½o1käßÿù€ô´4–,ZÈÙìlÚzx0åÁiJ«©Ç�ñýŠäçÓ®}{&Ýÿ®n®üû�wX¼`ÖVÖt‹ŠbÕwß{ðúš‚ƒƒ™úà?tôò¢M›ú€ÌÁÁ�‹/’žžFHhi©©899qþüye?�?õ4ÑÝ»s.7——žŽ‘£ÇàÜÆƒÁÀw�§wß¾üÔ¾=ÇŽ¥¸¸k++¾_±WWWþùÖÛJ«�†mnÞ¸�£F·êúKJLd玟©®ªÂ³CG†��¥•G¦° Ÿüü|J.\ ]{O††­�]£õ—¤o¾êb§J2X’¾¹ÙMNNNdefRSSƒN§#==­Q9½ûö[$'&2û³Ï°³³gûÖ­,œ?�ç^|‘„Sñõï�'žTÊýÓÙSQQ @ÜÉŠ�%*:šÇŸzZ™!ñƒ÷ÞcçÏ?Ó·_Ú{z¶¢r�HEy9 âlv6›6n äB Îmœ5f¬r öïÝËÅ’Þþ׿•ú“@Ï¿ø/<÷,ýo€—÷/Cc >ùøcìíí˜ñð#×0ýëí·yîÅ• ñÃ÷ßgæã�ÿêŒßk~XE¿Û4j•×ÀÒÊŠgŸáÏ¿O<ȶ­[xþÅ—Ðjµ  òóÙ½kZ­–;Ç�ot�ËÊÌdû¶­t‹Œjÿ®v]ìÚ±ƒˆnÝðõóãã? g¯Þ:xµFCt÷ʱ%&œbçŽÔèõ1hð´Z-ÙYYlÞ´‘ÊŠ <;t`ØðJ‹ÅF!“Fƒ«›;Y™™tôò 7''ç6è/»/>tˆCPUU�sgF�GnÎY’“?agÎðóömMÂØÌÌLºt ÇÁ¡þ:‰ŒŠb×ΨT*å‹ ¨oíÔ¹KWe¹›‰ñ§{÷m,ýqoð/"¢"%`B!„øì/¬¯0õˆnõº ë4l£¥ª««±±±!22’AƒÑ·o_‚‚‚0 \¼x‘^½záááAÿþý8p AAA :µZ�ƒƒ‘‘‘ 2„¡C‡…ƒƒ•••×ÜgAAŸÍ™�J­fÐ�!ìݽûÚÇXUŲ¥ßâééIuU¼ÿz½ž‰÷MB¯×óÉÇÿ¥¢¼œ¢¢"fTßÊç® ¸XRÂÇ~ˆ……%�>ö8wŽODd$ß/_ÎÆ ëéÁð#8qü8Ÿ|ü߯¡ÉâEØÛÛcaiÉÚ5kprrfäè1”—•ñÙœÙ<ÿ³˜ûÉÞøÇßqpt¤ÿíØðÓOÊú6¶¶´õð 5%€´Ô4üüý•ç#£êÏY|ÜINÐ-2—úñ·V¯ZÉ�« îä úß>€×^ÿ'îî¤P]UÅí*ÔwÃS©TœK{OOöíizÇÇÇѧoß&õ'[;;Â#"”�¬!`úâ³O©¬¬àá™�¡VßøjpÆ™3|·|9?®þ�…óçñÃÊ•ÔÖÖ°eó&RSRY½j% çÏktl;þ™…óçñáûï7ÚÞ×_~ÁÆõëX¼`ûöìaþ7_s.7€ .°bÙ2–/]Ê·‹‘�•ÕhÝÍ›6òÃÊ•­:þ´ÔTÊÊJ17ûe’©Ý;wwÿ€€fB³(,(häýÞZr]@}+Ç™O<ɨÑcغy3ƒ�¢¢"¶lÚÄÝ÷LdÆÃ�P�ŸÏ‘Ç©®ªbåwß1tØpžxzvvöüsÕc &))QùRR"AÁ¿|ùPZz‘Ÿ·mcü=yú™gpsw'öà|||ÉÌÈÀ`¨o­wút2��M¿´èßÿv"£ù;•Ÿ—GÛ¶m-SZz‘„„SDFEÝ”o¥%ÓŸäÞ)ƒ¸ãž» ‘~ÀB!„¿³„’3õ•êVàݰ΢ôMÊ6ZBõÿíÝwXTgþ÷ñ÷ô�¡wPT:ˆˆ€ØbKlØ�&ö¨11‰é›¶Iv“Ín²»Éf÷·©�1fcbר{{ïT¥¨Hê00åùcdt,»šÜ¯ëâR8uΜ93ç3÷ý½%¤R)ƒÁÚŠÄÍÍ ggg‚‚‚ÐëõTUUa2™¬µ–¤R)2™ •J…B¡@"‘X[‡èt:”J%R©ӭ´ýû0�Lž2…QQ©Õ,œ7ï¦ó þøáŸðõóãÐÁƒTUVòø˜1ÄÄÅa0X8ogNŸ¦¼\‹Á``ÔèÑDwŠÁÏÏ�S'NRSSƒ³‹¥‰ÆÁ•JÅž=»ñòòbêÓÓÈËËãÀ¾}Öd€'ÇŽ³ÖÞÙ»;‘ç_| £ÑÈçŸ}Jï¾}yñ•WY²hY™™xyyÑ>²=«W®´Ù÷�ÐP2ÎgP\\LEE9A!!9|€Öþþøøø�|ö¬%_ñ…µ6QTÇŽwôÚix-Œ?ƒÁÀÉ'ؼi#3žÁf¾ÈÈlÚ¸�Aƒ‡ØœÇÕUUœü‘H$Èd2ž?¥Ry×ëNKKE«-cÉ¢…€¥ÖÒÂùó˜8ù)›@ÿkÍ=/n<^ÖסÆ�ªÊJëïW®\A[V†ÆÁ�°ðpëˆq&“‰ü¼<›`çFáᤦ¦ T( ‹ˆ°=ž©)\¼x�éÏÎ@mgGÒÙ3dfXŠï…„°jÅrrááM®[«-cñ‚ùôîÛ—ŽÑ�MOII!(8ø�zn½¯ˆ�÷× ¯?ÁÚ�?ñöß“ ‚ Âÿˆ§Ê äÖ´¼eAÃ2 ëhmYr¹µZ�Á`hò¦³!lºñçÆ«†.svvvÈd2JKJnºÝ¨Ž– ‹,`Ó†õ¬Yµ²ÙûݵZÍŠ_–qøÐ!þýÏòúË/SXP@\|d2«W®dû¶­ü8g‡ìÇÁÁ•Ê–œKKC«-£gÏ^°àçŸÙ°n-G"0(ÈÚbêz …‚�Ð0vnßNLl,1±±¼÷ÎÛlÛ²•±&°tñ"æÌþŽé3fzC "__4œ9}Š à�Fë ÂÝÝ�½»w[ë „††QXPÀ³¿çç¹?²lÉæÍ�‹T*%ºS'�œ3v,………üñ½wY8ŽNNTVT–.f×[·fµÍOEEy£0,-5•‚‚L&»w'Ö¢V#“éÒ®Éi‘.íš,ú}ýöµZ-9—.Òxˆ÷¸«õ«öîÞMDûHkHLîåË|ú׿²lÉ~žû#;¶oÃÅÅ…€€@¢:F×¹3Gæ/ú�m[·àââBeEnnnZ·QRTdsŒ6mXËÇ»pÞ<ÒÓÒ�J¥ØÛÛa¸ZÛèz�ôê…½½=ß|ùWòó1 defòÏ|F¯Þ}l¶ýù6ãùXµ|¹M÷Í–pusµ†·ùyy¨Õ*k‹—ÂÂBôzK7µË9—lZÔÈårjuº{r=óoÓÆZש¦ºš];vØLON:ËñcÇšµ®N1±<ûÜóL}z:SŸžŽR©dÒSSî8Ĩ¨(G¯×S«ÓQ]UE}}=ZmÙ=yÜÍ9/n&4<œ¤³gÐjµÔêtlß²…ŠŠ ‚‚ƒHOK#/7£ÑȾ={Ø“˜xËu………“qîééiÖQ@ètµ¨UjJ%z½žS'Nb4ZBI///Œ§O�$4¼é®ÛG&"2’ÈQ�FëOƒsééÖÁT¢%Ó} —†ŒF@P 8‚ ‚ ÿcí]Ø]pŠ£%i-î2w´$ͺŽf‡Z^^,]´�W_}gggŒF#f³™ºº:kë%£ÑhmÍÔðX»×™Íf”J%2™ µZ�ÉdbéÒ¥Œx|ôM·Ù!ŠÑO<Áî]»Ø¸~=y„Í›66kŸ��]xýÍ7Y¼p!ÿù~6Þ>>¼öÆÖî(/½ú+~YƲŋñoÓ†§¦NC&“Dt§N�tˆ=‰‰¸¸¸�0x»w'²;q½z÷,Ý8¯?Nö ƒ‡»éó:tø0víØÎ†uëpqua؈‘MÎ÷Î{ï³fÕ*¾þò Š q÷ðàÑ~ýnÙ•( 0�ƒøþ»Y|ðÑŸ[\|ÀÀAlݲ“É„L&³ÑÃÃMÖS]U��½½5Øl8/V¯\�½FCkúõ@aa![6Z^Ÿ&“ÉÚMuü¤I·Ü‡„!CØ´~=)IÉŒëqn�››KUeÕ]�ø¶{×.²²2­¡ÑÜÿü@d‡(ºtíÊ’E‹Ðéj¨¬¨@.—sæô)úh P©®®¦²¢‚à�öìÞÍø‰ïj_š{^ÜŒ��½ûöeÉÂèõzBBC‰ëÜÙúnX¿ŽªÊ*||}:âÖ£Gªíìps·t©»±ÅS‡¨(Î¥§óíW_âææNlç8vlÛFzZaáá“•‘a­Ãv£+ùùäææZëËx{{3ýÙ�Fr.]"aÈ�úýVâæk®ÕÅ'�{.�zb4­ü[‹ƒñ?ÐÐŒÒl2a41™Ì˜oøðf2]û@×1$@4AAø 8R’ƧI ðV»2«ë›-ZvæáQP[Æ»&Ó¥…ÃóòòÈÊÌ@j†Ö­[agg‡\.·Öfª­­Å`0 P(P((•Jär9 …ÂÚ2¢®®­VËÅ‹—�*äá×D‹ ‡Ýº5«YñË/ô0�Þ}ûâíãCaA§Nž`øÈQw¼ÞãÇŽñÕ¿ÿ�™/½L·=îz?kª«1›Íh~UÇá¼ylÛº…ÿûêkÜÜÜîz}………xzzþ¦jÐ^ºx‘û÷ßu˜"üºíIL¤ÞPÿ@×Tº[¢%Ó=òú»“>z^ÞÞâ`‚ ‚ <`º¸‡éÒŽdíf�_ÍÌ�æ³Î¯¦ ¶ŒH—v- ˜L&~~~øùùa0øÏ÷ßʾ={pttÄÝÝ¥R‰D"ÁÁÁ¹\níNWSSCAAZ­–Gzõ"%9…gž{ÎZ¼¡6Ó¯É𑣈hÉæ�˜=ëÿQQ^�ÆAChXõõõwÔuçBv6»vì@©T¶¸ŽÒÍ\_à÷×â䉜:y‚ àà{0÷eô6Ax˜™Ífôµµ$'�eĨÇÕ�U´dº ŽÎJf¾>™„aCðÒæÅ+Z2 ‚ ‚ДÌÊ\Þ>1 €~�o4Í:¿šmy–º&ŸÇÎ$ȱU‹?—ÜØ’cë–Í F4 …©TŠB¡°)®×멬¬D.—1pPÂm×)4íÿ>ÿœ‹²6r$ä&žö\\\˜þì ÂÂÃÅ„û ¦ºš9³¿#,"⎋Î?,DÈtÂ¥ÁÇâáé)ÈD„L‚ ‚ ÜJC·9oµ+ƒüºïn­Ó”[SÄÑ’4¶ä¡ ÖR¬¶¥ÝäAá·J„L-àÛÚ‘_š¾ýûãâê"ÈH„L‚ ‚ ÜNfe.?em"Y{á–óEº´cZàà·`A„ß*25ƒ[gž{e*�è�³‹—d"dA¡¹Ž”¤q°(‰m6Ez˰óž*gÚ»Ðݳƒh½$‚ -$ ß‚[g^~ó9úô{ôW7‚„ ‚ Âo]÷p$ ‚ Â=$B¦&´�òåÙ—ž¦Gï^h~…#H‚ ‚ ‚ ‚ Ük"dºN‡N­˜þÂTéÓ{{{q@AAAAšI„L@ÇXf¼<�î={¢R©ÄAAAAh¡ßtÈÔ½w(SgL¡s×®"\AAAA¸ ¿É�©×£Lš>‰ønÝP*•â,AAAA¸K¿©�©w¿H¦Î˜Jl|gärÑSPAAøu9—ž-‚ ÂoHhXÀµ?wœ´ØÇu@ãªÆ®²yy gwtŽT—ÕRs<é�y�CFÆ3î© DÇtB&Â%AAAÜl‚ Â=×âÄE€[+ ;;*ã¥44šz_ÅùØŸ;�ËÑ]8÷í@in5úóÿ»oS†�îÆ“ÇƒL&϶ ‚ ‚ ‚ Â}"qs�5×êŒÍšÙ>®>Õ);“ò ·œ×ùÀf<—Í⊦í½UÓÈ'{0nò";F!•Jųü_”—s‰};·¡«©ÁÎÞžž� ÀÏ¿Í�Ÿ €ƒJ�Z)C&‘ˆ,‚ ‚ ‚ ¨f·dR…àS}‘¼™QsÛùË{$Pïî�߬�È ø¯´hš0µ?��CXD„—þGʵe\É˵þ¿\[vÇ!“pÕ¨PÊÄs)‚ ‚ ‚ ºfß½»µÒP4vf“Sðë#ñÿ×›�þ^CÑØ™¸µÒ4š¶zõ·$$ôºéöâã£Ø»wQ³ömÒô�,Û8‹÷þü‘‘÷4`úò¯¦ ?¯Ùó_ÊÎâëO?þÍœ@ƒ�ý»¶S¡Õ’žœÄ‘ý{m¦Ù¿—ôä$ÊËÊØ»c+ƒ¡ÙëvP)DÀ$‚ ‚ ‚ ‰fµd²�ë€ÄÎî¶]äšRÞ#Ç£»°�ë`Ómîÿ"7·à¦Ë¥¥eñ»ßýí–ëž2c0�?9†à°Ðæ€zùú2jüäßÌ ´wûΞ<ÎÉ#‡0™L�Ÿÿ²R¶¬]‰T*Åd2Q__Ïc C›µnµ²ùu´ Ö­#¾KüZµ¢¦¦†�ë×ÑoÀ@\]]Å+]AAAî³f…LW5•ñ�ÞñF*ãEs`'5×ýíÃ_â‡~aóæ½<ùd|ðŽŽö¬[·‹wÞùœàà¶üûßïÓ«×Dž~:„N›6¾$&DéêDT§htº~þî.dœ§]põz=} !8<‚ý»¶³wÇ6jª«ðöõcìÔgðôö¡¬¤˜• ç‘s1©TF�¾�Ñè2Ï¥±fÉBª«ªˆŠ�Ãh´´¼)ÈÏcÉÜ9Øk4äå\ÂÓÛ—ÃF²uÝ*´¥¥ôèÛ�G†PRXÈê% xåÝX0g¾­Zsìà>êë뉌Že三¿š®|åÚ2’N�h2`º^ÃôäS'ˆëÖg—Û?Í­Ád0X¾l)ùyytíÞ�šš-˜O�^/ºM ‚ ‚pSGJÒ8X”DŠ6›"}9ž*gÚ»Ðݳ]ÜÃïù6‹KÊ‘H$Ø~ÊiøÍŒùº¿˜Ìf<Ü�Å%‚ <4š2ÙUS}Ç© �Æu˲&§……ð�¼Í AÏRVVβe_ðÜsãØ»÷˜Í|S§>Îïþ•¡£s:ù8­Û´%ªS4–/ÅÝÓ§ž{‘“G±ìçÿÐwÐÊJKظj9¯¼û^Þ¬ûe1{wleôÄ)lß°ww¦Ì|mI _þí/tíÕ¹BÁüÙßòÄä§i݉íÖÚt•Ë˹Ĕ^&´}$s¾ø'¿Ìÿ‘×ÿðg*´e|ó�¿Òó±þ�ßñCxù÷`6›ø÷'"*&Žàðˆ_ÅÉS¡Õ"—+¨¯¯»v®ØÛÓoÈp|[û“9‡ס«¹/Êå *´Úf…LÍÑ0ååå1aâ$œœœ¬ÓħžÂÙY|0AÁVfe.?em"Y{¡Ñ´"}9» N±»à‘.í˜8˜ ÇVwµ=³Ù HЖW²jÍ^är9F“©D‚eŠ…É `3Èd2 OŒî‹‹³`F"AApÍ ™äå%Ô{øÞñFê=|‘——49m̘A,Y²‘sç,…ÁgÎüG›yœ\5|ýíw¼öû×,oþWr)¼’ÀéãGy÷“ •J‰ëÖƒ-kVZ–qr潿þG'jª«‘ÉdTUV0dôXT*R™Œúúzd2µ:W23ðmåO‡˜X<Œ½;¶Z÷ÃÑÉ™ö;!‘H §¾N�½Fƒ½FƒFã@UUe£Ç×1.�ƒ�Á¡èt5¿š“Ç¿]¦Ï`Þìo­ëùØCÂ,�7$ŒÚGulß°Ö:}Âô¸¸¹ß“í[¦Ü\ÆOœ„³³3‹æÏ§®Î0¹¸ˆnr‚ ‚ Ø:R’ƧI ðV»2ȯ ñîá´²÷ ·¦ˆ£%ilÉ;B²öoŸ˜Å»&ßu«&‰RR²ñóñ¢¶¶“É„DR© ³É„É 2™¥¼€ÉdB&“¡V»’œœEÏG:b6‹çNAxðÉÿ×;Ъ•ÉÉÖßÓÒ²ˆ‰iOII1Û/#+=…üÜËÖyº@Õêt kˆàèìby#—JÙ½u3gŽÅÁÉ•J…ƒ“e%E¬^²�êªJ|üZ#½Z\ºª¢7�kG.ÇéêúÔööÖo�¤ ‡ka˜ä&ݲ|[µ¾í<3…Ri󻻇§íïž^7̯º'Û½1`rqqaÑ‚"`Aá¦2+s­Ó¿ÎÌ Õø³©½'­ì=åß‹YçW³-ïŸ&-àóØ™wÔ¢Él¶´@*×V°ßQL&R‰‰T‚B.§¼¼…BŽJ¥¤²ª{;;är9£ ¤2)Q‘ípvq²®ëAµyã/\ȇþ AÁÁ÷e ²¶²·ð Ez-ž*zyudràÀ&çýçgŸqöÌi¾ýn6ŽŽÔ××óü3Ó1�òÑÇŸÜr{y¹¹,]¼˜ŒŒó ZµjÅ𑣈‰�µÎs9'‡¥‹“��…L*#0(�ñ“&ãíí À’E‹Ø´a=ïýñÂ#nÝ£áóO?åõ7ßD¡P4û˜dge±â—_ÈÎÎB©PÊØ ñ¸z_sâøqV­XÎÇû»u™£GŽ0oî\Þyï=üÛ´á¡¶tñb:ÇÇß·ë@Ue%_õ%111$ ±­1¼eó&N?ÎK¯¼‚“ÓÝ÷¤9tà§Nž@§ÓHÂ�¡hµZæþç‡FóöéÓ—={>|!“ÁÙEqþ·fRçcpv·ô),,Å×÷Z0IßþñÄ÷ˆeãæu¼òîd¥§4ù†ªR«‘H¥ÔTWa¯q°EgŽ%ó\¯ýáOØk8qø iIgXûà]K@åäBiI±uý:] ¥ÅEâU{«7ÞœK¶or™çñòõ³þ~!ã|£ùC"Úßõvu55âêæ†‡§'ÅÅÅhµeâ|]0(‚ ‚Ð৬M· ˜nÔ0϶¼cü”µ‰�£Ÿ½ã�©¨¨„Ó§Îr¥  “É©¨¬bð ^ôí�R)'+;—ÅKÖSYYƒZ­ÂlOOOŠŠz?!ÓýöÁélº8鵬ÌÙCzå¥Û>7™™DwŠ!;+ £Ñجí�F>ÿôïTWWóH¯^H%RŽ9Â×_ü›�>þ„6mÛr!;›OþüR©”˜¸8Ì&'Ž'9é]þò·¿ãããÓ¢Ç8vüxäòæ·HN:Ëÿûæ&LœÄÌ—^¢Þ``ßžÝ|ø‡÷ùðÏirû§O�äç¹?òÖ;¿Ó¯DZj*Ç�eÒ”)ÿ³}0 ,œ?�„!C­ëKßÇÃÉÑñ¾oG&•‘qþ¼ÍµØl6“yþpçc³®`:GìÏ�¦üC&ûs§Ñ9zM[³fË—Åük6¦7Žj)Þ­Zãêvû–(‰„�bIܺ™Á£ÆpúØʵeÔTW£¶³G¥¶£V§ãð¾Ý8\=ñjªªqusC"‘pöäqJ‹‹0 ‡G°|Á\RΜ""*šƒ‰;¯ö¡šr>5™M«WØüíèþ½ÔÕê­5™N?b3}ÓêåÀB"îîÅàèäĤÉO±pÁ|–.^ĸ ybÜ8–/]ÊšU«1j”(ú-‚ ‚Õ‘’4’µðV»6+`º>h:SšI²öGJÒî¸Ûœ\.G*“b§R R+).)cêS£4°þøK‚ƒÚУ{ÿ뛼óÞg`¶|Ö•É@.oþˆ»gϜ柟}F·îÝIKMÃd21tÄp*+*Iܵ{;;žyîyÒRSXµb/½ú]ºv%?/�wß~‹¡ÃG0bäHæþçΜ±|AÉ´éÏààèHuUÿ™ó=©©©„††a49{æ4sç/¸å~ÕêtlÞ´‘‹. ¶³£WïÞ´�ìÀ—ÿ÷/º?Ò“£‡!•ÉèÒµq�;Û,¿ kk“5´’µX�µõ¦-šÜÜÜÈ8o ™²²2qss£´´Ôzsþ÷O>¦ß€L™ö4¯Ìœ‰—·ÏÌxŽÒÒRzöîÍÔ§§Ð)6†Õ+W’ŸŸO›¶m™ÿóO�Fþø§�hpu�)üý“OX8oo¾óN‹Î“åË–ñêï~‡\.gËæM¤§¦×™^}úØÌk6›™7w.OM™J·=¬6b$µµz–,\Àëo¾ÕèvÎìÙ¼þÆ›Öým©íÛ¶’–’ÂK¯¾†D"aá¼yh4Œ=æ–ËíÛ³‡sçÒ‘Éd˜Íf% Æ×Ͻ^Ï–MÉËËC*•òHÏžDvˆ`ñ‚ÄwíJpHH³÷¯¤¤„Í6PU]…Z­fPÂ`||})/×2ÿ§Ÿxùµ×8¸?—/_fÌ“OÞÓû†=‰‰èëô 8Èú·C Õ–5js¯„…‡ß×V<Íq`ß>‚‚‚ïkÀt9'‡-›7¡-Óâîáΰ#ñðð`Ob"±qqßòz’š’ÌîÄDêôzBÃÃé?` r¹œœK—غe35ÕÕø·iCÂà!¨íì‡L2^Þ>\ºx‘¶íÚ–ÖŽnîèõ×ê;z”£‡¡ÓÕâîáÎð‘£È˽LZjOŒ À…ìlvíÜÁÓÏØä/^$ºSŒµgNçøxöìND"‘Ø´pÖìur<ù—søä÷op!3ßÖþ(U*b»vG*‘ð·÷ßbîÿû’î½åbf&I§N0üÉñ,þqÿüèädgѵW~™ÿj;;&Ïx‘Í«WðÉ»o --½ë0ä׬M@ʺ˙L&N=ÄÆU¿pòè¡F£Î)•JÚÝ“í»{x0qòS”•–²tñ"üüZñĸqdœ?ÇšU«n;â� ‚ ¿‹’ä×¥ÅË6,Ó°Ž;USS…ŸŸ'ñ�£èÞ-†ÝbY·~a!m8 ……%œ8™Ä�A½)**¢¾¾Žº:=wò‘&%9…î�Ì¢ùó9zä>¾~|ðÑŸéÚ­ºš2Ο§CTG›À&<¢=AÁÁ¤$'5»ÕÔ�ÒÓÒÈÏËãù™/2í™g8rø°5kP\\LYY]»wo´|ŸG%%9Ùæ óŒóçùâ_ÿâù™3[Ú4ÅÎÞžŒóç)--EW« ¨¨ˆ9³¿³™oÉ¢E\ÈΦ¬¬Œ3§O1õééL}z:½z÷!9ÙòzÚ¿w/‰„^|‰ñ'²}ëVÊÊÊîxßÖ®^ETtGžŸù"={õfõÊ�î ’“Î’™‘Á¨Ñ£ïùÓÑ1�HI²}îÏž=Ct§Ë9˜™ÉÂyóX²hË–,¡âjOœªÊJæÌþ޳gN3göwÌ™ý�µ¦ð¹ôtë2‹.´.ÓpŒø~6Ë/n¶-^°€Å 0ÿ§ŸÈ½l)?c4ùæË/Ø¿w/Ö­åç¹?6:·æÌþŽãÇŽ5û1 N?Fç.]îëu|ÓÆ tíÖ�×ß|“ÖþþØ··Éùšºž³mËž7žgŸ{žÂ‚Ž;F­NÇòeË”0˜—_{''gÖ¯[wÓ}ˆhAZZªõ÷´´TÂ#®}ùPQQή;xbÜx^{ã ¼}|8rø��A\¼pÁz^œ;—NXXã/-úö}Ôæ8\¹‚¯¯mcŸŠŠrRR’éÿ@¾ß6«%SÍñ$œûvÀùÀfÊ{$4šžñÅš›.ë|`3f�Žšã¶oʯ¼þ^|ýiþøÙÛ8»4îÞÔªM[^y÷º÷± �ºöº–âÚ“Hÿ¡ÃiLyYß~þW¼}ýP©Õ<ûÚ›6ËuŠïjýl×îMîopxo|øq“ÓÞúÓµ>ÛGÀÕÍݺߓgÌ´™gâ3Ïÿª>¬©ÔjzôíGâÖM¸¸ºQUY‰ÁPßø$“+pprB[ZB�¾ýP©Õ÷l<®M6-šÆŽcù²¥¬^¹ò¾¼q‚ ‚ððIÑZ™‰¿ƒ–HñîáÌËÚb]Ç�0›A*�ôsç9u:‰ˆðJÊ´,]¶†Ã°oÿN�JÆÏχîÝã0Ôë1™ê¯~¶jyËúƒ2bÔã ¶nÙÌSS§NrÒY´ee´ö÷ÇÇLJä³gHMNÆÙÙ…À  ìÛ` 0ºuã�ú•JE}}=G&4,ŒIS¦`6›I:{–ÊŠŠf„&éÌxþyd2ÞÞÞ´ïÐ�siiÖ ¬SL R©ÿ6m°³SS_W‡ìº–Ezí-׫éÁ¡¡¬øåK·–Œ $$päðaÀÒZ,¶s‰;wR\\l Ûbã:£qpà�·ßfõÊ•ìØ¾�-›-Ý-Û´mË‹/¿B}½ås¯»GãAmÜÜÜÈÌÈhtóÞ\öööÔêtÑÚß¿ÉQÅE…¸ºº6Ù…ÒÝÝ�ºº:k¡-ÓòÝ·ßЦm[N?NTÇè»z=µoəӧñðð <<‚ââ"<==qtt"çÒ%üÛ´¡¢¢œÊÊ ÚXjé�dfdDPp°µåMFÆy† Xo  $3#ãŽn ««ª().±>¾ à`¶l2Q\\ŒJeùrüâ… 9|˜ 'µ¨öUs9;»àååMfF¡aa\ÉÏG"‘X[míØ¾�)ÓžF¥R‘’œÄî]»>rŽŽT”W�ŸŸÏ³Ï=oó¼îݳ›qã'ààèH~^ÕUÕÖÚ?ã'N$/7—];vØìÇæ èÖ£AÁÁ\¹r…Õ+–óÂK/#“ɨ¬ª"0(_??:ÄÉÇé×Àµð5,ÜZÓ«9r/_ÆÓÓ õ=¼ÏkòuagOQaAAzúxÓùšºž¤¥¤…»»åõ:dØpôµµœ;—ޝŸ­ýýèÒµ+ß|õz½•ªq=á��Pö$&2pP‰„óéétŸö4»vì@£qà¥W^Á^£¡V§C&“QS]�½Fƒ——9—.Ñ. €Œsç;ab£õ7´ 2™L>x�³gN3nâ$›yìßO×nÝ�Édäûm³;ü–æVÓjÙ,êݽ© ‹iÞI�~Ïe³È5^;AýÛ:óÜ+SylàœîÁðò!‘ìÜ´žrm …‚qÓž½§!†pkãâqpr¦]P0Z-{¶oáBæµ:Lí‚BèÝN..\ÌÊ 8ôžïƒ‡§''?Å¢ó9—žN‡¨(ƌˊe¿�{ù²èk.‚ EzËÍvÃ(r-ѰLÃ:î”ÉdÀP_‡Z-'33'GíÛƒ1£³fíüý}ybÌ0Ž=ÅС�¢T*HNɾ£ò ](dWëû¸º¹Y>ü_Wï'.¾ Ö­åJ~>©©©Äwé‚D"a@B—s/“¸s'»vì@ãàÀÔ§§£R«1›Í´mÛÎдkpÛÖLõõõÔÕÕYKW4„ ••×Â)/¯kƒÅ4šxª\n$yªn^“388„Z�Ž”ä$Š‹‹ ¶mÅÓ9>žÄ�;I:s†Ôäd|||ðõ³Ô�hIDûH 9—.q`ß>¶nÙÌÒÅ‹x~æ‹”_k‘UPP€Éh$77‰D‚‹Ë�Õ õoÓ†èN1lX·–ÚÚZ"£¢x¬_››JwOÊÊÊš¬ÕUVV†J­¶z}-¿{ë-Ü=Üyÿ÷¿§s|¼µKÚ�ðôò"+3“Ë99ô}ì1Нֱ�ïÒ…“'Žãߦ §Ož"®s¼õÆyÒ”©œ>y’£‡£P*éÕ»7¾~~TWUa¯ÑX×­qp ¦ºúŽö«F§C­VÙ;{{t55¨TJôú:6oÚˆT*µ¾6î‡N±1$�=KhX˜M+¦Â‚ª*«X¾t©5H¸~ %™LJçø.�žÏ��P–.YLxx!aa6¯—¦˜Ífrss­-ì|||¨­­EWSƒ�½=2©ÌzŽ;99RXpÅfùÞ}û¶èñVVVàìâ|߯ãHܹ“o¿þO/Oë׿É{½¦®'••xz]ëÊ×¢egeQp%Ÿ¾Ÿ}Ýý¥õuuM†Lj;;<<½¸œ“ƒB¡ÀÉÉÙæü•H$:x�´Ô4(Jì5ö–kQH™™¨íì�+7 òJJJX»z�OM�fsí¬ÕéHKI± Ú�I>›+qð›õEcg6Ù¢ézÎ6ã¹lW4mÑO¢]�+3_{–>ýCsÝ“p·ÚñôK¯‰ONÿC�!–àÈÅÍ��ˆö6!š)€IDATSHD{\®~¨¹“õ�ÎÓ“çg¾hMÏyùµ×î{š.‚ ‚Ð,f3z½£É€¾¦–òò æÍ_Ê /LãÄÉ$ÒÏeЧÏ#TWWóýœŸ­-±[û·½o#wŽ�gúµlÚ¸�ªÊJbãâ¬ûúÌŒçP©”;z”¿üÂ’… øôŸÿB"‘péÒEë:.]¼xÛí(  ÕUUÖ›¥ÊÊ ¯©ù6Í{yudeΞ[N¿///œœœÙ²i3r¹ÜZK¥AûÈØk4œ=sšÔÔTúô}°tQúñ‡9téÚ�ÑO²Ã·”©¬¬ ºS'zôìIII kV­äü¹t¯@ÇÓÓ'''Ž>L×nÝl–ß“˜HDD„õ¸zûød)Y1ù©)ü0{6ûìØÙÛßñù�N§³yØ�¸‹šêjÒÒR­µ¬\]]y´_?òóòX¶d1¯þî Ôvvèk¯•VÑÕÔàèísGû¤±·G§«µŒâxõuS]Ue�\"‘0iòSìÛ·—�ë×1òñÑ·]gQQË—-½z.y3æÉ'o»LhX8;¶m£¦ºšsii<3ã9ËÍ·\Ž‹«Ë- t;\7rúõ¡O§Ø²23Y¿v �ããéÝ©¥— k#¥ßpM¹Û:Äÿ�:Æf³“ÉÄØñã1 œ”êªJ^}ý=̘�+dH¥`4Ö[îïƒÀ  ÜÝÝÙ»{7j;;"Ú[j‘þ®š;qݲ y¹¥‰¨ÁÙ�£Ú²Z‚Íå¼ýæSôìÓû®rááââæF�¾ýîɺŒf3²ßð0½‚ ‚ Ü;í]Ø]pŠ£%i-î2w´$ͺŽ;%•J©ª¬":ºK—þ„Ÿ¯/ÚÒ<6mø…݉;°³wÄŒ oO/$¨«­Ål6a2î¤$S³ÅuŽgë–ÍÄuìh _ž~öYæÍ�ËšU«0 ´ à©©Ó˜>c?ΙCâ®�„‡‡Ý)†Ó§NÞv;ý dó¦�|ûÕ—(U* „§gËž‡�£ŸeAÖVöž¡H¯ÅSåB/¯Ž· ˜,!S(Ç�kÔU®Açø.Ø·''gk­ µZÍ;ï½Ï/K—�œ”ÌñcÇððôdÂäÉ Jl ê>úø–.^Ì©“'1 DuŒF©T°nÍj›án¼qU©Õ7½YìCÎ¥KÌž5 ¹\FxûöMvoë݉7Þz›•Ë—³pÁ|$H áý>°+M™öÌ3¼÷Î;œ²ùù–.I ]6GŒ…D"¡wï>¬Z±‚ŸçþH]]Ýz²ù£j¦§§¡qphÔêïfZµnMQQ¡M£ªªJV­XÎ33žcÑüy¼üÚëlÞ¸‰Þ}úàתU‹�§D"aèðaìÚ±� ëÖáâê°#›½¼��½ûöeÉÂèõzBBC‰ëÜ™LÆÐá#ذ~U•Uøøú2tÄð[®Kmg‡›»¥KÝ�-ž:DEq.=�o¿ú77wb;DZcÛ6ÒÓÒ '08˜¬Œ ||šn­w%?ŸÜÜ\kÝ8ooo¦?;£ÑHÎ¥K$ ò@¿ßJÜÜc͵:ã=[a§ÎmxæÅ§éÞ³g“}¡¹U 4*¹8‚ ‚ ܵ#%i|š´oµ+³º¾Ù¢egþµe¼Ûa2]ZX8¼¡ÛNvÖeúôêÍŠå èÓ§3ž‘¾Ÿ…—·F£“ÉŒ\&G*W RÙ£RÙa2ññõgÖ¬/ ncÓè^9~ì_ýûÿ˜ùÒËtëÑ£ÅËÏúæk<ÈÜù êÁVjª«™ùÜ ú>öX£!Åï„Ùl¦¸¸¸ÅAÚ¯AvVÇ�³ÕÞ\§O�äìé3Lš2å¶Ý'…ÏžÄDd2�ôê%ÆmŽS½¡þ�®©t·îÙ;Á#}Ãùnþ'ügÑèÛ¯Ÿ˜„»V¥¯§ÎhBA„»ÖÅ=œH—vÔ–1ëüêf/7ëüj jˈti×â€É6t0áééÍçÿøS¦>òe+ 퀣“ NÎn¸¹zàäì‚�Z…Tb ®®…\Š��‰äþ4eº��Í®;P*•tŒŽþÍžÅÅŬ]c-û^ .‘H~“Óº5«Ù·gµxÙŽÑ�pvqæûïfqøÐ!qÑzÈôèÙ“ŒŒóˆƒÑä{€™Z�Žä¤³7­Çôkq×ÍDz÷‹dâ´ téÖͦ2¾ Üõ («Öã R VÊD×9AAîÊ´ÀÁ¼}bÛòŽ03äÖÝGf�_m�wZàà»Ú¶Éd"((�Ò²"êM:FE£P*©««Ç¿µ55:Ê´Zä2)µµµøû·¢¸¸{ûû÷ùzåòåä\ºÈØ lFGj‰� ƒéÜ¥ëCÝòäèáCìNÜE�ž=éÕQ¼PîBKºdÝH"‘ÜÕòÂÿ8X�Ëm ½ ¶t55Ì™ýa÷¥{æƒäŽ»Ë%ŒèÌ„)‰Žét_‡„–huÀl2a4Yšž›M&L6?Fëÿ;†ˆƒ&‚ ¿! Ýæ¼Õ® òëB¼{¸µNSnMGKÒØ’w„‚Ú2€;ê&× ¡‹[Æù üîõ·�IÁËÛ‡””T4 ú:=á¡¡TTUr%ÿ r¹�®†Èö\ÎÍd|ñå?  ¸/ÝåAá^jq:4ôñ®Œ�4ŽèØd2™8‚‚ ‚ ÂC£‹{8ŸÇÎ䧬M$k/0/k ó²¶49o¤K;¦&ȱÕ]o×l6agoOYI —.]ÆÑÉ™öa¤¥g’{¥“ш›»ÞÞžœ?—AöÅ\ŒõzÜÜ=0›Ìâ‰A Í™†�é΄)‰ì%¾AAAZAŽ­ø8úYŽ”¤q°(‰m6EzËðÛž*gÚ»ÐݳÃ]Õ`jÄ .Î.H¥Rärf³GGgÜÝ=�Ëå�F”*Ύθ¹{ —K1ÔéqtrO˜ ‚ðиmÈ4~J?F�‚°ˆ. ‚ ‚ ¿]ÜÃïm�t+(,*C.—âááFZZ&å:ŒF3a¡ATVU‘›[@^^1úÚZ""‚ɽ|™¢¢Re)A„‡ÄMC¦IÓ2ò‰Ç oß^ !)‚ ‚ wà áá¡€ �Æ…Ò7W*+kpwwíN�—§'*µ­V‹‡» vv*$ñ%¯ ‚ððh2=õl£Ç>ApX¨8:‚ ‚ ‚pŒ.\* ´T‹½½J•_ò È/¬Âh2¡±WããmÏ¥Ë%d_¸BMu%nn. qA„‡‚5dzáµ1 9œ€ @qTAAáh(7І‘#Po0"•Yþ¦±·# ЉT‚Ù R‰…BFhX$€ÉlB!“ÐÆf]‚ ‚ð ’¼û§O̓G £uq4„‡žÙlÆd2a6™0šŒ˜LfÌ&&›£õÿCÄAAAA„{àÿ»PH¬üðlIEND®B`‚icingadb-web-1.5.0/doc/res/icingadb-web.png000066400000000000000000014755101527064444300204350ustar00rootroot00000000000000‰PNG  IHDR€ßç» 7eiCCPiccxڕлkS†ñßI*-µZÁ R;µ’Vº¦H‚”ÁªKrš‹�')R\ׂ‚èâmп@WÁYEçΊ.Zކ )B‡¾Óà ïÇÇCªÔŒZ½±,­v?.®äëk×Âñmc&6a®õºçVW ö̯Oø°0¸e9¸^íE8uã>Ánõ»¾�LÔ(¯¼Ä|üïA‚�ÈT†¼�L}È�‰KÅeRGÖwqeG�¸E*‹ÙVs#˜ª¶¯\ÆqÌè)Z‘ºè¼e9‹ÎÈÉY°ä¤EöØg1ã’ŽP¤£kS즺†¾y¡ =U¡šXUUÓæÀÿÿ^{µSK ˜Êsà[’ü8Áø=v¶’ä÷Ó$ÙyFú+oÚ£}ç §’Þu³�™¾Ã«·£®ò€×w9ö¥[ŽË �T­Æ÷Zãè{&¯�! Ï?SºMá1WcúÆ_êgÅñÑß) pHYs  šœy‰IDATxÚìÝk�ÕåaÇñ*¦ (ÈmYÄD£¤*÷e—Û‚šcК[s«Mb,*ÁñÚš*&j° + Vh/©MšjL“,˲¬À‚Ü–Ûî2©Í­3N3�vÚ1iŸ<{ì9‡³ì’“L²|>3ßyN6¾âüßýæùŸÓþz�Io��Ä>;=vZ¬%¶­S¿ô¯ð»=üô‰ÕÆÞˆ…ãt(öÙX_ÿr¿›ãÏÀتXèa¯Çî‹õó¯ðÛ²ñ§o‰ ˆ•îÔ¼ñçÔXC,üý vMìÿ࿹ѧ2vslQlq§jÿ}flèáW¹…µ)Vå (íøS»7¶øxõYýúòwܶÿ�ñWo%�ÞŒ=+÷eüúãÏE±šØâîÔÿ™®/Ÿ(ttî]„«J:ýwìîØùbNlü93�?ÝmÈ’ïÿ°cüI ¯9FÎÞ*ßÓ\Ê!¨=ö¿гñç”Ø =úÔ½¾¼¼æÐ›iüéÜY_lýùîPuiqJR]l´/  û¯~[Ü“ú>ÿ“ÓàS¬·Ím cÿtG)G ÿ�=ìKèzº¦§ÐÏýhUzŽ×;îØ*fn+åôÓØœØi¾<€Âñ§Ol^O Oý`cxºÓð¿9Þ9«%T¾{k)‡ –Øå¾D€Üè�±Å=màÿ¶=�;=iÄíaÔŸí “.)éï}{ÒŒÍ#}™Ù¨úD AË^Û“F�éí÷´†q|µãÏæP5csÇù󨂸¹¿/8Ù +J7õ¼ónÝ&^Ñ|âÐŒÍÙ.ΞU3^ù÷ØõU3šNõå'ëô‘€†Ïo¥�†?t(\ð™=¡ê][{zû'gª:Ò+¡jzÓ¶Xµ/8 OõdøÑ´oÙ?컦mýÞwÿ_Ýî÷…¹+ “¾ÔP’!èìûÛÂèOììÖï?©¦Ø+i •Ó›¾V9}ÓÛ|ÑÀÉ4ÝÐÝñç­�?~ô¥WÿxgûÄйæÖ)áÚ¯?“qJÑ9w ã¯ÞÞ�ñ'žy7Ò4={Æ(¶éãù…Êé�}}ဨSW6ó3£O‘î[ñ@H¯…+EçÏÙ&^Þ\|üÉŽ>Ù3SÓáÒ”:ÕøZìã±S|ñ€(ö¹]_\—Æžb]ÿOO¦§$�5¯=\ø©Ý¡êÒ­ù72ŸãØ“WS*½.S�&V7†ÊêÆ†‰Õ+|ùÀI?-ÚsÛÖã @[N S—­ONÉ:ûómaÌGwd~(½ö-ÝÊ-�=9ÃO¬1{V7¦èÍ8}96ÌCœ´Ðm;kW§¡§«žoþXz\É;÷®ýa•۲7€r÷'ç·ò^ý–ibujcçþkbuÃ]ñüCpÒ @3›_L¿tÜÞû•—ÒhSò†× #on /Û’óÚ·üñ§°4þ¤3Õ*¦5´VLÛð'ऀÎlüþc[Û¦ü¼;в 7ç 7¥ï¬ÛÃ…×í U}\åôìTøÚ·"7€¦5)@­Š�ò`½~J=Ö2ûÕî @;Ú+Ãy‹ZJ;úÔtjþÑóì¹Øm;|(6=oŠ¥á§òPÅ‘6¤~{´bZý Ðë ñ›7>µ£­{¯�»äÉÕ¥€æ6lA{¦sn߯_±9�>G†ŸÊXzý[n�oþ¤3U*¦ÖÿÇ„©õ³'L]ßǃôÊ(õäÞvwgºîëOwkØ){tg(¯míÉ”†Ÿ¼âßæ·‡‘³v…ŠK›²ÃO‘×¾¿ýSŸ=§ÖgŠãOG»'LYw™‡èµЀÆ×[±ûªŸoºé…/u9à þûï…~»ï}ÞúµÜÔ=Ê–n.òê·â#PöÌ„†?Ø.¼f{ö5piÊž©4üäUŸ- @™Ö§^ŒCÐy W @©)Ï­kÛ|`Z—Ðå_þnÑñgèò¦Ðwÿg;ÆŸœúí»%C+{ðú·t¶ÇÒy´÷죯ޒFŸ¼béP}ÎǞ¦¬ëèg㧬«‰ç W @ƒ–½¶§zùË¡n÷ûŽ9þl98-œ·¨¥è4ð;ÏfŸb üÖ×òoÿ¤3ÝúÉ~ž_8ü¤Ê:ªÍvî­{Âø÷4~ý[¦Â׿MÍÜþIgÁø“ŸéåŸÄ>;ÕCôš¨c€ùãGv†'n ;Ú*Óø“ùüÁgŸïòõoý7Ô¦±§hCž^[äöO×ãOYm:�6ôáø·ùmaägv„Š‹³CPî+à2¯{Ëžë;F "ãÏ˱##PG[bS=H@¯€R-Ùf½°4|ú¦,­O/Ú›æoÊü>а%»ò 4ød â#Pç>ÚÐXùÃkÕ …¿ýS8üäüïñ9CPlòÚLã&¯}nÜä5#|ÿ·ònÿ¤Úc9ãOÎçÁ©ÅG+ÿüÞpáûs^ý–ÆŸxÆŽ@ñLÃO<�Œ?錭ì81¦råâØ™D × @©¡Ë7…Ówþå1 þëåüþOºý“Îoß2+3øëú¹_M¿û“F â¯}+~ qç®0ê²ú4uqûgUÎÍŸÂV†Ñ•+B€^�ç�±>H W @©a‹w‡kÿ6sã'�?§7Ï e‹ö¦á§ ³æ »o¼ª«(óÿW?TŸ€ oÿ´@‹ ”ÿyak8ç/¶…±Ó޾.gøÉ´:çÖOn+³gefJíŒ]ê¡zÍ”¶ð@òÌš0t鿣¯~›ŸFŸ£CPY¬|Ak€º¬nÎuáíµ-�~ÿ§pœ)�@Å”z¤5 ©9ÎÿDS;yuáíŸâ¯KÃO:ó{aôÄïžëá~¿ š‚¿¥¡ç˜¿ýS–ªm+nùtzºìö{–¥á'wüI¿ûSäРcõHnÃîk ̬O7âØ“Î"¯€«\ÏliŠ£Ï‘FM|é�x΋�î!~O Âѧpü)¬,�ÕfÏåwüu· †ÙåÈûíŸÜσSÝ€Zà%maà’ÖX[¦·¾F]²6gøIg*ÝüIÃOÎø“;uô£Øµ£*þå+ð+öÎ=Hϲ¼Ã#m¡@ Ɇr$ÙlÎAÑÒªSÊèt°Rµ"8Uk[Z°XFZ±ŽV°J »6»9I ÂYĘ)&œb�dßo çS8špx¼¿÷Ýßä}žç{¾Í"`‚×5sÍýÆaÆöûëšû~öˆdê;@Sr£¤ø#Oúî Ež=ñ¬Kª›?f~4Ógßd›ì̧"Pn»ý{ê&7âow“>¾¤�oëG3Š?}ªSÞb~ˆ?XØ“ÞRà)¾§”ßû‘Úú1[ò™;¸yS¾Ý³+hê7ÎVü‰�L¿ù£é©  Âö�sÀ9÷ºÑŸ]ë&¥íïä[YE/I… ñG\]u‰9˜?\Ø�OÀizáG3¹ý£ÙRhïûìRZyú©ÚòÞû�Ž?±mù¶�âO~ô¿õmït};:Ý oßíÆ~ümþ¼•$�^øUß²¹À°»ž€‹ßþ™bF(?6õ=¤ù>÷£¯ýS�hý©ŸvŠ? éøSÿü›œVØ/e»"�isÈiÜ„¿øi€t.?éä,UÝl~Æä} ø= EŸØ ü˜ ?šÍ�-…™Gžs³»ó”¿©€ÖüÛIyð‘ »Úbû)i ȳˆ? @²ëýnÄ—nqŽ*E oë'yú­<Ç~å ædþ˜àÝ@çjÖ�?=¿ÿcS*þÈκÔÝý¯Ç%м3ÎôPï¶:s€z?Y·�žš~°Ñ5~jM€túM*ü(Õ @šrÜû¯xÃ"Ð,sÔ w)¥µ¸£iúSô"�ÂOh–Ï¿üÁjwóW?W3}þ¬Š>²ç“oŠ>rš¦N½å*þøvÔöÀéU37è›wº±Ç¬Žâ�MÙc²è“k¨ê³æéæŸðÇ @z—6€"õæ�¾=ñG¦�Ùš¹ S6¸ïsŠ[÷Õòð³á”ãÝ׿=KñǦ™ÚüéqëGêß^üñ¾£ð#§gfuÿzÊínÜŸ]Ÿ€‹�¢O~¼ï±ï¿ü^óü�€Þñ”Ž@2 @åèSš‰íŸÜÖ‚¶nr“Î½Ý œÚYó웦ìÚ&ÃTžÁP‡�~« …ý¦Úû@_Xë&Y7þH 0)ÉkÌ&þÐ@ïLŠ·€zñÇû6€d¸ùS1-ðDVüø£oýÄ*þ(üÄÑGêÝ™ÚüQüñ�<ÀløŸ{ܨãþO(z@ò5³eìa—È<èí @çÊZ¨Kú¨9°¥Îé7YŠ>f€âíŸtüÑÖÏ´ôæ�ŒÏ¾eÝ*ü$œ yðÞáÆ|캷´ýc±§ª¾åc[ùÏ6÷— @oQïÍŸÄÛ?±ÍEðX?þèü[}lê;>èmýøß @ýSÑGvjëG&P"Y<Ú䆜|‹wÔ5aRøIoþXô‘~œæ˜É+ï3ùÒ�ðÇ@zÞJœ~“Qж¤â�fa)þxÖ{÷G&O¿™µ¶~Úýdÿ6½óoŠ?þù·úÛ?qšYØ·õ^7âskܸ#®¬€âø³R³4s-]bŽàG@êUŠÏ¾Uê EŸòlInÿ³5·ÖÛ?Q’éð£½û£íŸH >Ú ÞþÉ}4{Þü‘3»ç¬L(ÿpö]nÔÇWõjHZì1óðSvǘÉ+¾×4iÅ~ü@÷ô*ü¤OÀùñG³¹‚~4³B}‡§ßlšÉ³ošé䩤ͩ¤ð¼û£  hû'½”ØþQüé3«ÓÉA__þQzjmÿSáGçß‚Vß6›&¯xÈ"ÐIM“.y? Phýð£ÍŸ)ÞTôñ¦·ù£øã»k§ß4ÏLlþ˜A’�^ô‰�¢�¦ÂOoâÏLOmYô)E ÙÅ< ã~7ä+kݘä›@Š>�+e¼ý£øcZøévÅ:›ä‡@ê…µPWiûÇßúÑL¿û“'âOòü›Â�}kF[?šÞ»?¦¢�ô�ŒßýÉñ'óO¾¥"�â�œ-3×·åWnħ¯·†}+þÄÈ‚�kò"ЫóM›‹Ìƒù�€R[@vRoÿT¤�÷öO®NÀ•mMlÿL5õíEŸØþ‘~üéoþ(%â�þ-²ÂÄÉ·Pmÿ˜åð“»÷¿÷Ÿ“¹†ÿþ…u̵µ6€¢­› ?^R=ÑœôÃGO¼øLso~(œ€ó¦ì15›š²%7>ù¦íŸ^mþx§ßÊv@2“xtúMSö°ù£)½ø£oÏÄöOæ4÷/P·�nÐ×nuMºª?Š?ñ�¢Oäè<É‹«fæñ£'.ç} €?¸G©so5ç@O?þ«ðc&O¿Åoÿ¤�·4ý­ïÍ©Í3qúÍ‹?¦~dxî-<ý¦àã«ð:×þÛêû@_\ãšì,œ"P|úMH³j9üHý{ùjs"?€?È  0þDïýø*úÈóòÐcßù¬ûæÏA©ø£ð£é¿ùÛÖi†(°=‹Þû‘FÛ?ɤwlz[?^ø)�Ó 8/íŸÏ8ühʾSîq#>¹*Œ?6s½ð£9:ˆ@²qâr×8aÙë�–O·ÙÀ�€¤�ŸÈ�²¥§wdÖ�d%€bãð£ø£FŸÄP‡f2þhoÿì @� ?RáG¨~š+ãï7/s ßÚàF}ôêîè“«o/…çß —+N¨ºl›ÍÓlþ1?"€÷zŠõ6zÜŠ6dfæ¡G›@áæO*ÅFHêÍM}{z'ߤ…›™NÀ%7 µõ£)ÃíŸÀRôÑôœ‡M³xèÔu®ñÈËüp2Š?RáGsY·UÝhßÇòCx/ s5½Í}'Ã�Þü9oí6÷åËsƒ´ùã™I�|SŠ-¿û£Yë\[ §…ÈÛúñí0ýäé ß(~÷ÇßüÑTü‰�PìüÌõi¿Ï 9ñz |맘 ?å¹<Œ@¦�F�¿¨ú}å¨ñKùA¼·�ξÕÝÒöÏŠ�/º7ÞtnÍÛÝGm â�ÍVY/üÈDü‘‰Í3õî�ô6´ñcÓ ã�6ñ'½ù£èãmþÈtð©·¤øãÛ÷œ»ÜˆO\[çÝŸåf}üøc*™¯Z:Ï<€Àž€Î-9EVÌRô1½so¥í –uÛÜÔ[¶¹ç_yÃÍ¿ã9×4}syûG›?¦¢O¤¶4{>û¦7€òࣙIE¡DJ¼ý“ @YøæOzûGÎöÝ¿!(Øü1õí;àÌõnäÑ—kH3ˆ@Ëd°ý³T³ìã£Æ_ø•‘ã.Ü‹À€¼àoÿÔóG¶ì @g¯y:ßöùÀÜÝ÷½èžxé7r‡œ_ñã�gdxöÍWáÇ;ÿÖÃÙ·Úoÿ”Œ7€2³ø> ½ý“@³5e–ÏšágŽ¢O2Å.(æ¾ÕY}èä›\ãá—(þHmÿhæŽÊ£�ÂOÙ �¦ Ÿ�·äÏù‘ì‘(¶8ûfÚLF fé ù©‹qw<ö²»óñWÜgV<\ÿô[9üh&ã�ÔÙ·pó§>ö½+ñ'}úM߉ø£ EŸp*ú¤7djûG&â�¦¹oÕ…™ë3íWnÈgWÙP~,Eoþ䎒A²èSr‰¾—Ù÷P~l{HJD E… È�5ÐY @%žZq§¯zÒm}þµ|+èÈùZø©tk�GñÇ3~¼oé¿ýÓm齟0üØ·â�ì”é·f&ÞÿIÄSß»xö-±ý“Š@EøÑ4+ù<ðûwºáuU�~ì;¹ýG óб‹·�·ø»6÷åG°[ JzûÇŒÏÀ)ø”¾»CO€²ÂîÓo�Ó»\ûmÛÜcv®ùæg܈Ž.o¨A†›?åï¶Dü‘ @fbû'qöMSÁ'4KmÉÄé·,�Ò¨—ñ'PH6œq«yÔ¥ @2?ÿf*üHE©øcs±ÍÜ-‡Ž½àó}üøvüû#wõíS¨|.3+…­;ÕÉ·£>讼ÿ%·é™WÝ¿\û¸x¾wþÍ7 @R'ßjœkÏÃOjû'�êmþhFÁG3Ø*E ÔÙ·ÈÞÇŸ…fyûG.ÊÌbî7g“ô7¸Q“—•¶äÒTÒ "ÐÝ.þ™Í#øì†(~÷'µù£©è£ï"ö\Rk¨Uî<ù&ÿnå#ný£/»ÜîŽ]öP´Ô?2?ÁöO Ûƒóo2ÞªsöMßvz~ÿG–7}¼·âð“Œ?±óë d*âÏŸöiÛè†ÿc×8q™Â��‚³oæbME RZT�oÚœ?bÌÂ�üvçd[@fbûGÈL ,w@l–�ºÓCÚ*îŒÕOºlÛ«nÑ�Ϲ sˆ7€Ê¶%Þþ‰,mux›@^ü)LmYÔÑL¼ýãoýtúoÿ(ü$LÅ}§·¤Â�öMñ§0Aö={ƒþÑ˽ðSëü›Î¾iJE cå!ÈæóæXÚ›$Àï1õ›½ec½óo2½¤ LúáG[@5Þý3k³ëXÿ¬ÛúÂkîœuϸÁ×?töͬ³ùÓmýè»všáÅïœ ãOüöO N¿…1hî[<ÿ¦�ŸÔ 8¹HñG..æ€_ë=b¹6HÁGs‘§EMsA§ÍOò£Ø=6€´ýã…é…}·(þ(½à …ŸXÅŸèìÛÚ‡v¸uæí�ìp'^ù¨k¨€læß @Š?±²ÎæÏ ™EÛ?¦bOüæÏÌ<ôø›?ußÿ £O¯N¿ÙT’õ7ì»f’ûÍ¾ß úûÕnÔÄ¥aüÑw­íEŸ„ ~bŽçÇ ðî ¶~ @ÑÖOE¦Î¿™Š?2ó7€Zhªg€VuýÚýí¥»Ï_þˆ»õáîŠû_tG/Ù¢·3O�} ¶¼ÿ-}ú-3ƒ�›²þöOfzá'ÚRô©�áGzÑ' @Ñû?Éø³O÷”}ZïvƒÿújE…ŸTüÑé·0ü89¼iÁo†7Ío7ûñ#xçP›�â�fî”RôÑl–Ñæ�ôP}âi6$Ðñ€úÛ÷!wæ Oº»Ÿ|ŵ޶Í5ÎÞìúG?ž©­EŸÒû?‰¤³ošŠ>‘Š?šÁÆ�}›=mþô>y[?²R¸ÈSá'v±f9™K û~çv7ìèŠ@Š> @ ?Š?uÐünç==|ô¼Síû�ø±¼3¨Mß @~ôéòM ›qzÁ5¯Ûf[?•ο™Š>�?) 3ßü;w³›þógÝ/Ù�¶ê 7¨½â½û£iÑÇ AÚö)Ìüð#ãÓo^òœ•…ñG'àÒá'¶§ßâ³oR(0K 8þÈ%]nŸ »ì¿ËÜ€SÿßzØÒ`ëG^†Mmÿ˜óçÝe!è~°ïD*œV @5¶~üð“8ýfF'à~œ½ä^yýM×|ó67¼½RŠ>•èì›ì9U-ÞûùØE[Ü›^t?Ýükw\õ¿Ioÿøçß4å.mþÈèä› ãOøPxúM34?óñGs¡PŬýþOúô[ñ½�âO¼” … }gÝç�p�;tÜ’ÒÙ·…š2æåsØh›…ú¾lØè¹#ùá¼½'ঙmýælÙ¨Øc›@AÒæOìA^üÉ4ó  YëŸs?Û²Ým}þ5wò5�›@Š?­^ ¶€âp~¢7Ú3÷…«u7=´Ý-¼ë9wøêÍŸRüñ�ÔPì ©è“~÷GZèQü‰N¿Ùìéô›™ÜþÑŒO¿-”‰øSó'>û¦¹Ä,¦ÂOdŸæ_ºÁÇ^æE _…ïü›€lšså+Ãçü¯Í>ü€~·ÔVší¶´1�>¦BP4õÝÒ­â�Pké =_¾ê1×õì«nÝÖ[~4£íŸþ¹ÁP[¡Þý)ÌrϨ¸3o|ÊÝúÈ÷�›žrCgW¼$ë¾ù3#0Œ>qüÑwdúÝM™@¡AÒ”zï'´çð£“o¦·ý“vi—ëû_·º¡¼HѧäšñÇÂ�¶�r€äÐÆ9�=çKCgïÅ @½9ý&óäŸ}‹LoÿÈ8éôÛ�öŠûÞMO»§·¿îÿòy7nö溨! @RHfNNXð€ëذÍݸu»ûâµ�ºþÓS¨HÎô´è£¨  äöOdýè#„*Eêì[>ÍZñ'A^’µÃÏÞf>/ê²ÿÛÄ:ùz7|ââ(üh*øè{XyH6ÎqÒÐmæ‡ù1ÀoÙ;—WˆÂ0Œ[R.ÉHF©ÙXØXY’üVþ{;¶’Bn9®Sr‹Èe5å’²²`�ÎL8"÷„¡ÈâõÍù¼}g¾9ßifÿüêéýšÅìÎê×ó¾€ìÐ`†Ú+žºz¬èõ?†›?!=ý<Õ 8%€Ä+ßj'.iîø�î“¿Ô)Z;•C‰àÐÚ�AþÄe†e¼wš–¯iõüƒVÎÞ©Q¼ýä�œœÜä�?ZÈ�­V¿é- Is‚Û?šô ’?,~rk™×¾qæ=S ñ.°N©¼eƒªkÔÝ=êöϤ',}R×3_±Âø¨€l@œ�Çí¼ØÝ{qÔ!@�¨OÍ�Ié ΀JóÂ5í9_tòðM­ë·TÆò‡3h@jœOdãGü×ˆí¶€Î^~hôè•j¢,~üäO‘¸ˆYþ°ôQ⇧í]çÓúÉ¥¤½gÜi–?,~ÄÌWwXþ˜Å�©ý3ÇSOšü‘Ó}«öQeÊ”@ÜúÑîþdÆOYnÂëSH ®pd,7 “øá÷îÓR^ìþVÈJ¥(êÑÜ2·€â”‡PzBBä´mÝѹ�4›v’êg*Mk%ÿ�­$�Aú°øQo™ý›/ê>|¦˜óIí±ª°â�ëߊxªÛ?Þ{?,�üoÿ°øÓ¼.‹û?Ó?ÞÛ?Y7Ì­·~ÜÉ \ý¦K ™E-â·’Žªªûcï\ «,¯¼Ï �€H áŽ\½bUTâ­íÌ´vFiµÚ*µßh§_k¿e?;§�q\cÇ™vÊ U¹$„[  \”ˆ7°(È=ÜAÈ99’È…;‚¥Ö=›÷9{=¯{½ÏËqÙéøÿ×ú­ýœ“sÞœb²àçÞ{¦Œ} ´÷Ç H3”%�ÇÄóÁä‚ ‚ ‚\ ¹o�7Á÷ ‚ ‚ ¡HónëÔvo|¯Ýo?aH@½å�ÚýcÅ�TF�€{A¡vÿ (¬¥_­i¥ÔÑ34¶ú ™X«:€´ü©ñËUEþD½º‚÷]YRK×ÏHÐø-‡¨*zœî_\OÝŠ´Š …ˆ ½ûÇ/|ŒÊ@üêö4©Ÿyô›©"~LU8�p®®U�ü‰û°·;ΉSÎôÊl) ¸¦4-|¦úwþ8ºŠm5â‡ñª°¢ÿ�¢áøAAA� ý/÷9x� ¿W02AA.v´ªu\»w¾Ë²ç#†¤óGèZ–²âGª�içW>~d…O�zñÓÜP’ Ù諒Üô䲃´4.(hô›Úý3ÁV»óÇ  ÜBsÿ×죹¼hÊŽ#T0;éìþáÃgÝùã’?‚t9�{ü›Fä�¢4¦�ÈŸhðÈ79ë±o3g÷�Þù#Õ¢%Ð[;Î1µsÑ.êuÏËÄ�@"€D1"¤‹ü‘î%€ŠˆëXMî7¤°'þƒGAAäBýËý¥x|¯ ‚ rN´¢©Š¥Ïa†„P4&ãÑoºûÇtü8:€òâ'Ojš»çÕÑÊÔ‡Ôzêczú�fOú dD�Aïý¢¶úŸeô[þÄ(=úÆ~ZR{‚ž]ÓLƒKâÒ$òGòG ½ÿ'´óG΂«ëÇ9þ-\•ÅÂG¿éÝ?‚£óÇ)€,Jþh $ˆbæÆ©Ë/7Qß;f[<úM�9ûäKÃPSYa~ÊtÄø‚ ‚ ‚\h¹ÏÛ€à{AA§ZÙ<ƒeO²Ý["~2@ºûGïÒh¥¯Èâ–?ÂX¾Kž?¢ø‘34sçQº¾4®:¬üt÷�î2È2hj-=½ª‰ªbÇé±7©ç¤¨@Òý£Ä�0É6ú-\þ8(Ñò'hç�`»—Ê —@\�ÈŠ9‹ü”ê(ÌÌín·‚ú_Wªä�=÷ª:€lç�_þ0R'ìfFâ?~AAA.¤¿ÜÄ›€dð}’ÍôÆ� ‚ ‘ZÕ:±Ýò[Û-køC»·ö“,x5·4eä�•@ìþQ�?Œ@ÇeœÅ)�˜±R ²è»U 4z]+ínù=·º…ú׺Ä�"jP©@vç�õ>+A㶦™ï¥¿\¸�r»ü�?‚Èsv ‡ü± ®®Ý?1-�d÷×h¸ÒÌdÂÄOh×� ·u×�›œÒ½”ÿׯÑeWNñ#ò‡«’?C¬üaécÅ�fð„×ú5~ ‚ ‚ r!üåþj,÷G2ø>é„ ‚ IEÛ³è™ÍâçW �?. d:€Düèú×ø7®"}•ï« ×ø7…@ß\Xï�€»yF’fsWÑÆý§éÑW)|Ô/€´JwûˆŠ{g‹_™®ŸnÌ]/Õyh̦VúByÂ/€<\�?\º~2éüÉlÿ�»ÈV%|Üâg¦¹º÷G˜åAVü(òGnÏK˜*g¦óø�Ôë¯æÛqo Ÿe웫ûÇà�'ˆü¡¾ ß>ÃçXuÃAAAÚºêŽ79Ç÷É A¹² æN@;Û½¾�Ú-m –@.¤»´2•ÑâG£Ç¾iôœ_½.€´üá=?"€ä¶7úíÞEõ´\÷ÞŸUGÀÅ zï£Å�&GpÉ�•>æ<[a»\cß-~,•†Kÿuõ)˜!;‘>RÕý“–? Wf<õ4®‰ëã\ñ?Ì!‚ ‚ ÒfÐ`¼HÈ÷H„„ ‚ n" öe^fD\©Ýkûˆå³_ÄÕƒÏ"@Jþ¨Ñoj÷�£ûǟע'¨ñÄïéÁ… nñ£FÀ¹�ÞûÓkBŒžxëmn‚ïA¹èÄO$2w÷cÌ~>SdÞnb $´´Á!�m'Ðò³gÓý£�`Å�&jð¤Oø !EµT¸é09ý_}ˆñí¼Àño5iŒü1è„@Òý£�ŽŸ[f%iÖ®£´,q’î{¹>=N�€sŽ~´ü1?_]š ŠèQYUOSß;BϬm¦+fÆ}"èÜÈž¡ÈTAöþHP'+�{§øq wþè±oŠLÅ�¦ÒÒa¾@~:¿¸�zýE…?‚•@%~”üñsšù%Ó?IAAi+ÿ¸Þ $àû£3S„ ‚ N"ÜÎTGæ|@"ˆQHI F éüQ»¤Feï�íRc߸J�'€~ÁHº~n™žôÆÂÕ;CO¼y€zŒÕò‡ë8 ß6@‹TÐxÓÄ�>RF\ï[Ü@oÆOÐL–A#f¥lP™ çè7‘>¾ÝsZŒÞœ¢òúCž êÅÒæo–5RÙûGè±·ùã¡ò'sñ#há#Ué#Õ’©¤ó‡ÑòG çÎ=þ-óý?•¦és–¤TËK—gÖPŸ§Q?Õ¤º€”üa´ø¢œ“|þ üDAAAäü@†|¼!ˆúþ¸AA.ŒDfíêÏÌfùó‰'æ²ô™ãÉ#‚´zóœHj�28º~?=­‚cdÏ‹hûÁ�hCÃ)ºkn�Þýã늪pFø0ÞÙ +�r™^Å1zrùAZUÿ!=·¶…Vןd íü±õ–%qúÞÖÍln¡¼©^·�Ç�µôóÕÍ4qǺ«ªžºNQ(´û'Tþhôè7%‚òGªEíþ ïþÉ@®Ý?Z)áãÿ&Huÿh´Ð«f?ЗRß«ŠYøhñ.´ê=ðâó'\Ãäà' ‚ ‚ ‚ 绎]@ˆï{#—)€BA�¶�ÈÌ÷:Ef¿ÿ,ËŸ“\‰±bvæ¦P¥ÁÝäç@¶óG�|S{t�!ß »óÇGïq1úÙò&¯¨b×1º®$¡÷ÿ7HÄ�{¶càr…³Déò’Z½¡•�þ˜~úNõ(Ž*ùcÎZÉè·,e¾µ.iPK ÝôJ­woï�A#*S4zS+ýrc+Ý07™y÷�T¡ÄT+}ü瘥Lˆ2!£ß¦+ñó™#ÒGªê ìþ™kQ·ãߤû'@-P,êâØýã–?n ÔÉ �Ìä�T-4®½?q®ìþ™›©Ò{?Š€ÎŸö~^2tz~+õQ"È/|l —?Â)–@#ñ‹AAA�óQ Wâ͹(¿²™™ A�6,|Ü’A“åx\–Èû˜ÐkØ*Q’’•�lÑ×Í’jpË}�ðk„¿öÏ'„ô}öóëûE^ù®ìv¥Ûÿ�åÏ‘ÈôÄòÇ�t VÙp"¸î g*4 N  síþQÝ>rÎ÷ó¢@yÎîŸ4ãL•±o}Xà<½¢™¢‡~Gñ#gè‘%�"€ôÞF„cÏLM@µŸûvõô8�®n¥—c'hÔ« Ô­Ø K¹æM©¡ûV'�JwÍhiö:€FmMЕ b"~”²\Êܺ Eÿ¶±•þaM3]U‘ȰûGK µó‡‘š�b2ûV®Ä� HÑÑ/€æJÍ|ï�`G¿¹:„”`Å�¢Ã¼8å½Rƾyˆôq ¿üañc¸l̇\oÂ/'AAAÎG$\†7袉üCÓµL‚ HÛ‹ˆ…Sh8äH{&KU%z”‘ªÐ�wܧP¯CPבץ^«%Hì¸ÏîÛrŸ›öÎ÷�#� Tí•`s¾ý˜ÀÇ•lûF¤dû†<ÊÒh:ÃUÆÀq5ÒÇ ¿²ãß*Ó#àÞ¬WHÉŸeÎ ½ûG�A:lµ{¬ü ì2UƾE->ùãçê©qJ=C©cgèï¹k§W‘ˆÁÈGç� ÈÜVcß¾T™¢Ò]GhÚ{GèŽy)ï¾_®¥ÖùПڒ »×Ä•ü±U“[£‘¯ÖÓ˜­‡èG+PïµVü”0"|ä\z–˜©eREúîño9ZÙ®®±p Äh ¤»+®JüÈÙ!€¤&+4Vü„  —÷™º(Iyß^däOæ£ß´"¦Žéƒ_N‚ ‚ ‚œ�Hè�7é¢ùGÃË™ A�6 †pa!gÆ!2ˆq\W‹}­Ï)}Ú‡IýuëׯPŸÓ)Æäñ}Ûõzô{ê¸Ï!uÜ¿¶Hɶa‘©[ßÌšº•"¥Û#€¦+ dE�ÁH µÈ@Œ ‘?g�ìR£ßŒôzøyAP(¼(Pþ|çñQ�7ã'è'ËÒk±´ºþÝ÷r=u7ÂGw15–"SE]áïR¨{q �zm?-¬9NÏU·ÐÃR�èÁÍ ¯è;Û4x^,TÉÈ7á‹< nÖÞcô›[é®%õ”[ dÐ�?e1Eæ»rT÷�?šì ½?³˜ -€?nä’?zïOøîŸ…‚H®ŒW:��nW‰sfÙ£¤%Ðz&¿ AA9�ÐoÔÅ! €AÚpÜ2¤C°±¨ÇpUçÌ%‹¦ƒzœãl'Õ-«2¿Öçx�ä>Càû¤é '8¿&“÷K¿~–:ù‘É[ÆeMÙz†å1Ä2ˆÙ.Õ 2ƒA;d�cÜng:€^IJW½H PRËßè7…AJþˆzÖ Á!€TÐxSoн‹ê)�EÏ#¯5Ruã)ªàëÞ43‘–@Q%€\@n$ûúM«¥g¶6QeË!ú·èz¨šÐ#€fš@Ü”ôÐ�ïÆCÅ�æÆù)úùºfºrN‚ž\ÕDÿ¼¾™nZ� ý¦»€¢"2@‚ÝÿSk)×øÄ�TÆvü¨1pZe>úMÐcß-4)ƒ«óG³Ø�û7¯Š>úM ¦çeÿU†_P‚ ‚ ‚œ¯Hè…7ë‚ýÇÂ+˜ A� VtPR¢ƒœd¹…£%„›Žç\Ã!Vä¬^[‚¥ƒ[¦X×R¢,ôsgBEOýùõsôל‘@z%Ù‘ÅÏY“·4³ü¡È´m$ˆÏ†’4¥ž’Î@‚È[+Ì. Ã2Î È9Îv]*Hïÿ±{‚ù£Ð<Óä�?5”gÄ�©ÂxŸ=é³,q’¾¹°Þìýaú²¨ùçw›iGÓGô«õ­4`JLÆÀéÎ&êÚT5ð¹û”º÷Ý$}ó>*ªk¢™M-ôÔîzzt«@,Ò@Ìöõ›ñã@Ó‹ôÉLþ¸�?Z¹å�¦CxPøîŸEŒT%�´ÒäÝS)]@¡@~ñ#g–?Â=ø… ‚ ‚ Èÿš‚¸hÿ‘ðJüù#‚\Xb_K‡˜é(g}[=Öy-}=ý©-bÏB^Kæ·�ŸW½>Æý9×Ñ÷wt|ÌñùìcYüÜ™¸iGÖ¤ÍĈ¤zhŠtm÷K 'Uä�³Hä#@®ñoºHP(ªwÿ0"|Ôþ%„Å{ŽSuÃi6%‘áîÁˆžëfÄéíº“ôíÅ þ½?^6=A“·¡ Üôý¥�”W¤Æ¿ ~41¸HÐõ ké[kRôíµIoÜ“;ëiÚ�fšt ‰æ¶ˆñЗß1]@áH ;î­; �‘¯ÕÓ³[è>uù,lDþ0Òù#Õ Ÿ2%~4~T&‡ü‘³kïO&H‹®¡{JM™ó"Ÿø‘ª¥�ÿöâô}UuÞ¹CeœzÜ^ª»~ÌÙ1úM*cPÿÿ¬çš‹_R‚ ‚ ‚œ¯HÌDðƵù?÷æ L‚ È-¸‰ÇmÇó÷}]“Ñ·õÙUg©B‡L?‡ºí5êqŠL>¦d‘z¼û,��LÚrE¤hãKYÅ›Iù#⇫Ç”|ˆñº�¤+ÈPn;€AF½!@ŒSÙjP4Hþ„wþ(ühKãi:rúôܪê;!vN”?>J—O©¥ëYþ /÷�'xº³øùc‰ÒW*ëè•ØqZ;AwÎßGZuµ#à¬ðQòçÒb¾ÖäºgE’¾½†a$;€¾S�¤­ÝOËO¡_ïk¤ïí0#àFm7ôšé?nÔ9½óGÎ}X¾üŸå�ôô†fúÒ+uÔ¥ÌtÉîŸNB€ü‘³?J9÷ÿXñ£÷þXâ–9BøÎŸðño™ �ìý ”ñ8#�˜Že{¨çµE~ $Õ/~4Òý#h*~A!‚ ‚ r> a“�7¯Íþ™wcnb €A.Ø. l%!ÜòEßgÉ6Ø�»jèÇܯ![Ý—í�9êkq>ÎM¸€ —Iá×É>×u�ÉþííHùûÝ"…Õ£³&n:�UXM\ÉJ O© 5NP™@3˜ò]"¤ûÇ2Ç ?"�d�–@‚îRˆ ?‚íúñ�ó˜yé@wÎÙGëNQìÐïèáªý”?6*ãß[{Æèš’8]?=A7ÌŒÓ�å z§þ=Îãé.çûýò'—‘½?ÝYò<úÆ~Z]ÿ!m=LÃfĽÎ‘@Ò¤Å�_]·€»VûÐzîÚ�¢X=²%E³Z[èßk©¤¥‰žŽ×Óww°bn{«öœãß´bwÿ\ÅÂäÿ­:HO¬>H×ÌOè½?R}8öþØ‘o¶†J ƒÝõ£ª@sÝXñ#Uº‘=îî?– ƾ-öŸ­:�ÙÄÒçù°ñoZþhDÌWðK AAA�óY 72]Ûè?ŠÉÿ�›Ãtb.a.erÓr$�鞾ݕéÂtN?>[fú·Ñ?ï~òg„ rG¤‚[–hy‘-èûõãõÇÏu^Gª~Œ~¾~žÁý:õYá�Mª:˜ºßùÞ(BÞ‹ðdzøùÛȄꆬÂ�ÄŠ ÜýãC‰ F�€ @~ùãßäÇßdª–?ª È!€ÔÞ%œ£ß´ò:}ò™¼~€GÎÐo'éŽY)ñ“Ç œ\K×–&hX™@ÃYÝ4+Á@'è‡,€n®HPŸb–:>ù#Hè?%Fÿ²¦™Ö²lúÙÊ&ê=™%� éÎ ¯ûçëï$é~@f\г!Ind´5Eåu‡èúªZúÁ®}ô|c#6 ÿMуÛã”WúPI°ü.)�Ñ­,/þžûwõ©ˆ;÷þhr”BG¿Í¬ìQ@ªóGUg�îú2ßûc«íüѸ;lÍzÅH Ü‡^ңߤZù.�Ö÷è?ÓAA9¯�0‚x^Èó�/—¤NO¦7Ó—éÏ H¿ÎÁÿ J_û²´\éÃôbòÓR)ç¼™gD×5L‚ ÈEÒä–%9æ¶ÔP©’#�Ë@ø(œŸ§£zLG©úùýšìãÕ9èóäd𺴄Éñ‘­qFõÇÏÐ/V·Ð°Ò8IÐ 3tCy‚;€Ì¸pЭs<ÊÍ'~¢JYº2µ¨ŽÕ§ý'~O_¹NÄϧPî¤ùv’PÊŒ€[ˬ3<°Á ¯¾•¤Š=Ǽ.Ÿ¯Ç=ô�í úîÎýS²ž Yýߨ7K&¿ôÑègV)ù£ðíüéÇfý?^ÓD7±è謻~‚Æ¿I-w#ÂÇ¢vÿÌQ(ùÚõc«tý(ä`¡ ÒÇÐ>@þHÕˆÏJüH5túuµ7 N‰ïÌ’Ç)€XüÈy#º€AAiKHÊtø#ŠžNLW¦ÓWDÏÆeL/¦{Z ul÷ÇŠ¹ÞäÏAä" wèȇNJPtÊT^d"CôµÕó;©×aq>Ï>G?×ñyÕµì5ôs¯Wp ®pþZô{™·772vݳY/®;žõÂ:#~„ ÕVJ7PµWlà³´ (XÍ0XdåWÓT•$Èb;€LU¨‡'~bjü›–>ê¶È=îOñÙˆ‘?=ÆGi@q- �Âr£ª�ª÷Ÿ¢ÍOÑ£¯ï— @^ÐãË­º�¥BŸÉ1?–"!ú) ”Ï¢çýÖ�è]Þô«êVjwyhؼ8Ý÷îYdöÿð8#€Öô-æŠÙq”_¥·ž@Ìfgœù AOíh¤Â�‡i$wët-ñØÄè ˜’?|Ž’ìþ¹šÉOøùO2ƒ+ŽÝ?L£ß² Jüè±oŽño ·’î?R‡ôŒô1•QâG¡wÿœEwÕ3¦vÿæ<%€œãß´2ô}~I!‚ ‚ Ò–�pÓ_‰ L…O¦'3€|‘Ó‡éÆä´û¬1£ð.gF0@‚ qŒpè¬Ä‰’ö~…z¬Â-YÜ‚Dp>¡³Kª¸+þZÜ_wø9[ÕÎî÷R?ß-–Xú<y~m<ëùµÄgÓý#lPÈ Ç8©F1FmÄÕJ OþL÷ªa–'�Dt5pµòÇà—?éú–@,~öÿ|Æî-€Xú½ £ÔŸåÏ I,€&×ÒåSâtÍ´8ý|EÅŽüŽªjOÐÝܹ3¼ÜŒ|{§þ$=î�€KÒ-ó’t+ …s“Ô½(¸û§«Ô4²èæŠ$ýËÚZ–:{½ÔƒeN·IQº{y’PŠî[%@\×rMﺕ;~°”ªØë �;ÞŠ[ôŸwÅéÞ­,­*“ô‹�-ôï›Zéæ)‘?ºÈ-Dúø:€üܾ¤Ž~¼¶‰~ÄÝ@ßà?¿q%Ô¸?�á#g5ö-¸óg¾{÷�!éèrK ðño~ê©ã”]Þ. _÷�Á½ûGä� åø… ‚ ‚ H[@ÂÍÌ@&;d4Yg&�éáÊ@¦Ó5T¬™�_Å@‚ èñ â"Dbh:\ã.N:gz½ð× E�û9úkt½ý:9ê¶ëëÒädò¹Yè°øY‘õ›5ÄòÇCä�TƈŸqgw)Tü©1pJYì stUdÐäÇHÉŸ˜’?îî!Oûi”?ŽåÏ„õ+ŠÑÀâ  ˜'€†²ºbZ-]S§‚Y *Úv˜R<®pÛ!ú⼤éâh#æ°ŒáÛ·³d¹ƒÅÁU3d\ˆü™èawGixE‚Šw¡ù5Çè¯ßn ûVtÿ곈ë®kYþ¬7Ý?=ËbFí±¨wyŒFmKÐ(ÓÄÈpåâu™¥¯²t³õ=¹ª‰±Äº¤Ä +4±sJ Û^©óÄOw–7_ã?×ÇWô¤P—r%}fjñ#Õ'~ä\×»5ö-ãο$d0úͱóÇ  Ï!Ò�@Kê©Ûý•®®W÷�©ý~MÌ'ùýþc ~I!‚ ‚ ÒV�0‚Âtb"L¦73bçs��ë.ãâÒ�BÃä=‡BAüQòÇ-eLÕ·/‘³F?_ªâ×µõõµ�ÑRÇ}�pdªûšêµ:«p^Ãý˜¬)Ûúe�Y=µý˜Õ3Fü°b¬zA�íòÏ:%�ȵ H  í¦hºŒ‚3âGaw-ŽS»×ë o(ù#•Q]@2N¡�Kü(ùã@=XþôaùÓ·(jÐ$¦ØÈŸ¡S¹ ˆÐU%µÞþŸk§'häKû¨ªö8}pø#ÚÑršþvY#Ì5è6 ·³Hø"‹ƒ¾SdÜ›¥®!Hƾå²úFU=-Ü„ÊêZéûëX%‰ñä�ìº�»ºLŽª ߯ˆ³üñ  ÷ãt÷&»(ŸåÍwø=}qûaz�ë-/±Zï ý¦å�­3XUÄg�~stÿo÷Ó#+ÒÕ‹RJüH ÇÞ§üQ„Ê¡R�}“s†ò§ý"S�âG³ØrNùÃâGPÇiïS¯AÏ{¢G�|“³ûfä�=?ƒ_P‚ ‚ ‚´e$|‘ùJºƒÀù£0„¹�ù³4·Bý7{g$IuÞùÿ÷²»ª»º{ú˜žž«çžAÀ !�d‡�¬pXZ„εåˆ�»«Ãyë]ëðjËG8l!lY6(l,dBÆÆ [f8„4ˆ‘ÄÍ 0sÏô1}TWwUæççÖ{ñ²¾È§ê ðýˆdUæË÷ª^V©Eýø^*Š¢(±eV…˜¨DžWä±–â'žJt_|¼J\JÅÇ�‹¦¸ÔŠõ/DPÅ'ú¾âsžÿîsÍ=¿eþÿÖÑäš{8—yù“x dP>A…ûÙ­{—@r8›ydå�[ ÎK !‚D�@>¢hŸßÊ* +€žåA'}D¢(ÄËQ´õÚ{þ ýÉŽy´òË;y¥•?k®û�ìäõ¾èkv)8'€6ßð,ŸuÃ3|¥ý±þXµÁÛÍð‡¾½Ï  gÙW]póO—ƒëûòŽ&ù³(È¿õh^þØ* ùí¦Ÿæ÷ØÊŸÏ?~�o92ÊðôaþÀnù·û­²´âÅʾ> Ÿ•7îœ@W>ì�ÍcOóê›wÎ  Š»Ð*[ô±»ñWã?þÉ(wý¥¨üñÏ�ü±qÒGäúP$ïû³ÉJ“|÷ _a+¥–Û9)@%!Âs)~\œðYX�—>á±?v?R¹|+lãHÈ»òG  �zŽýÊM ­þ±qÈmmž°U@¤¤åÕ‰Ñ)PEQåeN»M·Í€M�MÙmWÛ¬²éÒ)z^›>›u6Ëm*.ý6½66ú/’Š¢(JžÔ&³!vÛ€Û9fdÛÈb �lÃù­Øorí�CÆC‘1ä¹&ÞOh#ú`Ñ7�éçWžg¾÷ø¥æ±=Û(Ëþ�˜û‘1`ãG£ÌugÌü~Ÿ0’k›eC^­b˜ˆYì`(œ›®ÿ,œ7QØÚÜ~ˆ×êŸ Èe�Ȉ 3!›ÃÏî¥Pø�0×`˜là®ÝU`„ƒ(¼_†€Ü÷(ô;{á&ÀÃ,úÇN·9GÿD)Š EQEQ”— dÓáÅ"'}',†mÖÚ,¶)ëÔýLÈ ³¥6ëܶÝFÒæÚõ»m¢S§(Š¢8ðHé !b¼0aÑÖ .WX —@T¾„þås¡LD؉ì?w~&Ú·|�b\9¶|/ÆüpÇFsÏÃߢ¹úmœÂD¨¶ `¤la'ƒR'2þÙº+ßá11ƒ‰œl’©‘zåÍI8Æb !{˜mÄ�øY¡1�´~ÔÊû�7Òq0 ÁÆ ¤6‰1ÈÀó±ÌoÇk)ŽL7�fa*îÚ3�Ë¿µµ _ºx Þ³©eC0»t•Ƚ†¸,a ó±´7AG)È´©zŠ»÷W±Å޳ÖJš+Öv¡+mÂNôeyö@9W‹û€Þnÿ<´ß3ÙÀ=g°ýØ,>°¡W®ïFo)|=\,=ØE¼¦æ�SŸ³…^Ó "¼k¸‚ÓzÛÝÇCô…šš0µwï>ÿ1œÞ_Æ5-Á—w‚ÀX3І„ÄÀnÜU‹?BhÎÀ‘™ ßÞ=�û÷Ì⣧õá·ÏÀŠ®61oaºŽŽ1¦«‰ãëW™Bsƶ™Áµ�ŽcºÎ¸úÌ>\´¼mÆ„ú¥¸e»>Ø�_t‘fRƶ£5Üs¨†•öµ¿}EK;q�Âcgçä ¢½<,å�”@TP‹Wt>´‰Œ%!·?ÄÏ‘�è” ûŸ=o,Æòe$Îa~Qÿ<)Š EQEQ”S•6·¬[¿ÏŸv×ϰ+œ¼Hðê¡d3à–ÉÛ`³Ì¦ç…Ïk¸Fú‘UEyUÓ�•*Ñ%ÚââÇ´¨Þa߯mY÷ÇZ,Ã&Û˜˜„‘ûŹYl,y´EdîÓ5cÅÏGiß±G(Í~†J$~ä–d ’ò†}¥€´&쎋%â‚Ð qø><¡ (ËWûiÐ$T¢Ët9H\YÑP\™–È™76gu lüp¹)¥ 4ªs)Fk™+˜ŠÁ˜³ ¬vH¹˰j �Å )j¶“8:‘aºÆ˜i0nÞ9‰ÿóÀQ ” Î*ã’'�<Ž2js€ôë†�0*(þú�Iñ�§'q羪­êć7ô`i%MÆIÊŠ\ˆpÎÞjÿz`cõ o±2nso 퉒DÁN„È5 0˜DEQ‘BöP!�§­ 1ŠaÄõ83²¡4†û…€ m½ÌÿcñÛ%`Þ¨žE�¢(Š¢(Ê©€±é¶é{e Ùtæ$É&›5®:fÀI�¶—�è)9©µØfEòrëÅ^®O、(§œøi·¹ÀoÛí{mztV”“ÀdE‹0òî4�M"$�‘B¦è¾@± £H[Èã1ù#D“� ¢]R$¼äãV¢Ì<´sØlÙþuš™»‹€7DäBHÊ”€!�?ϘÜ9¢2Ço‰šå#~ÿb³/M »óE;I|üpDðp. ÉT=ÃuÛÇð7�Ç_]¶ ×¾c+{d`Ì¥C£“á} yO/^ÄPNèHò"‡8ׯ�?ÇI×®è(„æó8w\®Ææû“˜ÅëaBPåû£ÈLÇ(Ž)Ü?%eÆõ?>Ž‹n܃cÕþùý«ð‰súa9¶¯¯U$²srB#ežLá§b¬–áoŸ8ޝ>2†·o¨àúw,Ç++ð?Ýû¾}õ�1…Ó;_ý3U“óÿôDŸßv wïŸÁÕ›{qõY}XÜ™ì=œ¡ž6÷f`íJŠ/ÉG”û€2R¶YAóõ`¿þšE8w°Œ„Ц˜\"DDPµža¼žæJº¼D ý3Íç„aÀ÷S$^P¡ØŠ,›û#ò,Tp\,56 ! Õ³œ}HÕ½Dÿ4)Ê«ý?øŠ¢(Š¢œ*t8™B8µIl:]ò¤.™�|^tLÜÔ9ÿÕs,mnûr\ίn3e“éG^Q^Tñ³ À»�À–´Û\jsŽm·À:cÊσ*0+–-¬/ˆ-¶TôóeTª"r‰]Lqû€¸¯O\äÈþü9Š¿×øØæ_|%ê�ß%¢á°äšÛDo YIÎÍœI€ß/^1Av¬ƒ�-þ£¸?|[r’‰ rI^ެßFÔÔŸ|¿$žÇf4 #æ*â ŒÑZ†ÏlÁ_=<�/\8ˆ{?²_|`·îœl²�ìÅ£¸È©fèḭ́¨Ã€]³=uüù££XV*áÓV2=³¾_ùÉ8`éï2¨”  0WÁîŽ.ì:’¾Wßʰ¨Š­¨¹|m~ç�‹ñÝ}Uܹo{26¬BÓùkWÏ<¤©èSÀáÚÏWMm±}þdd¯¨`s÷šÁ®©:@ º›–|ÝŸ‘Ð�Åa·#*d$LTÜFŽG²‚-À‚XÅQ�?¢òGÀâ!F~÷B?�MKç�s–�@b2ä4ä—pd@Š¢HQEQå%!qU?í¯€÷‘èålI»«ªÚÔt:夋Ÿ./wК>›÷Ûì¶¹Ãæ°Î òiˆŸU}8&YÄc–çDe’P1Ñ"’E�x-AôÄd•8Gî—¯‰"ï�’{9S3_Ìùç–�²…„xYŽSØŸøþ¨X$e,Þ åÚ1Äp㈻á1à”ï'´5&<–ò*?&‹Š#ñ¶" L¼Ø!…#�2!K1ž™ÃoÝ�_²åsoį�Õ‹Ïßw�Í]‹ z,òZ9Cxn<ÅiCí ÀNo÷Ì>ºå®Ú´×^:„•ÝmX?؆É4ƒ¼¼Dd›Ì0Ysc·`º‘áæ§'qï�\¹¡Ÿ=w1nÛ7æ:(÷ÚÛ�ÕË »öqÁ )'æðp-ÅÍÏNâ5½%\´¬¯�-at.�¸ µÃ·"Å�à –Ç(âIúgç✓‹#¿«Rù>Hô¤‘¬ÊŸŸõu"ëï‚™ƒ f‘Ã~ÊWi�¢èpŠ¢(Š¢(/>�n‰µv�ŠWä¤_¯J3E9iâ'±9À'£ò'ÎZ›«m.·©èl*/�Yäˆ-}=¦èÑFB.Ñc¢ŽôëcÄqÙ¶õø¡{ýæGO%w¶ò5EŒzÊ80Ñ.B¹�0´(Á �ǽë(þÛëûpÎP&ïÄrS¾ëh A^Pr°ÚÀWÇMVýÒò.œÕщî25�¬¦à²¢Õ3q óÔñ9ÜôÌ$ÖR\º¢gõ—Ñ‘ ŽŸ½¢o ‰¯ü|äù äªè+vbî2³˦² Ä$süušOžtIwô‹Â`Ä`ð þIR@Š¢(Š¢(/m¹ûç�NÇ«úsЫ?0+ÊÏ]þœàؼæüDím>eófýwGåP‡C.—%�5þ¹l'ŽËs)$¾Ø˜%ñÇeâ\!�B›ÈXXÀý‡@‡ÇËÉ?ÿðS´d;5²_Ã9yÅ$Jó;!'{ –€#Röä«!˜›ß]š>í CM ”±«¸Ó'ER†p\‘ïçð zâdˆ ²§Ùøó�á’oîAÆÀ¿¼®>»%ƒ?È�U3LÔ2d¢`j°Ë ¯’àPµ�½µ9|ÛŠ¦×và×ÎèÅêžö¦[àŒLÙ>ªuN,æJÎÇ£#³¸æG£xxw†3ûÊØØ[B)!0::+–@RÐbÈþç˜ñàѶ쯢d ®Z׃3ûK0T¨Hƒ€r„ �l&¡ø‡€üùûág²]Tˆ‰%á¢Pó–9>0‹9ëî‡ïeNþdAhŠ> ý¯E�¢(Š¢(Ê‹AÙf‘þ ˆâ W ¶He ¢¼`ñ3hóŸ|Èf­©¡5e›wÚüw›�:ËÊód6'K2¹ìY¤GHÙN}EÄ’Ü_,¾LEúIì‹´M¶l¿ÌüàÉ(M—=~ļœ‰¿bw@Êã­Bä—댅8a!†8?#ò¹ì´¹ª(+X&Œ�ÌÊ2±ô…2# â÷Êßn€!õ=ÄB”Ī38jØæX5ÃÿÚzùöA¼mMßyß*¼}MWÁêu\xùžK‘r¸ß0†°a0Á`OcßÔnxâ8¶›Åek»pÅúnô–îÞ?a­+d€FƸãÙ*¶ì¬!càµ%,ëJ@DX¿JNõó£Ú`l©á.+‚Nëmǯ¬îŠJ›ëT^’b1þmŠ»)šò22²Ü`ñäqè«5—9œïŸr[U>-äQÖS²)ˆFfWÕÆÜ$9 Òÿ«­(*€EQEQ^„e¿ºõ‡~%vo ½G¥¢ý6!CîD}ø÷QNZ­'æ�"KJ“˜_¼ÐaWÅôÈÑY|àÖýø“‡Fñ;ç/Æõï^ŽîRø(¨pɲzÆØ?ÞÀ¹Uûm aÓ�$fÌ�ñu+‚&æR|ð5=xCê�B±à㈘1jÞýØž »&çðäøúJ›ûJ0èí “.&3*BØí—íÕRܺg�Ù1.ZÖ�·.ïDOÉ„î¥Ô”Äí^\˜°ßúyiU±#v9EbÜh?RZÉù‘‚“ܶå2vRu‚DååÄ»}ùª þé?ú×HQT)Š¢(Š¢œîIÜ�û: â›Eº$œ¢,Xü¿LÛy ”ëÙü©Í÷mR›6×ÙÜe3‡ÖlòËËéÿ¦+'HM.éÖJòÈ}¢=XýÃBÀD+uäqŸˆ9�¯•Åëf!©`ßÛŸÜöƒkèØñû|©¨Æqb9HÜ£ÇÅÈê Ó¹ …¤™“/>AÊ0QØ�ÜRpR qþ�QðûýÌPøÁ»ÅÂ|ašûÊ€¡àuè«V !‘W áç ¸í™)¼ëïŸÃC‡k8gi~õÌEè+ù£|£UÆø Ã!sjÉPn‰2ãý£Ö`Ü»7ï˜@/ÚqíÅKñÖá HÜ÷Ç&@!Rþ ·{|‚1z˜n0ž¯cÿt+ºÚpÉYíèqVQCÍ‚…8.nØfÇñ:nÙ=�ɹ —Wð†�2Ú �IT®…AâP+aâ‚07A´D4/5 οÇÁ#‘Z›9"(?V�§ –S®”ÀÌnŒPT´ì›ßªûQ@Š¢(Š¢('Kþ”,·iÇ+‘,{Éò …lúìçf@¿<Šò3åÏZWÛ\nÓ‰Öì±ùªÍí6U4“Ú|ω¡íh�±9ßæ“6çhU§²@fEuLáϸ",žKLT Åå Ŷ-î8CQ!%Ç—çMÎ$ÉíÛþ =ù܃To\ ¢¶ aB\ýPx$C�06îÜf¹c �I’뾿C ׎¼`Ê —‚saˆÂ– *�”‰ª›¦ç¢bÈb_B ¾rT °x.3åj!ˆÂز/’Ëh9H'`¦Î¸öGcØv°6_tû{‡ñ¡Ó{Ðf‘(Œ=£ ÔS†!_Ÿáñ>�Áfe×XŸûÞ®{dï]ß�k.X‚M}%�—0â“7$ ¢žÙŒÍ¥VÍ¡ÚÖÀ†ÛqÅšnTÚ©p.åX O\ªÍ1ã‡Çfñ�}Uô” ®XUÁºîv�;§ðâQ¤ÊÈ#Ä¥”:ìå¦ -.ƒJÇJƸPêPÁõ“H ­h‚Ðß¼°1Q¸ÎbPá–• ú—ZQT)Š¢(Š¢œùÓ`©MòŠ;i 0¿tIÓW²(걟Ÿ%ú%RHñÓoó~µBkŽÛÜlóu›C¦mn³ù ›½hMÅæ—m>f³F¯Ž²j˜ÜÖˆjžè½{"‡ZT…þe­Eôe"}Éã”ÜñÐ…É]Û·Òlý7r™(¿Ÿƒ|ðOÙuŸe^â„ó˜E�ƒŠE £°ŠˆÂrqâ�åú!YyÄ.™�Yâ½yI„‹¸zñ{Ih #¼~=¡fûAL�ò‚(H,?Íáü ç N¯¥þìÇãøä¿Æ{6õàï®X�7/ïlšKŸFìk +‡ˆ‘‰�çžc`yèH Ÿ¾ï(î;PÅÿ>w]:’ˆ® 0‰´kwd4ÃÔtØ‘1p¬–âõ ”Â'6÷ἡ$…ÂBŽGXÇë¶œÁ÷�ÎâôÞv¼myƒåD|#9rm#âÑÆÃ@�%�žv$o_ó ƒ€Ÿ3È  pSˆ7ª•%LÒJJ´ý±�P\8+ÌYøŒÚ08/�´ HQT)Š¢(Š¢üÜåÏ� ½,esëx²”^ôxZ¿Æ—³ª¨RxñS²¹ÀÇmÎ@kê6ßµ¹Öæ œmn°ù–ÍZ³Ìæ×m®²éÕ«¥ ΜM©¸Il Ñ¥Ö$‚Vm¤0ŠlIœË.¡ÿ¢8Ìý�­Kþþþ¿¦‰ê?RÊg±áä‹�-îy�¼ ÷ã/‡çò~?DÜIš5Ë!"°èKJ”ð(òšÃÍìeåQ�/<‡k›;_"” °¨\xXš:ù€‰sÇ ,ÛHH,£'*€äœçÙ~¸†ݾ7>1�/¾e þèâ! /j‡œ³Ñj†1›@Þ<„Ë=^eŒM‡v�Œqûîiüæ½GPKô‹Kæ«‚JD€„ ä�ïÙý,v3ÒJß94…o>3‰³ÊøØ½ØÐë߃èAšnQkçrp¦�;V±gªŽ ¬dú…Át&aÎYH”ÂʉXŽ®hÙA³®m—­„9½H¨pù7*¹õòo !à%iDQ˜?éºc�øœ2Ä2p¬HQT)Š¢(Š¢¼ºä�”!q’R4iÃÀ‡™à“e'3aœüøqI´)¤HQNmñC6g»åÖ.\`EåÃ6_¶¹×¦�çÏcN ݽÀ~δù„Í[mÚõê)°Í¬¸Ï·ø�‚ÄùrÙ7ŠÈû�h/ÇñíYŒ%*Äcñ>èéÝÉ-÷ÿ_Ú?ò¥éåMÕ"9#‘:pm‹îdäI¨¾ ýH�$+{Ü~j¾WÙ€Yö%Ï-;¢ªÈ½O×&Œî54?5ÒðÚ›àè}�hq¥°^KÂÄÅmØ»7·_Ü™äæ&"ºÀ.Eº‘šnŸtËÎI¼çŸöaïdßx÷ |âì>tµ0žÝ£)ê©p$¦Ù=íI‹*zæ+iþòñãøÂ¶l(ã÷.Ä9K¤ j6Wû�3³~bë×{§øÚSÇñ=+µ®XÝ…«¬hêïH Vé#¿ ÄVUã M2&율ãÎ3˜Ëo]Ý�×¾qIh/úŸ­,¥¥ì£ÍÀ¼®É;W€VT0˜‚0;dS\bI$&�ÈEž¾7Ò:æÿ ý…ª·uÍY�¢¨REQåßÙ{p[ŽêJxíêoz7ß—ƒrÎ’�@ˆd2 Û€ ¶1ø·ñØÆÛƒíã™±0`0`l�„PF( œóÓÓK÷½ws:¡»kÿå>Õ_õÙ_ÎÊR-}KÕ¡RW�suÕ뮽=žÅâ�f Œ�ˆ’2Œ ‘a3Rˆ5% ÍqdF†¡½nëDöZ£™ÐSRÖæ¼a¯›²Ù4Lë´J[/0¥¨giÛÛv¶­;we¨Ìuj1$4 Äæ^†QòŒÙó uëÙµ)ã”1FqšÚ‹@Oñg#€÷¾Ö°ݱÛð †.âñAhx…”î@w _`«cý.zä .\@A×\@Žò¾l#Ý9²®„Çä®uÍAÄÈ"ŒTáÛ×¼UÝðÀõÔŒÿ?JmÉÞÉ��tDr‚H6œmG,B¯ ¡E¬„p=P»@ƒb”›K§<+¶�—™÷'u¹c;>1ƒ‰À�jÝ'9¾„­P-}EY7ìl BèqëjK¶7ûK ¿uÒ þÏ Ç0jÆr¹UÄ!×F|üDŽ�¥¦Æßß4‹wüp¶ –ðÍWnÀ+�ˆB 6ãá騭;Ö®ÇùNœB2¤Xöñ^ ñ?nœÆ×�àôºm}8v¸ŒÍ}!Y‰©‚�ÓF›9ìfw�)¹»q-£dSæÜ:ÝÀ§ïžÇ�zŒw6€s×UQîá^éè&㬀i÷¡3n™iàþñ”]Âé§F«BÖíâ"±ýrÍ�MúŠÎGð‚µPýEÈ%’Â�ƒp±±[Ob)"Q†ò²tõKg™ä¸ý„ÁîÈ >^òððððððxœÅŸâÓJü‰u"jXÑGA3�5ÙäÉdîµ�¦Kâ˜Rq'9­pµ ?-6›­ëq¤’~ÌqVtiµ±e˜Š2éy”tìyºóضµç®4mêÍÀœ¦}`©ÀŠDi7^Ô:6$snŸ7j‰?aFüŠ,íqk~‰öt�†ý—Ìã9"üô¾ÎŠ?ÐK†ß¶âÏ.<1X0ü7n/º£ßðõöÖû]õÈ€ ë�éþ¥À“/è(:N–¢nºŠI²® "¸èÆS ߺúG´Òø8�'ÜSÙ©³vbŒ"áì ’¡ÑÜ9ÄrfB<‚è;=–ùy4··Óöž"Ðîæl?öå‰Y–Z8”7¦a*QœŽ›/¦HÐxÚÐp®†@ÎÛâ̶1�–”�°Ø4BÍ�3()\÷Î-xïñC()‘´_Zjùº#‰6DÆáCWìÇ_\;…·>€Ï½x-Ž-ÛPpŒéåyxdFŠRr[|ýþ:þò†Ì55þè¤ü²§¿¬lEé¦ivìÂmP ضÙî‘i.ß[Ã?Ý·�äz�éÿØ¡RŽ>&Î¥³†„ƒÇN¬w8ÆÀ¶:˜ ˇÌa`CAÞ7¢=ÉuIKj«Ãfîñ�÷€Ô!A/YuÂ0¸¬à ÄNñ\"/—œƒ£+¨}®®Ì½\~Ÿ6W^r…Ü=H�ÿ/�‡‡€<<<<<<<<~añ‡ŒÒÓBøiÆ„F¤&¢�vî–(V†”Pǰ‰B½©Gd…ç¦i4“²Müi˜Ò9z‚ÔÉcË aÓ•™ce$âLz-l]slªäZÃÖKê˜ÒÒŒéÆIç”ÎYkB½içãž#ãH Òy¶ÜM!!Š[Ç¡)” Ú5iD”\{êÑo>g½þËæñ,~ †g[÷ÌqèŽØð'Ö�së“ÛåÃÏ~ÇpݱÑð× _cØçwÙ#Ǥd¨¶Dz‰:dÙÕ Ô5åzçþ2®½w]ák—ZXøb>±sž’áXÛŽîžU˜ìy7×N¶ÿ8WÌ/ëÒQÔ*c�\'[‚ròù(á¼Ðœ9wõ’¾wž’k…ܤ± ¸K¡6Œ!kË-ebC·vö>�Ö™oh¼÷¢I¼ýû{ð¦#úqÙ[7ãÜ-="ï�”Àn³ä³µÈÎ�qíd ïüÑ$.ܾ„�ž9Š?=mã= MEhÄí™ÅcfY· MÜ^²˜ZS3v.…ø“ë§P eú?c Š„ÜÉÈE1ðÈ^Dø°m›€¡½Í4bü»™ÿv®à¤Ñ Þvp?6ôÄ‹�sî^ÛõÝrr­MÁÝ~è>ð@(sä´—R cQJ�h¶‰øòIÄ×V"d¡ À!ý^ºÁAýâ/Çù�ú�V)5‹z�À,óþ¸ñÙ-~*�úðo^òðððððððx\0jX|Êü5bÂJ ŒÒ8”†=k9|¬#&Lòç8'O3´.{-n¹r’’­›F‡æÜ”È�"ÂuÓS �M‚6íÙ•ò8©§CJÆ${lÊdÌ”n×>¶ É|“y[‡R"…¦¬…�µ¬KÈ _ͦs@±F+4ž&„Ú–±BÝ´]±bÐSë 1"PÉÝ<ž…âÏ‘Þoø¢Uþ,½Û𓆗6ŸÇ-VxºÚP£;N°ÂÖY†¿ãÞdXwÇ�… áúQ�rýØ{¼ÊðqJÜc×^ÌÉ�-‰vOU ß¼ê÷M¾Ÿk)Öo„"‚ivâ‡{lI®é�‘Ž"×N§}Øþ!C¿¹zm. %Ý"Ç‘½–G´qõóÅ­Ý8pímÿbžœ2=pEÛ3ö�Á2²àý+¶]§ü6ö Å€öžÈûC¸vO /ùæ#øäÍsø‡�ã+¯X‡ƒ mc¸ú ‰žÅúQ»3#Š5þõþE¼íÂ=X 5¾ô’õÆ´»gc"÷�“cÄùl=ÆçïžÇ?Ü6‹SÆ+øÓ“‡“£Ñ4õwp»RCÀØ(0>–~TÒ5m�i¦$wÏ—ŒT‹o=¨§ŽVP ²ó ) EÆæcëØö­]õJŒmçÌC¸«£Ì¹¡8{8[ú®yDîI! (B�=uú(Ð[ó—Ï$„9é”ãK�•²ý�+å÷Ж éì“y¤ËË»€<<¼äáááááááñ‹‰?eCxªi`¡`Ùº\´&ûÒ„[!Ã\o AÖå™s%hH�tÕ|ò¶9l®”ð†ƒûD �ÛÈ-²]ȱØðÚ}u|ä†iì\Šðû' ãuõ£§�Š}N„xhÐhØãÒ‚œ¼G„„õ˜qÅd ßzxëz¼lc6š˜rÒ‰\J�©£Pq_Å ””­óêP„ÑÃjù®n‘)ÆÈÍ«H8ªj¢ë§ /ŸLBÄIÐú篃:f(!±Kâ#7gw E�CÊÁ=±—)Çáã@öŸv°÷ÿxxxÈÃÃÃÃÃÃÃã1aOa±QHDÍpâDärü„!uù(0ŠºEÄdóð('”X±ÇœfEqÜ ¬HTDm¥+Ëý¨- ¶´Æœa%á°¹n¹4bÊÿä¨á˜¤½>âhÛ™>š>MÿIÓ¿¯^«¢Y/Zç�uIAÊ AéœíóˆBJD¡T *iG�ä �†‰«[Ñ,qÅ­cƒ–£*n¹�æÍ8+OºÔcÄǪÿúy<…ex:€žlH«xI~�á?Þ`¨ñôÅC†Ÿ6ü¡aݱÍð7 _aè¿ÏÏiPîKz”Žžüú�ë�+O4R7>0RøÊ¥«öÌþ˜˜O·b�¡iÜK]еsé¨Ì(2é=Ù6dï)eûËËëCR\rÊ9fh�3㳑%…­áj8¡ È<7ÁÍ5#( ã�¢Ü±›—h ž£¯ ”Ûªðä²íGl09fA,’Ðä‰3”Ÿ´†ÁîÜpû|ˆw_¸¼t?Þ}ì|÷u›pÚÚ ùÝ»=ÈöÇù9x¨uö“=5Ü=ÝÀ�»šøãGð;' a°¬dø7áÜÊqY:GŒi¾·c9q •>lÆxþDD¶µv>¬ÄºÕ*pð¶|·–ÌôÝG–qÓt‡¯)â5{1V : 0=ƒ1&©BÚ`8/j(L?PB¡{PVYç wôÒÚ*hS/’¢Zžj@_ºúÆi C†z£Ãœ¿´µW¸{¤ÅŽ$¶[ˆ¼y ãœP$ÛäÛ¼¤ˆŠÊäý?ÏEøØË�ÑýÓ ô”¸~–ÃÄñ#ƒ‰S¬‰‰­)!4PV:bçJ\-“)[uYÛ’+S·lÊ*˜ÊPT© ¡R * EÂS Ö mk 6Ô:¸ U¨!B(Å È”Š A)€wM)FÑ”0e#&0š[ëÅ”¾Èˆ4Á€ ·Öœ Ë�€kJ¡RÐ õd‰�»ýÑã$þॆ£X4¼Èðž9І×Þnx®á©]D.²uŽ5¼,¹ü§å96\6ìË É&sýä 7®tç¹÷-µÓaf±X¸ðÆ÷ þÀpÃ)B¬ðâî³pü¸œ;­ã˜ÕI¼‘ý¢Ím!ë9J9!G)™ȶ×)m/úζ³bJEbg˜Å¸Âñ  ±‡ÅÎh¢O( 5 DB,ÈBl^7ì='̰»-û$¡"Øz?Ù½‚Wü{ o?r >uþZ\µ«†ÿõ³iì^Š z²s@«Dúœâq mІÿzϾnø«Gà3/\‹¯ß¿€ïgM¤Ä™6 ḑkÓÚï醯ïYÀ¡kJx�3NŸ¨â;;–ðàB˜Ü_˜'`1(lû¦mÛª±sO€•š<ç[¶g%Äå{544^¾±Û—"Ü0Ý@-æ¶[O¬µÍ�ìž(´½>yk/â&Éœ:nh¶wÈ-pîúT§�‚�à¤o™Eêö‘ëÉF$‹w­@™=¦CúEm}¨“FÀÛúÁ·Ï‚gšB€cXˆï¾¥ƒN´%f'Éö2¼$¸ã>¸ °—€<<¼ÈÃÃÃÃÃÃÃcõâ�zJB¿ÕBEÓµ"5L©¤5QÌDQL&bŽ)#Ea¨h 7ˆ¡bÀœ;7Lðdó÷$n™•å4j›5‡¡TÝŠJߪ½ƒ(÷ô T)£X* ((�"<@Š’ù˜y™ù•PééE¥wØp=J僆0<õ• ‰{¨Ùȸ„\è8çz2eЍ‚Qf†Ž‰RGP·È c¢ˆ †Hö@-5š©±húÒŒ'˜üSþËèñ ~F ßàí«f ÿÅðŸ <ƒ�?´Ž í莊áË­#è ÿ©yN¡&Ä)üÈ7ª2t›ÊÔ ²íÄ}ÙŽ;…–+üÛÕç¾sÍeToþwb a„áœ/Èq½ U’}Äâ‘l2­½?͆ډJ$SÖ8G��§+ļ… ˆòî¹—Ñ"¯�ƒ®O;/ѽpR»ã$ïO�©\�Á35Ñ�D¶/÷xÒ"d¥ °�œpáî2QGi|Úôû·7ÏâO¯�Â™ëªøÄ ÆqêxE|Â%Ämu…fsß|kDŒköÕðÎC’AC¥0ˆ”Çím•"}¤îèÉ“ˆ o›i˜°pK¯ßÜ‹c‹v�c›C¬�ì ½Í+búÁ @䘂³N§œ…á|!ŒF+Î[uÊØæC"–“gè;æÿx/xo 4T‚zÁD«�ž ÓžÄCPg±Ø°³�G²MÇŸŠÌ.÷�ü È=:ù@p^òðððððððX=Ö<©¿KĘ­h®^€Ö„È0ŒURÆ1™R¥9~˜5Ø?¨�NœE6¯M³á„Ž0L�$t[½¶¤C¥gåž^+E(Ex ‡Jå2*½†ë“çlÖ· ¶2ŠF½Ô–·È‰@�9WˆÌ9E„h ÌHÃé…iΠ(a‚/‡Â˜h©Ð�•'C4"�ÿ�Öãé*üT _à· Ew4 dø�†÷áÙ�ý†_¶9‚fÑc†ï4|‹á°ÿ='  WäëdÇ®¡ÜØRÙ’D�N^Y"¸øæC _øÑ×hnù«ó!Й!¤X¢…à#óê�I 1·È,f D ™spç`{݉LÂA”ÒM Q‰YˆZö¢Ž"Û.3ï€DN#™—EJznìVQ¦SI¯ –�¾’ý¶”Þºdî bíòÄ‚€»l‹¹FŒ�\3…7N¯àôuÕ„DVô±e’~ Æjpï|¿õ|ã¾Eüæ1ƒøÓSG°©¯€]P|ÆÈ.¼Ö0PÿëÖÌ75~ÇŒqæD�Vx`;�Å"ŽŽ2&&:¬-¹’3®˜•˜qÕþ.Ú³‚M½E¼rc/6¯)`ëqu;WeÚ3´-�;Ý ·÷ŽBLÍñ qFmëCñ¥ë“Ðnr±A_sú'ûÁ !$xc”“pÄ—RÞ\º ? -äwÅÁ­0¨uÏ–ìÖ‰�>ü›‡‡€<<<<<<<<•û'0ð¤º~¬”hÙŠ Z“)©%þ¤Œ —˜ÑOˆ¨åôiÚ9Q˜ ?Ô–ÖAëCQîÙ˜¸fT@x.@”¸™*½ã(AnÃÊʈs¥tù‘r¨PsŸŠY1EÊІÏù�`_ô„‘¢ùF�ö/—’AO Èp�ÿRz<Í„2<À Ï0T莛 ?nx�aŒgî5ü¤á� ›èŽÃ ßox¾aÙªžõXAg±FI÷޼—ÆMž»z²?u×#ƒ…/]òê¡ÉK)Ö/Bl�6Èñ$YAĉ3Dí FJ‘H4RÀɺmàÆ® !°ØzB jŸ3 ñ bžÈôE6zÕá(|ðyP¿{”)镇Y¡†�HdáÄ0!ÖØyʱ9u•Ðx/²à+™|,äÚq·Düì. 0‰Æ¢]®…eè1‡ûæšx÷�&qïl¯?´_~Ù:;Rƒ¥Àçr �ò¼mù3ÂeFlh7G7–Û íÎÓ1¤ýƒEßl H7�»D86r×ÊÔkŽ„zÝQŽƒ.� €Ž…z׉ “×·¹’@p¢‡Rm¡ísŒ#¥´i é‹`±³5¸ ÜñE?S:vEDÖ[J7“p±ý·3cª¦ñaãÖ¹|× >{þþÒ5£UW�@™·øLè„Üûµˆñ/÷/âw�e¨¢ð÷g�ãüM=œÞ%œO"¿Œƒ }-ÆÛ—pûL/˜¨â°f?*µ¥ ª–�ƒÖ�ß<îàÌ‘k½_507¶„@Y)H�35‰Ubâ×÷­é°.n<»_BÜC[ðTÑ…{ Íói çúŠPχ:kè/vYZj……3%ä’ö@§Œ@�9¬)æø Iäïêá¬Ëu»�Áι—½ðãááá �§Ù wéúÙ»\¦ÅFÌîFœŠ †IΟHqUi^£bpD.Ü›/A£Q«˜ã-¨ô®C¡Tð[(  * gò%® ÚÊ`"E eJ)@L‰4\ 9`+º%b�é ¸h´Øl……‹4g(ãJëñ›èñ ?ƒ†ÿÀ¯N ; ¿eøO†{ñÜÂ’áw ?g¸ ÝÑkøjÃ_7Üì?mÏZ,å†�sÈñ–/ù“çç ãúù-Öþ†€‘V ÎLˆ6ÂÁâòòÈÞ2·�»A�óæ$P”ãÊsرe_v~ò²x>÷,�.7.­íCð«'&BOþK$+Ú¼` Ô;�†+íbg޵¥²óqÏä¥Ík@å–S3xï’X_7V$óþHI§íŒ‰BB¶‘½PžIâ¾›WŸ¿c¯þÎ.0€ ^¹¿rô””N�îâqB‰D¤ù»[fñ··ÎàÅ{ñ?�ÐtäpIÌGXrˆ€nÁÜGÞŒáÆ tÇž[¹‚‰j€B¦ï­[5z{9Ç…ÒÝ�tÐñ @1BÖhh�Ü)µ4K[mïíU ©rC©wKÄØyuê1ô ÓЗîO7 A/^uü�uX©ÌÃ5uâÒ—M">P$FÊI~ 2Î"””ÌýÓÅý³ZH!’EÞ‘‹Ë‚óðð�‡‡‡‡‡‡‡Ç*ÿUðD!Ò }ËEš\.!ŒÈœ·ÈRç�6 #¥ÁCÅ=¤¥ëÇ”†VjÔÆ”¶¡\­ú ìŠÄ”ä Š¢ÿ‚Ö l&kiA†-‘ÍP¦\Ä<\ ‘äŠUk�hš2´û'¥ÂJÐîÅ áñE¿ß8�§Hø)¾Ð†+; Ý^nø Ã;ñÜÆÃ/þ»á"ºc�á» ßàC?>+¡� .7TÛR¸{rE -¯YPpÅ훋ŸþáçÔäì·TE2¬sJwÎÞo�ÈžKAÆ mN4ZçæÉuÊ’…Dø7{�8'_‘uT ñÇ6ý9Ãȉë ~ù`¨ºº—I#U¨7¬ë—ë鎳saXrKDÚ<U»5¹lÃu‘܃„:[œ£Äuròtu}ÙÎ YV—¹‰7П];…߸tÎÝЃoþÒzœ»±´Êa‰¦„¥Î»f›ø£ëà¢G–ñÁㆎVT‡¤<œuþtñÒ¹´U?�¬ãK?mBÇ”äïYS @ Ž<*n_îT¯Ì ™g/`lc„ÁñÄ¥Ur5bFl˜ê,Í…¦ï¯ŠïaÞ. ç�YІL†fíôå“Ð×Oµ²Ü�à¥ëMÙ×ñ³£CðO€¯›–súØÒÛ gú‚’b–ÜoN(Dè.áÞ,˜s’½Üãááá �§™ûg¡ÑêèTøa$n’024e¬ æ˜{HóH)„Ò€tý4m›F½Š8Ú†Jï”ò¡ƒ~1!h¢p+jµ~ç²9•’µ¶® @ƒ‡K!(Ù3“Í×+Á0…h—Ùç%ÓîñCň“ÞÙåñd‹?ÇÚðd/X¥0~» v…aèW0w]"tÇ1†¿mxŽaÑ/ß³N¤®)æ-Ä=%J'mlß×_üüE¨nÛq…ñ/YGB^Ø4wž‚Ñ1!»P(¡�È ¤Ù‰I Â-ãàútáÙ„£h[•µ-áÀ®]vnR˜±k[2èÔ P¯8 ((äAÁ+Q)@½áHÐACrÇܳËÛ=EÐ1c@)h_îýËÀB£M8�»Î!ÏPF#·GÉu¹ °-Sì]Šðþñ¦Ã � PZæÉ‹ÂaãŽîœªãÝOâÓ·Ïâ÷OÂ?¼p­)Juéу]4ÂKw¯àCWÀT-ÆŸœ4‚­ýE¶Í=3Û’ÀÙö�çAŽÓËŒ«îÔØ] ÑS ¬ïU¨ £#Œµë´«‹¬`%׆ÛŽ­;G–rë¥aÈ­={x§—Q-(מ¤Y�ä÷´ÈÑ@nï\F|ÑðÝó@,:))¨ã‡¡Î[«t ÍÇ“5èK'ÁwÍ‘裨@G­�:wÛkøEëtYð+˜‹ðQ:£ †çZ!è¿|ϲ\@Òý#Ý>ÝÄ¢Ä9\üÊ¥o(|ïú+i¥ùAÊò¥xz E@¬¥ãF¸€l׬­À"¯¥ ‚<&f÷”N€jo'C¸iÝ~O¥sUòå·u‹�›�{®N2š½ltèÔùÌà© »ÍÈCA�^uèø ·& raó:v ê­Ç}%´áÀ 0S‰Ý–àÀÞ¹u8)ºÐpÄyÞ‘V}»GyÍ4~÷²}øƒÓ†ñÃ7nÂIk+ÒÁâÜ? G -d ‰uKÝ?|xoüÁnÜ:ÕÀçÎ[‹�8„�’²í»äÿ!ä#£‹¬D_}`só z‹ }Þž?QqM¥ûGöËîœ!"ÆöG€é`ÏJ„Ù†ÆpIa¬àØ£5‚@ô“¹ïÈæÃC”« °Ý¸õIÛM=\•÷j,ÅÀ Ce$Ý;ÂáE�9÷ r]Y®oÌÐFŠ/Þ Þµ (&y}ÔóF[y~˜m{áø»ú’ÉDT‚Dotêèy#É1N°D¾Èœ�‘û|$7�ÓÝÍ�O¢çáá �U†+P�{®Ÿ‡ªXj&®Š´‚!4“uF„f¨P!Ík+ ™[¹} ÃPµå§i4ˈÂ-¨ö�AþÿuO”«”+›66£^ëI�V £Ð”–QD(+æuå&ʤiJ„=f‚6;'ÐäRšñ8Á‹}O´ðÓgøZ›‹f#ºc9“ëf§_ÁUaÞæFú†“èŽî݆ëüò=k\@lH¹yäu™çç‚kN4áÞ¾C3KOÀD»ó…R¬ cë´ùxDÈ4çÖÑî ; ³#ò"”Ù:$ÜCÌîºfK-Iî;ƒŒfk1hNÛX熽£±>¨×iûuàkv"þØ5П»ñÿ5å…÷ §„èEÛ@çlz‹®.Ûr¢ê�G&¹ƒP…-‘É�a‘=�KP¤¶Ýg)8�ËýCL�aóXì1^¸}ÏÿÚ|ï�%üë«6àãç�cmo±}*$(ûÉœK‡F->wûÞ~á^ –|ýeëñúCúPP$EŠÕ�y8i¹s¦�/Þ»€_ÚÜ‹?>q mV‚¬‹¬Jé˜ wÝ£ƒåˆ�£3Ö¯QxÅÉ Õ€2Û%¾;Õ~ÆÆCšh3d±sU1q캵¡fÜ5ßÄϦˆ9³Ç*;ÅâK�˜ƒmì¹(_tY‰’�púŠ}à¹&$h]ôâµÀу@�äbµ1ø–Yè«ö39}ŒU Î™5•n;Cº»Vb/yxxxÈÃÃÃÃÃÃãD �'fkÚ±P¡P+ÒšÈ1›Ò qÜtL<^y¤!­ØÐLóý¤çêµ!�Ïõó„‚€rOŠ¥­hÔ7V…Y!ˆZ{Àà±Rˆþ JĽÐP3(jí5ņ+a@û—Kx|Pòûãñ ?ól¸·ãѱáÕ6¬Ù->ëò/„†Ÿ5üžá ºc“á{ _mØë—ï�Øî9²z¸sÖ' ×Ü3Qüä>¦¶ïû.…ñImÂL mI[÷‹\Eî~{_æ"!×Þ…p“ãwÈo"žVŠIRÒÜ&N1)³k+ æèŽzÃQ@¹Ð–—Qçnè˶M+’Å|ë$ô×o–C(t�¸ê='�^qh"öÐË1cõ¦£�±W/°ÂÉt­åþ!±É aMi!.)°Ê^f»p%¥âCª7$×ÅöÒÔŒOÜ<‹Ó¿ú0˜qÕ[6ã·�[§ºBöINnrS L®DøÓk§ðákà[úð…ó&pÊxå特�ÂW·ÍÔñç7Îàºu|àè5x×ák0XQÂ3'û’ãr›Ãfz–°wÒšó B�µÕµM¼ãè^œ0\† PÂ¥ÃÀ¡Ç6@9>>e�@LÀî;ªë.WNÄœ/cÈëÜi½X„ T(5ØÊí³±�ÀÓ èË&¡ošI�,”"‡´ÂÂmêÍŒÁí?‘æšÐWï›>P�!‚¶õçŽCmî�;‹;d)ÀÌR$×9#J2àñðð�‡‡‡‡‡‡‡Ç“æ°Ð Ú»TR{–Ê”äŠÑh… c´ŽS1(Vè bÞXm Lºå0IþE­²Ù0¬ÑlnBµw-‚‚ÿýæÉ) ÒÓ ¥¶aey0}âÈŠrµÎc˜x¤òDµ‰dO ™ Ó@ïÍ6Š˜oxì(—šß�Ç[ü9Àož·J‘ñ^Ã4ü±aïàcÞdø†×jtlj†4|¾aà—ðï’âŽJÏóHûfKÅÏ^øõÓ»¯¤zó� "�|Yì<©pCZƒ˜“2� åÆÁ…á(ãe ±(ÖvöÔ Î͉¹ƒðq= ¥¸þIk;¾­¯»ˆAºUW·�õ¶¹„ôWnß±ßÖÓ‡À»’ûzÿ2:Â΋IÄ ¤Ü0Hž©ûl_ŒU�‰U²�ä1Û@Î$æ^†gBæ‘ØOÔ4~ïòxýwwáÅ[zqù›7ãåÛzA2ô›Çö•½GHÿá—Í­x¯þõþEüÉ©#øËÓGQ(ÇÉÒQü‘Ʀ¶Ê‘füx× þü†™Ä­óg'Žàe{PT¨|q�Åwß§Eˆ“º1s¡Æ½s8b°ˆ·níÃæÞb›Ûnl½Æð¸vBÃ;Ôæì»_„Ý“H»$ó“ëe r{D™´Y=…$œ›:g-h¨ H(ÛfÇâ‹'Á,BknÓŽQ @' C½`*[¡�àÝ+ЗíKÂÃIçœ*)ð1ƒÀÙãÀH¹] %t�ˆÕg�² äsyxxÈÃÃÃÃÃÃÃãI€b Ú>W¥©Z š F¤b&„±s"ü04x]µÎÆùŽa�>d Ã$üX€Fm¤B¥ÇÿÅ÷SUP(WÖ£¶²Í†Í ”�L©­�g„ TüI„ „¦ cR»*ˆ´wy<�„ŸqÃ_ðfÃ!tÇï~ÝpƯà㊆á�¬°vÿ*œo…»Ãüò=“]@.øš-ÉÑÞ³(|éÒ—¾vÅe´XûzA‘Dž”páÀ�paؘe.;+m�Ù•ò˜\ßlý$AŠUYÑHŽãæÃîY,\?ìæÌ2×�vÍxèù›‘…¾ä!ðžÅöàz”éÔ4W‡þÚí ;÷ã±€š&—;†­ã̹D\UvH¼4³°�¹µ”''qÂÛ4ðÚoïÂ__7��< ÿòÊõ8r´ìÚ;™GøÔ8+Cu*4ßxïøÑ^ìZŽpäp o?l½ÕÙóF—>o!ŒñU#büÝm³8b¨„ÿvâ0Ž.»iÊþYn’»Öh<¨@ܶØ(h\QŸÇMÓ œ·®Š³&ªè+)¨8䘆ËÇdÇ n­™'厛{’# [>$ñý¡.áìØ‰?döQ½p-”rP²ßýv'ÜsàK'OÖ ³žêã ³¦¨@^NŸ˜Á÷-´BËíu}hXô“Ü@tü�Œ*ç Ÿ�Üg+{Äò{ä½?Ïy(¿�Ácvþ<<_¥¥f€Ôõjeãé·DC^SˆxKO%Fê­U6­ÀÐTVüY‡ru EÿWÞO¹¨wÍÆV4ë…6(4¥�x¸r9ЉÐg÷Ú‘&Ú÷ØCÁù¿ø÷x„Ÿªá+ü†á6tGÝð‡†Ÿ6|ȯàŠiï~Õp Ý1løVÃwŽùå{Æa> gIy¯ªƒï]dñcßùºÚ?÷Šô&À@gE!Ö 9®në�RgŒrŽžŒ[&Ë<׎;&jÿC0’’˜…0Ã1BÞ³ rŽ÷œîy2÷(_ë„ÂQäžK)ЫÛóþðC³àëv:×�´™dÑŒÿà>ð�LžñQ¡�p?pÓ¤Ûƒ,˜ÛŒn3¢ªm ‰œøCY7;©'“hßA8ºìµtÔï<¸„s¾¹×í­ã[Fú«3Ç0T Ú\@nÂBå¡î®žåPã3·Ïáî™&6ö“°p/ÙÜ Ê·çÈgv’¬nŸœ€]+þÞŒqÁÃKxÝÖ>¼ÿ¨A¬ï-ˆâŽ;QX\r×R[Ô¡GƸ¹‰¯>´„…��±¥ŠsNª= ¶uØVgâäL�0µ³ˆ…ý€¹£É…W銑j»íO²a9‚¬Jf-‚—¬:TæsCnQ–"ðuSàk‹!\~!õ¢µ ÃÜÏùùªÅà›f¡¯™‚^‰Ñrþ> ד¹cx<Ñ{!ÈÃà @ô˜ïZ,Ób³Í„˜´&hn1ŠÀ¤×U<–¸~qD‰�`hC¾µX¯WÇÛPí[Rø…À–ò�×;Ÿ£K{ ^5å<º�‰Uö‘ßîqA’{) 7#táàLI0´"ñújbÄVøKö^+0ˆ¦VJhDä¿õxŠ„eø<>ìTCZÅO‘ë ÿÁ–گⓆ ?ex¡aÝq°áo¾ÜÐçˆ{º€òü êæ‹ÿ½ÿܵó?(ŠŸfHGCVÀq])@æça"@Q»ÈBî1¹=UÜ~q{Cóƒ2"H-b|즜ÿ­�è/)\òÆMø•£(XP¶­ X 6bre#füÍMÓø?·Ìâ�÷ácg�ãÈ¡’Ш\)m<ÙÏ¥â�þ–éþÇÍ3¸o¾iò â ÛúÐ[Tâ~~® ;ï@mš¡\atXŒ¦Ö¸m¶�+ç–Ñ»©‘ô�è*L.¹—ݸ(vÜVu{.Æ¢ìžAÞ‡‰5Êñ\ñ�ö@ß1 HçyQA;ˆÀˆ8´®GŽéöh=ÉÄFHC(útÄ@â*¢uU€9×�óMðÕ@¦4u—gÊŠ˜œŸˆÈy‚¼øãáá ¿�ê1‰?S+e¤‚ҤŚÅ„€Xoé­¡/Ј­s$e³ l†ê+#(–¶¢T)aµ`H:È,¯[èNý‰:,êhW® ,Æc9n·kÝêsþ=–| "P£6fÿYÆ„(¤¤ Àzmµa3ûb†‚X™ÏI� 俦¿€ø“ /3¬ ;¶~Ú:j~ŸhÃë ?nxƒ!¯âgÃi†0<Õÿ¿ð3 �?×çW ÅOýÇ{‚Ý|%Õ›ïX‘ÀA ×Cˆ'0´ÂLl¨(+htÿ�ÂíC†ì(è;¡Aä!– Ò9Š>cíÜ<@f\jÏÄâÅ·­O©p#×& ¨3·¸¤&ú»÷‹ 7Nn%)^PëYö/CùVð�ûmâ|�H›{ ¿tkËùS‹\ž¤f$×Ú�K"ÔYZÏ^ ‚ÜÐo¬„3Æ…iÏ•§8�ÛÚœgÞ³ãw.ß�÷þx^wH?¾ÿš�8k}®¢›XÌ�Ðܰ¿Žßºr?.ýÏ>§ŽàC' a´´OEº�äúÈz™ó�?Ú½‚�Þ:ƒ¢"üÁqC8kmÉÏdþï—³³„Ý»ä£mÞ¡¯¯U)Þ¸Œ•X£i”¡R!®íº§‚fMA ›F–R°É®lC¾w± ¹Ç;–‰¾Ôé£PgŒ%°m'×€Z„¾dlÜT�cõ “‡¡ž? ³Â³û¾0 w®€/ßl}PÞÏy�2ë(ÀœV÷¹<<<ü/½O<Ôý3zd¾—bM-2Q¤ qlÈàjëƒúj(#vaÃlØ7CsÞl 7¡Ú7º!]4;2dè”vº¿4¥¥fÞE´GæžíÁaid]Qri=Q²H í®Ë¿Lvc»Ò�íêIñÊðÑ¡TA½Ñk]@d¨’c“¡B_!æž ¢X+b¦4¹´9'5S/b¦Vô�Ç“$ü ¦!ÂFѳ6ÇÏ— ÷û|Z`Åð†Ÿ1|ÝQ5|…áû ·ùå{Ú#2LM¡øåKÏ)}ê?.R³ËFš×À@ˆ?2lZ» 'Ö†ìÚX§�üo0Y:1E Ké5ÊÿC Írl‘WDŠ3¶? 1?Û^8wBŽ©Å8‘‰E(:0¬ûg#Ð[rÍî�ß}À¹‰ØQ lÎõ�ΌшÀ>ýñëG_ô ø[wBáfèO^ß 7_wkëV�°C’r‡^�7ûûL2ïOþ_»0Q&g�X$θa²†×}o>çþæìq7ZÁDO€t¾ Î$ˆó®H3¾k†÷‘`%b|ÜŒñf#8•’aÚì¾0V‡ù¦Æ×\ÄŒ(râH¿sô¶õ;ÑB"é[!Á=÷ˆ¢öPyDÀádž¨Ç( 7[ÏÁ0ó7eL( ƒÖ¶//öÜ_vB©kr`‘玲*wzŽz }ãtËÍ3Ý€MT7PpÌ PT 6!Ù²©'�¾rxªH˜õTfÏÈ8‹PR¾“ß½¾ê°¿žÿPb�If´°WØÿbìááá �UãÊi…_´{±¤îš¢¬ƒä8‚P!Í[{ëP ¤âO’ #fÊúJ€m¨ôô®^ø‘!Z„p‹{HÛä”,c¶“»H2,ƒ|™@".»+[tI¥Ý1‰¾²mÙ–N Bæ¹Äüµp)Åì®IÑG c±[ËUA)B 6 ç¡àÖö4™ìçÀŠ‚v(¸¶×ÿ~ëñ ?eÃó¼ßð0tGÓðdžŸ4¼×¯àÓû ¿døMÃ9tǸá/¾ÙpÈ/ßÓóÁ…7Tú›û¢Ú5õeŠõ!lÅZ�;‡b³yn€ìoIþч¸.7HÅ#!²@„hc{Ÿò\ •dÀŠ •• HÉø^î\ô•@)!xd²&�¬ ¥Ín>õü­@@·êóeåˆ 麧ópnÒº=WÒäø®ýàóÀBÃÕÕÂa¢ÔhŠç\}(ߨ@—(9'¦„ œ“ÇQ®�ë¬�‘{Êé?0¾uÿ"^zÁ.|ù®|ø”üþÉ#è-))j8:ä;LÄùBSãSFdúðµS8z¨Œ�Ÿ5Ž3×VAlçÉ,:ùªSßb]v,‡øÄ]s¸|o /ÙЋSGˉãH¶ÍŠqÍpÿAë¹®‡†5†�\gY`„Ìh„­ê%E 0ìÆ`!æ?ùGBÓ“ý°�×lúŠ}Ð7Lµòyùà~^¼8¨Ï}æÁ–óa’ˆ6 ¬ääÚÜ uîxS˜(ÿçÃr¾sÁ ëþɆÉE¿Lï{'�‡‡€<<<<<<<<ogX)?Û;B±V.×�ËûÃE°ÞÚW4eÅC'þÔj#(•7¡P* 4@1'tñß a¨È\µÙã�d¨d C²”ç™>ܹ,%•8NI²?ׯ�“›WÁRΙÜsZ:p‹¤Ýu‚¸ŸY[D«ƒ’ý cˆ¢4 œJŽÓPpeÒíq·ê.1 ÑGX!ð<Ã’_¾§ÊñõÃ�~vÿ…F/¬s…!Ü0C!.� ý%úHàŽåKZ(ÊIÂ.#o‘ëß¹ƒ„ȵ!Í 8–óráéØ [¹`áþÉ>‡†ÈCÈ‚NÙÔrÿ($ä»§À{Í–:m/œM©œ�Kº‘…#9/O#´înLŽ#ÑÀÄ`…¤¹MÊ™ŸÜ¸l 'î´]ëÇ"O–Â}Ã^ÿƒ=ØÜ_À^½¯?¸‰gy ؾâÏ6…/Þ;�·Ú��œ6Úrë -Ç”û w —Þ4ÝÀ?=°€Å&ã7ÀK7ô H§‰sÖ<²SaqAAþi×dï9WTCS»‹\©àå¦ÿͽ…\¡Œ¥3Hn&C€³GùÂQ¾ãhç2â‹÷$áá3²Ð%:n(qh¬,òò¸~y²}Ù>ð= @Ä€Ì1´¡ ’ŽÁÔ-ä�ŒÄ¨s2ÛK��<<¼äáááááááñ8b¡×ì¥H¬­èÆ0Œ5±bÖ¬¤ÎËvñ§^@¹2RÔõ¯@#!üh¶ÂŽ#Á–"Œ N@1ežHóÌ‚–ì³qJEå?i+öèt í1»µ£t­Ýzç£TBÔ,¶D Ðî± Çëª £%ü0A[HƒÔý³kÐŒ½˜ãñxŠ?›üºá« {Ñ; ?gøÃ%¿‚Ï(D†?±ÂÝ­èŽÀð,+ ï…ä§å�ü‹2ü5÷ƒùCHÅ9R±ƒXË¿Æo�S»¨ãÄŒvçï8–ñÚÒƒx^°}¥îX§%eú !°X'�Í–Í�CÙ𫮎lc¯‘Ör±tµ·e™ûHI§Eé.P§ÙÜ?ÖÄW<äò ‘I¼?&w "OQ ý¸5ÈÏ“ÇÀr]¬ÁêÑ,€•�W®#Dšª\=©æå_æŸ+*29!òá…&>pù>üÑÕðÎ#Öà«/]�“Æ+ém‹Nâ$ÄÚ·Šk÷Õñÿ™þožªãÏŒãè½G­Á@9°÷ÅÜ» /QP3bÜcžãï™Ç`Iá¦ÿ“GËPyé%5p×ÝAÛü\<%%ÛtVwßZÂ¥æ9nšià˜5%¼p¢Š¡’B$×�:ÍŸ בò¶lS/Ô©#@5€\Ûô»©ïžGüã½àÝ+€Ä@ôü1�ÞÐS踞üà"´ù ð.ׇ–¢T7�NºåR€:ˆ±$ŒŠìÿNÊÃà @�3š1®Þ5Bµ¨d_¨Pæ�™ô¶¾”Z9œû'râO£Þƒbi}Wñ'bPh‹—,,ÃÀYÁ€ÃÄ-#Äžçœ(dÅ À�Üz‰îš9‚§@MÝYR!Ž'[Qϰ-\è‰J=~ì%!ªG…àÆÉÿeòx„Ÿ5†oð.Ãu«L:ÿo†_4ÜãWð�EÃo~Þp7º£Ï𵆿f¸Ñ/ßSƒòŸíl7Xv܉:Ùpn2§�¥Ì“£2äÓfµ€Ïõ_Š‹¿�ÿÞs>Ó¾ÙÿŒR ¬8cIÎ äúgŽÛ?ÙûR`Pö\º–àúc¥º¿¥‰9O|�}¹{JväÖ†NÈäþQß?Þ»Ðj#óòCÏB¬‰"0ÒµÊ P Èù’Ã]#ÐJ££:!O%8 4† 9NvgÒõ!ÍQòž4XVbwF„k÷ÖñÆÿØ�o?´ˆ¿;{ 5ÂÁ:çt‘E¾`GîqX8_š1ã‚íKø½ŸN! àoÏÃ+6÷  º=�Îu*CÏ44¾aÆøÖÃË8e´‚÷6€Í}Ⱦæf {öB~p!ùÈHvÛwÞWBc¥5Ñݵî]Ážz„³Æ+8i¸ŒJà>OA‚݉]+V9{H-(8=ȈsìM%l6µúgÓˆ~²˜oB‚ÖU¡^4Ñê£`ÛHQ´ƒo�ƒ6BæšPù�˜ã*@d�gDmã2Ø–ÈÎÉ;<<¼äáááááááñø¢påÎaZhVÀÇZ�™ uú’zKß ú qL £HµØl±Ñ,C›  �À5S×�LöÌò/W[BGI�‹(ò—‚ “µ±ëS°ëÃ"ÿQŠœ°qKŠr„ rµÍf‘Í$BÁñX)ä"iÄši0­Ï�Ú±°FÝ~ ×o’Ç/(ü ÏðÛ†G¯Ò5r…á' ïð+ø¬ÂnÃ/^°J7×zÃ÷¾ÞÐ ÑOÊúÕÍFüù€+Á|" 7pÂKjw°ÌÕ'B>1ãÌÒ^|uðbœZÜÊn¸ZÆ_öüˆÅ pF:†sÇ@ 9ìæ¤Dˆ%m ÁJ)wÌIÿíÏÁ2ìɱ³Ž).Ùù°%Ú…ªb�Íý“�¯ÚîêÄX™ðmy¡«äRkÝz¸çpãÈ=®7�(ê"¹='p›Sª9X$•é–p qÚ úº� Ñræ"µ‘ ùÐ,Ƴ%Skë¿~ß"^óƒÝ˜mÄøúK×á×�^ƒJÑÕ!×\t‘}wIÖ�mÆøÔ]sø››gpÚxvÒ0†ËhU1s¥€Ò9ôÜçî›OÂý~K^»¥k ªí3xï½ aÄppî(†- Ë »î+Û¶nûï]qñd-©û¢µUÚ_„"ñyé"ŠðÎ�Q (ãj Î_ÚÐã¾;2ÄÝt#ÉÄ·Ì$‚N�í‡záZЦ)Ú8Ì…ˆ�HÇ·Ìu-Ñœ½¦ŽÏ)ïsæœÁ [æï¶Ïäáá �ÇÁõ{hªÖ ÒÐo.�&½¡§ÎÃŨ%ü„.ì[ÂH!lAØŒB)ø¹®Ÿ† —’P»2[Zá/ú¬Z *º5s1+,µXãÌ= Ù9‚R�2¤‰Œð£\¨¿˜o¨¶\@h9Ä(ffbÖÜq`T™|@~s<¥øsŒ~Î1, ;î´ÂÏ冡_Ág%Øð6îªUæs:Ö~Ž^`XðKøÄ üßþ¹§üg_ý€{ ß$„‚vÁȸ}”½–!ÚÚœ1ç•wáãW¢ŸšÈÃIÁ~(²ýh´Hpc@8Œ”jw·°mʺ_\î>ˆ\@ò9%”¸/ÿ¸E‘]ÑžT{¨6KŠ5èäÍ@¥„´~` ¼{ÐìÖÙ nn<ÊɱĬœ %ù ÷Óz–PÔ.:-Õ¸ºL0¤lú{‹ÖØ�¡"Rá� ¹û‹u0‚�=è}ËT^8ªîùrÀ�"ƒ)?´Û|CãonœÁ»/™Äñ£e|ã%ëñ’ͽ Øúòý<Ã�ÛnuT‰î_hâ#7Lãû;–qÈš"~ïø!¬ï)ttþ°œ$¡#Øšãnœnà3÷Îc)b¼ëМ=^A)PIÛf“ðÀ}Åœˆl”)M�ÛËй¨ÇŒ›gøé�:&*N*#P°xl9wùŒÔ!§Ž„YuÚ(ÔÙ ÁRLJg³¦ú’}àlž¬,*è„aÓÇ80Xrã ÑRï©FHrb+upQGíK†~s׎t™½äáá �ÇuïLU=87ÍŠµ&b&ÒZÁQ¬ôx¥Ák« hMVR–„84e3@¬7¡X.vtý44¨É€N)”±½F°Ž/üüB ´BÄ•¸D2o¬ û&ÃÃi»G†ˆ8uU6’=NhÝ@V âÁbÌ…Z“}1DĆ1+fFpó¾qõàlÅoŠÇ*„Ÿu†ïð†U:7& ÿÉð[†ó~Ÿh^j¿»ÑEÃZ!è(¿|�»øó60ß‹Xÿ˜«HÁÈ +íùmT6�NzŸl]'e±A-ã#ý×C�;Ï…blUó™ p~Ø5íBÀ9±I$^!ÊÔ׆Hä²®"rŽ‘¹/2¼�t¥ˆtÆ 7f9@áÔ­H`óÿðUfÛ á,-SŠ9ÈýÒìLXn�d_™qìzfE½Åš¶dè<bC°½.ÁhÐ%ÕA`cæÌÍÃ�µËUP \[+N¤¥È‡% º„…c†�,í:“»æ:OÅŸÈÃà @¿8hßr1¸irš öå=ZâÁ�ה𼹷[HÓ¹~¢0HŽÃæúD,èäú©Å€ ùÆò¯D­ƒ¥¬üo:�§+¨¬ PÈM8 ¶ÌæjjPÍ A…Ò¢(@SÖ ”Roí«�‰SHÇ””¬íçˆ)¸~ïí˜/û ñè üô¾À{ 7¡;– ¿gøYÃGü >'1gøMÃ/îCw¬1ü/†¿j¸Ö/ßcCù�¿|rù�¿òhþ*¡l()™' æ\g+r sV\IX€ÆG®A…è†:Ûû§vÑ‚RÇŠvBMB7WáâÐé�››ÈÙ�Ø…�c"�Ö.o!‹\9R ‚8¶õsÁ uÒ T‚ÒöÒŽ)ðž…Îb’C¸}Ø]Ë®�]2ddëçökײÍéÀv=V€Ü¨dR«`�=NK&Bm¼”©&!Uv¬ÇXþç‡=¸ÔªVV(Ÿ5fA›QØÔ#-brî%|.¸ýðª=5¼íG{“òïÏÇ¡f¸ˆ&N«âÜpÏBHÇ'«]2þ}ûþüÆi –þâÔœ³® E¶5‹A ó!ŸÒ]˜jDø×K¸x²Ž3Æ*xÓÖ~ŒWÜ}g,Z3ZszðŽ2:�• ÝF˜u¾8–/ åO<û½[‰ M^}í`9‚¬O[û¼xè�~@e;ʸùL;¾~ |í°A )§Î�0} €&ztóf7d.å5¶M8gØ;<<¼äáááááááñ±ÜT…«vN Ò4«V®CÍIÉe õ‘‹Éµ8"„‰ðCˆS! &4êc¨ôöçº~êÖQ¢Ñ" j ÂUü_·=!PV2‘»g¡Ó2%'"Å…âx}êújí½eJÄñkA`ûR`FË=¦Ĭ ?ݽ–ö.ýFxd„ŸÀðù>`x"ºCþÔ†»ÉÃ÷0xØð3†ß7¬¡;¶¾Ïð•†>GÙ£Dù�¾´Öð‹Ðü30Ÿ™Í¡bØ)ל9(“†5‘ÃŽ/.ï±ÅitCƒLê*rL‡µÂ e\<°ci!:ÐY‘ù¹}¤ @æ"CׯtÔØÒ¹e²óuì¼è¸MmÁ ùŠsÂÛ‰’Dî"Ê•„3È6S”÷âÚG±[?—Ãߺ€bd!ó:Éypæ<ª*4 tÍ©"3 A/„¨ýpV.Ø=Õ@‚¡ª¯Þ€ò+׃‹`p¾èC$çÙv,ÑÔŒ¯Þ¿€·ÿxorÿ+ç­Å[í—šXBJ)ÎóO§1>}÷<>kø‚µUüñ Ã8|M  ¢YW:«A-6ñ¥‡ñÀbˆ×nìÅ)Õ^Lí)B1pέ�”P[Vs^-rÿYvÈ\d–÷Ö›u×wÎ"o‘.*¨c[¹}&ª7�Ô¡/Ÿ›>j´! ÐáýÎÖV»–%¸£ûGÜ£ü&då ¬ã ð¿öxxxÈÃÃÃÃÃÃÃã@¬©ðãX‰Ê`�9WI©MÉšF|Bÿ@ÌH÷�B£6€JÏH®ëg%B™xXA0(*pEùÈOWÓõ¦üè™&´¬>Qi…t3® U¾›'Ôà;æ Íþéé _¸Ž”AF8¤£\Ž!²ßߎÂ$8³-"„#©¬¸—Võ9€<<¼äáááááááñè`rþôÑ# Ã`¦„±¶y8)õæê´^Wh ÙPˆÂ,["PØ,"P,(d¨¥Ôäl81' ±=7ä�{ÿÍÓAê Àåþr3ݧ¸ÝDPèYƒùÚD+ü[Ê8É eŽ‰Ç Íx[y ¬°Ÿ'JމF*þð¡ Xnú�n ?U×ۗí­òeþ…éË|¿‚« ¿¶JÑpÄðm†o7õËׂþý/]ùÐ/f¢o8„˜sC19QAæÞq×¥`"�!k{ΠŒ£æÔÒ~¬upAã`ç6âLh5°‡ µ~ì<óC±¥«këÀ][�uqB²lsY°¥ÈK$:YºkåèÐ   Bë…÷]{3B„èS´w!Ú¨³@%Å#·&Éþ�š([¿U×õÑ"Í.f�A²v¸ý�Ë µ‰rAÔî�!$®žâ1kÕîá†Fã'°bA±uŠP5@Ùˆ=ÿe3Ôújn•. j¿w鮼ë²IÜ=ÛÄÇŒhð›Gb dÝ:ÂÆ öÏ KaI°ÿþð2þÏísØÐ[ć�têhÔ-ô¹ãŽ·ÚhƸö^ Z* g¹„Ó‚ ;×”~œû'Gmòe¿üúäÊE%ÄFW²Yo}Õ>ð�ÓÉwD ­tPÔ‹Ö‚¶ôJaÑuµ×N™>fZ -ç·¹tö°­7+nw¼År"¦ûl³@¢-yÈÃà @«ÍÔ êö` )) ãXñPq)>¢¼ˆF�6Òý&Ž� (”‹©ÈC˱¡b‘ßG”¬Ý§Àeÿ«ÌÓ \$p_�ì ~~Ø>ª afe4�ÂTLÃ6IoVËzCii(A†)YµÎAX+…KvŒûUN?ÊðTnë4CZE8¯lžŸë µ_E�_÷[ñG« xˆ(_jXÁsúC_6ü4ß Â‹eX6éþ�N'œ°­'9DN¤±p9tÚs€TXÀjðÝÆA˜×6/ ‘+aËNŽvóó/vY8ƒl*jïËŽËD Ín@mÛÅN�k*\8NœRG®JP°CÝ·hDÎ�b!ÞHAHˆMîº}Žmˆ>{ß­…¸æ\B–aÌ- !í r®ð„}ÃE¹¡ßÚ»,*FÔé}óªîóÖBâ©}ê?Ø=× Ôh•×nBù%ë@™q¤V–çR¡NΠ3¾tïÞwå> –>{Î~ÉAæsÉîI:8€D×B�ÜW�ñ™{æñ�íK8o}>`„¦-}§°p×pžˆ;k Ì=PÁÅ×)ì­Åø¥�½8c¤ŒJ@®�ÜV"ä‚:\�èÒ­¯B�³4\ åòH±àô�'“ðp�?«J d3uö8h¤,§ãúš¬#¾r?Øì!bÑGQ�Ž�5Œ–]³ŽÏ.T<Ê·j9±Ö†5ä¶{>œ‡‡€<<<<<<<<‚+vŽS¤ ¤™È�µ& Ž…ZtJßÂ�÷OØL]Öé)s}-Ê==0 ¦†ZˆA!2�a8ìi¹%2 ðÁöt—’=JJ0Úi¡@€ªŒb~e8ãR-A¨©Ðl¨øµ¨×gmxA$eÌŠ¸õ™SûWÖWîò+þ¬¶ø ÃWVEBÿ®øôx^cÅÑÊðt+XžlHxŽ@¼¶ ÷ó¿m…³÷ƒ(#OüǤõ¤KHQ¦žáúè•{A/Ûºäú"غ b{n¸%XD7ì�{ññåc;äçqeö˜˜AÒ)äæïJ ÈÖ¡Ÿ²õt«&JÊÎ)¤Óz⺘‡½GGoD‚ȰèÛw»±�ÔÙý#×F>ƒ¶ã's¥vw‘}ëjR �ù…”Ì‘”Y‡ùe ®ÊaC®}{> áÂþ@>’&qÍŠ:=¯Û„êË׃ú h#Ú±„•¯?‚ÆO§75`P8¸=oÙŠÒi#@� A Fgˆ¦ûk1þúæYüåMÓx‰Pþ¯qo…JȲ�|NÊ_Ã»çšøß·Ïâæ©ÞuèÞ¼­}E–¹u”-Y¨UÜù±âå—7Í4pÁΔÂk7õâˆþ"”‚¹¢Hº›dH5 .AAM�<T‚üx|±ß³}É$xO �(‚Î�< ô�“æÔáöàøòýÀîœ>z  S†“>̱èB€å‰ËüÃ,~F¤w¨íûìÅ/yxxxxxxx<ºÐojºÖÍ*�?‘džEDÑéÓP`DÍ–û§Q·îް%þ4jC0ÁœÀ­Ä %-BˆÈDÊ(€û’|3>zÁ3„V~ ^ñç±Ýg”!E¥q,¯ Šl ˆ6jË-è„ÞY=ZœG¬pÒ+8Ö Ì ƒûf&Ô=ÓU¿àÏ:ágÈðÍ~Ùp Ý1gø Ã/îó+èñ`ÙðûV`Ü�îè1|¥áû ·>ûÅŸ‰ƒù€>ÍÃRÈIÿ»NHŠ�‚‚ -f8BýÁPr"þЫ&¡~çAÐóf�´›8+² Á¬.wQ÷¸xQvB�f'h€…  !E†£ÁŠC  ÚÒ. (rkãÄ’Vj3„󇄳ˆóEéM e8W?<åžrd?Â…å„&G·í×cCíÂÙµ¹}d2{N(À­Ãþ9'´I0ç*²ÿúDá@¡m,†xüZœ„zkuÞ¾¥ç�‚JA›àÀZ£yë,ê_}Ñ]ó­‹Bñäaô¼u+ ‡ö[!ÀR¼�àNÚ ãΙ~÷šøîŽeüøð‰Ã˜è)ØœTú&Ù$*‘ûú\µ¯–„…kjƯ2€ÃŠ(Ò —îP†Šcq“Z\Š4®Ø_Çe“5Ü_Ä+Ö÷`mO`»¥¼ÄC²O vÏE®È�gömêApþ:Ðá@ÐÁU³'!áôÕ€…´®ÚÊtx¿íƒÁò»ÛÔàÛæÀF0Ä\HŒ•AÏMúÈAÙçiQ@ˆ<².CÑØ‹@^òððððððð芅F n;°Ì 0`&NÃrÄ'�ìEŸŠS÷O"þ„�ŒÃ£YD±<&¨ÅTc€á¨9sÜ"—=€ ^ùy¦�K ºO9ñíûL¤�Âz4ëè$\"&. ­�F�âÓÖLñpiÌdEGÍ\³{#X)øÕ~V?%Ã'îàtGhx‰á' ïñ+èñ$`Òðÿþ«á<ºcÂðW ßd8ˆgôÖ±ƒ ¿ÆÅ`>Z¼<�tøÁ@æ…IJ¾õG[j� ·ïªq6�sèÄŒ»›C?WüùËÅSq[8Ò%ˆº¸(¤;AäðaÎ §¶mAá ¿uÔiãÔ9äÚjíÄE€ÃÝ'q]szÍÍÁй6Ú½ýÑwìNEùbݵuaÞ¤#G®�Ì”ˆÚïK}‚¹sûX[qœˆ@yêˆ<'6„kŸudÔÆËh®)& XŠ%ªuÒ¼eµ¯lGxç|kÚ¡d\=o3ûxØäãëzŒÆûQûÖ#ˆ÷ÖZ÷{ (Ÿ·6 §Æ*é¼:BtÚQLÑ \¼kï7"ÕÞå{ú(Þa„¦ž"ýÜnÙ-:¤Ð"±k\`D¦o>¼„ÑJ€9ˆ£†J Ü¼9ÔåYrEö5büÇžܵ⌑ ί¢¿ òºn9G yÚÕ)&ï退#× 0ûEë{²b{Ý™ô•û!M Èü@‡ôF¢ ­>˜H™b>_;Õ꣑“hK/èy#"‘˜…8mëˆOÿyç�‡‡‡€<<<<<<<= ?Ý=La\„!%`M¼®:«×—›”ºZá¼ £ˆ  £p=8Pj6šœy©aÈ‚�×àžÀ»~žÉ(´ÙG(±¿vÏ„eÞ„( Ç”†€C£Ö*uHÑéƒûQ¦&æÌgDM],\µsÂ/ô3Zø!Ãlج3 tÇ­6,×O #¿ŠO2î2ü„áe†!ºãHÃß6|‘a Ïpè-c½yôt€Wgsó¸J2tZ uœÄÖqaÁ®�~gÐ#ŠAW2î�vÑEµ�Xæ"$ætï›;ß^Ù ¶ Î�DY·M»m„òÚXÒÐ ¯8ÁÙg€Ê=m¢–„`ˆ5ËŒÃ�–)¸8ñ&ÖHCè©#7Ú±[äÛvÊ Dœƒ@"ÇO®ë¼½tB–›‹s(‰õaçöq \áÍÝl„ ™qC¸:dH0êc%4†K ÈñÜ\¹£vù>Ô¾ùâ=NÔ©¼x-ªoØŒ`¼ýëéêßÙ…ÆÅ{Á‹!`¬­ çõ›P2Âzƒ‰üÛsQ71…Ë‘Æ?Ý¿ˆÿjÄ„�=E|ìŒ1œ»® "ѯ%1„%H $'&`-Â5ê¸h÷2^b„‘_1n¨‰jAˆB "䀅ÃË.…øžYß…Pã|³VÇ —Q$‚@Žà!°;ܸûêàíKîkˆtOtêèÌq` è¾£J8´Y†¾tø¡%H1IUð C‰›ƒ%J13oóÌ|åàAÆ2‹‚Ê´¡üçç|Q‹Á©ø“4õÿóäááá �_´gi1`&À€Y�A(Qô¼±)è†.÷ObC)ÔëkT{Õ\ ÄR°D«ä*A¯ñ®Ÿg Ðý á·ÿ*,±ÜØ€4P¶¹€P`ŽNÝ  †u�±‚¶){ÔÖÀ¸ÓüB?#ÅŸM~Íð5†}èŽÝ†Ÿ7ü¶á¢_A�§‘á•VºÝžm… ãž©oçô¦‘A0_àÃ`.$\$£±;—ù]ìq®8Ò«¡~m' ?ëëȉ6„‡Ã~üÞÔé¸/\ ®¸Ÿ_:o™97ÔGÑù²¡ÊIìO.ìô+gœŽÂ+_¢öðin½D 2ÍbB÷Èq0°§᣷ÎàïœÇ«¶ôá¯NÁaƒ%Hw “9! æ“Ù®;ç›øä=óxh)2"P?^±¡=·nœuq§¹K¸ú¡Ö¸u®‰‹'ëè^º®Š-f]Iì±°H¹>DÁΡß\86}ë,ôe“ˆ§Ðr¶£åVH·ã†€¢B." ¾{Ú8¿x=íÃíK‰DÇe•@á3ø�%ðO¦€}uHW�¥ø9$\•²_Ev •‡¼ÈÃà @´o¹H͸˜žZñЬâãFö L  õÂ^k J?Ê” ±& OÄÍ;¶� ‡¼ëçÙê⾌ ˆ³TTîG½6ˆ0tù€â�ƒG‹¡>Έ@-ñ‡Ú>‡šUpçTŸ_äg”ð3`øzï6\�îX4¼À𠆻ý z<�°`øï†_4܃îè7|�á{ 7àãú9Œk¡ù<@äê!@^KÈ�pU‰2mÚCô¶ÝÀpˆ®X „;¶Nú¿®9Ž7í?gL¾¯Úÿr|bñLÆ= áJ:˜äËgÖíB;‹•JÚ«£�BñÕ¯†:ø ʼŽ`È2¤Z[_².»,"$–SÈ Nê¨�Ⱦ�Ö·ít{ÃìúÒ­†LbNZôÙ¶_bvsÑÒíád�â ¡#äódÚÐÂ20³˜³f$ŽDî!Q=ê °¼©Š°/Щ(EE…`Cj3z`Ë_{Íë§@¡¬¨S5aáŠ' ‰ÎÍ›f°üõ‡“¶IßÅÓFQ}ÓÛú:çý¡,É2»^F»›æÖ™þຸjo :vï9¬å@¹Ž»®¹ø8Š“P3®ÜWçï�GQÞwØN-# ¹§è VNüÉÖ_Œ4®ž®ãgæYé/✱ FJ � È�zÝŸ‘y�Bà'ûÁfO±AŽA[{¡Î[ :¨P”ß÷r þÙ èúiè¥(ýš9l¨‚ÎŒ{ �SúÚ\µ|Ë\Òå<,Á–´*›ƒe àMA^òðððððððèußL/4§¢*fM¨ú˜áeÀ Ž©U†„82Œ["P£QUKª˜ -béÎK z¸x×ϳÜ£€’Ê óÂ@C5=Ž[ÂOºpp:&ÄGö-ópuÞ¹‡¬ ˆ™Ô# kü ?#„Ÿ‚á ¬ âXtGœqYÜæƒÙ{<�±3ãN[Bwl°î·×öãi½aølh¾„ᨃ¢#œ3¶®„ì=¡*ÓɆ蔬¤9ÓŒ;…|s!ål»ìœhq4½ÐÙ!ÃöZp�Pߨ»«¾®çNPEBÏk7¢üòu �Bût4мa&‚¢û�¨SzÞzÞ²#dA ðr„æ%“¨{'ô�zëú@å—¬Cù—6@ —l÷rù¥8˜–$–É•1î^Á½n !c¬ªðÚ-}(uú®J0À$ûu4Húýήe|sÇ2Ž\S»ÀA}Etå 7†�ÝYûê1.Û_ÃŽå(™Ž4ë(1OåæÕ !à°»E†{kЗìß5DbBE:zêœ Ðxµ³àbö–¯Úßê#ÔhC@ #ÈÑÙcÀDŹã¤È3ÛlåºgA~\%[Ht̽– ÇIé@^òðððððððèµo¹l-0˜‰û‹+€AØ$èØ: ãôE~¬h:A€å_®¶Ž¹7Hœ?(Ïg3“|@ ÇLªªˆ"•0Ž Z»—p: xC‘)h®Þ�•Ы‡Ooñç(+ü¼Ð°ø(ó¬4ý z<À"?UŒî8Þæ¿:˰€§!ôÆ‘ ¾k8"óÓØÒ¹€˜‰—�"÷�)É0AÌ®ÚyÓXbö•Ú�'š3cL”Ð�m'¢9onnÞZä÷ANnžÁ!Î~1 gž êí·nK�: –_u5â˯¶}»po ØRÁAs®ûƒ4ƒ•‚]h׆-3"�:bcR/­£ïÙDqöÙl¤ûdÃÙ²»†XŠerÝ `®¤Ì9µ×'­AyaåØ tí×Åø‹5Ðþ9ñ²Û"O“„«R ö„cÕÉå#†®‰K»# szÞ¶¥ÓGAEçzb"ðJŒæÅ“¨ýûNèýQç¥ëPyըᲠOf¡÷ÕQ¿`'šWìKÚà ØÐƒÊ¶ tÖ8¨À"Ýsr[Ž$…”$ŸÎgï™Çû®Þ�#‹øŸ§ŒàÔ±Jç=äH,Ç%K¸’�Ý+¾ôàb’#èeªxý–^ —”x’sýŠÔ`ÛÍ—LÖ±1bvU™„XµJG™�m?Än@6N-}é$xç2 ÑW¡�Nz 9‹o‹‡—ÁWìv®òy«èÄ¡VÅ|1‡L<‹J<³ÐR…SHn'ù¿¡ñðð�‡‡‡‡‡‡‡G,4{&pBCÒP´:�.eÝ•›�:… XK†*nmz~êDëÔ3*WM¥FPxþ8(×7Sjê¤&PûŽS`›BŒŒ©SÿÀNDoœ�ª�ÄÏ-£õ™ƒè>¶$½{ /G僻^<‘Ž p_´ŠŒfbƒˆ…Ocçwx5Æ|bŸ>°‚÷íÁÿ~ÙvŽ„(E›„#IO.uðqcœÌ6üìžQ¼iSUñ3#æh Y¤Èû�ÞP‡GI�‘QbòH 3j()ê5‘�µð# Ðß8�FäHh¦õæ�yÏvÒâ3ÖÑà§–À÷œæ;€dªzÝ4è±¢=†„q6À´a Ëý}úê33@ö ûp�7€<�Çãñx�îÿ£A`#mSliZóYÚš« S;ªA!``+[•Ç‚4úD^g‘x$”x®`¥VÕ(bô"€XÚ(î2F+ êQ �Á@öy¤…VäR¨ŒŸa£à—Œvb0 £/ý¡ÑA¿‚žW FŸ1ú¤Ñi fÂè§Œ>l´ ?è-“ã�©ÓXDÈhgì€Åž:2b„Eš³|ÔÃÖ&1Öß±AÎ%wQDP€ÀTò™EôRÙóo‚} òÎw#Ø{>²MPt˜ßÐ^Füù¿‡~âI If¥$æfÏe�ŒQ6ÈRÁ‘4ãÒS43š±ÑF/¬‚�Î;£&ovqîµ0YÜÚºH -¢v¤ÈvZ;‡�•fDùRtn´výÇI/haµ$¢ËJŽtP­<—Ÿ�fðþOÍ>±òàÄBg5@Ã!*7mBí}; 6Õ M�æ§¡ûèTÂÐÖÔ©~h7ÂK­©“éjt<ƒæßBrh H#€¢ë7¢öž�PÛ†J ¡àþJ!0ŸiãÿzxO-´ñ/.™ÀÏž3бœñÀä$ ‰nÕ: ã³-|êåŒF„Ÿß;Š‹'ª²¶ó�DÚ¿ÂîY4ÄàèÇtÁ[·€v ÛAó?û.›¾û4øÑy •ȱÒ}�Ô[f@;‡ÝØr+]ðs¦� )û0Ú1ºaØ9Р{¢|‘ÿ=æþW`1öt¶>Èãñ�Çãñx<ψ8Ûp`Ê6à§Xñ€@ÍCj5F †ß=†ðhè ‘³QŠÀã‘x¸fÓšZ®A’$„Œ®³H´Ü£ âÉZ×ÿ þP?�ÑëlZ«+1mt¿M›õ°Báyò²56¿dÔÄ`v[ãô'Œ†ð‚7Oì"æß,HÁU�MÙkrÇ}ýH£Á6ÝÚÁzàý#À¡Àì”7œÈ™S© L+1waL¹‡±jÓVDo½Áו*2s1 ì”éäÄ_½É÷‚ÛMyŸv~w½dï�±·P†R%©ÿú 7‰ù “‡$RÆÙy9ï1¹¾l;Zn€NÎÛh AMY?ÕèY(ê=#[ZŽ×ö?µú`÷¹Õg&q—€Ôü©¿wª7m�„ö¾œ©Óyà Ÿ9~y5턪 cêÔÞ·Áö!Hx¹‹ÖWŽ£ý¥cÐ6Ú„&+¨¾s*oÛ ‹ú̹èŸr ÷êjÆ—Ž6ðo™G¨€ýš)Ü´µŽ�ÈíÉ#M2vHXdXìh|ÑŒqËñ.3÷ñS»G±±¸yäL&Ê�Crl+ùÂU’CÒ�—èZºr ÊDja²šû™Ë I6÷£M„¿°h¨@Æàà Ó¨žB¨—Ò�¿1Ûë#)Øcè‚1ÐõÓÀ†¢½Ì(+À`y¯`�[foþx<Þòx<�ÇãY'Š42Ü,„f@@Kª¢‚QbdF‘vßþŒêôdä��³XiäWÕ(ÿ¹H4SBmµVB'�'ØšŒD�¤ !“†3é=ã~Ÿ˜¼ùs.€_1z›QƒyÑècF_6jùô¼ŠÑFY£óÁu<�#£«­‘zíèûû1Ѩ3"B¤0j&�k.9Žõ‹à7ÿÏ;ñ‘÷?�‘zÛµÕ�}Ow1�Fþä¶^?Rœ�VqQI”0À%aÚ^c÷šFF¾öF„׿ 44™«k¥n4Ó§ûÕ[€Ó³²Ÿ¼9Õ+Uî<åž:k¸(ÍÒ\ËÌ77]t/ ~ø$ŸºÉŸßžJ?z ÿ3”Êšä 1·o³ÛDß�%#»ìyW¯Ëu(\k¶ý�='SvÙJù¨%{NTlÔ‰A§@g�n‚R‚à$¢ð ‡²¯ÕÉÓ�Ùç]¾wèpãÐD¬†ð¼Q }h"c HS§ù•h~ñô|»×ÙdÕßfŒ�­ ñrD}¬�ößB÷ÞYpÛî´s85Ž¢k¦�È?¹·¸‚øL8Óh¡£ñçÆˆøÝg–ðš©*þå哸ÈÌ$RŽáÌQ}m&øÌ¡U<½ÔÁõk¸jC#‘Sî­$’ýôÃ�cCäôí0YIM ºr¨âgÖíMÆÏ-Cýødy4 cèºéÔPB=(ÿ�øÒ*ø®Yàx� ‡ «&{ó0Ç®‘‰®È]fNë”÷¸ Š>õ›ÇsÖ£üx<�ÇãY/�ÎLŸž˜` F"-ë08†IhRim”€‘QQÐÓû…ÍëlO†ÃÑíÆÙ·Û`¶:H + ͵Bh(d&dëí£±ÿIý�?ÓF? àgŒ6`0sFeô—Fgü zÎ"šF·XãóS3z‡5VÏÁ÷ Þ4q±5rAÌ`iø�xÂ(6ãß4µŠO|ô+ø/¿~'Þõ–¸þ5ÇñOßû~ã_Ü�(HÊÚž 1þäV`>‚ÀÍAîWc£TÈ”¬òQÜ¿/�½–*ª ¸ðjDoy/ÔÖ�@ @ ó ’gžB÷ÖÏAz©p.)2zFs¿AÅÚÖíÉE¶�4�\ú7‚ƒûïƒ×ÀóËiiTl†0;£Ië¾ `(ak#ìu%Ì5 ˈ m予ˆ&Ñ�«_`6²¸oi~4; s€¹w0Ë�ð[¨Už·/•L(g«5øåC­ƒ‡Y¾üTk®Æ „ •k6`胻î�$9Ö@ëo£s÷ipË™:õìBd̪¨þQˆŸYDû³‡L¹”ai ¹Úv#8¬ôI^¹yRÎÁÕ.~óéE|ùhÜ=‚_:o›êAQTšÀžbqºÈÖ <µØÁ­ÇhiàýÛ‡ñÚÉ*¢€°.(g\I¸àgLB®‘ꮈ4œºq3è¼Qgêɉ�üð<øþ3ÐË]hùVl®�Þ¸Ñôa÷ö¡‚{êhð“Kij8,uÉt55‚\[*?Óé•;‚ÌÒ<ò)à<oy<�Çãñ¬‡€4 .õ–¥£Ýq3‚:ÓHØ þ@Íœ¾ôLP>Æ‹ÀÕ]PÌ0�^l•àee¿ ;ÔKKÃ`V©‚¶Ç‘ê üÏé÷ßø©e§÷a0míó1£ü zÎbf�>eôi£y fÚè}Èš¬ß[˜ÿGe"6Òæ LŽË/˜ÅŸþÆm8Ï$W]t o¼ê¨3Aí¼Íà#5”Âv3øÑ17ž3>"e™‹œážy¢ L‰\_jçyˆnz?‚s/ zõCôʸ'}ì0º·|É“q $Îü"æò()­í5·~²Êæ/êØ’•rfØ5UFI.bFkÑV¦ßƒ•LQ'CIœåp–0¡ÄkÝo(HÓ&»Db©ä RŠe‚¢’tt Z^�˜Ö𽡉VQ¯>E1AÁ +ô¯*ZmÝ}áùƳËO®<6µÔmF@š¦­ú¶-¨Ý¼jCU ©™Óú냈ŸZDfêD—M¢öÁÝ.‡Œ€áŽF÷¾Y´?$� ‚�ê¢fP¹9·»5è38ú vu$¶‹çZøè“ 8¼ÖÅÿrÑ~Ò˜Tõ€à מܰ…ÈÏ2mÍxz¡ƒÏ_Ãt-H� ½£¨ ZPšYÁäîO ¢D“<�uiÖ•Íû�®F!�.‡zË&Ж:ÀÒ¶íçÚà{f{}t4l/®î¾Ð6[ëÈ�ë‚%»?ÐSK@[Ë{%î$3§r¸%"²±> œÇã �Çãñx<žõ¨YÁF)tu€Bøts ŽÀbV`Îòˆh(o®¡òæ‡2é©�4€XwÀD€�@kª<×í™@* êðÊ$28·£C-lûÒï«ñCFWøç¯ =ÕÃ6ýÕýF‰_E�'åy£ß7úªQƒ9ÏèW]šÅï><=VóÏ�³ˆ.0}Äž2öÜö™üÖ¿º “ã-”qþîœß(3(ÑH9P?1Rœöí·v�oÛ`Ó¥ ÃAsiŽ‹L!0)g4zóTÚž¦6!zû^þPµÞÿÔ$F ¯, ¾ûˈﻼ¶"Ÿ®ô›@©#ae’O¿]¡c”¡(%L”ëÇv¡‘û›¼qƒ’=R¬€Âuö>Œ´ëG⌣~S"T$aÒlrFeF ³•œ+;¹õë_×Î�“hРpfñ! Uÿ�jÛ•"«Á15î/.Å«ûŸXù¦~qí…ñV’Àl­£úþ�¨½aT ÐÙ:�{gÓˆ äh:3uLÝê{vBm® 'éž@í[�¡óÕiZ9Ôt•ŸØŽèÍ›AÃ!ÂbyÍAV¶h'½ý�þ“1«Æ#…ÿãâ \7Sƒ"êkÃEŸ QáœÚ·œhàž3m¼f¢‚wn­§†�4¨Ü1ÉSƪ¼&_È šÁ/­@ßv|p `ô3‚®ÞzÝF`4i7Àwž^.裀.›]·�PʉøîÙ^šQ¼à³‹ï~¤ Ò¬e°5‡xëÇãñxÈãñx<Ï+ŽÒL©F½’šq˜^~di+IÝ>pP€rßZ°1À•À›^ýŠ0‚5ƒbj°2"‚�y$xº1(͵¦Üç�UvÌ[Gýé÷ÍüÉoP_Ç`Ù ð¿h´æWÐã�$1º×èwŒÅ`”Ñë¬{¥á» á= Ú�=deEÎÒ2E™3†¢Hãßÿ‹ûQ¯ÅøVìÚºìž[&ÈG€hþØVðí“ÀÁp þëMÐÿúð³Ã"Ýœˆ‘¥�oÞ, fgl$ Qeá•7"zÝ?�L1Ú–�6âGïC÷¶/@Ÿ>nÇÈ÷�Õ%aB '¹wgue~-[æ‘ÑNÖ0#­Ý çúÖY¿®m¢¥a&Œ2¹��‘˜TÞ1�iÂäš»û ‘NIsˆú¯‘5IŒ•oC$£¨\EfkäÙûd'ƒ¿Ä®Í¿ ¥þ €?3Z.1xHœ³e^)tâDûÔ�G–:Ú<>’0+ÔEã¨}hwšºMš!z±ƒö-ÇÐýòq$KÖÔÙPEõ]ÛQ¹q3h$t¡*–øðšwñCsÈ"V‚½#¨¾oÂ+z{1.4?¨$¹�+8w‡síŸ<°‚¿xy×L×ð�÷Žbº¦°P³xíêgæëáFŒÏkàP#ÁM›j¸~ºê"Ž‚|{#L*I¹KfÓ±=>}ç)ð™6$4]íídÞKT”5�É(7XWƒŸ]c˜m’‰ èuÓ©„ª*IÃÈàVÀ÷ͧÛÅFLEÍ¥la€¨È¥cïyb-m3¶}¹v¥ë]ž¢+°k$ÖMîÛÂY?šÅ¼ÐúçÀ„£úϼ{óíÂ"¨½Å~Æ£óG¹cƒ\-wŒz] mÝUß×ÞXk9Ã'Mç–i ƒÉ½á%ˆ®œ"…”„?±€îãóé1燥^ÔPxÕ玹÷d-Fç¡3ÐÆ´1ˆ÷¾dö†‘¼®ˆpÃL ïØ6Œ'Úé^>  –}fösÙDÓÕ_;Õ„|¯ká s}Çp˜îôüjŒ„³Î�uéxÍDãŵ†~óÙR>—¾R¼…îóe¯ÓÖ:Èx IW§&��rÏLtÁP¡3ؼO8Ô°†fÉç,Vbäaˆû£€*·>†ÚŸÞ)LCZ˜, £Ïø ÿ'Öãñ@�Çãñx<…p¨töàÝ–*ÕJgH=¿0Ý;G†•2"ÒõfCºé£]¼J¥<ÞYæ¡ )#"#h˜IiL�Íî&†Ê})=­¬ó'ö?¥ß3ã§bt#€ÿi�æO×è£ßõæ�ÇómqÂèOŒþÎhƒÙlôOŒÞo4ŽïÞ0Zó[œ½îöV!Í™úMf �Äxÿ;_Äz8xl(Ü'Gl4Ÿ•,Í ;'°m "[˜¿å>5¤5‚™½¨ÞðSν`kþäÑ€>s ݯ}ÉS¤æ�Aô¥ûç©l) -;wý¸>¸'"‘æLÞ—ƒm]êõáÖ�aa'¶J4 ®ä²@ ×HD1¹û�QJ®½;%q÷œ�f¹1-yóÇÕ%¸ô(Ž4²§\�~‡ÏÛñ>kþH:v/ºÿ`ôˆ°”ˆýbXJ,ÕlêÖKûמZ{jù™ñ•n;=9QAõ�ÛP}ÇVÐxÅùö~â'ÐúìA$Ï-[#•¾f µì†:g 2 „› ºwŸFçŽ@ŸjÁ�¦‚«š”pÑ�oMWEDTq2;&Û-‹»#gôjî:Ý¿{b‹]�_97n©£J¶q92\bt´Æýsm|íd[‡B¼csÛë!¼´žTsòškM\Ô^‘F|¢ ýõÓ`ó~ �"•šCiDÐÆ*" æl;MéÆû—�XôèÜQÐë§�™Zùâ-wQ¥Ä{ ¦Bö@® ûÐ�Ç@�Çãñx<ë"TlÓneÒ¬h®µ +hråíS®Æm=±¼ ð*’„½ÙáU¨N;ë9½+ZC…c÷�œ) Xíc±½™»IfJ¤¥Þ:ê£~¾7Æ]àŸ½Á(À`ž°ûüÜeäM9�ç;ã)k¤~}�?O[£öÍF¾˜÷¤ú·Ä§ÜCv€‰œ1dy×�1T�±ž{y2opôí Ã"³H>Ý”s†CY 5kLÐøFD×ý$‚«Þ $àµ%Ä÷ñ=·€W Œ‹0„ÜzõO‚•¦ ;‘]hÍFY$ü›³,SÂb> ñ^ÚÅ}§‚÷ÚS–>$öÝ�h'Ž5»Š„´­4¤™DZ»¶Î*ßÈÍ‹9PÿÀÛ6¾Ç˜?†JÔu1])$Ž�>eô_ŒŽˆge�ôÜëâó ñâK�­<X;8ÚN4v£þ��¨\; ª(0úM�Î7N¡ý…#ЧšÈL�èÍ›Py×öt߉žk£óß�¢{ç)$k14µ©fêï@øúP=�3tÇ2’$•ûÙ‘îM#a|éXôü2¶ÔCüêc¸l²’^–c—3ßÕi„ГK\>QÁ7Ö0*ÛÔͳ4ÕY «”ñ óÆ£#éEúè;N�Í}C2‚¯ÙºzÊGîþ¥Exp |×iàH#»æ¨ +&z}ŒE¹ù‹¹Ëèrr}rŸÁCD`»Ò†sÁ„äÿUõx¼äñx<�ÇSoj6ºÇ�–íd­dš´6âôzú:Dœl^›GV»Ýê//H-/Ì`Š“]´ˆ�»Ä¤²¨²Ôh\êLƒAè$CH8C�™@ÄÉÕ›½ôÝ7¶øŒÞm4‚Á7ú„ÑçŒVü z<ß5ºFwZ#è) &4z“5‚.Å+çÀ Y VÖx þCï~Û�u›?Ͼ4å̈$3?œ©!Ʀ‚˜ò%DwLÕ!„—¼•kÞ5º*FŠÒÎøA§ƒäÙнão¡O‚A]EQ6bä껨©Ä(UŸ�Eè7…\ׯ4Y�{mEz¼"cF¤†ÊK§f�ëC¦äËrr}¬É$ú²Rʵ¹ëeï)‘ë?a#-#†zk ðoÿ0_²çß`jt¶Ä´a+×ý–Ñ_åþý’u•|Ÿ•Â\Ò'޵Oydù‘‘cÍÙšfhE/›Dõƒ»^0ÞÿÖÔiñ(:wœD²Ce¦ÎÍ;½A˜:¶L¬ óß!yl¾·.„4=\å½;\2!>ÒS4pá{é çKÌvüåË+øâÑ^¿±†Ÿ3šFí1LÈ§Š”×‹°û%¸õd³íĘ@Õ4}\ˆÏ‘ÕzaJå �GP7nê¥{ ×SZ ø±è{f�Å24,35Ð Ó½to!Iª§.ƒŸYîíí3ß$SеL£6 ÷¢ò>À,?‘ýæÈ5tnÖÄžføM€<oy<�Çãñ|K’KgV0˜  �¤Í˜ZI¤†P¤“Ý3Y°_†Ú> œ ÕXé 鮄”:ÞÕ9Íl:8­tÇ(Fµ×‚Ú©é€AzëÈ Þ4Üõ?¡ß5ãgÔè=þG£m̪Ñç�>ntÔ¯ Çó=cɦ„ûS£̘Ñ{�þ©ÑV¬¢}кßàÑÎlÈÒ‘vÑժƮm+XŸùÒù`†�û#I¨ßp ;n©$÷ÑÈæ,ë‘B°ýrT^ÿ36]èž«œùC }d?º_ÿ ’�»´lë�ËÌ žÜzéþýŽœ�#S§åÂ&\<†fP¢íû! +fa²0À¢^zMDƒ$Ú½ç"ÚÈ–V¢�0r\™GF%ºÈÜs¸ónœÜç‡Á§y¸öë|Ù9¿ÀÛgž{B¯UîüCF5ºÍ(1R9i‘ÕŒ ¢„ØÖEsrè@ó¥…Ç—Ÿï¬¥kAjèTß½js]úG©©ÓþÛCè>2gSˆõL�êûw¥”˜~ˆ�7FÐa·P¤^½•wï€Ú1,Ó¿ÉÙ ó‡­Ü«¼§ðÂJôÂ2žYêâ§w ã'¶ a4R®²�8¡&R®9 ÍŽ„�g—»¸ít 7ÍÔ°}(å�0; f«"�YWuãfÐö!Ù�s¾;© Ä�/B·ô¡Ø3 zÓ Ì$ź²ëǬs>íÍDN+mK×O;lVLÂ9#r殈ð!\àãqî׸7~<oy<�Çãñ¬‡z¨y¤²bó·‡H¸°"†¢F< ìwJ¶ã �pÌ@§½­}8/'f`qnyˆ5�$ûø$ˆ95zV“ `V`,iô™¢¤ûνÞtøî?¡Ñlº·Ë0˜Äèn›îíqÿg¥Ï÷�ÃFlô÷FkÌ£�ý亢ù½)dM÷ÐQFeìܼ " 䨩ÜvïÛ�hÀ°�='L’’è“þþÔÆ=¨\ûÓϽ+ýOAbÛ|á$âoü7ÄOÜî6ÈñÄ1‘0~dÄLþ˜S38[?’Ñ-ù~�¹%¢ul·öšŒ„ [Èzœ‹` (U%EäÆÓZÁì|/Ÿ»ýAFêX¡äµ‚ƒÅþ@_4ú¿�žÌ~FÊŠPÄù9¬­&­—Ÿ^}ºûìÊóckq7­´¡ŠªIñV¹i h4‚4uº�- ýw‡RC(oêTß³jçpd ¼ÖMSÂuo9žkÃ�öƒ#z«c¢‚.^ i4BΤyðL hŒ D3þéÞQ\7]E˜oGdçHƒí8"ÈëÍ„ñðbη1)(ù‘¹Ò„œ3Cᨠ×LAÝ0Ø5r°;:º|ýðÒ* éŠ]2zÝ40Yqó ­sª¾ç øÅÕ‚=†tþ(èÚ)d}géß2ò®ÊGùÞ‰OÿæñxÈãñx<�g�ð†ú" ]3�ÑS3C¢h(½¹2¯·Ð$:éby¡á�/dZ]JÐítr_Ð)U’�èn|aå­$”pdBå÷  ¸®a´¢ýOæwlþ\à׌n4Š0˜ýF¿gô5£Ž_A�çû=j Ø{�4s…5x_o œ=.¢†Dº1{ÞÀŠ�=œÜ8Ý âDá×ëzt»Êõ㌖|ú²¾¨F•”¡u.…@õ D—ߌèÒŸÕ&œá“+¹µŠî#_E÷�ÏC¯œ”�‡–{?&329l_¶?²×dÔ’¼‡¡"lÃÕg€ú Ò¶¾"È&HEæÒ¬I´ì¦CH!ÍÅPDòØÍ¥ÈP’u5§"ÀH@v*apïÞü>“îí÷1Tk Ó5Àø!8ÊÚÍÙ´¦3:‘·« Û K«èúü™îâ¡G—‹^níjÖ‚=#¨™èžèª) $pÎ<äµݯŸJ÷ûÑ™©3¥¦Qõm[SSG®£>ÝJëÇ÷΂m´‰Ú:„ÊÍÛ¡®�v˜›­„Éy™e¬%À­ÇøëC«Ø5ៜ3‚sG#°ûÌ®c_ ’×ûÌ­¹ŽÆÓË]$ aL‰Uf†4ˆ Æ ë`I&+P7l]1 TȘœüÜrooŸS-@2õRº]>Ô‚ò}È^^K� œ,èc8]<–[çÍeir¹¿¼sé݈ÜUoþx<oy<�ÇãùvÐ{'–ÐÕ5h` %ºB«ñ(�‡«Éá"ÊXYX„Ö)¯³]Ì@«@Sn�Z2X÷êtu½ ”K_CU‘ŠÃ¯Úà2¿mãg“чü”ÑsÚè“FŸ1Zð+èñüÀi}Õ²Ïc0£³†ïù(‚PGfLd%ç`*Ò:¦d:2‚AüîŸ_†ý/Mô§3S*SDÚ”˜l¯kg|ôV«~jj' àжLbÄ/<„ν }ú¥´/b£D‹=täØ\`š 7çLº?JI•¤µ“ýå�˜„ûíäÇ‚#ë�d„‹vv �H`¦Jö[B��äŒ,&ì»$Í)²eî8ÅE<àî‡=ÏÇ‘¯Ø÷/13q¢Ø¡*è’JÚPNÏý¿6ýâZ�u¢Å¹²¹3pòhëØñG–;ÑZ¨1!¼b cûF!í#}ª…ÎßA÷îÓH¬©cêT~r'Â×m´†õ�œ¼°ŒÎç#yzYÄXtÁxz­üvYx%îŽJ!©V‚Ï^Å�³-¼q¦†÷íÆÆZHhûõ¨²w‰ ‘†’„©àcÁ >Þ?pX�!HÓÁ©·l™÷ʶ–c75øáyðƒsiz7H6Ûý�ö�!¡�¶?¹~hXîïC[óJ¼%{4X~Ô¸¬™ßÿÇãñ�Çãñx<Ï:á±J̪÷d7âï•kñTrÙØlT­+X]^g»–0<2 ­ÇÜ÷S è„ 5…Ovv�Hs¨Zç[ƒG+s`@\Ú¨?=ì:_‘ñ3dô~Éh7Ó4úïFhô²_A�燎y£Oý…Ñ,3iôÓF?g4GÎŒ�ŠÛBì+Êpüô0VV#H²æû‹KñÙ/� ‡ëÛHž–Q@öX>¦>ã#Øz©1~~Á¶+€H¹èeKƒ>ù:÷É�o�N__L$æd¤µX““ƒ‘Ÿ‡[›œ1C£c®¸ÚŽaáT"ÂJ¹ö,vâwÆŒØ/HôeÛ’v¾„5Îúë'bo'gÚH\;‚5Ì`ïÅEd×À9%:oìõ›VÒ"a×>ï˜ØQx¤öø5çþïÝòhI3å^‹Ò++bqžEDO–òôßÝUÐ'\)Çu}Z¡Ûáîá–_yvt±Ó ÐpˆèM›P1©áÔtUôdM“®ûÔ²ÏV`L�ê{w!¸p�FE¬s�/�>Ú€†ˆ˜K$Û3•š1©$/,uñg/¯âÈZŒ÷l¯ãÍ35Ô¹»q‰ŸC”Wb*]~[ôJ>Ý‚¾óøéÅt�ú tþÔ›fÀ[j ²hµ¹øÞ3àg–€Žè# àœÐë§Ó‡[s1­¥njñ3Ë@»×‡b€I¸®\dD»ýÀœ¯ŸŠVœÛ›@�7€<�Çãñx<1»�‡£…þܶTß\Ü‚0dÀ@ŠÑ¡ZŸDsX[ñéÏÎf-ÏÍ5ûÐɨ64…$®ÚT� ¬¡©qZÒÓ`VPHX©*UE5P [YJ¸à‰Ó›üO續et­Muµ­#ÍÔ6ÍÔ7�|º=�燛—ŒþÀ裳×è—�~ܨ^ B¹ ‘'2%kà7~ÿJHVþ·�Þ€O~î0¤±dDE†€˜‘uýÝùü~9jl;*—ÿ ÂóÞªÖmÓ¼)[v^›E÷±Ï¡ûÔWÁÍu“KkG #6©Ê˜�ŠÌ #ǦLKU\y ¢·ß µyK¯ÍÎÔ"a(!מ욳0á²kTyãö²ã9c(×%Æ‹Œj‚�G¢s&RÖo®nÂÅF�c@*?�f0s5ú+¾h×ûøâÝÿ �ÒE&�•D•\×0 N —¢Dû5 ôm*TU¬TräÇZ[‰‡ž\}F?¿úòh3I`P35TnÞ�è ›@CúèjÄÍ¥Ñ=úÈRª áµÓ½4o[ê�£òJ�ÛO ¾íD¿‘aö Ç«4žŠ¹Ô�I4ãÁùþêp‘"¼mK=M§H¬v Ä©¬ù4x?"y�¸`ÉËÆf€_^ƒ¾ýøðšmâÐC!‚+§€ë6£QáxÐFæ^ù³À¡†íCì1téèš)`,Êý 7ûx úþ9à`Z³¼É¢ˆDÑYIMÂ>œÇs–B¸kί‚Çãñx<žõ Ñ;*ŸxâBhV4ÛØŽDWsæO—#j‚™ôŽà@|Q{«K!–æ+X]®àÜK7#Œv¢RÛ‡cãÀè”_Ù³�¥3H£À”HÙ’€$‰Aô2ÏÌÒáÕFt`ê|°R ¥³g,ÔEÌo¨F%ì΂ì¾ckü €y¿È…æÏ>o7š~’¿l4ëWÏãù‘dÈèÍÎìHËèú (zKncu‘bLlÒ¯¬TZçõW�ĵW�Âäxw=°ws š�×Ôÿš Ò¦¹(šì8ƒíkª�!ÜûF¨ û€Ð™>V)¬HÜ�äÔ³ùTk¤HK»§ ”�Dô�Uþ Á¹ ¸ô ¬ à•toýbZ�IÎ9CJÉù¹ër/sëÌ*gÀ ²Eb×·=N¡’þõ™pL$×F¶q(Ñ·RbL ;æ(¼‡·Mÿ6oŸ>$Ÿ^‹×ƒ #%ãÍŒ´ì«dC—½×hz€eËÒ¹‘RPwÔ¶[k¡"d†Ï ˆŸ^Df°1¹fjëÂk¦Óý€2Œ1”Fþ°MOÆ®zÁL¨oL뉼¡Ò:L$²¡xýÆî›kãH#v}X¹9æ ËKͽ5Æ‹«ñ@ˆIV`w}PdÛXuÑô† ”p ÁFf]ùùU «åz:F#УÀ†* 9Þ¿¸*"†¨¯®* S`–Š5«Üò(jr˜†0síÇ›Á à³>èÿyôx¼äñx<�ÇSD ž›?7¼ýà>1ÝaZjo pE­�ØæÐJo҇㽠§±²¡¹ᜋ·bxì"´2hd ˜ð[¸œ5,ΫKöaS`K•–©Z­Ì.¾Py€6#‰"(Å€@D &B¨:@ ñZšA±ÑFÿÎè>1W¹9‹4¦ä9tZº{ôùÆ�æË/Ž.wÛ �Ý´ÑÛ·�&«ý=3#Ù¿„öç!yn)=§!¸xá{v"{x ó�›·ÖqõTEÎüq]J³Ê!^ŠÈ�˜Ç ò†æ‰&’;O#y~HÄ ‘]4zýF`º*÷s71Ûß3 6} æâµca¾•Ý3Š‘iàØ1Pøù-€<äñx<�Ç3€ ú«gn …æ8²/91‡4×Ü�€º�ÝM™ ÌFÚ(&Dq#Þp섾|×y˜Ú8-séÛh ÞñÈ80>¨ßu4‹ ðò¯jY¿f‘ª%NÂVªàYI´xÔQöE�ebÑnÐü¶­­'îñ»Æâ,°²Ô*3s¦–QBm@Z]¢vÒa t¯Ž)a •$¯Ýøomß8¾�äüˆ8~çÞœÆYLíþ=𣛌†°>1ºÝhÍÿªóx^Õ„F×½Á¨‚x´þa„j²è’ Eå©Ç\”I.¢D¤+‹ša�-etŽE�nA¸û&`l3”t�67æ¸zéHn,×��2ÊúwÊ£Ü9–8ÊF×È4fQÁù—] ¨Ð¹yi»Ê:AòôãHžÚ.P¯-+%#fŠM4•[WÎΉ@’mÜZ²k—«—^s÷Eb däV¥Üœ\ª¹‚è°Ârr5×+_ÐçmÿL�.Fý x„^Õ#£…Ä5Qà]¡¬ž˜ëN£÷�GÙþBUt?6W7ÔvÖ¶®VÅ00R£'ylÜN ¡É Â×N¹ý€x¾�îħ›b&θfЍâܹ*rµGà 5€6V<²ÐÆKk1´x'D�KG�ûèˆôs\’"±Ø\‘F ²ý³Ü>Œ[ë8£çÙe ™r}+ ´o¤×Xè€^%k_°Î{åK�E¹ut22ÈGy<Þòx<�Çã)%¨üÑcoE'© O'®¢�¬ÀÙŽÉ`­š 5±9Nί�é˧"Ž`)íJR½”pÃcø°Óàþ4 Ìò/híù¬�؃€];{Â=¸�9#,î4Ã"Æ,3™ žAŠŸ3ÈúY—‹®¹ûrÓpç ß‹g€•Å‚”o¶�ÚŒðáh�Á+�–jéU�ÒF`R @Ðç�?¿cÇqTjýÙþ‹(áç—AïÀ!œ¥Tþø3»lšÍX‡�n5:áÅyõPh2ˆ4l’ÆŽ›xadã-µWMU3ððB§;‰0œŠ  ÁÑ?rίèZq4ãD%�ü�™ $š�à ðK«@Âå㌆½´pÌ=eÆI©°ÏÊ7ПÜ.¼IóÇ]a{Χ€óx¼äñx<�ǃr‚Ê>úvttdÍ‘ì ’K&œ¼ݤ–¥æ"Öi­<^›¤áªŠÏ­@o¯dM.ÝÛcÝSã€á‘oÇø& †�ÜâWC&Y/ò‹laþu}ôŠ‘‘EZÜ[vÔ¿å1i;ó)—BÅÎ[Zó³@s@µª<ÜHM 0À+�¦jé”Ò€b&£Í•ƒÝ´íE �hÔ‡tôÉýçQ3’nôŽÑÇÄYFåOþfÀÛŒ.ÂúX6úŠÑÓþW›ÇsV³Õè�FÛû  @í‘$"º£äa>zFòï‚�ŒPïb"œ¹áÖë€ZäR½åâ&tÄHN<�øè½@Üê3{œQ"¢VJ÷'’u \�cM"šÜ„ðò×�&6ªß˜ÊàÕ$Ï<}ú¤5’„iÂÊõïëÛ×FÎÙ•�†›¼a �ûÖK®�CŒAdëÊÈãüÞI¥Ñ>©˜pÓãÿU_¶çŽ¢”hò¸ðú:c°…ñ£ÄµAiÙd4Y•Õ—m*Foµÿ>GßÊä¯ó(XªuU�Þ]ßÖœ®Çx¹‹Îç#C DuÑ8‚K'�H¡ó/õ Ë`óg€aD¶,ÃÕ]§û]2áD+ÁK¬%pä  †½ Ò¦1•€­kÿÙÎö]rïÛë óÆì^K‚Ž¿°oŠhFaÖŽ†Àj,îA¼ã—@ éZ2sþž¬1”MÉ@�7€<�ÇãñxEµâ:ñ�ÛöC'~éÐÕÔI†m4�²‘@ÄÌŠÇ«ãT­(0ƒ‡’}UèÍ‘3‚ŠRÃ��0êE �6@k(¨¤S‘d‘ûå~´áþýÀ1»{Îö€Í=NÅv™|ÁD@ îI«=óG'yÃǶ±¯ N'kqîAÔrs…:I¤h=®Nuß5ý†G42èãO_B1G$×l}Àqœ%TÿßFn0ºÞ(Ä`b£»�î5êú_k�Çr©}P=ÊÃÕ# ö€ FF¥ä&è\ÒoV,Îh ¦/D¸íM ¡qg¬„p&�â¥ÃˆX;–FHÌ1qO)sfB_0U‡\|-ÔŽ}2�+[mÄÏ?}è¹l­„A–EÈíÕ“Õƒ0s`�©ø´í×™Be)äD�´,²{kÁÑHŠ ïÇY"F“0�hbtè“úò=…zµ#…•˜:†C2Fyj8§ˆ+½Ç(jWÒϤ�ºJÔQ²mAŸ ‚ÑÉptl÷ж­ÃöçŽ�k]lŽP=@ðš ˆï;-Mi ÊM î[UZô�…ɽ¬(ÂÅãì ðÜjŒçWºˆ)—NDh&À‹æ•@ré˜?rn®‰ü݆€@猻‡{ç%Ë]ðs+Àb·hMŠ×_˜h¥©÷ì±3€¾׈³êÎrWì��òx¼äñx<�Ç3Èúøã7¡Ñ �Á øúMÏëó†tx©Ýzì5ÔH&�Eq*¥Çj£T­`F�($çÕ 7…ÊÓÂ�{9ö11ÔGI #I3 I‡6RÎL ÂÙ‡îfÄlׂì�MÁ÷üž�X?�ôŒŸÆj�ñãŽ)‚gšPG:¹Ni{Æjg…ºI@ãL÷¦‘'05ÑÅаFµÎ  *¶ÿrd°›Aç.½ÀΆþñúÿØb}(écýõË‘1à4(JHDY M­}F0Ú!ú-2¦äycÑøt4ºº©¬´§‰A üdo¥‘<–³ІQhîJ[Oš°œŠi�GÊ>Œ O/wp¤™ä"€bÈ{`‚À¬ƒÍœÂÔo’r#i(]0 ÌÔPÈ©øùU �Èõ,¸‘Wf¹ÌÔúÄí°ˆ¨ýxÈãñ�7€<�Çãñ¬‹ úÓ'ÞBKíq12˜)¹jã‹Éec+h7 Ë+Ax×Üu´³�4W¬Dz¤:JµJFÿž< œÄܤd£‚*U`b¨§ç¨Ë€.ÿÎ-óis�™äßÑ ÍFÎDsM‹ç0dë*ÊJ·ñwH½Toó§æü?îX� f»om†LðÂÝXS³»F]ë }¼{�z“] �&™D'»•è–Ã÷ÚgŸCDªÛùµ«î0�W1C7T¤lÈ »ÏÏaÿa÷x<ƒà‘Ú�PôFÂ)Ú†ú÷ðá\ÄII‘ì‹*Ã7½ÁÌåýýWàöÕI:ˆ�Ý�øôÃéþTs:oH@$S͉¥¢4uJ�¶žƒàükA££€?öXÏCòÔýà•E7&‘0QD•ÓMr}©È,+ZÏÒ½CÜ8–©ã`Ke×P•Fk¹õ‚œƒLpôÊP=ÃÛ¦›/ØñT©Ù☂íÛmïÊbDÿ¢nùØb~JŽ%ûµu®3ºÙhL˜Mã�x­ ç×I*á|c“jÆcé5HL—¤ Qv‡ÇÀèŸòU’'ós”¥û]<¡­1³íD¤€+5€„éµÞý�Lƒê”\ßP]0Œ„€D3p°>´$…óãŠßåóƒ™ûöe°­J`Öp°7€<ž³å—Àãñx<Ϻ ”@`VÈC[ÈÇ×ÕŽu¯OÔ£ñIÀÀi& �l‰´TK Âo®!úÆ*Ôl�‘TÐS�+ã.0{ 8v´d7\Í“ÔÈ^;�#®…@d‘)^VéZGAº>\5ŠÀî[¾M%ç¾èë\ÉêÄ c'@'Oôê¨ÀJ�{ÿ(Ašî-|`ÔÒî3�÷ï¸×{2Õ<Ô½låE„JËô7Á Kc°ô}£ û*7~FŒ~ÀGÖiþ¬}Áè�½ùãñxÖ !v¿ï5ÀŒò]VaNFàü9a kB§¯AåÂ_D°ñ €)3|zèž’O¡ýä'Ÿz ›êÕBšs†Jn@rós±¦‹03˜í<�™E£Óˆ®¹•K~ TâÜ#ú°wÌKKˆü âûnMÍÛ—(åØ�¯{×Hs±ñ#Û!×–ÙÝ/ÃàÆ³íÚÍ�ÜuÛ$ëG1w÷Ú®»+‰r÷ƹXJÅŒ9Þ0öïô[®øˆ5YŠc‰4NÜk'Ù^ÖÉ£P^G‰¸%ú¸v²oÙ¯¶iXÿ­�ÊMrãÑ€ùsáœ*A7ÞÛJËñP¡&ÀM7d»råæÐ||ßð³Ë@W2Úhï0èu€Í59ÿT@þþ¥ñ[dbË_¹lß rf\8³œ¼ÿ8�Ç@�Çãñx<ߊ€0`EVŠÚq� Û½bõ…îî3OrÔ]£¢m{uþ»A-&ˆÈŒ m „К?¡3´Q£ ÌžN‡Éõ«Èõ«\ Àõ@𤀀J ÓµsmK-ž4×€SGz¥@J kü�‘RP³1¢Û—n[Ã'ßgF�'ÉÞäp|ÎÂ1„!#0RÖX2Ðñµ)›×B4ÄcÕÕW©ñÝàŸ]�Áh£{Œþ«ÑcFìyy<žW€‹º-4| ¢@�‹MtvÎÂQ#{Q=÷#·Þâ .º&¶/W�¡óܧÐ=ü%p{Õ™¶/{d 'a4¥õX)îØÒ×_frPXCxÁQ¹þýPc[U°“Z«ƒäÙнûï Ov&Œ\CrórãØu’°0k$2Í-ËH’íræ˜ë;‹š¢DçúFÏ€è÷ùpóÊL wõhýSúú Z_}î­¹{%«"HHåg%J5 ­0a VMô]R_^ÃCIÉër ÑËèóFÿÞèI”ÇÑ�P)ôÑýèÞþ$â8o„ô¯�Èk„”D‹g¿¢�$oi#ÎÄN‘E€�êé�x"{�‰µ²c“ë×"_‹q\ÉÕðN}Éîé7\òjŠèšòÈžòtnRªÈ 핸^V�D]×·œwy¤ŠÌ$!eYd_Ï}Ìèw�N–ÌŸ (5¤ˆH�׌t ­,pöÁ шDÊÈ}L †¯/b†4EõœÚ ,Ä·l*_faÆö·#æ‚ñi}—œVWƒ÷¯€ï›æ:€d"�;â 8gR‹r$¢·¨ÿžòAÌ>þÇãñxÈãñx<Ï+ �}í!†"#ÀÐÑ!*UJ6.ˆõ64»o߈î5ãàá Ÿv¤ ÕHOj>Ft÷2¢{VÓ4qÔQÈ¥³†CÊÒpò8�tzÑ+µ Ÿêí»¢@õRà ‡@¼œ>œ9 ´Ûv�íûõcÏѱ.¢//Blõ›>Ì�ÑDÉÞ!tß4ÔÖ[+M(ÅPÄi?aØý³ú*2~fŒ~ÞæiŸÄ`f�>eô×Fóþ—•ÇãùÎ aüsÈEŠÈ—¾º”™#TE8óc¨žûËP£çÊEû8bÄÇîAûÙ?B²ð n<™¶Í(ù¤õ…Ñ餱¥6ìFåº!<÷z R4zŠ{¥2¥^:�øž¿Cüä]àn ’‘Q"yî¼f{_ÈÈÌ2�äê[œ‡ÎÕE6%#žriú�ƒ{Ò,ÞÛ¬„3”àÖ4GÁKzçÌ?OÞzå¯óÎkb”FÐ('q}pª7ÆŠ„äñCGž—í æšÁÒÇÉqµ-8”˜ÇÓFµ›ô7ì9$É›c:=”N6 ŸŽ·ŒÔÕp E?\Ý"áò:r5¼¾TjvZghÎà´o,ëp.úGFÛ@Pò;N®Kfª6bð£‹àÇ—€F�ÓŠEÅãʽœ„�Åö@#ƒ¹xA™}�Çã �Çãñx<”áJœñ“BÄF]†¨’=¬gH´^…"èÝCèüøFt_;®ù½léŒ�LêdÑË^j: rFCh”í9Ó/Væøžïšâ°<?^9Ž’^D�û4½´ÊYCôÐ ¨m÷kH4Àù÷šÓó\Wè¾y ñU£€nÍ�¬µDFA¯ íçªÍ¤,oEfú0iV0ðTm•€_ÆOÝèÇü²Ñ ¦et‹Ñð¿¥<ÏwŒf9£BîeÃҘѩò©X]5yªû~ áäµ+@ÃI!%Yxígþñì7Žû£[¤Áë¾¹R~~$ *Øi$Ù±¬24‰èŠw!ºü]æxÂÍ ®äÆ*ºOÞ†î½2ç:é &öìÉÄbÝЇ—rs²³¬æ`±3,RË1  Ýù"Hëþ´s9Dte�¨¯ -ñäèoãçôe{‘C ˆÀá²”m¢ž4L Ú«&Ž•¸.(‰’s aäð:Sµ÷�‚¶ÚèëFÿÆè,*²T¤ùÆ•°o9Ö�:¦uEíÂtcò:±3.ˆÅ�¥ õ܆«Ãj�&Y ˆQ8  ¸owƒë‹*Âä-G‘k<Ûß?~qˆHå}§pkêJׯ}DØ]�^d¯ù �Ç@�Çãñx<ߊzƒ™¬²ã¥ö(R„ùCʃÛè¶“lŸ}Î:ïÚ„øê‰ž¤¹ÿÁ Áö|Ìžk"ºw ´¬A¬²&� Òè®Eé1V–€�VË»7ß–h6�ùYàØAàÄážÄB ²©áF+@%”±ÑlŒðÁUDw.B�hË(û»29oؘ�3Л«ÀÚJÀ` —FÐ)AÀá�'7£�ÔÁL©2˜IïŸÿ7~”Ñ5þ¹Ñk�hIš4ú[jÿ Êãñ|§8‘ê‹r†‡„su‰ j»PÝýT7þ8²}áÝ<…Î ŸB÷ÈçÁíE€…¥ þz? ü\\dŠ¢¼§b¯±³kÖžóFT®þÔø.ô¡�B£$FüüCèÜýièã/œ3›´Œ˜&Y¢ÂH&¹q5ƒ´;Ã+/gưH»—­…†UA‘|®”=�ëED,±»_®þmrý…J^Ѷa¹ù" Ÿ’zXDZm¸¬/Qò€º\4ÿ’H%¦TUúZö' GÃFô~Ôè9yŸ"�òžˆˆ‡*�xÛØÁd¼6 ‚6„íIq °øì�.17 M%JU�Ä¢naÿ¥ûš@Å ò 2Ž…}òáFšNoAI“ŒÄÏ™ìS|ìÈ1ËÁ@ 0²ö=±ýü¦�ÏYKè—Àãñx<ÏzÑ»'Vƒ'fIü�™R­d˜æÚ!�"� œù£}´[mTjCÈ€äÜa$Æ ^h xzÔL�3H¦ž`¤©à¢»—L›:ô¾:¸®ÀUÀFš01�$Àé£ÀÈ80µ À¿�e°ÚM Õt%Øåx÷ERÙ’zâP/·î_-% ä6 –h€‰S³.~ý$ô¦ª=Ÿ0+gFý¦!)défh>ŽÔ¡åE.½�À\ Zɵ[—~„ÍŸ½Þa´ëãe£[�Nû¯Çãù.#Ò¹ˆ’f 1RÔ_G¹çûŽ#šy‚á‹Ü (�é9Ž×ÏÞ‰dáq@•íuöËìœ3ƒ¤9‘J3(;­l=sW ÁæKì½T­JØç¶ª>úâï·×ú¢_Ü aJ)*^Cp6®«OäJÃÊ®gj)åêȘ­³{¶íÄz¸¹zöØ‘íÓÔéÃÚÎW¤ž³¯¹>¨ÏÛþ;|îÖ#ay¸Ä¬`X¤©Qrž‹ $GQ®MA�ò¾¨ �çݱGC‰‘õ´8&1†ä¸ýC�K�> ÿ;AÌ_–�æ�ÝhQ�TVƒÅæµÖsŸE‰3ˆr6î˜aÛG•EÞÈÈÑ~½”§¥#}•¬¹¹BîëE䢖:zÿ2PQÒh•}¯¯#yÒˆâœ)Ä~ �Ç@�Çãñx<ƒÑû&Z©utÕ~±áÞVê™…±äÚÉè)¬ 2"¨ÓjB©!H�\8Šdß§—<³J`÷ýI¦¢^l¦©áâëÆÁCAîª2ÒÙruh6€‰ Àè¸aèvœÙÓn¥¯{�{�GýF�{ PÇèD�‘:Þº ÷8ƒ4Š÷) ¤)“ ÇÀuå ¥…Ù5°ŽÝLÜ·—T Þ3» B3Qÿ·ìä²™ƒ¨ü#hüLx›ÑùX F_6zΈ=Ï÷†�]D®ŒÈ‹‡¹¢©7 œ¼ÂþÇÝ¡-Y#ž}ñÜÝ€î %qÿÐ˱ú ÌøFX>Du†GîA³šØ�ðÜ7�êÓ@(ÒÐÙ’Wf?ÿ èÅ®?¥ú¢’À'25^àLgü°›·mk g¸ÈûWÔ3g`PÂôÒÎD†O¿� XšK®¾L3Gö€ÉÚÎóÈêsåm~W¿ö¼{K�•:ZÔ'ÙN>Œ.‰â)Ü”H!—”E ÉûÔ¿L-q^ô玟4zÖè&£wÕÊ×NËõ4*I6 Ïê‘xY-6§UW×ÊÓ¿¹Ž ëÈÑ%l'BE³¥ÒÙË:+Ê6y3™Ýy&kzÉ6ò]’¸þd»r󧸯Žv'E£—X¤š,ðR™¹ÌWõ@�7€<�ÇãñxÖA cÕ%œiÌæì %ÔÑåÉÔÊ Å�t»Ëè´&P­P‡Ak1ôÎ:ôö:‚Wì_-ß–`ê'ˆn›‡Þ7„øÊ1p€9oõJ$½tf+‹ÀäF`hg ‰Ú  eÍžN³ÿA‚œÙw ÷Z-&iê :Ö†šëŠ¿íuçóÅçÄ#â+ÇÁ*ißÔѽ󵄱º´ˆ(²séÝ”â´x¹9D³�ÍȾýé´�y8ZNÞ°}áGÌø©x£ÑuF ƒéÝet¿Qây<žï)Ì©ú"^È*IÂîEuTwü H�ØzÖLˆ�4�4^@÷ôW¡»óÎàɧ‚ TÉY+-"SDô •DPeá¾7AmÚÄè¡e lÉK÷#9ölvË"F€¦´srÇŠÄ\Ý5#—¶Ž†´XH38­_òþ½±�¥ÁÂjQ0Èù¹û§œ÷(·Öä ,V´†‰‘OšTo‹jÃ’¯Yq#êp‘™#ûí%$KirFØJÍ"�è“KÍ×^¶/�ò¼’£kÿä~£÷]W’~N®µœ³Î޹¶“™‘cºÑ –šH#\WtË J¶`a‘•B²$8l?¢"»«|uÁ6ê‡0yŸem˜K¢‡ ÍŸ‚Ôse÷ůp$ÎÊ|s ç^³�òx¼äñx<�Ç3½yx1˜ml†LB0ÛÞLÇ׎òârˆ g–±yÇ$©ñCm›Æ>0JÎE²­ŽðÑ%¨Ùú°¾ÛÁƒPGÛè^;½£æ¾x±îUõÊ$f�Õ:0µ1-_�¤FOcÅhè´òæN¯ ÂoiöP—AgºPs1Ȭ½šïΖR ’£òM 騹 ˜ûæœâ" zc$,í y/öµˆ€KçfïßEè�3ur×\Ÿ‰ï ¤YdïU˜HÊ�gq¯9›;4׫·è«öý1ož\��è Ì ‹Õ.4]J޵¼&û`¦¸våm¤yÑ~=�GA¶sˆ{meýò¤E£?7ºÓèƒF{ËÖ¦ðþ%DàáÊZ\�j¹5¡Ö:Î4�kVž€O,+Û#[²¬Ç\n¸a D"§xNr¾L�}HófýÈqP°N�ã’\³õ÷ËÅï(»o½a™QòWZ>Èãñ�Çãñx<ÏúH.ݸ<9 ñ}ÃÀdÒtíìþÄô„!ƒ5~9l®®¢Ó™@µF`†Zê šI8†"įŸ†:Ô@ðÔ’K §�§“A�•;æ‘ì¬#¹jz<´Hœ+™aÆNÂFŒ¢Ê�ö~ ÍÕÔðIË8 P‘‘4zrï‰&¨¥4×M�62RËIñ#ù8DÖaWr5è¥õ;o$5”ÀFrSñ¤ µÚ!]«mó10ÈÈÁÁsñÖ’q�b0Lv@=3tR_±iõGÄüÙaÓ¶lÁú8jt‹Ñqÿ[Çãñ|ßÑÂô`¹cØë ‡R@P€-Ä w"^|[‰¿‚ç\Dù±ûÇÉP.´ÀVÈ™P. (ÜxÔŽ@µ—îMÄ@è…ˆÜ n-åÒ•ŠÈ¤Ò¨€ÞZrS!aú³Ìö_äÒrVÇ^Vªÿaµ.Ú—ÄõmpëãÖÅÈ™g)‰vÑCDé8¤5ØÎ�+Ñúüm¿ÃïzýHG•¥+2#D;]l ¥¨fË ³$ƒKæM¢|$4h¬Ò±4`<à5ÄÚ4úŒ^kô~£‰¬Ý€ˆ"…"±ž¨§û#h*hÆÃH‘F‰ë½t™‹Ó¾F¶”¦. r¡¬C ྷ¬¤ápŽAS1ìú*Ý¿Ç�_Ö§k/Î óG·ˆìm’7€<oy<�Çãñ †wŒux¢:Gó­™,Ýtï�imVGšÇõ: eM ù¥/˜Àê"!˜I�$\”ñÜ’KÇ�\<†ðÞ9Ö¤ÑGp¸™*¹`ñå£àzЛsQAʦ‡ÓXZ0š*ÕžTî™ADø¡&îkÖði6°3y°ÏìqÇjéžÙsºÛ3{æ: nÖÖuÓ‹óòµ2ôD„ä’ñÔøAH@¶äË] ­s_|íÚƒ âj¨ƒöÆÔìÈè„Câ=`R`pn~ ¿}ÏÁãgÀ�]‚õ±bôU£'ýo�Çó�ÅãÙCÒ.ýò¥ˆÎÑŒxíaÄgîë†0oHÄi°44ŠR°¹óÒ˜"r}%jt ÂÝ7B�m�VÎfÈÇ¡pkñÁ» »¼DýãÉ=s´Lñ&6Èw¦�­[±àÆ‘Eno#8H38?Þ É}…` ‚º”7¤Dj;%IzމNó¶é�é.ºcPj1I¡ùã ’}o¨¤›J)z�1#Æ’Ñ7rn,û¥„ËêÉø²"ªÄtÊ×CÖ‘óÀè £·[E�÷%çV>B$zjx–ÛñŠZjMQ¬+ *µô$E ÉfŦSVŠ ¸ lœ“ª",†Ä(†¨ô(M0bQ±4ÒIšÈ€X÷Rã�!�×Ùïäñœíîšó«àñx<�g=FÛaPOÍEÿðâµÈÁÙÇaµÔysm?º‹ «K!–æ+h¬F8çâ- DÕmÔa¢VLl PBjÞð˜53,êࢻfAÍÄV*ÿ[O€ä²qÄ—ŽAö€„�´lÉ©Ü5¤¤&P¥bT¢j¯ +øÁÁ½}|k@3—ÚMQŸÁc蕤\&žSGZ £m¨•Ø}q&¸ã²t52æ§Òt}ÉÅãл‡Q†šï]Ý‹PZ:cÿ™6ªÐÕöjCg°pzKssáK3ÛÔb4"z%1!Ù3þRüÓ.1P挟ÀõF7…Llt�U×ÿºñxž¶Q?Kþ׌ÇãùAõÊ×|#!E)aZˆ¢ÔÐ$�ý€¬K®tiÎ.$ÆÉΫ‚¶¹ÔeB„[^‹póµ@X1�¼ NMŸøð½@Ò¶}¡`nbŸ#—ÊÍ�—7s`;/aH³E˜5“Få�6HÓ̵c;gÔ‰û‹Id…¾z<\½=¹jßðΙÓ% ™&å¦G9ƒÛ ®?°Y×±þºi€•_/ÇÁâXÉ~X\ò^œkô!£m�û ªpžš•1�Æi­3J†’è§ä*¬7êE@ë7�dT „ Ó­ÉOµ¼ömîýC…�è_ Æu•Ùž—ÐÃÆú*@ö¹�Å@�7€<�ÇãñxÖg©—jÑg÷¿ÌʦնÈPÑ�ÎEKÏ#ž#4×"ì¹pꓨ¥Ôüé‰�‚˜˜Tˆ”z=¹¾lêxÑí§@ËÝÒ=¥FPrÎx4°ˆˆb�ëOÛ’]™¹RF*§À•dÏ�¨ %Ž�Ä(îš21êö^wÚ"5…‹òÉŸËΫ…êpê�Ñl…¸þo¬Kb=AoªAï2�žª„W†ŽAGŽ�»v"ê»D z¨³¢^X~9|š6�m #bDúŠ�OÆoß{aÈ?`H?[ì>?;°>NÝjtÈÿzñxüuðÚ™lN cÀ––£HÜ{þá2Ù>Ù™Br-ì˜ÎTr¦–KÙsÙ 9Ž[¬�íG¤‚‘M¹vÏéó¶ý¾¾rß“H¹ 4`—yY¯Þ2¯„õk„ßœGøÈ<3ú_°¸?FÏÔ ·ÕÀS£z<TVO˜=ÎðýÉóù¦ŒõCÉcaöX¥$€:ÞFp¨ u¤ Z‰ÉJÑ=Œ![ðh½¹žŠ7× §«@¨ðm“$À©c©ÑEM‘KUG@Vrëèþ•Ej똡ʈm+£Ñ\ç/}Q…€�4~†Üdôüì�MkA†ßª™Ý|¹1›BBr‰zóäâÍ«?/àÉ›¿@â!xQDÞ‘((IL$Ùdvgº„Ý�v*ÝtVæP Ó;é©a6ìö³Uu>zžxk٠øˆHˆî«ÅÎf8݇ˆeÖ4ˆŽ'XÌeÖq<ƒ¦–ÐZ}ž½0š[�”|Ù†;øñ�Ü•´’f|-¸ô|�¹4ÆB¤íß”N^ö �J¤–Ùgý Qô9×Dþî�KÆû²º°YÝ»þ Lg?= -E<‰ VçëkˆÇã…^«± ‰¢¤�IgÚHäyHBʨøÑû•èÜøkJH6Í4€‡u?BNˆ9ö{}}�&ùWÑ%'-Uú-YÞ-.|Ÿ� ÕTZèP@JE2Ûé\â'P^N‰&¼¸RbÈËeETøøATmAD¢UE2d† Ã0 Ã0þ^á¤äöæ»8<]àÐH1Á\EÕÔÑ~uun�ºs3uæ�ßêùÒõüÁÜ"0ÓÁ¸ÐÑùË]d› ˜ñÖ¿|¶•°t[pC!Ôî1ß‚ëd£¹¢åP�H@úÈØþ @œ oÅPød;'@%þþÒ­Œý1ݺͣìž/|d:W“ñoòçÇP–õƒ÷ äàCþT½Ó#*Ü ˆEˆÄ ÁDÞ8Ç@Züdn¸  �4®nÖ¼  °)†a\H&ê d±¢eÛt?š!¾‡�?/£Æâ¨…b6%(ŸB¾rÙÂÍ:F ÃoUåî+”_ß,áP¤KËy™…¼Î fÕ‹($rü½úûøSwèÅëŒá5H¨œ›7¥PsUX˜ÂrG—�cðsE¤ÄâìÓòöµ'è^êiÉ éÌŸt5=ŽI¥DlE$F<‹†#¢*F¢]:ƒ)‘•xŽ~š—¸žSsX[®þ7q9*»ô»ÞÛ¡^¿ÃÇýYràfÆK2ó'*y…B½_ÂçÇKÓ)”.IùÑx:KMt6 –æ"‰¾HqÔÞÜDT?Ö`Ö� Ã0dÈ0 Ã0Œ1�æ¸àÖã÷ô³X„ B €¤bˆ®Êà�»Ë펬O³[Ê¡�Ì3$¯K­9LLEÐp?&¼W {ñÙç#À©_Þž{ýfïM€-¹Îû¾ßwºûÞ·¿Ùg03 €Á€Áâ&R²D1”D™ŽÇNÊqUÇqì²ã’'q9å%v•]YírÊåM²d«\r¥¼”Û’H‰’¨…‹ ‰â†!AÄ2ûòö÷îÖ}¾}O½S}êž:ó ,òüXͳöéåÞû·ÿ÷ÿ}³B¾¿�©0tÔ CG{m[—J/þxÔ·“_ÄÄâ*³6A® 1W‡×°×# ‘£èÑ9ì©©à£÷-`�öÑé5¤©áæ•i‰¸°x‚ŒY÷¿l6·jŠÇ  £áHÆv›©ø£ŠQJ3ª?zê)ûèÑ=æì›&yñç"ðƒÀîŽg€Où?¾3™Ì½M¯ü"Ap¡˜5¦+¡]ÁF¬�ÖÁ÷«†bˬ¼³BÁù}MAyä=§¾éÏ�¡KIK³öê«¿‚NvgºsüÚ‘ò�Î9$B#ÞÍ$ø{¸–°ŠŸËlñI¤›wÈ9 ƒ|@�ØæñŽ!ðy~>Ó|Ç…¿¯�œ¾ +æûÒ¢Š&Ü,¾LºcüX$¤ZÒy”8'O0–v …¤Ç"÷2uý$�PägM�À}m,ðN'œŠ„{“˜ð5Ó)d­1;ãÙ/bQИô‡ÎÂÃI(˜Üµó'ž÷ǯwP÷Oܽ¤D TÞŸP<Öĵ‰@?ús3?–Šk¢YÊd2YÊd2™L&ó@u-ì MõO¿ö¸ÜœFÕ€"ª‚Zƒµ%V »Ô[4eitÑМë¡K€2hŸwÇZP�¶çàÐQè½ !èå]Ê_½‰¹ºK:øGäk­#èóÐ+о�¾A{fZ/æ ×7ÝèhO`¿n�‰…½Ù­‘�Ùm`oZš;c6 „YÒ)‘Ãà•¡9·ˆ½°‚}pi*\!¼îìnÃÆ-°>b¼èsÛÂD)®L0×'Þ<¶7JÓì"F‘BÕHÝ|ÇÒšï8¾ÎÂ’}S /üwÂÏÃÜ·�OÏæ?!™L歔Żs˜áF¼8‚wøqķ鮥&„‚�kfùaª3EúÇÀe�ëÇ‚]¡~ùSØÁ 0Á±¼`²ß¥F¼¸:mGGòõPÐQ…+um0àëÁšQá ÜüȃoAýZ ñüKZ•/Ø‹§ÿ®ýàc_ˆ9Q¢"J:�Dêqóñ9ö{GÊùé—DÎ"B!%™ÇÇÌ“¨(æQHRøJ‡ˆ3À÷˜�@\g @u&MevF+2núrù9³E B×]\´ Ç4”ãb”ljý$hƒJÂù Aޤ ¯ù…aß\™ L&“ L&“Éd2¯�dk MõSÏ<&·†÷‹ª€ ÖVX-P‹.ö¥* vµ y¼�=Y�Z@AµÞd]ÿü¬ƒ^ŸƒbÖǘKOo k#â_‘ðûR\icÁ<û}©ùþñsÏAW+ìCË4¯`Ï-BexÃhjX» ƒ=0Nô‘ 4`v”â7v1k þÝïIckŒŒ‘Bë ÕWš¬^gqžá�~æ�ï„4Cà—€§›ÿ|d2™·”>‚ =݇±"�S¥#’ÂI$÷M(hÒ;Buêû1Ëhéá):Ù¦¾òK4ëOƒ¡K&VÔ•Á¿±‘¼>ÒÍÙáE¢ÈÃÛC¸Vp,×ç�R'’_Kg H¡ed[Où'ÍGŸü·TEC<±ÜÝâû4" Döñw6½–ï;˜Ó&ž‹'â%)+æ~ŠˆA±û$‘q"?9ŠgtLç(Ò°žpT-ÿ1ðÝ@Œ aÛ­«"£zNvF«bµ„“dè7q¢s粄”ûÇã]‹qŽXX8�?Þ–PpÂ!iA)\WãÇO;€Ô�‘ ªn½.“Éd(“Éd2™Ìk.íFC)æòæ¥Á©umŃªèB5/Ui|ÐBÐÍÅ>vÕ„P[÷%0¿èA}Œ‚¹5¤xzsiÙÌN«ÖSàcs}_z<ÑŸÆžžÇ^XÅ^XÆŸÞpv·`í6¨3[øÓ:~Ê/ �A ûhcU†“�62n”¯ÖïYºÆÒjâ¥?¯oˆä…¼ø>`ž4 ü&ð‹À^þ³‘ÉdÞrT… ' àE Xˆ1|[Q¨#ìbE°¯Š@ѧ<ö=”ÇßçD$Àø­ÅÖÔw>O}ës 5>�øã‚Šƒh'ç�Çß–ˆ³Fðˆt÷± …éæçqƒþ>9?qep?nfôÑ¢�ð¥Ðpxéß5ßóÄOêÉC›€‰ 3p�„H|½�´;%:Ïáa=Aä\cbR<<^ÚÙ¤‘¹žWw u ¥ÏÒ÷û,ðŸ�B\r îYØçQÙ/ÉÞdIÜXTÀQ�;€Â#Æsòx×›qa+Eâs¹kQè@Š8u"P4O‘„bz–ú �vS’zñ' @™L& @™L&“Éd^h ìíóåµCå—OÈPãBÂé\5/}ç2 ¥Á =UÑ\œÃ®H ›µ°¸4ÍTõxU¨b®�ƒV’ßÙÌ­ìÖx|òçÈW}Ò�`Ü÷'\;‰Pn©Á=CóÐÊ4´ÛÃËèRÅ›FSÃí0Üc@ÌLáGÆJù¥=äúGÛ‡Ò¢umedG¨7Gëê'Ëç9vhÌÂò'yñçAàcÀ Ÿnä?™Læ-/�Lf ¡€¡Þå �6[hAPc(½›òø‡‘r±îͲßnÖ/Q_ûZow�>H•àþÜð øñnéÇL4ÆD"K÷8P.¯{ííˆÛ@L˜+0œ@û¿eŸ|øïÙwœ 墉„wÓ¨842'íþ‰pWRD”š‰FœBQ¡ÝR>oO:´žÅ—áüø=ð„þtR.¡Èµ= ü'ÀñØœ˜6s^c Ù/™ád#„Î;ïüI (é�lêÚ�û'æüIŽÅóÅÂÍáç*žHŽÍPw¼*�¢ áA³(“Éd(“Éd2™Ìë$É•�~ñÅ�SŒG%;ã¥b³8M#óÚ¯æ¤W Ð3 „}˜ Aõ£óè²,؈+……å©#¨êñZÐæâ¹=ÄÜ ·N¨ážÀöÌúÀÍËØû¡4¼éìlN]?è Ç�ÓÍ\�P~e[P|N†‰…†�4 ¶Ø¥Ýo2_XœÔïZ¹Á‘åšù%KÕ{ý /ü~xwÇðIàRþ3‘ÉdÞò”ŧ(ÌGp‚ŠŠFÅŒD¤¹/ÄÕ Ó7sç¨N} Ó?…-]·Ûó²„Þ ¾öIìà2žP„ EœÙç¥�˜žW8æËøXèÒÀñÜ«àÜ‚ó„2/¦I÷~2-mU^Ó‡Oýƒæ#ïúµˆK#’'3âBFô§(�ˆAÊù—bu_F²3ƯSàÈI Y¤Çb÷7r>a™¾?IÌK:²‚zøà÷UT܉ßÌÈTšÝÑŠLl…Ìÿ)‡O0y%4!¶D8@ø7O4ü›Ÿg¾|Ö#"PRú¤›¬hÇ”@™L& @™L&“Éd^/hc·(íÆ} †}š‰P� êa)Ûæ¨°rFʪ¤g"_ëµó[H{ºGý¶9t±p�¬Î‚€Õ#°z”× Ù#7§.!çj…"&–וB°gÑsË4,aÏFrù¼™®Ÿ;7`¸×~Œ+1`@FP~qsm èŒ/ÁEš¢Ú#ãË2ØÛ¤œ¯)*«KýAó�'n°¼Ø°¸l) }M /üô€ß|(H3~øPç?™Læ[Æ™áZñ!á$Yú‚ý0¦ãÒ‘Þ!ªcßOqèqÂÇÆÖ9~´Þ¥¾ùiš�/‚øõ?&|XL\œš ÎDÒÓuõz‘È�C$�¢"î<$˜´Uƒ{ EèäØS‡ªùØ{þó½IÂ)Òx‡P"L›$F6rÜhèµh.ž�´»(�+(�_ß—\¿¦Î9‘2A:ì\ô=º�üø~ÁsØåú]�ØÛPÕ}Ù/ ˜¸ø#¾ˆ C #‘ù¯�hæ\ +#xâÇó;øc4œªâÈP&“ÉP&“Éd2™×QO¤ü¹N±1XÀN ÍÈL qùJiÏ�8'KGÏ:Ò\…{Ÿú±9tÁ€jè òeÕƒ£§ ?ÇFm‘qƒ xe5Ȩ­·¥oûº·Pº\a—*XªÐW¶åiÉ+ýGç 4ÜsŒ‡°µ{;€€Hàøq%‚¹€øü@“Ž’X!" øÊ�ÄŸÐqç‰Íñ'w…2˜0ƒ¸ëOî©VR øV€2™L€2™L&“ɼöPñËWŽ˜Ë‡U-Ôã;6mY� meó¾“Gyð�Ó2±_ßÃ<³‹ÔŠG‰"P?¶HóH `P'þ¶ñΠÕÃÓü@"ù{­ÙÛ� ?£½n˜7Á·]ŸŒ-åoíb®ŽÂ/´a].©ß¿ŠîlíšÍ&[;Û²3ÚÁô¬”ýF‹ÒJѳzx~§þ�ó7©zIèâÏYà‡€ÓÜW€Ÿ®ä7D&“ù–¤0Ó@¦›[G%H®æàAqx7¨µ×L±üNªß�”+~X/5Ûß`róç°ÍZ°~€‘@ BC™®ñ× �£'iºmð—w4%sø¨ïžÑa¿ú2r¯âb—ñ}Iq-ìÿ ð‡€CL‘È|!�'ÈÐX#{ãE™4ý`J*÷OðNõ—®"¯�ó't¶Ht® áxxüЙ8‡ @þÿ²”Éd²”Éd2™Læu€óÔÕåâé['ÐF´™±µáwJ­ÇÍÐØ…;»ö]á¾ó�Sdl).íP<³µTAâÑÑíJAóÞeìáÒ @ ‹k[(Ë©h~!¿j¿+ìN·z "€õF\¿ ¥øÆ€âùÔJ<ê¼€@óè"õ;—AeãÎ æv!òÒöHv†^* +¦²H�_ܪð¡[I(-ü¬8ÇÏ;Há×ýyàË€æ÷F&“ùV€B±Bg9z$pvfæÎ1s§©Ž~ ³pL7”®©õm&·?I³û,jLÌ…[f‡£ E!ß?SÈò¥^èÁoCWÏ ‡”;®?–÷̤ò ¹R-‹[ö©o>öÞ_Œº8â€�VH¸†âî›´³Eèš! W¬ˆÛÏ�_cÊéqÜ•vé„cŠ#êš ÏÑ×%¨Û„(˜X·¥|øPEÖ ÊÄœISµBP£åÁÜ?Ý :-º"uÄ™s�¼?3�NþR?.¡'ÈQ– 'çIçRpÇÒìÊd2YÊd2™L&ó:@æ¹õ¹â×.ŸÆ6[¬ v"ÔãBíØèÜö°Y¼ºÇÃo¿�£§e~±�Œ,ÅÓ¯A;Pk"­­‚ÍÅê' À;¬âó9GÐâ 9 ÆäWïn±5ìízÑG•ÐáãEÈ´¹ÑP|m€yyHKç )„èjEýÁCØ£=ZÖnn ö½¹ºøòÚD®�jŠ^Ó:ŠÊŠ Æb µgWÖ›�>x'!Å„ŸÒųÿn "M|øU`œß ™LæÛ%\�7§úMc9 ÓqÝH¹Luä? XzÚ~w ¦(ʈúΧ©·žµ„¡“Ô;‘:BKK‚M˜-æ ¤™á˜Œ€¥àë�óÀcLpøEÍL±Çï' 0Öûÿóú‡Þû/XY$WNŽ4’> N"gŽoÇÎ?.P…×§Âþ¸¿Vsm"Ä^LTQâÎ "NR, ûB±.!h]/.xs"Â{"Ç6±s‹ä‚Q=g“Àø=7N$ü›J ü@dn(Æ$@ÄÅ•ðòè:øDÂRðRÜDõPÙ”Éd²”Éd2™Læµ€äÖ^Y~â›÷S7(ØÆP×êV²½Ñ¸9~}ƒ½­Š OÜÇÒê:¶Ì dh)¾ºEñÌ.4 Fâ>-˜6l˜=Ùóy€P°mÝ•.>ÿÑ“°¸œ_Áuù|† a4€z=¡ÓG@€Ìõ Å7ö07Ç&³eöcžæ±eêw­@á:‡Ë�ëWéÏ éÏOX¿}§øâ 0õBEÑk0¥b EŒbJ‹"ö¡C·›ï=·ž€Bñçqà€UîŽKÀ'��üfÉd2ßV øHÔ]æ¾p(^ )(}'ÕÊwC9Ç>Æ #”B½ñ›Ô¿„6{æ¼AQcºâH(H…mÀ;t˜r­ã/Ît�íׄ r E\GA:Ý¿:¹ŠÜøL7“®,üJýá'~L/œ¾…'•ã&!š0QÂÕÒ!T¡Ç„'›ƒ…lókED—°$$&jÀõäIÜÃD=uÏ•€¤ÓÉ“œ“¸?$ïI\ð{›Ëtb­P@23Ç­Š ' 2šÌ!‚#"̆9x"b‘J¹‚"ûá«©B€DœJ±ãJÂ{•¦ü·OÑû±Ÿsûk€2™L€2™L&“ɼPc¥ú—Ïœ•�ñ¼ªP¡© :5MSŸß¼Åp½`g³ÇC�Ÿ¡?w‚SçŽA4_Þ¢øú(Ý0*‚kãö¡yê÷¬ =ñBP»Y°êJ ýy8rææø¶¥©a0€‘ÛÆcP €Ïåãs ¶d»Á\c®ŽZѧEƒp0Òýͨ*z¨Gý]G°Çzt¸òÍMl³Ko®iE ­õ¬­­—WŽ‘qÕ§¨jÄŠÂ"FQľëĵæ=§¶£�~N¹p%pwÜ~x!ì3™Ì·F¦�1]W�Ì'Aˆ6�bþmT‡¾™;N€~ vð“;ŸÀŽoø};â�/4æìñBL(u÷A¸'ªÁþÁ~êæ{G”;n,÷�ø}�×N4tTEBÐé|ïYû®óÿ°ùî·5t»$B›I2XJ-Ž$D›„`uûØÎxâÜ#×äÄI ñû”l!ÌóM87~þi7R°fÒ¡“¾Öô¾þž&óID¨+€ÿ°+( �3³ÝØB“E©› GÔý“pïDÆî~\f;…T‚Iˆ?1QIˆ’v} ;€2™L€2™L&“ɼ>Pñ™Ë«Å×ÖN¢*ª (¨´¨©©¯«Ù´lmôÙÛ9Ĺ g¨z}VeõHEÙ©)?³†¹2@ÀÇöža¢_0yÅ t®xȇ‡³><ÜÂ>U�oyÆ#ìNÅžášIàì ć�2°È�šâú¹:Âì4áÓŸtvfš'V¨Ÿ\…Bè°³e¹qùUÕPõ-½^Ãæú¶×¯³plX>3wR&¦B EJÅˆŠ jD´þèùõþ•q(9ágøðîŽð)à·ržŸL&“@�`2KܘÞ1ªÕïÇÌ?ÆtÝ>n¾ÖL6?E³{iVH$¿^KÎȬðMqç�ç×/ü\<þzBg‘Îïb³FŽ™Â”JGàòkZú𩟬ßû>AY( ‰d‰Ü-3çJòŸíÙ(i‘‡”[ç9‡¢øyq±)F-•çÆ$Ïßµc™`ÜÄòù¤ÂâEï{| î¾.áy$î#‰¼MÝu}¹ü~à£nŽ$„F‰ŒylÒˆ ÆËbµD‚°k*âC¿Ís�„8uÅC´©àEà„ qEH;€~4 @™L& @™L&“Éd^È…~û·Ï>$V‡bÁZƒ6ÒÄÞN�³¥¬ú }îä0"@óÜ.ÕçÖ�aùÚîhÎÎSç*:oœ„+µ[¢°¸ ˇ ?Ç· v`ogZNêÐÉ{PŬ5Èí æ•íÖÙmˆÿF7‘¶Ø@sn�æÝ>×O…W`gs‹ªÚ¥ê×T=ËÆíMv67YXÞ£t·ü2§¤10…wÒ:WŽ&ð‘YìY¦lÿŽð³ ¼ø^ O ü:ði`˜?ê™LæÛ^RýÈ,·M(~¨›#Å"s§(�(Ít³Œe²ùkÔ[Ÿsƒ~]ÞÕt…Ô»t 3æðç%¾?«(L×±#Ò­;ÀBOc§¥Çï?ë¼Tƒõƒ2|x\*Rë‰Cÿ_óñ÷þ”[Ù#î�±Ñœ8qçŽ�»‡ZôîÁ£1çJâ<=Mc€©³w<1X+T¥eRæú  ~®w Sí¼6E¡ Gn¿vŸ¢x¥7wº/(½jÚ´Ç3ÆRÚù㉴un8z•m�Q•Ö¯Õö•¯ôµóAö×h,x„^Õ¸k7—T¹˜X—x­ch8ç€!ô|_|ì>à�ïˆ\CP�Îi€F“ÕK„};˜ÃG$ä/œw©"q„NhÈp?²”Éd²”Éd2™L怪õõ3rg°‚CÕ;€ì}ÕZóÐxÀÎæ*{»s vÊv;ã zÒãäÙ#,­r·È°¡üìÅs;ÄÓܺf%4o_j7­Ä A¡d,,.ÃÒ ôúoͰn»Nðì�Z�´³dÏ"·Ç·&SÑgm�‚‘x�M|m· ¥`]¦~b]©ˆ²»[ V ïÐëéõÖom²µ¾ÅübÍÜB�¬Œª¯G¨)£ ˆ8ôÈüÖä=z ÷7ÿÍÑò—¾ò!à(wdzÀ'€Ûù#žÉd2€ð)�� €„áÙ¼cF¬mûT)–™;ýÀœðãêÍàËL6~­·»bŠ™-Ðø1 ö†yyÂÇÑE�wÜDFáõà�žƒ›8yçOl¾àñ÷±“HW~½ùž·ÿ¨}â�«‘;Ü�È×ÿísñH´ôÄæš Ö Æh[c©›b_„éW5V eÑ0žTm7×ZƒU¡Å�¹ý1¢Œ&ýªñs\¿UiçŽ&%Ua1ƶõ~U·û»uh¬´ã ÔM‰1¶³ÖàÎÕµ…ISPÅíëÊéñ'µŸoDÛ²WMÚk2ƺ9‚UÓÖAÁ‰X1—P‘• á‡"bSZpŠîï�õN'Ý ‹q±pÒÙÏj!£É"£z^¼£î`¡ß„Y®¡¸ˆ¤¢à�«nn$OY¸Nx›% @™L& @™L&“ÉdîAÈüö�¥òׯÝ‚bÅ óLê÷É&{;‹Œ†á^Á`·do»äìÃGÛpp”¹¹ŠÃ',¸˜—ö¨~õ6²S'¯¨}Cýä ÍÅE0ø|@ä Òé:=Ÿ¹…¶ÜßD¸ç ½è3AX7  æÖs«FnŽZ‡� šx~dõÕd”‡Î4O¬Ò<¶‚Έ3«Öo�Mm±Íuªþ¤um®m1¿Ð0·Ø0·ÐÈ gÊKrˆ¦hÄ]‚¢ˆ=¬ÛæÙgßV¼xëŒ\[‡4wœðó�üÑÎd2<ârá(Ììd鯉Æ @'þŒwá”;¼Êdçç±ã+³�;!F¼‹¦#šaàT;c3Eõýáù"3s…N£˜�ä ò®ŸîñÜ±Ô `Ú«^¶ï<ÿ£Í÷¿û·”×Å—†øÜtÿtÈ8“ Ï=öd"4–Vø˜ÔBYZ¬Å )Ún…QœÓÇ Cw?�»G\¿RˆeÒÜþûûô{S! _5­T•ŠÛÖ��º6íñýñpkø1WN׬êVÜ�˜žSµ/ŒÁ�AUN�ãB®ß_»µâÚÒ¹–^¯Á]»¿ObÛõЇFD>ˆ„­»ë|C ñQƒ}ô.ÝAð.4Ü|d®‰ô�C8§±¥ 'ËÒØJEpÌ„“Π´KÇñ'"ÇŽ®™@™L& @™L&“ÉdîQ¨ú©§ÏËöh‘QUk(ë~ýŽr]ëšÑ¨`4(ìövJ†»S¨¬3¿¸²/À9 só™XÊϯQ|eÓuÇ*ºZ2yßaìó€N7 7 áXKUAå!ª9èõÞx—Ï`{mÙ¶e–ÐãĦu)æÊsyˆyy€Œ5"Þ„9| uöQ×�Gç ìýó4籿³Q)ÚkX» "` W ÇÅõ©´¾É|+þL·^ßšk²X¼ÐF«!*VÔ6FîÜ9+{»'DvEîl“€FÀ§]È·&¬3™Lf†HùEDŒ …ŠæÎüY° Í“�_¢ÙûŠŸ+3òã$4ªÑIƒµ¢�‚Ÿƒ_[|¸9´{\íüŠBaÇ÷GÅ¢¸Ø%‚-Íœøg“?øÁïÜÑü2‰þá’¿'¶Í�vIP÷‚Ϥ1ŒÇà1¦sŽíœB œS7#êÚÞ¡d­¡QðûЊ%u-ûûŽ'%Ftß%T7^(êU5S„º6n_ƒ__(Ë�PœiK«²ïÚ¶;S¼P…í³¿†;çöÞø¾)�‚У³�s^«J¥*¬„Ò$ I¢žJ ¹ü!à{‚91Ú$X3ÜG˜Ô=ÕK(&pÜÜÁ¾Éýqðˆ�^|; @™L& @™L&“ÉdîM õ¹ÞO~ù1Á¡Òô(š~s²Ø±ŠM&#a<šºFC'íTœ½p„Å•û) Ó Çvø8,,qPÌõå/ÞĬ�A„ÕhÀ ]*±-Ð\XÄ©u[èR¼àÛàw¡êáE¡>H…q ¯ ^ªÐL¦bÏpÃ=¨'aŸÀéãÇÌV�yi8ÝnŽÀ¦¾pÎ " :{žöXûÀ"öüöÄÜÁ\R{;Š?büµ ÷ÖÙ\»ÌÖÚs‹5 ‹ ýù†þœ¥¬´xº9bî4Ë`j¹³³*ÛÛ§-A€]äÎqˆß~ØÍçL&“‰ò)D>2Kì  —„ªæŽÿIêÁo0Ùþ èD¼¼ ;äÿ Ä•0¯Žkka@ñ ĤPø1´¨BØ/†nê8 Âsò¡åº9‘ âFòÇP°zbõgë�¿ïŸê™£;€ÄcöNŒMæà‰¯+É<>�5ŒÆBciE�Fi)Ÿ³GðýÃVü‹9:eÓEƒ+÷ûÕ…}±ʺý¦.€²-…­]þÞ¤œKqÎçB«ÐXãD#˜ÔàÅœºÆ“b?¯�;÷¶¿,EP5€¿�a‡K!0®‹¶­h ¢ÑÎï• ýÞ4”œ)„Âhð`!ãâ}0‰ýOʦÀyà�ñ˜ç<¦‹tç;T ãfN&õ<ŠDE‘øj"AŸ¤B¿ÍtD¦�—@™L& @™L&“Édî} óÛ7ÞV~öʃjÔ`šyŒ-´[`á ¦ÑVôi AÑŠ@m Öt’ÃÇOƒ‚µø\< +‡`å0ˆp ¥|j�ò km½ó 'úÕVÑÕŠæÂöÂvÕ‰A¼ØA€oãË?ÞmÆ€˜iY®DMõšlÖúë Ì[`ºcF s}DñòóâٞğÐÁC"¿»—öH=5‡½o{n],‰�îÜðŽÚ²+�†#Ön>ÃÖÚ6s uëêÍ5Ì-Xªž…’êçï\”[;gLcût!wnÏ€^~¸ž?Æ™L&s—�za†˜0¢8¨@ÊE¬ÝÂçÓ0ÝG»YKu¶@$nÜ5Ôø~4vÍ—ÊlA ïšu�®ç®ÅÑu51ë¸Ú]oiþKõïyüÇìûù&ñ‡æ’½åç&Ä� ­I÷‡'žChROEŸÝAIÝ"Š1ÊdR8ÑÅÒ4kD(L3¯KŒØv¾ªtJ Ý ,§. ^Ù´u#Ú ãø�Û¢'ƒR°j×óRÛ¾õ$„¡P¤éÍ‹?à‘ˆø“:¦dP&“ÉP&“Éd2™{š¢üéç¾C^ܸ�¢éc´¢E±Ëfмgá&“‰¡O@{;£a�€äèÉCÝÜ; -ÖBaàÐqXXä ˜µ1ÅgnQ<¿ªàC4¸6 ³žèR�î¡G{­3¨­.ÑR:Â�c†3ˆîÎO"‚«tÛ`‚Ð9.´Û˃Vð)^ÀÄÎþênpH(ùó Ý>ý‚æ¾yôäTðÑSóhÏ@š´øsÛ‹?íº°�ríÅKl­mÐ_hXX¬Ûrn®1w&óåo\Ôlpæ�ð¢äÎ5¼Ä&ðIàéüñÍd2™»ÆçÀïÒ\h¸@$ rìDró„¢JwžtÅ%ŠPÈ!téøµ„ˆ¨³^ ì 7ç�ïñãàÏÁï_7ìüDýû?ð<É�nÁxÄí“rz¤EŸ„“CZco(Œ'†ÑÄ8G‹¡ªj€}w޵^�ð®ðhëê�«©ƒG«†•ňi�,U©í Ë7¹žÈ=õDN¡Ó%žÿ(ýùõ÷sâ�2&µiïé¸.¨kÙ�7ߟ0—×� �×¶�Kˆ¦ g�ÀdÚº“X˜›0ß·,-4IWŽ#vmI‘2~�l,·PPï?|èãç�#¢� ÖÂëilÕ AVK?"ɼ@~<îÒQÁ#�ë0ºf—Édî „ýµ|2™L&“É@š²üéË?({£C€ÿ'hsµn®6iÃx$Œ‡Ã=Ã`ÏåÚ©8ÿ¶Ç8tlÂÜ;΄+çæ§aáÊÅ\Pþò ÌÕñG F:cŽŽx¤ËöHŽVØ£=ôp…=Üã@QчplÖ”D‚ZüC0Yäú˜âʹ:Ä܃‚?__wåìë· Áƒ3{¬�Þ7¿/öØC=^sÞù3Ý|Þ/r‰ÿ:ÿÂ7.³µö2óKu+i�ò·×07ç b –™…ܹŠ\»3~ø Pç�n&“ɼPahQW E 0ßO§?êܱ à�!3­Çòù¶*”@èžö«Æ×¯Å ½ÂGâÒö«a¬g�ý«ÉùžÁâÜ$víÀnŒP¤ˆ;a$"¤€ßŸ` ãœ>S—Ïî@ØU”¦„Ú:§Ž±.ŽÅªqbŽ´õƦîˆlV…^i™ëOÖÍÏY £�óL„-‹\“Dæ$EŠpý”î©pÄ Çã±´[ÝLÛÖ Mc£™nµ5m þžº1|Û¿ª†å…Që rbPxÈާóDÍ"~¼ÃÀ>ä֞Ĝ>1/7LšJÆõ"¦³ ©ÐoêûÔ€'v¢¹ºsÂ}ÉP&“yãþÒ�æ»�Éd2™L&Žމê¹ã VŠ XT¥~÷üU=lÆÔµ0‰ W´. ÁnÉh¯äá'žàÐá 3D ®„ ¬�²ä@(˜g·©~å²> sÚt]A"±¼A³1‚®:Aè•m¹D{zú‚ö èÉ´ÏàQÂFü a ²× kNð¹2ÄÜÄ£°‹oÄ0`ï_Äž[ÄÞ·€=5¥€¯Û›°q�®ëÇàê>¿-/~ã›·_ ¿Ø/×GÍËÇŠFúP¸yX Bìxãª]Úü™úÉ•«€ÍÝL&“9 ÿèrW C¸áêa. Eð9a\]\4Ázxg‘„¤{\U´0ˆ*Š6¡+ð®ÂkÐκû.'¬Ð%äÆ:ˆà"”qý´½pß³ôª{ÿ±KͽD¿ªc¡´y~…šH~9`4éÚÙ+Xßî³74�sžˆQº×ì‡zÃÓö¹qD,Uý~ÃòBÍ|¿¡*ïNä %‰}"ÂNêþ¦sâÄî™M£N%M$|ÍQȰ7(ÙšV ï½z\Û÷mØï·ÊBYYœphyBU’Ì?呈»)u�m8ÿ.÷»àÜ@�ÏpþžGP‡°_U˜4}jÛ‰ˆ?ª]Ç „¡ß‚—_Âu’O( @™LæM€þa¾ ™L&“Édbô9Žê<½¾©ž;þ&Z8HQ¥~ÿâ˺ÄÄ @Ó@ƒ½’ÑnÁ`·`8xEzœCGû>ön³1ÈçbÊÒòT**D£O¯S|ysyO4H¤OgEO<2(zíh+´20çD¢¾AÆ »õTðy¥Üm`ؤ"Õ‡�<Ð`l±¤yh™æáeôüÒôDxÝ©'pç&Œ`Ä =Ai¤ãvjùæ×¿!ß¼1,_ªÏ›Q± "BH phYŒôÐÒÍú‘âKVŸ»†ª¶��ü1Îd2™»gáǯt ‚ü=AǤD]@3Öóußæê™)î¨1Áºa.!·††�ó„k¡Ð¥âŬÎJ4د¶—åúúϘõÝ+õ÷¿û]™ŸÐ^9°Ïü¶}ÏÃ/á‰=,×TØ­äÀI9Z ±†�í‚[óLjCUÔÎÅceÒ”TEƒˆmǦ¢‚dßy²8?aqβ0_3×Ó¸H¿ö„ËǸ2A2÷LìÜH‰" GPê¿0Ãk$!Öy¶v+vEëÌ×`ß�e-ÞieÙ§,Ô ’F`:oq¾æèÊ�¥KÀ]»É<&%&…÷$hkàj» |Îåú‹Àqü:&! ”þÞZ-˜4}±¶"Äø]B�G…ø¶Ò¹|]³”Éd²(“Éd2™Ì½I�pÕDU¨z¦|ñä“2°½Î·%U©¿cþrÇ4MCÀ wK†ƒ© èÂÛãð‰9P¾¬Å‚ŵ½ÔuK«N*8(²=¡xzƒâÒrcÿú�6Ñ8R�Âvb_Iõè7©mþžæáì…eì©ÞXvœëGL~ `‚ÜG“±5¿ôÅ­ò¹Û‡ D(Ù€¤Äí»*¨‘F—nëòü6ˆÖoׯêæ7nãs?Õ À(¬3™LÒÐU/uÄðÂL×ãKPÄ %Ýü9¾¡€ã÷aÆqÜ;ZÉûœŸ;—`­îZ?îQcº.pu7wÒlÉúÎÏËõ�/»•°÷[j>pñ,8taîvóž‡SÏŸX ž×‡˜àq¥¼‡s÷†%w6+¶÷*ê¦@°…¥nJŒ4¨ ˆPÛ¬Nçô{–•Åš¥ù1>Ę�vßhøð>-z¥C‰EJO7Ž+ÿLÀª‹ä IAiÌ�æÒÅ×7Z­› À÷…!ä<á} ¹±étȤD0~_ VW•ŹM]]\Ës¤M¾Ë|�.m¾0DØÌ9�2™L&Î9€<�Piñü=þá§Š„áÙÂî~�0Ôšwóøý]_Ka:îœ0�_7XÇjp>ê×sã3Å$ û`ˆÈÿmž½öÓ2œ|XÏäŸ<�s�ßQ�¯<_àâ—8¼4L¹?ÉÙuÖDò+Û7ÖæOÀªÐXŽªhÚ¶ˆ¶¥ çÖ–…ye¬`anÂÊâ˜ÃË5 s5�¸l$-í I�Z¢¤¥ôÜ`ž ûRyw"÷+êzòýžö5]Ûê·.¡Æú׬,jT½C«±EÛgD™4­Ã«áèꀇǭ¨GI;Õ⤅±=à“3æ<üUàcþø�ƒ(òÞ�ÐØ“¦'ÚsºUÂÓ …ŸÙ�'X;;€2™Lve2™L&“yóY@8ŽR…aWö@WN½S6ê¥N A›·Í]·g‹êÚ0yh°[0”­èáÇáØ}K¸¥ñ/úXÅ»‚¬ƒ¬^bùÐT2¯šÚ¶‚�Ü`n�[CÌïllŽq$ÜB¯špýƒY©Z—OóÈj+þP¼©lmÀ¦sýxá§ëüAÀ¢�ÐÁ¼|“â©g�ä@Rt fiñ–Ì�hUNO%“Éw™/óüÓ›�©øÿvQ¶ÍùL&“!.Dd–³ffÅçÒ [�7‡p_GèúñóÕÕÑ œ'}:9†üuŠ”0;_�C½Àõ/1ò?/_y¹|ð�€°çŽ¿âº?ü…I[7¦¶çO<ݼÿâ3TEàžI‹ ÑH ÙØîqùæƒq�Ýz c[çж�ýü2ªÒºEÊ-�9¶:j �„ $%‘ÈM”t•DæúÒ#$Hå%Š 6žt>§ôÚ !,-L56wªVZßžCÄR;¡Ç½¶Nð¡ík¬Áú6ª†£«CÎP•6áM?(éœTðUàâ|/ð×�·áˆ„|3t‘™óU…Úöhl%"ÁÙâ�Ϧ±ü?9\&“É L&“Éd2o.pXÿåE\Û;€®�z‡¬ÕËø9 Js±Þ¯¶ð ‚ÑÀ0Ø+ØÛ® zìaNœ^‡â+ˆAêûPä ²~ެ†Õ£ ¼fȨAn��›Ì­VjKvjÞ4V+šsËØ–ÐsKØÃ}Þ|ê ܾ£�zîJøñ¥G0—^¤xú2rc¨œd š~¹cßqêiä0æòøXø%[—нú½<ÍóOo ø‡ŠG°NÚÍÿL&“9ˆä�ŽÈâëa®‘PÈ ÂÁ¢R�£ÇS}¸6ú DÐx~¡ˆCI€ðœ™íD—*òE„>Í Š§/~¸0ùØ“²¼0³k¯Ü¶Oœû¢}û¹+8¢ùn|ÛÜ¥X[»%/ß\`wP`­qŽ«†¦)QŒ±m¿�ÚzU6­pìÐ�¥yK@\ÀH瑉 *¾Œ÷¥32¦�C¥’!è‚1M‰x‰×8édJ´=�îlögë±¹ÓGDÑŽø£*mŸ:±À8±èä‘!÷Ý£*ç”xÿ…÷0Ž~–t¨Þø/�ÿ8„GÜi�têV MS‰RàP!|ë…¹¿Â�³«ÇÄŸ,e2™,e2™L&“yó0(G9„†Ñ'ëSèæ©·ËÍÉj$�æÁÞMûHo“¦Æ#a22­ûgк€Jƃ‚óo{ˆS÷<<3ÐN8ƒìŒ°p®]Vpüôæx=‘½¹=ÀÜ"·‡0¬‘a£ZdÜ€k¿jX,Ñ¥öÄ|+øØóKèjŸ{ µS×ÏÖÀì?"~Õ ®Mk)~ë9Ì 7ñP�Ť9øÙæ;ϽÄü\SýÂöyê}±x~x2üZn�Uõû®ÓL„ÉØ0j@†½Ý’á^Á`§äì…£œyàe%$˜ ŽPrc¬, Í´½¸ GO‚1ùÕ5X ƒ]·í�m¼è#ÌÈíŠ?àûñeÙÚÁ|õ%´,kmö^Öùáekú ó –ªo¦÷éÝGP ^ˆ{¦w«~ÿÊ ¶7v§!à/ü¨"F‚pƒ:#jIƒê0Èo‚L&óíÈÂOÄ Å/ê8ºaáTQ'ø„á’ܼ‚�„aåf D…âÅO¸fxn]‡PÑ™ûuà~š×€áßüã|T.ß¹¿øÂsï–íáIB�*!Ú¯6í»Îÿ¶}äô ân am«âk/b0.)ÄÒ¨hëµ-(MÓ–"JYX8¹Ãý'w) 1GITh‰»c|=BÄÓY?áè öK 6)÷M­öiÚ•o'ú!-ô�‘”iwPòì•%Ö·æ°*ÑýÒѶAÜþ'� ¸xÿ&U™¸vÿZ'^«§€—øÝÓþð?‹€$„ T]P¬VmqûxA‡«+9\&“ÉP&“Éd2™7 =BÄ xÇϬ/lÎ5�j7\VÕ3¦>÷PùÕݳ€¢ ˆöd4ù�•ç�[ Ã6ü›a4˜æÚÛ©8ûÐŽž¼�¥Õw�â«� ä�A~³¶+IGNÀÒJ~'¤P £!Œ0ØmË)>¯H(uÝ@¸:¾ß#q¾ôu¥*¶8¹ºÁæí v¶6™_lèÏ7ÌÍYª9[þÖø”¹Ù™õhò�+Ïêéþ€mïš�H™fùÕ 1c”M`’ß™L& @ŽÐ™£"�ïCć�öCµyñE÷ç@ܽƒ‚/g|f¹€BçPGdrçæÏÓc#áï^C†뿹x? æ+/�1—^~—LšE #”„u=´p¥yß#_Ôã«;x “ZyæåU®¯- ¨Ëï#¦ië.É[öʦ}xÿà};Te4„XB R<&ᦉ:ƒâI Å‘ŒÂùf–ˆÉqdºã¾Œk¸nTàò$]G3Ž!É+Í�ck·àù«KÜÞ\@Ä»ÈT…²¨÷ß_‚¥,•Gïßà¾cÃÈ1â÷«Ëø÷€åµã$ð—€ÿÜŸWI B�Ð)îÚ BDfÈxâÊìÊd2YÊd2™L&óÆ° C(QÅ¡þD-L‘¿ÿôÁ‰@²/qì¡S½ŸÛx¼T4-U&ß»ü ]Ôzn,Nü)ØÛ*앜}ø(K«G9~j ˆ£‘œ@á U ‡+Õ9�\{~އª—ß8&“©È3Àø•m h ò0;¼¡èãÇ<~Ý!·nYv7o1??¦ê5lÜÙ`gc‹9/ÉfUUO�. ÒyÀ¡KÅÞäŽ<à@ ^ÓQ|88Âä@-n2ډ㾺Øü¦Éd2ßö!à<]!FÂ<;]¡EE"�ºÒ;‡¢‚R\rë Þ $ÌÞ§0 €U±ˆüÂ_nñ:0üÛB€–e41Åo>wQ^¾õ¸4Z ah8‡ Vï;òLó�‹—˜ï5\_{ÅõsŒÑ¤ �šFM$DF8s|› g¶©ÊPÌ R Ç4!rÄòë¤×'�7(.í´!6'å`‰ˆ/J‚ˆÓG÷•˜ƒ&º~ZÒÔ>­›ì—±±Óóùº˜ºÊœ�èÃ'ŠåðʈÇÏo1ߟBšðš/_åõáIà> h"ï#"9š¼$^IàÊP&“¹÷þÊ?Êw!“Éd2™o-ú¨=̳¯åÆqõ@R4úu±,…=^ýìúØ>àÇE©/ö¯ÚGzŒ‡“‰a°k¦áßö¶§PonŽ“gNPUB �t*øËP_·v†+È‚u¥‹ËS!¨(ù¶ÂZœØ3-ÇChšÐ­ãê®íêwïò‘ zJøqL¸üÜm 3¦×o({¶ãêÍ7ôçmõyû€ìè"-Òy·N>´ò ½¯?ð éj<¨‚Gñ�ñçCÞ-· ìä?/™L& @€#]‘%ÌÇ£ ¾‚Üæ�‹ 9AH8#€Ÿ«n¡(:ƒD> üðۼΠÿŸ?ñ€sá÷íÌ¿ñ�w˜;ÛçÁ£"ˆ*¡ d窵æÜá/rsc�)†ÂLhl�»ïØ0ƆÓǶ¸xÿýª!�[F N,�N˜'â$J JAŸDæ&óö¼ÚëLä."ᤉ‰E¾?>_]»Ç$œD9¿Ïn¬ÍñÜ•%¶öæ°ê…E# ª(ÒÖËÂráìçOí£±.Ìâ€×þ0ð×€³¡è“<Òéo¬ADfýíAÉ L&s¯ @Ù”Éd2™Ì·Ê1„4•sV!ž$Ÿ0I;§ì ç9^~v딹6>J‹(¨ØÃÅVý¡¹ËÔa<6­ûg¸W´å`§âÌCG©z}æV8~߯�„…C#® ®m °rV�€|k¢0؃Áö´�fˆ6ݶï ÚÂ1Axž`OÐN°~Û²vã6U¯Æ @­h{c‹Å¥šÞ|cnö˯5 F÷ÅLA¡Í?µVï¡—: Õƒ<8ñͯ©"Ò[À0ÿ¹Éd2Ù„'pˆ¶˜  h à8B(Èõcf 9ø:FöÝ?bµ-~ ç^ÀÈ‹ÀÿüsÞ †çO ðCÀRøeòÂÍÃÅ—^x·ì� "ÓrRÚ—¯ÛÅþ¬ZB7¶[óøê.ïxh�Åù0€¦\,11 ˜“ü·4å*Š8ˆ¢"Sb]Ì<á<‰Ì ÷ñó}½lÂÕ“ŸB$!`Eï¢$È_Þ'R.,·^º1ÏÓ/£iè`Õ`Ķۤ©(LÃÉ#»<ùÈ… Žê.Ÿå�aÁ ½˜‹„Ç“YbO¼W×'îøeg„ŽS{¬Úõ‹ªÁímÖêU¹eç°�Ð"þ°" ÀÎæu b¶¹svmŸ  p¥)üVøzéJW—¶ÖáÊ7aí:Œ ¼õ7m`gn]�—ž…—a{šŠrº•”e·ÝÖ |éïŸo—þK[vhÛ"¯Ulk,Œ††²·Š"¨ -*ûÂ]£R<ßÜ0�ƒÀªZ¿{éZìcá@4´�ùyHäñˆ*b¥Dõ0ÊQ”2ÿíÉd2@ÕîAé�-^°ÑÙ�Âmð@Õjp @Áïï„@\)êׯn�]TÿVßæÄŸ7.ͼsçO¬Õï/6�ßÿy­Ê¡Šà6\²þŠ­í±]è­ÑØkA1bi¬q×f¨Š†·Ÿ¿Íw¾ý6‹ó �<‚�ˆpcˆÏ7AŸâû˜±OŒÅœ>&~n-&èóç9טØdð„çÓE ×JŸOˆ!$=.ø2ÎÌ÷—m8wrÀ÷=y…SGöhlÑn.P[¯m Ðö]½½Â¯|é¾ö½Ú=¦FÜLÏòƱü àIà_špùhPJø¾qáðTó?™L&çÊd2™L&óz³ˆp¥"LéãÛAø·Ðñãg¢ûmÐ GJÕ30wµ~ÿÊ <±@^ðô'®‚ÿœJ>Î÷;üü=Ðíœ(“É|+±ð×BP˜á¼ sðh8Ç~_ œD Ö6¦+¹R ãÄŸN(8~ ‘?\áMbøwÿ”~/° †ã²ø�ç.Ê•Û�ªUÃæÎ»ƒ¾=}èsºÐßÅÿËÕìçe8ud—w>¼Î|¿‰8H®œŽ{Dn¿Î«Éûw_pÐÜD gÒArI⺢óy‡$=îI_§'í”ò$΃D¾!áÚ�>_ùæQö†}D¬ÿ:¡†Æ eQ£ZP O>r‹ÓÇv‰‹PÀ'xóø.àÿÞE\•t¨8_w÷#;€2™LΔÉd2™Læ5¥zXˆýÓ Æ)P×öã~½`áªo8ÿÈ1€ò3[§ÍÕ±WptßYAý®ò›ö˜0Ü-f@så ŠBX\‚ÕW+iØÑ)P Ä ëÚ‘ðp¸Ò…�ªUz}¿™‚7Uî¶‚O»Õ5@(ø¸:^àÁÕÜ=>°›-IwÜó*C¿©NşጸóT oÓŸÛm Íõ-d‰ÞWVƺ“7ÆÒ"Ð3ãñï=ò4=c  çžÞDDhQ:rñ*‘/ºn:¶�Ýüg)“É|k@W_…$€ÒR  äR�ÖÕçêiÛøy¨†¹„ü:a88#t0¬�–€[ã)5òÃÀg¹þƒ?ýP� (O@.ß^’OüÆï‘õݳºØ¿lOz¥è\jé÷,ïzø•{ÂyÆ�›„¨¬‘>§hè³øyKjÍ´ø‘Þ7! Iäu$y~és!%Jeøšü¾…Ç Y�¾üÜ*/Þ8ÜÖ�Øn8BQ¬-±(4–˜:�„×Ðä/EquõýV]�®„º6¾Ž‚uí²„ª½`áuC�ážßFC° w\BGøiºzºmÁ!¾ŒŠ<~ý8r°‹Z»ƒ=0ĸR ®•Éä:;ë·ÙØØ®ž;qF†åRX¼cIAhÞ¾ð|óÄÒ:ž@BÐ@Ôò&JPM¢�x*ûÍ °ŒòŸ©L&óíãò:¡ H\éŠÐ…ªFºe×îì¶ßo ·Î5ù ÀOº½¸G |XŒæq¹¹Þçó—N1ž”²3ZÕ^9¤WŒ±X-Ô…èÚäÝîP• æ|y•yh!r…Ç�ç¸!áR‰ !špù$IȽ“rüø¾&¸^|û@¯Axî$Žkï:OPIÌ�äCrÜÙªøõK§ØÌaÄvüÔ" ŠàÔámÞÿØ-ªÒ¯ àß5÷«À_þ4Ð_¿´èãßïYÊd2YÊd2™L&óZp8 ¨jä+]ñÍ‹>^!’‘ß/øš+h;Uå  üüö)óâðTw k¦ƒ¶ž<>yI{;u+mlÍqúüqN�¼°Ô‚U˜Ÿ‡#§@xmÐð¹¾¥%vÔ�)@,wAØßç({Põöóâø­èöˆo~ݦ†z2-›fZ`<Õ�áÛü˜›7[|;!ðs_3î\Ÿ%þøm{{�7_.¿QõÌî ÅmKDTŠ�ÉÇ�|}Úïñ!àžÞê5"A(8è†AÔ”óÇ >ÝЊÁ8:6�&ÿÉÊd2ßF!à<Æà躀5Á‡hë º\°¦™1OÝ<!ò·ùëÀ÷ ƒý3€÷Jè²xùæ"O}ý”LšR¥ÝDQ¬ÉÊ¢áÝâ™ípÿ¨%vMI�œëÇmx¼¤»%My‚’®�„°#3„/CxnqÉ$Î3 l¸FìžEÄ<=¨Û*~nñ×-qݤV>ûÕû¸±¾„UZ £¨*J±Ÿ£jiaćß}�~eÝ:_¾À½Ç#ÀÿáB4Êò8€ìÊd2YÊd2™L&ó»e8ôAD:P· èDµ ”!ÀµÝz‚âÖUwé MSªH-ˆA-N,³2ßoô»ž¸ÌÑ•qÂÍs¡…T¾šÀ ’X -D‘tÅ× ¶(Œ$Ĥp\ÒΤøXôz=°¡Ã$qLWäuL–¸ÒÆçy�+zì/=H.½t\Q„nLAŒ¢VVGú‘'/Ó¯øwÀ6÷.ßïò=Æ™Q y @ÿ ø£ù_ºL& @™L&“Édî *'ü, 6®íû¼04Óä¢hÇí#"(Ú�ë@\<Ž› P|q÷hñµ½s¨Êþ±TÅ ;¢vlšåõ Û¿>ä‰Çïçä©TélÖÎ 47‡�CÙx�È?ˆ93\BaŸF„�ŽÀD„Ø€„ÍÀí“rö\Õ·¨³áw�â�€)fä.2È•ågî 7‘ŒXLU#¢ˆ 'ª›“¯¾ˆ)4.]Ú@5|œ¡¾®î(žŽ«Ç}.Ô•ñÏ`· l{ùÏY&“ù6€BÇN7÷Oèò”¶îç&ôWø7¼B¾ü È�Ÿâ-ÂàÇÿìEà;à›×å׿vƹ£ …i¨m‰ ˆ('oÿŽøs�~¥<—Mz<ªL‰Òâ†Æ7±sH¬“tÈ$®;!l…ãqÑ$rObè �ˆ„0fI�SJôK܃txº+·_.O3ž”ŠU°ï\8´´§ß÷î§€_à^g¾_ø+À!< ÷V€þ6ð#ù_ºLæÛNú±|2™L&“¹·0 G€Ã€ÌvëuµŠ×g�Æ-éc¾)ª]Ñ ŒW”ƒ�‡"¨R~fë´¹<: Џü>†¦.À‚Zc‹á¸þÐáeÎ+»áÖl ¹úòaXu—ÿš¢á&¬kÐô¡¾J¸ƒ¤ �9±FL·O‚}ºáMãŽB×�ñÂ@ñÍ1ų#tkg"ƒzˆ�Î-,EYëŠÙš|tõz¥M @ª "¸zø€#|6Ø…ü/u„Õ´ä?£5ª[À8ÿyËd2÷: ÿøú«€O� (tî¨1ø.EE±H\é0^ B]îø@Ã[ˆÁ?þáøÀß¼¾ Ÿ{úìþƒs«‚EP€B;w�ïxd=‘�'îìH‡Ó¤£%.øuµÄC‰I"7�„bJüüÒΦ°É™Db�€Èù$ú|Ý“‹ô§rø˜È½O{í£¢Òö �_þÒ6vŪPˆÅÇ0ré¥_–Ï>ý o•Ïjó©ÿóð¿ÿ-PDr½ ¿üoù_ºL&;€2™L&“ɼy¬G�ðx‡�Ï磀¸¾€D” ÿ Ú A^<òk⺧í^ßðÀ#ÇQ•òó['Í7‡gPÀ6Mc@UAÚú¡ÅyûТ4ûh)€:ˆÙB+‡aùáU£AE ˆ;zÂ~�º¾Tø9å¢��#ø9z$2&¼¾LjX»ã1ˆtÄ_*”—†˜—ÆShT�À(bD´¯ƒÉwÏ…Ë#ÊJ) …¸þýïÅ ð¢iò³(´>Ñ×Ó¸õ‡¨nçü@™Læ[N ]¬èì\@‚¯ãêâ�@-Æ€4È!äµöø{Xç-ÊàŸüÈÛxöê÷Èç/�¥Q@! XuyTDõýo»Â#gvëïrªÛ9>P&“¹‰ �H`ï Ö—Æ¿‰�Ìv‡¸¼ú1Œù=à'¸Áͱª�<ð#ˆé *ÎÝ©EÕ`Dõ‘_åž#Û we>uìÊBÈ#$ Û§ãç¤û†çé…“DÌ�„X·" ûE,\úJL<Љk©xCI1'mͺŽ_›ßø}ô1¡�™?µùäç�ðúùŒX×Kä…SÏËŸœx…)ÛÀç{ãˆ@g±÷óÀ]ðÖÓúõ?¥õ‰?€ÝóÀ'ó7]&“ L&“Éd2o%°ŠÈbL|põ:ë§o ¥-€E¼ÕO¨úÄÿŽS¡uÙh!€„ÑXxñÜ¢9Y¯”gÊC¨ XAPAkÑÅ^G:ƒ0¥#Ôww©ok�Qo „‚UPÅç-,®L… ë�†�Xù¤Pv‡Dª%Ø-¾ |mQM¦ñ~Æ£¦ðc `¼ „`.ÕOö‘¾õ÷\]«n F2¶A1ROŽö_ÓE`J½¼]ÙæÐò�´ 8¤©ó¨6&R�© 6u ÔÇpø:Wˆ¸„óE߯6�a~ f2™›Kðb"³…!cë‡@šËÛ"Ï£ü(ðÛ܌Ϝé¢ún}äÁ{õž#wª^ü) «ßò¶×¸ëðö.âÏERÖ. ±"3(!Ð�°JIŒíØE¡„Ð=’¢V„¨Ë½i«›ôgœ’±�47ȽOÒnáÀ‹@G9ynP­äןxBvF"ÕX»¡D\/u�ý!`ž·�ö}œò·>Í.Ùd—Ä™L€2™L&“ɼ9"{QÝë,x¸2\CmXþx¯í(«¤‘W×@\^‚Åjkc„²e¸ã¾ý€GÆá…³‹ Ç%ÖŠlê\¹Ö: ÓA­sgE÷̵¥Ý1Hó\uÎPßÓÅÞæ-‚·p>o-%,­Àâ`¸z4^V®Uâèî…‘D—X_á-có"l\âü¸T `¡|n€yqD¸ ¡ãÊJ4fR[J­&7Né‚`JKѲÓ1 åèÞm/ ƒI–†PèÊM!jíãñ�TƒåŸ¨ 8ÿ<¦ðÝqŒ]| I~-f2™›B ]˜z(°Ëðõ*2£�È&†Ÿù0¾Iļأ�V¡ßûè_¡,Ú(Š ´ŠZ¿íí¯püÀN(.$­ZU��ºöÝÌc¢¯?nD ÛE\¡Ýž7aŸT¿Ý��ï/ðù#¼zvg×O›Çþâij}Ê àun@êÇîð³Àßá-¢óï~“â�žb—ü2ðCù[.“ÉP&“Éd2™ëÏ¢³úi¡ª@4¤ˆ�KB¼.tQEb!ÚíCq€@iÖ+€Ûí]À5 Qexþ솓µ@ ¶&Sœ/—‹Ks{±ˆªÎw;Òí(à¯8Áœ¡ºo{[PÀ‚Å[©ß¼´× AµCI¢© å«Gfç%Ñç­d2žZýLFMáGŒ/#`À\¬)þÒYýÌZ O*UcµƒQµzñ íʘ²k)J‹Š)Ô�;µ:²<$´zñÄ‚_ETU¼Àéãý„â'šþ¼%ƒ$ù¼�HJR`€È`ó+2“ɼ•ô>þÆÕ @Þ¨!ô€Ã„yP¿Œ c>|8ÃMĸܹ‡�c Vyàv½ýÐ}Nü™èw¼óŽíßIÇq -6<©>%IÚMZJPI¸nK~Ó&b%㥤´–>b¤¯+%¤u³�h ¤øù‡uÄî«ô¼øqÂñå“O•�ÿîËrúâVsU7Ô§�KÜ Ô�ÿÛ÷ÿ ø&Þd:ú%Š/¾Ê.ù ðëù[.“¹õ>üßò,d2™L&óæÐs„?ìTñ¤V‘ÃüŒx@hú7®½ÇtŒÀCœ³ZœøóÜÙ=Œ'%ÎJ‡º6hUe°c#“ª(6–÷˜­î’廦Û)fÿ õÞ²lÏPÝöX ƒ‚8A e ûA·ÇõCß”.È®¾õl\„� „Â�O+”'/ ·pèhDG“‰m�7«ck/0Ô’IQP´tjýS*.ö"ÓôÈÒ6ÇV8fZé s8tÆÂLj�ÅíöB¬Ëï×^mˆH lýüºÌd27²PhP‰1 ºƒóõ€(OPÈ?þ‚›Œñ¹óÇAÞîý܊ѹ¶èw½çQZE©ßúð+Ü{t+á-ÒPŒtÌ : a#ß&<ßôuÚÐò)aá“yvoý#»8.^�‰Zþø<1w~ÉkšIZ8J[�ùsL\OˆÖŠ÷ý‹ó ‡gýãûŒ�'€Ñ ,à�ŸŽðf 0÷ÃCÖ·Ù¼7ÿ¡Q&“ L&“Éd2ׇØ,zÎÌ4�_0v©¯cŠÆÌ”ÐûZG„®ã¼;¹–€¨Uxfm‰�T+¨…º2Ô•ÀöšìÐÈy�/·ßcÆ�vÔ¡GžEç ªzNR°:MÕº¶5¨¯ga VVÁÞTT¹®ˆð5‡*loÂÖ:L&>ƃ` ˆ¸Í`.VŸÝÂô­ïo„pùHk‹ÝÇFuÇÆkl_Üdn¾â’íÐ×ÎÔ¨„ÂÔþC6T¸kÿ%VÇx  M„ î•˃à@gZÿøÎAµøºˆ›°àK AS*çn”_Ÿ™LæÆ€ ã_ÅÈ4¯…9)ª?ü 7!£‹ë+À£€„–úîûŽÛïùæ.�<°±äˤڄB¢lnÝÂñ û&êý1$¬…4s'mµiAD©'>¦ ç/,§Æ ǘ•&ÎÛf×ývï:NqD¬š>õeèuwß/GâK­;qB¹�©ÿ7 À?þ)Ðá:bžy�î�ý"»` ¼x:Ãe2·&ÂG>žg!“Éd2™ëƒ º ìCÕ ‚«W"\™¤:Ó9ÞÈ�ã[5‡ Î Š6ì"|~JËÇâÙ³{شݵ0íi•º¬ ¦RvúÔCa¸S0ØnqÇýÇMqx_ñ¥mÌÅIóï@„™B˜],©ìa�´@œà£« SÀ¾ƒÐ[ÈwßõÀÖ°y ¶.�µ Äúcý|©Oñ€"„K Ú5T_WLìA{šK6Ø\ߤ۫éö*.T]6&]¤@Ô8+ ƒE c¹ÿà%»[—vxéé xÝÇÐD\鴘Х¢Ë嘀 "ͲGÝ.>U¾ù2™Ì (y ã¿7\Ù/uË"Eõ£À€›�Ñ¥ 3�S�)ðn°  º²°fõÇïÚ8"¢BÌ2Åפ¬p–5.�X­DÆLÆ›I¸ƒðzw×FSÐ6MDÜñÄ…ªðs ö™„u ñˆ¤ ãê㥬£ô ã1í8wc¶xß�Ïßt"ŸÁ3À³ÜÔ�ÿì�ÀG�¿Éu¢õñß§õÆb�~!»e2·.&OA&“Éd2×ÕT4SÕ„©I¸È<«�€ˆ¸ÍÕc¨jÓì'þy‡pòÒƒƒ‚[±(„R,w®lÒmYüµ)u=°‡»LÞ·ŸÉ{W°+%Xü鸱° xÌFEëO7¿¼m!C�¢˜n¦Äå]¹U8wzºY "y»Ú `¸Ω—as`:çeE‰›Ÿƒ¹PÓ~|�â¹áÚM¸ô`�w¿/vÿø"Þ}œbŒÅÊñ•>ûvðýE±QD&uÁ³g–WÍÅUüccý�øÿ»ƒ1EˆÿMo,̵Hðz!vÆ£wU�#XÛö£º�übÍd27,µÅ[‰·ú…_ÁêýÀG€7/÷ NüA —ß�õíÏÏ0E‚Í” M a?GP6‘ñÕïóí‚:tÖ1V7És …‰H_% a ´K—xþ|"s«ðåèç^O(î™Èç~ø4¸î Ÿ˜wCxL�ƯÁõó˜H»ç¼ÀÅøLØ^�bšr?0ÇÍÁËÀ÷ß<ɵ¦ªµüã§¹B6€¿žÅŸL&“ L&“Éd®%ªmT�G€¶ÿmMwm"ˆDtÕ´Rä;#0Ëu›K}� øœ¸²x«¡‘R¸óý6§7ŪÀâ-€T UÔܳoƒVaÑð:´f4¨°GºL>°Êä½{±K%(^øñ¢X.æô˜öï^¤xqä,NLS*JŸîÀé—a{�¼ív«ª©•Ï™Spò…© ¶³bÀÏ·}\�1 æ� ­O^¢õ‡ëÈVÝüÛd«~SEÛÂä[V˜<º“­0FDa†u|¹Ï¡ÅmqÂŽà6@dT—<}f§¥xEÁ‹› ¸M|QðN(|ÙÕ)>�{®½Øä!tÿ¸uT|?A¤@µ—_²™Læ†DÀÇ~S°ösˆ¼øà$71ãK=A¤œnŒ �?,p˜àâ@ŠÇD-PÂ-ŽLЗX¿„èPàó$R:ü¾˜ •iÜö‹´1‘s´ !@ƒóŽ´ ÒˆpɇBWZT‹�Müòs¶�œGlþŸ§ÉA¾(ˆqÏB0MMG�wpsñ)à€¿ œçZ¡ü´œÝøAàÿëÌæ “èÀïæ/ L&“ce2™L&sm0ÀþÀ¿µwíÔDQ�¸|K ª)ÝÞª`¶¿*W£m61^Â1–Rú‹÷c­4¬„¦«÷ï¿DQ[FÂáÀLÝ¿í” ¶Jn»g/{öby_—sr@ù…MäÒ$íÅ®¶©Þ³„. ¶Èé\ö‚²•ïÒãŒnÂd â d0øµ#ø}n³P¼4¤x¶�l×W‚ØÞÞ£z÷2Ú1P�•3¯Ÿ¥ÝÓêÔ\ºp‰­K›ÌÍ×tæjº½šV[)K•—78»=�  �HËê,sNùêÆ½*Á½¤1&žøî´`ë÷Eâ…uî(Ä]Éùø@ã|ãf2™ëAïÏxp×Ü œžAøq”O–[€q¿ÿ(È1ÐÀmšðÇÀ)Õã?ó.àíá·O¢ìê®aœ_ÑD\"K\<ÑX}ÂÍ™FÚ%-|"ý|]�o°W8·$®/>¦ïGÄB+éò-ÜïçIÖÅÅ1 Ò—€?båû~â[A6ÿ�$‚MÎp³àŸëeà_(ùêù’•ƽïù×Ü ¼ °À–…>›Ýg2™(“Éd2™k˲ Tg‰1DЪFb…Ä…�™"ނ߇G ;c¬ÙM ¡|öܪÜ~Ça˜qQ¸wÿ:‹eEU†;†Ñp*õ·J†ý’cwïcn~™C·-1 óꎂb³æcQ?¼Hõ`Ïשu©‚U Ë”=˰´Œä8>ƒ�à3­1 €€|pûáGsaŒ95¦xiã@bKU>ÖÏ7íÅŸg_ï3nÐîÔ¡ôå­¢ÝUZ-K»käKgWØvQTåÌÅ‘.m?Ïþö!+ @Bp‡E×�ü³cµšPo£?®KDJ,(ù¾#`¨ó+8“É\ã@ÿø>®-c„�?lr‹0î߉¯r x"X(î¸Ø!­`�}†(�É´‹Æú¹ª88éöØ@À0©ã%®!Þ/-˜i$n±> ·s6;yþé15"@EæÔ÷‰äÃ1MØ&ñyû¶"ýÿ7pŽ”ïÿ‰”匱7œÅЏ … û�|'»çðÝÀKù[*“Éd  L&“ÉdÞXZ„[‚ц; ŸÉ8*ö¸rSèÁ•Å C‹¼1¢85Ƭ�`l3*�ûÛÞ5Oõž´kÇp`9õÊyZ­ŠVÇÒîT^êÕtz5Ýž¥Ý®)ZPŠäs'WW%"îîu¬]Éë§/Ø¿zà ´ù5ܹ9q¨ùá/D}B4t—n£®ßT‰Züx±'�Á§}D¶ͯäL&s� ?ŵã? ¼À-Äxg`ù.ÐÿT ÿèP=ö¯¾xx&‰àü¾þ*,gBA/ñÔc]9<_""‡Ö¥­a `#×/±ùIY …}¢âL Ú�°È‰^cx®Éû#~îD\¼ÙÔX‘ã\pÏ|”òý?ùèà €ªõqåIàinVü3þ��ïJÒü6ðCÀfþ†Êd2_ ež‚L&“Édv‰H Õˆ,ºrBŒg•¢�ø?ªi/RˆÌ\À– ŒK#Ö o)ä… ÐðA›}ªyfcUUUiìT ]]ØæØÒ[û`ûb”êOeý\ŸÞâb°w-0¾}žò On V?<"ŠZ0ëZ¿sŽú�ª¯ß¥ør5 vš'mœƒíK°¼æAä&´ðéC{šÖ5ˆ·ä¡hMËâÊ".Ÿ¦‚Ï… snŒY#ƈÜe:c•D�Žaòè>ìñ„lmª%P�C­q÷šÃ‚" –¢P ¢º(Ož>€ª àéW=ùÒÆ‚>´´�âžAʼn1¨^ X¹v‰e%?†€êLÝVD\ ž0˜G„�xT‘püyT»À60È/èL&s 8q Çù‡ÀcÜŠˆÜ,�К)‚››>³y xhÊ”¤UKÂ''ðuÁøÑ&RBC,N¤'±Òçme4*þÄc,IDt)R¢Mb®MBÈ f#Q¡+írΦ®5qì§IsÌÝ  ˆiáÿõès@ÍÍË瀿 üsàƒÀ7ß ÜÁ” 8üð à/óúd2™«Áä)Èd2™Læ 1ˆ¬¢z'°€_„U<¡C I#ïŠø4n¤ª„c þxHê·´¨¯Âq Â@÷È“—Ö-o]ãÜC«¨¸wÿVCá Çðâ˜0Œîàêâ[i¨ÞµÂäoÁîï4„±î´ÕוOmÓþí³˜7Æ` ( 0n+J¿™¬… kpòE8¿ƒ@@nЭšÀÆ:¼ñœ|νƒm(K( (Zøy(\êËP`Ö-Ås#Z²Aû7ÎÑùµ³´?yñòÜšócÄÍ9WëüÇ?WP¿k…ñ�boŸ‡ð¼ÇC¨+¹ìP)œ".õ–\~D¨k`O·ÒcK›X¬ïƒAyeg?;ÖàoxoõD$÷ñ®Ü ¤–hT‰³ôñi`áÓ�¼Xþ4ÒàõPKÀ> »Êd2WËS\ëÀß¾xŒ[¹ÄHb¦)› 'ˆ3ž E”¨ÐáË�àË2£L8~ä8‚#ÑÒÇû|{�UŸpñf‡‰ˆáfº„à§¼xã·à<Âã¥Ç%6gaÿ„K?�q„çÉ'h´/‘ÆŸ)¦Ô‚ r;·'�ÿüp'°Ìmàˆ{�þE2™L¶Êd2™LæÍ@d Ø”HKÄåÁ/ܦöú4\&ô%~L·¯)…£y�?¦€( uýğϨ9Ý_Æ"¨V¬ˆÞ¹w“ÂÅ`Qpj¥_ß-ìåÛÐ�cHaWÚŒ¿ûʼnMÊÏ\D*Å�Û ?k6+Ú¿wŽúH—úÝËØ•ÒO��À*Hv¶¡¿…�ÞèÍC»e‹¯YîÀÎÖôü«1>fOuáæd`‘sc̹ÉÔÂçÂjÒÞô?ïÌno—ÛÔo_¢¾g ³p¢Õ�vÇ€î=ãŸ+¨5`kêZ(,à€;÷nsf{žÁ¤€âî=1TÚ’§6–ôÝ+ëàžEf_‘hÒ‹ŠBãù ýÜ…ù‘挺¦¾¹«óª³]ÂÄÝG¶¦ó(CT·›_Þ™L†Ýó0ºìŽøÏ.ØùnaƃÑ^à ÿÆ”ÿâþ" ¤ƒ½¿ (ˆ[ÖhB¤ñ}f‹,ŠO‰¸#nmä÷Eê qáÊθÂrÊ:)rãó�¶’°ô!5^$.“$\ÔſР? Ë›àú£Â‰ß¦q‘ãF¬“”ø¹íÆrgÍmG@hLóúÀ­ë&»xËd2YÊd2™Læ­@d82‡ÚFÜž ¦MaÈ»‡‹Äö¸R "Bë f!áïoŸõ©¯÷;ä™�E*-Åb°â-w\2E| ~o]º—kÓíu©+8ÿì? EI’ꇗ±wÎS~êÅÉÄÖRœRœZ£¾gžê—ÑùÂÿÖUœ¤~Ã¥ýMØÞ˜æ��V{*µ:Ó´ÓSð–PO`°;ε›µ^‹(Z€€b�®³9A^MÅž³cd§Âë‚Á\†hd®¥Y®�ÍQ¿c{´‡#.þœ_U/XÍÍ·Øé¯çq"µUÁÖê!E (ªˆ ÷­^”ÏŸ>„U@��áÌhY­®#®�÷z¨ñ°Áí+nC$´jˆ?W†Ú‘¾KD”qñGñªß"Î-;ù/G3™Ì.™~ž+ç÷�»·/åé�û½UƒiMSÙ^#ÍxÚ‰@hÒnÚ .€⢎‰�Ò.Éb2)cQñe6ë9bsÌ�›7BA$1/6!²šhtÎã"Œ©¥A â¸rB´’`_,¾’žaWÈ3À1—÷sˆÙ \Ìï’L&“ÉP&“Éd2בX–Å-6;�¹ök­º¼±îÁâ¯*b êsûfF|G Å'�ù³/Ä7R'Á5nŒ«VA�Sý%P pX#Vï[Ý ´É°VÜy®lP ÕÞCQ‚*ÔõÔUÙê!(Û@]l3ù®£Øç7)Ÿ8�Œ,7Ú(žïS¼Ô§zÛê·-¢ ¨‚õ�Pu‚M1H�PQ�A7ýþ¢À‹B~»¶Â�;ö Ã ûPU à]ä•€ø2€߯‚Y_ËÌkd³ –\¦VȺ["¼W‰,=”PžÃÞ>yÓ=-’Tc8w¬BUsóóŒ‡;(›¨ VÇÔ¨Tl ¦@ÙÛ›°~›³ýEDU÷t*ŒiÉÓÛ ú¶Åm\^òW”²Þ!hªªþù¯$î×%xŽÅ0^?Kš;@u‘è0Ì/öL&³ þðà¯%Ú½üà7ó”MO­RïL à¿°õ™]ˆò_Š`áÝF¬NRAÿM(FxQïBOD,‰´MXõÄшU‘F …,·I*FOÐÂ~iË¡pl À�² Ç ê4ÒG©Î¾—ü–îbbœuÂæ6»BN}`Oó8j��'ò%“Éd®á#ŸÈ³�Éd2™ŒG€½ ûÿíË~¡üð`#bLlñßFDŸˆí‹ˆqåŠA>R.ä�LB„Ñ„x¡‘6Á¾4‘q‚9Hºç³×s6Ò7qÍIÑFqDÎ7v/)q÷‚¿œb—”ïÿðÃÀ£Í1E@G ¿ Œó[%“Éd²”Éd2™Ìµb8€Ðò±7šªŠF]Ã:¤áÞ)ìÉqâ³­ƒ§M@X!~\¦C¸q@Qóøé#ri´  ¢­Rô�÷-€¢ßxl�¥ÎÀ¹è&cÃd$Œ††áNqYô †ý·Ýuœ½‡ö¡–F�,X� @+ûw{Ǽܧõ‡kÈVÕø¸âË "—Ý•Ùû°Gºè|@ ‘ǧ¶)üø¼„û< Ý/´´ñ¢�øýn›âóf}‚yu0~ÎŒ ¬y 1"õSÞ£+mìá9ì¡9ôp»Ò!JZü±Þí›1Áµ Ô•eíµl®O î\M§WÓíÖ´:JÙV'iÃ#⟟\ecØ“µõ±<ÿú�ØG–_ÐÃ�¾ƒ³‚CAa†oG/î&DÙÁ8¡ä …a?^8DZ8‘X 1¯z¨nçø@™LæJéý÷³ß|xð8ð[Àsyff3Tß«è!@)Q´äYàw5Öc?5ü- lÜ�›'&¨DbÔ8ü¾D¼%Ž0Å&ŸÝŸ»'.PIp졵P:FO|¿�œ—$Ž9V8Ž'Ö'óIƒ”D¾AB Ø~`÷ÐGÚ‚ü0h¡  Š7{~ x1¿U2™Læê(³KðL&“Édè�^#&(¨4\§®ÍLýÅ G®í !¨™W…Õ #‚ªPàKŽ0Ü�k�ïá-€üµic‘Ù]?ŠÈæ¸"¢HcìÅÎ�=�Š[»ë ì‰Ä•Mk Ü�0 £¬�„ÅXZq�ÓØ;Ýv7åç/R~æ<Œ°ÁT)^Ü1Jqrçò†ƒ]i£ûÚ¸]i¡s¦¹Žnðc DøzÅã…¥„ø#. ë¤YWƒ9= xujé#[“Þäƒ9@ƒýÌ @ÛPšCu±‡{èWòmÃUS�áìió'°úiX:µÚ« ¨na­„ ±²_Þ”/¬õP´éç^^ÎëáîÄYq÷>ŠßƒÖIG_.vX»GqÇ•ý ø¼ïŠæX.õ4^ ¢4™Cè‚ô�~~ýg2Ò|ølž†+ pP0%Þ„X§e=Áîé;±íBwfiqÄDÝžùýÖ§qwm +Ä&2q·cž¤µJ\°Ðˆ+´0ÕÔ|¥Ý¥yŠ!.–h$Qñ-#-Ù/‘yMõ ÏÇDú?ÅWÏáE”ûŒs‹m9š L&“É@™L&“É\ °Š°ŒhÊ Ö¬˜ï¡ˆ£‰‰¡q†"^H‚fÙç›Z�¢O,Š|ólå•í®ùôù;À�©íRôË.àô�ÕsÝ3hXÕ5T•¡š£ÁÔhð•­_2Þ)¹ë¡‡Ø³ÒðV@àóêòŠ,ï…ÞâîÝÂýùyŠ'/‚U°�E”Ÿ_†ÊEG¯Äîk£{Û_I½0Ô6 (b ¤©Ÿæa¾VÌÚsj0ÝÎŽ ²á­áûix­.ü|‚îë\¶ì±GæÐÃsØå×–ÉÈ‹?"�ø3Ã¥ÀkÏŸáÒù—èÎWôæ+ºóS÷oݹÚYM·àdåS/•WϪsç'h¡Ø¨?°úúŒ*±®¢4ž±ÐOÓ3qƒ=ßÕ�¾T5è›rÕ#³ó^o�²•Ý7e2™Ìµ¡õ où~P¼‡G ÿPvÉä÷~rÁY‰8?áËÞ¦DœÐ&aÑÓ¬÷Ø„`äó Ë•„H‘+NìË>aYDzü´hÛ�RVD‰yó¤æÙ“´ ‹Yà—\úUÑzÿOß¼!˜Îÿ#¿Y2™Læê(ód2™LæDV€ý€�P@ÜâÊšˆËquŠ*—S|}Ü¥“;~$ÓbÀ� 3,ÔeT ”Á7p‰ê¬ŸzòÆ`�ààÀˆÙh#^NóXb1PPãÅ\ÞZ7„[Ãų°±K{a~H£½’É·¢zÇ^Êÿw†â¹�¦–Š6 (ñeô~…Ù©àä¾�.¶.‹'º§„¶A;mèLó´§›¶]]iÒÂJe‘�éWÈv�¹0F. >C¨•¸F(øë_/Á~ôÀõ] Øã Sëž–áú¡ÓÏosÉ‹@ˆË7ã»óînkCÁ²ÉRw€ÒCE‚gß..ñÜ~‰ÔAñÝ%¶Lâñ"êÊ!"a*17�.ïëf赑1<^ðQ—z—–ÞÏ`ºŒ0Ùêüõ�Éd2Wƒs©Á³d P¾:¶�Ðý �X{i¡B#mµ9ž'³&*|„–FIË×>¼æà¸&%ºDÎ;˜¯€àxá5„ó˜°Ì‘`~ldN51÷a+¬¨¥S¬œ²ŠJ{Ï®‘Ó@ ´žŸý@æwK&“Éd(“Éd2™+CX9€j;ð즨ŠkÔ¨OÄlqýÖá�Z‚ýê…(ш'‰™xÉåñ‚Pèú-…šAðAQ—|I.ŽçQhŒ`1̵&´ŒmDQb×ëRg½P[Œx‘BÀ[Ýâ­€Äåëj*m®Ãò>è-it¥Ãä{ŽSŸRÅ+Çu`ä�³ÝwOÖµ¥¢¢¢¢@Âäè>ÿ¢¿#hüïS�1?ï¹�m¼‚Ž•3x_;»2— ˜jÇ�#�†r9à­E‰&×R\ﲊÛmåÐò&™øAˆÍS€ Yñ¡*¨Â|ÞyŠÕl ) ˜I8±ù”d"èâY˜LwEõ'÷쳯¾�tz�æSWh¿ ›]ü¾¬âC_ÖÐ-Ë[²Ñ•w”v�8ß„î�t¢¿g?´ÂMƒ*\½ ×.ƒ4 xso §ðB³ÙöœÍµÓeQD<ù£D8u`Cr-T1µ‹œÛÚ«÷gHUQ»q Š)±Þ(~ž�ˆÅ?£EXý`ͼê'6!—Ë÷C¦ë©;¯‹Eð®Ãa/Ê"kÀFý⨨¨¨øì1ùGç¸Ë}±iNŸæ•áððF@‚¤É!”•>g<ÄŽˆh2Œ�ZPÇh� úîú˜± Æïã…¹“`>ð×‹ÆæÛ Î˜ò‹TKÉÊ8X½`ž ê°à~¿¬ð* ?#ÇF>kwU¨¢¢¢¢@1Dèq�#¨fÂ&+LlÓ$É�FŒóq¾8܆là—ÃàýyX!‡€µ‘óc?@"X‹ÛFvø{6GT çQÐ�é´Áol÷ÒèáåukvìG­ØYí ‰" úy‡H°±®v àýIâÝ.¼Ó%8|öî(C ¿{ÿÎ1ûº;IϬîAéür!›Xë5¶º®¡Ä׋˩Až¥£ò‹ó"' zûž�ðyèàá…pó±½³ê'�?$Hžô ×7QíÉÊ1;ÏÜzLÕåv[47®)‘ÙÙÐ Šƒ€5i¡¢Á6ˆ7É0À8?>žÔñ„OT׿Äfüú„�G¼r(7ª" ªPö«À¬~‘TTTT@rt:B&lxåøð¦P¹›,Ã¥{|Ý2é�µ*Eü9|Ù‰ãË„}�ÉŠJC@<c2Äc-›žë D�zr'œsOšóÒû6"õ�+Íé#¼z8 | ˆ`¦Ðcum©¨¨¨¨PEEEEEÅ8D'@P@A1¢D’Ø&ko?t¬ÀÆO¼Yoê_Ç‘CÞׇG.'d˜�ËAQðð"&3ó&Ö±„ÀµùEðý˜÷ÊrÛ!(9Dƒ·%�Aéæ=¿ä‰(Ø\Ô;bHR&‚ÎÀtŽœ€={ø¬Ñýƒ‡vz%­l!ç7‘ /1ty{¸¶‡ñ»-§¥Ëå—º»÷„σÑý^3(°r V¯äùmJÄO=ù“Ókׯ“H�f™’’BRÇý(cH2G™¸If:Á¨(XGr(Ö¼Õqï;‚ÖÒ†@ÅCnÉ“¿Ør9+/¢îR2riWª[zœä ßÂ8 ²‰êõꨢ¢¢¢ˆ½ iDµ²Î«ƒ«YôÐAÑ0 …ªŸX¹“ˆM¯õ±ïŸ²f¹dò- q’WO¬P‘04h`þ®wù11dP×_Cyœ�!˜[Å£|_4š7·)w<&?ŽUà9^5Ȫõ/M0h]Z*****TQQQQQ᱑S K ‚öºh†]ɰÀ9qÇØ"I’‰0ø�[O‰‘4¢#iGÅp~~ äñåD¨X±ˆ E„ܹ>oP¼ÚézašJj±M~UE¤¤Ìæ’\?5§Tr8¤�|#ƒémßz¾ çOþƒpô$¤Ä®‘„þèxùø" �’.mfB(‡6áÊ7{[º{ö£÷Ø1ëÖŸX„×[›pùÜ úÉd�‘?'}r¾Ç•ó—H©GRR$‘ã  ÄÄÃï»È”&‹›k»ÀØ ‚ f÷1Ç=ScÄ�{~#ù–aÜH`�6‹òeÕ_"ו‡ž]Ž)‡¨'¬+ ºŒ°¬kÕ?PEEEE‰R™ýg�W¿¼ÑGÄ*¯x!¨“µ–¶ëˆ�T E"ã¼ VV£1‡J�øº _¶LŠHAÑCA‰„/S"Î,/6ËçÚócÓx®-„ÜÇOåðU‚¬�«ždo]Z*****TQQQQQ1@dœb¬‚7Úƒ8¢DÜæ«Æ6ŸrÄ›dRD¬ ·WŒˆÐ÷FyXyß0jjSìÖ爂 Þ�É0IÅN×[ëZgêÊFKi$"äqš£ÿfÈ`>›;‘Á¸0è�Òœ© $‡Úc¡Âú*l­ÃÑSæè•¢úS{áÔ^: ²Ý#7�‹›Èƶ:d«ƒÍnˆoæô–…Ì”"’À¾=0A÷OÑ-zrý=é�/ƒpë`ý:\»Û› švÑ¿O#xÄÇñ°üµÕŽ�µu¦KÑÓ4ýN˜²ºHA¡i5œ�ù|e?"‹ïŒ)Šb¼�æ4p蔓"¨SÌ(ŽÎy†Øœ›ª†¨½’Çjü†—ó%”ã¨ZÝ!m}±M_Z?Ý\Ê^„eà:°Y¿p****P¦4™‘\Z’¤hf¬@ˆX^ì¿Æ‡”Å�KžŒ²t¡ŸÖF©¼Úp„S8Çêê¸z£Hî2!‘<)¾×åq�´ß�ñêbS)�©éöÕµ¥¢¢¢¢@_èH’PŽGA3}d„ ’Å)[dÌü’Å…Å�Ó$JÆÈÆ«µ­*ø7òsãnÔ6]Ëס,£yÄîfÅ…jd’W*å¨Ì5 ’Tµ—¡æ+¨ïæÀtôú©Qº.Ñ$ef,�´ÊlkñÖ¦^PLX—M dä�@ïUA=\| öìƒc·AÓp# K ú†ýðòñÙ¢Sd«G¶æ™(ÊG#p`ŠîŸ {[n]ô ×W`uæsH©É÷ �„ý^ì3àM"./ã™k¤¤´¥i†#%¥IC\;‡ÏÕlÖ#"&,KªÒÓ,#j8kвF-üû°ªµ’ÓeòÇZ.š©1ÙÚ2xÒ¼ºØâú¥yÕ]ß'�)Ë­$„C¨îAäzõTQQQ±€} Í¢ÿIÀ:¯.> <ȱAáÅ)�!‚G¬ ÑLCPO‚ó)R/ùþGý*\#¹ÐCóѸ~J*ß~L˜H8‰+±·. 씸/~¼œ“à¾û9|â¼ ²¢€ˆH£ª–�˜×%¦¢¢¢âsCªSPQQQQñºF’C( GHŽ Yô•£=ös&%rÝfiŽ þQ.¢c ÿFž©ÀH È!"�O‘ .vXV.Øp|Y©DN.7Š’PŠä0±¾%xY¡¡�$�5ép0„I”õÕºù¢cÿ$Ø‘3ýej"š!â ¤v'ŽvÈß\‡3ÏÀõ« rkmB÷µôG—éïØGßAú/:BÿÐaúÛö¢û'yœ·ØÑw°v .ž…Ÿ|ýô½›ó!´{“,. 2h¡Ýw»ÖÖFϙ瞡i•ÔôCØfÕOÂ=B¹ºÙ€dÝ"ªˆMšcfÜAœ$Ð`J°<{è-¤à+,׋ý XûŽ­3vÎú¦.¹œÍŸ�FÈùÖ7¬:XAAmÅDdŠrÕƒõ÷DEEE²_DR>1lðêâ2ð4¶þ&¯äˆÌ©ÈŠÊƒ`J£4V&R¾†tô¼¡Á ®®Áò‚>Ädˆ“›Ërûéä‰1˳Ãå%FsèϵçÒ¸:‰ògÀ«“Áp#T@äg¨ÍGUUTTTT¨¢¢¢¢â I–¹å„õÔª X¦šï #>„"Ž(‘’Ä †œL@èfúÍ;hw=vmxïñVÀòð*±ú‹„–¸ñ,ª“t_3GEòŠ…ç¯ö€AÇLV¥a¼Y½‘éX½:aìÈpäPi !1¢�”ãžBàò8{zP«�êAù�í­�èyéy8ý \>k #}òÑ4Fô$‹“»?Fôdñxö3çAg4mO;éiÛlþmPå8ʺù\Öæ�¨k\é@¬º¢€’“-�ùýò¾uÜs©þyô ­6Š˜y7#‰da½ˆx%UwÞËñD“݀Ⱥ¥ˆ¢ïGÉ›¼ƒeT�¡ZíóWTTTúG¤iÈÊŸO Ê«��>|Ämì§€$ñõÔ•—‚ï‡�TH®®d�?ïëª#=š€|)íy5®¼ýƒ¸ý²ù´Ø·ŽŸˆ}íh\ÖÊý/^^ÙÏ»ŸësÀn$“§@iLQ'uï²¢¢¢¢@_0H©%É ÷{2g££o¬“!GFßpÕ1ž$ÉÙB‘Àé»÷”ã€åE3=U°Z´ææÈæNrŸôÀd޵&`×–Ó—E°ëÚ<™Óÿ�ô!«Còæ}«¬\Z‹'i8p‡™’ÃHžE%�-X8�gž…k—�Êïà�~×àÊy8û<<ÿÄ^»ó¹Í¥Ÿ×Æ“nùH)§Mñâîg>D츶2ãìó§ÉäM«;GÛö¹-SŽ5�"ù&Úf¦­‘–ù@­Ì0óŠ‚ ãΨ Îi¨²gɾ®Ä„ªæûË®ãIⱺ ÞŒ¥bqÕzC1C$‡B.†8£,�ÑÃy#Æ÷DKõKª¢¢â ²aäÏÂ÷Ë~^}\žÙ !)N¬\l:-ª¨Ypæá„X¹B¡ÝT0åFHæäò.ݪ Þ•õãÂ�#è‘0+�kŒ\_£~¸¹LQ\"eODʹk|òÆ›QÒëu}©¨¨¨¨PEEEEÅç;D„$Ç@94ú&<"à �^dÄmª€Z#ö´ "X^ ÔQSüh>#JÒV>†¿˜©°¸ˆ�CÝO@3s‡¢yðvÞú Û.WÈK×'tó9C’fõ¤4„MÛÓ4=ÏžÏã��˜†1‚H’‘ ’B¨ÍG‚«—³pk« ò…ylnÀÕËpþExá)8ý\8 ׯÁlš”çl6‡žøÉñäHwD &ßüñä'_T?“LüLòg¸¦f2QMuàÚÊ63Ýk–|(è4Í1厢x’D•ø�bUü:£ªîÙ,¹íò">"¢ÈÚåƒs9ëW’œ^…àê¸Î˜2Ò ÚÎY˜=[PÐC¨Fµú­¨¨øÂƒ™¯jÜý>n >$(‘ɯbheCïÚ׍ޛ#â>j¤´)(wJU¬ŠË †(eq™é ®~Žâvâ_J®ý’ ;;Ö�§¸i& {A iÐ[uy©¨¨¨¨PEEEEÅç3R:€p?ÈI�äÝ×à,ª–eåÅYÏ™FÊH®û±¶È‡o_½•63Åäa œy<˜òÀ6c-q\I†xþY �b³v�(“f±A%É…íl®oÀ̽%!µJ;íiš¬è˜(Ýì:çN¯í޼„€Êaòª”#&ÚáÐ.žƒ3Ï DéóûP`ý:\:?Œù¹'àÜiX¹œÇ¯ÐLŒÜi[°´~n-ßæ^R@ö�‰�s§×¹¾r‰ÉRG;1óoÍ$›k‡Èa…ßy1Éœ©‘–’ÐLíK›€I"‚A¼ÈÁž+odÅôH¡ã|ÿŒø2SpCÜ X¹…¼Hqdi[Ëûgþа|ì~¡X�Š3#äö½¤ˆ)pÕ¨Jý«¨¨øÂHk檤ÉéƒÜ\ž)’ ±™0ÆÊJŸ§�¹7-(X4"/‚kGyôÊ Jcöí¹0„�#jbò*šß—Àì].’U�Ë •C�™= úû(ÐqC û@œü_Z�ͺ´TTTTT¨¢¢¢¢âóI–Héà.`j'#ZðüO>BöIê6cÕè·aNoì‚å„ÕÈ#¥Ü#xUA¾€™b²s6]ŒëÉ3äçÐÈ*kGPÐíuûÑ©ÃäZwˆÕkÛxˆ(©ÛØWšLe5m£4mÏóOƒds`dOŽÛ\jGúŒ>fÖÍ:äͽù£ë”§}f‡(lÛò'÷E‘ÜŽ)b”1lmn7Ϭ‘EòèZZµl÷¬Õ�È™KÃD"âå–tDq ò& sÜwÂ|‰$¿öØÅPGö (˜º)p ¤ >‹rܯW‹jJ˜nÍÙrÕ=õˬ¢¢â iÝü–¤iŽ‹@74ð£S6Uæ9–¯A<$3"õŽK7�â&8Ê~y€š&†Ò%Â¥skr¥;˜r�ÌOÒ:GÚ"‚Œ<[ ö�Ž¸Ô‰¶·ÔË ]2ÀÐ £gSUñ똪í+ fR.š/„7Ù[0"Ì �ÌÌ�­¹ 0¢d²zQ zÕiýr«¨¨øP%À)€8Ä�ÃyàO@X:$?1q@HZXZ#ß;…ö¥ dÑ =)ú²8…6Ý""Åâ¾¾o?œ§XåCÐvaìá˜æY‚ûÞGíj¤§n,#‡r˜ìºÒTPEEEE%€*****>ß�ÒQàÐ# „‹À‚ûvAÕ±ªjÄ‹UËeŒL‘ȸ/!°Ð“4Þw‡Ä›²úíP L9ùÆT-t•d¬YœkK�ÂÉ ¶eÜ?´ïzî(‚$›,‘æñµã\[Ù@PFôØ|û{v� NjϮòìgžd2íò1�@í$› ls˜ï©"!©2ŸÍåñ:YÓ£¢&CaºæÖ /×QЂuÔ+lðq‰ÊJ>¿Fɲ¸fh½ØÈÚ²õ ‹;2ƽGlªÈ^A 'Ó”¶ÞåÿÈ=´zŠƒ`Aƒê¡|4õ‹®¢¢âórè µ F™åÆáCîoVOQ"\™fÄ„.-ÞŸN·ò±"‰‚i¸-ׂRÉÊdNAEÁ„œ Ú6"ΑHn Ñ�…®~@ܸ´Äf⬯Áýû7r?ÈÄžÉý‘+um©¨¨¨xeþúOÔY¨¨¨¨¨¸°¸ ˜b©�yo Q±r@¯ºÀw¨ÔØ)r¦¸î¢#›»±_ ÅMY)l�6T¨#6˜<61U€’õ-˜³¡°’ë#äëL~úìÛØì÷àÑ2Ÿý‘Û?Æ›ßzœ”rydhE…¾ƒn纹0Û~ùHlo5lo¦�ckóåxË›ÞñFî¸w¯6÷Õå©&òè}¾+�ݎɦS˜,Ãt –– ™pÓ°¹>(”¶6`cñ­ƒÅÁ�³ V� ‹[D䇵ýŠpöôŸüàcL—ç,-wL—º!ÜÓ³´Ô3™fàÚV³ 358†‹g¯µÿü‡åìü^q2›î�ÓG»/ÛsÄHbð#uyÁöO®kר=LÝ#¾/,zcª!K;y"H0.GB¹Ó^ÅbyËÔU´ºÎ^§Ú% Ú¯#²hýꫨ¨ø|ÂôŸ¬~?pßâ‹6ÚƒüKàƒÜ lÿâ{¾x«Sux½¸‡ÀÿÑíòʈ¯çÉ”> ¥<¤ØO “kWñíûÐêiA åÛÔ@¥Áx}š �Aºx/ÔÏ��Ÿû ]ßþ§�÷q1ýúzp7¨‚¤üÜð/€�ÔÕ¥¢¢¢¢@¯_L9•Íiü›Æ“1½¹"æóFDP;a)¿7ª€]/ÚØÍåÅúà‹€f&ê¼'ƒòuye2È]<øéëÆä $r®#� ŠBû+—î�6ï»BÿÐÞ§ºo{ë�ìÇ“d}ÚËN8Ÿ%æsa¶•˜Í„í�ÄövÃöËé­´C=ø¶¹ûÁ|®PâL#|Éô ŒD8Rȵg·¦Ë0™‡ùÈ1si’Ó"PÆ0wÝlPm¯ÃÆú`ÎMu„è$d�/'1�#€Õ HŸÂîqá¥5>þ�ÇiÛLþ,w,-Ï™.÷L¦:„“¬jI��É×¾çw?raò//½K:¦FhJí´¡›}ëÁ³DyaÏŸ`dñø’cåí”Ý ÃGØçCTU‰áË{“Am|VÎjÑÜàè’`çle°ªñ^—‡Øšm}ë�u`£~ VTT|þ@׿ ‘w£:w‹ãG�~  eà�{#‚ §{×/ŠñX¡¢�¿™ð Á�ß=b‚„ aýhnÂrÖvÜ^œïû¥…k…dQyN�Ì Û±ò6î¸OÀOëÜ L¿á‡ö€ü]PAé]?ÿ*PU@•ª¨¨¨¨x"'€#ã?ÔÔlYÚ‘7¡»uíYE°"aló´ð6^$ð¤€Ê7–^ý®®7—»iŽÚóYŸoªXݦÅ�Þ•ívòsßI¯b6¹3[²Ü¬Ï¾óöG¸ÿMGišßtß cïæÂ|& ´�I Í&+‚³�£áä�oàÁ‡O°¼'½zD�b�‘9!däŽ#ˆ¼™>ßžpbü£œ’D’ "€n]7„þv›bÇÈO‘Ó ÀåG øóº¨Ë³w�s/®ñȇGdÎti ¦Óž¥½Ó¬üiZ݉‹°O @L]|éjó3ŸÚ×<9{ €wàÓoŸŸ¿{ß³¨»1‚ ~aÁž'ÿ¨kÄê”Õ@ŒTu„±oBCu!1ïdøB ½#Ýò êAÁ F(9jÛ‘Aù’Q=ÜuTgˆ\fõk±¢¢âõŽ¥[{‹Â÷ê¾V€ÿžˆí÷½ç!à%À®Õ( u±±‡ Ïà”7qô!n·ÐO-*_b%�øx0†Ý¨}Ð]�ÕÂq¦òI»%àœŠè—�OÜ8èy›À÷¨êA°?n.¥®,¯ Âßøu*****n6£zh0Ä?ÉÙêH{›< Fú�Ô°–Õ6xmC47à-GiÐ7‡pCV±k‰+«NQ)�Êj D$Ç ’ÇÿæT<ɤà³Ûsñ¹8?¨ßmî¿hïSÝ7Þ�·Âw$›‚“�£ŸÃ|.Fül'f[ÂöNØ0Ÿ%T§<ðÖ{¹ë�4 ¯ Šï—Sôô94r'v¹äˆ O,ÆëÄú‘:ÇÈž$ø2ž²´Õ3äs†¢©·Wgž_ã“~œ¶™3™fòg©ßQMvÈe2éiwÔ?Š‘?±é·í­m>ò‘•ÉÏ_ÿR™é²ußéÙØûA½½Ý‚˜¶SZ0¬ÝH/ï1cä�[CÔ=‚�ÇÖ·æ�˜´Äsíþ1"Ä)¡ÔM[AŽçú™£¶ëV&‚úúYQQñzÅôÇÖ–€ Imsÿ¯çn, ôß ÜHAÝ� ÒÆòcƧ½"%¾QñXÊÄ��»6dJ-)¡ ép>‚ëîF±$€ˆ8Ÿîý½éÛóÀÏb¸Q  oÒ×�ª‚bø PßZ¯¨¨¨¨  ŠŠŠŠŠ×ö·!²<¦„qŠçHŒ¸±ühCÕ«‡œß _uÄtø ÉäŠ]Êùç!P$¹~މÊä�µ[/›l÷¤—¢–2’,=±±¯ùÍ•·ã&U´•Ùìÿ¿q{ö.�!û2“p]—Óf³DVaDPb{; æâ¶öì?À[¾ônŽžœòªCG,^ò%ä¹uõCÒ'JHL¾H&¬˜àÕB|ü¼xñ™ë|òƒ�ï�>“iÇdÉ‘?Ý ÛLüd“o¤&&På™O_jÿÕé7¤óó{õªäÜì[ö?Fš8¡ŸÚDªÆÛ?ù¯BŒM9R&‹5×óÊYXSaOÙ�[;a\X¨=øµHQ’'~pkNNyNÙªx�†D#ªzD6P]¯þ�***^¯Xúñ�îzP55ÿø·Ü@l½ïÏîþ+`iWªKKh²Ì£ìŸF e V±HH.9xRÃÚ+•-+n\X2í†CÑŸW•UCBœö�HñôÅÏÃ<“/W¹�Xú†NÀßcH s�ŸÞ_W•ŠŠŠŠªª¨¨¨¨¸õ1Aõp`ÄéyLÇxÞÅC¿«éÚÍ�m„º Kg~Í`}uýŒ6dÈ"Bß›òÇú Ü„�¸q³ê,âY¿0µÒ˜I°ÉO_xX®w‡Æœ�ôÇÛ—æßqû³ÜóÐ1çãHLÁ�©�f’I —Ca¾�I m Ù�îæ‰c§NòÐÛNrøØ„ÏêQ”‰!1 WRý(»ƒX(â²Ä�ß%Ñ#…s7]O?v…'y’vÒ3]2òg2íYÚÓ þ~&j~ZE„¢úçêåµô«�ÌÛ÷o|J²g- ˆtï˜þN÷öåkÞí –(vWÇBò=^‰ä6iCÅ�'rŠæß  ß<TVA¼‹l&�Ü”¦Ïlîkëê;Èó;¼ó/ßÿ‰þ«ï›qìäÁ‘ûkþ€ú^èŒbžÉ ùövCz €vH¢!~ê®<øð)kù\¡!)ã  ÌÉm¸ÌÝC€XÅSöß#e_>"ÜPA3çãx†õÕ•Aõ3í™, $Ð@õŽü ì/ IÊfÛs>õ±K“uí‹eS�šBÅÔ*;êŸoÝ÷©œ†Y!�<È+…Ä k+zø’XÉpk‡âá‰âx}QÄL^æ|7ïMl$ªŽ« ýŒÉ‚ HÆú'¥(8Œ×üÍë×iEEÅë‡Ú<ü] QÏü8ð€Ký™·_*SÊ>| lN¬�Ú*¨uÊjOx8ŒµáÛ.ŒÇKã®åêÅ(”Ó’™½XñSVn¹ñ”TNDy.þëÀÇn<ô¿þÐßÒ`èóõÿA]Q*****TQQQQqëâp h ÎÏ�DñùhN v#bÔ‘�I'OpX¿ŠÖÅJ�_ªdV#÷5"‚öT[ñy±å: ~<žL" �Úsé¾t~ö†±ÎjËæü݇?®ïxh™ýöŒ“@=h/;áàh ƒæÝ@ü ª!+�ò‘ãó!}Ç=§xèm'8p¸åFB5 ‰"šF ‹”Õ9⢚‹»eÐwðÔ£Wøô'ž¦m;&Kù3]êÐò�n§JÛ(“iVþ4ФLþˆSþ¨@N÷}ÏS�^læü=éB¢~Ò•D7û{þ½ÞÖ̰|AŒ(²0�õ¹'Øß±m´òƒì‰à@a›Ï±µ#hV=äHkÅ  ZX�ÙK¯:Dq}²â.ôd÷¨O#Y4óé° ¬Uÿ@¯#èû€w€$ÌÞæsÀ_¸ñ$Ð÷ÿà+ ¦ÁJj(—‘‚ŸšäÊ;„J úù4Já5b"K‰Çä7^ÅäÛ èP®€]MÁØâ9õc±sÿøí›DþÜüe˜]Ú!þ÷€GëjRQQQQ  ŠŠŠŠŠ[ËÀmÀ^l£Òmœºü'6ÿ¿<§Ûaä�Û5lÆ”ˆØ¹‘¾€!v¨ý‹ÌÇY[1bBKÀ™‚ËÑpƒW¬}ÊW[�7“Ÿ¹ôN™ëŠø.±§]ÝþŽ£Ÿà¡‡²´< ”@Ù7P?äuó—ãéÓÍó¹dÿ@9�‰¡ù,Ÿ›5Ì;áÎûnÛ!‚öjxÅÐ8­”¡�’¤¤ØÙ=qt“aªŸ�½ÿ®¯\e2íÂg‡ìé˜N•v¹Ò;ªŸž¦eQùÓ+Pxá©KÍÏ¿p¤yjþ6òF�gtû;Óãó?°|õS.þ:F,[è”;^½h*!U¿†aiƒk;÷©üY U5±‰M#{Çbce—D‚"~n .bòÌ@e(°¬×¯ÙŠŠŠ[ŸÚzøóÔaÅ_ž¸I$Ð×o�üèÄj�Xáãëb•K�¸(¨R8‚¦@lõ®lˆXEcׯŸ¢ŠàšFŽÅdœÅË}ÔÈÿQ‘ü²ð1à½7‡ú‘ïýŠ‘{wøÁê°¢¢¢¢@·Zà$pbŒl¢ªÎo�7i6þ¶¼ X*§±€œ‡*øá­¨Zûv²ÈÇ”�·K0fÊo¾[§Ýf4Žø«ZðÓ¡ ºËQ˜ Í®mÙx«z+_±?Úž›}û‰'¸÷¡#´m�@vß».›…ËŠ ù2ñC77³póyÊÄP²cž¸û¡ÛxèáãF½R(»/¢Aüº"6õCxÍÐÏáÉO]áñ�=MÓvL&;jSÿdÅO»“¯;yMC&uÊŸq\|éjú¥'šÉG·¿ ¥Qмˆ¢*:euû�ìý0‚ó[#˜)³@m㓾ŽÈP(ÛÌæÙ`œRÕÝ;Ѷ6REìVÔŒ¤e!ONÛU­M7´Œ<§úÙ?žL·²PæÄ»ln»~íVTTÜÂ�€ü=à6ðŠý]àïÝ$H€o#‚`7J OIÔN‘,*+�ʾŒ ã´¸�+Ã×-#&àâqÆóû(ŠÇã9àg�þ&‘?·�þM�%@�è§€÷Ö•¤¢¢¢¢@·8†È TeÔ☥#’¤üÃÄsDäÀ“6¨SÂÍkè÷5ê‹�Ï÷{=É#$Ž„ŸªñOö1Óv)o<3"E@üî/ZðY+ÂôÿºôY™ŸX¸Ö)éî�>9ÿæÛ_âŽ{�Ф›„STA 4B/‡½ùÚ9æFí¤·]—˜e?A¼å |ÑÛ�1Y^kèn !„[¦ú™ñ±÷?˵++ñ3í™ä£Ò9_³êGi[%5ùÓfß2VWÖÒo?²5ùµÍ/§“=0¦r‘nþe퇺·L®ƒÑ97;¯Š�,¸”uîca V-RD*K‹ÄDt ™tS<'qO9 ×Ü§Þæ «b—ñ„³�¤ü ¦/$”¶�ë@W¿†+**nMhûÝÀž£2„>ÈMÀÖ{ÿT|-ð0ñßÚ!Y_ b¬n9�o£ P1õŽ!¹vJ>„ðã  ËŠâs�ï"yefÞÊs»Ë|qy�ïæ7Qýóß!òÅ€¢Úe¥œ‚Ì@¿X««HEEEÅ«áoþd�…ŠŠŠŠŠÏ€ÛP�orŽ?ìê wqæÞ!g†b (îÒ˜…³J…=à‚ƒ[¯ø‘±üPrdYð4Æ7hͤ“\ÄÚ4\ïšéÿ³òNÙê÷¡vu Eº{&OÎÿðË$Ð=Ghš„ƒS)ªæH•ìH˜Ï,\PÍ%“@f"nº´‡/ùÊ{9u÷27 Ê̓pËa}µãÙÏ\æÉO>OÓv´mÏdÇÏOG6ñF»4¨šÉàï'5ùÓ´CÜ›}‹píÊZú�G¶ÛßÞ~—Ìu/ê@ »¯ýÄü÷MÏ:ÕO´‘e)P÷0Ŭ¬Ú3éŸ+ïÔ?Æ�w@Š[�aìóÔÕ]TïHrù‹d’k#~r^¼È}ºì(Vùü `­š‰©¨¨¸Õ°ôOg{�¿À^JH ¸ü@^øIDЗ¿Ï›x+›kÛ½J%h,žB%OìÏÇ÷;&�ü5¬žÏ£4†òØ­íòø}ý˜ø±0ì7L.’BÈÇMÃÒ»ÿ·ß‹ò=˜OF á—€ZW�ŠŠŠŠJUTTTT¼¶XÊÄÏ>JȤÆgé (xõ>¶”€FÌŽ'gz�äL­™É#Å`uJ/ÿû¸vl¼q]Jµ< py»Èˆú_4&9ÒóÛËí/]{—tL¢‹õwNžž}Ûí§¹ãžÃ4M‘@¦ê5P¯ *tó!mÊ ´@uÙ?ÐÌLÂí„wÝŠ·~ù)–÷&n9(Ÿ’Ÿ• 3ž~ì æ·Â âš3sC “?ª�â·ù]Üœ²»yˆH±ÏM¤%ÿ2~®}q›;L´¿|íŽæéÙ›QÕè3ÑŸh_˜}ûɧ¹ç¾CL&-†È,yž¡ë…¾wŠ ¹0ŸálÛÔ@ƒ ÈŽSwçíÿÉØ»?ÕÇ—ÝãúµŽ‹/­qöù+¼tú¢ÍDÉÄí¤7â§QÚ�@;¡>©…&e“o­š¿•PùséìjóÞ'Ûöã³/e®@FÖ˜°ºýMKÔÃi¾èãFÅ �ôæ"-íýæ~€Ä=Ó;ãÕŽ4¶f‚HLFÇ—´±a$²Á›~!¬=Iï¡aÂ/5~‘Äè6φÐ\ð=â± ¬Uÿ@·–ÿYÿFàïØ—ÞBø¬Â³›K}ï~à[€Û#%OÑ´˜!TÜDê•‚ ×+´ LV%ÊõÐï‚ òv -Ô+›€3œÏäÏUn2–ßý¿¿ ø«€(Ú Òb}{ ø Õ¤kEEEE%€*****n>ö·ËÁFœ¡üövü枈µþ®³|ó_ƒ¥­Œû‘eíÚ¦¢�‹yÞ'� '�qc-�@Þô›�ëî‰ߎên,‹ûºÖGÁCèûž”„ÜOú¬È�Oþݵ»ÓéÙkEâª{äÊö7z”/yp‰½û–1”ˆ P ë²"h0—ÍÁA·ÊpÌóíL™¯ Ð oûŠ{¹÷MI•b¬­ö\½¼Éå ë¼øôE®_½NJ�šž””¦ÍOöß3Fü¤ÚL5Í�FØI‹x“o¸g]ó½ï9ýìÊäÿ>}*�îßJ¼!£LX›}ÕäCý�ͱÐÄ'-åÙ{6 Ï�6 ¸b¥*Ša7þ¼äR±¤‘>.mk£%FÈt!^ûAÝœ—7ì´0/^]ß ¿ÆZ¥M�õº™TQQñÚ“@ú§A¿¤íl”úÀs“±ùÞïà]ÀêL©=¡”-˜:+× •3v}#—,´v >}ÀŸ‹}#•Ͳ…°ó%••]ßP¸/eصçÀû�ýk@þœþgààÈg¡ÏäÏ“uµ¨¨¨¨¨PEEEEÅÍÃ4? ìŒ»´ééˇ?ÈÊæÄ}VNi&&È$…pû¼~cÑ=.î}æXPpÎF(¢lƒµU÷МÍçLæ!KdÊ&3 爱ðþOÞ·zgzvöfˆÙ>ZÙš¿sÏ'º¯»o›ÃÇ Ž2 ‰ P#‚è¡ËŠ í`{&ôóÄ|žÉgnž�Ã'óÅ_q'ÇNLë£ Ìfʵ•+6¹töç^\as}‹¶QHJjt }ÍfÜ 5ýÎù&@YD³òšÆ|ý8â'ÃL¾åöh(Û›3}üÚô__}‹¬ê� ý"ÉbvɘÈêöïo?¤w´3G‚”‚¢ LÆ•ÞTyÂuЈÉÍ9‚$ YðüÐ|÷³˜®´ç4ÇÆLÚaù~. 6¾]À+N-òhÙ?›õÁ¯¨¨xí �þ(È~�`q!Ö~à5 ‚Žïî*¾JT&÷cuP\§,;‡„¡Ð¯‚¯ž²‰°_†Â¹"Qã‰ùlûrR¸ö‹ÙçÔ%€›Oþüè2ð?÷cÄggŠ*ùUàGêJQQQQqàÿ³ÎBEEEEpô ¡ÿ…²úÇ#–~0æ6"?YO²ÐÖ¨Ù¸E3P~5�Œl|Z{“÷þ<æŠØ \üF?‘ß+ëÌ9�p>1)$± ÉRŽ(Jâ ¡ö—×ÞÐ<µõfçkHQIä íïž|föí·¿Ämw¤I #0í *xEP?ºžlNÌ,ÜL?@3a¾•˜wY!dæá¸ã¾“<ü®S8Üò…ë«+·¸r~�óg®rñÜ*)õ$ˆÉDMÛ*bM«dæßRRÚ ™ô±óI”¦eh3))9ÂÔ?XVWÖåW>5ŸþûÙ—2ÓƒŒAs#K¬lÿÁöƒz"ÍÀ¯Q^ ¨Œ<> ¯¨‰'XÏwÇbDÎPœŸ«ïb#M2!ãæÈµ7JÖŒ±a£Ëåg½Y˜çÔ‡å)-“åþ’sà:0¯_ó¯ ô5 ?"FIÂÔ¿ |ôµ!�¾[€w_ L�¦ìï&&‚´àÏw­’‚ˆ¸�XiãÊ—}Åy1lœ÷Áç‹W3m¾ë­œk{üð;€¾Fä�€ü%à÷¸q èY�?¬ÖU¢¢¢¢âÆ@ø[•ª¨¨¨¨€Œ#('AÛ€ø±øX ¨·K³þt°±+Xž+¼ø;[!"Ù¦¬Hì¨è䜀ÐÂÍU@ü„2*Sy2N 6gvuÜO’úùSEXUmmýŽæ‰í·¡ ˆ(Á84¶þàÁÇx×K,ïYr* À�œ™†Ëj Ð^Pº9ô�0›eBÈÔ?Ì(DÔu =|oüâã,ïK|>bk³çÒ™MÎ<•ÓO]bks›¦ÉäNÂ!Í@%%5ì„CÜ=ƒ 8•O2bH™2µ‚ùúi2$Œ»?èûžs/^›üÔó'Ò‹Ý›é™o4¡K\™½{ò!="³üÙs$‰Wò¨e‚ÆëIß,»S=”ƒ1 îëÅÄz�)d˜BÐæÉ@ó+F-¬`ó9RÏ´ Ï© ½µÞÖšÒwJ°/fíæü\'û¢¯_ù7Ÿ’ïý¦€ؾ?«5x�ˆ ƒÀ×ê˜ô�i8"²Ç£ìß§¬® ·�Ë êõlÌqß=Ê~‹´àc¼O%KKàk,ýlVý¬`x  øGA¿БqÍ€÷OÕÕ¡¢¢¢¢š€«¨¨¨¨¸±Ø Üìq„O¸ÑæÉ;_â.¬-O’X\Õ‹z¼2Ëðn8¼Ý7F9¤ò‹ŒD&á@•Ökß'ë'؆§Ï+i�‰'¾Ê²;–m÷2¾XÜÝÓö›'›G6ßFO+ˆ8a� ùÞ5Ì»{ÚÏ̾㞠œ<µŸ”xõ,š�R»9}'(ÐwÙ7P/Y³¬êædõO&òÑå´ö oxàw=p”w,3™ ¯g¬®Ì9ÿâËþ{.sæù+F옢‡” i 92hˆcÊŸìçI9¿1Òh)?ÑžMޝ¯n¦_ylÞ~`ãá´)Ç8@{ìeHë>ÎlCûq=$s÷9-X“q§4P\dEl(%‡>v®hSŒÌQí¨$��>ìzVÎ,롽µx2ÙMqA P ùý8(+Jó™>ßcÌoœ‚lëõë¿¢¢â&«€àoo³Ådê§Aÿpà5$‚¾ 8)W\š¢é4÷yeBƒ]¨�(ô/P7é`,¥r~<…1˜v ¶wø-à €×˜üùà/ظ̤/hòÃÀ/ו¡¢¢¢¢š€«¨¨¨¨¸q˜ œo¶Å ˆaer†H ¤8Í|+ž„ìÂ�Í£Y_¬”±[è!bo°�)†¬e³GVÐî…;¯~^¼’É_ÜÝ‹pßKÕMši‹Õ/©lvišÎ>esj>^VyeŽ=dDME8öò˜¯dâç1@oòçëyö‚›"Ò¢:G¤Aõg�­+BEEEE%€*****n ô8p$¿ÙÊŠ�Œx£ÒàÏ{"©Lþh”ô„Šï“Ûwåœ ¸±Î�·}f}ö>8ÆTNÞä�ßü,ª¨\£Ö^à€ÅàÛ±�‡»¾6ždæžœ› +nM^»þ°¬tw€˜LK5Á,!Ó9 ùÿ®¿­yjûÛo?ÍÝoØGÓ6N ãüœ�Í a/t/h&„º|̶“E4(…fB×%ú>ûÒÄ¡#û8zr?‡Žíåàá%öš°wKÓòšbs­çâÙMÎ<·ÂóO^d>› *�¦'eÒf�ˆ�|€‘@Šù<ä4’öUÄòLé udHñ#ˆh𢰕Y½²ÖüܧÛÉ'fog›ƒÆÙˆÄÖüÍòáùïi.E>ÈânÝ#“<®‹#�Ú¿æ}$êÈä‚™šBÄìPè¢A-�³œZÆ“=€øÆ¬^°¾ k†[Çc¢Ý“?»Aü2ö e­úª¨¨¸‰$Ð[€Z2œ2åð瀗x�±ù ß•€‡³—ÃĪˆócELÆ.Ò. ÷+î›ÚI€úVT,íÊw_¹½µLü|è¹°ü‡þÑ7 #Ä<Ùõ(ðžú½[QQQQ  ŠŠŠŠŠƒCÀ)Љ#{œ�C‘ø)+,4èˆù7o»É;«uuÃWªÞŒœ'€Jf"+0»Ì(ñ<•¥Þÿ�äü¦µ>’Ë»M_b#~LeÿP“_ܸ·yföfTº>•þú^@5�¸Š‘@#ó{Û'çßqßeN[&¥&ð”ÇêúÕ™Y¸A¤ÐÍÓNzžÕ>ý@Yz–˜÷ìä÷] Á·P&„r¼¤ŽžØ�CÓ�Ú× éÆ>—.lrñ¥5Î�žypàµ'‚þd¼xp; R$Tµøó½[”Åòã6 æâ|ž‡¡l¶MJÊ£`Ä�Õ·kc.¾árøð¨)·ùó|ð=îM—�¿|p¹®7ÂߪPEEEÅ–Q½ dyÏü­ŒúʉœtKù l+mzúÍÎ15Pè:¢¹ÿá®ÞKãK¹âîDÑCì”\ÜÛý ó*‰6ÇnD¦nM{u„ó€3í¤ÁTº¡[¿Ê>8&¿pñþö™«ï�OÉPÙ¿©éÀ†ý(”Dn€IZŸ?0ybþ÷_á𑽈ø gÁ:Ù+ñC>Ûw™ê¡ëRNùóYÂy¢ï‡¼~žÈê!è³9¹^P…L Y¼‡œ¦iŽžÚÏÒò”¥å†ÉRËdÚìí´a:y9LL¦BÓ&&“D3Úì&ik³g{³gscÎÖú|'ÜXÛæ¥çW¸zù:"d§GÌÿŽ…­’r(2ä§�Œ,‚|i4·9„v uÀ|ú�U=Ãù I Z~Ñwks+ýöÓ:ùõ•å:wburTA@íQD»þ¨<¹ýîôK¢ášc�æÅ"¬@ˆò%4²©%Ò8"¥Ôùü)ª‡\ýhÄÖ›€Wwë�'Ð N0pæÁi„Ï.Ü'‰Ÿ‰#Ÿö$—9bߨ6TTTÜè;�ïÂ×d›årôû�ç0Ü dÐÀ—o-¨S’#ÕÐRpÞ'¯ÐÏ�F$KpŽ8ßPî�åÇDŽG¹¯Žd{<?/`¸UÈŸ?üqL)å}.]ù³Àsõ鯨¨¨¨PEEEEÅ«‡å$ÂpJŠò‹te‡Û"²K“Gžñ¡æ"®–pCFc¡•Í™%Si�m\úÍG –Ô;ÞPìÓÃ6zc?A±Ôo‚ZïBO÷P¬F°A×÷aóÔµ=“ß¾ðÎtmvïØ…TN^CZ»!¢ŠÆ’¬Íß´ôéù·Ý·ÊÁÃ{lüìs‘Í *Tɤ ]/dß?ô½™‰ëûœ×1”í ëªYMÔc$PÚçú€ªEC×sœŒÔ&ÒœFa‚™S“¤™�1¢fPó˜_ž¦5?)1@�@™ÉõH’ãärš>ˆ}ŽšÆ©Lü>†!°½5“�>;›¾÷ÒýrUîÍù¼ ª�±Ä•ÙÛÓG»‡¹º+Å!,�#Fr  ÖVN`Ø…EJ·þ�,jžx(+=Õ)ˆt¢ |YXDÝÕRÎO˜óÃå…BÑò™3¿KÙekfQ}U&A Ö‰\]¯4D;�u`»þQQQqcI Éw‚~—-¨ˆSÆ\þ ðQ€[‹úoö_¼ØO¬‚@R€áC˜Ž¡®í~Œ¨)©||b§”O»é/UÑ*ð±|¬ÞzÄÏ?n�ï¾Ý^ì²û�óV€ï^¨O}EEEE%€*****^Ê1„(iAéãLú„¿7ʈMðÄ&ãršxÏor.t3Çì”�±1¡ŒõKÆ­!¡¥·ëqDͨ’ç³µyîêýyø‚e+å±9&Sψ€ºq¹v5"Zâ·éeuÖLñÌ[ҹ͇Ei ,Ï4[§]âjwÿò³óo¹ç Ç/!)Å?‘Ý<„‘4™Ì13qÃy€nž2é3�EÚK&�r½œ†|Såk˜�©Œ!ŸÈ¢{VßÀŠa“M´a&ßIФ>ûþ1ÒGš¶G€ÔzÂG �&Ù5gÖ-Q�’hÏdPüüÖsíä·.Ý%«rª“˜X¾0ïOñèö×ËS´RPØiy¯(^‚MccŠj7Ÿg 9‘áe³5ª” bCY éÕ‡^ðE�8¢Øe‚Æ�$¯Ž¢€]›"�ˆBÿÒÂH;¦04Ì€5 «VTTTÜ@è¿Ì>ST�¤¨ "Š*Ðçã? p Aܼ1§õL@Y^W6lc÷þ…ŒÌ Û(û Š $C4 ß–¥/ŸÉÇ‹Öþ-Gþþ† ïP´T�† E{à‚ º’?•ª¨¨¨¨xõp¸ X ÍR+(B ˆ@E›w7��ò}A­,©’@Õ½Áî Y|·—¡y¦]91·n„¦áÜÔH«³` 0×ÕÝÀ?Ž^eú«gïnž\}§tºÊèåÔ2é¬?6ïx$¶»Í ó?tÛ‹ú–Û“Ikõò(¼:!�bPö ¦RŒê� = ]N÷öùèºDNùÓ ½? ä�ÀÎ90‚@rîØ^Ä¢_Ø %9Pc 0??ä2šÉS‰`ª"±ùŠ{ÐDɰôѲ²²Õþ쳇šOoÜ+[rÈóá 6úç\A÷òÒì+øXk¶>”ˆçØ÷X¼ýãŸ#ŒÝ©hû§øü–á•?"âMdZ:ð“ûU‹}§é˜ZÐßSÙš1¦\Äò±lËsíXÁˆPIñ’ ,<Ûï3_SËS啪¨¨¨¨xåX¹t?~C 3�f>€,maÙìNðudª(tfîÚ‰  ŠÅêû7ÜËʧ,RëÓÈN&1/áÏy²iœÅòójeý� Gžå©û,˜i,ïÌ=º'~:}Ú�]>:ùèåwÉfwÊÐiº2¿ÿð曆ŽÉåîn”b>`¸ %‡‚�³ówx¾ûƒwo°wß’û;Œ(‚P質GSåt?B#~r Ò`çÈ!(™e'.2´‹ÄÏFn SîdÅä¸X‚�š—|ÎC9�ï¸ØƒÓ$›%E†ò ˆbË‹†|j>ëäÓçæíÏ¿x[s¾¿ŸNö@>gW°3K8ÑkÝÝ|rö5rfÌŒ`@„€̵%AFœàŒ-N¡…±÷(97d�å• tË3£‘Ç~¬¶fäó6üÞÚD\§s2¿Þ঻¥¾?¹ŸÇ®MþûÆç*1ËÃúéI …0çó”(è:°Yÿܨ¨¨¸1$Ðò¼gÁLª-B   ÏxíL-o–"¥Ž(‰T;ô\™@iä·+P&“v©Z’ Î6ð$ðénb¸ÅÉŸûNàû@ˆ,Ü7‹Ÿ¾x±>Ý•ª¨¨¨¨xeh€“ Çð›ý9Ä›ñ±s%"¨ì£€’O è\h1 uÉñ�=Ëõ>/"9j €Øñ�'y,Ä©~¬�<÷®�’ÿkË™»³V­ -_Œé!<d} �N¯/OýìÛÓÊöƒP†&¶ú»ö}|ëîx’‰(Š6Ouû&š¿YVú;m³Øä'˜à@�Î�°ÚÝ>=Ó}Õ‰‹ýÛOu´“ œ~xÓpª�‰0"Ç!XT !‚vÖzßY;ª‹ÑÓ�ãÙ\cŸ!ó!d„�©o@Òâs5fͱù¿ ׿“_£Î\èhO,a<_Hêxÿb>,a÷ßK¨`}ùœ¶óã&CµŸ#i˜Õ??***^}hé›�?²LU�¡ÏDÁßÞ‡áu@ý× ¸ 3w4ÐÛÆÎ+);z+«r>{ }pM�I$C0†à3™ôyÞÈ¬× ñ³øùzT{ ÷ñ$O?œ©OuEEEE%€*****^Ž"r ¥ 7@Ý ÙùPPíDç\žä²£ç9¨m|¸;9£o¿cYÚ{ßüÁʼÙ,Ö¨ßÈ�ç+R$YÑXÄÒcÒ*·A>Êé…$•úÞÅÅ�Í.-ýÂé7¦3_,Ê„T�-=¾õµ·}RO,m�øbÒæÑùÁÉïto‘U½ò 7¬Ÿ‚¸1LõjwçòKó¯:y±ëñŽÉ¤ G¢j£ì;,Ÿ|t@Vdž!§#†L¤jÏÕЮ€¸{¬þDZ‚šJÇB0åO.ž}‘Ñ4ùŠ95??¹¼ÿŒz«`ˆxdüs|ùÚ|òËg¥O¬žJkzJ¼y‹kÜ>_‰�þvÝúýú4Kh¼Ïû݉×/xñüǨ‰/ñ„n�¬~±ê%&ŒŸ@òG£me´Ï ¹ñD—™}3,(�Ôú«mlædwª ‚YÀ\ |ÁÙçûŽï·ät¯Hš¡ºôõO‘ŠŠŠW{~rÏÃ(8…�EQKk�Èo¢üà†×!ôÇ�§€ÀÉwæÒŠ0õNøwIúHéãòÔ•/" ¤¸œÏÇEàp™×Œüùñ¯BøATO€ô iÕÎý‘ò>�¿^³·„¿ýSu****^ŸØ‡r;° êˆ lS+ÃAño¤x“-JÇ›±bçÁ¿á˜JñO¤X¾˜Œ^‚‘%`ðÊgFn—“û®ppª›¥ü<ø“Já&µø†ñ}D¬¾Ÿ–^™üæ¹7´Ÿ¾ú¥2ÓPF¿¯=3ûòcéÞzø”7qÛ�uGÚß�½YÖåvâÏ—"’ÂÏæ²¬t÷,¿4ÿŠãWú/>>g2IÎO´w/ô�Ÿ¡r=€#‡K`J"ðK@*¤&ç$rZûܤ¤h&vD%%·Ÿ=bºMÄ«ìÙ$C,Ò¦ª�i¿h®ýùp ݽ©IulhŽ8öÄdì8Ì›„S_Ä›-/HÞæÿÏÞ™ÅXvUgø[ûU]SWW¹]e7�'&ËB&�‰Iä PS”AJE(„’<𔞂ò‚ Q"òÈ(B‚HyH�˜)‹0:`cbh<¥ÛCÕ]Ý5Ý{Ï^QÒGZºKgiWYMÀîýI¥ºçœ}öÝÓÝ·jýg­åñu…!Ëy<îûÄ…�óuÚ!ðœkÛ’vQÝ©ù�*•ÊU�V€ƒÜ¨ê ´.þP^àìüË{zÀ &]ßþ¬–¼‚‚q2üµ¸¬D×¢ó­Ès|Î /ýÆÇ¯ýs�·X2Õœ!i@.¡²‡ Àߟ¬ŸàJ¥Rù…€>UG¡R©T^X �uÐ%T\žƒ �¿âÄ ÕØ8Wöú ²‘nÑU€Ë)”„ذ§`¿,¯Úeà5�÷ZÜ?;�Q øëŸï{!çO@+ ù{Åiv n¹à=€.ï6½oŸ™ë=¼¹’žÚ^•«(mS ÊÆ4" 9׬srt�>É<�æOä ¢�{èÇ®‰N év+,F³þ‹®+!&:·ë?g%%8°d(6¯NØuNA�[ ¸u"˜ (V3qèKË/4%<©âÄï‚gS¼^Š’_@5þÞ t[|X¸ØöêŸ)•Jåê‰@ó½6ŒÖ»‚PcÙÄ ¾|0Ê ô†Þݮá`¦ãgÈ4ñPåã1°ì¶?£öxÃyöŒy1aÂ�¿ ¼8<í•ç@ç혳 ü[ýäV*•J€*•J¥òüH¨E¸EœqÞû½Ñ L 1ÙÝ[~øÍŒiö»DÙK†Â“|A2o³å::s79Âøƒ.ïœ(„SÊÉ×åï‹,xœñÓ�ž‹hA¿íEç ¤g¶‡Ã/?ój9·÷J¡€ ã|l·;ÉLjØ/ªÚ•›JÎæáðß››Ò3zcYDr'Ütt5p¿°Ù¬Ïœin_º�ï<²¥7.*"R4 „äF€@T —×Ô¡5Ulz ð“=ƒ¶û¥D{°µ—Ó7fún–Ç·VÓ–%Ë h°{¼£�už'›[99¾›s¨*¨3ÎÛçú ž‡��“ä�ü®‰Ñ褣MjB�Ã�U‹²d¿ ëWI0é¨×O—×À$ÙÞ„ áæ=*tˆZ‚ì-Áp“ãû~õD /ÆKxŠ8ï�¿ÏÖ^Œ”t ˜Ô?[*•ÊU‚Þ|ä¨ Òm¦÷V™ý0æZ„"f ?C'îìuüŒ€Ìµ†‰?7¼–é'ê²@^5Oáɳ¤ ÷‰LÎ_¾4õ“[©T*UªT*•Êþ9‚êBßò¼’‰‹ÛyQ6tmæbsËüf¾ãð–®ÏeúÃ>IäÀ"'eb¥Â#±F"íYµNޱ“IÃÖ^“¹8Û;yi)�Ú]’s£es•ñ"Iø6v)£‰�¼ÂOÆ'òÉ|{¨ªVÈÝ\Ÿ[º�sGýâ ðŸwëƒo‹G½@�i÷u^..ä¤ ¡ßcãÆ¨aõø]Ò‹é7\N�òKGi:.BM lÙ{ÿùñ+¯ƒý‰ßŠúëSûŽ*$4x ðÛJ+¦�P¶k~ J¥rõD ¹W@úð Ф(hÍ = ý�ù;�ÏÕ𔕃¡+Àû€wCÌãÌþ&¤YfA3²÷0ráë"Ú`œîNÖñ¬T*•š¨R©T*ÇpÈœ¼¢t.J,ˆ‰*8�¨Ã¦÷|Ÿ¶ŽÄ$o/.{Ôd ÂsO«6ê¬Yÿ�úáúéõÕ}çƒ{ìX1¤P·5h_O»;¯µ±¶VFQ˜º®Ù(XQëßàþg×ú?¼p—Œò2”ÑC½çƯ]ýîä5GÎh] â�УõÖûižë?¤ÇÓÙ|œ=VUЭÕ8¹b/ûº¥³œÏ˃-]›ÙÉÇíä[öô%ó Ãaχ, = 4u >h��›†‹;š~ri˜žÜ>”No’3ãù´£ËŒu%µ}µú¤}¡´ˆj{N[/m#1Ò}*ߨOŒîæYf4ãCùp[å}$ð:,ìCª6ĹŽÐì¼~£„F›açÊ¡1»ò…D¡"m/Ä÷­KhñýÀoê#Á&ÌV&ü.QTñ¡/}xºx¨â0�%A¨ü¡ržN&<ïï~Uû($  mn �úçL¥R¹:"Ðb¸ô^�C€˜Ð¬˜ƒ< Ò@ºúÈG�­£W)°¼øc`h€ îÉšäeȤͯˆì[ºØ¿Ìêp;¯Ììéb¬Kÿû3ëê`¤+à ³}HIRB íC•œ3š¡ÉY.Œ{œ ÒùñP6Ç¹Ü ¸0¦³£CrqoNvu‘†Y�š J¯�ІI’#�—Sy=?>z½>ͬ6†›/vR (ï7ÞkÄ7Y’ ÙDMßU…H¶ªÄ» ©í‰Á†¹bÑ'“¯C/ ©`"*^4.ä±V×9T»÷ÃÐÏhêÞ)1° ì˜ —‹óC•‰–»«£ä@åCïiW¸B?¹ØFõÏ›J¥r•„ [�¿^dÐ!èhßJ¥‹ c,?Ðß߬£WqÞr/pT 9M`téÌYPF�ï_­DT*•J€*•J¥m’3Ú;ƒ£3²¡�ÊOÖGe®º..ª¸¨^Þ4íï“îdèªÎ8Ù"ÞN®�ѼõÉJ­OV&ð(rsP°›×O!¥EÑÆoÖ^¹0 ?êŽôÜîí‰*4yýÐã·Þøˆ.ô'%o/^ú—CÀ)@A«PzçÅþ#Ü”.pŒ=–�èôD•ǸSá+bïAbDO÷H2"é$'É ’ÒO™þÿ½Î {ª}iÈ*2ÖĸIŒsbÒcz2iD²ôQz4:C–YT%Tãv–ûâÏûÏAÒ=�“gòZ~||w>¥ d¼àã=)0‚pp-²¯ÜcaÞŸøóÓ±çùEãï D#)SÎûcßBP\§ó”)ŠH‘8A³‰ÞV‡}­¨}üîØ…¾@cRU£=1Àß/%\? /ØD Yíº„Xœ[5/B¥R¹Ì}ò°(“÷‚|ô°€(¨€(2†´)�Ô¼8¾üðPÁkžð‚ü©¢«¸o5�D‹BU���Jï©9àMÀk¡ÌNë‰ö@ �Z©T*UªT*•k•ÃÀ:0Ü·‚¢„¬ÈÎëò©Øk%&ÂsŽ’­Ý[ñ�1ÓÙ­Á\�©PX>tœó~�©b¨%B!|S¤ø0N„B�j`¼´ Ëó¢ ^X±.¹ÆaEh†÷�¾¥÷Øå×H£‡ L^<6zÃÚ÷òÍóÛ��X¢^P�òºµuÑeËOOçáàaYOϱ.—Y׉ÎÙb2IŠæØ²Þ.2Ó»WÔš¨€\9—3 mý(xiÁêöj#^°šZ( n1ùã®úì}â|?¢"¨è„9£Kúôäx>=9¡ˆ‰( þVûíçÍSöP ¯‡^‡~¸l”}[\ßpË©…8¨S|‰ëÐXoŒÅð'†Y?»´—îåž,¯¸1½oø¹G¦>«V܉ÌÝó«Áþ®�Òz(ïEÚ�#ʺ*þ¸�çnO ?¶ªáSn=ìÛ5/G¥Ry¾Ì}êâ¸øt°L>ò&èß Ém¤i �ÓÜ|øjÝ‹®9ŽïýC�ãŠNé�hlƒü5ð÷xñ¦÷äð6àföÇsÀç�ÇêTT*•J€*•JåZa¸XðF3py#RêHt]ðš2Œ‰€ŠõûÏä�v¡]Û[Ñ|6s°û\� _�;×-�Z¡(VœÕÙ!Pá�ì¾û´${mÇwÅÓÿÖs«ƒ7î’ÝfÊèL:7¾s廓»¯;û|ŸÈ·5hלÀã½H\7îØ4Źr®îÿˆÅÞ£º–γ.Û¬‘™±‚ª‚˜ê‡"�cn]Ø- …U¦àûІAÙì¨=góìÇWdZó´q&üˆÛØ'”>ºÀÓÍZ>=>‘ŸÓErÛ>ÿ1èöüAñù~ü±C¹ßÜcþu"ÒN9±Ø­‰ƒåÿ±:½ø‹ie×ê*í¥�`…¬ôÊNàéÅÛS]°�%ï¯{Æ;sD¡õ‚pNÞ¾[2Ìú~ùA ·&¢ëJ€½—\õ†Ÿ=õªôÌ΢ô) �óõ³�ŒÞz쇺<C!¡;±XË7¡q6švóñÆþàýMUìý˜…þ¬Ê†¬È.K²ÇPíùÏX—* B'V&»yoY.{á ‘8åU5z²Í€MrYçõ|>ªçÆ·7çu™ xTã•뗠͉‰pŠ3†;o7gø×å|cå0_ t9UÀåšj\´\íƒxy¸7v×4k°‡x1ÛŽ�Ès0/ êÇÒ‰„î [’Þ›(š'Ûoü)÷P�ó–l3îÂ…Üu±·¡¿§($¡n߉<†[m4Oµkj�ñ\Ùï1ª[5/B¥RñÌ}zóh+ü¼Œ2àëèÒwЕßÞ\o>´—L'†ã›À'@¾ìÕxAòÐßy°š12 €t$5M _ùð Ï—ôø"ðëÀ�ì�ËÀ—€‡jHÂJ¥R©P¥R©¼ÐYn‚”­CÝÏO{!ÈÝb‚ì(>»?ŸsC{ù×vŽð¼1ehŒpÇø§ù}0­ ›¤ípÂBä¢PHý&_÷y�T‹aß"¯°.Û¬µ‡i²2üòéã½G7OÈDç¡L^è?5þÕ£ÿѼòðå’wDiÎü`åͻ߻ÖáM'c7O¢@4Ѧ,¶˜Á·÷s½Ó²(²$Û²(»º(#ÈÌÐÈ!TûX¥ %C¼–DíлÜb²õ(ˆX…ª$Ñc—žnëP.élÞÔ%ÝÌ«zirkÞÔÃ’Ës£A¸C¼¶Ì‘H$àtî5xñ-&l{Ù;#ªË ÊNÈ3\}^òˆ`݉Dã°MNÜ ÷™ 8�fg;-«/·óèß®°…¾/ñædeQ«$fI$FáóbÑJ¡'cñóþQ ´"ב6{ÀN5€U*•¹O]œÞx€$û_.AK¾yx/ðgÀ2H�p…Þ•×’0A  h€-à‹­gÐW«§â/üw�ÎJ¥R©!à*•Jå…Æ ª7‹�A/@§óo´7u¥ñ¶5üSÉÞ‹>>DS�¢o™8LÁÓ#¾(ÐÑ_Ÿ?ÉnñžHxÑÇeãzü˜ŽEaÈ{IX?­KýïŸ[|çì]²Ó\et˜.LîX~`|ÏõϸõQÌéq€$ìݯ•©°Leï·@»ñ9_ÀMæ´@Xô–“(·‡\¤Ÿž•Ù´!3²Å¬ì0+{2KÃ@2‰L¥G¦G&¡ôPM¢ÒÍ*’íï+¯UôÊë»:ËžÎën^È;y•ݼ®#úšÁÛ·�Ç Ö]o ö‚²›·o8‘ ˜+ -Ïßþ¼>bÚ‡„Ô{äMµC"Õ¨Ük”oƒ *æéã×H px/–xpT1"§£¹`j\ äÄq’×·ñ"UQ5Œø ?\Ùèà"4t¨z�xO‡]:XX@·"ÁS��úä}¥rÍzüô�»�_f(ópð4ùæEà^à�€£˜+hP@§Ãhc叨æÿä~`Rgê‚ë€ß~ôu€´s–±× Ûæµ‡Í÷·��_âgAzL€WoÙ?¾TóRU*•J€*•Jå…@Bu ‘UT‘r¸/óîˆíÕV x˜^qø<þüþw—�þæAÒ‘ë"xúÝ…?rOÂÇOŠ ûØiC»ŒøÄÖP»̇•‰î!2®ãê* ZöœH§¶g‡_9ýj9?z¹PF“Œòñ¹÷Þvì'ÌôÌÙ™W>—C1•)koq�øØ·Éç�ñå§NBºUQôÚ³…Š·–Ûú0]&ÜtÛŽ�l‚„" ¦ QËt=mµö¹Û½Áß'Ó�õH ¹¼*šãÜ;®“>÷K”j*ðÄç êD½øSVñ ÆþÈsG¡L[Öß XgüÚêüã÷´Hé!ðâ2¡ÖíÚí±õéª? ’\9Wë6ʆª´°7;\'CQÐh€íjh­T®)ñçŽÖP¾L™óÀ”³'ß2h=DÞœ0ï� #·ÇŠ•Éíù Àg@>Ûz‹ìÖ™ûåFþ‡½óú¹ì¸²ûoŸ/u Ùd³»Ùì¦è‘HER#�F4rD‰šñ‹aØ/óbÀö›ý ü8>p€ý03²_<€HE’£8bG”ÅÔÌ9tøÂÙØ8 µU÷2vØ hÞëVÕ©[çã^µö¿6©}¾¬9]#½xC}Ÿ¶ üàÏ�á±õ©¾_Vèc øð“z …B@…B¡pºb?p÷•Yì'!º>*¸§©àȃ©óó ž˯ÆÏ�·5eQO-I2ߘ@âû"«àÃ$>új: â$°�AŽòE¹ï†¦·k5 K”Dc2ÈÛz†“;ÃÆ-O|xúíß·‘5:pp?°ñÐæM—þr<¸{<ôTDÈó椙�jÔ�ŒÍ¡˜“I†1ºG–Ù«OÇ\eA�8-…X2"õ¼Ö[ ݉1‡Þ'åûó”cy2ÂP%áQŸ¾ ÍtðjÚ½ø–hžÌÍ` *ñeÈæ\m¨¤�ɽžN‹¡Nš7PnJ`ÝœlÑ3/8Ú¤E,ãÓcUµ=òè”Øˆre'îpëŒõ¤> ñ# #úcbYµaJô`Ì? ÒKDUMbpyD¹ÚÖxΛÀñò*Îjâç2àfà2ú8 ÜÜ ìðN1~ìÚ‰ú'Àz@Éâ¥Ø#…'À:©‚~Ü_sÕ{Žó'âä†éßÇæ*-ŒPöxüÏÎLÅØÓÀÿÿßÀ«|~{!ðuà3,†×'¢ó� …B¡PP¡P(œ.Ø Á}—ëº}ãj½1ˆ�¦¡¾¦°™ŽÉ§zt¨P”Û5äî"Uÿä@Êò¨ÿ}ðˆNnxUA•�QzLý{r¢+{¦.é�ô^ë’AÞWجÝþÜ‘Õ^»Î¶Æ  �qïê³Û_8p÷ög/z-±�é }%˜ÖUŸ©ø“qÜÌÆwG•Åà?KyQ.ÄõòÐs~%ÊŒŽUrQˆƒ.'uJÇ‹|½öy¾¨!VªŒˆ[#°ýß‘â(ôx>ϨÊcôŒ�’z7åŽ1ÎtÈh_kñîä �~WCO=—?¢€¦~Ó�ié\ª)Š.ïLüƒZîkÉøµ‘"WÿôñnÞ?êõ£@“Ò.yóÖ`³y�3è«€@IOUfÎ8žÄìdù gñ³oRü\MãäÓrp‚÷ ãÀÿð/�Ã1y± é °XIáðð·`·O„Ðõ”—…¯Ÿn»ü:`˜žBî¬Lû+Ä9÷¸û[ðÿvËiCÐ �þðMàÃÀ-Às5F …B¡ B¡Pø°°\ \8‹ª)g“+\z¤Ìü%|mxsû“ûîÞºá’c ¦TIÔ�èÕ”Ô´]8‰úG�J2(y©�7Ò¦æQF´OhZµ|œ'A^õJi4S Îaª_öSt'Hëɤïó1nŽ@Ÿ�Œ QvJÚi ¾V/?רÿ“Éü çA:.ú¶@Ö©S’£²7/&¸ï�I¹23:&Hd!²é§ÍSZ"Š ¦`¨u@Ú¢ck¡îÔ{rå¨(ki#ÓùˉëÖé\¦DÜBR%MŸý?AÇ�Íú³«P8s±ç/ßܘT_Vèã7“'Ê˼_¯Xû:ø?þ1°—˜ü!Ä''®3à)°ûÀï»üàÕ0Á€+�k€k‰{ˆþšïßðn2yÏN„�?8¥yûð0§#†G ¸ø`‹á.àÀñ>…B¡PP¡P(|P€ƒÓ¿aTåÈ´­Ñ¼ü“ jÖ®�$[�´Á!'¡Àd¥ö’FÿZnž)I‚öÒ�,–g^ÌR|‰¡Í\ †N £ÌÈ]a†øiûè“K�4õ`/�XÛ¸õ™«ì¥“Ÿ20:pck<º÷ïO}óÈoس:BÊ…L©\6»õ«CŒ{|ªÇ`Æ8}º{Ǿ‘RK‰B!ÞbìNã-O—±’¹(o(˜ÉvNdC¢ð�ôjf¢2ŒsR±%ÒNö½¡bŽŒî”:fÚš¿;×Ô„ý EòÈt,(’¾×c:òT $‹µU „'ªôˇ h9=‚UUæ*¨\í£ï¤}BQ•°Ñn%„<Ž'6oJðv&õ‡»¨?Ôîo;õgX¡pF?píïç€[�Çù 1^¹ ¸ÙàŸ9|Ã`¯ƒö L¿ £MŸànØààÄþSŽßiØ}wܼÎY>jp�Ñs�ÁŽï¶:}€ù¤Þ1l%úlêOˆsfÀãàß2ìÿ÷s†À‡Gv |èãp;ðwõ, …"€ …BáýÆ…˜]ŠûZdî\÷ê IÁ£D�¦bJ•F‡¼Â'�–Ñ,o³å‚˜¹y‡Q(éÒÓöhúž4ÝQ\£+Ö3B/O#§ �ö}W¶µÃú·Ÿ¾b剷?g£o@ãEë�nÞpø¾ñ#ç�œ·g~)>W{ÊhðõÝ¥dòù˜$_•X˜/ì“XGÜ�¬ê—¾U–(ÒZqo% ¬™æpNÅõŒñ}�n®é!ûäO¨Dd<$éíȳÅé8ˆ›Ó1ß÷‡ŠÏ¾’ÌdÅs�Œà‹>ÃH×iÀáTpzLÓLƒ¦ãtrï19ž›¥E·hÚß))>û¡F ’¯�0y7¦i2 %Éû~@}6W•±9™ãA€+oJŠ™Œ1>²qÑñÍó´¿2OºMÜ�WZ¸Bጠ®nÒÇ›À÷�_·ó�ïÅýÏ0ûçîþ'»°)ýàÎŽ�…Z‘ÌÜ}Û`˜§Þ´÷‘ ä_Åx gÚ¶GÏ,rÈà2œ�WÀôi\‰s9°³Üw0œcÀÑ•øD¨a6L}i€a6Ýã;˜=þ-œ¿îâÌ‚A¦ßÈ•,†—'‚ôáša …B¡ B¡Px¯±{òùÙƒ™ Ñ6´6£ ÷þR`w‚j¥‘1Rï õúQ˜Å¹ÌË=_ô³ÚE`KÒ©_K#º«‚Kp^‚éñ×iì›”80 çé‘sMê¯ý&Uêaí'ÏZ½ï•ëls¼úðÝ+/n}þÀ]Û×^ü xC#©•ðBÇ¿[%–¢¯îÈÒÁõÆW\+ý)Ôxjäˆ{šn0i¯ ±aÚ‡è*Y!ÄR®QÑqª„žÜߪ$Qfb\{¢fÌE/ª’rpÞ³Tpyf-ñ¤ö¾¨’¤£9¦õ‘Îè‘>-RËz©ßÒ÷J”“æÎŒúf„iÛyPr$á"“²fmI|€z zžc¢J¹§œlöd5Ó&¾\:&rÑoÞ.UIÍ™(O'�“õçY¡pZúü¾±`P{ ø1ð“iûÆ’Aû¦ýM“Šé(›ˆ ›õ¨°¯?Þ#Ïúê(úв8lÕŸk…Âi¡øÙ Ü\}Ü;y›¼ÉóO|øÚD}¸ rŒN !lß‚ ÄuÓ§ø Éùdâ´q"‡^ÛN�ŸÛ?œÛœŽŸV€ °]àëÓöFl³ì;\ uX|"fVä…ìÑVŒ¸Æâ~߬1™Om†ÈÛÊCáó=ðÛω”yöð ðÓohƒ>Æ)%Üíµ ¢P(Š* …wÃì p÷� šŠÌ½“þ̺Áô<±Y|UÜí¤VŠ D%Ô¼þ]?ù½–Üà@æç/DФ�EÅ’Xið6�vk'æ�ØY[ÌZûMÿ‹^Z<{}suý–§?=옓9³TgCÌU¶ >YbÄý+€Ï ‰cd@ãåe®J}†éÜ6Ø qÜç×°õшû¢^AþÌê:È=ÏwL„à÷€'9GáöÐ^àFàzÃñ©ßî®ô¨…B¡ÆúËê…B¡Pö—â¾I[–±.õä.ž(Ôtg0CÄ+ùªyC�°g×÷ ¤þJl `öW¿{gÙ}œŠ.òYâNõôHãÀhOÒö4:„Åýßó`g;�<:ëß9ö{+�¼q�íønèc¼`íñ­¯¾wçcç§o¹áÑ7Ñ;©ÇHj±”?ÿl¿ãé#�¤ˆ‹çì3"Px©(¹çŽŽ%Ž`æ÷2º3˜á‰JÏò@ %ƨ�äc›�ñ¾«™/Qƒ@î¦^Wxâe´`l[~Ÿˆ2%“ù+úDˆ%T`2à¢>B:šÖËr•R”ØKQ—¨¼òÀÆ÷õRk¶UšªšÎGÓï¡ÿ¯¥BQx{Ö#íè®X�²ò¬Q«¿xqÿÚÝ/_o'w@¾1¼²}Íþ»¶þðЋ DXàÔˆatäÏXÊì{´ä¶"ô°z½–g£’¨êFÇVÆI—iª7³V€WUyj¶¯â‡lÀ„¿’»�K™låžDÒ—qLJ@jòoÚ^Ò¹ÏÒDçŸv9�ö]Ÿc_´#e;!«$ZÒøt¾XšHÏßO2æóüŸ1Ï( 9?$ß“ùK…ïòYÊ,+Ÿ+÷À©ú³®Pxÿ°ç¯Þº ¸¸Œ>N·wžkJ=óO®WMê ë�ë€Oröcž˜žý]Óç±ú-E}øF�¬]üz"Z_«Þ+ •®P( LXÁì0p1¿R%O®þÈ}:�­žiNž.à‹yø(„*ƒ|yÕ�Â]URºßuƒ×c¢hû%¬**’*hy-­•¶1%øÈY‹l, O¾µ{ý¶g?7¼ºùQèÃWìäÎGÏ¿oóæ#�±:DË-ÔciŠ5ƒÙíÕþA`…'Žª5|…YBž(�—Fêee$Ï#ž³?mi“pA}¡Œ“"ÅZØèYýóÌhÇ!>@ÞåêÒFê³Ô:¦*ÇAˆ�\¾˜Tj¹´“Ímâ3 ¨GÝ C½¦”ø‰T_Úï˜Å6}ä~a¨o•¤Mç�|~/ú£¨â-Ú£Væ š„¡nÏ{Äý¢x7äÏò÷¦ÊÃ*LE?ó:-Ÿ.5UwWñ ’†tÜ;lןy…Â{ªø¹pRü\µ„GÉÀ‰ê½1t1peòïgv€'€‡�GäßcÀf=í÷„Z¾ |X[ð¹üøQ=ƒB¡P  B¡P(.A¼Vò [?Ü1»ÖòúO<a4Óeéêæ|Å6Š~½š†GÒ%dX3àoÐ>Çe� ]s[fÞ _ô$X&'fõÏÛÔ¾8n‘Joo­l|ûéOÇ޾ʜU:pÇC»~³ùõ£¿ò‹7¶’À¿ÈQb[Ω/RCefÑ÷âÈWãËxEŽaš.MŸB a$e,,öV°M¡Çl;f{–Ý0ç(¢Z—–*%!ŒåDýse]nÓ”ÏWÌ•9xW=˜A]‘¦…SBR ùÏÌò1¥“s|D{,1êö•‡dü&ïŸt�Hªæ\䎎%º£Ê×$}š¤u˸|E‡:é½ »$ÐòÌì¼] @¢ÄÑ}©Cǧ+k`ܢʮØ&Ÿ;[V=%ÞŽcýÉW(¼+âgcòøù"°B¿¾ ¼R½·49´øp ppúwhúÔýóß'RçeàEâß �íg€Ç�­zjtÁDÀ~–Åðæä©t¥G- E …¹‡ó�#À�®PN>ÕÐ]½˜í»{´ÉÙ&'ÊòÑ1“KÒžš±k`+ Œå^ŠåAê÷“ª\‘þÒ`8 j ™²$WxäD‚dU¾Þ^u$A9;#ë?|ö²•ß¼v­mûyÐÇxþÚ±­/º{çSûÞÌ*y¡ÙxêªË¬U¶\Ó#û)áô~U“,?VSN0B‹!Ðqž¤~Kƒ»J.NµÙ(Ñcò”oh+T�⎠È(U„ !mèéäZQd%d"ál¦*‘e ü;dcâÛA€«Z0ovBÞÄé¥+9¤jŸ8¦ÐâsyDØtUsP™|‡ÉüOÜãÊc7ß�AXhçNåv½Ñ¸è|HHŸJþäŠ ¤^v&!µär©¼»k±]è¢ üØÉ € K?pp#°‡>žnž¨Þû@È¢u`7° ØèüÛNÑÿ÷v‘æ§=tð§ÀÃ1àÛ•~¯P(T( çÖ�#À@ßç%ÿ$�›5“¯Üe‚Eô)é“CÕ™¿tIÏGï©e4õ‘”#ãÚNMypqºnÔ²u…�Ñ¡½`áÑ}…Xô�¶×�Õ_¾²oíç/^oÇ·/�>|}xcûª‹îÚúêáç4 ®µ$‰çŽ£éc}n �Þ œ’“?™ŠL‚³Y=TùF¹…\Ñ”[P©*¢çû¢b²–šH*ê픂yBBФ„PMšÝ"‹ÍL%r! ²3%”xEç?:óÎ’ª� <¢ì$`ðw!ñôÇ×P%ãBö3E˜¼O”`Ö…=ÒÚ@¡‹¢ á£Ýxéù8Oýí0QìH½¤fmÒ÷F_«c!ÁÒs™‡žûå™N)¹§W'_[ßÛI¼é„ ë|�>O �•§PX˜ü¹rò9XJƒBá´ƒ¿Ü¾]Ü|x³º¯P(T( g°KÀm£ñœÈIpr�ºâÚ|•r\“›Ëà’öhB€UkÃÚi±œeÐYuý’p3Ÿž(K — „öáèš¾)ªø(Ï2…Þ¤l…*µÆÑ‡çOl¬÷ØgíåS7úð�Íñòóî?õ§—=ÌúŠç�þèÍeÌcpÀDÒ£©�rsxUe¤Ú~ðÕÄ£h^‡PQ™1Fÿg)U ÁÜ„ 4ýP¢m=ï�–ï½kPÍG˜×)Æ3&ÄD¢À’ëÚd.„�J⚤ jž”Šz劭…}¤�ñÙðØ`Œ£ÇEã2ï@ªŒ#ówÑùo©t_3¥`Rv&0Ò¹GÙv–Ö™| ââöÑkåšK5–Ãè{É©:–ŽšEï' K Wyåé»rlx1%¿ÉØXz{æ•§&�º$2Zk¼ËØN”?P¡�?ošˆŸ+èc ø1ð“JV(|(XŸÒ3~ XYð7{ð³z …³˜ú«ê…B¡p®a?Æ¥¸¯&ó, eJä(ä\ßÇÁ}A¢ERÀEP>³­CwI'©™z*Ÿ¥ê˜——ùæ$ÆîÒ¶øâ'ÉbÔöCqIUD´Üv£«Ê ÁF]NíØÆ·Ÿºrxò­ÏÚÈ:8¸_¼ñðæMGîïÙLÓ`•ˆs9Z+ùc¬ FŒ‡èõ3ê�™…I %#h(˜Âωù±ð=’qd1N2_5ôP‚Vª*íIRk%¢:!}b.‘‰Ã�!ÊÃÉÍú%Þ±ñÊÕ\¨B$W�ÄWw=ÄRòYÓQâ «}âXgÞ1 Q šŽS�`ò ïDÜe;#-b'#R£}qÌ´ñûu.RÕiG¸¿P7)ÁG�Æq\bé’–rhBwQ}RPï×Ï sD)ØðkϹ,p–òMô‰À\ àKô‰Þ?S•eìkÂ\m��¨TG…LŠŸ½À�Àu€ÑÇ=ÀKMP(œ¸h"n?Åbx øðëêºB¡P  B¡P8s±ì(ø®l ©U$]MŸ¼Ñˆv¨=¦í,ˆÚOÙâyHÓu\@±ïÄ'Ià-ñDÑO PêvìJ½€4ˆ¿èÊèî¦þ-þ&H¦ú�Hža�Ôóµ;ž½tõï_½Î6Ç  �qïêóÛpà®íÏ]üzÞ�0Ü’ªiƒ(!\çÓFç:gO‡[Ê&4�¥*Rûó�¦ |8„"ÿ=ß<_]W(JT( gÖ0Žà~¡EZ¯@€"¨IjĽ=uL”‘/&Vv7SÁ),ûN5c2ˆ¾ñ9äب~|g¾ºY‘ö›À!kÝœøÞXjQOÉ1NqõŠ€elcå7¯�¿öãç¯ÞÜ: }øª½µý© ïÞºñÒc Z 7Žkýu˜#'Ä*yn–®‚ï®Äºþ=ˆ²`qO�¹z'Oõf:ˆºÂ$LÉ.õv‘¯ÑŽS"�qêd¯€Ôc,Ÿ'´njÒ/ʪVÔXÉšu>�:I dq�pÉ<£^3ós]„P#°b|)+2Õ—´Žó’ú†p= M©�DÆ[OxÐÂUåcaŒóQ.˜.B£¤lj”¾g“¾H‘*Ö‚’Í(9¦Ä¬‘ÏC�L‹¹'TÎÚ)Q“,ˆ09Öé·Ä=,›3�ñ6ùU «Â9Hþ\ Üì£�—'ÅÀCÕs…Âi�¸~Rôí¦îš}Ç«û …™ã?T(ÎZ 81.Á1, ø‹³$ê½ ™Aš:)÷zpL‰Ž˜v›ÍÆyõ3vÀ°L½!ûýtoZN.VQ¨ùy桤~=šÊ(ÊÒT^Z?ð™×Ï”ö- #Q&¥AñLÍåöÊ©õõ[Ÿ¾jxþÄ' ŒÜ|g¼àÔã[GÞzšÑÂí1“t ÷å„¥4Tª(Ûã)ãÜc»¯Sô¿Ë=£}åÚè8so(’ñ¶„'I›Eš #q—õÊøL¾/Oéλ‡Ò®N;¹NR•)áµ°'šÆxߦJç>=dý§Â‹ z.ÊÛ»çÔø•/¼D‚wø�1ŸÅu> !˜°¶Qz$99œÍ£Ö"¥b_±|ÊI=¾ âPïë‹«”$VjŠþ»€^®Å„o H9¡b_!§©ê‚í‰Ú©?+ g9ñóàfà(}œn‰…Â…ÝÀ_Œ>NN¿õ_Ôo½P(T( §.Žk !“,G~¾¬:Òôå ¹oPíú´”D��ãºb[Hœ™Ô N/Ÿú(ö“È« Í`£$Q´G#úÚ�8V·þ~Ú"Umï°þí§?ºòÛ7¯±߀>Æícìl=„û©úÕ |}ý™�ýçÿOÞ;Mï±DƒbÈ͸‹_��q0¶…0SQOk? Þ?ÄrlYPƒ–ËS 6³-c”Ôt-6©Dó¶©‚*Î#©³´¤)˜Ž'U¾9�²|J ‡×/´pv?o_8)~®¢�ø9pG¥I,Îhœß+X /·�V× …JW( >vcv|ï||�íÍ_ããëõ«- ]H�IQ&$R3'?•xÌ)o@Q�rR¸~6ÉiOJüôüçº h¨~0Ù:é ;èe Ô6ÒìHí%„òFÄgÊqY« €“@­X(œ ŠŸ�Éãç‹À }üøðJõ^¡pÖà´ŸÅððàåêºB¡P  B¡Pøà± \ ¶œT ãñŸÆy¼èÏ�ªžœO®ïº+14ór I€¯éË�eŠåý€rŸ¤ÌAYÒ€D„†9Û®ß`íØh�C’KJŒã%XªžP+�½±wí¶g?7¼¾y9ôá~’�Íwž­_m¡Pè@3å!xÇHÉ!ô˜ÿ¬¡Ž$%ƒæ tñr,SQT¤íŠ6gPÂ¥¯Dí½»„ꦀ‹m%ÒÜ3P¼ÃM‰ , ©î£uÖû;j°8ܨ¦ªÂfÛÑG#îåT8S?“7{èãàVàÉê½Bá¬Ä ð‡Sj¸õ%”€·×‚ˆB¡p@]½P(ÎdøAà`@É’œJÈ<è¹§h -O»æžøtÔ2š²ÇLö£¾™Ïôè¿Ûû£ã`�Èrß“´MiyúŲÒ9·ApoU׃ó1iPÜ�LGhYŽ(¿´ÎØ›[«ë·<õ©á™ãŸ6g…Ç­G‡�­ß–•B¡PX˜Êæù8—¤ÕœŽÉb‚¸$SëdÒRÇQ¥ĵ©U�¦~bvo¥uFñ£ZÖ#«ïãï#õr\Û¡©Ñ®Íìû¦)ô9BÔMŸo´U)k:@!ƒ2ÉRÔÑû©hÜÞ؉òE(œAªŸ�ßÐÇÀ÷�û+õa¡pN`/ð5àZÃñiޏ§æˆB¡P  B¡PxÿpplÔ$<5¬× —š^Çyn}M]ƒÀg÷H€F �‰$HýÔ,š&5¶“TrKxa8ÓqG”?RíV:¾QåÁ}2(î×2[„žË5�”¤yZZU’‰Ež49<�*Y* Â¢ú9Ü |Œ>¶€?-•[¡pNâRà›Àå,†ç€[€'ªë …B)€ …Bá½Ã.à(øy¨6$ñkN®M—-ëâ×Ô�!ö œ‰ú.m ~ i‹óêõcJþ¸'Þ?ÝtoË*â\7#β~B©Z)Ú)¾Aé>13o+ÂVïziÿÚ/^¸ÎNì€>|cåÕíÏí¿{ëË—¼8üàöK†ŸýâÆúù …E  ¦§Kßè?nˆeIzLQ· *Ò(sF”Ä1)+ÈMb¢“59FBÖ˧vM H%}~§WÞd†1Žã´3륤ÞÑØìyÂ¢ÏØßÉ}9¨eB¨�ãjA–çuÄ9 lÖ/¸pº`Ï_¿}p#p-`ôqðà­ê½BáœÇU“bðï€ïeðZ(Š* …w�à0ø�ß%š;'Á(I‘+‘-'n¦kb r@�Y'×,KŦ T¢ÑbØ-uÔ7¹éCWÔ!‚2SjM§R¤>r“K4ŽTÕEbz.J®áØñÝëß?öÙá•Sƒ>|ÅNí|ôü_nÞ|Ùc¬ øðƒÛT(– €þf®ØÔ7­�H³d¸¨S¡©ö™A´I¼£Di¾x2ÿŸEß§½wÑì¸?z½E[ƒì1ÃÚºU=€Üå<€·L™iSFÀâ|’ÝeLŒ�¥j­´9qRö%@4d¢`å}§¶ÓôŠ”p)Ñ3}_æãÓ‡?jrÍôyyínžeAüLý5#Œ´‹҇Ƿ‡�o?õ‰á©·®2g•|<´ëÁÍo\ö+?°k‹ E …å µc;ÿêÏÿFÞIÞägÌZÄHþ" Ò¥éê•õLï ,ê“0é�WiªâAZˆÐB¼J¦üQ4U?0?æÒ9±�P[B2¡}ž›ÐI '�–¾oÝúnUµ¬òhüÍd mRÒ,ëöm ü� tª7®nZpÕþËÀw€‡ª÷ …9öMóÊÕ(r±ï÷W× …R …Bça\†³kGi:ШäI.yQÏ…ä+ú©ÑÄä:Î-¥Ò`Y¨œ2#¾#œy¸}Ï ¯øé›]·}w2 ’·ÛiXö$ã1ðžÙ9Ø>Æ�nk·=sdõ�×®µ­ñ<èc<í™­/ºgçÓ½Ù ß¿í’áçwT(–ðjx¸(úÔ¶§ž1èšÇÌp—ûeñ€¼Søì¾Äor'õ Ò÷”Þ«ïõÈ ÄâmJj$¤ âºm”wdÜžÿ�ÒéÇ(K^Òžû-á4C<‡©xßN•?PáýWýÿp3p”>N·wIY(–Àå“?Ð¥,†§€[€gªë …‡¬*¨P(œ–XÇ9 ìYU›ÉKRé�B ámÿŸ¾Q³Bƒþúݞݯ_ Û¹÷Áè`YŒ/I'~9(|y  ˆk´SÛ¯e ’®¨CøY€¶Gš�“?ÓŽ’Añ±ò«Wö­ýä¹k†·¶C¾6¼±}õE÷lÝpäY % ˨P(,›n©T_fH�_®ÁQ²8``³¬¦Q`òfCŽGYMÃ:—tt RËÔ“&]X‘{é6h…ƒôÑ÷£#÷k#ã\kqDê3¨eæ¤OÜš‘oª"*§eÉõ†4HvõpÀ¢l½ б›ÌEdŽ{ùÞ/âç"à&à3ô1?îNVï –‡×_ö²î¾_þb…B¡RÀ … Àaà ¸5} Ìä¸0 ²�xPç¡,½?ŠÑ@“®lÖmõ70À¥Š=ÉLîí 5P˜tˆ€×<ÅMzç+°=ñ)ê,VO øe)|ÚA-Ãp!0‹r[+¶1{þäúÆwŸºÚ^žvj¶+¼[ìùÖ‰]À¬ÐÇÀ÷€W«÷ …Â{€ à«À��>6'òùgõ, E …sûÁ�à¬&Aˆnô+Ĉ¦¸‘�ì$ HøA¾Z×ˉŒ~º›¸§ãà€%ä–OÞ 32Hšå¸ï '¹:)}\™áukU²V¿ÿÿ•{ï{òœ"€ZÞr =—³z‘�;¨hQwÆ)™“ã¾TáéÎû’è’?ñ�É @Ëè“4ê%.„O§1¹×�edOç…�Ž�\©#žP: \ˆ¬\~¦Ûê�¤cÔÁ¶ÁOTZ¸Â;Tü ÀõÀ�Ànúx¸x²z¯P(¼?1 ¾|’Åðê4'=X]W(Š* çö‚öHü!û݈G¤úr�ÀÅ\í4ÒÀu°”ŠEW\çäOìë—HHCyQ^û¸ÿöÎç%ª(Šãßóš±a,5ÊÆÔB(éHAE­j•DЪ6ý-ÛÔ¦EÔ²þ€\ÙÂU› ’~¬ú¡-ŠÒÀŒÁl°Z‘9ã8§Íƒë;ÜÓõjêùl”áÝy÷œ¹¼3œïœs|C®Y™½ã~Í©g‰÷ÖÖkÉÉ„'/gÃwFœòd8�oâ…œ}Rjɼúz�ʵF ç3³‡›«û7O)“¶¹×9êÔ²Z+€~~@.—bŽ?ƒgÏG°ŒŽÜG{{+säèi ŽÚSö?"ŸÏàúµ‹8wþ,°P¦§£§§—¯ÜÄ·É™µ)é±H¯jeÖ& Ý�E…Ž7 S¢²ÔõˆªRµò'X=ªÅ�Ts€¼°§-*)­ä\… ôJ%9H½›­ó¯RMª"n‘‘ÜNüz ƒb—xsþÕ•Ié­µÜ €²=�âOgœhÝ’bûk ÃXvÆsÈš±0ÞÇBЄ¹Î0ŒÅ†p£Ï¼`Ær‘×ZlRg 0¼ÂˆökÖ`y ³Ò—ēһ¯É!Û�d\ÚD—n§Ö°ÎÓò-ÑêÍ7ÌZ ©L¡[Ø&gB8¹§Âv$|#OÛ·ëÞMmÈ>.ˆ~TÚ€0œ¡_s{š^VN¶}DD,Ž£~<=xXˆž¾8a� @k™Î][q§÷ººöá_Gw÷¼.­vèn@Hw$EsBq »ç¶hÏ%cƒ{Hˆ®:HÕ�Üþ¥MzE“ºN¯H•1Åm:+å< Ä:á!’8„ÙjPÐE w“ØõÞV²�¯FÞó ×%NŠZpìl‘vésIîÀ‰iQ<œjÀ¬=!W6™Û}—¢­å „uy„aæÊ <  fŸŒaKuMDuÍE@Æì¸üà9ü�«Ìņa˜dÆJ�À\QÌ‘p¤!’(Šª ÿg)LˆKõ>p2I¢ßÖýMÕ:-å·?vv¨9:gS¢Í["¹%L”x²=úCHM"[Þ¸_XÃÁÊþHCr>X Y4YÉÖÝ+î�>Mï& B&Tkíõoʧ¶£>;‡ÌówVd�!ØV؈¡¡~äóy̧Z­b|¼„bq £ŠˆˆÐѱØ;¿«ª(Ž×¹×;Ódj¦¥N?ü�E/FY=™”YQ>ˆO•þ Ñj$Ê—êI(‘KÌIz(êA¨� ìÅõ!¤ß�ÎÜ™{V Ús¾¬5{î�13­ÏÃÜ{÷œ}~ìs¹û°¾{­ïÚµ«±råu`ŽûlÚ‰ñŽÎ_è™íGœù‡³K͈¾=—°€P"õ¡ß/UEQÔò”ËxåAx´–wÌh^äϵWšKÈ+�„ Êhrª¨QÉUÿØ5ÿ$)hb Œ š?RV“ó²´xÞÊ [þb~^ð=³^:FÂa. @ x8F"‚à²ð€Á† ¢\s�%€®¤‡ë�xåß\ÑÇ/™æ—»Q%ÕÄø'­´Í’ükLñC cg äQ'¼]6dxY«›i57Çç|ü²pþí¢m§.ÿ¦°=äýCW�HcVª´>=»ºqê· ÒÑ^ Oyuëtûþþï˯ºTçÊ+£Ù`�I�Ô (2€B úp¶lyœà—!µDƒ,/9¡Òf .“šúBh…òöê©/nù6WÈI‡q… î!e!K àW#ƒVÕôü‘BH ±„¯ÜcŒuÁÙ^9áÇÏ¢b<·QÂ�Ô2g5óìEí®¿‘ˆÐ#—ÊEõ¹ ‘‘(ÙPAP‘ÁÜâ ¨öXÀ1fQ$_cŸ^SЂQKAx«’i#+HA+¤�ò+t-/ jKb¸¸ô›�gNM-jKû¢óέ¾æöLÈË‚Z¦¨o:UÇ+ªnÔúqÙ‚o/Ü.#�¥@ímü4vçòïÆïºög¿Öž�õ¾KQî¿+1Öl©¸öé �峉'¿ûö½…½{÷ã…—ÞÆÅ‹ãÈñØÖ»qàÀ^EQóZ³öÞy餭ç;;w "Á ܹ„2ayQÊ*ó' @J ï¼&ŒÔ1“9òæ}$#Ú˜‚·M«D)ÏY\ò-MCÜ7‰BŒ²'�;¡û¨Zgñ¸>OÔßóýËk�úNÚŸ­,åhjÏ,v¹Á”‘zY8´Ã(  ‚   B ‚`öÓ„ê*KÙŸ‹ésˆ=€R@Æw=æÈX­ìŠåh|/ |K~ ŠÄ,_ì™^†S…Sz'�~鏸<Ý7Ð)ýy¼¬ÞÎló=r¼Uà¼b9}wÒõ•àrú÷¾Öç7¿´oòhC.uÖ/>ÞÞÔ� jñ5óVÀn"(JÀÁßl¼cM×™Y¼ÿ¶m{´.&=ù4>>24o=€ø7'ËáM{®¨žú;‹#8èÏ>4¼)`Íož.ÀÂ8 =›ñcÌ1n;µ±>ï{ñ)ŠPv ­»(A9ò@0§S€1a߃êºex¬Ù:zæ–âÜð­¢h ƒe¹²ïD{óõ'tIO¾¹Ò”X~Ohñù—+Š¡oB ‚òÐæ�8|x?&30ð^ÝýÞ|€‘~ÕH~M¥ÛD`f~P'ï§–ËrÑÂ… ÍôÛ—!ü²™{eÊŽvï‡Ê½‰$ºÔ^¥yº7º1Õ¾º‚ÔM¡â÷F¦±�?Ï«BÞ‡®èÃ×e�Q6B·²ä{êe^� Cÿ€‚ þÇlp$†!‚ð ‚`¶°"ýzkeMjîÉŠju§B}=Ç0¹öK�˜Ú/ò©(© ‰x� w53¯ˆvwðÉ.¥V^õœÆð!¨~ "ìÔMðŒ‡Õ±÷��÷ß±ôš®RÑúìÜ �~½MÆË> O¹hÁÙ±ûVïܼx¸ÚgŽÕ‚RŽå¯x¯¨2€VDPÌœe×ôáü¹¡Z¸ƒcûŽçç{O üJ5É8³ÖÊîPB §eš8“¤$z¤>¶…ž›QÊ"�wY@üž¡¼Bû5J¥&Ø2‡i蜀Œ÷� � 5Œÿ(c‰�tÝ©�Íöàqä9_@ÞÌ« :Y@âò~ÊÞ‰† ؆êhøÍNšû…Ap™(šëÞi¶Ö¿àlŒFÝRÄAð/Ò‘uÖèEB RÔQI¨ÔÈz@K­}vêÏs{ ,Ç¢BSk%N˜/¬?É?¯Œˆ¤ÿ'AÁ?mF„ʾQ¹TïÓÀØÂ”Þ×\UÐ+A%o>]/íÌK’ÉBUâSÇ´Iÿbï<À´¨®>þ;ï6–*H[zDˆD,!blQ#jýÄ‚%öÄOìQc4öØK4**"¨±} "j4¬ †HD!4¥ƒì¾çÓ}æÙ;sž;Ì.* {<ó¼3wê½3Ì�=ÿ{ÎÀÝ·Ú-káÛŸoSú§™} ß_Ò§&â�–ä–­ëÝròڑݧVvm¼Ú„usaÁ•'¬ôgÃ!ñ)¼²éѽŒ‹/<–GÇ]à ûoüc/½xoUè¯k®:�GHýú…lˆCéÃð#úVOÍšÖ#�=÷èV½Ý�ì†�~}{rÛ-£xꉙöêC¼<ù>Fßw]pLU^šÂá›Ð¨aqU½}9ž½�¼6–©S¬:ßõ×�I¯�:§{·Ö‰úõùIWjÊ6MJ8rX?.<·ßz.Oüå�L�òS^y€GÇ_ËM<›³=´ê>l‰,[ö%+V¬$Nii)[-®Ïpˆ÷=ëúX€„Š·W�DÔSA󀈆p ‚¢"DÄõ±X¿í´ÔÓ˜¶Ih †�Ôœ_0×aòäÙöEÜvšW§›¤÷‹®BÑl:>MEÉåÄ|C$潨&:ôĵ$pžU.”ltr!š·÷Ç{¡bî©ibëÕšø6ŒÎã¹—1¯Û|Ð(=f ê"M�ã€Ã�Æ¡E�@65@ÐÀŠÆ¡u¿6_Ž?j�FY#QÍ™íÈS«-ØQɾë³â�1>¥'ª¶Æ*¿Hâ éã¼�œXæ÷4ÉôÚQ›ÌZÜ}òÀT³�«Z›Ðoæ¹°û `æã‹ö¼@nîê’âIs{æ>_۲ќ”Wvnô^ÅgS$ŠÚgÀ‰Oæþ¹{’™ÏÉïs“_ @) Ú.¾è,vÛmgçݑ¢E‹yì±g¸å–Ñü{öçXþóñDÚµk»÷9(5×ÌØ1WòóŸÀgŸÍ£s—�1òø9óŒ‘ì°ÃölˆiÓÞàÔÓ.â½÷çÖÚ›åª?œÍ�CÓ¤qcÒÈçó¼ôò«œuæ¥|ðÑ~sÖ/¹úêK b̘G9æ¸KÙ?;ø'9ü0úØÛœËÏêÕkxà�G¸ô²ÛX²t-[ ‡ Ùƒqãî&Îé§ŸÇ�zf«õ²^¥[î:Lóò´ï3Íãðv˜â +jóÇÅ…|7ãw»Eۦ׃ì~Çþl87£ÌæÊKäûÙ ê�Zê Ä5� —å=êÿÖ°õ¶P¦s´õÀ6WøCÃÖØsÚšz\Sa"®Æy¥´¤<ä @�@ P((Úþá‚¢Îÿˆú¾)ÀT`]h�@  @ ð]Ó(Cµ‘¸�ÉÚ L¸2TQo/ö€â� çfÅo˜Ÿ¶dȲƒøÚ@�,(›ªzä\}ÒSéxõ+�áÎΣf9Ò’r§ju f[·ìÖÛ<æîk×çJž�Ó%7gåE)"Í·*�U±ûÚ¼^jlœÖéÈŠQÙávÒ­„.\« %),îþÓ% ~¸~²¹æÚ[¸ð¢;¿5¨¢bM¶Ù™víšrÛ­¿càÀ¾Ô”åËWpñÅàŽ»ž¦&|Pon¾é Üuf³dÉRN9å\:vl[+hÒÄ»Ù{ï=ØæÏ_@ÿØõïEl <ýäMpÀˆøüó/Ø®k?Ö¬Y¿õæÅC¦€à�S†Û(Z¶FvûnÌ«"ÉNņ5ÇHͯgûY�'Ofߘ>ØÂb¯Ïö‹Š€°dˆ#¦oÂt£¾þÒT03Gž_¡Ñ”¾È+ù¿AHO¿'¦ÜÎÉ'[cèÎÛÏçøã�Ç×aÔª<©.\Ì‚‹())¦mÛ²ªs6lØ€8�>úÃ�º€ÍÍN=Û3uê3;½÷ÁÇqÜÈßlµ�Ç+6#]œñ¸õ¡ùÄk—whŠ÷N\™O5Ô»õ~Ô&û÷ :Ù^@¾ò̼?àÍõ?®ñ2û8áÂyø@Fá'=�û5×g:«ŒÔ<þF°%hv’"D$QÏ,WÍçÝ>6Qcô“Ë ù¼šö'[€£^Uåáó|s @O(6�dùx˜Z*¤@ ­jC1д Ù‰ˆkiÜPìNv {B¿EÌ�W¸ð]ðͱë�p!$ˆÖCVÈ›T(m[ï„—n7Ê‚Le·av¸ô}ˆðïc�—ÑlÁûK½º WnÕº2ÈF‹r+×ïØì­u}ÛÌ7·Î†Õ3á髨ù<Êìmò­ !à<ÜpÝYœ~ú ÄY¼ø ®¸âžýë+|2g V0yÜ!üâ³~}%}û�eã çQÒ¼ù¶Õ‚θqOrÝõ÷x¯åúkÿ—cŽFaa!DÜqǽœqÖõÌÁóî;(+kEœéÓßåœQ—3u꬯Tˆh[Ö˜ƒÞ‡K/ŶÛ6« çD¡lh÷Þ]xå•'«ê3iÒËŒ}ä)ž~æu|tÛ¾×\}>ƒïP-¶pÀp^ze›“{ïù-ÿó?C×µç^CܽݚCÀ�fHð÷‰šøqå¸Ðhö ¶«Á¬taDÓ¼I=¨éW±Þ°YïTÛ×d@î×mCº§«XQ(9ï¢×& É - T3:ùôï$_=4C4J›W¿{°öT�G“|,Ù#aÔ„v#ýünÞåßó6]6y <„à @�@ PG ËtàE`uh±@  @ °1ä€Ö -Aræ/ó ø±¼ˆñbAÒbê¬Ø`-GÖ“È#@øs¾@ºÑ?-‰É)ä°† k¸ªqˆIÖÏíŸ~ÉkØJ�üWÍ!‡Oü1íä19á/"P!ÚõóµÅÅÏ}Ú#·ðË®Bšc]¾C£å´ŸE½Â¼3n)HPk¨¶È¸Yü:�­—m‹Ü¤—Zç^3@@÷n­™:õé„·É»ïÎ`Ĉ_óþÌydQRR@yyå·&Y>üp‡ 9žÙÿù‚ qåïÅ9眖ðÐéµó æÎ[Ž�K{<^øâÜ}÷üúìë\}<ìºËxð�›ªCâ»�Þï°ô é�SºwPvçkŸ ±W¬)4|Êo èéIPÙ/´D HãÂóGЦM+5jX5ìôÓ/û:|rh˜š õ‡—î-@WjÆàyà_¡ñ�@.4A  �¨vCµ#ª… R=‰×�‘f rå8�û‡¾?á?n²ÏIܹe vÔ« �ϸ¯¦>ɳ»ºØÑËnßÌðjžru;º:§&€0¦�(Ö¬YÃwÌ×!ìªrѲe 6�:6ãw—�Häþ¹üò©+˜ü/‚`ßEæÅjÞ_¨jDl¾'ŒX×Y!*Þï æüqC¿â|RûOq¿þ|t¶ÊÎsgê«(>ItÃ"Ñr.6�@$y�Ñ$É�3îµG3ígËìào²AóMáɳèsrw@µm¯—ª›µB¥«“)ˆ« ‰m\�\³Ðøó¨(%h¾ª…¡þV…Ÿz_M�S�îlåì»ïî\vé¹ÕÓ‰'Åæ¢i³mèÙ³Gõ´Ýv?äff}¥räðÃÏÈÈ‘GðMyàþßñÚÔ1ÕÓ´W¢]Û&|Ž8bpâ:Ï:ó$>_RÆ|�ø7p;ð_™§x§�êÝ÷Á ‚y«» äÈ ß´dNùa�'”í2SUºÐ(HôëBô$s åŒUJÜ�ÚÐEˆ1Â*`E.+Š s§€!\DÛveØpc[ +W®¤¶,[žÜ§yófXvèÖ†ÒÒRˆX¼øsžù¿×ØæÏ_ȦFD((�MF塯bÏ=w'ÎGý›3Ϻ’:„’éQi�Dˆ+Î8îñ4ÉÊC#Ná¤ú]+8A*:tb[Ä+:ø¼F£cØõé¢�õ²¿�î9„’‡¯!l9 nЂ­š"nÔ}OøÔ‹?¤ŸâÊPo}ÜöbŽã»Ÿ õÊ ~Ô pî¶G…Ž”eó­$žÍó« nC·lêYkœ×•»3!Qˆãz¨†‘µºáF’—† Ï<3‘8=zt£Kçæl,¿øùêÕ+ñx£íñMØT‰Hq^xá•p󾿬žî>!›Rà@à$ ¸A u¥è t-v¡>LŒw�=aA²XoWnµV¯÷ˆºÕæZÜÆb®Ç—,AÄÄ©gœ«V•§z¯xOa­£—ºs™cl]=Ë 9±^+Ö É¡81DI÷ðÑhÞn×£ S¿ j†…o,jVz×Ìþ…3—ô–J-%­W°¤bϲIk�Ýáõ|§Æk€¸È¥¸Öw ÁŒf�~ݳ�ÐÓ› È÷_"½Î Áºmߊ&�CÄŠ+ùô³¥lnÜõ¬â›"’òãŽ]LظyÎÓ¨–ü÷¿ ø6ئI ƒöß…sþw8wÝy�?z/¾pOU.��g=O«V-Ø\Ü|Ó(†2˜8«W¯áä“G±ly9u Í|%¹9ÆýG­°ŸT¼%—Ô&D’ª�B´�É!§ nògôW<ˆ4Œ×°EMÓ\Î+ìØ0¥þ>@="’ðýSÔ¯Á©«»:\N$õ%/JÇ®6¢� &Ü®õ rí§ÖqÕƒàê"¾ï ¿w¬B¶0#9w#w_ÅžVÁ]¿ûÖÂz¡cŽ žNXÌõ –" š (j&ü´þjlZdóRQ^Áҥ˪§•+W…FÙøÛÄé,\¸"r¹‡¾?K¿þ{á£wï](,6†ƒïNÓ¦Û@Dyy9ãÆ?nÞ÷Ÿ…Àh`<°ŒlZGC�¦¡ù�­Ÿ9¨»eˆ´@;ª6aÕVð*!iñ°¬aGÄŠ$e;’¨º‰ D8GÀŠRî¸q1Eqâ€g±3ØktåªX«�«q�5â@j²k‹k{UPshkèlRnæ�"òÔÜÛÇ’ËÅÛÐÜ÷H忬¨W#NËyÕ�Rçõ!IaÄôW¾¾D¬pƒ­§õòxøøËÄôEñ¾Àá9†Iˆ#8‘HE‰úZw>‰oˆx<œ\… ¾~Ä|_¹œí£Å†|³žTöx1}š¡D%î@ö©q{¦&lR@óf?µÏ¤çBÍ¢ýµÛØPUÄ.»³¥ˆ’%¨�–ëCO�¤þãå�€~@¯Ð[cƾøõbËËTNmÈ�!bŸ½ûp͵c6ê»­Ïî»á£U«–ôÝ÷GLœôµeР¾Ä™>ý]-ù¶">f}€½€"6Ì@W`ðw "4a <€�ÀV�HKDviáŠì6FX».Eɰù]D¬�FAÍ1æ~­È®wç¶ Ÿ3ŒMfœ #—at³#¬�0d“þ»: ªaÒ qµH"á+ѦÖÛÇ"x¢ãT_{|¹fbPöl[N5«×åJÆÏÚ¡ä±�×DüQÈW–Õÿpíˆ&TØñ DQÅËfF§»rw]¨ú“]K.£ÕÒO|Â�ÍÄG—.�ˆ³hÑb¶$4¯ÔU%‹öíÚgå7ð4ª\¿¾ÖñãùIÌœñ,þó� °:´Kòù<Ë—¯¨úÝÔœvÊ¡œwÞ™Øö½üòë¹õö'¨Ë$ÄûžIËïâ2ð‹`ú(мÇaG°^«ÕóŠ&œ‹œ0”À—‡ˆÌœF.¯©Ø³@f_„â÷B\9­3!áD’â—nPÜ÷Š ©¦X/+ÈXáF¯²­£Å4ÁÔÅZ6Ù&ä¯bBÙYLÝ<žÚ¾þÓ<žb^¼‚õH³XAÈ"6�‘±,ÎQ.‡R¥4ü}\-ü}5íœ^CñçcÕ5sBËê:'¾Lœÿxç�òÖéß¿W•ÐCÄìÙŸgðà~l 6/ÑäÉSÂMÛúX‰9·ï’M°gô¾ß)üí(|ï‘Æ@wÐv(¹xX¬6/Ž›·Þ2"d[E�ÉŸœ0‚O| ¨rìµyQÅ`]^Ü’ÇšaÄ›¸p’fŒ#iBs¸Ë÷Ç ó#ž¤Î‚#Þ`Šûá \êŒhéÂNú6v�5šÅÉ«½ðYÛÒ{f*øtUOQ È ß¸x^ÅÏ:=W>|ûwu›âuhjÓ".d�$ÚÞ•cS2Ø|R ‚ KV&ò&¥VÅÓàÉ"–.]Nœ ê³µb×ÅiÒ¤KQqQ­Â¼=õä�œ;ê ~ðƒŽÄùôÓ¹Lšô2÷Þ7†‹û†=��z  ñ6½hÞ²O•´)6t_®ºêbr¹qn¸á®øÃhê(HÜ31#�DëR�•}\îlÇäÞ­(�Kä¸PPÜþBJn@±ýcÔ¤çRÍt�Ú/Y!Èv”R]qPÔýºu.Dœ†¬ÆfûIÏù£Fˆó}€Ù>Ɔ�ÁìãuƱùë¢Â„S–['$ÍH(db÷Å·wŸ ‰rÏ·…÷¾jõ€Uj…‰�—ðHŠc›OÑÄ3#õQJ©£Â�|5í÷%{ôøb` ðäÃÈñ@�ç±Ç'±fÍ—DT…[;ø Ý©-ØŸ8wÞy?ËW¬€ˆ=öèMmÙ±GÛ*/ðø ŸÇ.Ü´­—•ÀÀ=À<²i FíBó!\ øÞ!% íš�G…´ WjC€ïÍZ< ž� ë5(.d› ÑeÏo­f{l(’ø59…$B�­FP� ÕëÜ6&�O¿‰çÄÉ�âXk˜‰©/nÙµQ´bű´zY�Õm h"RS›¯¬ð�Ï›N[°snÕº��–ä–¯ïÕâíu{–-M>˜¶G�1ÇÉ7v¨·µD�­²aÓBîØg@Å݉æCØ·fÌœ… aQ˜7o>qš7ß–�¥m›Ö5Nò;nÜMôî½+D¬][Î_ÿ:‘±cŸàɧ_cKaà€^ÜvÛÕ”””çî»༠n ÿq’ÞŸŠC]å •æÞ�N|@â}›;¢šØ�Š q–‹ ¸ëp³~ÔtLY¡4Áô+Þ°p®Îz;Š][D…R]9·.±�((Éc¹6Fã^ÔVÏñǵ3×.8’}œÊlÈ<Á~·˜[gÄ@Ihp‚¸oã�#iãbÀòc® �÷“Ù£®OÕ¼šgÞߌöâ4M`R5߃®zyUÀî§‚H1P„j9°Ž:Bý¿”wöÊÈf 0˜äË:€%K×òæ›o±÷Þ{$®=ñÔ4jÃOúˆ¨¨¨à‘GžcР~ôë·w”_²;e­1áJjÊ¡‡L¼ò>üpï½?—ÍIźÊðÐ|÷Ìþ ôö²aÚÇï/+CÁ(lɈ€´íÒ˜¼*Š"Æ‹Á‘öMÄ;¢2Æ#Â7ªW�5>šl.¬°cÊE¼áU$q�Ô|1ÉBÉE{;£>¨£¾ÍidÅßYµá{ü†!;o—Õ-;ÓA¬V!‚Kš­Æ3Fp¡÷4~l·ÎmKV¾_‚êÜ‚5%õF¸kÑÄÏÖDüÑœT¬ïÒdú—'þpb•øcÏ­X¬‡“‚]mív"ˆØ´nA|R¢HbÙzGLXÀ¸�6xo¼ñQU>"Z´Ø–úõ ùS£[ûÉ's‰Ó±cû�®w›6eÔ„K.>‘~}÷ÂÖqÆ™0tع[”øóã];sÿý7ѨQCâŒ÷§œv5u¯¢`º Á ÆcÕ½øL™él¢~0Û)T{ëhõbûf£$Y5A£cØrÉ —îiéÏ ” 'æš49ðAmGápë7Hf6¯jBÓY\yôkC·¹z«9–‚|ý‰dŠo¦'ô…ܳ.eQ™?´®Ue„øsæ`|¡[Å�ÓïÅä&‡Y1µJ>ï~¯oqß¹dŸnÆ|PÔ ¶rá§ÙWÓPà²ÅŸJàUàfàÍ þÔžîÝZsÑÇðü„;xï�'øl΋,Zð*3ßš_¸‡‡ø=¿9ë—æ;ÁæTüWüþäêéW'ý,+¿^õ¶ýúöôöÅ·Þ<Š©SdÖGª®gÆ{Oñ×goã¶[F1üˆ¾d�9(åè£öãÑñ×òÏ7ÆóŸ�'²xáT>žõ<ÿxmlÕ9vïÝ…8§þjH¢ŽíÚ6©ñ¹Ž;ön¾ñìªóýýåÑ|ôÁ³UuúªnUË㹚k¯>�N›ñ]ðÒKS±a×jC—ÎÍéÑ£D¼õÖ{UBÏ˯8©¸¸ˆÃÿöÎç¥é0ŽãO?­¨eþ¨K‡]þ˜+JÂðÐ-,:téQjVKÓ[2¿êÜœsBETVÓl›Í‹—ìÐÀ�¢?@Ê%aÇ©—õì½Ïöðn _vÙVÈX,ÍRŽD¢ù¾‡Ï‹­ÿ “SµÌᯠäó¢Þ޼¨:Ûd]Qãàù’Ò¾»{ ½Z>J ½ÅUý—vXš™ýù N 4+ÏR t”�lxÒ{#”÷ºâ@�èÑ=­fƒOªÙ<@GÐ^@wÔ)T¥ýNËeËî¢í_$�k‰D"Ãé–¶œ·±ØªtÛÚzýv±²òUzý¦æ³9oƒÁ9évbâúB¸z­Gz�hôý–›cÇ[´��M鮣³»BY\\’^Çï WYXˆHw>ßý‚Þgmí§ôóû &ôÛ‰ÑhÑ–—?Ó{æçßhÅ%µ¸ù_ÙµÏÜÎzÜG8‡A÷Xv°S½«’ºJò”ÉßNª Ð�VpÐÊ€r¦³rµ:‘¡è²îÊáÓÝ-2zʪ’ #nŽ”¥äê�ÚÙ¼ŒèoØq]ÃЊïRóP)õðPòÙÀîú |.øþ ª Sðj'¼!­Âd]e®uÐØ$�o·ýbï<À´¬Žö¿»°M£Œ±ÐET± 6Œ•¢€‘²vi�‰ÆX@AP�b4ú£‰éÍó·Å$~–c,1Ÿ‰šç?;×øÞ;Ã9œçawq�s®ë¾æÌœ³ï¸¼¿÷ž¡ˆö&Ÿ0»!ç(Úš#}¼çœÓùøY,®Q̦™[öãö"ÞKm\=çf�Sÿ¥B<§ŽD‘îI^Aq“röÒïa•¤a¤9¤$ƒN&µó=ýÝõ )ÝTuÉ%W¦�ׯ~õd®�ßkï!)ýÞ‘~òÉ'i–õÖ[o§×]wKڹ˾k=Ö„s«Ô]ú݃ë>Ñïi…»7ܰ¼P§ß×ÒŸüä)½9' ­ï|çát§�Èý¼UUÍáï%´¨Yz÷=÷§]·À÷ä“ϨsúZ¹îÓᇟ’®¼ý›)Í—L³®üã½tᢥ)ýŽÓ¬?+½z müœò¾GÏC3ü¬Ù—ª¯óŠ…×:wÍš‡²>&�~ø¡zÜ£�>Ã{ÿ¢‹êÒ7Þx3 ,úÙú8�?qÖ¯ƒó-õñŸ?÷Ç{fúûßÿ¿4´è÷SþÆ›•ŽmÆ¿ÿÛ‘N%%5•´w|‘-®¸âŠ+®¸Z˺zÍ—ôì¥Àí€ ìY $PÇ��ûÁ� ÌôáÈ€FêÈy­ü1àgê9á�ÍIØ#²  À ‘ ‚z‰PSàG"öqQÉ‚ìY¥G\1´rÛšª¬¿HV|eÆùmN_rCy ÙÄáE+>¸G¹ˆÁ��>\°#9öJ z$ ä!éÜ 0{äÝ#‚èE u÷Ö[ïØPÈ<üð£y?/ôÂQ&ôæ›o©{ÃŽ:çõîs>O  ú‡{òÛßþ^z≟~þ¹"‚ìä1u{&ø1°ÇD‘:×D|ç2ä´W�GÎ�#ðùd� ûœÈ#Ї%5¿æA¦ð胃 ‰tì¹…=V¨#þ˜{A ¢HÎ$ºà�£&QÃR¡&àQ°GðƒZúXÀ„ˆ{.Õ³T àdžê¶$•mà§ iÒ R’AãH…yå@gœy~úÞ{ï§9Lû}›=ðÀÿ¾šQ˜æY¯¿þFzè¡'eùžùëþÞ£?Hó®?þñO :ò ú'mÊ¢ß=šýçåw¿ûƒú4oç=úèÛwÀQ…³çŸ!•Å0EêA�3I}=ô†,ç½-·êÅ?#9ÿYï¼ËÀ܈ÞðÀ‹Þ(•æYO?ýÛ†ÏPÓÿ°3éü h,©s|Ñ-®¸âŠ+®¸¾ E€¦ŒÏ®¤þ�H5’iØ£"d€N^ÇI庸0¤Ý>*7À¹�>þ\"\@”s…¤ïXYÀ”À'²°Çêéž‚?@„<l­Í™K÷¯Ø±îܬ¿8$ª.zÙaE—¬Ø[9~d/PR¹ßT€>,®Ûè#÷´Ó5~,² ›Ãõƒ=Å€XÉå—/Qw?ú裄޹ѠsΙ’ MœX«î}úé§É)§ŒËõ¹î¼óÛü±!Dï2Vwþõ¯årÔРa||ó ~¬ÿøçòØÐ¯~õTÒ±S¿†;5 €Ÿ.,ãü± ˆÅ9`öþ q.jìü‘û¹¡ê—A=|&9�Ce•uy\=îüâhœ@‰ËǺƒ}Ô~=å�?6Ú½úX'€j²'ùáê ø¸¢ÀDåîø‘˜]qÄ™ þ šœ?upImIj»‘Ÿ=HåxÇw�"Y­"Ç/»h®Kúâ‹/³³æÆoc7Ç/ù›ô�wÞ-ܹoÍwñXÍ€¬<›.Zô5õñô;IJoÊH~øûé²e«RúÝ‚�Aï¼ó÷Ô,†ÞψÀ÷‹]%?øÁ�Ó¯}YºzõÝéSO=KΔª;9P2:€ÈQ¬îÿõ¯o7<Ÿü¼’c„]*4[0}ä‘Ç�ôû\³þ¼Üð�[ó=oxî,¤9=êœþ|Ôã9ì4®ÄÏuãõ­o­q}n'´£7ñ׿téMée—]“Þw߃.·ÿl»Ý>YPƒŽÁXŠÅ6Ï>û»ôŽ;îI“dazÕU×3�úûßßM±ðsÒ}�Á5ýÿ %¤}IÓIIÍ%KÚ"¾W\qÅW\hä)!àÓ•b?†<$~ð9jn'�×-ð±®äÆù£Î½²5ëú‘ÜBɵàôQíàüN Ⱥ~ Œà'x@n í òÉ:‚  µ}sŸâi7÷)ßsöȆ6n™ÀOûªYå}“ŠfÞÚÀ‡d€�vÿØöoå¹uý Ê=í‚‘몦Z»�Ý#Åpk¿øOïîT÷o¿ý[›<¢T'o½õWu—þ¡œx°ƒçŸÿü(¢ÇTz÷h²Ãû>àÑÛo¿ÓRˆAÔý÷?´ÖãÓ = _c„? ø¢ÖváL`à�Ô'[8d\AC" ãÔꄺj§`Ž‚Dž3ë²µ�}�ûÚ¿aÇrÀ ãþáº@ÈU[7¿°Ç›[øckítœ«œ>€<º¹ÁÕm  {@Π½u9€p¾Nð£ë8³²©ñ Ô»@fκ4ýøã�Sµr ë¯_Æ éÁa· =¦÷.=;H¯—^z…î5MÇ�´n®,�Ïæ�×-·Ü®ÎO>ùu~íÒ¹Ò+¯¼^_¼È¶åcpšVuõÜô½÷•³�!QáñUKDz#·Jôý,._¾-ðК0 æûÿDEζ u¤Hmâ‹rqÅW\qÅÕ²íÞ:ìéERŽªcß(¢Õ›D€"·Û(RHö: ü°ŒCH`�uÿðÞå ò·�Ó5¿ì ä6Úù@Æñƒ½>�:Â]Ét²;‚àrÁBMµ€“¸ƒhên]²²gÙþóޭܦº.s»·n3G—\pC?†Hi dŸ›º�ùC‘w�œÁáéñrÔ\ œu—< �Î;¿¦ñ}†4£†áÀÆ€Î>{rAã'LKè®�ïs´ÁƒGð¹Oô‚IB/jðý ÙÙ:ç_P‹s�ºí>(yá…—ø~K z!c­Ç~ùå?&ôÎ~Ü(0ïÇJ ��HÏ‚Ô À€‘j÷†h„pP°Íß‘šÚ;¢­)°ƒœ…½­0ø7”Ã飠�ÃÝCuŸzxoj¨CÆåCâ˜U9œKû7Ô}{ÛþMÎxq]O8ÿ, ‰ª†èAê+'·Rð³iDŽwuC*LY�¨ihåʻҋg°Lš4wÂjNdH šè<¨ßüæiÛîk]³f¸U\ŠÅN'´1óë´Ó&À•ñ|¢†ç5^#FŒ¶°LAEú³ >æÀ�ǪÇ|ÿýìÜ#~îÌü$žßzl‚‡ÊÁõÁ2Ä  »èÍ`™uX H~õı5ïÿ7:’Î"%5‰Ô-¾8W\qÅW\ÍïúÙ‚´GôX ÀÁÀ'ÐpÇÙþ ¹•)èƒ{ òøàß‘šÚ;£­1бÈHê?Èðñì¡õsûøäX„="Ü=²G-Ðþ�cHm�¹ò�ÊεS2·{ë:ý¶'^}�øæxÜ@Ø[©¶n\£(`@HA!œ³P»ðG� Ä€L¸è¹K?ÿù¯å>Dí%ÖéÙu·ƒÖ›<÷Üóì¨Ùx´lù*û}³³‡Z¡$ô®Ï†Ù8 ¨Ç~Bï†Mî½÷�4¢ÈÀ( úþ÷¨îÑ‹ìîY—“‰ÞýÊw[ ͘qÉZ�KÃ|zÁ'¡ÖKôΦ ÈëþQ 0ŽÛî @çþXMÖ¹…=$_MÁŒ œç˜„šB��¤s8Œ# Ñ3ˆïúhõæ©ìØš:3ÐG${Óú µü� BÀƒ×­T๖ ø@Öõ£r¾oçÿ W`ǟä÷e­ü”’!Í$%t&©S‘¬€š€ :^Ü6X£G_Èg­MŸ~±œ‡E¿ëæÇ@³ç\fA»aä<¨±c/  f»Ÿ/j×Û¬�÷=÷«Ç§¹—Á�yùe8uÞzëm—“‰[õÉâÙ9ô»3×}ºâŠ%!€Ç-ùÔ�ï=.gAñ÷ÕxÝy×·s §ŸywÂb—/@°€Zæÿ#»£eh&�AÚ&¾XW\qÅW\M]׬)%è³3 s~(ºÝ?€;Èá2À'„ 3�lK8pHÀŽm0äƒDR[èwüØ€çÚýÃB°HD¹‘uÁñ£\@R´�rºü ¸|p�rÎPƒÓÇí¾dÜõ*v©—üt¬™^6hÁ°¢yy®;ò̰£€ZÄ!ª–ojFÀ�‘>h§òu¶�ƒâ  uhèa''Ô[žïÛ™@9ÎЋ- õþN¨Oyò³ŸýJ}úø�1H1ð˺¡àöÑu(Ôê#:úè3j¥¢îÒ;>“›nZÁN$z—+;±–\{cBÿðn|�[ôQo÷f@4ä�ÙT¡uÜ& €ä RЇäÏ!À ÉIö°Ô, rÔz”CˆA�äôxÜ?©½Ïå¡B.÷r@½·0È‚[“Aˆ€>ØçtáÜ@¡p+8ëøás@ì•ûGà @ç~r—Ó{Îqßáø‘r ƒrÏBDª·Q»�lΪ³²n -Hm¿@ðSLêKª"%4‘´[‘¬€š=öØæþS\o èx�ëAÁuB�ñ±j#G5ç=;‹ç¶ÛîÌûýñ×·!ý¤>�®·ÈŸæùxE¿³ªû4kÇy¯®nžº7yr=×=âv‚�}¼:§YœÊÅC¿‹§ýû“ó ØñCó& OolÂÏGåoC†|µq+8Þï¹çÁµÌÿSÚ�’²vþ˜#mä*â‹wqÅW\qÅ•¿Õ[1AœÎû‘Ї÷ÈI*—d`Ïbÿ, ·#È ÷”ëÇ€U3³~¤&PÈíòñC!À©qä�€<Ø#·w.€GEƒxo�OÐ éù?ˆ«rÎþ ¡œÃ‰Å3–÷.ï9÷”ÊöÙzÓ½Ù彿žRØÛsëòQw- Ïýѹˆóô�ÜèÜž+ dÝ>vÆ�Ý»Ý?<È-’îr‰Œ#È }X®p"². €ì9º`êµÎžQAõ’ üBÝΤóHIÕ�ú“økŒ¨™æ•ð|Óþ«µ ¼Ÿ÷sþéOQ�Ñ·ïöÏÞi¼>ýôS† y?½áeC nqfÚ�5çãóì+˜yƒçÍ!z£Œúz¨}¯óµÍÅì€"§h.¤À8²ÈQ¿ÎÏK.r®ç¹óÕcôÛçÈÂì%À¢ìzòÉgÔãÌš}i@-ûÿ—-IÇåpÕ’ú“Šã‹yqÅW\qÅ• þ´#hÓ“Ü?ûúœ?κuþHÍB €°×Ї÷Á¶oö ÀÇÀ H�Ù[àƒè=òÎÿÁÞ¸~TM»}ÖÙòÍž«y?ØãÌÂÜóÎýèø)@¹gÛ¼ÙVo*wÌr¡ù·÷(téð'Oæ9?»ÔŸCN¡þðò¸j¸+Q;} i‡:öζoˆpýØp¨ð¨y?�Ô4Ø�,ì�’eÝ©[À­Cô"IBï¥Ç€[r;dzèQ|Ž�AÔ“=yìñ¹œP…–o¿üåo’Q£&>†<êµÝX'h¢w³r›µÀóÊ®#zÁEÁšf@ügÖÜè‘Gß„?ž¡ GÜqÏþÑ5åü1. ‰Éó€~àøÑ!?ôIN2uäð@NyÛ¾±æ BÎÂÞȶyC¾îy@�–p=ØK.à†su+8Þ³\pÈÞ‡Û‡ÅpÆ!—ã{3È �Ç‚ µW�µôA>N ²÷\.–ÔQCÝ �¬Î®ÛR"æµÜ sH§‘’ šM:ŒT^$+ æ@§ž:Þ8n^äz+@üõåüœü9R,ž×cï\vÙ5ºµ×Ó¿Uç9%±ó¤ñzøáG›ýs<þø�Õç¸øâEÞ»ävW.‚7Þ»Ï>û»TÏòÝ#··úü¿þõÚN´o~ó>u‡ærr=‡¸­\ŠÅ00 Z¾|5×óê¾5ßµ-ë"Ú0 ¨3éì è|ÒÎñE½¸âŠ+®¸âò·{«$P³;ÀÏ}�™6p@$ßìÔ{\. ëBô€›c/º[»}ÄÉcëÖåãŸõCÂÞ äAå€96 .'ðÉÜÐÇ‘ Ô�㇣mÇ{ä$ |,"µ=ñšA4»gRævo4ˆf\pôhòØš9ø‘Ü> ú4Þìˆèc9'9 �Dëò�PSBÍï ÚlZÀÝ|óJ†8¢õèOïˆL,¸*ùÑ�~–¼ñÆ› •>w¿üùϯ1X¡Á¸:]sÍ êké¶û ï]Ĭîžqæù\Ï£ÁƒG¨Ç˜›\�óœß?½Á-ÞèþÚ\ómV¬¸Srêd‚lޏõÜ_þò¿ ½û3yïý÷za†Úëq«=<¯˜·¤¾/™¹Ôñc°Âã6]ìŒÚôgä˜}Žöoh÷f` wòþpŽ(žêA^çrèÁ™ú„æÿä×|% „$üAT-ÞÜ5 zŽDìÛ¢�ú@òè­ß,üði÷�+ô@: 2²­ßÄíÃ’ÜÓNíqÏ+›Ãñƒ(u+@¸�¬ûÇäÖý³¥�A[�J[à…¸JÒQ$qiuéËE²"j9D¿ ا[¢9ƒ¹?çOüT=9±ívÐ4^K—Þ„ó|"ò¯@S¦Ì4èûÍý9Øm•b1rÝ£�êÏé‡?ü ×}ºá†åêq?üç=z³“º·xñõ.ðÔT@È­þ/ú�> €p/·È¯‡HmXÔƒ45:…Ô.¾ÈW\qÅW\pü´!íÈGd!�ݻڽ¹Ád`�’‚;*—¨å¯ÃñƒÜ%@üñ;€TÝ„ Ìòµ}³­ß|ŽŸ^•ˆ÷~§„º[—ùgÿ(Ø#{ y¬óGî!§hçý”\pcÿŠn3Çd?ÛTו0KV¨öq…[¿ÉàŽO8G»7#;ëGr �nUHΑ³ ðÁ, Hç€>âþá(*<šPTvÑ?†\,ñ¹€(v-…AL|^74íÊ.ž–o¶®   9Ã=ÈB!¯H8$‘eÝ>Èõ`�Î%Qî€Os‚ ¸€¬æ)(¤€ÚÁ!÷¸~Psº|�{PQÄÞ:‚ @ ê ô¹àj ô˜Ègh'5W«7VöX8¸ãkõ†ºÏõƒšDŸãmàüѺ€QdÉ| 6Í4“áÒ R’AãH_)’PË •+ï²Ãÿ[¼”æ@ÖíÂ-Öpž»å\œD4«1½òÊë¸M¹ªÓ^x)}ë­·ñœ´0¢çš[á}¾hcJ®j9‡è�?êk!ˆÈuŸŽ9öLuŸ~tÞ£7þ¨{ä>—3ˆÞh¥î¼øâ+ìZË!~NM;½,ˆJTÏ­šš¹êq¨@@µ%Lš•Ã�z(©4¾èW\qÅ׿=ççšû·¥ØW ƒªí УÅuìµî@’/öÌBØ#{ë ÊÐöÍ ƒ¸ØÃuäqޝ ³~|mß°÷æ?.WàŽ»-œmó†²ð§w`Ö�H GÄN È:‚D¨üÍ^Ñ»¼orbeûl¿¼U¶«š[¾×œÓ‹«oépú@žÖoð †\µzCmßxà£Àj€><ˆ€<º!G8´. ‚AäŠ(ª©â–pfR|^6QätûÀä–€ÜA»7ÀŠpü�ô^@f™Vp\7pGå“u´RÀÇíúA yþVpVrHþ Øc¡�Žp¡ Ôi$yÀ¤jÖäªyZÀId)Ð�‰VrÆpPȺ�¶–aï@žsÀÄ, 3…êUÝ­:�êÙ¤Eõ Rñz¾à¶'é"R’ASH=ŠdE´á�…%óæ]ÙšϦiÄ  ñ:}ä¹8Ï©§žz6'¹ÿþ‡Ò¿ÿýÝ4¼Z¡]µö•3ˆ•š�DðŠëñÜ�.òóø”½ÃN/ vìzSPJnû´¹×>’ 9ì4®çÕñÇ�R�óÁFôÅ� ­I'æpU‘zÇù@qÅW\qmŽðgkRëú1Οô�ú¨y@žèÕb‡È·÷CDˆk n(:\? t(ª"ävÿ8kˆ; É9"èãrÙs z¼Žÿ@ Dë¢\×|dojóWõ,=ìŠ#+·­©É<çgǺ mÎZºÐíƒvp{Z½Q„Ü h…ŽóQÄwu{8ì Iø¡àu%!§ø . €¢šEo½õW€èÎñyÙ„»€ŒË'�[m·�.ì!ä�oæœ?ÖéÃò;‚ø<«BÀ5€ŸûÐÇ/»ÇüŸmß�³è1Ñ%€ ÌòÍûÑ. Dœ{?¨!Ú–oœãná`Gr¸„ø ‚ë'¯,AÈë!?¸‡ºuùp(„œ0Hò²/°u!�%%TG:ˆÔ¶ˆV@„`˜k@p d·$  ¿ýíugøð‘8Ï?ä?âçøégžK‹a�‚!/§¯¼òê@×]w‹ú<ä[a`Dµ ¾ó�‡Õ÷ÕuûêœfùçíP â´C¸  +§zôªN ´tcÁ$³€P³Qöøä…B€>ÈC³€Š§Ü¼OųÏjhã– üt¨žY6à’EÉ ´�3Ðy@>Øö@¨ 9@ݱ{åôA»7ji$Btf[¿ålÇ€H¤çÉ>:€¢š*"­Ð#�<Ÿ—Í¡œ�ÿc!¢ÀÉ1ÿ‚ÛGÏÿ‘¨[¿]ÆÑ@ {ä 9¤òPË7¿Â³}l P‡Î�£†øcïpÍëþ�,$ÌÁÒ�G»~pîuÿðØ3—ˇk îH®ï²Ôœ(äBÍ 8~$¢Æwò¸€ø®@þܺ�{œ È8|r·‚· �D½gTIjÓèE´RÒ�³Î$u*’Ð €î¸ãu÷–[nß�W’,ÄyN½ýöß2 ‚Lä~ù�ºû³Ÿý*=çœ)€=F-€Â³xú÷V8»þúeêìðÃOázH;ít€úÞ vÎÈ ¤Z»ýõ¯oãù|mC†|•ëÍ, ¦»ãè5^¯¾úç€Z*'.s’ šIDj_,Œ+®¸âŠkS�?I} ó}$² üèY§HÀ�rýø º@‹!=ÿÇ�T]·wÃŒ䨫sÕæMö*Ìò È:�,ä±²ðÇžyÜ?n'�Í¥‚<<ÈU͸,ì ’˜¬ìÕr€N&ðCªè>ë¬âÉ7õS ÇÈïÂÞ `G¢�B8³pÐǸ�D@*Ç9Ú¿©ýmÊýƒ-àŒÃGGÔ�Š-࢚C \•л[š<¹>>7›©n»‡Ðî 9 „Ϊq´î ¸|nì-äq9€TÄÝüŽ r7 RÈÔl«7+;÷€Ç~òÏûQ‘¤¡Ž!:—�Ûùž$uÉ ò €ùÖ öȰ ¼äqÔ•êm8ì!ãþ™iÝ?Ø#WQÞ#r]ö¬±$ŠÅ'ͨ¤™Œýèw±jR’A�v+’Pë@—^zµ =úÁ~@Üö+Åâ¹6TÏ-r7ÃÑ@o¾©�Âc�ÿˆçÚÈy«@wÝu¯ú\óç/vÎúóŸ_Ëõ¸¿ùÍÓ…�}íµ× õ)Sfê?‹5ßõ>ÆÏþkë$jy„ç¡Yþ{|æ™ç"j� ¨=é4R’cvÝžñEøâŠ+®¸6fðó%:{ÀŽ@ î ‡lË7¸}ì^ ®äA-¶ð5UÏ&íô üAú�2µ†ä1Ðu �ô�0ø�ÂðmÞ$ZùÏ­ÃÇ‚ŸÕ8c­öGQéQ‹†6´pË<ç‡Zõ9mÉ�>· {äÀÈ#Qí! �æAªæ‚Bâô὆?�@Ôio?ZBöxòîªN³€¨ÜàøÂvT^|È É·¾µF D/<%ôNÎømÚHæÿ¢uþøs8€lΨÃçüÀ]d�?¸G9äwÿ è4ü„5ßFìEÞ™?6¿ÑÂåø C!Ûê àÁÞÔ< ò´~ƒ ðÁà�ºn cP!JMd�àQHíÑ.3²³~lË7ö×�D„0ÛGj^çjr+Ýmà ©‡��ì‘«vo‘‹à’½òÀ!D ¸~\5® [CǤçq®ï\@>Èð)¨lïê*·©:+ãïk³ICIåE²"j}¨wŸÃpóW6a„–dÿú׿ԽI“fäþ\ßþö™PMÍ\ógòT®Ï³jÕ·6¢çœÕçëÃÿɵú™ (Ã5jbžÇåvq�×ÕW�[½Ñü£Bí£�>J;vêç}ŒE‹¾¦ã÷¿ÿ?Ɔ@/½ôJîÏE/úþÞ¶?�µ~TB@šžs®ÝñEŸâŠ+®¸ZïZò�‚9] øì£Ú¼™½úˆ$çs-븨cÚ¾a/gÎ6pÈ‚ò˶zSn Ä~Y ô Ç ŽþÈ>”ÃýœûƒœeÏý°Ç¸‚œ‚ÛG¢œ?¸«€"©¸fYßòsFfžóÓ¾jVyßäÄ¢Ù·õvž¬íÞ�C ö`¯ê^!²´ëGƒ">F|×ÎÒ È¶w“ßq@ ¿ îŸØ.ÊjРãurˆZƒ$ÇwV|7 ÷�HÁ ³¶€ÓpÈ´€“» p¸®�„Y@¬ÉA" °ÇÀ ¯ãç!7 Ž?²rB€]¸ƒ»Öùƒ¢pÇ'§ã§qû7Ù#—šjí qýX—Î5ì13ƒ¤ÎQö^Y àÃu‘‚>Žù>È!u®ö€@N�g9Ý>|Žèrÿ ‡\ðGÕ´ãn ¶Öv¬ìTuý.6‡”dЉ¤/ÉŠ¨• Ìñsi6jôøã!Ä"ˆò¨Ü@[2šG#çaíµ÷|½´lù*u‡Ú¬á< Î]öMß{ïý € Gý¡ú|cÇ^”Ò|ÇBþ�¼‡öuÙÅÏñçë—¿üM:|øHõyh~S"ÑŽÔǘjY„Åsœr<Ï j¼þóŸÿ4ÀÇ€6TI.€'É ¤ýI%ñEƸâŠ+®¸Z›ë§©7ÉíöYâ€>Áˆ»€Aa'€@êFr7[›7:‡Ó’š×ñƒ=?TÓN�ãíá ….7�<μ·:“}ú¨šÀ{ætñÝ  r;~VKðANš{ϲ� ޭܦº.s»·n3Ç”œCžÄZqØceÁO@N×�£f Z¸9êEfÖj { €–ÓíÃ÷­û'0ÿÇë Š(ª±è�˜p÷dýã6¡U’�wŸ¿Íõo O—Œàg;HÕàê�+¨3G‡àî� ÈB ‘�ùãÊ;©º…9TW‘ž ä›ûƒsÀìAœ¯"ö øc!�Ä@ë·�H9}�; $ç5×éþÑ{€HC wt u�=.÷rç…;Á9@|Ç"(ÜúÍw¦ �Ohç™ûƒº�ñÓ¸^2búÖ�«¡7êÔe|£Î„ò]«»��^F�UÐÆ€èExií…5òŒó6ytúÈsׂ wßs?ŸÄ.•ï=úƒ”Wñü˜Æ‹\J8èæ›W¦XÁíƒvo} ùÿüÏc¸ŸC÷Üó�TýYœÞtÓ õyæ&W„ƒeŠÅ"‚d- €­r¹,\ýÑ�~ÖpÐÆ‚:‘F‘’Œº�´[|±1®¸âŠ+®Ö~¶ çÏž¤,iù¦æýx!‘r÷ BºækýfÁھəËd�?vo!jNø˜VpæÈ™D©IÎ’0Hå>ѹ…?vî�D’޲ÒäAôÀ[ÏÚþ €Ç }‰Úޏê�Ê.Ó§dn÷Öuú¤¶']3Ðgµ( ~‚³�¬z,ìAMÝè‘®Þ{@Á¤¢ÜG]¤`�W )¡ø#. Ø.ÊŠÞyê>Ÿ|òIò·¿½“üô§¿L’daB=âãs¶:€¸ÅÐÜ;Ꞇ?.×ê ‡P÷�¸‚sè ¹\A:’C.�ÍÃÈæ�9@@ä�?n·"j‰  ÀŽÕÁÓò­�Ú#ºd ä†A6·0‡ë<ðÇžY'�Úg–mñ6{DîiØcïã\ °Ç!u6jÆ—*v¨êK@gJFð3µâ+Uû�5}Ë¢±Ñ‚J#jͺï¾ù.Ú~}ˆûÙ€H«@�=þ£‚VÞþÍÔ,þø=÷<Øû1½z MŸ}öw)V�rÊ8uç�wþžîºÛA¡ï…Û¤am8DíSúýNµ�k¼jkÜÏ.žïcÎd1„$W•ºïw|×ή=ë¬ BÈ.þ™ ¸ŸøÜ8Ìøù$S@7Úƒ49IÚ&¾øW\qÅ×Ñî­”´3‰ÁÅ€=�=B¶õ›uûpôБ\¹z(÷º€,à� ÊzpècrÕú�kî6p;È} ·�[ˆ\¹}$­ �ðR5¾„H � ÕŽsD[+9÷†»Î<'3øéX=½lХËæ¯ê)Ð À› `×ýðÑnÇÞD+7zÏRH„"εö8[ÀE95zô… µ±(èÜóª“ã�•Ћ õC�ÏQ@:ØC¨kÙy@âøAt@ [ô�#ˆ¢A€<"ÏêdçY¤„; úØh¥îZô ²ün pk8Ìò·~C-$ €L®fîˆP7š«€�äº&Gö|ÇF@Ç~‚®ìèpÖíùöHy°ýœ?~§O½ÍIÖå£êùÚ½É^ òîÕ»Uv¨—éwµvUõ•ÛU )9ºvk�> €Œ* µ‰¨µ @ û"?¹c¸u9z�³ívû¤3g]š>õÔ³éüÏÆ€øñŸ{îùÔ®·ßþ[à ý<»gàÀcy.Òå—/iø>éì�½'Ÿ|†(!Dv¼¤XìTÚa‡ýùÜjèa'§�<‚–k AüçêZÿþw®6föyÀŸ±YÏ<ó\æÇ¹å–ÛS»þùÏ�Ò‹/^ä}NÛwè›Òï³ü¼~üñÇü1Ë—¯ À)óß”VõèyhúýžiûÐÆ�Ú�$Õ“’ šC:‚T_ŒŒ+®¸âŠ«ÅÁžbRg>ûÀÏëÂ@�Ë”Ñícï@Æõƒ=@„šÀ G?ìA {–AŽy@$ëþ‘x¢Ôà‘rÏþ�Lt‚ ²Q¹|$—=ËQËÚÎ!ÞÏ\Ñ·¼wr*½;tvÆw‘Î)ï5÷Ôâº[û°“nHÁä>È“eï?IM ŽU 5Ú¿q ΖrúˆXÎ@ÈÃŽ ?ôAPTTT3 ö>ö($`g$¹O¹  �‚@.É}Þ#Àƒ=lç’œfÿÌgI]E#åöA`BnÜ>7�R{ …ò¶�³°ÇÀ¡€ˆ„sÔ³¬ãGÕ@È«\s€ÆI®A�_>È]ð‡ó:ì †JûÕt®Ü¦ê䬯+;V_ºMG~L¦o5ª�©-§XPk@дi³ùÅ}»>ûì³ô/ùßô±ÇžHW­úÇçŸA#‚(‚ð¼úêŸÓ¼‹œÏ 4è¹  ÖÂEKS,8�V¯¾›ÁÅœ¹—§+VÜÉ-Î8¨ViW]u=ÿ9lH´äÚS,_´üúùÏ•ºÖµKo <ÀþœÝ?¯�£„?öµ×^Wg”¸nEŽiÙÀÃÑGŸÁ¸°aÐ�!_M‹AVSwÑ¢¯¥®uè¡'ñyž;wÞõí4ÿBK¶»ï^@ú¿¡¥Koâ�˳~ü㟳[Ž>> Mu%¡ËIXç‘vŒ/RÆW\qÅÕœíÞ*HÝ iÀ#àÇ' ¸¼ {·Ë¹w��ìX@§�æ×ÃQÄðuÝÞM"IÕq˜qŽhöjÖï!wTIÐc��’ÏícæA8Ç u‰mO½vpåö3&en÷Ö¹vjÛãqƒõ°�tm=aö¨Û¿‰PGÁùcAad!@ÀÎ$ªº?Ÿƒ¡€¢¢¢ò �<]}$§h€�üÀ„hÚÀa/Â\ã’ÀÃgÈ}-áàøÁÞ|Iùœ>ˆØÏWNOÔ@Ð2Ž Ô¬ëÇ g€×ÎUM¢uû úøZ½‘°¶Cð1²u;ó‡rr’sFPxþçÅ§ÍØª¢kÕ~j2:´/¬Ø©jo@�:öòÈ5—ÚFÔÊZXñ 㡺ñøO18Úxtìqgñì–_|n(3kfþüÅj µ‹Swz÷9Œë¾¶y×]w »§BëþûJ»n? ð±ßûÞãANgÔ~û oÊc²Cʺä<¿FžqÞºf29\Wï¦Ë–­Jûís$'€xð‘Bý«'Že\`1\°àªÏ†#ÚôAPOÒ´ èdÒ—ã‹–qÅW\q5ÅñÓ† ÏŽ$¸{H¼¡f@Õ,üA.²ÐÇäp ‰ Ž À< ü »€P3 ·ã{åú1P{À¡ ÓGàjÚùC5ŽÈ wü{ ~ œy�_%“nÚ·b÷Yc2ƒŸmªëʘ\Ñ%·ÃñCî!ì9º‘et9Ü>=¶œÞûA"`@¦œg¨;fþB€?ŽAÞpÖýƒ< ¨¨¨&8€4Â~»B è1 ÄèYüÀÄA.÷ 9 ·ƒ³ðÇ´CnärùøáOX yœ?ó8´áèsüðÞå𱎠‰PØQÀyÀ顎¨@�Ö\ëü�8G´ Çí²ŽŸ€ H»�òº|²Á ÌÿAIÝÒs€àþ!0cCËw©Þ›€ÎÄŒs~j+ºT ,>múVÖÕ#. `�œ£&ªåHª µ‰¨yuð!'¤õõó ;ö"®çU·Ý¥3f\­­ž|òY~‘þ�7Þlx±�!ÉÍ7¯LO>ù¾ë½È®¾–1c&­ó~mm¢î“kf}€€zŒüÀ3chÞa:qb-ƒ¡î{ vÞ{ï½÷ÓÆk×ÝÊÙ¸ÅAžÂsKNv!UUÍq¶‘;æØ3 ßÓi§MàZKëô‘çªç0­i¢ïQ=.}œç~Ö&MšÁíØ¨ý;¦H ¿ýíøù¦sv{ey¼É“ë _߈£í9ÿlÜqÇ=ÜÒ^I_~ùUþ3¤Y?üßM#HÐæ�JICH⨠j–Ü/�/bÆW\qÅ•×õ³-�›¾ u®}íÞ$ÀŽª[çO¨ýÛýØ{ÛÀ!’𠦡�³õ›ÕbøÁç:âžVþöpØ£åÜB?ȵËÇXr¦rÀ ½§àr5ðñµ}SÀG"ö¦f�?È¥–ÜÞ§¼ÿ%'Vv¨ž•ñÅ„¹å{Ï9£¸fy?†<—+能nù晄hA�Š¢î3CÌýÁžs0È´‚SP˜Ã57ðR�ç¨+ðCŠ3€¢¢¢ò >ã}LÄÞ“YY dçý †¹?ÖÄ2î9ìA�£‘rü„@�« œ­å? tPàãnÿY§ÏDµ—°pHr ­pk8€ ’rþð5sf]?,ãòaù?€@?¥¦aC“£Å›DHç÷O>a¯UÏòÔ|<îÛ®¬GÍ4çgTÆßÕfSk¸£Ú ­mϯÁKrÀ›èAøÃâsÉÇÔ–‘Š#ŠÚh„6dâÂür|Äç&ªAm¦«ÁÙC:)‡h©g|13®¸âŠ«uü%^LÚŽ´é@Ò‘¤£HG“†‘"õ!íH*û\?[“zÂáWÕ‘ø@¨ ü‘¨�rÿÈÀzÍÔ­ßÜó~l.5ì�ã'èb)ðc¢�¤��ÎuMÁ_ë7ÔUÛ7 ˆën×OX½ÔÞíò;�.½£W鋎¨Ü¶¦:óœŸëÎk3êº�E zî`ièƒÜåò ;‚üÈ y ŸóuÔ”|s�#AyÔ\ ïáú15Ó0(|tÍÎ<: ¨¨¨Ì wüRw,rä¦ý¤]A6‡ã®©Y×�’jñ†šÞyv…á�>,×ììmë7�³­Þtðƒ=d]>*÷¨¢uýüà àÇ×òMå6NÀž¤ D9Ú¾!'åmi胺@ÎVp:ŠìyãvomÕv¬ìÄêçd‚?«N-íWÓE†@pýØù>k;~pæjcjK#ŠÚ˜4ô°“ÓÆ‹Rñy‰Š"_A,*’×ÏË‚Î!u‰Ï\\qÅ׆ÿ » ©7éTÒ R’QsIIÇ�v!· ø)'`Ó�4€A�ÌøQBÍÝú {ÕêMåÆåcj èÝ@~d#ÀÏ⬮ ì] !Ô|Ð Nj8Çl €\mà À€Ûæ ’sÇìµ÷8�$"‡�kÐãÌ âH0çüÌíÞ¶«­*¶ð0;pý(Y÷Oü?*GÌÔÎÕ¹òPԂÇ$ ¹ � ‡Àc¢çö ê¹?ê^lÕ”p-è ‹á GÉvho¡îÂ' uìåœï)8ärýÈÞ‚u'àRõ¬îÈ †,rB ¸}ô¹Ô}¼-à‚ðÇ“«½ø¸50¹@B$ÑžM�œÀ �rÁù#à‡cNð@$;ÿGÎXÆñãjý†Trüô/Wt®:„Ü|*åœö ‘Ï*iß6 ¨�A55súõ¯ŸŠÏKTT@ö�äýH˜·ÖÒ—â³W\qÅÕòI·—O)iÕ’Ž mٌৄ ÍW¨ÍÃqù@)�Ôá‚|­ßT”½’ãžqû„· ðÇ‚p׺Ü¢3³·ðÇÌÿ�¬Û€È {|Ñ+�;�uA€B!¸P÷ÁŸâªåû”ï5ç¬J�Ù^L¨žY¶ï¼¨M\o z¬óQG8�B`ÈçüÁÞ…àü±.!VHô;€DpüH$)$‘¡ŸÁÙƒh`×ü ¿�º7ìc ¸¨¨¨õpY§�·%œuü°Pܱ. ùÝÎïþAÄ| ´zc)èãrù·¢­!䡽…>ùa"Aˆ|fÜAn(ä=Æ Ô$pÇ! ¸®ÀŽÊ¥Yö€Žü f èAÝ€l=,;Òy=r@ –…?$8F×mU±Cõ>4çgJ–ßÕèÞÔŠªú�žñ%�?*ºZÀùçüfÿ`/ç€?C\« •DՊųf¯åËWÇç%** ×kŒå¤#àÄ ª^º µ‰Ï^\qÅWËüÅ܃4•”´€f‘†“¶(jÂ"èÓ‘€N_’ÌùàÁÞçB4­ß0Hd[À!®AÝåìAŽ¢qüHŽï]‘„-àd/g.Èck€>þì(ÇG@ DΑòЙפÛÁÙ(‚ˆG"êN9 dÎ{d¯tɪ>eûÏQ¹Mu}ÆÞñIųG—L¾¹ÿZnÎIú '©}¾VpP¸\Xzl^��õƒszd/¹n§¡IrÞ‘bø#‚ÛÇ ƒ°ï@QQQM@.ðCÂÎuÏzìÞº€€(Ê=åò BàÃ{´CTˆå<áVoþZ¸íö¦†º†=<Ø«hk,Ïìä9��jõæ®5¡ äqÿP„¼N ëøñCgë7×¹†³õœ÷ƒÈ5#®c¸Q��œ—w¯îFNžñW«#‡Ð�’3¾\hó¦ �†=¨‡[Áðˆ<-à€H²ª©ü|>P@Q­MC†|•gþ4^G}F|n¢¢"Z×ë�H#IIFM&ퟹ¸âŠ+®æû‹¸3i,)Ùª# $•ätýlIÀgoRüPÜ�# u@Gt¹~øÀGö"Ô½-á�ÛVpØ{fÐã‘u ÔAô È}f�@ f¤FÒÎ P‡ì¼:GÍ=ûÇïôÁ @€–¿Ý›ª!꺅Añ¾í1‹‡Vv®�–yÎÏWf\Øæô¥ƒ>?ô��œ?9Ü?P¨%ܺ �øÈ™vüùgüà¢R9бè ÐÇ �LÍÝ.Y@QQQ¹�‘·Õ›Ý+M†3H�Ѝ‰wpÇ8€}$ü@¶nçÉ^I‘£î�ù#2gø`¾�ï̶�3 HIê�iÿ†Rw”ËÇmÞ¬óÇï‚,ì±{ÂçØ)äÜ‹¬Û-ßpGjˆ !8~mà{ÝrÎ*í_Û¥avOÖvÕ 3�ÚTÛIA‰ úØðÇ € ´€3n {àøÑuDi WÓ6 ¨Ö¢ƒ9!}íµ×üyùå?Æç&** ¬¯?îFº�”dÔ(R§øÌÅW\q­çjpã�Ž#¡�Õ†Ó$Òî?¥wv-ºöÁý�Ž+97-ମ±jB+8ü1‚ Èë ²ó~P³Àw<�ò;€ìÚ¼aæOØù#5—ãÒðÇä<þ¶o*· È ÷<³€l«7¹S2þ†�»ÔOÈ<ç§SMmé¡—+ºôŽ^xþÜÙ‹öÈeoaËïþqÁ[ó »¹}(ºÎ­öòº� ®ø�PGMÄ •ìXñ¹�=Z‰(¶€‹ŠŠZ/4íÊ.Û¿yÝ@Æ„ˆ½€Ú«™?RC”3D@�uA<=5Hò. (<È_·È:}¬ÛQÕ|�ú¸!rDÀ 'èAD r� qù ®`"I!÷œG›7}Gjˆ®ýl«­]Hb9A×ZÀIôÌjsÔô•ÛV #7ÏìL¿«mS5ª¬GÍŽ~  P&�E´PHåÁ ĪԪ!êm"Šú¢Ô·ïéÒ¥7¥ÿû» þ|úé§éi§MˆÏQTT@y^‹,!í—cÞø\é(TŸ½¸âŠ+®|Ù7NòëLRGø).Zú`WŠýIû1Ä)Àç�G€?ö Ο\2à3pænÿfÁ�•…?:bï>,Î ²Ñ‰¨‹Ã‡÷ˆ²Gd…]@á�†@�uþ¸�gPP>È‹gÜÖ¯¼çÜÓ+Ñ£6Ô;~vyß‹O.š½¢ G–uýØš†?€B,©çmû€=�ÿ<€4ô�8ß[Í÷AÔ-á¤Î°†¢Ëõ# ‡÷åÌ1ïGö~$'!*ÅpQQQÍêÔÑ9Îm{8 ˆ”ëÇÀ�mÕ™ž@ 8ëð�PëäA" *ûÜŸ0ìq­Ý¬ àqŸ‰Ž½È† ÔÜѹ;âÂ�v8d@¬ð äˆJ\‡�výÀ ¤�?ˆ>yîøhôyîvú ŸQ·uÅöU+1X:ô»ÚÄò]ª{|Þ.àûIMäi˜¤ÛÃqn"D°ÇJ Ðç*§¼$ ¨æÔùÔ¦7|ãV¥eËW¥÷Ý÷`úƒü8ýíoŸ~òÉ'©kÝ|óÊøFEEÔ”7¥�ãMéÓIH%ñÙ‹+®¸âZÇjp݈û&iEšCFªøÓ�Ô‡]? xXûI´â; rÌ, ;8´‚CTŽŸÀ  û!@Hjn­ !ß, }ä ùZB=àþÑð9ƒœ)(Á¤A�­/ôÍý�°_²Å®½“¶åñö¨¨Ö €úŒ'�ÓÅ ›[· {ÜQ@€à]„ˆ= �ɳ¶€Ë~,ôQµ àôñ9€ŒrÍ2pÇÊž¡Ýrç$ÔCóì®H@Î} ø @ —àÇFœ‹Û‘jê –[h çŸÁT¾ku:fœóSSѵj`ñȺ­|5ôAt´} ¸~X€?ŽÈÒŽ–?•rÁ„;£kTJû•šC+WÞ•æ]ÿþ÷Ò+^›VTöˆÏaTT@M}�r[ÒhR’QI»Æg.®¸âŠË¬—�¸m’V'¼;ozÙÀË�-ºúþìAë7øÑ3€D�Öp{ü ä…AKô ‰û‡£@Èý³doá�3Z-†‚ò¹~$÷·€³s€�Ër8} !ÓΠåô‘ÈBîAˆ$WͶ{k{Ò’C*»NŸœùg•î¶=éšC àG"ö"̲�Ç |”ëðÇž@®<àî1Ñ}¤fa×àöB u€ G8íbé:Àï� ò@¿è ™TÞ©gÒõ¢’Ýo=8éûÛ#’�Ÿ“˜²’o•ìýð¡ÉN JÚÜ/¾àÕº@]üÑ.Ôè`ö�äj�?Ö„ù?z�Ž> ¤@r¨“Ó­üØû Ü­Þ�ûÏ0ÿñ‰pù *¡ækûf穽D3‚””³稡 œÀ€È |l;8(ÔÞ uëøáºìq_ö>Çò€ÜðÇå*ëU³SC ·ŒàgvCk¸6GLï Û¼Õ»ÀO0²íݰÇ@T ©ÀŽì!}G PøAK8ÉÛFÕT]yåuix¡åÛ“O>›ž|ò9ñ¹‹ŠŠ¨¹_·Ü“4…”dÔé¤ñ™‹+®¸â_ äª!%.›dcPåö3ªÚžþõ£ îDÞ£ý›†?¨“ ôÑ®È~ô] |DŽvpüòHM Ž?"›ð@>g��„è…Aˆ ‰�8Z�AðãÈÝ­ß””È#_8ˆsáþ!÷Î~äâ9'óÏfÇêä:†æüôäèdÚÀY$Ò ‡k‘°Ï*ëú Ë:}œðÇîYþˆàüÑ9 ÑÊ �†=¸g]B€;ØÔ½P3àç‹h·ÍÑý“}ÿw˜Ÿ°ºÝ08)ïгɟwÛíöIºn? 騩y Òر%Ô:$Ùo¿áœoÊÚº]o~ޜ�×¾CßX6øÃr·„s:€D¶íGì- R{§wð�¼ gv�r!wD{&²N®  »�$Štmž=‘CN�@£ü cÎ,è±’:îôé5D ;�,ô¡šÀ�Wíô‘\Á LÀGµ|3{ô�Úž¾me§ªYÛÃTv¬:µtßÚ®>èãkõ&w�Ó>è ì 9@�ŽcÖŽØ×T²4’š¨œTPÔúª¦fnêZüqúæ›o¥Ï?ÿBúÄ?M,¸*íÑóÐøœEEEÔ’¯a¶% "Í$%4›t8©,>{qÅ׿ø—f1i_R-)ÙU±ûìóJ¦®<­à(jðcçq$¹Û¿a/€w,ôQ5@È? (SK8™ëc�söO¹@¸£€d!@ê2HÁÝþ {xlÄ^Àƒ34 é;n÷jüô25höíýhnÏ)•í3 &€ZÞ;9½¸îÖ¾€=�=˜„=Õ5,ÐC‚«yAú\´*—­Þü2ŽŸ†ˆ:D9À娣®fÿ0Àá({Ö z´àôÁž„= ÈáþñÁŸîª\ù6=“n7ì„<ýÿ|DÒó‰!¬þ:bíó?KÚ¶O“>ÿ3Ï<—¤išÜ{ïœ7UýëÛüxóæ]Éù¦¬iÓfó÷jE}ñ“7Þx+yúéß&=ôhríÒ“]w;(øx—^z5ÇèÃ?L^{íõä©§žM.Zštßcp³}Ýv”ìµ÷�„Ú¶D�Ó<ðÑÈÖúp Ð{¾#€çvx/pGîþ¸�ð`È-yŒ(‡ó²w-èñÕ°‡ØHTpÇëúaáNçO`þO{r DÔ”<ðÇ:€X aä×­ÎsA DÛNöZâú�P£Èà ”Ãùàck"Ù—|µ®]EçªCéw°úL¿«u¨_Þ½º€‰  Ïr€ ìµ{Hf�é?ȵj½0`G爘ÿKÕ$–‘Š#ŠÊ+zsPÚ¿ÿ0%ú]!>7QQ}‘¯inE:�”dT5©/©8>{qÅ׿òåΤó7RðcÛÂÍ)ßwÁYE î¨`�vþxgÿøæÿ°¼® 5¾${oë7D+ÔxàúA�#î)@¤œ@.Ø#wQÓÒÀ9 {€áÊîü ÕÑæ ¹®ñ‚«§G8€ü®ŸËîì]:ôŠá•�jj3ƒÈ]êÇ—Œ»aÿu�ër Dï•\ðǺ�¤Æ'ƒ‚3�€‚ðÇYøá½…=D’{]?óMí „”âh×�Ï {8€Zþìóâ‘^—Ïî+JÚ”îÅêvëAî{ÿ=&é|Î~}aÐç?ÿù‹kFï½ÿ~rÝu·°£' z÷Ýôïÿ[êÐÿýßÇɸñS›äüš›\‘Ü}ÏýÉÃ?ʺçžï$K®½1‚ & ÿ ìÍœ�ÝÎuf�ܘƒ:Iµu 2mÝtͺ{$b/B ¹…;9á�ô(—�DwË7äÆÕã™$2�Gjȱ÷µ|3@H¢¿í›Ê%þ¸!�ð@ê@r]ǹ¸zpŽ@ˆfDy õ›=×Üî†5c뷮ءzú7ÀÔŒÿV˜Z±cu¿¢ÑuÜ*έº Ü‘\Ü=®y@Ž3� àñ‚îÙ«¶o wT u'’ù@EEEEE´‰¼¾¹=i)ɨ ¤â3W\qmÊ1¶#�JJ65Ñ öu¥G^uBÑÕßA;8íò1¹œKÔŽ@+¢5¶-\ü¨(r€ / àƒ ÇëüQgðÈÞ€ É×­P‡öî–o>'Î{ph!dA�uù â  Gå€>rÖfäÒÁ_™qa柹εSÛ»x¨úø Ç™b!×3€”r:p®ŸÐ € œ§ÏZPÈãþì1¹vö .5èÛòMG5|×O í›’œU2xtK 8r «ý?žl±[ïV€êëç'Ô$9üðS6+´åV½>¯3ä9úè3’©Sg%×_¿ìs(ÆúÛßÞIá@âö±­á†uzR?sA²òöo6À$¾÷ÑG%C;9ï×Íî!z†>V«WßaN@™�à`œ>�܃HEî3Ô‘(pˆ„=¢cïuúà, O+8 {�£.ó}�çÿXi�nç@�öo.�Hís9z¼g,ì�Ý’–oÐÚ®ÄÙŽšÈÎ’Ñ_s�D‡¨^¾GÍîää™�Ñ�]_Ñ¥jHÉ uíÖ~á â\ö ø„œ@È!3÷ÇFu6Ælë7U¯BÍ ¨‚*Hm"ŠŠŠŠŠhépÔ‹TEJ2êDÒÖñÙ‹+®¸6¥¿ KICI³Hɦ¬Šꦴuã îhùÁ�uýHÄѺ ÷\ gË7ìò»€l«7¯p7 € qñÈâÜçô¡3äÙVp oPӰǶ~äq!÷*™ºlߊî³GWf?ÛT×— \0¢è’U½}àÇ=óG„ºqþ fEð% €�çwþˆrϲà‡÷p÷`è©p�m÷Yd[¾qRàGîúÁ"\A$ì©\K;€¶9¦?Û¦ ¨çcC“¶åM@ñEüf@V�»ì›,]zSòÏ~ÄwŸ{îy†:äÕ)§Œ+|Þ«®ºžkytùåKö|÷»ßãï¡ß>G&;ï209}ä¹ ó›âŸmS€O+8ÌýA„칑�÷'�nÿÆðÇÎüÁò·ƒ\­ßòƒ? ;� „ ÔxT;8€ö™@`PÙù?è`¯Ü@<�Çõƒ�‡s¿û²Àg¶m÷æƒ@rîwþHÎÒ³L”=ÍìÙžf÷œ–ñßsi&ÐñmªíÄŽ! {XªŽsà¢ø ©:Àè¡®áG5Üd¢×| ®UW°ÍŠ(**** MàµÏ2Ò¡$iåÔLÒ!¤ÒøìÅW\û_€}@Á7Uì5w|ÉôÕƒÉ ´Ÿ ÜÒ{È9÷‡s5ï'àøA9¢žû#uÇ9t/¢iíç�‰²—–nr]ƒPsÀ ÌÒℚ�=*_ˆšgî�• ô .ùÅ«ú– ˜wbe‡ê™ßI:·|ï9gW/ïßqØA„�vù`Ϲ𤢀ìï ¢Öj›;Ý?V!˜û„ºfþH ðGÎô8…ä@åØ{æþ òØ:έº#¶œ¨|۞ɾ¯ÕLê:iÿ@í;ôMŽ=î¬d̘IÉþÓ,­ÂvÚé€dôè Ù1ˆ’íãF�šÈ_ê!Á¡3|øÈd¹UüýÐcµ ‚¦O¿¸pÿæ›Wæ@V4cˆï>òÈãœgÕ AÇÜ>ôýã¬Å…yC½z Ås¾ ¶€Ëêúä±-Þ ÜƒŒÃGrHÎáúq vPs€ =( < '|ó~{dÆ�CÖí3_¢c&�ÙCÈà'ä êàtþ Zà#q.€ïý°‡sHÕü u€´xóÏýAMè“M‘ÚU×±r»ª£*ÛeœÉ¸MÕ¨²^5;ÚÅ ì!!'ñ¹rÿhç�ŠpÜî‰cs\Èì‘G�­©3ä¦å¢œ¡Æ ¨…ÊŠFUGÐ&ÒýèR’QSI=â3W\qm¬}0Ç“’ÍUôÂþì²ý/=½èòoïOPmá”,üñA€{¦`íQ»/§ëÇÛâ Qî!ÏêZŒèjùæ‘rúHÑ™Ö݈¬€H»üZè� Ä*@5£Ò£®<¢r»ÚêÌ@qǺ ÚŒ¾þ ~z«<0ÈÎÒ°Çáà£Ý=pe�?=�ªå?¢½T]r ƒ¬r8BÈõ¬ÄôQ‚ëG„ºÔ4²QöÆýc�?±ˆÔR ®“¸iF´ï_†µbÐò‡?¼H³hô|›wÞy7¹á†åêî믿Ásp.¾x‘ªßtÓŠ†:;a(çA/¼ðRòé§Ÿ&˜kóÉ×¾vó:aÊÂEK“W_ýsòÙgŸ>îí·ßI¾þõe ¤Œðç™4i†ú8‚üØüãŸøc¬žxâ§ÉÁ‡œÐ2âÏC÷ùûÞo¿áë €^|ñ•õ@^8�áÏ]wÝ‹¯yjÅŠ;ùóO™2sÓm7íJ5 Ç-À›_�h5™Ïàø‘(’:rì]ð‡å>ÞöpÞÙ?Øçl7ßåøñµ�cqpÿh0$5Ô=® �0ÈéúA.Žÿ ~ öÐ\G×�Ê�°ÐGGÌøÁ^·„sÏýai×�̓ð‡áÌ™3¿\±}õ�~j3Îù™X¾ku@~¤Ü>¦¡í›³à@V|Ç@•;UëƒA�u1 ’¨ P­Š­­6e{7¾@Ð&òºèN9矟Mꟹ¸âŠkcø n+ÒWII+¡ú§—»ä8å2óYôØ;"܃àò±Î ÔY=™Z¿ù€�_ÆÄ’:rì}àcÝ@Þvp˜ý#pGrãü±`H;°—ÖoÖõcrÌ"qîsÿ´óõƒ*vª;?ÇÏNué‘‹Ž(ºìN~–:~$.ì‘‹ãÐ’º?¢u¶…ó»~< ¸}°÷€ÞCîšmgÁœA>ˆs Uá€rä€<™\@-Ùn÷ÛnfUtíÕ\ˆ�Ê�7ÞV€4}ô¯äÙgÇó9 úÅ/~£>FæÝ4U_¶lUC�ÛŽÝ÷ÿÙ;(©ª«û3ö`þ‰3Î ˆÌ“€‚ŠL*Š‚ŠŠ¨€(â@wC7ÓSPDÔˆ8ሢ£§h *5Ñ8f2&1&q6~ÆhòÅ�ègýOíuûíuκ—÷ºénPï]k¯{Ϲ¯^W½®ÆòýjŸsßC)8yë­w’Ÿýìy7ï§¹•+ït�£¶Ù¶{òÀ?Rð©ø¸—_þ¥“ÿ-æ°ÿ·¿}ŒõYgÕXˆ•>öí·ßMžþ¥äÑGŸDOžÚü›o¾�Òl�€àt’ãùë€vܱ¯À²u8– -Ÿ_|Œ€4ÄM#þå÷�Ÿ?樓¿¶ Uθ˜ �ºx{`�9XsÆš1Ë¿yzþðÃ5÷(Ü¡KˆÇäwÿØýì²oúpÍÇÉÚ |¸–YÄЇ ¹ÔlAP† ÷¸ALØCXdÁ�×Ї"²9 }Üü €ÒÝ?aÄ\þØÀÇôûìp9Š0ˆn+î‹=oÐFEEEEô5ëÔST%Jrê0Ñ·âÕ‹#Ž86ÅÔZ‰‰fGèãWÙÎ5g¶œtÓ�A¾òoö˜ž>œ!€tìrD…JÁ)ù`�‚<˜¹f>»ïD¨Þ·NÙ'Ü ÷ÿaÞöû±ÇZðõ÷x„5¯Zѳ´óüã‹eÜrºÇæ”ôZ0¦X&Î�z¸‹ðGåQªÅ}O¿ŸìÉî†>ˆ9ç+ÿÆ5aPQè“:}Xö�º…9öþáaC¸ãée�Ÿ\k5f ¸n¿ÚX½… ͘1/…«W?X,§úÚLš|nrôÑ§Ô }ùå—ÅN�!CŽªÝ@¹ï¾‡±÷ÙgŸÁ±ƒ=§«®º1}ü�7Þ¦€‹½:}\’\Ü8ˆ?N'y ÝS™ˆ�9r|ê"zýõ7ø; Š¿ËE‹./þ`n¹eâyó/RÇ�7 }…î¾û¾dÕ�«Ñ/h·Ý`/¤Q‡ŸÌ�·¨è°‚³èþûNVÞöýäŠe×%mÚöH?üDü,9oZ~néÒåÈÉÎqàAG#¾à‚Ëð:mÉ>Ùƒzö¤ËMz¥y9ï'¹†x¯ÈûS•½+æo»í.¼~q¡!×X ~ƒ|¸§ÖFt0;¸Ã¤�cëú�ud?…;ìðÃXCÄél PÜQqn-4!B[Î8(ÕÿÇ‚Ÿ<½�–ÃL¹|† ø±åß ‚þpÖ"b J;‚¬ ȼ1Ásˆ3UÒµj)á6!'ø™#¥á†µ>kkžI>2kàC0¤òÖéãß«ÁžHAæ¸Vn ‚ΡcÊçú!ìQ*× �ö©J+æ=¨eiçÅ´QQQQ} ï™–‰†‰æ‰’ªõµŒW/Ž8âØTþ!ë(:;Bžœ}\ö9ïäæ³W 0n ˆPˆ`bl¡c' }Œ¼Àsh/Üâ¼ý|Ð1çºA!º‚ ä¸öôýɆ;Œ3EdJÀù�Ó…«º–ìwáèò­+jrƒÂsOjqö�½l”�ç:€‚kˆ( òiĘ9ÎV9�OØùCÀã…Aœí:…>„@\s_Á º}€(Uê�`H9�Œtžî¬™×9Ì¢Æp•lÑ9Ùïÿk’Þ Kvº oP[Õ-@[�é†\Hr.œs§ùûm ¢[ã�wÞÃÞƒ>’qžÜzòÉg�³�SY9_Á&8{2žË³Ï>oP^Áý#�ôh,dË·­Y³Ö €>ÿüóäá‡UzöÙ’O>ý´¸�òwO<ñtÒ±ÓàÜ?óî{îx±˜–Â¥êêiÞ9uÒrq{ï½bϹˮýˆx>%=9/ Sè˜cŽ™ŒsIÉ>ÄwÜq�ý9(ÍçŽW`ðØã¦ 'Î/OˆExnî컼\KÌx ¸jLÔÒ2pfm�?ìícb+ä {èÁZrnmÝ@áÒoú¸<ãÆè´Ð³Ö Gå‚{�EàÃ\†ëÇ* zÔâÚÊî›2ot1öƒˆ{�^@P¸?œ¹VBž®oÙ·VûÏl[ÞfÆ›åý’Î63ƵîUÕ@Ç@Ÿõº~�«Ælúü8…KÀYçbÎã°ëGÄ8¨*5Ö˜µuQ,ïföäXº|�Úà' ¨¨¨¨€¾!÷O·�%95]Ô!^¹8âˆccþÃÕVtR;u—�Ù%�mvÉ}}èü!ÄQ’}‚�¬ã‡9o� Èãü õ²9‚¬ã‡±U¸üáŽÎÙ¹›š�ãÇ©;ã� ( ƒ¼À‡ÜñÁ%w\«Ñß=¨¼ÝÌsrƒŸfMkyì²AúP€<œE„>9EØC±ï××^…!P~ð™\~D…aÅ<f'‚Æ€8î8:~dMgb:€ÚËÍÖùcûþ`ÏôûÉ*ס1@›螺uz¾uàNC¨ç›Cqν0¸!`€äQê­ÿC ÁÝÓyŸ!A‡ËGý ljC$Í @HÁG·nC‘óé”Sή/‚ãÅõjlx#�ò ,¡ÏÑÒ+®K:ì5(·ëè´©•pÕ‚�ªª¹#Ž8‰½�ø9㌪dç�û¡\�"ä幩sÊÏTr0×â�aÇÀ‰SQ1ù›oþŽÝ·ëA4—^z5ò7ܰ²CΩƒ÷‹ìÁE$±ÒqãO«ý9ÊtÎ9s�¿ë.¸•’{îy ¹ä’«à.G�ìCçŸIÑ1„ç²x1 A(ù×€ˆý(ŸðYŒ5¥òÊõ#bLĵ=„CŒÝš¢h[Æ?Føä?>àc÷3Dècò¥€Ç–‚#ô! 9|çK¼Aüpö¶P1a�Ï„±× *ǵž½}€x’ÙöùqÇ1;€ZU³eY»ŠåËY5ùÜÙ3N-Ý«r@Ÿ&Y„ ‡k¯(#¦Cˆk]Î':‚,âs G!�–…;AÈsvp'”'âKÀEEEEEô ºŸº§èLQ’S'ˆ¶‰W.Ž8âhʨ6*šaΆIAE«1WŽðôù!bN9|²`�…B'ç äaÌ5òød¬Uy8‡�?ÝllKÄù€{QŒ y¸&¢B. ƒ�¨S®ëW¶ÛìɹßÛVÎl}ÐÅ#¤Ïá�O—ú‚[θ{ @AOÞ2p„>ŒÙ ¢ˆ3Åòp=Æ Dèî÷ŽÕ´Ùîû6*ÚýšA €V¬¸ùßüæ5Ä €Ðq@èÍ'Î*:q¤œXžçø�Ùž:ð¸^x¹±Ü<|=9H6yÊŒTSO¯JæÌ½0¹üòkážZ·n]Ú?iðà#óþ\”Ys@Ä�:yî½÷‡È×Ô,DÎ †,Ђ¼€[N-,|T^JÞ!ϲsÔ5×Ü„=–àS×{ì Åë%yè{ß»;ÙcÏ� z-_~ ö®¿þVŽä¸ôqÆÛð ªÁÅ>VÈ[÷�E¬ÀŽv!G¹��@Ö dgB!Ó÷§ÎÊpûØ<ŽÐÇžì>@tò8 1g�O°ä›’ä¢(**** oнÕ¢~¢jQ’CóEÃEeñêÅGMñ�Ó¬oVe»Í9½Å7@ä…;þ<�=XÛ˜yîeô ÷úaž0Ç›³eà\¬Äœé÷“í² h !�íõÃuXò@„;ü`¶ý~šÏ¾­gé¾É±r£`^Î sK»�7®ÙÜ•ªÏ�qþˆì:úؘ€‡û¶×��!Ætü`Í9 y˜ã:[ P/ s¶î¿X7„¼-GØ£��…>ö  Ì„)àÙaNäB’sáœÛMêÓ híÚ§‘ôÑ'ýîw¯#é¹ç^Äqßÿþ½iîñµO!÷£=–ùó?ùäS €l�€„gžyÅõã�š ½û.Jë¡4Yþ@T¯ÞÓ÷ßÿǾüò/‘Ë£ñÇOô§ŒÊ˵JË£�:éœä„NO% {¢´ÿΘ£NNs£GO°?§èðÁž¸È�‘÷òâÔ²�H’=¸�˜× G˜Êð8gž[vÕ̾À½J_|. €Úz)w��Ué7ŠÀÇÍN„CÓ €,râ°G� @Ù·‹¸6eà̱Èåé Ä5ãú!B;{ʾQ¦´g®¹î ”Õ ˆðGà€#ˆ�ÇyÎ�Ù'øÁ¬×Ö娽 б. ;CÊùㄜ•v¬ì Nž)9Ë6W—µ¯Üüèê-x‚-äˆîŸü. »Ïþ?¡’p„>a„™bÎö:I—�³%á ‚! ø11…RpéŒ\@QQQQ}ÿdŸäÔLQ/Q‹xõâˆ#ކþiÑ´kAóK»�bóóîêO÷�YøÃØ æ øá¬×€5&¶ÎŸìpA™eà( ‚z”ˆ3{AĘÀdz†té7 ˆ9΋¤ÏÏàŇГ'7-Û}ö)-¦^×—ÎÌXsö¬ R{YPhg䇔#H;€{ט�ü¥áò÷þáž·Ä[þ¤1t+¡O@Dȃ™"ð±Â>K¾Ñ dÀ׌e;€r•ƒc ¸†UçG¬ÉÒž·HÐ+äzÌ·»wkôÊ+¿B° Ы¯þ®Î襗~�œô”Éüù}ô±ÁéñÛßþ^Áž>ø+à’¸GpšÁy#¥ìð˜Ë.»:7²:ûìÙ8V„ÞIYdzdûþ8±�O†ª¨ãŵƒØ(='Ÿ|–*gΓjË­º¥½yŽ3‘{ôÌžs¡Ê‹k ùY³Î÷•Ä^†ð>i`DØ#bÌà†Ð±Ýóº�v˜wεƾZÓÝ16ÐÇΔ턘žü„aPÝÊ¿-¤è öÿᚥà8‹€GA#ŠŽÆöð½*Ç™nÌÑåCáxž��yTì�?”éýƒy]ö {­ûÎÜAz÷“ósÚ<é tx«f¶I¡�Ìtýhàcc ~tß«êPŽ '€,âš(ƒ ÄÌàCØÃµêdÝ?ˆ²9¿(:€¢¢¢¢"Š#½ïº�h¢(É©ÓE»Ä+Gq4Xƒ²hšNåÛTÖ” ^2¦Ù¥÷†Ü@ÔRÂ/²%ßlÌÙöýalr”ìЄ8Í«5÷¹—€³Ð‡’˜"èñ;��³à‡sv? k–k5vÙàòíg�•ûwÛ~æÙ­Æ\>8…9r½&ô±%à â¾=ú@A D×�‰Rî-î‡\@<ù?Ù. ÆTGбÉYðõ‚AÆõÃ<ÁÐù øXdÁ�Ž÷Ll�A@ƒírá€F@ýþ52i½Yç@rCù§žúÙF@kÖ¬Eî§?ý9â€a>ÿüóÄ >}F$~ø?ÈÿêW¯¢œšék„~0M€àFq��Û¦ž½lÜyðz�ÏÐÂ…—z,Yr¥Ê×öùY|ñÉÈ‘ãCJËÆÝtóí8¾²r¾ýèä+¯6êÐã}åç ¾ýF¥{ò»òõgÂÞ¤É禹6m{ '"Ó×{Òh½¯©c§Á €,øi§cÌVm=±È8}(ä èa,û?A�·ˆ³]ö öˆqî2pŒóh¡9ùœ?¾Aµ�=€ „4èñç¸6b�·Ï˜Î‚ ¯ («ÿá×süøá�?-GVoS¾ÝŒâæ™›¯GçŒJºTîУ€O ¦ãÇ»veà8ø„?œeßeà˜'ì JAÄœ•³‡3DÄYÉÀ <ÖSN¹~ èŠŠŠŠŠ(Žf¼ÛQÄ~ÒÙ'Ú2^¹8∣>ÿà”ŠÍ‹PfãHÀ¹­Ž½ú€Ü:…;zÍ™kï<†ÈÊ È‚®uκ�¸·ÒN k[ê�Pˆ1f•ó—�S1Aìósæ�}Ëöœ{r ^uÉ E‡5»ðÂ'ÄN €ó‡q¦,ô™Þ?r\[±Ð&¦ó‡sôÉpeA ~¸Ö¹€ãG9‚ҘЇåÝC„BŒU¯®mžsø0fžjø@ÔôhÔñþ!8C k—¯@þOúKÓ öÇ!bïFþ7þ×ÓãÆÛhéÒåÈ B¿ä�n¿½{Ϥ¥×_Ηú ý†cEtÀdèê«oòöù¹ùæï!/¯qd“’k8þ¤“ÎtyjÈ�£°'RpEJ»!wÇ÷¸uôѧ¤%èxM蘒=H ’zýµùn݆º<5wÞ"ì]yå ˆ›B@„=VaIJÐç,ûªÔóp÷0§ �ì„�>aðpVbž`'ò¹€vLLÀÃÄÜ ¼ ‚rJA7+)Èü-§Ü=ë` 0ðá:$:}2öŒÛGÅ'ÌÞ¢l‡Š~ªrºðÏ(ݳ²sêô ûtý(ÈÃ÷<ùó¾×£´Çùc‹ý{rÖ�ŸWÚ%9®yÍ­=j]C@ þø`�uÕ ú(™Þ?Ì qß_ò-àüá 1&äñ¯BªÄã¬Òo{ÿ`�ÂZÍ,Ç!rœ¹Ç5å�>ܬ•ÜÔ¡qJÀQ{,Ô ¨ï'#’ÍvÝ·¡ÊwIš8qúÆ@p븲ip©‹Rn>$}Œ�ûÉO~|ìk¯ý¾‘A†s2Á¥tÄ'!__4oþEéÏV%ÕÂ|1Nè’K®Bþ‚ .«J’‹í>ú븾<èûãò8·îãCM=½ {wÞùƒõ–rëÒåÀ4?vì©È=ôÐïµ?mj%öå=Ѥ(ÔóÇ–€ƒ«^@œ±¦tŸŸ6žÒpÖÄyºrQŒ•KH¢p •Ëáú A LÄ’oÁòoVô öµ†˜w�ÇŠàÇÄáþ?œ�Ti7ON"ŠŽ åøÁš²{êÖaðƒµ-Wº{eùœ6-'ø©PÔ¯ŒÒRo”)ÿÀÃØB¡ ðƒ}ëR±qÙµ>Ù($|T9¸ª`é7î3Ѥrò¤Ç AD üm ¨õ·;6߯{¡ýô~…=Wì_è°ò€Âög÷+l1¨{¡dóÎ8fS‘¸\ ‡ ;¦0tè¸xc;ªÎ’/ÃäóvA¾œ¯G@qlº÷h¿-:R”äT…¨«¨y¼zqÄGè–�E§Eè²é©|«Šy¥=Žo¶ðî¾t±ü›ã0àáÚSb^A¬éô¡ Øalò˜õqõpý8±A÷TŽ0ˆsVÉ7›[üýn­Y2¢¼MeUnp·kÍ”–“–÷'ðñ»~Té7б*—íò•|ó9€BÎ Š®î{ú)Ñ„uNm ø©]3¶ð‡Ð‡9·V%Þ\Ì}ÌÌy¤�O�Àö­ˆq8€¨Ò­öIzþeXƒ í&õÁy7Q?ÿù‹Øûýï_OöÞ{ÿ�€ Ç{ùýë³düñS]žš>½:ù÷¿ÿí@xmÎDX K£a¿á{ï¼÷Þûé±â¸A¾¾hĈã’O>ýǾùæÛ-àæ‡?ü±·dš\+äï½÷‡p)q�åÖäfW¯XqGêæÁÏfù7¼6WzM�ã†V*hdúaOúM©ó‰Ã(í ô ØgLyÝ@ÕA7PؤA�ø@nO�î3ï‰Mé7Æ2Cá~?¡Ï¦TnóÝ û>{p¡ÿGäsŒWý¿UèúÒÁ…-îQ¯ŸqðÁc òßK¨! �ü÷²Pòyñ×]k×>�k§ôɧ…?ÿùͳÏ>_X½úÁÂÒ+®+ÈOs�Oz:âVï¿ÿAA¾ˆƒsÊgŒ‚¸‰s?ÇAƒF§ç‘/d/ŸŠÏ’Ïq™ÇKiÚôüòÙ¹újåmßÇûçÅ_‰`$ 86ýûµ;ˆ&‰’|±;Ä+Gq`¸H6�� eÓWy›ªY­‡]6�Çôr9?âš"èÉ'B®9[øCê0fŽbN¯ �˜c ëþaìÀÅœž¹nyÂÕƒÊvªž–ûw´]Ռև^v0\Cú„@] "Ôážvÿ W¿pß3%ß ®Þ0o�@·g9€(wBΠœ%ß( ~ÔZÅZÈY×�×B€=˜!]þM—Š#àAŽ¥ÞÜc²ûýP7PÓ j«ƒ{4êô�”~+íÔÐ=RþóŸÿbÿ½÷>@þÁƒ�Lä¶“E‹.OäÆ@rß}70zÞ €L¤å‹/¾HÖ<úœ+×\sSÑÙ‡�+y¾ÿI,ª®^�Âéõƒ×°ÛîÐ'æñµO+ðhÝ eË®Oä&HQxN÷ßÿp"7:’>ø+ö] ;”£C™³0ȪªJ”Š×óúëoE$ç†Âk=zB®ç*ôì9,±î¤»ï¹{pŠðÀ¨{�Cà’ß^«Ç•ƒò|Òë.žUw®FÎãôA)6É£ÔžÜ�KŽ=n z}g‹}“cŽ™œ>îÄÏHzõŽnâîIÏ)7MÔùäzd–x»bÙu)X’Ÿ�%ï#¸‡Há±�á ¨�?meæÚÀ®«µÞƒ{èÒý~ BŸ\°‡NŸmMN;~ìÚªþ½€èôaìݧ²@Ê ”³ìÁ‘‚<œ=ˆûéž-÷ÆØ®mNõõñ8�Ì>@žþ?>�ÕnέWoWÞߌ�Ÿ¯,­ûTµ'äaoÄ�;ê8Ͼvþè=�Œû'ìú± È­ÍìqûèØ–ãì@Ž�‘ƒy¸DäÖŒ¹V¢¨É?»,PØïÿyrk·+J¶¨›#HþûT¨ò剀ê¨çŸ©�gÈç’‚¸­WÖw>ùBQ!ïxüñŸä3B®çùöÛïâ1òßûÌc¯»î–ôgüò—¿É<^>ïâXù<\Øe×þÕ[¼þ+WÞY�Ïeˆë+ù ‡óÈ—…"Š£±+6uu.Ÿ$§Ž};^½8âøfÿãÑZ4D4'•¯–Êv¬>«åIËVÀÇ”€Ë¯{• Hf® üÑŽ ®1kù]?ó™=~ò`&üQeߌû'Ôï', æ+ú”vœRy^ð³uÅì’þÑì‚;º5#ðñʳ†‚½~…8+Èãf%ãú�,ä± ïYÈãBTRry­�Û‡9¿T™8'¬ÙÛ‡9Ä;CXÄ™ˆ9 }èþÉpý4¢àÜéû�õ@„?eÛÃ}ÒpˆB©2q™àŸþð‡?6.¢žzêgØ7ÚfÛîɺuë€èöÀ>�G¶t-ß…£¤ž(KV<ð£dß®ñña”Cxž€(ê®!Ÿ I`ŽqÇ¥k�YEÈ£ÜDºÜ>%¹Ô$°P�ÿÈ1Íñpõ`Ožòü™5‹/õ%@6ã(²Ààd^×Ó¦Íl*¸c�O@Ø´‘5eûþ0¶y~ðp¦˜_DX¤�ûù¸¼éñC8Äuø±k w(æs ÞX»}˜£ŠòôÿÉ.ÿf×:Ö!D‡ÖtþPtù0V 'Pú�ðsF_  ̢4µS³UYûŠƒäsZM>7ýŒSK:UîézQ?FtúÈLú0ö¸~ ü ‚Æ�Òo’à Ñå“€ �Ó3!×Öõc�.Ç5sìļuüØ>@8~ã owïVèöë¡^ÀÓóíC Û×Úñ¼>Þcz¼~ÊÅm$‘|Q7±¿IH¾,S�Ï`Pß~£pó^þ;_X¾ü–‚|I¯±|¶*Èç½L$_î(È—2 öÛ÷.zØ )m[gqáÕW_KÏ'Ÿr=Où̈ãeû›ß¼¦ž¯|1ù�ž~úÙ‚ \ ‰#ª¿ð»–Ï`]cuÀ |Iç‘ÏŠÅÑ÷rKD‰Ðš ‡f»~B­âÕ‹#ŽoÞ?]DçF˜òÕVYÇù§¶¨¼m?[ÎÆëƒ?øxÄ=º|2úþpæšnµ¦˜'ôÑ"è��#ðQ® ‡\Žû¡rp ïì^Ò÷‚#¥ìÞìœeDæ—všwbóÊ[zÁõ†>�Š bŽàgCzÑíc×BêpmJÀa�ÙB ÆTÕ«/�*ófÖ>Ð,gE$9Æ„Øγ/Pöj\}k�}“}ž80±p§ÿÿ�LúîôÅHµ×÷Ó€G¹�?a—à„¸a‚Çì¸c_Ü€—ow‰HÜ-¿Ln¼ñ6Õè_„ùr>ô‚1eÆ�¿úꛇ$®7kÖù*oa‚À”ÿšŸ,†#É�žÔ3å´ [ò Ç>÷Ü‹É[o½SQ€ gž9 ûâÂÏýîw¯Aœ-@<Æ¥Ô®ºêÆdÆŒy/¦òœîœ#pÎk—¯€3†®ŸÜB'öÙ 8»¤|\3rƒ+©©Yˆkã+)'µìᢑkW�\c¸•ÊÀ=f¯ÿ„ ÓŠÇÂm$×G¹Šä¥ûRÏÅõòÁùŽš:Ÿ\[äYÎ.Ø{ ïmqürÊ�;¼wäVcõ ÃÆ�¾?Ö¦ärŒ/‚ܺ�B¶×�q!Ï}ãR=~3—áöáž…=vMÀSÇRoNÈ;Ù@Œy¸'±A2kÄ9gé7Î>Ç×^ç÷Âý~8›Á$kŠ°Ç¯ÉAèãŽ?eÎæe»Tô–þ=çæìós¶ߣÙɳ7W€'}llKÂ!Î(ýB�˼q_r÷!w³ü¤`÷0«5¥¡�í÷“ ‡1Ö�zLf ¸¦@¥ÛìSèù氠çLJä /Ð6c»�ëýáðBYû.õ@±U=�|iqHò%Üj‡|¶Z/’ÏoÌÉ狺ˆÓ¹ _á~@Ò·²àÆzËÇuÞgÜJ_~ùeA>Ïâø™3Ï /ŸM RzÇ]¼dY@¨ý8"@ò¥¨zŸGœìéy¤Oh@q4å}Ý-EãDIN�-ê¯\q|3þ�h/:%“¯U 9%ý.<¦ÙâÕ}l¸ìÒo6Oy�=ÈQ<Î{�g–Þ÷¹~l�9î©x …½PÙ7 �˵uéÐò¶U3r¸�ªOoyâÕÔéJIÌBL„=ú0geËÁAYð‡³q ÑDqO ëü±³@Ùeà¨lèãWyŽq@kx ¢Xê�0ˆ9Û ˆ!h!PAŒmù7«ä¦µåàèj•uJÚŸÕ/éõöúûõûldÒñ�!Éf»í[|\”.s–:dÆur¼&TRY9H¾­¯Õ8ÈB樀È[â�àkc†4¢û‡ëÅA¤¡O¸Ö:Î- ƒ²DÐcãìp„=€:Œ!_é7O. qM1GÇgHíQØó� æ%ßXî-(Uò 20kÎpíÈ\Ò©j/qòLÉù�jq n~tÍ)À¸„Ù+]â-|lì`N暪Î1Û~?„@Êĵ� z<`'„ˆ³( {&™òo˜ÃŽ �€ö¸aœú jï»7 ’/+öpX¡Ã^ƒ7„ä‹pÍȹçÜ1â¸ñïg¿Ü`8ðp¸%Ñ•!®pÿñÇ/të64/²BožÚqôѧäúÙŸ~ú/_$ '_*Ȭ’²ºXKÄàñ“§Ì(¸�^@ë�VxßÈœ ‰kJår¡|žüÎ]%_æ´8¯U=$_„J�@º€âØ÷yw�.Jrj¢¨m¼rqÄñõüáÿ‰FG`ò5{ÏTµuù¨0"ô±9[ò8€Ü^=Ü?„=œ¹¸}T98“÷öüaœUö�{èósêò�e»ÖL­C/¦ÊÖÃ.Öì"B­° ÈÍ÷ Ûëb ™uåàŽ›µ(\òÍÆ�)W_f·Î(ýÖ‘qÞ~@<sv" "ì±òîp Ùãô0GöxA­ûÌÚAz÷›ósÚ¼ò¶3ouà¬6i¹77¸#3Å}O @ßÊ–}³ ˆŽŸ Œ#ˆÊ(ù*õÆc yüªÊÕȸ€C þ¨rp„=X[q_ÔThëQ=n6QmÆ÷Þ@DXrÁ—~ýëߤW_Á Yÿ³ðÈ#�ãµÇž:éœÂ»ï¾Wxã�?ûJ‹aO€nJK)4”3ûïÿ‹ó}öÙg)s P°X„2hJÒÇ}ôÑß RÆNq7ãgxz×à¼âv-üéO)H_CU欘‡.^k£ Þ˜ÇÏ+Ž5kÖÖ�7©àFî/�=ödV©6”²“�ë$nr¬?üðx]ü¥åð¼=ûpI)åZ—®ûoûû‚|]’÷Á )�zùå_¦¿/),ÏÿåÂøã§~½àÁ �\Äõ•¸Ã‹çÁïGâ€âØX÷|[ˆz‰fŠ’š/:T´Y¼zqÄñõøG ¥h ¨&B’o†Êv®™ÖrÒ ƒs8€ Æð¸X—  »çsû0oÅüúJÁ‰0smʼ áOóê[{•vIŽ/–qËí¶ê½ðèfçßѽœC"ëö¡˜»~,²àÇy�£c',º8ÛÒo”í ÄÒoyËÀe•‚³°Ç*ÃñC™œ-ÿÆ|¨œ=ìýC)×�vþxJ½q½@� Ì^(DÇå�ƒ=€â�íM],1&ÿC $7Fâ51ç�8�âõhlDÐÓŽà‡y[þMr˜ ~[çsÜ·@âG»~˜GlA�“)×O~àƒã‚{îŸ@Ž 9v$ϵvüØœîóÃòoP~G�…?”Ë1ïïd¡PüqÂ>…=î›>?Œ)Æ\3×rdͶåÛUŒ,ÏYã^ Ñ %Ý«v¶}~â`�]úíT?²ÈŠ{©WúqáfïÚ*TêMÇÙ ¨ RÎÕ#È8} ®!½�™½€šµþvçB¯w†58êóÑ”•Û§ÏO<�ýÚFÿüãŸkj‡”BM�—r¶îFÿ¿í¹jdË¡©>6ï¼ó^Q(=æÀJX™ÇÃaòÚkH'Ž8Uäx*>BÏ�âøàƒC½j4ú�ýóŸß”ˆãüó/iD¡o�{Ýõ@ò<Óë,eˆ‘Ëz¹²qè5ãs ý㸖) èã~gèAä;§+˜g;RR7½®ï¿ÿAá•W~…ß‘ ”˜»éæÛƒè™gž+ÜvÛ]é{NÊãza¸×ÀÞ6_I™a€›¥K—#®¯¤_Îsíµ7GǦp¸L4Üž$‡ªEýD-âÕ‹#ޝîþÞ¢³"ùF‰}iºœ7±ùì;ú§�]s6åß�à ðãëûÃ\`ßçø� òº|\bŽûôpí�?¡ÒoÝÕ½dà¢ÑåÛTTçkæNlqÖ�}ôüñ»~$oÀNüK¼Ù<ļu A~øCqÏæ5øñ€!ŸÈBÎPîØØ‰1×^YøCuÔbÎ vB ì1¦óÇ@!B x(»!ö¸}ò* ¯†äO"ßêLË¿�sΜx]Œä[’@òMÚx= u�”Ñû‡³V[#Û HDèØBL±Ü"ÎÈù>6.Ç|ÝûÿØ8|¼ÎŸ0ò‹Ç†ËÃAtÙÙ@ž,¤×Av�ˆs Â0³rþä(wšqn~œ-Ëv¨X¾e¾o±JY¸3J÷¬ì ‘výaOöšN!%Îú¸9äø ïUgˆ=€¢ë'(ä ®½"à!üÁÚ”zÚ®ÊöRÈÀª)ÐæýsQ[ ïYoDGn¸Ã$Î�ô¿ô2,H/<À„ü7ôm¤™êGS,eöɧŸâé…g]HµåÓ)äËȹ=”"ûä<6€àºå–U…ƒk¯JŽ97Jo5&§1#À‹×.ñ:2ì˜Â_ÿú!Ž[±â䳘—º�¦O¯vyJz!¦°Æ][¼®â¸æš›¼ýjÜ(:›ÔžŸB:é[¨öæÌ½ï�â�ÞŽ>„çé®+®‘{íø9O=õ³ôw,¥�±—W£=ï�I“ÏE,nx¸‰.¼®é騮µ”�ƒ‹Iz#Ž8â¤ÐyQNPzs¤÷gaåÊ;q˜CŸð: ¯ È�ò‰|³5‘o¶&ûÛÇ)ø‘o\&ò�Ëx�<î(ùŸådÙ²ë“AƒFÇkÒ¸¨�ˆ }\ÞÀŸpù7O/ ÎÈú©2p¦Äò”uüXðcc®½Ê �¨\0(…@Œ w8sͲpðx@v‚?ZBg��…=jMø£bj¾×d�?ªÜóªPé•û ø93Ïg49®²l§ŠþÍNšS?�qþPÌ3Î�íûÃÙˆàg½`Èãbìqû@ŒU 8Îö˜·ˆkc&ðQk=ë5¡�vüPÌsM§�q1/¨´ó�ûhû3û6ÚqÎ~õ@¯¥p“|¦K!Ú­·®ªkÉ:”S+Ž{ïý¡Ý€(ŽÕ«T%ÜŠã)ãf�¿ôҫݵþ«z�÷’– ”²zÈ’È€Ì 7PÖ�{Ô.»öÇï—ÇÔÝa#ðpçî»ïCìð&¯0åÊ+opyÊç„:t®™ìËûÂZœ^!h„óÈçužÛïqº½�»êª]Ž:ö¸)µ=ƒÔï@ÜSÈ |S@KJï¹ç§$¯9 8šêþpÑtQ’SãE[Ç+G›öv¹h¤h~„Q�“�ŠVc– gY8�Òð'ƒ2AÎåCy?ˆCR"àA~ fÂ"‰ ƒÔs‹3nì_¶ÇœI¹¯Ù¶•3[xñ¨f‹¿ç×Êý£ÖÜ 8~˜³Ð‡³ÊCz�9¤ ð±3{ÿ( D؃µ>„=„AP&ø±€'»�íé#2{”uù•BÆ\S œ}‡ Ó 1× Ñ(û¹¸Å  mbúñ�×:àCIíôD¾1™È œx�¢6•@V@ü0‡˜"ô¡.¶nî¹~?�†<ì1qí)gÜ>Ìå>Pƾí.ÿF)7O Æ"à±Î®³ú1Ÿƒ¼Ž +O_ ξ¢r!õ[7çÛûƒë €ž{îEä_z鈅oÚÓâÜ1Ê• Ïyéÿ‚8 ôŽ©jÓ¶GÚgFœ0�€HÜ€óÄ 7íÅÍÂÇæÔÒ+®Ãã¥O’ÝC9<Øàˆ7$kïûã?xP寿þVä¥T`P¾ÔŽ=öè@p„¹¼Ü6Åñ÷¿‚8¯Ä±†k'ð ÐdÕªÕp‰ƒ yz* A ;YÃ1sóÍßÞý} ,Äyd×¶c§Áù"Qúsä©kÎ nÙƒÄÁ�8áð¾py”àsÇÁrç�·Ä¾Ó3¶ºçtÌ1“kóx�RÀŠC �WÀòò¼"Š£©[ƒôUçí§(:DT¯^qlz;úˆfFص>•í>gj‹3nÞ?äü!øác'B ¹pÿµVbÎÊ_Ò%à ælÙ·æsoïYÚýücå[¢ór~›t^i·ó�i6ïöiÙ8UöMÄœß Äž?6ÆÚÊB ÐšÒî lú0¦ )¼Oàcg(|r { ÷,ÂZår‚. ½ÆŒ5��Ë#&ä¡\^Á‰‘g98æ ƒ¸ïïûÓ�k ‚¢hÓ””6I¤ 3$ÿóœôê=<‘ºîñÚDm:ˆ°ÇJC×û‡ùÅö”lO מ½‹(U ³êÿÃ9SAá>@ˆëåúaÎæ‚®È ‚´¨Q î ÎÙ’oÌÙ@Xû\>P¤ûýÐåÃd¡A��!§GÍÞº¬}ÅÁâæ™�¯¬ñŒSK:Wí �Cø³¹<.o�>ùe{…{aÉB ( yT*gœ=\CÈeĶÿ�˰ã?„<þp0‡{"º~ÔìSS–€ëýáðF@ý×�,´*«3Bo7àPh(†8tT¸—ˆ»y�æÄ­�\†ƒ(ÔCG^zŸ¬Y³¶ år‹%Ìð|1ñ†{í7nRþ@„'€A¦$^nýå/oáqâXIs˜�[»öiK öÄé’æÎ—ØëçÅ_Isâ8Bnî¼Eöx¼/Šã¯ý0…&â!0ò;©àÚzóÍ·3uî¹s ½òʯ‡Å÷ÓE-Í:Ö”j3û(gúæØ²m(g]A÷Þ÷P�N"jùr”�ƒKGb€/h!TK”Ë¡L›{ Öö1wÝ…F(ïærX·€“ä2%.¤€âØØ÷•;‹Î%95V´E¼rqÄÑ4 ¥¢¡¢¹bD5„Ê·ŸuNËS®bÝ=�¿òºÌgÈäØ ¬ý"ÒsÚÛG•�kqΊ~e{Í=9÷kߦ¢ºdÐE£›-ºS@�púpöÁ³�|¸ô×Ü@u”†?�A>‡]=ˆ!} ‚<È—–�Ë#oÿÈ}˜³{<„?X›<áŽêéãb–{ CØ#¾ßDè#®ŸÚ8–€‹ŠŠª§(~ì öX ”–xƒ¬¸xC!¯f‚® … °ó‡!|êÜçÇîÙã,ü±1ÁÖìxÜ?Ü£ó‡3„¸®à‡kÎ�?!mŠ�ã3ûÿ„A%�ª:–o5ã´œ}~ªË¶¯Üü˜9[îøÃ¾?tþPAøcs,ë¦g+²0HA¡½~LÞ `G­ÍLÍ2kÄ  äʸ™þ?j-bN�ƒ‚në:±éJÀí²x`M–züqh €¶Û=×cöX>¨>`âË/¿D^+�€X:Ë 4ýÏëv�»ˆH�¡ÔqòØcOâ9H94u̧Ÿþ£IÐ3Ï<§úðÔ±Ñ}úà $™ /ù=Ã#åÜà¨Ù{ïý½°éý÷?Pî½÷Þ£ßý¯Dâü"B?¢,ößÿØÁ�“çÜÇ7�ãÁQîë´aßjñÅW`OœRiNJ©!'n,ÄFø²·$âÛo¿ ±•¼'±¿lÙõˆ �з‡�‰}«Rp#®å‚“œºþµ=Œ.»ìjô¸ IÞ ű)Ücn-:@4G”d Ç µŽW/Ž8ïs/Qe„Q�Q®¤ß…ãà2½~  »€0k…�ÞË)åüQŽ «z”ô^8¶|«Š99o*Ì/í’ß¼fe/:~Üì]@^øÃ=‚¬Cı. ÊöÂì�Au?‹´û'ÍöøEØ™?JY{öX”öè˜@§f:¼¢Ë1a�¬éäÑ}¬Ã'‚zLŽb¬œ?ø{EEE5œjg��?~-æÚë=¶ïOȧ>8–î;C6¦Ó3¥úÿ„AÙ² ([^çŽËSªç�É¡N¸ \v9¸-ƒ%áXþ-$öòC  –„a–�kÝoÖNåÛæ®\0¯¼íŒÃ[­n‹ÇOažËy²ž}À{u*ùFäCŒs—‚ õÿ�˜S@(ì"äa>àøalœ?˜™ÓùæüP¡rp„=Ì+À“]þ�Ž ¦*·í¸Þ�€ÚMé»=€þ‡%Û6²®ôi‘8$Ü\÷ ))†ü}÷=¬òM €x}0nºéö @è;ãʰ!Î+)/hTçœ3Žpƒë&åàÜ{À¨Ã^ŒJ�?þìÿøÇkë€ðšþ© �úþ¸Áç�!y­€ |©ó­×#=�°7kÖù¶ÿfä PЄý ¦!wñ’eˆå"6BÞôèAßÉ¡tœËy{Iߟ4/ý€�»ðÂï*×W1wÆUY×) 86¥ûÍß�%95CÔ%^¹8âhø?ÆáTD5¶ÊöžJ³%«­ã§VÌAD¸ccÈïéÿ’ƒ>œ—ÜÓ½õðKG”·©ªÌýw­9­å¤ëø(éÒoAdc:~8ìh´^÷OêXTG×O8NÁòìäÖì¤ Eȃ9úäîý“ݨc¨�Á�Çí1o\?"ä±&’8†�£òx÷=r ÑµA аg½0h±*û¦Ö=^胵ƒ=Ì#fÞWŽò›§ˆ³?õw…cÛ÷‡3d{þ¨2p8ޱrQ!ðãà�‹[–tz¸±o€n¶û¾�€¾Ó«[½ÐÏ~ö<ò¿ùÍk¸¿1ÐÝw߇œ@)ôg ô…A? º™¾øâ ä§žnn€³äO� €ºt90}~¤Ð;§>ˆ?ûeû«_½Ê|>ÎÇý÷? ÇË® HäÊÍÁ¡bKÏÙ¾4®K�å@½§_Üû!ï¹D<ÀÆ–gƒ³Æì£÷�ì©ç$¥ÝLY8ê„NOÏ7pàáÈI/ ÄcS Òð=J—zVÙã§O¯.î¡7“@=u %¯Jë]yå µ½‚"Šã«xïyGÑQ’S§ŠÚÇ+G ó8$‰¨¦Riçd¢*ç@OÈDÀê÷£c 2Äþ?&ßrâµû—í\sFn—ÓvU­ýî!8—ü@¾˜ }½€lÏ›‡�L8 zl »Ï˜ ' }\̾?×�·$A�·P6¢ò÷"è�Û¼)gA!�Ûãš3DàC�ã?œ• HǶô[ºfž1…œr šPTTT]P;@ÎëëÔVÍFiù7̈­ã'�¹Ç˜}€D„BtÉ é^@�=ÖùãâÌþ?VaØC™c•»ÇÂ;C*&ÔášsFù7½&ø± ÇÄXg‚ æ½ý~x¸äQk77?qÞVe;V ‡ùÌ\ŸÑ¶šqzé^U�•Ó‡�‡rpÇg˾ñ8 uè Êaac¿ûÇö¢ôÉ( gá�ÍòpM(Äc|N ëòa ™˜eÞ ‚ ŠXî kçò˜ xX ëÔíãrŒ½µ÷]ƒu^s`¡Ui§z £�>P„�ú±ç‰@|ž®ä—ÜÈ~̖à"Ècò"µ÷‚ˆðë4n>ë¶>¥�æO(–qËuSaëŠÙRÞnL³…wv'àÑ Á‚ †èö¡Ü¡lLø˾!Ö0(°&ì± ‡1÷˜'Ü�~òôù±à‡k*wï®-à±kÆtq†x¬?„=Œ¹æqb‚ Â!ˆ�Çöû¡¸. gá�ÎQ Š7¶£¢¢ê€‚À‡q–èÒÎ Ý󇮠TÌA¦ÏaÝ@=�8+ð³Á%ßÜLùr@¾Rp¾™åß8{A¸“Î�^àè<ÄøÐD Äu Ôc æ<3K¾©Ù@Ÿ0‚²×aÑñÃ"$’<¡P¸ôóPþPÙ(¿‚¸¶1Ác†}â¬A„?P°ìä_söŠû±\TTT={ÿd‚ :Ìz±>nOA€ë¢˜#ä!Ð!ìq±ÏÄòovm?ÜÏ� “ãžO -ÂLù?ªô›?6OøÃµsdÝ>î0æžÉYwág:~$†JºÎÜ]J¸MÌùmNY»Ša-FÏÞç B»&ò�BîÕÇdbˆë …œ>t™þ?œ¹&äÑ "бˆë ‚½}°Weó��Cåàè ÂŒœHõùÁ,òƒ –€k m{T¯@Û�Úç¬?¢Cãž{(¤7ç?S±ÜìßpÄ^,! „?ŸN%D€R�ò\Òxݺu6Ï>û|ýPöÀõ¸îº[èxÉ@°jÍšµ(™WÏ÷à‹è�”q<@[íxã�?Û}û»ÂñâÂñÎùqØùœ*Ò¿W÷žƒ0 š8qzöëäû8#£=Þîé#{xÿ„ʹ=ðÀ�¬› 0Æ�7…A®,çœòÚÔc$†óHb€¸Û™p.·‡ãä ÞpÃÊ‚-ë6räxäDpmY×�œ#Ý¿óÎÔ>gÌòØ€âø*Ý—ÞJt¬(É©³D{Ç+GuûC;5‰¨�¡gß2@9€øášÐÇïü¡˜Ëìýƒ˜ëV£—RÞnæŒÜ}~vªžÖò¤kÀy,ü »˜»8à"üÁÚöÿñùŒ¾?\s_õýQk. öôAL„˜{êXìs6kº�¬Û2q°Ô[`M¸“! �Œ:™ÙŠÐÇ„èöAŽ±È­Eª÷-‚B1ûÿpN×,ýÆ~@EEEå@]')ØS ‚8g¹~8s­z)µIcŠ€ÇÅiO  �>tûÔËõqÐÂ`NÁÊ×ȸ¬ÓÇ¡ èÃu2¥à(ÆÐG­§8؃™N VCªÛ—·©³Y^gv›c[ œµ} ~D\ö çÊÁ™=(yò;zÂΟ¼à§²1ÁŽ–ÝÃ"üAÞ8}¸§gˆ.ÄÊñ“éþ©BÞA–㾊 JK¾QÖåõ_t5�ö\±ÿ Ž÷fé· ‰ƒCÄæ÷�yæ¬Â£�>YxóÍ·þñ�]5(mÖ~ûÞ ´ÏõôÓϺµæÑ'°7å´ æ�:vœ>Ÿ@I*@)�„ܸF/–ƒ[Ü *ŽwÞyÏ>7þÅ‘ƒ’g&ЇG J LáçòÆ}¶Ä9�ÇX=ñÄÓ…•+ïÄ9Ç?Ž‹œ.žÇèÉ'Ÿ,�kW̆¾×ª«¤çHÖñp”¸ã ýB"�ÀøÃþXt [WtáµL›6Sþà|‘¯Êãå}P÷Ö[ïÀ=cÞ«yú/Á™#Â{ÌSR{,›&bé6ì\jÐuÊ)gn½uÞ‹Ò+–гB‰8ü=Ýxãmx-`ð¥ &�%È÷�”rÃß…ëA„ç%0H½Ç%‡¿ƒðE�¦ûî{¸¶$~—={‹=€âøªÞŸÞMÄ6 Ùš j¯\qäßÚzöÔ#¢6†ZµlX €0k'�Z‡za¦²J¿Yµœ|ý€²]gŸ–Û¹Ô¦ªªõðKF�éîqüx]?�ZCÿŸ½7 òó¬Òqß—i[ØÒûEOÔ?8}JŸY‚Xä†L8€N“ Üìyäö“·ÿ¿á@½ùÿyÏÉ}/Þaºêß¾ÕûèŽÿÿ7Nî=|ÇÉ­ã¯êŸ‘hÿÚ“¹lÊgÀ¡ÇÿM§Cüæ¦3ê¿wÈœ;ògìëNâÖÑéûÏBo5Ô¾×3.ºµèpÑ ‡VŠ~£h¼ýzíkß/ø.ØûÂGŒhúehóÝ_» ô×ñú·çÈ-Š ˆèé³nÓÑï¿yôúc÷Ž_0»Üs‡üÑÑ[žøÐбÜ´ {ÌùcÑò¢ÈõÓíÊ`¹Õ�‚¯~ËÀ0‡< G×¼ ø¡‡3¨ºý#n ïúP+ð!'öpåî jUîø‰ �CV¼!zöž> §Bô©-êê7êôþP[×ÔÔ´!dzüYnU¬|å÷€À‡zÊê"€ªjÜAú¦>¬w#FЇyÐCDësx<§‡€=zÐãs­{¹~€=) ª>^k üqçÏý+;Æö¼m|ÇìlÏ¿G{tô²ƒ7 Ý·l@gès4jô!QËÝŸôä©ã'q긨eå[ºú )BâþAÖï¹òMê*zέŸhEœ w�ë"`GaO77€N·¶]}ÝÉýÿó;<ºþÿx×Éí×]ÖC†þçÿh¨Ä]ššP¤€Úw¦� ñ¢_ïëw`t[ÑpûõÚ×¾à›¾îo?Õ`DÓéÖèÄÁ¥¡ß~ñ½C/üÈ\>&¹”»d\7ðAÏüÅM#oúã».ô^÷vÕÑÏøÞíö×´qèƒ:A1½ý£Ð'…?ž‘Bz¢&'@H`’Ú€pøCT)ô!ߨ µFòôþ�Ô¸~,æàq¨ÊõÖOPæx¤ö,ŠW¿e ˆ÷O‰ÍÔÔÔ´.¤ëÞ,Rçöàü) Àã‘7+ßbä¹®…Kît´Fêúé­^€‡Y }|Fz '¸Ü©k P€2'P¶.ƒ>>#:yÓ¡7Œïœý\Ï;?‡Ç.š{û¦�Ù‘;~€=÷Lô�B€P ~ìíz PÞ«\?D\>ä¢àÞëà 'èsû'Aä(r~<þM>£fÎÚ7ÏAˆ>±ûÐéרON}ìÍ'/ÿúÛN^÷¿½óäí?ÿ�Êísýÿþ®“W|ëm'§?}ëÉ­ç4GËu׿ÓVŒ•oõ¦OûëMM µïìAS¾êmÐS_(º¼ýríkŸ|»oúé�—~ý3 J4�Nmºhñ±¡ßyé=ºæÍêçbà£!ÀN?´åÃ/½süÂÃ�õý3–·¶|äë¿jn—¸~pþ °»|ȵ&gõÑÔåR讆S„¬N×½En zúDúü‘÷ë…>&òõ 0¤(=òÆz(†@Ì�@Dœ>¬|ÃåC. îýØ[¹ûc‘Ü´é7¿pÛæ�o~Ð4qëç,žNíÈú&rÓ-äôÖ«PÔóþžK”Þ+¤›«\jâéÖù7ÝDf§Cçɉ¯žn¼¯ÏDOæ/_ÛoÐú—§©Û?B²Žô!·™ A^× ÈaŽÕô,:àq‡€<µCˆ9Žu ò™:€ª~.îüx.}YûæQ��G“:} I/wuÞ "üHð³õŽ…KÆ'g?Öü,�OϽó]‹Ó¸yPÕK�ÑE�èxQ÷v|Ô ½ü‚P°g1BHn™¨�>ôö |%œH �ÞbÕ›¸€pý}àÃr@¯ä9ï¦Nžwë '·nkÀÇäú7wúäþÏÿ—ÁŸÿú_ÿß“W]ý¶ö»455Ô¾³]]t hÐS-ÚÙ~¹öµo4sãO–ÎÛýä˜h:ÚzáÂãC‡V@¬�“(. OÝc†¬¶XÜ;o»òèý½ÁÏäÁÃ[õ™÷ }Ù�Ї®y‹�Pìò¾¹x7�÷�=€!ú!ø¹>píçm x*D4Ekß²>1¸äQÁOw4…t\øcêy²ÙJTø#59µõ*èã}ë‰ë‡Ú¡�ƒòZVÀé¸!q¹¨•œ¸^­üþ•CdõÊïyty¯èеzy5w�š-×ê2#/ÑëZG¿sùZLòõéÛqïÈ·/[Ë—¾uY©‹J<•Sï[•ÕKV{ÿ›û|n²7}¶„ªÞâ7.²h²Úd9±ÒB‹¨¿^ä]2tø¥KV£Éæ/�êYnòúÚÅU}Èjf‡bÙÌæ/Y\ÕÞ*—ÚâüW÷Í¿hò|µo9òúàW/ª¢å_¡‡è­ÎMžÏ½p!=j‹.ô¼ÍJ¤ž5íá =—×Ïí¡g9ýÇ}VÖ¯ym*¹õ²\eG¢ÌgôÐ3Àã1w~è¯Aï‰ è¢çe&w€¼‡¦ˆÉýŸ#M¢× {èwë‰þз(îú'è}¬¶Ü#3”ÀŸ,'âö©Ð'…?›cizl÷Üûz¯äÝ5{ïÖ[_Z[!ðAÔÚøÐW×�Õîî'1…>Z³ê-sñF�8‚t5œ€Dˆ7€uå�‡À‡žº{èÅñ׉ˇœZÖÁ{jøjÿ€öµåòù÷ÿþ1ý‡ÿð¿žüOÿéÿ<ù_þËÿ}òÔ÷ßþÛÏO>ðàlû­ššj_ûV!Ðæ¢;‹‹=´\ôî¢Ñö뵯 €Š-lŸùÒà P4½šÚ|ÑÒc›&†vÎ üñP©‰Üò9ðcñØo½ùÄGVï÷ôÜ!¿ …>@¡þ ¹ÿã5bÔù�Ÿ¼Ÿ»~XÿF�ˆ:œA¹ýãÑÅ ±òM\Aô' ÑÏuo?¥î%= €€>Öú‹¨ 13Àã0Hrj �ÕÀ€ÐÆ�Aµ)ÊúU{Ž� èA‹®.´À €g1?—hðc¹ƒ `O§úÐS½ˆ¬6¨Ì=–‚$ r)ìq ¤Ð'S„;D¤€¨‚þ†¨ùã0T¢Êç zÖ"0(@Üü¡�«'†?‰púh�qV+ü‘•q€4]Á`Hú {è‡PHÞ§RÈC/ÓÈjbäüQ$HÜ?@ zĉãÇ$ý@~ãÇsÓ¦O®LŒí=ø+ã;úø-ká½fþMô}?":Äè𱾟"`NÝ£O�Þtܲ9¹¬}óžÜ’Û? ¸~¼'ëß=žë 8fô?ÄöxMßb­yÉý�áé;„ ˆHðCN-¨¬€kÿ€öµ£½{o;}?ÿùÏOþË¿üÇ“w½çžö;555Ô¾ö):·èEƒž:XtcѦöëµï¬@®å‰«þèÓ«G¶¬hz%5:9xøâådžvT¨ºùô¡üö «ÅTœ;7m}÷³ïŸ:x¨÷�ŸË�<0üðÜ®y+=Ë? „˜‰HÁÀ‡^§ûøSrú.rAÑ­…@À\@ƒB©ÓG×Á©JŸ•n@!@²w&©Q }T]õð‘Ü"¢÷Ç‘û9¼I€kÞÜñã9�§î]-®z~'�Á›zEž£oE }‚Ü߉€:µ3ˆžK �æ8�$*àYP'àób‰Àuý�SÀú{˜G¨<™"§�œA¹ë'×óuœ%–r÷ùsH Š úEÈ`�8}BGpˆ:‘Buýtˆ[?€ ‡;� Èúrðãúè}ïEÒõoÈk…<]û¦ðGs � ÒCÌþlÀ„€=ä‘v:øA÷¯ì½rþ†tôü—sŽ]zðŽ¡Ï.Ûª8P }|F­â-�§º ²Y•û àÓK@¢IPˆ>ëß¼ü‰¢IA z˜z2'�º´úÐSD�õoêø‰îþXî.ë Ü)3< }˜5ôÚÖÊàé“Ç�?{r0xæäÃÏŸüÀ>yrf÷-í·ijj¨}íëA{Š>[4è©‹.n¿\ûrÍÜð�oŸy¢­„kzÙÛ9{tó¥Ë_š\\vøcZÍ@(‡?{@ôK½ùãß|ÇØÞ…Gz¯{Û}èñ-w¿ø.ûë è±è¹ $`ˆ‹zIÁ�Bê’G�ÇêúÌ?Ôª³U(\ù¦=€�EÜ>–Sk¿· È$ hÍ›¸�‚Ô©ó -WT$J�?&jòÀñcµD•½í#ƒ8D“¸z¬ôÑÙÓró‡œuožÓ3 "×^¾ú�žÀ �ä}�‚í!ï øòXÞüñÜëÎ5oô�ߪ_;ª|äÆCW”nŸéyçgilÏÜ{†ï>2Y¹}JTÇOîêv)øáÀ¨ó{@¹€=ÔÀr«É£Õo+)bÜÑSì±÷žl \ Èã›?!"Ž�C² ŽwÔx>•ßj+àššššjß ‚®-z¼hÐS,:¿ýrí;ËšzÓ_|vÛÄâÁ2šÖ«ñ¢­/ž9²°i×B�>&Ü?•Hîþ„·¢H¾éàŸÜ>zÍògzÿùvÍ-޼í©ßzêÏ ­Až’ÔA ‚b§�ÏsçŠ �æ²öí:DODOîÿðñ9}‹>ëZ惡ÖD½ýCN ì)µå¡ûÇ#úÓþê¿îMóø$9ÎqÑÇùã9°GîYG¬~óž([ '.=íë] êPêþ!§ö"âü¡ÆTƒGíàG\@êôIkuû(ðQ§�‹™K¡pˆHÎ[ �:�˜áêÉ×Ãù$ÀGsj¹ÿSrÈr© (YýÆLáÏ‹Aäþ�ižû?hx ²~½þ ¸c5JÖ¾QÇN b€´f­› 'Pèú±œ™7·€pGaP%«àŽ ©ó'Ï;ž»€?bÅÛšèË<„B*œ>§zÔ{ˆ(we0( Çkr\>pú0£WïS»¤‡¬Áný þlùµ¥‹Æ§æ~§ï†�ñ©ÙnyûÂ…§?Ü ö�y¼fž9€äÐ~¼¦gQAOÐ[7Ò¨®jA¼SÐSõ}¦¹:„ˆ¸}Pz÷§{\.V»•¸€RøC.ëß$×[@ 55555Ô¾3m-zGÑ‘¢Añ÷[ۯ׾³ùm Å‰+¿WÖÂ<ÚÀFS�îY˜Û´÷èì*ìÞµ80×O‰«š8dðÇ¢ ê� j‡>âúÒŸÝËsœ@ z¼·±Û?ÞäR�Î w÷{–‰>ë\ý&@(�'RDÍÝÏqú¸Ä$`×9½"…;VKΜ¨}fùú·ª®\>ž#ú3$÷~¬‡æøÌÁŽÀ ÄM V¾YM,ÒÕo �"àÓs-\ †\Ô³•ˇÈÃwöÔ3?^qYEw€$v¨røXMt‘³þMP}¬& ’›?ž(äÉÜ?ºúM׺‘{ ¢×±nÝðç b0‹œ>¼eŽ27�GÅ<†?êðѺÎÑð‡–'Ç.œ{÷ª›§×ߣMÌÞ7rý¡+Ýñ#îÏQ5�á½|\ìR¤Î@N‚=’Ë} @‰tõ› ”kAc¼Îû€`P¾þ�^{|¦ ‡XDÍú7rj‹qU7€Š¨MÙj¸€ššššjßY‚Îw‡Ï §/º¶ýrí;ë èŸ;ï ÷7ÀÑ”ilòàÂð¾Á�áÉ¥~– ü”|ö˜û§D ¯¿×ÀO �¨�>äÏþÕM[ß÷¯�ÏÌ÷v¨�í[zhóýß}Û)G�€Wtç(TÝûÉVÀ=+uôQÐã}„»‡·&™£Î;@È#«áˆ™ãGï1SÙ%à‡~Ç}Ÿ�;€ú;‚Räb–€ zœ>ž;ÌäÐÃ;Yýf¥òhDy¬ô a�Bz¬|“Z>Çy€?€ *Ê «SàCÝoýuæþ¡ò^x÷Ç"u=Cêð¡‡p•H.°wdMÀ'\­€cÆí@�‰:î~ráòI>ßkõ@G?ô­F¼åP×}3�ç€Ë‘‚“:~ÄéC b®€Õ·~è¹;= �öèãü1ð£µE`�Ej—»{ˆ”¬}ÓMŠºÖ¾…óN”b‘‚Ÿê '>+áô1õƒB€í ø‘ü¾ÁÄ较·—û=³=ïü½bþ¦Õû@¬z3ä5 '€Èûéú7¢€í{‚(ð‡žÕý¤÷�Ï©É�>ôŠB]Q}¨ãøC])pûàÂÑÃÍ»¨«õo¬xcîЇ™ä6G j7€ššššjßY‚..ú\Ñ §>[´»ýrí;Ëš¾þï±ȵ‚ÂZ�+ÞxWA—¿ zèÓëvüp¤�JíNä5À±Nîú˜,'ò&�=6�yŸ­{ÓºˆÜa¹C`OࢇXõ¯ƒ ¡OÞs×�ç5ðÁ$+Þ‚µpÙ*8`P§ºa+àtž€  ÇúE¬{cF-nrb·Û'êóû?=��Š›?Ò3À*¢_ì¡Vè“Âï“çðGëÜäQÔ‚ÈÅü9±–#:ÔÒ'„r7�‚ @&rë�¼éЛÆwÎ~¾§+ûðØÞƒïØtïò°g È$PHÀ�€ò¨v€XWÁÈj€�õr÷O· HA�õÑÏa�¿WÇ�½÷šˆèçP(vüô“BADqýxÏåð†HŽˆYâþi ¦¦¦¦€ÚwÖB ME7­ç´Éo�Û~½ö�ÅÍÜô“•�·ýù�s¦�4rvkäâ#�_88´yjy`ðÇ�¯|[ƒA¾ÎàOɹT rèS´Ö{'PYÛv[YßöÉñ¾;ä'掌Üñ䇞üó›{@‹8ƒÈþ €=Þ„kÞ´Ö¾:¼G- ›~˜zªZ�F;�R±îM€Gzñê7��\ …€;ÖSÐãyZÓ¯@O{¼OÏ€Ž÷¸ýCúXÏ`�÷È?DÏmfoþ�Y{zì}êø¡ŸC!?=Õ¹n@�kÞLäâð±Hn"g-\|:@ý•Þüáò>{ȉÀŸN-šÂ^|Ñá"çÞ� ïy_€�ÄÄíã=r? }örÈe9ò„® ¼¯+ÞXgê �¢XàLþ}í›+Xû&=uñ° Nf¼I?yÄ äÒ?9ü!ÒSØc¢žvé= V½!@�ÏG5PÈ�G�Azÿ‡<BýïÅ=\> ||®ðÇ”!@ô3è“Ã\>¢­w,\:>9{oOð³<>3÷þÍï]š©îû�j×3z©Û'_äIî)ôAô|Þ×ñ“õt½³põ›‹Üá�EÏé«A!ôÑp&q! �ª>V³þ�YɥϪ7ÄÛʤ Ç"«áLÌ ìi+àššššj_ûÊߎ½»h¹hÐC‹Eo)ÚÜ~½ö�ÅMßø�Ëç_üÕÁ9;æ 9Ë4¾ãà`ËÔ‘£[¦ƒÍ“GM\‹ÀŸ’»óÇ¢ $«Þ,znzú/oyëSw ³ØëÏV4ú†•Oo:øÇ·w9}èc’{@&ÏoTøÜ!F7�½j…ÐG�O$ÀOÒ[@Hà�×}àO¸â ·�õkd1Èî€O%é+ÐÉsê\€�ô˜eõ›Üüq{¨é9è1ѳh=fÀ=ÔÕú·þ«àôî�®€3©ˆ>¹J]@¬rø”¼ê BVkô„P¨r‰ÓG"Ša näoEÀ¹ !€�ç.;�Õ. zºê�Ú"€g1\ǜ胧ς‚ èÁä9øCtxã3‹pè)üaνŸÜDnb=\{’¹×y€>Üùñüï3æz<Î 1Ëî‚´Ö¨�GÖÂy-ˆ òH¢úXt±îÍr›ÅàÐ#+âtý9ð‡ž×=!Ѥ.­É�ADúÌø àŽ�Bsà£y�6ÿæ‘Ýc»çÞ?Þóÿ¡^…D[o=| à×Qs@�çDø1eà£ëà´grg�¸€2ç�Ô¸y΀‡Ôñ97€pø�»¤öwÝëà€;Vuä3�Gëߨå&€'ˆõÚ7ë€ÄD¨­€kjjjj¨}í;‚&Š>Z4è©EW·_®}g9BS×þÕà¼ÝO60ræË`ßH;[¦W›§VJ¸óg©ÔË–ûú·’û s-Ä*¸¹ä°‡ˆ¶Üýµ»Æwz¼÷:º½ _ÜüÉo¿Ðó×7©ÓGfôôPÛퟪç5(`ˆèÂùƒ@ÌjØ#o2„ÔA!…>äùú7à³tœ×¬ÃéCîIo�·T̨�;ˆ¹ƒï ô¡×°‡µoôÕùãbýøòˆÃ§Ês”«ûÞO÷ )ò>u‚�θä nÿÐˤ ô!’ç÷@yôN ""à#ù7‰ ¢FIßÁŽÕrÐcïdœˆ>ÎzÒg5œÆØýC¬ràH¯y«Ýþ!’›2×½P€� }dí›ôL9ðá €‡Üë(fJï¡™T ˆÙýîþ”È ¸Ð !?Ô�$²À§ }ˆ&úÜÿA¬z üáôqÑ·º þ�#Ü@!Ø‘upÄú Aê*y€®øëàpý­Àž¾ HAO·긨%Çýã‘5qÒã�‚žª^Õpèã=¢÷5GÀ ?¡Ü ¤÷~ˆ(Yýæ}qekßxǪ7ëQãâ�8€ý"]÷F¤ˆwâê¼ùãsfä¬zÃ)ä`Gb²HN ø1uÁ�ä3&ˉ!ð¡/ðGäÑ›?Ì?Ã5o¥/°˜#ЇàGœ?¸}˜…€'Êg]õfsj€ŽË#ásØ£zðØÎÑ«ço*@ç@?ÇøìÜØ¥ïºo°ÓŽ;‡2Ä:8¢CÜ@&>ô¸¤·~È�AÌ'�ÜbÆš8`Pàü¡'¨Žä^;à!�?½×¿!`Ž×ÈáŽÆjöiYõf9­Öˆð‡¾Èßèm V¿É- zV»´fܧjjjjj¨}í34\t[‘üËL©VŠ~½h¼ýzí{½ / ^1ÝøOƒ�—}{°mç¡MÎ�—ÿ,·Nøqç�åæ*ÀÇê}È'�úýŸSàgÁuXn92ù�ŸÁo½ñĽã;ú­)ÞòÄ=CÇxË)Àc@Ésqÿ¥¯Àqó‡Y x’ž¿öµ'}`Ž8}ÊŒš78zráJï)ðI`Pªox~`QRÇ�ÕÄ"f²æM•¹~ˆ�ëàâÕp@ ú(Yý*3¢Þò�®‚3UðÇN¡Lzë‡÷�B�)ðшâ{@€Þz­Qãô Ö¾Q›¤öØ[‹ôÕéCàãuê wЍe8‚èéZ¸Ìი!ïÉÝŸÜ„Jí f€¢Þÿ±Z׿Q+B¥A z�û'[ùFîJÖ½ ¢vQ¯óP· È•B q ‘xˆ zT Bôf¼ÎVÀY¤ç5€‡¾rYG ì©¡�å8{<÷ý§è;ܱ91sü8(²Må°'W~ú D´¾ÌÅÝcµ }Ó�Ü|øªñ]³Ÿí¹Ž÷ÈØž¹»†ï>2¹æøÁÍc9=ÀOé‘KtD,ýøþ�‰¾ê�¨‡¢;@ �Éú€œ8§§ýð�÷Tz÷'†@ô­NÝ?Ô:S7� dò¤  ¥.UÝÇO~ªüíPSSSS@ík_‚Î)úM<ƒ:Tôæ¢áöëµïõ€>R4x¥5sýß.Øû|ù?Žvèõ|çgdêh�=Ç[gŽ[,ÐÇ# ÈÀO�>�L<.¬ÉÀÏ)Ð=߸k þ|ù¯nÞúk_þÀøäÁ…ÞëÞ®:zßð£ø–¡ç;À�õ?¡|®kÞè³ò�º¨<ôbw¨#” èC¬�êQ:Уy§pþ�tÝ[©É(ðñ¿.‡@Dúƒèõ€7‚ªTß÷ñœ»@€ú.àŽC �=6ÇéC”\oáî y àϺVÀåðY/>&q¢ÏÚ7òüdy{È�:©p!nýpïÇúÌ€?"À=�CDÜ@¡$âðÑ»@zïÇÞ«ß:¥ˆžI\?È N…¬­�óèy1_ÿæ}"n .Ø“å¼� �‰ž:ì�虘ð‡¼úz"vxKѤ�ÇDž»�˜~,šÄéã}Yñ®‚�ÕzÄéã}�>ÛÈê·�C À�Þû‰VÁqëÑó(®rQy¯hË;—.Ÿžû`ßÿÇxõí–_]¼È`Nùëí÷�¨Cð�*‰ Hú*ï+öPG@(?ŸÑÓy9ðG\?2Cþ ë«tíuâbõ[" ‘¸¼‡jàCmú°þ u<ŠˆÚÿz`à‡ØPSSSS@ík_‚¦Š>U4詇‹öµ_®}¯'ô–¢Á«¥©7ýÅ`û̉T^WšŒ˜³µüç¶u÷§àOÑÀ´¹@!Ü@GÝ´¸¶®Üûq�ÝZÍ=rP¹ôÐ÷Þ¶ºömËǾñ®ñ‹í ¦.<üè–{¾þkð)¹)�?HAk߀<¦Rm†€:Ô½œAµË‡øÜâîˆÜ£8èUÑ¡ŽÂ]ïÖˤ.   òˆCH¥P§î‘÷v©Ò>À‡Z#ü8ØñÚ�Eê x<§®\?Ö“}�>x¬çò~Ç*¸©ÛÇëH¼Г¾öX]ô è¡î]€  EHãF�EVºU·€´äî”9¹ÉrâbG/A9ð±°Ç#9nÏÕd´€Ã‡ÜúÖCÞ�W¿%yúðc Q•žC› ô‰ìé„@y�³G…Û�‰ÀD�¾ä]0È£(s#DŽpû˜9™žf^»€D¼ îÿàö1 �>ô‘€Ÿtõy¨|Öøqý @ y<�ˆ‚>¹høž•©± ¾§¸y–zýýYq�ÜpèÊS€Ç"Ú)·˜áô!L €P7ŠAä²Ö�ž@ —®‚CÞÇáÂýC…«ßpõ˜¤ï³~ëßAôÑé 8òDLd�'ƒAä¬z³žÞ÷%Îêæjjjjj¨}íëA×ñÏ'»uOÑŽö˵ï5ÿ�÷‰Ÿž3sËOm^íºê�çîZjpå5®±kF øÙý%@[fŽràà 8Ëqÿ”h¢6d2ä+à üì,ºøÈ�áÇÿøÎ±«—ïë ~Š;hÕ%4ôÌ_ì©‘Y}´ï„LÞ3Ñ €3zªðö�®~#"�:6§î÷Kä åÐG{ x\²Þ�¼3VÆùL@5²™IІ P¾ò-»ÿÜZ ¹÷:¸ƒ,º³Gû}†€:–#B�ëߢû? �¤�,§Ö•o¡ó'êÑwäâF�®{}:¢‰Za�‰\ RðÞûÑUo!œ?^+ "ÇýƒúÄbà!ëS“WÀ‡ùZ¹|¢yîÚ+ëàäîþ•9ÎàµÏLêþé®j�x¨Yÿ–ßý±h¸#=É�?z÷Gáy)èÙ-�¤ˆ( V¾¹û‡èZ�}ˆè©z¸©a9==âüñ7!äÑ^¾®7ø!þÈM ‹©= …B÷›Ý7Çêýž~«‚gŒ^5ÓÐsùdn­ÅñãZ11Ã$5oA½!�Éný°Ò�RÀÃ}rü úäâôñb®. Üñ³@dÎýŸÊác=rŸƒ\Ô¡¢Û?hžõo²ðQYÐã9NŸÈôñ¼9€ššššj_ûÖ�¶½µh©hÐCG‹ÞU4Ò~½ö½ö¾oýlÓзþÝž¢Û¶æ§¿¬yõ4sã�;ö}c°mÇ|ƒ-¯Á;?#ÓÇÜõsâü):¶vïÇzÓÇL¥öþ²ŸR» èqri ùÚ7SÉ—GÞ4øôøÎÙ£=÷È/�ÞpâÞMË?¸u úXD¬€#2ëAêöQç�¿È#n ï¹³‡ˆp÷ÄQW¹ÑÃñã"Wá"Ï¥+Þ€BôDÌüè- ÞˆÛkà<"@�:€6|Hå3qøw€Aôrz¨‰ Šè“|¬ON/u™r§}îÿ8äñºÈçáýuO)Ø©z‡;ƒþ¨ôX.q ²:>ÉmŸNç�‰û@D€‘èSj‡;€0(]ý¶„Ç™Aœàªnþ,ªûDŸ[?@¡àö�ä@U™çŽ ?V×.  �‰š¾¸�¸ïÓ{ý[¤Ð§š9ܱšÜ"ô�ãòì ïþ�÷”:}õL"=Ô"œAHÜ@yp‘[ö nýx$_»  æÐÛˆÛ'€A¿û£@¨Vàø©ßáúñصnäÚC׎OÌ>Ôóãᱽ߾é+»>@qý?Ô£ÐG5`9Q®€³œˆ*0ì!'"©qþHLà}¤.Ÿ¨¯Ên©#HWºé ÈC´™Õ(¿äy}oÞvÝ=¯¨Î‰{ýµÿÃÇK\•×Ç™ujìÚ™,'"™¿ *€íƒåßÝÔÔtÖj¦ýÃÖö�A h{Ño zj®è†¢Mí×kßkâ+ÐgGÑMEw®jÓ3ÿöó¯þ. WYÓ×ýíàü‹¾ÜÀËkAåÎÏX9#{žt×Ïq‡@æø1èƒ 9rø³äù’Éœ?»L6ïœ/+Bæ{;’.?ò¹á‡þà­uLc)ìñZ¢ä(uý‚Äé£ÐGúHa¹€‘º��×ðј¼ÛÏ8VÀyÝíôÉ¡}œ>€w‚<âð¡–¾ ‘‚Ÿ<ïyÿÇÔ1Ï�@ÈSr�Ü"ʺ7r…>%ëÝèÊ�êªèî�Î"Ù\Ö¾QÓï¸ÿc3"Ž ½÷SòÜ@Œ½ô�|¸‚ú€�#\@U-ÀCÏ2ز\Ý?¦ª×qATú‚pü°ò�Ú!� òÀñà ðã9±—Þ”œøUbéñ&„>ÌâõoÞþ ˆ Óï.7ˆ³Ù àÏú@ÀàP‰V3 yºÜ?9&ê|�GÞƒp{<2sèãQ pÇjÀÇæ€ωÈ!�ÆõßÊO¯»?Õ;‡>k9=ÄÚ7 �8„€?ä[ï\Ü7>9{oß1gl÷Üom~ßÑݾ.çO�@(py°ãÒÛ?>£Ö·!B)à9O€¢F€ «-ï)u ôÑõn&`O¾öMkQ¶ò ðã}AhÁŽô?’jÑüXî!œ?"€’úUŽxÌgG‡õljžó¦Ôèñ�£C÷>6b5¹ÍO©šS[D�ÆùÇݺ‹lö±[MÞ£–ÞGlYù#Èß[î³PùâfÏÛqìöµ¯}íkß™‚.,b{Q·(ÚÛ~¹öý2ÁÏxÑ ü˜~vçÐ7ÿÝ[Ç®ZùÂêI/Øû¼¹tNš|ã¿lŸ>Ö Ì/éÎÏØä?£>Uâï*7L|õ[‘Õ%ºûgYP>îò;@¦rûÇ�A¡ÇvÌõw$í>4»åîïèCž9~ôþ½Üù“ÏXWG>t,"fÀŸöè ¸üîïò”žÕH@ÀzÀjà�ÄÞ=¨#. È݃ˆ¾ˆ·!Z'zƒÔˆÚÞi.Ž�@Àžê °‡p@ž"r°§¼£g"§ÎA�®�S·u{ˆ(@Ý® \}<79ÐÑuoDQך· A àN·ãGßø½�€Ï�=¦©5) r¨£°'êÕw¸óƒ HáÑs�?UÄíSç8~då›Þüñ\ì©%ýþàRÙ,U…ºoÿô±¹:€>Ôºæ 7¹¼ÑµoÔ Âñ£.  ‡w¨ï*¸é:×µoä&n1“@äZ+èÉ×À RgPϵoô+uÂ!ÀŽHVÂ9äIoÉÍ‹ÔèÄÄæ÷ݽ sV¡N¿u¼³÷n½ca·‚Jt€còZœ?Hœ@zÿ xã+à€:¼£Žœ?ä¨ÓéòhöXÞµú�ž:~È‘º€òÐéÚ7¯é-$ð'+ßX §óÌé£2hãs¤7�ÄåcÑ�=ÄLœ@ ‰�X—žîÜäù¬åì)u }wy^fô€AÀ‰iþ(5°Gâ£k Ì\@O•~zksQû· Û×¾öµ¯}gÚT´¿h¶hÐSw�×~½ö�Nð³¹hßзÿGÀ�C -úÖ쿘®s'�¦Þôg€šW]?L\ùƒm Êœ&�ïZ4Ø3záÓ‹þ­��~Ž—ºä¬‚ã�»‚¸ÿc ¢EÓ¦¢ÍÅù3²ãà:þlsK#o}êî¡§ÿâf?ÀŸÈD$ê.ä±>àÇ®Ÿ>0Èû•è«ápùXŽ€A@à�+^¢–µoäÔë÷|>Èú™Hïÿô[ù–KÀy·úx:ÀÐÇk„óÇj?–#`ù2+éÚ7êäPêúDÌ '<Ä"‹z(rü¸³‰ Èã² $ªëGVÁ½,©ë'^¹¬Vì!æù"5°Gbp·� ·PÀSd3 Oàú¡ßþ1{�õxG/ÐÞ*Îãò<…>zˆõ¼NÌ)²·zùÜE?tûPU€žºƒ …@ª òh$ò0ËW´ܒ•oÀ!‹8~ˆÞÓšRøð¡gu"›uˆ=oéÝ 5=u(ný ú®MŸ<69vÉÁw¬®qëyççó«ëáNÁ£Ê僈¾GU´úM„›‡=ˆÓGƒŸ %ëßdÝ›(79n ‹H¡óÈñ#=îeÐG�Ž¿E9 ¢%+ß�ÇrBnü  Ga�Ö }ˆÀÞ–ZÝ>&ÀN•%ø”ØCÄÕ£uå2á=J4áöÑw¸BèCNü!¯Á�Êç¹6gPAík_ûÚ×¾3�ýj‘œ´HµTô+E[گ׾WþÌÝjÀ'ÐØ5ƒ‡"wÈ{_Ì\ÿ÷§ ÍÜð�ƒ—¾´º’¬AšWñÎÏØÌ ?8ž4èc. @¬}+*ð‡Ú´²ær­­~³Ü�?[wrë©Ç:‘•ÑýÇ>¹iñû·9ìÐ#À']Gì}Èþe yüM¼ö-®>ž Ä)51ZÿƤðGÅ, ÈÔÇñƒ¼®gèwQ°úM{j½.÷�öež |ý›Bí© ؃h-wç�‚ ë»Èá²¾ (dRà“»€XóæRò·ª »~(pýh�ûÇ{rD­ÐG£ÉkíE·~2è“8‚¬ö¹TDmÑuY÷ÍruûððØcyt0ä‰ó‡<nj<5èaàQg3�óÈûÀru‘+ô!OïõY‡ôˆ#ˆ7z‚;D?DúˆD.õ ‘^²®·û'BÕº7ÏqóX$N‰y"𓻀ì­ç.qyÝsíu®'ÂZoÿÇ9ÈjqýN“ô="?ÔÒë½nv”Àc²žç¥O4ø9~˜ÓÏ€Pàþê0�÷* Á]ûæ5�Gà�€j”®ƒsyÝÖµ¯}ík_ûÎtAчŠ=õXÑÛ/×¾Wü+nŸó‹n(zëš"tñÒãÙA·`°óòï vßøO§ Mïÿ›Áù{žjÀæ¿ósÌ€O�?¬|søã÷Â5p~,ß<øž4Øã2�¯‚[lÙµP€Nÿuoc—.=¼ùþï¾}ÍéóÂßÜì¹@—€ uúHÌà1Y bœC uÿ!­?ÀqYøCŒ?äˆÞ~$N ‰èå­ö Ò' üÉ �çÄ^Êá�Ö•³‡>=TjòÈíCüÈ:87r/·. ¢Ï¬òHŽ3ˆ@Ÿ’GØC.u~è×À‡š{>Qz,öx�ë‡>Eà‡ºHP.`�çàñ~èþa�'½¤h-æN EÀP~û§BÜý!êÚ7j‡<]ô\€ Xùý…A‘óy¸dÒUpóDÜ!zŸGzDDO¥àçybé%W„Ë•>5â9`(DŸ\¯þh.QÜQù ¸Cnsƒ<¦§*DÎ|í-Nôt¨z‡ ˆ¸2¤95=‘ä¸x" r 4róÂÕã»fïëù/æ,�]xð=Ã<:@B€—ôö é‹X—9�˜¡)øñˆÃÇfä€úr÷G P·põè Q€ÈYù&ýnè“ßb^�ŸãöHäbŽ’Õozÿ‡9·PpëY-0Há°Gk"êºÿCŽë'Q|è‰*¹~|‚ >Ô€žê b.="Šœ?V÷?Úk ¨}ík_ûÚw†‚ KŠ>_4è©ÏÍ´_®}¯„ãg´è>ԵιìKáþB] 7yÍŸjNƒ&ßðýò?w¹Á›—yçg¼šÑ=€“�>ä««Þ,wøc*¹ÉïÿØJ8_ÿ†ûÇáÏæâü[Ϻ·Éƒ‡·¾ï+¿>ôì_³î­À“€PîŠ�}=*ŸqYNäÎ�¸BD®5}`¹‹¹…AU€2í' Úˆ ø£kß�÷‰(¾ùó}´îupÝŽéy¨yWCA²þ�\Ý?ˆ›>=ô�>VËÊ7ÞåNUr H$î Ž@‰V²ÕoD—Ô¿‡ìÔµE…AêEõÆ×¿ƒBåw�Èqÿ€Äù³HÎ ä¡®@o:WÁ±þÍrêÀù#w�=ÀO²Îs¢Kawˆ&›}Uf¼î ÜA>§æMâúøtߪ#(A¨Ì‚@9ì)Ê O™‘§ˆš7€ ‰« ¤kÞ°ùîýpóÇ¢ÉAràã3j…@äZ‡+áª<Hk´ngNqI?vy½å�GöŽOÏõý7WÊÛny×ÒÞúèÊ·¼î>¹û‡›?^[Ní=$=qù�ç}YùæÑzD ï:PÞüàÊäÉÜ>@Ÿ°G®ˆ\ÖÁ©Ã‡<­>¦yr\?â Êhú”œÕo�æÆ¬òœZr½ñc¢ÏÌ£‚ ±`Ý[éÓäXÜA6ê$ð˜2(­wKzÀÀ¹ÌbD :@îQÔ}ík_ûΤû@7Í zêýEÛگ׾�8~†‹.)Pç?&¯UÛoý}VÀuè¼ÝO¦¯ý«Ó‚n,÷�.ÿ½âD:Ü`ÎîüŒØ3vÑ3ƒ?]|N¡­€žÄdðçøêê7‹îrÐÀ OY÷Vr¯‹ëgdç¡uÿ‡«À>ÙÊ7›…ЧÃå“Ïø äQïÿ˜¨Q²é }ê|Õ=©ÓÕo€UÐS½1pC,½,z2—OÖ¯@�×�?‘Þù±Ñ!s‘ÜÒuo(Zû8€PåBÒòD½ü9º:>Ý¨Ë DÌïáú±(}[Ýý!¬±¯yS8Ü!ªô�®€ËÀ· äpûǤ@WO&�+…Brí™ îèÊ7 �̸ „#Èë y¿‚>HoÕ9JA@ ³üè ­s—}@Ô8{÷â Ès×]GÞ ~¨]Ô zz Ë‘Ö@rUÔ7À£+ß=?^‚²{?ÐCòh±þ­·ûG{ýõDêúaFÌWÀÑþðÊôØEß[Ü|U }NLB¸}Èyâ�'rýx$þäÐàCÍú·Ž»?¨rýx­°ÇgÖ«çÔ(püzˆºîÍbâÒëß"Ù¼ Rd ¢‰uo‰ô&�@ŸxœÊæ‰|ÎJ·lí[êˆ:½ ÄýÖÁ~ȉîä‰îÿÔ3SüQèã¢o"V¿ bQòuÞÿÉn÷�Ú×¾öµ¯}g+zOÑrÑ ‡Šî(ÚÜ~½öõuýLÈóf]÷Vå‰&ïüñããóËý׉•û@—¼XnöüÃé»tý? .¸ø««Ž–wºT@Ìøîߌí}¶ÀŸ/rUà§D« ð1�úJ¸­k ã¨Ôvhz€�ìZÜÐ.#Só‡‡î~é=~ïG>YW�Ô�иõn`E .Ÿd àwr|¨üˆ#ˆ˜­€£6u€f{ˆ€<Ò�ã¢"øì!âüÙðÊ7��òP£j.�‡œž Ç0(ðXmQÀ�E„ ÈòìÞÏ5ý` ðC\? úˆÛÇ¹Êæ™lnPÇ®}y´÷2@äzÿÇ�µåÄÊÕc‘žÌè!u÷äÒººñöøLà�:€ˆažÝŠ}Up ²è9ˆ«àÙL¡O~ò\ß"¹ûc¹õ\€Ü@Ôþ†ø¸ ÈC41ï�:‚, ìÁýcs�=¼£Îîüøº7™ã*97L¸{¨½ô!g\€ÈkÞÈ5êXÿF�²pI è¡]@¦‡=pb×èeóoY½ßÓïFäì�Ñ«çozðÀG ÊùèQqó‡œ>ðÇÂí£µõôxÏçéÍúv\²9µ@¹Tõ;Ü?ÈáòÞ¢ô? H×Áe.  „èëõoôˆ@¡JÉ8À�C >•ÈÝûéC]«ßÀ‡9(\ÿfuîø™% ô±ÜAŽõÔñƒèÉ ë|=jîî ½þM>okáÚ×¾öµ¯}g š(úXÑ §)º²ýríûE®Ÿs‹®cÅ›GÔ¹núöŸÚñæp¶§¶ML\ñûÐüä´� ©kÿ²¸�¾Ô Orçg|æÄ`üâ üŒï}Î\?‚pÿ¸ë§Ì øø:8wŽ•üùÌq@&sm-k߯Y÷¶n ]¸ôøÐÝ_{Ï)‡Oå TårçÇçôRù{qþRàÃê7êjÝQгMÝî…=¦ ôð6w‚Òoô< äñu§€A@ "Í ú‚ˆ8}Lˆ�ÍP}TÙê·äþ�®€«sjuúÐþXß¡î€�ETj]ûf=.!�A–w‚ 0ªëGj îtÂD¯ç8\@–›ü� äXm f%]‡rP—Û|è€2ècªÖ½!`Q¼®8D]‰žÜ¢·|äÞ�ÕžÓW÷�ƒú@ä=퀈€�÷�?¬‡ó\]?ˆ[@€Ÿ‘3³H�Bø“Ï*É{Ö¿)øÁ à©×À1SyÈÅ$3‡<9ôA3¸‚èIÎú· þxì˜ëM } �C ‡98�LòLzó‡žÖ&òu©Б}Nij¥Ÿg]Ïô¼»~ÜTúîþñøäª úøM ƒ=¥v·|œEsþ”Õoc¬{Û�†/Zzlhçü`èw^*èG7WðÇ£¬€‹�Aù�zù 8?À‡Br9ða&¨S¸}¬Ø Šj@�ŸôÞs �×êþ‰@QÇÝŸ¨O¬P¾ú�ɺ7 ýtÝ›ötÖq(„A9ø¡—€ q•ˆ¼' H$°‡p €à“ç(A7¸Äš·lyu×'¹ $ï:�?ëwùhŽtå›õ€>a4|,š¬‡pe É%š€?™—ÐGîÿ¸x‹ûÇßZ.à§;ÌC§�¿ Ö¼Ù À“:�dí›ôqÿ$%îŸþ+àˆñÚ7æ{A&ÿk"'µåô;øÁD$ÏÞùafQÀ êú°òMk]Üúƒ7P§H×ÃU é#êTýîÿwBnr‡@[ï\¼l|jîã½ÀOYK1¶{îý›ßt÷/€=ùýjzêê!'&¹B ëá\ô-GÌîx�C¡ü}�@ ^Êá�Õ©ø£ëá@.à�¿àC, †9Äôt ðAþ€è ¸#n¯M>wwP™¹„ª·Ÿˆ‘wph1CÀÏqÿˆFÔùãQWºiîÂíƒä�8ƒÄ D. ?ôú®€SØ£ý ·µpík_ûÚ×¾3m.ºÝ×½ zh¹è½Ecí×;»ÁϦ¢‹ŠîøÄ(�EÔ ™¢ núh�:ÿÂgÓûtïýÓ`çeß.÷�æÏ^ðSÖ¯�_ô´¹~ŠãÇàO‰¸~¸ûcõˆ¯y«`�;J ðYn µ[?£‹/ëÏ;¶sîèО…¹¡‰C@¶î¯�>&à�ÖêR ôé/€5}…>•3ˆ¾I Oìê’Üü©jqÿ�÷†@É{Ýþît;€JN$wIB!œ?!ÄÜýa5œõ^Ž"÷Oë݈Þw¸cµEä3"w�ÜbÖ%‘<‡?z#¨†>žS›*çÀ‡Ú”Ã!@¸|ù›}jäÑåýhõ›õ=ÑSD ÔÑW5ý\ öX_V¾EuP4†rWP[ ×¾öµ¯}í;ƒ@Ð9Eï+ôÔ¡¢[ŠÚ¿qŸ‰¢[:îüP÷YÂ]sÇßÍž3sdq£kÈv\úR¹ôãÓxèïèqÖÝù) 看¿bnŸ|þX.«ßÌ T¢Õƒjù*8wü˜¶”|drÉn?½œ?óÖ½‹�nÚ}äð*üÙTÖâb°'Z—�r›YñNfðîxÜD “Üý¡§u¿[@†=>CÌqYìAé ]ÿF$Ï>]@Hêéu*}—ƒÍó €�:ƒ€:ä¥Oíâ-Qá�å�S[ì©"}ƒ;V‡ˆ¨ìÈ õ¸ã¹‰\@oq¹€>ž_!Xðñ%pgîž@¼ú‚bèÃLW¿©(w�Lu˜‹«§ªÉS-H.°‡>ÀÇ"Îqåîè= "oÔD® �Üý)"O€�ö@Än xÍÊA�º€€>^ãüA].Ÿ]žg·€ÒŽŸÌ¤°Q|ú øã0HTÝý!}�8€¼vQÅõCìüm €´ŸÁ…;€ ú&Ï7}êødYßö«e�ÛB/ð31ûù²îZ Ž ¢8{˜QG÷D€¢Þ÷aŽpYöx QæB8ÈMË5©+ˆ¼‡rУZ”|‘�â;@&­‘:}pÑwÈ£À§ÌÉéËú7‹ä}põHÀj"ÎÉ#ç9uxïgÔã©ÚE¯vûˆCHg8}¼äÑÕoVÓ#GÀ uQX»ø“ºêìåŠ]?yÏ"jkáÚ×¾öµ¯}g*š)útÑ §>_tiûåΆï;ÿÓ¶mötúÀ�þ¡™[~räü›¾w`|ÇÜÊFþaÿ¶â™¸òOëZ¸©7ýù`ûô‰3ü„)PæœK¾RôÕ"@EJ|Á è“9€<ÚÍŸ5=‰óá*™”ÿÙ‡?£3‡_|ôñM ƒMkðçP €t«Þr=G¬a½@€ž|fsd5ð'Tâò˜õ 9èîPãüAÔQßÁ�D“+¼dò5³ú(à¡Gßz�ûG×»™~â­@­=Š6à"WÝ*¢N!¹Ü?ÈáuÉ‹è BôÑCâô‘û?ôõþµæ {˜U�‡Õõ {¨³»?ä1Ôév~€DoD™+ˆû?€Wíúñš9Î`HÀ�¸€¬vEð‡^ìþ¡~‰Ú"ŠàO• ÊïÿD«ßª蔚<¿ûÃÜúˆ·€�´vÈܾÏ.À�®€›ó¼Ç 8?ô=ë’ÞÿÁýC¯x“^êþ©ôASô˜3#+߈±AþVW¼Q³uoR#zêòQõ)}îĮѫÝ2¾söÑžw~fG/Ÿ¿cè�ãvç'?{ßboGPèÒoˆ~.½÷£+á€?D›‰àó@ …RäQ�)Ês‡µæw$ÇíÂ=.�¦™û$èƒpü0œ?ä!’k�ó§ÔÑ�Ÿ2#2÷ȸ€è[ üAºêÍë@²Þ-Z —;€= bÖK€!uù”wBé½ú¹Ë'šõ>Ù\]?ä}$Gâðñ¹×uí›å%zØÕkàoòHôô^GÞ-\?¬€å7€|®7èÔ±èàfE��ÖÄ.à÷Õ!Ø©úÜùAÞ#2wÀC¬Þÿ!êd¹ (d5ÑÄ]Þ öPËýŸì�Æ¢òhO�?êþòXíQ×¼YÍ?ºò ¸#0H{êú¡Ý>Ôs¼ï¢ç·€@Ñ} “B ‰ž*O¢æØ£+à<¯jqQUÓÒ7€®€+÷”C TjP‚¨'«¾Ÿ¾Rð£ðÇÀ޾!ÇùƒëÇú#·,\3¾kö¾žw~–Æ.:xצ{V¦?ž{-`'o\;2D¬úÈj �¸�pûùÌc{˜ÕR¸A îþˆ ˆ:AÄT |påˆ^ìRDOÁOîö11úÈ›ŽUpÌ ô×3z¸}<·š¾ê`š« (@ÌjÐ#Hº€>ŽrD Ö½…3½ ¤3 N¾ŽÞ”jz}îþ0ÏÁ�öªY �È þ„ÚZ¸öµ¯}íkß™�¶½­h©hÐCG‹~­h¤ýzgøÙT´§€šÛúìÈ“å.�w;€káþöñm?¼áû@=7˜¾îoOßZ¸<رï¶’îu~ „Ù¶÷Ù5ðãÑüyNô¼­3$N @8€ èùN ™�F'�nxåÛØŽÙ•-û–¿¸ijñÈð®%>û-XŒVÀ™tÜs‘ØCÞqˆ:Nj‹Þãþ�Üû!ªÔõ£²~5-¡ÐukQ#À�ç8˜‹öKŽÖ |LR›pûðÐü‚<�¨çª·®º—€<¸|¨ƒÖǤ0Èä.f{L ¨#ø#ª\=ä]âþî �ψÖcŽdõ[§ "w€Tzÿ‡[? ò7žw¹|¢Y4JÁž5Ô¾öµ¯}í;ƒ@Ðö¢S4詹¢ëÚ} ×7ü¹ èfsú˜>V“›ît Z?ë€ÐÌÍ?YÙqëŒï:tdCkávÌvîûæ`÷�ÿtº@P�N?œá—_·w~¶íyª€ž ôùÚÚÊ7àÏó«Ñ€�ß2Y­Ð§¨ä¸~ŠV{–s ÈÖ½�ïœßø�Ÿ‹Þst~¸Ü 2øcàg¡Är¯‹ È�;}zº€? v4¯ßÈ{=.Ü>ÌüØ0’pýÀЧóõz!�ÞÿÉ!5. dõªÖ½¥oäÞ�B!=¥&Wøô!’£hÅ›ösè#5+ßÈõoä¬|³µõp©Xõ†ûðÐñ}7PîÒ`'­yŸkðC®ðàCúxÍ f{¨‰ñJ8òŽõo}¤ëÞ¨?äzÉê·L8{Èé…TrÿàC�|æp§ÈæÔ P4;À‰¼©Ð^qÿ0  Гß"‘ç«ßpÑÓˆèÈMä@ à�:€rWâÀgCn„ˇwñfù:8?¡Ègž‡7€x[Á�6“›?•"ð#9µåùÊ7b0sé[•:€†?rl¦¸xÞ[ÜÖô� øA2ÃÕC� Øè 8‹€«ÅÑ#0(¼ýã}¹„CH\>Ñm«¥O¯{#vºô�Æ\ |RñȃA~ÚZ¸öµ¯}íkß ‚.*z hÐS÷]Ø~¹×ø/zÓô±ðé+`�Æ�;€TÓoþÉÒù×÷Ññ B‚swìºúONëZ¸É7þp°}jðº¹ó³mæ‰Á¶K¾fnŸs÷}ÝbA€^X?–«ó‡h°Ç£ÉWÁfN Æw-nüÎÏô¡ùáK�­BŸáÉ#æøq×ÎV¿¡»¿æ7€~Tßò@¸€YŸ9€‡˜ w�ÖÀ Ü?{ç5 YùFDÞKW½¹¯|“Ú#ów€r±â�{@ëtÿ>ÕÜ{ÀÖÀ·€?AßsÀPÏ•oÔäòàC®R‚ «ßLÞÓÕpuMn`‡è¢­�#OaàÇbè ÊAP/e «Uä1U·~¬'°ÇÄœ=ÌuÝ[¥žà¸c‘žI]>.渀=¸{¬ç93@¬yËÜ>VÓGÀí1ÃéÃ[]ÿF´¾EYõ†è› Øxúh4ø ¹õcQjæ€9àÇr$ ¹$µ@¡¬Ïú7ÞÌ ø±Ú¥5°G•¹|¨-f0ˆ\Ü>3QOûVçÐGW¾�?äˆÙ)¸“»�¦ˆÈ�Ž j™¡Irº|BôÈÓ^îz‚<ÒƒOL–»=w–û={�Ÿ�³FßpèæÕû@îú1 c±èÓuç'�©ó‡¾!ÄÛä1½DÌWÀ!@ñ7Pžy¤.ê¿°£€g­öœHŸ[@Du~:nÿv’›@Ô&Þ*ü!7U9p§‡¸d9pˆÚïÿŒ‡b§9=Tj½ýc5¢¯`Èa�õWOyKM?º÷åÁÚ7À�õQÓsYŸ¨ð'sY/½„ÛGkbODÝó�Ëz�j_ûÚ×¾ö�AhSÑõîòô‘»‡¶·_ïµ ~6í+28ø±ù GOîö©bâúÙ8BS·ÿøà¹W<;·Qhp^�S×þåiA?L\ùƒm ¯Yø³mj¥€ŸrçgßK&wþ*²Üïÿ*ò¸×rƒ>~ ðaý›‹¾4[]÷vÁ×½íœ;²å²Á#ÓGWŠæü1øc hµ6·O‰€JnàÇ@Є;€B×ëàL=Ü@±dßö0£à¡ÆùCî’y�èxŸ (^W9‚,×»?Ù8uý(ÐÙ¨óGgD�(¸D�ßÊ]@9üÑh’7ª ½òuèþq à±H®ñ õ- ’{DôS€"v¢›@Ô@ "êéÊ!3`ˆÜÀçJA¢gbíýn—OŠþ‰¼®bvï'pÿM€ŸÒWdQzª2 à Çú „Èü�Ëj8b"uû”H_@ä&�>“3³˜C\>ÉJ8½ÿ£RWO8רRÄ- �@D �¬€KÖ¼ð'@D®žxÊ„»gZú®§Cêþ)¢F¥¦Çí@±@ˆ;?=AP_ø“B­ûhdÿáëÆ'fî~vÌ»tþCŸ9>éàÇUßüa¢vå(síÑìH�‹78{ªùƒ@ @ÚÈÞúEká¨YïÆ\W¿YÞ€:̽êÞÏýäDz&qù( Rw�¾§ð©«Þ¨ö sü�ãªóy5ð—�@™Y4åέÉw}Â>p'�®zcw¨S©ÓGå}O,æŸ`í9U«ßú¸¼fæñ•?¹@Ô{(ôp[ ×¾öµ¯}í;“@ÐHÑ;ýîÏ ‡–üžÐ–öë½öàÏtÑm€žÀýãÑÔã�öTwåÚuÕWÏÒ¡ÇÜà‚-f®ÿûÓwè†ì(înܼ6îüœ[`Íö˾õ¯áOÑK€pÿÔ+à¾âàÇÂý£÷ üX>=xY7’F ÄÙ\ Ï橋æ#¾úÍ!�¯}³ÞÄ!@%âú‘ ^ÀGõy€úßýIA2ÐäéªQ}È]×!@P&�@ˆUpu­ê¾äsÀPˆž °#. H¼S‡�º�ˆHz9äñ>kßT€ždµ©ëÐçÔ!ú ñžÕn>ó\!® `Õ}u÷„}@ôÕDÝårÉÍŸ ü˜˜áøqèCÎ à#Åuxò>u¸ê�Ї-iðx�€@À�L‹ÄàþOr÷‡àSbé ô¹y�!u~ˆ&jzz÷9äñÚV¼_tQ{)øqÀCžºÒUpYmÀFa‘:€€AøSô¡÷\¾úíqÍÅõã‡À3“À œ?œ?DfhºŽ€ ¢å€ fôJ¬äp‡ÕpÞ“»?¨}\VÓ7%°‡7ôÈ;´õ­K—�OÍ}¢ø¹`vylÏÜû‡{eÐç îúx�À#�(°‡ƒr”Gr„ÛèÃ:8 ðGÜ?(èù*7“å¬}CôÈqé}Ÿª&'Ê;qù;µ¨ÐÇd3é`H ½þxmè£+áèËÊ7fEÜÿ Á�ßû©Ü=Ö÷*@HV¿‘›$À'�æÄYà�;~|î}@� G�EÏcGÐ=>½ŸA©>Ì»@HáO‰ô�? �P„=ÄÔíÃú 4Ç „>üp‰¦æj_ûÚ×¾ö�) hG·@»õhÑÚ/÷Ú?çÝhpu¨™¯sý›æ¯´H5sã�í¾O¹ó³1çK;/ÿn¹ô“Ówhÿ_ÎÛóÔ/ü²í§ üœ{Ù7˺·o}] �i Y~ñW ø”èN "n!ƒ?_æP�?cÅ4>qxÃæ±òŸñÖ©åÁæ¢-ÓƒÕh¨¸| )üq�å¥gÎ_‡(rüi¯9uŽè3è“ ¢À qùx�û?¥ø}PÜËÖ¿y¤—Á¯�>\@ôLâø‘9 Ès½ùãwµ‰™®~#§F8dM³ ™ÄùC_A�:‚€:Òw¸ã¹¢õ­F±ûàC¿Ó„páú¡o=�‡=†·€Èmè!šøx�·ôqûHΜ•p²Ö-rEsYó–:€˜Y4U GÔïÀ§Ê‰Àϵ—¯‚SÄ;è a9µA*€�H×½Q—˜ã¢Çz‘Þü¡ø¡FÀ l½› H”� þ7žØµù·V.Ûsð·W¡N/ø3=wï–·-í;wl�\åð±Üb½àæ�Ì:Õyã‡ï¼ø“�Í=Ö`ÇçDS|¬&'r ‡ôÞ�×îø!ï¿ —Rg�Ëòiݽö­{ \ƒµošãúìУfV” \?©HÄÐÁ)äÒ»?:ô�wTÌŠª;@ò"òàö�)pûèÚ·vè…0Щ>–+BÚ áêvüdoøhËAЇj_ûÚ×¾ö�1 h_ÑCEƒžúTÑtûå~9àg´èš¡ïü³A‹w8�ˆ.€N|ß'ì�;äÔàIa¹®{#�\@%u¨p'p èi�¤ø …@z4âø¡ bÕ›D‡=8‚X÷f²¹B Éð#Rø³ž›?½@›>}bjì’ù_+kÜzý}ØÄìçG®?|­Á�ò×[4‚ ЈȃÛ'^ýÖË ¤Qò|¬ö] ñ&Xõfóô„Bðã¹Ç.'PµòÍä5Ÿ� ØCDô>–‹ËG´à3bºò�û?ÈA9¢Wßú!öPq ˆ99®ËåæO™‰CHÝ?Èúù8ð‰WÂyß�Ç1‰£DS|èK”ÕoAÎ�C¹×�Ö&Ëe¨HV¿‘‡:@×�B �} �佇+ÔÖµ¯}ík_ûÎ04\tKÑ¡¢A­ýfÑ9í×; _�;Ãà\Rt§º~pü ë~È;P>7%šºó§s¯4T™z㟠¶OÛ0l8oÏïšCç4A s’9‘NÇ�Ÿíäl¿üÛE§œ?_·X„È!�Õ~ÿ}ÅbqY^À�ßG�»žŒÛº·¹ êÑUð3sÌáϱ5×O© îØ 8A–ï2×�Éœ@EÖ›8\Ä €î’•oÀ QKO�õ¨U �?ñú7öàö‘ž¸~Èqû `ý›GòëTIÿúÊåB!f‚Ôõ#yéí�Þ €<U¼ò ›G Ç$yÿÛ?ùÊ7`5îXÔ[@ôyày"àc9.Ÿ üäQïûDPH×À!æHá�Æ8ç ®ˉ&œADqÿ¤y©ë‡H_œ?&ɉæxì©Ý?À �Hnu9�ÈQ©A‰X'«ß|¹}lNtØC9è‘Ø }$·(ëÞ?ä¦ Ò;@êúIàÏW?u¨>WØCH�ç;ÈÓ5pH¡�Ö9â�G@�§®³î»@ êXt±ÊÍfô:\?}ï‘{Ìt¿C «àȨAÀ?&u1Ðà ¨B!•Àéé­ë‘[mç�ׄ˜¡lí›KÖ¼ù,„?¾ö­Î ¼!1C|‘g÷€¨é«ˆà#91‚AÅ$Pç@È7p÷‡˜Ÿ`œäV77PûÚ×¾öµïLAãEïuÀ3è¡ÃE·µ)âUtýLݺæø!âú$®¢‹y¿;@©3È×Áíºë§Ÿ{uÀÊOW~o°mba#àÁ€ÅŽK^´›=§ï>Ð?ô�â:úJƒû¶·ÎyW|×À� w}cmý›É�? ±Ž@E¸�Xg΃@3O ÎyPk¬ü™G¦?&ËW­¬©€ "»ÿ³š;üY T¢;¸tÏ7ßm°F]@ºŽ<€?¬}ÓÑ¥}œ>RðüðN@Èk�è:™ b ïí—Úä0‡¹÷\1R)ÔñVë� H>!À`HuM¼ö ¨#`'º ”¸~�®x“>¢êø©@NË=2/y‰8{JŒ\? †ú®€åðGo~P7ÄÀýݪòø5ýüÈ   'ìAõÝ€Påìñw–×ðG�OîB/ºpú(ð±¹Õ.æ.Í?V[ô™!$àÇæâòÑZ{êö!W$ §Ä2÷Ù8þg�×âöÉ" {Àž$¨—(’¬}³¨NŸ®õo�¦‘ ÀkÞ<"ëiÝéÚzËâÆwÍÞßóÎÏÒØÞƒwmúè`¦rýøA'¢\Ü?& P_„Y¯r÷t¤d=\>MÔ©;(îu¬6ø#sŽqýÐß�ã§šÑðƒãGdóÚù³$ýÄ;�?H�à'W }*Œô��3Ãýú7ÏY §nïqëÇr�þ&•€õ¬¸wE^«(Òð‡7�뇙€Ÿ,¤áþ³ÒGÜþ¡GMU3VÀéÊ·0O�P· È% ˆ\%Ðç¡MÿºçuAík_ûÚ×¾3M}¼hÐS_(º¢ýr¯,ø9wè»ÿrýðùn‘ÇÒ#ŠÄä!7‘çÊÀ�ÞÚþ©Ÿ~ðU„*pv\úR:7 N&®ø}J§u5Ü~08ÿÂgpά_ö¿ó¹ÓÇü|Ç O‘åîþñü)=ò¢â2Àã´×Ö¿­æq´ºî ð¶n�83R ÎÖ™ã«À§Äky‘CŸe—­~3ècrä7€D‡ ü™8¼2tøOï0Ø£æüˆÓsý[Úꃘӳ\Ö½é­Ë©EÝ·€žáð±œè3TÕzû'tÑ$÷�<"z fñýòèþîþx$Ĭ?ôI{@àO²®Î=]û8€Ž×@GÞãú±ˆôÞò™ƒ¯MÞC¼èÈ] Éy§ÊaP·3H�ÏÀa�ÌXïÆÝŸÎ�æôru:€pÿ �>…äöO}<òg�‹ýÀDí. ³ îØ›ÚíCí1Z ‡ ÈzÁÊ·8_ˆ�y …€=ró‡È“AÞP‹óÇj¢ä©=*fä8…�׸€·±ÇÝb¼ú�:qý�£¢ @” àR[Dœ?R|êÚc}<€ÇÞàî!Oêô6b¸�¶Üµ|éøÌÜ=}W5”·ÜüÞå‹×Ü>¼öœ>¤«ÝJ�œ>¹‚ z{Lä�H`�Üÿ¹ šÑïáþQÐC�Z!Â飒@xè¡Ò'ïuÿ'¿÷ ¢vxs�€:ô¥·H/½”:±#ˆ¹Cž�yRçOê"—µoäÒ÷ˆãÙ,…;Ô:q㇚ž §}Aeí[ƒF´vÑwOé™�?êîQ1SyÈø©œ?Ô©zßøQxÒœø°Gœ?¸?–3oÿtûÚ×¾öµïLAW=R4è©�M´_îe|úl-pçªôàø‰ ‘7 r ¡n�FPÑ7~ƸWQÓûÿfpþž§7 %¶O ”ùái@¸˜¦¯û‘­‡» ¬[;o÷“ƒsw±µhðÙV ǹåÏz^3ç_ñ{æø1]nЧè;y ±öÍ �¯|«ÖÀ•Üïÿøí. Læ*Οñ©å—¬F‹ûiëî/�‚>kÑÜ?@ “Ýþñp®R/9Zªœ?îþÁtåʃu^øÑÍ‘:¤ÎÖÀ3ÇOæô©rÞ0 2%@(Z‡j‡�‰œû?×y4‰ˆœ~×M ý&w ¹4¯Ü@(ê€Ô üqØÃýƒ>Õí£ÐCÝ[@ í%þýwöδˮú:óuoIª*I€¦ªK rÀ2ó,$&cÀÌ[˜îØŽg'ȸ4Uiº 4 ‰ƒåxÀ!$LÇ��éþÝß ßôè~ÕíÕ±{ß½vÕo�gíÿ:GW¶âÈç¿Ö³ötJøEÿüì-—�ªêö¡¦Î PÔoè;¢öxn¢§+âÊkáD²ÎTr�8ÂñC�èƒpù”£:|Eµn™—¡�:�?€¾¥� kàöD^©CôXí@ˆ3¢Àω©B®Ù¸£Pç�çƒè!PH`O}ȹïã¹®�£·ýùˆ@ ø‘¼�«zȉ診‚Vá"–œAßähðÕoÀf¨#ëߊ÷yÙ„€A |È'R=ž¸€ˆ)èÑÕo¥;@äHPwó“g›‹çnsóìnô?ÀŸúâükgÖÚÏwú‘÷ࢧ·}CH¡µÞüÉW¾1£ôAôU> ؃pQxäî}D¿tÿ'r@×0Èk߉HÝ?’û Y-šÑˆ;(½¹ÎÊ@g0ÈsQâ¡:„¸ñ#ò. ŠX'=¢ÂjÖ¿¡¢ h¤2gµ›®Š {Jrç�¸|Òµo©þàô‡�«ú ýðÐIzÔ¢2ø¡Ol�B]z©ƒþ…Úµpík_ûÚ×¾Ó ›n0͘z ´×t‡i¤ý·wbŽŸŽÁ›s üÜhÚ`ùM"Ö¿†pû�Sg«áó ä±F£[?¼kåUì9E΃9û…îÊ1(sêÖÂ]nÈ\L+MŸø…küãïö–}ì�Þ²?ù«ÞR[s·l­åýÚþÙ–Z\rÑ�zKÖþ¸w–Íûð÷�ž.`œ�Ÿ¾<ÇôR_áøqð£ˆup|ÜÙOã²@£mœý´Éà�E“C‹�XÿÆÚ·>ò8î. ‡>]Ëà ëß@}ðãqåÌΡ­oÜ`n‡?Í]@%àÃ- ‚BÀ¤+ÞpüÌÊkzÅû?eçÏ }¤°Çsq!Ü?DqÿD�î0§ONyYµkà<§á¢VT{$J�H€�¬w㻨="µº<"f¡*òÜD¬¹DÎ ¸SB@�Ègµ(@HkàŽä6“UoHûõw€´®@ˆ:€NÅ”¬ÇÑ¥÷~vÓ“µo�îy¢—+`ŽH¿Ã¤pÇzY­Ê×Áí@ô-ÒG€É]â2yOïE­RÄý�Ô ôÑSÈÃL¡9Žú¸|B’zp Ê"Šô�+"§Ä‘Zoÿ¤Ðg }ÏCÌ2=ìrûÇk Ž8ƒ�Ï¥øÃ] ¢l^½ÿóµv·g½ÝïÙÖÌy=µeäâ�W„«G$÷~¤ÚŸ€ =ѧ?sb+àêo!€ŽÖ¹–H®±€€=<ä!í¡øÈZ¸: à!’x�|“8‚Ç�öÐ °‡®òD¸dõЧ„JÊ纎š@ä>k¼Þ ÑÇé£w~ÈBDæUÇ�çÑì0/º€=�B9à‘À§¬-IÎZ7À}uú�çuíú7j…=Zw³;@ ¢¸£QÝAÌ[Ô¾öµ¯}í;Ý@Ð"Ó½¦^Cm7]ajÿoaø³Ì€ÎÕ~bÕ›çz€?(…<Cô>ßÊ… ¨»õ­ÛÏ8çàî•—ÿÓ©+U–›;fѲ�;U–ž÷r�?ïï þ¼ï¿Çä¥ÿèï{€Ö½çZññwúÐ'ÀÏO-¾iúkƒ??qd (nþ¼Þ�¡YäÈá�Õ~^qèN ¨_ò0èy�îúYmèsUé¿ÇæòUq#x̺~"š€?áþ‰»?–; ²|¯×cõÛ.‹»@áÂdqÙ¶}Ý»ŽÝýä½èãøi,€�:Ôé£üP…XÿV{lž;~žúËÂÕCØÓÀõà!"�çÌ‰šƒ €Ò{@ x=r‰�׿(éÕ8€ $€'À9 'rb|#ð'úeD4Q{�Õƒ€”ßÿQõBedÂÕ£7€\@¢A×»oŠ5¹*wá’5p!zs¤v%°CM�(à§äø!'†›'j‹ô‘ÍQÀ›äßx>)ì©B" �×€uE7Pzˆšž8�¨�<�Ý@¥¾*@&úôRDOà¡nªºµpÀbæö)õSðƒH Ž×‘Ssb†bò×ϤÅñt\þ„¨‰ù­ŸŸ˜¾tlùÔ7›üÌÑŽÑó·ß<ôçO�+ü‰:"Ò5o ‚ªÀ§ z¨k¥ êø”P¹ù#+ßÈ™ñíWëÖÁ)ØQ0ä0Gr ÏlŒu¡ÔéCÎ\Ö¿©Ó'É“z&>§Êaà‡(sSÅݓߢþRÚ^>ŸŸ­‰êøô >Àj—÷þ�ÓCê¸C>‚¢/ëàAQ'ëßôî� ØÃLà3 ß~*¹ÇÚÕo’|¨qø0ükVÀiO¥}îþˆdÒ^ypÑ‹HÞþ—_ík_ûÚ×¾Ó�mú¢©×P_3­iÿÍåëÞšÖ9ìqqãÇäyôé‰#HÀuˆzÕ9^ýð�ÏþjÃØ9;·Í®Y›0wË)s×\ö�¶ZíyY©Ö\‹—ÏôVdù=ºýÒ5a È P w{Ë/þÛ9r¹ûç¢ÎAŸ¸ûã ç�¯ ðS@áüqÇOD‡>MûðçÜïöŽïü˜gÔ ÎÈ9‡{ VêÍÇýã€ðcŠÀÇê^Dw± Îã.w¹ó'dpÈмå;zc¾âdÛÎΓ{MüWÀ!ú€…?Ì¢N\@²ö-"=qþxެ& ¸ãQ€ywˆ.?‘Ÿ¤¾T��ÐøA ò‚Xÿ†<€PõÖ¼In1òÊÌ"ó2R) ˜SÉ=ê]z.z =ÔrßÈ!þH- µñ Ê]@üD äØ(ªökáOÙt\À�÷�ÕÀ$®zâ RøSB1+Bu÷„²>¹ê{ÈêŠë'zس¨E6KWÁ~È «ßèË è±¹‹[?Ìq•�ƒ3�A.jìç�!`PyXû†è €´FuXùµ®|S·�÷ä&�CÖÂyþhNltˆÈ8”ÁD?À„¢ c¹G@ÞcµÎ=ÞGÑIàã"ÏÀOå»ù7íþèØÄÖ?kôw°%S{FÏÙvo÷¡ÞªYpäQTZW»þ ø“¬ƒ+Ýþ¡7€T'€Pî ú¨ˆ^/q! ¢GN ð±:wE/@©ë'íqHoe® `1úÌTô§yŸèãÑëæÊ×¾i/j´Q×Ýÿ!wxÈþ…«‡|úx5½òíD¯ qþÔˆÕoÔ€fôSøS†@@z }�1×\PÒC^z�:�ôqö.�ÇGÈ[Ô¾öµ¯}í;Í@Ð%¦o›z õ°é¬ößœ=ƒ7óLØY?t\à�;"'ŠóÇkà=“8‚¢®s)ô©Ô5šçóŸQwÍ2s¬Øý›S‚:Ù}�ÁïMîïM\ò³ß‡Èã¤�*@Ð ûýV|üí@o¹ógéÚ7Åú7Ó\BßïÃÏþƒ¸duÜrøA«M“=…f͵tkot²çàÇ��ÉáϪƒ®¨]~(@�E\?&[õ9šuþ8ðA½as(�Êzº‘?Ùýå¡?»jvœBžˆvåŽæ)ø!w{¤ðcyDfºþM#pÑgMœEÄz8j”®S‡OÔUéª7꬧y*Yõ¦9R„¸$îŸÒ*8zôõþÏɸ\•>`'êí—5pmA@¡�ÏMä@Ÿ öE øÖrUôɹ÷CøCžØ“­}cV@E¬|‹˜‹¹:Êö?Å)ðÑ[@@AºöÍ{"€=¯™1'ÏÜ@I‚è u!«‰é 8��<‘7@¸z (æÀ!ÉôXÄÙCOà�HÝ=9ð)®{ã[]‡äP—\@“÷QoþXŸ;?(àÏ„}KŽãGrj?!€O� H�@®áûz玮Úö€A�}�àÏäÖÏÍ»y÷uDOkô‰<[ Ê"ð‡\W¾å½ºµoQ“ãîÑ[@ÅuoÌ¥'à'…=qó‡žå|Ä„tµ[D;DÿàŽÌµO¯}þ(Êo!™)ðQv’›?ÑO\>ˆyºŽõoDf8~T ~|=¹+($p§ …¨åöO8ƒ¦Ô$ÚÊ ÊÍbçy~ûG@ôuí Ø£ÀGÜ?^3Å·@íáøQ1Wgu£;@ˆµnÔDqúh�pûÉS÷�ÆGZÔ¾öµ¯}í;m Ð|ÓFS£»¤ñÝͦùÌ®ŸUu®ÇÝz}¶Noÿ4•:‚¹|J1ýFõò?ß8zÞ®o¥PebŸßë1rÊ´bíO{‹Ç÷ ‚–|äÙÞJséüîþLî2½ïîŸ�¯~3øãЛ‰èx(Ö¿] Xg §_ÇíŸWæV¾üq·Ï¬ÈáÏÙ‡ àlÜõcpfdÕ!ƒ?ß çÏÁˆ‡\±0dˆ5p¬}³èÂýÓ×.Ïþ„ë§kqàGמìé|ò;Ÿúòk7 y—[@xPôþˆ>äªækß>ù 8Téåwòžº$Ç$9ÐsqýPKDéÊ7‘Â!Ö¼òÕoÑîp ˆ¾À`�Gg9ìàC®Ò™J@ôpUææêúÑZ׿‘ è¡î àOD$N À¹8€Ò•oHÝ?ä�€�8}¤/ëßÈk À'sÑ#§OÌ´§y�3ÈkQîø!º¸íC.+à艈¾®}Kn|ÔýCMžE �ö€>*Ÿ‹ Q!úˆ?ÔÒ�èˆZÜ?(“:~´§Q¥@‡^½Xñ5 GoúD�9³TÍný‡ü4u¡€<Ì÷Ê. DOïûN ­¹ÿÃ:8…>(‡? …>¡ÎöOŽž·ý6ûûÌt³•»S__pùô:ÖÅELä)IæxÊàG#ªwþ�ãø¡v) BÀ¡2¢&ä¡ T¾ T„BÀ Ü?(z€X j* ŠžF4S̨¬Ü¤ ˆÞNúâô!Gåû?Q# ¨Ú “ô> �è“×ÝR�Þÿ‘ô±Ü!n!Yÿ浂 �È{ÑgÝ‘sf r@OÔä€"ŽŸY Ä!º˜iØCÌœ>5ö ®æÉÅdÂõCÌà Ô:‚Ú×¾öµ¯}§:Ó´ÉÔk¨)Óº?6ð³ÄÜ>W꺷*ª:~ˆôLù�íéê7úÍ×¾QçšùÙ­�G^¾otåÎñlª³ L®{ïÔ� ƒ-Ë.xÍîírØÏm·Ÿÿžÿ:'ýg ÷�A wÿü ÐÏ9ºPÜÿ1ôÆ,r'PeœA püx È¡�EÓ+&@�à [ —ÏœÔ�ŸQ‡=ß ž@¸мpþÌ�»?.ËYûÆíŸXÿÖ—ç<Ÿoÿ9ŒÕü¹æ]ñäg»·þtçî#ŸúÖ�nH!¹ªèr‘S7sCÜ÷ú~ê 'ÿ.‡B¸jø×yHú©û‡9½¢pød³ˆÅÕo ‚>�´9б8Ð- ¾K `‡^€ø6\?—5Î  ðÇ MD¯î”r*+w)Ò{@®ºUo¬{ãduxb®}àká"Çé£(DMÕ €Qz8„,’W@Ô€ ò¨]ÑgÝ‘ó˜‰#ˆ< 5=?ÀŸ9êr©Û‡ÚEOÜ> xèËê7b�úàú±ÈŒÜ€ uöàþñ:ú¸Ãœš\T@t¨§ŽzÌà=¯‰H`�Ÿ}’upMàÉ�ODÕJQÝ ¤°Ç”ôézˆ!>à‡Ü¤ÀGzÀzÕ•oß801²vÇÕc˦žhxçgjä¢×ÛÏ)ðÉ¡} `h¿€ rqýC�¡�ös裫ÞòºÜ¯* =ÖÀ…ôèJ·|NŽHëPÑå“ôêV¿!@yˆ~îþQ”AÍp§ƒÔí# Hfâú‘e7€ýÊŒµo¨c5À¨Ã|È Q!PHjÖÁI/_G^†A¤w~¬&GÞSwu©·Ñ«“¡F¡Ô „ÛGE_�?å×Oäôð’\{�|½…@ík_ûÚ×¾Ó ­6}ÕÔk¨?7­:ÝÁϨé’9ÐsÜå9bõN �AÔ€rÀPˆšØlœæ ƒþâæÎc¯ÝÓ½÷ù»Ÿ~þ¡EkžÞ^¿6l[o©‰•—ýê”� sò˜£çèÀÐcñŠÝæ(zãdoùê7_W¹ÿós—;€.ù;¿ÿ³ìbS w]ô#…?¦×Mß#·h°�ƒ ?€­~®·pbŸþ³5W¬|º7zîwMÏôá�G“;~F\îü qå~Y׳ øƒÌdrð3Ïœ?cK›­§›wYïÑî-‡ïqÝzøžÎƒÏ}rh÷›×VîYô:\@(A©|�‡ïÔíCO\?Ì€>>€ã}f9ä!’¡�¸~,†dí[ÔHA¹Â"’oÔµª8€>ä¸�d¦}0HÕƒž|®ð'sÿÔ (DÇ�º€€@1 £7€  ‡{@žgNòzô{qÿ�«Sáú‘é �ø¡®@WâRàã@Gú¥•pyL]?Z}r77dÕ[ÌÐI„Û'P.\>Ô‰?.©Ã$߈ÛG\>äÔ²Ž:>ô_(!�âü Dîb%\¶ú�\€OäDTïR”ßJP䫸ÄL]@QWààGAÍáOÖWÕ@ éÔ!—p[,Rsó§>²Žoæà¢G.î‘Üó!ü‰Þü«g.ßú•†w~v�®ÞvGç±§V*è  äÒ™®“œ™Å"þxb®®ŸÆÐ‡™Bj"Ê�@Kèw€>QGtƒˆÞSÈS‚BY-ðØÃ:¸¸”¬vÓ¼�ˆô=2òÄ�òŠè‰èГ™¸=*?‰lFL¡3…;é:8rWÅùã5P(@Pæø¡¸£µ®~·3\>ž£˜yå7�*u�pþ°àc9kßÊÎèá[éÉ W~÷ÇçMœ@¹~òYuí›!� g� Ö¾)Ù¬] ×¾öµ¯}í;� PÇt¹i›©×P÷›�Vïø6Ðs¾Áœõ€žúx®³�ÞüAäPQ@ OS'бº©óåÞÕ‡>Ý»žÛäºû¹‡ÎZ÷ý'»kÌ…²üO~xJ×ÂM˜Ã挕û† gÔ˜0§Î@(Ö¿9 ÷�)@ÐÏþÄú7ÓßÄ8»dÈw€Ž³ú-äîë},ZnÑdàgÍ‹½E`.üÎϘ¹vú̉úpÅ„è+à,rÿÇá è �ó þŒ.;±õtÝu½ÇÝÛ½åÐ=Ý›-ZÝyôå[†þì* �Ÿ¤ŸƒÍ°‡Ðçr‰&f‘Ë- D]†>%—QnþHNí¹B $€‡ZW¾ \Q�Lä y¼�ãG`�ÆüæQ P-¢Vw9ð‡Úfɪ7rÀ�B! Ñp‡š\ �G@Êz9¢Ç,wÿäÀgàû?êbpÇbÓ{@r÷7w€OáN.ýîµô&�Âf ‚>!u©Î—Zœ?8|¢�Û'uþ4\G? �:‚rÈà ' DŽÓ‡ü©@Ä�D€— qþxÌÝAõ H£¨}Ð1úxÄ$N è;äI‘~íM ŽöÓ•q¸|4WçµÜŠ<½pþxp··ÔÝí¹s�zêš÷ɽç�­ÜúÙ†¿Ù7zöÖ‡‡ïÞ·:ƒ=k@¹òõoûé9ð‰:"=SCç�ω €¸û1D^‚@ˆŸT¹ä*¯SØ“å²"ÎU]ï¢'(D ÔQå·~f¤'ŠÛ>9 šq©ã‡Zz(ue«ß¼0ˆ¾žˆ¢¤ŸžˆcYÏü1 ôüÈJ¸ç�Kgâú@ÜÉ@€r¢ˆ°'jqÿ�ÓÃõCDÀ ‰[¨-à“÷îÐHµˆ|VÝèg91P u¼V‡O½qÔ®„k_ûÚ×¾ö�Ž hÄt»i¯©×@3¦MçƒëgÒÐu¸}ˆzïÑK ”@ , y.�'úäô‰¯|¸¾óøOïèÞû‚ƒÕÄU¿œ^8±›CP t†A�‰‹ÿîÔÞºèÇæêÙ5 ÚÚ[bnš•rN™ãi²/û¹?¬€‹;@�?Ü ÐqÓÌô:+àÂäâМhÑ9ÏôÆú»�4¾ÇAÏØê£½Ñ�üðé×áþ±ˆûÇ¢C P¥6×�©7+>hwoÁÞyãÛ§;Ÿxò±îÆC÷ø¹¯{³Å�¨{ëwîé|éõ o®TÈ“Ý"6ð' Nä+ý²Ëùwõîí£Ì¤…È?—zÞüÀGrŸúÜ?ÑSøC]vù”fró'ÏËRØ“ŠïÄýC”^I¬z›?}Føà —O¸�è©øbž8~Èé!Ѥ«ß¤& à!J_bU¬xKz¸~¬&Wèƒ+H]?%ç�Îr×JÝ>‘ ø):�ˆr(`3Ü>äÄô}`дǴfÝÀG×ÀE Šž ¢å«ßÊpÇýíä{èäñ™ÜŠÔ‘5pÀ"¹BÍ©]äù*8œ>>×^„#·yüDŸÚÕØ”×êê‰Y¶òMúDr È#n äþ¢ï`Ç£Ô€ Ÿ„jïþ¨ã§ûèS«FÏÝv÷Xéæúâüëw­àCÞ@¸|Èópû]ä}ÈM {Èk`�BbÙñßxD^ó= føü) ­ÅýS„B8€A¡ZD¬�>ÔÈ{Àd3 Oââ[úHá=W̤R„Š�‡È ×�äÔ…DBž[D@] 3r°é ·O|;×crE/ƒ=@žÜñCT¸ƒ#ˆ™Kó|ý›Â�²¾¥ˆ|PèSž©«É,ÔµšX·NÝ?8€"§×—ç�øqá¢ß öµ¯}íkßi‚–™6›z µÅ´ö?ªëçLÓd}S�ˆp‡œˆ<ì)¯#æÐ‡þî·oí<øòÝ;ŸÛdz¸{—éSÇîÞylS÷SÏ=ÒÏ'®üÕÌòËßÞ1¶äÄÝ&g�{¤7i@ä÷€pä,5—Ì¢¥Û¼´³·üÂïÛ} Nà÷|¿².4 | \8€üöO@ ¾û'VÀþX4èÓ—×Ü2ø³úXoъ݃ƒ»ó3¶êpo¡ý:¶òÍá�ƒ » (½äøaœ)\@û=†Ü´`Å´¬{k¦Ñ¥S{:“ÓÓ�u½ÿä°ç¦C÷w7ºÏt¿å­gµëÎ#wÚ} ë'Pˆ>0è„wÔñƒÓGæâøAôY=îý ¤—º|½2ìI]@.r½ýCdQá5‘Næ^†P ÊAP#Í ÈKR�¸~˜5VúP‡˜ÌAܲóµÈk¢Já=™‰?�œ?yø°þ�¼Îõƒ>9B u|5³ãe§bða¦à'Žq͹{PrÛÇE­Ž ?yŽ@¬ySD=JîEDô]5n í)ø• ñÅâZ¸ªžÏ@Ú‹~=B:'OÏ*úêøñšïÐGr�BÔ8~$ÖKá�:ƒ¤Å ØCð @5ð§ê�{Âá3Ûs\Ñ¢G>>ô�C“#ÝqÓØÒf+ìÐã#—ì¼·O®öhM‚� Dß"kà""zŠRÇ�Ÿ�ôe^¼÷C­. =ù*¸ÜéC®3D/?DÖ¿•oQx€AÈf) qûÇEß YNøë€Ð yæÒP's@PäH`Pˆ ´M@O¬KèÉ•¯€Cô=…øèÑ:z£3ðc¹¸�®~ @¬+Ýbí[}ˆ|L䬀ËÅ,‡<Uôî¤kßÈqø�›È kß"ÆÏQËü‘ÈqU€�©½Ô¾öµ¯}í;Ý@Цošz õg¦‰ÿ àç_G ð| ØãÀ‡}>9 B^Óôø¸ü¤RGëÞ¢>ü;�¾v_÷Žcy,º<Ÿí¹ŽšèW3}бüºw¾5xp³ìüWΜ"äÐé,ƒßßÛ7hs"ÈTq�ü@®‹ßrèã²»Cærç�ë¢:ø…èÕÞ}×�•“ºócÐfÌÀ�CÔA¡g<†(àÏ!Ï-‚,ðþ2÷ÏÜ ×JƒAã» ülèÏ;ºljïÐÙÓÛ‡Ì54të‘ûº·>s� tŸÇõ&�}¼¿sß±;†vÿõÕ €>⪨Ðþ( ÈA¹#Øb¦Ê`uñPƒr‡}¢„ÓØ#Jú8{r(¤ë߬&w‚Ä$·~<盂ÔÍ“Ì=?äôÿ4» ¤ëÞpüÐÓ1\>À!à·?)²è£À‡X„¬&O\@Q Dôipûá W�®C‰ÃGúÙ7uôP'®àŽÖ8€ˆáôÑÛ?ââÛø&�AÔ².ƒ@8ô‘ÙK"ƒ4ÄDÑO\Aâú‘ˆ¬Wé+ÜI‘8�€<@òð’y~¨N‰ÐCŸˆ<Ü>Cä=œ?jrj”ô*«ßˆâb^’8{T̶z¨Qe%Î Ñaqÿ˜2D??hÁ¥Ó—�-Ÿú‹FàgéÔŽÑ ¶oúÒÓ zJЇ¹ÎÊÀÇk‹õ’µo¸‚‘7¾D­½¥þX�\{¢ú†<§ìñž‹žJ Y¯}.Ð'À)Ô!�ÐC_?€¾³Xé‰Ë‡\{@bêü!Ò£fåù=<;°‡ì 3 PñîO{¤_#œ>}�÷¨ym9b\À�ä&ÍËΠ\À! �ç82P|5®•¡“à§¹pöØór0'fäâŠô)ÈÞ\Œ<`Pëj_ûÚ×¾ö�N¨kºÆ´³é lÓݦ±?TðÓ5À³Æâúö Ÿz¨éðaÕ›DéeààCyŸoŠzþƒ›:_úÑÝ{>i çö£Ÿ±h:úHÈz®>ÚÔùÚ�îƒskÖ®ãÓ{‚*¶žmÅÚŸœÒµpãv猓€'gšcfrÝ{uð'ô+[ýö^8€Þs�¹ ýmÜúSÜÿéC ‹~kà~ô1Ç [ûÖwì Rü>�ý³›ÃÇt´·pÍs}èã«ßLÞ1ðc=]WY7»î�•oû©õ?~ìþÏèI¬§™Ü±­ïüZ¾£çè¡—>5tøí«:�½r³ƒ=Ý=àYïàÝLƒ:›_¾uèÐÛW%·€ �püÈ,@e÷©ã‡žôQô>ä¨! ÒÞ:r�æ•(€'ƒAÕ™¬}óo<§""`�Ö€¡"Êzuô”�>ôåÎ�‰P'"}Ö½™?Ô€žèY.÷ö~¨#g \ý- ½ÿCè)ߪ�=åÕpõ�¸~p÷„äþ7�Xÿ梮B'¦×�Ô ‚¤ü|<’Gͼ™3(rÀ�@ŸlÀg�Þþ‰ø! TçöA|×| =îqûpûÇ"¹I Êoéú7T†<Ú§NÖ¾€ˆ�ð€ÔéC´¾‹^x¨Q2öÔ¯ƒCùÚ·¼¯ø�+ì‰úp&œ@v*À‡uæoØsÑØÄÖÏ7?K¦öŒž³íÞîÃOž£.…;5îò¢ëDn°&fžGíúïþd0(nžz TëüÑÐÃ:¸È3ÇOˆý²#ˆ:wþЧ¹K@� \Aô ˆZ?(z©fŠ0(«Ñ4Ò:`N¶ú�ð#·P {|F/T>È��ÿ 5p(rzÀž²tœÞùшã‡È ðCMO PAºúMAsQ²òM{¸~�¸~’> (YG$Ϥî飘¥7€ÊkÞJ=…A ‰ø˜È@ ] jáOûÚ×¾öµï´Acvö™z ´3ÀQ÷iÝÛ¸éÚ9êú!÷9±VáîÁõ£øMÅ>=YWÕ«ÿ²¾³åÍ;ºw=¿©}B{ŽyݽÍuçs¯ß3ôÌ/7 ½úá “×ýóŽŠ»æšfÎX{lj`¨²òéÞÄ%oŸBôAo¹­Z[´|z`�²tÍ‹~ï§°vÎ�;.5ü_÷n?: „ÈÖÀ™ëÇeëß<Æú·Ðë¶îíY_Ùv2w~àY¸æy?æþqì™sÿŒY±:\@–›pþÈ8qYíy¬~Y13ðŸwtùÖÝÝóv?>´|zß�9–fåèØ{Wºö½uMç¾çîpÐJuýÁ»ßÛùó×oêw)wü¸ÊPèm�@Ÿæ÷È îrj Ðç»äÞ7X#«à¨é¡Ò*¸è‹ã§úä3½ù£ÎrÀ@‡š<³²2ÇOíM ¼§·€ê¡Ð~Yù–A!À�Èû*\? 95°'rD-ð'YýF ø!¢öh_]?ä…›?ýˆ|íßyX =Y—¨x󇜚¨÷~tFŸZ…ëG#N¢‚"æ(]ù¦ À�å!qûÄ,r9«ß¼·yêþòDž ¾1 CO�?¬tc6[§ëß¹j> |è›:ôö3j7Éíg\ùÊ7Ÿë- ½÷£ ˜é÷ xR©ˆ~5»¤7=ô½Gäuþàö!{È«7¬~ðÉÕskøÿØŒMnýܼÛö^8{+Èb#5¼ý“:€¨qú¨+H��ÞÒo2ä±x´¯nz.>ÔÀ«É‰$à‡èÀÆ#À§üùN�?€ö�>ˆ;@©Ô ¤ˆ>°‡>NuÑ‹ˆj\@*¾W—�Ü* j �åÄíÔˆï Þx 2 ü ÈC¾ÍsÀŽÞþ!ÎöÉøP{^\gÒ{?Ú�Uoz)ððh_`Pñéº7r�Jg|€@ôWøã5.jÀOÀ Ï[ Ô¾öµ¯}í; AÐD¬zë5Ô7Mü{ƒŸÅ¦Ëòl áþ‰XŽWq=\vˆ^IÀ#¨€ö¼{[÷þ—ìžP×gûòüÖ£ŸéÜÿÒC{Þ¹Õ×Å…™p-Zµoz°ÿÒkoÉGŽõV^úËS‚ à8È1 3¤p€´ü£?°û@ïWàRõÐ/ þüÜô.ð§ïþ¹ø-¿4ëZbê»áþ9ÿ¥Þ¢‰½'uçgá9Ïô9êÈbè껂¹,7àãùH¬|3Í­‚ ÷O ¸ÿàgÁøžÁ×½™æ­Ùýxgr×LgùΞÉ�?–[ „“ç½+ú÷~º·}÷Ó}Ðcrà3—_ç Yïö#Ÿúö�¯WçOä`'byŽðDè#@(“γ»?D PæbàÑûºúMû*ë’™¬€±êÍjòˆ(z5àG Oq¦Ò™@zÕ5pô?ØC}ÀN rúá¢u? ø¡G,;~ˆˆ93uù‚ ‡® ƒ3Ô™ÈàMDdP‡ï¸9Î Ü?‰óçx¥–\ê\ÜÉ�\?ôà£îž¬ODô=䚦ž…:HA=€�+rYçßåàGÝ>ÔÀ ‘8}¤N`�‚!úô·rð#p(»Ô|õ[ž›ÈΟД ÇOÌ¡èeÀåЧ±æMµ’äñ5бÒ�\ÖÀ¹ðÈê7Cö }œ?Å4a9sË;_Y±y­} QAOÉ„€:yŸ±Nú¸�ƒ?¹+¨úÐî ®Ì�Íu-‘{?.à�Ÿ4'Úø°þ­½ Ô¾öµ¯}í;ÍAÐZÓS¯¡6›–�jð3èÿõ¢pøl GOäÀr]—€ =j¹õC/>z÷'ëG¬êȯ6v6¿~Ÿ��ÍÝ[ òÜjºåY¢Ëò¾>õü¦ÎãoÞaN¡¸ôá¬@‰V^ùÁÞ¥W¿¹elùö½A•e;zË.|ݠʧî>�[í60dY´l§ƒ$ûuX׿ýcÈb¬�Ãýc÷\LoúýŸÐìú7?¯ôT106 Ki{oáÙ{‹Î{¡}Ðêc¦çú°'À�à WÀwû˜üÈú·ÈqY ç�­�›èõÆNbÝÛ‚sf¾Ý=w߶Ί‡=�åÓ€B8€ ú�Þ›]çve狯oì®?|ö _{ð¡îu´Ü£ëÚƒzßbç�n·UrW�ˆ5(¿ûÃ�r+àA¨|ë'wåˆ؃(QÙõCo]D¯+@g¶1ã;êÂê7 �Ì£‡û‡èÈCÏòˆˆš¼�ô¨€?ZÓsˆC­. ˜É�> ÂݽYÐÃ\A=àŽä‰Ôé“ÞÉkT³î ”èxá� �Ç4¯¿T¯×ÒìI>iz´¦¯0(¢€à�8€ÊNíë78ÖЩ¨´î�Z��º‚È]ä|=Ä !¯Åýƒôæ5ª@ v kà|V«©ø.à�+n5(鹘7@ôü4_‡´è ˜Cs\@iÄéc¢ç€Øµº€¾ypbäâ�׎-›z¢øY655²vçõýŸ3xô!§/ §þ«àˆxS?êð¡gʰ'fƒCfzÿGëܤààà àßzŽ T«¯dÚƒÓ' µåRgp§ÎÄwäàã}…C35îêÄåƒpöäÕˆõp(úy˜€"¡ªëÇç¬|C }˜—ïáö¡‡ÓÇg@ДÜþ©¸~˜Eí1¾ÉÝ?!jqþpó'zÌ�;D€Q²òÍ¥7èGÎlPS•?äp*=ðñ(ð‡\Tº„ë'�>È^ �Ú×¾öµ¯}§16Ýhš1õh¯évÓÈïüt ÞœkñFÓFàÇ$ëÞÊ (júÀÖ½é 8Ïs­×:D_`PD8�oüôÎîmÇ>cpgóðÍG7G =ûÙ¾º¦>üé|þ¯îzî}ÿ9TïÒµpg®ûރ€Åã{{ãûëS{ècoÚï‹Ûf�i0d¹9yÌýã. ¸ÿã. ƒ?)2ç�ß:ËÖ¿�qî‘Þ¢ñÝ'ñgð;?½Ek^0øó¢É£;€@¸~þDnð'ôÌœ>‡"†H@£'±žnt|ûÎáóz[º~ú꬘6Y ÷ÏltÐ&qYN4tàgWu7½xÛ°�ŸákM׈xp“ÉbxÐãMß¹¯cn < AŽrú@juöø,=Dò ˆÕoojÁ9½@Rõ$Q`Pˆðƒ€@䀛¨‘¬†k(=ÍëÝ*5�‡¹ ÐcµÃ�ˆ.ÏåHò€;^«SèC.Š~æò!âìI$ðg@麷òJ¸ãêðIz–ãøAÉ f~Jˆ§5y@…@â"fpÈoý�»pü ëx˜YNø“­„ó˜¬{cnÒ•oˆû?!«‰1ÃT‚L8‚D;RùŒ›?ž³êÍÜ©öPì�£èS×Há�æÜû!"à�‰^ˆï¨ó;@YØ£ysPÞ#Ïá�ºƒ,&ª:p÷ˆ3ÈáNdòÈÊ·¹8ÿš]��oýJÃ;?3£k¶ßÑùÏO�-à§(�>E(¤yYÜõшAÙ:¸ÈÅíuDDÝpõ›÷¤&"]ù&=@9u¨úÈ*8�Hïý¥�ˆUoÑøëÈ¡5‘¹ÜüIj\BÍåP'Y‡渢.;ƒ=* ÊWÉö„d àSÉéðAÍ@ 4�;Z›Èc¦kà¨É©öPGN_r�<.é J{ºò D¯ü„¤b rYóFŽ´üÉÖ½yþHä|¢èIV¿1çeà§…Aík_ûÚ×¾Ó-6Ýoê5Ô6Óå¦ÎÐïú™ãg¹é`îŸ* 21+B$«Þ€?ôÅõ3ò€;ä²ê-5ùÑÚØÝô½ ô<ê°gã³�š<ü™ëõ¿:ø‹›ôØÏ›ÛðCj ñëþqë¢ o¨pgÍ©�;�–]øýÞ"œ,ƒ˜Å+v÷Î0Pr–¹l–žÿro™­v[f g©¹|–œÿjï,3gÚì [Ѷؠ «è¿ó³È€Žnýð9ꑞÅ@qÿ‡{@Üšsÿ„ë‡up®CoöìR]¶uÏðù½¿ìNìÙÛßÕ39ü ¹ã§âþ19ÂùR 4ýæµÝ;�Þ5|uÀ“çW0yÜd²Ù�M�/ÿ&uÕ¬z#æN ˆŸS#�?2/ \@~@¸�4€ˆô2­Kj@OÌ=Å\Ü?¦¤öˆó±òÍE/"w�ÈÕÁ�Í¥Î@�‹YÑýƒör,Ò3ÐCŸ9îžâ àOs9؉uzûYÍ\ú¢ú›?ºŽ{´�>'HODÉUEø¢¯€GkÄ\×ÀQ{ŽØc¢ü!§Æí£Š™¬#*²ü9/bÍ]€äÆOˆÚg¨è"¯¬{‹¼êü¡¯ˆ:yƒèeîzäõbÕ›@!ïE¬Üûê”�?âö¡¹ÇߢðƒìHÐCžº~š€ �¸€ˆ¦>H�?&ú8€æÝ¹ïü±•Û67?ûFWmÛ4|OouÜ G)Š>1<Úo&`�çz+(úUÐ#ÀG 33òþ¨Ó‡^D™ë 8‘®‚£‡ HÝ>HÀO ‡rø³G@PçOÔ¬|£æÖOÔD �ä™ôî�Hà�:~ÈAºÎký€ŠŽ>¬£·]VÁ‘ûL#yæ 0Àç�ÜJœ@ ybà©…@ê ’[@ÑÇ 4š­~Cô™å°ƒ¬Ü‘;@¹«‡oÅý“Ý"ö ô*8ê\8€ðÐg†äÞÉ7©bfÏsqÿxŒ¼…@ík_ûÚ×¾?R´Êô%S¯¡¾júÈïÊõ³ÐÀÏ:‹-âòAÑÃí#. f^×HÜ>âRi‡yÔÔŸÿ`C÷îvÀ³Áõ¹~õæÙ~÷ÎîL¿}»ýLÑõÃLPC-¿îÝo-\¹»Ws9Yºæ¿ÙsŠ@�ß"Zb�¸ñ‡(îü,2`³Ø Ó¢ó_òÎÓK±Îä  è˜G@.‡>‚þp÷7ÐDoà;?c¦ùköléž½wzxbO¯ãΟ]¡™€>Ó.ÖÁù @ºŽšžÅÎ7ÿêÆî†ïÜgÐça‡>³ºªê|É �Ã@PøƒóøsYÌ©‰Ù­¢­?ùê7­;ôÈ½ß øÐ“ÕnôÈ9€ÈÅùµ®€Sùw8�Bró§ øÉ”Þûð¨ôþ½¨üÔÀ r@PDÐã"ø¤îŸ˜ãüöx�:€êåà§xŠHÁ0ˆ<ƒC'·€îX�¸}èÇ,uû4AêúÑ}jŸz20TYõF”:‚€?€úô9Mî‚pyìA¬�óôøˆø†p—�I �ÎX÷èÑ5pÑgžÜö©B¹@–7@€Ö¼ù·‘«Ó0 ò˜(¾UDD¡T|üA |¼ç�†À‡Z£j’~8ˆžWbÀú|Bîúén~êœÑ�lÿ´ý]eO£¿ÓŒoýÂüw¯üD ±ò­Æù30ôìh-î©Y'=úƒ=Äëà�Ôü‘›?ˆëÞXýF_ �Üÿ‰Z€‘þW€=¢€8ÔêòOê�ÞûÑ•p w¨U1ÏVÁE¯våÛ\N蹸…’»?r•`�K�5 w�ÇÈ5¦7�€:䬂K%nòÔÄJ8Ü@9øYP‚>ôBž:÷�8"”Â…>ÔUà½l-œôkœ@ôjÜÑš à!¤ñ@'�zó‡¾KÜ?‘GÍkWÀµ¯}ík_ûþHAÐ:Ó”©×P›Lgêø™gÐæB‹ü¸È<ý:5sB&@�GíÑÇ ” "Zo=rú8‚^ý—›º¾úàðMÏ~Îô¨Ç MQßrlsçëoÜ9ôʇëKÐÇ5À ¸L+¯ú`Ï’+²eléÖÁîXþÑدuêîM|ü_ëö ~ À,2'Îâ>ô¹à‡?&=±þÍsÜ@G¹ù¹�“ßÿ±èN Ö¿�¸´roÌÍ æ‘UÓ[‡W?95ln¥á‰½½~ìŽïž@ƒ€@¡8�6½|'HÀ�hè<óÎ�Ͻz‹¯€»êÀáM®+©;Oü„upH�ÔÀŸ¨�BÀŸš•o&©ÉU<²Žû?€žyîâz5.  ›I×À‘zD8<âü¡_ €Þ,»€"§.C©É=–kÔ[?‘£ü�A„ë'æ|x¨UÞgý›ä¸€ÊÐðCèC.=îþx®Pƒ€@D€�@ ÎQ`�ò¨%Çå£  £«áˆ@à5eÐ'¾ü WE¹ûÉ*¸¢€?¸}fõ’À¯É­ìQKt©¨èþa3�;Z›È‰ x€@V“Ì‘ºù:8à5b¦ ˆ\áOÔÀ«‰}¢Wp‘†šßÒºä ø#PÈ#Jïÿ�¼·ˆY€âôõƒ+G>ºcÃØÒ©í�ÀÏò©Ç¬›¾ÒWÅ|ô™Ï ·. ò] r@yS÷�‰èCO]?(?™ì„zü^[·¡y"¢L€Ôäµïï<óâ¾t†¹OÆÿô­SzhÅÚ7|¥Û üY´ò©Þb<‹Ï¥Âõó¢GA6=7çþ9øñ«ß¼ àc ¨¹töÁÞèIüó�Žo›>ÿÉ-}&ö˜ö™öü™ íòÚ@«àíäP¬€«@ œ@È�ÌvÿÍ5Ý[ŽÜ3|Å�GL»<­æ~ƒE5+à„ӇYr>V“‡$gž ŸÉ½�‡¾Ìqý†âÞ�‹Y–s÷èC]sÿG{Z»dý=<‰;&�<Ôƒ¹ ç�+¿„ðP“ãúÁdÂä=¹ñ  ã1r‰zûGr�€ÒÕoÉL?ÄðPk Õ84çöO€ð“Jî5À•o™èë  ]ä™8É= `Q”ÝþAVO—ÝAÚs˜=uû˜¨�CäE„ûGAO9ªþ8ì¡¶\�AQ€¨\ãøÑ#"…?¹’ïôÎ5N ú~´ÆÉü)­}#GM`€'D�;�>Q$ð„ª÷Y¿k<âò|Áe3—Ðù‹FàgéÔŽ‘ wÜ<ôÕ“vBwÈQ#Ø“öCiO]?ÄPêüÉoþPk¿öþO '$ (‡=Ìè‘!€Ðõ\NO!PÀDï+3øôAÞ'šŠ GgÔ }Ô„jVÀñ½€ž}=…=zû‡¨3œA@  �åè£ ™Ï$«ÞòÐ�ž‹n úDND[Šª€�òê7j`Oã›@¥uoRgN ò<~¸ÿƒ¬v‘³&Î"¢gõ�[A¢v\ûÚ×¾öµï��ezØÔk¨o›.©[÷¶Ä ÏU~2é àãð‡\g8~�º‚ˆÒ¯@ rŸk�[?(zÝ{_Ù4|£AŸ�˜<ºº·>·¹³ë�Ûü�‹ê@ƒküú_N-Zs`û Pá,»�3ù‰¿?…÷�Þï-»à{vhû¿øßíàçŒ ^�?¦Wú˜,Æ —å_ˆ[@¡¸ýc¹ƒŸp¡A~çg¢çn£�ÀÏÒ©½ó/xò/‡Ïîí™7¹¯7o²×v÷�ËïþX=�:4íÐÇ@w€Òpêþø¨Þy÷Êîƒ/Þ>|Ù�Ï _~àSħ=ï<öêÍå5p@²Žp%•�@1§�’^¸~"šˆä6W|5 8¤ÎŸäþuô¨özpýP+Ê!ßèå GòtN¬‡>ÔD]ï¦ À£5ôÑupHWÀyN èÑ£®‚j±/�UçD$îíGÎàúvèû,‘‹X—¬|Côjá�®xÓuÌÅD.nÉ:–ÏD „ãGîüÈ} W}"'âBÔºæ ”Üû¡ödîŸi]ûF]U8{¨3'�C¹D�óGÄŒø£ˆZ•ßFÎ œ?EÀuˆ>yý8€�ôð¬tÑ—[?Ì=†»€püEx¤>lyDy8€æoܳvlbë箯Ý3zî¶{»Ÿ}êÜ>*ú�Ý>z(TçR)èñ”;}¾‘F“Þú¡Fôø(*@ :÷OIz¸ò~¸„"¯�>`Çs…Agm&ߺÊð‡(Ч òuõ[ôŠî¾¡§ˆRÐãèãR—ß)"FèIr8)ráöÅ, ý¨kûÀ î…;@Ÿ| œÂéÇŒ(R�åõÞ�Ö©Èr©É‘êbà#Rȹö¤_ƒˆ }=ÑKû‰àC ð™;©‘@¾UÀc½ú´¯}ík_ûZ4µÆô5S¯¡¾Ø1x3$oÔt¡iÅPö~ûÛ¡¡N'òßx}ˇ¢´”$ý5üñMïǯùëyæ5¿¹ý¾ü°�<¯}ü;žÿÛo»Ãoþ÷ÕÖðaÄŽÅßþÛûŸCgŒü¿¡n·3ôûýìgô×¢à×ô³ÉŸüæÆî¯‡Æ,=é÷[ûE=ÿÿ¯ÿó?þÛâ¡_ÿßyL¾Nwhä¬ó†F–\`éðЩx¿ýÿì½Y¬eÇ•%¶âÜ{ß<äËéåÄä�drE‰’JRI¢†ÒTª2Ú xv·ýgøÃ.à †Û†]F·�†aÀ�lÃ0ükw Ø0P%©ªKUš«KCi %J"Å!“9�9ç›î½&¯oá-ì�û¼+eŠ*� ¼<çDÄ™#ãÆÙk¯µÇÛØºòü_.÷źb¾³Â½je‚ÿ7ÉñÙŸ¤l÷åóŒ}¢w÷ɤ%FßYÑ2�Àè³Ò£s|M0ïWGàjÆqùlà÷ ûþä~¼>̹‹» AªkFŸ.Å}~ìóìßœkM²ÓG»¬>0>±¹a‹õLþyq"ÿf”“ùS×ÉâùßÙ7SNäÞ¼¼@š÷§.+ ˆùþÇ?úXïCÿýßíýöÿðïô~ûÍeýk~ÿÿ+¨lŸ³€Ž>óù¿°e¦Éô_®>ý¿¿•连†i²tèïÿá¡Gþ�{* wôÿä—�ýƒ»žçgéMÎÊ™ÿõ—Ïü/o1øwæþÃ¥7—Uö­ÊÀýO&P•}#û‡2poýM˜?P•€{ó�ìŸÿèçÿýéåÞŽÿçÿiÿ�ð÷úoÊÔõ�ý7oI½M˜?ýõÉú®ôóÿ0÷Ï›”}c.  ûgò÷¯þãÏL>š¬ ó‡Û•É3YÖíÿ§÷Áô·{ïúoÿ�ÿÿïþësëÿÙ$ùX÷×ýuÝ_÷×ýuÝßüáÿäߟyßñ¤%óVsÿð�¹€ê’ìè6Ë ÆOô÷UN·µ­ÍâÙ>\Ÿ0z*û§.Y>Y¦�n+ãG™@ˆì©wr‘ýÃr²{ö0„‚¼?"õ¦ud÷(;¨2{¸Îœ?üó$ß⿚çÇcùylV�2„¢Ü?&3ˆË½åµL¤ß&KͤKeû�%$L þ푇›¬“½#RoÌT·”Ý£9€4ÿ�2€ÈF�0˜ÏGrU6·Éø©ûÜ™ùÿYT)8•ˆ«e”t3˜AUn²ä:?ÊòY@Ìù£ë”v‹ÿ\F�þŲp&ËG˜AÖY?”zk'ùÆ¿šó‡ËZ¦åã§³Î:묳Îl6Ð웟yóÓ7[zd€£Hé!³ŒŠ£Ë"c#e/¦�K ‘cÀj=€VfFm {½ÿë‡÷#•Œ’šÉ@90¿�ÿöc¯I$Œ‘èTàÐÿSž˜¹ˆ¸ 6Œ76¯ýh<¾øê2¦°Þì*æ?>YÞ+o_ÇÎ�W0¼u�Ì•_ØÒìò„õƒ¦v2y€ÂõÉël�óhOWI•=FubÒ>5@O–%óšÓö ¤áæT�G¹ßެÜ,7ÇkMJir^4{¯Àä:ÇC¤¦W»Yʤ~7ˆ°ä,�Zõz>ûàWñ¾ãWP·¥‘Gù1£l›ÿûg'ÓµíEÔÿ�ƒ‹7N6Û£¥n˜í¬³Î:묳ß\+ n棃¯ojõ4© ”€B‰‡Ç’cxíRÄò¿#[0?Æ9È–°¢õ'u ™BH‰‘ñ¹@o¬6‘¨{ƒõÃó“¥Ëí=LQš.|*ƒÒMT¸¡øòþ¶²8êBËõ|†dù÷&ë¶ñžøN=öWÀ&sÙ@>Ãlˆº?™d�ȃöØ>¾Z†ÿpô€¼7çý99 K>‰Kž{d>§™ *°K{翘¬ayІuÚïØ£c·ùNÙÎ:X÷c¿–¯Ž›²��RÖž Īâ´Æš,QŠ­ŠÂÝØ¸ÖAüKvÿLà3èX?�uÖYg�uæ2‚ø=Á°ôf|�½·Á‘3"àA,8i`CÊað«Âœ é$eÏÍ‚òfŠÎ™›òƒ“ÍÍ�Yì�ã”üÁS—Êã‡oYRá‡B�å,<[ÖV¿ZÞ‹»hÃÙ­›¯|g¦Üº1‡)l°ts‡Î¢éÍâ^YÉ# ožÃö�W�‡·1�¥ÁšÙU¤Ù% õPJ–oåLEAõµ5u=Sw¨T©·ZGˆß¤“úÑ&ÒÖõIý~-'”ñÚêղݬ¤Œ~ÉãɵT)º Be‘wãõ r™HÄ¡LöO”©£Cf„?xï°Ø¯ T*ÁœË³ŽÍ€�zÿçó� P÷apñæ©f§€:묳Î:ëì7Ñ °Sô¾µý±•ï—•ÞXäþÄAË9³LD4¸L��rŒºÒ4IÊ'§ÿ�Î{| %ÏWÎc‰l—'ùÖLÊø,L98^ËøÌø½U`œÆ‘�K¾–+zǺXnMϬÏE'×H™JÝÏ·¤¡Æ~`€„:—6¥ßbÈ} ‚± Ù·$Ïrb™ÇWÓ—á~Ô 6És£¬�C+‘¶!¤hO�nÀ:C¦5í–Å`³öw£8Å}�À”9æüáû5eþøÞ¤][EcJ$º×©À‹m�ªÀ´Üg0Âqá;”ìÛÕf®n^ê Î:묳Î:s '|À {‹¢ ÐÃÊÁ<ù�‹+}[?Ü6ÖEL›«4�ˆúhàëH·Ò gcÞš¿xé`óÓ+9dJø¾ åì¡ =ž7Áâ6íð?Íï\ÃaÜE+©”íÞÕk[/|g%�F=ìÓRêaví¡IŽ ¤wÝ*à1Iôse´‰<Ü@Þ®›�©‡Ô¼õךþäÚRif©7cäðÉ !˜Â¼9 ”¤úºÆ n—wëØ÷�INž·þ¶®ã!¦±ñÊâõqš4;X(%CAÊUçšóg U`«.Ñ  �D·»_á±P€û–_À¿ûä³€NàkÄskí�RS­æk;ƒÞ—^=–®o/²è_ºq¢€:묳Î:ëì7ÉêÔc¡ùáð½‹5~pnÅv6k¡“%Lã�ÑœåYи Ù>BRËôi�\xª ¶ï\=É9‡Çó©.þáÔ¹³<yÐ Z¨}!rb³¡ý­¨@�°‚üT"EÊL†‡ßß•â8îÙVÀy5~y§TÀCû¯’÷Èãó“çÆÜ/ûd†y¥ *•,¹%ÿ?Ìœ5¾ ƒNA½`+r⨨A]fn sÈgÌ¥Ô:÷�–å\\à‡¦åmòMqÃHséæDã™uüWd¨ ¥�:묳Î:ëL€Ÿ~À} êþ±û·ðØ{fÑ$#€‡Ñ!BÖÙ@iÆvœ$xsê =w8yÔö·všÞ?{îtæ  É€ó#¯æÝw ½DŠI4Ñâ:úWÊÌ¡ÿ·¼¯ÙÆî²å^ní¼t{ç¥HØ¿5ýyÌzƒÅuÜm«¬JÁq9�’‘+€pŸ2zGÏ}Šó¶ê3�@yg�uö7ÑÊLzitvþëç¯*¸báÂTIúK¦OµÄ¹t(ÖÆùGò«#Wq«4cA>d_‹ ÒpZFãó”rn [H&@ÆÍè­«C·.m†Í,÷sò ØÐð<Ò§H«J{6“E¬°¥¾Œð9‚=fp#’½ñ®›}?@F•ñ# ÿ=P/�“+ I ø@¾‹Yg³Ãöš)—Çyw+-yßPJ •ç›×ê€Ëw‘¬Y€�õݱâñ�¯)0S>ÒG‡ I¥�w[¤/Ô‡ ¶ûÒ9Bï?]uÖYg�uö› ü,ø$€wƒÖ¢õúgžâ¾GfÑ4©µ¤ïü£\‚ [Ï`ïä¦]P­ck¨qØ|çÂró­×ŽòCDòȬÌlçß>y©Ü·ºmM®"ªõàR™;øGå½Íæql<3º½qù‡%¿qa SXþ æ=†ÞÌ2î¦å<¬ßÖc¨`N®9zvv'�†FµÝpü@F 2Èš©9{ÒdJʤœ¬ Ì®Teá&eÛ7�vn¥LÆ5£|ðà�²QÖ�sJd$íUEÌyRžøŒ×ˆ ïýæ Æ¼DµAY›½„íìwpxag�Þ¸�ÌhDØàL/Þ˜oþêÒÑtkgÅÖF( ýíñ¿üàÏ1×Ïë%‚L$Mªü‰È™È€`û)ЇÂÈ�4d=Kxî$>õw8ª{—´â\JrëÚ†óÑ=OM¢V¾ÿ±é9"Ø&ø˜öä.Mc}pKs”ç r8H?"p[X'Ý�篠0¶¤_Èáyz²üö;³QsA-ã³@�Ÿõ�yS(õÜ”dDÊõ¤¹xÅëâqèB‘ø¤É)�Ræ C-Wð<Ëqë\€÷èýÔs##è·¶c}â089 Rr}®|Ó<¦öªR·J‘ë×n¿ëìM(攄Ï~²�—j]¡^ý¹È˜VAj^‡DÀsŸ‰ÓÈÒåøž Ф„,×Ëv`ÿëéV“^£&Öó‰Ì¹¡åòìöô¼µý‹Iî©>¶”�“i¿ÐërÁ}Öù­:ªRbûê>(®�UÚ�JBâ½×r¾ãó«“í*¥6¯ô.î|låU°ÒJ½:au<”h|¹®ØÑ©åís¾¨|�ȇ ¾XŽcÐxäÿªº‚?÷ðË:S”ÍwæªÌ˜ÇÞ¡Ù‘ý¶¬“ž .$O6<šzÝÜÑê’Ú'm§=J @¡Ûf^+'ŠšžÆ¿WíkÖÇK0û û�î Uõ\µ –}‹si¿(µ\Á6Nz ·+g¥™Šü¶b™œŒ ²¼ßèfk;#—Ë0‘ë¾ZJ >û¦þ½pÉeåH_Ê÷+æL£”$N’¼ëܯýþßí£Î:묳Î~­má?þg=ðQ3ˆ-ø†@Æ${naˆw¼8¸>0e ‚ä"Ä&f„“EÖ›z~I%›5¯±pµùâ ‡›¯¯NÚT/˜^d9µ|süáSo`unÜâ}5·Ë`íOðèÌeÇ=²�™�ë›/{·g±oK˜Y9…¹µ‡«ÜÚ/× ™?aPÈîAªÁ¢·¶SšH¼dÌP&-g‡$(”Ro\¢Qö¡²‚ØU†·�­k@c¿–䃮b4³ˆÑxõ e€e»€øLØÖPë(…Ï*UvPiÊ�þ1þÖÃ/¢—䣵.í�QJÂ]Ýê÷¾~áhº°¹Ê‡#”¨T2zi<þì韗õ…�Ãð%öTP¿�×ÅqC,ЦäRxDÚÌôFðši–»2-®äŠ'ë�;z.År¹î%�UiÛ¡_KÈ‚¬KçÖs“PUÞ� ªCƒktkÔd×€á¼ä ¼èQ×ÏëØÎÍØÂ>âõyu´ù2FÜO–<¼&<§C(È�×Úm}ç>¸Ÿ\·árQfíOÚÇôÙøϾ/Œí g¿tðºp¯'óhr÷QŠ?RZ@~¾u�à–q¥�„¯ßǸ”~àÎ75oˆã]òå)ðà¿“��©¬z#x1Q?Ó±4i ß§™—ø'‡„AÇf,yDv‘#ËÙA4¬Ñ2é#à£eÐà.Ý~ô§Vìsw›ÉçiUS:±ŒÁ2¬Ô¼íûÒm}å:ÿâ}ÔFz\�mÒv¥¿oj*(ûÚó§7¿”[®`#Ǹx°f‘$Ù÷¬œ£+¶(X/ÍedÚmü}åwQÌ÷ ¿á6ðç¡\ ¨ÖvÀOg�uÖYg¿¡àÏ£> ` íìyŸpE ?‚líè6_ó‹=hòRøa!†¼[ÑI:aÔ�V9DivbÑDtÀ’™h>ÿ‘æ¥ë«Œ5œ!½Tò£ßÈ¡›ñÊÆ`¼�il¼¼p³ –l�÷2�28‡ì ²­÷•RO¤ër½—1ÿ+Ô²Iù±ùWð{>‡c‹;nÑGÁîúÎ85߸x¨ùÙõÃÈhPPiµa¶7øØ«åÁ•Mù ±J£ÈèìRï¾çøçhàc°�¼È@»Œ§ðo™u¨ÚÚ&"­Çlc¾Ž½QN´¡>ê€Õ²öŠ ®³R·õ¹yÒ6žTrÆí‘b±I£r)hªƒÂñbqUuÆm6�#½%ànµøÒä!À †ªë‰Ù£DGK-¬Ã’ú`ÁS²ÿâÕ¾SWs0ØÚ82Ÿ(Z]KxgξðÆ›X ‰À1Ÿ“$/ôk$‹ºš{lHnË~á;0÷MP&—‚Œ&×'í'>\qΑ݉ü|Ž´•‚RìcJjç9 ‘Ö<ÿo4èÏ£•Á¡à!�c·c¶ ‡xÂOŠOãi™‚=VnNÄcbÅ "¯™÷ÍûÂ2¤€ì`D‡xƱ"ŒÊ¼É&SFûŽ®ÿ×¥»D„½²YZWF¿ÏâüHÙeK 3Ü�}RØ_¤(ä2Êô8:çrò‰Ô—÷(Ó¾iíÇü( èüÅÌuŸæþúAüXÒ:�û†óTœýß’B&�˜¢ -± ü`-?0¢Øù¢hqàM˜ƒuÏ‹å¾fÇa¿« pNh€<h¬¾ž$§‚Ì©¦aüü�;rí:P¨³Î:묳_àçHÍóóÚÙå üü,’€órKœ:³�‡ŸšA¯ŸdÂÀÉDÎa5¾“,ƒôúL‡‹Ç5òÔæš/¿²Ö<{ùP�DrgÒe¾?Ìï=~¹<~è6z�:%t²·ÇÉ–¶Jsà/ʳ/ã�TÐàXîçíÍ�¶F¯þlSX3XÄü¡ÇÐ_8üKbeÍ}SåÌ&ËÉ6çÆdÈäÊš€?“å@"“E¿á h,‘qc”Í+ÀÎmLcyf°•Wnáöø»mJ!•š*y§8@©ëúl@ù;~ìòœKý+øØ}?À»ŽÞ`·Ô\½é\Róý7–šï]9†íñ€u†yÊ‘…ãO�<�…uìâo?/Z�¸ê² šQ&'‘öîÇ ŒÖ€â3?T†LÚq¿)d|‡†²5L&¤ÊÚHÄ"¼Æ)ÔìãÄzãÁǾ‹ÖÈ;`‡èAÚ@�bs% Öã{áÔ)å;r}½y�Âw$ ÇV ÀÅ­ÀŸ¨¨4�oDÜ$ìR&û¦‘øq­uÜ/z‡Nä»JEzóÏ+-Ï^YÊÐèsc,ô*)l¥(oƒžÓuéqæ^@­3Ù‚<ž:ÑKËç2õ˜xgð§˜,X»Û×:îV¼$ÿ´(JÌô˜~<´¥�eÜQ³–‚eíÞ±$*_¤âÀÝÅXÁqTïE¥þ‚G³Â<©/#A?�—6(?}ggl|Cå]›'�˜É ˜Jƒº°ì2´€rä±P¹¢Œ>¹ÙËrc*C�G6Œˆ‚ Æ ëݾ¡}O¯¥Êx¿½%Š2Öö,F Ð x.h®·Ærí~ì Ë$W•ð¤¶Ll¯“Žé¥q_¾GXÑ1Á p`]0§Ñy�ϳ‚² ÛÙö-‡bñ™�,÷@ØŒÀd²~\–r[ÆOøtÖYg�uö7ø™ðq¿Õ2åô€?ðW2h!dÏûûƒ1~j„“Í"vÏ:GЊ þx“;ºµ}¤:ïË–™HçnÎ4öò±ts{ÚXµ-læ�¸XN.ïÈ,Ýqh°Íàb™]ý*¼�c¸G6šÞÚ¸ø½T®¾¾ˆ)¬¿pó‡�B¿4¨²ZòxÎ_3(ÛVȦÉcPR­2ƒÊžã è�w÷ã·C&ëgû&ÊÖõI»ýZnÒ¸>|›ÍäÒ€×@?\=Ÿ±W7𼓭õ~«<\AÎã½Ášƒ´‰wy®|úþóâtãGŠ˜Fª¥—oͽÉú9ž®o/€.0‘_¬, ùÞv~ס‹ù�oxr&²ù ô *5b9.>^OQr‡álÉ7Çáœ2 Aw—6¨L) Óû,GCeÀˆÈ�:�1=VYÉl8쌓«oÜS¡0€7'€v;=�ÙGÖøRn¬º£J™èq÷)ÝQ4‚õNN~²œÿÚÖfµpÝ}�M¬­÷æK3Ñä;ðÿ’ôw׋e÷u•TÐ(vúk¹�½1UAáÀä͹â!«D¹¬EÐûôQGiàH/aÂëV¹íÁ…�»ÒOŽÁz/z P(��Y,Pš‹Bÿ(dKÿ72HIäZw¸-ð|¿©SHNú¤_V·pQg½€IòÞ= “ÇõYaL'Ôúÿß`¹?öq^#aiĸÊÎ`[®j=‚\‹.è`­]0 'Ù`�ïè×ãQ.UåÁÔâ±Pòïø@£²Y|å?^Û³O‹W?JúŸRÀðpú·Û§Œ¢¯ËšçÄqmã]jàÎ�uo|y@_þ�óq(s6Â9b6�g¾ªÁTà¿�tt"COoÃW|°ûˆ¶l%÷ÁO78´^œÿÜ� \g�uÖYg¿.ÀOà½>`±• ú| Àh1dN«SšW´<É„•ƒ}ùØÐY¢NÂ…¾_Ü Go!ŽÊt‰Žt;�ñáÍ×Îl~ôÆ!Œs ¡*U*k²‚òÀêµñGN¾Žå™ñ~#€~TÖ–¾�G{XÆ]5ž~8sëÚæ‹ß^ÀöÖ ÚÕÀVîÇìÚ™‰DÜtF&Nï ¥´Ë"k'¡”‘Ⱦ�ë¾#úS嘔c«L Û ·P¶®ã!¦±ñÁÕ«È Žf'ÝKs÷Y©9‹$Pºnp®OF�SÈ&Ji\\þYù—úãh.kjÙ_ßî÷¾rq=�¿u �ŠÕÚKã|fåRþð±+è7¾GÙG„³6D,+ ·''±¢Ìâ¼Ï�‘(Öì—}§ŒtWÃp:SO1O–}TÞÈ•2±e™â¼@溙¬m½®$}2”3É`c‘�W—Ú|,D.�•±–záuöqƒ1}@�ÒäÎò[Ø“ëE’À»A˜Œœweý÷;/¼H|=¾Hv9*¶÷Qåöþ”ÈÑoFl[êˬ ÊÃKFÎOî£`[Õzc?NÄXGódü¦= &õ щ®‘ï~”Rä64Ë‚Wä€à‰K æ kq&xûg8×÷E¥H¹ë$l eîܱ³ý?pšqG£ûÛç1sÀðR|tozv¬Ž�z ^'ËÂn©7ÍmØ’�¢ùÓ Ÿe-­]0(žlòýY’¤þÔ/¹l uÒkd— ùl�``×*o¾¥�+°ÃÀ™ð46;Öe䇌[Âû¢ä@ª À÷àÌ×”j$`œÏ.d��ÞœÓ} †¬•�S}>³Ö·x^®’ÔÚVYX:_÷%ษ}8¢‚W®Ò½�èè_ʰRràËÑñA¶•qügà§MTIé@ŸÎ:묳ÎÞæÀÏAŸð(ÚÙU_ð#6=¤¦N�ÔÜ÷È6zbM#¾áÛZϹ„@ºÂ‹bQ0! ¿ÓÒ‹×皯ž;š®mÏ“ùãø/—;ã÷¿P?´áé@{ÑCÍ­Ò_ý š=‡Ó© Ý£ü@›7ŸŽ_{iSXofs‡Gn û±’Gr1¸'�* (ï‘qOXBÌ£S0Ù_æõV  ¶” l]ŸÈ½M3ç+ƒþN9xä6n—µÊÐÙ RÓ«Ý”*Uº�`J•²ËhzÊÝUË“ã4¨€Öä˜y¡¹ž?tì‡xïÑ+¾v¿¥•ÍGÒüàÊróí×O`s<ËžÊÆ© •T‹Vfn�?°þZyhIÑ1uÿ‘#e¶;%;O�$´�¦4Í -âÔ75è]¦€«©ï9Vj½Ýø�G�26|PÎF’~”8bµ‘÷Q¾…˜ý£c`tu˜çð=1"-è°ÏJ”ûô8DøcÈ�(¥¸¾BíC9;lX5y~aJ¤Xr%#§�ô>f˜„È»R'¥ÿ»ÝV@Ííb–¾œSÏ™8_L6 °ó±‰d®?–Ö~eR ’Ãx9,ããËùù? ²_úøŒdS&•§bL²œ?€44$`?w�!ëëS}9¾˜` ÇT¶Æ5€T*�ÛÐßVn÷“pÜàz@Ýq¶�|cÉÎeêÉE쟂dêÎ>òN€ÀOA`�\g�uÖYgocàgÀG|P°Ïv|À7Œ 6-+ÐhÛÁìgß=Æú©ð1|pþ¿É°ƒB8iÉF.Z˜£!²æ¯^[n¾séhÚPU´ê:JâÉÖn�?zâBY_¢šLÝ(Ê™seaåë8;¸†#¸G6šÝ¾±qrãÚ<¦°Áâ1Ì:‹¦î¾'�OÎC07ð@¥Þ( WJ™´##h¬ß»méãIÈ[WQ6¯lßÚrBÁ‘#W±3³ŠÑ¨‡Ô ‚=øÉdÿL¬2�ò¨Þcm�‚Ä}9ßg0 ƒûi;?±öãò»§_A“$2L@G?<½zk¦÷µK'pe{9ø e¶·“ßyðB~ßákv4Yk6Œ”¹r’úÑé� í¢QcJ�: !r¨÷Ê–Xñ?¢¼±Ì‚¦d|XòG=—E–É– ”hzß'›�oíåótØ–î¢,‘ÚܾÐÑ�97ËD†ÔÓ”/Aô$—¶ÙL�öŒ ‘_ î5:V+´8yŒ“Œ ¯Ä Õ“›ÿÇsúÓ4bÚ“¶I0e±|œŒ×£Îq:¸\§¾#=©)\™ýÚd±ðöåò€Ÿ"R_SÈ÷8ÉÎ (y€äö y,ɧ"'³BÝõy.Ík ×JöU[Y8‹õc±4ü¤ÿdÔ‚…Pá¼zŸy,çݺR‡zS Å¨4û{ü{å¢S©À8)?Ø ÆM ‘yM ?½ÓZÎï™IeEky43�A'"�Õ4äƒè~ ò¼ÁÁiÚþNòvy0�ç·Ì�2�—ó…ûëùt>ÅjÁ¦ãœ;\*�!«ŒÌ;ývwçèIæ‡!;¿ÖË}èÜÜÍE'”ßû;Iåã‡Ç6ÔYg�uÖÙÛøIÞàSÑξ àOÜBl1äA~@tmú¥;xâ} ‹«}ûJÕ!÷¢ç4ÈuÙZã¥D„�x’µ5L½??w¸ùÉÕƒ(%¡¨÷�é_€”òëoŒŸ9õ:û™ÍÄ©…bF-~¿^ükœímañå*;ƒë×¶^üÎ2vvúد¥³œü¥Ô "£¡`Nêv}Õãñ6RUꋯ드AÆ·e†È·/ãLcyíÀµÔ[™M;y¾ ‚>hʸÉÓ#°Å%JaÛ”ê½R©2R“Ëé¥óïŸþ)VC:Ê¢d ãüÖ¸ßûòkëÍË·qOG*¥’Zº<~æØEÌõŠ|—“AâÊÅŽËQ®:÷¶ó+~ha¯šµv²ëvÑÚ€Ãòðee¬�ÕXÇžr3º=Yš×É šTÝùHo<–ùŠå%ìm_-I¹Z(%ÊmÞ“ãð’&êe$²>ÔöR€vo”>i8€ØÀýh[ÏÿÁûò U‘-ãõùÎe›¹}Cï‘÷áÛ(YDªRâ0 ‡¿�Åvâ*è ŽpGªR¡µ’@�^¾§©šÎ•Ô1XÄñYÄäÒ8ÄDp°íá²c¦_, '€OàÿÑcÉäê%I­éäg?�;Äf�_Xìí«÷ V¼Uâ¢&¢m0Ô8à2~X¶içàç%¸ï_Ê#F*Ï‚ÎÚOù{`”Ã�<âøàô[&7ž#i�‚ÄÎ犯—•&Í‚ŸM µ;³â;u›sËZ*ìŸH©�Å!SÙ’–Û+;lÄIŸ`?óAÇ‚1LÆïX1#Rqœ 5’îRü€‰RPUp!’bö¤÷à½C˜ y€œ3Mý9[È:÷ÕàK_jY¬•ç‚„Nû}÷ /�ÊRÝœ z(0Ÿ¥ Õ—!¦��à�Žáïùpü~Ý3YËŽÔYg�uÖÙÛü¹ÀçG;{À8˦€âü?’´Pü‰åGNmáÑw0˜i@ä'Žš˜E‰·RвHó•¤@¥áNººéòÆàM h=�¿½‚¤ÉG$p{ÐŒÆï:r9`ý*šÆÈÅ_e¬~§ç†3iŒþ=Ê4ܽzkççÏà쫽5ý9Ì<‹ÁÒñ;²€˜ hT��!Ù?(“í”úÈFÍH€•= s錷‘7Þ@Ù¹…i¬,Ìo”åãf³¬�™D›"sõÌ~ŸÇ@¡,v}s€ÊÚìÅüÉÏ–36€G£j×ô¾qé`óìµãå~ÐÿQÖç¯�?rô|9º0ŠãL =Ü4Vé¶ øÙÍ�ü`q"b�òd·¸å˸©T„ÏüP‰‰;ñ2Ø.6+ ߉°u>Vù.}ŠClñxÖ‡@�>k_P›9Úô*=ÕõŠ@lZ44žÏ0qÚ>7Ó¯ÂcàÖ[¤‹I¥l9éÏ"C²fFXïšÔ¡¢}Àcfõ–çQ¦±Z”ô_srYÑå®O=Ø LLVú¡Ô2‘F.Ø2€š0› ö[C%.’ç÷££HЛŠ�ÿìÂòpÚ¼M‚[0ä>ƒ”Ë�õ…¹¿æãðóÇÑôwÌKêíGû Ò=¹¯Y1CãÕïQd™d¼ðÔ002?A?ª¹ù«êje4(V¿H6ûP·}óÔ™Y7WTpô[êÒG¯üûÔYåxõ•A­Ž{ÿ~T NŽ…€xhÈ�&‚â“ÑfzÄr_¬0 ýxA: °äÈ0‹ºë Î*Y„(‡×õ7Jçyi2ÀǬ‹xå{éù}Ùm2è]Yå˜Ñ£÷K£²ºÀ§ß?´½þf°­–ùª‘‰f»`p $Ä-$ú=Ïð#=-°ŽõÓYg�uÖÙÛøYðiO¢�ÝðE߇cÓ@q eþ˜:úƒ&<6ÄéGgÐ$#Èpðfu4ê·ƒž'ˆræñ|,5‘~|e¡÷µ×Ž¥›ÃyÉ O*)••™Íñ‡�](g×6$1h]Ö»ŠþêWñÈÌœ¬w|×m<ol\yvœ/Ÿ_ÆÖ›;€ùC�¡7» }”¥ŒvóúÌI“õ\F@)¨ì˜ þ ŒQö(a*yˆ¼yeë*0M~õ~TެßHÍZ*%UvßAÉÈà©ë�*NôyA®¹Š*pźÔCž-·òoýaùíõËN_d{ÇIú&è³ØûË×OâöhaÒ÷JmgåXêoŽßäÕüØÊm^®çhö�–Øt·\ßDY�«,3…È °ÚÔ&AììBá �½L h*ÓèIÊ ùe(ˆA”}åF�“gÇQÉ~^ ƒ=åöq¤à˜sD�¶°Édòî…!‘±uÝ`0�ÈS¿G,¤yµ4U¼Ü=,H‚d·s ”ý3­ù:ú»(šû>ˆ$Çu:wD(ÑK td�î+ýÂDR4rV.Ê*ð�nì�£ÓF¥´¬˜R‚ÂÄÔI«ý>ƒ@‘²‹0ý²5’d?ÿšÄâ{jφ”º(ï�Ã|L~2$§rC»‡07J1Át?1·Ý¼ܹ5Ë#d‰ÅþÂÄwrtúc”5O ÆŠÀ'Z�*åQ²–‘+^oÄ'G–àäú¼1·ýˆ3X¢¥ùyFøn]Õ 5—š^|ÀFu÷:×2eyåþ\&·²P¹­¦, \¶XÀù�ØVóQjc$pTC‚Ô“ªÔ^ìǧé\NËâ\S L)Ô¾�òº’röojÌŽõƾˆ•¯ïÂFˆ‘={âoGiæ¥t>~8óDÂê!D¦æÕwL Î:묳Î~EÀÏÀ‡*þÒGl#_ðC„Öú0€¾øpÝxÔ—T[Gzv~„³O�qøØŒ•w7tvÁ‰ªõ#FŠ)±Ak-7N°rIÍ×/¬õþúòQ Ç=^ƒ# |béúè'/àÈBE6Zk�—Ù—°¼òM<Ú¿‰ƒ¸G6œÙ¼¾ùÊwfËí›s˜ÂK'0{àôf–ÉÖ©Œ íʹUµZ7JÄU�ˆm@‰µío\ê>±IÌóÑ£WÓpv9åfdÍßSQ–N•=Já>ˆ l!‚ZMæGWžÏ¿{ßKô û”­á2×ÓÅÍ7h—N¥Ë›«lê„°õÓ0?¹öÚøƒG® Aa­Õ,å®ô›lÛÌš€n†YI‡¼2×!aø@oyÛDÕþÇ'|=õøþT3{ꜦòáªëÅt\L Šûú>{Ê‘*äB,HòŸ\šHQ}}eµ˜Ï³…óΖÜÓœtZÞZêFZ,çm€nðZXNÍóÕÅ¿‰±Ç<}à¸×H ªô¯¤Ç²ÿ×Ê}”Y>' )žÒŠv��ß¶œM=lލ„rkA”ó4æƒH@íŠÜv¨§Ú—h%³}‡¿\�0uBé7;¯`Ft˶:Å­SpÌ–ƒƒwÛ)bº«_íÛJ4' oG€ ÀÈü0¾- f8Bƒ› &ØÍGjðìU²IÇ;¨4 ‹dÒW£ÕHœë\mŠœ‰NÂyVC,è/,‡:èÅ|‡½Ï°/þ¾ öûÔ0nçbMêF�ŒAp¥ø[]¯SÙWCIYxú;©Á:jpîêOPôó.Zs8Ž :gFrÙb㕦`RïžåÔÁX*§,3eé1œù4hmï8VÛ£’óÿ烟J8´ÞJ'Ñ ëØ@�uÖYg�½MÀŸwTÖÏ*ÚÙ³•õs ®M-xÀüÉ�JÀE ¶SæõÊÁm<þ¾æ—zfä^RÍà@ÈôWÄ@‘ìëãäÄÌÁ2jzöÊÑæ…QÐúqÄ�)4ç³^â¾×1ÓdIZ¬,}GPÎ6;i÷ÀJ*y»¹r}ë…ﮤñ¨‡ýÛ„ 4³rKë d‚A•ÝSò�¹rJÙ-G•K˹‚Fã”�›˜°~F[˜Æò�•ÍÌÁ>¶Ë�Áî‘Éú¡sDçÕ" 'û%QX¨ô°|rþåñgOý‡fw4¬•ôÛæ°é}éÒzóÂÍu$:¨Œ˜ù&¡Ü¿xiô±õ XdûÃ`rîÖÀ˾"QUr‚å¶Ž¹ ¸È8ù°‚‰p±fª¨¹Ø+�œs´{ ¥˜`zOjŽL…ê›R,íd1Ãþá�*a䇮ZN]¸„@ñÔ†’áì7£GÛçôð>Ô•™RìÆú.jó8G‡:üŹ屿b™TÝö!<2Ø<4/y' r& ¸V'šŸÈÛxAÇ$ÙÐôYòúÙ'©@Àcgº‘îà¼Â`™ù:žEœÞ>Vî?ZÖ&‡†7/lål1í|P>](ö!y¹4Ø_Â<>Ü'øÅ2�cþÆ_ �ø8¹Þ²‚Œ|ç…cŒHù±�{P±Då“Ù_-úMòs¤è>,TðÙc<Ï.J@Á‘²Ö �ŸÇ#RæÕáΑþ2¥½‚ñÆ‘œÔ‹Ð¡yAÉÝê?¾ØtüKŽL§*J¨CžÁnN:g®°>â1�ë~`V˜_Jw6/“ �žÐ Ì2†ÄxâïÍaüxžÏaMÉ¥²NoŒ—>ë˾ïQ±@eÀÂïS¦\àßo1ç%Ó3jk9_‡À%¯L>¸g�æÿi?Hiÿ|ÏGŽß߸ N¦õ©:묳Î:û?ÇjžŸÓhgü1€—Øôí€3æá;=mˆzâBÇnTV€Òpë§·ðð;èõS-O)kJ I"É0ȉÔèIžâïÏz±tîÖlïK玥K›ËtÍ;ôÿ¹þÎø½‡/ä÷­ß@“x,7(Ñ�º�´úÜ?÷J=Ü˽²³¹ýó�ÑËÏÀ”–šþ„ÔŸ?„f°4}2{&Ë‚ íˆr¢ìÜFÞº†¼}cÒf+ós[8°¾�6°ZKÀoÚ >þ\óõ4Â<’óV¹¸Â\AU–nÌ&«ƒ×G;ölyìÀM{ÕgYe™õ¾yù@óýk'±�gìè;vÐrxöÚø™£¯–S ;¬3��H‹:>m/wKYAz\�\&Y,ð#°ÝhÞ¶ÉPr=›z»~Ôµ•ˆSäÿ‘ëVÉ·Ød|hšÉ®c'gû�N®‡ºã¦sJvp|V¿µ6<±ù›áËïÐT&+êvjz¿–ÌSxÞOì¶_c$ÿ¥‡-HôôÇ1'ð¯‹g=D¶„‡åÅ«óÒ´$‚*c«=Gû7·Í®UÀE@L1œ° ý0?”ۜӼ „Úlg]Ò2d½÷oöw^Cãö1‘ͳH„¥¶e±4t²Ý[àp¥O‹ ^ƒ(Áß�ˆÁ®ÇÒ>oytýþšTz²¿ ‚ETmÈÕö€1X(æWÁ‘u X}.»#`ûH¹sýlj;u½œ„Ngóû:Ë„!æ^¶ÃDÑuÍWÇqD‡:eÀy÷›‚•b*MÇ1%S�` ÉÊÐü=*émI” àS }†ô;y»›)q[ß¶°}˜*�¾%ûØsq¿€å°(‰÷Ïy=@Ë !L# 2ΓI)�¦…~.`ÝÜn€å�5Ò…Z"šÜt‰ÁA¾*U8xÏGP�Ÿö2ÁÙ;öOg�uÖYg¿"àgÀïxÚÙ€?ðþNÝ]ˆeÀ)÷l¸ä1X–aQÈ|±×Ïxð‰œ:3'A‡úå¬Üæ$0�I"€"�]>Òüõå¥Þ7.ÇíÑ£®j¥L„ÊÚÌíñGOœ/­nFQ\šè½ÿFš[ýJyxæõt÷ÈÆ3£Û—¾_ò•KK-„RMÍ`©`öŒ‡@¡Lþ†(£­Éú´VzÍG�_O[ƒIž‚9“UJ¿U@¨0ýÈ©˜×§d é�€»c™ëmŒß½ölþ豋â|PÙ#W)=c¡ÿµË§pc¸èLÆùa±ØÛ¿ïйüÔÚuMÝqH*Ñ-ûÀ1.NY~8Ìšä½hy2;Æ›I£òd)êLí#¯ãÄÔ~bü 9ª– ¨Åûôð ½&Ã!áKNøß|潌¶·œU¾ÈÖ³gÍÕñhHÑÈYŠ™ûÇ'æ¸Qˆ²O­D²€z�±ü‡:€„íá&BçI|§ xˆGãßio ú0äñä½¢>ËÝÐ$w¢äÖêüÌ6K#s¬ å­”Èç–\ àSVßµGÈ8Zß|�âì[êÆ�l&PÄ2:`ø‘ÍâæÉ`¹±ÓÚ'Ző̱$©‚Ù®CT‡In‘ÛœƒTã\Â�bò$™cö<—<Ç>sA)»C·¹t¦äS{ç<+±^lÄb’>.à^5?ˆÁ)¦§á{öILÙéÀ>äç(ûšl'+c,Íe+Êà*_ζóTû…šö)šÁ*k�²Ä�€Æaô>ì¾’]DÙÌi7Y~nN à°AxÇàV[&>sûD}ËÌe\[à°JK¨¥Ö^–>žƒë¾)Z²,2�Áï­<þc÷�¼«Áòê´ùzt?tÒo�uÖYg�ýŠ€Ÿ€÷ø€YÄ–|À_Øí@´Rz¥Ó n;< ®.8÷•}æ‡8ûtÁÚ‘�ÎNœ<~-¹Œ ÏbgF¬µ«e£œzqîPóƒ«ëåf�—‰Wǯ´û–¯Œ>yêÖfGö„2ÿ¬. �õnc÷Èvfn_Û|éÛ ØÜ˜ÁÛØ&y~òâba†ro©>Æ æñé¡îAP ¹TvåÝ( g€G¹)£rfù§£Ï�z³½løxÂ�‹ty³ÿ¦ÜÛ‰t~ó°Ó ø�ÕOãüØÊ¹ñG×_G?9–|dl „ªM%mRJ˜+�ß ËödE?Â÷ªc\´uΛy¼Û�l¼÷¾‘Ç„/9QMʹ¿ïgt»Z$ó5e2wÍY)Žã‹}ÖufÐ9I (%.¦Ó÷YN øðÒ}ÛÊ:òÚ7,“Ü?†;ÅÍiÍŠÀü.Ò|98Ã$miˆ›è˜‘Ë4%'ã!ãŠïÆÓ¸çRÁ 㘼€ï¨­ï§ Tà͹7˜Ü6ñ9'| ‡RNð5� óé³ 1¶•ÊÒ÷Dרo×Ì T Ëm†­woŽ#Wk�ΚŒk GFvo ¤Ò=å=ƾì¶Yn¹*k?órqq›}Õ#ªÅfôÔÓãùqd;�dÕè:þo+wŽîƒÄ. ùZxªà.bS0\ƒƒbiaO.Η•Õ1 :® Û_ŽáôU6‰Æ–bgÉM{Wø[);ÇÀ ;ŸŸF2Z?¦ *H»/й^‚²`’Pôz´h�·)ukÌÇyÍ’ciTÏü×c§ñ|×iâÏS¸¥ßjþÝ„ÕC ñ ˜>ëRuÖYg�uvÁŸ³> ´ÎÕÿŸðî‘%ü›ÿ[B)XEJº»¨ÒXRÀM º¬ÙÆ£O7˜[ìSöˆÑC­¢ÈŒ«’2ž/¶éó¨]Ûî÷ÿôÜzzéÆÁ”‘JRmYTЦ×äüÄÚÅñÇŽ_ÂÌ^@Be ¬¹Ñò7q|áG8ÛŒÒì=Ê4ÞN—nl½ð½Õ”sƒ·‘•Õ•[iþ0ÒvY®ÂJÚ+7 ‚7•$‚Êì)”v{k™G¨G¨„’1x,ì¶¼:þÌÉ•cóÛæTTû”Fžn�›þŸ_ZOÏß<–réÅ@I%¥’ —H)ŸZ¸4ú�õó80‰¿:é"Q"€ y“)$ÙùñN•^„óÑ`Ÿz=l§Égv‘±·œœ�"¼‹ï°ñ��%á¿Åˆ,�,§ÊÙlÆ Ø<ŽNȾùŸ¤ÎÓ”P€&yžÁG¹)íäKc™Œ§_kÔ‹¬äUÊ1X{MÜàá˜Y£@§‚†EX#VÐ…Ëöj+IÂödHÔø ØÝqCÙ·ºCdŬ§³Ñc‹ø 5T¥N“þ‹“YŽ«}"îø˜ R2þ·.=GYÔÏÛç‹“°+,¿¹\¸ð‚3fjLÅQ‹%Übª¿ö­²éhY,égúž•W§¾U½�8�€�M¬ÛcÝ~¢ç×>3{öÁüð™±rn™ì§ `f`ÒAîc¼ð$tK{›¶õØ7œ‹p\¥ :Æ} ‚g¼<'û4‡Ž¥>‰œÇñXâÜö©só8õ¤\ói;=&s_yÏÜ�úâo�å0 r:7©…‘tœÁ޶+l*c§8£ãBànˆòäù¿�œ·NÅüQ?…û»¡€1x#,k ,Y€¥PøÈS yg”ÛÇ©�A¢ŽùÓYg�uÖÙ=~ø]gÐÎÞ¨y~~ ÚÛ¢©74kÉÂyÃ:‰¤%?*>¥‚ãlã¡w Ðë%FÕ†±pô\~úðM4©XѺž¤@³Yz«_ƃ³¯â�TRƒ{`¹Ÿ·6oÿl{tî…UüŠ­ÌÎl§Ã'7Ó¤Ô€þü1_Geô¤]�§·[:¿÷¦>¨ulËo9,®?tèÙüεktPD<:â&y~¾uå@ïÛWOak›Èqq¿}=D;-E ÇcÝÔéâ˜×ßX‘Ûß§ÝWrÎA·�p$I>,r+|†ª‘æºb…v ÅãtÁúÎ|‡©‚, ó0 €$LJÇüѾäZ�¥9=¶šJ*ñ 0˸DZ*‚ÚI êøÐTF)ç–äƒ2�a]J_ˆÙ°F@�W%ã+¯Û¹o9�0›´=#Èm€ÌLŠðê,9§Ä¶í�c©`eµ®½Ds¤åÏÉý/ìrµ¢ó%^tݱ/gjäÜÔgéæî‘]—1Õ½£m‹•HS*CVû‰yOnD†˜!kÍÅ�Äýd ã§Ø9¦Þ÷4­m¾)ÁµY$çМ»àdotd2X «ì¶Ž¤hQÆ©5-ÑÎdh–ê\2™yG•¨€3�éΡ¥�ϸæû÷¥¹áÿÑ6xœWü<•1s[îÙ‘ìVè‘w&œx0aq¹-¨�D©ËùÓYg�uÖÙ¯ø™ðñ*ù–Û6€/øK´·DkÜàtõ˜[L Ú’RX¨õ\w£möÖ fÆxð‰!Ž�žÙ›C�'°&ãêl ’°DmEûX“¥Þ7/­öþÅåØÏxÆ-#•rdîæèÇÏ•û—¶œ ¤{]ƒ i~õë8;¸‚uÜ#ÍìÜܼð½^¾öÆ¦ÉX?~­·³°Š<î [§æì¡üSSË{(e¾.æÿ)»Òoc€8�‡‚2h¶ò“«Ï�>yì5;1¸hCý?½pk®ÿå˧ӕ�U ©±–ÍöwÆï9ðòøý‡¯F´¼íʼ6�å±ÿÈf¶•jŸ5R²:Ù|k Ï{ I¨fq˜“…¢ÄÀÔ±b-qò!BŒžE.–ü› Þ’LáøoO%wäa’¼Vþ,eG 2£=UÎ'Ö9£³>ŒR‡×Kè#Œû¸0dõê휸® @²a r¿‡}… ø7ÉyíN´-}~Ç$ƒŸ2*w¤À±É1Ècf„s‘ ³S—âËŽy2H:¾€ÅN–~¡¨ÎÏZ¦£ÓwγqÈã2®5×B"à£`ŠåUPpoŽ(›BûÀBô"Ε§ŒŸýãÈÈÑ ï­ì ¯^<å9žZyThtdÇzpH"ȬºÒ’² ä±âù½:ê5Ò_óüð ™ÀT¶M¥˜Ü¼4oþ%u&kAú[IY0WaŸáºŒ�Ü–yDŠ€R?÷Y‘1Âô�{’˜lSë ö¨i^Mí?ñxÈöÐâôÔf.á§CÔþ­\O¶5òƒÕ7à$f˜˜W–•ü?bß7ØüK:ªÎ¿UF3“�¼¬¬sç&Ê\GiŸ|ÎuÅeŽÅóö˜Æ)Û~S½Ž•C ïú`Âò�dïÓy÷ËꀟÎ:묳ÎîðÓx€ß0ß2?Ý·ü€ ÐÞæmÀCŽÂð5"‰ìó, )á…å<ú4°rp`$å ’èŠˆÇw£çâI-øØ4?,Y^¥¾þùù£Ís×Ö1.�«]\-?´tiôéS°2ûàTm. Ð³X[ú.ëm¦eÜUãí 7¯n¾øí%ìlîÉ9�¹ÖkÖæ›Qš-(˜€6¥€¯>H»Œ}…µ¬Ö ä½Á{{¶�Œ’óK?}îÄ Xì�Ì^¨VdãÚNð'—N¦WoAᇨÈ=š”óÙ¥ó£O¬_Äl/[*6cC’?«©¬ƒæ_‹± _gÚO:š}ù �XôA)ëýøzÿ¬U òº _ÆŒ¦Rº¯'ß9R,�é|S§©ÁzðÕ”µ(iµË(âm¹l 7ƒ†càc[¾IPÞIícáu³_xÏ#ô>rZüD, ;/TÄžãC°er´¹çh‰òÿÜ¢¬cø �Çtósú}ÜïÛìWu»I ð„®œ¦ ˜¨CMÙJ¬ã±¸mÈ™¯Ç9Ìý“5Ÿ’\@IÇ3‚[£ÜSÒ÷'ãDÑ÷1½yÙTé"”ˆ†�Ùµ%c®QYÑì1�_1S„@’¥ËS,\B‡`¸XKM&¥ÎÅýšÔ‡¿AêˆõÊgnœg%éu5ÉË‘zmópè1‚>!•Ê.´âyŠ;*ô!šÚã¢:ãÅA?]°L<4p=ÓIï±54�‚A^~˜)óÊØìwÇý9’Ÿè?AåÇ`iŒÛÒqËC�¤A de#§” ©s;Á�‚7™T\1‚@cÞŠ*’�£ùbÁ\üËE1ú)ñæ? HKµ>�¿õ‰GNxzıÅûèÌ�{²³Î:묳»þ#�*Í—Æ×v×·pöÝ} fp‡@�Dmñ7BœóGëc{?‰dz}sÐÿÂùéÜíƒàçµy[ ú½<~çÚùñÇ�¿�~*Ft­ïÊH+_É…Ÿâ‘4N3÷†‘SF[ùµ›Û/=·šÆ£wÖ—n§•ã¹ÙÂòî?�€”vŸ?ÄiÄÏ_Û>È ^&L#äWN-lB# ùù�Ù4Íž�¶aIoæù9Ú<{ãF¥�;[*Çç.�>µþJ9<;J¬5^Í�Ð…Áþa•è܇I®k¹< –3pÙÓm�ªø*Ÿaäf LOÇ èÓ4ÉeµÈ)b©G¥.yßËHŒgu=pzÆxðüb)#eúÐ9:5$Ƚp±$  >.ò±º\ÆOLZc› oøR‡ng:öÕé¯Î~ëÚ(Ù8ĤmÎÙÈÅaëâ'vêÈ饎}ËÕ²ño¦ÿ§õ½ÞYùÍú�Dáû'±�ò{œmEÈÒ2v±Àz¨šØÜÈ›åä3YEX‡ûtxù 7aH0(’‘>ðm��С=Û#c橚‚èžìš€Ý6}MrÇ@ÁŽw®B�>ý½�Æ¡ÜWlq@V-ÏööئÎþbÅ¡d3ß…”¹ýZû‚l‡¡G¦é� 1n´Íÿ“Ú0ß"?xq¥Q] p¿5Ÿ$¬tÙ@q ›‘ïéñ¢‚ß éOÜΫÈ&UÇ�Çg•!õ.ÓO*#²“2Ó æ1¯Ãî[ÉÌ ¤Ít%Rkl™×GÕdO–›’¨ž$`‚×ýc6c`žüh$.lå-4™¢ïø-àè©ææ�‡ÛÞ"�Ÿ鬳Î:ëì?k> àq´³k¾à9¼�,áßúñK°c•4 ‚’¡+]]ƒ¦1ƒùCkz§ÎlãôÙz=qæ@±"ƒL£Hwµ8H™MÔüèÚbïK¯�Jׇ‹à3´ç“KýÍÑGÖ_ÍO¼ÁJ‰RKHÈYußÑ»‘û«_MgfÎãtbå]µ’ÊxX®nl¿öüBÞ¼Þû¥s~~»9|b#môÖš*ÓÆ´(™ï³ÖÑ¿1aóTÆOãä¹,À§I=”Ú'Ë…þ�áÖž¿çàö ùð ³Íw®®ö¿qå46F ¨µ¢rM[íß}äðÏó£Ë·'5“×zšÚ=5Ò3{¸j�¬jŒþw@¾0@;ù‘‚àÃÒ–wr|É­i'é¬Ⱦ³‚O³XgÝ“¾—\*CÁÏßbÌú‘ø.èpÆV\-)Ÿ®V 7Þ®sòüÝü~fs}Xq :J½¾T·e¿–À`èù}L* dáö½l£3•�3q…8ºÞ“Zõ0—ØÄý‹õ±ñù6I'/wôÊt ×îxí,V€þO’_&§?Xæ¨Le…’‚”öÀ>kIÜxcq:&±è¶;Êe°xyˆ¼ñC÷÷å°(%iºÙ­ÄVP–Ÿ7N‚I¿V‡«6W£tŸïa_NO¶ñƒ³"f¾Œ#þ¸¢ëZ]‚dýºTóÙÁ!Ê ÷Í}¥Ìùí.Їßí©ÞEþOJ+óч“'*¾šË¤ö“,M…ã×mö�rlLN_‹�ÇðÒ9oå…’ßy>_ú�}¦øì²˜ân€ŠPCF©(sñœË%”Hçû]Ù¬¹d €Pöa ±Ý42Ì~¹˜�Xl%„˜²&J¶÷= <üdƒùˆÅ’Ïjq=:¹·Î:묳Îî"ð3à#> ‡Ø†¾ àëF ý�€PÆýNAE•ScÍ%")¸(?Ð?5Æ‘ñ¡l ©#€|Ç×5ú*¸WîãF–å’z_¹x°÷­7N`'ϰ½5eJ©›»6úÔ‰WËÉ…m½nSÓ´™W±¸ú <Ú¿žãÚ¸·³¹½qngxéÅ% ‡=ìÃJ¯_zŽn¦™Õ;ã9TK•Ý“šJ3×Ò.TÁF¨¹�äÕ4š¬÷°3zléÇ£O{=ƒ�G�nªŸ_�^ÞœëÿÙ¥ûÒëÛC}óÙÞÎø©Õ—ÇÏ~Ý¢âxS•d±£ ý9< šú¼°}G4ÓöæÉY�3~´ºÒVµ­“=ŒŠG­âvÝæJS²Üóñ9h÷ðÁx‰ßÉ0£³‡<ƒ ééŒÇƒB•ŲàöÀvÑG¦/iâ~Pt©,@^ƒ>j¨ƒÜ‘Üá5‡R¤ >©76Ÿ‘ª}$JN ö%:dëÿÀ>Ùeº´Í”ÜQÝ|ìiTRŒ,0Žcv¸jK9{1{F™HÜÔ”t Yä&Sf'ԥÔ’[vû»¯ùov« *« ¶ö³²pùxÔ±i#ÓŒ1•ùçà˜:û§ÈËTÓ–'-@Sç"Tf(ýf”Ö:­kßÀ †f;/Šì年âs3óäÄæÈ& °%®»VÜgd�%ýë7Q1Y<•ü¸H…0�¦`ÈF2�œ/ T €WÀP‰’Õñ�„ø÷+¾±»*ë•�•‹Ñ§¹ç¯ì x�@ }õʦTpªn0÷KA€[ÀL.0̯-IfˆµYaì1¦¡pdê·š@à³ÂØ.fåû’‘*Ó­åþ·�Ô—Wžx_¡uˆœÀÐJütÖYg�uv��Ÿà)Ÿ°„vö=à&hC Ú<�Îå�L\BÌþñÛp{qegŸNXZé¡AP½ï[‰HS‰”8Ȳ�QÓÿ¹cÍOn®#—E?œÀÕ%?²rqô©ã¯ay�÷T¿—Ž,}�6Ûi÷ÀJÉu%#§ÑpœvvÆ£Û9�6JÞNeg«AÓCJƒ„¦WÒÌ̸ôz¹I³½´•–«¤Ûä8ôíŽ>B|É2_¦ä[)œ+óÉ�0—ñ}ó?}öØOÊê`„ú•�’…ëº9lú_¼x²yñö1”I£„Ñv?�6góÌòFjzLæ’Pò™Åó£O¯ŸÃ|“�´/IW·¼š#y£ÚÍ(‚\¿d.nh)×�äÔä8[ԩ϶Žˆ íhçøÊ½‡�õŒRÌp²ŽH`¨•€mÐRêmÿÌHèó ôTfFJ^ð¹+�bÉôX@OKú‹%O“k½Ù<Ÿ`Äàñ@O}?~’þ8ZWÖ2Šøý.–ŒM°¾Hœ×�¿E%UãÍ8€–±8ÄuW•�£ÈJªT7k9^^®Œ‰Ùw©„&�—n˜9X /UAœz<ÍãäÒÈsw¤H�[Š÷Gç$ËEöÍbÌòN*{°f�ã|ó;¤>ËøçX; ;´ â ¿iOWÍÂêð1C“íåÉÛ—£ß˜¡å±$œôߺ�5æØ ­åÜ6ËößÉ“e A G߃û£)%ª”éÎOô$.hî2Y¨Áy»L±V¦çæû%í(©àÄÙo:î§ÊÝ2X$X/ÈxÒî·Ö9ˆÏZÌ<®5ñã€�fM’¹tçæ0îÕ†ùNLT‰¿¥¬ó:•¡L3ƒ¨$Wb²ïBÅ2~œj0�ÊšûÓÚá´'˸ïjäå§?’pütšŽÙwàü鬳Î:ëì‚?§jžŸ“hgçjžŸWAû €hkFj‚@ùRG)ç<Ìá[8ódƒ™&ˆ²Œ¶Š¢‹"š£ûô&g*/ Átns¶ÿÅó§Ò…Í5¨‡IÞL3?½öêø£ÇÞ@/9òVMeĈ�€Õ¯¦ûç_Ä™”Sÿîƒ@cL˜:ÈHhj~�4añä2f0*»åc‚:¥‚8MSë2?Ö«O¶‚Edú¤TÕñÆŠGˆÝ�W›KÃ�}.?´t°e(lI¦jã’zþú‘Þ÷¯Ý—Fe€’RI%§RR³ñúj*£~A*efi£ô—¶óúìë£Oy©œœß‘hTOB0–ÞaŸ³¤�\ ujĦ †‚ˆÃÍ Lå†q- \5£¼ŽY›*‘t}šH[az2rÜ�m+&¢÷ë' $SCÉnûý‰ý¶˜ JöQ:b#c¶••‡ÁcéyÒ´ú\‹r½bö¯,0½¶ ysäô¢KKîø?»_iÄ|{À3ãci¼�ç±ÕM�ÉU«…�ÐCc³Ù¦KÔ—üÒcÄtÝT]¬äŒòÙÜ_Bg^)¦Ä”·-瘶O„Ì|šJL•âìç±è‚ëˆÍ¹'ŽsR-Ì!øñQn?ÿ"�S¶¢¸ã4 jkþ¼Ü �0™>ú¸ ÿ¿Ô¥ËòçaµšYž\0ñ�DÓŸ_lÄ/bxÊö�JËÂ}%ü/["Õe–ɶ s $¦ÚôÝÚ¡ Èý…!ë\¯gêœ?±š£Ü„ÌÇ­Ÿ–‡ŸL¸ïásóþol8³mñØ?�uÖYg�ÝEàg¹2~žB;»à‹¾ÏߦßTˆ3Û@yHý©˜>\�eãzýŒûÙÁ©3ð#Ñž<ÅN7¶ßG¤»å슢‡Ú²¢›ï^Yêùòý¸5œ‡NГ4_Ü}|ýåüÄ�[H0ózxŒ�þ5 V¿’\ÂÉ»’ˆùuveÛJqÈÔ)¨ŒžÉ2ç!RÍ•Ë {\ ùY¯´;oäwq\p<)ϳ¸5zï�çFX»¤‘ö–ô’UÞ|ïúJÿ«WH·†‹^™†·fš�,PfûÃ�úþè™Ó—UIû Ï'Òšt–ÛøÃc9øAìÐÒÈ>šî¾7êN¿)`9€JÑëðôϽ(PçûOÿ[š`©ê†û÷ç<=•ùâþ­$n4B[#…=Çk=–›T_Ö=6P8šã^ìȵîWä�ü ²ö˜Tœœ{¹ œ€íTJ ©³”µgçÇ¿MÁø$ó'e}øÒoÚϸ]F7}v˜/�ªû§ýª°¡²µ_ñÚ.ìgÐ$%(O¯¡}^(Ó]d :eϯ÷I^`�ŸÿG�¡øÙEúÚ¬°³ÃÕdé˜Å<‰7j0–ŽzùDÛ<^%(²|¿p¥˜y~t¼Ó ”˜õÃö!ÛÕÿ¡ð“)Æ?Þ¿°Þ\iûLLòüœ™äùñy‘Åíô!äÎ=ÙYg�uÖÙ]~ú~À3ˆm àk¾`´_èp¬àA¤t‚gN�¬4Í)S&¿Ýgf‡xø©ŒƒëÙáFµM¬¨ë»mb3%´üŽHc¤þŸ¾v¸ùë«§Ò0÷QRJ*¥.ÕËÉ'Þ}öø+e}n´6yiËÜ‹X^þéñþ­´†_ª‘e“óh—�“mTVO °Û¶‚B» ƒ²rý8èdÕ²Ä?œCÖã�‘j}é¥Ñèá…Ÿ ?}ôçô01ûˆF}§×¶fûréþæÂöa3’ª”Ôl^:�� Ëç/î|ö̳ù‘ƒ·[EËûzåÜVˆNLšËò×=ß±¥ÏFÛØ9Z:€Ø*–³“@S‘ÿR'±8i#ílЫì#'Rg¿‚>‰ÒG dø¦ùÁ<­ñéòa¨Å±þœ•µ\ϯQ”Ù–¡)¼~¥ï�;ý@�u~þ†" 4E"�ýÃð"yÎ u* V ¦bq$¾ëWàñ‰TîÎ-š°(…Yf)Ü8‹ïèçE GBÜåŠqAnBË“ƒ+þÔGÆvÏ�JnA–YÑÍQÒs;G],=² }i.^“räü±E؇4_°uÎ7—\L$AKòr&ªŸjÊ–[åº ìí+'‹Ònéèg§0î-ÌÊÅ ±5Nù Ù8g‚ ÐÆó’i­ �5STÞJ‘+W2TA-7.„s]a^c°Gò)üͨeÂþq Ø,&¸�uÛLÕ œ1rlšA4<'÷5$wÍ@BŽóA°ž3\fF÷5€ÊZ«ýR\åfÄÛå„+2–±¯9ñ‘LÓütlQ+ÙcÒ›�xf'­}JKíGñXä)fùtrö|aî—áÒ jžŸ�á—”¨tÀOg�uÖYgwüyÀg@;{À\ï¡%üÛ€{h‹@z(€ä1…�hϳLw[^ÛÆÙw'Ì/öM 81Íi°_½ñ`~ãM(§‹º1ì þèµSé…›GšŒ¦¤zþ¢a™@饜[9?úÌñ ˜k2eô`Ê:©ùò_¥õ…çðh3Lóø%�ì²wÈè×àÔ×QPò�ûŽw(í†"y…(/—R�2r|¿:g¯@S*ãc3¯ì|úèóåÐÌ]Å—ÔÒ| ã¦ÿù‹'šŸÝ>‘ré¥"](¤’†×æšÑí9ƶ(ùþ/ìü­³?)æF€ÉÊ¥à¦NôÏ}äÆ-™-Œ ä‡Rq±í;«hކ£ýÊ  ±B£jíÓ±3Û€qÝrÆœ4ðrQV“ãHOrm*31¥cŸ<³àUé±ô½hÔ&«Ô—oëò³¡¦ó»öE¥‰hkí/±óAÙ`F?ó@ñûˆé,ì/\Ñg§ítÛgRªfŸ¿“uÜ› ñ’|ZÍO~0!†ˆ<3㵑¹-ò•�¤Û:à±�,ì&a(È™¸& �&·™ƒI\J9ûåFõUùÒX2& ÈwÀ* Èíp`¿³‚SÜßu?(ð@Cv-G‰ÕE÷Š÷ØsZïúäýûO?'×ý¬qÌrìr[¬d2"�`þ�Ž£¿ƒ ŒPƬޛ÷>µh™Zñæ[j~^£ä±)É@±�âA)øý H®ÈÃKÿˆ‡—í�]®¯\M$Ää}Ê7™·T«}NXŒŽÜ¸0ìm`ÏŠ¤ð™�!Ñ)î÷Åš“ÔBÎiå©9v$V§M~S‹yX„8oæ±ù?Z€‚*HIæêƒžJ.5ÈÃéË1s�öØÓ |,MÁê™¶]îäÞ:묳Î:»KÀÏ:€Ï¸íì€?ðsÐ~ ÿ¿;àasP€GçöMc8]½Ü@ªvQ—ë§¶ðà}ôzIöÓóNáô o!}\œ fbPßÔ¼xk®ÿÅ §›ËÛD,÷z9ÊtHe¶·3úÀ¡—Æ:tM"�áFñDiÍêWÒs/ã¡TR¿¸U�'ƒ„¬Év•yï…èk£0?�Ì™³¾ƒ*#× îÀóQãåteøÌ¡gÇg—oÐyQŸ}•æ1Ÿ|~©ÿå7÷¾sã�´=ž1;D}óÈh®7꾮 [é7ÛãwýÑÎï=ü*zM”õœ}Ì�~7ò0 Xþ± =CÄö�*ëF“Só‚¼d³±Â�¦u�R¾#"�5k—èZÚÛLp'žK%÷Ì÷ d?™±^™ëðh?Æ’˜9³Îf{Z¬+[Š„û›­àn9n|Gìr¢Ó]uŸ}ªý�QÛˆ‘2é7¦) 4?"¿x¬•À3ößÁÆþ)/ÓÀtYǩ˞„.ÅgxèxÃû±Ç›’ÅÒDz--�H]VG’JcúÉþÙ·<ð´P6R÷òo$vvù,ìê€÷Øeúx­|f>ðãKö¤=ývß‘}îâ²ÍUf-f£ê�+8¨÷(—ä$T7e9K0¶HT–>G»cVe{–~È<¤9L xóo;�@Ç øA*܃g¸áÒ ºà3͵�§•éB rqwŽÂ¶~¥#¾(QA@û±E× ;òa,‹Ù§>ØšÈà9ÿ¹Ýj??ÿMî§ðYó8ÚåÊ—Ò~îsÖ«�žS!˜hÈ9ÇsXß-éDOû’n†æ]›J>@®ãX$±û‹æ åŒï?›p扳óÎCŽúUœû§cýtÖYg�uv�€Ÿ¿à=bÛðÏ|õ·©€¦=7pª"n=â¶ñh%µ}ãýÁ÷�ÝÁÉgå#4ÎcO´‚ýÍÕàÃ"pœˆõ¾ñÆ�þ×^?�6Fó(Œë¶vÍgnŒ~çèÏó£Ë·ƒ èI—ËìÊך³3o¤˜Òè¯Ìž*ÃVsÕòeÛvåᆻ¹;&ùƒšÞ„ ”RÃoÞ<¢DF{˜>'g4Mã~Þ½kå¹áG]0õ©Ù?ÜÙróìÍ¥ÁŸ¿ñ`º>\‰²k—…Þæèý^píjï[¯|éçO47wÖ€ØÊâàúð™Ó?½ÿäOFI?Xí¨ÅÙŽôÆëþ­½3Vvë9ʪï²6uÐJ\E/VmŒ�t¥Z–ìDkö�:ü­mÓ±�ên&m¡@`mç°>bYL·,Ö÷ÆPÍÍ¢ÏÞgÑyǶ¼?°ŒM˜¬h¤©ôs?ü=f¿©ÅYfZÊÈÉ3d¥ÏLà‚{NbG3é6Ȳi@´�ÉñÄÑüÚN—\5ûwü’ÛËÀÕf%‹£2Æd˜’×ìZô[ä± KMxžä‘¶÷×X�Yì†ô‘°GmÆ�<€à韤.}x/¼Ï¦IÊ TBDvר²fæq!ÛE tÜÁž€&‘ fdû„ÿmÇ­ æãlÎÏK1ÆÞ=ï!D2îüN�VRwìSrºå3X#缊¿¥R²€A1½Ïèt4Í�F™L9o8ÁXÜ6ç^œ·°ìŽ©Òl ¡#ÇfN®<}¯Žü›ùìâ�HÚz,Y9ò8Ÿgq¯›?®Ò@(K~UÜY.Òg¢Û,Cý&ó§“K¥ùÇdýÐ1àìS V9�¦•�ã²~:묳Î:»ËÀOÀoø8€YÄ–ü%€?°…jô‹ÛLÍt 4ßÙšk‚¤ uò°lnqˆ‡ß™±z¨ïB¨�ùàñ±üðtuŒ±b”›þ_XïýàÚ©4B?šÝæû/ ?·þr9<7º“ ›«ËßN�÷6Òê/Ä€]‰·†€Ð¤.¨ òdY€]0‡   ‚@Me‰Ü[eMê›2?¸ðÓ­Oz³½Œ$�ÅŠÊÓ ÌK[ƒÁç/ßßœÛZgçsfå½4ÊO,¿2üÌáóè§‚‚‰ƒ£ŒÁ~v¢ÿ� �§ažbËGÎï|î‘çòý+›N•#ï‡b;øEt6º ËÿÇÞww÷q]×î;¿‚�‹ØA‚T¡$KÏ’bÇ+ÖSl«­8~à•¯ðR>Yä¦XŽKœåX±Û±%SbQ¡D‘bDø•¹Q°îâYØëìœm&v4çÌoz¹¸3÷ì³÷¦A…‰‡&ס;5Méß [&$’aНIBb¿0qmA"ƒ“žÞõº†Ý|f‚!$Ôc_´»�¤`¿(X6 ^Ë~*Sx~G böX@Yú\Ø|ÚWÓ¶x†×ôè<à“x²’¼˜ +Žlh”¨Tò]zä‰d›NÂ6÷èÎQ²vÏ îÌè¾ø,Htf–a§Ù”³'ÖI”ð4ÆSv“f¢,›Ye¿8£‚ ZÏ•NbJ^_÷šYVØâV!.Ùž † –Ö±çî¿< U$å¥9»>ÌF7Äá8´–ªýáóóX?v¯¸)Èœ -�žY¿‚u{hÞFìðÍû-$NØÞa&ëˆ%ÈûÔK�ÏSEàEmÌ@ÁÀ,ßï›gΡ‡1NqL?¸†A±PÜoΆ)l:‚ÅŽì—fB&éiµ)›—é_��½ˆž€€Ï¶?’í·ÃŠåþ�ğ/²°€ÆD7u“� Â:-mæ�ÒqóBâ-o$‘;ÕF »Öqâ3ô'«mT^k£Þæ€�Ü'/<ê¹}ðéªÛtuÐë}ëƒCÕ;·÷ Ð_¬œvÙ­ÆãGæÎ�ž»ïziL@6í}ÈÖóÿTíŸz÷W£4�fa=¨PçQyÌ×§°~�7AŸMPu=4OÎe½±� PXCeÀæ¶–CÌï龿ñå¥7ê½–�òÅê·lˆ¢½^W½W®ì¯N­ÚÙ’ÊZ”Ë:0uiøÂ®·óR¨ªÓG�þ×O¯Tg¯­¤Œ Aä u}lñÌÆ×î?‹ÙÞ8’œ´Þ]Vzj05#1Û£ö]Ü…�ª~Ô(&ÈÙI„s¢-;Éý$�e[ºV1’fÉ09­ÐZf%c ›�÷ÉÉ1hÕŒ!Û'ñ¸ø,ÈXºµÌô‚NÆ%3ïvslüï´úðtœ…�¼‘ûSŒ7 ÷~I¦�Â'H:4õ&ÒIY]}­uÿi[ÉÒ#ÀEÞû#Y‹0Ö. ÅšSÀ` ·”H$ã„\”´§àkc°Ç’W$1É!Á·“�¬ð\R€JÕ€K/QOׯ˜±ÔŒâ$qØwð<~_20÷7 h _vŸ ™äÓ{ I{@³â¢¿cv,�¾d‡Ù¾ì{Z¿;m^ r¾OÕ @ÒcP6ào1ïyq_a1OÀþa‚àI`)¨G¼ÿ”ÕOl8¸…É룜´Tj ‹ý ƒ>ú;J±P%àì½KÌ{ÉÁ|ùµLt÷Ü�ÄŠ„ #ùRñ“ ‘¼-³ËuÁMÖTZ*’·n‚öt?ên³íü„�ÅÔñý\žú¡IqÀèix1¨[ÖOm´ÑF÷øYð<€h× ðsÿM#áÿüžÅÇ�óËÀ…‘%qXó™YCUÆ}GÖ±ü@©JÂË�ŠÚ¬‘“!*¹"¶W@®Ü—7Ð¨Þøx¦÷ÝKGÓµÁ¼;xJ0î÷Tw}ô…ŷǼt¶—À‚j-u~”ŽN\ÀrÊ©B“(’n©È¿ySÖ È(@›ó 0 Èæ×àÛW$»%En<[Ý}nçëÃGçnŠDãÖàÜ:£ó“‹Ýº±’Ö ['åŒ|'ƒ¼�Ì;»7†Ï,ž­œ» äìí“ÛGõÖõ©þ·Ï|îØT Úéöj‡Ö¿ªcÓ2X»ždidÖUx_XÐÀSÒ-Ùä¹{ûàAº–ÁŠ«Ëmý»`*³iUéÏÉ\9HÛË>°S‡¦Ý4Od]Õ-f 8Z­ô‡%yFZZJb0«êQ8¤ —ÑÿUÚ»ÂIjéøÒ0¶ VP t…�#é”#ß—»›JÐ9”¿Zúˆ’ôHÙ5šO§R.̇F™»[HéI'8/Xè°œïß!Ø�¤•K€b¹Ï�]ÂñaPì-Íøa?DÝn°íJüì"a&Ðù«JÁ¹ž Ñá¥$¹`E†Ô¸œaí”®M˜¯Û4½ü¬]È—‡a ˆuä¾ÂwdÜ×X{� ¬˜Ý íkg—ÆmÖºfÊJS£8D¢V½[clÉ nep f”ä¤\ó·ˆô`t@p–'µƒÂ 1?@Ô4ãÇ~À P]mSx…Šœ¸W˜eûrÚ=I]�Åï%ýÝd‹$+?¸ïµ†Ú•fº)ï°LÀ³”såb-u˜3ûÿÐ~Ê< ì‰â$á�gaÞWT…Á{(`æ‡`3�Ïö/'<ðX*>?2¢—#Ïk�Ÿ6Úh£�6þ €ŸIOø€ qløa‘|@ ýçFà0€C›ÓºjÒ³ÛAC~ŠNo„å‡FØ{°×|À³vô|ÖÍ·‚ެº �ŠÝ\^êüôÚ‘´6žð³à–E¬w÷¯�žÝóv}læ6/äzKö/ä©ùŸTôn¤½�a@�ùüŒQäÙl¾­W€¢„\×wÀ \B… $rƒ¹›Ö'§Þ|qçûè$?»lŸð¼€ª3·§{wåXº6Ø ¤d{  @òdµ>~rþÜèé¥+”�󃥻rÎÝWß_êýèüÃéöpˆ£žë_þé‘ׯ�ßw“ýÌ#!S‚‘@ú?ñ%4´ƒ?/‹“ãtïTåù6MW´$“LÑ‘ˆB}Žm$ð'Kl©Áç¶’dheÇâK7Œ*ßÉ H%c9¦»‘šà}ð½ÕÚú�,:ʵ�BH9:¬QN’¨‰¼7n.¤®™ñH8• í7m%¹ù/¥—âd”ø¡ÍÉ‘0 !åß|é%GªK1 ´ÿ�cl!¤v(¨Ÿmž�8ï´j“Ž¢Î?b³d%¿/ êT�΄fß0Ýy~&�—ØIw‚Ô€†µí(Á_Bz±œ–ñS '·�°X‚zRšÆˆUÞ˜1ëƒ� aî"ò¼ZBŒYvá_$“°î}Á>I�Ô$-Óm)Jòs?EmX¾78šûÿð4�"wmä®™I¾>˜¾6– Ófÿ�í!CĘf6¤¾}Ctá ´¿ 0Ê…ë`y锸½…¯Jí‡ó›Ò²¨šQl¬Nqiâþ†mßéO¡>?y„ÙÀÉ)¨kκf€Ð*¡®ê_Òù†–�´ožþι[/ ~Ü´Ÿ"÷öðS,îi؈ãuPnåÞÚh£�6Ú¸GÀOðY_0�fñ/¾àJ´Ð]LXAJ»½ïN•½c;›tÍŸmŸ“3œøLÆìB÷. yž®ËØ:-"¢¤sU‘ôóXW½o^:Ð9µzã\’­D Ä<>6}aøg{ßÅB¬ÏÞ  Ó¯¥ÅÙMvÖÓ\P‘s+ÀOÚœ6E‰±ÉÂÁãñ:Rê”å@½Eî-§\�O¼µñìâÙ<Ó{r7<èäå鯰×û懇«w×÷£H³IæI'�Ç'fÎ_X:�éN�ˆGÆîÀ°Fÿ›§u^»ü`Õ} Žñ¾Ùóƒ¯?•÷ÍoPÒŸ¤ âä›M �ƒ X‚Fj\X2»�¶.I`Q²Í–ÉAtœÔ�/îu{¾0Þ ”ÿꌎ0Á€%mª*¥]s⦠ÁæÙÞ=Ôl™ìû¼±w É™(Ï(,[W$¨(¼Mâ*ÛÆ‘CŠB·}Ò¸‡ª õô¡I¿ 46 �º4K¹€`Òm¡RmÀÚ�Moß�áù9<ñtµ)÷æë.䎄 ½|Ü?m´ÑFmÜ#ðç€ìE³xÀ·\D‰úý‰…M œg·Vƒ%ßÒ‚£,�‘üb¸Å½ë8vrÓ¨©äD@3j¬-« ñ*ö+ÊïÒ…µ~ï[.Wï¯ï)f�Êt*cö è¥Ñè±ùwFÏnxê$€iáÇéàÔ¹t"�SÏ#䪰ù·x•e6]¼€pgýd>A²û +m'â^òµÛ6|.–pU �'Œ› =п‹Æéle!H>¼'ra Jn¹Þ,N'*î�çÅ@Õ̱ÓÎvÛ¾íÁ>-‚¼Š#×â%®f€âwd˜ß‰$"(y&@Ìê°‰ô…(Ñùm„î.qvàøVèóÒ2š”üT€�>{8¬ í5FÁí©©¿A ½K`t�5 hÌ0R´fz  Œ“û´ŒW§GGýAU%êO´ù?õ¿&9|¹ºàˆeàt!ìâ›ÀV´e’-ËÇŠ™¨¡Çü¤|UÖ®48®^xaU¾dxÑúôÍ*äI©m4+F$…wS'~IÑùѾù]Iß7Û'šGò„õ Fªb|D �µ)êƒkOÜŒ/ÝŽÁ>cîE«”X²ÉÃÕAù{DÑ· +táÃx#¶'É7ú­}­-¨×´Ë ŒþÕøù ¿¨˜•IÄùƒ�'ì[®01©ÊTtÄ˽ç1nåÞÚh£�6Ú¸GÀÏÏ8‰fqÀ+^C‰úý�}Hé(€(X·«{™ Tª=0¨ º;5ö/oàÐqóÚŽÆnl)*€,8ÇÔqÖ—rV¡}ëüâæ|÷ûWŽ¥�†³¾ð·Í˳½[£§Ï�ŸÜqîE$Ýh…Î*º ÿPï_Äá„”x»\� ã'�Ù>ƪQo®7BBÚʪÇå,kä©îêÆS³¯ÿÇÜ5pþ–�åëìÝkt^½¹³ûãÇÓ­ñ À‘Ë@¤ìl¾»:zzÇéñcó«T•o·Þa§„æÉü S•:§.Ïô^9w²º¶¾ˆ#Ovn�žØÿúð™#—PÁÓжßRvB'¹”;¯ýt˜@ä°Á7yqÈ�Ö:Q€Ýc%Y#€C�܉¦e’+�T@ó€º\‹Í@1õ5¼om¾Î2rA¢–.!¸wä ÅÙ5Ñ'¹¾tÊ*{ d‘RŒ Ö¤×É6ªÐ¶ýÐ2áýC Ô×ïeD£@Ž|œ¬ÞÖEñyžvºÀ˜Œ"$$ßlŸA)é.šÑ[AÁ€cmmÝaLfîºoÎ9k@0FgEB×1ß¶çEË¡¾U4�¨Yf€¦ Y8Á´EâÃ{À›NbµÏBµ!¡O{Y„ß�š�â“>ìq׎'¡|º]Ù•Ü*¿ëc&e4KPPg¹fÿò™¹Mhi'O2WN[¸ìQZU%üÕýÓ‡#j�—¤èi£o@'„­^@áP¬Cý¸¥ÿË P{�Y³j|¦óæºXÏö¥ñvÝr?ÍóU»×Þrª!À’³Ó6ÂÒ—ÜŸÃ.…½Æ|w"ûÝ.* QS(Çòo êŠîg¤o¯.rÉÁ»q›ÌÈGŽ>Tav>ýVÀNó¨ŒÛôdm´ÑF÷øéø_ÐE#?ðã2ý©Œ„ÿóø‹€eì«Q°‚ô! „øã™^„£'GXÜÛ½[£kMÓfð‡’¹:)+?JË14…œrPÝW.ïéþËÍ£Ôý”rÊH9(ä Ø¬¼wòÊðÅÝçêÃSëÂk�L¸Í›câ=LÏü²:Ò¿Œý©NÝð&O¶é¥ò·HÅógðIþ #w1ž˜zcýK;ßC‡ É~èòç\½µ6ÕûΕ•ty¸ È9å” sóÈ@îWƒñã³g‡_Y,à ™é&J :ƒ&éã`ÏÏ tøöîÞ«Në£Y ŽzÇÄåá—�¾6>¹{U¶©X‰Ú&ý³„þª;I¹/›†� %DµwŽ“ ofJ­+v-,Ñ¥T�f¿Ü9 †J–Q“j¨ëÅ2˜± ܶ«Þ-_UÔr‚€�ÈTy*Šý&€xiŒ�F•×ÜŽt“æ?m¬e²|¶‡E–Y'§z¶¹±Ùž�fx‘LpmË�ŒfÙ�XòFKãðÉ` ›þ»Dš$ˆ”A&/ ïÓä_·n /">Œ�´ ú¯‰OÚ {x>ÒÌ+$pÚ»H:¾Ìm@I*–gí´+ÄIþ»`Eròû}Ž×úµ¡íÇ~sá�ß(Áëy¸rÜc°"�b–a,ÉÌà�fz0�™W£yñêv`íž¿+zÊÅßšAíµyí5¦NDÛ,Bѵ#)Ààv2‰¾XöáÔ4Öß_‘Y¿�‹$Á(AÁG”…§n)?¢wŽu§«A’W%œ ndvöGÓô�¸=)æ¶­ªÁ?åfå@ÊñÊ $Æ«ü~b$ì÷ô,ðÈŸŸ0rXͯ“[¹·6Úh£�6î!øóhaýÌ¡Yü Àw|‹O+ô—ø�) °HEÚ âŸìC⬫2vaÇfæº"áÉÛøëÆ&£Â<2%’e†Ù6À—ßé«£ªÿõ�tÎÜ:€Iû ûgÞ|u÷»˜íŽýÊHÛ?ˈUëèÌþ<Ý7ñN>Ô¹�…œsaøŒLÁzuú߸r¤snípFF2i·´¹‚a@R�W¦>ñÙYz³�‘.® ÌÀ#­ Ö¤çŒRÿë§—;§®<�ƹ‹ 6ï𡹷?‘…{#ïšÂŽ+‰Z ~› )fñ /gç€þKÁE¾9ZWŸZœ`Q‰;Xè„úÝÊ›°á¹¾Ild«eH8ô2Í„$ (ºgÞåIÉ iòÎìG–~ó¼“BO"›Ž�,ÞÖ•Ô÷Ïvnû×PnÞÏð~$¸¥•ùâJÛ˜¤°Úì9iÏ–§‘¬>[ÑiˆQrL7bÅÀQý#'¾la?T@à�¾=ÿ°/,ç˜r8íÄzD{dàdöú ÑŸI#÷ÀËI4›t$’ØÇP,Y 7Yƒ¦ ¾’'P@ Q�Ì’WŠ S\é\k·>c«ò�¶².´Û à[=˰ÛëwQ®õ‡vÈ“7S“÷Ô=ûtü‹š“ñ�3±ñ˜!Æ `®Y&ÕgO7gMké\ÞSÜNÜ1[,÷¥Íþ…JƒxÚÌö e´¡W”eÓ`P š9�…t¥úLT÷žb þC–L$~W– Áò’¦ŽÊ€öЪ¥w1�È×É‘W¦Ðl"ýMÎ-w >?ûÅâóC; N­9¤O¤•{k£�6Úhã?û‹ÏÏA4‹ ^p¾½{ýÇ"V�óôV¸Ä‰>eÎhõ8–-Ý·†å‡ºèõ«Ftk;N ×Ëç‚$ü|âªZK>PÅ´8~YT½³6Ùûöå•êÒ`WY_Êå~ŒŸ˜?;üòÒ‡è$¯ZNhB›óäÙ<7u{ÓÇãÙΦóÚp&åT_ŸMЇ2uG·Fz6�º0>Ø¿-äæUÑ©5†q�Þ+WïëþòÖ ã¾� üäL½wâòðÅ¥3õ¡‰u;`-³1®O@4°,ËmJÛ¥‹«ýþ7Ï|�ºŠQ\ŸF~$“ÌsÌuýÊëi„,Å]ê�³o…MØ]QÒl'ý™yÈiQä(… ‹¸¡ %ï4´ÐôDmž’¢nH'¬�?ʶ”슒1H½ïø™zžÖÆIPîS‰9$$³!k‡%"ûûœ YúíØù+ ^ËÁù÷��+úT>O;G~'…  Ht6 bPäÅÏÓý6a&˜+hR€™=]l�mú¡Ùú‚é!úµ^²çâJ òŽ2Ý/×gŠ�BW–N3ùùqp¡@ˆ³6öÒ!Ç,A)žŸ‹¡°Ÿ_¨Å3Öl3ÝïiÆ�á¾\7û·ù@–7b e0ðcë•Mè7�Kúz©‹‘2 >Ç»5#ò ¢ùÄ~@�ûs–�*›v”P‰NEzâ»V¨zÞ‰,Øp¹l‡ýÃ,dÉBµuxK2‚4øÃýŠæ1{0Äki¾ðý¡@à{r.?�°égÝAÉ÷iÉ ¦æH±Ñ²br%±5|NTÑ®uˆ“Jï–°RÚ?J9¸ mÂ`’¦8:æ÷ü¡6O} ›t‡ï$í¥ÁeÚ,K& ²¹]sÁ�m‡öÓ¤¡²NÆÌ?Jùú0¨¨Öãvåö3|¾|ÁšÙ*ý1ØWŠ›>߃ìw’…¨éPqž�ÎVüÃÐQ|€Q€QðpB …(Ñy'w>OÇß'1û0&Hivb ßÚ¼ó;0êo Š6Áïõm"úåê‹ã”ˆ„ÈgÞ]aûÅ3 >ðyÄýž—ì׆ÿ‹$L–l{ �cÔf¹-iKD–dvA]áûZ¶'ðÛGlEW/Ø:¬ç–é¾ó>,Ò2 Á©òwˆd‚iV—hëºTI¤rÄÌX`Sæíä“fç«{àëã½8ëVî­�6Úh£�{üt|ÀôÇÀOŠ×ÏF{Ž„ÿû—øo½í'ðGÔJ&-¡�$0dÓ½‰!VcaW·ñ “«Å¸:Õ"¨f¢4¨ õ›'%F½o}¸¿û¯·ŽbTwéæñNS}`âƒÁŸí>—÷õ7 Kˆf’,à{!ü.¨’’+RýŸƒ2ª÷7&zߺºR]Ü÷õ¦ ½4=2}vøÂÒtSYNÌŸr0;6W €D©LPƒÊ8aZ×è}ïí}ÝŸ}p2 ÆS@õÒÔÅÁóÇ^¯WvÞÀÉT‘¬TWµ*ýÅ@ÎI4Qq~¬[&4ÝäL*§JÞo4 5*¶&ó™édóÄ STr_ÁÛꈓmt®x%€¨prVBÚ‰²™n·•C9›ä´�¤¶ŽŒ¼YÖ†4è¥ü›Nx2ð�”쎣‘8V~Û¶â_E€@Zâ.öþ�»�zG²×=ö-ì0§mÈü¶Mjv‡èØ—Àc¡*êÒV}.‰ÁÑ»’“®Qˆ²lj;B7S1�bÉUÙ÷;sÖ)èQò=–˜—‰qïü4v’n�#ôî º�‹´¯Ƥ$Ø?ôþ°_ü>M�C�E�[JÁ;2jÍÙ?œèÖ¯ÚÍ`P3©]2ê\œdÈ @PËÔÊN΂@pjd Æ�f¥&“]ujTáŽDmÿ!’ªûOn#ùQ?TŒ`…~ÄnTj ¼VkЖ‡÷y¢°CË‹r1�[ W>Ínü<0+•hƒH°€Jˆqn‚Óà| ^ Ñ—j¶aÌÒEUjÉ[�Âê>qr:áä&÷¦_üq4÷ùµÀOm´ÑF÷üyÀsv¢Yœð×Û»÷)€(f�q)í m`ñ�+ò9M™As;6°òhÂÄT¥Aúžr7ZšIûÅ(ÀˆC]Z:&]tûsùhõöÚ©ÌÎÈ)!•›Z—ûÚÁxüàÌ;ƒ?ßuS�BwÞ ?R¯Ò†ºå4ämº=®ú߸z¤óæ­Ã§. å²<¡ü.Œº>2ù‰ÇÑÒ[ygwè«xÔΈ[ ·£BG8Raªþž¿=¬ú/½y¬sæÚ‰T£ƒ 2P×Ë ç_;q:/LŽãG 2&ÿ¦“Žç�]ôæ¶u�í²œ�l:©¢…Ä�FՔ؊³©±I5Wp+ýqÇÌ�eTÈ#„½­¸�áéØˆÝ¯lŽovª)•ç*¼rlšö$€¤��²Û\@²ÃÙ|ü�?�zžv]qC£v ’Ÿv€¨b92ì· i2º{¢ÚßΓ’àQ¥rì“çÈðDËI&€<3o¸ ¿˜ 0€l6iöUZÓ€Ó~é¹Ôï$‘›½O’(¬€’ªÕþöüà%>y¹w¯#¶!ß3�wäxFÑ«ï¿;ƒ7Ü·D” ï°¼��§sl�…ò~ù9Ô–¼ô½7š‚x|ïÝ‚ õÜÙwŽ™`qdÅä°é ¤¡zxq Ò’‘êÍocìqhß|Ú¬Œ˜úEL a÷Âln«ñaäy1(‚…Ú§Õ�ïø7ò}¡åM%å‰U5‘ý­3`?E»O‘Þµ5Á¤¾xZMÉ” t-¶8’>¶>˜€{b;/àÚgÐB�!ð £ï�Á£¾kœÐÌü“Ot°ïH…^?®tÃs’ÔÀO+÷ÖFm´ÑÆ=~öxÀQ4‹ËÅçç\{÷>}Ç.+@šDr*9�ð€G•±{ß:Ž<ØE§“Ô¸-ÖFEŽ~³ö�, NÖÆù‹²nõÆ­™þËWO¤«Ã�6ÁätQ³ß9c²Z~~þÌè™�—‘—´•‰aøðƒñ*[Y© uFïû7ötöÑ ¬çɨÔ+/õ®žÛñf}bú3‰î„%îÄMS’vêJ Ždº$H¨¶MuþæDÿÛgª.Þ:Ä‘{ÕÆø‘Ý¿¼¸r�ЇÜfcfŒNFÐ Nò-ëõù¹yFèÂç^%¹r ¦#öC3ju;ÐEö>b¾.IÁiæO>@“RÄ¢dVOö´‘´¨'ÇßÄ4fm=g«²÷��~ XsZÓ‹d1EŠ[{rJ Ã↓-Øo)ó­ûCÝÔâ>GhÙoÞ‚ap£žAÙŸ�èrº„�%kÌ bŽ·}8´ ÉÞ)Ü]7ÐÅÉ –@¸Ã¬0�múü`jF_oäQÒ:ã6}ÖFm´ÑÆ=~¦ü)€'Vs­ø>€n‹Zˆý�8  ÃIÄ2¡˜>b>G²?�îWØ{¸§œ¨µyªB7(Œ§$™ÒÙ7mûº$¤Ä@WûX¤î®-uÿñ£im<ûNè)ÓÈ@Jy±smøìÒéñÉéUºï4X¡jÚDÌRgZW#v~uk®÷Ý뤛ãöðÄsœ¬nÿxîÍÑÓ —�¢þ­¥/@R±(o›¨mhãYNp•i®bíþôÂŽÞß¿ûHº5ÜÄ‘gz7†_<ôëÑ“û® tP øco‹$Q5(ü6ØHËŠÛùÛO¥GÛ4—‚㣀%«dr‡ Òeݲ'à Œi ¯ß\r'³çýCýR‚t)ç•võXjMËÚˆ%£o'0QÂ~ëªm�ŠÑUês¶ <ÓtéC $f™,Û±ˆ!Ë¿Å.ÝRwÀí‚ö!¼v¸AÅùîs$ÓÐKžªJiJ¾ÕÙ¤bO@èø LcÍ’ãöxŸ±¢ {�5•€cïûÄ@II´ãÛÌž‰öò�ëb‚ˆ ä¨ylþÿ?ñ³£‡­û÷ô~Q2JÔ>Ä-’ÄÉ ³ã%ñ{HOk6~$Á¿{Rè[$hà˜çK�BÁæ×>@ZG6Ïésè�’ýtž|WÎ$¯qèbŸ­O3xÀ“ƒ ˜ùÚƒ‘Ù×,½¬¯`ð™?ü˜#PÛ¾�Êoz¬ÂOPûW:R“öÛµä‰úÓœ°ã‡t[ZzðDëI°9’`l|fé¢MÛ¿ KÀCŸí`a1Ù¿½¬›Z¯•{k£�6Úhã?€§<`²á»ì§~`­½ƒÛ‹„ÿ÷Wø”DÇ�°×Ç@ +Ø=v÷äôÇNÖ˜ÛÙÕ‰-Gþ-[‚B&$lZ�@v~¶®Í‹“dN@ÒF®ú/]>ÔyýÖ2FèºåX–pÏõá‰÷_Ûu.ïî ÀY:®æ'ýUÙ«yæØ3Ò¥�~ÿ×VªóÀ†(Ýôï’uŸÈŸí|½TÛ"[½yBÉ{ø²V!©5îúch†ˆ6$ש÷ò¹Ý_}x2 ë ŽzÏô{ƒ�ÿ¦><¿.åntx,²$’þŽ>O` ¤á�§ô`Òñæ<ô4ﯱOPA\ÍïÉç  6fI äÈ´6—æ%fP‚€BñÆ$].1°2™ö{û¬éÞ)Ùn�±7‡­G  ÐàšwD ˆlÑI-)˜9ˬ¤R=,’°^"ÖþªÈh,·Â¬Zóúa@QÜéÛ¤¨�‹ûFíµÌ¤ó!o[‡NÍñý ét´ Gûö£ÓõÄÚ¦.ðLjB'ÛÉ¯Ø =S²”h`±mI} t_{œh&�#…±µ›%ò”Ɉ±¼ ÿ&@–D¬�´T€O(¥É×áɦZ4g‚ñoçaJiS.’*�¤0éS;sŠ"À…±F¥}h_uzÀÓ¼KH@ܾۙkó¶?WUa!A±/Eáû¹h]: ’eŽ@9„´§�1w´��#R2Í¥™ý¶*ýƒÊ5+"¡ž*º;ñmO>NUÀè&@'Œì«8¤Ä… ô> $&'¦€‡Ÿê`÷¾ª)ÛGï4Ö‚måÞÚh£�6Ú¸ÇàÏJ‘{Û…fq®È½]nï^ 5�9'€4pÑk 5ÆÑëq‚`ÇÒ:ŽžLèMT0–›ÈŠ*ýU‹,ýFƒÖ�Ù-µÈ „òVFº8è÷_ºòï`ËþÐ$½“FõÑÉ÷Ï-¾“÷öb¼jlI³×�ºúøù”Z[Á(wQ$éŠ×�MçT¹®|JýùÎ3yo`ƒÐ˜²Ãó˜�ÁI*ÖWIN®VÔÌàh`‘“qiu£Ûÿ›7�WoßXI‚È ãzeçé�¯�8‹™~M ¯˜£Í‹vË^+¦ ‹Ž!~±6#ò9bo)í¥ ½y_Q¥{]Yúm™ÅÒ�J»\$fEu"‡œyÊ¢$oךêÊׇžµ“³ý@05BØ©$&'á(áénëêÇIPå äÈÓ”_ =‘ìW�_njÎ'a9yÂ,~öïHJ~ ½76x� �Yo´3"y¿mÈKQµxÍ÷œq`î§Ue‚ö£ó½˜,‰ÇÏŒ˜½AòTJPv+Þ†ŸåˆÞ,Ó¬A8õrÐRLô4ÎOSã vNì»å+åxÀ¨¢’LS�ïddèh P ›UäÇ€¡¦p)Ú¨¯b01Q"]ÚSÐÅêïqÙ­�¨ææü›TW²sVf”\”�Üu7ƤÇœ?hÐÃ3½ïAN)ŠŸ± l¦Exဒ1i diŸ©š¥A¹  ½c£kÊþù] LJ@mcqDq®�ô›’�Ûû‘IÏ^̓Ç@`âí¶®{ÿc­tÐí5–n‹×ÑhS+÷ÖFm´ÑÆ=~<à~4‹ëþÀíÝû­ ¿Æ§4öù�ú[+ÁSô2pTXZþfì9¸†C'zH "É/#”ƒË5Ð:ÓTÝŸ—^Ê/qå¦U¬v~±:×ÿî�Ó�ÑBN)'Ûq]îì Ju>Øÿ`ôðôÅÑS³×ÑëÀö皌ÒÀšÎøãqÕåÆ�Îon/§õ<•SÞ\’rò¡´Ý냯̟?2ý‘U˜²< ´1+„1»‚l¹ùŽP™k4«ê;�5¥µGFuöútÿ;çNVWÖöqä~gmôøž×†_9úªDmµ$ã6g!|1(a LÏC­}P‘×L/åW#0"É ò’õ!‹HË}™ÿ %#V µ=n'¬A®µÇc¯†x@í¶�(K8’” /Q4CÛ„úýœ‰¥A`�Èûê$œNFèd%4k…f)m£¼+4ýÀV‰:X–2öŠÙ�´ë0DKÉ[M°e¾—ÁÅF•LnÖ´^±»t¢šÁN�-íV€�I±;�—�B¾TV #ÿ±æ’~âZîšmèÜ3YB¬Eƒv/Ø :ƒl’^ÌŒ$öG²ÆÙÛÒçÖJÀ€«i(¼+²W�/Í=èùÐ÷—ÆEt›Ð`sÀ8”}�íWƒA%Ü~ްU›×LPHžßòúÅï{n=²Fþt¡y?¿s‰ ÙHFW½ˆeáU4%nvÞº�‹Æd‹ põm¦í›€�I} y>›’áÌr̺U P*GbŠ=h+‹L½?2·–zã³aÖ�Í–Ò€ šÅòëY"fÈî[N8ñHS3 î*-ß68d>?£6EÖFm´ÑÆ=~&< àó*Ä1ðC¯¶E -èw�Ž8ˆ”*èˆ 0'‡-Òë�pðø»ö÷¼ [Q´-O(G`ó¤…“¸s ì1Ü{ùÚ}½Ÿ­žÀz=QÎCË•í»Õ ÞÛ»\ïíß/OÜŸœº…^Uÿ‡RuFúpØïþâãÅÎ;KÕ¥áŒÐ»³ÏœlÛ”�\“imøÄÌÃçw^ÚZA™Âü�Ý÷š²-e§Ò€Œ²”ðD›»ÞPÍGRÄÓÏ­ûã÷võþñ½‡ÓÚhˆ£žï_þÏ#¿?¶ç¦B-3%¨]2¨J™G· ;&Wõó½â['Ö×É~�-£½�ô=I!Û%´Æ•™.‚~Bèáëjk^Ÿ÷¡’^ 8oés<¿6@°Æ¿n[0°©òM¯‘¥™ErÚu–ŠmW*Í‚uDU89lÑoø£½´¬ºDØf‚ Ê„ ÷‡œ´UÞKþÅ Di“Ä×¥Ù‰°e®Ç”m¦Ùw|J$Á#°|LÈÝóLvj&ùY$ëD_Æl¢ á�Dè;“¼’ >•qjÀ‘ÏÑŠ#¾¯D$W¤pKf£FBM%ê IVɪ±·“fO+ „ß‹ì%øs÷,êjbäÓ5RžÜg¤Ú9™·Ÿ`‚…ÅÄd¤D6ûÈEE|@§ ‚“þB&,ÐÆ¥à±ù7‚'"•9ž{CyßMÜÏ9 eJ 9.ÌQë ? @úØU�°xrtâTûæb}©qa… êÚ¡ Iß² 0$ú÷ÈUo.EUØsƒÚù>Ñ>vÞZ—oÐÂ"ŠÏOµ Y·XÚMGÝúü´ÑFm´q�€Ÿàq_0ƒfñsßðq{[èw“@Z°KHësQ¬fÿÀñÏe�azf€£'3¦ç*„Býš…ÂúÂÁÀÂþŠü ÒÄ �±$Íê¸3ñÒÕåÎk˨S°A]‘`KRZ©BF¿ZÏi#OVtÓ )�r…õz*ÝÎÓ×PÈ‹¬P�ïŸ<·ñ¿ßÂtUÈb0Á5ÊÑω«Mª†Æ·Â»Bú^Ä> ,3!¥x8÷9¬Sÿ§wN]}(�êÇxß쿱÷&Í–œ×µØÚyι·úBU¡:ªo Ø€”(Jl$�¤HyîpŠÄ"b&~ ÖoT‘=÷hì�——ïçw|b‚›N �þ>Þ¼œf ­vŸŸ=zôè±Iàϱ¹ÏÏa´Å3sŸŸçzëuh³ãÀÎÀl;æÏ¯óÊíø,Õ ñ¹ö¼ñÞö_Ãñ[ ³…á:${KiZ7Ì~ur·¨RÙ`Ý}ž^Úºðµ×Î /¬Ê7#Ú$Ýp°¢õxxúÜò—ö<2[¼&3›¯;œTgi¾øâ3±�DXx7HOcƒ¥â;·+½ï½reötnxæÍ“ÖÐú>±Õµ³{^þòÙ_bËdMê×ó‹ÿål'ÉT´j‰‰Ù:¿i…Ÿ™\¦ÄŽ0›§„V›Ü[õ]nÄ©q0ƒ·ùCÕPm®\-ט„3ZÇEž‚'F‡îœ¤fà'Á¨î¤¤ýúDT„q¢RŸ“. &bõ¹N‚[’ýhUÊ[Щ%iÝh·hŸJ"�£öû‘RL,³Bù–ÄÄœ .yƒvÐ.²m0Ë#æÑ˜/=Çb· é1Z+–é{Rô é <€ÂD2œ»UlDþ]¶�ñ™§iP˜Añ8jCQðB‡UK¡¡£‹ËE‘€ÒÌuÔT.JÐ&ì7ú¡ÄñT÷Ȥ‘Kÿ�øB‘%d ˜òÞ¢’âÒÜ?–ay§ø®Ÿ-üq�×ÛÒ5-f‚¥Üއ𲟋üu ¹%÷'T?#êpâ‡VHÀñIlÖLv5àݦtM®`Öc!�Z°†ª|¾fÛ°/Zø%ÏÞÒÓI1M4k€=|Ú:¸8%�ì¾ Þ0_ߤ�ª {.›-Ø�ð‘‡K1Æ�¤>&Í;}û€·L0�Ñ¢ãɨ×éro=zôèÑc“�ŸÝþÀíh‹7| ÀÅÞz›†¯þ÷½(æèäI3èªíÄ�\fÚoÞ&#[ÂM'¦°AW™Èp¼«Áç¬sÓbYjwщG'¶xܤ•„Utý¥á¤¨ØŽ`)¸øÞDüj¯bWy�†&¶Œ’¤5µ0Wnd†eËfýVA@–0µüž$އ˜‘©º‰övªhÖç©H5ÌV¡` 3HI¤½ÛåcÒ?#Í6Ör“Åj •Üd!�\kfc�–-âi…Á'3ã9ÁÅ}Pùµè(ÈF*áOÀ`J³‡ˆ=É&åiW,ü{$¨¥‘Fð§|æ¢d=Éjl-Žg ã~JÈW¼~�Ð Ÿ<÷‘~Œˆ{R̨<È‚-0Œ¬)b:KrK©lNЂ‚IR«.ðR (¶û% 6>pÝXÇ×G†ÀùI3ÎVR›îÄZ¦KÕB­ÎlôŠ¡²’ÕŒpòÿ‘èè/1_e†õŸÝ±ÿ&ûg¹·­Û‡²ê¯žåð.÷Ö£G�=Þàgà÷æÿ¦¨cÀæÿVz vè·SÇ¡'B! 'åáôä!>ÏVpìÜ*ö˜‚CW—i¯ƒµV÷×Zä|ìü Í’;´S&_Ù6ûÛ·�Ï/Äò¸h0ÔQ(ÆÝ“×W?²í‰•Oï| ÓÊ6ЉêvowÖOA 0ð§ýUFËðë•sn’’£ «#›ýíÓ¦?yîv»¶¶ 1Þ°øÒÊž¸¸vÛ�o' ÒÖ=ôñ½HAØu8éÈSõg)�ÃÉzË:€úm—‰·“jòGÑžÉà3Ž#€yRŠ*ä) Qù†ÕÉù:)ËÑ&G£EÈDŸzùœÉ²HEóyjÅ·¢ô˜ûTéŸT3ˆÜ¯x+ –õxF}L&û[îŽöH±f²ß鱓ï="äxj1A{|óØSç¸â\"ÀH¶ÔwÙÊH°Hù˜Ì4+ú­ôyqxn¶M‹¡VIÓ¾[ 3ü‹þ³U÷ûa¤åïÊØ>±ê†¤àô¢œ¨tUï ‚PEfXf^{R+‘i3jÀ:ƒS /ŽfO(±Îu{KQÿ-öþ‰mb­l0Ae�^„uΜw¤Fµªý™YSÙŠâ;©–Ý¥ãËØŽf™33~Ä;S…¥$>�(àñOè‰ËÁk šÇ¤`qz€ÞyM '0ÁJS¯ ú7ÈËÓñÑùˆBœÂw,û\¥. zÊu,ÎÇ —Ýë¦/lqÜù‰)öD«Q€EtµºÜ[�=zôØdðçœõ³ mqÀ·¼Ñ[¯@ï—Øà4€½é —Ûˆy¸_+ïËmݱ„Sç�-Û‡ºÐÇR�jöŒ‰ïœ¸BŽ€¥Fx¿­�ÆÀôÚhÓ]Þ3½xåÐðÒê>»:CÅ@±ËãÁÙ««ÚöìêÝÛ/ÅÑË �29ö“‰q‘ªe�8$á„Aô• ÙÔ4�&K ¢««Ã;²p'&�¼v‹�>Eøxtç“Ë_:ó°ïÛº¢_N‚1CÕ…¤Õ..aQBMëæöiþ¯%[t+jƒf�”äý³uMJ=6V翻ɷZž¦ð‰º4î”LQÎÜ‘t u?Ê÷ŽeÕe¬X}uÕ¶ªQeD¿`σ8WêWtÔ™¢op×}ŽeáŠ(èÌÐ )Km…“-«€§m¶�˜Ælî÷Щ«•G†0÷[€hãer6Ž—÷%PGK¼¡“([M‡H ·ÍœÐ 7-5aô¼ËÿZNzµH@B9F¨~ Ô ‚`/¸l7�?2hÀÛ¬“~d‚UK‹¨‡bÔËc×Á �&ni*ö/“Ïâ0–�kºÝ³4³îO¦T›ƒQq™¬~âÛ‹TPÏÝÔ/ÂR|TP¢@‚‘'¯ T73VÚ\ aõ=Q¤W`/å=àüG:6ÁtÖÆð;,–uª°^ëi�=zôè± ÀÏa_pmñ€¯xº·^€Þ¯±fgl�çܤòˆÅhBþ‚eì•kÀÞWqìÜÓ©‰ê!Šd™ÌÐØÇV]£¤,…«ÜYœ@�íõÕéä�«»&O/ï¶7V·ÙU_ÄÒ¸h˾£0a £/˾m¸â;‡+¾gzyõŽ­¯�ǯ¦û6a´ÌK±<Wµ"ô>b'%   Ó`L@"‘ÊÈŒþµ4 Ÿ'½ä~BöüåÅ…¿zôÖÉó—�£!|jËï0�zz oQôí lÍ)B™;%ÉÚG" ”%Îøe“z¿è_ÑEØë@t!mø¬7;wg¿Á,“‰²BÎIö½½‘@í’€…ì1~<½ßx(¼Ñ|Œu5>(yY©r;©ë¯)²Q€«kÇã‹éÄèŒy¹;†Á?*ÌÙû�Ç?£PÁ"|Oɵp(·sêc€³bPpÊkœ NNý=ƒ\åÎl ¢0Zœ�¼¡;x’Ñ£°óHL’I¹Uº–r|QþcÒüÜÛýØ.Gß'àCì�˜.ŸGø;õ÷ô>"@ôFÐá Xø]=#»,¦e@'Ä.‹¬´»’ìeSkߟvæ¡ó8SŒõL­ÀŸTn8�Y…Ÿ\Á*åã<ˆ9£Á7u²_‡«a.6@à34 ¢…☠2¬� 0NŒW¼®’ç.äø�‰û*Ï’‘˜²�¨‘çÑÈvª°*À³¶Wëñ}Òéà �ZÜ‚åÌÆ{sYV¾1ǘÏÒŠ�Èí¥¼Á)[1ýø9ÉsS,n…¯¯ ®·Ú}~zôèÑ£Ç&?;|À‡Ñ—ü €ŸwÒ}Â`vÀ Äd)W%ÍÂõ;z,2™Œ8|â›Á(ÙOe̢ʺ`ÁóJ|3ƒ¦Ã;Êð¤Pßúû >40Y¼Q>ÉçS¶LIÏbC£Ö83Vôñ1øÃIO ±ÞxKÖ²|œÜ_5ƒirïK7̾ûÔíÃ[ËûоuúæÊïÜtßê'o~51[�—DY�íZTáô^©i{e¥2'BeÃ̲*÷"áOÇ(*!©�*H²c™ë‘�«£–Ôsªª€s°~èÔèÜE68NŸ*=eµ:&�@�™Ê¸HÆ�¬„¯ègN‰JŽ—Á ©bJcåøa}C·‘ËäYŒcVH RR+€R°ÜÓ±Hà bü ç. ¹$I_‚€õs¡b)Ç®˜MÌì°õÓ„Ë€qð6á�›¬�ŸZ‹™®ÇõLõE�e„ÅÙ, ÈÏ&î¹\mÂúA�H­åóò1Iƒá9“ކ_ ±Dd½Û=ûÿÅçgÇî�*ô¾EÔËŒVz‚­G�=zlð3𠟰€:Fÿàû–z vèƒ3˜�p8‘k“³�5`´°¸‚c·®b÷ž)?2TÈåT&Â¥Ô ³¨.˜NŒ� j�~ž¯ F|É’§°”ù ¹h‡–@Ry]'éù%‘ŽC$€¤‡x½  ’ÙÁ&ãIc1ûö/ošþü…ó¶·|ωûÇS{®rÅó<¼”«àêw@¿h„‡˜®ý€$$*l%å$ÖIY#íì!õARLÒR$Ú�Ø“²M"x›lú›&^^ƒŸÌüÑ÷Ff Ò<ÅLu-‹IIWpØùÁ…Ɗ̺EƒÄĘ¡…©xÂÝk)0=¾ð|µžôcd6 Y¥î¢ …ާ±¢ðÔ3J`«íò_ºþNq®X_³™ô…É~B`h¬·è%vV¹ê»f«Ñff:$ ´¹ ÁÆŠk$^8©ê™¶×œ´³…dlÄn M¸Lkß•Fí ý¤Ì6KfX2­ ö¾`2�Nê÷méK™ù1Á²� @‡Æ»Gž·�AÒ—�Ç:£èáÂóL lN&×–xuS¢’úˆNŠkƒ®X¯H‰\6]X!×IÜYàpYÉ/ú£”�£jëÁ€1®%¦ ?mÍ #¦›Çù`™a@c…&rPABLc_*P pÞÊ:ä¿ NrÞTýžÑN¥, b6WèÇ&Š�^�!•œ�1²¡01Jì ¬�E V€ðù©óšzЬß0ØèEÇ>/³ u…Φ€ �XŒ¢�Ót“E €ò*!h=A†Ë–‚؉I ù7lô9£*–HÇÑØ,­[Ü{˜¡OÏã*Ù¯‰ÌXá±Ùôºh¿1ýŒ�îSdÆ—^?‡+3*cE)Ó)ÀN*®¢E#ÔIúÏCæ eT¨§Š€ñù9>ÅtZ0vêq² ­ÄJ÷ùéÑ£G�›üìð§Ð¯ø€Ç{ë½Âðçÿco…ß<öÃqÀ"ìÉÒ%Æô�̃9në¶c?Ÿëð{‘cN¢-HLÔ°�ñù˜:�‘Gcð‰û˜ô=ÒÚ.‘<¤%ZúËÏ…à 1Y«<<œ)o �à™OóÖ±P%Pëõê1'ññà–e™S®Þf -Ø/:yÜ@Ç/ØÒH�«¼êZ…�û”gž–=ó(­œÑ*‹B€ÀuÈqGyDQPu?…ðöà¦�ÐØ¡8ŸÊÊL@zo­�")dÅc ‡Xn´Q.R‘@�·å»’ÞçÆQK¢òçh% ¨ïI$tTÁ* º@É� $9À&½ 5÷ —€Ö §f)—`�1f²4)…b(Ó §}´Tqò^Fm©Ø`7ì3Üúá)ví‰òðVI·bùµîóÓ£G�=6 ø|ÀglE>}¾àJoÁ÷-Ô@ïr,~ °0D¨*qd æÕ™¡O̹áÅ­Ë8~ëˆí;ù¶Ëó4–š€xáT†ì:· åºtq“ƒC'ÿU8-K/$Y'Œb)áV•]zVñ.•ètU!'èkˆ> ƒäJÃ^èå·9Ycm´…¯?qtrñåÛlu\DCŒû·=³ü…“ŒÇv_K$ž rJUeËÕØ&ú¤ü1º š“.ìq B°Ë¨½Cö-”% ÒW%a„if´ {2½ºDÑ.R²mbQ]¦*®Ê:/ Á “cŽöahOZ�~áÒT9¶ í·.oÌ"UÌuÿÐᤤišIËþœè×&bü À@™¼k.°A„°‘r*%{ ¸L‘¢6YFn;î iŸ`…î·#ƒ²|¦²€¥wƒÞ&]6÷üà”üŸŸ´RÈ®B¦éê¾Â‘1 %è\{«×À1�‰´34tê1þãu„LÉîI h2>ÜÔý\Ž-Ì æg´ú”Y½ªQ‚^^W¾!žzj¢ùØ@Ûq°¹‡½@!(ªî€ÙõaÂs.æ5øâeþ.J®òÆãB0+uƒÞš5#¿~NA‚vLC™ 5ƾÓ±ßb >ŽÚ‹SSlBÂÛêy…¿°Dw ºóº\T¸‹~>aVólÑpþÃ<:¼[¾>ÅrÞåÞzôèÑ£Ç&‚?'|À~´Å“s¹·—zëu ¸«± À˜í„ %!3¥Ý“äÚ‘ÑÓc¹]{®âØ-†…ʼnªj­“ÙüÒ©SÚG#^”yˆ�qdÇ D¦˜˜_3=䊋!’ô¦ÞÀh—Z¾Kµ¢x²Ju:† ]c½òÒ³¥RœæPÉYìÒµéÂ×=;<õæiᆵñôžG–þôôãØ6[CDá�Á ‘”mËDý@õN[ÏB½I¶³‡Xú-‘€ó$±E±n>Â?Šì±sP&cëþE¡^�0•¥tªd†ç ¯¥@°gr=1�Ö¯e*’éMŒy¿ô �¾¶}á[OÞ>¼ví†+«>xqåsÇ_À0øüEÖ2ø±½d8©7“ÌÍðˆïE3Ķhí  š{YE¢4äÖÉ) ¨óõqUQÛ{µhAe©ÎuÞ"Iå%ÓД‡ìç¡®­Nã Hm$©…ÂC¨/!5Н:¤+­›ÍÙ5ø`4­H¢zÒúH)˜íŸdtn½$Ö��wÖDŽŽüÑœŽ¡ð +ªÞÙ7�TÂS�ü^d–²6Açi@Ý·tµB-“ꂾ‡+ô»Änu¶]‡ÏY¦KÂtëkÕS '—Ì!<& .HÖ‰Ì*(Ô…+ï�ÅØR…ð˼¦à Û ¶  ¤±(a%gìXá�Ô$WxBålg^ªG‚?¥SR©ÁšµÈçV3óc{Œ7•õnÌúáÏ<¶‰FSÞWŸÕ ³ÿç~Fì•lßÜî„Ö ’r)úã>ÌÆJ={k±ì¨ÚÀнcQp±ÞácNŸŸ`ÛΡ”u«¹]ÞåÞzôèÑ£ÇoøYð~Àu¬ø>€ìE 8èê­°ù1�á`GgäF¼+Ä71ƒê$òdºŠ#§W°÷ÀD$cË4/HÀ¤„/â4““[,ã¡åv<)j/óP,”jò0p$+Ìjß™öˉjÔDÎ µ~½A"¤FxbvN �J�cúƒ_íŸýð¹ vuu'bܵðÊÊgŽÝ·vaÿ›‰½¤‘´øþèä‰4— ¤Žc™d©5ì…ô[âE•U˜*І«™5ˆS'eõºíæÔiBK#5BîKÖI:ÜP8ŒÏE> 32&™5aޝ+•×÷�"Ä6„šYÊŠàóÖò=¹¼� T%!ÉÇQ„ÞÜž³øÚ+O:HÉÀp°W ˜ù³nØì®‘+öƒÒd›J&çÀÛFgœåQci—Æç H"³ƒ¤¶g:Ar<ÈMÌ]ì2ú™p¹Rµ$ ¨€ø³™ñ«•uþ5#¢`8 ÀR\Ig"mq¢q’ö¦}Ñê1Qç|‹e˜Å^rfÒð?š‘ÙK¼MÔ}¢¾W*p¨UoŒÁ ¾·ò�Óý2c»D#[Ù3"¾¸,¹Ký y\ÞĨхÓã˜Þ ԟȯÕ$ÃLI2xjQÝ/ Ál‹R.ô*\& M’ŒyÐr1ƒfüG(ð5þòXÁ Ú¶�À…�O°{ïDŽ¢uxûF+ÝH»G�=zlðc>àì@[üÀßx«·à/ ÿe€ÞÃØà4`7&jSë%Þ†øœD.Ǧ¦[·/áØ¹ÛvL CT¾kw[­&¡õõ=ÍEpV&:û¡=Q¢bL�ÒºäFRÍÇFè $'ŸµäŽöß�Û¬`Qõ¶†¬2éFI¯:¢½VÖlá/;>yèµÛlÍg-oFãá¿\þÒ©ýÀöe˜6¡­ÁA3JXeôép¯*m%óG”ƒŠ„V|."ÑÕ×¾S£g‰Ø´š5¦¦¸�ÌÞF�‚tÔÕÖô—’üð:Y‡Ûጦ13©†êþÀI.íT÷…:ïÔ@s¡‰Á0ãü\™â~a¦’¯¿©�‡P$5q}h\TL´·k«U±RRÉ1‡ð¿ÈªóéÞ3˜aŒödŸ¨¬ “šŒï4Ž9bŸpÄqG’œÛ¼+¤´!IÑ:R5k;WzH±M)ªû`–Ľ±‚bYíTú¨é{ŸkLñ„iÎ1ºcà6�PI¾PȆˆçqœA á“Ö 4·Î\€£B{%æöJµo+Ú‚§µC¹™åÌm)¼0+&j2K)Æ7!1;ij[{h9æZ  7´èçp~†R>ŒšÌXƒÍz¼qÚƒßü—Ÿ«3ÆP‹ 7oú쑱”|Ý<ýŒÃ_Äs}âÿØœMŒqÏŠ& {Ñl¸å®nšb2�Û=~Ú—‰ùËÝç§G�=zløsÀÜ„¶øÕÜççÙÞz�Ôccq gÛÎ$”yò„^ÎÁU�üÞ•ÉmÄüÝ7^ÅÑ3†él€ ~ùt—©Å„Ÿ%€„øtRÉfs´‹^˜scWQ*^ Ê�KFâȦK69AÁI4-×dmÕÓ`‰QÕJ/¢Âó‡Î±¬¶Î;Xb–,’öò•…wü�ΠϽ}ÒC>ØÊÚ-{ZþÒé_bq2Rõ£–`ÒÒv\)(„Äkónnm¬«e{jcq¾tÙiQÜϳÏEr¿”i*ÈL²=SM/Ànâ?¦IrNô }“$‹ÎƒUœu(vUJ½i–h¼!­|ªjvöŠé’õÁÉ9pÔ!'WD(“ÝÑÛJ&*†‡% Ð8n)¹cÐ}œ¥G¡‡À耽ÔISÚ¦·ù\ðXQ¬[IßxÉì; kœôy‘í,‚@EÁçX DOäÈÿæh ùi†‡Åk|wuŽÔù9SÝ;Œü8¨©Šs‰±Cs4YVRä³ ¯1þÞ|hڳʳk ¤½,ñ§‹÷¾Ž•ä™�!­×׃òGÑ>>|]¤/'œ™nR&²Pz.C_ÅXª|=“ñOú(j&¬ö®s¨ç­šI0U7 ÷ÑÁ€‘ žDÞ.;fäÁkuàš‘_°šè¾ƒ¤ Bøqû$ã©.$EYA1ÿÄ-†ãç¦XØbMN5´`¥§KzôèÑ£Ç&?»ü€;Ðoø€ûzëuP�ß,np°)=Ps>´ö‚ezÛ!ñfȃ7_ÃÁcS%o%ªõYŸ�MÔ5ƒÇ’”Œœ`פ/=œlºÒJZʮУüa¤2–'{GgmqN– É7ù&Å'Ïòoˆ$^쫬D�Ì`vƒ‹“û_Þ5ûîÓ†7–ö£!|qòÖê݇.®|úØKì!•ëÐhP¢hSð)h7BÚËLù\?ó‡vÇM†ãžô ‹ŒúŠã7ô³p1¿:¯u‰¨[R¦$wüâÚ-ûÞn«¿húG„$¢µ'WàER§q0j·œ�ख!gï4Fµ®®ÄÖ̰‚u(–¸ ¢»ª�N;zl*«ÍÇaÁ~‰ù…Q5Ë¿±‚’ut»kÐSwI¡ý2Ç696º0´l&Ñ79Xy½þR±*3~)¤Ó-AÍð ŠqÄC"K¥ƒ*ú|”¦ ,ní@lôÄIÕ£»¢Ë¬±Ԅ̤:°še˜3E3&+¥ì%23ü* ýF?ºPâ:‹ –Sœ§ÐßE\o––#Ê,'±ë|«z˜²ë•rSLJ…ƒqÿÑǬŸÉ´ü(o²Uš«.¾âiq.Ô‘å.µÔ ,¨ˆ6¡vÖ×B°ÕORÉ£ãd0 �ÉÄ$È#�Áë‚QZ°Á井Z,§•×D»%ϱ _�‰ ËRÝò·L×G ÷ª†t§JãÏÌHrÐ’Î5Û&| ‡8|¶ín¹kŠM™>ÖN�åiáóÓåÞzôèÑ£Ç&�?çÜ`7Úâ�9ëçRo½Îê±9± °3ö þ˜HL C6o¾·K8znÄâÖ€%‰ný [• º”¹ržIIšÚeßDe­~Ù¤)Ó#‰��Ó«’òYB‚¤€¸q¤éyýâ).�’œÐ‰.>]�Y#;%«Œ’uÑFWW‡…¿xüôä±×ÏÙèSá€�7ï||ù˧ö½[Vb»B‚½;¸ðݽÒñV²$*Y©½^t¢K£ü2͆ÛEî�¥õõ×  �AT�ÌFRz*¡Çm €­ƒEØÇhbí �­¨¨ PPþ ¿%ý•€€¼nêÜÎ>Ä"‰§v¦%€ æŽHVÉ~¥LÝÅ/˜ä仯2e$§¾J Ô•vnrn¯LÂÉhµkŒe©©¿ ÙQ™…å>Ë~Ut/J™a”Û®¼0кÍÌB6så;{»�e3Sù=a¨ÀAoLð›µÊïZ2f÷lQÿ@�B #Ú„öùˆyI?&i­ mŒ™Ün4 `G@UÉ‚û‡fa �‹šW›(ϰv K4hÁú‘ŒRØbü�¬›T”vRœ[ì2»÷ñ\3/ªâ0R�ue€–ËÍ<–€…•Ÿ «ˆñ�ú&g)¼—wë+$xtòm2ê'¢À…Äš�j°¤_Ð Ô™�UqhˆÐà5ßsùå–»&8rb‚ÉÔ”¶_3ÐT£~˜WU¯ö4H�=zôØàç€/8†¶xÀ×<Õ[¯3€z¼7±f§á¾•^Æ2<„3OÚ¸ØÄüžýWqäÌ€a0^¢0eç·°Ê‹�� Z¾Ì×Þ3°$IC‰82!æ !FMàŽ¹¶6KR©d0”7,«@åcÔÌ c0Ù¶ê‚5še¥'P{2#äôÖ%&†gßÞ²ðõÇo^¼Òtƒò©-­ÝºïÁå?9ý4¦ƒî…évH�ÂÛþZ[©ö‚©Cƒˆ 8 %\ëêéÚ#eþÔàÿ‚hB ¸èFfÑÌPQB¡òR>\¹m @ØÜ4ð`CT¬›ÚT\ô-èþQDåŸPŽ}º�¸öÊhd®}Ä<Á+‰RwÏ“Zó§4ñÖ”>™˜c¼ k!†í1Fd±}( ‡’U”S}/ ŸÁBþ­ÌÉE;&l+•Üg‰7>ô˜Ÿ7Ê^ã+¤|�h¬ñ —'ÂÌ ^„ ÚÛA­Ójº…7Iaò˜2°¯ŸuhŸ“%`ǧ¢Yc¢u?¨ïqÚ?‰™5j= ÊÅñ ЙªbÉqƒ‹ZÈOŽûQ•‡b+YQ� ‘a 0ûµfýüMÇ-:F±“a™Å§@ŽÊÿ'¦ý]߇Ø[Œ¼ i»YÈ'ZSáÒͧœ>?Á–¡|É!ÖQí¼Ú%uzôèÑ£Ç&?Û|ÀGÐW|ÀϺ i€z¼÷a0Ü à8`“˜ªeâ;˜5$Ì2=æ “5<º„ýG&ñâ×,ÎU¾1]¼ëI©‡À•¹tÉÃéKjvN§êê™?®Ö¢×í¨Mˆ5›"©žsj!;ËBø½ˆ*¿VyÑ9E2Bi]ĺL~þÒ ³ï?}ÇðöÊ^4„o�¾±ò»Gî[ý�ïÔù¿Z++Xeši×"Ç£$[h½ö6Ÿ‹`B_(f•Tª–`2�jaƒ ð(敦Û.d°Ò=ƒJ´^^;(r0±¾®5Xû]Ô—X¥–Er‘˜¨A¶t ÒãFî,�©ªñy­’±ÚƒHH¤… b±4i„–·Óá²ýŵÐãMÆl €MÝÓØI‚ÚŒÚ?Ú-¹þóh”zÓ¡Ù€BÆR³Q5”ïC.¬Ÿˆ}«“_µ¹ðã)¤õ¹_÷}§–#åíèd?™ÎàqÍFRÏNdN ê5ƒ÷'úáäm(fN¢5À’E5%Èc™ê^RGâÉF!‹ÈV¬?Þ¥Ô³Cc2³Ë¨1«>}‰�‘Ýu<ž­4=Vý…:CÌ•÷“ð‹1Š·ÅR¤�áÒ?m×^Ãí�bÇî¡ ÐÑá(‚|~ÆžîèÑ£G�ï2ð3ðqŸ°ˆ:F?ð}×z þëÃõ¿ôVxÿÆ À)‡Tõ¼¬`ŒÙ<â\ü–e=³Š»'´AÕKKZ’"æÆ"õ‚÷©Œ¯Ý#†Œ�¿IØÙ<‘7D‚„VLdÈ Ò�Ô/ ‰3ór4Ê—¸ð7£ôüòjJó‡“UZkŽÙ_?ydzßËleÜ‚†÷myvùž“÷�'w_!SáôEZê5Q(¦Gex $'6® àOҟ‹©,q-@bZ’IËÓ›U²G®šAK™”öX®¥ }}y,i¨òó°"�`dJ,N^7&³‚„ I`ò˜3bQvÔ¬ Ò(¿n¢èÏ$eÓß-ªª÷kˆ/–ê11CÜ[’›mLJ«Ö@šÁÕzF5½¯&]rL›ŽÁæÚç%>«yéw÷  #æhzT)ÿ&Ž¡.ŽˆÈ€ËäßèÜÛªÏ5)5Žä?ãÔç…F“†ë\¨+ùÃf°¸½oðns¦ KOš™dÄv¢m ‚Õ.A´ˆóÐò¢»‰ïÌ’ ñBýc–}è%%?'#œ'Ú>—D:]F=Ž(`¡µ¯\�{qaÖ:Y8§k‘>¯)™î›ˆÈ·Í¿Å‚¥)N¯¦e«C¢ë¡%Ý@Ï'‚`¸n& ö50�·lŠý7MÐuUÄ`¹ûüôèÑ£G�MÎø<€}h‹G|À«½õ:Ôãý;œ�Ùî–ÊÒ�/ºŸp!S;áM(Šcij•ö½ ¯ÐD©�¾ëþIÞI²(NTØ ß±³wLpó©)ùüx¨^„XfÀJOgôèÑ£G�M~nœ?gЯø€Çzëu¨Çû;8³Åõï=–K.p˜± ºÎr{]Åáãs Ó1Î…é\‰PS²A˜ŠªÊw~� ™þ“t�µd�çí 2j/MÐÝÁ/<#')Ò]IòÁÚ<=Øû'¶-Á£.ïuVôs‚_Ë|‘oF¾Ÿw ­ ýäíÃ+W� !|6\[½ãÆ‹+÷œ|ƒ‘V~æíáI6§]Z¥ÐÛwZ¦QKß,•~ƒY$B“Šÿ8?¹Ý‚õSN«þ1]ähT6M€&¨N:³¯Âïe$Óëð1Ï]güм…Ô¡ß�¡5…4¸Ö¹Ñ7‘¤Ë0RÞeßP«ûgŒiZþMØûÄÆ ̦ËYøŸIPáë‘U½Ç÷Ø2@0­®wð}pÌ¥è*¿ –djÀ9ùÆ}~~1RÖ­Ã Ô�™à·Ë¿‘:-ò¼(ǹˆÝ]¥H@#ØšÈeå\ÌÊü‡ÁÞ 9³/Ne”IÍD.PÝg•”"ÐÎh‘À M«Bl‡ÍâUb<kæ‘�Å=Rܵ¯“¾÷´3Ëx_:‰®˜à9ãÇL3â ¿»‹Í¼÷ÇŠ1,pb þs¥7?× &m‹©+À™Ÿ·ø˜µÿ¾b! ¹Ö"��ý½’‚ã—/ÀKɼö8|Üpúü [¶ÑžåÍÀÑÙ�Í}~ºŸB�=zôØàg €OÏ%ßÔ±à{~ÜÙ¨êñÁ‰fÇà~6 ‘˜ÓàO§„-O ¿Éd �_þC3N,ð JÌoÎó‰R“ÛT…[-ÿ•}2ÄL§œ¿’ÿþ®²VMÌÁ]$€ä b-'|}˜ñÃÛ×›ƒ$:±UE“ìN–9 `P¾ NÿñÙ½³xîN»ºº 1¶ú©›ï[ýÈÁ×㚀‘³Ù©1ƒI{1IÝTµ+´»òQN’ø’YÆ`aQEY?ü·)Gã ’@Qy™�Ä«òäV¬GÓ¸Ñâ\¬HN©á‰Î/Æ!µ�6‰ÀfðA0Me¨¤u8|$`XJcÕ•É<ß‘ä:T`º�\õ�H˜© Þ dHÇìáÅk‹ã¾…eLPEõ;%.Cý}¢‹ÅoSm(ú„¨¼¯ÌÎMÝ“„GKÍ6Lþ^J3ÑØ#·²ËrÐÌØ ðQ…ì…�£HžÃ¢p “½ó1ÀÉŒáêpºM$ìE£›/¬åQ…/Zs_¨ƒY‚ DýTaS}X´]iØ„i �<Ý] MEaJV\Õ>´©Pq�Œ>k£þöf̘?ñ—›î;Âw³ö…b™·�döm³&îéÛ‡cŽþJ¡¡€8€ü�Í�îí9A>RÿÏ&žgÂ+KŸuŒC<‡ÖËFð�{€[ïša÷Þ¡|¡ªÃ‹i6O¬-uŸŸ=zôè± À�ø(€ÏØÚxßú€ï¸Ò[°@½>˜±³SèB,~f8Z>eÍ¿/n]‘Ókؾk’˜æNÜ!vG&ª•c{M.ÉENSŒf f•f %×P$€¹÷%€˜šÑ")!é±@Hb‰.¹>)§E ,Ñ\ØLl¢f¶†ƒÒð ” i)wˆ2÷ÂÛ�û«€ê‚=ë £A‚è3óóÓ”‡&tëOÒ¹Üè°“{#y ò}¢6±ç¨�çŠåëp¥È�<žKè£ÁŸšùÃmÇ¡ph^¿¤�i ùƒŠƒ.Ÿ�iF÷Úܰ®õ§Äç&æE¸†å3¹’Í៻êŸx͈ŒCIý„¬%¿³ñ >ú­òd/:%‡“:‚¸û7Æ4£g.nsKŠ‹&3àüG&¸ñð“IÁÚ‘áÍìŸðùYíiŠ=zôè± àÏ _pmñ€¯x±·^0ü×ÿko…vìì €$ñ¢|_ë‡^„”ÇÂŽ®âæÓ†ÙŒ7¦TÌü±x{€¶FR]­/´lÎVrhù¤¢m^@ŠõÚN‘Õ‚‚PËÅË¿¸ `©h·ôZÔÄ]å¼®Ýr §°KK _{ìÜðÌ[§ 0ჭ®�Úýðò—O?Ž­Ó1ñÃ(³`â�ÚÀž‘Ë ‚û”�Ò d'n•h¬ .µ™n�ŒåõšT²si…d».˜DE¥´±b„L…fQ’³$”Ô‰.ö:¨ýr�@�ñ†Öã¶öX²é0+«ýYâ+ö1²É}–I`’'P|×$¥’¤‹Xyoáo^<:yòòݶê;׳§O®|bÏOÖÎî¸ °ßG¶}î:eUrÒo)�@£¯›"ñÏ Tu25ˆÏG£'Ø�ƒÞ˜)èc‰WžÅ~Ôc–üíñ4n—„$äáM]Ù 8K‰ŠþÖd)_WdR‚­ÿü]o'ÎK‚L 6 a¶r©eÖ~ŸL Ä�»åþÁ 1û…·Ö@¬u/=^jº�Lô�öJÌ ±H&ÚåýŒ}Ã4–dv’P”±û3ü*€RÚ<�[ñ]ÿ¼ÀÓ B3ƒ`Ÿ¼Ÿi†zíO¤Ÿ_cOQ\BãMDV@�ˆà8}ûGNN±°849®²Ñ'hÀrOKôèÑ£G�M~np€ÛЗü5€{ëõ"lºp¾·B¿àwñ 70  ïI˜Ã¬÷’æhÃ~ëÁÅñçÎ=:þÿùã…ìT…×è$¿™a�Y`I’NîdòÈë;fßþå…áÒÒ!4„/L.¯ÞµÿâÊg�=�ÁâE´í¼D¥­4îw¸À µì•ÁÌ ÀO…kâ;%€†HIù�ȯƒûtB“4øSÖaœ[i`ÄÈA‹‘%"µ–&këרŒ–Œé�ŸÅÎÒy:QŸ„,œG›Œƒ�•ýädyDé©Ìà%³‹ÄlâCGíÎ@:'ûK@Â…Ÿ]l�©80ýù¥fÿôúÇíÚxºUVýÆ…‹K÷¸è»ÖÀ…ž[6F0S*Q_V<…Ê�©4<§ähsñµsô°™’{„×`Ö¸¦þìUD«Ä—Ã]° S9ÍÒ‡Ni¬&—S˜Æ{ŽfÒyL¦•p@#¨�…Zž«Â^?ú>³É8¦þ*˜?…4ª`Pë6ä‘ÇL0¯¹Ý�V@ÒM¸]ù 58ÎÇÎm—†Ž’LW\úy%í ¼}.$ýHË ²Œ)IïŠc„ëߢ.Šk|.—,8öFchF£(.õBA Kï=¢ t1ÊácÎ\˜a˶¡lŠkv�Zé>?=zôèÑc“€ŸŸðIÔ±àÿð��Ú£@‹ÏøƒÞ =þ-ÇxîìÃãŸ}åáÊóH$Â¥äMâxË,*y™}ÿéýÓ¿p‡-­íl:·] /¯|æè½k·ï‹3Ùù’Þ~e8Q{˜)3d¦F%Ë„¬S$ÐEh$Mû¬B5Ž3Ilyê÷Ry¹ ÞF–I^cllœHÊ$œ²Òùâ-È6y;b…e‰„ëó²ÐÉá­&BI¯^xµ34ÚA :�F‘ º¯…2«¨Ùm±]6öÏ-O à W¾÷ò]viåBeøÄ.¯Ûú“åÏ|hòZ×€± 6]We~Îýƒö]°f¢í“1£�mHALŸÊû‡¤º’ TIOD¼À”ê_5ƒ4Oðƒ…Ü"Ýrð8¹4f²„kìZ°3Õ8ãh oÌV«��ZyAi™ÔçßI\?p1‡Y{AËÔF?KÀ#êƒúFšë. €!ö,Ÿ½Ö=·pxI¦pE*id5i6 èw¬X¥ÚwNƒÐç直"¾Õå&S_+Œ®Alö@ `;öDzŠYQVEâtç{¢¶:"àGHñÅZ¼>$lÝœÿè {ög 2§#i—�ÓÛ,u#í=zôè±I>?wøc;Ð÷ø6€·z öèP€zô¸èÜ€'¼TÔ…‰1-))Ì^•'QZ ¹´6,üåã'ÞaÝf£ÏP„>Þþäò—N=èû·­Í YÅÍI)nnÃ:_Èþ "�Dí-$‰%ä4ŠÄ«…Úûùäˆ °‡ôçi¦jÐ`b!–áRÈ—P�ÀWmǽX'ïcjG]qÝžeºÏz¶M$û ä ÙP UÉùvà‡@”°O"’e䥟¾VCÞªByimXüÆ ç†®}ØF,à:‡—V/¼ãt÷žW³ˆ1A˜±I’&øfáµ§Ç: òTQõ‚¹!C�=ú¥>tügß*Fy4[&iBäÚÁ )÷%Y¤uxÊúà>¢½ÕOÙb¬ˆmòXoÖd:Äcê0˜g«û�œÇÌMå‹m8?ÃóÝ™b±:Ý¥”®xÆâmiÞE¬ ”øDÉúá¤?ˆv¥‰Lçk´“\jvd2li�: î õ¢ß�–À>�š¨@¾¼%Œ5Ì?'F?^ƒ´µ×õ«ä/�é,Å«ÇÓpîÎ �b2¡^[†^V·¾Xê•Õ=zôèÑc“ÀŸ#¾àÚâYßð«Þz=:Ô =~Cèß= hy�28ÙÏ /ýž˜n·¡MöâåÅ…¿zâÖáùË'­­â~eíìž–ÿää“XœºÎ‡º�z“/ŽØ£ÏE&{á͸Î6Ú„ÝHþ­0b�ˆêþ1@ ä-M¦Q†ü°¹§¬ ^y½Ð¾Û¼®¬ðRá-¹âöĸ{�Ëèöe)$n·XŒÛ"J/ :„/ƒò1‹OÁè ÊyÕy´ñµzDràê÷Ù÷_¾iúÈ[wۊ߀ß<|Ü9}lù÷öþt<±ýw ÎÀ%bEì &!v+æ’fë|ír#ô ³?‚LÈϧhZ�5ã’n£šPø Õ@ŽöÓò’,QLjCuë¾ÂèÇÓ•9ø,’ºb\, êÐRpÐËq�WŽQ÷iFë„<\ F«´ð¡ãmæ  "(á/BJaŠó€:›À˜û�%›Ø@ñ‘ú†fÕ¬X‡·ÞO“�ã+ƒÎ±9’É“}K·;�½Ô?…&/KôŸ¸fZ"0{’w úë G˜IÅín0=3àä­S̬ñÂh�–{[êo‡=zôèÑc€Ÿ�þÀ�h‹·çŒŸ{» i�u¨G�w�D™¨Æ$ye€íÀ\ŠcLŒ~E‚Mïd¯w“{_Þ5ûþ3wo.߈†ð-“·V?vèÞ•ß¿ù%hßcU½ 8ÙÁE’Å˽��IB»§>ˆÐÀPmÔ_'ükPPzDHÃúHÐ*s €®xw]oÛ^ìš].%-Ÿ  Òôß‹$g¡¿«(G„15Ÿ“»+‹ûF˜’ñöÆ@O< < e�Šªmy�À[ž<øæÎÙ�^»{¸²vïr¸ae<°xïÒç=€­ÃÚzvD€ã9@›ZBÇ-�>ËÎþA:´÷Oêéäc!-yÝr‰ôHÝû9YªS„¼ ·­ =~ÐyI¦šƒD×ÌL¶Bî-îE¼XlC»µÇ Ñ’d�FÇÎÀpì¿]"µîcÕ8Ä€7O“ý’™ã8Â̲á$–./V &} �!°¼ilL]9¯O,¦‚ºÊ÷¥˜®!î§,�Ëý„�S5–º÷ç€e þ4±Ã€T¯|ì¬�x|! ¹À=Hž�—£ú—Ï'€ì뺯(ï�>²wö)Šk—{ßAÃÙ;gؾs@Ý5\{­Í�Ÿ±¿öèÑ£G�wø™Î½çÀ u¬ø{`¹·`�u¨G�wÏèÏ¿ú¼\ò\%çUksz]SÚã5­„à ãˆÙwž>4ýù‹lyÜÞtÞ{Ÿ_ùÜñ‹kçö¼�hì�`ÃeNÒÄò¢Ì]â:­æÆœˆ•ë³”VžXçÃ۸ᶜ^HV½�Kƒb$m‘¹¿3[J%<õ±è\m¢Y戗/%Y.QM¡ ]ý䓎%€[L÷ž§Í¨ܧmÝd¯-ßfÀ€M ŸÚ[k'¶ýhù<£Ç iš¸®Ï;\)nÈ×2½~Rù7Ó8)Ù:×^-p(ÖRS¸¸7µQÿä¥ 8õjÍHåÈÀ#-kçÂI┥áL¼ Zumø"Àïªö¡Ùhƒ>@Ú È¡’ÿÜoxŸuq _Íþák(üË6+¯{ÄDxr<ÁŒ¿‰¥KLËXDÆR…syFqO‰ÝÔ`µeÖc0McÙh‹{ƒ&ª°"ëK$ƒ©ñÑ¿ o{4hÆý�Y�ä éÍ;�?éD†»|"ܺÍpÛG&Ø{` õß�]î­G�=zl"øs€{´ªF<à[^ï­×£@êÑc“@î2¹ŽJfþLIØ$YGÊ<$"^ò¥½ë••Éâ×?=õ�ß°e•�•,ËÃËUÉ }>ÊäxtQâ¯üÀIÅø!ÀÔ6%¤ÙSªºY˜8SâRùE9„¡w,!s>æÉW `1#A{Žh*bݼ£FlfDHÈj –eŠk2—´’õ¡Í¸õ¹iP¯0÷'¹÷Ô|› ¸VVÄ�n‹_áÌð«+±[ð†ož[ùÐî®~ø†7"‰™õkƒÐœ,ž¬ ÁúpJà  Ù‚‘H¡úˆ¢óûóT ñÂJPPE[º®Ä¯i,*ÉOŸ«û‰:|!õ–™e�ÀÏJwγûI;1P œ˜¡�J-A b¼iƒ˜‘ÈÌÙ¦Z…�îRl;šp#D¹Ý4.“ã ézí—Ç;Ò/žé^â­,Úšj¬Ÿ¤ŸÐžPuß‘~v¢Á@ÌÉÊ®a î[ä¹'š†$SãbS‘E&W_92ƒ'ñÊJ[×õ©~�a2IÇÈëö÷‰pú¼Ü+«{ôèÑ£Ç&?|À ´ÅKsŸŸ'{ëõèP€zôØ<èÏ¿ò±HИÈв_fs¿˜D®:ç_¿pÖ¯yÃ3onYøÆ/Ï/_9ÖXq¿´vÛ¾û—¿pâ)L')˜! «k¹¯ÆFÔÕý9ÖW³²Q±Á89®ß£ëŠkÍô¨�Á(i”,3^ÏbQJzqÆ%˜ÙuI8åç¨XNë�TƒƒyúX�=O ºù7‹µ±Ì( )&:�ª=Œ˜éÁ«(”Ù›rzŠí6ûûWLxón[÷á½�€ZvOZþìþŸ�·,Izšú7ê  i¹B/–'Æ?œH�ïí¾?±­„i&™5`? :�V¨PJæOííÓù¼(Ùqíd-æZ±´0g—t/ö‘£ÑW© úX2R ³ˆ†b.ŽÐh„&mO!!$Ó ^\��õt{Šû«U^Q«ŒAá ”ÜNG‡}ãiv ~–Å ­cFëvRöWÌ¢þ:Æw�=Ä6¨ �úp Åö•çR€>Áªo�¶ƒÎ,8ïg>_€ÌÄÔ´¾ù9 *±4™‘uó)É[fXÜ:´²|ô ®—aŸŸî§Ð£G�=6øÙ6Ï3€¡Ž«¾àg]†´G€:Ô£Ç{ÅÒI® z3èÊØLÃ^ÈéÊMÈ—MR›þô…f?xöCvye·N/­üîá_¬~üðk0cðCW²ß�–“’vºÂ6­‚Ÿ㇖Q¬"–ýR•Øí€`m"¢M« 9¤X8ó'X“gS™,JUì33J3oömÐ’;,_Æ—\³æÈÌ=@E’y¢¶Ñ 0‘ämLÊÖ  ²›‘èâ1ÐùŸ”ÄIÝÉãooŸýý«Þ^=‰÷Iø€¥ñàâ?-}ñàC˜MÀŒHí}¡©NÜ, WÓ¦øÚù†}Å -+ÄÇRór£µ¸ê@uY‘˜m¿?f º�ô¶ c’ÄaÞGò Í®8'–%P�d›fãìr¼Ñ¬G�ì¯w¯ÁæØ¶ô‚‰&�¬2}<í¿ƒqtñèÓZ\’Kbòm ï9õÓ.Ú9‘ƒ‹m‰›/P±PKèãaF�;IÒR€ÑïÄÖÀ13‚ W,£¢ïìÐMŒëÊc;O�ýÓ¼3äç}üLÁLˆ¯ ,<üví1Üz×;o˜ÔÀÏõËÀ‘Ïϵž`ëÑ£G�›ü îð[iê?ð=×z öèP€zôxo<€þì+g/÷ºÒ¹~AoL H$¼Œ–ΈÄðšcá›OÞ<¹ÿ• ¶2nij“}[~µ|ω‹ãñ]W‹JeNÂÕùAn§ä9ÏëØCÉ' bÒ{Q%Úb^ÍÓ`ûÉ@º¶"Ç͉g�E$ì ÚâÉ»ö(‚îº4SùA1ðÂìn :g� åÉþ`﵇’â‰}iÏ„HÄi‘MZ(¨%œ2ÂÞ\™,|ó… Ã+KBBòý>³K«g¶ÿpåö?ÏlAÝ\1~„‰·èÂÂß‚¼2è: vG.+6 Ÿ[˜¹Ó‰’ÏEÜ]‹Š÷V°²4þ§{I¹«Òjþ_|@(=¾®ÜG`”Ô'ɲ@’ùºRçŒ�Øžè'íìÃXWË—¦¬5D²>I’¸\J`)úƒè÷í*™¨’õ#‘:ÍæŸ…%>.Äô˜o7Χª¯ˆpÑ.NÕ^9ñ¹ ã í`�¡•A(€Ärsì�S=p¤·º³ç›ª(š¡" å½TÚP§ç´éÔqûÝ3ÜxhÚî\?¯uŸŸ=zôè±IàÏŸp#Úâqßðro½êP�ï1èß=Üì@ÍIï¨fæêÁ$èZ Žewx§Z’=Õçl•½±<[ø‹ÇÏϼyÖŠpÃÚx|×#Ë_>ý¨ï˜­±·K" &Á’:qG—'Õ“: ?­*S„Jòsµ2'cÊ®$’�*Ñ#ÐGNÈñ9YLÎ�Aƒ5úØx;êÜx½bƒÌhò$‘É™¤Ú�;Lú‰ÔHcFX��%–�ô ¢>KŸIÚ0@]•pËJœ,Ô€ÒÂ7ž?1yêÊGmÍ·ã¾uòôòÇnøñÚm;ßÌ¡t’ÙgO0GJŽ×ãE*æ1M�Ezœ!Vi‚�’�9Èû±�™½R€ÞFÛ“ OΘ;µ/ïVûÅ(*_ãZš3®wóǵCŒ2¡¯ÇRg0°]ú�çi†PÅ|‹�cE*9éŠÃ×`hH‹mC|– I|ìGF•"ƒœ‚i«B€Å± f�V3lÛÃ=“:ä~Àþ?êùIISËG˜™“R<>“rmòìj¼Û‚éæ #–¾“,&AC<Ž Yæ6…n¶œyzæÂ7�˜a¶�¬u]àŠå®uŸŸ=zôè±IÀϾ9ðsmñÚÜççÑÞz=:Ô =~‹P¼¨¦™mú¯|4¸Ê�ÖUÒ¬ –FËžì�Âë×¶/|ë©Û‡×®i«¸®®^¸ñ¾•?>þ,óÊ̺Nfhýôy)ΫJ…1<Èw#¯rFƒì‡7œg€'[A—˜£ Šcíè›I¥1¢Ùi%àýz¬$)ñY€FµáЯµKŸ,û}ŠBüÜéòh§Š8h±‘`ŽïBþ«b^Å Å|§d³aúãWöÎî}ãã¶4À,}Ïìþ¥Ïíÿ…ï[X¡±Wôû„X£*ú5׺ÝsŒA Ôÿg`? uh|aó$Ž*þ̓{ÊÐH˜�I#Wà3�aÔ ˆÄ÷B•Ü5ò'¡„ºkÀ{b�¬_•»äû‘jÙ7)ùåðœ±fÙ=(Ú&a%7ßîõØëÕ2ºûio¼˜çD’¼Ö’¤1_�ÀµÔ‚%$î�o@í0ŒÚ{N{*zxîò—ü=Á&ªÓ&…ÜäúïÜçÆùôÂ+Œ¶Á·d5]xÑ8Ê�’‹Uhü8xtÀéó3lÝ>@ëëyã  åîóÓ£G�=6 øYðiŸ0 Ž%;—|[ë-Ø£@êÑã·ñKgQááö�ôÉ¿TÊ ±K‘ÉŠ`PˆÈ?ŒñŒé?<·öÃçï°««»›ÚiÇìÕ•ß¿ùÞµ;o|fµ‚{�Ààùž‚V¥ÿ>ÄQZlÞ]³4xP*%qb1“›0Ë]q…ÿú^¬#Î-ªkEr6ÜÌòx^Iïðw%w$Ö¯ÊËEú1©ÎbÊûB›¥kÉ4)­TRæïA@¦¶m�lGì Ãðôå- ßé#öæêÃ;|ÀÕñ¦­?]úÂ�Ç0À£�ƒ�ÓdÒˆ �–|ËÀ±ÏBn²�ÄDíÝωVÑOSvm›¢ù¾Ø"gfžÏŸrü!äg=_Çù>â;„Œ˜]Œ±~Åb¹¶a¢=4¨Æ¡šícF÷6í�`s ßî#Ô®Õ��‹!˜—�ŸŠüšmKŽƒàS“‚yAJêóÎãQ«(, M÷oò+­4jÑhÉŽÆ÷!!¿q¯Ôò»–©” œ©~`Ð$žèë )ǘ䕯 µì¾”ƒÛ¾¸ýc3ìÜ=­À5Ðèàí…ÏOO°õèÑ£G�M~ À‡ü!€mh‹Ÿø€Ë½{t¨@=z¼/ ‚žPÈ} ¿ʲ£(´Þ­Ð>¯pN†öäA£è Xmᯞ8>yèµÛmÍšÚëÀ¶_.ñÄãáKÊ+‡Œ�  H¨ÜŠÊÖH)z>>^N‡®¸¦¿eÅz¢ŒÊÍ=Q­‰м¿�Á�kAah¡$•j�+3$×™·£ðKj8ÅÌ*R9à)yÌãEš<~ÊàcÓ>@±½Ò¼Ý¨ýT¢^7ö•Õañ/Ü6¼xíNsÌð¯(|f¯¬Þºó‡+¿»÷%h /ýAðO‚ýa8‰NóDâ³�)¦Ù?Ú _3Ö!Á —þR,�ÅR“�çSKÂ…ÏV©YKW2ðÉÃÁ�B¾±ÄXC,™d—Î, ½-‘O-bƒÌ0øpœ%àhþÈ÷j7‚Ä19T‰ó@ô‰y\Œóé4åZw@uŸ¥ó‹Æ)ব-ÚüñtÍBÉ8LÆÙ't���‹”/1 F«bF ÑyB¶w êß* pŠ›l˜·ß=ÁÞ3L&“§v0ªkó ë•þf×£G�=6ü9à ¡-žðu/ôÖëÑ õèñ>€¾òH“Û°¶ç ß“a0Jð *ñYdKRÍw]˜œhÐ8ùi¯^�-üå·Ͼ}Ú«+îmuíÔ¿|ê1l™z©cß.uÂÕ•I"V³€"¹åT9­ŸÛ+óË䦀äŽÅv¸»Ä„Ä÷‡ºF¶Eã½<6w)WTùAiI8�è¢$—jE2Ša&òuu¿Ðá ÈÊ{Jö§If’s¢Åv ÈÙ' óâÑÉãoÌV}'Þ£XØ{«o¿Žqù Þ«·OžXù�½?Y;½ý2HJ¡Sûët!}‘þk$éWTÉ'}JÍKI p!HŸ ±ý�…Ò&ùPÇ`±-aþŸø»€¼ò(Žù0_¨1à ÆaÊÛ#k{bAòøÌmbá!”£Ój̨AA ó®ˆÚ$ñ}Ñ´H� ¶t\&fÉ(-=ÍžÊú‰ôþ‰¶Ê·C!¼ô¨d_§ELÜNÁë3ûàót-U«˜²$9V±›Ä½ˆ¥ÝC™¥w…ìn�N1Ø×°¤”Ó¥çûc~«ac˜÷ä)ç)ŸÉuœ:?Á‘“3̬ª i¥,¡%Ký�®G�=zlð³À=Z“êoø€û{ëõèP€zôÀ¶mSÜõ¡S¸rå.^|«kþ[€Îþ'èaéܯ#*eã<¤:"æÓIªFÕ0»”ÜÉ(ÊmF"»0> „”&¾ºcöÝgîÞX:ˆ†ð…ÉÛ«wí¿oå3G_À`’5Ãl�TN…ÏÙ‰ÈaÔ”xM“\‘Ú^«™M.@ªÂYeàt2�¶ –ßáÌ»§~1p‘ÀŒ`�H'¥"™Ë�¤S»/”8 úÝHÏŸ8¡ÏO«XH^ôû†ãzY@uŸƒ1ˆ©rE±œöãþ1½÷õݳŸ¾þ1»ºvÞ£˜lÛ�]·þ>¶8_]Æ[�ÿWžú|\{¯ü�VýÆ…‹K´ÿ^ß5]�°\IϿѹÙ9ýL¨Rž@zécúÈqÅät†=uÒ(R”š�ÊÝoP rº ïœb¼ ¿=cy¬ù~BÞ�“ëî Œ�Dªb ª¡%þò¹(P«òÐ+åߘ ¤Õ£´PôãÐ'¹,éÔ§ÕØitM(ä{ ÷:`j{byHF)'÷ P^�¢Oˆg7ÁqÙ�,ªò‚4¿/õ¨—„0’²”€`-ÁAÛ .šùžWšRLÛR²À0¾¦JJ–ÆOÉ‹k@ëï;4àÜ�sŸŸ,JxN€¤r[«s¹·±¿YöèÑ£G�wø™ø€O˜¢ŽUàï;µG€:Ôãßxügú ü·ÿÍWqÛmçpðà~L§SÀÒÒ^|ñe\¼ø þïÿçÿÃ7¾ù³÷úó¯>o©649-˜'ƒ‘üU%Ë�~hšðGIäGˆMÔ.÷5ûîÓ§ÿôÒ�¶´¶£© w-¼¸òé£÷®�ßûV$óæI9ªÞ.ÏÏXj¾-p öþÑÒ=›§Ét»ììSÐZ˳#¡«*¶�€Èh3)±€¬�WXkI;màjùv­(NÌ›¡½"^ýæÛÀ–Äè´ì}סåvâ¸êu•�C42u·áÅk ï°~î²K+·`ïÑvœ¾Û�ß&"V¯\Â[ý®½ôÞ«ð .¯Ý¼õÇËŸ?ø$õ –ýÒ’‰Fß…  �sÔºQ`À]#ú6T)¢<ÿ£1iÔ²pñ·¶ðâÏr-,‡hÁ(¸p1YäÞ³Óu¥"çH¦€mÞ0¯U¨2Qõ�z¬‘>/6¬„RY.žy$&~|‚Z67¦ÅºÚ;Iƒ@<@ƶuÇvÝкójà”ÂŒa«ú€º®ÜïSȽ`/ÒwÁþá±+ ̶áfC ðYvÛ ù…¾Ò¶hAƒ(ž zlÐmëÎç?2Áî½Sµf èÔ˱ÏÏÕîóÓ£G�=6 ü¹À؉¶¸À·¼Ù[¯G€:Ôã7Œ¯~åì¹avïÞøßþ÷ÿ”øòŸÜ�ÿïÿ;Üu×<òÈãxôÑÇqÿýã§?½Û·oÇ>t·ÞzgΜÂéÓ'ð³ŸýÿÇÿùákñ£÷Xî]©îgŸ®De½q‘\+²aåKkÌ�oÉN NP,­Ù;²p§'�]ºÕFŸ¡|<¼ýñå?9ù�߸u™’ôIˆi$£¾@:«AÒXÿ‘½ï³ª8ßçܶ�²X:, M ¨X5ÖhŒ±'K4FcMì½Ä�1±Än4ÉÏA±Å""‚t¥÷¾�Ý[Îüãþïú=÷{æcÎÅÝ̼ϳÏÞ{ÊœsæÌ™9÷{ç{_ BHA ìAÁ½.bD^ˆqüŒ #5Õ‘bõ!hìÛ½ ¨îìd;'æs!5aòFÔæå¬9AIH–ÊXc�Ù±‚y?•ËI¼ì}ƒÒà]. �DJÅ&¬®ôVm¢|ÄÐJÈë2…}FÀ‹åa{hذ UóÞG²fZ :ê­MîV851¼ÝFc†˜–&gÃÚƒ´¶ûy[ˆg ŒrgšI‰)Œ{7É™)霔 8QBê3Xÿ!ÆÚe(%ú|˜ÆZZƳ68«@eòfBç+ËúÑr"#DUY9KF&€ì8/‹÷=ô_]+kºß…Éâ×o&…¬Ê¼ÔŽøµs¦G Ñ% 8­ÍYÏGmI±óËôU"2HÎ’¶U‘>\–N°ÃKŸ›§W¦ã}‡…�úE™ —Ú­ü¾"u ´-5Áï’�Ç‚“EJW(<Q¨BYç¼�ÀôÛ*T†�T î~;8888´ñÓ)íóS�`X�öùYîjÏÁ@ŽÚ.^úû�ð<Aàk�D<�x<Žúú¬Y³ËW¬Æœ/âã© ñCG¢�$4¿É–éÒõ@H¸é†s0`@_4á±ÇžÇø7¦oÄÕ÷ßÒxÏ®ºú<þÄl¿<ç(Üx㕈ÅbøÍ¥×â±ÇÇ·¢ý@‚¿žñ²ýÙù\ÖËn*c3Z–Vò´T{ Æ[S�NX<@­­ë¡`‡©xªwÛ9ñq=– òÁ`M©ÒA|qÝw�½8²'|ì—!€x Š×ÿלø1“JT8m¬}@yÜ3ƒ–�·5ãDVmñ3²Ä9ù#€XyrPÔ,™Èü�˜^ ( cÑ*¼³ÀîáÀͪ�fì´\VÔ¾ÔoèÈûëÊÃ󫆫„n‹VB´m9Šú�B¤MCû¨]6 5‹¦ÀO4 • ýÂÐÂøˆâé~לm”ácè´ì3Æ%”˜|ÝÃ,³:d£_Ëݶç–õ<ˆÌ½8Ìþ( øuÒóíûZôA!˜²…Έֲì(c:S:[W�Yä#µeàå× µÔÍ’‚ta,cÄ$<ÚW&ý Az‹ñŸö}cp^±~PrC”IEKК¤ÂµÐ=‘Ú6?¸yZ{NÙ‰ä5kY�Æ?~-Â!ÓÔNbË“!dœ×vÂY&;À– äSùâû5_  ÅüÙ¤¢åìõ®½þŸ'€Þyë¯8à€h¯} zøe´6.<ÿXÜqÇu˜9sÎ9çJÌž³A0p@g<üð­ØsÏ¡¸öº;p×ÝϵR ~+Z[3EøoCŠ:Ð2Ï£à,fýRÐA²oQJJ~à’-’Ù0€ €B3×·‰L^1Ø«I” tN¨*1¼ãÉåkÓÁ%KÀK RÌ»¹´ �K¥Ùù.®CBvÁ8vODBÉÄðh-d|X‚p¬^'ƒÈó†Éî°ÖCûI;Ö%2M–íámÜ>ë�"ÀÄ Ú™Ë„Ù¿‚T fËŸµ&€À ´¡­ñƒâŸ)šWU™ºa˜W›ª@+!”SˆÂÊ‘È-ï‹…Ÿ¨GõÂ)¨[>‹ê¾…¡~iôó†1es�JQ•³ÌˆÀê�5䙈BÇÿ›É?"J¨ÏŒÌ…ÿ¬#c¡BR€0eO±’Y…Êžj¶ ?¯ž–Ãûd핤½èµÊ�Zt©èz²#EŸ†jæŸ9éÌ·“Vù;…œÉK‹E"ÐB„ŠL§aŒµ陇]"÷ù5Y�ýDP De[ó äaÅ 2_œ¼åý‰œ…Jµ*{‰>gÔîd9RÚÞpÅöÍ›Ÿ�¼†¯/ý_IÞfÚ�fϪÄ$o@ß·m‰BÿÝ#ÈÍ ƒr¶¨¶lŸp>?-Dü„쓎 GaG À“4¸tp�#€Z•â¿'Þ~ç=\xáµøzñFG}�P—Îm0㳠زe+†ì~êê’�@Ï<ý�)UUU�Û|1kžîåo3•Â!…Ïg¼ŒŠŠNØgŸ£0wþš–Ïb ™ÏBÆA21¢(ÜL˜­†¬yBû²ýDÂhâËŽl�uR>"ï.ïžµ~�Šûy¿]lUâ ŠY©>íjMh•[a—@�uPôÝ|”³;¤ 98+éŒgMû‹ä‹6f‰D<_` |(Ä¥`¨ÙHH¹¢k·ÉQ�h´³·x½ p‚�¤u'‘,T,¨ ¤�¥]õîaP� IE"73¸¼-ñplâšÁjCCxh¨Pù=†¡ Ç°ÆÏÍ�dÍFTÍ} —£µ Ãª*Õ-÷“ø!eËéÞä“hiÖ{Ör“r›²´qÖ7HD1�ˆÒ¶D˜x€<�ÃúÆ,I¶)9¸— ƒÜ‡PF¤²‘]<ŠÏ ö5ó 1¨grs :ˆDrˆÙ‡;éc'�˜GžÔç(éɳfèÜiK{{È’ä%Eˇ6Œ•|”®•�eô°‘’üæ *«:sŒ•¥X²Ä ƒpÆ8/&ÆÄþ„oe—à¥þB³¾QKr¨?i‘Y5HFD99ÃD Æ IrŽ¼Ï‹æ†…Ѿ4"´·l ¬÷Ó>?I®ppppphò§€1Ú!æ˜`“«=G9¨• ³fÍÁØÃÏÀºõµŽúž ?=x~ñ‹ÓpÁ—ã/�¾8öè}ñâ‹�¢¦¦ëÖmh”y+--F4EîºëA\ý»‡'Ÿt žzê¡ÿîó2N9õš–%€Î<}´Ä Ø\<øm0=NÏ⛆D÷ÝFŠfl+®úSÔD’ÃâUÀƒ5‰pìß_õö–VU*�,ЀïW,ŒÑs¾nKf’>‚™4·dàþF�hŽà™„åeqù"ÁÜ\ ÍGxI2%|r;Vô…IÝ5nïq¡É ¡%�k–m󼦺æõ&”#@ؘ„tê,Ž&ü þ’†¯…lŒÀíÊ~Ûe_úlNíHß«è„Õ½CËj‡*¹h4fûVŽlÌþi Ô¯ûUó&#U·­�ã­L i359¸h ÜZ%�²�Émiˆ¤2ÁH’Y?­ä� 0ÄÀ®ÌUÒ±$/ –í¶Ü¦ôi<¢ØOÐga? ÀT¯Ú�uËÆ_kð¬@%؈±sjOºv�ÔkFO(—Ÿdß›®›÷—Ü*…ÀÇ lI©^Ä1–ûÑw9ˆ¶ç)”¢ŸýUo»bšÎ—µ>àÐi ƒXÛ·T˜XoTšÔ¦ørF^xv�,©J÷H’Ž#h!sV¸®¬ÇVº&Æ[I£2d›‹î·{¥�¢GL¥Ê^ƒ d)WïfV;8888´ñS–öùé�`Xà _»Úsp�#€š�:ãŒ_aêÔ/°=DctïÖ åèܹ£G�ÂðểãåWÆãÇ'þÖ@ßÔ³G1¦:sæÌÃÈýO€ hâÄI8⨠¿ÍôÙm@œpÂá¸òÊ‹#F…iÓ¿¼ùÆŸ±ßÈ}pà�Ç¥—µdPöfÆv²Aà nh/ëëÓw»MŽÄœ°s6Kîr�KQ�Å[V•�¸d7oC}×€3îëSýŠgÇÇv[†�g¬T9¦ ]BFéÚ›LÑEu™`�kpE0¨¦ÏB¸A˜!Ëej2C•¬ÞXqÍ•ÒÖ‚zBÙ"_ImLò*+Éà³ðyÖ›)$Ìn|w²$€8!ųGd$ "¯/ ÏÞ:\Åýb´"Ee(ê¢í:µ‚QO µK>GÍWŸ@§ha�XX›ð¼øÅŸùc &K)î}Á3eÒN†Ýìß§Ùõ<@�t¦ƒRŸa%W%JÑlõ~±Ãà3£h‚D`²˜®Ñî³ÇÇjZ`0G1ÂÙ¦´€V/ B@/ hgý)-ãeÙ,ËòIòy›ÈËM£*—eR¹IˆBøÏëRÐËäR¶­ÍëŠÎK�eM‰'ƒI³V Ã1•k�à�gç«åÁTò¥£±Q–Ãd~‹‚Ÿ�8^Jï6ü:5�*U–*dœ°œ…Äß�ß0�òî!ô¨Œ"'Ïm!U¨½Ó· ê�Ÿ‚ƒƒƒƒC ?¹éøïžì¨0 À§N†ÔÁ@ŽjvèØcÏÀ¿ÇOC¶8rÜp<ðÀ-¨¨èLeoÛ†�ƒŲå›ÿç ®í�›m¿[¶6 µpÞ¹?Â܆+®¸¸ïE‘âX±l:t(ÃUWÝ„»ÿðàÔSFãñÇïÇÍ7߃nz¼  Óìp@‹“&ÜP˜KPØ@–€=‹gSˆûH�.!’ƒ3Á%jÂÓÖ´�|¼j°ªK¶Cè¼ðæÄ>å3“Ã;n’‰2ùå§m Øs¿e ¨Ò6VG[<9L·‰W++CÈô™Æ ŸÕÌâ<ˆA1/AFhÜ/Нf�:ÁíÙbtM�_¡%Ï ª{BÛŒùPÝ®�.�ù,ÐyYl@,†Õ<èF$UB_WçE>X?Ì«NvG+Á‹æ¢°ïäu@m½•à7Ô¡zÁG¨[9­­Ðàwˆ}Ö0¶l¢e·<)»_ì>3>dÉ7åd�˜¾)˜+K#±l-?>Ù¦òì¥ ~>Ëä�lÙ6öÏZðjáÁx ZdEµ!sPåÔX$4EÄ€Ðïð¬FúXHÑW b–‹n–¬:/Y––—c±‰‘$xéz<�Iñʤ�”âFÙ¸2ù£}Êü±JÿÙ+M"¶LË¥k%G•E25X;å$)›da£C¨i!uzàUCÛ�—’’ÎMÉrÉœ»/l«0`�ò‹ÂA+![ÖŸ•›L˽¥\hÂÁÁÁÁ¡™‰/Mú 'àØ4 Àls5èà GíD‘@ÿû_�’4óM7Ý�o~âKí¬¸çî‹qѯÎÁØÃOÆ;ï~ˆÊË cåòQPP€1cN¤÷f*ûvÀìYïâ¹çþ�Óϼ®… @˜fÊ!ĽrE;Ø&bÊ?ŠÇ 蘜€ e2,zú�³ˆ’)}ciEhÞ¦�*éç üâœeñC»Íö»Õ3ƒcñc8&Eb”*áû�d™'˜‹A3�²µ ÁûB´]�ƒy܈ d1o{{R‚?G¶òyà?Y;9ÙÃ}`í‚'úÈçÆ®IL€àÅÊËRÒÉ4Sßæû­ª¡è›«wóÖ7 $ÉÅ–…òBÈë6…½ö‚ Gñ}"±uªæ¾‡ø–Õ­é´9Õ;j|ÿâUPÌŒÍn§gQ DY$m'›yv‡È˱cwó—gòÓb&)Ê3‚‚Aö½âÙJZóm gy@Ò.㙤†Ëç¬1“ó”‚O}­3 ÒvYÏ@D…LŠØû9�ûýPY†ÉÒXI`ç*jõ5A[m‡YË�Òö<«ƒs‚fŸ)û»?¸…ï'¢Q¨ ï~¾<H^Î3ÌéЬ-ÉïN´\ö33Ê`¼ˆ¾ å‹^˜Äœ9óqàÁgµ¬'nìD 7øæ]rU /Ñl3‹  (ˆÃΓGÉé³Y ²Œ—A__ ö«­ áè¿¿îë-¯îÄ”^+¤ünEóŽè¹‘ÁgæÌŠéØ,ƒ‚‚©<`'gÙ%ߨ̀ º2½¨þy“öUFƒfvïXÈ eé#1ø&ƒo@õd"€è»X¾ð¤v`‘¶2˜lCC±ho÷ö˜ŸÝÈN±ûÉä Ùìæÿ?ÝC‹k÷P)��VBNYöÛá¼¶Ø™°mõ|TÏÿ©ú´t®·41¬Í'Éþ…ÕLAO¡}Pà‘“,Ö ¿l~.Oí×Û33eè AX&yE‡`Ï"{8,I«l_‘t9ìÎÌü€hl¤ËöåÃSÙT§’£‰ “ô—ˆ {Vª[¼™û‹ïµWc3ÕµýE�_o¢,*;ªÉGÉrÁÆç€ŸºL˜Ò~’�=ßC›' Ж”±bsx…1rK‰$kœ¼¦¾ˆ=“&�ʰdN+dŒÏ‚‡•‰pî «Ó-õTº~YYyLÖÃ0¥@ZÙs·:w�"…g³‘xÖqi�zŠppppphâ§=€1* ›¼ `¾«=G9h— €î¼ýB\rÉyä…óÎ{;î|Gµ2>™ò<Š‹Û£WŸÃ@ HÂÖ­U¸üŠñø>ûô% Oåá-Dõý†¢ !¥ƒpdRˆ&œ²Èsnô=Kµ8y¶²]²5˜œ—èq@3lC 7çGÞ]6ÈÛÜÐ  #^]r`ñ‰Ñ]WÁS™õ® šPpάf£M‚²b-àDŽ%� ºsE86Ë™fnƒ„(0ÂôìÙ¹HdˆàQ %2„î€%D‡£ƒˆÐ¦6�!áC<&CЋZŠÜ(p—áGa¹.„@¬ìž¾©]dƦáªÞ/C+!\ÐEý@¬¤+vVèT5‹?EíâÏ?·4àë¶‘Ù ®‹cI) ÑèdîËÛðGžó8™‡ÊÌö ˜fØ„ËdBÁ³Qy&³þôÎ+ÐrÚ^�’SaòS£Ý”×ø�…‡I,qÈ”2‹ø5Pšuö”Ý8_îóø2j+ÜÃEËR�ZˆvÁ/‡v�ºy93–Ö›²G *QëPhŠñŸvÝA~pÖ ¥{æoEmÀ"­J�g'ØÞY8çË hžÑÈÉA95�?†2YÊ�'¿±lC˜ˆ Óˆ¿3™úD¨Œïœû†:tñг9y¡¬ªÝÑŽ8€mÎOÁÁÁÁÁ¡ˆŸ€ýì À 8&½`Š“!up�#€v)èçg�‡ÿt'Ÿ}�½÷=Ù RØo䌹'† €nÝ*°lùJÌ�³3fÌÆ{ïÏÀ¦Íõø®è_Ù¸†î>ú÷…çyX·n¾új žyöe|>sÙ@‡2eeä þéô/1ÁZX‘–\;úèÑèÖµ3ºté„òòˆÇذa#֯߈µëÖcòäOðæÄ�ðÞ¤'зo/”w>ÀHmÚ´K—.ôíÛ¹¹9¸ñÆ»ñô3¯=›¾œõ |ßÇ !ǶJ�}:&÷_ ð ebØf�Òg)$˜w ³t¡¸(½!RÅg kJ>¢í‚”þpeiäÓµCT}ªàD6$öë435¸d ›åi˜}MgdšÅLŸa­ì 6ÙGÁÒ> H  f÷Ԇí”iG"MŒ Äd¤¤,³“éPbàJ–=’üMvLÞ€ŒÏé„ ÊRÉ´a±0;ÙÞFì’Lö ÂDx+¶åDÿ³vwµ5Ñ[¡uàEb(è½ò»”‡]©úêÆl m« µ =ló;å|ÚpXéBxÊ@æiCÖ '„d2HðA£²É _ MD³%Ég�r>6 ç'’á²*'€ ýŠËà��ŒX&«(ÅžiO� Á�‰CC'“¦tXÄ^³—ÔTv/ Ù-x¦¤SP^ÊR¦ã[| rm’ôŸL"XÞØHAN¶°}Òíü±e×ôfQ]¹ÉÆG>¶ÚÉA¹B¥+¦](3F DéÞ‰@´Ÿ\”˜Å˜Þ†ûŠ>‡T/`u)µ[Ùú‹û0R_Jç[ШAQÛp€·q°õ¾T9âÉ’ÏOÒ…š™øQ†8@>‚ásï¨q5èà GírÐÕW�†®¿i4J��;âAÏŸíÖË1zô(BBCCî»ÿ\ý_�Lid‹s~~~ûÛ Ñ½{WHð}Ó§ÏÄu×Ý…·Þ™™5ôÎ[ÅŒ@~ýëkðÐÃ/c{èÞ­=®¹ú|œxâÑÈË˃�λïNÆ ïNš€ðô“7á'?9½zïG„ŽàtÊÉãñÇïÇܹ 0b¿“PW—'ä6n˜†?œ‚qG^Ør@gž¶@þ±/C쇾28d;h¡„ýr–DÀÛ¶`�X4Ë2O©è„%=B 7P) "^£ËrÇÇvÿÒ/Ïo€$ „åÿ–Œ‚¢¬ }߉/AP$˜Ø¹AÈü¡eL*‰eù 6iÉSÚYÀM$é9CûÈê‘òaj7µ¦ïâFº)è&eP{ªÅr�mA*>ãÚèÏQŸòbVõ÷Vo¤4"h (…¼ŠA(ì³¼HvEÄ7¯jôJT­GkAGÔ†deÁ”ľíÖ™2€¤˜ ï¼MíH–ƒ#Ù##¯@ÿè|øˆ!TiÌàçaæ‘uÆÿF¹/ÖghABÒ®8Ƨók?ݯCÙã`K0é „ýç$±|³íÒ’ö1Åø_€Ð×Ð2+ùgy‚ÉÇÉS”Éiº%ž Hßåzcäëâ;_&øþðm„õ 4^?_Ãó«K‹?”åÞ— s ØrÖ¨�’Âe‹¤÷-¥„I8Š”ßy¹[eÚç�†Ø¦PH¡rh¥åiŸRHôŸŸ¸ ;88888´ùSàpå†åiŸŸU®öä ]–züÑkqê©'Ñ÷'žÅ¹¿¼6œzÊhÜsÏ h×®-‚bÒ¤pιWaÉÒM‚X,„gž¾Ç=јyóçGžÀ¥—Ý�†m³ày^‹@cFÅsÏ=Œ6mŠ�-žzêœý‹›n¸îç¸úêKðÓS~‰—þ1Y&€Òxá¹ÛqüñGá�ü+~sÙ}ÇõÄG½†G}ç]p{ËKÀ—]ã"âœâ²O¦Lb‰œ‰ÿ¥9‡Ä“2�ät¾™¡t y—o��ùAÕº~[$:añoumOŠ:ÈОJ¤z͉Ùã+ÄB€�äa˜uª ø2Ë üìý€h_1C†oÃeeÅúPïObGÒ„�GÒk,4dâ,M>v?FLe!›'§°ºãm^Vâ’€š.�ž Ã#!è¥ïâ5Òý5xÆÐòè»kº„VSI]„VB¬¸Eý@¸ »<´FÝÊ9¨^ðüø6´ü¼ÐW‰}ÚNKõ̯儳%`0û�w²¢Ë$™¦í¢E4”Ö �€,÷Ň,a*f r² 3¸ ™£ ØõñìÊ24¯ø}•ûEeÓñÍŸ³@0)R»â(Ï–5gŠ ¤›åY'È~ŠÆ·‘gôYΣŒQ)KYêþÍm�êË”Ijbªˆ,äY¨� T,�‡�~ …òDþÝ2AÅ’q(’âüt„s’�¯ÈÊ�`ýž‰èì^BçQDcdfžC[·±ûührppppphfâ§ €Ñ"ª¼`¶«=G9h%€(SdÊÇ/`Èêÿ®¾úfÜuÏóØÎ>kî»÷fääÄ2~‡¬Zµ‹}�Õ«×6ÊÀõîÝ¥¥%á¿ëÖàGGŸÉäÚÌçöÒ‹÷àÈ#G*•ÂÂ…_cíÚu�YA�ÓDáÖ[ïÅ¥—ž�X,ÖìPïž%xûíйs9ÂÌ™³±xÉ2¬[»¾1#¨CÇRt(+EÏžÝQP�ÿm=|ðñøà£Lõ´“O:O=õîºëA\ý»‡!@$;7åãW¡”‡#„9sW£ ž,î½÷f\yå�¸çÞ¿· tê|“ÞÏ–‘t…òè,q}­-™ ƒnëÃg`G”26deðDÑöÓ$„æl,Œ¼·b°Wï€Ð±PurHɉ»¬x, ÞÉÁXòz±I~ñÀ›ÀÇH&ïA(Þ‰¢‹f™WàªHtxAæFæÉ³­y�Òõ[z‰3O#¶Z²µbd)“N÷‡Õ»Ef U#“TáY›ÛD¦m¦êR�ÐJåµAQ¿ý‘SÖ?4èdÕ_}‚Ú%ŸÚo- ¤nù¢aLé,]J ³ßù£k"¯){…/ãž%ô�y™ðÂi6>8X'Aÿ6_‡¤e¦LRNèˆ}—Y•N_km¨ª,ÚžU9#س¢¤ 0)?üZô´¡Iž0d/¿—}+�.µ3¶N EÈøßØN„÷'éÞêL 9x6U¿â[2‚ÀB¦²'ùý@J(ÓDJB–~”-é¢ùþ²¬°°€y@±1Mò2³J—f‰DˆÚoÂ�)q´±ý3ÏœnßÁCå`ÉçGgŸD¾78Ÿ‡"~"FØ@v$|˜þK¸tp�#€vyèúkÏÆ5×üMX¿~:l»~=ú—ã£_E~>Iž­X± ÿúwxõµ©à¸à¼cpýõ—£mÛ6hÂë¯OÄ1Ç]‚íáâ_�€»ï¾2Žsûí÷ãõñ“±båV4¡¬4£Ù 7ÞxE#ñÉdžçµHÐãÿ„C…4ɨ‹/þ]£ôœ mÛÄpâ�GãðÃA~~>ÆŒ=טíôÅç¯"//»ïq$6l¬ ½÷\‚ /ü9^~e<~|âo¿%Îf|ö/cð�±érZ’L²#2 ZïV§í¦òÉÈžI»dˆK´EÇ^(Þ$‘ÅÀ-£A~æOzðâHùˆ¼¿²cøóuƒUÜ/@øEÑ5ÿ%�¾Hõk_Í Ø™œ—A0f·˜´†¼?kRTF`((� ’\�Ù6bâ—dæÃ™ìaÂ%áxa3øíò=ò3"ƒ_oìJ…Ø­}¿ì D³•ùöÞºúXô�5ƒÕ¦x%ѵ- Š  ×^Èï>Ê á‡ŒdíTÍ›Œ†õ‹ÑZÐ!Ô¤:çL‹�)ýÚtKíÙ‡vÉ/òR¦äÞyÄAfá „Á2Nš&Ðgöó“½_„Óa©Q´Èp®ttÙOo×Hö£É`!µLÈNvÒž  giHÙfäY%dñ°{Auf¿(;¯(ËòâäïRú¯ ͸ÂlÆ!Èd _MíÂS™“„(ó”Ö ×jÑê•ê?xv,+Ãîý#øå)ðqSR÷“ÇU[Ö¡�2—œ›¯Ðo÷ÚG,•ìÁ²Wr @�óùqpppph!òg7c!¾Lgýluµçà ‡]ž*)ÎÃÅý ]tN#á�eŸˆ é±&|øáTüìÔKˆ�1`È  ¼úêèÔ©ü[¿ž}Þœ8C”~›5ó5ôèÑ-Ã?çøã�™³–oד癧ïÃÞ{C3@”™´fÍGhST¨ªªÆ��€Y³W`ÇAdÙ}÷Ý‚‡~ýú+Ô¾]>Ÿñ::t(klãß˜Ž«®<7Þp%î¸óüî÷�€Ð2@,Àb÷Èáà²4€|`Á(þƒšÊQù fÙ@„6|ƶ`ìm(ƒlvk}Ò‹ýûë^ÞâªþÊ×aˆ ôËóÅï6W—ä%-ÎFer=’<šQEÈæ b7À–5ÂHKІ{}hNŽ¿#Û[h!mFˆyÉÁ7N²:ʰOñ¦rò‡íÃöc9Z¾£O”pùw9Ž”H©Ø„U}¼uC”�Z y� °ïx±<ü/¡aÃÒF"(Y³ ­Uk’ ?NìÙæ»”e·äÙ˜Ù9ÏÐ`R_¬$HFê|ò'†,Á}NlAÊð "YFÎÈ6±17S7Oû¾!°Oýï/(“–»°qÂH`Z"Ã*_fÏ@ÍÚ“ŽKQò6Aò¦û/÷Ù<[Y†•øL“š¦Æi%}DÅ×±ód×&dþˆm�Ö ¹ ¢ê.�) w©�È/Ÿ2AH5Æ2» MUÃè •¹h9DþÑ$�Hegpr`�y'Ó m¤HÎì¹W94„�£ðB 6츿÷ùip¡‡ ~ÊŒÐÁ°ÀË\í98Èa§$€n¼ñîÆ ”d*…T2õíÿ”ï#™LÁOù()m‡Î�:4]º”c̘ƒÐ¾};„Ï>û‡�;s»Ù?û�ì�‰_øöø[·VaßGcá¢u°áÒKNÂí·_‹&L�:ûpL¸âòSpóMW£ ëÖ­Ç¡cN&™3‹oд©ÿ@ÿþ}[„:hÔ@LœH²j|0r6vœ\šöÉKèÙ³;ìdLùdQcÆÕ)§�… ãoO¾ ŽãŽ�a{ÆìYóðÙŒ¹˜ôîKH&Ømàᨮ‰· Ôg¾Æé ,7VíúLy/šÝ ßׯ€3W࡯á|Dá î=C2_€l¶mœÁÍÈ ›_N–ºöÜÛÅ×Þ꺜èKxë·õTBHÅS}ÚÎŽÞ}1Š2˜ïùñ%Yâ‹-`%…3ta¦8 d0Yµ=é4##tN É)B,#L64'ðëàZÖ1B9ëÍ ¢oF_%Î8ÉB~Ü Rp‘Ék;†çTí©~[´¢mËQÔ"mÊð? í£vÙ,Ô,š?ÑÐzG--ˆ�lÿ©_‘SÏÚSV™@¬‹µð4Ïa1h­qO¾ZÈ âÓl¹ØïYnó‚©"H>RÊj%+¹ÿ bî³”èüÔì>tAÇYšK±²ÀÉAÊúá¼ ˆgç"fó ¤i9‘?‚‹P<[Îý©L/¨jmeí´<\� ¢§LÏ�Ì1É� N s C©|Ë»'€Ìã"÷âûhžRðµä¬uÉ�` }hs"Ë;÷ðЭoÑXˆ�¬tç²Ï¢ïºIîÍùü88888´ñ“à»#j¼ `†—ä°S@͉)S>űÇ�g• ›øÆ#8è ýЄÛn»×^ÿW0ˆÄÌœÙãѵk4aܸŸ‚˦åå…ñå¬ èÒ…ìyäI\xÑ�Š+¯ønºñª!€ÎOîÛq='oy4;,¦åÙïo'“xû0k þ=BHû€òšöIöy™<ÐÅ ²@Œ •÷±7a’´‘bLLòFÐdâäÍt¦²…ø��Ľ¢ìr�T^h~Uaäãõ{x5É ´B9(¬‰ÜòJ÷–“†Ÿ¨GõÂ)¨[>‹î C+Äý’èç cJ¿D®çCö H,šlN¨}Óg(: ë#$O%�á‚9»ÀfÐbÚŸ‚þ¼,V!©$èQ±�„\c&$˰d^)´‹LÆi« ˜�å!@ÞW–ã“�TìD¯bÃ-¦qšêÛ’k!ó ×HE3OB¡MXëRATó Òª l\<åÄI7| ­g’p6Ø<ñ,+e mƒ¶ç“RX™þþÅ¥UÀ̻ϻoÐhWâ¡Ïàò C¢G07²’A‰´Ü[Ê�°ÍLü„ì `€(ìðLð¾ËFup�#€~ðІ ñÒK¯àÚëÄ–­ ؆íÑS>þ7šP]]ƒòÎ#ÐÐ�BP<ùÄ øéOO ¢æÊqϽ@øÙOÁO<€4 �½ö>Â*±Æ¥ÑæÍ}íÚµmFˆšiŸL@V­Z�a{þ¨Y½vzö(ÆK/>ŒÁƒwÃ+¯LÀ­·þŸ}¾& Ø—_~.N:ñX,Y² ?ùÉylÛ–•€3‘0ÙK›P€žLr2Ë^°ð»œ Ë�¦á1ò‡CŽë™3W´!Äf²îx�K¾Fäíåá/7T ?à·‹­ˆ\1ËïÕ¦ŽyÿXfÒ Úô´>¨pZM„ Ò52 Dw�E謶Åâa*tÃù7Øî1oæòdÈÁJãwÀt›$í»L³}Åê•UBT* Sv µ9ŽM\=H­o误u|~ÂÈï± zìùÍg÷†c@²z#¶Î{ñ�+ZÑHmMuÍ™?¤d9˜Hb)à)DQenB >h´‘@4›@ä³1…�>J2¢ÂÇ6†ð åH5g¨¡�¨Ÿ¢ ¦ AI>�: ‚—Ž!ÃÔî‡b“«�/Ï�ã~0AZÌ�éYÚ–"9 ýw� }YX`A-¬X`hP�­Öi;8888´ùÓÀaÚ#˜`£«=Gýà  'žx—_q7?œ}Ö8üùá»Ð„iÓf`Ä~?C6¸ù¦sqÅå¡ ~äoøÕEw \íÙ¸æšßdx xðYÈÏ?{+N8áèñZ¶ô=”–ƒ2¨¦áÆïeÙL6ØI¬ß\rN9åÇ�ÙP›7oÁ¢E_cÞüEyúôé…^½º#å×xm/¾ø2þpï‚Skg‘”ŒEÒ†ínŠ˜ðX ¥­ ÷CiúÌÀ•lˆ~´ B‚¢KàÀ%¯ VwÆë2Uu<¿¤¯·¬ºRi„`�Vðý. âGô˜§ £I@ƒŸ[`i•æ]Ž´”§­óŒ.EdD1¹‹GˆYQ��(µwÉÁäD^¾O÷ßÞŽ õCÈlë3wbAÅ"C‹®?ë¬.18ëk}cU�ÐÒÚÝUJ碕�Ó±Š*÷C(·Ð½Ù@ýÚ¯ý�RÛªÐZÐ9ÞŠÄà©ÉA…›Aý¯Ü‡R[£lR¡]2'N‚°A�ËGY¤ßx‘=h79; ±ÇL¤O™”¤0Y¿a&²¡„úäCåÈH°Ë^$�ÆúSk¶¡0VÙ’˜ U‘D&ò~[–}ˆ=LŽJ6!ÅFò�5k*IÊêÜàyEÛò, I——®ž§h¼ÆV–ùDÇ–$g¬Ù'e Ro¢¯$‡°/�²T´ð„Ë-Ƚ…ѱká°Ðˆ­Ð�¤àuêÝêààààÐÄOišøé…`ØàM‹\í988h—#€þð‡?5±œbÑ(b±b±("‘0â‰êãˆÇã>|÷o¼2dßöu:‚â¶[ÎÇe—]�A �óË[� ~~öxøO$å6~ü[8úØ_ <þØu8õg'ZŽcÇí·^€K/=¿ Âï¯9×^{xŒaêÔOñ—¿<ƒ§Ÿ}Áa—Î;÷Ç`ø^CѹS9:uêß×X³f-V®Z�ÏgÌÆÃ�üuuIZ‹:mA ‰5¥lÁ A&ޤ¤˜}Ec0žÍऄQçÚï¬ÁœÚj½Â#|3Q`6 Á:ooIu^ôíe½Mõ�Š «m©þígÇÇt]ÏÓÂï|‘Ä—ËY@Tïrò ¦A2‡â6åÜÛÉà ¤ÀUŸxÀÕœD[ ŒÅë#Èûf¡Ík‹W€˜R†0—„¢ï?Ñv�ÜM–Ð~ µKf æ«iЩZiº§(<'~@ûÏüŽ9q@[¤#%8)CPÖñb„1{¶„¯Àfo?K‰`Ȳgƒ�2ùØÊÄÇ8³‡ įó ³ÈEÂ4ÎòlX» &� òòì}èøÍ´—Aû|�l“?df?›÷(éܤú£÷*MΙ/™t`—Hħ0è  µúÀ3d¤w6„É#œè´ÒDô(%µ{' bq?=¾œþKmh{}—��Å7,ïî¡G¿´Ï�:«‡ÄNþ4¨s~ -@üä8Àp vÔø€i|WƒŽÚ%  c�=ÿ? 6ô¯ìˆO>y999hÂyç_ŽG{}‡2j¾øâK¬ZµÙ °°#Gî�Qưá'6‹ÏÇ%ÿwÞy}3@”ôÆ„G0jÔH˜°pá×xóÍwñÜs¯`Úô¯ñÃ@FY»T�QN—`ú*L•µEÒE·¾; j؃,Â)Ø@S�X|c¬¬ôôâðÔ5Å‘OÖUÛ’m—ޘط|fr�²M€† vB(û€'«#Ð:ͶTܸ›äY ó˜â�a^\Ž‰ÖŠ1r }åh‘¼¿Vÿù¡”KÍ‚d@«@ÎúáAúÐâš¼Èäu»{U‰h%xÑ\ö�¼Î¥ÜÛÌw€ßP‹ªaÛʹh-h…z¿C쳆1%óQþöƒýÜȞǺ9%Ët}Ö¿Ù$¾ìQj{*¤ÈÄ?„ ñÆH"Âi_Ê,b²\Ì ßDB‘ çÍùF<Ñò,å/y?Ü—Nƒ�L�eiêùÄe½”§¨ª-™@TAÛ„±m s¶ Sž}EåJ‰dà™&B”Ú¾æcPPù5ʘåc¨|yrŠ…à³fñð¶Ï³Ý¨L!ÁF"…¨MQ9l¹tîÛý\Ðè74Šü¢pPY7Zfß^ðù©u>?-@üx†¥c²¹'.L0 @�«AGýÀ ÂóÏ݆Žÿš°xñR rT ŸÉï=‰}öÙ͉+V¡G¯Cfñ *+{£ \p9þòèëÈ'þø<ûÌÃ-@ tï½—áœ_œÏó`‚ïû˜:u:ž}öxìñבLiìêà@ùc l¤÷gó¨²<¿)HN±¡@×ö¼Q¸ÄŽ+—@rŒƒž@½P²×GÓ™†ÖdŽÌ*-•BtÂÒî¡ù›ª”Ž!ü’œ¥ñÑ]gù…õ¢.=¿{ÀMžoϘÉ̃’HîI£ø�XБµS.‹Æ>2†-{ÿ1€·)Hµ´ÓgjŒÝbuæ)&o”aòNåeV–Im< U÷¢o¬ÞÍ[»m€Ò£5 <äwŠÂ^{A…£î-¦‘غ[羇Ė5h-è°Ú”ê™;%~@ñj9è϶àÒN´VÁÌ– ò ^x�ä˜,D†Ü?'Œ3Ë#‰2î³GŸ½´—RðY‘q~Ðl_‰»â0nÌûCá³5,Ë1VÎËD?�²DHÐjéþ[ Ûû“”5%„¦„¶cäóñ±¦›h?ž‘ʉ 6î²Ïf©7û«'?OŸc<:Gо³÷ ¡È–±¶ÄÈ“t¢œ�e��äf‘(P98‚ö"ð¼ î™bº“õA&ŸŸ¸Z€üé`,€2ÃoXëjÏÁÁ@ÿsÐ^Ã{á½ÿü+cÿk~w+î¼ëYذhÁèÖ­͉eËV WŸÃV¯|%%Å–ë v­~ðj @„ýFTâüóOǸq‡"??V®\�k¯½O=óvqp ™ð±óB ƒ6¦ÙÛ`{ º'ü¿Åð´RØRÊh¢ÃJD#„ÓË6ۆ׶(SP›ë#Ññ‹+½•µ}‚˜ìk…¤ß­p^Ã="/œ 8ëZ$»LÁ9AòH"’TçvjF™�^’S¢„%£™˜¥2 Á©Mؤ %Ù7¢2³—¸á$!# …8Á({'_ùÌw)�¸ª[èëš=TR磕+í�¢~û#œßÖ½½´ ¶­š�ê"U_ƒÖ‚Îõ–$v/ššPX#A ÈÞ(Dúdv°d€j>þ™2!˜Œ RbŸ¡O×$†Š…´ZN °j`£t�dt"o+Ÿ§�ß¶ÊÁ ä·=H#]&#-›&{¾Ð!¤bÉ“N„@¶ ^{Á%{ö¶Aàä©8Á�Ú½©!JçȳOL’W”ÿååQÓŒµ\gTc?&O®7Q ŽOR1�7Z²eâ¤3#‚¨ÿëÙßCy÷ÂaO8±àŒ•Ý,KØ`› Z€øi` €~†-&˜ëjÏÁÁ@ÿƒáµWÀر‡d�0޳f}öéK4ˆÚÄ“O¾€Å‹—á» ªª|è_s¿| ½{÷D.¼ð <ò×#[ Ö}ôZ @„.�Ûà쳎Ǹq£1tè cV�ïû�õö«‹o§úÞå3€ä‡`T-ü°4Èõ˜l¸é¶ Ó\f„–g@±óäA¦—é¢2}_Kr=rÆŸÅÊ@ü:=*Ãç -Ø\™´b�·5Þ  £^mr·â™‰ƒ»¬‚§xpƒá‚©,FöËt_dãfN5[|IB_ÙáXP× ¹gôíP¼�Y�¼i[9ÈųwD1)-ÌD.²ý¥�cø³�í"Ó7í©êSeh%„ Ú7?±’nî­¥• S Ô|=µ‹§Cû©ÖòòuÛð¬†Û®‹£ á“à×Ú r(d•q”³ßÕ/Ï@øH?’Ánƒ2žeîÛ£Þ]‘ÿ�@.+’„3Ä¡å‰é϶9&YzÑñÊ$½xvÏ| ÔÓ%ÒwíÚ@– }ŒÊ f-˜„“•Ðìr¼v_#�(droyed`[*Ì~^¬MÛpz×2û÷¤—I$íCÏ÷ÿ±¤ºÓbÉx²¬s½DË Yî¯�UfPÚçÇù)88888´ñ°?€}„`GÀû¦HºtppÐÿ<tÈÁƒ1aüs¿“/»ì:ÜÿÇXˆ£û1vìh4áúëïÄ-·=‰æÆ¤wÃ~ûíƒ&üáÂW=„lqòIâ©§jˆãàƒáW¿: c=Ñhæk´K@}¾ñš/F䘲”A#øpæ‡F,œgBP &�cÊå¦�ñ1•%ÍJÿ†•rPŒ!D&¯, ¶~ˆjH!ü‚ÈúÄÈòÏSƒK¶Z¼d)8¹} ~>™VƒnM0e¢—†Aù ,̉AA PJD“=/¨œlÚƒQ P ¬‘hÁÁÚ ÕxT’”à­¬‹Eß]3Tm‰÷Vhx‘ zïƒü®ƒå¹7–ï©mU¨šÿ!ê×,DkA{¨ó;Æ>m8¬d!<%È( Jnüy£À¶ÄËPp§z>¦�§‘äçÏ8Ë ´‘Ж`¿OeЦŒ7fåP]1/ ±Ÿ°gî°þ‘®Õx|¹ yl²³z¢I?߆Êg™S0e,7eù3ñ^š¯SVb£õ�H!~Â<°Ï忤e7Ø@\z„³, VfV-kåKr*âùð¬ÏSðÉÈ8hF‘|�¾¦}§ Òë ™ÛÄS*:~IÏТ­»)_G‚LÖe¹_5Œí>GwÈmâÁ�ø¡}I ŽÊ”†h± $­Ù tš±íSˆIéQA<(*áÈ×ÌöMß™ œ‰ü‘#DŠÉ¨=üC+¹çË”ãþ*&SnÚ¦>åÅ&¬¬ôVÖ R´”B^Å öÙ^$ǽ©ìˆoZ‰ªyï#Qµ­Që“•ùS{·]˺_ê[2ô<ê Pð9£­ÓjÓÌ~6àíHæ mÊú?æ Dßå¾G6«áÄ7-â0Y–±�’­ã3÷4áC)�»H¤ó¾ÇŽl·eÄ9‘>ÜìŸï¡%–CƲýü¬eÒåmÀB #(ÅöcÒcLŸE­U– ¤�‰µ9v½Tn†W=�´Ç•‰L„Êóä{i·Ì¡²eÉJ:{! ïà0J;Eáyʲ5}ßñì �&~ÜçààààÐäO‡è„`X `€•®öä Î:óp<òç»Î8ãWxöùw!á7¿>wÜqšðþûá�C�æÆí·^€K/=M˜:u:ö;à4d‹î»ç�wV+@2茉ŸCii špõÕ7ã®{žßå=€(È!ø!È }xp0LÓ¦hؼ@HÅfDóm~ÊàábŽyø>•ÇŠaÄHðl¾ÏöÐO¥ìSÕ5´ZW‹¾±t€·¶®§¢�DhO%R=‹¾Œ�ëþb!½=ù·¬Œ®y0B)NÊÁ1E{³eÌšÙÿPY‚ÇE&É|KºÉ7ÌBÊÒ‚;>Ûô]Ó3ÆÚŠ /$PF´I>±Ç#2iuçðü­ÃTB¢•-î‚6ýF!\XìÞPv6h�º_¢záÇðãÛÐZðóB‹{}’ê•_Þ¿‘à ÝÓÄ'oäØ(´ÙàŸH$¡c·èyv*#°””9ÈËçåiÙÿÌÏŒ·“o “ÃÔBfª‰h†fòn–�Š®“�³Ù?t ¦My›2<ä8‹A»¥ï ôL&U`é,c¢Lì0Bˆ];m#eÈHÕmCsYR)”µy*BÉÙÀD"r"†·í “el(ú)ÉÍÎØ¨3ÚFÆçí™T*!»Œ×�âÇ3ŸbE¯ºöŽ!õØÁ²'w‚1PÛÒroÚ lÍLü¥3~!ª¼ `–—ä ȇæÎ�îÝ»¢ S¦|ŠýG� ãÆÃ+¯<…&lÚ´{ì1+WW¡9qÞ¹?Â܆&¬X± =zŠl1ù½'±Ï>{¶2$ãª+OÅ�7\‰&<öØ3øåù·íòpr@#ø,gÚOq‚¦²ãjÁìWk ë‚thÞ–‚ÈGë‡{µÉNh%„r‹}~r:ôro&;9t2ŽêESQ»t& ýÖòJêö‘Ïë�è8 Q�´�Ü0‘¼ÌËÃ2ÎqIQs@\îä è» ÷ÅÆJ}µeÈn7}Rèî¤ 1#£ «EyRˆ™¿üÚ„ñ”>Û<�ìI´ŒH i?N*J.)ÜWÉvƒL¤û/Œ¯tD›¼¬ð®Ãöá“n¬£²Ì8Q�JV<0yþp¢‘ïg `×$BÈòb¤ tö 7T+‹É jm$�Ú•(ôCn^¸ˆ9Ó�Ogý¤ÜHæààààÐÌÄOÀûˆÀŽ€�| îjÐÁÁ@Ž €®û9®¾ú„#�úÞœ8&´o—ƒó'¡M² yâ‰çpÎ/oAs¢wÏLŸ>yyyh©§ž�^|A1ö°=ðÚ«Oƒðý@�ˆ‰ÿŽ&¼þúDsÜ%»8tú�¡0ýT$çsùúhH’ƒmò�™ ­Ö†È�ýz„Ë·B Ø�þ˽_¸d—U¾‡“h|æ©™´¢<<{Ã÷ó~QtuâÀÎ3S}ÛVƒ�C¼î¤ —-h!ù-H~=T�óÒ•TJ0·°z5X •ùA,³· YeÜ ˆ—Fë ‡+@V~ʼ‡Þ«›‡7V•…jꊕF-Š  ×päwßÊ ¹·’]ÉÚͨš7 ë— Å oÉ-ä× I¾µ­ã¦*(ƒñõ3àFì!Âf<HyÿâÕ|_Á‘.khò%”ñá›.R”å"<ÐoŠ-óÁÉSMØ^&}‚ÇÈ ÿô®žâ§ï!ŸÏB—ÇßQöìQžñ£L$˜ub  ¢7�uœ„ôÞEUÉ/@àé:´` ER·b;·�= ¬ÝPSæç'��´+—p Ž·¼­Q™:sÌŽå*T� ]IÁq?£m'—‘ÏOÂ�\»X09@Œÿ±åì¯ Â_½´Üù`98|' 0@ÃoØâªÎÁÁ@ŽÊ%Åy˜;çm´mKýíĉ“pÄQBÂcý=N;í'hB}}<èxLÿl1š�þå÷8ýt:δi3pÀ¨S‘LiÁø×¡£Ü© .»÷àƒ�â’KïÝõ=€È©+V_`ƒ_ ‘AâoU­Ù6T À(”�£5Jѱi½!“E¨)—½A3]¤˜Ü—± \0£AšN¡.éÅ^_ÜÛ[RÕ?HP_Ú/Ï[?¼Û\Ý>'X Nž­­¸94ÛOðãÈCô—Ê ©#Ú—ÎÏ:›ßNèY‚³‚†œdaœÒû1Ù7ì‚etR ›·5ïµ-CÔÆÔ@�T}į©ÕÆKÑBˆ¶ï‚¶A(¯�{#Ù±mõlýòÝÆ¬ –€öT}¬¸Ç–œ‚ÞÔ±¥rå Û:m®�Ù£Äê=F‹™À7ߴ̦K%ô§"¡.¤®ƒž1î*�Vù<è >q™<{Ü™U¬Ô÷I»”ùœü~F1ßòl;7£w—¤Ut��¼¤ÌZ!Ó‡]¬x¦öËÞ‘¯k{3ËÎ'Ѱ,0zßS‚�•mœµm(g6‰2nrVA&•µHú�çy ½„Ñ¡K¡°²ô\t`ö“|~êÝhå°Ä·PÆþŠ„кHØ`ûÛêd©Dt0@7ÃZoXâªÎÁÁ@Ž?­Yˆ–d2‰Q‡O¦}† ªÀûïÿ+#;gþüE8ï¼+1ùùYeÃtïÑOüí 1 hÚ´ñ((ÈÏ:Ûè–›‰Ë.½žçµ´ïÞ}0íÓEDHÀK/Þ…cއ&œyæExæ¹wví  3O_ [ìÜ…({£uÀO!±Gâål^¶2™Z[=[ÒûÛ´×EzYúFkaF­%óGƒûÈ3N¹Ž=�®·¢:'úÖ²�Þ†úîR ©ÞmfÅÇu_Š�ò!A΢2¼´5vÁÛ‘²s™Ä�Ie�ßOÚßÔ`öÌ1™ôÉFN�Ø‘Zc¶ÄÔ'"‚¨íðøoÆ÷&ˆŠJl�ÔWk/žj‹€òBßd5f©PĽ™ìHT­CÕÜ÷ß¼ª¥$ßüP›’µùí•x^4‚4¶ôý/ÔyKMæ³­2HtÞ_0xᡲ)>qiGy<Ö1bÞ²�¡Ã¥Ë¼‘|IŽÈåŒ1”{õ@"€ÒeÚ³�˜4¨Y¦Ì÷å@¼œ…*ò \ú�ˆ/6nJä‘fmË2 KÉ\;ìÉöCk±ms~ˆg¸Ù'àØeòØÐhðzÒ6Ù·àþ?<ƒšÚ³Lµjd¶ ˜åtµì–ùÞÅR”“ZíÜ#„n}Ó>?"‚ËÀÙ  mj]àÚa'"{ DO)€vn$¬7CÕî®:ü#ÀÁ†!ê¼ à37.988È@Á ‘Ðùøã׉Ð;Ô?þñ N>åê^6„ººm¸óÎ?â–ÛžÜnÆÑ9眀ã�;ƒï†O?��}Gþ ùóÕ8ëÌSþùÏ×pÝõ÷bþ‚µà(+ÍÇã�ÝŽÃ;š9ÿš›š9ã_(,,ÀË/�Ç#yžÎÇ€X,„¯ÿ%~ó›óÑ„††ôé3 «×Vïâ@§Îÿ®� !ãƒùÿð×á÷-‘ #iÂìÓ‘i!7A€`ºmÉú‘%]ì3Xå�ìù#|¡<Ã"J O_×.2eÍPU—,FèœÐ–Äže3’ûtÜ Çjìq>{9³‰gÕ2Y§ôr_kxlæ5˜Á5 hR]ñ (oSt.¦&ƒäDí\ ÇìR7Œâß ‚Ì�@hÑ ú¢ Õ7pD�à©úõáÚš•Ò¹hx±|õ�ÜÎýÝÛÉN ?^‡ê£nåjÇÍ�œœõùe{ä„Ã……`øÿ@[j¯Çg�~!óGþlŸa6µ÷äÌYÊ0µ–KÐDle\$'›¹Õˆ'¢ì �âZ�l‚Aã'Õ'Ø$íl²p F©®¬3�¨´ùÉÉ3JAò*´ÉÚHBƒ” ++ZWñÌ!Ë}Ð òÄ”1#L21[‚‘ ä×µCì—y½]`–gù°ûLë„΀“Š&ò‡HF.µ÷P98мÂp3?A¶�¨q>?ß3Ùã¨Ð@—4Ù“ƒêÓDÐ ,à»»ïðGÀ^FˆÁÀ'ÞsÙ¨Žr�He�×_{cÆDåoÛ†a{ŽÃÂEë áÅîøïq�ǦM›±xñR,\ô5Ö¬^‡ŽåeèÜ©ååйs9rs)þ·yó”u Ý»µÇ»ï¼€ŠŠÎµµuøàƒ)X¸ðklÙ²½{÷@¿þ}ѧwOäçSfÒC=†O<¥¥ÅÍNmX÷ñ·^Hñx3gÎÆŠ+±lù*,Y¼ ÛêЩ¼**:á°ÃB§Nå×]n½í)vaˆÏn6¸ùó 9ÈïkÀâ™2“ D>„XI²Ðg*K ŠÛ.²!µ¼½=ëC$´x…Åó9ÉCrv<ÀÄ@T€ï«èÄe]Bs7 VÉ`A}¿]lyü ._ø=‹ê`�A¶† {¥Wñ€ó=PD|e”!Æ5™d ¢äz¤[ÄNœ[3fNjºv¶ŒŽÀžK°‹¯äõ@±/óIòþ½e¨Ú�ÜÍ\ºN†uíÆPí¶¥B Ò¦Šú€hÛr÷–²“@û)Ô-�‰ê¯>i1¹7„½ªœ²ÝⱜN%`àPfð0Ê/ÑCd21Ìá H‰fkǽldO4Ê�•ƒº¶1E3Œ‘?Ôqžq�"QÆú4ƒ¥ £XÐ_O…áÝBe9{BÈŒ³7ä ô‘Æ;;C~7‚bŸU.P&!ù»;Y£ï÷^”n½C±uZ¶‘’+X]Ê„-ĸ²²hÿ̱`ëe ]ÍêŒdEò‡ 2¥#Q…~C#h[…ç /;Ba÷ùqFÚß#é“ wšôé„ðùB ÓdÐ"ìvø¢€Ã#xÀWuŽrP3@G¹þõÏ'2¥á}ç]p;$„C |à üüç§bG±qã& vV®®‚„¡Cºþ÷Üe$�=~òÌ3/⬟߈éÓ^lÌ6jN¨Oï2Ìùrv/¾ø2N9õvm !€a…=`ÃgÔ‚‰ 9½Äì6 7�*¦¾Í Ÿ_£ä@d#€d¢K&†ÌuÃ@ Š›b <£ªâ¡èëK*½•5ý”† ´BÊï\0?~D·yº ’2dAñà§àw׌W‘fôgjòó›Ôø‘v cî• ú$Ûñˆûñ¶!”c‰# eYf:ÓB:�4Ûnv­à½F@2Ru‘du�·-Q‚Bn§Jö‰PN�{[ùѰ~1ªæNF²n ZZ!-®Ø˜SXÙÑS!È  j3b%“ð%ˆø²ç—~£ï.ך˲!%y9Ú†ºfÚ¯Ø2îÏÂËñíSàÑ1Yv®2�ëVO “ì}7ðhZkxž9{€à'gï/yF$–­!ÄãÙ9Š>QÔÎòÂ~žü?`$ö¤I BAG…±˜Ÿ`¸„WhòX2yI㟱-‚‘±šî9<¥Ø.&ßš@Cí„Ú¾ðÚ(K÷By×Ba/[bÇÄ@ò»Ç>ûii�:7Z9|¤O1€¾é¿n”«•oŸ×¥¤ÿ6º*qØ…Q’&~z#6¦‰Ÿ…®êä f'€Ÿ~òw Bq»o2kvx(Ö­¯Åöpê)£qùå _¿¾Š/¿œ‡çžÿ~ø%T×ÄA�3�n»í·8îØ#É×GÀúõqíuwàÑÇ^¼öÊý;vt3@$évÆi‡ãä“�Ã>ûì‰P(„ Xµj5}ôYÜsïÓ¨«K‚ðÃ�€“˜‹¬ "&8û#HÓè`©82�Ãäu ìËÖ�×Yþ Ï‹÷‹EÔŸÀ}`¸ÇäÛͰíÁ(oqU~ô݃¼Í ö¶¥úµ�?´b9B]#K(Øi5ì–,MྠԮ(U!]IQÐ3 feð¨2yTH$—m?©]ñÂ¥öaÌœãö?´\ÒD-£vC›¦ËolÿÞ:”@"”ß©«©„_„€ EPÐsOä÷ØÊ ¹·–VD²fªæMFÆ¥-ѡ¶k󊇶 y±ì  žÜˆ B…5{“)'~Ùcì#…±)¯0'F$•S6`B¤áˆl6^#ÉSRŸ!øÎ›¼q¨XaRA&.èzmUg—‚£ÿ²&”Ñ;�Á”õDå }uðì0ó˜H�È#:q^vÒrÆ5[gÉ&5g€ËzßBöŒ’=ò S²D*¯;ñ:d¦ŠÕ-m(úCqp"¨cEÝ+£ˆå„mnI"Ù#ÃÔ~êÔ:Ù)‡V–vë "}Š]­ÂF´Ì=³»rŒJK¾y°£ÀLs2¤Žr�ÁÇSÔ—>øà“˜9k9¾ N8~?6&“yî¹—1é½Ù ÈÙ@?:j_ì1l|#ÅÖ§'ºwœX£$Üš5k±rÕ¬\±ãÇ¿ƒÿ{åcì†ë‰Q£ö Aý¿!œ¥ßÂá6lØ„eËVà•W&à±Ç_Í •Ξä”D~?Öì á#VÁ×€/—eSƒÎ;²xÿp]Nª1Ù?¥¤L‹"ûNd#ò‹úŽ¢°mDb ²$xôvu]Éç'éF,‡V"~ò O‚ó\�|'Ô¥=Q¦¹Ì=‡� ÀÎâyŸ`€ZW}ŽrÐ.Ê’ÉÍ cËÖ4?ˆxJ¦4vFD‰ˆú�ÂïÛg¾Æé èg§½¶s1¢37h‘…±ÄjŸB1ËìK¥<È ùœE†ÌÒyŒâ1Ôçúú|Ö»‚ÊJB'é«è„¥ÝC · T)CøÅ9‹ã‡VÌö»ÔÓuH’k‰KØ„í/ËÈ_ &—t~në)ÉÈ] ÒET& HñrímC¨»ÿ�fæôäû“qÝ´¯@Y¡á'"ºv“WS_ª-€hûÎ(êw"E¥n€nnh�ºå³Q½ðcø‰z´B^m¬´²6'¯k“€ãMž=ÇLƉ=Ô�”³£wÏÚàþa¢§ ï3Äq‡öá+ør6¶™fV‘Ì&F>s²„÷©¼+§Œaâc¤ÔïYh²—X³g˜R™vÅ-éÞÄ”à#gÉ$M—!§ÍXë‹2Á¸m$–n'‚ø…ç„/ ˜f' ö~hI@F D#d Äpè;8‚öeäócÏÚ‘Oξ>•&~Ü€åÐJÄO;ûØ@ØÕH³" `€�lvÕá°“ ;€±: –xÀWuŽr�ƒÃ.#§”ÅmÚNŽP@„€,å‘MKM¢ìcœ¸±›TÓg-J¬ÐõÒ¬aÖˆeñ¨ Ÿ¹JR@µï°�“ÚX‰NXÒß[]×Gʺ«BÒïZ8§a\·…È û6=Ùˆ2L*P¾@*GH0b÷‹GûÒÇàD#;kЬÎ,ò€’‡‡]v‡Ÿ†QöMŠêqo¶Ifû÷^Ûb!€,PÉšH¼ºÞ«O– % òºì†Â>û‹æºN¼߸[罇dõÆ–òùIFÚuZŸÛf@™§,z«VhK oãDˆ•æ dŽZ3QM$�EîKÊŽHH $’€o(Ë«)~�ÿ�½÷б,˲ÃÖ¹÷ùð.½w•UiËLWwµ›žö¤ �âP=úôC‰2€¾õ#h$’âA~�ÍðƒD÷°º»¦Ø]Õ]]íÊwuVfÙô•6ì‹xö܈…³qH{‰÷®;÷Þ}OÞób¯³ö¢¶\cþE®GQwxe\!™Iq?�ã$ÔuÃÿH²_È@!æy=ø}/×!{pléAÉ"ƒÛ�¨Œ#¥ECJRuà�q]•Êñ™-Ü}Ôß]<êЙ´ ß•Ù¨@ìã#P­qà±»æ>?0’„Â¥âÄçÇÛˆe¸ÄÏn_ð¸EcÓáœð W-†û„qßàÿü<€ø½…Î`0È ƒá!#€"dOñü€W@ÄÅ“m\†'ßæˆ¡ñYÞ6”¤v�DŠÌD•ÖbD‰¢ôHýÃÉ.Rÿ(J �b‡A ©‘Ò s#åŸ^=“,tvj¢œ,õNM½Õýê®kHœò,dQIÔÈl~¢ýÔÎ$ÏRm—6ªôqMñÆÊ­Âm‚%lød9Dn!d´æ¤á$®lN¾?w&î‡sí;å奪ëeÛôã#GžÅÐþ3€Kìe¾ôWV}~Z7>ÄfÁ �Üš:;š¦�:âˆ@;g—àšeóf™÷pš ‚”?‘Rp…ÇM}& 4 �R_*‰$Þgò)—Ë/$7]•¢®ÕØç˜éQòÜ©$�­¦âDeQ‰ÀãÉŽûF€$$%+GË|ŸYæUÎ…�¥‹öÞÜ6�€:ñ#m)~RºÌˆÔÖ4šåqV= |M‚è<e’ ¼Þ­!˜Ú‘àðãUÔ)Ÿ1Ò!£P®º`É‹È}Á%¯xßÈ^Ã=BÀ—< E]?ð +Cj0d�ÁðP–€ûS!€LhÉ1T“>yþ(‚œ€Á2ùŸ„2ðêDShI*G"†Ü1óf9&ø¹¾Ù¬BlÑ)Y)E%à”DšB)mëdT¾®üÒÕ¥·ïœuíþ .ßè~qÇ›ýSÓ “éÂ~Ô[\�<ô”'Íá(ù©ª¢|„TJ÷PɸР¤�É7î Ò@\èeš>ûzÈ}�GÄÆ@r;Y)Y¹•.6'�G›€ÒÐøjY¸êÌ{¡„ïw±ôáoÐüä ø¬�MA¥<[ßvÚU*Óã l€ˆT?ü®�rf´L>tóè$��¬ji2i'¤��'‹µwÝc`P ©+y�‘{?É{xYÚ¡á“w�� :>ÖÉý²òg ÒqÞË…¯*Q3êõt”ìì ¯)aùYh*,�øÑìño•ÐÏö¢Ë'èP¹C'ñ+ø³S¿pî�Lâ(£;™Xr8vºŠ±©RàÎuÄŸ§WÚëXе˰ÉÄO àL^êmÚ"ò@àv^î-3Ó7l¢ÏÏ)ß0‚bxÀ‹,|ƒ@F ­èO/`ŠúFµëáÄ{ÈzVv¨½­�T<#BA®™¡©3xÙCfèÊ÷xɯ¸òÇñÉ"d’ZÆDRž²¯Ê¼¡xv'K*ùñáôã….S’úœZÝVÿ ýí½ïúm�òv$¡¼&Û Dä˜ìLé/òð€€ebÑ>ñ`ˆyUðññ>ÁÛ%DÔñÕ}…Ôbß«<&Š?÷†@ìÔ.gKsI³½-?ó†£:³•* MØ‹:V®žÃÂ…_ k7±ð‰[©ÎY¨5n—×ãF@yß%ê••¤A‚æÄÄ�ªŠà„¶>^*:>Ù�“åT:Ž/û%ä¿ô"PüÁ�’¯Šç¡DÇR{&XôÐÈñJ¹/ED>;RÒ–Fh�IŽ'ASq?£ÁFâ!w-÷¢U:cª|—g¢ ©4)Hù�DÛäxý÷’¢�–uþEާò‘jy8—ÇN—0µ½Š´ä( µ Qÿd¹âgÅF+Ã= öø›¦,$îøw®X( ˆÝ¹ÏÏÃ5Ï[?4Œ2È`x ïýé* Cߊ¿d%“=Š�…š8ûÎy+VéµktÒG÷q%»À)ÁKòBVpRCMùú0Xä¸ì�^%LîxFòi³RùÑå“îÖÊaW,1Üéù]ç�÷„Jš²^ã˜B¤�4ÎÇ^KáÉÐÇ!Úù2cÉp•0/:†©c� "&¤-Q±/TpÜ˲,'•’€Š”œN z0ØÈ{hŸEâK„§¬�Ôxœh£n¡«neVÌI|‰Œ�><~%Žü€p?ȯ“/�Ï89QE}¨iQù�-ñÆhX´RO†{Dþìð7­ÜÛC‡Û¹誅Â0 J>Ÿç=ˈ£Ÿ“Ž?бð Fd00Ã:æ•Ã5åc×¥“?|f¯&€<%Ébç¸ D ´AZ pùH´òoù6%CóŸáPý åŸ\Ý]z÷î×͆PÙhåj÷«»ÞꧯœÐ{}’š %zÕT$õçH0WéC�Äœ×rÇñÿP²,ÏÀ ‰J`6ˆUCé+²Û=#€¸»õK®y;]Z™r%lÊ#Ó}ü+¨LîÁVƒÏúh~ü:–>úíªçϦ \š¯o;Ù«T·OAÁ&—€“îÀUGÃ¥°t„ŒUšñ\í!í1‘‘7�ŒT†‘¡O ×§©�ˆå5ƒ¼ ÄEʈ�>½�‹÷TÌËŠTŽ!�O:›çôÒpLéj é'Ju=Í›°ðøÁ$œ€±1‹!Ï’%¾pmL”=¨M­3òæ¶tIŽW8Õ5 6­�î�KÓiÐý~„”mÕšÃcg*Ÿ®p_\Ä�`ˆÏ�%Ø ÷Põó‡ž3ÕÏC Ÿ›ïÿÔÔ@†‚xÀ·Œ£Þðc³:ƒÁ #€ †GÔˆ «IR‘”C™Œ¨J2xM6ÙMQBHI:Vöf žÛñ‘Ü*¸–=·*$7ÍËBQ)òòˆ‚Ï¡«ƒt4»Iõ?\<–\Z|Ây¤ˆÀY¶³q¡óÝýçüx¥KÖ>t�N³�þ¥<•˜ß�£mNUtZù8!ËdiGM¬é²1J¶!J5²Pú?cN0æI8"€6ý•Ji1YîlÃ&¡¶ýF� i}[­`Ὗ£¿²°Y>?íÊÔþÙÚðÑí‰KîæŽý5´{n‰•ì/J‚+YëÀ*­/îT²¬ÙNM*ä¿ûdmR‚ÄA†=]&+r ã¤9ï™!÷<x cHWühyyi“”AÁ‰™� r¼¨U¨š ÂÊD‰Ù]éž�"qV úâ1ü¾‹ñ¡G¾‹o9NÒ×#ª0š$Aã0…ÇFä8zªŒm»kHS#o¢Ûã*!Ÿ—ÖY¶¿B ÷ˆüÙà¿4ÕÏ#ƒ[¹蚅 `{îósÅpÀ|l¡3Œ2È`xÔ Éÿœª«&€$I¡ª\t¨5O8¡)›&»‚“STZÎG®B�…*I~Eá1°b¦ø,[iW’Bú(ˆ�>oÇ.›‘\Z¬Uþêò©änû À§®Õ?:öNç;û>Ašä÷JJ¦€:F�á/ê3~ôžÉžè£á~Î&ÜDm’'‡’#Trlk}Æ6m{1ÁÄžR¬š#Ð=†ëÎUZ p�l|SšOR | Çž�KËxÑ]¼�…s/£s÷ 6ÈұɛCg&“¤Ráž*€Ø°`:/%¾òwu☗¯ªÑ}A"#^êËAÓaÄ'è,øÓg€KÖŽi.ZQÕÃT1Ž%UMªû£‘GÞºÈ!&‚bû‘ø…Ž%ûE„� Uغ«|úBÇò1å⸬¬Èý%.Êœ�H Ï„¢®® ?!v,hz)`¥.BkHÍ�ûKجŠJ5å–”NŸI׸Bˆ}~2û ÄpˆŸ4Wý|ÑT?�¤è?µò‘yŽóé‚ÿçWüG¯Û¸d0d�ÁðÈ@GÏgßû;tccç mV3›ËqZÈ @ ñq`•àÜŠ æxÍt;ÈYʼn�6s•JšAÂI.V!NVÑ:eÿXRJT1¥ßܘ,ÿúÆY·ÒŸBøZ:Û}fÛë½g·ß¡œ•�“¨Ñ".\ò €õiVɳՓv\¢ÈK[�™øä)¤©‚býƒ¾Ós¡D0“‰àþ2ƒÀ}"€$ IÒºYZjŽºÌ×° H«Cy싨ï:ŽGYg‹ï¿Šå+ïJ¿ÚhÔj·3OVËåÑî ¤s'¬Ò£`Ī…±'� ÿzó:VÈDÆ> "t¯ò•ϯbаlÚO`5“F†Sè6‚ôÑ˦2ˆôãöÄ+�ã#‡BiĈíóxͱäXP Cx<6Éô¼É×H¹X½ôZH}R‡�ÆT]±¦‡TW$;Å ÏGªµ�Œ;=]ÅÐHYÝIƒ2àFöíX´²M†{HþTü7Z4i| à_Y)É-�Àä„o­ �øk/X±ð Fd0l!ýÕM‰>ËV¿ xwÏF6±�’t £eJ:hó~€9 @™¥J�ë wçëÅÃ�@1‰ƒâ{•Û߆�ƒ§�£�l�–yÓ’˜¡ï1"M*|e®òãËûÒós§]ß×QÙDõRç�v½•í]¸Ä�ÌÀ&aÏxæëãzjÔ¤ES &AKxƃ&󔞫”oBþÉýÈ·1‘z? °õÊ~éN²Ôšv@ŠM@y|Æÿ*ÊcÛf£4/¾�¥…¬ÛƦ ”,Vgžh×ê»§qŸÀ%àè]FiÛHmHòÇ"YÚ‘÷Íú^ðq¿¼8ÁÌÐË¿ñ»ÜÓÄ„€I¾¢Œ•–uÒN)1'ÇèU]7E™•I²ª44^šá6h¢‰Ò7â%D¹œ?·)¦ó3L„qgõ}Æå°º¶EŸÈÂì3öKŒ{&²’ÕѽÐÿkª:'ý´TŽ�ª`b[I¢t qÏ+Ýç§mqî!ù3àoØiÑØ¸à_hZ(¶$çåÞ¦Q ø€[:ƒÁ #€ †-Gýíó‘LSá$�®¡L�CÝš T¤–(A¦&�ý9¸ï'"ÉÓ€ ÞpáG£$€ÄhÝ¥ê “>ΩŠ*7ÛJ+Ï_:ž\kw@‚¼C?Û=|®óÇûÎû‘ržý0NtIïº4ÅAK’… »eY÷)>`xMŠ0Ä»‚ðY¬œ =l.w$÷œ|Ý;�‰kß-­,–\×�bàÒ2†ÿ†< —¤x€±Jø,¼÷3´o}‚ÍB:2z£>õäxšÔªØD$¥2*CÈzt–çï ”€›]ŠÌ Þ$X=š­L‚¥á"L.�Gm,‘Ï‚xÐÑ RCH‚^mƒK§ )DçWcÎ÷á"¥ã¢ Ô¸âGÉ$ ·!ûÈrFûQ˜Üpb„NôêØ@ÐK‚@Üg�îPb­ù‚ý€„™\ÅvDöµ‹Œ‹3»<^Gµ–r| u& z[+ÍOÁpÈŸ1ÿ€‹Æ–Ä€ `ÞBñH£ ૞� ŽN^êíWæe0d�Á`Ð!J Ó&Jl).ûFça8%áFâ Y¦r=º)±A%„!Õ�¾/ÝW$C$1‘k$Bˆ®’”(\Ê&Nðlñ£ÏZæÒ4œäråW®M—^¿ý¤k÷ÇQ¾QºÕýüö7zONωƅ�:1Âd�Fì‘—?*ŽûDbAíÈJJx*I.R 1¹ð¯Ræ-K™8Ù–|ö�Q±{Šå[iseÜyT° Hë£=þeÔ¶ƃßë`ñƒ_¡yñ-Q·m0\štë;ζËÕ™al2ªcÓ˜8p.-:K³˜ýð dý^Ôh­¢Ã‘:@É|1-‹)ŸD ONà6V—³ÌÇJÅqÙ¯°”–Ú–Ç㱑7È ZÒ‰“Þ<y%‚Teå` 5�”¹#Rˆ ŠÙ`ÙTO$OT‰sû4Æi}n‹R— XÄ UU FÊ9i"oŸÊ¬¹ÄAc�‡K³Òǃ {±ú‡/ 1ìpìt#ãeî�…|{/ÿÖ° k]îùSðgf,[·ü- Å#àI_Ð@1¼àES£ FŒ2�;z>ûÞß¹ÀŠ›hRTŽË%N”@jˆÖè„'X(i†ç!~‚ .ÝÓ;˜  uŽI�((RZEó3‚ž€ó’¢|žøP6FöØ|›Ž¥}5p"“ãßÍ\åù‹‡Ò�N¹¾¯ ²©ÚG�oìy'Û=ÔbtY&µ³@ñ~Á÷ʇÚ‡6ûŸûT€ Ë‚2—ÉàRvÌŠÒ.¢ 4C@*²ž¯´çœëyl*“{Vý�J#S¸ïðËWÞÅâû¯"ë¬`3àœGelj“O@°¹ÊŸ™_B’––o]ÆüåsqP|ξ–öðÔ^QµG|cp[DF 4ÁQäÎå#æ ¸DšÜ{ÀKTž4R“ßwñ{‰“pºEiCq.·æ¾Tc@JÇÊ{Z‘ Ó:ŽI„̉ÏÑbINm©Š0ý;ŸL;‘0šRLâ -û…ÕRq9•Üó¹iÙáÈÉ2¦¶W‘$ºü/Nùèv)÷¶hFÚ†ûHþ¤þ;,Ÿøç¦öx¤°?÷ùÙ�b¸à‡®[è #€ F «ÈŽ9ŸýÙ�U9Ñ27ug¾�8¡�'1è;—{‹\yfÓ}P™/Eé¡VKÇ9 Ë¿Z—ƒ“û:¼çW¬Ó}<•‚ãÙË’ðZ¯—#B X.ÅÃÝnU*?¼ôDrcå¨<0Þ¡›íy·ýÝ}f�ý\ñˆeThêó‘ÜSl60õ�cKCq›DHùü;]äõCéçB=ØHú-”[ @æ°)p�½'1rô HÊ5Ütî^ÅÂ{/£»p ›�rc �mÏI÷ õ‰?x:ÀíuqãíŸQ‘Ç=OL€úÓ+Æ:‚¿êéx™ô $²ƒ§’ñ#ZáŠ×ñ•RÙ/å2åö™+¦±V@“"Lâ"Z¹]‰Ç#:ɾ?<^Ôò¨^QÈ@>éÞâÏ”ïM—¤iý‰”o? À›ˆ¥“v�ꈧL®t¥m1ù—EåïŒýGËØ}¨Š4M"DiAèeâÈçÇÛ_†ûHý g-Þðï, =Æ|À Àx×Bg0d0È`XƒìÈÁ�³?ù¯ÞÁðàœfh¬›^ëj�pBx’ˆ"hÀ™¨Ò85è4V…¡$3ØtðÅ�þ| û)ÊI^>ˆÕHº•¸)F 8»�I½ÔZ`ênúî�‘ò+ŸžM»;Q¾œ,öNN¾ÑýÚ®ë¦Ý.a•Z¤ L´|—?¢ãâþ? &6 i¹„Æö§‘TÆq¯14³£{�ÿ\ó¯ï#�š—‰Ò×!ˆ‰˜på—ž¢Ô‚~ašè 9 )=x z¿Ù÷¯½#dFâÆïþÄA¶{MY+(ä¤�K¾/ù¤cd=q…²�LàP�às„´3°Œƒ«tÁ¸÷œ'P�¿Ö餽 é<"cùú¥ ÂÈÇléÇ ÉE LÌ$8|¢†Z£$W¾ºBÊŸ8Zl†½á žð' Cà÷†‡e_Ìÿ•GÀÏüÂÊ� FYôkÅÂ`xá·M§Ùs°Ï7ê;8J(0˜?àe=Q¯õ1Ô讋áñe4†øAÌ­yv3òšðœ©+ W®w ±Ã •LA³mY1ÿ\Ä蟒Rë3‰ÐÉÎ>IB?xMP~HY›ˆñ6­Ó¡'/éXIJé‰DøòK×v•Þ¹sÖu²@6\þ´ûÜö×û''± .¯�Cˆö‘ØwJTÒñúÿS5ˆJ0¹(ù¬ÈÌ~€ü¨ Þƒ_NW²´î éfr«ŒÒðäª?Puz?6 ¾ßÃÒG¿Eóã×à³>6.ñ¨M=†ÊÈAÜ/T†Ç1uìs`tWqûÜ«Q�:‰€6Ðì…fþDŸ"†ÿáõLþèˆUcxÅøGà3À%'?˜A¿^ñLc•øúT•!Nüäß#Ç(%ßÈ3‡üë‚ßøy(ýAÆ‚êí$±ÒÊ‘ÆÇiCvåú’3: G(ò’ ]A<ž²zZø9çÖêÇNW0:YA|-ÑýäóÓ±¿T ùÓð?hX4 ,øG–-Nø€QÃï¼`ÁBg0þçÿÇ¢`0<¼¨Ãá€I]¤NÎðz};ÏŠNË+›ì TvÑÜ´´ÇÉöIQͪCP}€ôÌ‘ìÃ×ÀI—8¾p%>²¬ bú!„èdDl…J¹MÝÀž8ÓpâG;NOºð2ç1[ý¤ú—�$—O¸ å"¶ßÙ¶úû�oïy×ÏÔ;�~‘'A36ÏæÄ§\„~ñºAÞGɳ¸ ˆúŸ…¬�H)F¥�ˆø!ß.¥˜|V ‡ .ë¢Òº ôKØ,Tgbôñ/£ÔÇFbåÚy,^xýÖÒf•Ñí¨O=…ÍFZ©¡TBwyY¯ƒ&�<�êèÁì‡o¢5³2æç÷¶ôv*kÊÆ$PÁfø*âÉžL ß Š Oª`2�ØaåýÀïòbòÁóñ¡k“É -@„‹ª@‰�=ñqUW£JÈ<2fºp¥=H?àv‹—L�A¬bÂ$GL%ÆÊ0yŽ=>þÛDc&u'¯ÌFÐ A¾½°T5q8|²Œé�5¤iBGõ"Œï+>?–H5<`П°™¾¹è/, vå>?{Q ×sŸŸK:ƒÁ`�ÁðhaÎ|p „Ô q�lg«�j½‰‘‰ I‚:‘$uè)BæÃù¶ 7�Î6‘É0/#ÒN¡?ôµQ2qàPñd3“…ü"µ�|À˶<ÔTú-ßFFÞEgƒ&à8¤ÏP‡uM§�°Éµfµò•“ÉíÖa€O\»pä�Îw÷}„r¢u4�X-¢xŒï)J˜ Þ7I;2·—[Sk=yÚ$„hàzDôð"í-¡Ô^²ò&©hR4öŸÁÈáÏÁ•*ø,èÎßÀ¹—Ñ™»ŽÍ�G©^C}Û瑤5l6FvÅðŽƒ@Þ…®œGóÖ¥` GvAulY·�æ�OК¿�Bíœ]�)º"�ÙVÅËqÉ1¡Ëû)ŠUÊð “s;>$_’÷ƒûÏ~Ey(ˆ ÷ðHò{²\Ú”({UyÈÊ!V� 1®†lðñ'¿NÙÆa Œ‹¢’ï13Bý­³0*±GýŒƒ)ˆ(§$9¼'Y“¢nX±Ìã‘ ;<0)(¬”åsï>TžCu”+‰\ýF(Ô©M‹æócxÀÈŸ#þ–EÂPÿÀ†þ>€�WÀ‹Þ´qÉ`00þ—?·( �àwn?€ÒÚÜ %’¹±»|�”‰“SdÈÛì£1ÒDcT,µa¿ƒ,“DuB³–)ñÀÉ•¸«v$ĹNLŒšå(ŠMÒ6%¬ –ka5>ŽîSQð0‚^Žfÿ#‚´$/‹¹¹B’Ä¡dr¥,Oé�[ãå_ÞxÒ-÷f µTMç{g&_ï~içÍ5 1¹tö†yú+�Ä}@÷…Šx]H¤üQ*6iŸ&ޤ]¹yÎTî@©si§ ø6I¥Ž‘cÏ¡±û yt‘µ—±pá¬\=‡ÍBRö¨Ï<…RmîjãÛ1qè ·ßûºËóñp`ÏÒ¯(UÉD8+»©$?�Ÿ…“þ(`öô6RÞaÊЙiÖwŠi‹xæÈ§¨vH ¤Ž¹Ú"cdT Dq“ÏA”?¼NõÒ½„”w¦Ê†£ÏŸ×q ¸øýÑ50Ù)ë š1ÊGX£V¤JÆOc‚¢P_…„ÌWŒM%8r²†úP… eÐ5éÛÉç§g~@è{öY$ p À?µ0÷$¯ Ž À/¼  má3 ¦2¶Êpî €�`‚� ”~Sö ©†<�¤ �¯ ZWàYÊ”\ff€•@ ¨Þ»ÎpòB—nÄ}^ä3îåàŠ—üâF¡AÜqYâ¹äÈäZÌ­å4’$‰¦í*ó&K”�lã‡É'�ýòûD–¹Ê‹W÷¤çfϺžo ²Ñò•îWv½Ù?6Ö”çæ¸}­úMaõ%+ƒXÌõާ÷{9  s �„œÌè‘AåÖM$ÝtÓü�Ê£3}ü«¨LìB >ë£ùÉ›Xúè7ð½Î&)”ú¨MBeì8î%&�Em|Í›W•@J¹Ä!Ë2Òµ‰À/m*ƒHëˆ8�}UŠúz×Uù„Œ‘$Ë1uGĸ(°™sähì¥Jf´,jt‚…¾^ƒd]ˆ¼QžW¨œ�\49‚|âÔkÎ"³â¥s‰ü)--cd¢‹RÙQbƒ“5RJFfz’¢C~èÌ‹–Œ—žÕPKï°jC I<“@ºisz_'¹¸yÞÉ+ "�Tò!®Š—¹8ŠoSŒ¸‰Ìð’¬rK½Råù‹Ç’+Í'œGŠ<�e»ïu¾½÷œ¯t)`D”D“m´^5¹ÖJ?Yè ƒ@ƒfàÜ!x_ƒNöh %Ú.ËJ¢Ì£V_ÂÐx†$¡+*ã×ÖwÊŒ_-¹&ImRš8§âCËžD•?ºJ#’Ì£„W,C˜û4HÙ7iZI…g4˺é¸t-áÆÛ‹Î|—p;gaÕp”ìs|öäâb£ò¯žNfÛûQ>u+ý#£ou¾½ç"Ò€j¼­õÏÄ¡¨±ˆðQ £x¿>šU…Áó Ô@{ΈÉæÏºÛ½xDQNzH[‹ðíF– |ß^ý½¥;«>?í;—±)p@etµ‰SpI „U2gxûATG§á’V}z¯½�ÞÊcûž@cz«û/}ú1Ö ör * ­ •îñZÇ y…ù¥„šÂƒÞ!Ç ÙWÕ†½êÀcbˆ¼¯œ| +F”¸É˜ë3*ƒ©™þÇ߉LˆDˆ!¹�Õãc$N™÷p¬šR%¥_0¹Q¬öáç§�ý¯�_l‰%ýL#b”ÿÝYp eåI),¡º}oŠýGk(WRêt•?|Œ®¡%ŸŸÌþ¤0<àäÏ€¿k‘0¬`ÑÂp_Pð5Ï,GÐð¿µqÉ`0d0 €½öåßç8©¤3;¢Ú�$@ĈäŠz¨�.£1,«e¦u iD^üœ’D„Τðº¸BÃó‰´DKD=ÅMxNÊ�Ð@`CeYöš_ƒæý#Ÿ€ì70§6 ±ÙɲÇÔQIõ¤l%žQ™`b7_.ýúæTù··žr­þ$ À×Ò;ݧ¦_ï=»íŽFu†’´„ÂÊ/Õû‚c«§ŠŽäav5�ô“@[äôˆ£êVàšËðý ›�´6Œ‘£_@gþ–/¿#�sƒ‘Ök¨OŸ@ZžÞ¸6Ë5Œì>ŠúäN„�õ{¸sþ×èµÖ’@¥jÓO<çÙ·×Å­ßÿ|õsC ÝóMµ„¤”-Ý›.3¥eÅG†’þEIp®øª[ðó�Çßu%+—¹ƒ|'?xp^QI$dL:S»üJÒ•§¢*4 AbI7IËT SÆJ)ï&Ëù%ʲŒk_Éñ‰*´ž‰@V‡ËÊ=ƉAïɈû½ì$±Ð@é“x"Ž2!'¤:Ç{¨w8|¢†áÑJÄ»'J„ܧ�«~ºög„á!!€Îø Ã:ðï¼ia¸çù™grò§VPÅúÛœüY±ð †Aáð÷þ_‹‚Á°uPÉeÅÛ•D4¯@^ϲ¬¨2¤ Y—¤íU rÅ­Q~ÈÎ@q™J°d‘2$½Ä/GÀ Ž„Éi‡|v"‰9F)“ƦÍìmZÏj'’ܵ1nr=J¹¸âªeFvÀû‡ 9.ªã<–÷ž’süú}WùÑ•ýéûóg\ß×PÙDå“Îîz+;0Ò )¹JÉC�¥+®úÑ ˆ$©«$á(Ïô=�xrèü‘# GÕl ~¹x‘¶ôt2·‡ø;B'…tB�×Ç=Oè] ›‰¼�“8&„t…læÄìDRéc%<uœâÇÊ™ !$w‡€�Ï7? ¸Eý­ Â˜cÈÊSGëB¾{ܘcÅ�Ê™éõæ ö{V¥z/åà| ¼Ÿ(ž‘—Žžªbb¦Š$)ô›kÀ}8} –`3<„Ð à„E°¼ àßZîø€ÃÇy¹·›:ƒÁ°^8ü¯ÿŸEÁ`Øz…÷GŒ\âÍ«%àœˆç4í[ª41<ÖCZ¢'8U/ýR|6*'À9ÙM¤MOUŒ ØÃÊ n¨Ç²šˆÕL ¹v ÊšËW / NhQœ•œH\éß[鉪À§�A@€ô�’Õrîn+­üèòÉõåÇ� ïÐËv�kÿñÞ÷0TÎøéSÄüœû·*#™t¯(ÊŠ‹â/yaþ¨»Òý¶R×E¹³ßê=s «ãÛP; ¸„UµÏÈ®£H+5Ä*$¥à6Þùöì©‹ÑžZj„ÊûBˆcxeRòçL.芠xy/&:8ýNœ­öIáË©4ÀâVò@,{Ê>Lh=�‘Oº_" |QjœàãeÈ�öDáTH-FKŽ‹zAÉ’/eÜÐ}|ØCOÈ7Í7K7£ M@�Ø©#ºê¥*¦jƒâ… *ž$ÐÉ*é¥{Ð%r£Z¢‹±6^òÉ3±¥šÅ,‰~%ǸŠ ¾-NN…g¾+J%O X9ŸæÐí�'Ëi‡`åŸ_ßVzûÎS®��¡|£t³ûùm¯÷ÎLÍAN§÷ O^KñóPI7Ù�âN=˜—©t @KözïÕÉèý ÉKÍøÒ9ë2Ô°…Pñ H–Ûð$Õõé'PªîÚDŸŸÁqçýߢ³x›…¬Ô»º´÷Î/›nÍ ÇAÊHyÈK…²ú…ŠH©%äx½þîs�w£œAçcJA>0œ\wd®žï Î2XcЯX‹Å,yÈ"*È(âåH³,ƒS%̬üáro4^ªÝF'I|&%Í"ÐÔ°# yÒóC%ƒ÷¢“8Оܒ2«ˆ~O �&8r²Šá±J̯'ê¤oã$Û<€Žý9`xÈ  }¾g‘0|üS—,  à,€¯B1¼ àEK>ƒÁ`�Á`Ø Ô0�H8 êœÄÑ,Qú¢%&ÒR Cc-”+Iá�^< ŠÁ5‘zN$0�ÙSNÖ)÷T�$¸ ÙŸ’ôª7è<–§”äRËÉ:^¯ûþÄg$k'e¤¼ç­^fps‚*”\óKò½“¹Êó—§Ÿ,žr™¯@…ꧪt¾¹ç�lG½-�H“E^*¸AR‚Ñ:~ôº0 óòÿYÊ8q?ç€1Û+%?[:…»ýãH°EàÐG¥7¬ôq¿àR :¹Õ‘'î±ÏOY¯ƒ›¿û|¶ñññI¶Ðš^üÕ܉+[Ù',@þPÖžä=t0GHUHñè½@ïH)É%²â@ºÙ +˜ ªßœÑ É6dA¼qd9XE•Õ<óÀ¡¥«P,'}tOC8dùõs;ü•v“<)wº¥+¥r(Ä`Œ” 7žÇ,/ {!ÌB¤§þ°d½_ ÉIêëÕ}“ÔáØé &gj«ß×[Þ­¸(ˉŸeûùoxD 'ü‰EÂðð~oaØ0ìð];Q W<àš…Î`0d0îÆ�ÌR!Ëœ Ì€¶sÅéö=åʆFûHJ”+FäHÚñ½¦ÊWÄU+¬àÑg؆'ĺ` (œôZ«”Ç]Iº‘¿…ZòMŽåÓѲ;Œ|½´£'€‚FèÊEɢƋHB�È­|{";{}’»ût¥R}áòIw«uÄ.žˆF7Û7ü»öw÷^@5�&~•~¥Aí#jòzÙ£ˆŒÀŽˆ!%Ÿ©äã܇ía÷ÚòÓn9Ûƒ-„m”Û ðÜ;8 <:ŽúäSp®|}~tÌ_>‡å[—7ºÜ[·;ÒzcöÔ¥w³j¯ÎqÃAÞëpAUÈÐß9/ËG¤'ø%ƒT¿ušï£�Ô®g9®*Éß�'Q�"¡òvTZgŸÁJ"èˆ�‰÷(¡£ CH!+%át s†([£ž?zÑZç”}”Wyñß�~) B(N©CMèìRBqÏáv¨£TJ ;ëßÇåÄÏ€Eóº0L h�ÒM·IÁ%¿b•A¸�ê'’`¡kÓIŸh¦„·SL¸ ÚHl98M $‰Pݯb Ùּߖ¾O€âðнgõËN¡ À<û�½¡ÒßÝ-¿zãÉd©·àËÉBïäÄݯæÅôÝÜ·Ôq�~&ë WÊ‘xÀT\ˆB"5„ôy÷ëæw¡õŒëa [e¿ˆte¾ï°™HÔ§žDZ¿Ï>?zÒw•ü¹}�Îò§­å‰/¯˜*(Dbѵ«>yOÄVÀ£.Ç€ .‘ªŽ±ê8)»…$öL$Ås¡r»ê…GgưÕ"dEµîpìL£ã5êJ‡Š:r!²o/'~Úö³Þð¨bìÿ|õÙîÒõïX$ ëEî‡~e‘%ø¾`Åðn®ú™·è #€ ÄàŽ˜�Ra‰"@¡œ·@¹ð¶¤´‚¡Ñ6J%G9hÍïÑÌ‘§š_œˆ‹g½¹Yö³‰—÷‘K/Dþ¨êN¼¹D\p2+èIÇ·<ÄI6þÎ�…÷áðútêð5z�§y_äkˆLÒlŸøz¬ôÓêó—Ž%—–žpeDàï·Õη¿µç]?]ëz_h¾Az‘ÉG÷¨õ%}Ö»E~P/êt��ô½…Ñò«·žNš½ÝÂZ8ô*Cè—ëØJHÐE¹;´6“ǣ2±µ±ÓÜáóÃèµ–°på<Ú w°Qð½ZwÏ£ÛüüŠö@ÏO–ßjcêm?Rê¯)‘)�—ÞÊ‹$’Ì–¦HÕYŽáGT,´Ž‰â¸Ê#’gÏ•ü…S¸¾({æðY䢛ö©I}V*EÊaV¢êä‘�AòGáï™OÉä9òõ Þ'b c?NïÊáÉr­ ñß�­¬´E~¼‚é�5¤©!"ÑfÄÙGñùiÚÏxÃ£Ž©ÿëƒÏ­Ü|ÛJÀÖ�¶3hPT½ß à;ö¡>ðC-zƒá^ÃáûƒÁPSðÙa¸¤®&I'™]QˆóÖåêê#}$‰”¶J²NO#„¦:;Ȳê3£’‘LQ$Q5h¢…Z×­sd=•ËèMûKý=õ_w¾9ý±ÛËs‘zƒV*¹dUùXü=¨¿ÿtŽ x¢(¢>ÕÆËP;Ìýðà"Œy(ÕžXÀ '}Ê65FqjžT5LþäÄ� 2ûénØ Øþçwž[¼ôÒ7-†õbÅ%/ø…E"ŽºÏ†ü€§P Ë^ð†ùÏ †ûHý}‹‚Á`ˆ‚’?{àÜ~8¤4›˜T@’§Ø¶>ª«þ@¤"ÄJõ{ÍôÅqÂ*hØ/Ê Q«pÂ*?.HJ¤ðziOJüˆqw¾=dÚšm'ËŽA’ˆb°º'‚èìfÝôÚ‹ò‰T;NfgË2€üm¸y‰!�ü¹–^»5Qþí­§Ýrà«É\ïôäkÝ/&>uSwºñ@Œ‹y) ZÍ3 €KDQâŽz}Tž¿v$½Ø<ã2_ƒ éáY©‚nuÞ¥ØJ¨dóHZíÂþ@i-E}ê ÒêÌëóÓ¼uy•üÉú]lzË×Ñš=ßmÁ{gêðw½÷Äð/»O�Ý xÚ(e!ùm ¨!ᲇ˾9§–(ÕÉp.ûŇzZ:6Xö�C¤Nòn �Á2© Ás(8Î<êñ�Ð 7ÑRo²M:‚®"Ŭ!|´À}­¨òG¦º/^ñÓ0³Ã¬•chT@tQ£“)?QE}¨¢ JƒAq¥P+/÷Ö³Ÿë†­„é+ Ÿ¼ø%ø~Ù¢a许ä/Y4t4|–xÀWTG–«ª^²2¤ƒÁ@ƒáaEÀAb ! ®àvc¸´�ÆÐ ÊÕ DH"M¤-J#xM+7ÝŽç@ÒAZrjýyYæYÚ쀭{sÎC™±IÞEýáeQþ°ÚƒCò"Òg½ ¹GEõ%ŸT�ìÃd…´)ý . G®æœàõ^‹�ÙÃ˼ž ·'Ðx6;—„“gG¥Ž9¥�æ˜|Q^.ùh¡QyéÓ3É|gA •þÑÑ7;ßÜ}iâUŸpº Ío¡˜Ç”§/¡ÓD’¦9’ÌŸv·{§<ÐKJ�;¥¹ùéÄ#”‚²R ÝÒ²¤¼Åü�š(µ›H« Ô§žB’o!ŸŸ �¥OÐYø>ëë'Òd±ºíñV­¾gæ�^ÿ7Ë{î,ˆ*C™Sð†£÷ |Õ|æ|˜‹¦„~ÄχT@\î‹ÛÑóñ‘š�ŠÒQÒŸÍPÙ>OymsØøúøúÁà~Lži&»¥iE=EŽÖc‹õý¾ä,Z¿ÒH2y Ò.¯c©�þ“@ï€2^lÛ•bÿ±:*Õ’r´ª¥['ùÓ0g>?V ï³§>~aÔ¢aË.Y€s¯´†ø©øCŸ+X¶  à'~cã’Á`xáð¿ÿC‹‚Á`Ø($ö~à’àÔiç¢3|C ²=yôPo4QmhVý84ÓJøG@ên'®ú‰.sI;hy:ÁZkRÇ8q�·B:¸œ€ ¡Py8®Ó&É0©bÃêG³·#æÖ²ŽŸÜ@ÜÀ»ôê�éò›wžv­þ À×ÓÛݧ¦_ë=3}WÉFËÊz"9ÃÙ¤tDùà 8¨³î“¿œ?ãn÷OIËi¹YZlά‡BâÑO««DÐVòªVÊ;µµ|~Vn¬–{ËzËܺÉïÐ-Oî¹]=¾=qi‚óG®ÿëU5àóeRD29â= €Rî�×¢6oñò_Üæ`¥"!%¿Øó…K™åˆ•só´šÔB:kÀ ÒXÏDÐÀãmè3.ßM„�1‘ú‡§v$Ä´IJ†Y¾hßÐÉA($4Õ�JºñNŠÒš�Ï7EäYC£ Žœ¬ah¤Ê?®ÑÖ·ÓÅq’m@×~v BøZóúk7z+··[D Eч»ÑN’í~bÐ*ñ“x À¨ô©{-�ß²õ(ƒÁ` ƒÁ°•P…s‡lãEšÊFŸºíøX×Bc¤…R™Sr^Å?ìú­.ëàc¨LŽ÷ŸÅ[GWz@±p<뮸 ˆ1ø½ÅŒ½É£CÏÑs¡Üôhˆ-¢™ïB,©1 l4‰×ë£òë‡Ò�N»¾¯¡²‰ÊÇ�¯íz+Û;´2h–P/Åç¢SeWù¾‰”Ïäs« 0J~¶´<Ÿ¦íî( "I„€ni½ÒgÐýòùY¸�…+ëó“uW‰Ÿ^ë6|òÇ'Ãc7SgÇÓ´Vaþȵ³¼÷îÀjA|_à(±­«<<¿HõÔ%ƒBCíh„�¼ß“\I;AZ×ÕD¢�!¿0ÛÂ2¨B$6ø¼4.©a¥}hLÓÉýZàXG$l£Ãä�Ò?¢Ï�ï�*å³ÌÓä]Äåÿ<�ݲ/õ¶Ø$‹üž“8zªŠ‰é*\’P áíÃûôÌY‚Í`Ð  ~{áÒÒÕW÷YD E±â’KÞ¹}F­’?óroÛP Ÿø!€Ö“ ƒ)€ ÃVÆ(€£†c ŸumçIZ^Bc¸—Rr‹½eÈp[3ýgxµ.?³\v¥8O¢’Be^.[OÄé>qò†ÛbòF™y7>ç¤UTŸã)ª.” s‘™ü”Í …˜YC@1ÝæÄß½»Û®T~|åDòéÊcp ½l÷лíïî9�F©A@í#ñ�g@Â¥ÈDk!(9.`ߺG)§Nï.÷o–çæÆ’,«P‰(ÿô.YUõÓš@÷Ôç§™ûüÜÆFÁg]t. ³xqMg‡?Å-°*•;�ígÒryr æ�þ5´gv!°×NL#ÛhÐSØšA�VùÐxbã¹Ù¸GŽ*�d"Hö…Kx ËßÕ¬bÖA©µŠ§·õŒ�<Å¨Ž Ä$!Äë(@(Òä‹,ÿ"c"=õ^"¤õ;õqHcÕòžÌv®yN¼ûþ£%ìØ[GZJ)ÀZ£PöèûxˆÏ�·ŸÖƒNyï» Ÿ¼èàû%‹Š!ôV\âá\Y -IüLø€ã(†9?pÎz‘Á`0È`0;P¡Ì/å–486vVmwà�¡\[B­‘̬ùV€•Bè&ÕD‚ñ£¯0%¼ž2´]®QÊxéÄ�%P¤Úÿ:7Ç.i‹Ê¿i*,¯¨€ÔÙ~MùiG–(A©?`–ŒÖQ�”òMòé{sÃåWn<™,vw£|É-õŽ�¿ÑýÚÎ+HœÖ?t/ ¨¼&ŘRž™>ÌA<€fOK 8½DWš´ï¦s 3 �*@ˆ �,©<Òþ@Õjc£'MŸxt—.¢=a•ܺU?>u˵écKµ¡Û�xq_–w$¼™à(Ä1y¼°ÚCކ´;°Â‡}€dâ\ –KSX–1Ñ\âŒýg¸�_W¼>û³EDS‘’oQEª'¿…+Bñµ±+dôëõâ]H1Œ13Œ�õž²#Kz4_(ºW:ÉÔ¶Ž×Q­•#ŽWÖ«êé`ߟŸ¾ý”6ât›7..ßxs¿EÅC;I/öáöBm)â§à˾ E]?ð*€žõ ƒÁ`�Á`0ŒÀ~8·€+PŽ Yö™,“ªGÖ']ÔêM”«’Œ"‹²{aåGð“ *Y" +:Ž 0M¤þPü(Ñéà LVwp Âëø^˜âå,ó#iG/ç 6³u”Œâ‡ÒHº‰íŽØ'X[�ÁíJŒ´äeùåOw”Þ�}Úu²Q€o”ntŸ�y­wzržƒ×¸Q-ªúܧôœ�ÏVïQ@�b)í.µKÍ•©"¢>V½´ŽÞª?P² ‡ßç§ßº�ÖÜï�u› äO&ÿňüQUq¥ñ·c'¶%I)E\.?½_(¾†ÞðüžåWlár_ "¿t�²Ž”zIR�ƒfÓ\j'žtãgÇËáv䂉‚Hu³#IZšÝ žü,�]äAJ—’ z~/<ÿÓwÕÿpùHrié”ËP)’)óSÕ÷;ߨõv¶£Ñ f ½NQ�BdCäõAqÍW‘P1”ý�ÒÒ\5íô†AÐAâ äá�U¨Wjp[€z}~zM´ç~�ÞÊ !}r&gPÕ�¾14õäHZj4@ˆ+€î.äïË`©NÒp¢úû²¢@y¯H].]ñÁcE¼ü$_mÐèŸÕ¬ŠxÏ,�D’üäh,°íŠÊ�I 5¼›ˆ2HUq 8iC!š<€$?é5¬Žña^ý>Ø=qÌøòI˜d¯Á5}ÆãÈɦ¶Õ�¤Žj¤Þ¨ì«+ƒX”åÄOÓ~. ë&€à³þìÂ'/Ž>±èÈZIiÞÃO[‚òg€ïØ…b¸ àyW­ç †‡ÿÇÿoQ0 ÷Žh„òdÊYs‚“�6JåEÔ†úp 'iØ$ŸÕ;’xÔ„ 'CØðšŽÐëÀû�ÐG÷÷çÙÍPIŽ#Ÿ$RNâ4ÀýPÂ’f›÷F×G«Yáy~ vøx—+Z’üz<÷3]%›Cþ bÀ*  ¹Þ¬T^¼vÚÝn)ä” “í~§ý�Ýï£Vòœ%Œ…Œ9)¥/H?"pXWÅÿØLJ½[¥ù¹É$óåB$�”„˹„ÝòúIí €ª=�ê;0¶ÿăëóã{¹ÏÏÇ�¤¿”|CæŠ{ý”Ksõí§³Jef„ÂÐÞÙEø9ò0#¶‡>ƒÊCNucà÷`ØßEÞ!^!{XÄ~tÊx^¦{fþKÚ‘ TË‚”¥eÌ(ª¬ÕÔ£ i¦®cAŒgI|€XíÃ,»Î§í ¦8>pÌbïM€,Iîó¾/³ªÞÙ×tO÷=÷±;{ÌXì.@Kä $­�L‡¶|P¤B²Ì°,ÓFؤdZ–aE(V8B’i“i;¤°Å AR$‚ÄØ]ì}ïìîÜWO_¯ßYU™ÂVgÌ?ꙓս=3=³ù‹èyõêÈWUï½Ê7ùÕ÷ÿ¨¿óˆ?Õr-âàÞÃ1æµ'½Igá_¾ `%äüE"Òî•Ó½Ë/„Rpp†2>�×»@ @w§ð3n?¡k¾ à•Ð/� �ÀGgBƒa)ñVznɉᑬ¾ò"¨ÖÐ0B�]=r—Ú!¬"�vºCÜùAFˆxÐ?µIaÜ„µ˜`¿\:‡7÷Ç]¢Æµ½7`cãJåðmVí†Ýún¦YöËl`"ÿèuÜy9츿tm2ùîÕÇD/Û… èD®dîø~úÔîKVáÚÈNÇæ f§ è˜,ô¦mùû�_ÐF¬D+�YéÀ„° A¹¬!M&¡E|W @Í™½˜:øà6Ëù!ÒîY WÞ€ÎGĦ³~´ýÚÎ#«ÍöÑ9ñàÁ›¤=%:mIòw ê®~CoÐØé2hš°¿4oÚÛJê„kÖ�ØK™qñ�•�d¯Ÿí^¨«‰FüÑ/ø<Ê.€“ÒM¯A÷að>H˜IçÝ\ä -÷—ý#èvÿðò¯öL¨;#¾¯�F3ñtÀÕ¿;¨`)ä)[+i­Ñ½ð]äÕp‚×QBb($`ÄŸ»ÖDÂO à‡|@?9€oø€QøÄ�»�_þ§á,�ÛM à�±b p„p%Ñ€7Ïôæ+ÓúÀõVI� >¬ô\ó”‚ãŽ[˜7Èá ’3…v‹€*d±Ì‹û‡åÿ°pÞr9þ�7÷ù2Óž;Ó½ÎÚ–Á]a)ïžqàVªx …¾š'›ƒ­¯4’?¹¸/~sùQ‘é1T@�ÅçÓÏìú~~b²Ó*9ÅÜcm|”}˜Ëåß4´K€c Ía5u²¨7˜Þ°ÈìK·�Ewf>P½ÞÀäÄýp!¤ÄÜŸƒLêÛ/çg´ˆáÒ+ÈG«$ú°¬Ÿ*® ¨xjörkêäN)“~ª @Âñ¹×J[Ü>g mWaüJ?\¥½¼"ø&Ê�rW�æPÖOZœ@Š5eͼ¼(mãÁ}º-óàê»Êï3ø.1QœÝ ¡¨ï§Ì<‡©Jk]ñsP݈CÎR—-M;oNq;‡„ýE™Û©Ö8~²�ñÉ„¬*à¸-Ä~¡(5ÂÏ ü ¶R"TÚEçÜ·­ÂI  ¢š«XBÐÝ#þÜà/˜D5ÞðG–Ã'%(n-SnOà^vˆK R0×[IÊêí!¢¨$­�øSÂòúñÈSÎ7ðEÛñ•™d}ižåÂé ¸û‡êü°ø¶NG�RT�𹦘’e˯¦iÚ-ÚÆ>¨Jd¥­yÇ�{ðÍ­!è½,ªéÜ=ò|÷A¡W)§¦æo�žžUïld´�eCƒg^ÑsíZ…-`%à¶„D-$�å–LóÖ³�Š?-Äz>PÔ¾« úÄ ¦�=¶­r~tÞ/r~ÒÞy˜7ëH@m0ç§Ù¼Úš}´ÇãcØ"VŽ_øÿ{ó‹«vá†gŸ™yžëžÅðAN ‡k‡+ñ\8܃f=§¥ÆS2Í!(ñëŽpµM}‡%ÏŒÄbÐs~ù$¨OÂQjÕ•oÄÛq:x8ü Ûr:Fž‰'@Xº)Ö…"ØJÓQgQ* GÇe;¬7K¸D4í‹Ý�ÊÚ£>£è¯ŸH0»§9…;7Ô¶ušcr~B�v p3 "í^FïÊËA `ÅÈÉÐËn$$è.~vø Q�˾ àƒð) A �[ÇL!iÝ ¼Ëà´+§Dð²qÜ)ÄZâdõ¦‚�\r |À�Cm¸‚­+ÕK#wŸo­–F�ÖÐlž™ ﮄßýãÛÎ6øÅCmy \øb&t™#SZ›°nKPlwoÃ’€NûMhjÎS‚‡ÝµÍ„ {¨»�g:�ÚŸ\|X.�Ž :ƒüÐØK£ŸœR:¡é0¹øCï‘u�™VÝbG¹ŒÓ…xyyFjÄ- ªÈš„’õ»BjNïÁÔ¡“Û"ç:Ǩó.F«ï�¹€þ6&þÄÑjcî�Q½±g'¶r-®‚\-7¨'±”«û޲’, H³õsC. ¿T5²†çå±~Å™!ä~# l½=ìy®-ªü™`M1‘«,œ°ç@„}GÚHjqEñFûÞK϶kFü #Ñ�ÀM€ˆ´w½Ë/ècÌHÆP2†ÖÖ‘Ð:‡‘ù/Ž"èÎ~Z>àüô|À÷C¿‚·`€ƒ€ˆ˜ ã€ÜcNü©#G­ÑA­a6´å¿¸K¶P£L(p¸�xmHÛ1Š«¼�¶”³1�¥àk.ù+²yœ-î\ß�Ï<Ý‘ÑÁøÝçͤi;ÚW¶S.û GÜŸÂÐNð刟[˜Nž_xL ò�¨€®ËÅìáéçÓOÍ]…Í‚´ØíúÚV> à™LÚr´D?R½NÜéÎ 8!�Wj&iäQi<-â;Zª�Maæž'n{ÎOÖ;�áÊëPYß8~èkUˆ?Õr~†µ™ƒK�ñ{vI!ˆ­€HØdNR[™�ei‡^âºvx„ ¶ºç:¢™@ÌvÈëþ`ùFtüfV©]¶l[XEr™G›XíRnQÈ´µIᇞ{`})X¿h1Ÿòë½m=‚>ZÊä/iOÝ>ƒ/kPk÷�|]÷çÈ.ŽOE8r_­±ºÏå³%Ë)ç' ?o�[)Y½K/Bë<œ°�£(A.¤1ºªR¡­ò;×DÂOàq? ? À÷|3”! A �íA Àa»©œÀ…Ö 6öçBˆ!ê­âðE>´œÊŸ|�K« DT±—Ðà<í“uœ�…[(Ôº˜Ï³�¬bŒr‡“ûaa×Ö»¸Ý Ï©à‹@ÇÁô¾=«îF °�]Z�‹?nÏ Kï°Ï€?û"W¨}õÂÁèÝÕGD®[¨€šLN§ŸÛýB~d¼g7#•¼R7¹X¶G±”9€n&±^Žû«ˆ£©ên !(‹Û…ˆm*519qnÄ܃O!ª5nKÎ�JW0ø0çgx €Ü¬ë§X%šØq¹=ýÈ)kul-¼œ€Øw’„cûÅ�mྱ­µ·&›%Æ™DóØûëÀê¡Gï�`ÓyøÚÝ0Ôú�úÍD,¸ÜµÆ´i{ôº}˜ìíïÓ´#BçFûb3î0.¶IiÏÙóßhÁ7Ј�cÖ15Ý„�ìÄxÑ^‡r~úáçl pû �Ñ»ôý }ÌÄ%#H(�ZA ­µqI Ð�'þ3åÞfP�S¦ÜÛBøt� �ÀöcÇ 0aÆcì:�‡XÙ8^öÍ/ ɨ‹zs¹Jïø»h}½ùÀkmë$­Äïºv‘hzøIáÓÕ]? 6ß›ÿc+çpþ8²¬YžîÖÊ|&À\TÐæœZJ2ñ“¬m—Âhî/�Gí¸Ëj}]H+£¸ö•s÷É‹ýûÁƒÈÕîæë£/ì}]OÔrf³ß ïôNÑ©   å‡ÄB~·‚8¿’tVÆe–7}BP�Ôæ•9¢�ò¨…íF£ÑÂÄø ܈¤5�éã�AFÉ­ËùQÃÂñ“®�Å:róåÞõ…Ö죵$™œÀ͇2€Hø!É“}kÁÈiãÔíüâ“H/*¹=üeáàº8»�“tP<À†®Ã”‡fÜ+–×å>ˆ¤fž0ÓlS� Ñ#¦;ûgÿêϲ÷u¼½}.ÇrmÏ¢Y~A‹‹zvÁÞÒ§²çìótðž»÷5!£È!ÖøK¿U_OX5:ü„ n·Ddƒ¥uHeáÄÝÕ¤I9E}–»W­Šiê*Èt‡?3¾à8ªq ÀW¼>�@àãˆÀßýgá,�;‰9h}uÀ )WÚéò)ž²e®Ûºi¹FœtPkæf¾u�¥’„æ»�C²óÜùÃ󿻢t'·†YÎï|¶ ²mB*=̱СøËñÚ:~¿«Ü;ÚÈ”æqÞ�ïJB§™^1Ë™¿`uÑyó´EDï®´’?»ü¨\M :½üèø £§÷ž†”üðؾÙf³ªqÆ&ÿ`õarÝ|´@Éѵhye§¢JŽ ©П’1Òx JÖî ˆD É÷�æM¤kËX»üÁçü(ŒÖÞÃhõ-3(Ä„mþªˆ?‘\«Ï�è7šûgq‹ ÐÒ*s¸Ø®-Â]>R—.ö´5û¢’XìîlhÇ5†êµG±uÖðvˆöþHØ÷� ®rb¬o¤—&|B,NJ¯ëÇÕ'UÓ xî�™Ç]Af^é-f†1ž EB�§ï†Áýñ±‰3|YµTf÷H8ÖB­‘xß¿…Šðçü‹A pë Çü*’WÐýPÊGáäÝ…h!�Å ä0ϵ*ýt1¥à¸ì<{? ? à ~†¦ÔÛ÷B¿‚wÀh쇀�7áƒØ{8BØD‚ Ic IMóåþ, .´€ž{àë¸sì9ç¼-:vÚ>íÛ¦i¯È“auþpáÆ“ĦiÏ•!Äu rû°,%>ø�ê„5æ�—}³|O6'ùöåÙøåÅÇÄPí@t#ºš>6ó\öØÎ%ÛŽ‚ pš¹¨PÞ7ùûËTîV"Ñ�òn/^ëÍ‚¨,Q>Ð$´ˆ¶�ÔÆÄø½¨J”45ZH»+Ð*ÇV’ .c¸ô TÖýhåÞÒdz~¡9qß.)"‰[Ìʱ@ûI•¯,•ˆäN>Î3]ÈÙÁÅ þX)Í•ñ[Þ‹GfbºãÂéRšÍ&ܽ½R¼Œ¨­ähÉä/Cçohzóeáè¥h¾o}ºæñ} e;�ŠÄŸbÚmkëS…§¼ŸïcG´ÇŽÜßÄØD½’£Ç‡�€EaD9¸õÐýþ ªSˆ?ý…בv/‡x¡dTˆ?Jk긵‚¹ßáú´2åß “ ô¯¼¾�…à> …j|À×tÃ'#è—ƒîXê8 `–çáÐsÇ;ܸ]Db€z«•óÈõÂïf®tS¸kE®žØónhœ¡ü–ýÃgþA3:f¿øcŒsˆcæà¨M&ø°í™èÃ6`ºœåxìª�c°n�ŒµaÆJó,’G€�jYûò¹#Ñk ¥ë¨€ÚQ;5úÑ=/©}í í9($Ú]J�ÿ† ÛB¬ãÞJ Ó‰êù@$@�!‹ÇˆÛ(�abüÜNTÖ)„Ÿlp$øHÒÙ5%ª”{Óblâr{æ‘©(j6pë!ÐþåŽ� ?hCB¯}¼z9Ìj!.,»�¾ËÖë˜ÿ‚ìøŽ“ƒˆ;›ÌRÛö¢,š°ù¦zx?Ķí-æ1ד£ì›¿ü5Iëðeî¾Mi¦ÃÙu4­¨]îcTuˆ±sÊ]a¼ßÕΟqü¡ðSÃô,åüT°E9—ù×Ï,…¶@à¶ @ü6Á¨sƒko„’pw<Y\G.#úºÉ•Š?(àúsEÏÉ%ô/œÙ¦âÏ!“ó³ Õ8mr~.…ÏE (Ü=LBà Ƙøc¦¹ÀÆaŽy´M¯¡ÖLMðˆëÎbî¯b¾eE‡ó† Êc`F2³@iµauÇ8ÆBÝ™ ²\Â-4Çq£n–ò;<߀—h¢ö,¡ç$*«—�•¿Ù žÇd[nUàÌ»à�„_ˆ ý¤þGW÷ @V)§¦æ[¯ rþM4c]úÀ”]ì£A. ùoVn¯dÞ-gWâ•å)éÀè” ©Á… -dáÊ£&n�æ&Æn�¤UŠÑê­}hm+÷æ~ˆZ²Øš{X&µ™)ÜN(h€°åÄ‘¿Í}ÍòWs‹AU­|\ôqº=>àïÜ–ýC×R¯÷C[í¤l]ÏÞÑBÚqÍãóxäÏ£óë\ïÓàësÇïGµé»XÕ@r±}´á/áÆ¶µˆc¶éýÇbìÞ7†8‘Ô†ý¢+!ç'¸½ÌýãKsQ}üç±IT6@ÿê«Èú×ÂɼQ2Fס¨+ÜâBJЏ‰@Jef™ºÞ�­ÿ9€+ØF4µšð4€ûQ�àõð©ðpÿ<œ…@ p·°Àa‘<ˆçb3Ü‚�c]¡Å$õBžåãèråyòv@!åZÙ€ø€–¤àghðpk0W�7÷‡gþx˽þöè±t¾\Ù?fÁ ±CÒÔŽíýfÚ#àØÜL`í±ml™f;6Ÿ :±¤¸šµ£×—'’g®<*ײyT@'¢“Ý;õýô‡w�G$AaðôAr¹ËHÚŒ¤,Å+�YH¯#HjsŒ ë¨"(M¦ Dò1€4Òµ0\yZ¥äø±”{SJà†HÑ«Í_k¶Ïa›°rüâ2€WÝñ>´Ä!€³iZìù}”ç¾h–�foƒ =¶³ˆ?Ú!¦Ób!ËûIM•‡‰!$¢; “$P±ùðføx íý%JÝÑH4�Ão�àXúŸ’#ˆ‰�î}ç®X�Yàø|Ìì’8xOõFR]¼)Þõìt�ë'X�m@û¿ù½¹ñýOý¼ˆ|F+§1X|Z‡¨”;�<®!“ è¿<Êt5âzÉ` E]¿�ÅsÓUïµ€@CeÛF@à³> ‚ŸÀ·|;ôK�@ `Gàï(ÜUDÐú öAP©3ØÅß4¯ä[žù@q>èo)ÍB3Ì  s¸ëüˆæÓq•éhË@¦Ö–p¾A1:.oŽ‘[2ó„'{À™eNØÇHøq�æ’èEŽ!çn˜Æé¹Cô–ù³ˆfL`qA úBéó�|óÒÞøõåOˆTM ª_ÊžØù\vrÇ ËúÐ¥Ï9L ¸ü$¶‘îÄ£µQÔÌ€ðAå| ,j!+ò�ä-€Æ11v·Š|xƒ¥W Ò~¼9?œ<Þ1wµ9yr§”qŒ›H\o¡61•¥®\¥ì#¿ÄcÀè;cD�­Å/:@8œD¤œxc{F€åü¹êÂpˆB´•~aýˆ½ü™.ͦõlÚ‡6ÒöÒ’þ›$Ü‘žAûÌM®Zþ>IÁn–@)WŠÚäûä‡ …üøí7^pgm½{°…ñ©†G¼Ù˜ÃÇÝ)�LÎÏ üÜ ¶­_øíí¹‡~&Ûƒ�ŠJ»è_} Ù`)œØmŒ.²~êÐ2!¡Çäú˜p$ie„! ­2úmoÖ‹´B]«ÿÀû·_ûÁI?`ÕxÀX ŸŠ@ ¸¡ô¿‡³îFš€> !f a°wù»æÓö\4²�Z£!KÛûÊÛW�ß)OÒ³%¿ß>0§Á @þp34péI<ÂÛ)Mh®¦csÛ†è�ÚgåŠØø´ ôÀW|¢†Ùùcî ð^ ©m&ö3Yÿòùãò\÷!¡�T)§¦gêo�~|ÏËjWsÄò�ø/9€¶!"ÊãÕ•1©T­R>�,‹@Z ÈÊ¢ñ[ M`bìn6*ëa¸ò*²Þ}x¹7]Íõ#Í¥ÖÜ'êQ<ÖÂM¦9½“€0‚\6èbñ�ç‘§�tm•g·p_ .Ì„Sw\¹ î¯ãXAì‘ogæ{ÚbÎæ´¢"À��®1¶Î�œ5®•[•":i èæè#ý¹h¹i«Å×KYSíè;5HDÔç&µãúløt}î(uõ¡Åß‘ûëØ¹»ÅÎ…ý3Åñ/çë)ãøé„Ÿ—�À¶€NÖÆçÿ½æìƒØ"ŠrpÃ¥SAÚfè¢Ü[£€˜rnQ!ñ>£˜'Ê1‡ŠÝO¨QS9b­Ûˆ)·‹y“ó³Õ¸`r~ΆOE (v8� ¸@ø8¶£yˆ¢’FfL¹?Š¥×ñ”ýâN"'”úi4ÏrµGìñæþø\@ü<ºJÉYEQ:uLøaƒœw ;.· T ËljÇåöáÏù`¬-÷bã ÷ùßoy±_¯}íâCbqx\À�–ª}í—‡?5ÿ.©a“Š´üƒÕ‡IÚŽhÄé¢áÐUÝ@ A ZÄH“Iä²�›E£5�‰ö1Ü,´Î0Z}£Î)@+gÎà~„hÌÜƒÚø!Ü dRÃÜŸƒ�¢¿t Ëï¿ìwL×áß+~±ç°ÙL’fÁÿ•§ÂJTÏÈ-Âúž Ä´/ëå�÷1¼Dœß4iÛGÂ#„o4 �ÚðàËâ} /•Jùy6á_Y>Gþç.ä9¨ó‡bì9ØFR‹|ºÙ“Âæ¯X ÂOÊ@`Û @Ÿ’Qý ㆠݵÂO ãÜa%ßL÷JóK—sÊûÑì�¦Ê!Ö³sžÁ­gÀ�xÕXð5/…ü¹@ ¨ŽÀ @ p×# ±À!Äf–ßDRÖqj‡U È%D‰‚”Š›AÚ;‹áòkÐùð£åü�Úøn4w>dÚ¸54wìÆÔá‡ÀÑ*Ç¥¿@{ n.$¼x^V™Ié!hGû¾°Fˆ1“|]*[)P9‡ Ë^øñ¹6×<ÇÆ#"°¾ÃÛÑB›³ÔSjÏ]R“oS §ó§Ü_j°\§RY­}{/=Â�å’î+šœŽpøD�V�f?ÕÅ¢ž)÷–†Ÿ‘�Àöfì¿ôC*ë?ÝÚý(’Ö!è.~TÒ„’1HØ¡.ÐBÅ2±þÌVNµ˜O}V@@*…ºÎ¡Ö˨ý9nˆ| ÀSøÉ�@õgFá“Á.bqÀ^_¾~Š?)ù(;¼awQcˆ¤ÞCsÇ ‚À�Ý6„fAÝŠ»~Hü¡.×€í°û@¥?È겕�³ær¸£-œ3¹ÂB“ „`%¢Ø„­�YÁí²ëv¶¶ üsQÍDÛ˜ãc§�Ü(P ?pí�ÞYý„ÈtPcñÙô‡f¿Ÿß;¹Fï�É"hÛ#ÕѰ™ixó�¤¶A@·�ÅÐ�¥õ?ÿéYÜ´�^¯‡n·‹wO÷ðÒ;i&*@S˜hÁV’�–0\z¥xüˆ9?ˆ-4ç> 7q«ií܇É÷[?þ—^ü´V°±rì‡Ð » à† dDÙÍÁEyp‚»Š<Ž j޽�íüNV¾‘÷5³ó°uÙ5�õ#Þ€ ^ÓoÆò÷E~!ˆi*$’ÄûM³Ü�'Å~/°ð”äš>;–•Ô€ã'›ŸjA—Úæuª/O\Ð?�;ƒ©_yîÉÑꙟˆSÛû$ Aºã…Ÿ6””¦KR¬8U5 ßEº\ýšº6ÊÒ9•‚Ó ¥ ¡‘B|Àwq H Oø€)TãM¬;”‡.6ïúÕp�ÀÇ�6€c¦Ø¨ŽM¢y ç:š‰ ‘ì"n íN"zN¶;œù>²»Ì™)Æž¤5ÝÍLwˆ[Pr‡-3ÓÂâªò·E;è:6˜µ(—ÚRÖ®¤Q†�v*¡,IÁ\0öÏ€»t $û306$Q+B8—ƒ„-ÑÍâÚ—Î��û�4 Ôlã�ÑÓ»_Õ3Í �¿OÐ�D”w ˆ 09a4RèöTeG�¢�²¨ !€ÿè/ǽGÆ10èÐë !h­»†—ÞâÔ¹ZÃI£=…‰Öl:`¸òÒî9{,åÞª?2hÎ=‚¸1‡ÛEÒÇÎû>mq6­báÍïÀ]î‚qÙõcæ€d‚�½Þ¤Mì!ÑÁ%®�{вÌ+Üiè~d°ö43;)ê7„¥<¦MrÊfU0')i\Î ³ï{ý}�ß9åv=‘ðCÓ´=Ð OÀŸ¹Éù AÚ�À�ÇÎtúÉÞ¥çÚ{Ÿ@ÜØ�›M>ZCºvéÚE¨lÞ„­@Hè¸Õ¡dDóµÊΞ’èCy?¤üÐ3rHPÓÜl¢!5PW)` äM€ZÍ™œŸÃ¨ÆU“óó^øp�@p�ÀfÙ !ŽBˆ´¶‹?îö)à7þ K$4dÜA\Ë „%<Ú0SžfSÌýC¯[ðäƒSnÑÆ/þ°GEæ¹G$q%­›ý”òFm8Û£Vyî­B•‘4gœ¥s¯ËKÁy0mQôºœ!!¤„öçCP+>—;fD~ÐiÖ¾yé¹’Ft$ù¡ö £¿°ç=ùåµ;R’Rà©Ç'ñ؉:ÖV{èuû¸|¥ƒçžï¢ÛÓö| @–ËÂ)ág~æ‡ñà‰9d™Âp8Äp”®?úèõûèöºX^îá{¯f¸²$ÐL´ã#¡F�w‹¬­Èõƒ ?B*ÔwF}òn6IkIs¬tÒ~6¦>ˆæÌÞÒ÷ñÝç1ì,z2€®­Z…‚gºp•ØožÐ̤áÌ ³”‡SŽš»Nøqg‘éòáñÌÁöÕVSƒ1´¾0ëk�¶`&��•E/öí}(SÀXŸ@‹m}¸ÃféÃL»»öE˜?ÜFR‹«ø¶h›_]êX 9?�À�Éî²ü™Õ¾þã7w¢½ç1ÜB 7PÚ¹€´{Z…ª‘í·uT/„%cv«„¢n ¬ÛP*5Q€Òl¢ dTÌ�¥í´V%a¨®"Ó^Oȯøn-­Z~Àcüôü €çC¿Á[�°ÀÜ%½l,\Ë Gá‰(ˆH»ÿ¹Z@"€u ¯\ÂÆ $lÿ«áÏ­àBŸø:¤Ì°¶˜cÖ³ ]Q¶¡i}~绤U4�§ÐìE�´Ž»œŸÿ¼ÁÞ†öƒ¶¶Ø^Û3“øYCüìÂÎäÅÅOŠA>ƒ 躼–NM.ë^|w÷já~v?&Æâu¡ “âíwÑ[í£ÛïáÔ©U¼úÚY»d\A€ÂÓŸ?�ü?ÿ4^~í®.Ž0JÒ4Ã(a8a0GP½nç/÷ðìë@o ˜4�‰Ö!l–¬ÃåW¡²•zÛLÎ’±hÍ>ˆ7�Ƀ÷£53º—?Àêù·­"íÙ¨OÎBe#ô®žÁhm�ˆÊ|Ù�?Å#¿ØÃíþárµm`Ÿ¦«ùø5Ñ&D»è2Æi&K‚º`êDÉá¦S€¦ÁÏ=;ðŠfîrp츪]K}åG+çÿ '�S´=šIAmsG�`B¡ þþŽMJ¹¯‰ÖXƒ½0Ã!êUKÄ \ y �À�Ížÿ­ûÔ Ok•6 5÷’±=¸åh…´wõCWPñÆîíè¸n„Ÿš)ͦL×�›~Jñÿ똜*ý&Pv‘©™w‰Å2ÓbhÔTÓ ú2zÀŸb i©\xÀ�hT ë{À7BÒ@ P Ü jâ€]¬¬›­ÜŽÃ)$àtg@ðçĵdD�øÇÀ›f�Ö´Ÿ4Ï*U�x;~'‘ý<Ñ2ßð›ñyV;9€‹€fQG´2ï?‡îá^çþq}Ž?çÛ{òã9LÀNw˜† ×�ø4�+Ô¾ráPôþÚ£"×MT OÈëmh!±�)Ÿÿâ?9€88¼¯†ZRÞßs—z8{fƒîkÝ.^xigÎfÐÚ.MÏ4ñõ¯ü—€a4ÊñüKçÑí+ŒÒišb0n Ñpˆ^o]êv×ðÖû}¼z*B®` L´b£¨tƒåW�.ühóW1ç'ªGhíz2Ç­ 9½S‡gñÝïc¸º€Šø@pf«°L‹°»Ù,4îÒJ{¥p µÖë)@ë¸Å]—"cÓ»˜¨îÐlHL£¶ùyÓ®ÚpÚ&Fð,5ž‡Fó•bYx4��B»Ï§©í’Xè0�±³n͈ҖNÂ<µvq"päþ:¦fZ¢úAøp¯—ÇO7üü î¨{ñù²þˆ¨†ñ}Ÿ)oZeH»—�õ‘–B™8AG P”x«2´¢lSŠ• 9Zåånƒ >¼$œ)È@™?E»¥2HÔóëäW†R¾FЖˆ?GM¹·�¨Æ{¦ÜÛÕð�� �ÀÍfBƒÖ<³ÇíwáÐ<6ªfÜ'$BH¹†¸6„�l€Ë1B¨aɲ¸�h¿ÙÝÎेø>zÆ=9@„û¼Ñö0èŠ72óçä ¢CÐ6¿¹ŸÊý�.³€Ê9@<Ä}œ„c�”¦+æ^¸•Gjß‘a×Ǭ´bi”Ôþèüýòòà~HøY­…¼Ö¤¶·÷ÇO?½;wDØ¿§�¥Õ—®pü`üì¾ùî2®]í ßïcñZÏ>ßÁÒ²/!÷;¿õs8|hœ…kkxí­kŒ 7Pñ7 1Œ0 ÐöÑíö°ÖYÃs¯�pæR´aH«†+o"]ûÀ‘óƒêåÞ¢­Ù“ˆ[ûq+Ùqä4¦æÀé-œÅÊ™7P¿h~qüº pmG{2ÆËb§Ë`‹iTÆ.èx„q‘9l[Á@ä|,.Ûçòæš©äІ 'týãï�ÛåD"�¥ü¨ß DûÈ^’\aõ)Ô�2!ˆ‹yš‰�vµÍ{ãÀÁ{ÌÍ·EÒëØ©ï«xÎÏ2€:üä î(,é^øÞA’ö.´v=‚í‚JûÈ…ôácñü®FÆ@T+œ>"ªC‚�¦Ú£ZQ—ÃnT3˯»~@ëQ¤+•rc?”é&#³ 1)+D¡$O‘; �VÀ{LÚ¬ð3 à îA5ü€·Â79n¿ò„³g€#кf‚î&1³lËá’dÔA”äàê Ü¡þ ×å¯Cn >ÐEÏi>Jí{�A´¾u0Îod²\ºï¶.ž’ Suh¿¤(+í‡f¥š¬Š ÉäÇëË5âƒo”‹d° VzKÀùçóÜv?tW¿0ÓFxk¥�|ûê'd'Ý� h!«·¡â:¶ �Ü¿åß9Œt4BšŽ�åÏ×05‘àÌ…>„PØ3[@ †9Þx·ƒÎÒ*z½.Î�ëàû/ö1jÀ/ü�§ð×öI܈wN]Ź‹] S…4Ë0¦BÐýÁýÞzɹ«×ÖðÒ©Ih}~4Fkïc´ò´ÊœÂà/÷&“�™#HZ‡±•Dµ&¢Z£(Õ– ºp1sÏã¨�íg°tKï¿´5о¥U‡ØS. m•�Õ¿Êî‚æ{�)ZƒasVúƒþùún¥Ãì7ˆƒH‡™Gv¼|k,:‘ew-%ØÄžªXÅ|9wÉòë „ž¶ËMÒqx*×e|fW„Ç[¨Õkn·©_àñæûk¦Ü[~âwŸ¤µþôêû_­ZÂМ}µñylGT60bÐRáRiw4QDu ®¯?Êd=IH*çF}l!ìA‡JÀçDÙÕCÆTͪPkZ¯èÂLö��DÑ–†6íç�ˆtŽ$O© @õ…AO 8¯ðSð€O�ð3ðMß ýR (n'ÀAûŠi!à„D6üBƒa‹d e)¢¸ƒ(w}pgw}”^” < ZN™Ì Tm®2t8î\gìŽûî}³e9ˆ�Ú´•�£v)Êâß?Ç�ý4›^c“T- 窡g¹‹ŸeDñ¶a°”‚ÓàƒãH¾ueWüÚò'ÅHM¡*J�5Æ eŒÛɉcÓøÛ?ó0†iŠ,Ë h”ŽŠG)rœ8ÒBK¼õÞvÏÆkEe7ÏÒï}°‚ÞêZ‘áóÚ›«ˆãiüËÿç?­üQþÅsXîd¦,å ‹²p}ôz= G®,4ñúé9¤YìU¾‚áòkPé~*÷æ~„¨íØ�ÆÄ[šóÓ˜œÅØî#HÚ“€!íuÐ9ÿ6†�kàLì»í¹ƒàtËï£þ ~�-Ð¥‡?åP„v+Ùîk¦”¬$œ[hÂ"bØœ2þë4]'h#ºæQÓLèbŽ$!xC‹ý§Âíø1mÛ·±åÆ9Ý?ìYt kž¡ÔwjÐzŠöB°²qô†°çvšm‰£4Ñol®Ä­Wq�€Ãð³.¸{ ?Ú_xýÜhõì>À $Ú»?�¸9ƒm�>TÚ+„ â1ë!/ž÷ ó¶2d! ŠCË�1H´ÉÍý’¹s 낌Êi}ËÍsZN Gwª�±“JÅAk~?ÃuñGj…;—)ĹTÊ}þ„ @U…à? �j¼àëÖ·7‚Û…€#b– 4þÂKy @ðÁ5G3Ž�}Dq2rÜýlèçíq1ˆ]ý=¢�Çñãsÿøs„l®gÙ#GY8B±¼³OÖ¦` Qg– ®Ì >¸Ë�›oÃÎk%Í= ;üШ-¶� Š©õ/Ÿ;&Ït õíž$ð�~鳨»k ½~Zˆ,iš#­‹0Y:Âh4B»?ØB¯Ÿáƒs==Ð@‰r!ò³=\¾¸‚Q¿�C‡'ð©'¾ýó¨J·7Ä /_Bo¨É ”®;‚úý†ƒ!²¼ôŸ.î§¼Oã!#�£÷×±c¶U´Ëq…ó™�Ý„@”¸Ø���¤²Á…Ιoî!c´÷>�¨6Ž;‡²‰B…°¡U^5ÅJÉi2+�z>§/¢ �r¯ÖŠ êâÏ? `7ªqÀ—\ ßÚ@ ¸µüÿg8 �@ P�IÇ¡uÛZ®pÜ�Á— »“Hˆ¢Ú&ëÇ*0iÜ(·‚—�c¢ˆy¬\ò�ð”<"Aƒ•Íã¥Ü,h‹é…í/Y¼¢M[’ß½ ný)«¥»¼-m3M†Ðà¡�mðöh�_˜ƒ-Ó£R!M æ¯"·Äå~Rÿã 'ÅµÑ ˆjù@m“të˜ßÝÆõs£^�Ñh$h6ô)†ƒ£Q†4Ë h8J‹Ç=s1vï¬ãòÂýÁûv7Ji\½ÖÁp�J£Ùªá©§žÀØØªrþÂ2Þ~o¹( —eyñڣѨ„”®bP·ÛE§ÓÇËïŒãÂÙ ­}hý‘„YOÐÜyâúl…p3¾÷Z3û¼Í<àÊ+j+÷a…ˆ”öVѹð.T:±5 ú,s'=±ˆ">Ý— Ž/oU´vס£ë(¸K†»(]§}‰ú *WÀ¯× ,^*Ï6ìS8¡+Y)Øõµ’³ÉÛïTBÃíüáç�÷—|-ûÅ­Zó‡kØ} ]Ø«¡AøBò8Úäü,…œŸ@àã%Ы§¿ÙÓù ]î¿hï}²x¼K¡’j*/þ”A@#Ï¥’k0Nh-ôuçL±LPÅ#¿?¡XÇô™FØ!Qƴͺ êf4½¾¥ý%7PÆE›b¾Ùމ;żrÆ´)p ¡T^ú9!L»µlÁºt2nZ0�Oø™ð4€P�U_ðjø¶�@€�@àNa´> !Û@Á�B²±9p¨)W!ãœÚѼ˜-w�gVè rÑs®<èîuŽ;ß‚Úqˆ7<ˆ–0!‰ŽÏ:HȵË+²séhó 8„%¼ÝVÎñçþÐÞY÷Ôv#>½åßH ãÓÑ«ËÉ3 Ÿ•ƒlGõ| 1¨¸†[Á_üü^r±…5]~ä"­Wjƒõ7¥²kn£�æ.F›*f¿-š”ó /WÕtãœû�sÿå¾Ò¬c;Aüºïzs°cg„ƒ÷´QoÖ¼¢_îGƒà9?Yø©|, ¨´w¾söÏæÁ�qí=Ÿ„LZ¸[Q*ÈurÓ!Eëb¾LŠiÊâQ\P*þ‘BÅöŠõåÊ<ÕÔõ*UÚ!# lj<%�Lj;E[¢äü‘´y-a…$ÌëÓ~åjj¡58}�‡óÅ6Fò? €Ï˜¿~2nþÒðM � �À�F à ´ž7ƒv–ü°'ö;̹ÈÁQ¼i ”g£Ë'`ä'|FšMÝ}Íõ ‹XB�rR;| Žrhåç$nÑ£i¦mûÿÚZŽ ~Ò ©ê²‹gÖÌ :n×ÉãóxY@Í_š?r¬ï•ë4”ž'xñhü~ç“B©Pq­‚´Œnjù·_øÙC¨%5Ôë5Äq‚¤VG½FBPš)ôû)Ò,/D t”^ÏJbUä)¥qmi “ãuð›õ;k,-÷¥ ¥À}÷Ž÷#£—‡,Sxî…sXë+d™†Fƒþ¾ñõoàø¡.ââ%…gžÍ°¸¨+ ?@29�掇!DmKs~Æ÷Ý‹¸ÞÂFY~ÿeô—.áf¢¡³llðÂâɳ¯ªFšs ».x¼qåË =\H¢G�èã­¢0ñiž=æV94=µ¸mÌÀí:5㶘ò}@Ú´RIM¶OÂ-vÙûkÃçñSâ®0ªm§Ò�cZ�„™_kGha|²A+Þ÷Ï…ûâ<4ÂO?ü< >Æ�¡íÍs£•ÓûÀQ íÝ�!ªOà:Jçfš<ªxdÙ9F4R$œ�DóX¿¡i¾&ñ…„ßÖ,ç9>§Ì|îü¡e””“àcÖãý›ÈS$y  N*ä¹TÈ}´ @ñçAãú™@5^ðÇVÂ74‚w:Mq ZOÓà¹Ë $�Ù?TV€o˽"ÈäQ U)χÄrþÐ<§€DøÝ+Õ?)hÜ›»Ã}·zsц 1ˆÎ9•ƒ³ \Â^^LûîXgûb=6{ü€¹€D/Â_¸ò]ñ\6ËÀ°}–yÓýLÖ¾xá“ÑBÿ˜€ðS”„Ëjí¢½­¦Ù�øgÿÞz¿‡<—ëPRCR«n f³†Zm]ê2ô)ÒQŽ4ûðqd2‚Rì˜�88ßÀZw„áp€‰ñø×`a±‹k «è÷úh5#|âà¾ûïCU––zxå�¤©Âï}ñqüHêüª¼öFŽg¾—Ó.¢VÍ™‡%;n~ÎOuŠ açny=}gõØ¥gs«=Kî¨w•KÓ`åß§vjQp]Óþ,4 Lšv‰.ˆí#µçê†H‡°¨;ì¼°k­.ï”'Hˆ_ãùéÛTI8öOsÿ{I8¥õ�³û¸qÌœ‹#÷Õ1½k Rúr~ˆÍ¯“X°~ŽA]â�3ßT:¶À2Fk×#ˆ›3wŸø#•EÓ JeäÀÑô\Q^�VfÚ–ÖÉ! K]…Ò 5•o#¡B#*e–Vr!YÊÀ‘‰–“ØdKíiº±â¸L´ŽT I6(¦9è ¢DBˆ†V ¦›'¨,üì19?ûQ�K&ççLøf�@€�@àncÇ Ð•ˆqåù¾r );Q !œe´JS�5Q9ë€ïÎk«(ÄÇHi[z~#ø¨,/›GíYÊ¢ [Ž�Åcä´ãÄXÊ˱sÏE.±vªF‡°ã3+k:ßž¬uWŽ’¦÷LiÊÑÔ.5êx�gÖšÉ_ùœìgüh!‘×ÛÈ“¶’]35ü/¿t¼˜^édxÿÜR&H’u!(Nj¨% êõ­V‚ZeáúÃé(ƒ‚ŠÇ,Kqpo Ó“ ®^ë£^Sh5k¦Üï¾ó:�µÒ×ôþûŸÄçìSØïW~»gWàã¥Wr|÷¹™H4fŽ#iº9?Þ  «¯~ Z+l5*ʯôö,=Ó9vé*„SÉ`¥/mÖ8~±æKésNz ¿&^¡Ç­ëòï¿öT�tnÇò|œws·¡¿ qÄo¦±·ÅÜ=tý£c°ö9�û¹×Û¯Ápªø9)gKí9�`Ï¡6’$¶¿ Ÿ ®·bÄ~‚AH2¥à.tÎþÙ^Ø�©#¨ï8@à.Á”i+\=äÒAQö�²~ Hh�™õ rÙðj±F*–Qµ‡õçFx!ñˆ:3�Ä" MB�V–îK—\D¼¯/Ä(è¹)qG%á¢|ˆ8OábÕ.hè½ !Š@$üŒø1� ]_ðbÈŸ �í‡Àßÿµp�@`kær›ðÜ�øãAˆB®BF „½ š°g½ø]CöÒGŽ»¯ýÐj|[aSh4Ÿ�G[Ùv|ö]ØËÙÒ�œƒ·„GŒc;d3l"<Ä¡ïðU¸�‡»šJÛŽ t€Ì"¥ãg®íŠ_^þ¬L³&* eŒ¬1%Ø 8ÞÆ/ý­²röâ‹Ë 2Š (I’¢D\­^C³‘ Ù\í^߈@i†‘�FÃ2Ü{¤…Z"qéJ.žÁ`íšãûÒÄü�'ð™OÁÜÜ||ñw¿‹3|RÂK¯§ñÿþiÉLXÛ± �ɇÈ[žóãGcùƒWÑ_¼¸Õ9?½ÑTï{‹�>iÉcƒúæºg`ž701G›¹N�œÏãnH‹u… 8~�ÛÁ¨5xÆ=WæEøEÒ6KÐÑßCåmlΟáÉŸƒm wŸÁÄ ?Äð—%uCN a¡]}­?>%qøD �V�uªV×Ù8ú®†<…@ `€ˆÞ•W�®]€ƒ¢\sö$¢ÚîtH8ÑÆí“’ƒ"GǬ“_wÝ(•2§�‚é:Œ4_®rê#µâVö�* A Ô¶\„  ŠiÚÞItß €DÄ\Jy©‹•PˆÓ„Vp‘ ‰‘Œ‹v©Ä9€Z*�| ÀSjð£|LjGÃðm � �ÀÇ…ZÄkY!!ìAÒ| Œã^g­AJPt•Bâƒf,ì_˜iOŽÐKÀÑþñi—JÕçÍúŽA^jÓ�æîh†¯ÛšC“¶ÜÊNh×ypd_ø<¹ëÇ aÐy¢�ùÝý„§šßG¥Qûâù£ ݇„ÖPqY½ý‘ó�žþÌ4þÚOï±ý›ïu1J%¢8F’ÔŠ¿ZQ.F£™`b¬^ˆ@ÃQ¶^.ÍÖ³�Ò!F£ W®,¢»ò>vMç7<Ë‹�ìžÝ�#GæñÙÏE³Qƒ�……~õW“UP øµßÓñøšÓŸ€ŒšÛ"燣ó ˧_Å`ùÊ–ê¤bùÔÊã‹ßÊÆGwŠõ+çâáܾŒ¾ïô�r䇑ʇîXËupˆ?|6sC–-3f{U·ä�¹»‰‹æ´.�¶v:´k±Ø­–Akx2ä<§Ó+òдÞÐvôœãvS% pô�&ƧZü$zr}Ä&Ä €½ð3+¸ îˆY;÷çPÙ„Å ´ã(êS‡ïP7‰!ä’Ð× ÜÜ#¢ ¯»v¥r&�6¶»I(¿2œ¢¸Gøñž{gILÁ�“—ý4Ç pðžvîiCJ‰ªðv/ç(3¸¶~VŸÄQiÝ ÏBåC܈¨>‰Öìƒ�w®ˆ„œuÇLIü�…Ðb„š’ÐCåá43ä¡DÈëm’#G‘óFJ(•ëQh]è’³G@!J€ü¶Ú• D"“6� ¡HB#õ tî¢Úti  T?ÚÂFÝ?¼�.Ê ™�ƹHDá¥ß„×Õcžo(o¡zFº§�¦E$„°|%K;t\vÇŽ® 7ÿë?ù"’è46Â{ç[xöÝ'·YÎ1Z[Âê¹·�öV±U¨Qýko",–M €Ò“ñk£ž~AÍÖF‡†-£…‹àE”W‘ä¢|�>þë!sý¸�1±¼€}‡iC~í£‹‰•e‚3ÈácàÇFmñSæ‚ì7üÙ=~È/"±Ó1»7ƾ#m$µØéî©RD�ð•‰[p @~J� @”„îÅg™Èå:†úÔ!âvåFä)¯»hyvݬtVræ�(¤J}#•““Å|#ì�›Öä 9 §:‡¦®Úˆ@©{Š6è/SvBð< b¾�Qq Qž"2ï©Oüâ äX&;()þ4< LVÐs!.‚€#½À@H€;|wÿ8E÷²RÌK!;€È]%Ī€·Ô—cÎ:HɰdWhë`¥]Ò­†Êm%œÁÆAÍzZ�`9nøÝìÌa„ò1*E¢�¿jùA4ƒö›Ï÷ AìtºƒÝKÓÐ^WôÆÊDò�…Çd7›·ëX4¡ + A*J�ÕÇ +fÑŒµü�¿v/ú½Œ�E¸çp>N�écµ« 7P’Ô'ë® Z’ ÑHpåê2.¼ÿM4jU‰“&&Æ›Åt·¯qöR‰¹é]8thív„çŸû*ê5lˆ?{õ!\¸6³Mr~ˆ|ÔÇê¹·1X¾Œ­Bç# —ßÁhõѦº‡çâ !œ@­q‰£÷µÐl7P©Žo¾ åü,„<…@ °Yˆ£²þ‡N â‘awÍ�„LÚ¸“ ‘GŽ'!¢IP�6y?T–Må#�FÙJ’ÛG)ú)ÎKÀ‘«Æ”wË×§!¡¡@‚‘¢ª ì"arƒÈq¤ ÊùÑŠúI•"Ε~Wk!0ŠêÐÂßeH�@àÎDà P ÜBjÐ8 �9h�ØãqÙô°ÎBv!"PÉôÜ\h¶¿œw[^>Ííúáê ´PÊ 1ÓeK+  ô/¶ K6·ÜáÎ�О�YëÀ.áø¤¶‹B´ŒÊ¿q4?©üX ÍŠ-ˆ…ARÿêÅ“bax¯$ì0�Sn (ÁÓOž4 G�.¤ø¯ÿÆIìœiCå ×ÕÇÞ] ì™­ãFd¹Æ[ïõ�åq!%ˆâõ| ¯ã;8±!ÍŒÔæg5¤DÁÙK ¯¦Ð™ÆìTS“¡7¬ã¾ûi(-¶UÎÏÚå÷ѽ|š–l­1êœÆhù]¨<Íöl–ˆkÙÑÖ3égv\*m @ƒúT*Î& i›yÆå ¢GßúEq~}`®Hî΄+‹Œ¿ ÓuÂKcRè´­r›Å*I“LÌ"Š�.×$XY:~¬›€hž·OáÓîüŸ(8r_S3-sL~qÇó©q E™~ÖÂÏ¥@ °5¡²Áº(íÁ‹�¨�íA}òÐ�P޲t*Ѧօ# éëë¦f¹€V‰7Fd!ÑES•PQ¬k¦%UU9è2.ͤ*•i£jÚ9Ì\yH*VC©*¬*9€d:€ÌG`xÄ*q'X–�×ô¾)÷v%|Ó�@ 8€�@ °1& Ä1ã4Î&À¨Zþ�—�£e´êD4Ñt œiíÉ¥°nW}Ôˆ.˜Ý‡µÁÃܭʶ£IûÍï”ˤxI::nI΂‡°óÇ{iÌu£5}¨mkô†;û‡ï+˜Õ Ã§ó�è[ {j/-ü�PºFPˆ�<¯¼qVkA€~ño=‚OžœÁX;Á+o-A)�á0ÅÒÒ5$q†c[kŸ«kÞ?7n \G8÷Þ3˜žPØi&pöJ‚8REfP»¡<åãü¼ôÞQ¼yöÀ]�ó“ ®b¸ôÔ¨gH6ì믽5øéÝ®¥`¯\HhëÅÉjÐàn —Ø]Ìã¢�žÆ„c·þËàŽJøÙ¯QØËN ”_Š:"w£tLÎk£ ¶~ÕÒ¤ìæAÏ�ôÆ3äŠéýGk˜Û;†(–p£+[Žüm,X ÃO¤@ °Aès>� è|ˆµ‹ÏA�ÖP �¸µ³( 7¦±ý .€úl¥2SêM“@´>],ƒÖäÌѹÙ^±îŠÄ¥�sFåàn^úù\ZŠva QŠútãJ"AIër‰:3_ä#Ȭ‘§¨Š£¸VîR…Ù?­Ù> $:çÐ2€¯x3|Ã�@à®pý_á,�Àíc€#j$YDŸÄ설R4_rB˜ÔQh¸cmüp~ç�Køa/Êî\'ØX&hšÖ¬Ü= ¸÷K—&Œ;@ñÁË*¢VÕ Í¶g¥”´û„ñ�èÈé6Avæ\mqè8Ýíðφü�¥ÇE/ŸIÖ–ër”�mR*ÈCT‚´Œ�ÕÛPqýz{ÿðŸÄÓŸÛ�<×xé�«8² Kœ>ß ±¶¶†nwÍ:pâÈ¢HàFœ¿<ĕŠo½{ ‡gÏáv“æ1~ÿ™O�weÎOÖ-„Ÿ¬ÐFüÙ�„¢ML_nO?<³øÄÙ•Ž÷Sr9L(¦,ï5Ϧ…lÚä¿–šçìú@ó«U›ãª¹æNÊòå„ 8ÔŒçÈ-ÂmKËìh^Ó°)÷©·?¢]q‹A¼­™]öm£V¯¹Þq�È>ÏMǸ~²ð“(lRz À_ÜH¹ÕÞ•—�õÁð•†+„ ¤½ €Ø– @ÓäÎ)IŒ1Ù;f~i=SŠ�¹eH(‚”õS|Ê•\¨Ôš†�Ä#rO›2t)„ŒÖ·T9u<ù2í±Ro~”Œ�F 4赊rx:'7‘9Nsl¨i…xýR à;¡_ � �@`눰€pˆ<\tð”�£u,.“Ôä)�{‡Ö¶(ƒÁRúM°ãÒþí-‚� }¢ã·œ/VúÀ鞢vô�O0x~ w¸l*ÀÛ¤y´Àq�¹+ÈGxÃÉ)äÝî€üí¥'ÄJ~\J&ÙÕxiyZj�lJ”J¡ is:©ãïþíÇð—ž> €Xé ñîË8yï¼òæ–;r¥±´´„<íb率öµ¼±ùÛ/âØ|·›·ÎíÇ‹§ŽÝ}9?*ÃhõŒÖNJoZüA£qµ5÷h#‰'Æ`á“§~3¤T’ Âml)ç º,¬Â± ·ðUÏâ@ºJ)@"�7ƒÌ†KX§íÖ§hÏ›B¤Ù5§ŠRFûëÉüaçüºj{tk1ôz¬?cz™)Øh 9ÑB{¢áºØ´ötÂn×%…i_0?ƒ�ÀG€îðbƒ WNc¸ø‰#‘Iõ‰CH&æ aa; u^dTfœ=äò��Å|En òòb;E}0mÁ«YC›m@•Ü4€¦í— ñIir‚2PW¦Í¶ "í¯ÿi…�’E5d2ºÞ4U< ý—ÐP¥ ÚšÊiý€¯è„oU (7‡€£v‚FÊy€¸¬IfìaóIDè¢Ëî˜æm2AƒÖs @~׌Gôñ ?„vÙ…ÀóƒØà©¢mè„•„$vҴǘcEv ^Úó=´öœ¶²vI:Dù¸wÒÓ†¦MrH4H*gñ ±¢ŽÃ †‘¬D+�9¹9¨øS:r�™BFµ§�ùó0þê_:§ÏwÐŒ0¿«�^»†4¥#,/-C`€ƒóMÌLÕàâ·~ïYìŸKq;QZÙ?½aýîÉù�FºvÕ·¡U hlNü‰e§>{ÿ ÑœŸA4 š$f0ÑCàº@D¸…*௱I¸øcs²Ð ù/ͣƂá2úØâÐ4w,–\¤LYc�€‰/.Ùºš–¦”G*•ød˧XFÀá{Ø1צ}¬\Ú�=°œŸkVÃÏž@ °EÐ<€¿�M Ò.zW^F>\ÅFQ‚ÚÄÔð'¢Úm€ —K>*åóh]ü•²?U)÷'/='4ý\Ö(åøèõ‰Òëšm™“HZÙʯ™mrÚN+Èl‘öi†·ä[Td r$)vÿ—BkÄ:ÿ]/†oS (·†)Ç DÛ9F¸«Ì À:HÈó�V15ìr±¸!w†�-»‚ Hp”~㺕o*Ðf{ë]ï\`añ@f‚¦Áº‹>yd=h&‚Qû–ölí’øãq±—t–rÒÖsï\]þκœ«ñp5�zÃvI}=ž*W5gY¸´9‰Ÿý�Á§Ý…ïÝ�8’¸/¿±€¹™zázóÔ*„�è÷XY^D’ä8q¤�z-çË_ývŒ+ÜN®,Oã/= qWäüäÃk,½•vˆM‰?Z`”Lï»Öœ8±KŠH‚±ðØ»¿™N ÓÒõÁ ·ÂNÏù¤Û‚i�©}‡îtB’PÌ®=\Dr»CÙ¾ðl5>ËrA¤—¦¶øe’°ÅþØK¶�Å-‚Óúåež &^Á‡÷—{ÆØs` QÃ��¦=P´ù[2*üÔ [Åø/ÿùþ±Ý�üul�ÁÒ) —ß³uÆ~„@\ŸBÜšEÒžƒLÚ·ARÅŒÓU«ìº8“çÃëŽ#À˜’qʬgú_ÐÏbKÈÄŸ“�c0¥Þr™64غŴ.9¢e6ò!åûl‚<ª!‹’¢})#“s”ª8V3­@eé qŠºøaï7œߦ@ ¸;øÿ"œ…@ Øžìp@lS¬^&ŽJœYôª2m„ Ü/øÐó º.‘:ãP´Ì2‹1…åyОr®YæO)&ƒÝ´nî2·(QÖìg6AîŸ –‚ófQ‹,ÓCÒzÐà·õ“;Ââü±–Ç •–_\y’ ‰ºšt–Û2Í[•E #íØQÇCNAå#¼ør+Ë`Pq Ÿýü ü·?ÿ8æv¶pþÒ—û¸ïØ܈á(Ç+o.ü`½I¼¶ƒ‹W†�Rbµ³Š~wãm‰{�´C–+|ï»ßA$q[I1�…å^>5�åµÖœóÓÃpåMd½‹ÄfÅ-Ç'/·f�Šd½ä* ј9m,Š0 *eñv,8Í÷£uµœ0º†ð¦ùÖl«,B±™¶”Á¤I›Îß!ÊÎa»n� Íô3Ö´zMæBõÎ㟉‰‰C÷´Qo4*¹}•"z\3åÞÒðÓ&lòoþš0%�¹é£?ñïˤ‰�B>\-Ü@*í⣠“’Ö,âÖâÆ@Ü|4”ÊÍ¥>3åÖFë® V®äR)åönNŒhSºÐË!‹Gê?5 =å*³T]ÙSÈ@Ú/ò} rxðº~²¤Á3‰LÌ�0âODy?ÔïšçQõ·òtpÀµp“B (·–À!# ‹ècÕ¸Â+�qh¦¢í6$±WvÀÛ¢žkšg ¼€ç{°ì ÚWn­hö”‚³¸šø4‰KãCìhmËèaó,µž(ÓÃ2@γ=˜àH Ï™GÈV£ÎÒ¤d!è‰Ç÷â©ÏíÇ`8Àp0@¯ÛÅ©÷VðÒ«] ú ?þã 4Æf°o~?æçgñ™Ç÷î�×Þ¾†ñvŒ½»Ú¸Wz¸x¥‹G'ñý×Ðí©Â´¼¼Tˆ»gë˜ßÕÀ[§–±|õuÜnöì�ÇrwWS\¸¢ñúû;1L“;'çGç­¾‹Q‡î&†%á§Z¹·F§µë¤NêÓ`Ø ~ ð2pF°áÖ»ÝN»+ÀÈ/ ~-寲é2p\�ÖtíámÚ&„p8hH!vØ+±ì‡cˆçœ› Ûú==@¨0(§«—9â¹9\ÑqUà¡�\Xà¹D �„æ3;{ ëÍûš7Ï×1ǯ>ËŽßVöÍU¾É)ø°AOZYóãr‡%±×&Qˆµa;^ù;Ë$ùEÙ`õ;ãnž|üþÝ¿üÒ4Åp8Ä`Ø/„ ~¿�îZgϯaçN…Ý3.\«¡9¶{÷îŽGwãÑw!Ë^|ý*î9<‰V3Æ�xû½eÄ05™à¥7–�f@–¦XZZDe¸xi3­ ¸ÝŒ��cïü>ä¹À©³1V:C¼{¦† Ý{Ñž¿oæüiï<†Ëo@çCîú©.þÈhX›>6lNšÇ/±ò`€MÀá ‡A‚ K}„ÉÂ�B„Kä( Æ„ ¼Ê ó ?Ör˜l6|¡zy†¥y´Yž­Ç®Öë`ÆÙÝëL¢e,ÛƒÛ‚hs.Ò˜´‰Åìc;‘´¢çØØs•nâ¹äò êÚ5ûУYÍæjâî~D›¦v5øfò·ÉT�^Üïˆ(4ÁØ9ÓÆ?ü?…Á0E:Ê�¦FéÈA ú}ô{=tûþ ÐnŽ0ÖÒ¸´ØÂιyìÙ½�žÜ‹Cû&±¸<ÀçV‹| )\(­ñÒëWqp¾�•NŠSt …Ä ßóϿ„ã{W°8tø(jµZ1½Ö—¸°2�î Â{+÷a)Ý@l¯œŸÑ2†K¯"ç�ÄU½Ü›T2¾·Óœ¾o\F±ÄXøÄ©ßH'úYé»Xp¤ âü¤¦úÔWÂ�óã¹’nwFr!ˆã}Ü9_Ü ©µv^³Ð •Å}#¸ûÐuýƒCb%¿ DÛyú!.€ÏÍǘ?4†8I˜˜Ã6°¢Áñ‹?ËB �@àß²÷ÞA–$ù}ß'Ë=Ófº{º{züÌŽ[7{kînoïp–I€Dy…¼è¤?!…(¯YR¤$þ¡�@QE„àyÀ»Ø»[wë½ï§}÷3eò§ØŠŒÎ¨ŒªxÓ=3»³{ù‰x‘UYYYYõºª^×·¾¿Ÿçîˆ?ÿw˜·ÖˆÛã…qûK‡¿…R!À=+¹¨°E˜Œ—Ÿ ,'âqTî,œh &÷OˆH¾åÔ1B Ú”€ZgñLj'î{ [ÂIÙ_‘‚Î#ø”óRpçQè¸M$6§fìÏ (ãx¢Ü³ïVüA@AèºÈ_Èo9yë®{Èãñx|8�Çãñ|:(”:€Èa tÃÁ¹ Ï-Ê<”ÓNapÝB9ÈB�Rj»9�—�jÈe$u‰‰Àö×èhÄ]XZ0¸¢—[]ü¢æ�Ú17‰@Z7†&ªˆ@u늶�n+Ró×í¼Í¯ÀRÉÔñÉÎ8 í£”^�6—ÛA¡[~ùÿ5|`�÷ß¿Áõ›ô{)iš“çƒá�42 èúôz=úÒ!³SY®XL²wß!ìŸç+�`×D‹�ί’eÇOͬo¦¼÷Ñ2Ÿœæ�÷–¸vsȹwÿ€ñ®æ^`×Ô4{ö,–¥Þ××ÇXÙø`õ1zêSÏó#Å Ìó“m^´¢€¨måúQ�‰Åîì&¢x,a¸!àlΞ îï_jó‹Õír;9R4rë]!Û.lÏ.nîŸF±¤)?�qg?©ä²BqC¾1Ê‘äâhÌ¾ÔæHÛ¶äNW˜˜.óüÐî¶·)â4;€ª¸õ›>lŽÇã¹»âÏßè{ª÷3‘dl÷iEñxgö’ÉC>CB�‹"ˆÚF2¢ÐÇe<*À¡ê¾ÄŒ×äéÁ¸|ÌØ|P5"Pߟ}�Çã �Çãñ|:Ä(u°P›Y_ñGë€Íër€Ú0ÓÂh\;4…ðq=¦h[±í�{×’cóÿv‘»Ïb÷½ñɪháú©¬æ5¶®Ñt`�IC¢¡ŠÔ5:‘‹k}B9"PCŽU)­´3D‘‡Áp1\Y›û꓇ƒ¿þóÿBe„/¿r�ÍÍ”A?#Í3²,/ áÐAý^ùÙìõÉuʾٌ+D³8x�£‡æyò±}„aÀ+oÞ`ï|‡ÝÓm ™ W6X[ð«ÿðqxO�{¥÷;A†€åüÒç¯)b}“TÆ8—þ$=ý‰çùA4éú‡e®ó�eG®âh¹³çI’¹ ;€YõÚƒý;ì¼]±b”m›¸çu³•Ϻ\œ²áºH�œ[w]µó.®ËÉ û&�aÚ,=.®pl¨é×67í¥öºW+v¥x7"ï�CÃѺLN�¡MßÍ8Çcd»Ô?þg‰Çã¹[„êÿé"²ÀqÓÓ™9zJ—¾D&}PwWZ¿ˆ)Ÿ8*@îõq–Ó”õ*(ëQ”è"E¤@ŠŒ+HtR Æ=„6gŽÖ€|*û(Q›"la?a%ÄöÖê†|3¨r=û3¤°ù‰°/ƒ´ó! H‹üyöÞCD;?ˆ4pÝç²óx<žÏ|¸_ðGÁãñx>ÛŒƒv¹áº\È5ûXì‚Æ7Ímý !ÿ‚mïÌ�…ÀÖI­º!v³�fÞŠ?µMEÛí;i2œ]·c349‹FîŸÅ {T�áÖýÊ?®Ž…Ââî¼u^UÿVœæNÇÁ¯.?©V‹ãÜ&a¢6ÿöÿôSÉ�…‰xÏž À²¹9äµ×¯�sÃR"MSé€á``„ >ýþ&½a˜2?]py±ÍÄÔ^öïÛσ§xðÄnúƒœ7Þ½ÉC'gHâ€&þ›¿ü+Ù³Î=Gû '�³1HxûÒ$jxŽÉð<`Y/òrïÏ}¢y~òþ†+o¢óAUø@+`t® T¿5{lµ=vß別·ãr¢»9y�?ª>9˜+JP#@‹Ð€»~CIiðð¹ÂQ“S¦YÌ1ë™ k…°Ø}Æ·q:öÒ¡�Æ|m[�,…nhNêÄ·¾±­Ë¡-fÆ�j*eófìàÝi‹n+€øŸ"�ç.Š?`õè©Ã_Û׿ñúOtç!ßËÝGÈ{‹¤—É7¯#Rø/ê¶PH” Q ãJ~slmˆ:0e€ A4ÆdBç ¢u5%¢hpÞ� ‹‚Äô=€o«ÞÚe  ‚Rfå+Þ äñx<>�Çãñx>}æPêB«æEöJ8K£T+nØ0g"À*�#"�Z…ûÏÍ…aæ�ºü f½†”(¬E59»8â8ëéF}œ1�Àî[Í›ýnH8À—®UÌF‡AÂÉéá|�î†T¢zŸA�‹I½¥Çyyí+’å{¸Mþíñaþ£?ûEÜ·ß½^l·cÀréÒ gÏ-•n ,ÏIËA)ý¡‚z½MJGÐ`È®ñŒ8n¬�³ga?û÷íåK�îgÏìW¯oríf�‡NNƒ+þü•¿Ï‘ùîE4«Å}Lg UJßÛøÏÉdì®çùÑÙƒ•7(‹ŽðS~­`„wD@GSs׺S§gƒ ޹C,g~oøhÿ²ì’7M ®¨£ìRçbY+ü4zrF ³î¼{�l°Ù6î44æV«sÚ]·óŽÓ|ùs󇹎Hq]?nGvºFH·"×­Šgn=†Ù…ˆ÷�'1£,î[Ϊ¡­[·jÄÿÄÓãñÜeñç"à ÕÙpyö�ê‹ëç¾ó@*mbÿWA)>)D òÍk¤ëWÈ‹ ^¿U$L�¨�D ö]mÿ_1óˆÔüDÑ€k Å„¼Ó¨ °’Tßÿ]Ж‚@€ž ¾n®¾²@©š¿µ @î¿5�Çãñ�Çãñx>]PA¡T€û¬³6åO�ÀSçj ‚ºpg9"k 4"² ‹Amœ7¡'ŸyÍÃA-Bà¾åoT€û`Øâ>É4ób«šÆäP³oÐär\TµÂÍhÈ”#Ä-U× nŸ‚‹ÒŠÞb�êÑ-6ÖIžÍqLŽ'¼ð›ÿ2`¹¹Ü×—/­¨/œÞ§pxãÍ+,/÷ 2²¬ Ë2†é€t8¤oòõ{=6{=†Ù�=»sÖ{ƒ|ŠrðÀžzâ�vÄ;,ÑjÜ;À÷?ÿCÍÞä3NéZ/Þ½F{ú8ŸR¤¤WÈ6.S ×ü—XG—¢�[¨ t‚*h0ˆ.l7+ölµÇ�·Qœ@ PÁ.Ö‘.0½ ûAø]àépcµ±+Ù1)Èyïzõx<žÏŠÿÖ‡€óx<žÏ!-„ûÔ|c~r\T¥Þ>w‹³L¤�–M7¿Ï(ÇŒi¯Ü>�u]ƒ�»ž˜qUý/Šê¤^ë¨S”jíA"M.wÚn ¦óúœAn'ÍñåÜá—cr!p7[ŸÜÛ›�²û©V%Š_‘¹`‘IÓe�÷ÖÞ®ô?ÿ—ßäŸøñ£Ôñá¹å<‰î;º°ä¹æ/_,E á #Í2²MtÖ#ï/’–)Ëè|À%Aa "ˆ;ʘi ÷öe…ç÷€ 5. Aœðn"ûïJ€è¬*þ º ¥s0pc„oO„k ÈAPQÍ?PkÀvz<�€<�Çsï0 êÈ8JMî[é>l�û@r�B¡9}�¸QÝÛïM©»9�m»æ>*Zˆ«ÊŒTJ̪µÂT]Òr³[ßûɃ\šÍ=v0VH²ó•c‘K¿"SÁ%fUAh: É{¥hövÜ?ñ?ù�<0ÇÜî.u…æÍw®ç‡LESS°”N ·ß¹VæÊÓœa–3IÓ!ýþ€á°tÑë÷¸±¸I«-,Ìj®/·™Þ½Ÿýû÷òȃûøÕßø»;çù¼ð½ó?Í…³Ã;›çgp�áÊèljsýˆØ´6uˆb˜Ì^n�ŸÜ¨@qYY;û‚HQ ƒte-{(»ª÷C¤É%#šB¸aC5ŽÊdç]ܼiNÙ,^4àÆu*u¢Af^Ü(�Ug¤k„t÷QÄ çnnÄ|EL�&Á«‘ýGcæ÷�F–fÁ½»Nór ,‹þ�g�ÇóÉŠ?kZÁ‚Ôç3;ô1Ì?üÏ|#ï/Þ·yåÅÃÂd¢�PŠ{+1(ï/¡ó>ŸK‚ˆRð‰P!(µŽMt� ²A©À†t³"�Íù£B�”ŸÂIµ'5"[¯T`ëL-�ˆ€a ‚sZ©�€§1„«P‡î�7€%–z<ÏgJú›þ(x<ÏçŸ÷!ƒ–:‘„fýA)·ÎWD«hÉ¡FËh;\a¨)=�­CL#÷-}¨ôaÇÁVŒ T}prXŒH÷ÑLC8µUoØV8å BP#^Àì±VØá;2½/{TFX ¨R*v.ýÈø™Ÿ8J§3>ÖâK�î¡•DÔ±ÑKåƒnêÓ-„Q–�Î,rùò*ƒaJ–äy^º€†é�wß=ú:ó³Ã®¯D¬m¨°Mß»‚R|nøƒWãÆÊw�o”ÂOÞ¿;rýH89}ulæÑ™ HZ|¬¬�yIÌÓJ¬p©§õÍìÑôšì�€r²¢,KÃ¥Ç�R'��¡Ø¹8N¡ 6‡ÚaÈÝ7@´“Îæp4cãú©ÅŽKÐI äŒÅnd´h…}F;¦çB#iµêú«›ÞF ºåëÀuŸïÀãñ|ÒDêo'À1°÷'A´BÆ}± –¹‡î"ò•µ3ÿ¨ ¢0$“‡èÌ>À½ŠÎ”bÐ`‰b°Z D"Ÿ)”‚ †¨aa‚¥ZçÖˆ¼åР̼”u0m\n8¸¥B œ`ú®8‰”©/Ça„¤H§DZƒA@ú* Ô÷Á @Æ 4­P{Í@ÀlQ¡>R¶z<�wy<�çÞ"£Ô@A½ È>|4ÓZ—¥a´KÈŠ=)ZÖÑZWÚ¸n .t\m¢påêTf•…ÎÆ�1Í" R7{ì¨Ì1sÅ*[wû;ªÁ•PíG³rC=¹¢š—A—%‰_“=jƒ @êB#¸èÏþ+÷1·{‚$Ih·Z­¨t=öðš¸|m£X]Ù ¼Aáðò+ÙØ2ègäEÁ3ü"s»—‰B~¨øÎ«�r}ešÛAtFºöéÆG ;ËõÓnÝìÎ?–ÄÑ®I>AVVÏü@Dç�Êv@^ì+®f�¦KD¢Á½fˆ8«6E�´ˆÔºÝsÝpÜuÕ7JS8¸JuwW°crEóÚ<Ê^ë‚r®sR5çR«Q£ëÃuºÃu‡Ýî(ŽÜ?Æød`Ç®˨ã>®}ÿ³Áãñ|JÐa`¬æ…‚à2€+?Ú»ñÆålýÒ>°´gNÒš:Êg] ÑYÏ|6ítÞGtΧ‚ PA aA A�2ÓQ]>žŠFœ©‰º (K{ ÞrîXŽ»Çj2ˆ.L{Ä‹3–Pçĺ,9êr†ûDä;ÀÓ8Dëû@MƒˆsŸÝÎù³Õãñx¼äñx<ž{“Jvߢ ¨Nü©–¶¾N€èQèMhNz¾UWÁÕuªã´Cµ‚†�Aa¦lcSaŠíÃ�nŽÏ6:·‡+p5‡<ªËƒqk. '‡eDX8§�¨ ã—d.¸Á,‚,Ö6y–­ÍÑϱ’Xñïþóûè´;$­„8NhµZtÚ Iqâè4‡LÒÄ;ÜÌv�'ñ¾½»ÀRæzåÕK|ÿ¹·¡x—0äñ J„ló<ÃÕ·‘"X×�V£…Ÿ0ØhÍßßowÎñ)°<<ó }Ý®|+Wù±ìR~¶Ž=yëtUK0¸¢ Îr‡Q‘i\ksÿ4à8µöIÜÒ"Ž°Ô¨¥âš|ªŽ q¼9ŸšHó½%àðÉ63ócæUgF ;ÍÔŽ¥!ÏϪÿ™àñx>=ñçïL©¢€pp Ÿ- �õ.­_xf¿»jwÏ#Äc |Ö‘bHQ B}D§  Dç&¬Z†è¢œFçØiSJ B(KeæÍÊRÊ"„11*Œ0TE|©:r(§E4Š„-×�m�5òk]ØÛ·hØ~4€m«³}"ÎÁŠL ÓŸ”ëi)ˆDˆ‹—A]ÒÈ~ AÚPÀQݚ̡ü=Óãñx>(þ»¿å�‚Çãñüp2 rèR¢£9¸õîCC§�éSd�¢NtG¤±4+4"£Ô ë¼AªëØ–®‹Èîƒû$Ô}h‰mâÒ°îúFSS%Ø7"ÍúNå ÿêñ)„øefÂs2�&´G¤þàëY–²'¸®¾½ú„Z-N°¢þ¥l‚v§M·Ó¡ÕJHZm’¤E’Ä´’˜n'æ±Ó{Ø5Ñ¢Ž4+xë�ëù©ã³Q·›€aqi�ÿýû?Ù5©øaä7Ÿÿ ýÛ¥.2\y�"]µŽŸmº~D‘Å3ûov&ب0àSâæü‚œ-Æ¢sÑ>2’Æ„X¦”1YÉI/ë=qT[Ôçð�zahD|È:�¸Åézñ]dT8´ŠèÞàÚ±ýé²�å®g0u5"R?‹]¿Igß{(fáà8a7‹<Íû¼Ív,7íx<žO‹èOÿbœ‰@¹÷¯÷�!5Ì=ôO— ×Î}g(EÚq,c Ouføü"”b l…<È/¥„”%@Y'9æ^jÅ¢ÊíRSbJ�Ê|_Æ£·e¯Ð›'…ºÆãlf�pYïWC€àWW¾l ñ'¾¢Ù5Ù*]@ݱn)þ´Û­Ò Ôn·KGP+‰˜œø8?ÐQƒž°¼:ÐçÏ/óÈÃ{ƒ Pü§ÿÙ_gïžM~Ñ¢øûÏ|³,o)ú VÞ ï]ÔNýI01y­;óØT¶Û>M(›d¤J%/ÄóÁõp!À DQ–["�Bôn}-{bxUÆlX¸êS lu­°Y¶M]lÿ®°Ó ÞPÛntø3ÇÍä,–†Õ”jQ'Poý©šë‘ÆC89pøä8­v{ô¾YÜmŽlgÙ®™ÿ9àñxîh˜¥œ7”nW°8Ð?e (Òõ ¿{Ð�ÿØ ´‡Ï#"º"¸`æEF¬É°ÁæÝ]¤€`„˜ŠËÆÞB 3� צTƒƒq[Û/ç�6 ÕwKì¸L¿®YW×WàÞËEçØ¿M(q‘apÝ?44‚—#¹"Po/0_"Æ9{ÕŸ½�ÇsÏ;€¼äñx<"PG�}(Åœðg0Ò5äŠDCŠbm_yõ²xsx¸J#$Û”nh&7‰9µ)ƒœ…R—³§œ7ÓMéz\'�íÇq*Õ ?¶}}�Ý(W2Ë­ Dp�$þ�^PkLª>2”i��'Ôåü!Ö°�ܶ´kLóµG†$­v)µ;�Rø1¬¨ÌÄ�}“{ë—QPœ‚ŠÃZ�Ò ox�Çãñøp�Çãùì0†RÇ�©gKsþL‰]fë­HŠ "›Å&"ÊthWr• +ê¸’Ž u&@s¼8±‹�}i~ðêÖ�Îå¡pqÃG�Ð,5äû1 k–š´aò¢ÌWeÙj k�?ºØÏõì u“mÇä @;gÿ\Ƨh)CÀÑnwèt;t;mZI‡8‰i·ÛF*… >5Ëž¹1êø�ÿ«¿V˜„| c¤E‚.4yž“ë‚"/(Š]äh]G{g > ž~ý®,ífyï"ƒ•7‘b®ãGÌG@kE#�êµæNl¶ÇŽÎq—iMÌ�Lì¦È –® ‹üÖ@%VÓ?ˆºñ»ñA5`lTB3iéÍüDv>?•o6 ³Î ZñÇV¹õîòæhÇam uyvê§mé [¶ÚѪІÐqfq�(„Ó¸ÁÑŠC'vï™ ; ®ž�‹@pXö·{�Çso @¿4 ¬ØN(9¬4 @ÿdE‘Þú¹ï¢³65´§�Óš>Æç -9&Ô[Eà)K�Y¡ÈÜÊu‘‚¾MêD¬h£B0n7Ò³ˆ6óâ˜e@Ðîï¬IÜü>[‚€­*aë(Ѧ* ?”„:#jƒ Ô¨ +"¸ f¨?r”ë¾Üôg±ÇãñxÈãñx<Ÿ-v!¨ÝžÌÎ#Ûˆ)q8*Aô¹‰¿€ØöM ËEê\?Ô¸bpµ$;&í ¦QÅjlÜì áìªcµ}4»\Õ"S/¶¿Êµ½"ÓÑG²—œ÷ëÝ,fO¨«2­²ú¦üêò—Õª>Ámr|Ê7Ýàêr‚ Zt:]:í6�nÇ„‚k“”PË„‡‹ë$|é {ètb0ü?¿ô=6n<Ï'�Šg!ØE¡ ŠÂ|òœ¼~ r3ÿqý0-h%°®ànòþ¥üàƒ@3EºÂpå5ŠárS¸·ÑÂÑÔÂÍÎÔC»ƒ ЏËLì;ÁøÂQ»ñaŸÅ÷ž§È†4qó‹þB6ÑÏpó{)eΫdwx!ܯ •€Åfg1Ov=¡of�/ê¹"µçª=÷*ù fÜk…ÝF i…šTuT ÷b*ÚãáÇNÊŠ]B�sÛƒ¸c´ýÖ¹‡æ÷Gì;ž/§�0”›ùœ�žæ¾½)aÈ]áòâî2ô›ˆ¢)† Wß$Û¼`ÅŸíåù!èŒ/vçí†ÑX‡O€¸3ÁìOáÒ_¼Ìʹ7F:€¬ðƒëDmª0~1Yo†{J@”b….æôåôKÃktD×ŸÉ êŒ‹H�P\2²30÷š® d;«UÓELјqmk˜R‹Øv•duâ¿›Èu@ÂØdÀ‘“ã´»�mŠ: �´Û®C[÷x<÷¨ø3œ¬ùíxXÜždéßxóRº~q? ¨ ¢½ûÉÄ>Ø@:Gë Ì|fÝ;F(2íjò[n+ò6d6Ü›•ûqEHr^6«„Œ{Û6Ûv§­ dÆ%@9&ãT¤êÒχÆõ#4‘«ðR„ûA*B×6 ÝÀp_BQïëþlöx</y<�ç³Ij (vº.\ƒÆR+Ä È‹u´³¬>ï�)mø77,•7ßí¬w�ŠU?`ˆÔ ^¸oî›å#Âm'œY¡Vìq_¾_”8yAö©e™™8="Í�«Ëù#²LŒ> ˆuÝægb¾þ´Ãì+¸²1ÌK÷ÝN‡v§ƒJP’GP’Ðî´hÅO?ûæÇÏs7‰¢Ós'!h‘f9E¡÷�Fkã*ç�(¤ó²ÍêjÊÉCwš•�q~ÿ•ÇÉ‹\D“n|Hºö.¢‹Šè³­JUA ³nÙ6…()ó!�Î14‡~ �¢ ªìË"·* õ ÊXŒ—��üÙìñx<^òx<Ïg› à80é �b�Ó®á£;iÚh½N–@ÄéÛ­’Ê2LƒZ Ã:fìø° ,µj̶Ã3�6óØÑ5mÊ}#_ì¾l•C ’çe>¸${Àº|@™)Á ÷ªké—¹JWéšG­æ8¹û¥Œtg@?ý­}|óÉ9Þûà*K‹—™_% àÒb ªE»ÕÙÊÔi!¨Õ*Ë8Šyþ¹ïp`.ãnÑíN³°ï8º€þ°@›þµ.H3ãüÉMè7#YPùáÆÒ�“zÜIn®îâÙ·f�&¸äý+ WÞ@ç½�çùQ*MfŽ®·&�íTÀ'ÍøÂÑ2œ‹ÎS®½ö‡·N…Õ=Ì<¸ŽÁè­h<ú >¬†j¬A0U惴e-{`x¦8–÷Ü0pÎ|3"�a#+×'Ç)Ø$×ÇÇT ª»ˆ³‡ÎuÐ.t!#¨�#UEmiR…€ƒÇf&Âp›Îa4®¤�›À þÖíñxîuâ?ý÷GU®`4³þ´€Dç7×Ï?=îäjpÝO2±ŸÏV´AaÇA((ë1mD4 M»|+|›Øpp [kTæíÏd¨æä› 3_ 57]ºâf?]é߆°Æl�e@-þĨ`Öì£ãf²9€F÷Òƒ [�@¼ìÏf�Çãñ�Çãñx>Ì£Ô}@«ñÅm7¸ h -fÅ¡:‡� ‹U“Èy¾‰εѸ‚�#H ØhEÁuûØ�Y÷NíÃØ‘¸N 1ÇÐd±²9~¬„ˆŠ^e*z_ï'#®uX”L±”=¡.éy•¢œ=·£sœM À8€Vî˜ôþůppo—aZðÜË×9wþ2½�«ì™êÑÜXIˆãÒDÇ8‚ÚíV™#èòõ“Á늻B§;ÅÑûEz½¡ù]Hsd‚6t¡Éòªè“y) 颊‹—HbáNðÞ¥¼òáqܰo:[+…Ÿ|pãvòüH8>·Ô�=½+âˆO‰dlŠÝ§¾ŒË`å˽:RrET%$œà^ˆrTòBk.¼@«¬Z#EˆÞ¥¯gO /êÝ:³çh3ÍFÃz¡ÊFÖo‚š…÷²â^v]W‘©t[5Ë6îvwï Ùt‚8IhFÜmŒ\ÞÌŠqýäþVíñx> Äæïu�Ó¸6Káu 0ÚÔ YAaiýÂÓ)Ò#ˆºs”¹�Ÿ!ªù~tn!� Úˆ(ù–kGëÜŠ6Hµ]¶Ç`×]ùŠ*‚‚RáVÿRYW9ù{@„`…�²Úì‡q.�q()²¾ãú©G ?ŒÚ}‘b3U 0 ·.m¦§kÞì{èù³Úãñxî=<�dzM®#ò‡Ññ­]‡)é€{˜šnÚÎëÂäÊA & R®³•7Èö#¹¬0€ gëìO ]ÍT¶+¶ÚƒTêÝŸZ—ã°uf|A‘äC”Ü ‚ÚF­¥v!Á¸‰ÐÆÚ1ŠãAÜËN3ŽUj xןÕ�ÇsO @¿è�‚Çãñxn—] Ç�q”j­¦l�›¨ÕP¡õY60ý8šR9ù� •°t6]FC?¸Ô‡ƒ‘»AÄ õæàè0ULE&*þ¾ì ÏË>¥ P•\?bûƒbW²'ƒ«2A�¡&§‡­;Öºã.Z‚_[}òN@áÏ<È�=µ@Z /¾~ƒ�Î\eeù s“ëh W–TØ"KsNL¹ÓÌÏãþcs3-E�$Qh]Ðïgš8‚aš•P�hM˜“ ¥èS”b� wöÜy/dìÅ?zù –×'ÀP n0Xy�­jgy~Py¼ëÐF{úä® Ÿ{�1¾÷.‹ï½@º±ÌNq ús'LdMß„ Ž€ì7N7$œ£×àškj«œ•Á>üLɲ5ŠBÛ:ìœÂy‹‚j£²7%o·!ßvHp^·ãÈ¡`]&mßõ�d¥E?@�ÏO«f£bÖÕ~ ®�À6½3Ð�….ÿ×_ú ÛáâÕ¯¼q…«W/É ¦' Î_kst_Î� Íáçþ™Q²4Pa X]í39Ñbi¹�ÖB)ò¢(Å ¥t9?¤¤YNEN¿—"*Hs)—eyÁêõ7ˆ#a'<÷Μ¹:KºöéúG Ò(üˆŒ÷u6ºó§Ã¸=ÝáN¡Éø4a”PäiéäiÄ܃_%j�cpÃÀÝY�hAÊTÀ=/ÀQŠ�k�‹‚Å Ž_lþ8ÿ‚Â6„j¨³€¬Ø›ŸK¿2¸J„ ÍÎWit Š@³s¦QM2‚Oí©n–»¡èìáÛ–†¤ GïïÒG©m8{ìòmŠ?CàŠO0íñx>?Я&À“€ËóÀðÖ ŸºøØ:ݸr¡ýõC Šm¡ˆÇöК:BØÚŽ�ذn¢gŽlÍë"C)µå²y~´(ë e;Df:˜Òþl°b�`0ÛsQ庥0¥s¬™ÖŠR�¨´‡*†lÉÂø¼„ÉA‘"0y‡ì8±B–èj¸;à—�wn]Ò-àË5¿?žRv{<ϽEà�Çãñxî0ð!J½€b©9€�6Ónq©ºƒÎrÜœë I2K«5nsi(Çe£°ÒLÝö¬Peåä²ÓNu¶’¹›z·�8mílé Ö‰’ß-µþHŸÖdAa? `v4 Ï�ªóƒŸSo” ¸!­l}� e—)+úˆ#ÖÝ86IšÛ�~æ'Žñäblú~®®L33‘rázÈ!Z �–RQ,G�îF€îX ¥““-¢(DŠ$IètÚˆ€�n§MLj„$­„±n‹PAˆÐŠ#Ò4ß±ø#(Î_°yåH×>ìGP(D+´nPá°5óÀú®Cß¿Sâ�Rã{޲çô7˼>SG)Ëù¿Fk×u¤+Ô‘m®pǰ×…²Î<3ãˆ=âöaÏmг’ ÿDïýì±áËÒ–5Ó,(?P½�i’ðRt¼óëc�ů%»*çºQɽ€©@Õ8†ÜÒ½ÎP+¨@!®qk S¡L= µ×@A°×³Ã§Ú<øÄcuâ•�5Ьü£œ/¢0Âχ^üñx<Ÿ3âJA2¾÷ðä‘[ ’ñ¶…�m^eãÒ÷Ù¼ü<Ùæ5ͧ‹5»A´Rm Ñ`„š#ذРAPf*�SHbú*ÿST=ei�>e�C¦´yP)Ÿp¸JÐ_Þ‘ø£U°’F�E [‡ 6ŠkÅÅd�¼ Ì87Ø  œ{~ìOk�Çã¹÷PüEŸÈãñx ÕvVpÕå@Æôµì‘ôLq(Ø19¥Öe‰ë"t¨¹æÕ…|³%ˆ#"9ݺá&Qnž°ÊErÏ�ˆ='‰¢è9{ÜA¹Ë—€ë>Ï�Çãù|:€~m ø‚s=,€?fÌ>ø“»€?ÏÎɇ«ç. ß= ÂNP*$ìÌwç‰ÆæÂÖ§“È„‚˜Ü?¢írãê�!˜yÌr "èfZ�h̲Êû$Ñ'к°íJ±'Ür Y1JPùŠ!*Oa§darN‡É~ RJ!âüK`Ækå l¨:zN¤ø«À*Û îÉ×�€*¯+þìöx</y<�燅°ÅP jsô¸éi*ù*T�@d¦�¤¦E™(M3Ln~÷¡¨ØÊÆÐh¶lƒ�gyC.Kø¾‹ ïSºîvmY¢¥M/ûbðaqLõêFÚ00Wñ²}‹�µ ‡Û€”‚Ÿý©ƒ<~z/�  z´ÍÞù1ö/tÙ.‹ËC^|í*�½ÈÞ]7ˆBa'LíÞÇ¿ú/ÿs¼üÆuî›`nw—^?ãõwnòèCs\»¶ÎêJ¥ Š–Wúe©”0ddYAh¶Ýï4q¤JaèÙgÀÞù;áÅW2^y#£âÎÐjt¨7 H¦Ö»ó§ÛaÒ�¹CÄ� &œ"™˜aù`“o=‹ÅŠ@c{޵:¤›+l^;gœÜ‘@ýÌ7¬ðãÆƒTØzç43UM²†ˆê« ùnû`p3<Šà¶Ð@`J…=SœþxÿR+àXîõšÃÇ)U�·Ö½fEKAÜäÿ1ýUMŽO>>A«ÓæÖ‘ÛX¾\õad<Ïç™äÏþÃYà4 X†À÷Ø&»ø‰?ìâ6ÐEzuãÒ÷Ç%ï�s›„­IJ1¨;WNˆÎ·„­s\1D©yç¢Àˆ"VÒEYbP6Ô›½íÚ|:Ž¡XqĘv¶O(2(� P:ãv¥6²xlC�Àì/N:qœ?‚�òª1âÖ*ðWÙ&I_žZTy¸áÏn�Çã¹ç ¿ë�‚Çãñx>)bà°¯6ð�€œ:KƒC¨I’¦k…âä² SÙ§®O£rYÔ$c·ÓZ Aà¾ÕoÆÝ,1” yVï /Ê>4¡³;Õ¼ êRú#ê2ÝÀ§vèÆm`ë¬ãÇTH%ÿˆ+™ö�R´~D�>©„ˆm�$ÿõŸ˜Ó§vñáù n,iÚíZk²¬O;Qœ¼oc1ÛåÃóë¼ôÜïÓm ;á›?úÓô³ 81S ;Fø¡•D\ººÁ�Å_xpŽ7Þ¼ÂäD»„¦¦Ú¬® ÈÒ‚ T€”â�Öš2_Pž1æüÑÓÏrp¯f'üƒß²´, €ÜbžŸ ÕïÌ=L26ÛáD ûNÐ�Ý(n•o—¼¿Á'�ŽòË7ž|ÿwtlr�! Ž8âTÖë%P­¯œ;æzAY¿šLEÄ'ÈÔ8 �Rl[VòÒòSÙFåZ!Ž © »'WO5‡��¯ì®íÃaƒèk®D1½ŒñÉ1ǽ¸3qgt»¡~6üíÒãñ|þ _ŸûC”xzûÐ�ÿ“ÀãÜ&"’¦«ç®–Þ;p¢6Qw–RêìÜeH#æp–uÆdE# UšJ3�éÇæúA¹"P¥_“ÓÇæÖɨ¼}@ îZGí‹E-¨ L̶ãP²û%ö>åø±íJäÀÿ·}H}$pÞ–yXög·ÇãñÜ[(þ’€<�Çó‰3†Èq”šÕ ¬8†¥jÍ:e‰Þ`8졵€`ûµmœŠjè6‹+â4=\7Ü›i#Î~Õ®\—$þ¾>,Ê£ˆæÇÔ¹ìËê&�jtYp"A8ùR¤1i<†�àùÞcj]…Ñì›ïð¿ü�2Þ�À µðÚ»«¤YL«Õ"ÍR�”N+àô©iÂ0àVyñµË\=÷;¡;6Å�|ógXZrôà..\Ùే績ØçúÍ�>4ÀïÞdrìį´îS›j®Áí([Û ‡²Ò/ o¢D7€ëL!9×�F€¢Ö$Ò¨ÍöÏÁã-fæ& Â`DÈ6Û¶]mûf à:°ˆ¿Ez<žèÿžqsÒý! ·)=üóÜ!Dd#]=»4Xzÿ¶… 7T\Ô™!lí"H&“q‚¸{'Æ‹Hn¦5ˆÞutEä)L;…qþl E1õ6’4"Ng H5‡�Î�|ˆ)Jg�ÌzÜQáG‡ÉŒ ã”Û-›o¨ê8Ba�KfŒ³É®Sî˯ooSü €o�û‰zÞ¿Äáñx<^òx<�,³ Ž�´«¢–J˜8G�ó?‰”aᆃ!J5E{sêÜvE¤q‘ŠF»ˆte'ÃwôxüŠ>ªúŒ;UnŸÒe={T�)N¦¥3w©YÜ L©ª ^éíVo¾¤†²›~ì©yþƒçMlörÞ|ƒ0jÅ1ƒ~Ÿ8Ê™™jsüð$·ÂÏÿÂs`æ;áø©/±wß1zƒœÝÓmCM·ShÍ©c3¼õþc݈#vQš—^¿^æ-3Î�]f×®v)þôzI’çE>N)á™g^brü;áíw žý~>Úñv6»svƒ0¾ƒy~æMžŸ.;¤ —6¹’çプ—N_xC·Óšõ†šÀ÷RÒ®ßAMm¨0y¶}8X "®2Zé@¡õlq6ýêà‚tE;ç}³ìæƒJ›‘îCkû¡nwKÂaŠÀìÞˆ}‡'ˆâ„f¤¹¾9p^×´ \ Kôx”£äÄÎŽºc ô W³§‚sz^eU KÕçÄ.ªäEpÃòií$¯G¸v„‹ÙcJÓ»?÷S‡ø§r�Ù飸|½ÏùËCÚ�1DSæê´„#'˜�nÍüµ¿ñìŸÍØ _|êŸ"+B¥˜žê°¹™E³3n,õËœ@3Ó~ðúuN›f×D‹•ÕïŸYáñÓó|tf]½^ÊØXÌòr-B)~ó7~�Ý3ìˆg¾›óö»hFE›Ý=�$QküÎó3šls•›ï>ÇÝ heï¯�¸úâ`nm“ ŽØ•PiŽíEa—;ç·Tg5$ßmí /EÇ)h1—«éƒô¾bhÞ¶UˆvEWüq„‘Î'ì[£ð"˜1€TwÏ£Æ&Ÿ§ÝíЀëÚf;·¾\þ6èñx~H@ øqì�^1ÓÏ«Û÷£N¸Ï–䢂¨‚Â-§ÐXYg>ðq©B3>m06·�qå(ZçV ²ù‚±ëë¶ú(@PdH‘"ÅŠDãp—…ŸÖ J�f¼l�Ý 9 { ty\Dg ljBeÝ?A`拆 &�'G»D¾í�¼�Çã �ÇãñxšH@Ýìi0ј*52ÿ�ëð©Í7$2`8\Ckqœ7Ž}ÆŠCˆíÛ¡©Þ GõÁ,µ"�Ý�-Õ&Qò´>\•½ 4Pû¹Pæjš-¡Êæ²Â— v—QM´`Æìæb5 ƒ§7f±x@AøOþø¾úÅyò<' çþcã´[!£xçÃu–×…N§S®+Å�$VÅÏ ²,'Ï3²<+=ŸdY®yí�5rÓnµ„AV†b{øä4`ùÅð2“ñYvÂØø {}‘0 ˜˜h1jT29Þb˜j€2ÝÊZʾ=c;‚Êœ@g/¬Ñæñæ›WÙ»0ÉÏÿüßfaOÁNÉsø­ß˸zM°EÁ=‘çÇ¥öXþèU²þú�ÌóÓK§{Ï/�>û�ºõ¨cvÒ ³n˜4;ˆ—ÃVòbëX°®öÖ+ 1ó2,öç¤_\µã¡ÙÁcJ' ›©«¹ÞàÖÝ ¶½Æ&Ü–ê˜k1»g‚ E½2/·() n7ýÛÁ�dz%= ,8 kÀËÛ�¾õÏp÷É‹tãÊpåL˜m\Ù ¢ü·¹sD¢Öu T°¥¢-1UÉkT€Ù UWP–º` e׬ڸ†Þ~…÷ÂGAæA),×�—ý·éñx<÷¤ôKþ(x<�ç^dÈ}¨ ©yÀÛ úHMþw¡M^¬2ì§ñƆ‡r%Þõ)ÖmŸ#òÿÔ:‚ìc¢WŠ]Ñ›rL èšþSânSÆXΞ>,Ž«žëpªF#Ÿß‚‹îr3¶SSãñÿõ“OþH1”± çׯÖÖ†Q–dyNž§äYÎÂlÌ�½FP /ï|´IuHâˆ~“V¢Y˜ërpï8ÿë_ÿ]Ž,ôØ Sû™ž;ÉX7& CCab,&Nb6{E™ ¨ÛIØØLÙ5‘”mòB‹9|`’WÞºÁÞù1æÆ ^}ë:_x`–g¿û®¼ùú·•RÜi¿ù;7nŠ„­¹^wÏCí j…÷Jž×õ³~õ#z×Ï#¢¹RcÃ×—¼øj>±²ÑºÐŒ˜ƒ�qÒI�¶Ó.M™>Í:ôUÐz¦u8X Ž*M@sî-- dZŸ~µF&¥éúqçEjÏ×:E˶å6t݃ˆ=&X¦çBö�$NZTš©�)9Z‰+Y1®ŸÜßÚ<�¬ô[‡��›D üþΠo. P|BˆH¿¬\,Ð-Ksþ[½u$Lnè¸Û#LæA:æxnå)*K[� ±ù‰ì lRä•äl¾ŸÀ¬«)Êy…­³ÿ¸ÊHúñ�1`7H)(�óߪÇãñxÈãñx<ží 8 P`iÖKÜån®wTCÚÉHÓU²4w4%owëF‡€kî§w%1ÀSMò]Ùž‘#D(@΢縜þHpVfÈës™ªmc ÿìѾuháhGA+Š’å¥AûòÅ�ñ~? Š¢ M³Ò$’süp—Éñ˜Qœ½¸É•9Ýn—¼Ðdi�N+àø‘I~û·~›ñ®f'LLefö I‘åmÒT»&[ SA Ììj3Lu¹ý{'¸peƒS÷MÓnG¼úÖ Nß?[ F×nlò—ÿêßáðžw‚a ¿÷üýY¯Ø{Oåù±½›—X¿ü:O¹SIvvóè�ç7÷-¯ÑÓuÌÔ –Rw,B�3Ç:kШäûÉ\x>:¥ Zµ‚ªEé®\˾�¾WÍz¸aÝM5 @Ô: «(D¶‘?ÈÝ€¢rlwŸ£;6ˆù¨m„w«·›×ïW€ž¿�y<¸$î·&€¯;÷1€?Öw(ýð5>Dôj¶yme¸üá´Î6'ý7 .„k�/µ§Ù8ne…7çf¹Bm‰A"Ú 8 k É‚lÕɳÀ·wèþ™@©o ¢Í ÄX•žÖý7ìñx<÷Šÿñ—ýQðx<ϽN‘c(5kÞöoR,Êy½úÌÒ¶uê´ôö×)4Æñb:4Š9"âæÊ©�ìŒ]6ÊýãnX-I”<«�×Ù‡ ìXkÉŠƒê\ú .+ëþ©Y£Z'µæוñóO|÷ÄøX§Ý¡ÕŠiÇqØ ÃöåËíkW7ÆÒ´tQä9i–…ÂC'&ˆB5RþzýÝUzÃ�$i¡‹œ>:ÏTü>;er÷):cÓ(”îžn')§óBë$$ILoPÐiÇ´Û1½~^N�wc–V‡ÿ8?ÐÅ5?=ÏÒò€K×6yþ…×ÉÖ_çNrmyš?|íÑ{$Ï�%]_bíâ»w6Ü[¨—ó«ßÛ8yõjhƒRÊ€L'ŽKHš])¦qôN<¿ŸTC5‹�I±–ÏÞÉO—ÁŒG(©³6‹AÍaßv–ÿÇ~]‚@qøD›]»'P* Áa["�%®+þöåñx<­?÷Û?%91LÏo³vßÿ�øÓÀ,Ÿ"¢óy©—m^M²Í³HóCˆ 2¢ÖM‰;)aÒ5'¢ënãUÇ‚èÂä9 °aà°‘YLÉ«:¢h£Ï„å´ÉtS)õ×vêÊ�ûáý uÌy%~ÏŸÍ�Çã �Çãñxn—)”:ŒÕ:jš^ûW�iƒƒ²uîBÐÅ*ƒ~¡ÒÉvî 7 ¡à¬{Á”vÌGjˆ5ל…ƒð#éÆ/èãjƒi LûÊZ! Åfö�ú \-QbCj�Œ«'Ô쓚Uð—N-|­ÝnÓjµi·;2Öé¨V+VQ„¡Ýóç×:K‹ýVQèÒ Tiš³kBqâÈ8£è‹2?´x÷Í?f~:e§|xý �=4G+ KP„Q2ÖMÈ5ˆ¨2'P¡Y.LN´P(©fvºÍf?gj¢Eo˜£dÈoýÆÿK+î4ÿï3ß Ðá=“çgíÒ{ V®s§%ƒ|²ÿÒÊéóïŠä¡à„=S6a \¨‚8ÆfÊi¯‚ë*NžkÖÔP6h¢Xa´,µdz¡xøõþEb€+4�Læåâ^Ã,ö¼rs5»kDeá˜ù½»£è6œ=£…&[wÃ|´¿ey<Ï­@¿ó8°ß¹¶æÀ? vÀÌý_?ü[€âÞ@Dç‹Åpu3ݸå›×v‹ÎÚ|QÁ€¨³HÒ͵ Æ” w›û:&¯‚AÆÖ¡ÔV]‰hS'‘§ÚF)L.ŸJ Š¸d�A6$�èÿ¸¸ÃÐo!ð@ìü¸ üÀŸÍ�Çso¢øË¿â�‚Çãñx>kìŽ1£P ÄN[ÄÌ7¥ß0…Mž­0¤ˆàˆ8î[ Õ×Z—íG<n\،⴨øE™‰Þ‘ã¤tœÃE&¸™=©>,ލ^MH<3-µÝ¸î¦ýI�ü¹ùÎcívÜîté”. �N‡v«E+‰‚VEƒÍ¼sáÂz™¨Ðš,ËÈ?þä9÷&ì™mÍh-üµ_xš£ ëÜñØQÎ] ˆÂˆ“GÇKá'‰#âVD B �vD§�”N v+b¬Ûb£WEÓ»:¬­§tÚ!ãc óoý]æ¦2î¿þ½¯ÒO[ŸÇ\MôpmLçý‰OYäY'lm%)AK㥺J“":„#Ö¨­i3�R!‚®sóضFìq^ð0Ë´©Ã´¬9Xp…$…ÂΘh/¿Ám÷Âo“•¬Ìß©?‹=�Ç @�ÇãñÜ-º(u ˜©qýÔäýQޤ±õn[p# Q› úh- oÞ«æ°J%îz#œ?¶ßæ�pª1$VpC’ä}ŸZd/`w´®qHZåÃôê �’†ðo�ÎŒ/µÕø¿¹;ù§–r¹°"êæÞN²»ÝíÒnw̧M;iÑí´T…a„í‹ÖÛׯovó\“eyéÊò”v�˜Äì9ßyö,7®¼Åä˜æN�1Mï" "â8"+¯¿×ç©Ç¦i'e¨€ h·bZ­ˆa*¥Khl,a0Ô(ðüKïÑ‘·¹[¼u=úùÉóèÕl÷ÆsƒS×.�&4’‡Òèø±Øe5õ�Q £÷£nüZò€ê©yëÚsEQãù‹e³8œ¿�~exƒ‘gs�šÓ|‚Ûö®€eqÃJJ¥K°ë¸—„ €ƒÇÚLÍNACè¶ÑaÜÜúæå…qü,ùÛ�ÇãñÜ®ô{G€GWª^.í\úZü‹À >«Xqh]Š´§ó^¦ó!¢3DçJŠ,]~B)ÒPt™OŒèDQ¢¤¨0SA�£Â(U B­‚@ �¨ DT@¶c ‚®BMhÉC¥‚Џ"N>¥@#ò¸Î…²sU�uùˆTê"²åú ­ TùQ¢Á JÎO}ý>ðK€f‡$½x?ÈÁÍ�Ê«ÀY{<�çñx<ÏÝf8t'�ûì³Fä©k§°8ËE E±J¿7¨wíTà:ÚNÅÁ`–›º·�kF‡Ârµ�wôDü’œP=¦pd1Ó�€¦Ízvš÷òGƒUÛS};†GÛêcÐ×Ç£p7†3©~½GñT§Ým·Œ¨Ý¥ÓiÓn}ü‰U…‘ät.œ_ë./’zŸ*§� ìî8ž)Aé)®¦O©÷õv7jBtQìñ¶ÿ7¦‚ŸíiYl…Q«ã…HúîP^9ÐMæºínXæj·KGP§ ×&‰Â GñúZÖ¾tq}|s3 �ˆßÿùÿàwXÚœ&Ž¢("Š£²Œ£°,ßùhÀîé‡öu ð¬oµcâ("Í4Ï=ÿš ûv×øXø) Ïrž@t+}¿ôÆKÅÌ`@ R„ZåJ y Òä�q„ Wüi=3Q­§[Â+á)´j1=¡Ï§_NßÕûŠ!¢ÍöjucÃHå×"R²Ù�ÓŒ{­Æ'CŸ ÕéŽXäÞÜ¢;h¸ ýíÆãñxî´ôí‡@NÙ„/"”¨÷�×o/ÜS ð/÷ñyÄ5FÌA—¥l5­sëþG(çźk¬ §TUر"Ö$€Æ¶­ºyÌ´›ýÑm·£Í´2Ó²5 `×SbC @ªëm�­ ¬Óú#à—�”Û îŧQê$"âĉ~xÓŸ½�Çso£ø+^òx<ÏçŽá(°E=JÕ›er•ˆ@`ŸïÚz=d0X%Ï´]nø&·t—YÜиB�äÔü€\E� õ}8¸Ì%„�ÇA@´^àlú-uVÆ)*¢Rqd<Ú¢ûoM?eµî‰º1…»£ ˆ6µ,^ÈùðP·µÐjµétLX¸NG:­–j%B•„QçÚµ^ëê•�±_ÿí—Ô}óç w…õ~D?/E�0ŠÊ2N"¢0,§Uòƒ·6yô�]e®Ÿ0 KñçÍ7_cßîw›gÞ8ÍåÅÙÏržŸ«éÂÊóé¡•E-E äª�<FÑ,ü¨@!Zç\Fˆ_Lf¢÷£‡U¦&±›ç§%‹ÙƒÙ[ùÃé*€U{å–Æå ?�‚M³�ã2 V;w½0R9Õe|r¥Ãm;|,nû¡~ÖýíÅãñxî­ïÛ!ÂO¡sÞ ä÷€5nƒ™SO…ÀÏó9úgŠ-¨,eiõ4Ù^DçN½íÃL`0uVˆ1Nåýš�ªY¿G`=¢±XQ¨’ë+ä˜í™yÓGeÜRwLÞù5 ¸=ñ'™~PN,»ð»Þ ìñx<^òx<�çÓdá8Š]Í/ê[ç��l›ÇŽÛ¦Ÿ"ß ×Û@4ˆc#rºcê, Â��™àѤ)S=¸õÁ%i%Ïʉ`™½(!´]Á6–ˆ~qœ÷ÓQר ×µ/”äß�”¯OÇáB %X›ˆ‚9“–„«™þ ÂÞ|·=ÕiwHZm:­V)u»ZI.xûý ×ÿèw�$w áÊb‚¨qS:€âòC9–aáè àƒóCŽì‹è¯}ÄÌdÁÝæêò ôÚòü§;»ÿÞÍó£ôF>Ý{±wòê((ÅMˆHÖRŒóWh1Ô„|«œ3áÙ°“¼”<¨6Õ^@ÙffCv“"‘ô‹ƒÅ[é×Õ|W¶�ãü³Ë*ˆ#ÈÖP Kg¯ ®Æ+œ§Ià¶=x¬ÅÌü.‚ !âÔ˺#–ià*°ˆ¿¥x<ÏÝ�~?ðUÀeä;@q›"�þðäçÒ$‚è ÀºoŒ £u† ›”íÁ -ºþ ¡â2¸n§4‘.¬˜S'þ˜6•öe™—%HÅ dÝG pCÀQu©ày�ß„Û ÚŒC�5]óÿÉ÷€Kþ¬õx</y<�Çs/0‡p ¥Z¸/Ã+…ƒYîj(n]ƒ$yºBosˆ}@S·®Ùu€mäê:£ŸùVÃÈYi‡è¦â×ä~5`—£áv(–³Çy'�Õ-†2;‰ðgdñ©±v7œîvÆ'› h e5BéFᔂ¼?Ô/ϴ≉N»Õíti—9‚:”ΠV¯ýÊ/v[RÌr—É Åc:mEœ$´¬DdòmörnܼÉ�¹>I$ÜmD¿ûÒ—*¹” èÎbâÞÎó“Ýá뽓Wß�vž«H¤tý„€\éZÑs¤ëÇÍ„Xe-ˆZO'Ç‚¥à8BàŠ—•R‘ëÝÅÃo?”1)@¤éD}J5ˆ?®bÓ¬åºûŒ#«Š‹pv!fï¡I¢8i™à0¢~TÛ%àª�ëïñx<Ÿ,íï¾!È'^±ç€ç¹ÌœúÊCÀ?tÀðÿ³w§±rÝi~ß¿ÏYj¿;wñr'%j_¨mzU«5ã H^8N#ïó âAà ¯‚F2H<Î � ‚q0ÎŒ{¦=Ó‹Z­V·ZK·¤%J¤îÛå%ï¾TÕ9ÿÇPá€×uºÈÛ”HJÏ(œ:KÕ-«êÖ­_=Ïs—s.ÃÏòÁŽ!ê«ðíâ®ï÷3y„¢JÈ�HPq£}ÿ5R ý��;£ª‰ | 9é›!$(·Cª>DR·|ïVµeKWÒ§Ý-ˆh_…´\^±g«1ÆXdŒ1ÆÜI"�iÐ]Å_H RÞþMJš"´pcÐåT3Úës´×ò š!n|~�”W…+Bø©³ß®øŸ =N¥òÝŸä^É©úÖ©›à\çë|ì¶KüóÓùZý…îµÇõz<ÒlF“õêT5Ž–�^iÄñH%ŽkÕ•�ÚúÞîfuk£Z�ªµŸ�;�•�~þÒaá‹3313—Ò›÷“ƨ ÎeÔ+]vné _˜�/Üï>:t7ÍùÁUºŸ®íœýe¶ee�'‚öfý�;D$‹Ü …-aøÓ¿ô×A®T^©Þ“œK §>¬ôM[î\çHçX¾+_2'Ü]NõÆçö@yWG(ŸoÔhELhQo4ÙxÀ£”c¡à<°f¿6Œ1ævTý¸%ð7�_òZœå-à·ÀĽO7‹è0_~ÖO×ÏÙq™e(ªƒŠ@E{8‡àÐþàÆWêàgðˆ¯’ÈNÅ>ÅQX¤ªH_x@ƒ· þ: "PV"ê.EáÏ ·@²œ£Ÿ¹Â_Ëöl5Æ €Œ1Ƙ;Qز! JÚA „U;ᬠßòa�Õ•%º�|@Ø#€2|”aˆÔW¤B ·{ @ßdÙ‚,jRyI÷Å—Ù‹Zú�qD–ïàãösœ¦!JqûRÍå»ë3»¦#7Ýh´h5ÉT5ݳ€œjÖîfY³V«máXÈõÂÇÅõêæz£Á»Ÿœœ«_»ô_AÝ,á{o¬hp›¶(†=‡ŒŒ� •Ô$•…;^x‡—ë€û5aŒ1·» è¥CÀ~‰8à'Àe‚žzø[@�»’mü\烗ù>Tý¨â\‘¸¨êï‹�PuD½ã\åK?¨GûBŸ"Œ*–1¨ë«N‡:>Xr9Å8—Çê¿ã«’ÖTõßïq‹¤+•­Às @�*Þ¯€ö,5Ƙ»‡ð¿ü™Ý Æc¾ŠFQ=2€ä)ö…Ý8z¤ÿ¿îÙ,_dmy•<×ìò;Â`Çß~ Zd |À߀’±óJü©6Ò×9-²eÈ@yÑ”•ìvŸe†¥0•·+Ïwfï�ª¤ã�FƒÑF£>^I¶ˆyžáœR¯7 p¦ãÞOã˜ó'?nŒæ�½|½qü>N^ÚÀØ®Ã46Mß©s~Ö²ÑÕ·Ö\þXU"�D´7ëGrE–o!tx~=:Õ*oTGKÑ.@(¯h"Öóùûío­Ÿ%ÆӀŸíŸ?R�øóƒÂžá¡þ°0´é¯Ú¾«ÂÔ¶Qâ8½Ù¹=86®36çÇcî¤è'ÏûTt·A^æo]ôd«¨ºïî�¤>ì‘4ǹß]5Çå]D¤hW„?ª®¨ª‰‹ó.(#v³uðùŽ\ßüD|+¸B4àƒ §98—÷½�/*—ðs‚º ‘Ÿïƒ€‚>Tu ¬p‹$Ëé8ð˽äT†µ•r›8Ýù'Ü&:ˆˆ8Ç7Ú³[Jg«ÑŒš�f4YM·V’¸B¡ÝnS«Õ‰ã˜÷�¸”¢#|…ÌÌOð³÷¤›%Ô'w0¾çÁ;kÎOÒ=ÛÞ~íÍîÖå%�T¥Šæ‘ ‹œf‘Rð•6‚¯â6( XRùye[r:y˜ŒF�®†jцžë>Öy/;˜­@A!‚·GÛú‚ ž0 Ú`›7oPN¤Ôê»5©7[€àÝX°3œÒo 8¬ØË¿1ÆÜÉ!ÐË ào!RGUé×^®ÞÚèH ø;À½Üe\Þ ZÀ)ª ª(9êªy¸ÿúL _¡#½c@ñÇ¢Ò×Ö føˆ~ÀWõ½%Êñ�’WNÅ>PÅŸwÇ�¿–¹…â¥d ôy� ý•?º†D¬Ú³ÒcîÊèÏí^0Æcè©�îGdª€ÁŽÏR‚¥ßàÉõ…'þz²|…Õå%²®–u‘ò+ÁA40ó [NúÂ$¹@ªa5”̺´úE³ìF‰‚Ê ! Ñɧ9Ñ~žÓ¤(…†ËâÚ3û¶¥Ñ¶‘f+žhÔG>«ŠãçY–qþÜYT•/‹J­ÅĦ=äÝ6ëk‹¬®Ìãò6¹‹ùèü=¼{rª…æ–]Œî¼ïΘó¹ùÎÄâ›ë»g/P‰Ä]Ÿó+�’6k¾ªghUŒˆ$ï%£éÑäaY—-%½ãü30ÑÅlöëγ�+(¾Ê­ôöýÏÏõò·)¸X8û§<è)›! D±°k�±É1$Š6î(ÀMTu€KÀ5{¹7Ƙ»Cíüt ð»¨J0Ï!’?®p‹Mzbð;Àý€Ü-@¨¢8Ô¹ è)ö\Þ‰p® ª„-”Õeø·Û ªø6p>0ò…ËEP䃀âr><ò¡Žs¹oý+NAŽ¡îUà·X¼œn¾ $€•Ê‘3öl4Æ«2Æc¾,Æ�HÔDµ¤ÂGA"zTT ÇPR@¤@ž-°¼´Šº ¸Àõ>áÉAUÐÐQðAÈCxdp«@ƒ+VU¢H’cn$}“d…ÍA5†„јVYÊîç½îÓÌ‚·+[©ýý±è™D]½Z©Vb‰¤YM[N~úÉ—&å‰#O‘$ ôøÖwÝn—Z­ÆÙKÿì_v™¹ªP¨´Æ™:ôÔí�󃶳Öê¯W÷]:NU J.v.‹U²ÈõO#äÆfú”·€‹f¢Jåg•ÃÑ‚ì„ÒgP4nÍßo?×þ” Êð"#‚çŽ>ñ|›ý¥JöaP9ȶé”ÍÛLj“´ô6n< o±®—g/ñÆs×…@;€ç@Ððµ?^ÎâÝÊ hxx H¹CùÀÆ]oë†ÁÅÒ-ø<þW¸¢ê‚· .èy¬Pðá€"À¡.š ø ¨?$¢oFÐ×Õ®¢o¿æùÄKñNà›@Š/3èÉ€—€ ö,4Ƙ»—ð¿Z�1ÆSb°H|•žPR�`›?f-ø³Ns:íyV—ÚP2ã'Ü^*‘uJXm¤–0i˜-¡„—\¡á�Ê«l��ó€ti©ÐábçiÞϰ�F‘üà?úæsùÂܶ_}·;¿²¼\«T+•8®TÓ¤úe €šÍGž|Š4­0Ìü¢òßÿA‡v‡ë6?ðu’jãvÌùQWíœXŸ¾òv6±Þ!ÅIŒæ‘£ú Ò[|ø”Åù¾eYJÙAª/V÷Å—£QÒaÕ0nL?éüNû}·M»¨*>ˆ ÃBAÛ·þê:¥¬œ WÞ&ndMµZåFýÙ÷3¾ÿJ…¸Rcêà“ÄÕú8ç'»ØÞ2÷fgû¼Äâ4V$AóHÉ¢\³ =HXñS¬—–ªU^M·$Ÿ$�Ñe$8($ZÓË݇ºogåKA°TVmão'Jÿì´/Rç|ÅO±U¿- �DÏ—©T…]›4Z#ˆ”Öì ¾†ÔöY/‚Ÿ%{7Ƙ/Kô³mÀ  1HhPŠ~xhó9™8ôX<\´‡›º“*€õAŽæ¨†mઠø*!ÀÏ rE{6|à£ê‚êEáúyˆ(®ß‡U@}óƒú~¦HŒú è*𪈼 d|Nd�*È·@w ê ’?.Ù³Îc¬ÈcŒùªh rÕ Û½ !¿�07*ÖIê—y¶ÂÊÒYî[l…Ã}|¾äCœþ�^ùeý÷Õ?>¸pNù�­½¢ T+¯pt�]„ˆ*ѵýÅw[£>ÕXhw®fëíÚÉ�?l~|æÌÜêòrÒ]]¡„ƒ¬‹,WÑqî@Õj­þÔëunÆÇ§ÿÓ?ëô…@­mû©�m"J*tWi/^eåÊ™[;çGÜRwbéWk{®œ%Å£‹æQN)Yì+Æú+Åœ"¬êß^r ô(z}8œËüŒu>,?Ÿ§ØïC Â꟠͛ë»\ñ3ñ@½eQm”ƒ¯Rà4Èk 'ås$ 2|¡<Ž2E¿\¶g›1ÆXdŒ1Æ|M�ìG¨£ƒZÁÉ Á÷åÁ!¡¯J'ë.°¼°Š2 ¥>ø)¥%3Eü§ø(øª )Σ0`¬I8H"_”¼£cé[<,ëL „äÀþ–üé?ÿfƒ€ªºÙµõ+nueêø‡Çôƒ÷�¦¢(ê�D„޲DÖmÄÜA*• Oyšf³ÉÍrþá?n³ºÆ þCƒ[HÑnÞX?ººçÒ1­çŽ JD/üi'™¨"€Óþ`§[ÂÀ'Ìqúוèª$•ŸVˆæä t})tÝ&÷þúóëÑEUûó—ÏŸÒ & £$¼%•BøJ ð<åáϦí)[wŽ‘$•ÒàfÈ Ÿ€™4 \r{©6Ƙ/¯ú?øùT5ôí ~¼(Ÿ³ñC�Ö�ƒE t¨òÒëó{r|У8×´úôöûßó.ߪMŠ*z|�ó€ju¾UÒ¿ÍåP,ñ3BÛ¨~¬êN ò°Æç,šG€�#@TÒÂ`¹¨ü¹jÏ2cŒùR@ÿÊîcŒ1ææª;Ù�ƒ0˜øEÉö 3Ûàâ%£½6ÏÊr'ÜÁåuX1�à?°U¥?òü~:ä?W*?ážä¤Kåð¿ÿÓ§kOÙS¢“ç텵ι�>Ørü£�•nwI*ÕµKË«sÛ´óxW3==ªÙnîI’òÄ‘'e£þÏÙåÍw·R£«ëôQWé~²vÏ•·ò‰µuIqšŠºÄiÖ›õ£þ@(o3RüFAú¶gHõÅÊÞøbôŽŠ (ýp€èˆ~Úy¦s4Ÿvë¨Ó²P ?°9ŒS´ï1Uƒ  %O%U†iŽDLï¥Zo lÙæ)åüeÊø}ËÀ9`Ý^ž�1æ+Õ@¾ì¾…¤xW�ŸË/Äø¡Gb`poMðP-×½^$QBðU?U¥wŒˆŸÃ£ø¶m(¾»>¼ŠuŠVq‚âÃ$z¤"P½¾tNáªÇAÏ9_™—MÀ7�)Êßkœ^²÷Æc�1Æc¼a° "@„/AË7¡X§' p<éÛ×£n�•å:ë9 HqÅþºA)øm0hn‰Ÿ8ëgõËAó‹Â6_጗p›:•%‰«?â`t‰{Qb€±Ñ”òû�×yh*bˆåNw±“宕&ãÇ®Î;yúLvnæR'»rqóùn€U•™$ëlî ÷Þw?ÓÓ»Øßîÿø3–•�k O<±s›pÏVaû–ˆz.Í*Ç>v¼ÿ‘ãƒ3ÝÙű¹7»Ûæ¯h*�¨£.VÍbþŠKŸ¾b­?h!s@,.}=ÙœžH£Ãdl„õ?ZÑ+ÙýÙ[Ýdz9ÂÇ–sJ ªÚ?çGÕÁmÕíÝ|04h>QXVý”ÎýIÒÞœZ£ÅœŸáÕ<Á1ßp8,ØË±1Æ|C _pxŒž°Ç°j±|·¨Êð¾¨@h> š„[Nq.(�¢úÇWêôÖ‹ªœË àg´~“¢µ\t½’GÕõ½7‰Š€)ÌÝÕ\AÎÒ«ò‰Žß–Ö¬sy‚êÀà Z6zðmà—€Ú³Êc¾|„ò¯í^0Æc~;-Ѓ £xf¥aªp´�ß^þÑqž-±´°L–+:–ùQÚšKQ|E’ŠjøïZÐE‚ºþ6p@8”?>E£ò3”Ev~ãkñßøÝíIµ’²wÏh´g÷ˆ0ĵõö•Z‰D•—OŸÿUûêåÑ÷Ξ››Z¾ö@�ïæš¸Üf•J•o|óÛˆ¿-U8wYùè”ãÄIljSÊÒŠåîÛñ­§b;ÇüF™Óö±Ù•w~ÿ­3ÇÛà\âÈ"§YDy¸¡Šçwûð°Xâ—ê__9]êÔ÷[€­@ýÖUå}3�záŽ:ì¨æ¨ËQ4˜Å£Š}µo~�æøï‚(ø.Íkà.«êŒˆœWÕ��Un—¹|'ð `”ë¹…Òý1pÊžEÆó¥€¬ÈcŒ¹E¶€ìªCf Ù'ôS�(ho¥J§3ÏÊâ:ª:¼YTö”$U´|+9¬B"„ç élú‡OoûæX«VMÓTª• µZEyh*«år§ÙµõöÕ‘$Þ´ÚÍ–_üøÓcÌ_›øàÌéÅV{mk3ïìæ6›œœâñ'žäóri¶„N)'N9Öוz]xüpÄ7ŸŠÙ¶I¸YkY>÷òÅù×ÿè“sú+ÁTAJZÿ P¶Íï‹Ît«Õ\þ{¢.¥§•Ãæ’B˜D ™›r´¿Ýù@Ç4cU ³ÿ8sÚØàƒ©A¡Mò AjTöOô�÷뗙ܒ²}×(IZ”!nâ)™t¸dö’kŒ1Ƈ@¯�ß¶ù}sx¸ÂíäC¡&°eÀ©Â�ð¡Nßûhç:ô(½ýÎuûç¹. }sƒ  E €T;ªndF5ï-EdXáà®v6O»¾›ñ.?æíÙcŒ1_úèÿ·{ÁcŒ¹u"Ð]ˆL£D„ŸåŠ!!n÷ÎwY]�gm%CU‡�‘ ´!ì∯ú)ZnU>¨ žrÈïïûF¶^k´“±8Nãj¥JµZat¤Æc�NFiåÖºÙêj·»2’¦›Ï.­œzçäÉ«óWfâ$ÏZÜF÷ìœæðá¸]kwOýÁ‡g_}kn¹ JÀ·,-XQ¸8¨þ8ÝŸºú5t¾N&2˜Ì�H´©§;OvßÎ÷竃Cåzµ‚¯òûúƒ™‚*¾÷‹OOý:†?ž†g þçPoELï¡Þhm$ÜÙ@•Ð pXµ—YcŒ1%!P1èŸg€$¨øˆÉéÑO@Þæ¸�|p,„65 Zœ EOo©.Ç·…ëú9»¯ù³Î³ÙLéã è[WCò“þù@(ø ( }|%]_¸Þ6‰a÷�#㣈DïŒáô&¢.p˜³—UcŒ17½>| ØDàê�×ArHæèwxXänࢨUUWSÍ«‚T­¢®ª½S^U—×Tªn\h«ËÛŠ¶Uó6H[]¶|¶Þrî"ÙÌê(ð$pˆ ü6Nƒ¾ ,Ù³Äcl�1Æcn�1àÐB$¨î)›ó#ô‘p¶‰‡?{βE–VÈsíkå¦}‚ø`;ˆ�T €Ò©4à?ɯº§–ni�H³5B5ÒÕkñ¸äi-­V¨T>;¥¾w"Ú¾­1,ÃÒkkíÙÅ+—6ý௿'Üf=ü([·nãn¶ÐÉ.þýWßÿ+ÿÿ^Úù­o%>Õ*¯¦�Ê¢ì§çB ËChE.g‡G^ë½2¬… ácÌ9 [ÙëAü;Jª~‚ƒðíÞ€íÓU6m%ŠSÊC¹EA�.'g/¥ÆcnFý¿ú‘@ôm´ò5ˆb®‹–!ZðÛýCà]àŠÝ{w…MÀ#À½@D9Ö€Ÿ'ìn3Ƙ¯á¬ÈcŒùlö!’ÎØGÂ(œsþ2‹… /¬q´×çXšo •‚ªC”‚–T ªC*Š‚`¨�ƒüݵ MV’±fk„f³E«Ù‚n­¾¾˜Ž‹¦I¯"¨’J³QåñG§¤ÑH�rßûÞ_pîÜn·§žþFGG¹›­çnñï¾rôÏEA  hÊ*Qõ‡•{£+ÑÃ()= ,Ä0ƒãF¸V|¼ûÌø¯ò=�5ýAH ƒ+àT˪é‚X& u =VÇ&vì%­Ô†<7þ”\ßpèØK§1Ƙ›Õø¯ÿÕào{!BÝh�‚ƒdDûJÔýù  ¿>±/ Üi$Ýò°Â÷¶pÀ{ ¯ëvÿcŒ@ÆcŒù|ÅÀn�� â+l" œoä3áÓ‘€!~ýúôÛµå9VWs® ª�•>¨Ÿ•ÒÿA9åa”îT(ñX{nâ·|_³ÞHš##:ÒhI£Þ”îJµÕYIÆÒ¤%iJ%M™šl|6H¢("43·°ü¯ÿ¿ÿ§‰ªp‰ßúöó$IÂÝìƒ —Žÿ7'.ÿœpB� (ŠS*/Wv&§¢#dŒ>r�«ÌG0œ ]7•¾ÝþÝÍÇhÄ9”‡‰~[�e†íéTñ‚ÔÈ+¯ü©Ö#v¡ÑjݪÖnCŽ[ÎËöriŒ1fÁOx8}bÔ� Ú@a]ˆ×T@À—Ðúó¬G�£6îöR´<<$H ¿Ý )ª€Ho ðð°h÷ 1Æ|å c÷‚1ÆóŪû�)P Cž’YAeÕ?þPåÙ K‹‹t; ªøãûÛƒKY]‚Rð”¯3\ìr¾Ó¾2½;Êw7êMFFF¥ÙjRKÑúBe¼»–´*• ÕjJ¥Re÷®ìðþÇüçÙæÉK ·ÙÔÔ&{üw³SWç>ùðÍŸïù£Úô?üÃSTIŽ&ãé;ÉYg0(ƒñæó­‹Ç¢«3{eÝMÃpËb¾«öZ繩³DRyªaZ2 (<Ðßð Ì$¦÷Õ›C¢¸äWò ßOp=p˜µ—GcŒ1~"àHþÔø�p#m-ƒ8¼²V¦ | œN]»Ç¿ °¸ØDxŠþß�^®Ù]hŒ1Æ*€Œ1ƘÛk8€D ÂÐÂ9A^ØN‚Ë•évXœ_Á¹ MD@Âþö•Íf «~ÂýeŸƒ�¹vòÂúì¡É$šj¶ZŸA4M©WÖæÒ ÍÓj¥Òk G­Zᑇ&er²Æüüò'L­æømDQ„ˆPo4è´Ût:�¯ÔüUuGOŸùäâ‡G*¸?ªMÿ Š"€RP¢ËQ¥úrúˆ,Èa¡<Ô€ˆ¶ÛâÞYÿÝÎqj(ªZyùÚt|rõiÉt †Ójt¾û`ëµì±±ù’Y@-«üñ•n~Ž�"HßzØnË=6ï#Ž+¨ð�á³€”~—�‹ÖfÇcÌß}E»·Íܘ“À_“ïRD¾ì0Û1‚-ö¹b[|Šê‡À) ·ÿ�[*ö‡ŠÐ'Å ßs‡N¢ús›ádŒ1&$üS«2Æcn#AÙ�°H@@µlÖ�ß ¨B¸½à×%ŽŸ³¾æçéõ IP†Tüú†ñ—œ÷ÇË(ŠPÕÁ£O„ƒÝÅæ3Ý…û[µjµÕ¥5Ò¢ÙhŠvê�Õ¹x<’4-*‚td¤ÎOúcŸ7©^¯S«Õi4t»ÝÞͪÕj,--Òh49{ö 7#MS¾ñÍçz×s·Éœ®ÿâ�·/¯Î\Ø Ð €ªÓŒ (Š ´‘Ú÷ÓCÑåè1)åß@§£z¼ýõì×îž|�0\sQõ‡WGW:�‹RaÕÑäXço¹íµê´¿N¤o[ÐáÍ>€§ø…ܶÆbvî¥RkÜ\û¶òú¹!B À9 m/ƒÆc6üL¿âÆÌߎžÛ½xä~ЈPX¦îXv@?Ng­2h£$�ûAjô„CC [Úùô ~Œ1ÆX 8cŒ1ænhó ìa Â!Â@ =RvYÞ¹6Ë‹ó¬­fâ+>”Á„ëÔ)"20*–ʶ‡³‰•gׯm¾OÖ5ë�¨ÙÑV³I³9­/¤£�•t4MÒ(MSÞyûÇlÞÔáflݶ�$ŽÖÖV{A�ˆôª~*•J/Ä9sæ47cïÞýì?p�»Íz–/ÿì篴óµå) úGµé?FQP*?M·%ŸÄOÓe�ßXñRãB÷¡ì�îcÙüõð¼â:¢³ëµÊ«×žˆ–ò{aÚnKå—íßÝ|œŠ8€Òª9Š*åC‚ÒŠ°ë`‹FkÊùø[Îjg­'¿1Ƙ ?Uà›À3@Äpà§Àk@N·§<< ŒQ¢¤ìÜ€ÓÅé²U¶–Š€­Àn`° ˆñoØþ›^ZïþÀðpX·»ÔcŒUcŒ1w�&È`œBI»·òê $ ~ú–}²î2‹óKt»Î_Ÿ¾.”òù?Åù��²mÁu*U—Ë ëWöm�uG£ÕÒ‘æÍVKªI=^½–Nœþt¥Ù¬ÿš›Ðk-÷äSÏ "Ì^™áÊ•™ëAP«5B§ÛÅå9‹‹‹¬¯¯q#îÙ9ÍáÃp7šYY=ûö+?ž¦Ÿþamú�“cq+ýUò¤¬²[Eðç¯KXÊw寷¿Ó=Kh_›5üyÂYV’¾97ž[~V:º†ÓDæò½õ_t¾5uU%èäÄ3Z�[ƒ'C$ìÜ[cbj ‰’ŸëãÏßd¥P\®j/uÆcn2ø‘"œyhrcÞ^–¹Qn¯û€ÇAw—ÌË+6úíÁ`ÊhÉYÐk€ò•$LÓÀÐi Ü_R>+Pñ×£'AÞ>µ÷Æc,2Æcîn›@ö5ðÂ6páß…ÅJÐ". +&”N{ž…kk v�èQ !Uúxê‚A£Rõs[Эùzõ¹ÎÕÃãÕd¤×®Õ¢ÑhÊ^Ð1�Ýà Šã˜§Ÿù�Ï. …<Ï9wî +++¸<'Ï3�ËËK\½:Ë0;wîâ¾Ã÷Sfu-Ó+×:2·Ðfq©C ãcU&Æ*lš¨R­DÜNÎ9}ýõŸËâÂàý_ÿvÿ»2' • ¢]·IÝ~¡óž65÷íØz´¤E`À)•ÍîŽÏ¯?#9-NëÑé¯g÷·ƒÇvðØõ�¹¾–qSÛ*l½gŒ$­¡N© „>hqš.™½´cŒÙ@ø³«˜ó³�sø+à¿ ·w ä0pèfÿæ³þöÛ°(½\¹\œÿ2†B2 lÝJoÉV�4üFV8\DJZ¿]ùøX°gƒ1Ƙ @ÿÖîcŒ1æÎ$ Ó »€x@�SZTÆ?€ÓŒµ•9–: çÿøÊ#õûÊ«€ )ø³:¸mœòpgaü±|ùp«^OZ##ÌÎÍuF:k‡¸A÷?ð;vÜà kkkœ={—ç½ÊŸj­Îùsg)EQ¯íÛÞ}ûÁ·S[977ùêìUÇÚâæÕN¶Ú·}¹/O4¥µÖŽ©×"jÕ„,‡Z5¥Ó�ôòü„(FG<|oJ­Êjee™_¼úJ/ £ðÿÉA†q#î£Î³Ý_æ{Ü…•@Tyź,»¤ú£+ÊÕî£ C(8OŽv¾5ùŽÛ”vÑ¾ŠŸ çT�æHoÎÕzó–„<Ã÷/g�5{93Ƴ�àg ø.ð 7f ø!p”[Íí›§©ðw_欬±Ãïë€Ì€Î€ÌóE¥Ð�sg‹�1`ÚRœ*}ØÀ¾ÍêÜwz¸ |Pœ®Ù3ÁcŒUcŒ1_n�}ÀVD×+ˆ„]®Êæÿø ûíý³;]gi~žõÕî„‚(ÔùõÀ° ÈW‰ (þ<EcÍùvûêνÒÝבhu2k†á¶mÛ΃=Â0óós\¼pž´RáÔÉOdË–­onÿfÐà �ÍôçJÞ„†Â*˜¨X_½2,« + «Àj±ìò¹Ðh§&>ð™F þ�%Qáo¿-8þ ðqúÌØ³ÀcŒUcŒ1_=#ˆF a9�_{‡�'¼ å[Ö]dáÚ2Y Xñn¸êG¢ ð­à®/‘¾ ¨¯roÄuâçÚ³û÷hçñRÊõZ¾=ýô³ÄIÂ�PU._¾È‰ãÒét 0::Ú ~&&&YͲ…OÎ_¸zé£v¶•ùºè–ŽDW±€Ö£äRë³(Šgë‘lÒ(Y‹Eª•4‰òªÕ"š«³cK€¥õhe¢7ºQz¥9>±²¥Y›ŽDb>goýê�ÞL¤²H#]Éwº7Û¿×=‰¨�‚ÿGohû7ʃÅôõù-ɇËÏHW7ÃpšÊ•ì`óµî³ã—ûfmß]eró8Qœ v:6.—­7¿1Ƙ †?/£Ü˜÷‹ªŸnqšÀ`oqQ|¸Qö} QTé-AŠm(×)Rìüz2…`U rE3�´·’( ‰@¬ƒÆ ½%1ÈõÐG U|(%HTÜ>ðßQðÔßVJ¿# ø-K Ÿ‚œ8¬Ø£ßcÌçAøßþÂîcŒ1æî²Ø�PA ‡àTAP±Tá7¨:Úk½ù@(€®B@�²¾rÉ ZËû} À³�¹ÍOdKßHÐ&Ôj5Ž<ùLo¹‘Öh§N�`ÛÖmLmÚŒªrêÚü§ÇùênQ�ºq:S]nŲµų� rªZI+03_cÇæ €Ž2×HÓ ð–‘3{vìm$É8Ÿ£N§Íûïeæò¥¾HÑÜMê»íç»GuÂePR<£(‘ªôQ”ðXoøø�L¥úÃÙýÑÅõ'ÅÑ€á\#þ¸{dô�üÉ]¶ï#Iku6rÜUàе—(cŒ1~¶˜æÆ\þ8ÍDôà&Ð" ’iT«AUwëàb_P|a(˜)ˆ~�(Ü>p ^¸OüM%<¦ðoO¨ØWXG9 œ>®Ú£ÞcŒ@ÆcŒ)!² Õi„ 0ü44ÈŸü¾ðX§]V–æXY솳‚0¨dè¿BðÇ~AðÛ$Ú�l®ÄѼcjóÖZÚKâZ3‰õ8ª×¢¨iÞ¼|îLãô©“}sl*• Gž|ºWt+äªùkG�ž]¾pfž€J*€þÃ(©¦i©¢iš ÀºÆ×Z™h+sÍ ZëvVc‘d|ÇôåMµê4Ÿ³v{�3g”¹¹ŒŽêâèÎèt·îæçÛÙê{ Ë ?¼xm9¨2+­à8 ( ‚Âõ°j¨ W;Iõ¥«�È|ö°@Ä*äùÛ?íüg�Ÿ¤UÍo&Ø ÖËÓ+o8kßÜ5ƳÁà§|xŒ³ ¼¼ (w8уãÀöàTÃ+éë}ŽÁŸ—’ùBà·ßè|?Áv,å·ÚE@w¸\´¶°Æc,2ÆcÌFTÙº„ò¹»08  ì×þcpÙ* s ¬¯åˆHÐÆ\È{sà8Õ`l¯¦ñ±oë¾½ÍÚÎñ4Þ6¬ Z»Ýæüù³¬,/Ój�°uÛv�·‚ªê/Ž;µtöä^7Pt¥Éæ"ª¥i">‚võŽ/ ùfšŽ‡P*ÒXèd÷íÝ�U+[¹�r§í¹n÷ü.\{÷_œºt-ÈK‚o̪úýl¿yªš|°<’¾½ø´¬¹=0œV“µìëûŽwÿö—ˆDLn¸Èëçí¼Æc6üÄÀÓÀ·€ Ã9àuàe Í]Jô�€ŽƒìÝ 2 LÛj€ÒO@]8G(|cë×Ë`†—¶öMŽ  Ì×€9úè¼µ‚5Æs§þð/í^0Æcî~cÀ x"CþΕ!ß¹¿CćDÝösW—ɳ�U?%Õ?åÔ_æ‘ñfýÝ»ã;­$žäðᥙ�O¿óƼ�@«‰H}ÐJ*Ò\èt/;G÷‘ûîÛ”DRãðîÜò«ÿÝ;Ÿ|´ê×`~S�¯ -¨ ÁpŽ�S*¯\ÛºöŒd: ù‰Æµîßyàƒü‰éE¼’34$rÀ%à"àì¥ÇcÌŸCÀï“ܘ�€ïWù=Ô&� |0Ôš@£8a@£JÈ〩rxR,Ö€Ð�eÐk@qbX¶G³1Æ €Œ1ÆóEÚº$-Ÿä×ïC ¶‰Së+ט»ºÞ×Ë��†Ê»zxøÈžÇ÷6k÷sèd®ýÒK߇<¯Þˆ4M¹Ù(Ïr&·ß³¸ojâ wˆÿùýÓúÓËsË>øCè +Ãd@U�2”ª–>¶:¹T_^º?º°ú„d®Ãå{&ÏvþÞc'tÇXç¦Ú¿y×€³@Ç^jŒ1Æl øÙ\?û¹1³Eðó±Ý{ zoÔ�Ð,Nu âòeOd”/‹°‡Õb¹f_ô0Æó% €¬œ1Æó%ƒìAäÔ xAÈ£ ¨ú*Å#aýCXŨk³¸0ß›Ìþ)§%C€…?}êÀßn&ñw€_œ!ë¾A™NœÎ4¤]kÄñäo €ÒHêI’@’l,jç®ýµGÞÅâ�ÙÅ—ÿ‡w?ý€pˆ3J¿ü„D i¦÷�PoŽÊìJZùÓ·öGŸÌîEBã(ËÞñQç?}ì µÔŠW–N­ÁÏ’½¼cŒÙ@ðS¾ < õ�—€7-„0ÆóïÙ»÷¹Î»Žãïï9sÙ™Ùûmv×ëø²v옘8Ô ¤ RhËE*P¤"E…ñ+B‚ J$*Q!@ÉðC I  \HêØ­‰�‹“Ú‰Û±]oìµ½ë™�Û·›j¥Gs4³ÇNb{^Ö£óÌyÎY­¾3:ZÍÇÏóˆ|‘J ""ò±ÓŽá¾ì<„@'„=áˆA¸†0&í€ÑYå*3>5D¾'ÂÝS¿ÌÇBP´þà8€AÄ*qñÒ)fFXZ¦7öpûöIнý˜ác½õůüÜkµ/Ýûlk´4K k¶2™ƒ'ï(üùã÷eu,eJZ8¼¢ðGDDÞGð-µ]À#À=€±2ìSø#""" €DDD¤› p³Ã@ ÌK‰0 ŒptÀÁÞ>–É–)O-µQÜþå}’»w/W�ˆ ),eðª8éé’7[^e•p°¶÷Ó a^[É}�Âë°Ô[2l Ç&slÝ1ÎàÈ(E$ërçäBõOw¨ýÒ¶ïy!»@ «ÔK¹Ç_ÝÙóOìŒ_z§·Céχ€sz”ˆˆÈû6¿ Hwx ø6pE@"""éÎã~³cà�D´Ðâî`f‰~X.#È÷ 11]fp$�·:Ìr03ððº}�c•.ð¾¸'ªœ®åÝ9ËrqÔÏ*Þ;¼-½3ÚúÝ—u30ëžHööÇl¹k˜‰µeâLŽ�Ý[ÏUþìÁgwOñؤˆfÆr_ÿî§ò{ž¾Ãfç³ÀEà%àÐÔãCDD®1øZj_~'ÝðMàÀYUPDDD‰ˆˆÈµrà$Ø `§��³$ƒ,4w¸‡Ðï´zYƒÌ2”úƘ¼m”bo&ñ…[p�\þ«ÖjUX%¦§XIåR\¢�uzá¤3:pÀ03 ¯·7—‰¢ «Ä™…Ê<88Nrf´-ó‚ž$§£LÖØ°µ—õ[&Éå‹)Kæ9�Ó“õÚC÷¼Yý“ûŸn®:A s,>6»¡ç/Ÿ¼¯øèÞ¾¥¶¨G†ˆˆ\cð“[jŸþØJº:ðà¯�WUAQ$"""Tx8>Grñ1Oæ@µ_cË},Ì"üœ Šz� ¼f€lÎÂ@¸,„fvôüÜiV‰�‡èëë§›Z%.Ô«Q¾Cq>40=>ÙÏ*Qm4ç÷=z ÿÂçÇñDØf|­dj}�-wMRêÄÌ:Ü`]à0f>5P[üã_xiñ‹;ÿ¯5T¼@ s Àg€‡‹�î]¯Ç…ˆˆ�üØRÛ<ÜĤ{Ø< 4TEQ$"""¦àEàe  ÷ä8m³„ÂŒ G'0 ',€L¶�ñ©)FÆ‹˜%g9†±ìÝ3§³GÞ½p¤Òl]ä&33îØv'Q­´Ò‹ q  Y·,FWÎ5hµˆòqÿÀð`žUàR­~ö™gþ·Ñj6iã! �P œŽ†Ç3l½{Œá±¢(N™(eW[ÛæÎÛ.U¿º{_ýþÍ=Ÿ©’® O" 2 Eq–¾ÁqнæÞ�£r¥‰»'§�Äf™R­:uéô©Å¦1°Ðh]hÄÑ|1ß“±\n1“Í7zKÅÌD±ç¶È,â:™œœ"Š"^~éEêõ:„rttñ‡ñhÿZ‡0îfmEKuå2Åá5½¬];ÅqÄõ4W]<3{ùòåj¥j‹•+™æb¥§µX°V³ôÍ×› ÍzmŠz-b™% aáC€ãá58¡Ä1LÏôÒÛ?€YHxüê®Y>‹ôæOß5è~ØÎÊbàSÀŽâ£{ÿ8 ¸""·¤ ð3À}@–tMà9àY ¦ò‰ˆˆˆ ¹YjÀ°Sà›ÁûHî¶b$!HÞÆˆ3FÊj‹—8î2�šã8+1°f3—­UËÔªœ½Ÿ:›/¼¾cíš-¶„ë¤\ž```€Ã‡þŸóçߥ�ÑÆÝ œ¥ h¸4Ù‚d~8�AEën›ˆFFú¸ÞÎ-TN<ÿÜÓÑHoïºLd9–YÊkž¬7¦7„×ÉÛ'Öö0<6Hg�M7XJÈ“d@x8M¸ö°Ø<L±²>à×�]ÀãúÜ""·œmÀÀWçUàI`N¥-'"""«ÅeàûËaP-±¨V‰=�¬k*áú¹|?Ó“?ƒ"3V`]ÎÕ/Í ¿xù ®³žž»î¹÷Çmxd”(ö+h5-¨Ì[�và`$J[(cÍšinDø³ØlÎ|þ©QÞs „va?'ÃÚ‚33c`8Ö£ŒNŒÅYëˆu ˆ’Ǥpí,px§Ëµ'û1Ì“ny¿~ èÓãBDäcoø=àóÀéÎß¾©ðGDDD‰ˆˆÈjuxçmÜÌ É"pÜÁ»CнoQ(�0¹®Üˆ3Ý8ÉS°pò­ —j�sÜÃÃ#ìÚõI>û¹]¬ß0C±í73’AqȾÈf³ •†û–BÆÆÆ)‹˜×›/Ùwðàyo4 Fg™…Ž{÷_ÔB8äîä{"6nëgíÌÙl±Ë·Dܘ"\ßÁ<ð p ¨±2^öÏMÒÝ<ܧYõ""K%à³ÀÃÀ:ÒU€o�ÇU>Ñp"""²Ú5�71;�3>ŠAr_Ÿp40#­å£‡ó¡¸ƒEGÙùL¾T�Èt  pœ"#zëÍ£ñ¶Û·Ôb³7@o_f©13ƒU«ææ*‹ 6(i6šäóU®@6—!—ë±|>K6›�ò¹–É òï�Ï7ØÑέ̞ÙLàte2¬{þ´ƒ(2Öl,Ò?8HاɻîÙÓ�љӮœf¹v5à;À÷�€­¬, |øðpD� ‘�¼¸øy OºððPUùDDDD�ˆˆˆ|ÔT�—1ß„SÂ03R6Çiï[¸o�ŽÑ‚ iQì´,1û¤«¸Q~íôÙcÛ¦&f¸aÂòpÊ03Cš7É¥ÅúÙc÷m2®…C’–}K^WžÊ3\"ŽsnvÀ’ý¤Ôeà‚p8´ø`.ÿlÆXÙ ðà8ð8pV� ‘�¤ÍÀn`„«sx˜UéDDDDKÀ‰ˆˆÈGÝpã@}å…¸¼søcŽÉ0‚†EñbœÉ‘ÂÁYÖ¼x~ªåÞÔ[µ²ã'ߪ[2ÁK‘>-h¹Û7³å®ƦʄðÇhg]úAÊL!#6‡€@‹ÏÀßÿTH·xø ¨O™ˆÈGÆ(ð;Ào#¤{ø'àþˆˆˆˆ ù¸yìŒSàŽ“˜Ìáàm3}<>î‰%äq""«ŠŸ> D¤û°xÐLcQ$"""·„+À!à0îÜéÈŒp ’��ƒ³‚¦E1 S££¥ÛÖm ޵½áµÚ|ûV~ò®»‰¢ÈH©½¹CÒh9ÇÖã ŽŒf^YÇY;éð”™?g€ƒÀYnŽsÀ?ÿ œ'Ý(ðEà·€}âDDn²°\çg€"éÞ¾,¨|"""¢HDDDnEç1öcš$¹‡á˜d¡ë]‡‚‰ÑÑ�µåò€™éxŸ&'×ð³;ïI«¡c@0_^7ÀÄÚIâLžô}|Œ)×͇€ã@“›ïuào€ÿj¤»øà ¯O�ˆÈ 7ü&ðP&ÝEà_�¿Ψ|"""¢HDDDnuœÛœ†Žû…×$YZè`äó=L õªìÜàÀ@nzÍt†•9µ\O‘pίò^KK^W^ŽV—&ð°8Hº¸ø#àGìÜMk\Uðß™LŠ[¡à^Å.ÜŽHÅ/ Š«øiÌJ¤ß@W.\´ . B‹±Á÷ŒmœøB“IbfîÜc·n )NËóƒ‡Ë=Ë?‡³y8ç%¤µŒˆxôÖð*6ðœnÓfòÝÝÉÑç7&GŸ­<Ì‹I’,Or¤ED¤Šˆˆˆÿßß+åkê¥P+µ:U­”BmUóÊüJ�/€Ö2é ´¾¾^X¬íõzÍÊjß¼¢[EAéxÞ­ Áwð·å6Ƨø÷t[ÇkxÏfçED<W°�«XÑíl¶Í/ÏÓ¼Ž7’$Y®äh‹ˆHËcŒÛj½‹Pëé%�b‘B€ƒñX3›ÕŒùbŒF¿·˜ô×V›•~_¯WŠ ÕÙ ¡ ÐQ�pCT��!®ã#ìëö Þ›x:;0"âÂ\ÆÛ¸†Kºý†ëøû_DDD¤Šˆˆˆ8»=ÜRÊŽRZPŠÓ¾µZ¬˜3›5~º¿;9žLÛŒøüÚ¶µµ½u<î ´½Ò³Xqö’§Z¼¶�-üŒ©Ç×6q�n/`¯`5;2"âÜ.áÞÁeÝÆøâ^Æ)€""""Χŷ02ógaAP*³éIo{0øçÏ?öÔ¶ÅùN›¿vƃû‡Ç?L›½¶ÖÖ’™´íáèèø×áøhçÁd:¬q~{{#_}yÓî`ç)«vüTLð¾Å¡'Ã7±‰-ÝúxÈûöÿMWñ®è6Ãxw�ÛÄ‘("""âœ`Û¿ìÝÍo\WÇñï¹÷΋íÔq;ïo¤‰J+�"ZTº •( 6lè¦$PQÿ ¨¢À �P%`ÁŠP ¨i'i^H×öØÉØc�í�Çó~ï}›T–<¹3�•6Éï#ÍÌ�«3÷<::‹ytž—€*fw[ ÆÇÌaô¢V¯“ŸËS©¬Åô!6‹æ«µ[ÿ?ŸÿÏ©·w^»zÅ.çfW–nÏŒMç¦Âó󳳕õ©J»SŒÍ"°F­ªë3—gf'ÿýÞÙÒÙ3§‡®ž{wtjrÂÍÏåS¹¹¹r~m}²ÇuúPo4Z.œãâ�V«Õ¸O¸Í®'œÿyà`…GSøð @²aà»À÷�ýZ.DD= ¼|H‘ìðp h+|"""ò( ù”¬�½Àç€4Î9goZôÍ9ÀèĘ̂TÊÞd+\>°c$½7å ÓE=Œ*Ó‹Å¥ùW÷Y§}x³zf¤ÓÍú‘¨Yg(�(30—Ý6ÜÞ÷ÄÐþŒï ²Å"³°P]¿]\*Æë ócÖiÃÝê­q´3^]ÙY(/Ç��¡©Ñ‘‘�‘tjàºìrZÉ ¥¹¯Çlcüp®ŸÂm/ˆØ&w¸„–�Y Íãáðkà$ðM`ˆ{;üø8¬kÉÙ`ð2p”Þ�·�œB'"""J‰ˆˆˆ< Àp8˜Ö¿ÀúnÀ ×÷‰2cÍêh»PåL0¸�Ú¥`©Ùj•+k.æÓ™ÊJ6kÑqúà;R~»q8.5/rý…O~ÞsÎc ]š¹5±<39:àØM#wÎyéfýɵ…: ±à ]ö2™ÖÙl6å¹ÔByµšŸÉ¥Y_Ý—ÂNtéÐÑÅfßäŸ«ÆÆ»,áYk@¨òø1àpø*ðÀãÞNÏg€÷€HK†ˆ<æ��gG²p¸èÌ@Q 8‘,¦1;÷~°}²àÒÆ]F_2­zÖ-¶•f§³‹“7²ÍéÛS…Ù¿Õ ƒTÀ¦Œ^„aH¥ÝYd ÅfáÍÜtÝ艣‹lןê,-š›úhøæµËÙÅ©‰1׬í`‹üóðÉñŽX�Ás@LW€ªÊ òà `‚dià%àuà)-"ò˜ò€ç�ÏŽ{3àðs༒?"""¢�ˆˆˆÈ§« \ûejÏŸÊèéëÞÀB/d‹9îÍèÍB©Tc •­…NÖÛ,yˆîãg$0Œn ~º91²ÿÖïžyé�ÿŽ]í1¬Ì�¢¦ø%àÀï�%’í^^v+|"ò9üxÈ’løð7 ¡ð‰ˆˆˆJÀ‰ˆˆˆ|v”�3où»໣CeF, †ÿßâNê€uwÝicasx;déQ¯›‰½© »mïœsl…™ü­f9(Ãa}�Ü9y¾ŸŠC6;-¦†JkA¦¾dë«©l«dšwÞwÊwZÓOÅlìÓm8hãu€045¥ïi xxx‘ä9} x NëÏMy„í¾œè#±þw`B¡QHDDD>Ûæ€ÅšóŽÖ\fÿi‡ïÀ± p¬½>ø½¸|¢êÍQâAº3Àmü°¹fz ë‚”Fv†WZ�üh6}�ûÔ £ÚÊìÔ!#XÉ=s. R~/å¬é³©Bjpù�Ÿý��a²„ß·Mž§䀊¦pÏbàp ø:Éå�ðeà‹Ài`\å�Dä’¾<x$kïïë¬4•€‘‡GLãàÊ8àÀÀVüL ºs®÷2o‘s~9³m;=úhf¦ÞŠâ÷ÇÎ_½¼BeØV%"Ï÷š©L¦ãù€»ÏŠyF÷]@ \Vòç«Þr$Ëß^Ž)|"ò�sÀ—€Ÿ/É.?ÞUòGDDDD y8Õ�+À5 �£0zâ¬Ç[ ÀÚÍìÍ™\%_­M®¶;…0¶=ŠÍâR³5vvîB}qþ0}1K:(ôƒ íi`Îa½ÅÉèž+s]b±\ €iºÞ·"ð[à- L²1àUà`§Â'"¡#À�ïƒ$» ü ø PSøDDDDTNDDD~+8W;èÌžvà,yëŠ×Û‡s$1îòâ8——÷/tÚµj+,ƾßȘç{¾3þÇÞݳÈU†a¾žÉì˜�˜ÄÒˆ……~@J!H ;ýËüí‚ø ´,ü@+1¢‚ `0‰B M\7ãÎd籆9{IÖì}µçpx¹y9Í}ž÷¨¢æ‹Årg{ûÈî­?OYÌO_ïéõ3ŒWÖZÕd2±g¥ TaXu�,ËnâÜÎÖ¼'~ÄÏx/af³gð4¾ÂçØM„qÀ�Â+xÎþü…�ñC¢‹ˆˆˆØlêöµ¤ÿ7�«¯²xäèì)ûÕ† ŽVMRŠÿ*ÌʱÕr÷ä�ùÎlZŽYc¾XÜX.–mµ74@Óö«­µ¢¬QeƒbMFë3›ã þÈv¼çîà \ÆË8k³ Îá,>ÁåLeEÄ´…s8‡éˆwá—X&¾ˆˆˆˆ±'öæËÓövž]ͯŽ8®mÐ4mP@Sö¯Û]«±×Ze}f{¸‚oRþÜwãC\Â5ÃŽã5¼…'_D /à"ÎcjØ÷xŸ¦ü‰ˆˆˆH‡Ècöþ±Y£”A¥‹2äæìø 4´»VÆ)ôªª¬Q4ã€T QkÖv_ãz&J¨ßð.>À¶a�ãÞÄÉÄÐ\ÀxÔ°ßñÞÇ­Ä‘("""�U­4(tëÒe@WÜÞ:ztU“ @ÑŒZ•2Þb:›í™nY£©! -¥±�oñS¾¼>P¾ÃÛø w {q[‰/"î£x}ÄDâ>Â%üšø""""REDDÄáÔ(kÌô’ñ=H�¸«™,'G¦@iÃ�(Ú¿ìÝ;kTA€á÷Ìž“ÍîæbŒ†$^i m"ˆ 6É?°ÕŸ Xø„`e') ±EìÔN±#Ê¢1ÝKvãº'g.çXÙ,›¬E"aýžz¦y¦ù¦ÙÚÖûcO)­ü€-x;Ó34ðxÔä¨íIxÜÞÓšL×€qÉ'„Øe)àJ¸ò=9½Ìoöî?&êûŽãøó(J‡�¶CÌR£.�Mu‰kýѸÎÙ¹5¶êœ1Ùº¤«ÚeÕêÂÖ´¶ÅÕõçjS»u–jˤnPsj (¬NEþŠ2‘_¢@ PùQŽ_Ç�û,½ÔHÈqwå°!ðz$ŸÈ}¾wß÷÷sp¯¼?ŸÖöQíMÎQ!¡0*,”1ý@­MÎHWg'ÆXÂG‡òyuÝT¾ €š«j§¶�Å=> wWWh{]Md‡µx €:\aÜŽ«©9¼£ÙÉïÕérávw"ñÆUS7.$÷¼ÎˆW�r¾~×�]À÷€E@¾MžÎ¹@«�ˆ) X L%0ŸY@9ÃÄ£�Îåw1Ï1Ng %%e\.*áPúò´¢DDDD[À‰ˆˆˆNòÆZ ½ÿÓŒ1\×û±Ö‚õwýÛÓ¬cøj `|]¿ï½Xð0Z3#ƒÎ;€S€ÿb€ù@¨J("0xX`øÓ| $å*‘‘ßàá‡gñ«§Njên.¦ó§-k™41RÅ@"""2r8[Ú_Šñæ|°ÁbŒÖ2@ε¾^g|L¢_W¯ÖhQ /@6°(Å¿ÑÀO€õÀwT> P0ˆæß,PÄù€[%ìßý÷Oã•—cÈÏ?ÈšÕ‹êb~»’mÞÀ_[£‡'""¢HDDDdົ{8z4kÐ8d Š1Þƒÿ@Á3|êÛ‘„ÿ.£ŠŠZ@ÃW=°HêñoðKàià^•OD|˜¬žÆà_�Ú!òóÏòÃ…+è;V¬XÍÆ�¯ÿ>dx^WYYMgg}EGOd×{oãØ÷6Æ�a(ŠˆcË–X^|q=«V=¥o‡ˆˆˆÎ εk7¨«k`Þ¼ï2yrt¿ÛÀ™7AëîéÁív ‹õÛácLpmBn·¥ÆÇvv–¾µ9v¬�¢+UZLÃ_°˜ ,ÂñíÛÀz øèP E¤WPü80�À4ÙÀF Žy§J𮀾&ß7žukŸbåÊ¥L›6…Þ–-[ÌGiãX¶üyÚÚºJýè!""ÆêÛ!""¢ ‘ÁÓÖÖÁöíÉ$$¤ÒÞî c°ý„)¥ìI>JFÆiòò.»ƒwÞÙKVÖ)ššœئÍúì²ÖÞ§Œ èª!3«€¤¤LßK'í£âãÿEbâ>jkë½v'c|~Þ¢¢*>HÊVø3²¸�Ó@p°øf€y@ 0[ÿ?ˆŒxáÀ�� †?�ÀQ ¸¢ò¦²ª‘M¯½ËŒ™KÙ¶ío´··ÓÛ‚óIùÇ[„…†’ïÏŸ£‡'""¢ ‘;£¸ø±±q<öØ–/_ôe1ÜÖÐàäd^7nÔÓ·£Æåꢲ²æ‹á �F�#*jÓ§Oá‘GfbŒ¿­×‚ë *.®¢¤ôSjjhmíÀz¹`OO—/—{ÆøñãX¸p¶çÞoé=Ç„pãQ[ÛDö‘ó´´´kÑŒ\mÀ! X LÁ·±À`� T¨„"#Šf‹€»Ì hQù¦»Ç²ùõ]dg'%%žI“¢¹eé’lj}u5[¶þ�¡bÖ¬zh"""ê¹sÜn799ÿ套þ±cg¹y³ž ¥²²ŽóçÊÈÌ:KjÚqª«ozÂ:;»©®®#''Ÿ­[“ÈÍ-ÀZ‹µ^º‚,~c°Öö™õõÍ8'8üq>eeŸzBk-þ466³./¼°�äätNœ¸àù›çÞ04ÞJaáu2ŸÁ±?Oá�ÜR $i@þEϿƫ|"#Â}Ào€ŸþT»�ƒ Çñ“E¬^ó{œÎz[·n÷ÞA°ÂB�gkÆŒ¸Ã½ë©§»Çç{…‡‡|÷¥ë‹ˆˆ ‘yP¾t©”””Lv¿�=É8ÿáÄÉB*®ÕÐÖæ zÛ¹‹Ë1!ôÃÜîÎ ‚§+¨¤ä:G.Éf°'ù{÷ñlW\RMk«Žq¯Š€ è¿€ À"`´Ê'2,�VÏ“ðÏ 8€€*ßàÊý÷%6o~ƒÞ¢¢¾É6­å«XòÄlvÆ¿ÂÇ_9�—Byi� g<£¬$““Ç?d_Úv6<ÿ3¿?ê/øÁƒüúÙ'Ùû ;â6=‘[î¾{ï&¼êuÄǽŒ?3üol]Oê?ßä“Ü$Šþ—ÎÍÏNál¾@Õõ\Îä§’~0Ž·Þü?»fÒdÆñçB+Ñǵ!I´lÝ8%‚^­°#·>¶º(§{ç±¶g,« ×J( ʬ.¼‰pD-!¤¼C¤µ 6Ý´±V ^ÔìÎÆ¶Žk{ÝDtßÇgï¼ê…Þ‡&þYȉ¤Žª„Îë—ॣ›ïa6ê�À˜œ¯îÁm[34Ô×С%‚ ‚ ‚ÈDѺÝåL$W¯ÛËkP¥Öc[G'öa]�ú¿u}¾q>n©Æb±´õ¶l݇ƒ]®>Fl½©©4^»‘­\¿?õž«ªÏ_çû ³÷‡Fèp8q¯¬Vôs++«F«µ ½Þ/˜H$Dïkbâ+j´zÑëÈåJ~oKé]$òûúúÅôŽ«V_ÁP(,ªöààß;›·¬Ò[š ‚ ‚  €Èq}IEJdÂ.lnAÔ lkÏ óÊ ;ÔW €VÓ�À¥L Eªe–ÒÛ› Öô¹—2õLéIæ&X€ lPþ ‚i¾fŠJeCÆ9n÷(—‹ñx�Ÿ8—¶n8ùËÎÙ…4†qœ ‚Ã"Jí¢¯‹üHôB“ ûÀ$o¼*PºR’ò3óÑ$œÚ…Ž)NXteBö1Æ*ƒ¼?V‹et¥ÅëFÖÖØl²‹^Xy:ólljlðÿÁÆxÞsÎûž�‹óã9[*€4šI�ÚŒ�=R-€rsÏQoŸV�4áØí*,,‹êœ=™|Ó¼)*ù³²âÚÔö-kTóW»m¾FÊ˯APbæâ¥ªØPMÝß ÝIYXS x{¼C$Gä¦E™ ‘<ÅH¨{=]¤ZÅ}~]äph<Ðö  ´ô|îBY¿ýA­^qŒèŽ‘Ô{½^î²™œ|Nb, †¶Û÷htô!wýˆI¬Ÿ>s‡H8a£Ó=à �%c\®Ÿü˜lx¼'N–ÐÚÚ¿¹ƒAîšyñÒÌÇv§£‡ØÀ žL¦×2iã÷û)¿à‚*¤é”tå¸=^½~œêë[©¥å.wÈ,-} ÛyTRRñœUVÖJÆ­®þ¦ùùôtÊHÃÃjmí¦¦¦Nþ=3ó^¶§ó8˜§tMÈæÈh|E��}ÜET]]O¤a‰c6¿%·Ûªåsi|~åóç}ô÷ëx­†† 4=ýŽ|>ŸìXÊ._… Ä˾ý± î:•]Šõ„Šç—ûDΊ´‹Pi)Ù‰§9q}o'‹”«?�"y¡O>Bm»âØl_$ÛŸ›³(Ög* !dXl47w)É=¢F&WÚ#}fNÖù±‰¹ñZ‰OÕ±ä9�WªTË�Ov»C²_!$Ô –L¡ß³³ÊÌ,;.9%‹ººúÉçóKÆ/,|ŒêÓ}ËËßÉjµQw÷}:v¼H±¾ªªŽ<ž_’ýhµ£Ö ¡&©u8œEØžÔlª©½AS,�”jE˜ìÓu&Ó:r´0l}ñ™+´¸øõÿk €3iEÔÓ«['€(‚º%@Y9籎@‰ò²x¯HeRêöÎæ%ª( ã¡›!ˆ´é Ì M”-"Œ\UD‹)¤) ”@›Ñ‚�’‚Æwe;û¤�!¦ ÙÌ&pÓZH̘Aqá((~0ƒ+ ÌËu¸ç2GïžüvsϹw¸3ç¹ç=Ãbé[x…wtB"w-·Â[ð# Óð.ŒÕÚ`^49™ ¶¨A~³Ù_ª�|þ·‹Èù~bv‹gæ‘]¤ýúí» yüú{•|ç Ç0+ÉñqyÏ¡™™�>ë™5ôèqŸÓómzú¯j3•ü¶1ë9ÍÎþWÛõ 3"„B!„@G×'¯Ëù‹](éGi¸^y’Híë�®„\½ö@Ξë”˾1:šƒÇ` Š¥}ð ïì„Dâúm‡o XÚOÕ¶g~4>®ÛÇlçÏ1¬o£ú@i8G�{K¥yÕ7f< € …¢*qç'ÊÃyÖrs,z†N¥R©+·¶Òð³åòš:Ô±4éàà{u¬˜�¥‚2Ÿ™LjÛbÑlˈB!„BÜ@ºüG&óSæy¹¼*››[FüYe`A?¥?›óÄω‰Œ)M26öÅÔ°ïî~iÞüt¹/¨]o³/æ­h¬/`jÞ �Þ‚5eP0�ÂÈý r ¼G X8 Âã¼ÃÊ5{¾€békØVÛžPt ¬Ù¢ÚGy.×Ï]"T«UUV,ª¾_Õ7Jà €ðÛ%Pm—:e{{§AŸî\XX¬µof5ú-³¾¾¡ÖAr²@ÓN©¤×>êyžlª\a<ÞˈB!„B"j¿|Ûó‡7ÌpPë.¸DЩ©?ê|ñW/ø;7W�ì�œ$ýMï BÕ~@MИËååé³Á  ·ƒÊ1x¦¡XøÞ„­¼Órh×è}8ðm9E/J¦Ì¬ eG‡ûr²KKËuÏõ]õüô@{ì�OHTQƉ"‚V�ÑJÈ"Ð…E˜dº�r)…¸±â¦`4りø§4+‹Ä™ ILAcPÃ6"1è”�2´prÔ0Ìl3ÐÇ�//âÞ7Ïf}?øv¾sï{8ó†ó�{Nê  þþ×ÚÚUUc÷èÊ0›ÔâàwŠç÷…¹9Ú—�L–šÚFOÖG�ãYÙÆèë{¥ÅêiB!„B ÊïähûÑÚúHO§Àr$¥ïÓò>ÉœÁÓ„¤Ý)½3–§ôJxJÏŸЉ“…ž¿Ë#ÚÙÙÒÒÂüm톆{ÆÐààˆ«5{z^jqfgç<¿¯©©÷Ú(b1ÚËÖÖ/9�w¶$©õkj´¸ãï¬c47?Ðb } B!„B¡DùòW$òEI@R‰ŒAÏ¡� ŠÇãF{~£PÍLÈû¤ó1Î!$åŸÃ,Ë9]סC|rþ0€îÔé-àðÞóªí—±ÄP‰�´6€ð—vlCC£®  ®®çnÛäjqÐ"ÏÓûÊ9~QÍÌ|02€23óÔòr,ñwZÛ¸ññIUZzÍÕ>º»_hñðm£òÆ--F08AˆB!„Bþhz:$Õ’ô‘†‹  Î‡ÏdÆÀveÌU¨0•=õõm ó€¤Bt~þ“ÚÜü™¸Ö‘¨êíí—‡[ �¿%®$UT\&m`FFÇÄúÓ^pˆÐÎ$ŸwCùPRº CûøíOHRŸ½P¤ U åðÉùËjo¢Å__ÿnCÞ“Õª­í±D„ÃsR¤�y2Z!Eª ̰”Ù‚JµÈœ?ü~”Sűتƒè{´7€0OÉÕ¾®\­Ôâllü°ºþÈÑsª¼ü¦jjêPÃ* ˉ«µµobÜ$âš@�´Û]YYu\“ÐÂÂg1»rOï1|»=†ìmi)j¥XLßÚÕÑ"„B!„�dÑä ¬  ŽŽ§V×ÎÊWÍ-�‰2¡/|²�©dp2Ì)Ç�,¡´³ÉèýÐ%Hê6tÚŧGˆÕgm/TÕAÊ@µÐyhŸžÿ ®Ìœê‘\Ñè×ßì�ÁKTQÅ j)´4lÖÆ BHÍ"D!†“’P·�‹fÑ¢À]ÿ�¸(*�È-Jq# md[ ÂŒÌÂÃYùøžo.×ñÁ“óƒƒ(oÞó]æ1wî¹çûR¼é@Ø\”Sµºí™ê 7€òùbÐÿ80pÛ\×”¹µ¦ßµÚß�ñF(Ó7(&ÄùÝÄÄÓNq¸™§ÛIpÌ e !„B!„ )Ó�Mäp×éÁ�Ý©»°ð1Ô )©bECnhè®  Ó_œî…&!ç©'Ðe�œŸ­sÐ5hrž‡z4zÙ5€�戜mí{ÒñLêâs3š˜±by^7Li¬¯Wø{z7k°Ÿ ’&MŒÝÝ:ÍœJå'KÕ…@££�‚Ë´µÛmŸñ¡ñ³´ôÉèýÄûjµZ,%·µµí66~˜qð-¡;6–w++_y¾„ëqìzG1ÁÓmhg§&H!„B!dIÙ7€¬î?˜t�F#rNôâß  ®=³³od¥·X}*AÎS¡‹9!bŸ§>h rž*@}¹,@4Œñ0?ÿ.)©B3Ç™’e««ßÜÛò{÷¸Prƒ×ï˜DL–´ ^{yùKlÙX¤Z8(•æÜÈHŽ%h�¾vqñS°T˜zš2¦T\¢¦÷Ò ûõû�¹¯f³é0Ïb9¿bñ¹¾gú8¡D²¿dÅþH(ÏKCï8Cfoï¿Ëå ±¯ßܬFŽ�ž~ÍM3'JÐÉB!„Bˆì@,ÓÁ’øés| �¹�/Ü>LJ&Zø¶¿ÿFš÷Ä&¿6€(,2™Úöhrœ–Dawmä\è) (ÝEëóÐMhrzÝ‚.hô„à3Ô�CÎS3ÐU•V<P¹üÁÌç`g™´P½þϽxyÈÞ™ÇXUÝq<.Qk›¦%ØÐ4�tK[mZ ˆ`ÑBqØ·Y ¡€È:l(0,Ú"A¶2lˆÈR0€l¶âP ¦²5æSþò›o|fΜ;wνÃ÷ßoò� œ{Ï}ç]âyçó[¦„ì“î Z¹r]Ùë ¹,XÂ=fÈuU@'ÎŒõ=´mûë>è5X~ A2yð–››G8:‡7òïY´wï{A%õØûɆj4³ˆÊŒ#L²ÆÄ³�$I’$I’$IR* † Û”óbTàõ럗�Ðd£WÔ gÓýìì>•Ö¯/,,¦Ñ|8l,#[c§OÏsþ¾e«î&U�9sæ#*Ïsþü–·X¾| #5«Ò€xÔ¨If÷î}Œ”,yËrˆ¬d-~Ì[ Ï›0-{ÌÅúñ8˜a,ÀPnܸ‘˜�Í™Ožü˜‡IÇO J#D£ÿ€ó.¾Ôøm@ûö°î… ;sˆým¸=l<ýª±%ÁSÂÓ1àicø­^& öïñ-©5oÞB§‰ãç:ZcR5jÔÁÉú7~š5&Iˆ�)Îw1xpŽuôõqÆ :΃ýœÕs(ùÈu“&ÙfÓ¦­š=ûoÎØ×__\¾w£�$I’$I’$IR† þ°/((²³7ÂM0Ò®}¯ ûYuåQ,ln‚—ÄØ’’S‰?g) +²Ò¶sè1hÐèÈë†r#[—|æà¸_ÆëKB~X;fù €" ªy˜ °-�#’¯]»nÝQ©I@~‡?‹ÿ]èÎjÿ0b«>ð´rÒ]öï䱈å;©|bæ ¼¹oD*cÊýSü À¦Û€&˜éÖµè?å9¹?� €6n,Žõ] ʺÏÎ�{œ1@²Æ,[¶Ê n)ráNø>lÄSþ{’$I’$I’$IÊD”•Õņ þfvέ@W¯^㟡¹ÕL××óç/ò-»Æ,¥h÷çgáÁCDÄÈQïyܦÁ,ÿ’&ˆ~ë­•NI4N6â÷ZZj7µF¶–Pj4²¯‡�§Ûª‘½tüÛ¨÷‚�§ûÃ5µr™€˜YìôþAöOh&0ʽYãÑ?Çw>î+�%1{Èw® 6[×®DZ›S§NÇ@ böuĽ„³o3f†3îØ±Zc�5ä;Ëþ"((Yˆ{.d͇f0µhÙ­ìüÜ»£$Ÿ�$I’$I’$IR þø»zíZ@¶ËgŒD9/–¸˜4i–Y´h…yç�Ý_°Ÿ>Ͳ$·ÑŒE&Rr“‘— .eÉÀ!¼½c—sx�y½ÊÁ-Y’_QVËÍåäüÙ 2Æ,Z¼‚eæ°FVÝú»È?“‡(iÂò-ˆÀd†P¿_5ÓgÌ5‡á'ò4�1œÏ€²(I@(ÅgÝçìÙó‡ @©sØý Ü��À÷kõ¤ û·ð0Ü6ž ×�ïÕêebv12g�9}û +_k�Ǿ)JÙXöÇÃu  v‰Üÿ{Ïuô¨•éÂìkßk»w™×Ä@îxÿ~:NðO­ZM�q(l�Ceï9¦M{�×$Ñìý“¸÷¥KŸõ¼$È+W6WH’$I’$I’$)C Žÿ—sBÍkþ¨>¸Æ$Y×­]·ÑÔ­›v0àd/¡Ñpè|mÚôä8;CåsöÜ [ß÷ß?ê\ç €ð©{‘Ïè6–3vª3GçÎýÒ±��õÀˆI@\cDúZ÷ùêJ½Ãïjð °ñôøZ9)ÞýûàzðhØxx<Ü ~H«—y¨Æ÷ë°Li@ã~„TvýåËW¬k4hí5oóæ]™™€ü{Y½CL¨}¿AÈÅÀœª f¿øÂ1ŽÃ÷i]�ý_àØ'J¬qy>s0Ëk™DÄ #+˜ ÁL>eù.¢¼³�$I’$I’$IR& dž8Ík‘ùeÞd ^“››ç5WΘ)ÎçxôÑz¾àƒœ‡&„b(cÑQ"sé�ïîu§¢¸¸uëŽd Få"SÍ�o¾¹Üàï€Rû0üÇðØxº'ü=­œ”¦ïûOá?ÁÆÓÝáêZ¹Œ@̺hÔ¨3Œ¯\¹´§`&rœÌš¹óި얉³‚%¼ç‹ ©è¼¼Öuǰ?¨dOIJm‡1𦊈æ^ÓÝºß `•DZ·î8¾¨h›5vCá–ÊÖ‚YêVy9Ô¾Cof%y¿£n¯J¾ou1@ c¬rÌÈþ�ÔûqÆÌyïƒ�$I’$I’$IRŠ þ°¾pá¿Öxü@çߥâÕ(‡)çÏ_ðèMă'Ò ,Ê\,+U½œÒ¹‹Ñ§¾ˆ‘±€@™å ?úèß<´`Iûà‚¸¯PzŠß ? �„�‡'À-à‡µzRš¼ãÕán°ñô øgZ¹´@Ì6lBys�ý³™Q:–û‡›7oòš³gËÔ©s¼ŸcÙ²UNÏÀþ/�¨è ŸÁVß™ˆhõê Öxô â~+NYØeËW›ê�<,3räD ’Ä@ÜïaM¬L »µHaÙôå÷Rtaa1÷ÍØûBŸ^½1¸�W�žH@’$I’$I’$I©€ÜwfÁ°I* ÒÒR«¬ˆ�ћȺú÷ŽÃUkd¢~6F8ÞôT½Öˆ„M+´~}‘uÿ“'?öxc›(3—ˆðJ¿CòoÀYðØxxü”z¢H)üN?7ƒÇ̮̣áúð}Z½ô@U7{zÀêœ;Ç'ÃféÒ|ü—Aåz ±�â¶m;# úõ[²/c9hÅiE¦hóvö1üä“ÿ8ýp6mÚZþ9ˆ8Æõœ?‘Ù¾ý]sæÌ9§|”b îm¹,S �F_Gf3­][È=(úã~'‡c)µ°  f;»ß%KþΜùf#c¿ðcÏqäÈfÅŠ5ò ¨Áçaàž�€ e köí;`¾ø¢Ôyô¡tïëÂ,Ù™õ\×½{ßã^�6AãøŽ~ I’$I’$I’$¥rJdàÇ7ÿ<ÐæÍÛ#χëˆ� Œ*ÅA…5%.bÕìçAJRŸ×:´øôÓ³i€–,Éwz’€h¼w„�ƒç¬ŸPzš?÷€�§Â?ÑÊI)ôß׆GÀÆÓ­àojõî>tðàaöމûÿ¬N�ú†dæã°Ÿ×Nš4+ ¢×­Ûä5OÇŽtzÒ`em�ЈÏ9�'èñhe>y˜0Ùò•®ÇÓ¿meï ÃMÈ‚’¾„G=z ð@€EÇã¾_Ìjò}· mõ†ò7¡÷•X3 I’$I’$I’¤@ÎaF8¦²Ë¿ù{ڴ׬{ ò²²Œ>c̬'6%N.¢­Ò%è�Nˆå]p_ `y –vÃó9ÞµëÌÚ*)9Å2q¥¥V¤«ÝŒƒ ô=Dÿ9<6žîWÓÊIwø½­ ÷‡�§{Ã5´rwâ~ˆeà��ÌRoèä3ŸO_fùT2?Kˆ5{þ…¯¯ËÊê±â¼y ­€š ÷éûJPÆv*»Y,NOJd:E@\“ÄŸ×yòyî!¬,×Ì^;n*?§ïú׮݌ÙOv‰a×/þÏôì90qáž§RôÝjµ±� ÎwÈç];qâ¤0`Dd°øø¯±Ô@¡×<—/_áwZ·n–Áõ*'I’$I’$I’” è׿y·fÀüó@±AÄĉ3í~9YD½{ŽWþÍ5ûÐ$ Z ¢”Q½ˆ¨LOä–{!4ó@\_ÏyX’¥cx°…k-øa‰Á¿  ô=L¿~Î��‡ÇÃMáµzÒm~W¿gÃÆÓ¯À�kåÒ1 ¤o¿¡>æ¡~“&Ùæ—�5´z©$Áœ p†eÁPbŒY,(FxðÌ3m€ç±ž Áw.ÞoÊ”Ù&?¿ÀìßÐìٳ߬YSÈþ3èáC�²~,§»jÕz^ûU96f$µiÓ3ð9Úµï•xNœŠî��Ý'1.»,תՔ%å¶lyÛ tK¸ï0 .5ެRöpóæ]Íœ9ó Êá±Ì2o9c¦˜ß7ëôý3 (ñ¼(ìµîø>ùj¸î€=„C6læúc¿ïsØïáø ¹&Uß'ô^$D[¾| & _Ù@ I’$I’$I’¤T@hÚj�ú”@ÆÌHbĨGc_ÿ’sñûÔtîÜ�Ï„Ö,ƒèÖ Úíi €p(aݵãc ãÝqÖ ‡/@é¸þ-¸5l<=~¾G«'%ùÝ|n �ƒ�‡ÇÂÏÂ÷kõî,’eù–XH’$I’$I’$)ÕPnnž5ÍeS �=9 ˆÐ&^©9׌¼Œ€ºvëo¾dïŒA›ˆ£8¼X\´µ‚-v¨ ¥ÖÁÉ‚nJÕRE*±ƒ¤ šäpÑîJ±ˆ �„.jÁZì`@¡pjëÒh›!ÔÉ^NÌýC›Ë÷Áo<7ÝÇýßââG»�Ø&2(ŸÿnîÈ=““/ ªu4 (/Û;”aSºèÔhÏO¯2ê0�ƒJ+ÝCB@€ª™š™ycêææÒ{J��?«æË�Š(�~gj¦§_Wý|’%!�ýêju5÷OÁ³½ýÛß“£e¿¾$Ò¢åF@þýï�¥Í5@vW€•} h½|ïQâŠ2CJ�ƒ]š¿NåžÃüÝWŽÑ9! š  ”7aêtF|S �ƒojtVºÛ}¬D -€nÜŒíôÃdm-ïï®Ñ’^ÿL÷ò³áõ»aÐèh2ð¼ÚkT7´´dŸM¿@Ñ{ ߢœWž†?z˯o¡{PåÌT®:EØÇQ„ B@u@Ú=cêr¹oM!€´¬x×Ä—‡@—.ßò¶¶Š¦V_øx·ÿV”É|6×Ö9¶¦ÆhjêUùŒ#€¢ûR¾MR¼�‰+=tflŸÒ¯< 9c 墲Ÿî!€! @ÕU�8ÙoêŠÅbà  ”7QQÅŒ™š_››^ûá¾jžO'JÍÏ¿7uÙìW¯£ó¬©‰š’Ü ÌâììÛº ýæzëë?@ÑIߥÄDаr”ÎA…¹:¥~Î+•J¦ndä±ë½|i´±Q%€´ÓÇÔ]¼ërŸ†@­‡z½•#ÇüYè=}¡®Hÿ¿¹^&óÔ<‹ùÏ(cŠ2W”tÊféˆrÇaŽ*ÝtDAüw¤/QûpY%S/* ? LÝòò'ç{%’ÏÍ5¬²_ZéÙwj|ù$Aú>ñxÂûÃÞÙ‡VUÆqœ,*#-­ ²—?¨µI¢½L÷ÒJœÓÍŒ±e©-6”enº=0Q‹�I$Ì!k.­ÆpŽVˆÎÆætc]v·º’ ‰Ý-#/ô㓞ûÒι޳ûùÀ÷ŸíyžsÏóœ¿Î‡ßùyM:ôU´êŸ˜ ŸÏo­W[[�J¬—÷·IÒ%ã e’g$7³{ ÿìÜ!Y!©tøìl“,’Lc÷@„@¬�+¹ µ hª  ‚‚â°}ÚºµÂñunŸ>ÏøýƒŽЪìkÌù󿺺§ŽŽ.¯ ­Vª«;¬ë„öþIJz.¦(?ÿM366f­·}{(1_æÏ”äIŒÃKcçòY™&Y,yÛá³R)É’Lg÷@„@< ]]ÝöK÷ÖïõïSXéýõõõ[cåsn*¿ôäÑj™ãHÍ�»Äªºr%踨¬ü�㔕•gº»{u�ÐÞR™kuL¬Ðâ%+ìÏjåÕ?FþŽJì—û�JŠ\ˆ W$³Ø9žž!à5¤Y¹2ߌ��[sNœøQ×rrÍ¥K_ФŸes"€4ii9æòå¿Ce…J{¬Ý?èäÉvkŽ“@.ün�“ß9é½”–VjKœ aröZEvêTÇ„ä “.^Û¢ãc!€æ<°È¼÷þG¡û­©ªª12ÄK~*< ô™¸› 1!0�æèÑoÂæ ýfJJÊÍ‚Ë"]G_´ûýfddÔ‹HS¾£:¢Èéíõ™††¯u=1Ú;¦½½Ó WÇô÷šcǾ @Nz©h**Ú­’F¥Œ%åb'€ôjj>ËîÝŸèž´µµ›s熴’IÆGÍàà/z/ÖõÜ K99¯FÌš5̦Ío™]»>0ûöÕ9kë|"ˆ$„öxy�/ôˆrÙ#êizD!€! / ­l9}ú¬Ž�”‹ÿPâóõ©€ýrrº·�-&‘‘îu}ý—ŽÐãO,7—.ýºŽ~†®±±Ù8ð¹imýA¥’ˆ«'“¬©{t=¢{ùÅáFsßýOêú× €®k:;Ïš‡~ Ñ$ÀlI¾Ä8Ì’GØ9OŸùM’I©‹sQr'»‡"„ €¼&€4³ï]hU´¸Éº—7Å…Ú±³Ú­Òd>Ÿkzz~rr¯*ʤ¯�ÎÑaýO*e¢]C«U‚AÇ¢I+°VeèÜýûëâ^ ôw¦,ֿ̰QèÌ™SXX2±6&“I’B W2ƒ�óÜ9?(Ùè✠%sØ9!àQd'oÝF•Q>Af �ãÇÛLnÞë:Ï“Èîi£Ÿ„;r¤Étw÷šÑÑ¿&~·Jù™~nÆÌä«sššZ¬ëUWø¿×HMͶï3<*‰ZZ¾³ªVŠ‹ËâIé¹JU˜öCÚ³çS³~ýfsϬkÝX  @`Ä ü¬½«äüþÛwnäÀ-’g%ååÀNIšäVv/îÏö.Éjâg‹d>;‡"„ €âE©ÄÈÈ\kåZך7?ÕTT¾kl0"$ôess«Ù»÷3%Ë–¯žt�ôôÙ»—تË<ŒãéÅN�)Sg@™¨ƒ£âDÔzƒ ¢DQ‰‚7¼D¼ k)}q§¸#®Œ7ºÐ…[hŒK#‰+câR%õ²é >žE“ļ)§=ŸOò]hÚßÿ„hžœÓMÕ_Ëu×ÝÙôÏæcé&ý5çßiú5Öžð÷ß;kIãÝ,5lägË4 £å�ª_{Ýú‡Ë¾}ûývðàçåÃ?.¯¿þVÙ°áÑÆÀô'ïΚøžšî^YýÝ�_žeÓ=NE—-^5ñûU~MÇûx7'3ô¥{R©lgº2u¸^Ë=Ë3Òª´'•Šö¤Ué ×3I2œôäò¦oyWPÓ´}û�»L} NÕxpNz2•ÊžNç¹\Ë<¿ËÓË©Tvú—˵Õƒm”Ôšù 0é´÷Ã?6 @ywŽ»€˜Y#BGZšv¤RÙÆ4×õNÛ3ûoz"•ÊžIÿs9 @jtÑ¢›J~>ÐÄøsäÈ‘2·ÿ ·113G…žtKI¥¢átsêv½){FÿLR©ì•t•�îÀ¤¦x§éÝ?‡}í. fþÈПH¥²Á´ÄåNé3éJ7¦×R©hoº-ýÃõ0©©… ——Ÿ~:Ü4½¹ÿ€Û€hŸÑaaÚ–Je[Ó—ûÛŸÃ%éÅT*{(ýÛå0阮X¶¦|óÍ·MãÏøøxÉßwí÷ó�Ò®T*[Ÿæ¸ÞIß~~z$•ÊžOº Óê5÷—÷Þû Œ�ý\2ú4µoß~72ѾcDoZ›ö¦RÑPZ‘º\oÒ·ž•îL£•·~5]Ÿ:]Pv÷Ý�”ƒ?oê³Ï¾(_}õuùî»ïËáÃc�¡çÏúä“OÝÐŒóÒæT*Ûž¹\Õm;ÓµiwåmGÓ]i¶ë`jã6Þ·ubЩíèÑ£åí·ß-½³–¸¡&ü1ê¤R©lKšçrǽçé¹T*{4�år€T®ºúöêág||¼ñ¡Í[¶¹� @o´èJËÓÐ$Þ±rGêu½‰ž™L¥²—Ò¥.€HÍé[ZÆÆ~)¿þúÛDùëÆÇ¿}ùå¡ÆÇ¼½ÿþGeppO9ëì«ÝL jGŒÙi]*•íNפÎ6¾YOº5�TÞl8Ý”º½â0I21•£Æ‚ôx*•=›Îo³u¤+ÓÎT*»'õy…`’dâtŽ‹Ó`*•mJýmp—óÒÓ©Töd:Ç+ �$­2vt§•i8•ŠFÒêÔ3o17mL¥²iiêðJÀ$ÉD+Ž}éÞT*Û™–¥Ž2‚Ý<Éì–Ôã•€H’ˆé0†œ›žJ¥²§Ò¹Óøû]2É�Á{ õ{¥`’dbº�"iYÚ™Je÷¦¾iô=.H[S©l[ZèÕ€H’ˆé>õ¤5i$•ІÓÊÔÝÂßÓœ´>•Êv¥?ç�$3m:3mJ¥²—Òe-ö=t¥i(•Šö¦µ©×+�$3yúz6•ÊKg·À×½(mO¥²Íiž'ÀL€æ§ ’¦e+ü)ÆŒ)�éš´;•ŠFÓº4û4|­óÒ–T*{!-ò”€v‚f¥;Òh* ¥å©s ¾¶ÞüÚºÿõûÛÙx¼^ï~y߬þúÓóªKžËlÍÏ«ûxÿc ×«Ó÷ÒÛ@u¾>_?hñyõõÛ@þy Z‘þ^¯�Úk àŸÜk€þlËæVËûÆ~^_ßÂÀ?£_±~]öoÿ_ˆÞJ̼ßÁËoâ³€ ΄Î�ßú˜ó¦Þ±üŽÁ¿# ?Åɾ­Êü–•�¿¾e¥�Ï}IJÈφ7¾3¾þø¾KßÞ hnˆßfó³¾¼Ï÷Ë÷í|ü;gUsÎ~v×c&¤ùµ©�-Þ¿¸��Åp¿–ù)üKü]îOã§*u’òe§üLל'îÇE·\wÇíû:Ýd‰Ño_xõ~’(½WCñÍÏ` yŠúqDz·B%o“ôeís-îÎÛîtÓU&^Ž+½c0eÚýú7~þ8Ð9*yçÌ6n¬X—We± eN¿¹Š„¸óQGéøãçûÊk ƒé†¹²ÁnÇ3ÄHîU[ª£p¸0ñúôš+ë5!bîÄb\ 6»�\v¶x_œ#Ž•ütª4�¤À¥ä«ô1„Lrª×Ü|§¸{­OþyÌ")äPH íE®"ÀFý”X©¡žBŠ)¥œJª©¥žCŽ9åœKøõJ,©äRJ-­ôj¬©æZj5µÕÞ| €cj¹•V[k½3igäη;ô>ü#Ž4ò(£Ž6ú¤|fœiæYf5³Í¾ü œXy•UW[}»M)í¸ÓλìºÛî‡R;áÄ“N>åÔÓNÿÌš3OZûùûYsYó7Sº°|f�¯–ò1„œ$匌ùèÈxQ(h¯œÙêbôF©SÎlótEò¬2)9Ë)cd0nçÓqŸ¹û•¹/y31þ¿òæ?2g”º#sF©ûCæ~ÏÛY[b›iƒ¹R*¨6Ð~@ t{¶wqWõgbaì7í–öv=>:¶ÏÕÃjqgzn�Kªsk­^š%Â):_,¨ÃlÇå3’/§ÔäNîñl8%žS‰å>�xÜ„ª?¦­­ðQïál—Z© ®v} $&½nß+ îÏ^±�Å…nOƒfjø;ØÇ¬¡PHwt>ù2>¾f¸ã¿F7vEÒ³a×p@]¶gõÑnÛ\ÚgÜõ9¦»SP¶üÁUþnÉ%–³];ÕDíky[`“Uù)…Q;Ù<~åæí ŒË§:qm…¢%¼VÙ¥ÎÉ$TÜ2.æ0ȸõŒÜK�¼�rp§­9;;ËùÙW?56äíÕöÕ2çÉÎÊŽ²šÛÖM¯Äü¦HfÙäz÷u¬¶µ÷ c%4{ìü ýf(…Ž)‚!7Ž]·^».É'ÈŒ:„ sù#„ª]e¤‰®¡!uävŒ­gz)ÌaN°�œ£ÿ(`·h"jN{ôd ¹æçÈÅeê5ù¸ÈŒÍ‘'Y§—�½2–‰§q{ÄÒvXy¬–ØE;öÌÓÙ³ÙáëÈr³6cÍ3”FÓî~Ã5ˆØ³Uõx› Däâ­�c JúŒ.–ú!h0s÷âHÛ˜ÔxÞf�I:éf¾’ Ýp‰½.0dƒ¹Ž¸ž©"Šï«Ùi%$wš�-ÔÕÓ0{Ÿ<•(ß2DÛÁ �^Œ � �z`Õ.{ök5´lH$‡²ŽÄÛ†‘—3�\æ KF) @HZž�]ƒêÚàî9‘âÃm«9°vH=_ `;|[Ý&P¹=Å•·+-dF¨pî@ƒ„®(Ó`ÒSàFê‹ZÙ9ùÊPÝ8Ps P` ‚sNèuºÇÉÈÛá ¸�év£�Ö,ªW ÑãP1ï�öðtoö b:`6Ýì•b8,³?ø pETð$Á¸¼‡¨Ëºƒ�ª–Þ¨–]H4ŃÍÚV1ôšIÛ-�5yÁ¿è¼)µçæA6À©d>ò­á×p]¡ZhÄ™£ÊAÞõ>sô¸‡ðzäbÌÝŽ³òÁ[¹ÙöqW÷#ƒŒm„Ìú¨täñ§Išgù<•´0¢n"+i™HK!æ6t¼s>=Cr}%Úc±�J&‹‰†?Î Çs!¥šÑ+IGs²ß#p©‚@÷�ï�`í½’i2´§ib/¥˜ÑVŽtì38J>ûp/ÄÏO�(&Æ6ÎD|:§�=a„ÍÎ*ç¦Ôâ§[-¨7©†«Œˆšêн×!tŒS" t"tQgEQ�nWJF_êtYÍ«OI!¡[�� £k÷{ŸD”ó�PBÂfî’ÀHÒA8€ÃN y‡D›$àP³Å·A<ÄÙ¨<ßQŠ66‹_d¡n8 )�`æëkàÑåAÕOÑŸ‚ÊQY–óŽ®�Ha7"?¼Ù )†~‰»[ÖFÌù=ãRâ¤H¥$²ø 'X ñï(è°‡Lv è†óJQ�”/0E² V4jZ3Š„c¡‰ãå–>È7µrˆS�‰¡ŠžI}åóHÀz^íD—’}joâ}°ý æA{˜V' �´ÇA�Ýê7mïõ0ù*-ƒ™cä !Œ#dÂ6ÐÓSx�À)•Þ}$ôUÕçzç¯å„!nW²v0<ôþ¾óœ´ùò) ‰,h…N|!‡©ï7CÖÛ†}�Ã<-tI¤Â™Fa©‘.„`(‡„•ÊA¯È��Ô’X�€- ´Á\) ;"x™§î#MR@ç­ N*ô`F�9kÇ6B!ãfæºÕ›Šz[ªRÚ ÂˆHjG…ãø˜mXlYA?‘~bRP¥L“\ìyãd+ î �Ž}ìDk•„q-eêˆöu óu™í²¨™AÔ3ª®¢Œ=ôÎÕ(a#b3jGê*¾“¼N‡‰ '$bÄn=èí�ªHÙ€0Ä.3› è tÀýFq ,Dª! ¬p‰HsêÁáLy|x`‘ s‹Î>cÅ=]ñ–¤¢Wƒ«ÇÄåÎD»Ü…“lñ ™ÎžØØ~ „À=:-ðb¡àÎÕgÀ<íµ ÜÃÂ.Œá¬a"B; ®Ñ˜^4H'éÁˆ‡Ì†úq)ŒÜi"I·T¢ u´£ß·åY .„JqG8MÑË¡u8Ðe úSCÌÅ•tÖ–ÚaÇ F;8(bjÎqؘLÑ,Ž­­Ð4l…& š„9X ÙWU@—.GÊ~Èä^äMgXÅ _`¶!éò ´|ÆÒvÒ¯‰­QæõÛûÏ×Ì—”~ÿûÊ~ ’íô•ŽæÚ Kujl@ÆŸ§øµ²ßæøiÍæ/Ýc@0miÜ&RÖæŒö,ð¦Ï-U‘!Æ4 nJ4}Æ#)Ift¸æ 6e²*¸@e�8QRHÌ—L­—}šbÏÖò’Cœvâ¿7–*YA [CJ1ÿ u¸ä>Ú•l€DõG+á|p¿±<À+"ûFÒ�€ç5!ã Hèm«@)+½¶0pF£%Ft(Bx¶0d±;zýbZ—Ž�–ØrE]èPG‡Ø±³YÄ (DLqBo µn±‰ÖFÍ-·èXÀ#óšøtœÄÂ’‰.ÁÜ”ðúÜæ£Ãk .’agà÷]ÆÕD ‰Çª‘¬Ça§è¯4—‘ÈdK·-¦O¨\NÆÔxWçiéò‚ç“ÀŽšUθ â¡LhKáS¨Ê �`]1&ÈC/lQ—Òð¨âÀjjìóPY�8z  ˆQ¹‰ú3¿ÆüqÈH¼/pý´+¢þì+M�9¶ÿ­üËSþŒíUþï“”_£þ)ó9äLjRÜñ?Ž÷u•æ§eþ³UöÕñf$–ÚýšÔ ^.Ëâl¦·Ïo%}+Á“µ ýä“ň*Z7 -«´ŒÑÀñv¢6À·1äÞ¡é}.0ã º”ÊoR#ë@¾_kÆ *{´ �h•fšJfô{‹¦£›qM÷yÐJ4«M“ÚÔ²§SÕ§¸‚:VB�Õ¶ºõw“2ÿ7]Þø&à SM˜$* ›†Ù€ àTSXT:wÖQ‹|�ƒ*`“<«Rܰ,n³Ò€ÈÜ•Ò:˜ <Ž#¢IÇ0~D££ãªé‰YFÚ\M%…qïb¬ÈÞI'ƒ0&~£7°•f&ìøº¨eš•&€Pò)Ês’¾ŠXB�¿CÉ$âÁ$| ™‹'Hîbf'%f†Fï Ù'oê.Ê’…Ž>!·yEaáÝ(š¦�ži@‡. ãTYJܧAåQ9ˆs'£^@|ùQ´Î‚}i˜6ÑñâiÐG§d˜’�<€8/&À¢|rµmä c§2l(”O±ð'»Ð qcžÚ/fþôjþôÁO¯'„óµ€q�9bœ áØçÝäx¿J:ZgôÏe’‰C‹Þ¥è,€/öZD3¤ÕÛíú§Œu^} íÓ+MIÀ¯hǺž‰üºžéÔˆÙb ÙøH?q1Ú0�d…øÀ/‰é$k�µìÄŸ‡"[[X?ÌI$ʽPüT×Rˆ%Øñ°ÒC#“QÜÐ,™t €ÅtŸWÖ@‰Ý')\=°DÇ˸ìñtl%4å r‰j»G]£ù±"ÐRÃQ¡Y±˜Å�NõK½#YJõ(dÈíCyâÉjkŽ5â5)Õ‰0¥´ñ+Ó& ^0˜†Ûкb‚>¾(|å´OGÍã€; —é*ÞLeG¦Žä=í†1B˜ `!Ûˆ0Ù®úŠ^*3ë ýˆ ãÂ'»�ŒAê2.- 4óVñD¨:ø<Ýü�¹‚�n#`߉“ð¸[+ím yzSw6À¸«'°.mà…“(3`\~ÓàriT2HÂÈ+ l’Å$d Q·¿r� Æ‘«¢­Ó_ÍßkŽÿÜ<æÏÝóÏšÇè ñ:ª•tJòzà¿Üëùp¯ùݽz9lPp�¿/âì¶y#‚ïzmýÒktrH�~äè ã`Ȳ42 ñnh„$¢¤ Rd»mÚ'Qˆ ûð(J´´N,=ÞYnZ9LœÁÔa`À‹¤…ô*•«tÞ5'â†};íà\Úuî™�zÐ(Œ¤P+ E[QÆFªV·}=v­%¯�ó§Kì®[Š×yÔg¸6ð9²g%kë89MA»¾ÔΔYœ+K#·ª[É'+±Ñ l¢¨ëñ·Ú q4*uY ½§ˆV� 9aqŒ(‰s*æ2T” ±ìhztö‚Ù«û&“x5ÿé‚û ™0êÅÆ�h×�$BñyR ¥Vð]Ò6Há?×=W=×<—ðÍ<ªnP›‹‡JÎ}”œ‰Ï]Í·pjŽ–õÛJÙJnŠ­‘,R�PeóÑ4�„l§{àòþž´.�ÿL!ëŽT9&xñÖ3çŒ7}ÑÆ>fS°Ý?qjU]%�0K³O0< OaXyùS¹8[æeS.â:¨n�”ÓègšNùՅö¨ ë|‚ÒbTÔ¶K(E¼­¥†)zàd³.ÖpÛ V¬©:1£mfJ”æ”ôw×n#´¨ÃŒˆƒ¡F½ð±3%N6`e±(èÜnÃ&¾ÛcØ7²R‡F˜£ÈØ{xMwÑœ®1§-0ßLìBÓó5Yj‚CÕz§sùäœnFŠu[»7�†i<­x7ÜyH`¬šIL[@£zFHw!¬î€ß³Ø‰SmÑ^ ¸eÑåì“·Ü͈Æè‡g>ª 1×bwûž=,ƒŸ<ç®/×å£roqZœ4«æ�i Q×Azd“²êzmèDÖÌgrFM�¥ùÇo_€*ËäíÏ|�ع‹ñ?S" ò]ïÏ_y�«Vû‹¥¼VbÞ—òþ•o‹ù¶ŸÏÅܵ˜×ˆo_ú;Qùó�Ê× ˜¿•&©7#>´éÜx`0|Ó}� ª#Å7miÐ%èLþŠG�aÚî ù[Öͽ1Ñ0ÙÖŽ¢ð@�jB30ž,{oim��ãý:’Ä r¬ÈÑžñRX¡o¸}7XÁý稾ìªcß•=r|¨˜Õ…z;Mq( T7÷’{ íu?”?g$=£#˜C3›ž³C– ³´œalìK§¼»´²ž¹§ZÝ ƒô0€»÷¸u³÷ÞˆG(ƒ£µÔüÐZÉÛÑSF¯õX­Ç'ë²ü‹ØÃ¾æ½_ @î S.©ÍfˆÑÑm%Ýåà】¿ûíÿ K©½ˆÑNÝŽ ܉ìTH”ÐAŸ«éô¸9á«øÍM¦‡)Ù‡x®52‰´ ʼnŽîÏc!µ9¢žÄÑ�¹�çÝî5t0˜m%¹^wG±²*ÍHjéôÀJ ‰ü·_ÛèHîÒn}EB,¼Å¢Û3Èi€¿‰u°«¬ÊãRé3Ýæ”ã¾[Dž=U`dó<®Ç†Òí»zÝßëó¯ÖÑœA²!Ü\“†ðz´ 0¹U]Ö‘÷Íëës¶w?¼1aH–UÏg1tä—ÉÌÛlî}©?­GÁ'½©‡­»Î8ÈH£|Ñ}‘б ÷îÙŸ·äC©U(îtNÏǼÓÃ"¹ô¬ÎKî)Ä.‰æ ]ꬖCs¡uÂ嬡ëôPš€¢p9ý'o\£î K %^9:Ýè ÷¦ó—H™:ª'•I˜©Û.ô½/Éåž@Ùû /‚�Z[Æbãv×ózzê÷¥Ã솆,ý†ôN9už_�ÈHœeºî%ÝOw¶êÙj0­\”°)E˜¡ã§â3^â¹}ò<ä)[ÀD�߬º~ïDÃmlûêèf~º-Ù–¯ï¤kQ˺&êVµŽ–Žž7Á>'6'àW쬮#A WW ìQõô“¿šY³áUC \Þjè)°çCàóñgý%“ŽSsàcÞ®üÇäcþ�a\4ÿÎ0Ù›g˜jÍ¿3ŒŸæ/‡�åÿôYJãÉ�#ýºž5OPÆšª{dˆ©ÇqJЃDà'¬zºwk�”©ù_T&W›ûMÉÕfzTXtRaw profile type iptcxÚ=Š1€PCwNá %ê?ùßÁÍÁûdžÁ ôa÷óNÛZ¹ÏDŽ\žª_@L­EÐÕ�¥9äAo:E/]`ÑM°˜D?t¤ðõ PQÉwi iTXtXML:com.adobe.xmp ÓÄ„iCCPICC profile(‘}‘=HÃP…O[¥¶T¬ â�¡:YqÔ*¡B¨Zu0yé4iHR\ׂƒ?‹Ug]\AðÄÍÍIÑEJ¼/)´ˆñÁå}œ÷Îá¾û£ÂT³kP5ËH'B6·*_B˜j!‰™úœ(¦à¹¾îáãû]œgyßûsõ*y“>�x–é†E¼A<½iéœ÷‰£¬$)ÄçÄc5HüÈuÙå7ÎE‡ý<3jdÒóÄQb¡ØÁr³’¡OÇU£|Öe…ógµRc­>ù #yme™ëTÃHbK!@F eT`!N»FЉ4�'<üCŽ_$—L®29P… ÉñƒÿÁïÙš…É 7)’º_lûcîͺmÛvó<WZÛ_m3Ÿ¤×ÛZìèÛ.®Ûš¼\îƒOºdHŽ ò Àû}Sè¿ÂkîÜZç8}24«Ô ppŒ){ÝãÝ=�sû÷Nk~?ý»rx@\&¤bKGDX’¼Í`¬L pHYs  šœtIMEå +IÛÞ IDATxÚì�y˜Õ¹ÿ?U½wÏÞ³°3²£ "jb”`TõjLŒF½b¢þ4bÔkBŒ‰!ÅCÀ=.QÉrãr�—�Æ-1\Ùa�m†Ù{¦÷îªßÓUT÷t÷ô æïçyêéîêªSU§Îò~Ï9ï9 rÕUW)9þRz8UA8¬CùH&‰¢â²í¿W …ñz==¥�&Ñívܶ®ßñh‚p2rtºŒã »�5 ‘^ܹBé€jŽ«´÷xd°©‘÷ëch†×è}ùÿÑGÕ ½€½�ƒrˆ¥1 á3‰F{[˜Fœ ¯°�$I’ܟdž­ï$ÔÒÁÚö$šÍÁÈAETØuZ[:Ù–×®W©PÊ0Ïþ˳íõ ¼Q/)%¯FسŽå›Ú(qt/D‚ ‚ Ylm=‡HÈúÿUW]¥*z YD‚’ã3›8±ð™Ó®�PœVT”«t¢tÒ$®ÚèöPÔo)B'׺ZãµdW/‚]^ÏႽz,'T÷åLC�9I"PAº «(P²½·bÁÞ ‘�M äúÞïbA×uI ,Éå‹kCS…Š[Q(ªöõ.-ë½xß=¼ó²r7•8I‡›gWØN§�¼#R—ÚËûèá`ÕSĤ!%”eËŽÚK«9Ö_ÀУæF–õbèQoó€®ë’oAá@QöKÛy.! [D®Þ†‚Ä‚½"¡§�<¢AÀg@¸¶µ‡iÂŰr;ñH‚d�C�¼[¿6ú«Cª\iÉ´¬¢ˆ²#¾b~§¸Xì C‰I¼³•�­”R�*‘!‚ |~­§íÝ> =‡Hȶ‘) z öE‚ÕðWs|Z¿g 9"I†'V)=IG05ô¨L!ˆÒY�P°1¨_‡u¥õHʙٓrfŽEDzpfv¸Œãû‡`G�æÒ®…Ýq4q²5q•#Ñ!‚ }zâ!›HÐ,Â@ËòÙíü|bA)P$(YÄ�-õ™¹™ÇëºÞ“ópÒQÀ¬GaT<ûqÖ£`(Œ¯‡Y�‚-Ö’誃#á·ë4ìnãÓh¾³TªkJî)ü>>Ù9$ÞË—'ìÿY�´h'�P ‘PÅSA©KA�Gˆ$5´D'�I7ee.T’„ÛÚéŒ8(BGO€³¼ —%Ð!štuâÑv·â:::z2BGPÇS^†KMj‰+è�lEe”ØôX­�!œe^ËìX:: ’j1e>z4@K8Š×iGÓ�øÊÜ8�H{+Á¨›§Ž®%Q]åùt¶´¥‚Ò…XG+¡H§šýyŠ]Ò–!‚ ô«AßgS¬{@·-C$$36Õ" = öD‚µ·ÀžöÔæ0¾ëºž)òù.ˆ8lUD’ŽP‚¶ÔÐ£Ž‚‡Ùè¶õãÐ#…ò /‘¶ §›šTÃy!ÎÌý9ì([ÞÔïá‡éô¨—�pg;�¸—Ë�Û©’èL Å“ÚÂ]O¨�ªé©&À‰Ë$Óp;cD“Å™b!çУ”¡ŸæÐÌÞ™�¼)ŸcjTà6Vi¶œk:1[{²ˆ%3‚  "!7š¦¡išD„ ‚ ²9-g:3g %Ê'ôlÿYzt‹X0„‚1š‡”€H°·'!˜²á]º®;E±.�œ¹”�i›ÛÁ�ÕPß;ô¨kÈP¶U™Ý+2Ã�œìíQ°¥n4%RÁ²~CÚƒgùƒÁ’cP‡ÝŽÃ.KëfæÉ#‚ ‚pàêÝl‚!Ï”§iBÂ* ²|7…ƒ¥wÁ ¶”X0×,> †­žoqäÌÞ„œ= ]Ÿ]~æìGö:7;­[jŸñŸ=%Ô”@è d =Ê!zj$3" ™h@"‘ a·ãr:$BŒx‘AAØ/ä[-Ÿ0È'*²M¥jº%`á9%”Ôì�ê4‘ZCÁ°×V‘�¢”Í?!�lë(@Ž©R-> ib¯O‚-å¼lÓõÔú ©EäÌgK …Ì=O¯‚þB!Ä lªŠÍ¦Jd = ‚ ‚°?ëØBÄD¦ È&ò­µ�yYK˜æ*͆HHõ,Xùí©aFÖ^„Ìž5‡X0\S²ˆ…l+4Û,�¢Àbd ªE$¤û'X —L#&Ûïž^ŒAB&ÑX ÷A\(îPBzAáÀ“Md)Ê%zèUPŒéQ÷v$è(Š¢f C²eØïÙìx5‹0èF÷éQÓ�‹­ ¥Y§Mí&ög5J_?¡K(Ùzrù#ô´¿·ÊNø|(|1Ž%.Aá`ˆƒl¢ ‹ÁŸ³§!—s³å\k‚õºÆð#%µ³)R¿»õ"¤ögrÔƒ�BºH° �´O}¯/ƒÒ%ÒüºþO „l¢Àèi(¤g¡¿|„Ï>bï�‡}Š -Ig(F(¡ƒ¢âr;)v©ÈÀ®ƒò2‰k ÚTlŠD‡p¨´F$iïHà*rá–‚¡òy’PBÁëÜ™ÉXÊÿNâ·§ÄH¤#D+.jŠí]õT"Æž@w‰—û� } ™ß±¬g`Ù¯Xœ›Ëš ŠU,�Þc�iÇ+YìýÌï�±2³é`œy°1{{§NMóŒÎ {‡e ÙDCÑ+±�ã9 ½;?'ÓÑU^—í°5Ìú.4:Û:ØÖ'’‘•NCª‹¨pˆµz *¾h(D}k„Ö˜N2µ×åtRUî£Ê«鈒ôx(¶Klõ…d,JKgŒÎ˜FRŦâu»¨(rŠaV@úŒwv°­1†G+gD‰Mö‘HkŸ´Û9¼„RУ|º£ƒpi9cËeV¿žê­öö ;� ŸŠ ¦¾5F‰ËMÑ~JœÙzúQ$`5Ú³83+–™�”Ô®4Û<ã·µ÷ m!dC€d{Æ\Õ‹’å{š¿AÆú©bÃbÐg 32†õ4ô¨Ç!I™b]t‚Ð�BA£¹¡•mQ•ªš †zðýÇÃDvÜÇ>U¼} íMmlíÔÈvf,fËÎñ%T9³•)Iv·Ñ ¹5ȇ·'= ²® †rlЧëé´4´Ðæ­àˆâ%�t‚­ílnO�쪊׮¢'“„¢¶×Giv©Ä¢%UN|>Ūtin ÒJÑÀf·SZìe`©:m -4{ËY¼ï5g´½�M1ªòù%iÜÝÊNÍËØA^ÜÆ­&ÃlÞ™ zh1ÅZwj š›;ØL’Èø«µ3ÌÎ5þ"ûºgZ,J}kˆÖH’¸®àp8ð—ûà=< ¹x(BÄéÞ7q™ŒSߨA}¤«œˆ45ÓÙá¡¶ÚGq¶hÐ"lù´“Hq)cý–r-à£N'jÜyË:ë=GÛÛØó2¡ÊI´#Àæ–8jQ #ìAsŸò[G {± —åÓí<K©:À“èu•Ù IMCS]ëú®%Ñ´,™$ÔÁG{¢©FUUñy\T—{÷ãA¯«Ï=} Éζ’äëD�ÖÆvv…Òã/±¥Æ ðàÌ–ï­³ƒz_Œ4½€ô“~ÏŽ¢bFë š–$Œâ(-gd‰ º±¿ [�ÑÜ¥ÄëÀ¡84жþÉ#½Âf£Ô­b3…¸Ývl¶þfº†bsqä ´D‚ööN¶îŠ3l`1%û±¾Šu†hÒUÊœ6Ë;9Ã~õ�P­G³/A g Ëžf+ªÞ"&V:Í´ ÙÚÀá(¥²¡˜K(dþ®÷˜é[`ø%XƒªªY„ƒžÖ ß]$èAZjì4»Ýpˆ&{‡@Ÿ„B¦ž)L‘ ³×ç€,Ã�²õäÚg8Tw…™nü:üHÄ‚…‚��©kŒÎ’d"Á ›‚Á®ÌâÖ]ãf¿42é:I-‰¦éhÉ$º®“Œ…$x½jßâ¡wq‘¤9!ž#ëØœj«]ÄšÛÙÑr¥µÎ;"Ø=%”+16wDH8�¦�é ²³=NL»ÛÃ� 7½+�kš†F‚¦†Ú=ÅŒðÄØÔ¬QáÖDubI()/f�W=I µ“úT ’ÍéfP…w(À†ˆ›1UNT=AÃîvÚ=¥Œ.·ƒcçο}ïõ�ÎÖNv…º„‘Ãíap…»«Å;e{SˆNMÁétâÕô”A�mìèL¢ÚlûltvÀ A>|ùÂëUZHÐÐ%ŽJUeÝ hFk™N4#’Ô0Úg¬F iHØ>Ð�OÕA»ËÅ�J…–xW%¥ë:z,Ìö� Ååax•§ËЈEØÙ¦SE±Q^^D�GíÍ-]Ϧ+*¾"ƒKhºE($¢|ÚÆá/íºg‹a©é:%%.‚í�´zŠ)µ¥ŒG=¯ìÃ;XBE/ ¢xg»ÂIz¬!thnî¤ÌUd[¶étz[jÇ†Ž†‚Ëëe˜!¬t½-fGK„� RRVÄ Ÿ b!64k”»5:¢1ÍFM¹“pg”p …wê'SP‚ ‚ Âg…H$ÂâÅ‹Y·n]Nñ0vìXÎ=÷\Ünw¯…‚aà¶u!oŽÍ…Ê>vOävdýO† ‚ ‚ Ÿ5êëëyøá‡³Š„LÖ­[ÇÃ?lö6ôV,bs÷Å–ÏwŒ½/‘bõOÈv�¬þ ˆX¡ ‡Ã|÷»ß%‹a·ÛyüñÇñù|½çÞ{ïåßÿþ7_ûÚ׸üòËÉg½êª«hiiaΜ9üñûg—^z)÷ß?ܯ÷ýË_þ’eË–¥W�‹.ºUíê �Çã<÷Üs,Y²„¦¦&¼^/&Lࢋ.bРAlÛ¶�›nº‰šš|ðAÞ~ûmî¹çæÎ�ˤI“øÎw¾C à±ÇËzŸÛ¶mãþçX·nÉd’ñãÇsùå—3hÐ ó˜wÞy‡?ýéO4551|øpfÍš•µì~æ™gxíµ×ˆF£}ôÑ|õ«_eîܹ”””ðÄO˜†û_þòÞ|óMššš¨¨¨àÌ3ÏäœsÎéÕ»S…sÎ9‡gžyMÓØ¶m4ãøg?ûO?ý4[¶láé§Ÿ`Æ <óÌ3lܸ‘x<ÎÀ�9í´Ó˜9sf·Ê1�óðÃóÎ;ï ë:§œr ³fÍÊ): y.ãÞî¼óN^zé%V¬XAII —]vcÆŒá�`ݺu 0€ï}ï{Œ9R2© |Æ…‚µ 5ÄËËË™5k¯¿þ:çœs.—Ë,g2íẺº‚…‚U d‚Ô[½7Ç÷jèQ>¿„¾œ+‚ÐW–/_N,£¶¶–qãÆqä‘Gf~ôÁ0oÞ<6nÜȱÇˈ#Xºt)sçÎ¥££#kØ�<ò›7oæ _ø\p�Ùbðøã�³k×.Ž:ê(ÚÚÚø¿ÿû?Þ~ûm³œûÕ¯~ÅŸÿüg"‘'Ÿ|2~¿ŸwÞy‡Ÿüä'477,¨c IDAT3lØ0ŠŠŠhhh0¯¿fÍìö®v›O>ù€††�ƒ ¢¼¼¼Û=644pë­·òÁ0uêTf̘ÁêÕ«¹í¶Û‡Ãìܹ“… ²{÷nFŽÉàÁƒ¹ï¾ûº…õÆoðÜsÏÑÞÞÎĉéììä7¿ùMWk’}o{Ò¢E‹øÓŸþ„¦i|ýë_Çãñðûßÿž_|±×ïÏèmLãÓ6Æ `íÚµ¦5j'žx"õõõ<ñÄüñ�ìöÿþïÿ²cÇÆ�G8æå—_æå—_Îy/…<—õýëºNMM ���<ôÐCÜwß}ã÷ûÙ¶m÷ÝwŸÔy‚ð9 ñxœ§žzŠ-[¶˜bá›ßü¦)Þÿ}þö·¿å £?lè}±ÓûE(ä»x¾Å×dæ#AúcØÑ 'œ�öùÎ;ï¤g´ZŸ}öÙÜtÓMÜzë­Lš4‰öövÓÀ·ò /ðÖ[o1jÔ(®½öÚnÿ1wî\nºé&¾ð…/]¾«W¯æƒ>Àf³qç�wríµ×òßÿýßÔÖÖÒÑÑÁ /¼€¢(Œ7À¬TÖ¬YÈ#¨®®6…¦M›˜0aBÖçñÅ …BL™2…ë®»Žï|ç;œvÚi477ó�ü€W_}MÓ8âˆ#¸ýöÛ¹îºë8ûì³»…eŒ•=ýôÓ¹ù曹í¶ÛÒz% kLí«¯¾ À�7ÞÈ\À-·Ü‚ÍfãùçŸ'™Löêý-^¼]×±ÙlŒ5 ­…ìÁäî»ïàø‰D‚éÓ§ó³ŸýŒïÿûæ0¦—^z‰ööö´°«ªª¸ãŽ;¸ùæ›ùêW¿jÆE6zû\䦛nâÇ?þ1¡Pˆššn¸á~øÃš­¹¹Y2© |†Éœ¹È Û·oOÛ¿råʬ"![ùìí\öu.{¼¿P Uû{‰hA„B ‡Ã¬^½:M œx≦± �®) cü˜cŽ1ÏŸ;w.O=õ3gÎL wíÚµf õ÷¿ÿ}³ÙŠq=À4p[[[øè£�9r¤9¬Éf³1uêT`oo�!6oÞLkk+»víbôèÑy䑿ÐC(Œ?>k¬_¿èr”knn6{+ áðé§ŸpôÑG›C£2gÒu�;vtû邏NJ;nÓ¦M¦Ï@YY™iWVVÌ0rñÞ{ï1{ölfϞͬY³øßÿý_Î:ë¬nΧœrŠÙ»‰D̸0„À´iÓPU•D"Á† ÒÎ7ÒÀqÇgVÈÙÄLoŸkòäɦñz½fü 2ÄÞÔ›YPAøl0`Àª««ÓöÕÖÖv+ã4ûbÛÛ÷çM‰pa°lÙ2b±Š¢˜cûÓp\¶l§žz*Á`Ð,‡ ™sË–-f«öo¼aN#j¥¤¤Äünt+cS;;;»P\\ ` £—`Ë–-TUU™‚ µµ•%K–°yóf6nܘW(„B! «ä…^Hû¯±±€@ tõ‚X¿÷”H$ºý—ù Æõ’É$×\sM·ûilldøðáyÅ�1$Ên·3dÈN?ýônb  ¢¢"íþŒøµÞ“ÍfÃëõÒÙÙiÆk¶{7žIÓ´nÇõ幬éÈét …Ì}Š¢àp8H&“2�‡ |D�uè�ÕqÙ(KJJLŸÃÁ93Œ¾Ú×}õQè-ö=WÓZ4ŠÚ hÙºž¶¢‘Œ¨tA¸ž�;†Œ¬Æk¦îÓÕ#jp“$h#î.ÇcÓïÙJ½2�¡åv´d˜ÆOë¡zå½ÛìG‚ ý�1¼H×õ¬c<�Ù�Œ_ Í!‰Dp:�i†ßرc¹è¢‹¸í¶Ûx饗8í´ÓzµÎ€! ÝÀ¨ŒÿkkkñxŸ¯›XØ×çáó‰1ÛžQŽ^|ñÅi> ¯½ö]tGqååå|ûÛßæá‡NkD/Ô‘9�£ª*ªª¢(Šùi|ÏÜo| ÖïÖÏÌïÙ~«å¥¢±.—»êÄWV‚ËåÂåsãÐÁîtáò•RbïdçöÝ4µGQJª)ó:p:U⑉ŽzvlßÁÎ�M„u ]wàptmv»ÝÜAöëlGsçÎå¹çž3·»îº Ø;üÈãñ˜±áG0þ|®¼òÊn-ñ#GŽd„ |éK_"‘H°hÑ¢^ÝÛĉ�®!E fÿÞ{Ùl6ÆŒCcc#«W¯fèС3dÈJJJxë­·ˆF£9{F� tµˆwÜqwÜq”——�FÍVôÁƒ]cd�a7†o‡Õ(7ü¬ŽàK–,I;nÔ¨QØl6‰UUUwÜqL™2Å4Ö­¢¬?q¹\æ/ë½/]ºMÓp:�Œ3&íœ÷ßßü¾|ùr3.²Ízt°žK„Ã_(„B!^{í5t]7—­αXŒ—_~¹ÛH›B…‚Õ–6ìk§Ó™sËvŒËåêÓ–a½«Ýœt]ÅË€#ÇRì =ÐÆîMõø†�¢Æ :*¾š#RŒÙsÐÕ“ ‰H„þgÙ²eÄãqJJJºÒ£F�Âï÷ÓÜÜl?úÖ·¾ÅÝwßÍßþö7ZZZˆD"¬^½š’’Î<ó̬׸袋Xºt)+V¬`åÊ•L™2¥ {;ú裙´Bu)q[ã†�öè q®Á>ÜÄŠÖ¯�– 7¤Â§‡ªölÛ^ӣƦë5š½¸jÀ�ê ¯ª—h‰`Qãöî–¨âRÑíª¯Ò6ÀïQMSt]W4MSŒ^†ÔôPRê ‚ BìÙ³‡={öP\\l:îþùÏæ©§žbÒ¤IÌ�;W"I! õõõ<ýôÓÏtVVVÆ…^Ø+Gæ¯~õ«†/‚nõCHýÖUUÕEÑEIªªšP%ª(JDQ”NEQŠ¢´(ŠÒ4(ŠÒ (Jд(Š‚@ˆ)Š’’€èöÑÃŒÙ%T�¿W¥8j=A7‡UÕŽ¦Ò2�kר*‡�ÂoqZÖ4­+tYCAá�çÝwßå÷¿ÿ=^¯×œþõ_ÿú@ÖY‰A„. ÀÕW_ÍâÅ‹ÍaH¹˜çœ}öÙ(ŠÂ›o¾É’%Kp:�Œ=šóÎ;¯`ÿ A„Ï+n·› /¼�ºº:s3S0`µµµæv¸ÑoBAz AOEáì³Ïκj³ ‚PK ìÏ^U^« ‚ ‚ M(H�ƒ ‚ ‚ >6´ô(‚ ‚ ‚ BAAA ‚ ‚ ‚ ˆPAAA„‚ ‚ ‚ û…ºàZkk«Ä¸ ‚ ‚ ˆPH§¼¼\b\AA¡ÐØØ˜¶Ã:W«®ëæoë§u¿¦iiûŒßš¦¥}—uAAá0 UUU …l[¦0B¶MAA„ÃqfAAA„‚ ‚ ‚ "AAA¡ ‚ ‚ ‚AAAD(‚ ‚ ‚ BAAA ‚ ‚ ‚ ˆPAAA„‚ ‚ ‚ "AAA¡ ‚ ‚ Âg û¡|sº®“H$Ðu]×åm ‚ ‚ ‡Š¢ ( v»EQ›û>¤{‰š¦‰HAA[t]GÓ4‰Äau߇´PÐ4MR– ‚ ‚ð™àp³mퟗÓÙÙISSÄb1‰N§·ÛMEE•••Øl6IÁ‚ ‚ ‚ðy ­­­lÚ´‰@ �ó˜]»va³Ù:t(µµµ"AA ŸÕÓu� 6°cÇŽ‚ŽO&“ÔÕÕQ__ÏQGEqq±¤AAásËgrzTMÓXµjUÁ"ÁJ$áƒ> ¹¹YR‡ ‚ ‚ Bá³ÄÚµkiiiéóù‰D‚�>úˆÎÎÎ>�ÿ—¿ü…K/½”K/½”K.¹„K.¹Äü½bÅ ^}õUz衬ç~ç;ßù\Š”+¯¼2ësJññòË/óØc�uÛŸL&Y²dÉA»þ¡t½mÛ¶ñ_ÿõ_ýv÷Þ{/ÿøÇ?ú%¬õžúƒ-[¶ôk<î+ùÞë�N—V:::¸ä’Khmm5÷­[·Ž‹/¾˜¶¶6sß'Ÿ|Âìٳپ};×]wÝg¢ÌÌï ,àí·ßÞ/×ÝßeòáPÎ嫳ú»´b¤ßŸÿüçy�«¯¯gýúõ‡\šý׿þ•5=ùä“\qŬX±bŸÒ—õ¹µ2T„Â!ÄÎ�;©¯¯Ïù¿¢( >œñãÇãóùò~øaŸ¼Óÿã?þƒ?üáüáओNâ‚ .0{ì±yÏ]¸p!ååå’2£øØ¾}û~«”…Cç=õ÷LùÂ>|8·ÝvÛ�ŸÃq–¹ââbjkkùä“OÒDAIII·}'N<¬žíP}RG<>ùäFŽÙ£PX¹re¯…ÂþNoº®óôÓOgMGï¾û.sçÎåØc�ݧôe}îƒQ†~VùLù($“I¶lÙ’÷˜Áƒ3jÔ(ÊËËYºtiÎuÂá0;vì`ذaû¥¸ï¾ûX¿~=eeeÜxã�TVVrã�7ò«_ýŠÒÒR}ôQ6n܈¦iŒ=š+¯¼§Ó™ÎŽ;xì±Çhii¡ªªŠ«¯¾šêêj¶oßÎOýôSâñ8{öì!™Lrà 7PYYɇ~È¢E‹PU•/|á 9ã©·ñ1kÖ,î¹çÊÊÊÒ~å<åÊ•<óÌ3$ ª««¹òÊ+)//'‹ñØc�±aÃ***¨­­ÍšF,X@0dÞ¼yÜrË-¼÷Þ{<ÿüó$“IJKKùîw¿Ë Aƒº�›+Þt]ç¹çžcÉ’%hšÆgœÁ×¾öµ´s›››¹ýöÛ¹æšk¨««ËϹÒÁu×]ÇO~ò À;ï¼Ão~ó{ì1\.ûÛßhll¤ººÚ¼ÞîÝ»yüñÇikkÃívóŸÿùŸŒ=€^x�×_ŸÏÇ´iÓÌs¬ñWSSØ1chlläꫯ&³hÑ"6mÚ„ÍfãôÓOç´ÓNËšš››ùùÏN}}=cÆŒáúë¯GUÕœñÜØØÈo~óÚÚÚÐ4�/ùË|å+_éöž¬tvvòä“ORWW‡¢(œtÒI|ýë_gëÖ­<úè£ :”––~úÓŸ¦�÷á‡ò§?ý‰X,†ÝnçÛßþ6“'OÎù|™áE£QÎ9ç¦N� À²eËxñŹì²Ëxà�X°`AÞô°xñbÞ~ûmEa„ \rÉ%ØíéÅúK/½D]]±XŒ––×^{-~¿Ÿ_ÿú× 2„ÿûß\qÅŒ5*k<üÏÿüï½÷v»�+®¸‚ñãÇwËÙž»Ðò$‘H”Ï­Lš4‰5kÖ˜åÈš5k8õÔSùä“O8餓Ì}Fú²Ùl,^¼˜þóŸ$“I®¼òJŽ:꨼ñ¹páBFŒÁÆ�inn¦¦¦ÆL‡V:::xøá‡Ùµkº®3sæLÎ8ãŒn÷<þ|ÌÖ­[ ÔÖÖrÅW˜ñzÎ9çð׿þ•ûï¿ŸÆÆÆ¬yº†ÊÞ}÷ÝlÛ¶�êêjfÏž�ßïO»V®¼ûÊ+¯°mÛ6‰Û·oÇï÷sÚi§ñÚk¯±{÷nÎ?ÿ|¾øÅ/æ,“5Më–ÏÎ9çœnÇoÞ¼™'Ÿ|’`0ˆÃá`Ö¬YŒ?¾_˹\ù÷¡‡bܸqLŸ>�ööv¾÷½ïqóÍ73iÒ$¶nÝÊ#�<Â)§œÒcú5òz¶:«¯å\¡u ÁG}Ä /¼@<çî»ïæ¼óÎã‘Gaþüùlܸ‘Gy„Ë/¿œÅ‹c³Ù‡ÃsÌ1Y�›?~·ü?f̘‚Êå|ù!W�sÏ=÷øÑ�~Äœ9søáȯ~õ+~ÿûß ¹÷Þ{¹øâ‹¹ÿþûùÕ¯~…ßïçý÷ßçÙgŸ%�2nÜ8®¼òJGÖº³¾¾>í¹§N�j–¡¹Òtõä\xá…,[¶Œ={öpÊ)§ðÿñ}*‹¤Gá0`×®]Äb±¼Çx½^ó»Ûíîq†£mÛ¶í—ß>úè#Î?ÿ||ðA Ä›o¾™öÿŠ+hoogÁ‚,\¸�²²2êêêº)ôx€³Î:‹û￟)S¦ðä“O¢i÷ß?_ùÊWøõ¯ÍìÙ³y衇èèè@UUvìØÁ”)S˜;w.Ççw¿û³gÏæŽ;îàí·ß¦µµµàã:;;yüñÇ™3g÷Üsä/ùKWâRUV¬XÁÅ_Ìm·ÝÆGÁ›o¾‰¦i<úè£Ìš5‹ùóçS\\L8Î_…ÄG_Îokk㡇âÚk¯eþüùL˜0�E‹]ݤÍÍÍ,X°€þð‡¬Y³¦[¸�‡‹/¾˜Ñ£GsË-·ÐÔÔÄoû[n¼ñFæÏŸÏ¾ð~øánçå‹·eË–ññÇs÷Ýw3oÞ<^yå6nܘV1-\¸�o~ó›Œ;6o<çJãÇ�gÓ¦M¬_¿žÚÚZ6oÞlþÎl}}à�8餓˜?>—_~9÷Ýw‰D‚�;wò׿þ•Ûo¿�yóæ±k×.ókü]sÍ5üë_ÿ2óÛsÏ=‡®ëÌŸ?Ÿ[o½•_|‘mÛ¶åÌ+?úÑ�¸ï¾ûøôÓOY³fMÞx~饗8ꨣX°`óæÍcë֭躞öž2yöÙgñz½üú׿æ¿øK—.eÕªUØív˜2eJ7‘`Η_~9 ,àÚk¯eùòåyŸ/3¼ã�?ž+V¤¥S«ØÊ—V¬XÁÒ¥K¹ýöÛùå/Ikk+o¼ñF÷B^UY½z5ßýîwùÅ/~Áˆ#ø¿ÿû?Óh^¿~= ,`òäÉ9ã ©©‰!C†pß}÷qî¹çòøã�w»V®ç.´<éK>Ÿ8q¢™7c±»víbÆŒf�B$aË–-fšnkk£²²’{óÎ;ÏŒ‹|ñ©ª*ü17Þx#óæÍc÷îÝY˃^x�ÒÒR.\ÈO~òžzê©´aQÖw²iÓ&n¾ùfî¼óNvîÜÉ{ï½g¾“ÎÎN}ôQœNgÎ< °jÕ*.¾øb|ðA `>K!yWUU>üðCf͚żyóøôÓOY¾|9sæÌáÿý¿ÿÇâÅ‹óÆ{¶| …º÷ÄOpÆg°páBÎ=÷\žxâ‰~-çòåßñãÇ›a®[·Ž‘#G²aÃ6lØÀ„  J¿ùꬾ”s}©'MšÄYg�ÅÔ©S™3gNÎã&L˜À‰'žÈ™gžÉ·¾õ­¼afæÿBËå\ù!_�cá_þò—iböÆoÄãñðãÿ˜)S¦˜û[[[yòÉ'ùÑ�~Ľ÷ÞK(âå—_ÎYwæ{î|嚪ª477sóÍ7óÓŸþ”矞h4ºÏ6G�dzn±X¬à-�öiûL …ÆÆÆ‚ÄD2™4[ZzZ!/‹ÑÞÞÞï÷:zôh À¨Q£ºùT”••±k×.V­ZE"‘0�œÌÖ–ææf³5ræÌ™\ýõ466ÒÜÜ̉'žÀ�!C3¬êêjÆŒƒÓéÄétRZZj>o!Çñ›ßüÆl}7n{öìI{N£uðàÁ´´´P__O45[ñ¾ô¥/õ(Æ ‰�¾œÿÑGqä‘G2tèPf̘ÁÊ•+Ñ4�µk×2uêTl6^¯·Çacü1cÆŒaÀ€|ñ‹_dóæÍÝ*Ð|ñ¶råJN8áœN'EEEÜ}÷ÝŒ9Ò<÷ÑGeÊ”)i­}Ùâ9_:°V ›6mâË_þ²™>6mÚĸqã̰›ššØ½{7§žz*#Gޤ¼¼œ�7²víZÆŽKYYŠ¢¤ÝÓºuë˜6m6›�òòrŽ>úè4ƒøôÓOGQŠ‹‹»ÌV¦M›†ÇãÁét2lØ0ZZZòÆsYYü1›7oÆívsýõ×§5ä겞>}º)þ¦N�ÊG}d òLãÝš®–.]JCCÇçŠ+®èñù¬áM›6�U«V¡iÉd’•+Wv»V®ô°bÅ N>ùd¼^/ªªrê©§²lÙ²¬÷9fÌJJJ˜2eŠùîEaòäÉf+Y¾x°Ûíœ|òÉœxâ‰444˜k!ïµ�ò¤/ù|̘1tttÐÐÐÀ† 9r$•••f¹aà Dii©ùF:µ–½=Åç±Ç‹ÝnGUU˜Õî /dÖ¬YTUUQYY™³^:î¸ãPU›ÍÆQG•f$O�:EQz,ËÇŒcÖ#'žxbZ=å]£Üðù|¨ªJUU“&M2ß�ÕÇ#WÚ/$ŸÍ�;×l1ßå\¾t›Ù ò•¯|ÅŒ»l "¹Òo¾:«/å\_êÀýAfþïM¹œ-?ô”^{Û˜:jÔ(ªªªPU•ë®»Ž™3göhsô¶|8þøã¨¨¨Àårõ¹,’¡G‡Á°£B úÎÎN–,Y‚Ëå*ØY¹¥¥Å,œú �Ç“–Y3ÇŽ3†K.¹„—^z‰‡zˆiÓ¦q饗âr¹ÌcÚÛÛÓ f»ÝŽÝngûöí¡(Jša¨®®N CUÕ´®4UUÑ4 ›ÍVÐqš¦ñÒK/ñᇠÓZ ²=ggggÚ};�δkå2zŠ�¾œX·n×_½y¬Ëå" ÓüX|>_Þõ8�EEEÝž-¤=s¾xË<Ö‡ï¿ÿ>‰D‚Ë.»¬ÇôdÜK¶t0qâDþþ÷¿ ±ÙlŒ?žE‹±{÷nü~Úõ�ñxœo¼ÑÜ�FsÆ‘5¯Yûý~³@Ü{ï½æÐ�D"Á 'œÐc^1Ò]GGGÎx>ûì³QU•Ç{Ìü=sæÌ^½7ŸÏg:Ô†T6¾÷½ï±xñbî¸ã<—^z)“&MÊû|Ö𪫫©¨¨`Æ $“I „ßïO+Ër¥‡@ ÀŠ+xýõ×Í4eÙX߃Çã! ¦¥‰B⡸¸Ø¼o‡Ã�ÓéL §§÷ZHyÒ—|n·Û;v¬ÙÓdˆÜqãÆ±víZvîÜ™fæ*{{ŠO·ÛÝí~3ùôÓOyî¹çfKe.0ó�X�czî|y0ÅŸ^¶÷‘+ïf{'Æï\Ïg¥Ð|¶bÅ ^{í5’É$ÉdÒŒ�þ*çò¥Ûêêjb±Á`��7òÍo~“_|MÓØ¼y3W^yešOc®ô›¯ÎêK9×—:p‘™ÿ -—³å‡žÒkoiñjÄOO6GoË÷Ìg1ÒÕ¾Ú"Ab±X�›ÇãaôèÑf"Þ³gOÚP‰\D"‘ƒòLÓ¦McÚ´iƒAî¿ÿ~Þxã ¾úÕ¯šÿ—––ÒÙÙ‰¦i¨ªJ"‘`Ïž=”””¤í‡®±³¹Œˆ}áÝwßeùòåÜzë­ø|>Þ~ûí´™ rU�ÖöH$B4Ýçø0 ,£"J$i=FÙÎ/--eâĉYgGȬx ¢%%%¬[·.­RŽF£Ýâ>_¼•””¤¬ÍÍÍfá4bÄ.¹äîºë.&Nœh¶œæº—\é ªªŠH$‡~ȨQ£¨®®¦©©‰õë×wëŽ/--Åívsï½÷v»Æë¯¿žö.­÷íñxÒºÓ­sYY×%øÛÉ IDAT_=ÇïSºËÏ6›�sÎ9‡sÎ9‡úúzî¼óNÆŽÛcxf+•5¿X+½LJKK¹ì²Ë¸ì²ËXµj÷ß??üpÎçÛ¾}{·ðŽ?þx>øàâñxÖž‹\é¡´´”sÏ=·Gd3Á`0­Ò´ÞO¾xƒèºŽ¢($ b±XZ8ùÞëöíÛû­ÜËÆÄ‰Ù°a���\|ñŦPX¿~=Û·oOó³È÷. �Ï\<øàƒœuÖYf ~¾YW¬½1™ï¤�<‰DÒʧP(Ô-Œ|y÷ÕW_ݧ²?W>1bDZ#Û#�<Â�wÞÉàÁƒinnæ†nè×r®§t;nÜ8>üðCt]Çãñ0dÈ–/_NyyyšðÈ—~wîÜ™³ÎêK9—/¼BÉl¼Èe§ôtœ5ÿ÷G¹Ü_¶GfúƒD"Ö¯_ßk›#_úèï²è³ÈgfèQO¾ F†®¬¬Äï÷ã÷û ö¬ïmîþþ÷¿óç?ÿ]×ñz½TTTtk™òûýTVVš3¹¼þúëüá ºº¿ßÏ»ï¾ tùY4440f̘~¿ÏÎÎN*++M£ú_ÿúW�ñUSSƒÝngõêÕ¼ñÆ9[l{Ðå ¾sçNÓïéüI“&±qãF³UióæÍüîw¿º†%,[¶ŒD"AGGGÎ.X»ÝN(ÊÞ?ÿùOƌӭBÊo“'OféÒ¥„Ãa‚Á wÜq»wﺆ3 6Œ™3gòè£�æí®î)Œ;–W^yÅìN8p o½õV7¡à÷û©®®féÒ¥¦xðÁ‰D"y䑬[·ŽÖÖV4MK+°GŽÉòåËÑ4�––>øàó¿cŽ9†7Þx]×I$üñ�dëÖ­§»|ñüÀ˜i«¢¢�ǃ®ëiï)“cŽ9†þóŸf…´lÙ2&OžÜc¹0wî\Ó04h�vožoÚ´i|üñǬZµÊì·’+=sÌ1,Y²Ä4RÞ|óÍœæúõëÍVÎ÷Þ{/§pÊ‘HÄôÁxï½÷= ¯ùGÙPÆ >¼W"Î×êg­ØÃáp7£­·Êý@pÒI'ñÈ#�pà 7 ( Gq3fÌèö̳gÏæ±Çãé§ŸfÀ€\}õÕ(ŠÂu×]ÇO<ÁóÏ?�Ãá`öìÙø|¾}Z_"'œpK–,ᦛn¢¢¢‚o}ë[,\¸�gŸ}6çp-cf�'Ÿ|]×™>}:¥¥¥y{„ ‰€o~ó›<ñÄøý~&Ožl†›ë|·ÛÍUW]Å=÷ÜC,Ãív›ÝÝÓ§Ogýúõ\ýõøý~¦M›–µð9r$mmm|ÿûßçþûïçŠ+®`áÂ…$ ü~?W_}u¯âíßøuuu¦ÃÚgœÁ‘Gi޵8묳X¶l¯¾újδŸ/è[o½e …#�<’çž{.ë8ÌÙ³góøã�óÜsÏ¡( 3gÎÄív3|øpN?ýt~úÓŸâñx˜1c†9óØ—¿üeÖ®]Ë 7ÜÀ�!C8ùä“ÍVÔóÏ?ŸßýîwÜtÓM$“I¦L™bú‰‚ßïÏÏ3gÎäÉ'ŸäÉ'Ÿ4ý&Ž8âÚÚÚÒÞ“• .¸€'žx‚›nº EQ˜1c&LÈÛîr¹˜1cóæÍ#™Lâr¹¸êª«PU5çó†�•�¢ë:åååTTTtûêÔ©YÓtÍzvë­·’H$8p W]uUÖ{=ꨣøýïÏŽ;¨¬¬döìÙY�Ë[·n5Ç?óÌ3Y¯Õ›çîm>ÿãÿÈõ×_Ÿµ%pèСD£QFŒa–×~¿Ÿd2ImmmAÃŽ=öØ‚ã3ßøÆ7X°`^¯—SO=•ÓO?�ßþö·Ì�;·[«øØ±c¹ãŽ;hkk㨣Žâ¸ãŽëUÖ4�)S¦°hÑ¢¼ï5WÞÝWrå³Ì÷2yòd~ðƒPTTÄ·¿ým6nÜÈ]wÝÅ­·þöî;¾Š*oüøgæÖô›^(  „"Š‹‹åA] XPXØÁò¬è㪫»kC4 ¬R}°¢bay‚®¡H7@J é7¹7Éͽ3¿?B®¹¤Ò¤}߯W^ɽÓΜ339ß™sΗ*Šb@5àRÅ x ÐÕÝ{ö’]T_!לEdïÝÃÞŸ÷²gÏ>òìõ£¡;9²g…å…Ø»‡½{ör¸¼�G0;EÅn‚;t!>>�¸Àº3šéf³¹Éøá§K[#¦!šÊÌÌdæÌ™ÔÖÖRSSÃÆ�½�ÿůëb}d.e"ÎÇë\tt´ âœaìÕ³¡íf-… !¦'I!´ê<öîÏ#¸WG V““#E~$$ö$À £ëzë:C0ºÎô%QUUBCCÛ"µqg41™LÔյĴՑJÑTZZ?ýô÷ß?ªª2xðàf›W!„\ç~ÑÐêAˆs"Pðþ¥9pÔøTÿ¢ÕDy8ê À¬ ª:~!ÑáÄn„èÔURè°žñ�‰ŽŽn5P°ÙlÞ7Z6}úôaË–--.à3D—¢ýÁû„ ¼oðgÇ©Œâ#ÎŒÖFCr�âœ:Æ[¯â7¦`2žh§^7Ž¢#äWYˆŠ;ów壢¢Z­Ô7÷¤­!Uõ&„B!ÄÅâ—' jAÖ<*+=„…Ъ+q@˜édWí¦²à0%jc­ÐF…ütP…=z°uëÖfƒ‚ŠŠ ¾üòËv¯/44”èèh9J„B!ÄÙåqR˜{˜ÒZE1` é@×ø0Ìm,Vsä'¶WÚˆU«¨pÕR£ÛèÚ+‘ðc Öï'+§§®¢ZÂHèÑ�(¿ã,DvŽ&ç`{�*èš [|g”“Ü™šRŠ+êÐLE®ÒµŽ[aaatíÚ•ýû÷ŸÒzüüü¼¯³B!„âl°{À¦‚«4�RSGz%cTê(=RHEm‘m´îWpWTaJK¦�EÇ™³•¹e„vÅP“OÖ¾*l}’¨R�¿�Ÿ²òãÞ̬úGÒ%é—&B¿tXV íÒ›~~k]’"ŽufÖÚlâs:%$$àv»ÉÍÍ=é !55“É$G§B!„8{�‚SÇŠªâv”QVe!4È�ðNñ´ûU_�áD˜TBƒ!ÛN-¡˜Ë‹±ÆÐ+°~EþÑ1ç¥ÜGŒñ¸@áBÒ­[7üýýÉÊÊÂív·{¹ÐÐPRRR$HB!„g�îѦ°Ntá(E‡³8\§Þ�.�#°´£õ�j4bhø`0¢z4Ü:¨n7ZÅ2ÌñΫ)V‚ëc�™Ïwqqq\rÉ%tìØ±Íw,‘’’BÿþýÏh��››{ÚG¼øöÛoÏJzW­ZÅÂ… ÏûãäLæß™vàÀoùœjy4^þ¹çžcýúõ§¼žãÍ™3ç„×{º�³ÆåݰŸ­ç�çñÅùúë¯OzÛ‡âÞ{ï=mûRPPÀÞ½{Ï‹cuåÊ•ÄõB!~m�lǪøŠ‰ÀÈN$öìC¿^�ðs"·ÄÓ®uhn7Þ9Ýn4ƒ£F“cHW ÌàAƒ2xC/I¥cÓ> &³ÙLRRÝ»w§¼¼œÊÊJ\.š¦a2™°Z­„……�–WÚŸ•(S×yç�w¸üòËOjùÆo”¼PœÈ>�jþ�ÍôkšF||<ÿûßO{¦L™rA>U;¾¼ö3??ÿ¼9>Û²e uuu$%%�çkë»òÊ+ÏHÔsív!^S…gW•‚UgA6eþ�‰³ šð7)Ô¶{%%­‰&ÎÏCYq9öÀBÃÌ9J¡3’þ*îÊÃ(4Ó¹[TÓ> 2UU #,,ìWÙÞþýûyíµ×p8˜L&þð‡?�œœì�¾lÙ26lØ€ÑhdÒ¤I$''£iË—/çÇ k×®L˜0???þð‡?ð /`³Ù¼Ÿ_{í5ìv;>ø <ðáááÞm¬\¹’œœ\.¥¥¥˜L&¦N�Jxx8“&Mâ†nàÓO?eÞ¼y±dÉìv;&“‰1cÆø¼s¢¹ô6–ŸŸÏâÅ‹)//Çjµ2nÜ8zôèAnn.ÿú׿HMMeÏž=8&L˜ÀªU«((( W¯^L˜0·ÛÍ«¯¾JVVš¦Ñ£G&OžŒÙlnW¾fggóꫯҩS'JKKyä‘Gزe ï¾û.n·›¨¨(&OžLhh¨Ïú^xáŸüs¹\§´ÙÙÙ,X°€””8€Óédüøñm–ïóÏ?OÇŽY·n“&M"((¨]ûyÇw0þ|æÌ™ãSy|ç�w˜5k–÷»‡~˜›nº‰x¿s¹\,\¸�Ÿþ™°°0¼Ó,XÀ�!C2dH‹å²nÝ:>þøcÜn7L™2Å{üÕÔÔðì³Ï’››KTTÓ¦Mó96ÒÙ\ù´–®Æ>ù䊋‹ùãÿØäóܹséÒ¥ YYY”””ÍôéÓyñÅ}Êûµ×^cÈ�!têÔ©Ùm|”””ðøã�SPP@RRÓ§OGUÕvoƒ�+VðÍ7ßàñx˜}X³f ðÆo`6› "//�É“'ãp8X¼x1ûöíÃjµr×]w‘’’Buu5¯¿þ:ûöíÃ`0põÕWså•W6ÉÃãÏ—¤¤¤—;|ø0 .¤´´”ÈÈHî¾ûn¢¢¢8tèP“k^RRS§Nm6ý·Ýv+V¬`ýúõ(ŠBïÞ½¹óÎ;1�MÒ£ªj“òJMM•ÚŽâ¤ø¬¶8²�� (ÌAènh_=8ÈŸºœ­lvÔá6EÐ-9¤¾Y‘9–îÝjÈÚµ‘úŠj $¦KnŸËm�3dÉ’%\sÍ5Ì�;—Q£F±dÉï´ââb:vìHFF£F�bñâÅÞìÛ¶mã‰'ž`öìÙèºÎŠ+ZÝΤI“0�Ìš5«IELUU¶mÛÆÄ‰ùç?ÿI—.]øè£�¼••ªª*^}õUÌf3óæÍ㪫®âùçŸgÚ´i¼üòËTVV¶šÞÆæÏŸÏСCyî¹ç˜0a¸ÝnTUåðá䥥ñØc�ÏÒ¥K™6mO<ñëׯ§¬¬ŒÌÌL***˜3gsçÎÅf³‘““Óî|5�’––Æ#�þøcïr[·neìØ±¼ôÒKÄÄÄx�»­•O{ÒÕž;vì`ÆŒ<õÔSäçç³sçÎVÏ—öž_Û·oçÁ$##ƒƒ²sçÎvo ûÁ /¼À�7Þè͛֎�eË–1aÂæÌ™ÃÔ©SÙ´i½{÷æ’K.á¿þ뿚 ÅÅÅ,Z´ˆ3fðÜsÏq饗ò¯ýË{¬mݺ•3f4 *++ùøã�yòÉ'™;w.W\qÛ¶mkõo¼¾±cÇ’œœìóËÌÌLì³�åË—JFFþóŸÉÈÈÀår±|ùrt]ç¹çžãÑGå³Ï>kvPŠãÏ—––Óu�ùóçsýõ×3oÞ<ÒÒÒxíµ×Ð4­Ùkž¦i-¦?33“ï¿ÿžüãÌš5‹²²2ïpÛǧ§¹òBˆ“Õ ¨Ö0:uïEïäÞôé�LR|8ÖöŽNj ¢sÏTú§bpê/C£Xû�’>˜Á2¨2�C½=A²ÿÌxì±Ç¸ôÒKèÕ«G�ý¥¬ŒF† Ô¿ª½°°�ÊÊJ¶lÙÂСC±Z­(ŠÂ°aÃØ¾}û)¥#))É{g,--�¬¬,ï´�¢( EEE”””x_ß±cG:tèÀÏ?ÿÜjzWJòóó>|8‰‰‰„††z·@�=€ú—â%%%a6›1›Í„„„PQQ�Íf#//�­[·âv»;v¬w™öæ«®ëÞ ÉöíÛéÞ½»÷Nñˆ#زeK«MNÇ~€ïк©©©í*_EQHMMõ>Aiï~6{-0½Õk^KéÏÌÌdذaøûû£ª*ÇgãÆ�ͦçDËK!ÎUFÉ‚3#33“5kÖàñxðx<>ÃÊyÛ°šL&Ìf3‡»ÝN`` w¾€€Ÿ ùÉhü¦j???‡O:ïvå—°400»ÝNDDD‹ém`·Û©««cÆŒÞïjkk½ëµX,>wz7'RUMÓHJJâÎ;ïdåÊ•¼üòË <˜»îºËgÙ¶ò5 À›N»ÝΞ={˜>}ºO%Èn·{›oïtìGCå¶ñ�Ïö–oãiíÝÏ– :” 0fÌ6mÚÄï~÷»&ó8Ÿã# »ÝÞ$Ðl®\L&+W®ä§Ÿ~ò®«ñú†à´a½��—¶Ê§=éj�ÆýŽÊçtðóók²Þªªªvo�—WÅ›®ÖŽ�{+VðÄOàçççmªÓ’ã×e6›½é9þXkÌl6óðÃóÉ'Ÿðî»ïÒµkW&NœHUUU‹çÆñë0`Ë–-Ãår‘™™É�!CšM_ã󤡼ív;/¾ø¢÷øv»ÝÍ.ü6[Z®¢¢Âg;F££ÑÈ¡C‡Z¼æ¥§§7›~»ÝNff&_|ñPß!$$¤Ùôœhy !„ ‘ÒÒR^yåž|òI:tè@II ÷ÝwŸOM×uEÁívãr¹ $88اBTYYé­p©ªê­,ºÝîvùZUUå³Ýæ*ÁÁÁTUUùt«¬¬ôþl)½ BBB°Z­¼øâ‹MÖ}èСºS;xð`óæÍãË/¿äÚk¯mw¾6þ§BŸ>}Nh„©Óµ�ó«®®ŽÚÚÚ6Ë·qúOd?[’””„®ëlÞ¼™#GŽÐ§OŸfƒÈÆø†'"í)›ÍƦM›xôÑG `ýúõ>£5^¯ÓélrܵV>íMWãsêûEœ-'s¼5w¶t|„„„0~üxÆ�ÏÖ­[™7ož·)QKëÚ³g�O¥¾¶¶Ö{N·v %$$ðÿþßÿÃívóá‡òæ›oò‡?ü¡ÅscõêÕ>ë ¢k×®ìܹ“M›61eÊ”fÓWYYé} ‘——Gdd$6›�éÓ§ßf~5ÞfKËû\ÛÜn7G�mõš×RúCBB5j#GŽl3=-•—trBœ 渾 >Éeåªu8¬V+QQQhšÆêÕ«Ñu—Ëå­Ð4´Yݰa:t 00�þýûóŸÿü‡ÚÚZ4McíÚµ¤¥¥õïw8rä?üðƒw[ƒ�ÇÓb%iïÞ½Þ&!6l gÏžM扊Š"<<Ü»ÞÜÜ\ ½#©´”ÞáááDEEñý÷ß{ï¼½ôÒK'TqûüóÏùàƒÐuš¼Ü¯­|m,%%…¬¬, €úNÐK—.m2_ãü;ûÑP)kè�ºaÃ:vìØfùžì~¶V‰2do¼ñ†· ÎñºuëÆÆ�q»ÝTVV6ÛÄ£¥r©ªª"""Â[©ÿöÛo©­ýeì…={öP\\Üâq×Zù´']PÿöÇõ³·+oI[çËÉÎßÞã­5-µµµ<öØc”””õÃ>7œƒ§ÓÙfz¾ùæ’’’|žf4'++‹¹sçz;áÆÆÆ¢ëú Ÿƒ â›o¾Áív7[éïׯ_~ù%š¦‘��Íã�?Ž®ëôïßßÛ‘Úívó¿ÿû¿dgg·+ïš[.<<œˆˆï�¼_|ño¾ùf›×¼æÒß¿¾ûî;ª««øê«¯šZ¹µòjhÆ'„ç y¢ptêÔ‰ÔÔTî¿ÿ~¹ãŽ;ÈÊÊâé§ŸfܸqÞ¶°ï¾û.úÓŸ¼ÿœ<ÈÃ?Œ®ëôìٓ믿€Ñ£G³dÉÂÃÃIMM%$$MÓð÷÷§wïÞLŸ>�x€ÄÄDŸ´ôíÛ—7ÞxƒÃ‡Á´iÓš­TÞ{ï½,Y²„?ü“ÉÄ´iÓàèÑ£-¦·±iÓ¦±xñb–/_Ž¢(Œ9ò„†œ:t(¯¼ò ÷ÝwŠ¢ÐµkWFŒÑî|mù¦ñ½?ýéO¼ð ¸\.¬V+ãÇ�o²ÝãóïT÷£!ðÚ·oï¿ÿ~»Ë÷d÷³­<]¹re‹M7®¸â öîÝËôéÓ gðàÁ”••µ«\\.ß}÷ùË_ ãÖ[oeîܹ¼÷Þ{�––Æë¯¿Þâq×Zù´']PßÄeíÚµüõ¯õžm5Õ;¾¼ÛÒÞùÛ{¼µ¦¥ãÃb±0bÄžzê)<‹…?ýéO¨ªJjj*/¾ø"%%%L�:Õ'xŸ4isçÎÅívÎÝwßÝf‰ŒŒdæÌ™(ŠBhh('N<ás|àÀ�,]º´Ù&ocÆŒaÑ¢EÜ{ï½øùù1mÚ4Ìf37ß|3K—.å/ù �‡´´´G¤j¬¥åEaÚ´i,\¸�wÞy‡˜˜î¾ûîV¯y-¥À€>|˜G}·ÛMlll³×ÂÖÊk×®]üøã�2’⼡Ü6i²1HA¥¾SµQ×u `u]Öu= ˆÔu=ºÑO¤®ëaº®kš¨ëºUÓ4‹®ëFMÓ š¦©š¦)�~Ð4�U«V´·¶ÏJqâV­ZÅ‘#G¤#ݯ(77—_|Ñg¸Ò³¥¬¬ŒG}”ŒŒ iò „Bœ#ŽïÙ–+¯¼UUQUU?öUUQEWUU?ö[SÅ£ªª[Q”ZEQjE©RÅ®(J)P*ŠR¨(Já±Ï¥Š¢ØP ¸Eq@t©=\àŽo¾#.žrÿý÷1b„ B!„8)RƒâS^^Î=÷ÜCEE×]w�dˆB!NŠôQ¸€µ4:‡8sâããÏz³#›ÍÆ‚ ¤0„BqJ䉂B!„B!„B!D;…ÜÝ»Ù�]̹8¾�tÂB!„LÅû<«Ûû$÷:wg4âv»Ñu]FïB!„ç%EQP¥Ù žÓ�¹ž©&“IŽ.!„B!~eÒ¶G!„B!�‚B!„B!„B!„ B!„B „B!„(!„B!$PB!„BH  „B!„�@A!„B!�‚B!„âüa,**òùB×uŸ¿>7þÝø{MÓ|¾kø¬išÏß�×+„B!„8Ç…ÈÈÈv Íý 4Íýq!q{<”VTR]S‹GŽo!„â‚cPUü¬ÂB‚0 ÝþKÓ#!NRI¹�*gµ B!ÄBá ´ IDATÊ£iT9«))·_”û/�‚'©º¦V2A!„�ÿù(!|iÒïF!„�ÿù0£½B!„ç&“É„ªª-þ(ŠÒäws?€Ïß Ÿ;þ³ûì3òóó›LÓu�¬¬,JJJøýï�Åb¹°…|{>åÕå8ëœøý¶ÓÌœn wod_y0‰i=“Þ¥ÌÌLŽ=ÊK/½ä=’““™9s&EEETVV²páB²³³Q…aÆ1zôhrrr˜?>iiiìÚµ ‡ÃÁäÉ“½'_ïÞ½™â*ú¦Öïç®ÛY½êßÜ7óA¹( !ÄT\\Œ»Ñu ¤¤„ï¾ûŽ}ûöùÞDÒuòóóILL[ñAAAüñOwSZZÂsO?Iß~iñþÛË}ûX’zöâ?ß­£¦¦€�ÛbëæMÜ;ã/˜-Þ|m1?|¿Þ`4çÓqÓ˜[éÒ5‘¼#Gø~Ý·MEUØ»g73ÿú(���|úѬù¿UÜrÛí>ó}øÞ»\ö›á 8ˆ­›7ñáûï1ó¯� ª ùùŒ¼þþëºëÙº9“/>_ERÏ^¨ªJÖÏ{™tfþõQœN'ÏϦsBâ:tÀ`0PípòøS³|^ZÓ­GRû ÄfãŠ+¯¢¬¬”Þ}›{ÿ{&‘‘løþ;Þ}ëMî�q?«>ý„ÄnÝyý äçå1oÎlR¤·š©ýÓÙº9Ó(ìØþýÒúËI!Î0—ËÕä»ôôt¨©©!++ËgZ]]ÝyµªÁbÅìvã>îÍÔ Í�ZRí®neªFyin%�è„Øbˆ?�¢'qò’““Ù¼y3UUU>ß>|˜·ß~€��oeÀn·c;…¶ß-±Ùl¤¤¤°`ÁïÏÒ¥K½Oζ>}û ®Bèб‡rs9°)©© ‚CBèÙ+Ù'˜é™Ü“©>(ù»uËh ¥´´„â¢"\.I=ë;c§‚~ìÕó;wl§ÿÀAXýüPU•AC†²ó§ŸÚ þ¶nΤ¤¸˜¸šTþtéšè {õîCnNv“yî™~iÇ*½]»u§´¤Ø;Íl6“tl£cb¨(ÿåfEï>}1 ¨ªJdT4å唕•Rtô(ƒ Sçx‚ƒC8˜“Í�}ûè’Ø� à`E¡ÿÀAm–GKùy¼�;¶3tØå(ŠB@@}û¥²sû±Í�s8Äuèà]—£ª Wm-�ã0 ìݽ‹¤^ÉüðÝzä>)|ñù* ¾‹Õʆï¿Ã`4�>hH³Ûp¹\¼úÒ<îš0‘›�¨¨èÏûœû)-)!,<œŸ¶n¡kb7ŸéÕÕN,f aáhšÆúo¿A×uêê\'•Ï!6áálݼ‰ÔþéTUUñɇ˹ùÖÛ‰OèÊÿ­ü »½‚ÀÀ 6ý¸¡Íõµ”ŸPÿ”©¡òžÜ'…¾[Ï�£oEÓ4þýéǤ H§c§Î­®ß`P½\RÏ^|öñGÉÆþC—®‰X¬V⺰mËfâ:tä`nŽwȽÖòÏd2Ó§_*Ÿ®øˆ‚¼<¦Îøo¹ !į¤k×®\rÉ%üðÃèºNaaaÓºA¿~Þ' D ��L^EeÕeT×Uãgò#ÄBL`kAB=SDk�[xˆý¥`ˆ’#I\ÂÂÂùãŸîfå§+XþÞ;XÌúôíËu7Œò­è†„0gÖSÔT×pí £að%—²ß>žþÇãÄÄÆ2`à UÍ7ƒºzäu,]¼«Õ�AC.aè°ß°ü�·¹ç¾Ürëí|øþ{€Î !—„Gó�Ü'…‚ü|2æÌÆãñŘÛ[Öl63äÒKyå¥ 4MÃd23æö±Mž&ôèÙ‹�?xŸ‚‚BÃB;Î7PŒ‰�£gr2³Ÿú'þþþ\wÃ�ÌÉáÕ—çsó˜ÛN*¯ï÷>|ï>ÿ÷JEáòá¿Åb±ס—^v9/>÷,V«C.½”ÇZbÕZ~öéÛ—eK_ãšk¯çêÿº–¼Ï³OþMÓè•܇ظm¦5)¹7o.YLEy·ß5ž[n½�¥‹âñ¸±…†1æŽ;¸öw¿çí7_'sã�tŽO ¹w4ÍÓjþM�þßøûû“ؽ;G¡¡2ÊœBüšúõëGtt4™™™äååáñxP…˜˜RSS‰��?/÷K™QÇ*ùÇš�� ØD’bôãšf�º… iZ}ÇgM;öS¿%(Žnõß !„B!Îòff!„B!„ B!„B „B!„(!„Bqú<ò?H  „B!„ð ^yå „B!„¾ABQY… B!„B $PB!„¢� Aú(!NüäQÉ!„â^yå•‹ö¾ Bœ$?«E2A!„¸Àƒ„¢²Š‹ö¾Q !NN¸-EQ¨®©Å£i’!B!Äyì‰gžõé“ðÄ3ÏRZQI ¿a!A(!Nàä1ˆ ³IF!„â‚$M�„B!„(!„B!$PB!„BH  „B!„�@A!„B!�‚B!„B!„B!„ B!„B „B!„(!„B!$PB!„BH  „B!„�@A!„B!�‚B!„B!„B!ÄEÎ(Y ÄéS]S‹³¶–š.·]×Oi}Š¢`6ñ³˜ñ³Xð³Z$“…B!�‚ç“¢Òr55hšŽª*ÞŠ¾¢€¦�\À ë:µ®:j]uØÕú[‰°…Hf !„âÌ EEEM*&�ÿnøÜøwãï5Móù®á³¦i>Ÿê�U!Îe¹y…x4 €ð� L&#f“ W]uunJ**Oiš¦QYåÄá¬!>.Z2]!„g6P0ús\¤ðËŸ4Çèè�ƒMGÓ5o° û-Ä…$ €Õl&.*¼éIf0€B‚É;ZB�Ç�Çsrçƒx4�ܼ“t]çèÑ£”••Lll,Š¢Ha !„â—:ŒdÁ¯Çãñpë­·b:v§YQâââ¸óÎ;IMM=-Ûøä“O8räS¦Liqžüü|ÊËËéÕ«×Ioç믿æŠ+®hvšÃáà­·ÞâǤªªŠ¨¨(®¹æ®½öÚó¢œN$ŠJËñhV‹™¸Èð6ç�‹ 'ïh �ë”Ò¨iÅå'Ü )//�uëÖyƒ„AAA\zé¥$$$ȉ*„B ΖùóçŽÇãaÆ <ÿüóÌ›7›ÍÖî€Ã`04;íšk®Áãñ´º|ff&uuu'(èºÎ²eËš <O>ù$~~~<òÈ#ÄÄİÿ~^~ùeª««¹ùæ›Ïùòioþ8kjqÔÔÖí çŸRu ÊYM€Ÿ~s»–ÉÎÎfÍš5Í>Ý«¬¬äóÏ?gذa$''ËI*„B Î&ƒÁÀСCùðÃÉÊÊbàÀ�dff²lÙ2Ün7ÑÑÑÜsÏ=„††òé§ŸrðàA²³³éß¿?W^y%óæÍ£¬¬ MÓ¸òÊ+¹é¦›øüóϽO¶nÝÊo¼�ËåÂh42nÜ8L&Ë—/Çh4ât:;v,|ðk×®EQRRR?~<&“‰gŸ}–®]»òóÏ?S\\LLL ùË_xþù穨¨`ÆŒ<üðÃDDDøT²�=ÊK/½„ÅR?BOrr23gΤ¡?Lee% .$;;EQ6l£G�&''‡ùóç“––Æ®]»p8Lž<™Ï>ûŒüü|z÷îÍäÉ“Û=_CzšËÏ•+W’››K]]x<fΜIAAA“üiIum-š¦tÂeDé)÷YЩ®©mW àt:ùúë¯}‚„Ë/¿???V¯^ímJ¸~ýzbcc •T!„¸ÈÉ{Κ¦a0(++###ƒûî»�ŒŒ RRRX´h‘7¨ÈÌÌdæÌ™ÜqÇ|òÉ'ôë×�ùóç3{öl8€ÃáðYïÒ¥K™ù$ ,^¼˜3f0kÖ,Ö®]KYYY»çk-?UUeãÆ�Œ7ާŸ~šÄÄDÖ¬YÓ$ZSSãBUë‡/=Qf£Ñ;2Ò©¨®­m×|»víÂåòmîÔ©S':vìèótJÓ4¶oß.'¥B!$P8›Ün7ëÖ­£´´”=z°mÛ6zôèAçÎ�¸êª«Ø´i�EQèÚµ+ÑÑõXCCCÙ¾};YYYøùùqÿý÷à³þÐÐPÖ¯_OAA Íö[ظq#Ç' ƒÁÀˆ#ذaƒwúÀ�1� :tè@III«ûäp8 i½ÝüæÍ›¹òÊ+ð÷÷gðàÁlÛ¶ €ÀÀ@’’’ˆŽŽ¦W¯^˜Íf, 6›�òòòvÏ×Z~ôìÙÓ{ç¼S§NmîÛñêß“€wt£ Ì&NÇ@`®:w»æ+((ðùl±Xøá‡øòË/q»}בŸŸ/'§B!¤éÑÙ0mÚ´ú(MU騱#>ø ���ØívvïÞíS¡·Z­Øív ¾ÃiƒQ£F¡ª* ,Àn·3jÔ(®¿þzŸíLŸ>�åË—ó·¿ý &L˜@¿~ý|æ±ÛílÚ´‰Ï?ÿ¨¿£Ü¸¢oµZ½+ŠÒæèUÁÁÁmV¸+** ô~ $''Ç[�m`00›iV£ªª÷éK{æk+?OtßÎguuu>ŸÃÂÂ>|8ÕÕÕÞ¼oi^!„BH  ~% �™�g³ÙHIIáÁlsƒ�o¼‘o¼‘üü|{ì±&�PCBB˜8q"'NdóæÍÌ�;—%K–4ÙæÍ7ßÜ$È8YÉÉÉdddPUUå >|˜uëÖqûí·‚Ýn÷>±ÛííîÈ}"N$?O†Ùd¤ÎíÆUWW?ê p¹êPNù©B{›=ÿ´)??Ÿ¢¢"Ÿ2ji^!„B\œ¤éÑ9¤oß¾ìÝ»×Ûôcß¾},^¼¸ÙyçÎ�Ë–-[Çßßßç¥vµµµ<ôÐCÞ»û:tðÞ17 Þþ ééé|ûí·TWW°f;þúë6ƒ�ÇCMMM“iiii$$$ðÔSO±ÿ~jkkÙ½{7Ï<óŒ÷IEzz:_}õUUUlذ�þýûŸÕü<~ÿŽïïÑ?‹MÓqÕyN8m.·û¤ßÖì›K»æ‹��÷ùCdd$téÒÅgš ‘*„B�' ç›ÍÆÔ©S™={6.— «ÕÊĉ›�÷w¿û¯¾ú* .DQ~ó›ß�˜˜ÈÎ�;�ú&ø n·›¸¸8î¹çžVÓ@JJ S¦Lá¯ý+Ý»wÿ%òTUzè!Þ~ûmž}öY*++‰‰‰á–[naøðáÜ~ûí¼úê«Ü{ï½(ŠÂÕW_MJJ ©åMq^7 IDAT&éé餧§ãv»ÑuÓI ï*„Bˆ‹ Pð·Ù0) ¢ÂE´Õ÷ ¯žŠ<ŠküˆIˆÇ¬xpæï§¸Ä�¸H+(5ÕÓ #µ”Ê¥ÒB¨ß/Ë×Ô9$‡ÅE,—WP嬡Ô^‰ª*Þ�…ÓÒqYUüOøIB‹'¿Qº( !„¢•º~þX —³h(èT;ª1ÅbQA× ø 9¨Óë=˜‚1) cÂdÔ¨õøV†äi‚¸˜DØBô³â¬qQ][‹«®þŽý© �ª(õo~ö³Xð³Zð³˜%£…Bñ+ FFªÜÇWê=h µñøðŠÇƒÖ¨Ó“jÆå©•\ «Å‚Õb‚$3„Bq^kå= TƒŠÖ¨ã¥îñ  í~ù‚Õ$/nB!„âü "€œ¢JòË�üïú}|±ã?deÁÄa’éB!„�@Aˆs=H¨8ŧá�bmþ<|cÿ&ÓR,¤#S;óÄG›)¬prÏ’u¼üÇ“ t]çèÑ£”••Lll,Š¢Ha !„ÂK:3Ÿ§<È?ÿùO&MšÄÿøG|ðA¶mÛvZ·1nÜ8JJJš|ÿöÛo3vìØ&Óî¿ÿ~²³³[]§ÇãáÛo¿`ÿþýL›6 —ËÅÿüÏÿ0a¶lÙâýþdäçç³{÷n>ùä,XpÆÊaáW»©v¹Oy=±¡Í Ç{äÆþDûQYSÇßþ|ÂÛÉËËã½÷Þã£�>â›o¾á›o¾á“O>á­·Þ"''GN,!„BH p¾›={6ƒæÕW_eñâÅüþ÷¿göìÙTVVþ*Û âÍ7ß<©§!PHHHà©§žòVŠX´h}ûöõ~2233Ù³g×\s ãÇ�?#y°ëH)™Ùŧ¥¹Ñãú·{þGo€¦Á÷?²7¯¼ÝËeggóÙgŸyŸ$4VYYÉçŸή]»ääB! M�ÎKn·›ÂÂBˆªÖÇzC‡¥K—.øûû{+ËË–-ÃívÍ=÷ÜChh(+W®$77—ºº: ðx<Ìœ9“ÈÈH¶nÝÊ¢E‹PU•Ë/¿¼Õ¦(¿ýíoùæ›oسg={öl2ýûï¿çý÷ßÇãñ`³ÙøóŸÿLXX³fÍ¢ªªŠ¿ÿýïÜyç�Ì�;—Y³f1{öl÷ß?ãÇ�gÑ¢EÌŸ?]×yç�wX·nš¦qíµ×rà 7 ë:¯¿þ:7nD×uz÷îÍ”)SصkË—/Çh4ât: âÈ‘#L™2…ÊÊJ.\Hvv6Š¢0lØ0F�MNNóçÏgÀ€ìÞ½›²²2&NœHjjj«å°-·ô”›Œ½´Û /sûÐD–}·�­¹%$µc$$§ÓÉ×_�¦ýÔ\~ùåøùù±zõjt]G×uÖ¯_Oll,¡¡¡r¢ !„9y¢p>FwF# à™gžáÛo¿õÞ!Ž��Å`0PVVFFF÷Ýw¤¤¤°hÑ¢úWU6nÜȸqãxúé§ILLdÍš5x<^~ùe&MšDFFAAATWW·˜ƒÁÀ]wÝÅ’%KÐuýÿ³wçñQ•÷âÇ?çÌše&“e²’°˜!¬Q@qC»¸´**­"­b­âr½U«µV©â•ÞˆõW®që­t”]Ñ!H û:IfŸs~† [¢^#ß÷ë•sÎ<ç9gžYx¾çÙ"ž«­­å/ù ÿñÿAaa!ãÇ�çùçŸ'**ŠŸýìgäååñØc�…ÓÇÄÄpß}÷‘””Äܹs±Ùláç6mÚÄ_|Áܹs™3gË–-£¸¸˜-[¶°}ûvþô§?QXXHii)Ÿ|ò ùùùœþùL™2…o¼1âº/^LLL Ï?ÿ<üãY¿~=[·nEUUÊÊÊÈËËã÷¿ÿ=×]wo½õV§ïÃWå�=~/c­&Òãcº}\Ÿ„b­&¾,oèRú¢¢"üþÈ ¦oß¾ddd`0Âû4McÇŽò%B!„ ½Õ}÷ÝÇĉùàƒ˜9s&÷ß?Ÿ|ò Û·o'''‡ÌÌL.½ôR6oÞL(Ô>§^^^øŽqß¾}©¯¯§ªª ¯×¾‹~á…FÜ}>–®ëŒ;–¨¨(V¯^ñÜ_|A^^iii\pÁ”””ÐÖÖÖí×¹eËÆ�‡ÅbÁf³ñ§?ý‰0jÔ(fÏž�ÙlÆd2‘““CMMÍ)óÚºu+—\r ÑÑÑŒ=:<®Ãjµ2bĈˆ2éLEc[�ßÇ@0žÝ¨;ú9m‚!uñªªª"¶- 7näÃ?$ŒcQYY)_0!„BH×£^ûÆ�Lž<™É“'ãóùØ´i/¼ðIII¸\.vîÜÉwÜNoµZq¹\áÇG(Š‚¦i´¶¶sôζÙlÆb±tz·Ür O=õcÆŒ ïknn&66ö¸¼Žœ¿;š››ÃÝ©ŽTð�ìýõ×9x𠊢P[[Ëå—_Þi^¯+666<€÷DeÒ©ÿÃI‚ôö íz@Dl'$$0qâD<Ïqƒ˜�M+„B D/QWWGYY#G¶€µX,L˜0�uëÖQZZŠÃá ??Ÿ|°ËyÆÄÄDÜñ÷x<ø|¾N�ËÎÎfÔ¨Q¼ýöÛáñqqqáY‡|>>Ÿ‡£û« ÇÅÅEõõõ˜Íf–,YÀ“O>‰Á`èÒÌFGòJIIÀår�Ö5‘ÃÞjW�ÞK“ÑÀþÚ†ÇXºuÜþÚL•Ô¸¨.¿¿<Þ1p:YZ!„Bœ™TO—’éh7mµ¥”ï«À£Ÿ I°•†ò*¼Rªß0ŸÏÇܹsÙ´iš¦¡ë:EEE”””�““ÃСCÙ½{w¸ III ,8ež©©©�F>ÿüsV®\®øwæúë¯gÍš5á ýðáÃ#Îÿá‡2hÐ ¢¢¢0 ¸ÝîãÆ5œÌˆ#X¿~=n·›ÖÖV}ôQ***hii!33ƒÁÀþýûÙ±c^oûgÏ`0œ°›SAA«V­ µµ•M›6…ƒ­Ó18£ç~[½*›ÜÝ>îPc­ÞCú&t)}VVÖqï·Óé$&&†~ýúü !„Bt©E!Ô\Im«J”-³ë³¼h~\õ-¨V3²dÓ7¯OŸ>Üÿý,]º”_|EQÂ3©äÝyç�Ì™3¿ß�Õjeúôé§þ �Ü~ûí¼üòËèºÎÅ_ŒÃá�k8•¸¸8®ºê*^}õU¹ãŽ;xæ™gƒ$%%…×E8묳hhhà—¿üe—Z<ÆŒCii)³fÍB×u¦L™Bnn.Ï?ÿ<«V­bàÀ�üüç?ç…^ //�‘#Gòì³ÏR__Q ¾á†x饗¸ë®»P…I“&‘ŸŸOYYÙi½#²“XST�ËÓ³®:ol(aòðÌn³ø£ìQ&Fd'v)}NN;vì ®®€¦¦&V¬X@CÃÑÑ6›�üü|ù’ !„eÊÔiƨöAÍÀˆ®[+«£Ûu]OœºNŠlH©ÞïN±e§9­è º®Û5Íë©­´z¢R-1¾ƒÆš`¢!ÅaQ5]S4­ýO×44Mcýê‰%Ä÷ÇüÕ;Y¿³ ¨gk) Έ瑫ºÖºñûw¶P\ÕÌeÃ2¸ùüœ.ŸÃívóþûïŸph³1eÊ™U!„ø™ÕÍnþðî–. µ-â¢ÌÝ  } øÕW_MAAv»=bÿСC¹öÚk%HB!DXk8Z]^üJUÍzÈOH«¡NM!Á&ã¤Å™áÅé㙹p=­Þ �ÓlY¨kñQ×âãÆy«˜:néñ1ôsÚÐi¸\ÑØÆ¢�JP…¸(3/Üzþi�Çd2QPP@AAÁ`]×1™Lò& !„¢ �‚ÖFcM æ¤T¢;­ëÇß·?ttM#ÐXFM0‘$»M?\aò»hj�è¸h)mñ½õç[ÇóÚºb>.®¢¹c4]ç� %ÄZM‚!PL•Vo{”‰óóR»Ý’pÒ/¿Q‚y!„Bœ¢®PWºÕ’@Jz|{Ô ùp»ZÑã  ZKõЂøCþ2/ŠÙ�3%®óÛ‚^¼n°J  ¾ç¦MÈaôÀd¶¨çËò5¶áñ‡N+¯Vo{°e6�Å�!}™�ÈYi)h!„B|;�Bß~ŽÙ“@Ÿœö)�L`©ÚÒéÛ¾¯®ëpø_]×éØÑÂèèKª¦¡k¦¾ŒN&Õªum+!z¹Üt¹é®;@ C!„½šŒ@B!„BH  „B!„�@A!„B!�‚B!„B!„B!„ B!„B „B!„(!„B!$PB!„BôÂ@!POEi5>] I!„Bˆ3�ñËY÷Ò|¨7]G×%âB!„¢× ˪qf¤`QAk«¢²ºLFL& SDbou1UÁdú¦ÙQ:Í:„¦G—æÄ¢khš&¥-„B!Do âÔšZ“I±ûqÕ¹0'Ä£l>@y[dbƒÕFlÈ„ tÚ> khºŸ¶Ú \� º!ZJ[!„BˆÞ( JûÝ~݇Ïo!:ª½­À�I E$6Å¥‘¨ëÐ¥nDf¢ív”h&%ˆ¯©JJ[!„BˆÞ(œô™ž)P-DÅ™Ð4 ]S1EK‹‚B!„½ÅÑY� f“¯§=BxÚð,š+©otw-g#u•uøµö¨#èõHi !„BÑKthQ°`O²QU½—C&¦(3–cF,‡¼-´£ˆwDu>˜ÙlÇUMSÕAt]CW£¤´…B!„è-�BtZG:bÓès´AOŠœÖÔš’CÖá1 �÷L2`q¤â´kèšÌz$„B!Do"+3 !„B!$PB!„BtÎ(E Ä×ÇãõáöùðzýøƒÁ¯H®( f“‘(‹™(‹…(«E Y!„(Ñ›Ô64Ñæõ¢i:ªª„+úŠšvzƒ®ëøü|þ®6±ÑV’qRØB!„�@AˆÞà@E5¡Ãöãl˜LFÌ&þ@€@ H}sK�Ρi-­nÚÜ^²ÒS¤Ð…B!�‚ßõ ¬f3éɉÇÉ °Bœ-–Ššz¡ ¡Ðéͦ!Mã@Eõi º®SSSCcc#v»�´´4E‘7S!„a2˜ùeee<ñÄÜvÛmÜzë­<øàƒlß¾=üüêÕ«Ã�oºé&êëëOšWii)¿úÕ¯zt=---Üzë­ü¿ÿ÷ÿº”~Ù²e¼øâ‹ßZy�Îù¾Žrù&UVV²sçÎ.¥­mh"¤i˜ŒÆ ÇJONÄdèy|®iuMÍÝ>®¢¢‚¥K—òÞ{ï±fÍÖ¬YÃßÿþw/^Ìþýûå@!„(œÌœ9s=z4/½ô ,àG?úsæÌ¡¥¥]×Y´hQ8í /¼@||ü7z=6làŠ+®`ÇŽøý~yƒ¾[¶la×®]�¦s{}´y}í€3±Ëùw% èŒ´º=x|]ÿL”––²lÙ²pK±éòåË)**’€B!éz! R]]Í9眃ª¶ÇPç�wýúõ#::š9sæÐÜÜ̬Y³xøá‡¹çž{øïÿþoÙ¸q#‹/Æëõ2dÈî¸ãŽãò~â‰'1bü1W]ucÇŽ`óæÍ,Y²„gŸ}ö¸kZ»v-³fÍ¢¾¾žÏ>ûŒqãÆµWu�%K–°~ýz4MãŠ+®à‡?üaıõõõ<üðÃÜ}÷ÝìÛ·�¨ªª" ñÀàt:9pà/½ô.— “ÉÄÔ©S)((à—¿ü%¿ûÝïHKKã£�>âùçŸçÕW_Åb±ðþûïSSSCJÊÑî/�‡ùóçS\\ŒÁ`àŠ+®`Ò¤I¼ûX±‚ØØØðëðûý¼øâ‹ìÚµ‹ÔÔT DMM ¿úÕ¯Nšßþýû™7o#FŒ ¨¨ˆ¶¶6f̘Á²e˨¬¬dðàÁ̘1#\é_´hÁ`�””fΜI||<ÿøÇ?NXUUU¼ýöÛ�FÜn77ÞxãI?/ŸMÓHˆ³uû³–g£¡Çct<^QsçA�ÛÍêÕ«#>œ0aQQQ¬X±]o_\qÆ ¤¥¥}ã°B!¾û¤E¡cÔd42jÔ(þøÇ?²nݺð�×´´4 ·ß~;F£‘¹sç’””>®¡¡�—^z‰Gy„_|‘¶¶6–-[‘÷Â… IMMåÇ?þ1ãÇ�gÆ áç6mÚ:*//Çh4’’’„ X»vmÄ1_|ñsçÎeΜ9,[¶Œâââðó>Ÿ�§Ÿ~š©S§2hÐ TUå³Ï>cÚ´iÌž=›°råJ4McîܹLž<™çŸžY³fQXXˆËåbÈ�!áçŸ>S¦L9e�àõúQÕöéK»Ël4†gFê �Ï×¥tEEEǵHõíÛ—ŒŒŒpy·;vì�!„BD º¯‘š%”—–P¾ÿ�žÃw}u*ÙÍ¡û¨8°�вrš;­ŸhZj¨¯ø€™3grÿý÷óÉ'Ÿœò˜/¾ø‚ÜÜ\’““1 Ü{ï½\yå•áçW¬XAee%¿øÅ/7nÛ¶m£­­�P(Ä–-[8ï¼óŽËwÍš5L˜0€¼¼<***hjjÚï”�7‹Å‚ÍfãOú ûç?ÿ™‚‚‚ðñGò8r§¸oß¾Ô××SSSC]]]8P9Ryܵkƒ ÅÅÅ\zé¥á.9ÅÅÅ <8âz?ûì3&OžŒ¢(Øl6ÆŒçŸ~JQQgŸ}6ñññ(ŠÂ\>櫯¾bìØ± 1bD§ùÄÆÆ’›› @JJ ƒ Âl6c±Xp8455±}ûvrrrÈÌÌàÒK/eóæÍ„B¡“–Gw´¯“@xv£n f=\b¡ýÁ.¥«ªªŠØ¶X,lܸ‘?ü�`02�ÊÊJùeB!DÇ®G~\5µ�8€¾±*š·ŠC•uDe9±h!°:Ií�ªëp¸›Â)+:ÁVZZ &9‹¢pUôŽ1™ø�|^Ì&#�` Ð>j7øý…·*tµÛÓ±A]ee%µµµAÚÉÒ !„âÌt´ë‘BS ¨ÁF*÷î£É§ ªš˜ìÄ9IèÓŸôÌ ¢ƒ5Ô5u­ot°¥ŠêƒiFç Ãçó1wî\6mÚÔàè:EEE”””�““ƒÁ`  …ƒ€#òóóÙ½{7ååå„B!þò—¿°~ýúp¥Ëétrç�wòòË/ÓÜÜ>¥å˜1cؽ{77nŒÜ{Äš5k8÷Üs#öõë×�¶¶68Àˆ#X¿~=n·›ÖÖV}ôQ**Ú[m’““ÉÊÊâÊ+¯äÏþ3ú)j£)))$%%ñÑG…ƒ‘ªª*òòò4hÿüç?ÃÛ}úôaÕªU'  ÂcƒÁ ¯¼ò {÷î%77—�;wÒØØH(bÍš5ácȧŸ~ЦiÔ×׳yóæNó몡C‡²{÷îpWš’’,XÐéqƒ!"°9™(‹MÓñBÝþ¬ùƒÁÓ^­9ò,]J—••±�ššŠÓé$&&æ¸@,;;[~…B�±¢ÞKz¢TªB3ØIê…jѤ©UÀd#ÎÌáîFbb­4¶ùÑ1:žš}4¸uЬ‰}±w¨»m©¤Ä„ð·Ô|ç £OŸ>Üÿý,]º”_|EQÂ3å©<åççsÇwðÐC…�KLLäöÛoç™gžÁãñ0tèP®¼òʈA»yyyœþù¼üòËÜÿýÄÆÆ2dÈ\.×qwüÛÚÚØ¼y3·ÜrËq×xî¹ç²fÍn¾ùfJKK™5kº®3eÊrssÙ³gO8í�~ô#>ýôSþõ¯�t1-EQ˜5k/½ôo½õf³™Y³f…ï42„Õ«W‡…œœ–,YÞîèºë®cþüùÜu×]„B!F�EVVF£‘Ë/¿œx€èèh&Mš®ð_rÉ%|õÕWÌœ9“¾}ûrÁ„[JN–ß‘€¨3‡ƒ;39sæà÷û±Z­LŸ>½ÓãFŽɳÏ>K}}=wß}÷É+éV ®67 Í.¶îÝ…ïéŒGÐÞÅ*ÚÚµ@!''‡;v„[lšššX±bEûµ44„ÓÙl¶�B!„8ó(×N�fT\åûŒ^ÇKr¬jÕÜ•±‡jT»3Ë™`h:è¬tÛSRRm)ªHi­,uº,}R&»¦i±:ºU×4‹®ëFMÓ º¦«š¯V©® *±É‰Š� »–�>ù@–=ì/ù YYY\~ùågt9tìö´téR|>7ß|s¯¸öÚÆ&ZÚ<']•ùD*jêðú{6@l±1$9ì]>ÆívóþûïŸph;2eÊ™U!„ø™ûŒ»ï¾ŸÏ‡ÇãaãÆ�äääôšëwÆ;0¨*�P�Š.ÌìUQSO Ôóï‚jP»$@ûx�«¯¾š‚‚ìv{Äþ¡C‡ríµ×J� „BˆÑADå>gÖÑ „NûìF¨Vìi°ží¨K³aÀâH!É®¡kÚ÷zF™îzã�7X³f ¿øÅ/"f+:�9’mÛ¶ñë_ÿUU;vìqc3¾ë²ÒS8PQ�×`ßÁJì6Ì&#fsû´©~0øµt7R Yi)§u¼Éd¢  €‚‚‚Á’@Ãû IDAT º®c:�é]…Bq¦ â[qÓM7qÓM7IAÐ>pxƌᕔ{«¬ôêššiu{ipµ ªJ8�V¾–�˪¢Ýí–„“~ù�òõB!„ B|ã’qÄFYq{ýx|>ü�`ZÞNMQÚW~޲Xˆ²Zˆ²˜¥ …B!�‚½�ÕbÁj±6) !„Bôjª�B!„B!„B!„ B!„B „B!„(!„B!$PB!„BH  „B!„�@A!„Bña º];ôËȶ¯*«Gì?²ïȶ¦iûŽlkšñXïÉò´B!„Bˆo7Pp:�]Nôwl0p$@8ÑŸB!„¢w�®GB!„B „B!„(!„B!$PB!„BH  „B!„�@A!„B!�‚B!„B!„B!„ B!„Bˆï,ã7™y][.� oÀ‹Y5Ki !„Bq¦ ûê÷á xÑu_È'¥-¾÷Š6²½¬ž¯6RÑІ'êQ~Qféñ1 ΈgDvyé)d!„B|;�‚Ʊý�4¼uå¨vÐtC4É™™$Yüµ{(i³¯·àòhV’23ˆ7EfZÛZ‹/(��8³¼¼j'[Këhrû{œW¬ÕD BÓtª›Ýì­v±¶¨’±9ÉülB®¶B!¾ù@¡E‡8¥ÃO û+ü$ææ“dÖñÖ–P| šèÜTŒ@ Õƒù¬ 4j´ÜEy½›øÔ¨ˆL]>—”¬8£Ü¾`=PëQ>UáÆqI��!+)€ýµ-T6¹ycC |yˆ�{jxqúx)t!„B|³�Bkâ: ´4ã‰v’`t°$$}¨–Ö@*€è8&@W°š�„ÜAôc2•Öq¦ Í=lEHŒµ�æˆæá«F÷Üð Ã�ÉÃ3ùÃ{[©nv3sázþ|ëé º®SSSCcc#v»�´´4E‘7S!„Gè(„B:ªÑ€¡=NÅ€A :ÜÕZQ;Ÿ(Éb´àõ{¥t¿Ÿ|ò ï½÷Ï<óLÄþyóæ‘ššÊµ×^Ûãsüõ¯åÝwß=®"9xð`{ì±nç·wï^æÎ�˼yóNëzvíÚÅ£�>Qñ=rmS¦L¡¢¢‚qãÆ1a„o¼ü_^µ�?Øã|Òâ£yøÇ#;M÷ÈU#yâÝ-W5óÚºb¦MÈéÖy***X¿~}8H8Âf³1nÜ8²³³åK%„Bˆö@áØƒ‚ âðØ=DH3`4t=S»Å.�Â÷ÌE]ÄwÜñµä•��ÍSO=uÜþP(„ÁÐù-//�¥K—ðÁ°qãFyä‘ðómmm˜L¦o¼LŠ5°¥´îkénÔ• áˆß^=Šç­âãâjFL&·‹œKKKY¹r%švüõ¶´´°|ùrÆ�ÏÙgŸ-x!„B`4SŸ2Ù㈮n¤Á—D’| ¸­vÒ»QïrÆ:iö4ã H°ð]°mÛ6^{í5ü~?F£‘iÓ¦1räH<óçϧ¸¸ƒÁÀW\Á¤I“º•·ÛíæÞ{ïå�`À€ìÚµ‹ÂÂBž{î9æÎ�KFFûöí£¹¹™þýûsûí·sàÀ�p‹Âûï¿OYY¥¥¥Œ9’©S§òÎ;ï°víZE!??ŸŸýìgݪø2nÜ8233™7o#FŒ ¨¨ˆ¶¶6f̘Á²e˨¬¬dðàÁ̘1€-[¶°hÑ"‚Á )))Ìœ9“øøøSžgû�†w9¸qÜÀnsÃyXôQ ÛÔw)Pp»Ý¬^½:"H˜0aQQQ¬X±]×Ñu� 6�––ÖékB!Ä÷Ÿ{lýËšLVº™†’/ùꫯ(i0‘ž•Œµ›÷OìORLƒ ü¯øö½úê«Ì˜1ƒyóæqÏ=÷°iÓ&–,Y‚®ëòÄOð·¿ý�ýû÷w+ïèèhn¹å.\H(báÂ…ÜvÛmX­VTUeÏž=üö·¿eΜ9”——óñÇGo0زe <ðS§NåÓO?eýúõÌž=›çž{ކ†V®\yznU¥¬¬Œ‚‚ž|òI²³³Y°`³fÍâé§ŸfíÚµ466ÒØØHaa!÷Üs………äçç3þüNóÿª¼±ÇïM¬ÕDz|L·�ë“C¬ÕÄ—å ]J_TT„ßÔôíÛ—ŒŒŒˆVMÓØ±c‡|i„B�ÑvÜøEkb¹‰„ï2Bûc“ó,ò“Ú÷é€Ñ9�³5-¼}¬¤˜$¢Ð4í„ÝÄ·#>>ž 6Ovvv¸ ÑgŸ}ƬY³P›ÍƘ1cøôÓOOØO}õêÕ¬[·.bß/~ñ .¼ðBF�ÍÚµkyæ™gHKKcäÈ£ÝhÎ=÷\ÔÃãZ†Nqq1}úô ?¯( ýû÷'%%%|M'N$&¦½ò|ñÅó÷¿ÿ�+®¸âô*â±±äæ¶O'š’’BLL fsû ‡ÃASS ''‡ÌÌL.½ôR-ZÔiW¨ŠÆ¶¿7�`(<»QwôsÚCêâ5TUUEl[,6nÜH("ŒcQYY)_!„B`T¥ z5EQN„u¬äÞ}÷ݼýöÛ<úè£á€aÆár¹˜3gN8] `ܸq'<Ï…^xÊ1 —]vO<ñÄqƒ›�Tø¡½õ¡¦¦æ¸cm6[ø±ËåbóæÍ,_¾h¿ÃwÚåc±mÉ2 á Ú[4MÃår±sçΈ×gµZq¹\§î‚ó8IPûD]¿€@ ±���Àĉñx<ǵ"›V!„gh  Eл%&&RWWwÜÝïòòòð�ý¸¸8¦OŸÎôéÓÙºu+sçÎeáÂ…8î»ï>úõë×£kÐ4�%K–ðÃþ�Å‹óä“O†[ZZZÂéZ[[‰�=õÝs‡ÃÁ5×\ÕW^ù­•¡Ãá ??Ÿ|°[Ç¥Çǰ·ºgk†˜Œö×¶0<¦{]óö×¶`2¨¤ÆEu)}Ç€ Ú[ jkkOø~›V!„g&iPèå @BB¯¼ò ---´µµñÖ[oár¹(((Àçóñ›ßü†úúzúôén�(((d ƒ¼òÊ+ìÝ»·Û×°|ùrœN'Ó¦MÃn·óïÿ;üÜÆ�ñù|øý~¶lÙÒéŒ:¬[·�ÇÀÊ•+Y½zõ7Z†C‡e÷îÝá.7%%%,X° Óãgô|Ào«7@e“»ÛÇjl£Õ`Hß„.¥ÏÊÊŠØNMMÅéts\ (S¤ !„¤E¡÷GzªÊÃ?ÌÂ… ™9s&º®“——Ç£�>JTTûÝæI“&ñ»ßýŽP(„ÅbáÎ;ïDUU®»î:æÏŸÏ]wÝE(bÔ¨QÇU(�XµjÕqvƒÁÀ /¼À{ï½ÇìÙ³¸å–[x衇=z4ƒ â±Ç£©©‰aÆqî¹çžrÀô9çœCyy9>ø Á`�ôôtfΜù�–¡ÃáàÎ;ïdΜ9øý~¬V+Ó§Oïô¸ÙI¬)ªÀåéYW�76”0yxf·ŽYüQ ö(#²»”>''‡;vPWW@SS+V¬ ¡áè€h›ÍF~~¾|±„B�2cÆ #í- À¨ëº°±º®Ûu]Oœº®§tøs꺞 ëº]Ó´X]×­š¦Yt]7jšfÐ4MÕ4Méð‡¦iüë_ÿ‚ÿÓžÝâÛôôÓO3vìØoeá³ÿ+óWïdýÎ*ü¡ž ÖœÏ#Wum-…߿ӾàÚeÃ2¸ùü®/¸æv»yÿý÷�[líˆØØX¦L™"S£ !„ß!“'OFUUTUÕÿÛq[WEWUUS%¤ªjPQŸ¢(^EQZEq)ŠÒ (J-P­(Jµ¢(Õ@-Р(Š h<€_Q” 4@—®GBôÀm"ÚÒó†¹êf7xwK—‚„ÚqQæn Ð>˜üꫯ¦  »Ý±èС\{íµ$!„"Lº ÑC/NÏÌ…ëiõ œfËB]‹�º7Î[ÅÔqH��¡ŸÓ†NûÀåŠÆ6}T‚ª(ÄE™yáÖóOë<&“‰‚‚ ƒíÓ «X !„B!º;‹Poöç[ÇóÚºb>.®¢¹c4]ç� %ÄZM‚!PL•Vo{”‰óóR»Ý’pÒ/¿Q¾þB!„�@AˆoÜ´ 9Œ˜Ì¶õ|YÞÀ¡Æ6<þÐiåÕêm6¢ÌRã¢2¤#³9+Í!-„B „èmrÓä¦;¸nì) !„Bôî@a÷¾Zúf;‰VAóÔ±¿¬¿® ë*±iY¤ÛŒ »9´ë†”XZ«ðk�r}ì-ÜU‰){I‡»9»«öPA²“ÌZª©¬wÒu4,RÚB!„Bô–@!+AÀ죶¬sFý¢UðW³»¸’–¼¾ØT V“›CµQdÈ#Æ £ë:ºn#!î ›<$9- ·ÒÔbÄÞ× ¡&jêuâ3²ˆB#Ð|HJ[!„BˆÞ(„b±™ÍC›Ç‡§|­è1᪂ªêDÅ¥k]?šAt¼å@3î¤d¬-M´šãÈ6-n¼7þƒe ëèzHJ[!„BˆÞ(,Þ�­.éV€X’ ÉÐþd{«Á‘¨@Ád<Á² ÖxÆ}4·%àoj#Ê‘‚ÐÅGzßx ‡\B!„Bôj†CÇíÖA�"&ÊMSƒ¯ý™@‡šè|¢G3‡…Ö¦jš|6âm‡£ K–`-¾ö@Cs7Ji !„BÑKúãÉH3œYéxöïeWƒt±©™te)&cœKUÞ¸~Ī i€ÁNJr•p) :²¨“B!„½&PÈíŸÞP­Idå&†·�v=R‰ï7GDW¤ 2óìèºÑÅÈhK!#¦½Û‘t=B!„¢÷P¥„B!„(!„B!$PB!„BH  „B!„�@A!„B!�‚B!„B!„B!„ B!„B „B!„ßUÆÓ9ÈUöu±ƒÈvHŠ3W0¢¡¹�×GHVB!¾w ªJ”ÕBBœ £Ápƽ~iQâ4Õ7¹hu{$HB!¾§BšF«ÛC}“ëŒ|ýÆÝûëÈÊLª¨Þ]B[L ø}ø=AÌÉÙd%˜A÷R»?u>“É‚1xl6ªKöÒæ8‹¬x‰=Ä™ÁãõI!!„òþ÷–êÔ*(«´oàÅopÒ¯ß@r³l¸këqZsÕÁä ¤V<è˜lLDÙ∵(òIg M×¥„Bù?ÿû(Øb­xÝîö-ÅD´ÍÚþØlÄ ¡ëà÷x1DÇ`P¢‰‰>¶ÕÀˆ=¥ÎXƒ|’„B!„ø> ÇnJÇ!!„B!„ÚÒê':&ú”‰ÌV !w­ —ûØÁ›A\Õ‡¨m I‰ !„Bñ=`¬3¦“•h‚ö0àÄÑD\)�ûس«³%k”‰€®q´A"€§¥™6C2‰Ñ2NA!„Bœy¼^/x½^Ìf3éééDGG÷Þ@!'3áðCΜ³Ñ� Ö0¥�3XoßV¬8û "IoßÖõ´ÃÿØEÊÀöc5™*ò{ç¯ý+ï¾û.Š<˜Ç{¬ÛùíÝ»—¹sç2oÞ¼Óºž]»vñè£�†·u]_Û”)S¨¨¨`ܸqL˜0AÞJ¢+.ºè"î¸ãޝ%¯ììlžzê©~É ]XÌ$//�¥K—ðÁ°qãFyä‘ðómmm˜L&yÓ„Bˆ3PÑW_òîÛo…+êÇ:òœÝnçìÁC¾– aÙ²eTVV÷œ®ëìÙ³‡úúz~ô£a±X$Pg·Ûͽ÷ÞË<À€صk………<÷ÜsÌ�;—ŒŒ öíÛGss3ýû÷çöÛoçÀ�á…÷ߟ²²2JKK9r$S§Nå�wÞaíÚµ(ŠB~~>?ûÙϺUñ/,,dܸqdff2oÞ>þ´Ë%ðóö’¿²ó«/1›-\:ù F¾sQYqˆw—¾IuU%‰IIütêͤ¥§‡� ƒ<ý‡ÇyèÑÇQÔöî}ŸoÙÌ»K—ð“ndèðá´»vñ÷wÞÆåj&+»×ß< ›Í~~ÿ¾}¬Yõ?¿í|µã þùþßiq5“–Þ‡k®»�ä””S^ouU%ï.}“ÊŠCØìv¦üðÇœ=$?üãøï¼ÏºÕ«xô‰§ˆ‰�írÕ×Õñæ¢×©8t�ø„®½~*YÙýhllàÍE¯s°¬ŒÄ$'?¹a*}3Oš×©ÊaÕ+X¿f5Z(Äð‘£øÑ5?AUO>mƒ×ãᣵ«q»ÛøÁÕ? ÅåâýwߊH§iã/º$|ÍÇú÷?–±æÃ•ásY£¢<$ŸüøjÌ ÿþÇ2V­\Îþöw$$&†�s57óäï~Ë…—Lâò)WÊ�ŒBt3HøÁå“ÂÛï,}ó¤ißYú&ïÿ{E�ƒ…Ï>û,"Hp:�\pÁlÚ´‰òòrذa_|q¯*O™äHôHtt4·Ür .$ ±páBn»í6¬V+ªª²gÏ~ûÛß2gÎÊËËùøã�#Ž7 lÙ²…x€©S§òé§Ÿ²~ýzfÏžÍsÏ=GCC+W®<½·ªRVVFAAO>ù$ÙÙÙ,X°€Y³fñôÓO³víZill¤°°�{ÂÂBòóó™?~�ÊeÕÊx=~üüòWw±âŸË¨ª¬@×4^ÿŸ UÀãO=Íè󯱸µÿ‰8¶l)}3³ÂAºիøbÛç$§¦F¤óxÜ,yý5~ü“ŸòøìgHëÓ‡ÿ}çíˆ4{Šw30'€æ¦&Þ\ü?�z#�?õ4ý ä½·ß<åõ,zõÈ6œÇŸzš^u }ýUü~?o¼²³Ù|Â;6�Yºø r âñÙÏpÙWòÆ+ Ã͵o¾ñ:ƒÎÂ㳟a̸qlX»æ¤ùœªJŠw³éã�¸ëÞûùÍc¿§ª²’�tÊoÅ?—ß¡â`³Û™úóéá¿k®¿‘X›�Ô´ôS¾Æ‚sGóÔ³syêÙ¹Ìzà?©­­aåò…Ÿw8âù|Ëæˆc¶¾›Ý.?.Bq\.×7šþXÁ`�/¿ü2b_BBIII8�Έý%%%¸�,I �‚ø>Y½z57ÜpCÄßêÕ«=z4qqq<óÌ3¤¥¥1räÈðqçž{.ªªb0>|8ÅÅÅù*ŠBÿþýIII Gå'N$&&ƒÁÀÅ_̦M›NûºcccÉÍÍ %%…Aƒa6›±X,8šššØ¾};999df¶ß±¾ôÒKÙ¼ysDÃîÚ±};Mº ‹Å‚39…£ÎaÇöí455ÑârqÞùãQT•1ç��ÛíWÊ�VîsÃÛsr˜vëmX,ÖˆsïÚEFf&9¹y .™t9;¿ú’`ðèÒé%Å»9«C^?¹þF²²û¡¨*ùÆQW[{Êë …BŒ›0‘±‡¯7wÐÙ(ªJËáÖK/ŸÌ¥—_Ñíòimi¡âÐA&^|)ƒ�!C‡kã@é>êëꨯ«cÂÄ 1 Œ7žëoš>¶¦ºšÿ¼÷î.•ÃŽíÛsÞù$$$bµZ¹à¢‹Ù±íóð±‹^ý>\ñH.¼t}³NyýÛ·nfÐàün5!ÛìvÆ_p!%Å»Ãûròòض52PØöù úè#vîܱ_×õvOú.“®G¢K.¼ðÂSŽQ¸ì²Ëxâ‰'ŽÜ~MMMÍñ_h›-"²ß¼y3Ë—/Ú»wÄÅÅ�öuw¬È †ˆ�Dªª¢i.—‹�;wF¼>«ÕŠËå:íîGõuµ8�Éáí¤d'¥{÷¢(J‡IÚ™L&êëêÂw§÷ìÞÍu7Þ~>½OƉœj#Ïa�ŠÂEScIÎd|>�� ¤¤¦çp�ïp Hvï¦ÿ€�§¼^ƒÁî‚P~à‹…„„„S^[§?¬µµÄ'$FŒIq&'S[[‹Çã!)ÙÉ;Kߤx÷N“¸ê'?%9%5ü:¦Ýz[—Ê¡®¶–�9yÇœãègð‚ /ÆbµF¼&S·ç¤×ÞârQqè cº?NÓ4Ô¯9>!�ƒååT:HzŸ êëê‚$9�„B21„BœŽ³ÏÌâ·Þé4ÝÔŸ\Óãsia蘒 €ììl¼^/{öì‰x.H  Î,š¦±dÉ~øÃ²xñbž|òÉp¿ì–––pºÖÖVb;éÃîp8¸æšk¸òÊo¯o¶Ãá ??Ÿ|ðkÉ/  …0vWa4šðù|Ä98âãùxÃzÆŽ;Ÿ/¶m¥¹¹9üÃáõxhiqáLNéô<�€£)ò+|ä<ûJö„�cíÞµ“MÄ¿¾ç”×ÛQC}=K½ÆOo¸)Ü-ê´XþãÆ��Fü>ƒÊ�ýû¹dÒå\sÝõ|´n-‹^}…YÿñŸáàïȉÎÊ¡ý<ƈýþ¯+#3³Û×¾«èKr�}Êq'ÒÜÔÄú5«töàˆý#F�âó-›Iï“Á¶­[6r$¡cîN !„øn:Q½fÇŽdggw9ýw™t==¶|ùrœN'Ó¦MÃn·óïíʱqãÆö ›ßÏ–-[8ûì³O™WAAëÖ­Ããi¿£»råÊp§oÊСCÙ½{w¸9°¤¤„ œv~ƒƒÁ€Ïë ïóz=X,EáÆŸÝÂö­[xú�S~à}22ˆŠŠj?÷žbúw±Û‰Ùl‰8GÇóïÞŸÐÑç[6ó÷wßaúí3±ÇÅ�òz�¨¬8ÄË/ÎãÊ]ÅY¹¹=.s³ÙŒ÷¸k÷b¶XˆŠŠ&%%…gå ( ãÆO ¦¦š¶ÖÖn—ƒÙl‰8�×ëÁ܃'4Mcïžb²²ûw)ýæO7ñÐý³xèþY>7‡>}¹à¢K"Ò YÀöÏ·¢ë:Û?ßÊð‘£äGE!z‰„„ìÇta2¤}pt~~~Ä~‹ÅBê1ã ¿ë¤EAtɪU«Ž«° ^xáÞ{ï=fÏž À-·ÜÂC=ÄèÑ£4h�=öMMM 6ŒsÏ=—ýû÷Ÿô<çœsååå<øàƒƒAÒÓÓ™9sæ7úÚwÞy'sæÌÁï÷cµZ™>}z�òt&'SSSîÿXSUEòáqié}˜y÷, }Ô}„´ô>@ûø„Žc :;Gñî£ý]®fBÁ ŽøönA%Å»™xL¥ô«_°úƒ•Üþ«_GôÍ<ÕõÖ×ÕñÚÂù\7õf²û÷ÿZÊÜéL¦¹©‘@À�ÉÔÞ¬ºªŠñ/ÄjµÒÖÖN«èúI§Î=U98““©­©?W]UîÂt:j««°Ûí]žÝ©àÜÑ\{ýÔS¦‰s8HHHdó§›wëJ”!„èEÆŒÊ+ÂÛÛ¶m£¨¨è¸± çœsFcïªzK  :udðòɼôÒKáÇ©©©,\¸0¼�••ÅÍ7ß‘~À€áÅÖ&OžÌäÉ“#ž¿ú꫹úê«»tm—\r —\YþÍo~~üâ‹/†ÿô§?�HWXX~o\ø:–•a±Zq&'wé5ÕÕÖ’�èüÚ¿cÃG�bÅ?ÿÁÄ‹/‘!„èeú÷ïÏØ±cÙ¸q#º®S]]}|½`ذpKƒ Bœá.¸èbÞ]ZË{³Å•?¾*<îàò+®ä½·—ÒÒÒBß̬ðÀ妯FTUÅn�¼ýßÏ>CuU%¡PˆÒ½%,yã5®¿iC‡�`êÍ?çÝ·–àjn¦ÿÀ³¸îÆö ¬ã´¨G|µã \ÍÍ<;ûû~ü'½Þ†úzö–ìáÀþRÞ\ôzø˜©Ó~N¿yò±ö…î4MãÉßý¶=P{ìql6;¥{÷²më– ×Þ0•7ßx�5~@Bb7ßrk¸Õàú›¦±tñ,ûß÷HNM�˜õ¨¹©‰×Îç�Ïý7«õ¤åЯÿÆ_p!ÏÏ}–P0HÁ¹£9gô˜p^kWHjZOºhŸšvÚUáU濲{\W^uíá`«-°|�†Áßß{—¡#FÈ—G!z¡aÆ‘’’–-[¨¨¨  ¡( ©©© >œ¬¬¬^Üö“ IDATùº”3fi«`Т›�Bñmع³ˆzm—ÒÙ¿�.EéÖ:;ßeG­�6o ñv-‚(6í ­AˆùÜ”ï©ÇÐ0Æ&“žîà”E`tÐ'ÛŽ¦ih¡�€.Ÿ\!Î IÎd)!„ߪ1cÏã™ÿšKÑW_ušöçÓoãìÁC¤Ðº(„BU#†`={¾ªÅ–›�Á  fÉN[‚ ‹î¡¶´„ƒµV8;�–ü�‡(«kC7ÇKi !„BˆoÔ¥—]Î¥—].ñu »+Ýä¦EƒÁ€Q2¤Ðw@4Kˆê�ŠÙ˜$[Žt7²²Å‡ŽÐqÜME«ºBljœÑGO`ŽïCÿ¸ÞÆ )m!„B!zK �›v¸V¯Ú°Y+hlQéçˆAk)§ÅK?êJÙÓê`@fF=ˆ«Å‡Õ…è(Ø3r‰Õ´ðL!šxkÙ(@bßd¢P0š RÚB!„Bô–@áèCξé´íßMQ ZIÌÌ ��BRK{vV¢ cˆI%ÃiæðRH'fM Ù^Aõ�R4t4]fbB!„¢ í•û¬Ü£c ŽÌn„�3;—¤ˆ�:™õщ}Ȋ׷2hRÚB!„Bôª�B!„B!¾®/�"k !„ò¾ BˆcDY-RB!„üŸÿ½%#Œ…8M‰;Š¢àñúÉ!„â{Ç ªDY-$ÄÙ$PBtãËc0�œà�‚B!Ä7& ªêqŠ¢„›L& †Î—"…Báå ”cºT»-]�„B!„è¥t]'  O™îHšîÌD*�‚B!„½Ü©–#Ð4�P(Ôí<%PB!„â{àdÁÀé (!„Bñ=¡Ÿd5dýÔ«$K  „B!„]'³ !„B!Ðu¯× €ÕjÅX[[{ÒˆC×õðvÇ;î×4-bß‘í#*:îB!„B|÷öíÛ‡Ûí ::£Óéìr p¢¿cƒ�#‰þ„B!„ß=åååá ÀívK×#!„B!¾«íÞ�ÑiÅßê%¡Æg20#Ó×|žÖÖÖãöÉ`f!„B!¾³Ü´ãÉê?�œ�NÔºš_ÿYL&“ B!„Bô&lލöJ»ÑŠY }ýgIMM=nŸt=B!„èDS›�Å—ðEYÍn¿ˆè–¸h3C3˜zÞ@1–n­¢(ßü5ÆÇÇc2™hhh !!A!„BˆÎ¼¶~Ÿì©–‚§¥ùÿ·wßÁ�æ÷}Çß¿çyЂ °÷eÝ~·{]ÒI–eÙ²ó‡£DŽäLì8*�[±’Ìx&vŠ{Ɖ=±åÄñ)²lGŽÛ$JÜd_¬vò�îno÷¶Ýîr—K.{ @ÔçÉ(|$¸å´w÷}Í`PŸ‚‡ ðû<¿–Hó­+ds?õ}'ºýK&“D£Q”R:ŠÅb„B!ryn€Á �;¡m9 âPŠŸ›«ó›ݾ…Ãafgg«Ne }„B!Oe$$ˆ»RüÜl'3Õ~™¦ÉÜÜ\ÍùΤFA!„Bˆ‡TÏø0ZñÔ¾j¤ÿÄÄîý{”L&÷�ëLj„B!„xªU“Pd¼xq‘3§{ð(9XB!„B¼S444 I§ó#y©Šá•ŒS'$$!„BñN£”¢¯¯¯ì¾�æ“^ B!„Ü™Á _øñ÷ò®±Žº^ÿÙ8Å»Ç;ß´ý»›í}è‘>>õþ£ÕqÞï}|áS掠Ñõ¶ýŒ©.hwÙ©Aú(!„B¼ ž=Úž4ųG»ä`ÜMIS˜Zt]?Ôã‘ú!„Bˆ¬ÑmÐhä×¾r…ï=ÕG‹×E8žÀë2øÄwM0Úé'™Éñ»/ÜäJÅxû§üØ{Çø×rž�×3ëQF;ýݬFvøÏ_¹‚iY<5Ò·ŸÂÐ4¶)þû×o`šÿêÃgøô_àãï§/ÐÈ¿ù_çøçç/\_.ÛÞ£ƒ>úô†®X‹ìð[_»ÎV<�C×øñe¼«™�í$3ë»ÃŶ5¹ùôOàoppci §¡sivƒo^_¦«¹�O¼‚ægé=Þ\Žì9N_üñ÷òå×îpª¿•¯‹¯^]ä//Îó�ôÓô2ôñúìüòm>òäžÉ×ÎÜ^‹òÛ߸ÁN:@_ÀË/}ô šœ\žÛäó_»NÖ,ï¸ûƒ� òž‰N, ÞXØä|ëYÓâg¾ÿ³¡m†;šèmõò�ëˤ³9Òìuòëu•ÙPìá PšV³æ@Ó4t]ßw„£ªËÉ¿®B!ăõÌh'/O­b/Ý\á]ã»Í�>òÔÂñŸþ�ùÍ¿¹ÆOè}·ˆÖÝÒÀÇß7ÎúóËDvÒ˜–ʼn¾V~å/.ó³ø*]- ïm!èsó‰÷Oð«q™ŸùÒ·yqr…Ÿøžc¬DvÀ‚@¡ÉÍ‘ö&º†C×PÀh§Ÿk‹áÒöšœüä�óÏ_å³_z™« aþÉ{Çxß±.�n>ó{/ñËv‰“}­¥å>öô×Ã|æ÷¾ÍßÞXá±#mä …óŸú¾¼8¹Âg¿ô2¿ýõI>ó}'1´½5¦n‡Î¿ÿòëü—/𑧆 úÜdM“Gƒüê_^á�¾}›§G:xt0ÈÏþÑ«|öKßF÷±¡ÒzNõøwÿû<Ÿù½—j÷ñÔhys¯ÇŽy×x'?÷ǯñ/ÿç+´xÝ|àdoa,†;šø�v‰_ú¿ùðãƒlïdø…/_àÅ›«¥×= ”Rhš†ÃáÀ0ö?ÿo‡]×k6QÚRò¿+„Bñ@={´‹¿�\ào'WxÏønó£3ƒA^¸‘îöj”ŸþÝ—Èäòg~œŸùÐI>ÿµ,lÆKËœŸ^'gZ˜–År8Nk£‹“}­Ü\ŽäƒðÂ�F:ü48 ÞX3Úå§Ñm�ΙÜYßæH»�žV/¡í$±d¶´î“ý­L­D™ßÈoï«W93DSŠ£Ý-œ»½FδH¤³¼6½^ZîhO3/ÝZàêB˜õh~?‚>7�Í |ýÚRþ=®E ÇSŒvù««Woç×¹Osg=f`fm›µÂ: ðâä ©L xáÆ2'ûwCË·o­²“Αʚ\˜ 1ÚÙT¶�³Cm|ëÆ2‰tÓ²øúµE?ÒVzþâ� ,`5²ƒ®i\¼“Ÿ™{-²CKƒóMýì8Žª§ÓY uü5 Ã0p:�¸\®/ÆåÙ8�xå?X!„âèmõ2Ôæã>òxé1·Cg¨ÍÇÌú6M'‰ÔÅY ~èé#(T©™RÑN&WºmZ iŠ&·ƒí�Ýõdr&©LŽ&�ƒk‹aF;ýds&·V",nÆëj&‘ÊðÆ|¸lÝ~�“ñîf~ýGŸ)=–,¬Çë6Êö/–ÊÐäÉœÝb¶™‡CÛIš<œºÆ¯ýÈîú\½´\¥¸íX줳x]ù3åöuûœe³Ç“Yš<ŽÒýH"]¶�AŸ»ü=689;ÔÆNô Ъl™T6W8¶Vù}ÓBÓÞ9}$ f.s£ñq&Ò]A!„â~{v¢‹?zù6z~¶ôØ÷?ÒÇ{&:™Yß&º“Æçq²Í¬»[X/Üþ«‹ólÄSüÄ÷ãçÿäµRSžj¢;&ºw Ë.CÃåЉ$Ò¼±æ'z0-‹É¥-– ~ø™él©¦£h+‘æêü&¿ò—«â³4¸Œ²wQ"�¥Ái°I>ÔÝ¥õ%39~êw_ªëx5º¥÷ïuåÃG‹×…ý�Gé² áó8Ê ú�®Ýãàu9ÊBäk+¾üÚ _¹8/Ð}h�¿ïi B!„¢ ¥ïï,k¢ðÚô:ÏŒu¢kŠ×ïlð�=(Cm>þí߬ôº•È_c‰í� ?øØà¾Ûº4·ÁXW3�~ï;ÖÍ�¥-v29BÛI(lÆR¬FýÁ¼{¼“7æ7ËFnúÜ_¿Á'¾k‚zê¦ùúI[ó©²÷OñË?ü$ NƒßqŠ­xzÏk^™Z£?ÐÈ/}ôIPpcq‹?½0[ gWç7ùù¿w†–—æ6öµó3!ú�ü‡ðº¦XÞJð[_½.Ø ê“Ÿü¤A~ô#0,Ërn Ñ²¬&˲Z�6˲:l—6˲Z-Ëj2M³Ñ²,·iš.˲ Ó4uÓ45Ó4•í‚iš|å+_�Áo…Bñ–ò±Ï}UB=K…fýü܇Ïðgçg¹8»Q÷ò_øÔ{ù¿ÿ2›ñ·ïp;ðO¿ûP¯ÿЇ>TúÔ*�j»o)¥,MÓL¥TNÓ´¬R*¥”J*¥bJ©¨RjS)µ¬*¥V•R«À:°©”Šq`H+¥²@0Kj„B!Ä=û‡ï¡¥ÁÅyþ ºZ ú¸c›g¡þ´!ÇÒ.“ÉPÐ4­44jµëÊK‘®ë¥ËAr¹œ4=B!„÷îÏ/Ìñ“<Îç~ì]d²&¿ý�l%Òr`"¦ibY–eí;ïB6›•  „B!î�H"Í/þŸ×ïiî›r ß¹\®4[sµ0‘Ëåû�¼i33×;„B!„âÁ–¡‹a`¿Ç59üB!„B¼³X–uàã÷-(H��B!Þ®|îü^ƒAŸ qhÁƲÏÑýt·eðû¬­.ß ‘•¿·B!ÞANôµp'´-CÚl(ÀÉÂçè­âPAA5rr$XwhÅëóë$eœ+!„B¼…ýÈ{Fy×XM‡ qhþ'ï™èä=;zWËWêt?ÙÍ[\º¶LÒ¼·ý6®O-Ó¤ ¯fb�;s!ÒJa™:¾®Aº|X Vnϱ•J‘Ô;9: ØGzgå&‹Ù&ܹ$©T’Œ«�Þ/š• 4·D$eŸKº|J„Bñ–Ôìuñéï=!B¼%­Cô†.3½äx—ëî×Óml° 2Ön²:· �ŒûuÌ�%&o/Ñt´¯j sxœŽØ<×–÷®$•qÒ?ÐŽ–�2s�퀗fÝK°'@|6Ek—eÊ_M!„BˆCÈm/2µ]#´qÖæ %r(ÝÀÛ6À‘î& k‹é‹+èí:‘u�¾GÆiïicþÖÑŽ!šî²W²Öàq�N&ÁŒO6à÷åÏükn^vˆg÷¯âPJÃåõæ›#)‡žÃ4¥©‘B!„÷jn9MË@/~‡Iti–�ÖÉÄÉœ˜èÅšaa@C#fuqòìmàm¡…0ñb™ýðåsm¿óüVÍpP)uÈ× !„B!òÜÝ´{4I¢ÛÐÜÖœ?A¯û6+¢[‰B¡ÛIS«G±Ü­¼xÒÄãw? ‘±OáltƒæÄç^b{;G«_ÇÜÙ&�—€£ZÑ¿òU"ÊÓ†‰4:B!„â. ëŽb?ß,¹l†­é+„5U(›è-”ÒÃÖ%X)§C#›ICÝCUl{)ׯ@0ŸÚú;¸3w‹É5…e:hèÇ« ºÃ�P 3›"“ј¾µ‰rèïñ—EY`PMž0+wî`è2·›B!„‡±±°†´¯2Ð.ÚŽ§»4MCÓ´ÂIú؃ )ÇF»Jw´†6ŽL´•&Z(^»ƒŒÀ4ÍÒã–eaš&zç(Ã…Û(íÃG0M“ü¢üÝCøL³´¬B!„¢>�Æ «~F»=47š,nlÓÑàC³ÒlÌ/‘m¢»ê<€&錉á«>êQ=ÝŒ{Ùq¥T)Loû#Ø—> B!„B^kO'ÛÓ ¬µŒÑÝ3H`n�WM,¥pù»9â-kodË â '�}w?EÁ¡‚‚=ì÷ØÝ¦!„B!„­ í 0t,ˆ¦i ¼t ¥S©R³#MTÃgN•å„iaÔ{÷ÛÖîgáÞþz{-‚„!„B!î2,Ô(S×.cgÙX áìî§î¾l¯ÝÏ�¯öf$$!„BqïåízCvcš…l7#î{Úæé£`¿–À „B!Ľ{(¨Š·�À§ƒŠ{-~k÷c‡kíx­Ç„B!„õ•»S¾®÷}­×Ø×îeEû¥ûs„B!„¸û°°_s£ƒÊÛÕžÓu½êk4m·A»×�¼›!„B!„¨¯L}·eñZt]ߊ Ã(=gÔ³‘ý†?µ÷I¨Ü1û¼ 6 ©A!„Bˆ:ÊâJ)«2,T¶Ü9(@gr.^öcš¦U õÌ�PŠ·«…©MB!„âðœNga¾­ jÝ® µF"­§l®iZýM�êíËPÏÎ !„B!ê+ƒßKùú^Êà‡é£`ÕÚ©j÷«½‰H$"m!„B!êP,;ö+‹ß í `°_©g§íÏÏÌÌìY·B!„b¯™™™Rÿ„zÊÚõ yz¿‚Âa•½ û¥Øvêù矗¿¸B!„uxþùçköC¨Qø¿¯'ãµ*)Ã:è±zz_Û.¥eÏ�;Ç¥K—ÈB!„âíâܹsœ;wΪ¬1(–¯k…†FB²ö›4¹jP¨Ç>UV=Ë/_üâÉf³„B!„¨"™Lò…/|Á:ÌäÅÕNò× õ2ì+?hHTÛë¬jãÖcii‰�}ìc<ûì³<ñÄŒ��Y--- s+!„Bˆw¨p8ÌÍ›7yõÕW­^xá ;u ‰ZªÞ߯oÔ ö[yåsõ††^x�o~ó›¥pbåQ¼Êv{Ïuiƒ5ÂM=¡Gˆ‡�­öíÐ,ËÂápÈAB!î³z; WÚ«ê‹Íˆ*«;Ô[Fßg¿­» UÞ¼U¬A(\[ÅB¾­†Á*lPU$UyàLÓ¬Z“a¯µ¸› pØZ!VÍœxPP¸—å…Bq¸°POP¨ìÿâo÷>á ²Ÿ°Eád}ñùŠëj� ®3êËV«`ÙV\vß^ó`ß¡Ba_U;ˆÅBLålÎö@PJ„�  AA!„x‚BµpPëö!«6•�UåÚ²‡‡Ã†ZA¡Ú ,{((Ô.”�õ¯(Ô[šU¤ŸšÁ¡Úm{Á¿²¦ VÍ�!AA‚‚Bñf…ýÂÂ~#U Uî[Už·jm§XÓP%4T …Šf@¥CAá¾Yqß*îHE€P»åKÕêP¡ò ì*kj…†ƒþpBHPB!ă ÷#,PÞœ¨jh(–Ó+BAµû&5ZU+ŸW µª*ÌÂŪ¼.„³JX°÷[PÔ¨M¨l²TOH¨|MµÐ „ B!Äw2,T ‡ UÂAÙüdÅò·½I‘- ˜eùÊÇê©e°Œ}B•I¤ räkr–eål�[¶ð`U©P•i¥øüak*oKHï¤/�7+h!„âÞ~»[³Pgx°l×{j µÅ2{®p?ÇîÉû¥Z¤Ò}ƒŠ‰lÍŠìé#W¸dm·s…°` z¡™‘²,K³Õ,¨Š†Ò®l2T£¿Ã¾}„x»’!„âíö«e8àÚªÌb8PJål¡ Wq±—ãM[Ѐ:šAõfG¥•+¥²–ee€â¥øXÎ*û&(Ê›©Z³Æ0©eªÞfFÒ¡Y¼Ý¾d¾Ë !„âî_ëé»pˆà`Ù–©ì` ÅP�UJ••Ûma¡VÍBYp¨ÚGÁÖ÷À¾± �QJe,ËJö‹h¶ŽÉzá (ò#©Š‚=µ öfHûôk5C’’x;’!„âí"j5=ªõ˜=$T –­F!g i ­”²—Õ÷œè·†Ê�PR­�‚=]”… $•R)˲R…ûN¥”hÅIØ,ËÒ aAÙš"•f`«lR¤”RµÂ~Áà P!Ä;包f!„âáüÍÞ¯“ó>5V�0Qvb¿p]<±o Årzñ’,\Ûkì5 VµÀPY£`5gY–=(7’J)·eYÎÂ:´ÂΛ…> z!,h•M�jÌÁFe€¨ª5O’Â�x;“!„âíê©F °Ï™`ovT Å�°ì Û¥X†Oš#•õW úDl–±¶¶Vl"T(¯M(†„âFÝ€ p…e²@Ö²¬bxÐ,ËÒlAAUôUeÁf¿ûµ CB¼UƒÁûrvâ�/ŸÚbin�åp„D*‹‰�»ÁO £—þžfœ…Õ†®‹7ÖLœ=�òôHÓƒ=x‰9ο6CŒÆŸ>E§£Þ³Ä–g™] �§IçL4ÃMƒ¯…ŽþAz›�dwïÛ±±¢L½ú:‹I�àñ÷p<(ÿGBñV ÷ìªUÜ·�nT,ƒkv€xÅ%ì(¥ì5 ûÕ*`´··Sƒ¢¼éQ®PèOVX 1À 8 a[ÍCºðœQl~TöZUYÀ¯UØ?(HHò…sÿ—7có\¹<ÍV&_3èf–T|“¥éMÖ·FxäD (ö+ªèŒõ`F¡ÅíÖõnˆÝ¹ÌÅÙ&¯Ÿ§I:#¾µÂt4JúôY†›ò5/ÙÕ+|{2I÷£�3ì;ľíÌóú¹i8ò$�öºp5˜&ÎFÇ!Ž�ÉæäË\ÙpòéqZ 4¶d4ü®zß·Bˆ‡õ·»ž&J5ÂÄžfG”:T,³' á lÊî1vkR…2û�ýj6=*,Xì¼\ ®b(†òÍ”Šœ‹Ï;”R: WŒ|¤*F1RûiR$äËæM VŒ¹ù� y:>6J�ϲÄVosãæ2±Íi¦Vœîö”¥ÿv·¦ê V”¥å|Hh{œÓÝžüã¹3¯_`6–`my‹#þYBk[˜¸ë_1'l„ˆZФv�ƒ¿ï§úùs[¬mdŠ©¨°^º'NÑ-ÿBñ¶úí®³f¡Z�‚ýRœ² Ø?Á¶�H!0Ä”R‰ByÞÞWaß~ {Û#C‚Æn5†QhNä _KP …�¤”RI˲JA¡ø:¥”†­VÁÖ÷@ö€î×ÑY ÷aùð"Ëq@yè96AoSñ_Ý�¯s‚&ÜŽyøŒ²QÊte_žäæ�5bY…ÓßÃèÑ#Š­z¬4sSÌ.oKZ(g�ÞQÆúý»g+²1–§§˜_�’Ì€r7èf¬¯ðšbm” òéÕ«œ»¾NÚÙÆ±³'èpU~idÈæ4 ‡{÷x>O?A.Z»‡lÁIœÙs¯2˯6:õ ߘ pì™Sh7_àêjgïÞ5êÏ¿ÅÈœ*Ãʵ‹ÜÚÌbø:èï‚ðò*¡;WHOp¶Ï�¿«—ÖùEÂ)pú»hóûñêŠd1Ðö—ä"o\¾MØrÓÒÞK£ž%¶±ÎÚô•üq´ÓÓždq=†©5ì àkv¡ÔNaìÖ2¤V¹vñ¡´†»¹�nÇ¡3Wc¤O=ÎX«Føö®/&1ƒt´{Ð’aVC \�åp<1AÀ�ÿ/!„x˜~Ǩa¨œ­8aš}Ä£ ¶�‡ A!V Å P«�¾£ÙKßfá÷ß´m¸TP(¨w¬<Ø:8†K5 ™‹�™m'ËCBµƒXÏ< BÈLmõNNh—I§ó7Ü<šâÀ¥ /HÇŒ=ö½ ¿sŽW¦·Énm¥�@z•Ùå$(7=ÇN3êz<¼þ후çØì› es–Ùˆ F€£gOÓásó&/_^ ±4ÏÖÀq¶3½Î­«3DM'ÇN3ì×kì`#ãGغÈx_¾ySr÷/¦¢a"9 u�“Ǻó_¾‰Uî¬ì`xVc'£½QV×c¤õfzÆF (ÀJî©I‰ÌOJƒæ?£gúñÛÓç8?gua�ÁV[[IÀMçØ)Æš²´/Ì1Ý8Léë „ãïû¿ÛöÙ˜íýŠ‹©í€¨Ðܨ¬C³-(ìבyÏ„ke)¥Jq@ß@Eçå¤=$.ùyÊšQ¥OBåX©‡éŸ µ B<Œ@Ý…ÓóÞ@3î™m’¹ Y ˆFˆ˜€îÅëH‘J–—F7„w"Dâ`lEÈø4F3ÒZÇxæ}cU¶¶Ãòµl'Áèc|O{£rš�GŸnccm•õP˜ÍÈ6ÉLšøæS›klŒ?Σ=žZoŒ#'¶/§Ë™ÿ¾Ídɾøê¡5xñ¨uâ›7yõüÁ?þæ½C‡*´ï‰&ð÷ÜwäqÞw¤øš,^�ñ$ W^a'Њ¿ÙO m�A—4;BˆïD¸Û`PñÚÊ3ÿûÍ{f±4ÉÞþ Õjʶ[Ù™YÙnkе ¥�+´…Ê:9»ª…vû2(ÛDkª"|ê€I!_6‡[ö°Ë»Ü®|þO&H¡ØÓšÇ*ÿÏ-®_sºÑ‹ÛÒœè…ÉÙ-3—_$·Á�—_¬Xa’dJ‘ËdÐuN¥j}9ö!Év¡O@vc…õtÝ•Ö�{ öäσ¤¢kܹ9ÉB$KxnžhÏ8þb³‹Ý¦>d‰ÌN2¹°Îv2·gJM‹l_k{&Ñ)þš†8>‘äúí¶#ë,DÖY` ÝÝÊàñ“ 6ecÃív¨VÅÓ4…íåH¾‘ ½ÖˆJ:'N¿6Éüfœ�•8+óLcàíçôÑN<òõ)„ýoyay«Jx¨ ¥°PèØœªq©ìÄlÕ ÆsÏ=g}êSŸRÕž¤¼f¡²‡uV)•.„…b@(^4Û¥²É‘ªUðÐZ ûkliÆ£b$“¬F,š[ÊÏ>ÇgÏñÚ’NûÀ(ã=¾Re+ Û‡1U(t‡�¦¦ÞÂà±~ü'´]>…¹å@©¦™#«Tá,½I6•!‡ŽÃiguD)7ÇNкv‘ëëLßÞ ãx�jMîÍ�¡ðqÓG_oká5:nÃQÖ__ �N“DÑ\œ­xÜ”‚ìÚ$—n¯’Õé;6L§×Afý—fc»ÇØ> “í˜ï=6:M='x²{‚�è‘H˜ÐÊ«Ûa¦oÌ|jŸ-|` »ÁE¡4#?—Í�ïXY²é9Í�Ë¡�;ÈÈ™ GRq¶¶ÂDÂk,-‡I¬Ü`*ÐÆ©Né¤ „o±ß~«ÊuÙ\ J){3¤tŵ=$ì;ÀsÏ=—ï̼OX0«ìœ½ŠÃQ³Õ>o‚n Úîù±ªÍŽöiN$ÄwNs/½MKLE“,\»Š÷ø8½Í. K|ùWf¢dM�XV£î,¾f|Ú*a3 A‚�)"+aR†CW³c>I6b#ÕK· Ì­[¼ra�¤àø»¡³´B­?ݾ~7¦‰®N1ÓÛʨï™ÑY®__'«Ü$gïðö;K$´EÀé)?»ne0 •;ÑX¾I”·“þî ²„ ý8,sïörfÍÃ� /°´±ƒ#8Los�?Hg‡‡ô‹“„Ó;¤_©FÓ¢F½«‡V¿›éí$;››Ä‡}x�ø�ó¼<ƒ¦žy´•í¥5"½Ãí´vxiíèÅÏ·x}1ÍN*HPBˆ‡8ìǪ(—WÎÐ\,§Cñvñqs¿�ðÜsÏímzTGX°ï�=,èäû#èìÎÄlïÀ|`s£Ã0 B<(^Ž�yý:ëÉu&ϯsK7Ь,ÙÂ7�30ʱ~oý«tu2Ø5Kx1Æ�‹çØ 6A"Äz8 MGxâ1?ZÛýMëLG7˜<�ÍfƒøÆ:IKÃÛ;D»£p>¤lWî^âõ…8 7çé~loÅׇÑ>Ìpk˜ÉÍ$KW_bå–�¡“Kï�̘€A`°¿,.�J³4y3ØI¯×�Fs{�ÉÉ,Þtˆµ¤¯JßYçö”�á‘ N‡˜Äæ¯ry§�îá¡=‡AOm27»Nvi“ÍöV<†I*¼FØ£5H³Nœ Ò¹ n]ºJ¸}€ñ*(øû‡¬^g#:ÍÅ Û´:w­Ç@¹éêÁ£ï°´<Ç\ Ö¢´û ÈÄÙXMƒæ%Øê‘�ºB<œ! ž�Pº]¥cse`°_ŠÏYõ„*O)Õ flÅœšº£V6¤L,Wc‹Õ90fŽtysh„®i/Ü4´GŸÓ|J)Hi¡7Îs#ݯΜîQUÚª‡ðÀ‹ï$+ÂÌ厎Óá|ÐÛJ°tý:Ë;€«ƒ£Ç{ó³ ר¯Ù++¸'öî—™Xgvn™­�ÊÑ@ {�¾V`’XŸeve‹dV¡{üt ôhoúÔ]ý¯x{8ýD‹³3,­m±�J“ÅÀék¦½»Ÿ¡ÞV\»ÍïK7ìmò‹ÿæù}p˜xœGœ“Ü^Ùd}) †‡æîq†GúhÔš8ræ,Ž[·YXÛbu ·Ÿî±1†ûý…>žÅ&B:�¡ÚW¯²½ÃÔJ�TvVP�ô=ò$ž¹æVÃDã;ÄS |­-´÷ 1ÐV˜8N530ÜIøæ ñ�¡íVF&8½ÊíåËK¤Û8ùH'©Û¸ºg#¡o¤ƒ¶Áa‚ÑÛ„’ Â[ :Pùá\mÇÆÑu’³ÖMnϯ^žcÝÒ0Ü^‚ýcŒéÄ¡€ÆŽô¬sci›d$LÄß_˜ùÚþ7z8}VgêÖ +[«,YžÆv†‡FjËwyäúÔ K+Ìmš ;ñ6u2<8ÊP“|‡ !Ä[­¤T¥¼§f¡"0ÔºXõ„„šv[X€Ä¼:nFÑ;¡&ú‚Êk˜*º£nÜXÐ8ò¤v¶×£ AA=úô˜ò)SmO¿¦^ßhS�>:„ÏØÝŽÔˆý˜Ù:oZq::Ëåy�‘cw¬ צHGîhÀŒÌrk&Cç‰ZÓK\›Š¦£â‹7¹µÝÊÑ‰ŽºGÈ)J§Ówÿ�bY¸\.ù` !„oa5NúUvp®6’µO880$@�Fª»5 &¡™+8Æ3ÃA+?&‡¦¼í#ê4Ië¥É3Ô}LmÍŒv–.©K«MêØÙò�Pë�Jxx§É±½<ÃüF"ßÛá£sp€ k›Ù7 5 Ù®Íæ4åˆÄR¤3àëa ÙdØšŸa!œÄT m} uúÐÉYœaq3‰©4ôÆN†úƒ¸ëLÉåëÜLwsjÀ_~¿¿V)\Ç×1@0Ð�o{×ÔŠWŸ'™ �Zòcû{›}á4i‹Ò™x!„Bˆ:CA-……ýÂÁ�!¡fP(……O~LmELZG[ !Á6®j°Ýj½6¥¶bƒ©Ð ueFcäÌ„ îž}U÷ã€H x›H‡X ét;E³n’Ú˜g1’$Øn‘É-’ÝGëÑÉ…§¹²¢³¹ mc–¹„�±c¸Í-fn̲ä=Fwzž™ˆ‡áccø´ ›3×™Ymäh—ûÁ¼Í…?¸{¶Þ܉W^z܀棵øù7Sl…¢àë©]k!„B ‡WkØTjƒC…„}ƒÀsŸÿëÝG�©|G½Òê…ÑœF–t¦ðxz…“(Óô’ÊÕ‚,Þlº‡µÁÖf O«wp�a+‚R¶võF-~¥Àp{pæ²d±ÈFã¸Zúñè ô�7�¦ˆNoã ¥ÉP€“–@‹+QÒÝžÚÍ}”}(Ìò!>wïcÛ¯Zág“¹;QûÆhÖw_›¿ÊäZ ½¡�¡‘æCNªu>÷ò#„B¼­Y5ît}`H80(8õ,É´Ia¤Óݰ`¥Éf ÜN ……ò©¡³§­æõ×9å¦ò=>F«�TˆŠO\+ƒ#YW˜ZJAC+Ýý½´ºöâõ={‹lÎÄÐw?¶š¦9²¹‰•I.¯Ÿ11 9ë~ÆÕ½ÌÄ*ÓÓ›8zÇ M£v5ö�àlO†Øú,wn- í¥QÊíB!„x°�¡žÛõÛzÁ×®Þ´&|ÇT¶½½øb ZS›F«u¢‘ü�x–é†E¼A<½iéœ÷‰£¬$)ÄçÄc5HüÈuÙå7ÎE‡ý<3jdÒóÄQb¡ØÁr³’¡OÇU£|Öe…ógµRc­>ù #yme™ëTÃHbK!@F eT`!N»FЉ4�'<üCŽ_$—L®29P… ÉñƒÿÁïÙš…É 7)’º_lûcîͺmÛvó<WZÛ_m3Ÿ¤×ÛZìèÛ.®Ûš¼\îƒOºdHŽ ò Àû}Sè¿ÂkîÜZç8}24«Ô ppŒ){ÝãÝ=�sû÷Nk~?ý»rx@\&¤bKGDùC» pHYs  šœtIMEå :)‚|aG IDATxÚì½y˜Užïý‰%·Úw(  Š‹MPlQAA¥[ÜZ{Ôn»•Þn÷̼ϼ3óÜ~ç¹sïÌ;ïÌÝ�u\BB"„, ‰ó×N” ì:’ÀJHHÈŽZBB¶“óÒ9ËÎ]BX Ih%$>–v¢œ£ódç/ñi'°²ŽKHHL¤#–„VBâ´“3éŒÙ©K\„$VÖq ‰�ÚaK2+!q–Û‰òÓ*gp=I$>ÉVÖq ÙéN$�$´²�œÃv’o‡›«3W>B‡/!q¡’XYÇ%$$δãöçÓqKHÈv2Ávr&ê’’ç§ìè%>é$VÖq ‰‰tÎ"ÏOIf%d;9Kíd¢Zœ¹2ÎöD ³„Ä…Fbe—��ȧcNï„Å8Û’ÌJÈvr–Ú‰>Á>S§ží/[ç.;|‰ ™ÄŽWÇ‘u\BBvÊ9:æôN9[‡-ɬÄÅÜN2µ�\×Q²¥Ó'ØÁgúSÓ>3uò²c—ø¤�ØLÄUÖq ‰\szm9>óí¼%™•¸˜ÛI¶¶1.™Õóìðs‘Wç_zg/;z‰O‘�¼ªiõZÖq Ù9gꜭ´ïV¤V’Y‰‹µ�ÄÛ‡’¡��/™ÕóèàÓ;ûtòª¥}ާ\IH\h$– 5'yÕr Ø$‘•��t¦ÎÙÌ,¤6›/ $²ŸÖv’‰ÄšŽOÅAb­´ó&à#;‘^Ëò§f ²ùvô’H|\$– DUËò©f ²²ŽKH|º:ß|;g²ØLŸÎtH2+qµ“ô7f¬�“X3í|ËÑ_Š42›BlÇs-ÈæV ÅÎ�êŽítuVÎô–ø$Y§Êªå9XSó ²²ŽKH|º:ìLD6�ÄfúKWhe$‰‹©�dRa�ØŸ’ÖWŠ,ûÒûV‘NdÇs)p*²ñÝûK'³ã)³ã ‰óEba¬ÿ«“´¦×ët"«fh'Ÿî;‰M'²ñŽÚ¹/Ód0If%> ä5[;Ú‡ÁØ·›ÙÜn²¹(€/ü–SeJ'±:àB´ÊßRBBBBBBBBb¢P¥�ÌQ=ÇgVâ¬;ˆ*¾; m:™ÕÉ/ê�„„„„„„„„„D6.ê|«¡:>ÇUeóQd³¹H"+!!!!!!!!q6ˆ¬™FfóRe�¾ é$6¡u’Y ‰3%²Î9(ÙVÒÌuœ‹g›ÕíTg%$$$$$$$$$Îé$V‡À*é,8ëÁ4›ÍÅ` †FF ˆ&Bȉ—Ÿ¼Öì—…pAU@AAUc†OQPP%vlìwE±ÏƒØþØ5”DšX:Æ#KÚ„ΰ Éë1Þ>û)ûWSÒâÇ9ÏI¹Fj/¡$Ž�\¡¤w$)'æ~¨d똔q»5å"³ª¢àÖ\ª‚¦*¸4ûSW4UES@Ó4EAUTÅ®Ój¬îª±ýJ¼Î;êyz=SŸrü–ÒnJL�ÈfZE3¯H@¹ÙñH­š~¾‚žþüƒD¢†$±ŸX›:+ÒÖ§ii¡ìãÛ"ý©×Kl;¯�ö-݆¦Ü×yÏ1™Ï/v“{Ûl)’["ûqò<4ÑSÄx)ÄGºí'–˜–ÀŒýæV¬ÚŸ"µ � µB;ëY®Ÿ6k]‘ݼÄY��C`sÚ|DH¿H:™M  1ž÷h9ØÌ¡æ&†‡†ˆF£™$6ŒB (JÊçxé�ûÒ·�$>ÓñL×wîÏvÍ|¹®Ÿ)ï_þêF{øç)ç�WÍã}~�_ÿê9¯�k;×9.·›ŠŠJæ7.dz}CÆû àïî" bšæ™ 5 ŸÏGUÍ$JËʤ™¹‰, „e“G!b0VG�ŸŽ>¹tMÅãqãq¹²•"ˆÿCo߃ƒD£Q,ËŠd‘`¡BX1æÛŸ~,Nªãì9í{²�:�㸎3½ƒV ÇyÄI»“¡;È"�a‹d›uì³ÿÏÄþE ;Nvåü"²3(1>;¢8‡è-¨gñ¥ËÏk]�D B!ašÓÀ² „iľ›`™X±cÂ2SþnX»†^|,ˮ™üŽH³{Ë1JsÔÙ,åüq”‡Ä'’Ȧ/ýy¾`™èd-%cf(0z^ŸÜ4Mvl›–CÇ%w©6-?2›¿r#²»L¤/ÛwgÞ²=‹3ßÙÒdÊG&Òè¼N62ž-�µlÒIkz™8óåL ‡éì8MgÇifÍ�ÇU«®M¹nÛ‰ãôõöž•º522ÂÈÈ••ÔͨO9¾vA•4=™u@á šB8Ž9¢Hl' ¡®ëx}¾”köõöâ+0©õÆÈ²À²¬äù±¿ô}�•ض–}/a‰1ç¦þÙäÃVʵ’ÇIädz¦ß;¥Û±óbdU8ˆqüÚNò›ésŒMLWWI’ñŽ+2öy)6GQrÚ§s…óe'„D£QŒhÈ�˜¦�50 ÈÆ>cû Ó00 “²Bµå˜¦‰i˜˜¦�ešX–…i™X¦…eYX–‰°–Pbõ2eLd—å8"‡´›ãpK²¨±éßE: Îç�=’A¢â†#‘|(}}Ã4�ìgOÛ'‡Í3~òö“'8røPNEÕ™¿LÒI¨r¥ÏFð2)•éä0›Š›í�ùkítGâäñÖ%öl�Øtôõö280 MÍÅh]%Ñ9'먒J�%Õ8*ŠÃP± „ãMQpt”`p”±—RRþ2îSœÆWI¹WÒ·1%k ÿݱùSRe²©÷VR{™Ä¶’ð¿�o;�]•˜£¥’Å‘5þ9{ŸL»Æ±)[=UEUPU MSQ5é·­ª±?%ñ{)1ߨÔßÙN«¨jò7sÖ Çoœö‹JHœ ";a56_"›�5§Ùeœ·7}müú¥Ãüï7Ûxüƒžx¿�_¾vˆzý4ï÷OœÐ<°?+ÙÌDó%Uã)ªÊ8£ûô´Î"ž¯ô}éÇò!ªÙÜÆS^':ÒÓ æ ê¹rºû@ú³g+ã±l2]sÓ¾Äww×9keçòÚ þêÏ¿-Íi~\*e²•“Ô*ÎYQ‚q ò�€cÒ–’‘@f·3cfܤ¥U’äqÌ)N‚L)œ©,Ò'g¥“ØLHï\³„”ÔÉaJúsËv6¶3WUTUKé_TMKÛ§Æö%‰®“ÛûäVUQ59á ¡Uä€B⬛Ù3Zê]ý7�ÀÍ,N:Á/?èçà¨MB¼n�r—}úðÀO¿ÝÊ ]#³]ãÿLŠa¦WèÙ^…¤¯l¯û3}Ϥ*:É¥s_¦|çúî$˜™ò˜í9²ª-9H|¾d¼C¶òÎôìéÏ—í÷éw(°###笕ƒAij.rÅ+�´:æügbµÉþŠý*6Ó4’ç8ÂäVd‘œ*ZLUM%Ð8”ãT3=VGKUfsµù„*ÏiD&]•MÊ¢Êfá»cË:Ç)9lÞD„ŠOEUÕd}QÕ˜*›ŒvWe@Qãê­MTEMùmUUµÞd·ÏQ”]QÔ¬6\Bâ 8e>:ÂèyŠ©VF{ºx¢9È�€òªJn^Zͼb{²áî^^ØígÏh„·ß?Íôµu4zÏì>)dG¯fá ëYÕXK±XAú[wòòóÛ9¢Ñ¸7k=ߺ 6ÿd ­FnBœÍçs"÷Î凛� góyÍä—:Ù�ðg:>žïp>¾¾ãý‘¼ÜYÒOêçÔñSŒ˜€VJmC%®Ü§œé¤±³†ãOó¯›à�©2zóùf±‰I,v} ¿A‘èÌíÉ`"NäDöõ㾄J"�@$L¬‹’ÉS™RQˆG„Ah ƒã'zŠÆ'ÙÄ0îcšXöÆÞißP””UíôJ-+>7—Á7^§yؾ†‚}ÙäuÔØd²Te7a§‘zÀ> %îÓ¿·PP”Ô(ö¤7¡û‘ ÁE÷��=:3nü_Z:«�<Ê»=qY¦–ë7~ýÅŸòâqã¢l©ªŠª©¨–ŠéT`-Ûß:>R…Mj¬Ø¹ÂÅJ ZUE¡„H*±q2+b“ E†¾-_ìþåÿÅî¥ÿÌW.w�Ýéib÷p—Î, oë÷øq×:þöîFiÏ>…8+s™82@�½´Š{VÖ0%Ñ«×Ts×U¡7:9æíaçy&Ôx35œòË×sSCÏ>üš \¥3¹æÎ»Ø°¶‡ÿ¡3�ðeEÆWûÍ@ÊŒ[yäQ… Á¸$-—¢˜íÞùÒ|Iã„9Že#̹Fâ™\%òQÃÏB½�Šg1¯ÖGðôÚû”Lò\Ø-µîó|ëÛà“$öc“ ˆ×y!ŠŠ¦«XfS4%ÏÀîØE’°‘ÉÇ[ç� qR+Ð˧R_䨡V†"&hLš5‡ÙSƒ|xbØ6GNb§$hk‚�* +ΪE*•ÝìzÕᤞœ ³‰¼Yy’13/”XhËI<tÞ1(w@ž˜ –6ˆÙ“‘H9ŸY½„}¿û�Àû‡‰¦ù¤ á2 *hª†¥ZX–ÃÕ ~+E�·I¬•Œ«¨(Š•òæ ¹?m”¯Y“� }M/±Ý¸‡KgPqÍ×ùK«@2IdÏÖ(mý¶1�7³ÒAb(*ãªÉÝj³8Ý;J¾ °± F§¼¢ ãÔvZl¦<Æ[O>Â>чP8›5·ÜȲZA:öláÙ×[ Ï\Ï7?룥‹ [9 _Bñ{ßç7»Cx/½—?¿¢ƒÿzÕËëcЬUÍ¢›6°f^5>†iÛý2ϾÖˆRÆ‚u¸±±—e¸m'[žÝN[šˆ¨hÌ¿ñæ1éÚ£>.ÿÒŸ± {;#“çPU\Žwxxâ õ÷ßGí{?àñC!ùzô[é°Î¤Ìò0ä3.7Y/bÁç¾ÈM‹Ê‰ŽôÓzh€ºEQ¶üûfZ©fÙÍ·sͬb\@ðÔv6?½�¶YÉñJš®ƒZx*Î^3Þû4ÿgË^z# m2 o¾Ÿ[—@°•m›ž`ûÉ è>¦¬¼‹;×4à3›øÝÿÜŠþ‡ÞL/m%ºæÿå¾¥¶:ýðQþùÍ:¾yË �$Ù!ö=ó(Ïïê$ª0ãê{¸óú| qð¹Çyîý6 ÕEñÌuÜùÅ+©q]ï°é±ç8. bÖ5Ì>ÇÉÆ¿ã�ËZ÷W…ÝA¸Ô' c.U6EMi“`â³êê¨³Š€“n“3~]·Ç�5ÒMÀˆµQs”®£è;•^Ì´™ L)q�eèôa�"¬T°hõt"í&“§Yœê*bªØÏÖý½XŠ_=W­žLÛë­T_;—¡7Þ 9PÈÔÅËY<­/Aº�ìâ½ý]„”B¦,¹‚Ëf–¡[£]ͼ³½¿¡ UÌeÕªeLvŒvï焾œÉí¿å͵¬ûÒBBM˜ìxü9W,ãÆk–2ÉœÜù*¯ìë¡bå½ÜVò.¿xAÍU_æ %ïðóçO²è®oqIïŒÔL¥¬¨ ­ç=^øÃNÚ#v©Š‚% †¼OïÜ«¹vîAž?BIs”+œ}-·ß¸Œj7`õs`ë3¼°¯�ªU¹r+{Õ:*Ëñïàå‹X¶¼Ž²2/ï=ÁoÿØ�¡–�k¿�jø…@†UUÅëõ‚©1œ®1VUU,5®ÔZ {wIPRmì|EÅTÌ„¯¬PDÚ€³(x|+O>¹�Óa€毿Ÿ[—UYlžÙËî§奦! Šoæ:¾p÷*¦{šG^j¥Oý?½‡/=—TdGóâ¦'ù°# ¸¨Xz+woh¤Ølâw¿ﵓénnc¸w}é=|åós‘&ñÓKdós7£Q;y±'›œ¤âóê@ ‹�þRÈàôá¢w®çÞÈNvµ¡õx7�¡z„¼,Xw Ë"[ùÕ÷v1P¸€ÛØÀšö³% ”M£ø½Çø×ú©^[Ëý³çàݽ�^æÌ®¥ÿÐV:Å¥)êïºI­üö‡¿¢Í»ˆ/>x kÚÀÖ’õÜ2«Ÿßÿü1Z‚e¬¸ó«lXÝÆ�_iK!‚…Ë>g§ûÙ£ Wpù¾Â†ÕmüäÕN K§®ùõ#œ6§qãÆ{¹|ö6¶µô³böl<)ùz=Abs¹ŒKõ9¬ÿæYV”¶t/¿ý÷Í´Œ;�,ÉÕVqccˆ­¿øWv •³ìޝ²˜ö aÑ�Ü8µ�ßþøZÍzÖo¼—5Köòè{#y+ÙùÀ[RˆÑÖÊÑÞjY=ÓËÏ’Ìi¶ñÇP{×ç¡™.¢§¶ò»mMô-¾ŒîÍ�²Ý}ßú»%óÌ÷ååú¿ã–. •Æ×ùÎÿœËð«ÿÌÏ÷&º´QŽ6µP¾èóT°-I–w>Î3'ùÚß~›šð6}ï1^šñ?X7ðO6Mâî¿þ:³ÝCìþõ÷Ø´µ�?[WÂîÍOÓÝømþf}Fó“üøƒŠE. yA“$±y*³`aY1eVM{Å#½ŠCMõJ�½F�Ë�Šb“0Ë"<<„Ù0�«ÿà#�0Q#BȲP�Òés™b¶òáN?!µ”¹KP?´“–!�I)ê‡üñÍ^ŒÒyL^4‰ ­¿ ¾šÉ”öžfGX¡:–�‚KYVÖÅ[[Þ _ŸÂ•7\É"ÿØë»Œ«¦³í¹×8)`ÎÕŸãšÅ=<½k˜ÙË/§¼ížÜÙ‰:c%Ÿ_£3zÂDÁÄTj¨Õ_æ·ÿÑʨ6�k×.ÅÜñ$B«^Á�·^˲ö'9žBôIõ»°`Òä0¯lú ]Ôpõ½w³fÉaÛ90FÌu§xãízX}5{޽J»å(gµŽ+o\ïÿ‚ÿý^?å—ÝÃÆ5Wp°ù†-o]9¿x„W³¹ù[_ä¦ÙÏò³G¶š·�?_w)uïuÐséú„]n •�±ßά_HŠn4j€æ¦Èg1MTËVfã“»’¤ÖLø[«ª‚PU,a¥¨·B!(^t3_¼r zJ08õöòø{ý1õ�˜›ÉZ³•×þë5\Ÿÿkþfi Ñ®­üâ‡�³}æ·YÔ’nóå¥ÇM�§yæX¿{SiãÅïÿ/íºŒ¯\q·.ÛÃóå_çÏ®ŸLßÖDé°ï™GÙ_q?öÐ\|áVžûþÃ<=ý»Ü·ÈV+GGnå›ß¸×Ð6~ñÿmeßµsYQ$mßù2¯¦"«¸(ö£§‡ÂP›é®IÏPU�Ÿ ïG¹]¬…Z¶ð«M+XyÙVݺ†;Ü!:Zv°õå·h Ô1gF”Ïî¥ß†[ØuôF6Ì®CoÃèäÀ¾~  £©…þ/Í¥Á½�fæpÉŒaZ¶u¢'‹°af-Ã-[ì‘zd¿ÿY „‹¿XGÓ£´  Ÿ]ûÛXsåªÕ6ü"ÞØuæÎŽ¥èK¤«RìÉl=-9@þa�º"oæ|½yz �Íæ�‰p&TN£…-?ü¶äñš(›�o&¢)„ |zÅ]»90ÐÏÞ­¬©µ�‡vÿ–ï7C($P”vZ;B4””#•Ø31˜VÐO{ûFÔÄW·Ð&±�n:Ã¥L®øˆîZ¾Qvð>'Š—0cêî¾Û6ÐÛÁÂû–P à›Ëå�n6íoƒ€Z¬Åö¨ß·h)%oïáh´‘ùfK‹n¬$ùî4Êñ¦cT,¾ÇVZ]KøÂ_ÏO”ƒÿy˜ŠËÿšÙ>[͸ô²žÛz€¾ë§qôT)óÖ×á\ ®áÒšw8‘èôíûŸÚ*-鸶V¬n«**Ø�å…c¢”H}UoÚô˜¦¶hŠ_¨¢`»9r4DeeS¦Q ŒôwÒÖÞÍP´�ò2“î–~"c�Ž^Á‚Š"Ž �"Bô÷ À`=4R]r¿JuMý�»‰P#ÏU“*žþ�Só4ï½Ø…ˆBÝʆ�¿BgXk”£­]\¶p*%{{™TàÄn?QEAœlæØà<&Ç'yY:ZÛ *§2ÅušíG†AÓ˜–¡Ë˜2ÅcÙX·•(G9û[cÏûíæØÉ.›Zƒ¾s £À1¸w+;—ÞõË÷ð_;� ½�Wþ!^+„¢(ôo£ÿ†:ÊÔ˜59ÕÂÁa@``:Ž´÷÷0ì­¥�ò»œj¿{¬ ·žjšŠaZ¨ºŽ®(˜Š’KU-TUKúÊ’œì• íSecKƒÅ'õšžç—û2Å”µr :›8iäó‹Jì�ʤËX4éEŽ¥8£Íòÿ,—  Žúi> YÉòÑ#ÌÿJLeõ4pic�j‡E€ZɼKm;Iád*<ï0$‘ýÔ*²y¾ëð2·Fçíãí­]ì™:�%i•"ØÑÅëÝK¨4L.d¢.ßÙ&K�´îàåÖ¼¢¸(œ4›ekoâ‹wüüña|ÞræÜñç\o‡ª-1  ± ÝÍ´ŒÞËœ�u.uC-líˆÄ3xñútB¡P"ÆhE)ÆëóR}ŽüårGq�S¤B�W4}9Ó‘`BiŽûì*=i½'5_þÌÑò™D–Ñ͇�§œzÝ:F(˜ì”BA6+æ°jÝJæTzÁ½È‹±{bùÍ�™QºOt¡LYÀNÑÒÑI°´³¯›`AåY¨ì•¬úÓûᥭ<ó£'éóÍåÊ›ïá³ ††8øÈwÙýi¸ÅQ‰xù“–°°øg<³¬=©XÊšjRˆl0hàó%›®ËSŒ ™œ~õßøûm±r±¢Å•Í £A5 µµ„âg¾÷—È‹ÐjªŠiY õU$#³&•:EIº�Îccþ­Î7±úl†éjë§S(¨î*¦Ì`þL‹½-tÝGÕüeÔ$¸¯~=¦‡™DÍx{¤«Ôq8PȤ²Ní�8‚-è¸<‘h4ñ~ÜŠáÆívS¶` wÌ�‘Mt�âÓS{6^óQ·h.®öÝë€ÁHg3Û·7péµTÑCp´‡]OýœÚÌB¤OoHt*öª%4·¹knsÔi Ú†_(è‰' x ¼(ʈí¯ZUKq¨Ÿá@ˆžwãçovg%yŠŠ¥{”Ÿ¿Ù3æç)óî-VìÖØ|õXÙWÊÊFP3Ž õÙ|î¹] 2…þÊgRE8b {}èÄ:Œ‚b| £(.­½…¡gùÕOš±tÜù—¬!Óü� “Xòzu5B ZHu±†ªLeê`3m'£h£TO9Kî%sYuç\VÝ¥oÿ3<²éi¦þí*|Å•\ùÀwùìÔô<NÛ1™E }<Òt˜…ÑÔ,^GEÊq>ŸN0L¨Ñ�N†=•ø 4¦|ö¯øÖª’´{4Qà‰2ŽïbxD¿35xñû¶¿¦À"XÞ¡¬ÚDOÄ&c¥IŽñÉ^±´ ·EÇ[èƒà £Q{¿ÆßÕKͬB<1¢N·ìçİ™ºò–Rf“Ñø:¸B0ÐíG›WEéH)åýì ;â¶*&Ѱ‰ËãF! (èE%¸#FC¼Ê MC6·³b«™©S1L �'ÖîÔ |ÕY€{6+!ä*¡PL@-Àë�P( nZµŠæÒ‹û‚Çã��Ü4¼/¡h(�Á9o-NEO¼Á'dí5Ó8döþÉWò¹k«iþõ/y»Ã€êky諵Ù;,%©¸ÛÛávù‡iš„¢–[(!áRàPdU±b*®†IßXU±] â}DÑÂõܹ¢�ä¢(&§þø(›ÞëOþ q·š3q/(ò¡G†HŽ�†ëx}ÅYm^÷æGÙ鹇?û¿ñ7}——rÞÄG‰'È�c â“#ù Á´æÉ)3±ÌsF`(¬à¶UÌò€ òÖ¾v~ùÆQ~ðfO·ìÑ­ÖH?¿zã4‡Bg–)'©ª^x#·¯¿††2ÝÞ_PËâesðõtÐi£å„�9—ΡHÅUò›¿ÈšYúâÐÑÜ‚Q·’ #47÷$—]Œ�è[�uP¾àrê}JpÓ—îeU�Éñcm/XJƒ×áO¹ò6eô D”Öcm/¸4‘®vLºÌ ¤ç+ý5¦x”ée•qéÚ¨íZðÿ˜ö÷ýÍ13O²/¶n¼Ãí?ÝÁpíW* W³laº Bhø¼:¡?#x§¬`ÙTÝ­ÛÆ3õniŸù¿ð*à ¥³y" IDATE�‚ÊJ”?!_9…ÚY¨øÁ=<óÃGÙÝgΊI•”h€2�…s¢ì÷°m¤Í^v?ó(ÛŽG3^·fñR|-[Ùv¨’…‹Ó•bõ fÒ½ûN„�‘&žý÷ŸñV;Ì^8—¾]ïp*l+·Ýï<ÉïÞé­Ž)µ½mê´³yèöw§K„yÊ]Ž•­ì:hÏO_í ²,de“5=v«}]wÙfÔVâÓcq;u/e•å¸FG ‰ ƒ.*«Kp© ¨^ªgÎ¥®TM«£ö5­�.z\“˜3µŒþ®n¢Š3D—EowÅÓ¨t+à�Ì¥«WÓXaáïì¦`úLjÜ à¢|ÞJ®šW†&úéî/aJ]%º¢à�6—™¥$pÆ�í;I{¤–Ù³ìA•gÒ%Ì.9MÛ©�Ñ0žÒ JTÀ[Ëœ¥è Mªæ\ÂT·®IÌ­÷â?u*¦’*×°TspÛ» Îý ‹Šl«©{=x�ú P˘¿l媎¦giÉé¦$«]ž’òÆPQÆÖ� £šª¸u5æ>_é˱(B<¦l̵§R›SVQF¼È#¿z˜Ÿþògüø§?áG?ùw~ðÃóÄΡqcÊæ�šF滛ؽÏ@EO½Ï>ÿLæÏ.Èhó¶µ ƒWOÆD»Þa÷Ñ Á°mW]*DG£©÷И?{”ƒ;c¶8ØÊΦQf/h�¶í"Vd󆯺†¯\çãÝæ>vu8›ùé-ð±pF%Ëõ~Ý 4<ÀãoÃ=WOaÞÇ“f×~‹wÝ6l\eÇ‘5†é9±�ß?»�~ ú_y–Ú[näkqe¸õþÐn¤tÅTAœn¦E]ÉÊÑ­lñ�Uû?ØÂË“7pÇût‚tì~žß7GQ·ðRÕ6|ó/íF5p˜­Ïô`¤)¢#dH÷¬ßá–¾+f(Òò•K…Í36“2›Í� ý3ß·3]ôè[lm¾‹uý5«F{8ÜÜÆpµ­lx—~î«üå¢aú;v³íÍfÖß°� í�ðû=ýª%Lž^ÁÉö4�T@óPR;�¡vîk§lÆ"¦–Œó,9+ù%\¾üC~÷ïßå9 Ð+Ypóý,ò¸`Ãý¬Øô?ø;Û•¢bÁ:îœêÊ|ÝÚ%,ä9^+¹�[+ÆÞ¦ø²;ùBû£lú_E�f¬º‡»ç¸ðqwvlbÓ?×~UZ}7Ý;€Ëoú,ûÿ^)“g†y3átò’–p¢6&1ÀTAX1ÕÒM”î "_6E‘MqÃ�'Ъk˜>w2n+Êè�Ÿ–~¢"§ŽÐ]?ƒ¥Ëf�bîkçЈ»’—…!ºz¼\1u€={¢cÇ]m{Ù]z)W®»�}Gwòn§E˜]ì,¹œ+oº ]c¤�]Û‡±„É‘Ý{©»fwÍ0Ôqˆ�$&�¥J‚§Ùñú^®¿ú¾z… ¬Žm{�}C`ù�}óWqÛ½sº8ÖÖ…áI>@W\ù'PYìÃèØÎ ûGS#<Åí°ÿ^ݽ”?½Úî4Œö=¼{ê ¬ÿæ·¹fd€Öío±cêVÝ}Á–üªíò3ÝIW¨´øÂB|ÄWëgw¼……™ÀŽ›½ UèˆG4ˆÇ�ÍS6îvpNbÊj ¬»o-›~û=þé9@«dáîaE �Ñæ•kؾé{üÓÎ*¦¯bÝç/ãÄ“�ñ»ú¿à¦Ká±ñOwqï´¤0ÿÖû9þ›'ùÁÿ²£Ô\q?w/vÙo$>±rn¦%gÕØwÐb„WÇ~)äÁv&ñBˆ·ã'kïÈûÆÑ¨‰¡h$Ý^ í>ÎãÇ#€^\Æ}WOaV2ûØÃ?C*Çó Íåó™Ïµ²‘ºñ Ëø÷=“kæRC3Óûü¿þÕ/²ª±ù–C¶gøòW7òØÃ?Ïë9ô†õ|ëføÃO_àX43¡ï:÷=ø5öìúàœ6¿oFâûÚUŸàf?ÄöŸþG®L†ù{éÌùþ�¤UÌsp–ˆ)ëØvî#¾û NA�ýZÔßÓ›(?DzICì»%"¶Ø‚°¬Ta¶Ol[–}ýØõÉO!ìÉ8±mŸ#Æ\S !H\Ëþ´Rž5Þ-aÙñ]E—|îV¦ú /·˜ "—r¿x,ØÄùñ·Yq×-GÜ,¹ãÌ=ücžØ‰•›ãÍ‘#ÔÂá‘O“60k3ì»"�ßv"hzêÞ‚z_º<«�8_í̲,¢Ñ(†Å4 ¢QÈbÄ>MÓÄ0 æÎ_ÀÞwcFl_Ó01M{Û4-LÓÀ2MLÓŒMöJNúŠ×Çôz/K¿oFÎò��˜U7åj`ÆþÂ@ÛÑÀfX±ææüKÖ�.—“ÄÚâð¼Kë¹§ÞmûOò^§1áÎ壒ÉôkeS6'2á)IÌ´¬ìD”Îñã¶f� �OÙ¥/ÊàÌw¦k¤«Â™–ÁÍw Ýl÷v~º=ÉÉ#švîV ÈçÚÖkOb¾´É¤^ÚDô7^0Û�ÿr?Gÿü^B/m‚®÷1›Yÿì·RÒ0:,­j¾ @|ýÏôAä˜å[•´dJâU|ÂÁ!)¤.ªäTݳ·Rl‰óNJÊ4´ä2³‰‡HýLÙ•Þ=hÔ^q+_¸j^´²ʇèò[Œ¹1$çrµ9_ÂgYT%ízŠ3ÃùêègyÙÚ ù]FÂU@UnjÂW6E‘u.… Ó¥Ä\œ1eÕØ2¸‰U��uÕ±À‚\¢Vâ¼Öõ +;6™½oNKæLãæúÜžUÕ5ÉÍx e>„qÜ5dz¤Ët,%3)=ƒ�±`ü”iuÌ�¿ ã*S5DÙfñg#VÙ^µgRB³©³éJK&2œNšóU†3=ßxyÊT†™\²�“¾C¶ò=Så9=ÍÌÙs$ ´¬ŒŠÊʳ^Ï**+)-+“ÖFb¬çlƒcÔH𦧏¦¸=<O²ý+Ne”Ôuí�Jk†($‰×¾…3%­’® §]Ç©É*JÊëá E³PQRÔQ§ @º ­$óœEÛTÈaãÒðsõ*fÍ�ÇÁ¦ýtvœ& f%Ž™Hn.›�ú˜�$frcÈæW:Þ=ÓÉóxQ²)›ùÞ;—úšO4„|ÕUço”�ê,„ÀívS^YÉ‚ÆE)$6Žºõ””–áïî" bšg6UÓ4|>U5“2’Ø×šýÒzH�ˆ›±�ŒWª.]Ç¥kIž#oªá°ÂÈÈ(áHÓ4J£°'%Ù³½ (Ž SÄÔUû––ã\+í˜p\3õ{²ý¦�+š)é“J,$·�“·! +)²Ò•UG½ “·œÇ禑MÙC+ír"×HÿœÔŽ ÁNËB˜–i ¬ø§‰0M„i ŠìØû¬Ø>˴ϳ °bo„½+{]Xv=³bŸØÊ¿S+K/Vi7%Ε¨pÖ\ zúŒÊ’•øÔAa‰±´ØD™qµƒÉ'UҌߕ¤Êª:|dU§²Šó˜’6'˳ձí<7!’)©«f¥º¥¦^'¾� BnúþÔcÉ{¦sO??q,mršó ’£ãÊt0U Ïv"ã¥úTÙ E·¦¢«Šý§¥~ªŠ‚¦ÆþUµë¢šòÝ¡Ì&ê°2f€6¦Î[J»)‘o\|aE-¨./eJu%E>/šªÊ_HBBâS á"IŠ—"Åg3ùoªp(RÏ©Ö9~=þ ‰óRs‘öMdÌçØÔY4Êlâ¤È=K_dÙÈGÍödã$žè�‹¶ŽšñpoŽzfY` G½`Åë$$ÂÆå¬—‰z‘üå„�¿ƒÄy¬q–Y ‰¼ˆ¨¢|2ãÈJHHHHHHHHH|è²$$&†ææf†‡åÂI¤ÄätŽï/ž>ßcÎ}ùžþ™ë˜ó™Æ;–ï÷‰o¾1¾óýÝ.;¡iºnGÐÈôç\@!¾í¬Ëéu:};%>²´›@qq1 ,�DVBâBÃðð0sæÌ‘!‘“� Á;Û瓞íPVg‹X^á³.D;‘NDs –Æô8¿çFÚÍ‹---çå>’ÈJHœ ܲ $R pΦÏó4¾CI;oLÚñ®á8?ížÙ¯9v§ {²ŸÆ„çýŸ·TÎÁ5/b;áe!%¥¾ %m�¨ŸvD‚x=ŽØÀɺ'í¦ÄÇé#+!!!qHnêw‘Ǥn‘qS|LùžèÑó‘ƒl‡å|ù¼+b2Lpú!‘ÿ5…\âZâcÄGVdûûûe)JHHH¤+ ÈÆ¼òl•=ÎÕx犳DJϘ´ˆspŠ$P-N{ƒ4&›2¸JßN¯Gci¯�Žë#+qqâ|pÄ�\óÊËËå/%!!!CréÚÔEÆ,(�¶3ûŠ«JF7�1‹ dðÿ<%-ß9ž)óƒæõv"ÞÊö2Ñ‚°y¦Ç²qIK?Æú™¢Æ:Ý Rëxî)ó¿äo#!‰¬„„„ÄÅCr³P3‘/‰ç‘Ÿ[vz®ø»¤¿ùØ÷‚d™er/ie*déJH"+!!!ñi'¬b|53Ϩ\R>ÇI ²æ–s)‹s<éKâ#�¨>rLY ‰�2ð›„ÄùÄðQv¼¾�mƒ„-Þ f/¿‘k—M>ç�qðÝ_óäà5<¸®~œ„M¼øÔk×sÝŸn`ž÷ oxl O�^ÁíWW�ã' ÑôäO9rÉ·¹¥ñ—b¤‰çŸ qí�Ë)Ì’�£—|› ñ|ŒYb+˾øÎÑÓ´4¢c0ŒPTTwUÓ/a^}ZæóÚ›ØCtëÅ;½�ò3ˆ–”rUc„�ÁНœÒB-qÔ 1by))<á˜2?m–‰%b˯*,�‘ˆg¦ ¨Éu©D|i*û ÊE³Kd(×Äz]"¶ú—‰P\vŠä1gÒsêZ0|”¯¿IÓIÛfâ«<�6ó1ž\ÅCçÃf‡xñgïQsÿ},+>›OaÐÝ|æ4R£ŸG[)‰¬„ħìÚ¼™#SoãίÕS¨C¸ó=žÿÝÓ¼3ù\3å\ÞÛ Çï§¢nò¸)ûö½Gû¤›xpý¬33V'{^k‚â޲ëµ&J>³šÙ…çêټ̻ùÌsëç´üÚÞ}™¶ÂB Ëàøö— LYÊz=g>’´KØK}æä²ÃÙù]+X±l^ ¢GØ¿gÇJW3§|œ.Û1¥ˆš…¨®œt7/Î( KQP"AÌÂ"´xI™&Ц�OEǹþÄ™™‰i�ªÙ$V˜–]æªj“1!@„¨ Šƒ{)12&òŒ‹{A¡ý5~ýÔ.­Ô®½hÑmüéÚúñé¬P2þΟ'ÓwgÝ>6ó®¯6³—ʲçmØ8•†º û^ÞÂŽC§Db»½¶1 4máÙÝ:—ÝýuøúF®öîåÅwNÅŽ½ÌëþYÜôàwxè+7QÓö»Ú�`/CÁF‹×p÷Ÿn`^à=žµ—ú ßä¡ÿö ®)iâí��饧o„Q} ü6Ü0‰ŽÝMt[©Y¬]¹–ÙÅU,¾}#w­ªäÈËO³W»Š;ú:ØÑNÝÊ+¨èï%P>‰ 5Dëkϰ׵’»¾þ|õ sܶ•£¡­¯<Éöà6<ø úÊMT·>Ï[G èý#/odÞ¾ÃÝDzàì鯤¦"ýþË©.†Þ¾2V\UÅP¿—’´×‡Fo<Ð×;@¤/ÌäU_ä¶{ÿ„ùb‡Û Êæ]ÅŠùÕcë‡VEMy˜ö=;9Üî'dÄŒ´ËfµáSûi>­2méJ–¯¸œ:­›c'lÑe4„�²Y‹™=µ�f Ç®î¡7ࢴº„H(Šîö¢†{èôGñMj ®~:¥Z€��Dúð÷ÑËj™\;� ŸE``#2 ÕåÃçQ‰†B1_JÃRÐ4À Š\¥áV¢D¦ýóYök}ÝëÃëÕÁŒµ4<^/nMÁ2íŠiE"hèn7n·Ž" L+iŠ׸òj Š:F`&¾ªr¢R¼LÆ�);f•ã´�qâÛÌé!ö¾”Ûf^~Ï7ÎÈfÞóÀ86³?À¨¾„[úNn›YT9ÆfÞµñ©6“zû úB“¹þ�¯¤�X€žÎ^ «ªð§xë©mŒ.¹›6~ƒ‡¾¸„Ñ·_fï ömæÅ£•\wßwøúÆ Ô¶¿ÆÎã@ÿ{¼±=Dã¿ÃCßü +½{yg·ÜóXvI%%‹îàË÷¬¦Úa+³çÓOo¿ÁàH—ß~÷|i5%‡?àаTd%$$(bÞçï£àÃìz÷÷ìØó®âº5Ë©õúÙóþ ¦¬ü6 …^ê&iòf*…‹îâÁ ë€^II¡‹@O½Eóùü¢2Úví"0o˪u@gö�©×½ÐÙD_áb>û™©x|^4]GOʆ:VrI0ÜÄ®c•,{p…* N¦n²�£=P˜zß1BŠZÅâÕ3h(èâÈ h¡õ¢éØ –Í,£nåꀶWv˜óYVL±YaéÌY”¾uŠÂ]~ôúÕ,Ž)Ÿ¥Åú€2Â-ÛiÒ—sÇ/}oøñT]�'ÐćÇ*Yö@,¿ÕWq×FУ{xª¥”e4Rªî©ÔOQxË?@w{ƒõki,·Ë¼¶~2úñBªÝÐ×åÇå¸?–‡Ú+ÖÐ0j�…ÆžÊx2�ȬÒ~âÐþÿõônÌ$£T oå�q] r(´Œï^pÎÙ3°™áýçßfö«hÌj3½¶ÍŒôÒ?\Iã†yýëûü!JN"ܲ™CîÅÜÝXf´ÒL.ÞFw�cW'uWÝn+ÎÔsÍ—7Ɣ髸k£ctE””ÇGÙ=þA*fUÆlTÌVŽ›ÏI,¹=f/uT�&‰¬„„€^FÝe7RwÙ�ƒGÙñüfž½Œ?½n„ž>ƒÎ­?åá7bƒe¢NoD#DÇ®­ìhî$`�"" õ•ñ™J4÷bÖ® Z £3Díg&%ïçö¢�î.ŒÚ+bé ÐçÇ*ŸEIzþü½ ”TRíãä)ú˦R[� §„ƒ!ôb/¿Ëq½1�Y>‹¦Æ|coäŽÕä�?>ÆÃ/—1ïº \7zzômæ?ŽÚ¤BÓÓˆG5èï PÓ0#a¤JÊK ·¶üìÙqІ«ÖSAˆ&€Šy•Ðñ]ESX]�4oºh?E�qšÞßü�‰G1©¹Ú¤ãÄ Õ—LMÜÃ�ÊY”ªÇûT;î�»Š†/¨›=¶#êñ�P9¯¬Sô •R#çX½ô RV®�Ç@+¢zÎrªç‚èàÈž=ì;PÈÕ—„5my‹÷Ž©¨ªŠª((¥5¨V€Ñˆ›¢Oâ¹½n•þPƒt�¸©˜]„j 2t¼ž(£½&îJ‡¤¬j¨D G LÓOÇ©^[¹TP|c^Ý ËÀ´4¼: øð裄B&^ÍÄR\h1÷�`ØÀŠF!м*`` ›Û…na)6I�«µ¨*XQ,,D$ŒI’t*Z:ù´ì·âš’½\3”ü'Ñ‹ #¦­åKß^{Ƨ GA(1_n»pJÜ6æv�Ã¥ö¼ÚÌç^/ã�˜Íìxí'üòõxU0Ñ2ØL¬0C}¥\Y �f?fÂvMÌfšYlæ`iÒfö•޵™Z±üôù¦±¬<Ã3Z�t÷—R]¥Ó·¿ Ï”+(M {ñè§è询~J’¶é^» Žÿ‘·v¢oP!Ü¢f]X~zû ©¨öÆl”m+�®²ç³¯“>ßÔ䄳¾N†|UTx/ànU2 ‰óc€¶–JÔ' ”^:‹å�SÙÝä'`꘮y¬}h³ÓZeøÐS<û�—ëÿä>fÛ¾£›6‡©ñAwÏ•5“ì†l…0"ºGO�«ÁƒÂê"úº†(­©L4øî®Êãç9ðû‰”/·�uÔ ªëxµ‹Ž.“—–ÑÝ4˜ñü\¦¦bÞjnš·šðÉ×xbóVŽ4¬"-¥ñÖopÝ´±†ý­¾"ªWx丒ÒѺ[Np@_Æm3u°ºè‹j£?„áõ&ó;ì§O«¢Ä4u7pß�K’Çìˆíºðø¼‰ò:ÞÚMaE%Ëö�sÞ?'¬^úú )¯ö°Ÿ~QŬbG>Ì f–ä Xæ0]m#Õ×Rç–…µÌ¬måTÇ0!KÃR+™µòR&iI5R� hy)÷9ûFw\¢ IDATbf(ÈP—Ÿhq=å. $"Ü”¸LBžsÎ%è^ KhTO§Ò§¤hžc²lD0UÍV^Qp{ÝŒF »M­Åe$E+*¡Ø¥‚Ã!TMËD5¡˜Z–Š#ËV ñEÑqÇê³’ƒ‰ ”²­Ä^—+©²!–öä/‘å¹.ZØ 5IÍ\T!”8·=7Šl›¹kÒf^¿1?›ùø³I›Y‘—Íc3+²ØÌ°Ãf®t›é¥viáž.åó¨È4øtÑ©bY9‘(ºÏ1è²çyk3oì8e+`« M§)�2�Rßdʽ]´�¶_Y=ðê–è³ 4À,ŸJ]±Ƈv ·´’ u€þ~(¯Š½ÞW˨,7é>Ù‰ z™§žû€>k€žÞñt Ð߇c;‰¾?ÅU¶ñÖk&QÑw‚#ƒöˆ}pï9è]Ì’iö}3�Ÿ£‡x}ó›tÄÞÆk>/^MGS˨©ŒÒË/¡Sìxn‹í‹é¢?PFM…ã:eU”Œžb×û�̸r¹Ý¹…üôítzy%¥½'hØ×Ú¾ùIÞiA¯˜DIÿ Ú±çh~™ç·ŸÂÀKaa”¾Nûþ�–mì8¥¤º "]ô¥ß?B~ü¡rÛ·¶§‹�’ITÄz<£§“ÁÒjÊ4û[9á�e b˜SûÞaOsÁØ>3pš–Sƒ¸K+(p—âU‡éï�ÚýÎðq8I@€5 â*ħ:‰¬3ÔM÷°‡ªIö‹L+ÆÐ=xT7nÝ"<:ŠD;éìê#"ìý‘`ÌßÕ 2ÐÓÈ‘�öDM,Í•èÔwn"#ª®ƒea¡¢é*ö¤¯0†PQÕ¸«ÄÜ Db’VLêŲ;�ª‚°½,3JÔ°Ò#Þf@Œ`Yf’` ó£Í¬ÙŠ‹›Øf[±+S2ñ1ÛÌý§(�³™žÎ,6s£,Õfö•Ål¦Óö崙Ѽmfɸ6úº(¬š”6˜Ž=WWƒå“¨Ö¡bòdmGé6k„#Ü‹¹à êK«¨Ð»8ÞB´½õϾ{ #0À ZEíd/`ÐýáZCeT”C~†ô" ô4[9�|öu÷RXY•1ßR‘•�¸˜ ×s͆«xãõ?ðëíÃ˜Š‚æ« nîç¸ùê© ÂÊëçòüK¿àaÜhî¯[o�‚WrIËË<þèJ+g°xÎ\J_ÙÁëû=ÐWJMbÞ�—Y«×кù þÐÄS>�Ÿ¿Šë»Ë“éŒ^ºûËçÅ1BOŸEŬ˜±®¼‚ë¯Þ«›~ÈnÝ�»l×ßzÖQvdÅ«ÿño¼®R»øs\ßX\ÁõË6óÒ¯ÈÛš­lW~Öv'h¼f%Ç7oâ?šK©™7‹ o)åÕ:ôùé+ž”¬Õ¾.Šj(×m…F©ZœP‘~?VÙBJ ÑòÎö×ÞÍô*o*¥Ò§°äÊìþð^?MÃå)¦¢v—ίfϯfóÛ¼£êh®b&Ín¤@�P`ᛄ×Iϼ^\¡NÌê B †À]�WM5£§Û9>¬ » )�T�GQðVVêîæT›=ãßS\E‰>–÷E£&ªærìÒñºÂ!pk€îÅ«� ¢j¸<.4„C4ÅÕ•˜pe P’~%îßêÂ¥E0Â!LEEEw©yDSPT Õ²¦™ˆ!«(*ªªdT…䱉çŽ(Š#ÎV®˜²çD‘�ÛÌ­›ùõö @/¨¤nîz6Ämæ óxþ¥_ðKáB÷LrØÌ«hÌf3SlW›9P–ŸÍì53ÚÌ]š Où\Ûfª!šzT4fŽ©=Ô퇊˜ÍXt#×unæù‡÷‚¦QZ¿Š›VOE×áòµ³xéÅŸò3C£dú|ö³³ÐõJVÎ|Š·~ý{K«¨_úÿ³wþqQÕùþÎOfÀ•_‚æ¨8‘`1* ‰^¡”j¥»Ò­¨MïUZS·µÝÕý¶zÛj÷j{³vÅVÌ ½i?¬ÝÐKÉWQ²!%ðÇøä—: ŒóóûÇ ?Åß©çÙc’9sÎçœó9ç¼?¯Ïû¼?ï�­"—oveðØ üÅY|ñ�’Çã/´ÛÊ^§…sg-ø…÷ûQß¿¢.Ï®¨ƒ§VäùWâ¼R@xÞž��ËåÚ-¨�»‰ÂÂBÂFÜ/TÄ�†iÿøø,Q³/~Uy= nëÿ:^Qw뉺W¢.ïû»¾þï6}¬èâ_DÝ|éi Q‹z<É‹Ïñ’uÒK)êv‰»Í‰X&»ø£¨7å¸p9ÝY®çدÛÍNˆDî+&Ñ–Ù¡uYk:®Öåíé¹Üë·˜›ðóóì¦@'ÜOttt/î=Ñx hñ|.VÀîù8'íÉ5:%Ù¸%YS‹‰ÒšRJkK¹`»ÀéÆÓˆä„B¦ < œðÀp4ÞáN¸14îgóßO0âé$†)- p~Èdß«x©É¾z”ÔýóK•u3�»·;½¶Csg‚‹8�®6�ëå ï4ßéžùK|·ÇËvÉ)ëjKSÖ¡ [—ß1#åînªÉ6µ˜Øqd†JC·¿W5V`áj \G ÿ ÿ5þ(Qow’×*/ÆOç Eï5{eERw¾Ð+=îëNpÇ)Û^攽qyd~$BÖPi`cñF‚|ƒHŽL&Ø/ø¢õ´}µhûº³OV5T‘YœIuc5}Ì´ÈièCô¸CôA/¼©½TxÝ�Áq…ÛõÆ+{gëêe¬lowrÅÇ!¼ï}U]aNÙÖu!+pG YC¥�MÅ›!bÒ°IÄ‹ïÕvÁ~ÁüâÁ_�{$—Ü#¹l*Þ„Bª¸6ÏìÉL^Z¸~ºŒåÿÑÄšyd[ÈLÞ{%‘ë¼`¦ìëlLáÉĆ\[9{³Ù²=�âª&¬6"e(ÃcI™G¨·{�œ%ϳªÈ ç³riî´Î&²ÿûy2~ùèù¼ÿr—|m2d²æï¹Ÿ¬Áì�£ �dü“3™Óš$ÚDñæõløÊÀñ:3bÕ@Âô“xú¹$t~íDZº4’Wÿޏ›4!sî‘\JkJ©j¬"Ø7˜ðÀðîï¯òuÌ}e µ5 ‹Ò™£÷ÔÆþU¤þ1‡Ù@ûŸ¿0cèe®ëç¬Ë6ðïÓç –CàêłӉÝéNâ/–J‘µ�Ø·ÓÜÜŒÅjwOá ˆe>¨ûø¸gÕj®ãDm3Nï´�Þ� º*µ ÕG9jéψÁ}ºè¹K¨:k-?ø�u�4[ˆ¤^ô Ψ¨!î~¬ålÝXFУSÑ{Š­/ÞÊçÅrÆ$=„NÕËXÞÖ=€Î~B.Þï òJßq]­^æ”m½§!+p+¹¡ydM-&¶•nÃ…ëŠDlGâ‡Å3öž±¸p±±x#¦Ó5—@2„øÔ_³à‰(®k®)Ÿ�ïob÷‰k(ÃQAΟÿ›·÷BÔs¯’¾:ƒŒµëXù‡TbmÛXúÚÊZ:¬/ñÉï)j­š†cîå—ål+þ¼CË`’fÎgþÌ© 1±%í]²Ïº\ñš×yãƒ<*Ä'MåßîuqlÇz^m]ç㸉üuÏ_ÙqdÕ�Õ€;¾zÇ‘¬Ü³òݶzŠ‹Œm_ËŠŠi�‰Ý3 ]®[Q�ÁÒ÷ó¨N¬†À5 ±.6;÷CO‹¹«Ý…H*Gî%G*ra·4rælp²]œ2ª«ÈÀ^÷ اg½w‘Í9Çþ½ßsÂÚŸÈ&)é1&Ç Ã»î¹yÇÜS{âêKj9¶“ì'#¦¸EìEÅ_­¶qõnW·–ÝÕÕÒwØàb+ȯËÔ¿«ý^»µ9e.Ñ´ßÈÂs�äÒbo!È7èªDl+�…?†ñœ‘êÆjr�ä’™ÜË-­?‹eÿ(¡^6˜¸Ä�í ã9ï½Åö�©¬þïDø|Ï`#ñ™!ü¬„ˆÿ·’çürXó·LòŽÕƒZÇ”™¿dÆh·ì5íÛÀª²9Të@p‰3ç�œÇ¢×Sîñò'™wìYù³Œ_®!#«ã+ò€{ÿÔlRÇÂÑ ¼´(MÒt|ö|Bmü›,{"€²�ÓØâóKf�¿vsÖ#ÒŒ"~@1eá¿#ÕòŸæÄóûŸ¸[qÀ˜~ÀpÀLâD%ÖeâP†ô;M@is_ÉFõôrÞ|"0‘ýÚ<2*âX4OÎ) „NL!ù!÷ôJúáZò+åè@Ur*‡OgÉkI„JRHød1‹?û’u9‰,õGo!Ø©ûn+Y{ÊirÊÀ'”±I�$ÅôÍÖŸ# #‡Ï6Ñd"îédô}/¾¯jk<ײcztU�UäÉíæ~“ª¦®8£C‡VR�á@=Bp¦R䮓?Î#ãH Þ�O¬7P’AêkÙ<·’¹-FÌ7- Ë!p :V"RîY¬—ÕŠb¹¾>­ùY½i<{³½™ó}="¸{‡bg¯ç…º“³ôã¾{ú`=w’cÕ�\p:q¹¤ø ÆÐþòN[ZO–qÚÀ¨˜û�¸‹Rúeìx;Û¿*åPíƨÛEÙk lÿÖÄ ‰?!ªßE²ñ2Gwùuzã8]é^n…'ÖÚ|{êXÏ=Úúuùîêp 1²·šæ‘5µ˜(ª,¸áÙ3ɑɈQTYÔ{¯ìÉ-¤` >d sæ&¡.ýŽÓ.q»&¦M{ɼ»ªÈÛi":åiÆ•ñÉŸW“sNǬ×^eΈ¶¼³Š<P•ÍŠå™”)㙽p6ñÊ6ýe y²æ>§GŽœOÿ‘ß=‚¹à]–¼—ƒ)ìi,ú%S�‘ýÎl02÷®ÿ«¯øé$GiàlŸ„òôs:Ž}øÙ~3X–žÎ›).röÈÐéÑOŒà\i¹ÇKH†po˜˜²¢b¬X)ùþ ¶a:†´zd‡ÇÇ‹ Ô˜K0±¢ŽŠ!bèpîU‰9¶ñ-–¾—INAM±$Œ×ªóÁ"Ž[åÜ7)Á#bÝ¢P;%�{evŽï/i?ŽÞP»—�9&"¶€ù/Ígú( »þ¹‹*Ou4«Ð<<ƒY?ŸMÒ=ä}{ê¢"ÕêИ]Ü8•Ö”v»ë]$ÞU%*�*ÅÕ>Ü{o G€kˆ‰Ü\LQ©cQ õ’áÄF0\‡šZrßy]°×IÑŠ‘HÜžY»Ó-ÂdrY'?ƒÊ[†'V‹Í}·‹:¿ï½œ~p¹š©©mÁ{`8÷GD2RÛGý9º¾H9s®Y¿·ˆíˆj0ý¬œ©9ß.ÂÊø:ï8ªÑ‰Œë0ï{·^Rוù>]5§ëzxü:⺼òz£ÑhnË�Z­¦OŸ>øùùáëë‹J¥B©Tâãヷ·7ÞÞÞ( ¼¼¼ðòòže�;SÈ¶Š‰Öì×J°_0÷Ü{I¡r‘˜.ùŽ.Q?I!NKʱø9�=®ït:Ñýd>)�Æ¡;oÀPå$`l ÃuÄM�c õy̘ŠvQlQ¢<…8})/½ÊË¿˜‚V®$4H‰ ð ÒÚ »ò©—D’4#ýý±¤<9‰G{�à‰\•<�Ì O$;T‰y5qè1�½/„¤i:”€28”@õ† %2«µý¸]Þ<9Û�"JÌeö[<2 o—ç\%:&Äâ4Qdk©�2›šQc#�ûÅ1ç•™$ê |秬Z¶˜y3SYøn0Õ7aŇ€~]_ýè#wb5ÕÓÚ­÷"c“ñ0u!zFz¼¬šÈ‘Ÿ3blð¬rá~îFÜ¿¯Š–&÷Œ.i 'pyþë쥵¥që¬Ä �"RYÉwj0(â¸"’·çžÔD�'BQÏwß•J*`h,1Á ×Ïâµ§ásJ°×îõr¹p:�Ø­I�DˆÄbÄ]„¤H"A,�ÓÑ&$E—˜ÛÊÕáI‹‘©ÄAó¹³4ZˆUˆw§íXN$ry7Ï /™{«½q5s¤ðõÖ ö+÷ôõv½VçªèjÊë^ ÄÄÞŒûY@àβµ¥môzìŒ?ÔþЫõÍÍÍ8�>hZç™ôÓ ‘t6kâNÓÊøàlçë19àÌÖWøÙÏ~Æ3/gRé°bª3Qoj”(ýÜåÊtèGGªìl>ÁŒé¼±·†€ÖIO|5(%`njjXšÀ€¶ÁXµ•µ†j‘Ÿ­¥Ö7”P…ç\J C‡3Dfãql(ÛÎAN`Ô(B,Åv8heTT`§^ÚÇê(ÃPd¢¬¨³2’˜÷Ê¡‰¤¾²œ÷×þË_›Or¤ã׫X¿Ó„L&l˜mÖΕkµbµr™Û±,ê]¬iK³©�E›ÓI�Bv‹gúy©üòÑ.Á¾Á]šlQ§¦¼5�['Cët"Sèˆ!ãxQyEeÈ#bÐ)díÇí§'î~%õû ”�-á` �‰ñ  “:q‹Þʬ†Àµ;c[gHr9±;iŸúÓã@ììÈl}¥/Bt%k>?GÜ‹‘€Ù- ]@ˆžÿ ä}žG}¿8ô!�ß©ò∠É$«(—ÐÓ (£âˆ�C;L¶4¡›6ƒ¸`%¡q¤xWPPœImU=�QSNù#ÖѺ6ql=z£4C´%½¼†Þ>Rì§±€[ÌÚ-Xl^¨ôÚsÞÉëÚ*jEž„1=g¶P9Zk³Ø"£û¯H”äuú]ÿ`*ÃAòwÔrÔ>œäè@ÀLñÖÏØ]HâLÏ`¯Û0öMàG&fq�à b)bÇDvN— ä­ù�DØš›Àî@"W‚ݶD Ø»$ÈuþŽÃ v÷Ç%R:ˆ`œXΞàÈñ#œñ £ïoµ ç1#U4w4H͇9]/Â?Ò œ6pŠèÓO�¬Ïh& ÿœíÿÚIÿ©ÿÆEg‘Þ£€õr¦/‘¨s.¨Ë­ÛíÎzKàê鸮/‚ݸ�„ìù–ó=zÇ®–Ö²N7žîÕúšðHB%åìÿâòäZŽ}ž�E,FÕfSÅ=[·Áz¢ü3ÙR”GÉèDŽg±!ÏFܼE$�Š%ì“#îrZŽmÌ`Ë)óÇ&€XX1åP|O,ú ±øìbËúlþMIÙ?wS+×’2.(¸è˜B5T©¿8RþÝ@Ú¢T¶ÇòôÏSQ®Jç¥%CˆyjÉ­ýƒ¶ð-±#ز­–€GbÑJºYB‰¯åÓ¬-ä´x3*%9 ¢‚‚�{È-­äX¼ž@¹‰òÝ_RáPóPxDĒùï²vøoxnlœ,`ýÚj%¡$Oòj—µäoËÂ$ëx ˆÞîªV cÀîœÓÝLûPÕ?ŒÉ~½w—Ä‹oK»Õ¹1rõ0°°½�RŽŒAg3pP<’è‘J8ØEêFÅåý¹[k° M&&@†¼¶ˆœ/+(®®à?§ŒD£f›¸vœN'ˆÄˆ±sÁêžfU"“#“Šp^h¦Éѵ·¥Ú… Ôv9N±«ÍNOp�K†o?:F*ÊšUøÊTøxY©8Þ€Oè úz�wÿ¾ø™Ìx+(:YEØH†�ýžã�£1Œ •„ ¦”|_ƒF1*XŽÜªÀG©ÄK.G&ƒà1“yðüV {Ë œ2µp9ïZzë‘ì¦Àm%doœCtQ\d�h“˜óå¤ý3›Uï fÊãq *ÝB½­}•Ã:%:R~“Jý»Ÿ±~ibÕ@îOz�-@¿|ÑÄ»ä°z™é€Hùõâ4€<†øÁù|±ûÿX£eù³³X<ÓÅ{›×³t/(ƒ"Hþõ’'»yÐG�gà¦ÏÉ9IÂO²ü'í¿Å¾‹µÅŠÜ»û¬°ÚÑ#QoßGäh-PyÑï¡cãöézÊ•qŒá +=‡W_P²þó|¾üÔ€9šÐ{IœûÓõr@GÊKÓ9ý¿òõò—È]!v7¾òbf. ¹CîU±ë4Ÿ¬ï$ϵÏè; Yú�cj|=[>ZA¾\ÊÁÄÿû8ü�¦+xm:ïÁy�òÈùq_à}=dÇp¹cd4zb†@1Ñè5\ìññÖ7JIÞ3ÚÇÛà tÏý޲õdîÊF –CàúØ3±ØsJ‘Iœ\p:±]háB‹§Ó‰K,Aáí‹BÜÖûÆå¸@³Ùó»Ë…Ó)CÚÏ¯Ž·rkè‚Ä�¾}9}¢Œ§R|‚Ò¯ë .±†{GG";t„²‚\öÛ] ñÂ7pF„¶‰äΧJ†��¥jÛ^v}ëÏ£cn¿EঠY�£ ;·ä­‹=‹qg#•z>rÀ ðö||\.×îî ~{çÛ˜ZLÌŠžuÝ ŒçŒ¬)\C�o¿xðwìE©ùú þ°MÉ”g§‘p(J‰óÉò¾üŒ,ã(-M&ôj nÈaéÜU»ˆôyúKN’pVeû²ù$#“ƒ¢Xf¿ñKäwdý—}0—ÅÛÔL{)IÝ„x-X� œØlV¬V;$ø(½Ý“!ÜvÜMv¢¦¦†ÀÀ@¡>®êš‹D¢ñ@3Ðâù\¬€ÝóqNÚÓ�tÊirÃ:Ðjo5¦ÆsÆë*d|d>wôÅ|èwüOP6™Ÿ§±pµ ³ ”þCˆŒz„…/Ç]…ˆ5c40|µƒ-”äÄ+±r ºqÉ<]šÇ+_~Ïçfb¾W‹~Jl‡´\·9µeäå‘ùe-ʨ‚C$p³] bdr9N»§ÃAKK R±/…ìÆÎ^# p-ý/Á#+p ¹aB6< ã9#U U×­ÌÖ²ZÓpÝÉh"I�¸N³H9jÉ_·ŠÌz5úçæw ¸B5‹îéùü¬n™û¶�y$ŽÐ‡î!k.ÝÈŠµÅø MdÎÌ8”‚}¸%ˆ‘{ÉqX.`·Û°ŠDÈ2¡Z."ÿídÞ³„eO„ •! Ùë.dÃÙúÃVJkK©j¨ºæ4\U Um)½ÂÃ…+w%H´¤¤}LÊõ(K©#éåå$Ý�Õ¤œø;>ž(Ü.·‘D†�R¯—q-ÈáÇàª<²·¶ëƒÐxkˆ ‰`Sñ¦k./³8€¨�(4ÞÂÈG�»½—!“Üú� dn%7t�ikš¤Ó�§É=’ÛÈòËóEéT7Vã-õ¾ê2î$dr9^2÷ˆ‡üwRYQÐ9O«Xªå§XâÎ’#Y�;µ?w# ×xk˜9 €Ü#¹äɽ*û͉oøiäOo¬€€€€€ oÍ+ľ˜ÁÇ~Üéóáû7^ÄÞ8!k%ïOϰt§õú]e ¯Ô @ÍæE¤®4\·¢k>¿å9 ¬J]DV-P¾Ž—æ¯Ãèî÷["dî ¼¯“˜]¹ge¯€U5T±rÏÊ6;-rÚ%fl¸ùÜRo¤DŽ\&¿»ëàjÄæwŸ±­Ô@à#‹I›©ÿñìЖü1­DxÖzâ¦ä¯Ö‡èQHl*ÞDUc+÷®$< œ`¿`´}µm3vU7V·e:hØ¥�*+ ЅИd¦ø¹ó«t -‹Ä8ŃHþãÒ;"´À\žEúß²1ZÔ蟞Oêø@ÀDþû+X¿ûV‰ Ý”9Ì�¦Cé¨!omöÕV”áO0wn"ÚÒu¼ñ�rj%KYhžÃ¿ ,®x‚Œyzh(fCúòNº§Ÿ;�_>§Gã0°jî|¦†PYt SM=²±sXüld÷ÙmšËذdy'k±úÆ2ã7sˆ Ìed¥g�}Ä 2%Ú‡S™û¸¥ÃÀªÙ[�=$Ã𵌔?'´—ut‹WÂü?§P±ìyò§ 9ZÀ©³54÷KdþÂ$´ò»û9¸i±ÜxÁ~ÁäÉ¥¨²ˆÒÚÒ6±ÚQ!QÄ‹ÿÑ…Ø~ÊŸ ´¼43ºmº[�ËUZ1Ÿþ¥œ‘¿J&üfNÿã¬b{úVT?›Å8aM�›‚ãTÙÆ~$L†B¨Ž†U¡F)s‹®Ø3ˆ}ñ™´@ IDATN½¡ÊølEòg–‘>Nƒµ2‹×^y—ìðW‰)YEÆ‘(^K•PK>i/§±ax:ÓÖ“Qªãµwf ÅȆE‹Ù°;ŽEñ3˜5¾€õý±lZ(5›7´Ö&ùëÒ(ðŸÏ²—#Q¶”±nñ22†¦±0FŽ2JÎOgÉ+©ÈMÙ¼þÒò§F’à×�Ž-)G¹t é!6Šß]È[Ÿæó’ž’ÒÈVLgÉêX4æb2¹�5u¸ (£Ìö;–eD¢t(é®$6J~€7_y•P*Èü‹É:�ÈüÑw·’½©3 j¼5$G&· +­-¥ÅÖBuc5A¾Ax˼ '<0üÚ¬q+i9j¦§ŽCpz;+³¤L{!žK'³Sšùug0¡7•6"™—uÒ[3£ÓDé—[È=Ü€J7™ä)anAm9ÅÞÍ[ùþœœR£Êãcü‘:O±uÅG’kðõ“ôó$É£4mÛ�µƒSJPÌ4÷6WslMÅd®ÛA…ÃEKƒ »BƒŸ—Éà‡™ýˆÐèÜàÖž–úsœo±ãt¹É|éßßÙ�˜Ìu–CßÖ4æ>úvS¾dàhHøQ½ uÖðMævŽ´¸=ˆ.‡…úÆ`çME'®§,g»Ž6 6‰¤‡†¹íjóqvg}É�z�8Á/| S' FØÏ”°mË.N^p!’1:)‰è@–ƒ[€À-c)ùì ²†¾É²i7'�¬ÃéBÒͼîN§óÆîø¤�"Ë(¦Ç¸5�<$ŽØ™—6¡ÞWF@ìBå€<–9oG‚7ÈYÈ{QžehÑi}0œ3AOÂe””¨ˆú­ÇËê­cÂ(Kƒ@€~œÖ=™�_Šê�n„,ÃÇ“"äDŽ�D¶¶ŒJ«Ãˆy)Ö­G”‘$Œ–“¶ÏÉšˆ˜ÈËæ/<:Æ“»=€€þ6Jêm€ do:o ã�cÜàq7|_¢ŒxUÎJ²êÃ(n¤±á MAñ<5% J¿XÇ¥uP³šd2‚¢Ÿ$é~8«Øµ!‹R“‰:Ÿøv�¬ó0YÛ �"ªêÔ„ µqªô ÁI³˜Jdß¶#!wÕZŒÌgÖØËûw-¥ÛÙZ=ŒésÇáï¬"÷ý�ø²ì%’uRªödñ½:‰Ÿ?5©å0™Ë¢0lãü,´¸´<öó§.ò†VíÙB‘z*³»ns5ÞKU$Éó" †Ó85�§Fxvh/—ãŽO)4ž¡Þªfì“ÏÔïeÍ'MD�jdoA5vú3fúSDû�½ÖÀæ/öQï�`wJÑNJfr˜ ìUnÚFÑyR»©n2OMÒº½? ¥d}’K•—µÚ»“6Ϲ©8‹¬oêpÈDØéÏØÇ“®úZü¨tZóy¬2Ô�þ(DVêkj©«W0@#ÂTQ‰µï=ú¶:Ž�°04•ÈF}åIª›àtà’k¨ B%ç9Y~“Í ©ï!\«Fæ:Ëáï~ ®ÅA}~> 'p„ž¡~€«ž²Âbª››1K‡×î‘u˜Ê)4œ¤‡”€ˆ±<0@ß°ù1ƒ½/pÖÜ@ƒ=˜±�"Pت1ü«� ¸l.dƒbH„W«Ëáð6Öîñâ‘éñ ¼Üˆq cÿã9Æz¾ž)ø„¯íc*Ki._Õ áéÔú;«ÙùÑßùº|.ÿ>\Jõ·9Ô<ÆÏŸEj9Âçï}MшTâL|ûù7Hf2w�Gõ¸p—K†bÄT(,¼ÁW\NÜÂ�‰»‰÷˜Xäž´k³êr¹(üÖ€·�7¾^N%!DjÕÐx|\ûŽÍf¬ Ÿ"O‰ÆÛF³ù<æf*Ÿv!'÷V¶{¶¬Û@~… $`®kFùè%w‚É⃮ÃÄ¡>*š«Íñ+óˆâÎÔ|þ:¿ýÇ1†üÇ›¼øøiÚ�UåƒÊb£ æ†z o¦’×ÚÃsØ��62@‰ª³ðx):Äí7k9ÅÞÍÛ)n©ÝŽjÄ£<7…½˜Oÿz͈k—¡Ò;ݸ_*t§®Iͳ3&£rV±==‹ÂûÈRþXU§²�>1»³GVÌ„gg3áäVÒvt}ôŸô ÚmË9Ð÷%’Ç|ÊGGMпší;팛9›04íÿ”5_öT¤ÇÀû<<i@ï.Eã™zƒ&à/&|¨�W�Né ;ƒ'ƒÅ‚]ªå¾�Í8a‡p Û ?]C®© Y¿H&=O˜_§*lh;m“åÞF-½þo?ƒ}ðlf<¬ nÇßø¸ÀHôT-¨4¨vñMíã<;7Ù݈º-…Ÿ‹oâ,’HÝ‚w}.FmÚæ&ìƒ'1cŒ…ý0™ïäq`Œ–hœÚ³�ª°'™=)ÎìbõÁ:OK_EÑž:žv uKE1‡š,絩½²k! ðcÂjµ#VhPˆÝ"ÇÏGJCs |@$ê >D´~sž¯¦Æªf¨®2œ˜Œ‡¨¨VsïγUœ•àþð~ˆ]-œ©lÄæ™¨ai0˜ÑƆwöÈŠÔèbâÐ�9@NYÇšøá{#"Ý$Bå8ÎíçëoöS4†8­ô�›Àý^VʾÚÈÁ8L‚ãD Gä�üð $ÎN:ƒÅ ^!õ aØ` Ê+¶l*$§,�¸g‚�õçP G)@:­7[NVÃðP‚&Îbv»Ã&V¢ðŽpÄÒŸÀý™üßöfªÁŒO¼Q·RïÎ@ÔƒgÈårú€ž2gÊ‹i·Úÿë;ë§Dn©ÇÜ~1µÈðQöAé#£©±©ÍÓj=[�I@å‡iä(æ²ì-=JÀ°2• —܉�¢S‡ fÍ Íø(/­.'/`ùƒîÌ r¥†¦íÐl6cmõ“65Ó¤P£BƒR@âo–“¢íê .¾cíRUÞVJCŸdöƒ°W‘›‘ÅÞ°ÙÄ÷šÎ@øìkï`ÝÍÎhÿÐ�nO�ØŸ`uuö«/N¢D£’"•{ãë§@¡�b·Z ÊÈ©#¹®aíšµü}ßY°˜hlwcž�Ä„¡½‹$Óô§åh)§¬€µŠÃ'°Xí@ «7*y»Ö¾ÅúoQ(dX, ?#Ä©³˜÷‹Ù<tœÍ[ 4т傽Íÿ½íÙFêÙæFTy(aZ÷yjú*i±Z°ˆȤî� ï b{5§ªMÞºŽ5kX›Y‚…·¡Q¨Qœ)äÓ>âÓ̽T\hÁbu7˜Uuvú‡z‚GújØê\û£Õ:ØûñGdí(Ä(Õ¢Ô±Þ¯ìZ\/o^ÍV£ Ä®©çˆÓ"q»‹F$‘ r9qzÄkgEâ^bi¶`¿pŽãå‡)/;B�E„Ãæ~þžj¼šNRòÃ1NÕXPà#º¸Œ^a?‹ÉìKP°Û›$ÑÒ×už3Íîr¤} ôr po V«;×�Ä?”>5lÍÍgÿáF4º!ôéh#Gÿo#è{Euu�ò=ñÒ�#ÄÓgU÷ï‹åx9VÀZÍÑSMXl]ÚK»7îÁócT@sMçÏ �šÆÌÔÿâßW³5Û@Óõ“o?NÏBV-�¡VÉÛý×kXˆž(Åwä¸3 X�»É¯Ö¡¡B¥£ro.e-@ƒ�5¯.e‹ÑŒÙÜŒ:8%`­Ì!¯´s‹Í-8Å`3Ûº´á:ôMý«Ø-˜Íeäìk"2JwǸ�FƒF£AÙê,-Ï#¯ÀJqa1 ×"×a¥ ×S¾£†¼÷ÓÈ*·ÞÑ–éÔ©:Lû7²&c kÞßÊa»…&“çÙ’10HðÈ^F\N;öO Hä>i;"D ¢StE²þâŽéÅU)K‘ûGñä¬ \�!kÒð)<^½™mkÒ‘ú†2¸__|U*À…¼…3V c“ž%ÜÏ›ú¯l(| Wù`kT°‚�÷ß‹¦¸“s8 /‹{›©ÏtÞæÚ»îÝv›¤âžºP*TݽÍdìÏžEßå�L{²ØÑÍìç"Q9O±uåW=xƒíàµ]#픟óRý)>Ì¡®¡ðþg˜1ÖÿúÞw–SìÝ–K© ¤Ø±8U„'<έ0ìEàÆ!‰¹œm—ËéB$#ö<Žm�¤‹6�¬H$BêDXH7Ÿw÷Ýß³ÉÄ™s¬<ÃàûÃ<^Ëž½s—2¢vÝ�³ÇÍEíÛö¹—)Ƀ0UVb<ù=Û‰MÏ=^×PQ�)ªfLb{!R]�Ônå«2�*0¨¯¥²½Nì5ûøçe¨Ç?EÊpÏr¹…O(Ú` Âø0úÎbr‚òN•$êAȶZ]‡ËÙ!‹ÁuŠ�•èHùUi«3÷c@HÌó/� &ÎbŽ1�´yÙ˜Q¢{tó#4ÀT¶¥/fîN �Cyú™8Ê2ÒX5| Ó£ô�ösϦò«6ï¨ýŒù”½³†…sÝþÔÐøùÌ�‘Õäpu€Ï-µkòÒIM¾£Hý­9ùÜ|âÓ3X8Ûí± ˆJfîà;<¾U¢@›0ƒd]�dï¢ !Û~j|OQÝþ*0�8Eƒ:_À„�Ú“§h"•ý§êÔøûKÛªE*¶{<|=ø?\—º]Á 4R\;Ž R,Gw‘[Σ£ZÅS¥9¹Ô žÜ;O`C¦¾˜>g ë)¶¯Ûư1î²´ƒ|{°ŽÉ�hÑ4•²·ÒíÃR¨ÝÅš6?ýQ´ ;ue‡1ùëñ«P V°¯»m®ÙAtzâÒ TQZlB?F ¥ä@ôÃáXš-(úöw¸¨(åx“�§[û÷—STQaÁØk�T4�À^…á›z´†>f a~&ÒKÎ`§upÛ^‹îU,Å[²0z’?õ”[_Ìöo�˜´áP”ÅÖløÊ-4ŠÃ˜<5ºí©>¼i ‡GÍæÑAÐôÍ:2Ifƈ¬û¤Š�Z_LÕ§°…áO¦ÓUxÇ>Ë£Á†¶ß- UÔùŒã©G‚1~±C³…݃ãy|l0BÀÄ�Œ™\†£Å‚Ý¥B*rÐlq õòF‚‘È…Ýî~åíh±âð(E/¢êzš*T'æêSœWd€¯ë¹JÎHÐ/e??\ûËiº€[ÈŠ¢þ|="Ýdž hÝП°HÿøtF_%Š{&ðìÃa4e²Ép»ÅDãy)e#ó�æÉ©Šžß%)"yì±Sd~¶š¼¼qIû3njG`#UåÅ}â™0´ç䣂òM¬ÝmÇå’4&‰Ç=±ôþc“ˆÚœÅêt;"—7¡§íøE¯ËdÛ{é¸D6èÎc�»ctc“x`óþ¶ÊNEû6? 4D'Åsfóþv@�Ëá…vâã¨ÕýcP–źsýÑÜGlÄa¾ùr/a)ãÐ>8‰þŸü�•GÕ¨ƒé§qawR g.×îE*;jb ëð4RUv ÷×¢;ìFÊ+ƒˆþi‡ÌêH&? Ø“¹¢žL˜ÜÎáÍ«ÙuXÏÈK6R°ûž0™àêí¬Ü “SEs4‹Õ‡ª X V_Â&3#Yï8eµsè„/úéI„«,ÔUÛ¸ó‘ø¨PYÏc:s\\}ûÈPùzÓTšÓMbDRRO$§Ø/˜àæST= ¸pÉúâïro9-ÇJ)9%Æåt"ò %¬5\Ы?¾Õ”p\*Å;8‚ˆP/Ì'‹8PaÁakÁvá,…yUˆ”ƒ£DØZö}¿›GDØírŒC€¸gï-€OL»¿d‹KŠËiGx?;¼Úrœ?ÍÑ^ sŽ o/5Sý¹”ê¾�?o%ýœóà’àõ�»;¦e»vQ٬’¹Žï«GîÚqw8qw‘:~Úë]‹H¸Ï®7R-ÃT°· ª½ÃY_ÌÖM…ÔùhPY먷Ø©?ç@Õ–1A b;vÏøƒÆ¦¦îÍÞÜ¿Ö:š”#Izj3žIãÎ<ŒNáÒÜ5vM¦¢�74Ÿ­¥öL#6¡Jn‚˜oÿâÄåêDà&6»wë‰'ÌæçÂõ¸î(ˆœ:�ÆmÛY—R/;vü‰L˜Œ¿TAüƒ¥lýG&,ò8 “ræ÷–ïÓ²ww&[�ø¢h’"RÙ.Ùùrõ¤tÅvNíÉd*N öðq‹…+s7uÑå¾ýðjâÖ^†»ÇUÒqBqè(b…«/pS-Þ]Z pµ¯ÈÚúŽ=…|û-Æ »Ãµº‘HDEE#FŒì¦ÀU]ók -"¨nÍÝ›~òäIáb Ü2„Ž‚�¸»p £»n!Bh�€€€€€€ÀUÓq°×¥0™LBe BV@@@@@@àÇCo=²wK̰ÀÍE-¸jzë‘„¬€€€€€€À� !FV@²·%‚GVàVrGÇÈ WX@@àŽÂåruúôfYwët]~©m.÷w×/÷ûµü{¹e½Y÷j¾÷´LqB{+pkï‹;ZÈ ³ˆ[àN£u6%�OÇ¢§™½nÖ£ùÄ‘Äj•?êöV°›w'7C‡ ¡·-õìNÿ-óþg Ùûk° "p—!Y�›…Äᣥ,œ=ƒ3f0cæ\­ÌÆØr½Ê7�6sYµ·w5?z‰'~ö:Ù�Σ‚Ìÿ÷ë� ·‘€@GäCY°ì/üþQŽÿóÌ]°Œ ;�˜BÝBV@@à:bÚ±‚´!LÿÓ:Ö­[ǺåóU·�e—]ŸHôÌY¾˜Ä€Û½¦DhT|öq>æ.¿c£º•³ê“xáÕ•¤ÍÑs>ëuV|y»O>`%ïOϰtç ð1WÈ+u[—šÍ‹H]i¸nE×|~}Ëãè:^š¿£Ð1éaB�›DmU ª°iD¶æ÷Ó‘üë7�g�¹Œ¬ô ²�˜A¦Dûp*sסtX5{ ²‡d¾–ño1FþÅÒŸ�ô(äl^ÿ��ño'Rò›ÏÐþi)I&ò×½Ãú¼“X%*tSæ0wš%& ­bý®cX%rÔáÉÌ��@¨¨ÌaÅòO8Т$ <‘QÍ(•΢‰e�öŸ’¶}eéËÆh‘Hƒþ©_2k| òZít2^p[û÷!ä,yžÝ!Éh* Tœ©Ç:p* ^Ltﻋ\UÇ%£ûæ6”êI ÷¬Ð!Ñ\šÉŠŒ\޶\ñ@âþó—Ì­¡æóE¼~d ”ðÝÉêû%’ú�™œíÅTV5òøN ….õ ¹/™9?OèæXnáW±/›-ÿÌæ;iOè”B•ô$6¿ûŒmֹą+ |d1i¡®!+ pY´£c�ýio(’˜EäÐ@”~�z!Ãi|é=�%«cј‹Y³x†¯$u¸ (£Üþ;–eD¢,_ÇÎwŠ(sD¢“€¹ÈÀ±á1,ðƒϾL;W‘qø^Kÿ=¡–|VüÎ]VÊÙ5¤Âü?/"Ra"oùbÒ²t,{BCÞë95ê5ÒŸÖb3d°ø-Ñ2À½ÿ2›gÿŽ2Ö­ÈBþÌ2ÒÇi°VfñúïW“þ{":ëÍÈ�KÅ”‘ñ—×—HY¯,fÍ®^}èâÙ~D^$?SÌâ÷·P±4™PIÇ_+ÈZ“…ë±ådÄk0ï^ÆÜ÷³ˆ�šA€êK+Yö*ÉÊ22^|�Œ¢,{%eIsßËÁøÐ vgôP¡Â�*p{á0Q¶3‹�_RÓ7šÄ§—0+BÃ�Ö'3—·wžA�þéù¤ŽLä¿¿‚õ»Ouî´;jÈ[›Æ†}õ€eøÌ�›ˆ¶toü£œZÉRšç°Ào‹+ž cžŠÙ�¾†¼“V@NàØéüò9=‡�Us·à35„Ê¢c˜jê‘��Ãâg#¹¤¾ªòÌô«vÔ W1Z ¨¯¡¼;Ÿ[Z`j1±÷ø^Ö®%}O:¯d¿Â+Ù¯°rÏJÖ®aïñ½˜Z„9™î,äá3XòûŸ/ óí_1cÆ\§gQÖ8Œ‹ˆžëöÏ*#‰%£dŸÑ½±D͈h�QK´Ë€á8€Cá1tcc;,+eûʈ�s{ýbyá­7™a¥x_1‰T qu˜¾7Pã8F‰Qƒ>F‹Pê‰Ðáà%j"b<û?i È2Џ·•‡Ä3à%¥îW€=æFw9C �„¢Ù—SeÆîW4㦓ä“Íú[ÐVp()KßcÁD÷þ•Ãu„4Öâ^K„\ƒÞ�ÚWÆ�‘îã@m®Ç„•â}%vª‡{Ýõ ܦWÈ­ž À´s=Ÿ”j˜ôë7Y¾x‰w ˆÅQÆg+²�O[Bú_ÓYþ»XŽ­}—쳞Nû‘(¥g�±ìiä_§±¡¬ëÉ(Õ±ð�tÒßYŒ¾b=v›áþÌ@ÈO±ì¹È;±’¿.�ÿY,KO'ýí9 .J'c¯ÙÝ™w”Qr>�¯,eÙ“ðÚ¾…ü†KôU–wô3Öìð!eY:ËßZ@ÄÙ2j7âøînªGÖÔbbÇ‘*»�©n¬Æ… ã9#[ØŠ>DϤa“Ðx ó3 Ü(‡Æ‘2/ŽÀ\UL·«Xš&gù"5æ†ó|÷f*y­ÞG‡ ùh“ÛH¡DÕªT%:b£¬¬ù¶‚” #ùÆ!ÄÍíØï¶anq òioÎäÞJÀŒ¹ÙÆÉMÿÍóÛ< °Ã†M@³ÃL“Ù‡�¶b4¨;=vöo6cóVvÎJ4ÞvÌfs·çÜæ¡‰ñõQµ-—y{Ólé>þͽI ‰?‹'çíõäG'w(ÈJÅîõ|°½à²7QåÒz¦¸dòö†\ 2¹ç›DÞ^?Í6Œ“ºÕ³?§»ÚŸf îS�ÛMü|^�¿ÃOÒÓyžÞ¡ó; “âÒ&Ôûʈ�ãî´Ëc™óv$xƒœ…¼îÇ_‹Nëƒáœ zòQ:Ê()Qõ[O‡Ý[Ç„Q*–81~œ»£�_Šê?®ky¦²2j‡=‚ûT•ÄŽ�$£üŸ d¯œC5‡ØT¼‰»{ˆvx@8Á~Áhûj ò j²ÆsFªª(­-ÅPiàPÍ!¦ENã¾Àû‹%pc¦b_1桱è<QIÒ´vüé8FÇ$|úô'ñ7ËIÑv5ˆÅ•¦7 ó‡C�” ‹c®Ð6@†Ò[BScS›Ñ¶ž­À¤@é+cГo²ôÑ.�C‡•†ÙÒÖí¤¾¡UPvÁO‰¬¥¾Ã@,¦f >J%˜Ý¼MR·ØÚ©.'�ÍíÇÔÜÔŒ�¢{ßQ›�kh)÷ÿ–õÿ(#FìYZ•ͪ�Nó‡ÿ!)DµY,þmù\ J_Ú§–±äQ¡“, ðã7Ÿf¬ Ÿ.�gÍæó˜›mÝtÚS1[Öm ¿Â0×5£|ôÒ6ÚdñAçÓ¾ÄGåCsµÙc³dÈ»1W5Ÿ¿Îoÿq €!ÿñ&/\cyæf2¥²½3®òAu åÝ Ü”ÐC¥� E°Ø-ù1oÜ<žÕ?Kü°x´}µx˼ñ–y£í«%~X<ÏêŸeÞ¸yùqÁ~� Ezôâ Ü.wfðÖšlw(@Kù_aÒ†¡•k‰‰°R�[숎òÞO#«¼‡»ÃÇuþ;>ù—]´¾‹�AŽ.JGåÞ\ÊZ€k^]ÊçFˆAÝž\OÊ/+_g°êë �hÑÞSKñ¾ ·ÉÜŸC~eYBôD)¾#¯Àý2ßjÜM~µý9u_ìg<¯ù[Œäèœ ìdAVÀj$ÿûz†„ë.SkJôO>M@a&yg=‹šM˜¥þ„ö•fŠ¿Ê§ÂjÅf�‹¤w—€]wâz9‘£#¨ÙOç"> IDATÝM=üøðS"·4wî<·ÈðQöAé#ótÚië´×˜­>L#Gñ¯½µŒeÿ»ŒÔQ>—µ5E3¦æö%Í Íîú%œ¼€åË—³|ùrL¼æòd 6‹¹=°©ž¦k(ïnà†{d •6oD„ˆIÃ&?¬wï@‚ý‚ùŃ¿ ÷H.¹GrÙT¼ …TñãöÌVå“u@I”ÞX›�摵eåµ4YmØ$†FÆñ“ä©èƒÝÝ«šÍ ™÷�zæ¯^Dœ§pã'/±ð³ Ä}â忽€þR¯D[Œä|¸ž-eT4Z‘+•ÈŒ™I´nµžÌcÃÇYä•TR ‰düOŸ&e\(ò¶ã¨e¢uüRsª4÷H.¥5¥T5VìLx`x÷�™œ%ϳªÈ ç³ri’g•‰ìÿ~žŒ@>z>ï¿wÉø1“!“ŒOs8Xy†&›uHqOÍbFL`›½:”Ľ°óëy÷7ŸPg±#‘ù22‘ßÌI@hž›O|úÎnÂ&áÿÀ4æîáh%:b¨ãõ gþ¯.¾Û4g1çø ÒæÍÀŒÝ£s˜!GI*sN¬"í7©X@pÓ_tpŠ&Ã_^#5WÃÀˆôáp¼‡}§ü*‰´U‹™û1 $æùHÐ1?aJî*/ØE`ÿ!DEè ¡ÝC6ÔFæk/QVÛ„<â9LìÅ“¢‰cú£ÛøíÇ >8‘©÷ý‰ô—æ¢êJÌ)$Ncݲ,~9¦‹ôî:í¨Gš+ǧ2·‡z¸³qÐÒpžÆæ ØNœ.K½éÓ¯/*™§q¬:Ê)k?t÷x˜Ø8^~³j0÷ò"/n>!z¢ËÈ+0¡§ië<'ŒP¡³ê¨ü2—²É)èlÖ¼š�ì…%èÌͨÃCPÖÊòJ›1û¹m‘\ 6³í"»¦�hbý¿Šybh$Js9ûšˆ|F\"E¢\‰FÞnÇš®±¼Àá:Ôÿ̧ÀGœŸ‰¼ÝÅ4;â®þø!{m˜ZLl-u¡]‰ˆíHü°xZl-|sâ6o$Ø/øG3[öåzþ^‡¾WBÖŠqó¼µ[Ô§æ²äÅP” ¥†²]ÉøãÔ.~•Ä·—I,ƒ£C‰•¸9PCqQHÀÙ‹Áe/cõW6F<:�äa2Lû³ùûÎY¦Ð’þ|$òªlÞx-ƒbK‘N!AÙLya[þ\L¥åMÅ»…œX,ºi¹<ÿºç¯T7V·÷«¨j¬¢´¦”yÎëAà�øä÷™’HÔ¸½‘£$½8ê³9¬øóÊúÅ�üŸ)8*ÈÛ˜ÉïØ ö{û™)^ó:D>s•ZVKâ ¯’Øãï:’¾IÒE?D2gõ²‹—¦¾Çg©Ï]Ïüµ­=Œ@bg.!væEªý³‹Ð?Û�=šÄ¢¿&µ öì?n RH.Þ¿|h ßJêæ"IùŸtR:,JòÜï2íTæÿgò%«IûìrºžmèãKùøñ6SOÂü¿�Ðq}†g?I¬ëp®‰¯­k¯ï~‰,}/ñ²õpçâÄr¾žF«ouúyÉÙ[8îg«k`@ *‰ÛÞ´9²]ÍT+höE'ˆX�[Å¥:Ïg1ǘFÚ¼ì�v 0•mé‹™ûÿÙ;ÿ¸¨ª„ÿ¿ç§3âŒÊ�æˆ2RLÅh‚æè”Q›¸+íª¹iOÒ*¸néné¶Úöhíb»â®XO¸ßÄ{6lÅ2kKÌÐj¨ pÔˆšƒÂÀ0?¿ÌðK¡ÐÔÌîÛ×øš{/sî½çœ{Îç|îùñ®†°èfÝkÂ’—ƘUÌ�7BÎJ2¿Nç·�]¹äçeaùûF–fúgˆJÊ"+AÞ­ÛÖùp�ፒ>)›ÜGÒ)PÃ8)‘È#à¼è×'Ù~»iíîv†_�ˆíà'±?ÁzÊJ}s=%GJH3¤õû· ûóyvs1–.”£&3÷× 1)‹Y½p•ñY<¿Ô„¨Ùº˜Å¯:I}2—YŠb6þo!¥G›kÆpûÿ†yã4`-`ñ£…h~žELe;5¡ŽM#ëá4ì/ÌãéwÛðz Y|¯•¬ç—óI>Ï”p°±Ô:¦g’q—¿3¶ýÃ�¬{?†‡V¦Âî\VfYi…3é– öžJæ�3KxbK)¦¥&À‡Wt ºˆF*>¬Ä™`Dþu9åÕj¢"¡¦ p”‘“¹†ý£2Xÿ¸ßá«Ùº˜‡·»øÉÿüaÕ�xƒLÜqo ‰r`RºØCØ£¢'æm¯ðY‹†äße“1. çǑ½4‡ý[¶až”A$àõöSƶX)Ù¾“Šn@Šúú©¤Ý>ÕWo±¾ÈA|t‡«›h:º;æ�«:'ït±ÝéȽæ©P×4Äü©�”)Jœ•åXD‘èBk¨¨Ê#óñ](g­ Lµdc×ÊEü³v2�fJ©v@ä”Ù¤ÝæwçŒ1:Êjåè@]1Å5üÔpu3ÙàJ'{¡em)û­‘Ä�&VýÁÈT¯¯×çFEbd2IÏŽî6ÚÜb‚ÔÜWdAh´CñÔÖckr¢"ˆE"ÀÉ×_ÖÐ$ %Z§æjÔ“™�Ëú?M¥ñír´Ñ:Â&LBÿe%–ΖV0#c´4}jÆêû'fËÇ 8¬0b§ÄiÙO¥=pOŸÖà2žÉ#4èGG�½”¼•9¼VJÅq9ú$‰1ä+域Á«�DR|7/Yc"%A MT;ŸÔrSõf!Uê»X°8‹¬ÌT"Žlãõ ˆ¥pÒÊÉÓ™÷ÀÜ®æóRó9/ì?oø¼«BTÇ¢À?>ªªúh¹�dÌh1–ò œ8©ü¸×(=#;¬¤ "¬æÀTKöJÌGœ ŠO\´½¬ÛÖðT^!Åû-´hIžd$J öÏÊ9æ¼z…�á§sI¨Ï#+=�ôU¥¨ïͼ V û1)' R©¹\‚·�îø\¼b ÙÙ¿ÀÀ )žöV¼�' ¼4UÍIo׎e€»?6!Û!4:f'ø®D„D«�E„¨os åer*I¼3C´‘ÔÛõ8¿(c£ã=ÒÓŸb>|]Îþ/A;.}µ™òzš8�ä=¦i&¢•ìýÔ�Þ•Ê›g0o’Óô$FHœ4Ö5"�ˆB£äjtÑaþ~9pÔãP��°Ÿ¬à…çÿHJPgæ#W“£m”î²büY*º $ ­ZKLŒ$Jä8;;|‹Å""o0v¦œýÇìT”[ &ž8YWë5î–DÔ eŸ8áL%£M˜ŒNºY�±äžÂNÀ«ùçÉ% ¸ÿ׫)¬´6N�öÂÐ0´g½;Ôj5@6[G×ÇHöÖP5‡¿ bt¼€|†Q©>ZÝ:b£þ¯šPBÚ[hñö ¢»ëÃ×)f;ú8Ö5×õž¡EJn2 ÇSñ1•v æOœènˆ§³›¿DÏäñ¡p¬œr8«Ìòh0&Æ!1‘ùÇtî#â`I²—³è�t–>[J�lM-8 ¾zKƒ!‰Ì[™K^^y¹ÙdÝuç£ô»+˦ï%Ó±ø]‚ÅHe2$g=¨^Ÿ‘HÜk÷©TŒØç ¼¡�ó v/x½¸…u�®`.ÙÛ¢ªÆ*Dˆ.Šˆí.f6¤ª±Š‰#&~ëß·žn쯹—RœàQÓø5hÆ& —W`.·b«?€Õ;”;&êáônlhÛù8÷¾áœ¸}bd'l ‘XŒºc‚M¥…XŒÈÛËɃ™ý` MïPð÷= G;nYY©èëjiŒˆ#’FŠO…Õ1Æäë *O�dZ$Ðh¥ZÅ´@­ãõú�ëâ‰ÙEťث\ŒþyÊnóÉËã&1nènÊ>®ÄŽ™/\CINt’„‘8k)‰³Àùµ•Ê÷‹ÈßZJAî+Ä­5 ’€ØaÇtï�ìjs!Ë‘Ëü2²ëÿo²ÚœRÔŠ®]Šà8N9pûkMÝšR¾^ú÷„ ïSÌŠ60¬—š\ È‹KÄ+Å˜ß ¢²9S|Îw»þL7ÉDÔk;0—Ûˆü¢‚–  q�FJt óÿ�Â|§�šCfJ_ÝDáÛÈ�‰c¾L¸„RCàʲ"^¯�Ç‹O$F*÷htŠÅbDøÅêÙ†Ûã±_äºE"�†5ˆÖêcÔUŸB1b0BD@@àG%dmm6|øÐ Ö]´0uƒuìf7—£_m¤‘H"‡�÷h%[Q�JÖFåÁF¼R=ºk�êçç[+’;p´ƒý»­í(‚½f¸Þº’]võÍõ�] zÄ9¾Þg¯ð^§F‰ - ôµRšBM#¡¬GF2aŠ,¤¨¼„ÈÚ&”ñ&âäÐða!;ö· Ÿ1S„’¨8³ƒjØ_YHc]aqÃЈ ¥†À‹X,F,·Û‹[$FÖM±ŠdR$'í.�uï^àsbo÷! Rv \±tA9AQá´ýŠãõ F… , ðã²§ÛNt.vp1諯×ÊgŸ€n‹…Ê÷ÌÔju4îÞJqcs?nNþ¦Šj�hïHD/F1j_¥È\JåØ´ÇŠ((uaZ´ŒTI_N€ ™¨?Äþ­(5d¯(„;2˜71 õ�`d2… "¢ÐÔY©õ$’r¯‰5Ïg‘.Iò/³˜½'‡ìG*Ñ'Íç‘;ÎvåÄ�5 +ÙÃ]2F­=g-0L2¡}»„¢÷ího ÜS� {U)Å_|DuM2‰:%®ŸQü©ùH=1ò0äIF š)øG!ÚÌi‚íT¼±Ž­Ÿ»QÞœ„iHÇ´".jÊ )ªîV†I™Øí5´x±:o}ber”…ÃJ¹¥]ò0àÜ%I{k$�Jâó†Ï{ðÕçàAQ –èH¼1Œ;ÐÞ™ˆNâ²]‚9Š„I#)Ø^Än§ ã½qÈ5”í.¥¤ª–£IFÂä6,¥»¨ñ¨IŽ�„¸$&]S,”W6"Qç£Ð‰…ÔIKËìJ%Ár ¸´œ>�êi×ï;ži‘רù¢¦†ãA£>H,Äïù:6a©u�¬�õqt¬ŠLeIæ žÝRÈê•.”áq¤Ü—‚!ÈX3.‘›ò9â #ib`bv‰žY?€íÙWxñé÷ð]Cüô ’uÀñÞ´“8 ÄÂ0N1²cóÇ>û ÚìLæÍ²�·cË·;‘‡Da˜–Az‚$ ˜ä«y³<•…ãf³âÝÆ ×’ÜæÄÔm™Ín¨<.ž8Åjo2âsßÍ‘ˆ™LBèvœÐvÝQ¤.} צŠ?ÚAþn' U׎›Mú¼À|«Id}±š5oðdÆËxγ2zY ü3;ø…¬“cï¼ÌQ¯±Xìÿ»•$w²H}GÕ¯îä¹µnD"CnHcz¬ê{w`{£c᪆*ê›ë þ óȾ.·\76õ›íÆéÀ?_AÁ5a1/çsHiÂt} [Á¸ VfªÈí}Þ|ÙŒ[¬ $b4)™s™k”zf/žËÇ'„‚CàÊÅ?k�É9šS„\5¥½…Ö–Ó´y<þ7í ‚Äœ+d±*‚aƒ[9úÕ—œ Ò1TècÐo4aå8�KÞv§ç›âŽïâÀw1þ±úÒÀG ‚Ÿ`ŸÏ···€×¼»†Óm§y`ü­{�õ”•�6>0œ_ßòëtÄ;­E<•]Švú\fL2¦ô÷]5ï-¢p§�”§—ùçÈ;o(Z¶ˆü3ÓÈΙ‡î<'~´7SöÚfž{§–©O²â—z®ÊuCγ:sG',#w‘ñ¼úÿ8p€ñãÇ ¥‡€€Þ@£þl>üðCÆ�÷£ˆƒþ”‰B¹ù㣿i.‰&­@[àÓŽòqwàã¼ø‡ètÿ—Б4˜¦¶&¬§¬UÈË~ø}µäºT{<Š]Ûw°fGMm"¨Ew}iË“I¼kû¢ ó¾7)<$GÊy‹Xåp#É3Ù»/�Ïö¾ÌÖà›ˆ‰5aнZœ;V³ó[…|ìÆÏRŒ4ˆExe(pÅ»ÝlÕ¾¾ŸÏ±þüýwÝw!ûû{¼¿s!+ ðýqÉ„ì펞:JÝ™º‹fGXc´c®ŠÈ—GI]hìe%§ ú»6°á=ˆš4ŸŒ;Ã.< !),\heÝ‹ïQ¼í85?7^=BÖÓHÙ¦ 6©1Îyˆ´è Fxe( àó ó“ €ÀU)dcÃbyãàT5VQw¦î;OÃUw¦Žƒ�;Ã8ã¢M¼²èâ„6)ƒU“2®¾H’è˜�³åÜ•Q!{I �KÁ%‚ª ÒpSäMl«Øö�Ã+¬(ć�øÈx4AÂà ÙKHÒ¨$RuÍu”)¹àp^¯z�úæzREß#Ö!{±Ði˜a˜@É‘’ ³¯W½Îû_¾À à Á�¸ôBü+4Í0Ì@„ˆ’#%¬o}¿€Õ�©cý{ë{ˆØ^WsøQ"½'1FQHl«ØF]së÷­'VKDHºÁºÎ»ê›ë±ž²Rw¦ŽªÆ*DˆPH‚ˆøAñ}Nße?^F…Ë@b´RHAÈ^,® »Žˆ�JŽ”P^[NUcU�Uç>üÝÖg¸)ò&’F%]qÝ ÜŸ½ÌÓûu,~`<*!õ3Ò*xù¯‡¸áá4b¥—ñ¼Þ:ÞÚðª90Q-$ƒ€Àeyì¾þ‚Š“Jbõá �].œ4|RÂŽ¢"̧u¤d…(„ìÅF¤!Í�FÒ¨$ªüB¶ÍÕF}s=áà ’«�%6,ö» XëNÖ•¨¹oþD4_½Åú")3&ñÍ“�¹©*|‰Sæ1yh/‘v}�꥗7ò:ko±¯Ö�Tì†!ñÜ5m<R ÕJÉ«;©°^º)3H½QÓã¾êÞË'ÿ�ÜþÈŒ ÿoö¼º“�›DH½0èº;™ž¬»0�ÞRAá¦ÝÔx|´�±áVh(©n* î6<6Ì[7P°ÇB£�(‰—Jú§  ºá›ÉyðtO¯&UûÃ�&ëK‹Yú††ô¿® ¥ó>j(üýZ~µ–yÑ—;ÝØõô,·­$+A v+Å[òÙ±ßBM3¨†êˆŸ:‹¹Ó hûÛOðàû ¬ÿ½ž’§6`ûé Òo¼Êœ1Ÿ�úêfB†…Ü‹ñ(¢Ã _ú¾kçUvžÄüæ^Ž;üSfù¼NZZ‡rËœd¢E§9TúŸ4z‹Üøé™|ë�h¥Ð^±��ïŸa�R>ðÉ®eòÏ'1\즡|o”ŸÄK;.q$ w¥`*E"¶_ÆüiǺ·ˆÂ×J8ª4’’º‚µÆ0¡! ÙK-h'Ž˜ÈÄ/}yÛÇuÅë)jÍ0q3ÍgNÒžÄÌ;F£ÂAÕëù¼^Õ ÏQ%•‘0“ÔUà­cOA›šh ºµË‘õ¦èù÷Aë£î„†ÑÑ.ª«N‘:Ÿ©Ã¥Ø>ÛIÑ{Õ¸Åà– câ´»0 î¼J6üëMYÌŸðíòÑ}¸„7OŲðWãQá âåõ”TÜÀœx)ÖÝEÑÎ`Ñœapj/½°sôŒ�`[,oQÒEÔ€]ñ°ÿ?T N%sÎ0¤ŽÃ=ûfÃ&_ˆRH[d˜7¯å°q3¯d1wàÀºûeXOÒäT3ás¯šö±qk ãÇ6óþ�Ü aÜ}3îF3Û_û€&¯�OƈÿšÁÔÑ*p×qàÕ�”Ÿ©Û�T?•™·êPœ©¢hk uÔ¨Õq{|�ÂÜVQDÑû'pKÁM(šÚ3-r7b�_ܯ´8_l»×‘óé–<½ ƒ8c¡ðoO‘½EGî|ýw?�ÄHÆZ=„üЋ%e5¯l)ô8ñ{_"Ù¶{#EÊ4²”à©¡è©•ìR¥‘þäↀíP)/?÷ Oµ¬àæèè\é[®#mn¼^/È1T£@âkådí ZÝ^Ç¿Äç£ Fhàk¥ÎZç“vq(cbº•·å+[OÐŽ�[Ì ázF‘Á‰*ÊjD„Êœ4··ÑêQ3ƨg°p�¥ü 'Ú}ø<>$¡±Œ»nhg˜žãï±ãS‰?Oø·½ÉÅxçOéð)O}üûÜ70BëÊÎè¸çç7L;–�[(³Œ!õú8Úܨã¦qïÄ!=Ãkûœ÷>ð0~Î}Ä(Ä´›·ðBÙŒ¹3ï—ï�wÐåÉŸo¯aå[aÌ]ð–Ä|o/×çnD¥QÜD¹w2¿ÿÙhø¢¢/tÉ'¥OßOé„X6å"?^¯Ê]Ó4”Zº„lÄ­¿bQ7ÇÖ%Q¡¾ÈÝüIÜ#0ïv'v?Ç–ýVÆOÓ�JƒúÌö5NgNFªNÇÆ�×>``Ê|Ò®‘úo~ V]*ºÖÜ#’˜w³…û0…ëöðéÍ:Æ« ú½·¨ý Ü'÷ðÜg�ûõÖQþÞ FÏšÏD58j*ø¼Åƒ�ó $BC¿Óâ|i¬k@5z†_Ä„èIûퟙD`‡ÝBQn»ŽØA¦Dw{:™Óõ(=f6,Ø�ü69½-忬¼C¹Ñ´‹'13é™*épdm”½°Žü½Õ8%*ôwd�9C�æ—6�¿ç(N‰ul™ ’‰’µÅäü­€ ‡ ml c[ °ŒÍeÙ ì@v›Œòb³Ö.ÅX[DîÿîÂêP3vVó'…Q³m)+ç’·Ðm]Û#)^½€÷"Æ ãQs² ×ðT–ü&Åîž² õä{З½LA•‘ôØs+1{U!9ÏsÔáñ0L÷?ļq^[ÆGÆ’L%æêFlƒï ý6;ÅoUP[×Jäô%,½# ¾)z¸]Šv4bzÈ/¨�RxÊÄ’å©.zX\ -USÜ(ë¼~qGö×¥’zÍb ÷¦±,éû"Døz<ž� t·ãôÉP FŒgËZÛä –àkk¥]¢bè"Ÿ‹Öf'^HDÁ Sãøª�ÁÃÃz:²¢`"FÆÑ|œÏë{ÔfÔ~yÑ5×sÃ)Þf+Ÿ:FÓàѨEàu¸wÑ2Õæ}kÅàH žúcÔÉ¢1ÝŽÄg§îhNÈç”(C¹&\LÐùvG=ý û¬C—Š HÉW-–¸q¸¤(•þ5¾Û�N\µ{ù¿-ÍØ]2"oü/’n C*Q¡”´ÓÒb¥‡6'(BBü�€SáäþË’¶Ê˜Œ»wPø‚ûôi$'D}/�¿ÉÌÇ pPUøÊÅW¶høèÞpfbŠUvçrrŸ jl­ S¨Qœ,áÿ^ÜÇ™›z§ƒP'@ u�.†N t¬c˜*pÏâPt:7Û ^âä˜ÑŒŽ½c¸¢»¥|~iqžèÆ% {z«¤’”�!: eHa÷Á¼9‡]g,P´ IDATй¬z.�½‚¼e9l�Ée~Œ °pÐõÙy”‡6ñÎ:3�½ìåf¬ú–„@eGàÝgÉ;ÏÊÜD9ÊÈyÔÖ¬¯7’ûQ$Y]†Aa£tírrŠôdߣ¡ts>5ãV’;K‡ËœÇò5.´ãe€ 8„Åõ(yÞ€ÒcaÓº"ä÷f“;Qƒ³¶ˆ•�?Ë®ØÄõцr±—ƒ‡eüí‰Õ„QCÑãËÙ¸'�·iΑ] ˆ#mv%Ë_ØAÍê4¢$Ý�×P´±î^K^’ûÞl2_("1~Z14UÕ™½‚4¥…¼ßâ!ªç¥+£œx²Fø7­•d7dtŠØN†'’<ÜÿÕ…ogöWb¼YGÞ�JìI¦ïÏ]‰ùºÅo`Ããõáóºh³;ñù|x½àÃHÉ ±7óõ©väò©”~‘ÖoéܽAÐŒÝÄ`�¿|«Ô¨|Ç9íµH„$X�FæÏ'db–Ä¡ÿæõ-ÇQ‰[q Gêpÿµ*# Ä � nŒÉ™ƒ¼µm'ïiÿ›)׌$!±Š-›žã³!rî(’g†n¸Œ‹}Éu)d=�„­ª”¢mkXú²–„»ÓH�¢G#¹|×¥P ŠäøÅß~¨gãÙ8+‹ôIa@�vO¥ÿÌ¡àÃ&À‰2ö23SÐUmâ©¢Q²š¥ö –„t9²g*(ÈÝHéq' 'lÂ\ºÏˆÆcfCæ‚§ER[~[C² ,Ÿc8ç™nؾŒ'¬Œ5ÅXâ—’=KMÙægÙz ' Ô%“¾ }ˆ“Ò§¤tXšcå­k@5)�iA¥ì*¯¡æ¤Šäß>FZ´¼o“ã ´ª«O`slcc`H”Ûí Âæ†¡€<œaá‚#ûÍH@äsãîØöúõ•pãë9ù˜—žÛç;âÔ'íª$ºK‘ �ççó's1ü˜–òBv¶Næ×‹ ¨Ä¬¯oäÿJ‡±`J(Ã¦Ì ~Ç[lÌ-AKèà�,ÅöÙŸh¡:ÿ9D¾vNµ´bÍßÉÀûïb´Üõ(,ªB3esôªKšÒŽ8>§Å®BÕÛ©ÅØðË@ÞnØÞ+¢¤e< i@å­fç?Þê#íÜþ´ dwÝ ÈjªæðáÃ|þï�¸ñ^æM½<Nì�-;?"ìg7õÛ—§tA›Ì¼åÉÌ®5³ëß[É÷>DÖm—ÿ-€Û{ õXx¥�ÆsBå†sí1¹Ì=“O^•ž•Ÿ‡+Ë–S°×IJ¤yÌŸ´Ÿü!ËÈžEÃö‚ÀIœ”mÊahÙ�P¶YØ´<›¼è–&ÈÀc¡òô\V=žŽÜ¶‹'ï lš�䳺rÉeÐTi%êÉ<Ò#Àööj6Tűò™è‚ì˜×/%çåÖ>¨‰ Kµ’µËW ©-déÒŠÓײl¥†šW–²rW%i‹âz59 brI�åÊG¢@—<�4ýYrÓí×Ò‹àÞ_ÝB6D�òt5õ-ªÛ—Õ4kÆ3°áædu5-D rWS}BCh¨´3Z¤"çY‘=¿E #¼é�™¬•âøb%M±Ü5¶C<µPU\‰S™­øÖÐÛZZ@®@!ö·~ )í­¿©zòŠq3Y¤Sá>¹�—¶ê˜ ݲnî¨=S´öQs;Dì>^úw5†_ÌÁ8øg‡óu)¤á «§ªÂ†ñf œ©¢d?Œ¿=G«ƒ ÁCQîš*¬-n ^¿ "¥¼¦FGàn´RÝjwæ÷›ÐÝKìÍÃb#·ò$nBÂù¥Å… Œ61{‘‰Ù€½®‚â7ðÔ:9{L�ýL濤S*ñ×å>�ùX[ÀU¢êh~Kô$]ä}PÃìp+eÖ‘˜2•#ܸ°Û�¨‚»j{y�°couqlÛrÒw4ƒ×…k�–V��{0‘�M| jM÷Ú¸ÛùívœŠànn€M�‹V»½¹âë!l•Á]"PŒ½í›²0R~™DÉ_7S6~F·ýNjöæ“ÿ¦_¼â±SëÑuVèÈå]]¤ —¶${]çÄ.µ–V¿ÙÕ`jjF¦Vw†§ Rb?mÉ®ÿƒiÔ4Í5þk½t¬¯kC,‘@»·O‚TäÃíhÃ% "H&ÂÓnÇ! BŒ,HޝñN7td+^¼ß䋺¹²’�¨ÔÑls£"ÅÛrš6‘Š0ÐznáÐñ;GÃÔI‡£ FHø`|¥åœvÐ%dO櫘˜±Ñô·Gj{M-g†Žîlœ8ZÛÉ0@ 0€$´;Ú�v޼ý Ÿ…ÞÍôA›•#� ß4gheJ)x<>IñµØiõÁÀöÚï-�å‘FR¿‡þž5­  nÁz´wGú ¸HåhŸ�çÔZÐ&fœÕh9Ky>ü�¿½.ó)ôåcz,TVªˆÿ] Á¤gòX«>= €D‹qb้D«(¦©™ÞÇ$è0EøË*K¹…HÓüÀ€^%ÆIœ›*©õøÇEŒŒ7úÍ‹P-ZñH ñþ{Ô†jhµØ±{¾ÁäˆÕ]ñ2lXTïW¦E‹Ê{óªÐL™Œî"Ê�«[Ȫ�L½ÙJQ^%ÁQL�x¥/E=à$o¼DÓé&Dú©ÜÛ9À)”Ñÿ·5kˆ ŵ“™sûhšË ÙöQžö&šOKy)¯ièxfNSô]q( üä'Õ¾òUrÈB™8­»ØL�åSŽ'1¹£±Co¾‹øíoñÏ�¥H|.ÜA:îœ> …JFÍ+›(s‰ð‰aHMc´ü›j4U»wSÝ¢Âñù Ãµ¼}>S/ÃÈðo7-4ŒŸv+'ÿ½…ç>Qfb˜Ž PÝx3êWŠØtj(íuL0¦ìÍ}Œž=Ý-I }ù_¬ÿbê°†¸R o ¯þ¿÷‘H}¸Q“xçènÁù¥ÅyÚ@Ô|X�=:}À$QFH�‘@ÉSV¬ž$”j-)�¬eöÙe“§âœÐôŒØ7ïÇuË(™!€§S"¢ –aoné,´�_×`ShQ”1bf6«ï:Ë©ñ˜Q)\Ø�ަ3}´ƒÂ£ÎqA Žbäྒ2‚Ñ×÷2ñá}�~®¡×ßBg©¬Œä†ÄÈ>ïG2|©ÃÏ/†Žÿ)ÓÏÞ9 œ±wü´« A�rUÏm¿Ð÷š7GNžÁð‰n¤ÒžU©úæ9ˆ>ØÏ�‰Eùí¸?y óÑŽ²ý"uÛê³ñ<e°Œ–^íµ/æP¬È${�%`^ŸNÁ·”5E+¶Ö®=­gZý ôo lêÖÞâ³$Wjp¾Ý3LõÀž×ÇéVZjT@S¿n^Ó·ÉñC@ÁÄŸ/àœ9ªÎÒ‚�½D~ €ÀÅC‰iárì›óÙðp�ò®1ÜÁ’Ìd4€æ¾,’róXºÀŽÐƧ‘9BÞé¤õ¬Áõ$Üt‚'ßÕ󛇕ç¸Yš)óɰæ�³h­"ú;3x(NŽ’ùd|ù,9�¤ãô&æþÆ/Þ’îM£|í¤—¨—L|,X{qÉ�虵x9–“¹�„‘˜¾�d �0�”ÝÏò‡¥¥h‡èˆ�Óã;ÓåÊŽŽvQ¸r1–Æäq÷±dв×g³ÇÓ©11÷®7øÝ–Vÿ èw0íº§É]œ‰jH ÷ÌfÆá6eñÐ;ou$”“ÒÉì#z¤Úðhv¥ÖcB'$Q¤>¶åÖ¶®z�uÍ®'ñ§+Éì&‚ÅÝnÀnµb‹H8kÀšÀÕŽïG|ï½v�4¯ÈîÑx.«×“|½ ½SOíY�vÙÂUèí­¨c#ý³�ÔSZÕŠ=Ä_ÉÅ಻Î)S�q-ä¿SÁ=Ñ”v Ŷ`¸W]£zjJ4ò®rÌÙ‹©Pûæ^¬w¦¡“Û(ÛS�ü†,t¨éϽKt$ôerijwä7Q/ù/Ð�1þcÒÀG ‚Ÿ`ŸÏ·WˆF�`üøñWù]ÚØõäb*’ŸgéÄ‹QX^Â9!/% ›²6 ¿`7ÄNiv¥c³¿×é·.n÷¹Ž,€ÙlÆhüqÌMÚŸ2ñüËÍže†ó‹"r6f-�„‘pïBæ%„�§�²rȯ;Jôwe�u�* X•[L“BCXt ³â‘“gÁ°`se,Ï)ÅŸÎouoðçî³ü}#¥µþw0QIóɺǀÒSÁ†Ì|´Ì&-8{»{ɹs‹¥²iqb  iè9kAL ™ RÑ9);ŸÒ±Ï³,I ž2²ç½‰ñ¹$+Á¹7›ûß5òüòd”Ýf-è49èeºÀh])‰&áï-ßø´ÚîÀǃ|¨ï¬� d!ÛEÅÆL6¸ÒÉ^hDY[Ä�—ÑV sRúçØ›øO›òÃrÞüOTM%ûBg8^ÈÒglÌ}:ýÜ)»!+Y¡®D$ݰ­€ã|…¬XˆjÃOç’PŸÇâäÁÕ{Qß›Ùm‰Ø‹€Ïûƒ|ÝvÛRí…lޞˎzj(üûÑ?0[±—© IdÞÊDæ]’Àå˜Ý‚é‡/’0R–g_Àï¢H[ñ!_ \BGV@@@@@@@@àûä‚_Ø BV@@@@@@à’"“Ép¹\BDüHp:�Èd²Ër.¡k�€€€€€À%Àf³ ‘ 88˜ÖÖV $DÆ�€ÖÖV‚ƒƒ!+ ðCE£¦\ë`èСœ:uJ²?N�:Ehhèe9—е@@@@@@@à’2dÈÄb1ÕÕÕBd\å?~©TÊàÁƒûû“Ói�µÿ[Y� @xe(p5Ñ}å¶³—C¾ÇzÛþ®û¾iÿw9v>½¬ºwž¿ÿ1qíµ×òå—_bµZÑh4#— «S] 8�NZ[[9uêR©”áÃÏkíhßY‚ö¼~]ÕBöÀ�Bî¸$¯ ®&|>_�€×ëíü~ö± Ýîï±îñb;[t^è±Þ¾;�N!�g}+‹ijjÂãñàõz…È» ‹ÅH$¼^/�‡úúúó²g Ø~‹Ù«ZÈ «ˆ $�oG$ ââr¹z�]^^þ£Š‡¾êÛ6§GÈ$ý²|‹ íÕ­úÈ |_t,?ëå\YAÈ |ŸB¶CÄöÕÍÀ'Y�+ O71ûM‚V²Wœ�õpnƒ¾D¬O²?H¨Ø[Aƒ0Y‚ÀÕƒ»1Û×à¯sø^f-°µÙ¨j¨â`ãAÚ\mÔ7×ãÃGÄÀ2±ÚXbÃbÑ S t!Ç~d*ØLŒi©w™Ð…±"ðƒ²g‹Ù~ ÚË*dmm6vÙ�¹ÖÜëñºæ:¬§¬ì<¸c¤‘[GÝ*Z�«� óÖgÙZj¡Ñ>q0‘cSyð�tA#|39¾‚îéÕ¤j¸Ñd}é·,}µ$ �)�j®ÅxË4fÎH$Lþ]ïÓIéÓ÷³w <6å»NÄn£èñlm›Éª?§¡“vŸ)æO¿;ÌÝëb”Ù^àb£!ñþ$ΰRº£�Ü¥¨âS˜6=£Öʦ‡Wóæ×®¿�©“X’“ŽAÈ�W¾�í.b{ëbp¶˜õ]6!ûyÃçl«Ø†Ãí@„ˆ1Ú1D„D ¬#|`8õÍõXOY©;SGUcåµå|Þð93 3¸.ì:!©~ÐØv¯c]…ŽGžz ƒ8c¡ð¯«ÉÞ¢#w¾þ»Ÿ@b$c­®wF}ë2ò'6«™¢My,϶³jy2aá>}ëB}A([v‘ÿö$VÜÖµÛç2ü�„ï-­Ct˜æ,Á4£óëÏ‘»²–¬Ü æålbÞ?Á¤?ï&T¾I¬ô*R„vegÿo9ÖýÓ‘æ®k÷<áâ;t/¸,BÖ\kæÕŠWñá#|`8i†4"B"Îù;Ý`ºÁ:êÎÔQXQH}s=[Ê·0Ã0c¤QÈ6?X뎞á±!zÒþ “ì°[(Ú°‘]‡[@¦Dw{:™Óõ(=f6,Ø�ü69½-忬¼C¹ yOÒáTÚ(ÛôwòK�㔨Ðß‘Aæ =Jl˜_z–ü=_à’`Иd.H&JÔ“ó·**´±)Œm-À26—eS,lX°Ùm2Ìo˘�³cm¹ÿ» «D" Æ™1R5Û–²²q.y ý×Öµ=’âUò^TƒŽDÍÉ&\ÃSYò›ÿ¹û,åht‰Ì[*çô#Øf6‘qc%Ïþ¶�O­"ÕSʳÿØJE´»eŒ¼u>Y³ ´l_Æò#LÞCXN6pZt³²bŠD]CìU…ä<_ÌQ‡ÄÃ0Ýÿó¢Í¬~d/Æì¤ ñÿ�eÓ"Öybýg78”$¤š°lßJÙ„,ÏמJÿ™ÃÖ�Nã󵣌½‡ÌÌtr'¥þ¥Q3Ð+çh]ªIéL *eWy 5'U$ÿö1Ò¢å}ç ᑺ¢¹, LØ,¿VÈŽ½õ ›4•¨+ÓquÎ~ˆY1{U‰ÚÞ–�ý&1{v·‚~¹±—EÈškÍl«Ø†I£’H•Ô¯ßE„Dðë[~MÉ‘JŽ”ðjÅ«(¤Šótf�X^yš5Û+±‰oaÉóY$^äe�í_”RôÚ.ö[hqºpI4ŒŒ31íži#.ÎÉloþ‰Ÿ?NÊÊ<Òã.OŽ,9RBUCuÍuD Œ 6,¶�´³S¼êA6”; ›¶Š¿ÍÓ#°°øÑh3_`Ù·¼Â-{æ^Ö|Ï’ÍKI¼qÍ[äü~‘9•ˆ~g´Q±=Ÿ­o—cmlA¬ cøMw0û—©�ÂÓúÒoYÕt¿ºùÂ.K7.ùÓX­H%)!CtÊ�0ÂyÕ¼9‡]æ²ê¹D4ö ò–åP“KzŒ °`q?Fvžå¡M¼³ÎŒÅc@/{y9V}KB ²ãnÞÝÀÆ#7±"÷�D9ÊÈyÔÖì¯7’ûÑ5dýõ1 ¥9 §HOö=J_ÜL͸äÎÒá2ç±|� íx8¿+p~�…MëŠ�ß›MîD ÎÚ"V>þ,»bWÐwö”!—ÀÁÃ2þöÄj¨¡èñålÜ“ÀŠÛúÑuHǤë�l®ª…»\°Ší›8>v%ëgD�½‚ÂçÊ©8c@'�ÖÏjùÌ æiœX6ÿŽì—ËHXl_G�YCÑÆ"¸{-yIì{³Y´i‰kÓ0ÅäóÆû ¤Ü+efñ ûp͇§27~)ÿü—ãü@þï(�öç“W¥gåºyè°R°l9{M,K’�؉¥ZÉÚå+ÐÔò»ß¯£ø�¿±l¥†šW~ÇÊ]•¤-Šë;_Ä 5ç�g­™]ÿ~…]Ÿ�>)•%M$J x,çt-‹ÄHý×÷Ùµ C¨8»¹o½õ…ìËy„ìÓ‘=;=½}ˆÙ³?½M¿åû¦s_R!kk³±³j'·Žºµß"¶;I£’hsµñþ—ï³­b!ýï3ë©¥ì�O9­¾�¬ÌŸa¸¨"Ö‰uûSd—ªI™•Áª_G¡”m Xölcãÿ´B Qsýxƒß…‹N$� ˜�ÍCmÇ|à b&<„KWîC ¡ ~·SžHÆ3rb~¦픿îGƒi²žüíf~¦£ò¨ã/tȹ1Ó5%�!"Q—8ÿq3厱ÌMð?‡òH‰×RQåäÛÚY#“Da¼AC‘Å ý²ÈQTÒÜÚÒc¯jà@?-¥ìÆŒÑÒö;Á ˆ &£Æÿ[ý qˆþß!j=ÆnŽl³W?�Sâ/”1z®9cÁ†ã¤86¾±Ÿ†»S ;VF¹'�Œ˜>U6†™³¹fi;nÏ&MÝíª'.åùx�ËtèuÁ˜OÙçÞ‘ñFz‡jÑŠFï� m¨Ç!;v�ó§�°¸—|«ªÑ# …/ãL˜Çª…z4ÝËM‰þŠëZ®®lÇ÷Þ\YŸ d¯Z¡{¶+ëë&f½½8±Þ^òCŸÎì%²%GJp¸„ ¿ ÛÁOb‚õ”•úæzJŽ”�fHë�-Gá²¥¼Þ(Æë}›œ'O‘õG…+ ‘M�ÍÈCoPZÝŠ:6�¬‡ÓÐ+Ìlxp5¥×Ïe¾¼„ü÷‘Ť‘uŸšÝ¹›)«“2æžå<:Ã_ÑÛ?ÜHξ²žH…ݹ<±ø->-¦IJJ¿NbÅ/ŠybK)¦{jXþ贙ϳlŠ’ŠgÓyâí& <ÏŠ»4X7g²ôMKž_ŠîÓ|ž{±„C'Ý(t·0ï7þW¡9h?TÈêg‹ø¼IÎð[3X:ßÈ9 ÅJÉö�TžôàóIP_?•´ÛG£úê-Ö9ˆ�nãHÍil§}èî˜Cj¬êœ4khnè5Fëšë(9RrnZú¼ˆÃ†qÍé Š¶U�ô 9 ‹¹Í‰uû3do«àŒ<Š[~v=5›_Ç~ןY{ŸËŽu�ެþ�å<¸ÙÉ´&j·RyJƈ©™,½ßHÓ+KYþ/;“ŸÍB#˜sóô>-3W¯"mx·ëùª„ÿÝ?ϘJDSEÛJ8Ôâoñw‘v«E�+¦à"äR IDAT� ÒþœArGÃC«'%s öe¿£`÷4 wû}ÓïÚNmbö"³{]Å/n`uŽœµËÔ´œ¶aþK:¥‰Àçv!g 8¢JTÊ®Ê*1ÞEÞ5Ì·Rf‰)SÙ£Þ°·ºPwµÜäAJÀ޽ÕűmËIß)ò‹r� —:”V��{0‘�ÁhPwË\"Q·óÛí8ÁÝ^m+ѹh³Û¿õþUÁ]ùMŒ£½¿s9±}mG©»\îY�’¹};Ö-f]³–ø»ç’9Ãø�)•]ר’£jsÒHDQ Ìš½ùä¿iÁà±Sëñ‹Ce¼‰ëÿYÈÞÚTŒìÇ9.ã›Z!&æN+á/“”ѽ5_ÁŽM”Õ¸I åD+Ê»ºùÔ²@Idø|>:6‘Èðúœ€ û™¦nùB„Ïí ä AÈþ(‘虽|éJzÓ³/¤‹s»ô[´ü`…,}ˆÙ³Åkºô@ü/îÝØòÚr€~ Ïo¦#ŒòÚrlm¶~ü"ФEÜ¢ñ"Ö¥²ìÉùƒýG¬ï[ÐÍ_ÉŠ™ch­x™gÿmdÈdàþx7‡bæ2w‚š¦ÊBÖ¬¯dÄ/æc oâÓmì·ûEò®YˆŸŸ†¶<—uéÉøËzrŸ¼ƒÆ·Í„�Ò6ÁĘãŸa‰ŒC?ÐIÍ‘ðX©<ì@©Vb=hÁ‰�£Çš�6 ?UDNNG#fðûÿy“³” /¢!Ý^¯ óþFîÏàg±>½‘ËVóÙ"ÀMÕ›Û¨Rßů²"+3•ˆÃ…¼^ñÿÛ{÷ð(ª|ßû³VWw:Bš�›I BŒ�¨€8†‘‘0’ñ‚lqö†ßW=3º÷93³ß™söl÷™WgŽî=â¸�xg†0"‚Ä# £D� Bäf È­Ó·:twR]©î\¸)®ïóÔÓ]U«ª«ª«j}ê[¿õ[n�4Öј7—…ÿc–ܘÂç[wc>’Ÿÿ=Æß[s¼Ærz îJæÜ˜KÃ;¯²¡>Ì·¡W¸‡Ö±ì•iÎ,åïÏ!ñoÛ8èñYøD ;Îö8ð¥òí&ýÃ}Ìáeß›/°¡òË–2'·™Ê—WQýñ*^x·�áóî‹„Øð Ú…Ú­oQ_p?ô0/�MVc u­&DÚ÷)‡r®¢ÄìžÛr˜4)›/?݇ÇTSG>ØÁ^ÃOÌ*¦lÞ$\ë¨ó»HLIgÖÏ—³ü™å<û‡å,_¾’e÷ZÇ…N™@{õNêªv°wÔ4J"b3í$&ØiméÞQÏÉ#o³“8ÈNÞ�±ü™gyöÏòì³ÏóücóÉ·9ï£ÍÝuÓ|&´%âp·Ó�­M4u؉O a£¿ûµ¦·#²õt«ÁQmoíÀ×Ç×$M;ÙúY"cÇç˜þ£ JæÝÇ/Ÿ\Éóÿ2 Þ~š×C§¨·­­ûßjm£Å™HRèzÒê7°ì¥£Œ}à_yì7�ñØ?Î"_ �‡‰%LßÌÎ÷w°ãÁä)½7ÆË¸y!¥�«x±ª­ë\ÙýÒ“lvþ€_=þÿÿocñU QßRDÆTê]‘çų1Ï %¥¯)Èú£­Ñ­UÃ¥7˜�xóƒŒ�Þ{õêÕ¡?ÛôÞ€§(½È²aW••œEQz¦Ìreç�b‡@\ ù#3H E¯¥\[άÑ9Þ<“ ñŽî©¦ËƒLŸÈœ›J˜ñÝÒñ�4~e“¦1kbx8r¨ßÍnß$¦�lbë†:&|¿,˜>)9ƒô”tF�v�-»Þ‰Ç6‚±£4ÔÕÑÔ¼—}õC™þ�Ëñ|±—ºŽì;èá²Q…xªv°Ï“ȤYe�,¡ìÆËñìßÁΆ0è9;g3®žLù¼kI¡™}5GM4y˜ÚƒN &„GG.Ń8r D–Î|ŠF½H§+�AîVZ‘«‡ˆ(Õm8EZd ,Áï`DÙ<&9÷QñúnŒÞ\Ó§ŸRçw0aîBfLšÆÂòI8‘?D>¸�½e!3J&S~c!N½‘#õpäS~ß.«ßÀ¿=VAc~9KçæÄv“âiù²Šê#­øœù”Þ6“ M[[�Ĭ^p»’“ µ­kÚ«–ø®{w9�-ßÀÞ0 vaǦ*šòG“ïÈgÒX;+«ƒ¿å?ÎÖ矤b_p=� gvóê;uN,15üqP8¡�£Û+ÙÛœÙÍŠ_>ʺ:(¾º˜†m•Ôu„É·WðôÛGÀ–OÞ°ãTp$xL>ÞÌŽ£Qv$»„ ÎÙº3H垺mì8VHÉ®Þ Á¤Ž:v|Ò±è—;vrÄxêØQuŠ‘E½b[ÝVV>¶œ½Eó)�ˆ mbóïþË?n‡#m9 Á»$û¶²µ!øQ½«F’mtUÛ›èpd�3Ä,³iG}^¼îà1,¹®˜S›–³Ù{%ÓFöÅ)˧ìïŠÙóúûCÎx[;)YÙ$ž£›ÙZÓNkî…4=|é–ëœTìíûy¡¤ôõtåQ€ÖoúTÃ¥3˜¡5Àú{�Ù^™ó¼…ìiØÓ çJYÉYÔ4ÔPÓPÔ¼)Z‡�×àPµos‘è„@[[Wåä B�3‡ ì)Á€·„x{ðð�_qýs–¾BËdâ�–0ÃLšÃ¬Ê§ùùÃ[È:‚ c áL÷?]8Ê˪_=ÄÞ†VcòðõÖmï›ßy”l eRj6c®»�_Ý6Ùô°ábòÍcØýì#,~ ‰Ü©‹y <û!¡(Ÿ†çá¡CM´ºŠÅÿX‚Ãè¨çÍâ–Ëÿ�e-%)5‡I?˜Ï¼Ú'yáñ r~QFþ¸©\åßBõÕÓcžgÆ37±äNʇíàé}Áÿ¼ä–9¼¹ìç,}×EÆÈYÜy×4ö­øwžýKÆv…8Ä’ƒâ¿{€ÒeËùÇ{ÛéÔuÒ'Ä8/”¾6º Y ¾Y |ôlÜcÕè«WÃLéu˜¿[…“D /‰yœ7�=Õq  +�Ö¹Px]n¯»_Ë™ÛI5569ài © HsuL_:AÚÁæ"eÐqö~ÑÆ,g++iH.Áå?ÎæW*qÜðßÈ(ºœôתٺ̓wÔ| ³Ó)Lù#ŸnŽã¨­�Y£ á«„ ì,ùWîÝýÎ=)<‡Úi:éÐÔD“%˜¬Eé$ÞáÆÝ Nr·»‰Opöù�.Ê(âX˱¨Ž¬eÖƒ³”ss9ÓßúoýU�(%HLЀ6ššº·¿Y—$Y:²½¸sÛÿHE­�´ Ák^dÇÔz¦<Š8Ã]\_NÁõàkÜͪ—*¨þ ³ Ꭲ±ä=»•�‡ÊÉ1†)ø�°óƒ ¯ÛÕ=!+'tËæ3ëÞ_2+êüBÊyŒž¨\Ì}Ï<Ösê�–óú�Œ€Yƒυ 2˜¼èQ&/ê�¸”,ø% ,�id?û}Y—Û¹á_^到õü}ÇÈ2yÜê‹™ÿëeÌ7L – ¤=þ0v¨Qþ‚'x}A,çÓ°Ÿéå<ò»žë;ˆÄBæ/�±-à`Ú}…i¡c4ã¡'˜aœ]²Üpü]¤$ç3mj´{˜‹²_/ë1mÆ]ٽαóyt™q fðTø|ÒË¡íl“yä¥ÉÝ[9õ^™ÚÛy¡ôµ¨¡UÎà^kLz6î XŒG{�¬ð·ha€ù„å9Ú žŽJGsto€Ê”‰@X¿ÞŽúT,12’мk5+·ífó«ë¨rCþ•c-_+ åðdåયã¨?‡Yó§Òüâƒ,þçWi›ñ w«â±Ÿ>Îîá‹x8œ =o ùö#|ôi#yE£I´å3v¤�êªñ +dl2dL˜L¾£�êm»9ÚÜ@Õê'yü™JøÃ?êáÓu/°ùƒ¼ºf+ͤ3f¼)¨SæR”ï¥öã:Üî:ªö¶“7*7t,z?^¥£JÉjØdáÆZ6ÚÓ ÖnâdæÝ2 OÝŽ{耫¨˜ËD+»×¾Àæ�[YùúVš�ˆµ÷)+Ùݼ°r+¾ñ ùÿ~v'c:¶°|å¢71je÷ŸW°~oйÖR²p9-Š¥Ïbþ ^*~û$›÷5ƒ{šö²ùÙÇ©p—rçôoGÏrÕ+–rÿBa!G·²³.›ÂQçÖù»�ÕÙòÅñw^e«k¥ªM•’Ò¹«ùV ~Ôðítzoè×§™óšµ@œ‡jK?g9ÇÒ¾~+¾ô’rõB–~/hB˜cÖëdObšãQ6T•qßÕóùåï ŽKÉÿbF‡O¼£;Ÿd|!Åy°sÏP./ BbaÑäÎÏZ06˜G4»Œ‡—6ð‡WVñ诼$fŽeÖݳ(އ&o'ØÒ™<%‘mÏý;Õg(¾õ>æ�uôø; n*çðš7yæ / 1t|9s‹48Ö÷Š=œ¿÷óãŸs¬åX/yd-ŽïÌ0mý£l>—ü2î»­–'ÿ²�Ï ô¦iä×lè§¯ÙÆîW–³¹e4óï™AF,¼e3ÿ¼öE^¼®˜{K¬^Q'qŤjþú_ÈxÒÆÌ¶hæ ø‡¿ä῾Àÿã¿°"œG¶ä&~ö«2 ã¿5Mñ÷2ñ?–óàb8\ßõ ³ÒÏ}möµ—¿ŽU¿üïT´Œaá?Î"CAˆ’Ò¹ÙhP«��rd/�ÿ¿·éú@« a2IÂßeè»$ø²]  pñ@‚®ëïY­øñw§¹£™E�³ð‚ºSu¬Øµ‚¬AYÖùL{Ó¡U<ôÈ«Øo{‚Ç~�sVÛâ©«àßÛJúÜ…Ì›ZLF"xNÖ±{[«Ö·1ëþ,3¨âÐ&špáJö½ÀÒŸUàºû)þuî7víÚÅĉÕª¤¤Dgg'qqq=¦üñÇŒ?þ[q bÝ…S�v p‡>Ã-Ùc%ÁW {éƒl_!7¦´+gs"¹â]4w4Swªîœ‚¬@à´;/ú¿âÈ/ã¿ýsÖ®ãñuOÒÔ JgÄØÉ”ÿ|“Äv«a?{h9_Ž(ç�ci~c+ ¶¦�ýfz]v»¯×‹ÝnWÿ­’Ò·¹vÖuÕ¨«oô݉U «À¶_ÒÎb#ôX?X”^DÝ©:êÏÔŸ³=¯?S�ŽNQzÑY_Qçf³J(»·D5ÂèMé¥,]\Dz×7ð»ÿ±†x×(¾»d)å#¿™»“��@{{;ƒVÿ­’’Yu úÇ d•ÎÄdû|‚e±~Ïzjj¨?SÖi¸êÏÔw¥ô*Ê È+ç‰×ÊÕ©rÁå §ô>�èò蛫¡C‡rêÔ)²JJßrùý~d”FÁBšššÔARR:�ÛW��–×-¦#ëŠw1!{UG«X]½z`1­­®^ À„ì ¸âÕ{{¥‹§ÔÔTZ[[9|ø0¹¹¹ê€()} åõó#ÛlÖ9u]ÇåRu•’Òùذä~Pï ÈB0•“SsRßROå•ÞÈ7jÞ ¾¥ž8-®Ï-畔Χ†N  ®®Žææf<ÕÓ’’Ò%_ãê:~¿¿ëz�'¯BbrƒÔÐ+CöUZN@ˆž:#kaW¼‹yÅóx¥ê•.�í/ˆ¾Qóï|€yÅó”«ôµ‚Ù“'OrüøqÚÛÛ»%¥KUBˆ¨Cø{¬2æÁ\>ÖxoßcMëËgoÓ¤”!Ð4-ª«¤¤ta¥õ±"Æ“U 7�…`OPóŠç±ºz5•_TRs¼†yÅóz�™­?SÏšê5|ÕòÁ­Å·Z÷*¥¤t•ššJjjª:JJJJJJ_�í ^�ÎÿÖ«J²KpjNVW¯¦¾¥ž§¶?EQzYÉYäÉïêýëX˱®L5 585'óŠç)ˆURRRRRRRRŠ ²X@,DïRÎß׺"ã ²’³¨ü¢’ª£UìiØÓ«�ŽÞõÖ„ì ”Ž*UáJçE¾�_æ‰yøÖu0ú¬z*Ÿ~…Ö™?¥lä%¼›û+xrGK”àTú9”‡æã§ð'g’z)÷˜wèÿCÔß­¤t�@6š +Lk„Ù°Û¯^F]ñ.Ê‹Ë)UJÍñjjèðvp¬åƒ2ˆ·ÇS”^DQFÑYìáÍ+Xóyº·�¦vHJŽÇN ×ÜySRêÙµnïî4RÆÌ¤üÆ’‡Ùøû•TéCH²yñûí¤Ž»™¹7ä“ëÇÚëØ²v=UÇ}€“œk˘;) íÔž{¹•ïŸM®ôQÿîJþôU1wÝ1‘4yŽÿM÷a¶¯]OÕI42'Ícî5i±ŸV܇پöMªNz{,ãkØÍÚŠ÷9æd Å·”3=Ç ´R»y›ö´¡ë:ÎüéÌ»¹—TÔ%¡†JVlÍâžò"‹s'‹Ò=ˆO»ôƒøÚÿ 4QóV•µ­$Τü¦‚à½+Æý¡é³õ¬~§ŽN›@OÅÌ[gR�D×µ¾±&¸¾>]ë~7­nIb¢Ãâ:HIÏ@êä¹ÔôÜSËè: *ˆ8””.ÈF“•†X‚Ø¡‹+ÞÅ”¼)LÉ›r^w.wÆ"˜Zϓ듸ëÞ餅}¥M«Ùâ›Î½“8Áö?®aËþ|fç¤qí‚%L ¸k©øÏõl/¼Ÿ™—Eû%u›+¨JšÍ’ù8ÏTóÚŠ5lÉ]J©ÁÎiªZÅšܾà<@,PÿÞ:ªRæ°äŽ\4w-«þ³‚]‹˜’k™ >J)³X¦‰]on…ë–p‘ß‘�w-™NšÖÊîWŸcãgÜQÛ»jª® âýø4ð‘Æ”ï—Q<$\Án¤º4Ÿ�¤1³™;-'àkÜÍúŠ¿Qï¿?žQß™ÇÌ¢¤`»iï|éÇ&¼�z esJHÓ ~óS¬o/"Ës‚¦“�´f—²à{E$áãðÖ×X÷i'‰)ƒÉrt"úð?¸«^æ™CE”Ê�Ør°3ïîédÉVj7¯å�nlºR'0{îD²4Às˜-k6QÛ¦ƒœ…3)¿>§¯š×žØÍ ñ.:δpú”ÆØ¹åLL׺ö©²Î‡&}†}jeûÿ~…úœ8ÓDóñVR®½�ò ®Ð2kÙrм$O`ö­¡mpfûÚMT·è=ŽkTÛÎËÚÅáöxVüçˆ+`öÝ¥äJh­®àµ÷ëi=ÕBþm‡Y7»_]IMR îÃn²ÆdÑR[KkÑí,º.-æ]­ÔnZMe�·çqxîeêss-ŽC”+³fO|~Aн›—Ÿ=Æ”ûg“R³žŠ÷ã“à³ç2eÎìà9 è�GؾªšºÍt&M`ÎíÓÉuÄØìÚ ~» & õÒÔÚLc €Ù·…–qfËÚõÔ´hh>H?“òksÑðQ»æ)v_6מJj[@+˜Í’›òcþQÏÕš�¼Q_À=K§�¨§rå+¼µ÷AÊ 5êß« ÊêZwV³qS~x?%)pbë ^}§Žü9ù°?t­ß¾ÖWľÖýÚÝ>hmé$ ÛHHNÀø;NÓÜæÅï÷£%g0$ ÀécÇh—¿Û‡=Á�·µ _byiNð·rüð1N{uðû±%g3ü²A½@}''ö}FÝéB÷£;³(3ŒA67_¼ÿ!g'£w´ÓÑÒI\^ ×äE·(ü‡ÞcÝ¡æLNWÓ.Ï^Þ~ãW̽–¤ºílûô>¡ã—C;m*ƒùV¦ð¿rÁÒÐùó\Äù£¤t¡@ÖìÀš»§µ‚ÙƒìÅ× j¸É/-"I2�)÷ã�£aªÝ-tøœ¤ÄªyõÔ~)(¸µ XA'Q’÷•û›(º­µëyóƒAܸ`:YŽó±O­>â%ÿ†,p»ñiù\‘½–Oú E‹±Œ�¼ˆe*‚Ë$áð‰ÆhøÚÝ�YD¾o#u­À—õ$^‹+àÆíqrÅèÁT8 Å1�QÕ{'(¸3Öî#Õ|Þê†!Nê·®§&çv–\ç_=•Ë+Ø^°„ÒÌ&vUlÅ{Ý–:¡q«6í¦¾p:iµo±ö`÷,šBštSýÚïY_5š{®I�gR¸cA)IžZVýûv>ŸVÄD¹›wviL»ÅN7µk~Ïî>Ygª ÞÚʾ²dŽ«ë¢ñÕV²±q÷ü¨˜$|Ô®{Š�+àžk]øön§Ê9�ûï(@ 4Qûá1:Ïw3ŒZ@y¾†»êe~ÿn ãn+FÛÚ§Åæ}Mo Ùy+‹nLƒ#yê¯UÔO(%ëÌçl¯Mcö½3É’>N|¶›Öv ê·¾IMÎmÇ5ÆÎfNᎇy|Ï8™\À¤â2»Ùýâ31ÜBì4ð{˜7äeV4äóÐ-Ïmª£õº4Z° ¾½o±öਈãðfÕh^�4;çõ<Ñnp©i jj¢¾ÚZÓŠÉom¤9e(iîjÞx×Ç”XB�Z?~�›ª)¸£8øu²…´Ûï¡4)¸ ïT•°pRŒ÷2ôdÍ¿ƒR§�Ú5˨¬*ážII~w5Õ)ó‚é©£â™7Ù>òÇLO×Hâ¤î½Ýdݵ„û3µ>ýÑÔÒØLüðé¤iA÷¼h„“Õ_ÖC¡‹ÃG|Ö÷‡¤:Ž¥17É‡Û ®¢âþTlj@¾ÅµžûZ·9HphñÚHJ°GT$¶øÁ¤ÆhmlÄc°.¥ðƒ3ƒt­ž£� äeÀ—'ÚðâÄÛpœÖø\FçÅA �#ûS?ørrcÜjN|Á-C(¾:�$áå«�v°çH× ›èÀ­3åªd8ù)ï|zˆ¦¼+ˆö(dKNÆÙÞF;~üGÒ‘2‚¬ö3´%&ÅóïWû{ó\†ÅAû¾M¬ÛY˰™ĉo_ú­+ºÎŸQç�’Ò…|bõ]„`5üi Zh°‡Í0„ËHòÆA½ŒQúÚhäÈ‘½žw)ñqô”�ô¬Á؃Vî“-�9œÔ¸îr ½ƒãrN‡&’†f’™â$>.®ë·Žî§»Ö.¾üø ÅWŠìГûhµ¨¥€‰9­|ôQ=ºáµe2îêÑ"Å𦠛Íþ4~ÆéRÊ®éáïRJ¤”†ñ6±ïÝ…¼êjü{‡ÆüY¢¸}«Ø“*¶­�/Uk2c�&›ð· ßð›åßÏÈ“4},ÿüÚû¢3ûryùÈ‘¶ÂËó¤Ë!„ð.W=¹G\þÐÄX )ÞϬ¶ïÿè;BnYnCÎÕ_ŸiBØÚ«^·½zòíG3ÓÅG¯¿ÆÉëñÝË€–]¼øÊiJ<“ޱõ…?S%³)}Ec ÈM¾ØõÜlqgár„ê[Éšq?eE±‘Ú÷ÙküvÏ8~j ß¡¡)†}Õ¯>ÅáÉRÚø2+Ï”²äª:V¬†yÿ0ŽÚçžd‹;³_ÛP¿ù)V3�ûgoZw®äǦððÜ,v­\A㌙�œÙΊ盙ùÿÌŽîrûjXµ¬–q‹ øä…�4/cÁeÛyæ«é<8ºŠß¾^GRjRh?Ý´Ú‹¹ëžé¤í¯`×ÉL&Nœxandž&ªw!}j1á>ºk×.Æ%ÖñÛ ñܾ(“íÏcúeðæ“Œ¸å¡ë€v p�€ðÒ¦@uQ«t–Žl,WÖbM÷›æ�Úhk« ^•.ªöïß1^XXØãœlm;M§ÛF[« p¹‰¶À)<�x®K €fw …�@ÀÎàìaä¦$t¯+ˆ8ß=q!°•Ò.ìZ€N·[¢àíô—ìºÞ‚N"¹ãŠ„ãðGìÝ›"&ŽÏ‚˜Åµý$ûv|.Ž{A؆ˆ±×_MVÐ%ê‚\)¥á»§Ã'ZüIMúŽžOGu@Ä%ćsgŠ0ø†¾Nœq>Ñ¢§È+®û.ù‰ ¢½* œ ñØœ ©ŸÕ5˜”œIDAT>çqÝ�é".ÅÇç~‡LrJâ¥îó“1~¦¸ÙŸ 'j¥=!^8l6BÔ*CŸH)m!çßÉ[�ËC‡‰ýײַ]>‡y%Ni³ÇËa×”3k„&!C M…/´ÅRÞìh"…”.+¤’p–Á¡…‚».A!¥M‚ è]›j„X[èß…ÂFB’tÚ„†û£&4[Òå3åÝ3²ÃËk]ër¥¸ýÇòäÁƒrßþíòÕ÷÷‰™÷Ü$Giº„¦ë„Ôý> šÔu]úý>·Çï—~¿_ !¤¯³M6·u ¿ß§yÜ À`:šMt‰ÌdÚþ µû÷ðöóÛÈûÁßsÃe€ÍIþŒ{(/ì@t¿É#ZJV[Ü€·!Z•ׯ5iCq9wqâ³ZÜcJÉ=RË'²™”¡i 5´Ô ܾx:­9ò™:¶n¬ ¢r/IW-äÞ©ñf:¼”»æA–§†Î¸¤àÛ§ÕTRé‚lo÷#«NÌ ÀÌ+ ÀÚ´*¨UºèÚ»wo×÷1cÆÏÉ€†Í&Ñ´`%ØÒÒ�.¼œnh £ WØñrúØqNtÚÈNöãõùäˆ~dR]×-Ïy�×NB‚Ÿ£'ψÎÁ)Ø<'9Ñš ’‡9Ðl6¡9HNLÉ…ãèøè>;ìbBn!ÀÃà²\ÚtÆ^Ÿ%Æ�³Sk„Øà§�ÌŒ8ñå±â'd�ìùJìlv‰Ë®v›-X^6!vÐ(š8 —”BˆA"û2§Ør¸ULžœ+4÷!±õT*9“hΑ3äcq¨Á!nÈËú±â˜#›ïÖÄàa™Â·ó�pO(Ãd‹øìÃ6†]‘eÓ´?–.è”R £øü£r¯% Æçˆƒ[ÅËûN Ý–.²³âÅÇ_î‚™¨ŸŸmÛOÊäI27.[d§î�_ö1f”SrêCñ—·;åäÛ§ŠŒì øà¨h!K–íâðÑ™™—‚õ¬J)„°iUJ!S‡Ê”–Câ˜GÈ!ÎNyøPƒô;D†m†{^7À‚DYXaÝέݕ›%ÅÛ5ò+oŽÌvøäñ¿½c;˜]*&ek²íÀ.¹7n¼¼jä™6*G°²BoCŽŒÄw\~yÄ' ó4Ùvä˜ìrµ ’ì á}ÿK[s S¦ÈVQ÷e³È•aÓu]ú½>éõû¥ß�¾NÙÖê–>Ÿßæ?½×¾ýˆË6i|¾6>s„Ú¹Âöþq¯Ô³É6ˆ]ŸAkáå$N°{S ®ë§“ß6ñøðE­`úz«O"7'žŸÖÒZXÔçmHËÉÄ÷^M�,\²•º/›É•5ÀZÇEVj+[>†¢²Ùä·~ÂÆƒ�Uä„ô\2›wQÝ0…ééîý[¨l.böUiç߀­ßMå_×QñAùÓËYú?$?ðïå…Ÿþ=H! èÁêÚášÁOŸXDñyìÃá_ó}Ô¿³‡Ža7Û�ŒT]x+]x�µreÍŽ,Q@6`pjûâÆ*)}­õÙgŸEŒ7ž€’’çÈ„S'9°o/ Ð\ µuât& ‡ÝŽÏçÅkx]™œœ,�ÈË' ž™Wà߀Ï>>ÂÆ�ü±"/YÃЄf -'“(˜P$ª?ü”ƒC¯£ãd„vh ŸXM· A�RŠ!WL¦àƒÅ;› ;H­3ØÑ5_w7ŠC_9E¡#NØEpZú•×sù¶÷X¿. q"ãêib¼+Náã§O[ÿÏ›¬ýX´qEé4Òíš�î“ßiØ,ÞùËj!„ ç‹™—'b]¯ÿ… [¿!Xö!bˆø›Ø¼æ©Ù…ð“,®¹a”pjšÈºv66½-ÿòÇ�eœ„¤‘SeQ¢†ÆyÕ¬kÅÆ·W‹W>Ô¤ð;Űi7‰\»MˆÂòÆcÄÚ/ã„_0tº˜ue²´IB® n‚.mRJ¤Í&åà+åõW}!6¼ø¢ø(%UOÍ’öN)¤”6ýÎØð}P ’¸”2èäv¹µö3äì¢ ¹é¥çmš]HRÆÉ›Jì6!ICɆ7^•/â”B÷˸aSå-©áG¢t×®•ÚqZžnK‘S¿?Jj (¸QÎ:üWùúÊ=Ò)ü6‘þù½ñIR×[#Ât�èºÔu]’’¥¶÷ ¹âC¤¤/±À6s²][úµ·h%]o{ùÙ¶82©à;âgï÷qmø8Æm}ƒg–m')q(Å7—3qh•/VRçõÑÚxŠŽ7Ÿá„ÓIþ̤ÅXeÖ´y\½¶‚•ØŽSBRa)s{i­ð&fZËŸž«Á‰2J)›l Ú£Ò{¯"‡4Ë¥`¨FÚ¨A4ïö1a(à,æ{ß;̪UÿI�=ìiL™‚ØÀy¼1ù«yá_–qtúR~ùD Æ4f¶B>ñ< /Âý²æ•§ø`\LÙ­ùA¸¦º”W:ÿ}˜.,irÌ.¬À*�Uºä4yòä^Ï댌Œe1-)))b¾»¶Š‹ŒµÆO»Ý.ŒŸa€ 7­Ñ±5»µæïF÷×3k ?€®† ã\h>æ(ØÐbæi„_ÿG)^_xº4– ¹Ÿám’Ó#Æu]—†u†Ë]Ö0ˆvmKȡЈ|3%�eèY³ƒ«õprCo´ÂãB‰ï3ùúÔŠâ¾o»\]÷\Ó2æX]›a?l¦26Óoša<Úa\F3„Auo·Ö®]»ÎSŒl»_|šåÛÈ�6‡yß›A¡ë뻯Bˆ)ãcUŒ¬Òqd­duè#«a—ºÑ)]’Ú±cGÄø 7ÜÐã\?sæL×÷ÌÌLàõzc>T†áÑ ]†ŒßO|||׸Óéìш¬/`kåÐÆrlÍŸác¡²Òøi0T…yÜ> L  n�@*Lj„ÚÓMŸÆ2V`KØBP+ @) À* e¼&(†uØ,ú# Ñ´œ4� *B ºBºÖg„M3H[ÅîA°éº.Œ ·…öÁnÜ_‚kDh¹h6¬Wé¼ÉEÉÝ?cÙ¼#ìxk5/üb5Œ¹‰ò¹³(ɬcåOeÓ)WX\˜Ð%¥‹¥þd0»¬V­U¹¾þž’Ò%¥›o¾9æù~Ùe—E�?dÈ�ˆyƒ ŠOLL4;¶ÑÀÖʱŠh{Û°#k7¹­] ižgt`±"VÃ<ól `5®C—±ÔÀjç`kZÆ yFè5>¼‡! 0&x�N0›¡3¼=F ¶·ÅP®‡3k[³+k,vY óm:ÚoØ,@Öèìv9Ëß6�?GÖ${ß]GÅ{vfýlþE�Õ~8²ÝXåÈ*�3õÖ!‚èÃɤÊZ¬‚W¥o¥Þ|ó͈ñÛn»-âZ0:µ¹¹¹®«Qf‡6쮆e 7Ðu=l{ E°ZËLôpd-ÝZ3ÈZ�›�4¼šàÖ ¬–ŸX„Å•5•5O7g_±™—1>ȇ—7‚©Ñ±Ôu= Æá0›1œÁ\˜Á655µÇµeSˆteÍãF°5†˜ci­6V¨Aø3Ìžæ˜Y‹Ð€pü+QÀÕ R‰®}ZÞ "ã^#V3ÔšÁ6ôŠÝ¼l(•—4mȆ燡ÕÐa8 /cø i¦Ñâa̓†µËk„T+§6\N‹¶¶0˜燶¹Ë� …VXý¦ÝpŒ•¾]R@«tAA¶/0mšºA))ÅЊ+"Æò“Ÿô¸fš››#Æóòòz¤õ²[³c]3àZ9³V Ë™µú4»±1`ÖoB̦­^Me#ÒûYlP%Šû*z™Ö5Ú§0œJ 0Ž?ÐuÝZÆÜpªË¹5¬®ëÒ” ¡G¸‚�¥!,ÀÊYµŠÍ�V>š+Ûã»bÍŸ¨ LJ§…A8¼Ýša]JJJJçd£Á,ðJ”2JJJ½èw¿û]ĵô‹_ü¢ÇµÓÐÐÐU&??_¸Ýî× 9†6|ºÝ¯×ÛåÐúýþ.°5†27ZîZ3ÀZ�›B °r`�Ðj1Ï<ßo‚NsYa5n·` C §CÛc÷ƒK|¥X¥ ´{d} »ºXä§%ò5~xy¯Éùµ™@·Ô¦Ûb°eˆ€iÀ´Mš0G@,ÝŽmxm¡m¶™5AIII需¬Ìöh•”” _ÿú××Ôo~ó›ˆë¯±±1b~l<��ÆºÊÆÊˆ,3—3.ßg6ÄFù´YÐ_M,@” ½;°}™/MP+�€45Ʋ O…ˆh0kÑpËknê1¦)>Pºà k< E?NZ%%¥s¤Å‹÷¸ÆÞ~ûí^ ³²²z@l¨#†˜`kåÊšÁÕ¥VÓÌ@KOLjN�ÓýXô hO°ÎoÝ#WKx¥glnDîٰ󊵓* 0gq0é0¤ùêv%o­1! ¢æ°…h0kާ wˆ`ì,!Æ`3�yØmíÊvšç³fs&ah(f„çp‚F°ÁØ×6¶6!!�ööv|Iß�ÚÛÛIHHè 3è}(£¤Ôo‰‹¼¼’’Òy�ØZAm™{(ØÁµ·0ƒh ;°�5�pjÓ�€­%ìšr¿vÍ9ŒDZÑË4sØ€UO‹–Ót]×,–í¾†FZƬ æÎÌ.­Ýˆ�`¬™~C#zè�$z˜BÄôp*±P‚Ýù]'OžäÌ™3äçç_Ò÷š�’’Â�!C¬!AˆÉ@;Á^½Ütç‘õ…†€a°rjà*]U@«¤ô ÛhpÛ_°5Âm,¨=O`Û«QàÕ ½±Û¨�Çz�ÙhNmÔøZ‹Fb}…[«¸Ze~D\LÎk(DÀ*Dz:¢ �Æ„Áu•½m8dÀkk,oNý¥»!Z¸‘˜=†`¿ØuÓÁƒ‘R’››{IÞW:À°aâÃ�“èî ¡34xéîA�¬’P%%¥þiçÎ�}¹öE¦÷Ö{Ÿèå{¬i}ùìm^oËD ;°šn‹1¿¯nm´Ù àöæÐöæÌZ¦ò253—× éŬân­òÒšV«r6ðZ}ƒY9·V®±›±g2»”Ò!¥ Çå¢ë:ºd£ðçù”Ãá`РA¤¦¦’��ÐÕ�ô7U�‡öövimmÅãñÄ,?iÒ¤k:±a�5:²áž½t²J d•””¬öN_o÷ÑÇéç lû½ýÝÞ`¶¯�Ú˜í«‹‹øF�’>c-­QXv±A¤[kìø àZ:§@7f,°rk�4 Hînv�A· †€&„ˆB8@h²þkn:Eó©“tttàóy¿Ñ÷ M³�+u(ƒS\½–OˆÓ®A¬Û²^È»¨U «¤@VIIé¼Bm´{G_¦�°íèöÖ¬?eÎjc6ÃÚ±…ÞãhÍî«Uœ¬•« z{„Dv•knlfÕ`Ì*Ì@ZkWXA” f·×½=BBáÑ¡A`S´t~”§•V`Ù€Y¥³z¸R‡@IIÉTñè}[ÝH϶±êòZ·€ÑXóÌeˆœ:wkÁ"•××¼c~Ì<¶Póa�!܉„%  4–s+u�\_!�!ǶGJ0‹uF4BØÐu‰@èz$ ŠHXÖ ¡ÒTΘÒ˺7´.©ëº‡ c«!º\Ú0D{ �G„ÜZì"äÖ*z:g²ŠƒU‡WI�¬’’Ò×lÍÓû »ý[+`Õ£|Bïq¶½}Ð?Ƕ7ðHf3À·)@ì†h=âk-:q°Ìb`†\]GBwFƒØFd< g8B÷Еº+Ô , Ë&§6É!`ÕmÁßí*çé./lB`C×…A:6Ð#]YCH‚®ëîn8q¡Á.Bÿ�"¯³Ycø€f­ Vj%²JJJ_K°=ŽmoåÎU²þ:¶fð pöá¶(ëë èÆr|c6$‹–â+ŠÛ*C`+Í`kµæXZÑ•'6NÐÓ­ å Rˆ`C°(1·6„�"¼Ž ¬öHñÕ̦Ægº®» Û¢ )�B໢­~+Z,¬9|@R%²JJJlcÄ×Fëý¯?Ž­ˆáÞ‹ï} Cè hû³±À¶?q¶±~÷!VŒm¬xZ3¨B‘aíàšÜY½G£±ØF„"˜z>3Æ¿ú ß=;>�1ÜZc>\è2VЬaÇ7zÜ­UŽZ- È:Øðû;Bû« !œ¡ØÚ8¡Bú ²V0«¡ÒYI5öRRR:¯ºÈúÛ˜l Îm_Ó~Y…ô'öölBú2­?�3ÄŒ¥Åº±ˆÆ^Æ0¬Ã¬–3w…k٘˴® ÄD·#«Y•!zÚ¯®Æi³Ù2°_!Êx_Î}ýR©Ÿâ´átç�õ½‘— 3PR «¤¤¤¤tÉÔ7½eÁèíÁ$ÚF¬´f2”G™Íu�µ­9.²Lo匙ƒ±1WT}x5§ÛRÙ ”ΙTh�’’’’Ò…�ÞO ²*¯Ç(«aŸñ{€ØŽv¯=¨õ±¢� ~±�ôl2bÁ¬V}Ä-@�«Ò…~BVRRRRRºØõÐ@ÝÚÞº%H£9¢€l_öí|€¦8ÏÇ>̆Õo´ÆiV!f�UP«¤@VIIIIIA­Ìönû3ÀÙ;±Ùq�ŽqaÖ ­f€U!J d•””””TýÔÇeúÛåq²OD[ÿÅNqž�½ÞG˜�ö]A¬’Y%%%%%U_ `™þ6ëË´s ±ç«®>u¾U¼¬n­*œ@I�¬’’’’’ç?úžŠ-Ööˆ‹¼Ïçsýz?€VïbÈ*)�URRRRRõØy[ÑGø½Ðõëש×c- b•È*)))))�Ÿzí\uÊñM«gÏvÛô>- b•È*)))))]˜:Nœ£éß–:>œê},§¤¤@VIIIIIéA­ªK¶ `•È*)))))]ĺOÕ�Z±J d•”””””¾auá·©®Õ8OII]\JJJJJJª^üÆ®’’º`•”””””T©VI]¤JJJJJJJª¾T«ôµ×ÿÃíh @©¿IEND®B`‚icingadb-web-1.5.0/doc/res/service-detail-preview.png000066400000000000000000004561741527064444300225050ustar00rootroot00000000000000‰PNG  IHDRÌ_É}j ‰zTXtRaw profile type exifxÚµ›gv$;v„ÿcZ¼Yì9Ú�–¯/�EÛìÖô›yH³2a®‰ ÌþŸÿ>æ¿ø*)DS©¹ålùŠ-6ßyQíóÕïogãý}¿æ´áuõËu“Îý×ZÏ%ÝòÜfk~þº·ë¯ÞþºÎ«ô©¡:_oŒ¯o´§yëë·†üó'hDz½^ µWCÁ?o¸Wý™–Í­–ÏSûùûzþ1?F¿bý:ì_þ/Xo%ú Þïà‚å·ñ@Ð�3¡ó¢ñ[o3`¾{ˆ÷J ùÕùÉNöÓ¨Ìw¯¬ý~ó—ëﯾ9…ÎîuÃ…¯ÆÌï¼îÒ·ë¯Í5ñ§žÃ|ïùËu?Ýü>�·ŸsV5çìgv=fLš_“z›Ê}Å�“‡ûXæ»ð“x]îw㻢wâòe§|OלÇîÇE·\wÇíû—ñ0Äè·/üõ~â(]«¡øæg°/E}»ã ¾Z¡ẩ{WýûXÜí·Ýt¼wzGcŽ'¼Ñ¯ÿÄ÷o:G¶uÎÖÇN„ãòJ †!Ïé7wáwÞâ(]¿}ÿ’_L×Ì• v;ž&Fr¯ØR…ëèÀ�‰¿O®¹²^ `"úN †¨�Îf’ËÎï‹sرâŸNC•¤ñ¸”üb”>†�qNõê›gŠ»÷úäŸË`ŽH!‡‚kH&|%`#~J¬ÄPO!Å”RN%ÕÔRÏ!ÇœrÎ% üz %–Tr)¥–Vz 5ÖTs-µšÚjo¾À1µÜJ«­µÞé´ÓrçéÎ ½?ˆ#�<ʨ£�> Ÿgšy–YÍl³/¿Â'V^eÕÕVßnJ;î´ó.»î¶û!ÔN8ñ¤“O9õ´Óß½æÌM;÷Ë÷¿î5÷æ5=¥Ë»×x´”·&œà$ÉgxÌG‡Ç‹<@@{ùÌV£7r�|f›'+’g”IÎYNÃq;ŸŽ{÷Ý‡ç¾øÍÄøoùÍ¿yÎÈuÿ Ϲî7žûÕo?xm©ÚP4Íõ�ÒPFµ�ôÛqlWÊôk…2KÁ,Ýíu­ÔÛHmÆHÄ“ äEç�‹«äN.ãØ9r €üŠ¥ívƈç¨ÄµÁûòS©šXÉ,^÷BÇkº´g÷ædâ¬�}�ñeÞb"®žžüÆäÃî¹W Lo•²íÊÌ9í‘y,ŸÞÖš•b ðš•¢Û1çŽ¥Ž­Ý×G`³&׸ÖÊH@ÁèuÓ¾Û½O;y9ÏU?{ª%#wgæ%‡ÚÜÂÞ™6öÉ}ÓþÆôil\Ú¾r÷ZM“æŠ;aO,;ŒŸ»4¢¥”Ed×vÉ�3}¬ …߇¸‰”‡ÙBMý”¶ƒÂlß÷>CIÛ5Ó[â¡E­HÛõ0°2fÞ+¥ybÏ@<Ö(_—E¸œaydQUCÀ’ÅO³{°#®zpúÕò“€;…Fë&G:ÑõEÝÕ9«wÎ0ðgr£˜š,f £û�-S`XõˆÏì¥A™±Ë&s=cªp;ÌÒñzSþ�½ƒñ¡oKTDvUºf ú9þŽ…G:~ xZ˜m0Í2öÎ=ߦýµ ~1«È#c®HÈÛû&>ž¤ûyÀ<í ÌÙqÐ. €ŸCNêÝè €ßÏâÓ“#OôÊ·æY}­»ä¹®Áý5b0M‚`›ÈÍC›;Y¡bóÌýE�2)ßæÂÁøü�ÜîçÑ™~¨3cÞÈæ–ËZrçwPؤ8HN|k�ƒCÇ{…oF˜Å�J\ûãô¿Ÿ™¿æMØÌÚ5˜¥±Û~@¹¬`TèSª®û¿Í—ɽÍ6è¾òü¾ó5?�†Ù,~D›¡AvžÇ!fØØ±´\ 5½U*žXrÅyÛõµ P³œ@>áç�Ök †9ô³#ý�ˆ£åb�¨™ ò‚èè:úÚ‰ñXÆ:Ks\ÃR\^ýi¦Å°Úöá´z Ùø“Y£bå‡�]'³‹Œ�´wŒ�*²¢×¢+3{Þh�O˜XýcÏíÚë׮͟ú&níff ‘S|1öðšðâr½¦ ÙFÝIÿ’e$Ø_Æ—)öø5NñÅÉ;Ü :Áˆ;ÃU£\ýÇèR)¨É@¬xZŽ5®’¤&ÙÎdÒ …È�¹Žè)€^ðcvæÍÏÆ³ažåÇLÄXƒÀÐûQA>ëf¤ î¡0®ëôL}ná@9Èn ÏOêl¬ ¶�ýñÛTû—¡ˆ×åѽƒÊ"¯jéUÓ½ëŒbµÁ¬ê Ù6ÖIJKš—.Ó[‰kœŽºq(÷qò¸}·Q�L2ÖU¹!±d(TlL1,ˆ‘/DF1>Õ6Ž;àIóBAÀèˆI�S´ËŒ,j¢â[–³TIJ †d0Å´é§71‰.Ù)ÅõÚƒ8å¡DÑíbtHOøTJe.¨ø)äõ©­ãþ ÒN M²xç{¹lG£¶¤ä⺙%YsXj)QJÆÖë¤ÓÞ4v±íÌk`+ …B§bõLÐî<“åá#=«²F�~žáõp)†® <]† ) ™°ž+®Û9WóY‹Ê}8ã™3|²cç¾O�•Pr×é»ï™’%J†<ˆ¸� ÀO�¹Ú7³Q"ï55f{]z=ªæ ¢ᜉóI1¬CX²‡t ÒHñF¢bWÙ‡²ð²æÓìæ®àf¯æÖ8!Ì!¶û¹˜S1ØG‹É^¾ž–Ý;†É}d[¶b¢¤pì¹þpÕzË!¬íˆï>¬B¶’ý�á×¼è䣸dH'­j ¨9³É3´ÁWR^} ×á_ŽhÈ$0<)Á[i¡ñЩPö™|Áª Ÿü1©Mf/êSƒ~m\Lh*å$KÎsgOâmر¸b»Cä`¿IÔÃ>DqN¾túŠÌ¡¡JÎ(Ú!ëHI$ º a~»0E'‹!�éhXÐÈ/,‰p6høSZL1Ž9Ѐá6ˆV·µFQð[ܸ¸7BdqS0-fh_XØ�t)1-òEO95€8ÁÚ@Ÿà¢åÛ:Ìw’s`”ÔDrÍà ú£ãò©ãÔÛ­·€ÉV° û¤à&ôqŠ�±\¦<®pµM –_ºŠS„z"Žª$ÖypH¸ÆŸ l,21�¥i ¬fÑ(¹UôP#lOœæFú4ð¥h2Ü#Â;Ü9»øÔ¸RSG€Ö;éxŸ�æþ™+ ܇ÊÞ CÇÜ €Nˆdب†ô3ÈöHt=xZ¦zUòÝ�šísR!>›6™;h!cí—$…y²œ‡•iB›Ö2ˆñ•è…hî¸\:Ò i,Û/±É•¨„pÍMr§s Ý)¦@È WD !ïQÐHt;U©«ª‘¢6{ÑzÙÄ Ô‚Í �ƒ¶Pùü×QûL¹ž0)bs@‡B¥ú%BOËAà÷DÜ*"‹Š†­£ìÌ#HBW)s®šI4“tºí‰J_IŠ ×À…¨gi¤ ÔvãÈxñ¢VA™ˆËg㛪ÊN%$`ïhÑ6Rµ#ÈJ.áü ª/fUàIØWyb}j®.ëQZªó�Ñ×åmàDï›0 –RSY¾ÀkÀÐK ¢–?îMÊ?Þ2xï¯Þ2ÿì±_ß2ÿÊc.O`I]£º�÷G+¤pµÝSeŒÊLYJMDçsw¤q 7©z@Ø»qk8t(Íà"iO/jpxÂJ�þÀçl¸Ñ*’úr{$0=Aë�ŽáØ B,G]…wu™rtšr‚J¢±ÃFà!*þ8A“ª´µ–^À¹^]ð9*©@ÉÝè“~î#ZÈ£ˆÏèCòÐ<îäN~}ü5ß/üéo²�ã õ�É»-Ì…ØP„P :užø± žY³@ïA |ÿÂ<> ÷´(¸¤ê•B�úü�ÖòŠ–Á||VÁ¼ÝD"ýf ]͆¢¬� &‰H‡ÝëÆý`ËQI? -«èž0ë°Æ¥;2h[”Z&èA8ÆTlMð�B … ª®ÒW“l) è ¤#bo&¢Z\fïTß ¼Ó¶Æ@ÐV!;î")T²$h^p9�J ócÑjp>x…MRý¼ÝUŸÓŒÛ6”t«$­“n*¹¥UŒÅEîÝâ �*Ä¡E!¹ÝD_XK¸†õe8I]açÑXŒ„º ]tµkàŸü¥®A¤[Ž$^™‘ ‰åD±·}3 ïBO:@æ‹&R;‰�ñ”Å�ªh>Êâ—ðx‚ã{9Ü7L ©‹˜­>JDËö†’…ÈUŒtä¬&åÿÝ5X` ŽÊ °_‘ ]Ëţؼ–WUa^g«ú?^WŒAMdÞ2Åã¶TU³Ðz�@cC»"eÜ0N½gÈô2�9œQ÷C1¡"h­YÃÕ¨Ú”¬T!¼*/­­L\ð�„‚(“4–#ûk�¢]ޏ¥+`zÆ$‹*HÕ>µUC²hËŒššÒ ù’Q$À)0\ò&’WöªÜ!‡º�ß&1£:¬‡†yØ*ÓHŠ.æµí1AJ6‘ï­Y!MVɵ=3D¾9-ƒ“oðÙ$ƒF-–g»««T‚oôxw‚µ´î0–rFX£ù÷—@1Ÿ#åOâÈÚ—­Rlr ý%kR@7ÉÀÞàJu¯¢s–jéŸm•_–. S-+�ö]ïÚUüj„l�¦Dî�píRQÄ?á~ƒŽs©Xš6:¬–Jn|¨˜ ‹ÐuLð<@ÑAc¢éúÎðp¼K%Ý‘¹µDN¨âm™© p … ºÉK™¤%l;é+¥rzèn» z.]FMFteÄ$ô²vƒOc¯u“Ò°õÆ õ BBš@zöö æÒDÎjšA+ŽO}ž£óûmlÄ•9IeK §wŠÔwHÉÇkí›%ê›qÐïŸZ|^›÷æ_B3VAÄÝû—»Ë3óï�åym>7×ËZÄùCz¸tøö?!vnèh €A™É[Ãzûï7+­éôy ›’·Í'wó¢¼MÙçùÊuäýÈH5 ‹#s‡+“6 £Ó1� 'Œ¶öÕ´Îq$Õ­®n�²êDÅC§âà“Ÿê A}A=IÂ7C’¥GUÛ«ªµ¡7fþ´¼¢Jô‘>íkú䦒Bv‘˜ÄQõê¼ëiîÕ‚ìƒ-�V‘k ˆ]1�<Ûš”Gºƒ&}/“NÉGeÕáË\ 8Zh|€‘ç¢zSK�/T¢%(Ù‚«i_Æ ¯¢” $&b“‚XšÚ£ADm7=XÇÿãF‡ZqPPF¾¡�BÜ’në1÷©÷Y¸Oó!*P&~X.X.ø±örÎ=ïôÞzy^™ßvTÞÆöÞvÔY¦é‘¡´ê¿í­3óKoqÍ…yºgnQìÏþ§Ë­w5Q@Fm�¤h§H2I›2\_hw¦Ȭ#aógŽö­sÈ@¤¬B ¦v§¡GóŠ�ñ1yó}<噩†Ð̦­RÄåånhŠWùöþË/«˜Ç,­�_é¸ðþ HŸü"_|6çÉ·ÖI‘�ŽP©ÜŠ'®Ñ¡ð¢­Rs¨èÄ3vákÞp�SÁ)nxÞ�q€âÂ…MjíN€v?)漇Û+ÑF¡#ŽFù°w\¢­]G4tüðÜçfù?WjŽäÆ®Q1¨-¡9tê:ê´¢N]ã{X–�‘;Ä^g ÐÒyL´ 7ûg Y§‘¶�ø$ú_Ï ò*Z0¡fBV´ ,Ê�Ý }wÎk[Fç3šÔÌ�À£Qm9m©h±¢¾*:q½úŠ-X}Úº@rF´uÚêÓ|Nx2‚YW°¦µ¦Ï4�q<ÏÙ,»»•¡1Q@µêdn\:ºOºÚH>h"0†Dñ1ÿt¯è§½£?]ú×÷” ÕãÙ%´d®Ó¡Gæ4eG—áõ9™Ž §ÞP6ì¾G:�´SB.nÔˆ-0<È€¤ôT´�ƒá‰Í';*;}R`%aC±jñ[hªE'ˆuâcÄúœEVÒ‚ÝMG- mu¶{‹9PNmV‰íé~”�ú8σžñ0Ï饌]OYÕ$�¶9÷3EÇIÑêx!S­¡Ì„Áôî´¶žAý»2†OM<-˜÷&RQ¼Öºigaó5wò¿ÜU™~gÐ5üLßI›GIª9"ðg”ç&ÙEyNH[¦Ê:ƒq "S÷ñP5uekEýÞÃê5õ·ùè„æ�îÕùŤ`îàQ°=“gÚ¯]q¾{™æytùñ‘�«Î;5,xo�¦ZacKUô™Šî(W—ÐX ­=ƒ3ƒ–ùˆ6æô©µËxÌ�7±© ß-(W=”³^Cx  ~éß<мŸ!`Øg¿‚ÔÞC»ì§Q˜çHòWW¾{Òýd�Ÿ�aþÞ?Ãü½5~6†ù{kül ó7ÖøÓ²¾Iåyô÷�èóÛë|^ŸR < ‡pƒGé@!¨ïW3ú4Kë*GŸ=ª4æ]0·'ˆ|êezTXtRaw profile type iptcxÚ=J1€@Ûy…OJNyÎ…spsðÿ±2ØZZ亟’­Cp„GÆÒ ¸[©c§�p(Ç|Q“Û ÝÛ“—a"ù F?t„”öTlÛ·þ4 iTXtXML:com.adobe.xmp E[r„iCCPICC profile(‘}‘=HÃP…O[¥¶T¬ â�¡:YqÔ*¡B¨Zu0yé4iHR\ׂƒ?‹Ug]\AðÄÍÍIÑEJ¼/)´ˆñÁå}œ÷Îá¾û£ÂT³kP5ËH'B6·*_B˜j!‰™úœ(¦à¹¾îáãû]œgyßûsõ*y“>�x–é†E¼A<½iéœ÷‰£¬$)ÄçÄc5HüÈuÙå7ÎE‡ý<3jdÒóÄQb¡ØÁr³’¡OÇU£|Öe…ógµRc­>ù #yme™ëTÃHbK!@F eT`!N»FЉ4�'<üCŽ_$—L®29P… ÉñƒÿÁïÙš…É 7)’º_lûcîͺmÛvó<WZÛ_m3Ÿ¤×ÛZìèÛ.®Ûš¼\îƒOºdHŽ ò Àû}Sè¿ÂkîÜZç8}24«Ô ppŒ){ÝãÝ=�sû÷Nk~?ý»rx@\&¤bKGDX’¼Í`¬L pHYs  šœtIMEå 1/Š­£à IDATxÚìÝ\TeÞÿñ—03Ì`ŒòCÌQ‘%�1Q)lÅÍÈ ·p5u“{ÓÖÔ6üîf÷®îý¨îVïîtw¥-Ì »Ë_mXb¢RbŠ?À R0IÇD@’˜füþ1ƒòK-µöó|<æ�à™3g®s�3×û\×¹¦ß­!„B!„7ÏÅ[-àJPB!„Bñ£ Î=nòó…B!„Bˆ[28÷øžž'AZ!„B!Ä­Œ¯:8_K°í!Y!„B!Ä0@_Uhîq�Ëö¸†õI¸B!„Bñ]…à®–¹æàÜÝðÚY0îqáY!„B!„ø®ƒôÅvþÞ� }Õ¡¶£ ÜÕO ÍB!„B!ndX¾ØÍŸÝ ÍW;yWËPÜ£‹ß¯6˜ !„B!„×”Û†â‹]üޭЬ¸Ê°Ü^@îèÑQP–ð,„B!„â»Éå¶!¹³õôèh9ÅU†åöm~¶˜%$ !„B!„ø>Âs{�¹©ÍÏöt—¡YÑ��è*$·|´ Κ…B!„Bܨ°Ü2(7¹shË¿u´žvC³¢ƒ€ÜÑ¿Û Éžm~vÕÛ,„B!„B|W�¹½°ÜØâg�a¹©Íó;ŽÝ^`îèë¢Ú Ëž<<Ú ÌÝ Íª…B!„BÂðՆ喽Ê�îLÚ–Û<¿©Eö¼Ø&4· Ð] Éîh8¶§û¹Í?-~oÛÛ,³g !„B!„ø®tG½Ë-{•�îG�6¹óbk›S/¶ Ì] ÅnÙÃÜÜ›¬t?Ú†æ®zš; çB!„B!ÄÅ.þ¯£žåæ°Ü2�¶}íül;4»p±«¯•jÙ3Ü6,+åÅ‹MÿÎ{qúßvIUB!„Bˆ[ÐÆg~¦§ý¯šêÑâg‡]Ñ"Óο[ç¶¡YA÷fÙB!„B!n—{ ›Üy¶ùg—½ÌÝéaîh8¶f!„B!„?„ÀÜØ&4w«—¹å˜î¶a¹³àÜ24 !„B!„·j`n9ÏVÛ[�;�KË£‹•·]QËïYnÎB!„B!Ä­¨mXöè"(÷è,0wÔÛÜÙÐl!„B!„âV Ì\ý·8µ˜¯&<{ÐuµB!„Bq³t”; ÎW;$»½Ð,„B!„Bܪ�¹åPì¶Y·Ë'_�\e¶B!„Bq“t6ÉW—=ÍÝ|�ŽV&�YÑ>¥Š€^*42Ó�B!„¸ù�ùª{—áê¿êš_è2;å{Ö²fs.'j€Ý�1$<1‹˜þªë/ŽÆ|’Ÿ|ýËˈøe‹!ÃX5ÖÁ_×ãhãåÝ3qò=Œ?}ˆ?äûðÿ~u;ïâÝs­EÅ�µG«8Ùôî՚àü*:˜;}Ж:}ZÂ;ÇêqÈAk﻾Á̼{w÷õBå8¿åä×§yÿI}Ó$$„B!ÚáAÿð0¦úžáïÍX›ÿìéÍÄŸêñ.)áƒrçµ掂ów˜¹ž b+ÉoWó‡dž¬�F3…ë—±âÕ­èÿ7�àë-gO#óV†A¯Yýi¬áïÍPßYê¾�ñÆýë*³®¯î¾•xöaæ„x>LÒ‘:¬M ú‡‡ñÜOè®*`Û7ßÉñxë½ïCX¾}(Œë‡÷™rÖeÖp¬® �_Æß9€ >øn)$뜼B!„h–‡ñ\lþxò§ýf¬žÞL|Àȯô=a°ªÌ/x÷êCsG¹µ[YVÑE ¿ª•uKe9Õ¾kÜáH‡aÚb^¹_E fò×­bíÞØ=Uø†'0î‚=óY5w+ÊŸ)ÉÿXÉOG›ø„y¤’™? æèû§Ú}B!„âßUŽ‹M®-%�þØãy¾™¦ïé^¤»óÆoÙ�ŸåzèhŒu¬X¹�]ù&Ì €JG`€+@[÷¤’òyfÿ%•”¿-å{:Éå€(¡Äñ0ËS1õÞÑp8Ÿ÷ðekA>'†ŽfLËžåʤ¬73á…TRW/%Îú)ÛÊ¡2ƒä·N0òw)¤¤¤ðlT©«waþ�T'ÍÐ<¤<Íóiû˜—öï[nãξv¶}RÎÉoÏñÎÆÃl»Ð‡™±Á8Ƽ´<³ý,ýG‡ñ h|nÃהϼþ‹m&Cà뾆rçÀÛ¨ýú&ë¶�ç‹jo™4Œ©B{yNªÏÙ°6y"JEÞ¶ÌK;À+_*xdü@B»¨ÍŽ&ôþNÞY·�׎yp÷ÝaDšKx6u/Ïî½À°qaŒ÷VÎxÇ)žÿÇ>æýó8õCÙzûMœ¾W Oÿ<‚G¢"xnb?ú·Ù”€Ÿ cÉ=�Äy:\}ó꥾QJ3쯹òâ‚£ŽmNSÐ�»{ËG‚B!„h­ú_GYºû ÕN%#Ã.‡å†ólú°�ÎÜøÄ|ãS@¯1$½¼˜‡ûT³/m) f'2ÿ¥Tv™¬€�ÂÏŠ¸7ƒðÔsoæ/ò©ðô%b´ Àà1Œ¦€ü“Vò� lì4-^Ê|¤€ } 1®uMøm K Æz¤€“ƒ'§wÝ3|ï= ú*�"ëM®%½úñÿ~5ŽÔ9Í�hf_9c’½Á‰Ã·?r6ör˜u¦6•ÇOÇPå7ì?fs啳gÈ» eh?× Gc‡ŽÙpǪ©ò'J (uDö³s¨´î&^`ªgÛ‡Ÿñ÷ãM å?gŽ#uf$¿æƒéM¿š>:Û4Qq¬“Oo†ÝÖùU+€šS5ýð¼�aýš8ú•ëþë×_ñüú£ìûö6îì×Ä¡£g¨nêϱ» †Ý~Ê›Uv;VW¿q@hx«Ðð“a,ß—à´SmqÞ´ÝæßGƒÒü î*×:Lûõ!ò6°6©HT�!„B!®ÍŸT·î|±ÃûÛnNX†k¿‡®g˜¶.Œ �‡1áqàB9¹™kH})Íßæc­wpróædº—mtàð  ¾@ƒ¶9{†1&ÒNê§åLïk"×4ˆ˜ùšV/cµZ@£áÒTb** ÚjÁ~t-Is7\ZÖáB„ÐÜÄb©âï&N^šôKIô}#Ýf1ÇW%ü¥ç ºsËÆ{Póõ)ÞùäG[,£T+Ñ8¾uišìÔ;@ÓÓ½ËÎËÿ÷M5挢f÷…†ÕŸåó7ùhqÔsèÓb} (Õ ªç—w�àWõØ­VàøÖ�ýÒ²ê=ÐôìFöüö[÷¥"¥“ Û¥ÂZßJ•wÞMTóyxÀ׊›W63ïf¢Œ7ðP Òš�¿­ã×?u‡e{fæ³®ìæfœMàéÑî…«CÁÝ£og¨ BÁñùDB!„­yzsçàÛÜ#_›3œ7‘ƒ|ØVÙb"°˜]ox 0ÏÅäaÀ¨w'Ó^ÁŒùÅÃ|¼Sµ½�’�Ó–³l’®õ ¯XWX´ëÛy˜‚OP2$†ù½p 7vÓh´8.¸ V`­¢Ü¦C×K‹&2ž”E1¨n¥ ÒÔˆõ‚�êKïÁI}»ùÇIéÑcüõè1ðÖ1õ¿Œ4ó‡/[äÍV¥¾î2ñPá­ë·í¬°©ž¥õ<¤ïË=–Û¨5�º©³l+u}¸§��}_Õ¹îÇuØ8z´”ÝCï§æ›¥Ÿ ¸®>)•x{:±6´]“Jeƒ(šœX 4^ͳ)ðó‹«ÍÊ'Y‡ø¿Ê[èF[›™u…Ð"4ÿ1´ù*À-–�Šê:ê�~Dõ>Áɶ\¾©âµí^<÷P_j>9Âgä&f!„BÑ:,_šà à[V¥Mó=͸'»Á›uÇdÛKv’¼r-9§ÜoµÑŠi÷. ÑÖW…᮪÷ecj°Sþq*«>.oeCc0^øœ »M„E¯èÖ �d i»*ìÐh&'e ÉU É ¯rÈ®tõQZ�e°jMîææÐÑ‘,¹G‡Æ¨·rÒâDé46A%PsŽ£ŽÛˆâúª ìÇè^ßp´ƒYåªOœÁäÌÔ'ÇënîTëx0v¿ú‰�ë=âAÀí¸Ûߎ©ÚFuÙyNûûóS?Àƒþwø£ÿæ<_ÔA­Õ�w/ @ÏÛˆ V·?”ºñŽVzpçOúàëš�A<÷óA óø†/N+¸ó×ßñôfüxSCÉ+ë>ãï'ìò� „B!ZÅÒawßy9,7œgSÆïjqO³ÑÀ‚a7¾»óz{˜¯ºk;pÒ3<ëXˆW泪ÖžÞèGÿ‡Y½€{æ0ÿëU$ÿnöF (†Y¿ †öâ¬g£GTóâž0’~ÛÎXê 8æÏ¨ ù¿Ÿ$ݦD7| I“õà¥ç©Ç«I^:ŸŒ&°«ñ@bºHu*ý×iNÿ,œOx@XÏ�æ�ýuPg2sFþ;?ãÝìrÄYåM6 ö}IÖ7€w;+½PͧUCˆèyšýçorðª<Á_÷z0Ó8‚ä{(i¢ÞRGA^!ë¾nN²úP8sŒf<@ƒ™w³OºzÅ¿*ç“°Pž{,€Zk§-8Úªídÿ�NeÅœp×ð}_²»Þ û‹8!”ÿù�0 ‰ÚŠS¬¾UzDmfÞÝZxDgãÃí·FX ©Ž>.&xR8ÿï±Þ|ñÕYL  ëÝ›¨Ø™‘ÏÕN„B!„hÓ�äè¥ìÆx¯o.Oðuæ(K�%ãû¢*?ɻǮ©ã¥Çµf׿'õhgeî{žî`­T@OÀËýð¾xñâ¾ç];ýo»~$ïDAÔýQAÄþz!Λ9c‰B�Z¥F«n]Olµ•”æe±³ÐŸ„߯£ïÆ%|g} eG’µ»ŒÐY ˆíÛ¶ÍULÆ[é˜ÂIº?¤‹†¦™Âí›Ù{ÜNþ£˜ôH4!—>š½P{)P«¯¿ðjv¯f½mI„\]2/�-Ó˜9Jýoql*†%ðû0ÅM�`G­VãålSÞMN,gJ9´{÷óûi†nlcGuÜIqú ¶”ù k®[!ãH|0œN÷rWÛà¥ÆK­F}Ý]aJ?J'ëh-N@;8–G4 óøŸ£~ȧڮB7"žùsâЗm`Éë�ô—D¼·/æEÓH&4QTm¦Ê¦'aQ‚Àœ—Êò´\j•:ô÷Æ ÍÎ%`É2‚ì˜v®"eK!ÖF ÏH¦ÿf1A]µ¡1LJâYÇb–lÜAÜŸâ l¬"ç­d6|V ØÑ„Oaþü8øp)©GÊáÔBê¹”y£-í.§o“¹­7°ÃËâ¤xÂÜÿ§ÜçìTüv#;Ž�a:µäþãE’?/ÃÜ@ì“‹H¼KGÕö¥,)Ÿâ Ö2RRÙñ•”ô÷Íaþä04í–k$%É)äÔÔóù¢åX¿£)�W×çQå°c÷aÌãÏ0g´îŠ��±µš˜gÆ �Ö¯_±‹ä¿n Ð¦%@C˜£Å~Í^CÊæBj4aÄ?5�8ý• ª>\Ì‹_�dE|~ªŠÚ>qÌù™•]Y…TTÖÓò³,Š*aÙïöa\þ\ÛêéÙ_e· Ë­®×ÖU’ýU6±Cb;½(S²9…U™”×+ �eÖÜDÆ@ÉÖWYñy$Ͼ½ˆ°í‹yòmÏ�¡bs:Eç• œ8ŸEÿaDXo`Åê­”\ð&ìþxú¬e‡z¯/‹'°:—´ÕkÉ.®Æ¡ â�y®òkµ6ޤ¯¤8â÷ÌáÄ´'�Ì‚JœM€VOÌ£“1úµ8UõŠ rÀŠŠ¬ÄÇjÀZDáY±#J()¶B€ûoe‰ˆp¿’9—œÊ~3Í'kÉ«ž@\@Ç;ïŠ%Òw9•€;0�™CÉ–�äŽMbL¯®sgË[ó6�q!†Å/´8NIX´œ{¬šk Ë4U²÷ƒ½8ï~ФZl¥¬~?‹ gâ ý:ƒäÜ`æÎ4¢J·¬à@¿§IÅÛÒØV\U«)V(=�øZÀIYÎ&2 mhu¾©l—Ç$�/$ãƒT6)À !÷NcR¸°u²> ¥»¶�}܆'ô‰dÒä(‚À…b26fSÙÓ__œM íòô^ÆÞ÷³(µNP‡M$áÞÔ€ól>™ŸRé§SMèø&6?Žr¤bªªÅ¢1ðèôXW@²•q`K…u p:Ñ›Ää˜ö¯aóé ´ß˜àv>g‹1yŒ"qšm‡åÐ…^#ÈS$Žr-ç,Ngåþ fωF×Á6¨qRúþëä÷›ˆî_Ù”Ö�"tsï×wZ– 6¬Är¾ý/ž%~pëq¶É‰Âà }Fÿ°Tîz�Ìúp‚ì5˜Ï�ÅÒ?–™†_ÚΣ›xy»3»p›/Šy©Õx©Z6Ž2ÙrLMhD(þG»Ù5R}ˆ-•¡ûÉPô¾eí4j8°ýj½·7ÎÒö^00ãé(t6 7½Fv¡‘Ä‘êKM$/µ^êﱩä¬äÐû™|ãÚ犰‰L¯G ˜?OgýfU« @Kâ¡(óÑL2ö—áô§2„è‡'aèÝÙqÑÙ±Ùa‘ñj6¾³æ^ ØeÛ“ÉPLeÁ}AoCíÖl´5²ŽygpâǨYÓˆêÎêClù°€ZàTroô®ó׆ ŠÍfj¼cYøDÔås€­Œ½[2)®S p‚vÄDƆ p²éµ/Ñ SPwÞ™s "�FtßæýUIvÊL‘ ™=VÛí]â¥V£n˜�”~´Ž|g(Ã… 8ÕÝÐQwÒ`óbøäLÒwÿbG—Û V£öRãu�UÒV¸�-¥AL›ŸHˆG Ö¥±9/˜ÙcuTîZM¦j*³ctÐTIö(¦ºêG‡õ¡©’¬7²Pß«§,§�Z'„ŒŸKü0Eç税>/:9çu¨4ƒ9`ôw`¶Ôr¶)”I¿Gˆ œÕùlùðSj›8›èÇ'01TÛévß¶öÛG½Mlym/A¿žMt}'íÇzÙïg’_Ùj†ßç>öleìÝ’AA…<Ôô5‰Éw·_že‡‹ÑÞ‘H”¢’5‡M8è]çÚS™$¨fêS±y´ùÝYÉ�ôͨtâÕ'”QÁ5d×FñlBx«ó´¢Ïpü¹žÐ^ ÀŸáCýÉ>Y‹56»_57ÕMèa®ìÞ‚ž=ñôs)޳G¯m•;HYofÂK©Lècf×òE¤l‹`ùðMc¨=|‚€ÿ}žçûØ)|s!«v–0a†•�oå3h~2sF(1m|�%çá1Oà\6k×Wór*ñAv ßXHò{ùŒn/µ#8j ÿ,âXC<º‚µ¤‡ñÂßÑcbÃâ%lØÃâGçw`ÖÙ+™ö)í/Û:z”�@™p©~IŸ1Ü3d »Š«˜ÔR=d9+gë0ï[΢¤3&r¾-.6ä¿�Ìõ,–®ƒÎZHêâd6 MaŽoå:w y¿+áþåIŒÁĆ— øÔJžWa7e°*3ŸªÑZ‡�“¹IÒÀ+Ã\ÎÛk)¿ëRÓé ^X Úq@ÅV’×W3á¥â‚Àœ½ŒE¯§±b:Ám£�Ô—Óùó$hJHýÍ‹¤<ËòÿšŽ¦(•ùoîÂô³)Ä ]ËöƒUÄ=�&r ÀøT…[–Sv× ¤< ÖBÒßȧð‚ýÞ7I·ÅñJJ�¶ÒþëEüðû:pä>È£ÈnĨjs¥g:ž Ì�©Gm/#+uÛú.dš¿Κ8;a.‰÷©±ÝÄÊœ|bÂǵêý²êËNëYqUq§�Ùº/…eë Ðýl6‹#kÙºz¯¾ªCÿ§øÖ *{BãI²?®fÖóÐo^Eúöµì¸×Èô…lX�N¡Í@ÂS÷P”ÎÚ T… +9o½ÊÖ’�$ügÁ{“I~ïSHÚÁFÕæ“ý¹šØùÏ®vb.È$«´£_Ë«Q�†�~´{¬ÕWE˜‚#˜5ÜÊ‹E%Øï5¢*)¢¤��)î æƒû0GÎ"L¥G3ÆBʾ*óPné IDATâ ìðB[U^6yõƒZ� ϬÈE¬ùg ÆÙa]ë�,_^lB9"îÊãT¥#ðZ¿  ¶”R‹žØa®†¡zp$áŠÍ”ž�ÐN‚LøƒñT–e ˜2·u¯“%Ÿì<ãžž�Am£ôý×h¾YÂfiÀïî©Ä‡éàt¯˜OMø8ü;YŸ³4›¬³ÃIüµ-NJ·¾NÖ§¡$ŽÕQ¶?‹ÊЩÌg÷²úhM×ÍÇ’¨Ç±`Z(Š&3¥ŸŸ¡¡ Ôfeäà¸{.sÃÔpöéåS6Ž Àq¾ÿ)‰Äö²p(í5”ŽcÚ0•9™OeîÝ:pV’�šÁ�йDfU(‰“¬~ÏFôü‰8SQæ4¢ï°:)ï;õìb"(ò~tÐá6ÄöUàÛ[�i>A3æ² ¯¢åZC<³ 6òß^ÝêVgÉN¶|JâœhüÝA1³`è¥_sÁ—i3cÑÚKIõ_Æ„å¾è£Ðé®@{5½M:ÂcŒø¶hqhGÄ3s`˧”næ€(fF5ì-gÛ^±�YXŒ Œ:³ŽÒnŒéU„ų ÌýK} 5u^ø÷nÕ„£ïðq¨ý¿ÇFQ½çÀXGéQ;KIu/GFé‰Ò‚nd“N—³·o"‰-{˜ë ÉÚã$ú‰¹„ªÁrxk>*$tšE‡õ¡“c½Ã %rX&‡+7!œ¥”h1Ì êtÔZ¾ör z23ç'´ª+ey±�œËìj°˜È7ÕáD‹Â#ˆq3ç2îT&É»Û4Ò÷l¦Ð÷QæN Aa7‘ñF&Ïe\oÀrÂç’¬Àœ³†µŸ–ýps õ!(l8Š€«kêªo7m÷iUBïO$Ô}�‹næŽëx¶eÒX½½§¢/†û&w1¨ÛÐ+”(£íuVɲ¯Lø s_HÄc„?Ùÿ2aÛÉøÄÎꃇ?ŸJ²ò‚˜6kú=¡ž£:ù¼èìœ×ñ98Û@ÐŒiĪ] ³ Œ$ŽvpèÃOñ‰›MB?…ëbÏÚlLúxôŠŽ·û¦è¨}4ºåûì¨ýÍÙ�Ò)ö›ÆÂ™!p*‹Õ·òLŠ�›(P<Èì߆£µ•’ñ÷Íd‡,`Ò€6Ç�ÓDA©Ãc´¨=†ã·'ŸR»žð.Ú,æO3Ùk�dîÂht–BÒßʇۣ¯ ê`†çsÓ 3Aû¢h:CƒÍBå¶Õ|Za¦AÄðññL2è~ä�Ùý=Ë]†åÁáéí�ý|ɵ­0) BKL€Ž ¿M!ÆSmï“2†Ñ}\=KÁA¾X¿2C…‰ Ìv÷Pé'M ìÃ]îðÇóoÄ⺌§",<˜ú½ÕX¡[�™^t8°Ú@½ˆ7#A¥Ð¦÷&ÿ¼ùÊ>¯—Ó´jè[ëëÑiÚíñÒø(©·Ô»k¦�÷ÉO7r aol§ä\:îMä�ÑÍC¸5&Ü¥"ù3æ€ÊõBQ‹}è�ÆÛBþ¾J|Ǧ�'©�ÂVÓIÌÁ±ôo;ô·ñE&ÆizW™ˆaÌÀ�æÃET ‰½Ô£¯à·¶Stn:Áí _W�±@Á½•˜‡G¸J- _« 3Œ÷D�š™GÕCñžÌ¥ q4ó†‚*_Kõ‘rGÄal áwÀNNñIúßµˆ@OW÷¸‘ä´×æ Ð♃©Œý[ö–Qúµ¡�¹zP…`õa݉JðÔz»><Õ:|l,M´ÕQïrË^æÎF_ä,ÀêƬ0ö½ŸÓ7ºëpÄC³˜`Ta¯Ëf뿊(¯´E�ߟ=Êô{ 0ò÷­ Oáªs£ó&i(ÑhTàcÕž<**í0´ƒWQù uðåa~=þ‘ñLkg1½1Íßò15Q•àþ(�áV|7RÑh„£%¨Âg£÷¨"gŸãS®FTðØ1ð×lʽ|�¥vï ftÿâ°£ M|Ò<&èZC†iÓé¿(•­÷-'Á·ë^掖·Ö[Ñú·hÖä¯bþk¹X<ú¿d ú«<¹Úl8Õ^— ZÔêj¬×x¦¯9K­oÁjWÐ à©WC­õÁ’—AZ¾uÓYêl¡ØšètVŒšò2Ì•lJ=Ô|ͧªPRYíÀ/Ú}@÷Ö¢íúþAEÿPüve’–Nø�PÂG„»Ž{9eÕ}¹Ã}üàEÂôçƒÀPB{hÑù*(®w6ÊÊj0Û6³¦Ø½yNAfW$óñõE¡R£¸M�ÎC�Zát5Ю¡¡Fîø(›ÂóÑŒS!¿BOÔdW|‡ÛÐW�—J·[ôžuQ�íÚò3xé£ñ÷pí[ý@vž®ÄuiE�ÿ½«Ñ­Ð¢ó¶ak9C¿(â¯úŽ(-ú¡ßçØ5jnãHÀ$«1Ÿ¹šçZ(L_öât#˜©o]¾ºPßk³Lí‹úl6›Þ>€ZåäŒÝ†W_Tš(»`¢ö�5ìu÷<¡4Sø_C}èLH¤Å»…”�"¨ôÇúxª7p¼ãmP{¨Q*t„�¿âŠÿ `j?JcSy8¡CùÃÐÕh eBî q-§ !4ÈL~¥zª¾„¸� _5 Õ6œ—NyZÂ'Ä~µo: ¼EÃýûàEHd4êÀჵXJ3I{AO'z=ßžª Â0ìú�%›Í‰Z{ù‚�B«EÑ`£áë¤J•“ ;Æu;tvüy¡»¦sžëZ»žµ+úõÕR[]NegÌœÍL£¬ùý㋹ô½®~»¿Wµ�šÚ|^¶×~t–Qjò"tªû8ËÜg@¡*#Ó¤$|Š{‘:”È0%50 õ°Yçñ|L�Ùè Êð�,Ž”Ø7¨;­Oå§jðÿÉ4×>êe *,›R[ç=ée»7‘m�fê(xX ×ã?t,ÑÓuØJ³H{3úÏ&º÷�80_ŽÕxy{M!Îó%­Â²­<ç¹âk^µÕj�ærP©Ú Jµòòß=.=»Ú÷ò•:�ßæ…«È}o-‡«qxÖj4vÃÎÕböôv /0²5m¹åðkM=šIí¥ÿî,§Bãí�ÕÜÞ¬AV¬u¼‡º[í>¾—ïáViЪ뱶ªÀf¬jÉe9ÍË5:PÝeîf¹ÿ»$xo+©ÿµ†jMq�Ïcú]­›æZ J_ßvžoÅbõ¦¿úò{Óy5‡ J�æò¥•�Ú�Ùj%çI¤q€gqK–GÏÖÛ§•Êý[‹ïõÖDÆñV:û*â1~š‡ý®y®ûwûó·lfë« yµ.€È‡f1ÿÑ`¬VÐz_~¾·Ö›v;I<µøj¬˜/­³�»¢Õµ·Ûyׇ= Ååá0@;“ôõéÛihîëÓÙÍVÌߨA鋯]�ºÁÆN†Þèz©ÜÅ­A‰{›¬V,� ë£»ÔCªëu9”WìK%es>µV÷ä[]´¼ LžÑ@öþ,Öï6CÐpbœˆÁ¯Í©jpaötŠ*ªPCج@èc ÌóM «« ØBØdw×Ñ©l²�WP½x[›Ÿïðe×ñé$º‡ùŽ{Ö}³�’<ÇòÚâF´S½b˜õp6KÞÞEìüî\ky�·Km‹.°³Xþçǰ7•“þßk°\ËdÞZÔ¶J×s=€& 6›>àÛï ’4]þ0Ëß¹�ÊA³I­sõ¯·uãÃF�ϰI̾â¾R˰tçý÷62óé¡Ô˜LÛËÚœb&Í™DhW '�Ž?‹ôIk]×Ìû/P¶º³²éÚÊ…žÈp‡+ WRK¨ºómh~u/oí•Ú•ÃM¾vC5•ñiÁÎ(Þeu8-5˜›2X×k*3ÇvÕ=¬Å��„Ái¦xÛzÖíÖºF:Ü æO3ȶDñÔã´Med¾–Õõ“<(ý"™:gÜ•çìïº>Dbð^K¡)šÚ/L„Üù «]ÔÙ6¸ËUÛNW§vX ×`*-¥ô³wYýÅ8fÿÂpu½¢M­�g…ǭª Mó™P;Ø@¨*‹J „ö¾¶N¥ÀYßîVˆÓfƒž®¡Þ¶+ÏÖ®sR—õA�Ö»û‘£ãϋ年;ZO!ŒýåLŒêëßîïUGí£¶u¦½öc“�›u‹VN õfJ7®àHóqätB¸åŠ[üE)æÒbV,k>�`û›ÁØÉpx v'jõå%´Z- [ÇÈJ·­#ó¼�©Ó£]Cð !zòåz  ‹eTÐ ŠM6¢{߸º~šñôòkçÌç�×€Ÿ¢ô‹h–ÛÅîxôïh´8.˜¹­U”ŸëæœÅ^JTë妜ÕL­û©Ö=kXUÌ“/-gùÿ.gé/®ª L99T1æe'ÿ�dv©§ð ׺æŒlï2Vw—ƒ°aX r(l{)МKÞW"tÍ©ór¹Ø­XÞ—‚“;>¡ñ nI*©«Ý�Ô4Rž2v¿\uâŸ\ÌòÔðÊã䥬%·ÛSF«Ú„x Í×4>ZVk«í7Û´è4F?µœ•+W²òÏ/�0ð*vŠÆHÌp3¹sÉý FG»÷©g ÆGçñ|rÿx)>^Å{Å4j°Ô_~3µ®rzB5^*¶ú§•zjou·¯bÝxÇuü¿ �V×=.U‡w°cg>åW33¶FƒÖÌÍ;Çnv]¸�ÃÚ´*‚§ó×õï±>it·F`¨ƒ£˜4m.IÏ=M|pÛ¶¹rÆT•ã�jJŽPr^�a àÙÃàZJ (:3ˆ÷8¡’=y(§½ÂúwÖ_züõq_ò>)i·\Â&'V´‘÷޵_Y˜Å„sé¬-èÞtÖí-¯�ƒ‚}ä7ÿÉSƒF§C竽öÉ}õè{™È/t•–ÍT@1¡„özªQX-Ô4ÕPYikÝ4ñp¶îEèã‡omå6ׇžéD¥{l6+èzûNjJJ179»\Ÿn@”Rfw5³*fr Ü hñ÷Sr¶Ü5"ÂYm¢¬Ãi-¥8tZ�¨�qÆ©®¤Ò¨‚ ñ;ñãî÷xöëÞÊîbæX-!Á^”•ºêZS ù;÷bê4ÿvU Št �=Xl#|¤þRoØÕoC'åÐ ÿà¾8¿6anr�[M'k îfH<}ˆŒmùÔð}³P¼+Ã5!W—çS=“æ'±à×s™ûë¹Ì„Îß:,ÛLìÝ’Eq‹/è0祑üÏBWy+|ðÕ*¨³Ønh9ØêmxõöC 8Ë‹1YZ_0Rx€ÓÞæ=(„¾µ¥V»ê›íø^2?¯éF}èàXá#ü0}‘Í‘š¡ÃÔ]nC§=Gy(uú£7D3ñ‘±øU•¹ëa'ÇfˆeÍ绉Ò*Bú+¾Û:t½®¦>4•‘õF{ϸÊÎy¦“ÓŸ s]Ôd’q°ì;Û¼î¯OAРjJŠ/�JÿU‰ÿ ×h8µZ�Åâ®P–2*/põ¡“Z×áçŵ�ó\�“{ÖegÊÍøøƒ¢/!•ºGv^(&û£âkŸ¥Ýf¦æ‚œÌçm€sµçw´»Õ>ê¨Í©nÙætb9oÆÒ¤ÅËÛŸ¨_>˳¿u?žû=Ï>ÜfD�åKŽT„2í¹?òÇÅîÇïg2¼ª�#ZèKW$œ8š\‡¼Tî‹.Í«²X:(¦�ëȪŬéÑ57íf*ËÍ-.Ö8/�o¤~ÙÄS„³®ÅÄ_�vê�oÅ{ðCx…ÄpñâElå{qœý²Óutë€ÉÀîcWE ñ}­ä¤,!#d Ë»ÓÜ/Œþ¶�ä³cSÖ.N4A$`©·@¯¼«‰ûN@CD×_ÔPE᮵¬ÊR·$Ьõø†÷GØ+v‘S\�µ—P¢ò´SÛ`X;\®M~;…ø­/°*9€yOÄaPa=•Ë{ol Ip I¯/$ï3+ÆÑ¬¹”ø†1¥åSO=£#ì¬É.$~¶Mc9ooÄ=�øŽÊu’ìV6€\Rÿ'�°g’ˆ PØ?�‡ Ú„1�¯‡©;mú=õ Õ›Ù‘g"A¯‡ãûÈ=åšHÉÀf“SC\TíÍáDÿfõ:T-‚÷¿¡G…ñ©o¦²KÃ’ÁfvýùUL÷>Ü»t¨üì VTè‡ö§â³ªˆ'КOÎgµ8Ú»/·ÑB­UC@ÛI¢Ž-kHÞ¨ú2êÑÉè@¿H"}6³y]%~Þ:|úè¸|¨?¡-ïnLÆÔK‹úöq̼/E/#±£ŠÉøûjéüÐû¹¯ ë¥çÝ�ÒØtÄÝÐ(Œêl²ö˜H¯GÑÑúO$~X:™©«Q¨]$“Fº>‚ôwÇâ·ñ]^?î‹o`~½[öhwÐŒîãÙÒXƒšœ¨oÇd?×öEÅǰåÃ4Vç(À©F?a2!]|¸Å<ʨ-¤½qÀuÿoX,“Õt2 ±«r脟ƒ×J²ãXЯëm¸¦rh2‘ýv6&‡ËY3 ÛWS£V£Ÿ˜HlØýL:µ…wß*F�c‰�ì^ŸÓlâH±†Œî!Ýר®<šAZN%4ÕQcqrö�JÔ�£˜šÐ<Ò¥ŽÊ’#˜¼c×<ÐùClz¯€Ú&'ugÍðîjJÕAŒ›OxW öJ KqŽžH¸û|¬‹œÈØò Ö¼º×5±Ðm¡<øˆþ{+‡ºÃ›H.Uº?ü;c&Q#Fáû^içýÐÜÁXC)w tz4At‡¶¬áõ£:ÔšP&NGˆÚÀƒ–‘þÞjŠUjPúý°ÇE'ÇzÛ­6¿]éœ1ûò�áN¶¡³žU]¯ZÒׯaoOÀ¡ èÞxB<À\�ÎæÏkqÚÌÔ]P².µ…Ó&‰‰Ç°%“5o)P8�øŽ�D´t�BÚ©C×ÈôѲŽ;qÚÌØlå¬~㾆xfÞÔa}謎G�"ý½×)ôP€‡†É“ m±#,å_r¤>„IcC.ퟮ¶¡ÓKí¬¯Ãý=bO¬gmJ1Z… gŸq<êž°U7,Šà�™¤ýÓ­·mó¹úZêCgç¨N>/:¯ã�]TV`Ú¶ŽCæZ,=£.�ó¢âc9ûÁzVVC“ý½“¯ù>pÛÑLÖŸÇ‚Q¥¼û¡š©³td¿ó%w<“@øu&®î·�Ú Ì!„Þî ³ ”qÁ¡(ʳY·ÑLôÓ „v’õ¹‰èõ¨›Ì~”MݰÉD_Þ`ËÑB*C¢ZO4¬Ð²…GÍD…iQ×WrÖAj¥_š°aôíëOåWǰŒ6¢½PÈ¡Ò:hgà€­$‹Œ¯C™ú„]˲²›È~ç >�$¦ÅRº—O«B¥¿±Ã¨z¸-oîyîáþééÖ w¦é‰ëî]/ÀûâÅ‹û®æ-§±–ni'º{¹&ù:WŒ£‹aØšÐÉÏ’]‘΢ÿŒý³UÌ_ïË’åÓÝ÷37+'ýÙ(ÿE ñ_=ÇÒÚY-¾V hÈgÕÂ,‰É,ж“ñÇ%T?–âzÿ¸/¦¼¼�UÇÆ°øÍyÏ´<^Þh0±ký¶,¢¼T>„ÝË£¿ˆÇÐ!„â¦qžÙËšwÊõë™îy`~ÀŽg�| ˜¹�ùÁÞ­Òdn¿}Ô×Dú ÷,Ù¶NÚ�õ&²ßÏàPe¨ü~¿û[.Í’Ý€%ºÁ1Ä?èúÖ„æöË�ÔÕ˜F-dæˆÖ¥ç<º‰ûƒ˜ýk#g·­#ë8hoó%dˆ¦5ñó'd3‘½1ƒCµ t�¡Dú•±·~Ï>Ò²ÛõUk›Ž¶ ¢ˆeîSãPg‘ñQ>e' mÆûÝ3|_MàíÑã ×uð\7«ÙÝ—Þœ¸ºxš€‹m7'0»rÂŽkþ.feŸŸà5`ü�¯¨ö\–?¹ÃÊç‰ÓýxO�­ó�ÐXBZÒ*T¿[ÉtýM~ó�&6,J�ß,¿êm©úp1K¾¾²Üª>\ÌÓRº9ƒú’ÝŠÙªD§S�=Ÿä'—‘74‰7—Ä A!„?ÀÈLåÁMlΫE2–GŒü`›¿?†Àü#Q³{5ëë'’ôà�mô_o`¾)S%xˆ¥GOŸ«³=}ðê÷ ÚÊrÒŸ�Ãò=®ûÌs(ñJX¯wE®½P*å�{AÏ0âÖ‘³%÷*†OO vo G7�Øïên(dëG˜ü#Ë�&6,JäÉE+ÈÈ/!?c+ùVG •°,„Bü`);“ 0û‡–Ç“$aù¦°ÝÄŠ7²\÷£Û+),1ãôƒ{7gnAOýWš{ôôA£ ÕÌÆß¯`âþã›1gÎm�øñm†uþ¸˜6.bÙÇvC_7ðgOoMgmÞMŠÌ�&Òÿ˜Ès[•$<Gàw²R;%›6p"f>øŸ =õ$<3‡˜>'Øø¿KX‘YÅ ‡ž!é�@„B!Ä¿/ux,±A&6­\ÁŠWßÅò “ ?¼K7eHöå b§þTv—ó•}~âêYöTIÍB!„BѽÀ{�C²oî—‹yªðÖÇÑh9�ÓRA£¥’Ɔ³®ÿòòÃS„BÛ¿ã ¾„B!„BˆïÉ-ñmÜžÚ~Š…B!„BÜR<¤„B!„B ÌB!„B!„f!„B!„B³B!„B!�Y!„B!„�À,„B!„BH`B!„B!$0 !„B!„˜…B!„B ÌB!„B!ÄšâF¿ iãbÞó[Ä¢ŸéZüÕÌŽ—^¤jÚJ‡ÞB¥“ŸÌœÝ£IýÝ©)B!„Bü[3“ÿö«¬Í3 =‹g7¢ÃJÉædR÷Tã@Iÿûç“4I�ªÃåÁ|x¯þm+Êo²8VÓþ«å§ñê;˜ï¡ $=C §Sæ*ÞÜWEO|«60}þt ½Ú<ÙZBúßRÙUé¼1þ"‰9÷býøEž\_E€�ʵ܀‡ùÃï&Øò¹•9¬z=�’z W$³’1êÀZ”NòúÏq¨zò­Ó›1¿J"~°ªëm¦„Ôß,#W©C €’È'—“Ñ�÷ÛXή7SØz¬Á;ò1̓îǘõ�-c‘mB!„Bˆ{þFRK"XüÿÙ»÷ø¨ê;ÿã¯Ì5“Ée&—IHBHIˆI4I1 �V¤"VE)T«R-«kWê.¸+µ¢»Jëe[ì*Öb‹ö‡X/-­Ò¢¶ˆ"Ú€BJ0‰aaBHB2!Ì„d2™k~Ì dráŽ~ž�Ç<€aæÌ™ïùžï÷¼¿ßsά˜KªÛÌšG^dôbnó¯çå9,Z¾”TŸ™5ÿýŠžbÖÁ¯ç-^ܨ!?×€9ô‡ñû5ÍL~ä9f™lûå#üvK1K‹¶ñæ»æýâ)Šu`þÝb^þ°”åßNðvËÛ/R–tÏý8Mó[,ýÉÛT]q&‡‹ô›ã©›C|°ƒ²×ÞÂý­'yîJ=¶ŸbÙ%®Á IDATäÿÐĆ7ÊH¹û9îÊ÷Ž,~£Œÿ=ýpë<Í�G1……ÿwÅÊÑ}ßEáï°I3›'WLAï³ðæC+X_?…»2¿Ä�Ùò»Å¼jzŒÇ¦ÛÙð+ÙÐmÄ”˜‚Þ †àÈͶß>Ï[õI7d߯|¿ø„Q„6Ö?ú –Ü4íÍì;h`Æ5©Xj÷aÝo#ý{�ðõÏá%ýƒ<õíTÀMů³!ûIÅm`ÅUt«ÁãOdÖ1#Á\—HL‰ÙÛÊPß±’{¤]B!„BšËîdy޽ЙH4ºiê…¶º*Ô“’ªÈaJ~¿¯q0{úà¯'óF\¢ÁüÒ¦Ð�¹¡ ³i2wšô—dðêgU¸KôèÕÝ8z�‡ŒcNž¡Î˜÷$O*õhbS0Ò„Ã=NZ£&ô—ô™©°d0yQ`™Æ’ɘþ\�Å7ƒ¬6 Çáp£1QÓÆú¥Ë°Þ¾’{4!Öù èFÍÉk9ü{Õ‹ïã©ÉÁ—±a÷Ɉ:·Û]u¾*œ£üOüI9›O”¢?RÆòÅÛƒ Û_åÕÖi<ùÔ Œ´±þÑeü~×sÜwYÿ «¬8Æ,eÑFª^º‡æRVþû\زœ…7s×·Káù2š¾}©îj¶×fpõ÷4lûeÆÛW²ô2p×—Qf³á°ü‰?Ñ]À¤”FA!„B¤Ô£¦>Gõz6u—²0ìŸÚ‰Ì8>½g0FÐ}ÈÊÔA_�Rƒf¸Ï²ÙéŽ.825Fš.;Ý,îüN�ü×BÖG¹±ÅÏæñäe�>ø^7–¿­§yÒmkÀâp`Ûý2Ë>±bó™ü�û¸mR¿÷;l8ÔŒG³�ÞˆÞS�ÍgdÆ÷g±å'‹Xü{ Ý=Üõx1`Ö’'ñD;B¬s¯šž^3oýïRl"3gpç¿Ì"C—8ü{ Mlxò)Þ¬u“sûãÜm:·›ý¼Ýô˺¿cfF P¢óÉI T›æ½ ¹9ÁåD r4h° õMd+fd”‘±ã2К¨H4½Ü)WóõÈ 6Õƒ»v;û²gP¬×“_’AÕKËXñ»õTøò™‘o ¬KöÉë"„B!„ý9v­áÉW¬ÌZ|Ê3ÿú!)ãå·5ܶ|%ËW¬`Qr+ÿÒê“1¿ý4+j§°è®4€iò\nœ}'?µœŸÿ0Ÿº—^d“m$ÜÆú—6‘²pÏ=³’åó5¼õÒ&l€Æh Ì¢‡¢ϵߙËmÿþË—/åFåVüÉ ÆÃ¼€Tf=²’5¿\ˆé£gx³î+˜ñÁ‘¼C¿¼é/ËX¸p! ï_AÙ‘‘|#¥_7Q]VEuùr¾‘�H¼z +Ÿº›«Ó¾˜ßŸË¹õIî»r.÷L~†•Kã!‚Œ›2Ëmüõßõ¼Ì²·-¸íVìÛ—°øÝ f-Y¬þ3Кn»«šgþw1€ˆ¼ï²dš¸‘½v/=¾”·ÕºuÅÜ÷ï9'¬©ƒŠËh¶TñônánüñJ¿5ƒí¿ZÆâ·Ù(þ¿1c@þÔSú½ïb~þÿ 0NæîEh”0ï_§°â×KXªQãq¹úî;I¥�õ˃7îʵΥÜ8þyVügh@=æjî[˜´±a˜÷}ws×Þ•,[ôø5$–ÜÉL:·Y-,øèÿoÌ<‡ÿTƒµŠÀݶ´€.øˆèëëÛrÁÖjg/?þ©?Zʬ¸‘¾éýMh!„B!„£ ¼aaÓ€À|¸7� q½€�Àº}'<€ó8Ã|¶9¶¿Ìão˜Iýöƒ£ËB!„B!D0póežaB!„BñÕ ¼§9ì�"B!„B!NvÑæ®ÆjÌmrWk!„B!Ä…ÄIËÕ49Fù¶>‡u�Ò/Ý:::pô�þkFÌ׎yg=v¿æ VTZ>9‰rWk!„B!Ä—€Ç޵½ßhß×çÀÖz˜Þ¾Ó|�àœßôËmkd_óü ð÷iIHÏ$Qïåðþ}´tûQàG™Ìøq±¨×Se…H¿“0½†Î^#9 ¨w›™Ú®2ÔM´h'21I…³ÍB½5ð£dª˜TƧP9R¿¿ ü}jâÆe2&²ÿ8�‹–/öàŒŒ· —ÓCDJ6é± Ž4ÕÓhó€Âê2&ŒAïoÇ\s­A…Çéĉ�ÄhÝ—š”ìLâ4îA¿�Äz!„B!¾‚œíÔ[âìS€_AdÊÒc5'g£qÉp°•®¨·h˜�7x†èíÀ²ï à}R&ñîý´÷8QšQf'£8xr–ñ·öMÚÃ,V'„ùñ+ ¤�O%Z*l»èh¨§ÙáGѧ@?&“ #€û3­Ý.\~=ÉY™$„{‡ÍR>—§[Mâ„àëì¥ÁæE£Ñ¡vrD›I~ªò¼çªs˜mm¨S.#Ó¨ÀßÝN»Ç‹ÿðš< \’‡ mµ»i¶þ^0æå«8L}U;6O j7�ö^" „u5“x;ûBr~>±J÷¶bsjñíï@7î²ô ü� T7¶{É´ÖÊ…G›ÅÄ4-þÃõì:ÔIª1OX,ãòˆRxi7WÑjO$3ðxИrHwÐXµ»ª€œ,ö}U´Ú¼ÕƒŸ £\2.„B!ÄW�Ûí'")‡ÌX-t5ðyã!œ±&Žœ˜�¼jÇió¨É –gÇAº"3¸4Mî#´ÙÝè’’ˆnkÇ�“†!ÌIÇ`Y¦ÿk¼m˜[ÃH½ä¢•àlªfÏAc`™ƒðÚirÇ‘›ŸˆÆÝN}C]5x](bó™8ŽXªh:ì"aŒ?t–r{P%ä�]û?çÀa ±4u¨IÍŸH¬¢‹ÆšÝNÈœx.sÕ9ÌÑÆZ÷料ˀÁO‚Aƒ£Ñ�§ÛIÝmø½ v{÷ä� Žr0F Ýî%ÁÐÉáÞh è ,×ïèÆ©�$R gLVfàœú®†Ý ú¼ôù£qõ�¶ÿ½ÁQ¡Dh…Z‰ÒçŦF­8B‹¹”aøœ^”GÏ‹PéˆÐa*Ô*5Dª²Z†ßïÃÑâûȳB!„_9­ Ï »ÛÃësáñðö©ÍFt¿Üt�î0=S*É‘¸=è"õxŽtâìpsø@#®AVÖ`$²÷M6ÑqÑV^¡�Dç:B—èsrм›g$QÚìvopå »ð~·§;ôíÜü>•–p%à¶aïöCßÈnÿ¦á÷B!„B|ÙùðúhµjÀO×á#¸ü~À5h6ò— g{mN5Q±‰¤¥'¢í馷Oaàï*ËÍÑüd þà�ËÚH“=ô½¹u‘:<]v\}€»�=_4rÄf²”B§CÝÛC·ð;è<âº`rÕ¹ŸaV÷P¿ûsP* OMâ8#ªÈ(ÆuícO�U˜…>™ -�Ÿ—˜˜‰‹ØÏžn#£Nø?MãÆtS_û9Ía ‰Ic|¤Uº‰ú†/¨nU@Ÿ–¸q‰(€®ƒuX¸tìàE ˆ6‘pp»¿èD«�!!)š­ûéÐ?䣈;ø÷B!„B|Åh‰MˆÄ¼ÿ v·ª‰ˆO$AÑÄ�æ82ÉF mQžý˜÷(Éš�ˆn°³YuJì Õ´‡© tc2ˆT*pEôÒTkA‘i"�A²Lt*ÑG_“�Á¸än,æj:”oú:ªŒi¤uÖc®j‡0Qc2‰Váà™ÈRºx’ uì¯þ‚Öpá:H® cà$úÑ¿+‚WÊ`°V8Y\ è‚�ˆ¾¾¾-²!„B!„8%}.ìí´ñ±è^:öÖpØ�GVüéÏ…M#0ë >\€ð>ÀO`Z¿ÿ#0P [G!„B!.0½íX:§@÷§ˆ )3 ƒêKò™aJèµ²§¦E˜“Ȍ½0¢ªÌ0 !„B!„øR:Ýfùa`!„B!„b˜…B!„B ÌB!„B!„f!„B!„B³B!„B!�Y!„B!„�À,„B!„BH`B!„B!$0 !„B!„˜…B!„B Ì#äuP¾£žuŸîaݧõllpÊ.¿G·»Ë'e!.(ŽÖ¶6¹¤ ÎÖ6ŽÜEóÙïGT[°®ÜŠõø3T–׳¹Å#…sÎú*'ÕUû©´K�Bˆ3Au®?оÇÌêšÀ¡ˆÛå ÆêæX7ZÝJ¥I‡@ÇœkÇ‘.sàânìÁ<þÐGÇ0õÒñ̹,šP£Jbj²Z 딎°;)¯m¥¦Í‰ÕíG£Ö�`Š¥db"ÙÑJ)Ÿa+h?©e�'•„¹9dë¤HNKÓ>~þ+…7•2?ÀÅæ�å¬&›çŒE/%4tßÐÄÚJ)Å&L*ÀÛÅÖ4Ðì51]ÚÈsÀCå¦ žÝÝ‹'¢ƒ³/cf‚´£BqQfw·ƒ†ö.ÜÁëÃû¯‚—†ö®À_µ:º¼±…g_ª¥²ÿsJ écS™uÆ—ò ÑZ±ƒ';ÒYqMü…ûym{xøøÁíYæà†ÝÊÖn#SSOí@Í^_ËÏÞo¡Ájµ†t£µÏEƒ­“�[*)ß…ÞÖ…ç=S“c¾×RÏkå-Ôt¸q(4¤$™¸¡tSã”Ø+wðpk/^g:ýïè?ÄêÕ ¤Ì�ÄLCè—5lÝÊÿTéXp{1Ó£�¥UÖ½ù9àÖÄs`W·£†Uå4Ÿ8biã½ÔSøµ\~0%ž“¿–‹ºŠ=¬­î ®Ë špò2Ò¸µt,éÚ‹`çövQ¾ 'FO‰ëµ<û÷6<M<¶úS§^ʽ— ¶\'ÿø)¯yÓyúÖLRŽî¯Žüì÷�\¿ Ÿ|Å×¹ÕÌÃ*û½÷0x«Šºc¸c†Ž�Ÿ*N¹=°7´Ð›L~4Xw”ó¤mü9kÿŽïO~<€Ç߯¦úü >G(×ÕVP„©0c¸ü²Læ\r:Ûw”õÈoeÕoIÿÎÐíÀÙÒP^ÎÏþÑ…ÝÐó/nø‚–s[¥Š¼Ë y´$æüôíþC¬^³�„›J¸!öÔ÷»­ëÿNù„¯óÀ%ÊsÚ7,ã(£¸åÛy¤´t1>žôú&öôØxí³6¦ÎNôœPWMx…yY,˜Q��¾ôœ‡�æñ‹â"̦¢ËX6ÆFÓ�g_+0&Ç? ë×!ÌÿnÉñ†ÌÙÉ»ïïäW[£XþÍø³{`".ÎA‡}�löêO­Ã9lá…ZhèÓPxy &gLwG ¯¼WËæC]Ø�»jG}5Olê¡pÚ¥<=!’O;wšYýç*¸µ�¼óR ŒjÞÚJÉuIçùàÈGݧ•üüŸ]O}pðâfç?ªøYo�^Õÿ`ÎG]Y?·è¹ãê~”¤ÁsÄÆæ-µüì?Ëæ�Ãt¡WÌC­¬ÛNÞifwë>žÝÜFCÿƒg_/[·ìDs% Ò•ƒ6ùÆž^«Jæ¡Ët§¾Î¦ <:ô ÀÖÁN·‰-È%[á£dLðùS@©©Þ�¥8˜M…E<å?ŠºòÆI×ßoÆÄQ„õûVÉô`€òzh>ÐÈÚ�+øyw1�–D�›z¤0ñýùF8/ƒÇ.,�!‚Ü€}ÚK]£{IÌÀA0éÛG^ÆF®Ï‰:¡ýV`H6¢ùg/ìs£OϯIeíÇ�ä&œôÚcupw`ÕúVÇ^ÉýÙ̾4Ç/Bˆ‹;0ƒŸšò]¼°¨ãúpnž;•[“†;°‰aú„(þ\ë ‡x4¸¨ÞZÃëu< †ä4LKŠÊÇÖw·P›†ÁÚ�¥Ó…&+‹›5­|Ðà Ù¡åªk/ã†$%8±nÓ¶vøA¡ aB&?˜ªgËvÐPt¼CqïùœEQ,»5êjYµíí} "ôñÌùf%†“BsU-¿©°Ñã"â¹åÚÜàëœT~RÃë{x²òrXPrÂð÷‘^X·Ÿ„铸öÐ.žh�ã*¿�š#.Ú}zæÌº”©± ¾þW¨x÷µ½nŒª»wïdáG°àîB¦j#š??2žE÷ï›óî‡f>¶–“^p ŠcÐã¡úÓ]¼RëD¡'oœNé¹;Ù¸±š÷Ú "6–™‰Öv¥ñⵦÐË ŽèFéiÙßEó(¼b<)�M”w8h'žïÏÎ!_îö¼òQ#5= Vë˜:-�9éZì;/�n3Ïîè¤9l'ÿãÊá'¥£™©òPù�Fj< ²&òÐ ½=G:±t‡z¯ƒ�åí.ŸÂüK‚G¯š(J¦`ˆé€°£U¢‹�ï5°±Õ‰Ckdþ·‚Û0dÙƒ»u?«>jd�ÔÑñÜ2#÷„ºæ£në?YÕ1†Ý0Ó Á%fb:õõ¬kJ`~ªr�¶ŸU››hpaZ Kr™ŸíâµÔŸg®Å”ÍáF^«",÷k/j̼›|¼»…u5pýÜK™ž,ÞØxn˜u)&³�p ¶›0Œ´¾iO¿^Ò¶‡‡?ò2=ÍEåA7í(¼ò2æ§ÚXý~ NO¬óòƒ›2Niª®ºe`Xî7൦�;Ò“Na*.Ÿd¢®båÙ—R¢¤�ª®eu… {näú«r™Ý>p�'»ùÍG ~0'Š�ï·ÐÜ «~ïaΕZÞ=6î餹ÓEJq!÷è!dŸ9Ú²ÓR2½ˆÇÎ E£×3ìä݉}ûýQݶV×vfÿ#ŒÌ¹&—©±Ê!ÛJ{ƒ™ŸýÕJC¤äåñÀÔXô€5T_~¸…Uê©ñ¨H0™È:zFŒ×ʪÿ×Húw'13ú„3’þt´CJ ŽŠã†+Ç ,C¿ƒ­«à7û—¸Ù›öñ+MOß•ƒa˜m©‰ËÌñ�üª©&ÀªÕ Dä*ØY«`Îí…\Þbß qÜ¢¢NÙëÍüf«• ÔqùyÌÏÒ…|~ !Ž“Îi_êaëúO)7&ã¨k%åêR$�²~Fw„¬7…G?¦ñtŽ_„_‚À¬ B­†ŠV£É�²³“Í»»0$eb»kùÕ~=|·˜l­‹ò¿•ó›ŠX~RŽ?u‡T<}ó$ õüÏjùøëSx`ž–æmŸñD•�’b¨ÜRKyt.ËfÇ£wwò‡?í䵄+¹%SÇîl|Ôìë$%3 “}?O|â pö•Ü�ÖÊ]<ùñ²o;°CënáµÏz™6¯”™±ª?*çWÿ°Rx� Ïf^i�ãGwM"ÅceÕïkY—<åx‡ëîdÝß,ðµbnMScïkSÆ[‹y(ÒGÝÇÛXUÕÉÔoD„Xÿ)LMtñq«bÕÔµºI6‚¥ ¦¦yhhq’�]Ç;Šê²>Våðèç!Vÿ±šu¦)ÌW7ðz­†[¾;‰½‹Êv°Ñ˜Ï³Vïa�'•e ÆaênaÕºVHV ½¼d€.öøsytŽ{UÿñQóo™ÄC±.6¯ÛÆ–ñäOìá½÷p\VÌŠ=î¶=<ñW3é·_JFX¨òÈᎠVÖFò“’Qšø{h°+0Ř˜sÙÉ3Dv›ƒ)&ع)HIî×¹;S×EI¦î¤ƒÊìüäÀûÏÁN¸ùk<“à§òým¼^ÕÉÔoDQVݬû° ý%¬ÈTѼ£’'>9@öMÇ?Ǿ»†U�FîýöÉa90“c`Î�mm`úw2žÅá=ÌÚ��h¦”ðL¶w‡…Ÿ¿]Ëæä"òFRFÁ~ cð°7è¶è¥f¿ÛÐ}ÐFCd<·Æ�xäCIAp°cÓ`û�‘û'Œ´¾�~½,R¶Ã4O)á¡©jÜuŸ³¨¢…™Y,¸¢•­_ÄñèͧzM¬‹ö.oÈÿuw;=ó€¸tnWÎëå‡)üFìÀPÝÑÈo>s3ý;¥L7€½z'�mj ûöÌ�ëÜj›$î½¶ ËÑSO­fÞ=:l¢]»¥g«[bxè{“H§‹ukw°vw”ä0sïç8®º‚ùÉ`Ý1\½œÄô!Êxôgxinha£ÅKÈÛS)#Pg ˜�VǤ$ Ã?§® òºjYÕjä¡;2I×x¨ü œUŸÅðT¡‘˜]�´øM¤÷¦N…ÚjÇN †u‘1ÌÔC]Ô8³xtNšîüì�vÜ&~k¿�°¶:Iÿn1sÔ‡yíõ]¼²?�e7g¡o¬åÁ�[hÈË"¡.TŸ©u},ÿ{%«š†¥:uׂèÛ‡è?¢[X[£à–ù¥i}X«ëXÛÐÃTƒ?t[éwPs$�‡æç`8lት ì,Žeªk?«íË“¨ùtMéÅ,¿2 :,üü� Ïù@LÈõO=ן–…ÅUqÆåcúEà¸LMu¾–Ý�Þ{˜×Bì{%MƒïßsºCÔ©I~Þÿì)W_ÉC©JÜmûy¥Ê†5ÓËæÁžÏÒ Ø‡Cµ'7œó¾T�Zá§®MÅCß+%]ã£úÃQÖÏKG°MÒNãøEqÒë9§D¯U »Zƒf_¯ý~3÷üz3÷üzw®þœšø,˜ ´t’’�¸æI¡¥ä#�û�ß­3}œ)bcô˜zò‚;&Dëð8ݸý�ìlQP81xú§&†Éã4ìiìÄ4>�˜+u^Àkcg‹Ž’ ::hHLfz¢Pbº$‰tk5'Þ°6r,}¿ˆ™±��ìd=žn|Ôíï$!3)0ª¯3ñý;J¸åhGêw²uS55có¹7ÿxc®IŒçòÈ@yšb´8z\rý»ÈNÑÓÜÚ 8ØÓ®aúD -ðwQס'«Çíïdg³‚Ë/ –—.žéP³¿{K'í‰ñê°(+ãÑÙ™–.RÒ“�Kt2W�Ó »¼€pòÆ:C”c´‘¼ØÀò"8z¼`;D¥ÓÈU¹úà÷O¥$¢“�-C”Çií1̹µ”wæR4ÈdUzñ¥<4oRðQÌüþÚ9½8Paæ3Æ$qU‚P“aÒ߆¡ÊÊvˆW —gh%)ÅE¬¸þøÀŒ£µžvÀœë³ÈÖ†Þ· ÙY\¯lamÍ ×EØlÔxŒ\9^œyH¢ÄÐEM £«?#;Ñdt3+Þãoð¸¼x´ ¡Z¯!öã×·3T/ÑÆpù8u0Ïë0ôº‡?muDÜØ‡¸¬Å3äç¨ÎcÁ IDATÉŸœIʾ½lì8a £©ƒ–Ä$¦+•!ÛDú5GF?[ª]Ód_ÊŠ[Æ“®TQd™Tغ‡˜— Y/}g¸ŒµL�•CÉU9½0ø3ŸŽíj*ôZ/·‡ºÆ.R²’I×Ê¿(+OK-ѱdû;©ë÷ÁN<©cÈswbqƒ½µ ’âI ÖŢ̘ÀàF„“Ò‹m˜•ИâÉÓ*¦HO‹ ì† Ý#è3Gµ�Žô†Ì¾A®ªoªMT«1øüc÷!š�JLù¹Ü_5L[NanpY†(RÔ�² Ù—;;©kÓ�—¸|B—DIÜhÚºáú¿3–oþV·¦�ì4^Gû6Öû)wtÐSC^f°í ¹ïyBìß„®S Æp/u{Û¨³{Ð$ŽãÞo&c õüÛ“óÕ—&¤›ûó©ÔO!„Ì0�„F«bè·Th Ìý¯sê>À³o$+/™MàÜîòRW±ƒEUG;?n�6p 4 Q*�rà°�ÇïÅáR“Ð/èDè”8ì^ˆ5Q¾“�->²ýíÔDÆq½u^ÜM{Xººþø¡l˜Ž<'ÇÎT>|Ë·›ÙxÀ‰;L n'îè¸àzû "h4Ç;:›e¯ù!»T3`&H­T�|ºåë¯O5b¨é¤Ùá¤!,†;ÆÁÖ-‡±ÛÜÔE™©¸œg/åï•ñéÑ"óú!ÓƒCéA­í÷ÙáZ"�Ù‡ôºãßéFczy�òW¢V÷ÛJÅñk�ž¾ìòÒãngÕïÊŽ¶ÇO–˺ܾç±{†¨S:f^WÛxí-3íÚ®ššË­¡ŸI{ÒsžúÒcëâ?…ú-áC Ì#¡UhZCöôD ·f‘c™sI?û¬…i³“1 À U‘}ù$-Ò�4Û1¢s…ƒÖƒ£÷øS=N_0ê)ÊT󬥓¾Ã2‹1� MZËoH2°9¾¨euSÍ+$]î/v²Ðè°ôÚ£³ZÁ룻Ø•Á«øt�æeõ{µl[ÌtÃ)®t,Y> u¶ødLHw´PÓ䯓”‰ Ž—‘BE„.‚ëg]Áœîœl¯hÀãòã>š�.ì~í±·Ë ŽÌìO ˆ ±<ü‡FViÂUD„'ñý»rOº“¯½ò,TR×jlì :Cj¦’VÞ«´aí�âS¿#0],y1{ÙRç`æ€S©Ã†¨—´Ÿ­ÔEå¶Fv5£çïâƒí­L».)äõ¢¦‚,®¬­f­%ùxYëÔx¬^˜aòºqøÔ�`ÙF•ìõuüìÃ=d/¸”¢PÏ«†kOô¡û¹sÕ—žJý¼A;|½B\PÎË {J¶Z9¢ëúÒ‹3)j¯g]ƒP’�C{]KàæÁ›l­®rŒ¢4bÈKõ³s÷áÀ͈\‡Ùbñ’hÔR2!ÐèÇÆ‘ÞÖÂÖÃ�£WG«…Õ·râä�Ãí½ž àêdc]¸½8P’7.†æ=Á›j8ñúÛll,O£'%)“^þ¼y?Vÿ)®¿"’ì'›kº0%Ç€"Šìè.6ïv‘=6ò¤å¦ø)¯=XŽßIù'Õ¼ÛêÃ�…¡ÍÊNGðùݶà�›Ô¤›ÂiØo |÷îV>np»¼3˜(ÒæÓ½Á£Ç!Ö½¿‡êáNKT(ðx¼§YcU¤$êÔIGÛVÿ¥†Í=`ÊNgú€™<=ÓKè©øœUU‡±»}¸]”—íb•Ù‡!R9ä6 YVÆxò´6¶Ö9õûó]<öI+=�#R zJ¾žC†¥–µ ÃÍ^¨É¿"ÓÞ¶öŸŠ‹§PmãÓ}�2v··Pn�"/Y9ºú3"Z.Ï7 ´ cÒY|ý¸�×Zë“™“§àã÷«x·Á‰ÃëÃqøëþZÃGTtCïÇgÔ)ÖK¨]^§ò™M¬3÷û2ëÞzÞoªZÇ0çŠêþÙÂÑ—ÆÆ‘ÞÞJy°³š[i0Æ‘9ÚuÕ®yéqù1Dö'wG ·øéñxê0?× íÂPõò,HŸ|) Ƈ¼#¶6Š›gæ2u$“߃ÕRϳ›¬¾–I‘FIö¸š÷´Ðà x”›m¨SL¤(@Ÿƒ¾¥‰J Ùz0$Eá¨o¢.Ü8¥úlÕ£3Ñgž%úö!ÚDwÓžxw?Í^@¡%ŨAÓž!ÛÊÇ%¡úrEéqn*ë;qîÖva­NOáÄxÒÛ3Îé—e1ó½Z^ÝH‚1žéãõÔô³¼fDqý5i¼òÑmõ*² /ázC¥Œ‹…v²èHO]—<ê,âc0tvRóÏ]üGu8é1jèuÒp$pc ÃØñ<ð ÓIËÕgæó¨¢žµ;jy¸¬‡*œì±IÜ;'“"؇؆!ËJÜo¦±ê£Ü·Å�&&Žùפbè?õ§3qÇ´V–~²—Â1¹ä5!¦OæŽËZxp»ëXÇ?gf«6ïàÁÏ¥ŽÂ«r™¼6|äõg$œl­lÅ ¨£c(‰óÓpÐ�Õíµ†”#%¹c™9q°;É*É.-æG‘{X·¥œ?wú!"œ¼ì,~ty&Àj?8Ó£øCÔK†ºDqLãÙÞœÑýÜÐ…Âï rW¦¼$º[yï³F>Þß…58ö¢�ŽajÁxæƆ¾ù”ÉÝbá•J1©ILÏ‹?öûÖbô_ìdѦ((üú”Ñÿ¾²œ·•~SCsQ O_)7ꚇ­ë·ðÂþáG¤Ôãryq¶üK !Ä9 ¼aaÓ̱9ƒ�yoðá#0­ÒwÂ8O3Ì$§rs®‹ò®Aþ0Ù—%IX¾Üë>gé?u<07‹t:)·¸I/ºH4zŠŽÞá+6‰9×'1ÇïÃÑãÆ£Ô`Ð)eƒŸMr÷&K9œ úKòxTÑB�7Š’K$,Ÿ¹6@Cú¸8 ÍžšË¿žÇ‚Ý]8ü¡�*Ò'&J�“2Bˆ‹+ps>f˜Å—“ßÁÖM5¬mp‚BEBF&÷^•4øï !„B!ÄÙ¼§9Ã,�Y!„B!„æA³Ìý !„B!„ƒ�À,„B!„BH`B!„B!$0 !„B!„˜…B!„B ÌB!„B!„f!„B!„B³B!„B!�Y!„B!„�À,„B!„B\DT§»›Í&¥(„B!„_RF£ñŒ.ïbÊ�ª ­ð„B!„B\ÎV¸½Xr¤œ’-„B!„BH`B!„B!$0 !„B!„˜…B!„B ÌB!„B!. öV½VÆe‡pH`B!„B!aù…¿Ô²Ùæ¦fg?ûäËš%0 !„B!„8å°¼õÈÑ'üìùüËš%0 !„B!„8õ°¬ŽâæKx`b8ê/Yh–À,„B!„b|T~f>–¿UÄ­éQ”Ì(æþì`h®6ónëÅÿMU²±…B!„BŒœ’¢+r¹ÞcÅPœË ©~ª+ëéLNcê5ÅÜn¦\›Ê I˜…B!„B|Õ’˜?; pQùQÏÖôàÑڰ;Œ¾QHÉ—äkÊ)ÙB!„B!N�‹ÊƒaÀÕÉëëw±®Õó¥ù†˜…B!„BœBXÞÁ³µ=xP�>!™’È@h^»~ëZ¾¡Y³B!„BˆQðѰµ‚gk{a¹ �‡®Ëå�›r™z44¿[Åf»f!„B!„_)J"bt Òóòxè*€Ødî¿)›© ŽÐ‘ ½ø¿iXðÑÿßGƒtXðO%�›ƒ©  tÁGD__ß–Q}bý/}‡&ßÀ§5áL9S˜uëmÌÊÖ°í¹Ûyf‹ÃuOòòÝ9güËŸñåûl˜?|‹õŸT`n´c÷ƒÞ�BNQ)7~{6q²k !„B!.6› £Ñ8èÿ9º]¨#µhNü· ;Z šÑ/óŒÞ°°i@à >\€ð>Àô�ð8ŒÏ½Á€!΀!N;M»6ðòã�óf½ûœ|¾qBÅ“ŠùÚ8ýé/ÌmaýSKxä¥ l¯³b÷«Ñ«ÁaµPñþ«,ûÏ¥¼U{ ?Ýí³°æþyÜþ¿eœµR9¸ž¥·Îcé»mÒ"!„B!úNúúúÏsƒ…eMè°Ü××GXXØEóýÏßÏJ)3˜ûÓåÌüwÇ6^|ì6µZØðNsO9ë«�sÖÞp&–äÆü‡¼ºË¥ÿ²„{¦g W‚ÃRÆ«¿|‘M�u¼ùÜ«düß}�&Ÿ×ÿ�íí@êÙ+‡¶òmÔù [Ú!„B!DÿئTâõzQ«Õgdy^¯¥RyÑ|ÿ çæ¸)ÌšH…ŽF ÖÁ^Sñ"w͛Ǽy‘Šc§t7ñÖCó˜7oË><>ƒÛöéË,»ÿ.n¿ývîyhê¶ñâ¿ÌcÞ­‹yÓxͶçngÞ¼yÜó[sà Ë›,¾5¸üƒÛXóÓ…Üuûl =Ãë¬`ÇM¤Î^¢oÂ2€>£”ûþk. £Œw>³>êõÅÌ›wÂ̱cËn�Ǽ[—ðV3˜{󖾃Õî+¸}Þ]¬¨Û_—2oÞ<æ=¾žª�ú}Ï—³¾îhØXÿh \ÌïX(Ã…/cö5ñÖƒóøáïê¨{å‡Ì»ý)ÊÒ0!„B!@£ÑÐÛÛ{Æ–×ÛÛ‹F£‘À|Jކ`Åi`ý›<½bU­"Ò‹(0µ±þùW©r¨ ¹}4Ô3oþâUÌ�7à¶[({iï4†x_C5f Ì ´4ãäÿO¹šÒñnÌÕæŸZmÈ¿ŽÒàõÜ$3ë†Y'‚F¼zÞò/þÕFö5³¹:;{Ãv^ýùËlqà5’}Õ¬c×V&Î`Öu“IUKà „B!„­6�=œNçi/«««kÀ2%0�FÇ6Öo ÌÒ&dc:�EU}°)pS±ÌÛxü§KXô_OñØ,vßHƒ»õ•Kyê¿îcÑÿ,aVà³ðÏÏ¿Æ×m³aPšHI<˜¦&‚¯Ûng¤y6qò\æJB“ZÊ�ß¿�Ò·aèMaÖ-á¶›ærÏ’{(�ìÛùhûH?AOÁ s™<ÝÛ4åÛÜó½�Ùp!„B!„ôz=^¯—®®.<OÈkšÓ×ׇÇã9–#"".ªï~þ®aö5óÖã Ù pcï°ãöÑÌ»©€SÏlmX?ø•zi1©Áp™X2…ôßÕQ7’E(S˜rE0Ej2ÈIÕ°¡ÕMOgÏ /ï¿®çô繓 (8:² / ?Êv¹ijl‚ÓrB!„Bˆ…BATT.—‹ÞÞ^|>߈CsXXJ¥�FsQÍ,ŸÿÀŒG‡õølk¸�ÔKK™û½Û(s:ËõàžbÙoô"ÊH¤’ã§})½þxöúöøÀïŽY}Í4µi'‡ø¦ƒ�oªO0aÎÈox‡ë‰8v½¼�Z¸q÷ºe¯B!„BœQZ­ö¢ ½g`Vfpçsýî’=¢÷¸ÆØ×/ú<ð·žî~3Â]6º}g黌- 'ú¬GšØþ‘™¹ßÏ8CÞ¼…²=ù— ü½g·Ï�‡à,µÃ�k4Ÿë°a÷A¢À�£;P.špM0ê‡ú—Ãá8·³àB!„Bq‘R\Tk˜%îµ`Þ€ËÝðw*Ûû¿(‘ÔMŸW®e&ðÓI g+0늙=3p wÓßV°â¯fÁÏr4–ñâ/ÞÂâ’®fvI`ê:"&8ûÝhaŸ{øut÷:N¾ö¹½’Іà›;*ØÞˆÉ©©€}d 2[ëë‚ïµQñY蛎yz%J !„B!ÄQª‹jmÇ“÷MÖ&ÞY¾ k^M5VÔI@3ÇN·Î¿ºÓßßÁZÿ&�/ÝGA¼ ³ÅNp¶NVÎøöƒÜSÿ8/WZÙþÿaûkzôjG𣠸ó�ÛÈ Nû&^Z@ª²Ž¦Ž ¬ø‰ƒ¯Å·QÕäÁ¤áXÈÐGE¢ܵbùs¦\{73Žýg7›~ñMy©ôÔn§ªˆ+eÖ¤@(Ï.ÊA³£ Çö—yüÕ¤vUaqš0`éw4=†¨À©Ü–¿®`yÛfÜ>—b£ìB!„Bˆ¯¶‹k†YSÀm‹ïdrš:ÌTÔy(¾çAf§R¨+xª¶&÷6–þ`Ùqìª1wŽeî¿Ïf|0¬ªÏÆ·Ö¤2ëÇËyòßndr¶ ½Â�£ô¦ Н½‡Ç–?ÆìÌ~'j§ÍåÁ-%àÁ¾¯‚*ûxn{à6ò£<¸ƒ9Û8íÛܘo@ƒ�†ÏÍXûO3ÇÎ`áí9ôÔV`nCf)÷üønŠƒ×_'~ó߸ïÚlLáš+ÿI[Â\Ý]¼–Û<ÐP|Ów)NÒ€£™êÚ&~Ù1„B!„",øèÿï£A:,ø§’ÀL´ŠÀe±Z@|Dôõõm¹à¾Õ‘6,ÍVl>#ùù©�kyëÖ°ð¿ßÁªžÌƒ/-aŠîâÝhŽ—qׯ« ý6ž{f.©R�…B!„âäÀ6 èœÁ‡‹À‰ÇÞàÃø�¾ÀÅvJö¹ßaùO7`õéɸ¢”|ƒsyV˜f΢X'G!„B!Äо”�Y“'�-Òóê_ʨþçÞñiÐ'dSúÝyÜ9çt~ãY!„B!ÄWÅ—ó”l!„B!„xOó”l…¡B!„Bq2 ÌB!„B!„f!„B!„B³B!„B!�Y!„B!„�À,„B!„BH`B!„B!$0 !„B!„Õ¹þ@¿ß�ÓéÄãñÐ××'[@!„B!Ä�ÂÂÂP«Õèt:Šs7ï{Îg˜{zzp»Ý–…B!„BŒH__n·›žžžsú¹ç<0{½^ÙÚB!„B!.øýJ@¨�>üñÍööö†ü¿Î]äW¿\Åkom`Ëînb³ó1’¥z¨øísT$^IvôЯÛþ¿ó¶o&“Ç*‡_¬¯ž?>³å”âOuhÁWÅš­ÆZ<�̈³´}»YóãiÎÿÙQ_ñݵ…_<ðÝ“Ïby�Æ®—YôD‰×3æ¤:ÔÉö•�ò+K&ßÌ‹Õb}ô ~ÃFá׳l“|÷§<ôÜŒ™uù Ÿ;Èžq`3«_økÖþ™ eUXõ™Ží·äž-<¿èE곿IAÜ™¨³�üñ±Ÿ²#a&…‰£}óH÷÷Ñ®ÓØßÏ©ƒ¼÷“‡Ø a{v¶ SG†«³¡ëæŸYöÈ{¨¯º’4õÑŽd;ÏÿÇ2ÖlÜÄÆ ذa›c™>)åiïC‡Øøôƒ¼ÑUÌ7²ÎPƒz¨‚7^xž_›�Ûêñ�- ;NýÕk¿RFy¼úȈ�?ÿO~ñæF6¾¨ë¶ØÈ¸*ÐN5¾ý?<üË?²qãÆÀÿmÜ�kâ7˜h~¹Uo¯â¹Ukxûo›Ùnñ�–—MlÿjÙ»›5ÿýSv$\GqÒÑ·máùGÁï×eÃÞùË&�ŸIaÂПX¿öazî¼ó×wx篛ø¬®›ØÌ<ÆèÏd;>ø1Wý›³ìŸ‰\7úGŽN¥ÖVý™_=ÿ"X¿�¿ÑMbnÿŸ½û��ªºÿÿ"á&áRÇà˜#f¤YF–Á2t ¬ÑıWãWã§…¶¤n¢Kt¡ µÉjòia]ÒÑÁ�Á5 A�…´�*±2T‡‡N ‚CÒÁ8˜ $—$— ß?f eòPlßÏÇã>øqgîœ9÷œsÏûœsïŒ5˜jã§~õ¯XYñ 5uïÑ¢LÂ6Ñi×57•ó«_ÿ?ªÿ6´^„5uT;Ù�ZP“.”ô¨¨*œ~íÒ�¸Þ¬¤z§†òÝ¡”ÉÞwª¨|³Ýhýâ×´ÖQùž6ø EÈGÍokÐæåSr­ }o¥ÏVRgÍ'íD>Æ«¨Š‚zAtº¥¾‡q>¸ûÅÊ…‘œ3•‘Á”Ù/ì©høê¨z¥Ž@¯ùÔ}ݺêdÁå`j,2`zTÔPÎUa÷Sû» ¼s)zØŠ¶½œÒßTbZ–‹ý|×§ ­=Ãi˜ÐºŒ¤,#kâì=ªc¾u‹¯7í¨ïUQñ¾�쥫°�Pÿ›bÊß°Rt—Ð îwSûr5®#`ïÿFƒ“E%Î~×›ZJWpLd«5w1Eó- ð¼¼’òÕƒíç�óu Èï5þ}• ¥¾qQù‚óCEäO�Æ +)[ëbÙB5y¾7Ë©îNcq‰cÐEYi95—‘9ô�Õ”¿­’½d6ÕOݳ¥”o±°ø:cÔ}fµ–øâëæ‚ ˜;\4ŽK'w†°Ý”Žùñ:Ü­é¤wW³ô×9˲±Ä-5,_²:I IDAT${Y6|T?UJí žÎ£6”ÔŠ´£\T¬ªÂÓ­b4;°t÷ü¸^¨ zg0NÏbÁ|;†�¢j¼ÐXà,·.aѵ†p_®¥žÊÕ5x:@iÄqW.™6Cdd­Š²JÁx¦«Â2ÓàÆäð¬+§jGP’d?�‰52ÉÜQEù+.üGu¸ØJú¿å�>¹¯ù ~XIé*¾°Ü�Ë‚ë-(ÑÒÚRÃòýXT?žÏ¬¤_Äõ§F”k‘�)zþDû[J)|ÏÆ²~AïÚBÊ»³)ºßQòo%…¯ɽ!@ÕZ¾ë=%,š­�?jYL�OGï6‘¹l1éýÚIý@kjiÔÂ�†í¶²gãхµ¨×™ð7ø¶Qgç²è¦pÞ�(«ŸXŽkÚŠî4#`ÖO½H´ÖQ¶Â…23ƒìk«©ê|`[½¢o²“¬»T*¶|qª_çÂ|k¬nÜq{ÌßÍÆ1Ç^62Ù†EõIý‚UE�ÿ’®%ÞÊ_ªÇ×­C¼…ôûsIŸ¨„ó Z}ש}¡’ºF bÌsrȹÑÉÿ(åg€ú>ܲ®DKO—›²Âzl?±ãýÕxZ5˜¾€†/¡�w+(ÃK ÞLÚ}‘<_YNÙÖZ·ŽõÞ,º¦_Ь5R»º’º `úç,rn·a@Çõl® ™ö»ñ·Ð’ÓYðƒ4Lý‚NïšJ[Ò)*j'ö ÊÈ Êìó¼\LU«…´{2QžuŸV@4´x•!Ç›ƒJ�‚ª*(£ÎQ4ÛâÆÕb!ýÇ6 feàüC)® ûLת<êSKÈÿnøóܿɣîÊ¢ð¿‡]~h£µÁZ#5ÏWPï×cj&¹ƒh÷(¦x¯•´xÞC!+Y?ÌÆiCïURñª¯‚’d#óþlÉ‘!… Ë)Ó3ÉVj©øS#Án3™O,&=y †"ZZƒx^© j›=VA½<�œ{Ò0' |==ãõb :­¿1ÜúÒк gh{5M^Y5XɸÛ9?FìW™¨Ü@Ç‚¾½‚â�öyÙdÄ–ã�Ì»ÖÕ¡\·ëP§ß#¶ë�˜žðÒØ•Ž1!ÊùÚ_ÍÒ5ÎÔ ž¦�€‚ýîEdMSîsy*(|Þ�¦k0c+î·�RfK}6œ½^¼­A!3™ sqÝOÝóeÔ4ê¨F+i)ª¦±âö�{r'Ò3Ò€iº e›óÃKÈ0éÑë{´2ûÖ÷¡–Y}·¯Éɲ)áïh™ëļԅGsàP£.z>аßåĨFéÓ«©pûÈœh¦q‡õšE„“nÂ9×JÍ&7�ëÒ DÙwÞBæ¨}äsßß0‡«IKuœ©¯’Ž6a6ðù�h«UcÍd>¾í?«0üx ãN©¶¸_­¢Ñº æÕËWR»3�œ~ÃÜŠjÀx‘ÂÐç­¿ Œ ¢Ìž‰ížeáÑ÷�ïé;»5ôn/Õ¥…øýŠÉNÆülœ”³®C–UõÜÌÜë~þ$3æ“í‰ ó8p7`f´¡Ô³(?µ‡QÚàÀÖ*ꓲYöc+J(@ýË5xZí8^•XÐvû0<±ˆü$ߺå¬ÜàÁv¿ %PGÅ‹>¬yEäOTðo)¥ô…:,ùic²�À«UÔNÏbq‰ à ë_´´jÛ+©øÐHî’EXÕ ®òb*6YXr«y€ëi”ëEQêPôþÆðë—†®ix^^NýþºjÆÞ/€×»u)gù�z Xæd‘s«mÀuŠ“´þƒõú1M1‡MgæR43üÿuÛ¢÷Yjüvr~0ÌŽ¾®£Ç†s"êùŠzðݼ˜üÛ hﮤðÍzÒ¦¥c Ðç²åPôËœð€NËçËl°¡Ããùäu<« ©ú“Ç�f´íUT,~*S—‡Ê§ËÐÍiƒ¸~5Ró’ûdzï¬dyáÉž�Ît´<ø ëûPËl 5€rI¿þ¼jĘÀ¢Žr†øÛ Xú­š7& î  c$ÐÄ8ÅØoÌÅ„! Ò¢ìãyºc)j qúâ«uÁ¬œ×u EQNí´(:º®ŸÕèO£OÁ:=<[¨˜8úMª3Pòh&æX@µ`5iÚñy­32k“dÆ$ìéùE,¾É<ô2˜”΢‡3¹Âàl[oU[Òo±ï¾��•ü(�åoh8ïÉÀ¢œh<º oá|Š5“ùx¹3ÃfšlFm h{vr² ZqNWð|è;»ò3ܲ>PzbUÔ uZ&éÔÏŸJ¬Ï»n|AÕšAîMÖ�;,!ž] öïÚÂåYµà¸JÅëñ�|‰yº3|/p¬ S²F íÔåí–;—Pôã4 Ã9o_VQLX®´â¸k %%EäNõSõëjCçæð¶ùËÈI=G×6Mƒ5¶ß v¼‚vT;»òµü óú(ñ Z£ ×ÞFœós –Ošh�ÌX*˜§ZÀ×HàÄõËì$-²BÂô'Ÿ¯v¢jª(ºçmƒ–£§UÇû�ÃÌ´ðŒN¬Ç+Á�Þ¾ôœéz:ÐõâLuh€þÆðë—Š)ÕŠuv.ËJJXr—‰Æʨñ‡¿§:ÑŽõÊ4<µ‚’ü ÔíåT¼J Å÷fUŸ9ÈžkÒû<›ëQ�iƒ ?§Ë�ë�z‚SíØ¢Ÿ¯p6Xq\Î5u¼CGäšp6}.‹#<£Œ‚Ùl"ØþD_£cª“\dÃ9Ý8¸€ñP#>Ír2=Æ«ƒLÏyðÖ÷¡–Y½KGQ´íe,\¸—¦ ŒÔ°;ß«¡ë JŒ�ê%Q¸®EQÐu =¼O Ïx?TTK@QPÜwþDí#Ÿ�þ†øJ]03Ìj¼ŠÞ¥ŸÒxèÝáŽÅYDá¥LjÿŽJ¿Ýmj^®Áã×A­L³qØ£ÚQ7�PÙo¤ÔÒ¡C·†¦¨}‹¢¢ vfr\: î…ê-,]Ä`M#ëÞLlvh(jÿ%ˆ Šzê¬HÿïvrF3ZZ“�˜È¨a }½g™?¨ØfY©ÜäÂ}:�í 3òÃ�J´ôœx–\Œó¸¡åOTA4UÅÓo&LÕÑ4­//¿(ïÎUß>á˨A:�oÖ _»ûEÀ‘abj6%¿Î"à©¡üw+Qò“Þÿ<$|Y÷ÊêøÞ­¢j« º‚{ƒªïÁŽ žßà>q®{uHÕήü ·¬‡Háúgšð�ÔX Y?΢æÍZÊ––£_b#}~éSê(Ñ4S¿ç`.RÑ>ÕN 2N–ûØs|N¿¬22ÎI΃ý:t×g`Û\�÷ XÆ�‹J;œö3 $(ÒOé¸é½úiÄÃ(ÏÑÊÏp¯_(æä²@¯¦vm1•‡,³2ɹË1¨YšS®Q *J·Ž娆¾·Š¥�V÷åAŒK᧘ðŒ�iˆmå™Óª£i:þM¥ü©_ŸBu �ízõz¡F©Cô7†]~,¤?héûÎÓ2I›\€kw� “ÛM¹}÷AšdήeyC#úlû ʰ¾¿t‡™ì¼,,CÉÿ.õ»ŒØoÚ‚×À–bz ”‘L¶4d;PÑ¢ž/#@¼Òw¾búÕϳésEÎåÉcõ lµ£:J¿§ÎÆàÐ ø…éLk½Ìc/¼ú~Æ«b‚‚Þ¡£$ÛpÎÑ1):�ÇqKWŒ™(3`q¤Á8zPGIPQPPâÓh«ƒ´±fÝ‹>à¾ó(Zù¼ô7„Ì€i¼Íå#€5Ü8vøð1a3GÃAœÞ7d?ÈQ#UÑ9¡ìèkˆÜëÊqÅç²ä *Aê~Yˆg0‡mÀ0ÚAvÑWô@ZïÖàÄ©íÁ³HÏi=Ö3Ö÷�òàªïg¼ ™Lè»ühÓÈžëðwqô ±FLÆ þ€�´›²±�k.3¢ bJ6Pçbº5‹l@¯Ž€ÑŠ)VE9ã¾ó7°½�|~úâ«sÁt/ Ó�XÖQý^]ây£߉¥20h~áBÚèöè=-ÀŠ ž|r®®EêX3³†÷=/ í«Çí?u4Ï0΄ è\¸}œº\QP´@äsAÓ"û’mØ.öP¿-²X(è¡ú¹jñ �ÆMµx’lØ’Ï¢�¯ü™hÃòâÞ©Ÿló<û�X­F@Á`P ø#GksáÞÊϰ¯ :�VRñ^¸­T’,˜“†Ð½ÛïÆÕ=ï{a¢# Nµa>à¢>rýÒöÕRñ¢ë,ËXô´Z¦Y ¸ê"îÒñ¿]IÅŸü_O‡{½ˆÚß8‹ò£û¨{¾ŒªÈ÷ zª©óY°OUÃùüû2Ê_ó¢…@¸©y7ˆuºeÀú¥ï¬¢ì#Ù?F° ø?ö¡�3Ÿ³Û�¢�¯¨Î¢Ï�y¢‰€Ç�?ñPÿa`p5QÓ¥¾ŸMœçú>Ô2«¤Ø±}RGíN ÐðnªÇ?Õ�-a öÙ„}ºŠû�uøuÐ[ë©Ù¡â˜¾·Á<ƶ½wÐå£vK#æ«ÃÙŠ¶/jÿç,ÚŸh}äóÖß_™ çg¥’œä>à§üååä=†)Nrï�Ü3ap�>ÇEåÓË©71§Z1Ó¯kÁ1ÏLÙs,DÁ`N'7?K¬‚ý¶,Ü«Ê),P0¦¤c·*4öꀊýº4ê_(eù#†‰idÜh¡ü�•ÔŒ_LÆd ÙNÚUõT.¤RQ1ÍÎañ]6L¤?”IåêR Þ%FÅ2/›ô‹¬dÜe§ìÅ¥ä­7`™íÀfðô-sŽ6q¥ëöJ–?£�ìû#£QÆ4rîP±ª�:ƒ•Œÿ¹w"jÐ%­QG¿‘?Œ¶ÛfÙ¨øU=æ{sû5ZÑònøù£½SÆÒu^tÂËíx*�l÷‘;ÝLƃT¬)¦ðMÂ÷,ß›$sÏcHG?$ØuŽÊz°ž•Ë«hԉܛSJÞ; êÌ\Šî±��ÖÑB§µOSÓN“v Šój!9�üÅ‘²0`¯£uèáYˆ“k';×OÅKÅä­Ö Á„un.™SÙQnþô©_ùõýF—Ó‘õ-'˨xb9&£ Ûõ™8÷VRñ‚…üû¢ÔwË­ H{±‚âG+!VÁpe:9‘û&£Ö/¢Õ÷á–õèé‰> cÇ9®œò' Ãí\¼ çüÜð첿–ÒÒ|!лuð�÷²‚áš,»Ë‚õÎ\œÏW°¼°bT̳�cS`�ërô.�à9»x¢Ìž¡ü4®[ÊÊ­áN§Ö­ã)Ì£*ÆLæãù¤MÍbÁ¼ *Jó¨ìR0Lr�ýÃÓêÀyªCCÎÕNÆ�u?_Œ6ÃŒîuãKÍ!gBx·õÚ Ì¿.gi‘c²KŠŠ7r�nù‰ÞFkƒÌ3ì°¦˜ÂW#ü”LrfnðL™l"¸n9KÑFÛÉ^¹ï>)�œ{Tüº�Úc Ê(3Î;sÎòéµÑÓªÎÈ&·¥œŠåè((Év2ï�„wÑ®§D¹^ �ž3÷7”á—Ÿ‹d?à§âå¥,\ j’繤Œ¤ßŸMà… ó‚ š°Î[@Î uÀöÙóN=�6¨øÏþ.9�üŘ?¬ `µ;\~º5ô¦<<± Ö{–± ’¿ÁÏ‚ çnRÔóu "JŸ+ÔHõSeÔµé kh½åä}Š)�üG3¢®Î3ÌÊ$ãƒrŠÿ£ã8;Ϋ,(ƒY’}JzŒXçØ±ª}óŽg®ïÃσó]߇ӿeßï£ìÅBÁ0%�Üì§æ÷¶Ï`º.—Ì5å”T¡Ç›°ßš{òÖ0eJ¹×–SñT床yV6¹s î‹ÚÿŒ½Uòyëoˆ¯ÊˆÈÖÿßžyù36X�â€x`TdS�?^?”lkk“\BñD'à­§ú¥*'ä²ø~û�nõuÜRÌÒÆtVPCñŠZü]:êì|Šæ[¾¶'+ð^%åë]øŽ€j²‘q_i"ßµÕEåêj\-ÊÅÒîË%cŠ €ÞROåêjÜ~ .2ã¸-—ì™ÆS�½¥”åïZYüx¦A¦'試ü¥:| š�d?�…- HíÓ…Tû”ØÈ‹G;X°,kìÕ©]]AíΚbÀ2;›Ü;môÿ1ý@5Ëÿ«‘ô§óqªƒLì™ò'XÏÊåU4êýŽß­àXTBÎÔÁúLé l¯¤âu�^P 62îÍÂaRÂ�¸)² ÿµËXrÓég%@Ý/—SE&E§qÖ?v¥üDݧû©_SNõ‡ôx#¶sȹÖLø[j4nª â^‚!ÓôLrïq`Œ•†W!„BHÀ¼�… ‹©m=u` zÉC®ó i@À~[VP0O·bl Aîf iÿžÙSmi8F{pïB`º&›ì¹‘}“íXFð·EÒ±b%Õ> Yw9P‡�}·¯ÉIúP±ÌubÞë£! ­[A�j)Ð1LÉ ûVF0ذ™!ç­çåbÊþÀvO&¶¡”ÜhùsZ�êZW‡r]Ö„�ÏWÔô´úð_lÅš9{)Œø|õ)þaåž/ȉ}5T�d¦~ÁYÑаÏu†Ï—ÑAút·;œO�;<¨×¤c3Š ç\+�nÒî !„Bˆ¯‰ f†Ùpí"Jæx©üÏ* ?^rê2ì¶z*7h8—”�f R¿b)U[,¹5¼LÕrûJn×q=›‡k(±Ã»•”7˜Xô³EX4ÜÏ-§|ƒ…¢ùì3mT½âÂw«s,pÀ…«ÍJæ4B>j~WMðÚ|Š®5ÁþjŠWUb~bvŒÉ¯VQ;=‹Å%6 §/A�UPÇ1$ !±I6Ò¾Û÷ÏÀ‡ãœá´ 0˜ÂAK$¸6u¼Ÿ!Ö„ýº¾å¼ú7Þn3™—±f2 —…wì¬Òù ´P.1õ-V�øßÔÐ5 ÏËË©ß@WÍØoË!{Æ@3‹*ækÒú⸽µÔí7a¿%ü>Û=˰„Üx‡’ØhùÓ1óþZjüvr~`ÔùŠšž 6¬GkqíO#s¢‚ÿ/Ú”ôðù:9\¥`H2`8=ê ù¨}Õ�ãÞLŒ›k?7¨àÝPƒ>o6¥òÜT¾hù“e_(€¿Í€el¿a�d#Á�tŒZƒ§ô�sÅhÂòȲl!„BñuðõxèWR‹ÿkiF–)F‚mg;O¥ãmðbœáÄ’Öì×XÑw{ð…@Iu`ëvãú8üjŸË�6͉MZ=x‚Vœ³ÃËZ•‰i8��¸÷†g·UEÑÍ8oû‚`éùE,¾É<¬”k;«(ûdÜå ‡{]º¢ ô›±TF*èúi³ímn*~çÂx[&ö„³Ì½.EQж—±páJ\š‚2R'ü‘*¦T+ÖÙ¹,+)aÉ]&_(£Æ?ȃw¹(ûñCü²õúÒLgyª•?:žÍõ¨Î4,±çà|]d'ó®§ È{8�å[ dÜj?ußàdAÑ2²N[ ØR�÷Ê,Ò’??¬ï¯¡æ�“¬™†!Í.7®[JÞ�²ðñ*¼ûªYúã…,Ì+¤Ò;@þDÛ׫¡ë J̉øFEA×5tôð>¼k x¨¨–€¢ èº´»B!„âkbä×"•º×kUÔyƒè± ýèSÏú h:êè~³‰ªµ[CP¬8¦AÅ{�d} \;tì÷ZÃAÊQ í¨›ŠÇ 89ǧëX:t@�˜ðlš)áÜgEðƒJJ_ôaÏ]Dú‰YøE×ÑãMØÿʼná ÓQâû…T­.ÊWT¼v‹fþRß+Ë)}+<8¡8; IDAT¤d±l¡Pô%Ù†sŽŽIÑi<¦†—aÇZH°ïáj†i™¤M.Àµ;H†Éš‹²¥•xu Æ€ó'ËÈêÏp‚ƒÏ:ÐZÜT?WJ™²„E³Ïâ±VƒÉŸ.õ»ŒØo=G÷ר¡ì ÈxbÎd…à{å”þw¦¥YX¢EºmõT}h&kÑŒ„üÔ¾êÃ~Oæ�òe¹s+î‚u”þF'§ÿ½Ôû¢äO´¼‹QQ]7`q¤Á8zPGIPQPPâut]Ç`u�6ÖŒ¢{ÑÔ¡/#B!„Bæ(A⻕Tì4“ÿè",*øßXNéYß© ŽVÐ:‚pbÞO ¢Å"³Â Ö™vXíÆ›ªãޱ“;%ÒÕmÀ0ÚAvQ¶3--�QÎy` í¬¤ô%?Οä“>¡ßÑ/1a z(™¤Ï·~j>Q0͉„Umá`Y¿1ŸüÙC Í7æ³l^dN°ß¨ &ú.?ÚÄ4²'†1—ç%@—ï^³ÍÜ7£ÚΓðÀ„�œ%ÖÈL£‚:úÄ‹x6yP¾“†õ"PÇÙI¿¦–¥4¢Ï¶??Ê€½/¶‘yŽâåÀNs:ÎÈ,±aºó‹Õx`1E;Çn¼¾F¼�Ö…ÿ£[C‹)f©¶ˆesñìoÄ_”Gud�F;æaùÓù�þéæCÊŸhûb�˜ŒAüi7ec×0\fDAÅ”l ÎÄtkÙ€þ^£“,ÇB!„__‹%ÙúQÅhƤš×t]òÒÎS—à*X§Y ¾WOc@÷;^ÔT[_à1Ù�]ñPûê gßRÝd¶‹=Ôo‹DíAÕÏUãôS¸ýÔ<]@ñCxè×7«½ØXtj° `°á07RûG:ÜQC}·û”pZ·ºŠÀìE,˜=Œh0AÅ`0„7µïs•;¶Oê¨Ý©ÞMõø§:°%º�ºç˨z/Éžjê|ìSÕ¾ÁŠÇ4¨}?=…B`g5•ox †Í‡ëC?ÆqƳ|ˆš?‘3ò±}œù AçÐÏ—á2ŠÏs²Lh»=4Æš0%õ ªgå£K©ÜÙ÷_êìE¬X±‚¿ o‹æ1ß°˜ewYÀ”Îâ~ûV¹G÷"Ùø©xy) WƒšdÁù@näô¨‘i÷çX]ÉÒ¼z¬ŠéªLr¯`�ë–²rkÐѺu<…yTŘÉ|<€cGÉŸ±ëgA Ã�ÎWÔôLË"÷@U¿ˆ,Û�7ãÈÉ9õÞñ^íp-ô%V&Cù�%¢ç�éº\2×”SZP^¶}kîÉ[”)Yä^[NÅSy”ë*æYÙäÎ1œ>Š…Ö¡£÷Jc,„B!.<#"[ÿCxæyDäÏØH`=ˆâ�Q‘M=~üxýP>°­­Mr]!„B!İ$%% >à1 hÀÑÈÖ ôÇ"[ˆð ¤ÇOÛNÆB!„B!„8�ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!Ä?fÀò$å›Ü4ì%‘8:iÝïfãê'y¤x#Í¡ ³à�Ǿ'�½ñ‰”H!„B!„¸@|ù3Ì¡&Öÿ÷<‡!î²9Ü÷p.7X�NšÞZêßm¦iÇžûãt~vý؈“ðÉömì ÁR…B!„â8`nØÈf›Ìõ‹pƒ%.²#‘Iÿ²€Ö4%cŸwò-�{6²æ7òþîVÚ{aÌ¥)\}ýÝÜwc ‰!e?x’ÍGÆsó’ŒÝTÆÚ÷›ÑÕI̹¿€ßnaí³ålÜÕßHå–æqGj"ÐÃÖgîg…«‡+î†ù]kyîõšCc°]ŸË¢ï�£¡bkßÚO{\2ÓïÌ#ïÆIœHYOÓfÖT¾Î¶]­´÷*Œ¿rwÞžÕ?âÎJ;y¿{Œ9‰�4ýq-kÞÜÆîƒíá%ëR™“uógŒ•’+„B!„çY,0¢ß¿GôûóÄÓo‹�Ùʉí‰'žx`(Ø\ÿ2Õ í0v.9ÙWc¨ÝÂG!´ý»ù8á[Œï=Hó§‡hò|ÄGý3M£SßÓ‚ï`3 ÞÓ®ÿ'Œ1±øÿ²ž?ûB„>ûˆ¿~z1“Ævq°¥ÿnû÷í`[à›¤;i:à§åÃ�ˆûN:S/üùùþ–?ûB˜æd0ïò^voû3o¹Ú¹|î?cŠëwìö�xoO,“§&£ôá÷íÂ0“þ�oÓÓÅg>¢õ(Œ±ÎãÚYÓø§«&÷î yö-šG˜ùŽó;L5Çqè¯ïáÚú!G§ÝÀ?]"…W!„B!¢yòÉ'ŸtàXd E¶ÞÈv<²}¡/}†¹­­-üãX’|°×'l¬ÜDs$__ÈÓÙˆ:g® ï™­4׾Ė›Æ cN¼¾“¶ñw°ê§³Hô¿Æc?]ÞÎ=ìÿ«~h'η–Ÿ>²žæOh8)ãú>©½'…GžÊ%%n7y�óúÁv<‡æñÌ3ó™ò�ø“'Ùx¨‰†]�Ü1.ÏëðtBÜôûxâGóH¤‡T~Ê“›6³®îvì7õÍ·Ïcÿ7{"´¥<É�~í¡ó¯;Øš…ý¦;hÙ±Ï!Hžu;¹‘÷yvÓ Lºa!ywŽçÝŒ×Ø¸&)�ž[B!„Bqž\Ø?+ÕÙ@Ãþ` ¶™¶“K¡§;HIzv³û£ž~oˆ#eº-J&�gBbäÿ®J ¿÷²IŒ‹B�ttžúQ‰WÚIÄNbòøð'�¹2•I±@Üxƛ¯ë8Ü4³ç£v’ÍÉtj£íP'ÉæñÄûöÐ?U‰©sH�Ä·I–+Â]tFy°Yòød…Wžà‘â2*6l¦é’9Ì¿ófM’`Y!„B!η/}†9é’$ Z›i ñùŸ� ^ø ÐÙIGˆ͘Ñý^›Èè  :;õSÞ®$œ&%üçè„H¨Gœô€~Z°Ú÷¾¸Èû`´:ºßÿ…ïK§Q?p7ox’m8í;´µÒÚÿØjâÉ`ŸØÓÃßõ Æ~/�þTÔí¡é½Í4½·™×�Ä+n&ï‘ìIRx…B!„âï*`e É4ÑÚêfë®RRãNÙß¼á1ßϬÌûxðšDFÇ=´wô{QO']á`8ñâ¯`¶5Vetäcǧ-ànG§|‹„d’�æ³úŒ±ÌyèÌù·6šö4°{Wo×mfÏž×Yõ¿vÊh“Ò+„B!„çÑ—¿$ûʸáŠ8 •�«V°qWäžf:i~«Œ’u{è<¸›� q‰©¤NŒÚñl÷œ\æÜùþVº€„R-_E¶�åŠËÃ7N·u%b›aÇ>ÃNj2tvõ@âiô é]úɼØýÖk¬]½wW“¦ÍᆻðĽâíP+�Rv…B!„â¼úòVŠñÜò“Ù½¼ W«‹ò%.Ö$$¢ôvÒ‰ˆÇL¿�…7…t5ïûsÙò_iÞT£­³HIlųÝC'q\‘9Ÿ9ID]Ú|¾Ønº[}9žwWòxñR/é`w½‹¦®1Ìù÷Ø' öH‰Œ¹(¼Ü»éÍ<óÉ,æeߌ²g#ë7µ’¸c7³¦�C iì=Äa›ž*�üB!„Bˆ¿¿€0Íã‘âÉlÞ°ŽÍ®Ýìÿ¬�N31…YsoæŽëm'ïmNœ–ËSK’Yó¿[x×f6÷&2æ›vn¸q>óçNÖLî¹ù7P°Tamåëlûp3CqŒ™ààŽÛïãÇPÂÙ8ì·Þ�ý£—pÚBîffõÆ1'çg¨kXÿN[ï¦'6Ž1—¥0ï�»¹ïFùf!„B!„8ßNüÖrÿCx©ö‰ß`>ñÛË#�8 ÙÔãÇ�×K6 !„B!„¸àÞ#œ€�lÝ„ŸæÜÿw™ûÿó)¿Ë#Y(„B!„B|žÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„�€Y!„B!„�€Y!„B!„�€Y!„B!„8k#/Ô„uvvÒÜÜLss3===´µµ�””D\\ãÇ�güøñ$&&ÊYB!„BqÎ�ˆlýÿ á™ç‘?c#�õH ˆFE6õøñãõç:Pöx<ìÛ·oP¯Ÿ?ããã¹üòËeÀK!„B\�óîÛ·�mÛ¶ /Æíéáí·ßfÖ¬YLžû쳿«F¨½½]Zb!„Bˆa8Öügþ÷×+(ùU %++xó¯mgw¼ƒÛYÿÛ~þóŸSü«çxÓÓv26òÿe=¿ù¿?çç?/¦ä·ëq·û‡Èã¯|î´³³·Û}ÎŽ·mÛ6¾÷½ï }ƪµ‰æ/˜<ôûÐÅ¥$H}ü‡÷¹Ù壙�:•±Ç|xv¤ÿœoìèdÌÆrq| #Áñž#|âÛÏÁŽ^’,Ó¸Ló²Ëߌ@½,…)—tÒ´û‡��á³úé?»{éLÿÖhŽëí÷Šãt´ì¤©û›L�8’æ]�´é±$MJeüñýìü8Äx›•KbtBÇ�#q¬ƒÖ�›øÛ‘#ÆLbÚ8�=;›é6†?C×#£?#F@O�¿íßϧÚñ¨iøèÓc¨—Nä[c#·7ÄÄÐ{ôÍû› êŸÿ>B!„b�zýl©þ3üË)°�æØÁ-<·æMÜߺûèaoÝÛt\}ט8¶û5*^}�ålíoóÊ[Lÿ·¾søC/¾¶�I¹ß!IæóËãñœÓ‡õôôàñx˜5kÖÐÞ8z4 1„W¯÷“ Ž\&ÚFyi9[ö댹ê§Ì,·áYWÆso6ÐÜ¥2iæ�,üÁ LÕÃÖâûYÑ4‡Ü›;xí¥´�Iå¾EwÐóÊ ^ú°�1Óï㱿�ñ±ÐÙ°žU«ÏŽípÑxRÿõ>dÙI:ý™I=Íl~~ëë÷ÐÚ›Èø«ï oá-Lmbcù*Ö¹šhg W8ç³ð�yœz÷wÛ~õ%;’¹où/˜óác<ô‚ÎÍ?˜CË+ëiøLabúB¹ß® ‡Ü¬ýõ6þµ=f ãfÜBî·�\ÿ$Utsßÿ‚[.ibí¿?Âúƒã¹ã™_1ßü ¯=ö#^ŠËåל–|ßfžûíz¶îk‡1)\ÿÀ"rf$A¨™Í«V°æÝ¸ÌÁ-ß>5Ðêü`-%¿y�݇UR®¿…q;Ö°1á>þç·0¶s7¯ý®œ×ÞkA‹K&õ¦äÝžBâ)ïCÊõsPYdF\|)߈íFW.á’QùÛÑÈŽød,—›5ïæÃ@ljE;‰)—OBÿkã)E,þ c7¾=}Áò@Ž?~ê>À{>åøç^éããö©L2'ÑÑØFï3ãÛñí b4ïæÐG |Ü~gü¥WpåÄor¸á�§êð><ù#=ÎÊæ±öäX´4Ä%cÏ¡]Z»� —LºÓ¥Ÿü[xP  !„B!†àøôð¥L™ŽŽG&OÂ4rí‡�õüÏk]Ø&¥é@€ö®Ë˜ó½+8¸Ý�ÿP;]æ’s«�SâêÞ&]s+Ó§›Â“…SlLˆ{“Oê$¾{ëtl—…§'\9‰Qm§½’Ú=¼öÊötèÐ; Óô¹#mÒiŽÇðÿe¯½ÓDW/pñ̽ýlßzüüyý+üÙŒQ—LáŸÇÊ–ö™Üq%Çšÿ̆7þÂÁ€ÑLú—Û¹eÚ—¢¥K²;;;Ïü4ìØo1çÎl²³#Û÷¿Ïm7ÎÅa;àlï¾}ûèììZb¾aç»ß>m(&nß™=es'ÛV—±±1Žéÿ–GîôVvüµo í­2J^j@�WÀ3ÿñ=Fï(gź& EÚ·ñö'vî»;õ ›5Åå´ÌÈ徫ÇÐêZËë‡6SòÌZv0‹ÿãg,¸F¡a] +7}ò¹Ô|R»ŠçþØÂø»ÆÏþ-…Žw×°ªö Ïÿ{†òúNR²ã±ìÚëÊ(©jê÷n�æ7VRöns>Â-f@‰‡P [þØŠã�Ü´›µ¥elþ,…Ÿø ¾ý ¯ÿw[Û í�ÏñÜ[-$Í~�¼ìIì{O¿÷yXû›õxºR¸ù‡¹8;·²µˆ‰#ŽÜ«ŸaÍ»:³>ÅÏîǾÿ}†5îžSÞwÇOr™Ûã¡aP+„cc4ÐÛ¶Ÿ¿Žçc_˜­&�E=âc +@†Ð>i»ëc>ÓûŽ Œù—îm¢í¼<èú8‡›?æP‚³ñÌãGsØ×Lð ñiwð0]Ê(âG |ÜŽ`z\üÀ¯1’# fDä…Çuíû+Þ¿ir‘B!„8#Ç3e\;{ÿú)Ç€®æ½øGN`’ˆ �t]y9¹? }ì^ÞÜäÇvGæ¦cܽ�O¿ËodS®žÂ¥‘ñØÁ½ˆ™À#0f¶)‘@µ§�]ïï…IS0ÅÀÞ­›ðOɦà§,¼S`M§û°›ÚÍíØî+ ïßÊ�c›¨yk/Ç€¶¿¼ÉÛ=Óyð§yüè¶ ð€˜‘Œd¿›!ù¦[˜wÅ$H˜Ãú·_gë‡íðánzbS¸!{ö$HÞ¿×K‘û*| 4‚1ÿz;ó�6¸Üõ%¸F¡\ï·ƒånþÎ$Ɔn`Ö[ßm`AÒîðûÒïæG \Õƒûí¶tΕopéÅ:m»ƒ|–dÜøK¹¸ùcAb‚BבN�KCtw‡8ñ úÕÄå&Ýû=|z>W$÷vÐòñ!¦Z-Ä|ê¥áð™fsG ~c Ý=>P¬`¸d ±ÚÁ�_Ûý  ˜4u—j>¤½í3‚GeVY!„âì$a¿þŸñ¬ùŠßJ€žQ\yëƒLŠ‹ìV'0e|8–ó�‹HH˜Â„8 w Ijð�3ºÝÆWöòÿ³wÿáQ–¾ÿß$3Ã$3Ig „$À“1’ÀIªüÒàJXI[[ì%¸ ¸…oOس[¯½Z¿{êéVÖ=Šº•ý mE\CKÔÄS¢Q°& ‰¦a„¡&!�3’I2L&áûÇ � áW?¯ëz.˜™ç¹ç¾ïy†‹Ïsß÷3iÓÁÙ#ÕïXú=^ÌCÆQ0߉°Zch=\EõÈId¤:ÈûŽãóåÅ�ãáå`0…#¨cè@Bÿå%@ˆ†O[H¼m.ö( >‹q®2Üà¸OÐÁÔŒ³#èYd$Tà®1Îvãbì—˜¯è]�ãØ¿ŸSg€ýƒ¸cêÒG�&Ý}„�N]ºì+Ì!Zê*©mðƒÍɸ{­Ú|xjwSv0gViñ—:¾-| ³E‚«[ÜÙ35ˆ×„`%/<6Ÿº‚ÝÀ¹±áèXlñáãLf0ÅÛÂÓ#bb1EÃé.ðyÛ I#åF[°Å­^|]ôš–Ýv¸„µ¿ÚAÕQÁ.  ,AÞ ê™:6'<ûÓð±Íû*!L‡hÃ…é\©±ØãÃ�L FO_÷úðvA’ýìšq v›º¼´…\¤�4Q~ðÕ­utŽz„飽ìÜ\GÍÁFš£GP0ŠÞ�ù³pymo>Éüáþ v�±åmmA0Ú"}v›ÎÞš«­ ØDB¾ÉŽýìglþÆÿ3ÿµðSAàd3Þ³Ç�­¿ÉΕ,ï?`ÖÓ^>퀮Žã|–æ`À7>å”ïlü¼”(b,Ñ9æ'1e(öVOd�ñ5ŠOcÌØ!çŸi£éϟе6ÅÄbž‹•˜~§h?rûõgÀÈLâ»�~QôÑx¨‘ö3©\ c²ÓMѦhº>;ŠçÓ: ÿî\ßuèâ³úZö�%>>žøø ¿-…ÓMøóQ�2‹ˆˆˆ\³ ›í¯W‘ü`! �VBÇ÷²é7¿e÷ ÅL0˜{…=£áü#CTˆ¾V†ŽV°éõjâî„üŒÞ3pÓXÎOï÷SÿÁ6oØÅœ%SI»g>³ß-£â÷ϱ¥=çÄÌν`Jv·÷·SqÐG(Êí^°;�Áfóù½­V+†Ð dŠ /› ÿ‡sLˆP{°Þ°nþRóUO›î<Æ�¿œ$}LáTß)£³óJˆŸê¢uU÷}G¹Ýå{ÉûÞ#LNí«»,Xc#a°àÅç;;ÇÖ„ÝjS& ~¾�l#çŸ�†+½Ý™Í xi>„t½øZ‡[¯5Ì ”¼²‘=§r)|~9(á©%/s(œt±›{׳®l³‹¼È"æ¤i?aeÒFžüõF^ûÓ¿ã2éÑnà ^oÛ¹‹^_'íXb-8\)ÿ°‡2o;Ãÿ&�A®fRN~H韚ax>éÿ�py–©…üxF g»Ëo§Æc‚N_x]†¼Ç{|f Öžõzñž’z´{ð,~ò÷yœO7Y±Ÿ*îû¸¾ô33`€•(cœ™Â8Ê@ôÀ>õ� ­£“4k<Ñœè1Ê�ÕOè3ÐM[KGš:ñngĈ$:48s�_¤^ë‹/`NbXrÇü™®ÔÛ6ÄÇŸÛÃûž9͉Cç×0_Rkcä=¢±�È$µËÏ©àÔ¡_4Æèn:^ÙÈ0 IDAT;ÛùìD;Ÿ�8Ê‘„‘d%'{¬ý|x‘«ÓìÆƒƒ9###°Ç�‘¸‹êú“S®±Ì“•lz½–äY��ç8bGkù¸m09#í`°’vgƒÿ¸�Òì8ï)Ày„ŽWRô›bʆ-gÆÐóŪ¶³å`2?ú0i&íû-?ÿ/31&·`¿ßó1f AoxÍs@+�æØ{;æ/} óÕêèè¢1™¢/¹ß¥~–§×w;«/³o ž²’½ô¹Wô2]¨/eã›ïS¹}%‘åµ�]2Çeb Ö±»Üƒï;ü¿XófW3¨h?…,KU›×QZYIéoŠØÓf!çîñ½ïL×ÕI°èâ;ZGù»9d„Ξ¶LÆÓ©g%•Û7°æ¥—)9ȹ‘d‹ÝŽcê<ò’|”¾ZŒçr3g‡æ’;Ü„o÷zÖ¿SIåΗ)ª bŸKN ¤ÞæÂv¢’Ê#6\éƒ`p&®¸Ãì©òaKw1èÂò†ç��ÍUåÔ4ûhÜ»�Uÿ¶Žòfé£]˜ºê(yµ”ÊŠ"6în>\J&.øÞ}��ï¼Oéú"jÎvpt&ã³mp¸’òÍø>-cÝ¿­âµ}~HÉ$3r\QE¸_k:�K݀˒ȣOÍ>ª««©®®fߟ�p:n Fho9†ßšÊÈAÖðèkä¦_#‡&`éuÚvqêÓƒí7çÐx¢¯÷¬Ÿ™ÁÃ’‰j>ÌÑÀiZê�Ð5p)–~E¡]xè° chüåË1ÉèÛ†ò ãù 11&ž¦SaYDDDäÚÅÄÖ^�ûHä?®~7îcq$&^k l¡bs9†)s{…eN|Ì®­eTŸ !¼í§Þ0�d«ŸÊÿ\Çöºð¢eƒ-9�·_¿»�v #²�‚„甆¿ug.Ø"— ¾D‹åòÓ²ÍI3†`¿ì)ÃI‰ëâ³?„û2‡�Æ+ªCâØÉLj®¤éRù#Ê€uÄ$ Ë7¯.W®¤¨-‡K H=´•Ê6ÃǦ_—° á‹07*0Ûí}ÿ¾\BBG޹e>º„„�¿""""_S��6ñ\¹�¹�N%�&ªë¼ œ˜|ÓÔïK�€©©©477_z§˜Á¤� Ý]ÛNrø¿öSY{Œ®+(ûÊþ·žÅÔ¹Y:S¿ê¢üpÍÿþ¯ýë“`IÂõ­²ä�A×í-RRRðz½_xhŽ��%%¥ï;5 2„“'OÞ£Ìýû÷gÈ�!:EDDD¾¦Ìyä}²™M«WA”{ÆLæd™ošú}©S²ÛÚÚØ²eËÒ°Ù³gc±XtÊu×ØØø…çØØXìvû%ÃòY]]]Ô××óÙgŸqúôé¯\öïß›ÍFjj*ÑÑÑ:©DDDDä‹ ¼_õ)Ù#FŒàСC×µÜ#F(,Ë&%%åŠBí)::šáÇëÃùE}ÙÈÊÊÂd2]·òL&YYšb-""""""_ñÀl±X˜0aÂu+o„ ]‘¯~`†ð º®Ghž0a•ßìKDDDDDDänšJ1b&“‰÷ߟ`0xUÇšL&…e¹®¢n¦Ê¤¦¦òÀ0bĈ« Ú<ðÀ5‡åÐG›øŸÿ¾›–ÞÏâ.ú9/½Ýrã;¡ÛMñªuTø®â˜†]¬ynMÝýÛ{ß]Ǫ߹¿ÜáÈ.ž¿X{úzþB'k©þô¯üÉ¥PÕÕM„Ž–ñüêíÔ_mÿ^i=®´]"""""rCn¶ �]Óœ••E}}= tvvâõz°Ûí�FRSSIKKÓze€!y,~ÌQê om{CÉúWü~[s5»÷Ä™•|Í_’ëRQ`¾Xp¾í¶Û¸í¶Û¾ÜŠt»)Zµ›˜;m´x|øO°eçSpOfxJ7Q\ÕÖd2ÆÚñ|3ž˜�õ½ul8š†£e?M#ç²xŠ•êm›)s{é솸a“ÉpÉð´�M;?ÆoŠc`†£×‡â­ÞÎæ·?ÆÛmÄïdêœdØ.¨ã‘2^ú=|wéT’}Õo.〿ºcHΞAÁ½zE¶†]<_ÜJưž&?þvÓæ2Õeí]®ßÍ®ßíbK0�üÍH»�ìâùâÙ#;p×ûð�Ç´‡Éϰâ}oŽ8ÉÆƒû„h0¹�“êÙ½¥˜ªÆD™|ç fßÕ» ÖDN+w™ÏÅ{ñþüË.^-¯Çõ*/òY<-wi»öµŠ2b–ËœY9$BTÿvûæøh?‰3 ÉwEÊÔRüú^ZÚͬ[ïgÎý@Tž·Kqu­¡8nŸnï•×ÃÑ£ò—hoå%º‹Xý¶�‡—æ‘ @ »ÿ}Mw2w´Aÿ’‰ˆˆˆˆ|4&yŒÔã MâáG²lÑDس�½Ç�#»Ù^e&oI!ËMÅzh?-0Æ(hõ´0ø»+X|¡Ú]l«OcÎ )\ñ0Ζ]”U ä¦l‡›ÄÙO°ü‰Å̰µà9;‹÷d›w4áüî W,c~F Û¶îʼnººËwÒäœOáŠB —Î ùx-ÿç?õÐñü£ X¸h1‹§ÙØ¿c÷ç¦{þ¸…Úø©<ñ£åþ ›À{ÛÙ{ˆ2ÀqÇ‡Ïæ‘G³ø~—WâŒ@«§ ûý�°ðï“?¬�òê�î�›¨2ä±ðGËY¾$�˜7Söi¨W?.[R€ãTÞËLOî³?GNeÆh+‰ãç³xšƒÀ¾mÕ%2ci!˸�I¡26¿™j¢¾ÑÌŒ'z„es3îwbHËcá#“IŽü ´$Ì`ÙŠBž¸×z®½WZ�Þ8úno_åœcp´×R{äì¹áÆ}Êɧ²ˆˆˆˆˆó—ÚKvœ£#Ss­é8¶PßÂÿ—zZÓn'à —ãì=dŸœÁ˜„ð3†Ñs)\”Gš0$“–bƪŽ×S�ƒ Gx Øž5†´È§â?è¦)%›qƒ €�Äì,’ÝçõEX­1´®¢ºÁOÈì ï;3Âõ»€ÁœJÆÈð{šG¦“h¢þTï}¬`ÙLgxtÚæ ÍÀÿÙÙPé8¼=‘¸€ÿÙ�›r;ñ„ëœ`¥Ãï'Ô]�Ûc$c|V³“l—O] þ¿ÔãM‰ô#V22/¿ˆ>û³w¬ÆsÀCbÖDf ÊJÆ­n7ÞÈÙowf‘|%?nr0f¬=ÜÇÉçÛ{eõèíRíí³<ƒƒWÕÕõxkkñ:nÇiÒ×SDDDDä‹¢á)€‹Œf†z]N°b>—àÌúC  #Â`6ŸëDC\1=.AL1ç;Øï¦bÇnj[B`€€/€ùN #@‡É|> ̘#!¨£=@ȳ‹çž-;_¯¨Dè+Q&ß3ŸÙï–QñûçØÒ‡sâ fç^$€šãίyŽ2cˆ ¸àæä�†½l{»š£`ˆ Ñzª“ÛÏÕÓp¾Ì¨Þ}h0]ä´êÐÑîÅýÚ*öŸ}ßP2ütz÷#1æ^ýxñÔÙG^ð)v4½»ŽUœ­Gˆ�ÕN R_³9æ ¿)=Ûk€îÐUÔ£· Ï›^íí³<i™·ÃÖjê§Ø©¯óâ˜èÔXDDDDD�ù ì€Ø8âÚ}øB�x®7Zñžaø€�s£º§Ál6cC„"jm¥£»ÇÚÛ¨óÁÍý‡-T™g³x©3!Ü¿[M@1Á状ž ®q±fÌ#g²b^Ö•P;Î{ pÞ¡ã•ý¦˜²aË™1ô‚ý‚�phŒB¡óA=,ëÙýû B÷,dÙX;t7±kíë„®µ££¬ÄÄ&2î¡eä îý’÷½Ý„�óýØÖJk÷¥Ö0_¢?/8½cbÍ$ß³„…­Ÿ+ãø_}ö\i=.¨•ÙÐG{/]žaXN6S]k£Åç`ÒHÅe‘/’¦d§e“eþ˜²ÒZ¼A äÇS^LÅ© r\‘1Ån/îêúp¨=ù1îãÉ8Ò Ø‡$Sÿ1îv ä¥ò¿<}Ê�@kÂ@Ì@¨¹’Êú�P¦1¸ÛCíÁ¢¥ªúÜZbóH'‰M•Tž —h¨ h[õ%Ö0û©üÏul¯ ïa°%cïc$:ð°ßÞÏ_÷1MÖ4Òâ{î ŒÁ> \½µàöwмÆÈ•ŒsdˆÚ=á~ìöR½³ˆŠ†ö”dâ?¦Ötû©­ñ\&˜_¢?C”‘P0G£x?ÚKS0|\ËÅÐrEß Ãé×¥½õÝÞK—GTY.øø´8ÆàÐtl‘/”†¨ ÉäÍ/€»X·j~Ì$¦Œ!ï{SɈ%<Õ8*‘4S¿]»o;$OœÃ¸ a2S�¿eÛsk(³ &ct:ö{3Îq“Ø»ekªâ°¦d3uÊ6oÛLqêBòpðú–Õ¬2Å‘<: §µ–P7�0‰9÷ûØü›Õìædr¦`í³1Vnï¤öÍYµˆŠ!qô †^¤Ù¶T쇊x©´…Ö��13g“Exm/@”ƒ;'ÚxýµÕ¸­vfå1õ›õí(¢rfâ5�jÎûçд¥˜—ží #ö‘¹ä6€a23²6±eí*ÊbqŽM'±1t‰Ð|éþœšî„¢õ¬:5“%3™Ý\ÄæçVÑÜÎÔÙ‰p™HnH¹‡/ýÒGÁ·ÍסYç?·¡}µ÷Òååg˜IËÊÀ¸§’ÔL‡¾¼"""""_°~‘­çc�<÷‹ü ÖÀôb"[ì™3gÞ¹¥{¨ÛMñ³»¸h!“l—Ù׳�5;ÍÌ_’GâÍܦ#»x~3ÌY:5|hùêðU°î•ãä=‘�C‰YDDDDäÒ�·_¿»�v #²�‚„GÐB@áaÒ3l炱\«S{Y¿jÇC@w�›Îä4ìêùBø©}ûBcïTX¹ôßî¿F|Sïò°ù•UT`À8h ³Ô�‹å pj/¿ý÷2Ž'Oæ»3“Õ"""""7€¦d‹ˆˆˆˆˆÈ­x5%[DDDDDDäúS`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`fffff‘ÄpÃßñàzVüx+ ]çŸ2™-Ø�ÀuG³rIµÜÜ�ÖöÖS<òb5 ŸÇêU¤ê<¹å|‰#Ì&,’HJ²K'͇«)c ÿ°òJo¢êò°þ‰o3ÿçå#OÓGã3S°è¹%¾´wŽN¡à§Ï�Ÿ 䨾­¬[»‘Êæ=¬ûßEŒø×Ñ7AÜÍžè9Œl;�•cuòˆˆˆˆˆˆ(0áL [@áR/+þ¥„æÃ;(Ù7‹ÇsL´(aæ>¬kÆ× ¶Dßœö f¸°tUóÂâ§(mMgÁê§ÃüD1?^º�]�úà3¬~Ø)æ¬ÙãWüŠE§~ÆcÿqÓËùß4³aýªÛ1¦dS°d)ùéêÖ-âɾpÿ´†ùß~™Ü¯gÑÉ ¦dŸ«C*³þùqí|��6Ðë ÷…<>º‘�ϽLI­2É_²œ‚̳cÓAŽU±as)5G|t“>1ŸÇ¾?ÇÙ]NTRôÊ”~t˜æ¶ ¦¸T\ã§³`~�}DDDDDD人©núeÊœÂøÁ>êjÃó²ƒ5ëyò§/Sº¯«kÝÆÕ©‚-órÓ#‰tpÓ¿5�œAüFÐå¥ê•—)ítàJ4ôy(ýÕžþ·—©4»p%@ÛÑJ6¾øu‘5ÜÞwÖðä³Eì9j%ó�¦¥Ãá·^æ§ÿ§ô\½7þìi6¾wÓÈ\¦?0�ñI~ªwöØGDDDDDD®;ÃMU›è$RGÁëó±”¼º“† $Mû'~ñX& mÜ–?SNî×(›õ²3‡ÃŸÐx°&98TSGÐ”Åø1‡ØSSM]Çt&´{¨; Î"ËÖã=[:Éü—_ðHº ‹Xù£�xNÔPSóÆPPÿ>å<˜RsYðƒÜðû×öÕ€6¼©¬]1KS1?^±�m8”úcÖ.ÉÁôéFV¬,¢¡¥†š£àJi dó|@úwþ‰•³AW.Öÿ±‚�U[)98…y¶:4–ñ<ô£Ç™§�ùŸïã˜tn]µˆˆˆˆˆˆ\_7ÙÏJ錌¼£�ÐVCÍá `#k\8,X²Çã2Á:ê> 2(ÃER44>D[—‡šZ Édú˜˜uÔ„à'u4v�%ÝÕ{mtb6FFJì`„èòãó_KýM¸²³Â7KJ%ÍynLf¸îƒ¤D]møÛ€Su8 `#-¼'¼x}F’†Ù «�êÚc—DRÐVÎ +Ÿbͺ"Jþ$sÎ< ¦e1Hç°ˆˆˆˆˆÈâæaîj¦¡)üW{’Ú<ø»€h+6k�ý¢-XÍ@ÚÚ:!; —e+å9@]sÕGÁv_:®Ì IÑÕÔýÙCãim˜ÈÉtõ~O³˹mÄhè„®kk‚Ñl¹ ,#Vs$�G›0� á �6Nwø(}v¥”å;æS þûü/±§±šòÕ”ïÌIŒÿþJ–Osœ»� """"""·h`n«*ãý@t™™©`©Ã /ñ ¶á„è%Þ&™#M”ï?DÝ»^w™Èí”®¸"Êk+©¤¢‡“™qÝ%Ëb ·¯ËÆøï/bJJïèkL ßšÛ’‘ÏÊ5ù´5ÖQ]WG݇e”íi`Ïú_QvÇÓL YDDDDDäz»i¦d{k‹Yób)>À”‘ÏôtÀ’Iæpà£zoõ¹õºm–SÌ.2GXpe¤@W#åÿ÷A“‹¬ D� Óe"øI)¥Ÿ!ÑEÖ5†Ë` �¶ë˜]¸†´Ónt‘sG9wä�bl£-V‹š*)yc=ëßò`Iq1!/ŸGV.gúP ËDZ:‰EDDDDD¾_ÞsW#E?]JI4>|§"q8)—Ç—N�¬ÍÄ”¹y”ýk ;WñÍpYš©Þ[M&Òÿv¹öða©.’ðÐ|4C§�iéÌŒá°ç̀厬ðâ«É´qVL@°ö žYía´…L¹n��JÞߎgÇê=TÿæIžòä�Òyˆ÷ß;€Ï’Ãã?ÏÁA3{~¿•êÎrêj'à²éö¯FF˜ûï{�Ídž3šûÚh %2î[Ómû*6ÌHêÄòs.xúÓ"Ö­ �°þì¶VüK ¦ügøÅÃÚÊžfÅÚ:\KVóãûìÛ³ž]F]K'±#syäï'7èj tí6¼×ƒÇ“?úôes&Óçä3à;SØøã•íx�²?aúh«)bí+;¨ª÷A\*™÷-àñïdR·ú¬òLã™5�àð•ðã¥/sÀ6�Ÿ¬]DV œ§[CóœÕüļ–Ç~ÝɬŹ4n.¢æ¤‘áS—²òûvŠ—¯dëQààS|Û³€ç—tžkÿ36óÂcOS>z Melx¯czË¿o£ìù ì9jÄõí'ù§9LÐwˆˆˆˆˆÜ¬Áø�El¯j"Ô XäΙMòG¿eÛÁ8ö<¡û’ŸÑAõ¶Í”¹½tvCܰÉä?8Žä(7EÏî&&Û€»ÊLN¶Ÿw{—ì¦xsü�ÐCrö îu`îY…#e¼a6ïYdž#N²ñà>áÇLîCä$\�—ë*©O›DÁÐpIΙ qtû#¯ogýknšü�$ÞYÀÃS.xÏ/Ø×v ³h«oáwÍá»Íã¾”&öîoúʶ'è;Ʊæó›·­÷ë¦Ìy<~_ Û~EÉ�÷Ù°©²°ð>;4³fÍV%ðOO’,ç…ÿSÌ1ÀûÖ:Öý±û] Y>ßÁ¡\y¥L¦ÿM:먮 ‰RV=³‘*&°ðü„Ç'©yc¿ÜéÅå's¨ ‚µÕ4ZlXZë8Ð|ZGC— —3Œý¡«‘²·šÿèãÌÑÉ�(ù4…üe¤Gƒeü"~¶lJ8´÷¸¨`4B°ªŒé X0ц¯¦ˆUÏ×à˜»ˆÜÁ>ª7odO—ì‘›’¯’²Íä-)dù�V°àN#nw É÷Ì`Ü@;cæ,#´™Pí.¶Õ§1燅®xgË.ʪ€#MÔ‡&³¸p.¹Szç.ßI“s>…+ )\:ƒäãµxü}WÇ´zš°ßÿ ÿn1ùÃX ï IDAT(ÿ þsûµõgna×úçYóì^Ú´O{äÅî<>'O,çÿnì©àãöÛ­_ï›~ Åȸp|N°Y8ÝÞFè+Ù�6ö¬]Ʋ¥ç·§¶^¸®ÙBÖüEL±àµÿ÷—”²˜÷X8T«zŸA È'kdù÷»|Ÿ=ÍAjö׌v1}þrîÈg^žãªjf±Ù1¤½½ïžRªÛ,dÏYÀ”œ,r¿?�ñ– ÕU�á"©«žž uµu�žKnb#5¼x=‡h6ºÈu¾ÜÌo-`JÎ îwaêj¦¡ ìC“èm)¸RúX5�4žYÓr˜r_I±Œ™Nþø\¦�K…ÎfN\ª?ôï°ˆˆˆˆÜ¤LqXCGùxŸ‡–vöì|æNüüIÃè¹.Ê#Í’IK1ã?Õy5Çè‹�àZ­1´®¢ºÁOÈì ï;3Ȱ^¦N)·“Î[‰ V:üþ òVˆP ƒ–ƒ>³³ü‡ ˜d¨¢èîð~QvœÙN¬¶dM~ü780¾Îç”Á}«|;Èzð‡Lë(-©)ÐUyAzÍaú]©”þ®Ëøæ;'ß3ŸÙï–QñûçØÒ‡sâ fç^zz´Át¹¸iƒ�8W66`'ëN'eÅZº�€³©Ç¾_Âp¯AgÖ­Àˆ-c>·†ù‚ÇÍ%lØÕ€mpíÚÈÆšñ,Ê4û�XÀBîâŸñPúù‡YX¨´˜ Ó‡ï`ïñ+ËtÔQRæs™é&l'b/Íǃ�n‚ _+à°c‹q�9ÊÄž�ÊèĆ+#—y�¿/£,º“¤;\ ºª¨Þ‡+¸FÒwèL‘›—9u3掃n?ž·˦ûq|¿ç(s÷¶PežÍâ¥NÌ„pÿn5eW”í8ï)Ày„ŽWRô›bʆ-gÆÐ¿®ÎÚélêN£nž˜ªßaþÚðRú«�TsYô/+™•æ£äW©ë€AÙp˜Ú¨~§’F_3U›×°ê¥2u™HíÂÔUGÉ«¥TV±q÷eæ%Ÿ¨¡ds1Eo¬ç™'Ÿfk£ Ç· ȵƒ}ü²,mTm^Gie%¥¿)bO›…œ»ÇcÇŽË™D°¦’j³‹¬4°¤g’r²’Ê£F\W0<Ê„1Ú?©äýÇ^cOõÝ:‹DDDDäæútë6UТ¬$´aˆÄP�tt„€�@kÂ@Ì@¨¹’Êú�ÐŦö<ÎOå®c{]xѲÁ–Œý:ÝyËž‘�ý`GBòR½Ç io’¤ªæ¯K\þãËlØ9‹0Án'çûy”?½•6OàçS¸´™_-âéŸvbœÉôïO'+¸o >z†�ï®c­'—oçeRõZôOT²õÕJˆ6aìbúc1oZä'¥L¡p¥�µ¯ì`Ý¿–Bœƒìù…,½Ï@j† Û ´�ÌÄeRÒqÅ�§u™éWð£T1™äNL¢æ��¼ðª�Ÿ=z��•r‰þ¹ Rïd\ìf^]]Ag­&++àpÅQñ»Õ¬¿ç掛ÄÞ-ëXS‡5%›©SưyÛfЇÜwa”í}Üx'µo¾Èª­@T ‰£gP0ô:Tã“=ï°÷@='ý§Áœ@šs¹w»Hˆ´¼ùÝ_³ñO'!z3—Ìd”nƒ&""""""·v`þŒ�¶mä­Ã§Ï?Õ~’ÃûJhD³`ú(úëó‘>ܲS²O»ß¡üði –á÷ÌcÑ’Eäg' ´»+ùȧ_DDDDDDúv‹Ž0Ÿæp­‡Ó@tê8îûoIXÇ„éÌÒFÿ„â/¼t �Íì+ý¿Tzš9ÕÝŸÄßäÞ{sHÖP´ˆˆˆˆˆˆó-¡»™#-]$¤¦a9û¼)�´Q }ôÄi>Ùµ™ºOCDÓÝí´Ô•ó&ñ_©éÛ¡Pˆ'NC||¼Îpæ:Oqª=üW‹é3*w¾Å>O§ºcIH¹�q¹q%\ÐôŽÃîÎeÞâ’ÎÔS^´™Êh?TG}p£L7³�9Â[o½EGG#GŽ$//�¨¨+˜ydÏo†9K§’üeMÔwóóßV8ûþQfìCn'÷[3ÈI2à}wëš'Sø óËëän7ÅÏîfࢅL²ÝœçÁMÑO""""" Ì7©`ˆ³·úªß³�ç¡ÿhèlçäáJJŽ·=:£bz•À˜»sH2¤‘“‘LeKtµq*Üä�¹««‹ÒÒÒsaààÁƒ 4ˆ¬¬¬¯Î ™0‰ÅODB{È�çíß²é�Ý$/Éì靖ˆˆˆˆ(0ÿõ­:Û°®˜QÌœ£âá³�wòú>¡Ý_Ge].£þ›åü1ý`?ÿ°¬…h ‹¡î›¿É>Ÿ�öööÏ=äÈ‘>sOé&Š«Z0Xq8­@\ä5?îÒ"vík!eÄ<,—9³rH4„¨Þ¸ŠýI“1­åx‹CÖ &›öSá>ŽÏo&{ÎÃLN5€ßCÙ–íT·„¶ÑS)¸ß‰µÛÃöÕEð`!3—û­8䪨÷C¯ñR¿›]¿ÛÅþHùÉß̧àž4ÌGvñ|q€ì‘¸ë}øN�cÚÃägXñ¾·Ž GœdãÁ}Â�?4˜Ü‡ ÈIõìÞRLUc¢Ì ¾s³ïJà ø?ÚΦ�ã7Å10Ãqñ/M¨–¢g+H^²�Iñ½gT¯c]Cch¢ÞëÃå ïÛùd%Ç+)z£ O û°;qËðŒZÁ#Ùõ=»›˜lî*3yOÌÅÙ¼›¢7«h vBT"c¦0Õe…`E¯SÑ1¶T2C=>æ¾Û%"""""—vkÞ%Ûh!6:ü×xÇXFÅ߸m ŽØðóŸ�8ù¹Ã¢¿Â=sÑçccc/~À‘Ýl¯2“·¤�eK pœjÀ¹0Ø·�¢ºDf,-dù2)TÆæw["ý¢þ¨™¼‡²x~6¡÷Ѝ´Nã‘G3?+@Å DíÎ"jm3X¼b9Ë—æ“ì.b[u¢’Éž5›ìAWÚ²p ¾ðóðüq µñSyâGË)üA6�÷¶³÷$e€ãŽŸÍ#�.fñý6>.¯Ä �VOöûaáß-&XåÔ!Ü;7QeÈcá�–³|I1n¦ìÓ„Ü”íp“8û –?±˜¶<�«ÿ|üi!yæ#,\²Œ9ÃêÙöv-!TþaÇ�³bÅ2Î_�4QšÌâ¹d™[¨x³&.¤pE!Kî1S¹³‚únð~°�ÝÁ;Y¸b9˾7ŽP} ¡HßõÙ.ùšfC"IÂ=Ýà\<è:Ù%úÖ\���åöÛoï}ÝÀhdìØ±}¸z¼)·“a°’‘鈌:†ðð�˜5‡ˆ²’1ÆA«Û�7rlò¨tì v¬Q‰8FZ°'X µ·è®Çý—œÙ‘2Mid9ã¨?Ô˜Iv:I޽’¬ìÇ]^ES’‡µ÷KŽV°l¦3\¾ÍAš5€ÿ³È‹f#í1Û‰ øñŸ�%�r;ñ¬tøý„ºëq{ŒdŒÏÀ `v’í2à©k�ãõÔã Ã.Ïž5†´køÖRÆà´†ß7mT†¦zZBõ44Æá�Œ0;ï$k`Ï£âpŒ>û¹$’÷w…Ìîë°4Û½ø»C4|ÚDbzö¨H_»"S%.Õ.¹üÿãoÍf}ƒ‘éÉTmâ´û=ÊG&0i¸�“UUîèORrÂ-×êÜÜ\ihhÀl63f̘>ï”Ýa0›ÏŸ1fb¢Â�¹# éÝu¬ú Ç…«�@$t†G@Ïž@ ¦ .¿tè°õ˜÷kŽ588;^ÜwF>YÁKÿ³"Rž{ÚfÏ™D"œ ì�†½l{»š£`ˆ Ñzª“s— †óSŽ£€Sê ¦‹¼{w€Žv/î×V±ÿlB!ÈðCG€“ù|y3ækXÏnˆíQF3Æ`€@wˆŽ ™�æóÙ×ã (3æs¯…hÚ·‹²=ø» ÐÝJKw #fóùf³é˴KDDDDD¾®�¾‘•KN]kaÿ¶WØßãµèÁ9Ü9òÖúqå#GŽpôèQ¬V+ÙÙÙœ>}šO>ù³Ù̈#0›{¯Z5˜ „çl¨­•Öî8À@L¬™ä{–°p¢õÂ8Ëñ+©L”™S€@;¹.h`Ž5_ö„ëuÓ¯¾t׳û÷„îYȲ±vènb×Ú×¹æ‰ÆQVbb÷Ð2ò_رb‚ÎͶ^ªn=.2ô¨PϾ¦#@§ÉŒ9Ê€ÁèQ^+þÖ>Ê=YAqi Y�.fÒ@ø*X÷b=`&Æ�Àù7óûýᾸT»DDDDDäòQáÖ½�̤¿ËߌI#!6¢ :6�ácïã»;ޤ[èRAyy9[·nåƒ>àí·ßæ�7Þ8÷¸¼¼œ×_�“'{¯Ù¶§$×ø1µ~ ÛOm�'8 8F9ð~´—¦`8$·|PLñW1�7*� G'î}žpÐ x¨ªëÀ1*<"ÚävÓÔþ×´8@ ƒ}@x8Ö[ûnÁkŒÌQÉ8G†¨ý0Rßn/Õ;‹¨hÁÀ4w{¨=÷EU5õÝÝqf?ÇO„ëà¯ý¸÷~õûÙï ×Ýóg¤8H4$“–ØŠ§.¼æ8p°Šê“}59@È`%1Þøñ|XKK(DGÈÀàÔDZì¯AowSín½|»DDDDDäò±ò–n]ÿ$ÆÞ;‡±÷ö½KÒ]ßgù]éçLžX~ó7±©©‰�?þø’ûtttðî»ï2kÖ¬óO�ÌŒ¬MlY»Š²ØDœcÓIl Ìcg2»¹ˆÍÏ­¢0¸�©³áŠÇp 8§Pÿ»í¼´:<®:pl³3 Ð]OÕÖ-ð`!ÉŽklt”ƒ;'ÚxýµÕ¸­vfå1õ›õí(¢rfâ5} œ÷Ï¡iK1/=ÛA'Fì#sÉlCy¸y}ËjV™âH�…ÓZûù;§G¥qç]©¼ºõ%^Š·2p¤‡Õ}nÄÙœ–ˆoÇK<¬•ŽØtf~׉ȹ2î7Ö±ºÊN¢#›Œ4hºXßÉÄ´WÙòË5ÄÄ$ãž<&)¢lSg“oæ¥U—�J¶3üºT»DDDDDä²úE¶ž�!<òÜ/ògt$Xÿq &²Åž9sæ�«yC¯×«^¿»Ý~UûïÛ·�÷ßÿ²û�F}ôQuð—Àûî:Ö5O¦ðAçeöô³wýsxî(dîh…Z‘¿:ðöëw7ÐtD¶Ó@�ðh`è"<Ìuæ‚í\0–¯°îî+û‘è®®.uÖM'„gÛÖlqBÇ÷S{,‘´…e‘›�þgþ7jÔ(Ž?N(Ô÷té3gÎ�––¦Îº ¿~ŽÜ©8ߨÎê_tb0Äá¸wãlê‘›�¦dßd®vJ¶ˆˆˆˆˆˆôx5%[DDDDDDäúS`Q`Q`Q`Q`Q`¹ñ 7ú õ;Ã""""""òU fffffffffffff‘¯)×öΧ<”nyƒÒ?ÕÑØâ£­Ë„%q8™wL&öt\v}8""""""òåéÙz>†ðÈs¿ÈŸÑ‘`mL@ &²Åž9sæ�«~×OKxúg/Sy"òØlÁÒÝF[0òxÀx–ÿËJr“ô‰ˆˆˆˆˆÈ5Þ~ýîÚ�ŽÈv¡ÈÖtg.Ø€/c„¹«�¢_n‡å9,øûÇ™žiÇD�c*âŵETŸØÃËëËÉY™‹EŸ±ˆˆˆˆˆˆ| n|`®-aÇá �Äô¿/$?ÓyÁÄ ;æQ¸8ÈÚ?™È¹;#@W5/,~ŠÒÖTf­|ˆÎ×^ äh&…ëW2!Ú”°aS Ö5ãë[¢‹oN{ˆ3\á°ÝQÎÓ ×Pٕʬ§WóÈÈð»Õ½²”'ßlÆtw!¯®˜ž�¬øÇ"¢Çóø?gQóëb*ûèŒNîÜ¥,ÌK%\Ó6€¤ñäf˜>÷ºeü#¬\6�)cEª c4Ð奿µ—)oMÂ14 ¬YÏ“?}™Ò}ÍX]ã™2Ñ…éD5¥ÿñO¾RGðj*f2…z°† ÏïÆ”3�ü»R0ž8@éKO³±6\ZÛ;kùé‹%TŸJbü½³˜>Ù…©qEÏü/ÖÐ %"""""r«¸á#Ì^¯7ü—¤A$E_áAÑm4šð‹µù¤F£øÕ�4!iÚ?ñ‹Ç²0mãÖ°ü™rv½FÙ¬Ÿ0=öjk؉kÎJϳ¹ØN.ã…}Í”•Õ0/#‡ÿŸ½û�ª:¾ÿ…a'a'0¤ŽÐ˜˜bFš‘7#e° 5Rc5•¤b|5>5¾5Ôm‰žPŸ …cC5œ–¼=У/£oƒÁø#cÄÂpt¸`x`"¤tl:ž0’l“ì yþ˜�„�  üæþ\×\�ù±÷^ë^kö¾÷Z{ÏþÝ�´ãgÍe~Þ˜h™¦¼Éú&¯´�L"B!„BI˜Ï%ïï‹øåŸ�ôJ’cS¨Çõ<•öOÓcÉ2ж›ÝM�ÀìSí«NÎp’–´w{#�Ÿt2ëÆ³ÜÃ8ÒÓ�ߢ;•´FÃδЌƒ‘cF’À¬[ÌãŸÜDú ×c¿q:÷M‘Ûz !„B!„$Ì_Aê5©ÀâPRc pÊÈ Œ·¶m475ÓvÊ'P‡õJJÛÚh�†F¤ôNx“IIÚ¡­Mÿ[˜Br¯Aâä$%úŸöNôŒùÞ|Šƒ+pmú˜nàÀ‡x H¾þû̼‡äÍB!„BqE¸à×0�¹!�‘Ÿm£aGOZ<þž_ð쯟åÙ_3mXœ÷žÂ�œLŠˆ´r¤µ×ó�m´¶($O±›‡uFo~"ßn‹³’Ú>ïùëHX‹þ')ÕF1ý‘_Qõüs<[6Ÿ¢¼™\ ´}ü+_ñJ‹B!„BI˜¿¤ëg1ÓšaÃï+X»³åÄ͹:??„çÝ�4jg°œätÒÇE—ãÝî=±Œ¶�¶°»HJ#ÝJψ3Ghú$výt›÷®8 sä0Û>ú{ìÿ‡ðì:ÀˆñcE�ÿù&kV¯ÅÓžÊøÉÓ™5§˜Å8I´ÏúB!„Bq9ºð×0Æ0{ÞÃì_² ÷g^Ö,}„µÉÉ(‘6ÚÚ�¿)�1Y³™5n �bæ½3Øøëõz·‚'š§‘–ÜŒw»—6¸>÷>¦§¤‘ñÍd6lmÃ[ýK~u ü^ZFŒ„ÏšOuŽRi~ç—üâ;£B±ÅÝæé3Ò£IýÇëYûn3É;™–15¢ÑôÑ:IÀž‘.·üB!„BI˜¿‚Ñ3yüÙ1lxãM6|ØHÓ?ŽÐF2#¾>š évœ3f1óúØÅÀ‘ø‹Iž\ÄÓe#yñ•�|´wŽ%3â:³î¸�ûfŒ�Ý,™i?šÏl­Šõ{±{‡BÆ÷ç3_y™Ÿú›A×é„7 Ã0–»~ìäð+¯±Å¯‘<ÒÎô‚‡)¼>ú{áS”¨/²öƒÝlù“‡NC#¾žÆÌÍáÁ;äw˜…B!„âJ1(öèý7D§jŠýkˆ%ÖCbye"04öP»»»®ˆš8¼–Ǿ†Ø)~î)f—Æ!„B!„—uÂ;hP& _Ä@'Ð{D€c@wŸÇ‰ÄX!„B!„}HÂ,„B!„BôC¦d !„B!„¸2^™’-„B!„Bœ{’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„çÒ�‹µâŽŽ:::ˆD"1 ƒÁ@bb"‰‰‰Ò®ÄUݾ…B!Äž0www£i���RûâŒD"4M£«« UU4h�´+qUµo!„Bqq\ð)Ùº®KR#¾”ÎÎNººº¤]‰«®} !„Bˆ«$aîèè�Z_Z{{»´+qÕµo!„Bq•$Ìrm©8íGÚ•¸’Û·B!„¸Jæîîn©uqÎÛ�´+q%·o!„Bq•$ÌB!„B!„$Ì_F¸�Ê’ù,|Ñ‹ÞëéÐ{Ë(Yí…ˆWÉ2êCý|ö¨�ºç–²ðgó™?>ó.eÕ;>´sµmûkXTVCà|ÏšŒ„Ø´b)U;NÝòõp>4}•òé¸7—Ê­ú—\¹ŽÿÕ¥,{;€~.ËÔî¦rî#<òè#Ì�;—¹sç³ð ‡¿üZ.V ô¦M¸žYHÉühû.Y\IíÎð9[uèÝóX®“ú¸‡ª%•4„Îu:�qkúŠ}_P·|)Õ{4„B!„$Ì_þXú#7Ú·s°íwã=«ûßèx^®¢AÉaÁ3+X±b�eÁûUTï8G©ÿ#—Ò'r±Îs|PM½šCA†z5Eë]ùXÜ.êŸëVn%ÿ_ŸcåÊ•¬\±„‚Ñ~ª_n |9UOÄOÍsuhÓæQ¾b+VTPz§÷ U4´œ›U˜fÌcÉûy.ˆ†çµ·�iºšš·…œÚñ¯©Å¯#„B!.C.­Í ÑàÖ±?”…¥u) »4SÏ4i  éXn³cRbǨ£3)\hCO‰.C?Ø€ëÅ:|­ $šqÎ.$×nŒŽ½¨áå§¡5ƒït¾Ï§·UP<%º ýÃ*¾g¡ôÞ0•ÿ-ÎÇbãyµŠšíAôÁ*Ö[ )¼ÃŠJï:5Ûèã7r(|0³¢á{»Šê‚èŒvr~TH¦ùÔĨþ½·¨íꫪ¨èM6£{�"è·<:õåKñ÷·ý ³1õI^|ëVáúKe¸ Ûd#`ŒmGÏZµ;Bè€:6“‚r°#:’ÿB5›j0ÔŒ3¯ˆüÉ'ÇIÛébÙ«:¹OáPüÔ¯®fS“ŠŠå– o·¢žTï™”.È&û…eë½d?lG9/‰‹{†uMˆpŒ�Àû.\ïúÐ"@ª�܇ qŽŒ¶©þb|r“u³ê7õ˜X@¾M�{÷ïJp�ÍÅØä!ØBKÍ¢hn6e€ôÖ$6cŸlŽÕ‹‚iJ¥ uxlS¶WSõ†‡ð1Åd'·°‡):r¼<`ÃlÀý·1n=€}ñ²R£Ÿó¯YˆK)bÞ°–s¨xÈ'ÆFÐâIJ=À&—‹ú& " Z³(,ÌÆ’Ô§Í Ôb#çÁXK 6Põ\-¾“ʼnµW2Ùoy¨ü_î~·I^ŸØ Ðw8ê£ÖU�û°­Ë›ò)ʳcD'¸µ×›^Bº‚ñ†l ïÏÂrR RÿÛJ<7³à á3©÷ôbÊîÉ&{Ô"ê¶ç0ï;FÙû!„B\.­æƒ x8Í ö©6‚[=g1 hÂ>ÙŒïÕJªßóàFG•ÕTFˆ¨{¾mú*ÊËYò�ïK5x4À @³�pÆ*ü€i“MøwúbSƒu|;}˜Ž“’ÍðVÕMvæ•WPQ–‹²¥ŠZh[«qí2S°¸‚ò-%««ŽªwƒÐÒ@íf•ܲrÊŸ©`Á­àÛè§‚áh¢giD1ÍõT­ `´œòòrŠ3‚T¿EW70?ZAÙœY8&ðŸñãÙ­`ŸÒ;ÙŒãø±ÔvÕQ«EÛiyy)9©~æ ÆÆXÒ¦ûð4špd˜NJ(ü»ü˜2œ˜`˜ƒÂ§ÊÈ·éøvù0Ýœ…M FœÓ¬„÷x 1b<À³ÝGð(˜¾SHÑm–SÊ „Í–h2‡Ž_ó�L ÉŠóFSt„q€òœ~ûcIñ~?¡qFÇTêàØzwû1OuÆFUìSmèû|;xN+  Lȧìé"ǘ[½T?· óœb²G+ àÝ Ž,GtÜTµ‘9YÁ·3pJ½p�óà�Ð9lXÇüÔ.žËÜÇæ2÷ŸRµÏLö-Ñí'5‹¿^@öHëD3Úç!´¸1Ž-3Æý’ _zEß1EOLÄ‹}ì#–ѸL˜¾¦ëÄàÔB™sË(š¢ØâbÙÂùÌ_\I͇At@Ûã%0.“¬±Ññgó4'–&¾ã™ÙXGlÔ\Åža%°ÃMÚzð¶ãÛkU‘81NŒK%EEiöàÞ |̈ã‡ÅäÚúÎÐ ‚˜,–hÝGøFìŽèßÊh'ŽX—ˆ_ž3Ø~NÓw"~|�*ö›mÑYIVœ7ªø÷ïñ´8qš¢1Ìüq9¥ßë™ܸŠêϲ(~ÀŽñ¬ê=vÞÃbÁô”_�B!„¸,\:S²uîíAüÚBæ¾v<ÑËöY·ŸéÅŽ æŒ 3r�ð>7µ/®¢’2ÊÒÂh­\O–ôZ§ŽµUƒ€ªö$*fc%^?ØŽyð™äŒZ{Æ5MGU{%I44M'ðÎ2J6/ƒŽ>Ü„¦fSø˜NÝ;5T¾‹“Ü‚|œæ““ŠðçŠÑ›v«¡}ÁIëQ“Uøh <öþ·?ôÞr–¾MT-w–QС£ U{¦>«j4�@#ü…Žªöšf­ª¨a4MŔثÖUbcw¾·]€‰œÇ?F;Æ»²÷àž:Qn ÷,·w‚hP1ªáÖsyZÈJîâR²MÑØ…÷Ô²jE%<±€¬Ôž·k¨ßB7ZLöbKèvÔP}LÁ:çx¬ôø±�%GJ¢rÊ©*M‹ƒþš· ûmØoô0�uT¿TIMʲ4 ½±†EOÔö4‡ÁflÚñõ,×8Ù�ùM¾v'&�&a1@Ï9Š81ŽÄ�¥2©€?¨£îÝUÔ=§cž’CÁœ¬>S²u­:ÆáÇ·DCÓT̉=ý×ûx€òô¿ýî?,¢z�ƒMdÍŸ‡1^ßA#Ü¡bíݼ“U´hhš½ã¡(=ÿoi ú erFÃé·³o½0܈±5xy]?/„B! ó%�/ïqã5Rþ³Ìž+8›jXôG7ÁÛsN=k{ß®¦©¶ØÔcãÄLrni`Qcý&#êp'ùå…ØúÞ´ë`ß…™qLV©Üåáû0fäô™Î¬ ª Z«±Ãa½%H8Ñ„š¢`¹»ŒÒý\£8.“ü¹™äGÂøÞXŪWÝØægÿjF5´Žž©­ÚÑØ¡vÊåAíûo-fÉT=v oD{_AïЈNîÂa4Œ€Š1åäòqTCK4¢bDU5ÂZ¯$¨9ŒrMlt~ÆŠŒµ,±{iŒ¨FY�.!·ï(àAÿEhi ÆIY8Œ‹ðîÓq«ÆÕhaÁÅX’@ßZÉümÅ8:Ú¨ŒÏ¥t¶†k¥‹M¶d�Tˆ½N0ÞÖ$Æ‹A-~܇TœöØh§bÄ25Ÿ¬í l:¨aLQQÓ (Ÿë<¥¯œ’œí8G×âÙëÇ´ö�é'Æ#ˆ%`žšKÑÔ\ÐÔÿ¡×Few˜Oª‡¾±P“4´Ž­ûÄ:*ô¿ýŽʰé±å¦(xâõTŒ‰½ËÚQ u¨Šªªè­aND] ì0bH²QðDþÿ×Eõ‡VЦϮޅB!Äeç™’­áÝæÅ”a?9UëÀ®¹q<“e„ð¼¾ ×Û>±cd=äeÓö æ ”‘vìª�†±Ãذ—Úçkñƹ˜Ðœá@õÕS¿§¿éÌ Öt+Áð·G½TWTRÛd!w�öX¢´¹׿ ú¾Z–­ÜDP FÌf#ʱS¯ñ4WÑÃáXj¡`™`&¸ÃC(]OÃÎØk§)O¿Û¯¨�FŒF#ª&«ã~ž0Ñ)ÆÛ}hÇz—ÏM@�ú{¶ùP&Ù±$X°§ix6G§ÄêMuT>Sƒ/–ôGš1ßZ@nÊ&\oÐ i:ž†Øu›‘îW«¨ßç"åˆFXS1¦œ¿Öö5ài6a£DGSL˜’-À¦íh×ÑãÆ8™kL˜ÇåPp«NÝ7Š(qc?�ø1è£ÕK]U5;C'ÒÎð¾zšŒX­FT›K“›†æè«Úþz\kâÝÀˆ=ÃŒsÞcŽ×ËŸ`ˆã®ø± ¾»œåoø£Ï«&Ì×(pìÔ9ÆísíÄz¬cÃx=Ñk‹õ&7žØÒ.OÿÛ¯¨ÆXûVQ ôƒ{š†wk¬šŸ†�6»ã$;–ƒn‚z4«—Qu<†CM˜¯±‘ÿ �À«Õ¸Ãœe½Ÿ‡ §‘[~ !„B\.�æ£|&ì³ûF¬8Òuª¶úÉL=Í2’lä?V@ÍkÕ,- ¡E@fÆ6­ˆâÛÍ`€œ‡sp½¸Œ’µÑƒwëm…ä¨Àgý,o´µÔó)ègF¸qZ…�*ªÎGCÅ:³�"›‚J…‡\Tý²=Œr’ÿ#3ÊðL²ŒUT.¬C ŠÑF΃§Ž.«c,ß Œ8±À|kÙûªXú/õ¯±‘9Ùº2Xâ—ç ¶€ ÙL]…kq µF3ö©ÌMÑq@ã´ »¨ZÔ½Kö„,ŠïŠÞXÉ>»ç .ýLCO²�yôfwOHæý¹x–¹¨›\Jn^™««YúDt$Õ”žCáX>íg›> �ˆŸšE.”8Ó^¯t¡÷–±,�Cù?+•šš*íêr¬cieˆü%…Ø”«­ðî•‹pO.ðg¥úkßB!„âK&¼ƒeðEìÑt]±G„èÜÈî>�‰±¸”¬dÝfĽÞsõýôL»�úÍ:Y³ÎÓo0‹‹ÏœEÎu\…WøÞD}ÐAöM2![!„âr! ó%È4½�l­ŽšWSʬã³–€³�ìÑÒ®\*ŽæcÜì¢!t;¤îeÖûr±%I+B!„¸\È”lqÙ‘)ÙâjkßB!„âK&¼—Û”lƒAîv#¾¼!C†H»W]ûB!„ÇO˜‡*µ.¾´¤¤$iWâªkßB!„â*I˜E!!!Aj^œµ„„E‘v%®ºö-„B!.Ž‹2ÿ/99™ÄÄD:::Ðu�îîn‰„è× AƒP…ÄÄÄÓNW•v%®äö-„B!®’„¢×êÉ¢�v%„B!„¸TÉÏJ !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„’0 !„B!„Bf!„B!„Bf!„B!„âRO˜ý.~zoyyy<½�–“^<ÄšŸç‘—7—ª½_}UÛ~[@^^EÏ7žx®3°�ÿRDÁ½yäþŠõÍ�TÍÍ#/¯€gÝç¿ømþ%yyy䕬å�´?!„B!„�„¹?�;Ö²vwç¹YXðM~qo¿xûï'žJýFŽ)núÉÇ׈§æy¶ø�À5vff¥3:)™ñßtà˜’AZê9.`ä®Çò(X¶…ã¥T®½çÎôÑ$KûB!„BˆKÖ�‹»úf6¾¼‘ïÿë,F}Å%ý}û6>ŽÀõ½žK»óq~qgïwµqäh4uwû£ß[ëO~ÁÌóQ<ÿfÜÿÆô<•0ù>Ÿ, O!„B!$aŽÇâÀÑîÁã{�uN§xJüñÖ¶�×óâ+ëù¨±™#Ç`ĵiÜtû¼#�d±¶ä§¬iо÷ãÕ?!¯ÚÁüç~�ò\ �ŒøÞÓT=Ô³TàŽ õ~üÒOÈ«¾ž[HóÒ'Yßœ€óñjwF_ï<¼�5/­eËÞÃÑFŒMç{÷1ÛÑ3 ý÷×ðbÍvl¦�dÆÜ0�ï>ÈLK�Ïñ䟎Dßøá òª˜þ EÿýK ï…q÷ñÛŠÙ±\º“×°æ�-4þímƒ“9ÎÁÌ{ìYß�5ü´t-‡’gò‹§3ðV½ÈƽÍèêxœsæSüÝ1$ÄN øó^|g�Ÿ¡“dFŽMgzþƒÜ7e”´x!„B!„8CoJvd<³îv�À¶Ô¬çP¤ÿ·uîvñäâ*6ìl&%ÍÉÌ›ÓHøÌˆ~É“«é$•ëo�…ýšèûGØf2ë{NÆ(}—4†iß›Ùç}·�Ö_žþÙV³¾™LóÎõ¬zúy<_Àˆôï1ýúØÂ¿î`Ö�³pÄÉW¬[Ì“+ßÂó·&L�ÉÌôTÚ|[XóëÇYᎮ�„€¶FÖ,‘FÕŽcÂ:�`Ës+x+;¹Ð°’Å¿_�÷ó‘8³¾Ï¬[ÒH8ìfí³å¸>–/„B!„gêâ�0G:I½å>nÇÃ[þ7YãžÅãßîû¦¿³¾ú]uÂÈÛòÌ#v€¶©+˜ÿìÕ¿ÌÆï?Ŭ;gsxÇz¼ŸÁÈi÷Ptç¨Ø§{1Œaúshóo8ù}‘F¶ôYkã[kp�ÛžZ|£€/?Γ¯fËÛÛ˜=y&m‡5ÆOq2~ü,æçÙIh›@Ë�Wàþì#ÜC±s6³ncËÇH3�šÝö¾73û| kÖ}L'É8ç>Ëã™É@'3Vÿ”'ßnfKÍzf;g÷ÌêŽ4£|û~uÏèl$ùçO²þÓ|´ëï̶ŒbÿîFÚ€ñ³æ2?/ú©–)o²¾ Æ+m WN !„B!Ä%ž0$Œ'/ßÉÆßºq¿ö&¦L?ùõ¶ÝìnêF`Ÿj�M9†ä 'iI[p·7ÒøI'³®9—õw?n`äÿå8qmõø9ÏR=§ç]©ß-æñïOb¡sðR‡í�íg±º�=4¶ éL»éx2›@šÓÁˆ·×säàn?ï•0F3íæ1'ê/mLë?íD kÑm3’Žp`Ýbÿä&Òo¸û�Ó¹oJª´v!„B!„¸lf ùæÚÂîv )�tëÉËÒÛ¿êˆó(Ò¯ @ó./‡bÏz}1…�<Â#ËÖó÷Îìÿ@2öïÞÅ´ô4Ò†·Ñ¢O®Ocîlo£-Þê¾á - èÜͶ�Ž¿«ïVG€„q¤?Ómo£ñ?ßdÍêµxÚS?y:³æ³ø' €öYsüíB!„Bq’!—ÆfŒaVÞtÞüÕŽDNN^gÞ;ƒ�¿^Ï¡w+x¢yiÉÍx·{i#�ësïczj4q1,èäÀ;+xöïÓ˜Y0ûKoMÚ÷gãø`ž�_æW‹`ñw>Ú~ #™yÏLFšù5àÓ6<5+píM ÉÝcG€ÿ»ßy‘õ©÷á–Bй÷5žýí¦Ýþð©¿÷<ÜÉ}¹×³ûå�q¯|œ_î°3âóF<;š!a 3î�y¿Q­ÐùñzÖ¾ÛLòŽF¦eŒF�h4}´ƒN°g¤Ë-¿„B!„â ¾T6$Áqyé §<Ÿ<¹ˆ§Ëdfz*­{7°aû~:¯s0kîÓ<™7>v#°wÏÁñõh;Ìh;ö6fäLJÏçû#éüd ¶&a¬“û*ú{цñäýäAœ–dô&7?lf\ÁB?zö ´í߆çp+©™÷ðýô$p„¦]�4÷;¼›Àø¼'yúÑY8¾ÞIãÖ lÙÛJê䙕=MÑä³Iq°>EÉœŒÔÙò§·xkÃ&¥1óGOQr‡ü³B!„Bœ©A±Gï¿�'ÒƒbÿˆŽD€D`hì¡vww7H5 !„B!„¸äÞAƒ2 ø"öè zŸæ®Ø#ºûBº‚iR…ecí·š‚Ô•/£^ÏbÁ“¹ýôû3ùn¸ØåýòqÓ6/§ä#å?ËÂxÙÄM'¸µ†êw<>×{ö+sòqš.ªóØ'Ïfßë_³�Uz!ÚNÔí¦å ©»vÞ)Ïyn*gÁ­ÆsÐ}¤âÜ�fqEéêê:i‡ °{÷nþë¿þk€^`%ÿ_ŸcåÊ•¬\±„‚Ñ~ª_n |Y•\ÇÿÚrV5€ó¡2VüûJ*žÈÇÖRÇòUõ¿ìb#~ÞöŒ\¤Ï  òÞ{ï�¸‹hWWï½÷Þ‰ñþ(_Ϧìߣ±^ñd!NÅͪgªðœ6ؾ�uøB—høC ¬Z^Cດ¯à¹ß–S<Óˆ÷…帼_~ä=´³ŽMûÂíóùÓŸþtR¬ƒÁ úÓŸ¾Ò2M3æ±dÎùOµ­.ªv™È_´’•¥dvÔáz'Ðÿ›ºñ¨Ùä|̓{ÿ¹ÝŽ UÞ«.nÁzªÖ±?¼„+V°âßÊ(ë§ú…¯ð]|®¾*ÎSŸ<Û}¯ÅfEßç%p|ßÐîÇRÐ÷ûzžÓ|øfl“Œ²�B\T—àï0·sà?×òÎŽ ]Ç€”ñL¿çn¦!t}º�7ÞÜÊ ”!&ì·ßÍŒ‰)ð·zþýÍvn¸æí[<|ßxö¾ñ&ÿu°ý˜ÎÐ±ßæž|s‚üJ …NÚa÷׿þ5þÈãI•{†uMˆpŒ�Àû.\ïúÐ"@ª�܇ qŽãyµŠšíAôÁ*Ö[ )¼ÃÚgƒÜ¬úM=¦�oÓ££Ûèã7r(|0³¢ãþ] î±¹›<[Bh©YÍÍÆ¢høÖ­Âõ—Êp¶ÉFèoœ%Ü@íû�õ/Ed��Ål'çÇó0m×P"!Ÿ?‡£®�@à”뻺»» ˜Í§?W¯¤Zɼ¬XD톎{,î¿|¡w*©Þ„ËÐf—R8ѧbaßæb™ÛG°,3‹(¾ÓŠ á~¹ŠÚ�a@G�˜CáCYX﨡j�‡P—Ž>ØŒ#¯ˆ‚ #h~êWW³©IEÅrK…·÷¬ç8ÿ{uø'äS~�#öšëw (Þ@`DìØs=®ÿ�Žèëö»‹(˜j‚¦Z½¨‘™ÆûIˆPìyó(H¬§òm?¡Á•,Õ )˳Æï G}Ô½PͦƒÑQg^ùJßÏÛÎi_ÿë_ÿzFÏõ¯ÿ¾«m¬ŒŽT>®…õ¨·™ î…Qn*dÞ=6T4|o¬Âµ%ˆ2Ü‚#Ó„wƒBÁ’|¬Ä�ñIÌN ´Çf+˜qN¶Pë ¡c¡ï[ý[½3æ‘©X¶ÕGîD[ì=ñ¿Bï-cy“�L|x‡§fQp‹FÃû>‚ÍæÛ‹)¾ÕLèŒÊËå·‡l—^¨¸5 ·a«=ƒÛÝó( +˜€à;KYÊ?1’Úó·…†%¸Í9{ þw}L6Å?ÊÂ|°†E/†qLÔð +8æ“o7Bä4ßí_ÏBÛîÆüOüõç§Oží¾WI³cý|¾ÏÀ2Øï%ðõLœa¾°˜€&þá6r®ý`®ë𵂒hÆ9»�\»±W»XNÕ® ሉÌû‹ÉŸl?¹Ç̾·Þeo;0xü÷ZlSRøm†îÝÈæö þù|J~þ(3Fdïaù-»«AJJÊY=êIèží~”IvÌ ¥�š×C8VAù3åŽöQó–ouQÝdg^ye¹([ª¨õõ>÷ã§öµpG1ù6mk5®]f WPþ¯¥duÕQõnì¼ö`ß'�ýØJËæá ×Q¿G‡¦:ªÿ¢’[VÎ’EÅØZü„ú¹äOßï'�êÀq]Ÿ’,8o±a2@øƒj\ûl=UNyy¹jUoúÐã®ßHÖ9X‡:((‹îÈ}oWãIÍgÉ3åT”d¡¿[CC3м ×ëa2TPñëR²¾¨Ãõgý”Ï_ˆXÇ›ÚÙ?#Ž)VBŸø¿|–; Éúº ç�–P8E�_‘¾°ƒyKËY±0Þ«fSô5Tï³Rüt9åOÏì¡v»‘›Þðbyp åå”?jGÛé%„Ž÷µ*6%æPúL9åOæcl¨¢v_ß2ñí c›â8%¹1Ù3qŒU!â§îùz”;J)ºœ%�9¬q±©0Ÿz N,dÁe”ýÀ„{½›Ð¤| ¦š0ß6/z`·/èx׺p�.¤¼¢‚òÿiÁ»ºϸ>Ÿ¿}ýLcÚ¾‹ÇüøŽfRü³RÊžÈFùÏzº-a)„¸’æ„a¤t}Êž�ø‡6„ÔŒ»¸÷f3„ö±¯u£Lȧìé"êùíë·ÜrË)ÏMŸ>ýLΊ ÜwOìMØ¿K†R̘Ä[!¼ßOxB¬O*f2o±£ÄúdÜÇ¥á{µ_dSxë©GËúž|cœØ‡ªç8? »£YÂ龫#ú9ƒ sª‚eRl´ØdÂøEøÔKNâ”÷²‹Ûߥ*n sPôä<²SC¸_­dáÏç³ð7Õ4<³Ë#,LÀ`Æ>ÉHpàD’é8ÞO'Ù±´ð·œþ»Ý”v)í{�Ø&™ðïñ¡Â÷ X'𱦙 6úcÏ…±N²B³o«�¬›£u­ŒËÄ™êÃë�-*цsJô»Íx£k8€¿åï#Ϩ˜É]XAñ´è¶¨¬˜[C„¹8ûH!Ĺsq²È~FÈºŽ§ïª�» ¾`ãõTojó�ÌÈÉÆÞÞJ{û^ÖVVôltWcµv$ %)¶ó2ñ gnfó¯ò»µ:©7ÜÂ]9SeJöUâŽ;îÀl6sàÀTUÅét’š:À�š[É]|ü&M:á=µ¬ZQ O, +5„çíê÷„Ð €“ÐÑ4UíIR”¤ž AÛQCõ1ëclô!úþÀ;Ë(Ùp¼èèÃMÑé­€’¨œr*KÓt”¡jφªö;ERQU”p86�¼ÿ¼ð:ªÚëÓªŠÚMã­ÿ”¥üu5o¸  :áG$z§jzo§¢p¾omc0x衇ضmÍÍÍŒ9’iÓ¦a0Îj9á–0ú°è4çxå;Óz8~ h<1¨¢¢ª whRÿj-ž ÐBêLÙ?.‚·ë©~¦šÐPYy…䦇ю†ñ®,Á=¸§Í(7ö9�7¨¨‰ÁV âM mÓÐ{·c¢Þsgñ3‰W$^_£i*¦ÄÞíñüߨè›ßü&ÉÉÉìÚµ €o¼‘qãÆ�Qâ5PßíU ”~ö�š¦GûÛñw�=õöʼnq¿-ïšJª›�ÿ$›Sï¥áÝæ%¸ÓCÉc=ñç /Úçi¾Ò+¦P”Ø_†x±é¿¼—_Üø.½ q;þ5`%3ÏJfp4ˆgc5ÕÿæB}ºø´7wêý=­$©h±[C{Åx°‚ªhh§ÿnW‡ª\g»ï5O²¡~àÃTÇßb!s,¨Ãmßñ8ªá Zp¤)ði­ÕƒëÉ’^ÍAÇÚªE�ÿRŒ='‹5ICë8×ûÈ3é:Áí5Ô¼ï�ž�Šh#–Xû»ðûH!Äeœ0Q‡1L;‘.¸öÄÚ�ÒòY)¢Ó²’ÆLåŽ{§Â±Vlú#¯üiã¿—BRÊ�ÜõÓ»ß÷`þÓS‹u­}³í3 =È_jþÈ›[Çóã’;p_éššš8xð F£‘ï|ç;´··³{÷n’““±Ùl'ï ã4'eá0.»OÇy¬W£…OcI}k%ó·Eß§ª Z¯$Eo NŒ )ãs)�­áZéb“mY#ÔËÝe”Î0žº“�·5‰ z‡FôJY Fëçfe‚ K¸÷þ\,{í†ÛýÔ¯õcýAÆ”“·—£Zbô ñŒn›Ö«ÝYFÙÍFˆ¨Y¼*z­—ª¢·†9±t-D°Ãˆù<Ía‰D"ø|>B¡×]w6›�p8ÌÖ­[1™LØl¶3LœC¸·0O*ÀñS§|gZǼz~á*ú%QÁûZ ‰…”-ŠŽ>{W—P{âàÚFöý6²ï× í¬¡ru –ò,T£‰¬G—�;v 2˜±M4R¿ÍCøæÌ“ZGx{ õƒ³È7«(a´^ýáå úC¯ÃÉmñú‚UÕk=í9ÜF¹æüÍ/ …BìÛ·�Áƒó­o}‹îîn©Ÿè“ú‰>©ã>ç¾W+©ù<‹�eFGû:ê¡¡ÉNñ¿á8>:¨{q-ªÇvb?Ãï†KÉU7 Üä!`°aë_ÃÌ8îÌÆ»¥†ÀgDæc=ßz»Þç¤LOµ6 õø €/z’`t ­]Ŭª_ý»ýbí{ÇÚ°Eêð¤øº «¤Ú°jðíÐŒ´S0 h5¢w’_^ˆ­o�7õS/ºŠY=·ûÈ3Ò¼ ×kAO”’mV Tϲ¥þ'A.ä>Rqn]ø®:6{Ò6nØKK'ÐÕÊ�-oò—ÏoÀ‘–DW žç_ù ÿè§p­iC肯MdbÒ<ÿ;6¦u×nd_û©«øÇ.\›Ò�”ʵÃå<ÞÕà�wÞᥗ^âý÷ßç�7Þà?þã?xñÅyÿý÷©««ã÷¿ÿ=ÿøÇ?N»œ°¯O³ Ë%zà’b”h6m@»ŽŽ‚5ÝJðÃüíÀQ/Õ•Ô¢>Ê5&Ìãr(¸U§î�›El“m„Ü ÚcIòæj\›¾7§ÉjŸß½‹s$Œ{»­¿Ÿ-5:ɽUaÓ «¨ßB‹èhA/uXE}‹ŠQ=¾½n¢›Ƴ͇2É>ðOq V@×Ð;bÉ_‡ŠiTìÆB;ð~®¡ë`œdÇrÐMCP�nçêeTmöùü¹¡ë:«W¯fݺulÞ¼™—_~™?üá¼üòËlÞ¼™uëÖ±zõjt]x9a? «+© ;È�a°|ŠA�Øü>"!<ú£ tȃ'hÁfí ã(3* pïÓÐÚuÐ<»bSòwyð§Z± ?»ïöóÑ'¿ô¾W±bÄý¾£-vÉ€ÁŒm\÷Fjš ÀH;vÕGCìû‹°—Úçk9ñ½êEÛíÁ?ÜŠmøEØGja4%z hø6{ê:zÇ…ÝG !ν ?%{ˆ™³áOõ<_ñ ­$qíè™ñgsƒ ŒùSÕuTÿö/èƒAIÏ-w:H<„[î¹™7Þ|žŠ÷t<Œ±Î»¸¥Ÿër®�üm̯¿Éï*¾€Á CÍÜq›Œ._É�}ôÑ€ïikkcýúõ<ðÀ'¿pÌOÍÿz„šØÎOMµâüa19cAž�sk5‹ž¬Çh²‘}g.öçj©\geÉݪ¨Z8 ëÌBŠl ÚÁžE[n/$kçr\m,¸­€ÂC.ª~Y‚F9Éÿ‘ààeB6SWáZ\B­ÑŒ}ªsSŸP°æ-`�±–Ú5˨ýLCI1c�šÏ‚;�уŽivQµ¨!:*ÒwfûÈG‹ÉžX‰kÑBÔT3Ž;sÉ9PEͪzÌ?ͺ`ûH!Ĺ7(öèý7DGžÅþ5Äë!@� �=Ôîîî©Fq¡´´´ôûü_þò6lØpÚÏ+ŠBii©Tä%¤¿kÜâÅ`Íš5|òÉ'§]îĉ™3gŽTðÿÇó /œÑr~øa®»îºó__5 _52oQf‰›Äí«�ZÀý»ù¸oZÁ¼›ûœ4hªaÑóP´8àÏ [Ù÷^œ¾&„8Ë„wРL@¾ˆ=:€N¢·Ñê"Dï²ÕÝçq"1â²wìØ±sú>qéŠD"çô}âÊëç絯·lbyÉrêƒÑéùÞí^ôqäa$n[Ù÷ !®Lò[KâŠ`·ÛùôÓOO{Ýê„ 2ßér÷íoEQ<;~S!qe¹îºë¸é¦›‡¾•‘ÑhÄl>Oㆩ™äßá£ê7 ©?ÊèL d—;ÞJÜdß+û^!ÄJ¦d‹ËÊ@SuÅåél§d ‰¿�¸ ‰íÕ!ÄY&¼2%[\MÎö7vÅåO‰³Ä_HÜ„ÄVâ!õ.Ä¥@fqY‰w÷TqyJHH�8Kü%þ7!±g!„$ÌBÄ5tèP¥"®‰‰‰$%%Iœ%þ‰›�ØŠ³ˆ‡âÂ’›~‰ËŽªª$$$ÐÑÑ�®ëtwwK¥\& „¢($&&2dȉ³Ä_â/q[ñ%â!„�„Yˆ�î�!²3‘8 ‰¿�¸ ‰­BœW2%[!„B!„�„Y!„B!„�„Y!„B!„�„Y!„B!„�„Y!„B!„8ÏäV‡â²ÔÑÑAGG‘HD*C\0ƒ�ÄÄÄ3ú=Ri£Bú‰ôqqÚ•BHÂ,®ZÝÝÝhšFgg§T†¸à"‘š¦ÑÕÕ…ªª 4HÚ¨ÒOÄ%Ò®„â|�)Ùâ²¢ëº`‰‹®³³“®®.i£BH?—P»BI˜ÅU¯££C*A\ÚÛÛ¥� !ýD\BíJ!$aW=¹ÎM\êmQÚ¨ÒO„ !$aâ¢èîî–J—t[”6*„ô!ÇBI˜ÿ{÷U™7þÿxFÐaÑY�BR°er­±M*tMódž¶I[ìÞî¦íj­Õm™} ï´Ýt7Ùî° *°ü±¨Qj‰›P2~lX6@Eh„F' FaÄ9}ÿ˜‘_‚Z·•ÕûùxÌÎ�ë\çºÎ¹ÞçºÎ9B!„B!Ä÷Z Ðù1ƒ—uúyæÐéˆïÉÚʙϒ%Kîù2+<ýŸ×yºàsF޾‚àŽo9°áÖ�eLtðײ¡�UEl.ØÌ›omåÝ]¥ì­¬§UAô ~R ¾C¾Ì}KŸ}ö………”––âv»‰ŒŒ¼À§j:(ÌüožßyŠ�‹Cwæ²Rí:{öcbnú1êŽe‘ î÷Mίbs9«þmà§?¾¼kû¿–ÇÿCþž/Íÿ×:ì.ËfÙ.~|m4Ú€¯¯ž´µµñÁðÎ;ïpðàA DpðyÚ ŽBž|xý'^‹¡·´ZÇcþšöM÷²¾'�¬¿eóêÆ-ìü·%ÚH´®ç|¯~ã1žÈ¶8æûõ«ìû¯º½�Îië6Pø¯½T�ÈáÑè”o¯=ÐS¹Bˆž<ñÄ/*pÚÿñú?mþÏþO�~=ÌÍÈÝt€þ×ÞÎïZÂ/ü-¿Ý�ŠM¹¼U#OZü¾øôÓO©¯¯|”yõÕW©ªªâÓO?eçÎ�”””´ÿïÀ�½?tæ°«6™)—[±ú² XÛÿö,…�Ff=´‚Õ]Áâ43ìÊbÕF;êWݸz …»¿éùÝXׯÃuc*ãÂ~@I‰bÊíFªó ¨V/Å2ª`L[Í‹«W³zõJMÖa}e÷w+›Ýe9<û’ Ýø –þùEV?5�Õäý%‹ë+/•Ê¢B*¾áùë·“·7ŠYÓbP~@UE›�Ê” íä½ïº¨Ëí^þwïÞMQQŸ~ú)UUU¼úꫜŒœøK’cCàs›7±¿Y…¶~&“’ýÕ{E‡âµ×^àŽ;îð](inî2Mee%7Þx#¯¼ò ‡ƒ¨¨(ÒÒÒÎZVõnº„yŒSì,Û]ÉŒáqÜV?*¤°ÑLƼdâü;7,.‰ô¹:JüK9QIAN–zP=‹ô™Ftµ<–ëf\¼ ÛÁ\`œ9�ÔØjr^؉ㄖeq‘>/ŠsÈÙV‰Û è�̸7 s8€ ëÙ¬Ûã@ Ðssi7»X×yþÿ2RýjÛkÝàmLiiÉDu/ŒÎ¶ŒcÊÝþhÙQBö‹TžÒe&¦S0Ù°'�ìMV\m J˜‘i©˜ú–°ê¿-—, É_!«ó&GIgé̘nÕÞÎöìl¶ÛUtaq˜":ý¯·üBű;�œÍ6TÝÈdÒîL"ªûŒçVa™Á‚ÉQ¸zJg4l[Ƴö8ŒŽªã3X|[2Ƀ£pÏæÝ »äÊhçàÙ0ÆHÔk;q5Zp($ûµì§T0`¾=�Y£t=—�ÉÝöCƒ…¬¿l'ì®ÌŠS±mÌa]©5PAwÕÒî‡AQ±üm!–¡3ÐÕZq46àÖ'‘>7™(\eydå[qõÕaH0öRwìÜb!lúRR¯÷—¯ (L3ç¡5X}óx°nÈ¡ ¬ÐGê]Sˆéßûúygy; þ1Ü)‹H^ͺ—ÖaqøÊNÔÍi¤OŽA ¨µ;ÉÎ-¤ú8(á&fü:ÃÞ®óÏ,${£•†Ó*j€ÓÌtRº—Û;%pÃ�wS¹1‹œP„7JøçqW³ýå|˜ýèGÜ{ï½TVVvùKK Ÿ|ò ¼þúëüêW¿"::º·#sÏÇŠO XöH_2 mÑ2žµ×VIeƒ‹†SQL™›Î¸pž¿aÅÕGGÔõf´ï[ ›¿ˆ)á*öõv,îz.éî8LÃ}ycŠCWÚ@ƒºå™úq •fÝàÀ¶Ú‚}bG€Û뾯-à±\æ«ÝTpøÒ~»{Q ö£ ¸cf±à×&tŸ\Øöv½°UÀöf3ó&ã_¡adÊÜŘÝZÂÀ7Š"×�ip5%ÍãX´ µ—²èxëIžm˜ÅŠ»}e½ýï;U²ÿTˆöfŽ*®ÏÝ„ÝÐQ_…âÛtéõ07Y)ú0ˆñ÷-dþàîkø ÚìÚ¸‹Ö„»yà�ùüî6¶l£¢èŸ×Ðw/ »Ë@s ‡?70rdÈY«  'ÈŸJœ¨ùŒ!·?Ào>”æ²Íl:<”ÛçÎgþ¿%9¨ŒÍ;k8}žÜ<ÝPGóU)Ü›þ[~;1”�ÞÞÅá68P¼ ÇðT>°�…s'ch¨ ¦Y àÅrüøñŽ¥ËEHÈÙûûÌ>—ËÕåg×ÖJ%[æÚQf¢”Pù%Þ^a¯¬Fij–ÛE˜7Ê€‚Šõ�l¬SYœ™IæãiD•ç�·×í»áሠÇð4<´˜Å¿òÕBƒÖDZŠ%f‹þ0…¨ã%¬ûgæ?¬ ó™LÒ"*Y·Å† ¸vç�Wkd^æ V,ž�RœM�½ëüaÿ)¤À�Ä¢ÌL231E_�µöì®Ô†2+ ±&â_`Ù°Ǩyd>µ”·*TWŸ ¬}½'Æû2ÉÌÌ$#ÁAÞ+%¸ú›0 ³cûØßõé­ÆZ®`söºŠó(<åKÓâyãp8Ó~Žürî$çŸ.Æ-XÁŠÿYDÒÉBrÞíÜ#ãÆöZ%Sɘ…Ò[:EW•Ã}+X|[  Å˜EuY%îK­ŒvÞ·b7‰è D·ço‡Ÿ/bEæ –N×RòÆvª½½”�ÎqHk5/Àä fÅiqïÎ#ç#©KV�ùÿ-"ét!ÙÛüù Ry’¿€E‹çav²ýcTù6¢~½”Ì'“f§²§ ÛÙ=jj%Ör¦Qþm©-$ï-3g²ô± â«ihóÖë³ÙÙw ‹žÉ$óÑYèJ²)81cLð±�jÿƒÝå6ì1&Lý»¯ëùëØNö?0ÏÏ$ó©LÝì¦ð…8P±mÈÁ‘FæŠdþ& ÛËyX;ïÇN²Þh`ÜÜ4LºÞÓ黫šj5™Å+20k�¡FŒØ°¾xÇóîå¿§á×!!!gÕ©^�÷XJ ¸*ì„Í\À‚‡“6¼šÂUwäù]KÉ|rST+–F_›�ÆÞ�Å]èã0'Dµ¸ ••¸‡ÆôÐÓëÆZj'æº8´afLý­X>¹€}©Æ=*�/fV„�¼õÌé Xôð, û¶cqraÛÛýÒÖ;ÊÕ¦ö`¹c:ÂÎŒÇTÀY‰+a+$ÖkY<7Åk§Ò“ļ‹XúP2¼“ÇN‡´o„0ŸMÓŸ�ÓGøx_ Ÿ¹û O˜Æ/¯7@Ã4Gs]‚ž>@Ÿ%`PÃÇgNÒ}"¹¦‡ O+­ѯ=€i䃜,{fËžYÆŠ A°a$×\Þ8MÍAƒ~œ€AÄðøhÔOjø¬íÜÉïÉÈßÊ‚bF0´ÕÁáãÒ�µeØêš9ÍøY“é)¹â«1�ÜtÓMÜxã�$$$`0øÉO~Òqq$(ˆñãÇ0kÖ,F�MJJÊÙáÇÇ%TFš1ö´FÌWVSR~ÝùqF IDATá!“ÛíFrŽëáÞj*«´¯�ó]5ŠÁ|�–ê�íþV`æ«}ókÐ57àêþö } þgÉá¾lÌpîã ¸Q©þ¨š°3èo"íñÅÌŠëÖ( Ñ¢8­XöÙqµé0ÝžÁŒ8å¬@ÌnwåoäyíTÚuM¾¿•3&W®ûcö+Çùz²ÃX3QµV*ÝZŒ 1ØËl¾ ó°[€óгƒ¾êv ט|½-A1˜¯ ó¯·÷ür}lÃeÆê÷ÛLÝbèhèe‘w,‰Œ»ŒèΙNÿ CM]z†´QQèÕ8¼—VÛ+ó™ûû¹Ì�;—ÇÖ;ˆû¹C €�¯ c¬¯GS;,Cs®ó• ¯ Ë+9TƧ“~C RùQ%a×'§õå¯yl ®�;ƨkL¾u†v¹ŠË¥Â‘jªÛâ0ÅúÊpØufbz:ËœtáF‹®_ïªË«1\gö�|Ðb¼.õ@eûþèqýÝÄݱ”¥w}eg` 1\4¸|¦*OÅaŽ× †‰ ÈÌH¢Kßq ­ÖMå ÕN7ÊÐdÒ=޳îNh°c05иª¦áJ&�/ݦëâ|÷÷zíØ*À”dò­GǸQ •ûìp… 6l‡ýzÊìÄŒ6�ݳvŽüuUTâ¸r\{Ö�6嬤²ÁŽ­JÁdö W†ÍbñSé˜Î,¼ÙFÞ‹;1Ü‘Ar„rîtèˆ3Åu¤-0Š(ƒ »ýâÝ0sæLF�ͬY³¸ùæ›Ñjµ]êRdd$?ùÉO¸ñƹ馛0�½àç9V´»Ò„Iï;®Âu¸]._žs&Ï¢Æ�ë(Ó½‹Ïq1À–GÖ¿t̸Ý|öþ=aÅR‡ùjÐa†m·ÿ"Ñùê–.ã0ßãeÂêÐÆÄô #,Ä�«§Dõ´½ç;§Ùrxøó™ÿ‡ùÌ_¸ŒÂ3m0%“ôE¯e±ñ<;>0¬ýƒÎˆ1ÒAu­* !Ä·îÛ’ÝCÐyúLø®52=õ$Eïo'og#®aü”dŒ­Í´¶V°aÕŠŽDŸ>ÍPw+ô4ýÚ{‹» !ˆfN¸�z®›u×´�úŸ <¨£Ï¸�¦ŸÙ­œl=M�¶Sk®_Jk+çíl êߑހ ú´ÒêÃM©L¿ˆ þÆ&w†_?™é‰2$ûb9xð 'Nœhÿ=66–©S§’��À‰'¸âŠ+Ðjµ¨ªJuu5mmmTVVrùå—wzpˆ[© Ç>+ ¦¬ªpÒ†{Œù‚†…iµZÜÇ]ø€öRã:¥íò�m°÷gþÖŒ¢œø··ë›ëØþqj àn€0# âv«hµKP‚ÎNµru* ~QHá¶, _T1Œ™BêI݆d«¸šUt´íév»µú¶/�ÿw—Û�ZµŽÇ*è˜;À@œt£L6[©l5fµÁ¨t¢ÝX^xŒ¼�U#iþ C×ìÀuI•Q_ÞïZɼë}[«:­ä­^FNÀRÒÇ(8ö¬cÝ¿ª}éöºqx£Î[6ÜeëÈkSˆ¹CçÏCßôö·–±pGG]P„ù†žJ_åìK¯-nÔ¾�÷‰mO¹~:´¸}Ãȃz©''Õ.AZ-ÚSîö`¤Çõw_Ê';Y·É‚ý¨âjT1y· ·Ò)�� Ú³zûÂHþm:¼¹�¼gòhèGÒÌ4fŒê6$»Ù…;D×^ÎÜn¥s¹l/W.Ü'\ØV/ÄБ§Ê5.4bŠWÉÛç`F¸«= sšj xråNÚ|õvéM½ç¯ÛíFéש +ZtA*®“.Ün-a};• ­þ~ÐÊ7s€0¦„ž™óéD´h»\èPÐéÜÇ]pÏž½ÇçB¸þŸ…ÊcÕTÎ/é8Fé¨L‰Ãx¾º t)ÏŠÒ©®‚Úv�ÛÛÓ9­s´}õ,/™�Úæ ðÏy¾ãA ¿œœ§,ž÷šŠ]GF£í ê)7 C!~Psmú»›h: ƒÚ×~‚Æc§ æy“y´5S³ó5^û#¢o !(ä¦=0�èî�£#ç:þ%:ì-*l�üô½? !„§ƒºm~ûrƒèÔ‡V÷ÉöÖÜé“­¨A!m»3'Ÿ¶ÓœîS[Õ®Ê:2·”¾r³âÛ÷ÍÉš€1ècŠvTÐèN7SS¼™Ž�ÄÄiûvÖ¼þŸ�BJNÃåÃTƒõ?þ›P´¡ˆç=a ⺛®¡¹8� ¦Ù¿NGÅ.^ï0úðЮô!úª¡|öŸ2§š9ðQ Jôpõ ¡P3 Ç|QrsÅÇîtåötk 𥱹êc!C: ëº5¼Uåû¾O¨½t-_Ô`¤­Í·nºé&öìÙÃo¼Á®]»ÈËË#;;›·Þz‹wß}——^z‰n¸¡ýþÑÏ?ÿ¼c9Z°_Ùíþc%ÓU,{.ìY Ê5S˜n#/«k½Õ«ÒP¹“¬ÕØ•0t�1cÝØvûï�uWS²ÏMœ1æÜ TPZ} ·Û !a„n;;÷Ø¡UEE!&>ÇÞª[�6òV¬b»]í2¿cÛ³<»©Ú·~m†�J£>´¾€å¸¿õEÌP6«ïÞbµÖ‚µÞ?eœ‘¨Z %N_ÃÇ}h;9ùVP£Ã˜` zW!¶6&\ÑêÐétètZ”@…¨aeV¼¾t—ìó7 Ï‘_º«�D¶PâP}CŠ_^Fö.(×/ ÃÀ8fÝmÄþF×ùÒÙƒã.\!º‹Ò·q±ÊhOÔ+›‹°ƒ¿ç4 ƒ^ÜTî²âPUÔSç(€20 ÕSH½Y¥ðµ�4xâFÅÑ`)ÁÞê’w味ë<7‰"ª­k•Û7O©…êoc1�4ÝŒû­,²ÿU�«Ôv¬ëW‘]êF;àLz-ø’èÂZZ‰rµñ¼OøUU#Ü�û”–°Á¾=ØPV‚í¸U†Äׯ’’=._:‹²X–gÅÝy~·•¼g²±4ø.ì„Â|½È݇è‡èÐ6»Úo�‹‰AwÈŠÕå *,{*q·ùê�)VÅZâ/ËÞ,od³ý�?`fÆØl£à};1 þaä� Z�¿®h•sæ¯.ÖHTmIû½ª ¥ì†8â¢0ƺ±îòݡֲê™uTú/~é nNeFÈNrÞ´£ž/�g—@\.í€‹Ó ØÔä{Ðfÿþý=z4ÿû¿ÿË»ï¾ËÛo¿Mvv6¯½ö»víbݺu”——sã�7úb°¶¶öy»;ç±â|†Ä`h­ÄvHTìï•`÷çyïÇâî€rÖ»Hº/­—`¨/Ár܈iX×ã°1Á@åî ®[—rÍ’[Éy¡›Ãw>p7TS²6��nQ=ìö^Ë¢t:ê±ßq·Õ޵¢Ó¹ÕÛ€m¯ÿÜä´buD£H#Gñ­ûæ‡d÷10>5ÞÞΚ¯ÓLƒ"®aü¯’©"¯å:íFòžû5”�hn¼ÕDH@n¼íz6m^ÊwTèÏPó4n¼€À3(v÷¦ìbÛ{ùÛÛ�´„><š‘7¥‘2ªçkÌ! “™îÜÌ[é[FĵÜ6a(}àÚ"ÉÛò/ !,&šè�íGŸÐHô‡6ðÂŽÏ8qZÏ5S¦34 ˆAæáT¼ùwVlú1èÇ“I‘Þå‹bÈ�!�FN�:EDDÛ¶mëuÚS§Nñá‡2vìXìv{§ûÞ°ì¶3!®Û B…8SÙoYp ¿€ÄHþý´› (X¹�ìfІÇ`š¸€´}eÍx{:Õ/åñäþ>(à é¤'(p®‡æ\iÄx<�'m }A2æÝy<öèvtaq$ß:㋬ÚÃÒ驤ٳÉ~x>n´ÄLH#=N�Æ®óGåäðØB7(h£Æ‘ö‹îõ@!*Ê€ÃnGň‚óÌØþ¾Š…ï+„Å$aŒS°·©žLÚ̲W>Ìö6PûF‘t{z{ ©K0öF®Ÿõþ:ÃÍ©$ÈæÉ?mG70Žq£bü݈JïùEi¿p�ý—…žRÐ]=…ô‰QpÄÒ±Ãg‘–ð$Y¯Yˆ›Û{:{ šÝv;®pÿ}²—DíPl9s™“J€}È»!�ôña@ÉÃW‘óØÃhõL·Î`JM6ë²¶3ïþžË†»S¹‹š˜FÒ¾gÉ)ŠcÁÏSI«Ë!û‰…¨^`°™Y÷à\/' 21ãvY/=̾:¢F›1êl=ÕŽJcÁœB ¶eóØ.TEGTü8ÒLñ=C`l*iõ9d?Vâ{Jö°$2¦Åœ{ý„¯cUöø¦ÏgÆÄ0²V/Ä6 ƒy³nª&{m1È`Æo’ÉÎ}’ùo¨(a&fÝ“„µëü×Aγ Yç”0Œ)�FŸ´¯2 C› {#Ä…Ã’I½.‹œ% )Ð0^gÂP * q3Ó÷rO>äë�‹ŸBÚÐ3NŠÁtuÏîŽ!ý·Ú/Ÿ¿_}ÈYù0ÛBâ˜qO2 )é˜_Êá±?¸Qƒ¢w§ïfK§|wç ¬Ër(µˆçJgw^v‡Ž¨É§'pôèÑh4¢¢¢Ø»woï¯ÿÊÊʸçž{1b}ûöeÈ�!=OÞ˱âSË4 LÌø…•¬ÆFÌ FŒZ›/×®;DZø¶Ž‹ îr •ÎJl�Í!¯½-GêS Hò(í»­¸F¦žõ¤qm¼Ãú¬§\pݺ¨ $ÿnÚ°îÙ…¬j%$Œ˜kÆ‘ñp2qz ûL{-‹@B2Iïç°l©…°Ë£0ÆÆ@³Ú¾®¸ ²–fã8Q“ÒI —6ŽâÛw™ÿÓùoðõ<_æÿè¬û /ÐÏÿÑ~ñÅ%’�~Ÿnçù�pÛÜd ’_‡ÆÆs?5¤®®Žüãçœ&&&†ÔÔTÉÌóqòäªf-M#îw‘ß�eõcXF->çk¥ôz½”Ñ<뚇Ù½ˆãÃ~x›_[Àc/ª¤-íýµR_¥žäååQ]]}Îi~ó›ßù în+Y w·´#Ø�×FΟ 1,ZDòV£žÊ•Bôð^vÙ8À œôN|�Ñ:�oüXðE·O{`,Ä÷Æ™Äh4š?AAA½>FtcHbʰJ ßwýð¶½~'Û&’G뤌ŠóP0%'áÞµÝ7ÜýÅ�õ ºŸ']´w0w6bÄ‚‚‚z­+C† aРA_ó6:(\º�¬ÝþW]íµP= †yË…Bü`ô‘,ß'}ûöeΜ9’…Óí³°®Ì¡$~^�Ouý^ò:(\k%fö‚³ß§-eTôdh2icž%ïÍjÌŒá‡2 Ã]–G¡;™ŒÄ¯çà0fÌÆŒó-o¥�¤Û“È~íInBbHþMòyï¥Bñý!C²ÅwÊ… ãâ›òU‡š !õDꉸøåJ!z xeH¶ø! ”ËúâÒЧO)£BH=—P¹Bˆ¯ƒÌâ;¥_¿~’ â’$eT©'â*WB!³øÁS�F#!¾U�EQ¤Œ !õD\BåJ!¾2¦E|çÓ·o_N�:…ªª|ñÅ’)âkwÙe—¡( }ûö=ïp@)£Bê‰Ôñí”+!„�€Y|÷/ÉISHBê‰Bñu’!ÙB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„ÌB!„B!„�€Y!„B!„�€Y!„B!„�€Y!„B!„�€Y!„B!„�€Y!„B!„ø†ôùÖÖ|ÌÆÖ�[ر¯ŠúÏ[ðLø�b1Ý<•”[Œè}“•>—ÊŠ¡·�™÷da=“Ç�ÁDÿØ„iL±z©B!„BßF³·† ÍÅv4C¹ûéLŠ Z¨y/—Õ/î ¦,—5ï&ðøÄÁ—~z«Øún 4çü¥#Í'kÈ_ü(jë(~§œÙ#Lhh¡´¤á_z5G÷”²ß #:}{ëƒ!„B!Ä·0—oe‡ gâ¼ &Åhüÿ&ú¦ ª�[Ž)ZÓe6 jÞÍâÅuÅÔžP9‰ôßÏÆt¦GÔÛˆuS.달Ô~¦¢„F`šœNúôXÚû_[jØ‘—ËKΠ ºÓ¤4Òoí4M7�%Ëyð¯šBÍÌúAv˜›hv(hûwêžíMÊ£a}9«S==ÉöÔ—’ÿÊŠ+êiRB‡ÆsË/ÓI9“éž:Š_ÏesIõM-JÄÈD¦Ý5›Ä�Ô.!„B!ÄwÚ7>$»îÀ!š™svP5øg<8'… #ºŽ öÔä³<φŠâmÁ¹o+_*¥Å&b{ùQžÎ+¦–X&þb"ñÁõ¿òOmªó¶ulÎ|”¬m6œÁñ˜oL ܽŸâ—Ÿ`ÉÚ<=¤ÕS³�å·Ð¤D“²`þÙÁ2€&ša?ò¥Áò£,m+¥u´xA£ì –”HÌ·˜ô_7‰©ã¢ ¡‘Ï-!û]�ÍL½5‘µËÚL–¿yÐ3âæIýë�›À¤[ÌD*=¤Å¹•Oå²c¿‡aæILM63¬­–âW2Y¾© c™x}4M$æ[¦2adhÏ;êX1+_Á–½õh¢ÍLµòÿçQ²÷µl9O³r“gÿxo™Êøx=ν[X¹t Ö©\B!„Bˆï¶o¼‡¹±±Ñ÷KØ`ðxaš‡�¾ìi& nãƒ<�WCËʨòŽÅÔTÌÆN¯õ#¤�~>˜'îÏÆ¶e Ö[2ˆÿh*=l"ãÉGHž}Ù<ð?[©w3åÓçcê´>µ©”5ËóÙ¯†’xÿ#ÌÑ[�i$Sÿk6åËò±¯ÁòÏl,ÿ4¡DŽÍø)·1É4M¿X&Ý5Ûv+NôÄOM'-h±â ŠÇlÖcJMgBÔ(5<¸¾Žý{Ëh¼uÆ[S¨/ÛŠí„�½�ô[}þ�vð÷Û¨jF¥°ðþ ¾^óIÅl(vž¨DÒ&VQ¼»OP,~�†)ð:ÏÚªª-ùXš@w�/™Æ` fíƒ<úÏzŠß,%%~åN œÄ{$}¤ï¢�ù­ÍìWà öÁRÁ„B!„0í‚Æ3ÞàQGÅþz ÎÖfZ¼ÀÁ*ª<@P$‘ýi<x#¸rØŽTQu‚+ª|½ÑÑ&âýO¿ÖŒJgu^zk;ÊŽUYÔ8!x\:éãÎý$,͈ÿ«ëîb,{mØö×â<ÞDݾäî+¥lÎ3½ß�lbö‚N¡º×C¨^ÔAs -À…>‡Kcˆ$<ÐBݾ5<øßVLñ±ÄŽ41iV"Á�_&·�RµßD‡ÿÄÄ™”Gß±œ¼;ÎLÓBdx0Ø�l]þ΄bGÆb2§�2P†c !„B!$`þÒôõ@8ëpzi}TGÀôÜ)ýõ´‡aJˆÿw¼àiõ�ÿmµ’uÿœns:q6@Ëqß4š àów|z�ÔÔúò"J��eÂÀóEô‘˜~6ÓÏf«-lX“ÍÖý-Ø6m¡êgéôü⧪6e“ý–…šcžÿ[æÆ¤0Ž“ÕyÅÔTZØZia+¹hIy`!)#/°Ë×ë¦ñ¸ïWmPoó“øÛùÔ©ÙlÙW‡õ½:¬ïm!Ÿ`"“Òyø¾DJB!„BHÀ|Á"GÆN N§•â ±ñ]{#ë6=£E};ãnîýYô-SŒx‚Œ¤Ü?•Øn�š><¾'q{Z}½¶¾µzhilÁƒ†àÁy`8‰÷Ï'~÷ÓdY¬äçY{¿©Ç@Ûã¬ÂZ^E½ͤ‰Fÿ4ô1‰¤ÿ²ŠÒ'·ÒÔÔˆÓËYéh±dóô+Å´E3iîl#ƒiùÙ<ýÏš¯�»¢6ŸåIé­®bÿ~Öâ"Š«mäÿ}3¦?Ïæ‚r4PKˆcÝÍM´÷q{[h9îÁŒ~€ô&f/^MJcUåìÿ�…;mÔíÌ"w”‰Çɘl!„B!Äw×7ÿæ‘“˜4B8Ùºz%[+Ï„ŽÔ½—ÅŠõûi9RÅá… ØË0  6ƒÁ„iŒ Ó˜h‚[[ðŒ6¢GúŸ„}ЊտJOE.Þ7‡9÷¯ÄÒå!Uƒ‰¿&– ©Ó¡�¦’\Öïï¹÷W=¸™¬Õ¹ä¿”EîG;=<¬…ª²*ßÎBûޯímF=éûÕy°Æ7T<*‘©ãMÄŽˆ„Ïý l;{�j«Úk64–oeÃ+9lݯ0x„‰Ä[Ó˜¿h6Æ@ ÉI#tôÞ{šñôú®ëÁÄ�ð½úÊù‘�º33þ¹„´9s˜³l+GOÖPúf>9kKiÔGbüé$RæšZËÈýŸ•”_?�ô¤³³4vj ¦÷³°î_ËÓKj0†åÃ=5΄Û&0Xã¤è_[ØR –e˜¯ÔBK=e%M ‰ÄtÍ`©]B!„Bˆï´@à²N_Öéç™O@§O ?ÈVÎ|–,YrÏ—^kÿaÜ�x-9ÎqW Mî´LèP#7ßö_Ìÿõ í÷¿Ö•nàž*Ç} IDAT»— á˜f ó}éª`ë;å00vz"W(ÿä§\…“ºÃÕTü§‚ú“ÁÄþt6¿ÿÝ4†õô\=6ž͟ᨭ¢üàT] 7ΜÏïgÅp¢‚w¶•ÓÄ`®�v3Ãú28zŸ¼gÁþéAœá7“ݯë¶ àªëÊU}OÑt¢…ãÇœûü8jŸ�D]=–[~3�ߌìëØ #"ØÁGÛi<~œF%š wN媩9lç`­52™¹÷Ïæªæ2öªãˆk c’Gc4(ÔØ*p4� É=ãÍc ü¨kÞh¢®å'a-«;H…í#Ê«ì ǘ”Æ“H˜ 00 ©œ�ãØçÇñFŽ%ùÇ`}»ˆƒ-�DÞ� ‘@ð0Ì ߇�hÜös^<̤%Ù¤Çwû§}<˜¿XÎswDËBˆK\ÑÁ"*ŽVà8áÀÐßÀÈÁ#Õø š·ôÙTV|˜ÀÂWdlà×pN¹¤µPõîVG¦06BÊ‘øžp“õ\ŵn”!ñL»o>)#ƒ¿Ôt�{sXõÒ6lM>b"é÷§a(Y+¾ãŽYÉY�MQ…U�yÖ\2&F£ZÊ7°ò¥Í”׫(¯dìms¹÷g‘hðP³-‹Õë,Ôœ€Ð¡ Lû¯¹Lqv�ê½Þ´Pµ~%+·”ãôj1.�ùsøýÍêïEspÂ,üã\&DIÝBˆï²¿½ÿ7Šá8áðµ�O8(:XÄóï?/™sÞH¿” /m øÉ ñ}q”ÍÏg±ã³pÆÿr*ñÞròŸËÅæùÓ/&û¯[¨Òš™}›™àƒ[XùR1-’¹â»}Àgëêl©€Ø[RH wRüÒrò÷'­d?—�µegM%>¨–/®dk=°?Ÿå/ã Odö/Ñf!wÕzª¼ÝŽzã±æ²|m9\3•Ù7…Sÿn+·ý^çö÷¢‡¹¥l-+Ú{<Ô¼¹‚åëÊiR®$qÒЮ{ê(~e ù»ªpª áÃÆ’rï½LˆÖHÝBˆoQÑÁ"Žœ8ÒãÿÎÎgõ4+%ûÙlŠjUB¯™†¹ËIßCͶ5¼¸©”Úc*Ê Xï¸�ôqƒ}Í�½ùd½²•ò#*Ê�x&Ý“ÁìQÝÞâÐb#û‘LŠ”‰<þd±mUl~1›Í{ëqk‰¿5ƒù·Åìµ’5çiŠGÎæŽÖ·YËLž_<‰ÎKk|óæ¼¢2õµ·P¥†cN›ÏxG.+߬B O$ãÑ Æœ¥ä¼�ëë9P‰¿%ƒùw Ž~�ÃßóЍú¬B£1OŸKÆKîÏe¿øóLæV/gõ]¡ØÖg±æ­rêZµD_7“¹¿�Dt?ÅË~ÍÊšDf�;Ìæmz2r¾z�¼_›ce”ð~ëÒo‹¦%´†²ÕbÙÆø ›.¶©”²–`Ì÷g�2¢Vž¶”b;™ÈØ~]ÛÚ,Ö¼[NÝ ŽˆgZÚ|RFË~—ž“åX+¨"m¢‡Ð„ Ì6ßAÊ=-¡û±üý5h ÁxãTâoK#ÑGŠY±§žºVˆíTÔ=õ^o‚÷|H“&žŒûf3!ÈDó¾GÙ²§ŒÆÉ_ýœ×ãym²¯·üRðý»‡Ù¾…Õ¯XiŠ˜HÆÜi„V|H�·£ñT•÷4+ß>Läôy<þÇ¢?ßAÖ²5ØNJÝ—¶ÖÖV X¶lK–,¡  €ÖÖVÉñ½ññÑ�ÏùÿŠ£ݾi¡ôå,¶VkHøÕ|Òœ”ý§£ë©Å’ÅS/î iÄl>2�Iƒ±õ¯™ä׎­¬znUÁãÉøSãƒËÙðçlŠ�wZ¼÷(Å«W²õD<÷.H#¶ŸëËËÉÝ­2vîS<>3‚C¯/'×ê<ûÞ¦lÐ4î¾%ž³šÙJ_ðÖS¼ƧM%Ö[GñKO±±u<é·Åƒ}kߪZ(~i[ªB™ô§§ÈÖf±~?p²”µ/láð)<üäŞ`ݘK‘gsï2¡Aƒ1õ)™Aã{Y¬X[ŽvÂB–ÿéBʲY¹¾Р(À‰RvØcIùõ$¢%X—"gG½08<€à�z´4Q¤å‚§sqâ Ô®4èéAuRÿy÷ÌVþ³ ý¤…<õäB¦ <Äæ¼ÍÔxe7ˆK�êAõ‚¤øÎ5¡¡è¡éˆ�a,i¿Ë eŒh¤tï!ÐDÁ¦2~ç –9n¥¬Â—G0,¨[•êµÞ´àü¬ ú‡†38ÌW�Þ¯xÎëí¼æ¸t²»Ï÷­ü4–H�7ó­³I4i _9;ömõ7~ª(*q•³¹û¶±Dz{1–¼)ÙÆQRÿÄ¥«  €ÊÊÊö¿ÿýï0cÆ _Ùol¤¾¾žÓ§OsÅW´¿ïüb}/Ä×­·Þå3Î ÓîhQVÑC§1{²‰HbqîÙAv€ë. M�FÒÓ&aÒƒ©_Åû¶`ù †Iú]ØZƒIœî;W˜#Ã1Ú=„·Ž*‡Þ\AÑG0áÁùL0Þr,6AÌ4¦þ4šÁÞIŒÝd¡xw9£üoMäî9ÓˆlÁöf6–£ÁÄNšÍ™±Ø )$þTųc¶Š¡Œ»-‘± ¯·Ræ<ЇhÌ÷¿H ÁÁPcÉzÏB½ÃCÁã·£†ýŽHL·.!ç.ÿ5ø#Á(€vH,‘[(Þ]N‹&ž[f˜ˆŽgâ5X±·”šTÿó<¼Lº'�i){âuRõ �Vüe\£ Ny<Ðù’Ô9¦SO©€‚Æ_·•>  âé>¬Û xUŽÖTQwåXÆý1›”~² Ä%*8’+�­¼˜öh"ËJ¨ò€Gõ ‚¯gÖÛHé‹O°f¯Jô/Ò˜ÔùXÜFβ•ì8΄?Î<ë¢iïõ¦™–“@ âïýÕ O/I=ÿ9ïç5 ˜¿-n7Œ^ïÏèzô� xšhtW„¶ЇêÑPOó Ï™â%Ä%©s°ÜÓwŸ|ò   ¾¾¾=нXß ñuÒÈ9ƒæ!ý‡t?âÓÜå˜LhMûÿ] %|€ÿ«þz‚¡ñD3MøÎÁü§üðXLá¾Éýóïÿ¨¼Õ6˜`ð´ÐØ T¯å©k|�îÏ�4âÊVØ`Bš©ù`+[÷ûÒ¥&œ ˜µèϬ3HJ(ú`ß4hSõ%Ù¬Þh¥¾©ÅßñoW¿±Ìž3‰Æ¼"òÿZL>ÂÇÜÁüùÓˆí’7›=à±’5'•,¯ëh¿Ó,POx¸”;q ë§ ¨þÙß(ï«Ñ\ðtJ_CßÛ-èÞä‹Oaîôz²·m ˲4¡§Ìgá�FdP¶¸äÆ2íŽD,«‹Éú£Í�hƒ@ ò]8Å{”Ï=AÖîFüâa½3¶#Êi,%kÉ*v gÒüÇIsv ï½Þ„Ü8v&@ö ž4Ú^¢¨ 8çõKìý¼v‰\´úÞÌÁZ-ÐHc£?nl¤Ñ !šPôZÀÕD£ï�JcS#´èûK°,„ߦ«_}΀ùêÁWw?âÒå˜ÞHS“§ýz�4á<è�&'-^ Õ£ ÑÎös…§ÞJѾF"̈ôÏo¾ÿ)Lï=JÖ–\v$=„Ð`ôAÀ�©<~ÿxBÏ$C‚žCþFÌ™/3íéõLë”ÚÆm˜Ç‹ÉÍ)¦~d:Y= ½e9¿þsYû¿#oJçé›Òi©¯ÂZ´–ìMkÙ°{� è¼ ú hâ¹{Ù½$(�¾«7ñ]ÉÐ@8êlô´|æÄM8Á<]¸6�·œ¦DÁÑÏ!ÈDÄåÝW¦Çt×ã¬Nmáhµ�’�ÙäoÎeÇøå2 C\’ôãæ³@VÉ!Ü�zÂûk 0äìžh!. GÙº$•´G_dGY ¹Ïåccã¯�„êÍüÿìÝX”¾ÿÿ'0Œ# gFtª±�%ÅV*P ú†»äRáiSó$]bkêžµk?íù~>õý\µ×~·ý|Ž�Ï•»Ç¬V»;F¶áYq³²…¾aiâ†'1Y¥œjhGuØpn†ï€!þôõ¸®¹€™aæþõ¾ï÷ë¾ï¹gݶ=�ñ-»Ø²©Œ²Melÿ<È‘m¿£ìó ñÎ °ïmÊ6•Q¶©‚Z_çW*-cí¾þë&5s‰íûØòB)e/—°½ÑLêô Îù|įúÙ®Eˆ+î3Ζþè «þøk~w=wÏÎæúº-4µ˜I}ð V´­£tóoøE[,‰g±â‘ù¤j…(î‡?ü!üãùâ‹/|÷»ßeÖ¬Yßî,²Ùž>}¡î¹~rûO¨ü¬’ýGösøÄaÆ�ÇMcoêã{˜ãÉþ§Åì;²–í¯®áë[ Éͬa}ugàŒÏZÌ“‹àw›×óÌNˆ7™ÂŸ-¥ðZ€V¬ðñÂ+•¬ùßï;~*ó¶Œl[÷)ÙßnSæÝQÁ³U¥”ݽ’ù‹~ÎÂÀÊ_üoG[qfÝÏüéc�Æ ²¹ïÞ*Üo•òëçÒ¹oñ æñ,¯½µŽ·³~EѼ¬ÝòžÜÄ<2‰É÷.eq–Yä^ÿ[ªÖ±ÎšÄs –ò¸g ë+~Óå�˜’Ëü{§éôRBÆ2kÉR~[BåÆÄŽÏbáò…�=[(H[ ZÏò+ldÍæ-”­LüÁOùé]çÑ7^;³ïíZ„ˆêºõü:�o9 Æ™ÀïbÛ«›xÓº„Â4­¥äjlþ]ìuÅb£ŽÚÆr;C´{O5žÛÓH¶x¨ýK=i©)$\ÐóEz¼‡³ êÞ|�Ý–|ŠK!!ÚÀ»»ŒW_¯bÌ�/ò•Cnv¼ãÆ9o93FA7•ÿQEÍÍÎοE®ÖFs|.�e^ð�º}…Üûm8Sí$ß½„äóY›¸j¨1’Ig'gÑ\ÍH¹zô¨#“¦Fäf÷Ç{à¶…dŽë¬'yÿTLÀb��—šÍåìö™0฽€üI•/•ã¿ÁN[£—£Ñ)L½¦ wƒ—£¤3g~&þ7_¤*äÄôà9f#}jG¿òà9faƼBÒ-nªÊ¶R×lÄsæ\òR,¸Þ|‘8ðá;æ'ùûEä:Ô¿µ‘mnÖÑv,' ´ïE.&ãó½¸ìÓ™�¸›mµrg:0\UTð8¶Ó/{ÝM¸7×P0ÛÉá7Ë©ö`˜°ß^@Á@jdËjªBNŒø�Hžµ€œöoßÃ>g*¾w¶R{L!ŽìBòÓ4s$ò´ì§æK'¹?éÞ�dÂ~[!Åi�€�: Ü»6R÷åQšŒdòþ©€´8µgÔ��Àç•”UÔãABj…wõØiÛTÃÆ×]Ü4¯�ôSG« †ñm(0'“»hAW˜³ýJ t±~¸óˆµçÝÕTŽ*fAê^J^saæ‡ïÎ%/®º×p8á«*ʶÕˆ6 >�¼Ì!Y®”!ÅGõ+¯ÓtW1yI'¨~åuŽÞQL¾ÝŶÿ¬ÂÝFÈÊÔ‚Ùd&‚çÃ2Êk› Éw’?~/%o@Á¢Øð±ãåM?œCBÅnÜ_Z(ûÐJfÓ&j&,¡0Õ×Gÿ¸Š�¶£>ŽþÝFμNmÚZêØö¡ 7©5*ÞǺp¶Š³ô” á×'"‘)@ý»©t˜B–IùÌÍN`o�:š{³ÿÌšŒ«¡äU7Žñpâ›&Žš¦òÀ�2°}SÇÖÿ¬ÂÝ ¦H'ÿû*_;LΣù$GCà“ ¬û[Ë�<ä¦Tt$Í4ïqp\ÓkÅ—€%µ•ìŒÎ¡xQÅ¦ã«ØN½¦�®Ï§p~)Ǫq�ɧpþÒOÖRwLðÇ¥SPXDžã »�¦�_¸€üë³·>~?¦É/.fI�ƒú�öâ§óÿšLiäÎeÁ�Vj÷ºàh •_:y`q îqb|£R“‹¼"ÛçÂqÓRÒÓà@-ž˜œ™LuØ™Z�ÏŒ;2I™BÞì F|º�js.E‹Š)^˜IÛû«8I“%�Ù…sYð};uÛ÷èñi¾=쉞AñâbŠæ2Î8�¡™#‘èøQšF�ÃqÚ®` ]w„|×̦hñr ’]Ô| ®n‚v¼ëÆùÀ–üx)Çk©ïþ樠›Ê͵Øóg÷Ë@´“é·'°{í³¼XZNå®z¼�®JîcûÕ§£ÆÝWLÁ¤gÇ7vls“6¯˜âEK(H¬cÛnŸæ½ 162ïNÃó^5îO+©™K®\ïUr"sÅ‹Š)ž9œÝïÕhªfë§v ~¼„%ÿ”�±?Þ>^3ãÖlÎ oÿö´Ó¾ûG/m×äSø£"ò“ÝÔ|èÑ{¦1}’�䬹äÞÓcmÒOèc;,‘ �„LX\Lñâ\F쩦ÞèYGöð5 Ð`Ì�…ΟCÚß÷P×dPÿ~%'¾[Ä’“7ÎMí±‰L±»©ý²«§=è'%=yHNªˆ;ÒÞ×zÅû·£X¯Mîà„d–=xý@´•qcMÀpâm˜ì�¿[†4;Gq̸ÎãÀ–¸Œ±vž^�gÁ—€éP%ö™°„Žr²uê©ï¨s�£óý†Ç4x½œ°OÁ X’I¶£à 1/׳×í`Ê=ˆK'-úujçḦ�i8Œ·~%î®%àlH�Ä2.©kY·�!Áw_hâ·/ìHÁyl+%enÒ¾“ΔI�¢#‘+ÔÏcÑvœÉ�GŠ0Þãaê¦ÉƒÇ°“3²ó2 •!?u[6˜ð ÅIgV�ý–¹¬H÷ᮯ£î¯U”|XMî¢ØûÚ~õe¤ƒä‘@0Ìpj(9ê¡þµuì0 g £X¡=ù×U¬{~÷©í†i| f§“�8ƒ¼kJ(©°rÏ¢,øp{|4x6°n{WG›€ïˆßè›°G éßìðû÷Ý?ÚIîÚ»f±X0éèúï)½�}l‡Gj9�HL�#Hî`ki &“Áဉ¤ÓÊàDØš<�F:pÄÑÙ[7h žÀsÄ‚ãöÎmlò�sI c ;ö»0Æ8ø÷f\3D'Uä Šû»¿ò‚³Ç‰ÎÇݸ¢»ôÐF�<6@}}çG ŒÃÕlûØ‹ÉáÀvÄ…Çüµ”½R…'Ú‚)à'‡ñïª�˜3ösî£Á ®¶Î};,rjðäIŒ°1"_Öáj¡W…¯ÉðFà°ûqé Üï•PþiLNÒÇ{¨ÜîÃ9É1d§Ud�Y™˜ÃÜû ÞüÓ‹<€X“çí0;Í‚)”Kö¡rJ^Þ!Hþ~!Î蓸Ïó-éé°©„uƒcJ&¡*¶}œÆŒ°Ã—IÎø ¼þ‚ ëèdlc8ZD.l^ÞOí1'9)=JtTé¶j¿Ìgj¼þÆFÈ#Ù¶�ò UÌ™ŸGî¡Mlx©&·�0� DÇjÔQ¶¡Š¦¿ÃÔ‚|,˜Hî~�{2ð´�·›0…À~ûœ!»‡P®tÒîy€“ïlãÕ߆XSÉŸ—ƒ=ÚK]¸ÿ˜¦n¢mäÜídã«© ™°¤æ1× ; óRv>)/—SÙPL^÷©Ùcf0'{+å¿_Ee´ B&¬©ùÌždÁvû•@ÂÍ lz}îÑ#°Å…9s$ÚqæpŒr@~eZÇ:]ýÒ‡$$‚›ò¯+Y÷›�=îI`êó1¶yH›“‡mT 3>.a[íDæÞ•OrÙë¼Xg‚�•©`Í$ÿæ�”¿ô"&œwÎÅ‘ãwS¾a#cFÚa”©³Á•Ì8Ï6JÞ5qgw�§Ÿ[ÿh»&ÿ›(�ûÞ€¯ðv}¢E@"£ñîÞÀªO»¾àÍ”Bþämßʺ’¬IS˜žVÏÎwê˜8óÛ:* W“¸ÂFÊ”»ò¨£„Õ»Ád›JA×éÙÎï8|�@zâÐ�zQ]·žCç‘種Ÿ1]ÁÚ˜�aÀð®[\GGǃyÃêêj233µÜJDéèèuÁ_ÓõæêÎ+‰¦©é‘ Ô=%TŽœË‚Û.Üî£ÁæÉ¨¨¨;€àd×­Òy’¦AçmC@G¯[×îã!?ü#H‹ˆˆˆˆœ“�‡6±Ç|Ü9´ÏµP`…ä+lž�÷,Ç©ÅDDDDD.”h3ZþcšÂ×c IDAT®CmT47EaYã,"""""gÒfQhŒàÐy®§Zw¿NÕQ`9ç°ÉGdà Û`BpGG‡B³ˆˆˆˆˆ³ÈÀÃoÏ‹´Ý;ðöóÊ Í"""""C(0WWWkÊËe ÌájŸù ~ψ˜EDDDD†H`Ö÷0K$„åž÷õ¿—+L÷p{Þßû9 Í""""r¥»Ô_uJ¶\uaz ¿_ΰÜýÞáqÏ‹yõ¾°—N½Q`9ï°ÜûçÙÂóÅÑá‚î@pwpVhQ`T�HXîèè8k€¾ÃîˆrTTÔi¿÷þÙ_hV˜Q`é3�ö’û;ò|)ÃsÏ@;Ø#Ì Ä""""" Ì"ƒ ÉáBsÏÛ@CóŠϽCòÙÂpï`.,+<‹ˆˆˆˆ(0‹ *8÷Ë^¯—ãÇ�ÓÚÚ:$ÆeذaŒ5 »Ý6t+(‹ˆˆˆˆ(0‹„ Äý=§wpöz½´´´�’’B\\Ü�×––Ün7^¯»Ý~ZPîœû› Ô"""""­I WrˆwZv÷}Ç�'99yÈ„e€¸¸8’““9~üxØý�»ˆˆˆˆˆ(0‹„ �=fGG­­­C*,÷ Í­­­g|[!YDDDDD�YäœBó•,Ãíf‘ œ5>"""""¢À,We8>—Ç4~"""""¢À,WUP¾/†u©¿3ZDDDDD�Yä ”çš–°lîýÜ_ô Çºï ²}åƒÜÿ“\íCxÜDDDDDD�Y®îÐ|A4×Pöǯ†qQ`Q€3I×&ÒøÞkT6†{<ˆë�5<±¬ˆç>HÑO~ÁÚŽ@{-kßOÑêšÎg}°’￟ÿí£Îà]³†¢¹‹Y»OYDDDDD�YdˆŸ[HFL-oü¡æŒ£ÌÍ»Öð«ßUÐ4q>�?ñSf�=ÄÛ¿ý5¥_M õF3Í. À�º02>߇«¾8Dsl*©7húŠˆˆˆˆ(0‹ UÖiÌÿAM–²åëž©©ÚESL:E³È¸yóçæ’ØÞÀ®�LL»ÂÕÜÀ¾º®¿+—ë›°ïp3®Ï¿†ëS™<\“WDDDDD�YdÈŠÅ™?�,‹‹ò?ì¢ùÔýÍøþ‹•Ä‘]w�°þ~Ʀ¥’Øæâо}<œHzÖ4RG}Í�ºrIJMǦ‰+""""¢À,2¤�œÆü{�´í,¥âH÷�ñØþÁ �&¿éº«©‘ævH°Ú 9•TKÞÛÅ¡¸TR¯w’zc,‡vUp )gÚxMWf‘¡/éîùd[q}ÑýIf39YXÛk)/y›šO¶Sºq;�f'Ù3’`x*©N8¸§–6çDRÍfRÓ&вwIeòD³&ªˆˆˆˆˆ³Èåuþ/ŸÁœû&Ò3æÆg-æÉEÙXëÖóÌ3kxÛ—JáÏž ðZ©)‰ÐãÓ&ØÒ&’pM*©#/㸈ˆˆˆˆHø~»ëÖóïî Õõ30uÝÌÀ0`x×-®££ãƒÁ¼auu5™™™šòrÁôþj¥î¿;::Ný …èèè8íçþýû‡ì²X]]ÍM7ÝDtt4QQQ§ýìÒÝaºw¨VÈ‘¡j°y2**ê 8Ùuk‚€ÑukB@G¯Û©`,rÅêû ‘7éM�Y®Ø�|¶€y%îè´fQp¾bƒä•>~""""" Ì"—8d^iG˜ŽEDDDD˜E.X°¼ÒŽ0+8‹ˆˆˆˆ(0‹\�`ŰaÃhiirãÓÒÒ°aÃN—+iG€ˆˆˆˆˆ³È%Éá¾R©û¾Q£Fáv»Ï)4†�Ïç;çáóù|†qNaÙív3jÔ¨3Æçlã."""""ƒcÒ$�+!÷þ.æ¾t÷ó¢¢¢°Ûíx½^êëëimmÔ{ÆÄÄ‹aØíöAý¯×ëÅãñÐÖÖF{{û þwذaŒ5 »Ý~N§d+D‹ˆˆˆˆ(0‹„ Ô½£ÝnÇn·ÓÑÑqê9½öÖ}{{;n·ûÔë 4,>|˜k¯½–˜˜˜~Cl¸ïWîý»NÉQ`9¯ ÜóïÞ³g˜î~¼÷óz¿@tt4×]w_~ùå€BswX¾îºëN…å¾Bò`Bsÿ'""""" Ì" ÏáÂð@Ãv8ÑÑÑ8�N\.W¿¡¹;,;�Î>Ãrṿ�¬Ï,‹ˆˆˆˆ(0‹ 8à†»?\hîþÙ;H÷ªÃ½‡Édb„ :t(lhîË&Lð‘åþBóÙÂò@^KDDDDD˜Eú ÍçÀÃ‰ŽŽæÆoä³Ï>;-4w‡åo¼qÀG–ûz¯³…g…bf‘óÍÀY�(äêÛ§“ÉtZhN…e“É4èá=Ûýúܲˆˆˆˆˆ³È Cñ@?Ûé×ç"66–””þú׿ð�ï|gÐaùlá7Üc9b.""""" Ì"g Žý]Ðk û:[hž8qâ©ß/Ô0+‹ˆˆˆˆ(0‹œW¸ÈiÔ}}eÔ… ¡‹å¢‡þ‹õ|Q`–«<4÷(óÿ{\.çÿ‹ˆˆˆˆ(0‹\�¡ù|‚ïPš Ê"""""ç/Z“@®†à¬q‘ÁŠØ#Ì­­­´µµaFÄœ+Cß•º,)$‹ˆˆˆÈPícM&±±± 6L�ùlÚÛÛiiiÁ0 -=�ûx [k=4? @Ò¨áä§;HwÕäÅ Ò^¯—]»váõz°Ûídeea·ÛŒEDDDÔKK˜>¼­­�¶¶6‚Á qqqÄÄÄ(0÷¥¹¹™ööv-9ÐÎÏ�ñÊÎ/O»ïXs�OÜç¡é×1ý†ÑWý4ºAtÿþý¼ûî»§ÝwâÄ :Ä÷¿ÿ}nºé&-Œ""""ꥥ†aÐÒÒˆ#"f˜"ê3Ì­­­ ËØ1+e7ôùxÙÇ ó·jB�§o¾ù†ªªª>¯ªªâ›o¾Ñ„Q/-g Í­­‘3M#*0ƒA-!ØþÒ@K°ï�-ÁvÞÜëÑ„:Oï¿ÿ~¿…ÝÚÚÊG}¤ %"""¢^Z†P.Œ¨À¬£ËÞñæ³/l ¾“šPçéĉg}ÎÑ£G5¡DDDDÔKËÊ…úZ©+Ü@ XE~þº/òu¾ÏõÒ9"*0GÒÕЮI¶áä9Ò¿1cÆ\�爈ˆˆˆzé«]$åˆ Ì‘ø½[Cݨx³Šü9räYŸs¡¾ZJDDDDÔK_É")FT`6›Í˜L&-!Ð�nMbxlß{h†ÇÆpχ&ÔyºóÎ;û-ìaÆ1mÚ4M(õÒÒ�ØØXÌfsÄ OÄ}†9.nh}ùwGGGDßFÅ›)¼ew!"""¢^Z½´ziæ‹\Äý=§w±{½^ZZZHII!...¢ÆÉ0 Nœ8�ÍfôÿÚívL&#FŒˆ¸Kä·´´àv»ñz½ØíöÓŠ»g±÷7µQ/­^Z½ô`D«ÔÃ~¸SIºï;~ü8ÉÉÉWà&“éœ ¼›Íf‹Èï“‹‹‹#99™ãÇ�‡]ùö7ïDDDDD½´ziõÒ Ì©à{.T´¶¶Fd�_éâââhmm=ã³/*lõÒ¢^Z�ù2º¦È_ùŠˆˆˆˆziQ/}¡é¢_çXìçų�5Ï•°ý‹bÇM¦àѦşûë}]ÆÏVŠ«çµÆÝÇÊUE$¾÷ Š^¨=íéñw=AÉòŒ+¢Ðõ¹d¹j¨xùyÊ>8HcÈJÒÔP¼¤�ô‘½ŸØÌ�7V±jË>Ûã˜xG+ÉflÌEØþˆˆ\Ž^ú,|ïü‚G~çfÖÓkYïh°� ÌÊW¯¡Â{=³æ¦ã«ÜBésë™øÛ¥¤›Ïñ%~šçÝK)œÔÕøX’HŒs+Ä$’]4Ÿ,k,æ±Î!?ú*n]ÜKD®T®�ϲæÏ>&~o>Ùíñö{¥¬Šsòüò zn>‚5ëYùÚ>ÌÓïcþÈZÊßYêk'òL>~û#"rÉ{鳋Ÿ:�ÇÖÌØki©xáY¶ÔYɺg>‰_T°å­ß°Î™Ê¹ço›kX¿±†æ˜È™?꥘/hq_ÐÀÛÞú ‰÷>Ââ9Nš­.ö<ÿ1»Bz|)�ý÷2l?ZÊøšR*¿€ñyËX–VÃó¿«äëÐõÜý“')Êèu4ÀßB°ÝLê”l2&·ÑO|WóÓx²ËäéY¤Ç´;2þTcudG /¼ZÉo3X�dÍ^ÆÒ|'½û¦æOÊXõr9û7Ãètî.ú)EY6 ˆkó³¬Ü´�¦ØñdÏ™Œ»d -÷®ä¹‡œp¬†ÒÖóö§ ´E[k‹�:òÂz_E­b‘+K3þÑS¹ïÁtfÍÉ`lûDšöü‚ O#ÍpÚzû@õÇ4™'³ôÑùÌ´dàÿäI¶TïÁ—EßÛŸžG`ÚkXóÈ3lŸ´�bs%ëw6;±�Y©\½ž]‡cI½ÿIþÇœ3·"¢^ú¢÷ÒYcîy�g»�0Ÿê¯W0q_)[6aM+dÅÏ IíÙR·7Ab63oÎ¥øÞTÌ_þ½¥4|Õí®óX/9ð‡õì²d‘5~»zôÚ×Ö°îÏûh8ñã'SP´‚›ã/Ù¼R/=0ú óY ~ _¤>`� i‡±‰VâGÛˆ£‰¯7C×^§•5Øf‘{M ®?­beU<…‹îæúàA¶¼QÁ‘Þ¯ÒÔ¾²Œ‡‹Š(zx+ßi ›ƒÐî¦ìɇ)ZTÄËAÙÁf8ù¯½¸÷u…ü�_þŠŸÞKͦõTzz×x ë[JML6?ýåãÜWË–×S¾ÚÂó¯ÖÐ4.—âG ˆ«ÞÎí@,ÐÞ@Ù¿>KÙÁ8r—=ÅãßB[õzžyq;Í‘:oDD"V<éùEÍÉ áØ\;?àÀ 3I“S{�Ö×L£· F$’hb;¦sÛÓx¸ŸíÏib‰�…àžJN\ÈÂéVšö•ñìê}8ç.&{\µ›JÙÕ¬¹""C _ëî¯ß­$ø½Å,½+‘¦OÊ(y¯WGãdæ#KYzo*f á/óu»™$gÒù­¿ÚÂÚ?É.*`BÏäUWƪÿ<€mÖãüê—�S0ú寖ŸþË+}Þ(0_9…~A�lë Œ±]ûŸÌ±˜�Ö`�îcqSgQ˜•ͬãH½«�i3 ȹ8ÖHc¯B ¶CÜÈ8œ? øÑùdXÙUò<•�ÄŒÕj&iúB–>”MbK-¥«Ëq…:ÿ¯Åãâ §™±÷>MÉÚ§˜åè5¼æÉ,ü?%”üj1Ó&NcÚäDh>BCøöíÃÕnfêì…ÌÌʦèþiœºÞáWÛÙþEkNEw¤“ñ½…Ü—f¦yÏGÔœ"óJD$Ò´»xã©åüü¹í§ÎcŜޱñÓ|ˆ‰íÚ¢˜‰�‚mûÝþ„‘˜Å}wg0ó{$$~Ê, ²²™•™m�4Ó쑡Пuõ×·Î¡èŽ ²gçr}L�FOcÏÒP¹’g^=Hìäy,¼#þ<Ö‹>*JÊñݺ�…½�·ímq áwül-%ÿ{>Θ«y^E&�’}©¤á±Ä´�øÎ&fþöŽîï~‹·ÄBL<Ö‘f �Øáfho;s50ckg|ûwFp�¼|€ZÌ*~޵ÅÝ�äpÏþå ‡Úç3ÿ‘Yø^­¤ô·Û)ÅLâ­óX±¢€Ôá=‹ÙGÍÆU”~ð��óèDs‹°b³™»[ ´øšðµC¢­{å�Í í>š[€áç?/tšˆˆ\ub™ùÈãLøbeXϯ~kcåËîq”9�øáÀ±Îm ikÌq˜‡·�uûsš‘6â,ñ˜c ÖÖ¹î� ´u6{""C$”�únåøx†uÖ0aÙõ§_óô+µÄNYÈÓ?+ )¦Çs¹^lÞ±žÒÏ&PðËthn Bm47±M.dÙì¯YûNkv•�ÙJú=+x|A:ñ—h^¨—a¾Ô“HŽ�#�M�…äm¤…DÆ�?÷Òðí« ü� t�lkbIˆmÆõ~9e[kñÐF[;�Gb éÎÅ<óâ«”¬ú+f§Òü—×(Ûyú¹$Á¿¼ÆÚwß¿òêÆ7xê{ÖS�ÅÇÅÍø|]AÚçÃ×½¢°Y±Å€Ï×ýzÍøšÚ ÖF¼¾vODd�ŽP³¹”’?Âvó4²g/dÖ�д·¦×é{ñ$Ž³Â‰F@{# ÇÁìH"qÜ ·?1šê"ruñíXï^©%~ú ~õß p?¿õbC]-M͵¬ÿYE‹ž¤ì+à`)�ýߥ¸Úmd<ôÏ—”°ú™Ç™?jË×SáÑ|ˆ4:Â|©�žJVš™µï­gmüD|•µÇÍ"ûà𹽤ùX e¯í"¶®�¤µðñÖƒ`Í&+5ÿ+å”þ¹��¿*à–Ø}¼µ'Hü”,&+ç‰%ep÷RŠfŒÅ::ŽØ˜Xb-±§¿x[°óˆ±¿WÍ.Þþ¤hâëÏŽŸ–NRÌAöl^OEL* om§ H¸6›ìë·PZUBIêý¤7o§l_ëÙd ×b "2È5=¾º·Ù²§‚/<3™ë¢â ˜“�$RËÚŸ<Ëö±óyîÎ"5s‰®dË ¥4�¬e{£™Ô9ØFûÞþˆˆ\íNÖòZÉvšb’È×țˈ—EAÖ¹½dRþÏy*«ëÀR{#ün æY¬xtñï?CÑÚF¦-)fV’�ÄfˆIÀ¬«)*0Eöô‘±ÌZ²”†ß–P¹ñ±ã³X¸|!©çQñw.f…§�õÛÞ¡tX¯Ïfñ�“o†‡~ÎÂæµ”PJiÈJÒ­ó)^2ÛÈfŠæ`í–ßðäæ æ‘IL¾w)‹³Nó-Þì¢ì­gYy0—ÅË‹á¹ulyY/.dé�²ê�o³îåCäÞ��³îí΀“Dá¿<Žÿ…õT>ÿ [¢™xÇbY<í¼O3yæ™gˆŠŠ:uIïß»é4¹’<½âq×®£â½2j‰'qÂL–.�Eûhki¦¹µ³)3ß<Ÿ6²fóJƒV&þà§üô®ÎS/ôöçé§ŸÖŒ‘°=sÏ Iõþý‡?üaä |àk›€öv½QzêjÖæ[™•e=·Ý‘Jú©ë5pÐX™´šgf�½(oW]]ÍÿøGf¹ús†Sf9×À¬^úò¨®®&--�èèh¢££‰ŠŠ:õ³ç-\/)½õ`ódTTÔ@ p²ëÖ £ëÖ„€Ž^7@G˜¿‡A!ì[�oóÄckùbB!?]0™¦?m§1&‰ìÉc5mDDDDD”g†<æ.T—âª~þ�%lhÉcÉLǹ½@ÈK}=¤¤Ú/̹¶²ºÆÉ’´ð ŠùZòçå²õí·yöé2âGOdæ’e^äÏÃ=ñħö†…Û#é{ÅDDÎË7Õ”üGy�æá{éNO�‹i)�×”¸`Ú€áö)äÞ—Gš©š’ÿð“÷h.çÖÅŸ¹~UxV`–‹¡©žûm8Sí—dÆ\µ|éXÄ3Ï/Ó´‰!µ©'-5…}†ˆ\eÑf„ÙMÕN/)wžë$÷žj<·÷ÌêÞ|�Ý–|ŠK!!ÚÀ»»ŒW_¯b̃Mzf¹œ|µålÚé…hã¦2§0{S e›vÓmÂY¹mN.TìÆý¥…²­Ì½Ýqªqª|©ëÃ�{¬<ﮦrT1sÍ›Y½w8)qmø|M˜&åS˜å€ÃÕlüã#¬Ø8�õïn¤Òe` X&å3÷?Û>táf#•£0#veÛê DŸFÞ?æ�¬«ü‰ˆ\T®7_dNF|øŽùIþ~i‡+Ùën½¹†‚ÙN¿YNµ×Äýö &T¾´ŸšÌ“¸áËOˆ¾¿˜œQÀñ*Öm‚‚…NêʶR×lÄsæ\òR4½E$òYožŽíÓJjo™KzÏÓlB>j{¯¯k ì?\Ly¸€”Peë÷“úÙøð€‡À±­ØÈ'­û5ZöSó¥“ÜŸtïŒ4a¿­�â4H ð±ç?7°õÈQ£³yðGØÂ½ç$�Ï+)«¨Ç‚„Ô< ï긛jØøº‹›æ’>RóS�yˆ¹T§fŸ.€?8ŽÜ p&¨-]Çî†Lnû|7þôg%`®e¯8·¦°3ÚIáí8$N4[™¾ [°Ž²vPËløp'¦ì%O²à}ïEö �„LXœ†-TOùóÕÔO/dú¤*N$Ì%×é¥òe7ióŠÉHï{/R¾;�âÛmu^ˆˆh# É”ÆÜÂd8PÆê½.rïÉ$ùc3fg0âÓ�”›s)Z”Œ)PGÙËÛ©O�Ž)äŘð“®uýÇl=à'gz¾.HÉÇî?JýäŠÓ˜þ¶�Õ{™‘’¬ ."‘ßK›'’}K¯ow“öƒo{âÀ§Û¨î½>üqwß¶—�º0;0¦Ïeòw e·‹Àz„e€ãGi=‡éôµpBà¾ñ3f^ùV/U/•S×”A†;Ì{¦Ü†û]7ÎyK˜1ÒKõî¤Þ[çËÝTn®Åž¿à¢‡eõÒ ÌC8 ÷f!!®‰m›7°Ãd"pä$Ö“`KIÁØ´��ÇÓ¹iÒ¦\k×à^y„#€y vK¾o|¾ŽÎ½\ök ?˜F�ÜÁÖÒL&ƒÃIF� zpõPÿÚ:ö†³ °]Òy%"r5s�£sc>|8¦ AÏÕ³·á0Þúm”¸»ÆPÎ ÚFòø®u}Z �Šýø§ßDýg)wÛ!.€éP%ö™°„Žr²ujçWŠˆ �^Ú65çË•TŸËˆ³¬SnÉ'í•u”EçP|wwúíC¨Ÿ7™LòH€$Ä4ûxÏ&ÃNÎH ÚNfaà¡2ä§nË&¤8ÉtYæ•(0ŸS�‡ûyIë¨|×KÊ¢d$Ô•­f?`JÊ¥øÑ©¸ëëØ³m57/¤h̹¿�˜¢{­ºÿªŠ­Ÿ;xðáØp³õß«Î\�ân"Q>ÉÑ—® ûú)"rUéo½mÂ1}E·õü|�—*L�ë|€Ä4Rš«8Øh¢¾ÕI^"xßßÊž¸Šg;0­bÝ5™EdõÒ¦drnO`Ý{õÜÖïú0üøÛb‰ ùñ`ë+�ƒõ˜ w0“´S; àqù°ÙûX‡{Ï@ uá‚wè�‘NŒº=¸³ò.êGÕK_¸ÍìUYØY¨.©ÐIذÇþzö»Ûï'UÔ�ï¨z IDAT~c#yÒ ò³“ðÿíhç7f÷.Àh &S€@À�ûð‰S�øÚ�7´ÆÛbÅž`Ãnóãù:x¾ps0NžÄø#¢!ðe®–o—#d€Ù�Ãì¦þpçq ß'•ìh0.ihè¼¹˜B�;Bí׌¡éP}çñ’€‹ug;‰v�æôS·½ŽÀ éØ�@ÀÀb� O]=Þ�¡‰*"Cª—¶LÊaêß«Øííü»¯õ¡wg%ž´y ÕͶ�Þî�Ñ»§Ž»‰ g•oÕá3:Ÿãݽ™×+ê9ÑÇ‘ç°ïiv`7ypðQ½q#ÕM€ÉÁÔ™³)Hq³õ}7Æ%šWꥰMÕ$¿€ôuúÈÅ]x ¼»7°êÓØ®¹“Bþ£9d\·›òµ%XG§�‘å`Ûû•ü}¦…½›^dG´ H`ê½NH0γ�’wM}?¥kæÚH»9�M¯oÀ=z¶¸oO“1¢‰�Ø€÷˜Ÿ„ésH1™0n¿�êM/òân+ޱc˜®Ë mûVÖ•Ô`MšÂô´zv¾SÇ„›’ñ¿¹�ò¸äå§Qö§u¬3ÑuÑ/ÓE/p·ˆH¸-û8’mÛ(ßPÅœùyäÚĆ—ª1aÂq{ aÚ0GZ2G_OúâÎÃ$ŽôtØTº¿ŽÁ1%“ŒPÛ>ƒ]SWD"º—>-®’y—“ݯ¸ºt˜õáñjÊ$“÷°¹$¿¼•êIE$'Áëol$á�¹dž:ƒÓBÚ=pò�m¼úïÛ0‹c*ùór°SÝGhóžÑ6rîv²ñ�ÕÔ…LXRó˜k…ÐyD:;Ÿ”—Ë©l(&ï"�š­^z�Ó«ëÖóoè<òÕõ3¦+X›30 Þu‹ëèèø`0oX]]MfffDŒ|¸Bîïû㺿Cnß¾}3çÍ?ÝÈ‹_Í`ù†ÖE\ª««™ÛwÃu/0=÷ŽÙív¼^/õõõ´¶¶j)º† ƨQ£°Ûíçt‰ _DDDD½´ziõÒ Ìi%Ð{!±ÛíØíöS0è¹"èkÅq9¾¸=Ò§o÷÷üÙûw�F""""¢^Z½´ziæË\Ü=ÿî½Põ\ôõ…ì½_GVð)ôþþODDDDÔK«—V/­À|‰ >\t!ç^ðý¶>g!"""¢^ZÔK+0_‚"îïþp…Þý³wñ÷µ"Ð)$g/è³úÙ | ¯%""""ê¥ÕK«—V`¾À+€sÝ+¦íü ÿl¯é+"""¢^ZÔK+0G@¡gÝ 6�+ÊÀ | ­Q/-ꥯ˜À\]]qâlEîqòå_ d/¥ˆˆˆˆ¨—V/­^zÈæÌÌÌ!WäyžŠþâõ`‹WE."""¢^Z½ô•ÓK_ꃯ:%»ÇÂ0�"íë2÷ g—·è–EDDDÔK‹ziæ(ôþ"í»<­Q/-꥘/ÑÂu®Åª…kh¯DDDDD½´zié­I …EóLDDDDÔ—ižÉ™t„y€ �NQa‹ˆˆˆˆziõÒ Ì2ˆ…IůbõÒ꥘E ŸˆˆD´f*~õ»îø=OÜi¾2GÑSÃö¦T²Óâ5»EÔK‹(0‹ˆHdó^ÉæŠ:ü!FÐÀšžOá]N,ažk|ZÆêC¬¸Ï9¸71êØø‚‹ËòIwõ�oª)y=@þ¼¶ýg€ü‡f`;×jªcë–*\Í`20ö6 fÏÀ1$òg<Ù�ýŽi±æ+vy;òñ¼\¦À,"" Ì""áBnv¼ãÆ9o93FA7•ÿQEÍÍÎο/µ„ /`PÿÞ6NL)fùÍ @€ú77°£n …7'\¾�¸ù žü,�ìÐA=BéÌl)ÙŽ Ûÿ×#l? ÿÛI^²’‰ouaN*ã±5Mdßìg_Ý× 8),ÊÀõV%‡�çéçžÇ9¼™Š·ºþ'øÛüÅÿÊSÁGÏ=Âo^Iä©_>ÅâÐG¬üçr¶{¦Q`®dý«GÈþ_k)p©}á1V½QCÖ?g`Ž…¦}.’~¹–ÅŽf¶{—ñÖÎ#̺w,´»øhd<šzÆRaކ¦ºƯ|ŠÂø¬ýç_°vÏã¬üŸó‰ß·–e¿«Àõ½"ÆïZÏÚºTžþmN\”>ñ$¥dóÄ��¼½q×?úO¥™ ºÊY³µ†#Ë‹(¾cëG?ÁÊ9I4¿¿’ç?ÏŠÿóéÛŸ{’U婬¼?±×tQ¥ŠˆÈ¹Ñ×J‰ˆÈylEœL¿=�ÝkŸåÅÒr*wÕã t>¨­d§)‡â/¡èöÔ×¹ƒ·0õGE,yø6ø¤�áaÇ67ióŠ)^´„‚Ä:¶íöáÿ¤’Ú1ù- pâpüÆàÍòÒvM>…?*"?ÙMÍç8ZC¥ÛÉ‹‹X0ӊϦӶ„&RnŸ�ñÞ¿³jíF¶¾_ƒëx×7U³µÖFþ¢bŠÏÁéÚÊŽÃý ÀÑãî+¦`Ò v¼ëÆùÀ–üx)Çk©ÿ&ü8í`ÆÂ¹dŽ óz§‘a0“:e2¸ðu{çC‰S³Â‡Bëd2&š3cí6âR'“:°Œ%qD ¾`ô,žzái ]¯�–DKS#ÍݯáÌ"ÛOÆ“ùzÇ.Ž|ñ{ڳȞ~ôc'f‘1ˆI$iT,Î)“‰HLÄÚÜ„0Ïø9¿ûUN3`v’êŒÃwÜ1qÄÇùÙ÷Ávxš1; X±|&cO{‡ µÙGâ�³H�bldß™Šï¿j:‡¯¿é"""2Ð~B“@DD·ý–¹¬H÷ᮯ£î¯U”|XMî¢Øÿvë5ɘSjsSÁøÔÄðñN&À2‚„ÐQAî£ê_[ÇÃÀp6á 51fœ£sC•œÌ¸h÷ ü�dGçfÎb±` ¯—€} öhÀšBJâzçpÓ53(z,¯«žúÏö³íåí8îYB>üc§t;v’;Ž$÷õþ#$�‚<†�œ‘�ÔYX�JÂŒ3ذ$„?õ;6>žSŸÚMˆ%!І¿ûÏø>N�ŽåÔ§™cb1÷øl³9‚í@û>zc=åŸ4Ò47ÂØŒ°ï?5›É/—ñÁ×dìÞEðÖ¥¤Æ4³ýßV°voÄ$2ëÉ•Ìb˜Íß¾· Ìæ®¿bz|¾ÚWË–’R>jhƒhö¶Ÿ0–‚ÿ¶ÞØÂÚÿ¹ŽÆøÉÌzh)óoíùÉô6š[ÚøbÓ“,ÞÚuW{mÖDZÚÏ2]DDD˜EDäâ3Àb±‘'Oÿòç8‡Cðýgx¸ª�'Çg�=e-e;?"øÈúqçéØY�®drÀLüHh>0�wR󫨰,cå³Ä5«SÚý°-�‚GÒ)x$È‘¿¬ç×ϯÇùŠowKüˆX®Ÿ»’gòmg¼vƒŠSDD.�’-""çîèJ^ÚL]÷¡Î�o“A‚u8ökÆpô À¨ßJÉ;®ð¡×ìÀavS¸óQß'•ìh0°�²rôo ÀøÒÅÑmÁd øq>1¨Á5ÙlX¼¼MõÔ7özBÈͶµ%T~8µCÀw´‰Ø‘ XìGÜx .�ÇX&SWȼóp2tæøÙM\Ç;ÿ¯zãFª[Â�3@Àïïñêng{#@3µÕµ01•ñ1ç? ý-~™Hâp ÙÅÛ‚“A‚aŸm&ãŽt|ﮥ¢m*97tÝoÃf³a³Åcð0µÑÜÜ‚Õ1žx øuÛëZh>ÙͱöÿYÕ5¾fÆŽOÄ ´w~>º­¹ 0“~ëd?¨Äu²+$ÿy-kþ¬¨,""ŽŽ0‹ˆÈ¹3ƒ9Ù[)ÿý**£M2aMÍgö$ –P.ÙŸmbÝ U`Ãô:1©9ó5¢ÌÈO£ìOëXg¢ëX&Æä�þj9/¾”€5ÙÎ3ØH»9�M¯oÀ=z¶¸A~yÔ¸LfØ7ðê .ÆŒMÆ–Øk3�LîÓys달 š:�$�M§à'Ä%“7µŒ­¿_×yJ…ãÀts:�ò l8hÅ—ÀˆhãŒñ˹ÛÉÆ7VS2aIÍcî(„gBv¬sÑ/ .ÍIãË?籯|øGÜÂâÉÀÜG¬Œ±·�ýÿ­eÅO¶`;™‚ûç3õ¹R~½!•§ÂL^ó”lnißNí­98Ï+°Ç“qï}¼õü“üÿìÝxSu¢ïû7”h�IdLa~÷!—ÇVo3\[9dϪcõH=Û2#íV:WËÖV�ö8táx€ë�§8—èØâ¦pluSæ‘2—–;ÖËœ1U[¶�¶>ìp7„ é–D1†\1rÿH ‘_òKü¼žg=4Yßõë»VÂú¬ïw­TüÙFÆõÌ+ñà¯÷R7m)ž.j—–Ñ�Lv¾{%y£!–ãïR*”±¼ªŒŠ«ÃûÓ²d÷ò æ?æ€ P/"""ÃRÃÐ×�ly–ú7�ã½ÏÌÀH`tjH?zôhǹ,pÛ¶mÜ|óͪy¹ô>‹ðÿí8Ą쉌ù,Àïÿi¸—ìQWöj‡¶,bñ¿Í¥þ‘+à·‘šªk᱊�:¤DDäÒ:×<9lذYÀp85|JòÊêg©!Aòæ©£' €Z˜EDä›d„‰Ï‚ á-ñùgXs ™>JÕrNáýOMølù,QX‘o©ƒª@DD¾9Æ0ýŽ™®Š8w‰ÍK–Òò×,æÿ¬à¤ŸxQ`¾ L&ñx“ɤÚ9 w­ þr¯Dš“¢ÿÞ@‘v‡ˆˆ\&†a\òyÉŸ’�žžÎÀÀ€ö¶ˆˆˆˆˆˆœµ��ÒÓÓ¯îÀüío›O>ùD{[DDDDDDÎÚ'Ÿ|Âu×]wuæqãÆ1|øpöíÛ§=.""""""g´wï^FŒÁµ×^{uf€É“'óù矈F£†~/QDDDDDDŽ3 ƒh4ÊîÝ»˜4iÒ%_‡Ëö”ìÉ“'sàÀB¡Äãq""""""$�žžÎ·¿ýmÆ�wYÖá²þ¬Ô¸qã.Û†‹ˆˆˆˆˆˆœÎpU�ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆÈ7ÓˆK¾Ä] T-j%˜8ñmó(+vW÷S0ÍrAz»ï+[ÙyÀÀ<¥˜å+Šp¦i§Ÿí~1�²`?׌ÙÍñà°¨šDDDDDä›ã²¶0[¬V¬ã¬XÇY %ø^õK—Ò´Ëøê3OôÒÚÐÆÎ°�õ?x˜�ëΰ|ÌXÆÙ±Û­¤'¼§ßF/?«®¡½ÿ\÷A€†GçRòK†*VDDDDD¾fF\¶%§9)zº†Â ©×:©[²’öýÚZ»)ªÊÃü•#òW ÍŽçÿ¬¤ôzíì³Û/™-Ü/¡÷ZY[ÛDw¸‹µÿw3SŸ9‡Vú]oÒõàPµŠˆˆˆˆˆóù—GÁ,íƒÄö“‡ƒÐÛÍ4nj§ïߣÄMv¦ÜRÈ‚û pZ’�ÎWóc¼]Óî_B~ Žµï̾/�Ά6¢„i}b.­ãçPã-Å™Ñùj#-oõ±ç@ ,v2§{(*)"/3Ñ#¿_Ä‚u;1Ï(gIVÞõ}Xîù5ßõQõóf‚–|>•EÏê|{0eæPüX%ž#mÔ®i¦gœô©·SñÓRܶÁü íåFÚ¶û þÕÀlu’sÛ|Êæfc4›÷¢å9ôÖ7²uG˜xº“Üy•”ßê8vÁèï¤éåf|;ú‰ÆMX'fqǽe[�v×·Ò¹#LôsŽéŠ˜�'ó\.C˜É¸©ˆ…ªžn#¼ç5ÚÞ›C¹;9�Ðö&_õÑ·/L Žéæ”Î'’ÿÚ2¿–Ül÷R2·Ï¢*ݧŸNDDDDDäJqe=ôkðþÙá©àÚáeñ¯›éÚ?†¬;Џ}ìy£ž¥Ï·I:Sj ¢¾F{ óú©Ø&dqÇnìiœ³ ˜3;kZˆöšŸ±òw]ì42ÉùÛ|r®3t5³ò©•´‡SËO™ �¶Q÷ªóÄ)د1�ÙŒ æ§yu3‘ .2-±½]4¾°’•«·wº°› ¢ÿÒŠ÷•ÎTWäí«–RÿF/‘q¹Ì¹ËCf<@׆_P³%”ʦÇçÝôl#þôlÜS­Ѿ5^Z÷¦Öí€ï’•´nïÇìÌ%ÿ»™°§‹¦gSÿ^,YæÃ6~±´Ž¶ž¶[æPôý©êkÃû­¥;vî»Åœ•Oîx€(þÉ~ÙÆŽ–Õ4Óµ¦~7X¿×FÝòµtkÖxïEï¦à®ÜgžNDDDDDäJqå´0è¤å­ Ö¿™†� Í›ºˆÓ~ø$Õwg@ÂØ'ªhêi¥mW>ÅשîÁá�l”ÿº†üq©ùåÀîönÂØÈšSFéõ`t×ÑÔs6eO/¡`�Ò¼èg4íꦩµ—ü³1v9î�àüy-•3RÁoðÞD˜1³_`Ñí6b[W° ¶c�ŸôÇj©þž…Èï—ñȺ^b;ú$òp •En® wIù™0¨Þdçö"wp¬m8Æ4óW¬¸Ç†Ëã‹iÛàÝ÷CMÊÀßÚDWÌÿÛ<–,-$l¨fñïúñmé¤è¦|‚[6ÒsÎ|–>’�ƒ,ªXöz;ÿtî»2ÎmߤÙqdû!�NÂý8gäâtP97sl*‘‡¼tx—®�Pž[DѾN|;˜æÿ؃î8ýtî›ô¡‘oz`NôÓ¼´‚¶4ƒè�(F›ÍÜ»³1lgç~+¯ƒÈ�`Â>Ù {‚ôîQ|ýñàg¾q6žq§_dàƒÞd7í©¹äÞ;�æ ÷ÿȤiW€èŽ�É>^Çå1;ç�†N›BÎ�ÉR–É™ØÓº 2•ì“em“2I§##`qSüS÷�m7°Úl@%Ë[fZ&y·¤nú5;q9Ì´í7øË¿3Ù nÿßÝ n½s^ ëç Î ÈÖMv…¶O²sè@°Or`&Ìž¾�weœãýáñTë¿)Í€ãÖrªoÜ0†[±�Ž `ùò9�ït""""""ßœÀŒAì@˜c=„GYqÜè¡èþb<€pŒOQÚýí'M E�ã�9}¬åŒ!0v0¹4ó Cc°%}Lò�#‡ˆ%†„×klØNù€«‘Xg`JM›fÂ2j0½›’­Ô R]²cø7×Sÿû.Îô¼è1Çç�“ièE†"SÛ;êK~ã)çPªRƒ›—ñÈæ“ÆG„9Ççp%Â?Lþi³§jçÃNê7°uG�˜qòž=�ó�NDDDDDä˜ÓœÌ_5ä)Ù'³X“$¬äÞ_FþI«2ÙOŠ|ÃÏÜfjkb©V]ó± I-sÌEùé©XW=+^ö夠¢�ÃBìÕ³âw�s¬³tƤròÀ¡(Ç¢}"Fì �‘fÁ6öxÇ÷Ë™—k;ñBÂ(;ös]ÿž­tÒìde9€ ÍÏ®¤uXgÌgá].liZž­§+zº9�ït""""""—Þð+vÍ,.\ß`ÀäÂ=Ã�{†›LSŒ˜c,–sžeæ ÙXvwÑ5ø€¯Dßöä½Óö¬,2.¦„ÿ5�lIŸäaÎl7®iø$Ò??—vÕ ²¦%ãnøý^‚ƒ1ôwK)]°€¿l#DÓþÆ @䈅ìT½eÙ!vċ휺cGv´à]ÝN0O/¤``Øýï²o-$/Ë…klŒÈÀ`�ž¸MÆ‘T×ôsœNDDDDDärq定ƒÙÿ9—×VuÑûÊb–ÜdÆwÓùÎN¢7å¿tã<Ç9šÝ÷0÷¦Nêßë¥ñ©Eøs&bük']{€qæßåº([bwØ1ÄØÕÆÚµ12£Ýt°ãH‹ÜßEÓ?;)þ»³›—kNî·êèÞ¹�Kd[C¼»-ivòïÉ'ȸk.Ùõô¾ó‹ÙCÖ¸Cø;º±âyÜ‹ût7äÞrãH”èÁTˆµ{(¯(H^PHs`¿Ø£ûU/ ;ÌìéòÃD+ìŠÒ÷ûFÚlÅä^33`ìØHͪy·åŸÕtÓ-údŠˆˆˆˆÈe7üJ^9Û¬J–VÍÁýÿ›m´m3&«€ò§’o?Ÿ9fPðÄrÞ�KfZ?]j§ç Ó¾WÌ¢•äÙ.ÎvXf=HùíÓ°›Âtÿ©�¾4•?¯fÞ÷˜Az¶ù‰$Î6}ç³pi%srìÿê£}[?批W/¡|ðiÞ XøßÊ)¸ÉΡ÷Ûi{£‡Èu¹U.§<÷La4yoy8&‹ÝIîÝåÔÔTâ¬ó4's™Oî$ ñ=]lÝfJÉ“,}¸�l«™ØîNºûa›us²¬˜‰²ç}?áÃSÎj:‘+Á°Ô0ôõ`�–ú7�dKô’·ýŽF§†ô£G�v¨EDDDDDäŠ ¼Ã†Í€Ã©áS’Ïþ,5$€Ï�£' Ç‚±ˆˆˆˆˆˆˆœD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD˜EDDDDDD˜EDDDDDD˜EDDDDDD¾~�9òú2ª^òéx£»Ž²{«hÚ;äÍD/õ•PöhU•UTÊ”Eñ3‹È·‡»©ûé&|·eS0 �܇k©œ¡/o¹øœßË…ºÞãÀ1¶Þé$~s®´3œ×ž·‹|Îk±c|ÐI áÄ™– n]=Q¬×Lü’ ¬Ø?ncÓvå3,gYýø¢V,aÝóðŒMÕa¹OÕÒ¼k9ÅS´þ�n²\ŽË|º…:pO�±aGœ68ìÇÐJtÇNbwe`!†G ש}•ðóf—�ÝÔIGß|²ÝæSg ÒQÃâu[q/-À˜®5Ó·¡�à²BigªŒÓÕcŒî5+h6ÏçÉUyd˜!¶«…•Ï®¦eÒ 'œaÖý-,¯íã»U5TO³ÀámÞVþÎAÍ\(‡ÙZ IDATGò˜Z°êø1õaË–6âË©ÆsªØÈ¯ZE>`tÔPñ^>µ�¸¿$Òùiøe=á;±êç̉þW—S󼕚ÅùظXŸ�‹ãÊê’ë·c*Ex`ۛǮÎ}Á@ŒC£¬ØÓõe-""""—Á$ytâ;Ö:¤« ò<Îs;¯½¢’�“ìq½¼¹'õ:ÜEÏpÎ/ ¡irîñ°ïÕ‰‹³¬ ¯“øÍe¹üø¶iv4;)z0‹îÿÑJçkkéœ<Ÿ¹ÓÍg¾Ð‘å"ôA_²ezO¡ë=¸#}Éýcøéëw’åJå¾>]có)/˜È»oõ�¶%ß6=›Œ�ƒ„ëarE[iꈜ¹.NW�;i{ßżû’aÀr}!O>ûä™Ã2àÿãVⳤhZ*ýŽvRP¹œEÿÉqê ì.¦]!=ÿÃÈx¿ Ÿ­�²[˜SÛçš·˜šÇ<©°üõú|\Q�9¶Ý‡ÿo<äÝäÁcê·sÈȸŸ¦EUT=^AÙã Äg’5ZßÕ""""r98˜5ÓD·/Õ}7à£3ÍìIgq^{ÅCVn}o'oŸ mëÁ4Ã}<䜂ÙQ@ñßtÑøFèÂ/+ ý�8¹ßs“÷]ì~«“¡ñÓ<­˜ùÎvžû¬Ý›ÍÙ´q›§gáø7?þ?Ø�-«€,û>ü{�=½&d“e0èëèÆ:sÙ·ä2±ÏG÷á/�ˆ»ºMv iM¶à¾·€�ÖfzŸÅz}Y=î¾Î‰ë¤Ücm>‹­�ì?„cÊIáx´ Û—ä(cO'½G&â¼îü�¢Hˆ1S\'7lcÍg—û®0WP—ì�»q}¿Kš…Ü™VtôbLÏN^™0¹(^1Ø%;HËÊ•¬¿<Õma€®ÕTŒ:váš·œÊYDDDDD.†ŒY˘_¼I`žÞîfÌÌ…dœÍyíy»øç¼–sq´vâ7¬Þ3‘û°•Àë§�‚ì¹E´=½�Î[æ]Øeí|“.S.‹œ`ŸOvC+]òS·d&ë¹ÿßÍXGñï7È{µ;6‹,k}{#Øý#qýG®ØH^ÿ D(áÇ4=Õeøp7¾÷3øÛy0.—Y“6â{7FÞ`]§óZÓÀ8�É”=ê9!´›ìÌÏ©fÍkA\“ÎX§­ÇÁÖíàæe¬üc#n�1g9KîÊøŠ{|€îuUT­ŽDˆ˜²(z¤·ù+Î6aœîS`þºèØ'^LÕFÀ8DôH}¥Ù¸Oî÷?Ú�ç»6–õa† ÝÃ,""""—ܸ\fÙ–ñæÎ<èCî“ç~^{<^a1G Œ ‰±##± È—àœ×â&×ÑLç6ýi¹”[!p¦ilŠg½†wóNòFpö¡ç´Ë2èíð�šYùxWò�#aBï„(H…ÄÐëkiÿ ËïífÅK­ž.JÝ}ÚËd»â4~ÐMøà ì`›>�O7õÐÀuw²56ö®�îØ>Ë«hˆ éè&6+Ї4æ…^_Æ/v:q�¢)ÞùŸ‹Èxª ß]c0�O=ŽŸŠý£NvÆ ÃŽ»—°ênˆü~5Gâg áS'�¡Õ€Cî> ÷€�l§HÇý@êæ@3‹^8„kÊW»c˜ȡÿå'„‹Œ!!Ùÿ^ çMÌçõù¸|®˜.Ù¡Ž7 ͪd•w«~½ŠU¿©aþä^|ï§¼*Ñ÷AÛ»¾¨EDDDä2±‘w‹�¾ÍÍô}{¹ãÎç¼v�×MSñÿi+¡T±ÐŸ[èþv9¶K¹MfÜ7;èÛ°nÎãlí¸£WO3¾ÈZ–ÑGG��y+j“uøëUÔþ|6Ñ·;’O“>ÐÎÚ×-Ý›�mZ1ó�>Öl9»ßÅqÞà"âk#4);°'e15ÜNû‡N²®ˆÑÝá'k�÷زW­ú î½>:O±}·>ˆçà 4½wŠG;[ò˜wë­[üÄϧÇæ2gF€¦5>‚ƒ‡O,@×!FŽ2�y[gÏÆöæšú"Ǧm«­¡©çâœCéôê7¾ÚtcùGZX»%�z²y ÿÆçðnñ;ïÏÇåsYZ˜Ãª¡b{êÚSš“¢ÅÅDß ÷A÷�+R6<뤥£›XŽâ}4=‘êö�kV1·~¬NîžXó©^V„`o +m?öÁ̾ÿW”çšõ/""""_‰%׃½¡Žø•©À¤ã¬Îk+h>6�rjîÏÆvk9e¡:~ñx `ž�KÙc…CZéNsÎ{[æÌ7æâøôQ÷|�{£0.‹Â‡+)šn¹¬[uÕ¶0[ræ±ðñ ò'é*""""WcÀ€•¬ÿíF6þv#»ž%w&ÓÓ¡˜AvéšÔûÙ¸þaƒî—jh3±|Ýz^úe1Ö·jÙÐmÀ‡-x×ífÚcµ¬_¿†êœMkÚ©Ú/Ÿƒ>êW÷1åáZÖ¿RKåÔ>j× ½`rær�M^6Æ X¾f= + 16{i\aÇõ{�x·Ú˜÷ÌzÖ¯^DÞþV¿:‡r!Z^l <£š5¯¬gÕý6|Ï7Ñk\Þíºô�9¤ýùjJKJ(}ÜKË?/£dn)uÝÀ{u”Í�˲7R‡ÏÞfªî�KÕ†äÑ`ìm§î¿VPRRBIÅ2¶G’åv5Quï\–ýs 5%To ëÙÀÊ_×Ò¾7Y$ÔÕÀ²GK)¹·„²Euø>¼Àá§eU5e÷ÍenI)O7Ðy@Ÿk¹8b±Lé–S¶ÆbqL–3·¨Ùg”R~¿‡ 3˜'ä’ë üQ ÌNîxhAªU΂+78¡z¿lAòýNú&07+µOæ0ñƒNºŸe¹C:ß5È»+Ÿ 3`÷Px³AWו•˜ý+åïæ�7í àÙìÛÖCälËè¡go6·ß‘l9·Í˜ƒçšN:v|Ãsä�µ¬ýs?¶[æS>×Aß›½˜ íLAÛOÓ³u´ââÁ¥K(¿!Dëóuø"€)UùêÄ<{>E9'õoèoÁëme÷„"ž\±�á£îùB@ðµz·�§b9ËŸ(ÆÚJã¦n }¶EDDD䢿CÄ­,«,£´´Œêg[ðÇbÄŽÄ ¿¹’ê‡J)-«bņî/0ãÈõ�=np†}ôü›�iÓl0.Oîñ®º¡z9ät15Mõ~¹„÷‡±Œ·sì2ˆÅNæ¨0á�ζ\ˆà� ã‡\0™�A¤ÿJê7£ÿ£8öïØ�¥ØÂÁ“.Öœ¦Üþ ¡kí8FÛJ2íqÂû#߬ÀÜ÷¾#ÍEÁ}äÍ,bþm޳›pO7=ûÁ~K!ùÓ\xæxpéÃ÷~ R_ ¦œ¹”Ï- ïú¯Ê…z:ÙiXÈ»£�ìëÝÞæÂØÕIWø,‰{vˆ˜s¨ð6P»À�îò‘‹Á2ÞMÞM³˜·´–†ÚÅäi¡æ¥dƒ�}º‡¬œ9,z¾�5OaéðR÷çÓ#HÛóõì¾¥œ¢“ºnGºëYÙf£¸ÔƒEÕ~ÙÄÇÁd>ႇÉçPü,ËŽO˜Ne6™ˆÇãWP#ß!ŒOÁl²’&&#~R×óÓ”;Ç0[ÛB3f³‰Oã—w+/ùC¿b1LV¬c“¯mVpè˾Žÿù—(‘Ķ,¦äµä8#¦�"�úr°eØOtþ2Äh_Y‚op¾ +áำœâ}u´l©gåf`¬“‚²E”Í´éÓ-""""œmf1å3_9)¸'�–z $ÜdßSNöਠŠþ®…Å=~ø^Þ)N¬ý4Õxéýå,ý× çÁ¡?{ùÅ&ƒ9OV’oÿêëüñdzeË233¹í¶Û.z=]Že^ ¦Ñ&ˆ'dœxÜ„mÔY–cÂ’'nÀà•#Çd2]A�|c°ŒÃ0lÌ$#n6�t±æ4åFƒÙˆ²ý†g¤iÌ7+0[,fˆG‰lùxȳ´äõ„Oc‡’GC$Æ¡Œø–[X~°�Ewf»ò`›º’Ù—,3ý[é€ÏCË™7íx©1㳋¢êUŽØÑE˺zÚÖ·àÉ-Å¥®+""""r�Åúý„Ó]8Ûg@˜‰Ú†)Î佪ƒAÊtŠXdh®ñ²sF5Kï:ñiÉ‘./¿h53ÿ¿UâwaÖùÚk¯åG?úQò”=íÒœ$_Že^ öïØ‰íè'B66€ƒýô±“uíY–»Î×…îOæ'€àÞöÉŽ+h+-ØÇ[ÿ{H®— ¶gcO;Ërß�Œ¨ŸàaRݲÃôh!óöoØS²§ÝàœðÓ¶¾�î·›i|sÈcó'ر›aÏŸ[ñuûhhéd`pÜ79×A¸ÇG_8Jÿ¶FV>»_øÌËÌÈÉÃiŽÑÛÑM4LÏ&/+_ÜÊîDŒÎÊ(©¨¡mgÆX±ZÌ`ƒEaYDDDD.‚à½,ÿM �ÃÀá m[:!ËMfZ„޵Kñ¾ê'áNšÿgWŽ ˆàïðá�øëÅ7±œ'O ËDÚ©{9JÁOË/XX>|8éé餧§3räÈKT.Ã2/óMÜÁvZúb@ŒÞÍíì»ÑCöh0ú»iïbœ¶œƒÜ< �›Û `ô·ÑºÝBÞÍŽ+j;]·¸‰ýÏÖä”hý½Ÿ©·ä&êì½v:±Ó—³å’;¹—×_ `‘·›i?âÆ3íòn×%oaθu>ó?¨¡é­µx¹Ýâ¢{ó¾äÈqù”ÞÓCͦ6ê^ìçö’;põ5Ši.ŠZFtõFWøÀâ çîrò�ÀÞ3,4³�…aV¯ofÅÒ8–ñYÜ_@öh ü°Œ¾Oiz¦šXÂŒýú\ÊþqDDDDD.B°¸·š¹/Ö²|ÁÒÒÉœ1—êû²1s~RF¸ÎKÅ}Qe'ëÎJ*fZ ±ßËMð˜ר�ï XFÉŽÅ2ì?x’g}û{鮚Kýà(S6eÏ/¡@w^–<Ê*¬\]AI¬Ó ¨|, ékeí¶\ÜnæÓ”³VRü¢—Å Ö•IÞ½•̹Â~>לULeA-uO”ò\Ü”¿-£òÖäAxc-Í“]ä9-§-WðPÁçjX°)ŠÉžCá)Çu™û�K C_C²åyXêß´T°A²£ùH`tjH?zôhÇWY�ØË(]½�ü§ê)¿IŸ'¹@�wذYÀp85|JòaYŸ¥†ð9pô¤áX0‘“(0‹ˆˆˆˆˆˆœÂeï’-""""""rQ¯ºd‹ˆˆˆˆˆˆ\x Ì""""""" Ì""""""" Ì""""""" Ì"""""""ÒˆK½ÀH$¢Z‘ób³Ù®ÞÀ|)7NDDDDDDä|©K¶ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆˆ³ˆˆˆˆˆˆÈaÄÕºa‘×—±`Í> –ÖS–u1ÐKóo¼4½Åyÿ ÔÜ�qγè|¶„•ïæ°ðåjòÒt0Šˆˆˆ\ù ¯×Q»©‹þ¿šHŸè¦ø‘rò'™Ï­ÜÁ^š½^š#ùüê×Å8RSÅv´P»¦…žý˜¬.<÷=LÙÌSœgÐöb-{ú‰›2qÿ°‚òÛ�˜�Èöž{i+þ(X]³){´·M{Nä|\µ-Ì–œy,|¼‚üIaæÚ©©þ¯…̘¿Âl\s~ÂÂÊB\ Ë""""_�f¼¯Fñü| ë××R}c�Æj#t.åbÝÔ-m"2q*éCÏÆ�^Ÿoƒ»—óÒúõ¬zÀN÷‹kñ<Åjlò²1^Àò5ëiXQˆ±ÙKs8è£~uS®eý+µTNí£v��˜öœÈy¹ô-̉ íµ^ßé‡ñ¹}7ʆßíÆ³¨�ò´:Êžngâà ,¹Õ{›©ªn‚¿¯aÕ<'ÆÞvÖþS3¾ÝQ°º¸ý�ŸP:ûš¨ZÔŒ­p>éom <ûW,ºf+‡´0‡ºXýòVüÅI¿ÞCécåx&1?-kêiÙ ú¹ûôÙ̯(%oÜi¶Á03õ‡K(sv²ø©ÖFE¶,bÁËqæ<àfϦVüq;¹¥•Ìþ°ï?q»‡òÅåä�ësÇZ˜]¯¥¦{ÈCÿ¦fú>11åTÿØ�.Šˆˆˆ\!,YUÌÆã´àÊËÂöV˜h2ÒβÜp;ÕKqh¤»oèy²�Ü’rœ³20æœ\²MM„ÿ ŒZ.@ç»y òÉ0v…77Q× ÈÑIßäj³RË�SÀĪNº{ðŒÖî9W—¼…9òÆZÖþ¹Û-ó)Ÿë ïÍ^ Lp¦VÖ„Ÿ¦gëhÿÄŃK—P~CˆÖçëðES²ˆÿO�˜gϧ(礈Ùß‚×ÛÊî E<¹b!ÃGÝó-„€àkõ4nOÅr–?QŒ3´•ÆMݧ[— Šnw�:ÈšFB¢ß6˜]:W"ˆoÝr6™MÙ=Y°·� ¿|ét[ß“û@9s¦ÆÙùZ#m¤""""W {6wª‹ôá�ìÁ¸Á�#íÊ�vàœpŠ~Š£¸ge'Ï11‚j§wlYãO."x Ç�÷í2ˆô‡ïcoÇr,¸ÛÉ&ü‘v�Èù¸ä-Ì}ïû1Ò\ÜW@ž ÿî£{á3O¸§›žý`¿«�üiNå¡ùÍV|ïÇð8“_8¦œ¹”Ïu'ïÝø×!_)=�ì4,äßQHöõà¸ÍEëºNºÂ…¸?‹Câ{vpÍÈ¡Â[€åt‘våá™Çho¦wÇDfÝã!Ͼ�Ýô„C8O9]Ö]óÉw›1þº•Öé#ø¡N³ŽT‘+ˆÿ¥ o c¹¾€ÊŸ»�Ôó,w‚./¥¿ö»&›âŸÎýâí{Fœx„iÈ)¢Ùd"�3p8Î #0c2Å9×>ùZæXÌ“kª[‰Íj¾,0içýK”Hb[SòZrœ‘ÓG³§-Ã~Ê{Šþ2Äh_Y‚op¾ +áำœâ}u´l©gåf`¬“‚²E”Íü*¡Ó±�M®‰y”LVl fðyüÌÓY,ɆóÏu�Šˆˆˆ\i\?®ecIÿêð>ÝDuM1δó/w‚ÜJ~[Nä½fjV-ÇôßVP˜94›°¤Å‰0˜À�x“ÉDúhDŒΧãq¶Q_m{?þøc¶lÙ@ff&·ÝvÛE¯ãË±Ì á•W^á³Ï>cĈÜwß}Wígà뺮øÀl±˜!%z°AäãÈñ‘iɾ՟Æ%?ý‘‡0à[Vli`ùÁBÝ™9Ø óØ 8Ðë™ýÅú­tÀ‚ç¡åÌ›v¼Ô˜q€ÙEQõ*ŠGìè¢e]=më[ðä–êa\""""r‚X “î˜ O– Ì6\?˜�óÕzÃÅ8'œ{¹Düø>÷,ÌØn*$ßÑJ—?Faæ�¶é4ŽëB÷'ϧ‚{CØ';°ÇNlG?R]»öÓÄNÖµ_m»¯½öZ~ô£%ŸviN’/Ç2/„¢¢"Ž=ʰaîêÏÂ×uÿœ«K~ó´\˜~ÚÖ·Óýv3�o†��œ`Çn†=nÅ×í£¡¥“�ÁqSÜä\á}á(ýÛYùìZ|á3/3#'§9FoG7ýÑ0=›¼¬|q+»1:_(£¤¢†¶�QcÅj1ƒyÌé»e Ðýv'¾¾~ŒÄ=øÞîÄ@ÿ‰ˆˆˆˆ\ÕÂ]4Ô6âûÐ Bït0MÄab:·ö&Ÿ„}ºr_æó [×ÔÑÔ�lP2ö¶Ó°’9ÙDðwøðGäæYèÜÜNÈ£¿�Öíònv`¾Éƒ;ØNK_ ˆÑ»¹�}7zÈþŠü>|8éé餧§3räÈKT.Ã2/„Ñ£G“žžÎèÑW÷SÖ¾®ûç\]òæŒ[ç3ÿƒšÞZ‹7�KÑ-.º7ïKŽ—Oé==Ôlj£îÅ~n/¹W_¡8�æ¢ø§eDWo¤q…,rî.'ß ì=ÃB3 YXfõúfV,�cŸEÁýd�¶ÀËèû¤‘¦gª‰%ÌØ¯Ï¥ìçû-¼S ´Qûëv¢ƒ¯;êñv˜É­rS¦ÿFDDDD®Z–ÜùTî«cíS ¨;'ÝžÅ�•á ôwÓ¼n7EßË&ïtåÞöRòFH@ս͘'±ü™b®²z]%¿Žc²dâ¾§š¹×‰ ¾—›à1.8 +)~ÑËâk‰�Ê$ïÞJæLÈ£¬"ÀÊÕ”DÁ:½€ÊÇòÎîÞiù‚a©aèkH¶<Ký›– Ö#30�Ò�=ÚñUV öÆ2JWï#ÿ©zÊoÒ‘¯«í/lÄþp)ÙºµOäʼÆ̀éáS’Ëú,5$H>9êèIp9~‡ùk!B÷–6ü§zÙyï9óÃDDDDä›Åˆ`™‘¯°,rQ`>%q«"DDDDäl™äåªD®&—½K¶ˆˆˆˆˆˆÈE ¼_±KöpU¡ˆˆˆˆˆˆÈ)0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ\H—üg¥"‘ˆj]DDDDDD΋Íf»zó¥Ü8‘ó¥.Ù""""""" Ì""""""" Ì""""""" Ì""""""" Ì""""""" Ì""""""" Ì"""""""W„Wë†E^_Æ‚5û(XZOYÖžy3Õ�7H yoüj¼¥8ÓÎ~6�Ï–°òݾ\M^šF‘+‡AðÏkY¹ÆGfÅzªg¦Þ>ìcŃ^º‡œšgTòRµóIÓ^¯£vSý5‘>ÑMñ#åäO2C·—Òg|ÄŽÏ�ìÒXr§ Œ ík¼4mëgÀ”Iî¼JÊouœ4oàp€¶kÙØÓOÜ”‰û‡”ßîÄ D¶7ðÜK[ñGÁêšMÙ£¥¸mÚ£" ÌCXræ±ðñ“.ÂÌ�"8o/§èKò½Qìçz]s~ÂÂY6\ Ë""""W”àæ_°rÇ\™phèˆ�ñkòYR[NöéÎáÍx_�2{ñ �àÿ祬ø§6²þ{!¶fT²þ !¯zi޲|�ÛþV¾ÐFß-e¸-'•Ûäec|Ë×ä“õQ³ÔKó´U�óQ¿º�)Uµ,ÉJ.·f�ïO=X´[E¾�9¤½ÖKã;ý0>—¢ïFÙð»Ýx5PžVGÙÓíL|¸�%·Z`o3UÕMð÷5¬šçÄØÛÎÚjÆ·; V·?ðJgØ`WU‹š±Î'ý­ „gÿŠE×l`å�æPW«_ÞŠÿ£8é×{(}¬Ï æ§eM=-ÛD?·`Ÿ>›ù¥ä�;Í6ÀH˜qÝèÁ�'n²`I}ÛE¶,bÁËqæ<àfϦVüq;¹¥•Ìþ°ï?q»‡òÅåä�ësÇZ˜]¯¥¦{ÈCÿ¦fú>11åTÿØ��½êXûFÁ¿‚%3‹ÂÒJŠnÒמˆˆˆÈÅ`¹q>Ëï²â[ñ:½CGÄb•Θ3Î ‹¢ŠÙxœÉó5W^¶·ÂD`Ž `J·|±Õ8áçÍwLä/ö�a&²è™S�Oè|× oA~²œÝCáÍMÔu(rtÒ7¹€Ú¬Ôrç0±ª“îÃ<£µ_EÎÕ%¿‡9òÆZÖþ¹Û-ó)Ÿë ïÍ^ Lp¦VÖ„Ÿ¦gëhÿÄŃK—P~CˆÖçëðES²ˆÿO�˜gϧ(ç¤>'ý-x½­ìžPÄ“+â1|Ô=ßB¾VOã6ðT,gùÅ8C[iÜÔ�qºu9b0ô¾\Á�KK)ýq5¯“Ó˜FB¢ß6˜]:W"ˆoÝr6™MÙ=Y°·� ¿|qž©é¶¾&÷�rö«Y IDATæL�³óµFÚÀŽf¼¿óc+XÈò§R8n7-ë[Nì.""""ŒÍéÄrªóÓ#‡ˆñÓ´¤‚²ÒR*ÕѾ÷gŽöl<îŒä߇Ctþ±ã7Ž4ˆÅ´²¬²ŒÒÒ2ªŸmÁbö±al«¡úÑ2Ê]F}Gè+"x Çø!‹›�A¤?DxËxûñÖd‹�ÌQaÂiŸŠ|-sßû~Œ4÷�7³ˆù·9ÎnÂ=Ýôìû-…äOsá™ãÁq¤ßû1H]Ÿ3åÌ¥|nyןØòêéd§a!ïŽB²¯wSx› cW']aà³8$"ìÙ bΡÂÛ@í÷¯ø a$ }l:cœwðàß­aºjÙ>^Æ•_„gf!³þˆOdÖ=òîð�e†p8ô¥�<ë®ùä»ó(ºÍ…9&ø¡ 'ðÛô¥ þ—*˜{ÿ#Ô²(+qc,ãÝäÝ4‹yKki¨]Lþ‘j^êÆˆÅ84ÐÇÎÄ\–þ¦ïO¦±{�—–O>�O˜0 9a5›LÄãqÇ9afL¦8‡âÚu"çã’wÉŽÅ 0Y±ŽM¾¶YmœtgÈÐoƒãþ%J$±-‹)y-9ÎH€é£8SóʰŸ2èüeˆÑ¾²ßà|VÂÀqg9ÅûêhÙRÏÊÍÀX'e‹(›ùåOF0Ϭ¤~æñ×n£�ëüô €tlc“kbe“›À‚Ù|þeßXC¦³X’ çŸYETÜÝOýëÍÔu5ƒÙJöªdá?dë^‘KiR>e麧÷šéÞÎÌ/wý¸–�%ü¨ÃûtÕ5Å8gS~ì\ÒIÁ=y´¼ÐK ͆i¸‹Y·;“çxÓ Éw¶ÒµÓ p éKZœ¸ƒ'ƒF<ŽÉd"}´ "Æ çÓñ¸ Û¨¯¶Ùü1[¶l 33“Ûn»í¢WõåXæ…ðÊ+¯ðÙgŸ1bÄî»ï¾«ö£ðuÝ?W|`¶XÌ�=Ø òqäøÈ´dßêOc‡’ŸþHŒC ’÷ˆ|ËŠ- ,?XÈ¢;3{ac›º€c=³¿C¿•Xð<´œyÓŽ—30»(ª^EÑá�]´¬«§m} žÜÒ/}W¤¯ß¿€ëŽ|\0âŸ&Ƙ.V­Ùpß¿„Ú’¡]½tlª§©¥‘öÙ5NÐÿ[""""—Š ø«פTRM€‘0a:é<0è¤;æÂ“e³ ×fã|µ…Þp1öÏý„Ó]8Ûg@˜¯q�1ª“ØÁãAL˜N>'Msà¸.Dpò| ¸7„}²ûwìÄvô!;9ê`?ýGìd]ûÕ¶ûÚk¯åG?úQrñi—¦›ãåXæ…PTTÄÑ£G6lØUýYøºîŸsuÉ»dO»Á…9á§m};Ýo7Óøæ�~ÌìØÍ°çÏ­øº}4´t208nŠ›œë Üã£/¥[#+Ÿ]‹/|æefääá4Çèíè¦?¦g“—•/new"Fç e”TÔж3 c¬X-f0�9õ=+ƒ!ý@7Íê¨ùuÍëðnÞ V7¹®‹Sg‘­+(-©¢®c7i6ìט!m f³þÓ¹¤vµPóËz|@ ÿÿÛBßußÅmb:·öwÑPÛ˜*gz§‹€i"+ÿèeùoZiÛÒ Yn2Ggáɉ²uSg²gåÎÚSÉžf"ø;|ø#ró,tnn'd€ÑßFëv y7;0ßäÁl§¥/ÄèÝÜξ=dÅ~ >œôôtÒÓÓ9rä¥ *—a™ÂèÑ£IOOgôè«û)k_×ýs®.y sÆ­ó™ÿA Mo­ÅÈ¥èÝ›÷%GŽË§ôžj6µQ÷b?·—Ü�«¯‰PHsQüÓ2¢«7Ò¸Â9w—“ïöža¡™…,¬³z}3+–ƱŒÏ¢àþ²G[à‡eô}ÒHÓ3ÕÄfì×çRö�s8Ý�Õ–ï•QùaœÆ?¼NSX§x(ûÇäãþ#¡Îl³æ3G-Íë~Aû°\ç¢à¡™=Nÿg‰ˆˆˆ\xAšŸøM{RÏ’é›Ë\¯™ÜÊ—¨žYFå/kÿ˜:Ô<ü/©sÇh7ÍëvSô½lòrçS¹¯ŽµO- îHœt{wòŸª§ü&íùºŠÑþÂFì—žþ7šEäÒÞaÃfÀáÔð)ɇe}–$Ÿuô¤¸¿Ãüµ¡{KþS=‹l„ƒ¼¿÷è Õ""""r"#‚eF¾Â²ÈUD�ù”l¸ï*Æ­Š‘³ev�—«j¹š\ö.Ù"""""""%ð~Å.ÙÃU…"""""""_¤À,""""""¢À,""""""¢À,""""""¢À,""""""r!]òŸ•ŠD"ªu9/6›íê Ì—rãDDDDDDDΗºd‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ(0‹ˆˆˆˆˆˆ\F\­y} Öì£`i=eYc½4ÿÆKÓ{Qœ÷¿@ÍÝÄÞXFéêÞŠZ¾¿ˆ†GÜg?ï½ÍTU7aúá*jæ:t”Šˆˆˆ\R!Z=Bã®ãùV<è¥;1d3*y©Úƒ9·n5M~¢‰tì9…”?\ˆËÆ®¼umøÀlÊ ÷Þ‡)�™qŠùh{±–�=ýÄM™¸XAùíNÌ@d{Ͻ´¬®Ù”=ZŠÛ¦½*¢À<4¤æÌcáã12&]„™h§æ‰µøGY1Ÿ4êPìSH³ã)-&×jJ~9f8Ïmþ×åò`e&L¶ë¹ÔÄŽ8)úÿÙ»ÿ訪CïÿoHf2�fÄL ¬¬Ô#%Á}J´D+áhªÄ%ñ"i5Üzoáv!� ú#±_Rk¢Á%´5ö)¡—@5zú• &“/&–;A I!ƒtRÈ„ñL&|ÿ˜"ò#P! Ÿ×Zg…É9gï}Î>ò™½ÏÉO‹™õ‰_ãÔþb[‡¥3r`ÛùËè œÃÒS!»w£” _‹Ÿ[ŠËÔJuÉÊÿ+ƒ•Aå/«1?XLÅ�6 _%KžYMmúbr†|¼ ßúRÖ…§²|U)u?]JÕ˜•ÌZGÅ Íܲ Œ¥éàýíÓ¿TGé²±ªgE®ƒÀi¥¶¬”µï´Á°LfÜÑÁ«ØGöâ5Ì�+§à™ZF<±†¥÷XO�´òÍbV>äÄ8PËêÿSEݾHr1å±§Èoƒ½•,X\…-o o¿ŠòÏY<øUJz�0·7¬á…_oÆ{$L¨lòŸœOöp è¥zUÕ;|tôX±§MfNa>YC/p †™‘ßZJ�³ž%?Þøñ÷Æ]@ é3Ɉ cb�…jƒºŸ>J©/›‚©�T¿ÚHGR:sžš�±¾”Wßë iÜ?Ç‘V—ža¶ŸÞoþtƒ�¿kÀO*Ù�-dþ¤”Ëk¿ˆˆˆˆ\@'Á� û9¦×Ì¥äÜì¥øOÌÁ �–ÏU­÷Q”–‰k€ƒÌ±©T}Б0þ£#ÈH‹›oNÇeiÀè˜#>êwd=žCаg“7¡’ò3õ4)—²ôhã]Ss± ωl²©gE.ÕU¿‡9ð§Õ¬~« ÛÄ9ÌŸé yK&ˆ»XÐöRùl9µw1÷é¥Ì¿­��Ï•S¢¹xÿ\�yòfŒ;kÎI[5¥¥Ù7|?Z±�l£ŽòçªiZ_¯`ívÈ.\ÎòŸ…³}3k×{0.Ô–áÙ̘ââ\3[Œ ‘ƒT-y”üÇòy´`U-AÀŒÉtÔ³¥ÝÍœ‡ÒI8ìaíO+h_Àœ;’ð7T²q×'ß”Oí·±ÅŜ‡Hè£öåõ4E.³ý""""ra‚Áê_ZDácùäoÛÚcë¬8œ}˜ßê$òR¹´�‚ü| —S{ úšmL6nglHåh5Û:Hïó2nmdz½¶xðL'}ØÙ…·Óz4G¯ïÛ‡§hkÇØ�u˜ýÌh²ÕNªÅ�ÿˆzUär\õææ÷¼q.rÎ%ËŽ¿Õáyµóâ;î÷Ðxìä‘3Æ –lª¶l¤î½ Ù±7Ó¸™ÌŸéŽÞ»ñA¯·”ÆzZ +9÷å‘1 ÷ºØøR= þ<ÜÝaˆt²¯×øq–æb�»üã30“”މ3™1ÄËÆßÕQù|5î_ÌŠm1’»¦ç�eµÒ𪇺ä,¦ßã&%9ƒuïÔâ?€›ÎUòHrÎ�Þ2® Ï?mÇÀö)·_DDDD¬¸&¸qŒÏeê"ÁÆ –=WJµsyÃûX„Å�{œ×”<ß Þß/gų•ŒüE>Î8€Vªþý‡TîÇÝóùѤhŸœŸKÃ3?äÑß› ËJfár2Î6„#&L½î 4›L„ÃaºN„ùØ Ì˜La:ÃêU‘ë"0ƒ˜’HŠM+±%Ù€ÎóÆÏÓþÑA ÁMK˜ýzt�Ó‘Äî-±¥Ø?qO1@×?º€ µ%³©;Un$ ÿQpÜ?ŸYË©ÞTAÉ`ˆ“Ü‚ÅÜyyOFȘ»’й§^MÆÚÒ@ÉŽö‰~Ò—;v+f ˜‡$E§ê JÀEÎSðéýÀjµAϧß~‘Ͻ8¹ßu�‰œãg1õÖÇÙú~�¼á}¼øæ ž8óÒ5=÷›Uxƒ3ÀÁŒŸ½ÂŒc­Ô­YÁ²UVVæÃêgëHýÞó,uÛ0Új)Y¾‚ª›‹™Ñû¹>ž‡~ø3ûcr½öÏ5˜­V3„;è8Ø ða ×›StnõGÁÎèO Hg„h üB¶8°~}!‹ïO=5 ó�8Úœž™ý _H¬dÏ[ÎCcÎl•80»˜±h%3Nðín ú¥ j^©&;3×%�Ôñ½U‹'èdòýØŽD�Ë|¥F}‡|šíN´ã;ö1)±<Ûê©knÈ@Ð×Hݶz¼GMtò¥Š_¨¢ju k ¬·e’~EKx™í‘ó 5S¹ü'TîˆìvUS{À…ûb¿Ð}Ôon¢`o5Å?­ î�ñþ±šæä;pÛÍwUQör ­'ˆþ‰ª­Í)RŽ7ãÙ!4Ñ| ‰ÔT+À»µoÀAf–•ú µ´`´Õ°q‡•¬ Ì·gãn­¥º9iÚPËÁ±ÙŸœÖ}©¡aà@HHHà†n¸:A¥êü4 4ˆ„„ úl?eízíŸKuÕG˜Sî™Ãœ÷‹©|{5¥¾LfLtáÙp0ºrhùÓ)^_Cù‹mL™}®æJÚÃ@œ‹Y?( ã…u¬]QVã¦Í'Ç ¸H¥©y,,ôóÂ+U¬x:ŒuX:¹�ä’1È ß* ùïk©üÙ"‚3öQ™üëT.ø×�}5”ý¢–ŽS¯·VPºÕLæ‚—YôÈ"æ+¨ÞZIeOŽñ³˜;/‡+3AÚJÖå´_DDDDÎÏ–ÃüÂV~ùòf¯ cêbráSä5,{²‚¦0�†'fRaÊ  t)¹!U/ícÆÝ¤Œ/ h)«—J^(dv$¥åRôd–þ¤”Èe[z¿†èÈó€Ø×¸X°ŽÌÀ À Ø’pòäÉ­ÿL‚ZFþ ÉùqóoW‡ˆˆˆˆÈõ*Híóë°?‘ÿ‰¿½,"ýx ˜t'bËGD–Õ["@pò¬è�¿Ã|]àÙTƒ÷\Ï"‹w�õÍìØÓ EDDDDbŒÖñ9 Ë"Ÿ! ÌçdÃýÀ,Ü:""""ÒWfY™: "Ÿ%ý>%[DDDDDDäŠÞrJö@�B‘OR`Q`Q`Q`ù4]õ?+tÖEDDDDD䲨l¶Ïn`¾š'""""""r¹4%[DDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDD�YDDDDDDäšÿ™<ªU,XT ß,få·:©(\F�£€U?ÎÅö8.Ó·VR<Ó¡«WDDD䳿„�šËXרFØ”Šû[…ÌŸâÄ| Ûv¬á—/oÆÛI®É|/·M§¶?õµOλ]_¯‹~Ä»¾”òךñ‡“¸eÒ,ŠË&%î¶;TGùs•Ô耡éä=QÄŒ4k¿Õg„9n$9�/dáÌq\÷ïÉ™Ì-ZÈœ‰v½ëˆˆˆˆ|ùÖ—².œËòU¯°fEƆRª|—°Ý±:*^hæ–'Êxå7e�l¦ì¥:‚:µý§¯}r�íúz]ô'c×ZJ7Ûxèg¯ðÊ ‹É:¼†Þh¿„íÚ©~q þñ‹Xõ›WXùˆ�ºç*i2ú÷¸®z`lZÌÌ )_·†e…³™=»€Å/{ÄÖ·7¬aÙ÷ò™ýàl —Sw¨÷~‹X³¹šßË?k?ߦæÏfvÁbÊ·ûÏTÙGíªJÖ5èK9N•³ˆò×Ö°øÁ™,øõÅ®FߦbœÚoC¯ý"õÏžÉì•õ±ö4Q1o&3Ÿ®‰Õ iÝ <6›™³ X´²ß â¡ü±™Ì.®¢ú™f?SCàH«KKXûNôøŒµ”ÿg!³gÏfvá2Öì8u4½º‚³™ùàlò¿¿‚ª]z›¹¦E|Ôï4Èz ‡3`Ï&o‚ACƒ¯ÏÛïÕÓü¥\f¦[+®©¹Œx¿Ï �Þ~ ’}ì“ón×ÙÇ뢟yßÙ‰õM%k(0ÈAî×38¸½ñtλèvGi<�Á”û¢#ç¶ñSÉ\ÏÖÝŸ³ÀŒéˆø©oNdú,gîв©ŒWwÐVMiéFö ŸÁ�V,$Û¨£ü¹jÚOïׯæ?ùÉ|l>SG†iy}-5>àÀFÊ~í¡#u ó óHÚ½“ÖÈ…ê¿@9¯xè6™¹�ç‘°½ŽýÀt‘c:°‘²_7à?µ_ãfZú²x«œ’W›IÈYHñ¿ßGbc¥ë|€ “ Œ]¯Ó˜œÇœûÒùØd„ˆ—ÊgË©ý»‹¹O/eþmíl|®œº°»ŠÒ?x±å.dù3 ɺ�êWªñEô†%"""ríj§õh Žag¾cžB ­½ÏÛùû±³Ÿù½Ñj'ÕâÇDg·¿ôµOο]_¯‹þ¤íHûÏÌ„5w`ó·â�ôq»Ã­´ßhÇ1èôQ’jã?øœæèiÁ}ßT2nv’sv:ð6·ÑÞXO‹a%ë¾<2F¹É»×…±·ž†^ÆéÌ!Ç�ÅŒ{]˜#~Zšwâ‹X÷À,²ÝYÌš™EÒEZpîršñEÌŒ›6‡œÌlògf‘Ї£ùä~Ù­ÿÔÓüN3As:÷ý‹çíS™2ÖLëŽú3á6)›9�ç‘;Þññ{ö{h< ö‰yäŒq‘=5G¨™º÷‚"aÚ}^Z�Ù˜ôý ÖülÎ8½a‰ˆˆˆ\³Œ0ሠS¯_úÌ&áp£�Ûu�ó±˜1™Ât†uzûK¸�}rÞíNôñºèW��ÙÜ«‘&&#|ÖÔó lw"Œa¶ös4c6›ø(Ü¿GÙOýJÂ:$v’†Ø°ÆA «“.º€ µ%³©‹¾@$ ÿÑSû%`‹íg¶ÆNf»º+6Û™2mqpþ÷…ó•Ó $�)Çv±rb±·+pYû�A ÓÃCùã³)ˆ×J;éÑMnJ!é\A÷"Ü´„Ù¯GË2"`:€»gP8­�Š7ª(o¨sß(báw2°ê=KDDDäÚd6a� 6àÔ/mF8ŒÉdúøÀɶKd‚€ñ±ß7Ãa6Ë?×´?ü�M›6�ššÊ½÷Þ{ÅOGÔy%˜úØ'çÝ.±�×E¿JÄz†§Z6›ÎÊØn˜�`¯ e`an0%~s�£±“ô¡Ÿ@IøB`%{Þrsæ³…Ä¡`8iÖ„ @ +3ˆ–y‰­²&˜€à%—Ó§úƒÑOW¬F�à™OMl‰f0§3ç§sgêõý¸VšÎ7*ü…$lq`ýúBߟzú“ó�Ü�,¥lv�ö½Ml]_AeõZj'“7\ÿ‰ˆˆˆ\“â8’Ûi= §žVÛz û—}ÞÎþE;ÁÝmȈ®:ÖF[ÈNú�ÿ\Ón¼ñF¾ýíoG«�»:Óû£Î+¡¯}rÞí’Зë¢_Y±³âÿ›ˆ¶ËhmÅoÏÀ×Çí¾)^ZO›–í§í�•Ô)ŸË§d4n\KíŽz*ÿPOvÒoO%e\Ns�¦­Ú:ü4®/¥äÅÍì»È½·¶´ qA7UR·£Ž5ëê麌V�.gÃZjêX³®ŽŽKÙïtý½÷KÁ‘ Æî×©Þæ¡ö7¯ÓÜtG/˜ô é˜ /[ê|tmacÅO(Ýä½øèô-nÆ%ƒ¿±ŽfmÛ×Ròìjêüؼ‚üÙ (ߺ�®8öÁfˆKÄlFDDDD®Y2³¬Ôo¨¥Ý£­†�;¬dMp¼[ëð.¼�ùölÜ­µT7� Mj986›ŒAÿdh8�„„¸á†®NPé‡:¯„ õ‰Ñæ¡ÖÓŠqÁí.t]\;\Ýÿß�ÔNøØøš—‘3±í»j©÷/¼�-“Ì/5ñÆë> °­ŠÚ�›ì1ý{\ý˜“ÈgbëK¿dãV2¾9ŸYéfHÍcaa.#ÚªXñôO¨lIÄý@îÅÀ�yÌÿVIÞ |Õë0!›[âÀ¸Ô{5N•ÓVÃê—^'<6»o÷ýž®#å«ÎÚ/ÎIî#¹Œ±ìgã‹4 Íaò�°MžÏÂoºèªý%Kž)ÇóQ:÷=�uñ©Óq.fý €lkkW,¡dCöìä8Á6is¾š@ÓK?aÑâeTìN!wÞ\&ÕC""""×tdÎ+b–µ†%�Ïæñÿ]‹íÁ"¦Þ DZ©ûu%umÙΚEA¡›ý/2ûáBÊÛÜ=–¥ÛòúÓú$ؼ‘ÕlŽÞç{�íÎÛß×Òé³(ÊíäÕÏgöÅìtðÄ=Ñ!qߟVSµ3p‘íläÎ+ ÕSÌãÏfÑ:ƒÜ›ƒ«ŸýÄ–Þ¯O鱯qD§nÇ�h~0(¶$œÊÖÕPòtÖ¡cÈ™WÈŒQ6Ì£fáÖùܸêS²EDDDDDD®Jàý'§dÔ)ù$ffffffffffffffQ`Q`Q`Q`¹âû­æ£MÔ¬ßHí./mb`ÅþEîÿ5•÷e`‹û žíÝþ¸œƒÅ+™uóÇW·®_Ä‚W|0l*ËKóq]æ9þiù/4Á-³XY2G_vj«bÑ÷+ñ‘ÁüUKÉò)–-"""""rê—fÃWͲE˨xÃïpLVÌñï÷Póò2ý´†Öȧ_oð­Ì~pkööÓÙ“M¦ˆ´âil?ke;5Yj IDAT�ûø¬Ë˦ä1dŽw“™žŠU׸ˆˆˆˆˆÈe¹ú#ÌUÏ­¥é˜‡e3çß Èe‚øÞZKÙªZ|�kYý§q,�’òiÆeê·6c`￳ç"k‚��›ü´56˜–‹íÔº@3�û€8;™wºþ©jÌ·ÏbÑíº¸EDDDDD®¯ÀÜ\Cí�h0œòÔ|rG™c+¬8ïžÏÂ0¬õÙq;Í@€êÿ|œµÿc}žÄôŽRòZGОËòç ¢£±G=T½¼ŽÚ÷÷ã˜;peæ2gv.ÎH-Ë/§)ÐÊÆŸÉÆ1sx~E)@°¥†µ¿«a§×OG$%»¸cÊC̹ß¡�4Q>oµÇLýñ|RÞ(§rg+á'Ù�.dþmmTþª‚šÝpc:yO1#ýÜc»®;3±¿¾‹ϱÜÓSŸƒï5à5€a™d�Š~¯}G%k_GóA?A¬8Ò²™š?‡œ›Í€A]ñ£”6Œyd)9¾rV¿c0ùÇÌ:|ŽiÓA5¿^KÍ/­Ç ÌINÆÝ;‡‚™gB{Løp=kJײywáÁ©d~«�ù÷81Ÿ÷C�ž kY·ÙÃþ#aLI©¸ï/ `šëÌ÷…úGÃà"""""r ºêS²[÷ì£ 9“¬QŸŒ`)÷ÌgÑã3Ècë{¡•ËWPùÎ~Ì£²É½/—L{'MoTðôsµL2ïsc�‹óI¹L�ä$0š×°äé jwùIte’3Ñ…ùhµ/-cÉË^ ̘ÌÑ`Øørµa'®d3F‡�ÚU¥¬x¶�Å…ëFöPùÂ:¼ç›R>*‹ÌdÀhÆó^0öMƒ¦Æh]öÌètlc÷–WÑpF~m*¹·Yñ瑱|ùj<'bmŠõ^GÝZÖ6BꨑØ�«Òµ+Ÿ¦âOM†f2õ�lRÃ>^ý Å›>95¼æùµx-.ÒoI€£>êV³¶Ù8Ïizy +^©c?.¦|s éÖ6ê~½ŒåZûÖ?ú9‘kÐUabñ覔X€ýtxii¬™<ôýùd ŒÒ_OÇMvŒA.r™LÓ›üØHŸZ@þ¨h8¬~å Z °Où?<3œPJQq­o¾Êæ©KÉM:Ž”-ÈÂz¨šÅ ÖÒlaŸc1eO¸1¨dÁ¢*Z�4Ó|\©çhkœ‹»2ílÜà§yGƤ,ÌF3�ÍÁ�MÇö·u៉әKÑÌ ÌÁ‘æ•Òpt' -ྈ�?ÿóQLÎÐX+}ggZ~K:™™6ܳ ÈIŸÉÇ¢u­´ìh$ð@¯©á‘îýb£ùíT/þ7Ö¶ø©ûs3sÒÝŸ<ž£u¬¯õÇf ,& po Ëž¬ iãF<÷ÍÇ}ü"ý£ŸCQ`¾BÛ±:ê(_ÔAøt\i錛>‹”AØ/ØLó~H"cBÆé)ÇÖq™¸,u4„¼x?0Èj3®qÑiÆv#¬ÐrÌŒklztßaNRã ÕÒ<µÎ;3qlÚHks#^#‹Œ½š:€a™ÜuKtÇ=óYtÏ© ÆÀ$lC€PFèãå™ÇN&{èŽÓêfÖz…݈A’Í´Bg� œ Ìq·�uÇ©{ÇSp�µ³¶¥•`«?îOLßæot*¹Å�cp€ÀQ ’Ê-ÉÐtØ‹÷ ¸G\fÿˆˆˆˆˆˆ|ž³m¨ è+þŸüóQN�œö™Ù̡͜ó…*Úš¨{½‰º×‹�ÌGQ4å<÷߃tF€¸D’{}?ÎJ¢A0þØ.&Ë©nM˜Lѯ‰–XéqfÌ&À€ð…žò}Ë]dÛHk[ž½‰žfü€=ó.œ§ŽýP=k*^eóîV‚g Áž="›0Äzþû‹£ŠwC¯5à;z±ñÜD¬½þ¤”51!ú��qÎc2B±OBÊŸ|ü¬µ~ü£.³DDDDDD>O�Ù‘æÂŽ¿ßCÝnWúÇ£Rë†Å,Ù|Yÿ2‡¹÷$�Ra£wÎ >«\kZ‹Jó¶yiòzñîÜÌæ†VÖ¬b󸽦U÷ÞÉJb`tÒÑÙ;é EðuÈx"Uœ“¬ ªþÐJã.‰ïµBœƒÌ;�§ÎUÏ–°q?$�ŸÃÂ\Øâ|T?[ACÇ9Êx‘¸ÜPÁŠ_×´8É-œE¶ÃJðÝ VüÁwŽ­; áÔÓº::»¢ÿ°XI8Çf«`X2˜ñäÔOü9,Û¨>öÏPý0ŠˆˆˆˆÈµåêÿæ´\rǘ?5e¥Ôì>õȧ ­o•S²®…àa/ƒ&̘±&Fào ѱ̞w¼e=ä¡fÝÖüɇ5ÕEÖä<ò‘{3é ýh¯m#�„Oœ Ìé¤ßb:hÚÞtºÌàÎ:šC€ÅEú¨+sœwf∃ÖíUÔäcÓ±1|ìû€•Œ{òÈJwá$Ðuê.í®_ÿ¾è¹»9›©“ݸÆ8àï±óÞsVY‘ý4îh?Ü›Þó�ätrÎ?òåt1Ò „;a¸÷x7îñN¬¡ V,—Ø?""""""׈~¸‡ÙAÞ“sñ>SNƒ¿�Š7°ÖbÅÔ<=õ8iÜ p0fœ óŽ&‚ <ýl3ŽãMøNØIÂGÇé)Â~þk#Má:¼»³p%™n¦î`wã`Ã68ÚÁæ—V—ÍôG²Éyp2›VCë%üП…Ëê§i{AÌŒù—YdÛˆNÿ´ÝœEfj­|øÇ„¬3Ó±ãØoñü¾”5»Íìoðˆ$ØÛAókk©±Í"©�UÙvÌ´bì­aõê ©ŽÚqÄuÐz¸�Êß:™•}jë¾¶Œe-$}¸“†âäÜ›qî‡f3ýkÕ4½á£jùbüãGB›‡†f?Œ™ÅÏǹúØ?""""""×–�ýRëðý´˜ùÓ23, z‚±’t‹›ÜÇ–Rü¹8bá1åž'˜?e vK�¶Æ�´'Ï h®;:•:ŽŽ Ïeá’9ä¤%âo¨aã†�lÞ$uâ þxƒ€8SÌÆaã°—�û„ëí,ÿñrÒmtvû>Œ/ºÉ-\Î’™WðÞÚ8'Ù§rf–ócëf~w™7[ ïo`ó?·ÌþO?‘GF’™à¾zÙÃ!¸»ŠÒUµì 0pÙ�>Eþx`ÐúÖjÊ~·¿aÆv{…¹8{—i¥ú™Ô�]ÄÓÓ�¶VPúj==fÌv7�e�Žp/óÝAN¤™f€ö�“‹ŠÈ�† Š_ª§ÃbÃ1Á�I=%""""rM¹ê#Ì�w_c‹ñæ.(â»O ûàºz±eýBãæ°`Aß�>œ=ß`w(ÚÊî[é¼us æ1oJï½¾…ƒ=нûMþxpÓŸZÈÂßaô‘7ÙÜâ1qˆƒÝw1oáƒdçÜÏ„›lŒ�þ]òn³`Žÿ5Àðoä3÷_§3úÈf^kÁ´Gæ2oÚh¿ÓÈÁíú#UÞdî/\HÑSs¹³{3ëß>û¬á¾® ̟˼G'ÿî6þÒecÂ7îb„%�o<¡°|Mä忬�.§ìÅ2Šnm¢âwõ´R½ºXNEY¥%°ùåj¼àP e¯Èyº‚Š—“\GÙ[{•ijª„ÍÉ,šîÄ|¨šÒ—öqÇÊ(++cá„6*^¬%˜BÇ®}ØYÊÒ?g~š—ª7¼`xxõ%# K)+-fnŠ�æ.õ•ˆˆˆˆÈç80wÓzàÉcÒ° Ì#ÈpÙ¢«>ÜÞN'ÆÙˆâ¿8ŽŒ!>þr0º:Þâ m”˨1Œâà1ˆ¿íALfD<?œ©:��Õ7çmN,çiM|ê—�ÄÛHϰ[£ÛÆÛ’H4Ž¢_‹�䌉8-ÀÀDÒÆ:9¾g€�6F§�ˆÓ'Ú°ÅwÒ©Ðsí3‰œT3`%cb&Ÿ—¶ˆƒY+V±ðîèõgã"õ¸Ÿx¯‘6g6Ùv ÎFÎ÷ËXþMÇéâZ_/¡âH. Ÿpc‚ï5²T¹N3Ž»'1òƒšƒ±nÍ"s(€Çð$‚hóâ�d�™n å«Ù¸ô>‘kÊUž’â„Ë Óß±X,ÄB�„B»©úeÉ™Fuw3¢+VÀ2Ë©@1ÐBüÀ!èÜö׷°ûH7ÄC¨#„å+g¶³X.tôñ;ñ{}ŒÐ ø'B!½½š’wcëzºéN´ê‰îoîU‚Ï5)aˆ 멉 $†Âtbкu-kßðF?üˆi‹D']ƒ�`µrºkÍæ3ÿ>º™ŠWØÆOÁýV ؉ñþZŠæUž®37‚ôX`6YLgö?u�ƒ–„^uX±ZÔW"""""ŸãÀla�B¡3÷-wvvF§d'$bIKÞ‚<œgÏ¿F(RÝ!BÝ,ænöü÷-Ó˜W8 ÝìùÃJ6ЧgP‚…áw?Á܉‰_ÕãÓÕs�è 1 N;»è´$‘x¸†²ß´‘õÌròRÍà¯fñ"/Vk"ác‚D?«!ØNkȆÀ’NÁ3¹xZNÅ6EwÚ° IÄ:.�²EÙgpLà|�dÅîÀ8õ: R_‰ˆˆˆˆ\K®ò˜h<ÃÉiy�@処=±éÓ7Žf´Å‡çýÎX’ÞÃæªÍ쉅ˆî��÷öD×uzÿ¡ÄŒÒM("ñÆ›°Ý~žƒ!BÝÝç¬;ž0'Nt_R{�·: ¼¿�C@7GÞ­¦úÝ#ÿ¢;Ä =%ûÚÐRG�À i{Œq‘ Ðe²ã¸Ñ iúïzÚÂaÂ!°�Ç-¾­Ô¶ PW¶„Òÿn‹–eµã°g0ç 7¾5ÔÀzÛ8F~PÇæèEB°¥šòÕõçË_tâŒ4ÑÐ$ú�±­x{ÔU"""""×’«þ”ìä¯ÜÏ�û×óbÉ» ¾ÑÁ¸Ñáºç®éÙP½š’ÿÃÀÁŒÈÌã®Ø4Õø$¶}U¼X{„ãÝ6Æ~c#ZHžp'Û7¬¦´q0‰©ãøzÎXÖÿq=Õ_¼ç¬šm8]ƒÙö‡•¬¹;Ÿ}l¯åöo0Í_Åú_•p0 ý2_Ÿ}zöy%8=b oþêE:šÇd‡.´~�„Ûœø_ZÄ‚:ßAÁݘ“R™šöÊ’8ÔAæÌYÌØSÊšâj?Î¥pv¥ÿûqªB&lcgR4Í ÛrºXsÚæOø!Åu¤/Êã‰Gü”./¤º ËHîË/ÂÆ…F˜³xèÑFJž+¤ÀbcäÄlÜI; GÔe"""""׊±¥÷kˆŽ<ˆ}�‹ëx¢³ZoÅ–„“'On½â­üÛ›<¿¦~�áºOXDDDDDDúx ˜t'bËG€tÇ–Ñ'X�fffffffffffff‘ϘöM‹)xÞse ß»†EkðE.c߈‡ò‚ÅTûÕG""""" Ì"""""""×°ø«_e'{j«xs׺š°|)›éSÝ$ÜCõ/¶`ùêpŽ´¢ó�Äß–Çwr’Øþ^äÐWòàmÑæv¿ÿ;JÞμ‚»°©åBNø¨.-¥Úg`KÎ ëKgV¾ZÊ_¨¢é8˜-²žÏ,·Aõââ}`‹î4G·ÛVJá&'ËWä‘ò±Âƒ4ý¶„ò?·cNJ!}|�]i§þ×/ðêöv ÀêÌ¡`Þ \CÀØ[Ciù:¼`–Ŭï�mï]®�÷·K(=˜ËÒE9Øœ«�¶èˆvy™Ã½ÔŸÌò§ÏnŸˆˆˆˆˆü3®úshשò&sáBŠžšË�Ý›Yÿö‘Xv?„¯+ƒóç2ïщĿ»�¿tÙHK³qðöÐ�ËìùŸƒ$§e(,ËEµ×®¢*”Ëò²2Š—L¦s÷~ÂUÏU¼w)ee¬ü®Ï‹k©¦àoÇ»³#^›w6aÏÌüdÝ»ŽÕN`Vq+K’~Ô‹?6;ðçÕ”ïN§èÙ2ÊÊŠ™•PKéïš0">*YMâC¥TT”±Ø½�ŠŠ½Š ¼UJé{é=™C çk'0Ð ‡›èÈ\J…²ˆˆˆˆÈõ˜»ñµøHΘˆÓ L$m¬“ã{öDÃ@£ÓFD‡½mØâ;éì‚ä´4ÿu¾n ÛÇ_þ Ñ"fв{?©ã3I‰¹¸ë;&€Ã<Ç2Ƚ+3Í£&“=´‰F/82³°57ÐlF3 Ív²&|2޼^ü·f‘i°’5)ƒ„¸h½ÞF/©Ù“pŠ®sOÊÀØÝLÛÍ¡ &�³fÓž¦laîéÂ-•¯‡Y?ÌÇe½p;£ßp‘9A? """""WÂUž’Ý͉PˆCo¯¦äÝØ·zºéN´ê‰6'ÞÜ«i§âüMi¤%¾ÂžƒÝ8{vÓ:$�É7ªóäb‚ƒ�˜pú¢"!1:€c‚Ç({²àÌæá0®ãApg’•´O ¤GhJÎbúphß´Œþ~#¿õsæ†Â˜¬VN—ž˜@b¬ÞŽ`˜Ä„Ä3e'&� ÒÙ$hJ8³Oœë ôì§ú¥ý„O&)!¶þBí´ V¬qêi‘Ï@`ŽgP‚…áw?Á܉‰_Õã»À~ɤ¹,¼Òr�ÑÝ>Ó²5[úÀŠÕ�!°Ðu¬#ºjˆ kR6óËæ“÷Éý2¿beÅŽ&2ÃM$eM�NwþúBV~5:QÛlµÑù¦‰p(ˆÑè “$ÀJÒ`�Ç;O×Ë?ºè´$‘˜`Æj%xªªH�ööaÀÀ$² “¾e«_iâçs30_¨�>õ°ˆˆˆˆÈ•t•§dÇã¼ÕIàýí2º9òn5Õï¹èžÉiiX|ÛØ¾7‘´Û—¥/Ì8ǤҶ½�öpÌC펎è=ÌÃܸ­MlnˆÝ=ðPù\%žX’uLÈÂÚ¼‘�»RÎLÇ6[±ÙlØl6¬fHã"É[OCˆ¨ÛÚDW$Z¯kœ‹¶m[ñê·4aëÆys:éÖ&j·ƒÖ×KX²ª! “°;d=6çÎrÖî ^´�"""""r%ìUf¹ýLóW±þW%œLC¿Ì×§%�ÞÑžÆèžÍlIø:÷'©ã¤oS ÈÛ]ÊçUc³g0y¼+:%;ÎÉŒ'gPþ ~`Åõ@!3bÂÜœI•T%Ía®ý<…�É£`R1e?( 2iîIY¤~`»{.ó¼@é‚ÚèS²Çä²èAÄÁ¬ïæQúÂ"òׄ1%g‘ÿT.6zýmè!Yä7°hÕZB=À�1LžžGÆ�xg5kÿæ$£ç ¾#t~á+ÜïáÙáãã�ÜôÕÙ<ø•d “=µU¼¹ëÝMX¾”Íô©n’ãu]ËÚ__Î’Ö™T|×M ¡‚â—êé°ØpLpc:½•AëæÕ”­o¢Àê"ï‰ùä:ÍŸ,oÓb–}p94³ó@;Cs)¸'Hí›M´ê"uÚBMð²â[q/%wht?ïË…”FŠ(»ßOùs•4u€13òks)z(ë Õ¥¥Tû lÉdßê§êøTÖªEDDDDúKÿÝÃܽ‡Í¯ï!yÚ÷(úÞ<îO:‚/[ç߯úÚ/¤hAsî±å¿¶pè¢Ùÿ¾® ̟˼G'ÿî6þÒóðfmsRôýÜŸâã�oí¡0Çÿ`ø7ò™û¯Ó}d3¯µŒ`Ú#s™7m4‡ßiä`„vý‘*o2÷.¤è©¹ÜÙ½™õoÑt½0<¼ú’‡‘…¥”•37ÅGsWl]ÛFJ_ñs×’2Ê~UÆò)AÖ=_Eë9Š1„ŽÝ­¤>¶”ÅE¸Û^¥¢ÑEá�W°²0ßkµø†d‘=f[Þi�îñQßî;]4mXÃÁñ‹)++£âsqµyh:íµ«¨ å²¼¬ŒâM&ðžWOùÜær'iÎèôl[ÆXFÄZÓéÛÑT7coäôºá÷á;v±£±1:mDt¤:ц-¾“Î.`Ⱦóý|î¼1¬�7ßD÷±§òy|ê—�ÄÛHϰ[�X€x[‰ÆqBtãkñ‘œ1§˜HÚX'Ç÷ì! kèúÐæÅÉ 3=:=;å«Ù¸b×[`W3m·N&{xìz›˜ÍÈÃM4=wQ¦1™¸‡qv7špŽMÇ `·“ì €÷¤tÚ¶5а¿žÆH&Ùc qp"þ÷ê¨ßÀ°f0ãùd 1hÙ½ŸÔñ™¤ÄVwÝaï5."""""ý¡ÿ&ŸqÂláôÝÌñ,±°'ºº‰O8k]|ˆPráÉ7÷:´SôØóÖklÛÛA÷Àxè €mt¯Ýâ?vBâöú8¡ ›¡‡Þ^MÉ»§Êì¦;Ñ�â­‘Àk_0ˆaIàôåa¶b�]`Á®NLV+Ö^ël–0�`�º—‹¨x/ qvr—“Ë `6Óû23›c¯âÎLá¶ŽË&ý¥*¶¶åá~·cü|\qÀC?¢pÃz6þr¿+,Ôøöç;�}‡fèÞõ[~úÿ]Úi”`aøÝO0wb¢®šëÑ +æpÆé‹"@0vñY'þ H¢¡Ù%â´ZÉ|¢˜tÀŒu½}¬Ïê&{lUïÔcì€ÌuÅBu îéóqOŸ�ÑVKéòrÖ¥­d¤:»ŒS- ã˜Ò²ˆˆˆˆH뿱ћF0¬ÇÇî½! ›#�M쉮J5šá‡šxïïÑ×�]ïqè¦Ñ8‡\^U'B!œD²d[ó!w¾„Àì¼ÕIàýí2ˆ¶÷ÝjªßÕ=Ì×�/:qFšhh­omÅ»Þléã¸åƒÍÔÅn’oßRǾÔtÒ‡‚ÙjÃf³a³Y1Ç]J…fÜ“2üwµáqÜ5 @í³Ë¨Ø�ÈoN‰#˜qŽI¥mGíà˜‡º—p}ŠˆˆˆˆÈ•Ð#Ìæ4&ß·‡ÿ»a%%æÁ ¿-ƒÑ‰»éînº“¼œªSÊ;=@¢“ÉMm�IDATÿr'É—Y•-ãN¾ÜôG~µòurçÝ“½n3¯Ô'?¡oeXnÿÓüU¬ÿU 'ÓÐ/óõiɺ‚®ƒ²xèÑFJž+¤ÀbcäÄlÜI; G€Ô\ g·Q¶¼�j€!Ìzj*Žö›Í‘:šÆß…3ÀFÖýéxV-¢`@"#&ðTØn. ïýR~øx ¶a.²ÓoÁd¨ÛDDDDDúÓ€ØÒû5DGžľÆÅ‚u<`nÅ–„“'OnÕi9‡ˆ�ÊEeðd1³œ—¶kû¦Å,ùkôÏa‰ˆˆˆˆÈeÞ&]À‰Øò`ݱ%BôÉU'ÏZNc¹Úÿ\I�-‡ÉN� ‘ëQüõÔØÎÆ*Ö¼}øœë3¦“÷põ¨ô¿ˆ�ª¥OS}<�9?Ì%EgDDDDD交)Ù""""""òÙ ¼š’-""""""òéS`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`Q`Ž9©S'"""""" ÌŸbpÔ­¦ä{>¹¢gÕ%«ÙÖqù�éÜÛÄžcêT饭ŠES9Ǻ½kXP´_ä‚W,Õÿ9“™ß[ƒ÷¬í‚[‹™=3ŸrÏ§Üæ³ÛôQ»j f3óÁÙä.¦tC�kæ$ñ¾UO+@ÄCéc‹©öëÒ‘kÂÉËÍ®ŸF`¾d¶‰ßá{ß}JáûÿÛ»ÿ ¦ï<�ãO I#A‡lýYறŌ»@ô{ÄÎÀÝÖÝíÑ]íÜéÎVÿ¨�*î.ÞUo¦unìýл)îŒt·Ñ^µ³ÝÝ{'ÞÕ^[�Ž8j¥Sajèr)­™«° ¶ §|5B¸? Æ$€?Zt^�™ïHòùòý|óõË />ïÏçûA]ýº#äFË&{°•æO® ‰mïûÈÌ6ßÜ®‡º9ôÏÏÐðe1kþñE^ýí‹<[½ ÞÙÉŽW|§ÂåòÒøï­t%lص•å³u׈ˆˆˆÈ­Ïôuwèÿö}±ŒÍ?Êgàã·xíÈï°LgæBGÌÉ„8ò-½÷ a3dæ²´êa–ÌM~ºgß}…7?;½Ïr-æâÑò×?Æ’‘ö3o×q0\ÅšìFöuçQÄYÎøûHwPñH…߂йxýÐûø.�Ù4“¦"?KwÉmÃÀóÊNvëÅ’=‡‚ÅÙ@v4ôõrâ·{ØÿA/AÀæ¨dÝ+qΰà,˜C[‹‡àÂB,NÐÜíÀ9× €÷×ÕÔ n`×ãÑvÿQv<ÙBÉ/6“s´Ž}�݇‚�½ˆ•?ß@eø[÷RûÒ ú­vr—–ak:Iîßí`eÌ?l á+›·VQ8-òÞœ‚åÔüm6Gû"aÝøäî=Œ/ ÷%«jXW>>«gÓnƒŠb?í�}ôöCÉ£O³®ÔNï=ÍßûQ9ÔAGŸŸÞ€ƒ•[j¨œAßQvïiÀs,Ö\\?ÙÀê;¤ûÝ}¸_;I_Ђý¾*ª×ã­sÓ|þ'·Ôbl©¤cëÿ²ƒªÙAº÷á>è¡Àæ¤jý–;,)û™*®g„ùúæ1‡ºh|»‹Yÿ”šŸ>Á÷³ÏGáúŽsð¨ŸÂŸl¦fS khúÏ&Φ8ܼ¾Ï’™vŠVl¤jÑ},Ì;�çãhÑjø �]�_è`àÎ3ïkylýFVüñÞ<ÖI(|–¦ƒMŠ×°iS WÌ£ë�#tt“Ü6>;À¾c™¬®u³kçf ¾ôÒ-{öÛÇîÎj~áÆí®euæQê^óŒŽàÚ‹K™óQ Ñ7ü´ÒWP†3ú7§«ˇcíF{+^G9¥á£Ô¿ccU­÷ {Ùö t´û ØÆþ—Ú˜_]‡»®–ÇfziësÆ•§ìëðb.* Ë£þ¨ŒÊŹX†¼xî–ÛqÿÊÍ®§Ê8ýÒýéþC= «ÙöOµÔþx6ͯ7Ó XÒ¡ÿ£ÓÌ~tÛv<ˆ…^ŽxaÈGÃ/ë1þ|{ÝnvmtÐöÂo8agã~ÕOå3{ÙûÂv–p¿9Èò'Ái+e]í*cG–{Þ îÕ>–muãþ•›íx¾�îTý‹ˆˆˆˆÜxל]¿¹U²¿8Ã,tX#�¤°ˆ¼èÙ øº8ŸSBÑ·m›÷•ß„ç'[ùö·œÿ¸32Ïó\']äS˜i5å86‘wo¦³g8ß×E×€ƒ%ÅvL€é®b gøøýÝ]· ¿×Kß½e”Úl”•’™ÄÛî%ÇUŽcZ¤­¤¼�`g=#óˆ³K)Ÿç¡ùTðÓú~å "£Éw/£Ôv’ÖŽ `ÐöÁiæ/-Án¶còÑÚâ¡ûÌ©Ø@ÍCèñâ¥�ÒsþÔ…3ÁO£qÉ kzŠ*‡ÏÛh,ÂùPXr\”ÝuOg4¹O/¤ü¾H¶y¹Ø/ôÑ?ò™î-£ôN ¹ó²1úýp®�¶ …,_6'r¼{*pÝé¡Ý þSíô8\¸fv*ÿÆÍöå&¿ÞuÐso®è¨±}©‹ùçåÕv˜á¢ú© þ†¯ö�ÃÅêÇ×à2 ‚æÌ±s±Ø°%¸Íl™6úýqŒí{Ň2Z3±�}öiƒ\2ŒÈK³9ñ÷fkLÛHX¿àǸ؊ûgëÆvÄyÑÀ0 öúY,I�¹Þ˜m¶±s³Ø°[ñ)ú¹ó0�÷úƺÃÄ´`€ÑŠçàEÑA±i™&B¸ÈhT „¬dM&·Zó)ºçMš<]„º`áCy£M¡@€Ðȇ¿`ÐbÅšiÅšUDÕ¦*úåý¶d¶š !:ϸŸ²ÙÓÍ \€‘x÷¿—°f;¶k[ìÂñZ+Í-ýø‹×àÌ`,0¹®2ìÛšim âu”RýãŽížJÖn©dí�ÏþZvþº™‚U6,�þ±E»~ŒåÿŽ'ƒ/6Óf”Pf‹iøü0{�Ïfåý‘㣠~ü—ÍdÚl×v‘fرe»ØàÞ@a\y¸ÿHƒü#WÉè¥;`'7ÉÏ‹mzƒŸcû ü�,6Ý‹""""rk¸žç0_W�ž™Çܰ�ÎÏ@ˆóí΄#MY÷ä3﬇S_EQÿèggæã˜‘:û›äòåÐèëüÛߤ-”Ï»bv=sŠSý|ÿ탳fæ“oõÑöqtLq ‹Æ†Fº4‡ù¶1g�“lï ZýÀ�Ÿæ—†,8‹�ôoÁŒ„ÎM,E%8bC£­×/Þ ´Üqu9å¸f·ñòk^æ/-Ã;ëyºö0ÝA ÃNn®sxîràÀCËG¤ûX ÞðÕ‡´,^Éʹmì­­çÄçÁ¡ ½‡©}¶žÓ–ÙØsJ(¶ž¤¹5RÎôµp✓’ïX®í"Í-¡Äæ¡1z<ümÔÿ²ž6ìEÅÜíkáhO0rýÜ[©{§2Ì4ŒûY±s÷§�4GèmjætNwê^‘¯M²Ü:¡,kºÎή=0[Rñ½.þíõ]ì´LgÞw ÉÏê$fÞOUe?‡~WÇûa ËAÅïgVÊÚq8§sü?vñòkY»t¦{ŠXöàsŽÎ�°æÍ¢ÿíx¾÷"—3ðƒ¿ÌÇ”ËV,åõCûØùÎ ¤O'¯´ŠeªÆ¾},¨b]y-î'×QŸ�GIy9ŸB°?ð>ßCݦ£‘U²,gË_9ኧÛ(Yê„Ïgãr$Œä”ÞŸÃþýY¸G†Q- *ø^v;ªÌKv!�¬¯À>ͪGÛÙé®f�ÕÎü¥¥dz®>dF.UO=ƒm=û·?Îs!s®“²>CõŸEæ¯þë*êvo¥úU c¥�¯§Ò\Ë#Ö2¬üÙJvïÙʺßE>³ó¡jVÚÛrªÜCÝ?1e/Mø,�{Š�TÌ�¼åoûú"�µ¹ÑŒwkÙòaµOº˜TåñP»Ÿ8@ÎŽTéÆ"""""7DZZZp9ºý_t !`(º…ãõh¨žlIöp²MEþöF<¶?¡x®nù:Ò²—oôPò`)š¦+""""2%ÄæÖTÓ ó­iOÖÉp4‰mÚxù½s Û² W°ö�èókÂgizéeŽ|wÕìºIä& ¶ÖQíö0û»5l-°è‚ˆˆˆˆˆL á˜ì:ééÅ©J²Gʲ3¢› 03V–m¬ÃÃÃ'õ """"""SMZZÚ" ÝFʱI^’}E˜Ž/ÉN¶zXü¨r8æà"""""""SÑPL†M:W9™ñæ0Ç—a‡„f‘©˜‡¸º4{xœ <˜Ç{&U¢æ‘NCºþ""""""2E�Wz�r”9Õ¢_‰F—GÂrz´ãt]™Â�9>4O88§Ç…cì˜lþòHÇ"""""""S=0džåD¥ÙWeáD+dÇ~=²Rv¢³GVÍ6Ǽ6Åì“ó½±[2iú¿R—J�·0u(fdlUìØà<ÄÕ�›º*0›â:MKò51K‹<-îý‘N“…åD¡X!YDDDDDD&ž‡çT¡9¾{B£Ë�z3$^ü+œä½Da9=&�ŽžEDDDDD$Q€MÔ>²O8IhŽß=V*å"ئ ñ£Ìñ#Ì$ Ì#'[Æ�jtYDDDDDDäzuü(sì€nì¿ÉžÅίЦ$§*Í'8±tÆÊµÓ“ef¹Ñ�™$¡9>$O¤›ñs²‰æê9Ì©øRX‘›šcóp‚pœ¬{x¼ì;™U«ãG�c·ômÉŽ!""""""r#‚rìëø2ëp’€<¡° ©G˜‡ãîpŠý†Se…d¹Ùá9Ѽæd¯Ç Ë ³ÉF‰ÇQVP‘o:8s-ay2¡6UiµÊ¯EDDDDDdªædyRay²¡6mœ÷Òn@"""""""×”™@PžPXȘäÉ(‹ˆˆˆˆˆÈTÌ Ó×€¯çûžEDDDDDäV Ð7%Ü*‹ˆˆˆˆˆÈ­¤oZèUh‘Û.,ßÈÀ«à,""""""·EPñÿõ Ç~Þ­Œ¥IEND®B`‚icingadb-web-1.5.0/doc/res/view-switcher-preview.png000066400000000000000000003115241527064444300223720ustar00rootroot00000000000000‰PNG  IHDR�¢˜ +ÞzTXtRaw profile type exifxÚ­šgrc¹…ÿc^rXb•wàåû;x¤¦¥–ìñxZÕ"Eò!ÜpÍþ×?�ùÿRñÑÄTjn9[þÅ›ï<©öù×ïogãýýüï_úûÓ릭×SÏcà1ùçe0‹D$š©�Ú‹\ بŸ+5ÔSH1¥”SI5µÔsÈ1§œsÉ¿^B‰%•\J©¥•^C�5Õ\K­¦¶Ú›opL-·Òjk­w&íŒÜ¹ºó�Þ‡aÄ‘FeÔÑFŸ”ÏŒ3Í<ˬf¶Ù—_a�+¯²êj«o·)¥wÚy—]wÛýPj'œxÒɧœzÚéYsæIëo?>kî�53¥–�¬qi)ï!œà$)gdÌGGÆ‹2@A{åÌV£7J�rf›§+’g•IÉYN#ƒq;ŸŽûÈÝ™û”7ãÿ•7ÿΜQêþŽÌ¥î‡Ìýž·o²¶Ä6Ós3¤6TPm ý¶;ÛÕ3ƒ™”¯º{aK¡÷92HÔ–˜Õ²Ö¨.0AX~˜Ñί–L{h˜šõÒ¹ð\î{ìÉ� ©©&[A­¹+oF—û)iõqÌâú—9ÓööT_òé�i\êÑõ9W8­Vrò¶w²e —Û‘‰æœ×›‰Fó ¶Î]Nè§×’¨Õ“‰S_„óPSdÀżK01¥pN�þDÛÉùœaö\%N_bòiΑBëÅö¹ÆNȦڱÇʃhQ¡už£—ÓWÄ3U€Ú°ÏØøóÌzŽc=iÇcó¦$ˆÛÈÔŸk;1�'¾QÕ´R$‹ä¿6:€È¯–¦i{óXËpMñÞcŸÚ¹nÒÍŸ;ÌtÓðL}„tÌ->ײÌOožn;}‚5øŽ~msÛ™#¸7)jV[.”ʲ{·6�[T]\¤�[g„°€3(ÖÁbÚÐ Éx/ës@xf¾}ãtïóaªZ\š‡w�0s ƒyš;Ä/ú\ÇœyøFio6ÍN…eÏNvÇ)Òu uúAý�­v/gÆØ�üþºá�tbQŽ3�\fj³µ”ÖšÃ9:•(€vs,î黾âïóÍ{þüÄϼ”m-%‚0¬yÆM1›¼ë7½•ybÔ³v\Ðc9–Td5©ÿq?Õú:¿ÝÜàÎrœ/ÜX4æ ˆ|ÚDø¢#3ÚïR ¾q*KŠÔ¨¯yVD1�5g0iGo[ö?ô^�PÉi {Eð‹â^¹çÐ;—[±×¶?æˆA…Ž™Žš>.—ò<¬£­’óÑãélºtò›WõæfµÒ%+ÄF;÷±}§ ‡ Õ†=�¥;ÈC3ðš£,b¬³.€‘ˆïÒé“^šýb­6¥Ö‹1‚]w®’2툈¢v>>†Šà‹UË¥]Aj„‹+îè 0=bìSÉ|È‹•ýoŸFk{¥CËg�E½ˆØtl*#Ï×�z-¼Ÿ|K>¨Xø95 €}—E{ATç½õº�]ÔÒxjëÖ;x–ª­Ÿ¿ËŽÅœÊåPÑáÃd »B² ˆlîPZŸq¬�%h(œ Ôt“ŠÂ§ˆ:•MŠn¿`ˆ$#k¿–†`=ÿc¯í-,,�èÑ8py¡*{…}õ AÍ;t{R_……Ù…("÷UËGÌíb`‡AÃd`Wó�K…haUpA9±ÂDó}W"jQø5#â6@Ç¥“@bÆè[ ³Ðƒ.¹˜�„³7±�§ášC‡Í-ô}R#c{“£Ô�™ŸÞ1Jšk‡<¢£ WG³‚«/Ôè�Dei¤Z¶97ø€j^©«ÎThŒ`ጟ±ø'(Ö[n‡æ|�~ ½pã7¨yàB†¦J Ç“Ä¢¶|aðÇ­”g'£ñä ˆ  ¤N! –†G—m„aÄ {á×JvbÈyB‘ÙE†®È�D‡‡*Á.KW£Ñ…k|4,Æ ¿|§i·@{ôâzï‰> Òˆ–Y�f÷»‚*Á7ê‡+ô Q?™ðoI ßFél-pýtRÊ%.„ÎM£•£/ ³r)Ú§$ÆNØ :¬e@ݳå6À*ŸÅ±æÍó¤:2f™×�/}ªW3`ã}ÌØ[ ˆ�öëm{âM$Mj€�R�HlãA‹�~7Tƒ0eñ0:–¢ZI¾ ÖàG{£ªnÜNº�ÆfK´â(³ rå!~Ëj7Íä�àwÝ'‘Y”Ý1\¤YabI‘&’f!k„ZšëÙr“èRɾMDÐN Ó£/‚cmµu”·f´³ôœñ¶\<�¹Pö-ÎÌrCŽð±¦4Ë2ÈÉ5Òª‰’¨DnŸÚA1ygêèJZ„V,îNî`9'/Go2Ãþo‹*–¶‰rCÓC)Ïî^¤ùq¶Û3ŽXRüáj*`9Ð,è´Þ�Sj ŒB1ÓrÙW´’…4Áßáãn¿ž= Ò½¶H-«E‹'èôH6\“ê’<èZ y5�ÁÎQD iHPEc*ødŠðË ýaœ¨+Rµ†6^ò ö¬Ü¬”‚Íkg•ÚOn!ˆˆ"@àlúpì\“Ñ;øbôÁÐ.ô¿U)#Z‚�æEÙN¤z¯"Ï>XAÆ ¬ƒEV¤c@!{JRõ©˜Œ CøR5-í™@öV®wY•Ln�ØDI"O· h �ò$H¾/Keùœ< צmY.EPÇ„;QäÈI e[tv±œ)ðC ‡¤Y“ÞÝ ð¤J W˜¡F‚<è§ÉªˆÌ„z/ãðØ=þÒ’Ù%`›lÊoíŽ9‰\n«AWÒÒžnE…w$ f‡½ÇÔΔ„×ÑAs€ºø{›BŽÐ%™ŠXH.ÌùNÉ "Ù‚-‹® çѳ[tB¥³ufèQyÕ¼FN…Å …quéM[Ç^P V™o»Ô ´d"ÔùhM�® t&4ë¹FeV§CÖÒˆ±|ä�ktf+ǃv'›A2mÙtæ£Ø¡`„„uweÈ2¡qŠw!U‰9m‚v§Ûœ·)þ¢³Ä&g@ÞÈ-Â…¿Á\©C pÄèvD6ôx�.‘;>a]´Y ï¹ÈRÉ'êÓ^Ë�Ú“Áû‡s}ñA¾`qtRš„á^�Åü�=`®�°S‚ßЬ;:sêЗqÅxX¸•À¦1Ãí14?Ç—8Ü]y‚pÌ"�lA”-š j Óີh Ø8C9Lfa&¶ÛØ$„Tõc•ç8ÖŠ“J˜ ·G‹€¨uÉqY„xPSC‡ãuþà²íq’r‰R«H‡AM&ÝVTV{5 чÐÓ¡”Å( Itй&šgéÁé"Á†È™ ]™$ËrÌÖyŠ.@SÈ ä1`‹dh´‰]T9:9DÛÆ:áfˆŽÈƒáÀ_Ùp^¬•Ööª,ìß 4'+‚—Ñ( §ÎÒ7ÖC%¾C|„ª=¿ bŒKaPÄHÖÑ1 ßÉê ‚phjh�J¥ŒèHföb'6žÊUIY€ �´{¦ô²º‘‘±Y5èî±Cáé~qôiÉÒqžÕRë„“^ç–×^™Ð³Z‹x¶ŽS¡dÌö‹š**AK›M׿êÆÔXÀ÷ðƒÕDÝÍju Ûd u' ©ëTÖƒ›IˆÄòÕóäuè«óÒŒ®QO˜¹S\"€52àL™Ù€!4ˆï–0›"ûªý€Jv_AõKÅ;© Úaçu?BSž ¾áyq¨‘{VMSS¨ÒÔo^dNÒTƒ+&šà;>מ"*½Šã¡Í�Íb'‰äŸ¶¨³p¸C ƒÎ@b–åõÑ�E'–Úx@›W4 Bž¢£¢þyDŒÉ�œ ø–ncLG aT*‰'’ò’%Э�ÜtÃd¸{æòË p†]Ï=*£‰;¹�MíÀrpŠ{’Я »>-¨`‘ɤ�C$Qy"ô�˜¨ó™¤ó{ú¢Ý؉kèbÞ…ª™RS'Q;°½ì­núŒ%˜åu·j%¼ ô-i�‚ƒ$Ò8hbÝBûùg×®@‹—áÏ5Äê)-œá}†Å)Ê©¯�{rÈ\,-x Ä f«z® 嬡› ñÞáËŽöÒ<Ýâ@tòeô¡yhÖ•H�ªÑ#Úä Yê6 Z2~C(H‹TÍAl#0“·€ *™…"€:zÐ#<<ˆ¸*@Uå;V1['ªGwƲN’Î…fºúн¤ »˜È0àŒ†E!ïq/Ûo®ëľÊ4Ûf^—PÜäÜI£Éˆ‚ã}ßQØs)ò‰J&ªç%%¤S-]º·Ð19Óô}�ݤâØÇsî±  HM¸r jŽšF= ËJ}Ÿ[s:½;“W�…_›È|;€:ºïr€“ò3d3(¼�2Gº·È—Qt"£qa…fsÏY:Þ<øÿH¦‘†B;¯;m[ˆjÜÑc–Ðý< ØdÁ":¦´¿µ©ö ³rÐMF¦Á)|÷&f‹€¡ iTXtXML:com.adobe.xmp jý¨Ô…iCCPICC profile(‘}‘=HÃ@†ß¶Jý©8ØAD$Cu² ZÄQ«P„ ¡VhÕÁäÒ?hÒ�¤¸8 ®«.κ:¸ ‚àˆ››“¢‹”ø]RhãÇ=¼÷½/wßþz™©fÇ j–‘JÄ…LvU¾¢›f/b‘˜©Ï‰bžãë>¾ßEy–wÝŸ£OÉ™ ð ijL7,â âéMKç¼OfEI!>'7è‚Ä�\—]~ã\pØÏ3ÃF:5O& m,·1+*qŒ8¢¨åû3.+œ·8«å*kÞ“¿0”ÓV–¹Nk ,b "Ȩ¢„2,Di×H1‘¢ó¸‡Èñ‹ä’ÉU#Ç*P!9~ð?øÝ[3?5é&…â@ç‹mŒÁ] Q³íïcÛnœ�gàJkù+u`æ“ôZK‹ýÛÀÅuK“÷€Ë`ðI— É‘´üù<ð~Fß”n�ž5·oÍsœ>iêUò88Æ ”½îñî®ö¾ý[Óìß�ër­#Ò·‰bKGDÿÿÿ ½§“ pHYs  šœtIMEå  yŸÙY IDATxÚìÝy|Tõ½ÿñW2K–É6„L �Iˆ‘ˆlT�E\¢R •^¥ Ø{+··x{­¿^io±Uj­à-XD¬¨e\B�M`@H‚ ’’@öÉ2Kòû#&�@„¼Ÿ�Ç<’LfΙùž3çûžÏùžs¼h[^ˆˆˆÈµ¨®�ç§L ""r�g¯kl:"""ÒAB„2�ˆˆHçÎ^Wùù"""ÒAC„2�ˆˆHçÎ^Wèy """#$\naA™@DD¤“f‚Kéä½DDD®«0q©Ee‘Nœ ¼.ó±^—0= ‘+.ö˜Ë Ê"""Ê-îÈ/¼.#HˆˆˆHû…Šº&îoI¨P&Q&¸h(hMp¸ØO‘k#8ÔµðçÅ„2�ˆˆˆ2A‹;÷ ¯‹üÝšùˆˆˆHÛ‡†óBÝEþ¾Ðt” DDD” Îale1¡©°ÐÜ­¹Ð  !""reCs¡áüÀp¡éx5ú[™@DDD™ Å…æ‚CS7ïó~6DDDÚ7H4jÏûÙT˜¨»È~e‘Ι êZZP¸XphßÎ """W?84 µ }rãûš›ÎùB™@DDD™à‚¯ üÞT`0œ÷ób{&DDDäʇ‡¦‚ƒ§ÑO¯FÁ¡ö¼çŸ Ê"""Ê->‡Bs—~j*8š¹y7Z 0DDD. Zï�ð4ôÏg‚ƒç¼ç×6ê‡ë{fšÞ� Ê"""�+x5W`¸Ø!Í m44<÷ÌOc£¿Ïß3¡3=‹ˆˆ\ù0ÑÜžˆÆ{ Ü 7¯óúàº&î;ŸwÙ@™@DDäúÏM]ù©îü‚Âņ56Þqfσ©áv~€¸Ø^‰æŠ"""ÒòÀpþÿšÛ q&84î›ÏÎùÓ¯k¢on\TP&¹þ3As‡>xu»l¤×‚ƒ0ÕÕÕÙ;Û’›öBªV_é°ÞüÙ�14}Ù¨óÏ�P§L L ""Ê\䲑Í�Nh"ÎFZv•¹¶ùfoEmCß~æ'ç…‰ó3�·2�ˆˆH§È¥Ð’ Íî ð ""ұÃç¼ÑÜ ee‚o�Rh|ÌÄùÅ„ éxá¡ñù š: ³2�ˆˆHçÍpñs�ÚØœó'ÔÔ0GéXÎÞ ^Ê"""Êçßï}¡žšæ("""/ʘhó¥¿ý´Å<¾k(Ïÿ8I«Âåò fܰ^Œ‹ &Ì×WEûÛykÏi jÕ<""×axhížeeee‚Vš«^´jFéo/!sÀSK|ºˆkÓöØ0,—úö“fó¼rC‡Pþíþþ ©9É»Ÿã`I-!áaŒ»¹?O‡åÞÏ!WBDäz —^ P&P&P&Q&àÒ¯}I3sU;©ñ¸Îþm½m. o«ÿÝißÈ⥩äM@îúÑl’ƒRYðT¶ðbr»Ä´½ˆÉ‹f“hì+™÷ª™¹÷ç°`{2/ý4 gæ-ÝB�LQ˜3g QÕé¬~i%{*€Zâïù3‡ZÈxçY–l«ÀdpAÄæüt Qíu~jo_†ŒŒå¦Ó_ñ+q5þŸ(ÝÞ GÚ!ÖŸl¯ÞÚ›þÃâ¹µêO­9N®§þÞÜâr/ç‡) ÌèŠ?¤Wëã&"rý„¯ „ eeee‚K.(xµAÀø–¤{¦‘ú‡'™µ%ž› `Ð-É$ÅY1“ÃÚ¥;‰yl!s#À±{1Oþ} I?1ÃÉ,�-䩘bR�=ÍÎC�8ì;Ó0 }‚(Þl˜zk—n!êÇ ™ã íõEl9”LÒÞåd ™Ï‚ÑV(NeÁoÞ$}ÐP6}l!å�óæçÄþé&ŠË ÊÚ>K,$!žÇvÅ\ŒÅ;�¿¤7ÿPfLJdR¸B]d¾‘I–§^�ÁÊ­=a×'9gƒÃY•…¬ÿ²' zwÅ’žƒC8‘Î4” ” ” DD¤Å…+#z óþ’L~f{¿ØË~œ7Îå™ï:8z,›Üç³ ÖæHбb²ô&>ÀJÒPkwgÀ ;ö0ìáp¼aÚUvŽ–ôfL4€…¤ïÍ'‰bÖü£€£2SC_ˆ•‚ò†ö_Îòß."cDÆ�&ÑÚ~ÍPr8‹1�ü[ŒCF%ñÒøËW~n2ËÎßûáM¯ã™ï‹90šÇowñêæ|;)""ÊÊÊ""Ò·§ÅBxÜ0&Ä c¸8<žJúÔaà›ÈwžžË°ÆC «¶€É„©áOë�¡Ø6î Ã@ºßPæÙø&<4Ãl´�üèf&œ÷�Çž'17�´�[Yöë ûÏL‰n§vðTòá†4¸+él€x6Ɉ-¨!8lÜÇŠ¯�í·\j�V™‰ 5B±»ñ?8v(�¬ø0xì;P¨à ""ÊÊÊ""\Þ5£[7äÑcgå¯ç±twñ7Y"7‡â@á–zÛ2Ø»¿¾Ãtf®aÙ¦œoO#hC»f°qÝ|†åœ~1ô9Jú1'à$ýõ§Y²ÓLL/3Òì8ÊÒX½bÅeé¬ùgD&’|ÿ£<п„ŒãÎömù†ñ_Õ€·ÏÕ žR¶usÓ�^ô÷=ï®RÞZŸÎÿ®Kgý)%‘ëˆ×U›–2�2�ˆˆ\™ ýF(bHùi K—>Íœ×Álüã™ð³G‰1˜‰|t ‹–>ÉüwL¸èÁ„ÙSûy±0lHK_sñðwÏ�ÅäG“yö¯O20EŒaÎ Q �2ì…—xò¿L˜\>ô¾ÿgXƒÀvêÏü扷1ùº x3o6·ÿbóTòái0>‰ëá¼:Á€Z²vb�-‘Ÿ?há³ôBVBXX(7—²âƒãì;©O™ˆˆ(((ˆˆÈ¹•ˆ¦.ùäÝð»7`h(<3àøþ€_]]Ýg�­Ñ¦½�ÚÆÁÊLd@-¹¥î«ð|¹i` ãúcóWE9{gýár�xIDä:òæÏ*�j pÀÝð³®áÖørRg2�A™@™@DD®ëLàn” jå‚37àòG(xi´�“ÜÒkáuT³/íûÒ´HDD®s^W W&P&‘N– ¼/s¦"""¢ """"��·š@DDDDDDDZKi5DDDDDDD¤ÕTP‘VSAADDDDDDDZMi5/νÜә߽~÷ €±áf|¿†›]]ÝV5£ˆˆHêü½¼F•@UípÀÝð³®áÖøúÔg2�A™@DDäºÎîF™ ¶Q.8s;[8iDDDDDDD¤ÕTP‘VSAADDDDDDDZMi5£š@®Ž÷eóùÑB¾>UÑ.óœ3,”Ȉðv¯¹'òÛm¾Fƒ�@‹Ö À6™^]]Eeå”–;®™u'8ÐB— @¼¼¼:äº_WWGIy¥jkë´1¸Žy{{`Á Æ¸ Ÿ³«±íêèÛ§«ÅS[KY…GU5N—»Ýúæ—vœn÷÷ÚžYD™@™@” TP�ëÖ†}Ù¬ÞeWC´1·ÇCqY}�¦-Daq •Õ×Ô{<dBƒƒ:ä2:]RF™£R+k'P[[KqY9žZ]C‚Õ íèjm»:úöéj)«pœí»D™@™@” ®]:äA®Ÿ:¡F¸‚UmÓá_kÁáüÑUV×híd*«´ÌÛÛÕÜvuäíÓÕRî¨R#((ˆ2A ‚‚\3N•7Ó)|‰� ÆfP]Žö2*­çöxÔZæ"Ò’ÏH­›‚ÂjªjÕFÊêDËüZ CäšgŠ‹ç¿î´rðã]ìës÷Ù.R«8É_Váàå~6]•ìØWÈQSn´Ò¥¶Œ ÛN‘×ÜtB¸ï–.t¹ìw\KQa…Fâ­�—]N¡çÇÐ|‰ëá�ŸV¹Î¹Nœà•]ÄîC|Þ×|T|ácÌ�~!<”l£ûåîBóµrïí½èï*dÅ'93…óÃÉ=‰ingGÉIþòáqr/»ð¡L "*(ˆ\^x8z”¿~êOîÑJŽÚƇíZN±!Ç�'ÖVî pSXTÍÑfúqc­›¶¨÷»òOòÚ¶н|¹ëöpª¾<Á':”ÎßÊ�"ý‰Öx#‘ë—»ŠÌ¯«éÙÛÙžÛÅ1{1Á¡ è¢!\Ò9˜Âm<”Œ5ÂŒ­G,Ûi¾–>ÑÜÛ3ÆÉ㯅>„ÙéÕ\ßk(Â_™@D:A&PAA:†«p’[“ÍÊÈ®NŽš­ j XýM„5÷Zü mò�2 øyA±Á€¯Úå(RO:ËÞp1í{Iä¾½Œ£ãf2¦5ç2:ñ‹þ¼™ª ÿú60ÞÀ½ÿ~}ÝÙl[ùÛòÝ` gÄwf2"ÒÔîËÒ‘¹†—þ¶…àrAähfýx ñ––>GC‡‘Ú¸Í2XòÓ§Ùám#ÀN„ Haî’ o‹í¸ç4éï½Á¦#•`—ÛŸ¾ã§sïM¡mß@U»YþÒIÆ<>‰.ÙûÉ Hßmv®)eyüýƒ=8œûÂîË?Æ+ï'·{¾¯×Ë"«Ìþœ�>IÇÿÖ‡Û»[ÕZ7îZ#ÆÖnˆ ÷óÞòî5›ÿL‰iÿ7ìô€¹¥�ö~šÎ[_×àªó&2!žé‚¥~$Ú;À:²OòIžý�'ùìd-x¹©¬¨¡¤™/îÎJ7®Îš (ãð{ËXw  w-ØFLgÚ�1¸?{�ß½š. 9 ×$›6°ÝGS(((¨  �Œ©wo~x»•ƒîòö=äÁ7�±É�΀lfò¸v8kh8?¼3˜bƒ›_E·ô¤·ûBaÃDÄåî‰8i[2f­ wkÓiM%®ØûøÅ#ƒi\.(úô|òs¿ÇÞå¥Õ[è÷³ÑmpXHk:a;kþº…¨ÙÏ0¯�p�öê3¬Þ>”ùw¶ì2]G?]CÚÈó€w<<ýBëç³ò— Y›™Ì¬„6èÏ÷¿ËúÒá<öËÁäo⵿oæHÿûèÛÖ5¿Á<ü‹ú_�|žÊá›:‚ÌCTF†w2Ÿ]%=w=,³ÂÏÙ|ØHw›™’Ö<Ï•ÏÞ�Ù뾑)÷ ¢k‹·™¬{k¶ø¾çÄ*Ëæ¹UG(ŽKä—·u½haÀiÏbEa(ÿñÝl®Süß›Gù¬_Æu¢ H¸ò x+­‚xoßö=ä¡,Ÿÿ[�ßèŽ<ž[–§LÐÔ2:ð.ïåöç‘_�Ææ<ÈÛ|—Ï“þ�U.z�ý)?¼=ôê­@ÊÊÊ*(HçãÊ<Ê_ýüÉÍlßCÀCÞñòL ŒðÁ䩿`V…ÍékahoK›TÚM¾Øj«ù2=—UW.,Ù?XšíÈñÍeñ‘bŽ~å¢÷?ãxøþÄ–ïõªªÂm6qnŸVÉ‘¬*úŒ�©¿¿ÇMôq|À‘ŠÑ i×Ëí:qº€³& I?X@RÃÿr>^ÌKóÁ×Ö1ü`Îb.æñ�!¦ì(!C“8°ýÅGþãyLhnfu±…€ýõÇyÕú+L ìøã9Øò‚BC1a÷I¡7ÚhÕ…ð 1ŒŸ_¼ÌæãWáýú‡Ð¿«7ÿ÷E:ÿËÅ‹ æñüW7oB¼?Â|kq¸:תoаñÐÀ`Â"ÍtiÇCð6Ó?¡;½\§ù$³‡)˜;‡5ß÷V³>ítë c×I&0Å?Èc}ü 4~¡X\¸j ªÚ…1ôjŸÝA™@™@™@étL±½øá­¡ì«,g_�Üvá^ÒU~’×Ö#ë2O„äÊ;Éò=¥”{Sq{_n÷«dÏáSd4w… ¸¡� ß_FÞÇÈ+ؾ1ãg1¥xG'ÎdŒk#˶`æ=Q­k«šJªr7óÚŸ7R^eÂ6üAe¢¼Â� 3{Î AYJ)/ZQPÈ«òjòþî~-<ÆÏ„©½ùÝïç°7&‘A7&‘4|(‰63œÞÄÒ÷Ì<ð¿ H²8Iõ?x5u ºCEŽ‰Ñ ’èç õÐNì÷4j3xûÿ=ÎFTœ.ÆzÇ\¦E€et2®·’3)…¨ªtvæ&2z�¹UmêwÓxF¤-áÙg¶Ó'>޾ý2(¡~øúãwùúÆÙ<64ʶóÚ‹ëøzîMô\³�#5ƒIô)#ý`ý&ÇðõÇÿû­Çé??oȯ‰á‰_ Ưj;{úŽfx¯ýä�™ErO;§·}@zÙ`†•‘þE%¦(8\ñõµ¥jj ëÛ—§Ù°äŸä_•nœ€¹£7 Ñغ`â:Õ¨˜0ž»‡FâÓº“—<4ý²—·1�qw'Áú´ú¢‚w"¿L¾@QÁh"¤¡�öãì2„ó“ÐÎõs�,à­ýøøW�ÃÖâ‹4±_0“‡‡Ö!¿œ,Ò7žŸ�¶a©íNHùV”3"©'š‹$E°kßiJÚòj$`ò'°aCÕ¡M0Ý´(«ª¢(í þºó4e„2èî錉õoßÏœ2�2�2� Òù¸ŽçðÖîRŽåT“yü ^l­­uSܸÉß„ÕåF3VŸö}ÏU% �¾D@A�ƒâ �íÑèC´Íç2 NrªÍDY€ù9ºõm1œñcýIC`U&クœ¢½ìâJ�>+ôæ´óÜ r¨¹Ž£[~LKøˆÙTäîÈ2¾z¯‰Ç–C$Ð¥WLóËÈÃ-ýKYŸ^Æ�ăvÝĤHm�Úc}m‹�IÃ]8<@Tù™:~1á’ýù¥Nð ¡k7+>qy›}éî‡%§œ¼|%\üЇ{ÙáaÒäž—ýE¹£1…†r× l]ÍDØ¢¹XS½¼Û¦Ð_î Ð �ƒÂÊö½feGËg›ìÀ?X¾Fÿ`46ÀïÆñŒ"ŽAñ¡¸�¯ãµ¿ýƒÈ_ΤŸOû~æ” ” ” TP�NWQ¨!÷´7%5µ¸\õCyÚEˆ�ÝÕ…*/#~€î»ÓÒüž,/cÛœ 0�W>+¡ÐË�ÉwØ(ß›sñ3:��¸´3:{rHýÛJ6¬$êÕŬ9žAqh%+=÷3mhx˧ÞŸgÇ€^.6Ÿ01  Š‚2  à)£ÌŒ­Çtù`J¤‡5¹†³äî~uŒïÖº ±ÃáÄb±3x 1ƒÇ0yà"ælØIñÝÈø¦VnŒ V’oŽdÉæLœ“’IÀÂmDž.!ibü%¬÷•TyûãÇ ð8�Îæç_`oö(l¥ü;“zŸ÷”›¢X—žIQé~ªî%Ò_7óØ\Àdºð�—‘·Ü„ë�ÝäzÅ}ã}�î‹KkµÕúÚ"µ¥¬zs7ï•Öÿ9äŽQü|€©ó5z@?î¼ËÉïï$#u=†±wskÿ´¼]dîØÏs{ÊÁÍLîÉÅ2ºÃ~ˆ?íòæ¡)g¾øt2F#¶ _¬F0Œ˜Úiµw�8Ê/ËÃRWMI à�Ç««Š›¿’ƒ§¦ .ÙA3Puà ^ûØ�ñ?z�~ #ã‡3äLa(r }üþAn ô oÏÏœ2�2�2� Òé˜úÆòó;­üxWûž”±!¸|S­õÆ×§ùá¸F/¯6zÇ^gfwö×+ÆŘ“ȱöfæý‘ìøÛJ,ß›Ib+ÏH\¾} + GñoSâ0ÕØ9|Ü„mh(}k‚ؾώ«W |½›¯Bn`D+w›4Þ wõ©ãŽðV&´kxæ·Œùõ<ÆD8)8ž�¹K2–žÐ#窒Iòs’q(—}b€��×@Ì8oÙlD!ý`.ÖÈ(Ì€yèhÂÿßÖ cÎ%Œ <òÎXï7“NiØcP–CAE¶À "#M|þe6®Þ=0U$õ7C& $0v0½6ìæƒ2ñSzÔ€fÛ̧ ®oÞkøp±˜·w3ü‘PmŒÚc}m‚óXÏm;IžÇMéG»q Èwû0þ®þ°éÕFqwœ©Ó¶¹1ôFÆO„ÞßÉ—Ÿí¥ïC·îÝA–wQßSŠËÍÜKÜÅöÔ–eó×î›’Ð9‹ €ëd>ËvU?¸Oûž”p9�8Î,âÚZ58›™®ËÓ6Wy舙€’í¬Üàbôìéô;{ˆc%é«^&#þÇ<,b s¿»Œ—Îa-fð€t2³�„9ÈÉ£÷.æ¥ßÌg­ jÂ'3çN+h<31 !¬|y>+¼€iý«6ƒ·Ÿª?^�SÌfOoH –$†F,aMß‘D]ÂËî;e&ƒþñ./þO˜ï úŽŸÎð00Ýù V¼ÁK6at™ˆ;³þDt>q ˆxƒåù£x<¢~:=›ylY3á!²O¬ú§þ;bƒH¼ÉŸ &1HÛ¢vY_›`ŽîΠ½yì£L¡Œìi<”|uœ�NyÛ߈£Âí|Ýé+¡ìðG|�~šGΜ·ùGš�A“FÓ×·E…)¡ä¹»¶®˜pb¯-ßN�ã4E®“<›éG¿{ɤ„vZÞ]¢ùÉä@\á]‰lÁ°ï‚#'Ø[^CÁ»ŸñVÃgö¦QC˜Ýy>_¦náLÒk·v>)£­OOéC/×Iþºú ŸÕFñø¿Å^à _óß+�\öùœ:b&(JÛΑ¢Ó½ð 4|Ýèwÿ/?r0ÞüÏ~`ÂMîoùáÊÊÊ×n&ð:¯Þyæ÷3uPoêÏ%jl¸™À¯áæ_WW·U«Š´…i/¤6ý+ã-ä¦ç‘‰kKΡPѲ=s†…ÑôX;Wn6¿ßUNµ—‰Ûo‹e¬ËÛ¨ �{"¿Ùùžû^ªÙºåx›�ѹwTÄe/§£9'®Ùu¨-Þ_›q¤³äÿm$þÉy$uÔ6-cïßóÕÐç�r×תS¬Útš¸Ûãdpðá{ûø°´¾Ëî?|0ÿÖŠ=^^^#�Jê/k_ÔNê÷E¹~Ö5ܼe„3™ÀÐÑ2ÁÕþœ]SÛ§ ÙååªdÿÑÂz[ ÃMuKΡàÓ²oع'òyiÇé&ÿgIÈKwvÅL¾»ƒÿ+ŠâÉ6*(\(‹((((\ÅLàn” jå‚3·ú펟\ëLÑQÌʾÒ"líx•SD8ÓÍdj<¾ÜBXs£+ýühó‹!µÃ�å ä†�KøÍô~ð‰‹‡k[ƒ¾ÿKi‘^}~]™zwׯ_owï­ŒSËH'ã*<Íš/ °´ëU™Y¼à ¶æ4ësjÁ§œ}_æQØ\$©(¥T™@” ¤däÚ‡1¿ÈLIA%ŽÃ»øW{ÍØÛLŸ¾áô9ó·ÁŸÁýµ@ä¢,Cg±p¨ÚAD¤­™ºGòø�n|͘"{Ó¿½fì©d×çGØuæïšbÖÿ«X D” ¤ÓSAA:7¹n5ƒˆˆH§çM` YÍ "rÍl•E®]}ÕW�Ù¤ú¡ˆˆt FƒA� L "€ r͸-A'¬º’,~¾×ÔtÚZP@Ç=Å׬½m��Ÿ��¡ƒn;Ûöéj ´ø©” ” D™ PAA®wÝÔƒ”!1ôì ÆhCFƒkPÖ À6™ž­KÈ5 ‚ü î¸g: µb4jsÜi>“Fol¡!jˆvvµ¶]}ûtõ¶ë¬AÚ“®L L Ê×8]6RDD¤“錗�‘Ve‚]6Rå/i5DDDDDDD¤ÕTP‘VSAADDDDDDDZ­ÝO�ë©­åtq)UN'O­–€ˆˆ\5ƒ7~f3¡Ö` Þª±+ˆNl9á IDATˆˆ2�2Ak´kA¡ºÆI~Q±Bƒˆˆ\_h=µTTUSåtÒ-´ >f“E™@DD” ” Z¨]K/eŽJ¹&CDY…C ¡L ""ÊÊ­Ðî#šUSÉþÌSìÈu�WU&Ѷ`†%t¥ †œˆˆÈN5‚2�ˆˆˆ2ÁµXP¨­­Ãíñ4ýÏŠbÞÝv’ÝŽºú¿½—‹£¹§8š_ÆÈÁ½¸+¨¥%""WŒËí¡¶¶o7©L ""ÊÊ×VAÁÛÛ«™TQÃÖÏëƒC`+“ÚèbÀUUÉþƒylÈv²uOÝÇD3ÐO LDD®d_¥à L ""¢LÐâvºê¯àÔiv”Ô�Žˆ ˆ“Ÿ?ƒ÷bJ7opU°Õ^}Y³9´q+–¿ÆŠ%/ðòâ¿Öÿþú{ì/jã÷ã8ÎѼškk)ûˆ²p·ðáe{ÞdŧyçÞ·ûMVm-¸ÌRÊþ�›9YÛ~ï{UªjðþëMÌ·¹û/Yio½IZ‰6,"��ãðÌ~1•i/mçÝ“í1G7UŽ®»3(((ˆˆ2A‡ÊW}Ì`Qq5å@X·ú˜¾ýònˆ¶à{²œ‚’*\ør©çÚL˜0“û–ˆaêä~WäÍ»ó²¿8€ÞÝ}ôijìô>Rwœ ²¼”“¬%oà]$u¿Â«_¯±LíUDDÚ\m™v'¶P[3K)©¨fï�<ùSQXKLŸ@,WbÞ5…ؿ̣ÖÖ‡¸èÌ^×G“*((ˆˆ2AÇÊWÿ ĆC$M†¦ÿmòöÆ-®¤·N)ûßz�ÊÛf2<pgëi„ÞÝ‹#ë�aíუ¢”òšî ¹{Ñ~Ž~º�´|7À'zc†Es6&Te±u‡�’ºR> ¸‹Û{±ý£mä: Pk¤Û-w1²OãÕÈÍÉÝëØšU�ÁË!ý¹ýΛ°ºŽ³ëãm¯ƒÛHXÃó*¿ÚDꮸ à1F0düh¢-¥¤½µ�â0#ÅÕ}7*˜ƒm#· 0Ù8n,±5Ù¤mØOî©2œa#¸kB?‚.-µê5Ÿz·Ýì`ÃG¥X¾š|o>EøèC—uücï`ÜàîgWÚÊ/ÞãýŠ<0†;k-¯oñeÜ÷ÇÉq>Yq�¨!°ÓÞ�©w4šQÉR7ì¡Ø'k˜5 k÷É�|øÉa*ëÀ`Xÿž*óɇ{8…<¾ô¾í.’ºWŸÛÞc»c_¿�Ã5Cº`ð@˜6©"�BnZ:ÿ³½×¹‰‚¬C‡øÕ!3wLÆcÛò²Sµ¸�.\•5¸ñP�ŸÉ!gOúöÇb¸U™@™@™@D” :T&¸ê…À ü¨¦àd9y þt?çÍ{ÈÈuPtò£í¯Ll? k3óÞN!7´·¸9RîÀཌì'·,ckúº‡î$Íu3“ŠÁ‡Rö¿µŽý}f0äLoáKRŠkÇqû rÿµš“=Rxàæ`¨ØÇÚ··q¼çX¢Ï´zm6ø�4ý^z›Ýœ:|€Ê¨IÛ©>÷òÀ pàýw¶‘Ûó|j‚é×hz‡À©+Ør¨”èÁ` ˆÊ.3x``0'?]Æ©ž÷òÀ `*3>â“Ìb»‚§ÌC·©0Ä”Çö›±—õc।‡V½æ±D¿ ùÇ¡ÿ=#(9`§¦Wì7¡ 7•M½·¨¬éǽ߹ ŸÚ"ަŸ¦Άÿè ŸäQ‰�⼺†xÈ/†H²)éÁcö·‚Ïñ]Û¨¼a ´P“µ�Uv€"¾øä]ÇÌdHX Ç·làpÞ’¼«é:ì^n�¶à>¾‰UŸgÑÿžç´wÍ—ï±ß<‚©÷ÄâS±�µ+Nh‹*ÒÔ–³+³Qp0ùsk‘5Å|’QJA-€“]§™Ûí2÷HÔRSt’œüS”9ªq�7¦±¦øk®¡Ol4!æŽÝ¬ÊÊÊ"¢Lб2ÁU/(˜Â­Ül)å“òÓ¼µÛÄC7u¡»Pëæ«Ì\Öf»ÁèÇͽ|¯ÈüýcòÎarÝÝ1|u‚®ýFáÃa –ÂCêÓ5,˜òc§9í, <§ˆ÷ßÚYmjjèZ憰¦šÑÁ©BÝnn˜QwÂM‡9UÑ ÓÅÛFLÔf¶¿·�ü>1ÄÄ ÒRÊþüRNå¬åÝõÊYDYµ‘žþnöú‡�(sàìQø€·…®Ý‚ù…е_ý<ýãÇ2àÚ£¾]±àïç¡Æu‰ Öª× ‘߬j‘Cn­ÿuÄ·WCÿ¦Þ›µÑÕ³v}½cúÒ7!öÜ=(A=èV½Ÿ“ÎhJJ‚éWMÖ •µ…»ÀLö·–Iq‰]ÖŒ}ºG`õ*W…•]Hð!:ù^¢J,”oÿˆ÷÷0xŠpºƒ©�Fí ŧK ´ÙêƒP@4áA‡µQé ¼¹oJ™Ë3Ùç�þCoâ'ƒü±ÞÛxæ ‚ºóø¸n—=¼±¦0‹/í¥\h³íq’_Ò�[Ç®((((ˆˆ2AÇÊWÿ�ƒ?·ßÆñÏ 9šw’O`õ3€ÓEñÙ1�.~UFÿ�A¶õüýú¶‡¬ìãøÚˆ½ÕM\ÉÊ€¼!ð†»¸oH—6š¹…ÞwÎ$òôqŽÛ3Øúö>zOžŒ_zßöFvoôP·�O>ɦë½00Êö¾ÉÇ7‹Ñ`„ 5x·|Ü‹ÑdÄãªÁÝhqV×`öõiÝkn)·�]M½7Ÿh†geyvì»X»÷c¦Ž¢›ñ› Ùµ”ÜÜã”™{Ð?ÊÁáÝyäÖV>0*šø€5þ£®ñýçjÈÚ²…²Ø©Lìg�üͬÚr~{ë�hƒ*Ò™˜ ÔwÕÞXLƳ½E€©á|Ç^F.·—­s�¢Qp0øàïï‹ÉÛEEieý6ÍËDp�8b;x1A™@™@™@D” :^&¸&®…a²†ñðíQŒíf&�ZŠ+]»½°†s×€`„‡ÃÉcõ]Q•�´mYTÖÖPSkÁ¸‹°Û‹p×�ßYÆÙyÖd}ÄÚ­yªqQvÚñ­.Ï?*†Àœd•4ü§ì0û�‰ìܺ×ÜÒEÐÌ{sçï#-«š îýxÛ(zSÀ©ês—]x”…“û�à ‹À'(kÅ~—Ùˆ k:¬u ªáÔÉúÔU“›Í©:Àd£›¹nÀMî–·ùä«J*k …X7'¿Ê¦²‰S§Z­Á”Ôï¥(Ë&·ÄsÁ¶‘ë…ƒuïf°ËPË®íûùûþ<>Ûõ¯¤7l¨J�óÜG8.+w1qÈtûxï~ín#ÝF5>~ð %°l-ï¯Ü‰ÁàK†Çé}'Ñ~Ä{o0ÔÖŸÌÈßl$¡Ï¶üãm¬A]ˆMˆÏöͤÅÞEãý Ý�¢ÛGëx; 0Úxgw(9ØLvÈâÓw³øÈ]D7^ëºÜ̘[|º~9iÀDÏ¡“H hÅknqE/¦É÷öEôÜ×ñö<{Ž``À¹OõéÞR÷c\?ìЧ€Ã> ÷n&(Þ2„CWñvV�Ý‚éêåºpãíýøð“¼�CH’{Z1»lløh§‚‚¿áfb¾ÚÆÖ/ºÙxþqCpä#Þ{sþ!Ý 5@íÚVD®¾ èî‹© ²~OAu)ë7—~k›Ó+2øò†7z™1—…°î�ÎÜìmÆÇߊµW",×ßFF™@™@™@D” :F&ðj¸5þêG.x5ü44Œ€ðünþuuu[[:³£9—zršZò²²Y~ÀA¹o0�Œ�¤O–BÜùŸ±ö3_ÆÜsýñx5xÿ­"’fŒ¢›6ü""�F行Vtå|öE9a]=|¶ý(¸o"{F3#)˜’Ó0h`WB.ó5Uå}É�\ˆºñ"Úèêƒ^^^#�J ªáV8©înøY×pój”Îdƒ2�ˆˆ(\×™ÀÝ(Ô6Êgn ¥’Á›î±=xÄ¿„â �6 ¹ÛÞd«ÝBÿ w]â%“DD¤S2rkRý¾ñȲBþUPŒ #7%õaPÕ6³ñ‹èCïšcT9¾¾wzÊ""¢Lp­d‚2BADDäÊkÕÞˆsxpT8qy™ iÏ‹?_jçß¡G(ˆˆˆ(´C&¸öF(˜Œ\n�ÖN¹æ˜Œ—Óé°ø©• DDD™ Se‚v=Ðâ竵SDD®Iê£ÔÞ"""ê£Z§] !� :£‘ˆˆ\[ oBÔÊ""¢L LÐ íÚ“{{{F€Ÿ¯B„ˆˆ\¡!ÀÏ—¨ð0¼½Õ/)ˆˆˆ2�2Ak´ûU ÞÞØB­jy‘ÎÞ” DDD:4•^DDDDDDD¤ÕTP‘VSAADDDDDDDZMiµË>)cqq±ZQDDD” DDD:™Ë.(X­:;³ˆˆˆ(ˆˆˆt6:äADDDDDDDZMi5DDDDDDD¤ÕTP‘VSAADDDDDDDZMi5DDDDDDD¤ÕTP‘VSAADDDDDDDZMi5DDDDDDD¤ÕTP‘VSAADDDDDDDZMi5ãµòBj²³qìÿ‚ªÌLjrrð‰ŠÂ/.ËÀñéÑCKKDD¤“¨ÉΦ*+‹šìjr²qfç`î…OT|zDá«l ""r•y5Üÿ õ#¼~¨/<3àø5Üüëêê¶^î‹(Z·Ž¢uë/ø˜.“&ÑeÒÝZb"""—Ûù{y�*�ª†[ à<€»ág]ÃÍ«QF8“ W*x*+)Z¿žÒÔM}lð˜Ñt¹ûn þþZ¨"""m› Ü�2Am£\pæ\#ŽÿÏ38F$\¬èP±ÑO>©¥.""rªÊÌ$ÙrܧO·èñ¥©›pìÛOøÌ‡ñ‹‹SŠˆˆ´³«ZP(Z·®EÅ„3œÙ9­[G—I“ZôøŒ¿ÍáÉ�ãybÙ\†šzD1kþë¼<—¿ÍKÆ|…Þ§óø–/[ÍŽŒJj-D%$“òÈÃ$Gš±¯xœyÿŠç©Wf“hhå„=9ìXg'jR2Q†KxaŽTž~d1éžF÷¢˜¶ðyR¢¯Pcoaá/S|ÿs,˜ÞöÓ¿„6É_7ŸŸ¿ceöç‘lm»—òeþ—lÿz;ö";1]bÞs87„ßpîw/bæÂ ’󳚞Öe­'-Q�Ϊ兌š5šˆœYÅ‘¹†%ÛHF 8=`”ÂfŽ!Æv;ÞXÊ›Û�âô�½Iž>›iIß,¬œwæñø?mÌ}iÉ–†×øñÓÌ=r?K~œØá6ÌYï>Ë®^?aÆ ßkó–lcéß+7g=Z°¾TìYÅ?«G3ãÖ°«Ü°kxñp�MŽmÛéžÚÌ+/m#$å ¦öÿ¦[Íþ`KÆòèã[ÔNMw”é¬yo3öJ7Ô;æ~&ö¯_÷+²6±êÝmÜýŸçÌ·#rÿô\«Ÿç>}šÜ?=G�'ç·üˆka» à°³ño¯²fÏ1 9€1Óg3m°õ2çïÄþéFЦ�dS>è°ù a9TL}ž…÷G5=±´ÅÌüß &üþy¦Å\‘ö××ÀÝ3Ñ¥%OgõkËIÍtNÌQɤ<2�äHó…óù¬ù¯ßQüðSD½ß\>˜Oâ¦Çy5èW,¸'p’³i9Kÿ™F¶Ë ÞVÇÎbÖ=ñXμžÌeÌùõç¿Äì� I?w5óþèdÎÂiÄ�ÎJ™ ãj²³/z˜CÓEˆõXl£ã&­Œùù‹ õ¶^±bŽ4?³ˆ�¦¡¤üà;D’Ë–wV³èwò§Y\δ�¥²|UOJ&êRžï›Ä£¿~ŠbO[_[L*ƒp3Æ?W²Ów4O� ¿23¸„6 7�Ñï?ÍÊu$/¾ÍÂÂ{ß87œÙ±Ù™>hú·CÃEÄÜû/Ž5c½RŸo"SØÂÇžØÈ³Ïï nÎ3Ì`g>;^û —XYøÓ$ÀÄ ïý�y#>Uei,žÿko\HJh£ÏÞãÏ3 m³>LâùÿClÚ ÝÌìÙ|çÀ¤+—÷¥ãQ&èøÇþý—õÜV¬yy1«÷äàò�!yú\m!õ¹ÇF(ıñ—�±Ú–„Ê-¬=äÀ6|¿úi2ážRŸ–å{ 0%Œg˜g-›L³yõÉd Ö-bÑ;{É©65äažøé˜s*ߎ�ÙYbcüoç‘Ò0sX\ 3Mب?XåìFøß瑚ðTýÕ†ŠóèÏ3³{kþ²˜Õ{spxÛˆ»ãaæM,`ÁüµxàÙéO3ûÕ§ðŽ¾‰cå&lƒR˜ý“)Äצ²àKqÝ1šŠíHúu£ ¶ÁJÔ+Q@þO³£0ŠÉ¿™F¼pb K^YÉ–C¸czïfMŠÁ²{3æ“<µë¶�kŠ'å¿"%ΌӾ‘Å/¾ÍμJü»eÚÏg3&²Ñ¦Û“ΖíØFŽ!ÑÜ0‚dw<)rظ9Ë�G™·“%oÀ=™'žœF¢o©//bågv*M6Ü?�'î‰Á|<•E/®d籬_ž³Ҙג69¸ˆ™ s6.€=»lÌ}i6ÉCllܾ…ŒéñÄ7Z~ÕÇ7³zã!ª�FÜ„pË”’º³íµw8Õ3WQ1%§ÝÄLœÁèèo>NÛ¿ÞÞ쪸ýëí Òß\Äâ (ðøwÇ,æ}%ï=}vO•ùõ9<¹;‘iƒ²Ù�z W�ñÌ}r&I–æÖÓ1°%Ͼº‘ŒBþ}F3ë³ÚøËs+–œbÔœqX¿ú�Õ©vÜFp{G0âþ)$†4 >›6R<|.Ó4ì®1‡3ì‘gˆwYhò«|ÐD“V„¶öþ“�;mLûÓ¢üêï²ô™Â¿OÆtfoÑW›ÙéÊÃðÒæ-�ž@›ìHò�eÜŒúž¦Úþ!«v$2ñæ ‚CþIZ…/¾î è;‘{n ýgËŽ„ÓÅMyÞ ü†Í`b¼/î¼m¬þ( ŒT»#uÏhb.2ðÀ7¨+ÖÀ3ëSÛV®âD—JNùÓÅ…½(‚)3Fx|3«ÿ•�Ñ×M…wSR†æ Åû×ðþa¾F7Õæ˜89ke›ÞOÇ^™Íª’ãF3q ªílzw3'Œ¾Pm$fÌ=Œèn¬µò÷lzô,Ç~Ê ÝG1㶆í®9k(¶à Ó¡6ñEv§bâ±1 ë[6›×ž™§›ˆ[ïaTtێƨÈúözœpb5/~y#�M®fÕ’/ ‹1R^V©òFOŸH¬1‡Ö¾Ãæ\7n|‰“¸؊÷¯á��…`tC`"ïAÄy©Ôh�!¢øK²ªIôrÒɶÆQÙh¯Â;Û8�ܾ$LLaT×/Y±$‡!s¦k 6ñÊ#÷ÏEXC3þQÎl²«K+ °+Þ€mS§±¿»÷RÃW n�ÛÚç´zgAKsh6j�>MѺõ„=ô`k74Wg»{b ¿p3õ f7ì‘OOÌ¿ìXÏûp¥¿<‹§�a៦ãÜ‚GQ1ýEL }ų,þ0ƒ— [ÿ Ìž“DÚ¯�Züv:óÞ`®­‰þ9dË¥åƒ*;©K^båN;%„7rsC”«!oÜýü·¯fo‰…AߛϼñQW&XœØ›Ê`ζÍLÍå*²øðÝMØkŒPk¤Gr \힬–ó #’>mf= r’ñÏgYô�”„ `|B1kwE1ÿµ¹$•ì`ÉsËÙ”U¡‰LþÑLظ7/dó’5pÿ£$�¾p>`ÿFRMxfRLC05z.Ï «v\(´zäK>[Þ·“øÝ¹õÅk"Óž\ˆÃ·!T`ÓÞ&üt{ŸO%Í‘Ä0 Ò )\YWí²‘U™™íúÜŒ,bù6¦=ó"ÏL `ËkKÙt~v1�ã`&–éOñÌý‘l]Í&;8¶¯dé® ÌúÏ<`&#0˜1•¥±q[1ß}Že¿�Û—³z¯óœIäæà4Åß«Ñ�IL¸-‘ð–I»Vóæ~¿ðË~›Bïò 2ÌSxbz˜“˜ûê¯ãÚÈË/o!àÁçxcé|�x“%ësÀÛ 8É8Sæ=Á„È&f�»†—_ÏÀ6e.ÓâÌ@>k^X̦²¡Ì}þEžš@Úë y;“úéyŽqàô žøíl†’ÎêîÄIk_\NzÏY¼úú«Ìê™ÎÒ×6�»RØÉ(1Wÿ"Ì&3fPrã\æßIÁÖ¥¬<=™ù�'cùj-kw;pH%õ¸�)Ï,ã¹CH[µ’-e�¶v9[ wñ‡¿½Ás߀ó« rl­h��ôò¡ÌýÏûém€˜¸̧�’qÎ:Qȶ÷Ó ›ô(�>ò(3oq³%5�j€ÚBÊCF‘òà f ÷%}¯ý[{šs¡ÿ9w/áÙw�ÿÈxq^2®ÔÅ,Ùé8ç1õí¶‡£1sxæ—£±[ËÛ[‹›_OÉgǿҨ4›_}‚›OodùÚŒf^A5™»6ñG<:ëG̼3 WEuãWHNv1‘qç­Hf Öæ:é[Øq¼ñ—2Löd¹¡ñÄ�{·Åúͨ¢ôOwÂðQ$ I&1g3[ ÚxcU”Æ?ÿåfÄ=õ_Öùj3›Ên$åÁR…ßç›8ÔÐDÕ±Œ;‘”;"°°ã¦‚´Ôt¬cg25e)½²Ù´³ð¢³ žÂèF»ÐŒNˆ¸e 5Å MlM6'�PUåË�É3˜:u*ƒœ{I/¨_†ö'~7))S¹gx7üjÿXF �Â;š©¦Ô€Â�b�žÂŒ§2c¬•ô}A€9„ÀŠ,NEßÃŒi3¾)&xÇ2ñ¾$.^°’0>…”¡Ýέ^¤s¨6�q“S˜š2Ž„ ¶®m_l=JJð½%…”©3–Å®,7îC›ø°r3ü#{(�ò/2)®Hãý�¾Œ{¤~;0.(�÷÷4Ñ]{w#!¦„/V†ìƒ'»!êìû®.­¢Û3øÑ¬Gyt¬•½[¾¤ÚÿF’"³ù"Ë]¿,ÙñíŸÈ·v—¥±êùßóüÚrÇ©/˜�tüƒêÕdgSºiS›L«tÓ&j²³[õœ«¶Ý͵S@ñq�öÈ›£6>™ø–VE RY¹>›ø9¯òÆËó™Z@æñ(¦ýl2Q†Æüç«ÌÚLÿ|Iùìo/bñNw=ùb}{m^Ê¢u�òÆAþûNp°ókI÷\™|@3¬­3SÓùÀ�ýÓ÷Éîý?šõ(?úN…l"Ë}mæNobÙª4ù3ž{r®L;–çÖMdø$ó«W_evÌQV¿±‘üKÜ®æçecމçÜ1&f¬VsÛçO.¹…áÄô5Ÿ°4~{SI�ErÂPFöÌ`Ën‡¾YwJÊ×í…šìœKnNn+Ÿ‘Ã�CÐ7…ä˜p,1OñÆýõ{ÏÖ4Úà˜ûŒdLŸp,ÄcûÇ&JÊ ÀnÇiŠ'ydáæÑ$÷ZÍ›¾QÄEšX½êIæ\”xØÊ\g§uVí嵕%*[íj–?õ;Ò`ØÄ) …bS}Äd1Ãî 2ªð·Ÿ3ýo ó´Û9³éŒ1�ä„&ùyrXóâ›dD¦ð̃1õ¯¼ì{�9‰|` IápçHz¯ZÌ�CùÐ0„0è¶a„G:IŠ1³¥´G™“ÙN'*° IDATJòþÌvžÙÍjÇîá›á¢åÅ8!¤qÇâÏСQÄûöƲÆÁ€¡‰Dõ(!Ê�JEyæ„xzûíeãïç±ÑSžHˆï‰ù_«YðÛ oÊè{ê�‰lQ›ô®Iã'�x¦Ìgµ‚�âràL¥»:ûÿ³wþqQUùÿÊü`dPgT0GÉK*P]qS2Å]q3-µMÝR·tw³º­¹ûÑÝUw‹Zµú†­¢µBÒ‚«˜ ÙXAZŽ ˆ‚: óóûÇ 8 ( ù«ó|<.3ܹ÷ÜsÏ9÷œ÷yÝ÷9‡òº`"û¹Å-Áøî)§Ò^j]®ï Ÿî`±aë‚ÊPXŒIî*k’¹¬Ûær34´´1ጄ?è”™«¨8ÛF9Å— ­ë®DV–cªjÚjTh‡ô%7-™ÔÐPn:Œˆ~­tí—º +‡ß~†¥ï–ZŒŽ`bæ>A¬èL[~©kYôì;¤"úOZèHô°DRö•7-¨‹Ú ²Ò‹ž<ƒ·µ¹Ê½‡»:ÓR?ú*k1ºg___W�+�:lਡê| %Ÿ¦’êX@ª1wBúõEáf‰©¤°:@F-E»S)RȨ9kÃÏáÊÃaǰ77•¤,¾ƒGñÀ¸¶ý”«ÎÕP[�Cê)W£+õRPã_@*ï‡vð�0�À1L(ßKÖÖ$j¥~ ?‰®õ¤n½ÛŠ<?Ÿ‚{»šA_)6³™Ê3§ð ŠqåmïHâã�£i”WÈzËÝIµÙ°i« ?˜€ðj³¿¡6Ü�‚2?BÇÉÐ7ƨWª²w²5_ŠÔv†z«Šz¤„ &ç«£Øt})ú^A胭ô${F0cifCÉÿÉ!ø7:?þò:äJ^0´^G¼¯Y½ëÕÎ×=‚îQEöë+¨6œá‘qÄÞ¡Dnp‡-SBõÁÖÛgGXÇíJÑ–‚n!±¡þ(ψàtR‹Š1Ýï:"0*†p�?š;ák#UUÅ?Š}Ж ¦¼¥‹m¦Öìj(/—<Üý¼ú,/ ¼¤WÙ>hªd.QNùÁ@™]EôèøÀø»5dîv® Ö¢Þ“KÂs¹`2A�Zªìà/é¤}à°tÎ>è,mÚ&ô{‹4f>j‰šc‘²ï ƱãQ#øi!l‚›VP¸"œÎ+®p,& ­¾^“Ë‘y6ôvךÍDwX¦[HÚ[Ç”5‰ÌTe²|QâEÁi!·(üÞÂˆÐÆÉ`²IÎ�1SÇ_\ÕÚ­î/òà™¬^§ã`žžB}6›^ȦøÅ�Ä·(X�¡È£—L@ÖݧÕô2¼ï²f¬žÆ@/ç…ôð¬—Zü “ºÒCæ.5N[×§e;€Ç3é‘Þ^NdÈ‘I�8eRWÛçtR»ßeƒM^½™™ªLV,Nr¥É ‡ø¿µC\6Óa—ÍôíÊ Ä;›?3H4Œ[¾¡u›É3MZÄíâzÙ£hªû[Ùï>s z ÇÏoµXì=𢺥©Ži£œÊ[Ư•rê´7¸Žq磥Ñ>°ÈLN¥0` ›Ÿ‹æØkóYUØYûüƒƒ±ä¡”p�y*,”P†êZµ é䜒@ýJ(>b"6ÊÃN:[L�YK¸O.9…VJÊW±ôCÀ^‹õ¬•¼³ã‰=쟭•Ý>—é;Ú°ý¢yxv;¼45á„ÔgñMÑ)Ê™ ­u f vea¼}7ÙîX NHö~ŠN`è1Œͦíjn(n GëÈ ¤‚U×6}¯™žátÏ ",Tßå‘k0bعŠG¼Hf;]£ƒ!7�»¯”Ó…9ä6zSZÝ�ŒvçQÔÖ5Wf•‘Sˆñ« çÕõ¤î9ˆ~_* k“H?pÄ­–7VŒ*Ô=Àt¤€‚³¥dï+hRÊOïOfczƒ&ÎaáSñ„ɪ¨¨0Þ`7RVfÂr«�¤‚Â}zŒÆRþ¶œM{.=ŠÆò} ß7 º{ Úê ][):†”S¶?›‚ #ÅÿÝG1AD„]¢Òï©cH ”ååb¨6rð­U¬zKßü…t5Jª¨2ZÚ™oV,�il.%ç@1¬˜Ì&ôÛØ~DÅø yjV*ói*Lt:M,F#U¨š�[Uì[‚á”ËõÈüC µþ.·÷Ë0ò–‘�ú-(T‡Ò]ÖŒE)¬˜·€õLW\N›Jjá^ô•`5µf-E¹ù”˹+†©÷öåÌÉæ.úÚ˜XüóI<äNK÷¤Œ {Êš®ÓdDõŽaöÏ�lÿ÷ÁN9' ŒbâˆÓ¼ÿF&S£˜�Æ+/o§ ÊD^n!º_¯eÃ?^⥼ÄK¯¬d‚=Ÿìï» SR�ÁÇÇÍów�üv2Éo'³uO hÇãû;v¤’úî~lQ1„¶ù¢Ñ—aãÃ1îÚÊŽÔTvìÌÅP×Uµ·ÚÁ6 ve�•]€ÍO�!¯#®™~SSSIMÝÉWòpBÝo¤Zú2HÞ‘Jꞣ˜¿{& =žÊÖÔTRßýˆÏÊÍ]WÑ—î'5u©y%Te±#5�üS€í Ÿ}´ƒÔRٹLjöN-RÇQRßÈ¢Ä\ÀŽÄ½TVí'y«žÎÅæòå¸5ü‚úQ{ÂàòQ•ÏŽ­û©ô" ò(GkÝ�ùçYì/µµ™'á!f>ÛSNÀmÁæ‰�šz)ê>¾€�’"µ�†ŠW0ÃuµìÏ8Šïí¡- g¾ØIÆç•®… Ï(±¨ðóᦢã^‡— ¯¬cá…Ai.lªwÿ8ÿ7ü£Cõn!ûÜõî¾6êÝÕ`­35¯5ÑÄޣ°ó$ìÌEŸ—MÊúWHÊɧÔÚ¼Rñíá 玠?aİ÷SŽ5vOd³é�l¬Ã♿ø)bZ¨(¯p‹ýuTUžÆ¢Ôeù�íóŸùsËö¹û`ÓTwE7·ªƒª�âOÉ&é½bLv·˜�³‰õo¤¢e˜}Æ3ç>#)�µðgü¤p ÞN$·Ü]nŒ¤ü#�ôb§?ÝKIÔ6&¼ÌËÿ|™—6²däiö8-z×?9®› æ· ®™‡B÷!C¨?r´ÓçvÝCK˜Y¹‰” °úh‰zl ±\òMmSŸfäLæXÇ–Äg0„Æ ëe�bAfé/,ãÈó™3ú4IÛÖ‘v×â#ÎüO#KÞÎÇ›×S‡ MèDž~t&Ý=g«Uõ‹X²7îâ¯Ï{šü°ƒ¿N‡:c />–ˆI¢B9‡E‘JÔ•Ã ï±�”Pþs9óæHضž»e ‹cáÝ—vê2`°ûYµ¯q¯œˆ'ßbùâ…TlJá¯O¦ƒJKÔ‚%Äæb×:Ñ&~ñJ7¤²bA:>ÁQL_ÜÂÀÐhÑ©,è�”AT{Ö6’1q C ÓYÿ‡cÄÌ�Ë”ÒM¤¿ü¡�Q•´ž;L  "lúBÆk@ÖŽ4ieúÖ>èšMèǨIÃIÍH"I&ÅF1SÃiÏü©·ûßάá³Ú·,”gY5‡%ß¿Bâæ¥,@Ã�ñO1o´’ºí�/§Ž&nd6›¶ýŽÃbά·m¢[í÷õ)!-ñ0ȥؼTŒœÜÂu8 –§ÿ[¶¬bÑ›ð’tw<ËçFàÓÊÛì ûç3úÙulч³Pw±ƒ‘û%N3šÞòË›û³w¼ÉÆgÓ09•ŽØÇŸgŠïAþz,Œ˜'TÞèx $fLwþ‘û-ñANLûXTè6Ì%þŒòOLÜNárØ,–kýÅæm“fq[³}N¼#fñ˜û;þãøÍt÷Áþ÷0í‘{Z+×>U…{yÐõuN‹ÏØÇ¸µé¸hWŽ:Aõ³Ø"•�N ×p||x³›qzýàœ÷è„nAÜ÷xP'âëAàH¦Mki ;qÆ”‡ÂZ콕i \wóà<÷mÎrDZãJ}|JH÷,Çá<§ov?MoCÝ1�Ü6Ž˜ï> ùµÏ�¢@3�¾J_î_Jú¿_'_ ô çþ0I‹·ˆÂë‚ôp-· �x\GÉmwõ#å?¯S®V|ç(B‹rÈøìVfÝíGß°8\Eø�áâÍm?Ãï°ásàKÈ}r«ÌIÍçï°åÀ)êk�˜ ذ'ˆ1s§Ö~ÃÂÓ³ÀËcsz|6nž ^­lWä¡ÐÑ9.Þ‰’vyl8ÝÞQ>#góÔ÷¯^¨wcžä×÷úP·Ãã-3žß/ìó1ƒÙÖ³%ñŽ…Æ  pRêgÿ{™2£Þ�9œÄm›HØ3œçÇ4¶Œ*F/ü–­o’¾s¹fªà0úÃ<¦ rb8xáš>�Ñù›HY±ŒÂ¸ñ íñv'ÎþCâ�Iò²Y$Xå¨Ç0ï—Ãqª|ˆ¼%“ô7Ÿa“Ï<±p6¥=ÚçECñqæ_ð2h‘^çŠ 8ÖàlÅ>ø<ÿæUmâ½�â¥!<æ �Õà´i^S¸Î@¦µz}�gÛOË�^ è�”âŒÔ^”Þ<¿h ÛçžÉŒó°Áfß{ФmëÈ{!U©§Í4›…÷ø ª¼“0_·}ð�çùõ<¯xØOÜ¥j~cš;rŒ†Þ éݼ.8æ~‚ÓÞ!é;X¥ÇÆ1Pb¥¼ITo^74žª eæ�39p¢…}0`$¡šÐ‹ê–¦ûm£œ:¿òH�t£›û|ÍxæL?̺÷_aEÑp¢úAÈ$:bï� /eKË#™3+ž’×SX¿9ŠäÅ·$ZâŸ[ÉÉ,{²ÊUk£™³b&ºV&e ºÑ�öA'–5QŽZÈ‹æ-$­[JŠ�ù>eKbLd>[ňG=Wu�q_[’öQ:8•Éê%¹�ž šò<Ë'þH+Œ®1m”ݳúKw’Ccˆùîý 6Áøxü|}™0¾”4›`RxÛÝi¿p—Mz‹´Y|BïêÇ6›àö¢2> áá{üð wÙÃt-ÃUzßÞ÷´ f"w-Ï�ÜÒ&x4žð«$6´åÖèåa8H܃—?µ7Ðݽù8�Î}�jðKJ(Y½¦S‘îÐZÓ]A…ž´½ÔwÅÕSO³ Æ®cãl­xF;Hñ[‹X‘ÁÊ—ç~½¬Ýc) qé*ô#W³±‹–…º&\ÃrÚšñît:E�Ú�ñÀÞ­»�ß4®‚q�H$?õÐP½{³¸7;`s¶&(4Ú·M ÷´ ìvûÿ:—«×`)-í²{“1`ÅòkRï¾òÜ+Æ®eÃ#Â>è°}�¼˜?æGð§—æ]WöAÒïþŒ~äÿ±á‘Ø>°—rðÃ}TôGìpؽö÷l©ˆ®žB¿n/ÎÒ­[7Q ‚kf$óNÝ¿Š6A·nÝF·° Ü6�ÍÃ&pÐüeC“¡Í<¼ƒƒé=ùÎ}øQ‡Îë=ù�«+&¨4ÈKSH~?…” ›É’iÂXè º©3‰Ú»‰”¬)„O¾>”àÓY)䘣X8Ywc'î5*§-…ƒËý/Ü8Ê9°ý;™ò`¿«ý¬´ô6hü¿# ýß™{�ÒÐ¥‚BàÕKË^~ÈKSØòÁv^AIPøC<ù‹�¢ÞëC¦dÊ;î¸úÃÁeÅ„K}^N\×\PðìîÏÆÞC£‡B³þFK¡¥¨Ð™Ž¼,0�?ËùÝÿ»â›ê5îgÈ…  ´CPh¹¯µã…¨ nAÁ% Ñ@ ¸AÅ„–ß[ÄÜ Áu×þKY ñ@‚Ë ár“2záò soR@j·Û;™ž'Rýå—ØÏžëô Iúô¦çĉt6ÁÍ."´&$tëÖ­ikKL¢‚@ ¸!�@p㈠žÿ·G«¢‚˜WA ¸®�saL¤ÃC0°»EƒöÌ¡ ãÂJr@Þéμ\NŸ‡¢ü_:}Cý}är!(—<ÅO1ÁËË«™�ÐRŒ¢‚@ ‚‚@ è21¡5ÁÀSHhü-AB \¼=„¸0 ³×L.=‡‚—‡  p‡çm³Ù:!ÙÀ�ø=ñ8•Û·c;gl¿!Ó[�ÿ¯�¤_?®äúWÇ)r’>A1}6£Ô×gm…ï²éxONÜž£)ÎHáô°ÙŒ U×cæËÔw1ýl6£út^DhKTðòòjút8Íöy¶ÏÍ©P¡'cOGK|™´4ž¯«�×âš­qn/IûòðÃ(®ëºÆ@VbÚÇâq÷öj¿Îb×G10’ß6ÅßÌÑ=¡/6P:�yÑêfÏwÑÎdʇÏ#fÀõñ<èS¶R{ß<ÆôµƒÁM!,xŠ ž"‚çÿ—q¹°Á�*(8[ �s)4n´ ¹‡‚çêO ÀÛjµ^™QrË-hžzŠª¬O¨ÞwùE¤zŽ�jÂ}xuïN‡®]v€Ôý'°98[ÙÃèÝH•"•Éð–X¹Â¤j¥Ãµ��Eƒ˜:¶ÿ• )>Ri»ÓsÐ}1ˆá~Z¥�¢?�û&ê}c=p&ýNöõœÊÄ[;”Øìl¶ö¥¯§€`>üÛª£yl¬« ݺuÃápàåå…Óél€fß› �h"˜ïGÆùW/¯Å5m2RË9cWKÿ3W•ðÕî4ö:bXÚùŽš—– ¿i¾t¸ïÐ Äû+HúÄs¯‚�±ñûle«ùâú*têvŒ†òr,'˱–—# @Þ?!ïßß5f££×ÕÜMÜ/îlT䥳§_wõ²b­>Á§ŸäqVª„zþ#&(áhÆ¿)쮥w·*NÙ¸mÒ$Â{Âùo²È*2£”5ÐÐãN&Œ AyÉ Kðíá‹wcÜö-i;ŽÐ«wN šnTô¸—_�ÖPq8ƒ=ÇÁÛaÂ4–)Qý‘âºfÎw6¼¥6dCˆ¹ï6zÕøtW!†ú¤žSâ;è^bnï 'øôã<*¤ÞÐ %xôîö—‚!‹éMˆ½„“è>‰±ƒÝEBîK/¥×å…Ÿfp¢¼’>?ŸÇ„[Ü}°ÊCd}z¼¥4X•Ü9~,Ú¶å\)™g¤¤¡ú$g{�å—£ú#­o-¼©øòCö}ï†T¾‘úsç}Q �µÙ…Çð¿,¾¨– ±7 º— ÷´vÃWðîñÞ«ì˜NŸF1�˜ÁÍûÖ¯IY;ó T+SIýZÁ€»&p§?ØN"c¯”Rl¢&ÞËo'óÒÙsÒ›>=•˜� ø[ÛÚ†`µÙ±ÛlM^;�"ÂÙ¯v±÷{; y–îáL¼(jû¾Èø˜"§µRÎù2/F-˜Bˆäâk´=ôÁFy^*Yß�ÂQ‹màfD#ÅFyî2Ž+ðëÙëYêØÇ‰éï:§`ÇßÈZ̼{;×e7~™FÚWõøÊ͘{F2õþP|©åè®�ȯ•¢p˜a@ S£�šKØ›¾—r©Ì6î�ʘmù)Ø•Å7?€ñݽ#˜8>_ÓQöî4`¬:ƒyÀ$Œ´ö(;÷S#—R[׃ȩq„«l¥¾ŽÞ'?/3åeV§Å¡jã’'óÉ)²¡L�c—»óZö§ì ¼·/Ugº£ímÅp.€¸‡GáWºŸÔG9eP0æ÷3ïLoÏ|”œ�ôÊNá÷ÀâÜK¶SûÙ¹»RÌ–D>0�ßKåÃNò«¤Hmf¤c˜zo0Ò:9é{©”úB��€±S3@ÚFZÙ(ÉÝAÖ ~ªÔŸ· ÚïëŽn4óÐøÝ«…á ma8two>N§sßõzsùùù"‡‚.¿·6ÄÁn·ó\ÿ}æ«Ù¢��à†å._~ý«p|ÎFòÖsÄ<5…AR¯‹æ\hút”�ñF>!¿i~P‹á³ÃC  ˆÔ׎±(­Ãõ}Øq„PBÖkiH§/&¦Ÿ»Ûn(àL�PBú¶£×Ûòš–"Rß8ʰßÄ"7Sðn2%Q�3©¿kÿís&êkÃXa£‡Æé‰ ^?Ð�ã#P;ŒTÖõÀOu‰ëÖæ³õ“óðP8·—¤íf&=1�[©‰"Ÿ˜DÀ™"¾ª &b°/•{’ÈPÌ`n”‚£l@ëãÌWP™ëÞ�ï¥ï³4‹×ó‚™wI…Zò“w`›2 þ“†tZæ÷³P?2ƒp9à('ç�½øÍo!(œÙKÒ'¾<<³ù� óg[ÙjžÔbÈM�¢Ûo*÷$‘áÇÃÑ~P]I�ܵWù`Ï`á`æý*…ÃÈÑÏNÑ÷žPÌ{^'Cñ óFª¡"‡×?VððÜHÊ[K«; ìx£„È'&¡õ*'ëµ4>.†aÁsÎ�@ 7aÖÎBíë‹Z]Nþçå„ÜBäÐ|²RRñë­Æª�zx$Ø(ÍßI~P!}Ûá§ÐòšcC‰y”Œ”è}ÀìLÌ~øz™)ÉÍ`¿—©Í º1{¶3|¶k/V…Ì6´£.ÝR£õ~Ÿw¶–Ó×7˜ÈFÜÆ¡ƒ‚¨Õï$㤕´¶âÏ8zG‡€žÊ'-×@}Ý)ŒgKH}÷´÷ÆÙ¡yVk)úd_UÕr¦ªÃ;8Ò7‚Æ…¸<|ýð;¿—Ôw ø…MdB¨«{.õóÖ‘ÆŽ ?BÆN"¸$ƒ½ßÕPUn¤öÜv|̨©£P ÈÚ½©l?"&ú‚¼�|ÐŽ!æÈNv¤|ƒÂaFzëB½@5�à�il=é f?µm‘@ʨ¡z2¶î oo5ø€B˜š×7õ � ë„K w°ÙlØívl6�æ'—Fb�@ ÜÈüi´å-�ô²óŸ•Œyì>úK½šV|ðÜš: my+´ìâž*¡^ŒŸÂÈþ7Ó`Ú\F©Dš ×� æP?¶˜p¹cZ®à �àÆ¡æ»\²?÷ÁÇ^�òî)ôóêÂÀÏ�ñÉ~× �£˜*Ä�à¦âº¬ç 4”†åL!¶óÇ]‘ë5yß0¼îAÖK+rK ¸Îh¹ ¤�@ ¸ñ=�AR)R©‰DÒ¥mºïÐIÌ*ÒX ‚Â�Hí·;0}ûÎEû­g¾ÆzækLßî@yÛ |o{Pä˜@p� žÿ AA ‚·]omž¤öm?M¼®uÎîþC«bBKLßîàìî§EŽ סÒÚw�@ 7W[.Úy�@Ð’k*(Ô~»£ixC{°�7PûíŽv_üÖ"¦?’ÀA{[GIûãtf­ËÅòcÝ䡿NŸÎôéÓ™>cs»ŠMcºÜygõdæ:/ca* Ë1wÖtfÍ]Äò—Ó(¨vÿ¨ßÄÜKI1´8©>—5³¦³<ÃØ‰›³`Ø“†¾¢#‘ÌeÝc³Xþái [—2}þ& Zæ�;®Éß_¯�Í…rSúárf=¶Ž\c×^á›Óß�”ŸÄ3ÿÈ3ÿHR~ßœþæâMÙ¬š1�eï—¶X[yßeT‘·#…|c'Œ £ž”¿-céÓËXöôR–þqÙ'®ðiÔobékzQ»wŠ^LøÙ¬ÿõ’þŒÄÙwóÛ{ú ñI#7³¨ íåš y°ž7´Ë3á¢þÓ·ïàÙEs*¨ÿ» Dy©‘ÿ¨w«"jÁâú™0J#åíU3¯fÝô¶ïáô�÷Ørh Q1ÚöÅÍ�Êš5)‡LaæoÃQÕèIÛ±…¿®¶²vMáLyüiâÎ&°ø­#À²bOK_Ì£B¡#~éÓÄÔ³é Ô>²™5“ԜޗHÂÛ9¯‘¡ÏÂ߯¡ën¢`{›>.¤ÂîÃ�qóY6[MÚï×�]üeµË¶1ÇžH¿s8r”�É_¼„¸Árˆ½€ÜhF�'\†wW±l·Ž•¯/dPa2«_ÝÅqG Q‘ž«Ñš(Þ¹‘Mé‡)­“¡ÜEsѲs|(�¹ëNýK5úcêÃü_)ÉÙœN1:Zñ<Ÿ¯`éÔ,y}9ÑJ úW°æ»XÖ­‰ `ã&R—bòÒ0dÜ–Í�Ú^Jö«ëÙ’ïÊ÷»êÓÉU.dó �Þª<œèH ™r)ž¥Cç™÷µGÉú CƒR‚£ã™jeÿ›ïsæ–¬çŒT�µ¡�ô01.<Š~8Ðf1>ðÃ�K ­äÓ£#Pnᙿû·—‰Ø³ˆ‡Â™9¼„�³�c žÈ’s‰èi¡xçzÞ-¤JÆÄP#éùA<ŸôUže4Œæÿžû{\÷ Ÿnù{ìC„Vì�ÀYí~,­f vë‰oìÖ�u—jC&›’²9-•ÁÜÿøB¢{f³f¥�¿‘²þw ;pŽ) —†–m–³dZ)kD³ñÉ,GÒHHʥ² X-O�¹€Ô�)|^ 8¼ÑM}йQJŠß_OâþZd+IJ¨µgùÇÂKAäèî<û=ÿïë:¬ž¿ùôáÁŸõä/â£SW«ïÅÐ:î­?ÎÊ´”¹½ˆÊŒ5|}¢†ßćòðÐ3¬-0‹VT �à'Ì5s\µœùúªž[ün[¾Ò0sõVOò%÷Í$rζ8H¦¯� œµ’ÕÓ©Ø—JŽLRHʯ%lþZVO—S|Ä%Ȫõdî¯@ûÈK$ÿ%l!õðåܵ•èÂ�©„Ò*0ìË¡Ø;šç7of¡ö©Û2©»„…wËá¶9løK<šÂl²Ohˆ[�ÌK¿R¡ß‘Bnµg˜FJËL0 �Çk]eX�TQRrÚÝ¡/¥ØÅÓkž&FQ@êÖlN{s6“×^ËÅ÷W/±-i9ÃË·“øQ)–C‰¬ÿàºÇÖ²aY4ÖìM$ bæSS’¨ÿÜf–Ým s[u‘+I~kKFÉ)+j1d£Â@q•Ý�ÀæIb7�–œÎñ>SXù·%D˜Kš†„Xô[X·­Í´ÕlX·�ð3é¼²9›‹FxÉÁ~œbk,Ë—F£,É$ñc9sþ4�áŽR3 3ž!ŽB6�¥˜¼/MEG£9”Êö/5ÌyuɉgPM1Åg]ù¾åÀ…|/9îÎ÷—ÖÑ"?{ŒâfåɆaO%ƒäñùóxü¡P*wåpÔ8*©Q�!þWóðH‡›�E0œk{lÂ¥~k5Ÿòš®‘ËäPù9Ç´‹Xýl êãé¼·ÏgsHÞ¡‡ÑOñÒŠX¬G q‰A†}»)öŽæ¹7Þà‰�Þß¾«y¹iÂ̱¯Žv蹌˜:õ'+˜ÿô6mMãࣻ̔’ž”‡vñ:Ö¼¸†“!õß¹˜¼äpªåô5¬|xQÅä¹Ó&O�,j´‡7N)éI¹=±Žuë_dzŸÝÁbÃÖ£¡°�|j9�€"œñcƒð'�2“bcü` Ì®"zôü`üÝ2w7–Ñ�¨÷äòÊóî2ê[Ëy;ø]4鳂àA½;éãYö¯hNÑsø«Ãìze)ÛïXÂêGL;^BÙ†åpXAˆ52å tÔDDiH?T aJöeÄüá„;ìzǪ1~€KÈ‹˜½œŒ¤½[Á±Âu,Ïq÷�QSQ£%jè¶ü%�âQŒC¸úêÕ‡Uße«¶¿Öz9&‚ߢç_ßwçÁÉáLö—€¥†÷ç¨ýjIÍRTÞ6ŽT;.Ò Óñ°N�¼Ç–þÌÊæ½§©C�@ „ pãЉq]- q‹ÉŠÖz‡î7Ð^ò¦ó,ž�r�°L¶�´·Ž)k™©Êdù¢ÄvDÄDáWe ŠF«2�¹:•€%l~.šc¯ÍgUáÅgèßÝDfù–¿¼�°Ï×ñè«-gAôG;@ (¬Ž%Ú-4˜Š )CEô@5ížÝQ¢!fÅFæ‡^ØUœ”Ò<íêM Q¶�MÔDÿþe4rÑ’÷Þv}¾� /Œçòý²‘s´#ÏæðⓉ±ƒjâJïrå‘\ÈeÈ™Ì-5•r%#ÆE±åõ\ÒTeÔ ŠatÀLV¯Óq0OO¡>›M/dSüâFÆ_¦ ]Y‡­íŸ´½µmz"h{kÛ_Æ[Í'@Öèe!»‡;ÜoÀ-�aÙ dnyŸÂ~OñƳ£ùþµü¹°í(¨†MëX:˜LX”Jü‡Œ vÈb' aÍÒl fŒE8­ZÂÏ·òõ¹ “5½ÁWGF¡ÉfÄskˆp•ª4{Yëáþˆ&Qa}„MO·˜�ù[°\½*Öa¡²^NP)mÍÎãE'9ªó#Ìnâ‹ÂJ!&�@ ü„¹fC¤W0©bÇÏ ",Tßå‘k0bعŠG¼Hf;W'„Ü\@î¾RNæ�[âþÁÚ8ÒÙˆawe@m]+F¿Ý‚ñDÅ…z²ßZMâ!+C&Å.±`²‚L–Šƒì+¬s;®“ñ4ÕµX¯c.%ç@1¬˜Z ]Ÿx?Zk‰kÉÌÓspW"«“õXCâˆmì8Ù+8¼GÏér=¹‡+�ëÐz–€[uè$îÓc4�ò·ålÚc$(T‡Ò}ÿÆ¢VÌ[Àú&wç³cåi,õŤ½šˆ^MücK˜7&ÎTPåÙÉí¡FIUÆi¤„ÖÊ>Ë¥¸¢”ì=MC´aᨬäî-ÅXv�œÃ(C#Ðõ‰bÁ +YùâJ–MÔî’ ¼;†ŠÃ¤ï®@�?pz2Ó+4q ŸŠ'LVEE… Í-rk1¹J9]ä‘ï-壑*T¨{4Xl”܃3ª ”Øîyù8޼ed§~k3ŸÚÃ-�T¡ßs�Ò²ƒäªh{<Ëè§__(£Ë|µÍ;Ü�N´�”–‘tèÂSY)Æü•ZiŠ9ü¥«¬Xޤ‘œÓÊJ=GÕ·˜Ì?Ç{dTsñª»–Aªc· Þ^Ebží@9…z÷pœj=©[b¬. m§Éž6�éC«(>a¹º•¢[Tøß7€—÷µìçÙwÌÆ�‘ÚRxµžç�� øû‡|tF¨ �@p³ &b�ê›_« ËûÅÚÉyä}‡vøÝCK˜Y¹‰” °úh‰zl ±�ÙžNèÈ™Ì9°Ž-‰Ï`�A×Êeäb2HaG˜ÏœÑ§IÚ¶Ž´»ÖàBy›W‘‡¥f ³ŸgþT×HïØIܶ‰¥åQÌ™OÉë)¬ßÅÚ»†£9œÎªÕ¾¼8g C ÓYÿ‡cÄÌ�Ë”ÒM¤¿œLÄ?ç^˜PÏòå°åílR2±*4 ¼k>+gǺ&–sX@„V–ͪçS¥Œà¡91¨É»Í>±Ì›o aÛzì–4,Ž…w«Q*ç°äûWHܼ”h2þ)æ�V‚%‚¨�™¤¿ù ›|6{+lz}1©Õ ì§c⣱h=ß.k´èTôGÊ ÊC’h‰�‹~c:«žÓ=F‡ØA~÷–̨%iÛ3,0ËÏ’Ç£QJ@æÑ},ooá gôÝ>dïÄè‘®óýu:Ô[xñ±DLÚÈ9,ŠT¢”LwåûÆg0„MDìÊ÷–ްô‰@×§ù~íØIï|‡¤ï`•|ÿT´Rëe£z»ÿíÌ>‹?hòTÐöÖ2ò–‘—\áA9ª�|ú²é¢ÏÜ_fÝû¯°¢h8ÑZ �L¢#ö~Wý]y³gN£äõþ™t‰�ßÑ2ôî~²ý¥DKü“ñ$%­bÑÛ¸†ùøèˆ}jZ‰œÀyq$$­`ùû2¬»00\tÍ‘¾$½ieÎ#ê‹„Ä)ó¢YÿÆ –²€ñ,®$(t#^ÝÈŠ?Ê�Y½4í)Ô=Asæ^|ú=d +ôŠeî]ò«_1ÚëÈÚ¥‡‰ü:ØrmÄÍ/âCM8¿û•’O *ùºüüúpg¯ólÝu‚/N‰T �à§N7÷æù?¸<º¹?%náAŠËïßèîÞ|œNç¾Î\ØzÞÀ¹ÝOw*ҽǭï¢e#ÛI…ž´½ÔwÅÕSO³ Æ®cãlí _Lß§ðâòT|ÛÌʉ?þ ñâ·±"?‚•/Ï'üj÷×ì&Œel_»žÏuËIx2¢“ÊÉ|q[Kxë¹è Ã,$.]…~äj6vѲ‘×{)?Ì¥¢_ ±Ã!çï¿cKýCüsõüi¾Œ”ÓéÄápàp8°ÛíØívl6V«›ÍF``àO®"�ùjv×(‘èë ì¼íÚÞ˜DÁ�wh™0¸Xkk8\t‚�¾­Á„@ nÖO» ©TŠL&C*•"‘H�H$xyyáååE·nÝèÖÍÕMhù)npA [·Ñ@PïÞp�I·¹7;®AéÎp =d½´(o{Ó·ïtè<åm^]1@¥A^šBòû)$ $hØL–L»ñÅ줬M¥LÁœaWg:ÝÔ™DíÝDJÖÂ'û_Ýû=žÆªÒ1Dzð‘ˆ.™¡þtV 9æ(NÖÝØeA¢Fm7°ýõ߱Ūà(æ,Ž¥£9$Ü%»êÙ´Pvþzˆ‡™/ôE|¡Y"73¢ý�$¸F �œÝý‡v¯Ú í5�>ãþ!rM ¸ÊF{=¬V+AAA?¹têr�@ ®"ë~©C&“ �à§(\¡‡‚×µ¾�>ãþ�ò¶/{œò¶…˜ �@ ÁuÂu±l¤ïm3ðˆ¤¡<Ë™¯±�wM¼&í¥EÞw(Þ‘W˜ƒ@ �@ ‚6‘^/‘õÒ Ñ@ �@ ‚/‘�@ �@ :Š�@ �@ t!(�@ �@ è0R‘�@pe¤<9^$‚@ nXJKKE"‚NqS ùùù"‡‚+Àét^ôÝápàt:q:�Øív6› »ÝŽÍf#((H$œ@ �@ðà¦"##E W@£ˆàùét:q88ìv{“�`µZ±Z­"Ñ�@ ‚Ÿb�@ �@ F �@ �@ :Œ˜”Q �@ ø óÅ_ •J‘H$H¥R¼¼¼�H$tëÖ�nݺáååzÙ­[·¦s<¿ ‚ë�«5ü_ �à'ƒÓéä\u çkLWõº½z(éݳ‡0¾:ˆÝá ºÖ„©ÞŒÅj»*×,+?M`€ÿU¿×²òÓl ¤cxx¬š£Ù;É1˜QÒ�âÇj©Ùý:I_+è¶ð»gqwøµ~åáTÒ>«Bêeƒ€1Ä=ŠÚ�AÂ!-‹ §ö³ãÃ3D>GH—ÌñTËѬ�¨‰ÝŠï�“y`¨ç)¸vÈü5<Ñ u€Mpw\5!ã —š°aA¬æ~_•çÌkCÏ�:ltÅT’²A¡üñ�~¨&>H=Š*RǸK ØÕ');b¤J¼ðn^lõù¡Õ-½Ñ4YóVŽŒÔöêCXo‰H#�@ps Ÿÿ”hmt‡Ï£çÇ?e¢nâe�]µ&›*;d¯Y¿Ÿƒñ_›0ŽŒÅ·8—â*%Ãg-gɤ o-bÅ!ña¥dî-C9�ùCòHÜVˆiÀž^1“p¥‰ƒÉ)˜¦¼È ƒ$­ÙLI=k})‘Manh ïOô¡E¼âXÈ[Ë¢1$-bÅÇ0eÍFædÝ‚M°h3KrØ´á=òNÖáÓ?Š™¿[Èx÷+,«!�5¿ÝEa•аYËxz’õàpÔ&= ¯V ›ö<Ý妭f]`1ëi»s{b/©™E˜¥Rl¨¸'.žˆžlMü?­”šê*ÎÔ3k!>Î;ðÃ�6Ã<ðÃ�‹ù€ptÕy¤ì*%bšºyÇ\ŸÌê�»8nÕ5.�â� Dýe#c>[Õä¡ {+…3sx gÇ<‘%+æ¢3$²l�žðg×±PWLÂï×P¹’�óÂ/´©E©løf‹§ªÐ�Æa#à°á;t3¢ƒ= y)9» DÌ[æ”Z➈ãð³™è§ëh Õr"�õoW÷Ì2Â;èy¢™ÀÃ!`û:• Ç"˜;EëVd2ÈøAËœù£PSKÁ'zJÌZT@À=ñÌ�òs;Þ8ÀÑð8BZ{Y§'+Fýf¡ŠZô)Iä…¯pÿ^UÀÎŒr†M�ï"1(ÝÏîªaÌy$ oëÒwó�î jõi׌û­+ùŒOþW€Ï½s¸oPª)‡ ›CŠ´£5[å—ügËV¾¸�çâµW¿B´ØAÞ^ã¯�Ã{ x燬N/Cuü&²7JÑ€ýøB†FÍ辎ÉÕÜ¡Ô>2üÚr�è.éš8Z­X€Í†Év•†YÛ HÞfeæìÊÞKæØ„¹ŒïP]XÍ·ÿIæÃÂjlÐŒšÅÌŸk±}ú*Í8Ko_™ë°�“Y<óº_å¼4Icã[¹TØ]éK` óŸˆC§lïù9Ögá}<Ó¬˜Ä'WqÐKƒ¯ÄõX«ÂâY² ÿ®èÛÙÏRðŸmä|WR°Ú|¸uâ,~qgŸ®O úClÙxŠñK'Ó»äKÊTwp«ßP� IDAT}Q}’ïª`ø¯FòËÆw§�ózÆ Êúá•_‹)ÁÍ-(”W—£óÓuø¼~=û±÷ØÞvûüï£YðO1YËÜà<Öeg5¬ýçFŒo.cÕ¶-ä�]N�L•ÅT [Îò ¬ø ‰”>ϳ|©š5ëÒI?GxX.»N�à‰»�¤ÿe� Ö°°_))Ï>ƒqÊtÆý%èBBÆ1 -…G,húAqÑi ƒcq¡¤¯ÞBÁ-O±ùïál\Â+oæñ´ËŠ);!gΊµDíx‘MÛþ?{ou™ïÿ?�;�QäVG$ RHLP¼Ço6í—–kíùÚÙ]·Íöœ¶sNî9Õîæî±rSÏj©‘¢‰‰7%¤`ˆ¨£ÜßéŒ0Ã̇ñ÷Ç " ‚‘Z~ž�Ç<¸™ÏÍõ¹î>×ûu½¯÷µ�œq«ˆiàè?ÙLŽ4Ž—'8¶4Ó†º‚¹¸++‰ìô4‰ËHð•a)HaÝ¡š�(G/#ÁS d÷ZrK‚F^¯W—9ÜŠ[~'cÆÔÞJOå› KÛ €ô¤mÚÃy�$^þ] µü‘,TÐap¥�+ î[ÎiÿÈë/íçO«÷°ãp"«§Îgù„<þ´i3^¡äÈ'óòÝ­V�ÏQ‹Ž%ÏE¢´×Qt´žFàš¼ÑZNyµ?ƒ:œç ×CT\Â!(\ÌáÝ7²�Ï~‡¯Þ«ó†Ê*”ÃÛÒ£B71¶­”®#˜1É”(;»HM5õýµh•ŽkhU­¬ƒÁ@S é[õÈ'½€®G–ª:dÂ(Ùþ?äú?Åp7#UF|+?nûE`È»aÝQ2OÉðõRôÌeÛVCþþýä #HœŽg·é§ùôãïð àÔ½ˆƒÖPÆ_SÎ`ÖñÒ8ÏÛ V} [êúó»_hñ²Õó�ãëaýHx€â=Újjù8ÏDˆDyw—<(ݘÓnÇ!i_f$üøÞ:¶²Ó¬ú¨_¡‘’Ëü2¾ã;yçcµ™9ÿC½ªõàƒ3çL*÷P±²îⓊá<ór^Ö“ìøó.ŽFüš°fƒ&þ Ï=ÞÿÞU V=iÿÈÂù묢Ìä½ÿ:©G¢X5¡{[†žû*�¼±Is^{•Éý÷ÙöÒ›ì9ÃÒ^ð’l>¾‹½—ÇðÂK£p¨É`㇙œ>‹¡ò^Î#çQ,ú�ã×3GqêQPø)pº¨–&¿þW×�k A,3‘Ÿ³ ÐØÒèØÍ¡‡ø¹ûÑhiìÖ± ¹â†ŸƒÂ£ðW¸â‚â‹bÎU€?€2„¨(B”ƒqM3¥Ã?Àˆ¿ô¦FÖâbL!‰¨+røÖ5ŽWü\Q÷õ­+´*p²ƒ:D‡×‡§ÑWRX=˜É³m¤R.?�q@0aÒb6”Y1Vþ�gs®RõèíŽ~Ñqè|¼aŒŽ Gé‹ Ìß�v¨¿é“Ñu×ýÞRFUS‘Ŭ€ê«*êì>È\|èç¨*‚Åü°)m¯Isˆ9ð©éqÄ_KC9ú:ð›ƒÎËÆë؜ۉX¡Ô?Îo"qÝO±ÁhÑ-XNÜÊרö…“ÿmºÎ¦²<ƒjNcSJ=¡Á¡èÂCQßÁs4é+ðz"†¼Ý›Éµœˆ^2ÔºÿS÷m*[΀ Q£{b*�{«Y.‰£|muT£Pt8—º�ÑhºjÝö*²SRÒ²ÀX’Çk»î $2‚&=‡Ÿ\ƹ³?rç gÂD•_žì¾ Ð&&«n¥ÿ/z´É¬Tˤ¥Ápâ=2KïAgèâÁpO ÿw¢€ÿáö¢‚" „? �à!œœÑ(í˜mÖ‹KîãÅÜ‘}Ñø)èw—<@+•¥F*å*Fú8!oµp²¤�:{g„+Qƒ]{eöÝ|ñ2%m"ÆãcBÛUwmªæ+ÏpòEý�õ¤)¤\YÁ»g œ;kcðî`ÍÖuÛFò$/ qÁM 8÷G­²ak�f‹ Yç{\ƒ¬XmÀµüq%âÙÕD´}Wþù»¼³¿”6PÇóìó“Ñž|—?mÃ9<¢"(ßÅ…Ëy!Êްqí§\Xñ0Ó¾ãLË(tN œl`Ø ->ÿŸ›Ž=3|ΨiÑòÛߌ¹ùùCã3è8•ñK‰¨çbö FéÞ@Á‰&ÂE1áG¯¯Ý¥ÅŽfèP^ ÷µ¦š/š¬��˜î—‘Ü�ãBF„PûÅiÌÓ½qÅJÁÉZ<,6 Iø«ÁZ\HùÀBœ�V=YÙfüÝŠÉÊ1wý�é2fo·Ö¦ÕÀ¡7W²á‹^�ȽàØGìŸð*‰>]� <xPßÕ´´Â×u.Zo0öW\áÉÀL+” òvƵ¼‘Ê3Fn¿ôÁ¨/æ¿ieúŒ�xñ`!ïߟ)¹âå©ÀÇ+�Ûeµ¬�¤WŒz¹‹µ e ÔwµªKð ÆO¸ÌÉz ƒ«ñëªC²6qò\ãØåÁJ¹E�¿+PX~qw|¥ÆÂílÞqÏÆá8�˜D,Á„‡ôG(ý”�ÿÜŽßK‹ætwÛœwôrÞe@"�¼ãß°aÕ6üž~�•.zÊüÃsPêGm~øþ!c¦Ë¢ aο_]ò` ë�×xëS?^�>–ÅrJ“ðªÊ¡|D¼ ¯â¤%~ùëDלæTñiNelàÐ�Q,ú±\(½HEÉzÖ¶y>6ãÎ%ëC„ú”ü:ÿï(lÉ4¿Î~r‹cÁè7HÛy[‘j=ü2{ ˆÔ�ä”ía¦û‰æÈ]yGtW/¦�±anüý™ë,ïÙ¸åøþeÝ%¢“8÷YÕŠ`fýëK$…(1çmæOë>ãÂÕXXûõDýÇ;<íù ëÿº™Œ’Zè¯cƲß2ä�o¯²}kÉôZÂÂ!%¤í̦Ê.A†6>™„ ëÓŠÐ0o*¤ØC„TOq¹–øQ5Y™­ âd1Ãg;– ëAç(‘ƒ½”¢KSYù‡0v½ñŸì9ÊŒ¡ìùàS.x$ñû•1Ô}ø‡ÛbaégPìÃËïOƸîEÖlÝOÜÈ$nÕœ ¹T ™Í²qh(!÷B#Ê놈{aýöPp"\ )V‡±r„‚Õùzˆö  Bþ?Ç• ¾Ê�1+‰ˆ¬A·5�¬ÚÉ$Þª26—““oÄo‚?P­à:f“¿ø©Ç£ºÜNÞ&Ó’˜Â+[÷÷o“¯·ýÖ *êü Ú¡7�*å„ûœ[ÆZS¶×îi¾(#è—IÄIªÈx/�"£Ž€#©º€ecÔ˜ ÒØ]PE¨g6™Öh/ B‰�ìõ“ºŒ¸íßÅßSP@D’–&%›NèIÐuj|[ 2ÈVÄò«…:dµ™lX/8–·¶þ(ÛÄʾ>Š%Ô±LºÌ*P_¸›Mß1I<Ð�ŸIìå]ËÚ{&(<¦}ŒµÙk»œí¾_�ûŠ1+ºwpÄr6¥\íTÚ0ÁI¼úâÒm±…o³caÛ#—³þê9<ÊÊ­;®—óã2Xó÷ =ó2«½€ƒ~�:Ûˆy]çôŸý&;f_¿~ÌÊ­´·!CYù—ĉ�gÕÖ«‘:š—®ÄÿÛŽëq Ú õùkv0ÿvìMòÒŽŽí:’_¼ØÐgâ ·4hò~¨kñ ��§ß¡ý“ÞS_eëÔ«Y1šÕDÌy™UB0î|…Cr/üûwÈ÷ö¿£cùú«ù¾’õ㮕óÿ²õ¦g–…&±¢-àUÜSËèz.M�vÂR‡ëÛ­þ ¯²¾ýwî�²ü;áûݾì?‚ISá@zß�Ïй�á-¹;÷n?`ôtºÂxo{Ï.p©œ¿½ŒÍ+�ß=DðífjÊøÇ7­ÌJ }0ÅÀV]æ\!£†ÜÝ Œmb†s»Ñ‡Ò©ó%:²>}zç�í8vyÀÞõ²±Þ@êOü“”«³x¶ßüs®O-F×Óe_Æ#lÛg#nù†]sJk¢ å=ŠC~Éœ‡]°Õ—PÚÜŸX�»ÜæªÒxý?‹‰ÿ·•8–´Z©-­AÑ/×�P^Has ÎVŠ‹*¢rÚK<(°¶‹ÁЩlAÁÉ Ô~þ(ETÞÿ±ž4Õ£<^Ñgv¾Á^çÅ<—ØæEÐPN­É/7wüüäý¾ Ûà䦓úR rúHÜ‚F1hß14ØI pˆ�Û‰œ…ÛõgõC8ï²#§/cžé�È]¨¯·Àz¾„¿fWSÙ*pù³c˜£Fò‹!*&ME|f÷gZð(­’¾Œxl4^¾v¤ »Á€ÙÒ‡óuà;{ìõXXGMZÔ_e±æ÷Y`6ƒ› c+·\&ê6$ÙŽ�ÙÒJè0#tš}§7ºPx¿°ƒ{1/Aê…”7xQh aÆ ÀšÇácÄü»œýˆ±žm‡ËIl[FÜtä]^<­€V+#„ÌXÎò±®×ë°Ô›ÉOE±rÃʃƒ»ÌבI$|��²cXtã[èúõ*ÒXýÆ~Ê[ÁªŒaåÿÌ'Dܱóþä–±Öên<ÆÛ€¥RÀb5QV>mvžJ—ÈB ê³j úz¶¬wl X,ø k'¢P§�&T 2�õ?OPb ¢³½uµFÔþþ‰Ã+ˆ ~%�I”}‘BÚ¥ÑÌMrìfç1,†´Œ¢F(Ï`ËŽ½hžO"ô.©\÷LPpsrcü�ñ¤žH%iDR·ÎÙ~|;ƒ'⪸7£hÿ©/ó[¯=ì|ÿ�ln°�T…Ú/˜¨¸Éø‹�G§¼‡›‰ÓÛß"u£…W0ñÏ.!Æ]Ì‘NìåSŸq à"-æf¬å;ØžçEøô8†*»!*$ö§Rð왘P•ÁÆÍG¨5_ä’­š·N;3쉗˜Þƒ¨ìNRîÜ}µ_ ¿šá†ÍÛ¿n¸}מ©"¿±…Ú]_óqÛ€ÿáØH’œ:"àÍ‚È~¨Üå Œ�ÙœYÃYy_Œó#„KlÛWÝE O^ˆ÷úá±.ñjJ5~­�œ4À /Oð]W¶‚ÍòÃvyЗC`Œc&&ßÁûíRÞÎ\ºÈ¥¿¿Î�¶áưÙ/1iì( ?zƒ·Èp'lv÷—;ôZ›óIdÅ/6ñޛϳ´‚K` ËŸ�@áneÉïòÎW±G-Þ3x~‚ o|¯iC=ØöÞ*¶ýr5óÛÏrÚ‹Ùñª#†­VäÚÉ,_Ц¸F峞´¡c¹“hHC¾}kÿ«ä€Ä�¡“0Fò O¶e+ïüMŽÌ&ÇoâbGpZ§`Â|¶²¹&–ÛÖŒì䨆N¿!îHù û“Íä wt»p pT�·T~ÐE…Þ\â ô%<¿’ï°ƒ¼?cÊ�VŒgKù¬^BÐpfS+ôëiã•;bˆA» Ð�ÄÂjÕ³S*…>+xÿ÷1œ{o)¯vñŽö�eÉ/#(;û=E¹[YW˜À²Y¡7¸ˆkG†aü´�<¥��©Þà aŠ «¥\Nˆ¬Ç²øÆ\‹ëŸ_$ Àb£ölå³ç£\Æ,wÄPh-'õßÞÂ4øæ¥ C™ï÷ ›3½ðê2‹ÔÄ,ˆcß_wPüøÕ|Ñ¢õ)£ð´•øQ ðKdÕšDhÎâÍ•Åbe¿Ÿ¹e¬µð- £i܉¢Ôá³Y2NÓ™<@AA‚%ƒuïdÍ–fN”Xxã‘B‡tm¢ ”ÚBzC$ žÔ¡n慎D\«ç2ßP´Ê4ê Ôóîd­ì^–kT`ö+vvœØÁœsn+&ª0úÎnæê­1?Ø8ö•ÄòQIb£ìêˆÅ¼±XÌ‘ná>l"O»Ã­¯=¶«}âx楸{øÄR¼»ßã{ED²9â¯$v“ÉŠ³Ý›]ÀÒ� N?Ü=ÁÖÐÄ+¶&J› Äåî=²±Þàˆ‰ UóXTÈíwy(o¼ã]¹¸ÍkMKÒÓw`¬_ܯY}ËfËüßÄÞó*佘W£ßò=ï?a«;z±E,ç�víÎæjÞ™Ù±)‡°ô�­,íì¦æb «B˜òŒ÷�%ÚYKì¢_sËÜS¿ì¥=Û§Ã~ñ:«»q¬ßôWxîÚ½ÆðÌËm¿Çýšß_+ËÎ7¡;gDîW&Ç�q‘àǵ ’X8]mÃC%£îB5ßùúÞ¯f»”ƒ¤�“GSðX u_Є °b¶�\ ÖÚo8\Ø–&¬­ÜrGªºã™”yGI€�@ÙGUì¡ø´ïš‡„RžÊ!Wx2ÄÀúÏkñ7f²2 yæMVÅ©¯ ›~½†Cgçsƒ%!õgÆÓá¼òÞŠ__LÈ 3µ®DÌ›ÁþWS)´k ëêùý&³8ìw¼›òè6‘!AGÚÈò[BŒ�cëÙòÜ<*^ⲇû˜[ÇZ ¿�C€ÔÀW�åd)•á, €åë 1ԟ塊‰mÛÖ¨, ÀÉÂÿ—p-£% ÿ{¢K�3Jk5&; 1PUÕþ î§ÂT^…@²Ú"ô—‚:¤ÆR´›ôÚpæ&_ÀBÑî-” M&q¸ á’½Åó¦eß?[AþrËrùSÆŸˆÕÆ2À}Àµ å—Ë©1ÕðÕÙ¯˜<ñÎÅ‘Ÿ ¶º‹¤}o&LåzWwy�ûx³@§ LæF”hUò�ÖMg+.œ�{ßèº »<ˆô>æœõüqk1ƒŸüíOÜCÏ�ð§_"\,Ò{�³'ÉÓ‹BÇ»;å�îÕ?žù�ïç•�ÖÛd€‚�Ùóð;üVÛ>mཛྷUömlþó‹l³8Žñ�aÑ+IhE�åû–Îb­åÝæ¼€˜v}̺“€Ì‡è'�õS“p.•�×!C@”@R;w›²ãÈF.¸aWåð´_åršLDH.[R8áî†[_µ#HäÈ8tß§±n}6Þh<;šé¾Ï+¢®ªœ­ïqüK@Ü3‰Eéø>mk¾��DEè”»·Ü0öéð786íëÓöSÚ&<Èpì>ã8·}\®\¹r¸7bj1qøüaªªhli„+à¦tÃÏÝ�Ç´�ݳe""2W®\¹éçÕ Œv»�ÖÖVZ[[Û‚2Ú°Ùløûûß·Ïs®¼êžÞPDºz IDAT°¿�X©z¥¼ì46 (Ýôv<ÆŠªü|¼ïú³VTÕðÎ7ïú}·ýKüO¾]ýÛÜýœ§"?ÏúZ^^Ž\.G.—#“É�J¥H¥R$� ‡ÓÉm fò„awý�—>UóÿÞYElß>b¡‰ˆô¦2 *”„†h�YKHýGÁÏ%÷|G ;úô 4áˆ:Ø ´àXï$´}Zq,xºÒáãkî—óýºeÇéIO­bLr4êp[SN É$†ÜyàË⤻{K¥‹Je;Í.`ª."3ýu#ÅâÑ·U%¹ÜW‚vÑ2b= doÜ@�s@@ôÌh:³»º§R‰R) ¼S1ÁRF殃”4ƒ`W>=‰È½i’Ê�¹„P±‹‚‚ˆˆˆˆˆˆˆˆˆˆÈý…¥4“Ô/Ê�;·b’„’˜‰Fb àÀA¾¿†íe(ûE0)>`8žFÚ‰fT ÷HfN E…‰’{É5ÉPÚ-ÇÌ((Í$5G�Q•BJ¡3Ú1‰Dúvb7—¦³.k‹:¼ _oàc!‘eãœ)Ú·›\£¥Ý„sX"‰#Õ`) åÃ26¢¯À7–…㪳ÙýE(eX¬nDNK Huߦ‘yº ½5œ_.ŽlóP0Q´o7y&%JÁC§2s´áÛ-l:£AÛO ±² çG25¤Í¯Î`í‡&~�HP7Œp¥»'j·ë&Z]A&ù ª1Ü^Ž¡èëlêTZ´Þúv�‹ %öÉ$B»aýuyO…êþàv‡õ§êëtŠ|g³lœ¡ô ëÒs z&’ú](ydSÁtd©$±xŒª“úc {S:–ajªÎ@DܬH|¬%dìÍC_Q�fÚ ‡´Õ•ÊlR?+• ‹àCìÌ8´JGÝL?eC)°(bê ]çbX}&vÖ¡Õºai¨ÂÐ/ŽäñÈ,z2veR%S‚E†6~&Ѿ2(IcÝ÷ž„ zʬ ‰H"!Dù³ìDAADDäžÒj·sÑp™f«•ÖV»˜!"""""÷ ©T‚³BAu_¤q§�[Ñܬ$rÆB‚û·�·eµ‘Ä P£Ή�©O¶óP°‘‘ÑÏ%¤°P°}™¥¡Lõ-ãÄYg"M%T%`¨†I`,qAEä¾½‡‚,p4ºætN#ˆv¯"ÿ¤Œðy(M'£aKæëP zÒÖgPšD¨Â7Sõ�ËX8ñºag(.ÂäŸÈ 4ÔÑØfiI$)(›M»ÛÝôl¦ãÚÉŽk§ÿ#ƒ"]2A€EDÜD-²ÒtÖÕ#„„: -�P¦øt³:iÆ$×þï‘q$†¬\NÜöl¡ãÅBÞi0]—�°X«Éۓ‰&™o$“ÆuºŒ£Ë{J‚˜:ëŽå(ª*Æ;¶-–ùk`Ì£Zˆ¼µQÚYý tCíRFFC,Ë\?WD\R%{ÖQÔNdÉ;T€zâ2|Á”³‰”œ:–ŒsC_X…&f1 �JLõuÈìt¾¢°ºŸ@e¤¿—MÑcÉ È9ˆ>p.KSCuë�`ÄÂT}= D�ê¹…,ü™oô% """÷ K‹•šKQH¹/hmµcj¶Ðlµ2 ?œr1S: ÇDÑ©œrVÐxQ@ÓÕ+¼É€ÑREîžTNB“ 7³²PââëÈÚ³…ìf£§çÕÓ”hˆÐAJ~‘�ù”ô�d±;z�uö¦ž, Í@2Å´Cnœ%ÖDME—•É–�FP‡7IÓé,µÅh€~á(d<]MšÚLy•ÊaX)”ÈìÂõ“”> ¿Ç…&ñatâld¾>¨e& ¶oâ@‘–¤Ð»m v¸¾+® ¹Ä±�€¬'õ�ÉÜÐ ¸½1koÄx¹‘²¯SI•V�yY #&Å’™•ʆƒª!ÑLk::¥¯j‰C¸Q),46�òR#¦† R«‚‰L¢¤Ñ*ȼƒ~v ‘{Fƒ¹IDDDDDîKa¡ÁdFÓÏCÌŒŒ³2²?+cÀÓ‹‰r3’½qëõYp ÐÞ�pQã¡ bæT´2°ëT2°0©#Hœ ÖÒþ™…~øÕ%¶ÎMÌP�Œ@õáQ2/•‘à0ôÕÔ>LK E‰€©Þ‚ÒǦwÙ-DÐŽO"B†#›H;>‚Åcn=w¯ì§†3õXðA)ÔQ߬B{»h�–*JÎ ø ø;š(;Y†lH(>]yÓ[ ”U™P¢T¶åG}õn¡yÞ¹i(Ô—PÔè‰NÛU %j�’: ø*ÁT‡A¡f´D†I" ´Åön4™@ÕEý¹Z?¤ÝSÜðT«‘�KrˆVM ¨ ‹'ѳ‡…‚”-äVçÛŵ.1ØAe7b²( pO5¾“HŠR�`Â`R¶‰Žúö Û÷Í3fé³8wñU�U˜Z]“ÊI…�›Cú aìà±b'."ò3ÃÒbíüË–&ŽŸ®ç› 3•ÍW@.'Ы/�†z2ÜMtCù‘ßQV«˜ õß±ëóÈûôAîÊÄY#ÐÈ<�ÎeµJ�}N†Y:ÔÊ´N;ùxKžª"§E %nL éÛRÈs‹$€¸iT eYédK”È „Ä^Û1@3(€ú/6±¥ÐͰ8†wa *C‰ðÎ µ&œ%Ú6³&0š¸¢Ý¤¤|�JbAðŒfæxU§F�`(ààÙÈ” X5DLR�EOæÞ\ª¬Fªj`÷ö2GZt±Ä}¿›””Ó¨ìäQ „*ÀÒU‹8¸ÏDBh@·b(tÄP�ÎÁï±\¬£N’JJi‘3bÑ*{ù2PÎ ÅÇÀBɻɫ0VÔ!ìK¡jÀ¦M À­!ƒ”M¹(%÷1L½æ� Pž»›\‚<Õ·¿ggí¥$“Ýç# Õª»00eE…“½3•Œ&-™dQsñ‘€å!-Ù‡SI?ã†Ò$• :«?�\½.?�Ì3�« ˜.¥�ò�#øäˆx»l!ÅE V9AQ»€©$ƒƒ92”XºÛ{ÉÈê(Ø—F®±‹.�ÈF' Ý�Ê–rJ«€ÛÃÓHðP=PÝDŸ¶Oû¿Á¡1öiû)md€pœÛ>.W®\9üCpÙr™�¹‰�ÚY��»nNŽ0�-�T5Tah2p¤ôÏŒ~w¥»Ø¹‹ˆÜ%îdÛHÿn]Ûn¿ÂùÊê[i2°+»šcæ+×{¦+W;scG bŠ�è`%""""òã2È×ÉK¡¼¼¹\Ž\.G&“!•J‘J¥H$$ }úô¡O‡™Ðñ§ˆHOLUäíý˜ü X6NóÓHô¥L6ìS±pa?·ÐŠ}úô 4ÍmŸÀŠÃDZqø´\éðq Íïeâ/[.³ãÄ=²ˆþ®ýoúÞÍÉ 7�C\ì9˜í'¶3wÄ\Ü”nbKù‰#‘t2±·pø¨CLpë§fÆH/†{H±57qüd%ûʬþ¶ßø@F:‹ù(""""òc¾«D�8‘ÞF¦ò!rRÕ;ÒØRDô´X´J1_~²ýä½¼ùÆÜ�<1ü‰[Š ѸjH|(‘�G7vûúú-/2gé»´vv„�´?ÌaÁ›YܯNmß×|젆 üaÿøÃþ?°!wß×|ßá¨rR_šÃœÿ<„¹³ 5g±zÁV¥~¼Ä–¤±vOI7¶¢ÿü]^[ñ<Ï?ÿ<ϯXÅš�yÚÊê›·óæaëµrÊ{o%«>(îüùz �¢ÝÈ(½+Ã¥L6lÉëÚ­î~¼vO©¿È7Æ+àâÁ“Ñ> ÷p,�“;»0jÔ HÀfâ°þ‡¥¶hÿ&¶lÞÈ–õç½wÿáøýƒO8~©—ŸÇ\ʹʖû«.�ÿŒ-ûJºyx÷±å«Êÿwì#R×þÀ„\æøþLªíwï¹Sé¡¥�ônqßÎþç ‹¼�?"Ï(6DD4̧N°|í!æ¿s„]ÕwãŽÍæĨD"?#Hš¦»M@¡3—z—ÊX(Ï&õ`‚“ ‹ !zÖTBðU=— ͆Èo.Ÿ‡]QV7RklƆ’;�¿:y±£œõûØ\¨%yư¥C*OrÜ b°¯“øÆiÏÅï8ôMM�—©>°‡Ê‘Sˆðý‘_Iƒ&’<È!ˆˆˆˆô:öfNë­xõ·qøôeŒv ù…•„»ôÅTgG;Ä­gc™îÒR‡þûJì^Cô@!®Fù¹ ç.žcÌÀ1=>Oí¢&§4§[‚‚þ“×XùE¯®[ŽÎRLÚ{ï’úm96-1 V°$ΕC}��ú®àŸ+ƒÙÿÒ ¤z%1¹)‹=Ef¼Æ,åå‰Á»µœCo¿Åæok‘‡NâÑÖ=dÈ—óþ+1Ô~º†5;ó)·Èñ�\Äoÿ%ÿ �º£»IûÖ2úê˜:3}kód„*›©k¨Ç¨Šfn’î†mjŽ\8Òé³¹p¤SAÁZzˆ k·‘u¾ ¹_8I/¬ Ñ7‡w³Ó/Þgõ¸‘G}¤•GØùy vg MV Q“÷O%[¾dÑKÿúÃ:‡¶YòN„@¹D‚º=»Þ3.süãOh·˜1Þ€PÊá­yôŸ6ˆ3{Ï£pÂlºLc‹/‘Ób t6sî«}äÕH§Àhâ äštÐ\Âáoô¯\æKÕx‰#ŸeSa•‚]Æ€ÑS;Äõ†:Q}ìS—X�öi�á<>áaÔ¶Rr?Ϧ´¤‚ MÛyMg38”[… …V™Ã}0Ðõ2yïà‘a° %!¶/'?˦¢�{12a"A-eäí;NE}VM4S&ãδ¬ž¥ùýfÜ#fö}v×Лń[>›Ó% ?;È©ËÀ•V\‚Æ“0Ê÷ZßÒtâÒMÑ̉öB(ÙÃYJžžˆ¥|¹å$þ‘�£Fòøv72rhß·œú¢Ö8ÑÒ6Ôªs8øå)š®€T=ÒñL¦S|yð[ê‘B«’Áã¦ák¹1¿'ú¢ß»�S-®¸yôCÚ q¬!"ò@P‘WÀiÄv£Ê@IQ/(?ùQž êÍ­(íV¶¦Z±Ôœ¦È:�¡ƒ½q•Še"""òãsÏ–Û�ÚédèÁ|drM„-}ƒ×ç((> HÈòØŸ]‹öeÓN†#›IÍï°x¢!�ô#rbŸ^Â’¥KˆsÉ'ý[H ù¢Œ I$?•HPM.EÜbõ—ô�‹%�~WΞµÈ’Æóêßß`¾W1½»‡òJ]X)>ifò¿¿Î¢P39Û÷PÐ Û×s¨n0óþóužõ® Øì0쬅‡8TêEâë›øë“ä¥l#«¡“$TçsÔ¢cñsKXöÜl"&ÛßZNyµ?!ƒ:œç ×r*Ú\Λ 7ó§�b–&âß‹.$uGÒÑÎdá“É,œ‰ªÉà0N•AÄ%%ÛÁïJ&�ùÇ’0)‘©AF JL ”�}Ü�ØùI$N Å­Ip´&‹Å‘œœÌ J¾ëÊ­\FÀcS‰ô„:ŠÎƒV{ÙDP£›‘DòüXTETÙAhðhÉO.$qPyÅŽ]R ÅE˜üã˜9+‰ä)áÜv' ‹AS’H^‡¦ ›"+ÔåD˜È‚9sY0AMÁ—'0a"ÿ‹B<âAÒÉ$¬ óÛz¤½°vÈÍÝ g ¶º‘Ê›–+µR\a¦ðrw¦÷wïKÐ0WJO·õ1Õg¨è?ŒÁ*4šq9…I3æ1Ö[OnÁ%„³™äÙaÆÜyÌš;¿Ò,Ž×µ»œs¡ýð–Àã¹R‘ûÕÓ™3ws¦Å�•Miû b/ãd¡Ió˜5/™˜AÐÔÕDz¨2ƒ9sæ1kÆ0²³©šZú2|ÊBfÍ]Èã¾U|[tÙQ\¢©ßDæLy˜¦c™ÔœÎœù ™ªƒ’ÓŽe ­ ­ ˆ›Ã¬…“ ¬û}Ã�Že{’æ…ˆšR>3—J=-DŠ[>[}!'[†1cÞ<æ$Oa˜ÜLS»³\}�ÖVÒÔT¶àéa¦ÆÊ0xp³„@in6MÍaÎì';¯\âÄ—gðŒ_ÌœùóxÄõ<§*ZL<}‚9sçñÄcî-¡¥C~;�Îæ¸"š'æÎajt?¬ ­âHCDäAÀÞHîévb‚Ü…ÇÄÜоx]m[É-¾Ø Ë7í´\ªälÑ ò�#ï»ã”Ôbiä[ 8uª£¸I…ˆˆÈ]àžy(˜ZL×vs葱áävm[ÉîSNaQ- M"Fë�«öU¶Î0�ví‡Åª2–ø!Þ¸‚×ö Œ P«×c•‡3ÖoE1ƒRù@éO°ŸœÔ”WX)µal5ãÕ`»v-‡rRF�&¸mm�Œ€@O §ëÁðöÁ¨^‰R)`é�Ž¿¡˜Â2+~sbñò'ä÷ë™ ÐœuÓ¡~Qqè¼¼ñé' [k0”aèb†x£0–�­˜…Oƒ�óÙÿß+Ùßj„V?Ìf¸å”¦gAÍilJ©'48]xhϽ °q®TÎü �¶éQ¿�Ç»—êžÑhAíß6Uï®%Rw»3”¸õuˆ Î2™cjÜÒˆIá�‡ À�Œº6‰ÎV™ËÞó8 e4 ÝHP÷æAd2 ¾·³w={ÛÊ”È%‚C¬�ÔŸ8@Ú÷ÎPgBq g4QSÑee²e£Ô¡ÄMÒt]jO42TJ �Màt©SC;«áÊ 2‰’F¡ãåFʳwñ vì- S·™ƒ²îÈ)÷Vóˆëe¾l¼ÈÇÇäÌ}¸¾N€]àìé ö” sæ‘A?Î*6— 0á”L f¬-€H\ñÐ0SSžÃ÷t ™ÈT€ó@ÿG¾âŠ‹s+-¶;•¥{’fðS]ýøE>æø5úæW“Ë­žM=ˆ@ËçìÙ{‰ÁÚ¡ º± r`€å8ÕÖ@ŒÆ¾ ¶PRe¦É^‡Ì7 e7•‰Áè„çHG½uòõAݧlµÔ5õ#´?€�1O`t¥ñÈg¤—"m½„UèëB®å7.^ÆÍËËᥢ ÄÛý”8Òy�¸1+1˜Ó›Oó]+ �z˜_…;­I²yý¤Ü}y1aÀ^òÐRWÂ÷úËtÕm·šë¨1ÀÃK!–�ˆˆÈÏSPP9©hliì±¨ÐØÒˆÊéööì0Id5[¹eT …Â1ë)Q\;ÏÚNph-ó‘ÍlÈlbÆêõÌ÷ØÏªç×wó¥Óf8Ý&ûµý´�z"hûi»÷¬­VÌp½…/Š\Þ&¢H:ž'¿)¦DÞöwÙ_õ(«Þ^NØ·oòôß»ƦԒðÜ2 ¥%d²ùH ³ŸK àêãJµh”S|ÚJÌÈvw2sÞ2˜°"'lê|&�5 ÿï×X³s0œ­í•XJ õ&RAC ™ÅJ¢Gô¬1(ÝPYë1  ‘TQU' ,'3ȲGóÂL-”¤Qr¬ë˵¹¤¨fÄŒdB=î¬9ê³20¿@òpUŸ­%½íÿ#hÇ'!ÑM¤Áâ1]´�ËFí ²1Y”h]ÀÃS�‡ï$fGº‚`âR£²f*Õj¤±³ˆé×JkãEêp¡w:© ��ÖPúuç*«Y[U‹ÚY VáºàtòlÃGºÓë{¾8%Hó-%e¥8Õyô˜ì¦þ@Š $àöÐfEö륛»2xÂbü.–Rª/æðŽï^~¨ò¯z5þÞ]pz�ãÔIçØr®ª’Sm€›_÷¨ªu†_®*üˆk¦ùœ/¥`ãä±Jš»WUª~4ÔÖ:W.ÔWRe±_±mÁ½BŸ|\N‰ÝùP-)>ÈßþÀ%‡X_Ú>Pýx‚w>¯½¾`ýô� IDAT-mVε8.rõpþ#tÁA�>0€¾.€«;êaèë�xÙÍän\Oê›Ù–eળ®ÚÒ2 ìÑV*öd°ío«H-4‹ö¸�+†öй¹÷7â™æ3 0¬×éŸ^@|Ý:Ò—#HI øûâ +týuŒ2æ 4Lyq.¦5±l~nþ!Ìzi::WC®TFè´D"ަ°õõ%ì‹~‰sÒ:i Ãg±ê÷ß•˜ÈÓ:²V§Ÿœx¹P)½±å}Èú/¤H±! ˆbl§­ªñ HjÝĦåóIi$JÇÏcñ´.V^x…2çÅR^ùŸµ¾™DDOƒÈˆŠ ªóÿå:¢f\^ŽwH q!]äó‹ç9¼B1&‘óW¬ Š"vŒo¹™¢�•Î/Ê0fÎ ë`ù¹²gìì×._íÝý#™3ó¼)PGì í×0*Ž9£.ž6ö¼Ã¹ ‰Ìèi¸Š�‘Ìy¡‹y‹\KäŒDÚÚœ¯nÛÚÚhkkCêû¿Hx»ÝŽÝnÇf³ÑÚ:ˆñÏÄÜ8£‚‹ÿãÅÚí4XíHûÈè+uNÔ†bcÓá&ê*«HÅ…9ߨ• RÍOñm©DòÓ‹ÿ$Ô“Eö�õ48~¸±ý�ö‰d̉ÏÈý° vú<At§`î~ƒ '‹ì>�6ßÿû„�¿ï6)¾‘�áßqî;Ïú,²Ó÷#‘ØÁãAÆè¤øþƒs?çJ�8œÝeR‚†}Máö�Pyõ'@?Š>ŧãÚ߇#ñýü>ª¤jFýlX¾íÆžPÁž�+5ûqwœ‰öˆèG›Øóé& v@âÅ�ð' õèE�{Ú2]—×vhðXlß~ÂG_K�`G:d,£:ÙÉú yQ…õsnEèSË¿úŒÂǵãÑ#a”ål㣠/<}û1ÐÅôgäþ”Ünæ#¤H”1D…¬UÍgŸoæ”—>#Bw¬ˆ½‡âß±üáaÿûsþ±õkÜ•ƒð qìºk[�@p� 'x�·Úfçêë�|ZðãecÎþý®o˃‹ 7)Ðê�÷ Ñ\eôqW¡z`~½dŒÿü˜ }\Úè:…)#€ÕDá§{ø¾Í —Ö¾MšJ˜¯ÛÉvî*ã\l®:¢¦F¢íí.DG%Ùÿ[„ö…è¯g!…ÍHvF5cfŒíÑöZÛ1þ1¼8IÛ³üÕ‘$Æ]ÚÏããкof³õΔÄî"ˆ™f’ùMR© Žeꤘ)û4“¢3Rä­V¤�‰{T‹Ôa£ñdÙ»¨õ¹rw™wK)›ß-í@ç\JÊÔ ݆]l¬Èeç¾:�Ú°žU 2Ž05Øšë0È'ûkO¦ý&í•ÄÛZIÁÎ|Œ)´ÈÛeÖFÅî�Ú_$ÛÌ•4%òüøî]&wY¦­š’�ùT GnkÄæÉÔñº«†‘4¹™õ_¨˜ùRǺ7R–ñ;y‚EqA·O!¿A¸´ÿçÊ—öOI»áAŠsÝ oûáÞÖÖ¶÷Z _]¸š™¡3ñöè™욆¶ÜÆKã^ºµ­Tk ³Àˆê¡É„{H~5ãø•¬}FwÏ=›ÊòÈù‚'F 1n"iÅ>ô¯®e^¨X6wÙÀ÷m6†2+Våù�ùÞ¢£!¡£AÁápàp8:ZimmE£Ñô8ÿïLÕ×X3?TT²ép ò~Ì~ÌŸa7p4¶Õ|AÖr¢§=äÜ£î0Ùž!tf$¾B‚û†¡š^8·5ðÅ¡¼Úù¢ø;rkm€+þC33´–Ó2j Êë¬ÓÙŽp¸ 4#Gàwƒ"ÿiíÿ‘§Gár‚ÜÍÿbÄìixõÙn¿ qì\ªÿɆB%³žAÙÖMXÆ?O´¿ æâ4vØb™ÑKoYÝz¹ÊLé§²ë[ðÓ)‘÷eRt÷s±ê/3)8p£Í�·éÀPž˜' ÈØ]‰Tn£Ñ5ˆØ¸0¼]¡îëL ŽVcl á…İKòµ~¹™ÍÖ˜‹×Ýl$?«€:©šmø�ŸJ¤¯‘Œ¿aįã’¦\ÖïV2ó™0Zf’yè¬séÆÔǃP`¦(-ëOUTÿÛìtþ‹0ü\‡‘ÌÕÙÈŸ~ñ*þ¶lT~‘Ku@ÌÅb®Ó˜~ŠŒ”2FÎŽ%@f¥t[Õ�>ÏDE)¹äDN@n+#cíFþ&ei>ê½ñ³–pH9“™W2(Ø*ºÎÛ«„´�÷LXæÇ6êÊ+° ÂOn£:/•|¯™ÌUGQžéP•»Oöë+Ì…©dJ§‘8F?ä³~�’ÄøÐ‹J‹‘ìíeÅÅpÞ{cq*«�‡ñ‡x½S±o1v]fm©»äÌx& EK)FB_ˆAw¥þ9UDFñ)¬•R"_¸X÷ƃ™ì:~–“¶‘<\\\ÆÍÀÙöãÎ]ÿ¶öÃŽóõH[§£ÝTz™ýÈl¶ÚNìˆX¼ÞW5&|Rö ³™}ë+ªT#3¥“¶#�d<ÐŒŒgÁ4Ý=ùàôPÊ0ÒX¶}ÈÕ>9Ÿ§…1¡KÆ�ø h‡Ûƒ+ƒ´Ìv·`öRÞPcBUÑVö=xpòã×FQ ÷%RO u®—ó¯¯cw­™V¤üGè0B4€æÆÓ×oCÏçl pƒ u¾Ë|—ƒÚ™Œôü‘“?ÚpÔZršÏ’·ÑwZÌÇ©³ysÒ<�#Ÿõm"jª7ÖoNbCuC”Šó‘«b†)¨Û“Jvy#úpE{äªXfFxC} Rúñ!ª±óÔÕW(ø=ËT×ÍlnœÈŒo§Ígå„M™I@+†Íi”Ö†å ÞÅPDÚΫ׻z.ÆÁ¿dÎÔæ³þ3¡‰a„+ ¤ÌJÐ()*:Ç©ŒÂØ_Ïp*àÛÓ(8DÌ`OTî•ä×GòüÌN¾½\½ ™…ôª.›œÄ´p1‚X´ ,¥X<}QHãOÇC™é+åPµÑ3qÂy[N¿áø¹‚bTsa ‡®V¤¥ºë¼e�X¬dW†«¼GN$Jß�œHñ S›³pªï#ür¼¤ Æ>®G•»O]Õ(q²ÖŠ÷œ"{õäÓ¢h6Rçà‚"_]XÀÙ‘3èÐMÉTß�ë%Óu]¦:Œ±Ê4ÒÒŒ(ÏžBžà4&t×?¶j ö4:)Ãß+:´—�ü:¢BªùðË{dè»�…{ɽøåÈ_²ñË�„Gå®b�×  ŽÎ5ðCýœi>ו_2û‘Ù׿�ñz‘i˜¼p¥3Z½Ž_sWD0WL w�QAíßõ ÎÕìÓÌè¼¥O01ψAÏðźZhu‘¡ô¸Á™»ôa€.ðç)aè„D»Ë1™¸èôQª!â™xÜÚï:TK䬤î'ù´ãÿ­¥ýˆœÐ)<üÀô{�¯1ŸëXæ$ê‘·É~?—Òg —wÕ?6* ‹°=2�»‘ Ïuí>IФTgªï™ñî¶oÙð”{² b{�{Ùb??Ôÿp!,¤¢�‚A^ƒ6`Ø­ßæ n:nR ­6»h�@ ܑϨkG‚‡¢ï]s­öš:ðÔ£l;AIÓ@Fô“âí+çë΢x`.Õ_óã-ÞRo|X¨>%g„¿ æ²:¾c.(¶S”5 D¯»6u¿×‘«\Çu¸»uTRôy%¾Ï&¦0S´q = Nïz©:åŒ f†œ1ÓØOé ó­AO&EÅRƒ&¢“î*” -¡ScÐIÁj©Ã¦�ÂùXJ]Š]#•ßV"„ßU6íwALé‡wSÕ®¡xY)ýÁ†w„h¤â³ Š(fÄi¯êW?Æ>•x©ÿ¯îò®7RÙàë\-!“#—Ú.´—nÂL.]ëm¦èƒLx<‘±¥x*åØ¾ë­“ )¾¾rJªÎ¢£‚¾Ä2@‹w{_YË�`ÑE^4^ôRfmÍg±ÉNY—É‘;¬ÎUBò.úÇf¤ìD#æ3;Éø²“¥ëž â«166PýY‡šOb>]M~©/õª»z¬¼c|@ŒÓ�cœnœxz ÷}åXšDC�àŽ|FÝ/<ª,ãÛ�ÒÇ¥�£Á0)Húd}¦­N§ŒÿñÄDäÀÈ zv~–Ææ>.ؤDM½¨ Y+ Øy<Œ ]¶@8*)Ø–æ|{ëêMè1èÎG®úA…ò|äªQñ3—’»»©l-Þ„Nj�.ע볃7W3P¡%쉱Ô÷È0à�n˜�‚]ÙX” äÞrŒûK1?® ôÓª[,T×ÀÎí•xÿ4ê‚â'õöÆ–�ɶZoÆÇ>íÎL6ÿ +EOmÓ¯bäH9ÿ»ËFä íÛ,dAD�© ;}w°ºj‰zÂû*+ê8°+ùÓAø]чB{1Gìr®€è;4ŠØGˆx´‚ÌôÍ”¸Ú`ÐDâÇòÙYÚˆ÷�"vn;ßQ <–M§ë¨sÍ`Û -aS"Ñuµ ZÚMÞ- ly;H5È‘ÛlÈõ‰ìö"U„ŽÓ‘‘™Š±�«MŘ):°UR´³ˆJ[#'-�X¶oÃ柳յ®zd"º�3I;îtÊÒ.³u'O¡tùûËd¶»2Œä‘£ÙlÛn@îhÄÔÁé|çþ‘01±Ý¥»£‚Œ¿U6>¹k3ϯx5å²~¿–¨n� V é›i|lÒO³‘ÇEaÙZ„ß³qÝa^o«SF�@pgs³�2:*kê°Û¢±�@pÇ ‘¸¢õñÆÕõþðÄk2™pssÃÍÍ ©TŠD"A"‘àêꊫ«+...¸¸8ՄΟ�àîæz�2 å�à¶áêêŠÆÇE_9‰Ž�@pû оr4÷‘1A ®©h�@p['o®®¨¨DC�@ wÂô*�@ � ×ƒ‚@ �@ ‚^sOoy())=,\ç�1vüîp8.8g´Ûí8l6Û猽qÊ(�@ î^îiƒBXX˜èa�à:¸–(�@ �àþ@8e7³Ù,A �@ ¸�@pCQ©DÄ�@ î&šššD#‚kB8e�@ �@Ðk„AA �@ A¯¹c¶<Ô[ëùâøT×WÓp®2ƒ¼ñ¨îQ<ûxŠÞ�@ �àáŽ0(ìû~{¾ÛC¤.’@ï@õmPU_EmC-kŠÖ0aØÂ‡‹�@ n ß|ó R©‰D‚T*ÅÕÕ‰D‚‹‹ ...¸º:5»¸¸\HÓñ»@ ¸ó¸U]Ú�Žƒs+„Kû§¤Ýð d@ oûáÞÖÖ¶÷z*Pt¼ˆ“ '™¦ŸvÅó2eàßÏŸÑCF én×6R£Ñˆ†�à.Âd2áææ†››ÛÂD"ÁÕÕWW× †…ކaPî \\\ÆÍÀÙöãÐØÚ;àÚ: ·�}ßïë‘1 nd¦M”T–ô8ÿò÷ç3ýWÉì³ww†™Ìצ“°²�–›u‘_%“8}:Ó§OgúŒ³ŒuŸ”sU_º§ ää{U/óá ’Ï'1a: ‰óY¼:“Òúö ëHœ±�tc§Dg Y‘0�ÅÙ×ê¯ãžL µ½©d!+g'°ø“Œ›2}î:J;÷O{]ÓŽÝawÛ…64S¸2‘„×2©¹ÁE©9BjI*¯å¼Æk9¯‘Z’Ê‘š#w¦l[“±q'b �@ îGn›A¡ÞZÏžïöôȘpžé#§“W‘Gã¹ÆT Ñ/¯á�¹áÈnêÕ* n)Ë¿D|È9ö}°Œ7>2^1EMñGl*è�áá<Æ V¬H§TNüoóRB(ÚÄ[Ë30Ù¯�®o8óþ²†¤ ×ê¯å09d²¿ºçIÊw¦³_EüDt?_Êš³”Üm·�Šˆ“QWd²ã«§®©9–[0ž¹(Æ3F¶ØÒ¥Qá¶Ë¶<˜¸Ùãñ®]�@ ‚û’ÛæCá‹ã_¡‹èuºH]$_ÿ‚I�“z—°©œÌ÷Ö‘ñµ‰Vw ˜åAÞ;/²µßÞONΫ/’¡Žcrs!YeM¨ÇÌå�¿�ÀÇn"oõ*6}]‹[Ð$FÛ³Èw›Ç†%Ô~’LòŽ˜¬nhÂf±è·Ñh:+ȪÁzƒ p”¥e>«²s0ÄÎ#´a)ïl"¿¢è™òü"bO'óâûG�£<·¨‰Õ§ü½dÒ¿0Òì¦&xZ‹¦ê:(Š-²31ÊÃY””Èh€PôòZæ¯ýŒ¬ÃqÌk?³vO2 ߨO­<�¸…‹ˆ{ÀÀºß'Óø« ¬ˆQQ³7…äò9Þà†:$Žy¿‰%°o¥[“Y÷Ùajíî Ÿ0—¤gTdþnyàÍ“¶0ËžBòßó9z<üCˆ{q±Ã:¨³öR ‹kQ�‹F/ãöe$ídéúy =œÆòÿÙÅq‡?áaŠŽGùε¬Ë:€©Ù õð(fÍOd´ºS•LâJ#Á?SSU|˜Z·öë r£|ç*’·Æ¢ fR�™¬ ‹7. ´*�ä5éì?nO§LÌ‹ÒÐt0�åk³8nU>ΟÒÿ3ñæZ;–78Šˆ2ÈÜk`Þ×nñž( #§ «TŠ %�ÄÆêUÊæ”#xë¤4Ô[8ÕàGTB îÓ_Ü­ø_ÌŸ·M¶ýy†ßÿ& ÿŽÆë¶m¬côìqØ‹·“óm3´�#éÕ?ˆ‘U �@ ¸¸mï«ë«ñõôíu:_/_~¨ÿ¡×éÊ·'³é�šøåkX£ pc*ù§;�äMßÅ#a)˧ùS»7ƒ|#4§“ZÒHðÜ·Y>]FùQ§‘À­Þ@NQ-º_½CÚ›“¡x®öÆÚƒÀà¡ÐT‰Éƽù”÷‰à�60O÷[rh¿€yËà§³XófêÃyä�P»<�wžRbØ–Na}Ç<͘ªš`°ž@�%ã�…ÊÊö…ùvåÖp­XD”¼”ŒÍy—.Ù?�Ã{ï¢x궤.&¤z+)Ÿšhù*…UGàì·Y“AkÞ:R¾ÒÿÒ4%ÑØ@ÒÃFr¶äÓ¶”´÷×°`¬Œª²N[6j�”[d÷¿´IìF2Ó²8>` Kÿ´€Pkå…•-†M¬ÜRŽzÚrÖ¬œ‡þTïnÈã² ®2°›¨u�çí5Ë™âÙ~}§óIÛf€q/ñÎ’É´5‚Äiä0dm¢Pò8o¿¿…wž ¦åX9¦#™iWNaéÊE„6•cAæô$r > ÿ‰’&cç•&ue—âýäæÌžCâ#6 óJ±X,ȉ#nF"QÞ”TØ.IÙqeBg®ôÛÍ”ífþ•÷ÿ{obGw²íøž¯¿éØ„âg>-FU�@ �à>á¶­Ph8×àŒæÐKü½üi°6ô2•‰Ãeµð“8"t>xè–²ešSϼpŽSÉ” Gô0<D½=K=Ô�´¸1Nƒ�Ìùfz+€\Ãp72¶-!IÒŠÅÞ„º¾õB^Ýb?wá«R«Cµ§�ä?BSx6bÁ ™�Ê�õ™_ Cû çOIäØ-`÷§© ðºÊeÛ/½6$j£F£ñ‡ˆ‘jr ŒT9:luøw9åÖ&xÿeÞÇézÃh¤¬±œ&¹Þyý’DVniWolÏ×Í$J†q#+w%oT=DpHS&^Ú fšP¢Tuj« ãIðŸA ZC`¤ž”b§m?–Ðf|´‚WVu±’ K:eæèA?žÎç�çIœ�È‚¿—^þ»½=OGûg{ßtìsÍ“oðÎó˜äAíÞT–ýaûšzQ—^seû�®¿îš~»™²=.ikþûé«È¶‚À˜¹Ìš4Ç 1ª �@  psQÈTÕWõ:�éGž}<{™JCp�þ½ŸB£ãÎe<ûÜäô0:�f°™µ”½&jçSXÙþCkkû3ÆÝû©›»XnoÁ|¢”òÃòÞ_NÊW­ �™Œ^ÒBS+¸I ¥v{7ƒµ™{û{`s µõ�´œ/Çj"¿¸œZi²^Z„~ÒãèZ÷“òv 9û ìÛ•Âò4­±L:_�Zì1PSm ð@-2m ºŽð“@%µÞkÀl.%ýO‹Y·ÇŒ&(�öë7—¥³dÎs¬*njWÒ›1×ÕÐr¶œÌÿIÁàAÜì̉ÔÀ©Z,[OX°˜;µ‘|(:o¨ú²�òZy{J/lyÐëQ¶–RX`Â\µ�üµx…8 œç^_ÊÒ7–’ôäÐ ×·¿ýúòXœ×÷€,öìÃTµ�ü¯j/v [“ÙzTIôŒy¼”ŽÒZC­½ûºtÆ|Ú ÊNF ¹­¢ãIçvë÷•4úøá݃;mÌ�1×ðÛ­�í’îe ù{JöÃ6p0? �£ª@ �@pŸpÛ¶< òDmc-à ëUºš†ü½ü{]^àÓ ˆ¯[Gú’çhu×>{“ý §i=ÆÄ3«x%›R^ÁEà ¨<¦•“LÖëI}b.³ÆÕ�ºe%™­ Ö¯cöoXÆ~dx¨ ô™?2wª€É1¡ìÛ²Ž…ÕáÌJˆ£r}:«6„óöC!¨d±l¹‚7fMaøá,Výþ;¢™bZGÖê4Bÿšx1B‚.ŽÅ‹aÓy¤'çÐ*WóÀCsYúÌd§“HG H4èÜòXö‡Xu+‰O`åŽwYRB„N eà†Cƒ4dmXÅsÛšÀCCðôyDûéhéX—1CQÒ•v^ƒñßVä­`AÄÍ;+bñéI¾×1wE9+V“ØÑöu"�…Iyè’Ö²àaÙÝ+W‘í¶¶¶Ë>ÛÚÚp88ìv;v»›ÍFkk+­­­h4ñ�à.Âd2áææ†››R©‰D‚D"ÁÕÕWWW\\\œÛ•á²O�@p­4R’–Ê© ×cP¸›1›4ƒ–™qzzjqqq4gÛ�s8wFÛÚ;Î�àm�à6®PðìãÉ„aÈ8”AÜȸ¥Ù~p;� ìÖ”jd¦tÒv¤“Œš‘ñ,˜v÷°—’þvUÊPf�d~ß0 IDATTÝ’"§Æ^°ŽôÜ)èŸô¹ùJT¨ìF¶®™MM Ô†3ëÅÉ\_Éf ·åPÇïfcÂ] Ûç*+9[QÁ¹JçL•´Tš�i5ôÑhé£ÕÐ7 €>Z­x �@ ®U §²pÙßZ‘ºÚ`@±Sð~¾†õf*rYc�$?K]ý),бü2N�ª±‚Ü�ó162?ÆN‹E¯l¤ì³ ªlHù°(â&讪ÜÛ¾Í`ÍÑ‘,øEPGÁß2‘þrck2».»Ë\ê()¨#hJ ò[ØzÒÛÙuáƒÃq´9øèÐGL9ýªÆ„ÁªÁ<¢}äÖWT¦aò•L¾×¹ë?bî­,SAÒÆˆŸoè<Ò¶uõƒ�Ó³zÚ5æ;j)—å«"")�ˆ{AîPÙ¶77sæÓOù1/ÿ²ßZ*M´Tšh(vþÝ/:ŠþO<�ÄÝ�@ � W8Œ”|-'rþL‚d6ªh´vP”]áìi)/ÄåZMþ{Ù”Yôh‹s©þIÏ�QÑXšÉÎÒj‚QÐ2–ĹÈ1S”ò!EAÏå{�uë¦ì±]øò·•SªËœþ·¶ù¤·»ÿÆ CIe oå¿E¤._/ß >L?š¨i¬aϱ=<6ü±ÛcL·”³G�R“¶ ÛéÓ=:ÿǼ|š¾9ˆOâ,ú.P �@Ð ¥Ý�º\r7eP4œ }(:Tv<ÇÇ?)€¹Ü†µ¥‘Êjðå\+ ÐÇ2¨þü$fã)6§8•|«?³ |¯Cí¾¬ì®N²rÈP�öÑØ[®àKï„> Ó†1B=‚½Ç÷rô»£4œk€6ð”{âïåë}&‚ÛfL¨úë;½Ng;}šª¿¾ƒvÉâžo�ø*™Ä•åD¼±–¹A]Ÿbܼ�¤Ý�,]?½ä&]t“‘œ÷7�ùõqj›@éLtÂ<âV]gù-÷ä`Š%T}-õÊcÙìu”vŒÔ"Ñ¿r5qƒoR[˜ Yùûu˜§½ÃŠ›±%Ênbß'F4OF8�Õö€šOóòóþ’DÄ Üv¤æHÏ°Þ rj-eÛ¦:"çFá׃ˆ5MG3Iy?‡r‹3T¯:$Žç£Ñõ…}«x·L�Zî”Ñ»ºÉóYð¤YS!+˜¼~æÿYFÆ¿[Àj¡ÖêŽZ)‰†É¯Ì�uoažµšÄွ†}[RÙZü�3\®çP"æz±³L;’X¸SÍ‚µID´O%šþo þ=�”ôbཟ©ÈdÍ¿‚xqJÀ�Í÷TëסŒ[ÄŒ/Nµ+w%“úmsÆ ½Ö8kgJÉüGÆf8DO#æA§¼7Vä³íã"Oüá’rÁÕP4õEtµF*ÊKÉÞXBPÂ:nv»LmníÆ8ª�iÌïÝݬ•F‹¹R�°Ù�i:Ç^´uPÔÝz¢²[+¨8íGØmpevÇŒ6Š> &Nò,ܧ؛›©IÛt]yT¿·í’Å7lûƒîçKYó˜ ÕÍ2&`&oõ¤”©‰~záÞ-”ÿ_]�ìO+ ½ž¬[“óA&üö òPæ¼¾3€½–½בGÁÞ7OÊw¦³_ÅÒ‰7É¿Êñ<6m«eÖ“ôôyë31ž¨ìe¤RNÄ3�7̘°åÀ–K�gŒÏII¸bT—Û"§r=3~ÝÓ›0‡U«÷1|þr« ¥†}ßbeŠŠ•¿ Üyæm’ƵûŸ©7°nñZ²F®$nÀùLTD/\M4€!™¹¹¡¬þCÎ5d^rJ7¾Å¦¦),þËb4}¡éX&«Þ^IÆ­ ΰ),jBãYNáþ&"¢ÄË Aby1à&åíÕ—SGʰ>ØîÍQIY%(®kæmÃøe ­%²`”[m>©~IeÐD´' Øi�¢"wŽÛ� ç4):`cä£èÕZägÖ`¨±qe¯b*´~�k4à Öo3ÙöC3ûbý¢s„7*×FJ?7 ˆˆDwÞ©�ÍHþÆ|”¿šC¤¢’êz%Z/�žu«+ oùï_>ÕË”M”nMfÝg‡©µ»3|Â\’ž�åË.¼ù•}0Ÿ%_鉩䳼ã´j'±`I"¡&òV¯bÓ×µ¸Mb´=‹|·ylX ÓYµ!‡òºV܇E1÷÷s= ãà_HΡ&t31¯ý�|hH ºÝFTž—Ö°ô½¹,+‹få_ãѵ²bN2� kXñ¤‚ÒÍ«X—[Nm«ê'3o~(†×W�gÞL 1i Ô9¬[óûhÆ}P8ñ/Ï#ZYÈŠçRi�EcñaB_ï%E¢B¬BÔìZƾ: SÞˆ'°/pÖH^ÊZÒ÷± dø¸xæÏŽFÓšçÌq/Îà€Åƒ�g“4IC‹±‹òý;85µ—RX\‹z\4zY{D˜¯‰ 6‘SP…GØæßOÊ–Ã4 žÂ¢%ñè=Z0~’LòŽ˜¬nhÂf±è·ÑhZÊÉüßud0Ñäªfø„Y$ÅÔ²bqµvX•°Œy–|(…äò9Þà†:$Žy¿‰%БwY›D„©É).¤Œž½œÀVºT彂 Ö˜1Ôz{Ûî'g¿šø¿F£éëü—ǰXý)·ó ް¿5œYOÕ²¶ sÔdTb¸½/i¬¸\vƒª3Xsd$/N±²-åÞ:) õN5ø•C€»™²¬TÙ°!' :މ Ì3Ù±¿¤6ðÔ3u,~�|4KU:üÌG¨°êÑËS)•*~Íçz¥dî(¢)ØäÅÄ9ð›SL„Í�%@ Ôæ³>SÊ´¹‘x·OÛu“.¾5µþØžQ¸ê±Ì˜!ÅøñaPz‹»7*Ë66¿W€TjÏ&JÁtådÚˆ‰h?þ�õßR?Æþ\‹´¿Š‰ßeðaJRlÈ&×ÑC¢4€ˆÇÊøðï«)¡/~áÓõä!苲ټí(J… y°9z1®7Óª¸¥Î…AA Ü1œ«¬äÇüü’×�ùùx�Ý«è-_¥°êãï�ÿ6K•y¬úó:R‚ôtt+s“AÝ×|§{ƒå¯æðÖŠ,>ÚK W:©%�„<ÿ6³ü Yõ&0R†5î6p.dkž’±5i›²"ýl‡·ÜUFjQ1¼Ãy™†Ñ“œïÏ�=©|méŸV¸`«ƒLälÉáè ñ/MáÀë…&%3ïa‹6Q:ä%6üYOéÚ¼»1ŸÐE@ åe0/iÁþ]ä_•É{”£Ž]NüpçŒÙøQ2ëö»¿d ãZrXõçT’Õ�¬|\æÌïÛ&þø_ËÑoXBÊö,J6…£kº(ÿõÊ]­‘r‹ŒÀáþÚ»ËÈÅ,öLfÉÇ©¤ø#‹ªX±2‹¬¯bч”’ST‹îWï°|H>Ko"c\s›2ØzPÍœÿy›Ñõ…¤ï,§\–È¢„}¼¸MÁ‚÷њò÷ Q<û[µ�¶d)Ÿ†²ò Ùemâ1\‡ì³ï(? �V{Ø0îɦrè,žTõ%¤m̧" u4(g03Z�õà6Ö05øâkÐóÛºâJ¿]�œ††ï'm›"ñÎTYZ’¡@ û®&§- ýª ïgx+ë G­ �@ÁÝÎ9“éöæ×I)i9Û’.h»Éps~¹à<ÇéhWvy^µy¤mÙ�Û3kXûx3é¿K"§s~üÉ£ü_&nWrZÊÉùÀ€Çcq—ïó··»õmm¡õ|9}C™·r%!Åû8|È@æÿî¢ðäÛ¬ ¹¼úºéo³²£2u¶�Àͽë}åÆ�“Ùzâž^‡®ûóÝÜœí!s½´M.+ÿªµ··Ü�!sdní}MÅ›H-hfÊŠâ•9,žŸâüaX<ËW²o¿�Æ<Ö½žGùk‰ëœ¿DMÔ’NÎÏ:‹v¿Î½öW˜Üëúëº]‰ ë¯»)rŠ£]vÚû±¥7rÚÕC3y1°cy†ë1„ÏaæCŠö_eh´*ŒeFÛa…ƒ½†ò2Ðûp‰…Óy¬øoC‡_£Ï _ þ–|ÊÍqh:è\MÇJ©õÖã_VȾ¦Z<þ²�Bk+µÇ 1M‹ÛîCº’ÝîW™;º¹·ý"˜ùLèÕ—«õœÍåHÙIªýôL”6¶¬”îÊÅLfãt4ý.•ÚÚ& ØÍTU5Ñò“@%…ÞkÀìëFÎút,c’˜ÖE[˜ÍXPvòk¡ÂÏÏF~»3&ê�TÚüˆô‚ê«T{Ì�1ÝÆ sSä”Á:ü)İg&/ÈÿªöB^UN/ÐHYááa<ä‡VZÍúuðÐE�G5Ÿ7RHµ˜¹·;eL{‹M-³XÜÉp0 šY�å±âïûýíhzmÂñgò˜tÖ­Ïaèo'£óp:eL~gÁ¯ ÅTPJàì•,Žj7Ø�¤ý.™¼cñ—lÜt#»?¹r*o�/�ßi|T…ÂR¶OmDMÕàWWAEc(z…�º¯ó©ð‰b¬¦‹)µ«7ú+î©F÷øD¤”]0 4œ•¢ lT–ip´¯vÕØÈŽì >šØÉhaãÔ7;)ªM$ñQo8c¤²EI¤»èa�@ 7…°°0ÑÃÁ 0(tülkkÃápàp8°Ûí ­­­´¶¶^S9-7x…BK/ cg±àØ»¤lXÈs¨ýsÆyмµiÇÄ3«x%›R^ÁEà ¨ðGì˜<Ömy™%#ŸfVB()[Ö‘¼'”Åã=.(¥óß åï©dí\G¡Õ ¥6˜øEs‰Æ}ËÑ=GDÉ:Ò—$q86š`¯Rjí€ Ãå9¤%%�Ü*C9,š¹ÓBAéAø9dm|…uî˜÷â,Lk2Xò\îÚp¦¿Œû»½.sY)Æ`o Ëöžÿ¯ŒÐß¾ÏâéI̵¬å£7ž#ÝU�>z/<î-Ým]Ñ×eùPëT¶`8Zá=ókì6…¨œd²^Oâès™5®†Ô-+Ùÿz,*Ó&Þ˜�B“D‰.lóÃâ�·>XØ9_9A�=�qLJ¬ùÚ(xl2hüziÅ'9ÛhÆj\Ú="Ÿ�C/Œ �à&ãÒ~tüœ º\Ú?%í†)Î×F}€¾í‡{[[Û^ÑŒ�0(œ7(\Ë …ÿoù 5*È4¿¶äÖ4R­�Ì#ª‡&îe ùÕdŒãW²ö� ^Rþþ|–”„²tõ\ô²;¤R-¥¤,\†aÌrÖÞ °‘·»‰}ŸRëÅäÈÿóËl:û4﬈ÅGˆž@pGa.NãÃæ‰<íwËÊ4™L¸¹¹áææ†T*E"‘ ‘HpuuÅÕÕ\\œjBçO�@p—\\ÆÍÀÙöãÎ]½¶öÃŽsX[§>Á@­æ†úho¡Ó5¥™)�´é$ã�fd< ¦ cµ85žð‚u¤çNAÿä�¡æÖ䦓o gÞ“�wwãJT¨ìF¶®™MM Ô†3ëÅɘ ÜI8ª)JßÁ‡žØ~¢=ÁÝa�@¬PÝp«V(Xòò8µý£Vï�OMG-:P ‚ V(÷±A@¬Pw;}‡¿£ó�à^ÆøÏ�9`‘ÐÇ¥�~¡S˜2r@·çÚLEdä–a—»aµy3ö1y�­¹ã�|²¿ödÚobD(K�à>áŽ1(Ô[ëùâøT×WÓp®2ƒ¼ñ¨îQ<ûxŠÞîQúhµô‹ŠâÇüüëΫ_T}´ZѨ�@ ô�/êƒHxJ�Âå¹›÷plÄ4†w.ØFõ÷tOÎ!ÜÇsa*;JÍ=b¡d�éPÙ©«–W�—Fn³7ò:3žCT4Ï2â—qèe•dP-•ƒÕ†ß£S‰,$ƒÂ•Ù÷ý>ö|·‡H]$�Þ� ê7Ú ª¾ŠÚ†ZÖ­a° „=&Ü£ôò š~ƒíô™kÐô§ÿ“OˆÆ� HÔýù.ó]jg2ÒóGNþÃÕ]«ÚGcÐØê(;ºhÈTŒ}\Ž *wŸêA‰V䃣+K¥HÇXÛfÔ€¾O)eŽ ~9%•ÃL]³XL-ƒÂU(:^ÄɆ“¼:áÕË~6`à cÌcÈ8”A[[£‡Œ½&Ü‹“ww|©úë;ל‡ß / q1²�@ è.†NHd°»“ ®ÚRFnö›ÁÄA×Pž«”¾r)R©œ¾2)R)ÎÚƒ#™X]@îæT¥Þ„DÇà-zG ¸£¹­»›ö}¿�“ '™¦ŸvÕsãFÆaúÑDIeI�ó7n^Èô¹ë(µww†™Ìצ“°²�–[~õ×Y¶Ýľ�…˜ì·§ïŽÔ!µ$•×r^㵜×H-IåHÍ‘Ng™Èxu:ÓßÌ£©»ŒÎ²"a:‹³Í7­®•Ÿ¯gÛAkÏNn©aßû+X8.ó3Ÿù‹V�^Ts¡�ö­NdåÞ– }hx/‰Å”w}7 ‡‘Ü¿eRa»·¤¾Ã‡ãÿ»—‘èß«tÒýÑ.Y|wlupT“û¿©œ¹s«h;¸™UWôôlÊv¦’BWÀt?_ÊšÇd¨$Ý�¡"úå5„»ª�Ým=w<�MÛj™õdš[\ô‘š#l9°åRãÍ#Æ3FBá3¢d8óþ²”ª›V_ícÏ3£Gg6aظŒ­­ñ,úËb4}¡¥ª�uo-#U¾’y¡-w¼Kzk‹Ÿ Ä£7j© {5•˜åZü†„÷„ž+J´«Ž‰¿¾u¡Ï;\j•Iœ—~þ8?õêîìFŽíÉâŸÆf¤6/¿’tÝFí’%œùäÓùTèEÿ'ŸèýÊ„lÞcÄæpNRëª tîóD©orãºÊ‘Ëå(nƖГùl+ `Æc×iX‘Ëñ”÷´‚R‚¦Î!è*¥ŸÂqèï²mµ�û·‘¯œAì-Š@iýr3©–(^|ì&„ŸS‡çMößJn]ÞŽ2mF²3ª3c,ª[%á–JíΤÀŸ kŸ¨uñÜP<8‘89©Ÿ_rÃ0>­ûf6[o÷ý-¸]<ª,ãÛ�ÒÇ¥�£Á°ó‚ç8Å7¹»éÛƒüÌ”|’K¥#—]ú�"6ÄJÑÎ"*m�œ´4bÙ¾ ¿ŸN$fT/ïÛ)¾ÜU@«\ VºÐ±Âƒ¼@p�Ú®·à/ŽA„.¢×é"uÿŸ½÷‹ê:÷¾?žÉV�QEgŒƒt"£¤%‡‰F8u’ ñDúF“T==¦mlÓØi@ežÃŒö½ª–³uM< Ë ãí ê<* 1KxæG‰z ͽç}‰v»~²šó lû¡Ê7“þoÕX×n ]U@ÆÆ]”wA°ïØåærV?·—†vXÿèK,ßú‘‡·‘ñ§BŽ7©�²±ü_Rˆø,ƒôuuÌHÒðIY(Û¶,¿œg‡û»oSR rx¶Ù&äê6–K˜åV/œÅ¥‰ã›åŠ�ÔÁ/ú-óƒ_ô+(xO°}ã.Š�· š…må*RÆ—²ù§¸ÿy+kg•³ö‰í´Í[ȈƒÙT¸‚ˆzì9VÏ1Ð\žÉË›öq¼-”ØÙ¨~ÏAì¯7‘>¹Ž‚×2Øõ¡ƒU(‘ VóLªé �¨ö½�….eñô&ÊÞɡ t(h¦Î%-Þx¹\8D^E �a¸ï_ê ñ,[xˆUïÂ}ù5„g>È`ÓgQ¬úùŒÁ2ÕáX‡þn%““6µó <¾@DµHà�°¸T¬“e¨+!û` §2 ?IÃ"µän+D™†ÜÒH­ÛDJZz)'{‡ÝÎZˆ{2…ð–r÷”Ф–p·“š‚Eë÷n~)àÒ=ú‹¾€K•N¾ççJ¿,áýÚÛyhq#Ú\CÒ1Ž�þ‘‡9s­G�òu]_×Öá­«Cm0p›ÑÀmçL¹öY XüX‚ïz‹³ÈŸ˜@B(Ðâ po�’ZÂf¥’0Q¢*{ å#ÂÑx¨?Ù†e��h-0íâ IDAT8?Í!çp+µÏÈR0÷-1Ýr—‘*v²^?‚N#Œ°€zêGZIO £¾4›üÏAîp£LJºd¯ÎOsÈý{²¤àQßÅÜùt-5æÚq´Ô’åÒ<ÅêÈy¾ÓàJ”˜JÜx jrØr$³â Ö úhI>] Ò¢€·î©¡ðÝr'O£Ÿ·Š”É�—tº„=ûkA–ðxƒ‰™—D¸¿B9[ÄöÿlÄt{0W-�!I,žmDêµdê?ÚCѱZä=Y‘ˆ™Ÿ€Ií_ìªÙ·‡2—„¤x�&YI½×ÚžOv’ù¹Óh…¦Sõ Ÿ±˜¹ƒ­ûÞóäDÙ¥\š,²*‡cš™BÌxPN•�ý~ h$›u÷ÖÏ*~í§WN•QX¥`šd$ø‹~%*JveQ?ZƒëìpL£Ûp|FÊâ8ô½Ý7­l ®}¦=Hƒêg¿Ùö ðaJø>Sº½6ò²05‰ù?^Áå7Dêˆ{ü—Äqõk#ãliÎ/löRR"z|b!e‘ETˆ@p q½K®YX¨¿Pϸàqƒ>nÜÈqœºpjÐÇUïÎ`ÇáP½¼‘—çj(~};…çz줂æÏŽôè ¼¼` ²)t@óÁ]l/s¹ì^~HMõQ P�êB9y% ˜þùU2� w�]á½¶¼ýP¾wÅ�ðÊoòê"ñ«¦.4…g�êhVmý‰my¼öZ1š‡_åÍíÏUÿÛÞ­ƒ5´;°7ŲêÙ+—•xªò)tG±øÉ¥,]¶€°ê\ŠNù,¢õœDø|i�¥~¦Œª>¢ã+‡Çïouìݸ�âÀD^øã+, ­æ­Í{©»ÂÕ€—êÏšIþ?/³ÄÜLéî½Ø½r2÷r\;Ÿ_¬{†ÈsÕ4 †@ðVPp"””—3yõa-åY»(¾àçNWð‘ÇBú“KyêÉD«Ý4uÿýduz¦Ó ‚&GzÆACçò’–Êüæu'ñËR0 áԖƃ¹8&¦²øá4§Æ iqú¦ùâ°Ù’0÷˜! yaÜ=I$Í·Õa§ê,P÷•Ò¶‘23¥Å§*- ãfØH{x1)“)¯v÷©3ï�KL(—.Mò?ÐwÕŸF6NÄ7;2hH;¨ÛŒF´‰‰ŒMOgâ/×pçk›™øË5ŒMOG›˜8$KÜU¹ä6LÃ6Ûç¬×—æã˜˜BšÍFÚ=UûËqR€‚dH iN sÃ]ØkÜà­¢°âÒÒ°¥¥1Í]DQ¿Sƒe,ߟKx÷¾¢Ã2Ç‚Ô(ù>ëjqãÁ0�¤´4ÒÅ!ZAmçl Ge=ú™ó°ÙÒH�9ŽáÀˆpb è­¤=l»ôT¨±óz?œÆâûuØ÷Æ 0J 54÷/fñ¢Å—Ä Vl3°jUÇjK#Át¥C欮Âm°’ú}iD"õsRt˜“˜ûý84Uvj;ü×CØ=V,£ÃˆJM#ÍÖ—˜8ŠÈ¿0 [Zi‹R˜&¹iê#m�&ëýs±ÍÃQé@lÝûÉSš˜€5\‡éÞ4Òl>1Ü”ØÑÝŸNšm1¶Iµ–6‚·Š’OuXÓl¤<`A7”Óû½v BLš ÛÃ6¢½Eóßw ÒíÝf•J> &a‘�”yf‚[”n£ CL* ×ø&'õ ÔrøØp¢ç¤b{؆ÕÔ™~ƒ/à[Ò|i¶$Ì#ûºJ–YQ„…X˜ûp¶.1¡«Íη‘¶(M•�úÿýl¯öã�ñ1ÌMŒÃ¬ØôÉ a÷$aþÚ‰f¦•ð¯k9íõ߃i߃lƒíg¿±ö ‚î>ý5ùöÿ°YDM_7ùÞæ0H&Œœ@“§i�GÕQYÕwÚˆ7�%Èôo.p’siߨT=ù>'�%ˆBw⺠^Uñ÷«¶?)›·dS&¨ÈÎZÃêÀ6\íÍ„^hƒvhnö…³Q9�·BoŸ€z6k]�eZ,ÖÔx �àTùU�>®¦ÚÓ oü˜GßÀÔÆá ù PKôœd,=fË7Ö�E31É78 Ðc k¥¤Þ#�±a„I>ÇG–šªt ¿gZ9]ž2 I‹º–œ(¸]ô‘�–1Z�¶©g‡¯=�ò ¬‡K(@‹—§ž²½¾iŸJ‹Dp³2ø®UÖ K*$µìûl÷І„ä­¡do ÃÕ­œV†w®#•™6'�¢âl¶ç+h&Ç1o¶çßõUî …dŸö9|R€LSh$�Ɔ3eäЗ«>v.–â"v¾î�ë}ßm-X‹.Àwmª¥ÏzÐ ÂÞ<_9‘FGùÚC€ŽðX Pã'm= Ñh|µ§–‘:”K"Ð@ëÞÓÒ[ž~èhÂu¾‰Ú³É¼ …z ¥ �¬A+ùœZí(ièÖë»�¸G„tŠ<2Z­D“˃"ûé;9¤èÕf=M¸ÕÚÎë #L/ÑØÝm7Y®}9�¿6(™±&6R¼w'%­Æ{æú–3 UÀ·Q!>›•|6«øígåÞígÈ i�G€'PF’A „¶oØáîµ}{Óü·ÁÞÛÚ7Ø�@pÝüÃ…aÆ]ûü†a×pL�à…Þf¯ï>ßµt>-÷çí&8tO«ùà¶µ0í6ióxnÅ6_Ú3xbC)^ÔÄþäî`Þmí�N^ÛeÞðà‹¼:©”ÒŠr*lç¥üJžùã*®Z‚ŠuÍ&–u_èX^ h’ûw}ƒ!ßwU?famò;Á4Ú4°:h÷Òì� ^œ•ªSÜ ¸¼ï•ƒðn—¸{3yõ3xnÃr"?YÇþØÐ‡Óf"éɧpž¨¡Ê^ÄŽƒ5,x2 c×åN0`h,çh3Œíö ½ÙQMƒ!Ú'ä "rî"’ïs¢úíKd¼}/.0 I ­VÆyÖ á¸PCQµLÜ=ÆA5RiÄphqûžªºiìu9Š qNYIÚT‰ú÷7’ÛŸ£ÝPFö¾ÓXL앸xÑcÕL0 ìû‚s3Æ0ò›O9t¸kÈͭż £úr—è«'„ëà+'îQ>g·¾·4FèÐjŒD§ÎÅ$�ÇÕˆ¢¢nõ«rò?Ó�²ÌŠÞcggMW›óàô„÷ýÅXñ`ÏÚIÙ©pßôñ€«}mˆíø9Øb5 ¸qºåNç�¾‘›€Ç¦Ù6¢%pÌ$çÓi¤ÏLà.ÿõ0(�f´勳xCîhÄ^|šqñ–!IÛ_Ý˵½ç©ðõ´mtœ‚ Ñé�fÙ|În‹':�\ÈžZ\ è9{N¹b�Óaçl°™ð�k¨=�MK gÐI\.Ý2½÷Cb³r0ïYÜ èê©oT®°»ëºmÐëÄ­‹&eQxkÈy£ÇÔÂÝ�ßbA9•Ïöª˜–fñ߀Ž�)ƒígo:®£}ß=¸ö0¸~6¸Ïö ‚[WP¸®8 µ†“N2yÌäAWw¾ŽàÛ;5Ò@¤9ŠJ)vDqø¬Éúš…¿Xð8ÃDj��âu˜B‹)®t@[×S^'Žý¥œ&´xQw¿x1P£›h ¹ªŸ¼µè‚¡ù¨û¹PØiF4SþÖ&ŠÕÉ,K[NüdXýïghh†nƒv''O6ã½3‚ˆÀb*”ã§"oË.\3W³¼�bÒ�‡ûpî{uh:ê©­&,V†Lþ˜yûL¿‚ÂÌÛgö~ÐÈ"��ýq1Õ³â©{ýE6Ϻ»c^Á˜ôPùQ1ö{ãiø «|¼x»êÀSGáÁj¼hhö3VN•Qâ 'aª…8Cî×ò©oc×Ú‘3HŽÊfÛÖbL+â1¨Á[_ÌŽ¬“Ìx|U�ÉücI\±Œ£Ïe°còË,›>ˆ©þÞ ³K¨©o¢©v';�G“:Ï‚~fÆ=Ù쬓ÁÆûR‘pSõþ>»Üœu5âx'‹£!ÑÌ›åg:ìíQDÊegv ú‘ uîv‡wùrOéÐJãPª?¢fº¿uí—.]¼pi6ó¿ëç9Þ„8ß˾]YÐñ5?~fõ-ÑùÕdsĭǹ7{gwc#)6 ãžvžÒ€̉©þ¯j3Ö™5äîÊ¢|xŒXçé‡f°;Òˆé¶| ßËG§Ñ ÓÕSöI=á÷èp×’_*!£àQ[.’”ÂL„|�KfVšqÓ˜7+ý=I˜öd³³NƒìUþ_óHÒÍp¼±"—¢Ï›pÕ;q•EÖ‰K�Cç´“¿¿IÅ«'zÎàóÓû­&“‡œ?ï¤fŒŽð{çí/�¦)ëÑ=dí:‚ÜáAº3 sH~Ò”í¯îýä  ŸdäìþLvVjÑÇJÒTÓ-ìÙ·“¬2xU„ߟ‚.ÄLÜÔrrwf2Z#@î¸,ÿÖ•í¡Ì` <¤¿çú MŸå’yZ$¤I ,Ž7c�y„Ü]Y–<+©& £÷¾£oTÃ8ÝYŠvgqx\ óîõg³áÄL-#W6úÑ:Úd©ÛŒ„Á\O/yÎòSj‹s) �‘D$` `ðßd#¦ÛÞæ/;ë щ™‡¿…V½÷³ÖÁþé2rŠ´¶œÆy®–ìÝG0Ýkë\"3`µ´÷ûÆìpß³ �ýù"²w;ÐGÎ!ÉìkY’^�’›CVƒžðYs1Ö¢}²=Hƒìgý·�@  ×ìÛãÊçý]ß:¿��ƒ„ï1ýmøž¯F\¼xñÃkÉ8ïïyŒ>Ê¿ê‡Òìm&)"©ß};Ÿ¾"(cö7“sØ1vá*–/ˆ¼_>Ñ”1²Û÷xÔŽ]<ýl?Ïdy¤ƒ¼ß¯cÇaZ³•ˆóy”†¬â�AìøU…§TDÌ[Æ}_í`ûA- ·–”ûË;žæ�·±vS!'&aM6R¾ÛNì¯7ñPë.ÖoÍ£º±‚ D>¸œU ":‘ÃK¿z {[$Ë~ÿ‘Ÿn&ãÍb-* ÓRXþ#Õ¾àŽÉ¿ÝÀ"ÓÕNcÕ»9ueÔD$‘oD®É!ã¿ÃYù° '%¯ÿσWG¾?ræ¿~_ÂB¯ôC¡ç2‡îÓ!ºD�@ ¸å(++… ‚o5111¢Aô|5dwQ¡/�ð �a½ì4¬Û÷ž3º2U„à |{¹xñâUß;::¸xñ"/^¤½½�ŽŽE¡½½EQ0 b�%�@ Ü(½ˆ þ‚4^E_3z›�Ð%&tfp3—Œp‚¡º^¼x‘ŽŽ:::hoo¿$$´µµÑÖÖ& M �@ ¸µ…ž¢Â€……€â½ìè/~BWÆ�@ �@ n=º Ýńޖ>\¥t_êÐÛ÷aøD‡®ÏÀÎMêÜT�›ÔmëÚ' Û±Ý7 u)Üøë º¶À}�¸­k»xñâfQ„�@ ÜB7þaÖ_wÛ¼\ùIJ�«ƒ´ úõr�`H¹ØÏo}½XAé¶µun=……v®~�äU‚‚Ô#Óa~¾Ó-±a�‰ëñÿ®Lý‰ ½‰BDn-A¡«mwÛ¹ú½µ�@ n¾<�[wA¡·§–BPn~qáb/ÂB_¢BÏåš�Ë=N¤·ÿõ&&ôpFêÄ‚›[Pèš�¤êÑ' i;n;ï íìg´�?Žrþ8ÊyÒ(Ò¨I¨FMB2Õ(“¨1�@ †FPèúôâ{bÙåttw0€£!n¼ˆÐÛï]ûtøzn½½6òb_yK½üÐs–BÏ øºN¬û2‰¾f'‚[GPèöÙ}¹C{�~aHµv´5Óü÷¿ÐrìoWý¦œw œwàéü{Ää úÎ#¨‚DÍ �@pí‚B÷Y ]‚BÏ'—øq2„  ܼ‚CÏY Ý'tÿìmvB¿3’$?÷µô¡·Î$€ËË!ü BPnmA¡{ ….1áb·ß»Ä†ëÂ{¶’óåéhiÐþ-Çþ†§¾ŒQÑ+Q‡DŠÚ�àn¿~¶ön¢B_O-…  ÜÜ‚~D…ž"BÇ`Û÷°þ˜Ÿ-ÀÏ÷a~œ�@pk Ý—“»ÆÞÕ«}¹Ó6°n�¡÷ÄüÖýЕGÉŸr`^:q£ûÚ¯ŽìgÖã^¾�ôÉ>û)ÿãlñ›–F\:×eïšX÷|2:œüz%Û¿^«ÿo2]–phãü¡*”PÙ—†·=Sò V=hBÝ^Ͷ½DåÌx屟=·ÛÙ¶ª�ÈŒUÌø4ƒeïE’±&þë%žø“Š¥¿ŽÄ1�W²ï%Ö6-eÝCh?á7·“]ZGs›¯*”»ç?ÁÒ9&Ôn-j£×zc«"{C§ï~Š•‰aןžÇAQv.ç@ƒyNIÜe²a¿ ݈Îg…Æ–¦Z�zã6l.ÐÚ¹u-}褭·§–BPnQzÔØÛ÷¾–;\ÕÖ¥>2Öljt »9{ˆþ„ �@pë tûד‹®Ïk¢£­™óå¯ëÄ]¥¯0föú![þ`ú§Øx¿]à7[à¡ß[Åòû‚h>^Jö[›yñt¯<ÙIºŠãìÈj`Ƀñ’A«�m¿ZO^G4¶ÇmD¨(ýÏ·Øö+'ªuÏ‘è÷@‰?ÞHl€nðN’·’¼?åÀ�.(TïÙE©lå…¤±˜ÚnLÙ“¨'§°ðî<þð×<D§0òÇ‘3Gx³âÍ+…¯¯8¾rðhÔ£W‹ ý¹„W6xÑ„~S¥ #î±ôìg Òì%³ò L íìuA ª¤Ž €£ª�y>:€s¥ø2”ÐÀ"Jë“I¹ä§©ˆzìVß×i±ÊÙüÜ&öN[‡m  …�ß"ï{/t;¦7Thµ ìÝ]ÎŒFÔC,³¿þÞòØøÅïã«oý!¶ÿv;&l`Y¤�n-j£×èÿWÆ!ëQ}f§vvÆë\XûA.U¡ X¹8 Nå³åí,áIÈ…°ø%,�©»Ö¤Û{¹Ÿ+BP¾BB÷¿{.cð×®$&ô%(ô'*ЋÒáOH"‚@ðí{ �\¹Æòšhþ{Ö€—9ø%Zhþ{Á–Ç›;ö·2Øü^% í#˜2{«0×¾té)¹úO+Xó±…EQµ¼Wpœ6ãV­I':¨Ž‚ ëÙñI*óf´ï¥Pµœ­káÓ]¬ßšGuc#&[YöÓeÌsuîA¡&,‘ˆŒ&BÕÀÊ×óÈ;–LºöÛ^ÝAaMŒ±0ÿ©gXZÀêçöÒÐë}‰å[ÁEd¼]A�G…!f Ïü(ñŠ™ Íe{)l %ùùgXÔéìDO�Ú§w°÷}‰�34>ÈàéKi�#°=ý 6³—‚WW^š¡€#�ÍÿJé©FŒ�eÑ�—“8AÍ™’mdü¹�£çT„NKfùŠhÊŸ_K� øõ£¸W¿É’ö®} hB¶•«H™ÜÍñj·S|°�Ðû±¨Á±ûrÙ[\‡Øü›ÍŸR1iöÝWX™³|›3ó¨<݆j\$)�¯Â6½‡ ôqéëÎÿ}å« yœ•eQ¸u/ÕD°pÍ/Hñì`Å‹‡°ü|Ë£Õ4®å‰mnnXƒéýõlί¦¡MEèÔd–ÿh– : þ¸že¾z¿»u/ÅAËÙº&º{Í=+ÕºbœLñ9´]¸kȧÇ×tHãmÌ5k¨#ù^ :O=Mç\`YÀâ™úK‡üò _+>øåÁ>…«êéG‹°|¾ƒŸuÍP8×YNiFªÿVÌIU¶ŸþÛ¨Þ³žŒÝ•¸´‘Ì1;Ù[fà¹×WíêÅF¯(ÿFжåÀ‚¥DŸË'»À�"�FÜ‚,ÚnÞôþ«’æÔ±�®¤Z—H¼§šJ'tg°WA䟄væ@µQ Y¡ÞÁ®ëHyÈ�´62’Hƒ“ò`hb~*ì}³˜øŸÆÓ—ë¥�iÃrx9Ç¢Y4¹{wQÊÞ�'`ëÔa3XþÛh.Ä„›¥‘²wr¨p š©sI‹—)é´Ñ„Æ6–K˜åV/œÅ¥‰ã›]W{mÔ]¶ë¦ê½lŠN*H€<ÙŠm¶©ÇŒ7G×v¯�°Òì_Z1š$p—‘¹ÃEÒ“ €Úw3(2¬dñÔFJ²Þ¦¢UƒF†ÎY‹öŸ–’r9ŰYé¤Kß^‚¦ã´/¦�ǃõw>ÂS?|ŠÅ÷Àa{=JÕ>мq¤/[ÊÒe 0˧ät�ü.Á^odÚT–©2G;Pú8=�½�uK—¥³8^¦¾A¹j¤.ÉdÉ×�Ô~ø³cx¼ g+÷�ù[ظ-‹¢cžkúº·‹MlbûvŒÛ{ ¼Øq­bôÿÚÈ®†õò÷Å~þ'f&·&Ãúù>Œ«ƒ·ô|�Ôàú³Ÿ éxÏ~6¨×I:*«i–-Äßg`l`:ëÞôMuôôÏd ‰³ Œ%šˆ <ª�.Î9ðª"|Ǫ­ÄOÊæ-4L¡´íÛÆš 5ÍM@SóÀ†t�h�&t“ñl147C°W;„ªT¨‚ÔÐn`ÊÙYkX؆«½™Ð mÐs‘BG?ù†k��aÄO %¯ÈÁÉöønãj*k½¸Ný�'J»ÊÃ�£ÆKe[(sfE3v,ÿ÷]…êûTA –;nW±7/ž¼›È¨xæÏޏò ›œ4£E«ëé”�ÁqÂw>D¢IGPè}D¼iÇ p¬œJO(ÖïÅcÃl ;>®Æ^ë%r\m�ùj‰Œµ`0º0àŒºÓD5ã¡¢©o`4Vëöæ–b¿ÐÌ¡JˆL�EìÀì¢`Ë\Ó¢ˆŠI!yz rÐÜ­ÞgLÊæxoå:R‹VååŒË —=4Q_/aŒê|>®1bTÛ©¿á€~¼Ñ÷”SF£¸ð E£8VÙ{=•èaZ¢fÍ`ì/Ñ&5Åç�4y’“íZâï›ÁØ0Hün(yûû¶Ñ±W-U‘1M ¡8'“l³™»¦N#z\�ÕÝA‘D‡fc?ÞŒ·ÒIÄ\&÷ÔUTã•+©3E¡ŽPì‰ey¤H$¶}EÇašÐFÅŸ~ÆÓo^7Î#Öô’Ú­mŽ%ù±XVoßKÝ”)}[Ðt¶ü—x«$ž%~Ú©óƒ ^Ú]�·Ã ÓV°é‡Ñâ.r³Nxk™Yg1O1c‰2££ñÊ}Ɔ&ùlV–<^7µõ6Ý×^5–õïŸÆé8ËÎmE>™Ðã!Ì©À¸ËCk§ÝN£)³ ’Å‚î�ÃÔxÃñ¶‡Æ:ƒÁ×þCà ]ãOz v9_ÝÃ#6# ýN<ñ˜˜6Y‡RWÈο¾‹~… óÀu®Þîçôù]ÌPn-úš,Ðß>×%(øèEDÀÏ>�àÛÑù ÔÒ×{jûE䌂!O¯ÇÓMok3ö‡AÕõZué©‘ï§úê´ È|³ÕcÙô@ »~²š¼œÊ™Ïì4JìÄ“ämȦ2l[Ÿ�ç‹×–ñRåÕû7ÜÁö¢æ¯ÝÆ"mÏ­ØvÕ>¡&_@ºŠ*/3¦wžë9;öF�iBM個ÊôÐ+Wø+ÍèQxÍ4·õXs®#þ'=XLye%¥]˾O–³ñùDt×SÑ=ë­ÝAŒó…¼øü6޶ƒvÎ l»ÛWGj V¡T*_9¨»ÝÇÞ—@Äîä¶QMéßÕÁpË×­#êà!*—“óïû(>ý +ú9—!£‡dmò;Á4Ú4à²ê½žº•\^ÜÔá½âooWZíò2û·ÑKVp÷bVFÔ㨮¢üí-”Ç.eñÝš+ì$ò;*Š*ÑVg r¨=Sн]I©ºš±STÿÿ¥4´ÀæÕ¾óiráýÀNú WÄP8WÀÚ_•sÇ”^¢WLNaÑ„5ì( %´Ï8:âµòÞ«¥úwþkœ� 犩¾†‘ ›µŠ ³€òͬ(òŠ»ÅÍŒl"éɧpž¨¡Ê^ÄŽƒ5,x2êÊnþª¡q[ïi€.jKgéýÉØíõ(žB¶l*Z=­®ñ`¾½Ç=«Çô=DW¨-ØIî…}Ø‚®ó^¤›}©?•Æ›1É94^sÈ îóû¹ß‹·<ß!� n××y"×ÒñˆMlbûöm\Ÿ p|ˆ…/µ¿ÁA�ÇNñ�:œU»X³ô Ölر ¨;�=SYHqm×´íÒ0ÔYYDy#´57Ó[ªÍ ìUvånfý[GQM›OòD/Ím  oÃ!T¶€§¥Ó™» Ú�œ<ÙŒ·íR.8ö—rp·\éÔÝ�ŒUï¢`Ózv¢ü@›_y‹£r4¶û;Å�ö*>(çL}9Å ¨�˜º;Z##˜2N–ã¸àäÐ/ñÒå4ßAD`Ååœi(góOÒYõz9Þ@€œ�gð¶V“óÇm”«â±=¾Š¥ 8Û€«»“¬#.§÷*‡Î0Q Ÿ—Ràpâø¯Twí2%’HUå…‡8sÎAa‘¯Ö‚ÅËÏ¿À /¾Àêï¸!Œ‰Ç:½™â¿Ó6-žè‘À‰6o) mš�eÿ²Š&yi¨o t¢ u[5Åë8SÕ­Þ{rÁ…«M�F«»âšÂÂjÎÎ}Ô*aGöŠ3oŸyM¿á¯žR.MLÀEù‡¨;yˆÂ�»b�ôe£=qSU\F½:Œð»­¤ÞÂÙS�W·§é´”P‰E�/vÞ«T9]^;…ŸhYøò&6ü~~¿�M//$´âå=/fL"Kîw²ëχziwAD/œ{³©lëçú'$“YÁ[…�õKò̲·äQ×µ¼¦õ ‡*¾9ÁÍ‹rªŒ¢ÏZÑM´÷@fê©oéï(Æ0.µWÏg9d¾_‹Þ0ϱœ>û¶¿_„£ût¢SvìÞÿëJV®XÉÊ«ø—ŒÔ®Á£ŽìõàîðõÝõõ¾…ºÑܧë}CCޝ®^ á©ÚCnC�¤^ÀCÕžíä|æö]çWžô#UVc{Ÿ_ÍÑyËXrß¶¿¹Žœ»×^Žb?ܲÿóA¯ï¢àõõd£ÅaeùÊ%Ä�^4`RðÒ³¸‚¢Y¸ÄŠî 7Ì€måê6f³æ‰½Œ0ÆòÐÊH‚ƨùá ZÏÊ¡Sm¬z4µDì¤<ö¾þ36�ØHò�°yËJ²/@иæü ùJÁ"ÔD„ÖKùÑ“ÛýI»šèÔtâ«¶ñÖšÕJšA„lÇÙèYþtxc3+W´4!Š%O/!Z‘Ýøú[±÷F²¹´’èY�‘ý'D0EÎ#sõ£d´©ÑNNdÙ‚h‚Æè|õ¾ég8"çaì¬÷x�UóH¹óÊyǦYs1îù Û?—¡MÂø@*&©ÿS½kì]<õèÀ^y…s�Ü{=9Jû/–ÐDÒ®`ÝÛ`MUñ¦P¨U`„]ÙsÚ¿†�µäl«µ„ eæƒÆ«óš�©1�ºØ�³'Æq§‹e±¤�ïÇ…ØÃXØý añ$NXCq…—ØžÅOÿóuì(·°|úՂâÿ�Çš·û“UÔD,XÈ„ëièüÛòƒ_°l÷2žÍ¡¹Ôbšiã¹q·¸‰‘´z”‚¿°åC )ÜJÜH(ïç8c|Æwþ–Ï)Œ¸2"�Ö‘ôE6ÙV…„‚ž„­Û*žÚOíHÓ½â­òÔhL”qØ›FtD…;³8<2˜àQ:_�ÈéV,Grز­íX#ú�žÃtGÊ«h¬¯ãÍM�ZŒXO!<Ö‘œídì— @ƒù�A-wèMX3‚oÿ¸~°¿õÊõ,GK‚o'y˃Թ©�Û€á�Ûˆ‹/6Ãsû:¤¢‚4jcfÿîÆ”VC99Etw';²œŒŸgà˜µŽM�™nyCð:ËÙñüZ MÏðÆOgðM‡œ«~ckÊ¢yaÃ2ßÓé{µ47œäPæËlþ2ž—3Ò‰ð++�ä½ø;äU¼ñl|·rjæÐïVð‡s6^Y›2°W|ÞŒ´×qèoÅ4Œ³’…ÿöcv´.äÕµCó*L�@Љ»ûIs„É[Cö”3åÉ´Ò6,hZ;·¯ñ­êëþ¦CA øŸ+4øw_g†BTC" µ pÃІ¢®ÛEæÛ»È ôE¬Z`úÔŠ—ò×דç %qf7¿�H]DlÑfvåÏÇòà vUÛ+ÙñìZŠUl?zhbB%x,‡·> "þ™Ä[WLÔ¡kwðÖ–³£´ÆX–¬Lb‚@0Ô¨¡©üm¶| !u@HlʵÎ2‚"&0„‚€‚o7|†Bó±¿á¶ÿCvËÿCÐäEM �@0�¿˜¡ !á‘n–·Dg3˜õ”F2uHOv¨Ó�àÀ}þZƒº _@ øL€(�@ð�F5ÊĈÉó†$­“ç¡e…*�@ |ÃAA Ü}'�€úëëÐFè úNš(L�@ �à �@pstFª FEÿËu¥¡�ý9*ñx�@ �à†ŒáE‚›uH$ºû^ôL…€zFÏ^ÿ^êà¡|×vŠÎÞ i+Ô¼³…Üß2j("3»÷ ÌRùt'ëß©¹yËÄUÂöϧ¶Cô/·’]Õ¼³ž�aW×ÑÇUíÙNá a¾�@ðM#‰"7›¨0föïhþ{-ÇÞíwÿ“çù–K zf‚›ª÷²): R‡‚öîRïÖ÷Ñ)z°g¿ ólXäk¿>wi…Ú4R"D]9¡ ¤Ûnpž²L°|¥Ax\µÞŸCQ‡•§mæ¾o´Š›úš2òß«Á´ä)BzØhökìaÏô•ÎWvrß+Ç ¡4+èbSH±è.�Ÿ,+È×úøàl[r$y<Ý€ü8¹ÙõÌLàþ·B;ùØ•<"YîVã îÓUåî£qú¿�~O?�P¯vå¤äõíØ‡Ñ’‘¸Ô8Œþ «¯<¯×®<µ½“OM+(¢´3n(‡¤æÔ¥˜E¯(BPÿóPlyyâl¼g?C9ï@9åüq¤Q“:7ê�©×<+A©.$ÿ+ K—E£ñÖ�óZ>‡#sWõNvº“X:K§ ÙR¬géÃ?ÚCѱZä=Y‘ˆ™Ÿ€I­P[œEþ ½6˜Öó aøîö=9”{d¤fúø4’Âe”Ed—:pi²ÈªŽif 1ãA9UBöû5 ‘ð(a$¤Z1ÉþÒö/�Ôì{—2·„Üá�‰VRcÃ�<µí-¢ <—Šu²(4Vä’ó‘“Æs21�ذhÁùi9‡[Ѩ=xFÆ�ú€™¦‚Lò[ôÈ�N‚o×Ñähå®GlXjÈÝSB“ZÂÝLLj ­Ÿò>‘Ë–âq¤/ŽF8?ÜÎ_”žš5œª÷öPæ’‘;Ü �L!eº˜I66ÒgjüØ�“’Ì\<ßÑQÿ¹äp¬ß�!Ì[Cá»å8NžF?o)“;m¥×~Ög›¹oC–<께;ßâ_ ;[Äö·1™‚ñ\¨Ç9ÚJÚl#’ÇAá;EÔK2x$L‰©Ä�— &‡-GB0+j½ �¶‘!‹›¼@ ‚‚@ ÜT£Lߨ2ç©z4ã}‚Ú„IŸ‹ã Üågÿ°{¬X>ÍG“šFt×xÐ[Eɧ:¬?œ‹) žü×]L²’6݈|"—�¥5XÃ-H°†WQqG÷'¯nÊ ìèîФñà.Í$«´‘¥3O÷ž¶_…¤–Ãdž½d.f�‚³Áç…6ÌÅ1q1鱸à ìK' zèhEšd%%J¦ñƒ-äÖ¸±L¯¥°âžL#\íÁ¾;“¢f¢ð O´§ÞNI¨�8e'gÀEý ̳’0ã¡ü(WN©w•Sx„5ªž¿|Ô�ó9ÞL¸§†Â?åc?Bü£Ýf3„3÷ûCß~Z[ebæ/&|´‡ò�™Øb°ŽÓa™Åá3 sî6CÁ[Õ«]Íß»ÍöÞN¸µíJk&é…°>Ñ×Ï´aíþ÷t+I€³¸ŒÃ\«]yðxOS¾7‹Ã- ÒøæÌGãïúÊóºìÊCý)ãlßÒ6É`bœ«œÓJLïƒRö31݈Z /$ðÔbãåcåp¬¶pjön¡Š~úÙYÁ8*ëÑǧ“4QÆ}¶©ÿ ‚o0á‰I©%÷µªîMc\i>މ�°ô^�Oˆ.8Ì´ÅÑhFi¡Æ�æÉÅ,)îé�@ �@ðí!`€ÿë‹–&<²­ C;JÂÓ™NÛ©2Þ=ng¸RK«bôŸFG®óMÔ~˜Mvà)Ôã?m¿½¹kb#Å{wRÒ*a¼g.ÖPp¹<è �.ÃH1‚Ñ�ñ9TÃÕ2(@‹—§ž²½Ù”‰àf$†Ë’$3\-!I@ pöð>rŽ ‡F7JD[_.ÑȪh$fb5cbH ŠÃIS£“w³� µD«Ѐ¤‡iò•Oóô±s±±óuèÌXçèý>Mô¸œ0: @ÒäÆÙÒéri4�Oðe¤å gÌ8õ �䯾;“}U&læ=TP:@ ¸<Uøº i0öHR0¦;�ýfýõ³è™6'�¢âl¶ç+h&Ç1ov?1|FiÑøú �ÚCS È_5á¾PHöiŸ`"È4u€Fil8S„˜ „  ß.tãÃp—9p£Cãuà8‚a,H$Å7XUšœ4uô1¸Œì©Å¥€. ‘³ç4€ç³BŠ;âX™j‚šj>¾r0ÝÖ}èLˆN‡4Ëæs¦Zœ8Ñ�äê5m¿x�¸uѤ,Jo 9o㘚‚V+ã<ë†p \¨¡¨Z&î?‹'FèÐjŒD§ÎÅ$�ÇÕˆ¢‘h:ÝûîŽâBœSV’6U¢þý�äöSæšéÑhþüE_ÕbŒNò9d:=º0#ólfdÜg=È#» ©gL³mDKà<˜IΧÓHŸÙ{ÉÈ£uðùY<„!+�œmÕ`Òôgnj?«Ešl&lÈg&0íÓU8ÜMÔ¿—Íá–Ó8ÏÕShGRg\§ÃÎÙ`3á!¾ò©/ØNÑè4Ò¢4H#µH­n<} dÊÙªšB°˜®Av訥äýZÆý ��“’×ß¼ü<èPdWþlÖ·$ G;¹ÕíÊSOÍ1…°©F4üƒìÊ뤶ÞÍ”‰2²ÜY�ô´«k’ dW2:­BM£ÆËànÄ©ÖqO€„;@AéÔ%›ÜnÐôa?]ö81ÅO?‹§'„¸ï/ÆŠ{ÖNÊN…cík¹ÓyÎÐt¸p{dŒ#@¢C;~¶X (nœn¹StðÙ›l !(Á·­ó ·’ôy6;_·#w(èî]@ôÀt!Ÿä“ó^r€‡á—%L&9ÞIÍá÷Î%:ÔLÜÔrrwf2Z#@îyB8!Ÿ”�»¯ÍH™g9%'ÂI˜(£ŸdäìþLvVjÑÇJÒTÓ-ìÙ·“¬2xU„ߟ‚.¤÷´ý˜=ÔçR #)ˆHÀòÌ$Œ{²ÙY'ƒŒ÷¥úïøÕf¬3kÈÝ•Eùð±Îó/¨„ÝaÀ]¾‡ÜS:´Ò8”ê�¨™î[{Þ»a&zl!Ùg¢Xjê<‹‰qX«ö�•uM€%$ŽÔÙ¿ç¨8íäï/A’Añꉞ£�ƒ¢w˨÷º¨?{v×úÊÖ’€õȲ²Ž¢éð ŠM¬¦ï™�Tì+D^h&lü5Öé2rŠ´¶œÆy®–ìÝG0ÝkóŸ*m5û÷PÞ à:Ùˆò^õã¦1ïþ?Ö™^]>[J�X»‚,¢PW¶‡2ƒ�ðßÿÂî‰C·'‹Ì#2´*ègÙú�Zï©)bÏñÌ&]ÿ�³¼ý§$@a&éûÓ0MV(Ú—‹K«AÖË8Jí8¿oA'1Ýö6ÙYOˆÆH̼8Œ~ìJãÇf�^Û‰ÿô°+Wùï¹I2C¡'N{.ùGšðœk¤1 ›¬ÆÎ8.ƒ±+#Á ÉÊ,C𠌜ÉÜK³®¶«>ó¼.»’��¢äíl [L(ŸÛ‘b!,[óT"2M½0vÛ6zÛFúû ctÉ™£KÖÈÈÈË*B™Ž•ˆÐñÜ/Ø“ÿu6­vž/úP+›Ÿ·S]]ÄïÛÔŠóæÍ»†F—O€aÒCA,à(é1-#–1#:ªEÎM6�ˆˆˆˆœI†ÝEñº®P#µõ­„“*‘³‘F(ˆÈtõ‚F(ˆˆˆü¾Ÿø5BADN�F(ˆˆˆˆˆˆˆÈœ)P‘9S  """""""s¦@ADDDDDDDæL�‚ˆˆˆˆˆˆˆÌ™‘ÏCO3�Ôwa©$æ^V©0Í�6:ë Ï¢«a3-h—~®C4?þ›^KÝ3DgzüÁV¶Ôw�øôŽ$¡—ê©{ôGlÞSyŠˆÈ9ÍPˆˆœ�tÕÿ+ ¬ç¯‚>ŒÞvw†J¥ÿÖÛ�CÙwƒøf¨åc»kyäÕÿ¥· bo4Òøë ÂÜ*×y±“ ´­�¶ƒ`¤,²‹*¨ð;¦|]í[~®#.r‚uÄÄwS�’‚Sxº±y(û¦ç¬<åú*7â;SñEo; ÛºHf€eó¨,ÅmN}Ö‚u¹ s0JwÂCEU N¢t<ÝHg*GÖbÝPòÍiÊwt›'[ŒÐp1÷Þæ%üôfB×n¢übHìÚB=AjVÚÓ¨‰ï‡m[šH^é ò»˜^·ãÑò\áý½8×ßGÅå£E~ �úC`7HZ.J+xÌtç¬é·G0 ‹dÆUéã*ý :ë~H{á½l¼~ºîs’½;öà¸q�ˆíÚÂS»ýl\5Åsz&ßǹ»› _|+5+p …Gvìeé�WñÖ\Ö=ç�fˆ¦†62 ƒÙWVàÏ«·�†Ý`Ž}ËðÚctnkæ­÷!öd7æâ"Ö­õbŸbÕ‘Ý�´îéfÀj¥îI#·ˆõk¼ðA+õ;º1L‹„ÍGE°§-ýùn};Bxxߪ)žr½ †iy¦•¨a‡A ×êJJóÃÔ?úW}3ˆ/ƒôh›9TßUÌ‘¹?6 ¦ñÁ&Ì;`Ú8�Èûq<_ÝHqÄvnæ©Î¾}“¾í=tg•P½Þ‹iuQÿ/í„WºÉéleO¿÷%f‡1UݱhëÂå«f(»Ñ×=”r¸­ —iÙ¾™–÷çDi)Œq™‡ÂŒ¾×›ô˜-»¦ /Àp˜¦'³)YñY˜�ص™ß+æoîô§ÆÃáÉ·y(Dç —ª»Š±wQÿX‘U<Ó퟉õìTu¸ˆÈYJ—<ˆÈ¹Éêfï;™­«$x[�€'€èkÍ„/® ú¶*ªotйc/ t¼¸ÇÚjªn«¢ju>CýIî¤eW Þ¤h¸•�ïŒÖ¬–ßÚ2Êo)ÁÞÕIw ¢¯·»ºŠªÊ —šÿzr|”ݼ,Ýq˜I¼ƒ–<–9ŽO…�4¿å¤tù �;+BëK ŠÖø0Ƕ�ÏÎǾg ?¬ ‘“o�$IF¢ù¹„žü!›wÛÉÏŽ‰Ï®˜“ýY&Æp-;¡¤ªŠ`UK­´~peUXB0X†oѱÛ1†!ye‚,KuÒÕôìf—ULÕmA*Væb NŸ¢�m³ú– — M÷Ʀz?dãÈꦫßOUu5ÕÁÑΠé%¬¢ÔcjulïÄqc UÁj‚—vÓòZHþMçÊõƒUT®Ì'3õé;¥°¸’Ò%ÙÓ|*Jo,Wª…Gþ¹‘¾<'Ƀ½S^b3ù>¶è=˜Ä™×GÓƒÑb¹È�õµæ¶î94-ò¯ Ru[5—F騗¾Ø ¶¯‹Da€Ê[‚TݼŒ\À�õ2\¹~Êo«"8M˜àZ^Aåµ.œW—Qu[ÁÑoˇ†LŠ7TSUUŲá=tŽ~“í¼¶‚àz?ÎY|.#£uGU0HÕ:'];:Hdx)º¼�½]IÀ"´'DnÑRìs=~lN–­ à_<Ó+1p__Nq`Eéz<Ç”Ÿorü”�–C"" œ_P¶ÊOálFžLµîd‚äÇ]l«¯£¶¶ŽæÎØ4lj�s‰W_+µ�>Ä/ø ,³C†‡’›{g5þdòc65n?ílehi:¸czK©¼®ð³úaªmæS’³‡-[ê¨}¼kÅÊt˜0Õþ™¬ž�©9˨‘s´öóXeç3µ´ ¸——ȃø¡ý-Ô÷$1l&VŒøÇ9¸rGŸ…EŠ‘ÈÊíØ˜ää Ä“à²spØÒ÷/°¥›Ðñ~ {Aº»c:dŽ=¦ ïÕ³xÝ©(m;zñ­+Çq(r|§fw;|¥z†`¢{gÖòJû6Õáñ3ë±y%Üþ ‹ÌDëÌ��j/pSz÷×1²zyîD×=6‹¾½Ûh|+¢ ¬%é8ɹ¢ÿÎVj�ƒÃG`�“S4&‚$èÚQO—¹€��,œ©9Ç $âIœ×Œ¾¢ÅNr"ÄRžk½´lÛK›IÇ~Å7›�8‘ãÇŽûê9\0ï¢ù¹(®JcÞ7Åç;)yí9š{Ü”Wú§M�ŠÐVßLhŒ‹K©Zã}­“¬;gå¼ W¡#¦éñ&:<ÕÛ-Â;êhýÀ‚,/eÁ’Ïê¬ÂRª¿YBô•ZžzÉæµ®Ø¡S³ÉNZÃ.J×›’¹^ü¹³Xo¸…Öd kü˜Ãašþ­™Î««ð›“íŸ)êÙêp ""gƒá Gw–ÂpˆÆÛIøê rrä¬#¸ÂV‚XÂÄa$é>?N´ȇd¸�ë*J.qb Ñg�ÃH�[8.›úë<»Ý OvÑ(Œ› !ôŽ…ëj÷ô�ùÞ.‰"Ï׳w°—ØGZ:ó)ó; ¡3d窻'¾†Ýovc\îÃeV˜®Ä5P¿;AOz�ÄøˆT7m/v“ÿ�Ší1Úÿ�q0N·ÿŽmNåä˜Äúbàu¤ÃÆóGƒ²¼eøi¤m—AÂW†Ç8ÑãgÂçxºxã`;õÛzYº¡ _ÎèžÉ™üó BÏ×ÓaPtÏ86%·ÕP2þ¾©Öݦ{ ?}ÁR†‰iXŸ–—gMõ„OuŒ¶Ÿ7ÂÍ5”ädç˜XïÎu’ ƒüÉŽÙÑ}•Ü÷qOéq�ël�YkpË´§�õ 3•dhÒ…6ËzvIdê:\DD�‚ˆÈY–¤{gm6ÃJÂ’RÜ60——ái¨§¶ÇŽ9l‘ý•õ”åØ)Zë§áÅZêLÒ“œ­·C†�ÀÊ·hÚZÇ^Ó"iPéM¾I×µ%ØYGm�G†qì7àñ.šŸOPæsO?‡BA)Õw�Þîiæ‘×ÜÆ¢Ã¢)çñÜ¥¢ìÙÖ‚y‡W`x)«ñŽþ-Dý£!ŠW{1m°êú�[ki·YPPF° ”Àâzê~¾#eá¸~šù¦’á#°2DÓÖ::² isXïœ2<™¼¬t½¸�½ñ}ñ(á§ëx;·ˆõ«§è]²Œe¯6Q[¹ŒzJ®kK°ÿ¢–ÚŽ >á¾ÊCÛËõ4ý.3a€ýÈœßOtO­¿ ‰‘8TGݯݔT–°t­Ÿ†mµÔe™0¼ï�8² j¡ù5‹d†\8cÑÓÞ@{a!ÞÜé: &K×øix~ µ`^•Ÿ=>j¥á½b|žÑ!×SìãåexžndË{é î–­/Ĺ­{†Î|kÝ–ô··6'EëËñ\VH¢£�¦rŒ|¬}» }¹ W¬“æm&XÃNŠÖ�–¶éƳð)~Q!×î¦x} 6'žË-Z·5ϱc:M¯u»ÙNçsíD†ãD>„†'»q^ø´ãg8�XM�Ôtâ]]NÑŠ2Ü �Ô°C|k+G�K—šüd›Eé·œ'ôy˜ôs<¥íÏ6Ó�ò¶ôˆÌËT,÷Nþù~§…†ÎÎKÚh¨Ûrßi¢ù­’E‰Úê©ûÀMñ†R<“M iL±îa;Öö§ØÜabZ¦¿ŒÒ)ߤƒ¢<Ô7n&¼Ð i9X¹ÁV7m mt[ zã âOÖẲŒò/O~ü;¦8f¢½}ä?ãqÇìTÛ¼º”åo7Q÷df*�å P²h®õ¬wê:\Dä,4OE "ÓÔ c·m£·m¤¿;3F— `!é¾W&�522ò²ŠP¾’D?ˆ‘y± {²“º'"”ÞS6»y*zšyh—›M·iöu9NüóæÝ C£Ë'À0éa3p”ôp#–1#*E‘s“ÚI""ò{+j¡i—‰9œ sEÅì™�P‘éê�Pù}?ñk„‚ˆœ }W#"""""""s¦@ADDDDDDDæL�‚ˆˆˆˆˆˆˆÌ™™3 """""""2g DDDDDDDdÎ �ˆœË’áNº~¼9cwtÓÚÐB8eÀ°‰o]%ÅùVo; ÛºHf€eó¨,ÅmBì�F=€aX�[Bå:/v„¶5ÐvŒ”EvQ~‡ [DDDD~¯h„‚ˆœÓzÞ"ÜÿÙÿc»› _\AÍ�ÕÔÜè`ÏŽ½$I²wÇ7ÖP}g ‡iÞ+DË.(¹³šêê*–Æ[hëzÚh‰/¥ê®jª«Kà•B–ÊZDDDD~¿h„‚ˆœ“ûZxî×Q’u·ŽXV6Þ5edLâüJMþæ­rca¢–“ÞX.žT �üs‚@¥“ä¯{±âQâÙùØ÷lá‡ïQ�o°7’$I#ßOèÉÒ^Xƒ?;N$Þ\•»ˆˆˆˆ(P9«Ù—¨ZÑ�uì¹¤Š²‹,º¸)½ûëY½<7þIy%Üþ ‹ÌDë1Õhö—ƒlòXo´§Ç}¥›�wÝ& 3~Wå-""""¿tɃˆÈ¸p ?ß$ºûbæ¡nâ¸qNò/ˆé3q,¶3ÔÅžŸ�‘ãÂy¸‡ˆÍŽcô°pºLÌ‹œXza‘‡-BÏa'®±9HÐýf‘¤J[DDDDÎnóT"2M½0vÛ6zÛÌ'=ºÉ2€…@æè’522òòYýi}ú³Iýëƒå‚u°�†çG'e4¼*Kpg@ìÍ&ðYPPJp­“$¡ëiëMOÊèøƒ åWÛÓëO…i|° óŽ{)+ÐÁ&""_€ÿ¼y7ƒÀÐèò 0 X£ËQÒãïF&,cFTŠ"ê8ˆˆ(PQ  @ADfE—<ˆˆˆˆˆˆˆÈœ)P‘9S  """""""s¦@ADDDDDDDæL�‚ˆˆˆˆˆˆˆÌ™™3 """""""2g DDDDDDDdÎ(ˆˆˆˆˆˆˆÈœ)P‘93T"r.jooW!ˆˆÈïµââb‚ˆœV DD�,™3]ò """""""s¦@ADDDDDDDæL�‚ˆˆˆˆˆˆˆÌ™™3MÊ("_X‘þáCa""ý2d’<’ĵÈE~v>žÅ\‹\*(‘Ï�ùBÚñ»L${a6—-¾Œ’KJp-ré�|0¼ÿÎû¸¹øÃËÿP&""""r†ÍSˆÈ4õÂØmÛèm0ŸtiÀB stÉyùd6>8<ÈÏvÿŒ+ó®d­wíŒ�ñí õ…øÓåJæ‚Lí=‘¹žøçÍ»†F—O€aÀ]Ž)`dÂ2fD¥(¢ŽƒˆÈç( ²õ×[)¿²|N—2øøÏÿöy¾^ôõS*Ähüþœÿ<ÿ>þíþUdœèj†Ãlý›û©ßïçÛ?ýï¬]tjvÎБ!žÿíó¼õá[$­$Eqó•7ûÞoç{ö0�9kùÛ¿MQ&Ðõßù‡}ÜôOP1UñíäLâO~ÊÊ'UŽm?o„õ5”,žÅÃ?ê`ëã[Ùù»Ã02\Elø“»YëÉ€ýõÜÿOÃ|ç�;ñ̇áùîã†ûïg­®x‘Ó¨ûÅGhË«¡êËæ©_ù¡vêþcá~Xú'÷Q~ñ‰®(IWÃfZºÇþo1ПCÙwk(ÊR  "§—.y‘/ŒŸíþ·úo�ó¼çpÓ•7ñ³Ý?ã;%ß9ÉWá`íÿõ+lŽ€žgÊ �GÆüS[FOu>E×Á®cîëØßÁ#ýÁI:ê;ùeóŠ* g·�Ì|ûŸ‚ÇI—cÉ]5³ _ö±õû�þ£ûyà~ç±_=Æ~øc2~p?«Žy?¯òðÿz•kîý{… "rÚ¹oÜDÕéZùâbªþâ*Ú·l¦ï¤Vd⫼ßXœnbK‡›«²´ÿDD�‚ˆœ#vünWæ]y“,^tþExs½¼ôÎK¬¾|õÌOøÕ�©y Ì5”Çþ]¿áà‚%¿ûW}ÃlÿŸ÷¦G(|g˜ýùfެ¿ƒ¬]õ쉟Dz»þ–ûצ;¶ÿãavXÀ¥k¯ÃÞú±[â�Ê áà ln:ÂM®á…§�ßv*FçsOÑ Ó[Fp�‡Ø‹Ñ<ìÇ‘Œ0ðQü·R½ÒyÌS'† ŸÞÿaø'Ü9ÿ<®¸&�÷ž©çÕ?º�ëÆÿíhÛüO¼~�¾u\wôZ|›Ÿþeÿߣ#VwðƒIßÿ^øû¿æ +È?~¯žý[þú©…ÜýÃÿÎMŸî¾(­�5­)ú¨™úía,,›‹’[+ðçŒËö¼ÀvG”§ÃÇÜÍÝ{¾Ë/õ°jÅè�É}lýŸõdÜñ÷/ÏЇFDN!‹î�u4½™Ä°YpÁ2**‹I¾ø­y©¶7óP‡�Ï"ÚßGÜ^ÂíA?ŽDˆæ§[2Æê·]Ï×ÓºßÂÌË×x˜iŒƒõf=½½”ûnñ¦ëÐG1nßHɇ�“o{ÒµDio�âÛPŽ©�*"g€~6RD>w>>ÀÁÄÁYÍ™0�¯¸‘ýèè�Eí—G{8˜u'ÿøÐ÷Ù�ÝI}ív>œø†Ù÷æanúoßçnßa^{ò:�Bç“�±=zwüÃ÷ùó ÷³ï0,˜cç–_[}îÉ;½É®fZ˨þæF6Þs+®}M´m ;) VQ}‡Ÿäž=DR³{ïc—?Ltai�¼Fýó= �»ÿð®­lnOpÍ=ÿÈ÷¿–Á¾·�ù,˜Õû¿�›6ÝÉ’îzžxr+›ŸÚÏ’¯k\˜pÌ+ãí_uá,ßÄÆ{6QóG…IûZîÿûeK&4Ž3XrE!?è€<Àv×�lüƒóô¡‘S+¦ýu“Ò?ÛÈÆon¤üKpLUeƒ¡� ¼‚TÝU�÷Ãvºâн³™È—ngÓ·6Q½övF°º¶Ñ:\BÍ=é:ÞóN3m½'ñÚ¦Øö¤¡Ä¾]tæ”P¼X»TD(ˆÈ9â½Ø{d/Ì>%ëÊ^˜MøPxvžŸÇ5×yÈÈôPtMÃÝaö=þa­àÏ+dÙ—/‚Áñ£þ _ZÁªË/ijæ–Œf‡õŸl}ÿ:6~m çMq¹C´§ûÅì6'×ÑHºåê,p§¿U2³±[É“-�óЏcÃ¥ìoÚÊkýã:ñá0à –°ê†B.ôXuéÔ«8þý®›øVÕeüæ—õìûÒ�|kÝ…S<ÛÄsE.¡Æ-Ôoo'œqE…“|o6Iprdü¾ˆ†‰]S�ÿí­líÖ‡FDNq‹ØÅUž^šŸ¨§ù•.,Oû„Ç\èÂe6Ó´H'莀ë’tj÷WP½ÊE´§—X¸…ÚÇ6³ù±§èL&IĬ“{}Çm{²%ÙÛÁ½Ì«!È"rƨ¾‘Ï]d Âe‹/;%ër-rñ~ìýÙ?a¬ÓztêNê‚é´ Ã6á9,8nž…wõ:{ã|ï/|ú؇¿ó?½ŸU£s&¢\ &�wS³¦1ÕàÖ .,û«š~DýÿYòé½Ã£;®fýþ‡‰KOÑÙ÷!ñ!¸pŠù0×Vsï’á}]t<õ+6R}íg-õ¼‹/$ñì>bxÆ�RæÝwz¸ÈãöCþ*¾öÕ .º"Æß=ô0¯þÃ}\çÐgGDN;¾Ê{ñ Ú×IÓãíø¾¾Ïøºð¸fó‘) p,»•�«�SlË"ObæØ1ëèè9`’sƒ1å¶'ËB„>rQ\¨½)"gŽF(ˆÈç(ôGÈÏÎ?%ë*XT@¤?2Ë0á ¯½ÔÁ‡‘ZöÄÉp/Á3«I^”¿{™íï|Høÿ¼Ì¾Ñ‰zH¤"tG²q¹fwµ«/Ï7ùýú¦~Rf·V^ÊÁ=�  /.$#ÙÉΗ{øð7-ììž[9¿]ÏÃϳê¾ûX•ÜÆÃ¿ÜÇä‘L‚®�íD2\x¯ Py}.}¢ÇFKobm#7…9ì=­ÔmÑ»?Š‘ï"ÿêr‚+2ißò »òk¸w�Þ¬gKo ׺ˆu6Ò¸+ XŽeTl(Â9UÍ:¦åéÂXGìøo RR˜¤ýçµ$Öm"�— ôLí¹åT­t�’ :ºã6¿iâ:¬OÀ¹¼œŠ/;Oó^LÒYÿ¬âŸ1ã1ñ®âΪ¥6ùÅ<&­Þv¶u‘ÌËæ!PYŠñz=mƒ™�ò°n��#¯7²++@¹Ï>‡5'hßòvq‘³¬O ¼eAŠ?i¥¾-‚u8Jw2÷&Æ¥ªW»�(m Mt›%×yOáI½ïEDDD�‚ˆÈ¬åg瓟�ú74#1dbŸ®Ïb³ã_–Iç®KǃCÝô�ïÁ“•®NÝ«*pO¹‚ݽà^“`ä{põwÐk¥;hÑ×ëèìóqw�û´UÌVb€„abCC&Ūñ.NÒQ»…΃ÅwÑòŠAÉ7«ð‘Îâƒàí''ßi¦á7ù”ßR„ÃÑךÓÉõèmá‘í{YZ]„kyÿÍØ+«(:Á~`dlÝ+p°…Gžï ¨¦„¡}]$ +¨^å„þ(FºÓþMçªÊ.6IôE1RLqQŸExgíÆõv3<”Vãšìñ©(½±\<©ùç�J'É_Ǹì+NÚ¶ïÂ(Ì%ùZ’eë=œl—7™Ó3Íþ·u&(\åÄ�†7ø¦ 1RÚZ �;áçS¹zòõ'#QŒ|?¡'H{a þì8‘8xs'o:8—ø §•Ú¦=ôe.çöÕ£¯#ÞAËË"üb÷Ìa�yq€’ŒÍ´å)±jÙó!øvÒ•òqû†"©ÑA5UDDD(ˆˆ|Ñt·RWÛ�•2p®¬ xñ ¦w%ž·ZÙ›32€©�Ï5ÒI�³¼†à²ÙSm¤èKùñÙÍή«¨˜iØü¡Ÿë$–ç)¿zúÇG_¯§öw`Ùøÿ¸· $èÚQO—¹€��,œ) %~^Îè%.ñhçÓ²m¹+îþô’Žø¡ý-Ô÷¦;‡†Íd ö“ž�Ç"Oâ¼ftŒÁb'9b)p¯(Ç¿³•ÚÇãàðXçÄ�ÉÒu¥´î¬gs³…ýòÖ¯qNYâžUAéÀô•Sµ‚ô¥A/u±´Ê¯‹ˆˆˆ‘/¸ž6êvtÑ{(Šñt-ÝW•\žùYÇkI ž›éJ^7†©ÿÏÍtžgb.ü«¦þ~Úu}9ž§ټŀ#&þòÆ%‹ü¿aËS͸î.Ã�qšÞ£Í‰çr‹ÖmMÄsì˜N“ðk�ÄnñX¢ykíI¬¬"Ê—�;ad¸¬÷²å7ãþ“r<ËËð4ÔSÛcǶÈþÊzÊrì€�'Iã¿×ºÀ�÷úrŠf˜êÂp:±š©;èÄ»ºœ¢e¸©=`‡$øÖVb±Nšw´a˜` ;)Zg’$B-4¿f`b‘ÌðÈ›ú´çY]5‡ &K×øix~ µ`^•èï¤õ=7¥7;9B&-;[!ÃMÀµ±ù±nŠÿ¢ Ö,·â)£â`-�Ï;©Þà�d”C”Ž7,<·›Ÿ½�+ì´¼¦tý$!�ÍEqp# J ,®§îç{1RŽëÇÍŸ�вg[ æ>\ŠnðP߸™ðBƒ¤å`å,öP}×Øç¨™G^sðŸÀLV»·µrÄ4 iá)*QcEDDä jžŠ@D¦©ÆnÛFoÛ€ù¤ÃHÈ™£KÖÈÈÈË*B9—%^¯¥öP€M7ºT"rvœøçÍ»†F—O€aÀ]Ž’¾(idÂ2fD¥(rn²©DDDN‹î&ËW*L‘ßE(""r O«¾ Aƒˆˆˆœ4BADN u9Ç(P‘SIÁ‚ˆˆÈÙ{þÖy\DæD—<ˆˆˆˆˆœ�)ÀÈý±ý pôèQæÏŸ�#ï|Î[”żyš{]DN? """""g™‘‘„?¤ÿÐ6ÛgƒŽæ—gÁ Dä´Ó%"rÊÚ6*‘3#Þ÷ñqa€Ífã£HŒÃýƒ:�‹Èi§@ADDDDä,“ˆ>.Lø´�o³ññG*$9í(ˆˆˆˆˆœeŽMMû÷#ÃGTH"rÚ)P‘Ù™áÿ"""rÍŸ?}3~AÆ’ˆœv DäT·ˆˆˆÈi¶è‚E¤R“�RH¥RœAö‰œÇ'»_DdJ DädLl€¨á!""r,rØY´8û¸P!•Jq�ËÁy‹²æz>^×ù\DfE?)"s52á_5@DDDΰyóæQà¹{ÎyôÔÏÑ£)æÏ·áÈËá¼EYsýÉÈÉÎã:§‹ÈŒ(ˆÈÉ™d‘3`Þ¼yœ¿8›ógŸìªÆŸÃ§ t®‘cè’™kƒcª†Ç�R‰ˆˆœuRãÎ㥠"³¦@ADfkªÉ𯇠DDDÎ>cçð©Fjd‚ˆLJ�‚ˆLg¦a|�ptt‘³ËÑqçóé‚‘c(P‘¹˜x™Ãø!’c¡‚ˆˆˆœ]ƾ˜xéÃÈ í9Ç)P‘Ù4¦úE‡±FÇXCÄRñ‰ˆˆœu,ަš¤QDäSú•™­ÉF'Œ… ¶ÑƈBJ‘³�Åñ¡‚‚™‘ÿ"2™éfxžjþ„±Æˆˆˆˆœ]Æ ãÄÉ.}™¦Í "ç˜y*™Eý0oÜ¿¶qÿÎ]ŒÑeÁèbŒ[Æc÷Üñ‹ê'‘32Ãߦ›DÙ·]& G9þç$(ˆÈ§tɃˆL×™7ÅmÆ50æ�68æM¸¬!2U˜0Yh ADDäÔ„ #“ Ó… /wÐèQ  "§­±2¾q2Ù}“… ¶qÁÁLá�‘¹…“ý}ì1©)B…‰Ëd?9rÛ "¢†Êq£&ŽP`Š@a¬±2þ2‰éF'ˆˆˆÈé &ŽRþ�ÿw²Ñ “]ê 0AD(ˆÈ ‡ ã©I+6>»Â6E� @ADDäÌ L*L fs©ƒˆˆ9©ÆÉx)ŽŸCaº &ˆˆˆœùóöd5Nv{ºË.ˆˆõ"rÒõÅÄQãÛ$›j"""rzƒ„ñÿŸxCjŠAa‚ˆÌH#Dd. “y³hTŒŒ{ìdA‚B‘3Ÿx{ªA?)"³¦†½ˆœl½1ÙÜ DDD¾x¦ @a‚ˆœdÇ@DäDêŽÉ‚]Þ ""òÅ2Ýe3=FDdÆN�ˆÈÉÔ³‘ zGDDäÌ™Åý#sxžˆóU"rˆˆˆ|ñ�œÀß&ˆÈ wDDNU]¢zFDDä‹eäÿ&"¢†¾ˆ¨>‘ã(LuDDuŠˆˆˆÌ‰ÂQã_DT·ˆˆˆÈ¬)H‘öÿYH2%&$ТIEND®B`‚icingadb-web-1.5.0/library/000077500000000000000000000000001527064444300155055ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/000077500000000000000000000000001527064444300172055ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Authentication/000077500000000000000000000000001527064444300221645ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Authentication/ObjectAuthorization.php000066400000000000000000000212101527064444300266600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Authentication; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use InvalidArgumentException; use ipl\Orm\Compat\FilterProcessor; use ipl\Orm\Model; use ipl\Sql\Expression; use ipl\Sql\Select; use ipl\Stdlib\Filter; class ObjectAuthorization { use Auth; use Database; /** @var array */ protected static $knownGrants = []; /** * Caches already applied filters to an object * * @var array */ protected static $matchedFilters = []; /** * Check whether the permission is granted on the object * * @param string $permission * @param Model $for The object * * @return bool */ public static function grantsOn(string $permission, Model $for): bool { $self = new static(); $tableName = $for->getTableName(); $uniqueId = $for->{$for->getKeyName()}; if (! isset($uniqueId)) { return false; } if (! isset(self::$knownGrants[$tableName][$uniqueId])) { $self->loadGrants( get_class($for), Filter::equal($for->getKeyName(), $uniqueId), $uniqueId, false ); } return $self->checkGrants($permission, self::$knownGrants[$tableName][$uniqueId]); } /** * Check whether the permission is granted on objects matching the type and filter * * The check will be performed on every object matching the filter. Though the result * only allows to determine whether the permission is granted on **any** or *none* * of the objects in question. Any subsequent call to {@see ObjectAuthorization::grantsOn} * will make use of the underlying results the check has determined in order to avoid * unnecessary queries. * * @param string $permission * @param string $type * @param Filter\Rule $filter * @param bool $cache Pass `false` to not perform the check on every object * * @return bool */ public static function grantsOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool { switch ($type) { case 'host': $for = Host::class; break; case 'service': $for = Service::class; break; case 'dependency_node': $for = DependencyNode::class; break; default: throw new InvalidArgumentException(sprintf('Unknown type "%s"', $type)); } $self = new static(); $uniqueId = spl_object_hash($filter); if (! isset(self::$knownGrants[$type][$uniqueId])) { $self->loadGrants($for, $filter, $uniqueId, $cache); } return $self->checkGrants($permission, self::$knownGrants[$type][$uniqueId]); } /** * Check whether the given filter matches on the given object * * @param string $queryString * @param Model $object * * @return bool */ public static function matchesOn(string $queryString, Model $object): bool { $self = new static(); $uniqueId = $object->{$object->getKeyName()}; if (! isset(self::$matchedFilters[$queryString][$uniqueId])) { $restriction = 'icingadb/filter/services'; if ($object instanceof Host) { $restriction = 'icingadb/filter/hosts'; } $filter = $self->parseRestriction($queryString, $restriction); $query = $object::on($self->getDb()); $query ->filter($filter) ->filter(Filter::equal($object->getKeyName(), $uniqueId)) ->columns([new Expression('1')]); $result = $query->execute()->hasResult(); self::$matchedFilters[$queryString][$uniqueId] = $result; return $result; } return self::$matchedFilters[$queryString][$uniqueId]; } /** * Load all the user's roles that grant access to at least one object matching the filter * * @param string $model The class path to the object model * @param Filter\Rule $filter * @param string $cacheKey * @param bool $cache Pass `false` to not populate the cache with the matching objects * * @return void */ protected function loadGrants(string $model, Filter\Rule $filter, string $cacheKey, bool $cache = true) { /** @var Model $model */ $query = $model::on($this->getDb()); $tableName = $query->getModel()->getTableName(); $inspectedRoles = []; $roleExpressions = []; $rolesWithoutRestrictions = []; foreach ($this->getAuth()->getUser()->getRoles() as $role) { $roleFilter = Filter::all(); if (($restriction = $role->getRestrictions('icingadb/filter/objects'))) { $roleFilter->add($this->parseRestriction($restriction, 'icingadb/filter/objects')); } if ($tableName === 'host' || $tableName === 'service' || $tableName === 'dependency_node') { if (($restriction = $role->getRestrictions('icingadb/filter/hosts'))) { $roleFilter->add($this->parseRestriction($restriction, 'icingadb/filter/hosts')); } } if ( ($tableName === 'dependency_node' || $tableName === 'service') && ($restriction = $role->getRestrictions('icingadb/filter/services')) ) { $roleFilter->add($this->parseRestriction($restriction, 'icingadb/filter/services')); } if ($roleFilter->isEmpty()) { $rolesWithoutRestrictions[] = $role->getName(); continue; } $roleName = str_replace('.', '_', $role->getName()); $inspectedRoles[$roleName] = $role->getName(); $roleName = $this->getDb()->quoteIdentifier($roleName); if ($cache) { FilterProcessor::apply($roleFilter, $query); $where = $query->getSelectBase()->getWhere(); $query->getSelectBase()->resetWhere(); $values = []; $rendered = $this->getDb()->getQueryBuilder()->buildCondition($where, $values); $roleExpressions[$roleName] = new Expression($rendered, null, ...$values); } else { $subQuery = clone $query; $roleExpressions[$roleName] = $subQuery ->columns([new Expression('1')]) ->filter($roleFilter) ->filter($filter) ->limit(1) ->assembleSelect() ->resetOrderBy(); } } $rolesWithRestrictions = []; if (! empty($roleExpressions)) { if ($cache) { $query->columns('id')->withColumns($roleExpressions); $query->filter($filter); } else { $query = [$this->getDb()->fetchOne((new Select())->columns($roleExpressions))]; } foreach ($query as $row) { $roles = $rolesWithoutRestrictions; foreach ($inspectedRoles as $alias => $roleName) { if ($row->$alias) { $rolesWithRestrictions[$roleName] = true; $roles[] = $roleName; } } if ($cache) { self::$knownGrants[$tableName][$row->id] = $roles; } } } self::$knownGrants[$tableName][$cacheKey] = array_merge( $rolesWithoutRestrictions, array_keys($rolesWithRestrictions) ); } /** * Check if any of the given roles grants the permission * * @param string $permission * @param array $roles * * @return bool */ protected function checkGrants(string $permission, array $roles): bool { if (empty($roles)) { return false; } $granted = false; foreach ($this->getAuth()->getUser()->getRoles() as $role) { if ($role->denies($permission)) { return false; } elseif ($granted || ! $role->grants($permission)) { continue; } $granted = in_array($role->getName(), $roles, true); } return $granted; } } icingadb-web-1.5.0/library/Icingadb/Command/000077500000000000000000000000001527064444300205635ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Command/IcingaApiCommand.php000066400000000000000000000046041527064444300244230ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command; class IcingaApiCommand { /** * Command data * * @var array */ protected $data; /** * Name of the endpoint * * @var string */ protected $endpoint; /** * HTTP method to use * * @var string */ protected $method = 'POST'; /** * Create a new Icinga 2 API command * * @param string $endpoint * @param array $data * * @return static */ public static function create(string $endpoint, array $data): self { return (new static()) ->setEndpoint($endpoint) ->setData($data); } /** * Get the command data * * @return array */ public function getData(): array { if ($this->data === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->data; } /** * Set the command data * * @param array $data * * @return $this */ public function setData(array $data): self { $this->data = $data; return $this; } /** * Get the name of the endpoint * * @return string */ public function getEndpoint(): string { if ($this->endpoint === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->endpoint; } /** * Set the name of the endpoint * * @param string $endpoint * * @return $this */ public function setEndpoint(string $endpoint): self { $this->endpoint = $endpoint; return $this; } /** * Get the HTTP method to use * * @return string */ public function getMethod(): string { return $this->method; } /** * Set the HTTP method to use * * @param string $method All uppercase HTTP method name. Case-sensitive. * * @return $this */ public function setMethod(string $method): self { $this->method = $method; return $this; } } icingadb-web-1.5.0/library/Icingadb/Command/IcingaCommand.php000066400000000000000000000010121527064444300237570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command; /** * Base class for commands sent to an Icinga instance */ abstract class IcingaCommand { /** * Get the name of the command * * @return string */ public function getName(): string { $nsParts = explode('\\', get_called_class()); return substr_replace(end($nsParts), '', -7); // Remove 'Command' Suffix } } icingadb-web-1.5.0/library/Icingadb/Command/Instance/000077500000000000000000000000001527064444300223275ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Command/Instance/ToggleInstanceFeatureCommand.php000066400000000000000000000052551527064444300305700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Instance; use Icinga\Module\Icingadb\Command\IcingaCommand; /** * Enable or disable a feature of an Icinga instance */ class ToggleInstanceFeatureCommand extends IcingaCommand { /** * Feature for enabling or disabling active host checks on an Icinga instance */ public const FEATURE_ACTIVE_HOST_CHECKS = 'active_host_checks_enabled'; /** * Feature for enabling or disabling active service checks on an Icinga instance */ public const FEATURE_ACTIVE_SERVICE_CHECKS = 'active_service_checks_enabled'; /** * Feature for enabling or disabling host and service event handlers on an Icinga instance */ public const FEATURE_EVENT_HANDLERS = 'event_handlers_enabled'; /** * Feature for enabling or disabling host and service flap detection on an Icinga instance */ public const FEATURE_FLAP_DETECTION = 'flap_detection_enabled'; /** * Feature for enabling or disabling host and service notifications on an Icinga instance */ public const FEATURE_NOTIFICATIONS = 'notifications_enabled'; /** * Feature for enabling or disabling the processing of host and service performance data on an Icinga instance */ public const FEATURE_PERFORMANCE_DATA = 'process_performance_data'; /** * Feature that is to be enabled or disabled * * @var string */ protected $feature; /** * Whether the feature should be enabled or disabled * * @var bool */ protected $enabled; /** * Set the feature that is to be enabled or disabled * * @param string $feature * * @return $this */ public function setFeature(string $feature): self { $this->feature = $feature; return $this; } /** * Get the feature that is to be enabled or disabled * * @return string */ public function getFeature(): string { if ($this->feature === null) { throw new \LogicException('You have to set the feature first before getting it.'); } return $this->feature; } /** * Set whether the feature should be enabled or disabled * * @param bool $enabled * * @return $this */ public function setEnabled(bool $enabled = true): self { $this->enabled = $enabled; return $this; } /** * Get whether the feature should be enabled or disabled * * @return ?bool */ public function getEnabled() { return $this->enabled; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/000077500000000000000000000000001527064444300217715ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Command/Object/AcknowledgeProblemCommand.php000066400000000000000000000070211527064444300275450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; use DateTime; /** * Acknowledge a host or service problem */ class AcknowledgeProblemCommand extends WithCommentCommand { /** * Whether the acknowledgement is sticky * * Sticky acknowledgements remain until the host or service recovers. Non-sticky acknowledgements will be * automatically removed when the host or service state changes. * * @var bool */ protected $sticky = false; /** * Whether to send a notification about the acknowledgement * @var bool */ protected $notify = false; /** * Whether the comment associated with the acknowledgement is persistent * * Persistent comments are not lost the next time the monitoring host restarts. * * @var bool */ protected $persistent = false; /** * Optional time when the acknowledgement should expire * * @var int */ protected $expireTime; /** @var ?DateTime Timestamp of when the acknowledgement is set */ protected ?DateTime $acknowledgementTime = null; /** * Set whether the acknowledgement is sticky * * @param bool $sticky * * @return $this */ public function setSticky(bool $sticky = true): self { $this->sticky = $sticky; return $this; } /** * Is the acknowledgement sticky? * * @return bool */ public function getSticky(): bool { return $this->sticky; } /** * Set whether to send a notification about the acknowledgement * * @param bool $notify * * @return $this */ public function setNotify(bool $notify = true): self { $this->notify = $notify; return $this; } /** * Get whether to send a notification about the acknowledgement * * @return bool */ public function getNotify(): bool { return $this->notify; } /** * Set whether the comment associated with the acknowledgement is persistent * * @param bool $persistent * * @return $this */ public function setPersistent(bool $persistent = true): self { $this->persistent = $persistent; return $this; } /** * Is the comment associated with the acknowledgement is persistent? * * @return bool */ public function getPersistent(): bool { return $this->persistent; } /** * Set the time when the acknowledgement should expire * * @param int $expireTime * * @return $this */ public function setExpireTime(int $expireTime): self { $this->expireTime = $expireTime; return $this; } /** * Set the time of the acknowledgement * * @param DateTime $acknowledgementTime * * @return $this */ public function setAcknowledgementTime(DateTime $acknowledgementTime): static { $this->acknowledgementTime = $acknowledgementTime; return $this; } /** * Get the time when the acknowledgement should expire * * @return ?int */ public function getExpireTime() { return $this->expireTime; } /** * Get the time of the acknowledgement * * @return ?DateTime */ public function getAcknowledgementTime(): ?DateTime { return $this->acknowledgementTime; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/AddCommentCommand.php000066400000000000000000000015311527064444300260140ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Add a comment to a host or service */ class AddCommentCommand extends WithCommentCommand { /** * Optional time when the acknowledgement should expire * * @var int */ protected $expireTime; /** * Set the time when the acknowledgement should expire * * @param int $expireTime * * @return $this */ public function setExpireTime(int $expireTime): self { $this->expireTime = $expireTime; return $this; } /** * Get the time when the acknowledgement should expire * * @return ?int */ public function getExpireTime() { return $this->expireTime; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/CommandAuthor.php000066400000000000000000000015331527064444300252450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; trait CommandAuthor { /** * Author of the command * * @var string */ protected $author; /** * Set the author * * @param string $author * * @return $this */ public function setAuthor(string $author): self { $this->author = $author; return $this; } /** * Get the author * * @return string */ public function getAuthor(): string { if ($this->author === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->author; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/DeleteCommentCommand.php000066400000000000000000000004411527064444300265250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Delete a host or service comment */ class DeleteCommentCommand extends ObjectsCommand { use CommandAuthor; } icingadb-web-1.5.0/library/Icingadb/Command/Object/DeleteDowntimeCommand.php000066400000000000000000000004431527064444300267130ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Delete a host or service downtime */ class DeleteDowntimeCommand extends ObjectsCommand { use CommandAuthor; } icingadb-web-1.5.0/library/Icingadb/Command/Object/GetObjectCommand.php000066400000000000000000000012541527064444300256510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; class GetObjectCommand extends ObjectsCommand { /** @var array */ protected $attributes; /** * Get the attributes to query * * @return ?array */ public function getAttributes() { return $this->attributes; } /** * Set the attributes to query * * @param array $attributes * * @return $this */ public function setAttributes(array $attributes): self { $this->attributes = $attributes; return $this; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/ObjectsCommand.php000066400000000000000000000043561527064444300254020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; use ArrayIterator; use Generator; use Icinga\Module\Icingadb\Command\IcingaCommand; use InvalidArgumentException; use ipl\Orm\Model; use Iterator; use LogicException; use Traversable; /** * Base class for commands that involve monitored objects, i.e. hosts or services */ abstract class ObjectsCommand extends IcingaCommand { /** * Involved objects * * @var ?Iterator */ protected $objects; /** * How many objects to process at once * * @var ?int */ protected ?int $chunkSize = null; /** * Set the involved objects * * @param Iterator $objects Except generators * * @return $this * * @throws InvalidArgumentException If a generator is passed */ public function setObjects(Iterator $objects): self { if ($objects instanceof Generator) { throw new InvalidArgumentException('Generators are not supported'); } $this->objects = $objects; return $this; } /** * Set the involved object * * @param Model $object * * @return $this * * @deprecated Use setObjects() instead */ public function setObject(Model $object): self { return $this->setObjects(new ArrayIterator([$object])); } /** * Get the involved objects * * @return Iterator */ public function getObjects(): Iterator { if ($this->objects === null) { throw new LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->objects; } /** * Set how many objects to process at once * * @param ?int $chunkSize * * @return $this */ public function setChunkSize(?int $chunkSize): static { $this->chunkSize = $chunkSize; return $this; } /** * Get how many objects to process at once * * @return ?int */ public function getChunkSize(): ?int { return $this->chunkSize; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/ProcessCheckResultCommand.php000066400000000000000000000052501527064444300275560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Submit a passive check result for a host or service */ class ProcessCheckResultCommand extends ObjectsCommand { /** * Host up */ public const HOST_UP = 0; /** * Host down */ public const HOST_DOWN = 1; /** * Service ok */ public const SERVICE_OK = 0; /** * Service warning */ public const SERVICE_WARNING = 1; /** * Service critical */ public const SERVICE_CRITICAL = 2; /** * Service unknown */ public const SERVICE_UNKNOWN = 3; /** * Status code of the host or service check result * * @var int */ protected $status; /** * Text output of the host or service check result * * @var string */ protected $output; /** * Optional performance data of the host or service check result * * @var string */ protected $performanceData; /** * Set the status code of the host or service check result * * @param int $status * * @return $this */ public function setStatus(int $status): self { $this->status = $status; return $this; } /** * Get the status code of the host or service check result * * @return int */ public function getStatus(): int { if ($this->status === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->status; } /** * Set the text output of the host or service check result * * @param string $output * * @return $this */ public function setOutput(string $output): self { $this->output = $output; return $this; } /** * Get the text output of the host or service check result * * @return ?string */ public function getOutput() { return $this->output; } /** * Set the performance data of the host or service check result * * @param ?string $performanceData * * @return $this */ public function setPerformanceData(?string $performanceData = null): self { $this->performanceData = $performanceData; return $this; } /** * Get the performance data of the host or service check result * * @return ?string */ public function getPerformanceData() { return $this->performanceData; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/PropagateHostDowntimeCommand.php000066400000000000000000000021771527064444300302770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Schedule and propagate host downtime * * @deprecated Use {@see ScheduleDowntimeCommand} instead */ class PropagateHostDowntimeCommand extends ScheduleHostDowntimeCommand { protected $childOption = ScheduleDowntimeCommand::SCHEDULE_CHILDREN; /** * Set whether the downtime for child hosts are all set to be triggered by this' host downtime * * @param bool $triggered * * @return $this */ public function setTriggered(bool $triggered = true): self { return $this->setChildOption( $triggered ? ScheduleDowntimeCommand::TRIGGER_CHILDREN : ScheduleDowntimeCommand::SCHEDULE_CHILDREN ); } /** * Get whether the downtime for child hosts are all set to be triggered by this' host downtime * * @return bool */ public function getTriggered(): bool { return $this->getChildOption() === ScheduleDowntimeCommand::TRIGGER_CHILDREN; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/RemoveAcknowledgementCommand.php000066400000000000000000000005001527064444300302610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Remove a problem acknowledgement from a host or service */ class RemoveAcknowledgementCommand extends ObjectsCommand { use CommandAuthor; } icingadb-web-1.5.0/library/Icingadb/Command/Object/ScheduleCheckCommand.php000066400000000000000000000042371527064444300265010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Schedule a check */ class ScheduleCheckCommand extends ObjectsCommand { /** * Time when the next check of a host or service is to be scheduled * * If active checks are disabled on a host- or service-specific or program-wide basis or the host or service is * already scheduled to be checked at an earlier time, etc. The check may not actually be scheduled at the time * specified. This behaviour can be overridden by setting `ScheduledCheck::$forced' to true. * * @var int Unix timestamp */ protected $checkTime; /** * Whether the check is forced * * Forced checks are performed regardless of what time it is (e.g. time period restrictions are ignored) and whether * or not active checks are enabled on a host- or service-specific or program-wide basis. * * @var bool */ protected $forced = false; /** * Set the time when the next check of a host or service is to be scheduled * * @param int $checkTime Unix timestamp * * @return $this */ public function setCheckTime(int $checkTime): self { $this->checkTime = $checkTime; return $this; } /** * Get the time when the next check of a host or service is to be scheduled * * @return int Unix timestamp */ public function getCheckTime(): int { if ($this->checkTime === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->checkTime; } /** * Set whether the check is forced * * @param bool $forced * * @return $this */ public function setForced(bool $forced = true): self { $this->forced = $forced; return $this; } /** * Get whether the check is forced * * @return bool */ public function getForced(): bool { return $this->forced; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/ScheduleDowntimeCommand.php000066400000000000000000000141531527064444300272500ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Schedule a host or service downtime * * @phpstan-type CHILD_OPTION self::IGNORE_CHILDREN|self::TRIGGER_CHILDREN|self::SCHEDULE_CHILDREN */ class ScheduleDowntimeCommand extends AddCommentCommand { /** @var int Do not do anything with children */ public const IGNORE_CHILDREN = 0; /** @var int Schedule a downtime for all children and trigger them by this downtime */ public const TRIGGER_CHILDREN = 1; /** @var int Schedule a downtime for all children but do not trigger them by this downtime */ public const SCHEDULE_CHILDREN = 2; /** * Downtime starts at the exact time specified * * If `Downtime::$fixed' is set to false, the time between `Downtime::$start' and `Downtime::$end' at which a * host or service transitions to a problem state determines the time at which the downtime actually starts. * The downtime will then last for `Downtime::$duration' seconds. * * @var int Unix timestamp */ protected $start; /** * Downtime ends at the exact time specified * * If `Downtime::$fixed' is set to false, the time between `Downtime::$start' and `Downtime::$end' at which a * host or service transitions to a problem state determines the time at which the downtime actually starts. * The downtime will then last for `Downtime::$duration' seconds. * * @var int Unix timestamp */ protected $end; /** * Whether it's a fixed or flexible downtime * * @var bool */ protected $fixed = true; /** * ID of the downtime which triggers this downtime * * The start of this downtime is triggered by the start of the other scheduled host or service downtime. * * @var int|null */ protected $triggerId; /** * The duration in seconds the downtime must last if it's a flexible downtime * * If `Downtime::$fixed' is set to false, the downtime will last for the duration in seconds specified, even * if the host or service recovers before the downtime expires. * * @var int|null */ protected $duration; /** * Whether to schedule a downtime for all services associated with a particular host * * @var bool */ protected $forAllServices = false; /** * What to do with children * * @var CHILD_OPTION */ protected $childOption = self::IGNORE_CHILDREN; /** * Set the time when the downtime should start * * @param int $start Unix timestamp * * @return $this */ public function setStart(int $start): self { $this->start = $start; return $this; } /** * Get the time when the downtime should start * * @return int Unix timestamp */ public function getStart(): int { if ($this->start === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->start; } /** * Set the time when the downtime should end * * @param int $end Unix timestamp * * @return $this */ public function setEnd(int $end): self { $this->end = $end; return $this; } /** * Get the time when the downtime should end * * @return int Unix timestamp */ public function getEnd(): int { if ($this->start === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->end; } /** * Set whether it's a fixed or flexible downtime * * @param boolean $fixed * * @return $this */ public function setFixed(bool $fixed = true): self { $this->fixed = $fixed; return $this; } /** * Is the downtime fixed? * * @return boolean */ public function getFixed(): bool { return $this->fixed; } /** * Set the ID of the downtime which triggers this downtime * * @param int $triggerId * * @return $this */ public function setTriggerId(int $triggerId): self { $this->triggerId = $triggerId; return $this; } /** * Get the ID of the downtime which triggers this downtime * * @return int|null */ public function getTriggerId() { return $this->triggerId; } /** * Set the duration in seconds the downtime must last if it's a flexible downtime * * @param int $duration * * @return $this */ public function setDuration(int $duration): self { $this->duration = $duration; return $this; } /** * Get the duration in seconds the downtime must last if it's a flexible downtime * * @return int|null */ public function getDuration() { return $this->duration; } /** * Set whether to schedule a downtime for all services associated with a particular host * * @param bool $forAllServices * * @return $this */ public function setForAllServices(bool $forAllServices = true): self { $this->forAllServices = $forAllServices; return $this; } /** * Get whether to schedule a downtime for all services associated with a particular host * * @return bool */ public function getForAllServices(): bool { return $this->forAllServices; } /** * Set what to do with children * * @param CHILD_OPTION $option * * @return $this */ public function setChildOption(int $option): self { $this->childOption = $option; return $this; } /** * Get what to do with children * * @return CHILD_OPTION */ public function getChildOption(): int { return $this->childOption; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/ScheduleHostDowntimeCommand.php000066400000000000000000000005261527064444300301050ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Schedule a host downtime * * @deprecated Use {@see ScheduleDowntimeCommand} instead */ class ScheduleHostDowntimeCommand extends ScheduleServiceDowntimeCommand { } icingadb-web-1.5.0/library/Icingadb/Command/Object/ScheduleServiceDowntimeCommand.php000066400000000000000000000006521527064444300305700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Schedule a service downtime * * @deprecated Use {@see ScheduleDowntimeCommand} instead */ class ScheduleServiceDowntimeCommand extends ScheduleDowntimeCommand { public function getName(): string { return 'ScheduleDowntime'; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/SendCustomNotificationCommand.php000066400000000000000000000016551527064444300304430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Send custom notifications for a host or service */ class SendCustomNotificationCommand extends WithCommentCommand { /** * Whether the notification is forced * * Forced notifications are sent out regardless of time restrictions and whether or not notifications are enabled. * * @var bool */ protected $forced; /** * Get whether to force the notification * * @return ?bool */ public function getForced() { return $this->forced; } /** * Set whether to force the notification * * @param bool $forced * * @return $this */ public function setForced(bool $forced = true): self { $this->forced = $forced; return $this; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/ToggleObjectFeatureCommand.php000066400000000000000000000051631527064444300276720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Enable or disable a feature of an Icinga object, i.e. host or service */ class ToggleObjectFeatureCommand extends ObjectsCommand { /** * Feature for enabling or disabling active checks of a host or service */ public const FEATURE_ACTIVE_CHECKS = 'active_checks_enabled'; /** * Feature for enabling or disabling passive checks of a host or service */ public const FEATURE_PASSIVE_CHECKS = 'passive_checks_enabled'; /** * Feature for enabling or disabling notifications for a host or service * * Notifications will be sent out only if notifications are enabled on a program-wide basis as well. */ public const FEATURE_NOTIFICATIONS = 'notifications_enabled'; /** * Feature for enabling or disabling event handler for a host or service */ public const FEATURE_EVENT_HANDLER = 'event_handler_enabled'; /** * Feature for enabling or disabling flap detection for a host or service. * * In order to enable flap detection flap detection must be enabled on a program-wide basis as well. */ public const FEATURE_FLAP_DETECTION = 'flapping_enabled'; /** * Feature that is to be enabled or disabled * * @var string */ protected $feature; /** * Whether the feature should be enabled or disabled * * @var bool */ protected $enabled; /** * Set the feature that is to be enabled or disabled * * @param string $feature * * @return $this */ public function setFeature(string $feature): self { $this->feature = $feature; return $this; } /** * Get the feature that is to be enabled or disabled * * @return string */ public function getFeature(): string { if ($this->feature === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->feature; } /** * Set whether the feature should be enabled or disabled * * @param bool $enabled * * @return $this */ public function setEnabled(bool $enabled = true): self { $this->enabled = $enabled; return $this; } /** * Get whether the feature should be enabled or disabled * * @return ?bool */ public function getEnabled() { return $this->enabled; } } icingadb-web-1.5.0/library/Icingadb/Command/Object/WithCommentCommand.php000066400000000000000000000017101527064444300262360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Object; /** * Base class for commands adding comments */ abstract class WithCommentCommand extends ObjectsCommand { use CommandAuthor; /** * Comment * * @var string */ protected $comment; /** * Set the comment * * @param string $comment * * @return $this */ public function setComment(string $comment): self { $this->comment = $comment; return $this; } /** * Get the comment * * @return string */ public function getComment(): string { if ($this->comment === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->comment; } } icingadb-web-1.5.0/library/Icingadb/Command/Renderer/000077500000000000000000000000001527064444300223315ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php000066400000000000000000000263231527064444300276620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Renderer; use Icinga\Module\Icingadb\Command\IcingaApiCommand; use Icinga\Module\Icingadb\Command\Object\GetObjectCommand; use Icinga\Module\Icingadb\Command\Object\ScheduleDowntimeCommand; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Command\Instance\ToggleInstanceFeatureCommand; use Icinga\Module\Icingadb\Command\Object\AcknowledgeProblemCommand; use Icinga\Module\Icingadb\Command\Object\AddCommentCommand; use Icinga\Module\Icingadb\Command\Object\DeleteCommentCommand; use Icinga\Module\Icingadb\Command\Object\DeleteDowntimeCommand; use Icinga\Module\Icingadb\Command\Object\ProcessCheckResultCommand; use Icinga\Module\Icingadb\Command\Object\RemoveAcknowledgementCommand; use Icinga\Module\Icingadb\Command\Object\ScheduleCheckCommand; use Icinga\Module\Icingadb\Command\Object\SendCustomNotificationCommand; use Icinga\Module\Icingadb\Command\Object\ToggleObjectFeatureCommand; use Icinga\Module\Icingadb\Command\IcingaCommand; use InvalidArgumentException; use ipl\Orm\Model; use LogicException; use Traversable; /** * Icinga command renderer for the Icinga command file */ class IcingaApiCommandRenderer implements IcingaCommandRendererInterface { /** * Name of the Icinga application object * * @var string */ protected $app = 'app'; /** * Get the name of the Icinga application object * * @return string */ public function getApp(): string { return $this->app; } /** * Set the name of the Icinga application object * * @param string $app * * @return $this */ public function setApp(string $app): self { $this->app = $app; return $this; } /** * Apply filter to query data * * @param array $data * @param Traversable $objects * * @return ?Model Any of the objects (useful for further type-dependent handling) */ protected function applyFilter(array &$data, Traversable $objects): ?Model { $object = null; foreach ($objects as $object) { if ($object instanceof Service) { $data['services'][] = sprintf('%s!%s', $object->host->name, $object->name); } else { $data['hosts'][] = $object->name; } } return $object; } /** * Get the sub-route of the endpoint for an object * * @param Model $object * * @return string */ protected function getObjectPluralType(Model $object): string { if ($object instanceof Host) { return 'hosts'; } if ($object instanceof Service) { return 'services'; } throw new LogicException(sprintf('Invalid object type %s provided', get_class($object))); } /** * Render a command * * @param IcingaCommand $command * * @return IcingaApiCommand */ public function render(IcingaCommand $command): IcingaApiCommand { $renderMethod = 'render' . $command->getName(); if (! method_exists($this, $renderMethod)) { throw new InvalidArgumentException( sprintf('Can\'t render command. Method %s not found', $renderMethod) ); } return $this->$renderMethod($command); } public function renderGetObject(GetObjectCommand $command): IcingaApiCommand { $data = [ 'all_joins' => 1, 'attrs' => $command->getAttributes() ]; $endpoint = 'objects/' . $this->getObjectPluralType($this->applyFilter($data, $command->getObjects())); return IcingaApiCommand::create($endpoint, $data)->setMethod('GET'); } public function renderAddComment(AddCommentCommand $command): IcingaApiCommand { $endpoint = 'actions/add-comment'; $data = [ 'author' => $command->getAuthor(), 'comment' => $command->getComment() ]; if ($command->getExpireTime() !== null) { $data['expiry'] = $command->getExpireTime(); } $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderSendCustomNotification(SendCustomNotificationCommand $command): IcingaApiCommand { $endpoint = 'actions/send-custom-notification'; $data = [ 'author' => $command->getAuthor(), 'comment' => $command->getComment(), 'force' => $command->getForced() ]; $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderProcessCheckResult(ProcessCheckResultCommand $command): IcingaApiCommand { $endpoint = 'actions/process-check-result'; $data = [ 'exit_status' => $command->getStatus(), 'plugin_output' => $command->getOutput(), 'performance_data' => $command->getPerformanceData() ]; $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderScheduleCheck(ScheduleCheckCommand $command): IcingaApiCommand { $endpoint = 'actions/reschedule-check'; $data = [ 'next_check' => $command->getCheckTime(), 'force' => $command->getForced() ]; $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderScheduleDowntime(ScheduleDowntimeCommand $command): IcingaApiCommand { $endpoint = 'actions/schedule-downtime'; $data = [ 'author' => $command->getAuthor(), 'comment' => $command->getComment(), 'start_time' => $command->getStart(), 'end_time' => $command->getEnd(), 'duration' => $command->getDuration(), 'fixed' => $command->getFixed(), 'trigger_name' => $command->getTriggerId(), 'child_options' => $command->getChildOption() ]; if ($command->getForAllServices()) { $data['all_services'] = true; } $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderAcknowledgeProblem(AcknowledgeProblemCommand $command): IcingaApiCommand { $endpoint = 'actions/acknowledge-problem'; $data = [ 'author' => $command->getAuthor(), 'comment' => $command->getComment(), 'sticky' => $command->getSticky(), 'notify' => $command->getNotify(), 'persistent' => $command->getPersistent() ]; if ($command->getExpireTime() !== null) { $data['expiry'] = $command->getExpireTime(); } if ($command->getAcknowledgementTime() !== null) { $data['set_time'] = (int) $command->getAcknowledgementTime()->format('U'); } $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderToggleObjectFeature(ToggleObjectFeatureCommand $command): IcingaApiCommand { switch ($command->getFeature()) { case ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS: $attr = 'enable_active_checks'; break; case ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS: $attr = 'enable_passive_checks'; break; case ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS: $attr = 'enable_notifications'; break; case ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER: $attr = 'enable_event_handler'; break; case ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION: $attr = 'enable_flapping'; break; default: throw new InvalidArgumentException($command->getFeature()); } $endpoint = 'objects/'; $objects = $command->getObjects(); $data = [ 'attrs' => [ $attr => $command->getEnabled() ] ]; $endpoint .= $this->getObjectPluralType($this->applyFilter($data, $objects)); return IcingaApiCommand::create($endpoint, $data); } public function renderDeleteComment(DeleteCommentCommand $command): IcingaApiCommand { $comments = []; foreach ($command->getObjects() as $object) { $comments[] = $object->name; } $endpoint = 'actions/remove-comment'; $data = [ 'author' => $command->getAuthor(), 'comments' => $comments ]; return IcingaApiCommand::create($endpoint, $data); } public function renderDeleteDowntime(DeleteDowntimeCommand $command): IcingaApiCommand { $downtimes = []; foreach ($command->getObjects() as $object) { $downtimes[] = $object->name; } $endpoint = 'actions/remove-downtime'; $data = [ 'author' => $command->getAuthor(), 'downtimes' => $downtimes ]; return IcingaApiCommand::create($endpoint, $data); } public function renderRemoveAcknowledgement(RemoveAcknowledgementCommand $command): IcingaApiCommand { $endpoint = 'actions/remove-acknowledgement'; $data = ['author' => $command->getAuthor()]; $this->applyFilter($data, $command->getObjects()); return IcingaApiCommand::create($endpoint, $data); } public function renderToggleInstanceFeature(ToggleInstanceFeatureCommand $command): IcingaApiCommand { $endpoint = 'objects/icingaapplications/' . $this->getApp(); switch ($command->getFeature()) { case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_HOST_CHECKS: $attr = 'enable_host_checks'; break; case ToggleInstanceFeatureCommand::FEATURE_ACTIVE_SERVICE_CHECKS: $attr = 'enable_service_checks'; break; case ToggleInstanceFeatureCommand::FEATURE_EVENT_HANDLERS: $attr = 'enable_event_handlers'; break; case ToggleInstanceFeatureCommand::FEATURE_FLAP_DETECTION: $attr = 'enable_flapping'; break; case ToggleInstanceFeatureCommand::FEATURE_NOTIFICATIONS: $attr = 'enable_notifications'; break; case ToggleInstanceFeatureCommand::FEATURE_PERFORMANCE_DATA: $attr = 'enable_perfdata'; break; default: throw new InvalidArgumentException($command->getFeature()); } $data = [ 'attrs' => [ $attr => $command->getEnabled() ] ]; return IcingaApiCommand::create($endpoint, $data); } } icingadb-web-1.5.0/library/Icingadb/Command/Renderer/IcingaCommandRendererInterface.php000066400000000000000000000004101527064444300310360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Renderer; /** * Interface for Icinga command renderer */ interface IcingaCommandRendererInterface { } icingadb-web-1.5.0/library/Icingadb/Command/Transport/000077500000000000000000000000001527064444300225575ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Command/Transport/ApiCommandException.php000066400000000000000000000005041527064444300271560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use Icinga\Exception\IcingaException; /** * Exception thrown if a command was not successful */ class ApiCommandException extends IcingaException { } icingadb-web-1.5.0/library/Icingadb/Command/Transport/ApiCommandTransport.php000066400000000000000000000223341527064444300272210ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use Icinga\Application\Hook\AuditHook; use Icinga\Application\Logger; use Icinga\Exception\Json\JsonDecodeException; use Icinga\Module\Icingadb\Command\IcingaApiCommand; use Icinga\Module\Icingadb\Command\IcingaCommand; use Icinga\Module\Icingadb\Command\Renderer\IcingaApiCommandRenderer; use Icinga\Util\Json; /** * Command transport over Icinga 2's REST API */ class ApiCommandTransport implements CommandTransportInterface { /** @var int Used timeout when sending a command */ protected const SEND_TIMEOUT = 15; /** * Transport identifier */ public const TRANSPORT = 'api'; /** * API host * * @var string */ protected $host; /** * API password * * @var string */ protected $password; /** * API port * * @var int */ protected $port = 5665; /** * Command renderer * * @var IcingaApiCommandRenderer */ protected $renderer; /** * API username * * @var string */ protected $username; /** * Create a new API command transport */ public function __construct() { $this->renderer = new IcingaApiCommandRenderer(); } /** * Set the name of the Icinga application object * * @param string $app * * @return $this */ public function setApp(string $app): self { $this->renderer->setApp($app); return $this; } /** * Get the API host * * @return string */ public function getHost(): string { if ($this->host === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->host; } /** * Set the API host * * @param string $host * * @return $this */ public function setHost(string $host): self { $this->host = $host; return $this; } /** * Get the API password * * @return string */ public function getPassword(): string { if ($this->password === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->password; } /** * Set the API password * * @param string $password * * @return $this */ public function setPassword(string $password): self { $this->password = $password; return $this; } /** * Get the API port * * @return int */ public function getPort(): int { return $this->port; } /** * Set the API port * * @param int $port * * @return $this */ public function setPort(int $port): self { $this->port = $port; return $this; } /** * Get the API username * * @return string */ public function getUsername(): string { if ($this->username === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->username; } /** * Set the API username * * @param string $username * * @return $this */ public function setUsername(string $username): self { $this->username = $username; return $this; } /** * Get URI for endpoint * * @param string $endpoint * * @return string */ protected function getUriFor(string $endpoint): string { return sprintf('https://%s:%u/v1/%s', $this->getHost(), $this->getPort(), $endpoint); } /** * Send the given command to the icinga2's REST API * * @param IcingaApiCommand $command * * @return mixed */ protected function sendCommand(IcingaApiCommand $command) { Logger::debug( 'Sending Icinga command "%s" to the API "%s:%u"', $command->getEndpoint(), $this->getHost(), $this->getPort() ); $data = $command->getData(); $payload = Json::encode($data); AuditHook::logActivity( 'monitoring/command', "Issued command {$command->getEndpoint()} with the following payload: $payload", $data ); $headers = ['Accept' => 'application/json']; if ($command->getMethod() !== 'POST') { $headers['X-HTTP-Method-Override'] = $command->getMethod(); } try { $response = (new Client(['timeout' => static::SEND_TIMEOUT])) ->post($this->getUriFor($command->getEndpoint()), [ 'auth' => [$this->getUsername(), $this->getPassword()], 'headers' => $headers, 'json' => $command->getData(), 'http_errors' => false, 'verify' => false ]); } catch (GuzzleException $e) { if (str_starts_with(ltrim($e->getMessage()), 'cURL error 28:')) { throw new ApiCommandException(t( 'No response from the Icinga 2 API received after %d seconds.' . ' Please make sure the action has not been performed, before retrying' ), static::SEND_TIMEOUT, $e); } throw (new CommandTransportException( 'Can\'t connect to the Icinga 2 API: %u %s', $e->getCode(), $e->getMessage() ))->setCommand($command); } try { $responseData = Json::decode((string) $response->getBody(), true); } catch (JsonDecodeException $e) { throw new CommandTransportException( 'Got invalid JSON response from the Icinga 2 API: %s', $e->getMessage() ); } if (! isset($responseData['results']) || empty($responseData['results'])) { if (isset($responseData['error'])) { throw new ApiCommandException( 'Can\'t send external Icinga command: %u %s', $responseData['error'], $responseData['status'] ); } return; } $errorResult = $responseData['results'][0]; if (isset($errorResult['code']) && ($errorResult['code'] < 200 || $errorResult['code'] >= 300)) { throw new ApiCommandException( 'Can\'t send external Icinga command: %u %s', $errorResult['code'], $errorResult['status'] ); } return $responseData['results']; } /** * Send the Icinga command over the Icinga 2 API * * @param IcingaCommand|IcingaApiCommand $command * @param ?int $now * * @throws CommandTransportException * * @return mixed */ public function send(IcingaCommand|IcingaApiCommand $command, ?int $now = null) { if ($command instanceof IcingaCommand) { $command = $this->renderer->render($command); } return $this->sendCommand($command); } /** * Try to connect to the API * * @return void * * @throws CommandTransportException In case the connection was not successful */ public function probe() { try { $response = (new Client(['timeout' => static::SEND_TIMEOUT])) ->get($this->getUriFor(''), [ 'auth' => [$this->getUsername(), $this->getPassword()], 'headers' => ['Accept' => 'application/json'], 'http_errors' => false, 'verify' => false ]); } catch (GuzzleException $e) { throw new CommandTransportException( 'Can\'t connect to the Icinga 2 API: %u %s', $e->getCode(), $e->getMessage() ); } try { $responseData = Json::decode((string) $response->getBody(), true); } catch (JsonDecodeException $e) { throw new CommandTransportException( 'Got invalid JSON response from the Icinga 2 API: %s', $e->getMessage() ); } if (! isset($responseData['results']) || empty($responseData['results'])) { throw new CommandTransportException( 'Got invalid response from the Icinga 2 API: %s', JSON::encode($responseData) ); } $result = array_pop($responseData['results']); if (! isset($result['user']) || $result['user'] !== $this->getUsername()) { throw new CommandTransportException( 'Got invalid response from the Icinga 2 API: %s', JSON::encode($responseData) ); } } } icingadb-web-1.5.0/library/Icingadb/Command/Transport/CommandTransport.php000066400000000000000000000151501527064444300265650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use Icinga\Application\Config; use Icinga\Application\Logger; use Icinga\Data\ConfigObject; use Icinga\Exception\ConfigurationError; use Icinga\Module\Icingadb\Command\IcingaCommand; use Icinga\Module\Icingadb\Command\Object\ObjectsCommand; /** * Command transport */ class CommandTransport implements CommandTransportInterface { /** * Transport configuration * * @var Config */ protected static $config; /** * Get transport configuration * * @return Config * * @throws ConfigurationError */ public static function getConfig(): Config { if (static::$config === null) { $config = Config::module('icingadb', 'commandtransports'); if ($config->isEmpty()) { throw new ConfigurationError( t('No command transports have been configured in "%s".'), $config->getConfigFile() ); } static::$config = $config; } return static::$config; } /** * Create a transport from config * * @param ConfigObject $config * * @return ApiCommandTransport * * @throws ConfigurationError */ public static function createTransport(ConfigObject $config): ApiCommandTransport { $config = clone $config; switch (strtolower($config->transport ?? '')) { case ApiCommandTransport::TRANSPORT: $transport = new ApiCommandTransport(); break; default: throw new ConfigurationError( t('Cannot create command transport "%s". Invalid transport defined in "%s". Use one of: %s.'), $config->transport, static::getConfig()->getConfigFile(), join(', ', [ApiCommandTransport::TRANSPORT]) ); } unset($config->transport); foreach ($config as $key => $value) { $method = 'set' . ucfirst($key); if (! method_exists($transport, $method)) { // Ignore settings from config that don't have a setter on the transport instead of throwing an // exception here because the transport should throw an exception if it's not fully set up // when being about to send a command continue; } $transport->$method($value); } return $transport; } /** * Send the given command over an appropriate Icinga command transport * * This will try one configured transport after another until the command has been successfully sent. * * @param IcingaCommand $command The command to send * @param ?int $now Timestamp of the command or null for now * * @return mixed * * @throws CommandTransportException If sending the Icinga command failed */ public function send(IcingaCommand $command, ?int $now = null) { $errors = []; $results = []; $retryCommand = null; foreach (static::getConfig() as $name => $transportConfig) { $transport = static::createTransport($transportConfig); if ($command instanceof ObjectsCommand && $command->getChunkSize() > 0) { $objects = $command->getObjects(); if ($retryCommand !== null) { try { $results[] = $transport->send($retryCommand, $now); } catch (CommandTransportException) { // It failed prior, so no need to log it again continue; } $retryCommand = null; } else { if ($objects->key() === null) { // We traverse the iterator manually here, so we have to rewind it before the first iteration. // That should be the case if the current key is null. May fail if an iterator explicitly yields // null as the key, but I want to see a justified use case for that… $objects->rewind(); } } while ($objects->valid()) { $batchCommand = clone $command; $batchCommand->setObjects( new \LimitIterator(new \NoRewindIterator($objects), 0, $command->getChunkSize()) ); try { $results[] = $transport->send($batchCommand, $now); } catch (CommandTransportException $e) { Logger::error($e); $errors[] = sprintf('%s: %s.', $name, rtrim($e->getMessage(), '.')); $retryCommand = $e->getCommand(); if ($retryCommand !== null) { continue 2; } else { // Non-recoverable error, so stop trying to send further commands break 2; } } } return $results; } elseif ($retryCommand !== null) { try { $result = $transport->send($retryCommand, $now); } catch (CommandTransportException) { // It failed prior, so no need to log it again continue; } return $result; } else { try { $result = $transport->send($command, $now); } catch (CommandTransportException $e) { Logger::error($e); $errors[] = sprintf('%s: %s.', $name, rtrim($e->getMessage(), '.')); $retryCommand = $e->getCommand(); if ($retryCommand !== null) { continue; // Try the next transport } else { break; } } return $result; // The command was successfully sent } } if (! empty($errors)) { throw new CommandTransportException(implode("\n", $errors)); } throw new CommandTransportException(t( 'Failed to send external Icinga command. No transport has been configured' . ' for this instance. Please contact your Icinga Web administrator.' )); } } icingadb-web-1.5.0/library/Icingadb/Command/Transport/CommandTransportConfig.php000066400000000000000000000012611527064444300277110ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use Icinga\Repository\IniRepository; class CommandTransportConfig extends IniRepository { protected $configs = [ 'transport' => [ 'name' => 'commandtransports', 'module' => 'icingadb', 'keyColumn' => 'name' ] ]; protected $queryColumns = [ 'transport' => [ 'name', 'transport', // API options 'host', 'port', 'username', 'password' ] ]; } icingadb-web-1.5.0/library/Icingadb/Command/Transport/CommandTransportException.php000066400000000000000000000017371527064444300304520ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use Icinga\Exception\IcingaException; /** * Exception thrown if a command was not sent */ class CommandTransportException extends IcingaException { /** @var mixed The command that was not sent */ private mixed $command = null; /** * Set the command that was not sent * * This will be passed to the next transport in the chain. * Make sure the transport accepts this type in {@see CommandTransportInterface::send()}. * * @param mixed $command * * @return $this */ public function setCommand(mixed $command): static { $this->command = $command; return $this; } /** * Get the command that was not sent * * @return mixed */ public function getCommand(): mixed { return $this->command; } } icingadb-web-1.5.0/library/Icingadb/Command/Transport/CommandTransportInterface.php000066400000000000000000000012431527064444300304040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Command\Transport; use Icinga\Module\Icingadb\Command\IcingaCommand; /** * Interface for Icinga command transports */ interface CommandTransportInterface { /** * Send an Icinga command over the Icinga command transport * * @param IcingaCommand $command The command to send * @param ?int $now Timestamp of the command or null for now * * @throws CommandTransportException If sending the Icinga command failed */ public function send(IcingaCommand $command, ?int $now = null); } icingadb-web-1.5.0/library/Icingadb/Common/000077500000000000000000000000001527064444300204355ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Common/Auth.php000066400000000000000000000536061527064444300220610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Application\Logger; use Icinga\Authentication\Auth as IcingaAuth; use Icinga\Exception\ConfigurationError; use Icinga\Module\Icingadb\Authentication\ObjectAuthorization; use Icinga\Security\SecurityException; use Icinga\Util\StringHelper; use ipl\Orm\Compat\FilterProcessor; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Orm\UnionQuery; use ipl\Sql\Expression; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Filter\Renderer; trait Auth { public function getAuth(): IcingaAuth { return IcingaAuth::getInstance(); } /** * Check whether access to the given route is permitted * * @param string $name * * @return bool */ public function isPermittedRoute(string $name): bool { if ($this->getAuth()->getUser()->isUnrestricted()) { return true; } // The empty array is for PHP pre 7.4, older versions require at least a single param for array_merge $routeDenylist = array_flip(array_merge([], ...array_map(function ($restriction) { return StringHelper::trimSplit($restriction); }, $this->getAuth()->getRestrictions('icingadb/denylist/routes')))); if (! array_key_exists($name, $routeDenylist)) { return true; } return false; } /** * Check whether the permission is granted on the object * * @param string $permission * @param Model $object * * @return bool */ public function isGrantedOn(string $permission, Model $object): bool { if ($this->getAuth()->getUser()->isUnrestricted()) { return $this->getAuth()->hasPermission($permission); } return ObjectAuthorization::grantsOn($permission, $object); } /** * Check whether the permission is granted on objects matching the type and filter * * The check will be performed on every object matching the filter. Though the result * only allows to determine whether the permission is granted on **any** or *none* * of the objects in question. Any subsequent call to {@see Auth::isGrantedOn} will * make use of the underlying results the check has determined in order to avoid * unnecessary queries. * * @param string $permission * @param string $type * @param Filter\Rule $filter * @param bool $cache Pass `false` to not perform the check on every object * * @return bool */ public function isGrantedOnType(string $permission, string $type, Filter\Rule $filter, bool $cache = true): bool { if ($this->getAuth()->getUser()->isUnrestricted()) { return $this->getAuth()->hasPermission($permission); } return ObjectAuthorization::grantsOnType($permission, $type, $filter, $cache); } /** * Check whether the filter matches the given object * * @param string $queryString * @param Model $object * * @return bool */ public function isMatchedOn(string $queryString, Model $object): bool { return ObjectAuthorization::matchesOn($queryString, $object); } /** * Assert that the given filter does not contain any column restrictions * * @param Filter\Rule $filter The filter to check * * @return void * * @throws SecurityException */ public function assertColumnRestrictions(Filter\Rule $filter): void { if ($this->getAuth()->getUser() === null || $this->getAuth()->getUser()->isUnrestricted()) { return; } $forbiddenVars = Filter::none(); foreach ($this->getAuth()->getUser()->getRoles() as $role) { if (($restriction = $role->getRestrictions('icingadb/denylist/variables'))) { foreach (explode(',', $restriction) as $value) { $forbiddenVars->add(Filter::like('name', trim($value))->ignoreCase()); } } if (($restriction = $role->getRestrictions('icingadb/protect/variables'))) { foreach (explode(',', $restriction) as $value) { $forbiddenVars->add(Filter::like('name', trim($value))->ignoreCase()); } } } if ($forbiddenVars->isEmpty()) { return; } $checkVars = static function (Filter\Rule $filter) use ($forbiddenVars, &$checkVars) { if ($filter instanceof Filter\Chain) { foreach ($filter as $rule) { $checkVars($rule); } } elseif ( ! $filter->metaData()->get('_isRestriction', false) && preg_match('/^(?:host|service)\.vars\.(.*)/i', $filter->getColumn(), $matches) ) { if (! Filter::match($forbiddenVars, ['name' => $matches[1]])) { throw new SecurityException( 'The variable "%s" is not allowed to be queried.', $matches[1] ); } } }; $checkVars($filter); } /** * Apply Icinga DB Web's restrictions depending on what is queried * * This will apply `icingadb/filter/objects` in any case. `icingadb/filter/services` is only * applied to queries fetching services and `icingadb/filter/hosts` is applied to queries * fetching either hosts or services. It also applies custom variable restrictions and * obfuscations. (`icingadb/denylist/variables` and `icingadb/protect/variables`) * * @param Query $query * * @return void */ public function applyRestrictions(Query $query) { if ($this->getAuth()->getUser()->isUnrestricted()) { return; } if ($query instanceof UnionQuery) { $queries = $query->getUnions(); $forceGroupFilterOptimization = true; } else { $queries = [$query]; $forceGroupFilterOptimization = false; } foreach ($queries as $query) { $relations = [$query->getModel()->getTableName()]; foreach ($query->getWith() as $relationPath => $relation) { $relations[$relationPath] = $relation->getTarget()->getTableName(); } $customVarRelationName = array_search('customvar_flat', $relations, true); $applyServiceRestriction = $relations[0] === 'dependency_node' || in_array('service', $relations, true); $applyHostRestriction = $relations[0] === 'dependency_node' || in_array('host', $relations, true) // Hosts and services have a special relation as a service can't exist without its host. // Hence why the hosts restriction is also applied if only services are queried. || $applyServiceRestriction; // Redundancy groups have no relation to anything in order to be subject // for authorization, so they must be exempt from the respective filters. $skipRedundancyGroups = $relations[0] === 'dependency_node'; $applyAlertRestriction = in_array('alert_history', $relations, true); $hostStateRelation = array_search('host_state', $relations, true); $serviceStateRelation = array_search('service_state', $relations, true); $resolver = $query->getResolver(); $queryFilter = Filter::any(); $forbiddenVars = Filter::none(); $obfuscationRules = Filter::all(); foreach ($this->getAuth()->getUser()->getRoles() as $role) { $roleFilter = Filter::all(); if ($customVarRelationName !== false) { if (($restriction = $role->getRestrictions('icingadb/denylist/variables'))) { $this->flattenSemanticallyEqualRules($forbiddenVars, $this->parseDenylist( $restriction, $customVarRelationName ? $resolver->qualifyColumn('flatname', $customVarRelationName) : 'flatname' )); } if (($restriction = $role->getRestrictions('icingadb/protect/variables'))) { $obfuscationRules->add($this->parseDenylist( $restriction, $customVarRelationName ? $resolver->qualifyColumn('flatname', $customVarRelationName) : 'flatname' )); } } if ($customVarRelationName === false || count($relations) > 1) { if (($restriction = $role->getRestrictions('icingadb/filter/objects'))) { if ($skipRedundancyGroups) { $roleFilter->add(Filter::any( Filter::all( Filter::unlike('host_id', '*'), Filter::unlike('service_id', '*') ), $this->parseRestriction($restriction, 'icingadb/filter/objects') )); } else { $roleFilter->add($this->parseRestriction($restriction, 'icingadb/filter/objects')); } } if ($applyHostRestriction && ($restriction = $role->getRestrictions('icingadb/filter/hosts'))) { $hostFilter = $this->parseRestriction($restriction, 'icingadb/filter/hosts'); if ($forceGroupFilterOptimization) { $this->forceQueryOptimization($hostFilter, 'hostgroup.name'); } if ($skipRedundancyGroups) { $roleFilter->add(Filter::any(Filter::unlike('host_id', '*'), $hostFilter)); } else { $roleFilter->add($hostFilter); } } if ( $applyServiceRestriction && ($restriction = $role->getRestrictions('icingadb/filter/services')) ) { $serviceFilter = $this->parseRestriction($restriction, 'icingadb/filter/services'); if ($forceGroupFilterOptimization) { $this->forceQueryOptimization($serviceFilter, 'servicegroup.name'); } $roleFilter->add(Filter::any(Filter::unlike('service.id', '*'), $serviceFilter)); } if ( $applyAlertRestriction && ($restriction = $role->getRestrictions('icingadb/filter/alerts')) ) { $roleFilter->add($this->parseRestriction($restriction, 'icingadb/filter/alerts')); } } if (! $roleFilter->isEmpty()) { if (Logger::getInstance()->getLevel() === Logger::DEBUG) { Logger::debug( 'Preparing restrictions for user %s with role %s: %s; Current query filter: %s', $this->getAuth()->getUser()->getUsername(), $role->getName(), (new Renderer($roleFilter))->setStrict()->render(), (new Renderer($queryFilter))->setStrict()->render() ); } if (! $this->flattenSemanticallyEqualRules($queryFilter, $roleFilter)) { $queryFilter->add($roleFilter); } } } if (! $this->getAuth()->hasPermission('icingadb/object/show-source')) { // In case the user does not have permission to see the object's `Source` tab, then the user must be // restricted from accessing the executed command for the object. $columns = $query->getColumns(); $commandColumns = []; if ($hostStateRelation !== false) { $commandColumns[] = $resolver->qualifyColumn('check_commandline', $hostStateRelation); } if ($serviceStateRelation !== false) { $commandColumns[] = $resolver->qualifyColumn('check_commandline', $serviceStateRelation); } if (! empty($columns)) { foreach ($commandColumns as $commandColumn) { $commandColumnPath = array_search($commandColumn, $columns, true); if ($commandColumnPath !== false) { $columns[$commandColumn] = new Expression("'***'"); unset($columns[$commandColumnPath]); } } $query->columns($columns); } else { $query->withoutColumns($commandColumns); } } if (! $obfuscationRules->isEmpty()) { $flatvaluePath = $customVarRelationName ? $resolver->qualifyColumn('flatvalue', $customVarRelationName) : 'flatvalue'; $columns = $query->getColumns(); if (empty($columns)) { $columns = [ $customVarRelationName ? $resolver->qualifyColumn('flatname', $customVarRelationName) : 'flatname', $flatvaluePath ]; } $flatvalue = null; if (isset($columns[$flatvaluePath])) { $flatvalue = $columns[$flatvaluePath]; } else { $flatvaluePathAt = array_search($flatvaluePath, $columns, true); if ($flatvaluePathAt !== false) { $flatvalue = $columns[$flatvaluePathAt]; if (is_int($flatvaluePathAt)) { unset($columns[$flatvaluePathAt]); } else { $flatvaluePath = $flatvaluePathAt; } } } if ($flatvalue !== null) { // TODO: The four lines below are needed because there is still no way to postpone filter column // qualification. (i.e. Just like the expression, filter rules need to be handled the same // so that their columns are qualified lazily when assembling the query) $queryClone = clone $query; $queryClone->getSelectBase()->resetWhere(); FilterProcessor::apply($obfuscationRules, $queryClone); $where = $queryClone->getSelectBase()->getWhere(); $values = []; $rendered = $query->getDb()->getQueryBuilder()->buildCondition($where, $values); $columns[$flatvaluePath] = new Expression( "CASE WHEN (" . $rendered . ") THEN (%s) ELSE '***' END", [$flatvalue], ...$values ); $query->columns($columns); } } if (Logger::getInstance()->getLevel() === Logger::DEBUG) { Logger::debug( 'Final restrictions for user %s: %s', $this->getAuth()->getUser()->getUsername(), (new Renderer($queryFilter))->setStrict()->render() ); } $query->filter($queryFilter) ->filter($forbiddenVars); } } /** * Parse the given restriction * * @param string $queryString * @param string $restriction The name of the restriction * * @return Filter\Rule */ protected function parseRestriction(string $queryString, string $restriction): Filter\Rule { $allowedColumns = match ($restriction) { 'icingadb/filter/alerts' => [ 'contact_name' => 'alert_history.contact_name', 'contactgroup_name' => 'alert_history.contactgroup_name', 'schedule_name' => 'alert_history.schedule_name', 'channel_name' => 'alert_history.channel_name' ], default => [ 'host.name', 'hostgroup.name', 'host.user.name', 'host.usergroup.name', 'service.name', 'servicegroup.name', 'service.user.name', 'service.usergroup.name', '(host|service).vars.' => function ($c) { return preg_match('/^(?:host|service)\.vars\./i', $c); } ] }; return QueryString::fromString($queryString) ->on( QueryString::ON_CONDITION, function (Filter\Condition $condition) use ( $restriction, $queryString, $allowedColumns ) { foreach ($allowedColumns as $key => $column) { if (is_callable($column)) { if ($column($condition->getColumn())) { $condition->metaData()->set('_isRestriction', true); return; } } elseif ($column === $condition->getColumn()) { $condition->metaData()->set('_isRestriction', true); return; } elseif ($key === $condition->getColumn()) { $condition->setColumn($column); $condition->metaData()->set('_isRestriction', true); return; } } throw new ConfigurationError( t( 'Cannot apply restriction %s using the filter %s.' . ' You can only use the following columns: %s' ), $restriction, $queryString, join( ', ', array_map( function ($k, $v) { return is_string($k) ? $k : $v; }, array_keys($allowedColumns), $allowedColumns ) ) ); } )->parse(); } /** * Parse the given denylist * * @param string $denylist Comma separated list of column names * @param string $column The column which should not equal any of the denylisted names * * @return Filter\None */ protected function parseDenylist(string $denylist, string $column): Filter\None { $filter = Filter::none(); foreach (explode(',', $denylist) as $value) { $filter->add(Filter::like($column, trim($value))); } return $filter; } /** * Flatten the given rule into the given chain if they are semantically equal * * This is needed as the same filter may be added multiple times to the same query, which leads to multiple nested * chains of the same type. This method flattens those chains into a single one, which allows for better * optimization and therefore enhanced efficiency. * * @param Filter\Chain $to * @param Filter\Chain $from * * @return bool Whether the $from rule has been added to the $to chain */ private function flattenSemanticallyEqualRules(Filter\Chain $to, Filter\Chain $from): bool { $transfer = $from instanceof $to || (! $from instanceof Filter\None && $from->count() === 1); foreach (iterator_to_array($from) as $rule) { if ($rule instanceof Filter\Chain) { if ($transfer) { if (! $this->flattenSemanticallyEqualRules($to, $rule)) { $to->add($rule); } $from->remove($rule); } elseif ($this->flattenSemanticallyEqualRules($from, $rule)) { $from->remove($rule); } } elseif ($transfer) { $to->add($rule); $from->remove($rule); } } if (! $to->has($from)) { if (! $from->isEmpty()) { $to->add($from); } return true; } elseif ($from->isEmpty()) { $to->remove($from); } return false; } /** * Force query optimization on the given service/host filter rule * * Applies forceOptimization, when the given filter rule contains the given filter column * * @param Filter\Rule $filterRule * @param string $filterColumn * * @return void */ protected function forceQueryOptimization(Filter\Rule $filterRule, string $filterColumn) { // TODO: This is really a very poor solution is therefore only a quick fix. // We need to somehow manage to make this more enjoyable and creative! if ($filterRule instanceof Filter\Chain) { foreach ($filterRule as $rule) { $this->forceQueryOptimization($rule, $filterColumn); } } elseif ($filterRule->getColumn() === $filterColumn) { $filterRule->metaData()->set('forceOptimization', true); } } } icingadb-web-1.5.0/library/Icingadb/Common/Backend.php000066400000000000000000000223471527064444300225050ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Application\Config as AppConfig; use Icinga\Application\Icinga; use Icinga\Data\ResourceFactory; use Icinga\Module\Icingadb\Model\Config; use Icinga\Module\Icingadb\Model\Instance; use Icinga\Module\Icingadb\Model\Schema; use ipl\Sql\Adapter\Pgsql; use ipl\Sql\Config as SqlConfig; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Sql\QueryBuilder; use ipl\Sql\Select; use ipl\Stdlib\Filter; use PDO; use Pdo\Mysql; /** * Singleton providing access to the Icinga DB and Redis */ final class Backend { /** @var ?Connection */ private static $db; /** @var ?int */ private static $schemaVersion; /** @var ?IcingaRedis */ private static $redis; /** @var ?bool Whether the current Icinga DB version supports dependencies */ private static $supportsDependencies; /** @var ?bool Whether the current Icinga DB version supports notifications */ private static $supportsNotifications; /** @var ?bool Whether Icinga DB is set up to connect to Icinga Notifications */ private static $notificationsSetUp; /** @var ?string The normalized version of the responsible Icinga 2 instance */ private static ?string $icinga2Version = null; /** * Set the connection to the Icinga DB * * Usually not required, as the connection is created on demand. Useful for testing. * * @param Connection $db * * @return void */ public static function setDb(Connection $db): void { self::$db = $db; } /** * Get the connection to the Icinga DB * * @return Connection */ public static function getDb(): Connection { if (self::$db === null) { $config = new SqlConfig(ResourceFactory::getResourceConfig( AppConfig::module('icingadb')->get('icingadb', 'resource') )); $config->options = [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ]; if ($config->db === 'mysql') { $config->options[Mysql::ATTR_INIT_COMMAND] = "SET SESSION SQL_MODE='STRICT_TRANS_TABLES" . ",NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"; } self::$db = new Connection($config); $adapter = self::$db->getAdapter(); if ($adapter instanceof Pgsql) { $quoted = $adapter->quoteIdentifier('user'); self::$db->getQueryBuilder() ->on(QueryBuilder::ON_SELECT_ASSEMBLED, function (&$sql) use ($quoted) { // user is a reserved key word in PostgreSQL, so we need to quote it. // TODO(lippserd): This is pretty hacky, // reconsider how to properly implement identifier quoting. $sql = preg_replace('/user$/', sprintf(' %s', $quoted), $sql); $sql = str_replace( [' user ', ' user.', '(user.'], [ sprintf(' %s ', $quoted), sprintf(' %s.', $quoted), sprintf('(%s.', $quoted), ], $sql ); }) ->on(QueryBuilder::ON_ASSEMBLE_SELECT, function (Select $select) { // For SELECT DISTINCT, all ORDER BY columns must appear in SELECT list. if (! $select->getDistinct() || ! $select->hasOrderBy()) { return; } $candidates = []; foreach ($select->getOrderBy() as list($columnOrAlias, $_)) { if ($columnOrAlias instanceof Expression) { // Expressions can be and include anything, // also columns that aren't already part of the SELECT list, // so we're not trying to guess anything here. // Such expressions must be in the SELECT list if necessary and // referenced manually with an alias in ORDER BY. continue; } $candidates[$columnOrAlias] = true; } foreach ($select->getColumns() as $alias => $column) { if (is_int($alias)) { if ($column instanceof Expression) { // This is the complement to the above consideration. // If it is an unaliased expression, ignore it. continue; } } else { unset($candidates[$alias]); } if (! $column instanceof Expression) { unset($candidates[$column]); } } if (! empty($candidates)) { $select->columns(array_keys($candidates)); } }); } } return self::$db; } /** * Get the schema version of the Icinga DB * * @return int */ public static function getDbSchemaVersion(): int { if (self::$schemaVersion === null) { self::$schemaVersion = Schema::on(self::getDb()) ->columns('version') ->first() ->version ?? 0; } return self::$schemaVersion; } /** * Set the connection to the Icinga Redis * * Usually not required, as the connection is created on demand. Useful for testing. * * @param IcingaRedis $redis * * @return void */ public static function setRedis(IcingaRedis $redis): void { self::$redis = $redis; } /** * Get the connection to the Icinga Redis * * @return IcingaRedis */ public static function getRedis(): IcingaRedis { if (self::$redis === null) { self::$redis = new IcingaRedis(); } return self::$redis; } /** * Whether the current Icinga DB version supports dependencies * * @return bool */ public static function supportsDependencies(): bool { if (self::$supportsDependencies === null) { if (self::getDb()->getAdapter() instanceof Pgsql) { self::$supportsDependencies = self::getDbSchemaVersion() >= 5; } else { self::$supportsDependencies = self::getDbSchemaVersion() >= 7; } } return self::$supportsDependencies; } /** * Whether the current Icinga DB version supports notifications * * @return bool */ public static function supportsNotifications(): bool { if (self::$supportsNotifications === null) { if (self::getDb()->getAdapter() instanceof Pgsql) { self::$supportsNotifications = self::getDbSchemaVersion() >= 6; } else { self::$supportsNotifications = self::getDbSchemaVersion() >= 8; } } return self::$supportsNotifications; } /** * Whether Icinga DB is set up to connect to Icinga Notifications * * @return bool */ public static function notificationsSetUp(): bool { if (self::$notificationsSetUp === null) { self::$notificationsSetUp = Icinga::app()->getModuleManager()->hasEnabled('notifications') && self::supportsNotifications() && self::icinga2SupportsNotifications() && Instance::on(self::getDb()) ->columns('notifications_healthy') ->filter(Filter::equal('responsible', true)) ->filter(Filter::like('notifications_healthy', '*')) ->first() !== null; } return self::$notificationsSetUp; } /** * Get the version of the responsible Icinga 2 instance, normalized for version_compare() * * @return string */ public static function getIcinga2Version(): string { if (self::$icinga2Version === null) { self::$icinga2Version = Instance::on(self::getDb()) ->columns('icinga2_version') ->filter(Filter::equal('responsible', true)) ->first() ?->icinga2_version ?? ''; } return self::$icinga2Version; } /** * Whether the Icinga 2 version supports Icinga Notifications * * @param ?string $version * * @return bool */ public static function icinga2SupportsNotifications(?string $version = null): bool { if (getenv('ICINGAWEB_ENVIRONMENT') === 'dev') { return true; } return version_compare($version ?? self::getIcinga2Version(), 'v2.16.6', '>='); } } icingadb-web-1.5.0/library/Icingadb/Common/BaseFilter.php000066400000000000000000000004751527064444300231740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; /** * @deprecated Use {@see \ipl\Stdlib\BaseFilter} instead. This will be removed with version 1.1 */ trait BaseFilter { use \ipl\Stdlib\BaseFilter; } icingadb-web-1.5.0/library/Icingadb/Common/BaseStatusBar.php000066400000000000000000000024551527064444300236570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\HoststateSummary; use Icinga\Module\Icingadb\Model\ServicestateSummary; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Orm\Model; use ipl\Stdlib\BaseFilter; abstract class BaseStatusBar extends BaseHtmlElement { use BaseFilter; /** @var ServicestateSummary|HoststateSummary */ protected $summary; protected $tag = 'div'; protected $defaultAttributes = ['class' => 'status-bar']; /** * Create a host or service status bar * * @param ServicestateSummary|HoststateSummary $summary */ public function __construct($summary) { $this->summary = $summary; } abstract protected function assembleTotal(BaseHtmlElement $total): void; abstract protected function createStateBadges(): BaseHtmlElement; protected function createCount(): BaseHtmlElement { $total = Html::tag('span', ['class' => 'item-count']); $this->assembleTotal($total); return $total; } protected function assemble(): void { $this->add([ $this->createCount(), $this->createStateBadges() ]); } } icingadb-web-1.5.0/library/Icingadb/Common/CommandActions.php000066400000000000000000000243621527064444300240540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Exception\Http\HttpNotFoundException; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Forms\Command\Object\AcknowledgeProblemForm; use Icinga\Module\Icingadb\Forms\Command\Object\AddCommentForm; use Icinga\Module\Icingadb\Forms\Command\Object\CheckNowForm; use Icinga\Module\Icingadb\Forms\Command\Object\ProcessCheckResultForm; use Icinga\Module\Icingadb\Forms\Command\Object\RemoveAcknowledgementForm; use Icinga\Module\Icingadb\Forms\Command\Object\ScheduleCheckForm; use Icinga\Module\Icingadb\Forms\Command\Object\ScheduleHostDowntimeForm; use Icinga\Module\Icingadb\Forms\Command\Object\ScheduleServiceDowntimeForm; use Icinga\Module\Icingadb\Forms\Command\Object\SendCustomNotificationForm; use Icinga\Module\Icingadb\Forms\Command\Object\ToggleObjectFeaturesForm; use Icinga\Security\SecurityException; use Icinga\Util\Environment; use Icinga\Web\Notification; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Web\Url; /** * Trait CommandActions */ trait CommandActions { /** @var null|Query|array $commandTargets */ protected $commandTargets; /** @var Model $commandTargetModel */ protected $commandTargetModel; /** * Get url to view command targets, used as redirection target * * @return Url */ abstract protected function getCommandTargetsUrl(): Url; /** * Get status of toggleable features * * @return object */ protected function getFeatureStatus() { } /** * Fetch command targets * * @return Query|array */ abstract protected function fetchCommandTargets(); /** * Get command targets * * @return Query|array */ protected function getCommandTargets() { if (! isset($this->commandTargets)) { $this->commandTargets = $this->fetchCommandTargets(); } return $this->commandTargets; } /** * Get the model of the command targets * * @return Model * @throws HttpNotFoundException If no command targets were found */ protected function getCommandTargetModel(): Model { if (! isset($this->commandTargetModel)) { $commandTargets = $this->getCommandTargets(); if (empty($commandTargets) || count($commandTargets) === 0) { throw new HttpNotFoundException('No command targets found'); } if (is_array($commandTargets)) { $this->commandTargetModel = $commandTargets[0]; } elseif ($commandTargets->count() > 0) { $this->commandTargetModel = $commandTargets->getModel(); } } return $this->commandTargetModel; } /** * Check whether the permission is granted on any of the command targets * * @param string $permission * * @return bool */ protected function isGrantedOnCommandTargets(string $permission): bool { $commandTargets = $this->getCommandTargets(); if (is_array($commandTargets)) { foreach ($commandTargets as $commandTarget) { if ($this->isGrantedOn($permission, $commandTarget)) { return true; } } return false; } return $this->isGrantedOnType( $permission, $this->getCommandTargetModel()->getTableName(), $commandTargets->getFilter() ); } /** * Assert that the permission is granted on any of the command targets * * @param string $permission * * @throws SecurityException */ protected function assertIsGrantedOnCommandTargets(string $permission) { if (! $this->isGrantedOnCommandTargets($permission)) { throw new SecurityException('No permission for %s', $permission); } } /** * Handle and register the given command form * * @param string|CommandForm $form * * @return void */ protected function handleCommandForm($form) { $isXhr = $this->getRequest()->isXmlHttpRequest(); $isApi = $this->getRequest()->isApiRequest(); if ($isXhr && $isApi) { // Prevents the framework already, this is just a fail-safe $this->httpBadRequest('Responding with JSON during a Web request is not supported'); } // Bulk operations may require more memory and time Environment::raiseMemoryLimit(); Environment::raiseExecutionTime(); if (is_string($form)) { /** @var CommandForm $form */ $form = new $form(); } $objects = $this->getCommandTargets(); if ($objects instanceof Query) { $objects = $objects->execute(); } $form->setObjects($objects); if (! $isApi || $isXhr) { $this->handleWebRequest($form); } else { $this->handleApiRequest($form); } } /** * Handle a Web request for the given form * * @param CommandForm $form * * @return void */ protected function handleWebRequest(CommandForm $form): void { $actionUrl = $this->getRequest()->getUrl(); if ($this->view->compact) { $actionUrl = clone $actionUrl; // TODO: This solves https://github.com/Icinga/icingadb-web/issues/124 but I'd like to omit this // entirely. I think it should be solved like https://github.com/Icinga/icingaweb2/pull/4300 so // that a request's url object still has params like showCompact and _dev $actionUrl->getParams()->add('showCompact', true); } $form->setAction($actionUrl->getAbsoluteUrl()); $form->on($form::ON_SUCCESS, function () { // This forces the column to reload nearly instantly after the redirect // and ensures the effect of the command is visible to the user asap $this->getResponse()->setAutoRefreshInterval(1); $this->redirectNow($this->getCommandTargetsUrl()); }); $form->handleRequest($this->getServerRequest()); $this->addContent($form); } /** * Handle an API request for the given form * * @param CommandForm $form * * @return never */ protected function handleApiRequest(CommandForm $form) { $form->setIsApiTarget(); $form->on($form::ON_SUCCESS, function () { $this->getResponse() ->json() ->setSuccessData(Notification::getInstance()->popMessages()) ->sendResponse(); }); $form->handleRequest($this->getServerRequest()); $this->assertHttpMethod($form->getMethod()); $errors = []; foreach ($form->getElements() as $element) { $errors[$element->getName()] = $element->getMessages(); } $response = $this->getResponse()->json(); $response->setHttpResponseCode(422); $response->setFailData($errors) ->sendResponse(); } public function acknowledgeAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/acknowledge-problem'); $this->setTitle(t('Acknowledge Problem')); $this->handleCommandForm(AcknowledgeProblemForm::class); } public function addCommentAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/comment/add'); $this->setTitle(t('Add Comment')); $this->handleCommandForm(AddCommentForm::class); } public function checkNowAction() { if (! $this->isGrantedOnCommandTargets('icingadb/command/schedule-check/active-only')) { $this->assertIsGrantedOnCommandTargets('icingadb/command/schedule-check'); } $this->handleCommandForm(CheckNowForm::class); } public function processCheckresultAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/process-check-result'); $this->setTitle(t('Submit Passive Check Result')); $this->handleCommandForm(ProcessCheckResultForm::class); } public function removeAcknowledgementAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/remove-acknowledgement'); $this->handleCommandForm(RemoveAcknowledgementForm::class); } public function scheduleCheckAction() { if (! $this->isGrantedOnCommandTargets('icingadb/command/schedule-check/active-only')) { $this->assertIsGrantedOnCommandTargets('icingadb/command/schedule-check'); } $this->setTitle(t('Reschedule Check')); $this->handleCommandForm(ScheduleCheckForm::class); } public function scheduleDowntimeAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/downtime/schedule'); switch ($this->getCommandTargetModel()->getTableName()) { case 'host': $this->setTitle(t('Schedule Host Downtime')); $this->handleCommandForm(ScheduleHostDowntimeForm::class); break; case 'service': $this->setTitle(t('Schedule Service Downtime')); $this->handleCommandForm(ScheduleServiceDowntimeForm::class); break; } } public function sendCustomNotificationAction() { $this->assertIsGrantedOnCommandTargets('icingadb/command/send-custom-notification'); $this->setTitle(t('Send Custom Notification')); $this->handleCommandForm(SendCustomNotificationForm::class); } public function toggleFeaturesAction() { $commandObjects = $this->getCommandTargets(); $form = null; if (count($commandObjects) > 1) { $this->isGrantedOnCommandTargets('i/am-only-used/to-establish/the-object-auth-cache'); $form = new ToggleObjectFeaturesForm($this->getFeatureStatus()); } else { foreach ($commandObjects as $object) { // There's only a single result, a foreach is the most compatible way to retrieve the object $form = new ToggleObjectFeaturesForm($object); } } $this->handleCommandForm($form); } } icingadb-web-1.5.0/library/Icingadb/Common/Database.php000066400000000000000000000006031527064444300226510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use ipl\Sql\Connection; trait Database { /** * Get the connection to the Icinga database * * @return Connection */ public function getDb(): Connection { return Backend::getDb(); } } icingadb-web-1.5.0/library/Icingadb/Common/DetailActions.php000066400000000000000000000100421527064444300236660ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use ipl\Html\BaseHtmlElement; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Url; trait DetailActions { /** @var bool */ protected $detailActionsDisabled = false; /** * Set whether this list should be an action-list * * @param bool $state * * @return $this */ public function setDetailActionsDisabled(bool $state = true): self { $this->detailActionsDisabled = $state; return $this; } /** * Get whether this list should be an action-list * * @return bool */ public function getDetailActionsDisabled(): bool { return $this->detailActionsDisabled; } /** * Prepare this list as action-list * * @return $this */ public function initializeDetailActions(): self { $this->getAttributes() ->registerAttributeCallback('class', function () { return $this->getDetailActionsDisabled() ? null : 'action-list'; }) ->registerAttributeCallback('data-icinga-multiselect-count-label', function () { return $this->getDetailActionsDisabled() ? null : t('%d Item(s) selected'); }) ->registerAttributeCallback('data-icinga-multiselect-hint-label', function () { return $this->getDetailActionsDisabled() ? null : t('Use shift/cmd + click/arrow keys to select multiple items'); }); return $this; } /** * Set the url to use for multiple selected list items * * @param Url $url * * @return $this */ protected function setMultiselectUrl(Url $url): self { $this->getAttributes() ->registerAttributeCallback('data-icinga-multiselect-url', function () use ($url) { return $this->getDetailActionsDisabled() ? null : (string) $url; }); return $this; } /** * Set the url to use for a single selected list item * * @param Url $url * * @return $this */ protected function setDetailUrl(Url $url): self { $this->getAttributes() ->registerAttributeCallback('data-icinga-detail-url', function () use ($url) { return $this->getDetailActionsDisabled() ? null : (string) $url; }); return $this; } /** * Associate the given element with the given multi-selection filter * * @param BaseHtmlElement $element * @param Filter\Rule $filter * * @return $this */ public function addMultiselectFilterAttribute(BaseHtmlElement $element, Filter\Rule $filter): self { $element->getAttributes() ->registerAttributeCallback('data-icinga-multiselect-filter', function () use ($filter) { if ($this->getDetailActionsDisabled()) { return null; } $queryString = QueryString::render($filter); if ($filter instanceof Filter\Chain) { $queryString = '(' . $queryString . ')'; } return $queryString; }); return $this; } /** * Associate the given element with the given single-selection filter * * @param BaseHtmlElement $element * @param Filter\Rule $filter * * @return $this */ public function addDetailFilterAttribute(BaseHtmlElement $element, Filter\Rule $filter): self { $element->getAttributes() ->registerAttributeCallback('data-action-item', function () { return ! $this->getDetailActionsDisabled(); }) ->registerAttributeCallback('data-icinga-detail-filter', function () use ($filter) { return $this->getDetailActionsDisabled() ? null : QueryString::render($filter); }); return $this; } } icingadb-web-1.5.0/library/Icingadb/Common/HostLink.php000066400000000000000000000013351527064444300227030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\Host; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Web\Widget\StateBall; trait HostLink { protected function createHostLink(Host $host, bool $withStateBall = false): BaseHtmlElement { $content = []; if ($withStateBall) { $content[] = new StateBall($host->state->getStateText(), StateBall::SIZE_MEDIUM); $content[] = ' '; } $content[] = $host->display_name; return Html::tag('a', ['href' => Links::host($host), 'class' => 'subject'], $content); } } icingadb-web-1.5.0/library/Icingadb/Common/HostLinks.php000066400000000000000000000050351527064444300230670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\Host; use ipl\Web\Url; abstract class HostLinks { public static function acknowledge(Host $host): Url { return Url::fromPath('icingadb/host/acknowledge', ['name' => $host->name]); } public static function addComment(Host $host): Url { return Url::fromPath('icingadb/host/add-comment', ['name' => $host->name]); } public static function checkNow(Host $host): Url { return Url::fromPath('icingadb/host/check-now', ['name' => $host->name]); } public static function scheduleCheck(Host $host): Url { return Url::fromPath('icingadb/host/schedule-check', ['name' => $host->name]); } public static function comments(Host $host): Url { return Url::fromPath('icingadb/comments', ['host.name' => $host->name]); } public static function downtimes(Host $host): Url { return Url::fromPath('icingadb/downtimes', ['host.name' => $host->name]); } public static function history(Host $host): Url { return Url::fromPath('icingadb/host/history', ['name' => $host->name]); } public static function removeAcknowledgement(Host $host): Url { return Url::fromPath('icingadb/host/remove-acknowledgement', ['name' => $host->name]); } public static function scheduleDowntime(Host $host): Url { return Url::fromPath('icingadb/host/schedule-downtime', ['name' => $host->name]); } public static function sendCustomNotification(Host $host): Url { return Url::fromPath('icingadb/host/send-custom-notification', ['name' => $host->name]); } public static function processCheckresult(Host $host): Url { return Url::fromPath('icingadb/host/process-checkresult', ['name' => $host->name]); } public static function toggleFeatures(Host $host): Url { return Url::fromPath('icingadb/host/toggle-features', ['name' => $host->name]); } public static function services(Host $host): Url { return Url::fromPath('icingadb/host/services', ['name' => $host->name]); } public static function subscribe(Host $host): Url { return Url::fromPath('icingadb/host/subscribe', ['name' => $host->name]); } public static function unsubscribe(Host $host): Url { return Url::fromPath('icingadb/host/unsubscribe', ['name' => $host->name]); } } icingadb-web-1.5.0/library/Icingadb/Common/HostStates.php000066400000000000000000000054061527064444300232540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; /** * Collection of possible host states. */ class HostStates { public const UP = 0; public const DOWN = 1; public const PENDING = 99; /** * Get the integer value of the given textual host state * * @param string $state * * @return int * * @throws \InvalidArgumentException If the given host state is invalid, i.e. not known */ public static function int(string $state): int { switch (strtolower($state)) { case 'up': $int = self::UP; break; case 'down': $int = self::DOWN; break; case 'pending': $int = self::PENDING; break; default: throw new \InvalidArgumentException(sprintf('Invalid host state %d', $state)); } return $int; } /** * Get the textual representation of the passed host state * * @param ?int $state * * @return string * * @throws \InvalidArgumentException If the given host state is invalid, i.e. not known */ public static function text(?int $state = null): string { switch (true) { case $state === self::UP: $text = 'up'; break; case $state === self::DOWN: $text = 'down'; break; case $state === self::PENDING: $text = 'pending'; break; case $state === null: $text = 'not-available'; break; default: throw new \InvalidArgumentException(sprintf('Invalid host state %d', $state)); } return $text; } /** * Get the translated textual representation of the passed host state * * @param ?int $state * * @return string * * @throws \InvalidArgumentException If the given host state is invalid, i.e. not known */ public static function translated(?int $state = null): string { switch (true) { case $state === self::UP: $text = t('up'); break; case $state === self::DOWN: $text = t('down'); break; case $state === self::PENDING: $text = t('pending'); break; case $state === null: $text = t('not available'); break; default: throw new \InvalidArgumentException(sprintf('Invalid host state %d', $state)); } return $text; } } icingadb-web-1.5.0/library/Icingadb/Common/IcingaRedis.php000066400000000000000000000203311527064444300233260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Exception; use Generator; use Icinga\Application\Config; use Icinga\Application\Logger; use Predis\Client as Redis; class IcingaRedis { public const DEFAULT_HOST = 'localhost'; public const DEFAULT_PORT = 6380; public const DEFAULT_DATABASE = 0; /** @var Redis Connection to the Icinga Redis */ private $redis; /** @var bool true if no connection attempt was successful */ private $redisUnavailable = false; /** * Get the singleton * * @deprecated Use {@see Backend::getRedis()} instead * @return static */ public static function instance(): self { return Backend::getRedis(); } /** * Get whether Redis is unavailable * * @return bool */ public function isUnavailable(): bool { if (! $this->redisUnavailable && $this->redis === null) { try { $this->getConnection(); } catch (Exception $_) { // getConnection already logs the error } } return $this->redisUnavailable; } /** * Get the connection to the Icinga Redis * * @return Redis * * @throws Exception */ public function getConnection(): Redis { if ($this->redisUnavailable) { throw new Exception('Redis is still not available'); } elseif ($this->redis === null) { try { $primaryRedis = $this->getPrimaryRedis(); } catch (Exception $e) { try { $secondaryRedis = $this->getSecondaryRedis(); } catch (Exception $ee) { $this->redisUnavailable = true; Logger::error($ee); throw $e; } if ($secondaryRedis === null) { $this->redisUnavailable = true; throw $e; } $this->redis = $secondaryRedis; return $this->redis; } $primaryTimestamp = $this->getLastIcingaHeartbeat($primaryRedis); if ($primaryTimestamp <= time() - 60) { $secondaryRedis = $this->getSecondaryRedis(); if ($secondaryRedis === null) { $this->redis = $primaryRedis; return $this->redis; } $secondaryTimestamp = $this->getLastIcingaHeartbeat($secondaryRedis); if ($secondaryTimestamp > $primaryTimestamp) { $this->redis = $secondaryRedis; } else { $this->redis = $primaryRedis; } } else { $this->redis = $primaryRedis; } } return $this->redis; } /** * Fetch host states * * @param array $ids The host ids to fetch results for * @param array $columns The columns to include in the results * * @return Generator */ public static function fetchHostState(array $ids, array $columns): Generator { return Backend::getRedis()->fetchState('icinga:host:state', $ids, $columns); } /** * Fetch service states * * @param array $ids The service ids to fetch results for * @param array $columns The columns to include in the results * * @return Generator */ public static function fetchServiceState(array $ids, array $columns): Generator { return Backend::getRedis()->fetchState('icinga:service:state', $ids, $columns); } /** * Fetch object states * * @param string $key The object key to access * @param array $ids The object ids to fetch results for * @param array $columns The columns to include in the results * * @return Generator */ protected function fetchState(string $key, array $ids, array $columns): Generator { try { $results = $this->getConnection()->hmget($key, $ids); } catch (Exception $_) { // The error has already been logged elsewhere return; } foreach ($results as $i => $json) { if ($json !== null) { $data = json_decode($json, true); $keyMap = array_fill_keys($columns, null); unset($keyMap['is_overdue']); // Is calculated by Icinga DB, not Icinga 2, hence it's never in redis yield $ids[$i] => array_intersect_key(array_merge($keyMap, $data), $keyMap); } } } /** * Get the last icinga heartbeat from redis * * @param ?Redis $redis * * @return float|int|null */ public static function getLastIcingaHeartbeat(?Redis $redis = null) { if ($redis === null) { $redis = Backend::getRedis()->getConnection(); } $stream = 'icinga:stats'; $rs = $redis->xread(1, null, [$stream], '0'); if (is_array($rs)) { $timestampKeyPos = array_search('timestamp', $rs[$stream][0][1] ?? [], true); if ($timestampKeyPos !== false && isset($rs[$stream][0][1][$timestampKeyPos + 1])) { return $rs[$stream][0][1][$timestampKeyPos + 1] / 1000; } } return null; } /** * Get the primary redis instance * * @param ?Config $moduleConfig * @param ?Config $redisConfig * * @return Redis */ public static function getPrimaryRedis(?Config $moduleConfig = null, ?Config $redisConfig = null): Redis { if ($moduleConfig === null) { $moduleConfig = Config::module('icingadb'); } if ($redisConfig === null) { $redisConfig = Config::module('icingadb', 'redis'); } $section = $redisConfig->getSection('redis1'); $redis = new Redis([ 'host' => $section->get('host', static::DEFAULT_HOST), 'port' => $section->get('port', static::DEFAULT_PORT), 'database' => $section->get('database', static::DEFAULT_DATABASE), 'username' => $section->get('username'), 'password' => $section->get('password'), 'timeout' => 0.5 ] + self::getTlsParams($moduleConfig)); $redis->ping(); return $redis; } /** * Get the secondary redis instance if exists * * @param ?Config $moduleConfig * @param ?Config $redisConfig * * @return ?Redis */ public static function getSecondaryRedis(?Config $moduleConfig = null, ?Config $redisConfig = null) { if ($moduleConfig === null) { $moduleConfig = Config::module('icingadb'); } if ($redisConfig === null) { $redisConfig = Config::module('icingadb', 'redis'); } $section = $redisConfig->getSection('redis2'); $host = $section->host; if (empty($host)) { return null; } $redis = new Redis([ 'host' => $host, 'port' => $section->get('port', static::DEFAULT_PORT), 'database' => $section->get('database', static::DEFAULT_DATABASE), 'username' => $section->get('username'), 'password' => $section->get('password'), 'timeout' => 0.5 ] + self::getTlsParams($moduleConfig)); $redis->ping(); return $redis; } private static function getTlsParams(Config $config): array { $config = $config->getSection('redis'); if (! $config->get('tls', false)) { return []; } $ssl = []; if ($config->get('insecure')) { $ssl['verify_peer'] = false; $ssl['verify_peer_name'] = false; } else { $ca = $config->get('ca'); if ($ca !== null) { $ssl['cafile'] = $ca; } } $cert = $config->get('cert'); $key = $config->get('key'); if ($cert !== null && $key !== null) { $ssl['local_cert'] = $cert; $ssl['local_pk'] = $key; } return ['scheme' => 'tls', 'ssl' => $ssl]; } } icingadb-web-1.5.0/library/Icingadb/Common/Icons.php000066400000000000000000000014711527064444300222240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; class Icons { public const COMMENT = 'comment'; public const HOST_DOWN = 'sitemap'; public const UNREACHABLE = 'sitemap'; public const IN_DOWNTIME = 'plug'; public const IS_ACKNOWLEDGED = 'check'; public const IS_FLAPPING = 'bolt'; public const IS_PERSISTENT = 'thumbtack'; public const NOTIFICATION = 'bell'; public const REMOVE = 'trash'; public const NOTIFICATIONS_DISABLED = 'bell-slash'; public const ACTIVE_CHECKS_DISABLED = 'eye-slash'; public const USER = 'user'; public const USERGROUP = 'users'; public const WARNING = 'exclamation-triangle'; public const SCHEDULE = 'calendar'; } icingadb-web-1.5.0/library/Icingadb/Common/Links.php000066400000000000000000000100171527064444300222250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\AlertHistory; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use ipl\Web\Url; abstract class Links { public static function comment(Comment $comment): Url { return Url::fromPath('icingadb/comment', ['name' => $comment->name]); } public static function comments(): Url { return Url::fromPath('icingadb/comments'); } public static function commentsDelete(): Url { return Url::fromPath('icingadb/comments/delete'); } public static function commentsDetails(): Url { return Url::fromPath('icingadb/comments/details'); } public static function downtime(Downtime $downtime): Url { return Url::fromPath('icingadb/downtime', ['name' => $downtime->name]); } public static function downtimes(): Url { return Url::fromPath('icingadb/downtimes'); } public static function downtimesDelete(): Url { return Url::fromPath('icingadb/downtimes/delete'); } public static function downtimesDetails(): Url { return Url::fromPath('icingadb/downtimes/details'); } public static function host(Host $host): Url { return Url::fromPath('icingadb/host', ['name' => $host->name]); } public static function hostSource(Host $host): Url { return Url::fromPath('icingadb/host/source', ['name' => $host->name]); } public static function hostsDetails(): Url { return Url::fromPath('icingadb/hosts/details'); } public static function hostgroup($hostgroup): Url { return Url::fromPath('icingadb/hostgroup', ['name' => $hostgroup->name]); } public static function hosts(): Url { return Url::fromPath('icingadb/hosts'); } public static function service(Service $service, Host $host): Url { return Url::fromPath('icingadb/service', ['name' => $service->name, 'host.name' => $host->name]); } public static function serviceSource(Service $service, Host $host): Url { return Url::fromPath('icingadb/service/source', ['name' => $service->name, 'host.name' => $host->name]); } public static function servicesDetails(): Url { return Url::fromPath('icingadb/services/details'); } public static function servicegroup($servicegroup): Url { return Url::fromPath('icingadb/servicegroup', ['name' => $servicegroup->name]); } public static function services(): Url { return Url::fromPath('icingadb/services'); } public static function toggleHostsFeatures(): Url { return Url::fromPath('icingadb/hosts/toggle-features'); } public static function toggleServicesFeatures(): Url { return Url::fromPath('icingadb/services/toggle-features'); } public static function user(User $user): Url { return Url::fromPath('icingadb/contact', ['name' => $user->name]); } public static function usergroup(Usergroup $usergroup): Url { return Url::fromPath('icingadb/contactgroup', ['name' => $usergroup->name]); } public static function users(): Url { return Url::fromPath('icingadb/contacts'); } public static function usergroups(): Url { return Url::fromPath('icingadb/contactgroups'); } public static function event(History $event): Url { return Url::fromPath('icingadb/event', ['id' => bin2hex($event->id)]); } public static function alert(AlertHistory $alert): Url { return Url::fromPath('icingadb/alert', ['id' => bin2hex($alert->id)]); } } icingadb-web-1.5.0/library/Icingadb/Common/LoadMore.php000066400000000000000000000047211527064444300226540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Generator; use Icinga\Module\Icingadb\Widget\ItemList\PageSeparatorItem; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Orm\ResultSet; use ipl\Web\Url; trait LoadMore { /** @var int */ protected $pageSize; /** @var int */ protected $pageNumber; /** @var Url */ protected $loadMoreUrl; /** * Set the page size * * @param int $size * * @return $this */ public function setPageSize(int $size): self { $this->pageSize = $size; return $this; } /** * Set the page number * * @param int $number * * @return $this */ public function setPageNumber(int $number): self { $this->pageNumber = $number; return $this; } /** * Set the url to fetch more items * * @param Url $url * * @return $this */ public function setLoadMoreUrl(Url $url): self { $this->loadMoreUrl = $url; return $this; } /** * Iterate over the given data * * Add the page separator and the "LoadMore" button at the desired position * * @param ResultSet $result * * @return Generator */ protected function getIterator(ResultSet $result): Generator { $count = 0; $pageNumber = $this->pageNumber ?: 1; if ($pageNumber > 1) { $this->add(new PageSeparatorItem($pageNumber)); } foreach ($result as $data) { $count++; if ($count % $this->pageSize === 0) { $pageNumber++; } elseif ($count > $this->pageSize && $count % $this->pageSize === 1) { $this->add(new PageSeparatorItem($pageNumber)); } yield $data; } if ($count > 0 && $this->loadMoreUrl !== null) { $showMore = (new ShowMore( $result, $this->loadMoreUrl->setParam('page', $pageNumber) ->setAnchor('page-' . ($pageNumber)) )) ->setLabel(t('Load More')) ->setAttributes([ 'class' => 'load-more', 'data-no-icinga-ajax' => true ]); $this->add($showMore->setTag('li')->addAttributes(['class' => 'list-item'])); } } } icingadb-web-1.5.0/library/Icingadb/Common/Macros.php000066400000000000000000000103541527064444300223750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use DateTime; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Compat\CompatHost; use Icinga\Module\Icingadb\Compat\CompatService; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Orm\Query; use ipl\Orm\ResultSet; use function ipl\Stdlib\get_php_type; trait Macros { /** * Get the given string with macros being resolved * * @param string $input The string in which to look for macros * @param Host|Service|CompatService|CompatHost $object The host or service used to resolve the macros * * @return string */ public function expandMacros(string $input, $object): string { if (preg_match_all('@\$([^\$\s]+)\$@', $input, $matches)) { foreach ($matches[1] as $key => $value) { $newValue = $this->resolveMacro($value, $object); if ($newValue !== $value) { $input = str_replace($matches[0][$key], $newValue, $input); } } } return $input; } /** * Resolve a macro based on the given object * * @param string $macro The macro to resolve * @param Host|Service|CompatService|CompatHost $object The host or service used to resolve the macros * * @return string */ public function resolveMacro(string $macro, $object): string { if ($object instanceof Host || (property_exists($object, 'type') && $object->type === 'host')) { $objectType = 'host'; } else { $objectType = 'service'; } $path = null; $macroType = $objectType; $isCustomVar = false; if (preg_match('/^((host|service)\.)?vars\.(.+)/', $macro, $matches)) { if (! empty($matches[2])) { $macroType = $matches[2]; } $path = $matches[3]; $isCustomVar = true; } elseif (preg_match('/^(\w+)\.(.+)/', $macro, $matches)) { $macroType = $matches[1]; $path = $matches[2]; } try { if ($path !== null) { if ($macroType !== $objectType) { $value = $object->$macroType; } else { $value = $object; } $properties = explode('.', $path); do { $column = array_shift($properties); if ($value instanceof Query || $value instanceof ResultSet || is_array($value)) { Logger::debug( 'Failed to resolve property "%s" on a "%s" type.', $isCustomVar ? 'vars' : $column, get_php_type($value) ); $value = null; break; } if ($isCustomVar) { $value = $value->vars[$path]; break; } $value = $value->$column; } while (! empty($properties) && $value !== null); } else { $value = $object->$macro; } } catch (\Exception $e) { $objectName = $object->name; if ($objectType === 'service' && isset($object->host)) { $objectName = $object->host->name . '!' . $objectName; } $value = null; Logger::debug('Unable to resolve macro "%s" on object "%s". An error occured: %s', $macro, $objectName, $e); } if ($value instanceof Query || $value instanceof ResultSet || is_array($value)) { Logger::debug( 'It is not allowed to use "%s" as a macro which produces a "%s" type as a result.', $macro, get_php_type($value) ); $value = null; } if ($value instanceof DateTime) { $value = $value->format(DateTime::ATOM); } elseif (is_bool($value)) { $value = $value ? 'y' : 'n'; } return (string) ($value ?? $macro); } } icingadb-web-1.5.0/library/Icingadb/Common/Model.php000066400000000000000000000011731527064444300222100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use ipl\Orm\Query; use ipl\Sql\Connection; abstract class Model extends \ipl\Orm\Model { public static function on(Connection $db) { $query = parent::on($db); return $query->on( Query::ON_SELECT_ASSEMBLED, function () use ($query) { $auth = new class () { use Auth; }; $auth->assertColumnRestrictions($query->getFilter()); } ); } } icingadb-web-1.5.0/library/Icingadb/Common/ObjectInspectionDetail.php000066400000000000000000000264661527064444300255510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use DateTime; use DateTimeZone; use Exception; use Icinga\Exception\IcingaException; use Icinga\Exception\Json\JsonDecodeException; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Widget\Detail\CustomVarTable; use Icinga\Util\Format; use Icinga\Util\Json; use InvalidArgumentException; use ipl\Html\BaseHtmlElement; use ipl\Html\FormattedString; use ipl\Html\HtmlElement; use ipl\Html\Table; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; abstract class ObjectInspectionDetail extends BaseHtmlElement { protected $tag = 'div'; protected $defaultAttributes = ['class' => ['object-detail', 'inspection-detail']]; /** @var Model */ protected $object; /** @var array */ protected $attrs; /** @var array */ protected $joins; public function __construct(Model $object, array $apiResult) { $this->object = $object; $this->attrs = $apiResult['attrs']; $this->joins = $apiResult['joins']; } /** * Render the object source location * * @return ?array */ protected function createSourceLocation() { if (! isset($this->attrs['source_location'])) { return; } return [ new HtmlElement('h2', null, Text::create(t('Source Location'))), FormattedString::create( t('You can find this object in %s on line %s.'), new HtmlElement('strong', null, Text::create($this->attrs['source_location']['path'])), new HtmlElement('strong', null, Text::create($this->attrs['source_location']['first_line'])) ) ]; } /** * Render object's last check result * * @return ?array */ protected function createLastCheckResult() { if (! isset($this->attrs['last_check_result'])) { return; } $command = $this->attrs['last_check_result']['command']; if (is_array($command)) { $command = join(' ', array_map('escapeshellarg', $command)); } $denylist = [ 'command', 'output', 'type', 'active' ]; if ($command) { $execCommand = new HtmlElement('pre', null, Text::create($command)); CopyToClipboard::attachTo($execCommand); } else { $execCommand = new EmptyState(t('n. a.')); } return [ new HtmlElement('h2', null, Text::create(t('Executed Command'))), $execCommand, new HtmlElement('h2', null, Text::create(t('Execution Details'))), $this->createNameValueTable( array_diff_key($this->attrs['last_check_result'], array_flip($denylist)), [ 'execution_end' => [$this, 'formatTimestamp'], 'execution_start' => [$this, 'formatTimestamp'], 'schedule_end' => [$this, 'formatTimestamp'], 'schedule_start' => [$this, 'formatTimestamp'], 'ttl' => [$this, 'formatSeconds'], 'state' => [$this, 'formatState'] ] ) ]; } protected function createRedisInfo(): array { $title = new HtmlElement('h2', null, Text::create(t('Volatile State Details'))); try { $json = Backend::getRedis()->getConnection() ->hGet("icinga:{$this->object->getTableName()}:state", bin2hex($this->object->id)); } catch (Exception $e) { return [$title, sprintf('Failed to load redis data: %s', $e->getMessage())]; } if (! $json) { return [$title, new EmptyState(t('No data available in redis'))]; } try { $data = Json::decode($json, true); } catch (JsonDecodeException $e) { return [$title, sprintf('Failed to decode redis data: %s', $e->getMessage())]; } $denylist = [ 'commandline', 'environment_id', 'id' ]; return [$title, $this->createNameValueTable( array_diff_key($data, array_flip($denylist)), [ 'last_state_change' => [$this, 'formatMillisecondTimestamp'], 'last_update' => [$this, 'formatMillisecondTimestamp'], 'next_check' => [$this, 'formatMillisecondTimestamp'], 'next_update' => [$this, 'formatMillisecondTimestamp'], 'check_timeout' => [$this, 'formatMilliseconds'], 'execution_time' => [$this, 'formatMilliseconds'], 'latency' => [$this, 'formatMilliseconds'], 'hard_state' => [$this, 'formatState'], 'previous_soft_state' => [$this, 'formatState'], 'previous_hard_state' => [$this, 'formatState'], 'state' => [$this, 'formatState'] ] )]; } protected function createAttributes(): array { $denylist = [ 'name', '__name', 'host_name', 'display_name', 'last_check_result', 'source_location', 'package', 'version', 'type', 'active', 'paused', 'ha_mode' ]; return [ new HtmlElement('h2', null, Text::create(t('Object Attributes'))), $this->createNameValueTable( array_diff_key($this->attrs, array_flip($denylist)), [ 'acknowledgement_expiry' => [$this, 'formatTimestamp'], 'acknowledgement_last_change' => [$this, 'formatTimestamp'], 'check_timeout' => [$this, 'formatSeconds'], 'flapping_last_change' => [$this, 'formatTimestamp'], 'last_check' => [$this, 'formatTimestamp'], 'last_hard_state_change' => [$this, 'formatTimestamp'], 'last_state_change' => [$this, 'formatTimestamp'], 'last_state_ok' => [$this, 'formatTimestamp'], 'last_state_up' => [$this, 'formatTimestamp'], 'last_state_warning' => [$this, 'formatTimestamp'], 'last_state_critical' => [$this, 'formatTimestamp'], 'last_state_down' => [$this, 'formatTimestamp'], 'last_state_unknown' => [$this, 'formatTimestamp'], 'last_state_unreachable' => [$this, 'formatTimestamp'], 'next_check' => [$this, 'formatTimestamp'], 'next_update' => [$this, 'formatTimestamp'], 'previous_state_change' => [$this, 'formatTimestamp'], 'check_interval' => [$this, 'formatSeconds'], 'retry_interval' => [$this, 'formatSeconds'], 'last_hard_state' => [$this, 'formatState'], 'last_state' => [$this, 'formatState'], 'state' => [$this, 'formatState'] ] ) ]; } protected function createCustomVariables() { $query = $this->object->customvar ->columns(['name', 'value']); $result = []; foreach ($query as $row) { $result[$row->name] = json_decode($row->value, true) ?? $row->value; } if (! empty($result)) { $vars = new CustomVarTable($result); } else { $vars = new EmptyState(t('No custom variables configured.')); } return [ new HtmlElement('h2', null, Text::create(t('Custom Variables'))), $vars ]; } /** * Format the given value as a json * * @param mixed $json * * @return BaseHtmlElement|string */ private function formatJson($json) { if (is_scalar($json)) { return Json::encode($json, JSON_UNESCAPED_SLASHES); } return new HtmlElement( 'pre', null, Text::create(Json::encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ); } /** * Format the given timestamp * * @param int|float|null $ts * * @return EmptyState|string */ private function formatTimestamp($ts) { if (empty($ts)) { return new EmptyState(t('n. a.')); } if (is_float($ts)) { $dt = DateTime::createFromFormat('U.u', sprintf('%F', $ts)); } else { $dt = (new DateTime())->setTimestamp($ts); } return $dt->setTimezone(new DateTimeZone('UTC')) ->format('Y-m-d\TH:i:s.vP'); } /** * Format the given timestamp (in milliseconds) * * @param int|float|null $ms * * @return EmptyState|string */ private function formatMillisecondTimestamp($ms) { return $this->formatTimestamp($ms / 1000.0); } private function formatSeconds($s): string { return Format::seconds($s); } private function formatMilliseconds($ms): string { return Format::seconds($ms / 1000.0); } private function formatState(int $state) { try { switch (true) { case $this->object instanceof Host: return HostStates::text($state); case $this->object instanceof Service: return ServiceStates::text($state); default: return $state; } } catch (InvalidArgumentException $_) { // The Icinga 2 API sometimes delivers strange details return (string) $state; } } private function createNameValueTable(array $data, array $formatters): Table { $table = new Table(); $table->addAttributes(['class' => 'name-value-table']); foreach ($data as $name => $value) { if (empty($value) && ($value === null || is_string($value) || is_array($value))) { $value = new EmptyState(t('n. a.')); } else { try { if (isset($formatters[$name])) { $value = call_user_func($formatters[$name], $value); } else { $value = $this->formatJson($value); if ($value instanceof BaseHtmlElement) { CopyToClipboard::attachTo($value); } } } catch (Exception $e) { $value = new EmptyState(IcingaException::describe($e)); } } $table->addHtml(Table::tr([ Table::th($name), Table::td($value) ])); } return $table; } } icingadb-web-1.5.0/library/Icingadb/Common/SearchControls.php000066400000000000000000000057651527064444300241140ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Hook\SearchColumnsProviderHook; use ipl\Orm\Query; use ipl\Web\Control\SearchBar; use ipl\Web\Control\SearchEditor; use ipl\Web\Url; use ipl\Web\Widget\ContinueWith; trait SearchControls { use \ipl\Web\Compat\SearchControls { \ipl\Web\Compat\SearchControls::createSearchBar as private webCreateSearchBar; \ipl\Web\Compat\SearchControls::createSearchEditor as private webCreateSearchEditor; } /** * Create and return the SearchBar * * @param Query $query The query being filtered * @param Url $redirectUrl Url to redirect to upon success * @param array $preserveParams Query params to preserve when redirecting * * @return SearchBar */ public function createSearchBar(Query $query, ...$params): SearchBar { $searchBar = $this->webCreateSearchBar($query, ...$params); $model = $query->getModel(); $defaultColumns = $model->getSearchColumns(); $columns = SearchColumnsProviderHook::getCustomVarColumns($model, $defaultColumns); $searchBar->setSearchColumns($columns); $searchBar->handleRequest($this->getServerRequest()); return $searchBar; } private function callHandleRequest() { return false; } /** * Necessary because {@see self::callHandleRequest()} prevents the {@see webCreateSearchEditor()} from calling * $editor->handleRequest() * * @inheritdoc */ public function createSearchEditor(Query $query, ...$params): SearchEditor { $editor = $this->webCreateSearchEditor($query, ...$params); $editor->handleRequest($this->getServerRequest()); return $editor; } /** * Create and return a ContinueWith * * This will automatically be appended to the SearchBar's wrapper. It's not necessary * to add it separately as control or content! * * @param Url $detailsUrl * @param SearchBar $searchBar * @param bool $hasResults Whether the current query has results * * @return ContinueWith */ public function createContinueWith(Url $detailsUrl, SearchBar $searchBar, bool $hasResults = true): ContinueWith { if ($hasResults) { $continueWith = ContinueWith::create( $detailsUrl, [$searchBar, 'getFilter'], t('Show bulk processing actions for all filtered results'), t('A filter is required to show bulk processing actions'), ); $continueWith->setBaseTarget('_next'); } else { $continueWith = ContinueWith::createDisabled(t('No items found')); } $continueWith->getAttributes() ->set('id', $this->getRequest()->protectId('continue-with')); $searchBar->getWrapper()->add($continueWith); return $continueWith; } } icingadb-web-1.5.0/library/Icingadb/Common/ServiceLink.php000066400000000000000000000023101527064444300233600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\FormattedString; use ipl\Html\Html; use ipl\Web\Widget\StateBall; trait ServiceLink { protected function createServiceLink(Service $service, Host $host, bool $withStateBall = false): FormattedString { $content = []; if ($withStateBall) { $content[] = new StateBall($service->state->getStateText(), StateBall::SIZE_MEDIUM); $content[] = ' '; } $content[] = $service->display_name; return Html::sprintf( t('%s on %s', ' on '), Html::tag('a', ['href' => Links::service($service, $host), 'class' => 'subject'], $content), Html::tag( 'a', ['href' => Links::host($host), 'class' => 'subject'], [ new StateBall($host->state->getStateText(), StateBall::SIZE_MEDIUM), ' ', $host->display_name ] ) ); } } icingadb-web-1.5.0/library/Icingadb/Common/ServiceLinks.php000066400000000000000000000070471527064444300235570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Web\Url; abstract class ServiceLinks { public static function acknowledge(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/acknowledge', ['name' => $service->name, 'host.name' => $host->name] ); } public static function addComment(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/add-comment', ['name' => $service->name, 'host.name' => $host->name] ); } public static function checkNow(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/check-now', ['name' => $service->name, 'host.name' => $host->name] ); } public static function scheduleCheck(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/schedule-check', ['name' => $service->name, 'host.name' => $host->name] ); } public static function comments(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/comments', ['service.name' => $service->name, 'host.name' => $host->name] ); } public static function downtimes(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/downtimes', ['service.name' => $service->name, 'host.name' => $host->name] ); } public static function history(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/history', ['name' => $service->name, 'host.name' => $host->name] ); } public static function removeAcknowledgement(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/remove-acknowledgement', ['name' => $service->name, 'host.name' => $host->name] ); } public static function scheduleDowntime(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/schedule-downtime', ['name' => $service->name, 'host.name' => $host->name] ); } public static function sendCustomNotification(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/send-custom-notification', ['name' => $service->name, 'host.name' => $host->name] ); } public static function processCheckresult(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/process-checkresult', ['name' => $service->name, 'host.name' => $host->name] ); } public static function toggleFeatures(Service $service, Host $host): Url { return Url::fromPath( 'icingadb/service/toggle-features', ['name' => $service->name, 'host.name' => $host->name] ); } public static function subscribe(Service $service, Host $host): Url { return Url::fromPath('icingadb/service/subscribe', ['name' => $service->name, 'host.name' => $host->name]); } public static function unsubscribe(Service $service, Host $host): Url { return Url::fromPath('icingadb/service/unsubscribe', ['name' => $service->name, 'host.name' => $host->name]); } } icingadb-web-1.5.0/library/Icingadb/Common/ServiceStates.php000066400000000000000000000067151527064444300237430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; /** * Collection of possible service states. */ class ServiceStates { public const OK = 0; public const WARNING = 1; public const CRITICAL = 2; public const UNKNOWN = 3; public const PENDING = 99; /** * Get the integer value of the given textual service state * * @param string $state * * @return int * * @throws \InvalidArgumentException If the given service state is invalid, i.e. not known */ public static function int(string $state): int { switch (strtolower($state)) { case 'ok': $int = self::OK; break; case 'warning': $int = self::WARNING; break; case 'critical': $int = self::CRITICAL; break; case 'unknown': $int = self::UNKNOWN; break; case 'pending': $int = self::PENDING; break; default: throw new \InvalidArgumentException(sprintf('Invalid service state %d', $state)); } return $int; } /** * Get the textual representation of the passed service state * * @param ?int $state * * @return string * * @throws \InvalidArgumentException If the given service state is invalid, i.e. not known */ public static function text(?int $state = null): string { switch (true) { case $state === self::OK: $text = 'ok'; break; case $state === self::WARNING: $text = 'warning'; break; case $state === self::CRITICAL: $text = 'critical'; break; case $state === self::UNKNOWN: $text = 'unknown'; break; case $state === self::PENDING: $text = 'pending'; break; case $state === null: $text = 'not-available'; break; default: throw new \InvalidArgumentException(sprintf('Invalid service state %d', $state)); } return $text; } /** * Get the translated textual representation of the passed service state * * @param ?int $state * * @return string * * @throws \InvalidArgumentException If the given service state is invalid, i.e. not known */ public static function translated(?int $state = null): string { switch (true) { case $state === self::OK: $text = t('ok'); break; case $state === self::WARNING: $text = t('warning'); break; case $state === self::CRITICAL: $text = t('critical'); break; case $state === self::UNKNOWN: $text = t('unknown'); break; case $state === self::PENDING: $text = t('pending'); break; case $state === null: $text = t('not available'); break; default: throw new \InvalidArgumentException(sprintf('Invalid service state %d', $state)); } return $text; } } icingadb-web-1.5.0/library/Icingadb/Common/StateBadges.php000066400000000000000000000126101527064444300233340ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use InvalidArgumentException; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Url; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBadge; abstract class StateBadges extends BaseHtmlElement { use BaseFilter; /** @var object $item */ protected $item; /** @var string */ protected $type; /** @var string Prefix */ protected $prefix; /** @var ?Url Badge link */ protected $url; protected $tag = 'ul'; protected $defaultAttributes = ['class' => 'state-badges']; /** * Create a new widget for state badges * * @param object $item */ public function __construct($item) { $this->item = $item; $this->type = $this->getType(); $this->prefix = $this->getPrefix(); $this->url = $this->getBaseUrl(); } /** * Get the type of the items * * @return string */ abstract protected function getType(): string; /** * Get the prefix for accessing state information * * @return string */ abstract protected function getPrefix(): string; /** * Get the badge base URL * * @return ?Url */ protected function getBaseUrl(): ?Url { return null; } /** * Get the integer of the given state text * * @param string $state * * @return int * * @throws InvalidArgumentException if the given state is not valid */ protected function getStateInt(string $state): int { throw new InvalidArgumentException(sprintf('%s is not a valid state', $state)); } /** * Get the badge URL * * @return ?Url */ public function getUrl(): ?Url { return $this->url; } /** * Set the badge URL * * @param Url $url * * @return $this */ public function setUrl(Url $url): self { $this->url = $url; return $this; } /** * Create a badge link * * @param mixed $content * @param ?Filter\Rule $filter * * @return Link */ protected function createLink($content, ?Filter\Rule $filter = null): Link { $url = clone $this->getUrl(); $urlFilter = Filter::all(); if ($filter !== null) { $urlFilter->add($filter); } if ($this->hasBaseFilter()) { $urlFilter->add($this->getBaseFilter()); } if (! $urlFilter->isEmpty()) { $url->setFilter($urlFilter); } return new Link($content, $url); } /** * Create a state bade * * @param string $state * * @return ?BaseHtmlElement */ protected function createBadge(string $state): ?BaseHtmlElement { $key = $this->prefix . "_{$state}"; if (empty($this->item->$key)) { return null; } $stateBadge = new StateBadge($this->item->$key, $state); if ($this->url !== null) { $stateBadge = $this->createLink( $stateBadge, Filter::equal($this->type . '.state.soft_state', $this->getStateInt($state)) ); } return new HtmlElement('li', null, $stateBadge); } /** * Create a state group * * @param string $state * * @return ?BaseHtmlElement */ protected function createGroup(string $state): ?BaseHtmlElement { $content = []; $handledKey = $this->prefix . "_{$state}_handled"; $unhandledKey = $this->prefix . "_{$state}_unhandled"; if (isset($this->item->$unhandledKey) && $this->item->$unhandledKey) { $unhandledStateBadge = new StateBadge($this->item->$unhandledKey, $state); if ($this->url !== null) { $unhandledStateBadge = $this->createLink( $unhandledStateBadge, Filter::all( Filter::equal($this->type . '.state.soft_state', $this->getStateInt($state)), Filter::equal($this->type . '.state.is_handled', 'n'), Filter::equal($this->type . '.state.is_reachable', 'y') ) ); } $content[] = new HtmlElement('li', null, $unhandledStateBadge); } if (isset($this->item->$handledKey) && $this->item->$handledKey) { $handledStateBadge = new StateBadge($this->item->$handledKey, $state, true); if ($this->url !== null) { $handledStateBadge = $this->createLink( $handledStateBadge, Filter::all( Filter::equal($this->type . '.state.soft_state', $this->getStateInt($state)), Filter::any( Filter::equal($this->type . '.state.is_handled', 'y'), Filter::equal($this->type . '.state.is_reachable', 'n') ) ) ); } $content[] = new HtmlElement('li', null, $handledStateBadge); } if (empty($content)) { return null; } return Html::tag('li', Html::tag('ul', $content)); } } icingadb-web-1.5.0/library/Icingadb/Common/TicketLinks.php000066400000000000000000000023251527064444300233740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Common; use Icinga\Application\Hook; use Icinga\Application\Hook\TicketHook; trait TicketLinks { /** @var bool Whether the ticket link is disabled */ protected $ticketLinkDisabled = false; /** * Set whether the ticket link is disabled * * @param bool $state * * @return $this */ public function setTicketLinkDisabled(bool $state = true): self { $this->ticketLinkDisabled = $state; return $this; } /** * Get whether the ticket link is disabled * * @return bool */ public function isTicketLinkDisabled(): bool { return $this->ticketLinkDisabled; } /** * Get whether list items should render host and service links * * @return string */ public function createTicketLinks($text): string { if ($this->isTicketLinkDisabled() || ! Hook::has('ticket')) { return $text ?? ''; } /** @var TicketHook $tickets */ $tickets = Hook::first('ticket'); return $tickets->createLinks($text); } } icingadb-web-1.5.0/library/Icingadb/Compat/000077500000000000000000000000001527064444300204305ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Compat/CompatHost.php000066400000000000000000000117551527064444300232330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Compat; use Icinga\Module\Monitoring\Object\Host; class CompatHost extends Host { use CompatObject; private $legacyColumns = [ 'host_action_url' => ['path' => ['action_url', 'action_url']], 'action_url' => ['path' => ['action_url', 'action_url']], 'host_address' => ['path' => ['address']], 'host_address6' => ['path' => ['address6']], 'host_alias' => ['path' => ['display_name']], 'host_check_interval' => ['path' => ['check_interval']], 'host_display_name' => ['path' => ['display_name']], 'host_icon_image' => ['path' => ['icon_image', 'icon_image']], 'host_icon_image_alt' => ['path' => ['icon_image_alt']], 'host_name' => ['path' => ['name']], 'host_notes' => ['path' => ['notes']], 'host_notes_url' => ['path' => ['notes_url', 'notes_url']], 'host_acknowledged' => [ 'path' => ['state', 'is_acknowledged'], 'type' => 'bool' ], 'host_acknowledgement_type' => [ 'path' => ['state', 'is_acknowledged'], 'type' => 'bool' ], 'host_active_checks_enabled' => [ 'path' => ['active_checks_enabled'], 'type' => 'bool' ], 'host_active_checks_enabled_changed' => null, 'host_attempt' => null, 'host_check_command' => ['path' => ['checkcommand_name']], 'host_check_execution_time' => ['path' => ['state', 'execution_time']], 'host_check_latency' => ['path' => ['state', 'latency']], 'host_check_source' => ['path' => ['state', 'check_source']], 'host_check_timeperiod' => ['path' => ['check_timeperiod_name']], 'host_current_check_attempt' => ['path' => ['state', 'check_attempt']], 'host_current_notification_number' => null, 'host_event_handler_enabled' => [ 'path' => ['event_handler_enabled'], 'type' => 'bool' ], 'host_event_handler_enabled_changed' => null, 'host_flap_detection_enabled' => [ 'path' => ['flapping_enabled'], 'type' => 'bool' ], 'host_flap_detection_enabled_changed' => null, 'host_handled' => [ 'path' => ['state', 'is_handled'], 'type' => 'bool' ], 'host_in_downtime' => [ 'path' => ['state', 'in_downtime'], 'type' => 'bool' ], 'host_is_flapping' => [ 'path' => ['state', 'is_flapping'], 'type' => 'bool' ], 'host_is_reachable' => [ 'path' => ['state', 'is_reachable'], 'type' => 'bool' ], 'host_last_check' => ['path' => ['state', 'last_update']], 'host_last_notification' => null, 'host_last_state_change' => ['path' => ['state', 'last_state_change']], 'host_long_output' => ['path' => ['state', 'long_output']], 'host_max_check_attempts' => ['path' => ['max_check_attempts']], 'host_next_check' => ['path' => ['state', 'next_check']], 'host_next_update' => ['path' => ['state', 'next_update']], 'host_notifications_enabled' => [ 'path' => ['notifications_enabled'], 'type' => 'bool' ], 'host_notifications_enabled_changed' => null, 'host_obsessing' => null, 'host_obsessing_changed' => null, 'host_output' => ['path' => ['state', 'output']], 'host_passive_checks_enabled' => [ 'path' => ['passive_checks_enabled'], 'type' => 'bool' ], 'host_passive_checks_enabled_changed' => null, 'host_percent_state_change' => null, 'host_perfdata' => ['path' => ['state', 'performance_data']], 'host_process_perfdata' => [ 'path' => ['perfdata_enabled'], 'type' => 'bool' ], 'host_state' => ['path' => ['state', 'soft_state']], 'host_state_type' => ['path' => ['state', 'state_type']], 'instance_name' => null ]; } icingadb-web-1.5.0/library/Icingadb/Compat/CompatObject.php000066400000000000000000000237451527064444300235260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Compat; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\CustomvarFlat; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\Servicegroup; use Icinga\Module\Icingadb\Model\ServicestateSummary; use InvalidArgumentException; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Stdlib\Filter; use LogicException; use function ipl\Stdlib\get_php_type; trait CompatObject { use Auth; use Database; /** @var array Non-obscured custom variables */ protected $rawCustomvars; /** @var array Non-obscured host custom variables */ protected $rawHostCustomvars; /** @var Model $object */ private $object; public function __construct(Model $object) { $this->object = $object; } public static function fromModel(Model $object) { switch (true) { case $object instanceof Host: return new CompatHost($object); case $object instanceof Service: return new CompatService($object); default: throw new InvalidArgumentException(sprintf( 'Host or Service Model instance expected, got "%s" instead.', get_php_type($object) )); } } /** * Get this object's name * * @return string */ public function getName(): string { return $this->object->name ?? ''; } public function fetch(): bool { return true; } protected function fetchRawCustomvars(): self { if ($this->rawCustomvars !== null) { return $this; } $vars = $this->object->customvar->execute(); $customVars = []; foreach ($vars as $row) { $customVars[$row->name] = $row->value; } $this->rawCustomvars = $customVars; return $this; } protected function fetchRawHostCustomvars(): self { if ($this->rawHostCustomvars !== null) { return $this; } $vars = $this->object->host->customvar->execute(); $customVars = []; foreach ($vars as $row) { $customVars[$row->name] = $row->value; } $this->rawHostCustomvars = $customVars; return $this; } public function fetchComments() { $this->comments = []; return $this; } public function fetchContactgroups() { $this->contactgroups = []; return $this; } public function fetchContacts() { $this->contacts = []; return $this; } public function fetchCustomvars(): self { if ($this->customvars !== null) { return $this; } $this->customvars = (new CustomvarFlat())->unFlattenVars($this->object->customvar_flat); return $this; } public function fetchHostVariables() { if (isset($this->hostVariables)) { return $this; } $this->hostVariables = []; foreach ($this->object->customvar as $customvar) { $this->hostVariables[strtolower($customvar->name)] = json_decode($customvar->value); } return $this; } public function fetchServiceVariables() { if (isset($this->serviceVariables)) { return $this; } $this->serviceVariables = []; foreach ($this->object->customvar as $customvar) { $this->serviceVariables[strtolower($customvar->name)] = json_decode($customvar->value); } return $this; } public function fetchDowntimes() { $this->downtimes = []; return $this; } public function fetchEventhistory() { $this->eventhistory = []; return $this; } public function fetchHostgroups() { if ($this->type === self::TYPE_HOST) { $hostname = $this->object->name; $hostgroupQuery = clone $this->object->hostgroup; } else { $hostname = $this->object->host->name; $hostgroupQuery = clone $this->object->host->hostgroup; } $hostgroupQuery ->columns(['name', 'display_name']) ->filter(Filter::equal('host.name', $hostname)); /** @var Query $hostgroupQuery */ $this->hostgroups = []; foreach ($hostgroupQuery as $hostgroup) { $this->hostgroups[$hostgroup->name] = $hostgroup->display_name; } return $this; } public function fetchServicegroups() { if ($this->type === self::TYPE_HOST) { $hostname = $this->object->name; $query = Servicegroup::on($this->getDb()); } else { $hostname = $this->object->host->name; $query = (clone $this->object->servicegroup); } $query ->columns(['name', 'display_name']) ->filter(Filter::equal('host.name', $hostname)); if ($this->type === self::TYPE_SERVICE) { $query->filter(Filter::equal('service.name', $this->object->name)); } $this->servicegroups = []; foreach ($query as $serviceGroup) { $this->servicegroups[$serviceGroup->name] = $serviceGroup->display_name; } return $this; } public function fetchStats() { $query = ServicestateSummary::on($this->getDb()); if ($this->type === self::TYPE_HOST) { $query->filter(Filter::equal('host.name', $this->object->name)); } else { $query->filter(Filter::all( Filter::equal('host.name', $this->object->host->name), Filter::equal('service.name', $this->object->name) )); } $result = $query->first(); $this->stats = (object) [ 'services_total' => $result->services_total, 'services_ok' => $result->services_ok, 'services_critical' => $result->services_critical_handled + $result->services_critical_unhandled, 'services_critical_unhandled' => $result->services_critical_unhandled, 'services_critical_handled' => $result->services_critical_handled, 'services_warning' => $result->services_warning_handled + $result->services_warning_unhandled, 'services_warning_unhandled' => $result->services_warning_unhandled, 'services_warning_handled' => $result->services_warning_handled, 'services_unknown' => $result->services_unknown_handled + $result->services_unknown_unhandled, 'services_unknown_unhandled' => $result->services_unknown_unhandled, 'services_unknown_handled' => $result->services_unknown_handled, 'services_pending' => $result->services_pending ]; return $this; } public function __get($name) { if (property_exists($this, $name)) { if ($this->$name === null) { $fetchMethod = 'fetch' . ucfirst($name); $this->$fetchMethod(); } return $this->$name; } if (preg_match('/^_(host|service)_(.+)/i', $name, $matches)) { switch (strtolower($matches[1])) { case $this->type: $customvars = $this->fetchRawCustomvars()->rawCustomvars; break; case self::TYPE_HOST: $customvars = $this->fetchRawHostCustomvars()->rawHostCustomvars; break; case self::TYPE_SERVICE: throw new LogicException('Cannot fetch service custom variables for non-service objects'); } $variableName = strtolower($matches[2]); if (isset($customvars[$variableName])) { return $customvars[$variableName]; } return null; // Unknown custom variables MUST NOT throw an error } if (! array_key_exists($name, $this->legacyColumns) && ! $this->object->hasProperty($name)) { if (isset($this->customvars[$name])) { return $this->customvars[$name]; } if (substr($name, 0, strlen($this->prefix)) !== $this->prefix) { $name = $this->prefix . $name; } } if (array_key_exists($name, $this->legacyColumns)) { $opts = $this->legacyColumns[$name]; if ($opts === null) { return null; } $path = $opts['path']; $value = null; if (! empty($path)) { $value = $this->object; do { $col = array_shift($path); $value = $value->$col; } while (! empty($path) && $value !== null); } if (isset($opts['type'])) { $method = 'get' . ucfirst($opts['type']) . 'Type'; $value = $this->$method($value); } return $value; } return $this->object->$name; } public function __isset($name) { if (property_exists($this, $name)) { return isset($this->$name); } if (isset($this->legacyColumns[$name]) || isset($this->object->$name)) { return true; } return false; } /** * @throws NotImplementedError Don't use! */ protected function getDataView() { throw new NotImplementedError('getDataView() is not supported'); } /** * Get the bool type of the given value as an int * * @param bool|string $value * * @return ?int */ private function getBoolType($value) { if ($value === 'sticky') { return 2; } if (is_string($value)) { return null; } return (int) $value; } } icingadb-web-1.5.0/library/Icingadb/Compat/CompatService.php000066400000000000000000000162371527064444300237160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Compat; use Icinga\Module\Monitoring\Object\Service; class CompatService extends Service { use CompatObject; private $legacyColumns = [ 'instance_name' => null, 'host_attempt' => null, 'host_icon_image' => ['path' => ['host', 'icon_image', 'icon_image']], 'host_icon_image_alt' => ['path' => ['host', 'icon_image_alt']], 'host_acknowledged' => [ 'path' => ['host', 'state', 'is_acknowledged'], 'type' => 'bool' ], 'host_active_checks_enabled' => [ 'path' => ['host', 'active_checks_enabled'], 'type' => 'bool' ], 'host_address' => ['path' => ['host', 'address']], 'host_address6' => ['path' => ['host', 'address6']], 'host_alias' => ['path' => ['host', 'display_name']], 'host_display_name' => ['path' => ['host', 'display_name']], 'host_handled' => [ 'path' => ['host', 'state', 'is_handled'], 'type' => 'bool' ], 'host_in_downtime' => [ 'path' => ['host', 'state', 'in_downtime'], 'type' => 'bool' ], 'host_is_flapping' => [ 'path' => ['host', 'state', 'is_flapping'], 'type' => 'bool' ], 'host_last_state_change' => ['path' => ['host', 'state', 'last_state_change']], 'host_name' => ['path' => ['host', 'name']], 'host_notifications_enabled' => [ 'path' => ['host', 'notifications_enabled'], 'type' => 'bool' ], 'host_passive_checks_enabled' => [ 'path' => ['host', 'passive_checks_enabled'], 'type' => 'bool' ], 'host_state' => ['path' => ['host', 'state', 'soft_state']], 'host_state_type' => ['path' => ['host', 'state', 'state_type']], 'service_icon_image' => ['path' => ['icon_image', 'icon_image']], 'service_icon_image_alt' => ['path' => ['icon_image_alt']], 'service_acknowledged' => [ 'path' => ['state', 'is_acknowledged'], 'type' => 'bool' ], 'service_acknowledgement_type' => [ 'path' => ['state', 'is_acknowledged'], 'type' => 'bool' ], 'service_action_url' => ['path' => ['action_url', 'action_url']], 'action_url' => ['path' => ['action_url', 'action_url']], 'service_active_checks_enabled' => [ 'path' => ['active_checks_enabled'], 'type' => 'bool' ], 'service_active_checks_enabled_changed' => null, 'service_attempt' => null, 'service_check_command' => ['path' => ['checkcommand_name']], 'service_check_execution_time' => ['path' => ['state', 'execution_time']], 'service_check_interval' => ['path' => ['check_interval']], 'service_check_latency' => ['path' => ['state', 'latency']], 'service_check_source' => ['path' => ['state', 'check_source']], 'service_check_timeperiod' => ['path' => ['check_timeperiod_name']], 'service_current_notification_number' => null, 'service_description' => ['path' => ['name']], 'service_display_name' => ['path' => ['display_name']], 'service_event_handler_enabled' => [ 'path' => ['event_handler_enabled'], 'type' => 'bool' ], 'service_event_handler_enabled_changed' => null, 'service_flap_detection_enabled' => [ 'path' => ['flapping_enabled'], 'type' => 'bool' ], 'service_flap_detection_enabled_changed' => null, 'service_handled' => [ 'path' => ['state', 'is_handled'], 'type' => 'bool' ], 'service_in_downtime' => [ 'path' => ['state', 'in_downtime'], 'type' => 'bool' ], 'service_is_flapping' => [ 'path' => ['state', 'is_flapping'], 'type' => 'bool' ], 'service_is_reachable' => [ 'path' => ['state', 'is_reachable'], 'type' => 'bool' ], 'service_last_check' => ['path' => ['state', 'last_update']], 'service_last_notification' => null, 'service_last_state_change' => ['path' => ['state', 'last_state_change']], 'service_long_output' => ['path' => ['state', 'long_output']], 'service_next_check' => ['path' => ['state', 'next_check']], 'service_next_update' => ['path' => ['state', 'next_update']], 'service_notes' => ['path' => ['notes']], 'service_notes_url' => ['path' => ['notes_url', 'notes_url']], 'service_notifications_enabled' => [ 'path' => ['notifications_enabled'], 'type' => 'bool' ], 'service_notifications_enabled_changed' => null, 'service_obsessing' => null, 'service_obsessing_changed' => null, 'service_output' => ['path' => ['state', 'output']], 'service_passive_checks_enabled' => [ 'path' => ['passive_checks_enabled'], 'type' => 'bool' ], 'service_passive_checks_enabled_changed' => null, 'service_percent_state_change' => null, 'service_perfdata' => ['path' => ['state', 'performance_data']], 'service_process_perfdata' => [ 'path' => ['perfdata_enabled'], 'type' => 'bool' ], 'service_state' => ['path' => ['state', 'soft_state']], 'service_state_type' => ['path' => ['state', 'state_type']] ]; /** * Get this service's host * * @return CompatHost */ public function getHost(): CompatHost { if ($this->host === null) { $this->host = new CompatHost($this->object->host); } return $this->host; } protected function fetchHost() { $this->getHost(); } } icingadb-web-1.5.0/library/Icingadb/Compat/UrlMigrator.php000066400000000000000000001455231527064444300234220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Compat; use Icinga\Web\UrlParams; use InvalidArgumentException; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Url; class UrlMigrator { public const NO_YES = ['n', 'y']; public const USE_EXPR = 'use-expr'; public const SORT_ONLY = 'sort-only'; public const LOWER_EXPR = 'lower-expr'; public const DROP = 'drop'; public const SUPPORTED_PATHS = [ 'monitoring/list/hosts' => ['hosts', 'icingadb/hosts'], 'monitoring/hosts/show' => ['multipleHosts', 'icingadb/hosts/details'], 'monitoring/host/show' => ['host', 'icingadb/host'], 'monitoring/host/services' => ['host', 'icingadb/host/services'], 'monitoring/host/history' => ['host', 'icingadb/host/history'], 'monitoring/list/services' => ['services', 'icingadb/services'], 'monitoring/list/servicegrid' => ['servicegrid', 'icingadb/services/grid'], 'monitoring/services/show' => ['multipleServices', 'icingadb/services/details'], 'monitoring/service/show' => ['service', 'icingadb/service'], 'monitoring/service/history' => ['service', 'icingadb/service/history'], 'monitoring/list/hostgroups' => ['hostgroups', 'icingadb/hostgroups'], 'monitoring/list/servicegroups' => ['servicegroups', 'icingadb/servicegroups'], 'monitoring/list/contactgroups' => ['contactgroups', 'icingadb/contactgroups'], 'monitoring/list/contacts' => ['contacts', 'icingadb/contacts'], 'monitoring/list/comments' => ['comments', 'icingadb/comments'], 'monitoring/list/downtimes' => ['downtimes', 'icingadb/downtimes'], 'monitoring/list/eventhistory' => ['history', 'icingadb/history'], 'monitoring/list/notifications' => ['notificationHistory', 'icingadb/notifications'], 'monitoring/health/info' => [null, 'icingadb/health'], 'monitoring/health/stats' => [null, 'icingadb/health'], 'monitoring/tactical' => ['services', 'icingadb/tactical'] ]; public static function isSupportedUrl(Url $url): bool { $supportedPaths = self::SUPPORTED_PATHS; return isset($supportedPaths[ltrim($url->getPath(), '/')]); } public static function hasParamTransformer(string $name): bool { return method_exists(new self(), $name . 'Parameters'); } public static function hasQueryTransformer(string $name): bool { return method_exists(new self(), $name . 'Columns'); } public static function transformUrl(Url $url): Url { if (! self::isSupportedUrl($url)) { throw new InvalidArgumentException(sprintf('Url path "%s" is not supported', $url->getPath())); } list($transformer, $dbRoute) = self::SUPPORTED_PATHS[ltrim($url->getPath(), '/')]; $url = clone $url; $url->setPath($dbRoute); if (! $url->getParams()->isEmpty()) { [$params, $filter] = self::transformParams($url, $transformer); $url->setParams($params); if (! $filter->isEmpty()) { $filter = QueryString::parse((string) $filter); $filter = self::transformFilter($filter, $transformer); $url->setFilter($filter ?: null); } } return $url; } public static function transformParams(Url $url, ?string $transformerName = null): array { $transformer = new self(); $params = self::commonParameters(); $columns = self::commonColumns(); if ($transformerName !== null) { if (! self::hasQueryTransformer($transformerName)) { throw new InvalidArgumentException(sprintf('Transformer "%s" is not supported', $transformerName)); } if (self::hasParamTransformer($transformerName)) { $params = array_merge($params, $transformer->{$transformerName . 'Parameters'}()); } $columns = array_merge($columns, $transformer->{$transformerName . 'Columns'}()); } $columnRewriter = function ($column) use ($columns, $transformer) { $rewritten = $transformer->rewrite(Filter::equal($column, 'bogus'), $columns); if ($rewritten === false) { return false; } elseif ($rewritten instanceof Filter\Condition) { return $rewritten->getColumn(); } return $column; }; $urlParams = $url->onlyWith(array_keys($params))->getParams(); $urlFilter = $url->without(array_keys($params))->getParams(); $newParams = new UrlParams(); foreach ($urlParams->toArray(false) as $name => $value) { if (is_int($name)) { $name = $value; $value = true; } else { $value = rawurldecode($value); } $name = rawurldecode($name); if (! isset($params[$name]) || $params[$name] === self::USE_EXPR) { $newParams->add($name, $value); } elseif ($params[$name] === self::DROP) { // pass } elseif (is_callable($params[$name])) { $result = $params[$name]($value, $urlParams, $columnRewriter); if ($result === false) { continue; } elseif (is_array($result)) { [$name, $value] = $result; } elseif ($result !== null) { $value = $result; } $newParams->add($name, $value); } } return [$newParams, $urlFilter]; } /** * Transform the given legacy filter * * @param Filter\Rule $filter * @param ?string $queryTransformer * * @return Filter\Rule|false */ public static function transformFilter(Filter\Rule $filter, ?string $queryTransformer = null) { $transformer = new self(); $columns = $transformer::commonColumns(); if ($queryTransformer !== null) { if (! self::hasQueryTransformer($queryTransformer)) { throw new InvalidArgumentException(sprintf('Transformer "%s" is not supported', $queryTransformer)); } $columns = array_merge($columns, $transformer->{$queryTransformer . 'Columns'}()); } $rewritten = $transformer->rewrite($filter, $columns); return $rewritten === false ? false : ($rewritten instanceof Filter\Rule ? $rewritten : $filter); } /** * Transform given legacy wildcard filters * * @param $filter Filter\Rule * * @return Filter\Chain|Filter\Condition */ public static function transformLegacyWildcardFilter(Filter\Rule $filter) { if ($filter instanceof Filter\Chain) { foreach ($filter as $child) { $newChild = self::transformLegacyWildcardFilter($child); if ($newChild !== $child) { $filter->replace($child, $newChild); } } return $filter; } else { /** @var Filter\Condition $filter */ return self::transformWildcardFilter($filter); } } /** * Rewrite the given filter and legacy columns * * @param Filter\Rule $filter * @param array $legacyColumns * * @return ?mixed */ protected function rewrite(Filter\Rule $filter, array $legacyColumns) { $rewritten = null; if ($filter instanceof Filter\Condition) { $column = $filter->getColumn(); $modelPath = null; $exprRule = null; if (isset($legacyColumns[$column])) { if ($legacyColumns[$column] === self::DROP) { return false; } elseif (is_callable($legacyColumns[$column])) { return $legacyColumns[$column]($filter); } elseif (! is_array($legacyColumns[$column])) { return null; } foreach ($legacyColumns[$column] as $modelPath => $exprRule) { break; } $rewritten = $filter->setColumn($modelPath); switch (true) { case $exprRule === self::USE_EXPR: break; case $exprRule === self::LOWER_EXPR: $filter->setValue(strtolower($filter->getValue())); break; case is_array($exprRule): if (isset($exprRule[$filter->getValue()])) { $filter->setValue($exprRule[$filter->getValue()]); break; } return false; default: $filter->setValue($exprRule); } $rewritten = self::transformWildcardFilter($rewritten); } elseif (preg_match('/^_(host|service)_(.+)/i', $column, $groups)) { $rewritten = $filter->setColumn($groups[1] . '.vars.' . $groups[2]); $rewritten = self::transformWildcardFilter($rewritten); } } else { /** @var Filter\Chain $filter */ foreach ($filter as $child) { $retVal = $this->rewrite( $child instanceof Filter\Condition ? clone $child : $child, $legacyColumns ); if ($retVal === false) { $filter->remove($child); } elseif ($retVal instanceof Filter\Rule) { $filter->replace($child, $retVal); } } } return $rewritten; } private static function transformWildcardFilter(Filter\Condition $filter) { if (is_string($filter->getValue()) && strpos($filter->getValue(), '*') !== false) { if ($filter instanceof Filter\Equal) { return Filter::like($filter->getColumn(), $filter->getValue()); } elseif ($filter instanceof Filter\Unequal) { return Filter::unlike($filter->getColumn(), $filter->getValue()); } } return $filter; } protected static function commonParameters(): array { return [ 'sort' => function ($value, $params, $rewriter) { $value = $rewriter($value); if ($params->has('dir')) { return "{$value} {$params->get('dir')}"; } return $value; }, 'dir' => self::DROP, 'limit' => self::USE_EXPR, 'addFilter' => self::DROP, 'modifyFilter' => self::DROP, 'showCompact' => self::USE_EXPR, 'showFullscreen' => self::USE_EXPR, 'view' => function ($value) { if ($value === 'compact') { return ['showCompact', true]; } return $value; } ]; } protected static function commonColumns(): array { return [ // Filter columns 'host' => [ 'host.name_ci' => self::USE_EXPR ], 'host_display_name' => [ 'host.display_name' => self::USE_EXPR ], 'host_alias' => self::DROP, 'hostgroup' => [ 'hostgroup.name_ci' => self::USE_EXPR ], 'hostgroup_alias' => [ 'hostgroup.display_name' => self::USE_EXPR ], 'service' => [ 'service.name_ci' => self::USE_EXPR ], 'service_display_name' => [ 'service.display_name' => self::USE_EXPR ], 'servicegroup' => [ 'servicegroup.name_ci' => self::USE_EXPR ], 'servicegroup_alias' => [ 'servicegroup.display_name' => self::USE_EXPR ], // Restriction columns 'instance_name' => self::DROP, 'host_name' => [ 'host.name' => self::USE_EXPR ], 'hostgroup_name' => [ 'hostgroup.name' => self::USE_EXPR ], 'service_description' => [ 'service.name' => self::USE_EXPR ], 'servicegroup_name' => [ 'servicegroup.name' => self::USE_EXPR ] ]; } protected static function hostsParameters(): array { return [ 'addColumns' => function ($value, $params, $rewriter) { $legacyColumns = array_filter(array_map('trim', explode(',', $value))); $columns = [ 'host.state.soft_state', 'host.state.last_state_change', 'host.icon_image.icon_image', 'host.display_name', 'host.state.output', 'host.state.performance_data', 'host.state.is_problem' ]; foreach ($legacyColumns as $column) { $column = $rewriter($column); if ($column !== false) { $columns[] = $column; } } return ['columns', implode(',', $columns)]; } ]; } protected static function hostsColumns(): array { return [ // Query columns 'host_acknowledged' => [ 'host.state.is_acknowledged' => self::NO_YES ], 'host_acknowledgement_type' => function ($filter) { $value = $filter->getValue(); if ($value == '2') { return Filter::equal('host.state.is_sticky_acknowledgement', 'y'); } return isset(self::NO_YES[$value]) ? Filter::equal('host.state.is_acknowledged', self::NO_YES[$value]) : false; }, 'host_action_url' => [ 'host.action_url.action_url' => self::USE_EXPR ], 'host_active_checks_enabled' => [ 'host.active_checks_enabled' => self::NO_YES ], 'host_active_checks_enabled_changed' => self::DROP, 'host_address' => [ 'host.address' => self::USE_EXPR ], 'host_address6' => [ 'host.address6' => self::USE_EXPR ], 'host_alias' => self::DROP, 'host_check_command' => [ 'host.checkcommand_name' => self::USE_EXPR ], 'host_check_execution_time' => [ 'host.state.execution_time' => self::USE_EXPR ], 'host_check_latency' => [ 'host.state.latency' => self::USE_EXPR ], 'host_check_source' => [ 'host.state.check_source' => self::USE_EXPR ], 'host_check_timeperiod' => [ 'host.check_timeperiod_name' => self::USE_EXPR ], 'host_current_check_attempt' => [ 'host.state.check_attempt' => self::USE_EXPR ], 'host_current_notification_number' => self::DROP, 'host_display_name' => [ 'host.display_name' => self::USE_EXPR ], 'host_event_handler_enabled' => [ 'host.event_handler_enabled' => self::NO_YES ], 'host_event_handler_enabled_changed' => self::DROP, 'host_flap_detection_enabled' => [ 'host.flapping_enabled' => self::NO_YES ], 'host_flap_detection_enabled_changed' => self::DROP, 'host_handled' => [ 'host.state.is_handled' => self::NO_YES ], 'host_hard_state' => [ 'host.state.hard_state' => self::USE_EXPR ], 'host_in_downtime' => [ 'host.state.in_downtime' => self::NO_YES ], 'host_ipv4' => [ 'host.address_bin' => self::USE_EXPR ], 'host_is_flapping' => [ 'host.state.is_flapping' => self::NO_YES ], 'host_is_reachable' => [ 'host.state.is_reachable' => self::NO_YES ], 'host_last_check' => [ 'host.state.last_update' => self::USE_EXPR ], 'host_last_notification' => self::DROP, 'host_last_state_change' => [ 'host.state.last_state_change' => self::USE_EXPR ], 'host_last_state_change_ts' => [ 'host.state.last_state_change' => self::USE_EXPR ], 'host_long_output' => [ 'host.state.long_output' => self::USE_EXPR ], 'host_max_check_attempts' => [ 'host.max_check_attempts' => self::USE_EXPR ], 'host_modified_host_attributes' => self::DROP, 'host_name' => [ 'host.name' => self::USE_EXPR ], 'host_next_check' => [ 'host.state.next_check' => self::USE_EXPR ], 'host_notes_url' => [ 'host.notes_url.notes_url' => self::USE_EXPR ], 'host_notifications_enabled' => [ 'host.notifications_enabled' => self::NO_YES ], 'host_notifications_enabled_changed' => self::DROP, 'host_obsessing' => self::DROP, 'host_obsessing_changed' => self::DROP, 'host_output' => [ 'host.state.output' => self::USE_EXPR ], 'host_passive_checks_enabled' => [ 'host.passive_checks_enabled' => self::NO_YES ], 'host_passive_checks_enabled_changed' => self::DROP, 'host_percent_state_change' => self::DROP, 'host_perfdata' => [ 'host.state.performance_data' => self::USE_EXPR ], 'host_problem' => [ 'host.state.is_problem' => self::NO_YES ], 'host_severity' => [ 'host.state.severity' => self::USE_EXPR ], 'host_state' => [ 'host.state.soft_state' => self::USE_EXPR ], 'host_state_type' => [ 'host.state.state_type' => ['soft', 'hard'] ], 'host_unhandled' => [ 'host.state.is_handled' => array_reverse(self::NO_YES) ], // Filter columns 'host_contact' => [ 'host.user.name' => self::USE_EXPR ], 'host_contactgroup' => [ 'host.usergroup.name' => self::USE_EXPR ], // Query columns the dataview doesn't include, added here because it's possible to filter for them anyway 'host_check_interval' => self::DROP, 'host_icon_image' => self::DROP, 'host_icon_image_alt' => self::DROP, 'host_notes' => self::DROP, 'object_type' => self::DROP, 'object_id' => self::DROP, 'host_attempt' => self::DROP, 'host_check_type' => self::DROP, 'host_event_handler' => self::DROP, 'host_failure_prediction_enabled' => self::DROP, 'host_is_passive_checked' => self::DROP, 'host_last_hard_state' => self::DROP, 'host_last_hard_state_change' => self::DROP, 'host_last_time_down' => self::DROP, 'host_last_time_unreachable' => self::DROP, 'host_last_time_up' => self::DROP, 'host_next_notification' => self::DROP, 'host_next_update' => function ($filter) { /** @var Filter\Condition $filter */ if ($filter->getValue() !== 'now') { return false; } // Doesn't get dropped because there's a default dashlet using it.. // Though since this dashlet uses it to check for overdue hosts we'll // replace it as next_update is volatile (only in redis up2date) return Filter::equal('host.state.is_overdue', $filter instanceof Filter\LessThan ? 'y' : 'n'); }, 'host_no_more_notifications' => self::DROP, 'host_normal_check_interval' => self::DROP, 'host_problem_has_been_acknowledged' => self::DROP, 'host_process_performance_data' => self::DROP, 'host_retry_check_interval' => self::DROP, 'host_scheduled_downtime_depth' => self::DROP, 'host_status_update_time' => self::DROP, 'problems' => self::DROP ]; } protected static function multipleHostsColumns(): array { return array_merge( static::hostsColumns(), [ 'host' => [ 'host.name' => self::USE_EXPR ] ] ); } protected static function hostColumns(): array { return [ 'host' => [ 'name' => self::USE_EXPR ] ]; } protected static function servicesParameters(): array { return [ 'addColumns' => function ($value, $params, $rewriter) { $legacyColumns = array_filter(array_map('trim', explode(',', $value))); $columns = [ 'service.state.soft_state', 'service.state.last_state_change', 'service.icon_image.icon_image', 'service.display_name', 'service.host.display_name', 'service.state.output', 'service.state.performance_data', 'service.state.is_problem' ]; foreach ($legacyColumns as $column) { $column = $rewriter($column); if ($column !== false) { $columns[] = $column; } } return ['columns', implode(',', $columns)]; } ]; } protected static function servicesColumns(): array { return [ // Query columns 'host_acknowledged' => [ 'host.state.is_acknowledged' => self::NO_YES ], 'host_action_url' => [ 'host.action_url.action_url' => self::USE_EXPR ], 'host_active_checks_enabled' => [ 'host.active_checks_enabled' => self::NO_YES ], 'host_address' => [ 'host.address' => self::USE_EXPR ], 'host_address6' => [ 'host.address6' => self::USE_EXPR ], 'host_alias' => self::DROP, 'host_check_source' => [ 'host.state.check_source' => self::USE_EXPR ], 'host_display_name' => [ 'host.display_name' => self::USE_EXPR ], 'host_handled' => [ 'host.state.is_handled' => self::NO_YES ], 'host_hard_state' => [ 'host.state.hard_state' => self::USE_EXPR ], 'host_in_downtime' => [ 'host.state.in_downtime' => self::NO_YES ], 'host_ipv4' => [ 'host.address_bin' => self::USE_EXPR ], 'host_is_flapping' => [ 'host.state.is_flapping' => self::NO_YES ], 'host_last_check' => [ 'host.state.last_update' => self::USE_EXPR ], 'host_last_hard_state' => [ 'host.state.previous_hard_state' => self::USE_EXPR ], 'host_last_hard_state_change' => self::DROP, 'host_last_state_change' => [ 'host.state.last_state_change' => self::USE_EXPR ], 'host_last_time_down' => self::DROP, 'host_last_time_unreachable' => self::DROP, 'host_last_time_up' => self::DROP, 'host_long_output' => [ 'host.state.long_output' => self::USE_EXPR ], 'host_modified_host_attributes' => self::DROP, 'host_notes_url' => [ 'host.notes_url.notes_url' => self::USE_EXPR ], 'host_notifications_enabled' => [ 'host.notifications_enabled' => self::NO_YES ], 'host_output' => [ 'host.state.output' => self::USE_EXPR ], 'host_passive_checks_enabled' => [ 'host.passive_checks_enabled' => self::NO_YES ], 'host_perfdata' => [ 'host.state.performance_data' => self::USE_EXPR ], 'host_problem' => [ 'host.state.is_problem' => self::NO_YES ], 'host_severity' => [ 'host.state.severity' => self::USE_EXPR ], 'host_state' => [ 'host.state.soft_state' => self::USE_EXPR ], 'host_state_type' => [ 'host.state.state_type' => ['soft', 'hard'] ], 'service_acknowledged' => [ 'service.state.is_acknowledged' => self::NO_YES ], 'service_acknowledgement_type' => function ($filter) { $value = $filter->getValue(); if ($value == '2') { return Filter::equal('service.state.is_sticky_acknowledgement', 'y'); } return isset(self::NO_YES[$value]) ? Filter::equal('service.state.is_acknowledged', self::NO_YES[$value]) : false; }, 'service_action_url' => [ 'service.action_url.action_url' => self::USE_EXPR ], 'service_active_checks_enabled' => [ 'service.active_checks_enabled' => self::NO_YES ], 'service_active_checks_enabled_changed' => self::DROP, 'service_attempt' => [ 'service.state.check_attempt' => self::USE_EXPR ], 'service_check_command' => [ 'service.checkcommand_name' => self::USE_EXPR ], 'service_check_source' => [ 'service.state.check_source' => self::USE_EXPR ], 'service_check_timeperiod' => [ 'service.check_timeperiod_name' => self::USE_EXPR ], 'service_current_check_attempt' => [ 'service.state.check_attempt' => self::USE_EXPR ], 'service_current_notification_number' => self::DROP, 'service_display_name' => [ 'service.display_name' => self::USE_EXPR ], 'service_event_handler_enabled' => [ 'service.event_handler_enabled' => self::NO_YES ], 'service_event_handler_enabled_changed' => self::DROP, 'service_flap_detection_enabled' => [ 'service.flapping_enabled' => self::NO_YES ], 'service_flap_detection_enabled_changed' => self::DROP, 'service_handled' => [ 'service.state.is_handled' => self::NO_YES ], 'service_hard_state' => [ 'service.state.hard_state' => self::USE_EXPR ], 'service_host_name' => [ 'host.name' => self::USE_EXPR ], 'service_in_downtime' => [ 'service.state.in_downtime' => self::NO_YES ], 'service_is_flapping' => [ 'service.state.is_flapping' => self::NO_YES ], 'service_is_reachable' => [ 'service.state.is_reachable' => self::NO_YES ], 'service_last_check' => [ 'service.state.last_update' => self::USE_EXPR ], 'service_last_hard_state' => [ 'service.state.previous_hard_state' => self::USE_EXPR ], 'service_last_hard_state_change' => self::DROP, 'service_last_notification' => self::DROP, 'service_last_state_change' => [ 'service.state.last_state_change' => self::USE_EXPR ], 'service_last_state_change_ts' => [ 'service.state.last_state_change' => self::USE_EXPR ], 'service_last_time_critical' => self::DROP, 'service_last_time_ok' => self::DROP, 'service_last_time_unknown' => self::DROP, 'service_last_time_warning' => self::DROP, 'service_long_output' => [ 'service.state.long_output' => self::USE_EXPR ], 'service_max_check_attempts' => [ 'service.max_check_attempts' => self::USE_EXPR ], 'service_modified_service_attributes' => self::DROP, 'service_next_check' => [ 'service.state.next_check' => self::USE_EXPR ], 'service_notes' => [ 'service.notes' => self::USE_EXPR ], 'service_notes_url' => [ 'service.notes_url.notes_url' => self::USE_EXPR ], 'service_notifications_enabled' => [ 'service.notifications_enabled' => self::NO_YES ], 'service_notifications_enabled_changed' => self::DROP, 'service_obsessing' => self::DROP, 'service_obsessing_changed' => self::DROP, 'service_output' => [ 'service.state.output' => self::USE_EXPR ], 'service_passive_checks_enabled' => [ 'service.passive_checks_enabled' => self::USE_EXPR ], 'service_passive_checks_enabled_changed' => self::DROP, 'service_perfdata' => [ 'service.state.performance_data' => self::USE_EXPR ], 'service_problem' => [ 'service.state.is_problem' => self::NO_YES ], 'service_severity' => [ 'service.state.severity' => self::USE_EXPR ], 'service_state' => [ 'service.state.soft_state' => self::USE_EXPR ], 'service_state_type' => [ 'service.state.state_type' => ['soft', 'hard'] ], 'service_unhandled' => [ 'service.state.is_handled' => array_reverse(self::NO_YES) ], // Filter columns 'host_contact' => [ 'host.user.name' => self::USE_EXPR ], 'host_contactgroup' => [ 'host.usergroup.name' => self::USE_EXPR ], 'service_contact' => [ 'service.user.name' => self::USE_EXPR ], 'service_contactgroup' => [ 'service.usergroup.name' => self::USE_EXPR ], 'service_host' => [ 'host.name_ci' => self::USE_EXPR ], // Query columns the dataview doesn't include, added here because it's possible to filter for them anyway 'host_icon_image' => self::DROP, 'host_icon_image_alt' => self::DROP, 'host_notes' => self::DROP, 'host_acknowledgement_type' => self::DROP, 'host_active_checks_enabled_changed' => self::DROP, 'host_attempt' => self::DROP, 'host_check_command' => self::DROP, 'host_check_execution_time' => self::DROP, 'host_check_latency' => self::DROP, 'host_check_timeperiod_object_id' => self::DROP, 'host_check_type' => self::DROP, 'host_current_check_attempt' => self::DROP, 'host_current_notification_number' => self::DROP, 'host_event_handler' => self::DROP, 'host_event_handler_enabled' => self::DROP, 'host_event_handler_enabled_changed' => self::DROP, 'host_failure_prediction_enabled' => self::DROP, 'host_flap_detection_enabled' => self::DROP, 'host_flap_detection_enabled_changed' => self::DROP, 'host_is_reachable' => self::DROP, 'host_last_notification' => self::DROP, 'host_max_check_attempts' => self::DROP, 'host_next_check' => self::DROP, 'host_next_notification' => self::DROP, 'host_no_more_notifications' => self::DROP, 'host_normal_check_interval' => self::DROP, 'host_notifications_enabled_changed' => self::DROP, 'host_obsessing' => self::DROP, 'host_obsessing_changed' => self::DROP, 'host_passive_checks_enabled_changed' => self::DROP, 'host_percent_state_change' => self::DROP, 'host_problem_has_been_acknowledged' => self::DROP, 'host_process_performance_data' => self::DROP, 'host_retry_check_interval' => self::DROP, 'host_scheduled_downtime_depth' => self::DROP, 'host_status_update_time' => self::DROP, 'host_unhandled' => self::DROP, 'object_type' => self::DROP, 'service_check_interval' => self::DROP, 'service_icon_image' => self::DROP, 'service_icon_image_alt' => self::DROP, 'service_check_execution_time' => self::DROP, 'service_check_latency' => self::DROP, 'service_check_timeperiod_object_id' => self::DROP, 'service_check_type' => self::DROP, 'service_event_handler' => self::DROP, 'service_failure_prediction_enabled' => self::DROP, 'service_is_passive_checked' => self::DROP, 'service_next_notification' => self::DROP, 'service_next_update' => function ($filter) { /** @var Filter\Condition $filter */ if ($filter->getValue() !== 'now') { return false; } // Doesn't get dropped because there's a default dashlet using it.. // Though since this dashlet uses it to check for overdue services we'll // replace it as next_update is volatile (only in redis up2date) return Filter::equal('service.state.is_overdue', $filter instanceof Filter\LessThan ? 'y' : 'n'); }, 'service_no_more_notifications' => self::DROP, 'service_normal_check_interval' => self::DROP, 'service_percent_state_change' => self::DROP, 'service_problem_has_been_acknowledged' => self::DROP, 'service_process_performance_data' => self::DROP, 'service_retry_check_interval' => self::DROP, 'service_scheduled_downtime_depth' => self::DROP, 'service_status_update_time' => self::DROP, 'problems' => self::DROP, ]; } protected static function servicegridColumns(): array { return array_merge( static::servicesColumns(), [ 'problems' => [ 'problems' => self::USE_EXPR ] ] ); } protected static function multipleServicesColumns(): array { return array_merge( static::servicesColumns(), [ 'host' => [ 'host.name' => self::USE_EXPR ], 'service' => [ 'service.name' => self::USE_EXPR ] ] ); } protected static function serviceColumns(): array { return [ 'host' => [ 'host.name' => self::USE_EXPR ], 'service' => [ 'name' => self::USE_EXPR ] ]; } protected static function hostgroupsColumns(): array { return [ // Query columns 'hostgroup_alias' => [ 'hostgroup.display_name' => self::USE_EXPR ], 'hosts_severity' => self::SORT_ONLY, 'hosts_total' => self::SORT_ONLY, 'services_total' => self::SORT_ONLY, // Filter columns 'host_contact' => [ 'host.user.name' => self::USE_EXPR ], 'host_contactgroup' => [ 'host.usergroup.name' => self::USE_EXPR ] ]; } protected static function servicegroupsColumns(): array { return [ // Query columns 'services_severity' => self::SORT_ONLY, 'services_total' => self::SORT_ONLY, 'servicegroup_alias' => [ 'servicegroup.display_name' => self::USE_EXPR ], // Filter columns 'host_contact' => [ 'host.user.name' => self::USE_EXPR ], 'host_contactgroup' => [ 'host.usergroup.name' => self::USE_EXPR ], 'service_contact' => [ 'service.user.name' => self::USE_EXPR ], 'service_contactgroup' => [ 'service.usergroup.name' => self::USE_EXPR ] ]; } protected static function contactgroupsColumns(): array { return [ // Query columns 'contactgroup_name' => [ 'usergroup.name' => self::USE_EXPR ], 'contactgroup_alias' => [ 'usergroup.display_name' => self::USE_EXPR ], 'contact_count' => self::DROP, // Filter columns 'contactgroup' => [ 'usergroup.name_ci' => self::USE_EXPR ] ]; } protected static function contactsColumns(): array { $receivesStateNotifications = function ($state, $type = null) { return function ($filter) use ($state, $type) { /** @var Filter\Condition $filter */ $negate = $filter instanceof Filter\Unequal || $filter instanceof Filter\Unlike; switch ($filter->getValue()) { case '0': $filter = Filter::any( Filter::equal('user.notifications_enabled', 'n'), Filter::unequal('user.states', $state) ); if ($type !== null) { $filter->add(Filter::unequal('user.types', $type)); } break; case '1': $filter = Filter::all( Filter::equal('user.notifications_enabled', 'y'), Filter::equal('user.states', $state) ); if ($type !== null) { $filter->add(Filter::equal('user.types', $type)); } break; default: return null; } if ($negate) { $filter = Filter::none($filter); } return $filter; }; }; return [ // Query columns 'contact_object_id' => self::DROP, 'contact_id' => [ 'user.id' => self::USE_EXPR ], 'contact_name' => [ 'user.name' => self::USE_EXPR ], 'contact_alias' => [ 'user.display_name' => self::USE_EXPR ], 'contact_email' => [ 'user.email' => self::USE_EXPR ], 'contact_pager' => [ 'user.pager' => self::USE_EXPR ], 'contact_has_host_notfications' => $receivesStateNotifications(['up', 'down']), 'contact_has_service_notfications' => $receivesStateNotifications(['ok', 'warning', 'critical', 'unknown']), 'contact_can_submit_commands' => self::DROP, 'contact_notify_service_recovery' => $receivesStateNotifications( ['ok', 'warning', 'critical', 'unknown'], 'recovery' ), 'contact_notify_service_warning' => $receivesStateNotifications('warning'), 'contact_notify_service_critical' => $receivesStateNotifications('critical'), 'contact_notify_service_unknown' => $receivesStateNotifications('unknown'), 'contact_notify_service_flapping' => $receivesStateNotifications( ['ok', 'warning', 'critical', 'unknown'], ['flapping_start', 'flapping_end'] ), 'contact_notify_service_downtime' => $receivesStateNotifications( ['ok', 'warning', 'critical', 'unknown'], ['downtime_start', 'downtime_end', 'downtime_removed'] ), 'contact_notify_host_recovery' => $receivesStateNotifications(['up', 'down'], 'recovery'), 'contact_notify_host_down' => $receivesStateNotifications('down'), 'contact_notify_host_unreachable' => self::DROP, 'contact_notify_host_flapping' => $receivesStateNotifications( ['up', 'down'], ['flapping_start', 'flapping_end'] ), 'contact_notify_host_downtime' => $receivesStateNotifications( ['up', 'down'], ['downtime_start', 'downtime_end', 'downtime_removed'] ), 'contact_notify_host_timeperiod' => function ($filter) { /** @var Filter\Condition $filter */ $filter->setColumn('user.timeperiod.name_ci'); return Filter::all( $filter, Filter::equal('user.states', ['up', 'down']) ); }, 'contact_notify_service_timeperiod' => function ($filter) { /** @var Filter\Condition $filter */ $filter->setColumn('user.timeperiod.name_ci'); return Filter::all( $filter, Filter::equal('user.states', ['ok', 'warning', 'critical', 'unknown']) ); }, // Filter columns 'contact' => [ 'user.name_ci' => self::USE_EXPR ], 'contactgroup' => [ 'usergroup.name_ci' => self::USE_EXPR ], 'contactgroup_name' => [ 'usergroup.name' => self::USE_EXPR ], 'contactgroup_alias' => [ 'usergroup.display_name' => self::USE_EXPR ] ]; } protected static function commentsColumns(): array { return [ // Query columns 'comment_author_name' => [ 'comment.author' => self::USE_EXPR ], 'comment_data' => [ 'comment.text' => self::USE_EXPR ], 'comment_expiration' => [ 'comment.expire_time' => self::USE_EXPR ], 'comment_internal_id' => self::DROP, 'comment_is_persistent' => [ 'comment.is_persistent' => self::NO_YES ], 'comment_name' => [ 'comment.name' => self::USE_EXPR ], 'comment_timestamp' => [ 'comment.entry_time' => self::USE_EXPR ], 'comment_type' => [ 'comment.entry_type' => self::LOWER_EXPR ], 'host_display_name' => [ 'host.display_name' => self::USE_EXPR ], 'object_type' => [ 'comment.object_type' => self::LOWER_EXPR ], 'service_display_name' => [ 'service.display_name' => self::USE_EXPR ], 'service_host_name' => [ 'host.name' => self::USE_EXPR ], // Filter columns 'comment_author' => [ 'comment.author' => self::USE_EXPR ] ]; } protected static function downtimesColumns(): array { return [ // Query columns 'downtime_author_name' => [ 'downtime.author' => self::USE_EXPR ], 'downtime_comment' => [ 'downtime.comment' => self::USE_EXPR ], 'downtime_duration' => [ 'downtime.flexible_duration' => self::USE_EXPR ], 'downtime_end' => [ 'downtime.end_time' => self::USE_EXPR ], 'downtime_entry_time' => [ 'downtime.entry_time' => self::USE_EXPR ], 'downtime_internal_id' => self::DROP, 'downtime_is_fixed' => [ 'downtime.is_flexible' => array_reverse(self::NO_YES) ], 'downtime_is_flexible' => [ 'downtime.is_flexible' => self::NO_YES ], 'downtime_is_in_effect' => [ 'downtime.is_in_effect' => self::NO_YES ], 'downtime_name' => [ 'downtime.name' => self::USE_EXPR ], 'downtime_scheduled_end' => [ 'downtime.scheduled_end_time' => self::USE_EXPR ], 'downtime_scheduled_start' => [ 'downtime.scheduled_start_time' => self::USE_EXPR ], 'downtime_start' => [ 'downtime.start_time' => self::USE_EXPR ], 'host_display_name' => [ 'host.display_name' => self::USE_EXPR ], 'host_state' => [ 'host.state.soft_state' => self::USE_EXPR ], 'object_type' => [ 'downtime.object_type' => self::LOWER_EXPR ], 'service_display_name' => [ 'service.display_name' => self::USE_EXPR ], 'service_host_name' => [ 'host.name' => self::USE_EXPR ], 'service_state' => [ 'service.state.soft_state' => self::USE_EXPR ], // Filter columns 'downtime_author' => [ 'downtime.author' => self::USE_EXPR ] ]; } protected static function historyColumns(): array { return [ // Query columns 'id' => self::DROP, 'object_type' => [ 'history.object_type' => self::LOWER_EXPR ], 'timestamp' => [ 'history.event_time' => self::USE_EXPR ], 'state' => [ 'history.state.soft_state' => self::USE_EXPR ], 'output' => [ 'history.state.output' => self::USE_EXPR ], 'type' => function ($filter) { /** @var Filter\Condition $filter */ $expr = strtolower($filter->getValue()); switch (true) { // NotificationhistoryQuery case substr($expr, 0, 13) === 'notification_': $filter->setColumn('history.notification.type'); $filter->setValue([ 'notification_ack' => 'acknowledgement', 'notification_flapping' => 'flapping_start', 'notification_flapping_end' => 'flapping_end', 'notification_dt_start' => 'downtime_start', 'notification_dt_end' => 'downtime_end', 'notification_custom' => 'custom', 'notification_state' => ['problem', 'recovery'] ][$expr]); return Filter::all($filter, Filter::equal('history.event_type', 'notification')); // StatehistoryQuery case in_array($expr, ['soft_state', 'hard_state'], true): $filter->setColumn('history.state.state_type'); $filter->setValue(substr($expr, 0, 4)); return Filter::all($filter, Filter::equal('history.event_type', 'state_change')); // DowntimestarthistoryQuery and DowntimeendhistoryQuery case in_array($expr, ['dt_start', 'dt_end'], true): $filter->setColumn('history.event_type'); $filter->setValue('downtime_' . substr($expr, 3)); return $filter; // CommenthistoryQuery case in_array($expr, ['comment', 'ack'], true): $filter->setColumn('history.comment.entry_type'); $filter->setValue($expr); return Filter::all($filter, Filter::equal('history.event_type', 'comment_add')); // CommentdeletionhistoryQuery case in_array($expr, ['comment_deleted', 'ack_deleted'], true): $filter->setColumn('history.comment.entry_type'); $filter->setValue($expr); return Filter::all($filter, Filter::equal('history.event_type', 'comment_remove')); // FlappingstarthistoryQuery and CommenthistoryQuery case in_array($expr, ['flapping', 'flapping_deleted'], true): $filter->setColumn('history.event_type'); return $filter->setValue($expr === 'flapping' ? 'flapping_start' : 'flapping_end'); } } ]; } protected static function notificationHistoryColumns(): array { return [ // Query columns 'notification_contact_name' => [ 'notification_history.user.name' => self::USE_EXPR ], 'notification_output' => [ 'notification_history.text' => self::USE_EXPR ], 'notification_reason' => [ 'notification_history.type' => [ 0 => ['problem', 'recovery'], 1 => 'acknowledgement', 2 => 'flapping_start', 3 => 'flapping_end', 5 => 'downtime_start', 6 => 'downtime_end', 7 => 'downtime_removed', 8 => 'custom' // ido schema doc says it's `99`, icinga2 though uses `8` ] ], 'notification_state' => [ 'notification_history.state' => self::USE_EXPR ], 'notification_timestamp' => [ 'notification_history.send_time' => self::USE_EXPR ], 'object_type' => [ 'notification_history.object_type' => self::LOWER_EXPR ], 'service_host_name' => [ 'host.name' => self::USE_EXPR ] ]; } } icingadb-web-1.5.0/library/Icingadb/Data/000077500000000000000000000000001527064444300200565ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Data/CsvResultSet.php000066400000000000000000000003721527064444300231770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use ipl\Orm\ResultSet; class CsvResultSet extends ResultSet { use CsvResultSetUtils; } icingadb-web-1.5.0/library/Icingadb/Data/CsvResultSetUtils.php000066400000000000000000000061751527064444300242270ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use DateTime; use DateTimeZone; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Orm\Model; use ipl\Orm\Query; trait CsvResultSetUtils { /** * @return array */ public function current(): array { return $this->extractKeysAndValues(parent::current()); } protected function formatValue(string $key, $value): ?string { if ( $value && ( $key === 'id' || substr($key, -3) === '_id' || substr($key, -3) === '.id' || substr($key, -9) === '_checksum' || substr($key, -4) === '_bin' ) ) { $value = bin2hex($value); } if (is_bool($value)) { return $value ? 'true' : 'false'; } elseif (is_string($value)) { return '"' . str_replace('"', '""', $value) . '"'; } elseif (is_array($value)) { return '"' . implode(',', $value) . '"'; } elseif ($value instanceof DateTime) { return $value->setTimezone(new DateTimeZone('UTC')) ->format('Y-m-d\TH:i:s.vP'); } else { return $value; } } protected function extractKeysAndValues(Model $model, string $path = ''): array { $keysAndValues = []; foreach ($model as $key => $value) { $keyPath = ($path ? $path . '.' : '') . $key; if ($value instanceof Model) { $keysAndValues += $this->extractKeysAndValues($value, $keyPath); } else { $keysAndValues[$keyPath] = $this->formatValue($key, $value); } } return $keysAndValues; } public static function stream(Query $query): void { $model = $query->getModel(); if ($model instanceof Host || $model instanceof Service || $model instanceof DependencyNode) { $query->setResultSetClass(VolatileCsvResults::class); } else { $query->setResultSetClass(__CLASS__); } if ($query->hasLimit()) { // Custom limits should still apply $query->peekAhead(false); $offset = $query->getOffset(); } else { $query->limit(1000); $query->peekAhead(); $offset = 0; } $headerPrinted = false; do { $query->offset($offset); $result = $query->execute()->disableCache(); foreach ($result as $keysAndValues) { if (! $headerPrinted) { echo implode(',', array_keys($keysAndValues)); $headerPrinted = true; } echo "\r\n"; echo implode(',', array_values($keysAndValues)); JsonResultSet::giveMeMoreTime(); } $offset += 1000; } while ($result->hasMore()); exit; } } icingadb-web-1.5.0/library/Icingadb/Data/DependencyNodes.php000066400000000000000000000037431527064444300236450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use ArrayIterator; use Countable; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use ipl\Stdlib\Filter; use IteratorAggregate; /** * This class is used for {@see MultiselectQuickActions} so it can support objects of type Host * and Service at the same time. * * It fulfils the return type of {@see CommandActions::fetchCommandTargets()} by providing the * method getFilter() and implementing countable and iterable. * * @internal It must only be used in icingadb-web */ class DependencyNodes implements IteratorAggregate, Countable { use Database; use Auth; protected $nodes; /** @var Filter\Rule */ protected $filter; public function __construct(Filter\Rule $filter) { $this->filter = $filter; } public function getIterator(): ArrayIterator { if ($this->nodes === null) { $membersQuery = DependencyNode::on($this->getDb()) ->with([ 'host', 'host.state', 'service', 'service.state', 'service.host' ]) ->filter($this->filter); $this->applyRestrictions($membersQuery); $nodes = []; foreach ($membersQuery as $node) { $nodes[] = $node->service_id !== null ? $node->service : $node->host; } $this->nodes = new ArrayIterator($nodes); } return $this->nodes; } public function getFilter(): Filter\Rule { return $this->filter; } public function count(): int { return $this->getIterator()->count(); } public function getModel() { return new Host(); } } icingadb-web-1.5.0/library/Icingadb/Data/JsonResultSet.php000066400000000000000000000003741527064444300233570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use ipl\Orm\ResultSet; class JsonResultSet extends ResultSet { use JsonResultSetUtils; } icingadb-web-1.5.0/library/Icingadb/Data/JsonResultSetUtils.php000066400000000000000000000100371527064444300243750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use DateTime; use DateTimeZone; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Util\Json; use ipl\Orm\Model; use ipl\Orm\Query; trait JsonResultSetUtils { /** * @return array */ public function current(): array { return $this->createObject(parent::current()); } protected function formatValue(string $key, $value) { if ( $value && ( $key === 'id' || substr($key, -3) === '_id' || substr($key, -3) === '.id' || substr($key, -9) === '_checksum' || substr($key, -4) === '_bin' ) ) { $value = bin2hex($value); } if ($value instanceof DateTime) { return $value->setTimezone(new DateTimeZone('UTC')) ->format('Y-m-d\TH:i:s.vP'); } return $value; } protected function createObject(Model $model): array { $keysAndValues = []; foreach ($model as $key => $value) { if ($value instanceof Model) { $object = $this->createObject($value); // If there is no value in the model or it's descendents, // it was not a part of the query, so no JSON object will be created for this model. if (! empty($object)) { $keysAndValues[$key] = $object; } } else { $keysAndValues[$key] = $this->formatValue($key, $value); } } return $keysAndValues; } public static function stream(Query $query): void { $model = $query->getModel(); if ($model instanceof Host || $model instanceof Service || $model instanceof DependencyNode) { $query->setResultSetClass(VolatileJsonResults::class); } else { $query->setResultSetClass(__CLASS__); } if ($query->hasLimit()) { // Custom limits should still apply $query->peekAhead(false); $offset = $query->getOffset() ?? 0; } else { $query->limit(1000); $query->peekAhead(); $offset = 0; } $first = true; echo '['; do { $query->offset($offset); $result = $query->execute()->disableCache(); foreach ($result as $object) { if ($first) { $first = false; } else { echo ",\n"; } echo Json::sanitize($object); self::giveMeMoreTime(); } $offset += 1000; } while ($result->hasMore()); echo ']'; exit; } /** * Grant the caller more time to work with * * This resets the execution time before it runs out. The advantage of this, compared with no execution time * limit at all, is that only the caller can bypass the limit. Any other (faulty) code will still be stopped. * * @internal Don't use outside of {@see JsonResultSet::stream()} or {@see CsvResultSet::stream()} * * @return void */ public static function giveMeMoreTime() { $spent = getrusage(); if ($spent !== false) { $maxExecutionTime = ini_get('max_execution_time'); if (! $maxExecutionTime || ! is_numeric($maxExecutionTime)) { $maxExecutionTime = 30; } else { $maxExecutionTime = (int) $maxExecutionTime; } if ($maxExecutionTime > 0) { $timeRemaining = $maxExecutionTime - $spent['ru_utime.tv_sec'] % $maxExecutionTime; if ($timeRemaining <= 5) { set_time_limit($maxExecutionTime); } } } } } icingadb-web-1.5.0/library/Icingadb/Data/PivotTable.php000066400000000000000000000314351527064444300226460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use Icinga\Application\Icinga; use Icinga\Application\Web; use ipl\Orm\Query; use ipl\Stdlib\Contract\Paginatable; use ipl\Stdlib\Filter; class PivotTable { public const SORT_ASC = 'asc'; /** * The query to fetch as pivot table * * @var Query */ protected $baseQuery; /** * X-axis pivot column * * @var string */ protected $xAxisColumn; /** * Y-axis pivot column * * @var string */ protected $yAxisColumn; /** * The filter being applied on the query for the x-axis * * @var Filter\Rule */ protected $xAxisFilter; /** * The filter being applied on the query for the y-axis * * @var Filter\Rule */ protected $yAxisFilter; /** * The query to fetch the leading x-axis rows and their headers * * @var Query */ protected $xAxisQuery; /** * The query to fetch the leading y-axis rows and their headers * * @var Query */ protected $yAxisQuery; /** * X-axis header column * * @var string|null */ protected $xAxisHeader; /** * Y-axis header column * * @var string|null */ protected $yAxisHeader; /** * Order by column and direction * * @var array */ protected $order = []; /** * Grid columns as [Alias => Column name] pairs * * @var array */ protected $gridcols = []; /** * Create a new pivot table * * @param Query $query The query to fetch as pivot table * @param string $xAxisColumn X-axis pivot column * @param string $yAxisColumn Y-axis pivot column * @param array $gridcols Grid columns */ public function __construct(Query $query, string $xAxisColumn, string $yAxisColumn, array $gridcols) { foreach ($query->getOrderBy() as $sort) { $this->order[$sort[0]] = $sort[1]; } $this->baseQuery = $query->columns($gridcols)->resetOrderBy(); $this->xAxisColumn = $xAxisColumn; $this->yAxisColumn = $yAxisColumn; $this->gridcols = $gridcols; } /** * Set the filter to apply on the query for the x-axis * * @param ?Filter\Rule $filter * * @return $this */ public function setXAxisFilter(?Filter\Rule $filter = null): self { $this->xAxisFilter = $filter; return $this; } /** * Set the filter to apply on the query for the y-axis * * @param ?Filter\Rule $filter * * @return $this */ public function setYAxisFilter(?Filter\Rule $filter = null): self { $this->yAxisFilter = $filter; return $this; } /** * Get the x-axis header * * Defaults to {@link $xAxisColumn} in case no x-axis header has been set using {@link setXAxisHeader()} * * @return string */ public function getXAxisHeader(): string { if ($this->xAxisHeader === null && $this->xAxisColumn === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->xAxisHeader !== null ? $this->xAxisHeader : $this->xAxisColumn; } /** * Set the x-axis header * * @param string $xAxisHeader * * @return $this */ public function setXAxisHeader(string $xAxisHeader): self { $this->xAxisHeader = $xAxisHeader; return $this; } /** * Get the y-axis header * * Defaults to {@link $yAxisColumn} in case no x-axis header has been set using {@link setYAxisHeader()} * * @return string */ public function getYAxisHeader(): string { if ($this->yAxisHeader === null && $this->yAxisColumn === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->yAxisHeader !== null ? $this->yAxisHeader : $this->yAxisColumn; } /** * Set the y-axis header * * @param string $yAxisHeader * * @return $this */ public function setYAxisHeader(string $yAxisHeader): self { $this->yAxisHeader = $yAxisHeader; return $this; } /** * Return the value for the given request parameter * * @param string $axis The axis for which to return the parameter ('x' or 'y') * @param string $param The parameter name to return * @param ?int $default The default value to return * * @return int */ protected function getPaginationParameter(string $axis, string $param, ?int $default = null): int { /** @var Web $app */ $app = Icinga::app(); $value = $app->getRequest()->getParam($param, ''); if (strpos($value, ',') > 0) { $parts = explode(',', $value, 2); return intval($parts[$axis === 'x' ? 0 : 1]); } return $default !== null ? $default : 0; } /** * Query horizontal (x) axis * * @return Query */ protected function queryXAxis(): Query { if ($this->xAxisQuery === null) { $this->xAxisQuery = clone $this->baseQuery; $xAxisHeader = $this->getXAxisHeader(); $table = $this->xAxisQuery->getModel()->getTableName(); $xCol = explode('.', $this->gridcols[$this->xAxisColumn]); $columns = [ $this->xAxisColumn => $this->gridcols[$this->xAxisColumn], $xAxisHeader => $this->gridcols[$xAxisHeader] ]; // TODO: This shouldn't be required. Refactor this once ipl\Orm\Query has support for group by rules! if ($xCol[0] !== $table) { $groupCols = array_unique([ $this->xAxisColumn => $table . '_' . $this->gridcols[$this->xAxisColumn], $xAxisHeader => $table . '_' . $this->gridcols[$xAxisHeader] ]); } else { $groupCols = $columns; } $this->xAxisQuery->getSelectBase()->groupBy($groupCols); if (count($columns) !== 2) { $columns[] = $this->gridcols[$xAxisHeader]; } $this->xAxisQuery->columns($columns); if ($this->xAxisFilter !== null) { $this->xAxisQuery->filter($this->xAxisFilter); } $this->xAxisQuery->orderBy( $this->gridcols[$xAxisHeader], isset($this->order[$this->gridcols[$xAxisHeader]]) ? $this->order[$this->gridcols[$xAxisHeader]] : self::SORT_ASC ); } return $this->xAxisQuery; } /** * Query vertical (y) axis * * @return Query */ protected function queryYAxis(): Query { if ($this->yAxisQuery === null) { $this->yAxisQuery = clone $this->baseQuery; $yAxisHeader = $this->getYAxisHeader(); $table = $this->yAxisQuery->getModel()->getTableName(); $columns = [ $this->yAxisColumn => $this->gridcols[$this->yAxisColumn], $yAxisHeader => $this->gridcols[$yAxisHeader] ]; $yCol = explode('.', $this->gridcols[$this->yAxisColumn]); // TODO: This shouldn't be required. Refactor this once ipl\Orm\Query has support for group by rules! if ($yCol[0] !== $table) { $groupCols = array_unique([ $this->yAxisColumn => $table . '_' . $this->gridcols[$this->yAxisColumn], $yAxisHeader => $table . '_' . $this->gridcols[$yAxisHeader] ]); } else { $groupCols = $columns; } $this->yAxisQuery->getSelectBase()->groupBy($groupCols); if (count($columns) !== 2) { $columns[] = $this->gridcols[$yAxisHeader]; } $this->yAxisQuery->columns($columns); if ($this->yAxisFilter !== null) { $this->yAxisQuery->filter($this->yAxisFilter); } $this->yAxisQuery->orderBy( $this->gridcols[$yAxisHeader], isset($this->order[$this->gridcols[$yAxisHeader]]) ? $this->order[$this->gridcols[$yAxisHeader]] : self::SORT_ASC ); } return $this->yAxisQuery; } /** * Return a pagination adapter for the x-axis query * * $limit and $page are taken from the current request if not given. * * @param ?int $limit The maximum amount of entries to fetch * @param ?int $page The page to set as current one * * @return Paginatable */ public function paginateXAxis(?int $limit = null, ?int $page = null): Paginatable { if ($limit === null || $page === null) { if ($limit === null) { $limit = $this->getPaginationParameter('x', 'limit', 20); } if ($page === null) { $page = $this->getPaginationParameter('x', 'page', 1); } } $query = $this->queryXAxis(); if ($limit !== 0) { $query->limit($limit); $query->offset($page > 0 ? ($page - 1) * $limit : 0); } return $query; } /** * Return a Paginatable for the y-axis query * * $limit and $page are taken from the current request if not given. * * @param ?int $limit The maximum amount of entries to fetch * @param ?int $page The page to set as current one * * @return Paginatable */ public function paginateYAxis(?int $limit = null, ?int $page = null): Paginatable { if ($limit === null || $page === null) { if ($limit === null) { $limit = $this->getPaginationParameter('y', 'limit', 20); } if ($page === null) { $page = $this->getPaginationParameter('y', 'page', 1); } } $query = $this->queryYAxis(); if ($limit !== 0) { $query->limit($limit); $query->offset($page > 0 ? ($page - 1) * $limit : 0); } return $query; } /** * Return the pivot table as an array of pivot data and pivot header * * @return array */ public function toArray(): array { if ( ($this->xAxisFilter === null && $this->yAxisFilter === null) || ($this->xAxisFilter !== null && $this->yAxisFilter !== null) ) { $xAxis = $this->queryXAxis()->getDb()->fetchPairs($this->queryXAxis()->assembleSelect()); $xAxisKeys = array_keys($xAxis); $yAxis = $this->queryYAxis()->getDb()->fetchPairs($this->queryYAxis()->assembleSelect()); $yAxisKeys = array_keys($yAxis); } else { if ($this->xAxisFilter !== null) { $xAxis = $this->queryXAxis()->getDb()->fetchPairs($this->queryXAxis()->assembleSelect()); $xAxisKeys = array_keys($xAxis); $yQuery = $this->queryYAxis(); $yQuery->filter(Filter::equal($this->gridcols[$this->xAxisColumn], $xAxisKeys)); $yAxis = $this->queryYAxis()->getDb()->fetchPairs($this->queryYAxis()->assembleSelect()); $yAxisKeys = array_keys($yAxis); } else { // $this->yAxisFilter !== null $yAxis = $this->queryYAxis()->getDb()->fetchPairs($this->queryYAxis()->assembleSelect()); $yAxisKeys = array_keys($yAxis); $xQuery = $this->queryXAxis(); $xQuery->filter(Filter::equal($this->gridcols[$this->yAxisColumn], $yAxisKeys)); $xAxis = $this->queryXAxis()->getDb()->fetchPairs($this->queryXAxis()->assembleSelect()); $xAxisKeys = array_keys($yAxis); } } $pivotData = []; $pivotHeader = [ 'cols' => $xAxis, 'rows' => $yAxis ]; if (! empty($xAxis) && ! empty($yAxis)) { $this->baseQuery->filter(Filter::equal($this->gridcols[$this->xAxisColumn], $xAxisKeys)); $this->baseQuery->filter(Filter::equal($this->gridcols[$this->yAxisColumn], $yAxisKeys)); foreach ($yAxisKeys as $yAxisKey) { foreach ($xAxisKeys as $xAxisKey) { $pivotData[$yAxisKey][$xAxisKey] = null; } } foreach ($this->baseQuery as $row) { $pivotData[$row->{$this->yAxisColumn}][$row->{$this->xAxisColumn}] = $row; } } return [$pivotData, $pivotHeader]; } } icingadb-web-1.5.0/library/Icingadb/Data/QueryColumnsProvider.php000066400000000000000000000451341527064444300247570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use Generator; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use Icinga\Module\Icingadb\Model\CustomvarFlat; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Orm\Relation; use ipl\Orm\Relation\BelongsToMany; use ipl\Orm\Relation\HasOne; use ipl\Orm\Resolver; use ipl\Orm\UnionModel; use ipl\Sql\Expression; use ipl\Sql\Select; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Control\SearchBar\Suggestions; use ipl\Web\FormElement\SearchSuggestions; use IteratorAggregate; /** * Provide column and custom variable suggestions for a given query */ class QueryColumnsProvider implements IteratorAggregate { use Auth; use BaseFilter; use Database; use Translation; /** @var Query The query to collect columns from */ protected Query $query; /** @var string The search to suggest columns for */ protected string $searchTerm; /** @var ?array Fixed columns as column => label, if null columns are selected from $query */ protected ?array $fixedColumns = null; /** @var array Relations to suggest customvars from */ protected array $customVarSources = []; /** @var array Columns not to include in the result */ protected array $excludedColumns = []; /** @var bool Whether to include relation path in column labels */ protected bool $showRelationLabels = false; /** * Create a new QueryColumnsProvider * * @param Query $query * @param string $searchTerm */ public function __construct(Query $query, string $searchTerm = '*') { $this->query = $query; $this->searchTerm = $searchTerm; } /** * Set a fixed set of columns to suggest columns from * * @param array $columns Columns as keys and labels as values * * @return $this */ public function setFixedColumns(array $columns): static { $this->fixedColumns = $columns; return $this; } /** * Set the custom variable sources to use * * @param array $customVarSources * * @return $this */ public function setCustomVarSources(array $customVarSources): static { $this->customVarSources = $customVarSources; return $this; } /** * Set the search term to suggest columns for * * @param string $searchTerm * * @return $this */ public function setSearchTerm(string $searchTerm): static { $this->searchTerm = $searchTerm; return $this; } /** * Set columns to exclude from the suggestions * * @param array $columns * * @return $this */ public function setExcludedColumns(array $columns): static { $this->excludedColumns = $columns; return $this; } /** * Set whether to show relation labels * * @param bool $showRelationLabels * * @return $this */ public function setShowRelationLabels(bool $showRelationLabels = true): static { $this->showRelationLabels = $showRelationLabels; return $this; } public function getIterator(): Generator { $exactVarSearches = []; $parsedArrayVars = []; yield from $this->fetchExactCustomVars($exactVarSearches, $parsedArrayVars); yield from $this->fetchColumns(); yield from $this->fetchRemainingCustomVars($exactVarSearches, $parsedArrayVars); } /** * Fetch custom variables that exactly match the search term * * @param string[] $exactVarSearches Collects matched flatnames to exclude from remaining results * @param array $parsedArrayVars Already yielded array variable base names * * @return Generator */ protected function fetchExactCustomVars(array &$exactVarSearches, array &$parsedArrayVars): Generator { $exactSearchTerm = trim($this->searchTerm, ' *'); if ($exactSearchTerm === '') { return; } foreach ( $this->getDb()->select($this->queryCustomvarConfig( Filter::any( Filter::equal('flatname', $exactSearchTerm), Filter::like('flatname', $exactSearchTerm . '[*]') ) )) as $customVar ) { $search = $name = $customVar->flatname; $exactVarSearches[] = $search; if (preg_match('/\w+(?:\[(\d*)])+$/', $search, $matches)) { $name = substr($search, 0, -(strlen($matches[1]) + 2)); if (isset($parsedArrayVars[$name])) { continue; } $parsedArrayVars[$name] = true; $search = $name . '[*]'; } foreach ($this->customVarSources as $relation => $label) { if (isset($customVar->$relation)) { yield [ 'search' => $relation . '.vars.' . $search, 'label' => sprintf($label, $name), 'group' => $this->translate('Best Suggestions') ]; } } } } /** * Fetch model column suggestions matching the search term * * @return Generator */ protected function fetchColumns(): Generator { $columns = $this->fixedColumns ?? self::collectFilterColumns( $this->query->getModel(), $this->query->getResolver() ); foreach ($columns as $columnName => $columnMeta) { if ( ! in_array($columnName, $this->excludedColumns, true) && $this->matchSuggestion($columnName, $columnMeta, $this->searchTerm) ) { $result = [ 'search' => $columnName, 'label' => $columnMeta, 'group' => $this->translate('Columns') ]; if ($this->showRelationLabels && static::shouldShowRelationFor($columnName, $this->query->getModel())) { $result['details'] = $this->getLabelWithRelation($columnName, $columnMeta); } yield $result; } } } /** * Fetch custom variable suggestions that were not already yielded by {@see self::fetchExactCustomVars} * * @param string[] $exactVarSearches Flatnames to exclude * @param array $parsedArrayVars Already yielded array variables * * @return Generator */ protected function fetchRemainingCustomVars(array $exactVarSearches, array &$parsedArrayVars): Generator { if (! empty($exactVarSearches)) { $varFilter = Filter::all( Filter::like('flatname', $this->searchTerm), Filter::unequal('flatname', $exactVarSearches) ); } else { $varFilter = Filter::like('flatname', $this->searchTerm); } foreach ( $this->getDb()->select($this->queryCustomvarConfig($varFilter)) as $customVar ) { $search = $name = $customVar->flatname; if (preg_match('/\w+(?:\[(\d*)])+$/', $search, $matches)) { $name = substr($search, 0, -(strlen($matches[1]) + 2)); if (isset($parsedArrayVars[$name])) { continue; } $parsedArrayVars[$name] = true; $search = $name . '[*]'; } foreach ($this->customVarSources as $relation => $label) { if (isset($customVar->$relation)) { yield [ 'search' => $relation . '.vars.' . $search, 'label' => sprintf($label, $name), 'group' => $this->translate('Custom Variables') ]; } } } } /** * Collect all columns of this model and its relations that can be used for filtering * * @param Model $model * @param Resolver $resolver * * @return Generator */ protected static function collectFilterColumns(Model $model, Resolver $resolver): Generator { if ($model instanceof UnionModel) { $models = []; foreach ($model->getUnions() as $union) { /** @var Model $unionModel */ $unionModel = new $union[0](); $models[$unionModel->getTableName()] = $unionModel; self::collectRelations($resolver, $unionModel, $models, []); } } else { $models = [$model->getTableName() => $model]; self::collectRelations($resolver, $model, $models, []); } /** @var Model $targetModel */ foreach ($models as $path => $targetModel) { foreach ($resolver->getColumnDefinitions($targetModel) as $columnName => $definition) { yield $path . '.' . $columnName => $definition->getLabel(); } } foreach ($resolver->getBehaviors($model) as $behavior) { if ($behavior instanceof ReRoute) { foreach ($behavior->getRoutes() as $name => $route) { $relation = $resolver->resolveRelation( $resolver->qualifyPath($route, $model->getTableName()), $model ); foreach ($resolver->getColumnDefinitions($relation->getTarget()) as $columnName => $definition) { yield $name . '.' . $columnName => $definition->getLabel(); } } } } if ($model instanceof UnionModel) { $queries = $model->getUnions(); $baseModelClass = end($queries)[0]; $model = new $baseModelClass(); } $foreignMetaDataSources = []; if (! $model instanceof Host) { $foreignMetaDataSources[] = 'host.user'; $foreignMetaDataSources[] = 'host.usergroup'; } if (! $model instanceof Service) { $foreignMetaDataSources[] = 'service.user'; $foreignMetaDataSources[] = 'service.usergroup'; } foreach ($foreignMetaDataSources as $path) { $foreignColumnDefinitions = $resolver->getColumnDefinitions($resolver->resolveRelation( $resolver->qualifyPath($path, $model->getTableName()), $model )->getTarget()); foreach ($foreignColumnDefinitions as $columnName => $columnDefinition) { yield "$path.$columnName" => $columnDefinition->getLabel(); } } } /** * Collect all direct relations of the given model * * A direct relation is either a direct descendant of the model * or a descendant of such related in a to-one cardinality. * * @param Resolver $resolver * @param Model $subject * @param array $models * @param array $path */ protected static function collectRelations(Resolver $resolver, Model $subject, array &$models, array $path) { foreach ($resolver->getRelations($subject) as $name => $relation) { /** @var Relation $relation */ if ( empty($path) || ( ($name === 'state' && $path[count($path) - 1] !== 'last_comment') || $name === 'last_comment' || $name === 'notificationcommand' && $path[0] === 'notification' ) ) { $relationPath = [$name]; if ($relation instanceof HasOne && empty($path)) { array_unshift($relationPath, $subject->getTableName()); } $relationPath = array_merge($path, $relationPath); $models[join('.', $relationPath)] = $relation->getTarget(); self::collectRelations($resolver, $relation->getTarget(), $models, $relationPath); } } } /** * Create a query to fetch all available custom variables matching the given filter * * @param Filter\Rule $filter * * @return Select */ protected function queryCustomvarConfig(Filter\Rule $filter): Select { $customVars = CustomvarFlat::on($this->getDb()); $tableName = $customVars->getModel()->getTableName(); $resolver = $customVars->getResolver(); $excludedByRelation = []; foreach ($this->excludedColumns as $column) { foreach ($this->customVarSources as $relation => $_) { $prefix = $relation . '.vars.'; if (str_starts_with($column, $prefix)) { $excludedByRelation[$relation][] = substr($column, strlen($prefix)); } } } $scalarQueries = []; $aggregates = ['flatname']; foreach ($resolver->getRelations($customVars->getModel()) as $name => $relation) { if (isset($this->customVarSources[$name]) && $relation instanceof BelongsToMany) { $query = $customVars->createSubQuery( $relation->getTarget(), $resolver->qualifyPath($name, $tableName) ); $this->applyBaseFilter($query); $select = $query->assembleSelect(); if (isset($excludedByRelation[$name])) { $flatname = $resolver->qualifyColumn('flatname', $resolver->getAlias($customVars->getModel())); $select->where( "$flatname NOT IN (?)", ...$excludedByRelation[$name] ); } $name = $this->getDb()->getAdapter()->quoteIdentifier($name); $aggregates[$name] = new Expression("MAX($name)"); $scalarQueries[$name] = $select ->resetColumns()->columns(new Expression('1')) ->limit(1); } } $customVars->columns('flatname'); $this->applyRestrictions($customVars); $customVars->filter($filter); // applyRestrictions() does not hide protected vars, but since querying them is not possible anymore, // we have to. Otherwise, the user can choose a protected var and get an error. $protectedVarFilter = Filter::any(); foreach ($this->getAuth()->getRestrictions('icingadb/protect/variables') as $restriction) { $protectedVarFilter->add($this->parseDenylist($restriction, 'flatname')); } $customVars->filter($protectedVarFilter); $idColumn = $resolver->qualifyColumn('id', $resolver->getAlias($customVars->getModel())); $customVars = $customVars->assembleSelect(); $customVars->columns($scalarQueries); $customVars->groupBy($idColumn); $customVars->limit(Suggestions::DEFAULT_LIMIT); $outerQuery = (new Select()) ->columns($aggregates) ->from(['results' => $customVars]) ->groupBy('flatname') ->limit(Suggestions::DEFAULT_LIMIT); foreach ($scalarQueries as $name => $_) { $outerQuery->orHaving("MAX($name) = 1"); } return $outerQuery; } /** * Prepare to act as provider for the given SearchSuggestions * * @param SearchSuggestions $suggestions * * @return $this */ public function forSuggestions(SearchSuggestions $suggestions): static { $this->setSearchTerm($suggestions->getSearchTerm()); $this->setExcludedColumns($suggestions->getExcludeTerms()); $suggestions->setGroupingCallback(fn($x) => $x['group']); $this->showRelationLabels = true; return $this; } /** * Check whether the given column path and label match the search term * * Exotic columns (id, bin, checksum) are only matched if the user typed the exact suffix. * * @param string $path * @param string $label * @param string $searchTerm * * @return bool */ protected function matchSuggestion(string $path, string $label, string $searchTerm): bool { if (preg_match('/[_.](id|bin|checksum)$/', $path)) { // Only suggest exotic columns if the user knows about them $trimmedSearch = trim($searchTerm, ' *'); return substr($path, -strlen($trimmedSearch)) === $trimmedSearch; } return fnmatch($searchTerm, $label, FNM_CASEFOLD) || fnmatch($searchTerm, $path, FNM_CASEFOLD); } /** * Apply restrictions and the base filter to the given query * * @param Query $query */ protected function applyBaseFilter(Query $query): void { $this->applyRestrictions($query); if ($this->hasBaseFilter()) { $query->filter($this->getBaseFilter()); } } /** * Get the label for the column with its relation path * * @param string $column * @param string $label * * @return ValidHtml */ protected function getLabelWithRelation(string $column, string $label): ValidHtml { $relationPath = substr($column, 0, strrpos($column, '.')); $span = new HtmlElement( 'span', Attributes::create(['class' => 'relation-path']), Text::create($relationPath) ); return (new HtmlDocument()) ->addHtml(Text::create($label)) ->addHtml($span); } /** * Return whether the relation should be shown for the given column of the given model * * @param string $column * @param Model $model * * @return bool */ public static function shouldShowRelationFor(string $column, Model $model): bool { if (str_contains($column, '.vars.')) { return false; } $tableName = $model->getTableName(); $columnPath = explode('.', $column); switch (count($columnPath)) { case 3: if ($columnPath[1] !== 'state' || ! in_array($tableName, ['host', 'service'])) { return true; } // For host/service state relation columns apply the same rules case 2: return $columnPath[0] !== $tableName; default: return true; } } } icingadb-web-1.5.0/library/Icingadb/Data/QueryValuesProvider.php000066400000000000000000000106431527064444300245730ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use Generator; use Icinga\Module\Icingadb\Common\Auth; use ipl\I18n\Translation; use ipl\Orm\Exception\InvalidColumnException; use ipl\Orm\Exception\InvalidRelationException; use ipl\Orm\Query; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Control\SearchBar\SearchException; use IteratorAggregate; /** * Provide value suggestions for a given column and query */ class QueryValuesProvider implements IteratorAggregate { use Auth; use BaseFilter; use Translation; /** @var Query The query to collect values from */ protected Query $query; /** @var string The column to suggest values for */ protected string $column; /** @var string The search term to suggest values for */ protected string $searchTerm; /** @var Filter\Chain|Filter\Rule The search filter to apply */ protected Filter\Chain|Filter\Rule $searchFilter; /** * Create a new QueryValuesProvider * * @param Query $query The query to collect values from * @param string $column The column to suggest values for * @param string $searchTerm The search term to suggest values for * @param Filter\Chain $searchFilter The search filter to apply */ public function __construct(Query $query, string $column, string $searchTerm, Filter\Chain $searchFilter) { $this->query = $query; $this->column = $column; $this->searchTerm = $searchTerm; $this->searchFilter = $searchFilter; } public function getIterator(): Generator { $columnPath = $this->query->getResolver()->qualifyPath($this->column, $this->query->getModel()->getTableName()); [$targetPath, $columnName] = preg_split('/(?<=vars)\.|\.(?=[^.]+$)/', $columnPath, 2); $isCustomVar = false; if (str_ends_with($targetPath, '.vars')) { $isCustomVar = true; $targetPath = substr($targetPath, 0, -4) . 'customvar_flat'; } if ($isCustomVar) { $columnPath = $targetPath . '.flatvalue'; $this->query->filter(Filter::like($targetPath . '.flatname', $columnName)); } $inputFilter = Filter::like($columnPath, $this->searchTerm); $this->query->columns(['value' => $columnPath]); $this->query->orderBy($columnPath); if ($this->searchFilter instanceof Filter\None) { $this->query->filter($inputFilter); } elseif ($this->searchFilter instanceof Filter\All) { $this->searchFilter->add($inputFilter); // There may be columns part of $searchFilter which target the base table. These must be // optimized, otherwise they influence what we'll suggest to the user. (i.e. less) // The $inputFilter on the other hand must not be optimized, which it wouldn't, but since // we force optimization on its parent chain, we have to negate that. $this->searchFilter->metaData()->set('forceOptimization', true); $inputFilter->metaData()->set('forceOptimization', false); } else { $this->searchFilter = $inputFilter; } $this->query->filter($this->searchFilter); if (str_contains($targetPath, '.')) { try { // applyRestrictions() only restricts relations that are already known, but ipl-orm resolves the // relation of the suggested column once the query is assembled, so it must be registered explicitly // beforehand for restrictions to be applied. $this->query->with($targetPath); } catch (InvalidRelationException $e) { throw new SearchException( sprintf($this->translate('"%s" is not a valid relation'), $e->getRelation()) ); } } $this->applyRestrictions($this->query); if ($this->hasBaseFilter()) { $this->query->filter($this->getBaseFilter()); } $this->query->getSelectBase()->distinct(); try { foreach ($this->query as $object) { yield ['search' => $object->value, 'label' => $object->value]; } } catch (InvalidColumnException $e) { throw new SearchException(sprintf($this->translate('"%s" is not a valid column'), $e->getColumn())); } } } icingadb-web-1.5.0/library/Icingadb/Data/VolatileCsvResults.php000066400000000000000000000006171527064444300244100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use Icinga\Module\Icingadb\Redis\VolatileStateResults; /** * @internal This class is supposed to be used by {@see CsvResultSet::stream()} only. */ final class VolatileCsvResults extends VolatileStateResults { use CsvResultSetUtils; } icingadb-web-1.5.0/library/Icingadb/Data/VolatileJsonResults.php000066400000000000000000000006221527064444300245620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Data; use Icinga\Module\Icingadb\Redis\VolatileStateResults; /** * @internal This class is supposed to be used by {@see JsonResultSet::stream()} only. */ final class VolatileJsonResults extends VolatileStateResults { use JsonResultSetUtils; } icingadb-web-1.5.0/library/Icingadb/Hook/000077500000000000000000000000001527064444300201055ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Hook/ActionsHook/000077500000000000000000000000001527064444300223265ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Hook/ActionsHook/ObjectActionsHook.php000066400000000000000000000057471527064444300264240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\ActionsHook; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Exception\IcingaException; use Icinga\Module\Icingadb\Hook\Common\HookUtils; use Icinga\Module\Icingadb\Hook\HostActionsHook; use Icinga\Module\Icingadb\Hook\ServiceActionsHook; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use InvalidArgumentException; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\Widget\Link; use Throwable; use function ipl\Stdlib\get_php_type; abstract class ObjectActionsHook { use HookUtils; /** * Load all actions for the given object * * @param Host|Service $object * * @return HtmlElement * * @throws InvalidArgumentException If the given model is not supported */ final public static function loadActions(Model $object): HtmlElement { switch (true) { case $object instanceof Host: $hookName = 'Icingadb\\HostActions'; break; case $object instanceof Service: $hookName = 'Icingadb\\ServiceActions'; break; default: throw new InvalidArgumentException( sprintf('%s is not a supported object type', get_php_type($object)) ); } $list = new HtmlElement('ul', Attributes::create(['class' => 'object-detail-actions'])); /** @var HostActionsHook|ServiceActionsHook $hook */ foreach (Hook::all($hookName) as $hook) { try { foreach ($hook->getActionsForObject($object) as $link) { if (! $link instanceof Link) { continue; } if ($link->getBaseTarget() === null && ! $link->hasAttribute('target')) { $link->setBaseTarget('_next'); } // It may be ValidHtml, but modules shouldn't be able to break our views. // That's why it needs to be rendered instantly, as any error will then // be caught here. $renderedLink = (string) $link; $moduleName = $hook->getModule()->getName(); $list->addHtml(new HtmlElement('li', Attributes::create([ 'class' => 'icinga-module module-' . $moduleName, 'data-icinga-module' => $moduleName ]), HtmlString::create($renderedLink))); } } catch (Throwable $e) { Logger::error("Failed to load object actions: %s\n%s", $e, $e->getTraceAsString()); $list->addHtml(new HtmlElement('li', null, Text::create(IcingaException::describe($e)))); } } return $list; } } icingadb-web-1.5.0/library/Icingadb/Hook/Common/000077500000000000000000000000001527064444300213355ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Hook/Common/HookUtils.php000066400000000000000000000015371527064444300237750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\Common; use Icinga\Application\ClassLoader; use Icinga\Application\Icinga; use Icinga\Application\Modules\Module; trait HookUtils { final public function __construct() { $this->init(); } /** * Initialize this hook * * Override this in your concrete implementation for any initialization at construction time. */ protected function init() { } /** * Get the module this hook belongs to * * @return Module */ final public function getModule(): Module { $moduleName = ClassLoader::extractModuleName(static::class); return Icinga::app()->getModuleManager() ->getModule($moduleName); } } icingadb-web-1.5.0/library/Icingadb/Hook/Common/TotalSlaReportUtils.php000066400000000000000000000031251527064444300260070ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\Common; use Icinga\Module\Icingadb\ProvidedHook\Reporting\HostSlaReport; use Icinga\Module\Reporting\Timerange; use ipl\Html\Html; use ipl\Web\Widget\EmptyState; use function ipl\I18n\t; trait TotalSlaReportUtils { public function getHtml(Timerange $timerange, ?array $config = null) { $data = $this->getData($timerange, $config); $count = $data->count(); if (! $count) { return new EmptyState(t('No data found.')); } $threshold = (float) ($config['threshold'] ?? static::DEFAULT_THRESHOLD); $tableRows = []; $precision = $config['sla_precision'] ?? static::DEFAULT_REPORT_PRECISION; // We only have one average $average = $data->getAverages()[0]; if ($average < $threshold) { $slaClass = 'nok'; } else { $slaClass = 'ok'; } $total = $this instanceof HostSlaReport ? sprintf(t('Total (%d Hosts)'), $count) : sprintf(t('Total (%d Services)'), $count); $tableRows[] = Html::tag('tr', null, [ Html::tag('td', ['colspan' => count($data->getDimensions())], $total), Html::tag('td', ['class' => "sla-column $slaClass"], round($average, $precision)) ]); $table = Html::tag( 'table', ['class' => 'common-table sla-table'], [Html::tag('tbody', null, $tableRows)] ); return $table; } } icingadb-web-1.5.0/library/Icingadb/Hook/CustomVarRendererHook.php000066400000000000000000000057661527064444300250670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Closure; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Hook\Common\HookUtils; use ipl\Orm\Model; use Throwable; abstract class CustomVarRendererHook { use HookUtils; /** * Prefetch the data the hook needs to render custom variables * * @param Model $object The object for which they'll be rendered * * @return bool Return true if the hook can render variables for the given object, false otherwise */ abstract public function prefetchForObject(Model $object): bool; /** * Render the given variable name * * @param string $key * * @return ?mixed */ abstract public function renderCustomVarKey(string $key); /** * Render the given variable value * * @param string $key * @param mixed $value * * @return ?mixed */ abstract public function renderCustomVarValue(string $key, $value); /** * Return a group name for the given variable name * * @param string $key * * @return ?string */ abstract public function identifyCustomVarGroup(string $key): ?string; /** * Prepare available hooks to render custom variables of the given object * * @param Model $object * * @return Closure A callback ($key, $value) which returns an array [$newKey, $newValue, $group] */ final public static function prepareForObject(Model $object): Closure { $hooks = []; foreach (Hook::all('Icingadb/CustomVarRenderer') as $hook) { /** @var self $hook */ try { if ($hook->prefetchForObject($object)) { $hooks[] = $hook; } } catch (Throwable $e) { Logger::error('Failed to load hook %s: %s', get_class($hook), $e); Logger::debug($e); } } return function (string $key, $value) use ($hooks) { $newKey = $key; $newValue = $value; $group = null; foreach ($hooks as $hook) { /** @var self $hook */ try { $renderedKey = $hook->renderCustomVarKey($key); $renderedValue = $hook->renderCustomVarValue($key, $value); $group = $hook->identifyCustomVarGroup($key); } catch (Throwable $e) { Logger::error('Failed to use hook %s: %s', get_class($hook), $e); Logger::debug($e); continue; } if ($renderedKey !== null || $renderedValue !== null) { $newKey = $renderedKey ?? $key; $newValue = $renderedValue ?? $value; break; } } return [$newKey, $newValue, $group]; }; } } icingadb-web-1.5.0/library/Icingadb/Hook/EventDetailExtensionHook.php000066400000000000000000000011331527064444300255360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\History; use ipl\Html\ValidHtml; abstract class EventDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given event * * @param History $event * * @return ValidHtml */ abstract public function getHtmlForObject(History $event): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/ExtensionHook/000077500000000000000000000000001527064444300227025ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php000066400000000000000000000102771527064444300270120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\ExtensionHook; use Icinga\Module\Icingadb\Hook\Common\HookUtils; abstract class BaseExtensionHook { use HookUtils; /** @var int Used as default return value for {@see BaseExtensionHook::getLocation()} */ public const IDENTIFY_LOCATION_BY_SECTION = -1; /** @var string Output section, right at the top */ public const OUTPUT_SECTION = 'output'; /** @var string Graph section, below output */ public const GRAPH_SECTION = 'graph'; /** @var string Detail section, below graphs */ public const DETAIL_SECTION = 'detail'; /** @var string Action section, below action and note urls */ public const ACTION_SECTION = 'action'; /** @var string Problem section, below comments and downtimes */ public const PROBLEM_SECTION = 'problem'; /** @var string Related section, below groups and notification recipients */ public const RELATED_SECTION = 'related'; /** @var string State section, below check statistics and performance data */ public const STATE_SECTION = 'state'; /** @var string Config section, below custom variables and feature toggles */ public const CONFIG_SECTION = 'config'; /** * Base locations for all known sections * * @var array */ public const BASE_LOCATIONS = [ self::OUTPUT_SECTION => 1000, self::GRAPH_SECTION => 1100, self::DETAIL_SECTION => 1200, self::ACTION_SECTION => 1300, self::PROBLEM_SECTION => 1400, self::RELATED_SECTION => 1500, self::STATE_SECTION => 1600, self::CONFIG_SECTION => 1700 ]; /** @var int This hook's location */ private $location = self::IDENTIFY_LOCATION_BY_SECTION; /** @var string This hook's section */ private $section = self::DETAIL_SECTION; /** * Set this hook's location * * Note that setting the location explicitly may override other widgets using the same location. But beware that * this applies to this hook's widget as well. * * Also, while the sections are guaranteed to always refer to the same general location, this guarantee is lost * when setting a location explicitly. The core and base locations may change at any time and any explicitly set * location will **not** adjust accordingly. * * @param int $location * * @return void */ final public function setLocation(int $location) { $this->location = $location; } /** * Get this hook's location * * @return int */ final public function getLocation(): int { return $this->location; } /** * Set this hook's section * * Sections are used to place widgets loosely in a general location. Using e.g. the `state` section this hook's * widget will always appear after the check statistics and performance data widgets. * * @param string $section * * @return void */ final public function setSection(string $section) { $this->section = $section; } /** * Get this hook's section * * @return string */ final public function getSection(): string { return $this->section; } /** * Union both arrays and sort the result by key * * @param array $coreElements * @param array $extensions * * @return array */ final public static function injectExtensions(array $coreElements, array $extensions): array { $extensions += $coreElements; uksort($extensions, function ($a, $b) { if ($a < 1000 && $b >= 1000) { $b -= 1000; if (abs($a - $b) < 10 && abs($a % 100 - $b % 100) < 10) { return -1; } } elseif ($b < 1000 && $a >= 1000) { $a -= 1000; if (abs($a - $b) < 10 && abs($a % 100 - $b % 100) < 10) { return 1; } } return $a < $b ? -1 : ($a > $b ? 1 : 0); }); return $extensions; } } icingadb-web-1.5.0/library/Icingadb/Hook/ExtensionHook/ObjectDetailExtensionHook.php000066400000000000000000000116161527064444300304670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\ExtensionHook; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Exception\IcingaException; use Icinga\Module\Icingadb\Hook\EventDetailExtensionHook; use Icinga\Module\Icingadb\Hook\HostDetailExtensionHook; use Icinga\Module\Icingadb\Hook\ServiceDetailExtensionHook; use Icinga\Module\Icingadb\Hook\UserDetailExtensionHook; use Icinga\Module\Icingadb\Hook\UsergroupDetailExtensionHook; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use InvalidArgumentException; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Orm\Model; use Throwable; use function ipl\Stdlib\get_php_type; abstract class ObjectDetailExtensionHook extends BaseExtensionHook { /** * Load all extensions for the given object * * @param Host|Service|User|Usergroup|History $object * * @return array * * @throws InvalidArgumentException If the given model is not supported */ final public static function loadExtensions(Model $object): array { switch (true) { case $object instanceof Host: $hookName = 'Icingadb\\HostDetailExtension'; break; case $object instanceof Service: $hookName = 'Icingadb\\ServiceDetailExtension'; break; case $object instanceof RedundancyGroup: $hookName = 'Icingadb\\RedundancyGroupDetailExtension'; break; case $object instanceof User: $hookName = 'Icingadb\\UserDetailExtension'; break; case $object instanceof Usergroup: $hookName = 'Icingadb\\UsergroupDetailExtension'; break; case $object instanceof History: $hookName = 'Icingadb\\EventDetailExtension'; break; default: throw new InvalidArgumentException( sprintf('%s is not a supported object type', get_php_type($object)) ); } $extensions = []; $lastUsedLocations = []; /** * @var $hook HostDetailExtensionHook * @var $hook ServiceDetailExtensionHook * @var $hook UserDetailExtensionHook * @var $hook UsergroupDetailExtensionHook * @var $hook EventDetailExtensionHook */ foreach (Hook::all($hookName) as $hook) { $location = $hook->getLocation(); if ($location < 0) { $location = null; } if ($location === null) { $section = $hook->getSection(); if (! isset(self::BASE_LOCATIONS[$section])) { Logger::error('Detail extension %s is using an invalid section: %s', get_class($hook), $section); $section = self::DETAIL_SECTION; } if (isset($lastUsedLocations[$section])) { $location = ++$lastUsedLocations[$section]; } else { $location = self::BASE_LOCATIONS[$section]; $lastUsedLocations[$section] = $location; } } try { // It may be ValidHtml, but modules shouldn't be able to break our views. // That's why it needs to be rendered instantly, as any error will then // be caught here. $extension = (string) $hook->getHtmlForObject(clone $object); if (! empty($extension)) { $moduleName = $hook->getModule()->getName(); $extensions[$location] = new HtmlElement( 'div', Attributes::create([ 'class' => 'icinga-module module-' . $moduleName, 'data-icinga-module' => $moduleName ]), HtmlString::create($extension) ); } else { // There's no way for an extension to decide whether it should provide a result or not. // So, even if empty, the result must be used as it's perfectly valid. $extensions[$location] = HtmlString::create(''); } } catch (Throwable $e) { Logger::error("Failed to load detail extension: %s\n%s", $e, $e->getTraceAsString()); $extensions[$location] = Text::create(IcingaException::describe($e)); } } return $extensions; } } icingadb-web-1.5.0/library/Icingadb/Hook/ExtensionHook/ObjectsDetailExtensionHook.php000066400000000000000000000076001527064444300306500ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\ExtensionHook; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Exception\IcingaException; use Icinga\Module\Icingadb\Hook\HostsDetailExtensionHook; use Icinga\Module\Icingadb\Hook\ServicesDetailExtensionHook; use InvalidArgumentException; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Orm\Query; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use Throwable; abstract class ObjectsDetailExtensionHook extends BaseExtensionHook { use BaseFilter; /** * Load all extensions for the given objects * * @param string $objectType * @param Query $query * @param Filter\Rule $baseFilter * * @return array * * @throws InvalidArgumentException If the given object type is not supported */ final public static function loadExtensions(string $objectType, Query $query, Filter\Rule $baseFilter): array { switch ($objectType) { case 'host': $hookName = 'Icingadb\\HostsDetailExtension'; break; case 'service': $hookName = 'Icingadb\\ServicesDetailExtension'; break; default: throw new InvalidArgumentException( sprintf('%s is not a supported object type', $objectType) ); } $extensions = []; $lastUsedLocations = []; /** @var HostsDetailExtensionHook|ServicesDetailExtensionHook $hook */ foreach (Hook::all($hookName) as $hook) { $location = $hook->getLocation(); if ($location < 0) { $location = null; } if ($location === null) { $section = $hook->getSection(); if (! isset(self::BASE_LOCATIONS[$section])) { Logger::error('Detail extension %s is using an invalid section: %s', get_class($hook), $section); $section = self::DETAIL_SECTION; } if (isset($lastUsedLocations[$section])) { $location = ++$lastUsedLocations[$section]; } else { $location = self::BASE_LOCATIONS[$section]; $lastUsedLocations[$section] = $location; } } try { // It may be ValidHtml, but modules shouldn't be able to break our views. // That's why it needs to be rendered instantly, as any error will then // be caught here. $extension = (string) $hook->setBaseFilter($baseFilter)->getHtmlForObjects(clone $query); if (! empty($extension)) { $moduleName = $hook->getModule()->getName(); $extensions[$location] = new HtmlElement( 'div', Attributes::create([ 'class' => 'icinga-module module-' . $moduleName, 'data-icinga-module' => $moduleName ]), HtmlString::create($extension) ); } else { // There's no way for an extension to decide whether it should provide a result or not. // So, even if empty, the result must be used as it's perfectly valid. $extensions[$location] = HtmlString::create(''); } } catch (Throwable $e) { Logger::error("Failed to load details extension: %s\n%s", $e, $e->getTraceAsString()); $extensions[$location] = Text::create(IcingaException::describe($e)); } } return $extensions; } } icingadb-web-1.5.0/library/Icingadb/Hook/HostActionsHook.php000066400000000000000000000010621527064444300236740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ActionsHook\ObjectActionsHook; use Icinga\Module\Icingadb\Model\Host; use ipl\Web\Widget\Link; abstract class HostActionsHook extends ObjectActionsHook { /** * Assemble and return a list of HTML anchors for the given host * * @param Host $host * * @return Link[] */ abstract public function getActionsForObject(Host $host): array; } icingadb-web-1.5.0/library/Icingadb/Hook/HostDetailExtensionHook.php000066400000000000000000000011161527064444300253730ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Host; use ipl\Html\ValidHtml; abstract class HostDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given host * * @param Host $host * * @return ValidHtml */ abstract public function getHtmlForObject(Host $host): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/HostsDetailExtensionHook.php000066400000000000000000000017571527064444300255710ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectsDetailExtensionHook; use Icinga\Module\Icingadb\Model\Host; use ipl\Html\ValidHtml; use ipl\Orm\Query; abstract class HostsDetailExtensionHook extends ObjectsDetailExtensionHook { /** * Assemble and return an HTML representation of the given hosts * * The given query is already pre-filtered with the user's custom filter and restrictions. The base filter does * only contain the user's custom filter, use this for e.g. subsidiary links. * * The query is also limited by default, use `$hosts->limit(null)` to clear that. But beware that this may yield * a huge result set in case of a bulk selection. * * @param Query $hosts * * @return ValidHtml */ abstract public function getHtmlForObjects(Query $hosts): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/IcingadbSupportHook.php000066400000000000000000000024061527064444300245360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Application\Icinga; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Hook\Common\HookUtils; use Icinga\Web\Session; abstract class IcingadbSupportHook { use HookUtils; /** * Return whether your module supports IcingaDB or not * * @return bool */ public function supportsIcingaDb(): bool { return true; } /** * Whether icingadb is set as the preferred backend in preferences * * @return bool Return true if icingadb is set as backend, false otherwise */ final public static function isIcingaDbSetAsPreferredBackend(): bool { return true; } /** * Whether to use icingadb as the backend * * @return bool Returns true if monitoring module is accessible or icingadb is selected as backend, false otherwise. */ final public static function useIcingaDbAsBackend(): bool { return ! Icinga::app()->getModuleManager()->hasEnabled('monitoring') || ! Auth::getInstance()->hasPermission('module/monitoring') || self::isIcingaDbSetAsPreferredBackend(); } } icingadb-web-1.5.0/library/Icingadb/Hook/PluginOutputHook.php000066400000000000000000000037071527064444300241250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Hook\Common\HookUtils; use Throwable; abstract class PluginOutputHook { use HookUtils; /** * Return whether the given command is supported or not * * @param string $commandName * * @return bool */ abstract public function isSupportedCommand(string $commandName): bool; /** * Process the given plugin output based on the specified check command * * Try to process the output as efficient and fast as possible. * Especially list view performance may suffer otherwise. * * @param string $output A host's or service's output * @param string $commandName The name of the checkcommand that produced the output * @param bool $enrichOutput Whether macros or other markup should be processed * * @return string */ abstract public function render(string $output, string $commandName, bool $enrichOutput): string; /** * Let all hooks process the given plugin output based on the specified check command * * @param string $output * @param string $commandName * @param bool $enrichOutput * * @return string */ final public static function processOutput(string $output, string $commandName, bool $enrichOutput): string { foreach (Hook::all('Icingadb\\PluginOutput') as $hook) { /** @var self $hook */ try { if ($hook->isSupportedCommand($commandName)) { $output = $hook->render($output, $commandName, $enrichOutput); } } catch (Throwable $e) { Logger::error("Unable to process plugin output: %s\n%s", $e, $e->getTraceAsString()); } } return $output; } } icingadb-web-1.5.0/library/Icingadb/Hook/RedundancyGroupDetailExtensionHook.php000066400000000000000000000012341527064444300275700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\RedundancyGroup; use ipl\Html\ValidHtml; abstract class RedundancyGroupDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given redundancy group * * @param RedundancyGroup $redundancyGroup * * @return ValidHtml */ abstract public function getHtmlForObject(RedundancyGroup $redundancyGroup): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/SearchColumnsProviderHook.php000066400000000000000000000035361527064444300257270ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Application\Hook; use Icinga\Application\Logger; use ipl\Orm\Model; use Throwable; /** * Hook for providing additional search columns such as custom variables. * * This is a first attempt to generalize support for modules to provide additional search columns. * The end user won't be able to customize the set provided and every global or route search will * always use them. Any hook implementation must ensure that only columns the user has access to * and that are valid in the current route are returned. Returning invalid columns may cause errors * for users. See https://github.com/Icinga/icingadb-web/security/advisories/GHSA-w57j-28jc-8429 * for an example of what can go wrong. * * @deprecated This will not be used by any future version without any further notice. */ abstract class SearchColumnsProviderHook { abstract public function retrieveCustomVars(Model $model): array; final public static function getCustomVarColumns(Model $model, array $defaultColumns = []): array { $columns = $defaultColumns; $hooks = Hook::all('icingadb/SearchColumnsProvider'); foreach ($hooks as $hook) { try { $customVars = $hook->retrieveCustomVars($model); if (! empty($customVars)) { $columns = [...$columns, ...$customVars]; } } catch (Throwable $e) { Logger::error( 'Error retrieving Custom Vars for %s with table name "%s": %s', get_class($model), $model->getTableName(), $e->getMessage() ); } } return array_unique($columns); } } icingadb-web-1.5.0/library/Icingadb/Hook/ServiceActionsHook.php000066400000000000000000000011071527064444300243570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ActionsHook\ObjectActionsHook; use Icinga\Module\Icingadb\Model\Service; use ipl\Web\Widget\Link; abstract class ServiceActionsHook extends ObjectActionsHook { /** * Assemble and return a list of HTML anchors for the given service * * @param Service $service * * @return Link[] */ abstract public function getActionsForObject(Service $service): array; } icingadb-web-1.5.0/library/Icingadb/Hook/ServiceDetailExtensionHook.php000066400000000000000000000011431527064444300260560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\ValidHtml; abstract class ServiceDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given service * * @param Service $service * * @return ValidHtml */ abstract public function getHtmlForObject(Service $service): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/ServicesDetailExtensionHook.php000066400000000000000000000020011527064444300262330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectsDetailExtensionHook; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\ValidHtml; use ipl\Orm\Query; abstract class ServicesDetailExtensionHook extends ObjectsDetailExtensionHook { /** * Assemble and return an HTML representation of the given services * * The given query is already pre-filtered with the user's custom filter and restrictions. The base filter does * only contain the user's custom filter, use this for e.g. subsidiary links. * * The query is also limited by default, use `$hosts->limit(null)` to clear that. But beware that this may yield * a huge result set in case of a bulk selection. * * @param Query $services * * @return ValidHtml */ abstract public function getHtmlForObjects(Query $services): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/TabHook.php000066400000000000000000000032571527064444300221540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Hook\Common\HookUtils; use ipl\Html\ValidHtml; use ipl\Orm\Model; abstract class TabHook { use Auth; use Database; use HookUtils; /** * Get the tab's name * * The name is used to identify this hook later on. It must be unique. * Multiple words in the name should be separated by dashes. (-) * * @return string */ abstract public function getName(): string; /** * Get the tab's label * * The label is shown on the tab and in the browser's title. * * @return string */ abstract public function getLabel(): string; /** * Get tab content for the given object * * @param Model $object * * @return ValidHtml[] */ abstract public function getContent(Model $object): array; /** * Get tab controls for the given object * * @param Model $object * * @return ValidHtml[] */ public function getControls(Model $object): array { return []; } /** * Get tab footer for the given object * * @param Model $object * * @return ValidHtml[] */ public function getFooter(Model $object): array { return []; } /** * Get whether this tab should be shown * * @param Model $object * * @return bool */ public function shouldBeShown(Model $object): bool { return true; } } icingadb-web-1.5.0/library/Icingadb/Hook/TabHook/000077500000000000000000000000001527064444300214345ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Hook/TabHook/HookActions.php000066400000000000000000000076761527064444300244060ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook\TabHook; use Generator; use Icinga\Application\Hook; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Hook\TabHook; use ipl\Html\ValidHtml; use ipl\Orm\Model; use ipl\Stdlib\Str; use Throwable; /** * Trait HookActions */ trait HookActions { /** @var Model The object to load tabs for */ protected $objectToLoadTabsFor; /** @var TabHook[] Loaded tab hooks */ protected $tabHooks; /** * Get default control elements * * @return ValidHtml[] */ abstract protected function getDefaultTabControls(): array; public function __call($methodName, $args) { if (substr($methodName, -6) === 'Action') { $hookName = substr($methodName, 0, -6); $hooks = $this->loadTabHooks(); if (isset($hooks[$hookName])) { $this->showTabHook($hooks[$hookName]); return; } } parent::__call($methodName, $args); } /** * Register the object for which to load additional tabs * * @param Model $object * * @return void */ protected function loadTabsForObject(Model $object) { $this->objectToLoadTabsFor = $object; } /** * Load tab hooks * * @return array */ protected function loadTabHooks(): array { if ($this->objectToLoadTabsFor === null) { return []; } elseif ($this->tabHooks !== null) { return $this->tabHooks; } $this->tabHooks = []; foreach (Hook::all('Icingadb\\Tab') as $hook) { /** @var TabHook $hook */ try { if ($hook->shouldBeShown($this->objectToLoadTabsFor)) { $this->tabHooks[Str::camel($hook->getName())] = $hook; } } catch (Throwable $e) { Logger::error("Failed to load tab hook: %s\n%s", $e, $e->getTraceAsString()); } } return $this->tabHooks; } /** * Load additional tabs * * @return Generator */ protected function loadAdditionalTabs(): Generator { foreach ($this->loadTabHooks() as $hook) { yield $hook->getName() => [ 'label' => $hook->getLabel(), 'url' => 'icingadb/' . $this->getRequest()->getControllerName() . '/' . $hook->getName() ]; } } /** * Render the given tab hook * * @param TabHook $hook * * @return void */ protected function showTabHook(TabHook $hook) { $moduleName = $hook->getModule()->getName(); foreach ($hook->getControls($this->objectToLoadTabsFor) as $control) { $this->addControl($control); } if (! empty($this->controls->getContent())) { $this->controls->addAttributes([ 'class' => ['icinga-module', 'module-' . $moduleName], 'data-icinga-module' => $moduleName ]); } else { foreach ($this->getDefaultTabControls() as $control) { $this->addControl($control); } } foreach ($hook->getContent($this->objectToLoadTabsFor) as $content) { $this->addContent($content); } $this->content->addAttributes([ 'class' => ['icinga-module', 'module-' . $moduleName], 'data-icinga-module' => $moduleName ]); foreach ($hook->getFooter($this->objectToLoadTabsFor) as $footer) { $this->addFooter($footer); } $this->footer->addAttributes([ 'class' => ['icinga-module', 'module-' . $moduleName], 'data-icinga-module' => $moduleName ]); } } icingadb-web-1.5.0/library/Icingadb/Hook/UserDetailExtensionHook.php000066400000000000000000000011161527064444300253740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\User; use ipl\Html\ValidHtml; abstract class UserDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given user * * @param User $user * * @return ValidHtml */ abstract public function getHtmlForObject(User $user): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Hook/UsergroupDetailExtensionHook.php000066400000000000000000000011611527064444300264510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Hook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Usergroup; use ipl\Html\ValidHtml; abstract class UsergroupDetailExtensionHook extends ObjectDetailExtensionHook { /** * Assemble and return an HTML representation of the given usergroup * * @param Usergroup $usergroup * * @return ValidHtml */ abstract public function getHtmlForObject(Usergroup $usergroup): ValidHtml; } icingadb-web-1.5.0/library/Icingadb/Model/000077500000000000000000000000001527064444300202455ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Model/AcknowledgementHistory.php000066400000000000000000000067611527064444300254610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * Model for table `acknowledgement_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, the query * needs a `acknowledgement_history.service_id IS NULL OR acknowledgement_history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property DateTime $set_time * @property ?DateTime $clear_time * @property ?string $author * @property ?string $cleared_by * @property ?string $comment * @property ?DateTime $expire_time * @property ?bool $is_sticky * @property ?bool $is_persistent */ class AcknowledgementHistory extends Model { public function getTableName() { return 'acknowledgement_history'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'set_time', 'clear_time', 'author', 'cleared_by', 'comment', 'expire_time', 'is_sticky', 'is_persistent' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'set_time' => t('Acknowledgement Set Time'), 'clear_time' => t('Acknowledgement Clear Time'), 'author' => t('Acknowledgement Author'), 'cleared_by' => t('Acknowledgement Cleared By'), 'comment' => t('Acknowledgement Comment'), 'expire_time' => t('Acknowledgement Expire Time'), 'is_sticky' => t('Acknowledgement Is Sticky'), 'is_persistent' => t('Acknowledgement Is Persistent') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_sticky', 'is_persistent' ])); $behaviors->add(new MillisecondTimestamp([ 'set_time', 'clear_time', 'expire_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', 'host_id', 'service_id', ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('id') ->setForeignKey('acknowledgement_history_id'); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/ActionUrl.php000066400000000000000000000030451527064444300226600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Model\Behavior\ActionAndNoteUrl; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * @property string $id * @property string[] $action_url * @property string $environment_id */ class ActionUrl extends Model { public function getTableName() { return 'action_url'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'action_url', 'environment_id' ]; } public function getColumnDefinitions() { return [ 'action_url' => t('Action Url'), 'environment_id' => t('Environment Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ActionAndNoteUrl(['action_url'])); $behaviors->add(new Binary([ 'id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->hasMany('host', Host::class) ->setCandidateKey('id') ->setForeignKey('action_url_id'); $relations->hasMany('service', Service::class) ->setCandidateKey('id') ->setForeignKey('action_url_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/AlertHistory.php000066400000000000000000000046511527064444300234150ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * Model for table `alert_history` * * @property string $id * @property string $history_id * @property string $environment_id * @property ?string $contact_name * @property ?string $contactgroup_name * @property ?string $schedule_name * @property ?string $channel_name * @property DateTime $triggered_at * @property string $event_message * @property string $event_summary */ class AlertHistory extends Model { public function getTableName(): string { return 'alert_history'; } public function getKeyName(): string { return 'id'; } public function getColumns() { return [ 'history_id', 'environment_id', 'contact_name', 'contactgroup_name', 'schedule_name', 'channel_name', 'triggered_at', 'event_message', 'event_summary' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'contact_name' => t('Alert Contact Name'), 'contactgroup_name' => t('Alert Contact Group Name'), 'schedule_name' => t('Alert Schedule Name'), 'channel_name' => t('Alert Channel Name'), 'triggered_at' => t('Alert Triggered At'), 'event_message' => t('Alert Message'), 'event_summary' => t('Alert Summary'), ]; } public function getDefaultSort() { return 'alert_history.triggered_at desc'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary(['id', 'history_id', 'environment_id'])); $behaviors->add(new MillisecondTimestamp(['triggered_at'])); $behaviors->add(new ReRoute(['host' => 'history.host', 'service' => 'history.service'])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Behavior/000077500000000000000000000000001527064444300220045ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Model/Behavior/ActionAndNoteUrl.php000066400000000000000000000023211527064444300256640ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\Behavior; use ipl\Orm\Contract\PropertyBehavior; class ActionAndNoteUrl extends PropertyBehavior { public function fromDb($value, $key, $_) { if (empty($value)) { return []; } $links = []; if (strpos($value, "' ") === false) { $links[] = $value; } else { foreach (explode("' ", $value) as $url) { $url = strpos($url, "'") === 0 ? substr($url, 1) : $url; $url = strpos($url, "'") === strlen($url) - 1 ? substr($url, 0, strlen($url) - 1) : $url; $links[] = $url; } } return $links; } public function toDb($value, $key, $_) { if (empty($value) || ! is_array($value)) { return $value; } if (count($value) === 1) { return $value[0]; } $links = ''; foreach ($value as $url) { if (! empty($links)) { $links .= ' '; } $links .= "'$url'"; } return $links; } } icingadb-web-1.5.0/library/Icingadb/Model/Behavior/Bitmask.php000066400000000000000000000044121527064444300241100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\Behavior; use ipl\Orm\Contract\PropertyBehavior; use ipl\Orm\Contract\RewriteFilterBehavior; use ipl\Stdlib\Filter\Condition; /** * Class Bitmask * * @method void __construct(array $properties) Pass property names as keys and their bitmap ([value => bit]) as value */ class Bitmask extends PropertyBehavior implements RewriteFilterBehavior { public function fromDb($bits, $key, $context) { $values = []; foreach ($context as $value => $bit) { if ($bits & $bit) { $values[] = $value; } } return $values; } public function toDb($value, $key, $context) { if (! is_array($value)) { if (is_int($value) || ctype_digit($value)) { return $value; } return isset($context[$value]) ? $context[$value] : -1; } $bits = []; $allBits = 0; foreach ($value as $v) { if (isset($context[$v])) { $bits[] = $context[$v]; $allBits |= $context[$v]; } elseif (is_int($v) || ctype_digit($v)) { $bits[] = $v; $allBits |= $v; } } $bits[] = $allBits; return $bits; } public function rewriteCondition(Condition $condition, $relation = null): null { $column = $condition->metaData()->get('columnName'); if ($column === null || ! isset($this->properties[$column])) { return null; } $values = $condition->getValue(); if (! is_array($values)) { if (is_int($values) || ctype_digit($values)) { return null; } $values = [$values]; } $bits = 0; foreach ($values as $value) { if (isset($this->properties[$column][$value])) { $bits |= $this->properties[$column][$value]; } elseif (is_int($value) || ctype_digit($value)) { $bits |= $value; } } $condition->setColumn(sprintf('%s & %s', $condition->getColumn(), $bits)); return null; } } icingadb-web-1.5.0/library/Icingadb/Model/Behavior/FlattenedObjectVars.php000066400000000000000000000117731527064444300264170ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\Behavior; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Model\CustomvarFlat; use ipl\Orm\AliasedExpression; use ipl\Orm\ColumnDefinition; use ipl\Orm\Contract\QueryAwareBehavior; use ipl\Orm\Contract\RewriteColumnBehavior; use ipl\Orm\Query; use ipl\Stdlib\Filter; class FlattenedObjectVars implements RewriteColumnBehavior, QueryAwareBehavior { use Auth; /** @var string[] The labels to rewrite for column definition */ private const LABEL_REWRITE = [ 'user' => 'contact', 'usergroup' => 'contactgroup' ]; /** @var Query */ protected $query; public function setQuery(Query $query): static { $this->query = $query; return $this; } public function rewriteCondition(Filter\Condition $condition, $relation = null): ?Filter\Condition { $column = $condition->metaData()->get('columnName'); if ($column !== null) { $relation = substr($relation, 0, -5) . 'customvar_flat.'; $condition->metaData() ->set('requiresTransformation', true) ->set('columnPath', $relation . $column) ->set('relationPath', substr($relation, 0, -1)); if (isset($this->query->getWith()[substr($relation, 0, -1)])) { // In case customvar_flat is being selected, the FilterProcessor will not try to optimize the condition. // So we can prepare the condition here and still let CustomvarFlat's behavior do the rest. $condition->metaData()->set('columnName', $relation . $column); return $condition; } // The ORM's FilterProcessor only optimizes filter conditions that are in the same level (chain). // Previously, this behavior transformed a single condition to an ALL chain and hence the semantics // of the level changed, since the FilterProcessor interpreted the conditions separately from there on. // To not change the semantics of the condition it is required to delay the transformation of the condition // until the subquery is created. Though, since this is about custom variables, and such can contain dots, // the FilterProcessor then continues traversing the parts of the column's path, which then would include // the dot-separated parts of the custom variable name. To prevent this, we have to signal that what we // return a replacement here, that should be used as-is and not processed further. $condition->metaData()->set('forceResolved', true); // But to make it even worse: If we do that, (not transforming the condition) the FilterProcessor sees // multiple conditions as targeting different columns, as it doesn't know that the *columns* are in fact // custom variables. It then attempts to combine the conditions with an AND, which is not possible, since // they refer to the same columns (flatname and flatvalue) after being transformed. So we have to make // the condition refer to a different column, which is totally irrelevant, but since it's always the same // column, the FilterProcessor won't attempt to combine the conditions. The literal icing on the cake. $condition->setColumn('always_the_same_but_totally_irrelevant'); return $condition; } return null; } public function rewriteColumn($column, ?string $relation = null): AliasedExpression { $subQuery = $this->query->createSubQuery(new CustomvarFlat(), $relation) ->limit(1) ->columns('flatvalue') ->filter(Filter::equal('flatname', $column)); $this->applyRestrictions($subQuery); $alias = $this->query->getDb()->quoteIdentifier([str_replace('.', '_', $relation) . "_$column"]); list($select, $values) = $this->query->getDb()->getQueryBuilder()->assembleSelect($subQuery->assembleSelect()); return new AliasedExpression($alias, "($select)", null, ...$values); } public function rewriteColumnDefinition(ColumnDefinition $def, string $relation): void { $parts = explode('.', substr($relation, 0, -5)); $objectType = array_pop($parts); $name = $def->getName(); if (substr($name, -3) === '[*]') { // The suggestions also hide this from the label, so should this $name = substr($name, 0, -3); } if (array_key_exists($objectType, self::LABEL_REWRITE)) { $objectType = self::LABEL_REWRITE[$objectType]; } // Programmatically translated since the full definition is available in class ObjectSuggestions $def->setLabel(sprintf(t(ucfirst($objectType) . ' %s', '..'), $name)); } public function isSelectableColumn(string $name): bool { return true; } } icingadb-web-1.5.0/library/Icingadb/Model/Behavior/HasProblematicParent.php000066400000000000000000000057621527064444300265760ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\Behavior; use Icinga\Module\Icingadb\Model\DependencyEdge; use ipl\Orm\AliasedExpression; use ipl\Orm\ColumnDefinition; use ipl\Orm\Exception\InvalidColumnException; use ipl\Orm\Query; use ipl\Sql\Expression; use ipl\Stdlib\Filter; use ipl\Orm\Contract\RewriteColumnBehavior; use ipl\Orm\Contract\QueryAwareBehavior; /** * Behavior to check if the service has a problematic parent */ class HasProblematicParent implements RewriteColumnBehavior, QueryAwareBehavior { /** @var Query */ protected $query; public function setQuery(Query $query): static { $this->query = $query; return $this; } public function rewriteColumn($column, ?string $relation = null): ?AliasedExpression { if (! $this->isSelectableColumn($column)) { return null; } $resolver = $this->query->getResolver(); if ($relation !== null) { $serviceTableAlias = $resolver->getAlias($resolver->resolveRelation($relation)->getTarget()); $column = $resolver->qualifyColumnAlias($column, $serviceTableAlias); } else { $serviceTableAlias = $resolver->getAlias($this->query->getModel()); } $subQueryModel = new DependencyEdge(); $subQuery = (new Query()) ->setDb($this->query->getDb()) ->setModel($subQueryModel) ->columns([new Expression('1')]) ->utilize('child') ->limit(1) ->filter(Filter::equal('state.failed', 'y')); $subQueryResolver = $subQuery->getResolver()->setAliasPrefix('hpp_'); $subQueryTarget = $subQueryResolver->resolveRelation($subQueryModel->getTableName() . '.child')->getTarget(); $targetForeignKey = $subQueryResolver->qualifyColumn( 'service_id', $subQueryResolver->getAlias($subQueryTarget) ); $subQuery->getSelectBase() ->where("$targetForeignKey = {$resolver->qualifyColumn('id', $serviceTableAlias)}"); [$select, $values] = $this->query->getDb() ->getQueryBuilder() ->assembleSelect($subQuery->assembleSelect()); return new AliasedExpression( $this->query->getDb()->quoteIdentifier([$column]), "($select)", null, ...$values ); } public function isSelectableColumn(string $name): bool { return $name === 'has_problematic_parent'; } public function rewriteColumnDefinition(ColumnDefinition $def, string $relation): void { } public function rewriteCondition(Filter\Condition $condition, $relation = null): null { $column = substr($condition->getColumn(), strlen($relation ?? '')); if ($this->isSelectableColumn($column)) { throw new InvalidColumnException($column, $this->query->getModel()); } return null; } } icingadb-web-1.5.0/library/Icingadb/Model/Behavior/ReRoute.php000066400000000000000000000050151527064444300241030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\Behavior; use ipl\Orm\Contract\RewriteFilterBehavior; use ipl\Orm\Contract\RewritePathBehavior; use ipl\Stdlib\Filter; class ReRoute implements RewriteFilterBehavior, RewritePathBehavior { protected $routes; /** * Tables with mixed object type entries for which servicegroup filters need to be resolved in multiple steps * * @var string[] */ public const MIXED_TYPE_RELATIONS = ['downtime', 'comment', 'history', 'notification_history']; public function __construct(array $routes) { $this->routes = $routes; } public function getRoutes(): array { return $this->routes; } public function rewriteCondition(Filter\Condition $condition, $relation = null): ?Filter\Rule { $remainingPath = $condition->metaData()->get('columnName', ''); if (strpos($remainingPath, '.') === false) { return null; } if (($path = $this->rewritePath($remainingPath, $relation)) !== null) { $class = get_class($condition); $filter = new $class($relation . $path, $condition->getValue()); if ($condition->metaData()->has('forceOptimization')) { $filter->metaData()->set( 'forceOptimization', $condition->metaData()->get('forceOptimization') ); } if ( in_array(substr($relation, 0, -1), self::MIXED_TYPE_RELATIONS) && substr($remainingPath, 0, 13) === 'servicegroup.' ) { $applyAll = Filter::all(); $applyAll->add(Filter::equal($relation . 'object_type', 'host')); $orgFilter = clone $filter; $orgFilter->setColumn($relation . 'host.' . $path); $applyAll->add($orgFilter); $filter = Filter::any($filter, $applyAll); } return $filter; } return null; } public function rewritePath(string $path, ?string $relation = null): ?string { $dot = strpos($path, '.'); if ($dot !== false) { $routeName = substr($path, 0, $dot); } else { $routeName = $path; } if (isset($this->routes[$routeName])) { return $this->routes[$routeName] . ($dot !== false ? substr($path, $dot) : ''); } return null; } } icingadb-web-1.5.0/library/Icingadb/Model/Checkcommand.php000066400000000000000000000055571527064444300233460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * @property string $id * @property ?string $zone_id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $command * @property int $timeout */ class Checkcommand extends Model { public function getTableName() { return 'checkcommand'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'command', 'timeout' ]; } public function getColumnDefinitions() { return [ 'zone_id' => t('Zone Id'), 'environment_id' => t('Environment Id'), 'name_checksum' => t('Checkcommand Name Checksum'), 'properties_checksum' => t('Checkcommand Properties Checksum'), 'name' => t('Checkcommand Name'), 'name_ci' => t('Checkcommand Name (CI)'), 'command' => t('Checkcommand'), 'timeout' => t('Checkcommand Timeout') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); $behaviors->add(new Binary([ 'id', 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(CheckcommandCustomvar::class) ->setThroughAlias('t_checkcommand_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(CheckcommandCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(CheckcommandCustomvar::class); $relations->hasMany('argument', CheckcommandArgument::class); $relations->hasMany('envvar', CheckcommandEnvvar::class); $relations->hasMany('host', Host::class); $relations->hasMany('service', Service::class); } } icingadb-web-1.5.0/library/Icingadb/Model/CheckcommandArgument.php000066400000000000000000000054011527064444300250350ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * @property string $id * @property string $checkcommand_id * @property string $argument_key * @property string $environment_id * @property string $properties_checksum * @property ?string $argument_value * @property ?int $argument_order * @property ?string $description * @property ?string $argument_key_override * @property string $repeat_key * @property string $required * @property ?string $set_if * @property ?string $separator * @property string $skip_key */ class CheckcommandArgument extends Model { public function getTableName() { return 'checkcommand_argument'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'checkcommand_id', 'argument_key', 'environment_id', 'properties_checksum', 'argument_value', 'argument_order', 'description', 'argument_key_override', 'repeat_key', 'required', 'set_if', 'separator', 'skip_key' ]; } public function getColumnDefinitions() { return [ 'checkcommand_id' => t('Checkcommand Id'), 'argument_key' => t('Checkcommand Argument Name'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Checkcommand Argument Properties Checksum'), 'argument_value' => t('Checkcommand Argument Value'), 'argument_order' => t('Checkcommand Argument Position'), 'description' => t('Checkcommand Argument Description'), 'argument_key_override' => t('Checkcommand Argument Actual Name'), 'repeat_key' => t('Checkcommand Argument Repeated'), 'required' => t('Checkcommand Argument Required'), 'set_if' => t('Checkcommand Argument Condition'), 'skip_key' => t('Checkcommand Argument Without Name') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'checkcommand_id', 'environment_id', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('checkcommand', Checkcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/CheckcommandCustomvar.php000066400000000000000000000026311527064444300252400ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Relations; /** * @property string $id * @property string $checkcommand_id * @property string $customvar_id * @property string $environment_id */ class CheckcommandCustomvar extends Model { public function getTableName() { return 'checkcommand_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'checkcommand_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'checkcommand_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('checkcommand', Checkcommand::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/CheckcommandEnvvar.php000066400000000000000000000033501527064444300245150ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $checkcommand_id * @property string $envvar_key * @property string $environment_id * @property string $properties_checksum * @property string $envvar_value */ class CheckcommandEnvvar extends Model { public function getTableName() { return 'checkcommand_envvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'checkcommand_id', 'envvar_key', 'environment_id', 'properties_checksum', 'envvar_value' ]; } public function getColumnDefinitions() { return [ 'checkcommand_id' => t('Checkcommand Id'), 'envvar_key' => t('Checkcommand Envvar Name'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Checkcommand Properties Checksum'), 'envvar_value' => t('Checkcommand Envvar Value') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'checkcommand_id', 'environment_id', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('checkcommand', Checkcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Comment.php000066400000000000000000000072441527064444300223670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\BoolCast; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $author * @property string $text * @property string $entry_type * @property DateTime $entry_time * @property bool $is_persistent * @property bool $is_sticky * @property ?DateTime $expire_time * @property ?string $zone_id */ class Comment extends Model { public function getTableName() { return 'comment'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'object_type', 'host_id', 'service_id', 'name_checksum', 'properties_checksum', 'name', 'author', 'text', 'entry_type', 'entry_time', 'is_persistent', 'is_sticky', 'expire_time', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'name_checksum' => t('Comment Name Checksum'), 'properties_checksum' => t('Comment Properties Checksum'), 'name' => t('Comment Name'), 'author' => t('Comment Author'), 'text' => t('Comment Text'), 'entry_type' => t('Comment Type'), 'entry_time' => t('Comment Entry Time'), 'is_persistent' => t('Comment Is Persistent'), 'is_sticky' => t('Comment Is Sticky'), 'expire_time' => t('Comment Expire Time'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['text']; } public function getDefaultSort() { return 'comment.entry_time desc'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_persistent', 'is_sticky' ])); $behaviors->add(new MillisecondTimestamp([ 'entry_time', 'expire_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'host_id', 'service_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); $relations->belongsTo('zone', Zone::class); } } icingadb-web-1.5.0/library/Icingadb/Model/CommentHistory.php000066400000000000000000000073011527064444300237430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Model for table `comment_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, * the query needs a `comment_history.service_id IS NULL OR comment_history_service.id IS NOT NULL` where. * * @property string $comment_id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property DateTime $entry_time * @property string $author * @property ?string $removed_by * @property string $comment * @property string $entry_type * @property bool $is_persistent * @property bool $is_sticky * @property ?DateTime $expire_time * @property ?DateTime $remove_time * @property bool $has_been_removed */ class CommentHistory extends Model { public function getTableName() { return 'comment_history'; } public function getKeyName() { return 'comment_id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'entry_time', 'author', 'removed_by', 'comment', 'entry_type', 'is_persistent', 'is_sticky', 'expire_time', 'remove_time', 'has_been_removed' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'entry_time' => t('Comment Entry Time'), 'author' => t('Comment Author'), 'removed_by' => t('Comment Removed By'), 'comment' => t('Comment Text'), 'entry_type' => t('Comment Entry Type'), 'is_persistent' => t('Comment Is Persistent'), 'is_sticky' => t('Comment Is Sticky'), 'expire_time' => t('Comment Expire Time'), 'remove_time' => t('Comment Remove Time'), 'has_been_removed' => t('Comment Has Been Removed') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_persistent', 'is_sticky', 'has_been_removed' ])); $behaviors->add(new MillisecondTimestamp([ 'entry_time', 'expire_time', 'remove_time' ])); $behaviors->add(new Binary([ 'comment_id', 'environment_id', 'endpoint_id', 'host_id', 'service_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('comment_id') ->setForeignKey('comment_history_id'); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/Config.php000066400000000000000000000024651527064444300221720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behaviors; use ipl\Orm\Query; use ipl\Orm\Relations; /** * @property string $env_key * @property string $env_value * @property bool $locked * @property string $endpoint_id * @property string $environment_id * * @property Environment|Query $environment */ class Config extends Model { public function getTableName(): string { return 'icingadb_config'; } public function getKeyName(): array { return ['environment_id', 'endpoint_id', 'env_key']; } public function getColumns(): array { return [ 'env_key', 'env_value', 'locked', 'endpoint_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new BoolCast(['locked'])); $behaviors->add(new Binary(['endpoint_id', 'environment_id'])); } public function createRelations(Relations $relations): void { $relations->belongsTo('environment', Environment::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Customvar.php000066400000000000000000000046641527064444300227530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $name * @property string $value */ class Customvar extends Model { public function getTableName() { return 'customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'name', 'value' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsToMany('checkcommand', Checkcommand::class) ->through(CheckcommandCustomvar::class); $relations->belongsToMany('eventcommand', Eventcommand::class) ->through(EventcommandCustomvar::class); $relations->belongsToMany('host', Host::class) ->through(HostCustomvar::class); $relations->belongsToMany('hostgroup', Hostgroup::class) ->through(HostgroupCustomvar::class); $relations->belongsToMany('notification', Notification::class) ->through(NotificationCustomvar::class); $relations->belongsToMany('notificationcommand', Notificationcommand::class) ->through(NotificationcommandCustomvar::class); $relations->belongsToMany('service', Service::class) ->through(ServiceCustomvar::class); $relations->belongsToMany('servicegroup', Servicegroup::class) ->through(ServicegroupCustomvar::class); $relations->belongsToMany('timeperiod', Timeperiod::class) ->through(TimeperiodCustomvar::class); $relations->belongsToMany('user', User::class) ->through(UserCustomvar::class); $relations->belongsToMany('usergroup', Usergroup::class) ->through(UsergroupCustomvar::class); $relations->hasMany('customvar_flat', CustomvarFlat::class); } } icingadb-web-1.5.0/library/Icingadb/Model/CustomvarFlat.php000066400000000000000000000165201527064444300235540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Contract\RewriteFilterBehavior; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Stdlib\Filter; use ipl\Stdlib\Filter\Condition; use Traversable; /** * @property string $id * @property string $environment_id * @property string $customvar_id * @property string $flatname_checksum * @property string $flatname * @property ?string $flatvalue */ class CustomvarFlat extends Model { public function getTableName() { return 'customvar_flat'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'customvar_id', 'flatname_checksum', 'flatname', 'flatvalue' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'environment_id', 'customvar_id', 'flatname_checksum' ])); $behaviors->add(new class implements RewriteFilterBehavior { public function rewriteCondition(Condition $condition, $relation = null): ?Filter\Chain { if ($condition->metaData()->has('requiresTransformation')) { /** @var string $columnName */ $columnName = $condition->metaData()->get('columnName'); $nameFilter = Filter::like($relation . 'flatname', $columnName); $class = get_class($condition); $valueFilter = new $class($relation . 'flatvalue', $condition->getValue()); return Filter::all($nameFilter, $valueFilter); } return null; } }); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsToMany('checkcommand', Checkcommand::class) ->through(CheckcommandCustomvar::class) ->setThroughAlias('t_checkcommand_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('eventcommand', Eventcommand::class) ->through(EventcommandCustomvar::class) ->setThroughAlias('t_eventcommand_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('host', Host::class) ->through(HostCustomvar::class) ->setThroughAlias('t_host_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('hostgroup', Hostgroup::class) ->through(HostgroupCustomvar::class) ->setThroughAlias('t_hostgroup_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('notification', Notification::class) ->through(NotificationCustomvar::class) ->setThroughAlias('t_notification_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('notificationcommand', Notificationcommand::class) ->through(NotificationcommandCustomvar::class) ->setThroughAlias('t_notificationcommand_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('service', Service::class) ->through(ServiceCustomvar::class) ->setThroughAlias('t_service_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('servicegroup', Servicegroup::class) ->through(ServicegroupCustomvar::class) ->setThroughAlias('t_servicegroup_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('timeperiod', Timeperiod::class) ->through(TimeperiodCustomvar::class) ->setThroughAlias('t_timeperiod_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('user', User::class) ->through(UserCustomvar::class) ->setThroughAlias('t_user_customvar') ->setCandidateKey('customvar_id'); $relations->belongsToMany('usergroup', Usergroup::class) ->through(UsergroupCustomvar::class) ->setThroughAlias('t_usergroup_customvar') ->setCandidateKey('customvar_id'); } /** * Restore flattened custom variables to their previous structure * * @param Traversable $flattenedVars * * @return array */ public function unFlattenVars(Traversable $flattenedVars): array { $registerValue = function (&$data, $source, $path, $value) use (&$registerValue) { $step = array_shift($path); $isIndex = (bool) preg_match('/^\[(\d+)]$/', $step, $m); if ($isIndex) { $step = $m[1]; } if ($source !== null) { while (! isset($source[$step])) { if ($isIndex) { $step = sprintf('[%d]', $step); $isIndex = false; } else { if (empty($path)) { break; } $step = implode('.', [$step, array_shift($path)]); } } } if (! empty($path)) { if (! isset($data[$step])) { $data[$step] = []; } $registerValue($data[$step], $source[$step] ?? null, $path, $value); } else { // Since empty custom vars of type dictionaries and arrays have null values in customvar_flat table, // we won't be able to render them as such. Therefore, we have to use the value of the `customvar` // table if it's not null, otherwise the current value, which is a "null" string. $data[$step] = $value === null && ($source[$step] ?? null) === [] ? $source[$step] : $value; } }; if ($flattenedVars instanceof Query) { $flattenedVars->withColumns(['customvar.name', 'customvar.value']); } $vars = []; foreach ($flattenedVars as $var) { if (isset($var->customvar->name)) { $var->customvar->value = json_decode($var->customvar->value, true); $realName = $var->customvar->name; $source = [$realName => $var->customvar->value]; $sourcePath = ltrim(substr($var->flatname, strlen($realName)), '.'); $path = array_merge( [$realName], $sourcePath !== '' ? preg_split('/(?<=.)\.|(?flatname); $source = null; } $registerValue($vars, $source, $path, $var->flatvalue); if (isset($var->customvar->name)) { $var->customvar->name = null; $var->customvar->value = null; } } return $vars; } } icingadb-web-1.5.0/library/Icingadb/Model/DependencyEdge.php000066400000000000000000000035251527064444300236260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; /** * Dependency edge model. * * @property string $id * @property string $environment_id * @property string $to_node_id * @property string $from_node_id * @property string $display_name * @property string $dependency_edge_state_id * * @property Query|DependencyNode $child * @property Query|DependencyNode $parent * @property Query|DependencyEdgeState $state */ class DependencyEdge extends Model { public function getTableName(): string { return 'dependency_edge'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'environment_id', 'to_node_id', 'from_node_id', 'display_name', 'dependency_edge_state_id' ]; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'environment_id', 'to_node_id', 'from_node_id', 'dependency_edge_state_id' ])); } public function createRelations(Relations $relations): void { $relations->belongsTo('child', DependencyNode::class) ->setCandidateKey('from_node_id'); $relations->belongsTo('parent', DependencyNode::class) ->setCandidateKey('to_node_id'); $relations->hasOne('state', DependencyEdgeState::class) ->setCandidateKey('dependency_edge_state_id') ->setForeignKey('id'); } } icingadb-web-1.5.0/library/Icingadb/Model/DependencyEdgeState.php000066400000000000000000000022101527064444300246150ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Dependency edge state model. * * @property string $id * @property string $environment_id * @property bool $failed */ class DependencyEdgeState extends Model { public function getTableName(): string { return 'dependency_edge_state'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'environment_id', 'failed' ]; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'environment_id' ])); $behaviors->add(new BoolCast([ 'failed' ])); } public function createRelations(Relations $relations) { $relations->hasMany('edge', DependencyEdge::class); } } icingadb-web-1.5.0/library/Icingadb/Model/DependencyNode.php000066400000000000000000000117271527064444300236520ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relation\HasOne; use ipl\Orm\Relations; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Stdlib\Filter; /** * Dependency node model. * * @property string $id * @property string $environment_id * @property ?string $host_id * @property ?string $service_id * @property ?string $redundancy_group_id * @property string $name * @property string $severity * @property string $state * @property string $last_state_change * * @property (?Host)|Query $host * @property (?Service)|Query $service * @property (?RedundancyGroup)|Query $redundancy_group * @property Query $parent * @property Query $child */ class DependencyNode extends Model { public function getTableName(): string { return 'dependency_node'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'id', 'environment_id', 'host_id', 'service_id', 'redundancy_group_id', 'name' => new Expression( 'COALESCE(%s, %s, %s)', ['service.display_name', 'host.display_name', 'redundancy_group.display_name'] ), 'severity' => new Expression( "COALESCE(%s, %s, CASE WHEN %s = 'y' THEN 1 ELSE 0 END)", ['service.state.severity', 'host.state.severity', 'redundancy_group.state.failed'] ), 'state' => new Expression( "COALESCE(%s, %s, CASE WHEN %s = 'y' THEN 1 ELSE 0 END)", ['service.state.soft_state', 'host.state.soft_state', 'redundancy_group.state.failed'] ), 'last_state_change' => new Expression( 'COALESCE(%s, %s, %s)', [ 'service.state.last_state_change', 'host.state.last_state_change', 'redundancy_group.state.last_state_change' ] ), ]; } public function getSearchColumns(): array { return [ 'host.name_ci', 'service.name_ci', 'redundancy_group.display_name' ]; } public function getDefaultSort(): array { return ['severity DESC', 'last_state_change DESC']; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'environment_id', 'host_id', 'service_id', 'redundancy_group_id' ])); $behaviors->add(new ReRoute([ 'to' => 'parent', // Compatibility with dependencies < v1.0.4 only 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations): void { $relations->belongsTo('host', Host::class) ->setReverseName('dependency_node') ->setReverseClass(HasOne::class) ->setJoinType('LEFT'); $relations->belongsTo('service', Service::class) ->setReverseName('dependency_node') ->setReverseClass(HasOne::class) ->setJoinType('LEFT'); $relations->belongsTo('redundancy_group', RedundancyGroup::class) ->setReverseName('dependency_node') ->setReverseClass(HasOne::class) ->setJoinType('LEFT'); $relations->belongsToMany('parent', DependencyNode::class) ->through(DependencyEdge::class) ->setForeignKey('from_node_id') ->setTargetForeignKey('to_node_id') ->setReverseName('child') ->setJoinType('LEFT'); $relations->belongsToMany('child', DependencyNode::class) ->through(DependencyEdge::class) ->setForeignKey('to_node_id') ->setTargetForeignKey('from_node_id') ->setReverseName('parent') ->setJoinType('LEFT'); } /** * Get the query with only (direct) parents or children of the given host id. * * @param string $hostId Host id to fetch parents or children for * @param Connection $db The database connection * @param bool $fetchParents Fetch parents if true, children otherwise * * @return Query * * @deprecated Use {@see static::on()} instead and filter for `child|parent.host.id`. */ public static function forHost(string $hostId, Connection $db, bool $fetchParents = false): Query { return static::on($db) ->filter(Filter::equal( sprintf('%s.host.id', $fetchParents ? 'child' : 'parent'), $hostId )); } } icingadb-web-1.5.0/library/Icingadb/Model/Downtime.php000066400000000000000000000126401527064444300225470ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\BoolCast; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property ?string $triggered_by_id * @property ?string $parent_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $author * @property string $comment * @property DateTime $entry_time * @property DateTime $scheduled_start_time * @property DateTime $scheduled_end_time * @property int $scheduled_duration * @property bool $is_flexible * @property int $flexible_duration * @property bool $is_in_effect * @property ?DateTime $start_time * @property ?DateTime $end_time * @property int $duration * @property ?string $scheduled_by * @property ?string $zone_id */ class Downtime extends Model { public function getTableName() { return 'downtime'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'triggered_by_id', 'parent_id', 'object_type', 'host_id', 'service_id', 'name_checksum', 'properties_checksum', 'name', 'author', 'comment', 'entry_time', 'scheduled_start_time', 'scheduled_end_time', 'scheduled_duration', 'is_flexible', 'flexible_duration', 'is_in_effect', 'start_time', 'end_time', 'duration', 'scheduled_by', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'triggered_by_id' => t('Triggered By Downtime Id'), 'parent_id' => t('Parent Downtime Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'name_checksum' => t('Downtime Name Checksum'), 'properties_checksum' => t('Downtime Properties Checksum'), 'name' => t('Downtime Name'), 'author' => t('Downtime Author'), 'comment' => t('Downtime Comment'), 'entry_time' => t('Downtime Entry Time'), 'scheduled_start_time' => t('Downtime Scheduled Start'), 'scheduled_end_time' => t('Downtime Scheduled End'), 'scheduled_duration' => t('Downtime Scheduled Duration'), 'is_flexible' => t('Downtime Is Flexible'), 'flexible_duration' => t('Downtime Flexible Duration'), 'is_in_effect' => t('Downtime Is In Effect'), 'start_time' => t('Downtime Actual Start'), 'end_time' => t('Downtime Actual End'), 'duration' => t('Downtime Duration'), 'scheduled_by' => t('Scheduled By Downtime'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['comment']; } public function getDefaultSort() { return ['downtime.is_in_effect desc', 'downtime.start_time desc']; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_flexible', 'is_in_effect' ])); $behaviors->add(new MillisecondTimestamp([ 'entry_time', 'scheduled_start_time', 'scheduled_end_time', 'start_time', 'end_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'triggered_by_id', 'parent_id', 'host_id', 'service_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); // As long as the rewriteCondition() expects only Filter\Condition as a first argument // We have to add this reroute behavior after the binary because the filter condition might // be transformed into a filter chain! $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('triggered_by', self::class) ->setCandidateKey('triggered_by_id') ->setJoinType('LEFT'); $relations->belongsTo('parent', self::class) ->setCandidateKey('parent_id') ->setJoinType('LEFT'); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); $relations->belongsTo('zone', Zone::class); } } icingadb-web-1.5.0/library/Icingadb/Model/DowntimeHistory.php000066400000000000000000000117171527064444300241350ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Model for table `downtime_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, * the query needs a `downtime_history.service_id IS NULL OR downtime_history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property ?string $triggered_by_id * @property ?string $parent_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property DateTime $entry_time * @property string $author * @property ?string $cancelled_by * @property string $comment * @property bool $is_flexible * @property int $flexible_duration * @property DateTime $scheduled_start_time * @property DateTime $scheduled_end_time * @property DateTime $start_time * @property DateTime $end_time * @property ?string $scheduled_by * @property bool $has_been_cancelled * @property DateTime $trigger_time * @property ?DateTime $cancel_time */ class DowntimeHistory extends Model { public function getTableName() { return 'downtime_history'; } public function getKeyName() { return 'downtime_id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'triggered_by_id', 'parent_id', 'object_type', 'host_id', 'service_id', 'entry_time', 'author', 'cancelled_by', 'comment', 'is_flexible', 'flexible_duration', 'scheduled_start_time', 'scheduled_end_time', 'start_time', 'end_time', 'scheduled_by', 'has_been_cancelled', 'trigger_time', 'cancel_time' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'triggered_by_id' => t('Triggered By Downtime Id'), 'parent_id' => t('Parent Downtime Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'entry_time' => t('Downtime Entry Time'), 'author' => t('Downtime Author'), 'cancelled_by' => t('Downtime Cancelled By'), 'comment' => t('Downtime Comment'), 'is_flexible' => t('Downtime Is Flexible'), 'flexible_duration' => t('Downtime Flexible Duration'), 'scheduled_start_time' => t('Downtime Scheduled Start'), 'scheduled_end_time' => t('Downtime Scheduled End'), 'start_time' => t('Downtime Actual Start'), 'end_time' => t('Downtime Actual End'), 'has_been_cancelled' => t('Downtime Has Been Cancelled'), 'trigger_time' => t('Downtime Trigger Time'), 'cancel_time' => t('Downtime Cancel Time') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_flexible', 'has_been_cancelled' ])); $behaviors->add(new MillisecondTimestamp([ 'entry_time', 'scheduled_start_time', 'scheduled_end_time', 'start_time', 'end_time', 'trigger_time', 'cancel_time' ])); $behaviors->add(new Binary([ 'downtime_id', 'environment_id', 'endpoint_id', 'triggered_by_id', 'parent_id', 'host_id', 'service_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('triggered_by', self::class) ->setCandidateKey('triggered_by_id') ->setJoinType('LEFT'); $relations->belongsTo('parent', self::class) ->setCandidateKey('parent_id') ->setJoinType('LEFT'); $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('downtime_id') ->setForeignKey('downtime_history_id'); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/Endpoint.php000066400000000000000000000037511527064444300225440ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $zone_id */ class Endpoint extends Model { public function getTableName() { return 'endpoint'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Endpoint Name Checksum'), 'properties_checksum' => t('Endpoint Properties Checksum'), 'name' => t('Endpoint Name'), 'name_ci' => t('Endpoint Name (CI)'), 'zone_id' => t('Zone Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->hasMany('host', Host::class) ->setForeignKey('command_endpoint_id'); $relations->hasMany('service', Service::class) ->setForeignKey('command_endpoint_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/Environment.php000066400000000000000000000121231527064444300232610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $name */ class Environment extends Model { public function getTableName() { return 'environment'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'name' ]; } public function getColumnDefinitions() { return [ 'name' => t('Environment Name') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id' ])); } public function createRelations(Relations $relations) { $relations->hasMany('acknowledgement_history', AcknowledgementHistory::class); $relations->hasMany('action_url', ActionUrl::class); $relations->hasMany('alert_history', AlertHistory::class); $relations->hasMany('checkcommand', Checkcommand::class); $relations->hasMany('checkcommand_argument', CheckcommandArgument::class); $relations->hasMany('checkcommand_customvar', CheckcommandCustomvar::class); $relations->hasMany('checkcommand_envvar', CheckcommandEnvvar::class); $relations->hasMany('comment', Comment::class); $relations->hasMany('comment_history', CommentHistory::class); $relations->hasMany('config', Config::class); $relations->hasMany('customvar', Customvar::class); $relations->hasMany('customvar_flat', CustomvarFlat::class); $relations->hasMany('downtime', Downtime::class); $relations->hasMany('downtime_history', DowntimeHistory::class); $relations->hasMany('endpoint', Endpoint::class); $relations->hasMany('eventcommand', Eventcommand::class); $relations->hasMany('eventcommand_argument', EventcommandArgument::class); $relations->hasMany('eventcommand_customvar', EventcommandCustomvar::class); $relations->hasMany('eventcommand_envvar', EventcommandEnvvar::class); $relations->hasMany('flapping_history', FlappingHistory::class); $relations->hasMany('history', History::class); $relations->hasMany('host', Host::class); $relations->hasMany('host_customvar', HostCustomvar::class); $relations->hasMany('host_state', HostState::class); $relations->hasMany('hostgroup', Hostgroup::class); $relations->hasMany('hostgroup_customvar', HostgroupCustomvar::class); $relations->hasMany('hostgroup_member', HostgroupMember::class); $relations->hasMany('instance', Instance::class); $relations->hasMany('icon_image', IconImage::class); $relations->hasMany('notes_url', NotesUrl::class); $relations->hasMany('notification', Notification::class); $relations->hasMany('notification_customvar', NotificationCustomvar::class); $relations->hasMany('notification_history', NotificationHistory::class); //$relations->hasMany('notification_recipient', NotificationRecipient::class); $relations->hasMany('notification_user', NotificationUser::class); $relations->hasMany('notification_usergroup', NotificationUsergroup::class); $relations->hasMany('notificationcommand', Notificationcommand::class); $relations->hasMany('notificationcommand_argument', NotificationcommandArgument::class); $relations->hasMany('notificationcommand_customvar', NotificationcommandCustomvar::class); $relations->hasMany('notificationcommand_envvar', NotificationcommandEnvvar::class); $relations->hasMany('service', Service::class); $relations->hasMany('service_customvar', ServiceCustomvar::class); $relations->hasMany('service_state', ServiceState::class); $relations->hasMany('servicegroup', Servicegroup::class); $relations->hasMany('servicegroup_customvar', ServicegroupCustomvar::class); $relations->hasMany('servicegroup_member', ServicegroupMember::class); $relations->hasMany('state_history', StateHistory::class); $relations->hasMany('timeperiod', Timeperiod::class); $relations->hasMany('timeperiod_customvar', TimeperiodCustomvar::class); $relations->hasMany('timeperiod_override_exclude', TimeperiodOverrideExclude::class); $relations->hasMany('timeperiod_override_include', TimeperiodOverrideInclude::class); $relations->hasMany('timeperiod_range', TimeperiodRange::class); $relations->hasMany('user', User::class); $relations->hasMany('user_customvar', UserCustomvar::class); //$relations->hasMany('user_notification_history', UserNotificationHistory::class); $relations->hasMany('usergroup', Usergroup::class); $relations->hasMany('usergroup_customvar', UsergroupCustomvar::class); $relations->hasMany('usergroup_member', UsergroupMember::class); $relations->hasMany('zone', Zone::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Eventcommand.php000066400000000000000000000055571527064444300234120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property ?string $zone_id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $command * @property int $timeout */ class Eventcommand extends Model { public function getTableName() { return 'eventcommand'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'command', 'timeout' ]; } public function getColumnDefinitions() { return [ 'zone_id' => t('Zone Id'), 'environment_id' => t('Environment Id'), 'name_checksum' => t('Eventcommand Name Checksum'), 'properties_checksum' => t('Eventcommand Properties Checksum'), 'name' => t('Eventcommand Name'), 'name_ci' => t('Eventcommand Name (CI)'), 'command' => t('Eventcommand'), 'timeout' => t('Eventcommand Timeout') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); $behaviors->add(new Binary([ 'id', 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(EventcommandCustomvar::class) ->setThroughAlias('t_eventcommand_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(EventcommandCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(EventcommandCustomvar::class); $relations->hasMany('argument', EventcommandArgument::class); $relations->hasMany('envvar', EventcommandEnvvar::class); $relations->hasMany('host', Host::class); $relations->hasMany('service', Service::class); } } icingadb-web-1.5.0/library/Icingadb/Model/EventcommandArgument.php000066400000000000000000000054011527064444300251010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $eventcommand_id * @property string $argument_key * @property string $environment_id * @property string $properties_checksum * @property ?string $argument_value * @property ?int $argument_order * @property ?string $description * @property ?string $argument_key_override * @property string $repeat_key * @property string $required * @property ?string $set_if * @property ?string $separator * @property string $skip_key */ class EventcommandArgument extends Model { public function getTableName() { return 'eventcommand_argument'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'eventcommand_id', 'argument_key', 'environment_id', 'properties_checksum', 'argument_value', 'argument_order', 'description', 'argument_key_override', 'repeat_key', 'required', 'set_if', 'separator', 'skip_key' ]; } public function getColumnDefinitions() { return [ 'eventcommand_id' => t('Eventcommand Id'), 'argument_key' => t('Eventcommand Argument Name'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Eventcommand Argument Properties Checksum'), 'argument_value' => t('Eventcommand Argument Value'), 'argument_order' => t('Eventcommand Argument Position'), 'description' => t('Eventcommand Argument Description'), 'argument_key_override' => t('Eventcommand Argument Actual Name'), 'repeat_key' => t('Eventcommand Argument Repeated'), 'required' => t('Eventcommand Argument Required'), 'set_if' => t('Eventcommand Argument Condition'), 'skip_key' => t('Eventcommand Argument Without Name') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'eventcommand_id', 'environment_id', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('eventcommand', Eventcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/EventcommandCustomvar.php000066400000000000000000000026311527064444300253040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $eventcommand_id * @property string $customvar_id * @property string $environment_id */ class EventcommandCustomvar extends Model { public function getTableName() { return 'eventcommand_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'eventcommand_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'eventcommand_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('eventcommand', Eventcommand::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/EventcommandEnvvar.php000066400000000000000000000033571527064444300245700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $eventcommand_id * @property string $envvar_key * @property string $environment_id * @property string $properties_checksum * @property string $envvar_value */ class EventcommandEnvvar extends Model { public function getTableName() { return 'eventcommand_envvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'eventcommand_id', 'envvar_key', 'environment_id', 'properties_checksum', 'envvar_value' ]; } public function getColumnDefinitions() { return [ 'eventcommand_id' => t('Eventcommand Id'), 'envvar_key' => t('Eventcommand Envvar Name'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Eventcommand Envvar Properties Checksum'), 'envvar_value' => t('Eventcommand Envvar Value') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'eventcommand_id', 'environment_id', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('eventcommand', Eventcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/FlappingHistory.php000066400000000000000000000064311527064444300241040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Model for table `flapping_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, * the query needs a `flapping_history.service_id IS NULL OR flapping_history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property DateTime $start_time * @property ?DateTime $end_time * @property ?float $percent_state_change_start * @property ?float $percent_state_change_end * @property float $flapping_threshold_low * @property float $flapping_threshold_high */ class FlappingHistory extends Model { public function getTableName() { return 'flapping_history'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'start_time', 'end_time', 'percent_state_change_start', 'percent_state_change_end', 'flapping_threshold_low', 'flapping_threshold_high' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'start_time' => t('Flapping Start Time'), 'end_time' => t('Flapping End Time'), 'percent_state_change_start' => t('Flapping Percent State Change Start'), 'percent_state_change_end' => t('Flapping Percent State Change End'), 'flapping_threshold_low' => t('Flapping Threshold Low'), 'flapping_threshold_high' => t('Flapping Threshold High') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'start_time', 'end_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', 'host_id', 'service_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('id') ->setForeignKey('flapping_history_id'); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/History.php000066400000000000000000000120461527064444300224220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\ResultSet; /** * Model for table `history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid * this, the query needs a `history.service_id IS NULL OR history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property ?string $comment_history_id * @property ?string $downtime_history_id * @property ?string $flapping_history_id * @property ?string $notification_history_id * @property ?string $acknowledgement_history_id * @property ?string $state_history_id * @property string $event_type * @property DateTime $event_time * @property ?int $alert_count * * @property ResultSet|Query $alert */ class History extends Model { public function getTableName() { return 'history'; } public function getKeyName() { return 'id'; } public function getColumns() { $columns = [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'comment_history_id', 'downtime_history_id', 'flapping_history_id', 'notification_history_id', 'acknowledgement_history_id', 'state_history_id', 'event_type', 'event_time' ]; if (Backend::supportsNotifications()) { $columns[] = 'alert_count'; } return $columns; } public function getColumnDefinitions() { $columnDefinitions = [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'event_type' => t('Event Type'), 'event_time' => t('Event Time') ]; if (Backend::supportsNotifications()) { $columnDefinitions['alert_count'] = t('Alert Count'); } return $columnDefinitions; } public function getDefaultSort() { return 'history.event_time desc, history.event_type desc'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'event_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', 'host_id', 'service_id', 'comment_history_id', 'downtime_history_id', 'flapping_history_id', 'notification_history_id', 'acknowledgement_history_id', 'state_history_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup', 'alert_history' => 'alert' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); $relations->hasOne('comment', CommentHistory::class) ->setCandidateKey('comment_history_id') ->setForeignKey('comment_id') ->setJoinType('LEFT'); $relations->hasOne('downtime', DowntimeHistory::class) ->setCandidateKey('downtime_history_id') ->setForeignKey('downtime_id') ->setJoinType('LEFT'); $relations->hasOne('flapping', FlappingHistory::class) ->setCandidateKey('flapping_history_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->hasOne('notification', NotificationHistory::class) ->setCandidateKey('notification_history_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->hasOne('acknowledgement', AcknowledgementHistory::class) ->setCandidateKey('acknowledgement_history_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->hasOne('state', StateHistory::class) ->setCandidateKey('state_history_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->hasMany('alert', AlertHistory::class) ->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/Host.php000066400000000000000000000272131527064444300217000ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Behavior\BoolCast; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Defaults; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\ResultSet; use ipl\Stdlib\Filter; /** * Host model. * * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property string $address * @property string $address6 * @property ?string $address_bin * @property ?string $address6_bin * @property string $checkcommand_name * @property string $checkcommand_id * @property int $max_check_attempts * @property string $check_timeperiod_name * @property ?string $check_timeperiod_id * @property ?int $check_timeout * @property int $check_interval * @property int $check_retry_interval * @property bool $active_checks_enabled * @property bool $passive_checks_enabled * @property bool $event_handler_enabled * @property bool $notifications_enabled * @property bool $flapping_enabled * @property float $flapping_threshold_low * @property float $flapping_threshold_high * @property bool $perfdata_enabled * @property string $eventcommand_name * @property ?string $eventcommand_id * @property bool $is_volatile * @property ?string $action_url_id * @property ?string $notes_url_id * @property string $notes * @property ?string $icon_image_id * @property string $icon_image_alt * @property string $zone_name * @property ?string $zone_id * @property string $command_endpoint_name * @property ?string $command_endpoint_id * @property ?int $total_children * * @property Query|HostState $state * @property Query|DependencyNode $dependency_node * @property Query|UnreachableParent $unreachable_parent */ class Host extends Model { use Auth; public function getTableName() { return 'host'; } public function getKeyName() { return 'id'; } public function getColumns() { $columns = [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'address', 'address6', 'address_bin', 'address6_bin', 'checkcommand_name', 'checkcommand_id', 'max_check_attempts', 'check_timeperiod_name', 'check_timeperiod_id', 'check_timeout', 'check_interval', 'check_retry_interval', 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'notifications_enabled', 'flapping_enabled', 'flapping_threshold_low', 'flapping_threshold_high', 'perfdata_enabled', 'eventcommand_name', 'eventcommand_id', 'is_volatile', 'action_url_id', 'notes_url_id', 'notes', 'icon_image_id', 'icon_image_alt', 'zone_name', 'zone_id', 'command_endpoint_name', 'command_endpoint_id' ]; if (Backend::supportsDependencies()) { $columns[] = 'total_children'; } return $columns; } public function getColumnDefinitions() { $columns = [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Host Name Checksum'), 'properties_checksum' => t('Host Properties Checksum'), 'name' => t('Host Name'), 'name_ci' => t('Host Name (CI)'), 'display_name' => t('Host Display Name'), 'address' => t('Host Address (IPv4)'), 'address6' => t('Host Address (IPv6)'), 'address_bin' => t('Host Address (IPv4, Binary)'), 'address6_bin' => t('Host Address (IPv6, Binary)'), 'checkcommand_name' => t('Checkcommand Name'), 'checkcommand_id' => t('Checkcommand Id'), 'max_check_attempts' => t('Host Max Check Attempts'), 'check_timeperiod_name' => t('Check Timeperiod Name'), 'check_timeperiod_id' => t('Check Timeperiod Id'), 'check_timeout' => t('Host Check Timeout'), 'check_interval' => t('Host Check Interval'), 'check_retry_interval' => t('Host Check Retry Interval'), 'active_checks_enabled' => t('Host Active Checks Enabled'), 'passive_checks_enabled' => t('Host Passive Checks Enabled'), 'event_handler_enabled' => t('Host Event Handler Enabled'), 'notifications_enabled' => t('Host Notifications Enabled'), 'flapping_enabled' => t('Host Flapping Enabled'), 'flapping_threshold_low' => t('Host Flapping Threshold Low'), 'flapping_threshold_high' => t('Host Flapping Threshold High'), 'perfdata_enabled' => t('Host Performance Data Enabled'), 'eventcommand_name' => t('Eventcommand Name'), 'eventcommand_id' => t('Eventcommand Id'), 'is_volatile' => t('Host Is Volatile'), 'action_url_id' => t('Action Url Id'), 'notes_url_id' => t('Notes Url Id'), 'notes' => t('Host Notes'), 'icon_image_id' => t('Icon Image Id'), 'icon_image_alt' => t('Icon Image Alt'), 'zone_name' => t('Zone Name'), 'zone_id' => t('Zone Id'), 'command_endpoint_name' => t('Endpoint Name'), 'command_endpoint_id' => t('Endpoint Id') ]; if (Backend::supportsDependencies()) { $columns['total_children'] = t('Total Children'); } return $columns; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'host.display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'notifications_enabled', 'flapping_enabled', 'is_volatile' ])); $behaviors->add(new ReRoute([ 'child' => 'dependency_node.child', 'parent' => 'dependency_node.parent', 'servicegroup' => 'service.servicegroup', 'user' => 'notification.user', 'usergroup' => 'notification.usergroup' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'address_bin', 'address6_bin', 'checkcommand_id', 'check_timeperiod_id', 'eventcommand_id', 'action_url_id', 'notes_url_id', 'icon_image_id', 'zone_id', 'command_endpoint_id' ])); } public function createDefaults(Defaults $defaults) { $defaults->add('vars', function (self $subject) { if (! $subject->customvar_flat instanceof ResultSet) { $this->applyRestrictions($subject->customvar_flat); } $vars = []; foreach ($subject->customvar_flat as $customVar) { $vars[$customVar->flatname] = $customVar->flatvalue; } return $vars; }); $defaults->add('customvars', function (self $subject) { // In contrast to customvar_flat, we cannot apply restrictions here as denylists and protections // require the flattened values to work. To retrieve only customvars the user has access to, the // `vars` property should be used instead. $vars = []; foreach ($subject->customvar as $customVar) { $vars[$customVar->name] = json_decode($customVar->value, true); } return $vars; }); } public function createRelations(Relations $relations) { $relations->hasOne('state', HostState::class)->setJoinType('LEFT'); $relations->hasOne('dependency_node', DependencyNode::class) ->setFilter(Filter::unlike('service_id', '*')) ->setJoinType('LEFT'); $relations->hasOne('unreachable_parent', UnreachableParent::class) ->setFilter(Filter::unlike('service_id', '*')) ->setJoinType('LEFT'); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('eventcommand', Eventcommand::class) ->setJoinType('LEFT'); $relations->belongsTo('checkcommand', Checkcommand::class); $relations->belongsTo('timeperiod', Timeperiod::class) ->setCandidateKey('check_timeperiod_id') ->setJoinType('LEFT'); $relations->belongsTo('action_url', ActionUrl::class) ->setCandidateKey('action_url_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->belongsTo('notes_url', NotesUrl::class) ->setCandidateKey('notes_url_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->belongsTo('icon_image', IconImage::class) ->setCandidateKey('icon_image_id') ->setJoinType('LEFT'); $relations->belongsTo('zone', Zone::class); $relations->belongsTo('endpoint', Endpoint::class) ->setCandidateKey('command_endpoint_id'); $relations->belongsToMany('customvar', Customvar::class) ->through(HostCustomvar::class) ->setThroughAlias('t_host_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(HostCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(HostCustomvar::class); $relations->belongsToMany('hostgroup', Hostgroup::class) ->through(HostgroupMember::class); $relations->hasMany('comment', Comment::class) ->setFilter(Filter::equal('object_type', 'host')) ->setJoinType('LEFT'); $relations->hasMany('downtime', Downtime::class) ->setFilter(Filter::equal('object_type', 'host')) ->setJoinType('LEFT'); $relations->hasMany('sla_history_downtime', SlaHistoryDowntime::class)->setJoinType('LEFT'); $relations->hasMany('history', History::class) ->setFilter(Filter::equal('object_type', 'host')); $relations->hasMany('sla_history_state', SlaHistoryState::class); $relations->hasMany('notification', Notification::class) ->setFilter(Filter::unlike('service_id', '*')) ->setJoinType('LEFT'); $relations->hasMany('notification_history', NotificationHistory::class) ->setFilter(Filter::equal('object_type', 'host')); $relations->hasMany('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/HostCustomvar.php000066400000000000000000000025411527064444300236010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $host_id * @property string $customvar_id * @property string $environment_id */ class HostCustomvar extends Model { public function getTableName() { return 'host_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'host_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'host_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setForeignKey('customvar_id') ->setCandidateKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/HostState.php000066400000000000000000000072451527064444300227040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\HostStates; use ipl\Orm\Relations; /** * Host state model. */ class HostState extends State { public function getTableName() { return 'host_state'; } public function getKeyName() { return 'host_id'; } public function getColumnDefinitions() { $columns = [ 'environment_id' => t('Environment Id'), 'state_type' => t('Host State Type'), 'soft_state' => t('Host Soft State'), 'hard_state' => t('Host Hard State'), 'previous_soft_state' => t('Host Previous Soft State'), 'previous_hard_state' => t('Host Previous Hard State'), 'check_attempt' => t('Host Check Attempt No.'), 'severity' => t('Host State Severity'), 'output' => t('Host Output'), 'long_output' => t('Host Long Output'), 'performance_data' => t('Host Performance Data'), 'normalized_performance_data' => t('Host Normalized Performance Data'), 'check_commandline' => t('Host Check Commandline'), 'is_problem' => t('Host Has Problem'), 'is_handled' => t('Host Is Handled'), 'is_reachable' => t('Host Is Reachable'), 'is_flapping' => t('Host Is Flapping'), 'is_overdue' => t('Host Check Is Overdue'), 'is_acknowledged' => t('Host Is Acknowledged'), 'acknowledgement_comment_id' => t('Acknowledgement Comment Id'), 'in_downtime' => t('Host In Downtime'), 'execution_time' => t('Host Check Execution Time'), 'latency' => t('Host Check Latency'), 'check_timeout' => t('Host Check Timeout'), 'check_source' => t('Host Check Source'), 'scheduling_source' => t('Host Scheduling Source'), 'last_update' => t('Host Last Update'), 'last_state_change' => t('Host Last State Change'), 'next_check' => t('Host Next Check'), 'next_update' => t('Host Next Update') ]; if (Backend::supportsDependencies()) { $columns['affects_children'] = t('Host Affects Children'); $columns['is_sticky_acknowledgement'] = t('Acknowledgement Is Sticky'); } if (Backend::supportsNotifications()) { $columns['acknowledgement_set_time'] = t('Host Acknowledgement Set Time'); } return $columns; } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class); $relations->hasOne('last_comment', LastHostComment::class) ->setCandidateKey('last_comment_id') ->setForeignKey('id') ->setJoinType('LEFT'); } public function getStateText(): string { return HostStates::text($this->soft_state); } public function getStateTextTranslated(): string { return HostStates::translated($this->soft_state); } } icingadb-web-1.5.0/library/Icingadb/Model/Hostgroup.php000066400000000000000000000057141527064444300227570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property ?string $zone_id */ class Hostgroup extends Model { public function getTableName() { return 'hostgroup'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Hostgroup Name Checksum'), 'properties_checksum' => t('Hostgroup Properties Checksum'), 'name' => t('Hostgroup Name'), 'name_ci' => t('Hostgroup Name (CI)'), 'display_name' => t('Hostgroup Display Name'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'servicegroup' => 'service.servicegroup', 'parent' => 'host.dependency_node.parent', 'child' => 'host.dependency_node.child' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(HostgroupCustomvar::class) ->setThroughAlias('t_hostgroup_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(HostgroupCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(HostgroupCustomvar::class); $relations->belongsToMany('host', Host::class) ->through(HostgroupMember::class); $relations->belongsToMany('service', Service::class) ->through(HostgroupMember::class); } } icingadb-web-1.5.0/library/Icingadb/Model/HostgroupCustomvar.php000066400000000000000000000026041527064444300246560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $hostgroup_id * @property string $customvar_id * @property string $environment_id */ class HostgroupCustomvar extends Model { public function getTableName() { return 'hostgroup_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'hostgroup_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'hostgroup_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('hostgroup', Hostgroup::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/HostgroupMember.php000066400000000000000000000025151527064444300241030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $host_id * @property string $hostgroup_id * @property string $environment_id */ class HostgroupMember extends Model { public function getTableName() { return 'hostgroup_member'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'host_id', 'hostgroup_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'host_id', 'hostgroup_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('hostgroup', Hostgroup::class); $relations->belongsTo('host', Host::class); $relations->hasMany('service', Service::class) ->setForeignKey('host_id') ->setCandidateKey('host_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/Hostgroupsummary.php000066400000000000000000000230461527064444300243730ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\UnionModel; use ipl\Orm\UnionQuery; use ipl\Sql\Adapter\Pgsql; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Sql\Select; /** * @property string $id * @property string $display_name * @property string $name_ci * @property string $name * @property int $hosts_down_handled * @property int $hosts_down_unhandled * @property int $hosts_pending * @property int $hosts_total * @property int $hosts_up * @property int $hosts_severity * @property int $services_critical_handled * @property int $services_critical_unhandled * @property int $services_ok * @property int $services_pending * @property int $services_total * @property int $services_unknown_handled * @property int $services_unknown_unhandled * @property int $services_warning_handled * @property int $services_warning_unhandled */ class Hostgroupsummary extends UnionModel { public static function on(Connection $db): UnionQuery { $q = parent::on($db); $q->on( Query::ON_SELECT_ASSEMBLED, function () use ($q) { $auth = new class () { use Auth; }; $auth->assertColumnRestrictions($q->getFilter()); } ); $q->on($q::ON_SELECT_ASSEMBLED, function (Select $select) use ($q) { $model = $q->getModel(); $groupBy = $q->getResolver()->qualifyColumnsAndAliases((array) $model->getKeyName(), $model, false); // For PostgreSQL, ALL non-aggregate SELECT columns must appear in the GROUP BY clause: if ($q->getDb()->getAdapter() instanceof Pgsql) { /** * Ignore Expressions, i.e. aggregate functions {@see getColumns()}, * which do not need to be added to the GROUP BY. */ $candidates = array_filter($select->getColumns(), 'is_string'); // Remove already considered columns for the GROUP BY, i.e. the primary key. $candidates = array_diff_assoc($candidates, $groupBy); $groupBy = array_merge($groupBy, $candidates); } $select->groupBy($groupBy); }); return $q; } public function getTableName() { return 'hostgroup'; } public function getKeyName() { return ['id' => 'hostgroup_id']; } public function getColumns() { return [ 'name' => 'hostgroup_name', 'name_ci' => 'hostgroup_name_ci', 'display_name' => 'hostgroup_display_name', 'hosts_down_handled' => new Expression( 'SUM(CASE WHEN host_state = 1' . ' AND (host_handled = \'y\' OR host_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'hosts_down_unhandled' => new Expression( 'SUM(CASE WHEN host_state = 1' . ' AND host_handled = \'n\' AND host_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_pending' => new Expression( 'SUM(CASE WHEN host_state = 99 THEN 1 ELSE 0 END)' ), 'hosts_total' => new Expression( 'SUM(CASE WHEN host_id IS NOT NULL THEN 1 ELSE 0 END)' ), 'hosts_up' => new Expression( 'SUM(CASE WHEN host_state = 0 THEN 1 ELSE 0 END)' ), 'hosts_severity' => new Expression('MAX(host_severity)'), 'services_critical_handled' => new Expression( 'SUM(CASE WHEN service_state = 2' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_critical_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 2' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_ok' => new Expression( 'SUM(CASE WHEN service_state = 0 THEN 1 ELSE 0 END)' ), 'services_pending' => new Expression( 'SUM(CASE WHEN service_state = 99 THEN 1 ELSE 0 END)' ), 'services_total' => new Expression( 'SUM(CASE WHEN service_id IS NOT NULL THEN 1 ELSE 0 END)' ), 'services_unknown_handled' => new Expression( 'SUM(CASE WHEN service_state = 3' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_unknown_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 3' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_warning_handled' => new Expression( 'SUM(CASE WHEN service_state = 1' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_warning_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 1' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ) ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'display_name'; } public function getUnions(): array { $unions = [ [ Host::class, [ 'hostgroup', 'state' ], [ 'hostgroup_id' => 'hostgroup.id', 'hostgroup_name' => 'hostgroup.name', 'hostgroup_name_ci' => 'hostgroup.name_ci', 'hostgroup_display_name' => 'hostgroup.display_name', 'host_id' => 'host.id', 'host_state' => 'state.soft_state', 'host_handled' => 'state.is_handled', 'host_reachable' => 'state.is_reachable', 'host_severity' => 'state.severity', 'service_id' => new Expression('NULL'), 'service_state' => new Expression('NULL'), 'service_handled' => new Expression('NULL'), 'service_reachable' => new Expression('NULL') ] ], [ Service::class, [ 'hostgroup', 'state' ], [ 'hostgroup_id' => 'hostgroup.id', 'hostgroup_name' => 'hostgroup.name', 'hostgroup_name_ci' => 'hostgroup.name_ci', 'hostgroup_display_name' => 'hostgroup.display_name', 'host_id' => new Expression('NULL'), 'host_state' => new Expression('NULL'), 'host_handled' => new Expression('NULL'), 'host_reachable' => new Expression('NULL'), 'host_severity' => new Expression('0'), 'service_id' => 'service.id', 'service_state' => 'state.soft_state', 'service_handled' => 'state.is_handled', 'service_reachable' => 'state.is_reachable' ] ], [ Hostgroup::class, [], [ 'hostgroup_id' => 'hostgroup.id', 'hostgroup_name' => 'hostgroup.name', 'hostgroup_name_ci' => 'hostgroup.name_ci', 'hostgroup_display_name' => 'hostgroup.display_name', 'host_id' => new Expression('NULL'), 'host_state' => new Expression('NULL'), 'host_handled' => new Expression('NULL'), 'host_reachable' => new Expression('NULL'), 'host_severity' => new Expression('0'), 'service_id' => new Expression('NULL'), 'service_state' => new Expression('NULL'), 'service_handled' => new Expression('NULL'), 'service_reachable' => new Expression('NULL') ] ] ]; return $unions; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id' ])); // This is because there is no better way (new Hostgroup())->createBehaviors($behaviors); } public function createRelations(Relations $relations) { // This is because there is no better way (new Hostgroup())->createRelations($relations); } public function getColumnDefinitions() { // This is because there is no better way return (new Hostgroup())->getColumnDefinitions(); } } icingadb-web-1.5.0/library/Icingadb/Model/HoststateSummary.php000066400000000000000000000063471527064444300243240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Sql\Connection; use ipl\Sql\Expression; /** * @property int $hosts_acknowledged * @property int $hosts_active_checks_enabled * @property int $hosts_passive_checks_enabled * @property int $hosts_down_handled * @property int $hosts_down_unhandled * @property int $hosts_event_handler_enabled * @property int $hosts_flapping_enabled * @property int $hosts_notifications_enabled * @property int $hosts_pending * @property int $hosts_problems_unacknowledged * @property int $hosts_total * @property int $hosts_up */ class HoststateSummary extends Host { public function getSummaryColumns() { return [ 'hosts_acknowledged' => new Expression( 'SUM(CASE WHEN host_state.is_acknowledged = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_active_checks_enabled' => new Expression( 'SUM(CASE WHEN host.active_checks_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_passive_checks_enabled' => new Expression( 'SUM(CASE WHEN host.passive_checks_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_down_handled' => new Expression( 'SUM(CASE WHEN host_state.soft_state = 1' . ' AND (host_state.is_handled = \'y\' OR host_state.is_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'hosts_down_unhandled' => new Expression( 'SUM(CASE WHEN host_state.soft_state = 1' . ' AND host_state.is_handled = \'n\' AND host_state.is_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_event_handler_enabled' => new Expression( 'SUM(CASE WHEN host.event_handler_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_flapping_enabled' => new Expression( 'SUM(CASE WHEN host.flapping_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_notifications_enabled' => new Expression( 'SUM(CASE WHEN host.notifications_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'hosts_pending' => new Expression( 'SUM(CASE WHEN host_state.soft_state = 99 THEN 1 ELSE 0 END)' ), 'hosts_problems_unacknowledged' => new Expression( 'SUM(CASE WHEN host_state.is_problem = \'y\'' . ' AND host_state.is_acknowledged = \'n\' THEN 1 ELSE 0 END)' ), 'hosts_total' => new Expression( 'SUM(CASE WHEN host.id IS NOT NULL THEN 1 ELSE 0 END)' ), 'hosts_up' => new Expression( 'SUM(CASE WHEN host_state.soft_state = 0 THEN 1 ELSE 0 END)' ) ]; } public static function on(Connection $db) { $q = parent::on($db); $q->utilize('state'); /** @var static $m */ $m = $q->getModel(); $q->columns($m->getSummaryColumns()); return $q; } public function getColumns() { return array_merge(parent::getColumns(), $this->getSummaryColumns()); } public function getDefaultSort() { return null; } } icingadb-web-1.5.0/library/Icingadb/Model/IconImage.php000066400000000000000000000024051527064444300226120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $icon_image * @property string $environment_id */ class IconImage extends Model { public function getTableName() { return 'icon_image'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'icon_image', 'environment_id' ]; } public function getColumnDefinitions() { return [ 'icon_image' => t('Icon Image'), 'environment_id' => t('Environment Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->hasMany('host', Host::class); $relations->hasMany('service', Service::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Instance.php000066400000000000000000000065711527064444300225330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Backend; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property DateTime $heartbeat * @property bool $responsible * @property bool $icinga2_active_host_checks_enabled * @property bool $icinga2_active_service_checks_enabled * @property bool $icinga2_event_handlers_enabled * @property bool $icinga2_flap_detection_enabled * @property bool $icinga2_notifications_enabled * @property bool $icinga2_performance_data_enabled * @property DateTime $icinga2_start_time * @property string $icinga2_version * @property string $icingadb_version * @property ?bool $notifications_healthy * @property string $icingadb_service_user * @property ?string $notifications_discovered_socket_path * @property bool $notifications_synchronize_with_database */ class Instance extends Model { public function getTableName() { return 'icingadb_instance'; } public function getKeyName() { return 'id'; } public function getColumns() { $columns = [ 'environment_id', 'endpoint_id', 'heartbeat', 'responsible', 'icinga2_active_host_checks_enabled', 'icinga2_active_service_checks_enabled', 'icinga2_event_handlers_enabled', 'icinga2_flap_detection_enabled', 'icinga2_notifications_enabled', 'icinga2_performance_data_enabled', 'icinga2_start_time', 'icinga2_version' ]; if (Backend::supportsDependencies()) { $columns[] = 'icingadb_version'; } if (Backend::supportsNotifications()) { $columns[] = 'notifications_healthy'; $columns[] = 'icingadb_service_user'; $columns[] = 'notifications_discovered_socket_path'; $columns[] = 'notifications_synchronize_with_database'; } return $columns; } public function getDefaultSort() { return ['responsible desc', 'heartbeat desc']; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'heartbeat', 'icinga2_start_time' ])); $behaviors->add(new BoolCast([ 'responsible', 'icinga2_active_host_checks_enabled', 'icinga2_active_service_checks_enabled', 'icinga2_event_handlers_enabled', 'icinga2_flap_detection_enabled', 'icinga2_notifications_enabled', 'icinga2_performance_data_enabled', 'notifications_healthy', 'notifications_synchronize_with_database' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('endpoint', Endpoint::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/LastHostComment.php000066400000000000000000000010601527064444300240370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Relations; class LastHostComment extends Comment { public function createRelations(Relations $relations): void { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsTo('state', HostState::class) ->setForeignKey('last_comment_id') ->setCandidateKey('id'); } } icingadb-web-1.5.0/library/Icingadb/Model/LastServiceComment.php000066400000000000000000000010661527064444300245300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Relations; class LastServiceComment extends Comment { public function createRelations(Relations $relations): void { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsTo('state', ServiceState::class) ->setForeignKey('last_comment_id') ->setCandidateKey('id'); } } icingadb-web-1.5.0/library/Icingadb/Model/NotesUrl.php000066400000000000000000000030351527064444300225320ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ActionAndNoteUrl; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string[] $notes_url * @property string $environment_id */ class NotesUrl extends Model { public function getTableName() { return 'notes_url'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notes_url', 'environment_id' ]; } public function getColumnDefinitions() { return [ 'notes_url' => t('Notes Url'), 'environment_id' => t('Environment Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ActionAndNoteUrl(['notes_url'])); $behaviors->add(new Binary([ 'id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->hasMany('host', Host::class) ->setCandidateKey('id') ->setForeignKey('notes_url_id'); $relations->hasMany('service', Service::class) ->setCandidateKey('id') ->setForeignKey('notes_url_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/Notification.php000066400000000000000000000115571527064444300234150ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\Bitmask; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $host_id * @property ?string $service_id * @property string $notificationcommand_id * @property ?int $times_begin * @property ?int $times_end * @property int $notification_interval * @property ?string $timeperiod_id * @property string[] $states * @property string[] $types * @property ?string $zone_id */ class Notification extends Model { public function getTableName() { return 'notification'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'host_id', 'service_id', 'notificationcommand_id', 'times_begin', 'times_end', 'notification_interval', 'timeperiod_id', 'states', 'types', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Notification Name Checksum'), 'properties_checksum' => t('Notification Properties Checksum'), 'name' => t('Notification Name'), 'name_ci' => t('Notification Name (CI)'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'notificationcommand_id' => t('Notificationcommand Id'), 'times_begin' => t('Notification Escalate After'), 'times_end' => t('Notification Escalate Until'), 'notification_interval' => t('Notification Interval'), 'timeperiod_id' => t('Timeperiod Id'), 'states' => t('Notification State Filter'), 'types' => t('Notification Type Filter'), 'zone_id' => t('Zone Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); $behaviors->add(new Bitmask([ 'states' => [ 'ok' => 1, 'warning' => 2, 'critical' => 4, 'unknown' => 8, 'up' => 16, 'down' => 32 ], 'types' => [ 'downtime_start' => 1, 'downtime_end' => 2, 'downtime_removed' => 4, 'custom' => 8, 'ack' => 16, 'problem' => 32, 'recovery' => 64, 'flapping_start' => 128, 'flapping_end' => 256 ] ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'host_id', 'service_id', 'notificationcommand_id', 'timeperiod_id', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class); $relations->belongsTo('notificationcommand', Notificationcommand::class); $relations->belongsTo('timeperiod', Timeperiod::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(NotificationCustomvar::class) ->setThroughAlias('t_notification_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(NotificationCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(NotificationCustomvar::class); $relations->belongsToMany('user', User::class) ->through('notification_recipient'); $relations->belongsToMany('usergroup', Usergroup::class) ->through('notification_recipient'); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationCustomvar.php000066400000000000000000000026311527064444300253120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notification_id * @property string $customvar_id * @property string $environment_id */ class NotificationCustomvar extends Model { public function getTableName() { return 'notification_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notification_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notification_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notification', Notification::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationHistory.php000066400000000000000000000075501527064444300247750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Model for table `notification_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, the * query needs a `notification_history.service_id IS NULL OR notification_history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property string $notification_id * @property string $type * @property DateTime $send_time * @property int $state * @property int $previous_hard_state * @property string $author * @property string $text * @property int $users_notified */ class NotificationHistory extends Model { public function getTableName() { return 'notification_history'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'notification_id', 'type', 'send_time', 'state', 'previous_hard_state', 'author', 'text', 'users_notified' ]; } public function getColumnDefinitions() { return [ 'id' => t('History Id'), 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'notification_id' => t('Notification Id'), 'type' => t('Notification Type'), 'send_time' => t('Notification Sent On'), 'state' => t('Hard State'), 'previous_hard_state' => t('Previous Hard State'), 'author' => t('Notification Author'), 'text' => t('Notification Text'), 'users_notified' => t('Contacts Notified') ]; } public function getSearchColumns() { return ['text']; } public function getDefaultSort() { return 'notification_history.send_time desc'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'send_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', 'host_id', 'service_id', 'notification_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('id') ->setForeignKey('notification_history_id'); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); $relations->belongsTo('notification', Notification::class)->setJoinType('LEFT'); $relations->belongsToMany('user', User::class) ->through('user_notification_history'); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationUser.php000066400000000000000000000023251527064444300242450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notification_id * @property string $user_id * @property string $environment_id */ class NotificationUser extends Model { public function getTableName() { return 'notification_user'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notification_id', 'user_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notification_id', 'user_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notification', Notification::class); $relations->belongsTo('user', User::class); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationUsergroup.php000066400000000000000000000023701527064444300253220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notification_id * @property string $usergroup_id * @property string $environment_id */ class NotificationUsergroup extends Model { public function getTableName() { return 'notification_usergroup'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notification_id', 'usergroup_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notification_id', 'usergroup_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notification', Notification::class); $relations->belongsTo('usergroup', Usergroup::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Notificationcommand.php000066400000000000000000000060561527064444300247520ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property ?string $zone_id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $command * @property int $timeout */ class Notificationcommand extends Model { public function getTableName() { return 'notificationcommand'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'command', 'timeout' ]; } public function getColumnDefinitions() { return [ 'zone_id' => t('Zone Id'), 'environment_id' => t('Environment Id'), 'name_checksum' => t('Notificationcommand Name Checksum'), 'properties_checksum' => t('Notificationcommand Properties Checksum'), 'name' => t('Notificationcommand Name'), 'name_ci' => t('Notificationcommand Name (CI)'), 'command' => t('Notificationcommand'), 'timeout' => t('Notificationcommand Timeout') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'host' => 'notification.host', 'hostgroup' => 'notification.host.hostgroup', 'service' => 'notification.service', 'servicegroup' => 'notification.service.servicegroup' ])); $behaviors->add(new Binary([ 'id', 'zone_id', 'environment_id', 'name_checksum', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(NotificationcommandCustomvar::class) ->setThroughAlias('t_notificationcommand_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(NotificationcommandCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(NotificationcommandCustomvar::class); $relations->hasMany('notification', Notification::class); $relations->hasMany('argument', NotificationcommandArgument::class); $relations->hasMany('envvar', NotificationcommandEnvvar::class); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationcommandArgument.php000066400000000000000000000056131527064444300264530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notificationcommand_id * @property string $argument_key * @property string $environment_id * @property string $properties_checksum * @property ?string $argument_value * @property ?int $argument_order * @property ?string $description * @property ?string $argument_key_override * @property string $repeat_key * @property string $required * @property ?string $set_if * @property ?string $separator * @property string $skip_key */ class NotificationcommandArgument extends Model { public function getTableName() { return 'notificationcommand_argument'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notificationcommand_id', 'argument_key', 'environment_id', 'properties_checksum', 'argument_value', 'argument_order', 'description', 'argument_key_override', 'repeat_key', 'required', 'set_if', 'separator', 'skip_key' ]; } public function getColumnDefinitions() { return [ 'notificationcommand_id' => t('Notificationcommand Id'), 'argument_key' => t('Notificationcommand Argument Name'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Notificationcommand Argument Properties Checksum'), 'argument_value' => t('Notificationcommand Argument Value'), 'argument_order' => t('Notificationcommand Argument Position'), 'description' => t('Notificationcommand Argument Description'), 'argument_key_override' => t('Notificationcommand Argument Actual Name'), 'repeat_key' => t('Notificationcommand Argument Repeated'), 'required' => t('Notificationcommand Argument Required'), 'set_if' => t('Notificationcommand Argument Condition'), 'skip_key' => t('Notificationcommand Argument Without Name') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notificationcommand_id', 'environment_id', 'properties_checksum' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notificationcommand', Notificationcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationcommandCustomvar.php000066400000000000000000000027121527064444300266510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notificationcommand_id * @property string $customvar_id * @property string $environment_id */ class NotificationcommandCustomvar extends Model { public function getTableName() { return 'notificationcommand_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notificationcommand_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notificationcommand_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notificationcommand', Notificationcommand::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/NotificationcommandEnvvar.php000066400000000000000000000035011527064444300261240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $notificationcommand_id * @property string $envvar_key * @property string $environment_id * @property string $properties_checksum * @property string $envvar_value */ class NotificationcommandEnvvar extends Model { public function getTableName() { return 'notificationcommand_envvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'notificationcommand_id', 'envvar_key', 'environment_id', 'properties_checksum', 'envvar_value' ]; } public function getColumnDefinitions() { return [ 'notificationcommand_id' => t('Notificationcommand Id'), 'envvar_key' => t('Notificationcommand Envvar Key'), 'environment_id' => t('Environment Id'), 'properties_checksum' => t('Notificationcommand Envvar Properties Checksum'), 'envvar_value' => t('Notificationcommand Envvar Value') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'notificationcommand_id', 'environment_id', 'properties_checksum', ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('notificationcommand', Notificationcommand::class); } } icingadb-web-1.5.0/library/Icingadb/Model/RedundancyGroup.php000066400000000000000000000044001527064444300240650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Defaults; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; /** * Redundancy group model. * * @property string $id * @property string $environment_id * @property string $display_name * * @property Query|RedundancyGroupState $state * @property Query|DependencyNode $dependency_node * * @property RedundancyGroupSummary $summary */ class RedundancyGroup extends Model { use Auth; public function getTableName(): string { return 'redundancy_group'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'environment_id', 'display_name' ]; } public function getColumnDefinitions(): array { return [ 'display_name' => t('Redundancy Group Display Name') ]; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'environment_id' ])); $behaviors->add(new ReRoute([ 'child' => 'dependency_node.child', 'parent' => 'dependency_node.parent', 'from' => 'dependency_node' // Compatibility with dependencies < v1.0.4 only ])); } public function createRelations(Relations $relations): void { $relations->hasOne('state', RedundancyGroupState::class) ->setJoinType('LEFT'); $relations->hasOne('dependency_node', DependencyNode::class) ->setJoinType('LEFT'); } public function createDefaults(Defaults $defaults): void { $defaults->add('summary', function (RedundancyGroup $group) { $summary = RedundancyGroupSummary::for($group->id, Backend::getDb()); $this->applyRestrictions($summary); return $summary->first(); }); } } icingadb-web-1.5.0/library/Icingadb/Model/RedundancyGroupState.php000066400000000000000000000047731527064444300251030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Icons; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Web\Widget\Icon; /** * Redundancy group state model. * * @property string $id * @property string $environment_id * @property string $redundancy_group_id * @property bool $failed * @property bool $is_reachable * @property DateTime $last_state_change * * @property RedundancyGroup|Query $redundancy_group */ class RedundancyGroupState extends Model { public function getTableName(): string { return 'redundancy_group_state'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'environment_id', 'redundancy_group_id', 'failed', 'is_reachable', 'last_state_change' ]; } public function getColumnDefinitions() { return [ 'failed' => t('Redundancy Group Failed'), 'is_reachable' => t('Redundancy Group Is Reachable'), 'last_state_change' => t('Redundancy Group Last State Change') ]; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'environment_id', 'redundancy_group_id' ])); $behaviors->add(new BoolCast([ 'failed', 'is_reachable' ])); $behaviors->add(new MillisecondTimestamp([ 'last_state_change' ])); } public function createRelations(Relations $relations): void { $relations->belongsTo('redundancy_group', RedundancyGroup::class); } /** * Get the state text for the redundancy group state * * Do not use this method to label the state of a redundancy group. * * @return string */ public function getStateText(): string { return $this->failed ? 'critical' : 'ok'; } /** * Get the state icon * * @return ?Icon */ public function getIcon(): ?Icon { if (! $this->is_reachable) { return new Icon(Icons::UNREACHABLE); } return null; } } icingadb-web-1.5.0/library/Icingadb/Model/RedundancyGroupSummary.php000066400000000000000000000154531527064444300254550ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use InvalidArgumentException; use ipl\Orm\Query; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Stdlib\Filter; /** * Redundancy group's summary * * @property int $nodes_total * @property int $nodes_ok * @property int $nodes_problem_handled * @property int $nodes_problem_unhandled * @property int $nodes_pending * @property int $nodes_unknown_handled * @property int $nodes_unknown_unhandled * @property int $nodes_warning_handled * @property int $nodes_warning_unhandled * @property int $nodes_acknowledged * @property int $nodes_problems_unacknowledged */ class RedundancyGroupSummary extends DependencyNode { public function getSummaryColumns(): array { return [ 'nodes_total' => new Expression('COUNT(*)'), 'nodes_ok' => new Expression( 'SUM(CASE' . ' WHEN %s IS NOT NULL THEN (CASE WHEN %s = 0 THEN 1 ELSE 0 END)' . ' WHEN %s = 0 THEN 1' . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'host.state.soft_state', ] ), 'nodes_problem_handled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 2 AND (%s = 'y' OR %s = 'n') THEN 1 ELSE 0 END)" . " WHEN %s = 1 AND (%s = 'y' OR %s = 'n') THEN 1" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable', 'host.state.soft_state', 'host.state.is_handled', 'host.state.is_reachable', ] ), 'nodes_problem_unhandled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 2 AND (%s = 'n' AND %s = 'y') THEN 1 ELSE 0 END)" . " WHEN %s = 1 AND (%s = 'n' AND %s = 'y') THEN 1" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable', 'host.state.soft_state', 'host.state.is_handled', 'host.state.is_reachable', ] ), 'nodes_pending' => new Expression( 'SUM(CASE' . ' WHEN %s IS NOT NULL THEN (CASE WHEN %s = 99 THEN 1 ELSE 0 END)' . ' WHEN %s = 99 THEN 1' . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'host.state.soft_state', ] ), 'nodes_unknown_handled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 3 AND (%s = 'y' OR %s = 'n') THEN 1 ELSE 0 END)" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable' ] ), 'nodes_unknown_unhandled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 3 AND (%s = 'n' AND %s = 'y') THEN 1 ELSE 0 END)" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable' ] ), 'nodes_warning_handled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 1 AND (%s = 'y' OR %s = 'n') THEN 1 ELSE 0 END)" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable' ] ), 'nodes_warning_unhandled' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 1 AND (%s = 'n' AND %s = 'y') THEN 1 ELSE 0 END)" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.soft_state', 'service.state.is_handled', 'service.state.is_reachable' ] ), 'nodes_acknowledged' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 'y' THEN 1 ELSE 0 END)" . " WHEN %s = 'y' THEN 1" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.is_acknowledged', 'host.state.is_acknowledged', ] ), 'nodes_problems_unacknowledged' => new Expression( 'SUM(CASE' . " WHEN %s IS NOT NULL THEN (CASE WHEN %s = 'y' AND %s = 'n' THEN 1 ELSE 0 END)" . " WHEN %s = 'y' AND %s = 'n' THEN 1" . ' ELSE 0' . ' END)', [ 'service_id', 'service.state.is_problem', 'service.state.is_acknowledged', 'host.state.is_problem', 'host.state.is_acknowledged', ] ) ]; } public static function on(Connection $db): Query { $q = parent::on($db); /** @var static $m */ $m = $q->getModel(); $q->columns($m->getSummaryColumns()); return $q; } /** * Get the summary query for the given redundancy group id * * @param string $groupId The redundancy group id for summary * @param Connection $db Db connection to use * * @return Query */ public static function for(string $groupId, Connection $db): Query { return self::on($db) ->filter(Filter::equal('child.redundancy_group.id', $groupId)); } public function getColumns(): array { return array_merge(parent::getColumns(), $this->getSummaryColumns()); } public function getDefaultSort(): array { return []; } } icingadb-web-1.5.0/library/Icingadb/Model/Schema.php000066400000000000000000000017771527064444300221720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; /** * Schema model * * @property string $id * @property int $version * @property DateTime $timestamp */ class Schema extends Model { public function getTableName(): string { return 'icingadb_schema'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'version', 'timestamp' ]; } public function getDefaultSort(): array { return ['timestamp desc']; } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary(['id'])); $behaviors->add(new MillisecondTimestamp(['timestamp'])); } } icingadb-web-1.5.0/library/Icingadb/Model/Service.php000066400000000000000000000255251527064444300223670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use ipl\Orm\Behavior\BoolCast; use Icinga\Module\Icingadb\Model\Behavior\HasProblematicParent; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Defaults; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\ResultSet; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $host_id * @property string $name * @property string $name_ci * @property string $display_name * @property string $checkcommand_name * @property string $checkcommand_id * @property int $max_check_attempts * @property string $check_timeperiod_name * @property ?string $check_timeperiod_id * @property ?int $check_timeout * @property int $check_interval * @property int $check_retry_interval * @property bool $active_checks_enabled * @property bool $passive_checks_enabled * @property bool $event_handler_enabled * @property bool $notifications_enabled * @property bool $flapping_enabled * @property float $flapping_threshold_low * @property float $flapping_threshold_high * @property bool $perfdata_enabled * @property string $eventcommand_name * @property ?string $eventcommand_id * @property bool $is_volatile * @property ?string $action_url_id * @property ?string $notes_url_id * @property string $notes * @property ?string $icon_image_id * @property string $icon_image_alt * @property string $zone_name * @property ?string $zone_id * @property string $command_endpoint_name * @property ?string $command_endpoint_id * @property ?int $total_children * * @property Query|ServiceState $state * @property Query|DependencyNode $dependency_node * @property Query|UnreachableParent $unreachable_parent */ class Service extends Model { use Auth; public function getTableName() { return 'service'; } public function getKeyName() { return 'id'; } public function getColumns() { $columns = [ 'environment_id', 'name_checksum', 'properties_checksum', 'host_id', 'name', 'name_ci', 'display_name', 'checkcommand_name', 'checkcommand_id', 'max_check_attempts', 'check_timeperiod_name', 'check_timeperiod_id', 'check_timeout', 'check_interval', 'check_retry_interval', 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'notifications_enabled', 'flapping_enabled', 'flapping_threshold_low', 'flapping_threshold_high', 'perfdata_enabled', 'eventcommand_name', 'eventcommand_id', 'is_volatile', 'action_url_id', 'notes_url_id', 'notes', 'icon_image_id', 'icon_image_alt', 'zone_name', 'zone_id', 'command_endpoint_name', 'command_endpoint_id' ]; if (Backend::supportsDependencies()) { $columns[] = 'total_children'; } return $columns; } public function getColumnDefinitions() { $columns = [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Service Name Checksum'), 'properties_checksum' => t('Service Properties Checksum'), 'host_id' => t('Host Id'), 'name' => t('Service Name'), 'name_ci' => t('Service Name (CI)'), 'display_name' => t('Service Display Name'), 'checkcommand_name' => t('Checkcommand Name'), 'checkcommand_id' => t('Checkcommand Id'), 'max_check_attempts' => t('Service Max Check Attempts'), 'check_timeperiod_name' => t('Check Timeperiod Name'), 'check_timeperiod_id' => t('Check Timeperiod Id'), 'check_timeout' => t('Service Check Timeout'), 'check_interval' => t('Service Check Interval'), 'check_retry_interval' => t('Service Check Retry Interval'), 'active_checks_enabled' => t('Service Active Checks Enabled'), 'passive_checks_enabled' => t('Service Passive Checks Enabled'), 'event_handler_enabled' => t('Service Event Handler Enabled'), 'notifications_enabled' => t('Service Notifications Enabled'), 'flapping_enabled' => t('Service Flapping Enabled'), 'flapping_threshold_low' => t('Service Flapping Threshold Low'), 'flapping_threshold_high' => t('Service Flapping Threshold High'), 'perfdata_enabled' => t('Service Performance Data Enabled'), 'eventcommand_name' => t('Eventcommand Name'), 'eventcommand_id' => t('Eventcommand Id'), 'is_volatile' => t('Service Is Volatile'), 'action_url_id' => t('Action Url Id'), 'notes_url_id' => t('Notes Url Id'), 'notes' => t('Service Notes'), 'icon_image_id' => t('Icon Image Id'), 'icon_image_alt' => t('Icon Image Alt'), 'zone_name' => t('Zone Name'), 'zone_id' => t('Zone Id'), 'command_endpoint_name' => t('Endpoint Name'), 'command_endpoint_id' => t('Endpoint Id'), ]; if (Backend::supportsDependencies()) { $columns['total_children'] = t('Total Children'); } return $columns; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'service.display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'notifications_enabled', 'flapping_enabled', 'is_volatile' ])); $behaviors->add(new ReRoute([ 'child' => 'dependency_node.child', 'parent' => 'dependency_node.parent', 'user' => 'notification.user', 'usergroup' => 'notification.usergroup' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'host_id', 'checkcommand_id', 'check_timeperiod_id', 'eventcommand_id', 'action_url_id', 'notes_url_id', 'icon_image_id', 'zone_id', 'command_endpoint_id' ])); if (Backend::supportsDependencies()) { $behaviors->add(new HasProblematicParent()); } } public function createDefaults(Defaults $defaults) { $defaults->add('vars', function (self $subject) { if (! $subject->customvar_flat instanceof ResultSet) { $this->applyRestrictions($subject->customvar_flat); } $vars = []; foreach ($subject->customvar_flat as $customVar) { $vars[$customVar->flatname] = $customVar->flatvalue; } return $vars; }); $defaults->add('customvars', function (self $subject) { // In contrast to customvar_flat, we cannot apply restrictions here as denylists and protections // require the flattened values to work. To retrieve only customvars the user has access to, the // `vars` property should be used instead. $vars = []; foreach ($subject->customvar as $customVar) { $vars[$customVar->name] = json_decode($customVar->value, true); } return $vars; }); } public function createRelations(Relations $relations) { $relations->hasOne('state', ServiceState::class)->setJoinType('LEFT'); $relations->hasOne('dependency_node', DependencyNode::class)->setJoinType('LEFT'); $relations->hasOne('unreachable_parent', UnreachableParent::class)->setJoinType('LEFT'); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('checkcommand', Checkcommand::class); $relations->belongsTo('timeperiod', Timeperiod::class) ->setCandidateKey('check_timeperiod_id') ->setJoinType('LEFT'); $relations->belongsTo('eventcommand', Eventcommand::class) ->setJoinType('LEFT'); $relations->belongsTo('action_url', ActionUrl::class) ->setCandidateKey('action_url_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->belongsTo('notes_url', NotesUrl::class) ->setCandidateKey('notes_url_id') ->setForeignKey('id') ->setJoinType('LEFT'); $relations->belongsTo('icon_image', IconImage::class) ->setCandidateKey('icon_image_id') ->setJoinType('LEFT'); $relations->belongsTo('zone', Zone::class); $relations->belongsTo('endpoint', Endpoint::class) ->setCandidateKey('command_endpoint_id'); $relations->belongsToMany('customvar', Customvar::class) ->through(ServiceCustomvar::class) ->setThroughAlias('t_service_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(ServiceCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(ServiceCustomvar::class); $relations->belongsToMany('servicegroup', Servicegroup::class) ->through(ServicegroupMember::class); $relations->belongsToMany('hostgroup', Hostgroup::class) ->through(HostgroupMember::class); $relations->hasMany('comment', Comment::class)->setJoinType('LEFT'); $relations->hasMany('downtime', Downtime::class)->setJoinType('LEFT'); $relations->hasMany('history', History::class); $relations->hasMany('notification', Notification::class)->setJoinType('LEFT'); $relations->hasMany('notification_history', NotificationHistory::class); } } icingadb-web-1.5.0/library/Icingadb/Model/ServiceCustomvar.php000066400000000000000000000025661527064444300242730ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $service_id * @property string $customvar_id * @property string $environment_id */ class ServiceCustomvar extends Model { public function getTableName() { return 'service_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'service_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'service_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('service', Service::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setForeignKey('customvar_id') ->setCandidateKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/ServiceState.php000066400000000000000000000074761527064444300233750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\ServiceStates; use ipl\Orm\Relations; /** * Service state model. * * @property string $service_id */ class ServiceState extends State { public function getTableName() { return 'service_state'; } public function getKeyName() { return 'service_id'; } public function getColumnDefinitions() { $columns = [ 'environment_id' => t('Environment Id'), 'state_type' => t('Service State Type'), 'soft_state' => t('Service Soft State'), 'hard_state' => t('Service Hard State'), 'previous_soft_state' => t('Service Previous Soft State'), 'previous_hard_state' => t('Service Previous Hard State'), 'check_attempt' => t('Service Check Attempt No.'), 'severity' => t('Service State Severity'), 'output' => t('Service Output'), 'long_output' => t('Service Long Output'), 'performance_data' => t('Service Performance Data'), 'normalized_performance_data' => t('Service Normalized Performance Data'), 'check_commandline' => t('Service Check Commandline'), 'is_problem' => t('Service Has Problem'), 'is_handled' => t('Service Is Handled'), 'is_reachable' => t('Service Is Reachable'), 'is_flapping' => t('Service Is Flapping'), 'is_overdue' => t('Service Check Is Overdue'), 'is_acknowledged' => t('Service Is Acknowledged'), 'acknowledgement_comment_id' => t('Acknowledgement Comment Id'), 'in_downtime' => t('Service In Downtime'), 'execution_time' => t('Service Check Execution Time'), 'latency' => t('Service Check Latency'), 'check_timeout' => t('Service Check Timeout'), 'check_source' => t('Service Check Source'), 'scheduling_source' => t('Service Scheduling Source'), 'last_update' => t('Service Last Update'), 'last_state_change' => t('Service Last State Change'), 'next_check' => t('Service Next Check'), 'next_update' => t('Service Next Update') ]; if (Backend::supportsDependencies()) { $columns['affects_children'] = t('Service Affects Children'); $columns['is_sticky_acknowledgement'] = t('Acknowledgement Is Sticky'); } if (Backend::supportsNotifications()) { $columns['acknowledgement_set_time'] = t('Service Acknowledgement Set Time'); } return $columns; } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('service', Service::class); $relations->hasOne('last_comment', LastServiceComment::class) ->setCandidateKey('last_comment_id') ->setForeignKey('id') ->setJoinType('LEFT'); } public function getStateText(): string { return ServiceStates::text($this->soft_state); } public function getStateTextTranslated(): string { return ServiceStates::translated($this->soft_state); } } icingadb-web-1.5.0/library/Icingadb/Model/Servicegroup.php000066400000000000000000000056541527064444300234450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property ?string $zone_id */ class Servicegroup extends Model { public function getTableName() { return 'servicegroup'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Servicegroup Name Checksum'), 'properties_checksum' => t('Servicegroup Properties Checksum'), 'name' => t('Servicegroup Name'), 'name_ci' => t('Servicegroup Name (CI)'), 'display_name' => t('Servicegroup Display Name'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'host' => 'service.host', 'hostgroup' => 'service.hostgroup', 'parent' => 'service.dependency_node.parent', 'child' => 'service.dependency_node.child' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(ServicegroupCustomvar::class) ->setThroughAlias('t_servicegroup_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(ServicegroupCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(ServicegroupCustomvar::class); $relations->belongsToMany('service', Service::class) ->through(ServicegroupMember::class); } } icingadb-web-1.5.0/library/Icingadb/Model/ServicegroupCustomvar.php000066400000000000000000000026311527064444300253410ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $servicegroup_id * @property string $customvar_id * @property string $environment_id */ class ServicegroupCustomvar extends Model { public function getTableName() { return 'servicegroup_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'servicegroup_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'servicegroup_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('servicegroup', Servicegroup::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/ServicegroupMember.php000066400000000000000000000023501527064444300245630ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $service_id * @property string $servicegroup_id * @property string $environment_id */ class ServicegroupMember extends Model { public function getTableName() { return 'servicegroup_member'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'service_id', 'servicegroup_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'service_id', 'servicegroup_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('servicegroup', Servicegroup::class); $relations->belongsTo('service', Service::class); } } icingadb-web-1.5.0/library/Icingadb/Model/ServicegroupSummary.php000066400000000000000000000160311527064444300250120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\UnionModel; use ipl\Orm\UnionQuery; use ipl\Sql\Adapter\Pgsql; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Sql\Select; /** * @property string $id * @property string $display_name * @property string $name_ci * @property string $name * @property int $services_critical_handled * @property int $services_critical_unhandled * @property int $services_ok * @property int $services_pending * @property int $services_total * @property int $services_unknown_handled * @property int $services_unknown_unhandled * @property int $services_warning_handled * @property int $services_warning_unhandled * @property int $services_severity */ class ServicegroupSummary extends UnionModel { public static function on(Connection $db): UnionQuery { $q = parent::on($db); $q->on( Query::ON_SELECT_ASSEMBLED, function () use ($q) { $auth = new class () { use Auth; }; $auth->assertColumnRestrictions($q->getFilter()); } ); $q->on($q::ON_SELECT_ASSEMBLED, function (Select $select) use ($q) { $model = $q->getModel(); $groupBy = $q->getResolver()->qualifyColumnsAndAliases((array) $model->getKeyName(), $model, false); // For PostgreSQL, ALL non-aggregate SELECT columns must appear in the GROUP BY clause: if ($q->getDb()->getAdapter() instanceof Pgsql) { /** * Ignore Expressions, i.e. aggregate functions {@see getColumns()}, * which do not need to be added to the GROUP BY. */ $candidates = array_filter($select->getColumns(), 'is_string'); // Remove already considered columns for the GROUP BY, i.e. the primary key. $candidates = array_diff_assoc($candidates, $groupBy); $groupBy = array_merge($groupBy, $candidates); } $select->groupBy($groupBy); }); return $q; } public function getTableName() { return 'servicegroup'; } public function getKeyName() { return ['id' => 'servicegroup_id']; } public function getColumns() { return [ 'name' => 'servicegroup_name', 'name_ci' => 'servicegroup_name_ci', 'display_name' => 'servicegroup_display_name', 'services_critical_handled' => new Expression( 'SUM(CASE WHEN service_state = 2' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_critical_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 2' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_ok' => new Expression( 'SUM(CASE WHEN service_state = 0 THEN 1 ELSE 0 END)' ), 'services_pending' => new Expression( 'SUM(CASE WHEN service_state = 99 THEN 1 ELSE 0 END)' ), 'services_total' => new Expression( 'SUM(CASE WHEN service_id IS NOT NULL THEN 1 ELSE 0 END)' ), 'services_unknown_handled' => new Expression( 'SUM(CASE WHEN service_state = 3' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_unknown_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 3' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_warning_handled' => new Expression( 'SUM(CASE WHEN service_state = 1' . ' AND (service_handled = \'y\' OR service_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_warning_unhandled' => new Expression( 'SUM(CASE WHEN service_state = 1' . ' AND service_handled = \'n\' AND service_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_severity' => new Expression('MAX(service_severity)') ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'display_name'; } public function getUnions(): array { $unions = [ [ Service::class, [ 'servicegroup', 'state' ], [ 'servicegroup_id' => 'servicegroup.id', 'servicegroup_name' => 'servicegroup.name', 'servicegroup_name_ci' => 'servicegroup.name_ci', 'servicegroup_display_name' => 'servicegroup.display_name', 'service_id' => 'service.id', 'service_state' => 'state.soft_state', 'service_handled' => 'state.is_handled', 'service_reachable' => 'state.is_reachable', 'service_severity' => 'state.severity' ] ], [ Servicegroup::class, [], [ 'servicegroup_id' => 'servicegroup.id', 'servicegroup_name' => 'servicegroup.name', 'servicegroup_name_ci' => 'servicegroup.name_ci', 'servicegroup_display_name' => 'servicegroup.display_name', 'service_id' => new Expression('NULL'), 'service_state' => new Expression('NULL'), 'service_handled' => new Expression('NULL'), 'service_reachable' => new Expression('NULL'), 'service_severity' => new Expression('0') ] ] ]; return $unions; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id' ])); // This is because there is no better way (new Servicegroup())->createBehaviors($behaviors); } public function createRelations(Relations $relations) { // This is because there is no better way (new Servicegroup())->createRelations($relations); } public function getColumnDefinitions() { // This is because there is no better way return (new Servicegroup())->getColumnDefinitions(); } } icingadb-web-1.5.0/library/Icingadb/Model/ServicestateSummary.php000066400000000000000000000111661527064444300250020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Sql\Connection; use ipl\Sql\Expression; /** * @property int $services_acknowledged * @property int $services_active_checks_enabled * @property int $services_passive_checks_enabled * @property int $services_critical_handled * @property int $services_critical_unhandled * @property int $services_event_handler_enabled * @property int $services_flapping_enabled * @property int $services_notifications_enabled * @property int $services_ok * @property int $services_pending * @property int $services_problems_unacknowledged * @property int $services_total * @property int $services_unknown_handled * @property int $services_unknown_unhandled * @property int $services_warning_handled * @property int $services_warning_unhandled */ class ServicestateSummary extends Service { public function getSummaryColumns() { return [ 'services_acknowledged' => new Expression( 'SUM(CASE WHEN service_state.is_acknowledged = \'y\' THEN 1 ELSE 0 END)' ), 'services_active_checks_enabled' => new Expression( 'SUM(CASE WHEN service.active_checks_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'services_passive_checks_enabled' => new Expression( 'SUM(CASE WHEN service.passive_checks_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'services_critical_handled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 2' . ' AND (service_state.is_handled = \'y\' OR service_state.is_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_critical_unhandled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 2' . ' AND service_state.is_handled = \'n\' AND service_state.is_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_event_handler_enabled' => new Expression( 'SUM(CASE WHEN service.event_handler_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'services_flapping_enabled' => new Expression( 'SUM(CASE WHEN service.flapping_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'services_notifications_enabled' => new Expression( 'SUM(CASE WHEN service.notifications_enabled = \'y\' THEN 1 ELSE 0 END)' ), 'services_ok' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 0 THEN 1 ELSE 0 END)' ), 'services_pending' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 99 THEN 1 ELSE 0 END)' ), 'services_problems_unacknowledged' => new Expression( 'SUM(CASE WHEN service_state.is_problem = \'y\'' . ' AND service_state.is_acknowledged = \'n\' THEN 1 ELSE 0 END)' ), 'services_total' => new Expression( 'SUM(CASE WHEN service.id IS NOT NULL THEN 1 ELSE 0 END)' ), 'services_unknown_handled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 3' . ' AND (service_state.is_handled = \'y\' OR service_state.is_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_unknown_unhandled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 3' . ' AND service_state.is_handled = \'n\' AND service_state.is_reachable = \'y\' THEN 1 ELSE 0 END)' ), 'services_warning_handled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 1' . ' AND (service_state.is_handled = \'y\' OR service_state.is_reachable = \'n\') THEN 1 ELSE 0 END)' ), 'services_warning_unhandled' => new Expression( 'SUM(CASE WHEN service_state.soft_state = 1' . ' AND service_state.is_handled = \'n\' AND service_state.is_reachable = \'y\' THEN 1 ELSE 0 END)' ) ]; } public static function on(Connection $db) { $q = parent::on($db); $q->utilize('state'); /** @var static $m */ $m = $q->getModel(); $q->columns($m->getSummaryColumns()); return $q; } public function getColumns() { return array_merge(parent::getColumns(), $this->getSummaryColumns()); } public function getDefaultSort() { return null; } public function getSearchColumns() { return ['name_ci', 'host.name_ci']; } } icingadb-web-1.5.0/library/Icingadb/Model/SlaHistoryDowntime.php000066400000000000000000000041521527064444300245700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Relations; /** * Model for table `sla_history_downtime` * * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property string $downtime_id * @property string $downtime_start * @property string $downtime_end */ class SlaHistoryDowntime extends Model { public function getTableName() { return 'sla_history_downtime'; } public function getKeyName() { return ['host_id', 'service_id']; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'downtime_id', 'downtime_start', 'downtime_end' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'downtime_start', 'downtime_end' ])); $behaviors->add(new Binary([ 'environment_id', 'endpoint_id', 'host_id', 'service_id', 'downtime_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); $relations->belongsTo('downtime', Downtime::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/SlaHistoryState.php000066400000000000000000000037351527064444300240700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Relations; /** * Model for table `sla_history_state` * * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property string $downtime_id * @property string $downtime_start * @property string $downtime_end */ class SlaHistoryState extends Model { public function getTableName() { return 'sla_history_state'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'event_time', 'hard_state', 'previous_hard_state' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'event_time' ])); $behaviors->add(new Binary([ 'environment_id', 'endpoint_id', 'host_id', 'service_id', 'downtime_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('host', Host::class)->setJoinType('LEFT'); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/State.php000066400000000000000000000155231527064444300220440ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Icons; use ipl\Orm\Behavior\BoolCast; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Web\Widget\Icon; /** * Base class for the {@link HostState} and {@link ServiceState} models providing common columns. * * @property string $id * @property string $environment_id The environment id * @property string $state_type The state type (hard or soft) * @property int $soft_state The current soft state code (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN) * @property int $hard_state The current hard state code (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN) * @property int $previous_soft_state The previous soft state code (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN) * @property int $previous_hard_state The previous hard state code (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN) * @property int $check_attempt The check attempt count * @property int $severity The calculated severity * @property ?string $output The check output * @property ?string $long_output The long check output * @property ?string $performance_data The performance data * @property ?string $normalized_performance_data The normalized performance data (converted ms to s, GiB to byte etc.) * @property ?string $check_commandline The executed check command * @property bool $is_problem Whether in non-OK state * @property bool $is_handled Whether the state is handled * @property bool $is_reachable Whether the node is reachable * @property bool $is_flapping Whether the state is flapping * @property bool $is_overdue Whether the check is overdue * @property bool $is_acknowledged Whether the state is acknowledged * @property bool $is_sticky_acknowledgement Whether the acknowledgement is sticky * @property ?string $acknowledgement_comment_id The id of acknowledgement comment * @property ?DateTime $acknowledgement_set_time The time of the acknowledgement * @property ?string $last_comment_id The id of last comment * @property bool $in_downtime Whether the node is in downtime * @property ?int $execution_time The check execution time * @property ?int $latency The check latency * @property ?int $check_timeout The check timeout * @property ?string $check_source The name of the node that executes the check * @property ?string $scheduling_source The name of the node that schedules the check * @property ?DateTime $last_update The time when the node was last updated * @property DateTime $last_state_change The time when the node last got a status change * @property DateTime $next_check The time when the node will execute the next check * @property DateTime $next_update The time when the next check of the node is expected to end * @property bool $affects_children Whether any of the children is affected if there is a problem */ abstract class State extends Model { /** * Get the state as the textual representation * * @return string */ abstract public function getStateText(): string; /** * Get the state as the translated textual representation * * @return string */ abstract public function getStateTextTranslated(): string; public function getColumns() { $columns = [ 'environment_id', 'state_type', 'soft_state', 'hard_state', 'previous_soft_state', 'previous_hard_state', 'check_attempt', 'severity', 'output', 'long_output', 'performance_data', 'normalized_performance_data', 'check_commandline', 'is_problem', 'is_handled', 'is_reachable', 'is_flapping', 'is_overdue', 'is_acknowledged', 'acknowledgement_comment_id', 'last_comment_id', 'in_downtime', 'execution_time', 'latency', 'check_timeout', 'check_source', 'scheduling_source', 'last_update', 'last_state_change', 'next_check', 'next_update' ]; if (Backend::supportsDependencies()) { $columns[] = 'affects_children'; $columns[] = 'is_sticky_acknowledgement'; } if (Backend::supportsNotifications()) { $columns[] = 'acknowledgement_set_time'; } return $columns; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new BoolCast([ 'is_problem', 'is_handled', 'is_reachable', 'is_flapping', 'is_overdue', 'is_acknowledged', 'is_sticky_acknowledgement', 'in_downtime', 'affects_children' ])); $behaviors->add(new MillisecondTimestamp([ 'last_update', 'last_state_change', 'next_check', 'next_update', 'acknowledgement_set_time' ])); $behaviors->add(new Binary([ $this->getKeyName(), 'environment_id', 'acknowledgement_comment_id', 'last_comment_id' ])); } /** * Get the state icon * * @return Icon|null */ public function getIcon(): ?Icon { $icon = null; switch (true) { case $this->is_acknowledged: $icon = new Icon(Icons::IS_ACKNOWLEDGED, [ 'title' => sprintf('%s (%s)', strtoupper($this->getStateTextTranslated()), t('is acknowledged')) ]); break; case $this->in_downtime: $icon = new Icon(Icons::IN_DOWNTIME, [ 'title' => sprintf( '%s (%s)', strtoupper($this->getStateTextTranslated()), $this->is_handled ? t('handled by Downtime') : t('in Downtime') ) ]); break; case $this->is_flapping: $icon = new Icon(Icons::IS_FLAPPING, [ 'title' => sprintf('%s (%s)', strtoupper($this->getStateTextTranslated()), t('is flapping')) ]); break; case ! $this->is_reachable: $icon = new Icon(Icons::HOST_DOWN, [ 'title' => sprintf('%s (%s)', strtoupper($this->getStateTextTranslated()), t('is unreachable')) ]); break; case $this->is_handled: $icon = new Icon(Icons::HOST_DOWN); break; } return $icon; } } icingadb-web-1.5.0/library/Icingadb/Model/StateHistory.php000066400000000000000000000073331527064444300234260ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use DateTime; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * Model for table `state_history` * * Please note that using this model will fetch history entries for decommissioned services. To avoid this, * the query needs a `state_history.service_id IS NULL OR state_history_service.id IS NOT NULL` where. * * @property string $id * @property string $environment_id * @property ?string $endpoint_id * @property string $object_type * @property string $host_id * @property ?string $service_id * @property DateTime $event_time * @property string $state_type * @property int $soft_state * @property int $hard_state * @property int $check_attempt * @property int $previous_soft_state * @property int $previous_hard_state * @property ?string $output * @property ?string $long_output * @property int $max_check_attempts * @property ?string $check_source * @property ?string $scheduling_source */ class StateHistory extends Model { public function getTableName() { return 'state_history'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'endpoint_id', 'object_type', 'host_id', 'service_id', 'event_time', 'state_type', 'soft_state', 'hard_state', 'check_attempt', 'previous_soft_state', 'previous_hard_state', 'output', 'long_output', 'max_check_attempts', 'check_source', 'scheduling_source' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'endpoint_id' => t('Endpoint Id'), 'object_type' => t('Object Type'), 'host_id' => t('Host Id'), 'service_id' => t('Service Id'), 'event_time' => t('Event Time'), 'state_type' => t('Event State Type'), 'soft_state' => t('Event Soft State'), 'hard_state' => t('Event Hard State'), 'check_attempt' => t('Event Check Attempt No.'), 'previous_soft_state' => t('Event Previous Soft State'), 'previous_hard_state' => t('Event Previous Hard State'), 'output' => t('Event Output'), 'long_output' => t('Event Long Output'), 'max_check_attempts' => t('Event Max Check Attempts'), 'check_source' => t('Event Check Source') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new MillisecondTimestamp([ 'event_time' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'endpoint_id', 'host_id', 'service_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('endpoint', Endpoint::class); $relations->belongsTo('environment', Environment::class); $relations->belongsTo('history', History::class) ->setCandidateKey('id') ->setForeignKey('state_history_id'); $relations->belongsTo('host', Host::class); $relations->belongsTo('service', Service::class)->setJoinType('LEFT'); } } icingadb-web-1.5.0/library/Icingadb/Model/TacticalStateSummary.php000066400000000000000000000102511527064444300250600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Common\Auth; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Orm\UnionModel; use ipl\Sql\Connection; use ipl\Sql\Expression; /** * @property string $type * @property ?int $hosts_acknowledged * @property ?int $hosts_active_checks_enabled * @property ?int $hosts_passive_checks_enabled * @property ?int $hosts_down_handled * @property ?int $hosts_down_unhandled * @property ?int $hosts_event_handler_enabled * @property ?int $hosts_flapping_enabled * @property ?int $hosts_notifications_enabled * @property ?int $hosts_pending * @property ?int $hosts_problems_unacknowledged * @property ?int $hosts_total * @property ?int $hosts_up * @property ?int $services_acknowledged * @property ?int $services_active_checks_enabled * @property ?int $services_passive_checks_enabled * @property ?int $services_critical_handled * @property ?int $services_critical_unhandled * @property ?int $services_event_handler_enabled * @property ?int $services_flapping_enabled * @property ?int $services_notifications_enabled * @property ?int $services_ok * @property ?int $services_pending * @property ?int $services_problems_unacknowledged * @property ?int $services_total * @property ?int $services_unknown_handled * @property ?int $services_unknown_unhandled * @property ?int $services_warning_handled * @property ?int $services_warning_unhandled */ class TacticalStateSummary extends UnionModel { public static function on(Connection $db) { $q = parent::on($db); $q->on( Query::ON_SELECT_ASSEMBLED, function () use ($q) { $auth = new class () { use Auth; }; $auth->assertColumnRestrictions($q->getFilter()); } ); return $q; } public function getTableName(): string { return 'tactical_summary'; } public function getKeyName(): string { return 'type'; } public function getColumns(): array { return array_merge( array_keys((new HoststateSummary())->getSummaryColumns()), array_keys((new ServicestateSummary())->getSummaryColumns()) ); } public function getColumnDefinitions(): array { // This is because there is still no better way return (new ServicestateSummary())->getColumnDefinitions(); } public function getDefaultSort(): array { return []; } public function getSearchColumns(): array { return ['service.name_ci', 'host.name_ci']; } public function createRelations(Relations $relations): void { // This is because there is still no better way (new ServicestateSummary())->createRelations($relations); // And because of that a fake service relation is needed $relations->belongsTo('service', Service::class); } public function getUnions(): array { $hostStateSummaryColumns = array_keys((new HoststateSummary())->getSummaryColumns()); $serviceStateSummaryColumns = array_keys((new ServicestateSummary())->getSummaryColumns()); return [ [ HoststateSummary::class, [], array_merge( ['type' => new Expression("'host_state'")], $hostStateSummaryColumns, array_combine( $serviceStateSummaryColumns, array_fill(0, count($serviceStateSummaryColumns), new Expression('NULL')) ) ) ], [ ServicestateSummary::class, [], array_merge( ['type' => new Expression("'service_state'")], array_combine( $hostStateSummaryColumns, array_fill(0, count($hostStateSummaryColumns), new Expression('NULL')) ), $serviceStateSummaryColumns ) ] ]; } } icingadb-web-1.5.0/library/Icingadb/Model/Timeperiod.php000066400000000000000000000061321527064444300230610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property string $prefer_includes * @property ?string $zone_id */ class Timeperiod extends Model { public function getTableName() { return 'timeperiod'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'prefer_includes', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Timeperiod Name Checksum'), 'properties_checksum' => t('Timeperiod Properties Checksum'), 'name' => t('Timeperiod Name'), 'name_ci' => t('Timeperiod Name (CI)'), 'display_name' => t('Timeperiod Display Name'), 'prefer_includes' => t('Timeperiod Prefer Includes'), 'zone_id' => t('Zone Id') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(TimeperiodCustomvar::class) ->setThroughAlias('t_timeperiod_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(TimeperiodCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(TimeperiodCustomvar::class); // TODO: Decide how to establish the override relations $relations->hasMany('range', TimeperiodRange::class); $relations->hasMany('host', Host::class) ->setForeignKey('check_timeperiod_id'); $relations->hasMany('Notification', Notification::class); $relations->hasMany('service', Service::class) ->setForeignKey('check_timeperiod_id'); $relations->hasMany('user', User::class); } } icingadb-web-1.5.0/library/Icingadb/Model/TimeperiodCustomvar.php000066400000000000000000000026131527064444300247650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $timeperiod_id * @property string $customvar_id * @property string $environment_id */ class TimeperiodCustomvar extends Model { public function getTableName() { return 'timeperiod_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'timeperiod_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'timeperiod_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('timeperiod', Timeperiod::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/TimeperiodOverrideExclude.php000066400000000000000000000025521527064444300260750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $timeperiod_id * @property string $override_id * @property string $environment_id */ class TimeperiodOverrideExclude extends Model { public function getTableName() { return 'timeperiod_override_exclude'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'timeperiod_id', 'override_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'timeperiod_id', 'override_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('timeperiod', Timeperiod::class); // TODO: `timeperiod` cannot be used again, find a better name $relations->belongsTo('timeperiod', Timeperiod::class) ->setCandidateKey('override_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/TimeperiodOverrideInclude.php000066400000000000000000000025521527064444300260670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $timeperiod_id * @property string $override_id * @property string $environment_id */ class TimeperiodOverrideInclude extends Model { public function getTableName() { return 'timeperiod_override_include'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'timeperiod_id', 'override_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'timeperiod_id', 'override_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('timeperiod', Timeperiod::class); // TODO: `timeperiod` cannot be used again, find a better name $relations->belongsTo('timeperiod', Timeperiod::class) ->setCandidateKey('override_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/TimeperiodRange.php000066400000000000000000000030051527064444300240320ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $timeperiod_id * @property string $range_key * @property string $environment_id * @property string $range_value */ class TimeperiodRange extends Model { public function getTableName() { return 'timeperiod_range'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'timeperiod_id', 'range_key', 'environment_id', 'range_value' ]; } public function getColumnDefinitions() { return [ 'timeperiod_id' => t('Timeperiod Id'), 'range_key' => t('Timeperiod Range Date(s)/Day'), 'environment_id' => t('Environment Id'), 'range_value' => t('Timeperiod Range Time') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'timeperiod_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('timeperiod', Timeperiod::class); } } icingadb-web-1.5.0/library/Icingadb/Model/UnreachableParent.php000066400000000000000000000166651527064444300243570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use Icinga\Module\Icingadb\Model\UnreachableParent\ResultSet; use InvalidArgumentException; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Query; use ipl\Orm\Relations; use ipl\Sql\Adapter\Pgsql; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Sql\Select; use ipl\Stdlib\Filter; /** * Class UnreachableParent * * @property string $id * @property int $level * @property string $child_id * @property ?string $host_id * @property ?string $service_id * @property ?string $redundancy_group_id * @property int $is_group_member * * @property Query|Host $host * @property Query|Service $service * @property Query|RedundancyGroup $redundancy_group */ class UnreachableParent extends DependencyNode { public function getTableName(): string { return 'unreachable_parent'; } public function getKeyName(): string { return 'id'; } public function getColumns(): array { return [ 'id', 'child_id', 'level', 'host_id', 'service_id', 'redundancy_group_id', 'is_group_member', '_has_problematic_parent' ]; } public function createRelations(Relations $relations): void { $relations->belongsTo('host', Host::class) ->setJoinType('LEFT'); $relations->belongsTo('service', Service::class) ->setJoinType('LEFT'); $relations->belongsTo('redundancy_group', RedundancyGroup::class) ->setJoinType('LEFT'); } public function createBehaviors(Behaviors $behaviors): void { $behaviors->add(new Binary([ 'id', 'child_id', 'host_id', 'service_id', 'redundancy_group_id' ])); $behaviors->add(new ReRoute([ 'hostgroup' => 'host.hostgroup', 'servicegroup' => 'service.servicegroup' ])); } public static function on(Connection $db, ?Model $root = null): Query { if ($root === null) { throw new InvalidArgumentException('Root node must not be null'); } $query = parent::on($db); $query->getSelectBase()->with( self::selectNodes($db, $root), 'unreachable_parent', true ); $query->filter(Filter::all( Filter::greaterThan('level', 0), Filter::equal('is_group_member', 0), Filter::any( Filter::any( Filter::equal('service.state.affects_children', 'y'), Filter::all( // TODO: Remove this once implicit dependencies are properly implemented Filter::equal('_has_problematic_parent', 0), Filter::equal('service.state.is_reachable', 'n') ) ), Filter::all( Filter::unlike('service_id', '*'), Filter::equal('host.state.affects_children', 'y') ), Filter::all( Filter::equal('redundancy_group.state.failed', 'y'), Filter::equal('redundancy_group.state.is_reachable', 'y') ) ) )); $query->setResultSetClass(ResultSet::class); return $query; } private static function selectNodes(Connection $db, Model $root): Select { if ($db->getAdapter() instanceof Pgsql) { $binaryCast = "CAST('00000000000000000000' AS bytea20)"; $booleanCast = "CAST('0' AS boolean)"; } else { $binaryCast = "CAST('' AS binary(20))"; $booleanCast = '0'; } $rootQuery = DependencyNode::on($db) ->columns([ 'id' => 'id', 'child_id' => 'id', 'level' => new Expression('0'), 'host_id' => 'host_id', 'service_id' => new Expression("COALESCE(%s, $binaryCast)", ['service_id']), 'redundancy_group_id' => new Expression($binaryCast), 'is_group_member' => new Expression($booleanCast), '_has_problematic_parent' => new Expression($booleanCast) ]) ->disableDefaultSort(); if ($root instanceof Host) { $rootQuery->filter(Filter::all( Filter::equal('host_id', $root->id), Filter::unlike('service_id', '*') )); } elseif ($root instanceof Service) { $rootQuery->filter(Filter::all( Filter::equal('host_id', $root->host_id), Filter::equal('service_id', $root->id) )); } elseif ($root instanceof RedundancyGroup) { $rootQuery->filter(Filter::all(Filter::equal('redundancy_group_id', $root->id))); } else { throw new InvalidArgumentException('Root node must be either a host, service or a redundancy group'); } $nodeQuery = DependencyEdge::on($db) ->columns([ 'id' => 'to_node_id', 'child_id' => 'from_node_id', 'level' => new Expression('urn.level + 1'), 'host_id' => 'parent.host_id', 'service_id' => 'parent.service_id', 'redundancy_group_id' => 'parent.redundancy_group_id', 'is_group_member' => new Expression('urn.redundancy_group_id IS NOT NULL AND urn.level > 0'), '_has_problematic_parent' => new Expression(sprintf( 'EXISTS(SELECT 1 FROM %s immediate_parents' . ' INNER JOIN %s state ON state.id = immediate_parents.dependency_edge_state_id' . ' WHERE immediate_parents.from_node_id = %%s AND state.failed = \'y\')', (new DependencyEdge())->getTableName(), (new DependencyEdgeState())->getTableName() ), ['to_node_id']) ]); $nodeQuery->filter(Filter::equal('state.failed', 'y')); $nodeSelect = $nodeQuery->assembleSelect(); // TODO: ipl-orm doesn't preserve key order :'( $columnsProperty = (new \ReflectionClass($nodeSelect))->getProperty('columns'); $columnsProperty->setValue($nodeSelect, array_merge( [ 'id' => null, 'child_id' => null, 'level' => null, 'host_id' => null, 'service_id' => null, 'redundancy_group_id' => null, 'is_group_member' => null, '_has_problematic_parent' => null ], $nodeSelect->getColumns() )); return $rootQuery->assembleSelect()->union( $nodeSelect ->join(['urn' => 'unreachable_parent'], sprintf( 'urn.id = %s', $nodeQuery ->getResolver() ->qualifyColumn( 'from_node_id', $nodeQuery ->getResolver() ->getAlias($nodeQuery->getModel()) ) )) ); } } icingadb-web-1.5.0/library/Icingadb/Model/UnreachableParent/000077500000000000000000000000001527064444300236305ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Model/UnreachableParent/ResultSet.php000066400000000000000000000011761527064444300263000ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model\UnreachableParent; use Generator; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Traversable; class ResultSet extends VolatileStateResults { protected function yieldTraversable(Traversable $traversable): Generator { $knownIds = []; foreach ($traversable as $value) { if (isset($knownIds[$value->id])) { continue; } $knownIds[$value->id] = true; yield $value; } } } icingadb-web-1.5.0/library/Icingadb/Model/User.php000066400000000000000000000113331527064444300216750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\Bitmask; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property string $email * @property string $pager * @property string $notifications_enabled * @property ?string $timeperiod_id * @property string[] $states * @property string[] $types * @property ?string $zone_id */ class User extends Model { public function getTableName() { return 'user'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'email', 'pager', 'notifications_enabled', 'timeperiod_id', 'states', 'types', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Contact Name Checksum'), 'properties_checksum' => t('Contact Properties Checksum'), 'name' => t('Contact Name'), 'name_ci' => t('Contact Name (CI)'), 'display_name' => t('Contact Display Name'), 'email' => t('Contact Email'), 'pager' => t('Contact Pager'), 'notifications_enabled' => t('Contact Receives Notifications'), 'timeperiod_id' => t('Timeperiod Id'), 'states' => t('Notification State Filter'), 'types' => t('Notification Type Filter'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'user.display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'host' => 'notification.host', 'service' => 'notification.service', 'hostgroup' => 'notification.host.hostgroup', 'servicegroup' => 'notification.service.servicegroup' ])); $behaviors->add(new Bitmask([ 'states' => [ 'ok' => 1, 'warning' => 2, 'critical' => 4, 'unknown' => 8, 'up' => 16, 'down' => 32 ], 'types' => [ 'downtime_start' => 1, 'downtime_end' => 2, 'downtime_removed' => 4, 'custom' => 8, 'ack' => 16, 'problem' => 32, 'recovery' => 64, 'flapping_start' => 128, 'flapping_end' => 256 ] ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'timeperiod_id', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('timeperiod', Timeperiod::class)->setJoinType('LEFT'); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(UserCustomvar::class) ->setThroughAlias('t_user_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(UserCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(UserCustomvar::class); $relations->belongsToMany('notification', Notification::class) ->through('notification_recipient'); $relations->belongsToMany('notification_history', NotificationHistory::class) ->through('user_notification_history'); $relations->belongsToMany('usergroup', Usergroup::class) ->through(UsergroupMember::class); } } icingadb-web-1.5.0/library/Icingadb/Model/UserCustomvar.php000066400000000000000000000025411527064444300236020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $customvar_id * @property string $user_id * @property string $environment_id */ class UserCustomvar extends Model { public function getTableName() { return 'user_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'user_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'user_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('user', User::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/Usergroup.php000066400000000000000000000060541527064444300227560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\ReRoute; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $display_name * @property ?string $zone_id */ class Usergroup extends Model { public function getTableName() { return 'usergroup'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'display_name', 'zone_id' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Contactgroup Name Checksum'), 'properties_checksum' => t('Contactgroup Properties Checksum'), 'name' => t('Contactgroup Name'), 'name_ci' => t('Contactgroup Name (CI)'), 'display_name' => t('Contactgroup Display Name'), 'zone_id' => t('Zone Id') ]; } public function getSearchColumns() { return ['name_ci', 'display_name']; } public function getDefaultSort() { return 'usergroup.display_name'; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new ReRoute([ 'host' => 'notification.host', 'service' => 'notification.service', 'hostgroup' => 'notification.host.hostgroup', 'servicegroup' => 'notification.service.servicegroup' ])); $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'zone_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('zone', Zone::class); $relations->belongsToMany('customvar', Customvar::class) ->through(UsergroupCustomvar::class) ->setThroughAlias('t_usergroup_customvar'); $relations->belongsToMany('customvar_flat', CustomvarFlat::class) ->through(UsergroupCustomvar::class); $relations->belongsToMany('vars', Vars::class) ->through(UsergroupCustomvar::class); $relations->belongsToMany('user', User::class) ->through(UsergroupMember::class); $relations->belongsToMany('notification', Notification::class) ->through('notification_recipient'); } } icingadb-web-1.5.0/library/Icingadb/Model/UsergroupCustomvar.php000066400000000000000000000026041527064444300246570ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $usergroup_id * @property string $customvar_id * @property string $environment_id */ class UsergroupCustomvar extends Model { public function getTableName() { return 'usergroup_customvar'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'usergroup_id', 'customvar_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'usergroup_id', 'customvar_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('usergroup', Usergroup::class); $relations->belongsTo('customvar', Customvar::class); $relations->belongsTo('customvar_flat', CustomvarFlat::class) ->setCandidateKey('customvar_id') ->setForeignKey('customvar_id'); } } icingadb-web-1.5.0/library/Icingadb/Model/UsergroupMember.php000066400000000000000000000023041527064444300241000ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $usergroup_id * @property string $user_id * @property string $environment_id */ class UsergroupMember extends Model { public function getTableName() { return 'usergroup_member'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'user_id', 'usergroup_id', 'environment_id' ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'user_id', 'usergroup_id', 'environment_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->belongsTo('usergroup', Usergroup::class); $relations->belongsTo('user', User::class); } } icingadb-web-1.5.0/library/Icingadb/Model/Vars.php000066400000000000000000000021211527064444300216650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use Icinga\Module\Icingadb\Model\Behavior\FlattenedObjectVars; use ipl\Orm\Behaviors; use ipl\Orm\Relations; use ipl\Sql\Connection; class Vars extends CustomvarFlat { /** * @internal Don't use. This model acts only as relation target and is not supposed to be directly used as query * target. Use {@see CustomvarFlat} instead. */ public static function on(Connection $_) { throw new \LogicException('Documentation says: DO NOT USE. Can\'t you read?'); } public function createBehaviors(Behaviors $behaviors) { parent::createBehaviors($behaviors); $behaviors->add(new FlattenedObjectVars()); } public function createRelations(Relations $relations) { // No relations, otherwise the ORM tries to map column names with them and thus breaks up // flattened variable names in case their structure happens to match the relation structure. } } icingadb-web-1.5.0/library/Icingadb/Model/Zone.php000066400000000000000000000052661527064444300217020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Model; use ipl\Orm\Behavior\Binary; use ipl\Orm\Behaviors; use Icinga\Module\Icingadb\Common\Model; use ipl\Orm\Relations; /** * @property string $id * @property string $environment_id * @property string $name_checksum * @property string $properties_checksum * @property string $name * @property string $name_ci * @property string $is_global * @property ?string $parent_id * @property int $depth */ class Zone extends Model { public function getTableName() { return 'zone'; } public function getKeyName() { return 'id'; } public function getColumns() { return [ 'environment_id', 'name_checksum', 'properties_checksum', 'name', 'name_ci', 'is_global', 'parent_id', 'depth' ]; } public function getColumnDefinitions() { return [ 'environment_id' => t('Environment Id'), 'name_checksum' => t('Zone Name Checksum'), 'properties_checksum' => t('Zone Properties Checksum'), 'name' => t('Zone Name'), 'name_ci' => t('Zone Name (CI)'), 'is_global' => t('Zone Is Global'), 'parent_id' => t('Parent Zone Id'), 'depth' => t('Zone Depth') ]; } public function createBehaviors(Behaviors $behaviors) { $behaviors->add(new Binary([ 'id', 'environment_id', 'name_checksum', 'properties_checksum', 'parent_id' ])); } public function createRelations(Relations $relations) { $relations->belongsTo('environment', Environment::class); $relations->hasMany('comment', Comment::class); $relations->hasMany('downtime', Downtime::class); $relations->hasMany('endpoint', Endpoint::class); $relations->hasMany('eventcommand', Eventcommand::class); $relations->hasMany('host', Host::class); $relations->hasMany('hostgroup', Hostgroup::class); $relations->hasMany('notification', Notification::class); $relations->hasMany('service', Service::class); $relations->hasMany('servicegroup', Servicegroup::class); $relations->hasMany('timeperiod', Timeperiod::class); $relations->hasMany('user', User::class); $relations->hasMany('usergroup', Usergroup::class); // TODO: Decide how to establish recursive relations } } icingadb-web-1.5.0/library/Icingadb/Notifications/000077500000000000000000000000001527064444300220165ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Notifications/IncidentFinder.php000066400000000000000000000037441527064444300254240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Notifications; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Notifications\Integrations\Exception\IncidentNotFoundException; use Icinga\Module\Notifications\Integrations\V1\Incident; use Icinga\Module\Notifications\Integrations\V1\Incidents; use InvalidArgumentException; use ipl\Stdlib\Seq; class IncidentFinder { /** * Find the open incident related to the given object * * @param Host|Service $object * * @return Incident * * @throws IncidentNotFoundException If no incident for the object is found, thrown once any function * on the returned instance is called */ public static function forObject(Host|Service $object): Incident { return Incidents::get(self::buildTags($object)); } /** * Get the matching incident for each of the given objects * * @param iterable $objects * * @return Incidents * * @throws InvalidArgumentException If $objects is empty */ public static function forObjects(iterable $objects): Incidents { return Incidents::getAll(Seq::map($objects, fn(Host|Service $object) => self::buildTags($object))); } /** * Build the tags to match the given host/service * * @param Host|Service $object * * @return array */ private static function buildTags(Host|Service $object): array { if ($object instanceof Host) { return [ 'host' => $object->name, 'environment' => bin2hex($object->environment_id) ]; } return [ 'host' => $object->host->name, 'service' => $object->name, 'environment' => bin2hex($object->environment_id) ]; } } icingadb-web-1.5.0/library/Icingadb/Notifications/ManagesIncidents.php000066400000000000000000000120251527064444300257430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Notifications; use ArrayIterator; use CallbackFilterIterator; use DateTime; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use InvalidArgumentException; use IteratorIterator; use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidInterface; /** * @phpstan-require-extends CommandForm */ trait ManagesIncidents { /** * Add or remove the current user as manager of all incidents related to the form's objects * * @param bool $manage * @param ?DateTime $ackSetTime Necessary if `$manage` is `true`, the same value sent as `set_time` * * @return void * * @throws InvalidArgumentException If `$manage` is `true` but no `$ackSetTime` is given */ protected function manageIncidents(bool $manage, ?DateTime $ackSetTime = null): void { if ($this->getAuth()->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp()) { if ($manage && $ackSetTime === null) { throw new InvalidArgumentException('An acknowledgement set time is required to manage incidents'); } $username = $this->getAuth()->getUser()->getUsername(); $objects = $this->getObjects(); $ackTimes = []; if (! $manage) { foreach ($objects as $object) { $ackTimes[$this->objectKey($object)] = $object->state->acknowledgement_set_time; } } foreach (IncidentFinder::forObjects($objects) as $incident) { if ($manage) { $incident->addManager( $username, ['downtime_start', 'downtime_end', 'flapping_start', 'flapping_end'], $ackSetTime !== null ? $this->deriveDeterministicEventUUID( 'ack_set', $incident->getObjectIdTags(), (int) $ackSetTime->format('U') * 1000 ) : null ); } else { $tags = $incident->getObjectIdTags(); $ackTime = $ackTimes[$this->objectKey($tags)] ?? null; $incident->removeManager( $ackTime !== null ? $this->deriveDeterministicEventUUID( 'ack_clear', $tags, (int) $ackTime->format('Uv') ) : null ); } } } } private function objectKey(Host|Service|array $objectOrTags): string { if (is_array($objectOrTags)) { $environment = $objectOrTags['environment']; $name = isset($objectOrTags['service']) ? $objectOrTags['host'] . '!' . $objectOrTags['service'] : $objectOrTags['host']; } elseif ($objectOrTags instanceof Service) { $environment = bin2hex($objectOrTags->environment_id); $name = $objectOrTags->host->name . '!' . $objectOrTags->name; } else { $environment = bin2hex($objectOrTags->environment_id); $name = $objectOrTags->name; } return $environment . '!' . $name; } /** * Mirror the way icingadb's DeriveDeterministicEventUUID() uses objectpacker.go to generate its UUIDs * * @param string $eventType * @param array $tags * @param int $time * * @return string */ private function pack(string $eventType, array $tags, int $time): string { $packString = fn (string $str) => chr(4) . pack('J', strlen($str)) . $str; $name = isset($tags['service']) ? $tags['host'] . '!' . $tags['service'] : $tags['host']; // The 4 arguments are passed to objectpacker.go::packValue() in a slice of type any, which writes these // initial bytes $data = chr(5) . pack('J', 4); $data .= $packString($tags['environment']); $data .= $packString($eventType); $data .= $packString($name); $data .= chr(3) . pack('E', (float) $time); return $data; } /** * Derive a deterministic UUID from the given information * * Essentially a reimplementation of icingadb/pkg/notifications/utils.go::DeriveDeterministicEventUUID() * * @param string $eventType * @param array $tags * @param int $time * * @return UuidInterface */ private function deriveDeterministicEventUUID(string $eventType, array $tags, int $time): UuidInterface { return Uuid::uuid5(Uuid::NIL, hash('sha1', $this->pack($eventType, $tags, $time), true)); } } icingadb-web-1.5.0/library/Icingadb/Notifications/SubscribeIncidents.php000066400000000000000000000060501527064444300263120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Notifications; use ArrayIterator; use CallbackFilterIterator; use Countable; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Web\Controller; use Icinga\Util\Environment; use ipl\Html\Form; use ipl\Web\Url; use IteratorIterator; use Traversable; /** * @phpstan-require-extends Controller */ trait SubscribeIncidents { /** * Subscribe or unsubscribe the incident of each object * * @param bool $subscribe * @param array|(Traversable&Countable) $objects * @param Url $redirectUrl The URL to redirect to after the form has been handled * * @return void */ protected function handleSubscription( bool $subscribe, array|(Traversable&Countable) $objects, Url $redirectUrl ): void { if ($this->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp()) { $form = (new SubscriptionForm($subscribe)) ->setObjectCount(count($objects)) ->on(Form::ON_SUBMIT, function () use ($subscribe, $objects, $redirectUrl) { $username = $this->getAuth()->getUser()->getUsername(); $granted = new CallbackFilterIterator( is_array($objects) ? new ArrayIterator($objects) : new IteratorIterator($objects), fn($object) => $this->isGrantedOn('icingadb/notifications/subscribe', $object) ); $granted->rewind(); if ($granted->valid()) { foreach (IncidentFinder::forObjects($granted) as $incident) { if ($subscribe) { $incident->addSubscriber( $username, ['downtime_start', 'downtime_end', 'flapping_start', 'flapping_end'] ); } else { $incident->removeSubscriber($username); } } } $this->redirectNow($redirectUrl); }); $form->handleRequest($this->getServerRequest()); $this->addContent($form); } } protected function handleBulkSubscription(bool $subscribe): void { $this->assertIsGrantedOnCommandTargets('icingadb/notifications/subscribe'); Environment::raiseMemoryLimit(); Environment::raiseExecutionTime(); $this->handleSubscription($subscribe, $this->getCommandTargets(), $this->getCommandTargetsUrl()); } public function subscribeAction(): void { $this->handleBulkSubscription(true); } public function unsubscribeAction(): void { $this->handleBulkSubscription(false); } } icingadb-web-1.5.0/library/Icingadb/Notifications/SubscriptionForm.php000066400000000000000000000067301527064444300260450ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Notifications; use Icinga\Web\Notification; use Icinga\Web\Session; use ipl\Html\Form; use ipl\I18n\Translation; use ipl\Web\Common\CsrfCounterMeasure; use ipl\Web\Widget\Icon; class SubscriptionForm extends Form { use CsrfCounterMeasure; use Translation; protected $defaultAttributes = ['class' => 'inline']; /** @var bool Whether to subscribe (true) or unsubscribe (false) the current user */ protected bool $subscribe; /** @var int The count of objects that are being subscribed/unsubscribed */ protected int $count = 0; /** @var ?array Attributes of the submit button while the role change of this form is pending */ protected ?array $pendingJobAttributes = null; /** * Create a new SubscriptionForm * * @param bool $subscribe Whether the form should subscribe or unsubscribe on submit */ public function __construct(bool $subscribe) { $this->subscribe = $subscribe; $this->setAttribute( 'title', $subscribe ? $this->translate('Receive notifications about this problem') : $this->translate('Stop receiving notifications about this problem') ); $this->on(static::ON_SUBMIT, function () { Notification::success( sprintf( $this->subscribe ? $this->translatePlural( 'Subscribed to the problem successfully', 'Subscribed to %d problems successfully', $this->count ) : $this->translatePlural( 'Unsubscribed from the problem successfully', 'Unsubscribed from %d problems successfully', $this->count ), $this->count ) ); }); } /** * Set the count of objects that are being subscribed/unsubscribed * * @param int $count * * @return $this */ public function setObjectCount(int $count): static { $this->count = $count; return $this; } /** * Mark the form as waiting for the role change it requested * * @param array $attributes The attributes of the pending job * {@see \Icinga\Module\Notifications\Integrations\V1\Incident::getPendingJobAttributes()} * * @return $this */ public function setPendingJob(array $attributes): static { $this->pendingJobAttributes = $attributes; return $this; } protected function assemble(): void { $this->addCsrfCounterMeasure(Session::getSession()->getId()); $this->addElement( 'submitButton', 'btn_submit', [ 'class' => ['link-button', 'spinner'], 'label' => $this->subscribe ? [new Icon('share'), $this->translate('Subscribe')] : [new Icon('bell-slash'), $this->translate('Unsubscribe')] ] ); if ($this->pendingJobAttributes !== null) { $this->getElement('btn_submit')->getAttributes() ->add('class', 'active') ->set($this->pendingJobAttributes); } } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/000077500000000000000000000000001527064444300216025ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/ProvidedHook/ApplicationState.php000066400000000000000000000113461527064444300255640ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Exception; use Icinga\Application\Hook\ApplicationStateHook; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\IcingaRedis; use Icinga\Module\Icingadb\Model\Instance; use Icinga\Web\Session; use ipl\I18n\Translation; use ipl\Stdlib\Filter; class ApplicationState extends ApplicationStateHook { use Auth; use Database; use Translation; public function collectMessages() { $session = Session::getSession()->getNamespace('icingadb'); try { $lastIcingaHeartbeat = IcingaRedis::getLastIcingaHeartbeat(); } catch (Exception $e) { $downSince = $session->get('redis.down-since'); if ($downSince === null) { $downSince = time(); $session->set('redis.down-since', $downSince); } $this->addError( 'icingadb/redis-down', $downSince, sprintf($this->translate("Can't connect to Redis: %s"), $e->getMessage()) ); return; } $instance = Instance::on($this->getDb()) ->with(['endpoint']) ->filter(Filter::equal('responsible', true)) ->orderBy('heartbeat', 'desc') ->first(); if ($instance === null) { $noInstanceSince = $session->get('icingadb.no-instance-since'); if ($noInstanceSince === null) { $noInstanceSince = time(); $session->set('icingadb.no-instance-since', $noInstanceSince); } $this->addError( 'icingadb/no-instance', $noInstanceSince, $this->translate( 'It seems that Icinga DB is not running.' . ' Make sure Icinga DB is running and writing into the database.' ) ); return; } else { $session->delete('db.no-instance-since'); } $outdatedDbHeartbeat = $instance->heartbeat->getTimestamp() < time() - 60; if ($lastIcingaHeartbeat === null) { $missingSince = $session->get('redis.heartbeat-missing-since'); if ($missingSince === null) { $missingSince = time(); $session->set('redis.heartbeat-missing-since', $missingSince); } $lastIcingaHeartbeat = $missingSince; } else { $session->delete('redis.heartbeat-missing-since'); } if ($outdatedDbHeartbeat && $instance->heartbeat->getTimestamp() > $lastIcingaHeartbeat) { $this->addError( 'icingadb/redis-outdated', $lastIcingaHeartbeat, $this->translate('Redis is outdated. Make sure Icinga 2 is running and connected to Redis.') ); } elseif ($outdatedDbHeartbeat) { $this->addError( 'icingadb/icingadb-down', $instance->heartbeat->getTimestamp(), $this->translate( 'It seems that Icinga DB is not running.' . ' Make sure Icinga DB is running and writing into the database.' ) ); } $session->delete('redis.down-since'); if (isset($instance->notifications_healthy) && ! $instance->notifications_healthy) { if (! $this->getAuth()->hasPermission('icingadb/notifications/usage')) { // Do not show this error to users who do not rely on it return; } $unhealthySince = $session->get('notifications.unhealthy-since'); if ($unhealthySince === null) { $unhealthySince = time(); $session->set('notifications.unhealthy-since', $unhealthySince); } if (! Backend::icinga2SupportsNotifications($instance->icinga2_version)) { $reason = $this->translate( 'Notifications are not transmitted because the Icinga 2 version is outdated.' ); } else { $reason = $this->translate( 'Notification transmission has been interrupted.' . ' Make sure Icinga DB is able to connect to Icinga Notifications.' ); } $this->addError( 'icingadb/notifications-unhealthy', $unhealthySince, $reason ); } else { $session->delete('notifications.unhealthy-since'); } } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/CreateHostSlaReport.php000066400000000000000000000022441527064444300262120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Icinga\Application\Modules\Module; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Hook\HostActionsHook; use Icinga\Module\Icingadb\Model\Host; use ipl\I18n\Translation; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Url; use ipl\Web\Widget\Link; class CreateHostSlaReport extends HostActionsHook { use Translation; public function getActionsForObject(Host $host): array { if (! Module::exists('reporting') || ! Auth::getInstance()->hasPermission('reporting/reports')) { return []; } $filter = QueryString::render(Filter::equal('host.name', $host->name)); return [ new Link( $this->translate('Create Host SLA Report'), Url::fromPath('reporting/reports/new')->addParams(['filter' => $filter, 'report' => 'host']), [ 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ] ) ]; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/CreateHostsSlaReport.php000066400000000000000000000025231527064444300263750ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Icinga\Application\Modules\Module; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Hook\HostsDetailExtensionHook; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Orm\Query; use ipl\Web\Filter\QueryString; use ipl\Web\Url; use ipl\Web\Widget\Link; class CreateHostsSlaReport extends HostsDetailExtensionHook { use Translation; public function getHtmlForObjects(Query $hosts): ValidHtml { if (Module::exists('reporting') && Auth::getInstance()->hasPermission('reporting/reports')) { $filter = QueryString::render($this->getBaseFilter()); return (new HtmlDocument()) ->addHtml(Html::tag('h2', $this->translate('Reporting'))) ->addHtml(new Link( $this->translate('Create Host SLA Report'), Url::fromPath('reporting/reports/new')->addParams(['filter' => $filter, 'report' => 'host']), [ 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ] )); } return new HtmlDocument(); } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/CreateServiceSlaReport.php000066400000000000000000000024431527064444300266760ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Icinga\Application\Modules\Module; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Hook\ServiceActionsHook; use Icinga\Module\Icingadb\Model\Service; use ipl\I18n\Translation; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Url; use ipl\Web\Widget\Link; class CreateServiceSlaReport extends ServiceActionsHook { use Translation; public function getActionsForObject(Service $service): array { if (! Module::exists('reporting') || ! Auth::getInstance()->hasPermission('reporting/reports')) { return []; } $filter = QueryString::render(Filter::all( Filter::equal('service.name', $service->name), Filter::equal('host.name', $service->host->name) )); return [ new Link( $this->translate('Create Service SLA Report'), Url::fromPath('reporting/reports/new')->addParams(['filter' => $filter, 'report' => 'service']), [ 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ] ) ]; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/CreateServicesSlaReport.php000066400000000000000000000025441527064444300270630ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Icinga\Application\Modules\Module; use Icinga\Authentication\Auth; use Icinga\Module\Icingadb\Hook\ServicesDetailExtensionHook; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Orm\Query; use ipl\Web\Filter\QueryString; use ipl\Web\Url; use ipl\Web\Widget\Link; class CreateServicesSlaReport extends ServicesDetailExtensionHook { use Translation; public function getHtmlForObjects(Query $services): ValidHtml { if (Module::exists('reporting') && Auth::getInstance()->hasPermission('reporting/reports')) { $filter = QueryString::render($this->getBaseFilter()); return (new HtmlDocument()) ->addHtml(Html::tag('h2', $this->translate('Reporting'))) ->addHtml(new Link( $this->translate('Create Service SLA Report'), Url::fromPath('reporting/reports/new')->addParams(['filter' => $filter, 'report' => 'service']), [ 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ] )); } return new HtmlDocument(); } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/IcingaHealth.php000066400000000000000000000155751527064444300246500ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Icinga\Application\Hook\HealthHook; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\Instance; use ipl\I18n\Translation; use ipl\Web\Url; class IcingaHealth extends HealthHook { use Auth; use Database; use Translation; public const REQUIRED_ICINGADB_VERSION = '1.4.0'; /** * normalizeVersion extracts a version string from Icinga DB's reported * version comparable with REQUIRED_ICINGADB_VERSION via version_compare. * * @param string $version Icinga DB version string to normalize. * * @return string Normalized Icinga DB version string. */ public static function normalizeVersion(string $version): string { // Ignore leading "v" when the git tag is used, e.g., "v1.4.0". $version = ltrim($version, 'v'); // Ignore everything after "-" used by git describe, e.g., "1.4.0-g...". $version = explode('-', $version, 2)[0]; return $version; } /** @var Instance */ protected $instance; public function getName(): string { return 'Icinga DB'; } public function getUrl(): Url { return Url::fromPath('icingadb/health'); } public function checkHealth() { $instance = $this->getInstance(); if ($instance === null) { $this->setState(self::STATE_UNKNOWN); $this->setMessage($this->translate( 'Icinga DB is not running or not writing into the database' . ' (make sure the icinga feature "icingadb" is enabled)' )); } elseif ($instance->heartbeat->getTimestamp() < time() - 60) { $this->setState(self::STATE_CRITICAL); $this->setMessage($this->translate( 'Icinga DB is not running or not writing into the database' . ' (make sure the icinga feature "icingadb" is enabled)' )); } elseif ( ! isset($instance->icingadb_version) || version_compare( self::normalizeVersion($instance->icingadb_version), self::REQUIRED_ICINGADB_VERSION, '<' ) ) { $this->setState(self::STATE_CRITICAL); $this->setMessage(sprintf( $this->translate('Icinga DB is outdated, please upgrade to version %s or later.'), self::REQUIRED_ICINGADB_VERSION )); } elseif ( isset($instance->notifications_healthy) && ! $instance->notifications_healthy && $this->getAuth()->hasPermission('icingadb/notifications/usage') ) { $this->setState(self::STATE_CRITICAL); if (! Backend::icinga2SupportsNotifications($instance->icinga2_version)) { $message = $this->translate( 'Notifications are not transmitted because the Icinga 2 version is outdated.' ); } else { $message = $this->translate( 'Notification transmission has been interrupted.' . ' Make sure Icinga DB is able to connect to Icinga Notifications.' ); } $this->setMessage($message); } else { $this->setState(self::STATE_OK); $warningMessages = []; if (! $instance->icinga2_active_host_checks_enabled) { $this->setState(self::STATE_WARNING); $warningMessages[] = $this->translate('Active host checks are disabled'); } if (! $instance->icinga2_active_service_checks_enabled) { $this->setState(self::STATE_WARNING); $warningMessages[] = $this->translate('Active service checks are disabled'); } if (! $instance->icinga2_notifications_enabled) { $this->setState(self::STATE_WARNING); $warningMessages[] = $this->translate('Notifications are disabled'); } if ($this->getState() === self::STATE_WARNING) { $this->setMessage(implode("; ", $warningMessages)); } else { $this->setMessage(sprintf( $this->translate('Icinga DB is running and writing into the database. (Version: %s)'), $instance->icingadb_version )); } } if ($instance !== null) { $this->setMetrics([ 'heartbeat' => $instance->heartbeat->getTimestamp(), 'responsible' => $instance->responsible, 'icinga2_active_host_checks_enabled' => $instance->icinga2_active_host_checks_enabled, 'icinga2_active_service_checks_enabled' => $instance->icinga2_active_service_checks_enabled, 'icinga2_event_handlers_enabled' => $instance->icinga2_event_handlers_enabled, 'icinga2_flap_detection_enabled' => $instance->icinga2_flap_detection_enabled, 'icinga2_notifications_enabled' => $instance->icinga2_notifications_enabled, 'icinga2_performance_data_enabled' => $instance->icinga2_performance_data_enabled, 'icinga2_start_time' => $instance->icinga2_start_time->getTimestamp(), 'icinga2_version' => $instance->icinga2_version, 'icingadb_version' => $instance->icingadb_version ?? null, 'notifications_healthy' => $instance->notifications_healthy ?? null, 'endpoint' => ['name' => $instance->endpoint->name] ]); } } /** * Get an Icinga DB instance * * @return ?Instance */ protected function getInstance() { if ($this->instance === null) { $query = Instance::on($this->getDb()) ->with('endpoint') ->columns([ 'heartbeat', 'responsible', 'icinga2_active_host_checks_enabled', 'icinga2_active_service_checks_enabled', 'icinga2_event_handlers_enabled', 'icinga2_flap_detection_enabled', 'icinga2_notifications_enabled', 'icinga2_performance_data_enabled', 'icinga2_start_time', 'icinga2_version', 'endpoint.name' ]); if (Backend::supportsDependencies()) { $query->withColumns('icingadb_version'); } if (Backend::supportsNotifications()) { $query->withColumns('notifications_healthy'); } $this->instance = $query->first(); } return $this->instance; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Notifications/000077500000000000000000000000001527064444300244135ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Notifications/V2/000077500000000000000000000000001527064444300247025ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Notifications/V2/Icinga2Source.php000066400000000000000000000232161527064444300300540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Notifications\V2; use ArrayIterator; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Data\QueryColumnsProvider; use Icinga\Module\Icingadb\Data\QueryValuesProvider; use Icinga\Module\Icingadb\Model\Customvar; use Icinga\Module\Icingadb\Model\CustomvarFlat; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; use Icinga\Module\Notifications\Hook\V2\SourceHook; use ipl\Html\HtmlElement; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Stdlib\Filter; use ipl\Stdlib\Filter\Chain; use ipl\Stdlib\Filter\Condition; use ipl\Web\Control\SearchBar\SearchException; use ipl\Web\Layout\MinimalItemLayout; use ipl\Web\Widget\IcingaIcon; use ipl\Web\Widget\Icon; use Traversable; class Icinga2Source implements SourceHook { use Auth; use Database; use Translation; /** @var array The allowed search columns */ private array $allowedColumns; /** @var array>> The selected custom vars */ private array $selectedCustomVars = []; public function __construct() { $this->allowedColumns = [ 'object.type' => $this->translate('Object Type'), 'host.name' => $this->translate('Host Name'), 'host.display_name' => $this->translate('Host Display Name'), 'hostgroup.name' => $this->translate('Hostgroup Name'), 'hostgroup.display_name' => $this->translate('Hostgroup Display Name'), 'service.name' => $this->translate('Service Name'), 'service.display_name' => $this->translate('Service Display Name'), 'servicegroup.name' => $this->translate('Servicegroup Name'), 'servicegroup.display_name' => $this->translate('Servicegroup Display Name') ]; } public function getSourceLabel(): string { return 'Icinga 2'; } public function getSourceIcon(): Icon { return new IcingaIcon('icinga'); } public function assertValidCondition(Condition $condition): void { $column = $condition->getColumn(); if (isset($this->allowedColumns[$column])) { return; } if (preg_match('/^(host|service)\.vars\.(.*?)(\[\*])?$/i', $column, $m)) { // $m[3] captures the trailing [*], so $m[2] should never contain a wildcard. if (str_contains($m[2], '*')) { throw new SearchException($this->translate('Wildcards are not allowed in custom variables')); } [$objectType, $customvar] = [$m[1], $m[2] . ($m[3] ?? '')]; $vars = Customvar::on($this->getDb()) ->columns(['name', 'value', 'path' => 'customvar_flat.flatname']) ->filter(Filter::all( Filter::like(sprintf('%s.id', $objectType), '*'), Filter::like('customvar_flat.flatname', $customvar) )); $this->applyRestrictions($vars); $found = false; foreach ($vars as $var) { $found = true; $this->selectedCustomVars[$column][$var->name][$var->value] = $var->path; } if (! $found) { throw new SearchException( $this->translate('Custom variable not found. Please define it before referencing it in a rule') ); } } else { throw new SearchException($this->translate('Is not a valid Column')); } } public function enrichCondition(Condition $condition): void { $column = $condition->getColumn(); if (isset($this->allowedColumns[$column])) { $condition->metaData()->set('columnLabel', $this->allowedColumns[$column]); } elseif (preg_match('/^(host|service)\.vars\.(.*?)(\[\*])?$/i', $column, $m)) { $prefix = $m[1] === 'host' ? $this->translate('Host') : $this->translate('Service'); // $m[3] captures the trailing [*] and is ignored $condition->metaData()->set('columnLabel', $prefix . ' ' . $m[2]); } } public function getValueSuggestions(string $column, string $searchTerm, Chain $searchFilter): Traversable { if ($column === 'object.type') { return new ArrayIterator([ ['search' => 'host'], ['search' => 'service'] ]); } return new QueryValuesProvider( Host::on($this->getDb())->limit(50), $column, $searchTerm, $searchFilter ); } public function getColumnSuggestions(string $searchTerm): Traversable { return (new QueryColumnsProvider(Host::on($this->getDb()), $searchTerm)) ->setCustomVarSources([ 'host' => $this->translate('Host %s', '..'), 'service' => $this->translate('Service %s', '..') ]) ->setFixedColumns($this->allowedColumns) ->setShowRelationLabels(); } public function getJsonPaths(string ...$columns): array { $simulateCustomvarFlatResults = function ($column) { foreach ($this->selectedCustomVars[$column] as $varName => $vars) { foreach ($vars as $value => $flatname) { yield new CustomvarFlat([ 'flatname' => $flatname, 'flatvalue' => 'true', 'customvar' => new Customvar([ 'name' => $varName, 'value' => $value ]) ]); } } }; $paths = []; foreach ($columns as $column) { if (isset($this->allowedColumns[$column])) { $paths[$column][] = $this->replacePrefix($column); } else { $prefix = str_starts_with($column, 'host.vars') ? 'host.vars' : 'services[*].vars'; $unflattenVars = (new CustomvarFlat())->unFlattenVars($simulateCustomvarFlatResults($column)); $paths[$column] = $this->createJsonPaths($prefix, $unflattenVars); } } return $paths; } /** * Create JSON paths for the given custom variable tree * * @param string $key * @param mixed $value * @param string[] $segments * @param string[] $paths * * @return string[] Flat array containing JSON paths */ private function createJsonPaths(string $key, mixed $value, array $segments = [], array &$paths = []): array { if (is_array($value)) { $segments[] = $key; foreach ($value as $k => $v) { $this->createJsonPaths( is_int($k) ? sprintf('[%d]', $k) : sprintf("['%s']", addslashes($k)), $v, $segments, $paths ); } } else { if (preg_match('/^\[\d+]$/', $key)) { $segments[] = '[*]'; } else { $segments[] = $key; } $paths[implode('', $segments)] = true; } return array_keys($paths); } /** * Replace prefix based on a predefined map * * @param string $column * * @return string */ private function replacePrefix(string $column): string { $replacements = [ 'service.' => 'services[*].', 'hostgroup.' => 'hostgroups[*].', 'servicegroup.' => 'servicegroups[*].' ]; $prefix = strstr($column, '.', true) . '.'; if (! isset($replacements[$prefix])) { return $column; } foreach ($replacements as $search => $replace) { if (str_starts_with($column, $search)) { return $replace . substr($column, strlen($search)); } } return $column; } public function getEventTypes(): array { return [ 'downtime_start' => $this->translate('Downtime Start'), 'downtime_end' => $this->translate('Downtime End'), 'flapping_start' => $this->translate('Flapping Start'), 'flapping_end' => $this->translate('Flapping End') ]; } public function createObjectLink(array $idTags): ?ValidHtml { if (isset($idTags['service'])) { $object = Service::on($this->getDb()) ->with(['host', 'state', 'host.state']) ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::all( Filter::equal('service.name', $idTags['service']), Filter::equal('host.name', $idTags['host']) )) ->first(); } else { $object = Host::on($this->getDb()) ->with('state') ->setResultSetClass(VolatileStateResults::class) ->filter(Filter::equal('host.name', $idTags['host'])) ->first(); } if ($object === null) { return null; } $item = new MinimalItemLayout( $object, $object instanceof Service ? new ServiceRenderer() : new HostRenderer() ); return new HtmlElement('div', $item->getAttributes(), $item); } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Notifications/V2/V1FilterMigration.php000066400000000000000000000031451527064444300307240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Notifications\V2; use Icinga\Module\Notifications\Hook\V2\V1FilterMigrationHook; use InvalidArgumentException; use ipl\Stdlib\Filter; use ipl\Web\Filter\Parser; use JsonException; class V1FilterMigration implements V1FilterMigrationHook { public function getSourceType(): string { return 'icinga2'; } public function migrateFilter(string $v1Filter): Filter\Chain { try { $data = json_decode($v1Filter, true, flags: JSON_THROW_ON_ERROR); } catch (JsonException $e) { throw new InvalidArgumentException('Invalid JSON: ' . $e->getMessage(), previous: $e); } if ($data['version'] !== 1 || ! isset($data['config']['type']) || ! isset($data['config']['filter'])) { throw new InvalidArgumentException('Invalid v1 filter format'); } $typeFilter = match ($data['config']['type']) { 'all' => null, 'host' => Filter::equal('object.type', 'host'), 'service' => Filter::equal('object.type', 'service'), default => throw new InvalidArgumentException('Unknown v1 filter type: ' . $data['config']['type']) }; $filter = (new Parser($data['config']['filter']))->parse(); if ($typeFilter !== null) { $filter = Filter::all($typeFilter, $filter); } elseif (! ($filter instanceof Filter\Chain)) { $filter = Filter::all($filter); } return $filter; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/RedisHealth.php000066400000000000000000000043141527064444300245110ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook; use Exception; use Icinga\Application\Hook\HealthHook; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\IcingaRedis; use Icinga\Module\Icingadb\Model\Instance; class RedisHealth extends HealthHook { use Database; public function getName(): string { return 'Redis'; } public function checkHealth() { try { $lastIcingaHeartbeat = IcingaRedis::getLastIcingaHeartbeat(); if ($lastIcingaHeartbeat === null) { $lastIcingaHeartbeat = time(); } $server = Backend::getRedis()->getConnection()->info('Server')['Server']; $instance = Instance::on($this->getDb())->columns('heartbeat')->first(); if ($instance === null) { $this->setState(self::STATE_UNKNOWN); $this->setMessage(t( 'Can\'t check Redis: Icinga DB is not running or not writing into the database' . ' (make sure the icinga feature "icingadb" is enabled)' )); return; } $this->setMetrics($server); $outdatedDbHeartbeat = $instance->heartbeat->getTimestamp() < time() - 60; if (! $outdatedDbHeartbeat || $instance->heartbeat->getTimestamp() <= $lastIcingaHeartbeat) { $this->setState(self::STATE_OK); $this->setMessage(sprintf( t('Redis available and in sync with Icinga. (Version: %s)'), $server['redis_version'] ?? t('N/A') )); } elseif ($instance->heartbeat->getTimestamp() > $lastIcingaHeartbeat) { $this->setState(self::STATE_CRITICAL); $this->setMessage(t('Redis outdated. Make sure Icinga 2 is running and connected to Redis.')); } } catch (Exception $e) { $this->setState(self::STATE_CRITICAL); $this->setMessage(sprintf(t("Can't connect to Redis: %s"), $e->getMessage())); } } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/000077500000000000000000000000001527064444300235535ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php000066400000000000000000000033321527064444300270360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Reporting; use Icinga\Application\Icinga; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Reporting\ReportData; use Icinga\Module\Reporting\ReportRow; use Icinga\Module\Reporting\Timerange; use ipl\Sql\Expression; use ipl\Stdlib\Filter\Rule; use function ipl\I18n\t; class HostSlaReport extends SlaReport { public function getName() { $name = t('Host SLA'); if (Icinga::app()->getModuleManager()->hasEnabled('idoreports')) { $name .= ' (Icinga DB)'; } return $name; } protected function createReportData() { return (new ReportData()) ->setDimensions([t('Hostname')]) ->setValues([t('SLA in %')]); } protected function createReportRow($row) { if ($row->sla === null) { return null; } return (new ReportRow()) ->setDimensions([$row->display_name]) ->setValues([(float) $row->sla]); } protected function fetchSla(Timerange $timerange, ?Rule $filter = null) { $sla = Host::on($this->getDb()) ->columns([ 'display_name', 'sla' => new Expression(sprintf( "get_sla_ok_percent(%s, NULL, '%s', '%s')", 'host.id', $timerange->getStart()->format('Uv'), $timerange->getEnd()->format('Uv') )) ]); $this->applyRestrictions($sla); if ($filter !== null) { $sla->filter($filter); } return $sla; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php000066400000000000000000000036661527064444300275330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Reporting; use Icinga\Application\Icinga; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Reporting\ReportData; use Icinga\Module\Reporting\ReportRow; use Icinga\Module\Reporting\Timerange; use ipl\Sql\Expression; use ipl\Stdlib\Filter\Rule; use function ipl\I18n\t; class ServiceSlaReport extends SlaReport { public function getName() { $name = t('Service SLA'); if (Icinga::app()->getModuleManager()->hasEnabled('idoreports')) { $name .= ' (Icinga DB)'; } return $name; } protected function createReportData() { return (new ReportData()) ->setDimensions([t('Hostname'), t('Service Name')]) ->setValues([t('SLA in %')]); } protected function createReportRow($row) { if ($row->sla === null) { return null; } return (new ReportRow()) ->setDimensions([$row->host->display_name, $row->display_name]) ->setValues([(float) $row->sla]); } protected function fetchSla(Timerange $timerange, ?Rule $filter = null) { $sla = Service::on($this->getDb()) ->columns([ 'host.display_name', 'display_name', 'sla' => new Expression(sprintf( "get_sla_ok_percent(%s, %s, '%s', '%s')", 'service.host_id', 'service.id', $timerange->getStart()->format('Uv'), $timerange->getEnd()->format('Uv') )) ]); $sla->resetOrderBy()->orderBy('host.display_name')->orderBy('display_name'); $this->applyRestrictions($sla); if ($filter !== null) { $sla->filter($filter); } return $sla; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/SlaReport.php000066400000000000000000000231761527064444300262100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Reporting; use DateInterval; use DatePeriod; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Reporting\Hook\ReportHook; use Icinga\Module\Reporting\ReportData; use Icinga\Module\Reporting\ReportRow; use Icinga\Module\Reporting\Timerange; use ipl\Html\Form; use ipl\Html\Html; use ipl\Stdlib\Filter\Rule; use ipl\Web\Filter\QueryString; use ipl\Web\Widget\EmptyState; use function ipl\I18n\t; /** * Base class for host and service SLA reports */ abstract class SlaReport extends ReportHook { use Auth; use Database; /** @var float If an SLA value is lower than the threshold, it is considered not ok */ public const DEFAULT_THRESHOLD = 99.5; /** @var int The amount of decimal places for the report result */ public const DEFAULT_REPORT_PRECISION = 2; /** * Create and return a {@link ReportData} container * * @return ReportData Container initialized with the expected dimensions and value labels for the specific report */ abstract protected function createReportData(); /** * Create and return a {@link ReportRow} * * @param mixed $row Data for the row * * @return ReportRow|null Row with the dimensions and values for the specific report set according to the data * expected in {@link createRepportData()} or null for no data */ abstract protected function createReportRow($row); /** * Fetch SLA according to specified time range and filter * * @param Timerange $timerange * @param ?Rule $filter * * @return iterable */ abstract protected function fetchSla(Timerange $timerange, ?Rule $filter = null); protected function fetchReportData(Timerange $timerange, ?array $config = null) { $rd = $this->createReportData(); $rows = []; $filter = trim((string) $config['filter']) ?: '*'; $filter = $filter !== '*' ? QueryString::parse($filter) : null; $interval = null; $boundary = null; $format = null; if (isset($config['breakdown']) && $config['breakdown'] !== 'none') { switch ($config['breakdown']) { case 'hour': $interval = new DateInterval('PT1H'); $format = 'H:i:s'; $boundary = '+1 hour'; break; case 'day': $interval = new DateInterval('P1D'); $format = 'Y-m-d'; $boundary = 'tomorrow midnight'; break; case 'week': $interval = new DateInterval('P1W'); $format = 'Y-\WW'; $boundary = 'monday next week midnight'; break; case 'month': $interval = new DateInterval('P1M'); $format = 'Y-m'; $boundary = 'first day of next month midnight'; break; } $dimensions = $rd->getDimensions(); $dimensions[] = ucfirst($config['breakdown']); $rd->setDimensions($dimensions); foreach ($this->yieldTimerange($timerange, $interval, $boundary) as list($start, $end)) { foreach ($this->fetchSla(new Timerange($start, $end), $filter) as $row) { $row = $this->createReportRow($row); if ($row === null) { continue; } $dimensions = $row->getDimensions(); $dimensions[] = $start->format($format); $row->setDimensions($dimensions); $rows[] = $row; } } } else { foreach ($this->fetchSla($timerange, $filter) as $row) { $rows[] = $this->createReportRow($row); } } $rd->setRows($rows); // Disconnect from the database, as this hook usually runs isolated and no-one else requires a connection. // Makes only a difference in case of reporting triggering this as part of a scheduled report and prevents // the database connection from being left open unnecessarily and failing upon re-use. $this->getDb()->disconnect(); return $rd; } /** * Yield start and end times that recur at the specified interval over the given time range * * @param Timerange $timerange * @param DateInterval $interval * @param string|null $boundary English text datetime description for calculating bounds to get * calendar days, weeks or months instead of relative times according to interval * * @return \Generator */ protected function yieldTimerange(Timerange $timerange, DateInterval $interval, $boundary = null) { $start = clone $timerange->getStart(); $end = clone $timerange->getEnd(); $oneSecond = new DateInterval('PT1S'); if ($boundary !== null) { $intermediate = (clone $start)->modify($boundary); if ($intermediate < $end) { yield [clone $start, $intermediate->sub($oneSecond)]; $start->modify($boundary); } } $period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE); foreach ($period as $date) { /** @var \DateTime $date */ yield [$start, (clone $date)->sub($oneSecond)]; $start = $date; } yield [$start, $end]; } public function initConfigForm(Form $form) { $form->addElement('text', 'filter', [ 'label' => t('Filter') ]); $form->addElement('select', 'breakdown', [ 'label' => t('Breakdown'), 'options' => [ 'none' => t('None', 'SLA Report Breakdown'), 'hour' => t('Hour'), 'day' => t('Day'), 'week' => t('Week'), 'month' => t('Month') ] ]); $form->addElement('number', 'threshold', [ 'label' => t('Threshold'), 'placeholder' => static::DEFAULT_THRESHOLD, 'step' => '0.01', 'min' => '1', 'max' => '100' ]); $form->addElement('number', 'sla_precision', [ 'label' => t('Amount Decimal Places'), 'placeholder' => static::DEFAULT_REPORT_PRECISION, 'min' => '1', 'max' => '12' ]); $form->addElement('checkbox', 'export_total', [ 'label' => t('Export Total Averages'), 'description' => t('Export total averages to CSV and JSON'), // Instead of y/n, 0/1 can be implicitly cast to bool which is done where the config is actually used. 'checkedValue' => '1', 'uncheckedValue' => '0' ]); } public function getData(Timerange $timerange, ?array $config = null) { return $this->fetchReportData($timerange, $config); } public function getHtml(Timerange $timerange, ?array $config = null) { $data = $this->getData($timerange, $config); if (! count($data)) { return new EmptyState(t('No data found.')); } $threshold = isset($config['threshold']) ? (float) $config['threshold'] : static::DEFAULT_THRESHOLD; $tableHeaderCells = []; foreach ($data->getDimensions() as $dimension) { $tableHeaderCells[] = Html::tag('th', null, $dimension); } foreach ($data->getValues() as $value) { $tableHeaderCells[] = Html::tag('th', null, $value); } $tableRows = []; $precision = $config['sla_precision'] ?? static::DEFAULT_REPORT_PRECISION; foreach ($data->getRows() as $row) { $cells = []; foreach ($row->getDimensions() as $dimension) { $cells[] = Html::tag('td', null, $dimension); } // We only have one metric $sla = $row->getValues()[0]; if ($sla < $threshold) { $slaClass = 'nok'; } else { $slaClass = 'ok'; } $cells[] = Html::tag('td', ['class' => "sla-column $slaClass"], round($sla, $precision)); $tableRows[] = Html::tag('tr', null, $cells); } // We only have one average $average = $data->getAverages()[0]; if ($average < $threshold) { $slaClass = 'nok'; } else { $slaClass = 'ok'; } $total = $this instanceof HostSlaReport ? sprintf(t('Total (%d Hosts)'), $data->count()) : sprintf(t('Total (%d Services)'), $data->count()); $tableRows[] = Html::tag('tr', null, [ Html::tag('td', ['colspan' => count($data->getDimensions())], $total), Html::tag('td', ['class' => "sla-column $slaClass"], round($average, $precision)) ]); $table = Html::tag( 'table', ['class' => 'common-table sla-table'], [ Html::tag( 'thead', null, Html::tag( 'tr', null, $tableHeaderCells ) ), Html::tag('tbody', null, $tableRows) ] ); return $table; } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php000066400000000000000000000006461527064444300300470ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Reporting; use Icinga\Module\Icingadb\Hook\Common\TotalSlaReportUtils; use function ipl\I18n\t; class TotalHostSlaReport extends HostSlaReport { use TotalSlaReportUtils; public function getName() { return t('Total Host SLA'); } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php000066400000000000000000000006571527064444300305340ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\Reporting; use Icinga\Module\Icingadb\Hook\Common\TotalSlaReportUtils; use function ipl\I18n\t; class TotalServiceSlaReport extends ServiceSlaReport { use TotalSlaReportUtils; public function getName() { return t('Total Service SLA'); } } icingadb-web-1.5.0/library/Icingadb/ProvidedHook/X509/000077500000000000000000000000001527064444300222475ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/ProvidedHook/X509/Sni.php000066400000000000000000000027331527064444300235160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\ProvidedHook\X509; use Generator; use Icinga\Data\Filter\Filter; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\X509\Hook\SniHook; use ipl\Web\Filter\QueryString; class Sni extends SniHook { use Auth; use Database; /** * @inheritDoc */ public function getHosts(?Filter $filter = null): Generator { $this->getDb()->ping(); $queryHost = Host::on($this->getDb()) ->columns([ 'host_name' => 'name', 'host_address' => 'address', 'host_address6' => 'address6' ]); $this->applyRestrictions($queryHost); if ($filter !== null) { $queryString = $filter->toQueryString(); $filterCondition = QueryString::parse($queryString); $queryHost->filter($filterCondition); } $hosts = $this->getDb()->select($queryHost->assembleSelect()); /** @var Host $host */ foreach ($hosts as $host) { if (! empty($host->host_address)) { yield $host->host_address => $host->host_name; } if (! empty($host->host_address6)) { yield $host->host_address6 => $host->host_name; } } } } icingadb-web-1.5.0/library/Icingadb/Redis/000077500000000000000000000000001527064444300202535ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Redis/VolatileStateResults.php000066400000000000000000000166761527064444300251460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Redis; use Icinga\Application\Benchmark; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\IcingaRedis; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\State; use ipl\Orm\Query; use ipl\Orm\Resolver; use ipl\Orm\ResultSet; use RuntimeException; class VolatileStateResults extends ResultSet { use Auth; /** @var Resolver */ private $resolver; /** @var bool Whether Redis is unavailable */ private $redisUnavailable; /** @var bool Whether Redis updates were applied */ private $updatesApplied = false; /** @var string Object type host */ protected const TYPE_HOST = 'host'; /** @var string Object type service */ protected const TYPE_SERVICE = 'service'; /** @var array|null Columns to be selected if they were explicitly set, if empty all columns are selected */ protected ?array $columns; /** @var bool Whether the model's ID should be contained in the results */ protected bool $includeModelID = true; public static function fromQuery(Query $query): static { $self = parent::fromQuery($query); $self->resolver = $query->getResolver(); $self->redisUnavailable = Backend::getRedis()->isUnavailable(); $self->columns = $query->getColumns(); if (! empty($self->columns)) { // The id is necessary to apply the redis-updates if ($query->getModel() instanceof Host && empty(array_intersect(['host.id', 'id'], $self->columns))) { $query->withColumns('host.id'); $self->includeModelID = false; } elseif ( $query->getModel() instanceof Service && empty(array_intersect(['service.id', 'id'], $self->columns)) ) { $query->withColumns('service.id'); $self->includeModelID = false; } } return $self; } /** * Get whether Redis is unavailable * * @return bool */ public function isRedisUnavailable(): bool { return $this->redisUnavailable; } public function current(): mixed { if (! $this->redisUnavailable && ! $this->updatesApplied && ! $this->isCacheDisabled) { $this->rewind(); } $result = parent::current(); if ($this->isCacheDisabled && ! $this->redisUnavailable) { $this->applyRedisUpdates([$result]); } if (! $this->includeModelID) { unset($result['id']); } return $result; } public function key(): int { if (! $this->redisUnavailable && ! $this->updatesApplied && ! $this->isCacheDisabled) { $this->rewind(); } return parent::key(); } public function rewind(): void { if (! $this->redisUnavailable && ! $this->updatesApplied && ! $this->isCacheDisabled) { $this->updatesApplied = true; $this->advance(); Benchmark::measure('Applying Redis updates'); $this->applyRedisUpdates($this); Benchmark::measure('Redis updates applied'); } parent::rewind(); } /** * Apply redis state details to the given results * * @param self|array $rows * * @return void */ protected function applyRedisUpdates($rows) { $type = null; $showSourceGranted = $this->getAuth()->hasPermission('icingadb/object/show-source'); $getKeysAndBehaviors = function (State $state, $type): array { $columns = array_filter($state->getColumns(), function ($column) { return ! str_ends_with($column, '_id'); }); if (! empty($this->columns)) { $normalizedColumns = array_map( fn($column) => preg_replace("/^($type\.state\.|state\.)/", '', $column), $this->columns ); $stateColumns = array_intersect($normalizedColumns, $columns); return [$stateColumns, $this->resolver->getBehaviors($state)]; } return [$columns, $this->resolver->getBehaviors($state)]; }; $states = []; foreach ($rows as $row) { if ($row instanceof DependencyNode) { if ($row->redundancy_group_id !== null) { continue; } elseif ($row->service_id !== null) { $type = self::TYPE_SERVICE; $row = $row->service; } else { $type = self::TYPE_HOST; $row = $row->host; } } elseif ($type === null) { switch (true) { case $row instanceof Host: $type = self::TYPE_HOST; break; case $row instanceof Service: $type = self::TYPE_SERVICE; break; default: throw new RuntimeException('Volatile states can only be fetched for hosts and services'); } } $states[$type][bin2hex($row->id)] = $row->state; if (! isset($states[$type]['keys'])) { [$keys, $behaviors] = $getKeysAndBehaviors($row->state, $type); if (! $showSourceGranted) { $keys = array_diff($keys, ['check_commandline']); } $states[$type]['keys'] = $keys; $states[$type]['behaviors'] = $behaviors; } if ($type === self::TYPE_SERVICE && $row->host instanceof Host && isset($row->host->id)) { $states[self::TYPE_HOST][bin2hex($row->host->id)] = $row->host->state; if (! isset($states[self::TYPE_HOST]['keys'])) { [$keys, $behaviors] = $getKeysAndBehaviors($row->host->state, $type); $states[self::TYPE_HOST]['keys'] = $keys; $states[self::TYPE_HOST]['behaviors'] = $behaviors; } } } if (! empty($states[self::TYPE_SERVICE])) { $this->apply($states[self::TYPE_SERVICE], self::TYPE_SERVICE); } if (! empty($states[self::TYPE_HOST])) { $this->apply($states[self::TYPE_HOST], self::TYPE_HOST); } } /** * Apply the given states of given type to the results * * @param array $states * @param string $type The object type ({@see self::TYPE_HOST} OR {@see self::TYPE_SERVICE}) * * @return void */ protected function apply(array $states, string $type): void { $keys = $states['keys']; $behaviors = $states['behaviors']; unset($states['keys'], $states['behaviors']); $results = $type === self::TYPE_SERVICE ? IcingaRedis::fetchServiceState(array_keys($states), $keys) : IcingaRedis::fetchHostState(array_keys($states), $keys); foreach ($results as $id => $data) { foreach ($data as $key => $value) { $data[$key] = $behaviors->retrieveProperty($value, $key); } $states[$id]->setProperties($data); } } } icingadb-web-1.5.0/library/Icingadb/Setup/000077500000000000000000000000001527064444300203055ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Setup/ApiTransportPage.php000066400000000000000000000100311527064444300242340ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Icinga\Data\ConfigObject; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; use Icinga\Web\Form; class ApiTransportPage extends Form { public function init() { $this->setName('setup_icingadb_api_transport'); $this->setTitle(t('Icinga 2 API')); $this->addDescription(t( 'Please fill out the connection details to the Icinga 2 API.' )); $this->setValidatePartial(true); } public function createElements(array $formData) { if (isset($formData['skip_validation']) && $formData['skip_validation']) { // In case another error occured and the checkbox was displayed before $this->addSkipValidationCheckbox(); } else { $this->addElement('hidden', 'skip_validation', ['value' => 0]); } $this->addElement('hidden', 'transport', [ 'required' => true, 'disabled' => true, 'value' => 'api' ]); $this->addElement('hidden', 'name', [ 'required' => true, 'disabled' => true, 'value' => 'icinga2' ]); $this->addElement('text', 'host', [ 'required' => true, 'label' => t('Host'), 'description' => t('Hostname or address of the Icinga master') ]); $this->addElement('number', 'port', [ 'required' => true, 'label' => t('Port'), 'value' => 5665, 'min' => 1, 'max' => 65536 ]); $this->addElement('text', 'username', [ 'required' => true, 'label' => t('API Username'), 'description' => t('User to authenticate with using HTTP Basic Auth') ]); $this->addElement('password', 'password', [ 'required' => true, 'renderPassword' => true, 'label' => t('API Password'), 'autocomplete' => 'new-password' ]); } public function isValid($formData) { if (! parent::isValid($formData)) { return false; } if (! isset($formData['skip_validation']) || ! $formData['skip_validation']) { if (! $this->validateConfiguration()) { $this->addSkipValidationCheckbox(); return false; } } return true; } public function isValidPartial(array $formData) { if (isset($formData['backend_validation']) && parent::isValid($formData)) { if (! $this->validateConfiguration()) { return false; } $this->info(t('The configuration has been successfully validated.')); } elseif (! isset($formData['backend_validation'])) { // This is usually done by isValid(Partial), but as we're not calling any of these... $this->populate($formData); } return true; } protected function validateConfiguration(): bool { try { CommandTransport::createTransport(new ConfigObject($this->getValues()))->probe(); } catch (CommandTransportException $e) { $this->error(sprintf( t('Failed to successfully validate the configuration: %s'), $e->getMessage() )); return false; } return true; } protected function addSkipValidationCheckbox() { $this->addElement( 'checkbox', 'skip_validation', [ 'ignore' => true, 'label' => t('Skip Validation'), 'description' => t('Check this to not to validate the configuration') ] ); } } icingadb-web-1.5.0/library/Icingadb/Setup/ApiTransportStep.php000066400000000000000000000057661527064444300243160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Exception; use Icinga\Application\Config; use Icinga\Exception\IcingaException; use Icinga\Module\Setup\Step; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Table; use ipl\Html\Text; class ApiTransportStep extends Step { /** @var array */ protected $data; /** @var Exception */ protected $error; public function __construct(array $data) { $this->data = $data; } public function apply() { $transportConfig = $this->data; $transportName = $transportConfig['name']; unset($transportConfig['name']); try { $config = Config::module('icingadb', 'commandtransports', true); $config->setSection($transportName, $transportConfig); $config->saveIni(); } catch (Exception $e) { $this->error = $e; return false; } return true; } public function getSummary() { $description = new HtmlElement('p', null, Text::create(mt( 'icingadb', 'The Icinga 2 API will be accessed using the following connection details:' ))); $apiOptions = new Table(); $apiOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Host'))), $this->data['host'] ])); $apiOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Port'))), $this->data['port'] ])); $apiOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Username'))), $this->data['username'] ])); $apiOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Password'))), str_repeat('*', strlen($this->data['password'])) ])); $topic = new HtmlElement('div', Attributes::create(['class' => 'topic'])); $topic->addHtml($description, $apiOptions); $summary = new HtmlDocument(); $summary->addHtml( new HtmlElement('h2', null, Text::create(mt('icingadb', 'Icinga 2 API'))), $topic ); return $summary->render(); } public function getReport() { if ($this->error === null) { return [sprintf( mt('icingadb', 'Commandtransport configuration update successful: %s'), Config::module('icingadb', 'commandtransports')->getConfigFile() )]; } else { return [ sprintf( mt('icingadb', 'Commandtransport configuration update failed: %s'), Config::module('icingadb', 'commandtransports')->getConfigFile() ), sprintf(mt('setup', 'ERROR: %s'), IcingaException::describe($this->error)) ]; } } } icingadb-web-1.5.0/library/Icingadb/Setup/DbResourcePage.php000066400000000000000000000122031527064444300236460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Icinga\Forms\Config\ResourceConfigForm; use Icinga\Forms\Config\Resource\DbResourceForm; use Icinga\Web\Form; class DbResourcePage extends Form { public function init() { $this->setName('setup_icingadb_resource'); $this->setTitle(t('Icinga DB Resource')); $this->addDescription(t( 'Please fill out the connection details below to access Icinga DB.' )); $this->setValidatePartial(true); } public function createElements(array $formData) { $this->addElement( 'hidden', 'type', [ 'required' => true, 'disabled' => true, 'value' => 'db' ] ); if (isset($formData['skip_validation']) && $formData['skip_validation']) { // In case another error occured and the checkbox was displayed before $this->addSkipValidationCheckbox(); } else { $this->addElement('hidden', 'skip_validation', ['value' => 0]); } $dbResourceForm = new DbResourceForm(); $this->addElements($dbResourceForm->createElements($formData)->getElements()); $this->getElement('name')->setValue('icingadb'); $this->getElement('db')->setMultiOptions([ 'mysql' => 'MySQL', 'pgsql' => 'PostgreSQL' ]); $this->removeElement('name'); $this->addElement( 'hidden', 'name', [ 'required' => true, 'disabled' => true, 'value' => 'icingadb' ] ); $charsetElement = $this->getElement('charset'); if (! isset($formData['db']) || $formData['db'] === 'mysql') { $charsetElement->setValue('utf8mb4')->addDecorator( ['preserveDefault' => 'HtmlTag'], [ 'tag' => 'input', 'type' => 'hidden', 'name' => 'charset' . static::DEFAULT_SUFFIX, 'value' => 'utf8mb4' ] ); } else { $charsetElement->addDecorator( ['preserveDefault' => 'HtmlTag'], [ 'tag' => 'input', 'type' => 'hidden', 'name' => 'charset' . static::DEFAULT_SUFFIX, 'value' => '' ] ); } } public function isValid($formData) { if (! parent::isValid($formData)) { return false; } if (! isset($formData['skip_validation']) || ! $formData['skip_validation']) { if (! $this->validateConfiguration()) { $this->addSkipValidationCheckbox(); return false; } } return true; } public function isValidPartial(array $formData) { if (isset($formData['backend_validation']) && parent::isValid($formData)) { if (! $this->validateConfiguration(true)) { return false; } $this->info(t('The configuration has been successfully validated.')); } elseif (! isset($formData['backend_validation'])) { // This is usually done by isValid(Partial), but as we're not calling any of these... $this->populate($formData); } return true; } protected function validateConfiguration(bool $showLog = false): bool { $inspection = ResourceConfigForm::inspectResource($this); if ($inspection !== null) { if ($showLog) { $join = function ($e) use (&$join) { return is_string($e) ? $e : join("\n", array_map($join, $e)); }; $this->addElement( 'note', 'inspection_output', [ 'order' => 0, 'value' => '' . t('Validation Log') . "\n\n" . join("\n", array_map($join, $inspection->toArray())), 'decorators' => [ 'ViewHelper', ['HtmlTag', ['tag' => 'pre', 'class' => 'log-output']], ] ] ); } if ($inspection->hasError()) { $this->error(sprintf( t('Failed to successfully validate the configuration: %s'), $inspection->getError() )); return false; } } return true; } protected function addSkipValidationCheckbox() { $this->addElement( 'checkbox', 'skip_validation', [ 'ignore' => true, 'label' => t('Skip Validation'), 'description' => t('Check this to not to validate the configuration') ] ); } } icingadb-web-1.5.0/library/Icingadb/Setup/DbResourceStep.php000066400000000000000000000123131527064444300237070ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Exception; use Icinga\Application\Config; use Icinga\Exception\IcingaException; use Icinga\Module\Setup\Step; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Table; use ipl\Html\Text; class DbResourceStep extends Step { /** @var array */ protected $data; /** @var Exception */ protected $error; public function __construct(array $data) { $this->data = $data; } public function apply() { $resourceConfig = $this->data; $resourceName = $resourceConfig['name']; unset($resourceConfig['name']); try { $config = Config::app('resources', true); $config->setSection($resourceName, $resourceConfig); $config->saveIni(); } catch (Exception $e) { $this->error = $e; return false; } try { $config = Config::module('icingadb', 'config', true); $config->setSection('icingadb', ['resource' => $resourceName]); $config->saveIni(); } catch (Exception $e) { $this->error = $e; return false; } return true; } public function getSummary() { $description = new HtmlElement('p', null, Text::create(mt( 'icingadb', 'Icinga DB will be accessed using the following connection details:' ))); $resourceOptions = new Table(); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Host'))), $this->data['host'] ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Port'))), $this->data['port'] ?: ($this->data['db'] === 'mysql' ? 3306 : 5432) ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Database'))), $this->data['dbname'] ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Username'))), $this->data['username'] ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Password'))), str_repeat('*', strlen($this->data['password'])) ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Charset'))), $this->data['charset'] ])); if (isset($this->data['use_ssl']) && $this->data['use_ssl']) { $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('SSL Do Not Verify Server Certificate'))), isset($this->data['ssl_do_not_verify_server_cert']) && $this->data['ssl_do_not_verify_server_cert'] ? t('Yes') : t('No') ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('SSL Key'))), $this->data['ssl_key'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('SSL Certificate'))), $this->data['ssl_cert'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('SSL CA'))), $this->data['ssl_ca'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('The CA certificate file path'))), $this->data['ssl_capath'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); $resourceOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('SSL CA Path'))), $this->data['ssl_cipher'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); } $topic = new HtmlElement('div', Attributes::create(['class' => 'topic'])); $topic->addHtml($description, $resourceOptions); $summary = new HtmlDocument(); $summary->addHtml( new HtmlElement('h2', null, Text::create(mt('icingadb', 'Icinga DB Resource'))), $topic ); return $summary->render(); } public function getReport() { if ($this->error === null) { return [sprintf( mt('icingadb', 'Resource configuration update successful: %s'), Config::resolvePath('resources.ini') )]; } else { return [ sprintf( mt('icingadb', 'Resource configuration update failed: %s'), Config::resolvePath('resources.ini') ), sprintf(mt('setup', 'ERROR: %s'), IcingaException::describe($this->error)) ]; } } } icingadb-web-1.5.0/library/Icingadb/Setup/IcingaDbWizard.php000066400000000000000000000061301527064444300236370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Icinga\Application\Icinga; use Icinga\Module\Setup\Forms\SummaryPage; use Icinga\Module\Setup\Requirement\PhpModuleRequirement; use Icinga\Module\Setup\Requirement\WebLibraryRequirement; use Icinga\Module\Setup\RequirementSet; use Icinga\Module\Setup\Setup; use Icinga\Module\Setup\SetupWizard; use Icinga\Web\Form; use Icinga\Web\Request; use Icinga\Web\Wizard; class IcingaDbWizard extends Wizard implements SetupWizard { protected function init() { $this->addPage(new WelcomePage()); $this->addPage(new DbResourcePage()); $this->addPage(new RedisPage()); $this->addPage(new ApiTransportPage()); $this->addPage(new SummaryPage(['name' => 'setup_icingadb_summary'])); } public function setupPage(Form $page, Request $request) { if ($page->getName() === 'setup_icingadb_summary') { $page->setSummary($this->getSetup()->getSummary()); $page->setSubjectTitle('Icinga DB Web'); } } public function getSetup() { $pageData = $this->getPageData(); $setup = new Setup(); $setup->addStep(new DbResourceStep($pageData['setup_icingadb_resource'])); $setup->addStep(new RedisStep($pageData['setup_icingadb_redis'])); $setup->addStep(new ApiTransportStep($pageData['setup_icingadb_api_transport'])); return $setup; } public function getRequirements() { $set = new RequirementSet(); $requiredVersions = Icinga::app()->getModuleManager()->getModule('icingadb')->getRequiredLibraries(); $set->add(new WebLibraryRequirement([ 'condition' => ['icinga-php-library', '', $requiredVersions['icinga-php-library']], 'alias' => 'Icinga PHP library', 'description' => t('The Icinga PHP library (IPL) is required for Icinga DB Web') ])); $set->add(new WebLibraryRequirement([ 'condition' => ['icinga-php-thirdparty', '', $requiredVersions['icinga-php-thirdparty']], 'alias' => 'Icinga PHP Thirdparty', 'description' => t('The Icinga PHP Thirdparty library is required for Icinga DB Web') ])); $set->add(new PhpModuleRequirement([ 'condition' => 'libxml', 'alias' => 'libxml', 'description' => t('For check plugins that output HTML the libxml extension is required') ])); $set->add(new PhpModuleRequirement([ 'condition' => 'dom', 'alias' => 'dom', 'description' => t('For check plugins that output HTML the dom extension is required') ])); $set->add(new PhpModuleRequirement([ 'condition' => 'curl', 'alias' => 'cURL', 'description' => t( 'To send external commands over Icinga 2\'s API, the cURL module for PHP is required.' ) ])); return $set; } } icingadb-web-1.5.0/library/Icingadb/Setup/RedisPage.php000066400000000000000000000037361527064444300226720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Icinga\Module\Icingadb\Forms\RedisConfigForm; use Icinga\Web\Form; class RedisPage extends Form { public function init() { $this->setName('setup_icingadb_redis'); $this->setTitle(t('Redis')); $this->addDescription(t( 'Please fill out the connection details to access the Redis server.' )); $this->setValidatePartial(true); } public function createElements(array $formData) { $redisConfigForm = new RedisConfigForm(); $redisConfigForm->createElements($formData); if (isset($formData['redis_tls']) && $formData['redis_tls']) { $redisConfigForm->getElement('redis_ca_pem')->setIgnore(false); $redisConfigForm->getElement('redis_cert_pem')->setIgnore(false); $redisConfigForm->getElement('redis_key_pem')->setIgnore(false); } $this->addElements($redisConfigForm->getElements()); $this->addDisplayGroups($redisConfigForm->getDisplayGroups()); } public function isValid($formData) { if (! parent::isValid($formData)) { return false; } if (($el = $this->getElement('skip_validation')) === null || ! $el->isChecked()) { if (! RedisConfigForm::checkRedis($this)) { if ($el === null) { RedisConfigForm::addSkipValidationCheckbox($this); RedisConfigForm::addInsecureCheckboxIfTls($this); } return false; } } return true; } public function isValidPartial(array $formData) { if (! parent::isValidPartial($formData)) { return false; } if (isset($formData['backend_validation'])) { return RedisConfigForm::checkRedis($this); } return true; } } icingadb-web-1.5.0/library/Icingadb/Setup/RedisStep.php000066400000000000000000000161641527064444300227300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Exception; use Icinga\Application\Config; use Icinga\Application\Icinga; use Icinga\Exception\IcingaException; use Icinga\Exception\NotWritableError; use Icinga\File\Storage\LocalFileStorage; use Icinga\Module\Setup\Step; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Table; use ipl\Html\Text; class RedisStep extends Step { /** @var array */ protected $data; /** @var Exception */ protected $error; public function __construct(array $data) { $this->data = $data; } public function apply() { $moduleConfig = [ 'redis' => [ 'tls' => 0 ] ]; $redisConfig = [ 'redis1' => [ 'host' => $this->data['redis1_host'], 'port' => $this->data['redis1_port'] ?: null, 'password' => $this->data['redis1_password'] ?: null ] ]; if (isset($this->data['redis2_host']) && $this->data['redis2_host']) { $redisConfig['redis2'] = [ 'host' => $this->data['redis2_host'], 'port' => $this->data['redis2_port'] ?: null, 'password' => $this->data['redis2_password'] ?: null ]; } if (isset($this->data['redis_tls']) && $this->data['redis_tls']) { $moduleConfig['redis']['tls'] = 1; if (isset($this->data['redis_insecure']) && $this->data['redis_insecure']) { $moduleConfig['redis']['insecure'] = 1; } $storage = new LocalFileStorage(Icinga::app()->getStorageDir( join(DIRECTORY_SEPARATOR, ['modules', 'icingadb', 'redis']) )); foreach (['ca', 'cert', 'key'] as $name) { $textareaName = 'redis_' . $name . '_pem'; if (isset($this->data[$textareaName]) && $this->data[$textareaName]) { $pem = $this->data[$textareaName]; $pemFile = md5($pem) . '-' . $name . '.pem'; if (! $storage->has($pemFile)) { try { $storage->create($pemFile, $pem); } catch (NotWritableError $e) { $this->error = $e; return false; } } $moduleConfig['redis'][$name] = $storage->resolvePath($pemFile); } } } try { $config = Config::module('icingadb', 'config', true); foreach ($moduleConfig as $section => $options) { $config->setSection($section, $options); } $config->saveIni(); $config = Config::module('icingadb', 'redis', true); foreach ($redisConfig as $section => $options) { $config->setSection($section, $options); } $config->saveIni(); } catch (Exception $e) { $this->error = $e; return false; } return true; } public function getSummary() { $topic = new HtmlElement('div', Attributes::create(['class' => 'topic'])); $topic->addHtml(new HtmlElement('p', null, Text::create(mt( 'icingadb', 'Redis will be accessed using the following connection details:' )))); $primaryOptions = new Table(); $primaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Host'))), $this->data['redis1_host'] ])); $primaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Port'))), $this->data['redis1_port'] ?: 6380 ])); $primaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Password'))), $this->data['redis1_password'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); if (isset($this->data['redis2_host']) && $this->data['redis2_host']) { $topic->addHtml( new HtmlElement('h3', null, Text::create(mt('icingadb', 'Primary'))), $primaryOptions ); $secondaryOptions = new Table(); $secondaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Host'))), $this->data['redis2_host'] ])); $secondaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Port'))), $this->data['redis2_port'] ?: 6380 ])); $secondaryOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create(t('Password'))), $this->data['redis2_password'] ?: mt('icingadb', 'None', 'non-existence of a value') ])); $topic->addHtml( new HtmlElement('h3', null, Text::create(mt('icingadb', 'Secondary'))), $secondaryOptions ); } else { $topic->addHtml($primaryOptions); } $tlsOptions = new Table(); $topic->addHtml($tlsOptions); if (isset($this->data['redis_tls']) && $this->data['redis_tls']) { if (isset($this->data['redis_cert_pem']) && $this->data['redis_cert_pem']) { $tlsOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create('TLS')), Text::create( t('Icinga DB Web will authenticate against Redis with a client' . ' certificate and private key over a secured connection') ) ])); } else { $tlsOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create('TLS')), Text::create(t('Icinga DB Web will use secured Redis connections')) ])); } } else { $tlsOptions->addHtml(Table::row([ new HtmlElement('strong', null, Text::create('TLS')), Text::create(t('No')) ])); } $summary = new HtmlDocument(); $summary->addHtml( new HtmlElement('h2', null, Text::create(mt('icingadb', 'Redis'))), $topic ); return $summary->render(); } public function getReport() { if ($this->error === null) { return [sprintf( mt('icingadb', 'Module configuration update successful: %s'), Config::module('icingab')->getConfigFile() )]; } else { return [ sprintf( mt('icingadb', 'Module configuration update failed: %s'), Config::module('icingab')->getConfigFile() ), sprintf(mt('setup', 'ERROR: %s'), IcingaException::describe($this->error)) ]; } } } icingadb-web-1.5.0/library/Icingadb/Setup/WelcomePage.php000066400000000000000000000030411527064444300232040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Setup; use Icinga\Web\Form; class WelcomePage extends Form { public function init() { $this->setName('setup_icingadb_welcome'); } public function createElements(array $formData) { $this->addElement( 'note', 'welcome', array( 'value' => t( 'Welcome to the configuration of Icinga DB Web!' ), 'decorators' => array( 'ViewHelper', array('HtmlTag', array('tag' => 'h2')) ) ) ); $this->addElement( 'note', 'description_1', array( 'value' => '

' . t( 'Icinga DB Web is the UI for Icinga DB and provides' . ' a graphical interface to your monitoring environment.' ) . '

', 'decorators' => array('ViewHelper') ) ); $this->addElement( 'note', 'description_2', array( 'value' => '

' . t( 'The wizard will guide you through the configuration to' . ' establish a connection with Icinga DB and Icinga 2.' ) . '

', 'decorators' => array('ViewHelper') ) ); } } icingadb-web-1.5.0/library/Icingadb/Util/000077500000000000000000000000001527064444300201225ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Util/FeatureStatus.php000066400000000000000000000031721527064444300234350ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; use ArrayObject; use Icinga\Module\Icingadb\Command\Object\ToggleObjectFeatureCommand; class FeatureStatus extends ArrayObject { public function __construct(string $type, $summary) { $prefix = "{$type}s"; $featureStatus = [ ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS => $this->getFeatureStatus('active_checks_enabled', $prefix, $summary), ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS => $this->getFeatureStatus('passive_checks_enabled', $prefix, $summary), ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS => $this->getFeatureStatus('notifications_enabled', $prefix, $summary), ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER => $this->getFeatureStatus('event_handler_enabled', $prefix, $summary), ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION => $this->getFeatureStatus('flapping_enabled', $prefix, $summary) ]; parent::__construct($featureStatus, ArrayObject::ARRAY_AS_PROPS); } protected function getFeatureStatus(string $feature, string $prefix, $summary): int { $key = "{$prefix}_{$feature}"; $value = (int) $summary->$key; if ($value === 0) { return 0; } $totalKey = "{$prefix}_total"; $total = (int) $summary->$totalKey; if ($value === $total) { return 1; } return 2; } } icingadb-web-1.5.0/library/Icingadb/Util/OptimizerHints.php000066400000000000000000000052441527064444300236300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; use Icinga\Application\Config; use ipl\Orm\Query; use ipl\Sql\Adapter\Mysql; use ipl\Sql\Select; use ipl\Stdlib\Str; /** * Helper class to allow disabling the MySQL/MariaDB query optimizer for history queries. * Some versions of these RDBMS perform poorly with history queries, * particularly when the optimizer changes join order or uses block nested loop joins. * Ideally, testing across all RDBMS versions to identify when the optimizer fails and adjusting queries or * using optimizer switches would be preferable, but this level of effort is not justified at the moment. */ readonly class OptimizerHints { public const DISABLE_OPTIMIZER_HINT = '/*+ NO_BNL() */ STRAIGHT_JOIN'; /** * If optimizer disabling is enabled for history queries, * injects an optimizer hint into SELECT queries for a MySQL/MariaDB Query object, * forcing the RDBMS to disable the optimizer * * @param Query $q * * @return void */ public static function disableOptimizerForHistoryQueries(Query $q): void { if (static::shouldDisableOptimizerForHistoryQueries() && $q->getDb()->getAdapter() instanceof Mysql) { // Locates the first string column, prepends the optimizer hint, // and resets columns to ensure it appears first in the SELECT statement: $q->on(Query::ON_SELECT_ASSEMBLED, static function (Select $select) { $columns = $select->getColumns(); foreach ($columns as $alias => $column) { if (is_string($column)) { if (Str::startsWith($column, static::DISABLE_OPTIMIZER_HINT)) { return; } unset($columns[$alias]); if (is_int($alias)) { array_unshift($columns, static::DISABLE_OPTIMIZER_HINT . " $column"); } else { $columns = [$alias => static::DISABLE_OPTIMIZER_HINT . " $column"] + $columns; } $select->resetColumns()->columns($columns); return; } } }); } } /** * Determines whether to disable the query optimizer for history queries. * * @return bool */ protected static function shouldDisableOptimizerForHistoryQueries(): bool { return Config::module('icingadb')->get('icingadb', 'disable_optimizer_for_history_queries', false); } } icingadb-web-1.5.0/library/Icingadb/Util/PerfData.php000066400000000000000000000427101527064444300223250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Web\Widget\Chart\InlinePie; use InvalidArgumentException; use LogicException; class PerfData { public const PERFDATA_OK = 'ok'; public const PERFDATA_WARNING = 'warning'; public const PERFDATA_CRITICAL = 'critical'; /** * The performance data value being parsed * * @var string */ protected $perfdataValue; /** * Unit of measurement (UOM) * * @var string */ protected $unit; /** * The label * * @var string */ protected $label; /** * The value * * @var ?float */ protected $value; /** * The minimum value * * @var ?float */ protected $minValue; /** * The maximum value * * @var ?float */ protected $maxValue; /** * The WARNING threshold * * @var ThresholdRange */ protected $warningThreshold; /** * The CRITICAL threshold * * @var ThresholdRange */ protected $criticalThreshold; /** * The raw value * * @var ?string */ protected $rawValue; /** * The raw minimum value * * @var ?string */ protected $rawMinValue; /** * The raw maximum value * * @var ?string */ protected $rawMaxValue; /** * Create a new PerfData object based on the given performance data label and value * * @param string $label The perfdata label * @param string $value The perfdata value */ public function __construct(string $label, string $value) { $this->perfdataValue = $value; $this->label = $label; $this->parse(); if ($this->unit === '%') { if ($this->minValue === null) { $this->minValue = 0.0; } if ($this->maxValue === null) { $this->maxValue = 100.0; } } $warn = $this->warningThreshold->getMax(); if ($warn !== null) { $crit = $this->criticalThreshold->getMax(); if ($crit !== null && $warn > $crit) { $this->warningThreshold->setInverted(); $this->criticalThreshold->setInverted(); } } } /** * Return a new PerfData object based on the given performance data key=value pair * * @param string $perfdata The key=value pair to parse * * @return PerfData * * @throws InvalidArgumentException In case the given performance data has no content or a invalid format */ public static function fromString(string $perfdata): self { if (empty($perfdata)) { throw new InvalidArgumentException('PerfData::fromString expects a string with content'); } elseif (strpos($perfdata, '=') === false) { throw new InvalidArgumentException( 'PerfData::fromString expects a key=value formatted string. Got "' . $perfdata . '" instead' ); } list($label, $value) = explode('=', $perfdata, 2); return new static(trim($label), trim($value)); } /** * Return whether this performance data's value is a number * * @return bool True in case it's a number, otherwise False */ public function isNumber(): bool { return $this->unit === null; } /** * Return whether this performance data's value are seconds * * @return bool True in case it's seconds, otherwise False */ public function isSeconds(): bool { return $this->unit === 's'; } /** * Return whether this performance data's value is a temperature * * @return bool True in case it's temperature, otherwise False */ public function isTemperature(): bool { return in_array($this->unit, array('C', 'F', 'K')); } /** * Return whether this performance data's value is in percentage * * @return bool True in case it's in percentage, otherwise False */ public function isPercentage(): bool { return $this->unit === '%'; } /** * Get whether this perf data's value is in packets * * @return bool True in case it's in packets */ public function isPackets(): bool { return $this->unit === 'packets'; } /** * Get whether this perf data's value is in lumen * * @return bool */ public function isLumens(): bool { return $this->unit === 'lm'; } /** * Get whether this perf data's value is in decibel-milliwatts * * @return bool */ public function isDecibelMilliWatts(): bool { return $this->unit === 'dBm'; } /** * Get whether this data's value is in bits * * @return bool */ public function isBits(): bool { return $this->unit === 'b'; } /** * Return whether this performance data's value is in bytes * * @return bool True in case it's in bytes, otherwise False */ public function isBytes(): bool { return $this->unit === 'B'; } /** * Get whether this data's value is in watt hours * * @return bool */ public function isWattHours(): bool { return $this->unit === 'Wh'; } /** * Get whether this data's value is in watt * * @return bool */ public function isWatts(): bool { return $this->unit === 'W'; } /** * Get whether this data's value is in ampere * * @return bool */ public function isAmperes(): bool { return $this->unit === 'A'; } /** * Get whether this data's value is in ampere seconds * * @return bool */ public function isAmpSeconds(): bool { return $this->unit === 'As'; } /** * Get whether this data's value is in volts * * @return bool */ public function isVolts(): bool { return $this->unit === 'V'; } /** * Get whether this data's value is in ohm * * @return bool */ public function isOhms(): bool { return $this->unit === 'O'; } /** * Get whether this data's value is in grams * * @return bool */ public function isGrams(): bool { return $this->unit === 'g'; } /** * Get whether this data's value is in Litters * * @return bool */ public function isLiters(): bool { return $this->unit === 'l'; } /** * Return whether this performance data's value is a counter * * @return bool True in case it's a counter, otherwise False */ public function isCounter(): bool { return $this->unit === 'c'; } /** * Returns whether it is possible to display a visual representation * * @return bool True when the perfdata is visualizable */ public function isVisualizable(): bool { return isset($this->minValue, $this->maxValue, $this->value) && $this->isValid(); } /** * Return this perfomance data's label */ public function getLabel(): string { return $this->label; } /** * Return the value or null if it is unknown (U) * * @return null|float */ public function getValue() { return $this->value; } /** * Return the unit as a string * * @return ?string */ public function getUnit() { return $this->unit; } /** * Return the value as percentage (0-100) * * @return null|float */ public function getPercentage() { if ($this->isPercentage()) { return $this->value; } if ($this->maxValue !== null) { $minValue = $this->minValue !== null ? $this->minValue : 0.0; if ($this->maxValue == $minValue) { return null; } if ($this->value > $minValue) { return (($this->value - $minValue) / ($this->maxValue - $minValue)) * 100; } } } /** * Return this performance data's warning treshold * * @return ThresholdRange */ public function getWarningThreshold(): ThresholdRange { return $this->warningThreshold; } /** * Return this performance data's critical treshold * * @return ThresholdRange */ public function getCriticalThreshold(): ThresholdRange { return $this->criticalThreshold; } /** * Return the minimum value or null if it is not available * * @return ?float */ public function getMinimumValue() { return $this->minValue; } /** * Return the maximum value or null if it is not available * * @return null|float */ public function getMaximumValue() { return $this->maxValue; } /** * Return this performance data as string * * @return string */ public function __toString() { return $this->formatLabel(); } /** * Parse the current performance data value * * @todo Handle optional min/max if UOM == % */ protected function parse() { $parts = explode(';', $this->perfdataValue); $matches = array(); if (preg_match('@^(U|-?(?:\d+)?(?:\.\d+)?)([a-zA-TV-Z%°]{1,3})$@u', $parts[0], $matches)) { $this->unit = $matches[2]; $value = $matches[1]; } else { $value = $parts[0]; } if (! is_numeric($value)) { if ($value !== 'U') { $this->rawValue = $parts[0]; } $this->value = null; } else { $this->value = floatval($value); } switch (count($parts)) { /* @noinspection PhpMissingBreakStatementInspection */ case 5: if ($parts[4] !== '') { if (is_numeric($parts[4])) { $this->maxValue = floatval($parts[4]); } else { $this->rawMaxValue = $parts[4]; } } /* @noinspection PhpMissingBreakStatementInspection */ case 4: if ($parts[3] !== '') { if (is_numeric($parts[3])) { $this->minValue = floatval($parts[3]); } else { $this->rawMinValue = $parts[3]; } } /* @noinspection PhpMissingBreakStatementInspection */ case 3: $this->criticalThreshold = ThresholdRange::fromString(trim($parts[2])); // Fallthrough case 2: $this->warningThreshold = ThresholdRange::fromString(trim($parts[1])); } if ($this->warningThreshold === null) { $this->warningThreshold = new ThresholdRange(); } if ($this->criticalThreshold === null) { $this->criticalThreshold = new ThresholdRange(); } } protected function calculatePieChartData(): array { $rawValue = $this->getValue(); $minValue = $this->getMinimumValue() !== null ? $this->getMinimumValue() : 0; $usedValue = ($rawValue - $minValue); $green = $orange = $red = 0; if ($this->criticalThreshold->contains($rawValue)) { if ($this->warningThreshold->contains($rawValue)) { $green = $usedValue; } else { $orange = $usedValue; } } else { $red = $usedValue; } return array($green, $orange, $red, ($this->getMaximumValue() - $minValue) - $usedValue); } public function asInlinePie(): InlinePie { if (! $this->isVisualizable()) { throw new LogicException('Cannot calculate piechart data for unvisualizable perfdata entry.'); } $data = $this->calculatePieChartData(); $pieChart = new InlinePie($data, $this); $pieChart->setColors(array('#44bb77', '#ffaa44', '#ff5566', '#ddccdd')); return $pieChart; } /** * Format the given value depending on the currently used unit */ protected function format($value) { if ($value === null) { return null; } if ($value instanceof ThresholdRange) { if (! $value->isValid()) { return (string) $value; } if ($value->getMin()) { return (string) $value; } $max = $value->getMax(); return $max === null ? '' : $this->format($max); } switch (true) { case $this->isPercentage(): return (string) $value . '%'; case $this->isPackets(): return (string) $value . 'packets'; case $this->isLumens(): return (string) $value . 'lm'; case $this->isDecibelMilliWatts(): return (string) $value . 'dBm'; case $this->isCounter(): return (string) $value . 'c'; case $this->isTemperature(): return (string) $value . $this->unit; case $this->isBits(): return PerfDataFormat::bits($value); case $this->isBytes(): return PerfDataFormat::bytes($value); case $this->isSeconds(): return PerfDataFormat::seconds($value); case $this->isWatts(): return PerfDataFormat::watts($value); case $this->isWattHours(): return PerfDataFormat::wattHours($value); case $this->isAmperes(): return PerfDataFormat::amperes($value); case $this->isAmpSeconds(): return PerfDataFormat::ampereSeconds($value); case $this->isVolts(): return PerfDataFormat::volts($value); case $this->isOhms(): return PerfDataFormat::ohms($value); case $this->isGrams(): return PerfDataFormat::grams($value); case $this->isLiters(): return PerfDataFormat::liters($value); case ! is_numeric($value): return $value; default: return number_format($value, 2) . ($this->unit !== null ? ' ' . $this->unit : ''); } } /** * Format the title string that represents this perfdata set * * @param bool $html * * @return string */ public function formatLabel(bool $html = false): string { return sprintf( $html ? '%s %s (%s%%)' : '%s %s (%s%%)', htmlspecialchars($this->getLabel()), $this->format($this->value), number_format($this->getPercentage() ?? 0, 2) ); } public function toArray(): array { return [ 'label' => $this->getLabel(), 'value' => isset($this->value) ? $this->format($this->value) : $this->rawValue, 'min' => (string) ( ! $this->isPercentage() ? (isset($this->minValue) ? $this->format($this->minValue) : $this->rawMinValue) : null ), 'max' => (string) ( ! $this->isPercentage() ? (isset($this->maxValue) ? $this->format($this->maxValue) : $this->rawMaxValue) : null ), 'warn' => $this->format($this->warningThreshold), 'crit' => $this->format($this->criticalThreshold) ]; } /** * Return the state indicated by this perfdata * * @return int */ public function getState(): int { if (! is_numeric($this->value)) { return ServiceStates::UNKNOWN; } if (! $this->criticalThreshold->contains($this->value)) { return ServiceStates::CRITICAL; } if (! $this->warningThreshold->contains($this->value)) { return ServiceStates::WARNING; } return ServiceStates::OK; } /** * Return whether the state indicated by this perfdata is worse than * the state indicated by the other perfdata * CRITICAL > UNKNOWN > WARNING > OK * * @param PerfData $rhs the other perfdata * * @return bool */ public function worseThan(PerfData $rhs): bool { if (($state = $this->getState()) === ($rhsState = $rhs->getState())) { return $this->getPercentage() > $rhs->getPercentage(); } if ($state === ServiceStates::CRITICAL) { return true; } if ($state === ServiceStates::UNKNOWN) { return $rhsState !== ServiceStates::CRITICAL; } if ($state === ServiceStates::WARNING) { return $rhsState === ServiceStates::OK; } return false; } /** * Returns whether the performance data can be evaluated * * @return bool */ public function isValid(): bool { return ! isset($this->rawValue) && ! isset($this->rawMinValue) && ! isset($this->rawMaxValue) && $this->criticalThreshold->isValid() && $this->warningThreshold->isValid(); } } icingadb-web-1.5.0/library/Icingadb/Util/PerfDataFormat.php000066400000000000000000000107531527064444300235000ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; class PerfDataFormat { protected static $instance; protected static $generalBase = 1000; protected static $bitPrefix = ['b', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb']; protected static $bytePrefix = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; protected static $wattHourPrefix = ['Wh', 'kWh', 'MWh', 'GWh', 'TWh', 'PWh', 'EWh', 'ZWh', 'YWh']; protected static $wattPrefix = [-1 => 'mW', 'W', 'kW', 'MW', 'GW']; protected static $amperePrefix = [-3 => 'nA', -2 => 'µA', -1 => 'mA', 'A', 'kA', 'MA', 'GA']; protected static $ampSecondPrefix = [-2 => 'µAs', -1 => 'mAs', 'As', 'kAs', 'MAs', 'GAs']; protected static $voltPrefix = [-2 => 'µV', -1 => 'mV', 'V', 'kV', 'MV', 'GV']; protected static $ohmPrefix = ['Ω']; protected static $gramPrefix = [ -5 => 'fg', -4 => 'pg', -3 => 'ng', -2 => 'µg', -1 => 'mg', 'g', 'kg', 't', 'ktÇ‚', 'Mt', 'Gt' ]; protected static $literPrefix = [ -5 => 'fl', -4 => 'pl', -3 => 'nl', -2 => 'µl', -1 => 'ml', 'l', 'kl', 'Ml', 'Gl', 'Tl', 'Pl' ]; protected static $secondPrefix = [-3 => 'ns', -2 => 'µs', -1 => 'ms', 's']; public static function getInstance(): self { if (self::$instance === null) { self::$instance = new PerfDataFormat(); } return self::$instance; } public static function bits($value): string { return self::formatForUnits($value, self::$bitPrefix, self::$generalBase); } public static function bytes($value): string { return self::formatForUnits($value, self::$bytePrefix, self::$generalBase); } public static function wattHours($value): string { return self::formatForUnits($value, self::$wattHourPrefix, self::$generalBase); } public static function watts($value): string { return self::formatForUnits($value, self::$wattPrefix, self::$generalBase); } public static function amperes($value): string { return self::formatForUnits($value, self::$amperePrefix, self::$generalBase); } public static function ampereSeconds($value): string { return self::formatForUnits($value, self::$ampSecondPrefix, self::$generalBase); } public static function volts($value): string { return self::formatForUnits($value, self::$voltPrefix, self::$generalBase); } public static function ohms($value): string { return self::formatForUnits($value, self::$ohmPrefix, self::$generalBase); } public static function grams($value): string { return self::formatForUnits($value, self::$gramPrefix, self::$generalBase); } public static function liters($value): string { return self::formatForUnits($value, self::$literPrefix, self::$generalBase); } public static function seconds($value): string { $value = (float) $value; $absValue = abs($value); if ($absValue < 60) { return self::formatForUnits($value, self::$secondPrefix, self::$generalBase); } elseif ($absValue < 3600) { return sprintf('%0.2f m', $value / 60); } elseif ($absValue < 86400) { return sprintf('%0.2f h', $value / 3600); } return sprintf('%0.2f d', $value / 86400); } protected static function formatForUnits(float $value, array &$units, int $base): string { $sign = ''; if ($value < 0) { $value = abs($value); $sign = '-'; } if ($value == 0) { $pow = $result = 0; } else { $pow = floor(log($value, $base)); // Identify nearest unit if unknown while (! isset($units[$pow])) { if ($pow < 0) { $pow++; } else { $pow--; } } $result = $value / pow($base, $pow); } // 1034.23 looks better than 1.03, but 2.03 is fine: if ($pow > 0 && $result < 2) { $result = $value / pow($base, --$pow); } return sprintf( '%s%0.2f %s', $sign, $result, $units[$pow] ); } } icingadb-web-1.5.0/library/Icingadb/Util/PerfDataSet.php000066400000000000000000000111141527064444300227730ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; use ArrayIterator; use IteratorAggregate; class PerfDataSet implements IteratorAggregate { /** * The performance data being parsed * * @var string */ protected $perfdataStr; /** * The current parsing position * * @var int */ protected $parserPos = 0; /** * A list of PerfData objects * * @var array */ protected $perfdata = array(); /** * Create a new set of performance data * * @param string $perfdataStr A space separated list of label/value pairs */ protected function __construct(string $perfdataStr) { if (($perfdataStr = trim($perfdataStr)) !== '') { $this->perfdataStr = $perfdataStr; $this->parse(); } } /** * Return a iterator for this set of performance data * * @return ArrayIterator */ public function getIterator(): ArrayIterator { return new ArrayIterator($this->asArray()); } /** * Return a new set of performance data * * @param string $perfdataStr A space separated list of label/value pairs * * @return PerfDataSet */ public static function fromString(string $perfdataStr): self { return new static($perfdataStr); } /** * Return this set of performance data as array * * @return array */ public function asArray(): array { return $this->perfdata; } /** * Parse the current performance data */ protected function parse() { while ($this->parserPos < strlen($this->perfdataStr)) { $label = trim($this->readLabel()); $value = trim($this->readUntil(' ')); if ($label) { $this->perfdata[] = new PerfData($label, $value); } } uasort( $this->perfdata, function ($a, $b) { if ($a->isVisualizable() && ! $b->isVisualizable()) { return -1; } elseif (! $a->isVisualizable() && $b->isVisualizable()) { return 1; } elseif (! $a->isVisualizable() && ! $b->isVisualizable()) { return 0; } return $a->worseThan($b) ? -1 : ($b->worseThan($a) ? 1 : 0); } ); } /** * Return the next label found in the performance data * * @return string The label found */ protected function readLabel(): string { $this->skipSpaces(); if (in_array($this->perfdataStr[$this->parserPos], array('"', "'"))) { $quoteChar = $this->perfdataStr[$this->parserPos++]; $label = $this->readUntil($quoteChar, '='); $this->parserPos++; if ($this->perfdataStr[$this->parserPos] === '=') { $this->parserPos++; } } else { $label = $this->readUntil('='); $this->parserPos++; } $this->skipSpaces(); return $label; } /** * Return all characters between the current parser position and the given character * * @param string $stopChar The character on which to stop * @param ?string $backtrackOn The character on which to backtrack * * @return string */ protected function readUntil(string $stopChar, ?string $backtrackOn = null): string { $start = $this->parserPos; $breakCharEncounteredAt = null; $stringExhaustedAt = strlen($this->perfdataStr); while ($this->parserPos < $stringExhaustedAt) { if ($this->perfdataStr[$this->parserPos] === $stopChar) { break; } elseif ($breakCharEncounteredAt === null && $this->perfdataStr[$this->parserPos] === $backtrackOn) { $breakCharEncounteredAt = $this->parserPos; } $this->parserPos++; } if ($breakCharEncounteredAt !== null && $this->parserPos === $stringExhaustedAt) { $this->parserPos = $breakCharEncounteredAt; } return substr($this->perfdataStr, $start, $this->parserPos - $start); } /** * Advance the parser position to the next non-whitespace character */ protected function skipSpaces() { while ($this->parserPos < strlen($this->perfdataStr) && $this->perfdataStr[$this->parserPos] === ' ') { $this->parserPos++; } } } icingadb-web-1.5.0/library/Icingadb/Util/PluginOutput.php000066400000000000000000000135451527064444300233220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Hook\PluginOutputHook; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Web\Helper\HtmlPurifier; use InvalidArgumentException; use ipl\Html\HtmlString; use ipl\Orm\Model; use LogicException; class PluginOutput extends HtmlString { /** @var string[] Patterns to be replaced in plain text plugin output */ protected const TEXT_PATTERNS = [ '~\\\t~', '~\\\n~', '~(\[|\()OK(\]|\))~', '~(\[|\()WARNING(\]|\))~', '~(\[|\()CRITICAL(\]|\))~', '~(\[|\()UNKNOWN(\]|\))~', '~(\[|\()UP(\]|\))~', '~(\[|\()DOWN(\]|\))~', '~(\[|\()INFO(\]|\))~', '~\@{6,}~' ]; /** @var string[] Replacements for {@see PluginOutput::TEXT_PATTERNS} */ protected const TEXT_REPLACEMENTS = [ "\t", "\n", '[OK]', '[WARNING]', '[CRITICAL]', '[UNKNOWN]', '[UP]', '[DOWN]', '[INFO]', '@@@@@@' ]; /** @var string[] Patterns to be replaced in html plugin output */ protected const HTML_PATTERNS = [ '~\\\t~', '~\\\n~' ]; /** @var string[] Replacements for {@see PluginOutput::HTML_PATTERNS} */ protected const HTML_REPLACEMENTS = [ "\t", "\n" ]; /** @var string Already rendered output */ protected $renderedOutput; /** @var bool Whether the output contains HTML */ protected $isHtml; /** @var int The maximum amount of characters to process */ protected $characterLimit = 1000; /** @var bool Whether output will be enriched */ protected $enrichOutput = true; /** @var string The name of the command that produced the output */ protected $commandName; /** * Get whether the output contains HTML * * Requires the output being already rendered. * * @return bool * * @throws LogicException In case the output hasn't been rendered yet */ public function isHtml(): bool { if ($this->isHtml === null) { if (empty($this->getContent())) { // "Nothing" can't be HTML return false; } throw new LogicException('Output not rendered yet'); } return $this->isHtml; } /** * Set the maximum amount of characters to process * * @param int $limit * * @return $this */ public function setCharacterLimit(int $limit): self { $this->characterLimit = $limit; return $this; } /** * Set whether the output should be enriched * * @param bool $state * * @return $this */ public function setEnrichOutput(bool $state = true): self { $this->enrichOutput = $state; return $this; } /** * Set name of the command that produced the output * * @param string $name * * @return $this */ public function setCommandName(string $name): self { $this->commandName = $name; return $this; } /** * Render plugin output of the given object * * @param Host|Service $object * * @return static * * @throws InvalidArgumentException If $object is neither a host nor a service */ public static function fromObject(Model $object): self { if (! $object instanceof Host && ! $object instanceof Service) { throw new InvalidArgumentException( sprintf('Object is not a host or service, got %s instead', get_class($object)) ); } return (new static($object->state->output . "\n" . $object->state->long_output)) ->setCommandName($object->checkcommand_name); } public function render(): string { if ($this->renderedOutput !== null) { return $this->renderedOutput; } $output = parent::render(); if (empty($output)) { return ''; } if ($this->commandName !== null) { $output = PluginOutputHook::processOutput($output, $this->commandName, $this->enrichOutput); } $output = substr($output, 0, $this->characterLimit); $this->isHtml = (bool) preg_match('~<\w+(?>\s\w+=[^>]*)?>~', $output); if ($this->isHtml) { if ($this->enrichOutput) { $output = preg_replace(self::TEXT_PATTERNS, self::TEXT_REPLACEMENTS, $output); } else { $output = preg_replace(self::HTML_PATTERNS, self::HTML_REPLACEMENTS, $output); } $output = HtmlPurifier::process($output); } else { $output = preg_replace( self::TEXT_PATTERNS, self::TEXT_REPLACEMENTS, htmlspecialchars($output, ENT_COMPAT | ENT_SUBSTITUTE | ENT_HTML5, null, false) ); } $output = trim($output); // Add zero-width space after commas which are not followed by a whitespace character // in oder to help browsers to break words in plugin output $output = preg_replace('/,(?=[^\s])/', ',​', $output); $this->renderedOutput = $output; return $output; } } icingadb-web-1.5.0/library/Icingadb/Util/ThresholdRange.php000066400000000000000000000111011527064444300235360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Util; /** * The warning/critical threshold of a measured value */ class ThresholdRange { /** * The smallest value inside the range (null stands for -∞) * * @var float|null */ protected $min; /** * The biggest value inside the range (null stands for ∞) * * @var float|null */ protected $max; /** * Whether to invert the result of contains() * * @var bool */ protected $inverted = false; /** * The unmodified range as passed to fromString() * * @var string */ protected $raw; /** * Whether the threshold range is valid * * @var bool */ protected $isValid = true; /** * Create a new instance based on a threshold range conforming to * * @param string $rawRange * * @return ThresholdRange */ public static function fromString(string $rawRange): self { $range = new static(); $range->raw = $rawRange; if ($rawRange == '') { return $range; } $rawRange = ltrim($rawRange); if (substr($rawRange, 0, 1) === '@') { $range->setInverted(); $rawRange = substr($rawRange, 1); } if (strpos($rawRange, ':') === false) { $min = 0.0; $max = trim($rawRange); if (! is_numeric($max)) { $range->isValid = false; return $range; } $max = floatval(trim($rawRange)); } else { list($min, $max) = explode(':', $rawRange, 2); $min = trim($min); $max = trim($max); switch ($min) { case '': $min = 0.0; break; case '~': $min = null; break; default: if (! is_numeric($min)) { $range->isValid = false; return $range; } $min = floatval($min); } if (! empty($max) && ! is_numeric($max)) { $range->isValid = false; return $range; } $max = empty($max) ? null : floatval($max); } return $range->setMin($min) ->setMax($max); } /** * Set the smallest value inside the range (null stands for -∞) * * @param float|null $min * * @return $this */ public function setMin(?float $min): self { $this->min = $min; return $this; } /** * Get the smallest value inside the range (null stands for -∞) * * @return float|null */ public function getMin() { return $this->min; } /** * Set the biggest value inside the range (null stands for ∞) * * @param float|null $max * * @return $this */ public function setMax(?float $max): self { $this->max = $max; return $this; } /** * Get the biggest value inside the range (null stands for ∞) * * @return float|null */ public function getMax() { return $this->max; } /** * Set whether to invert the result of contains() * * @param bool $inverted * * @return $this */ public function setInverted(bool $inverted = true): self { $this->inverted = $inverted; return $this; } /** * Get whether to invert the result of contains() * * @return bool */ public function isInverted(): bool { return $this->inverted; } /** * Return whether $value is inside $this * * @param float $value * * @return bool */ public function contains(float $value): bool { return (bool) ($this->inverted ^ ( ($this->min === null || $this->min <= $value) && ($this->max === null || $this->max >= $value) )); } /** * Return whether the threshold range is valid * * @return bool */ public function isValid() { return $this->isValid; } /** * Return the textual representation of $this, suitable for fromString() * * @return string */ public function __toString() { return (string) $this->raw; } } icingadb-web-1.5.0/library/Icingadb/View/000077500000000000000000000000001527064444300201175ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/View/AlertRenderer.php000066400000000000000000000122141527064444300233660ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use DateTimeInterface; use Icinga\Module\Icingadb\Model\AlertHistory; use IntlDateFormatter; use ipl\Html\Attributes; use ipl\Html\FormattedString; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\Time; use ipl\Web\Widget\TimeAgo; use Locale; /** @implements ItemRenderer */ class AlertRenderer implements ItemRenderer { use Translation; /** * Create a new alert renderer * * @param bool $useRelativeTimestamps Whether to use relative timestamps * @param ?DateTimeInterface $referenceTime Absolute timestamps on the same day as this omit the date */ public function __construct( protected bool $useRelativeTimestamps = true, protected ?DateTimeInterface $referenceTime = null ) { } public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('alert'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $ballSize = StateBall::SIZE_LARGE; if ($layout === 'minimal' || $layout === 'header') { $ballSize = StateBall::SIZE_BIG; } $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::NOTIFICATION) ) ); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { $sentence = FormattedString::create( $this->translate('Sent notification via %s to %s'), $item->channel_name ?? $this->translate('unknown', 'name of a notification channel'), $item->contact_name ?? $this->translate('unknown', 'name of a notification recipient') ); if ($layout === 'header') { $title->addHtml(new HtmlElement('span', Attributes::create(['class' => 'subject']), $sentence)); } else { $title->addHtml(new Link($sentence, Links::alert($item), ['class' => 'subject'])); } $membership = $this->createMembership($item); if ($membership !== null) { $title->addHtml( Text::create(' '), FormattedString::create($this->translate('(Member of %s)'), $membership) ); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->event_summary)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { $timeRelative = new TimeAgo($item->triggered_at); if ($layout !== 'header') { $isSameDay = $this->referenceTime !== null && $this->referenceTime->format('Y-m-d') === $item->triggered_at->format('Y-m-d'); $timeAbsolute = (new Time($item->triggered_at)) ->setFormatter( new IntlDateFormatter( Locale::getDefault(), $isSameDay ? IntlDateFormatter::NONE : IntlDateFormatter::MEDIUM, IntlDateFormatter::MEDIUM ) ); $timeAbsolute->setAttribute('class', 'icingadb-history-timestamp'); $timeRelative->setAttribute('class', 'icingadb-history-timestamp'); if ($this->useRelativeTimestamps) { $timeAbsolute->setAttribute('hidden', true); } else { $timeRelative->setAttribute('hidden', true); } $info->addHtml($timeAbsolute); } $info->addHtml($timeRelative); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; } /** * Create the contact group or schedule through which the contact was notified * * @param AlertHistory $item * * @return ?ValidHtml null if the contact was notified directly */ protected function createMembership(AlertHistory $item): ?ValidHtml { if (isset($item->contactgroup_name)) { $icon = new Icon(Icons::USERGROUP, ['title' => $this->translate('Contact Group')]); $name = $item->contactgroup_name; } elseif (isset($item->schedule_name)) { $icon = new Icon(Icons::SCHEDULE, ['title' => $this->translate('Schedule')]); $name = $item->schedule_name; } else { return null; } return new HtmlElement( 'span', Attributes::create(['class' => 'membership']), $icon, Text::create($name) ); } } icingadb-web-1.5.0/library/Icingadb/View/BaseHostAndServiceRenderer.php000066400000000000000000000334671527064444300260100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Util\PerfDataSet; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\CheckAttempt; use Icinga\Module\Icingadb\Widget\IconImage; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\StateChange; use ipl\Html\Attributes; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Layout\ItemLayout; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeSince; /** * @template Item of Host|Service * * @implements ItemRenderer */ abstract class BaseHostAndServiceRenderer implements ItemRenderer { use Translation; /** * Create subject for the given item * * @param Item $item The item to create subject for * * @param string $layout The name of the layout * * @return ValidHtml */ abstract protected function createSubject($item, string $layout): ValidHtml; public function assembleAttributes($item, Attributes $attributes, string $layout): void { if ($item->state->is_overdue) { $attributes->get('class')->addValue('overdue'); } } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { if ($layout === 'header') { if ($item->state->state_type === 'soft') { $stateType = 'soft_state'; $previousStateType = 'previous_soft_state'; if ($item->state->previous_soft_state === 0) { $previousStateType = 'hard_state'; } } else { $stateType = 'hard_state'; $previousStateType = 'previous_hard_state'; if ($item->state->hard_state === $item->state->previous_hard_state) { $previousStateType = 'previous_soft_state'; } } if ($item instanceof Host) { $state = HostStates::text($item->state->$stateType); $previousState = HostStates::text($item->state->$previousStateType); } else { $state = ServiceStates::text($item->state->$stateType); $previousState = ServiceStates::text($item->state->$previousStateType); } $stateChange = new StateChange($state, $previousState); if ($stateType === 'soft_state') { $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); } if ($previousStateType === 'previous_soft_state') { $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); if ($stateType === 'soft_state') { $visual->getAttributes()->add('class', 'small-state-change'); } } $stateChange->setIcon($this->getStateBallIcon($item)); $stateChange->setHandled( $item->state->is_problem && ($item->state->is_handled || ! $item->state->is_reachable) ); $visual->addHtml($stateChange); return; } $ballSize = $layout === 'minimal' ? StateBall::SIZE_BIG : StateBall::SIZE_LARGE; $stateBall = new StateBall($item->state->getStateText(), $ballSize); $stateBall->add($this->getStateBallIcon($item)); if ($item->state->is_problem && ($item->state->is_handled || ! $item->state->is_reachable)) { $stateBall->getAttributes()->add('class', 'handled'); } $visual->addHtml($stateBall); if ($layout !== 'minimal' && $item->state->state_type === 'soft') { $visual->addHtml( new CheckAttempt((int) $item->state->check_attempt, (int) $item->max_check_attempts) ); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { if ($item->state->soft_state === null && $item->state->output === null) { $caption->addHtml(Text::create($this->translate('Waiting for Icinga DB to synchronize the state.'))); } else { if (empty($item->state->output)) { $pluginOutput = new EmptyState($this->translate('Output unavailable.')); } else { $pluginOutput = new PluginOutputContainer(PluginOutput::fromObject($item)); } $caption->addHtml($pluginOutput); } } public function assembleTitle($item, HtmlDocument $title, string $layout): void { $title->addHtml(Html::sprintf( $this->translate('%s is %s', ' is '), $this->createSubject($item, $layout), Html::tag('span', ['class' => 'state-text'], $item->state->getStateTextTranslated()) )); if (isset($item->state->affects_children) && $item->state->affects_children) { $total = (int) $item->total_children; $title->addHtml(new HtmlElement( 'span', Attributes::create([ 'class' => 'affected-objects', 'title' => sprintf( $this->translatePlural( '%d affected object', 'Up to %d affected objects', $total ), $total ) ]), new Icon(Icons::UNREACHABLE), Text::create($total) )); } } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { if ($item->state->is_overdue) { $since = new TimeSince($item->state->next_update->getTimestamp()); $since->prepend($this->translate('Overdue') . ' '); $since->prependHtml(new Icon(Icons::WARNING)); $info->addHtml($since); } elseif ($item->state->last_state_change !== null && $item->state->last_state_change->getTimestamp() > 0) { $info->addHtml(new TimeSince($item->state->last_state_change->getTimestamp())); } } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { $pieChartLimit = 5; $statusIcons = new HtmlElement('div', Attributes::create(['class' => 'status-icons'])); $isService = $item instanceof Service; if ( ($isService && $item->state->last_comment->service_id === $item->id) || $item->state->last_comment->host_id === $item->id ) { $comment = $item->state->last_comment; if ($isService) { $comment->service = $item; } else { $comment->host = $item; } $commentItem = new ItemLayout( $comment, (new CommentRenderer()) ->setTicketLinkDisabled() ->setNoObjectLink() ->setNoSubjectLink() ); $statusIcons->addHtml( new HtmlElement( 'div', Attributes::create(['class' => 'comment-wrapper']), new HtmlElement( 'div', $commentItem->getAttributes()->add('class', 'comment-popup'), $commentItem ), (new Icon('comments', ['class' => 'comment-icon'])) ) ); } if ($item->state->is_acknowledged) { $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" is acknowledged'), $item->display_name, $item->host->display_name ) : sprintf($this->translate('Host "%s" is acknowledged'), $item->display_name); $statusIcons->addHtml(new Icon(Icons::IS_ACKNOWLEDGED, ['title' => $title])); } if ($item->state->in_downtime) { if ($isService) { $message = $item->state->is_handled ? $this->translate('Service "%s" on "%s" is handled by Downtime') : $this->translate('Service "%s" on "%s" is in Downtime'); $title = sprintf($message, $item->display_name, $item->host->display_name); } else { $message = $item->state->is_handled ? $this->translate('Host "%s" is handled by Downtime') : $this->translate('Host "%s" is in Downtime'); $title = sprintf($message, $item->display_name); } $statusIcons->addHtml(new Icon(Icons::IN_DOWNTIME, ['title' => $title])); } if ($item->state->is_flapping) { $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" is in flapping state'), $item->display_name, $item->host->display_name ) : sprintf($this->translate('Host "%s" is in flapping state'), $item->display_name); $statusIcons->addHtml(new Icon(Icons::IS_FLAPPING, ['title' => $title])); } if (! $item->state->is_reachable) { $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" is unreachable'), $item->display_name, $item->host->display_name ) : sprintf($this->translate('Host "%s" is unreachable'), $item->display_name); $statusIcons->addHtml(new Icon(Icons::HOST_DOWN, ['title' => $title])); } if (! $item->notifications_enabled) { $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" has notifications disabled'), $item->display_name, $item->host->display_name ) : sprintf($this->translate('Host "%s" has notifications disabled'), $item->display_name); $statusIcons->addHtml(new Icon(Icons::NOTIFICATIONS_DISABLED, ['title' => $title])); } if (! $item->active_checks_enabled) { $title = $isService ? sprintf( $this->translate('Service "%s" on "%s" has active checks disabled'), $item->display_name, $item->host->display_name ) : sprintf($this->translate('Host "%s" has active checks disabled'), $item->display_name); $statusIcons->addHtml(new Icon(Icons::ACTIVE_CHECKS_DISABLED, ['title' => $title])); } $performanceData = new HtmlElement('div', Attributes::create(['class' => 'performance-data'])); if ($item->state->performance_data) { $pieChartData = PerfDataSet::fromString($item->state->normalized_performance_data)->asArray(); $pies = []; foreach ($pieChartData as $i => $perfdata) { if ($perfdata->isVisualizable()) { $pies[] = $perfdata->asInlinePie()->render(); } // Check if number of visualizable pie charts is larger than $PIE_CHART_LIMIT if (count($pies) > $pieChartLimit) { break; } } $maxVisiblePies = $pieChartLimit - 2; $numOfPies = count($pies); foreach ($pies as $i => $pie) { if ( // Show max. 5 elements: if there are more than 5, show 4 + `…` $i > $maxVisiblePies && $numOfPies > $pieChartLimit ) { $performanceData->addHtml(new HtmlElement('span', null, Text::create('…'))); break; } $performanceData->addHtml(HtmlString::create($pie)); } } if (! $statusIcons->isEmpty()) { $footer->addHtml($statusIcons); } if (! $performanceData->isEmpty()) { $footer->addHtml($performanceData); } } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { if ($name === 'icon-image') { if (isset($item->icon_image->icon_image)) { $element->addHtml(new IconImage($item->icon_image->icon_image, $item->icon_image_alt)); } return true; } return false; } protected function getStateBallIcon(Host|Service $item): ?Icon { $icon = $item->state->getIcon(); if ($icon === null) { if (! $item->notifications_enabled) { $icon = new Icon(Icons::NOTIFICATIONS_DISABLED, [ 'title' => sprintf( '%s (%s)', strtoupper($item->state->getStateTextTranslated()), $this->translate('has notifications disabled') ) ]); } elseif (! $item->active_checks_enabled) { $icon = new Icon(Icons::ACTIVE_CHECKS_DISABLED, [ 'title' => sprintf( '%s (%s)', strtoupper($item->state->getStateTextTranslated()), $this->translate('has active checks disabled') ) ]); } } return $icon; } } icingadb-web-1.5.0/library/Icingadb/View/CommentRenderer.php000066400000000000000000000120501527064444300237170ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Widget\MarkdownLine; use ipl\Html\Attributes; use ipl\Html\FormattedString; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Ball; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\TimeAgo; use ipl\Web\Widget\TimeUntil; /** @implements ItemRenderer */ class CommentRenderer implements ItemRenderer { use Translation; use TicketLinks; use HostLink; use ServiceLink; /** @var bool Whether the object link for th item should be omitted */ protected $noObjectLink = false; /** @var bool Whether item's subject should be a link */ protected $noSubjectLink = false; /** * Set whether the object link for th item should be omitted * * @param bool $state * * @return $this */ public function setNoObjectLink(bool $state = true): self { $this->noObjectLink = $state; return $this; } /** * Set whether item's subject should be a link * * @param bool $state * * @return $this */ public function setNoSubjectLink(bool $state = true): self { $this->noSubjectLink = $state; return $this; } public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('comment'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $visual->addHtml( (new Ball($layout === 'minimal' ? Ball::SIZE_BIG : Ball::SIZE_LARGE)) ->addAttributes(['class' => 'user-ball']) ->addHtml(Text::create($item->author[0])) ); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { $isAck = $item->entry_type === 'ack'; $expires = $item->expire_time; $subjectText = sprintf( $isAck ? $this->translate('%s acknowledged', '..') : $this->translate('%s commented', '..'), $item->author ); $headerParts = [ new Icon(Icons::USER), $layout === 'header' || $this->noSubjectLink ? new HtmlElement('span', Attributes::create(['class' => 'subject']), Text::create($subjectText)) : new Link($subjectText, Links::comment($item), ['class' => 'subject']) ]; if ($isAck) { $label = [new Icon('check-circle')]; if ($item->is_persistent) { $label[] = new Icon(Icons::IS_PERSISTENT); } $label[] = Text::create('ack'); $headerParts[] = Text::create(' '); $headerParts[] = new HtmlElement('span', Attributes::create(['class' => 'ack-badge']), ...$label); } if ($expires !== null) { $headerParts[] = Text::create(' '); $headerParts[] = new HtmlElement( 'span', Attributes::create(['class' => 'ack-badge badge']), Text::create($this->translate('EXPIRES')) ); } if ($this->noObjectLink) { // pass } elseif ($item->object_type === 'host') { $headerParts[] = $this->createHostLink($item->host, true); } else { $headerParts[] = $this->createServiceLink($item->service, $item->service->host, true); } $title->addHtml(...$headerParts); } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $markdownLine = new MarkdownLine($this->createTicketLinks($item->text)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->addFrom($markdownLine); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { if ($item->expire_time) { $info->addHtml( FormattedString::create( $this->translate("expires %s"), new TimeUntil($item->expire_time->getTimestamp()) ) ); } else { $info->addHtml( FormattedString::create( $this->translate("created %s"), new TimeAgo($item->entry_time->getTimestamp()) ) ); } } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } } icingadb-web-1.5.0/library/Icingadb/View/DowntimeRenderer.php000066400000000000000000000167741527064444300241240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Widget\MarkdownLine; use ipl\Html\Attributes; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\TemplateString; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; /** @implements ItemRenderer */ class DowntimeRenderer implements ItemRenderer { use Translation; use TicketLinks; use HostLink; use ServiceLink; /** @var int Current Time */ protected $currentTime; /** @var int Duration */ protected $duration; /** @var int Downtime end time */ protected $endTime; /** @var bool Whether the downtime is active */ protected $isActive; /** @var int Downtime start time */ protected $startTime; /** @var bool Whether the state has been loaded */ protected $stateLoaded = false; /** @var bool Whether the object link for th item should be omitted */ protected $noObjectLink = false; /** * Set whether the object link for th item should be omitted * * @param bool $state * * @return $this */ public function setNoObjectLink(bool $state = true): self { $this->noObjectLink = $state; return $this; } /** * Load the state of the downtime * * @param Downtime $item * * @return void */ protected function loadState(Downtime $item): void { if ($this->stateLoaded) { return; } if ( isset($item->start_time, $item->end_time) && $item->is_flexible && $item->is_in_effect ) { $this->startTime = $item->start_time->getTimestamp(); $this->endTime = $item->end_time->getTimestamp(); } else { $this->startTime = $item->scheduled_start_time->getTimestamp(); $this->endTime = $item->scheduled_end_time->getTimestamp(); } $this->currentTime = time(); $this->isActive = $item->is_in_effect || ($item->is_flexible && $item->scheduled_start_time->getTimestamp() <= $this->currentTime); $until = ($this->isActive ? $this->endTime : $this->startTime) - $this->currentTime; $this->duration = explode(' ', DateFormatter::formatDuration( $until <= 3600 ? $until : $until + (3600 - ((int) $until % 3600)) ), 2)[0]; $this->stateLoaded = true; } public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->add(new Attributes(['class' => ['downtime', $item->is_in_effect ? 'in-effect' : '']])); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $this->loadState($item); $dateTime = DateFormatter::formatDateTime($this->endTime); if ($this->isActive) { $visual->addHtml(Html::sprintf( $this->translate('%s left', '..'), Html::tag( 'strong', Html::tag( 'time', [ 'datetime' => $dateTime, 'title' => $dateTime ], $this->duration ) ) )); } else { $visual->addHtml(Html::sprintf( $this->translate('in %s', '..'), Html::tag('strong', $this->duration) )); } } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($this->noObjectLink) { $link = null; } elseif ($item->object_type === 'host') { $link = $this->createHostLink($item->host, true); } else { $link = $this->createServiceLink($item->service, $item->service->host, true); } if ($item->is_flexible) { if ($link !== null) { $template = $this->translate('{{#link}}Flexible Downtime{{/link}} for %s'); } else { $template = $this->translate('Flexible Downtime'); } } else { if ($link !== null) { $template = $this->translate('{{#link}}Fixed Downtime{{/link}} for %s'); } else { $template = $this->translate('Fixed Downtime'); } } if ($layout === 'header') { if ($link === null) { $title->addHtml(HtmlElement::create('span', [ 'class' => 'subject'], $template)); } else { $title->addHtml(TemplateString::create( $template, ['link' => HtmlElement::create('span', [ 'class' => 'subject'])], $link )); } } else { if ($link === null) { $title->addHtml(new Link($template, Links::downtime($item))); } else { $title->addHtml(TemplateString::create( $template, ['link' => new Link('', Links::downtime($item))], $link )); } } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $markdownLine = new MarkdownLine($this->createTicketLinks($item->comment)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->addHtml( new HtmlElement( 'span', null, new Icon(Icons::USER), Text::create($item->author) ), Text::create(': ') )->addFrom($markdownLine); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { $this->loadState($item); $dateTime = DateFormatter::formatDateTime($this->isActive ? $this->endTime : $this->startTime); $info->addHtml(Html::tag( 'time', [ 'datetime' => $dateTime, 'title' => $dateTime ], sprintf( $this->isActive ? $this->translate('expires in %s', '..') : $this->translate('starts in %s', '..'), $this->duration ) )); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { if ($name === 'progress' && ($layout === 'detailed' || $layout === 'common')) { $this->loadState($item); $element ->addAttributes(Attributes::create([ 'data-animate-progress' => true, 'data-start-time' => $this->startTime, 'data-end-time' => $this->endTime ])) ->addHtml(new HtmlElement('div', Attributes::create(['class' => 'bar']))); return true; } return false; } } icingadb-web-1.5.0/library/Icingadb/View/EventRenderer.php000066400000000000000000000524241527064444300234070ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\CheckAttempt; use Icinga\Module\Icingadb\Widget\ItemList\AlertList; use Icinga\Module\Icingadb\Widget\MarkdownLine; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\StateChange; use IntlDateFormatter; use ipl\Html\Attributes; use ipl\Html\FormattedString; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Orm\ResultSet; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\Time; use ipl\Web\Widget\TimeAgo; use Locale; /** @implements ItemRenderer */ class EventRenderer implements ItemRenderer { use Auth; use Translation; use TicketLinks; use HostLink; use ServiceLink; /** @var NotificationRenderer To render NotificationHistory event */ protected $notificationRenderer; /** @var bool Whether to use relative timestamps */ protected bool $useRelativeTimestamps; /** * Create an EventRenderer * * @param bool $useRelativeTimestamps Whether to use relative timestamps */ public function __construct(bool $useRelativeTimestamps = false) { $this->notificationRenderer = new NotificationRenderer(); $this->useRelativeTimestamps = $useRelativeTimestamps; } public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('history'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $ballSize = StateBall::SIZE_LARGE; if ($layout === 'minimal' || $layout === 'header') { $ballSize = StateBall::SIZE_BIG; } switch ($item->event_type) { case 'comment_add': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::COMMENT) ) ); break; case 'comment_remove': case 'downtime_end': case 'ack_clear': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::REMOVE) ) ); break; case 'downtime_start': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IN_DOWNTIME) ) ); break; case 'ack_set': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IS_ACKNOWLEDGED) ) ); break; case 'flapping_end': case 'flapping_start': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IS_FLAPPING) ) ); break; case 'notification': $visual->addHtml( HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::NOTIFICATION) ) ); break; case 'state_change': if ($item->state->state_type === 'soft') { $stateType = 'soft_state'; $previousStateType = 'previous_soft_state'; if ($item->state->previous_soft_state === 0) { $previousStateType = 'hard_state'; } if ($layout !== 'minimal' && $layout !== 'header') { $visual->addHtml( new CheckAttempt( (int) $item->state->check_attempt, (int) $item->state->max_check_attempts ) ); } } else { $stateType = 'hard_state'; $previousStateType = 'previous_hard_state'; if ($item->state->hard_state === $item->state->previous_hard_state) { $previousStateType = 'previous_soft_state'; } } if ($item->object_type === 'host') { $state = HostStates::text($item->state->$stateType); $previousState = HostStates::text($item->state->$previousStateType); } else { $state = ServiceStates::text($item->state->$stateType); $previousState = ServiceStates::text($item->state->$previousStateType); } $stateChange = new StateChange($state, $previousState); if ($stateType === 'soft_state') { $stateChange->setCurrentStateBallSize(StateBall::SIZE_MEDIUM_LARGE); } if ($previousStateType === 'previous_soft_state') { $stateChange->setPreviousStateBallSize(StateBall::SIZE_MEDIUM_LARGE); if ($stateType === 'soft_state') { $visual->getAttributes()->add('class', 'small-state-change'); } } $visual->prependHtml($stateChange); break; } } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($item->event_type === 'notification' && isset($item->notification->id)) { $item->notification->history = $item; $item->notification->host = $item->host; $item->notification->service = $item->service; $this->notificationRenderer->assembleTitle($item->notification, $title, $layout); return; } switch ($item->event_type) { case 'comment_add': $subjectLabel = $this->translate('Comment added'); break; case 'comment_remove': if (! empty($item->comment->removed_by)) { if ($item->comment->removed_by !== $item->comment->author) { $subjectLabel = sprintf( $this->translate('Comment removed by %s', '..'), $item->comment->removed_by ); } else { $subjectLabel = $this->translate('Comment removed by author'); } } elseif (isset($item->comment->expire_time)) { $subjectLabel = $this->translate('Comment expired'); } else { $subjectLabel = $this->translate('Comment removed'); } break; case 'downtime_end': if (! empty($item->downtime->cancelled_by)) { if ($item->downtime->cancelled_by !== $item->downtime->author) { $subjectLabel = sprintf( $this->translate('Downtime cancelled by %s', '..'), $item->downtime->cancelled_by ); } else { $subjectLabel = $this->translate('Downtime cancelled by author'); } } elseif ($item->downtime->has_been_cancelled === 'y') { $subjectLabel = $this->translate('Downtime cancelled'); } else { $subjectLabel = $this->translate('Downtime ended'); } break; case 'downtime_start': $subjectLabel = $this->translate('Downtime started'); break; case 'flapping_start': $subjectLabel = $this->translate('Flapping started'); break; case 'flapping_end': $subjectLabel = $this->translate('Flapping stopped'); break; case 'ack_set': $subjectLabel = $this->translate('Acknowledgement set'); break; case 'ack_clear': if (! empty($item->acknowledgement->cleared_by)) { if ($item->acknowledgement->cleared_by !== $item->acknowledgement->author) { $subjectLabel = sprintf( $this->translate('Acknowledgement cleared by %s', '..'), $item->acknowledgement->cleared_by ); } else { $subjectLabel = $this->translate('Acknowledgement cleared by author'); } } elseif (isset($item->acknowledgement->expire_time)) { $subjectLabel = $this->translate('Acknowledgement expired'); } else { $subjectLabel = $this->translate('Acknowledgement cleared'); } break; case 'state_change': $state = $item->state->state_type === 'hard' ? $item->state->hard_state : $item->state->soft_state; if ($state === 0) { if ($item->object_type === 'service') { $subjectLabel = $this->translate('Service recovered'); } else { $subjectLabel = $this->translate('Host recovered'); } } else { if ($item->state->state_type === 'hard') { $subjectLabel = $this->translate('Hard state changed'); } else { $subjectLabel = $this->translate('Soft state changed'); } } break; default: $subjectLabel = $item->event_type; break; } if ($layout === 'header') { $title->addHtml(HtmlElement::create('span', ['class' => 'subject'], $subjectLabel)); } else { $title->addHtml(new Link($subjectLabel, Links::event($item), ['class' => 'subject'])); } if ($item->object_type === 'host' && isset($item->host->id)) { $link = $this->createHostLink($item->host, true); } elseif (isset($item->host->id, $item->service->id)) { $link = $this->createServiceLink($item->service, $item->host, true); } $title->addHtml(Text::create(' ')); if (isset($link)) { $title->addHtml($link); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { if ($item->event_type === 'notification') { $item->notification->host = $item->host; $item->notification->service = $item->service; $this->notificationRenderer->assembleCaption($item->notification, $caption, $layout); return; } switch ($item->event_type) { case 'comment_add': case 'comment_remove': $markdownLine = new MarkdownLine($this->createTicketLinks($item->comment->comment)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->add([ new Icon(Icons::USER), $item->comment->author, ': ' ])->addFrom($markdownLine); break; case 'downtime_end': case 'downtime_start': $markdownLine = new MarkdownLine($this->createTicketLinks($item->downtime->comment)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->add([ new Icon(Icons::USER), $item->downtime->author, ': ' ])->addFrom($markdownLine); break; case 'flapping_start': $caption ->add( sprintf( $this->translate('State Change Rate: %.2f%%; Start Threshold: %.2f%%'), $item->flapping->percent_state_change_start, $item->flapping->flapping_threshold_high ) ) ->getAttributes() ->add('class', 'plugin-output'); break; case 'flapping_end': $caption ->add( sprintf( $this->translate('State Change Rate: %.2f%%; End Threshold: %.2f%%; Flapping for %s'), $item->flapping->percent_state_change_end, $item->flapping->flapping_threshold_low, isset($item->flapping->end_time) ? DateFormatter::formatDuration( $item->flapping->end_time->getTimestamp() - $item->flapping->start_time->getTimestamp() ) : $this->translate('n. a.') ) ) ->getAttributes() ->add('class', 'plugin-output'); break; case 'ack_clear': case 'ack_set': if (! isset($item->acknowledgement->comment) && ! isset($item->acknowledgement->author)) { $caption->addHtml( new EmptyState( $this->translate('This acknowledgement was set before Icinga DB history recording') ) ); } else { $markdownLine = new MarkdownLine($this->createTicketLinks($item->acknowledgement->comment)); $caption->getAttributes()->add($markdownLine->getAttributes()); $caption->add([ new Icon(Icons::USER), $item->acknowledgement->author, ': ' ])->addFrom($markdownLine); } break; case 'state_change': $commandName = $item->object_type === 'host' ? $item->host->checkcommand_name : $item->service->checkcommand_name; if (isset($commandName)) { if (empty($item->state->output)) { $caption->addHtml(new EmptyState($this->translate('Output unavailable.'))); } else { $caption->addHtml( new PluginOutputContainer( (new PluginOutput($item->state->output)) ->setCommandName($commandName) ) ); } } else { $caption->addHtml( new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.')) ); } break; } } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { if ( ! empty($item->alert_count) && $layout === 'minimal' && $this->getAuth()->hasPermission('icingadb/notifications/usage') ) { $info->addHtml( new HtmlElement( 'span', Attributes::create([ 'class' => 'alert-count', 'title' => sprintf( $this->translatePlural( '%d Alert has been sent. Click for details.', '%d Alerts have been sent. Click for details.', $item->alert_count ), $item->alert_count ) ]), new Icon(Icons::NOTIFICATION), Text::create($item->alert_count) ) ); } $timeRelative = new TimeAgo($item->event_time); if ($layout !== 'header') { $timeAbsolute = (new Time($item->event_time)) ->setFormatter( new IntlDateFormatter( Locale::getDefault(), IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM ) ); $timeAbsolute->setAttribute('class', 'icingadb-history-timestamp'); $timeRelative->setAttribute('class', 'icingadb-history-timestamp'); if ($this->useRelativeTimestamps) { $timeAbsolute->setAttribute('hidden', true); } else { $timeRelative->setAttribute('hidden', true); } $info->addHtml($timeAbsolute); } $info->addHtml($timeRelative); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { if ($name !== 'sent-notifications') { return false; } $alerts = $item->alert ->orderBy('triggered_at', 'asc'); $this->applyRestrictions($alerts); $results = $alerts->execute(); if ($results->hasResult()) { $details = new HtmlElement( 'details', Attributes::create([ 'class' => 'collapsible', 'data-no-persistence' => true, 'open' => $layout === 'detailed' ]) ); $details->addHtml( $results->count() < $item->alert_count ? new HtmlElement( 'summary', Attributes::create([ 'class' => ['alert-count', 'collapsible-control'], 'title' => $this->translate('You have insufficient privileges to see all alerts.') ]), new Icon('angle-right', ['class' => 'expand-icon']), new Icon('angle-down', ['class' => 'collapse-icon']), FormattedString::create( // translators: %d is the number of alerts the user is permitted to access, %s the total $this->translate('%d%s Alerts'), $results->count(), new EmptyState(sprintf('/ %d', $item->alert_count)) ) ) : new HtmlElement( 'summary', Attributes::create(['class' => ['alert-count', 'collapsible-control']]), new Icon('angle-right', ['class' => 'expand-icon']), new Icon('angle-down', ['class' => 'collapse-icon']), Text::create(sprintf( $this->translatePlural('%d Alert', '%d Alerts', $item->alert_count), $item->alert_count )) ), (new AlertList($results, $this->useRelativeTimestamps, $item->event_time)) ->addAttributes(Attributes::create(['class' => 'alert-list'])) ->setViewMode('minimal') ); $element->addHtml($details); } else { $element->addHtml( (new EmptyState( Text::create(sprintf( $this->translatePlural('%d Alert', '%d Alerts', $item->alert_count), $item->alert_count )) ))->addAttributes(Attributes::create([ 'class' => 'alert-count', 'title' => $this->translate('You have insufficient privileges to see all alerts.') ])) ); } return true; } } icingadb-web-1.5.0/library/Icingadb/View/HostRenderer.php000066400000000000000000000020001527064444300232240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Host; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Web\Widget\Link; /** @extends BaseHostAndServiceRenderer */ class HostRenderer extends BaseHostAndServiceRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void { parent::assembleAttributes($item, $attributes, $layout); $attributes->get('class')->addValue('host'); } protected function createSubject($item, string $layout): ValidHtml { if ($layout === 'header') { return new HtmlElement('span', new Attributes(['class' => 'subject']), new Text($item->display_name)); } return new Link($item->display_name, Links::host($item), ['class' => 'subject']); } } icingadb-web-1.5.0/library/Icingadb/View/HostgroupGridRenderer.php000066400000000000000000000137051527064444300251250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; use ipl\Web\Url; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBadge; /** @implements ItemRenderer */ class HostgroupGridRenderer implements ItemRenderer { use Translation; use BaseFilter; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue(['object-grid-cell', 'hostgroup']); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $url = Url::fromPath('icingadb/hosts'); $urlFilter = Filter::all(Filter::equal('hostgroup.name', $item->name)); if ($item->hosts_down_unhandled > 0) { $urlFilter->add(Filter::equal('host.state.soft_state', 1)) ->add(Filter::equal('host.state.is_handled', 'n')) ->add(Filter::equal('host.state.is_reachable', 'y')); $link = new Link( new StateBadge($item->hosts_down_unhandled, 'down'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d host that is currently in DOWN state in host group "%s"', 'List %d hosts which are currently in DOWN state in host group "%s"', $item->hosts_down_unhandled ), $item->hosts_down_unhandled, $item->display_name ) ] ); } elseif ($item->hosts_down_handled > 0) { $urlFilter->add(Filter::equal('host.state.soft_state', 1)) ->add(Filter::any( Filter::equal('host.state.is_handled', 'y'), Filter::equal('host.state.is_reachable', 'n') )); $link = new Link( new StateBadge($item->hosts_down_handled, 'down', true), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d host that is currently in DOWN (Acknowledged) state in host group "%s"', 'List %d hosts which are currently in DOWN (Acknowledged) state in host group "%s"', $item->hosts_down_handled ), $item->hosts_down_handled, $item->display_name ) ] ); } elseif ($item->hosts_pending > 0) { $urlFilter->add(Filter::equal('host.state.soft_state', 99)); $link = new Link( new StateBadge($item->hosts_pending, 'pending'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d host that is currently in PENDING state in host group "%s"', 'List %d hosts which are currently in PENDING state in host group "%s"', $item->hosts_pending ), $item->hosts_pending, $item->display_name ) ] ); } elseif ($item->hosts_up > 0) { $urlFilter->add(Filter::equal('host.state.soft_state', 0)); $link = new Link( new StateBadge($item->hosts_up, 'up'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d host that is currently in UP state in host group "%s"', 'List %d hosts which are currently in UP state in host group "%s"', $item->hosts_up ), $item->hosts_up, $item->display_name ) ] ); } else { $link = new Link( new StateBadge(0, 'none'), Links::hostgroup($item), [ 'title' => sprintf( $this->translate('There are no hosts in host group "%s"'), $item->display_name ) ] ); } $visual->addHtml($link); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { $link = new Link( $item->display_name, Links::hostgroup($item), [ 'class' => 'subject', 'title' => sprintf( $this->translate('List all hosts in the group "%s"'), $item->display_name ) ] ); if ($this->hasBaseFilter()) { $link->getUrl()->setFilter($this->getBaseFilter()); } $title->addHtml($link); } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } } icingadb-web-1.5.0/library/Icingadb/View/HostgroupRenderer.php000066400000000000000000000070441527064444300243160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Widget\Detail\HostStatistics; use Icinga\Module\Icingadb\Widget\Detail\ServiceStatistics; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Widget\ItemTable\ItemTableRenderer; use ipl\Web\Widget\Link; /** @implements ItemTableRenderer */ class HostgroupRenderer implements ItemTableRenderer { use Translation; use BaseFilter; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('hostgroup'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) )); } else { $link = new Link( $item->display_name, Links::hostgroup($item), [ 'class' => 'subject', 'title' => sprintf( $this->translate('List all hosts in the group "%s"'), $item->display_name ) ] ); if ($this->hasBaseFilter()) { $link->getUrl()->setFilter($this->getBaseFilter()); } $title->addHtml($link); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { // assembleExtendedInfo() is only called when $layout == header $info->addHtml(...$this->createStatistics($item)); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } public function assembleColumns($item, HtmlDocument $columns, string $layout): void { [$hostStats, $serviceStats] = $this->createStatistics($item); if ($this->hasBaseFilter()) { $hostStats->setBaseFilter(Filter::all($hostStats->getBaseFilter(), $this->getBaseFilter())); $serviceStats->setBaseFilter(Filter::all($serviceStats->getBaseFilter(), $this->getBaseFilter())); } $columns->addHtml($hostStats, $serviceStats); } /** * Create statistics for the given item * * @param Hostgroupsummary $item * * @return array{0: HostStatistics, 1: ServiceStatistics} */ protected function createStatistics(Hostgroupsummary $item): array { $hostStats = (new HostStatistics($item)) ->setBaseFilter(Filter::equal('hostgroup.name', $item->name)); $serviceStats = (new ServiceStatistics($item)) ->setBaseFilter(Filter::equal('hostgroup.name', $item->name)); return [$hostStats, $serviceStats]; } } icingadb-web-1.5.0/library/Icingadb/View/NotificationRenderer.php000066400000000000000000000201361527064444300247470ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\StateChange; use IntlDateFormatter; use InvalidArgumentException; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\Time; use ipl\Web\Widget\TimeAgo; use Locale; /** @implements ItemRenderer */ class NotificationRenderer implements ItemRenderer { use Translation; use HostLink; use ServiceLink; /** @var bool Whether to use relative timestamps */ protected bool $useRelativeTimestamps; /** * Create a NotificationRenderer * * @param bool $useRelativeTimestamps Whether to use relative timestamps */ public function __construct(bool $useRelativeTimestamps = false) { $this->useRelativeTimestamps = $useRelativeTimestamps; } public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('notification'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $ballSize = StateBall::SIZE_LARGE; if ($layout === 'minimal' || $layout === 'header') { $ballSize = StateBall::SIZE_BIG; } switch ($item->type) { case 'acknowledgement': $visual->addHtml(HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IS_ACKNOWLEDGED) )); break; case 'custom': $visual->addHtml(HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::NOTIFICATION) )); break; case 'downtime_end': case 'downtime_removed': case 'downtime_start': $visual->addHtml(HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IN_DOWNTIME) )); break; case 'flapping_end': case 'flapping_start': $visual->addHtml(HtmlElement::create( 'div', ['class' => ['icon-ball', 'ball-size-' . $ballSize]], new Icon(Icons::IS_FLAPPING) )); break; case 'problem': case 'recovery': if ($item->object_type === 'host') { $state = HostStates::text($item->state); $previousHardState = HostStates::text($item->previous_hard_state); } else { $state = ServiceStates::text($item->state); $previousHardState = ServiceStates::text($item->previous_hard_state); } $visual->addHtml(new StateChange($state, $previousHardState)); break; } } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(HtmlElement::create( 'span', ['class' => 'subject'], sprintf($this->phraseForType($item->type), ucfirst($item->object_type)) )); } else { $title->addHtml(new Link( sprintf($this->phraseForType($item->type), ucfirst($item->object_type)), Links::event($item->history), ['class' => 'subject'] )); } if ($item->object_type === 'host') { $link = $this->createHostLink($item->host, true); } else { $link = $this->createServiceLink($item->service, $item->host, true); } $title->addHtml(Text::create(' '), $link); } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { if (in_array($item->type, ['flapping_end', 'flapping_start', 'problem', 'recovery'])) { $commandName = $item->object_type === 'host' ? $item->host->checkcommand_name : $item->service->checkcommand_name; if (isset($commandName)) { if (empty($item->text)) { $caption->addHtml(new EmptyState($this->translate('Output unavailable.'))); } else { $caption->addHtml(new PluginOutputContainer( (new PluginOutput($item->text)) ->setCommandName($commandName) )); } } else { $caption->addHtml(new EmptyState($this->translate('Waiting for Icinga DB to synchronize the config.'))); } } else { $caption->add([ new Icon(Icons::USER), $item->author, ': ', $item->text ]); } } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { $timeRelative = new TimeAgo($item->send_time); if ($layout !== 'header') { $timeAbsolute = (new Time($item->send_time)) ->setFormatter( new IntlDateFormatter( Locale::getDefault(), IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM ) ); $timeAbsolute->setAttribute('class', 'icingadb-history-timestamp'); $timeRelative->setAttribute('class', 'icingadb-history-timestamp'); if ($this->useRelativeTimestamps) { $timeAbsolute->setAttribute('hidden', true); } else { $timeRelative->setAttribute('hidden', true); } $info->addHtml($timeAbsolute); } $info->addHtml($timeRelative); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } /** * Get a localized phrase for the given notification type * * @param string $type * * @return string */ protected function phraseForType(string $type): string { switch ($type) { case 'acknowledgement': return $this->translate('Problem acknowledged'); case 'custom': return $this->translate('Custom Notification triggered'); case 'downtime_end': return $this->translate('Downtime ended'); case 'downtime_removed': return $this->translate('Downtime removed'); case 'downtime_start': return $this->translate('Downtime started'); case 'flapping_end': return $this->translate('Flapping stopped'); case 'flapping_start': return $this->translate('Flapping started'); case 'problem': return $this->translate('%s ran into a problem'); case 'recovery': return $this->translate('%s recovered'); default: throw new InvalidArgumentException(sprintf('Type %s is not a valid notification type', $type)); } } } icingadb-web-1.5.0/library/Icingadb/View/RedundancyGroupRenderer.php000066400000000000000000000055001527064444300254300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Widget\DependencyNodeStatistics; use ipl\Html\Attributes; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Common\ItemRenderer; use ipl\Web\Url; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeSince; /** @implements ItemRenderer */ class RedundancyGroupRenderer implements ItemRenderer { use Translation; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('redundancy-group'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $ballSize = StateBall::SIZE_LARGE; if ($layout === 'minimal' || $layout === 'header') { $ballSize = StateBall::SIZE_BIG; } $stateBall = new StateBall($item->state->getStateText(), $ballSize); $stateBall->add($item->state->getIcon()); $visual->addHtml($stateBall); } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(new DependencyNodeStatistics($item->summary)); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $subject = new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) ); } else { $subject = new Link( $item->display_name, Url::fromPath('icingadb/redundancygroup', ['id' => bin2hex($item->id)]), ['class' => 'subject'] ); } if ($item->state->failed) { $title->addHtml(Html::sprintf( $this->translate('%s has no working objects', ' has ...'), $subject )); } else { $title->addHtml(Html::sprintf( $this->translate('%s has working objects', ' has ...'), $subject )); } } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { $info->addHtml(new TimeSince($item->state->last_state_change->getTimestamp())); } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return $name === 'icon-image'; // Always add the icon-image section } } icingadb-web-1.5.0/library/Icingadb/View/ServiceRenderer.php000066400000000000000000000027371527064444300237300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\Attributes; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; /** @extends BaseHostAndServiceRenderer */ class ServiceRenderer extends BaseHostAndServiceRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void { parent::assembleAttributes($item, $attributes, $layout); $attributes->get('class')->addValue('service'); } protected function createSubject($item, string $layout): ValidHtml { $service = $item->display_name; $host = [ new StateBall($item->host->state->getStateText(), StateBall::SIZE_MEDIUM), ' ', $item->host->display_name ]; $host = new Link($host, Links::host($item->host), ['class' => 'subject']); if ($layout === 'header') { $service = new HtmlElement('span', new Attributes(['class' => 'subject']), new Text($service)); } else { $service = new Link($service, Links::service($item, $item->host), ['class' => 'subject']); } return Html::sprintf($this->translate('%s on %s', ' on '), $service, $host); } } icingadb-web-1.5.0/library/Icingadb/View/ServicegroupGridRenderer.php000066400000000000000000000246031527064444300256070ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; use ipl\Web\Url; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBadge; /** @implements ItemRenderer */ class ServicegroupGridRenderer implements ItemRenderer { use Translation; use BaseFilter; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue(['object-grid-cell', 'servicegroup']); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $url = Url::fromPath('icingadb/services/grid'); $urlFilter = Filter::all(Filter::equal('servicegroup.name', $item->name)); if ($item->services_critical_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 2)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); $link = new Link( new StateBadge($item->services_critical_unhandled, 'critical'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in CRITICAL state in service group "%s"', 'List %d services which are currently in CRITICAL state in service group "%s"', $item->services_critical_unhandled ), $item->services_critical_unhandled, $item->display_name ) ] ); } elseif ($item->services_critical_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 2)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); $link = new Link( new StateBadge($item->services_critical_handled, 'critical', true), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in CRITICAL (Acknowledged) state in service group' . ' "%s"', 'List %d services which are currently in CRITICAL (Acknowledged) state in service group' . ' "%s"', $item->services_critical_handled ), $item->services_critical_handled, $item->display_name ) ] ); } elseif ($item->services_warning_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 1)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); $link = new Link( new StateBadge($item->services_warning_unhandled, 'warning'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in WARNING state in service group "%s"', 'List %d services which are currently in WARNING state in service group "%s"', $item->services_warning_unhandled ), $item->services_warning_unhandled, $item->display_name ) ] ); } elseif ($item->services_warning_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 1)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); $link = new Link( new StateBadge($item->services_warning_handled, 'warning', true), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in WARNING (Acknowledged) state in service group' . ' "%s"', 'List %d services which are currently in WARNING (Acknowledged) state in service group' . ' "%s"', $item->services_warning_handled ), $item->services_warning_handled, $item->display_name ) ] ); } elseif ($item->services_unknown_unhandled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 3)) ->add(Filter::equal('service.state.is_handled', 'n')) ->add(Filter::equal('service.state.is_reachable', 'y')); $link = new Link( new StateBadge($item->services_unknown_unhandled, 'unknown'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in UNKNOWN state in service group "%s"', 'List %d services which are currently in UNKNOWN state in service group "%s"', $item->services_unknown_unhandled ), $item->services_unknown_unhandled, $item->display_name ) ] ); } elseif ($item->services_unknown_handled > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 3)) ->add(Filter::any( Filter::equal('service.state.is_handled', 'y'), Filter::equal('service.state.is_reachable', 'n') )); $link = new Link( new StateBadge($item->services_unknown_handled, 'unknown', true), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in UNKNOWN (Acknowledged) state in service group' . ' "%s"', 'List %d services which are currently in UNKNOWN (Acknowledged) state in service group' . ' "%s"', $item->services_unknown_handled ), $item->services_unknown_handled, $item->display_name ) ] ); } elseif ($item->services_pending > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 99)); $link = new Link( new StateBadge($item->services_pending, 'pending'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in PENDING state in service group "%s"', 'List %d services which are currently in PENDING state in service group "%s"', $item->services_pending ), $item->services_pending, $item->display_name ) ] ); } elseif ($item->services_ok > 0) { $urlFilter->add(Filter::equal('service.state.soft_state', 0)); $link = new Link( new StateBadge($item->services_ok, 'ok'), $url->setFilter($urlFilter), [ 'title' => sprintf( $this->translatePlural( 'List %d service that is currently in OK state in service group "%s"', 'List %d services which are currently in OK state in service group "%s"', $item->services_ok ), $item->services_ok, $item->display_name ) ] ); } else { $link = new Link( new StateBadge(0, 'none'), Links::servicegroup($item), [ 'title' => sprintf( $this->translate('There are no services in service group "%s"'), $item->display_name ) ] ); } $visual->addHtml($link); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { $link = new Link( $item->display_name, Links::servicegroup($item), [ 'class' => 'subject', 'title' => sprintf( $this->translate('List all services in the group "%s"'), $item->display_name ) ] ); if ($this->hasBaseFilter()) { $link->getUrl()->setFilter($this->getBaseFilter()); } $title->addHtml($link); } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } } icingadb-web-1.5.0/library/Icingadb/View/ServicegroupRenderer.php000066400000000000000000000062731527064444300250040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use Icinga\Module\Icingadb\Widget\Detail\ServiceStatistics; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Widget\ItemTable\ItemTableRenderer; use ipl\Web\Widget\Link; /** @implements ItemTableRenderer */ class ServicegroupRenderer implements ItemTableRenderer { use Translation; use BaseFilter; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('servicegroup'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) )); } else { $link = new Link( $item->display_name, Links::servicegroup($item), [ 'class' => 'subject', 'title' => sprintf( $this->translate('List all services in the group "%s"'), $item->display_name ) ] ); if ($this->hasBaseFilter()) { $link->getUrl()->setFilter($this->getBaseFilter()); } $title->addHtml($link); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { // assembleExtendedInfo() is only called when $layout == header $info->addHtml($this->createStatistics($item)); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } public function assembleColumns($item, HtmlDocument $columns, string $layout): void { $serviceStats = $this->createStatistics($item); if ($this->hasBaseFilter()) { $serviceStats->setBaseFilter(Filter::all($serviceStats->getBaseFilter(), $this->getBaseFilter())); } $columns->addHtml($serviceStats); } /** * Create statistics for the given item * * @param ServicegroupSummary $item * * @return ServiceStatistics */ protected function createStatistics(ServicegroupSummary $item): ServiceStatistics { return (new ServiceStatistics($item)) ->setBaseFilter(Filter::equal('servicegroup.name', $item->name)); } } icingadb-web-1.5.0/library/Icingadb/View/UserRenderer.php000066400000000000000000000037051527064444300232420ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\User; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Ball; use ipl\Web\Widget\Link; /** @implements ItemRenderer */ class UserRenderer implements ItemRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('user'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $visual->addHtml( (new Ball($layout === 'minimal' ? Ball::SIZE_BIG : Ball::SIZE_LARGE)) ->addAttributes(['class' => 'user-ball']) ->addHtml(Text::create(grapheme_substr($item->display_name, 0, 1))) ); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) )); } else { $title->addHtml(new Link($item->display_name, Links::user($item), ['class' => 'subject'])); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } } icingadb-web-1.5.0/library/Icingadb/View/UsergroupRenderer.php000066400000000000000000000037441527064444300243220ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\View; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Usergroup; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Web\Common\ItemRenderer; use ipl\Web\Widget\Ball; use ipl\Web\Widget\Link; /** @implements ItemRenderer */ class UsergroupRenderer implements ItemRenderer { public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('user-group'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { $visual->addHtml( (new Ball($layout === 'minimal' ? Ball::SIZE_BIG : Ball::SIZE_LARGE)) ->addAttributes(['class' => 'usergroup-ball']) ->addHtml(Text::create(grapheme_substr($item->display_name, 0, 1))) ); } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) )); } else { $title->addHtml(new Link($item->display_name, Links::usergroup($item), ['class' => 'subject'])); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } } icingadb-web-1.5.0/library/Icingadb/Web/000077500000000000000000000000001527064444300177225ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Web/Control/000077500000000000000000000000001527064444300213425ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Web/Control/ColumnChooser.php000066400000000000000000000071331527064444300246370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; use ipl\Orm\Exception\InvalidRelationException; use ipl\Orm\Resolver; use ipl\Web\Compat\CompatForm; use ipl\Web\FormElement\TermInput; use ipl\Web\FormElement\TermInput\Term; use ipl\Web\Url; class ColumnChooser extends CompatForm { /** @var string[] The columns already present in the url */ protected array $columns = []; /** @var Url The suggestionUrl for the TermInput {@see TermInput::$suggestionUrl} */ protected Url $suggestionUrl; /** @var Resolver The resolver used to validate column names and get their labels */ protected Resolver $resolver; /** * Create a new ColumnChooser * * @param Url $suggestionUrl URL to fetch column suggestions from * @param Resolver $resolver Resolver to validate column names and get their labels * @param string|array $columns A string of comma separated columns or an array of columns */ public function __construct(Url $suggestionUrl, Resolver $resolver, string|array $columns = []) { if (is_string($columns)) { foreach (explode(',', $columns) as $column) { if ($column = trim($column)) { $this->columns[] = $column; } } } else { $this->columns = $columns; } $this->suggestionUrl = $suggestionUrl; $this->resolver = $resolver; } /** * Get the columns already present in the url * * @return string[] An array with all columns already present in the url */ public function getColumns(): array { return $this->columns; } /** * Get the value of the columns field * * @return string The value of the columns field */ public function getColumnsValue(): string { return $this->getValue('columns'); } public function getPartUpdates(): array { $this->ensureAssembled(); return $this->getElement('columns')->prepareMultipartUpdate($this->getRequest()); } /** * Validate terms, mark invalid ones, and set labels * * @param Term[] $terms */ protected function validateTermsAndSetLabels(array $terms): void { foreach ($terms as $term) { try { $columnDefinition = $this->resolver->getColumnDefinition($term->getSearchValue()); $label = $columnDefinition->getLabel(); if ($label !== null) { $term->setLabel($label); } } catch (InvalidRelationException) { $term->setMessage($this->translate('Is not a valid column')); } } } protected function assemble() { $termInput = (new TermInput( 'columns', ['label' => $this->translate('Selected Columns'),] )) ->setRequired() ->setVerticalTermDirection() ->setReadOnly() ->setOrdered() ->setSuggestionUrl($this->suggestionUrl) ->setValue(implode(',', $this->columns)) ->on(TermInput::ON_ENRICH, $this->validateTermsAndSetLabels(...)) ->on(TermInput::ON_ADD, $this->validateTermsAndSetLabels(...)) ->on(TermInput::ON_SAVE, $this->validateTermsAndSetLabels(...)) ->on(TermInput::ON_PASTE, $this->validateTermsAndSetLabels(...)); $this->addElement($termInput); $this->addElement('submit', 'apply', ['label' => $this->translate('Apply')]); } } icingadb-web-1.5.0/library/Icingadb/Web/Control/GridViewModeSwitcher.php000066400000000000000000000020301527064444300261040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; /** * View mode switcher to toggle between grid and list view */ class GridViewModeSwitcher extends ViewModeSwitcher { /** @var string Default view mode */ public const DEFAULT_VIEW_MODE = 'list'; /** @var array View mode-icon pairs */ public static $viewModes = [ 'list' => 'default', 'grid' => 'grid' ]; protected function getTitle(string $viewMode): string { $active = null; $inactive = null; switch ($viewMode) { case 'list': $active = t('List view active'); $inactive = t('Switch to list view'); break; case 'grid': $active = t('Grid view active'); $inactive = t('Switch to grid view'); break; } return $viewMode === $this->getViewMode() ? $active : $inactive; } } icingadb-web-1.5.0/library/Icingadb/Web/Control/ProblemToggle.php000066400000000000000000000030741527064444300246210ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; use ipl\Web\Common\FormUid; use ipl\Web\Compat\CompatForm; class ProblemToggle extends CompatForm { use FormUid; protected $filter; protected $protector; protected $defaultAttributes = [ 'name' => 'problem-toggle', 'class' => 'icinga-form icinga-controls inline' ]; public function __construct($filter) { $this->filter = $filter; } /** * Set callback to protect ids with * * @param callable $protector * * @return $this */ public function setIdProtector(callable $protector): self { $this->protector = $protector; return $this; } /** * Get whether the toggle is checked * * @return bool */ public function isChecked(): bool { $this->ensureAssembled(); return $this->getElement('problems')->isChecked(); } protected function assemble() { $this->addElement('checkbox', 'problems', [ 'class' => 'autosubmit', 'id' => $this->protectId('problems'), 'label' => t('Problems Only'), 'value' => $this->filter !== null ]); $this->add($this->createUidElement()); } private function protectId($id) { if (is_callable($this->protector)) { return call_user_func($this->protector, $id); } return $id; } } icingadb-web-1.5.0/library/Icingadb/Web/Control/SearchBar/000077500000000000000000000000001527064444300231745ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php000066400000000000000000000134441527064444300273540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control\SearchBar; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Data\QueryColumnsProvider; use Icinga\Module\Icingadb\Data\QueryValuesProvider; use Icinga\Module\Icingadb\Hook\SearchColumnsProviderHook; use ipl\Html\HtmlElement; use ipl\Orm\Model; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Control\SearchBar\Suggestions; class ObjectSuggestions extends Suggestions { use Auth; use BaseFilter; use Database; /** @var Model */ protected $model; /** @var array */ protected $customVarSources; /** @var ?array */ protected ?array $fixedColumns = null; public function __construct() { $this->customVarSources = [ 'checkcommand' => t('Checkcommand %s', '..'), 'eventcommand' => t('Eventcommand %s', '..'), 'host' => t('Host %s', '..'), 'hostgroup' => t('Hostgroup %s', '..'), 'notification' => t('Notification %s', '..'), 'notificationcommand' => t('Notificationcommand %s', '..'), 'service' => t('Service %s', '..'), 'servicegroup' => t('Servicegroup %s', '..'), 'timeperiod' => t('Timeperiod %s', '..'), 'user' => t('Contact %s', '..'), 'usergroup' => t('Contactgroup %s', '..') ]; } /** * Set the model to show suggestions for * * @param string|Model $model * * @return $this */ public function setModel($model): self { if (is_string($model)) { $model = new $model(); } $this->model = $model; return $this; } /** * Get the model to show suggestions for * * @return Model */ public function getModel(): Model { if ($this->model === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->model; } protected function shouldShowRelationFor(string $column): bool { return QueryColumnsProvider::shouldShowRelationFor($column, $this->getModel()); } protected function createQuickSearchFilter($searchTerm) { $model = $this->getModel(); $resolver = $model::on($this->getDb())->getResolver(); $quickFilter = Filter::any(); $defaultColumns = $model->getSearchColumns(); $columns = SearchColumnsProviderHook::getCustomVarColumns($model, $defaultColumns); foreach ($columns as $column) { if (strpos($column, '.') === false) { $column = $resolver->qualifyColumn($column, $model->getTableName()); } $where = Filter::like($column, $searchTerm); $where->metaData()->set('columnLabel', $resolver->getColumnDefinition($column)->getLabel()); $quickFilter->add($where); } return $quickFilter; } protected function fetchValueSuggestions($column, $searchTerm, Filter\Chain $searchFilter) { $model = $this->getModel(); $query = $model::on($this->getDb()); $query->limit(static::DEFAULT_LIMIT); $provider = new QueryValuesProvider($query, $column, $searchTerm, $searchFilter); if ($this->hasBaseFilter()) { $provider->setBaseFilter($this->getBaseFilter()); } foreach ($provider as $result) { $search = $result['search']; unset($result['search']); yield $search => $result; } } protected function fetchColumnSuggestions($searchTerm) { $model = $this->getModel(); $query = $model::on($this->getDb()); $provider = (new QueryColumnsProvider($query, $searchTerm)) ->setCustomVarSources($this->customVarSources); if ($this->fixedColumns !== null) { $provider->setFixedColumns($this->fixedColumns); } if ($this->hasBaseFilter()) { $provider->setBaseFilter($this->getBaseFilter()); } $currentGroup = null; foreach ($provider as $item) { if (isset($item['group']) && $item['group'] !== $currentGroup) { $currentGroup = $item['group']; $this->addHtml(HtmlElement::create( 'li', ['class' => static::SUGGESTION_TITLE_CLASS], $currentGroup )); } yield $item['search'] => $item['label']; } } protected function filterColumnSuggestions($data, $searchTerm) { // Remove filtering here, as fetchColumnSuggestions already performs it yield from $data; } /** * Reduce {@see $customVarSources} to only given relations to fetch variables from * * @param string[] $relations * * @return $this */ public function onlyWithCustomVarSources(array $relations): self { $this->customVarSources = array_intersect_key($this->customVarSources, array_flip($relations)); return $this; } /** * Provide suggestions based on a fixed set of columns * * @param array $columns * * @return $this */ public function withFixedColumns(array $columns): static { $this->fixedColumns = $columns; return $this; } } icingadb-web-1.5.0/library/Icingadb/Web/Control/TabularViewModeSwitcher.php000066400000000000000000000015471527064444300266250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; use ipl\I18n\Translation; /** * View mode switcher with an additional tabular view mode */ class TabularViewModeSwitcher extends ViewModeSwitcher { use Translation; public static $viewModes = [ 'minimal' => 'minimal', 'common' => 'default', 'detailed' => 'detailed', 'tabular' => 'tabular' ]; protected function getTitle(string $viewMode): string { if ($viewMode === 'tabular') { return $this->getViewMode() === $viewMode ? $this->translate('Tabular view active') : $this->translate('Switch to tabular view'); } else { return parent::getTitle($viewMode); } } } icingadb-web-1.5.0/library/Icingadb/Web/Control/TimestampToggle.php000066400000000000000000000053521527064444300251650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; use ipl\Html\Form; use ipl\I18n\Translation; use ipl\Web\Common\FormUid; class TimestampToggle extends Form { use FormUid; use Translation; /** @var string Default timestamp mode param */ public const DEFAULT_TIMESTAMP_MODE_PARAM = 'timestamps'; /** @var bool Whether relative or absolute timestamps are to be used */ protected bool $enabled; protected $defaultAttributes = [ 'name' => 'timestamp-toggle', 'class' => ['icinga-form', 'icinga-controls', 'inline'] ]; /** * Create a toggle to switch between absolute and relative timestamps * * When enabled, timestamps are displayed as relative, absolute otherwise * * @param bool $enabled True to use relative timestamps, false for absolute */ public function __construct(bool $enabled = false) { $this->enabled = $enabled; $this->addElementDecoratorLoaderPaths([['ipl\\Web\\Compat\\FormDecorator', 'Decorator']]); } /** * Get the current value of the timestamp-toggle element * * @return string `absolute` or `relative` */ public function getToggleValue(): string { return $this->getValue('timestamp-toggle'); } /** * Get whether the toggle is enabled * * When enabled, timestamps are displayed as relative, absolute otherwise * * @return bool */ public function isEnabled(): bool { return $this->getElement('timestamp-toggle')->isChecked(); } protected function assemble(): void { $this->addElement('checkbox', 'timestamp-toggle', [ 'class' => ['icingadb-timestamp-toggle', 'autosubmit'], 'label' => $this->translate('Use relative timestamps'), 'value' => $this->enabled, 'checkedValue' => 'relative', 'uncheckedValue' => 'absolute', 'decorators' => [ 'Label', 'LabelGroup' => [ 'name' => 'HtmlTag', 'options' => [ 'tag' => 'div', 'class' => 'control-label-group', ] ], 'Checkbox', 'RenderElement', 'ControlGroup' => [ 'name' => 'HtmlTag', 'options' => [ 'tag' => 'div', 'class' => 'control-group' ] ] ] ]); $this->addElement($this->createUidElement()); } } icingadb-web-1.5.0/library/Icingadb/Web/Control/ViewModeSwitcher.php000066400000000000000000000125071527064444300253100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Control; use ipl\Html\Attributes; use ipl\Html\Form; use ipl\Html\FormElement\HiddenElement; use ipl\Html\FormElement\InputElement; use ipl\Html\HtmlElement; use ipl\Web\Common\FormUid; use ipl\Web\Widget\IcingaIcon; class ViewModeSwitcher extends Form { use FormUid; protected $defaultAttributes = [ 'class' => 'view-mode-switcher', 'name' => 'view-mode-switcher' ]; /** @var string Default view mode */ public const DEFAULT_VIEW_MODE = 'common'; /** @var string Default view mode param */ public const DEFAULT_VIEW_MODE_PARAM = 'view'; /** @var array View mode-icon pairs */ public static $viewModes = [ 'minimal' => 'minimal', 'common' => 'default', 'detailed' => 'detailed', ]; /** @var string */ protected $defaultViewMode; /** @var string */ protected $method = 'POST'; /** @var callable */ protected $protector; /** @var string */ protected $viewModeParam = self::DEFAULT_VIEW_MODE_PARAM; /** * Get the default mode * * @return string */ public function getDefaultViewMode(): string { return $this->defaultViewMode ?: static::DEFAULT_VIEW_MODE; } /** * Set the default view mode * * @param string $defaultViewMode * * @return $this */ public function setDefaultViewMode(string $defaultViewMode): self { $this->defaultViewMode = $defaultViewMode; return $this; } /** * Get the view mode URL parameter * * @return string */ public function getViewModeParam(): string { return $this->viewModeParam; } /** * Set the view mode URL parameter * * @param string $viewModeParam * * @return $this */ public function setViewModeParam(string $viewModeParam): self { $this->viewModeParam = $viewModeParam; return $this; } /** * Get the view mode * * @return string */ public function getViewMode(): string { $viewMode = $this->getPopulatedValue($this->getViewModeParam(), $this->getDefaultViewMode()); // View mode stays null if explicitly populated with null. if ($viewMode !== null && array_key_exists($viewMode, static::$viewModes)) { return $viewMode; } return $this->getDefaultViewMode(); } /** * Set the view mode * * @param string $name * * @return $this */ public function setViewMode(string $name) { $this->populate([$this->getViewModeParam() => $name]); return $this; } /** * Set callback to protect ids with * * @param callable $protector * * @return $this */ public function setIdProtector(callable $protector): self { $this->protector = $protector; return $this; } private function protectId($id) { if (is_callable($this->protector)) { return call_user_func($this->protector, $id); } return $id; } protected function assemble() { $viewModeParam = $this->getViewModeParam(); $this->addElement($this->createUidElement()); $this->addElement(new HiddenElement($viewModeParam)); foreach (static::$viewModes as $viewMode => $icon) { $protectedId = $this->protectId('view-mode-switcher-' . $icon); $input = new InputElement($viewModeParam, [ 'class' => 'autosubmit', 'id' => $protectedId, 'name' => $viewModeParam, 'type' => 'radio', 'value' => $viewMode ]); $input->getAttributes()->registerAttributeCallback('checked', function () use ($viewMode) { return $viewMode === $this->getViewMode(); }); $label = new HtmlElement( 'label', Attributes::create([ 'for' => $protectedId ]), new IcingaIcon($icon) ); $label->getAttributes()->registerAttributeCallback('title', function () use ($viewMode) { return $this->getTitle($viewMode); }); $this->addHtml($input, $label); } } /** * Return the title for the view mode when it is active and inactive * * @param string $viewMode * * @return string Title for the view mode when it is active and inactive */ protected function getTitle(string $viewMode): string { $active = null; $inactive = null; switch ($viewMode) { case 'minimal': $active = t('Minimal view active'); $inactive = t('Switch to minimal view'); break; case 'common': $active = t('Common view active'); $inactive = t('Switch to common view'); break; case 'detailed': $active = t('Detailed view active'); $inactive = t('Switch to detailed view'); break; } return $viewMode === $this->getViewMode() ? $active : $inactive; } } icingadb-web-1.5.0/library/Icingadb/Web/Controller.php000066400000000000000000000516541527064444300225710ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web; use Exception; use Generator; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Application\Config; use Icinga\Application\Icinga; use Icinga\Application\Logger; use Icinga\Application\Web; use Icinga\Data\ConfigObject; use Icinga\Exception\Json\JsonDecodeException; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\Model; use Icinga\Module\Icingadb\Common\SearchControls; use Icinga\Module\Icingadb\Data\CsvResultSet; use Icinga\Module\Icingadb\Data\JsonResultSet; use Icinga\Module\Icingadb\Data\QueryColumnsProvider; use Icinga\Module\Icingadb\Web\Control\ColumnChooser; use Icinga\Module\Icingadb\Hook\SearchColumnsProviderHook; use Icinga\Module\Icingadb\Web\Control\GridViewModeSwitcher; use Icinga\Module\Icingadb\Web\Control\TimestampToggle; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; use Icinga\Module\Icingadb\Widget\ItemTable\StateItemTable; use Icinga\Security\SecurityException; use Icinga\User\Preferences; use Icinga\User\Preferences\PreferencesStore; use Icinga\Util\Environment; use Icinga\Util\Json; use ipl\Html\Html; use ipl\Html\ValidHtml; use ipl\Orm\Query; use ipl\Orm\UnionQuery; use ipl\Stdlib\Filter; use ipl\Web\Compat\CompatController; use ipl\Web\Control\LimitControl; use ipl\Web\Control\PaginationControl; use ipl\Web\Filter\QueryString; use ipl\Web\FormElement\SearchSuggestions; use ipl\Web\Url; use ipl\Web\Widget\CopyToClipboard; class Controller extends CompatController { use Auth; use Database; use SearchControls; /** @var Filter\Rule Filter from query string parameters */ private $filter; /** @var string|null */ private $format; /** @var bool */ private $formatProcessed = false; /** * Get the filter created from query string parameters * * @return Filter\Rule */ public function getFilter(): Filter\Rule { if ($this->filter === null) { $this->filter = QueryString::parse((string) $this->params); } return $this->filter; } /** * Create column control * * @param Query $query * @param Url $suggestionUrl * @param array $defaultColumns * @param Url $redirectUrl * * @return ColumnChooser */ public function createColumnControl( Query $query, Url $suggestionUrl, array $defaultColumns, Url $redirectUrl ): ColumnChooser { $columnsDef = $this->params->shift('columns') ?? $defaultColumns; $chooser = (new ColumnChooser($suggestionUrl, $query->getResolver(), $columnsDef)) ->setAction((string) Url::fromRequest()) ->on(ColumnChooser::ON_SENT, function (ColumnChooser $form) use ($redirectUrl) { if ($form->hasBeenSubmitted()) { $redirectUrl->setParam('columns', $form->getColumnsValue()); $this->redirectNow($redirectUrl); } else { foreach ($form->getPartUpdates() as $update) { if (! is_array($update)) { $update = [$update]; } $this->addPart(...$update); } } }); // When exporting as CSV or JSON, and the user requested specific columns, only those should be included if ($this->format === 'csv' || $this->format === 'json') { $query->columns($chooser->getColumns()); } else { $query->withColumns($chooser->getColumns()); } return $chooser; } /** * Create and return the ViewModeSwitcher * * This automatically shifts the view mode URL parameter from {@link $params}. * * @param PaginationControl $paginationControl * @param LimitControl $limitControl * @param bool $verticalPagination * @param class-string $viewModeSwitcherClass * * @return ViewModeSwitcher|GridViewModeSwitcher */ public function createViewModeSwitcher( PaginationControl $paginationControl, LimitControl $limitControl, bool $verticalPagination = false, string $viewModeSwitcherClass = ViewModeSwitcher::class ): ViewModeSwitcher { $viewModeSwitcher = new $viewModeSwitcherClass(); $viewModeSwitcher->setIdProtector([$this->getRequest(), 'protectId']); $user = $this->Auth()->getUser(); if (($preferredModes = $user->getAdditional('icingadb.view_modes')) === null) { try { $preferredModes = Json::decode( $user->getPreferences()->getValue('icingadb', 'view_modes', '[]'), true ); } catch (JsonDecodeException $e) { Logger::error('Failed to load preferred view modes for user "%s": %s', $user->getUsername(), $e); $preferredModes = []; } $user->setAdditional('icingadb.view_modes', $preferredModes); } $requestRoute = $this->getRequest()->getUrl()->getPath(); if (isset($preferredModes[$requestRoute])) { $viewModeSwitcher->setDefaultViewMode($preferredModes[$requestRoute]); } $viewModeSwitcher->populate([ $viewModeSwitcher->getViewModeParam() => $this->params->shift($viewModeSwitcher->getViewModeParam()) ]); $session = $this->Window()->getSessionNamespace( 'icingadb-viewmode-' . $this->Window()->getContainerId() ); $viewModeSwitcher->on( ViewModeSwitcher::ON_SUCCESS, function (ViewModeSwitcher $viewModeSwitcher) use ( $user, $preferredModes, $paginationControl, $verticalPagination, &$session ) { $viewMode = $viewModeSwitcher->getValue($viewModeSwitcher->getViewModeParam()); $requestUrl = Url::fromRequest(); $preferredModes[$requestUrl->getPath()] = $viewMode; $user->setAdditional('icingadb.view_modes', $preferredModes); try { $preferencesStore = PreferencesStore::create(new ConfigObject([ 'resource' => Config::app()->get('global', 'config_resource') ]), $user); $preferences = $preferencesStore->load(); $preferences['icingadb']['view_modes'] = Json::encode($preferredModes); $preferencesStore->save(new Preferences($preferences)); } catch (Exception $e) { Logger::error('Failed to save preferred view mode for user "%s": %s', $user->getUsername(), $e); } $pageParam = $paginationControl->getPageParam(); $limitParam = LimitControl::DEFAULT_LIMIT_PARAM; $currentPage = $paginationControl->getCurrentPageNumber(); $requestUrl->setParam($viewModeSwitcher->getViewModeParam(), $viewMode); if (! $requestUrl->hasParam($limitParam)) { if ($viewMode === 'minimal' || $viewMode === 'grid') { $session->set('previous_page', $currentPage); $session->set('request_path', $requestUrl->getPath()); $limit = $paginationControl->getLimit(); if (! $verticalPagination) { // We are computing it based on the first element being rendered on this current page $currentPage = (int) (floor((($currentPage * $limit) - $limit) / ($limit * 2)) + 1); } else { $currentPage = (int) (round($currentPage * $limit / ($limit * 2))); } $session->set('current_page', $currentPage); } elseif ( $viewModeSwitcher->getDefaultViewMode() === 'minimal' || $viewModeSwitcher->getDefaultViewMode() === 'grid' ) { $limit = $paginationControl->getLimit(); if ($currentPage === $session->get('current_page')) { // No other page numbers have been selected, i.e the user only // switches back and forth without changing the page numbers $currentPage = $session->get('previous_page'); } elseif (! $verticalPagination) { $currentPage = (int) (floor((($currentPage * $limit) - $limit) / ($limit / 2)) + 1); } else { $currentPage = (int) (floor($currentPage * $limit / ($limit / 2))); } $session->clear(); } if (($requestUrl->hasParam($pageParam) && $currentPage > 1) || $currentPage > 1) { $requestUrl->setParam($pageParam, $currentPage); } else { $requestUrl->remove($pageParam); } } $this->redirectNow($requestUrl); } )->handleRequest(ServerRequest::fromGlobals()); $viewMode = $viewModeSwitcher->getViewMode(); if ($viewMode === 'minimal' || $viewMode === 'grid') { $hasLimitParam = Url::fromRequest()->hasParam($limitControl->getLimitParam()); if ($paginationControl->getDefaultPageSize() <= LimitControl::DEFAULT_LIMIT && ! $hasLimitParam) { $paginationControl->setDefaultPageSize($paginationControl->getDefaultPageSize() * 2); $limitControl->setDefaultLimit($limitControl->getDefaultLimit() * 2); $paginationControl->apply(); } } $requestPath = $session->get('request_path'); if ($requestPath && $requestPath !== $requestRoute) { $session->clear(); } return $viewModeSwitcher; } /** * Create a control to switch between relative and absolute timestamps * * @return TimestampToggle */ public function createTimestampControl(): TimestampToggle { $path = $this->getRequest()->getUrl()->getPath(); $timestampMode = $this->params->shift(TimestampToggle::DEFAULT_TIMESTAMP_MODE_PARAM); $user = $this->Auth()->getUser(); if ($timestampMode === null) { $preferences = $user->getAdditional('icingadb.timestamps'); if ($preferences === null) { $preferences = Json::decode( $user->getPreferences()->getValue('icingadb', 'timestamps', '[]'), true ); $user->setAdditional('icingadb.timestamps', $preferences); } $timestampMode = $preferences[$path] ?? 'absolute'; } return (new TimestampToggle($timestampMode === 'relative')) ->on( TimestampToggle::ON_SUBMIT, function (TimestampToggle $toggle) use ($path, $user) { // The js changes the representation in the frontend, this request only saves the preference, // so we can skip all unnecessary work and signal the frontend not to replace the DOM $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); $this->ignoreXhrBody(); try { $preferencesStore = PreferencesStore::create(new ConfigObject([ 'resource' => Config::app()->get('global', 'config_resource') ]), $user); $storedPreferences = $preferencesStore->load(); $preferences = $user->getAdditional('icingadb.timestamps') ?? Json::decode($storedPreferences['icingadb']['timestamps'] ?? '[]', true); $preferences[$path] = $toggle->getToggleValue(); $user->setAdditional('icingadb.timestamps', $preferences); $storedPreferences['icingadb']['timestamps'] = Json::encode($preferences); $preferencesStore->save(new Preferences($storedPreferences)); } catch (Exception $e) { Logger::error('Failed to save timestamp mode for user "%s": %s', $user->getUsername(), $e); } } )->handleRequest($this->getServerRequest()); } /** * Process a search request * * @param Query $query * @param array $additionalColumns * * @return void */ public function handleSearchRequest(Query $query, array $additionalColumns = []) { $q = trim($this->params->shift('q', ''), ' *'); if (! $q) { return; } $filter = Filter::any(); $this->prepareSearchFilter($query, $q, $filter, $additionalColumns); $redirectUrl = Url::fromRequest(); $redirectUrl->setParams($this->params)->setFilter($filter); $this->getResponse()->redirectAndExit($redirectUrl); } /** * Prepare the given search filter * * @param Query $query * @param string $search * @param Filter\Any $filter * @param array $additionalColumns * * @return void */ protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter, array $additionalColumns) { $model = $query->getModel(); $defaultColumns = $model->getSearchColumns(); $columns = SearchColumnsProviderHook::getCustomVarColumns($model, $defaultColumns); foreach ($columns as $column) { if (strpos($column, '.') === false) { $column = $query->getResolver()->qualifyColumn($column, $query->getModel()->getTableName()); } $filter->add(Filter::like($column, "*$search*")); } } /** * Require permission to access the given route * * @param ?string $name If NULL, the current controller name is used * * @throws SecurityException */ public function assertRouteAccess(?string $name = null) { if (! $name) { $name = $this->getRequest()->getControllerName(); } if (! $this->isPermittedRoute($name)) { throw new SecurityException('No permission to access this route'); } } public function export(Query ...$queries) { if ($this->format === 'sql') { foreach ($queries as $query) { list($sql, $values) = $query->getDb()->getQueryBuilder()->assembleSelect($query->assembleSelect()); $unused = []; foreach ($values as $value) { $pos = strpos($sql, '?'); if ($pos !== false) { if (is_string($value)) { $value = "'" . $value . "'"; } $sql = substr_replace($sql, $value, $pos, 1); } else { $unused[] = $value; } } if (! empty($unused)) { $sql .= ' /* Unused values: "' . join('", "', $unused) . '" */'; } $pre = Html::tag('pre', $sql); CopyToClipboard::attachTo($pre); $this->content->add($pre); } return true; } // It only makes sense to export a single result to CSV or JSON $query = $queries[0]; // No matter the format, a limit should only apply if set if ($this->format !== null) { if (! Url::fromRequest()->hasParam('limit')) { $query->limit(null) ->offset(null); } } if ($this->format === 'json' || $this->format === 'csv') { $response = $this->getResponse(); $fileName = $this->view->title; ob_end_clean(); Environment::raiseExecutionTime(); if ($this->format === 'json') { $response ->setHeader('Content-Type', 'application/json') ->setHeader('Cache-Control', 'no-store') ->setHeader( 'Content-Disposition', 'attachment; filename=' . $fileName . '.json' ) ->sendResponse(); JsonResultSet::stream($query); } else { $response ->setHeader('Content-Type', 'text/csv') ->setHeader('Cache-Control', 'no-store') ->setHeader( 'Content-Disposition', 'attachment; filename=' . $fileName . '.csv' ) ->sendResponse(); CsvResultSet::stream($query); } } $this->getTabs()->enableDataExports(); } public function dispatch($action) { // Notify helpers of action preDispatch state $this->_helper->notifyPreDispatch(); $this->preDispatch(); if ($this->getRequest()->isDispatched()) { // If pre-dispatch hooks introduced a redirect then stop dispatch // @see ZF-7496 if (! $this->getResponse()->isRedirect()) { $interceptable = $this->$action(); if ($interceptable instanceof Generator) { foreach ($interceptable as $stopSignal) { if ($stopSignal === true) { $this->formatProcessed = true; break; } } } } $this->postDispatch(); } // whats actually important here is that this action controller is // shutting down, regardless of dispatching; notify the helpers of this // state $this->_helper->notifyPostDispatch(); } protected function addContent(ValidHtml $content) { if ($content instanceof StateItemTable) { $this->content->getAttributes()->add('class', 'full-height'); } return parent::addContent($content); } public function filter(Query $query, ?Filter\Rule $filter = null): self { if ($this->format !== 'sql' || $this->hasPermission('config/authentication/roles/show')) { $this->applyRestrictions($query); } if ($query instanceof UnionQuery) { foreach ($query->getUnions() as $query) { $query->filter($filter ?: $this->getFilter()); } } else { $query->filter($filter ?: $this->getFilter()); } return $this; } public function preDispatch() { parent::preDispatch(); $this->format = $this->params->shift( 'format', $this->getRequest()->isApiRequest() ? 'json' : null ); } public function postDispatch() { if (! $this->formatProcessed && $this->format !== null && $this->format !== 'pdf') { // The purpose of this is not only to show that a requested format isn't supported. // It's main purpose is to not allow to bypass restrictions with `?format=sql` as // it may be possible that an action applies restrictions, but doesn't support any // output formats. Since the restrictions are bypassed in method `$this->filter()` // for the SQL output format and the actual format processing is part of a different // method (`$this->export()`) which needs to be called explicitly by an action, // it's otherwise possible for bad individuals to access unrestricted data. $this->httpBadRequest(t('This route does not support the requested output format')); } parent::postDispatch(); } protected function moduleInit() { /** @var Web $app */ $app = Icinga::app(); $app->getFrontController() ->getPlugin('Zend_Controller_Plugin_ErrorHandler') ->setErrorHandlerModule('icingadb'); } /** * Add column suggestions for the given model * * @param class-string $model * @param array $customVarSources * * @return void */ protected function suggestColumns(string $model, array $customVarSources = []): void { $query = $model::on($this->getDb()); $provider = (new QueryColumnsProvider($query))->setCustomVarSources($customVarSources); $suggestions = new SearchSuggestions($provider); $suggestions->forRequest($this->getServerRequest()); $provider->forSuggestions($suggestions); $this->getDocument()->addHtml($suggestions); } } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/000077500000000000000000000000001527064444300220215ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Action.php000066400000000000000000000054031527064444300237510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Macros; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Web\Navigation\NavigationItem; use ipl\Web\Url; class Action extends NavigationItem { use Auth; use Macros; /** * Whether this action's macros were already resolved * * @var bool */ protected $resolved = false; /** * This action's object * * @var Host|Service */ protected $object; /** * The filter to use when being asked whether to render this action * * @var string */ protected $filter; /** * This action's raw url attribute * * @var string */ protected $rawUrl; /** * Set this action's object * * @param Host|Service $object * * @return $this */ public function setObject($object): self { $this->object = $object; return $this; } /** * Get this action's object * * @return Host|Service */ protected function getObject() { return $this->object; } /** * Set the filter to use when being asked whether to render this action * * @param string $filter * * @return $this */ public function setFilter(string $filter): self { $this->filter = $filter; return $this; } /** * Get the filter to use when being asked whether to render this action * * @return ?string */ public function getFilter(): ?string { return $this->filter; } /** * Set this item's url * * @param \Icinga\Web\Url|string $url * * @return $this */ public function setUrl($url): self { if (is_string($url)) { $this->rawUrl = $url; } else { parent::setUrl($url); } return $this; } public function getUrl(): ?\Icinga\Web\Url { $url = parent::getUrl(); if (! $this->resolved && $url === null && $this->rawUrl !== null && $this->object !== null) { $this->setUrl(Url::fromPath($this->expandMacros($this->rawUrl, $this->getObject()))); $this->resolved = true; return parent::getUrl(); } else { return $url; } } public function getRender(): bool { if ($this->render === null) { $filter = $this->getFilter(); $this->render = ! $filter || $this->isMatchedOn($filter, $this->getObject()); } return $this->render; } } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/IcingadbHostAction.php000066400000000000000000000003241527064444300262250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation; class IcingadbHostAction extends Action { } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/IcingadbServiceAction.php000066400000000000000000000003271527064444300267130ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation; class IcingadbServiceAction extends Action { } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Renderer/000077500000000000000000000000001527064444300235675ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php000066400000000000000000000017371527064444300276540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation\Renderer; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\HoststateSummary; use ipl\Web\Url; class HostProblemsBadge extends ProblemsBadge { use Auth; protected function fetchProblemsCount() { $summary = HoststateSummary::on($this->getDb()); $this->applyRestrictions($summary); $count = (int) $summary->first()->hosts_down_unhandled; if ($count) { $this->setTitle(sprintf( tp('One unhandled host down', '%d unhandled hosts down', $count), $count )); } return $count; } protected function getUrl(): Url { return Links::hosts()->setParams(['host.state.is_problem' => 'y', 'sort' => 'host.state.severity desc']); } } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php000066400000000000000000000075721527064444300270210ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation\Renderer; use Exception; use Icinga\Application\Logger; use Icinga\Module\Icingadb\Common\Database; use Icinga\Web\Navigation\NavigationItem; use Icinga\Web\Navigation\Renderer\NavigationItemRenderer; use ipl\Html\HtmlDocument; use ipl\Html\HtmlString; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBadge; abstract class ProblemsBadge extends NavigationItemRenderer { use Database; public const STATE_CRITICAL = 'critical'; public const STATE_UNKNOWN = 'unknown'; /** @var int Count cache */ protected $count; /** @var string State text */ protected $state; /** @var string Title */ protected $title; protected $linkDisabled; abstract protected function fetchProblemsCount(); abstract protected function getUrl(); public function getProblemsCount() { if ($this->count === null) { try { $count = $this->fetchProblemsCount(); } catch (Exception $e) { Logger::debug($e); $this->count = 1; $this->setState(static::STATE_UNKNOWN); $this->setTitle($e->getMessage()); return $this->count; } $this->count = $count; $this->setState(static::STATE_CRITICAL); } return $this->count; } /** * Set the state text * * @param string $state * * @return $this */ public function setState(string $state): self { $this->state = $state; return $this; } /** * Get the state text * * @return string */ public function getState(): string { if ($this->state === null) { throw new \LogicException( 'You are accessing an unset property. Please make sure to set it beforehand.' ); } return $this->state; } /** * Set the title * * @param string $title * * @return $this */ public function setTitle(string $title): self { $this->title = $title; return $this; } /** * Get the title * * @return ?string */ public function getTitle() { return $this->title; } public function render(?NavigationItem $item = null): string { if ($item === null) { $item = $this->getItem(); } $item->setCssClass('badge-nav-item icinga-module module-icingadb'); $html = new HtmlDocument(); $badge = $this->createBadge(); if ($badge !== null) { if ($this->linkDisabled) { $badge->addAttributes(['class' => 'disabled']); $this->setEscapeLabel(false); $label = $this->view()->escape($item->getLabel()); $item->setLabel($badge . $label); } else { $html->add(new Link($badge, $this->getUrl(), ['title' => $this->getTitle()])); } } return $html ->prepend(new HtmlString(parent::render($item))) ->render(); } protected function createBadge() { $count = $this->getProblemsCount(); if ($count) { return (new StateBadge($this->round($count), $this->getState())) ->addAttributes(['class' => 'badge', 'title' => $this->getTitle()]); } return null; } protected function round($count) { if ($count > 1000000) { $count = round($count, -6) / 1000000 . 'M'; } elseif ($count > 1000) { $count = round($count, -3) / 1000 . 'k'; } return $count; } public function disableLink() { $this->linkDisabled = true; return $this; } } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php000066400000000000000000000020231527064444300303240ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation\Renderer; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\ServicestateSummary; use ipl\Web\Url; class ServiceProblemsBadge extends ProblemsBadge { use Auth; protected function fetchProblemsCount() { $summary = ServicestateSummary::on($this->getDb()); $this->applyRestrictions($summary); $count = (int) $summary->first()->services_critical_unhandled; if ($count) { $this->setTitle(sprintf( tp('One unhandled service critical', '%d unhandled services critical', $count), $count )); } return $count; } protected function getUrl(): Url { return Links::services() ->setParams(['service.state.is_problem' => 'y', 'sort' => 'service.state.severity desc']); } } icingadb-web-1.5.0/library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php000066400000000000000000000034221527064444300300130ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Web\Navigation\Renderer; use Icinga\Web\Navigation\Renderer\BadgeNavigationItemRenderer; class TotalProblemsBadge extends BadgeNavigationItemRenderer { /** * Cached count * * @var int */ protected $count; /** * State to severity map * * @var array */ protected static $stateSeverityMap = [ self::STATE_OK => 0, self::STATE_PENDING => 1, self::STATE_UNKNOWN => 2, self::STATE_WARNING => 3, self::STATE_CRITICAL => 4, ]; /** * Severity to state map * * @var array */ protected static $severityStateMap = [ self::STATE_OK, self::STATE_PENDING, self::STATE_UNKNOWN, self::STATE_WARNING, self::STATE_CRITICAL ]; public function getCount() { if ($this->count === null) { $countMap = array_fill(0, 5, 0); $maxSeverity = 0; foreach ($this->getItem()->getChildren() as $child) { $renderer = $child->getRenderer(); if ($renderer instanceof ProblemsBadge) { $count = $renderer->getProblemsCount(); if ($count) { $severity = static::$stateSeverityMap[$renderer->getState()]; $countMap[$severity] += $count; $maxSeverity = max($maxSeverity, $severity); } } } $this->count = $countMap[$maxSeverity]; $this->state = static::$severityStateMap[$maxSeverity]; } return $this->count; } } icingadb-web-1.5.0/library/Icingadb/Widget/000077500000000000000000000000001527064444300204305ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Widget/CheckAttempt.php000066400000000000000000000027021527064444300235160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Html\FormattedString; use ipl\Web\Widget\Ball; /** * Visually represents the check attempts taken out of max check attempts. */ class CheckAttempt extends BaseHtmlElement { protected $tag = 'div'; protected $defaultAttributes = ['class' => 'check-attempt']; /** @var int Current attempt */ protected $attempt; /** @var int Max check attempts */ protected $maxAttempts; /** * Create a new check attempt widget * * @param int $attempt Current check attempt * @param int $maxAttempts Max check attempts */ public function __construct(int $attempt, int $maxAttempts) { $this->attempt = $attempt; $this->maxAttempts = $maxAttempts; } protected function assemble() { if ($this->attempt == $this->maxAttempts) { return; } if ($this->maxAttempts > 5) { $this->add(FormattedString::create('%d/%d', $this->attempt, $this->maxAttempts)); } else { for ($i = 0; $i < $this->attempt; ++$i) { $this->add(new Ball(Ball::SIZE_SMALL)); } for ($i = $this->attempt; $i < $this->maxAttempts; ++$i) { $this->add(new Ball(Ball::SIZE_TINY)); } } } } icingadb-web-1.5.0/library/Icingadb/Widget/DependencyNodeStateBadges.php000066400000000000000000000015271527064444300261410ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\StateBadges; /** * State badges for the dependency nodes */ class DependencyNodeStateBadges extends StateBadges { protected function getType(): string { return 'nodes'; } protected function getPrefix(): string { return 'nodes'; } protected function assemble(): void { $this->addAttributes(['class' => 'dependency-node-state-badges']); $this->add(array_filter([ $this->createGroup('problem'), $this->createGroup('warning'), $this->createGroup('unknown'), $this->createBadge('ok'), $this->createBadge('pending') ])); } } icingadb-web-1.5.0/library/Icingadb/Widget/DependencyNodeStatistics.php000066400000000000000000000032761527064444300261100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Widget\Detail\ObjectStatistics; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\Html\HtmlString; /** * Dependency node statistics */ class DependencyNodeStatistics extends ObjectStatistics { protected $summary; public function __construct($summary) { $this->summary = $summary; } protected function createDonut(): ValidHtml { $donut = (new Donut()) ->addSlice($this->summary->nodes_ok, ['class' => 'slice-state-ok']) ->addSlice($this->summary->nodes_warning_handled, ['class' => 'slice-state-warning-handled']) ->addSlice($this->summary->nodes_warning_unhandled, ['class' => 'slice-state-warning']) ->addSlice($this->summary->nodes_problem_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->nodes_problem_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->nodes_unknown_handled, ['class' => 'slice-state-unknown-handled']) ->addSlice($this->summary->nodes_unknown_unhandled, ['class' => 'slice-state-unknown']) ->addSlice($this->summary->nodes_pending, ['class' => 'slice-state-pending']); return HtmlString::create($donut->render()); } protected function createTotal(): ValidHtml { return Text::create($this->shortenAmount($this->summary->nodes_total)); } protected function createBadges(): ValidHtml { return new DependencyNodeStateBadges($this->summary); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/000077500000000000000000000000001527064444300216325ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Widget/Detail/AlertDetail.php000066400000000000000000000057611527064444300245460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Model\AlertHistory; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Web\Widget\Icon; class AlertDetail extends BaseHtmlElement { use HostLink; use ServiceLink; use Translation; protected $tag = 'div'; protected $defaultAttributes = ['class' => 'alert-detail']; public function __construct(protected AlertHistory $alert) { } protected function assemble() { $message = new HtmlElement( 'div', Attributes::create(['class' => ['alert-message', 'collapsible'], 'data-visible-height' => 200]), Text::create($this->alert->event_message) ); CopyToClipboard::attachTo($message); $eventInfo = [ new HtmlElement('h2', null, Text::create($this->translate('Event Info'))), new HorizontalKeyValue( $this->translate('Triggered On'), DateFormatter::formatDateTime($this->alert->triggered_at->getTimestamp()) ), new HorizontalKeyValue( $this->translate('Channel'), $this->alert->channel_name ?? new EmptyState($this->translate('N/A')) ), new HorizontalKeyValue( $this->translate('Recipient'), isset($this->alert->contact_name) ? [new Icon(Icons::USER), $this->alert->contact_name] : new EmptyState($this->translate('N/A')) ) ]; if (isset($this->alert->contactgroup_name)) { $eventInfo[] = new HorizontalKeyValue( $this->translate('Contact Group'), [new Icon(Icons::USERGROUP), $this->alert->contactgroup_name] ); } elseif (isset($this->alert->schedule_name)) { $eventInfo[] = new HorizontalKeyValue( $this->translate('Schedule'), [new Icon(Icons::SCHEDULE), $this->alert->schedule_name] ); } $eventInfo[] = isset($this->alert->service->id) ? new HorizontalKeyValue( $this->translate('Service'), $this->createServiceLink($this->alert->service, $this->alert->host, true) ) : new HorizontalKeyValue($this->translate('Host'), $this->createHostLink($this->alert->host, true)); $this->addHtml( new HtmlElement('h2', null, Text::create($this->translate('Message'))), $message, ...$eventInfo ); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/CheckStatistics.php000066400000000000000000000340611527064444300254370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Widget\CheckAttempt; use Icinga\Util\Format; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\FormattedString; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Web\Common\Card; use ipl\Web\Widget\EmptyState; use ipl\Web\Compat\StyleWithNonce; use ipl\Web\Widget\TimeAgo; use ipl\Web\Widget\TimeSince; use ipl\Web\Widget\TimeUntil; use ipl\Web\Widget\VerticalKeyValue; class CheckStatistics extends Card { public const TOP_LEFT_BUBBLE_FLAG = <<<'SVG' SVG; public const TOP_RIGHT_BUBBLE_FLAG = <<<'SVG' SVG; protected $object; protected $tag = 'div'; protected $defaultAttributes = ['class' => ['progress-bar', 'check-statistics']]; public function __construct($object) { $this->object = $object; } protected function assembleBody(BaseHtmlElement $body) { $styleElement = (new StyleWithNonce()) ->setModule('icingadb'); $hPadding = 10; $durationScale = 80; $checkInterval = $this->getCheckInterval(); $timeline = new HtmlElement('div', Attributes::create(['class' => ['check-timeline', 'timeline']])); $above = new HtmlElement('ul', Attributes::create(['class' => 'above'])); $below = new HtmlElement('ul', Attributes::create(['class' => 'below'])); $progressBar = new HtmlElement('div', Attributes::create(['class' => 'bar'])); $overdueBar = null; $now = time(); $executionTime = ($this->object->state->execution_time / 1000) + ($this->object->state->latency / 1000); $nextCheckTime = $this->object->state->next_check !== null && ! $this->isChecksDisabled() ? $this->object->state->next_check->getTimestamp() : null; if ($this->object->state->is_overdue) { $nextCheckTime = $this->object->state->next_update->getTimestamp(); $durationScale = 60; $overdueBar = new HtmlElement( 'div', Attributes::create(['class' => 'timeline-overlay']), new HtmlElement('div', Attributes::create(['class' => 'now'])) ); $above->addHtml(new HtmlElement( 'li', Attributes::create(['class' => 'now']), new HtmlElement( 'div', Attributes::create(['class' => 'bubble']), new HtmlElement('strong', null, Text::create(t('Now'))) ) )); $this->getAttributes()->add('class', 'check-overdue'); } else { $progressBar->addHtml(new HtmlElement('div', Attributes::create(['class' => 'now']))); } if ($nextCheckTime !== null && ! $this->object->state->is_overdue && $nextCheckTime < $now) { // If the next check is already in the past but not overdue, it means the check is probably running. // Icinga only updates the state once the check reports a result, that's why we have to simulate the // execution start and end time, as well as the next check time. $lastUpdateTime = $nextCheckTime; $nextCheckTime = $this->object->state->next_update->getTimestamp() - $executionTime; $executionEndTime = $lastUpdateTime + $executionTime; } else { $lastUpdateTime = $this->object->state->last_update !== null ? $this->object->state->last_update->getTimestamp() - $executionTime : null; $executionEndTime = $this->object->state->last_update !== null ? $this->object->state->last_update->getTimestamp() : null; } if ($this->object->state->is_overdue) { $leftNow = 100; } elseif ($nextCheckTime === null) { $leftNow = 0; } elseif (! $this->object->state->is_reachable && time() - $executionEndTime > $checkInterval * 2) { // We have no way of knowing whether the dependency pauses check scheduling. // The only way to detect this, is to measure how old the last update is. $nextCheckTime = null; $leftNow = 0; } elseif ($nextCheckTime - $lastUpdateTime <= 0) { $leftNow = 0; } else { $leftNow = 100 * (1 - ($nextCheckTime - time()) / ($nextCheckTime - $lastUpdateTime)); if ($leftNow > 100) { $leftNow = 100; } elseif ($leftNow < 0) { $leftNow = 0; } } $styleElement->addFor($progressBar, ['width' => sprintf('%F%%', $leftNow)]); $leftExecutionEnd = $nextCheckTime !== null && $nextCheckTime - $lastUpdateTime > 0 ? $durationScale * ( 1 - ($nextCheckTime - $executionEndTime) / ($nextCheckTime - $lastUpdateTime) ) : 0; $markerLast = new HtmlElement('div', Attributes::create([ 'class' => ['highlighted', 'marker', 'left'], 'title' => $lastUpdateTime !== null ? DateFormatter::formatDateTime($lastUpdateTime) : null ])); $markerNext = new HtmlElement('div', Attributes::create([ 'class' => ['highlighted', 'marker', 'right'], 'title' => $nextCheckTime !== null ? DateFormatter::formatDateTime($nextCheckTime) : null ])); $markerExecutionEnd = new HtmlElement('div', Attributes::create(['class' => ['highlighted', 'marker']])); $styleElement->addFor($markerExecutionEnd, [ 'left' => sprintf('%F%%', $hPadding + $leftExecutionEnd) ]); $progress = new HtmlElement('div', Attributes::create([ 'class' => ['progress', time() < $executionEndTime ? 'running' : null] ]), $progressBar); if ($nextCheckTime !== null) { $progress->addAttributes([ 'data-animate-progress' => true, 'data-start-time' => $lastUpdateTime, 'data-end-time' => $nextCheckTime, 'data-switch-after' => $executionTime, 'data-switch-class' => 'running' ]); } $timeline->addHtml( $progress, $markerLast, $markerExecutionEnd, $markerNext )->add($overdueBar); $executionStart = new HtmlElement( 'li', Attributes::create(['class' => 'left']), new HtmlElement( 'div', Attributes::create(['class' => ['bubble', 'upwards', 'top-right-aligned']]), new VerticalKeyValue( t('Execution Start'), $lastUpdateTime ? new TimeAgo($lastUpdateTime) : t('PENDING') ), HtmlString::create(self::TOP_RIGHT_BUBBLE_FLAG) ) ); $executionEnd = new HtmlElement( 'li', Attributes::create(['class' => 'positioned']), new HtmlElement( 'div', Attributes::create(['class' => ['bubble', 'upwards', 'top-left-aligned']]), new VerticalKeyValue( t('Execution End'), $executionEndTime !== null ? ($executionEndTime > $now ? new TimeUntil($executionEndTime) : new TimeAgo($executionEndTime)) : t('PENDING') ), HtmlString::create(self::TOP_LEFT_BUBBLE_FLAG) ) ); $styleElement->addFor($executionEnd, ['left' => sprintf('%F%%', $hPadding + $leftExecutionEnd)]); $intervalLine = new HtmlElement( 'li', Attributes::create(['class' => 'interval-line']), new VerticalKeyValue(t('Interval'), Format::seconds($checkInterval)) ); $styleElement->addFor($intervalLine, [ 'left' => sprintf('%F%%', $hPadding + $leftExecutionEnd), 'width' => sprintf('%F%%', $durationScale - $leftExecutionEnd) ]); $executionLine = new HtmlElement( 'li', Attributes::create(['class' => ['interval-line', 'execution-line']]), new VerticalKeyValue( sprintf('%s / %s', t('Execution Time'), t('Latency')), FormattedString::create( '%s / %s', $this->object->state->execution_time !== null ? Format::seconds($this->object->state->execution_time / 1000) : (new EmptyState(t('n. a.')))->setTag('span'), $this->object->state->latency !== null ? Format::seconds($this->object->state->latency / 1000) : (new EmptyState(t('n. a.')))->setTag('span') ) ) ); $styleElement->addFor($executionLine, [ 'left' => sprintf('%F%%', $hPadding), 'width' => sprintf('%F%%', $leftExecutionEnd) ]); if ($executionEndTime !== null) { $executionLine->addHtml(new HtmlElement('div', Attributes::create(['class' => 'start']))); $executionLine->addHtml(new HtmlElement('div', Attributes::create(['class' => 'end']))); } if ($this->isChecksDisabled()) { $nextCheckBubbleContent = new VerticalKeyValue( t('Next Check'), t('n.a') ); $this->addAttributes(['class' => 'checks-disabled']); } else { $nextCheckBubbleContent = $this->object->state->is_overdue ? new VerticalKeyValue(t('Overdue'), new TimeSince($nextCheckTime)) : new VerticalKeyValue( t('Next Check'), $nextCheckTime !== null ? ($nextCheckTime > $now ? new TimeUntil($nextCheckTime) : new TimeAgo($nextCheckTime)) : t('PENDING') ); } $nextCheck = new HtmlElement( 'li', Attributes::create(['class' => 'right']), new HtmlElement( 'div', Attributes::create(['class' => ['bubble', 'upwards']]), $nextCheckBubbleContent ) ); $above->addHtml($executionLine); $below->addHtml( $executionStart, $executionEnd, $intervalLine, $nextCheck ); $body->addHtml($above, $timeline, $below, $styleElement); } /** * Checks if both active and passive checks are disabled * * @return bool */ protected function isChecksDisabled(): bool { return ! ($this->object->active_checks_enabled || $this->object->passive_checks_enabled); } protected function assembleHeader(BaseHtmlElement $header) { $checkSource = (new EmptyState(t('n. a.')))->setTag('span'); if ($this->object->state->check_source) { $checkSource = Text::create($this->object->state->check_source); } $header->addHtml( new VerticalKeyValue(t('Command'), $this->object->checkcommand_name), new VerticalKeyValue( t('Scheduling Source'), $this->object->state->scheduling_source ?? (new EmptyState(t('n. a.')))->setTag('span') ) ); if ($this->object->timeperiod->id) { $header->addHtml(new VerticalKeyValue( t('Timeperiod'), $this->object->timeperiod->display_name ?? $this->object->timeperiod->name )); } $header->addHtml( new VerticalKeyValue( t('Attempts'), new CheckAttempt((int) $this->object->state->check_attempt, (int) $this->object->max_check_attempts) ), new VerticalKeyValue(t('Check Source'), $checkSource) ); } /** * Get the active `check_interval` OR `check_retry_interval` * * @return int */ protected function getCheckInterval(): int { if (! ($this->object->state->is_problem && $this->object->state->state_type === 'soft')) { return $this->object->check_interval; } $delay = ($this->object->state->execution_time + $this->object->state->latency / 1000) + 5; $interval = $this->object->state->next_check->getTimestamp() - $this->object->state->last_update->getTimestamp(); // In case passive check is used, the check_retry_interval has no effect. // Since there is no flag in the database to check if the passive check was triggered. // We have to manually check if the check_retry_interval matches the calculated interval. if ( $this->object->check_retry_interval - $delay <= $interval && $this->object->check_retry_interval + $delay >= $interval ) { return $this->object->check_retry_interval; } return $this->object->check_interval; } protected function assemble() { parent::assemble(); if ($this->isChecksDisabled()) { $this->addHtml(new HtmlElement( 'div', Attributes::create(['class' => 'checks-disabled-overlay']), new HtmlElement( 'strong', Attributes::create(['class' => 'notes']), Text::create(t('active and passive checks are disabled')) ) )); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/CommentDetail.php000066400000000000000000000107201527064444300250700ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Forms\Command\Object\DeleteCommentForm; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeUntil; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; class CommentDetail extends BaseHtmlElement { use Auth; use TicketLinks; protected $comment; protected $defaultAttributes = ['class' => ['object-detail', 'comment-detail']]; protected $tag = 'div'; public function __construct(Comment $comment) { $this->comment = $comment; } protected function createComment(): array { return [ Html::tag('h2', t('Comment')), new MarkdownText($this->createTicketLinks($this->comment->text)) ]; } protected function createDetails(): array { $details = []; if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { if ($this->comment->object_type === 'host') { $details[] = new HorizontalKeyValue(t('Host'), [ $this->comment->host->name, ' ', new StateBall($this->comment->host->state->getStateText()) ]); } else { $details[] = new HorizontalKeyValue(t('Service'), Html::sprintf( t('%s on %s', ' on '), [$this->comment->service->name, ' ', new StateBall($this->comment->service->state->getStateText())], $this->comment->host->name )); } $details[] = new HorizontalKeyValue(t('Author'), $this->comment->author); $details[] = new HorizontalKeyValue( t('Acknowledgement'), $this->comment->entry_type === 'ack' ? t('Yes') : t('No') ); $details[] = new HorizontalKeyValue( t('Persistent'), $this->comment->is_persistent ? t('Yes') : t('No') ); $details[] = new HorizontalKeyValue( t('Created'), DateFormatter::formatDateTime($this->comment->entry_time->getTimestamp()) ); $details[] = new HorizontalKeyValue(t('Expires'), $this->comment->expire_time !== null ? DateFormatter::formatDateTime($this->comment->expire_time->getTimestamp()) : t('Never')); } else { if ($this->comment->expire_time !== null) { $details[] = Html::tag( 'p', Html::sprintf( $this->comment->entry_type === 'ack' ? t('This acknowledgement expires %s.', '..') : t('This comment expires %s.', '..'), new TimeUntil($this->comment->expire_time->getTimestamp()) ) ); } if ($this->comment->is_sticky) { $details[] = Html::tag('p', t('This acknowledgement is sticky.')); } } if (! empty($details)) { array_unshift($details, Html::tag('h2', t('Details'))); } return $details; } protected function createRemoveCommentForm() { if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { return null; } $action = Links::commentsDelete(); $action->setFilter(Filter::equal('comment.name', $this->comment->name)); return (new DeleteCommentForm()) ->setObjects([$this->comment]) ->setAction($action->getAbsoluteUrl()); } protected function assemble() { $this->add($this->createComment()); $details = $this->createDetails(); if (! empty($details)) { $this->add($details); } if ( $this->isGrantedOn( 'icingadb/command/comment/delete', $this->comment->{$this->comment->object_type} ) ) { $this->add($this->createRemoveCommentForm()); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/CustomVarTable.php000066400000000000000000000151751527064444300252470ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Hook\CustomVarRendererHook; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use Closure; class CustomVarTable extends BaseHtmlElement { /** @var array The variables */ protected $data; /** @var ?Model The object the variables are bound to */ protected $object; /** @var Closure Callback to apply hooks */ protected $hookApplier; /** @var array The groups as identified by hooks */ protected $groups = []; /** @var string Header title */ protected $headerTitle; /** @var int The nesting level */ protected $level = 0; protected $tag = 'table'; /** @var HtmlElement The table body */ protected $body; protected $defaultAttributes = [ 'class' => ['custom-var-table', 'name-value-table'] ]; /** * Create a new CustomVarTable * * @param iterable $data * @param ?Model $object */ public function __construct($data, ?Model $object = null) { $this->data = $data; $this->object = $object; $this->body = new HtmlElement('tbody'); } /** * Set the header to show * * @param string $title * * @return $this */ protected function setHeader(string $title): self { $this->headerTitle = $title; return $this; } /** * Add a new row to the body * * @param mixed $name * @param mixed $value * * @return void */ protected function addRow($name, $value) { $this->body->addHtml(new HtmlElement( 'tr', Attributes::create(['class' => "level-{$this->level}"]), new HtmlElement('th', null, Html::wantHtml($name)), new HtmlElement('td', null, Html::wantHtml($value)) )); } /** * Render a variable * * @param mixed $name * @param mixed $value * * @return void */ protected function renderVar($name, $value) { if ($this->object !== null && $this->level === 0) { list($name, $value, $group) = call_user_func($this->hookApplier, $name, $value); if ($group !== null) { $this->groups[$group][] = [$name, $value]; return; } } $isArray = is_array($value); switch (true) { case $isArray && is_int(key($value)): $this->renderArray($name, $value); break; case $isArray: $this->renderObject($name, $value); break; default: $this->renderScalar($name, $value); } } /** * Render an array * * @param string $name * @param array $array * * @return void */ protected function renderArray($name, array $array) { $numItems = count($array); $name = (new HtmlDocument())->addHtml( Html::wantHtml($name), Text::create(' (Array)') ); $this->addRow($name, sprintf(tp('%d item', '%d items', $numItems), $numItems)); ++$this->level; ksort($array); foreach ($array as $key => $value) { $this->renderVar("[$key]", $value); } --$this->level; } /** * Render an object (associative array) * * @param mixed $name * @param array $object * * @return void */ protected function renderObject($name, array $object) { $numItems = count($object); $this->addRow($name, sprintf(tp('%d item', '%d items', $numItems), $numItems)); ++$this->level; ksort($object); foreach ($object as $key => $value) { $this->renderVar($key, $value); } --$this->level; } /** * Render a scalar * * @param mixed $name * @param mixed $value * * @return void */ protected function renderScalar($name, $value) { if ($value === '') { $value = new EmptyState(t('empty string')); } $this->addRow($name, $value); } /** * Render a group * * @param string $name * @param iterable $entries * * @return void */ protected function renderGroup(string $name, $entries) { $table = new self($entries); $wrapper = $this->getWrapper(); if ($wrapper === null) { $wrapper = new HtmlDocument(); $wrapper->addHtml($this); $this->prependWrapper($wrapper); } $wrapper->addHtml($table->setHeader($name)); } protected function assemble() { if ($this->object !== null) { $this->hookApplier = CustomVarRendererHook::prepareForObject($this->object); } if ($this->headerTitle !== null) { $this->getAttributes() ->add('class', 'collapsible') ->add('data-visible-height', 0) ->add('data-state-collapses', true) ->add('data-toggle-element', 'thead') ->add( 'id', preg_replace('/\s+/', '-', strtolower($this->headerTitle)) . '-customvars' ); $this->addHtml(new HtmlElement('thead', null, new HtmlElement( 'tr', null, new HtmlElement( 'th', Attributes::create(['colspan' => 2]), new HtmlElement( 'span', null, new Icon('angle-right'), new Icon('angle-down') ), Text::create($this->headerTitle) ) ))); } if (is_array($this->data)) { ksort($this->data); } foreach ($this->data as $name => $value) { $this->renderVar($name, $value); } $this->addHtml($this->body); // Hooks can return objects as replacement for keys, hence a generator is needed for group entries $genGenerator = function ($entries) { foreach ($entries as list($key, $value)) { yield $key => $value; } }; foreach ($this->groups as $group => $entries) { $this->renderGroup($group, $genGenerator($entries)); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/DowntimeCard.php000066400000000000000000000224251527064444300247300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Model\Downtime; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Web\Compat\StyleWithNonce; use ipl\Web\Widget\TimeAgo; use ipl\Web\Widget\TimeUntil; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; class DowntimeCard extends BaseHtmlElement { protected $downtime; protected $duration; protected $defaultAttributes = ['class' => 'progress-bar downtime-progress']; protected $tag = 'div'; protected $start; protected $end; public function __construct(Downtime $downtime) { $this->downtime = $downtime; $this->start = $this->downtime->scheduled_start_time->getTimestamp(); $this->end = $this->downtime->scheduled_end_time->getTimestamp(); if ($this->downtime->end_time && $this->downtime->end_time > $this->downtime->scheduled_end_time) { $this->duration = $this->downtime->end_time->getTimestamp() - $this->start; } else { $this->duration = $this->end - $this->start; } } protected function assemble() { $styleElement = (new StyleWithNonce()) ->setModule('icingadb'); $timeline = Html::tag('div', ['class' => 'downtime-timeline timeline']); $hPadding = 10; $above = Html::tag('ul', ['class' => 'above']); $below = Html::tag('ul', ['class' => 'below']); $markerStart = new HtmlElement('div', Attributes::create(['class' => ['marker' , 'left']])); $markerEnd = new HtmlElement('div', Attributes::create(['class' => ['marker', 'right']])); $timelineProgress = null; $flexProgress = null; $markerFlexStart = null; $markerFlexEnd = null; if ($this->end < time()) { $endTime = new TimeAgo($this->end); } else { $endTime = new TimeUntil($this->end); } if ($this->downtime->is_flexible && $this->downtime->is_in_effect) { $this->addAttributes(['class' => 'flexible in-effect']); $flexStartLeft = $hPadding + $this->calcRelativeLeft($this->downtime->start_time->getTimestamp()); $flexEndLeft = $hPadding + $this->calcRelativeLeft($this->downtime->end_time->getTimestamp()); $evade = false; if ($flexEndLeft - $flexStartLeft < 2) { $flexStartLeft -= 1; $flexEndLeft += 1; if ($flexEndLeft > $hPadding + $this->calcRelativeLeft($this->end)) { $flexEndLeft = $hPadding + $this->calcRelativeLeft($this->end) - .5; $flexStartLeft = $flexEndLeft - 2; } if ($flexStartLeft < $hPadding + $this->calcRelativeLeft($this->start)) { $flexStartLeft = $hPadding + $this->calcRelativeLeft($this->start) + .5; $flexEndLeft = $flexStartLeft + 2; } $evade = true; } $markerFlexStart = new HtmlElement('div', Attributes::create(['class' => ['highlighted', 'marker']])); $markerFlexEnd = new HtmlElement('div', Attributes::create(['class' => ['highlighted', 'marker']])); $styleElement ->addFor($markerFlexStart, ['left' => sprintf('%F%%', $flexStartLeft)]) ->addFor($markerFlexEnd, ['left' => sprintf('%F%%', $flexEndLeft)]); $scheduledEndBubble = new HtmlElement( 'li', new Attributes(['class' => 'right']), new HtmlElement( 'div', Attributes::create(['class' => ['bubble', 'upwards']]), new VerticalKeyValue(t('Scheduled End'), $endTime) ) ); $timelineProgress = new HtmlElement('div', Attributes::create([ 'class' => ['progress', 'downtime-elapsed'], 'data-animate-progress' => true, 'data-start-time' => ((float) $this->downtime->start_time->format('U.u')), 'data-end-time' => ((float) $this->downtime->end_time->format('U.u')) ]), new HtmlElement( 'div', Attributes::create(['class' => 'bar']), new HtmlElement('div', Attributes::create(['class' => 'now'])) )); $styleElement->addFor($timelineProgress, [ 'left' => sprintf('%F%%', $flexStartLeft), 'width' => sprintf('%F%%', $flexEndLeft - $flexStartLeft) ]); $styleElement ->addFor($markerEnd, [ 'left' => sprintf('%F%%', $hPadding + $this->calcRelativeLeft($this->end)) ]) ->addFor($scheduledEndBubble, [ 'right' => sprintf( '%F%%', 100 - ($hPadding + $this->calcRelativeLeft($this->end)) ) ]); $below->add([ Html::tag( 'li', ['class' => 'left'], Html::tag( 'div', ['class' => ['bubble', 'upwards']], new VerticalKeyValue(t('Scheduled Start'), new TimeAgo($this->start)) ) ), $scheduledEndBubble ]); $aboveStart = Html::tag('li', ['class' => 'positioned'], Html::tag( 'div', ['class' => ['bubble', ($evade ? 'left-aligned' : null)]], new VerticalKeyValue(t('Start'), new TimeAgo($this->downtime->start_time->getTimestamp())) )); $aboveEnd = Html::tag('li', ['class' => 'positioned'], Html::tag( 'div', ['class' => ['bubble', ($evade ? 'right-aligned' : null)]], new VerticalKeyValue(t('End'), new TimeUntil($this->downtime->end_time->getTimestamp())) )); $styleElement ->addFor($aboveStart, ['right' => sprintf('%F%%', 100 - $flexStartLeft)]) ->addFor($aboveEnd, ['right' => sprintf('%F%%', 100 - $flexEndLeft)]); $above->add([$aboveStart, $aboveEnd, $styleElement]); } elseif ($this->downtime->is_flexible) { $this->addAttributes(['class' => 'flexible']); $below->add([ Html::tag( 'li', ['class' => 'left'], Html::tag( 'div', ['class' => ['bubble', 'upwards']], new VerticalKeyValue( t('Scheduled Start'), time() > $this->start ? new TimeAgo($this->start) : new TimeUntil($this->start) ) ) ), Html::tag( 'li', ['class' => 'right'], Html::tag( 'div', ['class' => ['bubble', 'upwards']], new VerticalKeyValue(t('Scheduled End'), $endTime) ) ) ]); $above = null; } else { if (time() >= $this->start) { $timelineProgress = new HtmlElement('div', Attributes::create([ 'class' => ['progress', 'downtime-elapsed'], 'data-animate-progress' => true, 'data-start-time' => $this->start, 'data-end-time' => $this->end ]), new HtmlElement( 'div', Attributes::create(['class' => 'bar']), new HtmlElement('div', Attributes::create(['class' => 'now'])) )); } $below->add([ Html::tag( 'li', ['class' => 'left'], Html::tag( 'div', ['class' => 'bubble upwards'], new VerticalKeyValue( t('Start'), time() >= $this->start ? new TimeAgo($this->start) : new TimeUntil($this->start) ) ) ), Html::tag( 'li', ['class' => 'right'], Html::tag( 'div', ['class' => 'bubble upwards'], new VerticalKeyValue(t('End'), new TimeUntil($this->end)) ) ) ]); $above = null; } $timeline->add([ $timelineProgress, $flexProgress, $markerStart, $markerEnd, $markerFlexStart, $markerFlexEnd ]); $this->add([ $above, $timeline, $below ]); } protected function calcRelativeLeft($value) { return round(($value - $this->start) / $this->duration * 80, 2); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/DowntimeDetail.php000066400000000000000000000166331527064444300252650ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Date\DateFormatter as WebDateFormatter; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Forms\Command\Object\DeleteDowntimeForm; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Html\TemplateString; use ipl\Html\Text; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; class DowntimeDetail extends BaseHtmlElement { use Auth; use Database; use HostLink; use ServiceLink; /** @var BaseHtmlElement */ protected $control; /** @var Downtime */ protected $downtime; protected $defaultAttributes = ['class' => ['object-detail', 'downtime-detail']]; protected $tag = 'div'; public function __construct(Downtime $downtime) { $this->downtime = $downtime; } protected function createCancelDowntimeForm() { $action = Links::downtimesDelete(); $action->setFilter(Filter::equal('downtime.name', $this->downtime->name)); return (new DeleteDowntimeForm()) ->setObjects([$this->downtime]) ->setAction($action->getAbsoluteUrl()); } protected function createTimeline(): DowntimeCard { return new DowntimeCard($this->downtime); } protected function assemble() { $this->add(Html::tag('h2', t('Comment'))); $this->add(Html::tag('div', [ new Icon('user'), Html::sprintf( t('%s commented: %s', ' ..: '), $this->downtime->author, new MarkdownText($this->downtime->comment) ) ])); $this->add(Html::tag('h2', t('Details'))); if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { $this->addHtml(new HorizontalKeyValue( t('Type'), $this->downtime->is_flexible ? t('Flexible') : t('Fixed') )); if ($this->downtime->object_type === 'host') { $this->addHtml(new HorizontalKeyValue(t('Host'), [ $this->downtime->host->name, ' ', new StateBall($this->downtime->host->state->getStateText()) ])); } else { $this->addHtml(new HorizontalKeyValue(t('Service'), Html::sprintf( t('%s on %s', ' on '), [ $this->downtime->service->name, ' ', new StateBall($this->downtime->service->state->getStateText()) ], $this->downtime->host->name ))); } } if ($this->downtime->triggered_by_id !== null || $this->downtime->parent_id !== null) { if ($this->downtime->triggered_by_id !== null) { $label = t('Triggered By'); $relatedDowntime = $this->downtime->triggered_by; } else { $label = t('Parent'); $relatedDowntime = $this->downtime->parent; } $this->addHtml(new HorizontalKeyValue( $label, HtmlElement::create('span', ['class' => 'accompanying-text'], TemplateString::create( $relatedDowntime->is_flexible ? t('{{#link}}Flexible Downtime{{/link}} for %s') : t('{{#link}}Fixed Downtime{{/link}} for %s'), ['link' => new Link(null, Links::downtime($relatedDowntime), ['class' => 'subject'])], ($relatedDowntime->object_type === 'host' ? $this->createHostLink($relatedDowntime->host, true) : $this->createServiceLink($relatedDowntime->service, $relatedDowntime->host, true)) )) )); } $this->add(new HorizontalKeyValue( t('Created'), WebDateFormatter::formatDateTime($this->downtime->entry_time->getTimestamp()) )); $this->add(new HorizontalKeyValue( t('Start time'), $this->downtime->start_time ? WebDateFormatter::formatDateTime($this->downtime->start_time->getTimestamp()) : new EmptyState(t('Not started yet')) )); $this->add(new HorizontalKeyValue( t('End time'), $this->downtime->end_time ? WebDateFormatter::formatDateTime($this->downtime->end_time->getTimestamp()) : new EmptyState(t('Not started yet')) )); $this->add(new HorizontalKeyValue( t('Scheduled Start'), WebDateFormatter::formatDateTime($this->downtime->scheduled_start_time->getTimestamp()) )); $this->add(new HorizontalKeyValue( t('Scheduled End'), WebDateFormatter::formatDateTime($this->downtime->scheduled_end_time->getTimestamp()) )); $this->add(new HorizontalKeyValue( t('Scheduled Duration'), DateFormatter::formatDuration($this->downtime->scheduled_duration / 1000) )); if ($this->downtime->is_flexible) { $this->add(new HorizontalKeyValue( t('Flexible Duration'), DateFormatter::formatDuration($this->downtime->flexible_duration / 1000) )); } $query = Downtime::on($this->getDb())->with([ 'host', 'host.state', 'service', 'service.host', 'service.host.state', 'service.state' ]) ->limit(3) ->filter(Filter::equal('parent_id', $this->downtime->id)) ->orFilter(Filter::equal('triggered_by_id', $this->downtime->id)); $this->applyRestrictions($query); $children = $query->peekAhead()->execute(); if ($children->hasResult()) { $this->addHtml( new HtmlElement('h2', null, Text::create(t('Children'))), new ObjectList($children), (new ShowMore($children, Links::downtimes()->setQueryString( QueryString::render(Filter::any( Filter::equal('downtime.parent.name', $this->downtime->name), Filter::equal('downtime.triggered_by.name', $this->downtime->name) )) )))->setBaseTarget('_next') ); } $this->add(Html::tag('h2', t('Progress'))); $this->add($this->createTimeline()); if ( getenv('ICINGAWEB_EXPORT_FORMAT') !== 'pdf' && $this->isGrantedOn( 'icingadb/command/downtime/delete', $this->downtime->{$this->downtime->object_type} ) ) { $this->add($this->createCancelDowntimeForm()); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/EventDetail.php000066400000000000000000000745061527064444300245630ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use DateTime; use DateTimeZone; use Icinga\Application\Config; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\HostLink; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\TicketLinks; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Widget\ItemList\AlertList; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLink; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Model\AcknowledgementHistory; use Icinga\Module\Icingadb\Model\CommentHistory; use Icinga\Module\Icingadb\Model\DowntimeHistory; use Icinga\Module\Icingadb\Model\FlappingHistory; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\StateHistory; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use ipl\Html\BaseHtmlElement; use ipl\Html\FormattedString; use ipl\Html\HtmlElement; use ipl\Html\TemplateString; use ipl\Html\Text; use ipl\Orm\ResultSet; use ipl\Stdlib\Filter; use ipl\Stdlib\Str; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; use ipl\Web\Widget\StateBall; class EventDetail extends BaseHtmlElement { use Auth; use Database; use HostLink; use ServiceLink; use TicketLinks; protected $tag = 'div'; protected $defaultAttributes = ['class' => 'object-detail']; /** @var History */ protected $event; public function __construct(History $event) { $this->event = $event; } protected function assembleNotificationEvent(NotificationHistory $notification) { $pluginOutput = []; $commandName = $notification->object_type === 'host' ? $this->event->host->checkcommand_name : $this->event->service->checkcommand_name; if (isset($commandName)) { if (empty($notification->text)) { $notificationText = new EmptyState(t('Output unavailable.')); } else { $notificationText = new PluginOutputContainer( (new PluginOutput($notification->text)) ->setCommandName($notification->object_type === 'host' ? $this->event->host->checkcommand_name : $this->event->service->checkcommand_name) ->setCharacterLimit( (int) Config::module('icingadb') ->get('settings', 'plugin_output_character_limit', 10000) ) ); CopyToClipboard::attachTo($notificationText); } $pluginOutput = [ HtmlElement::create('h2', null, $notification->author ? t('Comment') : t('Plugin Output')), HtmlElement::create('div', [ 'id' => 'check-output-' . $commandName, 'class' => 'collapsible', 'data-visible-height' => 100 ], $notificationText) ]; } else { $pluginOutput[] = new EmptyState(t('Waiting for Icinga DB to synchronize the config.')); } if ($notification->object_type === 'host') { $objectKey = t('Host'); $objectInfo = HtmlElement::create('span', ['class' => 'accompanying-text'], [ HtmlElement::create('span', ['class' => 'state-change'], [ new StateBall(HostStates::text($notification->previous_hard_state), StateBall::SIZE_MEDIUM), new StateBall(HostStates::text($notification->state), StateBall::SIZE_MEDIUM) ]), ' ', HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ]); } else { $objectKey = t('Service'); $objectInfo = HtmlElement::create('span', ['class' => 'accompanying-text'], [ HtmlElement::create('span', ['class' => 'state-change'], [ new StateBall(ServiceStates::text($notification->previous_hard_state), StateBall::SIZE_MEDIUM), new StateBall(ServiceStates::text($notification->state), StateBall::SIZE_MEDIUM) ]), ' ', FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) ]); } $eventInfo = [ new HtmlElement('h2', null, Text::create(t('Event Info'))), new HorizontalKeyValue( t('Sent On'), isset($notification->send_time) ? DateFormatter::formatDateTime($notification->send_time->getTimestamp()) : new EmptyState(t('n. a.')) ) ]; if ($notification->author) { $eventInfo[] = (new HorizontalKeyValue(t('Sent by'), [ new Icon('user'), $notification->author ])); } $eventInfo[] = new HorizontalKeyValue(t('Type'), ucfirst(Str::camel($notification->type))); $eventInfo[] = new HorizontalKeyValue(t('State'), $notification->object_type === 'host' ? ucfirst(HostStates::text($notification->state)) : ucfirst(ServiceStates::text($notification->state))); $eventInfo[] = new HorizontalKeyValue($objectKey, $objectInfo); $notifiedUsers = [new HtmlElement('h2', null, Text::create(t('Notified Contacts')))]; if ($notification->users_notified === 0) { $notifiedUsers[] = new EmptyState(t('None', 'notified users: none')); } elseif (! $this->isPermittedRoute('contacts')) { $notifiedUsers[] = Text::create(sprintf(tp( 'This notification was sent to a single contact', 'This notification was sent to %d contacts', $notification->users_notified ), $notification->users_notified)); } elseif ($notification->users_notified > 0) { $users = $notification->user ->limit(5) ->peekAhead(); $users = $users->execute(); /** @var ResultSet $users */ $notifiedUsers[] = new ObjectList($users); $notifiedUsers[] = (new ShowMore( $users, Links::users()->addParams(['notification_history.id' => bin2hex($notification->id)]), sprintf(t('Show all %d recipients'), $notification->users_notified) ))->setBaseTarget('_next'); } $this->add(ObjectDetailExtensionHook::injectExtensions([ 0 => $pluginOutput, 200 => $eventInfo, 500 => $notifiedUsers, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function assembleStateChangeEvent(StateHistory $stateChange) { $pluginOutput = []; $commandName = $stateChange->object_type === 'host' ? $this->event->host->checkcommand_name : $this->event->service->checkcommand_name; if (isset($commandName)) { if (empty($stateChange->output) && empty($stateChange->long_output)) { $commandOutput = new EmptyState(t('Output unavailable.')); } else { $commandOutput = new PluginOutputContainer( (new PluginOutput($stateChange->output . "\n" . $stateChange->long_output)) ->setCommandName($commandName) ->setCharacterLimit( (int) Config::module('icingadb') ->get('settings', 'plugin_output_character_limit', 10000) ) ); CopyToClipboard::attachTo($commandOutput); } $pluginOutput = [ new HtmlElement('h2', null, Text::create(t('Plugin Output'))), HtmlElement::create('div', [ 'id' => 'check-output-' . $commandName, 'class' => 'collapsible', 'data-visible-height' => 100 ], $commandOutput) ]; } else { $pluginOutput[] = new EmptyState(t('Waiting for Icinga DB to synchronize the config.')); } if ($stateChange->object_type === 'host') { $objectKey = t('Host'); $objectState = $stateChange->state_type === 'hard' ? $stateChange->hard_state : $stateChange->soft_state; $objectInfo = HtmlElement::create('span', ['class' => 'accompanying-text'], [ HtmlElement::create('span', ['class' => 'state-change'], [ new StateBall(HostStates::text($stateChange->previous_soft_state), StateBall::SIZE_MEDIUM), new StateBall(HostStates::text($objectState), StateBall::SIZE_MEDIUM) ]), ' ', HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ]); } else { $objectKey = t('Service'); $objectState = $stateChange->state_type === 'hard' ? $stateChange->hard_state : $stateChange->soft_state; $objectInfo = HtmlElement::create('span', ['class' => 'accompanying-text'], [ HtmlElement::create('span', ['class' => 'state-change'], [ new StateBall(ServiceStates::text($stateChange->previous_soft_state), StateBall::SIZE_MEDIUM), new StateBall(ServiceStates::text($objectState), StateBall::SIZE_MEDIUM) ]), ' ', FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) ]); } $eventInfo = [ new HtmlElement('h2', null, Text::create(t('Event Info'))), new HorizontalKeyValue( t('Occurred On'), isset($stateChange->event_time) ? DateFormatter::formatDateTime($stateChange->event_time->getTimestamp()) : new EmptyState(t('n. a.')) ), new HorizontalKeyValue(t('Scheduling Source'), $stateChange->scheduling_source), new HorizontalKeyValue(t('Check Source'), $stateChange->check_source) ]; if ($stateChange->state_type === 'soft') { $eventInfo[] = new HorizontalKeyValue(t('Check Attempt'), sprintf( t('%d of %d'), $stateChange->check_attempt, $stateChange->max_check_attempts )); } $eventInfo[] = new HorizontalKeyValue( t('State'), $stateChange->object_type === 'host' ? ucfirst(HostStates::text($objectState)) : ucfirst(ServiceStates::text($objectState)) ); $eventInfo[] = new HorizontalKeyValue( t('State Type'), $stateChange->state_type === 'hard' ? t('Hard', 'state') : t('Soft', 'state') ); $eventInfo[] = new HorizontalKeyValue($objectKey, $objectInfo); $this->add(ObjectDetailExtensionHook::injectExtensions([ 0 => $pluginOutput, 200 => $eventInfo, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function assembleDowntimeEvent(DowntimeHistory $downtime) { $commentInfo = [ new HtmlElement('h2', null, Text::create(t('Comment'))), new MarkdownText($this->createTicketLinks($downtime->comment)) ]; $eventInfo = [new HtmlElement('h2', null, Text::create(t('Event Info')))]; if ($downtime->triggered_by_id !== null || $downtime->parent_id !== null) { if ($downtime->triggered_by_id !== null) { $label = t('Triggered By'); $relatedDowntime = $downtime->triggered_by; } else { $label = t('Parent'); $relatedDowntime = $downtime->parent; } $query = History::on($this->getDb()) ->columns('id') ->filter(Filter::equal('event_type', 'downtime_start')) ->filter(Filter::equal('history.downtime_history_id', $relatedDowntime->downtime_id)); $this->applyRestrictions($query); if (($relatedEvent = $query->first()) !== null) { /** @var History $relatedEvent */ $eventInfo[] = new HorizontalKeyValue( $label, HtmlElement::create('span', ['class' => 'accompanying-text'], TemplateString::create( $relatedDowntime->is_flexible ? t('{{#link}}Flexible Downtime{{/link}} for %s') : t('{{#link}}Fixed Downtime{{/link}} for %s'), ['link' => new Link(null, Links::event($relatedEvent), ['class' => 'subject'])], ($relatedDowntime->object_type === 'host' ? $this->createHostLink($relatedDowntime->host, true) : $this->createServiceLink($relatedDowntime->service, $relatedDowntime->host, true)) ->addAttributes(['class' => 'subject']) )) ); } } $eventInfo[] = $downtime->object_type === 'host' ? new HorizontalKeyValue(t('Host'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) )) : new HorizontalKeyValue(t('Service'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) )); $eventInfo[] = new HorizontalKeyValue( t('Entered On'), isset($downtime->entry_time) ? DateFormatter::formatDateTime($downtime->entry_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue(t('Author'), [new Icon('user'), $downtime->author]); // TODO: The following should be presented in a specific widget (maybe just like the downtime card) $eventInfo[] = new HorizontalKeyValue( t('Triggered On'), isset($downtime->trigger_time) ? DateFormatter::formatDateTime($downtime->trigger_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue( t('Scheduled Start'), isset($downtime->scheduled_start_time) ? DateFormatter::formatDateTime($downtime->scheduled_start_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue( t('Actual Start'), isset($downtime->start_time) ? DateFormatter::formatDateTime($downtime->start_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue( t('Scheduled End'), isset($downtime->scheduled_end_time) ? DateFormatter::formatDateTime($downtime->scheduled_end_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue( t('Actual End'), isset($downtime->end_time) ? DateFormatter::formatDateTime($downtime->end_time->getTimestamp()) : new EmptyState(t('n. a.')) ); if ($downtime->is_flexible) { $eventInfo[] = new HorizontalKeyValue(t('Flexible'), t('Yes')); $eventInfo[] = new HorizontalKeyValue( t('Duration'), DateFormatter::formatDuration($downtime->flexible_duration / 1000) ); } $cancelInfo = []; if ($downtime->has_been_cancelled && $downtime->cancel_time) { $cancelInfo = [ new HtmlElement('h2', null, Text::create(t('This downtime has been cancelled'))), new HorizontalKeyValue( t('Cancelled On'), DateFormatter::formatDateTime($downtime->cancel_time->getTimestamp()) ), new HorizontalKeyValue(t('Cancelled by'), [new Icon('user'), $downtime->cancelled_by]) ]; } $this->add(ObjectDetailExtensionHook::injectExtensions([ 200 => $commentInfo, 201 => $eventInfo, 600 => $cancelInfo, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function assembleCommentEvent(CommentHistory $comment) { $commentInfo = [ new HtmlElement('h2', null, Text::create(t('Comment'))), new MarkdownText($this->createTicketLinks($comment->comment)) ]; $eventInfo = [new HtmlElement('h2', null, Text::create(t('Event Info')))]; $eventInfo[] = $comment->object_type === 'host' ? new HorizontalKeyValue(t('Host'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) )) : new HorizontalKeyValue(t('Service'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) )); $eventInfo[] = new HorizontalKeyValue( t('Entered On'), isset($comment->entry_time) ? DateFormatter::formatDateTime($comment->entry_time->getTimestamp()) : new EmptyState(t('n. a.')) ); $eventInfo[] = new HorizontalKeyValue(t('Author'), [new Icon('user'), $comment->author]); $eventInfo[] = new HorizontalKeyValue( t('Expires On'), $comment->expire_time ? DateFormatter::formatDateTime($comment->expire_time->getTimestamp()) : new EmptyState(t('Never')) ); $tiedToAckInfo = []; if ($comment->entry_type === 'ack') { $tiedToAckInfo = [ new HtmlElement('h2', null, Text::create(t('This comment is tied to an acknowledgement'))), new HorizontalKeyValue(t('Sticky'), $comment->is_sticky ? t('Yes') : t('No')), new HorizontalKeyValue(t('Persistent'), $comment->is_persistent ? t('Yes') : t('No')) ]; } $removedInfo = []; if ($comment->has_been_removed && $comment->remove_time) { $removedInfo[] = new HtmlElement('h2', null, Text::create(t('This comment has been removed'))); if ($comment->removed_by) { $removedInfo[] = new HorizontalKeyValue( t('Removed On'), DateFormatter::formatDateTime($comment->remove_time->getTimestamp()) ); $removedInfo[] = new HorizontalKeyValue( t('Removed by'), [new Icon('user'), $comment->removed_by] ); } else { $removedInfo[] = new HorizontalKeyValue( t('Expired On'), DateFormatter::formatDateTime($comment->remove_time->getTimestamp()) ); } } $this->add(ObjectDetailExtensionHook::injectExtensions([ 200 => $commentInfo, 201 => $eventInfo, 500 => $tiedToAckInfo, 600 => $removedInfo, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function assembleFlappingEvent(FlappingHistory $flapping) { $eventInfo = [ new HtmlElement('h2', null, Text::create(t('Event Info'))), $flapping->object_type === 'host' ? new HorizontalKeyValue(t('Host'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) )) : new HorizontalKeyValue(t('Service'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) )), new HorizontalKeyValue( t('Started on'), isset($flapping->start_time) ? DateFormatter::formatDateTime($flapping->start_time->getTimestamp()) : new EmptyState(t('n. a.')) ) ]; if ($this->event->event_type === 'flapping_start') { $eventInfo[] = new HorizontalKeyValue(t('Reason'), sprintf( t('State change rate of %.2f%% exceeded the threshold (%.2f%%)'), $flapping->percent_state_change_start, $flapping->flapping_threshold_high )); } elseif ($flapping->end_time !== null) { $eventInfo[] = new HorizontalKeyValue( t('Ended on'), DateFormatter::formatDateTime($flapping->end_time->getTimestamp()) ); $eventInfo[] = new HorizontalKeyValue(t('Reason'), sprintf( t('State change rate of %.2f%% undercut the threshold (%.2f%%)'), $flapping->percent_state_change_end, $flapping->flapping_threshold_low )); } $this->add(ObjectDetailExtensionHook::injectExtensions([ 200 => $eventInfo, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function assembleAcknowledgeEvent(AcknowledgementHistory $acknowledgement) { $commentInfo = []; if ($acknowledgement->comment) { $commentInfo = [ new HtmlElement('h2', null, Text::create(t('Comment'))), new MarkdownText($this->createTicketLinks($acknowledgement->comment)) ]; } elseif (! isset($acknowledgement->author)) { $commentInfo[] = new EmptyState(t('This acknowledgement was set before Icinga DB history recording')); } $eventInfo = [ new HtmlElement('h2', null, Text::create(t('Event Info'))), new HorizontalKeyValue( t('Set on'), isset($acknowledgement->set_time) ? DateFormatter::formatDateTime($acknowledgement->set_time->getTimestamp()) : new EmptyState(t('n. a.')) ), new HorizontalKeyValue(t('Author'), $acknowledgement->author ? [new Icon('user'), $acknowledgement->author] : new EmptyState(t('n. a.'))), $acknowledgement->object_type === 'host' ? new HorizontalKeyValue(t('Host'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) )) : new HorizontalKeyValue(t('Service'), HtmlElement::create( 'span', ['class' => 'accompanying-text'], FormattedString::create( t('%s on %s', ' on '), HtmlElement::create('span', ['class' => 'subject'], $this->event->service->display_name), HtmlElement::create('span', ['class' => 'subject'], $this->event->host->display_name) ) )) ]; if ($this->event->event_type === 'ack_set') { $eventInfo[] = new HorizontalKeyValue( t('Expires On'), $acknowledgement->expire_time ? DateFormatter::formatDateTime($acknowledgement->expire_time->getTimestamp()) : new EmptyState(t('Never')) ); $eventInfo[] = new HorizontalKeyValue(t('Sticky'), isset($acknowledgement->is_sticky) ? ($acknowledgement->is_sticky ? t('Yes') : t('No')) : new EmptyState(t('n. a.'))); $eventInfo[] = new HorizontalKeyValue(t('Persistent'), isset($acknowledgement->is_persistent) ? ($acknowledgement->is_persistent ? t('Yes') : t('No')) : new EmptyState(t('n. a.'))); } else { $eventInfo[] = new HorizontalKeyValue( t('Cleared on'), DateFormatter::formatDateTime( $acknowledgement->clear_time !== null ? $acknowledgement->clear_time->getTimestamp() : $this->event->event_time->getTimestamp() ) ); if ($acknowledgement->cleared_by) { $eventInfo[] = new HorizontalKeyValue( t('Cleared by'), [new Icon('user'), $acknowledgement->cleared_by] ); } else { $expired = false; if ($acknowledgement->expire_time) { $now = (new DateTime())->setTimezone(new DateTimeZone('UTC')); $expiresOn = clone $now; $expiresOn->setTimestamp($acknowledgement->expire_time->getTimestamp()); if ($now <= $expiresOn) { $expired = true; $eventInfo[] = new HorizontalKeyValue(t('Removal Reason'), t( 'The acknowledgement expired on %s', DateFormatter::formatDateTime($acknowledgement->expire_time->getTimestamp()) )); } } if (! $expired) { if ($acknowledgement->is_sticky) { $eventInfo[] = new HorizontalKeyValue( t('Reason'), $acknowledgement->object_type === 'host' ? t('Host recovered') : t('Service recovered') ); } else { $eventInfo[] = new HorizontalKeyValue( t('Reason'), $acknowledgement->object_type === 'host' ? t('Host recovered') // Hosts have no other state between UP and DOWN : t('Service changed its state') ); } } } } $this->add(ObjectDetailExtensionHook::injectExtensions([ 200 => $commentInfo, 201 => $eventInfo, 601 => $this->createSentNotifications() ], $this->createExtensions())); } protected function createSentNotifications(): array { if (empty($this->event->alert_count)) { return []; } $alerts = $this->event->alert ->orderBy('triggered_at', 'asc'); $this->applyRestrictions($alerts); $results = $alerts->execute(); $list = (new AlertList($results, referenceTime: $this->event->event_time)) ->addAttributes(Attributes::create(['class' => 'alert-list'])) ->setViewMode('common'); if (! $results->hasResult()) { $list->setEmptyStateMessage( t('You have insufficient privileges to see all alerts.') ); } return [ new HtmlElement('h2', null, Text::create(t('Alerts'))), $list ]; } protected function createExtensions(): array { return ObjectDetailExtensionHook::loadExtensions($this->event); } protected function assemble() { switch ($this->event->event_type) { case 'notification': $this->assembleNotificationEvent($this->event->notification); break; case 'state_change': $this->assembleStateChangeEvent($this->event->state); break; case 'downtime_start': case 'downtime_end': $this->assembleDowntimeEvent($this->event->downtime); break; case 'comment_add': case 'comment_remove': $this->assembleCommentEvent($this->event->comment); break; case 'flapping_start': case 'flapping_end': $this->assembleFlappingEvent($this->event->flapping); break; case 'ack_set': case 'ack_clear': $this->assembleAcknowledgeEvent($this->event->acknowledgement); break; } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/HostDetail.php000066400000000000000000000041161527064444300244050ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\HostLinks; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\ServicestateSummary; use ipl\Html\Html; use ipl\Stdlib\Filter; use ipl\Web\Widget\EmptyState; class HostDetail extends ObjectDetail { protected $serviceSummary; public function __construct(Host $object, ServicestateSummary $serviceSummary) { parent::__construct($object); $this->serviceSummary = $serviceSummary; } protected function createServiceStatistics(): array { if ($this->serviceSummary->services_total > 0) { $services = (new ServiceStatistics($this->serviceSummary)) ->setUrl(HostLinks::services($this->object)); } else { $services = new EmptyState(t('This host has no services')); } return [Html::tag('h2', t('Services')), $services]; } protected function assemble() { if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { $this->add($this->createPrintHeader()); } $this->add(ObjectDetailExtensionHook::injectExtensions([ 0 => $this->createRootProblems(), 1 => $this->createPluginOutput(), 190 => $this->createServiceStatistics(), 300 => $this->createActions(), 301 => $this->createNotes(), 400 => $this->createComments(), 401 => $this->createDowntimes(), 500 => $this->createGroups(), 501 => $this->createNotificationRecipients(), 502 => $this->createConfiguredContacts(), 510 => $this->createAffectedObjects(), 600 => $this->createCheckStatistics(), 601 => $this->createPerformanceData(), 700 => $this->createCustomVars(), 701 => $this->createFeatureToggles() ], $this->createExtensions())); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/HostInspectionDetail.php000066400000000000000000000010761527064444300264430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\ObjectInspectionDetail; class HostInspectionDetail extends ObjectInspectionDetail { protected function assemble() { $this->add([ $this->createSourceLocation(), $this->createLastCheckResult(), $this->createAttributes(), $this->createCustomVariables(), $this->createRedisInfo() ]); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/HostMetaInfo.php000066400000000000000000000045601527064444300247100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Model\Host; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Web\Widget\Icon; class HostMetaInfo extends BaseHtmlElement { protected $tag = 'div'; protected $defaultAttributes = ['class' => 'object-meta-info']; /** @var Host */ protected $host; public function __construct(Host $host) { $this->host = $host; } protected function assemble() { $this->addHtml( new VerticalKeyValue('host.name', $this->host->name), new HtmlElement( 'div', null, new HorizontalKeyValue( 'host.address', $this->host->address ?: new EmptyState(t('None', 'address')) ), new HorizontalKeyValue( 'host.address6', $this->host->address6 ?: new EmptyState(t('None', 'address')) ) ), new VerticalKeyValue( 'last_state_change', $this->host->state->last_state_change !== null ? DateFormatter::formatDateTime($this->host->state->last_state_change->getTimestamp()) : (new EmptyState(t('n. a.')))->setTag('span') ) ); $collapsible = new HtmlElement('div', Attributes::create([ 'class' => 'collapsible', 'id' => 'object-meta-info', 'data-toggle-element' => '.object-meta-info-control', 'data-visible-height' => 0 ])); $renderHelper = new HtmlDocument(); $renderHelper->addHtml( $this, new HtmlElement( 'button', Attributes::create(['class' => 'object-meta-info-control']), new Icon('angle-double-up', ['class' => 'collapse-icon']), new Icon('angle-double-down', ['class' => 'expand-icon']) ) ); $this->addWrapper($collapsible); $this->addWrapper($renderHelper); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/HostStatistics.php000066400000000000000000000034621527064444300253400ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Widget\HostStateBadges; use ipl\Html\ValidHtml; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\HtmlString; use ipl\Web\Filter\QueryString; use ipl\Web\Widget\Link; class HostStatistics extends ObjectStatistics { protected $summary; public function __construct($summary) { $this->summary = $summary; } protected function createDonut(): ValidHtml { $donut = (new Donut()) ->addSlice($this->summary->hosts_up, ['class' => 'slice-state-ok']) ->addSlice($this->summary->hosts_down_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->hosts_down_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->hosts_pending, ['class' => 'slice-state-pending']); return HtmlString::create($donut->render()); } protected function createTotal(): ValidHtml { $url = Links::hosts(); if ($this->hasBaseFilter()) { $url->setFilter($this->getBaseFilter()); } return new Link( (new VerticalKeyValue( tp('Host', 'Hosts', $this->summary->hosts_total), $this->shortenAmount($this->summary->hosts_total) ))->setAttribute('title', $this->summary->hosts_total), $url ); } protected function createBadges(): ValidHtml { $badges = new HostStateBadges($this->summary); if ($this->hasBaseFilter()) { $badges->setBaseFilter($this->getBaseFilter()); } return $badges; } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/MultiselectQuickActions.php000066400000000000000000000256241527064444300271640ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Forms\Command\Object\CheckNowForm; use Icinga\Module\Icingadb\Forms\Command\Object\RemoveAcknowledgementForm; use Icinga\Module\Icingadb\Notifications\SubscriptionForm; use Icinga\Module\Notifications\Integrations\V1\Incidents; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Stdlib\BaseFilter; use ipl\Web\Url; use ipl\Web\Widget\Icon; class MultiselectQuickActions extends BaseHtmlElement { use BaseFilter; use Auth; protected $summary; protected $type; protected $tag = 'ul'; protected $defaultAttributes = ['class' => 'quick-actions']; /** @var bool Whether to allow process check results */ protected $allowToProcessCheckResults = true; /** @var ?string The summary column prefix */ protected $columnPrefix; /** @var ?string The url path for {@see getLink()} method (default: `icingadb/$this->type . 's'`) */ protected $urlPath; public function __construct($type, $summary) { $this->summary = $summary; $this->type = $type; } /** * Set the summary column prefix * * @param string $columnPrefix * * @return $this */ public function setColumnPrefix(string $columnPrefix): self { $this->columnPrefix = $columnPrefix; return $this; } /** * Get the summary column prefix (default: `$this->type . 's'`) * * @return string */ public function getColumnPrefix(): string { if ($this->columnPrefix === null) { $this->columnPrefix = $this->type . 's'; } return $this->columnPrefix; } /** * Set the url path for {@see getLink()} method * * Omits the trailing slashes * * @param string $urlPath * * @return $this */ public function setUrlPath(string $urlPath): self { $this->urlPath = rtrim($urlPath, '/'); return $this; } /** * Get the url path for {@see getLink()} method * * If not set `icingadb/$this->type . 's'` is used * * @return string */ public function getUrlPath(): string { if ($this->urlPath === null) { $this->urlPath = "icingadb/{$this->type}s"; } return $this->urlPath; } /** * Set whether to allow process check results * * @param bool $state * * @return $this */ public function setAllowToProcessCheckResults(bool $state = true): self { $this->allowToProcessCheckResults = $state; return $this; } protected function assemble() { $unacknowledged = "{$this->getColumnPrefix()}_problems_unacknowledged"; $acks = "{$this->getColumnPrefix()}_acknowledged"; $activeChecks = "{$this->getColumnPrefix()}_active_checks_enabled"; $passiveChecks = "{$this->getColumnPrefix()}_passive_checks_enabled"; $affectsIncidents = $this->getAuth()->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp(); if ( $this->summary->$unacknowledged > $this->summary->$acks && $this->isGrantedOnType( 'icingadb/command/acknowledge-problem', $this->type, $this->getBaseFilter(), false ) ) { $disabled = false; $title = t('Acknowledge this problem, suppress all future notifications for it and tag it as ' . 'being handled'); if ($affectsIncidents) { if (Incidents::canManage($this->getAuth()->getUser())) { $title = t( 'Acknowledge this problem and tag it as being handled, so that only you and anyone' . ' who subscribes will receive its notifications' ); } else { $disabled = true; $title = t( 'You cannot acknowledge this problem, as there is no Icinga Notifications contact' . ' configured for your account' ); } } if ($disabled) { $this->assembleDisabledAction(t('Acknowledge'), 'check-circle', $title); } else { $this->assembleAction('acknowledge', t('Acknowledge'), 'check-circle', $title); } } if ( $this->summary->$acks > 0 && $this->isGrantedOnType( 'icingadb/command/remove-acknowledgement', $this->type, $this->getBaseFilter(), false ) ) { if ($affectsIncidents && ! Incidents::canManage($this->getAuth()->getUser())) { $this->assembleDisabledAction( tp('Remove acknowledgement', 'Remove acknowledgements', $this->summary->$acks), 'trash', t( 'You cannot remove this acknowledgement, as there is no Icinga Notifications contact' . ' configured for your account' ) ); } else { $removeAckForm = (new RemoveAcknowledgementForm()) ->setAction($this->getLink('removeAcknowledgement')) // TODO: This is a hack as for the button label the count of objects is used. setCount? setMultiple? ->setObjects(array_fill(0, $this->summary->$acks, null)); $this->add(Html::tag('li', $removeAckForm)); } } if ( $affectsIncidents && $this->summary->$acks + $this->summary->$unacknowledged > 0 && $this->isGrantedOnType('icingadb/notifications/subscribe', $this->type, $this->getBaseFilter(), false) ) { if (Incidents::canSubscribe($this->getAuth()->getUser())) { $this->add(Html::tag('li', (new SubscriptionForm(true)) ->setAction($this->getLink('subscribe')))); $this->add(Html::tag('li', (new SubscriptionForm(false)) ->setAction($this->getLink('unsubscribe')))); } else { $this->assembleDisabledAction( t('Subscribe'), 'share', t( 'You cannot subscribe, as there is no Icinga Notifications contact' . ' configured for your account' ) ); } } if ( $this->isGrantedOnType('icingadb/command/schedule-check', $this->type, $this->getBaseFilter(), false) || ( ! empty($this->summary->$activeChecks) && $this->isGrantedOnType( 'icingadb/command/schedule-check/active-only', $this->type, $this->getBaseFilter(), false ) ) ) { $this->add(Html::tag('li', (new CheckNowForm())->setAction($this->getLink('checkNow')))); } if ($this->isGrantedOnType('icingadb/command/comment/add', $this->type, $this->getBaseFilter(), false)) { $this->assembleAction( 'addComment', t('Comment'), 'comment', t('Add a new comment') ); } if ( $this->isGrantedOnType( 'icingadb/command/send-custom-notification', $this->type, $this->getBaseFilter(), false ) ) { $this->assembleAction( 'sendCustomNotification', t('Notification'), 'bell', t('Send a custom notification') ); } if ( $this->isGrantedOnType( 'icingadb/command/downtime/schedule', $this->type, $this->getBaseFilter(), false ) ) { $this->assembleAction( 'scheduleDowntime', t('Downtime'), 'plug', t('Schedule a downtime to suppress all problem notifications within a specific period of time') ); } if ( $this->isGrantedOnType('icingadb/command/schedule-check', $this->type, $this->getBaseFilter(), false) || ( ! empty($this->summary->$activeChecks) && $this->isGrantedOnType( 'icingadb/command/schedule-check/active-only', $this->type, $this->getBaseFilter(), false ) ) ) { $this->assembleAction( 'scheduleCheck', t('Reschedule'), 'calendar', t('Schedule the next active check at a different time than the current one') ); } if ( $this->allowToProcessCheckResults && $this->summary->$passiveChecks > 0 && $this->isGrantedOnType( 'icingadb/command/process-check-result', $this->type, $this->getBaseFilter(), false ) ) { $this->assembleAction( 'processCheckresult', t('Process check result'), 'edit', t('Submit passive check result') ); } } protected function assembleAction(string $action, string $label, string $icon, string $title) { $link = Html::tag( 'a', [ 'href' => $this->getLink($action), 'class' => 'action-link', 'title' => $title, 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ], [ new Icon($icon), $label ] ); $this->add(Html::tag('li', $link)); } protected function assembleDisabledAction(string $label, string $icon, string $title) { $link = Html::tag( 'a', [ 'class' => 'action-link', 'title' => $title, 'disabled' => true ], [ new Icon($icon), $label ] ); $this->add(Html::tag('li', $link)); } protected function getLink(string $action): string { return Url::fromPath($this->getUrlPath() . '/' . $action) ->setFilter($this->getBaseFilter()) ->getAbsoluteUrl(); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ObjectDetail.php000066400000000000000000000761171527064444300247100ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Application\ClassLoader; use Icinga\Application\Config; use Icinga\Application\Hook; use Icinga\Application\Hook\GrapherHook; use Icinga\Application\Icinga; use Icinga\Application\Logger; use Icinga\Application\Web; use Icinga\Date\DateFormatter; use Icinga\Exception\IcingaException; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\HostLinks; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\Macros; use Icinga\Module\Icingadb\Compat\CompatHost; use Icinga\Module\Icingadb\Model\CustomvarFlat; use Icinga\Module\Icingadb\Model\DependencyEdge; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Notifications\IncidentFinder; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Web\Navigation\Action; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ItemList\TicketLinkObjectList; use Icinga\Module\Icingadb\Widget\MarkdownText; use Icinga\Module\Icingadb\Common\ServiceLinks; use Icinga\Module\Icingadb\Forms\Command\Object\ToggleObjectFeaturesForm; use Icinga\Module\Icingadb\Hook\ActionsHook\ObjectActionsHook; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\ItemList\DowntimeList; use Icinga\Module\Icingadb\Widget\ShowMore; use Icinga\Module\Notifications\Integrations\Exception\IncidentNotFoundException; use ipl\Sql\Expression; use ipl\Sql\Filter\Exists; use ipl\Web\Widget\CopyToClipboard; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\EmptyStateBar; use ipl\Web\Widget\HorizontalKeyValue; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use Icinga\Module\Icingadb\Widget\TagList; use Icinga\Module\Monitoring\Hook\DetailviewExtensionHook; use Icinga\Web\Navigation\Navigation; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Orm\ResultSet; use ipl\Stdlib\Filter; use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; use Throwable; class ObjectDetail extends BaseHtmlElement { use Auth; use Database; use Macros; protected $object; protected $compatObject; protected $objectType; protected $defaultAttributes = [ // Class host-detail is kept as the grafana module's iframe.js depends on it 'class' => ['object-detail', 'host-detail'], 'data-pdfexport-page-breaks-at' => 'h2' ]; protected $tag = 'div'; public function __construct($object) { $this->object = $object; $this->objectType = $object instanceof Host ? 'host' : 'service'; } protected function compatObject() { if ($this->compatObject === null) { $this->compatObject = CompatHost::fromModel($this->object); } return $this->compatObject; } protected function createPrintHeader() { $info = [new HorizontalKeyValue(t('Name'), $this->object->name)]; if ($this->objectType === 'host') { $info[] = new HorizontalKeyValue( t('IPv4 Address'), $this->object->address ?: new EmptyState(t('None', 'address')) ); $info[] = new HorizontalKeyValue( t('IPv6 Address'), $this->object->address6 ?: new EmptyState(t('None', 'address')) ); } $info[] = new HorizontalKeyValue(t('State'), [ $this->object->state->getStateTextTranslated(), ' ', new StateBall($this->object->state->getStateText()) ]); $info[] = new HorizontalKeyValue( t('Last State Change'), isset($this->object->state->last_state_change) ? DateFormatter::formatDateTime($this->object->state->last_state_change->getTimestamp()) : new EmptyState(t('n. a.')) ); return [ new HtmlElement('h2', null, Text::create( $this->objectType === 'host' ? t('Host') : t('Service') )), $info ]; } protected function createActions() { $this->fetchCustomVars(); $navigation = new Navigation(); $navigation->load('icingadb-' . $this->objectType . '-action'); /** @var Action $item */ foreach ($navigation as $item) { $item->setObject($this->object); } $monitoringInstalled = Icinga::app()->getModuleManager()->hasInstalled('monitoring'); $obj = $monitoringInstalled ? $this->compatObject() : $this->object; foreach ($this->object->action_url->first()->action_url ?? [] as $url) { $url = $this->expandMacros($url, $obj); $navigation->addItem( Html::wantHtml([ // Add warning to links that open in new tabs, as recommended by WCAG20 G201 new Icon('external-link-alt', ['title' => t('Link opens in a new window')]), $url ])->render(), [ 'target' => '_blank', 'url' => $url, 'renderer' => [ 'NavigationItemRenderer', 'escape_label' => false ] ] ); } $moduleActions = ObjectActionsHook::loadActions($this->object); $nativeExtensionProviders = []; foreach ($moduleActions->getContent() as $item) { if ($item->getAttributes()->has('data-icinga-module')) { $nativeExtensionProviders[$item->getAttributes()->get('data-icinga-module')->getValue()] = true; } } if (Icinga::app()->getModuleManager()->hasInstalled('monitoring')) { foreach (Hook::all('Monitoring\\' . ucfirst($this->objectType) . 'Actions') as $hook) { $moduleName = ClassLoader::extractModuleName(get_class($hook)); if (! isset($nativeExtensionProviders[$moduleName])) { try { $navigation->merge($hook->getNavigation($this->compatObject())); } catch (Throwable $e) { Logger::error("Failed to load legacy action hook: %s\n%s", $e, $e->getTraceAsString()); $navigation->addItem($moduleName, ['label' => IcingaException::describe($e), 'url' => '#']); } } } } if ($moduleActions->isEmpty() && ($navigation->isEmpty() || ! $navigation->hasRenderableItems())) { return null; } return [ Html::tag('h2', t('Actions')), new HtmlString($navigation->getRenderer()->setCssClass('object-detail-actions')->render()), $moduleActions->isEmpty() ? null : $moduleActions ]; } protected function createCheckStatistics(): array { return [ Html::tag('h2', t('Check Statistics')), new CheckStatistics($this->object) ]; } protected function createComments(): array { if ($this->objectType === 'host') { $link = HostLinks::comments($this->object); $relations = ['host', 'host.state']; } else { $link = ServiceLinks::comments($this->object, $this->object->host); $relations = ['service', 'service.state', 'service.host', 'service.host.state']; } $comments = $this->object->comment ->with($relations) ->limit(3) ->peekAhead(); $comments = $comments->execute(); /** @var ResultSet $comments */ $content = [Html::tag('h2', t('Comments'))]; if ($comments->hasResult()) { $content[] = new TicketLinkObjectList($comments); $content[] = (new ShowMore($comments, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No comments created.')); } return $content; } protected function createCustomVars(): array { $content = [Html::tag('h2', t('Custom Variables'))]; $this->fetchCustomVars(); $vars = (new CustomvarFlat())->unFlattenVars($this->object->customvar_flat); if (! empty($vars)) { $content[] = new HtmlElement('div', Attributes::create([ 'id' => $this->objectType . '-customvars', 'class' => 'collapsible', 'data-visible-height' => 200 ]), new CustomVarTable($vars, $this->object)); } else { $content[] = new EmptyState(t('No custom variables configured.')); } return $content; } protected function createDowntimes(): array { if ($this->objectType === 'host') { $link = HostLinks::downtimes($this->object); $relations = ['host', 'host.state']; } else { $link = ServiceLinks::downtimes($this->object, $this->object->host); $relations = ['service', 'service.state', 'service.host', 'service.host.state']; } $downtimes = $this->object->downtime ->with($relations) ->limit(3) ->peekAhead(); $downtimes = $downtimes->execute(); /** @var ResultSet $downtimes */ $content = [Html::tag('h2', t('Downtimes'))]; if ($downtimes->hasResult()) { $content[] = new TicketLinkObjectList($downtimes); $content[] = (new ShowMore($downtimes, $link))->setBaseTarget('_next'); } else { $content[] = new EmptyState(t('No downtimes scheduled.')); } return $content; } protected function createGroups(): array { $groups = [Html::tag('h2', t('Groups'))]; if ($this->objectType === 'host') { $hostgroups = []; if ($this->isPermittedRoute('hostgroups')) { $hostgroups = $this->object->hostgroup; $this->applyRestrictions($hostgroups); } $hostgroupList = new TagList(); foreach ($hostgroups as $hostgroup) { $hostgroupList->addLink($hostgroup->display_name, Links::hostgroup($hostgroup)); } $groups[] = $hostgroupList->hasContent() ? $hostgroupList : new EmptyState(t('Not a member of any host group.')); } else { $servicegroups = []; if ($this->isPermittedRoute('servicegroups')) { $servicegroups = $this->object->servicegroup; $this->applyRestrictions($servicegroups); } $servicegroupList = new TagList(); foreach ($servicegroups as $servicegroup) { $servicegroupList->addLink($servicegroup->display_name, Links::servicegroup($servicegroup)); } $groups[] = $servicegroupList->hasContent() ? $servicegroupList : new EmptyState(t('Not a member of any service group.')); } return $groups; } protected function createNotes() { $navigation = new Navigation(); $notes = trim($this->object->notes); $monitoringInstalled = Icinga::app()->getModuleManager()->hasInstalled('monitoring'); $obj = $monitoringInstalled ? $this->compatObject() : $this->object; foreach ($this->object->notes_url->first()->notes_url ?? [] as $url) { $url = $this->expandMacros($url, $obj); $navigation->addItem( Html::wantHtml([ // Add warning to links that open in new tabs, as recommended by WCAG20 G201 new Icon('external-link-alt', ['title' => t('Link opens in a new window')]), $url ])->render(), [ 'target' => '_blank', 'url' => $url, 'renderer' => [ 'NavigationItemRenderer', 'escape_label' => false ] ] ); } $content = []; if (! $navigation->isEmpty() && $navigation->hasRenderableItems()) { $content[] = new HtmlString($navigation->getRenderer()->setCssClass('object-detail-actions')->render()); } if ($notes !== '') { $content[] = (new MarkdownText($notes)) ->addAttributes([ 'class' => 'collapsible', 'data-visible-height' => 200, 'id' => $this->objectType . '-notes' ]); } if (empty($content)) { return null; } array_unshift($content, Html::tag('h2', t('Notes'))); return $content; } protected function createConfiguredContacts(): array { [$users, $usergroups] = $this->getUsersAndUsergroups(); $userList = new TagList(); $usergroupList = new TagList(); foreach ($users as $user) { $userList->addLink([new Icon(Icons::USER), $user->display_name], Links::user($user)); } foreach ($usergroups as $usergroup) { $usergroupList->addLink( [new Icon(Icons::USERGROUP), $usergroup->display_name], Links::usergroup($usergroup) ); } if ( ! $userList->hasContent() && ! $usergroupList->hasContent() && $this->getAuth()->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp() ) { return []; } return [ Html::tag('h2', t('Configured Contacts')), new HorizontalKeyValue( t('Contacts'), $userList->hasContent() ? $userList : new EmptyState(t('No contacts configured.')) ), new HorizontalKeyValue( t('Contact Groups'), $usergroupList->hasContent() ? $usergroupList : new EmptyState(t('No contact groups configured.')) ) ]; } protected function createNotificationRecipients(): array { if (! $this->getAuth()->hasPermission('icingadb/notifications/usage') || ! Backend::notificationsSetUp()) { return []; } $incident = IncidentFinder::forObject($this->object); $subscriberList = []; $recipientList = []; try { $subscribers = $incident->getSubscribers(); } catch (IncidentNotFoundException) { return []; } $filter = Filter::any(); if (! $this->getAuth()->getUser()->isUnrestricted()) { foreach ($this->getAuth()->getUser()->getRoles() as $role) { if (($restriction = $role->getRestrictions('icingadb/filter/alerts'))) { $filter->add($this->parseRestriction($restriction, 'icingadb/filter/alerts')); } } } $recipientIsVisible = function (string $type, string $name) use ($filter): bool { if ($filter->isEmpty()) { return true; } return Filter::match($filter, [ 'alert_history.contact_name' => $type === 'contact' ? $name : null, 'alert_history.contactgroup_name' => $type === 'contactgroup' ? $name : null, 'alert_history.schedule_name' => $type === 'schedule' ? $name : null ]); }; $subscribersHidden = false; foreach ($subscribers as $subscriber) { if (! $recipientIsVisible('contact', $subscriber['name'])) { $subscribersHidden = true; continue; } $isManager = $subscriber['role'] === 'manager'; $changedAt = DateFormatter::formatDateTime($subscriber['roleChangedAt']->getTimestamp()); $subscriberItem = Html::tag('li', [ 'title' => $isManager ? sprintf(t('%s acknowledged on %s'), $subscriber['name'], $changedAt) : sprintf(t('%s subscribed on %s'), $subscriber['name'], $changedAt) ], Text::create($subscriber['name'])); if ($isManager) { $subscriberItem->addHtml( Html::tag( 'span', ['class' => ['ack-badge']], [ new Icon('check-circle'), Text::create('ack') ] ) ); } $subscriberList[] = $subscriberItem; } $recipientIcons = [ 'contact' => Icons::USER, 'contactgroup' => Icons::USERGROUP, 'schedule' => Icons::SCHEDULE, ]; $translatedTypes = [ 'contact' => t('Contact'), 'contactgroup' => t('Contact Group'), 'schedule' => t('Schedule'), ]; $recipientsHidden = false; foreach ($incident->getRecipients() as $recipient) { if (! $recipientIsVisible($recipient['type'], $recipient['name'])) { $recipientsHidden = true; continue; } $icon = new Icon($recipientIcons[$recipient['type']]); $name = $recipient['name']; $recipientList[] = Html::tag( 'li', [ 'title' => sprintf( '[%s] %s', $translatedTypes[$recipient['type']], $name ) ], Html::tag( 'span', ['class' => 'recipient'], [$icon, Text::create($name)] ) ); } $subscribersValue = empty($subscriberList) ? new EmptyState($subscribersHidden ? t('You have insufficient privileges to see all subscribers.') : t('No subscribers.')) : Html::tag('div', ['class' => 'subscriber-list'], $subscriberList); $recipientsValue = empty($recipientList) ? new EmptyState($recipientsHidden ? t('You have insufficient privileges to see all recipients.') : t('No recipients.')) : Html::tag('div', ['class' => 'recipient-list'], $recipientList); return [ Html::tag('h2', t('Notification Recipients')), new HorizontalKeyValue(t('Subscribers'), $subscribersValue), new HorizontalKeyValue(t('Recipients'), $recipientsValue), ]; } protected function createPerformanceData(): array { $content[] = Html::tag('h2', t('Performance Data')); if (empty($this->object->state->performance_data)) { $content[] = new EmptyState(t('No performance data available.')); } else { $content[] = new HtmlElement( 'div', Attributes::create(['id' => 'check-perfdata-' . $this->object->checkcommand_name]), new PerfDataTable($this->object->state->normalized_performance_data) ); } return $content; } protected function createPluginOutput(): array { if (empty($this->object->state->output) && empty($this->object->state->long_output)) { $pluginOutput = new EmptyState(t('Output unavailable.')); } else { $pluginOutput = new PluginOutputContainer( PluginOutput::fromObject($this->object) ->setCharacterLimit( (int) Config::module('icingadb') ->get('settings', 'plugin_output_character_limit', 10000) ) ); CopyToClipboard::attachTo($pluginOutput); } return [ Html::tag('h2', t('Plugin Output')), Html::tag( 'div', [ 'id' => 'check-output-' . $this->object->checkcommand_name, 'class' => 'collapsible', 'data-visible-height' => 100 ], $pluginOutput ) ]; } protected function createExtensions(): array { $extensions = ObjectDetailExtensionHook::loadExtensions($this->object); $nativeExtensionProviders = []; foreach ($extensions as $extension) { if ($extension instanceof BaseHtmlElement && $extension->getAttributes()->has('data-icinga-module')) { $nativeExtensionProviders[$extension->getAttributes()->get('data-icinga-module')->getValue()] = true; } } if (! Icinga::app()->getModuleManager()->hasInstalled('monitoring')) { return $extensions; } foreach (Hook::all('Grapher') as $grapher) { /** @var GrapherHook $grapher */ $moduleName = ClassLoader::extractModuleName(get_class($grapher)); if (isset($nativeExtensionProviders[$moduleName])) { continue; } try { $graph = HtmlString::create($grapher->getPreviewHtml($this->compatObject())); } catch (Throwable $e) { Logger::error("Failed to load legacy grapher: %s\n%s", $e, $e->getTraceAsString()); $graph = Text::create(IcingaException::describe($e)); } $location = ObjectDetailExtensionHook::BASE_LOCATIONS[ObjectDetailExtensionHook::GRAPH_SECTION]; while (isset($extensions[$location])) { $location++; } $extensions[$location] = $graph; } foreach (Hook::all('Monitoring\DetailviewExtension') as $extension) { /** @var DetailviewExtensionHook $extension */ $moduleName = $extension->getModule()->getName(); if (isset($nativeExtensionProviders[$moduleName])) { continue; } try { /** @var Web $app */ $app = Icinga::app(); $renderedExtension = $extension ->setView($app->getViewRenderer()->view) ->getHtmlForObject($this->compatObject()); if (! empty($renderedExtension)) { $extensionHtml = new HtmlElement( 'div', Attributes::create([ 'class' => 'icinga-module module-' . $moduleName, 'data-icinga-module' => $moduleName ]), HtmlString::create($renderedExtension) ); } else { $extensionHtml = HtmlString::create(''); } } catch (Throwable $e) { Logger::error("Failed to load legacy detail extension: %s\n%s", $e, $e->getTraceAsString()); $extensionHtml = Text::create(IcingaException::describe($e)); } $location = ObjectDetailExtensionHook::BASE_LOCATIONS[ObjectDetailExtensionHook::DETAIL_SECTION]; while (isset($extensions[$location])) { $location++; } $extensions[$location] = $extensionHtml; } return $extensions; } protected function createFeatureToggles(): array { $form = new ToggleObjectFeaturesForm($this->object); if ($this->objectType === 'host') { $form->setAction(HostLinks::toggleFeatures($this->object)->getAbsoluteUrl()); } else { $form->setAction(ServiceLinks::toggleFeatures($this->object, $this->object->host)->getAbsoluteUrl()); } return [ Html::tag('h2', t('Feature Commands')), $form ]; } protected function getUsersAndUsergroups(): array { $users = []; $usergroups = []; $groupBy = false; if ($this->objectType === 'host') { $objectFilter = Filter::all( Filter::equal('notification.host_id', $this->object->id), Filter::unlike('notification.service_id', '*') ); $objectFilter->metaData()->set('forceOptimization', false); $groupBy = true; } else { $objectFilter = Filter::equal( 'notification.service_id', $this->object->id ); } $userQuery = null; if ($this->isPermittedRoute('contacts')) { $userQuery = User::on($this->getDb()); $userQuery->filter($objectFilter); $this->applyRestrictions($userQuery); if ($groupBy) { $userQuery->getSelectBase()->groupBy(['user.id']); } foreach ($userQuery as $user) { $users[$user->name] = $user; } } if ($this->isPermittedRoute('contactgroups')) { $usergroupQuery = Usergroup::on($this->getDb()); $usergroupQuery->filter($objectFilter); $this->applyRestrictions($usergroupQuery); if ($groupBy && $userQuery !== null) { $userQuery->getSelectBase()->groupBy(['usergroup.id']); } foreach ($usergroupQuery as $usergroup) { $usergroups[$usergroup->name] = $usergroup; } } return [$users, $usergroups]; } protected function fetchCustomVars() { $customvarFlat = $this->object->customvar_flat; if (! $customvarFlat instanceof ResultSet) { $this->applyRestrictions($customvarFlat); $customvarFlat->withColumns(['customvar.name', 'customvar.value']); $this->object->customvar_flat = $customvarFlat->execute(); } } /** * Create a list of root problems of the object that is unreachable because of dependency failure * * @return ?BaseHtmlElement[] */ protected function createRootProblems(): ?array { if (! Backend::supportsDependencies()) { if ($this->object->state->is_reachable) { return null; } return [ HtmlElement::create('h2', null, Text::create(t('Root Problems'))), new EmptyStateBar(t("You're missing out! Upgrade Icinga DB and see the actual root cause here!")) ]; } // If a dependency has failed, then the children are not reachable. Hence, the root problems should not be shown // if the object is reachable. And in case of a service, since, it may be also be unreachable because of its // host being down, only show its root problems if it's really caused by a dependency failure. if ( $this->object->state->is_reachable || ($this->object instanceof Service && ! $this->object->has_problematic_parent) ) { return null; } $rootProblems = UnreachableParent::on($this->getDb(), $this->object) ->with([ 'redundancy_group', 'redundancy_group.state', 'host', 'host.state', 'host.icon_image', 'host.state.last_comment', 'service', 'service.state', 'service.icon_image', 'service.state.last_comment', 'service.host', 'service.host.state' ]) ->orderBy([ 'host.state.severity', 'host.state.last_state_change', 'service.state.severity', 'service.state.last_state_change', 'redundancy_group.state.failed', 'redundancy_group.state.last_state_change' ], SORT_DESC); $this->applyRestrictions($rootProblems); return [ HtmlElement::create('h2', null, Text::create(t('Root Problems'))), (new ObjectList($rootProblems))->setEmptyStateMessage( t('You are not authorized to view these objects.') ) ]; } /** * Create a list of objects affected by the object that is a part of failed dependency * * @return ?BaseHtmlElement[] */ protected function createAffectedObjects(): ?array { if (! isset($this->object->state->affects_children) || ! $this->object->state->affects_children) { return null; } $affectedObjects = DependencyNode::on($this->getDb()) ->with([ 'redundancy_group', 'redundancy_group.state', 'host', 'host.state', 'host.icon_image', 'host.state.last_comment', 'service', 'service.state', 'service.icon_image', 'service.state.last_comment', 'service.host', 'service.host.state' ]) ->setResultSetClass(VolatileStateResults::class) ->limit(5) ->orderBy([ 'host.state.severity', 'host.state.last_state_change', 'service.state.severity', 'service.state.last_state_change', 'redundancy_group.state.failed', 'redundancy_group.state.last_state_change' ], SORT_DESC); $failedEdges = DependencyEdge::on($this->getDb()) ->utilize('child') ->columns([new Expression('1')]) ->filter(Filter::equal('state.failed', 'y')); if ($this->object instanceof Host) { $failedEdges ->filter(Filter::equal('parent.host.id', $this->object->id)) ->filter(Filter::unlike('parent.service.id', '*')); } else { $failedEdges->filter(Filter::equal('parent.service.id', $this->object->id)); } $failedEdges->getFilter()->metaData()->set('forceOptimization', false); $edgeResolver = $failedEdges->getResolver(); $childAlias = $edgeResolver->getAlias( $edgeResolver->resolveRelation($failedEdges->getModel()->getTableName() . '.child')->getTarget() ); $affectedObjects->filter(new Exists( $failedEdges->assembleSelect() ->where( "$childAlias.id = " . $affectedObjects->getResolver() ->qualifyColumn('id', $affectedObjects->getModel()->getTableName()) ) )); $this->applyRestrictions($affectedObjects); return [ HtmlElement::create('h2', null, Text::create(t('Affected Objects'))), (new ObjectList($affectedObjects))->setEmptyStateMessage( t('You are not authorized to view these objects.') ) ]; } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ObjectHeader.php000066400000000000000000000077131527064444300246720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\AlertHistory; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\View\AlertRenderer; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; use Icinga\Module\Icingadb\View\EventRenderer; use Icinga\Module\Icingadb\View\HostgroupRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServicegroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; use Icinga\Module\Icingadb\View\UsergroupRenderer; use Icinga\Module\Icingadb\View\UserRenderer; use ipl\Html\BaseHtmlElement; use ipl\Orm\Model; use ipl\Web\Layout\HeaderItemLayout; use ipl\Web\Layout\ItemLayout; /** * ObjectHeader * * Create a header for icingadb object * * @phpstan-type _PART1 = RedundancyGroup|Service|Host|Usergroup|User|Comment|Downtime|History|AlertHistory * @phpstan-type _PART2 = Hostgroupsummary|ServicegroupSummary * * @template Item of _PART1|_PART2 */ class ObjectHeader extends BaseHtmlElement { protected $defaultAttributes = ['data-base-target' => '_next']; /** @var Item */ protected $object; protected $tag = 'div'; /** * Create a new object header * * @param Item $object */ public function __construct(Model $object) { $this->object = $object; } /** * @throws NotImplementedError When the object type is not supported */ protected function assemble(): void { switch (true) { case $this->object instanceof RedundancyGroup: $renderer = new RedundancyGroupRenderer(); break; case $this->object instanceof Service: $renderer = new ServiceRenderer(); break; case $this->object instanceof Host: $renderer = new HostRenderer(); break; case $this->object instanceof Usergroup: $renderer = new UsergroupRenderer(); break; case $this->object instanceof User: $renderer = new UserRenderer(); break; case $this->object instanceof Comment: $renderer = (new CommentRenderer())->setTicketLinkDisabled(); break; case $this->object instanceof Downtime: $renderer = (new DowntimeRenderer())->setTicketLinkDisabled(); break; case $this->object instanceof History: $renderer = new EventRenderer(); break; case $this->object instanceof AlertHistory: $renderer = new AlertRenderer(); break; case $this->object instanceof Hostgroupsummary: $renderer = new HostgroupRenderer(); break; case $this->object instanceof ServicegroupSummary: $renderer = new ServicegroupRenderer(); break; default: throw new NotImplementedError('Not implemented'); } $layout = new HeaderItemLayout($this->object, $renderer); if (isset($this->object->icon_image->icon_image)) { $layout->after(ItemLayout::VISUAL, 'icon-image'); } $this->addAttributes($layout->getAttributes()); $this->addHtml($layout); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ObjectStatistics.php000066400000000000000000000030151527064444300256230ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\ValidHtml; use ipl\Stdlib\BaseFilter; abstract class ObjectStatistics extends BaseHtmlElement { use BaseFilter; protected $tag = 'ul'; protected $defaultAttributes = ['class' => 'object-statistics']; abstract protected function createDonut(): ValidHtml; abstract protected function createTotal(): ValidHtml; abstract protected function createBadges(): ValidHtml; /** * Shorten the given amount to 4 characters max * * @param int $amount * * @return string */ protected function shortenAmount(int $amount): string { if ($amount < 10000) { return (string) $amount; } if ($amount < 999500) { return sprintf('%dk', round($amount / 1000.0)); } if ($amount < 9959000) { return sprintf('%.1fM', $amount / 1000000.0); } // I think we can rule out amounts over 1 Billion return sprintf('%dM', $amount / 1000000.0); } protected function assemble() { $this->add([ Html::tag('li', ['class' => 'object-statistics-graph'], $this->createDonut()), Html::tag('li', ['class' => ['object-statistics-total', 'text-center']], $this->createTotal()), Html::tag('li', $this->createBadges()) ]); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ObjectsDetail.php000066400000000000000000000145341527064444300250660ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Forms\Command\Object\ToggleObjectFeaturesForm; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectsDetailExtensionHook; use Icinga\Module\Icingadb\Model\HoststateSummary; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Util\FeatureStatus; use Icinga\Module\Icingadb\Widget\HostStateBadges; use Icinga\Module\Icingadb\Widget\ServiceStateBadges; use ipl\Orm\Query; use ipl\Stdlib\BaseFilter; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlString; use ipl\Web\Widget\ActionLink; class ObjectsDetail extends BaseHtmlElement { use BaseFilter; protected $summary; protected $query; protected $type; protected $defaultAttributes = ['class' => 'objects-detail']; protected $tag = 'div'; /** * Construct an object detail summary widget * * @param string $type * @param HoststateSummary|ServicestateSummary $summary * @param Query $query */ public function __construct(string $type, $summary, Query $query) { $this->summary = $summary; $this->query = $query; $this->type = $type; } protected function createChart(): BaseHtmlElement { $content = Html::tag('div', ['class' => 'multiselect-summary']); if ($this->type === 'host') { $hostsChart = (new Donut()) ->addSlice($this->summary->hosts_up, ['class' => 'slice-state-ok']) ->addSlice($this->summary->hosts_down_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->hosts_down_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->hosts_pending, ['class' => 'slice-state-pending']); $badges = (new HostStateBadges($this->summary)) ->setBaseFilter($this->getBaseFilter()); $content->add([ HtmlString::create($hostsChart->render()), new VerticalKeyValue( tp('Host', 'Hosts', $this->summary->hosts_total), $this->summary->hosts_total ), $badges ]); } else { $servicesChart = (new Donut()) ->addSlice($this->summary->services_ok, ['class' => 'slice-state-ok']) ->addSlice($this->summary->services_warning_handled, ['class' => 'slice-state-warning-handled']) ->addSlice($this->summary->services_warning_unhandled, ['class' => 'slice-state-warning']) ->addSlice($this->summary->services_critical_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->services_critical_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->services_unknown_handled, ['class' => 'slice-state-unknown-handled']) ->addSlice($this->summary->services_unknown_unhandled, ['class' => 'slice-state-unknown']) ->addSlice($this->summary->services_pending, ['class' => 'slice-state-pending']); $badges = (new ServiceStateBadges($this->summary)) ->setBaseFilter($this->getBaseFilter()); $content->add([ HtmlString::create($servicesChart->render()), new VerticalKeyValue( tp('Service', 'Services', $this->summary->services_total), $this->summary->services_total ), $badges ]); } return $content; } protected function createComments(): array { $content = [Html::tag('h2', t('Comments'))]; if ($this->summary->comments_total > 0) { $content[] = new ActionLink( sprintf( tp('Show %d comment', 'Show %d comments', $this->summary->comments_total), $this->summary->comments_total ), Links::comments()->setFilter($this->getBaseFilter()) ); } else { $content[] = new EmptyState(t('No comments created.')); } return $content; } protected function createDowntimes(): array { $content = [Html::tag('h2', t('Downtimes'))]; if ($this->summary->downtimes_total > 0) { $content[] = new ActionLink( sprintf( tp('Show %d downtime', 'Show %d downtimes', $this->summary->downtimes_total), $this->summary->downtimes_total ), Links::downtimes()->setFilter($this->getBaseFilter()) ); } else { $content[] = new EmptyState(t('No downtimes scheduled.')); } return $content; } protected function createFeatureToggles(): array { $form = new ToggleObjectFeaturesForm(new FeatureStatus($this->type, $this->summary)); if ($this->type === 'host') { $form->setAction( Links::toggleHostsFeatures() ->setFilter($this->getBaseFilter()) ->getAbsoluteUrl() ); } else { $form->setAction( Links::toggleServicesFeatures() ->setFilter($this->getBaseFilter()) ->getAbsoluteUrl() ); } return [ Html::tag('h2', t('Feature Commands')), $form ]; } protected function createExtensions(): array { return ObjectsDetailExtensionHook::loadExtensions( $this->type, $this->query, $this->getBaseFilter() ); } protected function createSummary(): array { return [ Html::tag('h2', t('Summary')), $this->createChart() ]; } protected function assemble() { $this->add(ObjectsDetailExtensionHook::injectExtensions([ 190 => $this->createSummary(), 400 => $this->createComments(), 401 => $this->createDowntimes(), 701 => $this->createFeatureToggles() ], $this->createExtensions())); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/PerfDataTable.php000066400000000000000000000101361527064444300250020ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Util\PerfData; use Icinga\Module\Icingadb\Util\PerfDataSet; use ipl\Html\Attributes; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Table; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; class PerfDataTable extends Table { use Translation; protected $defaultAttributes = [ 'class' => 'performance-data-table collapsible', 'data-visible-rows' => 6 ]; /** @var string The perfdata string */ protected $perfdataStr; /** @var int Max labels to show; 0 for no limit */ protected $limit; /** @var string The color indicating the perfdata state */ protected $color; /** * Display the given perfdata string to the user * * @param string $perfdataStr The perfdata string * @param int $limit Max labels to show; 0 for no limit * @param string $color The color indicating the perfdata state */ public function __construct(string $perfdataStr, int $limit = 0, string $color = PerfData::PERFDATA_OK) { $this->perfdataStr = $perfdataStr; $this->limit = $limit; $this->color = $color; } public function assemble() { $pieChartData = PerfDataSet::fromString($this->perfdataStr)->asArray(); $keys = [ '' => '', 'label' => t('Label'), 'value' => t('Value'), 'min' => t('Min'), 'max' => t('Max'), 'warn' => t('Warning'), 'crit' => t('Critical') ]; $containsSparkline = false; foreach ($pieChartData as $perfdata) { if ($perfdata->isVisualizable() || ! $perfdata->isValid()) { $containsSparkline = true; break; } } $headerRow = new HtmlElement('tr'); foreach ($keys as $key => $col) { if (! $containsSparkline && $key === '') { continue; } $headerRow->addHtml(new HtmlElement('th', Attributes::create([ 'class' => $key === 'label' ? 'title' : null ]), Text::create($col))); } $this->getHeader()->addHtml($headerRow); $count = 0; foreach ($pieChartData as $perfdata) { if ($this->limit > 0 && $count === $this->limit) { break; } $count++; $cols = []; if ($containsSparkline) { if ($perfdata->isVisualizable()) { $cols[] = Table::td( HtmlString::create($perfdata->asInlinePie($this->color)->render()), ['class' => 'sparkline-col'] ); } elseif (! $perfdata->isValid()) { $cols[] = Table::td( new Icon( 'triangle-exclamation', [ 'title' => $this->translate( 'Evaluation failed. Performance data is invalid.' ), 'class' => ['invalid-perfdata'] ] ), ['class' => 'sparkline-col'] ); } else { $cols[] = Table::td(''); } } foreach ($perfdata->toArray() as $column => $value) { $cols[] = Table::td( new HtmlElement( 'span', Attributes::create(['class' => $value ? null : 'no-value']), $value ? Text::create($value) : new EmptyState(t('None', 'value')) ), ['class' => $column === 'label' ? 'title' : null] ); } $this->addHtml(Table::tr($cols)); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/QuickActions.php000066400000000000000000000216021527064444300247410ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Common\HostLinks; use Icinga\Module\Icingadb\Common\ServiceLinks; use Icinga\Module\Icingadb\Forms\Command\Object\CheckNowForm; use Icinga\Module\Icingadb\Forms\Command\Object\RemoveAcknowledgementForm; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Notifications\IncidentFinder; use Icinga\Module\Icingadb\Notifications\SubscriptionForm; use Icinga\Module\Notifications\Integrations\Exception\IncidentNotFoundException; use Icinga\Module\Notifications\Integrations\V1\Incidents; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Web\Widget\Icon; class QuickActions extends BaseHtmlElement { use Auth; /** @var Host|Service */ protected $object; protected $tag = 'ul'; protected $defaultAttributes = ['class' => 'quick-actions']; public function __construct($object) { $this->object = $object; } protected function assemble() { $affectsIncidents = $this->getAuth()->hasPermission('icingadb/notifications/usage') && Backend::notificationsSetUp(); if ($this->object->state->is_problem) { if ($this->object->state->is_acknowledged) { if ($this->isGrantedOn('icingadb/command/remove-acknowledgement', $this->object)) { if ($affectsIncidents && ! Incidents::canManage($this->getAuth()->getUser())) { $this->assembleDisabledAction( t('Remove acknowledgement'), 'trash', t( 'You cannot remove this acknowledgement, as there is no Icinga Notifications contact' . ' configured for your account' ) ); } else { $removeAckForm = (new RemoveAcknowledgementForm()) ->setAction($this->getLink('removeAcknowledgement')) ->setObjects([$this->object]); $this->add(Html::tag('li', $removeAckForm)); } } } elseif ($this->isGrantedOn('icingadb/command/acknowledge-problem', $this->object)) { $disabled = false; $title = t('Acknowledge this problem, suppress all future notifications for it and tag it as ' . 'being handled'); if ($affectsIncidents) { if (Incidents::canManage($this->getAuth()->getUser())) { $title = t( 'Acknowledge this problem and tag it as being handled, so that only you and anyone' . ' who subscribes will receive its notifications' ); } else { $disabled = true; $title = t( 'You cannot acknowledge this problem, as there is no Icinga Notifications contact' . ' configured for your account' ); } } if ($disabled) { $this->assembleDisabledAction(t('Acknowledge'), 'check-circle', $title); } else { $this->assembleAction('acknowledge', t('Acknowledge'), 'check-circle', $title); } } } if ($affectsIncidents && $this->isGrantedOn('icingadb/notifications/subscribe', $this->object)) { $user = $this->getAuth()->getUser(); $incident = IncidentFinder::forObject($this->object); try { // If no incident exists this will throw and no subscribe action is added at all $role = $incident->getRole($user); if (! Incidents::canSubscribe($user)) { $this->assembleDisabledAction( t('Subscribe'), 'share', t( 'You cannot subscribe, as there is no Icinga Notifications contact' . ' configured for your account' ) ); } else { if ($role !== 'manager') { $action = $role === 'subscriber' ? 'unsubscribe' : 'subscribe'; $form = (new SubscriptionForm($action === 'subscribe')) ->setAction($this->getLink($action)); if ($incident->getPendingAction() === $action) { $form->setPendingJob($incident->getPendingJobAttributes()); } $this->addHtml(Html::tag('li', $form)); } } } catch (IncidentNotFoundException) { } } if ( $this->isGrantedOn('icingadb/command/schedule-check', $this->object) || ( $this->object->active_checks_enabled && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $this->object) ) ) { $this->add(Html::tag('li', (new CheckNowForm())->setAction($this->getLink('checkNow')))); } if ($this->isGrantedOn('icingadb/command/comment/add', $this->object)) { $this->assembleAction( 'addComment', t('Comment', 'verb'), 'comment', t('Add a new comment') ); } if ($this->isGrantedOn('icingadb/command/send-custom-notification', $this->object)) { $this->assembleAction( 'sendCustomNotification', t('Notification'), 'bell', t('Send a custom notification') ); } if ($this->isGrantedOn('icingadb/command/downtime/schedule', $this->object)) { $this->assembleAction( 'scheduleDowntime', t('Downtime'), 'plug', t('Schedule a downtime to suppress all problem notifications within a specific period of time') ); } if ( $this->isGrantedOn('icingadb/command/schedule-check', $this->object) || ( $this->object->active_checks_enabled && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $this->object) ) ) { $this->assembleAction( 'scheduleCheck', t('Reschedule'), 'calendar', t('Schedule the next active check at a different time than the current one') ); } if ( $this->object->passive_checks_enabled && $this->isGrantedOn('icingadb/command/process-check-result', $this->object) ) { $this->assembleAction( 'processCheckresult', t('Process check result'), 'edit', sprintf( t('Submit a one time or so called passive result for the %s check'), $this->object->checkcommand_name ) ); } } protected function assembleAction(string $action, string $label, string $icon, string $title) { $link = Html::tag( 'a', [ 'href' => $this->getLink($action), 'class' => 'action-link', 'title' => $title, 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ], [ new Icon($icon), $label ] ); $this->add(Html::tag('li', $link)); } /** * Add a disabled action * * @param string $label * @param string $icon * @param string $title * * @return void */ protected function assembleDisabledAction(string $label, string $icon, string $title) { $link = Html::tag( 'a', [ 'class' => 'action-link', 'title' => $title, 'disabled' => true ], [ new Icon($icon), $label ] ); $this->add(Html::tag('li', $link)); } protected function getLink($action) { if ($this->object instanceof Host) { return HostLinks::$action($this->object)->getAbsoluteUrl(); } else { return ServiceLinks::$action($this->object, $this->object->host)->getAbsoluteUrl(); } } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/RedundancyGroupDetail.php000066400000000000000000000106141527064444300266010ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\UnreachableParent; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\I18n\Translation; use ipl\Stdlib\Filter; use ipl\Web\Url; class RedundancyGroupDetail extends BaseHtmlElement { use Auth; use Database; use Translation; /** @var RedundancyGroup The redundancy group */ protected $group; protected $defaultAttributes = [ 'class' => ['redundancygroup-detail'], 'data-pdfexport-page-breaks-at' => 'h2' ]; protected $tag = 'div'; /** * Create a new redundancy group detail widget * * @param RedundancyGroup $group */ public function __construct(RedundancyGroup $group) { $this->group = $group; } /** * Create hook extensions * * @return array */ protected function createExtensions(): array { return ObjectDetailExtensionHook::loadExtensions($this->group); } /** * Create a list of root problems if the redundancy group fails * * @return ?BaseHtmlElement[] */ protected function createRootProblems(): ?array { if ($this->group->state->is_reachable) { return null; } $rootProblems = UnreachableParent::on($this->getDb(), $this->group) ->with([ 'redundancy_group', 'redundancy_group.state', 'host', 'host.state', 'host.icon_image', 'host.state.last_comment', 'service', 'service.state', 'service.icon_image', 'service.state.last_comment', 'service.host', 'service.host.state', ]) ->orderBy([ 'host.state.severity', 'host.state.last_state_change', 'service.state.severity', 'service.state.last_state_change', 'redundancy_group.state.failed', 'redundancy_group.state.last_state_change' ], SORT_DESC); $this->applyRestrictions($rootProblems); return [ HtmlElement::create('h2', null, Text::create($this->translate('Root Problems'))), (new ObjectList($rootProblems))->setEmptyStateMessage( $this->translate('You are not authorized to view these objects.') ) ]; } /** * Create a list of group members * * @return BaseHtmlElement[] */ protected function createGroupMembers(): array { $membersQuery = DependencyNode::on($this->getDb()) ->with([ 'host', 'host.state', 'service', 'service.state', 'service.host', 'service.host.state' ]) ->filter(Filter::equal('child.redundancy_group.id', $this->group->id)) ->limit(5) ->peekAhead(); $this->applyRestrictions($membersQuery); // TODO: Do not execute at this time. The widget may be replaced by a hook in which case the result is unused. $members = $membersQuery->execute(); return [ HtmlElement::create('h2', null, Text::create($this->translate('Group Members'))), (new ObjectList($members)) ->setEmptyStateMessage($this->translate('You are not authorized to view these objects.')), (new ShowMore($members, Url::fromPath('icingadb/redundancygroup/members', ['id' => $this->group->id]))) ->setBaseTarget('_self') ]; } protected function assemble(): void { $this->add(ObjectDetailExtensionHook::injectExtensions([ 0 => $this->createRootProblems(), 510 => $this->createGroupMembers(), ], $this->createExtensions())); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ServiceDetail.php000066400000000000000000000025341527064444300250720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Service; class ServiceDetail extends ObjectDetail { public function __construct(Service $object) { parent::__construct($object); } protected function assemble() { if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { $this->add($this->createPrintHeader()); } $this->add(ObjectDetailExtensionHook::injectExtensions([ 0 => $this->createRootProblems(), 1 => $this->createPluginOutput(), 300 => $this->createActions(), 301 => $this->createNotes(), 400 => $this->createComments(), 401 => $this->createDowntimes(), 500 => $this->createGroups(), 501 => $this->createNotificationRecipients(), 502 => $this->createConfiguredContacts(), 510 => $this->createAffectedObjects(), 600 => $this->createCheckStatistics(), 601 => $this->createPerformanceData(), 700 => $this->createCustomVars(), 701 => $this->createFeatureToggles() ], $this->createExtensions())); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ServiceInspectionDetail.php000066400000000000000000000011011527064444300271130ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\ObjectInspectionDetail; class ServiceInspectionDetail extends ObjectInspectionDetail { protected function assemble() { $this->add([ $this->createSourceLocation(), $this->createLastCheckResult(), $this->createAttributes(), $this->createCustomVariables(), $this->createRedisInfo() ]); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ServiceMetaInfo.php000066400000000000000000000040241527064444300253660ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Date\DateFormatter; use Icinga\Module\Icingadb\Model\Service; use ipl\I18n\Translation; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Web\Widget\Icon; class ServiceMetaInfo extends BaseHtmlElement { use Translation; protected $tag = 'div'; protected $defaultAttributes = ['class' => 'object-meta-info']; /** @var Service */ protected $service; public function __construct(Service $service) { $this->service = $service; } protected function assemble() { $this->addHtml( new VerticalKeyValue('service.name', $this->service->name), new VerticalKeyValue( 'last_state_change', isset($this->service->state->last_state_change) ? DateFormatter::formatDateTime($this->service->state->last_state_change->getTimestamp()) : (new EmptyState($this->translate('n. a.')))->setTag('span') ) ); $collapsible = new HtmlElement('div', Attributes::create([ 'class' => 'collapsible', 'id' => 'object-meta-info', 'data-toggle-element' => '.object-meta-info-control', 'data-visible-height' => 0 ])); $renderHelper = new HtmlDocument(); $renderHelper->addHtml( $this, new HtmlElement( 'button', Attributes::create(['class' => 'object-meta-info-control']), new Icon('angle-double-up', ['class' => 'collapse-icon']), new Icon('angle-double-down', ['class' => 'expand-icon']) ) ); $this->addWrapper($collapsible); $this->addWrapper($renderHelper); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/ServiceStatistics.php000066400000000000000000000055751527064444300260320ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Common\HostLinks; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Widget\ServiceStateBadges; use ipl\Html\ValidHtml; use ipl\Web\Url; use ipl\Web\Widget\VerticalKeyValue; use ipl\Html\HtmlString; use ipl\Web\Widget\Link; class ServiceStatistics extends ObjectStatistics { protected $summary; /** @var ?Url */ protected ?Url $url; public function __construct($summary) { $this->summary = $summary; } /** * Return the URL pointing to all matching services. * * If not set, the URL of the services overview is returned as fallback. * * @return Url */ public function getUrl(): Url { return $this->url ?? Links::services(); } /** * Set the URL pointing to all matching services. * * @param Url $url The URL to set. * * @return $this */ public function setUrl(Url $url): self { $this->url = $url; return $this; } protected function createDonut(): ValidHtml { $donut = (new Donut()) ->addSlice($this->summary->services_ok, ['class' => 'slice-state-ok']) ->addSlice($this->summary->services_warning_handled, ['class' => 'slice-state-warning-handled']) ->addSlice($this->summary->services_warning_unhandled, ['class' => 'slice-state-warning']) ->addSlice($this->summary->services_critical_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->services_critical_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->services_unknown_handled, ['class' => 'slice-state-unknown-handled']) ->addSlice($this->summary->services_unknown_unhandled, ['class' => 'slice-state-unknown']) ->addSlice($this->summary->services_pending, ['class' => 'slice-state-pending']); return HtmlString::create($donut->render()); } protected function createTotal(): ValidHtml { $url = $this->getUrl(); if ($this->hasBaseFilter()) { $url->setFilter($this->getBaseFilter()); } return new Link( (new VerticalKeyValue( tp('Service', 'Services', $this->summary->services_total), $this->shortenAmount($this->summary->services_total) ))->setAttribute('title', $this->summary->services_total), $url ); } protected function createBadges(): ValidHtml { $badges = new ServiceStateBadges($this->summary); if ($this->hasBaseFilter()) { $badges->setBaseFilter($this->getBaseFilter()); } return $badges->setUrl($this->getUrl()); } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/UserDetail.php000066400000000000000000000146401527064444300244110ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; class UserDetail extends BaseHtmlElement { use Auth; use Database; /** @var User The given user */ protected $user; protected $defaultAttributes = ['class' => 'object-detail']; protected $tag = 'div'; public function __construct(User $user) { $this->user = $user; } protected function createCustomVars(): array { $content = [new HtmlElement('h2', null, Text::create(t('Custom Variables')))]; $flattenedVars = $this->user->customvar_flat; $this->applyRestrictions($flattenedVars); $vars = $this->user->customvar_flat->getModel()->unflattenVars($flattenedVars); if (! empty($vars)) { $content[] = new HtmlElement('div', Attributes::create([ 'id' => 'user-customvars', 'class' => 'collapsible', 'data-visible-height' => 200 ]), new CustomVarTable($vars, $this->user)); } else { $content[] = new EmptyState(t('No custom variables configured.')); } return $content; } protected function createUserDetail(): array { list($hostStates, $serviceStates) = $this->separateStates($this->user->states); $hostStates = implode(', ', $this->localizeStates($hostStates)); $serviceStates = implode(', ', $this->localizeStates($serviceStates)); $types = implode(', ', $this->localizeTypes($this->user->types)); return [ new HtmlElement('h2', null, Text::create(t('Details'))), new HorizontalKeyValue(t('Name'), $this->user->name), new HorizontalKeyValue( t('Timeperiod'), $this->user->timeperiod->display_name ?: new EmptyState(t('None', 'timeperiod')) ), new HorizontalKeyValue(t('Notifications Enabled'), $this->user->notifications_enabled ? t('Yes') : t('No')), new HorizontalKeyValue(t('E-Mail'), $this->user->email ?: new EmptyState(t('None', 'address'))), new HorizontalKeyValue(t('Pager'), $this->user->pager ?: new EmptyState(t('None', 'phone-number'))), new HorizontalKeyValue(t('Host States'), $hostStates ?: t('All')), new HorizontalKeyValue(t('Service States'), $serviceStates ?: t('All')), new HorizontalKeyValue(t('Types'), $types ?: t('All')) ]; } protected function createUsergroupList(): array { $userGroups = $this->user->usergroup->limit(6)->peekAhead()->execute(); $showMoreLink = (new ShowMore( $userGroups, Links::usergroups()->addParams(['user.name' => $this->user->name]) ))->setBaseTarget('_next'); return [ new HtmlElement('h2', null, Text::create(t('Groups'))), new ObjectList($userGroups), $showMoreLink ]; } protected function createExtensions(): array { return ObjectDetailExtensionHook::loadExtensions($this->user); } protected function assemble() { $this->add(ObjectDetailExtensionHook::injectExtensions([ 200 => $this->createUserDetail(), 500 => $this->createUsergroupList(), 700 => $this->createCustomVars() ], $this->createExtensions())); } private function localizeTypes(array $types): array { $localizedTypes = []; foreach ($types as $type) { switch ($type) { case 'problem': $localizedTypes[] = t('Problem'); break; case 'ack': $localizedTypes[] = t('Acknowledgement'); break; case 'recovery': $localizedTypes[] = t('Recovery'); break; case 'downtime_start': $localizedTypes[] = t('Downtime Start'); break; case 'downtime_end': $localizedTypes[] = t('Downtime End'); break; case 'downtime_removed': $localizedTypes[] = t('Downtime Removed'); break; case 'flapping_start': $localizedTypes[] = t('Flapping Start'); break; case 'flapping_end': $localizedTypes[] = t('Flapping End'); break; case 'custom': $localizedTypes[] = t('Custom'); break; } } return $localizedTypes; } private function localizeStates(array $states): array { $localizedState = []; foreach ($states as $state) { switch ($state) { case 'up': $localizedState[] = t('Up'); break; case 'down': $localizedState[] = t('Down'); break; case 'ok': $localizedState[] = t('Ok'); break; case 'warning': $localizedState[] = t('Warning'); break; case 'critical': $localizedState[] = t('Critical'); break; case 'unknown': $localizedState[] = t('Unknown'); break; } } return $localizedState; } private function separateStates(array $states): array { $hostStates = []; $serviceStates = []; foreach ($states as $state) { if ($state === 'Up' || $state === 'Down') { $hostStates[] = $state; } else { $serviceStates[] = $state; } } return [$hostStates, $serviceStates]; } } icingadb-web-1.5.0/library/Icingadb/Widget/Detail/UsergroupDetail.php000066400000000000000000000057311527064444300254670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\Detail; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Database; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Hook\ExtensionHook\ObjectDetailExtensionHook; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Widget\ItemList\ObjectList; use Icinga\Module\Icingadb\Widget\ShowMore; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Web\Url; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\HorizontalKeyValue; class UsergroupDetail extends BaseHtmlElement { use Auth; use Database; /** @var Usergroup The given user group */ protected $usergroup; protected $defaultAttributes = ['class' => 'object-detail']; protected $tag = 'div'; public function __construct(Usergroup $usergroup) { $this->usergroup = $usergroup; } protected function createPrintHeader() { return [ new HtmlElement('h2', null, Text::create(t('Details'))), new HorizontalKeyValue(t('Name'), $this->usergroup->name) ]; } protected function createCustomVars(): array { $content = [new HtmlElement('h2', null, Text::create(t('Custom Variables')))]; $flattenedVars = $this->usergroup->customvar_flat; $this->applyRestrictions($flattenedVars); $vars = $this->usergroup->customvar_flat->getModel()->unflattenVars($flattenedVars); if (! empty($vars)) { $content[] = new HtmlElement('div', Attributes::create([ 'id' => 'usergroup-customvars', 'class' => 'collapsible', 'data-visible-height' => 200 ]), new CustomVarTable($vars, $this->usergroup)); } else { $content[] = new EmptyState(t('No custom variables configured.')); } return $content; } protected function createUserList(): array { $users = $this->usergroup->user->limit(6)->peekAhead()->execute(); $showMoreLink = (new ShowMore( $users, Links::users()->addParams(['usergroup.name' => $this->usergroup->name]) ))->setBaseTarget('_next'); return [ new HtmlElement('h2', null, Text::create(t('Contacts'))), new ObjectList($users), $showMoreLink ]; } protected function createExtensions(): array { return ObjectDetailExtensionHook::loadExtensions($this->usergroup); } protected function assemble() { if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { $this->add($this->createPrintHeader()); } $this->add(ObjectDetailExtensionHook::injectExtensions([ 500 => $this->createUserList(), 700 => $this->createCustomVars() ], $this->createExtensions())); } } icingadb-web-1.5.0/library/Icingadb/Widget/Health.php000066400000000000000000000102751527064444300223530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\ProvidedHook\IcingaHealth; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\I18n\Translation; use ipl\Web\Widget\TimeAgo; use ipl\Web\Widget\TimeSince; use ipl\Web\Widget\VerticalKeyValue; class Health extends BaseHtmlElement { use Auth; use Translation; protected $data; protected $tag = 'section'; public function __construct($data) { $this->data = $data; } protected function assemble() { if ( ! isset($this->data->icingadb_version) || version_compare( IcingaHealth::normalizeVersion($this->data->icingadb_version), IcingaHealth::REQUIRED_ICINGADB_VERSION, '<' ) ) { $this->addHtml(Html::tag('div', ['class' => 'icinga-health down'], [ sprintf( $this->translate('Icinga DB is outdated, please upgrade to version %s or later.'), IcingaHealth::REQUIRED_ICINGADB_VERSION ) ])); } elseif ( isset($this->data->notifications_healthy) && ! $this->data->notifications_healthy && $this->getAuth()->hasPermission('icingadb/notifications/usage') ) { if (! Backend::icinga2SupportsNotifications($this->data->icinga2_version)) { $reason = $this->translate( 'Notifications are not transmitted because the Icinga 2 version is outdated.' ); } else { $reason = $this->translate( 'Notification transmission has been interrupted.' . ' Make sure Icinga DB is able to connect to Icinga Notifications.' ); } $this->addHtml(Html::tag('div', ['class' => 'icinga-health down'], [$reason])); } elseif ($this->data->heartbeat->getTimestamp() > time() - 60) { $this->add(Html::tag('div', ['class' => 'icinga-health up'], [ Html::sprintf( $this->translate('Icinga 2 is up and running %s', '...since '), new TimeSince($this->data->icinga2_start_time->getTimestamp()) ) ])); } else { $this->add(Html::tag('div', ['class' => 'icinga-health down'], [ Html::sprintf( $this->translate('Icinga 2 or Icinga DB is not running %s', '...since '), new TimeSince($this->data->heartbeat->getTimestamp()) ) ])); } $icingaInfo = Html::tag('div', ['class' => 'icinga-info'], [ new VerticalKeyValue( $this->translate('Icinga 2 Version'), $this->data->icinga2_version ), new VerticalKeyValue( $this->translate('Icinga 2 Start Time'), new TimeAgo($this->data->icinga2_start_time->getTimestamp()) ), new VerticalKeyValue( $this->translate('Last Heartbeat'), new TimeAgo($this->data->heartbeat->getTimestamp()) ), new VerticalKeyValue( $this->translate('Active Icinga 2 Endpoint'), $this->data->endpoint->name ?: t('N/A') ), new VerticalKeyValue( $this->translate('Icinga DB Version'), $this->data->icingadb_version ?? t('N/A') ), new VerticalKeyValue( $this->translate('Active Icinga Web Endpoint'), gethostname() ?: t('N/A') ), isset($this->data->notifications_healthy) ? new VerticalKeyValue( $this->translate('Icinga Notifications Connection'), $this->data->notifications_healthy ? $this->translate('Healthy') : $this->translate('Unhealthy') ) : null ]); $this->add($icingaInfo); } } icingadb-web-1.5.0/library/Icingadb/Widget/HostStateBadges.php000066400000000000000000000020051527064444300241620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\StateBadges; use ipl\Web\Url; class HostStateBadges extends StateBadges { protected function getBaseUrl(): Url { return Links::hosts(); } protected function getType(): string { return 'host'; } protected function getPrefix(): string { return 'hosts'; } protected function getStateInt(string $state): int { return HostStates::int($state); } protected function assemble() { $this->addAttributes(['class' => 'host-state-badges']); $this->add(array_filter([ $this->createGroup('down'), $this->createBadge('unknown'), $this->createBadge('up'), $this->createBadge('pending') ])); } } icingadb-web-1.5.0/library/Icingadb/Widget/HostStatusBar.php000066400000000000000000000012061527064444300237060ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\BaseStatusBar; use ipl\Html\BaseHtmlElement; class HostStatusBar extends BaseStatusBar { protected function assembleTotal(BaseHtmlElement $total): void { $total->add(sprintf(tp('%d Host', '%d Hosts', $this->summary->hosts_total), $this->summary->hosts_total)); } protected function createStateBadges(): BaseHtmlElement { return (new HostStateBadges($this->summary))->setBaseFilter($this->getBaseFilter()); } } icingadb-web-1.5.0/library/Icingadb/Widget/HostSummaryDonut.php000066400000000000000000000053671527064444300244610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\HoststateSummary; use Icinga\Module\Icingadb\Model\TacticalStateSummary; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\TemplateString; use ipl\Html\Text; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Common\Card; class HostSummaryDonut extends Card { use BaseFilter; protected $defaultAttributes = ['class' => 'donut-container', 'data-base-target' => '_next']; /** @var HoststateSummary|TacticalStateSummary */ protected $summary; public function __construct(HoststateSummary|TacticalStateSummary $summary) { $this->summary = $summary; } protected function assembleBody(BaseHtmlElement $body) { $labelBigUrlFilter = Filter::all( Filter::equal('host.state.soft_state', 1), Filter::equal('host.state.is_handled', 'n') ); if ($this->hasBaseFilter()) { $labelBigUrlFilter->add($this->getBaseFilter()); } $donut = (new Donut()) ->addSlice($this->summary->hosts_up, ['class' => 'slice-state-ok']) ->addSlice($this->summary->hosts_down_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->hosts_down_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->hosts_pending, ['class' => 'slice-state-pending']) ->setLabelBig((string) $this->summary->hosts_down_unhandled) ->setLabelBigUrl(Links::hosts()->setFilter($labelBigUrlFilter)->addParams([ 'sort' => 'host.state.last_state_change' ])) ->setLabelBigEyeCatching($this->summary->hosts_down_unhandled > 0) ->setLabelSmall(t('Down')); $body->addHtml( new HtmlElement('div', Attributes::create(['class' => 'donut']), new HtmlString($donut->render())) ); } protected function assembleFooter(BaseHtmlElement $footer) { $footer->addHtml((new HostStateBadges($this->summary))->setBaseFilter($this->getBaseFilter())); } protected function assembleHeader(BaseHtmlElement $header) { $header->addHtml( new HtmlElement('h2', null, Text::create(t('Hosts'))), new HtmlElement('span', Attributes::create(['class' => 'meta']), TemplateString::create( t('{{#total}}Total{{/total}} %d'), ['total' => new HtmlElement('span')], (int) $this->summary->hosts_total )) ); } } icingadb-web-1.5.0/library/Icingadb/Widget/IconImage.php000066400000000000000000000035511527064444300230000ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlDocument; use ipl\Web\Url; use ipl\Web\Widget\Icon; class IconImage extends BaseHtmlElement { /** @var string */ protected $source; /** @var ?string */ protected $alt; protected $tag = 'img'; /** * Create a new icon image * * @param string $source * @param ?string $alt The alternative text */ public function __construct(string $source, ?string $alt) { $this->source = $source; $this->alt = $alt; } public function renderUnwrapped() { if (! $this->getAttributes()->has('src')) { // If it's an icon we don't need the tag return ''; } return parent::renderUnwrapped(); } protected function assemble() { $src = $this->source; if (strpos($src, '.') === false) { $this->setWrapper((new HtmlDocument())->addHtml(new Icon($src))); return; } if (strpos($src, '/') === false) { $src = 'img/icons/' . $src; } if (getenv('ICINGAWEB_EXPORT_FORMAT') === 'pdf') { $srcUrl = Url::fromPath($src); $srcPath = $srcUrl->getRelativeUrl(); if (! $srcUrl->isExternal() && file_exists($srcPath) && is_file($srcPath)) { $mimeType = @mime_content_type($srcPath); $content = @file_get_contents($srcPath); if ($mimeType !== false && $content !== false) { $src = "data:$mimeType;base64," . base64_encode($content); } } } $this->addAttributes([ 'src' => $src, 'alt' => $this->alt ]); } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/000077500000000000000000000000001527064444300221625ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/AlertList.php000066400000000000000000000015731527064444300246040ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use DateTimeInterface; use Icinga\Module\Icingadb\View\AlertRenderer; use ipl\Orm\Query; use ipl\Orm\ResultSet; use ipl\Web\Widget\ItemList; class AlertList extends ObjectList { /** * Create a list of alerts * * @param ResultSet|Query $data * @param bool $useRelativeTimestamps Whether to use relative timestamps * @param ?DateTimeInterface $referenceTime Absolute timestamps on the same day as this omit the date */ public function __construct( ResultSet|Query $data, bool $useRelativeTimestamps = true, ?DateTimeInterface $referenceTime = null ) { ItemList::__construct($data, new AlertRenderer($useRelativeTimestamps, $referenceTime)); } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/CommandTransportList.php000066400000000000000000000013031527064444300270170ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Module\Icingadb\Common\DetailActions; use ipl\Web\Common\BaseOrderedItemList; use ipl\Web\Url; class CommandTransportList extends BaseOrderedItemList { use DetailActions; protected function init(): void { $this->getAttributes()->add('class', 'command-transport-list'); $this->initializeDetailActions(); $this->setDetailUrl(Url::fromPath('icingadb/command-transport/show')); } protected function getItemClass(): string { return CommandTransportListItem::class; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/CommandTransportListItem.php000066400000000000000000000044071527064444300276460ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Stdlib\Filter; use ipl\Web\Common\BaseOrderedListItem; use ipl\Web\Url; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; class CommandTransportListItem extends BaseOrderedListItem { protected function init(): void { $this->list->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)); } protected function assembleHeader(BaseHtmlElement $header): void { } protected function assembleMain(BaseHtmlElement $main): void { $main->addHtml(new Link( new HtmlElement('strong', null, Text::create($this->item->name)), Url::fromPath('icingadb/command-transport/show', ['name' => $this->item->name]) )); $main->addHtml(new Link( new Icon('trash', ['title' => sprintf(t('Remove command transport "%s"'), $this->item->name)]), Url::fromPath('icingadb/command-transport/remove', ['name' => $this->item->name]), [ 'class' => 'pull-right action-link', 'data-icinga-modal' => true, 'data-no-icinga-ajax' => true ] )); if ($this->getOrder() + 1 < $this->list->count()) { $main->addHtml((new Link( new Icon('arrow-down'), Url::fromPath('icingadb/command-transport/sort', [ 'name' => $this->item->name, 'pos' => $this->getOrder() + 1 ]), ['class' => 'pull-right action-link'] ))->setBaseTarget('_self')); } if ($this->getOrder() > 0) { $main->addHtml((new Link( new Icon('arrow-up'), Url::fromPath('icingadb/command-transport/sort', [ 'name' => $this->item->name, 'pos' => $this->getOrder() - 1 ]), ['class' => 'pull-right action-link'] ))->setBaseTarget('_self')); } } protected function createVisual(): ?BaseHtmlElement { return null; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/HistoryObjectList.php000066400000000000000000000071621527064444300263250ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\Auth; use Icinga\Module\Icingadb\Common\LoadMore; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\View\EventRenderer; use Icinga\Module\Icingadb\View\NotificationRenderer; use IntlDateFormatter; use ipl\Html\Attributes; use ipl\Html\HtmlDocument; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Orm\Model; use ipl\Orm\ResultSet; use ipl\Web\Layout\ItemLayout; use ipl\Web\Layout\MinimalItemLayout; use ipl\Web\Widget\ItemList; use Locale; /** * HistoryObjectList * * @template Item of NotificationHistory|History * * @extends ObjectList */ class HistoryObjectList extends ObjectList { use Auth; use LoadMore; /** @var ?int The timestamp of the recently added list item, used to detect day changes */ protected ?int $previousTimeStamp = null; /** * Create a list of History or NotificationHistory objects with a Load more link and add a separator between days. * * @param ResultSet $data * @param ?int $previousTimeStamp The timestamp of the recently added list item, used to detect day changes * @param bool $useRelativeTimestamps */ public function __construct(ResultSet $data, ?int $previousTimeStamp = null, bool $useRelativeTimestamps = false) { ItemList::__construct($data, function (Model $item) use ($useRelativeTimestamps) { if ($item instanceof NotificationHistory) { return new NotificationRenderer($useRelativeTimestamps); } elseif ($item instanceof History) { return new EventRenderer($useRelativeTimestamps); } throw new NotImplementedError('Not implemented'); }); $this->data = $this->getIterator($data); $this->previousTimeStamp = $previousTimeStamp; } protected function init(): void { parent::init(); $formatter = new IntlDateFormatter( Locale::getDefault(), IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE ); $this->on(ItemList::BEFORE_ITEM_ADD, function ($item, $data) use ($formatter) { if ($data instanceof NotificationHistory) { $timestamp = $data->send_time->getTimestamp(); } else { $timestamp = $data->event_time->getTimestamp(); } if ( $this->previousTimeStamp === null || $formatter->format($this->previousTimeStamp) !== $formatter->format($timestamp) ) { $this->addHtml(new HtmlElement( 'li', new Attributes(['class' => ['day-separator']]), new Text($formatter->format($timestamp)) )); } $this->previousTimeStamp = $timestamp; }); $this->on( HtmlDocument::ON_ASSEMBLED, fn() => $this->loadMoreUrl->setParam('last-entry', $this->previousTimeStamp) ); } public function getItemLayout($item): ItemLayout { $layout = parent::getItemLayout($item); if ( ! empty($item->alert_count) && $this->getAuth()->hasPermission('icingadb/notifications/usage') && $layout->getName() !== MinimalItemLayout::NAME ) { $layout->after(ItemLayout::MAIN, 'sent-notifications'); } return $layout; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/ObjectList.php000066400000000000000000000227001527064444300247360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\AlertHistory; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\DependencyNode; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\Model\History; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\NotificationHistory; use Icinga\Module\Icingadb\Model\RedundancyGroup; use Icinga\Module\Icingadb\Model\Service; use Icinga\Module\Icingadb\Model\User; use Icinga\Module\Icingadb\Model\Usergroup; use Icinga\Module\Icingadb\Redis\VolatileStateResults; use Icinga\Module\Icingadb\View\AlertRenderer; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; use Icinga\Module\Icingadb\View\HostRenderer; use Icinga\Module\Icingadb\View\RedundancyGroupRenderer; use Icinga\Module\Icingadb\View\ServiceRenderer; use Icinga\Module\Icingadb\View\UsergroupRenderer; use Icinga\Module\Icingadb\View\UserRenderer; use Icinga\Module\Icingadb\Widget\Notice; use InvalidArgumentException; use ipl\Html\HtmlDocument; use ipl\Orm\Model; use ipl\Stdlib\Filter; use ipl\Web\Layout\DetailedItemLayout; use ipl\Web\Layout\ItemLayout; use ipl\Web\Layout\MinimalItemLayout; use ipl\Web\Url; use ipl\Web\Widget\ItemList; /** * ObjectList * * Create a list of icingadb objects * * @template Result of DependencyNode|Service|Host|Usergroup|User|Comment|Downtime|AlertHistory * @template Item of RedundancyGroup|Service|Host|Usergroup|User|Comment|Downtime|AlertHistory = Result * * @extends ItemList */ class ObjectList extends ItemList { use DetailActions; /** @var bool Whether the list contains at least one item with an icon_image */ protected $hasIconImages = false; public function __construct($data) { parent::__construct($data, function (Model $item) { if ($item instanceof RedundancyGroup) { return new RedundancyGroupRenderer(); } elseif ($item instanceof Service) { return new ServiceRenderer(); } elseif ($item instanceof Host) { return new HostRenderer(); } elseif ($item instanceof Usergroup) { return new UsergroupRenderer(); } elseif ($item instanceof User) { return new UserRenderer(); } elseif ($item instanceof Comment) { return new CommentRenderer(); } elseif ($item instanceof Downtime) { return new DowntimeRenderer(); } elseif ($item instanceof AlertHistory) { return new AlertRenderer(); } throw new NotImplementedError('Not implemented'); }); } protected function init(): void { $this->initializeDetailActions(); } /** * Get whether the list contains at least one item with an icon_image * * @return bool */ public function hasIconImages(): bool { return $this->hasIconImages; } /** * Set whether the list contains at least one item with an icon_image * * @param bool $hasIconImages * * @return $this */ public function setHasIconImages(bool $hasIconImages): self { $this->hasIconImages = $hasIconImages; return $this; } /** * Set the view mode * * @param 'minimal'|'common'|'detailed' $mode * * @return $this */ public function setViewMode(string $mode): self { switch ($mode) { case 'minimal': $this->setItemLayoutClass(MinimalItemLayout::class); break; case 'detailed': $this->setItemLayoutClass(DetailedItemLayout::class); break; case 'common': $this->setItemLayoutClass(ItemLayout::class); break; default: throw new InvalidArgumentException('Invalid view mode'); } return $this; } public function getItemLayout($item): ItemLayout { $layout = parent::getItemLayout($item); if ($this->hasIconImages()) { $layout->after(ItemLayout::VISUAL, 'icon-image'); } if ($item instanceof Downtime) { $layout->before(ItemLayout::HEADER, 'progress'); } return $layout; } protected function createListItem(object $data) { $isDependencyNodeList = false; if ($data instanceof DependencyNode) { $isDependencyNodeList = true; if (isset($data->redundancy_group_id)) { $object = $data->redundancy_group; } else { $object = isset($data->service_id) ? $data->service : $data->host; } } else { $object = $data; } if (isset($object->icon_image->icon_image)) { $this->setHasIconImages(true); } $item = parent::createListItem($object); if ($this->getDetailActionsDisabled()) { return $item; } switch (true) { case $object instanceof RedundancyGroup: $this->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); break; case $object instanceof Service: $this ->setDetailUrl(Url::fromPath('icingadb/service')) ->addDetailFilterAttribute( $item, Filter::all( Filter::equal('name', $object->name), Filter::equal('host.name', $object->host->name) ) ); if (! $isDependencyNodeList) { $this ->setMultiselectUrl(Links::servicesDetails()) ->addMultiSelectFilterAttribute( $item, Filter::all( Filter::equal('service.name', $object->name), Filter::equal('host.name', $object->host->name) ) ); } break; case $object instanceof Host: $this ->setDetailUrl(Url::fromPath('icingadb/host')) ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); if (! $isDependencyNodeList) { $this ->setMultiselectUrl(Links::hostsDetails()) ->addMultiSelectFilterAttribute($item, Filter::equal('host.name', $object->name)); } break; case $data instanceof User: $this ->setDetailUrl(Url::fromPath('icingadb/contact')) ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); break; case $object instanceof Usergroup: $this ->setDetailUrl(Url::fromPath('icingadb/contactgroup')) ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)); break; case $object instanceof Comment: $this ->setDetailUrl(Url::fromPath('icingadb/comment')) ->setMultiselectUrl(Links::commentsDetails()) ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)) ->addMultiSelectFilterAttribute($item, Filter::equal('comment.name', $object->name)); break; case $object instanceof Downtime: $this ->setDetailUrl(Url::fromPath('icingadb/downtime')) ->setMultiselectUrl(Links::downtimesDetails()) ->addDetailFilterAttribute($item, Filter::equal('name', $object->name)) ->addMultiSelectFilterAttribute($item, Filter::equal('downtime.name', $object->name)); break; case $object instanceof NotificationHistory: $this ->setDetailUrl(Url::fromPath('icingadb/event')) ->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->history->id))); break; case $object instanceof History: $this ->setDetailUrl(Url::fromPath('icingadb/event')) ->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); break; case $object instanceof AlertHistory: $this ->setDetailUrl(Url::fromPath('icingadb/alert')) ->addDetailFilterAttribute($item, Filter::equal('id', bin2hex($object->id))); break; } return $item; } protected function assemble(): void { parent::assemble(); if ($this->data instanceof VolatileStateResults && $this->data->isRedisUnavailable()) { $this->prependWrapper((new HtmlDocument())->addHtml(new Notice( $this->translate('Redis is currently unavailable. The shown information might be outdated.') ))); } } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/PageSeparatorItem.php000066400000000000000000000014701527064444300262510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; class PageSeparatorItem extends BaseHtmlElement { protected $defaultAttributes = ['class' => 'list-item page-separator']; /** @var int */ protected $pageNumber; /** @var string */ protected $tag = 'li'; public function __construct(int $pageNumber) { $this->pageNumber = $pageNumber; } protected function assemble() { $this->add(Html::tag( 'a', [ 'id' => 'page-' . $this->pageNumber, 'data-icinga-no-scroll-on-focus' => true ], $this->pageNumber )); } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemList/TicketLinkObjectList.php000066400000000000000000000021051527064444300267150ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemList; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Model\Comment; use Icinga\Module\Icingadb\Model\Downtime; use Icinga\Module\Icingadb\View\CommentRenderer; use Icinga\Module\Icingadb\View\DowntimeRenderer; use ipl\Orm\Model; use ipl\Web\Widget\ItemList; /** * TicketLinkObjectList * * Create a list of icingadb objects with ticket links * * @template Result of Comment|Downtime * * @extends ObjectList */ class TicketLinkObjectList extends ObjectList { public function __construct($data) { ItemList::__construct($data, function (Model $item) { if ($item instanceof Comment) { return (new CommentRenderer())->setNoObjectLink(); } elseif ($item instanceof Downtime) { return (new DowntimeRenderer())->setNoObjectLink(); } throw new NotImplementedError('Not implemented'); }); } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/000077500000000000000000000000001527064444300222765ustar00rootroot00000000000000icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/BaseStateRowItem.php000066400000000000000000000056541527064444300262030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Orm\Model; /** @todo Figure out what this might (should) have in common with the new BaseTableRowItem implementation */ abstract class BaseStateRowItem extends BaseHtmlElement { protected $defaultAttributes = ['class' => 'row-item']; /** @var Model */ protected $item; /** @var StateItemTable */ protected $list; protected $tag = 'tr'; /** * Create a new row item * * @param Model $item * @param StateItemTable $list */ public function __construct(Model $item, StateItemTable $list) { $this->item = $item; $this->list = $list; $this->init(); } /** * Initialize the row item * * If you want to adjust the row item after construction, override this method. */ protected function init() { } abstract protected function assembleVisual(BaseHtmlElement $visual); abstract protected function assembleCell(BaseHtmlElement $cell, string $path, $value); protected function createVisual(): BaseHtmlElement { $visual = new HtmlElement('td', Attributes::create(['class' => 'visual'])); $this->assembleVisual($visual); return $visual; } protected function assemble() { $this->addHtml($this->createVisual()); foreach ($this->list->getColumns() as $columnPath => $_) { $steps = explode('.', $columnPath); if ($steps[0] === $this->item->getTableName()) { array_shift($steps); $columnPath = implode('.', $steps); } $column = null; $subject = $this->item; foreach ($steps as $i => $step) { if (isset($subject->$step)) { if ($subject->$step instanceof Model) { $subject = $subject->$step; } else { $column = $step; } } else { $columnCandidate = implode('.', array_slice($steps, $i)); if (isset($subject->$columnCandidate)) { $column = $columnCandidate; } else { break; } } } $value = null; if ($column !== null) { $value = $subject->$column; if (is_array($value)) { $value = empty($value) ? null : implode(',', $value); } } $cell = new HtmlElement('td'); if ($value !== null) { $this->assembleCell($cell, $columnPath, $value); } $this->addHtml($cell); } } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/HostItemTable.php000066400000000000000000000013511527064444300255130ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Common\Links; use ipl\Web\Url; class HostItemTable extends StateItemTable { use DetailActions; protected function init() { $this->initializeDetailActions(); $this->setMultiselectUrl(Links::hostsDetails()); $this->setDetailUrl(Url::fromPath('icingadb/host')); } protected function getItemClass(): string { return HostRowItem::class; } protected function getVisualColumn(): string { return 'host.state.severity'; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/HostRowItem.php000066400000000000000000000030071527064444300252330ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Host; use ipl\Html\BaseHtmlElement; use ipl\Stdlib\Filter; use ipl\Web\Widget\Link; class HostRowItem extends StateRowItem { /** @var HostItemTable */ protected $list; /** @var Host */ protected $item; protected function init() { parent::init(); $this->list->addDetailFilterAttribute($this, Filter::equal('name', $this->item->name)) ->addMultiselectFilterAttribute($this, Filter::equal('host.name', $this->item->name)); } protected function assembleCell(BaseHtmlElement $cell, string $path, $value) { switch ($path) { case 'name': case 'display_name': $cell->addHtml(new Link($this->item->$path, Links::host($this->item), [ 'class' => 'subject', 'title' => $this->item->$path ])); break; case 'service.name': case 'service.display_name': $column = substr($path, 8); $cell->addHtml(new Link( $this->item->service->$column, Links::service($this->item->service, $this->item) )); break; default: parent::assembleCell($cell, $path, $value); } } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/ObjectGrid.php000066400000000000000000000077601527064444300250350ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use InvalidArgumentException; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Orm\ResultSet; use ipl\Stdlib\Filter; use ipl\Web\Common\ItemRenderer; use ipl\Web\Layout\ItemLayout; use ipl\Web\Url; use ipl\Web\Widget\EmptyStateBar; /** * ObjectGrid * * @internal The only reason this class exists is due to the detail actions. In case those are part of the ipl * some time, this class is obsolete, and we must be able to safely drop it. * * @template Item of Hostgroupsummary|ServicegroupSummary */ class ObjectGrid extends BaseHtmlElement { use DetailActions; use Translation; protected $defaultAttributes = [ 'class' => 'object-grid', 'data-base-target' => '_next' ]; protected $tag = 'ul'; /** @var ItemRenderer */ protected $itemRenderer; /** @var ResultSet|iterable */ protected $data; /** @var ?ValidHtml Message to show if the list is empty */ protected $emptyStateMessage; /** * Create a new object grid * * @param ResultSet|iterable $data * @param ItemRenderer $renderer */ public function __construct($data, ItemRenderer $renderer) { if (! is_iterable($data)) { throw new InvalidArgumentException('Data must be an array or an instance of Traversable'); } $this->data = $data; $this->itemRenderer = $renderer; $this->initializeDetailActions(); } /** * Get message to show if the list is empty * * @return ValidHtml */ public function getEmptyStateMessage(): ValidHtml { if ($this->emptyStateMessage === null) { return new Text($this->translate('No items found.')); } return $this->emptyStateMessage; } /** * Set message to show if the list is empty * * @param mixed $message If empty, the default message is used * * @return $this */ public function setEmptyStateMessage($message): self { if (empty($message)) { $this->emptyStateMessage = null; } else { $this->emptyStateMessage = Html::wantHtml($message); } return $this; } /** * Create a list item for the given data * * @param Item $data * * @return ValidHtml * * @throws NotImplementedError When the data is not of the expected type */ protected function createListItem(object $data): ValidHtml { $layout = new ItemLayout($data, $this->itemRenderer); $item = new HtmlElement('li', $layout->getAttributes(), $layout); if ($this->getDetailActionsDisabled()) { return $item; } switch (true) { case $data instanceof Hostgroupsummary: $this->setDetailUrl(Url::fromPath('icingadb/hostgroup')); break; case $data instanceof ServicegroupSummary: $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); break; default: throw new NotImplementedError('Not implemented'); } $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); return $item; } protected function assemble(): void { /** @var Item $data */ foreach ($this->data as $data) { $this->addHtml($this->createListItem($data)); } if ($this->isEmpty()) { $this->setTag('div'); $this->addHtml(new EmptyStateBar($this->getEmptyStateMessage())); } } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/ObjectTable.php000066400000000000000000000034701527064444300251710ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Exception\NotImplementedError; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Model\Hostgroupsummary; use Icinga\Module\Icingadb\Model\ServicegroupSummary; use ipl\Html\ValidHtml; use ipl\Stdlib\Filter; use ipl\Web\Url; use ipl\Web\Widget\ItemTable; /** * ObjectTable * * @internal The only reason this class exists is due to the detail actions. In case those are part of the ipl * some time, this class is obsolete, and we must be able to safely drop it. * * @template Item of Hostgroupsummary|ServicegroupSummary * * @extends ItemTable */ class ObjectTable extends ItemTable { use DetailActions; protected function init(): void { parent::init(); $this->initializeDetailActions(); } /** * @param Item $data * * @return ValidHtml * * @throws NotImplementedError When the data is not of the expected type */ protected function createListItem(object $data): ValidHtml { $item = parent::createListItem($data); if ($this->getDetailActionsDisabled()) { return $item; } switch (true) { case $data instanceof Hostgroupsummary: $this->setDetailUrl(Url::fromPath('icingadb/hostgroup')); break; case $data instanceof ServicegroupSummary: $this->setDetailUrl(Url::fromPath('icingadb/servicegroup')); break; default: throw new NotImplementedError('Not implemented'); } $this->addDetailFilterAttribute($item, Filter::equal('name', $data->name)); return $item; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/ServiceItemTable.php000066400000000000000000000013701527064444300261770ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Common\Links; use ipl\Web\Url; class ServiceItemTable extends StateItemTable { use DetailActions; protected function init() { $this->initializeDetailActions(); $this->setMultiselectUrl(Links::servicesDetails()); $this->setDetailUrl(Url::fromPath('icingadb/service')); } protected function getItemClass(): string { return ServiceRowItem::class; } protected function getVisualColumn(): string { return 'service.state.severity'; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/ServiceRowItem.php000066400000000000000000000035341527064444300257230ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\Service; use ipl\Html\BaseHtmlElement; use ipl\Stdlib\Filter; use ipl\Web\Widget\Link; class ServiceRowItem extends StateRowItem { /** @var ServiceItemTable */ protected $list; /** @var Service */ protected $item; protected function init() { parent::init(); $this->list->addMultiselectFilterAttribute( $this, Filter::all( Filter::equal('service.name', $this->item->name), Filter::equal('host.name', $this->item->host->name) ) ); $this->list->addDetailFilterAttribute( $this, Filter::all( Filter::equal('name', $this->item->name), Filter::equal('host.name', $this->item->host->name) ) ); } protected function assembleCell(BaseHtmlElement $cell, string $path, $value) { switch ($path) { case 'name': case 'display_name': $cell->addHtml(new Link( $this->item->$path, Links::service($this->item, $this->item->host), [ 'class' => 'subject', 'title' => $this->item->$path ] )); break; case 'host.name': case 'host.display_name': $column = substr($path, 5); $cell->addHtml(new Link($this->item->host->$column, Links::host($this->item->host))); break; default: parent::assembleCell($cell, $path, $value); } } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/StateItemTable.php000066400000000000000000000205431527064444300256620ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\Form; use ipl\Html\Html; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Html\ValidHtml; use ipl\I18n\Translation; use ipl\Orm\Common\SortUtil; use ipl\Orm\Query; use ipl\Web\Control\SortControl; use ipl\Web\Url; use ipl\Web\Widget\EmptyStateBar; use ipl\Web\Widget\Icon; use ipl\Web\Widget\Link; /** @todo Figure out what this might (should) have in common with the new ItemTable implementation */ abstract class StateItemTable extends BaseHtmlElement { use Translation; protected $baseAttributes = [ 'class' => 'state-item-table' ]; /** @var array The columns to render */ protected $columns; /** @var iterable The datasource */ protected $data; /** @var string The sort rules */ protected $sort; protected $tag = 'table'; /** @var ?ValidHtml Message to show if the list is empty */ protected $emptyStateMessage; /** @var ?Url The url for the column chooser modal */ protected ?Url $columnChooserUrl = null; /** * Create a new item table * * @param iterable $data Datasource of the table * @param array $columns The columns to render, keys are labels */ public function __construct(iterable $data, array $columns) { $this->data = $data; $this->columns = array_flip($columns); $this->addAttributes($this->baseAttributes); $this->init(); } /** * Initialize the item table * * If you want to adjust the item table after construction, override this method. */ protected function init() { } /** * Get message to show if the list is empty * * @return ValidHtml */ public function getEmptyStateMessage(): ValidHtml { if ($this->emptyStateMessage === null) { return new Text($this->translate('No items found.')); } return $this->emptyStateMessage; } /** * Set message to show if the list is empty * * @param mixed $message If empty, the default message is used * * @return $this */ public function setEmptyStateMessage($message): self { if (empty($message)) { $this->emptyStateMessage = null; } else { $this->emptyStateMessage = Html::wantHtml($message); } return $this; } /** * Get the columns being rendered * * @return array */ public function getColumns(): array { return $this->columns; } /** * Set sort rules (as returned by {@see SortControl::getSort()}) * * @param ?string $sort * * @return $this */ public function setSort(?string $sort): self { $this->sort = $sort; return $this; } /** * Set the Url for the Form opened by the column-chooser-opener * * @param Url $url * * @return $this */ public function setColumnChooserUrl(Url $url): static { $this->columnChooserUrl = $url; return $this; } abstract protected function getItemClass(): string; abstract protected function getVisualColumn(): string; /** * Create an action-link that opens a ColumnChooser form in a modal * * @return ValidHtml */ protected function createColumnChooserOpener(): ValidHtml { return new HtmlElement( 'span', new Attributes( [ 'class' => 'column-chooser-opener', 'title' => $this->translate('Choose columns') ] ), (new Link( new Icon('ellipsis'), $this->columnChooserUrl->setParam( 'columns', implode(',', array_keys($this->columns)) ), new Attributes(['class' => 'control-button']) )) ->openInModal() ); } protected function getVisualLabel() { return new Icon('heartbeat', ['title' => $this->translate('Severity')]); } protected function assembleColumnHeader(BaseHtmlElement $header, string $name, $label): void { $sortRules = []; if ($this->sort !== null) { $sortRules = SortUtil::createOrderBy($this->sort); } $active = false; $sortDirection = null; foreach ($sortRules as $rule) { if ($rule[0] === $name) { $sortDirection = $rule[1]; $active = true; break; } } if ($sortDirection === 'desc') { $value = "$name asc"; } else { $value = "$name desc"; } $icon = 'sort'; if ($active) { $icon = $sortDirection === 'desc' ? 'sort-up' : 'sort-down'; } $form = new Form(); $form->setAttribute('method', 'GET'); $button = $form->createElement('button', 'sort', [ 'value' => $value, 'type' => 'submit', 'title' => is_string($label) ? $label : null, 'class' => $active ? 'active' : null ]); $button->addHtml( Html::tag( 'span', null, // With   to have the height sized the same as the others $label ?? HtmlString::create(' ') ), new Icon($icon) ); $form->addElement($button); $header->add($form); switch (true) { case substr($name, -7) === '.output': case substr($name, -12) === '.long_output': $header->getAttributes()->add('class', 'has-plugin-output'); break; case substr($name, -22) === '.icon_image.icon_image': $header->getAttributes()->add('class', 'has-icon-images'); break; case substr($name, -17) === '.performance_data': case substr($name, -28) === '.normalized_performance_data': $header->getAttributes()->add('class', 'has-performance-data'); break; } } protected function assemble() { $itemClass = $this->getItemClass(); $headerRow = new HtmlElement('tr'); $visualCell = new HtmlElement('th', Attributes::create(['class' => 'has-visual'])); $this->assembleColumnHeader($visualCell, $this->getVisualColumn(), $this->getVisualLabel()); $headerRow->addHtml($visualCell); foreach ($this->columns as $name => $label) { $headerCell = new HtmlElement('th'); $this->assembleColumnHeader($headerCell, $name, is_int($label) ? $name : $label); $headerRow->addHtml($headerCell); } if (! empty($this->columns) && $this->columnChooserUrl !== null) { $headerCell->addHtml($this->createColumnChooserOpener()) ->getAttribute('class') ->addValue('last-th'); } $this->addHtml(new HtmlElement('thead', null, $headerRow)); $body = new HtmlElement('tbody', Attributes::create(['data-base-target' => '_next'])); foreach ($this->data as $item) { $body->addHtml(new $itemClass($item, $this)); } if ($body->isEmpty()) { $body->addHtml(new HtmlElement( 'tr', null, new HtmlElement( 'td', Attributes::create(['colspan' => count($this->columns) + 1]), new EmptyStateBar($this->getEmptyStateMessage()) ) )); } $this->addHtml($body); } /** * Enrich the given list of column names with appropriate labels * * @param Query $query * @param array $columns * * @return array */ public static function applyColumnMetaData(Query $query, array $columns): array { $newColumns = []; foreach ($columns as $columnPath) { $label = $query->getResolver()->getColumnDefinition($columnPath)->getLabel(); $newColumns[$label ?? $columnPath] = $columnPath; } return $newColumns; } } icingadb-web-1.5.0/library/Icingadb/Widget/ItemTable/StateRowItem.php000066400000000000000000000137511527064444300254050ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget\ItemTable; use Icinga\Module\Icingadb\Common\HostStates; use Icinga\Module\Icingadb\Common\Icons; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Util\PerfDataSet; use Icinga\Module\Icingadb\Util\PluginOutput; use Icinga\Module\Icingadb\Widget\CheckAttempt; use Icinga\Module\Icingadb\Widget\IconImage; use Icinga\Module\Icingadb\Widget\PluginOutputContainer; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\Text; use ipl\Web\Widget\EmptyState; use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; use ipl\Web\Widget\TimeSince; use ipl\Web\Widget\TimeUntil; abstract class StateRowItem extends BaseStateRowItem { /** @var StateItemTable */ protected $list; protected function assembleVisual(BaseHtmlElement $visual) { $stateBall = new StateBall($this->item->state->getStateText(), StateBall::SIZE_LARGE); $icon = $this->item->state->getIcon(); if ($icon === null) { if (! $this->item->notifications_enabled) { $icon = new Icon(Icons::NOTIFICATIONS_DISABLED, [ 'title' => sprintf( '%s (%s)', strtoupper($this->item->state->getStateTextTranslated()), t('has notifications disabled') ) ]); } elseif (! $this->item->active_checks_enabled) { $icon = new Icon(Icons::ACTIVE_CHECKS_DISABLED, [ 'title' => sprintf( '%s (%s)', strtoupper($this->item->state->getStateTextTranslated()), t('has active checks disabled') ) ]); } } $stateBall->add($icon); $stateBall->setHandled($this->item->state->is_problem && ( $this->item->state->is_handled || ! $this->item->state->is_reachable )); $visual->addHtml($stateBall); if ($this->item->state->state_type === 'soft') { $visual->addHtml(new CheckAttempt( (int) $this->item->state->check_attempt, (int) $this->item->max_check_attempts )); } } protected function assembleCell(BaseHtmlElement $cell, string $path, $value) { switch (true) { case $path === 'state.output': case $path === 'state.long_output': if (empty($value)) { $pluginOutput = new EmptyState(t('Output unavailable.')); } else { $pluginOutput = new PluginOutputContainer(PluginOutput::fromObject($this->item)); } $cell->addHtml($pluginOutput) ->getAttributes() ->add('class', 'has-plugin-output'); break; case $path === 'state.soft_state': case $path === 'state.hard_state': case $path === 'state.previous_soft_state': case $path === 'state.previous_hard_state': $stateType = substr($path, 6); if ($this->item instanceof Host) { $stateName = HostStates::translated($this->item->state->$stateType); } else { $stateName = ServiceStates::translated($this->item->state->$stateType); } $cell->addHtml(Text::create($stateName)); break; case $path === 'state.last_update': case $path === 'state.last_state_change': $column = substr($path, 6); $cell->addHtml( isset($this->item->state->$column) ? new TimeSince($this->item->state->$column->getTimestamp()) : new EmptyState(t('n. a.')) ); break; case $path === 'state.next_check': case $path === 'state.next_update': $column = substr($path, 6); $cell->addHtml( isset($this->item->state->$column) ? new TimeUntil($this->item->state->$column->getTimestamp()) : new EmptyState(t('n. a.')) ); break; case $path === 'state.performance_data': case $path === 'state.normalized_performance_data': $perfdataContainer = new HtmlElement('div', Attributes::create(['class' => 'performance-data'])); $pieChartData = PerfDataSet::fromString($this->item->state->normalized_performance_data)->asArray(); foreach ($pieChartData as $perfdata) { if ($perfdata->isVisualizable()) { $perfdataContainer->addHtml(new HtmlString($perfdata->asInlinePie()->render())); } } $cell->addHtml($perfdataContainer) ->getAttributes() ->add('class', 'has-performance-data'); break; case $path === 'is_volatile': case $path === 'host.is_volatile': case substr($path, -8) == '_enabled': case (bool) preg_match('/state\.(is_|in_)/', $path): if ($value) { $cell->addHtml(new Icon('check')); } break; case $path === 'icon_image.icon_image': $cell->addHtml(new IconImage($value, $this->item->icon_image_alt)) ->getAttributes() ->add('class', 'has-icon-images'); break; default: if (preg_match('/(^id|_id|.id|_checksum|_bin)$/', $path)) { $value = bin2hex($value); } $cell->addHtml(Text::create($value)); } } } icingadb-web-1.5.0/library/Icingadb/Widget/MarkdownLine.php000066400000000000000000000012511527064444300235320ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Web\Helper\Markdown; use ipl\Html\BaseHtmlElement; use ipl\Html\DeferredText; class MarkdownLine extends BaseHtmlElement { protected $tag = 'section'; protected $defaultAttributes = ['class' => ['markdown', 'inline']]; /** * MarkdownLine constructor. * * @param string $line */ public function __construct(string $line) { $this->add((new DeferredText(function () use ($line) { return Markdown::line($line); }))->setEscaped(true)); } } icingadb-web-1.5.0/library/Icingadb/Widget/MarkdownText.php000066400000000000000000000012351527064444300235710ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Web\Helper\Markdown; use ipl\Html\BaseHtmlElement; use ipl\Html\DeferredText; class MarkdownText extends BaseHtmlElement { protected $tag = 'section'; protected $defaultAttributes = ['class' => 'markdown']; /** * MarkdownText constructor. * * @param string $text */ public function __construct(string $text) { $this->add((new DeferredText(function () use ($text) { return Markdown::text($text); }))->setEscaped(true)); } } icingadb-web-1.5.0/library/Icingadb/Widget/Notice.php000066400000000000000000000014721527064444300223660ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Web\Widget\Icon; class Notice extends BaseHtmlElement { /** @var mixed */ protected $content; protected $tag = 'p'; protected $defaultAttributes = ['class' => 'notice']; /** * Create a html notice * * @param mixed $content */ public function __construct($content) { $this->content = $content; } protected function assemble(): void { $this->addHtml(new Icon('triangle-exclamation')); $this->addHtml((new HtmlElement('span'))->add($this->content)); $this->addHtml(new Icon('triangle-exclamation')); } } icingadb-web-1.5.0/library/Icingadb/Widget/PluginOutputContainer.php000066400000000000000000000011571527064444300254670ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Util\PluginOutput; use ipl\Html\BaseHtmlElement; class PluginOutputContainer extends BaseHtmlElement { protected $tag = 'div'; public function __construct(PluginOutput $output) { $this->setHtmlContent($output); $this->getAttributes()->registerAttributeCallback('class', function () use ($output) { return $output->isHtml() ? 'plugin-output' : 'plugin-output preformatted'; }); } } icingadb-web-1.5.0/library/Icingadb/Widget/ServiceStateBadges.php000066400000000000000000000021111527064444300246430ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Common\ServiceStates; use Icinga\Module\Icingadb\Common\StateBadges; use ipl\Web\Url; class ServiceStateBadges extends StateBadges { protected function getBaseUrl(): Url { return Links::services(); } protected function getType(): string { return 'service'; } protected function getPrefix(): string { return 'services'; } protected function getStateInt(string $state): int { return ServiceStates::int($state); } protected function assemble() { $this->addAttributes(['class' => 'service-state-badges']); $this->add(array_filter([ $this->createGroup('critical'), $this->createGroup('warning'), $this->createGroup('unknown'), $this->createBadge('ok'), $this->createBadge('pending') ])); } } icingadb-web-1.5.0/library/Icingadb/Widget/ServiceStatusBar.php000066400000000000000000000012721527064444300243740ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Module\Icingadb\Common\BaseStatusBar; use ipl\Html\BaseHtmlElement; class ServiceStatusBar extends BaseStatusBar { protected function assembleTotal(BaseHtmlElement $total): void { $total->add(sprintf( tp('%d Service', '%d Services', $this->summary->services_total), $this->summary->services_total )); } protected function createStateBadges(): BaseHtmlElement { return (new ServiceStateBadges($this->summary))->setBaseFilter($this->getBaseFilter()); } } icingadb-web-1.5.0/library/Icingadb/Widget/ServiceSummaryDonut.php000066400000000000000000000063461527064444300251420ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use Icinga\Chart\Donut; use Icinga\Module\Icingadb\Common\Links; use Icinga\Module\Icingadb\Model\ServicestateSummary; use Icinga\Module\Icingadb\Model\TacticalStateSummary; use ipl\Html\Attributes; use ipl\Html\BaseHtmlElement; use ipl\Html\HtmlElement; use ipl\Html\HtmlString; use ipl\Html\TemplateString; use ipl\Html\Text; use ipl\Stdlib\BaseFilter; use ipl\Stdlib\Filter; use ipl\Web\Common\Card; class ServiceSummaryDonut extends Card { use BaseFilter; protected $defaultAttributes = ['class' => 'donut-container', 'data-base-target' => '_next']; /** @var ServicestateSummary|TacticalStateSummary */ protected $summary; public function __construct(ServicestateSummary|TacticalStateSummary $summary) { $this->summary = $summary; } protected function assembleBody(BaseHtmlElement $body) { $labelBigUrlFilter = Filter::all( Filter::equal('service.state.soft_state', 2), Filter::equal('service.state.is_handled', 'n') ); if ($this->hasBaseFilter()) { $labelBigUrlFilter->add($this->getBaseFilter()); } $donut = (new Donut()) ->addSlice($this->summary->services_ok, ['class' => 'slice-state-ok']) ->addSlice($this->summary->services_warning_handled, ['class' => 'slice-state-warning-handled']) ->addSlice($this->summary->services_warning_unhandled, ['class' => 'slice-state-warning']) ->addSlice($this->summary->services_critical_handled, ['class' => 'slice-state-critical-handled']) ->addSlice($this->summary->services_critical_unhandled, ['class' => 'slice-state-critical']) ->addSlice($this->summary->services_unknown_handled, ['class' => 'slice-state-unknown-handled']) ->addSlice($this->summary->services_unknown_unhandled, ['class' => 'slice-state-unknown']) ->addSlice($this->summary->services_pending, ['class' => 'slice-state-pending']) ->setLabelBig((string) $this->summary->services_critical_unhandled) ->setLabelBigUrl(Links::services()->setFilter($labelBigUrlFilter)->addParams([ 'sort' => 'service.state.last_state_change' ])) ->setLabelBigEyeCatching($this->summary->services_critical_unhandled > 0) ->setLabelSmall(t('Critical')); $body->addHtml( new HtmlElement('div', Attributes::create(['class' => 'donut']), new HtmlString($donut->render())) ); } protected function assembleFooter(BaseHtmlElement $footer) { $footer->addHtml((new ServiceStateBadges($this->summary))->setBaseFilter($this->getBaseFilter())); } protected function assembleHeader(BaseHtmlElement $header) { $header->addHtml( new HtmlElement('h2', null, Text::create(t('Services'))), new HtmlElement('span', Attributes::create(['class' => 'meta']), TemplateString::create( t('{{#total}}Total{{/total}} %d'), ['total' => new HtmlElement('span')], (int) $this->summary->services_total )) ); } } icingadb-web-1.5.0/library/Icingadb/Widget/ShowMore.php000066400000000000000000000025201527064444300227030ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Orm\ResultSet; use ipl\Web\Common\BaseTarget; use ipl\Web\Url; use ipl\Web\Widget\ActionLink; class ShowMore extends BaseHtmlElement { use BaseTarget; protected $defaultAttributes = ['class' => 'show-more']; protected $tag = 'div'; /** @var ResultSet */ protected $resultSet; /** @var Url */ protected $url; /** @var ?string */ protected $label; public function __construct(ResultSet $resultSet, Url $url, ?string $label = null) { $this->label = $label; $this->resultSet = $resultSet; $this->url = $url; } public function setLabel(string $label): self { $this->label = $label; return $this; } public function getLabel(): string { return $this->label ?: t('Show More'); } public function renderUnwrapped(): string { if ($this->resultSet->hasMore()) { return parent::renderUnwrapped(); } return ''; } protected function assemble(): void { if ($this->resultSet->hasMore()) { $this->addHtml(new ActionLink($this->getLabel(), $this->url)); } } } icingadb-web-1.5.0/library/Icingadb/Widget/StateBadge.php000066400000000000000000000004311527064444300231420ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; /** @deprecated Use {@see \ipl\Web\Widget\StateBadge} instead */ class StateBadge extends \ipl\Web\Widget\StateBadge { } icingadb-web-1.5.0/library/Icingadb/Widget/StateChange.php000066400000000000000000000063171527064444300233360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Web\Widget\Icon; use ipl\Web\Widget\StateBall; class StateChange extends BaseHtmlElement { protected $previousState; protected $state; protected $previousStateBallSize = StateBall::SIZE_BIG; protected $currentStateBallSize = StateBall::SIZE_BIG; protected $defaultAttributes = ['class' => 'state-change']; protected $tag = 'div'; /** @var ?Icon Current state ball icon */ protected $icon; /** @var bool Whether the state is handled */ protected $isHandled = false; public function __construct(string $state, string $previousState) { $this->previousState = $previousState; $this->state = $state; } /** * Set the state ball size for the previous state * * @param string $size * * @return $this */ public function setPreviousStateBallSize(string $size): self { $this->previousStateBallSize = $size; return $this; } /** * Set the state ball size for the current state * * @param string $size * * @return $this */ public function setCurrentStateBallSize(string $size): self { $this->currentStateBallSize = $size; return $this; } /** * Set the current state ball icon * * @param $icon * * @return $this */ public function setIcon($icon): self { $this->icon = $icon; return $this; } /** * Set whether the current state is handled * * @return $this */ public function setHandled($isHandled = true): self { $this->isHandled = $isHandled; return $this; } protected function assemble() { $currentStateBall = (new StateBall($this->state, $this->currentStateBallSize)) ->setHandled($this->isHandled) ->add($this->icon); $previousStateBall = new StateBall($this->previousState, $this->previousStateBallSize); if ($this->isRightBiggerThanLeft()) { $this->getAttributes()->add('class', 'reversed-state-balls'); $this->addHtml($currentStateBall, $previousStateBall); } else { $this->addHtml($previousStateBall, $currentStateBall); } } protected function isRightBiggerThanLeft(): bool { $left = $this->previousStateBallSize; $right = $this->currentStateBallSize; if ($left === $right) { return false; } elseif ($left === StateBall::SIZE_LARGE) { return false; } $map = [ StateBall::SIZE_BIG => [false, [StateBall::SIZE_LARGE]], StateBall::SIZE_MEDIUM_LARGE => [false, [StateBall::SIZE_BIG, StateBall::SIZE_LARGE]], StateBall::SIZE_MEDIUM => [true, [StateBall::SIZE_TINY, StateBall::SIZE_SMALL]], StateBall::SIZE_SMALL => [true, [StateBall::SIZE_TINY]] ]; list($negate, $sizes) = $map[$left]; $found = in_array($right, $sizes, true); return ($negate && ! $found) || (! $negate && $found); } } icingadb-web-1.5.0/library/Icingadb/Widget/TagList.php000066400000000000000000000013731527064444300225140ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Icinga\Module\Icingadb\Widget; use ipl\Html\BaseHtmlElement; use ipl\Html\Html; use ipl\Web\Widget\Link; class TagList extends BaseHtmlElement { protected $content = []; protected $defaultAttributes = ['class' => 'tag-list', 'data-base-target' => '_next']; protected $tag = 'div'; public function addLink($content, $url): self { $this->content[] = new Link($content, $url); return $this; } public function hasContent(): bool { return ! empty($this->content); } protected function assemble() { $this->add(Html::wrapEach($this->content, 'li')); } } icingadb-web-1.5.0/module.info000066400000000000000000000003401527064444300162000ustar00rootroot00000000000000Module: icingadb Version: 1.5.0 Requires: Libraries: icinga-php-library (>=1.2.0), icinga-php-thirdparty (>=1.1.0) Description: Icinga DB Web UI for Icinga DB – Provides a graphical interface to your Icinga monitoring icingadb-web-1.5.0/phpstan-baseline.neon000066400000000000000000011427451527064444300201750ustar00rootroot00000000000000parameters: ignoreErrors: - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 1 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:addAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:removeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:showAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommandTransportController\:\:sortAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommandTransportController.php - message: '#^Parameter \#2 \$filter of static method Icinga\\Data\\Filter\\Filter\:\:where\(\) expects string, mixed given\.$#' identifier: argument.type count: 2 path: application/controllers/CommandTransportController.php - message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' identifier: argument.type count: 2 path: application/controllers/CommandTransportController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\CommentController\:\:\$comment \(Icinga\\Module\\Icingadb\\Model\\Comment\) does not accept ipl\\Orm\\Model\.$#' identifier: assign.propertyType count: 1 path: application/controllers/CommentController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:deleteAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:detailsAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\CommentsController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/CommentsController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/CommentsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:addFormToContent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:databaseAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ConfigController\:\:redisAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ConfigController.php - message: '#^Parameter \#1 \$name of method ipl\\Web\\Widget\\Tabs\:\:add\(\) expects string, string\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ConfigController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimeController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\DowntimeController\:\:\$downtime \(Icinga\\Module\\Icingadb\\Model\\Downtime\) does not accept ipl\\Orm\\Model\.$#' identifier: assign.propertyType count: 1 path: application/controllers/DowntimeController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:deleteAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:detailsAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\DowntimesController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/DowntimesController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/DowntimesController.php - message: '#^Cannot access property \$exception on mixed\.$#' identifier: property.nonObject count: 1 path: application/controllers/ErrorController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:errorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:postDispatchXhr\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ErrorController\:\:prepareInit\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ErrorController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\EventController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/EventController.php - message: '#^Parameter \#1 \$string of function hex2bin expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/EventController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\EventController\:\:\$event \(Icinga\\Module\\Icingadb\\Model\\History\) does not accept ipl\\Orm\\Model\.$#' identifier: assign.propertyType count: 1 path: application/controllers/EventController.php - message: '#^Cannot access property \$hosts_active_checks_enabled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - message: '#^Cannot access property \$hosts_passive_checks_enabled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - message: '#^Cannot access property \$services_active_checks_enabled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - message: '#^Cannot access property \$services_passive_checks_enabled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HealthController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HealthController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HealthController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HistoryController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HistoryController.php - message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' identifier: argument.type count: 1 path: application/controllers/HistoryController.php - message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HistoryController.php - message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HistoryController.php - message: '#^Cannot access property \$is_overdue on mixed\.$#' identifier: property.nonObject count: 4 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:acknowledgeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:addCommentAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:checkNowAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:processCheckresultAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:scheduleCheckAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#1 \$array of function reset expects array\|object, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#2 \$apiResult of class Icinga\\Module\\Icingadb\\Widget\\Detail\\HostInspectionDetail constructor expects array, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#2 \$serviceSummary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail constructor expects Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/HostController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' identifier: isset.property count: 1 path: application/controllers/HostController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostgroupController\:\:\$hostgroupName \(string\) does not accept mixed\.$#' identifier: assign.propertyType count: 1 path: application/controllers/HostgroupController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostgroupsController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostgroupsController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostgroupsController.php - message: '#^Cannot access property \$comments_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HostsController.php - message: '#^Cannot access property \$downtimes_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/HostsController.php - message: '#^Cannot call method first\(\) on ipl\\Orm\\Query\|null\.$#' identifier: method.nonObject count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:acknowledgeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:addCommentAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:checkNowAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:detailsAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:getFeatureStatus\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:processCheckresultAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:scheduleCheckAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/HostsController.php - message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostsController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostsController.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:filter\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostsController.php - message: '#^Parameter \#2 \$summary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary\|Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostsController.php - message: '#^Parameter \#2 \.\.\.\$queries of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/HostsController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\HostsController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' identifier: isset.property count: 1 path: application/controllers/HostsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\NotificationsController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/NotificationsController.php - message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/NotificationsController.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: application/controllers/ServiceController.php - message: '#^Cannot access property \$is_overdue on mixed\.$#' identifier: property.nonObject count: 3 path: application/controllers/ServiceController.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:acknowledgeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:addCommentAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:checkNowAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:processCheckresultAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:scheduleCheckAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#1 \$array of function reset expects array\|object, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$apiResult of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceInspectionDetail constructor expects array, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, int\<1, max\> given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' identifier: argument.type count: 2 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:serviceSource\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\ServiceLinks\:\:history\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Parameter \#2 \$value of static method ipl\\Stdlib\\Filter\:\:lessThanOrEqual\(\) expects float\|int\|string, mixed given\.$#' identifier: argument.type count: 1 path: application/controllers/ServiceController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServiceController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' identifier: isset.property count: 1 path: application/controllers/ServiceController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServicegroupController\:\:\$servicegroupName \(string\) does not accept mixed\.$#' identifier: assign.propertyType count: 1 path: application/controllers/ServicegroupController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicegroupsController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicegroupsController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicegroupsController.php - message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:getResponseSegment\(\)\.$#' identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:setNoRender\(\)\.$#' identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - message: '#^Call to an undefined method Zend_Controller_Action_Helper_Abstract\:\:setScriptAction\(\)\.$#' identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/controllers/ServicesController.php - message: '#^Cannot access property \$comments_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/ServicesController.php - message: '#^Cannot access property \$downtimes_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: application/controllers/ServicesController.php - message: '#^Cannot call method first\(\) on ipl\\Orm\\Query\|null\.$#' identifier: method.nonObject count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:acknowledgeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:addCommentAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:assertIsGrantedOnCommandTargets\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:checkNowAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:detailsAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:getFeatureStatus\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:gridAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:gridSearchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:prepareSearchFilter\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:processCheckresultAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:removeAcknowledgementAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:scheduleCheckAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:scheduleDowntimeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:sendCustomNotificationAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:toggleFeaturesAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/ServicesController.php - message: '#^Parameter \#1 \$form of method Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:handleCommandForm\(\) expects Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\|string, Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicesController.php - message: '#^Parameter \#1 \$peekAhead of method ipl\\Orm\\Query\:\:peekAhead\(\) expects bool, null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicesController.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:filter\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicesController.php - message: '#^Parameter \#2 \$default of method Icinga\\Web\\UrlParams\:\:shift\(\) expects string\|null, false given\.$#' identifier: argument.type count: 2 path: application/controllers/ServicesController.php - message: '#^Parameter \#2 \$summary of class Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary\|Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicesController.php - message: '#^Parameter \#2 \.\.\.\$queries of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) expects ipl\\Orm\\Query, ipl\\Orm\\Query\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/ServicesController.php - message: '#^Property Icinga\\Module\\Icingadb\\Controllers\\ServicesController\:\:\$commandTargetModel \(ipl\\Orm\\Model\) in isset\(\) is not nullable\.$#' identifier: isset.property count: 1 path: application/controllers/ServicesController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:completeAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:indexAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - message: '#^Method Icinga\\Module\\Icingadb\\Controllers\\TacticalController\:\:searchEditorAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/controllers/TacticalController.php - message: '#^Parameter \#1 \$summary of class Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut constructor expects Icinga\\Module\\Icingadb\\Model\\HoststateSummary, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/TacticalController.php - message: '#^Parameter \#1 \$summary of class Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut constructor expects Icinga\\Module\\Icingadb\\Model\\ServicestateSummary, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 1 path: application/controllers/TacticalController.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\ApiTransportForm\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/ApiTransportForm.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/CommandForm.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/CommandForm.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/CommandForm.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: application/forms/Command/CommandForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/Command/CommandForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:onSuccess\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/Command/CommandForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: application/forms/Command/CommandForm.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: application/forms/Command/CommandForm.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: application/forms/Command/CommandForm.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Command\\CommandForm\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: application/forms/Command/CommandForm.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: application/forms/Command/CommandForm.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: application/forms/Command/CommandForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:__construct\(\) has parameter \$featureStatus with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:\$featureStatus has no type specified\.$#' identifier: missingType.property count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Instance\\ToggleInstanceFeaturesForm\:\:\$features has no type specified\.$#' identifier: missingType.property count: 1 path: application/forms/Command/Instance/ToggleInstanceFeaturesForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 4 path: application/forms/Command/Object/AcknowledgeProblemForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/AcknowledgeProblemForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Object/AddCommentForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/AddCommentForm.php - message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/AddCommentForm.php - message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/AddCommentForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/DeleteCommentForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/DeleteDowntimeForm.php - message: '#^Parameter \#1 \$output of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setOutput\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - message: '#^Parameter \#1 \$performanceData of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setPerformanceData\(\) expects string\|null, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - message: '#^Parameter \#1 \$status of method Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:setStatus\(\) expects int, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/ProcessCheckResultForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/RemoveAcknowledgementForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleCheckForm.php - message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleCheckForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' identifier: argument.type count: 3 path: application/forms/Command/Object/ScheduleHostDowntimeForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' identifier: method.nonObject count: 2 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Cannot call method on\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Parameter \#1 \$duration of class DateInterval constructor expects string, mixed given\.$#' identifier: argument.type count: 3 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ScheduleServiceDowntimeForm\:\:\$flexibleEnd has no type specified\.$#' identifier: missingType.property count: 1 path: application/forms/Command/Object/ScheduleServiceDowntimeForm.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Command\\Object\\WithCommentCommand\:\:setComment\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/SendCustomNotificationForm.php - message: '#^Cannot call method getAttributes\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 2 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:__construct\(\) has parameter \$featureStatus with no type specified\.$#' identifier: missingType.parameter count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Parameter \#1 \$enabled of method Icinga\\Module\\Icingadb\\Command\\Object\\ToggleObjectFeatureCommand\:\:setEnabled\(\) expects bool, int given\.$#' identifier: argument.type count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:\$featureStatus has no type specified\.$#' identifier: missingType.property count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Property Icinga\\Module\\Icingadb\\Forms\\Command\\Object\\ToggleObjectFeaturesForm\:\:\$features has no type specified\.$#' identifier: missingType.property count: 1 path: application/forms/Command/Object/ToggleObjectFeaturesForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\DatabaseConfigForm\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/DatabaseConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\DatabaseConfigForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/DatabaseConfigForm.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Cannot call method addError\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: application/forms/Navigation/ActionForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Forms\\Navigation\\ActionForm\:\:parseRestriction\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: application/forms/Navigation/ActionForm.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: application/forms/Navigation/ActionForm.php - message: '#^Call to an undefined method Zend_Form_Element\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - message: '#^Call to an undefined method object\:\:getMessages\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - message: '#^Call to an undefined method object\:\:isValid\(\)\.$#' identifier: method.notFound count: 1 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method addError\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 3 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method getElements\(\) on Zend_Form_DisplayGroup\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method getValidator\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method getValue\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 3 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method isChecked\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 5 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method setDecorators\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method setElements\(\) on Zend_Form_DisplayGroup\|null\.$#' identifier: method.nonObject count: 1 path: application/forms/RedisConfigForm.php - message: '#^Cannot call method setValue\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 11 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:addInsecureCheckboxIfTls\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:onRequest\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: application/forms/RedisConfigForm.php - message: '#^Method Icinga\\Module\\Icingadb\\Forms\\RedisConfigForm\:\:wrapIplValidator\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: application/forms/RedisConfigForm.php - message: '#^Parameter \#1 \$filename of function file_exists expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - message: '#^Parameter \#1 \$filename of function file_get_contents expects string, mixed given\.$#' identifier: argument.type count: 2 path: application/forms/RedisConfigForm.php - message: '#^Parameter \#1 \$path of function basename expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - message: '#^Parameter \#1 \$string of function md5 expects string, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' identifier: argument.type count: 1 path: application/forms/RedisConfigForm.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Cannot access property \$id on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:checkGrants\(\) has parameter \$roles with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#1 \$column of static method ipl\\Stdlib\\Filter\:\:equal\(\) expects string, array\\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 6 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Property Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:\$knownGrants type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Property Icinga\\Module\\Icingadb\\Authentication\\ObjectAuthorization\:\:\$matchedFilters type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Authentication/ObjectAuthorization.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:create\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:getData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:setData\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - message: '#^Property Icinga\\Module\\Icingadb\\Command\\IcingaApiCommand\:\:\$data type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/IcingaApiCommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:getAttributes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:setAttributes\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - message: '#^Property Icinga\\Module\\Icingadb\\Command\\Object\\GetObjectCommand\:\:\$attributes type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Object/GetObjectCommand.php - message: '#^Property Icinga\\Module\\Icingadb\\Command\\Object\\ProcessCheckResultCommand\:\:\$performanceData \(string\) does not accept string\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Command/Object/ProcessCheckResultCommand.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\Renderer\\IcingaApiCommandRenderer\:\:applyFilter\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - message: '#^Parameter \#1 \$object of method Icinga\\Module\\Icingadb\\Command\\Renderer\\IcingaApiCommandRenderer\:\:getObjectPluralType\(\) expects ipl\\Orm\\Model, ipl\\Orm\\Model\|null given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Command/Renderer/IcingaApiCommandRenderer.php - message: '#^Cannot access offset ''code'' on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Cannot access offset ''error'' on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Cannot access offset ''results'' on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Cannot access offset ''status'' on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Cannot access offset ''user'' on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Cannot access offset 0 on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Parameter \#1 \$array of function array_pop expects array, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Command/Transport/ApiCommandTransport.php - message: '#^Property Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportConfig\:\:\$configs type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Transport/CommandTransportConfig.php - message: '#^Property Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportConfig\:\:\$queryColumns type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Command/Transport/CommandTransportConfig.php - message: '#^Method Icinga\\Module\\Icingadb\\Command\\Transport\\CommandTransportInterface\:\:send\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Command/Transport/CommandTransportInterface.php - message: '#^Access to constant ATTR_INIT_COMMAND on an unknown class PDO\\Mysql\.$#' identifier: class.notFound count: 1 path: library/Icingadb/Common/Backend.php - message: '#^Possibly invalid array key type mixed\.$#' identifier: offsetAccess.invalidOffset count: 1 path: library/Icingadb/Common/Backend.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchHostState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchHostState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchServiceState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchServiceState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchState\(\) has parameter \$columns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:fetchState\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\IcingaRedis\:\:getTlsParams\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Parameter \#2 \.\.\.\$arrays of function array_merge expects array, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Common/IcingaRedis.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\Links\:\:hostgroup\(\) has parameter \$hostgroup with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Common/Links.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\Links\:\:servicegroup\(\) has parameter \$servicegroup with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Common/Links.php - message: '#^Call to an undefined method Predis\\Client\:\:hGet\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Cannot call method columns\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Cannot call method setTimezone\(\) on DateTime\|false\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:__construct\(\) has parameter \$apiResult with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createAttributes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createCustomVariables\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createLastCheckResult\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createLastCheckResult\(\) should return array\|null but empty return statement found\.$#' identifier: return.empty count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createNameValueTable\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createNameValueTable\(\) has parameter \$formatters with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createRedisInfo\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createSourceLocation\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:createSourceLocation\(\) should return array\|null but empty return statement found\.$#' identifier: return.empty count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatMilliseconds\(\) has parameter \$ms with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatSeconds\(\) has parameter \$s with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:formatState\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Parameter \#1 \$array of function array_diff_key expects array, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Parameter \#1 \$content of static method ipl\\Html\\Table\:\:td\(\) expects array\|ipl\\Html\\Html\|string\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Parameter \#1 \$string of function bin2hex expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:\$attrs type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Common\\ObjectInspectionDetail\:\:\$joins type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Common/ObjectInspectionDetail.php - message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Common/StateBadges.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$customvar on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$hostgroup on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 5 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_critical_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_ok on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_pending on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_unknown_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_unknown_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_warning_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot access property \$services_warning_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot call method execute\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot call method filter\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Compat/CompatHost.php - message: '#^Cannot clone mixed\.$#' identifier: clone.nonObject count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__get\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__get\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:__isset\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:fromModel\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:getName\(\) should return string but returns mixed\.$#' identifier: return.type count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#1 \$flattenedVars of method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) expects Traversable, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Compat/CompatHost.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatHost.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$legacyColumns has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$rawCustomvars type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatHost\:\:\$rawHostCustomvars type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatHost.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$customvar on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$hostgroup on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 5 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_critical_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_ok on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_pending on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_total on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_unknown_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_unknown_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_warning_handled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot access property \$services_warning_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot call method execute\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot call method filter\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Compat/CompatService.php - message: '#^Cannot clone mixed\.$#' identifier: clone.nonObject count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__get\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__get\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:__isset\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:fetchHost\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:fromModel\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:getName\(\) should return string but returns mixed\.$#' identifier: return.type count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#1 \$flattenedVars of method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) expects Traversable, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#1 \$object of class Icinga\\Module\\Icingadb\\Compat\\CompatHost constructor expects ipl\\Orm\\Model, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Compat/CompatService.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Compat/CompatService.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$legacyColumns has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$rawCustomvars type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Property Icinga\\Module\\Icingadb\\Compat\\CompatService\:\:\$rawHostCustomvars type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/CompatService.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commentsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commonColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:commonParameters\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:contactgroupsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:contactsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:downtimesColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:historyColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostgroupsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:hostsParameters\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:multipleHostsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:multipleServicesColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:notificationHistoryColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:rewrite\(\) has parameter \$legacyColumns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:serviceColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicegridColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicegroupsColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicesColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:servicesParameters\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:transformParams\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Compat\\UrlMigrator\:\:transformWildcardFilter\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Parameter \#1 \$string of function strtolower expects string, mixed given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Compat/UrlMigrator.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:extractKeysAndValues\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/CsvResultSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:formatValue\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Data/CsvResultSet.php - message: '#^Parameter \#1 \$array of function array_keys expects array, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/CsvResultSet.php - message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:formatValue\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/CsvResultSet.php - message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\CsvResultSet\:\:extractKeysAndValues\(\) expects ipl\\Orm\\Model, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/CsvResultSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:createObject\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/JsonResultSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Data/JsonResultSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Data/JsonResultSet.php - message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:formatValue\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/JsonResultSet.php - message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\JsonResultSet\:\:createObject\(\) expects ipl\\Orm\\Model, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/JsonResultSet.php - message: '#^Argument of an invalid type array\|null supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:__construct\(\) has parameter \$gridcols with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Parameter \#2 \$string of function explode expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$gridcols type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$order type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$xAxisFilter \(ipl\\Stdlib\\Filter\\Rule\) does not accept ipl\\Stdlib\\Filter\\Rule\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Data\\PivotTable\:\:\$yAxisFilter \(ipl\\Stdlib\\Filter\\Rule\) does not accept ipl\\Stdlib\\Filter\\Rule\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Data/PivotTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:extractKeysAndValues\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:formatValue\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - message: '#^Parameter \#1 \$array of function array_keys expects array, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:formatValue\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\VolatileCsvResults\:\:extractKeysAndValues\(\) expects ipl\\Orm\\Model, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileCsvResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:createObject\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - message: '#^Parameter \#1 \$key of method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:formatValue\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - message: '#^Parameter \#1 \$model of method Icinga\\Module\\Icingadb\\Data\\VolatileJsonResults\:\:createObject\(\) expects ipl\\Orm\\Model, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Data/VolatileJsonResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ActionsHook\\ObjectActionsHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/ActionsHook/ObjectActionsHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\CustomVarRendererHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/CustomVarRendererHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) has parameter \$coreElements with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) has parameter \$extensions with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\BaseExtensionHook\:\:injectExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Hook/ExtensionHook/BaseExtensionHook.php - message: '#^Cannot cast ipl\\Html\\ValidHtml to string\.$#' identifier: cast.string count: 1 path: library/Icingadb/Hook/ExtensionHook/ObjectsDetailExtensionHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\IcingadbSupportHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/IcingadbSupportHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\PluginOutputHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/PluginOutputHook.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Hook/TabHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Hook/TabHook.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Hook/TabHook.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Hook\\TabHook\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Hook/TabHook.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Hook/TabHook.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Hook/TabHook.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/AcknowledgementHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ActionUrl.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ActionUrl.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ActionUrl\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ActionUrl.php - message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ActionAndNoteUrl.php - message: '#^Parameter \#2 \$string of function explode expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ActionAndNoteUrl.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 1 path: library/Icingadb/Model/Behavior/Bitmask.php - message: '#^Cannot access offset mixed on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Model/Behavior/Bitmask.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\Bitmask\:\:rewriteCondition\(\) should return ipl\\Stdlib\\Filter\\Rule\|null but empty return statement found\.$#' identifier: return.empty count: 2 path: library/Icingadb/Model/Behavior/Bitmask.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Behavior\\FlattenedObjectVars\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#1 \$string of function substr expects string, string\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Parameter \#2 \$targetPath of method ipl\\Orm\\Query\:\:createSubQuery\(\) expects string, string\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Part \$column \(mixed\) of encapsed string cannot be cast to string\.$#' identifier: encapsedStringPart.nonString count: 1 path: library/Icingadb/Model/Behavior/FlattenedObjectVars.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:__construct\(\) has parameter \$routes with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:getRoutes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:rewriteCondition\(\) should return ipl\\Stdlib\\Filter\\Rule\|null but empty return statement found\.$#' identifier: return.empty count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Parameter \#1 \$haystack of function strpos expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Parameter \#1 \$path of method Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:rewritePath\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Parameter \#1 \$string of function substr expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Parameter \#1 \$string of function substr expects string, string\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Property Icinga\\Module\\Icingadb\\Model\\Behavior\\ReRoute\:\:\$routes has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Model/Behavior/ReRoute.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Checkcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Checkcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Checkcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Checkcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CheckcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CheckcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CheckcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Comment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Comment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Comment\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Comment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CommentHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CommentHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CommentHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CommentHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Customvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Customvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Customvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Customvar.php - message: '#^Access to an undefined property object\:\:\$flatname\.$#' identifier: property.notFound count: 1 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Access to an undefined property object\:\:\$value\.$#' identifier: property.notFound count: 3 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) has parameter \$flattenedVars with no value type specified in iterable type Traversable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\CustomvarFlat\:\:unFlattenVars\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/CustomvarFlat.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Downtime.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Downtime.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Downtime\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Downtime.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/DowntimeHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/DowntimeHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\DowntimeHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/DowntimeHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Endpoint.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Endpoint.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Endpoint\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Endpoint.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Environment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Environment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Environment\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Environment.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Eventcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Eventcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Eventcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Eventcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/EventcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\EventcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/EventcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/FlappingHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/FlappingHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\FlappingHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/FlappingHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/History.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/History.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/History.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\History\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/History.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 2 path: library/Icingadb/Model/Host.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Host.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot access property \$flatname on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot access property \$flatvalue on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot access property \$value on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Model/Host.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createDefaults\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createDefaults\(\) has parameter \$defaults with no value type specified in iterable type ipl\\Orm\\Defaults\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Model\\Host\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Host\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Model/Host.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Host.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostState\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostState.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostState\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/HostState.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupMember\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HostgroupMember\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HostgroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Hostgroupsummary\:\:getUnions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Hostgroupsummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/HoststateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getDefaultSort\(\) should return array\|string but returns null\.$#' identifier: return.type count: 1 path: library/Icingadb/Model/HoststateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\HoststateSummary\:\:getSummaryColumns\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/HoststateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/IconImage.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/IconImage.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\IconImage\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/IconImage.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Instance.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Instance.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Instance\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Instance.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotesUrl.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotesUrl.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotesUrl\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotesUrl.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Notification.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Notification.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notification\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Notification.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationHistory\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUser\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUser.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUser\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUser.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUsergroup\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUsergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationUsergroup\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationUsergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Notificationcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Notificationcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Notificationcommand\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Notificationcommand.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandArgument\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationcommandArgument.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\NotificationcommandEnvvar\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/NotificationcommandEnvvar.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 2 path: library/Icingadb/Model/Service.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Service.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot access property \$flatname on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot access property \$flatvalue on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot access property \$value on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Model/Service.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createDefaults\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createDefaults\(\) has parameter \$defaults with no value type specified in iterable type ipl\\Orm\\Defaults\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Model\\Service\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Model\\Service\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Model/Service.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Model/Service.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceState\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServiceState.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServiceState\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServiceState.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Servicegroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Servicegroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Servicegroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Servicegroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupMember\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupMember\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicegroupSummary\:\:getUnions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicegroupSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicestateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getDefaultSort\(\) should return array\|string but returns null\.$#' identifier: return.type count: 1 path: library/Icingadb/Model/ServicestateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/ServicestateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\ServicestateSummary\:\:getSummaryColumns\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/ServicestateSummary.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\State\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/State.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/StateHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/StateHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\StateHistory\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/StateHistory.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Timeperiod.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Timeperiod.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Timeperiod\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Timeperiod.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideExclude\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideExclude.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideExclude\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideExclude.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideInclude\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideInclude.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodOverrideInclude\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodOverrideInclude.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodRange.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/TimeperiodRange.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\TimeperiodRange\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/TimeperiodRange.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/User.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/User.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\User\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/User.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UserCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UserCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UserCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UserCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Usergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Usergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getDefaultSort\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Usergroup\:\:getSearchColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Usergroup.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupCustomvar\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupCustomvar\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupCustomvar.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupMember\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\UsergroupMember\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/UsergroupMember.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Vars\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Vars.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:createBehaviors\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Zone.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:createRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Model/Zone.php - message: '#^Method Icinga\\Module\\Icingadb\\Model\\Zone\:\:getColumnDefinitions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Model/Zone.php - message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/ProvidedHook/ApplicationState.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\ApplicationState\:\:collectMessages\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/ApplicationState.php - message: '#^Parameter \#2 \$timestamp of method Icinga\\Application\\Hook\\ApplicationStateHook\:\:addError\(\) expects int, mixed given\.$#' identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/ApplicationState.php - message: '#^Parameter \#1 \$rule of static method ipl\\Web\\Filter\\QueryString\:\:render\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/CreateHostsSlaReport.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/CreateServiceSlaReport.php - message: '#^Parameter \#1 \$rule of static method ipl\\Web\\Filter\\QueryString\:\:render\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/CreateServicesSlaReport.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\IcingaHealth\:\:getInstance\(\) should return Icinga\\Module\\Icingadb\\Model\\Instance\|null but returns ipl\\Orm\\Model\|null\.$#' identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - message: '#^Property Icinga\\Module\\Icingadb\\ProvidedHook\\IcingaHealth\:\:\$instance \(Icinga\\Module\\Icingadb\\Model\\Instance\) does not accept ipl\\Orm\\Model\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/ProvidedHook/IcingaHealth.php - message: '#^Cannot call method getTimestamp\(\) on mixed\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/ProvidedHook/RedisHealth.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - message: '#^Cannot access property \$sla on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\HostSlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/HostSlaReport.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - message: '#^Cannot access property \$host on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - message: '#^Cannot access property \$sla on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\ServiceSlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/ServiceSlaReport.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method format\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method getRows\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method getValues\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchReportData\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchReportData\(\) has parameter \$config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:fetchSla\(\) return type has no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:getData\(\) has parameter \$config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:initConfigForm\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#1 \$start of class Icinga\\Module\\Reporting\\Timerange constructor expects DateTime, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#1 \$value of function count expects array\|Countable, Icinga\\Module\\Reporting\\ReportData\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#2 \$end of class Icinga\\Module\\Reporting\\Timerange constructor expects DateTime, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#2 \$interval of method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\SlaReport\:\:yieldTimerange\(\) expects DateInterval, DateInterval\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/Reporting/SlaReport.php - message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\TotalHostSlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalHostSlaReport.php - message: '#^Cannot call method count\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - message: '#^Cannot call method getAverages\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - message: '#^Cannot call method getDimensions\(\) on Icinga\\Module\\Reporting\\ReportData\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\Reporting\\TotalServiceSlaReport\:\:getHtml\(\) has parameter \$config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/ProvidedHook/Reporting/TotalServiceSlaReport.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\ProvidedHook\\X509\\Sni\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/ProvidedHook/X509/Sni.php - message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' identifier: foreach.nonIterable count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot access offset mixed on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot access property \$host on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot access property \$id on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot access property \$state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Cannot call method setProperties\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Redis\\VolatileStateResults\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Redis/VolatileStateResults.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportPage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - message: '#^Property Icinga\\Module\\Icingadb\\Setup\\ApiTransportStep\:\:\$data type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/ApiTransportStep.php - message: '#^Cannot call method setMultiOptions\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Cannot call method setValue\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 2 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:addSkipValidationCheckbox\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourcePage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourcePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - message: '#^Property Icinga\\Module\\Icingadb\\Setup\\DbResourceStep\:\:\$data type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/DbResourceStep.php - message: '#^Call to an undefined method Icinga\\Web\\Form\:\:setSubjectTitle\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - message: '#^Call to an undefined method Icinga\\Web\\Form\:\:setSummary\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\IcingaDbWizard\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\IcingaDbWizard\:\:setupPage\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/IcingaDbWizard.php - message: '#^Call to an undefined method Zend_Form_Element\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Setup/RedisPage.php - message: '#^Cannot call method setIgnore\(\) on Zend_Form_Element\|null\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/Setup/RedisPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/RedisPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:isValid\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisPage\:\:isValidPartial\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisPage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:getReport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - message: '#^Property Icinga\\Module\\Icingadb\\Setup\\RedisStep\:\:\$data type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/RedisStep.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\WelcomePage\:\:createElements\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Setup/WelcomePage.php - message: '#^Method Icinga\\Module\\Icingadb\\Setup\\WelcomePage\:\:createElements\(\) has parameter \$formData with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Setup/WelcomePage.php - message: '#^Class Icinga\\Module\\Icingadb\\Util\\FeatureStatus extends generic class ArrayObject but does not specify its types\: TKey, TValue$#' identifier: missingType.generics count: 1 path: library/Icingadb/Util/FeatureStatus.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\FeatureStatus\:\:__construct\(\) has parameter \$summary with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/FeatureStatus.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\FeatureStatus\:\:getFeatureStatus\(\) has parameter \$summary with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/FeatureStatus.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:calculatePieChartData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:format\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:format\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:parse\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfData\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Parameter \#1 \$num of function number_format expects float, float\|int\|string given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Util/PerfData.php - message: '#^Parameter \#1 \$value of method Icinga\\Module\\Icingadb\\Util\\ThresholdRange\:\:contains\(\) expects float, float\|null given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Util/PerfData.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:ampereSeconds\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:amperes\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:bits\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:bytes\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:formatForUnits\(\) has parameter \$units with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:grams\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:liters\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:ohms\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:seconds\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:volts\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:wattHours\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:watts\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$ampSecondPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$amperePrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$bitPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$bytePrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$generalBase has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$gramPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$instance has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$literPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$ohmPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$secondPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$voltPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$wattHourPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataFormat\:\:\$wattPrefix has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Util/PerfDataFormat.php - message: '#^Class Icinga\\Module\\Icingadb\\Util\\PerfDataSet implements generic interface IteratorAggregate but does not specify its types\: TKey, TValue$#' identifier: missingType.generics count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:asArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:getIterator\(\) return type with generic class ArrayIterator does not specify its types\: TKey, TValue$#' identifier: missingType.generics count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:parse\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:skipSpaces\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PerfDataSet\:\:\$perfdata type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Util/PerfDataSet.php - message: '#^Cannot access property \$long_output on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Cannot access property \$output on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:render\(\) should return string but returns string\|null\.$#' identifier: return.type count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Parameter \#1 \$html of static method Icinga\\Web\\Helper\\HtmlPurifier\:\:process\(\) expects string, string\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Parameter \#1 \$string of function trim expects string, string\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Property Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:\$renderedOutput \(string\) does not accept string\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Util/PluginOutput.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\GridViewModeSwitcher\:\:getTitle\(\) should return string but returns string\|null\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Control/GridViewModeSwitcher.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\GridViewModeSwitcher\:\:\$viewModes type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/GridViewModeSwitcher.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:isChecked\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:__construct\(\) has parameter \$filter with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:protectId\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:protectId\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:\$filter has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ProblemToggle\:\:\$protector has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Web/Control/ProblemToggle.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Call to an undefined method object\:\:getTableName\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has parameter \$models with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:collectRelations\(\) has parameter \$path with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:fetchColumnSuggestions\(\) return type has no value type specified in iterable type Traversable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:fetchValueSuggestions\(\) return type has no value type specified in iterable type Traversable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#1 \$filter of method ipl\\Orm\\Query\:\:filter\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#1 \$path of method ipl\\Orm\\Resolver\:\:qualifyPath\(\) expects string, mixed given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#2 \$subject of method ipl\\Orm\\Resolver\:\:resolveRelation\(\) expects ipl\\Orm\\Model\|null, object given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Part \$name \(mixed\) of encapsed string cannot be cast to string\.$#' identifier: encapsedStringPart.nonString count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:\$customVarSources type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\SearchBar\\ObjectSuggestions\:\:\$model \(ipl\\Orm\\Model\) does not accept object\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:getTitle\(\) should return string but returns string\|null\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:protectId\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:protectId\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Parameter \#1 \$key of function array_key_exists expects int\|string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:\$viewModes type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Control/ViewModeSwitcher.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Cannot access offset string on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 2 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method add\(\) on ipl\\Html\\Contract\\Wrappable\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method getAdditional\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method getPreferences\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method getUsername\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 2 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method setAdditional\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 2 path: library/Icingadb/Web/Controller.php - message: '#^Cannot call method setErrorHandlerModule\(\) on array\|Zend_Controller_Plugin_Abstract\|false\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:assertRouteAccess\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:createColumnControl\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:createSearchBar\(\) has parameter \$params with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:export\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:fetchFilterColumns\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:handleSearchRequest\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:moduleInit\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Controller\:\:prepareSearchFilter\(\) has parameter \$additionalColumns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Controller.php - message: '#^PHPDoc tag @param references unknown parameter\: \$preserveParams$#' identifier: parameter.notFound count: 1 path: library/Icingadb/Web/Controller.php - message: '#^PHPDoc tag @param references unknown parameter\: \$redirectUrl$#' identifier: parameter.notFound count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$defaultViewMode of method Icinga\\Module\\Icingadb\\Web\\Control\\ViewModeSwitcher\:\:setDefaultViewMode\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$json of static method Icinga\\Util\\Json\:\:decode\(\) expects string, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#1 \$string of function trim expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#2 \$string of function explode expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#2 \$user of static method Icinga\\User\\Preferences\\PreferencesStore\:\:create\(\) expects Icinga\\User, Icinga\\User\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#2 \$value of method Icinga\\Web\\Url\:\:setParam\(\) expects array\|bool\|string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#3 \$default of method Icinga\\User\\Preferences\:\:getValue\(\) expects null, string given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Parameter \#3 \$filter of method Icinga\\Module\\Icingadb\\Web\\Controller\:\:prepareSearchFilter\(\) expects ipl\\Stdlib\\Filter\\Any, ipl\\Stdlib\\Filter\\Chain given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Controller\:\:\$format \(string\|null\) does not accept mixed\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Web/Controller.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Action\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Action.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Cannot access property \$hosts_down_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\HostProblemsBadge\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/HostProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:createBadge\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:disableLink\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:getProblemsCount\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:getUrl\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:round\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:round\(\) has parameter \$count with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ProblemsBadge\:\:\$linkDisabled has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Web/Navigation/Renderer/ProblemsBadge.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Cannot access property \$services_critical_unhandled on ipl\\Orm\\Model\|null\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:fetchProblemsCount\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\ServiceProblemsBadge\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Web/Navigation/Renderer/ServiceProblemsBadge.php - message: '#^Cannot call method getRenderer\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\TotalProblemsBadge\:\:\$severityStateMap type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - message: '#^Property Icinga\\Module\\Icingadb\\Web\\Navigation\\Renderer\\TotalProblemsBadge\:\:\$stateSeverityMap type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Web/Navigation/Renderer/TotalProblemsBadge.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\CheckAttempt\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/CheckAttempt.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:__construct\(\) has parameter \$object with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assembleBody\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:assembleHeader\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CheckStatistics\:\:\$object has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/CheckStatistics.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createComment\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createDetails\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createRemoveCommentForm\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:createTicketLinks\(\) has parameter \$text with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CommentDetail\:\:\$comment has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/CommentDetail.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\Wrappable\:\:addHtml\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:__construct\(\) has parameter \$data with no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderGroup\(\) has parameter \$entries with no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderObject\(\) has parameter \$object with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Parameter \#1 \$name of method Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:renderArray\(\) expects string, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$data \(array\) does not accept iterable\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$data type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\CustomVarTable\:\:\$groups type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/CustomVarTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:calcRelativeLeft\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:calcRelativeLeft\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$downtime has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$duration has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$end has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeCard\:\:\$start has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/DowntimeCard.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$host on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$is_flexible on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$object_type on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$service on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot access property \$state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot call method getStateText\(\) on mixed\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:createCancelDowntimeForm\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#1 \$downtime of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:downtime\(\) expects Icinga\\Module\\Icingadb\\Model\\Downtime, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\DowntimeDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/DowntimeDetail.php - message: '#^Call to an undefined method ipl\\Html\\BaseHtmlElement\|ipl\\Html\\FormattedString\:\:addAttributes\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$checkcommand_name on mixed\.$#' identifier: property.nonObject count: 6 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 18 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$downtime_id on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$host on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$is_flexible on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$object_type on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot access property \$service on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot call method getStateText\(\) on mixed\.$#' identifier: method.nonObject count: 3 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot call method limit\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleAcknowledgeEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleCommentEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleDowntimeEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleFlappingEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleNotificationEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleStateChangeEvent\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:createTicketLinks\(\) has parameter \$text with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$acknowledgement of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleAcknowledgeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\AcknowledgementHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$comment of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleCommentEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\CommentHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$downtime of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleDowntimeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\DowntimeHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$flapping of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleFlappingEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\FlappingHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$notification of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleNotificationEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\NotificationHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#1 \$stateChange of method Icinga\\Module\\Icingadb\\Widget\\Detail\\EventDetail\:\:assembleStateChangeEvent\(\) expects Icinga\\Module\\Icingadb\\Model\\StateHistory, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/EventDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:createServiceStatistics\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\HostDetail\:\:\$serviceSummary has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/HostDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostInspectionDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostInspectionDetail.php - message: '#^Cannot access property \$last_state_change on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/HostMetaInfo.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostMetaInfo\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/HostMetaInfo.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\HostStatistics\:\:__construct\(\) has parameter \$summary with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/HostStatistics.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\HostStatistics\:\:\$summary has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/HostStatistics.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:__construct\(\) has parameter \$summary with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:__construct\(\) has parameter \$type with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:assembleAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Parameter \#3 \$filter of method Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:isGrantedOnType\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 10 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:\$summary has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\MultiselectQuickActions\:\:\$type has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/MultiselectQuickActions.php - message: '#^Access to an undefined property object\:\:\$checkcommand_name\.$#' identifier: property.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Access to an undefined property object\:\:\$normalized_performance_data\.$#' identifier: property.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:__construct\(\) has parameter \$object with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:compatObject\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createActions\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createCheckStatistics\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createComments\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createDowntimes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createFeatureToggles\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createGroups\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createNotes\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createNotifications\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPerformanceData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPluginOutput\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:createPrintHeader\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:fetchCustomVars\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:getUsersAndUsergroups\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#1 \$object of static method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:fromObject\(\) expects Icinga\\Module\\Icingadb\\Model\\Host\|Icinga\\Module\\Icingadb\\Model\\Service, object given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$compatObject has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$object has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectDetail\:\:\$objectType has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectStatistics\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectStatistics.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createComments\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createDowntimes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createFeatureToggles\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:createSummary\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Parameter \#3 \$baseFilter of static method Icinga\\Module\\Icingadb\\Hook\\ExtensionHook\\ObjectsDetailExtensionHook\:\:loadExtensions\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$query has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$summary has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ObjectsDetail\:\:\$type has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ObjectsDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\PerfDataTable\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/PerfDataTable.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Cannot access property \$is_acknowledged on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Cannot access property \$is_problem on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:__construct\(\) has parameter \$object with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:assembleAction\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:getLink\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:getLink\(\) has parameter \$action with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\QuickActions\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/QuickActions.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceInspectionDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceInspectionDetail.php - message: '#^Cannot access property \$last_state_change on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/ServiceMetaInfo.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceMetaInfo\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/ServiceMetaInfo.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceStatistics\:\:__construct\(\) has parameter \$summary with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Detail/ServiceStatistics.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Detail\\ServiceStatistics\:\:\$summary has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Detail/ServiceStatistics.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Cannot call method getModel\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Cannot call method limit\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createUserDetail\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:createUsergroupList\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeStates\(\) has parameter \$states with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeStates\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeTypes\(\) has parameter \$types with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:localizeTypes\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:separateStates\(\) has parameter \$states with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:separateStates\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UserDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UserDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:getColumn\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Call to an undefined method ipl\\Stdlib\\Filter\\Rule\:\:metaData\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Cannot call method getModel\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Cannot call method getRoles\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Cannot call method isUnrestricted\(\) on Icinga\\User\|null\.$#' identifier: method.nonObject count: 4 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Cannot call method limit\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createCustomVars\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createExtensions\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createPrintHeader\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:createUserList\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseDenylist\(\) should return ipl\\Stdlib\\Filter\\None but returns ipl\\Stdlib\\Filter\\Chain\.$#' identifier: return.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#1 \$condition of method ipl\\Sql\\QueryBuilder\:\:buildCondition\(\) expects array, array\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#1 \$denylist of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseDenylist\(\) expects string, array\ given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#1 \$query of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:applyRestrictions\(\) expects ipl\\Orm\\Query, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#1 \$queryString of method Icinga\\Module\\Icingadb\\Widget\\Detail\\UsergroupDetail\:\:parseRestriction\(\) expects string, array\ given\.$#' identifier: argument.type count: 3 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\\|int\<1, max\>\|string given\.$#' identifier: argument.type count: 4 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Parameter \#2 \$tableName of method ipl\\Orm\\Resolver\:\:qualifyColumn\(\) expects string, int\|string given\.$#' identifier: argument.type count: 2 path: library/Icingadb/Widget/Detail/UsergroupDetail.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Health\:\:__construct\(\) has parameter \$data with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/Health.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\Health\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/Health.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\Health\:\:\$data has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/Health.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostStateBadges\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostStateBadges.php - message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/HostStatusBar.php - message: '#^Parameter \#3 \$number of function tp expects int\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/HostStatusBar.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleBody\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleFooter\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\HostSummaryDonut\:\:assembleHeader\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/HostSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\IconImage\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/IconImage.php - message: '#^Access to an undefined property object\:\:\$name\.$#' identifier: property.notFound count: 7 path: library/Icingadb/Widget/ItemList/CommandTransportListItem.php - message: '#^Call to an undefined method ipl\\Web\\Common\\BaseItemList\:\:addDetailFilterAttribute\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/ItemList/CommandTransportListItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemList\\PageSeparatorItem\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemList/PageSeparatorItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleCell\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:assembleVisual\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\BaseStateRowItem\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/BaseStateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostItemTable\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostItemTable.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:assembleCell\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\HostRowItem\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Parameter \#1 \$service of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Service, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/HostRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceItemTable\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceItemTable.php - message: '#^Cannot access property \$display_name on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Cannot access property \$name on mixed\.$#' identifier: property.nonObject count: 3 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:assembleCell\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\ServiceRowItem\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Parameter \#1 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:host\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Parameter \#2 \$host of static method Icinga\\Module\\Icingadb\\Common\\Links\:\:service\(\) expects Icinga\\Module\\Icingadb\\Model\\Host, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/ServiceRowItem.php - message: '#^Call to an undefined method ipl\\Html\\Contract\\FormElement\:\:addHtml\(\)\.$#' identifier: method.notFound count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Cannot access offset 0 on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Cannot access offset 1 on mixed\.$#' identifier: offsetAccess.nonOffsetAccessible count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:__construct\(\) has parameter \$data with no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:applyColumnMetaData\(\) has parameter \$columns with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:applyColumnMetaData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:assembleColumnHeader\(\) has parameter \$label with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:getVisualLabel\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:init\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Parameter \#1 \.\.\.\$content of method ipl\\Html\\BaseHtmlElement\:\:addHtml\(\) expects ipl\\Html\\ValidHtml, object given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$baseAttributes has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$data type has no value type specified in iterable type iterable\.$#' identifier: missingType.iterableValue count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateItemTable\:\:\$sort \(string\) does not accept string\|null\.$#' identifier: assign.propertyType count: 1 path: library/Icingadb/Widget/ItemTable/StateItemTable.php - message: '#^Cannot access property \$check_attempt on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$hard_state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$is_handled on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$is_problem on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$is_reachable on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$last_state_change on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$last_update on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$next_check on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$next_update on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$normalized_performance_data on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$previous_hard_state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$previous_soft_state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$soft_state on mixed\.$#' identifier: property.nonObject count: 2 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot access property \$state_type on mixed\.$#' identifier: property.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot call method getIcon\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot call method getStateText\(\) on mixed\.$#' identifier: method.nonObject count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Cannot cast mixed to int\.$#' identifier: cast.int count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleCell\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleCell\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ItemTable\\StateRowItem\:\:assembleVisual\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Parameter \#1 \$object of static method Icinga\\Module\\Icingadb\\Util\\PluginOutput\:\:fromObject\(\) expects Icinga\\Module\\Icingadb\\Model\\Host\|Icinga\\Module\\Icingadb\\Model\\Service, ipl\\Orm\\Model given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Parameter \#2 \$alt of class Icinga\\Module\\Icingadb\\Widget\\IconImage constructor expects string\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ItemTable/StateRowItem.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceStateBadges\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceStateBadges.php - message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceStatusBar.php - message: '#^Parameter \#3 \$number of function tp expects int\|null, mixed given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceStatusBar.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleBody\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleFooter\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\ServiceSummaryDonut\:\:assembleHeader\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - message: '#^Parameter \#1 \$rule of method ipl\\Stdlib\\Filter\\Chain\:\:add\(\) expects ipl\\Stdlib\\Filter\\Rule, ipl\\Stdlib\\Filter\\Rule\|null given\.$#' identifier: argument.type count: 1 path: library/Icingadb/Widget/ServiceSummaryDonut.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:setHandled\(\) has parameter \$isHandled with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:setIcon\(\) has parameter \$icon with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$currentStateBallSize has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$previousState has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$previousStateBallSize has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\StateChange\:\:\$state has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/StateChange.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:addLink\(\) has parameter \$content with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/TagList.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:addLink\(\) has parameter \$url with no type specified\.$#' identifier: missingType.parameter count: 1 path: library/Icingadb/Widget/TagList.php - message: '#^Method Icinga\\Module\\Icingadb\\Widget\\TagList\:\:assemble\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: library/Icingadb/Widget/TagList.php - message: '#^Property Icinga\\Module\\Icingadb\\Widget\\TagList\:\:\$content has no type specified\.$#' identifier: missingType.property count: 1 path: library/Icingadb/Widget/TagList.php icingadb-web-1.5.0/phpstan.neon000066400000000000000000000013161527064444300164000ustar00rootroot00000000000000includes: - phpstan-baseline.neon parameters: level: max checkFunctionNameCase: true checkInternalClassCaseSensitivity: true treatPhpDocTypesAsCertain: false paths: - application - library scanDirectories: - /icingaweb2 - /usr/share/icinga-php - /usr/share/icingaweb2-modules ignoreErrors: - messages: - '#Unsafe usage of new static\(\)#' - '#. but return statement is missing#' reportUnmatched: false universalObjectCratesClasses: - ipl\Orm\Model - Icinga\Web\View - Icinga\Data\ConfigObject - Icinga\Module\Monitoring\Object\MonitoredObject icingadb-web-1.5.0/public/000077500000000000000000000000001527064444300153175ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/000077500000000000000000000000001527064444300161075ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/common.less000066400000000000000000000102761527064444300202750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later & > .content.full-height { padding-top: 0; padding-bottom: 0; } .plugin-output { .monospace(); word-break: break-word; } div.show-more { .clearfix(); float: right; } .state-ball.state-not-available { .ball-solid(@gray-light); .animate(pulse 1.5s infinite both); } .state-ball.state-info { .ball-solid(@default-text-color); } .icon-ball { .ball(); .ball-outline(@gray); text-align: center; i:before { margin-right: 0; } } .user-ball { .ball-solid(@gray-semilight); font-weight: bold; text-transform: uppercase; vertical-align: top; // Avoid the bottom margin of the ball to affect the line height } .usergroup-ball { .ball-outline(@gray); text-transform: uppercase; vertical-align: top; // Avoid the bottom margin of the ball to affect the line height } .ack-badge { text-transform: uppercase; line-height: 1; margin-top: -.25em; align-self: flex-start; i { vertical-align: baseline; } } .ack-badge:not(.badge) { color: @color-ok; margin-top: 0.25em; } .controls { .box-shadow(0, 0, 0, 1px, @gray-lighter); flex-shrink: 0; position: relative; // Required for the host meta info control z-index: 1; // The content may clip, this ensures the separator is always visible > :not(:only-child) { margin-bottom: .5em; } #object-meta-info { margin-bottom: 0; .object-meta-info { margin-bottom: .5em; } } &.overdue, &.overdue .tabs li.active a, &.overdue .object-meta-info-control { background-color: @gray-lighter; } .limit-control, .view-mode-switcher, .sort-control { margin-left: .5em; float: right; } .toggle-switch { margin-top: 0; margin-bottom: 0; } .search-controls .continue-with { margin-right: -.5em; margin-left: .5em; } .show-more { margin-top: .25em; } .notice { display: none; } } .content > h2:first-child, .object-detail > h2:first-child { margin-top: 0; } .content.full-width > h2 { margin-left: 1em / 1.333em; // 1em / h2 font size } .object-detail :not(.caption) > .plugin-output { .rounded-corners(.25em); background-color: @gray-lighter; padding: .5em; } .object-detail .item-list { &.action-list .list-item { margin-right: -1em; margin-left: -1em; padding-right: 1em; padding-left: 1em; } .list-item:last-of-type .caption { min-height: 1.5em; max-height: 3em; height: auto; } } .perfdata-wrapper { svg { width: 100%; } svg:not(:last-child) { margin-bottom: 1em; } } .text-center { text-align: center; } .text-muted { color: @gray; } .accompanying-text { color: @text-color-light; .subject { color: @text-color; .user-select(all); } } .comment-detail { > form, > h2:not(:first-child) { margin-top: 1em; } } .downtime-detail { .downtime-progress { margin-bottom: 1em; } } .content + .footer { display: flex; .box-shadow(0, -1px, 0, 0, @gray-lighter); color: @text-color-light; .selection-count { flex: 1 1 auto; .selected-items { font-size: 1.25em; &.hint { opacity: 0.75; } } } .status-bar, .selection-count { font-size: .857em; padding: .25em 1em; line-height: 1.7; } } .status-bar { margin-left: auto; .item-count { font-size: 1.25em; } .state-badges { display: inline-block; margin: 0 0 0 .417em; } } .multiselect-summary { display: flex; align-items: center; justify-content: flex-start; // Donut > div:first-child { height: 4em; width: 4em; > svg { height: auto; max-width: 100%; } } > .vertical-key-value { padding: 0 .5em; } } .header-item-layout.host, .header-item-layout.service, .item-layout.history { .visual.small-state-change .state-change { padding-top: .25em; } } // user, usergroup and comment balls .header-item-layout .visual:has(.ball.ball-size-xl) { padding-top: 0; padding-bottom: 0; } form[name="form_confirm_removal"] { text-align: center; } .affected-objects { display: inline-flex; align-items: baseline; color: @state-critical; .icon { opacity: .9; } } icingadb-web-1.5.0/public/css/form/000077500000000000000000000000001527064444300170525ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/form/general-config-form.less000066400000000000000000000003641527064444300235660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2026 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .general-config-form { p.description { color: @text-color-light; } ul.lock-reasons { margin: 0; padding: 0; } } icingadb-web-1.5.0/public/css/form/schedule-service-downtime-form.less000066400000000000000000000006341527064444300257640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .downtime-duration { > label { display: flex; flex: 1 1 auto; flex-flow: row-reverse; input { flex: 1 1 auto; } span { margin-left: .5em; padding: .5625em 0; line-height: 1.1em; } &:not(:last-child) { margin-right: 1.5em; } } } icingadb-web-1.5.0/public/css/item/000077500000000000000000000000001527064444300170455ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/item/alert.less000066400000000000000000000025621527064444300210510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2026 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .item-layout.alert { .icon-ball { .ball-solid(@gray-light); border: none; color: @text-color; } .title .membership .icon { color: @text-color-light; } } .item-layout.history { .extended-info .alert-count { color: @text-color-light; } .sent-notifications { details .alert-list { background-color: @body-bg-color; .list-item:first-child .main { border-top: 1px solid @list-item-separation-bg; } } .collapsible-control { color: @icinga-blue; cursor: pointer; .user-select(none); .rounded-corners(1em); &:hover { background: @gray-light; } } } } // Layout .item-layout.history { flex-wrap: wrap; > .sent-notifications { width: 100%; .alert-list { margin-left: -1em; margin-right: -1em; .list-item { padding-left: 1em; padding-right: 1em; } } } .extended-info .alert-count { margin-right: 1em; .icon::before { margin-right: .25em; } } .sent-notifications .alert-count { display: flex; align-items: center; justify-content: flex-end; gap: .25em; width: fit-content; margin-left: auto; padding: 0 .5em; margin-bottom: .5em; } } icingadb-web-1.5.0/public/css/item/downtime.less000066400000000000000000000027071527064444300215710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .item-layout.downtime { .visual { background-color: @gray-lighter; } &.in-effect .visual { background-color: @color-ok; color: @text-color-on-icinga-blue; } } .list-item.downtime { .progress { > .bar { background-color: @color-ok; } } .main { border-top: 1px solid @gray-light; } &:first-child .main { border-top: none; .progress > .bar { border-top: 1px solid @gray-light; } } } // Layout .item-layout.downtime { .caption > * { display: inline; } .visual { justify-content: center; flex-shrink: 0; line-height: 1em; padding: .5em .25em; text-align: center; width: 6em; strong { font-size: 1.5em; line-height: 1em; } } } .list-item.downtime { .progress { height: 2px; margin-bottom: ~"calc(.5em - 2px)"; min-width: 100%; position: relative; > .bar { height: 100%; max-width: 100%; } } &:first-child .main .progress > .bar { height: ~"calc(100% + 1px)"; // +1px due to the border added exclusively for the first item } .main:has(.progress) { padding-top: 0; } } .minimal-item-layout.downtime { .visual { display: block; line-height: 1.5; width: 8em; white-space: nowrap; strong { display: inline-block; font-size: 1em; } } } icingadb-web-1.5.0/public/css/item/hostgroup.less000066400000000000000000000010251527064444300217650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2025 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .hostgroup { &.table-row.item-layout { > .col:has(.object-statistics) { align-content: center; // Actually, not sure why this works… .col is not a grid container } > .main > .caption { height: auto; .text-ellipsis(); .line-clamp("reset"); } } &.header-item-layout > .main { padding-top: 0; padding-bottom: 0; > header { align-items: center; } } } icingadb-web-1.5.0/public/css/item/icon-image.less000066400000000000000000000012161527064444300217450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2025 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .item-layout { .icon-image { width: 3em; height: 3em; text-align: center; margin-top: .5em; margin-right: .5em; overflow: hidden; img { max-height: 100%; max-width: 100%; height: auto; width: auto; } .icon, img { vertical-align: baseline; } } &.minimal-item-layout { .icon-image { height: 2em; width: 2em; line-height: 2; } } &.header-item-layout .icon-image { margin-top: 0; img { vertical-align: middle; } } } icingadb-web-1.5.0/public/css/item/item-layout.less000066400000000000000000000026761527064444300222210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .item-layout { &.overdue { background-color: @gray-lighter; } &.overdue header > *:not(time), &.overdue .caption { opacity: 0.6; } &.overdue time { .rounded-corners(); background-color: @color-critical; color: @text-color-on-icinga-blue; } .title { .state-text { color: @text-color; text-transform: uppercase; } } footer { .status-icons { color: @text-color-light; .icon { opacity: .5; } } } } // Layout .item-layout { &.overdue time { margin-right: -.5em; padding: 0 0.5em; } .visual .check-attempt { margin-top: .5em; } .caption { &.plugin-output, .plugin-output { font-size: 11/12em; line-height: 1.5*12/11em; } } &.minimal-item-layout, &.default-item-layout { .caption .plugin-output { .text-ellipsis(); } } &.minimal-item-layout.hostgroup .extended-info { > :not(:last-child) { margin-right: 1em; } } footer { .status-icons { display: flex; align-items: center; } .performance-data { margin-left: auto; .inline-pie { display: inline-block; line-height: 1.5*.857em; height: 1em; width: 1em; &:not(:last-child) { margin-right: .209em; } } } } } icingadb-web-1.5.0/public/css/item/redundancy-group.less000066400000000000000000000005611527064444300232250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2024 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .item-layout.redundancy-group { .caption { display: flex; justify-content: flex-end; } } .default-item-layout.redundancy-group { .title > .subject { margin-right: .28125em; } .caption .object-statistics { font-size: 0.75em; } } icingadb-web-1.5.0/public/css/item/servicegroup.less000066400000000000000000000002171527064444300224520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2025 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .servicegroup { .hostgroup; } icingadb-web-1.5.0/public/css/list/000077500000000000000000000000001527064444300170625ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/list/action-list.less000066400000000000000000000006611527064444300222030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .action-list { [data-action-item]:hover { background-color: @tr-hover-color; cursor: pointer; } [data-action-item].active { background-color: @tr-active-color; } &[data-icinga-multiselect-url] * { user-select: none; } } #layout.minimal-layout .footer > .selection-count { display: none; } icingadb-web-1.5.0/public/css/list/item-list.less000066400000000000000000000031721527064444300216640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .item-list { .load-more:hover, .page-separator:hover { background: none; } > .load-more a { .rounded-corners(.25em); background: @low-sat-blue; text-align: center; &:hover { opacity: .8; text-decoration: none; } } > .page-separator:after { content: ""; display: block; width: 100%; height: 1px; background: @gray; align-self: center; margin-left: .25em; } > .page-separator a { color: @gray; font-weight: bold; &:hover { text-decoration: none; } } > .page-separator + .list-item .main { border-top: none; } .icingadb-history-timestamp { &:hover { .rounded-corners(1em); background: @gray-light; } .user-select(none); padding-left: 0.5em; padding-right: 0.5em; } .day-separator { background-color: @gray-lighter; } } // Layout .item-list .load-more { display: flex; a { flex: 1; margin: 1.5em 0; padding: .5em 0; } } .item-list { .detailed-item-layout footer { .status-icons .icon, .performance-data { font-size: .857em; line-height: 1.5*.857em; } } // Not sure what this is for. Maybe user content? (Markdown) But why in the title?? .default-item-layout .title { p { margin: 0; } } .minimal-item-layout .title { p { display: inline; & + p { margin-left: .417em; } } } .day-separator { display: flex; justify-content: end; padding-right: 1.5em; } } icingadb-web-1.5.0/public/css/list/state-item-table.less000066400000000000000000000074001527064444300231140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .state-item-table { padding: 0; thead { th { font-weight: normal; &.last-th .column-chooser-opener { border-bottom: 1px solid @gray-light; } // Border styles start form { padding: 0 0 0 1px; border-bottom: 1px solid @gray-light; background: linear-gradient(to top, @gray-light, @body-bg-color); button { background: @body-bg-color; } } &:first-child form { padding-left: 0; } // Border styles end } button { .appearance(none); border: none; background: none; padding: .1em .5em; text-align: left; color: @text-color-light; > .icon { opacity: 0; width: 0; transition: opacity .25s linear, width .25s ease; } &:hover .icon, &:focus .icon, &.active .icon { opacity: 1; width: 1em; } &.active { font-weight: bold; } } } .list-item:not(:last-child) > *:not(.visual), .row-item:not(:last-child) { border-bottom: 1px solid @gray-light; } } @media print { .list-item.page-break-follows { &:not(:last-child) > *:not(.visual) { border-bottom: none; } } } // Layout table.state-item-table { table-layout: fixed; } .state-item-table { display: table; width: 100%; margin: 0; thead { position: sticky; top: 0; th { // That's layout, yes, controls overflow when scrolling padding: 1em 0 0 0; background: @body-bg-color; &.last-th { display: flex; form { flex: 1 1 auto; padding-right: 1px; } .column-chooser-opener { width: 3em; line-height: 1; padding-left: 0.2em; i.icon { font-size: 2em; line-height: 0.5; } } } } th button { width: 100%; display: inline-flex; align-items: baseline; justify-content: space-between; span { .text-ellipsis(); } } } th.has-visual { width: 3em; } tbody td { .text-ellipsis(); vertical-align: top; } .list-item { display: table-row; } .list-item > .col { display: table-cell; vertical-align: middle; white-space: nowrap; &:not(:last-child) { padding-right: 1em; } &.title { .text-ellipsis(); width: 100%; } > * { display: inline-block; &:not(:last-child) { margin-right: .5em; } } } .list-item > *:not(.visual) { padding: .5em 0; } .list-item > .visual { display: table-cell; padding: .5em 1em 0 0; } > .empty-state-bar, > tbody > tr:first-child .empty-state-bar { margin: 0 1em; } } .content.full-width .state-item-table .list-item { // The .list-item itself can't have padding because of `display:table-row` &:before, &:after { display: inline-block; content: '\00a0'; width: 1em; } } #layout.twocols table.state-item-table { > thead > tr > th, > tbody > tr > td { &:nth-child(n+6) { display: none; width: 0; } } } #layout.wide-layout .item-table th.has-plugin-output { width: 50em; } #layout.default-layout .item-table th.has-plugin-output { width: 30em; } #layout.compact-layout .item-table th.has-plugin-output { width: 10em; } #layout.twocols table.item-table { .has-plugin-output { width: auto; } } table.item-table { th.has-visual { button { display: inline-flex; justify-content: center; } span > .icon:before { margin: 0; } } .visual { text-align: center; } } icingadb-web-1.5.0/public/css/list/state-row-item.less000066400000000000000000000012451527064444300226350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .row-item { .plugin-output { overflow: hidden; .line-clamp(); } .subject { font-weight: bold; } } // Layout .row-item { .performance-data { overflow: hidden; .line-clamp(2); white-space: normal; margin-left: -.25em; .inline-pie { display: inline-block; width: 1em; height: 1em; margin-left: .25em; } } .has-icon-images { height: 2.5em; vertical-align: middle; img { max-height: 100%; max-width: 100%; height: auto; width: auto; } } } icingadb-web-1.5.0/public/css/markdown.less000066400000000000000000000021561527064444300206250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .markdown { > p, > hr, > ul, > ol, > table, > pre, > blockquote, li > ul, li > ol { margin: 1em 0 1em 0; &:first-child { margin-top: 0; } } p { &:last-child { margin-bottom: 0; } } img { max-width: 100%; height: auto; } a { border-bottom: 1px dotted @text-color-light; &:hover, &:focus { border-bottom: 1px solid @text-color; text-decoration: none; } img { max-width: 32em; } &.with-thumbnail { img { padding: 1px; } &:hover, &:focus { img { padding: 0; } } } } table { border-collapse: collapse; th { text-align: left; background-color: @gray-lighter; } &, th, td { border: 1px solid; border-color: @gray-light; } } } .markdown.inline { img { max-height: 100%; vertical-align: middle; } a.with-thumbnail { &, &:hover, &:focus { border-bottom: none; } } } icingadb-web-1.5.0/public/css/mixin/000077500000000000000000000000001527064444300172335ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/mixin/progress-bar.less000066400000000000000000000115271527064444300225370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .progress-bar() { &.progress-bar { --hPadding: 10%; --duration-scale: 80%; .above, .below { list-style-type: none; margin: 0; padding: 0; position: relative; height: ~"calc(2em + 2px)"; } .below { > .left { // positions with left property position: absolute; left: var(--hPadding); top: 0; } > .right { // positions with right property position: absolute; right: ~"calc(100% - calc(var(--hPadding) + var(--duration-scale)))"; top: 0; } } .positioned { position: absolute; } .bubble { .rounded-corners(.25em); background-color: @body-bg-color; border: 1px solid; border-color: @gray-light; position: relative; box-shadow: 0 0 1em 0 rgba(0, 0, 0, .1); padding: .25em .5em; text-align: center; width: auto; // The wrapper of .bubble is dynamically moved to the left based on the value of the progress bar // This moves the center of the bubble to the beginning of the wrapper regardless of the size of the content. transform: translate(50%, 0); z-index: 1; > * { position: relative; z-index: 2; } &:hover { z-index: 5; } &::before { background-color: @body-bg-color; border-bottom: 1px solid @gray-light; border-right: 1px solid @gray-light; content: ""; display: block; height: 1em; margin-left: -.5em; transform: rotate(45deg); width: 1em; z-index: 1; position: absolute; bottom: -.5em; left: 50%; } &.upwards::before { bottom: auto; top: -7/12em; transform: rotate(225deg); } &.right-aligned { // entire width (moves the left border in place of the right) - (.675em (:before placement) + .5em (half :before width)) - 1px (:before border) transform: translate(~"calc(100% - 1.175em - 1px)", 0); &::before { top: auto; left: 1.175em; bottom: -.5em; } } &.left-aligned { // This is (.675em (:before placement) + .5em (half :before width)) + 1px (:before border) transform: translate(~"calc(1.175em + 1px)", 0); &::before { top: auto; left: auto; right: .675em; bottom: -.5em; } } } .left .bubble { transform: translate(-50%, 0); } .above .positioned { bottom: 0; } .below .positioned { top: 0; } .vertical-key-value { .key { white-space: nowrap; } .value { white-space: nowrap; font-size: 1em; line-height: 1; } } .timeline { @marker-gap: 1/12em; .rounded-corners(.5em); background-color: @gray-lighter; height: 1em; margin: 1em 0; position: relative; width: 100%; z-index: 1; .marker { .rounded-corners(50%); background-color: @gray-light; height: .857em; margin-left: -.857/2em; width: .857em; z-index: 2; position: absolute; top: @marker-gap; &.highlighted { background-color: @icinga-blue; } &.left { left: var(--hPadding); } &.right { left: ~"calc(var(--hPadding) + var(--duration-scale))"; } } .progress { position: absolute; left: var(--hPadding); width: var(--duration-scale); &[data-animate-progress]::before { content: ""; display: block; width: .5em + @marker-gap; height: 1em + (@marker-gap * 2); margin-top: -@marker-gap; .rounded-corners(.5em); border-top-right-radius: 0; border-bottom-right-radius: 0; position: absolute; left: -.5em - @marker-gap; } > .bar { width: 0; // set by progress-bar.js height: 1em + (@marker-gap * 2); margin-top: -@marker-gap; } &::before, > .bar { background-color: @gray-light; } } .timeline-overlay { position: absolute; left: ~"calc(var(--hPadding) + var(--duration-scale))"; width: var(--overlay-scale); height: 1em + (@marker-gap * 2); margin-top: -@marker-gap; opacity: .6; } .progress > .bar, .timeline-overlay { display: flex; justify-content: flex-end; .now { width: .25em; border: solid @default-bg; border-width: 1px 0 1px 0; background-color: red; } } } } } icingadb-web-1.5.0/public/css/mixin/state-badges.less000066400000000000000000000012021527064444300224610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .state-badges() { &.state-badges { padding: 0; ul { padding: 0; } li { display: inline-block; } li > ul > li:first-child:not(:last-child) .state-badge { border-bottom-right-radius: 0; border-top-right-radius: 0; } li > ul > li:last-child:not(:first-child) .state-badge { border-bottom-left-radius: 0; border-top-left-radius: 0; } > li:not(:last-child) { margin-right: .25em; } li > ul > li + li { margin-left: 1px; } } } icingadb-web-1.5.0/public/css/mixins.less000066400000000000000000000003161527064444300203060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .monospace() { font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; } icingadb-web-1.5.0/public/css/view/000077500000000000000000000000001527064444300170615ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/view/service-grid.less000066400000000000000000000016521527064444300223400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .service-grid-table { width: 0; white-space: nowrap; td { color: @gray-light; padding: 0.2em; text-align: center; width: 1em; } .rotate-45 { height: 10em; div { .transform(translate(0.4em, 2.8em) rotate(315deg)); width: 1.5em; } } .service-grid-table-more { text-align: center; a { display: inline; } } } .joystick-pagination { margin: 0 auto; font-size: 130%; a { color: @text-color; outline: none; &:hover { color: @text-color-light; } &:focus, &:active { color: @icinga-blue; } } i { display: block; height: 1.5em; width: 1.5em; } } .service-grid-link { .bg-stateful(); .rounded-corners(); display: inline-block; height: 1.5em; vertical-align: middle; width: 1.5em; } icingadb-web-1.5.0/public/css/widget/000077500000000000000000000000001527064444300173725ustar00rootroot00000000000000icingadb-web-1.5.0/public/css/widget/actions.less000066400000000000000000000007201527064444300217210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .object-detail-actions a { border-bottom: 1px solid @gray-light; display: inline-block; margin-bottom: .25em; .text-ellipsis(); max-width: 32em; &:hover { border-color: @icinga-blue-light; color: @icinga-blue; text-decoration: none; } } ul.object-detail-actions { list-style-type: none; padding: 0; margin: 0; } icingadb-web-1.5.0/public/css/widget/alert-detail.less000066400000000000000000000005301527064444300226270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2026 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .alert-detail .alert-message { .monospace(); .rounded-corners(.25em); background-color: @gray-lighter; } // Layout .alert-detail .alert-message { padding: .5em; white-space: pre-wrap; word-break: break-word; }icingadb-web-1.5.0/public/css/widget/check-attempt.less000066400000000000000000000005631527064444300230170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .check-attempt { display: flex; align-items: center; justify-content: center; } .check-attempt .ball { background-color: @gray-light; &:not(:last-child) { margin-right: 1/6em; } &.ball-size-s { background-color: @gray-semilight; } } icingadb-web-1.5.0/public/css/widget/check-statistics.less000066400000000000000000000067061527064444300235400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .check-statistics { position: relative; .card(); .progress-bar(); .check-attempt { display: inline-flex; } &.progress-bar .bubble { &.top-left-aligned, &.top-right-aligned { &::before { visibility: hidden; } svg { position: absolute; top: -1em; width: 1em; height: 1em; .bg { fill: @body-bg-color; } .border { fill: @gray-light; } } } &.top-left-aligned { transform: unset; border-top-left-radius: 0; svg { left: -1px; } } &.top-right-aligned { transform: translate(-100%); border-top-right-radius: 0; svg { right: -1px; } } } // ATTENTION!: `&.progress-bar {` must not be used here, seems to confuse the less parser!!!!111 &.progress-bar .timeline .progress.running { &::before, > .bar { background: @state-ok; } } &.progress-bar .check-timeline { margin-top: .5em; } &.progress-bar .above { margin-top: .5em; } .interval-line { position: absolute; height: 100%; &::before { position: absolute; top: ~"calc(50% - .125em)"; display: block; height: .25em; width: 100%; content: ""; background-color: @gray-light; } .vertical-key-value { position: absolute; left: 50%; transform: translate(-50%, 0); padding: 0 .2em; background-color: @body-bg-color; } .start, .end { position: absolute; top: 50%; width: .25em; height: 1em; background-color: @gray; } .start { left: 0; transform: translate(-50%, -50%); } .end { right: 0; transform: translate(50%, -50%); } } .execution-line .vertical-key-value { z-index: 1; } &.check-overdue { --duration-scale: 60%; --overlay-scale: 20%; .above { .now { position: absolute; right: var(--hPadding); bottom: 0; .bubble { // to move the center of the bubble to the end of the wrapper. transform: translate(50%, 0); } } } .timeline-overlay { background: linear-gradient(90deg, @gray-light 0, @color-down 2em); opacity: 1; &::after { background-color: @color-down; } } } &.checks-disabled.progress-bar { .timeline { .marker { &.highlighted { background-color: @gray; } } } } .checks-disabled-overlay { border-radius: 0.4em; position: absolute; top: 0; right: 0; left: 0; bottom: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; background-color: ~"@{disabled-gray}20"; z-index: 1; .notes { color: @text-color-light; margin-top: -4em; text-shadow: 0 0 1px rgba(0, 0, 0, 0.25); } } } #layout.twocols &#col1, #layout.minimal-layout, #layout.poor-layout, #layout.twocols.compact-layout, #layout.twocols.default-layout { .check-statistics .bubble.top-right-aligned { transform: translate(-50%, 0); // default what progress-bar() defined border-top-right-radius: .25em; // default what progress-bar() defined &::before { visibility: visible; } svg { display: none; } } } icingadb-web-1.5.0/public/css/widget/comment-popup.less000066400000000000000000000027231527064444300230710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .comment-popup { font-size: 1em / .857em; // // default font size / footer font size = 12px height: 6em; border-radius: 0.25em; border: 1px solid; border-color: @gray-light; background-color: @body-bg-color; } .comment-wrapper { position: relative; .comment-popup { position: absolute; top: 2.5em; left: -1.6em; z-index: 1; width: 50em; padding: 0 1em; } .comment-popup:before { content: ''; position: absolute; display: inline-block; width: 1.5em; height: 1.5em; left: 1.5em; top: ~"calc(-0.75em - 1px)"; border-left: 1px solid @gray-light; border-top: 1px solid @gray-light; background-color: @body-bg-color; z-index: -1; transform: rotate(45deg); } } ul.item-list li:nth-last-child(2):not(:first-child), ul.item-list li:last-child:not(:first-child) { .comment-wrapper { .comment-popup { top: -7em; } .comment-popup:before { bottom: ~"calc(-0.75em - 1px)"; top: unset; transform: rotate(225deg); } } } .comment-wrapper:not(:hover) .comment-popup { display: none; } #layout { &.twocols { .comment-popup { width: 35em; } &.poor-layout, &.compact-layout { .comment-popup { width: 25em; } } } &.poor-layout, &.minimal-layout { .comment-popup { width: 25em; } } } icingadb-web-1.5.0/public/css/widget/custom-var-table.less000066400000000000000000000015741527064444300234560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .custom-var-table { .level-1 th { padding-left: .5em; } .level-2 th { padding-left: 1em; } .level-3 th { padding-left: 1.5em; } .level-4 th { padding-left: 2em; } .level-5 th { padding-left: 2.5em; } .level-6 th { padding-left: 3em; } thead th { padding-left: 0; text-align: left; font-weight: bold; font-size: 1.167em; > span { :nth-child(1), :nth-child(2) { display: none; } } } &[data-can-collapse] thead th > span { :nth-child(1) { display: none; } :nth-child(2) { display: inline-block; } } &.collapsed thead th > span { :nth-child(1) { display: inline-block; } :nth-child(2) { display: none; } } } icingadb-web-1.5.0/public/css/widget/dependency-node-state-badges.less000066400000000000000000000004001527064444300256560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2024 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .dependency-node-state-badges { .state-badges(); .state-badge { &.state-problem { background-color: @color-critical; } } } icingadb-web-1.5.0/public/css/widget/donut-container.less000066400000000000000000000006061527064444300233750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .donut-container { .card(); h2 { margin: 0; } .state-badges { text-align: center; } &:not(:last-of-type) { margin-right: 1em; margin-bottom: 1em; } .donut { margin: 0 auto; } } #layout.minimal-layout .donut-container { width: 100%; } icingadb-web-1.5.0/public/css/widget/downtime-card.less000066400000000000000000000004221527064444300230150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .downtime-progress { .progress-bar(); &.progress-bar .timeline .downtime-elapsed { &::before, > .bar { background-color: @state-ok; } } } icingadb-web-1.5.0/public/css/widget/host-state-badges.less000066400000000000000000000002311527064444300235740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .host-state-badges { .state-badges(); } icingadb-web-1.5.0/public/css/widget/key-value-list.less000066400000000000000000000005221527064444300231340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .key-value-list { list-style-type: none; margin: 0; padding: 0; li { display: flex; } li > span { padding: .25em; &.label { display: block; padding-left: 0; width: 12em; } } } icingadb-web-1.5.0/public/css/widget/monitoring-health.less000066400000000000000000000041451527064444300237160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .monitoring-health { max-width: 65em; > section:not(:last-child) { margin-bottom: 4em; } .vertical-key-value .value { display: inline-block; margin-bottom: .25em; } .check-summary { padding: .5em 0; .col { padding: 0 1em .5em 1em; } .col:not(:last-child) { border-right: 1px solid @gray-light; } } .check-summary, .instance-features { .rounded-corners(); border: 1px solid; border-color: @gray-light; display: flex; width: 100%; } .check-summary, .col-content, .icinga-info { width: 100%; display: flex; flex-wrap: wrap; justify-content: space-around; } .icinga-info { gap: 2em 1em; } .col { flex: 1 1 auto; text-align: center; > h3 { margin: 0 0 1em; } } .icinga-health { .rounded-corners(); margin-bottom: 2em; padding: 1em; text-align: center; width: 100%; font-weight: bold; &.up { border: 1px solid; border-color: @color-up; color: @color-up; } &.down { background-color: @color-down; color: @body-bg-color; } } .instance-features { .control-group { flex: 1 1 auto; margin: .5em 0; padding: .5em; width: 0; display: flex; align-items: center; flex-direction: column-reverse; justify-content: flex-end; &:not(:last-of-type) { border-right: 1px solid @gray-light; } .control-label-group { font-size: 10/12em; margin-right: 0; margin-top: 1em; padding: 0; text-align: center; width: auto; label { text-align: center; } } .toggle-switch { margin: 0; } } } } #layout.minimal-layout { .icinga-info { .vertical-key-value { width: 100%; } } .instance-features { flex-wrap: wrap; .control-group { width: 33%; &:nth-child(3n) { border-right: none; } } } } icingadb-web-1.5.0/public/css/widget/notice.less000066400000000000000000000007711527064444300215500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .notice { @margin: 1em / 1.25; @padding: .75em / 1.25; .rounded-corners(); padding: @padding; color: @text-color-on-icinga-blue; background-color: @state-warning; font-weight: bold; font-size: 1.25em; // Layout display: flex; align-items: baseline; justify-content: space-between; margin: 0 @margin @margin @margin; > span { .text-ellipsis(); } } icingadb-web-1.5.0/public/css/widget/notification-recipients.less000066400000000000000000000006761527064444300251240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2026 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .recipient-list li, .subscriber-list li { display: inline-block; line-height: 2; .ack-badge { margin-left: .25em; } &:not(:last-child)::after { content: ','; margin-right: .25em; color: @text-color-light; } } .recipient-list .recipient { white-space: nowrap; i { color: @text-color-light; } } icingadb-web-1.5.0/public/css/widget/object-features.less000066400000000000000000000016511527064444300233470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later form.object-features { span.description { text-align: left; } .control-label-group { text-align: left; margin-right: 0; width: @name-value-table-name-width; color: @text-color-light; label { font-size: inherit; } } .control-group { margin-top: 0; margin-bottom: 0; &.indeterminate { justify-content: flex-start; .control-label-group { flex: 0 1 auto; } select { width: auto; flex: 0 1 auto; & + span.hint { flex: 0 1 auto; } } } } .toggle-switch { margin-left: @table-column-padding; } select { margin-right: .5em; margin-left: @table-column-padding; & + span.hint { margin: .35em; color: @gray-light; font-style: italic; } } } icingadb-web-1.5.0/public/css/widget/object-grid.less000066400000000000000000000013011527064444300224460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // HostGroup- and -ServiceGroupGrid styles ul.object-grid { display: grid; grid-template-columns: repeat(auto-fit, 15em); grid-gap: 1em 2em; margin: 0; padding: 0; li.item-layout.object-grid-cell { padding: .25em; .rounded-corners(); .caption { height: 1.5em; // Single line .text-ellipsis(); .line-clamp("reset"); } .title, .caption { a { display: inline-block; max-width: 10em; text-align: center; } } .state-badge { width: 2.5em; height: 2.5em; line-height: 2; } } } icingadb-web-1.5.0/public/css/widget/object-inspection.less000066400000000000000000000005101527064444300236750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style // Layout .inspection-detail { th { width: 16em; } pre, td { white-space: break-spaces; word-break: break-word; -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; } } icingadb-web-1.5.0/public/css/widget/object-meta-info.less000066400000000000000000000030231527064444300234030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later // Style .object-meta-info { .vertical-key-value .value { font-weight: normal; } .vertical-key-value:first-child { text-align: left; } .vertical-key-value:last-child { text-align: right; } } .object-meta-info-control { .link-button(); .rounded-corners(0 0 .5em .5em); border: 1px solid; border-color: @gray-lighter; border-top-width: 0; background: @body-bg-color; } // Layout .object-meta-info { display: flex; justify-content: space-between; .horizontal-key-value { padding: 0; .key { width: 9em; } } .vertical-key-value { &:first-child { .text-ellipsis(); margin-right: 1em; } &:last-child { white-space: nowrap; margin-left: 1em; } } .horizontal-key-value .value, .horizontal-key-value .key, .vertical-key-value .value, .vertical-key-value .key { font-size: 16/18em; line-height: 18/16; // compensate smaller font-size (1/font-size) } } .object-meta-info-control { position: absolute; right: 2.25em; bottom: -2.5em; // height + margin-bottom height: 2em; padding: .25em; .collapse-icon, .expand-icon { font-size: 1.2em; &:before { margin-right: 0; } } .collapse-icon { display: block; } .expand-icon { display: none; } } .collapsed + .object-meta-info-control { .collapse-icon { display: none; } .expand-icon { display: block; } } icingadb-web-1.5.0/public/css/widget/object-statistics.less000066400000000000000000000014411527064444300237200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later ul.object-statistics { // Reset defaults list-style-type: none; margin: 0; padding: 0; display: flex; align-items: center; > li:not(:last-child) { margin-right: 1em; } } .object-statistics-graph .donut-graph { height: 2em; width: 2em; vertical-align: middle; } .object-statistics-total a { display: inline-block; line-height: 1; position: relative; &:hover:before { .rounded-corners(); background-color: @gray-lighter; content: ""; display: block; z-index: 1; position: absolute; bottom: -.4em; left: -.4em; top: -.4em; right: -.4em; } .vertical-key-value { position: relative; z-index: 2; } } icingadb-web-1.5.0/public/css/widget/performance-data-table.less000066400000000000000000000017621527064444300245650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2021 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .performance-data-table { width: 100%; overflow-x: auto; display: block; tr:not(:last-child) { border-bottom: 1px solid @gray-lighter; } td { text-align: right; .text-ellipsis(); } th { font-size: .857em; font-weight: normal; text-transform: uppercase; letter-spacing: .05em; } thead { border-bottom: 1px solid @gray-light; } th:first-child, td:first-child { padding-left: 0; } .title { text-align: left; width: 100%; } td.title { font-weight: bold; } .sparkline-col { min-width: 1.75em; width: 1.75em; padding: 2/12em 0; .invalid-perfdata { font-size: 1.25em; vertical-align: text-bottom; color: @color-warning; } } .inline-pie > svg { vertical-align: middle; } .no-value { color: @gray-semilight; text-align: center; display: block; } } icingadb-web-1.5.0/public/css/widget/quick-actions.less000066400000000000000000000016411527064444300230360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .quick-actions { display: flex; flex-wrap: wrap; list-style-type: none; margin: 0 -.5em; padding: 0; a { text-decoration: none; } a, button { padding: .25em; .rounded-corners(); display: inline-flex; align-items: baseline; &:hover { background: @gray-lighter; } } a[disabled] { color: @control-disabled-color; .user-select(none); } li { margin: 0 .25em .5em .25em; vertical-align: middle; white-space: nowrap; } } .controls:not(.default-layout) > .quick-actions:last-child, .controls > .quick-actions:last-child { margin-bottom: 0; } #layout.twocols:not(.wide-layout) { .quick-actions { justify-content: space-between; min-width: 100%; } } #layout.wide-layout .controls { .quick-actions { float: left; } } icingadb-web-1.5.0/public/css/widget/service-state-badges.less000066400000000000000000000002341527064444300242620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .service-state-badges { .state-badges(); } icingadb-web-1.5.0/public/css/widget/state-change.less000066400000000000000000000045761527064444300226410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .state-change { display: inline-flex; &.reversed-state-balls { // This is needed, because with ~ we can address only subsequent nodes flex-direction: row-reverse; } .state-ball { .box-shadow(0, 0, 0, 1px, @body-bg-color); } // Same on same .state-ball ~ .state-ball { &.ball-size-xs { margin-left: -.05em; } &.ball-size-s { margin-left: -.15em; } &.ball-size-m { margin-left: -.275em; } &.ball-size-ml { margin-left: -.375em; } &.ball-size-l, &.ball-size-xl { margin-left: -.875em; } } // big left, smaller right &:not(.reversed-state-balls) .ball-size-l ~ .state-ball { &.ball-size-ml { margin-top: .25em; margin-left: -.5em; margin-right: .25em; } } // smaller left, big right &.reversed-state-balls .ball-size-l ~ .state-ball { &.ball-size-ml { z-index: -1; margin-top: .25em; margin-right: -.5em; } } .state-ball.state-ok, .state-ball.state-up, .state-pending { &.ball-size-l, &.ball-size-xl { background-color: @body-bg-color; } } // Avoid transparency on overlapping solid state-change state-balls .state-ball.handled { position: relative; opacity: 1; i { position: relative; z-index: 3; } &:before { content: ""; display: block; position: absolute; top: 0; right: 0; bottom: 0; left: 0; border-radius: 50%; opacity: .6; z-index: 2 } &:after { content: ""; display: block; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; border-radius: 50%; background-color: @body-bg-color; z-index: 1; } &.state-pending:before { background-color: @color-pending; } &.state-down:before { background-color: @color-down; } &.state-warning:before { background-color: @color-warning; } &.state-critical:before { background-color: @color-critical; } &.state-unknown:before { background-color: @color-unknown; } } } .overdue .state-change .state-ball { .box-shadow(0, 0, 0, 1px, @gray-lighter); &.handled:after { background-color: @gray-lighter; } } icingadb-web-1.5.0/public/css/widget/tag-list.less000066400000000000000000000013461527064444300220120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .tag-list { line-height: 1.5; list-style-type: none; margin: -.25em 0 0 0; // TODO: This is wrong here, if at all this must be part of wherever this widget is placed padding: 0; > li { display: inline-block; &:not(:last-child) { margin-right: .417em; margin-bottom: .25em; // TODO: Really? It's an inline ul, bottom margin is outer layout.. } i { opacity: 0.8; } } > li > a { .rounded-corners(); background-color: @gray-lighter; display: block; padding: .25em .5em; &:hover { background-color: @gray-light; text-decoration: none; } } } icingadb-web-1.5.0/public/css/widget/view-mode-switcher.less000066400000000000000000000016251527064444300240100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later .view-mode-switcher { display: flex; input { display: none; } label { color: @control-color; line-height: 1; background: @low-sat-blue; padding: 14/16*.25em 14/16*.5em; font-size: 16/12em; height: 24/16em; // desired pixel height / font-size cursor: pointer; &:first-of-type { border-top-left-radius: 0.25em; border-bottom-left-radius: 0.25em; } &:last-of-type { border-top-right-radius: 0.25em; border-bottom-right-radius: 0.25em; } &:not(:last-of-type) { border-right: 1px solid @low-sat-blue-dark; } i { // fix height for Chrome display: block; } } input[checked] + label { background-color: @control-color; color: @text-color-on-icinga-blue; cursor: default; } } icingadb-web-1.5.0/public/js/000077500000000000000000000000001527064444300157335ustar00rootroot00000000000000icingadb-web-1.5.0/public/js/action-list.js000066400000000000000000001055751527064444300205340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later ;(function (Icinga) { "use strict"; try { var notjQuery = require('icinga/icinga-php-library/notjQuery'); } catch (e) { console.warn('Unable to provide input enrichments. Libraries not available:', e); return; } Icinga.Behaviors = Icinga.Behaviors || {}; class ActionList extends Icinga.EventListener { constructor(icinga) { super(icinga); this.on('click', '.action-list [data-action-item]:not(.page-separator), .action-list [data-action-item] a[href]', this.onClick, this); this.on('close-column', '#main > #col2', this.onColumnClose, this); this.on('column-moved', this.onColumnMoved, this); this.on('rendered', '#main .container', this.onRendered, this); this.on('keydown', '#body', this.onKeyDown, this); this.on('click', '.load-more[data-no-icinga-ajax] a', this.onLoadMoreClick, this); this.on('keypress', '.load-more[data-no-icinga-ajax] a', this.onKeyPress, this); this.lastActivatedItemUrl = null; this.lastTimeoutId = null; this.isProcessingLoadMore = false; this.activeRequests = {}; } /** * Parse the filter query contained in the given URL query string * * @param {string} queryString * * @returns {array} */ parseSelectionQuery(queryString) { return queryString.split('|'); } /** * Suspend auto refresh for the given item's container * * @param {Element} item * * @return {string} The container's id */ suspendAutoRefresh(item) { const container = item.closest('.container'); container.dataset.suspendAutorefresh = ''; return container.id; } /** * Enable auto refresh on the given container * * @param {string} containerId */ enableAutoRefresh(containerId) { delete document.getElementById(containerId).dataset.suspendAutorefresh; } onClick(event) { if (event.isDefaultPrevented()) { return; } let _this = event.data.self; let target = event.currentTarget; if (target.matches('a') && (! target.matches('.subject') || event.ctrlKey || event.metaKey)) { return true; } event.preventDefault(); event.stopImmediatePropagation(); event.stopPropagation(); let item = target.closest('[data-action-item]'); let list = target.closest('.action-list'); let activeItems = _this.getActiveItems(list); let toActiveItems = [], toDeactivateItems = []; const isBeingMultiSelected = list.matches('[data-icinga-multiselect-url]') && (event.ctrlKey || event.metaKey || event.shiftKey); if (isBeingMultiSelected) { if (event.ctrlKey || event.metaKey) { if (item.classList.contains('active')) { toDeactivateItems.push(item); } else { toActiveItems.push(item); } } else { document.getSelection().removeAllRanges(); let allItems = _this.getAllItems(list); let startIndex = allItems.indexOf(item); if(startIndex < 0) { startIndex = 0; } let endIndex = activeItems.length ? allItems.indexOf(activeItems[0]) : 0; if (startIndex > endIndex) { toActiveItems = allItems.slice(endIndex, startIndex + 1); } else { endIndex = activeItems.length ? allItems.indexOf(activeItems[activeItems.length - 1]) : 0; toActiveItems = allItems.slice(startIndex, endIndex + 1); } toDeactivateItems = activeItems.filter(item => ! toActiveItems.includes(item)); toActiveItems = toActiveItems.filter(item => ! activeItems.includes(item)); } } else { toDeactivateItems = activeItems; toActiveItems.push(item); } if (activeItems.length === 1 && toActiveItems.length === 0 && _this.icinga.loader.getLinkTargetFor($(target)).attr('id') === 'col2' ) { _this.icinga.ui.layout1col(); _this.icinga.history.pushCurrentState(); _this.enableAutoRefresh('col1'); return; } let dashboard = list.closest('.dashboard'); if (dashboard) { _this.clearDashboardSelections(dashboard, list); } let lastActivatedUrl = null; if (toActiveItems.includes(item)) { lastActivatedUrl = item.dataset.icingaDetailFilter; } else if (activeItems.length > 1) { lastActivatedUrl = activeItems[activeItems.length - 1] === item ? activeItems[activeItems.length - 2].dataset.icingaDetailFilter : activeItems[activeItems.length - 1].dataset.icingaDetailFilter; } _this.clearNestedSelections(list); _this.clearSelection(toDeactivateItems); _this.setActive(toActiveItems); _this.addSelectionCountToFooter(list); _this.setLastActivatedItemUrl(lastActivatedUrl); _this.loadDetailUrl(list, target.matches('a') ? target.getAttribute('href') : null); } /** * Add the selection count to footer if list allow multi selection * * @param list */ addSelectionCountToFooter(list) { if (! list.matches('[data-icinga-multiselect-url]') || list.closest('.dashboard')) { return; } let activeItemCount = this.getActiveItems(list).length; let footer = list.closest('.container').querySelector('.footer'); // For items that do not have a bottom status bar like Downtimes, Comments... if (footer === null) { footer = notjQuery.render( '' ) list.closest('.container').appendChild(footer); } let selectionCount = footer.querySelector('.selection-count'); if (selectionCount === null) { selectionCount = notjQuery.render( '
' ); footer.prepend(selectionCount); } let selectedItems = selectionCount.querySelector('.selected-items'); selectedItems.innerText = activeItemCount ? list.dataset.icingaMultiselectCountLabel.replace('%d', activeItemCount) : list.dataset.icingaMultiselectHintLabel; if (activeItemCount === 0) { selectedItems.classList.add('hint'); } else { selectedItems.classList.remove('hint'); } } /** * Key navigation for .action-list * * Only for primary lists (dashboard or lists in detail view are not taken into account) * * - `Shift + ArrowUp|ArrowDown` = Multiselect * - `ArrowUp|ArrowDown` = Select next/previous * - `ArrowLeft|ArrowRight` = Collapse/expand nested list * - `Ctrl|cmd + A` = Select all on currect page * * @param event */ onKeyDown(event) { let _this = event.data.self; let list = null; let pressedArrowDownKey = event.key === 'ArrowDown'; let pressedArrowUpKey = event.key === 'ArrowUp'; let pressedArrowLeftKey = event.key === 'ArrowLeft'; let pressedArrowRightKey = event.key === 'ArrowRight'; let focusedElement = document.activeElement; if ( _this.isProcessingLoadMore || ! event.key // input auto-completion is triggered || ( event.key.toLowerCase() !== 'a' && ! pressedArrowDownKey && ! pressedArrowUpKey && ! pressedArrowLeftKey && ! pressedArrowRightKey ) ) { return; } if (focusedElement && ( focusedElement.matches('#main > :scope') || focusedElement.matches('#body')) ) { let activeItem = document.querySelector( '#main > .container > .content > .action-list [data-action-item].active' ); if (activeItem) { list = activeItem.closest('.action-list'); } else { list = focusedElement.querySelector('#main > .container > .content > .action-list'); } } else if (focusedElement) { list = focusedElement.closest('.content > .action-list'); } if (! list) { return; } let isMultiSelectableList = list.matches('[data-icinga-multiselect-url]'); if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'a') { if (! isMultiSelectableList) { return; } event.preventDefault(); _this.selectAll(list); return; } if ((pressedArrowLeftKey || pressedArrowRightKey) && (event.altKey || event.metaKey)) { // Browser history navigation return; } event.preventDefault(); let allItems = _this.getAllItems(list); let firstListItem = allItems[0]; let lastListItem = allItems[allItems.length -1]; let activeItems = _this.getActiveItems(list); let markAsLastActive = null; // initialized only if it is different from toActiveItem let toActiveItem = null; let wasAllSelected = activeItems.length === allItems.length; let lastActivatedItem = list.querySelector( `[data-icinga-detail-filter="${ _this.lastActivatedItemUrl }"]` ); if (! lastActivatedItem && activeItems.length) { lastActivatedItem = activeItems[activeItems.length - 1]; } if (pressedArrowLeftKey || pressedArrowRightKey) { if (! lastActivatedItem) { return; } if (pressedArrowLeftKey) { _this.collapseNestedList(lastActivatedItem); } else { _this.expandNestedList(lastActivatedItem); } return; } let directionalNextItem = _this.getDirectionalNext(lastActivatedItem, event.key); if (activeItems.length === 0) { toActiveItem = pressedArrowDownKey ? firstListItem : lastListItem; // reset all on manual page refresh _this.clearSelection(activeItems); if (toActiveItem.classList.contains('load-more')) { toActiveItem = toActiveItem.previousElementSibling; } } else if (isMultiSelectableList && event.shiftKey) { if (activeItems.length === 1) { toActiveItem = directionalNextItem; } else if (wasAllSelected && ( (lastActivatedItem !== firstListItem && pressedArrowDownKey) || (lastActivatedItem !== lastListItem && pressedArrowUpKey) )) { if (pressedArrowDownKey) { toActiveItem = lastActivatedItem === lastListItem ? null : lastListItem; } else { toActiveItem = lastActivatedItem === firstListItem ? null : lastListItem; } } else if (directionalNextItem && directionalNextItem.classList.contains('active')) { // deactivate last activated by down to up select _this.clearSelection([lastActivatedItem]); if (wasAllSelected) { _this.scrollItemIntoView(lastActivatedItem, event.key); } toActiveItem = directionalNextItem; } else { [toActiveItem, markAsLastActive] = _this.findToActiveItem(lastActivatedItem, event.key); } } else { toActiveItem = _this.getNestedNext(lastActivatedItem, event.key) ?? lastActivatedItem; if (toActiveItem) { if (toActiveItem.classList.contains('load-more')) { clearTimeout(_this.lastTimeoutId); _this.handleLoadMoreNavigate(toActiveItem, lastActivatedItem, event.key); return; } _this.clearSelection(activeItems); if (toActiveItem.classList.contains('page-separator') || toActiveItem.classList.contains('day-separator') ) { toActiveItem = _this.getDirectionalNext(toActiveItem, event.key); } } } if (! toActiveItem) { return; } list = toActiveItem.closest('.action-list'); _this.setActive(toActiveItem); _this.setLastActivatedItemUrl( markAsLastActive ? markAsLastActive.dataset.icingaDetailFilter : toActiveItem.dataset.icingaDetailFilter ); _this.scrollItemIntoView(toActiveItem, event.key); _this.addSelectionCountToFooter(list); _this.loadDetailUrl(list); } /** * Expand the nested list of the given item * * @param {Element} item */ expandNestedList(item) { const details = this.getNestedCollapsible(item); if (details) { this.icinga.behaviors.collapsible.expand(details); } } /** * Collapse the nested list of the given item * * @param {Element} item */ collapseNestedList(item) { const details = this.getNestedCollapsible(item); if (details) { const collapsible = this.icinga.behaviors.collapsible; collapsible.collapse(details, collapsible.calculateCollapsedHeight(details)); } } /** * Get the collapsible
element wrapping the nested action list of the given item * * @param {Element} item * * @returns {Element|null} */ getNestedCollapsible(item) { return item.querySelector('.action-list')?.closest('details.collapsible') ?? null; } /** * Get the next list item according to the pressed key (`ArrowUp` or `ArrowDown`), * entering and leaving expanded nested lists * * @param {Element} item * @param {string} eventKey * * @returns {Element|null} */ getNestedNext(item, eventKey) { if (eventKey === 'ArrowDown') { const nested = this.getNestedCollapsible(item); if (nested !== null && ! nested.classList.contains('collapsed')) { return nested.querySelector('.list-item'); } return this.getDirectionalNext(item, eventKey) ?? this.getDirectionalNext(item.parentElement.closest('.list-item'), eventKey); } let previous = this.getDirectionalNext(item, eventKey); if (previous === null) { return item.parentElement.closest('.list-item'); } if (previous.matches('.page-separator, .day-separator')) { previous = this.getDirectionalNext(previous, eventKey); if (previous === null) { return null; } } const nested = this.getNestedCollapsible(previous); if (nested !== null && ! nested.classList.contains('collapsed')) { const nestedItems = nested.querySelectorAll('.list-item'); return nestedItems[nestedItems.length - 1] ?? previous; } return previous; } /** * Get the next list item according to the pressed key (`ArrowUp` or `ArrowDown`) * * @param item The list item from which we want the next item * @param eventKey Pressed key (`ArrowUp` or `ArrowDown`) * * @returns {Element|null} */ getDirectionalNext(item, eventKey) { if (! item) { return null; } return eventKey === 'ArrowUp' ? item.previousElementSibling : item.nextElementSibling; } /** * Find the list item that should be activated next * * @param lastActivatedItem * @param eventKey Pressed key (`ArrowUp` or `ArrowDown`) * * @returns {Element[]} */ findToActiveItem(lastActivatedItem, eventKey) { let toActiveItem; let markAsLastActive; toActiveItem = this.getDirectionalNext(lastActivatedItem, eventKey); while (toActiveItem) { if (! toActiveItem.classList.contains('active')) { break; } toActiveItem = this.getDirectionalNext(toActiveItem, eventKey); } markAsLastActive = toActiveItem; // if the next/previous sibling element is already active, // mark the last/first active element in list as last active while (markAsLastActive && this.getDirectionalNext(markAsLastActive, eventKey)) { if (! this.getDirectionalNext(markAsLastActive, eventKey).classList.contains('active')) { break; } markAsLastActive = this.getDirectionalNext(markAsLastActive, eventKey); } return [toActiveItem, markAsLastActive]; } /** * Select All list items * * @param list The action list */ selectAll(list) { let allItems = this.getAllItems(list); let activeItems = this.getActiveItems(list); this.setActive(allItems.filter(item => ! activeItems.includes(item))); this.setLastActivatedItemUrl(allItems[allItems.length -1].dataset.icingaDetailFilter); this.addSelectionCountToFooter(list); this.loadDetailUrl(list); } /** * Clear the selection by removing .active class * * @param selectedItems The items with class active */ clearSelection(selectedItems) { selectedItems.forEach(item => item.classList.remove('active')); } /** * Set the last activated item Url * * @param url */ setLastActivatedItemUrl (url) { this.lastActivatedItemUrl = url; } /** * Scroll the given item into view * * @param item Item to scroll into view * @param pressedKey Pressed key (`ArrowUp` or `ArrowDown`) */ scrollItemIntoView(item, pressedKey) { let directionalNext = this.getDirectionalNext(item, pressedKey); if ("isDisplayContents" in item.parentElement.dataset) { item = item.firstChild; directionalNext = directionalNext ? directionalNext.firstChild : null; } // required when ArrowUp is pressed in new list OR after selecting all items with ctrl+A item.scrollIntoView({block: "nearest"}); if (directionalNext) { directionalNext.scrollIntoView({block: "nearest"}); } } clearDashboardSelections(dashboard, currentList) { dashboard.querySelectorAll('.action-list').forEach(otherList => { if (otherList !== currentList) { this.clearSelection(this.getActiveItems(otherList)); } }) } /** * Clear the selection of the parent action list and all of its nested lists, except the given one * * @param currentList */ clearNestedSelections(currentList) { const outerList = currentList.parentElement.closest('.action-list') ?? currentList; [outerList, ...outerList.querySelectorAll('.action-list')].forEach(otherList => { if (otherList !== currentList) { this.clearSelection(this.getActiveItems(otherList)); } }); } /** * Load the detail url with selected items * * @param list The action list * @param anchorUrl If any anchor is clicked (e.g. host in service list) */ loadDetailUrl(list, anchorUrl = null) { let url = anchorUrl; let activeItems = this.getActiveItems(list); if (url === null) { if (activeItems.length > 1) { url = this.createMultiSelectUrl(activeItems); } else { let anchor = activeItems[0].querySelector('[href]'); url = anchor ? anchor.getAttribute('href') : null; } } if (url === null) { return; } const suspendedContainer = this.suspendAutoRefresh(list); clearTimeout(this.lastTimeoutId); this.lastTimeoutId = setTimeout(() => { const requestNo = this.lastTimeoutId; this.activeRequests[requestNo] = suspendedContainer; this.lastTimeoutId = null; let req = this.icinga.loader.loadUrl( url, this.icinga.loader.getLinkTargetFor($(activeItems[0])) ); req.always((_, __, errorThrown) => { if (errorThrown !== 'abort') { this.enableAutoRefresh(this.activeRequests[requestNo]); } delete this.activeRequests[requestNo]; }); }, 250); } /** * Add .active class to given list item * * @param toActiveItem The list item(s) */ setActive(toActiveItem) { if (toActiveItem instanceof HTMLElement) { toActiveItem.classList.add('active'); } else { toActiveItem.forEach(item => item.classList.add('active')); } } /** * Get the active items from given list * * @param list The action list * * @return array */ getActiveItems(list) { let items; if (list.tagName.toLowerCase() === 'table') { items = list.querySelectorAll(':scope > tbody > [data-action-item].active'); } else { items = list.querySelectorAll(':scope > [data-action-item].active'); } return Array.from(items); } /** * Get all available items from given list * * @param list The action list * * @return array */ getAllItems(list) { let items; if (list.tagName.toLowerCase() === 'table') { items = list.querySelectorAll(':scope > tbody > [data-action-item]'); } else { items = list.querySelectorAll(':scope > [data-action-item]'); } return Array.from(items); } /** * Handle the navigation on load-more button * * @param loadMoreElement * @param lastActivatedItem * @param pressedKey Pressed key (`ArrowUp` or `ArrowDown`) */ handleLoadMoreNavigate(loadMoreElement, lastActivatedItem, pressedKey) { const previousItem = loadMoreElement.previousElementSibling; let req = this.loadMore(loadMoreElement.firstChild); this.isProcessingLoadMore = true; req.done(() => { this.isProcessingLoadMore = false; // list has now new items, so select the item following the previous one and then move forward let toActiveItem = previousItem.nextElementSibling; while (toActiveItem) { if (toActiveItem.hasAttribute('data-action-item')) { this.clearSelection([lastActivatedItem]); this.setActive(toActiveItem); this.setLastActivatedItemUrl(toActiveItem.dataset.icingaDetailFilter); this.scrollItemIntoView(toActiveItem, pressedKey); this.addSelectionCountToFooter(toActiveItem.parentElement); this.loadDetailUrl(toActiveItem.parentElement); return; } toActiveItem = toActiveItem.nextElementSibling; } }); } /** * Click on load-more button * * @param event * * @returns {boolean} */ onLoadMoreClick(event) { event.stopPropagation(); event.preventDefault(); event.data.self.loadMore(event.target); return false; } onKeyPress(event) { if (event.key === ' ') { // space event.data.self.onLoadMoreClick(event); } } /** * Load more list items based on the given anchor * * @param anchor * * @returns {*|{getAllResponseHeaders: function(): *|null, abort: function(*): this, setRequestHeader: function(*, *): this, readyState: number, getResponseHeader: function(*): null|*, overrideMimeType: function(*): this, statusCode: function(*): this}|jQuery|boolean} */ loadMore(anchor) { let showMore = anchor.parentElement; var progressTimer = this.icinga.timer.register(function () { var label = anchor.innerText; var dots = label.substr(-3); if (dots.slice(0, 1) !== '.') { dots = '. '; } else { label = label.slice(0, -3); if (dots === '...') { dots = '. '; } else if (dots === '.. ') { dots = '...'; } else if (dots === '. ') { dots = '.. '; } } anchor.innerText = label + dots; }, null, 250); let url = anchor.getAttribute('href'); let req = this.icinga.loader.loadUrl( // Add showCompact, we don't want controls in paged results this.icinga.utils.addUrlFlag(url, 'showCompact'), $(showMore.parentElement), undefined, undefined, 'append', false, progressTimer ); req.addToHistory = false; req.done(function () { showMore.remove(); // Set data-icinga-url to make it available for Icinga.History.getCurrentState() req.$target.closest('.container').data('icingaUrl', url); this.icinga.history.replaceCurrentState(); }); return req; } /** * Create the detail url for multi selectable list * * @param items List items * @param withBaseUrl Default to true * * @returns {string} The url */ createMultiSelectUrl(items, withBaseUrl = true) { let filters = []; items.forEach(item => { filters.push(item.getAttribute('data-icinga-multiselect-filter')); }); let url = '?' + filters.join('|'); if (withBaseUrl) { return items[0].closest('.action-list').getAttribute('data-icinga-multiselect-url') + url; } return url; } onColumnClose(event) { let _this = event.data.self; let list = _this.findDetailUrlActionList(document.getElementById('col1')); if (list && list.matches('[data-icinga-multiselect-url], [data-icinga-detail-url]')) { _this.clearSelection(_this.getActiveItems(list)); _this.addSelectionCountToFooter(list); } } /** * Find the action list using the detail url * * @param {Element} container * * @return Element|null */ findDetailUrlActionList(container) { let detailUrl = this.icinga.utils.parseUrl( this.icinga.history.getCol2State().replace(/^#!/, '') ); let detailItem = container.querySelector( '[data-icinga-detail-filter="' + detailUrl.query.replace('?', '') + '"],' + '[data-icinga-multiselect-filter="' + detailUrl.query.split('|', 1).toString().replace('?', '') + '"]' ); return detailItem ? detailItem.parentElement : null; } /** * Triggers when column is moved to left or right * * @param event * @param sourceId The content is moved from */ onColumnMoved(event, sourceId) { let _this = event.data.self; if (event.target.id === 'col2' && sourceId === 'col1') { // only for browser-back (col1 shifted to col2) _this.clearSelection(event.target.querySelectorAll('.action-list .active')); } else if (event.target.id === 'col1' && sourceId === 'col2') { for (const requestNo of Object.keys(_this.activeRequests)) { if (_this.activeRequests[requestNo] === sourceId) { _this.enableAutoRefresh(_this.activeRequests[requestNo]); _this.activeRequests[requestNo] = _this.suspendAutoRefresh(event.target); } } } } onRendered(event, isAutoRefresh) { let _this = event.data.self; let container = event.target; let isTopLevelContainer = container.matches('#main > :scope'); let list; if (event.currentTarget !== container || Object.keys(_this.activeRequests).length) { // Nested containers are not processed multiple times || still processing selection/navigation request return; } else if (isTopLevelContainer && container.id !== 'col1') { if (isAutoRefresh) { return; } // only for browser back/forward navigation list = _this.findDetailUrlActionList(document.getElementById('col1')); } else { list = _this.findDetailUrlActionList(container); } if (! list || ! ("isDisplayContents" in list.dataset)) { // no detail view || ignore when already set let actionLists = null; if (! list) { actionLists = document.querySelectorAll('.action-list'); } else { actionLists = [list]; } for (let actionList of actionLists) { let firstSelectableItem = actionList.querySelector(':scope > [data-action-item]'); if ( firstSelectableItem && ( ! firstSelectableItem.checkVisibility() && firstSelectableItem.firstChild && firstSelectableItem.firstChild.checkVisibility() ) ) { actionList.dataset.isDisplayContents = ""; } } } if (list && list.matches('[data-icinga-multiselect-url], [data-icinga-detail-url]')) { let detailUrl = _this.icinga.utils.parseUrl( _this.icinga.history.getCol2State().replace(/^#!/, '') ); let toActiveItems = []; if (list.dataset.icingaMultiselectUrl === detailUrl.path) { for (const filter of _this.parseSelectionQuery(detailUrl.query.slice(1))) { let item = list.querySelector( '[data-icinga-multiselect-filter="' + filter + '"]' ); if (item) { toActiveItems.push(item); } } } else if (_this.matchesDetailUrl(list.dataset.icingaDetailUrl, detailUrl.path)) { let item = list.querySelector( '[data-icinga-detail-filter="' + detailUrl.query.slice(1) + '"]' ); if (item) { toActiveItems.push(item); } } let dashboard = list.closest('.dashboard'); if (dashboard) { _this.clearDashboardSelections(dashboard, list); } _this.clearNestedSelections(list); _this.clearSelection(_this.getAllItems(list).filter(item => !toActiveItems.includes(item))); _this.setActive(toActiveItems); } if (isTopLevelContainer) { let footerList = list ?? container.querySelector('.content > .action-list'); if (footerList) { _this.addSelectionCountToFooter(footerList); } } } matchesDetailUrl(itemUrl, detailUrl) { if (itemUrl === detailUrl) { return true; } // The slash is used to avoid false positives (e.g. icingadb/hostgroup and icingadb/host) return detailUrl.startsWith(itemUrl + '/'); } } Icinga.Behaviors.ActionList = ActionList; }(Icinga)); icingadb-web-1.5.0/public/js/progress-bar.js000066400000000000000000000072701527064444300207050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2023 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later (function (Icinga) { "use strict"; class ProgressBar extends Icinga.EventListener { constructor(icinga) { super(icinga); /** * Frame update threshold. If it reaches zero, the view is updated * * Currently, only every third frame is updated. * * @type {number} */ this.frameUpdateThreshold = 3; /** * Threshold at which animations get smoothed out (in milliseconds) * * @type {number} */ this.smoothUpdateThreshold = 250; this.on('rendered', '#main > .container', this.onRendered, this); } onRendered(event) { const _this = event.data.self; const container = event.target; container.querySelectorAll('[data-animate-progress]').forEach(progress => { const frequency = ( (Number(progress.dataset.endTime) - Number(progress.dataset.startTime) ) * 1000) / progress.parentElement.offsetWidth; _this.updateProgress( now => _this.animateProgress(progress, now), frequency); }); } animateProgress(progress, now) { if (! progress.isConnected) { return false; // Exit early if the node is removed from the DOM } const durationScale = 100; const startTime = Number(progress.dataset.startTime); const endTime = Number(progress.dataset.endTime); const duration = endTime - startTime; const end = new Date(endTime * 1000.0); let leftNow = durationScale * (1 - (end - now) / (duration * 1000.0)); if (leftNow > durationScale) { leftNow = durationScale; } else if (leftNow < 0) { leftNow = 0; } const switchAfter = Number(progress.dataset.switchAfter); if (! isNaN(switchAfter)) { const switchClass = progress.dataset.switchClass; const switchAt = new Date((startTime * 1000.0) + (switchAfter * 1000.0)); if (now < switchAt) { progress.classList.add(switchClass); } else if (progress.classList.contains(switchClass)) { progress.classList.remove(switchClass); } } const bar = progress.querySelector(':scope > .bar'); bar.style.width = leftNow + '%'; return leftNow !== durationScale; } updateProgress(callback, frequency, now = null) { if (now === null) { now = new Date(); } if (! callback(now)) { return; } if (frequency < this.smoothUpdateThreshold) { let counter = this.frameUpdateThreshold; const onNextFrame = timeSinceOrigin => { if (--counter === 0) { this.updateProgress(callback, frequency, new Date(performance.timeOrigin + timeSinceOrigin)); } else { requestAnimationFrame(onNextFrame); } }; requestAnimationFrame(onNextFrame); } else { setTimeout(() => this.updateProgress(callback, frequency), frequency); } } } Icinga.Behaviors = Icinga.Behaviors || {}; Icinga.Behaviors.ProgressBar = ProgressBar; })(Icinga); icingadb-web-1.5.0/public/js/timestamp-toggle.js000066400000000000000000000054371527064444300215640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2026 Icinga GmbH // SPDX-License-Identifier: GPL-3.0-or-later (function (Icinga) { "use strict"; class TimestampToggle extends Icinga.EventListener { constructor(icinga) { super(icinga); this.on('change', '.icingadb-timestamp-toggle', this.onTimestampModeToggle, this); this.on('click', '.icingadb-history-timestamp', this.onTimestampClick, this); } /** * Toggle the timestamp mode of the container * * This method stops event propagation, so that the list-item underneath is not clicked. * * @param event The click event of the timestamp */ onTimestampClick(event) { event.stopPropagation(); const container = event.target.closest('.container'); const toggle = container.querySelector('.icingadb-timestamp-toggle'); if (toggle) { toggle.click(); } else { event.data.self.applyTimestampMode(container, ! event.target.hasAttribute('data-relative-time')); } } /** * Handle changed timestamp mode * * @param event The change event of the icingadb-timestamp-toggle */ onTimestampModeToggle(event) { event.data.self.applyTimestampMode(event.target.closest('.container'), event.target.checked); } /** * Apply the given timestamp mode to all interactive timestamps in the container * * @param {Element} container The container element * @param {boolean} relative Whether to show relative timestamps */ applyTimestampMode(container, relative) { const preference = relative ? 'relative' : 'absolute'; const url = this.icinga.utils.addUrlParams($(container).data('icingaUrl'), {timestamps: preference}); $(container).data('icingaUrl', url); this.icinga.history.replaceCurrentState(); Object.entries({ '.load-more .action-link, .refresh-container-control, .primary-nav li.active a': 'href', '.search-editor-opener': 'data-search-editor-url', '.search-bar': 'action' }).forEach(([selector, attr]) => { container.querySelectorAll(selector).forEach((el) => { el.setAttribute(attr, this.icinga.utils.addUrlParams(el.getAttribute(attr), {timestamps: preference})); }); }); container.querySelectorAll('.item-list .icingadb-history-timestamp').forEach(el => { el.hidden = ! el.hidden; }); } } Icinga.Behaviors.TimestampToggle = TimestampToggle; }(Icinga)); icingadb-web-1.5.0/run.php000066400000000000000000000030131527064444300153530ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later /** @var $this \Icinga\Application\Modules\Module */ $this->provideHook('ApplicationState'); $this->provideHook('X509/Sni'); $this->provideHook('health', 'IcingaHealth'); $this->provideHook('health', 'RedisHealth'); $this->provideHook('Notifications/V2/Icinga2Source'); $this->provideHook('Notifications/V2/V1FilterMigration'); $this->provideHook('Reporting/Report', 'Reporting/HostSlaReport'); $this->provideHook('Reporting/Report', 'Reporting/TotalHostSlaReport'); $this->provideHook('Reporting/Report', 'Reporting/ServiceSlaReport'); $this->provideHook('Reporting/Report', 'Reporting/TotalServiceSlaReport'); $this->provideHook('Icingadb/HostActions', 'CreateHostSlaReport'); $this->provideHook('Icingadb/ServiceActions', 'CreateServiceSlaReport'); $this->provideHook('Icingadb/HostsDetailExtension', 'CreateHostsSlaReport'); $this->provideHook('Icingadb/ServicesDetailExtension', 'CreateServicesSlaReport'); if (! $this::exists('monitoring') && $this->app->getModuleManager()->hasInstalled('monitoring')) { // For compatibility reasons, Icinga DB Web also supports hooks originally written for the monitoring module. // This requires the monitoring module to be either enabled or installed. // If it is only installed, its autoloader must be registered manually to resolve monitoring module hook classes. $this->app->getModuleManager()->getModule('monitoring', assertLoaded: false)->registerAutoloader(); } icingadb-web-1.5.0/test/000077500000000000000000000000001527064444300150205ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/000077500000000000000000000000001527064444300156075ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/Lib/000077500000000000000000000000001527064444300163155ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/Lib/FailoverCommandTransport.php000066400000000000000000000023641527064444300240160ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Lib; use Icinga\Application\Config; use Icinga\Data\ConfigObject; use Icinga\Module\Icingadb\Command\IcingaApiCommand; use Icinga\Module\Icingadb\Command\Transport\ApiCommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; class FailoverCommandTransport extends CommandTransport { public static function getConfig(): Config { return Config::fromArray(['endpoint1' => ['host' => 'endpointA'], 'endpoint2' => ['host' => 'endpointB']]); } public static function createTransport(ConfigObject $config): ApiCommandTransport { return (new class extends ApiCommandTransport { protected function sendCommand(IcingaApiCommand $command) { if ($this->getHost() === 'endpointA') { throw (new CommandTransportException(sprintf('%s fails!', $this->getHost()))) ->setCommand($command); } return $command->getData(); } })->setHost($config->host); } } icingadb-web-1.5.0/test/php/Lib/IntermittentlyFailingCommandTransport.php000066400000000000000000000030551527064444300265720ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Lib; use Icinga\Application\Config; use Icinga\Data\ConfigObject; use Icinga\Module\Icingadb\Command\IcingaApiCommand; use Icinga\Module\Icingadb\Command\Transport\ApiCommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; class IntermittentlyFailingCommandTransport extends CommandTransport { public static $failAtAttemptNo = 2; public static $attemptNo = 0; public static function getConfig(): Config { return Config::fromArray(['endpoint1' => ['host' => 'endpointA'], 'endpoint2' => ['host' => 'endpointB']]); } public static function createTransport(ConfigObject $config): ApiCommandTransport { return (new class extends ApiCommandTransport { protected function sendCommand(IcingaApiCommand $command) { $attemptNo = ++IntermittentlyFailingCommandTransport::$attemptNo; $failAtAttemptNo = IntermittentlyFailingCommandTransport::$failAtAttemptNo; if ($attemptNo === $failAtAttemptNo) { throw (new CommandTransportException(sprintf('%s intermittently fails!', $this->getHost()))) ->setCommand($command); } return $command->getData() + ['endpoint' => $this->getHost()]; } })->setHost($config->host); } } icingadb-web-1.5.0/test/php/Lib/PerfdataSetWithPublicData.php000066400000000000000000000004441527064444300240170ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Lib; use Icinga\Module\Icingadb\Util\PerfDataSet; class PerfdataSetWithPublicData extends PerfdataSet { public $perfdata = []; } icingadb-web-1.5.0/test/php/Lib/StrikingCommandTransport.php000066400000000000000000000021121527064444300240300ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Lib; use Icinga\Application\Config; use Icinga\Data\ConfigObject; use Icinga\Module\Icingadb\Command\IcingaApiCommand; use Icinga\Module\Icingadb\Command\Transport\ApiCommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransport; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; class StrikingCommandTransport extends CommandTransport { public static function getConfig(): Config { return Config::fromArray(['endpoint1' => ['host' => 'endpointA'], 'endpoint2' => ['host' => 'endpointB']]); } public static function createTransport(ConfigObject $config): ApiCommandTransport { return (new class extends ApiCommandTransport { protected function sendCommand(IcingaApiCommand $command) { throw new CommandTransportException(sprintf('%s strikes!', $this->getHost())); } })->setHost($config->host); } } icingadb-web-1.5.0/test/php/application/000077500000000000000000000000001527064444300201125ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/application/clicommands/000077500000000000000000000000001527064444300224035ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/application/clicommands/MigrateCommandTest.php000066400000000000000000002150351527064444300266510ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Clicommands; use Icinga\Application\Cli; use Icinga\Application\Config; use Icinga\Application\Modules\Manager; use Icinga\Cli\Params; use Icinga\Data\ConfigObject; use Icinga\Exception\IcingaException; use Icinga\Exception\MissingParameterException; use Icinga\File\Storage\TemporaryLocalFileStorage; use Icinga\Module\Icingadb\Clicommands\MigrateCommand; use PHPUnit\Framework\TestCase; class MigrateCommandTest extends TestCase { protected $config = [ 'dashboards' => [ 'initial' => [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'hosts.group_members' => [ 'title' => 'Group Members', 'url' => 'monitoring/list/hosts?hostgroup_name=group1|hostgroup_name=%28group2%29' ], 'hosts.variables' => [ 'title' => 'Host Variables', 'url' => 'monitoring/list/hosts?(_host_foo=bar&_host_bar=foo)|_host_rab=oof' ], 'hosts.wildcards' => [ 'title' => 'Host Wildcards', 'url' => 'monitoring/list/hosts?host_name=%2Afoo%2A|host_name=%2Abar%2A' . '&sort=host_severity&dir=asc&limit=25' ], 'hosts.encoded_params' => [ 'title' => 'Host Encoded Params', 'url' => 'monitoring/list/hosts?host_name=%28foo%29&sort=_host_%28foo%29' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.no-wildcards' => [ 'title' => 'No Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name=linux-hosts' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name=%2Alinux%2A' ], 'icingadb.also-wildcards' => [ 'title' => 'Also Wildcards', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A' ], 'icingadb.with-sort-and-limit' => [ 'title' => 'With Sort And Limit', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A|host.name=bar&sort=host.state.severity&limit=50' ], 'not-monitoring-or-icingadb' => [ 'title' => 'Not Monitoring Or Icinga DB' ], 'not-monitoring-or-icingadb.something' => [ 'title' => 'Something', 'url' => 'somewhere/something?foo=%2Abar%2A' ] ], 'expected' => [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'hosts.group_members' => [ 'title' => 'Group Members', 'url' => 'icingadb/hosts?hostgroup.name=group1|hostgroup.name=%28group2%29' ], 'hosts.variables' => [ 'title' => 'Host Variables', 'url' => 'icingadb/hosts?(host.vars.foo=bar&host.vars.bar=foo)|host.vars.rab=oof' ], 'hosts.wildcards' => [ 'title' => 'Host Wildcards', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A|host.name~%2Abar%2A' . '&sort=host.state.severity%20asc&limit=25' ], 'hosts.encoded_params' => [ 'title' => 'Host Encoded Params', 'url' => 'icingadb/hosts?host.name=%28foo%29&sort=host.vars.%28foo%29' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.no-wildcards' => [ 'title' => 'No Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name=linux-hosts' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name~%2Alinux%2A' ], 'icingadb.also-wildcards' => [ 'title' => 'Also Wildcards', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A' ], 'icingadb.with-sort-and-limit' => [ 'title' => 'With Sort And Limit', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A|host.name=bar&sort=host.state.severity&limit=50' ], 'not-monitoring-or-icingadb' => [ 'title' => 'Not Monitoring Or Icinga DB' ], 'not-monitoring-or-icingadb.something' => [ 'title' => 'Something', 'url' => 'somewhere/something?foo=%2Abar%2A' ] ] ], 'menu-items' => [ 'initial' => [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A' ] ], 'expected' => [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A' ] ] ], 'shared-menu-items' => [ 'initial' => [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo', 'owner' => 'test' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1', 'owner' => 'test' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A', 'owner' => 'test' ], 'other-monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1', 'owner' => 'not-test' ] ], 'expected' => [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo', 'owner' => 'test' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.state.is_problem=y', 'owner' => 'test' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A', 'owner' => 'test' ], 'other-monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1', 'owner' => 'not-test' ] ] ], 'host-actions' => [ 'initial' => [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A' ], 'hosts_encoded_params' => [ 'type' => 'host-action', 'url' => 'monitoring/list/hosts?host_name=%28foo%29&sort=_host_%28foo%29', 'filter' => '_host_%28foo%29=bar' ] ], 'expected' => [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A' ], 'hosts_encoded_params' => [ 'type' => 'icingadb-host-action', 'url' => 'icingadb/hosts?host.name=%28foo%29&sort=host.vars.%28foo%29', 'filter' => 'host.vars.%28foo%29=bar' ] ] ], 'icingadb-host-actions' => [ 'initial' => [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name=%2Afoo%2A' ] ], 'expected' => [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A' ] ] ], 'service-actions' => [ 'initial' => [ 'services' => [ 'type' => 'service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => '_service_foo=bar&_service_bar=%2Afoo%2A' ], 'services_encoded_params' => [ 'type' => 'host-action', 'url' => 'monitoring/list/services?host_name=%28foo%29&sort=_host_%28foo%29', 'filter' => '_host_%28foo%29=bar' ] ], 'expected' => [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar~%2Afoo%2A' ], 'services_encoded_params' => [ 'type' => 'icingadb-host-action', 'url' => 'icingadb/services?host.name=%28foo%29&sort=host.vars.%28foo%29', 'filter' => 'host.vars.%28foo%29=bar' ] ] ], 'icingadb-service-actions' => [ 'initial' => [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=%2Abar%2A' ] ], 'expected' => [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo~%2Abar%2A' ] ] ], 'shared-host-actions' => [ 'initial' => [ 'shared-hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A', 'owner' => 'test' ], 'hosts_encoded_params' => [ 'type' => 'host-action', 'url' => 'monitoring/list/hosts?host_name=%28foo%29&sort=_host_%28foo%29', 'filter' => '_host_%28foo%29=bar', 'owner' => 'test' ], 'other-hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A', 'owner' => 'not-test' ] ], 'expected' => [ 'shared-hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A', 'owner' => 'test' ], 'hosts_encoded_params' => [ 'type' => 'icingadb-host-action', 'url' => 'icingadb/hosts?host.name=%28foo%29&sort=host.vars.%28foo%29', 'filter' => 'host.vars.%28foo%29=bar', 'owner' => 'test' ] ] ], 'host-actions-legacy-macros' => [ 'initial' => [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$HOSTNAME$,$HOSTADDRESS$,$HOSTADDRESS6$', 'filter' => 'host_name=%2Afoo%2A' ] ], 'expected' => [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$,$host.address$,$host.address6$', 'filter' => 'host.name~%2Afoo%2A' ] ] ], 'service-actions-legacy-macros' => [ 'initial' => [ 'services' => [ 'type' => 'service-action', 'url' => 'example.com/search?q=$SERVICEDESC$,$HOSTNAME$,$HOSTADDRESS$,$HOSTADDRESS6$', 'filter' => '_service_foo=bar&_service_bar=%2Afoo%2A' ] ], 'expected' => [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar~%2Afoo%2A' ] ] ], 'all-roles' => [ 'initial' => [ 'no-wildcards' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'wildcards' => [ 'monitoring/filter/objects' => 'host_name=%2Afoo%2A|hostgroup_name=%2Afoo%2A' ], 'encoded_column' => [ 'monitoring/filter/objects' => '_host_%28foo%29=bar' ], 'blacklist' => [ 'monitoring/blacklist/properties' => 'host.vars.foo,service.vars.bar*,host.vars.a.**.d' ], 'full-access' => [ 'permissions' => 'module/monitoring,monitoring/*' ], 'general-read-access' => [ 'permissions' => 'module/monitoring' ], 'general-write-access' => [ 'permissions' => 'module/monitoring,monitoring/command/*' ], 'full-fine-grained-access' => [ 'permissions' => 'module/monitoring' . ',monitoring/command/schedule-check' . ',monitoring/command/acknowledge-problem' . ',monitoring/command/remove-acknowledgement' . ',monitoring/command/comment/add' . ',monitoring/command/comment/delete' . ',monitoring/command/downtime/schedule' . ',monitoring/command/downtime/delete' . ',monitoring/command/process-check-result' . ',monitoring/command/feature/instance' . ',monitoring/command/feature/object/active-checks' . ',monitoring/command/feature/object/passive-checks' . ',monitoring/command/feature/object/notifications' . ',monitoring/command/feature/object/event-handler' . ',monitoring/command/feature/object/flap-detection' . ',monitoring/command/send-custom-notification' ], 'full-with-refusals' => [ 'permissions' => 'module/monitoring,monitoring/command/*', 'refusals' => 'monitoring/command/downtime/*,monitoring/command/feature/instance' ], 'active-only' => [ 'permissions' => 'module/monitoring,monitoring/command/schedule-check/active-only' ], 'no-monitoring-contacts' => [ 'permissions' => 'module/monitoring,no-monitoring/contacts' ], 'reporting-only' => [ 'permissions' => 'module/reporting' ], 'icingadb' => [ 'icingadb/filter/objects' => 'host.name=%2Afoo%2A|hostgroup.name=%2Afoo%2A', 'icingadb/filter/services' => 'service.name=%2Abar%2A&service.vars.env=prod', 'icingadb/filter/hosts' => 'host.vars.env=%2Afoo%2A' ] ], 'expected' => [ 'no-wildcards' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo', 'icingadb/filter/objects' => 'host.name=foo|hostgroup.name=foo' ], 'wildcards' => [ 'monitoring/filter/objects' => 'host_name=%2Afoo%2A|hostgroup_name=%2Afoo%2A', 'icingadb/filter/objects' => 'host.name~%2Afoo%2A|hostgroup.name~%2Afoo%2A' ], 'encoded_column' => [ 'monitoring/filter/objects' => '_host_%28foo%29=bar', 'icingadb/filter/objects' => 'host.vars.%28foo%29=bar' ], 'blacklist' => [ 'monitoring/blacklist/properties' => 'host.vars.foo,service.vars.bar*,host.vars.a.**.d', 'icingadb/denylist/variables' => 'foo,bar*,a.*.d' ], 'full-access' => [ 'permissions' => 'module/monitoring,monitoring/*' ], 'general-read-access' => [ 'permissions' => 'module/monitoring' ], 'general-write-access' => [ 'permissions' => 'module/monitoring,monitoring/command/*,icingadb/command/*' ], 'full-fine-grained-access' => [ 'permissions' => 'module/monitoring' . ',monitoring/command/schedule-check' . ',icingadb/command/schedule-check' . ',monitoring/command/acknowledge-problem' . ',icingadb/command/acknowledge-problem' . ',monitoring/command/remove-acknowledgement' . ',icingadb/command/remove-acknowledgement' . ',monitoring/command/comment/add' . ',icingadb/command/comment/add' . ',monitoring/command/comment/delete' . ',icingadb/command/comment/delete' . ',monitoring/command/downtime/schedule' . ',icingadb/command/downtime/schedule' . ',monitoring/command/downtime/delete' . ',icingadb/command/downtime/delete' . ',monitoring/command/process-check-result' . ',icingadb/command/process-check-result' . ',monitoring/command/feature/instance' . ',icingadb/command/feature/instance' . ',monitoring/command/feature/object/active-checks' . ',icingadb/command/feature/object/active-checks' . ',monitoring/command/feature/object/passive-checks' . ',icingadb/command/feature/object/passive-checks' . ',monitoring/command/feature/object/notifications' . ',icingadb/command/feature/object/notifications' . ',monitoring/command/feature/object/event-handler' . ',icingadb/command/feature/object/event-handler' . ',monitoring/command/feature/object/flap-detection' . ',icingadb/command/feature/object/flap-detection' . ',monitoring/command/send-custom-notification' . ',icingadb/command/send-custom-notification' ], 'full-with-refusals' => [ 'permissions' => 'module/monitoring,monitoring/command/*,icingadb/command/*', 'refusals' => 'monitoring/command/downtime/*' . ',icingadb/command/downtime/*' . ',monitoring/command/feature/instance' . ',icingadb/command/feature/instance' ], 'active-only' => [ 'permissions' => 'module/monitoring' . ',monitoring/command/schedule-check/active-only' . ',icingadb/command/schedule-check/active-only' ], 'no-monitoring-contacts' => [ 'permissions' => 'module/monitoring,no-monitoring/contacts', 'icingadb/denylist/routes' => 'contacts,contactgroups' ], 'reporting-only' => [ 'permissions' => 'module/reporting' ], 'icingadb' => [ 'icingadb/filter/objects' => 'host.name~%2Afoo%2A|hostgroup.name~%2Afoo%2A', 'icingadb/filter/services' => 'service.name~%2Abar%2A&service.vars.env=prod', 'icingadb/filter/hosts' => 'host.vars.env~%2Afoo%2A' ] ] ], 'single-role-or-group' => [ 'initial' => [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ], 'expected' => [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo', 'icingadb/filter/objects' => 'host.name=foo|hostgroup.name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ] ] ]; protected $defaultConfigDir; protected $fileStorage; protected function setUp(): void { $this->defaultConfigDir = Config::$configDir; $this->fileStorage = new TemporaryLocalFileStorage(); Config::$configDir = dirname($this->fileStorage->resolvePath('bogus')); } protected function tearDown(): void { Config::$configDir = $this->defaultConfigDir; unset($this->fileStorage); // Should clean up automatically Config::module('monitoring', 'config', true); } protected function getConfig(string $case): array { return [$this->config[$case]['initial'], $this->config[$case]['expected']]; } protected function createConfig(string $path, array $data): void { $config = new Config(new ConfigObject($data)); $config->saveIni($this->fileStorage->resolvePath($path)); } protected function loadConfig(string $path): array { return Config::fromIni($this->fileStorage->resolvePath($path))->toArray(); } protected function createCommandInstance(string ...$params): MigrateCommand { array_unshift($params, 'program'); $app = $this->createConfiguredMock(Cli::class, [ 'getParams' => new Params($params), 'getModuleManager' => $this->createConfiguredMock(Manager::class, [ 'loadEnabledModules' => null ]) ]); return new MigrateCommand( $app, 'migrate', 'toicingadb', 'dashboard', false ); } /** * Checks the following: * - Whether only a single user is handled * - Whether backups are made * - Whether a second run changes nothing, if nothing changed * - Whether a second run keeps the backup, if nothing changed * - Whether a new backup isn't made, if nothing changed * - Whether existing Icinga DB dashboards are transformed regarding wildcard filters */ public function testDashboardMigrationBehavesAsExpectedByDefault() { [$initialConfig, $expected] = $this->getConfig('dashboards'); $this->createConfig('dashboards/test/dashboard.ini', $initialConfig); $this->createConfig('dashboards/test2/dashboard.ini', $initialConfig); $command = $this->createCommandInstance('--user', 'test'); $command->dashboardAction(); $config = $this->loadConfig('dashboards/test/dashboard.ini'); $this->assertSame($expected, $config); $config2 = $this->loadConfig('dashboards/test2/dashboard.ini'); $this->assertSame($initialConfig, $config2); $backup = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $this->assertSame($initialConfig, $backup); $command = $this->createCommandInstance('--user', 'test'); $command->dashboardAction(); $configAfterSecondRun = $this->loadConfig('dashboards/test/dashboard.ini'); $this->assertSame($config, $configAfterSecondRun); $backupAfterSecondRun = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $this->assertSame($backup, $backupAfterSecondRun); $backup1AfterSecondRun = $this->loadConfig('dashboards/test/dashboard.backup1.ini'); $this->assertEmpty($backup1AfterSecondRun); } /** * Checks the following: * - Whether a second run creates a new backup, if something changed */ public function testDashboardMigrationCreatesMultipleBackups() { $initialOldConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ] ]; $initialNewConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'hosts.group_members' => [ 'title' => 'Group Members', 'url' => 'monitoring/list/hosts?hostgroup_name=group1|hostgroup_name=group2' ] ]; $expectedNewConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ] ]; $expectedFinalConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'hosts.group_members' => [ 'title' => 'Group Members', 'url' => 'icingadb/hosts?hostgroup.name=group1|hostgroup.name=group2' ] ]; $this->createConfig('dashboards/test/dashboard.ini', $initialOldConfig); $command = $this->createCommandInstance('--user', 'test'); $command->dashboardAction(); $newConfig = $this->loadConfig('dashboards/test/dashboard.ini'); $this->assertSame($expectedNewConfig, $newConfig); $oldBackup = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $this->assertSame($initialOldConfig, $oldBackup); $this->createConfig('dashboards/test/dashboard.ini', $initialNewConfig); $command = $this->createCommandInstance('--user', 'test'); $command->dashboardAction(); $finalConfig = $this->loadConfig('dashboards/test/dashboard.ini'); $this->assertSame($expectedFinalConfig, $finalConfig); $newBackup = $this->loadConfig('dashboards/test/dashboard.backup1.ini'); $this->assertSame($initialNewConfig, $newBackup); } /** * Checks the following: * - Whether backups are skipped * * @depends testDashboardMigrationBehavesAsExpectedByDefault */ public function testDashboardMigrationSkipsBackupIfRequested() { [$initialConfig, $expected] = $this->getConfig('dashboards'); $this->createConfig('dashboards/test/dashboard.ini', $initialConfig); $command = $this->createCommandInstance('--user', 'test', '--no-backup'); $command->dashboardAction(); $config = $this->loadConfig('dashboards/test/dashboard.ini'); $this->assertSame($expected, $config); $backup = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $this->assertEmpty($backup); } /** * Checks the following: * - Whether multiple users are handled * - Whether multiple backups are made * * @depends testDashboardMigrationBehavesAsExpectedByDefault */ public function testDashboardMigrationMigratesAllUsers() { [$initialConfig, $expected] = $this->getConfig('dashboards'); $users = ['foo', 'bar', 'raboof']; foreach ($users as $user) { $this->createConfig("dashboards/$user/dashboard.ini", $initialConfig); } $command = $this->createCommandInstance('--user', '*'); $command->dashboardAction(); foreach ($users as $user) { $config = $this->loadConfig("dashboards/$user/dashboard.ini"); $this->assertSame($expected, $config); $backup = $this->loadConfig("dashboards/$user/dashboard.backup.ini"); $this->assertSame($initialConfig, $backup); } } public function testDashboardMigrationExpectsUserSwitch() { $this->expectException(MissingParameterException::class); $this->expectExceptionMessage('Required parameter \'user\' missing'); $command = $this->createCommandInstance(); $command->dashboardAction(); } /** * Checks the following: * - Whether only a single user is handled * - Whether shared items are migrated, depending on the owner * - Whether old configs are kept/or backups are created * - Whether a second run changes nothing, if nothing changed * - Whether a second run keeps the backup, if nothing changed * - Whether a new backup isn't created, if nothing changed */ public function testNavigationMigrationBehavesAsExpectedByDefault() { [$initialMenuConfig, $expectedMenu] = $this->getConfig('menu-items'); [$initialHostConfig, $expectedHosts] = $this->getConfig('host-actions'); [$initialServiceConfig, $expectedServices] = $this->getConfig('service-actions'); $this->createConfig('preferences/test/menu.ini', $initialMenuConfig); $this->createConfig('preferences/test/host-actions.ini', $initialHostConfig); $this->createConfig('preferences/test/service-actions.ini', $initialServiceConfig); $this->createConfig('preferences/test2/menu.ini', $initialMenuConfig); $this->createConfig('preferences/test2/host-actions.ini', $initialHostConfig); $this->createConfig('preferences/test2/service-actions.ini', $initialServiceConfig); [$initialSharedMenuConfig, $expectedSharedMenu] = $this->getConfig('shared-menu-items'); $this->createConfig('navigation/menu.ini', $initialSharedMenuConfig); [$initialSharedConfig, $expectedShared] = $this->getConfig('shared-host-actions'); $this->createConfig('navigation/host-actions.ini', $initialSharedConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $menuConfig = $this->loadConfig('preferences/test/menu.ini'); $this->assertSame($expectedMenu, $menuConfig); $sharedMenuConfig = $this->loadConfig('navigation/menu.ini'); $this->assertSame($expectedSharedMenu, $sharedMenuConfig); $menuConfig2 = $this->loadConfig('preferences/test2/menu.ini'); $this->assertSame($initialMenuConfig, $menuConfig2); $menuBackup = $this->loadConfig('preferences/test/menu.backup.ini'); $this->assertSame($initialMenuConfig, $menuBackup); $hosts = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $services = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($expectedHosts, $hosts); $this->assertSame($expectedServices, $services); $sharedConfig = $this->loadConfig('navigation/icingadb-host-actions.ini'); $this->assertSame($expectedShared, $sharedConfig); $hosts2 = $this->loadConfig('preferences/test2/icingadb-host-actions.ini'); $services2 = $this->loadConfig('preferences/test2/icingadb-service-actions.ini'); $this->assertEmpty($hosts2); $this->assertEmpty($services2); $oldHosts = $this->loadConfig('preferences/test/host-actions.ini'); $oldServices = $this->loadConfig('preferences/test/service-actions.ini'); $this->assertSame($initialHostConfig, $oldHosts); $this->assertSame($initialServiceConfig, $oldServices); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $menuConfigAfterSecondRun = $this->loadConfig('preferences/test/menu.ini'); $this->assertSame($menuConfig, $menuConfigAfterSecondRun); $menuBackupAfterSecondRun = $this->loadConfig('preferences/test/menu.backup.ini'); $this->assertSame($menuBackup, $menuBackupAfterSecondRun); $menuBackup1AfterSecondRun = $this->loadConfig('preferences/test/menu.backup1.ini'); $this->assertEmpty($menuBackup1AfterSecondRun); $hostsAfterSecondRun = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $servicesAfterSecondRun = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($hosts, $hostsAfterSecondRun); $this->assertSame($services, $servicesAfterSecondRun); } /** * Checks the following: * - Whether a second run creates a new backup, if something changed * * @depends testNavigationMigrationBehavesAsExpectedByDefault */ public function testNavigationMigrationCreatesMultipleBackups() { $initialOldConfig = [ 'hosts' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ] ]; $initialNewConfig = [ 'hosts' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'group_members' => [ 'title' => 'Group Members', 'url' => 'monitoring/list/hosts?hostgroup_name=group1|hostgroup_name=group2' ] ]; $expectedNewConfig = [ 'hosts' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ] ]; $expectedFinalConfig = [ 'hosts' => [ 'title' => 'Host Problems', 'url' => 'icingadb/hosts?host.state.is_problem=y' ], 'group_members' => [ 'title' => 'Group Members', 'url' => 'icingadb/hosts?hostgroup.name=group1|hostgroup.name=group2' ] ]; $this->createConfig('preferences/test/menu.ini', $initialOldConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $newConfig = $this->loadConfig('preferences/test/menu.ini'); $this->assertSame($expectedNewConfig, $newConfig); $oldBackup = $this->loadConfig('preferences/test/menu.backup.ini'); $this->assertSame($initialOldConfig, $oldBackup); $this->createConfig('preferences/test/menu.ini', $initialNewConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $finalConfig = $this->loadConfig('preferences/test/menu.ini'); $this->assertSame($expectedFinalConfig, $finalConfig); $newBackup = $this->loadConfig('preferences/test/menu.backup1.ini'); $this->assertSame($initialNewConfig, $newBackup); } /** * Checks the following: * - Whether backups are skipped * * @depends testNavigationMigrationBehavesAsExpectedByDefault */ public function testNavigationMigrationSkipsBackupIfRequested() { [$initialConfig, $expected] = $this->getConfig('menu-items'); $this->createConfig('preferences/test/menu.ini', $initialConfig); $command = $this->createCommandInstance('--user', 'test', '--no-backup'); $command->navigationAction(); $config = $this->loadConfig('preferences/test/menu.ini'); $this->assertSame($expected, $config); $backup = $this->loadConfig('preferences/test/menu.backup.ini'); $this->assertEmpty($backup); } /** * Checks the following: * - Whether existing Icinga DB Actions are transformed regarding wildcard filters */ public function testNavigationMigrationTransformsAlreadyExistingIcingaDBActions() { [$initialHostConfig, $expectedHosts] = $this->getConfig('icingadb-host-actions'); [$initialServiceConfig, $expectedServices] = $this->getConfig('icingadb-service-actions'); $this->createConfig('preferences/test/icingadb-host-actions.ini', $initialHostConfig); $this->createConfig('preferences/test/icingadb-service-actions.ini', $initialServiceConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $hosts = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $services = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($expectedHosts, $hosts); $this->assertSame($expectedServices, $services); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $hostsAfterSecondRun = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $servicesAfterSecondRun = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($hosts, $hostsAfterSecondRun); $this->assertSame($services, $servicesAfterSecondRun); } /** * Checks the following: * - Whether legacy host/service macros are migrated */ public function testNavigationMigrationMigratesLegacyMacros() { [$initialHostConfig, $expectedHosts] = $this->getConfig('host-actions-legacy-macros'); [$initialServiceConfig, $expectedServices] = $this->getConfig('service-actions-legacy-macros'); $this->createConfig('preferences/test/host-actions.ini', $initialHostConfig); $this->createConfig('preferences/test/service-actions.ini', $initialServiceConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $hosts = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $services = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($expectedHosts, $hosts); $this->assertSame($expectedServices, $services); } /** * Checks the following: * - Whether old configs are removed */ public function testNavigationMigrationDeletesOldConfigsIfRequested() { [$initialHostConfig, $expectedHosts] = $this->getConfig('host-actions'); [$initialServiceConfig, $expectedServices] = $this->getConfig('service-actions'); $this->createConfig('preferences/test/host-actions.ini', $initialHostConfig); $this->createConfig('preferences/test/service-actions.ini', $initialServiceConfig); $command = $this->createCommandInstance('--user', 'test', '--no-backup'); $command->navigationAction(); $hosts = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $services = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $this->assertSame($expectedHosts, $hosts); $this->assertSame($expectedServices, $services); $oldHosts = $this->loadConfig('preferences/test/host-actions.ini'); $oldServices = $this->loadConfig('preferences/test/service-actions.ini'); $this->assertEmpty($oldHosts); $this->assertEmpty($oldServices); } /** * Checks the following: * - Whether existing configs are left alone by default * - Whether existing configs are overridden if requested */ public function testNavigationMigrationOverridesExistingActionsIfRequested() { $initialOldUserConfig = [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A' ] ]; $initialOldSharedConfig = [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A', 'owner' => 'test' ] ]; $initialNewUserConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Abar%2A' ] ]; $initialNewSharedConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Abar%2A', 'owner' => 'test' ] ]; $expectedFinalUserConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A' ] ]; $expectedFinalSharedConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A', 'owner' => 'test' ] ]; $this->createConfig('preferences/test/host-actions.ini', $initialOldUserConfig); $this->createConfig('preferences/test/icingadb-host-actions.ini', $initialNewUserConfig); $this->createConfig('navigation/host-actions.ini', $initialOldSharedConfig); $this->createConfig('navigation/icingadb-host-actions.ini', $initialNewSharedConfig); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); $finalUserConfig = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $this->assertSame($initialNewUserConfig, $finalUserConfig); $finalSharedConfig = $this->loadConfig('navigation/icingadb-host-actions.ini'); $this->assertSame($initialNewSharedConfig, $finalSharedConfig); $command = $this->createCommandInstance('--user', 'test', '--override'); $command->navigationAction(); $finalUserConfig = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $this->assertSame($expectedFinalUserConfig, $finalUserConfig); $finalSharedConfig = $this->loadConfig('navigation/icingadb-host-actions.ini'); $this->assertSame($expectedFinalSharedConfig, $finalSharedConfig); } public function testNavigationMigrationExpectsUserSwitch() { $this->expectException(MissingParameterException::class); $this->expectExceptionMessage('Required parameter \'user\' missing'); $command = $this->createCommandInstance(); $command->navigationAction(); } /** * Checks the following: * - Whether only a single role is handled * - Whether role name matching works */ public function testRoleMigrationHandlesASingleRoleOnlyIfRequested() { [$initialConfig, $expected] = $this->getConfig('single-role-or-group'); $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', 'one'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expected, $config); } /** * Checks the following: * - Whether only a single role is handled * - Whether group matching works */ public function testRoleMigrationHandlesARoleWithMatchingGroups() { [$initialConfig, $expected] = $this->getConfig('single-role-or-group'); $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--group', 'support'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expected, $config); } /** * Checks the following: * - Whether permissions are properly migrated * - Whether refusals are properly migrated * - Whether restrictions are properly migrated * - Whether blacklists are properly migrated * - Whether backups are created * - Whether a second run changes nothing, if nothing changed * - Whether a second run keeps the backup, if nothing changed * - Whether a new backup isn't created, if nothing changed */ public function testRoleMigrationMigratesAllRoles() { [$initialConfig, $expected] = $this->getConfig('all-roles'); $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', '*'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expected, $config); $backup = $this->loadConfig('roles.backup.ini'); $this->assertSame($initialConfig, $backup); $command = $this->createCommandInstance('--role', '*'); $command->roleAction(); $configAfterSecondRun = $this->loadConfig('roles.ini'); $this->assertSame($config, $configAfterSecondRun); $backupAfterSecondRun = $this->loadConfig('roles.backup.ini'); $this->assertSame($backup, $backupAfterSecondRun); $backup2 = $this->loadConfig('roles.backup1.ini'); $this->assertEmpty($backup2); } /** * Checks the following: * - Whether backups are skipped * * @depends testRoleMigrationMigratesAllRoles */ public function testRoleMigrationSkipsBackupIfRequested() { [$initialConfig, $expected] = $this->getConfig('all-roles'); $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', '*', '--no-backup'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expected, $config); $backup = $this->loadConfig('roles.backup.ini'); $this->assertEmpty($backup); } /** * Checks the following: * - Whether monitoring's variable protection rules are migrated to all roles granting access to monitoring */ public function testRoleMigrationAlsoMigratesVariableProtections() { $initialConfig = [ 'one' => [ 'permissions' => 'module/monitoring' ], 'two' => [ 'permissions' => 'module/monitoring' ], 'three' => [ 'permissions' => 'module/reporting' ] ]; $expectedConfig = [ 'one' => [ 'permissions' => 'module/monitoring', 'icingadb/protect/variables' => 'ob.*,env' ], 'two' => [ 'permissions' => 'module/monitoring', 'icingadb/protect/variables' => 'ob.*,env' ], 'three' => [ 'permissions' => 'module/reporting' ] ]; $this->createConfig('modules/monitoring/config.ini', [ 'security' => [ 'protected_customvars' => 'ob.*,env' ] ]); // Invalidate config cache Config::module('monitoring', 'config', true); $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', '*'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expectedConfig, $config); } /** * Checks the following: * - Whether already migrated roles are skipped during migration * - Whether already migrated roles are transformed regarding wildcard filters */ public function testRoleMigrationSkipsRolesThatAlreadyGrantAccessToIcingaDbButTransformWildcardRestrictions() { $initialConfig = [ 'only-monitoring' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*', 'monitoring/filter/objects' => 'host_name=%2Afoo%2A' ], 'monitoring-and-icingadb' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*,module/icingadb', 'monitoring/filter/objects' => 'host_name=%2Abar%2A', 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ]; $expectedConfig = [ 'only-monitoring' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*,icingadb/command/comment/*', 'monitoring/filter/objects' => 'host_name=%2Afoo%2A', 'icingadb/filter/objects' => 'host.name~%2Afoo%2A' ], 'monitoring-and-icingadb' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*,module/icingadb', 'monitoring/filter/objects' => 'host_name=%2Abar%2A', 'icingadb/filter/objects' => 'host.name~%2Afoo%2A' ] ]; $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', '*'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expectedConfig, $config); } /** * Checks the following: * - Whether already migrated roles are reset if requested */ public function testRoleMigrationOverridesAlreadyMigratedRolesIfRequested() { $initialConfig = [ 'only-monitoring' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*', 'monitoring/filter/objects' => 'host_name=%2Afoo%2A' ], 'monitoring-and-icingadb' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*,module/icingadb', 'monitoring/filter/objects' => 'host_name=%2Abar%2A', 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ]; $expectedConfig = [ 'only-monitoring' => [ 'permissions' => 'module/monitoring,monitoring/command/comment/*,icingadb/command/comment/*', 'monitoring/filter/objects' => 'host_name=%2Afoo%2A', 'icingadb/filter/objects' => 'host.name~%2Afoo%2A' ], 'monitoring-and-icingadb' => [ 'permissions' => 'module/monitoring' . ',monitoring/command/comment/*' . ',icingadb/command/comment/*', 'monitoring/filter/objects' => 'host_name=%2Abar%2A', 'icingadb/filter/objects' => 'host.name~%2Abar%2A' ] ]; $this->createConfig('roles.ini', $initialConfig); $command = $this->createCommandInstance('--role', '*', '--override'); $command->roleAction(); $config = $this->loadConfig('roles.ini'); $this->assertSame($expectedConfig, $config); } public function testRoleMigrationExpectsTheRoleOrGroupSwitch() { $this->expectException(IcingaException::class); $this->expectExceptionMessage("One of the parameters 'group' or 'role' must be supplied"); $command = $this->createCommandInstance(); $command->roleAction(); } public function testRoleMigrationExpectsEitherTheRoleOrGroupSwitchButNotBoth() { $this->expectException(IcingaException::class); $this->expectExceptionMessage("Use either 'group' or 'role'. Both cannot be used as role overrules group."); $command = $this->createCommandInstance('--role=foo', '--group=bar'); $command->roleAction(); } public function testFilterMigrationWorksAsExpected() { $initialHostActionConfig = [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A' ] ]; $expectedHostActionConfig = $initialHostActionConfig; $initialIcingadbHostActionConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name=%2Afoo%2A' ] ]; $expectedIcingadbHostActionConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A' ] ]; $initialServiceActionConfig = [ 'services' => [ 'type' => 'service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => '_service_foo=bar&_service_bar=%2Afoo%2A' ] ]; $expectedServiceActionConfig = $initialServiceActionConfig; $initialIcingadbServiceActionConfig = [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar=%2Afoo%2A' ] ]; $expectedIcingadbServiceActionConfig = [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar~%2Afoo%2A' ] ]; $initialMenuConfig = [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A' ] ]; $expectedMenuConfig = [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A' ] ]; $initialDashboardConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name=%2Alinux%2A' ] ]; $expectedDashboardConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name~%2Alinux%2A' ] ]; $initialRoleConfig = [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ]; $expectedRoleConfig = [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name~%2Afoo%2A' ] ]; $this->createConfig('preferences/test/host-actions.ini', $initialHostActionConfig); $this->createConfig('preferences/test/service-actions.ini', $initialServiceActionConfig); $this->createConfig('preferences/test/icingadb-host-actions.ini', $initialIcingadbHostActionConfig); $this->createConfig('preferences/test/icingadb-service-actions.ini', $initialIcingadbServiceActionConfig); $this->createConfig('dashboards/test/dashboard.ini', $initialDashboardConfig); $this->createConfig('preferences/test/menu.ini', $initialMenuConfig); $this->createConfig('roles.ini', $initialRoleConfig); $command = $this->createCommandInstance(); $command->filterAction(); $hostActionConfig = $this->loadConfig('preferences/test/host-actions.ini'); $serviceActionConfig = $this->loadConfig('preferences/test/service-actions.ini'); $icingadbHostActionConfig = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $icingadbServiceActionConfig = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $dashboardBackup = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $dashboardConfig = $this->loadConfig('dashboards/test/dashboard.ini'); $menuBackup = $this->loadConfig('preferences/test/menu.backup.ini'); $menuConfig = $this->loadConfig('preferences/test/menu.ini'); $roleBackup = $this->loadConfig('roles.backup.ini'); $roleConfig = $this->loadConfig('roles.ini'); $this->assertSame($expectedHostActionConfig, $hostActionConfig); $this->assertSame($expectedServiceActionConfig, $serviceActionConfig); $this->assertSame($initialDashboardConfig, $dashboardBackup); $this->assertSame($initialMenuConfig, $menuBackup); $this->assertSame($initialRoleConfig, $roleBackup); $this->assertSame($expectedIcingadbHostActionConfig, $icingadbHostActionConfig); $this->assertSame($expectedIcingadbServiceActionConfig, $icingadbServiceActionConfig); $this->assertSame($expectedDashboardConfig, $dashboardConfig); $this->assertSame($expectedMenuConfig, $menuConfig); $this->assertSame($expectedRoleConfig, $roleConfig); } /** * @depends testFilterMigrationWorksAsExpected */ public function testFilterMigrationSkipsBackupsIfRequested() { $initialHostActionConfig = [ 'hosts' => [ 'type' => 'host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host_name=%2Afoo%2A' ] ]; $expectedHostActionConfig = $initialHostActionConfig; $initialIcingadbHostActionConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name=%2Afoo%2A' ] ]; $expectedIcingadbHostActionConfig = [ 'hosts' => [ 'type' => 'icingadb-host-action', 'url' => 'example.com/search?q=$host.name$', 'filter' => 'host.name~%2Afoo%2A' ] ]; $initialServiceActionConfig = [ 'services' => [ 'type' => 'service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => '_service_foo=bar&_service_bar=%2Afoo%2A' ] ]; $expectedServiceActionConfig = $initialServiceActionConfig; $initialIcingadbServiceActionConfig = [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar=%2Afoo%2A' ] ]; $expectedIcingadbServiceActionConfig = [ 'services' => [ 'type' => 'icingadb-service-action', 'url' => 'example.com/search?q=$service.name$,$host.name$,$host.address$,$host.address6$', 'filter' => 'service.vars.foo=bar&service.vars.bar~%2Afoo%2A' ] ]; $initialMenuConfig = [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name=%2Afoo%2A' ] ]; $expectedMenuConfig = [ 'foreign-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'example.com?q=foo' ], 'monitoring-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb-url' => [ 'type' => 'menu-item', 'target' => '_blank', 'url' => 'icingadb/hosts?host.name~%2Afoo%2A' ] ]; $initialDashboardConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name=%2Alinux%2A' ] ]; $expectedDashboardConfig = [ 'hosts' => [ 'title' => 'Hosts' ], 'hosts.problems' => [ 'title' => 'Host Problems', 'url' => 'monitoring/list/hosts?host_problem=1' ], 'icingadb' => [ 'title' => 'Icinga DB' ], 'icingadb.wildcards' => [ 'title' => 'Wildcards', 'url' => 'icingadb/hosts?host.state.is_problem=y&hostgroup.name~%2Alinux%2A' ] ]; $initialRoleConfig = [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name=%2Afoo%2A' ] ]; $expectedRoleConfig = [ 'one' => [ 'groups' => 'support,helpdesk', 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'two' => [ 'monitoring/filter/objects' => 'host_name=foo|hostgroup_name=foo' ], 'three' => [ 'icingadb/filter/objects' => 'host.name~%2Afoo%2A' ] ]; $this->createConfig('preferences/test/host-actions.ini', $initialHostActionConfig); $this->createConfig('preferences/test/service-actions.ini', $initialServiceActionConfig); $this->createConfig('preferences/test/icingadb-host-actions.ini', $initialIcingadbHostActionConfig); $this->createConfig('preferences/test/icingadb-service-actions.ini', $initialIcingadbServiceActionConfig); $this->createConfig('dashboards/test/dashboard.ini', $initialDashboardConfig); $this->createConfig('preferences/test/menu.ini', $initialMenuConfig); $this->createConfig('roles.ini', $initialRoleConfig); $command = $this->createCommandInstance('--no-backup'); $command->filterAction(); $hostActionConfig = $this->loadConfig('preferences/test/host-actions.ini'); $serviceActionConfig = $this->loadConfig('preferences/test/service-actions.ini'); $icingadbHostActionConfig = $this->loadConfig('preferences/test/icingadb-host-actions.ini'); $icingadbServiceActionConfig = $this->loadConfig('preferences/test/icingadb-service-actions.ini'); $dashboardBackup = $this->loadConfig('dashboards/test/dashboard.backup.ini'); $dashboardConfig = $this->loadConfig('dashboards/test/dashboard.ini'); $menuBackup = $this->loadConfig('preferences/test/menu.backup.ini'); $menuConfig = $this->loadConfig('preferences/test/menu.ini'); $roleBackup = $this->loadConfig('roles.backup.ini'); $roleConfig = $this->loadConfig('roles.ini'); $this->assertSame($expectedHostActionConfig, $hostActionConfig); $this->assertSame($expectedServiceActionConfig, $serviceActionConfig); $this->assertEmpty($dashboardBackup); $this->assertEmpty($menuBackup); $this->assertEmpty($roleBackup); $this->assertSame($expectedIcingadbHostActionConfig, $icingadbHostActionConfig); $this->assertSame($expectedIcingadbServiceActionConfig, $icingadbServiceActionConfig); $this->assertSame($expectedDashboardConfig, $dashboardConfig); $this->assertSame($expectedMenuConfig, $menuConfig); $this->assertSame($expectedRoleConfig, $roleConfig); } public function testNavigationMigrationWorksEvenIfOnlySharedItemsExist() { $this->expectNotToPerformAssertions(); $this->createConfig('navigation/menu.ini', []); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); } public function testNavigationMigrationWorksEvenIfOnlyUserItemsExist() { $this->expectNotToPerformAssertions(); $this->createConfig('preferences/test/menu.ini', []); $command = $this->createCommandInstance('--user', 'test'); $command->navigationAction(); } public function testDashboardMigrationWorksEvenIfNoDashboardsExist() { $this->expectNotToPerformAssertions(); $command = $this->createCommandInstance('--user', 'test'); $command->dashboardAction(); } } icingadb-web-1.5.0/test/php/application/forms/000077500000000000000000000000001527064444300212405ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/application/forms/GeneralConfigFormTest.php000066400000000000000000000123121527064444300261370ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Forms; use GuzzleHttp\Psr7\ServerRequest; use Icinga\Application\Config; use Icinga\Module\Icingadb\Forms\GeneralConfigForm; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use ReflectionMethod; class GeneralConfigFormTest extends TestCase { public static function icingaweb2UrlProvider(): array { return [ 'default port' => [ 'http://example.com/icingaweb2', 'http://example.com/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', [] ], 'non-default port without proxy' => [ 'http://example.com:8080/icingaweb2', 'http://example.com:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', [] ], 'https without proxy' => [ 'https://example.com/icingaweb2', 'https://example.com/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', [] ], 'installed at document root' => [ 'http://example.com', 'http://example.com/icingadb/config/general-settings', '/index.php', [] ], 'forwarded protocol with passed through host' => [ 'https://example.com/icingaweb2', 'http://example.com/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', ['X-Forwarded-Proto' => 'https'] ], 'forwarded host without port' => [ 'https://example.com/icingaweb2', 'http://icingaweb:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', ['X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com'] ], 'forwarded non-default port' => [ 'https://example.com:8443/icingaweb2', 'http://icingaweb:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', ['X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com', 'X-Forwarded-Port' => '8443'] ], 'forwarded default port' => [ 'https://example.com/icingaweb2', 'http://icingaweb:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', ['X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com', 'X-Forwarded-Port' => '443'] ], 'forwarded port already part of forwarded host' => [ 'https://example.com:8443/icingaweb2', 'http://icingaweb:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', [ 'X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com:8443', 'X-Forwarded-Port' => '8443' ] ], 'proxy chain' => [ 'https://example.com/icingaweb2', 'http://icingaweb:8080/icingaweb2/icingadb/config/general-settings', '/icingaweb2/index.php', ['X-Forwarded-Proto' => 'https, http', 'X-Forwarded-Host' => 'example.com, proxy.internal'] ], 'forwarded prefix' => [ 'https://example.com/icingaweb2', 'http://icingaweb:8080/icingadb/config/general-settings', '/index.php', [ 'X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com', 'X-Forwarded-Prefix' => '/icingaweb2' ] ], 'forwarded prefix with trailing slash' => [ 'https://example.com/icingaweb2', 'http://icingaweb:8080/icingadb/config/general-settings', '/index.php', [ 'X-Forwarded-Proto' => 'https', 'X-Forwarded-Host' => 'example.com', 'X-Forwarded-Prefix' => '/icingaweb2/' ] ] ]; } #[DataProvider('icingaweb2UrlProvider')] public function testDetectIcingaweb2Url( string $expected, string $requestUrl, string $scriptName, array $headers ): void { $serverParams = [ 'REMOTE_ADDR' => '10.0.0.1', 'SCRIPT_NAME' => $scriptName, 'SCRIPT_FILENAME' => '/usr/share/icingaweb2/public/index.php', 'REQUEST_URI' => parse_url($requestUrl, PHP_URL_PATH), 'HTTPS' => parse_url($requestUrl, PHP_URL_SCHEME) === 'https' ? 'on' : 'off' ]; $form = (new GeneralConfigForm(new Config())) ->setRequest(new ServerRequest('POST', $requestUrl, $headers, null, '1.1', $serverParams)); $this->assertSame($expected, (new ReflectionMethod($form, 'detectIcingaweb2Url'))->invoke($form)); } } icingadb-web-1.5.0/test/php/library/000077500000000000000000000000001527064444300172535ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/000077500000000000000000000000001527064444300207535ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Command/000077500000000000000000000000001527064444300223315ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Command/Transport/000077500000000000000000000000001527064444300243255ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Command/Transport/CommandTransportTest.php000066400000000000000000000230641527064444300311760ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Command\Transport; use Icinga\Module\Icingadb\Command\Object\AddCommentCommand; use Icinga\Module\Icingadb\Command\Transport\CommandTransportException; use Icinga\Module\Icingadb\Model\Host; use PHPUnit\Framework\TestCase; use Tests\Icinga\Module\Icingadb\Lib\FailoverCommandTransport; use Tests\Icinga\Module\Icingadb\Lib\IntermittentlyFailingCommandTransport; use Tests\Icinga\Module\Icingadb\Lib\StrikingCommandTransport; class CommandTransportTest extends TestCase { public function testFatalErrorHandling(): void { $this->expectException(CommandTransportException::class); $this->expectExceptionMessage('endpointA strikes!'); (new StrikingCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setObjects(new \CallbackFilterIterator(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), ]), function ($host) { return $host->name === 'host2'; })) ); } public function testFallbackHandling(): void { $result = (new FailoverCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setObjects(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), ])) ); $this->assertSame( [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host1', 'host2'] ], $result ); } public function testGeneratorsAreNotSupported(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Generators are not supported'); (new StrikingCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setObjects((function () { yield (new Host())->setProperties(['name' => 'host1']); yield (new Host())->setProperties(['name' => 'host2']); })()) ); } public function testChunkedObjectsWithFallbackHandling(): void { // Multiple chunks $result = (new FailoverCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setChunkSize(1) ->setObjects(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), ])) ); $this->assertSame( [ [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host1'] ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host2'] ] ], $result ); // A single chunk $result = (new FailoverCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setChunkSize(4) ->setObjects(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), ])) ); $this->assertSame( [ [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host1', 'host2'] ] ], $result ); } public function testIntermittentFailureHandlingDuringChunkedTransmission(): void { // Fails after the 2nd chunk $result = (new IntermittentlyFailingCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setChunkSize(1) ->setObjects(new \CallbackFilterIterator(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), (new Host())->setProperties(['name' => 'host3']), (new Host())->setProperties(['name' => 'host4']), (new Host())->setProperties(['name' => 'host5']), (new Host())->setProperties(['name' => 'host6']), ]), fn() => true)) ); $this->assertSame( [ [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host1'], 'endpoint' => 'endpointA' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host2'], 'endpoint' => 'endpointB' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host3'], 'endpoint' => 'endpointB' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host4'], 'endpoint' => 'endpointB' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host5'], 'endpoint' => 'endpointB' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host6'], 'endpoint' => 'endpointB' ] ], $result ); // Fails after the next-to-last chunk IntermittentlyFailingCommandTransport::$failAtAttemptNo = 3; IntermittentlyFailingCommandTransport::$attemptNo = 0; $result = (new IntermittentlyFailingCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setChunkSize(2) ->setObjects(new \CallbackFilterIterator(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), (new Host())->setProperties(['name' => 'host3']), (new Host())->setProperties(['name' => 'host4']), (new Host())->setProperties(['name' => 'host5']), (new Host())->setProperties(['name' => 'host6']), ]), fn() => true)) ); $this->assertSame( [ [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host1', 'host2'], 'endpoint' => 'endpointA' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host3', 'host4'], 'endpoint' => 'endpointA' ], [ 'author' => 'GLaDOS', 'comment' => 'The cake is a lie', 'expiry' => 42, 'hosts' => ['host5', 'host6'], 'endpoint' => 'endpointB' ] ], $result ); } public function testFatalErrorHandlingDuringChunkedTransmission(): void { $this->expectException(CommandTransportException::class); $this->expectExceptionMessage('endpointA strikes!'); (new StrikingCommandTransport())->send( (new AddCommentCommand()) ->setExpireTime(42) ->setAuthor('GLaDOS') ->setComment('The cake is a lie') ->setChunkSize(1) ->setObjects(new \ArrayIterator([ (new Host())->setProperties(['name' => 'host1']), (new Host())->setProperties(['name' => 'host2']), ])) ); } } icingadb-web-1.5.0/test/php/library/Icingadb/Common/000077500000000000000000000000001527064444300222035ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Common/AuthTest.php000066400000000000000000000122151527064444300244560ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Common; use ipl\Stdlib\Filter; use ipl\Web\Filter\Renderer; use PHPUnit\Framework\TestCase; use Icinga\Module\Icingadb\Common\Auth; class AuthTest extends TestCase { use Auth; public function testFlatteningOfNestedAnyRules(): void { $to = Filter::any(); $from = Filter::any( Filter::equal('a', 1), Filter::equal('b', 2), Filter::any( Filter::equal('c', 3), Filter::equal('d', 4), Filter::any( Filter::equal('e', 5), Filter::equal('f', 6) ) ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '(a=1|b=2|c=3|d=4|e=5|f=6)', $to ); } public function testFlatteningOfNestedAllRules(): void { $to = Filter::all(); $from = Filter::all( Filter::equal('a', 1), Filter::equal('b', 2), Filter::all( Filter::equal('c', 3), Filter::equal('d', 4), Filter::all( Filter::equal('e', 5), Filter::equal('f', 6) ) ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '(a=1&b=2&c=3&d=4&e=5&f=6)', $to ); } public function testFlatteningOfNestedNoneRules(): void { $to = Filter::none(); $from = Filter::none( Filter::equal('a', 1), Filter::equal('b', 2), Filter::none( Filter::equal('c', 3), Filter::equal('d', 4), Filter::none( Filter::equal('e', 5), Filter::equal('f', 6) ) ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '!(a=1|b=2|c=3|d=4|e=5|f=6)', $to ); } public function testFlatteningOfNestedMixedRules(): void { $to = Filter::any(); $from = Filter::any( Filter::equal('a', 1), Filter::all( Filter::equal('b', 2), Filter::equal('c', 3) ), Filter::none( Filter::equal('d', 4), Filter::equal('e', 5) ), Filter::any( Filter::equal('f', 6), Filter::equal('g', 7), Filter::none( Filter::none( Filter::equal('h', 8), Filter::equal('i', 9) ) ) ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '(a=1|(b=2&c=3)|!(d=4|e=5)|f=6|g=7|!(h=8|i=9))', $to ); } public function testFlatteningOfEdgeCases(): void { $to = Filter::any(); $from = Filter::any( Filter::all( Filter::equal('a', 1) ), Filter::none( Filter::equal('b', 2) ), Filter::any( Filter::equal('c', 3) ), Filter::equal('d', 4) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '(a=1|!(b=2)|c=3|d=4)', $to ); } public function testFlatteningOfSemanticallyUnequalRules(): void { $to = Filter::any(); $from = Filter::all( Filter::equal('a', 1), Filter::equal('b', 2), Filter::any( Filter::equal('c', 3), Filter::equal('d', 4), Filter::any( Filter::equal('e', 5), Filter::equal('f', 6) ) ), Filter::all( Filter::equal('g', 7), ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '((a=1&b=2&(c=3|d=4|e=5|f=6)&g=7)|)', $to ); $to = Filter::all(); $from = Filter::any( Filter::equal('a', 1), Filter::all( Filter::equal('b', 2), Filter::equal('c', 3) ), Filter::none( Filter::equal('d', 4), Filter::equal('e', 5) ), Filter::any( Filter::equal('f', 6), Filter::equal('g', 7) ) ); $this->flattenSemanticallyEqualRules($to, $from); $this->assertFilterEquals( '((a=1|(b=2&c=3)|!(d=4|e=5)|f=6|g=7))', $to ); } private function assertFilterEquals(string $expected, Filter\Rule $actual): void { $this->assertEquals( $expected, (new Renderer($actual))->setStrict()->render() ); } } icingadb-web-1.5.0/test/php/library/Icingadb/Common/MacrosTest.php000066400000000000000000000147621527064444300250120ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Common; use Icinga\Module\Icingadb\Common\Macros; use Icinga\Module\Icingadb\Compat\CompatHost; use Icinga\Module\Icingadb\Compat\CompatService; use Icinga\Module\Icingadb\Model\Host; use Icinga\Module\Icingadb\Model\Service; use ipl\Orm\Query; use ipl\Orm\ResultSet; use PHPUnit\Framework\TestCase; class MacrosTest extends TestCase { use Macros; public const VARS = [ 'os' => "Ubuntu", 'days[0]' => 'mo', 'days[1]' => 'tue', 'days[2]' => 'wed', 'days[3]' => 'thu', 'days[4]' => 'fr' ]; public function testHostMacros() { $host = new Host(); $host->name = 'test'; $host->address = '1.1.1.1'; $host->address6 = '::1'; $host->vars = self::VARS; $host->hostgroup = new Query(); $this->performHostMacroTests($host, $host); } public function testHostMacrosOnCompatObject() { if (! class_exists('Icinga\Module\Monitoring\Object\Host')) { $this->markTestSkipped('This test requires the monitoring module'); } $host = new Host(); $host->name = 'test'; $host->address = '1.1.1.1'; $host->address6 = '::1'; $host->vars = self::VARS; $host->hostgroup = new Query(); $compatHost = new CompatHost($host); $this->performHostMacroTests($compatHost, $host); } protected function performHostMacroTests($host, $source) { $this->assertEquals($source->name, $this->expandMacros('$host.name$', $host)); $this->assertEquals($source->name, $this->expandMacros('$name$', $host)); $this->assertEquals($source->address, $this->expandMacros('$host.address$', $host)); $this->assertEquals($source->address6, $this->expandMacros('$host.address6$', $host)); // A Host can have more than one hostgroups $this->assertEquals('$host.hostgroup$', $this->expandMacros('$host.hostgroup$', $host)); $this->assertEquals('$host.hostgroup.name$', $this->expandMacros('$host.hostgroup.name$', $host)); // Host custom vars $this->assertEquals($source->vars['os'], $this->expandMacros('$host.vars.os$', $host)); $this->assertEquals($source->vars['os'], $this->expandMacros('$vars.os$', $host)); $this->assertEquals($source->vars['days[2]'], $this->expandMacros('$vars.days[2]$', $host)); $this->assertEquals($source->vars['days[4]'], $this->expandMacros('$host.vars.days[4]$', $host)); // Host to service relation $this->assertEquals('$service.name$', $this->expandMacros('$service.name$', $host)); $this->assertEquals('$service.address$', $this->expandMacros('$service.address$', $host)); // Service custom vars $this->assertEquals('$service.vars.os$', $this->expandMacros('$service.vars.os$', $host)); $this->assertEquals('$service.vars.days[0]$', $this->expandMacros('$service.vars.days[0]$', $host)); $this->assertEquals('$service.vars.days[2]$', $this->expandMacros('$service.vars.days[2]$', $host)); } public function testServiceMacros() { $service = new Service(); $service->name = 'test-service'; $service->description = 'A test service'; $service->vars = self::VARS; $service->servicegroup = new Query(); $host = new Host(); $host->name = 'test'; $host->address = '1.1.1.1'; $host->hostgroup = new ResultSet(new \ArrayIterator()); $host->vars = self::VARS; $service->host = $host; $this->performServiceMacroTests($service, $service); } public function testServiceMacrosOnCompatObject() { if (! class_exists('Icinga\Module\Monitoring\Object\Service')) { $this->markTestSkipped('This test requires the monitoring module'); } $service = new Service(); $service->name = 'test-service'; $service->description = 'A test service'; $service->vars = self::VARS; $service->servicegroup = new Query(); $host = new Host(); $host->name = 'test'; $host->address = '1.1.1.1'; $host->hostgroup = new ResultSet(new \ArrayIterator()); $host->vars = self::VARS; $service->host = $host; $compatService = new CompatService($service); $this->performServiceMacroTests($compatService, $service); } protected function performServiceMacroTests($service, $source) { $this->assertEquals($source->name, $this->expandMacros('$service.name$', $service)); $this->assertEquals($source->name, $this->expandMacros('$name$', $service)); $this->assertEquals($source->description, $this->expandMacros('$service.description$', $service)); // A Service can have more than one hostgroups $this->assertEquals( '$service.servicegroup$', $this->expandMacros('$service.servicegroup$', $service) ); $this->assertEquals( '$service.servicegroup.name$', $this->expandMacros('$service.servicegroup.name$', $service) ); // Service custom vars $this->assertEquals($source->vars['os'], $this->expandMacros('$service.vars.os$', $service)); $this->assertEquals($source->vars['os'], $this->expandMacros('$vars.os$', $service)); $this->assertEquals($source->vars['days[2]'], $this->expandMacros('$vars.days[2]$', $service)); $this->assertEquals($source->vars['days[4]'], $this->expandMacros('$service.vars.days[4]$', $service)); $this->assertEquals($source->host->name, $this->expandMacros('$host.name$', $service)); $this->assertEquals($source->host->address, $this->expandMacros('$host.address$', $service)); // Host custom vars $this->assertEquals($source->host->vars['os'], $this->expandMacros('$host.vars.os$', $service)); $this->assertEquals($source->host->vars['days[0]'], $this->expandMacros('$host.vars.days[0]$', $service)); $this->assertEquals($source->host->vars['days[3]'], $this->expandMacros('$host.vars.days[3]$', $service)); // A Host can have more than one hostgroups $this->assertEquals( '$host.hostgroup$', $this->expandMacros('$host.hostgroup$', $service) ); $this->assertEquals( '$host.hostgroup.name$', $this->expandMacros('$host.hostgroup.name$', $service) ); } } icingadb-web-1.5.0/test/php/library/Icingadb/Common/StateBadgesTest.php000066400000000000000000000047271527064444300257540ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Common; use Icinga\Module\Icingadb\Common\StateBadges; use Icinga\Web\UrlParams; use ipl\Stdlib\Filter; use ipl\Web\Filter\QueryString; use ipl\Web\Url; use ipl\Web\Widget\Link; use PHPUnit\Framework\TestCase; class StateBadgesTest extends TestCase { public function testCreateLinkRendersBaseFilterCorrectly() { $stateBadges = $this->createStateBadges() ->setBaseFilter(Filter::any( Filter::equal('foo', 'bar'), Filter::equal('bar', 'foo') )); $link = $stateBadges->generateLink('test', Filter::equal('rab', 'oof')); $this->assertSame( 'rab=oof&(foo=bar|bar=foo)', $link->getUrl()->getQueryString() ); } private function createStateBadges() { $queryString = null; $urlMock = $this->createConfiguredMock(Url::class, [ 'getBasePath' => 'test', 'getParams' => $this->createConfiguredMock(UrlParams::class, [ 'toArray' => [] ]) ]); $urlMock->method('setFilter')->willReturnCallback( function ($qs) use ($urlMock, &$queryString) { $queryString = QueryString::render($qs); return $urlMock; } ); $urlMock->method('getQueryString')->willReturnCallback( function () use (&$queryString) { return $queryString; } ); return new class ($urlMock) extends StateBadges { private $urlMock; public function __construct($urlMock) { $this->urlMock = $urlMock; parent::__construct((object) []); } protected function getBaseUrl(): Url { return $this->urlMock; } protected function getType(): string { return 'test'; } protected function getPrefix(): string { return 'Test'; } protected function getStateInt(string $state): int { return 0; } public function generateLink($content, ?Filter\Rule $filter = null): Link { return parent::createLink($content, $filter); } }; } } icingadb-web-1.5.0/test/php/library/Icingadb/Model/000077500000000000000000000000001527064444300220135ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Model/Behavior/000077500000000000000000000000001527064444300235525ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Model/Behavior/FlattenedObjectVarsTest.php000066400000000000000000000165451527064444300310270ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Model\Behavior; use Icinga\Module\Icingadb\Common\Backend; use Icinga\Module\Icingadb\Model\Host; use ipl\Sql\Connection; use ipl\Sql\Test\SqlAssertions; use ipl\Sql\Test\TestConnection; use ipl\Stdlib\Filter; use PHPUnit\Framework\TestCase; class FlattenedObjectVarsTest extends TestCase { use SqlAssertions; private const SINGLE_UNEQUAL_RESULT = <<<'SQL' SELECT host.id FROM host WHERE (host.id NOT IN ((SELECT sub_customvar_flat_host.id AS sub_customvar_flat_host_id FROM customvar_flat sub_customvar_flat INNER JOIN host_customvar sub_customvar_flat_host_customvar ON sub_customvar_flat_host_customvar.customvar_id = sub_customvar_flat.customvar_id INNER JOIN host sub_customvar_flat_host ON sub_customvar_flat_host.id = sub_customvar_flat_host_customvar.host_id WHERE ((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?)) AND (sub_customvar_flat_host.id IS NOT NULL) GROUP BY sub_customvar_flat_host.id HAVING COUNT(DISTINCT sub_customvar_flat.id) >= ?)) OR host.id IS NULL) ORDER BY host.id SQL; private const DOUBLE_UNEQUAL_RESULT = <<<'SQL' SELECT host.id FROM host WHERE (host.id NOT IN ((SELECT sub_customvar_flat_host.id AS sub_customvar_flat_host_id FROM customvar_flat sub_customvar_flat INNER JOIN host_customvar sub_customvar_flat_host_customvar ON sub_customvar_flat_host_customvar.customvar_id = sub_customvar_flat.customvar_id INNER JOIN host sub_customvar_flat_host ON sub_customvar_flat_host.id = sub_customvar_flat_host_customvar.host_id WHERE (((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?)) OR ((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?))) AND (sub_customvar_flat_host.id IS NOT NULL) GROUP BY sub_customvar_flat_host.id HAVING COUNT(DISTINCT sub_customvar_flat.id) >= ?)) OR host.id IS NULL) ORDER BY host.id SQL; private const EQUAL_UNEQUAL_RESULT = <<<'SQL' SELECT host.id FROM host WHERE ((host.id NOT IN ((SELECT sub_customvar_flat_host.id AS sub_customvar_flat_host_id FROM customvar_flat sub_customvar_flat INNER JOIN host_customvar sub_customvar_flat_host_customvar ON sub_customvar_flat_host_customvar.customvar_id = sub_customvar_flat.customvar_id INNER JOIN host sub_customvar_flat_host ON sub_customvar_flat_host.id = sub_customvar_flat_host_customvar.host_id WHERE ((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?)) AND (sub_customvar_flat_host.id IS NOT NULL) GROUP BY sub_customvar_flat_host.id HAVING COUNT(DISTINCT sub_customvar_flat.id) >= ?)) OR host.id IS NULL)) AND (host.id IN ((SELECT sub_customvar_flat_host.id AS sub_customvar_flat_host_id FROM customvar_flat sub_customvar_flat INNER JOIN host_customvar sub_customvar_flat_host_customvar ON sub_customvar_flat_host_customvar.customvar_id = sub_customvar_flat.customvar_id INNER JOIN host sub_customvar_flat_host ON sub_customvar_flat_host.id = sub_customvar_flat_host_customvar.host_id WHERE (sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?) GROUP BY sub_customvar_flat_host.id HAVING COUNT(DISTINCT sub_customvar_flat.id) >= ?))) ORDER BY host.id SQL; private const DOUBLE_EQUAL_RESULT = <<<'SQL' SELECT host.id FROM host WHERE host.id IN ((SELECT sub_customvar_flat_host.id AS sub_customvar_flat_host_id FROM customvar_flat sub_customvar_flat INNER JOIN host_customvar sub_customvar_flat_host_customvar ON sub_customvar_flat_host_customvar.customvar_id = sub_customvar_flat.customvar_id INNER JOIN host sub_customvar_flat_host ON sub_customvar_flat_host.id = sub_customvar_flat_host_customvar.host_id WHERE ((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?)) OR ((sub_customvar_flat.flatname = ?) AND (sub_customvar_flat.flatvalue = ?)) GROUP BY sub_customvar_flat_host.id HAVING COUNT(DISTINCT sub_customvar_flat.id) >= ?)) ORDER BY host.id SQL; /** @var Connection */ private $connection; public function setUp(): void { $this->connection = new TestConnection(); Backend::setDb($this->connection); $this->setUpSqlAssertions(); } public function testSingleUnequalCondition() { $query = Host::on($this->connection) ->columns('host.id') ->orderBy('host.id') ->filter(Filter::unequal('host.vars.in.valid', 'foo')); $this->assertSql(self::SINGLE_UNEQUAL_RESULT, $query->assembleSelect(), ['in.valid', 'foo', 1]); } public function testDoubleUnequalCondition() { $query = Host::on($this->connection) ->columns('host.id') ->orderBy('host.id') ->filter(Filter::unequal('host.vars.in.valid', 'foo')) ->filter(Filter::unequal('host.vars.missing', 'bar')); $this->assertSql( self::DOUBLE_UNEQUAL_RESULT, $query->assembleSelect(), ['in.valid', 'foo', 'missing', 'bar', 1] ); } public function testEqualAndUnequalCondition() { $query = Host::on($this->connection) ->columns('host.id') ->orderBy('host.id') ->filter(Filter::unequal('host.vars.in.valid', 'bar')) ->filter(Filter::equal('host.vars.env', 'foo')); $this->assertSql( self::EQUAL_UNEQUAL_RESULT, $query->assembleSelect(), ['in.valid', 'bar', 1, 'env', 'foo', 1] ); } public function testDoubleEqualCondition() { $query = Host::on($this->connection) ->columns('host.id') ->orderBy('host.id') ->filter(Filter::equal('host.vars.env', 'foo')) ->filter(Filter::equal('host.vars.os', 'bar')); $this->assertSql( self::DOUBLE_EQUAL_RESULT, $query->assembleSelect(), ['env', 'foo', 'os', 'bar', 2] ); } } icingadb-web-1.5.0/test/php/library/Icingadb/Model/CustomvarFlatTest.php000066400000000000000000000106351527064444300261630ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Model; use Icinga\Module\Icingadb\Model\CustomvarFlat; use PHPUnit\Framework\TestCase; class CustomvarFlatTest extends TestCase { public const EMPTY_TEST_SOURCE = [ ["dict.not_empty.foo","bar","dict","{\"empty\":{},\"not_empty\":{\"foo\":\"bar\"}}"], ["dict.empty",null,"dict","{\"empty\":{},\"not_empty\":{\"foo\":\"bar\"}}"], ["list[1]",null,"list","[[\"foo\",\"bar\"],[]]"], ["list[0][0]","foo","list","[[\"foo\",\"bar\"],[]]"], ["list[0][1]","bar","list","[[\"foo\",\"bar\"],[]]"], ["empty_list",null,"empty_list","[]"], ["empty_dict",null,"empty_dict","{}"], ["null","null","null","null"] ]; public const EMPTY_TEST_RESULT = [ "dict" => [ "not_empty" => [ "foo" => "bar" ], "empty" => [] ], "list" => [ ["foo", "bar"], [] ], "empty_list" => [], "empty_dict" => [], "null" => "null" ]; public const SPECIAL_CHAR_TEST_SOURCE = [ [ "vhosts.xxxxxxxxxxxxx.mgmt.xxxxxx.com.http_port", "443", "vhosts", "{\"xxxxxxxxxxxxx.mgmt.xxxxxx.com\":{\"http_port\":\"443\"}}" ], ["ex.ample.com.bla","blub","ex","{\"ample.com\":{\"bla\":\"blub\"}}"], ["example[1]","zyx","example[1]","\"zyx\""], ["example.0.org","xyz","example.0.org","\"xyz\""], ["ob.je.ct","***","ob","{\"je\":{\"ct\":\"tcejbo\"}}"], ["real_list[2]","three","real_list","[\"one\",\"two\",\"three\"]"], ["real_list[1]","two","real_list","[\"one\",\"two\",\"three\"]"], ["real_list[0]","one","real_list","[\"one\",\"two\",\"three\"]"], ["[1].2.[3].4.[5].6","123456","[1].2","{\"[3].4\":{\"[5].6\":123456}}"], ["ex.ample.com","cba","ex.ample.com","\"cba\""], ["[4]","four","[4]","\"four\""], ["port.0", "123", "port", "{\"port\":[123]}"], [ "disks.disk /.disk_partitions", "result", "disks", "{\"disk /\":{\"disk_partitions\":\"result\"}}", ], [ "test.con[0]cat.foo[1]bar.foo[2]bar", "result", "test", "{\"con[0]cat\":{\"foo[1]bar\":{\"foo[2]bar\":\"result\"}}}", ] ]; public const SPECIAL_CHAR_TEST_RESULT = [ "vhosts" => [ "xxxxxxxxxxxxx.mgmt.xxxxxx.com" => [ "http_port" => 443 ] ], "ex" => [ "ample.com" => [ "bla" => "blub" ] ], "example[1]" => "zyx", "example.0.org" => "xyz", "ob" => [ "je" => [ "ct" => "***" ] ], "real_list" => [ "one", "two", "three" ], "[1].2" => [ "[3].4" => [ "[5].6" => "123456" ] ], "ex.ample.com" => "cba", "[4]" => "four", "port" => [123], "disks" => [ "disk /" => ["disk_partitions" => "result"] ], "test" => [ "con[0]cat" => [ "foo[1]bar" => ["foo[2]bar" => "result"] ] ] ]; public function testUnflatteningOfEmptyCustomVariables() { $this->assertEquals( self::EMPTY_TEST_RESULT, (new CustomvarFlat())->unFlattenVars($this->transformSource(self::EMPTY_TEST_SOURCE)), "Empty custom variables are not correctly unflattened" ); } public function testUnflatteningOfCustomVariablesWithSpecialCharacters() { $this->assertEquals( self::SPECIAL_CHAR_TEST_RESULT, (new CustomvarFlat())->unFlattenVars($this->transformSource(self::SPECIAL_CHAR_TEST_SOURCE)), "Custom variables with special characters are not correctly unflattened" ); } protected function transformSource(array $source): \Generator { foreach ($source as $data) { yield (object) [ 'flatname' => $data[0], 'flatvalue' => $data[1], 'customvar' => (object) [ 'name' => $data[2], 'value' => $data[3] ] ]; } } } icingadb-web-1.5.0/test/php/library/Icingadb/Notifications/000077500000000000000000000000001527064444300235645ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Notifications/ManagesIncidentsTest.php000066400000000000000000000057421527064444300303610ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\Notifications; use Icinga\Module\Icingadb\Notifications\ManagesIncidents; use PHPUnit\Framework\TestCase; use ReflectionMethod; /** * Compares ManagesIncidents::pack() and ManagesIncidents::deriveDeterministicEventUUID() * with Icinga DB's DeriveDeterministicEventUUID() */ class ManagesIncidentsTest extends TestCase { private const ENVIRONMENT_ID = '8ab3b8cbb1e1f0f8d1f6a62b1a3e3b7d5d8f1b0c'; private const TIMESTAMP = 1760534400123; private const GO_PACKED_HOST = '05000000000000000404000000000000002838616233623863626231653166306638643166366136326' . '23161336533623764356438663162306304000000000000000761636b5f73657404000000000000000c6578616d706c652d686f73740' . '342799e8070c7b000'; private const GO_PACKED_SERVICE = '05000000000000000404000000000000002838616233623863626231653166306638643166366136' . '32623161336533623764356438663162306304000000000000000961636b5f636c6561720400000000000000126578616d706c652d68' . '6f73742170696e67340342799e8070c7b000'; private const GO_UUID_HOST = '12a0a782-21d5-5cdb-a2a8-3e7b47d3a294'; private const GO_UUID_SERVICE = 'c344c752-5cde-5c49-b6a5-9333b33a36da'; public function testPackMatchesGoForHost(): void { $packed = $this->callTrait('pack', 'ack_set', $this->createHost()); $this->assertSame(self::GO_PACKED_HOST, bin2hex($packed)); } public function testPackMatchesGoForService(): void { $packed = $this->callTrait('pack', 'ack_clear', $this->createService()); $this->assertSame(self::GO_PACKED_SERVICE, bin2hex($packed)); } public function testDeriveDeterministicEventUUIDMatchesGoForHost(): void { $uuid = $this->callTrait('deriveDeterministicEventUUID', 'ack_set', $this->createHost()); $this->assertSame(self::GO_UUID_HOST, $uuid->toString()); } public function testDeriveDeterministicEventUUIDMatchesGoForService(): void { $uuid = $this->callTrait('deriveDeterministicEventUUID', 'ack_clear', $this->createService()); $this->assertSame(self::GO_UUID_SERVICE, $uuid->toString()); } private function createHost(): array { return [ 'host' => 'example-host', 'environment' => self::ENVIRONMENT_ID ]; } private function createService(): array { return [ 'host' => 'example-host', 'environment' => self::ENVIRONMENT_ID, 'service' => 'ping4' ]; } /** * Call the given private method of ManagesIncidents with the test timestamp */ private function callTrait(string $method, string $eventType, array $tags): mixed { $subject = new class { use ManagesIncidents; }; return (new ReflectionMethod($subject, $method))->invoke($subject, $eventType, $tags, self::TIMESTAMP); } } icingadb-web-1.5.0/test/php/library/Icingadb/ProvidedHook/000077500000000000000000000000001527064444300233505ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/ProvidedHook/IcingaHealthTest.php000066400000000000000000000012711527064444300272420ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Modules\Icingadb\ProvidedHook; use Icinga\Module\Icingadb\ProvidedHook\IcingaHealth; use PHPUnit\Framework\TestCase; class IcingaHealthTest extends TestCase { public function testNormalizeVersion() { $this->assertEquals('1.4.0', IcingaHealth::normalizeVersion('1.4.0')); $this->assertEquals('1.4.0', IcingaHealth::normalizeVersion('1.4.0-1d5a35da5')); $this->assertEquals('1.4.0', IcingaHealth::normalizeVersion('v1.4.0')); $this->assertEquals('1.4.0', IcingaHealth::normalizeVersion('v1.4.0-1d5a35da5')); } } icingadb-web-1.5.0/test/php/library/Icingadb/Util/000077500000000000000000000000001527064444300216705ustar00rootroot00000000000000icingadb-web-1.5.0/test/php/library/Icingadb/Util/PerfdataSetTest.php000066400000000000000000000077631527064444300254600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Util\PerfDataSet; use PHPUnit\Framework\TestCase; use Tests\Icinga\Module\Icingadb\Lib\PerfdataSetWithPublicData; class PerfdataSetTest extends TestCase { public function testWhetherValidSimplePerfdataLabelsAreProperlyParsed() { $pset = PerfdataSetWithPublicData::fromString('key1=val1 key2=val2 key3 =val3'); $this->assertSame( 'key1', $pset->perfdata[0]->getLabel(), 'PerfdataSet does not correctly parse valid simple labels' ); $this->assertSame( 'key2', $pset->perfdata[1]->getLabel(), 'PerfdataSet does not correctly parse valid simple labels' ); $this->assertSame( 'key3', $pset->perfdata[2]->getLabel(), 'PerfdataSet does not correctly parse valid simple labels' ); } public function testWhetherNonQuotedPerfdataLablesWithSpacesAreProperlyParsed() { $pset = PerfdataSetWithPublicData::fromString('key 1=val1 key 1 + 1=val2'); $this->assertSame( 'key 1', $pset->perfdata[0]->getLabel(), 'PerfdataSet does not correctly parse non quoted labels with spaces' ); $this->assertSame( 'key 1 + 1', $pset->perfdata[1]->getLabel(), 'PerfdataSet does not correctly parse non quoted labels with spaces' ); } public function testWhetherValidQuotedPerfdataLabelsAreProperlyParsed() { $pset = PerfdataSetWithPublicData::fromString('\'key 1\'=val1 "key 2"=val2 \'a=b\'=0%;;2'); $this->assertSame( 'key 1', $pset->perfdata[0]->getLabel(), 'PerfdataSet does not correctly parse valid quoted labels' ); $this->assertSame( 'key 2', $pset->perfdata[1]->getLabel(), 'PerfdataSet does not correctly parse valid quoted labels' ); $this->assertSame( 'a=b', $pset->perfdata[2]->getLabel(), 'PerfdataSet does not correctly parse labels with equal signs' ); } public function testWhetherInvalidQuotedPerfdataLabelsAreProperlyParsed() { $pset = PerfdataSetWithPublicData::fromString('\'key 1=1 key 2"=2'); $this->assertSame( 'key 1', $pset->perfdata[0]->getLabel(), 'PerfdataSet does not correctly parse invalid quoted labels' ); $this->assertSame( 'key 2"', $pset->perfdata[1]->getLabel(), 'PerfdataSet does not correctly parse invalid quoted labels' ); $pset = PerfdataSetWithPublicData::fromString('"key 1=1 "key 2"=2'); $this->assertSame( 'key 1=1', $pset->perfdata[0]->getLabel(), 'PerfdataSet does not correctly parse invalid quoted labels' ); $this->assertNull( $pset->perfdata[0]->getValue() ); $this->assertSame( '2"', $pset->perfdata[1]->getLabel(), 'PerfdataSet does not correctly parse invalid quoted labels' ); $this->assertSame( 2.0, $pset->perfdata[1]->getValue() ); } /** * @depends testWhetherValidSimplePerfdataLabelsAreProperlyParsed */ public function testWhetherAPerfdataSetIsIterable() { $pset = PerfdataSet::fromString('key=value'); foreach ($pset as $p) { $this->assertSame('key', $p->getLabel()); return; } $this->fail('PerfdataSet objects cannot be iterated'); } public function testWhetherPerfdataSetsCanBeInitializedWithEmptyStrings() { $pset = PerfdataSetWithPublicData::fromString(''); $this->assertEmpty($pset->perfdata, 'PerfdataSet::fromString does not accept emtpy strings'); } } icingadb-web-1.5.0/test/php/library/Icingadb/Util/PerfdataTest.php000066400000000000000000000466541527064444300250060ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Util\PerfData; use PHPUnit\Framework\TestCase; class PerfdataTest extends TestCase { public function testWhetherFromStringThrowsExceptionWhenGivenAnEmptyString() { $this->expectException(\InvalidArgumentException::class); Perfdata::fromString(''); } public function testWhetherFromStringThrowsExceptionWhenGivenAnInvalidString() { $this->expectException(\InvalidArgumentException::class); Perfdata::fromString('test'); } public function testWhetherFromStringParsesAGivenStringCorrectly() { $p = Perfdata::fromString('key=1234'); $this->assertSame( 'key', $p->getLabel(), 'Perfdata::fromString does not properly parse performance data labels' ); $this->assertSame( 1234.0, $p->getValue(), 'Perfdata::fromString does not properly parse performance data values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherGetValueReturnsValidValues() { $this->assertSame( 1337.0, Perfdata::fromString('test=1337')->getValue(), 'Perfdata::getValue does not return correct values' ); $this->assertSame( 1337.0, Perfdata::fromString('test=1337;;;;')->getValue(), 'Perfdata::getValue does not return correct values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherDecimalValuesAreCorrectlyParsed() { $this->assertSame( 1337.5, Perfdata::fromString('test=1337.5')->getValue(), 'Perfdata objects do not parse decimal values correctly' ); $this->assertSame( 1337.5, Perfdata::fromString('test=1337.5B')->getValue(), 'Perfdata objects do not parse decimal values correctly' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherGetValueReturnsNullForInvalidOrUnknownValues() { $this->assertNull( Perfdata::fromString('test=U')->getValue(), 'Perfdata::getValue does not return null for unknown values' ); $this->assertNull( Perfdata::fromString('test=i am not a value')->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertNull( PerfData::fromString('test=')->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertNull( PerfData::fromString('test=-kW')->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertNull( PerfData::fromString('test=kW')->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertNull( PerfData::fromString('test=-')->getValue(), 'Perfdata::getValue does not return null for invalid values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherUnitOfUnkownValuesIsCorrectlyIdentified() { $this->assertNull( Perfdata::fromString('test=U')->getUnit(), 'Perfdata::getUnit does not return null for unknown values' ); $this->assertNull( Perfdata::fromString('test=i am not a value')->getUnit(), 'Perfdata::getUnit does not return null for unknown values' ); $this->assertNull( PerfData::fromString('test=')->getUnit(), 'Perfdata::getUnit does not return null for unknown values' ); $this->assertSame( 'kW', PerfData::fromString('test=-kW')->getUnit(), 'Perfdata::getUnit does not return correct unit for invalid values' ); $this->assertSame( 'kW', PerfData::fromString('test=kW')->getUnit(), 'Perfdata::getUnit does not return correct unit for invalid values' ); $this->assertNull( PerfData::fromString('test=-')->getUnit(), 'Perfdata::getUnit does not return null for unknown values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhethergetWarningThresholdReturnsCorrectValues() { $zeroToTen = Perfdata::fromString('test=1;10')->getWarningThreshold(); $this->assertSame( 0.0, $zeroToTen->getMin(), 'Perfdata::getWarningThreshold does not return correct values' ); $this->assertSame( 10.0, $zeroToTen->getMax(), 'Perfdata::getWarningThreshold does not return correct values' ); $tenToInfinity = Perfdata::fromString('test=1;10:')->getWarningThreshold(); $this->assertSame( 10.0, $tenToInfinity->getMin(), 'Perfdata::getWarningThreshold does not return correct values' ); $this->assertNull( $tenToInfinity->getMax(), 'Perfdata::getWarningThreshold does not return correct values' ); $infinityToTen = Perfdata::fromString('test=1;~:10')->getWarningThreshold(); $this->assertNull( $infinityToTen->getMin(), 'Perfdata::getWarningThreshold does not return correct values' ); $this->assertSame( 10.0, $infinityToTen->getMax(), 'Perfdata::getWarningThreshold does not return correct values' ); $tenToTwenty = Perfdata::fromString('test=1;10:20')->getWarningThreshold(); $this->assertSame( 10.0, $tenToTwenty->getMin(), 'Perfdata::getWarningThreshold does not return correct values' ); $this->assertSame( 20.0, $tenToTwenty->getMax(), 'Perfdata::getWarningThreshold does not return correct values' ); $tenToTwentyInverted = Perfdata::fromString('test=1;@10:20')->getWarningThreshold(); $this->assertTrue( $tenToTwentyInverted->isInverted(), 'Perfdata::getWarningThreshold does not return correct values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherGetCriticalThresholdReturnsCorrectValues() { $zeroToTen = Perfdata::fromString('test=1;;10')->getCriticalThreshold(); $this->assertSame( 0.0, $zeroToTen->getMin(), 'Perfdata::getCriticalThreshold does not return correct values' ); $this->assertSame( 10.0, $zeroToTen->getMax(), 'Perfdata::getCriticalThreshold does not return correct values' ); $tenToInfinity = Perfdata::fromString('test=1;;10:')->getCriticalThreshold(); $this->assertSame( 10.0, $tenToInfinity->getMin(), 'Perfdata::getCriticalThreshold does not return correct values' ); $this->assertNull( $tenToInfinity->getMax(), 'Perfdata::getCriticalThreshold does not return correct values' ); $infinityToTen = Perfdata::fromString('test=1;;~:10')->getCriticalThreshold(); $this->assertNull( $infinityToTen->getMin(), 'Perfdata::getCriticalThreshold does not return correct values' ); $this->assertSame( 10.0, $infinityToTen->getMax(), 'Perfdata::getCriticalThreshold does not return correct values' ); $tenToTwenty = Perfdata::fromString('test=1;;10:20')->getCriticalThreshold(); $this->assertSame( 10.0, $tenToTwenty->getMin(), 'Perfdata::getCriticalThreshold does not return correct values' ); $this->assertSame( 20.0, $tenToTwenty->getMax(), 'Perfdata::getCriticalThreshold does not return correct values' ); $tenToTwentyInverted = Perfdata::fromString('test=1;;@10:20')->getCriticalThreshold(); $this->assertTrue( $tenToTwentyInverted->isInverted(), 'Perfdata::getCriticalThreshold does not return correct values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherGetMinimumValueReturnsCorrectValues() { $this->assertSame( 1337.0, Perfdata::fromString('test=1;;;1337')->getMinimumValue(), 'Perfdata::getMinimumValue does not return correct values' ); $this->assertSame( 1337.5, Perfdata::fromString('test=1;;;1337.5')->getMinimumValue(), 'Perfdata::getMinimumValue does not return correct values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherGetMaximumValueReturnsCorrectValues() { $this->assertSame( 1337.0, Perfdata::fromString('test=1;;;;1337')->getMaximumValue(), 'Perfdata::getMaximumValue does not return correct values' ); $this->assertSame( 1337.5, Perfdata::fromString('test=1;;;;1337.5')->getMaximumValue(), 'Perfdata::getMaximumValue does not return correct values' ); } /** * @depends testWhetherFromStringParsesAGivenStringCorrectly */ public function testWhetherMissingValuesAreProperlyHandled() { $perfdata = Perfdata::fromString('test=1;;3;5'); $this->assertEmpty( (string) $perfdata->getWarningThreshold(), 'Perfdata objects do not correctly identify omitted warning tresholds' ); $this->assertNull( $perfdata->getMaximumValue(), 'Perfdata objects do not return null for missing maximum values' ); } /** * @depends testWhetherGetValueReturnsValidValues */ public function testWhetherValuesAreIdentifiedAsNumber() { $this->assertTrue( Perfdata::fromString('test=666')->isNumber(), 'Perfdata objects do not identify ordinary digits as number' ); } /** * @depends testWhetherGetValueReturnsValidValues */ public function testWhetherValuesAreIdentifiedAsSeconds() { $this->assertTrue( Perfdata::fromString('test=666s')->isSeconds(), 'Perfdata objects do not identify seconds as seconds' ); } /** * @depends testWhetherGetValueReturnsValidValues */ public function testWhetherValuesAreIdentifiedAsPercentage() { $this->assertTrue( Perfdata::fromString('test=66%')->isPercentage(), 'Perfdata objects do not identify percentages as percentages' ); } /** * @depends testWhetherValuesAreIdentifiedAsPercentage */ public function testWhetherMinAndMaxAreNotRequiredIfUnitIsInPercent() { $perfdata = Perfdata::fromString('test=1%'); $this->assertSame( 0.0, $perfdata->getMinimumValue(), 'Perfdata objects do not set minimum value to 0 if UOM is %' ); $this->assertSame( 100.0, $perfdata->getMaximumValue(), 'Perfdata objects do not set maximum value to 100 if UOM is %' ); } /** * @depends testWhetherGetValueReturnsValidValues */ public function testWhetherValuesAreIdentifiedAsBytes() { $this->assertTrue( Perfdata::fromString('test=66666B')->isBytes(), 'Perfdata objects do not identify bytes as bytes' ); } /** * @depends testWhetherGetValueReturnsValidValues */ public function testWhetherValuesAreIdentifiedAsCounter() { $this->assertTrue( Perfdata::fromString('test=123c')->isCounter(), 'Perfdata objects do not identify counters as counters' ); } /** * @depends testWhetherValuesAreIdentifiedAsPercentage */ public function testWhetherPercentagesAreHandledCorrectly() { $this->assertSame( 66.0, Perfdata::fromString('test=66%')->getPercentage(), 'Perfdata objects do not correctly handle native percentages' ); $this->assertSame( 50.0, Perfdata::fromString('test=0;;;-250;250')->getPercentage(), 'Perfdata objects do not correctly convert suitable values to percentages' ); $this->assertNull( Perfdata::fromString('test=50')->getPercentage(), 'Perfdata objects do return a percentage though their unit is not % and no maximum is given' ); $this->assertNull( Perfdata::fromString('test=25;;;50;100')->getPercentage(), 'Perfdata objects do return a percentage though their value is lower than it\'s allowed minimum' ); $this->assertNull( Perfdata::fromString('test=25;;;0;')->getPercentage(), 'Perfdata objects do not ignore empty max values when returning percentages' ); $this->assertNull( Perfdata::fromString('test=25;;;0;0')->getPercentage(), 'Perfdata objects do not ignore impossible min/max combinations when returning percentages' ); } public function testWhetherInvalidValueInPerfDataHandledCorrectly() { $p1 = Perfdata::fromString('test=2,0'); $this->assertFalse($p1->isValid()); $this->assertNull( $p1->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( '2,0', $p1->toArray()['value'] ); $p2 = Perfdata::fromString('test=i am not a value'); $this->assertFalse($p2->isValid()); $this->assertNull( $p2->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( 'i am not a value', $p2->toArray()['value'] ); $p3 = Perfdata::fromString('test='); $this->assertFalse($p3->isValid()); $this->assertNull( $p3->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( '', $p3->toArray()['value'] ); $p4 = Perfdata::fromString('test=-kW'); $this->assertFalse($p4->isValid()); $this->assertNull( $p4->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( '-kW', $p4->toArray()['value'] ); $p5 = Perfdata::fromString('test=kW'); $this->assertFalse($p5->isValid()); $this->assertNull( $p5->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( 'kW', $p5->toArray()['value'] ); $p6 = Perfdata::fromString('test=-'); $this->assertFalse($p6->isValid()); $this->assertNull( $p6->getValue(), 'Perfdata::getValue does not return null for invalid values' ); $this->assertSame( '-', $p6->toArray()['value'] ); } public function testWhetherInvalidMinInPerfDataHandledCorrectly() { $p1 = Perfdata::fromString('test=1;;;2,0'); $this->assertFalse($p1->isValid()); $this->assertNull( $p1->getMinimumValue(), 'Perfdata::getMinimumValue does not return null for invalid min values' ); $this->assertSame( '2,0', $p1->toArray()['min'] ); $p2 = Perfdata::fromString('test=1;;;foo'); $this->assertFalse($p2->isValid()); $this->assertNull( $p2->getMinimumValue(), 'Perfdata::getMinimumValue does not return null for invalid min values' ); $this->assertSame( 'foo', $p2->toArray()['min'] ); } public function testWhetherInvalidMaxInPerfDataHandledCorrectly() { $p1 = Perfdata::fromString('test=1;;;;2,0'); $this->assertFalse($p1->isValid()); $this->assertNull( $p1->getMaximumValue(), 'Perfdata::getMaximumValue does not return null for invalid max values' ); $this->assertSame( '2,0', $p1->toArray()['max'] ); $p2 = Perfdata::fromString('test=1;;;;foo'); $this->assertFalse($p2->isValid()); $this->assertNull( $p2->getMaximumValue(), 'Perfdata::getMaximumValue does not return null for invalid max values' ); $this->assertSame( 'foo', $p2->toArray()['max'] ); } public function testWhetherInvalidWarningThresholdInPerfDataHandledCorrectly() { $p1 = Perfdata::fromString('test=1;2,0:'); $this->assertFalse($p1->getWarningThreshold()->isValid()); $this->assertFalse($p1->isValid()); $this->assertSame( '2,0:', (string) $p1->getWarningThreshold() ); $p2 = Perfdata::fromString('test=1;0:4,0'); $this->assertFalse($p2->getWarningThreshold()->isValid()); $this->assertFalse($p2->isValid()); $this->assertSame( '0:4,0', (string) $p2->getWarningThreshold() ); $p3 = Perfdata::fromString('test=1;foo'); $this->assertFalse($p2->getWarningThreshold()->isValid()); $this->assertFalse($p3->isValid()); $this->assertSame( 'foo', (string) $p3->getWarningThreshold() ); $p4 = Perfdata::fromString('test=1;10@'); $this->assertFalse($p2->getWarningThreshold()->isValid()); $this->assertFalse($p4->isValid()); $this->assertSame( '10@', (string) $p4->getWarningThreshold() ); } public function testWhetherInvalidCriticalThresholdInPerfDataHandledCorrectly() { $p1 = Perfdata::fromString('test=1;;2,0:'); $this->assertFalse($p1->getCriticalThreshold()->isValid()); $this->assertFalse($p1->isValid()); $this->assertSame( '2,0:', (string) $p1->getCriticalThreshold() ); $p2 = Perfdata::fromString('test=1;;0:4,0'); $this->assertFalse($p2->getCriticalThreshold()->isValid()); $this->assertFalse($p2->isValid()); $this->assertSame( '0:4,0', (string) $p2->getCriticalThreshold() ); $p3 = Perfdata::fromString('test=1;;foo'); $this->assertFalse($p2->getCriticalThreshold()->isValid()); $this->assertFalse($p3->isValid()); $this->assertSame( 'foo', (string) $p3->getCriticalThreshold() ); $p4 = Perfdata::fromString('test=1;;10@'); $this->assertFalse($p2->getCriticalThreshold()->isValid()); $this->assertFalse($p4->isValid()); $this->assertSame( '10@', (string) $p4->getCriticalThreshold() ); } } icingadb-web-1.5.0/test/php/library/Icingadb/Util/PluginOutputTest.php000066400000000000000000000137671527064444300257360ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Util\PluginOutput; use PHPUnit\Framework\TestCase; class PluginOutputTest extends TestCase { public function checkOutput(string $expected, string $input, int $characterLimit = 0): void { $p = new PluginOutput($input); if ($characterLimit) { $p->setCharacterLimit($characterLimit); } $this->assertSame($expected, $p->render(), 'PluginOutput::render does not return expected values'); } public function testRenderPlainText(): void { $input = 'This is a plain text'; $this->checkOutput($input, $input); } public function testRenderTextWithStates(): void { $input = <<<'INPUT' [OK] Dummy state \_ [OK] Fake "state" \_ [WARNING] Fake state again INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' [OK] Dummy state \_ [OK] Fake "state" \_ [WARNING] Fake state again EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } public function testRenderTextWithStatesAndCharacterLimit(): void { $input = <<<'INPUT' [OK] Dummy state \_ [OK] Fake "state" \_ [WARNING] Fake state again INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' [OK] Dummy EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input, 10); } public function testRenderTextWithHtml(): void { $input = <<<'INPUT' Hello

World

, this "is" 'a test. INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' Hello

World

, this "is" 'a test. EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } public function testRenderTextWithHtmlAndStates(): void { $input = <<<'INPUT' Hello

World

, this "is" a test. [OK] Dummy state \_ [OK] Fake "state" \_ [WARNING] Fake state again text ends here INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' Hello

World

, this "is" a test. [OK] Dummy state \_ [OK] Fake "state" \_ [WARNING] Fake state again text ends here EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } public function testRenderTextWithHtmlIncludingStatesAndSpecialChars(): void { $input = <<<'INPUT' Hello

World

, this "is" a test. [OK] Dummy state special chars: !@#$%^&*()_+{}|:"<>?`-=[]\;',./ text ends here INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' Hello

World

, this "is" a test. [OK] Dummy state special chars: !@#$%^&*()_+{}|:"<>?`-=[]\;',​./ text ends here EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } public function testOutputWithNewlines(): void { $input = 'foo\nbar\n\nraboof'; $expectedOutput = "foo\nbar\n\nraboof"; $this->checkOutput($expectedOutput, $input); } public function testOutputWithHtmlEntities(): void { $input = 'foo & bar'; $expectedOutput = $input; $this->checkOutput($expectedOutput, $input); } public function testSimpleHtmlOutput(): void { $input = <<<'INPUT' OK - Teststatus
Info INPUT; $expectedOutput = <<<'EXPECTED_OUTPUT' OK - Teststatus Info EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } public function testTextStatusTags(): void { foreach (['OK', 'WARNING', 'CRITICAL', 'UNKNOWN', 'UP', 'DOWN'] as $s) { $l = strtolower($s); $input = sprintf('[%s] Test', $s); $expectedOutput = sprintf( '[%s] Test', $l, $s ); $this->checkOutput($expectedOutput, $input); $input = sprintf('(%s) Test', $s); $this->checkOutput($expectedOutput, $input); } } public function testHtmlStatusTags(): void { $dummyHtml = ''; foreach (['OK', 'WARNING', 'CRITICAL', 'UNKNOWN', 'UP', 'DOWN'] as $s) { $l = strtolower($s); $input = sprintf('%s [%s] Test', $dummyHtml, $s); $expectedOutput = sprintf( '%s [%s] Test', $dummyHtml, $l, $s ); $this->checkOutput($expectedOutput, $input); $input = sprintf('%s (%s) Test', $dummyHtml, $s); $this->checkOutput($expectedOutput, $input); } } public function testNewlineProcessingInHtmlOutput(): void { $input = 'This is plugin output\n\n
    \n
  • with a HTML list
  • \n
\n\n' . 'and more text that\nis split onto multiple\n\nlines'; $expectedOutput = <<<'EXPECTED_OUTPUT' This is plugin output
  • with a HTML list
and more text that is split onto multiple lines EXPECTED_OUTPUT; $this->checkOutput($expectedOutput, $input); } } icingadb-web-1.5.0/test/php/library/Icingadb/Util/ThresholdRangeTest.php000066400000000000000000000313631527064444300261600ustar00rootroot00000000000000 // SPDX-License-Identifier: GPL-3.0-or-later namespace Tests\Icinga\Module\Icingadb\Util; use Icinga\Module\Icingadb\Util\ThresholdRange; use PHPUnit\Framework\TestCase; class ThresholdRangeTest extends TestCase { public function testFromStringProperlyParsesDoubleExclusiveRanges() { $outside0And10 = ThresholdRange::fromString('10'); $this->assertSame( 0.0, $outside0And10->getMin(), 'ThresholdRange::fromString() does not identify zero as default minimum for double exclusive ranges' ); $this->assertSame( 10.0, $outside0And10->getMax(), 'ThresholdRange::fromString() does not identify ten as explicit maximum for double exclusive ranges' ); $this->assertFalse( $outside0And10->isInverted(), 'ThresholdRange::fromString() identifies double exclusive ranges as inclusive' ); $outside10And20 = ThresholdRange::fromString('10:20'); $this->assertSame( 10.0, $outside10And20->getMin(), 'ThresholdRange::fromString() does not identify ten as explicit minimum for double exclusive ranges' ); $this->assertSame( 20.0, $outside10And20->getMax(), 'ThresholdRange::fromString() does not identify twenty as explicit maximum for double exclusive ranges' ); $this->assertFalse( $outside10And20->isInverted(), 'ThresholdRange::fromString() identifies double exclusive ranges as inclusive' ); } /** * @depends testFromStringProperlyParsesDoubleExclusiveRanges */ public function testContainsCorrectlyEvaluatesDoubleExclusiveRanges() { $outside0And10 = ThresholdRange::fromString('10'); $this->assertFalse( $outside0And10->contains(-1), 'ThresholdRange::contains() identifies negative values as greater than or equal to zero' ); $this->assertFalse( $outside0And10->contains(11), 'ThresholdRange::contains() identifies eleven as smaller than or equal to ten' ); $this->assertTrue( $outside0And10->contains(10), 'ThresholdRange::contains() identifies 10 as outside the range 0..10' ); $outside10And20 = ThresholdRange::fromString('10:20'); $this->assertFalse( $outside10And20->contains(9), 'ThresholdRange::contains() identifies nine as greater than or equal to 10' ); $this->assertFalse( $outside10And20->contains(21), 'ThresholdRange::contains() identifies twenty-one as smaller than or equal to twenty' ); $this->assertTrue( $outside10And20->contains(20), 'ThresholdRange::contains() identifies 20 as outside the range 10..20' ); } public function testFromStringProperlyParsesSingleExclusiveRanges() { $smallerThan10 = ThresholdRange::fromString('10:'); $this->assertSame( 10.0, $smallerThan10->getMin(), 'ThresholdRange::fromString() does not identify ten as explicit minimum for single exclusive ranges' ); $this->assertNull( $smallerThan10->getMax(), 'ThresholdRange::fromString() does not identify infinity as default maximum for single exclusive ranges' ); $this->assertFalse( $smallerThan10->isInverted(), 'ThresholdRange::fromString() identifies single exclusive ranges as inclusive' ); $greaterThan10 = ThresholdRange::fromString('~:10'); $this->assertNull( $greaterThan10->getMin(), 'ThresholdRange::fromString() does not identify infinity as explicit minimum for single exclusive ranges' ); $this->assertSame( 10.0, $greaterThan10->getMax(), 'ThresholdRange::fromString() does not identify ten as explicit maximum for single exclusive ranges' ); $this->assertFalse( $greaterThan10->isInverted(), 'ThresholdRange::fromString() identifies single exclusive ranges as inclusive' ); } /** * @depends testFromStringProperlyParsesSingleExclusiveRanges */ public function testContainsCorrectlyEvaluatesSingleExclusiveRanges() { $smallerThan10 = ThresholdRange::fromString('10:'); $this->assertFalse( $smallerThan10->contains(9), 'ThresholdRange::contains() identifies nine as greater than or equal to ten' ); $this->assertTrue( $smallerThan10->contains(PHP_INT_MAX), 'ThresholdRange::contains() identifies infinity as outside the range 10..~' ); $greaterThan10 = ThresholdRange::fromString('~:10'); $this->assertFalse( $greaterThan10->contains(11), 'ThresholdRange::contains() identifies eleven as smaller than or equal to ten' ); $this->assertTrue( $greaterThan10->contains(~PHP_INT_MAX), 'ThresholdRange::contains() identifies negative infinity as outside the range ~..10' ); } public function testFromStringProperlyParsesInclusiveRanges() { $inside0And10 = ThresholdRange::fromString('@10'); $this->assertSame( 0.0, $inside0And10->getMin(), 'ThresholdRange::fromString() does not identify zero as default minimum for inclusive ranges' ); $this->assertSame( 10.0, $inside0And10->getMax(), 'ThresholdRange::fromString() does not identify ten as explicit maximum for inclusive ranges' ); $this->assertTrue( $inside0And10->isInverted(), 'ThresholdRange::fromString() identifies inclusive ranges as double exclusive' ); $inside10And20 = ThresholdRange::fromString('@10:20'); $this->assertSame( 10.0, $inside10And20->getMin(), 'ThresholdRange::fromString() does not identify ten as explicit minimum for inclusive ranges' ); $this->assertSame( 20.0, $inside10And20->getMax(), 'ThresholdRange::fromString() does not identify twenty as explicit maximum for inclusive ranges' ); $this->assertTrue( $inside10And20->isInverted(), 'ThresholdRange::fromString() identifies inclusive ranges as double exclusive' ); $greaterThan10 = ThresholdRange::fromString('@10:'); $this->assertSame( 10.0, $greaterThan10->getMin(), 'ThresholdRange::fromString() does not identify ten as explicit minimum for inclusive ranges' ); $this->assertNull( $greaterThan10->getMax(), 'ThresholdRange::fromString() does not identify infinity as default maximum for inclusive ranges' ); $this->assertTrue( $greaterThan10->isInverted(), 'ThresholdRange::fromString() identifies inclusive ranges as single exclusive' ); $smallerThan10 = ThresholdRange::fromString('@~:10'); $this->assertNull( $smallerThan10->getMin(), 'ThresholdRange::fromString() does not identify infinity as explicit minimum for inclusive ranges' ); $this->assertSame( 10.0, $smallerThan10->getMax(), 'ThresholdRange::fromString() does not identify ten as explicit maximum for inclusive ranges' ); $this->assertTrue( $smallerThan10->isInverted(), 'ThresholdRange::fromString() identifies inclusive ranges as single exclusive' ); } /** * @depends testFromStringProperlyParsesInclusiveRanges */ public function testContainsCorrectlyEvaluatesInclusiveRanges() { $inside0And10 = ThresholdRange::fromString('@10'); $this->assertFalse( $inside0And10->contains(10), 'ThresholdRange::contains() identifies ten as greater than ten' ); $this->assertTrue( $inside0And10->contains(11), 'ThresholdRange::contains() identifies eleven as smaller than or equal to ten' ); $this->assertTrue( $inside0And10->contains(-1), 'ThresholdRange::contains() identifies negative values as greater than or equal to zero' ); $inside10And20 = ThresholdRange::fromString('@10:20'); $this->assertFalse( $inside10And20->contains(20), 'ThresholdRange::contains() identifies twenty as greater than twenty' ); $this->assertTrue( $inside10And20->contains(21), 'ThresholdRange::contains() identifies twenty-one as smaller than or equal to twenty' ); $this->assertTrue( $inside10And20->contains(9), 'ThresholdRange::contains() identifies nine as greater than or equal to ten' ); $greaterThan10 = ThresholdRange::fromString('@10:'); $this->assertFalse( $greaterThan10->contains(PHP_INT_MAX), 'ThresholdRange::contains() identifies infinity as smaller than ten' ); $this->assertTrue( $greaterThan10->contains(9), 'ThresholdRange::contains() identifies nine as greater than or equal to ten' ); $smallerThan10 = ThresholdRange::fromString('@~:10'); $this->assertFalse( $smallerThan10->contains(~PHP_INT_MAX), 'ThresholdRange::contains() identifies negative infinity as greater than ten' ); $this->assertTrue( $smallerThan10->contains(11), 'ThresholdRange::contains() identifies eleven as smaller than or equal to ten' ); } public function testFromStringProperlyParsesEmptyThresholds() { $emptyThreshold = ThresholdRange::fromString(''); $this->assertNull( $emptyThreshold->getMin(), 'ThresholdRange::fromString() does not identify negative infinity as implicit minimum for empty strings' ); $this->assertNull( $emptyThreshold->getMax(), 'ThresholdRange::fromString() does not identify infinity as implicit maximum for empty strings' ); $this->assertFalse( $emptyThreshold->isInverted(), 'ThresholdRange::fromString() identifies empty strings as inclusive ranges rather than exclusive' ); } /** * @depends testFromStringProperlyParsesEmptyThresholds */ public function testContainsEvaluatesEverythingToTrueForEmptyThresholds() { $emptyThreshold = ThresholdRange::fromString(''); $this->assertTrue( $emptyThreshold->contains(0), 'ThresholdRange::contains() does not identify zero as valid without any threshold' ); $this->assertTrue( $emptyThreshold->contains(10), 'ThresholdRange::contains() does not identify ten as valid without any threshold' ); $this->assertTrue( $emptyThreshold->contains(PHP_INT_MAX), 'ThresholdRange::contains() does not identify infinity as valid without any threshold' ); $this->assertTrue( $emptyThreshold->contains(~PHP_INT_MAX), 'ThresholdRange::contains() does not identify negative infinity as valid without any threshold' ); } public function testInvalidThresholdNotationsAreRenderedAsIs() { $this->assertSame( ':', (string) ThresholdRange::fromString(':') ); $this->assertSame( '~:', (string) ThresholdRange::fromString('~:') ); $this->assertSame( '20:10', (string) ThresholdRange::fromString('20:10') ); $this->assertSame( '10@', (string) ThresholdRange::fromString('10@') ); $this->assertSame( 'foo', (string) ThresholdRange::fromString('foo') ); $this->assertSame( '4,4:2,2', (string) ThresholdRange::fromString('4,4:2,2') ); } public function testInvalidThresholdNotationsConsideredInValid() { $this->assertFalse( ThresholdRange::fromString('10@')->isValid(), 'Invalid threshold notation 10@ considered as valid' ); $this->assertFalse( ThresholdRange::fromString('foo')->isValid(), 'Invalid threshold notation foo considered as valid' ); $this->assertFalse( ThresholdRange::fromString('4,4:2,2')->isValid(), 'Invalid threshold notation 4,4:2,2 considered as valid' ); } }